aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoracenteno2020-04-21 17:35:34 -0500
committerGitHub2020-04-21 17:35:34 -0500
commit660589b9c2a507529e8e51ca6ce66ca97ad982c5 (patch)
tree27f63957278581bc2fce2b88744bfe20c8a81558
parentd97fdc18359233f07c1a1c7b83fe7e88eb225043 (diff)
parentf2a3ae13231a7d270a5bb6911c248aa713f1ef91 (diff)
downloadgenenetwork2-660589b9c2a507529e8e51ca6ce66ca97ad982c5.tar.gz
Merge pull request #1 from genenetwork/testing
Updating my testing branch
-rw-r--r--MANIFEST.in147
-rw-r--r--README.md40
-rw-r--r--RELEASE-NOTES.md42
l---------[-rw-r--r--]VERSION2
-rwxr-xr-xbin/genenetwork2233
-rwxr-xr-xbin/test-website114
-rw-r--r--doc/API_readme.md169
-rw-r--r--doc/GUIX-Reproducible-from-source.org356
-rw-r--r--doc/README.org462
-rw-r--r--doc/database.org165
-rw-r--r--doc/development.org43
-rw-r--r--doc/elasticsearch.org247
-rw-r--r--etc/VERSION1
-rw-r--r--etc/default_settings.py67
-rw-r--r--etc/nginx-genenetwork.conf54
-rw-r--r--jquery.qtip.css623
-rwxr-xr-xscripts/maintenance/QTL_Reaper_v6.py108
-rw-r--r--scripts/maintenance/README.txt66
-rw-r--r--scripts/maintenance/Update_Case_Attributes_MySQL_tab.py27
-rwxr-xr-xscripts/maintenance/delete_genotypes.py33
-rwxr-xr-xscripts/maintenance/delete_phenotypes.py35
-rwxr-xr-xscripts/maintenance/load_genotypes.py154
-rwxr-xr-xscripts/maintenance/load_phenotypes.py171
-rwxr-xr-xscripts/maintenance/readProbeSetMean_v7.py274
-rwxr-xr-xscripts/maintenance/readProbeSetSE_v7.py254
-rw-r--r--test/lib/gntest.rb6
-rw-r--r--test/lib/link_checker.rb50
-rw-r--r--test/lib/main_web_functionality.rb58
-rw-r--r--test/lib/mapping.rb58
-rw-r--r--test/lib/navigation.rb43
-rw-r--r--test/requests/link_checker.py81
-rw-r--r--test/requests/main_web_functionality.py40
-rw-r--r--test/requests/mapping_tests.py42
-rw-r--r--test/requests/navigation_tests.py15
-rw-r--r--test/requests/parametrized_test.py32
-rwxr-xr-xtest/requests/test-website.py119
-rw-r--r--test/requests/test_forgot_password.py52
-rw-r--r--test/requests/test_login_github.py47
-rw-r--r--test/requests/test_login_local.py60
-rw-r--r--test/requests/test_login_orcid.py47
-rw-r--r--test/requests/test_registration.py41
-rw-r--r--test/unittest/test_registration.py27
-rw-r--r--wqflask/__init__.py1
-rw-r--r--wqflask/base/anon_collection.py21
-rw-r--r--wqflask/base/data_set.py349
-rw-r--r--wqflask/base/mrna_assay_tissue_data.py66
-rw-r--r--wqflask/base/species.py107
-rw-r--r--wqflask/base/template.py123
-rw-r--r--wqflask/base/trait.py356
-rw-r--r--wqflask/base/trait_collection.py53
-rw-r--r--wqflask/base/webqtlCaseData.py17
-rw-r--r--wqflask/base/webqtlConfig.py59
-rw-r--r--wqflask/base/webqtlFormData.py352
-rw-r--r--wqflask/basicStatistics/BasicStatisticsFunctions.py207
-rw-r--r--wqflask/db/webqtlDatabaseFunction.py8
-rw-r--r--wqflask/flask_security/__init__.py25
-rw-r--r--wqflask/flask_security/changeable.py45
-rw-r--r--wqflask/flask_security/confirmable.py83
-rw-r--r--wqflask/flask_security/core.py382
-rw-r--r--wqflask/flask_security/datastore.py261
-rw-r--r--wqflask/flask_security/decorators.py207
-rw-r--r--wqflask/flask_security/forms.py286
-rw-r--r--wqflask/flask_security/passwordless.py59
-rw-r--r--wqflask/flask_security/recoverable.py80
-rw-r--r--wqflask/flask_security/registerable.py44
-rw-r--r--wqflask/flask_security/script.py130
-rw-r--r--wqflask/flask_security/signals.py29
-rw-r--r--wqflask/flask_security/templates/.DS_Storebin6148 -> 0 bytes
-rw-r--r--wqflask/flask_security/templates/security/.DS_Storebin6148 -> 0 bytes
-rw-r--r--wqflask/flask_security/templates/security/_macros.html16
-rw-r--r--wqflask/flask_security/templates/security/_menu.html15
-rw-r--r--wqflask/flask_security/templates/security/_messages.html9
-rw-r--r--wqflask/flask_security/templates/security/change_password.html11
-rw-r--r--wqflask/flask_security/templates/security/email/change_notice.html4
-rw-r--r--wqflask/flask_security/templates/security/email/change_notice.txt5
-rw-r--r--wqflask/flask_security/templates/security/email/confirmation_instructions.html3
-rw-r--r--wqflask/flask_security/templates/security/email/confirmation_instructions.txt3
-rw-r--r--wqflask/flask_security/templates/security/email/login_instructions.html5
-rw-r--r--wqflask/flask_security/templates/security/email/login_instructions.txt5
-rw-r--r--wqflask/flask_security/templates/security/email/reset_instructions.html1
-rw-r--r--wqflask/flask_security/templates/security/email/reset_instructions.txt3
-rw-r--r--wqflask/flask_security/templates/security/email/reset_notice.html1
-rw-r--r--wqflask/flask_security/templates/security/email/reset_notice.txt1
-rw-r--r--wqflask/flask_security/templates/security/email/welcome.html7
-rw-r--r--wqflask/flask_security/templates/security/email/welcome.txt7
-rw-r--r--wqflask/flask_security/templates/security/forgot_password.html9
-rw-r--r--wqflask/flask_security/templates/security/login_user.html12
-rw-r--r--wqflask/flask_security/templates/security/register_user.html13
-rw-r--r--wqflask/flask_security/templates/security/reset_password.html10
-rw-r--r--wqflask/flask_security/templates/security/send_confirmation.html9
-rw-r--r--wqflask/flask_security/templates/security/send_login.html9
-rw-r--r--wqflask/flask_security/utils.py379
-rw-r--r--wqflask/flask_security/views.py359
-rw-r--r--wqflask/maintenance/convert_dryad_to_bimbam.py70
-rw-r--r--wqflask/maintenance/convert_geno_to_bimbam.py190
-rw-r--r--wqflask/maintenance/gen_select_dataset.py99
-rw-r--r--wqflask/maintenance/generate_kinship_from_bimbam.py61
-rw-r--r--wqflask/maintenance/geno_to_json.py197
-rw-r--r--wqflask/maintenance/get_group_samplelists.py12
-rw-r--r--wqflask/maintenance/quantile_normalize.py129
-rw-r--r--wqflask/mock/__init__.py (renamed from wqflask/basicStatistics/__init__.py)0
-rw-r--r--wqflask/mock/es_double.py15
-rw-r--r--wqflask/other_config/dot.pylintrc249
-rw-r--r--wqflask/other_config/nginx-old.conf108
-rw-r--r--wqflask/other_config/nginx_conf/gn2-zach.conf52
-rw-r--r--wqflask/other_config/nginx_conf/gn2.conf41
-rw-r--r--wqflask/other_config/nginx_conf/gn2_lei.conf41
-rw-r--r--wqflask/other_config/nginx_conf/gn2_sam.conf42
-rw-r--r--wqflask/other_config/nginx_conf/penguin.conf44
-rw-r--r--wqflask/other_config/pylintrc264
-rw-r--r--wqflask/run_gunicorn.py22
-rw-r--r--wqflask/runserver.py24
-rw-r--r--wqflask/utility/AJAX_table.py155
-rw-r--r--wqflask/utility/Plot.py992
-rw-r--r--wqflask/utility/after.py8
-rw-r--r--wqflask/utility/benchmark.py2
-rw-r--r--wqflask/utility/corestats.py (renamed from wqflask/basicStatistics/corestats.py)24
-rw-r--r--wqflask/utility/corr_result_helpers.py2
-rw-r--r--wqflask/utility/elasticsearch_tools.py112
-rw-r--r--wqflask/utility/gen_geno_ob.py181
-rw-r--r--wqflask/utility/genofile_parser.py2
-rw-r--r--wqflask/utility/helper_functions.py19
-rw-r--r--wqflask/utility/hmac.py38
-rw-r--r--wqflask/utility/logger.py4
-rw-r--r--wqflask/utility/redis_tools.py80
-rw-r--r--wqflask/utility/startup_config.py39
-rw-r--r--wqflask/utility/svg.py2
-rw-r--r--wqflask/utility/tools.py129
-rw-r--r--wqflask/utility/type_checking.py42
-rw-r--r--wqflask/utility/webqtlUtil.py925
-rw-r--r--wqflask/wqflask/__init__.py5
-rw-r--r--wqflask/wqflask/api/__init__.py0
-rw-r--r--wqflask/wqflask/api/correlation.py237
-rw-r--r--wqflask/wqflask/api/gen_menu.py252
-rw-r--r--wqflask/wqflask/api/mapping.py141
-rw-r--r--wqflask/wqflask/api/router.py969
-rw-r--r--wqflask/wqflask/collect.py393
-rw-r--r--wqflask/wqflask/comparison_bar_chart/__init__.py0
-rw-r--r--wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py117
-rw-r--r--wqflask/wqflask/correlation/corr_scatter_plot.py123
-rw-r--r--wqflask/wqflask/correlation/correlation_functions.py842
-rw-r--r--wqflask/wqflask/correlation/show_corr_results.py1214
-rw-r--r--wqflask/wqflask/correlation_matrix/show_corr_matrix.py283
-rw-r--r--wqflask/wqflask/ctl/ctl_analysis.py63
-rw-r--r--wqflask/wqflask/database.py4
-rw-r--r--wqflask/wqflask/do_search.py270
-rw-r--r--wqflask/wqflask/docs.py33
-rw-r--r--wqflask/wqflask/export_traits.py33
-rw-r--r--wqflask/wqflask/external_tools/__init__.py0
-rw-r--r--wqflask/wqflask/external_tools/send_to_bnw.py72
-rw-r--r--wqflask/wqflask/external_tools/send_to_geneweaver.py112
-rw-r--r--wqflask/wqflask/external_tools/send_to_webgestalt.py126
-rw-r--r--wqflask/wqflask/gsearch.py186
-rw-r--r--wqflask/wqflask/heatmap/heatmap.py258
-rw-r--r--wqflask/wqflask/interval_analyst/GeneUtil.py2
-rw-r--r--wqflask/wqflask/interval_analyst/IntervalAnalystPage.py405
-rw-r--r--wqflask/wqflask/marker_regression/MarkerRegressionPage.py1648
-rw-r--r--wqflask/wqflask/marker_regression/display_mapping_results.py (renamed from wqflask/wqflask/marker_regression/marker_regression_gn1.py)1712
-rw-r--r--wqflask/wqflask/marker_regression/gemma_mapping.py239
-rw-r--r--wqflask/wqflask/marker_regression/marker_regression.py610
-rw-r--r--wqflask/wqflask/marker_regression/plink_mapping.py47
-rw-r--r--wqflask/wqflask/marker_regression/qtlreaper_mapping.py158
-rw-r--r--wqflask/wqflask/marker_regression/rqtl_mapping.py214
-rw-r--r--wqflask/wqflask/marker_regression/run_mapping.py700
-rw-r--r--wqflask/wqflask/model.py33
-rw-r--r--wqflask/wqflask/network_graph/network_graph.py55
-rw-r--r--wqflask/wqflask/parser.py10
-rw-r--r--wqflask/wqflask/search_results.py235
-rw-r--r--wqflask/wqflask/show_trait/SampleList.py162
-rw-r--r--wqflask/wqflask/show_trait/export_trait_data.py21
-rw-r--r--wqflask/wqflask/show_trait/show_trait.py598
-rw-r--r--wqflask/wqflask/show_trait/show_trait_page.py141
-rw-r--r--wqflask/wqflask/snp_browser/__init__.py0
-rw-r--r--wqflask/wqflask/snp_browser/snp_browser.py896
-rw-r--r--wqflask/wqflask/static/gif/89.gifbin0 -> 27183 bytes
-rw-r--r--wqflask/wqflask/static/new/css/corr_scatter_plot.css40
-rw-r--r--wqflask/wqflask/static/new/css/corr_scatter_plot2.css41
-rw-r--r--wqflask/wqflask/static/new/css/main.css45
-rw-r--r--wqflask/wqflask/static/new/css/marker_regression.css36
-rw-r--r--wqflask/wqflask/static/new/css/network_graph.css1
-rw-r--r--wqflask/wqflask/static/new/css/show_trait.css34
-rw-r--r--wqflask/wqflask/static/new/css/snp_browser.css54
-rw-r--r--wqflask/wqflask/static/new/css/typeahead-bootstrap.css94
-rw-r--r--wqflask/wqflask/static/new/images/CITGLogo.pngbin0 -> 11962 bytes
-rw-r--r--wqflask/wqflask/static/new/images/Nif.pngbin0 -> 4444 bytes
-rw-r--r--wqflask/wqflask/static/new/images/PythonLogo.pngbin0 -> 7685 bytes
-rw-r--r--wqflask/wqflask/static/new/images/a1.gifbin0 -> 430 bytes
-rw-r--r--wqflask/wqflask/static/new/images/arrowdown.gifbin0 -> 844 bytes
-rw-r--r--wqflask/wqflask/static/new/images/edit.gifbin0 -> 157 bytes
-rw-r--r--wqflask/wqflask/static/new/images/ipad_icon3.pngbin0 -> 6728 bytes
-rw-r--r--wqflask/wqflask/static/new/images/question_mark.jpgbin0 -> 47158 bytes
-rw-r--r--wqflask/wqflask/static/new/images/step1.gifbin0 -> 758 bytes
-rw-r--r--wqflask/wqflask/static/new/images/step2.gifbin0 -> 826 bytes
-rw-r--r--wqflask/wqflask/static/new/images/step3.gifbin0 -> 818 bytes
-rw-r--r--wqflask/wqflask/static/new/javascript/bar_chart.coffee275
-rw-r--r--wqflask/wqflask/static/new/javascript/bar_chart.js11
-rw-r--r--wqflask/wqflask/static/new/javascript/box_plot.coffee57
-rw-r--r--wqflask/wqflask/static/new/javascript/chr_lod_chart.coffee286
-rw-r--r--wqflask/wqflask/static/new/javascript/chr_manhattan_plot.coffee295
-rw-r--r--wqflask/wqflask/static/new/javascript/compare_traits_scatterplot.coffee145
-rw-r--r--wqflask/wqflask/static/new/javascript/comparison_bar_chart.js25
-rw-r--r--wqflask/wqflask/static/new/javascript/corr_matrix.coffee275
-rw-r--r--wqflask/wqflask/static/new/javascript/corr_scatter_plot.coffee67
-rw-r--r--wqflask/wqflask/static/new/javascript/create_corr_matrix.coffee42
-rw-r--r--wqflask/wqflask/static/new/javascript/create_corr_matrix.js113
-rw-r--r--wqflask/wqflask/static/new/javascript/create_heatmap.coffee18
-rw-r--r--wqflask/wqflask/static/new/javascript/create_lodchart.coffee50
-rw-r--r--wqflask/wqflask/static/new/javascript/create_manhattan_plot.coffee82
-rw-r--r--wqflask/wqflask/static/new/javascript/curvechart.coffee335
-rw-r--r--wqflask/wqflask/static/new/javascript/dataset_menu_structure.json5690
-rw-r--r--wqflask/wqflask/static/new/javascript/dataset_select_menu_orig.js344
-rw-r--r--wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.coffee37
-rw-r--r--wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js921
-rw-r--r--wqflask/wqflask/static/new/javascript/draw_probability_plot.coffee94
-rw-r--r--wqflask/wqflask/static/new/javascript/draw_probability_plot.js12
-rw-r--r--wqflask/wqflask/static/new/javascript/get_covariates_from_collection.js224
-rw-r--r--wqflask/wqflask/static/new/javascript/get_traits_from_collection.coffee228
-rw-r--r--wqflask/wqflask/static/new/javascript/get_traits_from_collection.js233
-rw-r--r--wqflask/wqflask/static/new/javascript/histogram.coffee141
-rw-r--r--wqflask/wqflask/static/new/javascript/init_genome_browser.js84
-rw-r--r--wqflask/wqflask/static/new/javascript/iplotMScanone_noeff.coffee193
-rw-r--r--wqflask/wqflask/static/new/javascript/lod_chart.coffee517
-rw-r--r--wqflask/wqflask/static/new/javascript/lodheatmap.coffee265
-rw-r--r--wqflask/wqflask/static/new/javascript/lodheatmap.js2
-rw-r--r--wqflask/wqflask/static/new/javascript/login.coffee42
-rw-r--r--wqflask/wqflask/static/new/javascript/network_graph.js159
-rw-r--r--wqflask/wqflask/static/new/javascript/panelutil.coffee356
-rw-r--r--wqflask/wqflask/static/new/javascript/password_strength.coffee33
-rw-r--r--wqflask/wqflask/static/new/javascript/plotly_probability_plot.js295
-rw-r--r--wqflask/wqflask/static/new/javascript/scatter-matrix.js2
-rw-r--r--wqflask/wqflask/static/new/javascript/scatterplot.coffee430
-rw-r--r--wqflask/wqflask/static/new/javascript/scatterplot.js2
-rw-r--r--wqflask/wqflask/static/new/javascript/search_results.coffee86
-rw-r--r--wqflask/wqflask/static/new/javascript/search_results.js104
-rw-r--r--wqflask/wqflask/static/new/javascript/show_trait.coffee476
-rw-r--r--wqflask/wqflask/static/new/javascript/show_trait.js1870
-rw-r--r--wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.coffee241
-rw-r--r--wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js187
-rw-r--r--wqflask/wqflask/static/new/javascript/stats.coffee71
-rw-r--r--wqflask/wqflask/static/new/javascript/stats.js98
-rw-r--r--wqflask/wqflask/static/new/javascript/thank_you.coffee4
-rw-r--r--wqflask/wqflask/static/new/javascript/typeahead_rn6.json1
-rw-r--r--wqflask/wqflask/static/new/javascript/validation.coffee42
-rw-r--r--wqflask/wqflask/static/new/javascript/validation.js17
-rw-r--r--wqflask/wqflask/static/new/js_external/jscolor.js1855
-rw-r--r--wqflask/wqflask/static/new/js_external/md5.min.js2
-rw-r--r--wqflask/wqflask/static/new/js_external/plotly-latest.min.js7
-rw-r--r--wqflask/wqflask/static/new/js_external/typeahead.bundle.js2451
-rw-r--r--wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables.css26
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/Gruntfile.js186
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/README.md65
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/ajaxSubmit-integration-demo.html90
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/captcha.js27
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/fonts/Anorexia.ttfbin14300 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/image_req.php6
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/images/button.pngbin1546 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/images/image.php33
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/index.php77
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/newsession.php12
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/process.php14
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/rand.php11
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/style.css140
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/cmxform.css46
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/cmxformTemplate.css55
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/core.css21
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/reset.css61
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/screen.css11
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/custom-messages-data-demo.html66
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/custom-methods-demo.html118
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/dynamic-totals.html142
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/errorcontainer-demo.html152
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/errors-within-labels.html91
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/file_input.html47
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/bg.gifbin1175 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/checked.gifbin220 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/cmxform-divider.gifbin43 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/cmxform-fieldset.gifbin314 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/loading.gifbin418 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/unchecked.gifbin223 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/index.html244
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/jquerymobile.html77
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/bg.gifbin89 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/header1.jpgbin442 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/page.gifbin664 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/required_star.gifbin121 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/index.html69
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/screen.css457
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/backRequiredGray.gifbin137 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/back_green-fade.gifbin2421 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/back_nav_blue.gifbin1668 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/blank.gifbin799 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/button-submit.gifbin4527 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/favicon.icobin1150 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/help.pngbin1615 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/left-nav-callout-long.pngbin1381 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/login-sprite.gifbin2017 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/logo_marketo.gifbin8363 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/sf.pngbin3745 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/step1-24.gifbin1357 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/step2-24.gifbin1355 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/step3-24.gifbin1362 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/tab-sprite.gifbin4710 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/tab_green.gifbin1652 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/time.pngbin793 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/toggle.gifbin845 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/warning.gifbin234 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/index.html292
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/jquery.maskedinput.js338
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/mktSignup.js133
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/step2.htm326
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/stylesheet.css1179
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/bg.gifbin73 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/index.html250
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/left_white.pngbin538 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/milk.css236
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/milk.pngbin5121 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/right_white.pngbin1579 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/multipart/index.html468
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/multipart/style.css705
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/radio-checkbox-select-demo.html132
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/requirejs/app.js9
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/requirejs/index.html56
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/site-demos.css16
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/themerollered.html235
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/index.html69
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/editor_template.js1
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/img/icons.gifbin1440 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/langs/en.js11
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/skins/default/ui.css32
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/tiny_mce.js1
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce4/index.html71
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery-1.11.1.js10308
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery-1.7.2.js9404
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery-1.8.3.js9472
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery-1.9.1.js9597
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery.form.js1121
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery.js27
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery.mockjax.js598
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery.simulate.js314
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/lib/require.js36
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/package.json57
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/accept.js33
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/additional.js24
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/alphanumeric.js3
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/bankaccountNL.js25
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/bankorgiroaccountNL.js5
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/bic.js16
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/cifES.js61
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/cpfBR.js57
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/creditcardtypes.js69
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/currency.js41
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/dateFA.js3
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/dateITA.js39
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/dateNL.js3
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/extension.js5
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/giroaccountNL.js6
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/iban.js122
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/integer.js3
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/ipv4.js3
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/ipv6.js3
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/lettersonly.js3
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/letterswithbasicpunc.js3
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/mobileNL.js3
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/mobileUK.js13
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/nieES.js34
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/nifES.js25
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/notEqualTo.js3
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/nowhitespace.js3
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/pattern.js22
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/phoneNL.js6
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/phoneUK.js13
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/phoneUS.js21
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/phonesUK.js14
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postalCodeCA.js16
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postalcodeBR.js11
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postalcodeIT.js4
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postalcodeNL.js3
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postcodeUK.js4
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/require_from_group.js37
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/skip_or_fill_minimum.js43
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/statesUS.js58
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/strippedminlength.js4
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/time.js3
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/time12h.js3
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/url2.js4
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/vinUS.js54
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/zipcodeUS.js3
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/ziprange.js3
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/ajax.js33
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/core.js1346
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ar.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_bg.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_bn_BD.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ca.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_cs.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_da.js20
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_de.js20
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_el.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_es.js26
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_es_AR.js27
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_es_PE.js27
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_et.js21
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_eu.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_fa.js26
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_fi.js21
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_fr.js49
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ge.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_gl.js28
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_he.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_hr.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_hu.js22
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_hy_AM.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_id.js22
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_is.js21
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_it.js27
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ja.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ka.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_kk.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ko.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_lt.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_lv.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_my.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_nl.js33
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_no.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_pl.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_pt_BR.js29
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_pt_PT.js27
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ro.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ru.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_si.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sk.js20
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sl.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sr.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sr_lat.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sv.js21
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_th.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_tj.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_tr.js24
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_uk.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_vi.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_zh.js23
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_zh_TW.js24
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_de.js12
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_es_CL.js12
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_fi.js12
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_nl.js9
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_pt.js9
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/test/aria.js83
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/test/error-placement.js358
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/test/index.html375
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/test/messages.js69
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/test/methods.js1225
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/test/qunit/qunit.css291
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/test/qunit/qunit.js3828
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/test/rules.js307
-rw-r--r--wqflask/wqflask/static/new/packages/ValidationPlugin/test/test.js1853
-rw-r--r--wqflask/wqflask/static/new/packages/nvd3/nv.d3.css641
-rw-r--r--wqflask/wqflask/static/new/packages/nvd3/nv.d3.js13363
-rw-r--r--wqflask/wqflask/static/new/packages/nvd3/nv.d3.min.css1
-rw-r--r--wqflask/wqflask/static/new/packages/nvd3/nv.d3.min.js8
-rw-r--r--wqflask/wqflask/static/output/Itvl_3kiKQR1g.jpegbin100480 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/output/Itvl_hNsk2rxO.jpegbin100480 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/DT_bootstrap/DT_bootstrap.css179
-rw-r--r--wqflask/wqflask/static/packages/DT_bootstrap/DT_bootstrap.js159
l---------wqflask/wqflask/static/packages/DT_bootstrap/images1
-rw-r--r--wqflask/wqflask/static/packages/TableTools/alt_init.html520
-rw-r--r--wqflask/wqflask/static/packages/TableTools/alter_buttons.html505
-rw-r--r--wqflask/wqflask/static/packages/TableTools/bootstrap.html551
-rw-r--r--wqflask/wqflask/static/packages/TableTools/button_text.html531
-rw-r--r--wqflask/wqflask/static/packages/TableTools/collection.html522
-rw-r--r--wqflask/wqflask/static/packages/TableTools/defaults.html503
-rw-r--r--wqflask/wqflask/static/packages/TableTools/index.html499
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/as3/ZeroClipboard.as221
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/as3/ZeroClipboardPdf.as310
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/as3/lib/AlivePDF.swcbin131230 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/css/TableTools.css326
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/css/TableTools_JUI.css185
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/background.pngbin944 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/collection.pngbin1166 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/collection_hover.pngbin1194 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/copy.pngbin2184 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/copy_hover.pngbin2797 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/csv.pngbin1607 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/csv_hover.pngbin1854 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/pdf.pngbin4325 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/pdf_hover.pngbin2786 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/print.pngbin2123 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/print_hover.pngbin2230 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/psd/collection.psdbin25792 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/psd/copy document.psdbin104729 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/psd/file_types.psdbin1090645 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/psd/printer.psdbin119952 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/xls.pngbin1641 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/images/xls_hover.pngbin2061 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/js/TableTools.js2476
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/js/TableTools.min.js77
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/js/TableTools.min.js.gzbin8785 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/js/ZeroClipboard.js367
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/swf/copy_csv_xls.swfbin2165 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/media/swf/copy_csv_xls_pdf.swfbin58824 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/TableTools/multi_instance.html499
-rw-r--r--wqflask/wqflask/static/packages/TableTools/multiple_tables.html296
-rw-r--r--wqflask/wqflask/static/packages/TableTools/pdf_message.html524
-rw-r--r--wqflask/wqflask/static/packages/TableTools/plug-in.html539
-rw-r--r--wqflask/wqflask/static/packages/TableTools/select_multi.html507
-rw-r--r--wqflask/wqflask/static/packages/TableTools/select_single.html505
-rw-r--r--wqflask/wqflask/static/packages/TableTools/swf_path.html505
-rw-r--r--wqflask/wqflask/static/packages/TableTools/tabs.html348
-rw-r--r--wqflask/wqflask/static/packages/TableTools/theme.html524
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css9
-rw-r--r--wqflask/wqflask/static/packages/bootstrap/css/non-responsive.css6
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/CHANGES.md671
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/LICENSE.md1264
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/README.md39
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/adapters/jquery.js10
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/build-config.js179
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/ckeditor.js1013
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/config.js10
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/contents.css134
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/af.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/ar.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/bg.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/bn.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/bs.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/ca.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/cs.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/cy.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/da.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/de.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/el.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/en-au.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/en-ca.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/en-gb.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/en.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/eo.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/es.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/et.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/eu.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/fa.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/fi.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/fo.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/fr-ca.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/fr.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/gl.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/gu.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/he.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/hi.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/hr.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/hu.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/id.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/is.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/it.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/ja.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/ka.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/km.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/ko.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/ku.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/lt.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/lv.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/mk.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/mn.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/ms.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/nb.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/nl.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/no.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/pl.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/pt-br.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/pt.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/ro.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/ru.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/si.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/sk.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/sl.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/sq.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/sr-latn.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/sr.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/sv.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/th.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/tr.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/tt.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/ug.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/uk.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/vi.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/zh-cn.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/lang/zh.js5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js10
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt25
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/da.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/de.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/el.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/en.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/es.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/et.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/he.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/id.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/it.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js9
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/km.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js10
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/no.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/si.js10
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/th.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js9
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js9
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/about.js7
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.pngbin13339 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/logo_ckeditor.pngbin6757 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/clipboard/dialogs/paste.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/colordialog/dialogs/colordialog.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/dialog/dialogDefinition.js4
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/div/dialogs/div.js9
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/find/dialogs/find.js24
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/flash/dialogs/flash.js24
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/flash/images/placeholder.pngbin256 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/button.js8
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/checkbox.js8
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/form.js8
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/hiddenfield.js8
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/radio.js8
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/select.js20
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/textarea.js8
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/textfield.js10
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/forms/images/hiddenfield.gifbin105 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/icons.pngbin20833 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/icons_hidpi.pngbin67753 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/iframe/dialogs/iframe.js10
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/iframe/images/placeholder.pngbin265 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/image/dialogs/image.js43
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/image/images/noimage.pngbin2115 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/link/dialogs/anchor.js7
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/link/dialogs/link.js26
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/link/images/anchor.pngbin589 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/link/images/hidpi/anchor.pngbin1379 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/liststyle/dialogs/liststyle.js10
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/hidpi/icon-rtl.pngbin176 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/hidpi/icon.pngbin199 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/icon-rtl.pngbin138 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/icon.pngbin133 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/pagebreak/images/pagebreak.gifbin54 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/pastefromword/filter/default.js31
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/preview/preview.html13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/scayt/LICENSE.md28
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/scayt/README.md25
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/scayt/dialogs/options.js17
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/scayt/dialogs/toolbar.css71
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_address.pngbin152 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_blockquote.pngbin154 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_div.pngbin127 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h1.pngbin120 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h2.pngbin127 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h3.pngbin123 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h4.pngbin123 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h5.pngbin126 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h6.pngbin123 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_p.pngbin115 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_pre.pngbin128 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/dialogs/smiley.js10
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angel_smile.gifbin1245 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angel_smile.pngbin1172 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angry_smile.gifbin1219 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angry_smile.pngbin1220 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/broken_heart.gifbin732 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/broken_heart.pngbin1139 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/confused_smile.gifbin1202 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/confused_smile.pngbin1101 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/cry_smile.gifbin795 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/cry_smile.pngbin1214 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/devil_smile.gifbin1239 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/devil_smile.pngbin1220 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embaressed_smile.gifbin786 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embarrassed_smile.gifbin786 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embarrassed_smile.pngbin1145 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/envelope.gifbin506 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/envelope.pngbin760 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/heart.gifbin692 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/heart.pngbin999 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/kiss.gifbin683 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/kiss.pngbin1003 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/lightbulb.gifbin660 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/lightbulb.pngbin919 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/omg_smile.gifbin820 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/omg_smile.pngbin1122 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/regular_smile.gifbin1209 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/regular_smile.pngbin1084 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/sad_smile.gifbin782 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/sad_smile.pngbin1115 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/shades_smile.gifbin1231 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/shades_smile.pngbin1204 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/teeth_smile.gifbin1201 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/teeth_smile.pngbin1183 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_down.gifbin715 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_down.pngbin985 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_up.gifbin714 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_up.pngbin959 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tongue_smile.gifbin1210 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tongue_smile.pngbin1132 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tounge_smile.gifbin1210 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gifbin775 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.pngbin1039 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/wink_smile.gifbin1202 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/wink_smile.pngbin1114 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt20
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ar.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/bg.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ca.js14
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/cs.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/cy.js14
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/de.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/el.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/en.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/eo.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/es.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/et.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fa.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fi.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js10
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fr.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/gl.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/he.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/hr.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/hu.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/id.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/it.js14
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ja.js9
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/km.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ku.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/lv.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/nb.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/nl.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/no.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pl.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pt.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ru.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/si.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sk.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sl.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sq.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sv.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/th.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/tr.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/tt.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ug.js13
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/uk.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/vi.js14
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js9
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/zh.js12
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/specialchar.js14
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/table/dialogs/table.js21
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/tabletools/dialogs/tableCell.js17
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/templates/dialogs/templates.css84
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/templates/dialogs/templates.js10
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/default.js6
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template1.gifbin375 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template2.gifbin333 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template3.gifbin422 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/wsc/LICENSE.md28
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/wsc/README.md25
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/ciframe.html66
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/tmpFrameset.html52
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc.css82
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc.js74
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc_ie.js11
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/ajax.html82
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/api.html207
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/appendto.html56
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/assets/inlineall/logo.pngbin4283 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/assets/outputxhtml/outputxhtml.css204
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/assets/posteddata.php59
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/assets/sample.jpgbin14449 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/assets/uilanguages/languages.js7
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/datafiltering.html401
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/divreplace.html141
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/index.html128
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/inlineall.html311
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/inlinebycode.html121
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/inlinetextarea.html110
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/jquery.html100
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/assets/my_dialog.js48
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/dialog.html187
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/plugins/enterkey/enterkey.html103
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.flabin85504 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swfbin15571 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js18
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/outputforflash.html280
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/outputhtml.html221
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/plugins/magicline/magicline.html206
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/plugins/toolbar/toolbar.html232
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/plugins/wysiwygarea/fullpage.html77
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/readonly.html73
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/replacebyclass.html57
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/replacebycode.html56
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/sample.css365
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/sample.js50
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/sample_posteddata.php16
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/tabindex.html75
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/uicolor.html69
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/uilanguages.html119
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/samples/xhtmlstyle.html231
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog.css5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie.css5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie7.css5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie8.css5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_iequirks.css5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/editor.css5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_gecko.css5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie.css5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie7.css5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie8.css5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_iequirks.css5
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/icons.pngbin20833 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/icons_hidpi.pngbin67753 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/images/arrow.pngbin191 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/images/close.pngbin468 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/close.pngbin1271 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/lock-open.pngbin1329 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/lock.pngbin1299 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/refresh.pngbin1842 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/images/lock-open.pngbin349 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/images/lock.pngbin475 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/images/refresh.pngbin422 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/skins/moono/readme.md51
-rw-r--r--wqflask/wqflask/static/packages/ckeditor/styles.js111
-rw-r--r--wqflask/wqflask/static/packages/cytoscape/css/cytoscape.js-panzoom.css220
-rw-r--r--wqflask/wqflask/static/packages/cytoscape/js/min/AC_OETags.min.js1
-rw-r--r--wqflask/wqflask/static/packages/cytoscape/js/min/cytoscape.min.js62
-rw-r--r--wqflask/wqflask/static/packages/cytoscape/js/min/json2.min.js1
-rw-r--r--wqflask/wqflask/static/packages/cytoscape/js/src/AC_OETags.js278
-rw-r--r--wqflask/wqflask/static/packages/cytoscape/js/src/cytoscape-panzoom.js594
-rw-r--r--wqflask/wqflask/static/packages/cytoscape/js/src/cytoscape-qtip.js398
-rw-r--r--wqflask/wqflask/static/packages/cytoscape/js/src/cytoscape.js26998
-rw-r--r--wqflask/wqflask/static/packages/cytoscape/js/src/json2.js479
-rw-r--r--wqflask/wqflask/static/packages/cytoscape/swf/CytoscapeWeb.swfbin505518 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/cytoscape/swf/playerProductInstall.swfbin657 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/MIT-LICENSE.txt21
-rw-r--r--wqflask/wqflask/static/packages/jqplot/README.txt77
-rw-r--r--wqflask/wqflask/static/packages/jqplot/additional-methods.js437
-rw-r--r--wqflask/wqflask/static/packages/jqplot/additional-methods.min.js4
-rw-r--r--wqflask/wqflask/static/packages/jqplot/changes.txt395
-rw-r--r--wqflask/wqflask/static/packages/jqplot/copyright.txt56
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/MIT-LICENSE-txt.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/changes-txt.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/gpl-2-0-txt.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/background.jpgbin1101 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/basicline.pngbin17024 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogaxis.pngbin19902 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogoptions.pngbin17207 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/basicoptions.pngbin19864 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/dualaxis.pngbin29672 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/logo.jpgbin14632 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocs.pngbin996 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocsover.pngbin1006 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownload.pngbin1236 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownloadover.pngbin1265 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamples.pngbin1308 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamplesover.pngbin1332 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/navhome.pngbin858 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/navhomeover.pngbin886 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/new.pngbin13750 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/sample3.pngbin44781 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/images/samplesm.pngbin20874 -> 0 bytes
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotCssStyling-txt.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotOptions-txt.html292
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisLabelRenderer-js.html47
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisTickRenderer-js.html73
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-canvasGridRenderer-js.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-core-js.html389
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-divTitleRenderer-js.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-lineRenderer-js.html69
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-linearAxisRenderer-js.html61
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-markerRenderer-js.html65
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shadowRenderer-js.html61
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shapeRenderer-js.html65
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-themeEngine-js.html191
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-toImage-js.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/optionsTutorial-txt.html120
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html45
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-barRenderer-js.html69
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html53
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html71
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html63
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html79
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasOverlay-js.html113
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html46
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ciParser-js.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-cursor-js.html93
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html101
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html98
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dragable-js.html45
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html51
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html87
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-highlighter-js.html80
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html47
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html49
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html62
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html103
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html65
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html93
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pointLabels-js.html72
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidAxisRenderer-js.html49
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidGridRenderer-js.html39
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidRenderer-js.html55
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-trendline-js.html67
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/files/usage-txt.html58
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index.html1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Classes.html70
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Files.html34
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Functions.html70
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/General.html42
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/General2.html42
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/General3.html42
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/General4.html46
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/General5.html50
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/General6.html34
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/General7.html58
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Hooks.html46
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Properties.html42
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Properties2.html42
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Properties3.html46
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Properties4.html50
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Properties5.html34
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/index/Properties6.html58
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/javascript/main.js836
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/javascript/searchdata.js182
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesA.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesD.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesG.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesH.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesJ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesL.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesS.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesSymbols.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesT.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/ClassesV.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FilesJ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsC.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsD.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsG.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsI.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsM.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsN.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsQ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsR.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsS.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsZ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralA.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralB.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralC.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralD.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralE.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralF.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralG.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralH.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralI.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralJ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralL.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralM.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralN.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralO.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralP.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralQ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralR.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralS.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralSymbols.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralT.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralU.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralV.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralW.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralX.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralY.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/GeneralZ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/HooksA.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/HooksE.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/HooksJ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/HooksP.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/NoResults.html15
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesA.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesB.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesC.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesD.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesE.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesF.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesG.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesH.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesI.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesL.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesM.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesN.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesO.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesP.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesR.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesS.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesT.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesU.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesV.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesW.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesX.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesY.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesZ.html20
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/styles/1.css767
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/styles/2.css174
-rw-r--r--wqflask/wqflask/static/packages/jqplot/docs/styles/main.css2
-rw-r--r--wqflask/wqflask/static/packages/jqplot/excanvas.js1438
-rw-r--r--wqflask/wqflask/static/packages/jqplot/excanvas.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/gpl-2.0.txt280
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jqPlotCssStyling.txt53
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jqPlotOptions.txt276
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jquery.jqplot.css259
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jquery.jqplot.js11381
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.css1
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jquery.js9046
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jquery.min.js4
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jquery.validate.js1248
-rw-r--r--wqflask/wqflask/static/packages/jqplot/jquery.validate.min.js4
-rw-r--r--wqflask/wqflask/static/packages/jqplot/optionsTutorial.txt240
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.js313
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.js797
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.js234
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.js758
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js203
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.js243
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.js865
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.js449
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.js673
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.js116
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.js1108
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.js737
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.js804
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.js225
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.js305
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.js942
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.js465
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.js475
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.js529
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.js611
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.js437
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.js1029
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.js45
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.js373
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.js903
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.js379
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.js728
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.js429
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.js514
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.js223
-rw-r--r--wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.min.js57
-rw-r--r--wqflask/wqflask/static/packages/jqplot/usage.txt126
-rw-r--r--wqflask/wqflask/static/packages/purescript_genome_browser/css/purescript-genetics-browser.css1
-rw-r--r--wqflask/wqflask/static/packages/purescript_genome_browser/js/purescript-genetics-browser.js659
-rw-r--r--wqflask/wqflask/submit_bnw.py11
-rw-r--r--wqflask/wqflask/templates/base.html213
-rw-r--r--wqflask/wqflask/templates/bnw_page.html7
-rw-r--r--wqflask/wqflask/templates/collections/add.html54
-rw-r--r--wqflask/wqflask/templates/collections/list.html122
-rw-r--r--wqflask/wqflask/templates/collections/view.html271
-rw-r--r--wqflask/wqflask/templates/comparison_bar_chart.html38
-rw-r--r--wqflask/wqflask/templates/corr_scatterplot.html478
-rw-r--r--wqflask/wqflask/templates/correlation_matrix.html137
-rw-r--r--wqflask/wqflask/templates/correlation_page.html556
-rw-r--r--wqflask/wqflask/templates/ctl_results.html22
-rw-r--r--wqflask/wqflask/templates/docedit.html15
-rw-r--r--wqflask/wqflask/templates/docs.html6
-rw-r--r--wqflask/wqflask/templates/empty_collection.html2
-rw-r--r--wqflask/wqflask/templates/error.html4
-rw-r--r--wqflask/wqflask/templates/geneweaver_page.html35
-rw-r--r--wqflask/wqflask/templates/gsearch_gene.html313
-rw-r--r--wqflask/wqflask/templates/gsearch_pheno.html301
-rw-r--r--wqflask/wqflask/templates/heatmap.html86
-rw-r--r--wqflask/wqflask/templates/index_page.html12
-rwxr-xr-xwqflask/wqflask/templates/index_page_orig.html171
-rw-r--r--wqflask/wqflask/templates/loading.html47
-rw-r--r--wqflask/wqflask/templates/mapping_error.html20
-rw-r--r--wqflask/wqflask/templates/mapping_results.html (renamed from wqflask/wqflask/templates/marker_regression_gn1.html)302
-rw-r--r--wqflask/wqflask/templates/network_graph.html110
-rw-r--r--wqflask/wqflask/templates/new_security/forgot_password.html14
-rw-r--r--wqflask/wqflask/templates/new_security/login_user.html76
-rw-r--r--wqflask/wqflask/templates/new_security/register_user.html12
-rw-r--r--wqflask/wqflask/templates/news.html2
-rw-r--r--wqflask/wqflask/templates/reference.html794
-rw-r--r--wqflask/wqflask/templates/search_error.html5
-rw-r--r--wqflask/wqflask/templates/search_result_page.html528
-rw-r--r--wqflask/wqflask/templates/show_trait.html507
-rw-r--r--wqflask/wqflask/templates/show_trait_calculate_correlations.html111
-rw-r--r--wqflask/wqflask/templates/show_trait_details.html192
-rw-r--r--wqflask/wqflask/templates/show_trait_edit_data.html188
-rw-r--r--wqflask/wqflask/templates/show_trait_mapping_tools.html410
-rw-r--r--wqflask/wqflask/templates/show_trait_statistics.html68
-rw-r--r--wqflask/wqflask/templates/show_trait_transform_and_filter.html83
-rw-r--r--wqflask/wqflask/templates/snp_browser.html514
-rw-r--r--wqflask/wqflask/templates/submit_trait.html30
-rw-r--r--wqflask/wqflask/templates/tutorials.html17
-rw-r--r--wqflask/wqflask/templates/webgestalt_page.html35
-rw-r--r--wqflask/wqflask/tracer.py41
-rw-r--r--wqflask/wqflask/user_login.py469
-rw-r--r--wqflask/wqflask/user_manager.py706
-rw-r--r--wqflask/wqflask/user_session.py286
-rw-r--r--wqflask/wqflask/views.py548
-rw-r--r--wqflask/wsgi.py4
1168 files changed, 30504 insertions, 202873 deletions
diff --git a/MANIFEST.in b/MANIFEST.in
index bf23f9aa..0e0b4bd4 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -27,36 +27,6 @@ include wqflask/wqflask/static/new/javascript/*
include wqflask/wqflask/static/new/javascript/node_modules/*
include wqflask/wqflask/static/new/javascript/node_modules/.bin/*
include wqflask/wqflask/static/new/packages/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/dist/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/lib/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/localization/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/fonts/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/images/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tabs/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/js/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/multipart/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/multipart/js/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/img/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/langs/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/skins/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/skins/default/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/test/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/test/qunit/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/test/selects/*
-include wqflask/wqflask/static/new/packages/ValidationPlugin/test/firebug/*
include wqflask/wqflask/static/new/packages/nvd3/*
include wqflask/wqflask/static/new/packages/noUiSlider/*
include wqflask/wqflask/static/new/packages/DataTables/*
@@ -82,15 +52,6 @@ include wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold
include wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/6_delayed_rendering/*
include wqflask/wqflask/static/new/packages/DataTables/unit_testing/tests_onhold/1_dom/*
include wqflask/wqflask/static/packages/*
-include wqflask/wqflask/static/packages/TableTools/*
-include wqflask/wqflask/static/packages/TableTools/media/*
-include wqflask/wqflask/static/packages/TableTools/media/images/*
-include wqflask/wqflask/static/packages/TableTools/media/images/psd/*
-include wqflask/wqflask/static/packages/TableTools/media/swf/*
-include wqflask/wqflask/static/packages/TableTools/media/js/*
-include wqflask/wqflask/static/packages/TableTools/media/css/*
-include wqflask/wqflask/static/packages/TableTools/media/as3/*
-include wqflask/wqflask/static/packages/TableTools/media/as3/lib/*
include wqflask/wqflask/static/packages/underscore/*
include wqflask/wqflask/static/packages/bootstrap/*
include wqflask/wqflask/static/packages/bootstrap/fonts/*
@@ -108,90 +69,6 @@ include wqflask/wqflask/static/packages/novus-nvd3-d51729c/src/models/backup/*
include wqflask/wqflask/static/packages/novus-nvd3-d51729c/examples/*
include wqflask/wqflask/static/packages/novus-nvd3-d51729c/examples/images/*
include wqflask/wqflask/static/packages/DT_bootstrap/*
-include wqflask/wqflask/static/packages/ckeditor/*
-include wqflask/wqflask/static/packages/ckeditor/lang/*
-include wqflask/wqflask/static/packages/ckeditor/adapters/*
-include wqflask/wqflask/static/packages/ckeditor/skins/*
-include wqflask/wqflask/static/packages/ckeditor/skins/moono/*
-include wqflask/wqflask/static/packages/ckeditor/skins/moono/images/*
-include wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/div/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/div/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/templates/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/templates/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/find/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/find/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/scayt/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/scayt/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/dialog/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/flash/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/flash/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/flash/images/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/about/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/hidpi/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/pastefromword/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/pastefromword/filter/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/wsc/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/forms/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/forms/images/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/link/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/link/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/link/images/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/link/images/hidpi/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/iframe/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/iframe/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/iframe/images/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/colordialog/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/colordialog/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/table/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/table/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/smiley/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/smiley/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/liststyle/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/liststyle/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/clipboard/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/clipboard/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/pagebreak/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/pagebreak/images/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/magicline/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/hidpi/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/preview/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/image/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/image/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/image/images/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/tabletools/*
-include wqflask/wqflask/static/packages/ckeditor/plugins/tabletools/dialogs/*
-include wqflask/wqflask/static/packages/ckeditor/samples/*
-include wqflask/wqflask/static/packages/ckeditor/samples/assets/*
-include wqflask/wqflask/static/packages/ckeditor/samples/assets/uilanguages/*
-include wqflask/wqflask/static/packages/ckeditor/samples/assets/outputxhtml/*
-include wqflask/wqflask/static/packages/ckeditor/samples/assets/inlineall/*
-include wqflask/wqflask/static/packages/ckeditor/samples/plugins/*
-include wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/*
-include wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/assets/*
-include wqflask/wqflask/static/packages/ckeditor/samples/plugins/enterkey/*
-include wqflask/wqflask/static/packages/ckeditor/samples/plugins/toolbar/*
-include wqflask/wqflask/static/packages/ckeditor/samples/plugins/magicline/*
-include wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/*
-include wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/*
-include wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/*
-include wqflask/wqflask/static/packages/ckeditor/samples/plugins/wysiwygarea/*
include wqflask/wqflask/static/packages/colorbox/*
include wqflask/wqflask/static/packages/colorbox/example5/*
include wqflask/wqflask/static/packages/colorbox/example5/images/*
@@ -220,30 +97,6 @@ include wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/
include wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/test/specs/*
include wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/*
include wqflask/wqflask/static/packages/pragmaticly-smart-time-ago-40fa376/src/locales/*
-include wqflask/wqflask/static/packages/jqplot/*
-include wqflask/wqflask/static/packages/jqplot/docs/*
-include wqflask/wqflask/static/packages/jqplot/docs/index/*
-include wqflask/wqflask/static/packages/jqplot/docs/styles/*
-include wqflask/wqflask/static/packages/jqplot/docs/files/*
-include wqflask/wqflask/static/packages/jqplot/docs/files/images/*
-include wqflask/wqflask/static/packages/jqplot/docs/files/plugins/*
-include wqflask/wqflask/static/packages/jqplot/docs/search/*
-include wqflask/wqflask/static/packages/jqplot/docs/javascript/*
-include wqflask/wqflask/static/packages/jqplot/examples/*
-include wqflask/wqflask/static/packages/jqplot/examples/colorpicker/*
-include wqflask/wqflask/static/packages/jqplot/examples/colorpicker/images/*
-include wqflask/wqflask/static/packages/jqplot/examples/images/*
-include wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/*
-include wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/js/*
-include wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/*
-include wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/*
-include wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/smoothness/images/*
-include wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/*
-include wqflask/wqflask/static/packages/jqplot/examples/jquery-ui/css/ui-lightness/images/*
-include wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/*
-include wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/scripts/*
-include wqflask/wqflask/static/packages/jqplot/examples/syntaxhighlighter/styles/*
-include wqflask/wqflask/static/packages/jqplot/plugins/*
include wqflask/wqflask/correlation_matrix/*
include wqflask/wqflask/show_trait/*
include wqflask/wqflask/wgcna/*
diff --git a/README.md b/README.md
index 8221ad65..523eeb76 100644
--- a/README.md
+++ b/README.md
@@ -17,21 +17,44 @@ deploy GN2 and dependencies as a self contained unit on any machine.
The database can be run separately as well as the source tree (for
developers). See the [installation docs](doc/README.org).
-## Test
+## Run
Once installed GN2 can be run online through a browser interface
```sh
-./bin/genenetwork2
+genenetwork2
```
-(default is http://localhost:5003/). We are building up automated
-testing using [mechanize](https://github.com/genenetwork/genenetwork2/tree/master/test/lib) which can be run with
+(default is http://localhost:5003/). For full examples (you'll need to
+set a number of environment variables), including running scripts and
+a Python REPL, for example
```sh
-./bin/test-website
+env GN2_PROFILE=~/opt/gn-latest GENENETWORK_FILES=~/data/gn2_data ./bin/genenetwork2
```
+see the startup script
+[./bin/genenetwork2](https://github.com/genenetwork/genenetwork2/blob/testing/bin/genenetwork2).
+
+Also Mysql and Elasticsearch need to be running, see
+[INSTALL](./doc/README.org).
+
+## Testing
+
+We are building 'Mechanical Rob' automated testing using Python
+[requests](https://github.com/genenetwork/genenetwork2/tree/master/test/lib)
+which can be run with something like
+
+```sh
+env GN2_PROFILE=~/opt/gn-latest ./bin/genenetwork2 ./etc/default_settings.py -c ../test/requests/test-website.py -a http://localhost:5003
+```
+
+The GN2_PROFILE is the Guix profile that contains all
+dependencies. The ./bin/genenetwork2 script sets up the environment
+and executes test-website.py in a Python interpreter. The -a switch
+says to run all tests and the URL points to the running GN2 http
+server.
+
## Documentation
User documentation can be found
@@ -70,16 +93,15 @@ For more information visit http://www.genenetwork.org/
[![JOSS](http://joss.theoj.org/papers/10.21105/joss.00025/status.svg)](http://joss.theoj.org/papers/10.21105/joss.00025)
-GeneNetwork was published in the Journal of Open Source Software as 'GeneNetwork: framework for web-based genetics' by Zachary Sloan, Danny Arends, Karl W. Broman, Arthur Centeno, Nicholas Furlotte, Harm Nijveen, Lei Yan, Xiang Zhou, Robert W. WIlliams and Pjotr Prins
+GeneNetwork was published in the Journal of Open Source Software as 'GeneNetwork: framework for web-based genetics' by Zachary Sloan, Danny Arends, Karl W. Broman, Arthur Centeno, Nicholas Furlotte, Harm Nijveen, Lei Yan, Xiang Zhou, Robert W. WIlliams and Pjotr Prins
You may also cite the software using
-[![DOI](https://zenodo.org/badge/5591/genenetwork/genenetwork2.svg)](https://zenodo.org/badge/latestdoi/5591/genenetwork/genenetwork2).
+[![DOI](https://zenodo.org/badge/5591/genenetwork/genenetwork2.svg)](https://zenodo.org/badge/latestdoi/5591/genenetwork/genenetwork2).
## Contact
IRC on #genenetwork on irc.freenode.net.
Code and primary web service managed by Dr. Robert W. Williams and the
-University of Tennessee Health Science Center, Memphis TN, USA.
-
+University of Tennessee Health Science Center, Memphis TN, USA.
diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md
new file mode 100644
index 00000000..9ad75aa0
--- /dev/null
+++ b/RELEASE-NOTES.md
@@ -0,0 +1,42 @@
+## ChangeLog v2.11 pre-release (date unknown)
+
+This is a massive bug fix release with many improvements. For contributions
+see
+[contributors](https://github.com/genenetwork/genenetwork2/contributors)
+and
+[commits](https://github.com/genenetwork/genenetwork2/commits/master).
+
+The current GNU Guix checkout is at
+
+https://gitlab.com/genenetwork/guix-bioinformatics/tree/gn-latest-20190213
+
+and
+
+https://gitlab.com/genenetwork/guix/tree/gn-latest-20190213
+
+With these branches a binary install can be fetched with
+
+ env GUIX_PACKAGE_PATH=../guix-bioinformatics ./pre-inst-env guix package --substitute-urls="https://berlin.guixsd.org http://guix.genenetwork.org https://mirror.hydra.gnu.org" -i genenetwork2 -p ~/opt/gn-latest-20190213
+
+The key for guix.genenetwork.org is
+
+```scheme
+(public-key
+ (ecc
+ (curve Ed25519)
+ (q #D54AA5C8CBE268CBC82418AB83709611BAC88B39D44E68C18F6E16197B5B5CA0#)
+ )
+ )
+```
+
+### Migrated PIL to pillow (preparing for Python3 migration)
+
+### Dropped pylmm support
+
+### Added GEMMA support
+
+* Front-end support
+
+### Added test framework and unit tests
+
+* Added python integration and unit tests
diff --git a/VERSION b/VERSION
index 144b089a..a9a7884c 100644..120000
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.10-pre1
+etc/VERSION \ No newline at end of file
diff --git a/bin/genenetwork2 b/bin/genenetwork2
index 52d3155c..1c538e86 100755
--- a/bin/genenetwork2
+++ b/bin/genenetwork2
@@ -1,83 +1,156 @@
#! /bin/bash
#
+# This is the startup script for GN2. It sets the environment variables to pick
+# up a Guix profile and allows for overriding parameters.
+#
+# Typical usage
+#
+# env GN2_PROFILE=~/opt/genenetwork2-phewas ./bin/genenetwork2 ~/my_settings.py
+#
+# Where GN2_PROFILE points to the GNU Guix profile used for deployment.
+#
# This will run the GN2 server (with default settings if none
-# supplied). Pass in your own settings file, e.g.
+# supplied). Typically you need a GNU Guix profile which is set with
+# an environment variable (this profile is dictated by the
+# installation path of genenetwork). Say your profile is in
+# ~/opt/gn-latest-guix
+#
+# env GN2_PROFILE=~/opt/gn-latest ./bin/genenetwork2
+#
+# You can pass in your own settings file, e.g.
+#
+# env GN2_PROFILE=~/opt/gn-latest ./bin/genenetwork2 ~/my_settings.py
+#
+# To run a maintenance python script with settings (instead of the
+# webserver) run from the base-dir with settings file and add that
+# script with a -c switch, e.g.
+#
+# env GN2_PROFILE=/usr/local/guix-profiles/gn-latest-20190905 TMPDIR=/export/local/home/zas1024/gn2-zach/tmp WEBSERVER_MODE=DEBUG LOG_LEVEL=DEBUG SERVER_PORT=5002 GENENETWORK_FILES=/export/local/home/zas1024/gn2-zach/genotype_files SQL_URI=mysql://webqtlout:webqtlout@lily.uthsc.edu/db_webqtl ./bin/genenetwork2 ./etc/default_settings.py -c ./maintenance/gen_select_dataset.py
+#
+# To run any script in the environment
+#
+# env GN2_PROFILE=~/opt/gn-latest ./bin/genenetwork2 ./etc/default_settings.py -cli echo "HELLO WORLD"
#
-# ./bin/genenetwork2 ~/my_settings.py
+# To get a python REPL(!)
#
-# But better is to retain the defaults and override them with
-# JSON file (see the deploy docs).
+# env GN2_PROFILE=~/opt/gn-latest ./bin/genenetwork2 ./etc/default_settings.py -cli python
#
-# ./bin/genenetwork2 ~/my_overrides.json
+# For development you may want to run
#
-# To run a maintenance script with settings (instead of the webserver) add that with
-# a -c switch, e.g.
+# env GN2_PROFILE=~/opt/gn-latest WEBSERVER_MODE=DEBUG LOG_LEVEL=DEBUG ./bin/genenetwork2
#
-# ./bin/genenetwork2 ~/my_overrides.json -c ./wqflask/maintenance/gen_select_dataset.py
+# For staging and production we use gunicorn. Run with something like
+# (note you have to provide the server port). Provide a settings file!
#
-# Environment settings can be used to preconfigure as well as a
-# settings.py file.
+# env GN2_PROFILE=~/opt/gn-latest-guix SERVER_PORT=5003 ./bin/genenetwork2 ./etc/default_settings.py -gunicorn-prod
#
-# GN2_BASE_PATH is base directory of wqflask source code
+# For development use
#
+# env GN2_PROFILE=~/opt/gn-latest-guix SERVER_PORT=5003 ./bin/genenetwork2 ./etc/default_settings.py -gunicorn-dev
+#
+# For extra flexibility you can also provide gunicorn parameters yourself with something like
+#
+# env GN2_PROFILE=~/opt/gn-latest-guix ./bin/genenetwork2 ./etc/default_settings.py -gunicorn "--bind 0.0.0.0:5003 --workers=1 wsgi"
-SCRIPT=$(readlink -f "$0")
+SCRIPT=$(realpath "$0")
+echo SCRIPT=$SCRIPT
+echo GN2_PROFILE=$GN2_PROFILE
GN2_BASE_DIR=$(dirname $(dirname "$SCRIPT"))
+GN2_ID=$(cat /etc/hostname):$(basename $GN2_BASE_DIR)
echo GN2_BASE_DIR=$GN2_BASE_DIR
-GIT_HASH=$(git rev-parse HEAD)
-GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
-export GN_VERSION=$(cat $GN2_BASE_DIR/VERSION)-$GIT_BRANCH-${GIT_HASH:0:9}
+GUIX_SITE=$GN2_BASE_DIR/lib/python2.7/site-packages
+if [ -d $GUIX_SITE ]; then
+ echo INFO: GN2 is running from GNU Guix
+ GN2_BASE_DIR=$GUIX_SITE
+ export GN_VERSION=$GN2_ID:$(cat $GN2_BASE_DIR/etc/VERSION)
+else
+ echo INFO: GN2 is running from a source tree
+ GIT_HASH=$(git rev-parse HEAD)
+ GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
+ export GN_VERSION=$GN2_ID:$(cat $GN2_BASE_DIR/etc/VERSION)-$GIT_BRANCH-${GIT_HASH:0:9}
+fi
echo GN_VERSION=$GN_VERSION
-# Handle settings parameter (can be .py or .json)
+if [ "$1" = "-c" -o "$1" = "-gunicorn" ]; then
+ echo "Can not use $1 switch without default settings file"
+ exit 1
+fi
+
settings=$1
-ext="${settings##*.}"
-if [ -z "$settings" -o "$ext" = "json" -o "$ext" = "JSON" ]; then
- overrides=$settings
+if [ -z $settings ]; then
settings=$GN2_BASE_DIR/etc/default_settings.py
else
shift
fi
+settings=$(realpath $settings)
+
+# ext="${settings##*.}"
+# if [ "$ext" = "json" -o "$ext" = "JSON" ]; then
+# overrides=$settings
+# else
+# echo $settings
+# fi
+
if [ ! -e $settings ]; then
- GUIX_ETC=$GN2_BASE_DIR/lib/python2.7/site-packages/genenetwork2-2.0-py2.7.egg
- if [ -d $GUIX_ETC ]; then
- echo INFO: GN2 is actually running from GNU Guix
- else
- echo "ERROR: can not locate settings file - pass it in the command line"
- exit 1
- fi
+ echo "ERROR: can not locate settings file - pass it in the command line"
+ exit 1
fi
-export WQFLASK_SETTINGS=$settings # Python
-export WQFLASK_OVERRIDES=$overrides # JSON
-
-echo WQFLASK_SETTINGS=$settings
-echo WQFLASK_OVERRIDES=$overrides
-
-# ---- Checks and balances
-if [ -z $GUIX_ETC ]; then
- if [ -z $GN2_PROFILE ] ; then
- echo "WARNING: GN2_PROFILE has not been set - I hope you know what you are doing!"
- else
- export PATH=$GN2_PROFILE/bin:$PATH
- export PYTHONPATH=$GN2_PROFILE/lib/python2.7/site-packages
- export R_LIBS_SITE=$GN2_PROFILE/site-library
- export GUIX_GTK3_PATH="$GN2_PROFILE/lib/gtk-3.0"
- export GI_TYPELIB_PATH="$GN2_PROFILE/lib/girepository-1.0"
- export XDG_DATA_DIRS="$GN2_PROFILE/share"
- export GIO_EXTRA_MODULES="$GN2_PROFILE/lib/gio/modules"
- export LC_ALL=C
- fi
- if [ -z $PYTHONPATH ] ; then
- echo "WARNING PYTHONPATH has not been set - use GN2_PROFILE!"
+
+export GN2_SETTINGS=$settings # Python
+echo GN2_SETTINGS=$settings
+
+# This is a temporary hack to inject ES - should have added python2-elasticsearch package to guix instead
+# if [ -z $ELASTICSEARCH_PROFILE ]; then
+# echo -e "WARNING: Elastic Search profile has not been set - use ELASTICSEARCH_PROFILE";
+# else
+# PYTHONPATH="$PYTHONPATH${PYTHONPATH:+:}$ELASTICSEARCH_PROFILE/lib/python2.7/site-packages"
+# fi
+
+if [ -z $GN2_PROFILE ] ; then
+ echo "WARNING: GN2_PROFILE has not been set - you need the environment, so I hope you know what you are doing!"
+ export GN2_PROFILE=$(dirname $(dirname $(which genenetwork2)))
+ if [ -d $GN2_PROFILE ]; then
+ echo "Best guess is $GN2_PROFILE"
fi
- if [ ! -d $R_LIBS_SITE ] ; then
- echo "ERROR: R_LIBS_SITE has not been set correctly (we only allow one path) - use GN2_PROFILE!"
- echo "Paste into your shell the output of (for example)"
- echo "guix package -p \$GN2_PROFILE --search-paths"
- exit 1
+ echo "ERROR: always set GN2_PROFILE"
+ exit 1
+fi
+if [ -z $GN2_PROFILE ]; then
+ read -p "PRESS [ENTER] TO CONTINUE..."
+else
+ export PATH=$GN2_PROFILE/bin:$PATH
+ export PYTHONPATH="$GN2_PROFILE/lib/python2.7/site-packages" # never inject another PYTHONPATH!!
+ export R_LIBS_SITE=$GN2_PROFILE/site-library
+ export JS_GUIX_PATH=$GN2_PROFILE/share/genenetwork2/javascript
+ export GUIX_GTK3_PATH="$GN2_PROFILE/lib/gtk-3.0"
+ export GI_TYPELIB_PATH="$GN2_PROFILE/lib/girepository-1.0"
+ export XDG_DATA_DIRS="$GN2_PROFILE/share"
+ export GIO_EXTRA_MODULES="$GN2_PROFILE/lib/gio/modules"
+ export LC_ALL=C # FIXME
+ export GUIX_GENENETWORK_FILES="$GN2_PROFILE/share/genenetwork2"
+ export PLINK_COMMAND="$GN2_PROFILE/bin/plink2"
+ export GEMMA_COMMAND="$GN2_PROFILE/bin/gemma"
+ if [ -z $GEMMA_WRAPPER_COMMAND ]; then
+ export GEMMA_WRAPPER_COMMAND="$GN2_PROFILE/bin/gemma-wrapper"
fi
+ while IFS=":" read -ra PPATH; do
+ for PPART in "${PPATH[@]}"; do
+ if [ ! -d $PPART ] ; then echo "$PPART in PYTHONPATH not valid $PYTHONPATH" ; exit 1 ; fi
+ done
+ done <<< "$PYTHONPATH"
+ if [ ! -d $R_LIBS_SITE ] ; then echo "R_LIBS_SITE not valid "$R_LIBS_SITE ; exit 1 ; fi
+fi
+if [ -z $PYTHONPATH ] ; then
+ echo "ERROR PYTHONPATH has not been set - use GN2_PROFILE!"
+ exit 1
+fi
+if [ ! -d $R_LIBS_SITE ] ; then
+ echo "ERROR R_LIBS_SITE has not been set correctly (we only allow one path) - use GN2_PROFILE!"
+ echo "Paste into your shell the output of (for example)"
+ echo "guix package -p \$GN2_PROFILE --search-paths"
+ exit 1
fi
# We may change this one:
@@ -88,17 +161,58 @@ if [ -z $TMPDIR ]; then
TMPDIR="/tmp"
fi
+# Show environment settings
+set|grep guix
set|grep $GN2_PROFILE
set|grep TMPDIR
-# Now handle command parameter -c
+# Now handle command parameter -c which runs python
if [ "$1" = '-c' ] ; then
cd $GN2_BASE_DIR/wqflask
cmd=${2#wqflask/}
echo PYTHONPATH=$PYTHONPATH
- echo RUNNING COMMAND $cmd
- /usr/bin/env python $cmd
- exit 0
+ shift ; shift
+ echo RUNNING COMMAND $cmd $*
+ python $cmd $*
+ exit $?
+fi
+
+# Now handle command parameter -cli which runs in bash
+if [ "$1" = "-cli" ] ; then
+ cd $GN2_BASE_DIR/wqflask
+ cmd=$2
+ echo PYTHONPATH=$PYTHONPATH
+ shift ; shift
+ echo RUNNING COMMAND $cmd $*
+ $cmd $*
+ exit $?
+fi
+if [ "$1" = '-gunicorn' ] ; then
+ cd $GN2_BASE_DIR/wqflask
+ cmd=$2
+ echo PYTHONPATH=$PYTHONPATH
+ echo RUNNING gunicorn $cmd
+ gunicorn $cmd
+ exit $?
+fi
+if [ "$1" = '-gunicorn-dev' ] ; then
+ cd $GN2_BASE_DIR/wqflask
+ echo PYTHONPATH=$PYTHONPATH
+ if [ -z $SERVER_PORT ]; then echo "ERROR: Provide a SERVER_PORT" ; exit 1 ; fi
+ cmd="--bind 0.0.0.0:$SERVER_PORT --workers=1 --timeout 180 --reload wsgi"
+ echo RUNNING gunicorn $cmd
+ gunicorn $cmd
+ exit $?
+fi
+if [ "$1" = '-gunicorn-prod' ] ; then
+ cd $GN2_BASE_DIR/wqflask
+ echo PYTHONPATH=$PYTHONPATH
+ if [ -z $SERVER_PORT ]; then echo "ERROR: Provide a SERVER_PORT" ; exit 1 ; fi
+ PID=$TMPDIR/gunicorn.$USER.pid
+ cmd="--bind 0.0.0.0:$SERVER_PORT --pid $PID -k eventlet --workers 20 --keep-alive 1200 --max-requests 1000 --timeout 1200 wsgi"
+ echo RUNNING gunicorn $cmd
+ gunicorn $cmd
+ exit $?
fi
echo "Starting the redis server:"
@@ -106,7 +220,10 @@ echo -n "dir $TMPDIR
dbfilename gn2.rdb
" | redis-server - &
+# Overrides for packages that are not yet public (currently r-auwerx)
+# export R_LIBS_SITE=$R_LIBS_SITE:$HOME/.Rlibs/das1i1pm54dj6lbdcsw5w0sdwhccyj1a-r-3.3.2/lib/R/lib
+
# Start the flask server running GN2
cd $GN2_BASE_DIR/wqflask
echo "Starting with $settings"
-/usr/bin/env python runserver.py
+python runserver.py
diff --git a/bin/test-website b/bin/test-website
index be223d94..7fbcfd2f 100755
--- a/bin/test-website
+++ b/bin/test-website
@@ -1,111 +1,7 @@
-#!/usr/bin/env ruby
+#! /bin/bash
-
-USAGE = <<EOT
-This is Mechanical-Rob - an automated web server tester for
- Genenetwork.org that uses the brilliant
- mechanize gem with minitest.
-
-To use this software you need to install mechanize. Run it from
-the root of the genenetwork2 source tree as, for example,
-
- ./bin/test-website http://localhost:5003/ (default)
-
-If you are using the small deployment database you can use
-
- ./bin/test-website --skip -n
-
-To run all tests
-
- ./bin/test-website --all
-
-To run individual tests on localhost you can do
-
- ruby -Itest -Itest/lib test/lib/mapping.rb --name="/Mapping/"
-
-For more information see http://genenetwork.org/
-
-EOT
-$stderr.print USAGE
-
-require 'optparse'
-
-options = { database: :small, link_checker: false}
-opts = OptionParser.new do |o|
- o.banner = "Usage: #{File.basename($0)} [options] URL"
-
- o.on('-d','--database', String, 'Use database (default db_webqtl_s)') do |s|
- options[:database] =
- case s
- when 'xx'
- :unknown
- else
- :small
- end
- end
-
- o.on('--all', 'Run all tests') do
- options[:all] = true
- end
-
- o.on('-l','--link-checker', 'Check for dead links') do
- options[:link_checker] = true
- end
-
- o.on('--navigation', 'Check for navigation') do
- options[:navigation] = true
- end
-
- o.on('--mapping', 'Check for mapping') do
- options[:mapping] = true
- end
-
- o.on('--skip-broken', 'Skip tests that are known to be broken') do
- options[:skip_broken] = true
- end
-
- o.separator ""
- o.on_tail('-h', '--help', 'display this help and exit') do
- options[:show_help] = true
- end
-end
-
-opts.parse!(ARGV)
-
-if options[:show_help]
- print opts
+if [ -z $GN2_PROFILE ]; then
+ echo "Run request tests with something like"
+ echo env GN2_PROFILE=/home/wrk/opt/gn-latest ./bin/genenetwork2 ./etc/default_settings.py -c ../test/requests/test-website.py -a http://localhost:5003
exit 1
-end
-
-$options = options # we are using a global here
-$host =
- if ARGV.size>0
- ARGV.shift
- else
- "http://localhost:5003"
- end
-
-$stderr.print "Testing <",$host,">\n"
-
-require 'mechanize'
-require 'minitest/spec'
-require 'minitest/autorun'
-
-# These are the actual testing modules
-
-libpath = File.dirname(File.dirname(__FILE__))
-$: << File.join(libpath,'test/lib')
-
-require 'main_web_functionality'
-
-if options[:all] or options[:mapping]
- require 'mapping'
-end
-
-if options[:all] or options[:link_checker]
- require 'link_checker'
-end
-
-if options[:all] or options[:navigation]
- require 'navigation'
-end
+fi
diff --git a/doc/API_readme.md b/doc/API_readme.md
new file mode 100644
index 00000000..652376a0
--- /dev/null
+++ b/doc/API_readme.md
@@ -0,0 +1,169 @@
+# API Query Documentation #
+---
+# Fetching Dataset/Trait info/data #
+---
+## Fetch Species List ##
+
+To get a list of species with data available in GN (and their associated names and ids):
+```
+curl http://gn2.genenetwork.org/api/v_pre1/species
+[ { "FullName": "Mus musculus", "Id": 1, "Name": "mouse", "TaxonomyId": 10090 }, ... { "FullName": "Populus trichocarpa", "Id": 10, "Name": "poplar", "TaxonomyId": 3689 } ]
+```
+
+Or to get a single species info:
+```
+curl http://gn2.genenetwork.org/api/v_pre1/species/mouse
+```
+OR
+```
+curl http://gn2.genenetwork.org/api/v_pre1/species/mouse.json
+```
+
+*For all queries where the last field is a user-specified name/ID, there will be the option to append a file format type. Currently there is only JSON (and it will default to JSON if none is provided), but other formats will be added later*
+
+## Fetch Groups/RISets ##
+
+This query can optionally filter by species:
+
+```
+curl http://gn2.genenetwork.org/api/v_pre1/groups (for all species)
+```
+OR
+```
+curl http://gn2.genenetwork.org/api/v_pre1/groups/mouse (for just mouse groups/RISets)
+[ { "DisplayName": "BXD", "FullName": "BXD RI Family", "GeneticType": "riset", "Id": 1, "MappingMethodId": "1", "Name": "BXD", "SpeciesId": 1, "public": 2 }, ... { "DisplayName": "AIL LGSM F34 and F39-43 (GBS)", "FullName": "AIL LGSM F34 and F39-43 (GBS)", "GeneticType": "intercross", "Id": 72, "MappingMethodId": "2", "Name": "AIL-LGSM-F34-F39-43-GBS", "SpeciesId": 1, "public": 2 } ]
+```
+
+## Fetch Genotypes for Group/RISet ##
+```
+curl http://gn2.genenetwork.org/api/v_pre1/genotypes/bimbam/BXD
+curl http://gn2.genenetwork.org/api/v_pre1/genotypes/BXD.bimbam
+```
+Returns a group's genotypes in one of several formats - bimbam, rqtl2, or geno (a format used by qtlreaper which is just a CSV file consisting of marker positions and genotypes)
+
+Rqtl2 genotype queries can also include the dataset name and will return a zip of the genotypes, phenotypes, and gene map (marker names/positions). For example:
+```
+curl http://gn2.genenetwork.org/api/v_pre1/genotypes/rqtl2/BXD/HC_M2_0606_P.zip
+```
+
+## Fetch Datasets ##
+```
+curl http://gn2.genenetwork.org/api/v_pre1/datasets/bxd
+```
+OR
+```
+curl http://gn2.genenetwork.org/api/v_pre1/datasets/mouse/bxd
+[ { "AvgID": 1, "CreateTime": "Fri, 01 Aug 2003 00:00:00 GMT", "DataScale": "log2", "FullName": "UTHSC/ETHZ/EPFL BXD Liver Polar Metabolites Extraction A, CD Cohorts (Mar 2017) log2", "Id": 1, "Long_Abbreviation": "BXDMicroArray_ProbeSet_August03", "ProbeFreezeId": 3, "ShortName": "Brain U74Av2 08/03 MAS5", "Short_Abbreviation": "Br_U_0803_M", "confidentiality": 0, "public": 0 }, ... { "AvgID": 3, "CreateTime": "Tue, 14 Aug 2018 00:00:00 GMT", "DataScale": "log2", "FullName": "EPFL/LISP BXD CD Liver Affy Mouse Gene 1.0 ST (Aug18) RMA", "Id": 859, "Long_Abbreviation": "EPFLMouseLiverCDRMAApr18", "ProbeFreezeId": 181, "ShortName": "EPFL/LISP BXD CD Liver Affy Mouse Gene 1.0 ST (Aug18) RMA", "Short_Abbreviation": "EPFLMouseLiverCDRMA0818", "confidentiality": 0, "public": 1 } ]
+```
+(I added the option to specify species just in case we end up with the same group name across multiple species at some point, though it's currently unnecessary)
+
+## Fetch Individual Dataset Info ##
+### For mRNA Assay/"ProbeSet" ###
+
+```
+curl http://gn2.genenetwork.org/api/v_pre1/dataset/HC_M2_0606_P
+```
+OR
+```
+curl http://gn2.genenetwork.org/api/v_pre1/dataset/bxd/HC_M2_0606_P```
+{ "confidential": 0, "data_scale": "log2", "dataset_type": "mRNA expression", "full_name": "Hippocampus Consortium M430v2 (Jun06) PDNN", "id": 112, "name": "HC_M2_0606_P", "public": 2, "short_name": "Hippocampus M430v2 BXD 06/06 PDNN", "tissue": "Hippocampus mRNA", "tissue_id": 9 }
+```
+(This also has the option to specify group/riset)
+
+### For "Phenotypes" (basically non-mRNA Expression; stuff like weight, sex, etc) ###
+For these traits, the query fetches publication info and takes the group and phenotype 'ID' as input. For example:
+```
+curl http://gn2.genenetwork.org/api/v_pre1/dataset/bxd/10001
+{ "dataset_type": "phenotype", "description": "Central nervous system, morphology: Cerebellum weight, whole, bilateral in adults of both sexes [mg]", "id": 10001, "name": "CBLWT2", "pubmed_id": 11438585, "title": "Genetic control of the mouse cerebellum: identification of quantitative trait loci modulating size and architecture", "year": "2001" }
+```
+
+## Fetch Sample Data for Dataset ##
+```
+curl http://gn2.genenetwork.org/api/v_pre1/sample_data/HSNIH-PalmerPublish.csv
+```
+
+Returns a CSV file with sample/strain names as the columns and trait IDs as rows
+
+## Fetch Sample Data for Single Trait ##
+```
+curl http://gn2.genenetwork.org/api/v_pre1/sample_data/HC_M2_0606_P/1436869_at
+[ { "data_id": 23415463, "sample_name": "129S1/SvImJ", "sample_name_2": "129S1/SvImJ", "se": 0.123, "value": 8.201 }, { "data_id": 23415463, "sample_name": "A/J", "sample_name_2": "A/J", "se": 0.046, "value": 8.413 }, { "data_id": 23415463, "sample_name": "AKR/J", "sample_name_2": "AKR/J", "se": 0.134, "value": 8.856 }, ... ]
+```
+
+## Fetch Trait List for Dataset ##
+```
+curl http://gn2.genenetwork.org/api/v_pre1/traits/HXBBXHPublish.json
+[ { "Additive": 0.0499967532467532, "Id": 10001, "LRS": 16.2831307029479, "Locus": "rs106114574", "PhenotypeId": 1449, "PublicationId": 319, "Sequence": 1 }, ... ]
+```
+
+Both JSON and CSV formats can be specified, with JSON as default. There is also an optional "ids_only" and "names_only" parameter that will only return a list of trait IDs or names, respectively.
+
+## Fetch Trait Info (Name, Description, Location, etc) ##
+### For mRNA Expression/"ProbeSet" ###
+```
+curl http://gn2.genenetwork.org/api/v_pre1/trait/HC_M2_0606_P/1436869_at
+{ "additive": -0.214087568058076, "alias": "HHG1; HLP3; HPE3; SMMCI; Dsh; Hhg1", "chr": "5", "description": "sonic hedgehog (hedgehog)", "id": 99602, "locus": "rs8253327", "lrs": 12.7711275309832, "mb": 28.457155, "mean": 9.27909090909091, "name": "1436869_at", "p_value": 0.306, "se": null, "symbol": "Shh" }
+```
+
+### For "Phenotypes" ###
+For phenotypes this just gets the max LRS, its location, and additive effect (as calculated by qtlreaper)
+
+Since each group/riset only has one phenotype "dataset", this query takes either the group/riset name or the group/riset name + "Publish" (for example "BXDPublish", which is the dataset name in the DB) as input
+```
+curl http://gn2.genenetwork.org/api/v_pre1/trait/BXD/10001
+{ "additive": 2.39444435069444, "id": 4, "locus": "rs48756159", "lrs": 13.4974911471087 }
+```
+
+---
+
+# Analyses #
+---
+## Mapping ##
+Currently two mapping tools can be used - GEMMA and R/qtl. qtlreaper will be added later with Christian Fischer's RUST implementation - https://github.com/chfi/rust-qtlreaper
+
+Each method's query takes the following parameters respectively (more will be added):
+### GEMMA ###
+* trait_id (*required*) - ID for trait being mapped
+* db (*required*) - DB name for trait above (Short_Abbreviation listed when you query for datasets)
+* use_loco - Whether to use LOCO (leave one chromosome out) method (default = false)
+* maf - minor allele frequency (default = 0.01)
+
+Example query:
+```
+curl http://gn2.genenetwork.org/api/v_pre1/mapping?trait_id=10015&db=BXDPublish&method=gemma&use_loco=true
+```
+
+### R/qtl ###
+(See the R/qtl guide for information on some of these options - http://www.rqtl.org/manual/qtl-manual.pdf)
+* trait_id (*required*) - ID for trait being mapped
+* db (*required*) - DB name for trait above (Short_Abbreviation listed when you query for datasets)
+* rqtl_method - hk (default) | ehk | em | imp | mr | mr-imp | mr-argmax ; Corresponds to the "method" option for the R/qtl scanone function.
+* rqtl_model - normal (default) | binary | 2-part | np ; corresponds to the "model" option for the R/qtl scanone function
+* num_perm - number of permutations; 0 by default
+* control_marker - Name of marker to use as control; this relies on the user knowing the name of the marker they want to use as a covariate
+* interval_mapping - Whether to use interval mapping; "false" by default
+* pair_scan - *NYI*
+
+Example query:
+```
+curl http://gn2.genenetwork.org/api/v_pre1/mapping?trait_id=1418701_at&db=HC_M2_0606_P&method=rqtl&num_perm=100
+```
+
+Some combinations of methods/models may not make sense. The R/qtl manual should be referred to for any questions on its use (specifically the scanone function in this case)
+
+## Calculate Correlation ##
+Currently only Sample and Tissue correlations are implemented
+
+This query currently takes the following parameters (though more will be added):
+* trait_id (*required*) - ID for trait used for correlation
+* db (*required*) - DB name for the trait above (this is the Short_Abbreviation listed when you query for datasets)
+* target_db (*required*) - Target DB name to be correlated against
+* type - sample (default) | tissue
+* method - pearson (default) | spearman
+* return - Number of results to return (default = 500)
+
+Example query:
+```
+curl http://gn2.genenetwork.org/api/v_pre1/correlation?trait_id=1427571_at&db=HC_M2_0606_P&target_db=BXDPublish&type=sample&return_count=100
+[ { "#_strains": 6, "p_value": 0.004804664723032055, "sample_r": -0.942857142857143, "trait": 20511 }, { "#_strains": 6, "p_value": 0.004804664723032055, "sample_r": -0.942857142857143, "trait": 20724 }, { "#_strains": 12, "p_value": 1.8288943424888848e-05, "sample_r": -0.9233615170820528, "trait": 13536 }, { "#_strains": 7, "p_value": 0.006807187408935392, "sample_r": 0.8928571428571429, "trait": 10157 }, { "#_strains": 7, "p_value": 0.006807187408935392, "sample_r": -0.8928571428571429, "trait": 20392 }, ... ]
+```
diff --git a/doc/GUIX-Reproducible-from-source.org b/doc/GUIX-Reproducible-from-source.org
index 4399ea26..83adce99 100644
--- a/doc/GUIX-Reproducible-from-source.org
+++ b/doc/GUIX-Reproducible-from-source.org
@@ -2,19 +2,188 @@
* Table of Contents :TOC:
- [[#introduction][Introduction]]
- - [[#binary-deployment][Binary deployment]]
+ - [[#binary-deployment-through-gnu-guix][Binary deployment through GNU Guix]]
+ - [[#quick-installation-recipe][Quick installation recipe]]
+ - [[#step-1-install-gnu-guix][Step 1: Install GNU Guix]]
+ - [[#step-2-checkout-the-gn2-git-repositories][Step 2: Checkout the GN2 git repositories]]
+ - [[#step-3-authorize-the-gn-guix-server][Step 3: Authorize the GN Guix server]]
+ - [[#step-4-install-and-run-gn2][Step 4: Install and run GN2]]
- [[#from-source-deployment][From source deployment]]
- [[#create-archive][Create archive]]
+ - [[#source-deployment][Source deployment]]
+ - [[#run-your-own-copy-of-gn2][Run your own copy of GN2]]
+ - [[#set-up-nginx-port-forwarding][Set up nginx port forwarding]]
+ - [[#source-deployment-and-other-information-on-reproducibility][Source deployment and other information on reproducibility]]
+ - [[#update-to-recent-guix][Update to recent guix]]
+ - [[#install-gn2][Install GN2]]
+ - [[#run-gn2][Run GN2]]
* Introduction
Large system deployments tend to get very complex. In this document we
explain the GeneNetwork deployment system which is based on GNU Guix
-(see Pjotr's [[https://github.com/pjotrp/guix-notes/blob/master/README.md][Guix-notes]]).
+(see Pjotr's [[https://github.com/pjotrp/guix-notes/blob/master/README.md][Guix-notes]] and the main [[README.org]] doc).
-* Binary deployment
+* Binary deployment through GNU Guix
+** Quick installation recipe
-NYA (will go to README)
+This is a recipe for quick and dirty installation of GN2. For
+convenience everything is installed as root, though in reality only
+GNU Guix has to be installed as root. I tested this recipe on a fresh
+install of Debian 8.3.0 (in KVM) though it should work on any modern
+Linux distribution (including CentOS).
+
+
+Note that GN2 consists of an approx. 5 GB installation including
+database. If you use a virtual machine we recommend to use at least
+double.
+
+** Step 1: Install GNU Guix
+
+Fetch the GNU Guix binary from [[https://www.gnu.org/software/guix/download/][here]] (middle panel) and follow
+[[https://www.gnu.org/software/guix/manual/html_node/Binary-Installation.html][instructions]]. Essentially, download and unpack the tar ball (which
+creates directories in /gnu and /var/guix), add build users and group
+(Guix builds software as unpriviliged users) and run the Guix daemon
+after fixing the paths (also known as the 'profile').
+
+Once you have succeeded, you have to [[https://github.com/pjotrp/guix-notes/blob/master/INSTALL.org#set-the-key][set the key]] (getting permission
+to download binaries from the GNU server) and you should be able to
+install the hello package using binary packages (no building)
+
+#+begin_src bash
+export PATH=~/.guix-profile/bin:$PATH
+guix pull
+guix package -i hello --dry-run
+#+end_src
+
+Which should show something like
+
+: The following files would be downloaded:
+: /gnu/store/zby49aqfbd9w9br4l52mvb3y6f9vfv22-hello-2.10
+: ...
+#+end_src
+
+means binary installs. The actual installation command of 'hello' is
+
+#+begin_src bash
+guix package -i hello
+hello
+ Hello, world!
+#+end_src
+
+If you actually see things building it means that Guix is not yet
+properly installed and up-to-date, i.e., the key is missing or you
+need to do a 'guix pull'. Press Ctrl-C to interrupt.
+
+If you need more help we have another writeup in [[https://github.com/pjotrp/guix-notes/blob/master/INSTALL.org#binary-installation][guix-notes]]. To get
+rid of the locale warning see [[https://github.com/pjotrp/guix-notes/blob/master/INSTALL.org#set-locale][set-locale]].
+
+** Step 2: Checkout the GN2 git repositories
+
+To fixate the software dependency graph GN2 uses git repositories of
+Guix packages. First install git if it is missing
+
+#+begin_src bash
+guix package -i git
+export GIT_SSL_CAINFO=/etc/ssl/certs/ca-certificates.crt
+#+end_src
+
+check out the git repositories (gn-deploy branch)
+
+#+begin_src bash
+cd ~
+mkdir genenetwork
+cd genenetwork
+git clone --branch gn-deploy https://github.com/genenetwork/guix-bioinformatics
+git clone --branch gn-deploy --recursive https://github.com/genenetwork/guix guix-gn-deploy
+cd guix-gn-deploy
+#+end_src bash
+
+To test whether this is working try:
+
+#+begin_src bash
+#+end_src bash
+
+** Step 3: Authorize the GN Guix server
+
+GN2 has its own GNU Guix binary distribution server. To trust it you have
+to add the following key
+
+#+begin_src scheme
+(public-key
+ (ecc
+ (curve Ed25519)
+ (q #11217788B41ADC8D5B8E71BD87EF699C65312EC387752899FE9C888856F5C769#)
+ )
+)
+#+end_src
+
+by pasting it into the command
+
+#+begin_src bash
+guix archive --authorize
+#+end_src
+
+and hit Ctrl-D.
+
+Now you can use the substitute server to install GN2 binaries.
+
+** Step 4: Install and run GN2
+
+Since this is a quick and dirty install we are going to override the
+GNU Guix package path by pointing the package path to our repository:
+
+#+begin_src bash
+rm /root/.config/guix/latest
+ln -s ~/genenetwork/guix-gn-deploy/ /root/.config/guix/latest
+#+end_src
+
+Now check whether you can find the GN2 package with
+
+#+begin_src bash
+env GUIX_PACKAGE_PATH=~/genenetwork/guix-bioinformatics/ guix package -A genenetwork2
+ genenetwork2 2.0-a8fcff4 out gn/packages/genenetwork.scm:144:2
+#+end_src
+
+(ignore the source file newer then ... messages, this is caused by the
+/root/.config/guix/latest override).
+
+And install with
+
+#+begin_src bash
+env GUIX_PACKAGE_PATH=~/genenetwork/guix-bioinformatics/ \
+ guix package -i genenetwork2 \
+ --substitute-urls="http://guix.genenetwork.org"
+#+end_src
+
+Note: the order of the substitute url's may make a difference in speed
+(put the one first that is fastest for your location and time of day).
+
+Note: if your system starts building or gives an error it may well be
+Step 3 did not succeed. The installation should actually be smooth at
+this point and only do binary installs (no compiling).
+
+After installation you should be able to run genenetwork2 after updating
+the Guix suggested environment vars. Check the output of
+
+#+begin_src bash
+guix package --search-paths
+export PYTHONPATH="/root/.guix-profile/lib/python2.7/site-packages"
+export R_LIBS_SITE="/root/.guix-profile/site-library/"
+#+end_src
+
+and copy-paste the listed exports into the terminal before running:
+
+#+begin_src bash
+genenetwork2
+#+end_src
+
+It will complain that the database is missing. See the next section on
+running MySQL server for downloading and installing a MySQL GN2
+database. After installing the database restart genenetwork2 and point
+your browser at [[http://localhost:5003/]].
+
+End of the GN2 installation recipe!
* From source deployment
@@ -52,3 +221,182 @@ gn-stable-guix$ env GUIX_PACKAGE_PATH=../guix-bioinformatics ./pre-inst-env guix
* Create archive
: env GUIX_PACKAGE_PATH=../../genenetwork/guix-bioinformatics/ ./pre-inst-env guix archive --export -r genenetwork2 > guix_gn2-2.0-9e9475053.nar
+
+
+* Source deployment
+
+This section gives a more elaborate instruction for installing GN2
+from source.
+
+First execute above 4 steps:
+
+ - [[#step-1-install-gnu-guix][Step 1: Install GNU Guix]]
+ - [[#step-2-checkout-the-gn2-git-repositories][Step 2: Checkout the GN2 git repositories]]
+ - [[#step-3-authorize-the-gn-guix-server][Step 3: Authorize the GN Guix server]]
+ - [[#step-4-install-and-run-gn2-][Step 4: Install and run GN2 ]]
+
+
+** Run your own copy of GN2
+
+At some point you may want to fix the source code. Assuming you have
+Guix and Genenetwork2 installed (as described above) clone the GN2
+repository from https://github.com/genenetwork/genenetwork2.
+
+Copy-paste the paths into your terminal (mainly so PYTHON_PATH and
+R_LIBS_SITE are set) from the information given by guix:
+
+: guix package --search-paths
+
+Inside the repository:
+
+: cd genenetwork2
+: ./bin/genenetwork2
+
+Will fire up your local repo http://localhost:5003/ using the
+settings in ./etc/default_settings.py. These settings may
+not reflect your system. To override settings create your own from a copy of
+default_settings.py and pass it into GN2 with
+
+: ./bin/genenetwork2 $HOME/my_settings.py
+
+and everything *should* work (note the full path to the settings
+file). This way we develop against the exact same dependency graph of
+software.
+
+If something is not working, take a hint from the settings file
+that comes in the Guix installation. It sits in something like
+
+: cat ~/.guix-profile/lib/python2.7/site-packages/genenetwork2-2.0-py2.7.egg/etc/default_settings.py
+
+** Set up nginx port forwarding
+
+nginx can be used as a reverse proxy for GN2. For example, we want to
+expose GN2 on port 80 while it is running on port 5003. Essentially
+the configuration looks like
+
+#+begin_src js
+ server {
+ listen 80;
+ server_name test-gn2.genenetwork.org;
+ access_log logs/test-gn2.access.log;
+
+ proxy_connect_timeout 3000;
+ proxy_send_timeout 3000;
+ proxy_read_timeout 3000;
+ send_timeout 3000;
+
+ location / {
+ proxy_set_header Host $http_host;
+ proxy_set_header Connection keep-alive;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_set_header X-Forwarded-Host $server_name;
+ proxy_pass http://127.0.0.1:5003;
+ }
+}
+#+end_src js
+
+Install the nginx webserver (as root)
+
+: guix package -i nginx
+
+The nginx example configuration examples can be found in the Guix
+store through
+
+: ls -l /root/.guix-profile/sbin/nginx
+: lrwxrwxrwx 3 root guixbuild 66 Dec 31 1969 /root/.guix-profile/sbin/nginx -> /gnu/store/g0wrcl5z27rmk5b52rldzvk1bzzbnz2l-nginx-1.8.1/sbin/nginx
+
+Use that path
+
+: ls /gnu/store/g0wrcl5z27rmk5b52rldzvk1bzzbnz2l-nginx-1.8.1/share/nginx/conf/
+: fastcgi.conf koi-win scgi_params
+: fastcgi.conf.default mime.types scgi_params.default
+: fastcgi_params mime.types.default uwsgi_params
+: fastcgi_params.default nginx.conf uwsgi_params.default
+: koi-utf nginx.conf.default win-utf
+
+And copy any relevant files to /etc/nginx. A configuration file for
+GeneNetwork (reverse proxy) port forwarding can be found in the source
+repository under ./etc/nginx-genenetwork.conf. Copy this file to /etc
+(still as root)
+: cp ./etc/nginx-genenetwork.conf /etc/nginx/
+
+Make dirs
+
+: mkdir -p /var/spool/nginx/logs
+
+Add users
+
+: adduser nobody ; addgroup nobody
+
+Run nginx
+
+: /root/.guix-profile/sbin/nginx -c /etc/nginx/nginx-genenetwork.conf -p /var/spool/nginx
+
+* Source deployment and other information on reproducibility
+
+See the document [[GUIX-Reproducible-from-source.org]].
+
+** Update to recent guix
+
+We now compile Guix from scratch.
+
+Create, install and run a recent version of the guix-daemon by
+compiling the guix repository you have installed with git in
+step 2. Follow [[https://github.com/pjotrp/guix-notes/blob/master/INSTALL.org#building-gnu-guix-from-source-using-guix][these]] steps carefully after
+
+: cd ~/genenetwork/guix-gn-deploy
+
+Make sure to restart the guix daemon and run guix client from this
+directory.
+
+** Install GN2
+
+Reinstall genenetwork2 using the new tree
+
+#+begin_src bash
+env GUIX_PACKAGE_PATH=~/genenetwork/guix-bioinformatics/ ./pre-inst-env guix package -i genenetwork2 --substitute-urls="http://guix.genenetwork.org https://mirror.guixsd.org"
+#+end_src bash
+
+Note the use of ./pre-inst-env here!
+
+Actually, it should be the same installation as in step 4, so nothing
+gets downloaded.
+
+** Run GN2
+
+Make a note of the paths with
+
+#+begin_src bash
+./pre-inst-env guix package --search-paths
+#+end_src bash
+
+or this should also work if guix is installed
+
+#+begin_src bash
+guix package --search-paths
+#+end_src bash
+
+After setting the paths for the server
+
+#+begin_src bash
+export PATH=~/.guix-profile/bin:$PATH
+export PYTHONPATH="$HOME/.guix-profile/lib/python2.7/site-packages"
+export R_LIBS_SITE="$HOME/.guix-profile/site-library/"
+export GUIX_GTK3_PATH="$HOME/.guix-profile/lib/gtk-3.0"
+export GI_TYPELIB_PATH="$HOME/.guix-profile/lib/girepository-1.0"
+export XDG_DATA_DIRS="$HOME/.guix-profile/share"
+export GIO_EXTRA_MODULES="$HOME/.guix-profile/lib/gio/modules"
+#+end_src bash
+
+run the main script (in ~/.guix-profile/bin)
+
+#+begin_src bash
+genenetwork2
+#+end_src bash
+
+will start the default server which listens on port 5003, i.e.,
+http://localhost:5003/.
+
+OK, we are where we were before with step 4. Only difference is that we
+used our own compiled guix server.
diff --git a/doc/README.org b/doc/README.org
index b38ea664..620c946c 100644
--- a/doc/README.org
+++ b/doc/README.org
@@ -2,33 +2,29 @@
* Table of Contents :TOC:
- [[#introduction][Introduction]]
- - [[#quick-installation-recipe][Quick installation recipe]]
- - [[#step-1-install-gnu-guix][Step 1: Install GNU Guix]]
- - [[#step-2-checkout-the-gn2-git-repositories][Step 2: Checkout the GN2 git repositories]]
- - [[#step-3-authorize-the-gn-guix-server][Step 3: Authorize the GN Guix server]]
- - [[#step-4-install-and-run-gn2][Step 4: Install and run GN2]]
+ - [[#install][Install]]
+ - [[#tarball][Tarball]]
+ - [[#docker][Docker]]
+ - [[#with-source][With source]]
+ - [[#running-gn2][Running GN2]]
- [[#run-mysql-server][Run MySQL server]]
+ - [[#install-mysql-with-gnu-guix][Install MySQL with GNU GUIx]]
+ - [[#load-the-small-database-in-mysql][Load the small database in MySQL]]
- [[#gn2-dependency-graph][GN2 Dependency Graph]]
- - [[#source-deployment][Source deployment]]
- - [[#run-your-own-copy-of-gn2][Run your own copy of GN2]]
- - [[#set-up-nginx-port-forwarding][Set up nginx port forwarding]]
- - [[#source-deployment-and-other-information-on-reproducibility][Source deployment and other information on reproducibility]]
- - [[#update-to-recent-guix][Update to recent guix]]
- - [[#install-gn2][Install GN2]]
- - [[#run-gn2][Run GN2]]
+ - [[#working-with-the-gn2-source-code][Working with the GN2 source code]]
+ - [[#running-elasticsearch][Running ElasticSearch]]
+ - [[#systemd][SystemD]]
+ - [[#read-more][Read more]]
- [[#trouble-shooting][Trouble shooting]]
- [[#importerror-no-module-named-jinja2][ImportError: No module named jinja2]]
- - [[#error-can-not-find-directory-homegn2_data][ERROR: can not find directory $HOME/gn2_data]]
+ - [[#error-can-not-find-directory-homegn2_data-or-can-not-find-directory-homegenotype_filesgenotype][ERROR: 'can not find directory $HOME/gn2_data' or 'can not find directory $HOME/genotype_files/genotype']]
- [[#cant-run-a-module][Can't run a module]]
- [[#rpy2-error-show-now-found][Rpy2 error 'show' now found]]
+ - [[#mysql-cant-connect-server-through-socket-error][Mysql can't connect server through socket ERROR]]
- [[#irc-session][IRC session]]
* Introduction
-If you want to understand the architecture of GN2 read
-[[Architecture.org]]. The rest of this document is mostly on deployment
-of GN2.
-
Large system deployments can get very [[http://biogems.info/contrib/genenetwork/gn2.svg ][complex]]. In this document we
explain the GeneNetwork version 2 (GN2) reproducible deployment system
which is based on GNU Guix (see also [[https://github.com/pjotrp/guix-notes/blob/master/README.md][Guix-notes]]). The Guix
@@ -37,195 +33,133 @@ system can be used to install GN with all its files and dependencies.
The official installation path is from a checked out version of the
main Guix package tree and that of the Genenetwork package
tree. Current supported versions can be found as the SHA values of
-'gn-latest' branches of [[https://github.com/genenetwork/guix-bioinformatics/tree/gn-latest][Guix bioinformatics]] and [[https://github.com/genenetwork/guix/tree/gn-latest][GNU Guix main]].
+'gn-latest' branches of [[https://gitlab.com/genenetwork/guix-bioinformatics][Guix bioinformatics]] and [[https://gitlab.com/genenetwork/guix][GNU Guix]].
For a full view of runtime dependencies as defined by GNU Guix, see
-the [[#gn2-dependency-graph][GN2 Dependency Graph]].
-
-* Quick installation recipe
-
-This is a recipe for quick and dirty installation of GN2. For
-convenience everything is installed as root, though in reality only
-GNU Guix has to be installed as root. I tested this recipe on a fresh
-install of Debian 8.3.0 (in KVM) though it should work on any modern
-Linux distribution (including CentOS). For more elaborate installation
-instructions see [[#source-deployment][Source deployment]].
+an example of the [[#gn2-dependency-graph][GN2 Dependency Graph]].
-Note that GN2 consists of an approx. 5 GB installation including
-database. If you use a virtual machine we recommend to use at least
-double.
+* Install
-** Step 1: Install GNU Guix
+The quickest way to install GN2 is by using a binary installation
+(tarball or Docker image). These installations are bundled by GNU
+Guix and include all dependencies. You can install GeneNetwork on most
+Linux distributions, including Debian, Ubuntu, Fedora and CentOS,
+provided you have administrator privileges (root). The alternative is
+a Docker installation.
-Fetch the GNU Guix binary from [[https://www.gnu.org/software/guix/download/][here]] (middle panel) and follow
-[[https://www.gnu.org/software/guix/manual/html_node/Binary-Installation.html][instructions]]. Essentially, download and unpack the tar ball (which
-creates directories in /gnu and /var/guix), add build users and group
-(Guix builds software as unpriviliged users) and run the Guix daemon
-after fixing the paths (also known as the 'profile').
+** Tarball
-Once you have succeeded, you have to [[https://github.com/pjotrp/guix-notes/blob/master/INSTALL.org#set-the-key][set the key]] (getting permission
-to download binaries from the GNU server) and you should be able to
-install the hello package using binary packages (no building)
+Download the ~800Mb tarball from
+[[http://files.genenetwork.org/software/binary_tarball/]]. Validate the checksum and
+unpack to root, for example
-#+begin_src bash
-export PATH=~/.guix-profile/bin:$PATH
-guix pull
-guix package -i hello --dry-run
-#+end_src
-
-Which should show something like
+: tar xvzf genenetwork2-2.10rc3-1538ffd-tarball-pack.tar.gz
+: mv /gnu /
+: mv /opt/genenetwork2 /opt/
-: The following files would be downloaded:
-: /gnu/store/zby49aqfbd9w9br4l52mvb3y6f9vfv22-hello-2.10
-: ...
-#+end_src
+Now you shoud be able to start the server with
-means binary installs. The actual installation command of 'hello' is
+: /opt/genenetwork2/bin/genenetwork2
-#+begin_src bash
-guix package -i hello
-hello
- Hello, world!
-#+end_src
+When the server stops with a MySQL error [[#run-mysql-server][Run MySQL server]]
+and set SQL_URI to point at it. For example:
-If you actually see things building it means that Guix is not yet
-properly installed and up-to-date, i.e., the key is missing or you
-need to do a 'guix pull'. Press Ctrl-C to interrupt.
+: export SQL_URI=mysql://gn2:mysql_password@127.0.0.1/db_webqtl_s
-If you need more help we have another writeup in [[https://github.com/pjotrp/guix-notes/blob/master/INSTALL.org#binary-installation][guix-notes]]. To get
-rid of the locale warning see [[https://github.com/pjotrp/guix-notes/blob/master/INSTALL.org#set-locale][set-locale]].
+See also [[#mysql-cant-connect-server-through-socket-error][Mysql can't connect server through socket ERROR]].
-** Step 2: Checkout the GN2 git repositories
+** Docker
-To fixate the software dependency graph GN2 uses git repositories of
-Guix packages. First install git if it is missing
+Docker images are also available through
+[[http://files.genenetwork.org/software/]]. Validate the checksum and run
+with [[https://docs.docker.com/engine/reference/commandline/load/][Docker load]].
-#+begin_src bash
-guix package -i git
-export GIT_SSL_CAINFO=/etc/ssl/certs/ca-certificates.crt
-#+end_src
+** With source
-check out the git repositories (gn-deploy branch)
+For more elaborate installation instructions on deploying GeneNetwork from
+source see [[#source-deployment][Source deployment]].
-#+begin_src bash
-cd ~
-mkdir genenetwork
-cd genenetwork
-git clone --branch gn-deploy https://github.com/genenetwork/guix-bioinformatics
-git clone --branch gn-deploy --recursive https://github.com/genenetwork/guix guix-gn-deploy
-cd guix-gn-deploy
-#+end_src bash
+* Running GN2
-To test whether this is working try:
+Default settings for GN2 are listed in a file called
+[[../etc/default_settings.py][default_settings.py]]. You can copy this file and pass it as a new
+parameter to the genenetwork2 command, e.g.
-#+begin_src bash
-#+end_src bash
+: genenetwork2 mysettings.py
+or you can set environment variables to override individual parameters, e.g.
-** Step 3: Authorize the GN Guix server
+: env SERVER_PORT=5004 SQL_URI=mysql://user:pwd@dbhostname/db_webqtl genenetwork2
-GN2 has its own GNU Guix binary distribution server. To trust it you have
-to add the following key
+the debug and logging switches can be particularly useful when
+developing GN2.
-#+begin_src scheme
-(public-key
- (ecc
- (curve Ed25519)
- (q #11217788B41ADC8D5B8E71BD87EF699C65312EC387752899FE9C888856F5C769#)
- )
-)
-#+end_src
-
-by pasting it into the command
-
-#+begin_src bash
-guix archive --authorize
-#+end_src
-
-and hit Ctrl-D.
-
-Now you can use the substitute server to install GN2 binaries.
-
-** Step 4: Install and run GN2
-
-Since this is a quick and dirty install we are going to override the
-GNU Guix package path by pointing the package path to our repository:
-
-#+begin_src bash
-rm /root/.config/guix/latest
-ln -s ~/genenetwork/guix-gn-deploy/ /root/.config/guix/latest
-#+end_src
+* Run MySQL server
+** Install MySQL with GNU GUIx
-Now check whether you can find the GN2 package with
+These are the steps you can take to install a fresh installation of
+mysql (which comes as part of the GNU Guix genenetwork2 install).
-#+begin_src bash
-env GUIX_PACKAGE_PATH=~/genenetwork/guix-bioinformatics/ guix package -A genenetwork2
- genenetwork2 2.0-a8fcff4 out gn/packages/genenetwork.scm:144:2
-#+end_src
+As root configure and run
-(ignore the source file newer then ... messages, this is caused by the
-/root/.config/guix/latest override).
+#+BEGIN_SRC bash
+adduser mysql && addgroup mysql
+mysqld --datadir=/var/mysql --initialize-insecure
+mkdir -p /var/run/mysqld
+chown mysql.mysql ~/mysql /var/run/mysqld
+mysqld -u mysql --datadir=/var/mysql --explicit_defaults_for_timestamp -P 12048"
+#+END_SRC
-And install with
+If you want to run as root you may have to set
-#+begin_src bash
-env GUIX_PACKAGE_PATH=~/genenetwork/guix-bioinformatics/ \
- guix package -i genenetwork2 \
- --substitute-urls="http://guix.genenetwork.org"
-#+end_src
+: /etc/my.cnf
+: [mysqld]
+: user=root
-Note: the order of the substitute url's may make a difference in speed
-(put the one first that is fastest for your location and time of day).
+To check error output in a file on start-up run with something like
-Note: if your system starts building or gives an error it may well be
-Step 3 did not succeed. The installation should actually be smooth at
-this point and only do binary installs (no compiling).
+: mysqld -u mysql --console --explicit_defaults_for_timestamp --datadir=/gnu/mysql --log-error=~/test.log
-After installation you should be able to run genenetwork2 after updating
-the Guix suggested environment vars. Check the output of
+Other tips are that Guix installs mysqld in your profile, so this may work
-#+begin_src bash
-guix package --search-paths
-export PYTHONPATH="/root/.guix-profile/lib/python2.7/site-packages"
-export R_LIBS_SITE="/root/.guix-profile/site-library/"
-#+end_src
+: /home/user/.guix-profile/bin/mysqld -u mysql --explicit_defaults_for_timestamp --datadir=/gnu/mysql
-and copy-paste the listed exports into the terminal before running:
+When you get errors like:
-#+begin_src bash
-genenetwork2
-#+end_src
+: qlalchemy.exc.IntegrityError: (_mysql_exceptions.IntegrityError) (1215, 'Cannot add foreign key constraint')
-It will complain that the database is missing. See the next section on
-running MySQL server for downloading and installing a MySQL GN2
-database. After installing the database restart genenetwork2 and point
-your browser at [[http://localhost:5003/]].
+you may need to set
-End of the GN2 installation recipe!
+: set foreign_key_checks=0
-* Run MySQL server
+** Load the small database in MySQL
At this point we require the underlying distribution to install and
-run mysqld. Currently we have two databases for deployment,
+run mysqld (see next section for GNU Guix). Currently we have two databases for deployment,
'db_webqtl_s' is the small testing database containing experiments
from BXD mice and 'db_webqtl_plant' which contains all plant related
material.
Download one database from
-http://files.genenetwork.org/raw_database/
-https://s3.amazonaws.com/genenetwork2/db_webqtl_s.zip
+[[http://files.genenetwork.org/raw_database/]]
+
+[[https://s3.amazonaws.com/genenetwork2/db_webqtl_s.zip]]
Check the md5sum.
After installation inflate the database binary in the MySQL directory
-(this installation path is subject to change soon)
+: cd ~/mysql
: chown -R mysql:mysql db_webqtl_s/
: chmod 700 db_webqtl_s/
: chmod 660 db_webqtl_s/*
-restart MySQL service (mysqld). Login as root and
+restart MySQL service (mysqld). Login as root
+
+: myslq -u root
+
+and
: mysql> show databases;
: +--------------------+
@@ -241,9 +175,12 @@ Set permissions and match password in your settings file below:
: mysql> grant all privileges on db_webqtl_s.* to gn2@"localhost" identified by 'mysql_password';
+You may need to change "localhost" to whatever domain you are
+connecting from (mysql will give an error).
+
Note that if the mysql connection is not working, try connecting to
the IP address and check server firewall, hosts.allow and mysql IP
-configuration.
+configuration (see below).
Note for the plant database you can rename it to db_webqtl_s, or
change the settings in etc/default_settings.py to match your path.
@@ -255,183 +192,44 @@ Graph of all runtime dependencies as installed by GNU Guix.
#+ATTR_HTML: :title GN2_graph
http://biogems.info/contrib/genenetwork/gn2.svg
-* Source deployment
-
-This section gives a more elaborate instruction for installing GN2
-from source.
-
-First execute above 4 steps:
-
- - [[#step-1-install-gnu-guix][Step 1: Install GNU Guix]]
- - [[#step-2-checkout-the-gn2-git-repositories][Step 2: Checkout the GN2 git repositories]]
- - [[#step-3-authorize-the-gn-guix-server][Step 3: Authorize the GN Guix server]]
- - [[#step-4-install-and-run-gn2-][Step 4: Install and run GN2 ]]
-
-
-** Run your own copy of GN2
-
-At some point you may want to fix the source code. Assuming you have
-Guix and Genenetwork2 installed (as described above) clone the GN2
-repository from https://github.com/genenetwork/genenetwork2.
-
-Copy-paste the paths into your terminal (mainly so PYTHON_PATH and
-R_LIBS_SITE are set) from the information given by guix:
-
-: guix package --search-paths
-
-Inside the repository:
-
-: cd genenetwork2
-: ./bin/genenetwork2
-
-Will fire up your local repo http://localhost:5003/ using the
-settings in ./etc/default_settings.py. These settings may
-not reflect your system. To override settings create your own from a copy of
-default_settings.py and pass it into GN2 with
-
-: ./bin/genenetwork2 $HOME/my_settings.py
-
-and everything *should* work (note the full path to the settings
-file). This way we develop against the exact same dependency graph of
-software.
-
-If something is not working, take a hint from the settings file
-that comes in the Guix installation. It sits in something like
+* Working with the GN2 source code
-: cat ~/.guix-profile/lib/python2.7/site-packages/genenetwork2-2.0-py2.7.egg/etc/default_settings.py
+See [[development.org]].
-** Set up nginx port forwarding
+* Running ElasticSearch
-nginx can be used as a reverse proxy for GN2. For example, we want to
-expose GN2 on port 80 while it is running on port 5003. Essentially
-the configuration looks like
+In order to start up elasticsearch:
+Penguin - change user to "elasticsearch" and use the following command: "env JAVA_HOME=/opt/jdk-9.0.4 /opt/elasticsearch-6.2.1/bin/elasticsearch"
-#+begin_src js
- server {
- listen 80;
- server_name test-gn2.genenetwork.org;
- access_log logs/test-gn2.access.log;
- proxy_connect_timeout 3000;
- proxy_send_timeout 3000;
- proxy_read_timeout 3000;
- send_timeout 3000;
+** SystemD
- location / {
- proxy_set_header Host $http_host;
- proxy_set_header Connection keep-alive;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Host $server_name;
- proxy_pass http://127.0.0.1:5003;
- }
-}
-#+end_src js
+New server - as root run "systemctl restart elasticsearch"
-Install the nginx webserver (as root)
+#+BEGIN_SRC
+tux01:/etc/systemd/system# cat elasticsearch.service
+[Unit]
+Description=Run Elasticsearch
-: guix package -i nginx
+[Service]
+ExecStart=/opt/elasticsearch-6.2.1/bin/elasticsearch
+Environment=JAVA_HOME=/opt/jdk-9.0.4
+Environment="ES_JAVA_OPTS=-Xms1g -Xmx8g"
+Environment="PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/opt/jdk-9.0.4/bin"
+LimitNOFILE=65536
+StandardOutput=syslog
+StandardError=syslog
+User=elasticsearch
-The nginx example configuration examples can be found in the Guix
-store through
+[Install]
+WantedBy=multi-user.target
+#+END_SRC
-: ls -l /root/.guix-profile/sbin/nginx
-: lrwxrwxrwx 3 root guixbuild 66 Dec 31 1969 /root/.guix-profile/sbin/nginx -> /gnu/store/g0wrcl5z27rmk5b52rldzvk1bzzbnz2l-nginx-1.8.1/sbin/nginx
+* Read more
-Use that path
-
-: ls /gnu/store/g0wrcl5z27rmk5b52rldzvk1bzzbnz2l-nginx-1.8.1/share/nginx/conf/
-: fastcgi.conf koi-win scgi_params
-: fastcgi.conf.default mime.types scgi_params.default
-: fastcgi_params mime.types.default uwsgi_params
-: fastcgi_params.default nginx.conf uwsgi_params.default
-: koi-utf nginx.conf.default win-utf
-
-And copy any relevant files to /etc/nginx. A configuration file for
-GeneNetwork (reverse proxy) port forwarding can be found in the source
-repository under ./etc/nginx-genenetwork.conf. Copy this file to /etc
-(still as root)
-: cp ./etc/nginx-genenetwork.conf /etc/nginx/
-
-Make dirs
-
-: mkdir -p /var/spool/nginx/logs
-
-Add users
-
-: adduser nobody ; addgroup nobody
-
-Run nginx
-
-: /root/.guix-profile/sbin/nginx -c /etc/nginx/nginx-genenetwork.conf -p /var/spool/nginx
-
-* Source deployment and other information on reproducibility
-
-See the document [[GUIX-Reproducible-from-source.org]].
-
-** Update to recent guix
-
-We now compile Guix from scratch.
-
-Create, install and run a recent version of the guix-daemon by
-compiling the guix repository you have installed with git in
-step 2. Follow [[https://github.com/pjotrp/guix-notes/blob/master/INSTALL.org#building-gnu-guix-from-source-using-guix][these]] steps carefully after
-
-: cd ~/genenetwork/guix-gn-deploy
-
-Make sure to restart the guix daemon and run guix client from this
-directory.
-
-** Install GN2
-
-Reinstall genenetwork2 using the new tree
-
-#+begin_src bash
-env GUIX_PACKAGE_PATH=~/genenetwork/guix-bioinformatics/ ./pre-inst-env guix package -i genenetwork2 --substitute-urls="http://guix.genenetwork.org https://mirror.guixsd.org"
-#+end_src bash
-
-Note the use of ./pre-inst-env here!
-
-Actually, it should be the same installation as in step 4, so nothing
-gets downloaded.
-
-** Run GN2
-
-Make a note of the paths with
-
-#+begin_src bash
-./pre-inst-env guix package --search-paths
-#+end_src bash
-
-or this should also work if guix is installed
-
-#+begin_src bash
-guix package --search-paths
-#+end_src bash
-
-After setting the paths for the server
-
-#+begin_src bash
-export PATH=~/.guix-profile/bin:$PATH
-export PYTHONPATH="$HOME/.guix-profile/lib/python2.7/site-packages"
-export R_LIBS_SITE="$HOME/.guix-profile/site-library/"
-export GUIX_GTK3_PATH="$HOME/.guix-profile/lib/gtk-3.0"
-export GI_TYPELIB_PATH="$HOME/.guix-profile/lib/girepository-1.0"
-export XDG_DATA_DIRS="$HOME/.guix-profile/share"
-export GIO_EXTRA_MODULES="$HOME/.guix-profile/lib/gio/modules"
-#+end_src bash
-
-run the main script (in ~/.guix-profile/bin)
-
-#+begin_src bash
-genenetwork2
-#+end_src bash
-
-will start the default server which listens on port 5003, i.e.,
-http://localhost:5003/.
-
-OK, we are where we were before with step 4. Only difference is that we
-used our own compiled guix server.
+If you want to understand the architecture of GN2 read
+[[Architecture.org]]. The rest of this document is mostly on deployment
+of GN2.
* Trouble shooting
@@ -451,13 +249,17 @@ On one system:
: export GEM_PATH="$HOME/.guix-profile/lib/ruby/gems/2.2.0"
and perhaps a few more.
-** ERROR: can not find directory $HOME/gn2_data
+** ERROR: 'can not find directory $HOME/gn2_data' or 'can not find directory $HOME/genotype_files/genotype'
The default settings file looks in your $HOME/gn2_data. Since these
files come with a Guix installation you should take a hint from the
values in the installed version of default_settings.py (see above in
this document).
+You can use the GENENETWORK_FILES switch to set the datadir, for example
+
+: env GN2_PROFILE=~/opt/gn-latest GENENETWORK_FILES=/gnu/data/gn2_data ./bin/genenetwork2
+
** Can't run a module
In rare cases, development modules are not brought in with Guix
@@ -479,6 +281,26 @@ R_LIBS_SITE. Please check your GNU Guix GN2 installation paths,
you man need to reinstall. Note that this may be the point you
may want to start using profiles (see profile section).
+** Mysql can't connect server through socket ERROR
+
+The following error
+
+: sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (2002, 'Can\'t connect to local MySQL server through socket \'/run/mysqld/mysqld.sock\' (2 "No such file or directory")')
+
+means that MySQL is trying to connect locally to a non-existent MySQL
+server, something you may see in a container. Typically replicated with something like
+
+: mysql -h localhost
+
+try to connect over the network interface instead, e.g.
+
+: mysql -h 127.0.0.1
+
+if that works run genenetwork after setting SQL_URI to something like
+
+: export SQL_URI=mysql://gn2:mysql_password@127.0.0.1/db_webqtl_s
+
+
* IRC session
Here an IRC session where we installed GN2 from scratch using GNU Guix
diff --git a/doc/database.org b/doc/database.org
index 624174a4..5107b660 100644
--- a/doc/database.org
+++ b/doc/database.org
@@ -1,9 +1,19 @@
-- github Document reduction issue
+* Database Information
+
+WARNING: This document contains information on the GN databases which
+will change over time. The GN database is currently MySQL based and,
+while efficient, contains a number of design choices we want to grow
+'out' of. Especially with an eye on reproducibility we want to
+introduce versioning.
+
+So do not treat the information in this document as a final way of
+accessing data. It is better to use the
+[[https://github.com/genenetwork/gn_server/blob/master/doc/API.md][REST API]].
* The small test database (2GB)
The default install comes with a smaller database which includes a
-number of the BSD's and the Human liver dataset (GSE9588).
+number of the BXD's and the Human liver dataset (GSE9588).
* GeneNetwork database
@@ -750,9 +760,30 @@ show indexes from ProbeSetFreeze;
| 1 | 5 | 0.303492 |
+--------+----------+----------+
-** Publication and publishdata (all pheno)
+** Publication
+
+Publication:
+
+| Id | PubMed_ID | Abstract | Title | Pages | Month | Year |
+
-Phenotype pubs
+** Publishdata (all pheno)
+
+One of three phenotype tables.
+
+mysql> select * from PublishData limit 5;
++---------+----------+-------+
+| Id | StrainId | value |
++---------+----------+-------+
+| 8966353 | 349 | 29.6 |
+| 8966353 | 350 | 27.8 |
+| 8966353 | 351 | 26.6 |
+| 8966353 | 352 | 28.5 |
+| 8966353 | 353 | 24.6 |
++---------+----------+-------+
+5 rows in set (0.25 sec)
+
+See below for phenotype access.
** QuickSearch
@@ -1073,7 +1104,37 @@ select * from ProbeSetXRef limit 5;
i.e., for Strain Id 1 (DataId) 1, the locus '10.095.400' has a
phenotype value of 5.742.
-GeneNetwork1 already has a limited REST interface, if you do
+Interestingly ProbeData and PublishData have the same layout as
+ProbeSetData. ProbeData is only in use for Affy assays - and not used
+for computations. PublishData contains trait values. ProbeSetData.id
+matches ProbeSetXRef.DataId while PublishData.id matches
+PublishXRef.DataId.
+
+select * from PublishXRef limit 3;
++-------+-------------+-------------+---------------+---------+----------------+------------------+-----------+----------+-------------------------------------------------------+
+| Id | InbredSetId | PhenotypeId | PublicationId | DataId | Locus | LRS | additive | Sequence | comments |
++-------+-------------+-------------+---------------+---------+----------------+------------------+-----------+----------+-------------------------------------------------------+
+| 10001 | 8 | 1 | 1 | 8966353 | D2Mit5 | 10.18351644706 | -1.20875 | 1 | |
+| 10001 | 7 | 2 | 53 | 8966813 | D7Mit25UT | 9.85534330983917 | -2.86875 | 1 | |
+| 10001 | 4 | 3 | 81 | 8966947 | CEL-6_57082524 | 11.7119505898121 | -23.28875 | 1 | elissa modified Abstract at Tue Jun 7 11:38:00 2005 |
++-------+-------------+-------------+---------------+---------+----------------+------------------+-----------+----------+-------------------------------------------------------+
+3 rows in set (0.00 sec)
+
+ties the trait data (PublishData) with the inbredsetid (matching
+PublishFreeze.InbredSetId), locus and publication.
+
+select * from PublishFreeze -> ;
++----+------------+--------------------------+-------------+------------+--------+-------------+-----------------+-----------------+
+| Id | Name | FullName | ShortName | CreateTime | public | InbredSetId | confidentiality | AuthorisedUsers |
++----+------------+--------------------------+-------------+------------+--------+-------------+-----------------+-----------------+
+| 1 | BXDPublish | BXD Published Phenotypes | BXDPublish | 2004-07-17 | 2 | 1 | 0 | NULL |
+| 18 | HLCPublish | HLC Published Phenotypes | HLC Publish | 2012-02-20 | 2 | 34 | 0 | NULL |
++----+------------+--------------------------+-------------+------------+--------+-------------+-----------------+-----------------+
+2 rows in set (0.02 sec)
+
+which gives us the datasets.
+
+GeneNetwork1 has a limited REST interface, if you do
: curl "http://robot.genenetwork.org/webqtl/main.py?cmd=get&probeset=1443823_s_at&db=HC_M2_0606_P"
@@ -1082,6 +1143,9 @@ we get
: ProbeSetID B6D2F1 C57BL/6J DBA/2J BXD1 BXD2 BXD5 BXD6 BXD8 BXD9 BXD11 BXD12 BXD13 BXD15 BXD16 BXD19 BXD20 BXD21 BXD22 BXD23 BXD24 BXD27 BXD28 BXD29 BXD31 BXD32 BXD33 BXD34 BXD38 BXD39 BXD40 BXD42 BXD67 BXD68 BXD43 BXD44 BXD45 BXD48 BXD50 BXD51 BXD55 BXD60 BXD61 BXD62 BXD63 BXD64 BXD65 BXD66 BXD69 BXD70 BXD73 BXD74 BXD75 BXD76 BXD77 BXD79 BXD73a BXD83 BXD84 BXD85 BXD86 BXD87 BXD89 BXD90 BXD65b BXD93 BXD94 A/J AKR/J C3H/HeJ C57BL/6ByJ CXB1 CXB2 CXB3 CXB4 CXB5 CXB6 CXB7 CXB8 CXB9 CXB10 CXB11 CXB12 CXB13 BXD48a 129S1/SvImJ BALB/cJ BALB/cByJ LG/J NOD/ShiLtJ PWD/PhJ BXD65a BXD98 BXD99 CAST/EiJ KK/HlJ WSB/EiJ NZO/HlLtJ PWK/PhJ D2B6F1
: 1443823_s_at 15.251 15.626 14.716 15.198 14.918 15.057 15.232 14.968 14.87 15.084 15.192 14.924 15.343 15.226 15.364 15.36 14.792 14.908 15.344 14.948 15.08 15.021 15.176 15.14 14.796 15.443 14.636 14.921 15.22 15.62 14.816 15.39 15.428 14.982 15.05 15.13 14.722 14.636 15.242 15.527 14.825 14.416 15.125 15.362 15.226 15.176 15.328 14.895 15.141 15.634 14.922 14.764 15.122 15.448 15.398 15.089 14.765 15.234 15.302 14.774 14.979 15.212 15.29 15.012 15.041 15.448 14.34 14.338 14.809 15.046 14.816 15.232 14.933 15.255 15.21 14.766 14.8 15.506 15.749 15.274 15.599 15.673 14.651 14.692 14.552 14.563 14.164 14.546 15.044 14.695 15.162 14.772 14.645 15.493 14.75 14.786 15.003 15.148 15.221
+(see https://github.com/genenetwork/gn_server/blob/master/doc/API.md
+for the latest REST API).
+
getTraitData is defined in the file [[https://github.com/genenetwork/genenetwork/blob/master/web/webqtl/textUI/cmdClass.py#L134][web/webqtl/textUI/cmdClass.py]].
probe is None, so the code at line 199 is run
@@ -1165,6 +1229,97 @@ select * from ProbeSetData limit 5;
5 rows in set (0.00 sec)
linked by ProbeSetXRef.dataid.
+
+*** For PublishData:
+
+List datasets for BXD (InbredSetId=1):
+
+select * from PublishXRef where InbredSetId=1 limit 3;
++-------+-------------+-------------+---------------+---------+-----------+------------------+------------------+----------+--------------------------------------------------------------------------------+
+| Id | InbredSetId | PhenotypeId | PublicationId | DataId | Locus | LRS | additive | Sequence | comments |
++-------+-------------+-------------+---------------+---------+-----------+------------------+------------------+----------+--------------------------------------------------------------------------------+
+| 10001 | 1 | 4 | 116 | 8967043 | rs8253516 | 13.4974914158039 | 2.39444444444444 | 1 | robwilliams modified post_publication_description at Mon Jul 30 14:58:10 2012
+ |
+| 10002 | 1 | 10 | 116 | 8967044 | rs3666069 | 22.0042692151629 | 2.08178571428572 | 1 | robwilliams modified phenotype at Thu Oct 28 21:43:28 2010
+ |
+| 10003 | 1 | 15 | 116 | 8967045 | D18Mit4 | 15.5929163293343 | 19.0882352941176 | 1 | robwilliams modified phenotype at Mon May 23 20:52:19 2011
+ |
++-------+-------------+-------------+---------------+---------+-----------+------------------+------------------+----------+--------------------------------------------------------------------------------+
+
+where ID is the 'record' or, effectively, dataset.
+
+select distinct(publicationid) from PublishXRef where InbredSetId=1 limit 3;
++---------------+
+| publicationid |
++---------------+
+| 116 |
+| 117 |
+| 118 |
++---------------+
+
+select distinct
+PublishXRef.id,publicationid,phenotypeid,Phenotype.post_publication_description
+from PublishXRef,Phenotype where InbredSetId=1 and
+phenotypeid=Phenotype.id limit 3;
++-------+---------------+-------------+----------------------------------------------------------------------------------------------------------------------------+
+| id | publicationid | phenotypeid | post_publication_description |
++-------+---------------+-------------+----------------------------------------------------------------------------------------------------------------------------+
+| 10001 | 116 | 4 | Central nervous system, morphology: Cerebellum weight [mg] |
+| 10002 | 116 | 10 | Central nervous system, morphology: Cerebellum weight after adjustment for covariance with brain size [mg] |
+| 10003 | 116 | 15 | Central nervous system, morphology: Brain weight, male and female adult average, unadjusted for body weight, age, sex [mg] |
++-------+---------------+-------------+----------------------------------------------------------------------------------------------------------------------------+
+
+The id field is the same that is used in the GN2 web interface and the
+PublicationID ties the datasets together.
+
+To list trait values:
+
+SELECT Strain.Name, PublishData.id, PublishData.value from
+(Strain,PublishData, PublishXRef) Where PublishData.StrainId =
+Strain.id limit 3;
+
++------+---------+-------+
+| Name | id | value |
++------+---------+-------+
+| CXB1 | 8966353 | 29.6 |
+| CXB1 | 8966353 | 29.6 |
+| CXB1 | 8966353 | 29.6 |
++------+---------+-------+
+
+here id should match dataid again:
+
+SELECT Strain.Name, PublishData.id, PublishData.value from
+(Strain,PublishData, PublishXRef) Where PublishData.StrainId =
+Strain.id and PublishXRef.dataid=8967043 and
+PublishXRef.dataid=PublishData.id limit 3;
++------+---------+-------+
+| Name | id | value |
++------+---------+-------+
+| BXD1 | 8967043 | 61.4 |
+| BXD2 | 8967043 | 49 |
+| BXD5 | 8967043 | 62.5 |
++------+---------+-------+
+
+*** Datasets
+
+The REST API aims to present a unified interface for genotype and
+phenotype data. Phenotype datasets appear in two major forms in the
+database and we want to present them as one resource.
+
+Dataset names are defined in ProbeSetFreeze.name and Published.id ->
+publication (we'll ignore the probe dataset that uses
+ProbeFreeze.name). These tables should be meshed. It looks like the
+ids are non-overlapping with the publish record IDs starting at 10,001
+(someone has been smart, though it sets the limit of probesets now to
+10,000).
+
+The datasets are organized differently in these tables. All published
+BXD data is grouped on BXDpublished with the publications as
+'datasets'. So, that is how we list them in the REST API.
+
+To fetch all the datasets we first list ProbeSetFreeze entries. Then
+we list the Published entries.
+
** Fetch genotype information
*** SNPs
diff --git a/doc/development.org b/doc/development.org
new file mode 100644
index 00000000..5e6e318b
--- /dev/null
+++ b/doc/development.org
@@ -0,0 +1,43 @@
+* Development
+
+** Using GN2_PROFILE
+
+After cloning the git source tree you can run the contained GN2 using
+an existing GN2_PROFILE, i.e., use a profile that was create to run a
+binary installation of GN2. This profile may be found by typing
+
+: which genenetwork2
+: /home/wrk/opt/gn-latest-guix/bin/genenetwork2
+
+An example of running the development version would be
+
+: env GN2_PROFILE=/home/wrk/opt/gn-latest-guix ./bin/genenetwork2
+
+Profiles are stored in /gnu/store, so you may pick one up there
+
+: readlink -f $(dirname $(dirname `which genenetwork2`))
+: /gnu/store/dvckpaw770b00l6rv4ijql8wrk11iypv-profile
+
+and use that instead.
+
+Note that the genenetwork2 script sets up the environment for running
+the webserver. This includes path to R modules and python modules. These
+are output on startup. To make sure there is no environment pollution you can
+
+** Javascript modules
+
+As of release 2.10-pre4 we Javascript modules are installed in three places:
+
+1. JS_GUIX_PATH: the Guix store - these are Guix pre-packaged modules
+2. The git source tree (./wqflask/wqflask/static/packages/)
+3. JS_GN_PATH: a local directory containing (temporary) development modules
+
+Packages currently in git (2) will move to JS_GUIX_PATH (1) over
+time. This is to keep better track of origin updates. Putting packages
+in git (2) is actively discouraged(!), unless there are GN2 specific
+adaptations to the original Javascript modules.
+
+JS_GN_PATH (3) is for development purposes. By default is is set to
+$HOME/genenetwork/javascript. Say you are working on an updated
+version of a JS module not yet in (1) you can simply check out that
+module in that path and it should show up.
diff --git a/doc/elasticsearch.org b/doc/elasticsearch.org
new file mode 100644
index 00000000..864a8363
--- /dev/null
+++ b/doc/elasticsearch.org
@@ -0,0 +1,247 @@
+* Elasticsearch
+
+** Introduction
+
+GeneNetwork uses elasticsearch (ES) for all things considered
+'state'. One example is user collections, another is user management.
+
+** Example
+
+To get the right environment, first you can get a python REPL with something like
+
+: env GN2_PROFILE=~/opt/gn-latest ./bin/genenetwork2 ../etc/default_settings.py -cli python
+
+(make sure to use the correct GN2_PROFILE!)
+
+Next try
+
+#+BEGIN_SRC python
+
+from elasticsearch import Elasticsearch, TransportError
+
+es = Elasticsearch([{ "host": 'localhost', "port": '9200' }])
+
+# Dump all data
+
+es.search("*")
+
+# To fetch an E-mail record from the users index
+
+record = es.search(
+ index = 'users', doc_type = 'local', body = {
+ "query": { "match": { "email_address": "myname@email.com" } }
+ })
+
+# It is also possible to do wild card matching
+
+q = { "query": { "wildcard" : { "full_name" : "pjot*" } }}
+es.search(index = 'users', doc_type = 'local', body = q)
+
+# To get elements from that record:
+
+record['hits']['hits'][0][u'_source']['full_name']
+u'Pjotr'
+
+record['hits']['hits'][0][u'_source']['email_address']
+u"myname@email.com"
+
+#+END_SRC
+
+** Health
+
+ES provides support for checking its health:
+
+: curl -XGET http://localhost:9200/_cluster/health?pretty=true
+
+#+BEGIN_SRC json
+
+
+ {
+ "cluster_name" : "asgard",
+ "status" : "yellow",
+ "timed_out" : false,
+ "number_of_nodes" : 1,
+ "number_of_data_nodes" : 1,
+ "active_primary_shards" : 5,
+ "active_shards" : 5,
+ "relocating_shards" : 0,
+ "initializing_shards" : 0,
+ "unassigned_shards" : 5
+ }
+
+#+END_SRC
+
+Yellow means just one instance is running (no worries).
+
+To get full cluster info
+
+: curl -XGET "localhost:9200/_cluster/stats?human&pretty"
+
+#+BEGIN_SRC json
+{
+ "_nodes" : {
+ "total" : 1,
+ "successful" : 1,
+ "failed" : 0
+ },
+ "cluster_name" : "elasticsearch",
+ "timestamp" : 1529050366452,
+ "status" : "yellow",
+ "indices" : {
+ "count" : 3,
+ "shards" : {
+ "total" : 15,
+ "primaries" : 15,
+ "replication" : 0.0,
+ "index" : {
+ "shards" : {
+ "min" : 5,
+ "max" : 5,
+ "avg" : 5.0
+ },
+ "primaries" : {
+ "min" : 5,
+ "max" : 5,
+ "avg" : 5.0
+ },
+ "replication" : {
+ "min" : 0.0,
+ "max" : 0.0,
+ "avg" : 0.0
+ }
+ }
+ },
+ "docs" : {
+ "count" : 14579,
+ "deleted" : 0
+ },
+ "store" : {
+ "size" : "44.7mb",
+ "size_in_bytes" : 46892794
+ },
+ "fielddata" : {
+ "memory_size" : "0b",
+ "memory_size_in_bytes" : 0,
+ "evictions" : 0
+ },
+ "query_cache" : {
+ "memory_size" : "0b",
+ "memory_size_in_bytes" : 0,
+ "total_count" : 0,
+ "hit_count" : 0,
+ "miss_count" : 0,
+ "cache_size" : 0,
+ "cache_count" : 0,
+ "evictions" : 0
+ },
+ "completion" : {
+ "size" : "0b",
+ "size_in_bytes" : 0
+ },
+ "segments" : {
+ "count" : 24,
+ "memory" : "157.3kb",
+ "memory_in_bytes" : 161112,
+ "terms_memory" : "122.6kb",
+ "terms_memory_in_bytes" : 125569,
+ "stored_fields_memory" : "15.3kb",
+ "stored_fields_memory_in_bytes" : 15728,
+ "term_vectors_memory" : "0b",
+ "term_vectors_memory_in_bytes" : 0,
+ "norms_memory" : "10.8kb",
+ "norms_memory_in_bytes" : 11136,
+ "points_memory" : "111b",
+ "points_memory_in_bytes" : 111,
+ "doc_values_memory" : "8.3kb",
+ "doc_values_memory_in_bytes" : 8568,
+ "index_writer_memory" : "0b",
+ "index_writer_memory_in_bytes" : 0,
+ "version_map_memory" : "0b",
+ "version_map_memory_in_bytes" : 0,
+ "fixed_bit_set" : "0b",
+ "fixed_bit_set_memory_in_bytes" : 0,
+ "max_unsafe_auto_id_timestamp" : -1,
+ "file_sizes" : { }
+ }
+ },
+ "nodes" : {
+ "count" : {
+ "total" : 1,
+ "data" : 1,
+ "coordinating_only" : 0,
+ "master" : 1,
+ "ingest" : 1
+ },
+ "versions" : [
+ "6.2.1"
+ ],
+ "os" : {
+ "available_processors" : 16,
+ "allocated_processors" : 16,
+ "names" : [
+ {
+ "name" : "Linux",
+ "count" : 1
+ }
+ ],
+ "mem" : {
+ "total" : "125.9gb",
+ "total_in_bytes" : 135189286912,
+ "free" : "48.3gb",
+ "free_in_bytes" : 51922628608,
+ "used" : "77.5gb",
+ "used_in_bytes" : 83266658304,
+ "free_percent" : 38,
+ "used_percent" : 62
+ }
+ },
+ "process" : {
+ "cpu" : {
+ "percent" : 0
+ },
+ "open_file_descriptors" : {
+ "min" : 415,
+ "max" : 415,
+ "avg" : 415
+ }
+ },
+ "jvm" : {
+ "max_uptime" : "1.9d",
+ "max_uptime_in_millis" : 165800616,
+ "versions" : [
+ {
+ "version" : "9.0.4",
+ "vm_name" : "OpenJDK 64-Bit Server VM",
+ "vm_version" : "9.0.4+11",
+ "vm_vendor" : "Oracle Corporation",
+ "count" : 1
+ }
+ ],
+ "mem" : {
+ "heap_used" : "1.1gb",
+ "heap_used_in_bytes" : 1214872032,
+ "heap_max" : "23.8gb",
+ "heap_max_in_bytes" : 25656426496
+ },
+ "threads" : 110
+ },
+ "fs" : {
+ "total" : "786.4gb",
+ "total_in_bytes" : 844400918528,
+ "free" : "246.5gb",
+ "free_in_bytes" : 264688160768,
+ "available" : "206.5gb",
+ "available_in_bytes" : 221771468800
+ },
+ "plugins" : [ ],
+ "network_types" : {
+ "transport_types" : {
+ "netty4" : 1
+ },
+ "http_types" : {
+ "netty4" : 1
+ }
+ }
+ }
+}
+#+BEGIN_SRC json
diff --git a/etc/VERSION b/etc/VERSION
new file mode 100644
index 00000000..a4320e6f
--- /dev/null
+++ b/etc/VERSION
@@ -0,0 +1 @@
+2.11-rc2
diff --git a/etc/default_settings.py b/etc/default_settings.py
index 6acea637..75f84dc4 100644
--- a/etc/default_settings.py
+++ b/etc/default_settings.py
@@ -2,27 +2,32 @@
# webserver running in developer mode with limited console
# output. Copy this file and run it from ./bin/genenetwork2 configfile
#
-# Note that these settings are fetched in ./wqflask/utilities/tools.py
+# Note: these settings are fetched in ./wqflask/utilities/tools.py
# which has support for overriding them through environment variables,
# e.g.
#
# env LOG_SQL=True USE_REDIS=False ./bin/genenetwork2
# env LOG_LEVEL=DEBUG ./bin/genenetwork2 ~/gn2_settings.py
#
+# Typically you need to set GN2_PROFILE too.
+#
# Note also that in the near future we will additionally fetch
# settings from a JSON file
#
-# Note that values for False and 0 have to be strings here - otherwise
+# Note: values for False and 0 have to be strings here - otherwise
# Flask won't pick them up
+#
+# For GNU Guix deployment also check the paths in
+#
+# ~/.guix-profile/lib/python2.7/site-packages/genenetwork2-2.0-py2.7.egg/etc/default_settings.py
import os
import sys
-GN_VERSION = open("../VERSION","r").read()
+GN_VERSION = open("../etc/VERSION","r").read()
SQL_URI = "mysql://gn2:mysql_password@localhost/db_webqtl_s"
-SQLALCHEMY_DATABASE_URI = 'mysql://gn2:mysql_password@localhost/db_webqtl_s'
-SQLALCHEMY_POOL_RECYCLE = 3600
-GN_SERVER_URL = "http://localhost:8880/"
+SQL_ALCHEMY_POOL_RECYCLE = 3600
+GN_SERVER_URL = "http://localhost:8880/" # REST API server
# ---- Flask configuration (see website)
TRAP_BAD_REQUEST_ERRORS = True
@@ -33,36 +38,58 @@ SECURITY_RECOVERABLE = True
SECURITY_EMAIL_SENDER = "no-reply@genenetwork.org"
SECURITY_POST_LOGIN_VIEW = "/thank_you"
-SERVER_PORT = 5003
+SERVER_PORT = 5003 # running on localhost
SECRET_HMAC_CODE = '\x08\xdf\xfa\x93N\x80\xd9\\H@\\\x9f`\x98d^\xb4a;\xc6OM\x946a\xbc\xfc\x80:*\xebc'
+GITHUB_CLIENT_ID = "UNKNOWN"
+GITHUB_CLIENT_SECRET = "UNKNOWN"
+GITHUB_AUTH_URL = "UNKNOWN"
+GITHUB_API_URL = "UNKNOWN"
+
+ORCID_CLIENT_ID = "UNKNOWN"
+ORCID_CLIENT_SECRET = "UNKNOWN"
+ORCID_AUTH_URL = "UNKNOWN"
+ORCID_TOKEN_URL = "UNKNOWN"
+
+ELASTICSEARCH_HOST = "localhost"
+ELASTICSEARCH_PORT = '9200'
+
+SMTP_CONNECT = "localhost"
+SMTP_USERNAME = "UNKNOWN"
+SMTP_PASSWORD = "UNKNOWN"
+
+
# ---- Behavioural settings (defaults) note that logger and log levels can
# be overridden at the module level and with enviroment settings
WEBSERVER_MODE = 'DEV' # Python webserver mode (DEBUG|DEV|PROD)
WEBSERVER_BRANDING = None # Set the branding (nyi)
WEBSERVER_DEPLOY = None # Deployment specifics (nyi)
+WEBSERVER_URL = "http://localhost:"+str(SERVER_PORT)+"/" # external URL
LOG_LEVEL = 'WARNING' # Logger mode (DEBUG|INFO|WARNING|ERROR|CRITICAL)
LOG_LEVEL_DEBUG = '0' # logger.debugf log level (0-5, 5 = show all)
LOG_SQL = 'False' # Log SQL/backend and GN_SERVER calls
-LOG_SQLALCHEMY = 'False'
+LOG_SQL_ALCHEMY = 'False'
LOG_BENCH = True # Log bench marks
USE_REDIS = True # REDIS caching (note that redis will be phased out)
USE_GN_SERVER = 'False' # Use GN_SERVER SQL calls
+HOME = os.environ['HOME']
-# Paths to JS libraries
+# ---- Default locations
+GENENETWORK_FILES = HOME+"/genotype_files" # base dir for all static data files
-TWITTER_POST_FETCHER_JS_PATH = os.environ['HOME']+"/genenetwork/Twitter-Post-Fetcher"
+# ---- Path overrides for Genenetwork - the defaults are normally
+# picked up from Guix or in the HOME directory
-# ---- Path overrides for Genenetwork
# TMPDIR is normally picked up from the environment
-HOME=os.environ['HOME']
-LOGFILE = HOME+"/genenetwork2.log"
-GENENETWORK_FILES = HOME+"/gn2_data" # base dir for all static data files
-LOCAL_PRIVATE_FILES = HOME+"/gn2_private_data" # private static data files
-
-# ---- GN2 Executables
-PYLMM_COMMAND = str.strip(os.popen("which pylmm_redis").read())
-PLINK_COMMAND = str.strip(os.popen("which plink2").read())
-GEMMA_COMMAND = str.strip(os.popen("which gemma").read())
+# PRIVATE_FILES = HOME+"/gn2_private_data" # private static data files (unused)
+
+# ---- Local path to JS libraries - for development modules (only)
+JS_GN_PATH = os.environ['HOME']+"/genenetwork/javascript"
+
+# ---- GN2 Executables (overwrite for testing only)
+# PLINK_COMMAND = str.strip(os.popen("which plink2").read())
+# GEMMA_COMMAND = str.strip(os.popen("which gemma").read())
+REAPER_COMMAND = os.environ['GN2_PROFILE'] + "/bin/qtlreaper"
+# GEMMA_WRAPPER_COMMAND = str.strip(os.popen("which gemma-wrapper").read())
diff --git a/etc/nginx-genenetwork.conf b/etc/nginx-genenetwork.conf
deleted file mode 100644
index 06fd3c57..00000000
--- a/etc/nginx-genenetwork.conf
+++ /dev/null
@@ -1,54 +0,0 @@
-user nobody;
-worker_processes 4;
-pid /var/run/nginx.pid;
-
-error_log /var/log/nginx/error.log;
-
-events {
- worker_connections 16;
-}
-
-http {
- include mime.types;
- # default_type application/octet-stream;
-
- # sendfile on;
- keepalive_timeout 480;
-
- server {
- listen 80;
- server_name localhost;
-
- location / {
- root html;
- index index.html index.htm;
- }
-
- error_page 500 502 503 504 /50x.html;
- location = /50x.html {
- root html;
- }
- }
-
- server {
- listen 80;
- server_name test-gn2.genenetwork.org;
- access_log logs/test-gn2.access.log;
-
- proxy_connect_timeout 3000;
- proxy_send_timeout 3000;
- proxy_read_timeout 3000;
- send_timeout 3000;
-
- location / {
- # proxy_set_header Host $host;
- proxy_set_header Host $http_host;
- # proxy_redirect off;
- proxy_set_header Connection keep-alive;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- proxy_set_header X-Forwarded-Host $server_name;
- proxy_pass http://127.0.0.1:5003;
- }
- }
-}
diff --git a/jquery.qtip.css b/jquery.qtip.css
new file mode 100644
index 00000000..c2dcb306
--- /dev/null
+++ b/jquery.qtip.css
@@ -0,0 +1,623 @@
+/*
+ * qTip2 - Pretty powerful tooltips - v2.2.0
+ * http://qtip2.com
+ *
+ * Copyright (c) 2013 Craig Michael Thompson
+ * Released under the MIT, GPL licenses
+ * http://jquery.org/license
+ *
+ * Date: Thu Nov 21 2013 08:34 GMT+0000
+ * Plugins: tips modal viewport svg imagemap ie6
+ * Styles: basic css3
+ */
+.qtip{
+ position: absolute;
+ left: -28000px;
+ top: -28000px;
+ display: none;
+
+ max-width: 280px;
+ min-width: 50px;
+
+ font-size: 10.5px;
+ line-height: 12px;
+
+ direction: ltr;
+
+ box-shadow: none;
+ padding: 0;
+}
+
+ .qtip-content{
+ position: relative;
+ padding: 5px 9px;
+ overflow: hidden;
+
+ text-align: left;
+ word-wrap: break-word;
+ }
+
+ .qtip-titlebar{
+ position: relative;
+ padding: 5px 35px 5px 10px;
+ overflow: hidden;
+
+ border-width: 0 0 1px;
+ font-weight: bold;
+ }
+
+ .qtip-titlebar + .qtip-content{ border-top-width: 0 !important; }
+
+ /* Default close button class */
+ .qtip-close{
+ position: absolute;
+ right: -9px; top: -9px;
+
+ cursor: pointer;
+ outline: medium none;
+
+ border-width: 1px;
+ border-style: solid;
+ border-color: transparent;
+ }
+
+ .qtip-titlebar .qtip-close{
+ right: 4px; top: 50%;
+ margin-top: -9px;
+ }
+
+ * html .qtip-titlebar .qtip-close{ top: 16px; } /* IE fix */
+
+ .qtip-titlebar .ui-icon,
+ .qtip-icon .ui-icon{
+ display: block;
+ text-indent: -1000em;
+ direction: ltr;
+ }
+
+ .qtip-icon, .qtip-icon .ui-icon{
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+ text-decoration: none;
+ }
+
+ .qtip-icon .ui-icon{
+ width: 18px;
+ height: 14px;
+
+ line-height: 14px;
+ text-align: center;
+ text-indent: 0;
+ font: normal bold 10px/13px Tahoma,sans-serif;
+
+ color: inherit;
+ background: transparent none no-repeat -100em -100em;
+ }
+
+/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */
+.qtip-focus{}
+
+/* Applied on hover of tooltips i.e. added/removed on mouseenter/mouseleave respectively */
+.qtip-hover{}
+
+/* Default tooltip style */
+.qtip-default{
+ border-width: 1px;
+ border-style: solid;
+ border-color: #F1D031;
+
+ background-color: #FFFFA3;
+ color: #555;
+}
+
+ .qtip-default .qtip-titlebar{
+ background-color: #FFEF93;
+ }
+
+ .qtip-default .qtip-icon{
+ border-color: #CCC;
+ background: #F1F1F1;
+ color: #777;
+ }
+
+ .qtip-default .qtip-titlebar .qtip-close{
+ border-color: #AAA;
+ color: #111;
+ }
+
+
+
+/*! Light tooltip style */
+.qtip-light{
+ background-color: white;
+ border-color: #E2E2E2;
+ color: #454545;
+}
+
+ .qtip-light .qtip-titlebar{
+ background-color: #f1f1f1;
+ }
+
+
+/*! Dark tooltip style */
+.qtip-dark{
+ background-color: #505050;
+ border-color: #303030;
+ color: #f3f3f3;
+}
+
+ .qtip-dark .qtip-titlebar{
+ background-color: #404040;
+ }
+
+ .qtip-dark .qtip-icon{
+ border-color: #444;
+ }
+
+ .qtip-dark .qtip-titlebar .ui-state-hover{
+ border-color: #303030;
+ }
+
+
+/*! Cream tooltip style */
+.qtip-cream{
+ background-color: #FBF7AA;
+ border-color: #F9E98E;
+ color: #A27D35;
+}
+
+ .qtip-cream .qtip-titlebar{
+ background-color: #F0DE7D;
+ }
+
+ .qtip-cream .qtip-close .qtip-icon{
+ background-position: -82px 0;
+ }
+
+
+/*! Red tooltip style */
+.qtip-red{
+ background-color: #F78B83;
+ border-color: #D95252;
+ color: #912323;
+}
+
+ .qtip-red .qtip-titlebar{
+ background-color: #F06D65;
+ }
+
+ .qtip-red .qtip-close .qtip-icon{
+ background-position: -102px 0;
+ }
+
+ .qtip-red .qtip-icon{
+ border-color: #D95252;
+ }
+
+ .qtip-red .qtip-titlebar .ui-state-hover{
+ border-color: #D95252;
+ }
+
+
+/*! Green tooltip style */
+.qtip-green{
+ background-color: #CAED9E;
+ border-color: #90D93F;
+ color: #3F6219;
+}
+
+ .qtip-green .qtip-titlebar{
+ background-color: #B0DE78;
+ }
+
+ .qtip-green .qtip-close .qtip-icon{
+ background-position: -42px 0;
+ }
+
+
+/*! Blue tooltip style */
+.qtip-blue{
+ background-color: #E5F6FE;
+ border-color: #ADD9ED;
+ color: #5E99BD;
+}
+
+ .qtip-blue .qtip-titlebar{
+ background-color: #D0E9F5;
+ }
+
+ .qtip-blue .qtip-close .qtip-icon{
+ background-position: -2px 0;
+ }
+
+
+
+.qtip-shadow{
+ -webkit-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
+ -moz-box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
+ box-shadow: 1px 1px 3px 1px rgba(0, 0, 0, 0.15);
+}
+
+/* Add rounded corners to your tooltips in: FF3+, Chrome 2+, Opera 10.6+, IE9+, Safari 2+ */
+.qtip-rounded,
+.qtip-tipsy,
+.qtip-bootstrap{
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+}
+
+.qtip-rounded .qtip-titlebar{
+ -moz-border-radius: 4px 4px 0 0;
+ -webkit-border-radius: 4px 4px 0 0;
+ border-radius: 4px 4px 0 0;
+}
+
+/* Youtube tooltip style */
+.qtip-youtube{
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+
+ -webkit-box-shadow: 0 0 3px #333;
+ -moz-box-shadow: 0 0 3px #333;
+ box-shadow: 0 0 3px #333;
+
+ color: white;
+ border-width: 0;
+
+ background: #4A4A4A;
+ background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0,#4A4A4A),color-stop(100%,black));
+ background-image: -webkit-linear-gradient(top,#4A4A4A 0,black 100%);
+ background-image: -moz-linear-gradient(top,#4A4A4A 0,black 100%);
+ background-image: -ms-linear-gradient(top,#4A4A4A 0,black 100%);
+ background-image: -o-linear-gradient(top,#4A4A4A 0,black 100%);
+}
+
+ .qtip-youtube .qtip-titlebar{
+ background-color: #4A4A4A;
+ background-color: rgba(0,0,0,0);
+ }
+
+ .qtip-youtube .qtip-content{
+ padding: .75em;
+ font: 12px arial,sans-serif;
+
+ filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);
+ -ms-filter: "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#4a4a4a,EndColorStr=#000000);";
+ }
+
+ .qtip-youtube .qtip-icon{
+ border-color: #222;
+ }
+
+ .qtip-youtube .qtip-titlebar .ui-state-hover{
+ border-color: #303030;
+ }
+
+
+/* jQuery TOOLS Tooltip style */
+.qtip-jtools{
+ background: #232323;
+ background: rgba(0, 0, 0, 0.7);
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#717171), to(#232323));
+ background-image: -moz-linear-gradient(top, #717171, #232323);
+ background-image: -webkit-linear-gradient(top, #717171, #232323);
+ background-image: -ms-linear-gradient(top, #717171, #232323);
+ background-image: -o-linear-gradient(top, #717171, #232323);
+
+ border: 2px solid #ddd;
+ border: 2px solid rgba(241,241,241,1);
+
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+ border-radius: 2px;
+
+ -webkit-box-shadow: 0 0 12px #333;
+ -moz-box-shadow: 0 0 12px #333;
+ box-shadow: 0 0 12px #333;
+}
+
+ /* IE Specific */
+ .qtip-jtools .qtip-titlebar{
+ background-color: transparent;
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A);
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#4A4A4A)";
+ }
+ .qtip-jtools .qtip-content{
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323);
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4A4A4A,endColorstr=#232323)";
+ }
+
+ .qtip-jtools .qtip-titlebar,
+ .qtip-jtools .qtip-content{
+ background: transparent;
+ color: white;
+ border: 0 dashed transparent;
+ }
+
+ .qtip-jtools .qtip-icon{
+ border-color: #555;
+ }
+
+ .qtip-jtools .qtip-titlebar .ui-state-hover{
+ border-color: #333;
+ }
+
+
+/* Cluetip style */
+.qtip-cluetip{
+ -webkit-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
+ -moz-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
+ box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
+
+ background-color: #D9D9C2;
+ color: #111;
+ border: 0 dashed transparent;
+}
+
+ .qtip-cluetip .qtip-titlebar{
+ background-color: #87876A;
+ color: white;
+ border: 0 dashed transparent;
+ }
+
+ .qtip-cluetip .qtip-icon{
+ border-color: #808064;
+ }
+
+ .qtip-cluetip .qtip-titlebar .ui-state-hover{
+ border-color: #696952;
+ color: #696952;
+ }
+
+
+/* Tipsy style */
+.qtip-tipsy{
+ background: black;
+ background: rgba(0, 0, 0, .87);
+
+ color: white;
+ border: 0 solid transparent;
+
+ font-size: 11px;
+ font-family: 'Lucida Grande', sans-serif;
+ font-weight: bold;
+ line-height: 16px;
+ text-shadow: 0 1px black;
+}
+
+ .qtip-tipsy .qtip-titlebar{
+ padding: 6px 35px 0 10px;
+ background-color: transparent;
+ }
+
+ .qtip-tipsy .qtip-content{
+ padding: 6px 10px;
+ }
+
+ .qtip-tipsy .qtip-icon{
+ border-color: #222;
+ text-shadow: none;
+ }
+
+ .qtip-tipsy .qtip-titlebar .ui-state-hover{
+ border-color: #303030;
+ }
+
+
+/* Tipped style */
+.qtip-tipped{
+ border: 3px solid #959FA9;
+
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+
+ background-color: #F9F9F9;
+ color: #454545;
+
+ font-weight: normal;
+ font-family: serif;
+}
+
+ .qtip-tipped .qtip-titlebar{
+ border-bottom-width: 0;
+
+ color: white;
+ background: #3A79B8;
+ background-image: -webkit-gradient(linear, left top, left bottom, from(#3A79B8), to(#2E629D));
+ background-image: -webkit-linear-gradient(top, #3A79B8, #2E629D);
+ background-image: -moz-linear-gradient(top, #3A79B8, #2E629D);
+ background-image: -ms-linear-gradient(top, #3A79B8, #2E629D);
+ background-image: -o-linear-gradient(top, #3A79B8, #2E629D);
+ filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D);
+ -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#3A79B8,endColorstr=#2E629D)";
+ }
+
+ .qtip-tipped .qtip-icon{
+ border: 2px solid #285589;
+ background: #285589;
+ }
+
+ .qtip-tipped .qtip-icon .ui-icon{
+ background-color: #FBFBFB;
+ color: #555;
+ }
+
+
+/**
+ * Twitter Bootstrap style.
+ *
+ * Tested with IE 8, IE 9, Chrome 18, Firefox 9, Opera 11.
+ * Does not work with IE 7.
+ */
+.qtip-bootstrap{
+ /** Taken from Bootstrap body */
+ font-size: 14px;
+ line-height: 20px;
+ color: #333333;
+
+ /** Taken from Bootstrap .popover */
+ padding: 1px;
+ background-color: #ffffff;
+ border: 1px solid #ccc;
+ border: 1px solid rgba(0, 0, 0, 0.2);
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ border-radius: 6px;
+ -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+ -webkit-background-clip: padding-box;
+ -moz-background-clip: padding;
+ background-clip: padding-box;
+}
+
+ .qtip-bootstrap .qtip-titlebar{
+ /** Taken from Bootstrap .popover-title */
+ padding: 8px 14px;
+ margin: 0;
+ font-size: 14px;
+ font-weight: normal;
+ line-height: 18px;
+ background-color: #f7f7f7;
+ border-bottom: 1px solid #ebebeb;
+ -webkit-border-radius: 5px 5px 0 0;
+ -moz-border-radius: 5px 5px 0 0;
+ border-radius: 5px 5px 0 0;
+ }
+
+ .qtip-bootstrap .qtip-titlebar .qtip-close{
+ /**
+ * Overrides qTip2:
+ * .qtip-titlebar .qtip-close{
+ * [...]
+ * right: 4px;
+ * top: 50%;
+ * [...]
+ * border-style: solid;
+ * }
+ */
+ right: 11px;
+ top: 45%;
+ border-style: none;
+ }
+
+ .qtip-bootstrap .qtip-content{
+ /** Taken from Bootstrap .popover-content */
+ padding: 9px 14px;
+ }
+
+ .qtip-bootstrap .qtip-icon{
+ /**
+ * Overrides qTip2:
+ * .qtip-default .qtip-icon {
+ * border-color: #CCC;
+ * background: #F1F1F1;
+ * color: #777;
+ * }
+ */
+ background: transparent;
+ }
+
+ .qtip-bootstrap .qtip-icon .ui-icon{
+ /**
+ * Overrides qTip2:
+ * .qtip-icon .ui-icon{
+ * width: 18px;
+ * height: 14px;
+ * }
+ */
+ width: auto;
+ height: auto;
+
+ /* Taken from Bootstrap .close */
+ float: right;
+ font-size: 20px;
+ font-weight: bold;
+ line-height: 18px;
+ color: #000000;
+ text-shadow: 0 1px 0 #ffffff;
+ opacity: 0.2;
+ filter: alpha(opacity=20);
+ }
+
+ .qtip-bootstrap .qtip-icon .ui-icon:hover{
+ /* Taken from Bootstrap .close:hover */
+ color: #000000;
+ text-decoration: none;
+ cursor: pointer;
+ opacity: 0.4;
+ filter: alpha(opacity=40);
+ }
+
+
+/* IE9 fix - removes all filters */
+.qtip:not(.ie9haxors) div.qtip-content,
+.qtip:not(.ie9haxors) div.qtip-titlebar{
+ filter: none;
+ -ms-filter: none;
+}
+
+
+
+.qtip .qtip-tip{
+ margin: 0 auto;
+ overflow: hidden;
+ z-index: 10;
+
+}
+
+ /* Opera bug #357 - Incorrect tip position
+ https://github.com/Craga89/qTip2/issues/367 */
+ x:-o-prefocus, .qtip .qtip-tip{
+ visibility: hidden;
+ }
+
+ .qtip .qtip-tip,
+ .qtip .qtip-tip .qtip-vml,
+ .qtip .qtip-tip canvas{
+ position: absolute;
+
+ color: #123456;
+ background: transparent;
+ border: 0 dashed transparent;
+ }
+
+ .qtip .qtip-tip canvas{ top: 0; left: 0; }
+
+ .qtip .qtip-tip .qtip-vml{
+ behavior: url(#default#VML);
+ display: inline-block;
+ visibility: visible;
+ }
+
+#qtip-overlay{
+ position: fixed;
+ left: 0; top: 0;
+ width: 100%; height: 100%;
+}
+
+ /* Applied to modals with show.modal.blur set to true */
+ #qtip-overlay.blurs{ cursor: pointer; }
+
+ /* Change opacity of overlay here */
+ #qtip-overlay div{
+ position: absolute;
+ left: 0; top: 0;
+ width: 100%; height: 100%;
+
+ background-color: black;
+
+ opacity: 0.7;
+ filter:alpha(opacity=70);
+ -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
+ }
+
+
+
+.qtipmodal-ie6fix{
+ position: absolute !important;
+} \ No newline at end of file
diff --git a/scripts/maintenance/QTL_Reaper_v6.py b/scripts/maintenance/QTL_Reaper_v6.py
new file mode 100755
index 00000000..e50dbd40
--- /dev/null
+++ b/scripts/maintenance/QTL_Reaper_v6.py
@@ -0,0 +1,108 @@
+####### To run this program do: python QTL_Reaper_v2.py 235
+#Where 163 is the ProbeSetFreeze Id of the database that we want to calculate #the LRS
+#!/usr/bin/python
+import sys
+import os
+import reaper
+import MySQLdb
+import time
+
+con = MySQLdb.Connect(db='db_webqtl',user='username',passwd='', host="localhost")
+cursor = con.cursor()
+
+genotypeDir = '/gnshare/gn/web/genotypes/'
+genotype_1 = reaper.Dataset()
+
+#####get all of the genotypes
+cursor.execute('select Id, Name from InbredSet')
+results = cursor.fetchall()
+InbredSets = {}
+for item in results:
+ InbredSets[item[0]] = genotypeDir+str(item[1])+'.geno'
+
+ProbeSetFreezeIds=sys.argv[1:]
+if ProbeSetFreezeIds:
+ #####convert the Ids to integer
+ ProbeSetFreezeIds=map(int, ProbeSetFreezeIds)
+
+else:
+ #####get all of the dataset that need be updated
+ cursor.execute('select distinct(ProbeSetFreezeId) from ProbeSetXRef where pValue is NULL order by ProbeSetFreezeId desc')
+ results = cursor.fetchall()
+ ProbeSetFreezeIds = []
+ for item in results:
+ ProbeSetFreezeIds.append(item[0])
+
+####human dataset can NOT use this program calculate the LRS, ignore it
+if ProbeSetFreezeIds.__contains__(215):
+ ProbeSetFreezeIds.remove(215)
+
+#output_file = open ('/home/xzhou/work/DatabaseTools/cal_LRS_Additive_result.txt', 'w')
+
+#####update
+for ProbeSetFreezeId in ProbeSetFreezeIds:
+ cursor.execute("""
+ select InbredSetId
+ from ProbeFreeze, ProbeSetFreeze
+ where ProbeFreeze.Id=ProbeSetFreeze.ProbeFreezeId and ProbeSetFreeze.Id=%d
+ """%ProbeSetFreezeId);
+
+ InbredSetId = cursor.fetchone()[0]
+ if InbredSetId==3:
+ InbredSetId=1
+ #if InbredSetId==12:
+ # InbredSetId=2
+
+ print ProbeSetFreezeId, InbredSets[InbredSetId]
+
+ genotype_1.read(InbredSets[InbredSetId])
+ locuses = []
+ for geno in genotype_1:
+ for locus in geno:
+ locuses.append(locus.name)
+
+ cursor.execute('select ProbeSetId, Locus, DataId from ProbeSetXRef where ProbeSetFreezeId=%s'%ProbeSetFreezeId)
+ ProbeSetXRefInfos = cursor.fetchall()
+
+ kj=0
+ for aProbeSetXRef in ProbeSetXRefInfos:
+ ProbeSetId, Locus, DataId = aProbeSetXRef
+ prgy = genotype_1.prgy
+
+ cursor.execute("select Strain.Name, ProbeSetData.value from Strain, ProbeSetData where Strain.Id = ProbeSetData.StrainId and ProbeSetData.Id = %d" % DataId)
+ results = cursor.fetchall()
+ if not results:
+ continue
+ _strains = []
+ _values = []
+ for item2 in results:
+ strain, value = item2
+ if strain in prgy:
+ _strains.append(strain)
+ _values.append(value)
+ if not _strains or not _values:
+ continue
+
+ if len(_strains) < 8:
+ continue
+ qtlresults = genotype_1.regression(strains = _strains, trait = _values)
+ _max = max(qtlresults)
+ _locus = _max.locus.name
+ _additive = _max.additive
+ _max = _max.lrs
+
+ #output_file.write('%s\t%s\t%s\t%s\t%s\n' % (ProbeSetFreezeId, ProbeSetId, _locus, _max, _additive))
+
+ # _max(LRS) maybe is infinite sometimes, so define it as a very big number
+ if _max == float('inf'):
+ _max = 10000
+
+ cursor.execute('update ProbeSetXRef set Locus=%s, LRS=%s, additive=%s where ProbeSetId=%s and ProbeSetFreezeId=%s', \
+ (_locus, _max, _additive, ProbeSetId, ProbeSetFreezeId))
+
+ kj += 1
+ if kj%1000==0:
+ print ProbeSetFreezeId, InbredSets[InbredSetId],kj
+
+
+ print ProbeSetFreezeIds
diff --git a/scripts/maintenance/README.txt b/scripts/maintenance/README.txt
new file mode 100644
index 00000000..8604a5c9
--- /dev/null
+++ b/scripts/maintenance/README.txt
@@ -0,0 +1,66 @@
+Theses are Python2 scripts used for uploading data into the MySQL
+database (current as per April 2018)
+
+
+Last updated by A.Centeno 4-2-18
+==========================
+load_genotypes.py
+==========================
+Mainly used to enter genotype batch records
+Run load_genotypes.py as:
+python delete_genotypes.py /home/acenteno/copyfrom_spring211/Maintenance/dataset/Arthur-Geno-Pheno-Data/Load_Genotypes/config.ini
+
+==========================
+delete_genotypes.py
+==========================
+Mainly used to delete genotype batch records
+Run delete_genotypes.py as:
+python delete_genotypes.py /home/acenteno/copyfrom_spring211/Maintenance/dataset/Arthur-Geno-Pheno-Data/Delete_Genotypes/config.ini
+
+==========================
+load_phenotypes.py
+==========================
+Mainly used to enter phenotype trait batch records
+Run load_phenotypes.py as:
+python load_phenotypes.py /home/acenteno/copyfrom_spring211/Maintenance/dataset/Arthur-Geno-Pheno-Data/Load_Phenotypes/config.ini
+
+==========================
+delete_phenotypes.py
+==========================
+Mainly used to delete phenotype trait full records
+Run delete_phenotypes.py as:
+python delete_phenotypes.py /home/acenteno/copyfrom_spring211/Maintenance/dataset/Arthur-Geno-Pheno-Data/Delete_Phenotypes/config.ini
+
+==========================
+QTL_Reaper_v6.py
+==========================
+Mainly used to perform QTL reaper and obtain Max LRS values.
+Run QTL_Reaper_v6.py as:
+python QTL_Reaper_v6.py (and GN accession number here)
+
+==========================
+Update_Case_Attributes_MySQL_tab.py
+==========================
+Mainly used to enter Case attributes.
+Run Update_Case_Attributes_MySQL_tab.py as:
+python Update_Case_Attributes_MySQL_tab.py
+
+==========================
+readProbeSetMean_v7.py
+==========================
+Mainly used to enter mean expression data.
+Run readProbeSetMean_v7.py as:
+python readProbeSetMean_v7.py
+
+==========================
+readProbeSetSE_v7.py
+==========================
+Mainly used to enter Standard Error values from expression data.
+Run readProbeSetSE_v7.py as:
+python readProbeSetSE_v7.py
+
+==========================
+MYSQL command CALCULATE MEANS NEW Structure:
+==========================
+Mainly used to calculate mean from expression data values.
+update ProbeSetXRef set mean = (select AVG(value) from ProbeSetData where ProbeSetData.Id = ProbeSetXRef.DataId) where ProbeSetXRef.ProbeSetFreezeId = 811;
diff --git a/scripts/maintenance/Update_Case_Attributes_MySQL_tab.py b/scripts/maintenance/Update_Case_Attributes_MySQL_tab.py
new file mode 100644
index 00000000..0f8602c9
--- /dev/null
+++ b/scripts/maintenance/Update_Case_Attributes_MySQL_tab.py
@@ -0,0 +1,27 @@
+#!/usr/bin/python2
+########################################################################
+# Last Updated Apr 11, 2016 By Arthur and Zach
+########################################################################
+import string
+import sys
+import MySQLdb
+import getpass
+import time
+import csv
+########################################################################
+
+mydb = MySQLdb.connect(host='localhost',
+ user='username',
+ passwd='',
+ db='db_webqtl')
+cursor = mydb.cursor()
+
+csv_data = csv.reader(file('GN711_pvalues.txt'), delimiter ="\t")
+for row in csv_data:
+
+ cursor.execute("""UPDATE ProbeSetXRef SET pValue = %s WHERE ProbeSetFreezeId = %s AND ProbeSetId = %s """,
+ (row))
+#close the connection to the database.
+mydb.commit()
+cursor.close()
+print "Done" \ No newline at end of file
diff --git a/scripts/maintenance/delete_genotypes.py b/scripts/maintenance/delete_genotypes.py
new file mode 100755
index 00000000..fa693f0f
--- /dev/null
+++ b/scripts/maintenance/delete_genotypes.py
@@ -0,0 +1,33 @@
+import sys
+import csv
+
+import utilities
+import datastructure
+import genotypes
+
+def main(argv):
+ # config
+ config = utilities.get_config(argv[1])
+ print "config:"
+ for item in config.items('config'):
+ print "\t%s" % (str(item))
+ # var
+ print "variable:"
+ inbredsetid = config.get('config', 'inbredsetid')
+ print "\tinbredsetid: %s" % inbredsetid
+ # datafile
+ datafile = open(config.get('config', 'datafile'), 'r')
+ datafile = csv.reader(datafile, delimiter='\t', quotechar='"')
+ datafile.next()
+ delrowcount = 0
+ for row in datafile:
+ if len(row) == 0:
+ continue
+ genoname = row[0]
+ delrowcount += genotypes.delete(genoname, inbredsetid)
+ print "deleted %d genotypes" % (delrowcount)
+
+if __name__ == "__main__":
+ print "command line arguments:\n\t%s" % sys.argv
+ main(sys.argv)
+ print "exit successfully"
diff --git a/scripts/maintenance/delete_phenotypes.py b/scripts/maintenance/delete_phenotypes.py
new file mode 100755
index 00000000..326c466e
--- /dev/null
+++ b/scripts/maintenance/delete_phenotypes.py
@@ -0,0 +1,35 @@
+import sys
+import csv
+
+import utilities
+import datastructure
+import phenotypes
+
+def main(argv):
+ # config
+ config = utilities.get_config(argv[1])
+ print "config:"
+ for item in config.items('config'):
+ print "\t%s" % (str(item))
+ # var
+ print "variable:"
+ inbredsetid = config.get('config', 'inbredsetid')
+ print "\tinbredsetid: %s" % inbredsetid
+ # datafile
+ datafile = open(config.get('config', 'datafile'), 'r')
+ datafile = csv.reader(datafile, delimiter='\t', quotechar='"')
+ delrowcount = 0
+ for row in datafile:
+ if len(row) == 0:
+ continue
+ try:
+ publishxrefid = int(row[0])
+ except:
+ continue
+ delrowcount += phenotypes.delete(publishxrefid=publishxrefid, inbredsetid=inbredsetid)
+ print "deleted %d phenotypes" % (delrowcount)
+
+if __name__ == "__main__":
+ print "command line arguments:\n\t%s" % sys.argv
+ main(sys.argv)
+ print "exit successfully"
diff --git a/scripts/maintenance/load_genotypes.py b/scripts/maintenance/load_genotypes.py
new file mode 100755
index 00000000..338483f4
--- /dev/null
+++ b/scripts/maintenance/load_genotypes.py
@@ -0,0 +1,154 @@
+import sys
+import re
+
+import utilities
+import datastructure
+
+def main(argv):
+ config = utilities.get_config(argv[1])
+ print("config file:")
+ for item in config.items('config'):
+ print("\t%s" % str(item))
+ parse_genofile(config, fetch_parameters(config))
+
+def fetch_parameters(config):
+ config_dic = {}
+ config_dic['inbredsetid'] = config.get('config', 'inbredsetid')
+ config_dic["speciesid"] = datastructure.get_species(config_dic['inbredsetid'])[0]
+ config_dic['genofreezeid'] = datastructure.get_genofreeze_byinbredsetid(config_dic['inbredsetid'])[0]
+ config_dic['dataid'] = datastructure.get_nextdataid_genotype()
+ config_dic['genofile'] = config.get('config', 'genofile')
+ print("config dictionary:")
+ for k, v in config_dic.items():
+ print("\t%s: %s" % (k, v))
+ return config_dic
+
+def parse_genofile(config, config_dic):
+ genofile = open(config_dic['genofile'], 'r')
+ meta_dic = {}
+ for line in genofile:
+ line = line.strip()
+ if len(line) == 0:
+ continue
+ if line.startswith('#'):
+ continue
+ if line.startswith('@'):
+ line = line.strip('@')
+ items = line.split(';')
+ for item in items:
+ kv = re.split(':|=', item)
+ meta_dic[kv[0].strip()] = kv[1].strip()
+ continue
+ if line.lower().startswith("chr"):
+ #
+ print("geno file meta dictionary:")
+ for k, v in meta_dic.items():
+ print("\t%s: %s" % (k, v))
+ #
+ print("geno file head:\n\t%s" % line)
+ strainnames = line.split()[4:]
+ config_dic['strains'] = datastructure.get_strains_bynames(inbredsetid=config_dic['inbredsetid'], strainnames=strainnames, updatestrainxref="yes")
+ continue
+ # geno file line, marker
+ marker_dic = parse_marker(line)
+ marker_dic['genoid'] = check_or_insert_geno(config_dic, marker_dic)
+ if check_genoxref(config_dic, marker_dic):
+ continue
+ insert_genodata(config, config_dic, marker_dic)
+ insert_genoxref(config_dic, marker_dic)
+ config_dic['dataid'] += 1
+ genofile.close()
+
+def parse_marker(line):
+ marker_dic = {}
+ cells = line.split()
+ marker_dic['chromosome'] = cells[0]
+ marker_dic['locus'] = cells[1]
+ marker_dic['cm'] = cells[2]
+ marker_dic['mb'] = cells[3]
+ marker_dic['values'] = cells[4:]
+ return marker_dic
+
+def check_or_insert_geno(config_dic, marker_dic):
+ cursor, con = utilities.get_cursor()
+ sql = """
+ SELECT Geno.`Id`
+ FROM Geno
+ WHERE Geno.`SpeciesId`=%s
+ AND Geno.`Name` like %s
+ """
+ cursor.execute(sql, (config_dic["speciesid"], marker_dic['locus']))
+ result = cursor.fetchone()
+ if result:
+ genoid = result[0]
+ print("get geno record: %d" % genoid)
+ else:
+ sql = """
+ INSERT INTO Geno
+ SET
+ Geno.`SpeciesId`=%s,
+ Geno.`Name`=%s,
+ Geno.`Marker_Name`=%s,
+ Geno.`Chr`=%s,
+ Geno.`Mb`=%s
+ """
+ cursor.execute(sql, (config_dic['speciesid'], marker_dic['locus'], marker_dic['locus'], marker_dic['chromosome'], marker_dic['mb']))
+ rowcount = cursor.rowcount
+ genoid = con.insert_id()
+ print("INSERT INTO Geno: %d record: %d" % (rowcount, genoid))
+ return genoid
+
+def check_genoxref(config_dic, marker_dic):
+ cursor, con = utilities.get_cursor()
+ sql = """
+ select GenoXRef.*
+ from GenoXRef
+ where GenoXRef.`GenoFreezeId`=%s
+ AND GenoXRef.`GenoId`=%s
+ """
+ cursor.execute(sql, (config_dic['genofreezeid'], marker_dic['genoid']))
+ rowcount = cursor.rowcount
+ return rowcount
+
+def insert_genodata(config, config_dic, marker_dic):
+ cursor, con = utilities.get_cursor()
+ for index, strain in enumerate(config_dic['strains']):
+ strainid = strain[0]
+ value = utilities.to_db_string(marker_dic['values'][index], None)
+ if not value:
+ continue
+ value = config.get('config', "genovalue_" + value)
+ try:
+ number = int(value)
+ except:
+ continue
+ if not number in [-1, 0, 1]:
+ continue
+ sql = """
+ INSERT INTO GenoData
+ SET
+ GenoData.`Id`=%s,
+ GenoData.`StrainId`=%s,
+ GenoData.`value`=%s
+ """
+ cursor.execute(sql, (config_dic['dataid'], strainid, number))
+
+def insert_genoxref(config_dic, marker_dic):
+ cursor, con = utilities.get_cursor()
+ sql = """
+ INSERT INTO GenoXRef
+ SET
+ GenoXRef.`GenoFreezeId`=%s,
+ GenoXRef.`GenoId`=%s,
+ GenoXRef.`DataId`=%s,
+ GenoXRef.`cM`=%s,
+ GenoXRef.`Used_for_mapping`=%s
+ """
+ cursor.execute(sql, (config_dic['genofreezeid'], marker_dic['genoid'], config_dic['dataid'], marker_dic['cm'], 'N'))
+ rowcount = cursor.rowcount
+ print("INSERT INTO GenoXRef: %d record" % (rowcount))
+
+if __name__ == "__main__":
+ print("command line arguments:\n\t%s" % sys.argv)
+ main(sys.argv)
+ print("exit successfully")
diff --git a/scripts/maintenance/load_phenotypes.py b/scripts/maintenance/load_phenotypes.py
new file mode 100755
index 00000000..c3c6570b
--- /dev/null
+++ b/scripts/maintenance/load_phenotypes.py
@@ -0,0 +1,171 @@
+import sys
+import csv
+
+import utilities
+import datastructure
+
+def main(argv):
+ # config
+ config = utilities.get_config(argv[1])
+ print "config:"
+ for item in config.items('config'):
+ print "\t%s" % (str(item))
+ # var
+ inbredsetid = config.get('config', 'inbredsetid')
+ print "inbredsetid: %s" % inbredsetid
+ species = datastructure.get_species(inbredsetid)
+ speciesid = species[0]
+ print "speciesid: %s" % speciesid
+ dataid = datastructure.get_nextdataid_phenotype()
+ print "next data id: %s" % dataid
+ cursor, con = utilities.get_cursor()
+ # datafile
+ datafile = open(config.get('config', 'datafile'), 'r')
+ phenotypedata = csv.reader(datafile, delimiter='\t', quotechar='"')
+ phenotypedata_head = phenotypedata.next()
+ print "phenotypedata head:\n\t%s" % phenotypedata_head
+ strainnames = phenotypedata_head[1:]
+ strains = datastructure.get_strains_bynames(inbredsetid=inbredsetid, strainnames=strainnames, updatestrainxref="yes")
+ # metafile
+ metafile = open(config.get('config', 'metafile'), 'r')
+ phenotypemeta = csv.reader(metafile, delimiter='\t', quotechar='"')
+ phenotypemeta_head = phenotypemeta.next()
+ print "phenotypemeta head:\n\t%s" % phenotypemeta_head
+ print
+ # load
+ for metarow in phenotypemeta:
+ #
+ datarow_value = phenotypedata.next()
+ datarow_se = phenotypedata.next()
+ datarow_n = phenotypedata.next()
+ # Phenotype
+ sql = """
+ INSERT INTO Phenotype
+ SET
+ Phenotype.`Pre_publication_description`=%s,
+ Phenotype.`Post_publication_description`=%s,
+ Phenotype.`Original_description`=%s,
+ Phenotype.`Pre_publication_abbreviation`=%s,
+ Phenotype.`Post_publication_abbreviation`=%s,
+ Phenotype.`Lab_code`=%s,
+ Phenotype.`Submitter`=%s,
+ Phenotype.`Owner`=%s,
+ Phenotype.`Authorized_Users`=%s,
+ Phenotype.`Units`=%s
+ """
+ cursor.execute(sql, (
+ utilities.to_db_string(metarow[1], None),
+ utilities.to_db_string(metarow[2], None),
+ utilities.to_db_string(metarow[3], None),
+ utilities.to_db_string(metarow[4], None),
+ utilities.to_db_string(metarow[5], None),
+ utilities.to_db_string(metarow[6], None),
+ utilities.to_db_string(metarow[7], None),
+ utilities.to_db_string(metarow[8], None),
+ utilities.to_db_string(metarow[9], ""),
+ utilities.to_db_string(metarow[18], ""),
+ ))
+ rowcount = cursor.rowcount
+ phenotypeid = con.insert_id()
+ print "INSERT INTO Phenotype: %d record: %d" % (rowcount, phenotypeid)
+ # Publication
+ publicationid = None # reset
+ pubmed_id = utilities.to_db_string(metarow[0], None)
+ if pubmed_id:
+ sql = """
+ SELECT Publication.`Id`
+ FROM Publication
+ WHERE Publication.`PubMed_ID`=%s
+ """
+ cursor.execute(sql, (pubmed_id))
+ re = cursor.fetchone()
+ if re:
+ publicationid = re[0]
+ print "get Publication record: %d" % publicationid
+ if not publicationid:
+ sql = """
+ INSERT INTO Publication
+ SET
+ Publication.`PubMed_ID`=%s,
+ Publication.`Abstract`=%s,
+ Publication.`Authors`=%s,
+ Publication.`Title`=%s,
+ Publication.`Journal`=%s,
+ Publication.`Volume`=%s,
+ Publication.`Pages`=%s,
+ Publication.`Month`=%s,
+ Publication.`Year`=%s
+ """
+ cursor.execute(sql, (
+ utilities.to_db_string(metarow[0], None),
+ utilities.to_db_string(metarow[12], None),
+ utilities.to_db_string(metarow[10], ""),
+ utilities.to_db_string(metarow[11], None),
+ utilities.to_db_string(metarow[13], None),
+ utilities.to_db_string(metarow[14], None),
+ utilities.to_db_string(metarow[15], None),
+ utilities.to_db_string(metarow[16], None),
+ utilities.to_db_string(metarow[17], ""),
+ ))
+ rowcount = cursor.rowcount
+ publicationid = con.insert_id()
+ print "INSERT INTO Publication: %d record: %d" % (rowcount, publicationid)
+ # data
+ for index, strain in enumerate(strains):
+ #
+ strainid = strain[0]
+ value = utilities.to_db_float(datarow_value[index+1], None)
+ se = utilities.to_db_float(datarow_se[index+1], None)
+ n = utilities.to_db_int(datarow_n[index+1], None)
+ #
+ if value is not None:
+ sql = """
+ INSERT INTO PublishData
+ SET
+ PublishData.`Id`=%s,
+ PublishData.`StrainId`=%s,
+ PublishData.`value`=%s
+ """
+ cursor.execute(sql, (dataid, strainid, value))
+ if se is not None:
+ sql = """
+ INSERT INTO PublishSE
+ SET
+ PublishSE.`DataId`=%s,
+ PublishSE.`StrainId`=%s,
+ PublishSE.`error`=%s
+ """
+ cursor.execute(sql, (dataid, strainid, se))
+ if n is not None:
+ sql = """
+ INSERT INTO NStrain
+ SET
+ NStrain.`DataId`=%s,
+ NStrain.`StrainId`=%s,
+ NStrain.`count`=%s
+ """
+ cursor.execute(sql, (dataid, strainid, n))
+ # PublishXRef
+ sql = """
+ INSERT INTO PublishXRef
+ SET
+ PublishXRef.`InbredSetId`=%s,
+ PublishXRef.`PhenotypeId`=%s,
+ PublishXRef.`PublicationId`=%s,
+ PublishXRef.`DataId`=%s,
+ PublishXRef.`comments`=%s
+ """
+ cursor.execute(sql, (inbredsetid, phenotypeid, publicationid, dataid, ""))
+ rowcount = cursor.rowcount
+ publishxrefid = con.insert_id()
+ print "INSERT INTO PublishXRef: %d record: %d" % (rowcount, publishxrefid)
+ # for loop next
+ dataid += 1
+ print
+ # release
+ con.close()
+
+if __name__ == "__main__":
+ print "command line arguments:\n\t%s" % sys.argv
+ main(sys.argv)
+ print "exit successfully"
diff --git a/scripts/maintenance/readProbeSetMean_v7.py b/scripts/maintenance/readProbeSetMean_v7.py
new file mode 100755
index 00000000..e9c8f25c
--- /dev/null
+++ b/scripts/maintenance/readProbeSetMean_v7.py
@@ -0,0 +1,274 @@
+#!/usr/bin/python2
+"""This script use the nearest marker to the transcript as control, increasing permutation rounds according to the p-value"""
+
+########################################################################
+# Last Updated Sep 27, 2011 by Xiaodong
+########################################################################
+import string
+import sys
+import MySQLdb
+import getpass
+import time
+#import pdb
+
+#pdb.set_trace()
+
+########################################################################
+
+def translateAlias(str):
+ if str == "B6":
+ return "C57BL/6J"
+ elif str == "D2":
+ return "DBA/2J"
+ else:
+ return str
+
+########################################################################
+#
+# Indicate Data Start Position, ProbeFreezeId, GeneChipId, DataFile
+#
+########################################################################
+
+dataStart = 1
+
+GeneChipId = int( raw_input("Enter GeneChipId:") )
+ProbeSetFreezeId = int( raw_input("Enter ProbeSetFreezeId:") )
+input_file_name = raw_input("Enter file name with suffix:")
+
+fp = open("%s" % input_file_name, 'rb')
+
+try:
+ passwd = getpass.getpass('Please enter mysql password here : ')
+ con = MySQLdb.Connect(db='db_webqtl',host='localhost', user='username',passwd=passwd)
+
+ db = con.cursor()
+ print "You have successfully connected to mysql.\n"
+except:
+ print "You entered incorrect password.\n"
+ sys.exit(0)
+
+time0 = time.time()
+
+#########################################################################
+#
+# Check if each line have same number of members
+# generate the gene list of expression data here
+#
+#########################################################################
+print 'Checking if each line have same number of members'
+
+GeneList = []
+isCont = 1
+header = fp.readline()
+header = string.split(string.strip(header),'\t')
+header = map(string.strip, header)
+nfield = len(header)
+line = fp.readline()
+
+kj=0
+while line:
+ line2 = string.split(string.strip(line),'\t')
+ line2 = map(string.strip, line2)
+ if len(line2) != nfield:
+ print "Error : " + line
+ isCont = 0
+
+ GeneList.append(line2[0])
+ line = fp.readline()
+
+ kj+=1
+ if kj%100000 == 0:
+ print 'checked ',kj,' lines'
+
+GeneList = map(string.lower, GeneList)
+GeneList.sort()
+
+if isCont==0:
+ sys.exit(0)
+
+
+print 'used ',time.time()-time0,' seconds'
+#########################################################################
+#
+# Check if each strain exist in database
+# generate the string id list of expression data here
+#
+#########################################################################
+print 'Checking if each strain exist in database'
+
+isCont = 1
+fp.seek(0)
+header = fp.readline()
+header = string.split(string.strip(header),'\t')
+header = map(string.strip, header)
+header = map(translateAlias, header)
+header = header[dataStart:]
+Ids = []
+for item in header:
+ try:
+ db.execute('select Id from Strain where Name = "%s"' % item)
+ Ids.append(db.fetchall()[0][0])
+ except:
+ print item,'does not exist, check the if the strain name is correct'
+ isCont=0
+
+if isCont==0:
+ sys.exit(0)
+
+
+print 'used ',time.time()-time0,' seconds'
+########################################################################
+#
+# Check if each ProbeSet exist in database
+#
+########################################################################
+print 'Check if each ProbeSet exist in database'
+
+##---- find PID is name or target ----##
+line = fp.readline()
+line = fp.readline()
+line2 = string.split(string.strip(line),'\t')
+line2 = map(string.strip, line2)
+PId = line2[0]
+
+db.execute('select Id from ProbeSet where Name="%s" and ChipId=%d' % (PId, GeneChipId) )
+results = db.fetchall()
+IdStr = 'TargetId'
+if len(results)>0:
+ IdStr = 'Name'
+
+
+##---- get Name/TargetId list from database ----##
+db.execute('select distinct(%s) from ProbeSet where ChipId=%d order by %s' % (IdStr, GeneChipId, IdStr))
+results = db.fetchall()
+
+Names = []
+for item in results:
+ Names.append(item[0])
+
+print Names
+
+Names = map(string.lower, Names)
+
+Names.sort() # -- Fixed the lower case problem of ProbeSets affx-mur_b2_at doesn't exist --#
+
+
+##---- compare genelist with names ----##
+x=y=0
+x1=-1
+GeneList2=[]
+while x<len(GeneList) and y<len(Names):
+ if GeneList[x]==Names[y]:
+ x += 1
+ y += 1
+ elif GeneList[x]<Names[y]:
+ if x!=x1:
+ GeneList2.append(GeneList[x])
+ x1 = x
+ x += 1
+ elif GeneList[x]>Names[y]:
+ y += 1
+
+ if x%100000==0:
+ print 'check Name, checked %d lines'%x
+
+while x<len(GeneList):
+ GeneList2.append(GeneList[x])
+ x += 1
+
+isCont=1
+ferror = open("ProbeSetError.txt", "wb")
+for item in GeneList2:
+ ferror.write(item + " doesn't exist \n")
+ print item, " doesn't exist, check if the ProbeSet name is correct"
+ isCont = 0
+
+if isCont==0:
+ sys.exit(0)
+
+
+print 'used ',time.time()-time0,' seconds'
+#########################################################################
+#
+# Insert data into database
+#
+#########################################################################
+print 'getting ProbeSet/Id'
+
+
+#---- get Name/Id map ----#
+db.execute('select %s, Id from ProbeSet where ChipId=%d order by %s' % (IdStr, GeneChipId, IdStr))
+results = db.fetchall()
+NameIds = {}
+for item in results:
+ NameIds[item[0]] = item[1]
+print 'used ',time.time()-time0,' seconds'
+
+
+print 'inserting data'
+
+##---- get old max dataId ----##
+db.execute('select max(Id) from ProbeSetData')
+maxDataId = int(db.fetchall()[0][0])
+bmax = maxDataId
+print "old_max = %d\n" % bmax
+
+##---- insert data ----##
+fp.seek(0)
+line = fp.readline()
+line = fp.readline()
+kj = 0
+
+values1 = []
+values2 = []
+while line:
+ line2 = string.split(string.strip(line),'\t')
+ line2 = map(string.strip, line2)
+ PId = line2[0]
+ recordId = NameIds[PId]
+
+ maxDataId += 1
+ datasorig = line2[dataStart:]
+
+ ###### Data Table items ######
+ i=0
+ for item in datasorig:
+ try:
+ values1.append('(%d,%d,%s)' % (maxDataId, Ids[i], float(item)))
+ except:
+ pass
+ i += 1
+
+ values2.append("(%d,%d,%d)" % (ProbeSetFreezeId, recordId, maxDataId))
+
+
+ ##---- insert into table ----##
+ kj += 1
+ if kj % 100 == 0:
+ cmd = ','.join(values1)
+ cmd = 'insert into ProbeSetData values %s' % cmd
+ db.execute(cmd)
+
+ cmd = ','.join(values2)
+ cmd = 'insert into ProbeSetXRef(ProbeSetFreezeId, ProbeSetId, DataId) values %s' % cmd
+ db.execute(cmd)
+
+ values1=[]
+ values2=[]
+ print 'Inserted ', kj,' lines'
+ print 'used ',time.time()-time0,' seconds'
+
+ line = fp.readline()
+
+
+
+if len(values1)>0:
+ cmd = ','.join(values1)
+ cmd = 'insert into ProbeSetData values %s' % cmd
+ db.execute(cmd)
+
+ cmd = ','.join(values2)
+ cmd = 'insert into ProbeSetXRef(ProbeSetFreezeId, ProbeSetId, DataId) values %s' % cmd
+ db.execute(cmd)
+
+con.close()
diff --git a/scripts/maintenance/readProbeSetSE_v7.py b/scripts/maintenance/readProbeSetSE_v7.py
new file mode 100755
index 00000000..fd6f0bb8
--- /dev/null
+++ b/scripts/maintenance/readProbeSetSE_v7.py
@@ -0,0 +1,254 @@
+#!/usr/bin/python2
+"""This script use the nearest marker to the transcript as control, increasing permutation rounds according to the p-value"""
+########################################################################
+# Last Updated Sep 27, 2011 by Xiaodong
+# This version fix the bug that incorrectly exclude the first 2 probesetIDs
+########################################################################
+
+import string
+import sys
+import MySQLdb
+import getpass
+import time
+
+
+def translateAlias(str):
+ if str == "B6":
+ return "C57BL/6J"
+ elif str == "D2":
+ return "DBA/2J"
+ else:
+ return str
+
+########################################################################
+#
+# Indicate Data Start Position, ProbeFreezeId, GeneChipId, DataFile
+#
+########################################################################
+
+dataStart = 1
+
+GeneChipId = int( raw_input("Enter GeneChipId:") )
+ProbeSetFreezeId = int( raw_input("Enter ProbeSetFreezeId:") )
+input_file_name = raw_input("Enter file name with suffix:")
+
+fp = open("%s" % input_file_name, 'rb')
+
+
+try:
+ passwd = getpass.getpass('Please enter mysql password here : ')
+ con = MySQLdb.Connect(db='db_webqtl',host='localhost', user='username',passwd=passwd)
+
+ db = con.cursor()
+ print "You have successfully connected to mysql.\n"
+except:
+ print "You entered incorrect password.\n"
+ sys.exit(0)
+
+time0 = time.time()
+########################################################################
+#
+# Indicate Data Start Position, ProbeFreezeId, GeneChipId, DataFile
+#
+########################################################################
+
+#GeneChipId = 4
+#dataStart = 1
+#ProbeSetFreezeId = 359 #JAX Liver 6C Affy M430 2.0 (Jul11) MDP
+#fp = open("GSE10493_AllSamples_6C_Z_AvgSE.txt", 'rb')
+
+
+#########################################################################
+#
+# Check if each line have same number of members
+# generate the gene list of expression data here
+#
+#########################################################################
+print 'Checking if each line have same number of members'
+
+GeneList = []
+isCont = 1
+header = fp.readline()
+header = string.split(string.strip(header),'\t')
+header = map(string.strip, header)
+nfield = len(header)
+line = fp.readline()
+
+kj=0
+while line:
+ line2 = string.split(string.strip(line),'\t')
+ line2 = map(string.strip, line2)
+ if len(line2) != nfield:
+ print "Error : " + line
+ isCont = 0
+
+ GeneList.append(line2[0])
+ line = fp.readline()
+
+ kj+=1
+ if kj%100000 == 0:
+ print 'checked ',kj,' lines'
+
+GeneList = map(string.lower, GeneList)
+GeneList.sort()
+
+if isCont==0:
+ sys.exit(0)
+
+
+print 'used ',time.time()-time0,' seconds'
+#########################################################################
+#
+# Check if each strain exist in database
+# generate the string id list of expression data here
+#
+#########################################################################
+print 'Checking if each strain exist in database'
+
+isCont = 1
+fp.seek(0)
+header = fp.readline()
+header = string.split(string.strip(header),'\t')
+header = map(string.strip, header)
+header = map(translateAlias, header)
+header = header[dataStart:]
+Ids = []
+for item in header:
+ try:
+ db.execute('select Id from Strain where Name = "%s"' % item)
+ Ids.append(db.fetchall()[0][0])
+ except:
+ print item,'does not exist, check the if the strain name is correct'
+ isCont=0
+
+if isCont==0:
+ sys.exit(0)
+
+
+print 'used ',time.time()-time0,' seconds'
+########################################################################
+#
+# Check if each ProbeSet exist in database
+#
+########################################################################
+print 'Check if each ProbeSet exist in database'
+
+##---- find PID is name or target ----##
+line = fp.readline()
+line = fp.readline()
+line2 = string.split(string.strip(line),'\t')
+line2 = map(string.strip, line2)
+PId = line2[0]
+
+db.execute('select Id from ProbeSet where Name="%s" and ChipId=%d' % (PId, GeneChipId))
+results = db.fetchall()
+IdStr = 'TargetId'
+if len(results)>0:
+ IdStr = 'Name'
+
+
+##---- get Name/TargetId list from database ----##
+db.execute('select distinct(%s) from ProbeSet where ChipId=%d order by %s' % (IdStr, GeneChipId, IdStr))
+results = db.fetchall()
+
+Names = []
+for item in results:
+ Names.append(item[0])
+Names = map(string.lower, Names)
+Names.sort() # -- Fixed the lower case problem of ProbeSets affx-mur_b2_at doesn't exist --#
+
+##---- compare genelist with names ----##
+x=y=0
+x1=-1
+GeneList2=[]
+while x<len(GeneList) and y<len(Names):
+ if GeneList[x]==Names[y]:
+ x += 1
+ y += 1
+ elif GeneList[x]<Names[y]:
+ if x!=x1:
+ GeneList2.append(GeneList[x])
+ x1 = x
+ x += 1
+ elif GeneList[x]>Names[y]:
+ y += 1
+
+ if x%100000==0:
+ print 'check Name, checked %d lines'%x
+
+while x<len(GeneList):
+ GeneList2.append(GeneList[x])
+ x += 1
+
+isCont=1
+ferror = open("ProbeSetError.txt", "wb")
+for item in GeneList2:
+ ferror.write(item + " doesn't exist \n")
+ print item, " doesn't exist"
+ isCont = 0
+
+if isCont==0:
+ sys.exit(0)
+
+
+print 'used ',time.time()-time0,' seconds'
+#############################
+#Insert new Data into SE
+############################
+db.execute("""
+ select ProbeSet.%s, ProbeSetXRef.DataId from ProbeSet, ProbeSetXRef
+ where ProbeSet.Id=ProbeSetXRef.ProbeSetId and ProbeSetXRef.ProbeSetFreezeId=%d"""
+ % (IdStr, ProbeSetFreezeId))
+results = db.fetchall()
+
+ProbeNameId = {}
+for Name, Id in results:
+ ProbeNameId[Name] = Id
+
+ferror = open("ProbeError.txt", "wb")
+
+DataValues = []
+
+fp.seek(0) #XZ add this line
+line = fp.readline() #XZ add this line
+line = fp.readline()
+
+kj = 0
+while line:
+ line2 = string.split(string.strip(line),'\t')
+ line2 = map(string.strip, line2)
+
+ CellId = line2[0]
+ if not ProbeNameId.has_key(CellId):
+ ferror.write(CellId + " doesn't exist\n")
+ print CellId, " doesn't exist"
+ else:
+ DataId = ProbeNameId[CellId]
+ datasorig = line2[dataStart:]
+
+ i = 0
+ for item in datasorig:
+ if item != '':
+ value = '('+str(DataId)+','+str(Ids[i])+','+str(item)+')'
+ DataValues.append(value)
+ i += 1
+
+ kj += 1
+ if kj % 100 == 0:
+ Dataitems = ','.join(DataValues)
+ cmd = 'insert ProbeSetSE values %s' % Dataitems
+ db.execute(cmd)
+
+ DataValues = []
+ print 'inserted ',kj,' lines'
+ print 'used ',time.time()-time0,' seconds'
+ line = fp.readline()
+
+if len(DataValues)>0:
+ DataValues = ','.join(DataValues)
+ cmd = 'insert ProbeSetSE values %s' % DataValues
+ db.execute(cmd)
+
+con.close()
+
+
diff --git a/test/lib/gntest.rb b/test/lib/gntest.rb
deleted file mode 100644
index 5b21b3d5..00000000
--- a/test/lib/gntest.rb
+++ /dev/null
@@ -1,6 +0,0 @@
-require 'minitest/autorun'
-require 'mechanize'
-require 'json'
-
-# ---- Use some default parameters if not set
-$host = "http://localhost:5003" if !$host
diff --git a/test/lib/link_checker.rb b/test/lib/link_checker.rb
deleted file mode 100644
index 36cb36c8..00000000
--- a/test/lib/link_checker.rb
+++ /dev/null
@@ -1,50 +0,0 @@
-
-SKIP = "mailto:"
-
-class LinkChecker
-end
-
-describe LinkChecker do
- before do
- @agent = Mechanize.new
- @agent.agent.http.ca_file = '/etc/ssl/certs/ca-certificates.crt'
- end
-
- it "Get to front page" do
- page = @agent.get($host)
- page.links.each do |link|
- puts link.href
- if link.href !~ /#{SKIP}/ # /static\/dbdoc\/Hippocampus/ and link.href !~ /mailto:|glossary.html|sample_r|grits.eecs.utk.edu|correlationAnnotation.html/
- # Fetch link, program will crash with exception if link is broken
- linkpage = @agent.get(link.href)
- puts "Link to #{link.href} is valid, response code #{linkpage.code}"
- end
- end
-
- end
-
- describe LinkChecker do
- it "Get to trait page" do
- page = @agent.get($host+'/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P')
- # p page
-
- # Get to trait page for 1435395_s_at
- # form2 = show_trait_page.forms_with("trait_page")[0]
- # form2.fields[30].name.must_equal "variance:C57BL/6J"
- # form2.fields[30].value.must_equal "15.287"
-
- # Test every link on the page to check if it's broken or not
- page.links.each do |link|
- puts link.href
- if link.href !~ /#{SKIP}/ # /static\/dbdoc\/Hippocampus/ and link.href !~ /mailto:|glossary.html|sample_r|grits.eecs.utk.edu|correlationAnnotation.html/
- # Fetch link, program will crash with exception if link is broken
- linkpage = @agent.get(link.href)
- puts "Link to #{link.href} is valid, response code #{linkpage.code}"
- end
- end
-
- end
-
- end
-
-end
diff --git a/test/lib/main_web_functionality.rb b/test/lib/main_web_functionality.rb
deleted file mode 100644
index ec61de2d..00000000
--- a/test/lib/main_web_functionality.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-# In these tests we navigate from the main page to search
-
-class MainWebFunctionality
-end
-
-describe MainWebFunctionality do
- before do
- @agent = Mechanize.new
- @agent.agent.http.ca_file = '/etc/ssl/certs/ca-certificates.crt'
- end
-
- describe MainWebFunctionality do
-
- it "Get to trait page" do
- page = @agent.get($host)
- form = page.forms[1]
- form.buttons[0].value.must_equal "Search" # main menu is loaded
-
- # http://localhost:5003/search?species=mouse&group=BXD&type=Hippocampus+mRNA&dataset=HC_M2_0606_P&search_terms_or=&search_terms_and=MEAN%3D%2815+16%29+LRS%3D%2823+46%29&FormID=searchResult
- form.fields[2].value = "MEAN=(15 16) LRS=(23 46)"
- form.fields[3].value = "mouse"
- form.fields[4].value = "BXD"
- form.fields[5].value = "Hippocampus mRNA"
- form.fields[6].value = "HC_M2_0606_P"
- search_page = @agent.submit(form, form.buttons.first)
- probe_link = search_page.links.find { |l| l.text =~ /1435395_s_at/ }
- probe_link.uri.to_s.must_equal "/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P"
- show_trait_page = probe_link.click
- # p show_trait_page
-
- # Get to trait page for 1435395_s_at
-
- form2 = show_trait_page.forms_with("trait_page")[0]
- # [name: corr_dataset value: HC_M2_0606_P]
- form2.fields.select { |fld| fld.name == 'corr_dataset' }.first.value.must_equal 'HC_M2_0606_P'
- if $options[:database] == :small
- form2.fields[30].name.must_equal "value:DBA/2J"
- else
- form2.fields[30].name.must_equal "variance:C57BL/6J"
- end
- # form2.fields[30].value.must_equal "15.287"
-
- # Test every link on the page to check if it's broken or not
- break if not $options[:link_checker]
- show_trait_page.links.each do |link|
- puts link.href
- if link.href !~ /static\/dbdoc\/Hippocampus/ and link.href !~ /glossary.html|sample_r|grits.eecs.utk.edu|correlationAnnotation.html/
- # Fetch link, program will crash with exception if link is broken
- linkpage = @agent.get(link.href)
- puts "Link to #{link.href} is valid, response code #{linkpage.code}"
- end
- end
-
- end
-
- end
-
-end
diff --git a/test/lib/mapping.rb b/test/lib/mapping.rb
deleted file mode 100644
index 20e5bd40..00000000
--- a/test/lib/mapping.rb
+++ /dev/null
@@ -1,58 +0,0 @@
-# In these tests we navigate from the main page to a specific trait then hit the different mapping tool buttons (In this case pylMM and r/qtl) followed by computing the results (marker regressions).
-
-require 'gntest'
-
-class MappingTest
-end
-
-describe MappingTest do
- before do
- @agent = Mechanize.new
- @agent.agent.http.ca_file = '/etc/ssl/certs/ca-certificates.crt'
- end
-
- describe MappingTest do
- it "pylmm mapping tool selection" do
- url = $host+'/marker_regression'
-
- json = JSON::load(File.read('test/data/input/mapping/1435395_s_at_HC_M2_0606_P.json'))
- json["method"] = "pylmm"
- # p json
- page = @agent.post(URI.encode(url), json)
- # Unpacking the page is slow - somehow - but the run is enough as a test
- # form = page.forms_with("marker_regression")[0]
- # form.fields.select { |fld| fld.name == 'dataset' }.first.value.must_equal 'HC_M2_0606_P'
- # form.fields.select { |fld| fld.name == 'value:BXD1' }.first.value.must_equal '6.749'
- end
- end
-
- describe MappingTest do
- it "R/qtl mapping tool selection" do
- url = $host+'/marker_regression' # ?trait_id=1435395_s_at&dataset=HC_M2_0606_P'
-
- json = JSON::load(File.read('test/data/input/mapping/1435395_s_at_HC_M2_0606_P.json'))
- # p json
- page = @agent.post(URI.encode(url),
- json,
- ({'Content-Type' => 'application/x-www-form-urlencoded'}))
- form = page.forms_with("marker_regression")[0]
- p form
- form.fields.select { |fld| fld.name == 'dataset' }.first.value.must_equal 'HC_M2_0606_P'
- form.fields.select { |fld| fld.name == 'value:BXD1' }.first.value.must_equal "15.034"
- end
- end
-
- describe MappingTest do
- it "CIM mapping tool selection (using reaper)" do
- url = $host+'/marker_regression'
-
- json = JSON::load(File.read('test/data/input/mapping/1435395_s_at_HC_M2_0606_P.json'))
- json["method"] = "reaper"
- page = @agent.post(URI.encode(url), json)
- form = page.forms_with("marker_regression")[0]
- form.fields.select { |fld| fld.name == 'dataset' }.first.value.must_equal 'HC_M2_0606_P'
- form.fields.select { |fld| fld.name == 'value:BXD1' }.first.value.must_equal "15.034"
- end
- end
-
-end
diff --git a/test/lib/navigation.rb b/test/lib/navigation.rb
deleted file mode 100644
index ee9f41d2..00000000
--- a/test/lib/navigation.rb
+++ /dev/null
@@ -1,43 +0,0 @@
-# In these tests we navigate from the main page to a specific trait then hit the different mapping tool buttons (In this case pylMM and r/qtl) followed by computing the results (marker regressions).
-
-
-class MappingTest
-end
-
-describe MappingTest do
- before do
- @agent = Mechanize.new
- @agent.agent.http.ca_file = '/etc/ssl/certs/ca-certificates.crt'
- end
-
- describe MappingTest do
- it "pyLMM mapping tool selection" do
- break if $options[:skip_broken]
- page = @agent.get($host+'/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P')
-#Navigates to http://localhost:5003/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P and clicks respective buttons.
- link = page.link_with(text: 'pyLMM')
- page = link.click
- puts page.uri
- link = page.link_with(text: 'Compute')
- page = link.click
- puts page.uri
- probe_link.uri.to_s.must_equal "/marker_regression"
- end
- end
-
-end
-
-describe MappingTest do
- it "R/qtl mapping tool selection" do
- break if $options[:skip_broken]
- page = @agent.get($host+'/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P')
- link = page.link_with(text: 'R/qtl')
- page = link.click
- puts page.uri
- form.field_with(:name => 'Methods').options[2].select
- link = page.link_with(text: 'Compute')
- page = link.click
- puts page.uri
- probe_link.uri.to_s.must_equal "/marker_regression"
- end
-end
diff --git a/test/requests/link_checker.py b/test/requests/link_checker.py
new file mode 100644
index 00000000..715f330c
--- /dev/null
+++ b/test/requests/link_checker.py
@@ -0,0 +1,81 @@
+from __future__ import print_function
+import re
+import requests
+from lxml.html import parse
+from requests.exceptions import ConnectionError
+
+DO_FAIL=False # fail on error
+
+def is_root_link(link):
+ pattern = re.compile("^/$")
+ return pattern.match(link)
+
+def is_mailto_link(link):
+ pattern = re.compile("^mailto:.*")
+ return pattern.match(link)
+
+def is_internal_link(link):
+ pattern = re.compile("^/.*")
+ return pattern.match(link)
+
+def is_in_page_link(link):
+ pattern = re.compile("^#.*")
+ return pattern.match(link)
+
+def get_links(doc):
+ return filter(
+ lambda x: not (
+ is_root_link(x)
+ or is_mailto_link(x))
+ , map(lambda y: y.get("href")
+ , doc.cssselect("a")))
+
+def verify_link(link):
+ if link[0] == "#":
+ # local link on page
+ return
+ print("verifying "+link)
+ try:
+ result = requests.get(link, timeout=20, verify=False)
+ if result.status_code == 200:
+ print(link+" ==> OK")
+ elif result.status_code == 307:
+ print(link+" ==> REDIRECT")
+ else:
+ print("ERROR: link `"+link+"` failed with status "
+ , result.status_code)
+
+ if DO_FAIL:
+ raise Exception("Failed verify")
+ except ConnectionError as ex:
+ print("ERROR: ", link, ex)
+ if DO_FAIL:
+ raise ex
+
+def check_page(host, start_url):
+ print("")
+ print("Checking links host "+host+" in page `"+start_url+"`")
+ doc = parse(start_url).getroot()
+ links = get_links(doc)
+ in_page_links = filter(is_in_page_link, links)
+ internal_links = filter(is_internal_link, links)
+ external_links = filter(lambda x: not (is_internal_link(x) or is_in_page_link(x)), links)
+
+ for link in internal_links:
+ verify_link(host+link)
+
+ for link in external_links:
+ verify_link(link)
+
+def check_links(args_obj, parser):
+ print("")
+ print("Checking links")
+ host = args_obj.host
+
+ # Check the home page
+ check_page(host, host)
+
+ # Check traits page
+ check_page(
+ host,
+ host+"/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P")
diff --git a/test/requests/main_web_functionality.py b/test/requests/main_web_functionality.py
new file mode 100644
index 00000000..7b89b833
--- /dev/null
+++ b/test/requests/main_web_functionality.py
@@ -0,0 +1,40 @@
+from __future__ import print_function
+import re
+import requests
+from lxml.html import parse
+from link_checker import check_page
+from requests.exceptions import ConnectionError
+
+def check_home(url):
+ doc = parse(url).getroot()
+ search_button = doc.cssselect("#btsearch")
+ assert(search_button[0].value == "Search")
+ print("OK")
+
+def check_search_page(host):
+ data = dict(
+ species="mouse"
+ , group="BXD"
+ , type="Hippocampus mRNA"
+ , dataset="HC_M2_0606_P"
+ , search_terms_or=""
+ , search_terms_and="MEAN=(15 16) LRS=(23 46)")
+ result = requests.get(host+"/search", params=data)
+ found = result.text.find("/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P")
+ assert(found >= 0)
+ print("OK")
+ check_traits_page(host, "/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P")
+
+def check_traits_page(host, traits_url):
+ doc = parse(host+traits_url).getroot()
+ traits_form = doc.forms[1]
+ assert(traits_form.fields["corr_dataset"] == "HC_M2_0606_P")
+ print("OK")
+ check_page(host, host+traits_url)
+
+def check_main_web_functionality(args_obj, parser):
+ print("")
+ print("Checking main web functionality...")
+ host = args_obj.host
+ check_home(host)
+ check_search_page(host)
diff --git a/test/requests/mapping_tests.py b/test/requests/mapping_tests.py
new file mode 100644
index 00000000..6de81bfe
--- /dev/null
+++ b/test/requests/mapping_tests.py
@@ -0,0 +1,42 @@
+from __future__ import print_function
+import re
+import copy
+import json
+import requests
+from lxml.html import fromstring
+
+def load_data_from_file():
+ filename = "../test/data/input/mapping/1435395_s_at_HC_M2_0606_P.json"
+ file_handle = open(filename, "r")
+ file_data = json.loads(file_handle.read().encode("utf-8"))
+ return file_data
+
+def check_R_qtl_tool_selection(host, data):
+ print("")
+ print("R/qtl mapping tool selection")
+ headers = {"Content-Type": "application/x-www-form-urlencoded"}
+ page = requests.post(host+"/marker_regression", data=data, headers=headers)
+ doc = fromstring(page.text)
+ form = doc.forms[1]
+ assert form.fields["dataset"] == "HC_M2_0606_P"
+ assert form.fields["value:BXD1"] == "15.034"
+
+def check_CIM_tool_selection(host, data):
+ print("")
+ print("CIM mapping tool selection (using reaper)")
+ data["method"] = "reaper"
+ page = requests.post(host+"/marker_regression", data=data)
+ doc = fromstring(page.text)
+ form = doc.forms[1]
+ assert form.fields["dataset"] == "HC_M2_0606_P"
+ assert form.fields["value:BXD1"] == "15.034"
+
+def check_mapping(args_obj, parser):
+ print("")
+ print("Checking mapping")
+
+ host = args_obj.host
+ data = load_data_from_file()
+ check_pylmm_tool_selection(host, copy.deepcopy(data))
+ check_R_qtl_tool_selection(host, copy.deepcopy(data)) ## Why does this fail?
+ check_CIM_tool_selection(host, copy.deepcopy(data))
diff --git a/test/requests/navigation_tests.py b/test/requests/navigation_tests.py
new file mode 100644
index 00000000..eda27324
--- /dev/null
+++ b/test/requests/navigation_tests.py
@@ -0,0 +1,15 @@
+from __future__ import print_function
+import re
+import requests
+from lxml.html import parse
+
+def check_navigation(args_obj, parser):
+ print("")
+ print("Checking navigation.")
+
+ host = args_obj.host
+ url = host + "/show_trait?trait_id=1435395_s_at&dataset=HC_M2_0606_P"
+ print("URL: ", url)
+ page = requests.get(url)
+ # Page is built by the javascript, hence using requests fails for this.
+ # Investigate use of selenium maybe?
diff --git a/test/requests/parametrized_test.py b/test/requests/parametrized_test.py
new file mode 100644
index 00000000..50003850
--- /dev/null
+++ b/test/requests/parametrized_test.py
@@ -0,0 +1,32 @@
+import logging
+import unittest
+from wqflask import app
+from utility.elasticsearch_tools import get_elasticsearch_connection, get_user_by_unique_column
+from elasticsearch import Elasticsearch, TransportError
+
+class ParametrizedTest(unittest.TestCase):
+
+ def __init__(self, methodName='runTest', gn2_url="http://localhost:5003", es_url="localhost:9200"):
+ super(ParametrizedTest, self).__init__(methodName=methodName)
+ self.gn2_url = gn2_url
+ self.es_url = es_url
+
+ def setUp(self):
+ self.es = get_elasticsearch_connection()
+ self.es_cleanup = []
+
+ es_logger = logging.getLogger("elasticsearch")
+ es_logger.setLevel(app.config.get("LOG_LEVEL"))
+ es_logger.addHandler(
+ logging.FileHandler("/tmp/es_TestRegistrationInfo.log"))
+ es_trace_logger = logging.getLogger("elasticsearch.trace")
+ es_trace_logger.addHandler(
+ logging.FileHandler("/tmp/es_TestRegistrationTrace.log"))
+
+ def tearDown(self):
+ from time import sleep
+ self.es.delete_by_query(
+ index="users"
+ , doc_type="local"
+ , body={"query":{"match":{"email_address":"test@user.com"}}})
+ sleep(1)
diff --git a/test/requests/test-website.py b/test/requests/test-website.py
new file mode 100755
index 00000000..b2e09bc4
--- /dev/null
+++ b/test/requests/test-website.py
@@ -0,0 +1,119 @@
+# Run with something like
+#
+# env GN2_PROFILE=/home/wrk/opt/gn-latest ./bin/genenetwork2 ./etc/default_settings.py -c ../test/requests/test-website.py http://localhost:5003
+#
+# Mostly to pick up the Guix GN2_PROFILE and python modules
+from __future__ import print_function
+import argparse
+from link_checker import check_links
+from mapping_tests import check_mapping
+from navigation_tests import check_navigation
+from main_web_functionality import check_main_web_functionality
+import link_checker
+import sys
+
+# Imports for integration tests
+from wqflask import app
+from test_login_local import TestLoginLocal
+from test_login_orcid import TestLoginOrcid
+from test_login_github import TestLoginGithub
+from test_registration import TestRegistration
+from test_forgot_password import TestForgotPassword
+from unittest import TestSuite, TextTestRunner, TestLoader
+
+print("Mechanical Rob firing up...")
+
+def run_all(args_obj, parser):
+ print("")
+ print("Running all tests.")
+ print(args_obj)
+ link_checker.DO_FAIL = args_obj.fail
+ check_main_web_functionality(args_obj, parser)
+ check_links(args_obj, parser)
+ check_mapping(args_obj, parser)
+ # TODO: Add other functions as they are created.
+
+def print_help(args_obj, parser):
+ print(parser.format_help())
+
+def dummy(args_obj, parser):
+ print("Not implemented yet.")
+
+def integration_tests(args_obj, parser):
+ gn2_url = args_obj.host
+ es_url = app.config.get("ELASTICSEARCH_HOST")+":"+str(app.config.get("ELASTICSEARCH_PORT"))
+ run_integration_tests(gn2_url, es_url)
+
+def initTest(klass, gn2_url, es_url):
+ loader = TestLoader()
+ methodNames = loader.getTestCaseNames(klass)
+ return [klass(mname, gn2_url, es_url) for mname in methodNames]
+
+def integration_suite(gn2_url, es_url):
+ test_cases = [
+ TestRegistration
+ , TestLoginLocal
+ , TestLoginGithub
+ , TestLoginOrcid
+ , TestForgotPassword
+ ]
+ the_suite = TestSuite()
+ for case in test_cases:
+ the_suite.addTests(initTest(case, gn2_url, es_url))
+ return the_suite
+
+def run_integration_tests(gn2_url, es_url):
+ runner = TextTestRunner()
+ runner.run(integration_suite(gn2_url, es_url))
+
+
+desc = """
+This is Mechanical-Rob - an automated web server tester for
+ Genenetwork.org
+"""
+parser = argparse.ArgumentParser(description=desc)
+
+parser.add_argument("--fail", help="Fail and stop on any error", action="store_true")
+
+parser.add_argument("-d", "--database", metavar="DB", type=str
+ , default="db_webqtl_s"
+ , help="Use database (default db_webqtl_s)")
+
+parser.add_argument("host", metavar="HOST", type=str
+ , default="http://localhost:5003"
+ , help="The url to the web server")
+
+parser.add_argument("-a", "--all", dest="accumulate", action="store_const"
+ , const=run_all, default=print_help
+ , help="Runs all tests.")
+
+parser.add_argument("-l", "--link-checker", dest="accumulate"
+ , action='store_const', const=check_links, default=print_help
+ , help="Checks for dead links.")
+
+parser.add_argument("-f", "--main-functionality", dest="accumulate"
+ , action='store_const', const=check_main_web_functionality
+ , default=print_help
+ , help="Checks for main web functionality.")
+
+parser.add_argument("-m", "--mapping", dest="accumulate"
+ , action="store_const", const=check_mapping, default=print_help
+ , help="Checks for mapping.")
+
+parser.add_argument("-i", "--integration-tests", dest="accumulate"
+ , action="store_const", const=integration_tests, default=print_help
+ , help="Runs integration tests.")
+
+# Navigation tests deactivated since system relies on Javascript
+# parser.add_argument("-n", "--navigation", dest="accumulate"
+# , action="store_const", const=check_navigation, default=print_help
+# , help="Checks for navigation.")
+
+# parser.add_argument("-s", "--skip-broken", dest="accumulate"
+# , action="store_const", const=dummy, default=print_help
+# , help="Skip tests that are known to be broken.")
+
+args = parser.parse_args()
+# print("The arguments object: ", args)
+
+args.accumulate(args, parser)
diff --git a/test/requests/test_forgot_password.py b/test/requests/test_forgot_password.py
new file mode 100644
index 00000000..2bf34c5c
--- /dev/null
+++ b/test/requests/test_forgot_password.py
@@ -0,0 +1,52 @@
+import requests
+from wqflask import user_manager
+from utility.elasticsearch_tools import get_user_by_unique_column
+from parameterized import parameterized
+from parametrized_test import ParametrizedTest
+
+passwork_reset_link = ''
+forgot_password_page = None
+
+class TestForgotPassword(ParametrizedTest):
+
+ def setUp(self):
+ super(TestForgotPassword, self).setUp()
+ self.forgot_password_url = self.gn2_url+"/n/forgot_password_submit"
+ def send_email(to_addr, msg, fromaddr="no-reply@genenetwork.org"):
+ print("CALLING: send_email_mock()")
+ email_data = {
+ "to_addr": to_addr
+ , "msg": msg
+ , "fromaddr": from_addr}
+
+ data = {
+ "es_connection": self.es,
+ "email_address": "test@user.com",
+ "full_name": "Test User",
+ "organization": "Test Organisation",
+ "password": "test_password",
+ "password_confirm": "test_password"
+ }
+ user_manager.basic_info = lambda : { "basic_info": "basic" }
+ user_manager.RegisterUser(data)
+
+ def testWithoutEmail(self):
+ data = {"email_address": ""}
+ error_notification = '<div class="alert alert-danger">You MUST provide an email</div>'
+ result = requests.post(self.forgot_password_url, data=data)
+ self.assertEqual(result.url, self.gn2_url+"/n/forgot_password")
+ self.assertTrue(
+ result.content.find(error_notification) >= 0
+ , "Error message should be displayed but was not")
+
+ def testWithNonExistingEmail(self):
+ # Monkey patching doesn't work, so simply test that getting by email
+ # returns the correct data
+ user = get_user_by_unique_column(self.es, "email_address", "non-existent@domain.com")
+ self.assertTrue(user is None, "Should not find non-existent user")
+
+ def testWithExistingEmail(self):
+ # Monkey patching doesn't work, so simply test that getting by email
+ # returns the correct data
+ user = get_user_by_unique_column(self.es, "email_address", "test@user.com")
+ self.assertTrue(user is not None, "Should find user")
diff --git a/test/requests/test_login_github.py b/test/requests/test_login_github.py
new file mode 100644
index 00000000..1bf4f695
--- /dev/null
+++ b/test/requests/test_login_github.py
@@ -0,0 +1,47 @@
+import uuid
+import requests
+from time import sleep
+from wqflask import app
+from parameterized import parameterized
+from parametrized_test import ParametrizedTest
+
+login_link_text = '<a id="login_in" href="/n/login">Sign in</a>'
+logout_link_text = '<a id="login_out" title="Signed in as ." href="/n/logout">Sign out</a>'
+uid = str(uuid.uuid4())
+
+class TestLoginGithub(ParametrizedTest):
+
+ def setUp(self):
+ super(TestLoginGithub, self).setUp()
+ data = {
+ "user_id": uid
+ , "name": "A. T. Est User"
+ , "github_id": 693024
+ , "user_url": "https://fake-github.com/atestuser"
+ , "login_type": "github"
+ , "organization": ""
+ , "active": 1
+ , "confirmed": 1
+ }
+ self.es.create(index="users", doc_type="local", body=data, id=uid)
+ sleep(1)
+
+ def tearDown(self):
+ super(TestLoginGithub, self).tearDown()
+ self.es.delete(index="users", doc_type="local", id=uid)
+
+ def testLoginUrl(self):
+ login_button_text = '<a href="https://github.com/login/oauth/authorize?client_id=' + app.config.get("GITHUB_CLIENT_ID") + '&amp;client_secret=' + app.config.get("GITHUB_CLIENT_SECRET") + '" title="Login with GitHub" class="btn btn-info btn-group">Login with Github</a>'
+ result = requests.get(self.gn2_url+"/n/login")
+ index = result.content.find(login_button_text)
+ self.assertTrue(index >= 0, "Should have found `Login with Github` button")
+
+ @parameterized.expand([
+ ("1234", login_link_text, "Login should have failed with non-existing user")
+ , (uid, logout_link_text, "Login should have been successful with existing user")
+ ])
+ def testLogin(self, test_uid, expected, message):
+ url = self.gn2_url+"/n/login?type=github&uid="+test_uid
+ result = requests.get(url)
+ index = result.content.find(expected)
+ self.assertTrue(index >= 0, message)
diff --git a/test/requests/test_login_local.py b/test/requests/test_login_local.py
new file mode 100644
index 00000000..808649ca
--- /dev/null
+++ b/test/requests/test_login_local.py
@@ -0,0 +1,60 @@
+import requests
+from wqflask import user_manager
+from parameterized import parameterized
+from parametrized_test import ParametrizedTest
+
+login_link_text = '<a id="login_in" href="/n/login">Sign in</a>'
+logout_link_text = '<a id="login_out" title="Signed in as ." href="/n/logout">Sign out</a>'
+
+class TestLoginLocal(ParametrizedTest):
+
+ def setUp(self):
+ super(TestLoginLocal, self).setUp()
+ self.login_url = self.gn2_url +"/n/login"
+ data = {
+ "es_connection": self.es,
+ "email_address": "test@user.com",
+ "full_name": "Test User",
+ "organization": "Test Organisation",
+ "password": "test_password",
+ "password_confirm": "test_password"
+ }
+ user_manager.basic_info = lambda : { "basic_info": "basic" }
+ user_manager.RegisterUser(data)
+
+
+ @parameterized.expand([
+ (
+ {
+ "email_address": "non@existent.email",
+ "password": "doesitmatter?"
+ }, login_link_text, "Login should have failed with the wrong user details."),
+ (
+ {
+ "email_address": "test@user.com",
+ "password": "test_password"
+ }, logout_link_text, "Login should have been successful with correct user details and neither import_collections nor remember_me set"),
+ (
+ {
+ "email_address": "test@user.com",
+ "password": "test_password",
+ "import_collections": "y"
+ }, logout_link_text, "Login should have been successful with correct user details and only import_collections set"),
+ (
+ {
+ "email_address": "test@user.com",
+ "password": "test_password",
+ "remember_me": "y"
+ }, logout_link_text, "Login should have been successful with correct user details and only remember_me set"),
+ (
+ {
+ "email_address": "test@user.com",
+ "password": "test_password",
+ "remember_me": "y",
+ "import_collections": "y"
+ }, logout_link_text, "Login should have been successful with correct user details, and both remember_me, and import_collections set")
+ ])
+ def testLogin(self, data, expected, message):
+ result = requests.post(self.login_url, data=data)
+ index = result.content.find(expected)
+ self.assertTrue(index >= 0, message)
diff --git a/test/requests/test_login_orcid.py b/test/requests/test_login_orcid.py
new file mode 100644
index 00000000..ea15642e
--- /dev/null
+++ b/test/requests/test_login_orcid.py
@@ -0,0 +1,47 @@
+import uuid
+import requests
+from time import sleep
+from wqflask import app
+from parameterized import parameterized
+from parametrized_test import ParametrizedTest
+
+login_link_text = '<a id="login_in" href="/n/login">Sign in</a>'
+logout_link_text = '<a id="login_out" title="Signed in as ." href="/n/logout">Sign out</a>'
+uid = str(uuid.uuid4())
+
+class TestLoginOrcid(ParametrizedTest):
+
+ def setUp(self):
+ super(TestLoginOrcid, self).setUp()
+ data = {
+ "user_id": uid
+ , "name": "A. T. Est User"
+ , "orcid": 345872
+ , "user_url": "https://fake-orcid.org/atestuser"
+ , "login_type": "orcid"
+ , "organization": ""
+ , "active": 1
+ , "confirmed": 1
+ }
+ self.es.create(index="users", doc_type="local", body=data, id=uid)
+ sleep(1)
+
+ def tearDown(self):
+ super(TestLoginOrcid, self).tearDown()
+ self.es.delete(index="users", doc_type="local", id=uid)
+
+ def testLoginUrl(self):
+ login_button_text = 'a href="https://sandbox.orcid.org/oauth/authorize?response_type=code&amp;scope=/authenticate&amp;show_login=true&amp;client_id=' + app.config.get("ORCID_CLIENT_ID") + '&amp;client_secret=' + app.config.get("ORCID_CLIENT_SECRET") + '" title="Login with ORCID" class="btn btn-info btn-group">Login with ORCID</a>'
+ result = requests.get(self.gn2_url+"/n/login")
+ index = result.content.find(login_button_text)
+ self.assertTrue(index >= 0, "Should have found `Login with ORCID` button")
+
+ @parameterized.expand([
+ ("1234", login_link_text, "Login should have failed with non-existing user")
+ , (uid, logout_link_text, "Login should have been successful with existing user")
+ ])
+ def testLogin(self, test_uid, expected, message):
+ url = self.gn2_url+"/n/login?type=orcid&uid="+test_uid
+ result = requests.get(url)
+ index = result.content.find(expected)
+ self.assertTrue(index >= 0, message)
diff --git a/test/requests/test_registration.py b/test/requests/test_registration.py
new file mode 100644
index 00000000..0047e8a6
--- /dev/null
+++ b/test/requests/test_registration.py
@@ -0,0 +1,41 @@
+import sys
+import requests
+from parametrized_test import ParametrizedTest
+
+class TestRegistration(ParametrizedTest):
+
+ def tearDown(self):
+ for item in self.es_cleanup:
+ self.es.delete(index="users", doc_type="local", id=item["_id"])
+
+ def testRegistrationPage(self):
+ if self.es.ping():
+ data = {
+ "email_address": "test@user.com",
+ "full_name": "Test User",
+ "organization": "Test Organisation",
+ "password": "test_password",
+ "password_confirm": "test_password"
+ }
+ requests.post(self.gn2_url+"/n/register", data)
+ response = self.es.search(
+ index="users"
+ , doc_type="local"
+ , body={
+ "query": {"match": {"email_address": "test@user.com"}}})
+ self.assertEqual(len(response["hits"]["hits"]), 1)
+ else:
+ self.skipTest("The elasticsearch server is down")
+
+def main(gn2, es):
+ import unittest
+ suite = unittest.TestSuite()
+ suite.addTest(TestRegistration(methodName="testRegistrationPage", gn2_url=gn2, es_url=es))
+ runner = unittest.TextTestRunner()
+ runner.run(suite)
+
+if __name__ == "__main__":
+ if len(sys.argv) < 3:
+ raise Exception("Required arguments missing")
+ else:
+ main(sys.argv[1], sys.argv[2])
diff --git a/test/unittest/test_registration.py b/test/unittest/test_registration.py
new file mode 100644
index 00000000..98d0cdff
--- /dev/null
+++ b/test/unittest/test_registration.py
@@ -0,0 +1,27 @@
+# Run test with something like
+#
+# env GN2_PROFILE=~/opt/gn-latest GENENETWORK_FILES=$HOME/gn2_data ./bin/genenetwork2 ./etc/default_settings.py -c ../test/unittest/test_registration.py
+#
+
+import unittest
+import mock.es_double as es
+from wqflask.user_manager import RegisterUser
+
+class TestRegisterUser(unittest.TestCase):
+ def setUp(self):
+ self.es = es.ESDouble()
+
+ def testRegisterUserWithCorrectData(self):
+ data = {
+ "email_address": "user@example.com"
+ , "full_name": "A.N. Other"
+ , "organization": "Some Organisation"
+ , "password": "testing"
+ , "password_confirm": "testing"
+ , "es_connection": self.es
+ }
+ result = RegisterUser(data)
+ self.assertEqual(len(result.errors), 0, "Errors were not expected")
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/wqflask/__init__.py b/wqflask/__init__.py
index 315b709e..e69de29b 100644
--- a/wqflask/__init__.py
+++ b/wqflask/__init__.py
@@ -1 +0,0 @@
-from wqflask import app
diff --git a/wqflask/base/anon_collection.py b/wqflask/base/anon_collection.py
deleted file mode 100644
index 8ee73296..00000000
--- a/wqflask/base/anon_collection.py
+++ /dev/null
@@ -1,21 +0,0 @@
-class AnonCollection(TraitCollection):
-
- def __init__(self, anon_id)
- self.anon_id = anon_id
- self.collection_members = Redis.smembers(self.anon_id)
- print("self.collection_members is:", self.collection_members)
- self.num_members = len(self.collection_members)
-
-
- @app.route("/collections/remove", methods=('POST',))
- def remove_traits(traits_to_remove):
- print("traits_to_remove:", traits_to_remove)
- for trait in traits_to_remove:
- Redis.srem(self.anon_id, trait)
- members_now = self.collection_members - traits_to_remove
- print("members_now:", members_now)
- print("Went from {} to {} members in set.".format(len(self.collection_members), len(members_now)))
-
- # We need to return something so we'll return this...maybe in the future
- # we can use it to check the results
- return str(len(members_now))
diff --git a/wqflask/base/data_set.py b/wqflask/base/data_set.py
index 54dd3c4b..ebf3f021 100644
--- a/wqflask/base/data_set.py
+++ b/wqflask/base/data_set.py
@@ -26,10 +26,10 @@ import collections
import codecs
import json
+import requests
import gzip
import cPickle as pickle
import itertools
-from operator import itemgetter
from redis import Redis
Redis = Redis()
@@ -44,8 +44,11 @@ from db import webqtlDatabaseFunction
from utility import webqtlUtil
from utility.benchmark import Bench
from utility import chunks
+from utility import gen_geno_ob
from utility.tools import locate, locate_ignore_error, flat_files
+from wqflask.api import gen_menu
+
from maintenance import get_group_samplelists
from MySQLdb import escape_string as escape
@@ -61,18 +64,21 @@ logger = getLogger(__name__ )
# Each subclass will add to this
DS_NAME_MAP = {}
-def create_dataset(dataset_name, dataset_type = None, get_samplelist = True):
+def create_dataset(dataset_name, rebuild=True, dataset_type = None, get_samplelist = True, group_name = None):
if not dataset_type:
dataset_type = Dataset_Getter(dataset_name)
logger.debug("dataset_type", dataset_type)
dataset_ob = DS_NAME_MAP[dataset_type]
dataset_class = globals()[dataset_ob]
- return dataset_class(dataset_name, get_samplelist)
+ if dataset_type == "Temp":
+ return dataset_class(dataset_name, get_samplelist, group_name)
+ else:
+ return dataset_class(dataset_name, get_samplelist)
class Dataset_Types(object):
- def __init__(self):
+ def __init__(self, rebuild=False):
"""Create a dictionary of samples where the value is set to Geno,
Publish or ProbeSet. E.g.
@@ -88,8 +94,10 @@ Publish or ProbeSet. E.g.
"""
self.datasets = {}
- if USE_GN_SERVER:
- data = menu_main()
+ if rebuild: #ZS: May make this the only option
+ data = json.loads(requests.get("http://gn2.genenetwork.org/api/v_pre1/gen_dropdown").content)
+ logger.debug("THE DATA:", data)
+ #data = gen_menu.gen_dropdown_json()
else:
file_name = "wqflask/static/new/javascript/dataset_menu_structure.json"
with open(file_name, 'r') as fh:
@@ -107,8 +115,9 @@ Publish or ProbeSet. E.g.
else:
new_type = "ProbeSet"
self.datasets[short_dataset_name] = new_type
+
# Set LOG_LEVEL_DEBUG=5 to see the following:
- logger.debugf(5,"datasets",self.datasets)
+ logger.debugf(5, "datasets",self.datasets)
def __call__(self, name):
return self.datasets[name]
@@ -166,20 +175,31 @@ def mescape(*items):
class Markers(object):
"""Todo: Build in cacheing so it saves us reading the same file more than once"""
def __init__(self, name):
- json_data_fh = open(locate(name + '.json','genotype/json'))
- try:
- markers = json.load(json_data_fh)
- except:
- markers = []
+ json_data_fh = open(locate(name + ".json",'genotype/json'))
+
+ markers = []
+ with open("%s/%s_snps.txt" % (flat_files('genotype/bimbam'), name), 'r') as bimbam_fh:
+ if len(bimbam_fh.readline().split(", ")) > 2:
+ delimiter = ", "
+ elif len(bimbam_fh.readline().split(",")) > 2:
+ delimiter = ","
+ elif len(bimbam_fh.readline().split("\t")) > 2:
+ delimiter = "\t"
+ else:
+ delimiter = " "
+ for line in bimbam_fh:
+ marker = {}
+ marker['name'] = line.split(delimiter)[0].rstrip()
+ marker['Mb'] = float(line.split(delimiter)[1].rstrip())/1000000
+ marker['chr'] = line.split(delimiter)[2].rstrip()
+ markers.append(marker)
for marker in markers:
- if (marker['chr'] != "X") and (marker['chr'] != "Y"):
+ if (marker['chr'] != "X") and (marker['chr'] != "Y") and (marker['chr'] != "M"):
marker['chr'] = int(marker['chr'])
marker['Mb'] = float(marker['Mb'])
self.markers = markers
- #logger.debug("self.markers:", self.markers)
-
def add_pvalues(self, p_values):
logger.debug("length of self.markers:", len(self.markers))
@@ -261,10 +281,12 @@ class DatasetGroup(object):
has multiple datasets associated with it.
"""
- def __init__(self, dataset):
+ def __init__(self, dataset, name=None):
"""This sets self.group and self.group_id"""
- #logger.debug("DATASET NAME2:", dataset.name)
- self.name, self.id, self.genetic_type = fetchone(dataset.query_for_group)
+ if name == None:
+ self.name, self.id, self.genetic_type = fetchone(dataset.query_for_group)
+ else:
+ self.name, self.id, self.genetic_type = fetchone("SELECT InbredSet.Name, InbredSet.Id, InbredSet.GeneticType FROM InbredSet where Name='%s'" % name)
if self.name == 'BXD300':
self.name = "BXD"
@@ -272,7 +294,6 @@ class DatasetGroup(object):
self.parlist = None
self.get_f1_parent_strains()
- self.accession_id = self.get_accession_id()
self.mapping_id, self.mapping_names = self.get_mapping_methods()
self.species = webqtlDatabaseFunction.retrieve_species(self.name)
@@ -282,55 +303,39 @@ class DatasetGroup(object):
self._datasets = None
self.genofile = None
- def get_accession_id(self):
- results = g.db.execute("""select InfoFiles.GN_AccesionId from InfoFiles, PublishFreeze, InbredSet where
- InbredSet.Name = %s and
- PublishFreeze.InbredSetId = InbredSet.Id and
- InfoFiles.InfoPageName = PublishFreeze.Name and
- PublishFreeze.public > 0 and
- PublishFreeze.confidentiality < 1 order by
- PublishFreeze.CreateTime desc""", (self.name)).fetchone()
-
- if results != None:
- return str(results[0])
- else:
- return "None"
-
def get_mapping_methods(self):
mapping_id = g.db.execute("select MappingMethodId from InbredSet where Name= '%s'" % self.name).fetchone()[0]
if mapping_id == "1":
- mapping_names = ["QTLReaper", "PYLMM", "R/qtl"]
+ mapping_names = ["GEMMA", "QTLReaper", "R/qtl"]
elif mapping_id == "2":
mapping_names = ["GEMMA"]
+ elif mapping_id == "3":
+ mapping_names = ["R/qtl"]
elif mapping_id == "4":
- mapping_names = ["PLINK"]
+ mapping_names = ["GEMMA", "PLINK"]
else:
mapping_names = []
return mapping_id, mapping_names
- def get_specified_markers(self, markers = []):
- self.markers = HumanMarkers(self.name, markers)
-
def get_markers(self):
- logger.debug("self.species is:", self.species)
-
def check_plink_gemma():
if flat_file_exists("mapping"):
MAPPING_PATH = flat_files("mapping")+"/"
- if (os.path.isfile(MAPPING_PATH+self.name+".bed") and
- (os.path.isfile(MAPPING_PATH+self.name+".map") or
- os.path.isfile(MAPPING_PATH+self.name+".bim"))):
+ if os.path.isfile(MAPPING_PATH+self.name+".bed"):
return True
return False
if check_plink_gemma():
marker_class = HumanMarkers
else:
- marker_class = Markers
+ marker_class = Markers
- self.markers = marker_class(self.name)
+ if self.genofile:
+ self.markers = marker_class(self.genofile[:-5])
+ else:
+ self.markers = marker_class(self.name)
def get_f1_parent_strains(self):
try:
@@ -344,30 +349,32 @@ class DatasetGroup(object):
if maternal and paternal:
self.parlist = [maternal, paternal]
+ def get_genofiles(self):
+ jsonfile = "%s/%s.json" % (webqtlConfig.GENODIR, self.name)
+ try:
+ f = open(jsonfile)
+ except:
+ return None
+ jsondata = json.load(f)
+ return jsondata['genofile']
+
def get_samplelist(self):
result = None
- key = "samplelist:v2:" + self.name
+ key = "samplelist:v3:" + self.name
if USE_REDIS:
result = Redis.get(key)
if result is not None:
- #logger.debug("Sample List Cache hit!!!")
- #logger.debug("Before unjsonifying {}: {}".format(type(result), result))
self.samplelist = json.loads(result)
- #logger.debug(" type: ", type(self.samplelist))
- #logger.debug(" self.samplelist: ", self.samplelist)
else:
logger.debug("Cache not hit")
genotype_fn = locate_ignore_error(self.name+".geno",'genotype')
- mapping_fn = locate_ignore_error(self.name+".fam",'mapping')
- if mapping_fn:
- self.samplelist = get_group_samplelists.get_samplelist("plink", mapping_fn)
- elif genotype_fn:
+ if genotype_fn:
self.samplelist = get_group_samplelists.get_samplelist("geno", genotype_fn)
else:
self.samplelist = None
- logger.debug("Sample list: ",self.samplelist)
+
if USE_REDIS:
Redis.set(key, json.dumps(self.samplelist))
Redis.expire(key, 60*5)
@@ -378,19 +385,27 @@ class DatasetGroup(object):
[result.extend(l) for l in lists if l]
return result
- def read_genotype_file(self):
+ def read_genotype_file(self, use_reaper=False):
'''Read genotype from .geno file instead of database'''
#genotype_1 is Dataset Object without parents and f1
#genotype_2 is Dataset Object with parents and f1 (not for intercross)
- genotype_1 = reaper.Dataset()
+ #genotype_1 = reaper.Dataset()
# reaper barfs on unicode filenames, so here we ensure it's a string
if self.genofile:
- full_filename = str(locate(self.genofile, 'genotype'))
+ if "RData" in self.genofile: #ZS: This is a temporary fix; I need to change the way the JSON files that point to multiple genotype files are structured to point to other file types like RData
+ full_filename = str(locate(self.genofile.split(".")[0] + ".geno", 'genotype'))
+ else:
+ full_filename = str(locate(self.genofile, 'genotype'))
else:
full_filename = str(locate(self.name + '.geno', 'genotype'))
- genotype_1.read(full_filename)
+
+ if use_reaper:
+ genotype_1 = reaper.Dataset()
+ genotype_1.read(full_filename)
+ else:
+ genotype_1 = gen_geno_ob.genotype(full_filename)
if genotype_1.type == "group" and self.parlist:
genotype_2 = genotype_1.add(Mat=self.parlist[0], Pat=self.parlist[1]) #, F1=_f1)
@@ -419,13 +434,16 @@ def datasets(group_name, this_group = None):
FROM PublishFreeze,InbredSet
WHERE PublishFreeze.InbredSetId = InbredSet.Id
and InbredSet.Name = '%s'
- and PublishFreeze.public > %s)
+ and PublishFreeze.public > %s
+ and PublishFreeze.confidentiality < 1
+ ORDER BY PublishFreeze.Id ASC)
UNION
(SELECT '#GenoFreeze',GenoFreeze.FullName,GenoFreeze.Name
FROM GenoFreeze, InbredSet
WHERE GenoFreeze.InbredSetId = InbredSet.Id
and InbredSet.Name = '%s'
- and GenoFreeze.public > %s)
+ and GenoFreeze.public > %s
+ and GenoFreeze.confidentiality < 1)
UNION
(SELECT Tissue.Name, ProbeSetFreeze.FullName,ProbeSetFreeze.Name
FROM ProbeSetFreeze, ProbeFreeze, InbredSet, Tissue
@@ -434,27 +452,34 @@ def datasets(group_name, this_group = None):
and ProbeFreeze.InbredSetId = InbredSet.Id
and InbredSet.Name like %s
and ProbeSetFreeze.public > %s
- ORDER BY Tissue.Name, ProbeSetFreeze.CreateTime desc, ProbeSetFreeze.AvgId)
+ and ProbeSetFreeze.confidentiality < 1
+ ORDER BY Tissue.Name, ProbeSetFreeze.OrderList DESC)
''' % (group_name, webqtlConfig.PUBLICTHRESH,
group_name, webqtlConfig.PUBLICTHRESH,
"'" + group_name + "'", webqtlConfig.PUBLICTHRESH))
- #for tissue_name, dataset in itertools.groupby(the_results, itemgetter(0)):
- for dataset_item in the_results:
+ sorted_results = sorted(the_results, key=lambda kv: kv[0])
+
+ pheno_inserted = False #ZS: This is kind of awkward, but need to ensure Phenotypes show up before Genotypes in dropdown
+ geno_inserted = False
+ for dataset_item in sorted_results:
tissue_name = dataset_item[0]
dataset = dataset_item[1]
dataset_short = dataset_item[2]
if tissue_name in ['#PublishFreeze', '#GenoFreeze']:
- dataset_menu.append(dict(tissue=None, datasets=[(dataset, dataset_short)]))
+ if tissue_name == '#PublishFreeze' and (dataset_short == group_name + 'Publish'):
+ dataset_menu.insert(0, dict(tissue=None, datasets=[(dataset, dataset_short)]))
+ pheno_inserted = True
+ elif pheno_inserted and tissue_name == '#GenoFreeze':
+ dataset_menu.insert(1, dict(tissue=None, datasets=[(dataset, dataset_short)]))
+ geno_inserted = True
+ else:
+ dataset_menu.append(dict(tissue=None, datasets=[(dataset, dataset_short)]))
else:
- dataset_sub_menu = [item[1:] for item in dataset]
-
tissue_already_exists = False
- tissue_position = None
for i, tissue_dict in enumerate(dataset_menu):
if tissue_dict['tissue'] == tissue_name:
tissue_already_exists = True
- tissue_position = i
break
if tissue_already_exists:
@@ -481,7 +506,7 @@ class DataSet(object):
"""
- def __init__(self, name, get_samplelist = True):
+ def __init__(self, name, get_samplelist = True, group_name = None):
assert name, "Need a name"
self.name = name
@@ -493,11 +518,13 @@ class DataSet(object):
self.setup()
- self.check_confidentiality()
-
- self.retrieve_other_names()
-
- self.group = DatasetGroup(self) # sets self.group and self.group_id and gets genotype
+ if self.type == "Temp": #Need to supply group name as input if temp trait
+ self.group = DatasetGroup(self, name=group_name) # sets self.group and self.group_id and gets genotype
+ else:
+ self.check_confidentiality()
+ self.retrieve_other_names()
+ self.group = DatasetGroup(self) # sets self.group and self.group_id and gets genotype
+ self.accession_id = self.get_accession_id()
if get_samplelist == True:
self.group.get_samplelist()
self.species = species.TheSpecies(self)
@@ -512,6 +539,31 @@ class DataSet(object):
def riset():
Weve_Renamed_This_As_Group
+ def get_accession_id(self):
+ if self.type == "Publish":
+ results = g.db.execute("""select InfoFiles.GN_AccesionId from InfoFiles, PublishFreeze, InbredSet where
+ InbredSet.Name = %s and
+ PublishFreeze.InbredSetId = InbredSet.Id and
+ InfoFiles.InfoPageName = PublishFreeze.Name and
+ PublishFreeze.public > 0 and
+ PublishFreeze.confidentiality < 1 order by
+ PublishFreeze.CreateTime desc""", (self.group.name)).fetchone()
+ elif self.type == "Geno":
+ results = g.db.execute("""select InfoFiles.GN_AccesionId from InfoFiles, GenoFreeze, InbredSet where
+ InbredSet.Name = %s and
+ GenoFreeze.InbredSetId = InbredSet.Id and
+ InfoFiles.InfoPageName = GenoFreeze.ShortName and
+ GenoFreeze.public > 0 and
+ GenoFreeze.confidentiality < 1 order by
+ GenoFreeze.CreateTime desc""", (self.group.name)).fetchone()
+ else:
+ results = None
+
+ if results != None:
+ return str(results[0])
+ else:
+ return "None"
+
def retrieve_other_names(self):
"""This method fetches the the dataset names in search_result.
@@ -658,6 +710,7 @@ class PhenotypeDataSet(DataSet):
'Phenotype.Pre_publication_description',
'Phenotype.Pre_publication_abbreviation',
'Phenotype.Post_publication_abbreviation',
+ 'PublishXRef.mean',
'Phenotype.Lab_code',
'Publication.PubMed_ID',
'Publication.Abstract',
@@ -666,13 +719,14 @@ class PhenotypeDataSet(DataSet):
'PublishXRef.Id']
# Figure out what display_fields is
- self.display_fields = ['name',
+ self.display_fields = ['name', 'group_code',
'pubmed_id',
'pre_publication_description',
'post_publication_description',
'original_description',
'pre_publication_abbreviation',
'post_publication_abbreviation',
+ 'mean',
'lab_code',
'submitter', 'owner',
'authorized_users',
@@ -708,20 +762,6 @@ class PhenotypeDataSet(DataSet):
# (Urgently?) Need to write this
pass
- def get_trait_list(self):
- query = """
- select PublishXRef.Id
- from PublishXRef, PublishFreeze
- where PublishFreeze.InbredSetId=PublishXRef.InbredSetId
- and PublishFreeze.Id = {}
- """.format(escape(str(self.id)))
- logger.sql(query)
- results = g.db.execute(query).fetchall()
- trait_data = {}
- for trait in results:
- trait_data[trait[0]] = self.retrieve_sample_data(trait[0])
- return trait_data
-
def get_trait_info(self, trait_list, species = ''):
for this_trait in trait_list:
@@ -735,7 +775,7 @@ class PhenotypeDataSet(DataSet):
#of the post-publication description
if this_trait.confidential:
this_trait.description_display = ""
- continue # for now
+ continue # for now, because no authorization features
if not webqtlUtil.hasAccessToConfidentialPhenotypeTrait(
privilege=self.privilege,
@@ -759,9 +799,7 @@ class PhenotypeDataSet(DataSet):
#LRS and its location
this_trait.LRS_score_repr = "N/A"
- this_trait.LRS_score_value = 0
this_trait.LRS_location_repr = "N/A"
- this_trait.LRS_location_value = 1000000
if this_trait.lrs:
query = """
@@ -778,17 +816,7 @@ class PhenotypeDataSet(DataSet):
LRS_Chr = result[0]
LRS_Mb = result[1]
- #XZ: LRS_location_value is used for sorting
- try:
- LRS_location_value = int(LRS_Chr)*1000 + float(LRS_Mb)
- except:
- if LRS_Chr.upper() == 'X':
- LRS_location_value = 20*1000 + float(LRS_Mb)
- else:
- LRS_location_value = ord(str(LRS_chr).upper()[0])*1000 + float(LRS_Mb)
-
this_trait.LRS_score_repr = LRS_score_repr = '%3.1f' % this_trait.lrs
- this_trait.LRS_score_value = LRS_score_value = this_trait.lrs
this_trait.LRS_location_repr = LRS_location_repr = 'Chr%s: %.6f' % (LRS_Chr, float(LRS_Mb))
def retrieve_sample_data(self, trait):
@@ -850,45 +878,18 @@ class GenotypeDataSet(DataSet):
def check_confidentiality(self):
return geno_mrna_confidentiality(self)
- def get_trait_list(self):
- query = """
- select Geno.Name
- from Geno, GenoXRef
- where GenoXRef.GenoId = Geno.Id
- and GenoFreezeId = {}
- """.format(escape(str(self.id)))
- logger.sql(query)
- results = g.db.execute(query).fetchall()
- trait_data = {}
- for trait in results:
- trait_data[trait[0]] = self.retrieve_sample_data(trait[0])
- return trait_data
-
def get_trait_info(self, trait_list, species=None):
for this_trait in trait_list:
if not this_trait.haveinfo:
this_trait.retrieveInfo()
- #XZ: trait_location_value is used for sorting
- trait_location_repr = 'N/A'
- trait_location_value = 1000000
-
if this_trait.chr and this_trait.mb:
- try:
- trait_location_value = int(this_trait.chr)*1000 + this_trait.mb
- except:
- if this_trait.chr.upper() == 'X':
- trait_location_value = 20*1000 + this_trait.mb
- else:
- trait_location_value = ord(str(this_trait.chr).upper()[0])*1000 + this_trait.mb
-
this_trait.location_repr = 'Chr%s: %.6f' % (this_trait.chr, float(this_trait.mb) )
- this_trait.location_value = trait_location_value
def retrieve_sample_data(self, trait):
query = """
SELECT
- Strain.Name, GenoData.value, GenoSE.error, GenoData.Id, Sample.Name2
+ Strain.Name, GenoData.value, GenoSE.error, GenoData.Id, Strain.Name2
FROM
(GenoData, GenoFreeze, Strain, Geno, GenoXRef)
left join GenoSE on
@@ -940,6 +941,7 @@ class MrnaAssayDataSet(DataSet):
'blatseq', 'targetseq',
'chipid', 'comments',
'strand_probe', 'strand_gene',
+ 'proteinid', 'uniprotid',
'probe_set_target_region',
'probe_set_specificity',
'probe_set_blat_score',
@@ -978,20 +980,6 @@ class MrnaAssayDataSet(DataSet):
def check_confidentiality(self):
return geno_mrna_confidentiality(self)
- def get_trait_list_1(self):
- query = """
- select ProbeSet.Name
- from ProbeSet, ProbeSetXRef
- where ProbeSetXRef.ProbeSetId = ProbeSet.Id
- and ProbeSetFreezeId = {}
- """.format(escape(str(self.id)))
- logger.sql(query)
- results = g.db.execute(query).fetchall()
- trait_data = {}
- for trait in results:
- trait_data[trait[0]] = self.retrieve_sample_data(trait[0])
- return trait_data
-
def get_trait_info(self, trait_list=None, species=''):
# Note: setting trait_list to [] is probably not a great idea.
@@ -1023,27 +1011,8 @@ class MrnaAssayDataSet(DataSet):
# Save it for the jinja2 template
this_trait.description_display = description_display
- #XZ: trait_location_value is used for sorting
- trait_location_repr = 'N/A'
- trait_location_value = 1000000
-
if this_trait.chr and this_trait.mb:
- #Checks if the chromosome number can be cast to an int (i.e. isn't "X" or "Y")
- #This is so we can convert the location to a number used for sorting
- trait_location_value = self.convert_location_to_value(this_trait.chr, this_trait.mb)
- #try:
- # trait_location_value = int(this_trait.chr)*1000 + this_trait.mb
- #except ValueError:
- # if this_trait.chr.upper() == 'X':
- # trait_location_value = 20*1000 + this_trait.mb
- # else:
- # trait_location_value = (ord(str(this_trait.chr).upper()[0])*1000 +
- # this_trait.mb)
-
- #ZS: Put this in function currently called "convert_location_to_value"
- this_trait.location_repr = 'Chr%s: %.6f' % (this_trait.chr,
- float(this_trait.mb))
- this_trait.location_value = trait_location_value
+ this_trait.location_repr = 'Chr%s: %.6f' % (this_trait.chr, float(this_trait.mb))
#Get mean expression value
query = (
@@ -1065,9 +1034,7 @@ class MrnaAssayDataSet(DataSet):
#LRS and its location
this_trait.LRS_score_repr = 'N/A'
- this_trait.LRS_score_value = 0
this_trait.LRS_location_repr = 'N/A'
- this_trait.LRS_location_value = 1000000
#Max LRS and its Locus location
if this_trait.lrs and this_trait.locus:
@@ -1082,40 +1049,10 @@ class MrnaAssayDataSet(DataSet):
if result:
lrs_chr, lrs_mb = result
- #XZ: LRS_location_value is used for sorting
- lrs_location_value = self.convert_location_to_value(lrs_chr, lrs_mb)
this_trait.LRS_score_repr = '%3.1f' % this_trait.lrs
- this_trait.LRS_score_value = this_trait.lrs
this_trait.LRS_location_repr = 'Chr%s: %.6f' % (lrs_chr, float(lrs_mb))
-
- def convert_location_to_value(self, chromosome, mb):
- try:
- location_value = int(chromosome)*1000 + float(mb)
- except ValueError:
- if chromosome.upper() == 'X':
- location_value = 20*1000 + float(mb)
- else:
- location_value = (ord(str(chromosome).upper()[0])*1000 +
- float(mb))
-
- return location_value
-
- def get_sequence(self):
- query = """
- SELECT
- ProbeSet.BlatSeq
- FROM
- ProbeSet, ProbeSetFreeze, ProbeSetXRef
- WHERE
- ProbeSet.Id=ProbeSetXRef.ProbeSetId and
- ProbeSetFreeze.Id = ProbeSetXRef.ProbSetFreezeId and
- ProbeSet.Name = %s
- ProbeSetFreeze.Name = %s
- """ % (escape(self.name), escape(self.dataset.name))
- logger.sql(query)
- results = g.db.execute(query).fetchone()
- return results[0]
+ return trait_list
def retrieve_sample_data(self, trait):
query = """
@@ -1139,7 +1076,6 @@ class MrnaAssayDataSet(DataSet):
#logger.debug("RETRIEVED RESULTS HERE:", results)
return results
-
def retrieve_genes(self, column_name):
query = """
select ProbeSet.Name, ProbeSet.%s
@@ -1156,6 +1092,8 @@ class MrnaAssayDataSet(DataSet):
class TempDataSet(DataSet):
'''Temporary user-generated data set'''
+ DS_NAME_MAP['Temp'] = 'TempDataSet'
+
def setup(self):
self.search_fields = ['name',
'description']
@@ -1191,19 +1129,6 @@ class TempDataSet(DataSet):
desc = self.handle_pca(desc)
return desc
- def get_group(self):
- query = """
- SELECT
- InbredSet.Name, InbredSet.Id
- FROM
- InbredSet, Temp
- WHERE
- Temp.InbredSetId = InbredSet.Id AND
- Temp.Name = "%s"
- """ % self.name
- logger.sql(query)
- self.group, self.group_id = g.db.execute(query).fetchone()
-
def retrieve_sample_data(self, trait):
query = """
SELECT
diff --git a/wqflask/base/mrna_assay_tissue_data.py b/wqflask/base/mrna_assay_tissue_data.py
index eb836e6c..6fec5dcd 100644
--- a/wqflask/base/mrna_assay_tissue_data.py
+++ b/wqflask/base/mrna_assay_tissue_data.py
@@ -18,21 +18,11 @@ class MrnaAssayTissueData(object):
def __init__(self, gene_symbols=None):
self.gene_symbols = gene_symbols
- self.have_data = False
if self.gene_symbols == None:
self.gene_symbols = []
- #print("self.gene_symbols:", self.gene_symbols)
-
self.data = collections.defaultdict(Bunch)
- #self.gene_id_dict ={}
- #self.data_id_dict = {}
- #self.chr_dict = {}
- #self.mb_dict = {}
- #self.desc_dict = {}
- #self.probe_target_desc_dict = {}
-
query = '''select t.Symbol, t.GeneId, t.DataId, t.Chr, t.Mb, t.description, t.Probe_Target_Description
from (
select Symbol, max(Mean) as maxmean
@@ -52,7 +42,6 @@ class MrnaAssayTissueData(object):
in_clause = db_tools.create_in_clause(gene_symbols)
#ZS: This was in the query, not sure why: http://docs.python.org/2/library/string.html?highlight=lower#string.lower
-
query += ''' Symbol in {} group by Symbol)
as x inner join TissueProbeSetXRef as t on t.Symbol = x.Symbol
and t.Mean = x.maxmean;
@@ -67,9 +56,7 @@ class MrnaAssayTissueData(object):
for result in results:
symbol = result[0]
- #if symbol.lower() in [gene_symbol.lower() for gene_symbol in gene_symbols]:
if symbol.lower() in lower_symbols:
- #gene_symbols.append(symbol)
symbol = symbol.lower()
self.data[symbol].gene_id = result.GeneId
@@ -79,8 +66,6 @@ class MrnaAssayTissueData(object):
self.data[symbol].description = result.description
self.data[symbol].probe_target_description = result.Probe_Target_Description
- print("self.data: ", pf(self.data))
-
###########################################################################
#Input: cursor, symbolList (list), dataIdDict(Dict)
#output: symbolValuepairDict (dictionary):one dictionary of Symbol and Value Pair,
@@ -107,53 +92,4 @@ class MrnaAssayTissueData(object):
else:
symbol_values_dict[result.Symbol.lower()].append(result.value)
- #for symbol in self.data:
- # data_id = self.data[symbol].data_id
- # symbol_values_dict[symbol] = self.get_tissue_values(data_id)
-
-
- return symbol_values_dict
-
-
- #def get_tissue_values(self, data_id):
- # """Gets the tissue values for a particular gene"""
- #
- # tissue_values=[]
- #
- # query = """SELECT value, id
- # FROM TissueProbeSetData
- # WHERE Id IN {}""".format(db_tools.create_in_clause(data_id))
- #
- # #try :
- # results = g.db.execute(query).fetchall()
- # for result in results:
- # tissue_values.append(result.value)
- # #symbol_values_dict[symbol] = value_list
- # #except:
- # # symbol_values_pairs[symbol] = None
- #
- # return tissue_values
-
-########################################################################################################
-#input: cursor, symbolList (list), dataIdDict(Dict): key is symbol
-#output: SymbolValuePairDict(dictionary):one dictionary of Symbol and Value Pair.
-# key is symbol, value is one list of expression values of one probeSet.
-#function: wrapper function for getSymbolValuePairDict function
-# build gene symbol list if necessary, cut it into small lists if necessary,
-# then call getSymbolValuePairDict function and merge the results.
-########################################################################################################
-
-#def get_trait_symbol_and_tissue_values(symbol_list=None):
-# tissue_data = MrnaAssayTissueData(gene_symbols=symbol_list)
-#
-# #symbolList,
-# #geneIdDict,
-# #dataIdDict,
-# #ChrDict,
-# #MbDict,
-# #descDict,
-# #pTargetDescDict = getTissueProbeSetXRefInfo(
-# # GeneNameLst=GeneNameLst,TissueProbeSetFreezeId=TissueProbeSetFreezeId)
-#
-# if len(tissue_data.gene_symbols):
-# return get_symbol_values_pairs(tissue_data)
+ return symbol_values_dict \ No newline at end of file
diff --git a/wqflask/base/species.py b/wqflask/base/species.py
index ce763fc3..6d99af65 100644
--- a/wqflask/base/species.py
+++ b/wqflask/base/species.py
@@ -14,23 +14,13 @@ from utility.logger import getLogger
logger = getLogger(__name__ )
class TheSpecies(object):
- def __init__(self, dataset):
- self.dataset = dataset
- #print("self.dataset is:", pf(self.dataset.__dict__))
- self.chromosomes = Chromosomes(self.dataset)
- self.genome_mb_length = self.chromosomes.get_genome_mb_length()
-
- #@property
- #def chromosomes(self):
- # chromosomes = [("All", -1)]
- #
- # for counter, genotype in enumerate(self.dataset.group.genotype):
- # if len(genotype) > 1:
- # chromosomes.append((genotype.name, counter))
- #
- # print("chromosomes is: ", pf(chromosomes))
- #
- # return chromosomes
+ def __init__(self, dataset=None, species_name=None):
+ if species_name != None:
+ self.name = species_name
+ self.chromosomes = Chromosomes(species=self.name)
+ else:
+ self.dataset = dataset
+ self.chromosomes = Chromosomes(dataset=self.dataset)
class IndChromosome(object):
def __init__(self, name, length):
@@ -42,17 +32,22 @@ class IndChromosome(object):
"""Chromosome length in megabases"""
return self.length / 1000000
- def set_cm_length(self, genofile_chr):
- self.cm_length = genofile_chr[-1].cM - genofile_chr[0].cM
-
-
class Chromosomes(object):
- def __init__(self, dataset):
- self.dataset = dataset
+ def __init__(self, dataset=None, species=None):
self.chromosomes = collections.OrderedDict()
+ if species != None:
+ query = """
+ Select
+ Chr_Length.Name, Chr_Length.OrderId, Length from Chr_Length, Species
+ where
+ Chr_Length.SpeciesId = Species.SpeciesId AND
+ Species.Name = '%s'
+ Order by OrderId
+ """ % species.capitalize()
+ else:
+ self.dataset = dataset
-
- query = """
+ query = """
Select
Chr_Length.Name, Chr_Length.OrderId, Length from Chr_Length, InbredSet
where
@@ -64,64 +59,4 @@ class Chromosomes(object):
results = g.db.execute(query).fetchall()
for item in results:
- self.chromosomes[item.OrderId] = IndChromosome(item.Name, item.Length)
-
- self.set_mb_graph_interval()
- #self.get_cm_length_list()
-
-
- def set_mb_graph_interval(self):
- """Empirical megabase interval"""
-
- if self.chromosomes:
- self.mb_graph_interval = self.get_genome_mb_length()/(len(self.chromosomes)*12)
- else:
- self.mb_graph_interval = 1
-
- #if self.chromosomes:
- #assert self.chromosomes, "Have to add some code back in apparently to set it to 1"
- #self.mb_graph_interval = self.get_genome_mb_length()/(len(self.chromosomes)*12)
- #else:
- #self.mb_graph_interval = 1
-
-
- def get_genome_mb_length(self):
- """Gets the sum of each chromosome's length in megabases"""
-
- return sum([ind_chromosome.mb_length for ind_chromosome in self.chromosomes.values()])
-
-
- def get_genome_cm_length(self):
- """Gets the sum of each chromosome's length in centimorgans"""
-
- return sum([ind_chromosome.cm_length for ind_chromosome in self.chromosomes.values()])
-
- def get_cm_length_list(self):
- """Chromosome length in centimorgans
-
- Calculates the length in centimorgans by subtracting the centimorgan position
- of the last marker in a chromosome by the position of the first marker
-
- """
-
- self.dataset.group.read_genotype_file()
-
- self.cm_length_list = []
-
- for chromosome in self.dataset.group.genotype:
- self.cm_length_list.append(chromosome[-1].cM - chromosome[0].cM)
-
- print("self.cm_length_list:", pf(self.cm_length_list))
-
- assert len(self.cm_length_list) == len(self.chromosomes), "Uh-oh lengths should be equal!"
- for counter, chromosome in enumerate(self.chromosomes.values()):
- chromosome.cm_length = self.cm_length_list[counter]
- #self.chromosomes[counter].cm_length = item
-
- for key, value in self.chromosomes.items():
- print("bread - %s: %s" % (key, pf(vars(value))))
-
-
-# Testing
-#if __name__ == '__main__':
-# foo = dict(bar=dict(length))
+ self.chromosomes[item.OrderId] = IndChromosome(item.Name, item.Length) \ No newline at end of file
diff --git a/wqflask/base/template.py b/wqflask/base/template.py
deleted file mode 100644
index aa8f90dc..00000000
--- a/wqflask/base/template.py
+++ /dev/null
@@ -1,123 +0,0 @@
-# Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
-#
-# This program is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Affero General Public License
-# as published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the GNU Affero General Public License for more details.
-#
-# This program is available from Source Forge: at GeneNetwork Project
-# (sourceforge.net/projects/genenetwork/).
-#
-# Contact Drs. Robert W. Williams and Xiaodong Zhou (2010)
-# at rwilliams@uthsc.edu and xzhou15@uthsc.edu
-#
-#
-#
-# This module is used by GeneNetwork project (www.genenetwork.org)
-#
-# Created by GeneNetwork Core Team 2010/08/10
-#
-# Last updated by GeneNetwork Core Team 2010/10/20
-
-template = """
-<?XML VERSION="1.0" ENCODING="UTF-8">
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-<HEAD>
-<TITLE>%s</TITLE>
-
-<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
-<META NAME="keywords" CONTENT="genetics, bioinformatics, genome, phenome, gene expression, complex trait analysis, gene mapping, SNP, quantitative trait locus QTL, expression eQTL, WebQTL, Traitnet, Traitnetwork, personalized medicine">
-<META NAME="description" CONTENT ="GeneNetwork is a free scientific web resource used to study relationships between differences in genes, environmental factors, phenotypes, and disease risk." >
-<META NAME="author" CONTENT ="GeneNetwork developers" >
-<META NAME="geo.placename" CONTENT ="Memphis, TN" >
-<META NAME="geo.region" CONTENT="US-TN">
-%s
-<LINK REL="stylesheet" TYPE="text/css" HREF='/css/general.css'>
-<LINK REL="stylesheet" TYPE="text/css" HREF='/css/menu.css'>
-<link rel="stylesheet" media="all" type="text/css" href="/css/tabbed_pages.css" />
-<LINK REL="apple-touch-icon" href="/images/ipad_icon3.png" />
-<link type="text/css" href='/css/custom-theme/jquery-ui-1.8.12.custom.css' rel='Stylesheet' />
-<link type="text/css" href='/css/tab_style.css' rel='Stylesheet' />
-
-<script type="text/javascript" src="/javascript/jquery-1.5.2.min.js"></script>
-<SCRIPT SRC="/javascript/webqtl.js"></SCRIPT>
-<SCRIPT SRC="/javascript/dhtml.js"></SCRIPT>
-<SCRIPT SRC="/javascript/tablesorter.js"></SCRIPT>
-<SCRIPT SRC="/javascript/jqueryFunction.js"></SCRIPT>
-<script src="/javascript/tabbed_pages.js" type="text/javascript"></script>
-<script src="/javascript/jquery-ui-1.8.12.custom.min.js" type="text/javascript"></script>
-%s
-
-<script type="text/javascript">
- var _gaq = _gaq || [];
- _gaq.push(['_setAccount', 'UA-3782271-1']);
- _gaq.push(['_trackPageview']);
- (function() {
- var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
- ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
- var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
- })();
-</script>
-</HEAD>
-<BODY bottommargin="2" leftmargin="2" rightmargin="2" topmargin="2" text=#000000 bgColor=#ffffff %s>
-%s
-<TABLE cellSpacing=5 cellPadding=4 width="100%%" border=0>
- <TBODY>
- <!-- Start of header -->
- <TR>
- %s
- </TR>
- <!-- End of header -->
-
- <!-- Start of body -->
- <TR>
- <TD bgColor=#eeeeee class="solidBorder">
- <Table width= "100%%" cellSpacing=0 cellPadding=5>
- <TR>
- %s
- </TR>
- </TABLE>
- </TD>
- </TR>
- <!-- End of body -->
-
- <!-- Start of footer -->
- <TR>
- <TD align=center bgColor=#ddddff class="solidBorder">
- <TABLE width="90%%">%s</table>
- </td>
- </TR>
- <!-- End of footer -->
-</TABLE>
-
-<!-- menu script itself. you should not modify this file -->
-<script language="JavaScript" src="/javascript/menu_new.js"></script>
-<!-- items structure. menu hierarchy and links are stored there -->
-<script language="JavaScript" src="/javascript/menu_items.js"></script>
-<!-- files with geometry and styles structures -->
-<script language="JavaScript" src="/javascript/menu_tpl.js"></script>
-<script language="JavaScript">
- <!--//
- // Note where menu initialization block is located in HTML document.
- // Don't try to position menu locating menu initialization block in
- // some table cell or other HTML element. Always put it before </body>
- // each menu gets two parameters (see demo files)
- // 1. items structure
- // 2. geometry structure
- new menu (MENU_ITEMS, MENU_POS);
- // make sure files containing definitions for these variables are linked to the document
- // if you got some javascript error like "MENU_POS is not defined", then you've made syntax
- // error in menu_tpl.js file or that file isn't linked properly.
-
- // also take a look at stylesheets loaded in header in order to set styles
- //-->
-</script>
-</BODY>
-</HTML>
-"""
diff --git a/wqflask/base/trait.py b/wqflask/base/trait.py
index bf87e879..5525472e 100644
--- a/wqflask/base/trait.py
+++ b/wqflask/base/trait.py
@@ -3,14 +3,17 @@ from __future__ import absolute_import, division, print_function
import string
import resource
import codecs
+import requests
-from htmlgen import HTMLgen2 as HT
+import redis
+Redis = redis.StrictRedis()
from base import webqtlConfig
from base.webqtlCaseData import webqtlCaseData
from base.data_set import create_dataset
from db import webqtlDatabaseFunction
from utility import webqtlUtil
+from utility import hmac
from wqflask import app
@@ -18,17 +21,11 @@ import simplejson as json
from MySQLdb import escape_string as escape
from pprint import pformat as pf
-from flask import Flask, g, request
+from flask import Flask, g, request, url_for
from utility.logger import getLogger
logger = getLogger(__name__ )
-from wqflask import user_manager
-
-def print_mem(stage=""):
- mem = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
- print("{}: {}".format(stage, mem/1024))
-
class GeneralTrait(object):
"""
Trait class defines a trait in webqtl, can be either Microarray,
@@ -39,13 +36,15 @@ class GeneralTrait(object):
def __init__(self, get_qtl_info=False, get_sample_info=True, **kw):
# xor assertion
assert bool(kw.get('dataset')) != bool(kw.get('dataset_name')), "Needs dataset ob. or name";
+ self.name = kw.get('name') # Trait ID, ProbeSet ID, Published ID, etc.
if kw.get('dataset_name'):
- self.dataset = create_dataset(kw.get('dataset_name'))
- #print(" in GeneralTrait created dataset:", self.dataset)
+ if kw.get('dataset_name') == "Temp":
+ temp_group = self.name.split("_")[2]
+ self.dataset = create_dataset(dataset_name = "Temp", dataset_type = "Temp", group_name = temp_group)
+ else:
+ self.dataset = create_dataset(kw.get('dataset_name'))
else:
self.dataset = kw.get('dataset')
- self.name = kw.get('name') # Trait ID, ProbeSet ID, Published ID, etc.
- #print("THE NAME IS:", self.name)
self.cellid = kw.get('cellid')
self.identification = kw.get('identification', 'un-named trait')
self.haveinfo = kw.get('haveinfo', False)
@@ -61,6 +60,10 @@ class GeneralTrait(object):
self.num_overlap = None
self.strand_probe = None
self.symbol = None
+ self.display_name = self.name
+
+ self.LRS_score_repr = "N/A"
+ self.LRS_location_repr = "N/A"
if kw.get('fullname'):
name2 = value.split("::")
@@ -72,94 +75,11 @@ class GeneralTrait(object):
# Todo: These two lines are necessary most of the time, but perhaps not all of the time
# So we could add a simple if statement to short-circuit this if necessary
- self = retrieve_trait_info(self, self.dataset, get_qtl_info=get_qtl_info)
+ if self.dataset.type != "Temp":
+ self = retrieve_trait_info(self, self.dataset, get_qtl_info=get_qtl_info)
if get_sample_info != False:
self = retrieve_sample_data(self, self.dataset)
-
- def get_name(self):
- stringy = ""
- if self.dataset and self.name:
- stringy = "%s::%s" % (self.dataset, self.name)
- if self.cellid:
- stringy += "::" + self.cellid
- else:
- stringy = self.description
- return stringy
-
-
- def get_given_name(self):
- """
- when user enter a trait or GN generate a trait, user want show the name
- not the name that generated by GN randomly, the two follow function are
- used to give the real name and the database. displayName() will show the
- database also, getGivenName() just show the name.
- For other trait, displayName() as same as getName(), getGivenName() as
- same as self.name
-
- Hongqiang 11/29/07
-
- """
- stringy = self.name
- if self.dataset and self.name:
- desc = self.dataset.get_desc()
- if desc:
- #desc = self.handle_pca(desc)
- stringy = desc
- return stringy
-
-
- def display_name(self):
- stringy = ""
- if self.dataset and self.name:
- desc = self.dataset.get_desc()
- #desc = self.handle_pca(desc)
- if desc:
- #desc = self.handle_pca(desc)
- #stringy = desc
- #if desc.__contains__('PCA'):
- # desc = desc[desc.rindex(':')+1:].strip()
- #else:
- # desc = desc[:desc.index('entered')].strip()
- #desc = self.handle_pca(desc)
- stringy = "%s::%s" % (self.dataset, desc)
- else:
- stringy = "%s::%s" % (self.dataset, self.name)
- if self.cellid:
- stringy += "::" + self.cellid
- else:
- stringy = self.description
-
- return stringy
-
-
- #def __str__(self):
- # #return "%s %s" % (self.getName(), self.group)
- # return self.getName()
- #__str__ = getName
- #__repr__ = __str__
-
- def export_data(self, samplelist, the_type="val"):
- """
- export data according to samplelist
- mostly used in calculating correlation
-
- """
- result = []
- for sample in samplelist:
- if self.data.has_key(sample):
- if the_type=='val':
- result.append(self.data[sample].val)
- elif the_type=='var':
- result.append(self.data[sample].var)
- elif the_type=='N':
- result.append(self.data[sample].N)
- else:
- raise KeyError, `the_type`+' the_type is incorrect.'
- else:
- result.append(None)
- return result
-
def export_informative(self, include_variance=0):
"""
export informative sample
@@ -179,19 +99,6 @@ class GeneralTrait(object):
sample_aliases.append(sample_data.name2)
return samples, vals, the_vars, sample_aliases
-
- @property
- def name_header_fmt(self):
- '''Return a human-readable name for use in page header'''
- if self.dataset.type == 'ProbeSet':
- return self.symbol
- elif self.dataset.type == 'Geno':
- return self.name
- elif self.dataset.type == 'Publish':
- return self.post_publication_abbreviation
- else:
- return "unnamed"
-
@property
def description_fmt(self):
'''Return a text formated description'''
@@ -200,6 +107,8 @@ class GeneralTrait(object):
formatted = self.description
if self.probe_target_description:
formatted += "; " + self.probe_target_description
+ else:
+ formatted = "Not available"
elif self.dataset.type == 'Publish':
if self.confidential:
formatted = self.pre_publication_description
@@ -212,11 +121,36 @@ class GeneralTrait(object):
@property
def alias_fmt(self):
'''Return a text formatted alias'''
+
+ alias = 'Not available'
if self.alias:
alias = string.replace(self.alias, ";", " ")
alias = string.join(string.split(alias), ", ")
- else:
- alias = 'Not available'
+
+ return alias
+
+ @property
+ def wikidata_alias_fmt(self):
+ '''Return a text formatted alias'''
+
+ alias = 'Not available'
+ if self.symbol:
+ human_response = requests.get("http://gn2.genenetwork.org/gn3/gene/aliases/" + self.symbol.upper())
+ mouse_response = requests.get("http://gn2.genenetwork.org/gn3/gene/aliases/" + self.symbol.capitalize())
+ other_response = requests.get("http://gn2.genenetwork.org/gn3/gene/aliases/" + self.symbol.lower())
+
+ if human_response and mouse_response and other_response:
+ alias_list = json.loads(human_response.content) + json.loads(mouse_response.content) + json.loads(other_response.content)
+
+ filtered_aliases = []
+ seen = set()
+ for item in alias_list:
+ if item in seen:
+ continue
+ else:
+ filtered_aliases.append(item)
+ seen.add(item)
+ alias = "; ".join(filtered_aliases)
return alias
@@ -244,60 +178,33 @@ class GeneralTrait(object):
fmt += (' on the minus strand ')
return fmt
-
-# In ProbeSet, there are maybe several annotations match one sequence
-# so we need use sequence(BlatSeq) as the identification, when we update
-# one annotation, we update the others who match the sequence also.
-#
-# Hongqiang Li, 3/3/2008
-def getSequence(trait, dataset_name):
- dataset = create_dataset(dataset_name)
-
- if dataset.type == 'ProbeSet':
- results = g.db.execute('''
- SELECT
- ProbeSet.BlatSeq
- FROM
- ProbeSet, ProbeSetFreeze, ProbeSetXRef
- WHERE
- ProbeSet.Id=ProbeSetXRef.ProbeSetId and
- ProbeSetFreeze.Id = ProbeSetXRef.ProbSetFreezeId and
- ProbeSet.Name = %s
- ProbeSetFreeze.Name = %s
- ''', trait.name, dataset.name).fetchone()
-
- return results[0]
def retrieve_sample_data(trait, dataset, samplelist=None):
if samplelist == None:
samplelist = []
- results = dataset.retrieve_sample_data(trait.name)
+ if dataset.type == "Temp":
+ results = Redis.get(trait.name).split()
+ else:
+ results = dataset.retrieve_sample_data(trait.name)
# Todo: is this necessary? If not remove
trait.data.clear()
- all_samples_ordered = dataset.group.all_samples_ordered()
-
if results:
- for item in results:
- name, value, variance, num_cases, name2 = item
- if not samplelist or (samplelist and name in samplelist):
- trait.data[name] = webqtlCaseData(*item) #name, value, variance, num_cases)
-
- return trait
-
-def convert_location_to_value(chromosome, mb):
- try:
- location_value = int(chromosome)*1000 + float(mb)
- except ValueError:
- if chromosome.upper() == 'X':
- location_value = 20*1000 + float(mb)
+ if dataset.type == "Temp":
+ all_samples_ordered = dataset.group.all_samples_ordered()
+ for i, item in enumerate(results):
+ try:
+ trait.data[all_samples_ordered[i]] = webqtlCaseData(all_samples_ordered[i], float(item))
+ except:
+ pass
else:
- location_value = (ord(str(chromosome).upper()[0])*1000 +
- float(mb))
-
- return location_value
+ for item in results:
+ name, value, variance, num_cases, name2 = item
+ if not samplelist or (samplelist and name in samplelist):
+ trait.data[name] = webqtlCaseData(*item) #name, value, variance, num_cases)
+ return trait
@app.route("/trait/get_sample_data")
def get_sample_data():
@@ -307,25 +214,37 @@ def get_sample_data():
trait_ob = GeneralTrait(name=trait, dataset_name=dataset)
- return json.dumps([trait, {key: value.value for key, value in trait_ob.data.iteritems() }])
-
- #jsonable_sample_data = {}
- #for sample in trait_ob.data.iteritems():
- # jsonable_sample_data[sample] = trait_ob.data[sample].value
- #
- #return jsonable_sample_data
+ trait_dict = {}
+ trait_dict['name'] = trait
+ trait_dict['db'] = dataset
+ trait_dict['type'] = trait_ob.dataset.type
+ trait_dict['group'] = trait_ob.dataset.group.name
+ trait_dict['tissue'] = trait_ob.dataset.tissue
+ trait_dict['species'] = trait_ob.dataset.group.species
+ trait_dict['url'] = url_for('show_trait_page', trait_id = trait, dataset = dataset)
+ trait_dict['description'] = trait_ob.description_display
+ if trait_ob.dataset.type == "ProbeSet":
+ trait_dict['symbol'] = trait_ob.symbol
+ trait_dict['location'] = trait_ob.location_repr
+ elif trait_ob.dataset.type == "Publish":
+ if trait_ob.pubmed_id:
+ trait_dict['pubmed_link'] = trait_ob.pubmed_link
+ trait_dict['pubmed_text'] = trait_ob.pubmed_text
+
+ return json.dumps([trait_dict, {key: value.value for key, value in trait_ob.data.iteritems() }])
-def jsonable(trait, dataset_name):
+def jsonable(trait):
"""Return a dict suitable for using as json
Actual turning into json doesn't happen here though"""
- dataset = create_dataset(dataset_name)
+ dataset = create_dataset(dataset_name = trait.dataset.name, dataset_type = trait.dataset.type, group_name = trait.dataset.group.name)
if dataset.type == "ProbeSet":
return dict(name=trait.name,
symbol=trait.symbol,
dataset=dataset.name,
+ dataset_name = dataset.shortname,
description=trait.description_display,
mean=trait.mean,
location=trait.location_repr,
@@ -337,7 +256,9 @@ def jsonable(trait, dataset_name):
if trait.pubmed_id:
return dict(name=trait.name,
dataset=dataset.name,
+ dataset_name = dataset.shortname,
description=trait.description_display,
+ abbreviation=trait.abbreviation,
authors=trait.authors,
pubmed_text=trait.pubmed_text,
pubmed_link=trait.pubmed_link,
@@ -348,7 +269,9 @@ def jsonable(trait, dataset_name):
else:
return dict(name=trait.name,
dataset=dataset.name,
+ dataset_name = dataset.shortname,
description=trait.description_display,
+ abbreviation=trait.abbreviation,
authors=trait.authors,
pubmed_text=trait.pubmed_text,
lrs_score=trait.LRS_score_repr,
@@ -358,6 +281,7 @@ def jsonable(trait, dataset_name):
elif dataset.type == "Geno":
return dict(name=trait.name,
dataset=dataset.name,
+ dataset_name = dataset.shortname,
location=trait.location_repr
)
else:
@@ -379,7 +303,7 @@ def jsonable_table_row(trait, dataset_name, index):
additive = "N/A"
else:
additive = "%.3f" % round(float(trait.additive), 2)
- return ['<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + user_manager.data_hmac('{}:{}'.format(str(trait.name), dataset.name)) + '">',
+ return ['<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + hmac.data_hmac('{}:{}'.format(str(trait.name), dataset.name)) + '">',
index,
'<a href="/show_trait?trait_id='+str(trait.name)+'&dataset='+dataset.name+'">'+str(trait.name)+'</a>',
trait.symbol,
@@ -395,7 +319,7 @@ def jsonable_table_row(trait, dataset_name, index):
else:
additive = "%.2f" % round(float(trait.additive), 2)
if trait.pubmed_id:
- return ['<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + user_manager.data_hmac('{}:{}'.format(str(trait.name), dataset.name)) + '">',
+ return ['<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + hmac.data_hmac('{}:{}'.format(str(trait.name), dataset.name)) + '">',
index,
'<a href="/show_trait?trait_id='+str(trait.name)+'&dataset='+dataset.name+'">'+str(trait.name)+'</a>',
trait.description_display,
@@ -405,7 +329,7 @@ def jsonable_table_row(trait, dataset_name, index):
trait.LRS_location_repr,
additive]
else:
- return ['<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + user_manager.data_hmac('{}:{}'.format(str(trait.name), dataset.name)) + '">',
+ return ['<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + hmac.data_hmac('{}:{}'.format(str(trait.name), dataset.name)) + '">',
index,
'<a href="/show_trait?trait_id='+str(trait.name)+'&dataset='+dataset.name+'">'+str(trait.name)+'</a>',
trait.description_display,
@@ -415,7 +339,7 @@ def jsonable_table_row(trait, dataset_name, index):
trait.LRS_location_repr,
additive]
elif dataset.type == "Geno":
- return ['<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + user_manager.data_hmac('{}:{}'.format(str(trait.name), dataset.name)) + '">',
+ return ['<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + hmac.data_hmac('{}:{}'.format(str(trait.name), dataset.name)) + '">',
index,
'<a href="/show_trait?trait_id='+str(trait.name)+'&dataset='+dataset.name+'">'+str(trait.name)+'</a>',
trait.location_repr]
@@ -428,21 +352,22 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
if dataset.type == 'Publish':
query = """
SELECT
- PublishXRef.Id, Publication.PubMed_ID,
+ PublishXRef.Id, InbredSet.InbredSetCode, Publication.PubMed_ID,
Phenotype.Pre_publication_description, Phenotype.Post_publication_description, Phenotype.Original_description,
- Phenotype.Pre_publication_abbreviation, Phenotype.Post_publication_abbreviation,
+ Phenotype.Pre_publication_abbreviation, Phenotype.Post_publication_abbreviation, PublishXRef.mean,
Phenotype.Lab_code, Phenotype.Submitter, Phenotype.Owner, Phenotype.Authorized_Users,
Publication.Authors, Publication.Title, Publication.Abstract,
Publication.Journal, Publication.Volume, Publication.Pages,
Publication.Month, Publication.Year, PublishXRef.Sequence,
Phenotype.Units, PublishXRef.comments
FROM
- PublishXRef, Publication, Phenotype, PublishFreeze
+ PublishXRef, Publication, Phenotype, PublishFreeze, InbredSet
WHERE
PublishXRef.Id = %s AND
Phenotype.Id = PublishXRef.PhenotypeId AND
Publication.Id = PublishXRef.PublicationId AND
PublishXRef.InbredSetId = PublishFreeze.InbredSetId AND
+ PublishXRef.InbredSetId = InbredSet.Id AND
PublishFreeze.Id = %s
""" % (trait.name, dataset.id)
@@ -492,17 +417,25 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
trait_info = g.db.execute(query,
(string.join(dataset.display_fields,','),
dataset.type, trait.name)).fetchone()
+
if trait_info:
trait.haveinfo = True
#XZ: assign SQL query result to trait attributes.
for i, field in enumerate(dataset.display_fields):
holder = trait_info[i]
+ # if isinstance(trait_info[i], basestring):
+ # logger.debug("HOLDER:", holder)
+ # logger.debug("HOLDER2:", holder.decode(encoding='latin1'))
+ # holder = unicode(trait_info[i], "utf-8", "ignore")
if isinstance(trait_info[i], basestring):
- holder = unicode(trait_info[i], "utf-8", "ignore")
+ holder = holder.encode('latin1')
setattr(trait, field, holder)
if dataset.type == 'Publish':
+ if trait.group_code:
+ trait.display_name = trait.group_code + "_" + str(trait.name)
+
trait.confidential = 0
if trait.pre_publication_description and not trait.pubmed_id:
trait.confidential = 1
@@ -513,6 +446,7 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
#phenotype traits, then display the pre-publication description instead
#of the post-publication description
if trait.confidential:
+ trait.abbreviation = trait.pre_publication_abbreviation
trait.description_display = trait.pre_publication_description
#if not webqtlUtil.hasAccessToConfidentialPhenotypeTrait(
@@ -522,11 +456,16 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
#
# description = self.pre_publication_description
else:
+ trait.abbreviation = trait.post_publication_abbreviation
if description:
trait.description_display = description.strip()
else:
trait.description_display = ""
+ trait.abbreviation = unicode(str(trait.abbreviation).strip(codecs.BOM_UTF8), 'utf-8', errors="replace")
+ trait.description_display = unicode(str(trait.description_display).strip(codecs.BOM_UTF8), 'utf-8', errors="replace")
+ trait.authors = unicode(str(trait.authors).strip(codecs.BOM_UTF8), 'utf-8', errors="replace")
+
if not trait.year.isdigit():
trait.pubmed_text = "N/A"
else:
@@ -535,38 +474,7 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
if trait.pubmed_id:
trait.pubmed_link = webqtlConfig.PUBMEDLINK_URL % trait.pubmed_id
-
- trait.homologeneid = None
if dataset.type == 'ProbeSet' and dataset.group:
- if trait.geneid:
- #XZ, 05/26/2010: From time to time, this query get error message because some geneid values in database are not number.
- #XZ: So I have to test if geneid is number before execute the query.
- #XZ: The geneid values in database should be cleaned up.
- #try:
- # float(self.geneid)
- # geneidIsNumber = True
- #except ValueError:
- # geneidIsNumber = False
- #if geneidIsNumber:
- query = """
- SELECT
- HomologeneId
- FROM
- Homologene, Species, InbredSet
- WHERE
- Homologene.GeneId ='%s' AND
- InbredSet.Name = '%s' AND
- InbredSet.SpeciesId = Species.Id AND
- Species.TaxonomyId = Homologene.TaxonomyId
- """ % (escape(str(trait.geneid)), escape(dataset.group.name))
- logger.sql(query)
- result = g.db.execute(query).fetchone()
- #else:
- # result = None
-
- if result:
- trait.homologeneid = result[0]
-
description_string = unicode(str(trait.description).strip(codecs.BOM_UTF8), 'utf-8')
target_string = unicode(str(trait.probe_target_description).strip(codecs.BOM_UTF8), 'utf-8')
@@ -582,47 +490,22 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
# Save it for the jinja2 template
trait.description_display = description_display
- #XZ: trait_location_value is used for sorting
trait.location_repr = 'N/A'
- trait.location_value = 1000000
-
if trait.chr and trait.mb:
- #Checks if the chromosome number can be cast to an int (i.e. isn't "X" or "Y")
- #This is so we can convert the location to a number used for sorting
- trait_location_value = convert_location_to_value(trait.chr, trait.mb)
- #try:
- # trait_location_value = int(self.chr)*1000 + self.mb
- #except ValueError:
- # if self.chr.upper() == 'X':
- # trait_location_value = 20*1000 + self.mb
- # else:
- # trait_location_value = (ord(str(self.chr).upper()[0])*1000 +
- # self.mb)
-
- #ZS: Put this in function currently called "convert_location_to_value"
trait.location_repr = 'Chr%s: %.6f' % (trait.chr, float(trait.mb))
- trait.location_value = trait_location_value
elif dataset.type == "Geno":
trait.location_repr = 'N/A'
- trait.location_value = 1000000
-
if trait.chr and trait.mb:
- #Checks if the chromosome number can be cast to an int (i.e. isn't "X" or "Y")
- #This is so we can convert the location to a number used for sorting
- trait_location_value = convert_location_to_value(trait.chr, trait.mb)
-
- #ZS: Put this in function currently called "convert_location_to_value"
trait.location_repr = 'Chr%s: %.6f' % (trait.chr, float(trait.mb))
- trait.location_value = trait_location_value
if get_qtl_info:
#LRS and its location
trait.LRS_score_repr = "N/A"
- trait.LRS_score_value = 0
trait.LRS_location_repr = "N/A"
- trait.LRS_location_value = 1000000
+ trait.locus = trait.locus_chr = trait.locus_mb = trait.lrs = trait.pvalue = trait.additive = ""
if dataset.type == 'ProbeSet' and not trait.cellid:
+ trait.mean = ""
query = """
SELECT
ProbeSetXRef.Locus, ProbeSetXRef.LRS, ProbeSetXRef.pValue, ProbeSetXRef.mean, ProbeSetXRef.additive
@@ -653,9 +536,6 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
trait.locus = trait.locus_chr = trait.locus_mb = trait.additive = ""
else:
trait.locus = trait.locus_chr = trait.locus_mb = trait.additive = ""
- else:
- trait.locus = trait.locus_chr = trait.locus_mb = trait.lrs = trait.pvalue = trait.mean = trait.additive = ""
-
if dataset.type == 'Publish':
query = """
@@ -692,19 +572,9 @@ def retrieve_trait_info(trait, dataset, get_qtl_info=False):
trait.locus = trait.lrs = trait.additive = ""
if (dataset.type == 'Publish' or dataset.type == "ProbeSet") and trait.locus_chr != "" and trait.locus_mb != "":
- #XZ: LRS_location_value is used for sorting
- try:
- LRS_location_value = int(trait.locus_chr)*1000 + float(trait.locus_mb)
- except:
- if trait.locus_chr.upper() == 'X':
- LRS_location_value = 20*1000 + float(trait.locus_mb)
- else:
- LRS_location_value = ord(str(trait.locus_chr).upper()[0])*1000 + float(trait.locus_mb)
-
trait.LRS_location_repr = LRS_location_repr = 'Chr%s: %.6f' % (trait.locus_chr, float(trait.locus_mb))
if trait.lrs != "":
trait.LRS_score_repr = LRS_score_repr = '%3.1f' % trait.lrs
- trait.LRS_score_value = LRS_score_value = trait.lrs
else:
raise KeyError, `trait.name`+' information is not found in the database.'
diff --git a/wqflask/base/trait_collection.py b/wqflask/base/trait_collection.py
deleted file mode 100644
index d388a3af..00000000
--- a/wqflask/base/trait_collection.py
+++ /dev/null
@@ -1,53 +0,0 @@
-class TraitCollection(object):
-
- def __init__(self, is_anon=False):
- self.is_anon = is_anon
-
-
- @app.route("/collections/remove", methods=('POST',))
- def remove_traits():
- if is_anon:
- AnonCollection.remove_traits()
- else:
- UserCollection.remove_traits()
-
- params = request.form
- print("params are:", params)
- uc_id = params['uc_id']
- uc = model.UserCollection.query.get(uc_id)
- traits_to_remove = params.getlist('traits[]')
- print("traits_to_remove are:", traits_to_remove)
- traits_to_remove = process_traits(traits_to_remove)
- print("\n\n after processing, traits_to_remove:", traits_to_remove)
- all_traits = uc.members_as_set()
- print(" all_traits:", all_traits)
- members_now = all_traits - traits_to_remove
- print(" members_now:", members_now)
- print("Went from {} to {} members in set.".format(len(all_traits), len(members_now)))
- uc.members = json.dumps(list(members_now))
- uc.changed_timestamp = datetime.datetime.utcnow()
- db_session.commit()
-
- # We need to return something so we'll return this...maybe in the future
- # we can use it to check the results
- return str(len(members_now))
-
- def __init__(self, anon_id)
- self.anon_key = anon_key
- self.collection_members = Redis.smembers(self.anon_id)
- print("self.collection_members is:", self.collection_members)
- self.num_members = len(self.collection_members)
-
-
- @app.route("/collections/remove", methods=('POST',))
- def remove_traits(traits_to_remove):
- print("traits_to_remove:", traits_to_remove)
- for trait in traits_to_remove:
- Redis.srem(self.anon_id, trait)
- members_now = self.collection_members - traits_to_remove
- print("members_now:", members_now)
- print("Went from {} to {} members in set.".format(len(self.collection_members), len(members_now)))
-
- # We need to return something so we'll return this...maybe in the future
- # we can use it to check the results
- return str(len(members_now))
diff --git a/wqflask/base/webqtlCaseData.py b/wqflask/base/webqtlCaseData.py
index 845a7224..d8487f01 100644
--- a/wqflask/base/webqtlCaseData.py
+++ b/wqflask/base/webqtlCaseData.py
@@ -44,12 +44,12 @@ class webqtlCaseData(object):
def __repr__(self):
str = "<webqtlCaseData> "
- if self.value:
+ if self.value != None:
str += "value=%2.3f" % self.value
- if self.variance:
+ if self.variance != None:
str += " variance=%2.3f" % self.variance
if self.num_cases:
- str += " ndata=%d" % self.num_cases
+ str += " ndata=%s" % self.num_cases
if self.name:
str += " name=%s" % self.name
if self.name2:
@@ -66,14 +66,21 @@ class webqtlCaseData(object):
@property
def display_value(self):
- if self.value:
+ if self.value != None:
return "%2.3f" % self.value
else:
return "x"
@property
def display_variance(self):
- if self.variance:
+ if self.variance != None:
return "%2.3f" % self.variance
else:
return "x"
+
+ @property
+ def display_num_cases(self):
+ if self.num_cases != None:
+ return "%s" % self.num_cases
+ else:
+ return "x"
diff --git a/wqflask/base/webqtlConfig.py b/wqflask/base/webqtlConfig.py
index e5f10edf..018d5d54 100644
--- a/wqflask/base/webqtlConfig.py
+++ b/wqflask/base/webqtlConfig.py
@@ -20,45 +20,44 @@ USERDICT = {'guest':1,'user':2, 'admin':3, 'root':4}
#minimum number of informative strains
KMININFORMATIVE = 5
-#maximum number of traits for interval mapping
-MULTIPLEMAPPINGLIMIT = 11
-
-#maximum number of traits for correlation
-MAXCORR = 100
-
#Daily download limit from one IP
DAILYMAXIMUM = 1000
#maximum LRS value
MAXLRS = 460.0
-#temporary data life span
-MAXLIFE = 86400
-
#MINIMUM Database public value
PUBLICTHRESH = 0
-#NBCI address
-NCBI_LOCUSID = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids=%s"
-UCSC_REFSEQ = "http://genome.cse.ucsc.edu/cgi-bin/hgGene?db=%s&hgg_gene=%s&hgg_chrom=chr%s&hgg_start=%s&hgg_end=%s"
-GENBANK_ID = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=Nucleotide&cmd=search&doptcmdl=DocSum&term=%s"
-OMIM_ID = "http://www.ncbi.nlm.nih.gov/omim/%s"
-UNIGEN_ID = "http://www.ncbi.nlm.nih.gov/UniGene/clust.cgi?ORG=%s&CID=%s";
-HOMOLOGENE_ID = "http://www.ncbi.nlm.nih.gov/sites/entrez?Db=homologene&Cmd=DetailsSearch&Term=%s"
+#EXTERNAL LINK ADDRESSES
PUBMEDLINK_URL = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids=%s&dopt=Abstract"
-UCSC_POS = "http://genome.ucsc.edu/cgi-bin/hgTracks?clade=mammal&org=%s&db=%s&position=chr%s:%s-%s&pix=800&Submit=submit"
UCSC_BLAT = 'http://genome.ucsc.edu/cgi-bin/hgBlat?org=%s&db=%s&type=0&sort=0&output=0&userSeq=%s'
UTHSC_BLAT = 'http://ucscbrowser.genenetwork.org/cgi-bin/hgBlat?org=%s&db=%s&type=0&sort=0&output=0&userSeq=%s'
-UCSC_GENOME = "http://genome.ucsc.edu/cgi-bin/hgTracks?db=%s&position=chr%s:%d-%d&hgt.customText=http://web2qtl.utmem.edu:88/snp/chr%s"
-ENSEMBLE_BLAT = 'http://www.ensembl.org/Mus_musculus/featureview?type=AffyProbe&id=%s'
-DBSNP = 'http://www.ncbi.nlm.nih.gov/SNP/snp_ref.cgi?type=rs&rs=%s'
-UCSC_RUDI_TRACK_URL = " http://genome.cse.ucsc.edu/cgi-bin/hgTracks?org=%s&db=%s&hgt.customText=http://gbic.biol.rug.nl/~ralberts/tracks/%s/%s"
-GENOMEBROWSER_URL="http://ucscbrowser.genenetwork.org/cgi-bin/hgTracks?clade=mammal&org=Mouse&db=mm9&position=%s&hgt.suggest=&pix=800&Submit=submit"
-ENSEMBLETRANSCRIPT_URL="http://useast.ensembl.org/Mus_musculus/Lucene/Details?species=Mus_musculus;idx=Transcript;end=1;q=%s"
-
-# The following paths are no longer in use!
-# HTMLPATH is replaced by GENODIR
-# IMGDIR is replaced by GENERATED_IMAGE_DIR
+UTHSC_BLAT2 = 'http://ucscbrowserbeta.genenetwork.org/cgi-bin/hgBlat?org=%s&db=%s&type=0&sort=0&output=0&userSeq=%s'
+GENOMEBROWSER_URL="https://genome.ucsc.edu/cgi-bin/hgTracks?db=%s&position=%s"
+NCBI_LOCUSID = "http://www.ncbi.nlm.nih.gov/gene?cmd=Retrieve&dopt=Graphics&list_uids=%s"
+GENBANK_ID = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=Nucleotide&cmd=search&doptcmdl=DocSum&term=%s"
+OMIM_ID = "http://www.ncbi.nlm.nih.gov/omim/%s"
+UNIGEN_ID = "http://www.ncbi.nlm.nih.gov/UniGene/clust.cgi?ORG=%s&CID=%s"
+HOMOLOGENE_ID = "http://www.ncbi.nlm.nih.gov/homologene/?term=%s"
+GENOTATION_URL = "http://www.genotation.org/Getd2g.pl?gene_list=%s"
+GTEX_URL = "https://www.gtexportal.org/home/gene/%s"
+GENEBRIDGE_URL = "https://www.systems-genetics.org/modules_by_gene/%s?organism=%s"
+GENEMANIA_URL = "https://genemania.org/search/%s/%s"
+UCSC_REFSEQ = "http://genome.cse.ucsc.edu/cgi-bin/hgTracks?db=%s&hgg_gene=%s&hgg_chrom=chr%s&hgg_start=%s&hgg_end=%s"
+BIOGPS_URL = "http://biogps.org/?org=%s#goto=genereport&id=%s"
+STRING_URL = "http://string-db.org/newstring_cgi/show_network_section.pl?identifier=%s"
+PANTHER_URL = "http://www.pantherdb.org/genes/geneList.do?searchType=basic&fieldName=all&organism=all&listType=1&fieldValue=%s"
+GEMMA_URL = "http://www.chibi.ubc.ca/Gemma/gene/showGene.html?ncbiid=%s"
+ABA_URL = "http://mouse.brain-map.org/search/show?search_type=gene&search_term=%s"
+EBIGWAS_URL = "https://www.ebi.ac.uk/gwas/search?query=%s"
+WIKI_PI_URL = "http://severus.dbmi.pitt.edu/wiki-pi/index.php/search?q=%s"
+ENSEMBLETRANSCRIPT_URL="http://useast.ensembl.org/Mus_musculus/Transcript/Idhistory?t=%s"
+DBSNP = 'http://ensembl.org/Mus_musculus/Variation/Population?v=%s'
+PROTEIN_ATLAS_URL = "http://www.proteinatlas.org/search/%s"
+OPEN_TARGETS_URL = "https://genetics.opentargets.org/gene/%s"
+UNIPROT_URL = "https://www.uniprot.org/uniprot/%s"
+RGD_URL = "https://rgd.mcw.edu/rgdweb/elasticResults.html?term=%s&category=Gene&species=%s"
# Temporary storage (note that this TMPDIR can be set as an
# environment variable - use utility.tools.TEMPDIR when you
@@ -70,8 +69,8 @@ assert_writable_dir(TMPDIR)
CACHEDIR = mk_dir(TMPDIR+'/cache/')
# We can no longer write into the git tree:
-GENERATED_IMAGE_DIR = mk_dir(TMPDIR+'/generated/')
-GENERATED_TEXT_DIR = mk_dir(TMPDIR+'/generated_text/')
+GENERATED_IMAGE_DIR = mk_dir(TMPDIR+'generated/')
+GENERATED_TEXT_DIR = mk_dir(TMPDIR+'generated_text/')
# Make sure we have permissions to access these
assert_writable_dir(CACHEDIR)
@@ -81,6 +80,7 @@ assert_writable_dir(GENERATED_TEXT_DIR)
# Flat file directories
GENODIR = flat_files('genotype')+'/'
assert_dir(GENODIR)
+assert_dir(GENODIR+'bimbam') # for gemma
# JSON genotypes are OBSOLETE
JSON_GENODIR = flat_files('genotype/json')+'/'
@@ -92,4 +92,3 @@ if not valid_path(JSON_GENODIR):
PORTADDR = "http://50.16.251.170"
INFOPAGEHREF = '/dbdoc/%s.html'
CGIDIR = '/webqtl/' #XZ: The variable name 'CGIDIR' should be changed to 'PYTHONDIR'
-SCRIPTFILE = 'main.py'
diff --git a/wqflask/base/webqtlFormData.py b/wqflask/base/webqtlFormData.py
deleted file mode 100644
index 10251756..00000000
--- a/wqflask/base/webqtlFormData.py
+++ /dev/null
@@ -1,352 +0,0 @@
-# Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
-#
-# This program is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Affero General Public License
-# as published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the GNU Affero General Public License for more details.
-#
-# This program is available from Source Forge: at GeneNetwork Project
-# (sourceforge.net/projects/genenetwork/).
-#
-# Contact Drs. Robert W. Williams and Xiaodong Zhou (2010)
-# at rwilliams@uthsc.edu and xzhou15@uthsc.edu
-#
-#
-#
-# This module is used by GeneNetwork project (www.genenetwork.org)
-#
-# Created by GeneNetwork Core Team 2010/08/10
-#
-# Last updated by GeneNetwork Core Team 2010/10/20
-
-#from mod_python import Cookie
-
-from __future__ import print_function
-from pprint import pformat as pf
-
-import string
-import os
-
-import reaper
-
-import webqtlConfig
-from webqtlCaseData import webqtlCaseData
-from utility import webqtlUtil
-
-class webqtlFormData(object):
- 'Represents data from a WebQTL form page, needed to generate the next page'
-
- attrs = ('formID','group','genotype','samplelist','allsamplelist', 'display_variance'
- 'suggestive','significance','submitID','identification', 'enablevariance',
- 'nperm','nboot','email','incparentsf1','genotype_1','genotype_2','traitInfo')
-
- #XZ: Attention! All attribute values must be picklable!
-
- def __init__(self,
- start_vars = None,
- req = None,
- mod_python_session=None,
- FieldStorage_formdata=None):
- # Todo: rework this whole thing
- print("in webqtlFormData start_vars are:", pf(start_vars))
- for item in webqtlFormData.attrs:
- self.__dict__[item] = None
-
- #ZS: This is only used in DataEditingPage.py (as far as I know)
- self.varianceDispName = None
-
- for item in start_vars:
- self.__dict__[item] = start_vars[item]
- print(" Now self.dict is:", pf(self.__dict__))
-
- #Todo: This can't be good below...rework
- try:
- self.remote_ip = req.connection.remote_ip
- except:
- self.remote_ip = '1.2.3.4'
-
- if req and req.headers_in.has_key('referer'):
- self.refURL = req.headers_in['referer']
- else:
- self.refURL = None
-
- # For now let's just comment all this out - Sam
-
- #self.cookies = cookieData.cookieData(Cookie.get_cookies(req)) #XZ: dictionary type. To hold values transfered from mod_python Cookie.
- #
- ##XZ: dictionary type. To hold values transfered from mod_python Session object. We assume that it is always picklable.
- #self.input_session_data = sessionData.sessionData( mod_python_session )
- #
- ##XZ: FieldStorage_formdata may contain item that can't be pickled. Must convert to picklable data.
- #self.formdata = cgiData( FieldStorage_formdata )
- #
- ##get Form ID
- #self.formID = self.formdata.getfirst('FormID')
- #
- ##get rest of the attributes
- #if self.formID:
- # for item in self.attrs:
- # value = self.formdata.getfirst(item)
- # if value != None:
- # setattr(self,item,string.strip(value))
-
- self.ppolar = None
- self.mpolar = None
-
- print("[yellow] self.group is:", self.group)
- if self.group:
- #try:
- # # NL, 07/27/2010. ParInfo has been moved from webqtlForm.py to webqtlUtil.py;
- _f1, _f12, self.mpolar, self.ppolar = webqtlUtil.ParInfo[self.group]
- #except:
- # f1 = f12 = self.mpolar = self.ppolar = None
-
-
- def set_number(stringy):
- return int(stringy) if stringy else 2000 # Rob asked to change the default value to 2000
-
- self.nperm = set_number(self.nperm)
- self.nboot = set_number(self.nboot)
-
-
- #if self.allsamplelist:
- # self.allsamplelist = map(string.strip, string.split(self.allsamplelist))
- print("self.allsamplelist is:", self.allsamplelist)
- if self.allsamplelist:
- self.allsamplelist = self.allsamplelist.split()
- print("now self.allsamplelist is:", self.allsamplelist)
- #self.readGenotype()
- #self.readData()
-
- if self.group == 'BXD300':
- self.group = 'BXD'
-
-
- def __getitem__(self, key):
- print("in __getitem__")
- return self.__dict__[key]
-
- def get(self, key, default=None):
- if key in self.__dict__:
- return self.__dict__[key]
- else:
- return default
-
- def __str__(self):
- rstr = ''
- for item in self.attrs:
- if item != 'genotype':
- rstr += '%s:%s\n' % (item,str(getattr(self,item)))
- return rstr
-
-
- def readGenotype(self):
- '''read genotype from .geno file'''
- if self.group == 'BXD300':
- self.group = 'BXD'
-
- assert self.group, "self.group needs to be set"
-
- #genotype_1 is Dataset Object without parents and f1
- #genotype_2 is Dataset Object with parents and f1 (not for intercross)
-
- self.genotype_1 = reaper.Dataset()
-
- full_filename = locate(self.group + '.geno','genotype')
-
- # reaper barfs on unicode filenames, so here we ensure it's a string
- full_filename = str(full_filename)
- self.genotype_1.read(full_filename)
-
- print("Got to after read")
-
- try:
- # NL, 07/27/2010. ParInfo has been moved from webqtlForm.py to webqtlUtil.py;
- _f1, _f12, _mat, _pat = webqtlUtil.ParInfo[self.group]
- except KeyError:
- _f1 = _f12 = _mat = _pat = None
-
- self.genotype_2 = self.genotype_1
- if self.genotype_1.type == "group" and _mat and _pat:
- self.genotype_2 = self.genotype_1.add(Mat=_mat, Pat=_pat) #, F1=_f1)
-
- #determine default genotype object
- if self.incparentsf1 and self.genotype_1.type != "intercross":
- self.genotype = self.genotype_2
- else:
- self.incparentsf1 = 0
- self.genotype = self.genotype_1
-
- self.samplelist = list(self.genotype.prgy)
- self.f1list = []
- self.parlist = []
-
- if _f1 and _f12:
- self.f1list = [_f1, _f12]
- if _mat and _pat:
- self.parlist = [_mat, _pat]
-
-
- def readData(self, samplelist, incf1=None):
- '''read user input data or from trait data and analysis form'''
-
- if incf1 == None:
- incf1 = []
-
- if not self.genotype:
- self.readGenotype()
- if not samplelist:
- if incf1:
- samplelist = self.f1list + self.samplelist
- else:
- samplelist = self.samplelist
-
- #print("before traitfiledata self.traitfile is:", pf(self.traitfile))
-
- traitfiledata = getattr(self, "traitfile", None)
- traitpastedata = getattr(self, "traitpaste", None)
- variancefiledata = getattr(self, "variancefile", None)
- variancepastedata = getattr(self, "variancepaste", None)
- Nfiledata = getattr(self, "Nfile", None)
-
- #### Todo: Rewrite below when we get to someone submitting their own trait #####
-
- def to_float(item):
- try:
- return float(item)
- except ValueError:
- return None
-
- print("bottle samplelist is:", samplelist)
- if traitfiledata:
- tt = traitfiledata.split()
- values = map(webqtlUtil.StringAsFloat, tt)
- elif traitpastedata:
- tt = traitpastedata.split()
- values = map(webqtlUtil.StringAsFloat, tt)
- else:
- print("mapping formdataasfloat")
- #values = map(self.FormDataAsFloat, samplelist)
- values = [to_float(getattr(self, key)) for key in samplelist]
- print("rocket values is:", values)
-
-
- if len(values) < len(samplelist):
- values += [None] * (len(samplelist) - len(values))
- elif len(values) > len(samplelist):
- values = values[:len(samplelist)]
- print("now values is:", values)
-
-
- if variancefiledata:
- tt = variancefiledata.split()
- variances = map(webqtlUtil.StringAsFloat, tt)
- elif variancepastedata:
- tt = variancepastedata.split()
- variances = map(webqtlUtil.StringAsFloat, tt)
- else:
- variances = map(self.FormVarianceAsFloat, samplelist)
-
- if len(variances) < len(samplelist):
- variances += [None]*(len(samplelist) - len(variances))
- elif len(variances) > len(samplelist):
- variances = variances[:len(samplelist)]
-
- if Nfiledata:
- tt = string.split(Nfiledata)
- nsamples = map(webqtlUtil.IntAsFloat, tt)
- if len(nsamples) < len(samplelist):
- nsamples += [None]*(len(samplelist) - len(nsamples))
- else:
- nsamples = map(self.FormNAsFloat, samplelist)
-
- ##values, variances, nsamples is obsolete
- self.allTraitData = {}
- for i, _sample in enumerate(samplelist):
- if values[i] != None:
- self.allTraitData[_sample] = webqtlCaseData(
- _sample, values[i], variances[i], nsamples[i])
- print("allTraitData is:", pf(self.allTraitData))
-
-
-
- def informativeStrains(self, samplelist=None, include_variances = None):
- '''if readData was called, use this to output informative samples (sample with values)'''
-
- if not samplelist:
- samplelist = self.samplelist
-
- samples = []
- values = []
- variances = []
-
- #print("self.allTraitData is:", pf(self.allTraitData))
-
- for sample in samplelist:
- if sample in self.allTraitData:
- _val, _var = self.allTraitData[sample].value, self.allTraitData[sample].variance
- if _val != None:
- if include_variances:
- if _var != None:
- samples.append(sample)
- values.append(_val)
- variances.append(_var)
- else:
- samples.append(sample)
- values.append(_val)
- variances.append(None)
-
- return samples, values, variances, len(samples)
-
-
-
- #def FormDataAsFloat(self, key):
- #
- # #try:
- # # return float(self.key)
- # #except:
- # # return None
-
-
- def FormVarianceAsFloat(self, key):
- try:
- return float(self.formdata.getfirst('V' + key))
- except:
- return None
-
- def FormNAsFloat(self, key):
- try:
- return int(self.formdata.getfirst('N' + key))
- except:
- return None
-
- def Sample(self):
- 'Create some dummy data for testing'
- self.group = 'BXD'
- self.incparentsf1 = 'on'
- #self.display = 9.2
- #self.significance = 16.1
- self.readGenotype()
- self.identification = 'BXD : Coat color example by Lu Lu, et al'
- #self.readGenotype()
- #self.genotype.ReadMM('AXBXAforQTL')
- #self.samplelist = map((lambda x, y='': '%s%s' % (y,x)), self.genotype.prgy)
- #self.samplelist.sort()
- self.allTraitData = {'BXD29': webqtlCaseData(3), 'BXD28': webqtlCaseData(2),
- 'BXD25': webqtlCaseData(2), 'BXD24': webqtlCaseData(2), 'BXD27': webqtlCaseData(2),
- 'BXD21': webqtlCaseData(1), 'BXD20': webqtlCaseData(4), 'BXD23': webqtlCaseData(4),
- 'BXD22': webqtlCaseData(3), 'BXD14': webqtlCaseData(4), 'BXD15': webqtlCaseData(2),
- 'BXD16': webqtlCaseData(3), 'BXD11': webqtlCaseData(4), 'BXD12': webqtlCaseData(3),
- 'BXD13': webqtlCaseData(2), 'BXD18': webqtlCaseData(3), 'BXD19': webqtlCaseData(3),
- 'BXD38': webqtlCaseData(3), 'BXD39': webqtlCaseData(3), 'BXD36': webqtlCaseData(2),
- 'BXD34': webqtlCaseData(4), 'BXD35': webqtlCaseData(4), 'BXD32': webqtlCaseData(4),
- 'BXD33': webqtlCaseData(3), 'BXD30': webqtlCaseData(1), 'BXD31': webqtlCaseData(4),
- 'DBA/2J': webqtlCaseData(1), 'BXD8': webqtlCaseData(3), 'BXD9': webqtlCaseData(1),
- 'BXD6': webqtlCaseData(3), 'BXD5': webqtlCaseData(3), 'BXD2': webqtlCaseData(4),
- 'BXD1': webqtlCaseData(1), 'C57BL/6J': webqtlCaseData(4), 'B6D2F1': webqtlCaseData(4),
- 'BXD42': webqtlCaseData(4), 'BXD40': webqtlCaseData(3)}
diff --git a/wqflask/basicStatistics/BasicStatisticsFunctions.py b/wqflask/basicStatistics/BasicStatisticsFunctions.py
deleted file mode 100644
index 1e5646a1..00000000
--- a/wqflask/basicStatistics/BasicStatisticsFunctions.py
+++ /dev/null
@@ -1,207 +0,0 @@
-from __future__ import print_function
-
-#import string
-from math import *
-#import piddle as pid
-#import os
-import traceback
-
-from pprint import pformat as pf
-
-from corestats import Stats
-
-import reaper
-from htmlgen import HTMLgen2 as HT
-
-#from utility import Plot
-from utility import webqtlUtil
-from base import webqtlConfig
-from db import webqtlDatabaseFunction
-
-def basicStatsTable(vals, trait_type=None, cellid=None, heritability=None):
- print("basicStatsTable called - len of vals", len(vals))
- st = {} # This is the dictionary where we'll put everything for the template
- valsOnly = []
- dataXZ = vals[:]
- for i in range(len(dataXZ)):
- valsOnly.append(dataXZ[i][1])
-
- (st['traitmean'],
- st['traitmedian'],
- st['traitvar'],
- st['traitstdev'],
- st['traitsem'],
- st['N']) = reaper.anova(valsOnly) #ZS: Should convert this from reaper to R in the future
-
- #tbl = HT.TableLite(cellpadding=20, cellspacing=0)
- #dataXZ = vals[:]
- dataXZ = sorted(vals, webqtlUtil.cmpOrder)
-
- print("data for stats is:", pf(dataXZ))
- for num, item in enumerate(dataXZ):
- print(" %i - %s" % (num, item))
- print(" length:", len(dataXZ))
-
- st['min'] = dataXZ[0][1]
- st['max'] = dataXZ[-1][1]
-
- numbers = [x[1] for x in dataXZ]
- stats = Stats(numbers)
-
- at75 = stats.percentile(75)
- at25 = stats.percentile(25)
- print("should get a stack")
- traceback.print_stack()
- print("Interquartile:", at75 - at25)
-
- #tbl.append(HT.TR(HT.TD("Statistic",align="left", Class="fs14 fwb ffl b1 cw cbrb", width = 180),
- # HT.TD("Value", align="right", Class="fs14 fwb ffl b1 cw cbrb", width = 60)))
- #tbl.append(HT.TR(HT.TD("N of Samples",align="left", Class="fs13 b1 cbw c222"),
- # HT.TD(N,nowrap="yes", Class="fs13 b1 cbw c222"), align="right"))
- #tbl.append(HT.TR(HT.TD("Mean",align="left", Class="fs13 b1 cbw c222",nowrap="yes"),
- # HT.TD("%2.3f" % traitmean,nowrap="yes", Class="fs13 b1 cbw c222"), align="right"))
- #tbl.append(HT.TR(HT.TD("Median",align="left", Class="fs13 b1 cbw c222",nowrap="yes"),
- # HT.TD("%2.3f" % traitmedian,nowrap="yes", Class="fs13 b1 cbw c222"), align="right"))
- ##tbl.append(HT.TR(HT.TD("Variance",align="left", Class="fs13 b1 cbw c222",nowrap="yes"),
- ## HT.TD("%2.3f" % traitvar,nowrap="yes",align="left", Class="fs13 b1 cbw c222")))
- #tbl.append(HT.TR(HT.TD("Standard Error (SE)",align="left", Class="fs13 b1 cbw c222",nowrap="yes"),
- # HT.TD("%2.3f" % traitsem,nowrap="yes", Class="fs13 b1 cbw c222"), align="right"))
- #tbl.append(HT.TR(HT.TD("Standard Deviation (SD)", align="left", Class="fs13 b1 cbw c222",nowrap="yes"),
- # HT.TD("%2.3f" % traitstdev,nowrap="yes", Class="fs13 b1 cbw c222"), align="right"))
- #tbl.append(HT.TR(HT.TD("Minimum", align="left", Class="fs13 b1 cbw c222",nowrap="yes"),
- # HT.TD("%s" % dataXZ[0][1],nowrap="yes", Class="fs13 b1 cbw c222"), align="right"))
- #tbl.append(HT.TR(HT.TD("Maximum", align="left", Class="fs13 b1 cbw c222",nowrap="yes"),
- # HT.TD("%s" % dataXZ[-1][1],nowrap="yes", Class="fs13 b1 cbw c222"), align="right"))
-
-
-
- if (trait_type != None and trait_type == 'ProbeSet'):
- #tbl.append(HT.TR(HT.TD("Range (log2)",align="left", Class="fs13 b1 cbw c222",nowrap="yes"),
- # HT.TD("%2.3f" % (dataXZ[-1][1]-dataXZ[0][1]),nowrap="yes", Class="fs13 b1 cbw c222"), align="right"))
- #tbl.append(HT.TR(HT.TD(HT.Span("Range (fold)"),align="left", Class="fs13 b1 cbw c222",nowrap="yes"),
- # HT.TD("%2.2f" % pow(2.0,(dataXZ[-1][1]-dataXZ[0][1])), nowrap="yes", Class="fs13 b1 cbw c222"), align="right"))
- #tbl.append(HT.TR(HT.TD(HT.Span(HT.Href(url="/glossary.html#Interquartile", target="_blank", text="Interquartile Range", Class="non_bold")), align="left", Class="fs13 b1 cbw c222",nowrap="yes"),
- # HT.TD("%2.2f" % pow(2.0,(dataXZ[int((N-1)*3.0/4.0)][1]-dataXZ[int((N-1)/4.0)][1])), nowrap="yes", Class="fs13 b1 cbw c222"), align="right"))
- st['range_log2'] = dataXZ[-1][1]-dataXZ[0][1]
- st['range_fold'] = pow(2.0, (dataXZ[-1][1]-dataXZ[0][1]))
- st['interquartile'] = pow(2.0, (dataXZ[int((st['N']-1)*3.0/4.0)][1]-dataXZ[int((st['N']-1)/4.0)][1]))
-
- #XZ, 04/01/2009: don't try to get H2 value for probe.
- if not cellid:
- if heritability:
- # This field needs to still be put into the Jinja2 template
- st['heritability'] = heritability
- #tbl.append(HT.TR(HT.TD(HT.Span("Heritability"),align="center", Class="fs13 b1 cbw c222",nowrap="yes"),HT.TD("%s" % heritability, nowrap="yes",align="center", Class="fs13 b1 cbw c222")))
-
- # Lei Yan
- # 2008/12/19
-
- return st
-
-def plotNormalProbability(vals=None, RISet='', title=None, showstrains=0, specialStrains=[None], size=(750,500)):
-
- dataXZ = vals[:]
- dataXZ.sort(webqtlUtil.cmpOrder)
- dataLabel = []
- dataX = map(lambda X: X[1], dataXZ)
-
- showLabel = showstrains
- if len(dataXZ) > 50:
- showLabel = 0
- for item in dataXZ:
- strainName = webqtlUtil.genShortStrainName(RISet=RISet, input_strainName=item[0])
- dataLabel.append(strainName)
-
- dataY=Plot.U(len(dataX))
- dataZ=map(Plot.inverseCumul,dataY)
- c = pid.PILCanvas(size=(750,500))
- Plot.plotXY(c, dataZ, dataX, dataLabel = dataLabel, XLabel='Expected Z score', connectdot=0, YLabel='Trait value', title=title, specialCases=specialStrains, showLabel = showLabel)
-
- filename= webqtlUtil.genRandStr("nP_")
- c.save(webqtlConfig.GENERATED_IMAGE_DIR+filename, format='gif')
-
- img=HT.Image('/image/'+filename+'.gif',border=0)
-
- return img
-
-def plotBoxPlot(vals):
-
- valsOnly = []
- dataXZ = vals[:]
- for i in range(len(dataXZ)):
- valsOnly.append(dataXZ[i][1])
-
- plotHeight = 320
- plotWidth = 220
- xLeftOffset = 60
- xRightOffset = 40
- yTopOffset = 40
- yBottomOffset = 60
-
- canvasHeight = plotHeight + yTopOffset + yBottomOffset
- canvasWidth = plotWidth + xLeftOffset + xRightOffset
- canvas = pid.PILCanvas(size=(canvasWidth,canvasHeight))
- XXX = [('', valsOnly[:])]
-
- Plot.plotBoxPlot(canvas, XXX, offset=(xLeftOffset, xRightOffset, yTopOffset, yBottomOffset), XLabel= "Trait")
- filename= webqtlUtil.genRandStr("Box_")
- canvas.save(webqtlConfig.GENERATED_IMAGE_DIR+filename, format='gif')
- img=HT.Image('/image/'+filename+'.gif',border=0)
-
- plotLink = HT.Span("More about ", HT.Href(text="Box Plots", url="http://davidmlane.com/hyperstat/A37797.html", target="_blank", Class="fs13"))
-
- return img, plotLink
-
-def plotBarGraph(identification='', RISet='', vals=None, type="name"):
-
- this_identification = "unnamed trait"
- if identification:
- this_identification = identification
-
- if type=="rank":
- dataXZ = vals[:]
- dataXZ.sort(webqtlUtil.cmpOrder)
- title='%s' % this_identification
- else:
- dataXZ = vals[:]
- title='%s' % this_identification
-
- tvals = []
- tnames = []
- tvars = []
- for i in range(len(dataXZ)):
- tvals.append(dataXZ[i][1])
- tnames.append(webqtlUtil.genShortStrainName(RISet=RISet, input_strainName=dataXZ[i][0]))
- tvars.append(dataXZ[i][2])
- nnStrain = len(tnames)
-
- sLabel = 1
-
- ###determine bar width and space width
- if nnStrain < 20:
- sw = 4
- elif nnStrain < 40:
- sw = 3
- else:
- sw = 2
-
- ### 700 is the default plot width minus Xoffsets for 40 strains
- defaultWidth = 650
- if nnStrain > 40:
- defaultWidth += (nnStrain-40)*10
- defaultOffset = 100
- bw = int(0.5+(defaultWidth - (nnStrain-1.0)*sw)/nnStrain)
- if bw < 10:
- bw = 10
-
- plotWidth = (nnStrain-1)*sw + nnStrain*bw + defaultOffset
- plotHeight = 500
- #print [plotWidth, plotHeight, bw, sw, nnStrain]
- c = pid.PILCanvas(size=(plotWidth,plotHeight))
- Plot.plotBarText(c, tvals, tnames, variance=tvars, YLabel='Value', title=title, sLabel = sLabel, barSpace = sw)
-
- filename= webqtlUtil.genRandStr("Bar_")
- c.save(webqtlConfig.GENERATED_IMAGE_DIR+filename, format='gif')
- img=HT.Image('/image/'+filename+'.gif',border=0)
-
- return img
diff --git a/wqflask/db/webqtlDatabaseFunction.py b/wqflask/db/webqtlDatabaseFunction.py
index ba998e91..8a9dc79d 100644
--- a/wqflask/db/webqtlDatabaseFunction.py
+++ b/wqflask/db/webqtlDatabaseFunction.py
@@ -30,14 +30,6 @@ logger = getLogger(__name__ )
#output: cursor instance
#function: connect to database and return cursor instance
###########################################################################
-def getCursor():
- try:
- logger.warning("Creating new MySQLdb cursor (this method is OBSOLETE!)")
- con = MySQLdb.Connect(db=webqtlConfig.DB_NAME, host=webqtlConfig.MYSQL_SERVER, user=webqtlConfig.DB_USER, passwd=webqtlConfig.DB_PASSWD)
- cursor = con.cursor()
- return cursor
- except:
- return None
def retrieve_species(group):
"""Get the species of a group (e.g. returns string "mouse" on "BXD"
diff --git a/wqflask/flask_security/__init__.py b/wqflask/flask_security/__init__.py
deleted file mode 100644
index 81e6c89e..00000000
--- a/wqflask/flask_security/__init__.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- flask.ext.security
- ~~~~~~~~~~~~~~~~~~
-
- Flask-Security is a Flask extension that aims to add quick and simple
- security via Flask-Login, Flask-Principal, Flask-WTF, and passlib.
-
- :copyright: (c) 2012 by Matt Wright.
- :license: MIT, see LICENSE for more details.
-"""
-
-__version__ = '1.6.0'
-
-from .core import Security, RoleMixin, UserMixin, AnonymousUser, current_user
-from .datastore import SQLAlchemyUserDatastore, MongoEngineUserDatastore, PeeweeUserDatastore
-from .decorators import auth_token_required, http_auth_required, \
- login_required, roles_accepted, roles_required
-from .forms import ForgotPasswordForm, LoginForm, RegisterForm, \
- ResetPasswordForm, PasswordlessLoginForm, ConfirmRegisterForm
-from .signals import confirm_instructions_sent, password_reset, \
- reset_password_instructions_sent, user_confirmed, user_registered
-from .utils import login_user, logout_user, url_for_security
-
-print "Using our own flask.ext.security" \ No newline at end of file
diff --git a/wqflask/flask_security/changeable.py b/wqflask/flask_security/changeable.py
deleted file mode 100644
index 4447b655..00000000
--- a/wqflask/flask_security/changeable.py
+++ /dev/null
@@ -1,45 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- flask.ext.security.changeable
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Flask-Security recoverable module
-
- :copyright: (c) 2012 by Matt Wright.
- :author: Eskil Heyn Olsen
- :license: MIT, see LICENSE for more details.
-"""
-
-from flask import current_app as app, request
-from werkzeug.local import LocalProxy
-
-from .signals import password_changed
-from .utils import send_mail, encrypt_password, url_for_security, \
- config_value
-
-
-# Convenient references
-_security = LocalProxy(lambda: app.extensions['security'])
-
-_datastore = LocalProxy(lambda: _security.datastore)
-
-
-def send_password_changed_notice(user):
- """Sends the password changed notice email for the specified user.
-
- :param user: The user to send the notice to
- """
- send_mail(config_value('EMAIL_SUBJECT_PASSWORD_CHANGE_NOTICE'), user.email,
- 'change_notice', user=user)
-
-
-def change_user_password(user, password):
- """Change the specified user's password
-
- :param user: The user to change_password
- :param password: The unencrypted new password
- """
- user.password = encrypt_password(password)
- _datastore.put(user)
- send_password_changed_notice(user)
- password_changed.send(user, app=app._get_current_object())
diff --git a/wqflask/flask_security/confirmable.py b/wqflask/flask_security/confirmable.py
deleted file mode 100644
index a7caf6cd..00000000
--- a/wqflask/flask_security/confirmable.py
+++ /dev/null
@@ -1,83 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- flask.ext.security.confirmable
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Flask-Security confirmable module
-
- :copyright: (c) 2012 by Matt Wright.
- :license: MIT, see LICENSE for more details.
-"""
-
-from datetime import datetime
-
-from flask import current_app as app, request
-from werkzeug.local import LocalProxy
-
-from .utils import send_mail, md5, url_for_security, get_token_status,\
- config_value
-from .signals import user_confirmed, confirm_instructions_sent
-
-
-# Convenient references
-_security = LocalProxy(lambda: app.extensions['security'])
-
-_datastore = LocalProxy(lambda: _security.datastore)
-
-
-def generate_confirmation_link(user):
- token = generate_confirmation_token(user)
- url = url_for_security('confirm_email', token=token)
- return request.url_root[:-1] + url, token
-
-
-def send_confirmation_instructions(user):
- """Sends the confirmation instructions email for the specified user.
-
- :param user: The user to send the instructions to
- :param token: The confirmation token
- """
-
- confirmation_link, token = generate_confirmation_link(user)
-
- send_mail(config_value('EMAIL_SUBJECT_CONFIRM'), user.email,
- 'confirmation_instructions', user=user,
- confirmation_link=confirmation_link)
-
- confirm_instructions_sent.send(user, app=app._get_current_object())
- return token
-
-
-def generate_confirmation_token(user):
- """Generates a unique confirmation token for the specified user.
-
- :param user: The user to work with
- """
- data = [str(user.id), md5(user.email)]
- return _security.confirm_serializer.dumps(data)
-
-
-def requires_confirmation(user):
- """Returns `True` if the user requires confirmation."""
- return _security.confirmable and user.confirmed_at == None
-
-
-def confirm_email_token_status(token):
- """Returns the expired status, invalid status, and user of a confirmation
- token. For example::
-
- expired, invalid, user = confirm_email_token_status('...')
-
- :param token: The confirmation token
- """
- return get_token_status(token, 'confirm', 'CONFIRM_EMAIL')
-
-
-def confirm_user(user):
- """Confirms the specified user
-
- :param user: The user to confirm
- """
- user.confirmed_at = datetime.utcnow()
- _datastore.put(user)
- user_confirmed.send(user, app=app._get_current_object())
diff --git a/wqflask/flask_security/core.py b/wqflask/flask_security/core.py
deleted file mode 100644
index 0f3a231f..00000000
--- a/wqflask/flask_security/core.py
+++ /dev/null
@@ -1,382 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- flask.ext.security.core
- ~~~~~~~~~~~~~~~~~~~~~~~
-
- Flask-Security core module
-
- :copyright: (c) 2012 by Matt Wright.
- :license: MIT, see LICENSE for more details.
-"""
-
-from flask import current_app
-from flask.ext.login import AnonymousUser as AnonymousUserBase, \
- UserMixin as BaseUserMixin, LoginManager, current_user
-from flask.ext.principal import Principal, RoleNeed, UserNeed, Identity, \
- identity_loaded
-from itsdangerous import URLSafeTimedSerializer
-from passlib.context import CryptContext
-from werkzeug.datastructures import ImmutableList
-from werkzeug.local import LocalProxy
-
-from .utils import config_value as cv, get_config, md5, url_for_security
-from .views import create_blueprint
-from .forms import LoginForm, ConfirmRegisterForm, RegisterForm, \
- ForgotPasswordForm, ChangePasswordForm, ResetPasswordForm, \
- SendConfirmationForm, PasswordlessLoginForm
-
-# Convenient references
-_security = LocalProxy(lambda: current_app.extensions['security'])
-
-
-#: Default Flask-Security configuration
-_default_config = {
- 'BLUEPRINT_NAME': 'security',
- 'URL_PREFIX': None,
- 'SUBDOMAIN': None,
- 'FLASH_MESSAGES': True,
- 'PASSWORD_HASH': 'plaintext',
- 'PASSWORD_SALT': None,
- 'LOGIN_URL': '/login',
- 'LOGOUT_URL': '/logout',
- 'REGISTER_URL': '/register',
- 'RESET_URL': '/reset',
- 'CHANGE_URL': '/change',
- 'CONFIRM_URL': '/confirm',
- 'POST_LOGIN_VIEW': '/',
- 'POST_LOGOUT_VIEW': '/',
- 'CONFIRM_ERROR_VIEW': None,
- 'POST_REGISTER_VIEW': None,
- 'POST_CONFIRM_VIEW': None,
- 'POST_RESET_VIEW': None,
- 'POST_CHANGE_VIEW': None,
- 'UNAUTHORIZED_VIEW': None,
- 'FORGOT_PASSWORD_TEMPLATE': 'security/forgot_password.html',
- 'LOGIN_USER_TEMPLATE': 'security/login_user.html',
- 'REGISTER_USER_TEMPLATE': 'security/register_user.html',
- 'RESET_PASSWORD_TEMPLATE': 'security/reset_password.html',
- 'SEND_CONFIRMATION_TEMPLATE': 'security/send_confirmation.html',
- 'SEND_LOGIN_TEMPLATE': 'security/send_login.html',
- 'CONFIRMABLE': False,
- 'REGISTERABLE': False,
- 'RECOVERABLE': False,
- 'TRACKABLE': False,
- 'PASSWORDLESS': False,
- 'CHANGEABLE': False,
- 'SEND_REGISTER_EMAIL': True,
- 'LOGIN_WITHIN': '1 days',
- 'CONFIRM_EMAIL_WITHIN': '5 days',
- 'RESET_PASSWORD_WITHIN': '5 days',
- 'LOGIN_WITHOUT_CONFIRMATION': False,
- 'EMAIL_SENDER': 'no-reply@localhost',
- 'TOKEN_AUTHENTICATION_KEY': 'auth_token',
- 'TOKEN_AUTHENTICATION_HEADER': 'Authentication-Token',
- 'CONFIRM_SALT': 'confirm-salt',
- 'RESET_SALT': 'reset-salt',
- 'LOGIN_SALT': 'login-salt',
- 'CHANGE_SALT': 'change-salt',
- 'REMEMBER_SALT': 'remember-salt',
- 'DEFAULT_HTTP_AUTH_REALM': 'Login Required',
- 'EMAIL_SUBJECT_REGISTER': 'Welcome',
- 'EMAIL_SUBJECT_CONFIRM': 'Please confirm your email',
- 'EMAIL_SUBJECT_PASSWORDLESS': 'Login instructions',
- 'EMAIL_SUBJECT_PASSWORD_NOTICE': 'Your password has been reset',
- 'EMAIL_SUBJECT_PASSWORD_CHANGE_NOTICE': 'Your password has been changed',
- 'EMAIL_SUBJECT_PASSWORD_RESET': 'Password reset instructions'
-}
-
-#: Default Flask-Security messages
-_default_messages = {
- 'UNAUTHORIZED': ('You do not have permission to view this resource.', 'error'),
- 'CONFIRM_REGISTRATION': ('Thank you. Confirmation instructions have been sent to %(email)s.', 'success'),
- 'EMAIL_CONFIRMED': ('Thank you. Your email has been confirmed.', 'success'),
- 'ALREADY_CONFIRMED': ('Your email has already been confirmed.', 'info'),
- 'INVALID_CONFIRMATION_TOKEN': ('Invalid confirmation token.', 'error'),
- 'EMAIL_ALREADY_ASSOCIATED': ('%(email)s is already associated with an account.', 'error'),
- 'PASSWORD_MISMATCH': ('Password does not match', 'error'),
- 'RETYPE_PASSWORD_MISMATCH': ('Passwords do not match', 'error'),
- 'INVALID_REDIRECT': ('Redirections outside the domain are forbidden', 'error'),
- 'PASSWORD_RESET_REQUEST': ('Instructions to reset your password have been sent to %(email)s.', 'info'),
- 'PASSWORD_RESET_EXPIRED': ('You did not reset your password within %(within)s. New instructions have been sent to %(email)s.', 'error'),
- 'INVALID_RESET_PASSWORD_TOKEN': ('Invalid reset password token.', 'error'),
- 'CONFIRMATION_REQUIRED': ('Email requires confirmation.', 'error'),
- 'CONFIRMATION_REQUEST': ('Confirmation instructions have been sent to %(email)s.', 'info'),
- 'CONFIRMATION_EXPIRED': ('You did not confirm your email within %(within)s. New instructions to confirm your email have been sent to %(email)s.', 'error'),
- 'LOGIN_EXPIRED': ('You did not login within %(within)s. New instructions to login have been sent to %(email)s.', 'error'),
- 'LOGIN_EMAIL_SENT': ('Instructions to login have been sent to %(email)s.', 'success'),
- 'INVALID_LOGIN_TOKEN': ('Invalid login token.', 'error'),
- 'DISABLED_ACCOUNT': ('Account is disabled.', 'error'),
- 'EMAIL_NOT_PROVIDED': ('Email not provided', 'error'),
- 'INVALID_EMAIL_ADDRESS': ('Invalid email address', 'error'),
- 'PASSWORD_NOT_PROVIDED': ('Password not provided', 'error'),
- 'USER_DOES_NOT_EXIST': ('Specified user does not exist', 'error'),
- 'INVALID_PASSWORD': ('Invalid password', 'error'),
- 'PASSWORDLESS_LOGIN_SUCCESSFUL': ('You have successfuly logged in.', 'success'),
- 'PASSWORD_RESET': ('You successfully reset your password and you have been logged in automatically.', 'success'),
- 'PASSWORD_CHANGE': ('You successfully changed your password.', 'success'),
- 'LOGIN': ('Please log in to access this page.', 'info'),
- 'REFRESH': ('Please reauthenticate to access this page.', 'info'),
-}
-
-_allowed_password_hash_schemes = [
- 'bcrypt',
- 'des_crypt',
- 'pbkdf2_sha256',
- 'pbkdf2_sha512',
- 'sha256_crypt',
- 'sha512_crypt',
- # And always last one...
- 'plaintext'
-]
-
-_default_forms = {
- 'login_form': LoginForm,
- 'confirm_register_form': ConfirmRegisterForm,
- 'register_form': RegisterForm,
- 'forgot_password_form': ForgotPasswordForm,
- 'reset_password_form': ResetPasswordForm,
- 'change_password_form': ChangePasswordForm,
- 'send_confirmation_form': SendConfirmationForm,
- 'passwordless_login_form': PasswordlessLoginForm,
-}
-
-
-def _user_loader(user_id):
- return _security.datastore.find_user(id=user_id)
-
-
-def _token_loader(token):
- try:
- data = _security.remember_token_serializer.loads(token)
- user = _security.datastore.find_user(id=data[0])
- if user and md5(user.password) == data[1]:
- return user
- except:
- pass
-
- return None
-
-
-def _identity_loader():
- if not isinstance(current_user._get_current_object(), AnonymousUser):
- identity = Identity(current_user.id)
- return identity
-
-
-def _on_identity_loaded(sender, identity):
- if hasattr(current_user, 'id'):
- identity.provides.add(UserNeed(current_user.id))
-
- for role in current_user.roles:
- identity.provides.add(RoleNeed(role.name))
-
- identity.user = current_user
-
-
-def _get_login_manager(app):
- lm = LoginManager()
- lm.anonymous_user = AnonymousUser
- lm.login_view = '%s.login' % cv('BLUEPRINT_NAME', app=app)
- lm.user_loader(_user_loader)
- lm.token_loader(_token_loader)
- lm.login_message, lm.login_message_category = cv('MSG_LOGIN', app=app)
- lm.needs_refresh_message, lm.needs_refresh_message_category = cv('MSG_REFRESH', app=app)
- lm.init_app(app)
- return lm
-
-
-def _get_principal(app):
- p = Principal(app, use_sessions=False)
- p.identity_loader(_identity_loader)
- return p
-
-
-def _get_pwd_context(app):
- pw_hash = cv('PASSWORD_HASH', app=app)
- if pw_hash not in _allowed_password_hash_schemes:
- allowed = ', '.join(_allowed_password_hash_schemes[:-1]) + ' and ' + _allowed_password_hash_schemes[-1]
- raise ValueError("Invalid hash scheme %r. Allowed values are %s" % (pw_hash, allowed))
- return CryptContext(schemes=_allowed_password_hash_schemes, default=pw_hash)
-
-
-def _get_serializer(app, name):
- secret_key = app.config.get('SECRET_KEY')
- salt = app.config.get('SECURITY_%s_SALT' % name.upper())
- return URLSafeTimedSerializer(secret_key=secret_key, salt=salt)
-
-
-def _get_state(app, datastore, **kwargs):
- for key, value in get_config(app).items():
- print "in _get_state [{}]: {}".format(key, value)
- kwargs[key.lower()] = value
-
- kwargs.update(dict(
- app=app,
- datastore=datastore,
- login_manager=_get_login_manager(app),
- principal=_get_principal(app),
- pwd_context=_get_pwd_context(app),
- remember_token_serializer=_get_serializer(app, 'remember'),
- login_serializer=_get_serializer(app, 'login'),
- reset_serializer=_get_serializer(app, 'reset'),
- confirm_serializer=_get_serializer(app, 'confirm'),
- _context_processors={},
- _send_mail_task=None
- ))
-
- for key, value in _default_forms.items():
- if key not in kwargs or not kwargs[key]:
- kwargs[key] = value
-
- return _SecurityState(**kwargs)
-
-
-def _context_processor():
- return dict(url_for_security=url_for_security, security=_security)
-
-
-class RoleMixin(object):
- """Mixin for `Role` model definitions"""
- def __eq__(self, other):
- return (self.name == other or \
- self.name == getattr(other, 'name', None))
-
- def __ne__(self, other):
- return (self.name != other and
- self.name != getattr(other, 'name', None))
-
-
-class UserMixin(BaseUserMixin):
- """Mixin for `User` model definitions"""
-
- def is_active(self):
- """Returns `True` if the user is active."""
- return self.active
-
- def get_auth_token(self):
- """Returns the user's authentication token."""
- data = [str(self.id), md5(self.password)]
- return _security.remember_token_serializer.dumps(data)
-
- def has_role(self, role):
- """Returns `True` if the user identifies with the specified role.
-
- :param role: A role name or `Role` instance"""
- return role in self.roles
-
-
-class AnonymousUser(AnonymousUserBase):
- """AnonymousUser definition"""
-
- def __init__(self):
- super(AnonymousUser, self).__init__()
- self.roles = ImmutableList()
-
- def has_role(self, *args):
- """Returns `False`"""
- return False
-
-
-class _SecurityState(object):
-
- def __init__(self, **kwargs):
- for key, value in kwargs.items():
- setattr(self, key.lower(), value)
-
- def _add_ctx_processor(self, endpoint, fn):
- group = self._context_processors.setdefault(endpoint, [])
- fn not in group and group.append(fn)
-
- def _run_ctx_processor(self, endpoint):
- rv, fns = {}, []
- for g in [None, endpoint]:
- for fn in self._context_processors.setdefault(g, []):
- rv.update(fn())
- return rv
-
- def context_processor(self, fn):
- self._add_ctx_processor(None, fn)
-
- def forgot_password_context_processor(self, fn):
- self._add_ctx_processor('forgot_password', fn)
-
- def login_context_processor(self, fn):
- self._add_ctx_processor('login', fn)
-
- def register_context_processor(self, fn):
- self._add_ctx_processor('register', fn)
-
- def reset_password_context_processor(self, fn):
- self._add_ctx_processor('reset_password', fn)
-
- def change_password_context_processor(self, fn):
- self._add_ctx_processor('change_password', fn)
-
- def send_confirmation_context_processor(self, fn):
- self._add_ctx_processor('send_confirmation', fn)
-
- def send_login_context_processor(self, fn):
- self._add_ctx_processor('send_login', fn)
-
- def mail_context_processor(self, fn):
- self._add_ctx_processor('mail', fn)
-
- def send_mail_task(self, fn):
- self._send_mail_task = fn
-
-
-class Security(object):
- """The :class:`Security` class initializes the Flask-Security extension.
-
- :param app: The application.
- :param datastore: An instance of a user datastore.
- """
- def __init__(self, app=None, datastore=None, **kwargs):
- self.app = app
- self.datastore = datastore
-
- if app is not None and datastore is not None:
- self._state = self.init_app(app, datastore, **kwargs)
-
- def init_app(self, app, datastore=None, register_blueprint=True,
- login_form=None, confirm_register_form=None,
- register_form=None, forgot_password_form=None,
- reset_password_form=None, change_password_form=None,
- send_confirmation_form=None, passwordless_login_form=None):
- """Initializes the Flask-Security extension for the specified
- application and datastore implentation.
-
- :param app: The application.
- :param datastore: An instance of a user datastore.
- :param register_blueprint: to register the Security blueprint or not.
- """
- datastore = datastore or self.datastore
-
- for key, value in _default_config.items():
- app.config.setdefault('SECURITY_' + key, value)
-
- for key, value in _default_messages.items():
- app.config.setdefault('SECURITY_MSG_' + key, value)
-
- identity_loaded.connect_via(app)(_on_identity_loaded)
-
- state = _get_state(app, datastore,
- login_form=login_form,
- confirm_register_form=confirm_register_form,
- register_form=register_form,
- forgot_password_form=forgot_password_form,
- reset_password_form=reset_password_form,
- change_password_form=change_password_form,
- send_confirmation_form=send_confirmation_form,
- passwordless_login_form=passwordless_login_form)
-
- if register_blueprint:
- app.register_blueprint(create_blueprint(state, __name__))
- app.context_processor(_context_processor)
-
- app.extensions['security'] = state
-
- return state
-
- def __getattr__(self, name):
- return getattr(self._state, name, None)
diff --git a/wqflask/flask_security/datastore.py b/wqflask/flask_security/datastore.py
deleted file mode 100644
index 634399d9..00000000
--- a/wqflask/flask_security/datastore.py
+++ /dev/null
@@ -1,261 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- flask.ext.security.datastore
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- This module contains an user datastore classes.
-
- :copyright: (c) 2012 by Matt Wright.
- :license: MIT, see LICENSE for more details.
-"""
-
-class Datastore(object):
- def __init__(self, db):
- self.db = db
-
- def commit(self):
- pass
-
- def put(self, model):
- raise NotImplementedError
-
- def delete(self, model):
- raise NotImplementedError
-
-
-class SQLAlchemyDatastore(Datastore):
- def commit(self):
- self.db.session.commit()
-
- def put(self, model):
- self.db.session.add(model)
- return model
-
- def delete(self, model):
- self.db.session.delete(model)
-
-
-class MongoEngineDatastore(Datastore):
- def put(self, model):
- model.save()
- return model
-
- def delete(self, model):
- model.delete()
-
-
-class PeeweeDatastore(Datastore):
- def put(self, model):
- model.save()
- return model
-
- def delete(self, model):
- model.delete_instance()
-
-
-class UserDatastore(object):
- """Abstracted user datastore.
-
- :param user_model: A user model class definition
- :param role_model: A role model class definition
- """
-
- def __init__(self, user_model, role_model):
- self.user_model = user_model
- self.role_model = role_model
-
- def _prepare_role_modify_args(self, user, role):
- if isinstance(user, basestring):
- user = self.find_user(email=user)
- if isinstance(role, basestring):
- role = self.find_role(role)
- return user, role
-
- def _prepare_create_user_args(self, **kwargs):
- kwargs.setdefault('active', True)
- roles = kwargs.get('roles', [])
- for i, role in enumerate(roles):
- rn = role.name if isinstance(role, self.role_model) else role
- # see if the role exists
- roles[i] = self.find_role(rn)
- kwargs['roles'] = roles
- return kwargs
-
- def find_user(self, *args, **kwargs):
- """Returns a user matching the provided parameters."""
- raise NotImplementedError
-
- def find_role(self, *args, **kwargs):
- """Returns a role matching the provided name."""
- raise NotImplementedError
-
- def add_role_to_user(self, user, role):
- """Adds a role tp a user
-
- :param user: The user to manipulate
- :param role: The role to add to the user
- """
- rv = False
- user, role = self._prepare_role_modify_args(user, role)
- if role not in user.roles:
- rv = True
- user.roles.append(role)
- return rv
-
- def remove_role_from_user(self, user, role):
- """Removes a role from a user
-
- :param user: The user to manipulate
- :param role: The role to remove from the user
- """
- rv = False
- user, role = self._prepare_role_modify_args(user, role)
- if role in user.roles:
- rv = True
- user.roles.remove(role)
- return rv
-
- def toggle_active(self, user):
- """Toggles a user's active status. Always returns True."""
- user.active = not user.active
- return True
-
- def deactivate_user(self, user):
- """Deactivates a specified user. Returns `True` if a change was made.
-
- :param user: The user to deactivate
- """
- if user.active:
- user.active = False
- return True
- return False
-
- def activate_user(self, user):
- """Activates a specified user. Returns `True` if a change was made.
-
- :param user: The user to activate
- """
- if not user.active:
- user.active = True
- return True
- return False
-
- def create_role(self, **kwargs):
- """Creates and returns a new role from the given parameters."""
-
- role = self.role_model(**kwargs)
- return self.put(role)
-
- def find_or_create_role(self, name, **kwargs):
- """Returns a role matching the given name or creates it with any
- additionally provided parameters
- """
- kwargs["name"] = name
- return self.find_role(name) or self.create_role(**kwargs)
-
- def create_user(self, **kwargs):
- """Creates and returns a new user from the given parameters."""
-
- user = self.user_model(**self._prepare_create_user_args(**kwargs))
- print "in abstraced create_user, user is:", user
- return self.put(user)
-
- def delete_user(self, user):
- """Delete the specified user
-
- :param user: The user to delete
- """
- self.delete(user)
-
-
-class SQLAlchemyUserDatastore(SQLAlchemyDatastore, UserDatastore):
- """A SQLAlchemy datastore implementation for Flask-Security that assumes the
- use of the Flask-SQLAlchemy extension.
- """
- def __init__(self, db, user_model, role_model):
- SQLAlchemyDatastore.__init__(self, db)
- UserDatastore.__init__(self, user_model, role_model)
-
- def find_user(self, **kwargs):
- return self.user_model.query.filter_by(**kwargs).first()
-
- def find_role(self, role):
- return self.role_model.query.filter_by(name=role).first()
-
-
-class MongoEngineUserDatastore(MongoEngineDatastore, UserDatastore):
- """A MongoEngine datastore implementation for Flask-Security that assumes
- the use of the Flask-MongoEngine extension.
- """
- def __init__(self, db, user_model, role_model):
- MongoEngineDatastore.__init__(self, db)
- UserDatastore.__init__(self, user_model, role_model)
-
- def find_user(self, **kwargs):
- return self.user_model.objects(**kwargs).first()
-
- def find_role(self, role):
- return self.role_model.objects(name=role).first()
-
-
-class PeeweeUserDatastore(PeeweeDatastore, UserDatastore):
- """A PeeweeD datastore implementation for Flask-Security that assumes
- the use of the Flask-Peewee extension.
-
- :param user_model: A user model class definition
- :param role_model: A role model class definition
- :param role_link: A model implementing the many-to-many user-role relation
- """
- def __init__(self, db, user_model, role_model, role_link):
- PeeweeDatastore.__init__(self, db)
- UserDatastore.__init__(self, user_model, role_model)
- self.UserRole = role_link
-
- def find_user(self, **kwargs):
- try:
- return self.user_model.filter(**kwargs).get()
- except self.user_model.DoesNotExist:
- return None
-
- def find_role(self, role):
- try:
- return self.role_model.filter(name=role).get()
- except self.role_model.DoesNotExist:
- return None
-
- def create_user(self, **kwargs):
- """Creates and returns a new user from the given parameters."""
- roles = kwargs.pop('roles', [])
- user = self.user_model(**self._prepare_create_user_args(**kwargs))
- user = self.put(user)
- for role in roles:
- self.add_role_to_user(user, role)
- return user
-
-
- def add_role_to_user(self, user, role):
- """Adds a role tp a user
-
- :param user: The user to manipulate
- :param role: The role to add to the user
- """
- user, role = self._prepare_role_modify_args(user, role)
- if self.UserRole.select().where(self.UserRole.user==user, self.UserRole.role==role).count():
- return False
- else:
- self.UserRole.create(user=user, role=role)
- return True
-
- def remove_role_from_user(self, user, role):
- """Removes a role from a user
-
- :param user: The user to manipulate
- :param role: The role to remove from the user
- """
- user, role = self._prepare_role_modify_args(user, role)
- if self.UserRole.select().where(self.UserRole.user==user, self.UserRole.role==role).count():
- self.UserRole.delete().where(self.UserRole.user==user, self.UserRole.role==role)
- return True
- else:
- return False
-
diff --git a/wqflask/flask_security/decorators.py b/wqflask/flask_security/decorators.py
deleted file mode 100644
index 0ea1105c..00000000
--- a/wqflask/flask_security/decorators.py
+++ /dev/null
@@ -1,207 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- flask.ext.security.decorators
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Flask-Security decorators module
-
- :copyright: (c) 2012 by Matt Wright.
- :license: MIT, see LICENSE for more details.
-"""
-
-from functools import wraps
-
-from flask import current_app, Response, request, redirect, _request_ctx_stack
-from flask.ext.login import current_user, login_required
-from flask.ext.principal import RoleNeed, Permission, Identity, identity_changed
-from werkzeug.local import LocalProxy
-
-from . import utils
-
-
-# Convenient references
-_security = LocalProxy(lambda: current_app.extensions['security'])
-
-
-_default_unauthorized_html = """
- <h1>Unauthorized</h1>
- <p>The server could not verify that you are authorized to access the URL
- requested. You either supplied the wrong credentials (e.g. a bad password),
- or your browser doesn't understand how to supply the credentials required.</p>
- """
-
-
-def _get_unauthorized_response(text=None, headers=None):
- text = text or _default_unauthorized_html
- headers = headers or {}
- return Response(text, 401, headers)
-
-
-def _get_unauthorized_view():
- cv = utils.get_url(utils.config_value('UNAUTHORIZED_VIEW'))
- utils.do_flash(*utils.get_message('UNAUTHORIZED'))
- return redirect(cv or request.referrer or '/')
-
-
-def _check_token():
- header_key = _security.token_authentication_header
- args_key = _security.token_authentication_key
- header_token = request.headers.get(header_key, None)
- token = request.args.get(args_key, header_token)
- if request.json:
- token = request.json.get(args_key, token)
- serializer = _security.remember_token_serializer
-
- try:
- data = serializer.loads(token)
- except:
- return False
-
- user = _security.datastore.find_user(id=data[0])
-
- if utils.md5(user.password) == data[1]:
- app = current_app._get_current_object()
- _request_ctx_stack.top.user = user
- identity_changed.send(app, identity=Identity(user.id))
- return True
-
-
-def _check_http_auth():
- auth = request.authorization or dict(username=None, password=None)
- user = _security.datastore.find_user(email=auth.username)
-
- if user and utils.verify_and_update_password(auth.password, user):
- _security.datastore.commit()
- app = current_app._get_current_object()
- _request_ctx_stack.top.user = user
- identity_changed.send(app, identity=Identity(user.id))
- return True
-
- return False
-
-
-def http_auth_required(realm):
- """Decorator that protects endpoints using Basic HTTP authentication.
- The username should be set to the user's email address.
-
- :param realm: optional realm name"""
-
- def decorator(fn):
- @wraps(fn)
- def wrapper(*args, **kwargs):
- if _check_http_auth():
- return fn(*args, **kwargs)
- r = _security.default_http_auth_realm if callable(realm) else realm
- h = {'WWW-Authenticate': 'Basic realm="%s"' % r}
- return _get_unauthorized_response(headers=h)
- return wrapper
-
- if callable(realm):
- return decorator(realm)
- return decorator
-
-
-def auth_token_required(fn):
- """Decorator that protects endpoints using token authentication. The token
- should be added to the request by the client by using a query string
- variable with a name equal to the configuration value of
- `SECURITY_TOKEN_AUTHENTICATION_KEY` or in a request header named that of
- the configuration value of `SECURITY_TOKEN_AUTHENTICATION_HEADER`
- """
-
- @wraps(fn)
- def decorated(*args, **kwargs):
- if _check_token():
- return fn(*args, **kwargs)
- return _get_unauthorized_response()
- return decorated
-
-
-def auth_required(*auth_methods):
- """
- Decorator that protects enpoints through multiple mechanisms
- Example::
-
- @app.route('/dashboard')
- @auth_required('token', 'session')
- def dashboard():
- return 'Dashboard'
-
- :param auth_methods: Specified mechanisms.
- """
- login_mechanisms = {
- 'token': lambda: _check_token(),
- 'basic': lambda: _check_http_auth(),
- 'session': lambda: current_user.is_authenticated()
- }
-
- def wrapper(fn):
- @wraps(fn)
- def decorated_view(*args, **kwargs):
- mechanisms = [login_mechanisms.get(method) for method in auth_methods]
- for mechanism in mechanisms:
- if mechanism and mechanism():
- return fn(*args, **kwargs)
- return _get_unauthorized_response()
- return decorated_view
- return wrapper
-
-
-def roles_required(*roles):
- """Decorator which specifies that a user must have all the specified roles.
- Example::
-
- @app.route('/dashboard')
- @roles_required('admin', 'editor')
- def dashboard():
- return 'Dashboard'
-
- The current user must have both the `admin` role and `editor` role in order
- to view the page.
-
- :param args: The required roles.
- """
- def wrapper(fn):
- @wraps(fn)
- def decorated_view(*args, **kwargs):
- perms = [Permission(RoleNeed(role)) for role in roles]
- for perm in perms:
- if not perm.can():
- return _get_unauthorized_view()
- return fn(*args, **kwargs)
- return decorated_view
- return wrapper
-
-
-def roles_accepted(*roles):
- """Decorator which specifies that a user must have at least one of the
- specified roles. Example::
-
- @app.route('/create_post')
- @roles_accepted('editor', 'author')
- def create_post():
- return 'Create Post'
-
- The current user must have either the `editor` role or `author` role in
- order to view the page.
-
- :param args: The possible roles.
- """
- def wrapper(fn):
- @wraps(fn)
- def decorated_view(*args, **kwargs):
- perm = Permission(*[RoleNeed(role) for role in roles])
- if perm.can():
- return fn(*args, **kwargs)
- return _get_unauthorized_view()
- return decorated_view
- return wrapper
-
-
-def anonymous_user_required(f):
- @wraps(f)
- def wrapper(*args, **kwargs):
- if current_user.is_authenticated():
- return redirect(utils.get_url(_security.post_login_view))
- return f(*args, **kwargs)
- return wrapper
diff --git a/wqflask/flask_security/forms.py b/wqflask/flask_security/forms.py
deleted file mode 100644
index 54677e77..00000000
--- a/wqflask/flask_security/forms.py
+++ /dev/null
@@ -1,286 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- flask.ext.security.forms
- ~~~~~~~~~~~~~~~~~~~~~~~~
-
- Flask-Security forms module
-
- :copyright: (c) 2012 by Matt Wright.
- :license: MIT, see LICENSE for more details.
-"""
-
-import inspect
-import urlparse
-
-import flask_wtf as wtf
-
-from flask import request, current_app
-from flask_wtf import Form as BaseForm, TextField, PasswordField, \
- SubmitField, HiddenField, BooleanField, ValidationError, Field
-from flask_login import current_user
-from werkzeug.local import LocalProxy
-
-from .confirmable import requires_confirmation
-from .utils import verify_and_update_password, get_message
-
-# Convenient reference
-_datastore = LocalProxy(lambda: current_app.extensions['security'].datastore)
-
-_default_field_labels = {
- 'email': 'Email Address',
- 'password': 'Password',
- 'remember_me': 'Remember Me',
- 'login': 'Login',
- 'retype_password': 'Retype Password',
- 'register': 'Register',
- 'send_confirmation': 'Resend Confirmation Instructions',
- 'recover_password': 'Recover Password',
- 'reset_password': 'Reset Password',
- 'retype_password': 'Retype Password',
- 'new_password': 'New Password',
- 'change_password': 'Change Password',
- 'send_login_link': 'Send Login Link'
-}
-
-
-class ValidatorMixin(object):
- def __call__(self, form, field):
- if self.message and self.message.isupper():
- self.message = get_message(self.message)[0]
- return super(ValidatorMixin, self).__call__(form, field)
-
-
-class EqualTo(ValidatorMixin, wtf.EqualTo):
- pass
-
-
-class Required(ValidatorMixin, wtf.Required):
- pass
-
-
-class Email(ValidatorMixin, wtf.Email):
- pass
-
-
-class Length(ValidatorMixin, wtf.Length):
- pass
-
-
-email_required = Required(message='EMAIL_NOT_PROVIDED')
-email_validator = Email(message='INVALID_EMAIL_ADDRESS')
-password_required = Required(message='PASSWORD_NOT_PROVIDED')
-
-
-def get_form_field_label(key):
- return _default_field_labels.get(key, '')
-
-
-def unique_user_email(form, field):
- if _datastore.find_user(email=field.data) is not None:
- msg = get_message('EMAIL_ALREADY_ASSOCIATED', email=field.data)[0]
- raise ValidationError(msg)
-
-
-def valid_user_email(form, field):
- form.user = _datastore.find_user(email=field.data)
- if form.user is None:
- raise ValidationError(get_message('USER_DOES_NOT_EXIST')[0])
-
-
-class Form(BaseForm):
- def __init__(self, *args, **kwargs):
- #print "importing tracer"
- #from wqflask import tracer
- #tracer.turn_on()
- #print "imported tracer"
- print "in Form, args:", args
- print "in Form, kwargs:", kwargs
- if current_app.testing:
- self.TIME_LIMIT = None
- super(Form, self).__init__(*args, **kwargs)
-
-
-class EmailFormMixin():
- email = TextField(get_form_field_label('email'),
- validators=[email_required,
- email_validator])
-
-
-class UserEmailFormMixin():
- user = None
- email = TextField(get_form_field_label('email'),
- validators=[email_required,
- email_validator,
- valid_user_email])
-
-
-class UniqueEmailFormMixin():
- email = TextField(get_form_field_label('email'),
- validators=[email_required,
- email_validator,
- unique_user_email])
-
-
-class PasswordFormMixin():
- password = PasswordField(get_form_field_label('password'),
- validators=[password_required])
-
-
-class NewPasswordFormMixin():
- password = PasswordField(get_form_field_label('password'),
- validators=[password_required,
- Length(min=6, max=128)])
-
-
-class PasswordConfirmFormMixin():
- password_confirm = PasswordField(
- get_form_field_label('retype_password'),
- validators=[EqualTo('password', message='RETYPE_PASSWORD_MISMATCH')])
-
-
-class NextFormMixin():
- next = HiddenField()
-
- def validate_next(self, field):
- url_next = urlparse.urlsplit(field.data)
- url_base = urlparse.urlsplit(request.host_url)
- if url_next.netloc and url_next.netloc != url_base.netloc:
- field.data = ''
- raise ValidationError(get_message('INVALID_REDIRECT')[0])
-
-
-class RegisterFormMixin():
- submit = SubmitField(get_form_field_label('register'))
-
- def to_dict(form):
- def is_field_and_user_attr(member):
- print "in ifaua:", member
- return isinstance(member, Field) and \
- hasattr(_datastore.user_model, member.name)
-
- print("green:", vars(form))
- fields = inspect.getmembers(form, is_field_and_user_attr)
- print("fields:" ,vars(form))
- return dict((key, value.data) for key, value in fields)
-
-
-class SendConfirmationForm(Form, UserEmailFormMixin):
- """The default forgot password form"""
-
- submit = SubmitField(get_form_field_label('send_confirmation'))
-
- def __init__(self, *args, **kwargs):
- super(SendConfirmationForm, self).__init__(*args, **kwargs)
- if request.method == 'GET':
- self.email.data = request.args.get('email', None)
-
- def validate(self):
- if not super(SendConfirmationForm, self).validate():
- return False
- if self.user.confirmed_at is not None:
- self.email.errors.append(get_message('ALREADY_CONFIRMED')[0])
- return False
- return True
-
-
-class ForgotPasswordForm(Form, UserEmailFormMixin):
- """The default forgot password form"""
-
- submit = SubmitField(get_form_field_label('recover_password'))
-
-
-class PasswordlessLoginForm(Form, UserEmailFormMixin):
- """The passwordless login form"""
-
- submit = SubmitField(get_form_field_label('send_login_link'))
-
- def __init__(self, *args, **kwargs):
- super(PasswordlessLoginForm, self).__init__(*args, **kwargs)
-
- def validate(self):
- if not super(PasswordlessLoginForm, self).validate():
- return False
- if not self.user.is_active():
- self.email.errors.append(get_message('DISABLED_ACCOUNT')[0])
- return False
- return True
-
-
-class LoginForm(Form, NextFormMixin):
- """The default login form"""
-
- email = TextField(get_form_field_label('email'))
- password = PasswordField(get_form_field_label('password'))
- remember = BooleanField(get_form_field_label('remember_me'))
- submit = SubmitField(get_form_field_label('login'))
-
- def __init__(self, *args, **kwargs):
- super(LoginForm, self).__init__(*args, **kwargs)
-
- def validate(self):
- if not super(LoginForm, self).validate():
- return False
-
- if self.email.data.strip() == '':
- self.email.errors.append(get_message('EMAIL_NOT_PROVIDED')[0])
- return False
-
- if self.password.data.strip() == '':
- self.password.errors.append(get_message('PASSWORD_NOT_PROVIDED')[0])
- return False
-
- self.user = _datastore.find_user(email=self.email.data)
-
- if self.user is None:
- self.email.errors.append(get_message('USER_DOES_NOT_EXIST')[0])
- return False
- if not verify_and_update_password(self.password.data, self.user):
- self.password.errors.append(get_message('INVALID_PASSWORD')[0])
- return False
- if requires_confirmation(self.user):
- self.email.errors.append(get_message('CONFIRMATION_REQUIRED')[0])
- return False
- if not self.user.is_active():
- self.email.errors.append(get_message('DISABLED_ACCOUNT')[0])
- return False
- return True
-
-
-class ConfirmRegisterForm(Form, RegisterFormMixin,
- UniqueEmailFormMixin, NewPasswordFormMixin):
- pass
-
-
-class RegisterForm(ConfirmRegisterForm, PasswordConfirmFormMixin):
- pass
-
-
-class ResetPasswordForm(Form, NewPasswordFormMixin, PasswordConfirmFormMixin):
- """The default reset password form"""
-
- submit = SubmitField(get_form_field_label('reset_password'))
-
-
-class ChangePasswordForm(Form, PasswordFormMixin):
- """The default change password form"""
-
- new_password = PasswordField(get_form_field_label('new_password'),
- validators=[password_required,
- Length(min=6, max=128)])
-
- new_password_confirm = PasswordField(get_form_field_label('retype_password'),
- validators=[EqualTo('new_password', message='RETYPE_PASSWORD_MISMATCH')])
-
- submit = SubmitField(get_form_field_label('change_password'))
-
- def validate(self):
- if not super(ChangePasswordForm, self).validate():
- return False
-
- if self.password.data.strip() == '':
- self.password.errors.append(get_message('PASSWORD_NOT_PROVIDED')[0])
- return False
- if not verify_and_update_password(self.password.data, current_user):
- self.password.errors.append(get_message('INVALID_PASSWORD')[0])
- return False
- return True
diff --git a/wqflask/flask_security/passwordless.py b/wqflask/flask_security/passwordless.py
deleted file mode 100644
index b0accb2c..00000000
--- a/wqflask/flask_security/passwordless.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- flask.ext.security.passwordless
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Flask-Security passwordless module
-
- :copyright: (c) 2012 by Matt Wright.
- :license: MIT, see LICENSE for more details.
-"""
-
-from flask import request, current_app as app
-from werkzeug.local import LocalProxy
-
-from .signals import login_instructions_sent
-from .utils import send_mail, url_for_security, get_token_status, \
- config_value
-
-
-# Convenient references
-_security = LocalProxy(lambda: app.extensions['security'])
-
-_datastore = LocalProxy(lambda: _security.datastore)
-
-
-def send_login_instructions(user):
- """Sends the login instructions email for the specified user.
-
- :param user: The user to send the instructions to
- :param token: The login token
- """
- token = generate_login_token(user)
- url = url_for_security('token_login', token=token)
- login_link = request.url_root[:-1] + url
-
- send_mail(config_value('EMAIL_SUBJECT_PASSWORDLESS'), user.email,
- 'login_instructions', user=user, login_link=login_link)
-
- login_instructions_sent.send(dict(user=user, login_token=token),
- app=app._get_current_object())
-
-
-def generate_login_token(user):
- """Generates a unique login token for the specified user.
-
- :param user: The user the token belongs to
- """
- return _security.login_serializer.dumps([str(user.id)])
-
-
-def login_token_status(token):
- """Returns the expired status, invalid status, and user of a login token.
- For example::
-
- expired, invalid, user = login_token_status('...')
-
- :param token: The login token
- """
- return get_token_status(token, 'login', 'LOGIN')
diff --git a/wqflask/flask_security/recoverable.py b/wqflask/flask_security/recoverable.py
deleted file mode 100644
index 6aafc111..00000000
--- a/wqflask/flask_security/recoverable.py
+++ /dev/null
@@ -1,80 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- flask.ext.security.recoverable
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Flask-Security recoverable module
-
- :copyright: (c) 2012 by Matt Wright.
- :license: MIT, see LICENSE for more details.
-"""
-
-from flask import current_app as app, request
-from werkzeug.local import LocalProxy
-
-from .signals import password_reset, reset_password_instructions_sent
-from .utils import send_mail, md5, encrypt_password, url_for_security, \
- get_token_status, config_value
-
-
-# Convenient references
-_security = LocalProxy(lambda: app.extensions['security'])
-
-_datastore = LocalProxy(lambda: _security.datastore)
-
-
-def send_reset_password_instructions(user):
- """Sends the reset password instructions email for the specified user.
-
- :param user: The user to send the instructions to
- """
- token = generate_reset_password_token(user)
- url = url_for_security('reset_password', token=token)
- reset_link = request.url_root[:-1] + url
-
- send_mail(config_value('EMAIL_SUBJECT_PASSWORD_RESET'), user.email,
- 'reset_instructions',
- user=user, reset_link=reset_link)
-
- reset_password_instructions_sent.send(dict(user=user, token=token),
- app=app._get_current_object())
-
-
-def send_password_reset_notice(user):
- """Sends the password reset notice email for the specified user.
-
- :param user: The user to send the notice to
- """
- send_mail(config_value('EMAIL_SUBJECT_PASSWORD_NOTICE'), user.email,
- 'reset_notice', user=user)
-
-
-def generate_reset_password_token(user):
- """Generates a unique reset password token for the specified user.
-
- :param user: The user to work with
- """
- data = [str(user.id), md5(user.password)]
- return _security.reset_serializer.dumps(data)
-
-
-def reset_password_token_status(token):
- """Returns the expired status, invalid status, and user of a password reset
- token. For example::
-
- expired, invalid, user = reset_password_token_status('...')
-
- :param token: The password reset token
- """
- return get_token_status(token, 'reset', 'RESET_PASSWORD')
-
-def update_password(user, password):
- """Update the specified user's password
-
- :param user: The user to update_password
- :param password: The unencrypted new password
- """
- user.password = encrypt_password(password)
- _datastore.put(user)
- send_password_reset_notice(user)
- password_reset.send(user, app=app._get_current_object())
diff --git a/wqflask/flask_security/registerable.py b/wqflask/flask_security/registerable.py
deleted file mode 100644
index 4606c7c6..00000000
--- a/wqflask/flask_security/registerable.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- flask.ext.security.registerable
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Flask-Security registerable module
-
- :copyright: (c) 2012 by Matt Wright.
- :license: MIT, see LICENSE for more details.
-"""
-
-from flask import current_app as app
-from werkzeug.local import LocalProxy
-
-from .confirmable import generate_confirmation_link
-from .signals import user_registered
-from .utils import do_flash, get_message, send_mail, encrypt_password, \
- config_value
-
-# Convenient references
-_security = LocalProxy(lambda: app.extensions['security'])
-
-_datastore = LocalProxy(lambda: _security.datastore)
-
-
-def register_user(**kwargs):
- print "in register_user kwargs:", kwargs
- confirmation_link, token = None, None
- kwargs['password'] = encrypt_password(kwargs['password'])
- user = _datastore.create_user(**kwargs)
- _datastore.commit()
-
- if _security.confirmable:
- confirmation_link, token = generate_confirmation_link(user)
- do_flash(*get_message('CONFIRM_REGISTRATION', email=user.email))
-
- user_registered.send(dict(user=user, confirm_token=token),
- app=app._get_current_object())
-
- if config_value('SEND_REGISTER_EMAIL'):
- send_mail(config_value('EMAIL_SUBJECT_REGISTER'), user.email, 'welcome',
- user=user, confirmation_link=confirmation_link)
-
- return user
diff --git a/wqflask/flask_security/script.py b/wqflask/flask_security/script.py
deleted file mode 100644
index 9c9a2469..00000000
--- a/wqflask/flask_security/script.py
+++ /dev/null
@@ -1,130 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- flask.ext.security.script
- ~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Flask-Security script module
-
- :copyright: (c) 2012 by Matt Wright.
- :license: MIT, see LICENSE for more details.
-"""
-try:
- import simplejson as json
-except ImportError:
- import json
-
-import re
-
-from flask import current_app
-from flask.ext.script import Command, Option
-from werkzeug.local import LocalProxy
-
-from .utils import encrypt_password
-
-
-_datastore = LocalProxy(lambda: current_app.extensions['security'].datastore)
-
-
-def pprint(obj):
- print json.dumps(obj, sort_keys=True, indent=4)
-
-
-def commit(fn):
- def wrapper(*args, **kwargs):
- fn(*args, **kwargs)
- _datastore.commit()
- return wrapper
-
-
-class CreateUserCommand(Command):
- """Create a user"""
-
- option_list = (
- Option('-e', '--email', dest='email', default=None),
- Option('-p', '--password', dest='password', default=None),
- Option('-a', '--active', dest='active', default=''),
- )
-
- @commit
- def run(self, **kwargs):
- # sanitize active input
- ai = re.sub(r'\s', '', str(kwargs['active']))
- kwargs['active'] = ai.lower() in ['', 'y', 'yes', '1', 'active']
-
- from flask_security.forms import ConfirmRegisterForm
- from werkzeug.datastructures import MultiDict
-
- form = ConfirmRegisterForm(MultiDict(kwargs), csrf_enabled=False)
-
- if form.validate():
- kwargs['password'] = encrypt_password(kwargs['password'])
- _datastore.create_user(**kwargs)
- print 'User created successfully.'
- kwargs['password'] = '****'
- pprint(kwargs)
- else:
- print 'Error creating user'
- pprint(form.errors)
-
-
-class CreateRoleCommand(Command):
- """Create a role"""
-
- option_list = (
- Option('-n', '--name', dest='name', default=None),
- Option('-d', '--desc', dest='description', default=None),
- )
-
- @commit
- def run(self, **kwargs):
- _datastore.create_role(**kwargs)
- print 'Role "%(name)s" created successfully.' % kwargs
-
-
-class _RoleCommand(Command):
- option_list = (
- Option('-u', '--user', dest='user_identifier'),
- Option('-r', '--role', dest='role_name'),
- )
-
-
-class AddRoleCommand(_RoleCommand):
- """Add a role to a user"""
-
- @commit
- def run(self, user_identifier, role_name):
- _datastore.add_role_to_user(user_identifier, role_name)
- print "Role '%s' added to user '%s' successfully" % (role_name, user_identifier)
-
-
-class RemoveRoleCommand(_RoleCommand):
- """Add a role to a user"""
-
- @commit
- def run(self, user_identifier, role_name):
- _datastore.remove_role_from_user(user_identifier, role_name)
- print "Role '%s' removed from user '%s' successfully" % (role_name, user_identifier)
-
-
-class _ToggleActiveCommand(Command):
- option_list = (
- Option('-u', '--user', dest='user_identifier'),
- )
-
-
-class DeactivateUserCommand(_ToggleActiveCommand):
- """Deactive a user"""
-
- @commit
- def run(self, user_identifier):
- _datastore.deactivate_user(user_identifier)
- print "User '%s' has been deactivated" % user_identifier
-
-
-class ActivateUserCommand(_ToggleActiveCommand):
- """Deactive a user"""
-
- @commit
- def run(self, user_identifier):
- _datastore.activate_user(user_identifier)
- print "User '%s' has been activated" % user_identifier
diff --git a/wqflask/flask_security/signals.py b/wqflask/flask_security/signals.py
deleted file mode 100644
index e1c29548..00000000
--- a/wqflask/flask_security/signals.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- flask.ext.security.signals
- ~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Flask-Security signals module
-
- :copyright: (c) 2012 by Matt Wright.
- :license: MIT, see LICENSE for more details.
-"""
-
-import blinker
-
-
-signals = blinker.Namespace()
-
-user_registered = signals.signal("user-registered")
-
-user_confirmed = signals.signal("user-confirmed")
-
-confirm_instructions_sent = signals.signal("confirm-instructions-sent")
-
-login_instructions_sent = signals.signal("login-instructions-sent")
-
-password_reset = signals.signal("password-reset")
-
-password_changed = signals.signal("password-changed")
-
-reset_password_instructions_sent = signals.signal("password-reset-instructions-sent")
diff --git a/wqflask/flask_security/templates/.DS_Store b/wqflask/flask_security/templates/.DS_Store
deleted file mode 100644
index b72f1d98..00000000
--- a/wqflask/flask_security/templates/.DS_Store
+++ /dev/null
Binary files differ
diff --git a/wqflask/flask_security/templates/security/.DS_Store b/wqflask/flask_security/templates/security/.DS_Store
deleted file mode 100644
index 5008ddfc..00000000
--- a/wqflask/flask_security/templates/security/.DS_Store
+++ /dev/null
Binary files differ
diff --git a/wqflask/flask_security/templates/security/_macros.html b/wqflask/flask_security/templates/security/_macros.html
deleted file mode 100644
index 8575f3db..00000000
--- a/wqflask/flask_security/templates/security/_macros.html
+++ /dev/null
@@ -1,16 +0,0 @@
-{% macro render_field_with_errors(field) %}
- <p>
- {{ field.label }} {{ field(**kwargs)|safe }}
- {% if field.errors %}
- <ul>
- {% for error in field.errors %}
- <li>{{ error }}</li>
- {% endfor %}
- </ul>
- {% endif %}
- </p>
-{% endmacro %}
-
-{% macro render_field(field) %}
- <p>{{ field(**kwargs)|safe }}</p>
-{% endmacro %} \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/_menu.html b/wqflask/flask_security/templates/security/_menu.html
deleted file mode 100644
index 5291f809..00000000
--- a/wqflask/flask_security/templates/security/_menu.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{% if security.registerable or security.recoverable or security.confirmabled %}
-<h2>Menu</h2>
-<ul>
- <li><a href="{{ url_for_security('login') }}">Login</a></li>
- {% if security.registerable %}
- <li><a href="{{ url_for_security('register') }}">Register</a><br/></li>
- {% endif %}
- {% if security.recoverable %}
- <li><a href="{{ url_for_security('forgot_password') }}">Forgot password</a><br/></li>
- {% endif %}
- {% if security.confirmable %}
- <li><a href="{{ url_for_security('send_confirmation') }}">Confirm account</a></li>
- {% endif %}
-</ul>
-{% endif %}
diff --git a/wqflask/flask_security/templates/security/_messages.html b/wqflask/flask_security/templates/security/_messages.html
deleted file mode 100644
index 179d0636..00000000
--- a/wqflask/flask_security/templates/security/_messages.html
+++ /dev/null
@@ -1,9 +0,0 @@
-{%- with messages = get_flashed_messages(with_categories=true) -%}
- {% if messages %}
- <ul class="flashes">
- {% for category, message in messages %}
- <li class="{{ category }}">{{ message }}</li>
- {% endfor %}
- </ul>
- {% endif %}
-{%- endwith %} \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/change_password.html b/wqflask/flask_security/templates/security/change_password.html
deleted file mode 100644
index 8ee3eb73..00000000
--- a/wqflask/flask_security/templates/security/change_password.html
+++ /dev/null
@@ -1,11 +0,0 @@
-{% from "security/_macros.html" import render_field_with_errors, render_field %}
-{% include "security/_messages.html" %}
-<h1>Change password</h1>
-<form action="{{ url_for_security('change_password') }}" method="POST" name="change_password_form">
- {{ change_password_form.hidden_tag() }}
- {{ render_field_with_errors(change_password_form.password) }}
- {{ render_field_with_errors(change_password_form.new_password) }}
- {{ render_field_with_errors(change_password_form.new_password_confirm) }}
- {{ render_field(change_password_form.submit) }}
-</form>
-
diff --git a/wqflask/flask_security/templates/security/email/change_notice.html b/wqflask/flask_security/templates/security/email/change_notice.html
deleted file mode 100644
index d1224cf5..00000000
--- a/wqflask/flask_security/templates/security/email/change_notice.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<p>Your password has been changed.</p>
-{% if security.recoverable %}
-<p>If you did not change your password, <a href="{{ url_for_security('forgot_password', _external=True) }}">click here to reset it</a>.</p>
-{% endif %}
diff --git a/wqflask/flask_security/templates/security/email/change_notice.txt b/wqflask/flask_security/templates/security/email/change_notice.txt
deleted file mode 100644
index e74bd80d..00000000
--- a/wqflask/flask_security/templates/security/email/change_notice.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-Your password has been changed
-{% if security.recoverable %}
-If you did not change your password, click the link below to reset it.
-{{ url_for_security('forgot_password', _external=True) }}
-{% endif %}
diff --git a/wqflask/flask_security/templates/security/email/confirmation_instructions.html b/wqflask/flask_security/templates/security/email/confirmation_instructions.html
deleted file mode 100644
index 5082a9a8..00000000
--- a/wqflask/flask_security/templates/security/email/confirmation_instructions.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<p>Please confirm your email through the link below:</p>
-
-<p><a href="{{ confirmation_link }}">Confirm my account</a></p> \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/email/confirmation_instructions.txt b/wqflask/flask_security/templates/security/email/confirmation_instructions.txt
deleted file mode 100644
index fb435b55..00000000
--- a/wqflask/flask_security/templates/security/email/confirmation_instructions.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Please confirm your email through the link below:
-
-{{ confirmation_link }} \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/email/login_instructions.html b/wqflask/flask_security/templates/security/email/login_instructions.html
deleted file mode 100644
index 45a7cb57..00000000
--- a/wqflask/flask_security/templates/security/email/login_instructions.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<p>Welcome {{ user.email }}!</p>
-
-<p>You can log into your through the link below:</p>
-
-<p><a href="{{ login_link }}">Login now</a></p> \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/email/login_instructions.txt b/wqflask/flask_security/templates/security/email/login_instructions.txt
deleted file mode 100644
index 1364ed65..00000000
--- a/wqflask/flask_security/templates/security/email/login_instructions.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-Welcome {{ user.email }}!
-
-You can log into your through the link below:
-
-{{ login_link }} \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/email/reset_instructions.html b/wqflask/flask_security/templates/security/email/reset_instructions.html
deleted file mode 100644
index fd0b48d8..00000000
--- a/wqflask/flask_security/templates/security/email/reset_instructions.html
+++ /dev/null
@@ -1 +0,0 @@
-<p><a href="{{ reset_link }}">Click here to reset your password</a></p> \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/email/reset_instructions.txt b/wqflask/flask_security/templates/security/email/reset_instructions.txt
deleted file mode 100644
index 91ac288e..00000000
--- a/wqflask/flask_security/templates/security/email/reset_instructions.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Click the link below to reset your password:
-
-{{ reset_link }} \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/email/reset_notice.html b/wqflask/flask_security/templates/security/email/reset_notice.html
deleted file mode 100644
index 536e2961..00000000
--- a/wqflask/flask_security/templates/security/email/reset_notice.html
+++ /dev/null
@@ -1 +0,0 @@
-<p>Your password has been reset</p> \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/email/reset_notice.txt b/wqflask/flask_security/templates/security/email/reset_notice.txt
deleted file mode 100644
index a3fa0b4b..00000000
--- a/wqflask/flask_security/templates/security/email/reset_notice.txt
+++ /dev/null
@@ -1 +0,0 @@
-Your password has been reset \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/email/welcome.html b/wqflask/flask_security/templates/security/email/welcome.html
deleted file mode 100644
index 55eaed61..00000000
--- a/wqflask/flask_security/templates/security/email/welcome.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<p>Welcome {{ user.email }}!</p>
-
-{% if security.confirmable %}
-<p>You can confirm your email through the link below:</p>
-
-<p><a href="{{ confirmation_link }}">Confirm my account</a></p>
-{% endif %} \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/email/welcome.txt b/wqflask/flask_security/templates/security/email/welcome.txt
deleted file mode 100644
index fb6ee5b5..00000000
--- a/wqflask/flask_security/templates/security/email/welcome.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-Welcome {{ user.email }}!
-
-{% if security.confirmable %}
-You can confirm your email through the link below:
-
-{{ confirmation_link }}
-{% endif %} \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/forgot_password.html b/wqflask/flask_security/templates/security/forgot_password.html
deleted file mode 100644
index 90fcaf66..00000000
--- a/wqflask/flask_security/templates/security/forgot_password.html
+++ /dev/null
@@ -1,9 +0,0 @@
-{% from "security/_macros.html" import render_field_with_errors, render_field %}
-{% include "security/_messages.html" %}
-<h1>Send password reset instructions</h1>
-<form action="{{ url_for_security('forgot_password') }}" method="POST" name="forgot_password_form">
- {{ forgot_password_form.hidden_tag() }}
- {{ render_field_with_errors(forgot_password_form.email) }}
- {{ render_field(forgot_password_form.submit) }}
-</form>
-{% include "security/_menu.html" %} \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/login_user.html b/wqflask/flask_security/templates/security/login_user.html
deleted file mode 100644
index d781ce08..00000000
--- a/wqflask/flask_security/templates/security/login_user.html
+++ /dev/null
@@ -1,12 +0,0 @@
-{% from "security/_macros.html" import render_field_with_errors, render_field %}
-{% include "security/_messages.html" %}
-<h1>Login</h1>
-<form action="{{ url_for_security('login') }}" method="POST" name="login_user_form">
- {{ login_user_form.hidden_tag() }}
- {{ render_field_with_errors(login_user_form.email) }}
- {{ render_field_with_errors(login_user_form.password) }}
- {{ render_field_with_errors(login_user_form.remember) }}
- {{ render_field(login_user_form.next) }}
- {{ render_field(login_user_form.submit) }}
-</form>
-{% include "security/_menu.html" %} \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/register_user.html b/wqflask/flask_security/templates/security/register_user.html
deleted file mode 100644
index 87cf9b1d..00000000
--- a/wqflask/flask_security/templates/security/register_user.html
+++ /dev/null
@@ -1,13 +0,0 @@
-{% from "security/_macros.html" import render_field_with_errors, render_field %}
-{% include "security/_messages.html" %}
-<h1>Register</h1>
-<form action="{{ url_for_security('register') }}" method="POST" name="register_user_form">
- {{ register_user_form.hidden_tag() }}
- {{ render_field_with_errors(register_user_form.email) }}
- {{ render_field_with_errors(register_user_form.password) }}
- {% if register_user_form.password_confirm %}
- {{ render_field_with_errors(register_user_form.password_confirm) }}
- {% endif %}
- {{ render_field(register_user_form.submit) }}
-</form>
-{% include "security/_menu.html" %} \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/reset_password.html b/wqflask/flask_security/templates/security/reset_password.html
deleted file mode 100644
index e6fc3f58..00000000
--- a/wqflask/flask_security/templates/security/reset_password.html
+++ /dev/null
@@ -1,10 +0,0 @@
-{% from "security/_macros.html" import render_field_with_errors, render_field %}
-{% include "security/_messages.html" %}
-<h1>Reset password</h1>
-<form action="{{ url_for_security('reset_password', token=reset_password_token) }}" method="POST" name="reset_password_form">
- {{ reset_password_form.hidden_tag() }}
- {{ render_field_with_errors(reset_password_form.password) }}
- {{ render_field_with_errors(reset_password_form.password_confirm) }}
- {{ render_field(reset_password_form.submit) }}
-</form>
-{% include "security/_menu.html" %} \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/send_confirmation.html b/wqflask/flask_security/templates/security/send_confirmation.html
deleted file mode 100644
index 3e828407..00000000
--- a/wqflask/flask_security/templates/security/send_confirmation.html
+++ /dev/null
@@ -1,9 +0,0 @@
-{% from "security/_macros.html" import render_field_with_errors, render_field %}
-{% include "security/_messages.html" %}
-<h1>Resend confirmation instructions</h1>
-<form action="{{ url_for_security('send_confirmation') }}" method="POST" name="send_confirmation_form">
- {{ send_confirmation_form.hidden_tag() }}
- {{ render_field_with_errors(send_confirmation_form.email) }}
- {{ render_field(send_confirmation_form.submit) }}
-</form>
-{% include "security/_menu.html" %} \ No newline at end of file
diff --git a/wqflask/flask_security/templates/security/send_login.html b/wqflask/flask_security/templates/security/send_login.html
deleted file mode 100644
index 15611c57..00000000
--- a/wqflask/flask_security/templates/security/send_login.html
+++ /dev/null
@@ -1,9 +0,0 @@
-{% from "security/_macros.html" import render_field_with_errors, render_field %}
-{% include "security/_messages.html" %}
-<h1>Login</h1>
-<form action="{{ url_for_security('login') }}" method="POST" name="send_login_form">
- {{ send_login_form.hidden_tag() }}
- {{ render_field_with_errors(send_login_form.email) }}
- {{ render_field(send_login_form.submit) }}
-</form>
-{% include "security/_menu.html" %} \ No newline at end of file
diff --git a/wqflask/flask_security/utils.py b/wqflask/flask_security/utils.py
deleted file mode 100644
index 7397ab4f..00000000
--- a/wqflask/flask_security/utils.py
+++ /dev/null
@@ -1,379 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- flask.ext.security.utils
- ~~~~~~~~~~~~~~~~~~~~~~~~
-
- Flask-Security utils module
-
- :copyright: (c) 2012 by Matt Wright.
- :license: MIT, see LICENSE for more details.
-"""
-
-import base64
-import blinker
-import functools
-import hashlib
-import hmac
-from contextlib import contextmanager
-from datetime import datetime, timedelta
-
-from flask import url_for, flash, current_app, request, session, render_template
-from flask.ext.login import login_user as _login_user, \
- logout_user as _logout_user
-from flask.ext.mail import Message
-from flask.ext.principal import Identity, AnonymousIdentity, identity_changed
-from itsdangerous import BadSignature, SignatureExpired
-from werkzeug.local import LocalProxy
-
-from .signals import user_registered, user_confirmed, \
- confirm_instructions_sent, login_instructions_sent, \
- password_reset, password_changed, reset_password_instructions_sent
-
-# Convenient references
-_security = LocalProxy(lambda: current_app.extensions['security'])
-
-_datastore = LocalProxy(lambda: _security.datastore)
-
-_pwd_context = LocalProxy(lambda: _security.pwd_context)
-
-
-def login_user(user, remember=True):
- """Performs the login and sends the appropriate signal."""
-
- if not _login_user(user, remember):
- return False
-
- if _security.trackable:
- old_current_login, new_current_login = user.current_login_at, datetime.utcnow()
- remote_addr = request.remote_addr or 'untrackable'
- old_current_ip, new_current_ip = user.current_login_ip, remote_addr
-
- user.last_login_at = old_current_login or new_current_login
- user.current_login_at = new_current_login
- user.last_login_ip = old_current_ip or new_current_ip
- user.current_login_ip = new_current_ip
- user.login_count = user.login_count + 1 if user.login_count else 1
-
- _datastore.put(user)
-
- identity_changed.send(current_app._get_current_object(),
- identity=Identity(user.id))
- return True
-
-
-def logout_user():
- for key in ('identity.name', 'identity.auth_type'):
- session.pop(key, None)
- identity_changed.send(current_app._get_current_object(),
- identity=AnonymousIdentity())
- _logout_user()
-
-
-def get_hmac(password):
- if _security.password_hash == 'plaintext':
- return password
-
- if _security.password_salt is None:
- raise RuntimeError('The configuration value `SECURITY_PASSWORD_SALT` '
- 'must not be None when the value of `SECURITY_PASSWORD_HASH` is '
- 'set to "%s"' % _security.password_hash)
-
- h = hmac.new(_security.password_salt, password.encode('utf-8'), hashlib.sha512)
- return base64.b64encode(h.digest())
-
-
-def verify_password(password, password_hash):
- return _pwd_context.verify(get_hmac(password), password_hash)
-
-
-def verify_and_update_password(password, user):
- verified, new_password = _pwd_context.verify_and_update(get_hmac(password), user.password)
- if verified and new_password:
- user.password = new_password
- _datastore.put(user)
- return verified
-
-
-def encrypt_password(password):
- return _pwd_context.encrypt(get_hmac(password))
-
-
-def md5(data):
- return hashlib.md5(data).hexdigest()
-
-
-def do_flash(message, category=None):
- """Flash a message depending on if the `FLASH_MESSAGES` configuration
- value is set.
-
- :param message: The flash message
- :param category: The flash message category
- """
- if config_value('FLASH_MESSAGES'):
- flash(message, category)
-
-
-def get_url(endpoint_or_url):
- """Returns a URL if a valid endpoint is found. Otherwise, returns the
- provided value.
-
- :param endpoint_or_url: The endpoint name or URL to default to
- """
- try:
- return url_for(endpoint_or_url)
- except:
- return endpoint_or_url
-
-
-def get_security_endpoint_name(endpoint):
- return '%s.%s' % (_security.blueprint_name, endpoint)
-
-
-def url_for_security(endpoint, **values):
- """Return a URL for the security blueprint
-
- :param endpoint: the endpoint of the URL (name of the function)
- :param values: the variable arguments of the URL rule
- :param _external: if set to `True`, an absolute URL is generated. Server
- address can be changed via `SERVER_NAME` configuration variable which
- defaults to `localhost`.
- :param _anchor: if provided this is added as anchor to the URL.
- :param _method: if provided this explicitly specifies an HTTP method.
- """
- endpoint = get_security_endpoint_name(endpoint)
- return url_for(endpoint, **values)
-
-
-def get_post_login_redirect():
- """Returns the URL to redirect to after a user logs in successfully."""
- return (get_url(request.args.get('next')) or
- get_url(request.form.get('next')) or
- find_redirect('SECURITY_POST_LOGIN_VIEW'))
-
-
-def find_redirect(key):
- """Returns the URL to redirect to after a user logs in successfully.
-
- :param key: The session or application configuration key to search for
- """
- rv = (get_url(session.pop(key.lower(), None)) or
- get_url(current_app.config[key.upper()] or None) or '/')
- return rv
-
-
-def get_config(app):
- """Conveniently get the security configuration for the specified
- application without the annoying 'SECURITY_' prefix.
-
- :param app: The application to inspect
- """
- items = app.config.items()
- prefix = 'SECURITY_'
-
- def strip_prefix(tup):
- return (tup[0].replace('SECURITY_', ''), tup[1])
-
- return dict([strip_prefix(i) for i in items if i[0].startswith(prefix)])
-
-
-def get_message(key, **kwargs):
- rv = config_value('MSG_' + key)
- return rv[0] % kwargs, rv[1]
-
-
-def config_value(key, app=None, default=None):
- """Get a Flask-Security configuration value.
-
- :param key: The configuration key without the prefix `SECURITY_`
- :param app: An optional specific application to inspect. Defaults to Flask's
- `current_app`
- :param default: An optional default value if the value is not set
- """
- app = app or current_app
- return get_config(app).get(key.upper(), default)
-
-
-def get_max_age(key, app=None):
- now = datetime.utcnow()
- expires = now + get_within_delta(key + '_WITHIN', app)
- td = (expires - now)
- return (td.microseconds + (td.seconds + td.days * 24 * 3600) * 1e6) / 1e6
-
-
-def get_within_delta(key, app=None):
- """Get a timedelta object from the application configuration following
- the internal convention of::
-
- <Amount of Units> <Type of Units>
-
- Examples of valid config values::
-
- 5 days
- 10 minutes
-
- :param key: The config value key without the 'SECURITY_' prefix
- :param app: Optional application to inspect. Defaults to Flask's
- `current_app`
- """
- txt = config_value(key, app=app)
- values = txt.split()
- return timedelta(**{values[1]: int(values[0])})
-
-
-def send_mail(subject, recipient, template, **context):
- """Send an email via the Flask-Mail extension.
-
- :param subject: Email subject
- :param recipient: Email recipient
- :param template: The name of the email template
- :param context: The context to render the template with
- """
-
- context.setdefault('security', _security)
- context.update(_security._run_ctx_processor('mail'))
-
- msg = Message(subject,
- sender=_security.email_sender,
- recipients=[recipient])
-
- ctx = ('security/email', template)
- msg.body = render_template('%s/%s.txt' % ctx, **context)
- msg.html = render_template('%s/%s.html' % ctx, **context)
-
- if _security._send_mail_task:
- _security._send_mail_task(msg)
- return
-
- mail = current_app.extensions.get('mail')
- mail.send(msg)
-
-
-def get_token_status(token, serializer, max_age=None):
- serializer = getattr(_security, serializer + '_serializer')
- max_age = get_max_age(max_age)
- user, data = None, None
- expired, invalid = False, False
-
- try:
- data = serializer.loads(token, max_age=max_age)
- except SignatureExpired:
- d, data = serializer.loads_unsafe(token)
- expired = True
- except BadSignature:
- invalid = True
-
- if data:
- user = _datastore.find_user(id=data[0])
-
- expired = expired and (user is not None)
- return expired, invalid, user
-
-
-@contextmanager
-def capture_passwordless_login_requests():
- login_requests = []
-
- def _on(data, app):
- login_requests.append(data)
-
- login_instructions_sent.connect(_on)
-
- try:
- yield login_requests
- finally:
- login_instructions_sent.disconnect(_on)
-
-
-@contextmanager
-def capture_registrations():
- """Testing utility for capturing registrations.
-
- :param confirmation_sent_at: An optional datetime object to set the
- user's `confirmation_sent_at` to
- """
- registrations = []
-
- def _on(data, app):
- registrations.append(data)
-
- user_registered.connect(_on)
-
- try:
- yield registrations
- finally:
- user_registered.disconnect(_on)
-
-
-@contextmanager
-def capture_reset_password_requests(reset_password_sent_at=None):
- """Testing utility for capturing password reset requests.
-
- :param reset_password_sent_at: An optional datetime object to set the
- user's `reset_password_sent_at` to
- """
- reset_requests = []
-
- def _on(request, app):
- reset_requests.append(request)
-
- reset_password_instructions_sent.connect(_on)
-
- try:
- yield reset_requests
- finally:
- reset_password_instructions_sent.disconnect(_on)
-
-
-class CaptureSignals(object):
- """Testing utility for capturing blinker signals.
-
- Context manager which mocks out selected signals and registers which are `sent` on and what
- arguments were sent. Instantiate with a list of blinker `NamedSignals` to patch. Each signal
- has it's `send` mocked out.
- """
- def __init__(self, signals):
- """Patch all given signals and make them available as attributes.
-
- :param signals: list of signals
- """
- self._records = {}
- self._receivers = {}
- for signal in signals:
- self._records[signal] = []
- self._receivers[signal] = functools.partial(self._record, signal)
-
- def __getitem__(self, signal):
- """All captured signals are available via `ctxt[signal]`.
- """
- if isinstance(signal, blinker.base.NamedSignal):
- return self._records[signal]
- else:
- super(CaptureSignals, self).__setitem__(signal)
-
- def _record(self, signal, *args, **kwargs):
- self._records[signal].append((args, kwargs))
-
- def __enter__(self):
- for signal, receiver in self._receivers.iteritems():
- signal.connect(receiver)
- return self
-
- def __exit__(self, type, value, traceback):
- for signal, receiver in self._receivers.iteritems():
- signal.disconnect(receiver)
-
- def signals_sent(self):
- """Return a set of the signals sent.
- :rtype: list of blinker `NamedSignals`.
- """
- return set([signal for signal, _ in self._records.iteritems() if self._records[signal]])
-
-
-def capture_signals():
- """Factory method that creates a `CaptureSignals` with all the flask_security signals."""
- return CaptureSignals([user_registered, user_confirmed,
- confirm_instructions_sent, login_instructions_sent,
- password_reset, password_changed,
- reset_password_instructions_sent])
-
-
diff --git a/wqflask/flask_security/views.py b/wqflask/flask_security/views.py
deleted file mode 100644
index 1b8488d8..00000000
--- a/wqflask/flask_security/views.py
+++ /dev/null
@@ -1,359 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
- flask.ext.security.views
- ~~~~~~~~~~~~~~~~~~~~~~~~
-
- Flask-Security views module
-
- :copyright: (c) 2012 by Matt Wright.
- :license: MIT, see LICENSE for more details.
-"""
-
-from flask import current_app, redirect, request, render_template, jsonify, \
- after_this_request, Blueprint
-from flask_login import current_user
-from werkzeug.datastructures import MultiDict
-from werkzeug.local import LocalProxy
-
-from .confirmable import send_confirmation_instructions, \
- confirm_user, confirm_email_token_status
-from .decorators import login_required, anonymous_user_required
-from .passwordless import send_login_instructions, \
- login_token_status
-from .recoverable import reset_password_token_status, \
- send_reset_password_instructions, update_password
-from .changeable import change_user_password
-from .registerable import register_user
-from .utils import get_url, get_post_login_redirect, do_flash, \
- get_message, login_user, logout_user, url_for_security as url_for, \
- config_value
-
-
-# Convenient references
-_security = LocalProxy(lambda: current_app.extensions['security'])
-
-_datastore = LocalProxy(lambda: _security.datastore)
-
-
-def _render_json(form, include_auth_token=False):
- has_errors = len(form.errors) > 0
-
- if has_errors:
- code = 400
- response = dict(errors=form.errors)
- else:
- code = 200
- response = dict(user=dict(id=str(form.user.id)))
- if include_auth_token:
- token = form.user.get_auth_token()
- response['user']['authentication_token'] = token
-
- return jsonify(dict(meta=dict(code=code), response=response))
-
-
-def _commit(response=None):
- _datastore.commit()
- return response
-
-
-def _ctx(endpoint):
- return _security._run_ctx_processor(endpoint)
-
-
-@anonymous_user_required
-def login():
- """View function for login view"""
-
- form_class = _security.login_form
-
- if request.json:
- form = form_class(MultiDict(request.json))
- else:
- form = form_class()
-
- if form.validate_on_submit():
- login_user(form.user, remember=form.remember.data)
- after_this_request(_commit)
-
- if not request.json:
- return redirect(get_post_login_redirect())
-
- form.next.data = get_url(request.args.get('next')) \
- or get_url(request.form.get('next')) or ''
-
- if request.json:
- return _render_json(form, True)
-
- return render_template(config_value('LOGIN_USER_TEMPLATE'),
- login_user_form=form,
- **_ctx('login'))
-
-
-@login_required
-def logout():
- """View function which handles a logout request."""
-
- logout_user()
-
- return redirect(request.args.get('next', None) or
- get_url(_security.post_logout_view))
-
-
-def register():
- """View function which handles a registration request."""
-
- if _security.confirmable or request.json:
- form_class = _security.confirm_register_form
- else:
- form_class = _security.register_form
-
- if request.json:
- form_data = MultiDict(request.json)
- else:
- form_data = request.form
-
- form = form_class(form_data)
-
- if form.validate_on_submit():
- user = register_user(**form.to_dict())
- form.user = user
-
- if not _security.confirmable or _security.login_without_confirmation:
- after_this_request(_commit)
- login_user(user)
-
- if not request.json:
- post_register_url = get_url(_security.post_register_view)
- post_login_url = get_url(_security.post_login_view)
- return redirect(post_register_url or post_login_url)
-
- if request.json:
- return _render_json(form)
-
- return render_template(config_value('REGISTER_USER_TEMPLATE'),
- register_user_form=form,
- **_ctx('register'))
-
-
-def send_login():
- """View function that sends login instructions for passwordless login"""
-
- form_class = _security.passwordless_login_form
-
- if request.json:
- form = form_class(MultiDict(request.json))
- else:
- form = form_class()
-
- if form.validate_on_submit():
- send_login_instructions(form.user)
- if request.json is None:
- do_flash(*get_message('LOGIN_EMAIL_SENT', email=form.user.email))
-
- if request.json:
- return _render_json(form)
-
- return render_template(config_value('SEND_LOGIN_TEMPLATE'),
- send_login_form=form,
- **_ctx('send_login'))
-
-
-@anonymous_user_required
-def token_login(token):
- """View function that handles passwordless login via a token"""
-
- expired, invalid, user = login_token_status(token)
-
- if invalid:
- do_flash(*get_message('INVALID_LOGIN_TOKEN'))
- if expired:
- send_login_instructions(user)
- do_flash(*get_message('LOGIN_EXPIRED', email=user.email,
- within=_security.login_within))
- if invalid or expired:
- return redirect(url_for('login'))
-
- login_user(user, True)
- after_this_request(_commit)
- do_flash(*get_message('PASSWORDLESS_LOGIN_SUCCESSFUL'))
-
- return redirect(get_post_login_redirect())
-
-
-def send_confirmation():
- """View function which sends confirmation instructions."""
-
- form_class = _security.send_confirmation_form
-
- if request.json:
- form = form_class(MultiDict(request.json))
- else:
- form = form_class()
-
- if form.validate_on_submit():
- send_confirmation_instructions(form.user)
- if request.json is None:
- do_flash(*get_message('CONFIRMATION_REQUEST', email=form.user.email))
-
- if request.json:
- return _render_json(form)
-
- return render_template(config_value('SEND_CONFIRMATION_TEMPLATE'),
- send_confirmation_form=form,
- **_ctx('send_confirmation'))
-
-
-@anonymous_user_required
-def confirm_email(token):
- """View function which handles a email confirmation request."""
-
- expired, invalid, user = confirm_email_token_status(token)
-
- if not user or invalid:
- invalid = True
- do_flash(*get_message('INVALID_CONFIRMATION_TOKEN'))
- if expired:
- send_confirmation_instructions(user)
- do_flash(*get_message('CONFIRMATION_EXPIRED', email=user.email,
- within=_security.confirm_email_within))
- if invalid or expired:
- return redirect(get_url(_security.confirm_error_view) or
- url_for('send_confirmation'))
-
- confirm_user(user)
- login_user(user, True)
- after_this_request(_commit)
- do_flash(*get_message('EMAIL_CONFIRMED'))
-
- return redirect(get_url(_security.post_confirm_view) or
- get_url(_security.post_login_view))
-
-
-def forgot_password():
- """View function that handles a forgotten password request."""
-
- form_class = _security.forgot_password_form
-
- if request.json:
- form = form_class(MultiDict(request.json))
- else:
- form = form_class()
-
- if form.validate_on_submit():
- send_reset_password_instructions(form.user)
- if request.json is None:
- do_flash(*get_message('PASSWORD_RESET_REQUEST', email=form.user.email))
-
- if request.json:
- return _render_json(form)
-
- return render_template(config_value('FORGOT_PASSWORD_TEMPLATE'),
- forgot_password_form=form,
- **_ctx('forgot_password'))
-
-
-@anonymous_user_required
-def reset_password(token):
- """View function that handles a reset password request."""
-
- expired, invalid, user = reset_password_token_status(token)
-
- if invalid:
- do_flash(*get_message('INVALID_RESET_PASSWORD_TOKEN'))
- if expired:
- do_flash(*get_message('PASSWORD_RESET_EXPIRED', email=user.email,
- within=_security.reset_password_within))
- if invalid or expired:
- return redirect(url_for('forgot_password'))
-
- form = _security.reset_password_form()
-
- if form.validate_on_submit():
- after_this_request(_commit)
- update_password(user, form.password.data)
- do_flash(*get_message('PASSWORD_RESET'))
- login_user(user, True)
- return redirect(get_url(_security.post_reset_view) or
- get_url(_security.post_login_view))
-
- return render_template(config_value('RESET_PASSWORD_TEMPLATE'),
- reset_password_form=form,
- reset_password_token=token,
- **_ctx('reset_password'))
-
-
-@login_required
-def change_password():
- """View function which handles a change password request."""
-
- form_class = _security.change_password_form
-
- if request.json:
- form = form_class(MultiDict(request.json))
- else:
- form = form_class()
-
- if form.validate_on_submit():
- after_this_request(_commit)
- change_user_password(current_user, form.new_password.data)
- if request.json is None:
- do_flash(*get_message('PASSWORD_CHANGE'))
- return redirect(get_url(_security.post_change_view) or
- get_url(_security.post_login_view))
-
- if request.json:
- return _render_json(form)
-
- return render_template('security/change_password.html',
- change_password_form=form,
- **_ctx('change_password'))
-
-
-def create_blueprint(state, import_name):
- """Creates the security extension blueprint"""
-
- bp = Blueprint(state.blueprint_name, import_name,
- url_prefix=state.url_prefix,
- subdomain=state.subdomain,
- template_folder='templates')
-
- bp.route(state.logout_url, endpoint='logout')(logout)
-
- if state.passwordless:
- bp.route(state.login_url,
- methods=['GET', 'POST'],
- endpoint='login')(send_login)
- bp.route(state.login_url + '/<token>',
- endpoint='token_login')(token_login)
- else:
- bp.route(state.login_url,
- methods=['GET', 'POST'],
- endpoint='login')(login)
-
- if state.registerable:
- bp.route(state.register_url,
- methods=['GET', 'POST'],
- endpoint='register')(register)
-
- if state.recoverable:
- bp.route(state.reset_url,
- methods=['GET', 'POST'],
- endpoint='forgot_password')(forgot_password)
- bp.route(state.reset_url + '/<token>',
- methods=['GET', 'POST'],
- endpoint='reset_password')(reset_password)
-
- if state.changeable:
- bp.route(state.change_url,
- methods=['GET', 'POST'],
- endpoint='change_password')(change_password)
-
- if state.confirmable:
- bp.route(state.confirm_url,
- methods=['GET', 'POST'],
- endpoint='send_confirmation')(send_confirmation)
- bp.route(state.confirm_url + '/<token>',
- methods=['GET', 'POST'],
- endpoint='confirm_email')(confirm_email)
-
- return bp
diff --git a/wqflask/maintenance/convert_dryad_to_bimbam.py b/wqflask/maintenance/convert_dryad_to_bimbam.py
new file mode 100644
index 00000000..e833b395
--- /dev/null
+++ b/wqflask/maintenance/convert_dryad_to_bimbam.py
@@ -0,0 +1,70 @@
+#!/usr/bin/python
+
+"""
+Convert data dryad files to a BIMBAM _geno and _snps file
+
+
+"""
+
+from __future__ import print_function, division, absolute_import
+import sys
+sys.path.append("..")
+
+
+def read_dryad_file(filename):
+ exclude_count = 0
+ marker_list = []
+ sample_dict = {}
+ sample_list = []
+ geno_rows = []
+ with open(filename, 'r') as the_file:
+ for i, line in enumerate(the_file):
+ if i > 0:
+ if line.split(" ")[1] == "no":
+ sample_name = line.split(" ")[0]
+ sample_list.append(sample_name)
+ sample_dict[sample_name] = line.split(" ")[2:]
+ else:
+ exclude_count += 1
+ else:
+ marker_list = line.split(" ")[2:]
+
+ for i, marker in enumerate(marker_list):
+ this_row = []
+ this_row.append(marker)
+ this_row.append("X")
+ this_row.append("Y")
+ for sample in sample_list:
+ this_row.append(sample_dict[sample][i])
+ geno_rows.append(this_row)
+
+ print(exclude_count)
+
+ return geno_rows
+
+ #for i, marker in enumerate(marker_list):
+ # this_row = []
+ # this_row.append(marker)
+ # this_row.append("X")
+ # this_row.append("Y")
+ # with open(filename, 'r') as the_file:
+ # for j, line in enumerate(the_file):
+ # if j > 0:
+ # this_row.append(line.split(" ")[i+2])
+ # print("row: " + str(i))
+ # geno_rows.append(this_row)
+ #
+ #return geno_rows
+
+def write_bimbam_files(geno_rows):
+ with open('/home/zas1024/cfw_data/CFW_geno.txt', 'w') as geno_fh:
+ for row in geno_rows:
+ geno_fh.write(", ".join(row) + "\n")
+
+def convert_dryad_to_bimbam(filename):
+ geno_file_rows = read_dryad_file(filename)
+ write_bimbam_files(geno_file_rows)
+
+if __name__=="__main__":
+ input_filename = "/home/zas1024/cfw_data/" + sys.argv[1] + ".txt"
+ convert_dryad_to_bimbam(input_filename) \ No newline at end of file
diff --git a/wqflask/maintenance/convert_geno_to_bimbam.py b/wqflask/maintenance/convert_geno_to_bimbam.py
new file mode 100644
index 00000000..528b98cf
--- /dev/null
+++ b/wqflask/maintenance/convert_geno_to_bimbam.py
@@ -0,0 +1,190 @@
+#!/usr/bin/python
+
+"""
+Convert .geno files to json
+
+This file goes through all of the genofiles in the genofile directory (.geno)
+and converts them to json files that are used when running the marker regression
+code
+
+"""
+
+from __future__ import print_function, division, absolute_import
+import sys
+sys.path.append("..")
+import os
+import glob
+import traceback
+import gzip
+
+import simplejson as json
+
+from pprint import pformat as pf
+
+class EmptyConfigurations(Exception): pass
+
+class Marker(object):
+ def __init__(self):
+ self.name = None
+ self.chr = None
+ self.cM = None
+ self.Mb = None
+ self.genotypes = []
+
+class ConvertGenoFile(object):
+
+ def __init__(self, input_file, output_files):
+ self.input_file = input_file
+ self.output_files = output_files
+
+ self.mb_exists = False
+ self.cm_exists = False
+ self.markers = []
+
+ self.latest_row_pos = None
+ self.latest_col_pos = None
+
+ self.latest_row_value = None
+ self.latest_col_value = None
+
+ def convert(self):
+ self.haplotype_notation = {
+ '@mat': "1",
+ '@pat': "0",
+ '@het': "0.5",
+ '@unk': "NA"
+ }
+
+ self.configurations = {}
+ self.input_fh = open(self.input_file)
+
+ self.process_csv()
+
+ def process_csv(self):
+ for row in self.process_rows():
+ row_items = row.split("\t")
+
+ this_marker = Marker()
+ this_marker.name = row_items[1]
+ this_marker.chr = row_items[0]
+ if self.cm_exists and self.mb_exists:
+ this_marker.cM = row_items[2]
+ this_marker.Mb = row_items[3]
+ genotypes = row_items[4:]
+ elif self.cm_exists:
+ this_marker.cM = row_items[2]
+ genotypes = row_items[3:]
+ elif self.mb_exists:
+ this_marker.Mb = row_items[2]
+ genotypes = row_items[3:]
+ else:
+ genotypes = row_items[2:]
+ for item_count, genotype in enumerate(genotypes):
+ if genotype.upper().strip() in self.configurations:
+ this_marker.genotypes.append(self.configurations[genotype.upper().strip()])
+ else:
+ this_marker.genotypes.append("NA")
+
+ self.markers.append(this_marker.__dict__)
+
+ self.write_to_bimbam()
+
+ def write_to_bimbam(self):
+ with open(self.output_files[0], "w") as geno_fh:
+ for marker in self.markers:
+ geno_fh.write(marker['name'])
+ geno_fh.write(", X, Y")
+ geno_fh.write(", " + ", ".join(marker['genotypes']))
+ geno_fh.write("\n")
+
+ with open(self.output_files[1], "w") as pheno_fh:
+ for sample in self.sample_list:
+ pheno_fh.write("1\n")
+
+ with open(self.output_files[2], "w") as snp_fh:
+ for marker in self.markers:
+ if self.mb_exists:
+ snp_fh.write(marker['name'] +", " + str(int(float(marker['Mb'])*1000000)) + ", " + marker['chr'] + "\n")
+ else:
+ snp_fh.write(marker['name'] +", " + str(int(float(marker['cM'])*1000000)) + ", " + marker['chr'] + "\n")
+
+ def get_sample_list(self, row_contents):
+ self.sample_list = []
+ if self.mb_exists:
+ if self.cm_exists:
+ self.sample_list = row_contents[4:]
+ else:
+ self.sample_list = row_contents[3:]
+ else:
+ if self.cm_exists:
+ self.sample_list = row_contents[3:]
+ else:
+ self.sample_list = row_contents[2:]
+
+ def process_rows(self):
+ for self.latest_row_pos, row in enumerate(self.input_fh):
+ self.latest_row_value = row
+ # Take care of headers
+ if not row.strip():
+ continue
+ if row.startswith('#'):
+ continue
+ if row.startswith('Chr'):
+ if 'Mb' in row.split():
+ self.mb_exists = True
+ if 'cM' in row.split():
+ self.cm_exists = True
+ self.get_sample_list(row.split())
+ continue
+ if row.startswith('@'):
+ key, _separater, value = row.partition(':')
+ key = key.strip()
+ value = value.strip()
+ if key == "@filler":
+ raise EmptyConfigurations
+ if key in self.haplotype_notation:
+ self.configurations[value] = self.haplotype_notation[key]
+ continue
+ if not len(self.configurations):
+ raise EmptyConfigurations
+ yield row
+
+ @classmethod
+ def process_all(cls, old_directory, new_directory):
+ os.chdir(old_directory)
+ for input_file in glob.glob("*"):
+ if not input_file.endswith(('geno', '.geno.gz')):
+ continue
+ group_name = ".".join(input_file.split('.')[:-1])
+ if group_name == "HSNIH-Palmer":
+ continue
+ geno_output_file = os.path.join(new_directory, group_name + "_geno.txt")
+ pheno_output_file = os.path.join(new_directory, group_name + "_pheno.txt")
+ snp_output_file = os.path.join(new_directory, group_name + "_snps.txt")
+ output_files = [geno_output_file, pheno_output_file, snp_output_file]
+ print("%s -> %s" % (
+ os.path.join(old_directory, input_file), geno_output_file))
+ convertob = ConvertGenoFile(input_file, output_files)
+ try:
+ convertob.convert()
+ except EmptyConfigurations as why:
+ print(" No config info? Continuing...")
+ continue
+ except Exception as why:
+ print(" Exception:", why)
+ print(traceback.print_exc())
+ print(" Found in row %s at tabular column %s" % (convertob.latest_row_pos,
+ convertob.latest_col_pos))
+ print(" Column is:", convertob.latest_col_value)
+ print(" Row is:", convertob.latest_row_value)
+ break
+
+if __name__=="__main__":
+ Old_Geno_Directory = """/export/local/home/zas1024/gn2-zach/genotype_files/genotype"""
+ New_Geno_Directory = """/export/local/home/zas1024/gn2-zach/genotype_files/genotype/bimbam"""
+ #Input_File = """/home/zas1024/gene/genotype_files/genotypes/BXD.geno"""
+ #Output_File = """/home/zas1024/gene/wqflask/wqflask/pylmm/data/bxd.snps"""
+ #convertob = ConvertGenoFile("/home/zas1024/gene/genotype_files/genotypes/SRxSHRSPF2.geno", "/home/zas1024/gene/genotype_files/new_genotypes/SRxSHRSPF2.json")
+ #convertob.convert()
+ ConvertGenoFile.process_all(Old_Geno_Directory, New_Geno_Directory)
+ #ConvertGenoFiles(Geno_Directory) \ No newline at end of file
diff --git a/wqflask/maintenance/gen_select_dataset.py b/wqflask/maintenance/gen_select_dataset.py
index e5726656..647e58a2 100644
--- a/wqflask/maintenance/gen_select_dataset.py
+++ b/wqflask/maintenance/gen_select_dataset.py
@@ -57,16 +57,13 @@ import urlparse
from pprint import pformat as pf
-#Engine = sa.create_engine(zach_settings.SQLALCHEMY_DATABASE_URI)
+#Engine = sa.create_engine(zach_settings.SQL_URI)
# build MySql database connection
#conn = Engine.connect()
-print('WARNING: This conversion is now OBSOLETE as the menu gets built from the database in Javascript using GN_SERVER instead!')
-
-
-def parse_db_uri(db_uri):
+def parse_db_uri():
"""Converts a database URI to the db name, host name, user name, and password"""
parsed_uri = urlparse.urlparse(SQL_URI)
@@ -81,10 +78,10 @@ def parse_db_uri(db_uri):
return db_conn_info
-
def get_species():
"""Build species list"""
- Cursor.execute("select Name, MenuName from Species where Species.Name != 'macaque monkey' order by OrderId")
+ #Cursor.execute("select Name, MenuName from Species where Species.Name != 'macaque monkey' order by OrderId")
+ Cursor.execute("select Name, MenuName from Species order by OrderId")
species = list(Cursor.fetchall())
return species
@@ -96,13 +93,14 @@ def get_groups(species):
Cursor.execute("""select InbredSet.Name, InbredSet.FullName from InbredSet,
Species,
ProbeFreeze, GenoFreeze, PublishFreeze where Species.Name = '%s'
- and InbredSet.SpeciesId = Species.Id and InbredSet.Name != 'BXD300' and
+ and InbredSet.SpeciesId = Species.Id and
(PublishFreeze.InbredSetId = InbredSet.Id
or GenoFreeze.InbredSetId = InbredSet.Id
or ProbeFreeze.InbredSetId = InbredSet.Id)
group by InbredSet.Name
- order by InbredSet.Name""" % species_name)
- groups[species_name] = list(Cursor.fetchall())
+ order by InbredSet.FullName""" % species_name)
+ results = Cursor.fetchall()
+ groups[species_name] = list(results)
return groups
@@ -123,10 +121,20 @@ def get_types(groups):
else:
types[species][group_name] = [("Genotypes", "Genotypes")]
if group_name in types[species]:
- types[species][group_name] += build_types(species, group_name)
- else:
- types[species][group_name] = build_types(species, group_name)
-
+ types_list = build_types(species, group_name)
+ if len(types_list) > 0:
+ types[species][group_name] += types_list
+ else:
+ if not phenotypes_exist(group_name) and not genotypes_exist(group_name):
+ types[species].pop(group_name, None)
+ groups[species] = tuple(group for group in groups[species] if group[0] != group_name)
+ else: #ZS: This whole else statement might be unnecessary, need to check
+ types_list = build_types(species, group_name)
+ if len(types_list) > 0:
+ types[species][group_name] = types_list
+ else:
+ types[species].pop(group_name, None)
+ groups[species] = tuple(group for group in groups[species] if group[0] != group_name)
return types
@@ -190,7 +198,6 @@ def get_datasets(types):
for species, group_dict in types.iteritems():
datasets[species] = {}
for group, type_list in group_dict.iteritems():
- #print("type_list: ", type_list)
datasets[species][group] = {}
for type_name in type_list:
these_datasets = build_datasets(species, group, type_name[0])
@@ -203,26 +210,31 @@ def get_datasets(types):
def build_datasets(species, group, type_name):
"""Gets dataset names from database"""
dataset_text = dataset_value = None
+ datasets = []
if type_name == "Phenotypes":
- print("GROUP:", group)
- Cursor.execute("""select InfoFiles.GN_AccesionId from InfoFiles, PublishFreeze, InbredSet where
+ Cursor.execute("""select InfoFiles.GN_AccesionId, PublishFreeze.Name, PublishFreeze.FullName from InfoFiles, PublishFreeze, InbredSet where
InbredSet.Name = '%s' and
PublishFreeze.InbredSetId = InbredSet.Id and
- InfoFiles.InfoPageName = PublishFreeze.Name and
- PublishFreeze.public > 0 and
- PublishFreeze.confidentiality < 1 order by
- PublishFreeze.CreateTime desc""" % group)
-
- results = Cursor.fetchone()
- if results != None:
- dataset_id = str(results[0])
+ InfoFiles.InfoPageName = PublishFreeze.Name order by
+ PublishFreeze.CreateTime asc""" % group)
+
+ results = Cursor.fetchall()
+ if len(results) > 0:
+ for result in results:
+ print(result)
+ dataset_id = str(result[0])
+ dataset_value = str(result[1])
+ if group == 'MDP':
+ dataset_text = "Mouse Phenome Database"
+ else:
+ #dataset_text = "%s Phenotypes" % group
+ dataset_text = str(result[2])
+ datasets.append((dataset_id, dataset_value, dataset_text))
else:
dataset_id = "None"
- dataset_value = "%sPublish" % group
- if group == 'MDP':
- dataset_text = "Mouse Phenome Database"
- else:
- dataset_text = "%s Published Phenotypes" % group
+ dataset_value = "%sPublish" % group
+ dataset_text = "%s Phenotypes" % group
+ datasets.append((dataset_id, dataset_value, dataset_text))
elif type_name == "Genotypes":
Cursor.execute("""select InfoFiles.GN_AccesionId from InfoFiles, GenoFreeze, InbredSet where
@@ -240,10 +252,9 @@ def build_datasets(species, group, type_name):
dataset_id = "None"
dataset_value = "%sGeno" % group
dataset_text = "%s Genotypes" % group
+ datasets.append((dataset_id, dataset_value, dataset_text))
- if dataset_value:
- return [(dataset_id, dataset_value, dataset_text)]
- else:
+ else: # for mRNA expression/ProbeSet
Cursor.execute("""select ProbeSetFreeze.Id, ProbeSetFreeze.Name, ProbeSetFreeze.FullName from
ProbeSetFreeze, ProbeFreeze, InbredSet, Tissue, Species where
Species.Name = '%s' and Species.Id = InbredSet.SpeciesId and
@@ -261,26 +272,26 @@ def build_datasets(species, group, type_name):
this_dataset_info.append(str(info))
datasets.append(this_dataset_info)
- return datasets
+ return datasets
def main():
"""Generates and outputs (as json file) the data for the main dropdown menus on the home page"""
- parse_db_uri(SQL_URI)
+ parse_db_uri()
species = get_species()
groups = get_groups(species)
types = get_types(groups)
datasets = get_datasets(types)
- species.append(('All Species', 'All Species'))
- groups['All Species'] = [('All Groups', 'All Groups')]
- types['All Species'] = {}
- types['All Species']['All Groups'] = [('Phenotypes', 'Phenotypes')]
- datasets['All Species'] = {}
- datasets['All Species']['All Groups'] = {}
- datasets['All Species']['All Groups']['Phenotypes'] = [('All Phenotypes','All Phenotypes')]
+ #species.append(('All Species', 'All Species'))
+ #groups['All Species'] = [('All Groups', 'All Groups')]
+ #types['All Species'] = {}
+ #types['All Species']['All Groups'] = [('Phenotypes', 'Phenotypes')]
+ #datasets['All Species'] = {}
+ #datasets['All Species']['All Groups'] = {}
+ #datasets['All Species']['All Groups']['Phenotypes'] = [('All Phenotypes','All Phenotypes')]
data = dict(species=species,
groups=groups,
@@ -306,6 +317,6 @@ def _test_it():
#print("build_datasets:", pf(datasets))
if __name__ == '__main__':
- Conn = MySQLdb.Connect(**parse_db_uri(SQL_URI))
+ Conn = MySQLdb.Connect(**parse_db_uri())
Cursor = Conn.cursor()
- main()
+ main() \ No newline at end of file
diff --git a/wqflask/maintenance/generate_kinship_from_bimbam.py b/wqflask/maintenance/generate_kinship_from_bimbam.py
new file mode 100644
index 00000000..b53f5dda
--- /dev/null
+++ b/wqflask/maintenance/generate_kinship_from_bimbam.py
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+
+"""
+Generate relatedness matrix files for GEMMA from BIMBAM genotype/phenotype files
+
+This file goes through all of the BIMBAM files in the bimbam diretory
+and uses GEMMA to generate their corresponding kinship/relatedness matrix file
+
+"""
+
+from __future__ import print_function, division, absolute_import
+import sys
+sys.path.append("..")
+import os
+import glob
+
+class GenerateKinshipMatrices(object):
+ def __init__(self, group_name, geno_file, pheno_file):
+ self.group_name = group_name
+ self.geno_file = geno_file
+ self.pheno_file = pheno_file
+
+ def generate_kinship(self):
+ gemma_command = "/gnu/store/xhzgjr0jvakxv6h3blj8z496xjig69b0-profile/bin/gemma -g " + self.geno_file + " -p " + self.pheno_file + " -gk 1 -outdir /home/zas1024/genotype_files/genotype/bimbam/ -o " + self.group_name
+ print("command:", gemma_command)
+ os.system(gemma_command)
+
+ @classmethod
+ def process_all(self, geno_dir, bimbam_dir):
+ os.chdir(geno_dir)
+ for input_file in glob.glob("*"):
+ if not input_file.endswith(('geno', '.geno.gz')):
+ continue
+ group_name = ".".join(input_file.split('.')[:-1])
+ if group_name == "HSNIH-Palmer":
+ continue
+ geno_input_file = os.path.join(bimbam_dir, group_name + "_geno.txt")
+ pheno_input_file = os.path.join(bimbam_dir, group_name + "_pheno.txt")
+ convertob = GenerateKinshipMatrices(group_name, geno_input_file, pheno_input_file)
+ try:
+ convertob.generate_kinship()
+ except EmptyConfigurations as why:
+ print(" No config info? Continuing...")
+ continue
+ except Exception as why:
+
+ print(" Exception:", why)
+ print(traceback.print_exc())
+ print(" Found in row %s at tabular column %s" % (convertob.latest_row_pos,
+ convertob.latest_col_pos))
+ print(" Column is:", convertob.latest_col_value)
+ print(" Row is:", convertob.latest_row_value)
+ break
+
+
+if __name__=="__main__":
+ Geno_Directory = """/export/local/home/zas1024/genotype_files/genotype/"""
+ Bimbam_Directory = """/export/local/home/zas1024/genotype_files/genotype/bimbam/"""
+ GenerateKinshipMatrices.process_all(Geno_Directory, Bimbam_Directory)
+
+ #./gemma -g /home/zas1024/genotype_files/genotype/bimbam/BXD_geno.txt -p /home/zas1024/genotype_files/genotype/bimbam/BXD_pheno.txt -gk 1 -o BXD \ No newline at end of file
diff --git a/wqflask/maintenance/geno_to_json.py b/wqflask/maintenance/geno_to_json.py
new file mode 100644
index 00000000..9579812a
--- /dev/null
+++ b/wqflask/maintenance/geno_to_json.py
@@ -0,0 +1,197 @@
+#!/usr/bin/python
+
+"""
+Convert .geno files to json
+
+This file goes through all of the genofiles in the genofile directory (.geno)
+and converts them to json files that are used when running the marker regression
+code
+
+"""
+
+from __future__ import print_function, division, absolute_import
+import sys
+sys.path.append("..")
+import os
+import glob
+import traceback
+import gzip
+
+#import numpy as np
+#from pyLMM import lmm
+
+import simplejson as json
+
+from pprint import pformat as pf
+
+#from utility.tools import flat_files
+
+class EmptyConfigurations(Exception): pass
+
+
+
+class Marker(object):
+ def __init__(self):
+ self.name = None
+ self.chr = None
+ self.cM = None
+ self.Mb = None
+ self.genotypes = []
+
+class ConvertGenoFile(object):
+
+ def __init__(self, input_file, output_file):
+
+ self.input_file = input_file
+ self.output_file = output_file
+
+ self.mb_exists = False
+ self.cm_exists = False
+ self.markers = []
+
+ self.latest_row_pos = None
+ self.latest_col_pos = None
+
+ self.latest_row_value = None
+ self.latest_col_value = None
+
+ def convert(self):
+
+ self.haplotype_notation = {
+ '@mat': "1",
+ '@pat': "0",
+ '@het': "0.5",
+ '@unk': "NA"
+ }
+
+ self.configurations = {}
+ #self.skipped_cols = 3
+
+ #if self.input_file.endswith(".geno.gz"):
+ # print("self.input_file: ", self.input_file)
+ # self.input_fh = gzip.open(self.input_file)
+ #else:
+ self.input_fh = open(self.input_file)
+
+ with open(self.output_file, "w") as self.output_fh:
+ #if self.file_type == "geno":
+ self.process_csv()
+ #elif self.file_type == "snps":
+ # self.process_snps_file()
+
+
+ def process_csv(self):
+ for row_count, row in enumerate(self.process_rows()):
+ row_items = row.split("\t")
+
+ this_marker = Marker()
+ this_marker.name = row_items[1]
+ this_marker.chr = row_items[0]
+ if self.cm_exists and self.mb_exists:
+ this_marker.cM = row_items[2]
+ this_marker.Mb = row_items[3]
+ genotypes = row_items[4:]
+ elif self.cm_exists:
+ this_marker.cM = row_items[2]
+ genotypes = row_items[3:]
+ elif self.mb_exists:
+ this_marker.Mb = row_items[2]
+ genotypes = row_items[3:]
+ else:
+ genotypes = row_items[2:]
+ for item_count, genotype in enumerate(genotypes):
+ if genotype.upper() in self.configurations:
+ this_marker.genotypes.append(self.configurations[genotype.upper()])
+ else:
+ this_marker.genotypes.append("NA")
+
+ #print("this_marker is:", pf(this_marker.__dict__))
+ #if this_marker.chr == "14":
+ self.markers.append(this_marker.__dict__)
+
+ with open(self.output_file, 'w') as fh:
+ json.dump(self.markers, fh, indent=" ", sort_keys=True)
+
+ # print('configurations:', str(configurations))
+ #self.latest_col_pos = item_count + self.skipped_cols
+ #self.latest_col_value = item
+
+ #if item_count != 0:
+ # self.output_fh.write(" ")
+ #self.output_fh.write(self.configurations[item.upper()])
+
+ #self.output_fh.write("\n")
+
+
+ def process_rows(self):
+ for self.latest_row_pos, row in enumerate(self.input_fh):
+ #if self.input_file.endswith(".geno.gz"):
+ # print("row: ", row)
+ self.latest_row_value = row
+ # Take care of headers
+ if not row.strip():
+ continue
+ if row.startswith('#'):
+ continue
+ if row.startswith('Chr'):
+ if 'Mb' in row.split():
+ self.mb_exists = True
+ if 'cM' in row.split():
+ self.cm_exists = True
+ continue
+ if row.startswith('@'):
+ key, _separater, value = row.partition(':')
+ key = key.strip()
+ value = value.strip()
+ if key in self.haplotype_notation:
+ self.configurations[value] = self.haplotype_notation[key]
+ continue
+ if not len(self.configurations):
+ raise EmptyConfigurations
+ yield row
+
+ @classmethod
+ def process_all(cls, old_directory, new_directory):
+ os.chdir(old_directory)
+ for input_file in glob.glob("*"):
+ if not input_file.endswith(('geno', '.geno.gz')):
+ continue
+ group_name = ".".join(input_file.split('.')[:-1])
+ output_file = os.path.join(new_directory, group_name + ".json")
+ print("%s -> %s" % (
+ os.path.join(old_directory, input_file), output_file))
+ convertob = ConvertGenoFile(input_file, output_file)
+ try:
+ convertob.convert()
+ except EmptyConfigurations as why:
+ print(" No config info? Continuing...")
+ #excepted = True
+ continue
+ except Exception as why:
+
+ print(" Exception:", why)
+ print(traceback.print_exc())
+ print(" Found in row %s at tabular column %s" % (convertob.latest_row_pos,
+ convertob.latest_col_pos))
+ print(" Column is:", convertob.latest_col_value)
+ print(" Row is:", convertob.latest_row_value)
+ break
+
+ #def process_snps_file(cls, snps_file, new_directory):
+ # output_file = os.path.join(new_directory, "mouse_families.json")
+ # print("%s -> %s" % (snps_file, output_file))
+ # convertob = ConvertGenoFile(input_file, output_file)
+
+
+
+if __name__=="__main__":
+ Old_Geno_Directory = """/export/local/home/zas1024/gn2-zach/genotype_files/genotype"""
+ New_Geno_Directory = """/export/local/home/zas1024/gn2-zach/genotype_files/genotype/json"""
+ #Input_File = """/home/zas1024/gene/genotype_files/genotypes/BXD.geno"""
+ #Output_File = """/home/zas1024/gene/wqflask/wqflask/pylmm/data/bxd.snps"""
+ #convertob = ConvertGenoFile("/home/zas1024/gene/genotype_files/genotypes/SRxSHRSPF2.geno", "/home/zas1024/gene/genotype_files/new_genotypes/SRxSHRSPF2.json")
+ #convertob.convert()
+ ConvertGenoFile.process_all(Old_Geno_Directory, New_Geno_Directory)
+ #ConvertGenoFiles(Geno_Directory)
+
+ #process_csv(Input_File, Output_File) \ No newline at end of file
diff --git a/wqflask/maintenance/get_group_samplelists.py b/wqflask/maintenance/get_group_samplelists.py
index 04e94886..fb22898a 100644
--- a/wqflask/maintenance/get_group_samplelists.py
+++ b/wqflask/maintenance/get_group_samplelists.py
@@ -6,16 +6,6 @@ import gzip
from base import webqtlConfig
-def process_genofiles(geno_dir=webqtlConfig.GENODIR):
- print("Yabba")
- #sys.exit("Dabba")
- os.chdir(geno_dir)
- for geno_file in glob.glob("*"):
- if geno_file.lower().endswith(('.geno', '.geno.gz')):
- #group_name = genofilename.split('.')[0]
- sample_list = get_samplelist(geno_file)
-
-
def get_samplelist(file_type, geno_file):
if file_type == "geno":
return get_samplelist_from_geno(geno_file)
@@ -37,7 +27,7 @@ def get_samplelist_from_geno(genofilename):
continue
break
- headers = line.split()
+ headers = line.split("\t")
if headers[3] == "Mb":
samplelist = headers[4:]
diff --git a/wqflask/maintenance/quantile_normalize.py b/wqflask/maintenance/quantile_normalize.py
new file mode 100644
index 00000000..41a3aad8
--- /dev/null
+++ b/wqflask/maintenance/quantile_normalize.py
@@ -0,0 +1,129 @@
+from __future__ import absolute_import, print_function, division
+
+import sys
+sys.path.insert(0,'./')
+
+from itertools import izip
+
+import MySQLdb
+import urlparse
+
+import numpy as np
+import pandas as pd
+from elasticsearch import Elasticsearch, TransportError
+from elasticsearch.helpers import bulk
+
+from flask import Flask, g, request
+
+from wqflask import app
+from utility.elasticsearch_tools import get_elasticsearch_connection
+from utility.tools import ELASTICSEARCH_HOST, ELASTICSEARCH_PORT, SQL_URI
+
+def parse_db_uri():
+ """Converts a database URI to the db name, host name, user name, and password"""
+
+ parsed_uri = urlparse.urlparse(SQL_URI)
+
+ db_conn_info = dict(
+ db = parsed_uri.path[1:],
+ host = parsed_uri.hostname,
+ user = parsed_uri.username,
+ passwd = parsed_uri.password)
+
+ print(db_conn_info)
+ return db_conn_info
+
+def create_dataframe(input_file):
+ with open(input_file) as f:
+ ncols = len(f.readline().split("\t"))
+
+ input_array = np.loadtxt(open(input_file, "rb"), delimiter="\t", skiprows=1, usecols=range(1, ncols))
+ return pd.DataFrame(input_array)
+
+#This function taken from https://github.com/ShawnLYU/Quantile_Normalize
+def quantileNormalize(df_input):
+ df = df_input.copy()
+ #compute rank
+ dic = {}
+ for col in df:
+ dic.update({col : sorted(df[col])})
+ sorted_df = pd.DataFrame(dic)
+ rank = sorted_df.mean(axis = 1).tolist()
+ #sort
+ for col in df:
+ t = np.searchsorted(np.sort(df[col]), df[col])
+ df[col] = [rank[i] for i in t]
+ return df
+
+def set_data(dataset_name):
+ orig_file = "/home/zas1024/cfw_data/" + dataset_name + ".txt"
+
+ sample_list = []
+ with open(orig_file, 'r') as orig_fh, open('/home/zas1024/cfw_data/quant_norm.csv', 'r') as quant_fh:
+ for i, (line1, line2) in enumerate(izip(orig_fh, quant_fh)):
+ trait_dict = {}
+ sample_list = []
+ if i == 0:
+ sample_names = line1.split('\t')[1:]
+ else:
+ trait_name = line1.split('\t')[0]
+ for i, sample in enumerate(sample_names):
+ this_sample = {
+ "name": sample,
+ "value": line1.split('\t')[i+1],
+ "qnorm": line2.split('\t')[i+1]
+ }
+ sample_list.append(this_sample)
+ query = """SELECT Species.SpeciesName, InbredSet.InbredSetName, ProbeSetFreeze.FullName
+ FROM Species, InbredSet, ProbeSetFreeze, ProbeFreeze, ProbeSetXRef, ProbeSet
+ WHERE Species.Id = InbredSet.SpeciesId and
+ InbredSet.Id = ProbeFreeze.InbredSetId and
+ ProbeFreeze.Id = ProbeSetFreeze.ProbeFreezeId and
+ ProbeSetFreeze.Name = '%s' and
+ ProbeSetFreeze.Id = ProbeSetXRef.ProbeSetFreezeId and
+ ProbeSetXRef.ProbeSetId = ProbeSet.Id and
+ ProbeSet.Name = '%s'""" % (dataset_name, line1.split('\t')[0])
+ Cursor.execute(query)
+ result_info = Cursor.fetchone()
+
+ yield {
+ "_index": "traits",
+ "_type": "trait",
+ "_source": {
+ "name": trait_name,
+ "species": result_info[0],
+ "group": result_info[1],
+ "dataset": dataset_name,
+ "dataset_fullname": result_info[2],
+ "samples": sample_list,
+ "transform_types": "qnorm"
+ }
+ }
+
+if __name__ == '__main__':
+ Conn = MySQLdb.Connect(**parse_db_uri())
+ Cursor = Conn.cursor()
+
+ #es = Elasticsearch([{
+ # "host": ELASTICSEARCH_HOST, "port": ELASTICSEARCH_PORT
+ #}], timeout=60) if (ELASTICSEARCH_HOST and ELASTICSEARCH_PORT) else None
+
+ es = get_elasticsearch_connection(for_user=False)
+
+ #input_filename = "/home/zas1024/cfw_data/" + sys.argv[1] + ".txt"
+ #input_df = create_dataframe(input_filename)
+ #output_df = quantileNormalize(input_df)
+
+ #output_df.to_csv('quant_norm.csv', sep='\t')
+
+ #out_filename = sys.argv[1][:-4] + '_quantnorm.txt'
+
+ success, _ = bulk(es, set_data(sys.argv[1]))
+
+ response = es.search(
+ index = "traits", doc_type = "trait", body = {
+ "query": { "match": { "name": "ENSMUSG00000028982" } }
+ }
+ )
+
+ print(response) \ No newline at end of file
diff --git a/wqflask/basicStatistics/__init__.py b/wqflask/mock/__init__.py
index e69de29b..e69de29b 100644
--- a/wqflask/basicStatistics/__init__.py
+++ b/wqflask/mock/__init__.py
diff --git a/wqflask/mock/es_double.py b/wqflask/mock/es_double.py
new file mode 100644
index 00000000..6ef8a1b9
--- /dev/null
+++ b/wqflask/mock/es_double.py
@@ -0,0 +1,15 @@
+class ESDouble(object):
+ def __init__(self):
+ self.items = {}
+
+ def ping(self):
+ return true
+
+ def create(self, index, doc_type, body, id):
+ self.items["index"] = {doc_type: {"id": id, "_source": data}}
+
+ def search(self, index, doc_type, body):
+ return {
+ "hits": {
+ "hits": self.items[index][doc_type][body]
+ }}
diff --git a/wqflask/other_config/dot.pylintrc b/wqflask/other_config/dot.pylintrc
deleted file mode 100644
index 2774300a..00000000
--- a/wqflask/other_config/dot.pylintrc
+++ /dev/null
@@ -1,249 +0,0 @@
-[MASTER]
-
-# Specify a configuration file.
-#rcfile=
-
-# Python code to execute, usually for sys.path manipulation such as
-# pygtk.require().
-#init-hook=
-
-# Profiled execution.
-profile=no
-
-# Add files or directories to the blacklist. They should be base names, not
-# paths.
-ignore=CVS
-
-# Pickle collected data for later comparisons.
-persistent=yes
-
-# List of plugins (as comma separated values of python modules names) to load,
-# usually to register additional checkers.
-load-plugins=
-
-
-[MESSAGES CONTROL]
-
-# Enable the message, report, category or checker with the given id(s). You can
-# either give multiple identifier separated by comma (,) or put this option
-# multiple time.
-#enable=
-
-# Disable the message, report, category or checker with the given id(s). You
-# can either give multiple identifier separated by comma (,) or put this option
-# multiple time (only on the command line, not in the configuration file where
-# it should appear only once).
-#disable=
-
-
-[REPORTS]
-
-# Set the output format. Available formats are text, parseable, colorized, msvs
-# (visual studio) and html
-output-format=colorized
-
-# Include message's id in output
-include-ids=no
-
-# Put messages in a separate file for each module / package specified on the
-# command line instead of printing them on stdout. Reports (if any) will be
-# written in a file name "pylint_global.[txt|html]".
-files-output=no
-
-# Tells whether to display a full report or only the messages
-reports=yes
-
-# Python expression which should return a note less than 10 (10 is the highest
-# note). You have access to the variables errors warning, statement which
-# respectively contain the number of errors / warnings messages and the total
-# number of statements analyzed. This is used by the global evaluation report
-# (RP0004).
-evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
-
-# Add a comment according to your evaluation note. This is used by the global
-# evaluation report (RP0004).
-comment=no
-
-
-[MISCELLANEOUS]
-
-# List of note tags to take in consideration, separated by a comma.
-notes=FIXME,XXX,TODO
-
-
-[TYPECHECK]
-
-# Tells whether missing members accessed in mixin class should be ignored. A
-# mixin class is detected if its name ends with "mixin" (case insensitive).
-ignore-mixin-members=yes
-
-# List of classes names for which member attributes should not be checked
-# (useful for classes with attributes dynamically set).
-ignored-classes=SQLObject
-
-# When zope mode is activated, add a predefined set of Zope acquired attributes
-# to generated-members.
-zope=no
-
-# List of members which are set dynamically and missed by pylint inference
-# system, and so shouldn't trigger E0201 when accessed. Python regular
-# expressions are accepted.
-generated-members=REQUEST,acl_users,aq_parent
-
-
-[SIMILARITIES]
-
-# Minimum lines number of a similarity.
-min-similarity-lines=4
-
-# Ignore comments when computing similarities.
-ignore-comments=yes
-
-# Ignore docstrings when computing similarities.
-ignore-docstrings=yes
-
-
-[BASIC]
-
-# Required attributes for module, separated by a comma
-required-attributes=
-
-# List of builtins function names that should not be used, separated by a comma
-bad-functions=map,filter,apply,input
-
-# Regular expression which should only match correct module names
-module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
-
-# Regular expression which should only match correct module level names
-const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$
-
-# Regular expression which should only match correct class names
-class-rgx=[A-Z_][a-zA-Z0-9]+$
-
-# Regular expression which should only match correct function names
-function-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression which should only match correct method names
-method-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression which should only match correct instance attribute names
-attr-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression which should only match correct argument names
-argument-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression which should only match correct variable names
-variable-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression which should only match correct list comprehension /
-# generator expression variable names
-inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
-
-# Good variable names which should always be accepted, separated by a comma
-good-names=i,j,k,ex,Run,_
-
-# Bad variable names which should always be refused, separated by a comma
-bad-names=foo,bar,baz,toto,tutu,tata
-
-# Regular expression which should only match functions or classes name which do
-# not require a docstring
-no-docstring-rgx=__.*__
-
-
-[VARIABLES]
-
-# Tells whether we should check for unused import in __init__ files.
-init-import=no
-
-# A regular expression matching the beginning of the name of dummy variables
-# (i.e. not used).
-dummy-variables-rgx=_|dummy
-
-# List of additional names supposed to be defined in builtins. Remember that
-# you should avoid to define new builtins when possible.
-additional-builtins=
-
-
-[FORMAT]
-
-# Maximum number of characters on a single line.
-max-line-length=100
-
-# Maximum number of lines in a module
-max-module-lines=1000
-
-# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
-# tab).
-indent-string=' '
-
-
-[IMPORTS]
-
-# Deprecated modules which should not be used, separated by a comma
-deprecated-modules=regsub,string,TERMIOS,Bastion,rexec
-
-# Create a graph of every (i.e. internal and external) dependencies in the
-# given file (report RP0402 must not be disabled)
-import-graph=
-
-# Create a graph of external dependencies in the given file (report RP0402 must
-# not be disabled)
-ext-import-graph=
-
-# Create a graph of internal dependencies in the given file (report RP0402 must
-# not be disabled)
-int-import-graph=
-
-
-[DESIGN]
-
-# Maximum number of arguments for function / method
-max-args=5
-
-# Argument names that match this expression will be ignored. Default to name
-# with leading underscore
-ignored-argument-names=_.*
-
-# Maximum number of locals for function / method body
-max-locals=15
-
-# Maximum number of return / yield for function / method body
-max-returns=6
-
-# Maximum number of branch for function / method body
-max-branchs=12
-
-# Maximum number of statements in function / method body
-max-statements=50
-
-# Maximum number of parents for a class (see R0901).
-max-parents=7
-
-# Maximum number of attributes for a class (see R0902).
-max-attributes=7
-
-# Minimum number of public methods for a class (see R0903).
-min-public-methods=2
-
-# Maximum number of public methods for a class (see R0904).
-max-public-methods=20
-
-
-[CLASSES]
-
-# List of interface methods to ignore, separated by a comma. This is used for
-# instance to not check methods defines in Zope's Interface base class.
-ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by
-
-# List of method names used to declare (i.e. assign) instance attributes.
-defining-attr-methods=__init__,__new__,setUp
-
-# List of valid names for the first argument in a class method.
-valid-classmethod-first-arg=cls
-
-
-[EXCEPTIONS]
-
-# Exceptions that will emit a warning when being caught. Defaults to
-# "Exception"
-overgeneral-exceptions=Exception
diff --git a/wqflask/other_config/nginx-old.conf b/wqflask/other_config/nginx-old.conf
deleted file mode 100644
index 65ee768c..00000000
--- a/wqflask/other_config/nginx-old.conf
+++ /dev/null
@@ -1,108 +0,0 @@
-
-#user nobody;
-worker_processes 1;
-
-#error_log logs/error.log;
-#error_log logs/error.log notice;
-#error_log logs/error.log info;
-
-#pid logs/nginx.pid;
-
-
-events {
- worker_connections 1024;
-}
-
-
-http {
- include mime.types;
- default_type application/octet-stream;
-
- #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
- # '$status $body_bytes_sent "$http_referer" '
- # '"$http_user_agent" "$http_x_forwarded_for"';
-
- #access_log logs/access.log main;
-
- sendfile on;
- #tcp_nopush on;
-
- #keepalive_timeout 0;
- keepalive_timeout 65;
-
- gzip on;
-
- server {
- # Modeled after http://flask.pocoo.org/docs/deploying/wsgi-standalone/
- listen 80;
-
- server_name _;
-
- access_log /var/log/nginx/access.log;
- error_log /var/log/nginx/error.log;
-
- location ^~ /css/ {
- root /home/sam/gene/wqflask/wqflask/static/;
- }
-
- location ^~ /javascript/ {
- root /home/sam/gene/wqflask/wqflask/static/;
- }
-
-# location ^~ /image/ {
-# root /home/sam/gene/wqflask/wqflask/static/;
-# }
-
- location ^~ /images/ {
- root /home/sam/gene/wqflask/wqflask/static/;
- }
-
- location / {
- proxy_pass http://127.0.0.1:5000/;
- proxy_redirect off;
-
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
- }
-
- }
-
-
- # another virtual host using mix of IP-, name-, and port-based configuration
- #
- #server {
- # listen 8000;
- # listen somename:8080;
- # server_name somename alias another.alias;
-
- # location / {
- # root html;
- # index index.html index.htm;
- # }
- #}
-
-
- # HTTPS server
- #
- #server {
- # listen 443;
- # server_name localhost;
-
- # ssl on;
- # ssl_certificate cert.pem;
- # ssl_certificate_key cert.key;
-
- # ssl_session_timeout 5m;
-
- # ssl_protocols SSLv2 SSLv3 TLSv1;
- # ssl_ciphers HIGH:!aNULL:!MD5;
- # ssl_prefer_server_ciphers on;
-
- # location / {
- # root html;
- # index index.html index.htm;
- # }
- #}
-
-}
diff --git a/wqflask/other_config/nginx_conf/gn2-zach.conf b/wqflask/other_config/nginx_conf/gn2-zach.conf
deleted file mode 100644
index 38347292..00000000
--- a/wqflask/other_config/nginx_conf/gn2-zach.conf
+++ /dev/null
@@ -1,52 +0,0 @@
-server {
- # Modeled after http://flask.pocoo.org/docs/deploying/wsgi-standalone/
- listen 80;
-
- server_name gn2-zach.genenetwork.org;
-
- access_log /var/log/nginx/access.log;
- error_log /var/log/nginx/error.log;
-
- location ^~ /css/ {
- root /gene/wqflask/wqflask/static/;
- }
-
- location ^~ /javascript/ {
- root /gene/wqflask/wqflask/static/;
- }
-
-# location ^~ /image/ {
-# root /gene/wqflask/wqflask/static/;
-# }
-
- location ^~ /images/ {
- root /gene/wqflask/wqflask/static/;
- }
-
- ### New - added by Sam
- #location ^~ /static/ {
- # root /gene/wqflask/wqflask/static/;
- #}
-
- location /plink_gemma/ {
- root /home/zas1024/gene/wqflask/wqflask/;
- autoindex on;
- }
-
- location /download/ {
- root /home/zas1024/gene/wqflask/wqflask/;
- autoindex on;
- }
-
- location / {
- proxy_pass http://127.0.0.1:5002/;
- proxy_redirect off;
-
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-
- proxy_read_timeout 40m;
- }
-}
-
diff --git a/wqflask/other_config/nginx_conf/gn2.conf b/wqflask/other_config/nginx_conf/gn2.conf
deleted file mode 100644
index a51b4113..00000000
--- a/wqflask/other_config/nginx_conf/gn2.conf
+++ /dev/null
@@ -1,41 +0,0 @@
-server {
- # Modeled after http://flask.pocoo.org/docs/deploying/wsgi-standalone/
- listen 80;
-
- server_name gn2.genenetwork.org;
-
- access_log /var/log/nginx/access.log;
- error_log /var/log/nginx/error.log;
-
- location ^~ /css/ {
- root /gene/wqflask/wqflask/static/;
- }
-
- location ^~ /javascript/ {
- root /gene/wqflask/wqflask/static/;
- }
-
-# location ^~ /image/ {
-# root /gene/wqflask/wqflask/static/;
-# }
-
- location ^~ /images/ {
- root /gene/wqflask/wqflask/static/;
- }
-
- ### New - added by Sam
- #location ^~ /static/ {
- # root /gene/wqflask/wqflask/static/;
- #}
-
- location / {
- proxy_pass http://127.0.0.1:5000/;
- proxy_redirect off;
-
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-
- proxy_read_timeout 40m;
- }
-}
diff --git a/wqflask/other_config/nginx_conf/gn2_lei.conf b/wqflask/other_config/nginx_conf/gn2_lei.conf
deleted file mode 100644
index 6589d298..00000000
--- a/wqflask/other_config/nginx_conf/gn2_lei.conf
+++ /dev/null
@@ -1,41 +0,0 @@
-server {
- # Modeled after http://flask.pocoo.org/docs/deploying/wsgi-standalone/
- listen 80;
-
- server_name gn2_lei.genenetwork.org;
-
- access_log /var/log/nginx/lei_access.log;
- error_log /var/log/nginx/lei_error.log;
-
- location ^~ /css/ {
- root /gene/wqflask/wqflask/static/;
- }
-
- location ^~ /javascript/ {
- root /gene/wqflask/wqflask/static/;
- }
-
-# location ^~ /image/ {
-# root /gene/wqflask/wqflask/static/;
-# }
-
- location ^~ /images/ {
- root /gene/wqflask/wqflask/static/;
- }
-
- ### New - added by Sam
- #location ^~ /static/ {
- # root /gene/wqflask/wqflask/static/;
- #}
-
- location / {
- proxy_pass http://127.0.0.1:5001/;
- proxy_redirect off;
-
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-
- proxy_read_timeout 40m;
- }
-}
diff --git a/wqflask/other_config/nginx_conf/gn2_sam.conf b/wqflask/other_config/nginx_conf/gn2_sam.conf
deleted file mode 100644
index f9abbbd2..00000000
--- a/wqflask/other_config/nginx_conf/gn2_sam.conf
+++ /dev/null
@@ -1,42 +0,0 @@
-server {
- # Modeled after http://flask.pocoo.org/docs/deploying/wsgi-standalone/
- listen 80;
-
- server_name gn2_sam.genenetwork.org;
-
- access_log /var/log/nginx/access.log;
- error_log /var/log/nginx/error.log;
-
- location ^~ /css/ {
- root /gene/wqflask/wqflask/static/;
- }
-
- location ^~ /javascript/ {
- root /gene/wqflask/wqflask/static/;
- }
-
-# location ^~ /image/ {
-# root /gene/wqflask/wqflask/static/;
-# }
-
- location ^~ /images/ {
- root /gene/wqflask/wqflask/static/;
- }
-
- ### New - added by Sam
- #location ^~ /static/ {
- # root /gene/wqflask/wqflask/static/;
- #}
-
- location / {
- proxy_pass http://127.0.0.1:5005/;
- proxy_redirect off;
-
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-
- proxy_read_timeout 40m;
- }
-}
-
diff --git a/wqflask/other_config/nginx_conf/penguin.conf b/wqflask/other_config/nginx_conf/penguin.conf
deleted file mode 100644
index c819951c..00000000
--- a/wqflask/other_config/nginx_conf/penguin.conf
+++ /dev/null
@@ -1,44 +0,0 @@
-server {
- # Modeled after http://flask.pocoo.org/docs/deploying/wsgi-standalone/
-
- client_max_body_size 20M;
- listen 80;
-
- server_name penguin.uthsc.edu;
-
- access_log /var/log/nginx/access.log;
- error_log /var/log/nginx/error.log;
-
- location ^~ /css/ {
- root /gene/wqflask/wqflask/static/;
- }
-
- location ^~ /javascript/ {
- root /gene/wqflask/wqflask/static/;
- }
-
-# location ^~ /image/ {
-# root /gene/wqflask/wqflask/static/;
-# }
-
- location ^~ /images/ {
- root /gene/wqflask/wqflask/static/;
- }
-
- ### New - added by Sam
- #location ^~ /static/ {
- # root /gene/wqflask/wqflask/static/;
- #}
-
- location / {
- proxy_pass http://127.0.0.1:5000/;
- proxy_redirect off;
-
- proxy_set_header Host $host;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
-
- proxy_read_timeout 40m;
- }
-}
-
diff --git a/wqflask/other_config/pylintrc b/wqflask/other_config/pylintrc
deleted file mode 100644
index b23af7a4..00000000
--- a/wqflask/other_config/pylintrc
+++ /dev/null
@@ -1,264 +0,0 @@
-[MASTER]
-
-# Specify a configuration file.
-#rcfile=
-
-# Python code to execute, usually for sys.path manipulation such as
-# pygtk.require().
-#init-hook=
-
-# Profiled execution.
-profile=no
-
-# Add files or directories to the blacklist. They should be base names, not
-# paths.
-ignore=CVS
-
-# Pickle collected data for later comparisons.
-persistent=yes
-
-# List of plugins (as comma separated values of python modules names) to load,
-# usually to register additional checkers.
-load-plugins=
-
-
-[MESSAGES CONTROL]
-
-# Enable the message, report, category or checker with the given id(s). You can
-# either give multiple identifier separated by comma (,) or put this option
-# multiple time. See also the "--disable" option for examples.
-#enable=
-
-# Disable the message, report, category or checker with the given id(s). You
-# can either give multiple identifiers separated by comma (,) or put this
-# option multiple times (only on the command line, not in the configuration
-# file where it should appear only once).You can also use "--disable=all" to
-# disable everything first and then reenable specific checks. For example, if
-# you want to run only the similarities checker, you can use "--disable=all
-# --enable=similarities". If you want to run only the classes checker, but have
-# no Warning level messages displayed, use"--disable=all --enable=classes
-# --disable=W"
-disable=no-init, star-args, no-member, import-error
-
-
-[REPORTS]
-
-# Set the output format. Available formats are text, parseable, colorized, msvs
-# (visual studio) and html. You can also give a reporter class, eg
-# mypackage.mymodule.MyReporterClass.
-output-format=text
-
-# Include message's id in output
-include-ids=no
-
-# Include symbolic ids of messages in output
-symbols=no
-
-# Put messages in a separate file for each module / package specified on the
-# command line instead of printing them on stdout. Reports (if any) will be
-# written in a file name "pylint_global.[txt|html]".
-files-output=no
-
-# Tells whether to display a full report or only the messages
-reports=yes
-
-# Python expression which should return a note less than 10 (10 is the highest
-# note). You have access to the variables errors warning, statement which
-# respectively contain the number of errors / warnings messages and the total
-# number of statements analyzed. This is used by the global evaluation report
-# (RP0004).
-evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
-
-# Add a comment according to your evaluation note. This is used by the global
-# evaluation report (RP0004).
-comment=no
-
-
-[SIMILARITIES]
-
-# Minimum lines number of a similarity.
-min-similarity-lines=4
-
-# Ignore comments when computing similarities.
-ignore-comments=yes
-
-# Ignore docstrings when computing similarities.
-ignore-docstrings=yes
-
-# Ignore imports when computing similarities.
-ignore-imports=no
-
-
-[VARIABLES]
-
-# Tells whether we should check for unused import in __init__ files.
-init-import=no
-
-# A regular expression matching the beginning of the name of dummy variables
-# (i.e. not used).
-dummy-variables-rgx=_|dummy
-
-# List of additional names supposed to be defined in builtins. Remember that
-# you should avoid to define new builtins when possible.
-additional-builtins=
-
-
-[BASIC]
-
-# Required attributes for module, separated by a comma
-required-attributes=
-
-# List of builtins function names that should not be used, separated by a comma
-bad-functions=map,filter,apply,input
-
-# Regular expression which should only match correct module names
-module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$
-
-# Regular expression which should only match correct module level names
-const-rgx=(([A-Z_][A-Za-z0-9_]*)|(__.*__))$
-
-# Regular expression which should only match correct class names
-class-rgx=[A-Z_][a-zA-Z0-9]+$
-
-# Regular expression which should only match correct function names
-function-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression which should only match correct method names
-method-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression which should only match correct instance attribute names
-attr-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression which should only match correct argument names
-argument-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression which should only match correct variable names
-variable-rgx=[a-z_][a-z0-9_]{2,30}$
-
-# Regular expression which should only match correct list comprehension /
-# generator expression variable names
-inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$
-
-# Good variable names which should always be accepted, separated by a comma
-good-names=i,j,k,ex,Run,_
-
-# Bad variable names which should always be refused, separated by a comma
-bad-names=foo,bar,baz,toto,tutu,tata
-
-# Regular expression which should only match functions or classes name which do
-# not require a docstring
-no-docstring-rgx=__.*__
-
-
-[FORMAT]
-
-# Maximum number of characters on a single line.
-max-line-length=100
-
-# Maximum number of lines in a module
-max-module-lines=1000
-
-# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1
-# tab).
-indent-string=' '
-
-
-[MISCELLANEOUS]
-
-# List of note tags to take in consideration, separated by a comma.
-notes=FIXME,XXX,TODO
-
-
-[TYPECHECK]
-
-# Tells whether missing members accessed in mixin class should be ignored. A
-# mixin class is detected if its name ends with "mixin" (case insensitive).
-ignore-mixin-members=yes
-
-# List of classes names for which member attributes should not be checked
-# (useful for classes with attributes dynamically set).
-ignored-classes=SQLObject
-
-# When zope mode is activated, add a predefined set of Zope acquired attributes
-# to generated-members.
-zope=no
-
-# List of members which are set dynamically and missed by pylint inference
-# system, and so shouldn't trigger E0201 when accessed. Python regular
-# expressions are accepted.
-generated-members=REQUEST,acl_users,aq_parent
-
-
-[DESIGN]
-
-# Maximum number of arguments for function / method
-max-args=5
-
-# Argument names that match this expression will be ignored. Default to name
-# with leading underscore
-ignored-argument-names=_.*
-
-# Maximum number of locals for function / method body
-max-locals=15
-
-# Maximum number of return / yield for function / method body
-max-returns=6
-
-# Maximum number of branch for function / method body
-max-branchs=12
-
-# Maximum number of statements in function / method body
-max-statements=50
-
-# Maximum number of parents for a class (see R0901).
-max-parents=7
-
-# Maximum number of attributes for a class (see R0902).
-max-attributes=7
-
-# Minimum number of public methods for a class (see R0903).
-min-public-methods=2
-
-# Maximum number of public methods for a class (see R0904).
-max-public-methods=20
-
-
-[IMPORTS]
-
-# Deprecated modules which should not be used, separated by a comma
-deprecated-modules=regsub,string,TERMIOS,Bastion,rexec
-
-# Create a graph of every (i.e. internal and external) dependencies in the
-# given file (report RP0402 must not be disabled)
-import-graph=
-
-# Create a graph of external dependencies in the given file (report RP0402 must
-# not be disabled)
-ext-import-graph=
-
-# Create a graph of internal dependencies in the given file (report RP0402 must
-# not be disabled)
-int-import-graph=
-
-
-[CLASSES]
-
-# List of interface methods to ignore, separated by a comma. This is used for
-# instance to not check methods defines in Zope's Interface base class.
-ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by
-
-# List of method names used to declare (i.e. assign) instance attributes.
-defining-attr-methods=__init__,__new__,setUp
-
-# List of valid names for the first argument in a class method.
-valid-classmethod-first-arg=cls
-
-# List of valid names for the first argument in a metaclass class method.
-valid-metaclass-classmethod-first-arg=mcs
-
-
-[EXCEPTIONS]
-
-# Exceptions that will emit a warning when being caught. Defaults to
-# "Exception"
-overgeneral-exceptions=Exception
diff --git a/wqflask/run_gunicorn.py b/wqflask/run_gunicorn.py
new file mode 100644
index 00000000..adffdca3
--- /dev/null
+++ b/wqflask/run_gunicorn.py
@@ -0,0 +1,22 @@
+# Run with gunicorn, see ./bin/genenetwork2 for an example
+#
+# Run standalone with
+#
+# ./bin/genenetwork2 ./etc/default_settings.py -c run_gunicorn.py
+
+# from flask import Flask
+# application = Flask(__name__)
+
+print "===> Starting up Gunicorn process"
+
+from wqflask import app
+from utility.startup_config import app_config
+
+app_config()
+
+@app.route("/gunicorn")
+def hello():
+ return "<h1 style='color:blue'>Hello There!</h1>"
+
+if __name__ == "__main__":
+ app.run(host='0.0.0.0')
diff --git a/wqflask/runserver.py b/wqflask/runserver.py
index 0342b7ad..7c06356b 100644
--- a/wqflask/runserver.py
+++ b/wqflask/runserver.py
@@ -1,5 +1,7 @@
# Starts the webserver with the ./bin/genenetwork2 command
#
+# This uses Werkzeug WSGI, see ./run_gunicorn.py for the alternative
+#
# Please note, running with host set externally below combined with
# debug mode is a security risk unless you have a firewall setup, e.g.
#
@@ -11,25 +13,25 @@ import logging
import utility.logger
logger = utility.logger.getLogger(__name__ )
+import signal
+signal.signal(signal.SIGPIPE, signal.SIG_DFL)
+
BLUE = '\033[94m'
GREEN = '\033[92m'
BOLD = '\033[1m'
ENDC = '\033[0m'
-import os
-app.config['SECRET_KEY'] = os.urandom(24)
-
-from utility.tools import WEBSERVER_MODE,get_setting_int
+from utility.startup_config import app_config
-port = get_setting_int("SERVER_PORT")
-
-logger.info("GN2 is running. Visit %shttp://localhost:%s/%s" % (BLUE,port,ENDC))
+app_config()
werkzeug_logger = logging.getLogger('werkzeug')
+from utility.tools import WEBSERVER_MODE, SERVER_PORT
+
if WEBSERVER_MODE == 'DEBUG':
app.run(host='0.0.0.0',
- port=port,
+ port=SERVER_PORT,
debug=True,
use_debugger=False,
threaded=False,
@@ -38,7 +40,7 @@ if WEBSERVER_MODE == 'DEBUG':
elif WEBSERVER_MODE == 'DEV':
werkzeug_logger.setLevel(logging.WARNING)
app.run(host='0.0.0.0',
- port=port,
+ port=SERVER_PORT,
debug=False,
use_debugger=False,
threaded=False,
@@ -46,9 +48,9 @@ elif WEBSERVER_MODE == 'DEV':
use_reloader=True)
else: # staging/production modes
app.run(host='0.0.0.0',
- port=port,
+ port=SERVER_PORT,
debug=False,
use_debugger=False,
threaded=True,
- processes=8,
+ processes=0,
use_reloader=True)
diff --git a/wqflask/utility/AJAX_table.py b/wqflask/utility/AJAX_table.py
deleted file mode 100644
index d70acfcd..00000000
--- a/wqflask/utility/AJAX_table.py
+++ /dev/null
@@ -1,155 +0,0 @@
-# Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
-#
-# This program is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Affero General Public License
-# as published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the GNU Affero General Public License for more details.
-#
-# This program is available from Source Forge: at GeneNetwork Project
-# (sourceforge.net/projects/genenetwork/).
-#
-# Contact Drs. Robert W. Williams and Xiaodong Zhou (2010)
-# at rwilliams@uthsc.edu and xzhou15@uthsc.edu
-#
-#
-#
-# This module is used by GeneNetwork project (www.genenetwork.org)
-#
-# Created by GeneNetwork Core Team 2010/08/10
-#
-# Last updated by GeneNetwork Core Team 2010/10/20
-
-import cPickle
-import os
-import MySQLdb
-import time
-import pyXLWriter as xl
-
-from htmlgen import HTMLgen2 as HT
-
-from base import webqtlConfig
-from THCell import THCell
-from TDCell import TDCell
-import webqtlUtil
-
-
-class AJAX_table:
- def __init__(self, fd):
- file = fd.formdata.getfirst("file", "")
- sort = fd.formdata.getfirst("sort", "")
- order = fd.formdata.getfirst("order", "up")
- cmd = fd.formdata.getfirst("cmd", "")
- tableID = fd.formdata.getfirst("tableID", "")
- addIndex = fd.formdata.getfirst("addIndex", "1")
- hiddenColumnsString = fd.formdata.getfirst("hiddenColumns", "")
- hiddenColumns = hiddenColumnsString.split(',')
-
- try:
- fp = open(os.path.join(webqtlConfig.TMPDIR, file + '.obj'), 'rb')
- tblobj = cPickle.load(fp)
- fp.close()
-
- if cmd == 'addCorr':
- dbId = int(fd.formdata.getfirst("db"))
- dbFullName = fd.formdata.getfirst("dbname")
- trait = fd.formdata.getfirst("trait")
- form = fd.formdata.getfirst("form")
- ids = fd.formdata.getfirst("ids")
- vals = fd.formdata.getfirst("vals")
- ids = eval(ids)
- nnCorr = len(ids)
- vals = eval(vals)
-
- workbook = xl.Writer('%s.xls' % (webqtlConfig.TMPDIR+file))
- worksheet = workbook.add_worksheet()
-
- logger.warning("Creating new MySQLdb cursor (this method is OBSOLETE!)")
-
- con = MySQLdb.Connect(db=webqtlConfig.DB_NAME,host=webqtlConfig.MYSQL_SERVER, user=webqtlConfig.DB_USER,passwd=webqtlConfig.DB_PASSWD)
- cursor = con.cursor()
-
- cursor.execute("Select name, ShortName from ProbeSetFreeze where Id = %s", dbId)
- dbName, dbShortName = cursor.fetchone()
-
- tblobj['header'][0].append(
- THCell(HT.TD(dbShortName, Class="fs11 ffl b1 cw cbrb"),
- text="%s" % dbShortName, idx=tblobj['header'][0][-1].idx + 1),
- )
-
- headingStyle = workbook.add_format(align = 'center', bold = 1, border = 1, size=13, fg_color = 0x1E, color="white")
- for i, item in enumerate(tblobj['header'][0]):
- if (i > 0):
- worksheet.write([8, i-1], item.text, headingStyle)
- worksheet.set_column([i-1, i-1], 2*len(item.text))
-
- for i, row in enumerate(tblobj['body']):
- ProbeSetId = row[1].text
- #XZ, 03/02/2009: Xiaodong changed Data to ProbeSetData
- cursor.execute("""
- Select ProbeSetData.StrainId, ProbeSetData.Value
- From ProbeSetData, ProbeSetXRef, ProbeSet
- where ProbeSetXRef.ProbeSetFreezeId = %d AND
- ProbeSetXRef.DataId = ProbeSetData.Id AND
- ProbeSetXRef.ProbeSetId = ProbeSet.Id AND
- ProbeSet.Name = '%s'
- """ % (dbId, ProbeSetId))
- results = cursor.fetchall()
- vdict = {}
- for item in results:
- vdict[item[0]] = item[1]
- newvals = []
- for id in ids:
- if vdict.has_key(id):
- newvals.append(vdict[id])
- else:
- newvals.append(None)
- corr,nOverlap= webqtlUtil.calCorrelation(newvals,vals,nnCorr)
- repr = '%0.4f' % corr
- row.append(
- TDCell(HT.TD(HT.Href(text=repr, url="javascript:showCorrPlotThird('%s', '%s', '%s')" % (form, dbName, ProbeSetId), Class="fs11 fwn ffl"), " / ", nOverlap, Class="fs11 fwn ffl b1 c222", align="middle"),repr,abs(corr))
- )
-
- last_row=0
- for j, item in enumerate(tblobj['body'][i]):
- if (j > 0):
- worksheet.write([9+i, j-1], item.text)
- last_row = 9+i
- last_row += 1
-
- titleStyle = workbook.add_format(align = 'left', bold = 0, size=14, border = 1, border_color="gray")
- ##Write title Info
- # Modified by Hongqiang Li
- worksheet.write([0, 0], "Citations: Please see %s/reference.html" % webqtlConfig.PORTADDR, titleStyle)
- worksheet.write([1, 0], "Trait : %s" % trait, titleStyle)
- worksheet.write([2, 0], "Database : %s" % dbFullName, titleStyle)
- worksheet.write([3, 0], "Date : %s" % time.strftime("%B %d, %Y", time.gmtime()), titleStyle)
- worksheet.write([4, 0], "Time : %s GMT" % time.strftime("%H:%M ", time.gmtime()), titleStyle)
- worksheet.write([5, 0], "Status of data ownership: Possibly unpublished data; please see %s/statusandContact.html for details on sources, ownership, and usage of these data." % webqtlConfig.PORTADDR, titleStyle)
- #Write footer info
- worksheet.write([1 + last_row, 0], "Funding for The GeneNetwork: NIAAA (U01AA13499, U24AA13513), NIDA, NIMH, and NIAAA (P20-DA21131), NCI MMHCC (U01CA105417), and NCRR (U01NR 105417)", titleStyle)
- worksheet.write([2 + last_row, 0], "PLEASE RETAIN DATA SOURCE INFORMATION WHENEVER POSSIBLE", titleStyle)
-
- cursor.close()
- workbook.close()
-
- objfile = open(os.path.join(webqtlConfig.TMPDIR, file + '.obj'), 'wb')
- cPickle.dump(tblobj, objfile)
- objfile.close()
- else:
- pass
-
- self.value = str(webqtlUtil.genTableObj(tblobj=tblobj, file=file, sortby=(sort, order), tableID = tableID, addIndex = addIndex, hiddenColumns = hiddenColumns))
-
- except:
- self.value = "<span class='fs16 fwb cr ffl'>The table is no longer available on this server</span>"
-
- def __str__(self):
- return self.value
-
- def write(self):
- return str(self)
diff --git a/wqflask/utility/Plot.py b/wqflask/utility/Plot.py
index d60e2bb2..cce8435d 100644
--- a/wqflask/utility/Plot.py
+++ b/wqflask/utility/Plot.py
@@ -36,11 +36,9 @@ from numarray import linear_algebra as la
from numarray import ones, array, dot, swapaxes
import reaper
-# sys.path.append("..") Never in a running webserver
-from basicStatistics import corestats
-import svg
import webqtlUtil
+import corestats
from base import webqtlConfig
import utility.logger
@@ -83,202 +81,6 @@ def frange(start, end=None, inc=1.0):
L[i] = start + i * inc
return L
-
-def gammln(xx):
- cof=[76.18009173,-86.50532033,24.01409822,-1.231739516,0.120858003e-2,-0.536382e-5]
- x=xx-1.0
- tmp=x+5.5
- tmp -=(x+0.5)*log(tmp)
- ser=1.0
- for item in cof:
- x+=1.0
- ser+=item/x
-
- return -tmp+log(2.50662827465*ser)
-
-
-def gser(a,x):
- gln=gammln(a)
- ITMAX=100
- EPS=3.0e-7
-
- if x<=0.0:
- gamser=0.0
- return [gamser,gln]
- else:
- ap=a
- sum=1.0/a
- dele=sum
- for i in range(1,ITMAX+1):
- ap+=1.0
- dele*=x/ap
- sum+=dele
- if abs(dele)<abs(sum)*EPS:
- gamser=sum*exp(-x+a*log(x)-gln)
- return [gamser,gln]
- return None
-
-def gcf(a,x):
- ITMAX=100
- EPS=3.0e-7
- gold=0.0
- fac=1
- b1=1.0
- b0=0.0
- a0=1.0
- gln=gammln(a)
-
- a1=x
- for n in range(1,ITMAX+1):
- an=n+0.0
- ana=an-a
- a0=(a1+a0*ana)*fac
- b0=(b1+b0*ana)*fac
- anf=an*fac
- a1=x*a0+anf*a1
- b1=x*b0+anf*b1
- if (a1):
- fac=1.0/a1
- g=b1*fac
- if abs((g-gold)/g)<EPS:
- gammcf=exp(-x+a*log(x)-gln)*g
- return [gammcf,gln]
- gold=g
- return None
-
-def gammp(a,x):
- if x<0.0 or a<=0.0:
- return None
- if x<(a+1.0):
- a=gser(a,x)[0]
- return a
- else:
- a=gcf(a,x)[0]
- return 1.0-a
-def U(n):
- x=pow(0.5,1.0/n)
- m=[1-x]
- for i in range(2,n):
- a=(i-0.3175)/(n+0.365)
- m.append(a)
- m.append(x)
- return m
-
-def erf(x):
- if x<0.0:
- return -gammp(0.5,x*x)
- else:
- return gammp(0.5,x*x)
-
-def erfcc(x):
- z=abs(x)
- t=1.0/(1.0+0.5*z)
- ans=t*exp(-z*z-1.26551223+t*(1.00002368+t*(0.37409196+t*(0.09678418+t*(-0.18628806+t*(0.27886807+t*(-1.13520398+t*(1.48851587+t*(-0.82215223+t*0.17087277)))))))))
- if x>=0.0:
- return ans
- else:
- return 2.0-ans
-
-def calMeanVar(data):
- n=len(data)
- if n<2:
- return None
- else:
- sum=reduce(lambda x,y:x+y,data,0.0)
- mean=sum/n
- z=data[:]
- for i in range(n):
- z[i]=z[i]-mean
- variance=reduce(lambda x,y:x+y*y,z,0.0)
- variance /= n-1
- variance =sqrt(variance)
- for i in range(n):
- z[i]=z[i]/variance
- return z
-
-def inverseCumul(p):
- #Coefficients in rational approximations.
- a = [-3.969683028665376e+01,2.209460984245205e+02,-2.759285104469687e+02,1.383577518672690e+02,-3.066479806614716e+01,2.506628277459239e+00]
-
- b = [-5.447609879822406e+01,1.615858368580409e+02,-1.556989798598866e+02,6.680131188771972e+01,-1.328068155288572e+01]
-
- c = [-7.784894002430293e-03,-3.223964580411365e-01,-2.400758277161838e+00,-2.549732539343734e+00,4.374664141464968e+00,2.938163982698783e+00]
-
- d = [7.784695709041462e-03,3.224671290700398e-01,2.445134137142996e+00,3.754408661907416e+00]
-
- #Define break-points.
-
- p_low = 0.02425
- p_high = 1 - p_low
-
- #Rational approximation for lower region.
-
- if p > 0 and p < p_low:
- q = sqrt(-2*log(p))
- x = (((((c[0]*q+c[1])*q+c[2])*q+c[3])*q+c[4])*q+c[5]) / ((((d[0]*q+d[1])*q+d[2])*q+d[3])*q+1)
-
-
- #Rational approximation for central region.
-
- elif p>= p_low and p <= p_high:
- q = p - 0.5
- r = q*q
- x = (((((a[0]*r+a[1])*r+a[2])*r+a[3])*r+a[4])*r+a[5])*q /(((((b[0]*r+b[1])*r+b[2])*r+b[3])*r+b[4])*r+1)
-
- #Rational approximation for upper region.
-
- elif p>p_high and p < 1:
- q = sqrt(-2*log(1-p))
- x = -(((((c[0]*q+c[1])*q+c[2])*q+c[3])*q+c[4])*q+c[5]) /((((d[0]*q+d[1])*q+d[2])*q+d[3])*q+1)
-
- else:
- return None
-
- if p>0 and p < 1:
- e = 0.5 * erfcc(-x/sqrt(2)) - p
- u = e * sqrt(2*pi) * exp(x*x/2)
- x = x - u/(1 + x*u/2)
- return x
- else:
- return None
-
-def gmean(lst):
- N = len(lst)
- if N == 0:
- return 0
- else:
- return (reduce(lambda x,y: x+y, lst, 0.0))/N
-
-def gmedian(lst2):
- lst = lst2[:]
- N = len(lst)
- if N == 0:
- return 0
- else:
- lst.sort()
- if N % 2 == 0:
- return (lst[N/2]+lst[(N-2)/2])/2.0
- else:
- return lst[(N-1)/2]
-
-def gpercentile(lst2, np):
- """Obsolete - use percentile in corestats instead"""
- lst = lst2[:]
- N = len(lst)
- if N == 0 or np > 100 or np < 0:
- return None
- else:
- lst.sort()
- pNadd1 = (np/100.0)*N
- k = int(pNadd1)
- d = pNadd1 - k
- if k == 0:
- return lst[0]
- elif k >= N-1:
- return lst[N-1]
- else:
- return lst[k-1] + d*(lst[k] - lst[k-1])
-
def find_outliers(vals):
"""Calculates the upper and lower bounds of a set of sample/case values
@@ -296,8 +98,6 @@ def find_outliers(vals):
"""
- logger.debug("xerxes vals is:", pf(vals))
-
if vals:
#logger.debug("vals is:", pf(vals))
stats = corestats.Stats(vals)
@@ -312,168 +112,8 @@ def find_outliers(vals):
upper_bound = None
lower_bound = None
- logger.debug(pf(locals()))
return upper_bound, lower_bound
-
-def plotBoxPlot(canvas, data, offset= (40, 40, 40, 40), XLabel="Category", YLabel="Value"):
- xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
- plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
- plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
- iValues = []
- for item in data:
- for item2 in item[1]:
- try:
- iValues.append(item2[1])
- except:
- iValues.append(item2)
-
- #draw frame
- max_Y = max(iValues)
- min_Y = min(iValues)
- scaleY = detScale(min_Y, max_Y)
- Yll = scaleY[0]
- Yur = scaleY[1]
- nStep = scaleY[2]
- stepY = (Yur - Yll)/nStep
- stepYPixel = plotHeight/(nStep)
- canvas.drawRect(plotWidth+xLeftOffset, plotHeight + yTopOffset, xLeftOffset, yTopOffset)
-
- ##draw Y Scale
- YYY = Yll
- YCoord = plotHeight + yTopOffset
- scaleFont=pid.Font(ttf="cour",size=11,bold=1)
- for i in range(nStep+1):
- strY = cformat(d=YYY, rank=0)
- YCoord = max(YCoord, yTopOffset)
- canvas.drawLine(xLeftOffset,YCoord,xLeftOffset-5,YCoord)
- canvas.drawString(strY, xLeftOffset -30,YCoord +5,font=scaleFont)
- YYY += stepY
- YCoord -= stepYPixel
-
- ##draw X Scale
- stepX = plotWidth/len(data)
- XCoord = xLeftOffset + 0.5*stepX
- YCoord = plotHeight + yTopOffset
- scaleFont = pid.Font(ttf="tahoma",size=12,bold=0)
- labelFont = pid.Font(ttf="tahoma",size=13,bold=0)
- for item in data:
- itemname, itemvalue = item
- canvas.drawLine(XCoord, YCoord,XCoord, YCoord+5, color=pid.black)
- canvas.drawString(itemname, XCoord - canvas.stringWidth(itemname,font=labelFont)/2.0,\
- YCoord +20,font=labelFont)
-
- nValue = len(itemvalue)
- catValue = []
- for item2 in itemvalue:
- try:
- tstrain, tvalue = item2
- except:
- tvalue = item2
- if nValue <= 4:
- canvas.drawCross(XCoord, plotHeight + yTopOffset - (tvalue-Yll)*plotHeight/(Yur - Yll), color=pid.red,size=5)
- else:
- catValue.append(tvalue)
- if catValue != []:
- catMean = gmean(catValue)
- catMedian = gmedian(catValue)
- lowHinge = gpercentile(catValue, 25)
- upHinge = gpercentile(catValue, 75)
- Hstep = 1.5*(upHinge - lowHinge)
-
- outlier = []
- extrem = []
-
- upperAdj = None
- for item in catValue:
- if item >= upHinge + 2*Hstep:
- extrem.append(item)
- elif item >= upHinge + Hstep:
- outlier.append(item)
- elif item > upHinge and item < upHinge + Hstep:
- if upperAdj == None or item > upperAdj:
- upperAdj = item
- else:
- pass
- lowerAdj = None
- for item in catValue:
- if item <= lowHinge - 2*Hstep:
- extrem.append(item)
- elif item <= lowHinge - Hstep:
- outlier.append(item)
- if item < lowHinge and item > lowHinge - Hstep:
- if lowerAdj == None or item < lowerAdj:
- lowerAdj = item
- else:
- pass
- canvas.drawRect(XCoord-20, plotHeight + yTopOffset - (lowHinge-Yll)*plotHeight/(Yur - Yll), \
- XCoord+20, plotHeight + yTopOffset - (upHinge-Yll)*plotHeight/(Yur - Yll))
- canvas.drawLine(XCoord-20, plotHeight + yTopOffset - (catMedian-Yll)*plotHeight/(Yur - Yll), \
- XCoord+20, plotHeight + yTopOffset - (catMedian-Yll)*plotHeight/(Yur - Yll))
- if upperAdj != None:
- canvas.drawLine(XCoord, plotHeight + yTopOffset - (upHinge-Yll)*plotHeight/(Yur - Yll), \
- XCoord, plotHeight + yTopOffset - (upperAdj-Yll)*plotHeight/(Yur - Yll))
- canvas.drawLine(XCoord-20, plotHeight + yTopOffset - (upperAdj-Yll)*plotHeight/(Yur - Yll), \
- XCoord+20, plotHeight + yTopOffset - (upperAdj-Yll)*plotHeight/(Yur - Yll))
- if lowerAdj != None:
- canvas.drawLine(XCoord, plotHeight + yTopOffset - (lowHinge-Yll)*plotHeight/(Yur - Yll), \
- XCoord, plotHeight + yTopOffset - (lowerAdj-Yll)*plotHeight/(Yur - Yll))
- canvas.drawLine(XCoord-20, plotHeight + yTopOffset - (lowerAdj-Yll)*plotHeight/(Yur - Yll), \
- XCoord+20, plotHeight + yTopOffset - (lowerAdj-Yll)*plotHeight/(Yur - Yll))
-
- outlierFont = pid.Font(ttf="cour",size=12,bold=0)
- if outlier != []:
- for item in outlier:
- yc = plotHeight + yTopOffset - (item-Yll)*plotHeight/(Yur - Yll)
- #canvas.drawEllipse(XCoord-3, yc-3, XCoord+3, yc+3)
- canvas.drawString('o', XCoord-3, yc+5, font=outlierFont, color=pid.orange)
- if extrem != []:
- for item in extrem:
- yc = plotHeight + yTopOffset - (item-Yll)*plotHeight/(Yur - Yll)
- #canvas.drawEllipse(XCoord-3, yc-3, XCoord+3, yc+3)
- canvas.drawString('*', XCoord-3, yc+6, font=outlierFont, color=pid.red)
-
- canvas.drawCross(XCoord, plotHeight + yTopOffset - (catMean-Yll)*plotHeight/(Yur - Yll), \
- color=pid.blue,size=3)
- #print(catMean, catMedian, cat25per, cat75per)
- pass
-
- XCoord += stepX
-
- labelFont=pid.Font(ttf="verdana",size=18,bold=0)
- canvas.drawString(XLabel, xLeftOffset + (plotWidth -canvas.stringWidth(XLabel,font=labelFont))/2.0, \
- YCoord +40, font=labelFont)
- canvas.drawString(YLabel,xLeftOffset-40, YCoord-(plotHeight -canvas.stringWidth(YLabel,font=labelFont))/2.0,\
- font=labelFont, angle =90)
-
-def plotSecurity(canvas, text="12345"):
- if not text:
- return
-
- plotWidth = canvas.size[0]
- plotHeight = canvas.size[1]
- if plotHeight<=0 or plotWidth<=0:
- return
-
- bgColor = pid.Color(0.6+0.4*random.random(), 0.6+0.4*random.random(), 0.6+0.4*random.random())
- canvas.drawRect(0,0,plotWidth,plotHeight, edgeColor=bgColor, fillColor=bgColor)
-
- for i in range(30):
- randomColor = pid.Color(0.6+0.4*random.random(), 0.6+0.4*random.random(), 0.6+0.4*random.random())
- scaleFont=pid.Font(ttf="cour",size=random.choice(range(20, 50)))
- canvas.drawString(random.choice('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'),
- int(random.random()*plotWidth), int(random.random()*plotHeight), font=scaleFont,
- color=randomColor, angle=random.choice(range(-45, 50)))
-
- step = (plotWidth-20)/len(text)
- startX = 20
- for item in text:
- randomColor = pid.Color(0.6*random.random(),0.6*random.random(), 0.6*random.random())
- scaleFont=pid.Font(ttf="verdana",size=random.choice(range(50, 60)),bold=1)
- canvas.drawString(item, startX, plotHeight/2-10, font=scaleFont,
- color=randomColor, angle=random.choice(range(-45, 50)))
- startX += step
-
# parameter: data is either object returned by reaper permutation function (called by MarkerRegressionPage.py)
# or the first object returned by direct (pair-scan) permu function (called by DirectPlotPage.py)
def plotBar(canvas, data, barColor=pid.blue, axesColor=pid.black, labelColor=pid.black, XLabel=None, YLabel=None, title=None, offset= (60, 20, 40, 40), zoom = 1):
@@ -561,542 +201,6 @@ def plotBar(canvas, data, barColor=pid.blue, axesColor=pid.black, labelColor=pid
canvas.drawString(title,xLeftOffset+(plotWidth-canvas.stringWidth(title,font=labelFont))/2.0,
20,font=labelFont,color=labelColor)
-def plotBarText(canvas, data, label, variance=None, barColor=pid.blue, axesColor=pid.black, labelColor=pid.black, XLabel=None, YLabel=None, title=None, sLabel = None, offset= (80, 20, 40, 100), barSpace = 2, zoom = 1):
- xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
- plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
- plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
- if plotHeight<=0 or plotWidth<=0:
- return
-
- NNN = len(data)
- if NNN < 2 or NNN != len(label):
- return
- if variance and len(variance)!=NNN:
- variance = []
-
- Y2 = data[:]
- if variance:
- for i in range(NNN):
- if variance[i]:
- Y2 += [data[i]-variance[i]]
-
- #Y axis
- YLow, YTop, stepY = detScale(min(Y2), max(Y2))
- YScale = plotHeight/(YTop - YLow)
-
- if YLow < 0 and YTop > 0:
- drawZero = 1
- else:
- drawZero = 0
-
- #X axis
- X = range(NNN)
- Xll= 0
- Xur= NNN-1
-
-
- if drawZero:
- YZero = yTopOffset+plotHeight-YScale*(0-YLow)
- canvas.drawLine(xLeftOffset, YZero, xLeftOffset+plotWidth, YZero)
- else:
- YZero = yTopOffset+plotHeight
- #draw data
- spaceWidth = barSpace
- if spaceWidth < 1:
- spaceWidth = 1
- barWidth = int((plotWidth - (NNN-1.0)*spaceWidth)/NNN)
-
- xc= xLeftOffset
- scaleFont=pid.Font(ttf="verdana",size=11,bold=0)
- for i in range(NNN):
- yc = yTopOffset+plotHeight-(data[i]-YLow)*YScale
- canvas.drawRect(xc,YZero,xc+barWidth-1, yc, edgeColor=barColor,fillColor=barColor)
- if variance and variance[i]:
- varlen = variance[i]*YScale
- if yc-varlen < yTopOffset:
- topYd = yTopOffset
- else:
- topYd = yc-varlen
- canvas.drawLine(xc+barWidth/2-2,yc-varlen,xc+barWidth/2+2,yc-varlen,color=pid.red)
- canvas.drawLine(xc+barWidth/2,yc+varlen,xc+barWidth/2,topYd,color=pid.red)
- canvas.drawLine(xc+barWidth/2-2,yc+varlen,xc+barWidth/2+2,yc+varlen,color=pid.red)
- strX = label[i]
- canvas.drawString(strX,xc+barWidth/2.0+2,yTopOffset+plotHeight+2+canvas.stringWidth(strX,font=scaleFont),font=scaleFont,angle=90)
- xc += barWidth + spaceWidth
-
- #draw drawing region
- canvas.drawRect(xLeftOffset, yTopOffset, xLeftOffset+plotWidth, yTopOffset+plotHeight)
-
- #draw Y scale
- scaleFont=pid.Font(ttf="cour",size=16,bold=1)
- y=YLow
- for i in range(stepY+1):
- yc=yTopOffset+plotHeight-(y-YLow)*YScale
- canvas.drawLine(xLeftOffset,yc,xLeftOffset-5,yc, color=axesColor)
- strY = cformat(d=y, rank=0)
- canvas.drawString(strY,xLeftOffset-canvas.stringWidth(strY,font=scaleFont)-6,yc+5,font=scaleFont)
- y+= (YTop - YLow)/stepY
-
- #draw label
- labelFont=pid.Font(ttf="verdana",size=17,bold=0)
- if XLabel:
- canvas.drawString(XLabel,xLeftOffset+(plotWidth-canvas.stringWidth(XLabel,font=labelFont))/2.0,yTopOffset+plotHeight+65,font=labelFont,color=labelColor)
-
- if YLabel:
- canvas.drawString(YLabel,xLeftOffset-50, yTopOffset+plotHeight-(plotHeight-canvas.stringWidth(YLabel,font=labelFont))/2.0,font=labelFont,color=labelColor,angle=90)
-
- labelFont=pid.Font(ttf="verdana",size=18,bold=0)
- if title:
- canvas.drawString(title,xLeftOffset,yTopOffset-15,font=labelFont,color=labelColor)
-
- return
-
-#def plotXY(canvas, dataX, dataY, rank=0, dataLabel=[], plotColor = pid.black, axesColor=pid.black, labelColor=pid.black, lineSize="thin", lineColor=pid.grey, idFont="arial", idColor=pid.blue, idSize="14", symbolColor=pid.black, symbolType="circle", filled="yes", symbolSize="tiny", XLabel=None, YLabel=None, title=None, fitcurve=None, connectdot=1, displayR=None, loadingPlot = 0, offset= (80, 20, 40, 60), zoom = 1, specialCases=[], showLabel = 1, bufferSpace = 15):
-# 'displayR : correlation scatter plot, loadings : loading plot'
-#
-# dataXRanked, dataYRanked = webqtlUtil.calRank(dataX, dataY, len(dataX))
-#
-# #get ID font size
-# idFontSize = int(idSize)
-#
-# #If filled is yes, set fill color
-# if filled == "yes":
-# fillColor = symbolColor
-# else:
-# fillColor = None
-#
-# if symbolSize == "large":
-# sizeModifier = 7
-# fontModifier = 12
-# elif symbolSize == "medium":
-# sizeModifier = 5
-# fontModifier = 8
-# elif symbolSize == "small":
-# sizeModifier = 3
-# fontModifier = 3
-# else:
-# sizeModifier = 1
-# fontModifier = -1
-#
-# if rank == 0: # Pearson correlation
-# bufferSpace = 0
-# dataXPrimary = dataX
-# dataYPrimary = dataY
-# dataXAlt = dataXRanked #Values used just for printing the other corr type to the graph image
-# dataYAlt = dataYRanked #Values used just for printing the other corr type to the graph image
-# else: # Spearman correlation: Switching Ranked and Unranked X and Y values
-# dataXPrimary = dataXRanked
-# dataYPrimary = dataYRanked
-# dataXAlt = dataX #Values used just for printing the other corr type to the graph image
-# dataYAlt = dataY #Values used just for printing the other corr type to the graph image
-#
-# xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
-# plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
-# plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
-# if plotHeight<=0 or plotWidth<=0:
-# return
-# if len(dataXPrimary) < 1 or len(dataXPrimary) != len(dataYPrimary) or (dataLabel and len(dataXPrimary) != len(dataLabel)):
-# return
-#
-# max_X=max(dataXPrimary)
-# min_X=min(dataXPrimary)
-# max_Y=max(dataYPrimary)
-# min_Y=min(dataYPrimary)
-#
-# #for some reason I forgot why I need to do this
-# if loadingPlot:
-# min_X = min(-0.1,min_X)
-# max_X = max(0.1,max_X)
-# min_Y = min(-0.1,min_Y)
-# max_Y = max(0.1,max_Y)
-#
-# xLow, xTop, stepX=detScale(min_X,max_X)
-# yLow, yTop, stepY=detScale(min_Y,max_Y)
-# xScale = plotWidth/(xTop-xLow)
-# yScale = plotHeight/(yTop-yLow)
-#
-# #draw drawing region
-# canvas.drawRect(xLeftOffset-bufferSpace, yTopOffset, xLeftOffset+plotWidth, yTopOffset+plotHeight+bufferSpace)
-# canvas.drawRect(xLeftOffset-bufferSpace+1, yTopOffset, xLeftOffset+plotWidth, yTopOffset+plotHeight+bufferSpace-1)
-#
-# #calculate data points
-# data = map(lambda X, Y: (X, Y), dataXPrimary, dataYPrimary)
-# xCoord = map(lambda X, Y: ((X-xLow)*xScale + xLeftOffset, yTopOffset+plotHeight-(Y-yLow)*yScale), dataXPrimary, dataYPrimary)
-#
-# labelFont=pid.Font(ttf=idFont,size=idFontSize,bold=0)
-#
-# if loadingPlot:
-# xZero = -xLow*xScale+xLeftOffset
-# yZero = yTopOffset+plotHeight+yLow*yScale
-# for point in xCoord:
-# canvas.drawLine(xZero,yZero,point[0],point[1],color=pid.red)
-# else:
-# if connectdot:
-# canvas.drawPolygon(xCoord,edgeColor=plotColor,closed=0)
-# else:
-# pass
-#
-# symbolFont = pid.Font(ttf="fnt_bs", size=12+fontModifier,bold=0)
-#
-# for i, item in enumerate(xCoord):
-# if dataLabel and dataLabel[i] in specialCases:
-# canvas.drawRect(item[0]-3, item[1]-3, item[0]+3, item[1]+3, edgeColor=pid.green)
-# #canvas.drawCross(item[0],item[1],color=pid.blue,size=5)
-# else:
-# if symbolType == "vertRect":
-# canvas.drawRect(x1=item[0]-sizeModifier+2,y1=item[1]-sizeModifier-2, x2=item[0]+sizeModifier-1,y2=item[1]+sizeModifier+2, edgeColor=symbolColor, edgeWidth=1, fillColor=fillColor)
-# elif (symbolType == "circle" and filled != "yes"):
-# canvas.drawString(":", item[0]-canvas.stringWidth(":",font=symbolFont)/2+1,item[1]+2,color=symbolColor, font=symbolFont)
-# elif (symbolType == "circle" and filled == "yes"):
-# canvas.drawString("5", item[0]-canvas.stringWidth("5",font=symbolFont)/2+1,item[1]+2,color=symbolColor, font=symbolFont)
-# elif symbolType == "horiRect":
-# canvas.drawRect(x1=item[0]-sizeModifier-1,y1=item[1]-sizeModifier+3, x2=item[0]+sizeModifier+3,y2=item[1]+sizeModifier-2, edgeColor=symbolColor, edgeWidth=1, fillColor=fillColor)
-# elif (symbolType == "square"):
-# canvas.drawRect(x1=item[0]-sizeModifier+1,y1=item[1]-sizeModifier-4, x2=item[0]+sizeModifier+2,y2=item[1]+sizeModifier-3, edgeColor=symbolColor, edgeWidth=1, fillColor=fillColor)
-# elif (symbolType == "diamond" and filled != "yes"):
-# canvas.drawString(",", item[0]-canvas.stringWidth(",",font=symbolFont)/2+2, item[1]+6, font=symbolFont, color=symbolColor)
-# elif (symbolType == "diamond" and filled == "yes"):
-# canvas.drawString("D", item[0]-canvas.stringWidth("D",font=symbolFont)/2+2, item[1]+6, font=symbolFont, color=symbolColor)
-# elif symbolType == "4-star":
-# canvas.drawString("l", item[0]-canvas.stringWidth("l",font=symbolFont)/2+1, item[1]+3, font=symbolFont, color=symbolColor)
-# elif symbolType == "3-star":
-# canvas.drawString("k", item[0]-canvas.stringWidth("k",font=symbolFont)/2+1, item[1]+3, font=symbolFont, color=symbolColor)
-# else:
-# canvas.drawCross(item[0],item[1]-2,color=symbolColor, size=sizeModifier+2)
-#
-# if showLabel and dataLabel:
-# if (symbolType == "vertRect" or symbolType == "diamond"):
-# labelGap = 15
-# elif (symbolType == "4-star" or symbolType == "3-star"):
-# labelGap = 12
-# else:
-# labelGap = 11
-# canvas.drawString(dataLabel[i], item[0]- canvas.stringWidth(dataLabel[i],
-# font=labelFont)/2 + 1, item[1]+(labelGap+sizeModifier+(idFontSize-12)), font=labelFont, color=idColor)
-#
-# #draw scale
-# scaleFont=pid.Font(ttf="cour",size=16,bold=1)
-#
-#
-# x=xLow
-# for i in range(stepX+1):
-# xc=xLeftOffset+(x-xLow)*xScale
-# if ((x == 0) & (rank == 1)):
-# pass
-# else:
-# canvas.drawLine(xc,yTopOffset+plotHeight + bufferSpace,xc,yTopOffset+plotHeight+5 + bufferSpace, color=axesColor)
-# strX = cformat(d=x, rank=rank)
-# if ((strX == "0") & (rank == 1)):
-# pass
-# else:
-# canvas.drawString(strX,xc-canvas.stringWidth(strX,font=scaleFont)/2,yTopOffset+plotHeight+20 + bufferSpace,font=scaleFont)
-# x+= (xTop - xLow)/stepX
-#
-# y=yLow
-# for i in range(stepY+1):
-# yc=yTopOffset+plotHeight-(y-yLow)*yScale
-# if ((y == 0) & (rank == 1)):
-# pass
-# else:
-# canvas.drawLine(xLeftOffset - bufferSpace,yc,xLeftOffset-5 - bufferSpace,yc, color=axesColor)
-# strY = cformat(d=y, rank=rank)
-# if ((strY == "0") & (rank == 1)):
-# pass
-# else:
-# canvas.drawString(strY,xLeftOffset-canvas.stringWidth(strY,font=scaleFont)- 10 - bufferSpace,yc+4,font=scaleFont)
-# y+= (yTop - yLow)/stepY
-#
-# #draw label
-#
-# labelFont=pid.Font(ttf="verdana",size=canvas.size[0]/45,bold=0)
-# titleFont=pid.Font(ttf="verdana",size=canvas.size[0]/40,bold=0)
-#
-# if (rank == 1 and not title):
-# canvas.drawString("Spearman Rank Correlation", xLeftOffset-canvas.size[0]*.025+(plotWidth-canvas.stringWidth("Spearman Rank Correlation",font=titleFont))/2.0,
-# 25,font=titleFont,color=labelColor)
-# elif (rank == 0 and not title):
-# canvas.drawString("Pearson Correlation", xLeftOffset-canvas.size[0]*.025+(plotWidth-canvas.stringWidth("Pearson Correlation",font=titleFont))/2.0,
-# 25,font=titleFont,color=labelColor)
-#
-# if XLabel:
-# canvas.drawString(XLabel,xLeftOffset+(plotWidth-canvas.stringWidth(XLabel,font=labelFont))/2.0,
-# yTopOffset+plotHeight+yBottomOffset-25,font=labelFont,color=labelColor)
-#
-# if YLabel:
-# canvas.drawString(YLabel, xLeftOffset-65, yTopOffset+plotHeight- (plotHeight-canvas.stringWidth(YLabel,font=labelFont))/2.0,
-# font=labelFont,color=labelColor,angle=90)
-#
-# labelFont=pid.Font(ttf="verdana",size=20,bold=0)
-# if title:
-# canvas.drawString(title,xLeftOffset+(plotWidth-canvas.stringWidth(title,font=labelFont))/2.0,
-# 20,font=labelFont,color=labelColor)
-#
-# if fitcurve:
-# import sys
-# sys.argv = [ "mod_python" ]
-# #from numarray import linear_algebra as la
-# #from numarray import ones, array, dot, swapaxes
-# fitYY = array(dataYPrimary)
-# fitXX = array([ones(len(dataXPrimary)),dataXPrimary])
-# AA = dot(fitXX,swapaxes(fitXX,0,1))
-# BB = dot(fitXX,fitYY)
-# bb = la.linear_least_squares(AA,BB)[0]
-#
-# xc1 = xLeftOffset
-# yc1 = yTopOffset+plotHeight-(bb[0]+bb[1]*xLow-yLow)*yScale
-# if yc1 > yTopOffset+plotHeight:
-# yc1 = yTopOffset+plotHeight
-# xc1 = (yLow-bb[0])/bb[1]
-# xc1=(xc1-xLow)*xScale+xLeftOffset
-# elif yc1 < yTopOffset:
-# yc1 = yTopOffset
-# xc1 = (yTop-bb[0])/bb[1]
-# xc1=(xc1-xLow)*xScale+xLeftOffset
-# else:
-# pass
-#
-# xc2 = xLeftOffset + plotWidth
-# yc2 = yTopOffset+plotHeight-(bb[0]+bb[1]*xTop-yLow)*yScale
-# if yc2 > yTopOffset+plotHeight:
-# yc2 = yTopOffset+plotHeight
-# xc2 = (yLow-bb[0])/bb[1]
-# xc2=(xc2-xLow)*xScale+xLeftOffset
-# elif yc2 < yTopOffset:
-# yc2 = yTopOffset
-# xc2 = (yTop-bb[0])/bb[1]
-# xc2=(xc2-xLow)*xScale+xLeftOffset
-# else:
-# pass
-#
-# canvas.drawLine(xc1 - bufferSpace,yc1 + bufferSpace,xc2,yc2,color=lineColor)
-# if lineSize == "medium":
-# canvas.drawLine(xc1 - bufferSpace,yc1 + bufferSpace+1,xc2,yc2+1,color=lineColor)
-# if lineSize == "thick":
-# canvas.drawLine(xc1 - bufferSpace,yc1 + bufferSpace+1,xc2,yc2+1,color=lineColor)
-# canvas.drawLine(xc1 - bufferSpace,yc1 + bufferSpace-1,xc2,yc2-1,color=lineColor)
-#
-#
-# if displayR:
-# labelFont=pid.Font(ttf="trebuc",size=canvas.size[0]/60,bold=0)
-# NNN = len(dataX)
-# corr = webqtlUtil.calCorrelation(dataXPrimary,dataYPrimary,NNN)[0]
-#
-# if NNN < 3:
-# corrPValue = 1.0
-# else:
-# if abs(corr) >= 1.0:
-# corrPValue = 0.0
-# else:
-# ZValue = 0.5*log((1.0+corr)/(1.0-corr))
-# ZValue = ZValue*sqrt(NNN-3)
-# corrPValue = 2.0*(1.0 - reaper.normp(abs(ZValue)))
-#
-# NStr = "N = %d" % NNN
-# strLenN = canvas.stringWidth(NStr,font=labelFont)
-#
-# if rank == 1:
-# if corrPValue < 0.0000000000000001:
-# corrStr = "Rho = %1.3f P < 1.00 E-16" % (corr)
-# else:
-# corrStr = "Rho = %1.3f P = %3.2E" % (corr, corrPValue)
-# else:
-# if corrPValue < 0.0000000000000001:
-# corrStr = "r = %1.3f P < 1.00 E-16" % (corr)
-# else:
-# corrStr = "r = %1.3f P = %3.2E" % (corr, corrPValue)
-# strLen = canvas.stringWidth(corrStr,font=labelFont)
-#
-# canvas.drawString(NStr,xLeftOffset,yTopOffset-10,font=labelFont,color=labelColor)
-# canvas.drawString(corrStr,xLeftOffset+plotWidth-strLen,yTopOffset-10,font=labelFont,color=labelColor)
-#
-# return xCoord
-
-def plotXYSVG(drawSpace, dataX, dataY, rank=0, dataLabel=[], plotColor = "black", axesColor="black", labelColor="black", symbolColor="red", XLabel=None, YLabel=None, title=None, fitcurve=None, connectdot=1, displayR=None, loadingPlot = 0, offset= (80, 20, 40, 60), zoom = 1, specialCases=[], showLabel = 1):
- 'displayR : correlation scatter plot, loadings : loading plot'
-
- dataXRanked, dataYRanked = webqtlUtil.calRank(dataX, dataY, len(dataX))
-
- # Switching Ranked and Unranked X and Y values if a Spearman Rank Correlation
- if rank == 0:
- dataXPrimary = dataX
- dataYPrimary = dataY
- dataXAlt = dataXRanked
- dataYAlt = dataYRanked
-
- else:
- dataXPrimary = dataXRanked
- dataYPrimary = dataYRanked
- dataXAlt = dataX
- dataYAlt = dataY
-
-
-
- xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
- plotWidth = drawSpace.attributes['width'] - xLeftOffset - xRightOffset
- plotHeight = drawSpace.attributes['height'] - yTopOffset - yBottomOffset
- if plotHeight<=0 or plotWidth<=0:
- return
- if len(dataXPrimary) < 1 or len(dataXPrimary) != len(dataYPrimary) or (dataLabel and len(dataXPrimary) != len(dataLabel)):
- return
-
- max_X=max(dataXPrimary)
- min_X=min(dataXPrimary)
- max_Y=max(dataYPrimary)
- min_Y=min(dataYPrimary)
-
- #for some reason I forgot why I need to do this
- if loadingPlot:
- min_X = min(-0.1,min_X)
- max_X = max(0.1,max_X)
- min_Y = min(-0.1,min_Y)
- max_Y = max(0.1,max_Y)
-
- xLow, xTop, stepX=detScale(min_X,max_X)
- yLow, yTop, stepY=detScale(min_Y,max_Y)
- xScale = plotWidth/(xTop-xLow)
- yScale = plotHeight/(yTop-yLow)
-
- #draw drawing region
- r = svg.rect(xLeftOffset, yTopOffset, plotWidth, plotHeight, 'none', axesColor, 1)
- drawSpace.addElement(r)
-
- #calculate data points
- data = map(lambda X, Y: (X, Y), dataXPrimary, dataYPrimary)
- xCoord = map(lambda X, Y: ((X-xLow)*xScale + xLeftOffset, yTopOffset+plotHeight-(Y-yLow)*yScale), dataXPrimary, dataYPrimary)
- labelFontF = "verdana"
- labelFontS = 11
-
- if loadingPlot:
- xZero = -xLow*xScale+xLeftOffset
- yZero = yTopOffset+plotHeight+yLow*yScale
- for point in xCoord:
- drawSpace.addElement(svg.line(xZero,yZero,point[0],point[1], "red", 1))
- else:
- if connectdot:
- pass
- #drawSpace.drawPolygon(xCoord,edgeColor=plotColor,closed=0)
- else:
- pass
-
- for i, item in enumerate(xCoord):
- if dataLabel and dataLabel[i] in specialCases:
- drawSpace.addElement(svg.rect(item[0]-3, item[1]-3, 6, 6, "none", "green", 0.5))
- #drawSpace.drawCross(item[0],item[1],color=pid.blue,size=5)
- else:
- drawSpace.addElement(svg.line(item[0],item[1]+5,item[0],item[1]-5,symbolColor,1))
- drawSpace.addElement(svg.line(item[0]+5,item[1],item[0]-5,item[1],symbolColor,1))
- if showLabel and dataLabel:
- pass
- drawSpace.addElement(svg.text(item[0], item[1]+14, dataLabel[i], labelFontS,
- labelFontF, text_anchor="middle", style="stroke:blue;stroke-width:0.5;"))
- #canvas.drawString(, item[0]- canvas.stringWidth(dataLabel[i],
- # font=labelFont)/2, item[1]+14, font=labelFont, color=pid.blue)
-
- #draw scale
- #scaleFont=pid.Font(ttf="cour",size=14,bold=1)
- x=xLow
- for i in range(stepX+1):
- xc=xLeftOffset+(x-xLow)*xScale
- drawSpace.addElement(svg.line(xc,yTopOffset+plotHeight,xc,yTopOffset+plotHeight+5, axesColor, 1))
- strX = cformat(d=x, rank=rank)
- drawSpace.addElement(svg.text(xc,yTopOffset+plotHeight+20,strX,13, "courier", text_anchor="middle"))
- x+= (xTop - xLow)/stepX
-
- y=yLow
- for i in range(stepY+1):
- yc=yTopOffset+plotHeight-(y-yLow)*yScale
- drawSpace.addElement(svg.line(xLeftOffset,yc,xLeftOffset-5,yc, axesColor, 1))
- strY = cformat(d=y, rank=rank)
- drawSpace.addElement(svg.text(xLeftOffset-10,yc+5,strY,13, "courier", text_anchor="end"))
- y+= (yTop - yLow)/stepY
-
- #draw label
- labelFontF = "verdana"
- labelFontS = 17
- if XLabel:
- drawSpace.addElement(svg.text(xLeftOffset+plotWidth/2.0,
- yTopOffset+plotHeight+yBottomOffset-10,XLabel,
- labelFontS, labelFontF, text_anchor="middle"))
-
- if YLabel:
- drawSpace.addElement(svg.text(xLeftOffset-50,
- yTopOffset+plotHeight/2,YLabel,
- labelFontS, labelFontF, text_anchor="middle", style="writing-mode:tb-rl", transform="rotate(270 %d %d)" % (xLeftOffset-50, yTopOffset+plotHeight/2)))
- #drawSpace.drawString(YLabel, xLeftOffset-50, yTopOffset+plotHeight- (plotHeight-drawSpace.stringWidth(YLabel,font=labelFont))/2.0,
- # font=labelFont,color=labelColor,angle=90)
-
-
- if fitcurve:
- sys.argv = [ "mod_python" ]
- #from numarray import linear_algebra as la
- #from numarray import ones, array, dot, swapaxes
- fitYY = array(dataYPrimary)
- fitXX = array([ones(len(dataXPrimary)),dataXPrimary])
- AA = dot(fitXX,swapaxes(fitXX,0,1))
- BB = dot(fitXX,fitYY)
- bb = la.linear_least_squares(AA,BB)[0]
-
- xc1 = xLeftOffset
- yc1 = yTopOffset+plotHeight-(bb[0]+bb[1]*xLow-yLow)*yScale
- if yc1 > yTopOffset+plotHeight:
- yc1 = yTopOffset+plotHeight
- xc1 = (yLow-bb[0])/bb[1]
- xc1=(xc1-xLow)*xScale+xLeftOffset
- elif yc1 < yTopOffset:
- yc1 = yTopOffset
- xc1 = (yTop-bb[0])/bb[1]
- xc1=(xc1-xLow)*xScale+xLeftOffset
- else:
- pass
-
- xc2 = xLeftOffset + plotWidth
- yc2 = yTopOffset+plotHeight-(bb[0]+bb[1]*xTop-yLow)*yScale
- if yc2 > yTopOffset+plotHeight:
- yc2 = yTopOffset+plotHeight
- xc2 = (yLow-bb[0])/bb[1]
- xc2=(xc2-xLow)*xScale+xLeftOffset
- elif yc2 < yTopOffset:
- yc2 = yTopOffset
- xc2 = (yTop-bb[0])/bb[1]
- xc2=(xc2-xLow)*xScale+xLeftOffset
- else:
- pass
-
- drawSpace.addElement(svg.line(xc1,yc1,xc2,yc2,"green", 1))
-
- if displayR:
- labelFontF = "trebuc"
- labelFontS = 14
- NNN = len(dataX)
-
- corr = webqtlUtil.calCorrelation(dataXPrimary,dataYPrimary,NNN)[0]
-
- if NNN < 3:
- corrPValue = 1.0
- else:
- if abs(corr) >= 1.0:
- corrPValue = 0.0
- else:
- ZValue = 0.5*log((1.0+corr)/(1.0-corr))
- ZValue = ZValue*sqrt(NNN-3)
- corrPValue = 2.0*(1.0 - reaper.normp(abs(ZValue)))
-
- NStr = "N of Cases=%d" % NNN
-
- if rank == 1:
- corrStr = "Spearman's r=%1.3f P=%3.2E" % (corr, corrPValue)
- else:
- corrStr = "Pearson's r=%1.3f P=%3.2E" % (corr, corrPValue)
-
- drawSpace.addElement(svg.text(xLeftOffset,yTopOffset-10,NStr,
- labelFontS, labelFontF, text_anchor="start"))
- drawSpace.addElement(svg.text(xLeftOffset+plotWidth,yTopOffset-25,corrStr,
- labelFontS, labelFontF, text_anchor="end"))
- """
- """
- return
-
-
# This function determines the scale of the plot
def detScaleOld(min,max):
if min>=max:
@@ -1114,7 +218,7 @@ def detScaleOld(min,max):
high=c*ceil(max/c)
return [low,high,round((high-low)/c)]
-def detScale(min=0,max=0,bufferSpace=3):
+def detScale(min=0,max=0):
if min>=max:
return None
@@ -1151,57 +255,9 @@ def detScale(min=0,max=0,bufferSpace=3):
return [low,high,n]
-
-
-def colorSpectrumOld(n):
- if n == 1:
- return [pid.Color(1,0,0)]
- elif n == 2:
- return [pid.Color(1,0,0),pid.Color(0,0,1)]
- elif n == 3:
- return [pid.Color(1,0,0),pid.Color(0,1,0),pid.Color(0,0,1)]
- else:
- step = 2.0/(n-1)
- red = 1.0
- green = 0.0
- blue = 0.0
- colors = [pid.Color(red,green,blue)]
- i = 1
- greenpeak = 0
- while i < n:
- if red >= step:
- red -= step
- green += step
- if green >= 1.0:
- greenpeak = 1
- blue += green -1.0
- green = 1.0
- else:
- red = 0.0
- if greenpeak:
- green -= step
- blue += step
- else:
- green += step
- if green >= 1.0:
- greenpeak = 1
- blue += green -1.0
- green = 2.0 -green
- elif green < 0.0:
- green = 0.0
- else:
- pass
- colors.append(pid.Color(red,green,blue))
- i += 1
- return colors
-
-
-
-
def bluefunc(x):
return 1.0 / (1.0 + exp(-10*(x-0.6)))
-
def redfunc(x):
return 1.0 / (1.0 + exp(10*(x-0.5)))
@@ -1230,52 +286,10 @@ def colorSpectrum(n=100):
out2.append(out[-1])
return out2
-
-def colorSpectrumSVG(n=100):
- multiple = 10
- if n == 1:
- return ["rgb(255,0,0)"]
- elif n == 2:
- return ["rgb(255,0,0)","rgb(0,0,255)"]
- elif n == 3:
- return ["rgb(255,0,0)","rgb(0,255,0)","rgb(0,0,255)"]
- N = n*multiple
- out = [None]*N;
- for i in range(N):
- x = float(i)/N
- out[i] = "rgb(%d, %d, %d)" % (redfunc(x)*255, greenfunc(x)*255, bluefunc(x)*255);
- out2 = [out[0]]
- step = N/float(n-1)
- j = 0
- for i in range(n-2):
- j += step
- out2.append(out[int(j)])
- out2.append(out[-1])
- return out2
-
-
-def BWSpectrum(n=100):
- multiple = 10
- if n == 1:
- return [pid.Color(0,0,0)]
- elif n == 2:
- return [pid.Color(0,0,0),pid.Color(1,1,1)]
- elif n == 3:
- return [pid.Color(0,0,0),pid.Color(0.5,0.5,0.5),pid.Color(1,1,1)]
-
- step = 1.0/n
- x = 0.0
- out = []
- for i in range(n):
- out.append(pid.Color(x,x,x));
- x += step
- return out
-
-
def _test():
import doctest
doctest.testmod()
if __name__=="__main__":
- _test()
+ _test() \ No newline at end of file
diff --git a/wqflask/utility/after.py b/wqflask/utility/after.py
index a3bb85e9..b628a0a4 100644
--- a/wqflask/utility/after.py
+++ b/wqflask/utility/after.py
@@ -13,10 +13,4 @@ def after_this_request(f):
if not hasattr(g, 'after_request_callbacks'):
g.after_request_callbacks = []
g.after_request_callbacks.append(f)
- return f
-
-@app.after_request
-def call_after_request_callbacks(response):
- for callback in getattr(g, 'after_request_callbacks', ()):
- callback(response)
- return response
+ return f \ No newline at end of file
diff --git a/wqflask/utility/benchmark.py b/wqflask/utility/benchmark.py
index 8c97370d..8f1c916b 100644
--- a/wqflask/utility/benchmark.py
+++ b/wqflask/utility/benchmark.py
@@ -11,7 +11,7 @@ logger = getLogger(__name__ )
class Bench(object):
entries = collections.OrderedDict()
- def __init__(self, name=None, write_output=True):
+ def __init__(self, name=None, write_output=LOG_BENCH):
self.name = name
self.write_output = write_output
diff --git a/wqflask/basicStatistics/corestats.py b/wqflask/utility/corestats.py
index eba84c52..67ca3ad3 100644
--- a/wqflask/basicStatistics/corestats.py
+++ b/wqflask/utility/corestats.py
@@ -13,11 +13,9 @@
# License as published by the Free Software Foundation; either
# version 2.1 of the License, or (at your option) any later version.
-
-
import sys
-
+#ZS: Should switch to using some third party library for this; maybe scipy has an equivalent
class Stats:
def __init__(self, sequence):
@@ -25,47 +23,33 @@ class Stats:
# convert all items to floats for numerical processing
self.sequence = [float(item) for item in sequence]
-
def sum(self):
if len(self.sequence) < 1:
return None
else:
return sum(self.sequence)
-
def count(self):
return len(self.sequence)
-
def min(self):
if len(self.sequence) < 1:
return None
else:
return min(self.sequence)
-
def max(self):
if len(self.sequence) < 1:
return None
else:
return max(self.sequence)
-
def avg(self):
if len(self.sequence) < 1:
return None
else:
return sum(self.sequence) / len(self.sequence)
-
- def median(self):
- if len(self.sequence) < 1:
- return None
- else:
- self.sequence.sort()
- return self.sequence[len(self.sequence) // 2]
-
-
def stdev(self):
if len(self.sequence) < 1:
return None
@@ -75,7 +59,6 @@ class Stats:
stdev = (sdsq / (len(self.sequence) - 1)) ** .5
return stdev
-
def percentile(self, percentile):
if len(self.sequence) < 1:
value = None
@@ -88,9 +71,6 @@ class Stats:
value = self.sequence[element_idx]
return value
-
-
-
# Sample script using this class:
# -------------------------------------------
# #!/usr/bin/env python
@@ -100,4 +80,4 @@ class Stats:
# stats = corestats.Stats(sequence)
# print stats.avg()
# print stats.percentile(90)
-# -------------------------------------------
+# ------------------------------------------- \ No newline at end of file
diff --git a/wqflask/utility/corr_result_helpers.py b/wqflask/utility/corr_result_helpers.py
index ef644d85..b543c589 100644
--- a/wqflask/utility/corr_result_helpers.py
+++ b/wqflask/utility/corr_result_helpers.py
@@ -15,7 +15,7 @@ def normalize_values(a_values, b_values):
a_new = []
b_new = []
for counter in range(min_length):
- if a_values[counter] and b_values[counter]:
+ if (a_values[counter] or a_values[counter] == 0) and (b_values[counter] or b_values[counter] == 0):
a_new.append(a_values[counter])
b_new.append(b_values[counter])
diff --git a/wqflask/utility/elasticsearch_tools.py b/wqflask/utility/elasticsearch_tools.py
new file mode 100644
index 00000000..15cdd0bc
--- /dev/null
+++ b/wqflask/utility/elasticsearch_tools.py
@@ -0,0 +1,112 @@
+# Elasticsearch support
+#
+# Some helpful commands to view the database:
+#
+# You can test the server being up with
+#
+# curl -H 'Content-Type: application/json' http://localhost:9200
+#
+# List all indices
+#
+# curl -H 'Content-Type: application/json' 'localhost:9200/_cat/indices?v'
+#
+# To see the users index 'table'
+#
+# curl http://localhost:9200/users
+#
+# To list all user ids
+#
+# curl -H 'Content-Type: application/json' http://localhost:9200/users/local/_search?pretty=true -d '
+# {
+# "query" : {
+# "match_all" : {}
+# },
+# "stored_fields": []
+# }'
+#
+# To view a record
+#
+# curl -H 'Content-Type: application/json' http://localhost:9200/users/local/_search?pretty=true -d '
+# {
+# "query" : {
+# "match" : { "email_address": "pjotr2017@thebird.nl"}
+# }
+# }'
+#
+#
+# To delete the users index and data (dangerous!)
+#
+# curl -XDELETE -H 'Content-Type: application/json' 'localhost:9200/users'
+
+
+from elasticsearch import Elasticsearch, TransportError
+import logging
+
+from utility.logger import getLogger
+logger = getLogger(__name__)
+
+from utility.tools import ELASTICSEARCH_HOST, ELASTICSEARCH_PORT
+
+def test_elasticsearch_connection():
+ es = Elasticsearch(['http://'+ELASTICSEARCH_HOST+":"+str(ELASTICSEARCH_PORT)+'/'], verify_certs=True)
+ if not es.ping():
+ logger.warning("Elasticsearch is DOWN")
+
+def get_elasticsearch_connection(for_user=True):
+ """Return a connection to ES. Returns None on failure"""
+ logger.info("get_elasticsearch_connection")
+ es = None
+ try:
+ assert(ELASTICSEARCH_HOST)
+ assert(ELASTICSEARCH_PORT)
+ logger.info("ES HOST",ELASTICSEARCH_HOST)
+
+ es = Elasticsearch([{
+ "host": ELASTICSEARCH_HOST, "port": ELASTICSEARCH_PORT
+ }], timeout=30, retry_on_timeout=True) if (ELASTICSEARCH_HOST and ELASTICSEARCH_PORT) else None
+
+ if for_user:
+ setup_users_index(es)
+
+ es_logger = logging.getLogger("elasticsearch")
+ es_logger.setLevel(logging.INFO)
+ es_logger.addHandler(logging.NullHandler())
+ except Exception as e:
+ logger.error("Failed to get elasticsearch connection", e)
+ es = None
+
+ return es
+
+def setup_users_index(es_connection):
+ if es_connection:
+ index_settings = {
+ "properties": {
+ "email_address": {
+ "type": "keyword"}}}
+
+ es_connection.indices.create(index='users', ignore=400)
+ es_connection.indices.put_mapping(body=index_settings, index="users", doc_type="local")
+
+def get_user_by_unique_column(es, column_name, column_value, index="users", doc_type="local"):
+ return get_item_by_unique_column(es, column_name, column_value, index=index, doc_type=doc_type)
+
+def save_user(es, user, user_id):
+ es_save_data(es, "users", "local", user, user_id)
+
+def get_item_by_unique_column(es, column_name, column_value, index, doc_type):
+ item_details = None
+ try:
+ response = es.search(
+ index = index, doc_type = doc_type, body = {
+ "query": { "match": { column_name: column_value } }
+ })
+ if len(response["hits"]["hits"]) > 0:
+ item_details = response["hits"]["hits"][0]["_source"]
+ except TransportError as te:
+ pass
+ return item_details
+
+def es_save_data(es, index, doc_type, data_item, data_id,):
+ from time import sleep
+ es.create(index, doc_type, body=data_item, id=data_id)
+ sleep(1) # Delay 1 second to allow indexing
diff --git a/wqflask/utility/gen_geno_ob.py b/wqflask/utility/gen_geno_ob.py
new file mode 100644
index 00000000..23b0b650
--- /dev/null
+++ b/wqflask/utility/gen_geno_ob.py
@@ -0,0 +1,181 @@
+from __future__ import absolute_import, division, print_function
+
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
+class genotype(object):
+ """
+ Replacement for reaper.Dataset so we can remove qtlreaper use while still generating mapping output figure
+ """
+
+ def __init__(self, filename):
+ self.group = None
+ self.type = "riset"
+ self.prgy = []
+ self.nprgy = 0
+ self.mat = -1
+ self.pat = 1
+ self.het = 0
+ self.unk = "U"
+ self.filler = False
+ self.mb_exists = False
+
+ #ZS: This is because I'm not sure if some files switch the column that contains Mb/cM positions; might be unnecessary
+ self.cm_column = 2
+ self.mb_column = 3
+
+ self.chromosomes = []
+
+ self.read_file(filename)
+
+ def __iter__(self):
+ return iter(self.chromosomes)
+
+ def __getitem__(self, index):
+ return self.chromosomes[index]
+
+ def __len__(self):
+ return len(self.chromosomes)
+
+ def read_rdata_output(self, qtl_results):
+ #ZS: This is necessary because R/qtl requires centimorgan marker positions, which it normally gets from the .geno file, but that doesn't exist for HET3-ITP (which only has RData), so it needs to read in the marker cM positions from the results
+ self.chromosomes = [] #ZS: Overwriting since the .geno file's contents are just placeholders
+
+ this_chr = "" #ZS: This is so it can track when the chromosome changes as it iterates through markers
+ chr_ob = None
+ for marker in qtl_results:
+ locus = Locus(self)
+ if (str(marker['chr']) != this_chr) and this_chr != "X": #ZS: This is really awkward but works as a temporary fix
+ if this_chr != "":
+ self.chromosomes.append(chr_ob)
+ this_chr = str(marker['chr'])
+ if this_chr == "20":
+ this_chr = "X"
+ chr_ob = Chr(this_chr, self)
+ if 'chr' in marker:
+ locus.chr = str(marker['chr'])
+ if 'name' in marker:
+ locus.name = marker['name']
+ if 'Mb' in marker:
+ locus.Mb = marker['Mb']
+ if 'cM' in marker:
+ locus.cM = marker['cM']
+ chr_ob.loci.append(locus)
+
+ self.chromosomes.append(chr_ob)
+
+ return self
+
+ def read_file(self, filename):
+ with open(filename, 'r') as geno_file:
+ lines = geno_file.readlines()
+
+ this_chr = "" #ZS: This is so it can track when the chromosome changes as it iterates through markers
+ chr_ob = None
+ for line in lines:
+ if line[0] == "#":
+ continue
+ elif line[0] == "@":
+ label = line.split(":")[0][1:]
+ if label == "name":
+ self.group = line.split(":")[1].strip()
+ elif label == "filler":
+ if line.split(":")[1].strip() == "yes":
+ self.filler = True
+ elif label == "type":
+ self.type = line.split(":")[1].strip()
+ elif label == "mat":
+ self.mat = line.split(":")[1].strip()
+ elif label == "pat":
+ self.pat = line.split(":")[1].strip()
+ elif label == "het":
+ self.het = line.split(":")[1].strip()
+ elif label == "unk":
+ self.unk = line.split(":")[1].strip()
+ else:
+ continue
+ elif line[:3] == "Chr":
+ header_row = line.split("\t")
+ if header_row[2] == "Mb":
+ self.mb_exists = True
+ self.mb_column = 2
+ self.cm_column = 3
+ elif header_row[3] == "Mb":
+ self.mb_exists = True
+ self.mb_column = 3
+ elif header_row[2] == "cM":
+ self.cm_column = 2
+
+ if self.mb_exists:
+ self.prgy = header_row[4:]
+ else:
+ self.prgy = header_row[3:]
+ self.nprgy = len(self.prgy)
+ else:
+ if line.split("\t")[0] != this_chr:
+ if this_chr != "":
+ self.chromosomes.append(chr_ob)
+ this_chr = line.split("\t")[0]
+ chr_ob = Chr(line.split("\t")[0], self)
+ chr_ob.add_marker(line.split("\t"))
+
+ self.chromosomes.append(chr_ob)
+
+class Chr(object):
+ def __init__(self, name, geno_ob):
+ self.name = name
+ self.loci = []
+ self.mb_exists = geno_ob.mb_exists
+ self.cm_column = geno_ob.cm_column
+ self.mb_column = geno_ob.mb_column
+ self.geno_ob = geno_ob
+
+ def __iter__(self):
+ return iter(self.loci)
+
+ def __getitem__(self, index):
+ return self.loci[index]
+
+ def __len__(self):
+ return len(self.loci)
+
+ def add_marker(self, marker_row):
+ self.loci.append(Locus(self.geno_ob, marker_row))
+
+class Locus(object):
+ def __init__(self, geno_ob, marker_row = None):
+ self.chr = None
+ self.name = None
+ self.cM = None
+ self.Mb = None
+ self.genotype = []
+ if marker_row:
+ self.chr = marker_row[0]
+ self.name = marker_row[1]
+ try:
+ self.cM = float(marker_row[geno_ob.cm_column])
+ except:
+ self.cM = float(marker_row[geno_ob.mb_column]) if geno_ob.mb_exists else 0
+ try:
+ self.Mb = float(marker_row[geno_ob.mb_column]) if geno_ob.mb_exists else None
+ except:
+ self.Mb = self.cM
+
+ geno_table = {
+ geno_ob.mat: -1,
+ geno_ob.pat: 1,
+ geno_ob.het: 0,
+ geno_ob.unk: "U"
+ }
+
+ self.genotype = []
+ if geno_ob.mb_exists:
+ start_pos = 4
+ else:
+ start_pos = 3
+
+ for allele in marker_row[start_pos:]:
+ if allele in geno_table.keys():
+ self.genotype.append(geno_table[allele])
+ else: #ZS: Some genotype appears that isn't specified in the metadata, make it unknown
+ self.genotype.append("U") \ No newline at end of file
diff --git a/wqflask/utility/genofile_parser.py b/wqflask/utility/genofile_parser.py
index 7149e560..af306731 100644
--- a/wqflask/utility/genofile_parser.py
+++ b/wqflask/utility/genofile_parser.py
@@ -72,7 +72,7 @@ class ConvertGenoFile(object):
yield row
def process_csv(self):
- for row_count, row in enumerate(self.process_rows()):
+ for row in self.process_rows():
row_items = row.split("\t")
this_marker = Marker()
diff --git a/wqflask/utility/helper_functions.py b/wqflask/utility/helper_functions.py
index cf16879f..e7c04fef 100644
--- a/wqflask/utility/helper_functions.py
+++ b/wqflask/utility/helper_functions.py
@@ -4,7 +4,7 @@ from base.trait import GeneralTrait
from base import data_set
from base.species import TheSpecies
-from wqflask import user_manager
+from utility import hmac
from flask import Flask, g
@@ -14,7 +14,13 @@ logger = logging.getLogger(__name__ )
def get_species_dataset_trait(self, start_vars):
#assert type(read_genotype) == type(bool()), "Expecting boolean value for read_genotype"
- self.dataset = data_set.create_dataset(start_vars['dataset'])
+ if "temp_trait" in start_vars.keys():
+ if start_vars['temp_trait'] == "True":
+ self.dataset = data_set.create_dataset(dataset_name = "Temp", dataset_type = "Temp", group_name = start_vars['group'])
+ else:
+ self.dataset = data_set.create_dataset(start_vars['dataset'])
+ else:
+ self.dataset = data_set.create_dataset(start_vars['dataset'])
logger.debug("After creating dataset")
self.species = TheSpecies(dataset=self.dataset)
logger.debug("After creating species")
@@ -35,11 +41,14 @@ def get_trait_db_obs(self, trait_db_list):
self.trait_list = []
for trait in trait_db_list:
- data, _separator, hmac = trait.rpartition(':')
+ data, _separator, hmac_string = trait.rpartition(':')
data = data.strip()
- assert hmac==user_manager.actual_hmac_creation(data), "Data tampering?"
+ assert hmac_string==hmac.hmac_creation(data), "Data tampering?"
trait_name, dataset_name = data.split(":")
- dataset_ob = data_set.create_dataset(dataset_name)
+ if dataset_name == "Temp":
+ dataset_ob = data_set.create_dataset(dataset_name=dataset_name, dataset_type="Temp", group_name=trait_name.split("_")[2])
+ else:
+ dataset_ob = data_set.create_dataset(dataset_name)
trait_ob = GeneralTrait(dataset=dataset_ob,
name=trait_name,
cellid=None)
diff --git a/wqflask/utility/hmac.py b/wqflask/utility/hmac.py
new file mode 100644
index 00000000..d8a0eace
--- /dev/null
+++ b/wqflask/utility/hmac.py
@@ -0,0 +1,38 @@
+from __future__ import print_function, division, absolute_import
+
+import hmac
+import hashlib
+
+from wqflask import app
+
+def hmac_creation(stringy):
+ """Helper function to create the actual hmac"""
+
+ secret = app.config['SECRET_HMAC_CODE']
+
+ hmaced = hmac.new(secret, stringy, hashlib.sha1)
+ hm = hmaced.hexdigest()
+ # ZS: Leaving the below comment here to ask Pjotr about
+ # "Conventional wisdom is that you don't lose much in terms of security if you throw away up to half of the output."
+ # http://www.w3.org/QA/2009/07/hmac_truncation_in_xml_signatu.html
+ hm = hm[:20]
+ return hm
+
+def data_hmac(stringy):
+ """Takes arbitray data string and appends :hmac so we know data hasn't been tampered with"""
+ return stringy + ":" + hmac_creation(stringy)
+
+def url_for_hmac(endpoint, **values):
+ """Like url_for but adds an hmac at the end to insure the url hasn't been tampered with"""
+
+ url = url_for(endpoint, **values)
+
+ hm = hmac_creation(url)
+ if '?' in url:
+ combiner = "&"
+ else:
+ combiner = "?"
+ return url + combiner + "hm=" + hm
+
+app.jinja_env.globals.update(url_for_hmac=url_for_hmac,
+ data_hmac=data_hmac) \ No newline at end of file
diff --git a/wqflask/utility/logger.py b/wqflask/utility/logger.py
index bacb0aa4..510b1041 100644
--- a/wqflask/utility/logger.py
+++ b/wqflask/utility/logger.py
@@ -33,7 +33,7 @@ from pprint import pformat as pf
from inspect import stack
import datetime
-from utility.tools import LOG_LEVEL, LOG_LEVEL_DEBUG, LOG_SQL, LOG_FORMAT
+from utility.tools import LOG_LEVEL, LOG_LEVEL_DEBUG, LOG_SQL
class GNLogger:
"""A logger class with some additional functionality, such as
@@ -72,7 +72,7 @@ LOG_LEVEL_DEBUG (NYI).
def warning(self,*args):
"""Call logging.warning for multiple args"""
self.collect(self.logger.warning,*args)
- self.logger.warning(self.collect(*args))
+ # self.logger.warning(self.collect(*args))
def error(self,*args):
"""Call logging.error for multiple args"""
diff --git a/wqflask/utility/redis_tools.py b/wqflask/utility/redis_tools.py
new file mode 100644
index 00000000..0754e16f
--- /dev/null
+++ b/wqflask/utility/redis_tools.py
@@ -0,0 +1,80 @@
+from __future__ import print_function, division, absolute_import
+
+import simplejson as json
+
+import redis # used for collections
+Redis = redis.StrictRedis()
+
+import logging
+
+from flask import (render_template, flash)
+
+from utility.logger import getLogger
+logger = getLogger(__name__)
+
+def is_redis_available():
+ try:
+ Redis.ping()
+ except:
+ return False
+ return True
+
+def get_user_id(column_name, column_value):
+ user_list = Redis.hgetall("users")
+ for key in user_list:
+ user_ob = json.loads(user_list[key])
+ if column_name in user_ob and user_ob[column_name] == column_value:
+ return key
+
+ return None
+
+def get_user_by_unique_column(column_name, column_value):
+ item_details = None
+
+ user_list = Redis.hgetall("users")
+ if column_name != "user_id":
+ for key in user_list:
+ user_ob = json.loads(user_list[key])
+ if column_name in user_ob and user_ob[column_name] == column_value:
+ item_details = user_ob
+ else:
+ item_details = json.loads(user_list[column_value])
+
+ return item_details
+
+def set_user_attribute(user_id, column_name, column_value):
+ user_info = json.loads(Redis.hget("users", user_id))
+ user_info[column_name] = column_value
+
+ Redis.hset("users", user_id, json.dumps(user_info))
+
+def get_user_collections(user_id):
+ collections = None
+ collections = Redis.hget("collections", user_id)
+
+ if collections:
+ return json.loads(collections)
+ else:
+ return []
+
+def save_user(user, user_id):
+ Redis.hset("users", user_id, json.dumps(user))
+
+def save_collections(user_id, collections_ob):
+ Redis.hset("collections", user_id, collections_ob)
+
+def save_verification_code(user_email, code):
+ Redis.hset("verification_codes", code, user_email)
+
+def check_verification_code(code):
+ email_address = None
+ user_details = None
+ email_address = Redis.hget("verification_codes", code)
+ return email_address
+
+ if email_address:
+ user_details = get_user_by_unique_column('email_address', email_address)
+ return user_details
+ else:
+ return None
+ flash("Invalid code: Password reset code does not exist or might have expired!", "error")
diff --git a/wqflask/utility/startup_config.py b/wqflask/utility/startup_config.py
new file mode 100644
index 00000000..5a62cc50
--- /dev/null
+++ b/wqflask/utility/startup_config.py
@@ -0,0 +1,39 @@
+
+from wqflask import app
+from utility.tools import WEBSERVER_MODE, show_settings, get_setting_int, get_setting, get_setting_bool
+
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
+BLUE = '\033[94m'
+GREEN = '\033[92m'
+BOLD = '\033[1m'
+ENDC = '\033[0m'
+
+def app_config():
+ app.config['SESSION_TYPE'] = 'filesystem'
+ if not app.config.get('SECRET_KEY'):
+ import os
+ app.config['SECRET_KEY'] = str(os.urandom(24))
+
+ mode = WEBSERVER_MODE
+ if mode == "DEV" or mode == "DEBUG":
+ app.config['TEMPLATES_AUTO_RELOAD'] = True
+ # if mode == "DEBUG":
+ # app.config['EXPLAIN_TEMPLATE_LOADING'] = True <--- use overriding app param instead
+ print("==========================================")
+ show_settings()
+
+ port = get_setting_int("SERVER_PORT")
+
+ if get_setting_bool("USE_GN_SERVER"):
+ print("GN2 API server URL is ["+BLUE+get_setting("GN_SERVER_URL")+ENDC+"]")
+ import requests
+ page = requests.get(get_setting("GN_SERVER_URL"))
+ if page.status_code != 200:
+ raise Exception("API server not found!")
+
+ import utility.elasticsearch_tools as es
+ es.test_elasticsearch_connection()
+
+ print("GN2 is running. Visit %s[http://localhost:%s/%s](%s)" % (BLUE,str(port),ENDC,get_setting("WEBSERVER_URL")))
diff --git a/wqflask/utility/svg.py b/wqflask/utility/svg.py
index 512bc9e6..db13b9d1 100644
--- a/wqflask/utility/svg.py
+++ b/wqflask/utility/svg.py
@@ -1029,7 +1029,7 @@ class drawing:
try:
xv.feed(svg)
except:
- raise "SVG is not well formed, see messages above"
+ raise Exception("SVG is not well formed, see messages above")
else:
print "SVG well formed"
if __name__=='__main__':
diff --git a/wqflask/utility/tools.py b/wqflask/utility/tools.py
index c28c617a..75bddb24 100644
--- a/wqflask/utility/tools.py
+++ b/wqflask/utility/tools.py
@@ -13,6 +13,11 @@ logger = logging.getLogger(__name__ )
OVERRIDES = {}
+def app_set(command_id, value):
+ """Set application wide value"""
+ app.config.setdefault(command_id,value)
+ return value
+
def get_setting(command_id,guess=None):
"""Resolve a setting from the environment or the global settings in
app.config, with valid_path is a function checking whether the
@@ -40,15 +45,16 @@ def get_setting(command_id,guess=None):
def value(command):
if command:
# sys.stderr.write("Found "+command+"\n")
+ app_set(command_id,command)
return command
else:
return None
# ---- Check whether environment exists
- logger.debug("Looking for "+command_id+"\n")
+ # print("Looking for "+command_id+"\n")
command = value(os.environ.get(command_id))
if command is None or command == "":
- command = OVERRIDES.get(command_id)
+ command = OVERRIDES.get(command_id) # currently not in use
if command is None:
# ---- Check whether setting exists in app
command = value(app.config.get(command_id))
@@ -57,7 +63,7 @@ def get_setting(command_id,guess=None):
if command is None or command == "":
# print command
raise Exception(command_id+' setting unknown or faulty (update default_settings.py?).')
- logger.debug("Set "+command_id+"="+str(command))
+ # print("Set "+command_id+"="+str(command))
return command
def get_setting_bool(id):
@@ -89,14 +95,29 @@ def valid_path(dir):
return dir
return None
-def pylmm_command(guess=None):
- return valid_bin(get_setting("PYLMM_COMMAND",guess))
+def js_path(module=None):
+ """
+ Find the JS module in the two paths
+ """
+ try_gn = get_setting("JS_GN_PATH")+"/"+module
+ if valid_path(try_gn):
+ return try_gn
+ try_guix = get_setting("JS_GUIX_PATH")+"/"+module
+ if valid_path(try_guix):
+ return try_guix
+ raise "No JS path found for "+module+" (if not in Guix check JS_GN_PATH)"
+
+def reaper_command(guess=None):
+ return get_setting("REAPER_COMMAND",guess)
def gemma_command(guess=None):
- return valid_bin(get_setting("GEMMA_COMMAND",guess))
+ return assert_bin(get_setting("GEMMA_COMMAND",guess))
+
+def gemma_wrapper_command(guess=None):
+ return assert_bin(get_setting("GEMMA_WRAPPER_COMMAND",guess))
def plink_command(guess=None):
- return valid_bin(get_setting("PLINK_COMMAND",guess))
+ return assert_bin(get_setting("PLINK_COMMAND",guess))
def flat_file_exists(subdir):
base = get_setting("GENENETWORK_FILES")
@@ -108,6 +129,11 @@ def flat_files(subdir=None):
return assert_dir(base+"/"+subdir)
return assert_dir(base)
+def assert_bin(fn):
+ if not valid_bin(fn):
+ raise Exception("ERROR: can not find binary "+fn)
+ return fn
+
def assert_dir(dir):
if not valid_path(dir):
raise Exception("ERROR: can not find directory "+dir)
@@ -121,9 +147,14 @@ def assert_writable_dir(dir):
fh.close()
os.remove(fn)
except IOError:
- raise Exception('Unable to write test.txt to directory ' + dir )
+ raise Exception('Unable to write test.txt to directory ' + dir)
return dir
+def assert_file(fn):
+ if not valid_file(fn):
+ raise Exception('Unable to find file '+fn)
+ return fn
+
def mk_dir(dir):
if not valid_path(dir):
os.makedirs(dir)
@@ -148,6 +179,9 @@ def locate(name, subdir=None):
if subdir: sys.stderr.write(subdir)
raise Exception("Can not locate "+name+" in "+base)
+def locate_phewas(name, subdir=None):
+ return locate(name,'/phewas/'+subdir)
+
def locate_ignore_error(name, subdir=None):
"""
Locate a static flat file in the GENENETWORK_FILES environment.
@@ -186,7 +220,7 @@ def show_settings():
logger.info(OVERRIDES)
logger.info(BLUE+"Mr. Mojo Risin 2"+ENDC)
- print "runserver.py: ****** Webserver configuration ******"
+ print "runserver.py: ****** Webserver configuration - k,v pairs from app.config ******"
keylist = app.config.keys()
keylist.sort()
for k in keylist:
@@ -201,38 +235,69 @@ GN_VERSION = get_setting('GN_VERSION')
HOME = get_setting('HOME')
WEBSERVER_MODE = get_setting('WEBSERVER_MODE')
GN_SERVER_URL = get_setting('GN_SERVER_URL')
+SERVER_PORT = get_setting_int('SERVER_PORT')
SQL_URI = get_setting('SQL_URI')
LOG_LEVEL = get_setting('LOG_LEVEL')
LOG_LEVEL_DEBUG = get_setting_int('LOG_LEVEL_DEBUG')
LOG_SQL = get_setting_bool('LOG_SQL')
-LOG_SQLALCHEMY = get_setting_bool('LOG_SQLALCHEMY')
+LOG_SQL_ALCHEMY = get_setting_bool('LOG_SQL_ALCHEMY')
LOG_BENCH = get_setting_bool('LOG_BENCH')
LOG_FORMAT = "%(message)s" # not yet in use
USE_REDIS = get_setting_bool('USE_REDIS')
USE_GN_SERVER = get_setting_bool('USE_GN_SERVER')
GENENETWORK_FILES = get_setting('GENENETWORK_FILES')
-TEMP_TRAITS = get_setting('TEMP_TRAITS')
-
-PYLMM_COMMAND = pylmm_command()
-GEMMA_COMMAND = gemma_command()
-GEMMA_RESULTS_PATH = get_setting('GEMMA_RESULTS_PATH')
-PLINK_COMMAND = plink_command()
+JS_GUIX_PATH = get_setting('JS_GUIX_PATH')
+assert_dir(JS_GUIX_PATH)
+JS_GN_PATH = get_setting('JS_GN_PATH')
+# assert_dir(JS_GN_PATH)
+
+GITHUB_CLIENT_ID = get_setting('GITHUB_CLIENT_ID')
+GITHUB_CLIENT_SECRET = get_setting('GITHUB_CLIENT_SECRET')
+if GITHUB_CLIENT_ID != 'UNKNOWN' and GITHUB_CLIENT_SECRET:
+ GITHUB_AUTH_URL = "https://github.com/login/oauth/authorize?client_id=" + \
+ GITHUB_CLIENT_ID+"&client_secret="+GITHUB_CLIENT_SECRET
+ GITHUB_API_URL = get_setting('GITHUB_API_URL')
+
+ORCID_CLIENT_ID = get_setting('ORCID_CLIENT_ID')
+ORCID_CLIENT_SECRET = get_setting('ORCID_CLIENT_SECRET')
+ORCID_AUTH_URL = None
+if ORCID_CLIENT_ID != 'UNKNOWN' and ORCID_CLIENT_SECRET:
+ ORCID_AUTH_URL = "https://orcid.org/oauth/authorize?response_type=code&scope=/authenticate&show_login=true&client_id=" + \
+ ORCID_CLIENT_ID+"&client_secret="+ORCID_CLIENT_SECRET
+ ORCID_TOKEN_URL = get_setting('ORCID_TOKEN_URL')
+
+ELASTICSEARCH_HOST = get_setting('ELASTICSEARCH_HOST')
+ELASTICSEARCH_PORT = get_setting('ELASTICSEARCH_PORT')
+import utility.elasticsearch_tools as es
+es.test_elasticsearch_connection()
+
+SMTP_CONNECT = get_setting('SMTP_CONNECT')
+SMTP_USERNAME = get_setting('SMTP_USERNAME')
+SMTP_PASSWORD = get_setting('SMTP_PASSWORD')
+
+REAPER_COMMAND = app_set("REAPER_COMMAND",reaper_command())
+GEMMA_COMMAND = app_set("GEMMA_COMMAND",gemma_command())
+assert(GEMMA_COMMAND is not None)
+PLINK_COMMAND = app_set("PLINK_COMMAND",plink_command())
+GEMMA_WRAPPER_COMMAND = gemma_wrapper_command()
TEMPDIR = tempdir() # defaults to UNIX TMPDIR
+assert_dir(TEMPDIR)
+
+# ---- Handle specific JS modules
+JS_GUIX_PATH = get_setting("JS_GUIX_PATH")
+assert_dir(JS_GUIX_PATH)
+assert_dir(JS_GUIX_PATH+'/cytoscape-panzoom')
+
+CSS_PATH = "UNKNOWN"
+# assert_dir(JS_PATH)
+
+JS_TWITTER_POST_FETCHER_PATH = get_setting("JS_TWITTER_POST_FETCHER_PATH",js_path("javascript-twitter-post-fetcher"))
+assert_dir(JS_TWITTER_POST_FETCHER_PATH)
+assert_file(JS_TWITTER_POST_FETCHER_PATH+"/js/twitterFetcher_min.js")
+
+JS_CYTOSCAPE_PATH = get_setting("JS_CYTOSCAPE_PATH",js_path("cytoscape"))
+assert_dir(JS_CYTOSCAPE_PATH)
+assert_file(JS_CYTOSCAPE_PATH+'/cytoscape.min.js')
-from six import string_types
-
-if os.environ.get('WQFLASK_OVERRIDES'):
- jsonfn = get_setting('WQFLASK_OVERRIDES')
- logger.error("WQFLASK_OVERRIDES: %s" % jsonfn)
- with open(jsonfn) as data_file:
- overrides = json.load(data_file)
- for k in overrides:
- cmd = overrides[k]
- if isinstance(cmd, string_types):
- OVERRIDES[k] = eval(cmd)
- else:
- OVERRIDES[k] = cmd
- logger.debug(OVERRIDES)
-
-assert_dir(get_setting("TWITTER_POST_FETCHER_JS_PATH"))
+# assert_file(PHEWAS_FILES+"/auwerx/PheWAS_pval_EMMA_norm.RData")
diff --git a/wqflask/utility/type_checking.py b/wqflask/utility/type_checking.py
new file mode 100644
index 00000000..f15b17e2
--- /dev/null
+++ b/wqflask/utility/type_checking.py
@@ -0,0 +1,42 @@
+# Type checking functions
+
+def is_float(value):
+ try:
+ float(value)
+ return True
+ except:
+ return False
+
+def is_int(value):
+ try:
+ int(value)
+ return True
+ except:
+ return False
+
+def is_str(value):
+ if value is None:
+ return False
+ try:
+ str(value)
+ return True
+ except:
+ return False
+
+def get_float(vars,name,default=None):
+ if name in vars:
+ if is_float(vars[name]):
+ return float(vars[name])
+ return default
+
+def get_int(vars,name,default=None):
+ if name in vars:
+ if is_int(vars[name]):
+ return float(vars[name])
+ return default
+
+def get_string(vars,name,default=None):
+ if name in vars:
+ if not vars[name] is None:
+ return str(vars[name])
+ return default
diff --git a/wqflask/utility/webqtlUtil.py b/wqflask/utility/webqtlUtil.py
index 4fc978f5..53661ae4 100644
--- a/wqflask/utility/webqtlUtil.py
+++ b/wqflask/utility/webqtlUtil.py
@@ -30,13 +30,8 @@ import re
import math
from math import *
-from htmlgen import HTMLgen2 as HT
-
from base import webqtlConfig
-
-
-
# NL, 07/27/2010. moved from webqtlForm.py
#Dict of Parents and F1 information, In the order of [F1, Mat, Pat]
ParInfo ={
@@ -57,180 +52,18 @@ ParInfo ={
'AXB':['ABF1', 'BAF1', 'C57BL/6J', 'A/J'],
'BXA':['BAF1', 'ABF1', 'C57BL/6J', 'A/J'],
'LXS':['LSF1', 'SLF1', 'ISS', 'ILS'],
-'HXBBXH':['HSRBNF1', 'BNHSRF1', 'BN', 'HSR'],
+'HXBBXH':['SHR_BNF1', 'BN_SHRF1', 'BN-Lx/Cub', 'SHR/OlaIpcv'],
'BayXSha':['BayXShaF1', 'ShaXBayF1', 'Bay-0','Shahdara'],
'ColXBur':['ColXBurF1', 'BurXColF1', 'Col-0','Bur-0'],
'ColXCvi':['ColXCviF1', 'CviXColF1', 'Col-0','Cvi'],
-'SXM':['SMF1', 'MSF1', 'Steptoe','Morex']
+'SXM':['SMF1', 'MSF1', 'Steptoe','Morex'],
+'HRDP':['SHR_BNF1', 'BN_SHRF1', 'BN-Lx/Cub', 'SHR/OlaIpcv']
}
-
-# NL, 07/27/2010. moved from template.py
-IMGSTEP1 = HT.Image('/images/step1.gif', alt='STEP 1',border=0) #XZ, Only be used in inputPage.py
-IMGSTEP2 = HT.Image('/images/step2.gif', alt='STEP 2',border=0) #XZ, Only be used in inputPage.py
-IMGSTEP3 = HT.Image('/images/step3.gif', alt='STEP 3',border=0) #XZ, Only be used in inputPage.py
-IMGNEXT = HT.Image('/images/arrowdown.gif', alt='NEXT',border=0) #XZ, Only be used in inputPage.py
-
-IMGASC = HT.Image("/images/sortup.gif", border=0)
-IMGASCON = HT.Image("/images/sortupon.gif", border=0)
-IMGDESC = HT.Image("/images/sortdown.gif", border=0)
-IMGDESCON = HT.Image("/images/sortdownon.gif", border=0)
-
-"""
-IMGASC = HT.Image("/images/sortup_icon.gif", border=0)
-IMGASCON = HT.Image("/images/sortupon.gif", border=0)
-IMGDESC = HT.Image("/images/sortdown_icon.gif", border=0)
-IMGDESCON = HT.Image("/images/sortdownon.gif", border=0)
-IMG_UNSORTED = HT.Image("/images/unsorted_icon.gif", border=0)
-"""
-
-PROGRESSBAR = HT.Image('/images/waitAnima2.gif', alt='checkblue',align="middle",border=0)
-
#########################################
# Accessory Functions
#########################################
-def inverseCumul(p):
- #Coefficients in rational approximations.
- a = [-3.969683028665376e+01,2.209460984245205e+02,-2.759285104469687e+02,1.383577518672690e+02,-3.066479806614716e+01,2.506628277459239e+00]
-
- b = [-5.447609879822406e+01,1.615858368580409e+02,-1.556989798598866e+02,6.680131188771972e+01,-1.328068155288572e+01]
-
- c = [-7.784894002430293e-03,-3.223964580411365e-01,-2.400758277161838e+00,-2.549732539343734e+00,4.374664141464968e+00,2.938163982698783e+00]
-
- d = [7.784695709041462e-03,3.224671290700398e-01,2.445134137142996e+00,3.754408661907416e+00]
-
- #Define break-points.
-
- p_low = 0.02425
- p_high = 1 - p_low
-
- #Rational approximation for lower region.
-
- if p > 0 and p < p_low:
- q = sqrt(-2*log(p))
- x = (((((c[0]*q+c[1])*q+c[2])*q+c[3])*q+c[4])*q+c[5]) / ((((d[0]*q+d[1])*q+d[2])*q+d[3])*q+1)
-
-
- #Rational approximation for central region.
-
- elif p>= p_low and p <= p_high:
- q = p - 0.5
- r = q*q
- x = (((((a[0]*r+a[1])*r+a[2])*r+a[3])*r+a[4])*r+a[5])*q /(((((b[0]*r+b[1])*r+b[2])*r+b[3])*r+b[4])*r+1)
-
- #Rational approximation for upper region.
-
- elif p>p_high and p < 1:
- q = sqrt(-2*log(1-p))
- x = -(((((c[0]*q+c[1])*q+c[2])*q+c[3])*q+c[4])*q+c[5]) /((((d[0]*q+d[1])*q+d[2])*q+d[3])*q+1)
-
- else:
- return None
-
- if p>0 and p < 1:
- e = 0.5 * erfcc(-x/sqrt(2)) - p
- u = e * sqrt(2*pi) * exp(x*x/2)
- x = x - u/(1 + x*u/2)
- return x
- else:
- return None
-
-def erfcc(x):
- z=abs(x)
- t=1.0/(1.0+0.5*z)
- ans=t*exp(-z*z-1.26551223+t*(1.00002368+t*(0.37409196+t*(0.09678418+t*(-0.18628806+t*(0.27886807+t*(-1.13520398+t*(1.48851587+t*(-0.82215223+t*0.17087277)))))))))
- if x>=0.0:
- return ans
- else:
- return 2.0-ans
-
-def U(n):
- x=pow(0.5,1.0/n)
- m=[1-x]
- for i in range(2,n):
- a=(i-0.3175)/(n+0.365)
- m.append(a)
- m.append(x)
- return m
-
-def decodeEscape(str):
- a = str
- pattern = re.compile('(%[0-9A-Fa-f][0-9A-Fa-f])')
- match = pattern.findall(a)
- matched = []
- for item in match:
- if item not in matched:
- a = a.replace(item, '%c' % eval("0x"+item[-2:]))
- matched.append(item)
- return a
-
-def exportData(hddn, tdata, NP = None):
- for key in tdata.keys():
- _val, _var, _N = tdata[key].val, tdata[key].var, tdata[key].N
- if _val != None:
- hddn[key] = _val
- if _var != None:
- hddn['V'+key] = _var
- if NP and _N != None:
- hddn['N'+key] = _N
-
-def genShortStrainName(RISet='', input_strainName=''):
- #aliasStrainDict = {'C57BL/6J':'B6','DBA/2J':'D2'}
- strainName = input_strainName
- if RISet != 'AXBXA':
- if RISet == 'BXD300':
- this_RISet = 'BXD'
- elif RISet == 'BDF2-2005':
- this_RISet = 'CASE05_'
- else:
- this_RISet = RISet
- strainName = string.replace(strainName,this_RISet,'')
- strainName = string.replace(strainName,'CASE','')
- try:
- strainName = "%02d" % int(strainName)
- except:
- pass
- else:
- strainName = string.replace(strainName,'AXB','A')
- strainName = string.replace(strainName,'BXA','B')
- try:
- strainName = strainName[0] + "%02d" % int(strainName[1:])
- except:
- pass
- return strainName
-
-def toInt(in_str):
- "Converts an arbitrary string to an unsigned integer"
- start = -1
- end = -1
- for i, char in enumerate(in_str):
- if char >= '0' and char <= '9':
- if start < 0:
- start = i
- end = i+1
- else:
- if start >= 0:
- break
- if start < end:
- return int(in_str[start:end])
- else:
- return -1
-
-def transpose(m):
- 'transpose a matrix'
- n = len(m)
- return [[m[j][i] for i in range(len(m[0])) for j in range(n)][k*n:k*n+n] for k in range(len(m[0]))]
-
-def asymTranspose(m):
- 'transpose a matrix'
- t = max(map(len, m))
- n = len(m)
- m2 = [["-"]]*n
- for i in range(n):
- m2[i] = m[i] + [""]*(t- len(m[i]))
- return [[m2[j][i] for i in range(len(m2[0])) for j in range(n)][k*n:k*n+n] for k in range(len(m2[0]))]
-
def genRandStr(prefix = "", length=8, chars=string.letters+string.digits):
from random import choice
_str = prefix[:]
@@ -238,84 +71,6 @@ def genRandStr(prefix = "", length=8, chars=string.letters+string.digits):
_str += choice(chars)
return _str
-def generate_session():
- import sha
- return sha.new(str(time.time())).hexdigest()
-
-def cvt2Dict(x):
- tmp = {}
- for key in x.keys():
- tmp[key] = x[key]
- return tmp
-
-def dump_session(session_obj, filename):
- "It seems mod python can only cPickle most basic data type"
- import cPickle
- session_file = open(filename, 'wb')
- #try:
- # pass
- #except:
- # pass
- cPickle.dump(session_obj, session_file)
- session_file.close()
-
-def StringAsFloat(str):
- 'Converts string to float but catches any exception and returns None'
- try:
- return float(str)
- except:
- return None
-
-def IntAsFloat(str):
- 'Converts string to Int but catches any exception and returns None'
- try:
- return int(str)
- except:
- return None
-
-def FloatAsFloat(flt):
- 'Converts float to string but catches any exception and returns None'
- try:
- return float("%2.3f" % flt)
- except:
- return None
-
-def RemoveZero(flt):
- 'Converts string to float but catches any exception and returns None'
- try:
- if abs(flt) < 1e-6:
- return None
- else:
- return flt
- except:
- return None
-
-
-def SciFloat(d):
- 'Converts string to float but catches any exception and returns None'
-
- try:
- if abs(d) <= 1.0e-4:
- return "%1.2e" % d
- else:
- return "%1.5f" % d
- except:
- return None
-
-###To be removed
-def FloatList2String(lst):
- 'Converts float list to string but catches any exception and returns None'
- tt=''
- try:
- for item in lst:
- if item == None:
- tt += 'X '
- else:
- tt += '%f ' % item
- return tt
- except:
- return ""
-
def ListNotNull(lst):
'''Obsolete - Use built in function any (or all or whatever)
@@ -328,427 +83,6 @@ def ListNotNull(lst):
return 1
return None
-###To be removed
-def FileDataProcess(str):
- 'Remove the description text from the input file if theres any'
- i=0
- while i<len(str):
- if str[i]<'\x7f' and str[i]>'\x20':
- break
- else:
- i+=1
- str=str[i:]
- str=string.join(string.split(str,'\000'),'')
- i=string.find(str,"*****")
- if i>-1:
- return str[i+5:]
- else:
- return str
-
-def rank(a,lst,offset=0):
- """Calculate the integer rank of a number in an array, can be used to calculate p-value"""
- n = len(lst)
- if n == 2:
- if a <lst[0]:
- return offset
- elif a > lst[1]:
- return offset + 2
- else:
- return offset +1
- elif n == 1:
- if a <lst[0]:
- return offset
- else:
- return offset +1
- elif n== 0:
- return offset
- else:
- mid = n/2
- if a < lst[mid]:
- return rank(a,lst[:mid-1],offset)
- else:
- return rank(a,lst[mid:],offset+mid)
-
-def cmpScanResult(A,B):
- try:
- if A.LRS > B.LRS:
- return 1
- elif A.LRS == B.LRS:
- return 0
- else:
- return -1
- except:
- return 0
-
-
-def cmpScanResult2(A,B):
- try:
- if A.LRS < B.LRS:
- return 1
- elif A.LRS == B.LRS:
- return 0
- else:
- return -1
- except:
- return 0
-
-def cmpOrder(A,B):
- try:
- if A[1] < B[1]:
- return -1
- elif A[1] == B[1]:
- return 0
- else:
- return 1
- except:
- return 0
-
-def cmpOrder2(A,B):
- try:
- if A[-1] < B[-1]:
- return -1
- elif A[-1] == B[-1]:
- return 0
- else:
- return 1
- except:
- return 0
-
-
-
-
-def calRank(xVals, yVals, N): ### Zach Sloan, February 4 2010
- """
- Returns a ranked set of X and Y values. These are used when generating
- a Spearman scatterplot. Bear in mind that this sets values equal to each
- other as the same rank.
- """
- XX = []
- YY = []
- X = [0]*len(xVals)
- Y = [0]*len(yVals)
- j = 0
-
- for i in range(len(xVals)):
-
- if xVals[i] != None and yVals[i] != None:
- XX.append((j, xVals[i]))
- YY.append((j, yVals[i]))
- j = j + 1
-
- NN = len(XX)
-
- XX.sort(cmpOrder2)
- YY.sort(cmpOrder2)
-
- j = 1
- rank = 0.0
-
- while j < NN:
-
- if XX[j][1] != XX[j-1][1]:
- X[XX[j-1][0]] = j
- j = j+1
-
- else:
- jt = j+1
- ji = j
- for jt in range(j+1, NN):
- if (XX[jt][1] != XX[j-1][1]):
- break
- rank = 0.5*(j+jt)
- for ji in range(j-1, jt):
- X[XX[ji][0]] = rank
- if (jt == NN-1):
- if (XX[jt][1] == XX[j-1][1]):
- X[XX[NN-1][0]] = rank
- j = jt+1
-
- if j == NN:
- if X[XX[NN-1][0]] == 0:
- X[XX[NN-1][0]] = NN
-
- j = 1
- rank = 0.0
-
- while j < NN:
-
- if YY[j][1] != YY[j-1][1]:
- Y[YY[j-1][0]] = j
- j = j+1
- else:
- jt = j+1
- ji = j
- for jt in range(j+1, NN):
- if (YY[jt][1] != YY[j-1][1]):
- break
- rank = 0.5*(j+jt)
- for ji in range(j-1, jt):
- Y[YY[ji][0]] = rank
- if (jt == NN-1):
- if (YY[jt][1] == YY[j-1][1]):
- Y[YY[NN-1][0]] = rank
- j = jt+1
-
- if j == NN:
- if Y[YY[NN-1][0]] == 0:
- Y[YY[NN-1][0]] = NN
-
- return (X,Y)
-
-def calCorrelationRank(xVals,yVals,N):
- """
- Calculated Spearman Ranked Correlation. The algorithm works
- by setting all tied ranks to the average of those ranks (for
- example, if ranks 5-10 all have the same value, each will be set
- to rank 7.5).
- """
-
- XX = []
- YY = []
- j = 0
-
- for i in range(len(xVals)):
- if (xVals[i]!= None and yVals[i]!= None) and (xVals[i] != "None" and yVals[i] != "None"):
- XX.append((j,xVals[i]))
- YY.append((j,yVals[i]))
- j = j+1
-
- NN = len(XX)
- if NN <6:
- return (0.0,NN)
- XX.sort(cmpOrder2)
- YY.sort(cmpOrder2)
- X = [0]*NN
- Y = [0]*NN
-
- j = 1
- rank = 0.0
- t = 0.0
- sx = 0.0
-
- while j < NN:
-
- if XX[j][1] != XX[j-1][1]:
- X[XX[j-1][0]] = j
- j = j+1
-
- else:
- jt = j+1
- ji = j
- for jt in range(j+1, NN):
- if (XX[jt][1] != XX[j-1][1]):
- break
- rank = 0.5*(j+jt)
- for ji in range(j-1, jt):
- X[XX[ji][0]] = rank
- t = jt-j
- sx = sx + (t*t*t-t)
- if (jt == NN-1):
- if (XX[jt][1] == XX[j-1][1]):
- X[XX[NN-1][0]] = rank
- j = jt+1
-
- if j == NN:
- if X[XX[NN-1][0]] == 0:
- X[XX[NN-1][0]] = NN
-
- j = 1
- rank = 0.0
- t = 0.0
- sy = 0.0
-
- while j < NN:
-
- if YY[j][1] != YY[j-1][1]:
- Y[YY[j-1][0]] = j
- j = j+1
- else:
- jt = j+1
- ji = j
- for jt in range(j+1, NN):
- if (YY[jt][1] != YY[j-1][1]):
- break
- rank = 0.5*(j+jt)
- for ji in range(j-1, jt):
- Y[YY[ji][0]] = rank
- t = jt - j
- sy = sy + (t*t*t-t)
- if (jt == NN-1):
- if (YY[jt][1] == YY[j-1][1]):
- Y[YY[NN-1][0]] = rank
- j = jt+1
-
- if j == NN:
- if Y[YY[NN-1][0]] == 0:
- Y[YY[NN-1][0]] = NN
-
- D = 0.0
-
- for i in range(NN):
- D += (X[i]-Y[i])*(X[i]-Y[i])
-
- fac = (1.0 -sx/(NN*NN*NN-NN))*(1.0-sy/(NN*NN*NN-NN))
-
- return ((1-(6.0/(NN*NN*NN-NN))*(D+(sx+sy)/12.0))/math.sqrt(fac),NN)
-
-
-def calCorrelationRankText(dbdata,userdata,N): ### dcrowell = David Crowell, July 2008
- """Calculates correlation ranks with data formatted from the text file.
- dbdata, userdata are lists of strings. N is an int. Returns a float.
- Used by correlationPage"""
- XX = []
- YY = []
- j = 0
- for i in range(N):
- if (dbdata[i]!= None and userdata[i]!=None) and (dbdata[i]!= 'None' and userdata[i]!='None'):
- XX.append((j,float(dbdata[i])))
- YY.append((j,float(userdata[i])))
- j += 1
- NN = len(XX)
- if NN <6:
- return (0.0,NN)
- XX.sort(cmpOrder2)
- YY.sort(cmpOrder2)
- X = [0]*NN
- Y = [0]*NN
-
- j = 1
- rank = 0.0
- t = 0.0
- sx = 0.0
-
- while j < NN:
-
- if XX[j][1] != XX[j-1][1]:
- X[XX[j-1][0]] = j
- j = j+1
-
- else:
- jt = j+1
- ji = j
- for jt in range(j+1, NN):
- if (XX[jt][1] != XX[j-1][1]):
- break
- rank = 0.5*(j+jt)
- for ji in range(j-1, jt):
- X[XX[ji][0]] = rank
- t = jt-j
- sx = sx + (t*t*t-t)
- if (jt == NN-1):
- if (XX[jt][1] == XX[j-1][1]):
- X[XX[NN-1][0]] = rank
- j = jt+1
-
- if j == NN:
- if X[XX[NN-1][0]] == 0:
- X[XX[NN-1][0]] = NN
-
- j = 1
- rank = 0.0
- t = 0.0
- sy = 0.0
-
- while j < NN:
-
- if YY[j][1] != YY[j-1][1]:
- Y[YY[j-1][0]] = j
- j = j+1
- else:
- jt = j+1
- ji = j
- for jt in range(j+1, NN):
- if (YY[jt][1] != YY[j-1][1]):
- break
- rank = 0.5*(j+jt)
- for ji in range(j-1, jt):
- Y[YY[ji][0]] = rank
- t = jt - j
- sy = sy + (t*t*t-t)
- if (jt == NN-1):
- if (YY[jt][1] == YY[j-1][1]):
- Y[YY[NN-1][0]] = rank
- j = jt+1
-
- if j == NN:
- if Y[YY[NN-1][0]] == 0:
- Y[YY[NN-1][0]] = NN
-
- D = 0.0
-
- for i in range(NN):
- D += (X[i]-Y[i])*(X[i]-Y[i])
-
- fac = (1.0 -sx/(NN*NN*NN-NN))*(1.0-sy/(NN*NN*NN-NN))
-
- return ((1-(6.0/(NN*NN*NN-NN))*(D+(sx+sy)/12.0))/math.sqrt(fac),NN)
-
-
-
-def calCorrelation(dbdata,userdata,N):
- X = []
- Y = []
- for i in range(N):
- if dbdata[i]!= None and userdata[i]!= None:
- X.append(dbdata[i])
- Y.append(userdata[i])
- NN = len(X)
- if NN <6:
- return (0.0,NN)
- sx = reduce(lambda x,y:x+y,X,0.0)
- sy = reduce(lambda x,y:x+y,Y,0.0)
- meanx = sx/NN
- meany = sy/NN
- xyd = 0.0
- sxd = 0.0
- syd = 0.0
- for i in range(NN):
- xyd += (X[i] - meanx)*(Y[i]-meany)
- sxd += (X[i] - meanx)*(X[i] - meanx)
- syd += (Y[i] - meany)*(Y[i] - meany)
- try:
- corr = xyd/(sqrt(sxd)*sqrt(syd))
- except:
- corr = 0
- return (corr,NN)
-
-def calCorrelationText(dbdata,userdata,N): ### dcrowell July 2008
- """Calculates correlation coefficients with values formatted from text files. dbdata, userdata are lists of strings. N is an int. Returns a float
- Used by correlationPage"""
- X = []
- Y = []
- for i in range(N):
- #if (dbdata[i]!= None and userdata[i]!= None) and (dbdata[i]!= 'None' and userdata[i]!= 'None'):
- # X.append(float(dbdata[i]))
- # Y.append(float(userdata[i]))
- if dbdata[i] == None or dbdata[i] == 'None' or userdata[i] == None or userdata[i] == 'None':
- continue
- else:
- X.append(float(dbdata[i]))
- Y.append(float(userdata[i]))
- NN = len(X)
- if NN <6:
- return (0.0,NN)
- sx = sum(X)
- sy = sum(Y)
- meanx = sx/float(NN)
- meany = sy/float(NN)
- xyd = 0.0
- sxd = 0.0
- syd = 0.0
- for i in range(NN):
- x1 = X[i]-meanx
- y1 = Y[i]-meany
- xyd += x1*y1
- sxd += x1**2
- syd += y1**2
- try:
- corr = xyd/(sqrt(sxd)*sqrt(syd))
- except:
- corr = 0
- return (corr,NN)
-
-
def readLineCSV(line): ### dcrowell July 2008
"""Parses a CSV string of text and returns a list containing each element as a string.
Used by correlationPage"""
@@ -757,45 +91,6 @@ def readLineCSV(line): ### dcrowell July 2008
returnList[0]=returnList[0][1:]
return returnList
-
-def cmpCorr(A,B):
- try:
- if abs(A[1]) < abs(B[1]):
- return 1
- elif abs(A[1]) == abs(B[1]):
- return 0
- else:
- return -1
- except:
- return 0
-
-def cmpLitCorr(A,B):
- try:
- if abs(A[3]) < abs(B[3]): return 1
- elif abs(A[3]) == abs(B[3]):
- if abs(A[1]) < abs(B[1]): return 1
- elif abs(A[1]) == abs(B[1]): return 0
- else: return -1
- else: return -1
- except:
- return 0
-
-def cmpPValue(A,B):
- try:
- if A.corrPValue < B.corrPValue:
- return -1
- elif A.corrPValue == B.corrPValue:
- if abs(A.corr) > abs(B.corr):
- return -1
- elif abs(A.corr) < abs(B.corr):
- return 1
- else:
- return 0
- else:
- return 1
- except:
- return 0
-
def cmpEigenValue(A,B):
try:
if A[0] > B[0]:
@@ -807,80 +102,6 @@ def cmpEigenValue(A,B):
except:
return 0
-
-def cmpLRSFull(A,B):
- try:
- if A[0] < B[0]:
- return -1
- elif A[0] == B[0]:
- return 0
- else:
- return 1
- except:
- return 0
-
-def cmpLRSInteract(A,B):
- try:
- if A[1] < B[1]:
- return -1
- elif A[1] == B[1]:
- return 0
- else:
- return 1
- except:
- return 0
-
-
-def cmpPos(A,B):
- try:
- try:
- AChr = int(A.chr)
- except:
- AChr = 20
- try:
- BChr = int(B.chr)
- except:
- BChr = 20
- if AChr > BChr:
- return 1
- elif AChr == BChr:
- if A.mb > B.mb:
- return 1
- if A.mb == B.mb:
- return 0
- else:
- return -1
- else:
- return -1
- except:
- return 0
-
-def cmpGenoPos(A,B):
- try:
- A1 = A.chr
- B1 = B.chr
- try:
- A1 = int(A1)
- except:
- A1 = 25
- try:
- B1 = int(B1)
- except:
- B1 = 25
- if A1 > B1:
- return 1
- elif A1 == B1:
- if A.mb > B.mb:
- return 1
- if A.mb == B.mb:
- return 0
- else:
- return -1
- else:
- return -1
- except:
- return 0
-
def hasAccessToConfidentialPhenotypeTrait(privilege, userName, authorized_users):
access_to_confidential_phenotype_trait = 0
if webqtlConfig.USERDICT[privilege] > webqtlConfig.USERDICT['user']:
@@ -889,142 +110,4 @@ def hasAccessToConfidentialPhenotypeTrait(privilege, userName, authorized_users)
AuthorizedUsersList=map(string.strip, string.split(authorized_users, ','))
if AuthorizedUsersList.__contains__(userName):
access_to_confidential_phenotype_trait = 1
- return access_to_confidential_phenotype_trait
-
-
-class VisualizeException(Exception):
- def __init__(self, message):
- self.message = message
- def __str__(self):
- return self.message
-
-# safeConvert : (string -> A) -> A -> A
-# to convert a string to type A, using the supplied default value
-# if the given conversion function doesn't work
-def safeConvert(f, value, default):
- try:
- return f(value)
- except:
- return default
-
-# safeFloat : string -> float -> float
-# to convert a string to a float safely
-def safeFloat(value, default):
- return safeConvert(float, value, default)
-
-# safeInt: string -> int -> int
-# to convert a string to an int safely
-def safeInt(value, default):
- return safeConvert(int, value, default)
-
-# safeString : string -> (arrayof string) -> string -> string
-# if a string is not in a list of strings to pick a default value
-# for that string
-def safeString(value, validChoices, default):
- if value in validChoices:
- return value
- else:
- return default
-
-# yesNoToInt: string -> int
-# map "yes" -> 1 and "no" -> 0
-def yesNoToInt(value):
- if value == "yes":
- return 1
- elif value == "no":
- return 0
- else:
- return None
-
-# IntToYesNo: int -> string
-# map 1 -> "yes" and 0 -> "no"
-def intToYesNo(value):
- if value == 1:
- return "yes"
- elif value == 0:
- return "no"
- else:
- return None
-
-def formatField(name):
- name = name.replace("_", " ")
- name = name.title()
- #name = name.replace("Mb Mm6", "Mb");
- return name.replace("Id", "ID")
-
-#XZ, 03/27/2009: This function is very specific.
-#It is used by AJAX_table.py, correlationPage.py and dataPage.py
-
-
-def genTableObj(tblobj=None, file="", sortby = ("", ""), tableID = "sortable", addIndex = "1", hiddenColumns=[]):
- header = tblobj['header']
- body = tblobj['body']
- field, order = sortby
-
- #ZAS 9/12/2011 - The hiddenColumns array needs to be converted into a string so they can be placed into the javascript of each up/down button
- hiddenColumnsString = ",".join(hiddenColumns)
-
- tbl = HT.TableLite(Class="collap b2", cellspacing=1, cellpadding=5)
-
- hiddenColumnIdx = [] #indices of columns to hide
- idx = -1
- last_idx = 0 #ZS: This is the index of the last item in the regular table header (without any extra parameters). It is used to determine the index of each extra parameter.
- for row in header:
- hr = HT.TR()
- for i, item in enumerate(row):
- if (item.text == '') or (item.text not in hiddenColumns):
- if item.sort and item.text:
- down = HT.Href("javascript:xmlhttpPost('%smain.py?FormID=AJAX_table', '%s', 'sort=%s&order=down&file=%s&tableID=%s&addIndex=%s&hiddenColumns=%s')" % (webqtlConfig.CGIDIR, tableID, item.text, file, tableID, addIndex, hiddenColumnsString),IMGDESC)
- up = HT.Href("javascript:xmlhttpPost('%smain.py?FormID=AJAX_table', '%s', 'sort=%s&order=up&file=%s&tableID=%s&addIndex=%s&hiddenColumns=%s')" % (webqtlConfig.CGIDIR, tableID, item.text, file, tableID, addIndex, hiddenColumnsString),IMGASC)
- if item.text == field:
- idx = item.idx
- last_idx = idx
- if order == 'up':
- up = IMGASCON
- elif order == 'down':
- down = IMGDESCON
- item.html.append(HT.Div(up, down, style="float: bottom;"))
- hr.append(item.html)
- else:
- hiddenColumnIdx.append(i)
- tbl.append(hr)
-
- for i, row in enumerate(body):
- for j, item in enumerate(row):
- if order == 'down':
- if (item.val == '' or item.val == 'x' or item.val == 'None'):
- item.val = 0
- if order == 'up':
- if (item.val == '' or item.val == 'x' or item.val == 'None'):
- item.val = 'zzzzz'
-
- if idx >= 0:
- if order == 'down':
- body.sort(lambda A, B: cmp(B[idx].val, A[idx].val), key=natsort_key)
- elif order == 'up':
- body.sort(lambda A, B: cmp(A[idx].val, B[idx].val), key=natsort_key)
- else:
- pass
-
- for i, row in enumerate(body):
- hr = HT.TR(Id = row[0].text)
- for j, item in enumerate(row):
- if (j not in hiddenColumnIdx):
- if j == 0:
- if addIndex == "1":
- item.html.contents = [i+1] + item.html.contents
- hr.append(item.html)
- tbl.append(hr)
-
- return tbl
-
-def natsort_key(string):
- r = []
- for c in string:
- try:
- c = int(c)
- try: r[-1] = r[-1] * 10 + c
- except: r.append(c)
- except:
- r.append(c)
- return r
+ return access_to_confidential_phenotype_trait \ No newline at end of file
diff --git a/wqflask/wqflask/__init__.py b/wqflask/wqflask/__init__.py
index 2188ce17..399e794d 100644
--- a/wqflask/wqflask/__init__.py
+++ b/wqflask/wqflask/__init__.py
@@ -13,8 +13,8 @@ logging.basicConfig(level=logging.INFO)
app = Flask(__name__)
app.config.from_object('cfg.default_settings') # Get the defaults from cfg.default_settings
-app.config.from_envvar('WQFLASK_SETTINGS') # See http://flask.pocoo.org/docs/config/#configuring-from-files
-# Note we also use WQFLASK_OVERRIDES
+app.config.from_envvar('GN2_SETTINGS') # See http://flask.pocoo.org/docs/config/#configuring-from-files
+# Note no longer use the badly named WQFLASK_OVERRIDES (nyi)
app.jinja_env.globals.update(
undefined = jinja2.StrictUndefined,
@@ -22,3 +22,4 @@ app.jinja_env.globals.update(
)
import wqflask.views
+from wqflask.api import router \ No newline at end of file
diff --git a/wqflask/wqflask/api/__init__.py b/wqflask/wqflask/api/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/wqflask/wqflask/api/__init__.py
diff --git a/wqflask/wqflask/api/correlation.py b/wqflask/wqflask/api/correlation.py
new file mode 100644
index 00000000..66eb94ac
--- /dev/null
+++ b/wqflask/wqflask/api/correlation.py
@@ -0,0 +1,237 @@
+from __future__ import absolute_import, division, print_function
+
+import collections
+
+import scipy
+
+from MySQLdb import escape_string as escape
+
+from flask import g
+
+from base import data_set
+from base.trait import GeneralTrait, retrieve_sample_data
+
+from wqflask.correlation.show_corr_results import generate_corr_json
+from wqflask.correlation import correlation_functions
+
+from utility import webqtlUtil, helper_functions, corr_result_helpers
+from utility.benchmark import Bench
+
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
+def do_correlation(start_vars):
+ assert('db' in start_vars)
+ assert('target_db' in start_vars)
+ assert('trait_id' in start_vars)
+
+ this_dataset = data_set.create_dataset(dataset_name = start_vars['db'])
+ target_dataset = data_set.create_dataset(dataset_name = start_vars['target_db'])
+ this_trait = GeneralTrait(dataset = this_dataset, name = start_vars['trait_id'])
+ this_trait = retrieve_sample_data(this_trait, this_dataset)
+
+ corr_params = init_corr_params(start_vars)
+
+ corr_results = calculate_results(this_trait, this_dataset, target_dataset, corr_params)
+ #corr_results = collections.OrderedDict(sorted(corr_results.items(), key=lambda t: -abs(t[1][0])))
+
+ final_results = []
+ for _trait_counter, trait in enumerate(corr_results.keys()[:corr_params['return_count']]):
+ if corr_params['type'] == "tissue":
+ [sample_r, num_overlap, sample_p, symbol] = corr_results[trait]
+ result_dict = {
+ "trait" : trait,
+ "sample_r" : sample_r,
+ "#_strains" : num_overlap,
+ "p_value" : sample_p,
+ "symbol" : symbol
+ }
+ elif corr_params['type'] == "literature" or corr_params['type'] == "lit":
+ [gene_id, sample_r] = corr_results[trait]
+ result_dict = {
+ "trait" : trait,
+ "sample_r" : sample_r,
+ "gene_id" : gene_id
+ }
+ else:
+ [sample_r, sample_p, num_overlap] = corr_results[trait]
+ result_dict = {
+ "trait" : trait,
+ "sample_r" : sample_r,
+ "#_strains" : num_overlap,
+ "p_value" : sample_p
+ }
+
+ final_results.append(result_dict)
+
+ # json_corr_results = generate_corr_json(final_corr_results, this_trait, this_dataset, target_dataset, for_api = True)
+
+ return final_results
+
+def calculate_results(this_trait, this_dataset, target_dataset, corr_params):
+ corr_results = {}
+
+ target_dataset.get_trait_data()
+
+ if corr_params['type'] == "tissue":
+ trait_symbol_dict = this_dataset.retrieve_genes("Symbol")
+ corr_results = do_tissue_correlation_for_all_traits(this_trait, trait_symbol_dict, corr_params)
+ sorted_results = collections.OrderedDict(sorted(corr_results.items(),
+ key=lambda t: -abs(t[1][1])))
+ elif corr_params['type'] == "literature" or corr_params['type'] == "lit": #ZS: Just so a user can use either "lit" or "literature"
+ trait_geneid_dict = this_dataset.retrieve_genes("GeneId")
+ corr_results = do_literature_correlation_for_all_traits(this_trait, this_dataset, trait_geneid_dict, corr_params)
+ sorted_results = collections.OrderedDict(sorted(corr_results.items(),
+ key=lambda t: -abs(t[1][1])))
+ else:
+ for target_trait, target_vals in target_dataset.trait_data.iteritems():
+ result = get_sample_r_and_p_values(this_trait, this_dataset, target_vals, target_dataset, corr_params['type'])
+ if result is not None:
+ corr_results[target_trait] = result
+
+ sorted_results = collections.OrderedDict(sorted(corr_results.items(), key=lambda t: -abs(t[1][0])))
+
+ return sorted_results
+
+def do_tissue_correlation_for_all_traits(this_trait, trait_symbol_dict, corr_params, tissue_dataset_id=1):
+ #Gets tissue expression values for the primary trait
+ primary_trait_tissue_vals_dict = correlation_functions.get_trait_symbol_and_tissue_values(symbol_list = [this_trait.symbol])
+
+ if this_trait.symbol.lower() in primary_trait_tissue_vals_dict:
+ primary_trait_tissue_values = primary_trait_tissue_vals_dict[this_trait.symbol.lower()]
+
+ corr_result_tissue_vals_dict = correlation_functions.get_trait_symbol_and_tissue_values(symbol_list=trait_symbol_dict.values())
+
+ tissue_corr_data = {}
+ for trait, symbol in trait_symbol_dict.iteritems():
+ if symbol and symbol.lower() in corr_result_tissue_vals_dict:
+ this_trait_tissue_values = corr_result_tissue_vals_dict[symbol.lower()]
+
+ result = correlation_functions.cal_zero_order_corr_for_tiss(primary_trait_tissue_values,
+ this_trait_tissue_values,
+ corr_params['method'])
+
+ tissue_corr_data[trait] = [result[0], result[1], result[2], symbol]
+
+ return tissue_corr_data
+
+def do_literature_correlation_for_all_traits(this_trait, target_dataset, trait_geneid_dict, corr_params):
+ input_trait_mouse_gene_id = convert_to_mouse_gene_id(target_dataset.group.species.lower(), this_trait.geneid)
+
+ lit_corr_data = {}
+ for trait, gene_id in trait_geneid_dict.iteritems():
+ mouse_gene_id = convert_to_mouse_gene_id(target_dataset.group.species.lower(), gene_id)
+
+ if mouse_gene_id and str(mouse_gene_id).find(";") == -1:
+ result = g.db.execute(
+ """SELECT value
+ FROM LCorrRamin3
+ WHERE GeneId1='%s' and
+ GeneId2='%s'
+ """ % (escape(mouse_gene_id), escape(input_trait_mouse_gene_id))
+ ).fetchone()
+ if not result:
+ result = g.db.execute("""SELECT value
+ FROM LCorrRamin3
+ WHERE GeneId2='%s' and
+ GeneId1='%s'
+ """ % (escape(mouse_gene_id), escape(input_trait_mouse_gene_id))
+ ).fetchone()
+ if result:
+ lit_corr = result.value
+ lit_corr_data[trait] = [gene_id, lit_corr]
+ else:
+ lit_corr_data[trait] = [gene_id, 0]
+ else:
+ lit_corr_data[trait] = [gene_id, 0]
+
+ return lit_corr_data
+
+def get_sample_r_and_p_values(this_trait, this_dataset, target_vals, target_dataset, type):
+ """
+ Calculates the sample r (or rho) and p-value
+
+ Given a primary trait and a target trait's sample values,
+ calculates either the pearson r or spearman rho and the p-value
+ using the corresponding scipy functions.
+ """
+
+ this_trait_vals = []
+ shared_target_vals = []
+ for i, sample in enumerate(target_dataset.group.samplelist):
+ if sample in this_trait.data:
+ this_sample_value = this_trait.data[sample].value
+ target_sample_value = target_vals[i]
+ this_trait_vals.append(this_sample_value)
+ shared_target_vals.append(target_sample_value)
+
+ this_trait_vals, shared_target_vals, num_overlap = corr_result_helpers.normalize_values(this_trait_vals, shared_target_vals)
+
+ if type == 'pearson':
+ sample_r, sample_p = scipy.stats.pearsonr(this_trait_vals, shared_target_vals)
+ else:
+ sample_r, sample_p = scipy.stats.spearmanr(this_trait_vals, shared_target_vals)
+
+ if num_overlap > 5:
+ if scipy.isnan(sample_r):
+ return None
+ else:
+ return [sample_r, sample_p, num_overlap]
+
+def convert_to_mouse_gene_id(species=None, gene_id=None):
+ """If the species is rat or human, translate the gene_id to the mouse geneid
+
+ If there is no input gene_id or there's no corresponding mouse gene_id, return None
+
+ """
+ if not gene_id:
+ return None
+
+ mouse_gene_id = None
+
+ if species == 'mouse':
+ mouse_gene_id = gene_id
+
+ elif species == 'rat':
+
+ query = """SELECT mouse
+ FROM GeneIDXRef
+ WHERE rat='%s'""" % escape(gene_id)
+
+ result = g.db.execute(query).fetchone()
+ if result != None:
+ mouse_gene_id = result.mouse
+
+ elif species == 'human':
+
+ query = """SELECT mouse
+ FROM GeneIDXRef
+ WHERE human='%s'""" % escape(gene_id)
+
+ result = g.db.execute(query).fetchone()
+ if result != None:
+ mouse_gene_id = result.mouse
+
+ return mouse_gene_id
+
+def init_corr_params(start_vars):
+ method = "pearson"
+ if 'method' in start_vars:
+ method = start_vars['method']
+
+ type = "sample"
+ if 'type' in start_vars:
+ type = start_vars['type']
+
+ return_count = 500
+ if 'return_count' in start_vars:
+ assert(start_vars['return_count'].isdigit())
+ return_count = int(start_vars['return_count'])
+
+ corr_params = {
+ 'method' : method,
+ 'type' : type,
+ 'return_count' : return_count
+ }
+
+ return corr_params \ No newline at end of file
diff --git a/wqflask/wqflask/api/gen_menu.py b/wqflask/wqflask/api/gen_menu.py
new file mode 100644
index 00000000..7d2d243c
--- /dev/null
+++ b/wqflask/wqflask/api/gen_menu.py
@@ -0,0 +1,252 @@
+from __future__ import print_function, division
+
+import sys
+import json
+
+from flask import g
+
+from utility.tools import locate, locate_ignore_error, TEMPDIR, SQL_URI
+from utility.benchmark import Bench
+
+import MySQLdb
+
+import urlparse
+
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
+def gen_dropdown_json():
+ """Generates and outputs (as json file) the data for the main dropdown menus on the home page"""
+
+ species = get_species()
+ groups = get_groups(species)
+ types = get_types(groups)
+ datasets = get_datasets(types)
+
+ #species.append(('All Species', 'All Species'))
+ #groups['All Species'] = [('All Groups', 'All Groups')]
+ #types['All Species'] = {}
+ #types['All Species']['All Groups'] = [('Phenotypes', 'Phenotypes')]
+ #datasets['All Species'] = {}
+ #datasets['All Species']['All Groups'] = {}
+ #datasets['All Species']['All Groups']['Phenotypes'] = [('All Phenotypes','All Phenotypes')]
+
+ data = dict(species=species,
+ groups=groups,
+ types=types,
+ datasets=datasets)
+
+ output_file = """./wqflask/static/new/javascript/dataset_menu_structure.json"""
+
+ with open(output_file, 'w') as fh:
+ json.dump(data, fh, indent=3, sort_keys=True)
+
+ return data
+
+def get_species():
+ """Build species list"""
+ results = g.db.execute("""SELECT Name, MenuName
+ FROM Species
+ WHERE Species.Name != 'macaque monkey'
+ ORDER BY OrderId""").fetchall()
+
+ species = []
+ for result in results:
+ species.append([str(result[0]), str(result[1])])
+
+ return species
+
+def get_groups(species):
+ """Build groups list"""
+ groups = {}
+ for species_name, _species_full_name in species:
+ groups[species_name] = []
+ # results = g.db.execute("""SELECT InbredSet.Name, InbredSet.FullName
+ # FROM InbredSet, Species, ProbeFreeze, GenoFreeze, PublishFreeze
+ # WHERE Species.Name = '{}' AND
+ # InbredSet.SpeciesId = Species.Id AND
+ # (PublishFreeze.InbredSetId = InbredSet.Id OR
+ # GenoFreeze.InbredSetId = InbredSet.Id OR
+ # ProbeFreeze.InbredSetId = InbredSet.Id)
+ # GROUP by InbredSet.Name
+ # ORDER BY InbredSet.FullName""".format(species_name)).fetchall()
+
+ results = g.db.execute("""SELECT InbredSet.Name, InbredSet.FullName, IFNULL(InbredSet.Family, 'None')
+ FROM InbredSet, Species
+ WHERE Species.Name = '{}' AND
+ InbredSet.SpeciesId = Species.Id
+ GROUP by InbredSet.Name
+ ORDER BY IFNULL(InbredSet.FamilyOrder, InbredSet.FullName) ASC, IFNULL(InbredSet.Family, InbredSet.FullName) ASC, InbredSet.FullName ASC, InbredSet.MenuOrderId ASC""".format(species_name)).fetchall()
+
+ for result in results:
+ family_name = "Family:" + str(result[2])
+ groups[species_name].append([str(result[0]), str(result[1]), family_name])
+
+ return groups
+
+def get_types(groups):
+ """Build types list"""
+ types = {}
+
+ for species, group_dict in groups.iteritems():
+ types[species] = {}
+ for group_name, _group_full_name, _family_name in group_dict:
+ if phenotypes_exist(group_name):
+ types[species][group_name] = [("Phenotypes", "Phenotypes")]
+ if genotypes_exist(group_name):
+ if group_name in types[species]:
+ types[species][group_name] += [("Genotypes", "Genotypes")]
+ else:
+ types[species][group_name] = [("Genotypes", "Genotypes")]
+ if group_name in types[species]:
+ types_list = build_types(species, group_name)
+ if len(types_list) > 0:
+ types[species][group_name] += types_list
+ else:
+ if not phenotypes_exist(group_name) and not genotypes_exist(group_name):
+ types[species].pop(group_name, None)
+ groups[species] = list(group for group in groups[species] if group[0] != group_name)
+ else: #ZS: This whole else statement might be unnecessary, need to check
+ types_list = build_types(species, group_name)
+ if len(types_list) > 0:
+ types[species][group_name] = types_list
+ else:
+ types[species].pop(group_name, None)
+ groups[species] = list(group for group in groups[species] if group[0] != group_name)
+ return types
+
+def phenotypes_exist(group_name):
+ results = g.db.execute("""SELECT Name
+ FROM PublishFreeze
+ WHERE PublishFreeze.Name = '{}'""".format(group_name+"Publish")).fetchone()
+
+ if results != None:
+ return True
+ else:
+ return False
+
+def genotypes_exist(group_name):
+ results = g.db.execute("""SELECT Name
+ FROM GenoFreeze
+ WHERE GenoFreeze.Name = '{}'""".format(group_name+"Geno")).fetchone()
+
+ if results != None:
+ return True
+ else:
+ return False
+
+def build_types(species, group):
+ """Fetches tissues
+
+ Gets the tissues with data for this species/group
+ (all types except phenotype/genotype are tissues)
+
+ """
+
+ query = """SELECT DISTINCT Tissue.Name
+ FROM ProbeFreeze, ProbeSetFreeze, InbredSet, Tissue, Species
+ WHERE Species.Name = '{0}' AND
+ Species.Id = InbredSet.SpeciesId AND
+ InbredSet.Name = '{1}' AND
+ ProbeFreeze.TissueId = Tissue.Id AND
+ ProbeFreeze.InbredSetId = InbredSet.Id AND
+ ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id AND
+ ProbeSetFreeze.public > 0 AND
+ ProbeSetFreeze.confidentiality < 1
+ ORDER BY Tissue.Name""".format(species, group)
+
+ results = []
+ for result in g.db.execute(query).fetchall():
+ if len(result):
+ these_datasets = build_datasets(species, group, result[0])
+ if len(these_datasets) > 0:
+ results.append([str(result[0]), str(result[0])])
+
+ return results
+
+def get_datasets(types):
+ """Build datasets list"""
+ datasets = {}
+ for species, group_dict in types.iteritems():
+ datasets[species] = {}
+ for group, type_list in group_dict.iteritems():
+ datasets[species][group] = {}
+ for type_name in type_list:
+ these_datasets = build_datasets(species, group, type_name[0])
+ if len(these_datasets) > 0:
+ datasets[species][group][type_name[0]] = these_datasets
+
+ return datasets
+
+
+def build_datasets(species, group, type_name):
+ """Gets dataset names from database"""
+ dataset_text = dataset_value = None
+ datasets = []
+ if type_name == "Phenotypes":
+ results = g.db.execute("""SELECT InfoFiles.GN_AccesionId, PublishFreeze.Name, PublishFreeze.FullName
+ FROM InfoFiles, PublishFreeze, InbredSet
+ WHERE InbredSet.Name = '{}' AND
+ PublishFreeze.InbredSetId = InbredSet.Id AND
+ InfoFiles.InfoPageName = PublishFreeze.Name
+ ORDER BY PublishFreeze.CreateTime ASC""".format(group)).fetchall()
+
+ if len(results) > 0:
+ for result in results:
+ dataset_id = str(result[0])
+ dataset_value = str(result[1])
+ if group == 'MDP':
+ dataset_text = "Mouse Phenome Database"
+ else:
+ #dataset_text = "%s Phenotypes" % group
+ dataset_text = str(result[2])
+ datasets.append([dataset_id, dataset_value, dataset_text])
+ else:
+ result = g.db.execute("""SELECT PublishFreeze.Name, PublishFreeze.FullName
+ FROM PublishFreeze, InbredSet
+ WHERE InbredSet.Name = '{}' AND
+ PublishFreeze.InbredSetId = InbredSet.Id
+ ORDER BY PublishFreeze.CreateTime ASC""".format(group)).fetchone()
+
+ dataset_id = "None"
+ dataset_value = str(result[0])
+ dataset_text = str(result[1])
+ datasets.append([dataset_id, dataset_value, dataset_text])
+
+ elif type_name == "Genotypes":
+ results = g.db.execute("""SELECT InfoFiles.GN_AccesionId
+ FROM InfoFiles, GenoFreeze, InbredSet
+ WHERE InbredSet.Name = '{}' AND
+ GenoFreeze.InbredSetId = InbredSet.Id AND
+ InfoFiles.InfoPageName = GenoFreeze.ShortName AND
+ GenoFreeze.public > 0 AND
+ GenoFreeze.confidentiality < 1
+ ORDER BY GenoFreeze.CreateTime DESC""".format(group)).fetchone()
+
+ if results != None:
+ dataset_id = str(results[0])
+ else:
+ dataset_id = "None"
+ dataset_value = "%sGeno" % group
+ dataset_text = "%s Genotypes" % group
+ datasets.append([dataset_id, dataset_value, dataset_text])
+
+ else: # for mRNA expression/ProbeSet
+ results = g.db.execute("""SELECT ProbeSetFreeze.Id, ProbeSetFreeze.Name, ProbeSetFreeze.FullName
+ FROM ProbeSetFreeze, ProbeFreeze, InbredSet, Tissue, Species
+ WHERE Species.Name = '{0}' AND
+ Species.Id = InbredSet.SpeciesId AND
+ InbredSet.Name = '{1}' AND
+ ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and Tissue.Name = '{2}' AND
+ ProbeFreeze.TissueId = Tissue.Id and ProbeFreeze.InbredSetId = InbredSet.Id AND
+ ProbeSetFreeze.confidentiality < 1 and ProbeSetFreeze.public > 0
+ ORDER BY ProbeSetFreeze.CreateTime DESC""".format(species, group, type_name)).fetchall()
+
+ datasets = []
+ for dataset_info in results:
+ this_dataset_info = []
+ for info in dataset_info:
+ this_dataset_info.append(str(info))
+ datasets.append(this_dataset_info)
+
+ return datasets \ No newline at end of file
diff --git a/wqflask/wqflask/api/mapping.py b/wqflask/wqflask/api/mapping.py
new file mode 100644
index 00000000..d830cefc
--- /dev/null
+++ b/wqflask/wqflask/api/mapping.py
@@ -0,0 +1,141 @@
+from __future__ import absolute_import, division, print_function
+
+import string
+
+from base import data_set
+from base import webqtlConfig
+from base.trait import GeneralTrait, retrieve_sample_data
+
+from utility import helper_functions
+from wqflask.marker_regression import gemma_mapping, rqtl_mapping, qtlreaper_mapping, plink_mapping
+
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
+def do_mapping_for_api(start_vars):
+ assert('db' in start_vars)
+ assert('trait_id' in start_vars)
+
+ dataset = data_set.create_dataset(dataset_name = start_vars['db'])
+ dataset.group.get_markers()
+ this_trait = GeneralTrait(dataset = dataset, name = start_vars['trait_id'])
+ this_trait = retrieve_sample_data(this_trait, dataset)
+
+ samples = []
+ vals = []
+
+ for sample in dataset.group.samplelist:
+ in_trait_data = False
+ for item in this_trait.data:
+ if this_trait.data[item].name == sample:
+ value = str(this_trait.data[item].value)
+ samples.append(item)
+ vals.append(value)
+ in_trait_data = True
+ break
+ if not in_trait_data:
+ vals.append("x")
+
+ mapping_params = initialize_parameters(start_vars, dataset, this_trait)
+
+ covariates = "" #ZS: It seems to take an empty string as default. This should probably be changed.
+
+ if mapping_params['mapping_method'] == "gemma":
+ header_row = ["name", "chr", "Mb", "lod_score", "p_value"]
+ if mapping_params['use_loco'] == "True": #ZS: gemma_mapping returns both results and the filename for LOCO, so need to only grab the former for api
+ result_markers = gemma_mapping.run_gemma(this_trait, dataset, samples, vals, covariates, mapping_params['use_loco'], mapping_params['maf'])[0]
+ else:
+ result_markers = gemma_mapping.run_gemma(this_trait, dataset, samples, vals, covariates, mapping_params['use_loco'], mapping_params['maf'])
+ elif mapping_params['mapping_method'] == "rqtl":
+ header_row = ["name", "chr", "cM", "lod_score"]
+ if mapping_params['num_perm'] > 0:
+ _sperm_output, _suggestive, _significant, result_markers = rqtl_mapping.run_rqtl_geno(vals, dataset, mapping_params['rqtl_method'], mapping_params['rqtl_model'],
+ mapping_params['perm_check'], mapping_params['num_perm'],
+ mapping_params['do_control'], mapping_params['control_marker'],
+ mapping_params['manhattan_plot'], mapping_params['pair_scan'])
+ else:
+ result_markers = rqtl_mapping.run_rqtl_geno(vals, dataset, mapping_params['rqtl_method'], mapping_params['rqtl_model'],
+ mapping_params['perm_check'], mapping_params['num_perm'],
+ mapping_params['do_control'], mapping_params['control_marker'],
+ mapping_params['manhattan_plot'], mapping_params['pair_scan'])
+
+ if mapping_params['limit_to']:
+ result_markers = result_markers[:mapping_params['limit_to']]
+
+ if mapping_params['format'] == "csv":
+ output_rows = []
+ output_rows.append(header_row)
+ for marker in result_markers:
+ this_row = [marker[header] for header in header_row]
+ output_rows.append(this_row)
+
+ return output_rows, mapping_params['format']
+ elif mapping_params['format'] == "json":
+ return result_markers, mapping_params['format']
+ else:
+ return result_markers, None
+
+
+
+def initialize_parameters(start_vars, dataset, this_trait):
+ mapping_params = {}
+
+ mapping_params['format'] = "json"
+ if 'format' in start_vars:
+ mapping_params['format'] = start_vars['format']
+
+ mapping_params['limit_to'] = False
+ if 'limit_to' in start_vars:
+ if start_vars['limit_to'].isdigit():
+ mapping_params['limit_to'] = int(start_vars['limit_to'])
+
+ mapping_params['mapping_method'] = "gemma"
+ if 'method' in start_vars:
+ mapping_params['mapping_method'] = start_vars['method']
+
+ if mapping_params['mapping_method'] == "rqtl":
+ mapping_params['rqtl_method'] = "hk"
+ mapping_params['rqtl_model'] = "normal"
+ mapping_params['do_control'] = False
+ mapping_params['control_marker'] = ""
+ mapping_params['manhattan_plot'] = True
+ mapping_params['pair_scan'] = False
+ if 'rqtl_method' in start_vars:
+ mapping_params['rqtl_method'] = start_vars['rqtl_method']
+ if 'rqtl_model' in start_vars:
+ mapping_params['rqtl_model'] = start_vars['rqtl_model']
+ if 'control_marker' in start_vars:
+ mapping_params['control_marker'] = start_vars['control_marker']
+ mapping_params['do_control'] = True
+ if 'pair_scan' in start_vars:
+ if start_vars['pair_scan'].lower() == "true":
+ mapping_params['pair_scan'] = True
+
+ if 'interval_mapping' in start_vars:
+ if start_vars['interval_mapping'].lower() == "true":
+ mapping_params['manhattan_plot'] = False
+ elif 'manhattan_plot' in start_vars:
+ if start_vars['manhattan_plot'].lower() != "true":
+ mapping_params['manhattan_plot'] = False
+
+ mapping_params['maf'] = 0.01
+ if 'maf' in start_vars:
+ mapping_params['maf'] = start_vars['maf'] # Minor allele frequency
+
+ mapping_params['use_loco'] = True
+ if 'use_loco' in start_vars:
+ if (start_vars['use_loco'].lower() == "false") or (start_vars['use_loco'].lower() == "no"):
+ mapping_params['use_loco'] = False
+
+ mapping_params['num_perm'] = 0
+ mapping_params['perm_check'] = False
+ if 'num_perm' in start_vars:
+ try:
+ mapping_params['num_perm'] = int(start_vars['num_perm'])
+ mapping_params['perm_check'] = "ON"
+ except:
+ mapping_params['perm_check'] = False
+
+ return mapping_params
+
+
diff --git a/wqflask/wqflask/api/router.py b/wqflask/wqflask/api/router.py
new file mode 100644
index 00000000..6324cabe
--- /dev/null
+++ b/wqflask/wqflask/api/router.py
@@ -0,0 +1,969 @@
+# GN2 API
+
+from __future__ import absolute_import, division, print_function
+
+import os, io, csv, json, datetime, requests, yaml
+import zlib
+from zipfile import ZipFile, ZIP_DEFLATED
+
+import StringIO
+
+import flask
+from flask import g, Response, request, make_response, render_template, send_from_directory, jsonify, redirect, send_file
+import sqlalchemy
+from wqflask import app
+
+from wqflask.api import correlation, mapping, gen_menu
+
+from utility.tools import flat_files
+
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
+version = "pre1"
+
+@app.route("/api/v_{}/".format(version))
+def hello_world():
+ return flask.jsonify({"hello":"world"})
+
+@app.route("/api/v_{}/species".format(version))
+def get_species_list():
+ results = g.db.execute("SELECT SpeciesId, Name, FullName, TaxonomyId FROM Species;")
+ the_species = results.fetchall()
+ species_list = []
+ for species in the_species:
+ species_dict = {
+ "Id" : species[0],
+ "Name" : species[1],
+ "FullName" : species[2],
+ "TaxonomyId" : species[3]
+ }
+ species_list.append(species_dict)
+
+ return flask.jsonify(species_list)
+
+@app.route("/api/v_{}/species/<path:species_name>".format(version))
+@app.route("/api/v_{}/species/<path:species_name>.<path:file_format>".format(version))
+def get_species_info(species_name, file_format = "json"):
+ results = g.db.execute("""SELECT SpeciesId, Name, FullName, TaxonomyId
+ FROM Species
+ WHERE (Name="{0}" OR FullName="{0}" OR SpeciesName="{0}");""".format(species_name))
+
+ the_species = results.fetchone()
+ species_dict = {
+ "Id" : the_species[0],
+ "Name" : the_species[1],
+ "FullName" : the_species[2],
+ "TaxonomyId" : the_species[3]
+ }
+
+ return flask.jsonify(species_dict)
+
+@app.route("/api/v_{}/groups".format(version))
+@app.route("/api/v_{}/groups/<path:species_name>".format(version))
+def get_groups_list(species_name=None):
+ if species_name:
+ results = g.db.execute("""SELECT InbredSet.InbredSetId, InbredSet.SpeciesId, InbredSet.InbredSetName,
+ InbredSet.Name, InbredSet.FullName, InbredSet.public,
+ IFNULL(InbredSet.MappingMethodId, "None"), IFNULL(InbredSet.GeneticType, "None")
+ FROM InbredSet, Species
+ WHERE InbredSet.SpeciesId = Species.Id AND
+ (Species.Name = "{0}" OR
+ Species.FullName="{0}" OR
+ Species.SpeciesName="{0}");""".format(species_name))
+ else:
+ results = g.db.execute("""SELECT InbredSet.InbredSetId, InbredSet.SpeciesId, InbredSet.InbredSetName,
+ InbredSet.Name, InbredSet.FullName, InbredSet.public,
+ IFNULL(InbredSet.MappingMethodId, "None"), IFNULL(InbredSet.GeneticType, "None")
+ FROM InbredSet;""")
+
+ the_groups = results.fetchall()
+ if the_groups:
+ groups_list = []
+ for group in the_groups:
+ group_dict = {
+ "Id" : group[0],
+ "SpeciesId" : group[1],
+ "DisplayName" : group[2],
+ "Name" : group[3],
+ "FullName" : group[4],
+ "public" : group[5],
+ "MappingMethodId" : group[6],
+ "GeneticType" : group[7]
+ }
+ groups_list.append(group_dict)
+
+ return flask.jsonify(groups_list)
+ else:
+ return return_error(code=204, source=request.url_rule.rule, title="No Results", details="")
+
+@app.route("/api/v_{}/group/<path:group_name>".format(version))
+@app.route("/api/v_{}/group/<path:group_name>.<path:file_format>".format(version))
+@app.route("/api/v_{}/group/<path:species_name>/<path:group_name>".format(version))
+@app.route("/api/v_{}/group/<path:species_name>/<path:group_name>.<path:file_format>".format(version))
+def get_group_info(group_name, species_name = None, file_format = "json"):
+ if species_name:
+ results = g.db.execute("""SELECT InbredSet.InbredSetId, InbredSet.SpeciesId, InbredSet.InbredSetName,
+ InbredSet.Name, InbredSet.FullName, InbredSet.public,
+ IFNULL(InbredSet.MappingMethodId, "None"), IFNULL(InbredSet.GeneticType, "None")
+ FROM InbredSet, Species
+ WHERE InbredSet.SpeciesId = Species.Id AND
+ (InbredSet.InbredSetName = "{0}" OR
+ InbredSet.Name = "{0}" OR
+ InbredSet.FullName = "{0}") AND
+ (Species.Name = "{1}" OR
+ Species.FullName="{1}" OR
+ Species.SpeciesName="{1}");""".format(group_name, species_name))
+ else:
+ results = g.db.execute("""SELECT InbredSet.InbredSetId, InbredSet.SpeciesId, InbredSet.InbredSetName,
+ InbredSet.Name, InbredSet.FullName, InbredSet.public,
+ IFNULL(InbredSet.MappingMethodId, "None"), IFNULL(InbredSet.GeneticType, "None")
+ FROM InbredSet
+ WHERE (InbredSet.InbredSetName = "{0}" OR
+ InbredSet.Name = "{0}" OR
+ InbredSet.FullName = "{0}");""".format(group_name))
+
+ group = results.fetchone()
+ if group:
+ group_dict = {
+ "Id" : group[0],
+ "SpeciesId" : group[1],
+ "DisplayName" : group[2],
+ "Name" : group[3],
+ "FullName" : group[4],
+ "public" : group[5],
+ "MappingMethodId" : group[6],
+ "GeneticType" : group[7]
+ }
+
+ return flask.jsonify(group_dict)
+ else:
+ return return_error(code=204, source=request.url_rule.rule, title="No Results", details="")
+
+@app.route("/api/v_{}/datasets/<path:group_name>".format(version))
+@app.route("/api/v_{}/datasets/<path:species_name>/<path:group_name>".format(version))
+def get_datasets_for_group(group_name, species_name=None):
+ if species_name:
+ results = g.db.execute("""
+ SELECT ProbeSetFreeze.Id, ProbeSetFreeze.ProbeFreezeId, ProbeSetFreeze.AvgID,
+ ProbeSetFreeze.Name, ProbeSetFreeze.Name2, ProbeSetFreeze.FullName,
+ ProbeSetFreeze.ShortName, ProbeSetFreeze.CreateTime, ProbeSetFreeze.public,
+ ProbeSetFreeze.confidentiality, ProbeSetFreeze.DataScale
+ FROM ProbeSetFreeze, ProbeFreeze, InbredSet, Species
+ WHERE ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id AND
+ ProbeFreeze.InbredSetId = InbredSet.Id AND
+ (InbredSet.Name = "{0}" OR InbredSet.InbredSetName = "{0}" OR InbredSet.FullName = "{0}") AND
+ InbredSet.SpeciesId = Species.Id AND
+ (Species.SpeciesName = "{1}" OR Species.MenuName = "{1}" OR Species.FullName = "{1}");
+ """.format(group_name, species_name))
+ else:
+ results = g.db.execute("""
+ SELECT ProbeSetFreeze.Id, ProbeSetFreeze.ProbeFreezeId, ProbeSetFreeze.AvgID,
+ ProbeSetFreeze.Name, ProbeSetFreeze.Name2, ProbeSetFreeze.FullName,
+ ProbeSetFreeze.ShortName, ProbeSetFreeze.CreateTime, ProbeSetFreeze.public,
+ ProbeSetFreeze.confidentiality, ProbeSetFreeze.DataScale
+ FROM ProbeSetFreeze, ProbeFreeze, InbredSet
+ WHERE ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id AND
+ ProbeFreeze.InbredSetId = InbredSet.Id AND
+ (InbredSet.Name = "{0}" OR InbredSet.InbredSetName = "{0}" OR InbredSet.FullName = "{0}");
+ """.format(group_name))
+
+ the_datasets = results.fetchall()
+
+ if the_datasets:
+ datasets_list = []
+ for dataset in the_datasets:
+ dataset_dict = {
+ "Id" : dataset[0],
+ "ProbeFreezeId" : dataset[1],
+ "AvgID" : dataset[2],
+ "Short_Abbreviation" : dataset[3],
+ "Long_Abbreviation" : dataset[4],
+ "FullName" : dataset[5],
+ "ShortName" : dataset[6],
+ "CreateTime" : dataset[7],
+ "public" : dataset[8],
+ "confidentiality" : dataset[9],
+ "DataScale" : dataset[10]
+ }
+ datasets_list.append(dataset_dict)
+
+ return flask.jsonify(datasets_list)
+ else:
+ return return_error(code=204, source=request.url_rule.rule, title="No Results", details="")
+
+@app.route("/api/v_{}/dataset/<path:dataset_name>".format(version))
+@app.route("/api/v_{}/dataset/<path:dataset_name>.<path:file_format>".format(version))
+@app.route("/api/v_{}/dataset/<path:group_name>/<path:dataset_name>".format(version))
+@app.route("/api/v_{}/dataset/<path:group_name>/<path:dataset_name>.<path:file_format>".format(version))
+def get_dataset_info(dataset_name, group_name = None, file_format="json"):
+ #ZS: First get ProbeSet (mRNA expression) datasets and then get Phenotype datasets
+
+ datasets_list = [] #ZS: I figure I might as well return a list if there are multiple matches, though I don"t know if this will actually happen in practice
+
+ probeset_query = """
+ SELECT ProbeSetFreeze.Id, ProbeSetFreeze.Name, ProbeSetFreeze.FullName,
+ ProbeSetFreeze.ShortName, ProbeSetFreeze.DataScale, ProbeFreeze.TissueId,
+ Tissue.Name, ProbeSetFreeze.public, ProbeSetFreeze.confidentiality
+ FROM ProbeSetFreeze, ProbeFreeze, Tissue
+ """
+
+ where_statement = """
+ WHERE ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id AND
+ ProbeFreeze.TissueId = Tissue.Id AND
+ ProbeSetFreeze.public > 0 AND
+ ProbeSetFreeze.confidentiality < 1 AND
+ """
+ if dataset_name.isdigit():
+ where_statement += """
+ ProbeSetFreeze.Id = "{}"
+ """.format(dataset_name)
+ else:
+ where_statement += """
+ (ProbeSetFreeze.Name = "{0}" OR ProbeSetFreeze.Name2 = "{0}" OR
+ ProbeSetFreeze.FullName = "{0}" OR ProbeSetFreeze.ShortName = "{0}")
+ """.format(dataset_name)
+
+ probeset_query += where_statement
+ probeset_results = g.db.execute(probeset_query)
+ dataset = probeset_results.fetchone()
+
+ if dataset:
+ dataset_dict = {
+ "dataset_type" : "mRNA expression",
+ "id" : dataset[0],
+ "name" : dataset[1],
+ "full_name" : dataset[2],
+ "short_name" : dataset[3],
+ "data_scale" : dataset[4],
+ "tissue_id" : dataset[5],
+ "tissue" : dataset[6],
+ "public" : dataset[7],
+ "confidential" : dataset[8]
+ }
+
+ datasets_list.append(dataset_dict)
+
+ if group_name:
+ pheno_query = """
+ SELECT PublishXRef.Id, Phenotype.Post_publication_abbreviation, Phenotype.Post_publication_description,
+ Phenotype.Pre_publication_abbreviation, Phenotype.Pre_publication_description,
+ Publication.PubMed_ID, Publication.Title, Publication.Year
+ FROM PublishXRef, Phenotype, Publication, InbredSet, PublishFreeze
+ WHERE PublishXRef.InbredSetId = InbredSet.Id AND
+ PublishXRef.PhenotypeId = Phenotype.Id AND
+ PublishXRef.PublicationId = Publication.Id AND
+ PublishFreeze.InbredSetId = InbredSet.Id AND
+ PublishFreeze.public > 0 AND
+ PublishFreeze.confidentiality < 1 AND
+ InbredSet.Name = "{0}" AND PublishXRef.Id = "{1}"
+ """.format(group_name, dataset_name)
+
+ logger.debug("QUERY:", pheno_query)
+
+ pheno_results = g.db.execute(pheno_query)
+ dataset = pheno_results.fetchone()
+
+ if dataset:
+ if dataset[5]:
+ dataset_dict = {
+ "dataset_type" : "phenotype",
+ "id" : dataset[0],
+ "name" : dataset[1],
+ "description" : dataset[2],
+ "pubmed_id" : dataset[5],
+ "title" : dataset[6],
+ "year" : dataset[7]
+ }
+ elif dataset[4]:
+ dataset_dict = {
+ "dataset_type" : "phenotype",
+ "id" : dataset[0],
+ "name" : dataset[3],
+ "description" : dataset[4]
+ }
+ else:
+ dataset_dict = {
+ "dataset_type" : "phenotype",
+ "id" : dataset[0]
+ }
+
+ datasets_list.append(dataset_dict)
+
+ if len(datasets_list) > 1:
+ return flask.jsonify(datasets_list)
+ elif len(datasets_list) == 1:
+ return flask.jsonify(dataset_dict)
+ else:
+ return return_error(code=204, source=request.url_rule.rule, title="No Results", details="")
+
+@app.route("/api/v_{}/traits/<path:dataset_name>".format(version), methods=("GET",))
+@app.route("/api/v_{}/traits/<path:dataset_name>.<path:file_format>".format(version), methods=("GET",))
+def fetch_traits(dataset_name, file_format = "json"):
+ trait_ids, trait_names, data_type, dataset_id = get_dataset_trait_ids(dataset_name, request.args)
+ if ("ids_only" in request.args) and (len(trait_ids) > 0):
+ if file_format == "json":
+ filename = dataset_name + "_trait_ids.json"
+ return flask.jsonify(trait_ids)
+ else:
+ filename = dataset_name + "_trait_ids.csv"
+
+ si = StringIO.StringIO()
+ csv_writer = csv.writer(si)
+ csv_writer.writerows([[trait_id] for trait_id in trait_ids])
+ output = make_response(si.getvalue())
+ output.headers["Content-Disposition"] = "attachment; filename=" + filename
+ output.headers["Content-type"] = "text/csv"
+ return output
+ elif ("names_only" in request.args) and (len(trait_ids) > 0):
+ if file_format == "json":
+ filename = dataset_name + "_trait_names.json"
+ return flask.jsonify(trait_names)
+ else:
+ filename = dataset_name + "_trait_names.csv"
+
+ si = StringIO.StringIO()
+ csv_writer = csv.writer(si)
+ csv_writer.writerows([[trait_name] for trait_name in trait_names])
+ output = make_response(si.getvalue())
+ output.headers["Content-Disposition"] = "attachment; filename=" + filename
+ output.headers["Content-type"] = "text/csv"
+ return output
+ else:
+ if len(trait_ids) > 0:
+ if data_type == "ProbeSet":
+ query = """
+ SELECT
+ ProbeSet.Id, ProbeSet.Name, ProbeSet.Symbol, ProbeSet.description, ProbeSet.Chr, ProbeSet.Mb, ProbeSet.alias,
+ ProbeSetXRef.mean, ProbeSetXRef.se, ProbeSetXRef.Locus, ProbeSetXRef.LRS, ProbeSetXRef.pValue, ProbeSetXRef.additive, ProbeSetXRef.h2
+ FROM
+ ProbeSet, ProbeSetXRef, ProbeSetFreeze
+ WHERE
+ ProbeSetXRef.ProbeSetFreezeId = "{0}" AND
+ ProbeSetXRef.ProbeSetId = ProbeSet.Id AND
+ ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id AND
+ ProbeSetFreeze.public > 0 AND
+ ProbeSetFreeze.confidentiality < 1
+ ORDER BY
+ ProbeSet.Id
+ """
+
+ field_list = ["Id", "Name", "Symbol", "Description", "Chr", "Mb", "Aliases", "Mean", "SE", "Locus", "LRS", "P-Value", "Additive", "h2"]
+ elif data_type == "Geno":
+ query = """
+ SELECT
+ Geno.Id, Geno.Name, Geno.Marker_Name, Geno.Chr, Geno.Mb, Geno.Sequence, Geno.Source
+ FROM
+ Geno, GenoXRef, GenoFreeze
+ WHERE
+ GenoXRef.GenoFreezeId = "{0}" AND
+ GenoXRef.GenoId = Geno.Id AND
+ GenoXRef.GenoFreezeId = GenoFreeze.Id AND
+ GenoFreeze.public > 0 AND
+ GenoFreeze.confidentiality < 1
+ ORDER BY
+ Geno.Id
+ """
+
+ field_list = ["Id", "Name", "Marker_Name", "Chr", "Mb", "Sequence", "Source"]
+ else:
+ query = """
+ SELECT
+ PublishXRef.Id, PublishXRef.PhenotypeId, PublishXRef.PublicationId, PublishXRef.Locus, PublishXRef.LRS, PublishXRef.additive, PublishXRef.Sequence
+ FROM
+ PublishXRef, PublishFreeze
+ WHERE
+ PublishXRef.InbredSetId = {0} AND
+ PublishFreeze.InbredSetId = PublishXRef.InbredSetId AND
+ PublishFreeze.public > 0 AND
+ PublishFreeze.confidentiality < 1
+ ORDER BY
+ PublishXRef.Id
+ """
+
+ field_list = ["Id", "PhenotypeId", "PublicationId", "Locus", "LRS", "Additive", "Sequence"]
+
+ if 'limit_to' in request.args:
+ limit_number = request.args['limit_to']
+ query += "LIMIT " + str(limit_number)
+
+ if file_format == "json":
+ filename = dataset_name + "_traits.json"
+
+ final_query = query.format(dataset_id)
+
+ result_list = []
+ for result in g.db.execute(final_query).fetchall():
+ trait_dict = {}
+ for i, field in enumerate(field_list):
+ if result[i]:
+ trait_dict[field] = result[i]
+ result_list.append(trait_dict)
+
+ return flask.jsonify(result_list)
+ elif file_format == "csv":
+ filename = dataset_name + "_traits.csv"
+
+ results_list = []
+ header_list = []
+ header_list += field_list
+ results_list.append(header_list)
+
+ final_query = query.format(dataset_id)
+ for result in g.db.execute(final_query).fetchall():
+ results_list.append(result)
+
+ si = StringIO.StringIO()
+ csv_writer = csv.writer(si)
+ csv_writer.writerows(results_list)
+ output = make_response(si.getvalue())
+ output.headers["Content-Disposition"] = "attachment; filename=" + filename
+ output.headers["Content-type"] = "text/csv"
+ return output
+ else:
+ return return_error(code=400, source=request.url_rule.rule, title="Invalid Output Format", details="Current formats available are JSON and CSV, with CSV as default")
+ else:
+ return return_error(code=204, source=request.url_rule.rule, title="No Results", details="")
+
+@app.route("/api/v_{}/sample_data/<path:dataset_name>".format(version))
+@app.route("/api/v_{}/sample_data/<path:dataset_name>.<path:file_format>".format(version))
+def all_sample_data(dataset_name, file_format = "csv"):
+ trait_ids, trait_names, data_type, dataset_id = get_dataset_trait_ids(dataset_name, request.args)
+
+ if len(trait_ids) > 0:
+ sample_list = get_samplelist(dataset_name)
+
+ if data_type == "ProbeSet":
+ query = """
+ SELECT
+ Strain.Name, Strain.Name2, ProbeSetData.value, ProbeSetData.Id, ProbeSetSE.error
+ FROM
+ (ProbeSetData, Strain, ProbeSetXRef, ProbeSetFreeze)
+ LEFT JOIN ProbeSetSE ON
+ (ProbeSetSE.DataId = ProbeSetData.Id AND ProbeSetSE.StrainId = ProbeSetData.StrainId)
+ WHERE
+ ProbeSetXRef.ProbeSetFreezeId = "{0}" AND
+ ProbeSetXRef.ProbeSetId = "{1}" AND
+ ProbeSetXRef.DataId = ProbeSetData.Id AND
+ ProbeSetData.StrainId = Strain.Id AND
+ ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id AND
+ ProbeSetFreeze.public > 0 AND
+ ProbeSetFreeze.confidentiality < 1
+ ORDER BY
+ Strain.Name
+ """
+ elif data_type == "Geno":
+ query = """
+ SELECT
+ Strain.Name, Strain.Name2, GenoData.value, GenoData.Id, GenoSE.error
+ FROM
+ (GenoData, Strain, GenoXRef, GenoFreeze)
+ LEFT JOIN GenoSE ON
+ (GenoSE.DataId = GenoData.Id AND GenoSE.StrainId = GenoData.StrainId)
+ WHERE
+ GenoXRef.GenoFreezeId = "{0}" AND
+ GenoXRef.GenoId = "{1}" AND
+ GenoXRef.DataId = GenoData.Id AND
+ GenoData.StrainId = Strain.Id AND
+ GenoXRef.GenoFreezeId = GenoFreeze.Id AND
+ GenoFreeze.public > 0 AND
+ GenoFreeze.confidentiality < 1
+ ORDER BY
+ Strain.Name
+ """
+ else:
+ query = """
+ SELECT
+ Strain.Name, Strain.Name2, PublishData.value, PublishData.Id, PublishSE.error, NStrain.count
+ FROM
+ (PublishData, Strain, PublishXRef, PublishFreeze)
+ LEFT JOIN PublishSE ON
+ (PublishSE.DataId = PublishData.Id AND PublishSE.StrainId = PublishData.StrainId)
+ LEFT JOIN NStrain ON
+ (NStrain.DataId = PublishData.Id AND
+ NStrain.StrainId = PublishData.StrainId)
+ WHERE
+ PublishXRef.InbredSetId = "{0}" AND
+ PublishXRef.PhenotypeId = "{1}" AND
+ PublishData.Id = PublishXRef.DataId AND
+ PublishData.StrainId = Strain.Id AND
+ PublishXRef.InbredSetId = PublishFreeze.InbredSetId AND
+ PublishFreeze.public > 0 AND
+ PublishFreeze.confidentiality < 1
+ ORDER BY
+ Strain.Name
+ """
+
+ if file_format == "csv":
+ filename = dataset_name + "_sample_data.csv"
+
+ results_list = []
+ header_list = []
+ header_list.append("id")
+ header_list += sample_list
+ results_list.append(header_list)
+ for i, trait_id in enumerate(trait_ids):
+ line_list = []
+ line_list.append(str(trait_names[i]))
+ final_query = query.format(dataset_id, trait_id)
+ results = g.db.execute(final_query).fetchall()
+ results_dict = {}
+ for item in results:
+ results_dict[item[0]] = item[2]
+ for sample in sample_list:
+ if sample in results_dict:
+ line_list.append(results_dict[sample])
+ else:
+ line_list.append("x")
+ results_list.append(line_list)
+
+ results_list = map(list, zip(*results_list))
+
+ si = StringIO.StringIO()
+ csv_writer = csv.writer(si)
+ csv_writer.writerows(results_list)
+ output = make_response(si.getvalue())
+ output.headers["Content-Disposition"] = "attachment; filename=" + filename
+ output.headers["Content-type"] = "text/csv"
+ return output
+ else:
+ return return_error(code=415, source=request.url_rule.rule, title="Unsupported file format", details="")
+ else:
+ return return_error(code=204, source=request.url_rule.rule, title="No Results", details="")
+
+@app.route("/api/v_{}/sample_data/<path:dataset_name>/<path:trait_name>".format(version))
+@app.route("/api/v_{}/sample_data/<path:dataset_name>/<path:trait_name>.<path:file_format>".format(version))
+def trait_sample_data(dataset_name, trait_name, file_format = "json"):
+ probeset_query = """
+ SELECT
+ Strain.Name, Strain.Name2, ProbeSetData.value, ProbeSetData.Id, ProbeSetSE.error
+ FROM
+ (ProbeSetData, ProbeSetFreeze, Strain, ProbeSet, ProbeSetXRef)
+ LEFT JOIN ProbeSetSE ON
+ (ProbeSetSE.DataId = ProbeSetData.Id AND ProbeSetSE.StrainId = ProbeSetData.StrainId)
+ WHERE
+ ProbeSet.Name = "{0}" AND ProbeSetXRef.ProbeSetId = ProbeSet.Id AND
+ ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id AND
+ ProbeSetFreeze.Name = "{1}" AND
+ ProbeSetXRef.DataId = ProbeSetData.Id AND
+ ProbeSetData.StrainId = Strain.Id
+ ORDER BY
+ Strain.Name
+ """.format(trait_name, dataset_name)
+
+ probeset_results = g.db.execute(probeset_query)
+
+ sample_data = probeset_results.fetchall()
+ if len(sample_data) > 0:
+ sample_list = []
+ for sample in sample_data:
+ sample_dict = {
+ "sample_name" : sample[0],
+ "sample_name_2" : sample[1],
+ "value" : sample[2],
+ "data_id" : sample[3],
+ }
+ if sample[4]:
+ sample_dict["se"] = sample[4]
+ sample_list.append(sample_dict)
+
+ return flask.jsonify(sample_list)
+ else:
+ if not dataset_name.isdigit():
+ group_id = get_group_id(dataset_name)
+ if group_id:
+ dataset_or_group = group_id
+ else:
+ dataset_or_group = dataset_name
+ else:
+ dataset_or_group = dataset_name
+
+ pheno_query = """
+ SELECT DISTINCT
+ Strain.Name, Strain.Name2, PublishData.value, PublishData.Id, PublishSE.error, NStrain.count
+ FROM
+ (PublishData, Strain, PublishXRef, PublishFreeze)
+ LEFT JOIN PublishSE ON
+ (PublishSE.DataId = PublishData.Id AND PublishSE.StrainId = PublishData.StrainId)
+ LEFT JOIN NStrain ON
+ (NStrain.DataId = PublishData.Id AND
+ NStrain.StrainId = PublishData.StrainId)
+ WHERE
+ PublishXRef.InbredSetId = PublishFreeze.InbredSetId AND
+ PublishData.Id = PublishXRef.DataId AND PublishXRef.Id = "{1}" AND
+ (PublishFreeze.Id = "{0}" OR PublishFreeze.Name = "{0}" OR
+ PublishFreeze.ShortName = "{0}" OR PublishXRef.InbredSetId = "{0}") AND
+ PublishData.StrainId = Strain.Id
+ ORDER BY
+ Strain.Name
+ """.format(dataset_or_group, trait_name)
+
+ pheno_results = g.db.execute(pheno_query)
+
+ sample_data = pheno_results.fetchall()
+ if len(sample_data) > 0:
+ sample_list = []
+ for sample in sample_data:
+ sample_dict = {
+ "sample_name" : sample[0],
+ "sample_name_2" : sample[1],
+ "value" : sample[2],
+ "data_id" : sample[3]
+ }
+ if sample[4]:
+ sample_dict["se"] = sample[4]
+ if sample[5]:
+ sample_dict["n_cases"] = sample[5]
+ sample_list.append(sample_dict)
+
+ return flask.jsonify(sample_list)
+ else:
+ return return_error(code=204, source=request.url_rule.rule, title="No Results", details="")
+
+@app.route("/api/v_{}/trait/<path:dataset_name>/<path:trait_name>".format(version))
+@app.route("/api/v_{}/trait/<path:dataset_name>/<path:trait_name>.<path:file_format>".format(version))
+@app.route("/api/v_{}/trait_info/<path:dataset_name>/<path:trait_name>".format(version))
+@app.route("/api/v_{}/trait_info/<path:dataset_name>/<path:trait_name>.<path:file_format>".format(version))
+def get_trait_info(dataset_name, trait_name, file_format = "json"):
+ probeset_query = """
+ SELECT
+ ProbeSet.Id, ProbeSet.Name, ProbeSet.Symbol, ProbeSet.description, ProbeSet.Chr, ProbeSet.Mb, ProbeSet.alias,
+ ProbeSetXRef.mean, ProbeSetXRef.se, ProbeSetXRef.Locus, ProbeSetXRef.LRS, ProbeSetXRef.pValue, ProbeSetXRef.additive
+ FROM
+ ProbeSet, ProbeSetXRef, ProbeSetFreeze
+ WHERE
+ ProbeSet.Name = "{0}" AND
+ ProbeSetXRef.ProbeSetId = ProbeSet.Id AND
+ ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id AND
+ ProbeSetFreeze.Name = "{1}"
+ """.format(trait_name, dataset_name)
+
+ probeset_results = g.db.execute(probeset_query)
+
+ trait_info = probeset_results.fetchone()
+ if trait_info:
+ trait_dict = {
+ "id" : trait_info[0],
+ "name" : trait_info[1],
+ "symbol" : trait_info[2],
+ "description" : trait_info[3],
+ "chr" : trait_info[4],
+ "mb" : trait_info[5],
+ "alias" :trait_info[6],
+ "mean" : trait_info[7],
+ "se" : trait_info[8],
+ "locus" : trait_info[9],
+ "lrs" : trait_info[10],
+ "p_value" : trait_info[11],
+ "additive" : trait_info[12]
+ }
+
+ return flask.jsonify(trait_dict)
+ else:
+ if "Publish" in dataset_name: #ZS: Check if the user input the dataset_name as BXDPublish, etc (which is always going to be the group name + "Publish"
+ dataset_name = dataset_name.replace("Publish", "")
+
+ group_id = get_group_id(dataset_name)
+ pheno_query = """
+ SELECT
+ PublishXRef.PhenotypeId, PublishXRef.Locus, PublishXRef.LRS, PublishXRef.additive
+ FROM
+ PublishXRef
+ WHERE
+ PublishXRef.Id = "{0}" AND
+ PublishXRef.InbredSetId = "{1}"
+ """.format(trait_name, group_id)
+
+ pheno_results = g.db.execute(pheno_query)
+
+ trait_info = pheno_results.fetchone()
+ if trait_info:
+ trait_dict = {
+ "id" : trait_info[0],
+ "locus" : trait_info[1],
+ "lrs" : trait_info[2],
+ "additive" : trait_info[3]
+ }
+
+ return flask.jsonify(trait_dict)
+ else:
+ return return_error(code=204, source=request.url_rule.rule, title="No Results", details="")
+
+@app.route("/api/v_{}/correlation".format(version), methods=("GET",))
+def get_corr_results():
+ results = correlation.do_correlation(request.args)
+
+ if len(results) > 0:
+ return flask.jsonify(results) #ZS: I think flask.jsonify expects a dict/list instead of JSON
+ else:
+ return return_error(code=204, source=request.url_rule.rule, title="No Results", details="")
+
+@app.route("/api/v_{}/mapping".format(version), methods=("GET",))
+def get_mapping_results():
+ results, format = mapping.do_mapping_for_api(request.args)
+
+ if len(results) > 0:
+ if format == "csv":
+ filename = "mapping_" + datetime.datetime.utcnow().strftime("%b_%d_%Y_%I:%M%p") + ".csv"
+
+ si = StringIO.StringIO()
+ csv_writer = csv.writer(si)
+ csv_writer.writerows(results)
+ output = make_response(si.getvalue())
+ output.headers["Content-Disposition"] = "attachment; filename=" + filename
+ output.headers["Content-type"] = "text/csv"
+
+ return output
+ elif format == "json":
+ return flask.jsonify(results)
+ else:
+ return return_error(code=415, source=request.url_rule.rule, title="Unsupported Format", details="")
+ else:
+ return return_error(code=204, source=request.url_rule.rule, title="No Results", details="")
+
+@app.route("/api/v_{}/genotypes/<string:file_format>/<string:group_name>/<string:dataset_name>.zip".format(version))
+@app.route("/api/v_{}/genotypes/<string:file_format>/<string:group_name>/<string:dataset_name>".format(version))
+@app.route("/api/v_{}/genotypes/<string:file_format>/<string:group_name>.zip".format(version))
+@app.route("/api/v_{}/genotypes/<string:file_format>/<string:group_name>".format(version))
+@app.route("/api/v_{}/genotypes/<string:group_name>.<string:file_format>".format(version))
+def get_genotypes(group_name, file_format="csv", dataset_name=None):
+ limit_num = None
+ if 'limit_to' in request.args:
+ if request.args['limit_to'].isdigit():
+ limit_num = int(request.args['limit_to'])
+
+ si = StringIO.StringIO()
+ if file_format == "csv" or file_format == "geno":
+ filename = group_name + ".geno"
+
+ if os.path.isfile("{0}/{1}.geno".format(flat_files("genotype"), group_name)):
+ output_lines = []
+ with open("{0}/{1}.geno".format(flat_files("genotype"), group_name)) as genofile:
+ i = 0
+ for line in genofile:
+ if line[0] == "#" or line[0] == "@":
+ output_lines.append([line.strip()])
+ else:
+ if limit_num and i >= limit_num:
+ break
+ output_lines.append(line.split())
+ i += 1
+
+ csv_writer = csv.writer(si, delimiter = "\t", escapechar = "\\", quoting = csv.QUOTE_NONE)
+ else:
+ return return_error(code=204, source=request.url_rule.rule, title="No Results", details="")
+ elif file_format == "rqtl2":
+ memory_file = io.BytesIO()
+ if dataset_name:
+ filename = dataset_name
+ else:
+ filename = group_name
+
+ if os.path.isfile("{0}/{1}_geno.csv".format(flat_files("genotype/rqtl2"), group_name)):
+ yaml_file = json.load(open("{0}/{1}.json".format(flat_files("genotype/rqtl2"), group_name)))
+ yaml_file["geno"] = filename + "_geno.csv"
+ yaml_file["gmap"] = filename + "_gmap.csv"
+ yaml_file["pheno"] = filename + "_pheno.csv"
+ config_file = [filename + ".json", json.dumps(yaml_file)]
+ #config_file = [filename + ".yaml", open("{0}/{1}.yaml".format(flat_files("genotype/rqtl2"), group_name))]
+ geno_file = [filename + "_geno.csv", open("{0}/{1}_geno.csv".format(flat_files("genotype/rqtl2"), group_name))]
+ gmap_file = [filename + "_gmap.csv", open("{0}/{1}_gmap.csv".format(flat_files("genotype/rqtl2"), group_name))]
+ if dataset_name:
+ phenotypes = requests.get("http://gn2.genenetwork.org/api/v_pre1/sample_data/" + dataset_name)
+ else:
+ phenotypes = requests.get("http://gn2.genenetwork.org/api/v_pre1/sample_data/" + group_name + "Publish")
+
+ with ZipFile(memory_file, 'w', compression=ZIP_DEFLATED) as zf:
+ zf.writestr(config_file[0], config_file[1])
+ for this_file in [geno_file, gmap_file]:
+ zf.writestr(this_file[0], this_file[1].read())
+ zf.writestr(filename + "_pheno.csv", phenotypes.content)
+
+ memory_file.seek(0)
+
+ return send_file(memory_file, attachment_filename=filename + ".zip", as_attachment=True)
+ else:
+ return return_error(code=204, source=request.url_rule.rule, title="No Results", details="")
+ else:
+ filename = group_name + ".bimbam"
+
+ if os.path.isfile("{0}/{1}.geno".format(flat_files("genotype"), group_name)):
+ output_lines = []
+ with open("{0}/{1}_geno.txt".format(flat_files("genotype/bimbam"), group_name)) as genofile:
+ i = 0
+ for line in genofile:
+ if limit_num and i >= limit_num:
+ break
+ output_lines.append([line.strip() for line in line.split(",")])
+ i += 1
+
+ csv_writer = csv.writer(si, delimiter = ",")
+ else:
+ return return_error(code=204, source=request.url_rule.rule, title="No Results", details="")
+
+ csv_writer.writerows(output_lines)
+ output = make_response(si.getvalue())
+ output.headers["Content-Disposition"] = "attachment; filename=" + filename
+ output.headers["Content-type"] = "text/csv"
+
+ return output
+
+@app.route("/api/v_{}/gen_dropdown".format(version), methods=("GET",))
+def gen_dropdown_menu():
+ results = gen_menu.gen_dropdown_json()
+
+ if len(results) > 0:
+ return flask.jsonify(results)
+ else:
+ return return_error(code=500, source=request.url_rule.rule, title="Some error occurred", details="")
+
+def return_error(code, source, title, details):
+ json_ob = {"errors": [
+ {
+ "status": code,
+ "source": { "pointer": source },
+ "title" : title,
+ "detail": details
+ }
+ ]}
+
+ return flask.jsonify(json_ob)
+
+def get_dataset_trait_ids(dataset_name, start_vars):
+
+ if 'limit_to' in start_vars:
+ limit_string = "LIMIT " + str(start_vars['limit_to'])
+ else:
+ limit_string = ""
+
+ if "Geno" in dataset_name:
+ data_type = "Geno" #ZS: Need to pass back the dataset type
+ query = """
+ SELECT
+ GenoXRef.GenoId, Geno.Name, GenoXRef.GenoFreezeId
+ FROM
+ Geno, GenoXRef, GenoFreeze
+ WHERE
+ Geno.Id = GenoXRef.GenoId AND
+ GenoXRef.GenoFreezeId = GenoFreeze.Id AND
+ GenoFreeze.Name = "{0}"
+ {1}
+ """.format(dataset_name, limit_string)
+
+ results = g.db.execute(query).fetchall()
+
+ trait_ids = [result[0] for result in results]
+ trait_names = [result[1] for result in results]
+ dataset_id = results[0][2]
+ return trait_ids, trait_names, data_type, dataset_id
+
+ elif "Publish" in dataset_name or get_group_id(dataset_name):
+ data_type = "Publish"
+ dataset_name = dataset_name.replace("Publish", "")
+ dataset_id = get_group_id(dataset_name)
+
+ query = """
+ SELECT
+ PublishXRef.PhenotypeId
+ FROM
+ PublishXRef
+ WHERE
+ PublishXRef.InbredSetId = "{0}"
+ {1}
+ """.format(dataset_id, limit_string)
+
+ results = g.db.execute(query).fetchall()
+
+ trait_ids = [result[0] for result in results]
+ trait_names = trait_ids
+ return trait_ids, trait_names, data_type, dataset_id
+
+ else:
+ data_type = "ProbeSet"
+ query = """
+ SELECT
+ ProbeSetXRef.ProbeSetId, ProbeSet.Name, ProbeSetXRef.ProbeSetFreezeId
+ FROM
+ ProbeSet, ProbeSetXRef, ProbeSetFreeze
+ WHERE
+ ProbeSet.Id = ProbeSetXRef.ProbeSetId AND
+ ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id AND
+ ProbeSetFreeze.Name = "{0}"
+ {1}
+ """.format(dataset_name, limit_string)
+
+ results = g.db.execute(query).fetchall()
+
+ trait_ids = [result[0] for result in results]
+ trait_names = [result[1] for result in results]
+ dataset_id = results[0][2]
+ return trait_ids, trait_names, data_type, dataset_id
+
+def get_samplelist(dataset_name):
+ group_id = get_group_id_from_dataset(dataset_name)
+
+ query = """
+ SELECT Strain.Name
+ FROM Strain, StrainXRef
+ WHERE StrainXRef.StrainId = Strain.Id AND
+ StrainXRef.InbredSetId = {}
+ """.format(group_id)
+
+ results = g.db.execute(query).fetchall()
+
+ samplelist = [result[0] for result in results]
+
+ return samplelist
+
+def get_group_id_from_dataset(dataset_name):
+ if "Publish" in dataset_name:
+ query = """
+ SELECT
+ InbredSet.Id
+ FROM
+ InbredSet, PublishFreeze
+ WHERE
+ PublishFreeze.InbredSetId = InbredSet.Id AND
+ PublishFreeze.Name = "{}"
+ """.format(dataset_name)
+ elif "Geno" in dataset_name:
+ query = """
+ SELECT
+ InbredSet.Id
+ FROM
+ InbredSet, GenoFreeze
+ WHERE
+ GenoFreeze.InbredSetId = InbredSet.Id AND
+ GenoFreeze.Name = "{}"
+ """.format(dataset_name)
+ else:
+ query = """
+ SELECT
+ InbredSet.Id
+ FROM
+ InbredSet, ProbeSetFreeze, ProbeFreeze
+ WHERE
+ ProbeFreeze.InbredSetId = InbredSet.Id AND
+ ProbeFreeze.Id = ProbeSetFreeze.ProbeFreezeId AND
+ ProbeSetFreeze.Name = "{}"
+ """.format(dataset_name)
+
+ result = g.db.execute(query).fetchone()
+
+ if len(result) > 0:
+ return result[0]
+ else:
+ return None
+
+def get_group_id(group_name):
+ query = """
+ SELECT InbredSet.Id
+ FROM InbredSet
+ WHERE InbredSet.Name = "{}"
+ """.format(group_name)
+
+ group_id = g.db.execute(query).fetchone()
+ if group_id:
+ return group_id[0]
+ else:
+ return None \ No newline at end of file
diff --git a/wqflask/wqflask/collect.py b/wqflask/wqflask/collect.py
index ba555094..fa6e03b4 100644
--- a/wqflask/wqflask/collect.py
+++ b/wqflask/wqflask/collect.py
@@ -8,7 +8,6 @@ import time
import uuid
import hashlib
-import hmac
import base64
import urlparse
@@ -28,214 +27,70 @@ from pprint import pformat as pf
from wqflask.database import db_session
from wqflask import model
-from wqflask import user_manager
-from utility import Bunch, Struct
+from utility import Bunch, Struct, hmac
from utility.formatting import numify
from base import trait
from base.data_set import create_dataset
-def get_collection():
- if g.user_session.logged_in:
- return UserCollection()
- else:
- return AnonCollection()
- #else:
- # CauseError
-
-class AnonCollection(object):
- """User is not logged in"""
- def __init__(self, collection_name):
- anon_user = user_manager.AnonUser()
- self.key = anon_user.key
- self.name = collection_name
- self.id = None
- self.created_timestamp = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
- self.changed_timestamp = self.created_timestamp #ZS: will be updated when changes are made
-
- #ZS: Find id and set it if the collection doesn't already exist
- if Redis.get(self.key) == "None" or Redis.get(self.key) == None:
- Redis.set(self.key, None) #ZS: For some reason I get the error "Operation against a key holding the wrong kind of value" if I don't do this
- else:
- collections_list = json.loads(Redis.get(self.key))
- collection_position = 0 #ZS: Position of collection in collection_list, if it exists
- collection_exists = False
- for i, collection in enumerate(collections_list):
- if collection['name'] == self.name:
- collection_position = i
- collection_exists = True
- self.id = collection['id']
- break
-
- if self.id == None:
- self.id = str(uuid.uuid4())
-
- def get_members(self):
- traits = []
- collections_list = json.loads(Redis.get(self.key))
- for collection in collections_list:
- if collection['id'] == self.id:
- traits = collection['members']
- return traits
-
- @property
- def num_members(self):
- num_members = 0
- collections_list = json.loads(Redis.get(self.key))
- for collection in collections_list:
- if collection['id'] == self.id:
- num_members = collection['num_members']
- return num_members
-
- def add_traits(self, params):
- #assert collection_name == "Default", "Unexpected collection name for anonymous user"
- self.traits = list(process_traits(params['traits']))
- #len_before = len(Redis.smembers(self.key))
- existing_collections = Redis.get(self.key)
- print("existing_collections:", existing_collections)
- if existing_collections != None and existing_collections != "None":
- collections_list = json.loads(existing_collections)
- collection_position = 0 #ZS: Position of collection in collection_list, if it exists
- collection_exists = False
- for i, collection in enumerate(collections_list):
- if collection['id'] == self.id:
- collection_position = i
- collection_exists = True
- break
- if collection_exists:
- collections_list[collection_position]['members'].extend(self.traits)
- collections_list[collection_position]['num_members'] = len(collections_list[collection_position]['members'])
- collections_list[collection_position]['changed_timestamp'] = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
- else:
- collection_dict = {"id" : self.id,
- "name" : self.name,
- "created_timestamp" : self.created_timestamp,
- "changed_timestamp" : self.changed_timestamp,
- "num_members" : len(self.traits),
- "members" : self.traits}
- collections_list.append(collection_dict)
- else:
- collections_list = []
- collection_dict = {"id" : self.id,
- "name" : self.name,
- "created_timestamp" : self.created_timestamp,
- "changed_timestamp" : self.changed_timestamp,
- "num_members" : len(self.traits),
- "members" : self.traits}
- collections_list.append(collection_dict)
-
- Redis.set(self.key, json.dumps(collections_list))
- #Redis.sadd(self.key, *list(traits))
- #Redis.expire(self.key, 60 * 60 * 24 * 5)
- #len_now = len(Redis.smembers(self.key))
- #report_change(len_before, len_now)
-
- def remove_traits(self, params):
- traits_to_remove = [(":").join(trait.split(":")[:2]) for trait in params.getlist('traits[]')]
- existing_collections = Redis.get(self.key)
- collection_position = 0
- collections_list = json.loads(existing_collections)
- for i, collection in enumerate(collections_list):
- if collection['id'] == self.id:
- collection_position = i
- collection_exists = True
- break
- collections_list[collection_position]['members'] = [trait for trait in collections_list[collection_position]['members'] if trait not in traits_to_remove]
- collections_list[collection_position]['num_members'] = len(collections_list[collection_position]['members'])
- collections_list[collection_position]['changed_timestamp'] = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
- len_now = collections_list[collection_position]['num_members']
- #print("before in redis:", json.loads(Redis.get(self.key)))
- Redis.set(self.key, json.dumps(collections_list))
- #print("currently in redis:", json.loads(Redis.get(self.key)))
-
- # We need to return something so we'll return this...maybe in the future
- # we can use it to check the results
- return str(len_now)
-
-
-class UserCollection(object):
- """User is logged in"""
-
- def add_traits(self, params, collection_name):
- print("---> params are:", params.keys())
- print(" type(params):", type(params))
- if collection_name=="Default":
- uc = g.user_session.user_ob.get_collection_by_name("Default")
- # Doesn't exist so we'll create it
- if not uc:
- return create_new("Default")
- else:
- uc = model.UserCollection.query.get(params['existing_collection'].split(":")[0])
- members = list(uc.members_as_set()) #set(json.loads(uc.members))
- len_before = len(members)
-
- traits = process_traits(params['traits'])
-
- members_now = members
- for trait in traits:
- if trait in members:
- continue
- else:
- members_now.append(trait)
-
- #members_now = list(members | traits)
- len_now = len(members_now)
- uc.members = json.dumps(members_now)
-
- uc.changed_timestamp = datetime.datetime.utcnow()
-
- db_session.commit()
-
- print("added to existing, now set is:" + str(uc.members))
- report_change(len_before, len_now)
-
- # Probably have to change that
- return redirect(url_for('view_collection', uc_id=uc.id))
+import logging
+from utility.logger import getLogger
+logger = getLogger(__name__)
def process_traits(unprocessed_traits):
- #print("unprocessed_traits are:", unprocessed_traits)
if isinstance(unprocessed_traits, basestring):
unprocessed_traits = unprocessed_traits.split(",")
traits = set()
for trait in unprocessed_traits:
- #print("trait is:", trait)
- data, _separator, hmac = trait.rpartition(':')
+ data, _separator, the_hmac = trait.rpartition(':')
data = data.strip()
- assert hmac==user_manager.actual_hmac_creation(data), "Data tampering?"
- traits.add (str(data))
+ if g.user_session.logged_in:
+ assert the_hmac == hmac.hmac_creation(data), "Data tampering?"
+ traits.add(str(data))
+
return traits
def report_change(len_before, len_now):
new_length = len_now - len_before
if new_length:
- print("We've added {} to your collection.".format(
- numify(new_length, 'new trait', 'new traits')))
flash("We've added {} to your collection.".format(
numify(new_length, 'new trait', 'new traits')))
else:
- print("No new traits were added.")
+ logger.debug("No new traits were added.")
+
+@app.route("/collections/store_trait_list", methods=('POST',))
+def store_traits_list():
+ params = request.form
+ traits = params['traits']
+ hash = params['hash']
+
+ Redis.set(hash, traits)
+
+ return hash
@app.route("/collections/add")
def collections_add():
- traits=request.args['traits']
- if g.user_session.logged_in:
- user_collections = g.user_session.user_ob.user_collections
- print("user_collections are:", user_collections)
+ collections = g.user_session.user_collections
+ if len(collections) < 1:
+ collection_name = "Your Default Collection"
+ uc_id = g.user_session.add_collection(collection_name, set())
+ collections = g.user_session.user_collections
+
+ #ZS: One of these might be unnecessary
+ if 'traits' in request.args:
+ traits=request.args['traits']
return render_template("collections/add.html",
- traits = traits,
- collections = user_collections,
- )
+ traits = traits,
+ collections = collections,
+ )
else:
- anon_collections = user_manager.AnonUser().get_collections()
- collection_names = []
- for collection in anon_collections:
- collection_names.append({'id':collection['id'], 'name':collection['name']})
+ hash = request.args['hash']
return render_template("collections/add.html",
- traits = traits,
- collections = collection_names,
+ hash = hash,
+ collections = collections,
)
@app.route("/collections/new")
@@ -244,85 +99,70 @@ def collections_new():
if "sign_in" in params:
return redirect(url_for('login'))
-
if "create_new" in params:
- print("in create_new")
collection_name = params['new_collection']
+ if collection_name.strip() == "":
+ collection_name = datetime.datetime.utcnow().strftime('Collection_%b_%d_%H:%M')
return create_new(collection_name)
elif "add_to_existing" in params:
- print("in add to existing")
- collection_name = params['existing_collection'].split(":")[1]
- if g.user_session.logged_in:
- return UserCollection().add_traits(params, collection_name)
+ if 'existing_collection' not in params:
+ collections = g.user_session.user_collections
+ for collection in collections:
+ if collection["name"] == "Default Collection":
+ collection_id = collection["id"]
+ collection_name = collection["name"]
+ default_collection_exists = True
+ if not default_collection_exists:
+ return create_new("Your Default Collection")
else:
- ac = AnonCollection(collection_name)
- ac.add_traits(params)
- return redirect(url_for('view_collection', collection_id=ac.id))
+ collection_id = params['existing_collection'].split(":")[0]
+ collection_name = params['existing_collection'].split(":")[1]
+
+ if "hash" in params:
+ unprocessed_traits = Redis.get(params['hash'])
+ else:
+ unprocessed_traits = params['traits']
+ traits = list(process_traits(unprocessed_traits))
+ g.user_session.add_traits_to_collection(collection_id, traits)
+ return redirect(url_for('view_collection', uc_id=collection_id))
else:
CauseAnError
def create_new(collection_name):
params = request.args
- unprocessed_traits = params['traits']
+ if "hash" in params:
+ unprocessed_traits = Redis.get(params['hash'])
+ Redis.delete(params['hash'])
+ else:
+ unprocessed_traits = params['traits']
+
traits = process_traits(unprocessed_traits)
- if g.user_session.logged_in:
- uc = model.UserCollection()
- uc.name = collection_name
- print("user_session:", g.user_session.__dict__)
- uc.user = g.user_session.user_id
- uc.members = json.dumps(list(traits))
- db_session.add(uc)
- db_session.commit()
- return redirect(url_for('view_collection', uc_id=uc.id))
- else:
- current_collections = user_manager.AnonUser().get_collections()
- ac = AnonCollection(collection_name)
- ac.changed_timestamp = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
- ac.add_traits(params)
- return redirect(url_for('view_collection', collection_id=ac.id))
+ uc_id = g.user_session.add_collection(collection_name, traits)
+
+ return redirect(url_for('view_collection', uc_id=uc_id))
@app.route("/collections/list")
def list_collections():
params = request.args
- print("PARAMS:", params)
- if g.user_session.logged_in:
- user_collections = list(g.user_session.user_ob.user_collections)
- print("user_collections are:", user_collections)
- return render_template("collections/list.html",
- params = params,
- collections = user_collections,
- )
- else:
- anon_collections = user_manager.AnonUser().get_collections()
- print("anon_collections are:", anon_collections)
- return render_template("collections/list.html",
- params = params,
- collections = anon_collections)
+ user_collections = list(g.user_session.user_collections)
+ return render_template("collections/list.html",
+ params = params,
+ collections = user_collections,
+ )
@app.route("/collections/remove", methods=('POST',))
def remove_traits():
params = request.form
- print("params are:", params)
-
- if "uc_id" in params:
- uc_id = params['uc_id']
- uc = model.UserCollection.query.get(uc_id)
- traits_to_remove = params.getlist('traits[]')
- traits_to_remove = process_traits(traits_to_remove)
- print("\n\n after processing, traits_to_remove:", traits_to_remove)
- all_traits = uc.members_as_set()
- members_now = all_traits - traits_to_remove
- print(" members_now:", members_now)
- uc.members = json.dumps(list(members_now))
- uc.changed_timestamp = datetime.datetime.utcnow()
- db_session.commit()
- else:
- collection_name = params['collection_name']
- members_now = AnonCollection(collection_name).remove_traits(params)
+ uc_id = params['uc_id']
+ traits_to_remove = params.getlist('traits[]')
+ traits_to_remove = process_traits(traits_to_remove)
+ logger.debug("\n\n after processing, traits_to_remove:", traits_to_remove)
+
+ members_now = g.user_session.remove_traits_from_collection(uc_id, traits_to_remove)
# We need to return something so we'll return this...maybe in the future
# we can use it to check the results
@@ -332,20 +172,22 @@ def remove_traits():
@app.route("/collections/delete", methods=('POST',))
def delete_collection():
params = request.form
- print("params:", params)
- if g.user_session.logged_in:
- uc_id = params['uc_id']
- uc = model.UserCollection.query.get(uc_id)
- # Todo: For now having the id is good enough since it's so unique
- # But might want to check ownership in the future
- collection_name = uc.name
- db_session.delete(uc)
- db_session.commit()
+ uc_id = ""
+
+ uc_id = params['uc_id']
+ if len(uc_id.split(":")) > 1:
+ for this_uc_id in uc_id.split(":"):
+ collection_name = g.user_session.delete_collection(this_uc_id)
else:
- collection_name = params['collection_name']
- user_manager.AnonUser().delete_collection(collection_name)
+ collection_name = g.user_session.delete_collection(uc_id)
- flash("We've deleted the collection: {}.".format(collection_name), "alert-info")
+ if uc_id != "":
+ if len(uc_id.split(":")) > 1:
+ flash("We've deleted the selected collections.", "alert-info")
+ else:
+ flash("We've deleted the collection: {}.".format(uc_id), "alert-info")
+ else:
+ flash("We've deleted the collection: {}.".format(collection_name), "alert-info")
return redirect(url_for('list_collections'))
@@ -353,47 +195,46 @@ def delete_collection():
@app.route("/collections/view")
def view_collection():
params = request.args
- print("PARAMS in view collection:", params)
- if "uc_id" in params:
- uc_id = params['uc_id']
- uc = model.UserCollection.query.get(uc_id)
- traits = json.loads(uc.members)
- else:
- user_collections = json.loads(Redis.get(user_manager.AnonUser().key))
- this_collection = {}
- for collection in user_collections:
- if collection['id'] == params['collection_id']:
- this_collection = collection
- break
- #this_collection = user_collections[params['collection_id']]
- traits = this_collection['members']
-
- print("in view_collection traits are:", traits)
+ uc_id = params['uc_id']
+ uc = (collection for collection in g.user_session.user_collections if collection["id"] == uc_id).next()
+ traits = uc["members"]
trait_obs = []
json_version = []
for atrait in traits:
name, dataset_name = atrait.split(':')
- dataset = create_dataset(dataset_name)
-
- trait_ob = trait.GeneralTrait(name=name, dataset=dataset)
- trait_ob = trait.retrieve_trait_info(trait_ob, dataset, get_qtl_info=True)
+ if dataset_name == "Temp":
+ group = name.split("_")[2]
+ dataset = create_dataset(dataset_name, dataset_type = "Temp", group_name = group)
+ trait_ob = trait.GeneralTrait(name=name, dataset=dataset)
+ else:
+ dataset = create_dataset(dataset_name)
+ trait_ob = trait.GeneralTrait(name=name, dataset=dataset)
+ trait_ob = trait.retrieve_trait_info(trait_ob, dataset, get_qtl_info=True)
trait_obs.append(trait_ob)
- json_version.append(trait.jsonable(trait_ob, dataset_name))
+ json_version.append(trait.jsonable(trait_ob))
+
+ collection_info = dict(trait_obs=trait_obs,
+ uc = uc)
- if "uc_id" in params:
- collection_info = dict(trait_obs=trait_obs,
- uc = uc)
- else:
- collection_info = dict(trait_obs=trait_obs,
- collection_name=this_collection['name'])
if "json" in params:
- print("json_version:", json_version)
return json.dumps(json_version)
else:
return render_template("collections/view.html",
**collection_info
)
+
+@app.route("/collections/change_name", methods=('POST',))
+def change_collection_name():
+ params = request.form
+
+ collection_id = params['collection_id']
+ new_name = params['new_name']
+
+ g.user_session.change_collection_name(collection_id, new_name)
+
+ return new_name
+
diff --git a/wqflask/wqflask/comparison_bar_chart/__init__.py b/wqflask/wqflask/comparison_bar_chart/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/wqflask/wqflask/comparison_bar_chart/__init__.py
diff --git a/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py b/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py
new file mode 100644
index 00000000..21eb1493
--- /dev/null
+++ b/wqflask/wqflask/comparison_bar_chart/comparison_bar_chart.py
@@ -0,0 +1,117 @@
+## Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License
+# as published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU Affero General Public License for more details.
+#
+# This program is available from Source Forge: at GeneNetwork Project
+# (sourceforge.net/projects/genenetwork/).
+#
+# Contact Dr. Robert W. Williams at rwilliams@uthsc.edu
+#
+#
+# This module is used by GeneNetwork project (www.genenetwork.org)
+
+from __future__ import absolute_import, print_function, division
+
+import sys
+# sys.path.append(".") Never do this in a webserver!
+
+import string
+import cPickle
+import os
+import time
+import pp
+import math
+import collections
+import resource
+
+
+from pprint import pformat as pf
+
+import reaper
+
+from base.trait import GeneralTrait
+from base import data_set
+from utility import webqtlUtil, helper_functions, corr_result_helpers
+from db import webqtlDatabaseFunction
+import utility.webqtlUtil #this is for parallel computing only.
+from wqflask.correlation import correlation_functions
+from utility.benchmark import Bench
+
+from MySQLdb import escape_string as escape
+
+from pprint import pformat as pf
+
+from flask import Flask, g
+
+
+class ComparisonBarChart(object):
+
+ def __init__(self, start_vars):
+ trait_db_list = [trait.strip() for trait in start_vars['trait_list'].split(',')]
+
+ helper_functions.get_trait_db_obs(self, trait_db_list)
+
+ self.all_sample_list = []
+ self.traits = []
+ self.insufficient_shared_samples = False
+ this_group = self.trait_list[0][1].group.name #ZS: Getting initial group name before verifying all traits are in the same group in the following loop
+ for trait_db in self.trait_list:
+
+ if trait_db[1].group.name != this_group:
+ self.insufficient_shared_samples = True
+ break
+ else:
+ this_group = trait_db[1].group.name
+ this_trait = trait_db[0]
+ self.traits.append(this_trait)
+
+ this_sample_data = this_trait.data
+
+ for sample in this_sample_data:
+ if sample not in self.all_sample_list:
+ self.all_sample_list.append(sample)
+
+ if self.insufficient_shared_samples:
+ pass
+ else:
+ self.sample_data = []
+ for trait_db in self.trait_list:
+ this_trait = trait_db[0]
+ this_sample_data = this_trait.data
+
+ this_trait_vals = []
+ for sample in self.all_sample_list:
+ if sample in this_sample_data:
+ this_trait_vals.append(this_sample_data[sample].value)
+ else:
+ this_trait_vals.append('')
+ self.sample_data.append(this_trait_vals)
+
+ self.js_data = dict(traits = [trait.name for trait in self.traits],
+ samples = self.all_sample_list,
+ sample_data = self.sample_data,)
+
+ def get_trait_db_obs(self, trait_db_list):
+
+ self.trait_list = []
+ for i, trait_db in enumerate(trait_db_list):
+ if i == (len(trait_db_list) - 1):
+ break
+ trait_name, dataset_name = trait_db.split(":")
+ #print("dataset_name:", dataset_name)
+ dataset_ob = data_set.create_dataset(dataset_name)
+ trait_ob = GeneralTrait(dataset=dataset_ob,
+ name=trait_name,
+ cellid=None)
+ self.trait_list.append((trait_ob, dataset_ob))
+
+ #print("trait_list:", self.trait_list)
+
diff --git a/wqflask/wqflask/correlation/corr_scatter_plot.py b/wqflask/wqflask/correlation/corr_scatter_plot.py
index 96afef1e..dfb81c54 100644
--- a/wqflask/wqflask/correlation/corr_scatter_plot.py
+++ b/wqflask/wqflask/correlation/corr_scatter_plot.py
@@ -1,55 +1,28 @@
from __future__ import absolute_import, print_function, division
+import math
+
+from flask import g
+
from base.trait import GeneralTrait
from base import data_set
from utility import corr_result_helpers
from scipy import stats
import numpy as np
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
class CorrScatterPlot(object):
"""Page that displays a correlation scatterplot with a line fitted to it"""
def __init__(self, params):
self.data_set_1 = data_set.create_dataset(params['dataset_1'])
self.data_set_2 = data_set.create_dataset(params['dataset_2'])
+ #self.data_set_3 = data_set.create_dataset(params['dataset_3'])
self.trait_1 = GeneralTrait(name=params['trait_1'], dataset=self.data_set_1)
self.trait_2 = GeneralTrait(name=params['trait_2'], dataset=self.data_set_2)
-
- try:
- width = int(params['width'])
- except:
- width = 800
- self.width = width
-
- try:
- height = int(params['height'])
- except:
- height = 600
- self.height = height
-
- try:
- circle_color = params['circle_color']
- except:
- circle_color = '#3D85C6'
- self.circle_color = circle_color
-
- try:
- circle_radius = int(params['circle_radius'])
- except:
- circle_radius = 5
- self.circle_radius = circle_radius
-
- try:
- line_color = params['line_color']
- except:
- line_color = '#FF0000'
- self.line_color = line_color
-
- try:
- line_width = int(params['line_width'])
- except:
- line_width = 1
- self.line_width = line_width
+ #self.trait_3 = GeneralTrait(name=params['trait_3'], dataset=self.data_set_3)
samples_1, samples_2, num_overlap = corr_result_helpers.normalize_values_with_samples(self.trait_1.data, self.trait_2.data)
@@ -64,12 +37,47 @@ class CorrScatterPlot(object):
vals_2.append(samples_2[sample].value)
self.data.append(vals_2)
- x = np.array(vals_1)
- y = np.array(vals_2)
- slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)
+ slope, intercept, r_value, p_value, std_err = stats.linregress(vals_1, vals_2)
+
+ if slope < 0.001:
+ slope_string = '%.3E' % slope
+ else:
+ slope_string = '%.3f' % slope
+
+ x_buffer = (max(vals_1) - min(vals_1))*0.1
+ y_buffer = (max(vals_2) - min(vals_2))*0.1
+
+ x_range = [min(vals_1) - x_buffer, max(vals_1) + x_buffer]
+ y_range = [min(vals_2) - y_buffer, max(vals_2) + y_buffer]
+
+ intercept_coords = get_intercept_coords(slope, intercept, x_range, y_range)
+
+ rx = stats.rankdata(vals_1)
+ ry = stats.rankdata(vals_2)
+ self.rdata = []
+ self.rdata.append(rx.tolist())
+ self.rdata.append(ry.tolist())
+ srslope, srintercept, srr_value, srp_value, srstd_err = stats.linregress(rx, ry)
+
+ if srslope < 0.001:
+ srslope_string = '%.3E' % srslope
+ else:
+ srslope_string = '%.3f' % srslope
+
+ x_buffer = (max(rx) - min(rx))*0.1
+ y_buffer = (max(ry) - min(ry))*0.1
+
+ sr_range = [min(rx) - x_buffer, max(rx) + x_buffer]
+
+ sr_intercept_coords = get_intercept_coords(srslope, srintercept, sr_range, sr_range)
+
+ self.collections_exist = "False"
+ if g.user_session.num_collections > 0:
+ self.collections_exist = "True"
self.js_data = dict(
data = self.data,
+ rdata = self.rdata,
indIDs = self.indIDs,
trait_1 = self.trait_1.dataset.name + ": " + str(self.trait_1.name),
trait_2 = self.trait_2.dataset.name + ": " + str(self.trait_2.name),
@@ -78,14 +86,39 @@ class CorrScatterPlot(object):
num_overlap = num_overlap,
vals_1 = vals_1,
vals_2 = vals_2,
+ x_range = x_range,
+ y_range = y_range,
+ sr_range = sr_range,
+ intercept_coords = intercept_coords,
+ sr_intercept_coords = sr_intercept_coords,
+
slope = slope,
+ slope_string = slope_string,
intercept = intercept,
r_value = r_value,
p_value = p_value,
- width = width,
- height = height,
- circle_color = circle_color,
- circle_radius = circle_radius,
- line_color = line_color,
- line_width = line_width
+
+ srslope = srslope,
+ srslope_string = srslope_string,
+ srintercept = srintercept,
+ srr_value = srr_value,
+ srp_value = srp_value
+
+ #trait3 = self.trait_3.data,
+ #vals_3 = vals_3
)
+ self.jsdata = self.js_data
+
+
+def get_intercept_coords(slope, intercept, x_range, y_range):
+ intercept_coords = []
+
+ y1 = slope*x_range[0] + intercept
+ y2 = slope*x_range[1] + intercept
+ x1 = (y1-intercept)/slope
+ x2 = (y2-intercept)/slope
+
+ intercept_coords.append([x1, y1])
+ intercept_coords.append([x2, y2])
+
+ return intercept_coords \ No newline at end of file
diff --git a/wqflask/wqflask/correlation/correlation_functions.py b/wqflask/wqflask/correlation/correlation_functions.py
index 80a0818c..06dec795 100644
--- a/wqflask/wqflask/correlation/correlation_functions.py
+++ b/wqflask/wqflask/correlation/correlation_functions.py
@@ -28,524 +28,12 @@ from __future__ import absolute_import, print_function, division
import math
import rpy2.robjects
-import pp
import string
-from utility import webqtlUtil
from base.mrna_assay_tissue_data import MrnaAssayTissueData
-from base.trait import GeneralTrait
-from db import webqtlDatabaseFunction
from flask import Flask, g
-#XZ: The input 'controls' is String. It contains the full name of control traits.
-#XZ: The input variable 'strainlst' is List. It contains the strain names of primary trait.
-#XZ: The returned tcstrains is the list of list [[],[]...]. So are tcvals and tcvars. The last returned parameter is list of numbers.
-#XZ, 03/29/2010: For each returned control trait, there is no None value in it.
-def controlStrains(controls, strainlst):
-
- controls = controls.split(',')
-
- cvals = {}
- for oneTraitName in controls:
- oneTrait = webqtlTrait(fullname=oneTraitName, cursor=webqtlDatabaseFunction.getCursor() )
- oneTrait.retrieveData()
- cvals[oneTraitName] = oneTrait.data
-
- tcstrains = []
- tcvals = []
- tcvars = []
-
- for oneTraitName in controls:
- strains = []
- vals = []
- vars = []
-
- for _strain in strainlst:
- if cvals[oneTraitName].has_key(_strain):
- _val = cvals[oneTraitName][_strain].val
- if _val != None:
- strains.append(_strain)
- vals.append(_val)
- vars.append(None)
-
- tcstrains.append(strains)
- tcvals.append(vals)
- tcvars.append(vars)
-
- return tcstrains, tcvals, tcvars, [len(x) for x in tcstrains]
-
-
-
-#XZ, 03/29/2010: After execution of functon "controlStrains" and "fixStrains", primary trait and control traits have the same strains and in the same order. There is no 'None' value in them.
-def fixStrains(_strains,_controlstrains,_vals,_controlvals,_vars,_controlvars):
- """Corrects strains, vals, and vars so that all contrain only those strains common
- to the reference trait and all control traits."""
-
- def dictify(strains,vals,vars):
- subdict = {}
- for i in xrange(len(strains)):
- subdict[strains[i]] = (vals[i],vars[i])
- return subdict
-
- #XZ: The 'dicts' is a list of dictionary. The first element is the dictionary of reference trait. The rest elements are for control traits.
- dicts = []
- dicts.append(dictify(_strains,_vals,_vars))
-
- nCstrains = len(_controlstrains)
- for i in xrange(nCstrains):
- dicts.append(dictify(_controlstrains[i],_controlvals[i],_controlvars[i]))
-
- _newstrains = []
- _vals = []
- _vars = []
- _controlvals = [[] for x in xrange(nCstrains)]
- _controlvars = [[] for x in xrange(nCstrains)]
-
- for strain in _strains:
- inall = True
- for d in dicts:
- if strain not in d:
- inall = False
- break
- if inall:
- _newstrains.append(strain)
- _vals.append(dicts[0][strain][0])
- _vars.append(dicts[0][strain][1])
- for i in xrange(nCstrains):
- _controlvals[i].append(dicts[i+1][strain][0])
- _controlvars[i].append(dicts[i+1][strain][1])
-
- return _newstrains, _vals, _controlvals, _vars, _controlvars
-
-
-#XZ, 6/15/2010: If there is no identical control traits, the returned list is empty.
-#else, the returned list has two elements of control trait name.
-def findIdenticalControlTraits ( controlVals, controlNames ):
- nameOfIdenticalTraits = []
-
- controlTraitNumber = len(controlVals)
-
- if controlTraitNumber > 1:
-
- #XZ: reset the precision of values and convert to string type
- for oneTraitVal in controlVals:
- for oneStrainVal in oneTraitVal:
- oneStrainVal = '%.3f' % oneStrainVal
-
- for i, oneTraitVal in enumerate( controlVals ):
- for j in range(i+1, controlTraitNumber):
- if oneTraitVal == controlVals[j]:
- nameOfIdenticalTraits.append(controlNames[i])
- nameOfIdenticalTraits.append(controlNames[j])
-
- return nameOfIdenticalTraits
-
-#XZ, 6/15/2010: If there is no identical control traits, the returned list is empty.
-#else, the returned list has two elements of control trait name.
-#primaryVal is of list type. It contains value of primary trait.
-#primaryName is of string type.
-#controlVals is of list type. Each element is list too. Each element contain value of one control trait.
-#controlNames is of list type.
-def findIdenticalTraits (primaryVal, primaryName, controlVals, controlNames ):
- nameOfIdenticalTraits = []
-
- #XZ: reset the precision of values and convert to string type
- for oneStrainVal in primaryVal:
- oneStrainVal = '%.3f' % oneStrainVal
-
- for oneTraitVal in controlVals:
- for oneStrainVal in oneTraitVal:
- oneStrainVal = '%.3f' % oneStrainVal
-
- controlTraitNumber = len(controlVals)
-
- if controlTraitNumber > 1:
- for i, oneTraitVal in enumerate( controlVals ):
- for j in range(i+1, controlTraitNumber):
- if oneTraitVal == controlVals[j]:
- nameOfIdenticalTraits.append(controlNames[i])
- nameOfIdenticalTraits.append(controlNames[j])
- break
-
- if len(nameOfIdenticalTraits) == 0:
- for i, oneTraitVal in enumerate( controlVals ):
- if primaryVal == oneTraitVal:
- nameOfIdenticalTraits.append(primaryName)
- nameOfIdenticalTraits.append(controlNames[i])
- break
-
- return nameOfIdenticalTraits
-
-
-
-#XZ, 03/29/2010: The strains in primaryVal, controlVals, targetVals must be of the same number and in same order.
-#XZ: No value in primaryVal and controlVals could be None.
-
-def determinePartialsByR (primaryVal, controlVals, targetVals, targetNames, method='p'):
-
- def compute_partial ( primaryVal, controlVals, targetVals, targetNames, method ):
-
- rpy2.robjects.r("""
-pcor.test <- function(x,y,z,use="mat",method="p",na.rm=T){
- # The partial correlation coefficient between x and y given z
- #
- # pcor.test is free and comes with ABSOLUTELY NO WARRANTY.
- #
- # x and y should be vectors
- #
- # z can be either a vector or a matrix
- #
- # use: There are two methods to calculate the partial correlation coefficient.
- # One is by using variance-covariance matrix ("mat") and the other is by using recursive formula ("rec").
- # Default is "mat".
- #
- # method: There are three ways to calculate the correlation coefficient,
- # which are Pearson's ("p"), Spearman's ("s"), and Kendall's ("k") methods.
- # The last two methods which are Spearman's and Kendall's coefficient are based on the non-parametric analysis.
- # Default is "p".
- #
- # na.rm: If na.rm is T, then all the missing samples are deleted from the whole dataset, which is (x,y,z).
- # If not, the missing samples will be removed just when the correlation coefficient is calculated.
- # However, the number of samples for the p-value is the number of samples after removing
- # all the missing samples from the whole dataset.
- # Default is "T".
-
- x <- c(x)
- y <- c(y)
- z <- as.data.frame(z)
-
- if(use == "mat"){
- p.use <- "Var-Cov matrix"
- pcor = pcor.mat(x,y,z,method=method,na.rm=na.rm)
- }else if(use == "rec"){
- p.use <- "Recursive formula"
- pcor = pcor.rec(x,y,z,method=method,na.rm=na.rm)
- }else{
- stop("use should be either rec or mat!\n")
- }
-
- # print the method
- if(gregexpr("p",method)[[1]][1] == 1){
- p.method <- "Pearson"
- }else if(gregexpr("s",method)[[1]][1] == 1){
- p.method <- "Spearman"
- }else if(gregexpr("k",method)[[1]][1] == 1){
- p.method <- "Kendall"
- }else{
- stop("method should be pearson or spearman or kendall!\n")
- }
-
- # sample number
- n <- dim(na.omit(data.frame(x,y,z)))[1]
-
- # given variables' number
- gn <- dim(z)[2]
-
- # p-value
- if(p.method == "Kendall"){
- statistic <- pcor/sqrt(2*(2*(n-gn)+5)/(9*(n-gn)*(n-1-gn)))
- p.value <- 2*pnorm(-abs(statistic))
-
- }else{
- statistic <- pcor*sqrt((n-2-gn)/(1-pcor^2))
- p.value <- 2*pnorm(-abs(statistic))
- }
-
- data.frame(estimate=pcor,p.value=p.value,statistic=statistic,n=n,gn=gn,Method=p.method,Use=p.use)
-}
-
-# By using var-cov matrix
-pcor.mat <- function(x,y,z,method="p",na.rm=T){
-
- x <- c(x)
- y <- c(y)
- z <- as.data.frame(z)
-
- if(dim(z)[2] == 0){
- stop("There should be given data\n")
- }
-
- data <- data.frame(x,y,z)
-
- if(na.rm == T){
- data = na.omit(data)
- }
-
- xdata <- na.omit(data.frame(data[,c(1,2)]))
- Sxx <- cov(xdata,xdata,m=method)
-
- xzdata <- na.omit(data)
- xdata <- data.frame(xzdata[,c(1,2)])
- zdata <- data.frame(xzdata[,-c(1,2)])
- Sxz <- cov(xdata,zdata,m=method)
-
- zdata <- na.omit(data.frame(data[,-c(1,2)]))
- Szz <- cov(zdata,zdata,m=method)
-
- # is Szz positive definite?
- zz.ev <- eigen(Szz)$values
- if(min(zz.ev)[1]<0){
- stop("\'Szz\' is not positive definite!\n")
- }
-
- # partial correlation
- Sxx.z <- Sxx - Sxz %*% solve(Szz) %*% t(Sxz)
-
- rxx.z <- cov2cor(Sxx.z)[1,2]
-
- rxx.z
-}
-
-# By using recursive formula
-pcor.rec <- function(x,y,z,method="p",na.rm=T){
- #
-
- x <- c(x)
- y <- c(y)
- z <- as.data.frame(z)
-
- if(dim(z)[2] == 0){
- stop("There should be given data\n")
- }
-
- data <- data.frame(x,y,z)
-
- if(na.rm == T){
- data = na.omit(data)
- }
-
- # recursive formula
- if(dim(z)[2] == 1){
- tdata <- na.omit(data.frame(data[,1],data[,2]))
- rxy <- cor(tdata[,1],tdata[,2],m=method)
-
- tdata <- na.omit(data.frame(data[,1],data[,-c(1,2)]))
- rxz <- cor(tdata[,1],tdata[,2],m=method)
-
- tdata <- na.omit(data.frame(data[,2],data[,-c(1,2)]))
- ryz <- cor(tdata[,1],tdata[,2],m=method)
-
- rxy.z <- (rxy - rxz*ryz)/( sqrt(1-rxz^2)*sqrt(1-ryz^2) )
-
- return(rxy.z)
- }else{
- x <- c(data[,1])
- y <- c(data[,2])
- z0 <- c(data[,3])
- zc <- as.data.frame(data[,-c(1,2,3)])
-
- rxy.zc <- pcor.rec(x,y,zc,method=method,na.rm=na.rm)
- rxz0.zc <- pcor.rec(x,z0,zc,method=method,na.rm=na.rm)
- ryz0.zc <- pcor.rec(y,z0,zc,method=method,na.rm=na.rm)
-
- rxy.z <- (rxy.zc - rxz0.zc*ryz0.zc)/( sqrt(1-rxz0.zc^2)*sqrt(1-ryz0.zc^2) )
- return(rxy.z)
- }
-}
-""")
-
- R_pcorr_function = rpy2.robjects.r['pcor.test']
- R_corr_test = rpy2.robjects.r['cor.test']
-
- primary = rpy2.robjects.FloatVector(range(len(primaryVal)))
- for i in range(len(primaryVal)):
- primary[i] = primaryVal[i]
-
- control = rpy2.robjects.r.matrix(rpy2.robjects.FloatVector( range(len(controlVals)*len(controlVals[0])) ), ncol=len(controlVals))
- for i in range(len(controlVals)):
- for j in range(len(controlVals[0])):
- control[i*len(controlVals[0]) + j] = controlVals[i][j]
-
- allcorrelations = []
-
- for targetIndex, oneTargetVals in enumerate(targetVals):
-
- this_primary = None
- this_control = None
- this_target = None
-
- if None in oneTargetVals:
-
- goodIndex = []
- for i in range(len(oneTargetVals)):
- if oneTargetVals[i] != None:
- goodIndex.append(i)
-
- this_primary = rpy2.robjects.FloatVector(range(len(goodIndex)))
- for i in range(len(goodIndex)):
- this_primary[i] = primaryVal[goodIndex[i]]
-
- this_control = rpy2.robjects.r.matrix(rpy2.robjects.FloatVector( range(len(controlVals)*len(goodIndex)) ), ncol=len(controlVals))
- for i in range(len(controlVals)):
- for j in range(len(goodIndex)):
- this_control[i*len(goodIndex) + j] = controlVals[i][goodIndex[j]]
-
- this_target = rpy2.robjects.FloatVector(range(len(goodIndex)))
- for i in range(len(goodIndex)):
- this_target[i] = oneTargetVals[goodIndex[i]]
-
- else:
- this_primary = primary
- this_control = control
- this_target = rpy2.robjects.FloatVector(range(len(oneTargetVals)))
- for i in range(len(oneTargetVals)):
- this_target[i] = oneTargetVals[i]
-
- one_name = targetNames[targetIndex]
- one_N = len(this_primary)
-
- #calculate partial correlation
- one_pc_coefficient = 'NA'
- one_pc_p = 1
-
- try:
- if method == 's':
- result = R_pcorr_function(this_primary, this_target, this_control, method='s')
- else:
- result = R_pcorr_function(this_primary, this_target, this_control)
-
- #XZ: In very few cases, the returned coefficient is nan.
- #XZ: One way to detect nan is to compare the number to itself. NaN is always != NaN
- if result[0][0] == result[0][0]:
- one_pc_coefficient = result[0][0]
- #XZ: when the coefficient value is 1 (primary trait and target trait are the same),
- #XZ: occationally, the returned p value is nan instead of 0.
- if result[1][0] == result[1][0]:
- one_pc_p = result[1][0]
- elif abs(one_pc_coefficient - 1) < 0.0000001:
- one_pc_p = 0
- except:
- pass
-
- #calculate zero order correlation
- one_corr_coefficient = 0
- one_corr_p = 1
-
- try:
- if method == 's':
- R_result = R_corr_test(this_primary, this_target, method='spearman')
- else:
- R_result = R_corr_test(this_primary, this_target)
-
- one_corr_coefficient = R_result[3][0]
- one_corr_p = R_result[2][0]
- except:
- pass
-
- traitinfo = [ one_name, one_N, one_pc_coefficient, one_pc_p, one_corr_coefficient, one_corr_p ]
-
- allcorrelations.append(traitinfo)
-
- return allcorrelations
- #End of function compute_partial
-
-
- allcorrelations = []
-
- target_trait_number = len(targetVals)
-
- if target_trait_number < 1000:
- allcorrelations = compute_partial ( primaryVal, controlVals, targetVals, targetNames, method )
- else:
- step = 1000
- job_number = math.ceil( float(target_trait_number)/step )
-
- job_targetVals_lists = []
- job_targetNames_lists = []
-
- for job_index in range( int(job_number) ):
- starti = job_index*step
- endi = min((job_index+1)*step, target_trait_number)
-
- one_job_targetVals_list = []
- one_job_targetNames_list = []
-
- for i in range( starti, endi ):
- one_job_targetVals_list.append( targetVals[i] )
- one_job_targetNames_list.append( targetNames[i] )
-
- job_targetVals_lists.append( one_job_targetVals_list )
- job_targetNames_lists.append( one_job_targetNames_list )
-
- ppservers = ()
- # Creates jobserver with automatically detected number of workers
- job_server = pp.Server(ppservers=ppservers)
-
- jobs = []
- results = []
-
- for i, one_job_targetVals_list in enumerate( job_targetVals_lists ):
- one_job_targetNames_list = job_targetNames_lists[i]
- #pay attention to modules from outside
- jobs.append( job_server.submit(func=compute_partial, args=( primaryVal, controlVals, one_job_targetVals_list, one_job_targetNames_list, method), depfuncs=(), modules=("rpy2.robjects",)) )
-
- for one_job in jobs:
- one_result = one_job()
- results.append( one_result )
-
- for one_result in results:
- for one_traitinfo in one_result:
- allcorrelations.append( one_traitinfo )
-
- return allcorrelations
-
-
-
-#XZ, April 30, 2010: The input primaryTrait and targetTrait are instance of webqtlTrait
-#XZ: The primaryTrait and targetTrait should have executed retrieveData function
-def calZeroOrderCorr(primaryTrait, targetTrait, method='pearson'):
-
- #primaryTrait.retrieveData()
-
- #there is no None value in primary_val
- primary_strain, primary_val, primary_var = primaryTrait.exportInformative()
-
- #targetTrait.retrieveData()
-
- #there might be None value in target_val
- target_val = targetTrait.exportData(primary_strain, type="val")
-
- R_primary = rpy2.robjects.FloatVector(range(len(primary_val)))
- for i in range(len(primary_val)):
- R_primary[i] = primary_val[i]
-
- N = len(target_val)
-
- if None in target_val:
- goodIndex = []
- for i in range(len(target_val)):
- if target_val[i] != None:
- goodIndex.append(i)
-
- N = len(goodIndex)
-
- R_primary = rpy2.robjects.FloatVector(range(len(goodIndex)))
- for i in range(len(goodIndex)):
- R_primary[i] = primary_val[goodIndex[i]]
-
- R_target = rpy2.robjects.FloatVector(range(len(goodIndex)))
- for i in range(len(goodIndex)):
- R_target[i] = target_val[goodIndex[i]]
-
- else:
- R_target = rpy2.robjects.FloatVector(range(len(target_val)))
- for i in range(len(target_val)):
- R_target[i] = target_val[i]
-
- R_corr_test = rpy2.robjects.r['cor.test']
-
- if method == 'spearman':
- R_result = R_corr_test(R_primary, R_target, method='spearman')
- else:
- R_result = R_corr_test(R_primary, R_target)
-
- corr_result = []
- corr_result.append( R_result[3][0] )
- corr_result.append( N )
- corr_result.append( R_result[2][0] )
-
- return corr_result
#####################################################################################
#Input: primaryValue(list): one list of expression values of one probeSet,
@@ -585,170 +73,6 @@ def cal_zero_order_corr_for_tiss (primaryValue=[], targetValue=[], method='pears
return corr_result
-
-
-def batchCalTissueCorr(primaryTraitValue=[], SymbolValueDict={}, method='pearson'):
-
- def cal_tissue_corr(primaryTraitValue, oneSymbolValueDict, method ):
-
- oneSymbolCorrDict = {}
- oneSymbolPvalueDict = {}
-
- R_corr_test = rpy2.robjects.r['cor.test']
-
- R_primary = rpy2.robjects.FloatVector(range(len(primaryTraitValue)))
-
- for i in range(len(primaryTraitValue)):
- R_primary[i] = primaryTraitValue[i]
-
- for (oneTraitSymbol, oneTraitValue) in oneSymbolValueDict.iteritems():
- R_target = rpy2.robjects.FloatVector(range(len(oneTraitValue)))
- for i in range(len(oneTraitValue)):
- R_target[i] = oneTraitValue[i]
-
- if method =='spearman':
- R_result = R_corr_test(R_primary, R_target, method='spearman')
- else:
- R_result = R_corr_test(R_primary, R_target)
-
- oneSymbolCorrDict[oneTraitSymbol] = R_result[3][0]
- oneSymbolPvalueDict[oneTraitSymbol] = R_result[2][0]
-
- return(oneSymbolCorrDict, oneSymbolPvalueDict)
-
-
-
- symbolCorrDict = {}
- symbolPvalueDict = {}
-
- items_number = len(SymbolValueDict)
-
- if items_number <= 1000:
- symbolCorrDict, symbolPvalueDict = cal_tissue_corr(primaryTraitValue, SymbolValueDict, method)
- else:
- items_list = SymbolValueDict.items()
-
- step = 1000
- job_number = math.ceil( float(items_number)/step )
-
- job_oneSymbolValueDict_list = []
-
- for job_index in range( int(job_number) ):
- starti = job_index*step
- endi = min((job_index+1)*step, items_number)
-
- oneSymbolValueDict = {}
-
- for i in range( starti, endi ):
- one_item = items_list[i]
- one_symbol = one_item[0]
- one_value = one_item[1]
- oneSymbolValueDict[one_symbol] = one_value
-
- job_oneSymbolValueDict_list.append( oneSymbolValueDict )
-
-
- ppservers = ()
- # Creates jobserver with automatically detected number of workers
- job_server = pp.Server(ppservers=ppservers)
-
- jobs = []
- results = []
-
- for i, oneSymbolValueDict in enumerate( job_oneSymbolValueDict_list ):
-
- #pay attention to modules from outside
- jobs.append( job_server.submit(func=cal_tissue_corr, args=(primaryTraitValue, oneSymbolValueDict, method), depfuncs=(), modules=("rpy2.robjects",)) )
-
- for one_job in jobs:
- one_result = one_job()
- results.append( one_result )
-
- for one_result in results:
- oneSymbolCorrDict, oneSymbolPvalueDict = one_result
- symbolCorrDict.update( oneSymbolCorrDict )
- symbolPvalueDict.update( oneSymbolPvalueDict )
-
- return (symbolCorrDict, symbolPvalueDict)
-
-###########################################################################
-#Input: cursor, GeneNameLst (list), TissueProbeSetFreezeId
-#output: geneIdDict,dataIdDict,ChrDict,MbDict,descDict,pTargetDescDict (Dict)
-#function: get multi dicts for short and long label functions, and for getSymbolValuePairDict and
-# getGeneSymbolTissueValueDict to build dict to get CorrPvArray
-#Note: If there are multiple probesets for one gene, select the one with highest mean.
-###########################################################################
-def getTissueProbeSetXRefInfo(GeneNameLst=[],TissueProbeSetFreezeId=0):
- Symbols =""
- symbolList =[]
- geneIdDict ={}
- dataIdDict = {}
- ChrDict = {}
- MbDict = {}
- descDict = {}
- pTargetDescDict = {}
-
- count = len(GeneNameLst)
-
- # Added by NL 01/06/2011
- # Note that:inner join is necessary in this query to get distinct record in one symbol group with highest mean value
- # Duo to the limit size of TissueProbeSetFreezeId table in DB, performance of inner join is acceptable.
- if count==0:
- query='''
- select t.Symbol,t.GeneId, t.DataId,t.Chr, t.Mb,t.description,t.Probe_Target_Description
- from (
- select Symbol, max(Mean) as maxmean
- from TissueProbeSetXRef
- where TissueProbeSetFreezeId=%s and Symbol!='' and Symbol Is Not Null group by Symbol)
- as x inner join TissueProbeSetXRef as t on t.Symbol = x.Symbol and t.Mean = x.maxmean;
- '''%TissueProbeSetFreezeId
-
- else:
- for i, item in enumerate(GeneNameLst):
-
- if i == count-1:
- Symbols += "'%s'" %item
- else:
- Symbols += "'%s'," %item
-
- Symbols = "("+ Symbols+")"
- query='''
- select t.Symbol,t.GeneId, t.DataId,t.Chr, t.Mb,t.description,t.Probe_Target_Description
- from (
- select Symbol, max(Mean) as maxmean
- from TissueProbeSetXRef
- where TissueProbeSetFreezeId=%s and Symbol in %s group by Symbol)
- as x inner join TissueProbeSetXRef as t on t.Symbol = x.Symbol and t.Mean = x.maxmean;
- '''% (TissueProbeSetFreezeId,Symbols)
-
- try:
- cursor.execute(query)
- results =cursor.fetchall()
- resultCount = len(results)
- # Key in all dicts is the lower-cased symbol
- for i, item in enumerate(results):
- symbol = item[0]
- symbolList.append(symbol)
-
- key =symbol.lower()
- geneIdDict[key]=item[1]
- dataIdDict[key]=item[2]
- ChrDict[key]=item[3]
- MbDict[key]=item[4]
- descDict[key]=item[5]
- pTargetDescDict[key]=item[6]
-
- except:
- symbolList = None
- geneIdDict=None
- dataIdDict=None
- ChrDict=None
- MbDict=None
- descDict=None
- pTargetDescDict=None
-
- return symbolList,geneIdDict,dataIdDict,ChrDict,MbDict,descDict,pTargetDescDict
-
###########################################################################
#Input: cursor, symbolList (list), dataIdDict(Dict)
#output: symbolValuepairDict (dictionary):one dictionary of Symbol and Value Pair,
@@ -757,7 +81,6 @@ def getTissueProbeSetXRefInfo(GeneNameLst=[],TissueProbeSetFreezeId=0):
#Attention! All keys are lower case!
###########################################################################
def get_symbol_value_pairs(tissue_data):
-
id_list = [tissue_data[symbol.lower()].data_id for item in tissue_data]
symbol_value_pairs = {}
@@ -775,23 +98,6 @@ def get_symbol_value_pairs(tissue_data):
except:
symbol_value_pairs[symbol] = None
- #for symbol in symbol_list:
- # if tissue_data.has_key(symbol):
- # data_id = tissue_data[symbol].data_id
- #
- # query = """select value, id
- # from TissueProbeSetData
- # where Id={}""".format(escape(data_id))
- # try :
- # results = g.db.execute(query).fetchall()
- # for item in results:
- # item = item[0]
- # value_list.append(item)
- # symbol_value_pairs[symbol] = value_list
- # value_list=[]
- # except:
- # symbol_value_pairs[symbol] = None
-
return symbol_value_pairs
@@ -808,150 +114,4 @@ def get_trait_symbol_and_tissue_values(symbol_list=None):
tissue_data = MrnaAssayTissueData(gene_symbols=symbol_list)
if len(tissue_data.gene_symbols):
- return tissue_data.get_symbol_values_pairs()
-
- #symbolList,
- #geneIdDict,
- #dataIdDict,
- #ChrDict,
- #MbDict,
- #descDict,
- #pTargetDescDict = getTissueProbeSetXRefInfo(
- # GeneNameLst=GeneNameLst,TissueProbeSetFreezeId=TissueProbeSetFreezeId)
-
- #limit_num=1000
- #count = len(symbol_list)
- #
- #symbol_value_pairs = {}
- #
- #if count !=0 and count <= limit_num:
- # symbol_value_pairs = getSymbolValuePairDict(cursor=cursor,symbolList=symbol_list,dataIdDict=dataIdDict)
- #
- #elif count > limit_num:
- # n = count/limit_num
- # start = 0
- # stop = 0
- #
- # for i in range(n):
- # stop =limit_num*(i+1)
- # gList1 = symbolList[start:stop]
- # PairDict1 = getSymbolValuePairDict(cursor=cursor,symbolList=gList1,dataIdDict=dataIdDict)
- # start =limit_num*(i+1)
- #
- # SymbolValuePairDict.update(PairDict1)
- #
- # if stop < count:
- # stop = count
- # gList2 = symbolList[start:stop]
- # PairDict2 = getSymbolValuePairDict(cursor=cursor,symbolList=gList2,dataIdDict=dataIdDict)
- # SymbolValuePairDict.update(PairDict2)
- #
- #return SymbolValuePairDict
-
-########################################################################################################
-#input: cursor, GeneNameLst (list), TissueProbeSetFreezeId(int)
-#output: SymbolValuePairDict(dictionary):one dictionary of Symbol and Value Pair.
-# key is symbol, value is one list of expression values of one probeSet.
-#function: wrapper function of getGeneSymbolTissueValueDict function
-# for CorrelationPage.py
-########################################################################################################
-
-#def get_trait_symbol_and_tissue_values(cursor=None,GeneNameLst=[],TissueProbeSetFreezeId=0):
-# SymbolValuePairDict={}
-#
-# symbolList,geneIdDict,dataIdDict,ChrDict,MbDict,descDict,pTargetDescDict = getTissueProbeSetXRefInfo(
-# cursor=cursor,GeneNameLst=GeneNameLst,TissueProbeSetFreezeId=TissueProbeSetFreezeId)
-#
-# if symbolList:
-# SymbolValuePairDict = get_gene_symbol_and_tissue_values(symbolList=symbolList,
-# dataIdDict=dataIdDict)
-#
-# return SymbolValuePairDict
-
-########################################################################################################
-#Input: cursor(cursor): MySQL connnection cursor;
-# priGeneSymbolList(list): one list of gene symbol;
-# symbolValuepairDict(dictionary): one dictionary of Symbol and Value Pair,
-# key is symbol, value is one list of expression values of one probeSet;
-#Output: corrArray(array): array of Correlation Value,
-# pvArray(array): array of PValue;
-#Function: build corrArray, pvArray for display by calling calculation function:calZeroOrderCorrForTiss
-########################################################################################################
-
-def getCorrPvArray(cursor=None,priGeneSymbolList=[],symbolValuepairDict={}):
- # setting initial value for corrArray, pvArray equal to 0
- Num = len(priGeneSymbolList)
-
- corrArray = [([0] * (Num))[:] for i in range(Num)]
- pvArray = [([0] * (Num))[:] for i in range(Num)]
- i = 0
- for pkey in priGeneSymbolList:
- j = 0
- pkey = pkey.strip().lower()# key in symbolValuepairDict is low case
- if symbolValuepairDict.has_key(pkey):
- priValue = symbolValuepairDict[pkey]
- for tkey in priGeneSymbolList:
- tkey = tkey.strip().lower()# key in symbolValuepairDict is low case
- if priValue and symbolValuepairDict.has_key(tkey):
- tarValue = symbolValuepairDict[tkey]
-
- if tarValue:
- if i>j:
- # corrArray stores Pearson Correlation values
- # pvArray stores Pearson P-Values
- pcorr_result =calZeroOrderCorrForTiss(primaryValue=priValue,targetValue=tarValue)
- corrArray[i][j] =pcorr_result[0]
- pvArray[i][j] =pcorr_result[2]
- elif i<j:
- # corrArray stores Spearman Correlation values
- # pvArray stores Spearman P-Values
- scorr_result =calZeroOrderCorrForTiss(primaryValue=priValue,targetValue=tarValue,method='spearman')
- corrArray[i][j] =scorr_result[0]
- pvArray[i][j] =scorr_result[2]
- else:
- # on the diagonal line, correlation value is 1, P-Values is 0
- corrArray[i][j] =1
- pvArray[i][j] =0
- j+=1
- else:
- corrArray[i][j] = None
- pvArray[i][j] = None
- j+=1
- else:
- corrArray[i][j] = None
- pvArray[i][j] = None
- j+=1
- else:
- corrArray[i][j] = None
- pvArray[i][j] = None
-
- i+=1
-
- return corrArray, pvArray
-
-########################################################################################################
-#Input: cursor(cursor): MySQL connnection cursor;
-# primaryTraitSymbol(string): one gene symbol;
-# TissueProbeSetFreezeId (int): Id of related TissueProbeSetFreeze
-# method: '0' default value, Pearson Correlation; '1', Spearman Correlation
-#Output: symbolCorrDict(Dict): Dict of Correlation Value, key is symbol
-# symbolPvalueDict(Dict): Dict of PValue,key is symbol ;
-#Function: build symbolCorrDict, symbolPvalueDict for display by calling calculation function:calZeroOrderCorrForTiss
-########################################################################################################
-def calculateCorrOfAllTissueTrait(cursor=None, primaryTraitSymbol=None, TissueProbeSetFreezeId=None,method='0'):
-
- symbolCorrDict = {}
- symbolPvalueDict = {}
-
- primaryTraitSymbolValueDict = getGeneSymbolTissueValueDictForTrait(cursor=cursor, GeneNameLst=[primaryTraitSymbol], TissueProbeSetFreezeId=TissueProbeSetFreezeId)
- primaryTraitValue = primaryTraitSymbolValueDict.values()[0]
-
- SymbolValueDict = getGeneSymbolTissueValueDictForTrait(cursor=cursor, GeneNameLst=[], TissueProbeSetFreezeId=TissueProbeSetFreezeId)
-
- if method =='1':
- symbolCorrDict, symbolPvalueDict = batchCalTissueCorr(primaryTraitValue,SymbolValueDict,method='spearman')
- else:
- symbolCorrDict, symbolPvalueDict = batchCalTissueCorr(primaryTraitValue,SymbolValueDict)
-
-
- return (symbolCorrDict, symbolPvalueDict)
+ return tissue_data.get_symbol_values_pairs() \ No newline at end of file
diff --git a/wqflask/wqflask/correlation/show_corr_results.py b/wqflask/wqflask/correlation/show_corr_results.py
index cc21d1bf..cc74c8e4 100644
--- a/wqflask/wqflask/correlation/show_corr_results.py
+++ b/wqflask/wqflask/correlation/show_corr_results.py
@@ -21,9 +21,7 @@
from __future__ import absolute_import, print_function, division
import sys
-# sys.path.append(".") Never in a running webserver
-import gc
import string
import cPickle
import os
@@ -32,12 +30,18 @@ import pp
import math
import collections
import resource
+import json
import scipy
+import numpy
+import rpy2.robjects as ro # R Objects
+import rpy2.rinterface as ri
+
+from rpy2.robjects.packages import importr
+utils = importr("utils")
from pprint import pformat as pf
-from htmlgen import HTMLgen2 as HT
import reaper
from base import webqtlConfig
@@ -45,12 +49,13 @@ from utility.THCell import THCell
from utility.TDCell import TDCell
from base.trait import GeneralTrait
from base import data_set
-from utility import webqtlUtil, helper_functions, corr_result_helpers
+from utility import webqtlUtil, helper_functions, corr_result_helpers, hmac
from db import webqtlDatabaseFunction
import utility.webqtlUtil #this is for parallel computing only.
from wqflask.correlation import correlation_functions
from utility.benchmark import Bench
import utility.webqtlUtil
+from utility.type_checking import is_float, is_int, is_str, get_float, get_int, get_string
from MySQLdb import escape_string as escape
@@ -58,8 +63,9 @@ from pprint import pformat as pf
from flask import Flask, g
-METHOD_SAMPLE_PEARSON = "1"
-METHOD_SAMPLE_RANK = "2"
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
METHOD_LIT = "3"
METHOD_TISSUE_PEARSON = "4"
METHOD_TISSUE_RANK = "5"
@@ -68,64 +74,55 @@ TISSUE_METHODS = [METHOD_TISSUE_PEARSON, METHOD_TISSUE_RANK]
TISSUE_MOUSE_DB = 1
-def print_mem(stage=""):
- mem = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss
- #print("{}: {}".format(stage, mem/1024))
-
-
-class AuthException(Exception):
- pass
-
class CorrelationResults(object):
-
- corr_min_informative = 4
-
- #PAGE_HEADING = "Correlation Table"
- #CORRELATION_METHODS = {"1" : "Genetic Correlation (Pearson's r)",
- # "2" : "Genetic Correlation (Spearman's rho)",
- # "3" : "SGO Literature Correlation",
- # "4" : "Tissue Correlation (Pearson's r)",
- # "5" : "Tissue Correlation (Spearman's rho)"}
- #
- #RANK_ORDERS = {"1": 0, "2": 1, "3": 0, "4": 0, "5": 1}
-
def __init__(self, start_vars):
# get trait list from db (database name)
# calculate correlation with Base vector and targets
- print("TESTING...")
+ # Check parameters
+ assert('corr_type' in start_vars)
+ assert(is_str(start_vars['corr_type']))
+ assert('dataset' in start_vars)
+ # assert('group' in start_vars) permitted to be empty?
+ assert('corr_sample_method' in start_vars)
+ assert('corr_samples_group' in start_vars)
+ assert('corr_dataset' in start_vars)
+ #assert('min_expr' in start_vars)
+ assert('corr_return_results' in start_vars)
+ if 'loc_chr' in start_vars:
+ assert('min_loc_mb' in start_vars)
+ assert('max_loc_mb' in start_vars)
with Bench("Doing correlations"):
- helper_functions.get_species_dataset_trait(self, start_vars)
+ if start_vars['dataset'] == "Temp":
+ self.dataset = data_set.create_dataset(dataset_name = "Temp", dataset_type = "Temp", group_name = start_vars['group'])
+ self.trait_id = start_vars['trait_id']
+ self.this_trait = GeneralTrait(dataset=self.dataset,
+ name=self.trait_id,
+ cellid=None)
+ else:
+ helper_functions.get_species_dataset_trait(self, start_vars)
- self.dataset.group.read_genotype_file()
+ #self.dataset.group.read_genotype_file()
corr_samples_group = start_vars['corr_samples_group']
self.sample_data = {}
self.corr_type = start_vars['corr_type']
self.corr_method = start_vars['corr_sample_method']
- if 'min_expr' in start_vars:
- if start_vars['min_expr'] != "":
- self.min_expr = float(start_vars['min_expr'])
- else:
- self.min_expr = None
- self.p_range_lower = float(start_vars['p_range_lower'])
- self.p_range_upper = float(start_vars['p_range_upper'])
+ self.min_expr = get_float(start_vars,'min_expr')
+ self.p_range_lower = get_float(start_vars,'p_range_lower',-1.0)
+ self.p_range_upper = get_float(start_vars,'p_range_upper',1.0)
if ('loc_chr' in start_vars and
'min_loc_mb' in start_vars and
'max_loc_mb' in start_vars):
- self.location_chr = start_vars['loc_chr']
- if start_vars['min_loc_mb'].isdigit():
- self.min_location_mb = start_vars['min_loc_mb']
- else:
- self.min_location_mb = None
- if start_vars['max_loc_mb'].isdigit():
- self.max_location_mb = start_vars['max_loc_mb']
- else:
- self.max_location_mb = None
+ self.location_chr = get_string(start_vars,'loc_chr')
+ self.min_location_mb = get_int(start_vars,'min_loc_mb')
+ self.max_location_mb = get_int(start_vars,'max_loc_mb')
+ else:
+ self.location_chr = self.min_location_mb = self.max_location_mb = None
self.get_formatted_corr_type()
self.return_number = int(start_vars['corr_return_results'])
@@ -153,16 +150,21 @@ class CorrelationResults(object):
self.process_samples(start_vars, self.this_trait.data.keys(), primary_samples)
self.target_dataset = data_set.create_dataset(start_vars['corr_dataset'])
- # print("self.sample_data.keys: %s" % self.sample_data.keys)
self.target_dataset.get_trait_data(self.sample_data.keys())
+ self.header_fields = get_header_fields(self.target_dataset.type, self.corr_method)
+
+ if self.target_dataset.type == "ProbeSet":
+ self.filter_cols = [7, 6]
+ elif self.target_dataset.type == "Publish":
+ self.filter_cols = [6, 0]
+ else:
+ self.filter_cols = [4, 0]
+
self.correlation_results = []
self.correlation_data = {}
- db_filename = self.getFileName(target_db_name = self.target_dataset.name)
- cache_available = db_filename in os.listdir(webqtlConfig.GENERATED_TEXT_DIR)
-
if self.corr_type == "tissue":
self.trait_symbol_dict = self.dataset.retrieve_genes("Symbol")
@@ -173,7 +175,7 @@ class CorrelationResults(object):
else:
for trait, values in self.target_dataset.trait_data.iteritems():
self.get_sample_r_and_p_values(trait, values)
-
+
elif self.corr_type == "lit":
self.trait_geneid_dict = self.dataset.retrieve_genes("GeneId")
lit_corr_data = self.do_lit_correlation_for_all_traits()
@@ -182,36 +184,19 @@ class CorrelationResults(object):
self.get_sample_r_and_p_values(trait, self.target_dataset.trait_data[trait])
elif self.corr_type == "sample":
- if self.dataset.type == "ProbeSet" and cache_available:
- dataset_file = open(webqtlConfig.GENERATED_TEXT_DIR+db_filename,'r')
-
- #XZ, 01/08/2009: read the first line
- line = dataset_file.readline()
- dataset_strains = webqtlUtil.readLineCSV(line)[1:]
-
- self.this_trait_vals = []
- for item in dataset_strains:
- if item in self.sample_data:
- self.this_trait_vals.append(self.sample_data[item])
- else:
- self.this_trait_vals.append("None")
- num_overlap = len(self.this_trait_vals)
-
- self.do_parallel_correlation(db_filename, num_overlap)
- else:
- for trait, values in self.target_dataset.trait_data.iteritems():
- self.get_sample_r_and_p_values(trait, values)
-
- self.correlation_data = collections.OrderedDict(sorted(self.correlation_data.items(),
- key=lambda t: -abs(t[1][0])))
+ for trait, values in self.target_dataset.trait_data.iteritems():
+ self.get_sample_r_and_p_values(trait, values)
+ self.correlation_data = collections.OrderedDict(sorted(self.correlation_data.items(),
+ key=lambda t: -abs(t[1][0])))
if self.target_dataset.type == "ProbeSet" or self.target_dataset.type == "Geno":
#ZS: Convert min/max chromosome to an int for the location range option
range_chr_as_int = None
for order_id, chr_info in self.dataset.species.chromosomes.chromosomes.iteritems():
- if chr_info.name == self.location_chr:
- range_chr_as_int = order_id
+ if 'loc_chr' in start_vars:
+ if chr_info.name == self.location_chr:
+ range_chr_as_int = order_id
for _trait_counter, trait in enumerate(self.correlation_data.keys()[:self.return_number]):
trait_object = GeneralTrait(dataset=self.target_dataset, name=trait, get_qtl_info=True, get_sample_info=False)
@@ -237,41 +222,20 @@ class CorrelationResults(object):
elif (self.max_location_mb != None) and (float(trait_object.mb) > float(self.max_location_mb)):
continue
- (trait_object.sample_r,
- trait_object.sample_p,
- trait_object.num_overlap) = self.correlation_data[trait]
-
- #Get symbol for trait and call function that gets each tissue value from the database (tables TissueProbeSetXRef,
- #TissueProbeSetData, etc) and calculates the correlation (cal_zero_order_corr_for_tissue in correlation_functions)
-
- # Set some sane defaults
- trait_object.tissue_corr = 0
- trait_object.tissue_pvalue = 0
- trait_object.lit_corr = 0
- if self.corr_type == "tissue" and tissue_corr_data != None:
- trait_object.tissue_corr = tissue_corr_data[trait][1]
- trait_object.tissue_pvalue = tissue_corr_data[trait][2]
- elif self.corr_type == "lit":
- trait_object.lit_corr = lit_corr_data[trait][1]
- self.correlation_results.append(trait_object)
- else:
- (trait_object.sample_r,
- trait_object.sample_p,
- trait_object.num_overlap) = self.correlation_data[trait]
-
- #Get symbol for trait and call function that gets each tissue value from the database (tables TissueProbeSetXRef,
- #TissueProbeSetData, etc) and calculates the correlation (cal_zero_order_corr_for_tissue in correlation_functions)
-
- # Set some sane defaults
- trait_object.tissue_corr = 0
- trait_object.tissue_pvalue = 0
- trait_object.lit_corr = 0
- if self.corr_type == "tissue":
- trait_object.tissue_corr = tissue_corr_data[trait][1]
- trait_object.tissue_pvalue = tissue_corr_data[trait][2]
- elif self.corr_type == "lit":
- trait_object.lit_corr = lit_corr_data[trait][1]
- self.correlation_results.append(trait_object)
+ (trait_object.sample_r,
+ trait_object.sample_p,
+ trait_object.num_overlap) = self.correlation_data[trait]
+
+ # Set some sane defaults
+ trait_object.tissue_corr = 0
+ trait_object.tissue_pvalue = 0
+ trait_object.lit_corr = 0
+ if self.corr_type == "tissue" and tissue_corr_data != None:
+ trait_object.tissue_corr = tissue_corr_data[trait][1]
+ trait_object.tissue_pvalue = tissue_corr_data[trait][2]
+ elif self.corr_type == "lit":
+ trait_object.lit_corr = lit_corr_data[trait][1]
+ self.correlation_results.append(trait_object)
self.target_dataset.get_trait_info(self.correlation_results, self.target_dataset.group.species)
@@ -281,58 +245,7 @@ class CorrelationResults(object):
if self.corr_type != "tissue" and self.dataset.type == "ProbeSet" and self.target_dataset.type == "ProbeSet":
self.do_tissue_correlation_for_trait_list()
- #print("self.correlation_results: ", pf(self.correlation_results))
-
-
- #XZ, 09/18/2008: get all information about the user selected database.
- #target_db_name = fd.corr_dataset
- #self.target_db_name = start_vars['corr_dataset']
-
- # Zach said this is ok
- # Auth if needed
- #try:
- # auth_user_for_db(self.db, self.cursor, self.target_db_name, self.privilege, self.userName)
- #except AuthException as e:
- # detail = [e.message]
- # return self.error(detail)
-
- #XZ, 09/18/2008: filter out the strains that have no value.
- #self.sample_names, vals, vars, N = fd.informativeStrains(sample_list)
-
- #print("samplenames is:", pf(self.sample_names))
- #CF - If less than a minimum number of strains/cases in common, don't calculate anything
- #if len(self.sample_names) < self.corr_min_informative:
- # detail = ['Fewer than %d strain data were entered for %s data set. No calculation of correlation has been attempted.' % (self.corr_min_informative, fd.RISet)]
- # self.error(heading=None, detail=detail)
-
- #correlation_method = self.CORRELATION_METHODS[self.method]
- #rankOrder = self.RANK_ORDERS[self.method]
-
- # CF - Number of results returned
- # Todo: Get rid of self.returnNumber
-
- #self.record_count = 0
-
- #myTrait = get_custom_trait(fd, self.cursor)
-
-
- # We will not get Literature Correlations if there is no GeneId because there is nothing
- # to look against
- #self.geneid = self.this_trait.geneid
-
- # We will not get Tissue Correlations if there is no gene symbol because there is nothing to look against
- #self.trait_symbol = myTrait.symbol
-
-
- #XZ, 12/12/2008: if the species is rat or human, translate the geneid to mouse geneid
- #self.input_trait_mouse_gene_id = self.translateToMouseGeneID(self.dataset.group.species, self.geneid)
-
- #XZ: As of Nov/13/2010, this dataset is 'UTHSC Illumina V6.2 RankInv B6 D2 average CNS GI average (May 08)'
- #self.tissue_probeset_freeze_id = 1
-
- #traitList = self.correlate()
-
- #print("Done doing correlation calculation")
+ self.json_results = generate_corr_json(self.correlation_results, self.this_trait, self.dataset, self.target_dataset)
############################################################################################################################################
@@ -349,6 +262,8 @@ class CorrelationResults(object):
self.formatted_corr_type += "(Pearson's r)"
elif self.corr_method == "spearman":
self.formatted_corr_type += "(Spearman's rho)"
+ elif self.corr_method == "bicor":
+ self.formatted_corr_type += "(Biweight r)"
def do_tissue_correlation_for_trait_list(self, tissue_dataset_id=1):
"""Given a list of correlation results (self.correlation_results), gets the tissue correlation value for each"""
@@ -359,13 +274,6 @@ class CorrelationResults(object):
if self.this_trait.symbol.lower() in primary_trait_tissue_vals_dict:
primary_trait_tissue_values = primary_trait_tissue_vals_dict[self.this_trait.symbol.lower()]
-
- #gene_symbol_list = []
- #
- #for trait in self.correlation_results:
- # if hasattr(trait, 'symbol'):
- # gene_symbol_list.append(trait.symbol)
-
gene_symbol_list = [trait.symbol for trait in self.correlation_results if trait.symbol]
corr_result_tissue_vals_dict= correlation_functions.get_trait_symbol_and_tissue_values(
@@ -382,17 +290,6 @@ class CorrelationResults(object):
trait.tissue_corr = result[0]
trait.tissue_pvalue = result[2]
- # else:
- # trait.tissue_corr = None
- # trait.tissue_pvalue = None
- #else:
- # for trait in self.correlation_results:
- # trait.tissue_corr = None
- # trait.tissue_pvalue = None
-
- #return self.correlation_results
-
-
def do_tissue_correlation_for_all_traits(self, tissue_dataset_id=1):
#Gets tissue expression values for the primary trait
primary_trait_tissue_vals_dict = correlation_functions.get_trait_symbol_and_tissue_values(
@@ -413,7 +310,6 @@ class CorrelationResults(object):
for trait, symbol in self.trait_symbol_dict.iteritems():
if symbol and symbol.lower() in corr_result_tissue_vals_dict:
this_trait_tissue_values = corr_result_tissue_vals_dict[symbol.lower()]
- #print("this_trait_tissue_values: ", pf(this_trait_tissue_values))
result = correlation_functions.cal_zero_order_corr_for_tiss(primary_trait_tissue_values,
this_trait_tissue_values,
@@ -426,7 +322,6 @@ class CorrelationResults(object):
return tissue_corr_data
-
def do_lit_correlation_for_trait_list(self):
input_trait_mouse_gene_id = self.convert_to_mouse_gene_id(self.dataset.group.species.lower(), self.this_trait.geneid)
@@ -554,244 +449,21 @@ class CorrelationResults(object):
self.this_trait_vals.append(sample_value)
target_vals.append(target_sample_value)
- self.this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(self.this_trait_vals, target_vals)
+ self.this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(self.this_trait_vals, target_vals)
#ZS: 2015 could add biweight correlation, see http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3465711/
- if self.corr_method == 'pearson':
+ if self.corr_method == 'bicor':
+ sample_r, sample_p = do_bicor(self.this_trait_vals, target_vals)
+ elif self.corr_method == 'pearson':
sample_r, sample_p = scipy.stats.pearsonr(self.this_trait_vals, target_vals)
else:
sample_r, sample_p = scipy.stats.spearmanr(self.this_trait_vals, target_vals)
if num_overlap > 5:
- self.correlation_data[trait] = [sample_r, sample_p, num_overlap]
-
-
- """
- correlations = []
-
- #XZ: Use the fast method only for probeset dataset, and this dataset must have been created.
- #XZ: Otherwise, use original method
- #print("Entering correlation")
-
- #db_filename = self.getFileName(target_db_name=self.target_db_name)
- #
- #cache_available = db_filename in os.listdir(webqtlConfig.GENERATED_TEXT_DIR)
-
- # If the cache file exists, do a cached correlation for probeset data
- if self.dataset.type == "ProbeSet":
-# if self.method in [METHOD_SAMPLE_PEARSON, METHOD_SAMPLE_RANK] and cache_available:
-# traits = do_parallel_correlation()
-#
-# else:
-
- traits = self.get_traits(self.vals)
-
- for trait in traits:
- trait.calculate_correlation(vals, self.method)
-
- self.record_count = len(traits) #ZS: This isn't a good way to get this value, so I need to change it later
-
- #XZ, 3/31/2010: Theoretically, we should create one function 'comTissueCorr'
- #to compare each trait by their tissue corr p values.
- #But because the tissue corr p values are generated by permutation test,
- #the top ones always have p value 0. So comparing p values actually does nothing.
- #In addition, for the tissue data in our database, the N is always the same.
- #So it's safe to compare with tissue corr statistic value.
- #That's the same as literature corr.
- #if self.method in [METHOD_LIT, METHOD_TISSUE_PEARSON, METHOD_TISSUE_RANK] and self.gene_id:
- # traits.sort(webqtlUtil.cmpLitCorr)
- #else:
- #if self.method in TISSUE_METHODS:
- # sort(traits, key=lambda A: math.fabs(A.tissue_corr))
- #elif self.method == METHOD_LIT:
- # traits.sort(traits, key=lambda A: math.fabs(A.lit_corr))
- #else:
- traits = sortTraitCorrelations(traits, self.method)
-
- # Strip to the top N correlations
- traits = traits[:min(self.returnNumber, len(traits))]
-
- addLiteratureCorr = False
- addTissueCorr = False
-
- trait_list = []
- for trait in traits:
- db_trait = webqtlTrait(db=self.db, name=trait.name, cursor=self.cursor)
- db_trait.retrieveInfo( QTL='Yes' )
-
- db_trait.Name = trait.name
- db_trait.corr = trait.correlation
- db_trait.nOverlap = trait.overlap
- db_trait.corrPValue = trait.p_value
-
- # NL, 07/19/2010
- # js function changed, add a new parameter rankOrder for js function 'showTissueCorrPlot'
- db_trait.RANK_ORDER = self.RANK_ORDERS[self.method]
-
- #XZ, 26/09/2008: Method is 4 or 5. Have fetched tissue corr, but no literature correlation yet.
- if self.method in TISSUE_METHODS:
- db_trait.tissueCorr = trait.tissue_corr
- db_trait.tissuePValue = trait.p_tissue
- addTissueCorr = True
-
-
- #XZ, 26/09/2008: Method is 3, Have fetched literature corr, but no tissue corr yet.
- elif self.method == METHOD_LIT:
- db_trait.LCorr = trait.lit_corr
- db_trait.mouse_geneid = self.translateToMouseGeneID(self.species, db_trait.geneid)
- addLiteratureCorr = True
-
- #XZ, 26/09/2008: Method is 1 or 2. Have NOT fetched literature corr and tissue corr yet.
- # Phenotype data will not have geneid, and neither will some probes
- # we need to handle this because we will get an attribute error
+ if numpy.isnan(sample_r):
+ pass
else:
- if self.input_trait_mouse_gene_id and self.db.type=="ProbeSet":
- addLiteratureCorr = True
- if self.trait_symbol and self.db.type=="ProbeSet":
- addTissueCorr = True
-
- trait_list.append(db_trait)
-
- if addLiteratureCorr:
- trait_list = self.getLiteratureCorrelationByList(self.input_trait_mouse_gene_id,
- self.species, trait_list)
- if addTissueCorr:
- trait_list = self.getTissueCorrelationByList(
- primaryTraitSymbol = self.trait_symbol,
- traitList = trait_list,
- TissueProbeSetFreezeId = TISSUE_MOUSE_DB,
- method=self.method)
-
- return trait_list
- """
-
-
- def do_tissue_corr_for_all_traits_2(self):
- """Comments Possibly Out of Date!!!!!
-
- Uses get_temp_tissue_corr_table to generate table of tissue correlations
-
- This function then gathers that data and pairs it with the TraitID string.
- Takes as its arguments a formdata instance, and a dataset instance.
- Returns a dictionary of 'TraitID':(tissueCorr, tissuePValue)
- for the requested correlation
-
- Used when the user selects the tissue correlation method; i.e. not for the
- column that is appended to all probeset trait correlation tables
-
- """
-
- # table name string
- temp_table = self.get_temp_tissue_corr_table(tissue_probesetfreeze_id=TISSUE_MOUSE_DB,
- method=method)
-
- query = """SELECT ProbeSet.Name, {}.Correlation, {}.PValue
- FROM (ProbeSet, ProbeSetXRef, ProbeSetFreeze)
- LEFT JOIN {} ON {}.Symbol=ProbeSet.Symbol
- WHERE ProbeSetFreeze.Name = '{}'
- and ProbeSetFreeze.Id=ProbeSetXRef.ProbeSetFreezeId
- and ProbeSet.Id = ProbeSetXRef.ProbeSetId
- and ProbeSet.Symbol IS NOT NULL
- and {}.Correlation IS NOT NULL""".format(dataset.mescape(
- temp_table, temp_table, temp_table, temp_table,
- self.dataset.name, temp_table))
-
- results = g.db.execute(query).fetchall()
-
- tissue_corr_dict = {}
-
- for entry in results:
- trait_name, tissue_corr, tissue_pvalue = entry
- tissue_corr_dict[trait_name] = (tissue_corr, tissue_pvalue)
- #symbolList,
- #geneIdDict,
- #dataIdDict,
- #ChrDict,
- #MbDict,
- #descDict,
- #pTargetDescDict = getTissueProbeSetXRefInfo(
- # GeneNameLst=GeneNameLst,TissueProbeSetFreezeId=TissueProbeSetFreezeId)
-
- g.db.execute('DROP TEMPORARY TABLE {}'.format(escape(temp_table)))
-
- return tissue_corr_dict
-
-
- #XZ, 09/23/2008: In tissue correlation tables, there is no record of GeneId1 == GeneId2
- #XZ, 09/24/2008: Note that the correlation value can be negative.
- def get_temp_tissue_corr_table(self,
- tissue_probesetfreeze_id=0,
- method="",
- return_number=0):
-
-
- def cmp_tisscorr_absolute_value(A, B):
- try:
- if abs(A[1]) < abs(B[1]): return 1
- elif abs(A[1]) == abs(B[1]):
- return 0
- else: return -1
- except:
- return 0
-
- symbol_corr_dict, symbol_pvalue_dict = self.calculate_corr_for_all_tissues(
- tissue_dataset_id=TISSUE_MOUSE_DB)
-
- symbol_corr_list = symbol_corr_dict.items()
-
- symbol_corr_list.sort(cmp_tisscorr_absolute_value)
- symbol_corr_list = symbol_corr_list[0 : 2*return_number]
-
- tmp_table_name = webqtlUtil.genRandStr(prefix="TOPTISSUE")
-
- q1 = 'CREATE TEMPORARY TABLE %s (Symbol varchar(100) PRIMARY KEY, Correlation float, PValue float)' % tmp_table_name
- self.cursor.execute(q1)
-
- for one_pair in symbol_corr_list:
- one_symbol = one_pair[0]
- one_corr = one_pair[1]
- one_p_value = symbol_pvalue_dict[one_symbol]
-
- self.cursor.execute( "INSERT INTO %s (Symbol, Correlation, PValue) VALUES ('%s',%f,%f)" % (tmpTableName, one_symbol, float(one_corr), float(one_p_value)) )
-
- return tmp_table_name
-
-
- def calculate_corr_for_all_tissues(self, tissue_dataset_id=None):
-
- symbol_corr_dict = {}
- symbol_pvalue_dict = {}
-
- primary_trait_symbol_value_dict = correlation_functions.make_gene_tissue_value_dict(
- GeneNameLst=[self.this_trait.symbol],
- TissueProbeSetFreezeId=tissue_dataset_id)
- primary_trait_value = primary_trait_symbol_value_dict.values()[0]
-
- symbol_value_dict = correlation_functions.make_gene_tissue_value_dict(
- gene_name_list=[],
- tissue_dataset_id=tissue_dataset_id)
-
- symbol_corr_dict, symbol_pvalue_dict = correlation_functions.batch_cal_tissue_corr(
- primaryTraitValue,
- SymbolValueDict,
- method=self.corr_method)
- #else:
- # symbol_corr_dict, symbol_pvalue_dict = correlation_functions.batch_cal_tissue_corr(
- # primaryTraitValue,
- # SymbolValueDict)
-
- return (symbolCorrDict, symbolPvalueDict)
-
- ##XZ, 12/16/2008: the input geneid is of mouse type
- #def checkSymbolForTissueCorr(self, tissueProbeSetFreezeId=0, symbol=""):
- # q = "SELECT 1 FROM TissueProbeSetXRef WHERE TissueProbeSetFreezeId=%s and Symbol='%s' LIMIT 1" % (tissueProbeSetFreezeId,symbol)
- # self.cursor.execute(q)
- # try:
- # x = self.cursor.fetchone()
- # if x: return True
- # else: raise
- # except: return False
-
+ self.correlation_data[trait] = [sample_r, sample_p, num_overlap]
def process_samples(self, start_vars, sample_names, excluded_samples=None):
if not excluded_samples:
@@ -805,568 +477,174 @@ class CorrelationResults(object):
if not value.strip().lower() == 'x':
self.sample_data[str(sample)] = float(value)
- ##XZ, 12/16/2008: the input geneid is of mouse type
- #def checkForLitInfo(self,geneId):
- # q = 'SELECT 1 FROM LCorrRamin3 WHERE GeneId1=%s LIMIT 1' % geneId
- # self.cursor.execute(q)
- # try:
- # x = self.cursor.fetchone()
- # if x: return True
- # else: raise
- # except: return False
-
-
-
- def fetchAllDatabaseData(self, species, GeneId, GeneSymbol, strains, db, method, returnNumber, tissueProbeSetFreezeId):
-
- StrainIds = []
- for item in strains:
- self.cursor.execute('''SELECT Strain.Id FROM Strain, Species WHERE Strain.Name="%s" and Strain.SpeciesId=Species.Id and Species.name = "%s" ''' % (item, species))
- Id = self.cursor.fetchone()[0]
- StrainIds.append('%d' % Id)
-
- # break it into smaller chunks so we don't overload the MySql server
- nnn = len(StrainIds) / 25
- if len(StrainIds) % 25:
- nnn += 1
- oridata = []
-
- #XZ, 09/24/2008: build one temporary table that only contains the records associated with the input GeneId
- tempTable = None
- if GeneId and db.type == "ProbeSet":
- if method == "3":
- tempTable = self.getTempLiteratureTable(species=species, input_species_geneid=GeneId, returnNumber=returnNumber)
-
- if method == "4" or method == "5":
- tempTable = self.getTempTissueCorrTable(primaryTraitSymbol=GeneSymbol, TissueProbeSetFreezeId=TISSUE_MOUSE_DB, method=method, returnNumber=returnNumber)
-
- for step in range(nnn):
- temp = []
- StrainIdstep = StrainIds[step*25:min(len(StrainIds), (step+1)*25)]
- for item in StrainIdstep: temp.append('T%s.value' % item)
-
- if db.type == "Publish":
- query = "SELECT PublishXRef.Id, "
- dataStartPos = 1
- query += string.join(temp,', ')
- query += ' FROM (PublishXRef, PublishFreeze)'
- #XZ, 03/04/2009: Xiaodong changed Data to PublishData
- for item in StrainIdstep:
- query += 'left join PublishData as T%s on T%s.Id = PublishXRef.DataId and T%s.StrainId=%s\n' %(item,item,item,item)
- query += "WHERE PublishXRef.InbredSetId = PublishFreeze.InbredSetId and PublishFreeze.Name = '%s'" % (db.name, )
- #XZ, 09/20/2008: extract literature correlation value together with gene expression values.
- #XZ, 09/20/2008: notice the difference between the code in next block.
- #elif tempTable:
- # # we can get a little performance out of selecting our LitCorr here
- # # but also we need to do this because we are unconcerned with probes that have no geneId associated with them
- # # as we would not have litCorr data.
- #
- # if method == "3":
- # query = "SELECT %s.Name, %s.value," % (db.type,tempTable)
- # dataStartPos = 2
- # if method == "4" or method == "5":
- # query = "SELECT %s.Name, %s.Correlation, %s.PValue," % (db.type,tempTable, tempTable)
- # dataStartPos = 3
- #
- # query += string.join(temp,', ')
- # query += ' FROM (%s, %sXRef, %sFreeze)' % (db.type, db.type, db.type)
- # if method == "3":
- # query += ' LEFT JOIN %s ON %s.GeneId2=ProbeSet.GeneId ' % (tempTable,tempTable)
- # if method == "4" or method == "5":
- # query += ' LEFT JOIN %s ON %s.Symbol=ProbeSet.Symbol ' % (tempTable,tempTable)
- # #XZ, 03/04/2009: Xiaodong changed Data to %sData and changed parameters from %(item,item, db.type,item,item) to %(db.type, item,item, db.type,item,item)
- # for item in StrainIdstep:
- # query += 'left join %sData as T%s on T%s.Id = %sXRef.DataId and T%s.StrainId=%s\n' %(db.type, item,item, db.type,item,item)
- #
- # if method == "3":
- # query += "WHERE ProbeSet.GeneId IS NOT NULL AND %s.value IS NOT NULL AND %sXRef.%sFreezeId = %sFreeze.Id and %sFreeze.Name = '%s' and %s.Id = %sXRef.%sId order by %s.Id" % (tempTable,db.type, db.type, db.type, db.type, db.name, db.type, db.type, db.type, db.type)
- # if method == "4" or method == "5":
- # query += "WHERE ProbeSet.Symbol IS NOT NULL AND %s.Correlation IS NOT NULL AND %sXRef.%sFreezeId = %sFreeze.Id and %sFreeze.Name = '%s' and %s.Id = %sXRef.%sId order by %s.Id" % (tempTable,db.type, db.type, db.type, db.type, db.name, db.type, db.type, db.type, db.type)
- else:
- query = "SELECT %s.Name," % db.type
- dataStartPos = 1
- query += string.join(temp,', ')
- query += ' FROM (%s, %sXRef, %sFreeze)' % (db.type, db.type, db.type)
- #XZ, 03/04/2009: Xiaodong changed Data to %sData and changed parameters from %(item,item, db.type,item,item) to %(db.type, item,item, db.type,item,item)
- for item in StrainIdstep:
- query += 'left join %sData as T%s on T%s.Id = %sXRef.DataId and T%s.StrainId=%s\n' %(db.type, item,item, db.type,item,item)
- query += "WHERE %sXRef.%sFreezeId = %sFreeze.Id and %sFreeze.Name = '%s' and %s.Id = %sXRef.%sId order by %s.Id" % (db.type, db.type, db.type, db.type, db.name, db.type, db.type, db.type, db.type)
-
- self.cursor.execute(query)
- results = self.cursor.fetchall()
- oridata.append(results)
-
- datasize = len(oridata[0])
- traits = []
- # put all of the separate data together into a huge list of lists
- for j in range(datasize):
- traitdata = list(oridata[0][j])
- for i in range(1,nnn):
- traitdata += list(oridata[i][j][dataStartPos:])
-
- trait = Trait(traitdata[0], traitdata[dataStartPos:])
-
- if method == METHOD_LIT:
- trait.lit_corr = traitdata[1]
-
- if method in TISSUE_METHODS:
- trait.tissue_corr = traitdata[1]
- trait.p_tissue = traitdata[2]
-
- traits.append(trait)
-
- if tempTable:
- self.cursor.execute( 'DROP TEMPORARY TABLE %s' % tempTable )
-
- return traits
-
-
-
-
- # XZ, 09/20/2008: This function creates TEMPORARY TABLE tmpTableName_2 and return its name.
- # XZ, 09/20/2008: It stores top literature correlation values associated with the input geneId.
- # XZ, 09/20/2008: Attention: In each row, the input geneId is always in column GeneId1.
- #XZ, 12/16/2008: the input geneid can be of mouse, rat or human type
- def getTempLiteratureTable(self, species, input_species_geneid, returnNumber):
- # according to mysql the TEMPORARY TABLE name should not have to be unique because
- # it is only available to the current connection. This program will be invoked via command line, but if it
- # were to be invoked over mod_python this could cuase problems. mod_python will keep the connection alive
- # in its executing threads ( i think) so there is a potential for the table not being dropped between users.
- #XZ, 01/29/2009: To prevent the potential risk, I generate random table names and drop the tables after use them.
-
-
- # the 'input_species_geneid' could be rat or human geneid, need to translate it to mouse geneid
- translated_mouse_geneid = self.translateToMouseGeneID (species, input_species_geneid)
-
- tmpTableName_1 = webqtlUtil.genRandStr(prefix="LITERATURE")
-
- q1 = 'CREATE TEMPORARY TABLE %s (GeneId1 int(12) unsigned, GeneId2 int(12) unsigned PRIMARY KEY, value double)' % tmpTableName_1
- q2 = 'INSERT INTO %s (GeneId1, GeneId2, value) SELECT GeneId1,GeneId2,value FROM LCorrRamin3 WHERE GeneId1=%s' % (tmpTableName_1, translated_mouse_geneid)
- q3 = 'INSERT INTO %s (GeneId1, GeneId2, value) SELECT GeneId2,GeneId1,value FROM LCorrRamin3 WHERE GeneId2=%s AND GeneId1!=%s' % (tmpTableName_1, translated_mouse_geneid,translated_mouse_geneid)
- for x in [q1,q2,q3]: self.cursor.execute(x)
-
- #XZ, 09/23/2008: Just use the top records insteard of using all records
- tmpTableName_2 = webqtlUtil.genRandStr(prefix="TOPLITERATURE")
-
- q1 = 'CREATE TEMPORARY TABLE %s (GeneId1 int(12) unsigned, GeneId2 int(12) unsigned PRIMARY KEY, value double)' % tmpTableName_2
- self.cursor.execute(q1)
- q2 = 'SELECT GeneId1, GeneId2, value FROM %s ORDER BY value DESC' % tmpTableName_1
- self.cursor.execute(q2)
- result = self.cursor.fetchall()
-
- counter = 0 #this is to count how many records being inserted into table
- for one_row in result:
- mouse_geneid1, mouse_geneid2, lit_corr_alue = one_row
-
- #mouse_geneid1 has been tested before, now should test if mouse_geneid2 has corresponding geneid in other species
- translated_species_geneid = 0
- if species == 'mouse':
- translated_species_geneid = mouse_geneid2
- elif species == 'rat':
- self.cursor.execute( "SELECT rat FROM GeneIDXRef WHERE mouse=%d" % int(mouse_geneid2) )
- record = self.cursor.fetchone()
- if record:
- translated_species_geneid = record[0]
- elif species == 'human':
- self.cursor.execute( "SELECT human FROM GeneIDXRef WHERE mouse=%d" % int(mouse_geneid2) )
- record = self.cursor.fetchone()
- if record:
- translated_species_geneid = record[0]
-
- if translated_species_geneid:
- self.cursor.execute( 'INSERT INTO %s (GeneId1, GeneId2, value) VALUES (%d,%d,%f)' % (tmpTableName_2, int(input_species_geneid),int(translated_species_geneid), float(lit_corr_alue)) )
- counter = counter + 1
-
- #pay attention to the number
- if (counter > 2*returnNumber):
- break
-
- self.cursor.execute('DROP TEMPORARY TABLE %s' % tmpTableName_1)
-
- return tmpTableName_2
-
-
-
- #XZ, 01/09/2009: This function was created by David Crowell. Xiaodong cleaned up and modified it.
- def fetchLitCorrelations(self, species, GeneId, db, returnNumber): ### Used to generate Lit Correlations when calculations are done from text file. dcrowell August 2008
- """Uses getTempLiteratureTable to generate table of literatire correlations. This function then gathers that data and
- pairs it with the TraitID string. Takes as its arguments a formdata instance, and a database instance.
- Returns a dictionary of 'TraitID':'LitCorr' for the requested correlation"""
-
- tempTable = self.getTempLiteratureTable(species=species, input_species_geneid=GeneId, returnNumber=returnNumber)
-
- query = "SELECT %s.Name, %s.value" % (db.type,tempTable)
- query += ' FROM (%s, %sXRef, %sFreeze)' % (db.type, db.type, db.type)
- query += ' LEFT JOIN %s ON %s.GeneId2=ProbeSet.GeneId ' % (tempTable,tempTable)
- query += "WHERE ProbeSet.GeneId IS NOT NULL AND %s.value IS NOT NULL AND %sXRef.%sFreezeId = %sFreeze.Id and %sFreeze.Name = '%s' and %s.Id = %sXRef.%sId order by %s.Id" % (tempTable, db.type, db.type, db.type, db.type, db.name, db.type, db.type, db.type, db.type)
-
- self.cursor.execute(query)
- results = self.cursor.fetchall()
-
- litCorrDict = {}
-
- for entry in results:
- traitName,litcorr = entry
- litCorrDict[traitName] = litcorr
-
- self.cursor.execute('DROP TEMPORARY TABLE %s' % tempTable)
-
- return litCorrDict
-
-
- def get_traits(self, vals):
+def do_bicor(this_trait_vals, target_trait_vals):
+ r_library = ro.r["library"] # Map the library function
+ r_options = ro.r["options"] # Map the options function
- #Todo: Redo cached stuff using memcached
- if False:
- lit_corrs = {}
- tissue_corrs = {}
- use_lit = False
- if self.method == METHOD_LIT:
- lit_corrs = self.fetchLitCorrelations(species=self.species, GeneId=self.gene_id, db=self.db, returnNumber=self.returnNumber)
- use_lit = True
-
- use_tissue_corr = False
- if self.method in TISSUE_METHODS:
- tissue_corrs = self.fetch_tissue_correlations(method=self.method, return_number = self.return_number)
- use_tissue_corr = True
+ r_library("WGCNA")
+ r_bicor = ro.r["bicorAndPvalue"] # Map the bicorAndPvalue function
- DatabaseFileName = self.getFileName( target_db_name=self.target_db_name )
- datasetFile = open(webqtlConfig.CACHEDIR+DatabaseFileName,'r')
+ r_options(stringsAsFactors = False)
- #XZ, 01/08/2009: read the first line
- line = datasetFile.readline()
- cached_sample_names = webqtlUtil.readLineCSV(line)[1:]
-
- #XZ, 01/08/2009: This step is critical. It is necessary for this new method.
- #XZ: The original function fetchAllDatabaseData uses all strains stored in variable _strains to
- #XZ: retrieve the values of each strain from database in real time.
- #XZ: The new method uses all strains stored in variable dataset_strains to create a new variable
- #XZ: _newvals. _newvals has the same length as dataset_strains. The items in _newvals is in
- #XZ: the same order of items in dataset_strains. The value of each item in _newvals is either
- #XZ: the value of correspinding strain in _vals or 'None'.
- new_vals = []
- for name in cached_sample_names:
- if name in self.sample_names:
- new_vals.append(float(vals[self.sample_names.index(name)]))
- else:
- new_vals.append('None')
-
- nnCorr = len(new_vals)
-
- #XZ, 01/14/2009: If literature corr or tissue corr is selected,
- #XZ: there is no need to use parallel computing.
+ this_vals = ro.Vector(this_trait_vals)
+ target_vals = ro.Vector(target_trait_vals)
- traits = []
- data_start = 1
- for line in datasetFile:
- raw_trait = webqtlUtil.readLineCSV(line)
- trait = Trait.from_csv(raw_trait, data_start)
- trait.lit_corr = lit_corrs.get(trait.name)
- trait.tissue_corr, trait.p_tissue = tissue_corrs.get(trait.name, (None, None))
- traits.append(trait)
+ the_r, the_p, _fisher_transform, _the_t, _n_obs = [numpy.asarray(x) for x in r_bicor(x = this_vals, y = target_vals)]
- return traits, new_vals
+ return the_r, the_p
+def generate_corr_json(corr_results, this_trait, dataset, target_dataset, for_api = False):
+ results_list = []
+ for i, trait in enumerate(corr_results):
+ results_dict = {}
+ if not for_api:
+ results_dict['checkbox'] = "<INPUT TYPE='checkbox' NAME='searchResult' class='checkbox trait_checkbox' style='padding-right: 0px;' VALUE='" + hmac.hmac_creation('{}:{}'.format(trait.name, trait.dataset.name)) + "'>"
+ results_dict['index'] = i + 1
+ results_dict['trait_id'] = "<a href='/show_trait?trait_id="+str(trait.name)+"&dataset="+str(dataset.name)+"'>"+str(trait.name)+"</a>"
else:
- traits = self.fetchAllDatabaseData(species=self.dataset.species,
- GeneId=self.gene_id,
- GeneSymbol=self.trait.symbol,
- strains=self.sample_names,
- db=self.db,
- method=self.method,
- returnNumber=self.returnNumber,
- tissueProbeSetFreezeId= self.tissue_probeset_freeze_id)
- totalTraits = len(traits) #XZ, 09/18/2008: total trait number
-
- return traits
-
- def calculate_corr_for_all_tissues(self, tissue_dataset_id=None):
-
- symbol_corr_dict = {}
- symbol_pvalue_dict = {}
-
- primary_trait_symbol_value_dict = correlation_functions.make_gene_tissue_value_dict(
- GeneNameLst=[self.this_trait.symbol],
- TissueProbeSetFreezeId=tissue_dataset_id)
- primary_trait_value = primary_trait_symbol_value_dict.values()[0]
-
- symbol_value_dict = correlation_functions.make_gene_tissue_value_dict(
- gene_name_list=[],
- tissue_dataset_id=tissue_dataset_id)
-
- symbol_corr_dict, symbol_pvalue_dict = correlation_functions.batch_cal_tissue_corr(
- primaryTraitValue,
- SymbolValueDict,
- method=self.corr_method)
- #else:
- # symbol_corr_dict, symbol_pvalue_dict = correlation_functions.batch_cal_tissue_corr(
- # primaryTraitValue,
- # SymbolValueDict)
-
- return (symbolCorrDict, symbolPvalueDict)
-
-
- def correlate(self):
- self.correlation_data = collections.defaultdict(list)
- for trait, values in self.target_dataset.trait_data.iteritems():
- values_1 = []
- values_2 = []
- for index,sample in enumerate(self.target_dataset.samplelist):
- target_value = values[index]
- if sample in self.sample_data.keys():
- this_value = self.sample_data[sample]
- values_1.append(this_value)
- values_2.append(target_value)
- correlation = calCorrelation(values_1, values_2)
- self.correlation_data[trait] = correlation
-
- def getFileName(self, target_db_name): ### dcrowell August 2008
- """Returns the name of the reference database file with which correlations are calculated.
- Takes argument cursor which is a cursor object of any instance of a subclass of templatePage
- Used by correlationPage"""
-
- dataset_id = str(self.target_dataset.id)
- dataset_fullname = self.target_dataset.fullname.replace(' ','_')
- dataset_fullname = dataset_fullname.replace('/','_')
-
- FileName = 'ProbeSetFreezeId_' + dataset_id + '_FullName_' + dataset_fullname + '.txt'
-
- return FileName
-
- def do_parallel_correlation(self, db_filename, num_overlap):
-
- #XZ, 01/14/2009: This method is for parallel computing only.
- #XZ: It is supposed to be called when "Genetic Correlation, Pearson's r" (method 1)
- #XZ: or "Genetic Correlation, Spearman's rho" (method 2) is selected
- def compute_corr(input_nnCorr, input_trait, input_list, corr_method):
-
- import math
- import reaper
-
- def calCorrelation(dbdata,userdata,N):
- X = []
- Y = []
- for i in range(N):
- if (dbdata[i] != None and userdata[i] != None) and (dbdata[i] != "None" and userdata[i] != "None"):
- X.append(float(dbdata[i]))
- Y.append(float(userdata[i]))
- NN = len(X)
- if NN <6:
- return (0.0,NN)
- sx = reduce(lambda x,y:x+y,X,0.0)
- sy = reduce(lambda x,y:x+y,Y,0.0)
- meanx = sx/NN
- meany = sy/NN
- xyd = 0.0
- sxd = 0.0
- syd = 0.0
- for i in range(NN):
- xyd += (X[i] - meanx)*(Y[i]-meany)
- sxd += (X[i] - meanx)*(X[i] - meanx)
- syd += (Y[i] - meany)*(Y[i] - meany)
- try:
- corr = xyd/(math.sqrt(sxd)*math.sqrt(syd))
- except:
- corr = 0
- return (corr,NN)
-
- def calCorrelationRank(xVals,yVals,N):
- """
- Calculated Spearman Ranked Correlation. The algorithm works
- by setting all tied ranks to the average of those ranks (for
- example, if ranks 5-10 all have the same value, each will be set
- to rank 7.5).
- """
-
- XX = []
- YY = []
- j = 0
-
- for i in range(len(xVals)):
- if (xVals[i]!= None and yVals[i]!= None) and (xVals[i] != "None" and yVals[i] != "None"):
- XX.append((j,float(xVals[i])))
- YY.append((j,float(yVals[i])))
- j = j+1
-
- NN = len(XX)
- if NN <6:
- return (0.0,NN)
- XX.sort(cmpOrder2)
- YY.sort(cmpOrder2)
- X = [0]*NN
- Y = [0]*NN
-
- j = 1
- rank = 0.0
- t = 0.0
- sx = 0.0
-
- while j < NN:
-
- if XX[j][1] != XX[j-1][1]:
- X[XX[j-1][0]] = j
- j = j+1
-
- else:
- jt = j+1
- ji = j
- for jt in range(j+1, NN):
- if (XX[jt][1] != XX[j-1][1]):
- break
- rank = 0.5*(j+jt)
- for ji in range(j-1, jt):
- X[XX[ji][0]] = rank
- t = jt-j
- sx = sx + (t*t*t-t)
- if (jt == NN-1):
- if (XX[jt][1] == XX[j-1][1]):
- X[XX[NN-1][0]] = rank
- j = jt+1
-
- if j == NN:
- if X[XX[NN-1][0]] == 0:
- X[XX[NN-1][0]] = NN
-
- j = 1
- rank = 0.0
- t = 0.0
- sy = 0.0
-
- while j < NN:
-
- if YY[j][1] != YY[j-1][1]:
- Y[YY[j-1][0]] = j
- j = j+1
- else:
- jt = j+1
- ji = j
- for jt in range(j+1, NN):
- if (YY[jt][1] != YY[j-1][1]):
- break
- rank = 0.5*(j+jt)
- for ji in range(j-1, jt):
- Y[YY[ji][0]] = rank
- t = jt - j
- sy = sy + (t*t*t-t)
- if (jt == NN-1):
- if (YY[jt][1] == YY[j-1][1]):
- Y[YY[NN-1][0]] = rank
- j = jt+1
-
- if j == NN:
- if Y[YY[NN-1][0]] == 0:
- Y[YY[NN-1][0]] = NN
-
- D = 0.0
-
- for i in range(NN):
- D += (X[i]-Y[i])*(X[i]-Y[i])
-
- fac = (1.0 -sx/(NN*NN*NN-NN))*(1.0-sy/(NN*NN*NN-NN))
-
- return ((1-(6.0/(NN*NN*NN-NN))*(D+(sx+sy)/12.0))/math.sqrt(fac),NN)
-
- # allcorrelations = []
-
- correlation_data = {}
- for i, line in enumerate(input_list):
- if i == 0:
- continue
- tokens = line.split('","')
- tokens[-1] = tokens[-1][:-2] #remove the last "
- tokens[0] = tokens[0][1:] #remove the first "
-
- traitdataName = tokens[0]
- database_trait = tokens[1:]
-
- #print("database_trait:", database_trait)
-
- #ZS: 2015 could add biweight correlation, see http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3465711/
- # if corr_method == 'pearson':
- # sample_r, sample_p = scipy.stats.pearsonr(input_trait, database_trait)
- # else:
- # sample_r, sample_p = scipy.stats.spearmanr(input_trait, database_trait)
-
- if corr_method == "pearson": #XZ: Pearson's r
- sample_r, nOverlap = calCorrelation(input_trait, database_trait, input_nnCorr)
- else: #XZ: Spearman's rho
- sample_r, nOverlap = calCorrelationRank(input_trait, database_trait, input_nnCorr)
-
- #XZ: calculate corrPValue
- if nOverlap < 3:
- sample_p = 1.0
+ results_dict['trait_id'] = trait.name
+ if target_dataset.type == "ProbeSet":
+ results_dict['symbol'] = trait.symbol
+ results_dict['description'] = trait.description_display
+ results_dict['location'] = trait.location_repr
+ results_dict['mean'] = float(trait.mean)
+ if trait.LRS_score_repr != "N/A":
+ results_dict['lrs_score'] = "%.1f" % float(trait.LRS_score_repr)
+ else:
+ results_dict['lrs_score'] = "N/A"
+ results_dict['lrs_location'] = trait.LRS_location_repr
+ if trait.additive != "":
+ results_dict['additive'] = "%0.3f" % float(trait.additive)
+ else:
+ results_dict['additive'] = "N/A"
+ if for_api:
+ results_dict['sample_r'] = "%0.3f" % float(trait.sample_r)
+ else:
+ results_dict['sample_r'] = "<a target='_blank' href='corr_scatter_plot?dataset_1=" + str(dataset.name) + "&dataset_2=" + str(trait.dataset.name) + "&trait_1=" + str(this_trait.name) + "&trait_2=" + str(trait.name) + "'>" + "%0.3f" % float(trait.sample_r) + "</a>"
+ results_dict['num_overlap'] = trait.num_overlap
+ results_dict['sample_p'] = "%0.3e" % float(trait.sample_p)
+ if trait.lit_corr == "" or trait.lit_corr == 0:
+ results_dict['lit_corr'] = "--"
+ else:
+ results_dict['lit_corr'] = "%0.3f" % float(trait.lit_corr)
+ if trait.tissue_corr == "" or trait.tissue_corr == 0:
+ results_dict['tissue_corr'] = "--"
+ else:
+ results_dict['tissue_corr'] = "%0.3f" % float(trait.tissue_corr)
+ elif target_dataset.type == "Publish":
+ results_dict['description'] = trait.description_display
+ results_dict['authors'] = trait.authors
+ if trait.pubmed_id:
+ if for_api:
+ results_dict['pubmed_id'] = trait.pubmed_id
+ results_dict['year'] = trait.pubmed_text
else:
- if abs(sample_r) >= 1.0:
- sample_p = 0.0
- else:
- z_value = 0.5*math.log((1.0+sample_r)/(1.0-sample_r))
- z_value = z_value*math.sqrt(nOverlap-3)
- sample_p = 2.0*(1.0 - reaper.normp(abs(z_value)))
-
- correlation_data[traitdataName] = [sample_r, sample_p, nOverlap]
-
- # traitinfo = [traitdataName, sample_r, nOverlap]
- # allcorrelations.append(traitinfo)
-
- return correlation_data
- # return allcorrelations
-
-
- datasetFile = open(webqtlConfig.GENERATED_TEXT_DIR+db_filename,'r')
-
- print("Invoking parallel computing")
- input_line_list = datasetFile.readlines()
- print("Read lines from the file")
- all_line_number = len(input_line_list)
-
- step = 1000
- job_number = math.ceil( float(all_line_number)/step )
-
- print("JOB NUMBER", job_number)
-
- job_input_lists = []
-
- print("Configuring jobs")
-
- for job_index in range( int(job_number) ):
- starti = job_index*step
- endi = min((job_index+1)*step, all_line_number)
-
- one_job_input_list = []
-
- for i in range( starti, endi ):
- one_job_input_list.append( input_line_list[i] )
-
- job_input_lists.append( one_job_input_list )
-
- print("Creating pp servers")
-
- ppservers = ()
- # Creates jobserver with automatically detected number of workers
- job_server = pp.Server(ppservers=ppservers)
-
- print("Done creating servers")
-
- jobs = []
- results = []
-
- print("Starting parallel computation, submitting jobs")
- for one_job_input_list in job_input_lists: #pay attention to modules from outside
- jobs.append( job_server.submit(func=compute_corr, args=(num_overlap, self.this_trait_vals, one_job_input_list, self.corr_method), depfuncs=(), modules=("webqtlUtil",)) )
- print("Done submitting jobs")
-
- for one_job in jobs:
- one_result = one_job()
- self.correlation_data.update(one_result)
- # one_result = one_job()
- # results.append( one_result )
-
- #print("CORRELATION DATA:", self.correlation_data)
-
- # print("Acquiring results")
-
- # for one_result in results:
- # for one_traitinfo in one_result:
- # allcorrelations.append( one_traitinfo )
-
-
+ results_dict['pubmed'] = "<a href='" + trait.pubmed_link + "'> " + trait.pubmed_text + "</a>"
+ else:
+ if for_api:
+ results_dict['pubmed_id'] = "N/A"
+ results_dict['year'] = "N/A"
+ else:
+ results_dict['pubmed'] = "N/A"
+ results_dict['lrs_score'] = trait.LRS_score_repr
+ results_dict['lrs_location'] = trait.LRS_location_repr
+ if trait.additive != "":
+ results_dict['additive'] = "%0.3f" % float(trait.additive)
+ else:
+ results_dict['additive'] = "N/A"
+ if for_api:
+ results_dict['sample_r'] = "%0.3f" % trait.sample_r
+ else:
+ results_dict['sample_r'] = "<a target='_blank' href='corr_scatter_plot?dataset_1=" + str(dataset.name) + "&dataset_2=" + str(trait.dataset.name) + "&trait_1=" + str(this_trait.name) + "&trait_2=" + str(trait.name) + "'>" + "%0.3f" % trait.sample_r + "</a>"
+ results_dict['num_overlap'] = trait.num_overlap
+ results_dict['sample_p'] = "%0.3e" % float(trait.sample_p)
+ else:
+ results_dict['lrs_location'] = trait.LRS_location_repr
+ if for_api:
+ results_dict['sample_r'] = "%0.3f" % trait.sample_r
+ else:
+ results_dict['sample_r'] = "<a target='_blank' href='corr_scatter_plot?dataset_1=" + str(dataset.name) + "&dataset_2=" + str(trait.dataset.name) + "&trait_1=" + str(this_trait.name) + "&trait_2=" + str(trait.name) + "'>" + "%0.3f" % float(trait.sample_r) + "</a>"
+ results_dict['num_overlap'] = trait.num_overlap
+ results_dict['sample_p'] = "%0.3e" % float(trait.sample_p)
+
+ results_list.append(results_dict)
+
+ return json.dumps(results_list)
+
+def get_header_fields(data_type, corr_method):
+ if data_type == "ProbeSet":
+ if corr_method == "spearman":
+ header_fields = ['Index',
+ 'Record',
+ 'Symbol',
+ 'Description',
+ 'Location',
+ 'Mean',
+ 'Sample rho',
+ 'N',
+ 'Sample p(rho)',
+ 'Lit rho',
+ 'Tissue rho',
+ 'Tissue p(rho)',
+ 'Max LRS',
+ 'Max LRS Location',
+ 'Additive Effect']
+ else:
+ header_fields = ['Index',
+ 'Record',
+ 'Symbol',
+ 'Description',
+ 'Location',
+ 'Mean',
+ 'Sample r',
+ 'N',
+ 'Sample p(r)',
+ 'Lit r',
+ 'Tissue r',
+ 'Tissue p(r)',
+ 'Max LRS',
+ 'Max LRS Location',
+ 'Additive Effect']
+ elif data_type == "Publish":
+ if corr_method == "spearman":
+ header_fields = ['Index',
+ 'Record',
+ 'Description',
+ 'Authors',
+ 'Year',
+ 'Sample rho',
+ 'N',
+ 'Sample p(rho)',
+ 'Max LRS',
+ 'Max LRS Location',
+ 'Additive Effect']
+ else:
+ header_fields = ['Index',
+ 'Record',
+ 'Description',
+ 'Authors',
+ 'Year',
+ 'Sample r',
+ 'N',
+ 'Sample p(r)',
+ 'Max LRS',
+ 'Max LRS Location',
+ 'Additive Effect']
+
+ else:
+ if corr_method == "spearman":
+ header_fields = ['Index',
+ 'ID',
+ 'Location',
+ 'Sample rho',
+ 'N',
+ 'Sample p(rho)']
+ else:
+ header_fields = ['Index',
+ 'ID',
+ 'Location',
+ 'Sample r',
+ 'N',
+ 'Sample p(r)']
+
+ return header_fields \ No newline at end of file
diff --git a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
index 630980c7..b5c45d05 100644
--- a/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
+++ b/wqflask/wqflask/correlation_matrix/show_corr_matrix.py
@@ -23,16 +23,17 @@ from __future__ import absolute_import, print_function, division
import sys
# sys.path.append(".") Never do this in a webserver!
-import gc
import string
import cPickle
import os
+import datetime
import time
import pp
import math
import collections
import resource
+import numpy as np
import scipy
from rpy2.robjects.packages import importr
@@ -40,9 +41,11 @@ import rpy2.robjects as robjects
from pprint import pformat as pf
-from htmlgen import HTMLgen2 as HT
import reaper
+import redis
+Redis = redis.StrictRedis()
+
from utility.THCell import THCell
from utility.TDCell import TDCell
from base.trait import GeneralTrait
@@ -57,8 +60,10 @@ from MySQLdb import escape_string as escape
from pprint import pformat as pf
-from flask import Flask, g
+from flask import Flask, g, url_for
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
class CorrelationMatrix(object):
@@ -69,7 +74,15 @@ class CorrelationMatrix(object):
self.all_sample_list = []
self.traits = []
+ self.insufficient_shared_samples = False
+ self.do_PCA = True
+ this_group = self.trait_list[0][1].group.name #ZS: Getting initial group name before verifying all traits are in the same group in the following loop
for trait_db in self.trait_list:
+ if trait_db[1].group.name != this_group:
+ self.insufficient_shared_samples = True
+ break
+ else:
+ this_group = trait_db[1].group.name
this_trait = trait_db[0]
self.traits.append(this_trait)
this_sample_data = this_trait.data
@@ -78,90 +91,119 @@ class CorrelationMatrix(object):
if sample not in self.all_sample_list:
self.all_sample_list.append(sample)
- self.sample_data = []
- for trait_db in self.trait_list:
- this_trait = trait_db[0]
- this_sample_data = this_trait.data
-
- this_trait_vals = []
- for sample in self.all_sample_list:
- if sample in this_sample_data:
- this_trait_vals.append(this_sample_data[sample].value)
- else:
- this_trait_vals.append('')
- self.sample_data.append(this_trait_vals)
-
- self.lowest_overlap = 8 #ZS: Variable set to the lowest overlapping samples in order to notify user, or 8, whichever is lower (since 8 is when we want to display warning)
-
- self.corr_results = []
- self.pca_corr_results = []
- for trait_db in self.trait_list:
- this_trait = trait_db[0]
- this_db = trait_db[1]
-
- this_db_samples = this_db.group.samplelist
- this_sample_data = this_trait.data
-
- corr_result_row = []
- pca_corr_result_row = []
- is_spearman = False #ZS: To determine if it's above or below the diagonal
- for target in self.trait_list:
- target_trait = target[0]
- target_db = target[1]
- target_samples = target_db.group.samplelist
-
- target_sample_data = target_trait.data
+ if self.insufficient_shared_samples:
+ pass
+ else:
+ self.sample_data = []
+ for trait_db in self.trait_list:
+ this_trait = trait_db[0]
+ this_sample_data = this_trait.data
this_trait_vals = []
- target_vals = []
- for index, sample in enumerate(target_samples):
+ for sample in self.all_sample_list:
+ if sample in this_sample_data:
+ this_trait_vals.append(this_sample_data[sample].value)
+ else:
+ this_trait_vals.append('')
+ self.sample_data.append(this_trait_vals)
+
+ if len(this_trait_vals) < len(self.trait_list): #Shouldn't do PCA if there are more traits than observations/samples
+ self.do_PCA = False
+
+ self.lowest_overlap = 8 #ZS: Variable set to the lowest overlapping samples in order to notify user, or 8, whichever is lower (since 8 is when we want to display warning)
+
+ self.corr_results = []
+ self.pca_corr_results = []
+ self.shared_samples_list = self.all_sample_list
+ for trait_db in self.trait_list:
+ this_trait = trait_db[0]
+ this_db = trait_db[1]
+
+ this_db_samples = this_db.group.all_samples_ordered()
+ this_sample_data = this_trait.data
+
+ corr_result_row = []
+ pca_corr_result_row = []
+ is_spearman = False #ZS: To determine if it's above or below the diagonal
+ for target in self.trait_list:
+ target_trait = target[0]
+ target_db = target[1]
+ target_samples = target_db.group.all_samples_ordered()
+ target_sample_data = target_trait.data
+
+ this_trait_vals = []
+ target_vals = []
+ for index, sample in enumerate(target_samples):
+ if (sample in this_sample_data) and (sample in target_sample_data):
+ sample_value = this_sample_data[sample].value
+ target_sample_value = target_sample_data[sample].value
+ this_trait_vals.append(sample_value)
+ target_vals.append(target_sample_value)
+ else:
+ if sample in self.shared_samples_list:
+ self.shared_samples_list.remove(sample)
+
+ this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(this_trait_vals, target_vals)
+
+ if num_overlap < self.lowest_overlap:
+ self.lowest_overlap = num_overlap
+ if num_overlap == 0:
+ corr_result_row.append([target_trait, 0, num_overlap])
+ pca_corr_result_row.append(0)
+ else:
+ pearson_r, pearson_p = scipy.stats.pearsonr(this_trait_vals, target_vals)
+ if is_spearman == False:
+ sample_r, sample_p = pearson_r, pearson_p
+ if sample_r == 1:
+ is_spearman = True
+ else:
+ sample_r, sample_p = scipy.stats.spearmanr(this_trait_vals, target_vals)
+
+ corr_result_row.append([target_trait, sample_r, num_overlap])
+ pca_corr_result_row.append(pearson_r)
+
+ self.corr_results.append(corr_result_row)
+ self.pca_corr_results.append(pca_corr_result_row)
+
+ self.trait_data_array = []
+ for trait_db in self.trait_list:
+ this_trait = trait_db[0]
+ this_db = trait_db[1]
+ this_db_samples = this_db.group.all_samples_ordered()
+ this_sample_data = this_trait.data
- if (sample in this_sample_data) and (sample in target_sample_data):
+ this_trait_vals = []
+ for index, sample in enumerate(this_db_samples):
+ if (sample in this_sample_data) and (sample in self.shared_samples_list):
sample_value = this_sample_data[sample].value
- target_sample_value = target_sample_data[sample].value
this_trait_vals.append(sample_value)
- target_vals.append(target_sample_value)
+ self.trait_data_array.append(this_trait_vals)
- this_trait_vals, target_vals, num_overlap = corr_result_helpers.normalize_values(this_trait_vals, target_vals)
+ corr_result_eigen = np.linalg.eig(np.array(self.pca_corr_results))
+ corr_eigen_value, corr_eigen_vectors = sortEigenVectors(corr_result_eigen)
- if num_overlap < self.lowest_overlap:
- self.lowest_overlap = num_overlap
- if num_overlap == 0:
- corr_result_row.append([target_trait, 0, num_overlap])
- pca_corr_result_row.append(0)
+ groups = []
+ for sample in self.all_sample_list:
+ groups.append(1)
+
+ try:
+ if self.do_PCA == True:
+ self.pca_works = "True"
+ self.pca_trait_ids = []
+ pca = self.calculate_pca(range(len(self.traits)), corr_eigen_value, corr_eigen_vectors)
+ self.loadings_array = self.process_loadings()
else:
- pearson_r, pearson_p = scipy.stats.pearsonr(this_trait_vals, target_vals)
- if is_spearman == False:
- sample_r, sample_p = pearson_r, pearson_p
- if sample_r == 1:
- is_spearman = True
- else:
- sample_r, sample_p = scipy.stats.spearmanr(this_trait_vals, target_vals)
-
- corr_result_row.append([target_trait, sample_r, num_overlap])
- pca_corr_result_row.append(pearson_r)
-
- self.corr_results.append(corr_result_row)
- self.pca_corr_results.append(pca_corr_result_row)
-
- print("corr_results:", pf(self.corr_results))
-
- groups = []
- for sample in self.all_sample_list:
- groups.append(1)
-
- pca = self.calculate_pca(self.pca_corr_results, range(len(self.traits)))
-
- self.loadings_array = self.process_loadings()
-
- self.js_data = dict(traits = [trait.name for trait in self.traits],
- groups = groups,
- cols = range(len(self.traits)),
- rows = range(len(self.traits)),
- samples = self.all_sample_list,
- sample_data = self.sample_data,)
- # corr_results = [result[1] for result in result_row for result_row in self.corr_results])
-
+ self.pca_works = "False"
+ except:
+ self.pca_works = "False"
+
+ self.js_data = dict(traits = [trait.name for trait in self.traits],
+ groups = groups,
+ cols = range(len(self.traits)),
+ rows = range(len(self.traits)),
+ samples = self.all_sample_list,
+ sample_data = self.sample_data,)
+ # corr_results = [result[1] for result in result_row for result_row in self.corr_results])
def get_trait_db_obs(self, trait_db_list):
@@ -177,34 +219,52 @@ class CorrelationMatrix(object):
cellid=None)
self.trait_list.append((trait_ob, dataset_ob))
- #print("trait_list:", self.trait_list)
-
-
- def calculate_pca(self, corr_results, cols):
+ def calculate_pca(self, cols, corr_eigen_value, corr_eigen_vectors):
base = importr('base')
stats = importr('stats')
- print("checking:", pf(stats.rnorm(100)))
- corr_results_to_list = robjects.FloatVector([item for sublist in corr_results for item in sublist])
- print("corr_results:", pf(corr_results_to_list))
+ corr_results_to_list = robjects.FloatVector([item for sublist in self.pca_corr_results for item in sublist])
m = robjects.r.matrix(corr_results_to_list, nrow=len(cols))
eigen = base.eigen(m)
- print("eigen:", eigen)
pca = stats.princomp(m, cor = "TRUE")
- print("pca:", pca)
self.loadings = pca.rx('loadings')
self.scores = pca.rx('scores')
self.scale = pca.rx('scale')
- print("scores:", pca.rx('scores'))
- print("scale:", pca.rx('scale'))
+
+ trait_array = zScore(self.trait_data_array)
+ trait_array_vectors = np.dot(corr_eigen_vectors, trait_array)
+
+ pca_traits = []
+ for i, vector in enumerate(trait_array_vectors):
+ #ZS: Check if below check is necessary
+ #if corr_eigen_value[i-1] > 100.0/len(self.trait_list):
+ pca_traits.append((vector*-1.0).tolist())
+
+ this_group_name = self.trait_list[0][1].group.name
+ temp_dataset = data_set.create_dataset(dataset_name = "Temp", dataset_type = "Temp", group_name = this_group_name)
+ temp_dataset.group.get_samplelist()
+ for i, pca_trait in enumerate(pca_traits):
+ trait_id = "PCA" + str(i+1) + "_" + temp_dataset.group.species + "_" + this_group_name + "_" + datetime.datetime.now().strftime("%m%d%H%M%S")
+ this_vals_string = ""
+ position = 0
+ for sample in temp_dataset.group.all_samples_ordered():
+ if sample in self.shared_samples_list:
+ this_vals_string += str(pca_trait[position])
+ this_vals_string += " "
+ position += 1
+ else:
+ this_vals_string += "x "
+ this_vals_string = this_vals_string[:-1]
+
+ Redis.set(trait_id, this_vals_string)
+ self.pca_trait_ids.append(trait_id)
return pca
def process_loadings(self):
loadings_array = []
loadings_row = []
- print("before loop:", self.loadings[0])
for i in range(len(self.trait_list)):
loadings_row = []
if len(self.trait_list) > 2:
@@ -215,6 +275,45 @@ class CorrelationMatrix(object):
position = i + len(self.trait_list)*j
loadings_row.append(self.loadings[0][position])
loadings_array.append(loadings_row)
- print("loadings:", loadings_array)
return loadings_array
+def zScore(trait_data_array):
+ NN = len(trait_data_array[0])
+ if NN < 10:
+ return trait_data_array
+ else:
+ i = 0
+ for data in trait_data_array:
+ N = len(data)
+ S = reduce(lambda x,y: x+y, data, 0.)
+ SS = reduce(lambda x,y: x+y*y, data, 0.)
+ mean = S/N
+ var = SS - S*S/N
+ stdev = math.sqrt(var/(N-1))
+ if stdev == 0:
+ stdev = 1e-100
+ data2 = map(lambda x:(x-mean)/stdev,data)
+ trait_data_array[i] = data2
+ i += 1
+ return trait_data_array
+
+def sortEigenVectors(vector):
+ try:
+ eigenValues = vector[0].tolist()
+ eigenVectors = vector[1].T.tolist()
+ combines = []
+ i = 0
+ for item in eigenValues:
+ combines.append([eigenValues[i],eigenVectors[i]])
+ i += 1
+ combines.sort(webqtlUtil.cmpEigenValue)
+ A = []
+ B = []
+ for item in combines:
+ A.append(item[0])
+ B.append(item[1])
+ sum = reduce(lambda x,y: x+y, A, 0.0)
+ A = map(lambda x:x*100.0/sum, A)
+ return [A, B]
+ except:
+ return [] \ No newline at end of file
diff --git a/wqflask/wqflask/ctl/ctl_analysis.py b/wqflask/wqflask/ctl/ctl_analysis.py
index 9515d23a..6fda02fd 100644
--- a/wqflask/wqflask/ctl/ctl_analysis.py
+++ b/wqflask/wqflask/ctl/ctl_analysis.py
@@ -2,7 +2,6 @@
# Author / Maintainer: Danny Arends <Danny.Arends@gmail.com>
import sys
from numpy import *
-import scipy as sp # SciPy
import rpy2.robjects as ro # R Objects
import rpy2.rinterface as ri
@@ -24,60 +23,38 @@ from utility import helper_functions
from utility.tools import locate
from rpy2.robjects.packages import importr
-utils = importr("utils")
+
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
## Get pointers to some common R functions
r_library = ro.r["library"] # Map the library function
r_options = ro.r["options"] # Map the options function
-r_read_csv = ro.r["read.csv"] # Map the read.csv function
-r_dim = ro.r["dim"] # Map the dim function
-r_c = ro.r["c"] # Map the c function
r_t = ro.r["t"] # Map the t function
-r_cat = ro.r["cat"] # Map the cat function
-r_paste = ro.r["paste"] # Map the paste function
-r_unlist = ro.r["unlist"] # Map the unlist function
-r_head = ro.r["head"] # Map the unlist function
-r_unique = ro.r["unique"] # Map the unique function
-r_length = ro.r["length"] # Map the length function
r_unlist = ro.r["unlist"] # Map the unlist function
r_list = ro.r.list # Map the list function
-r_matrix = ro.r.matrix # Map the matrix function
-r_seq = ro.r["seq"] # Map the seq function
-r_table = ro.r["table"] # Map the table function
-r_names = ro.r["names"] # Map the names function
-r_sink = ro.r["sink"] # Map the sink function
-r_is_NA = ro.r["is.na"] # Map the is.na function
-r_file = ro.r["file"] # Map the file function
r_png = ro.r["png"] # Map the png function for plotting
r_dev_off = ro.r["dev.off"] # Map the dev.off function
-r_save_image = ro.r["save.image"] # Map the save.image function
-r_class = ro.r["class"] # Map the class function
-r_save = ro.r["save"] # Map the save function
r_write_table = ro.r["write.table"] # Map the write.table function
-r_read_table = ro.r["read.table"] # Map the read.table function
-r_as_data_frame = ro.r["as.data.frame"] # Map the write.table function
r_data_frame = ro.r["data.frame"] # Map the write.table function
r_as_numeric = ro.r["as.numeric"] # Map the write.table function
class CTL(object):
def __init__(self):
- print("Initialization of CTL")
+ logger.info("Initialization of CTL")
#log = r_file("/tmp/genenetwork_ctl.log", open = "wt")
- #r_sink(log) # Uncomment the r_sink() commands to log output from stdout/stderr to a file
+ #r_sink(log) # Uncomment the r_sink() commands to log output from stdout/stderr to a file
#r_sink(log, type = "message")
- r_library("ctl") # Load CTL - Should only be done once, since it is quite expensive
+ r_library("ctl") # Load CTL - Should only be done once, since it is quite expensive
r_options(stringsAsFactors = False)
- print("Initialization of CTL done, package loaded in R session")
+ logger.info("Initialization of CTL done, package loaded in R session")
self.r_CTLscan = ro.r["CTLscan"] # Map the CTLscan function
self.r_CTLsignificant = ro.r["CTLsignificant"] # Map the CTLsignificant function
self.r_lineplot = ro.r["ctl.lineplot"] # Map the ctl.lineplot function
- self.r_CTLsignificant = ro.r["CTLsignificant"] # Map the CTLsignificant function
- self.r_CTLnetwork = ro.r["CTLnetwork"] # Map the CTLnetwork function
- self.r_CTLprofiles = ro.r["CTLprofiles"] # Map the CTLprofiles function
self.r_plotCTLobject = ro.r["plot.CTLobject"] # Map the CTLsignificant function
self.nodes_list = []
self.edges_list = []
- print("Obtained pointers to CTL functions")
+ logger.info("Obtained pointers to CTL functions")
def addNode(self, gt):
node_dict = { 'data' : {'id' : str(gt.name) + ":" + str(gt.dataset.name),
@@ -100,20 +77,20 @@ class CTL(object):
self.edges_list.append(edge_dict)
def run_analysis(self, requestform):
- print("Starting CTL analysis on dataset")
+ logger.info("Starting CTL analysis on dataset")
self.trait_db_list = [trait.strip() for trait in requestform['trait_list'].split(',')]
self.trait_db_list = [x for x in self.trait_db_list if x]
- print("strategy:", requestform.get("strategy"))
+ logger.debug("strategy:", requestform.get("strategy"))
strategy = requestform.get("strategy")
- print("nperm:", requestform.get("nperm"))
+ logger.debug("nperm:", requestform.get("nperm"))
nperm = int(requestform.get("nperm"))
- print("parametric:", requestform.get("parametric"))
+ logger.debug("parametric:", requestform.get("parametric"))
parametric = bool(requestform.get("parametric"))
- print("significance:", requestform.get("significance"))
+ logger.debug("significance:", requestform.get("significance"))
significance = float(requestform.get("significance"))
# Get the name of the .geno file belonging to the first phenotype
@@ -123,7 +100,7 @@ class CTL(object):
genofilelocation = locate(dataset.group.name + ".geno", "genotype")
parser = genofile_parser.ConvertGenoFile(genofilelocation)
parser.process_csv()
- print(dataset.group)
+ logger.debug("dataset group: ", dataset.group)
# Create a genotype matrix
individuals = parser.individuals
markers = []
@@ -133,14 +110,14 @@ class CTL(object):
markers.append(marker["genotypes"])
genotypes = list(itertools.chain(*markers))
- print(len(genotypes) / len(individuals), "==", len(parser.markers))
+ logger.debug(len(genotypes) / len(individuals), "==", len(parser.markers))
rGeno = r_t(ro.r.matrix(r_unlist(genotypes), nrow=len(markernames), ncol=len(individuals), dimnames = r_list(markernames, individuals), byrow=True))
# Create a phenotype matrix
traits = []
for trait in self.trait_db_list:
- print("retrieving data for", trait)
+ logger.debug("retrieving data for", trait)
if trait != "":
ts = trait.split(':')
gt = TRAIT.GeneralTrait(name = ts[0], dataset_name = ts[1])
@@ -153,7 +130,7 @@ class CTL(object):
rPheno = r_t(ro.r.matrix(r_as_numeric(r_unlist(traits)), nrow=len(self.trait_db_list), ncol=len(individuals), dimnames = r_list(self.trait_db_list, individuals), byrow=True))
- print(rPheno)
+ logger.debug(rPheno)
# Use a data frame to store the objects
rPheno = r_data_frame(rPheno, check_names = False)
@@ -196,10 +173,9 @@ class CTL(object):
sys.stdout.flush()
# Create the interactive graph for cytoscape visualization (Nodes and Edges)
- print(type(significant))
if not type(significant) == ri.RNULLType:
for x in range(len(significant[0])):
- print(significant[0][x], significant[1][x], significant[2][x]) # Debug to console
+ logger.debug(significant[0][x], significant[1][x], significant[2][x]) # Debug to console
tsS = significant[0][x].split(':') # Source
tsT = significant[2][x].split(':') # Target
gtS = TRAIT.GeneralTrait(name = tsS[0], dataset_name = tsS[1]) # Retrieve Source info from the DB
@@ -214,7 +190,6 @@ class CTL(object):
self.elements = json.dumps(self.nodes_list + self.edges_list)
def loadImage(self, path, name):
- print("pre-loading imgage results:", self.results[path])
imgfile = open(self.results[path], 'rb')
imgdata = imgfile.read()
imgB64 = imgdata.encode("base64")
@@ -229,7 +204,7 @@ class CTL(object):
n = n + 1
def process_results(self, results):
- print("Processing CTL output")
+ logger.info("Processing CTL output")
template_vars = {}
template_vars["results"] = self.results
template_vars["elements"] = self.elements
diff --git a/wqflask/wqflask/database.py b/wqflask/wqflask/database.py
index 4df872ad..adeed6ad 100644
--- a/wqflask/wqflask/database.py
+++ b/wqflask/wqflask/database.py
@@ -9,7 +9,7 @@ import utility.logger
logger = utility.logger.getLogger(__name__ )
-engine = create_engine(SQL_URI, convert_unicode=True)
+engine = create_engine(SQL_URI, encoding="latin1")
db_session = scoped_session(sessionmaker(autocommit=False,
autoflush=False,
@@ -22,8 +22,8 @@ def init_db():
# they will be registered properly on the metadata. Otherwise
# you will have to import them first before calling init_db()
#import yourapplication.models
+ logger.info("Initializing database connection")
import wqflask.model
- logger.debug("Creating all model metadata")
Base.metadata.create_all(bind=engine)
logger.info("Done creating all model metadata")
diff --git a/wqflask/wqflask/do_search.py b/wqflask/wqflask/do_search.py
index e1df1e63..05caa100 100644
--- a/wqflask/wqflask/do_search.py
+++ b/wqflask/wqflask/do_search.py
@@ -1,6 +1,8 @@
from __future__ import print_function, division
import string
+import requests
+import json
from flask import Flask, g
@@ -22,17 +24,19 @@ class DoSearch(object):
# Used to translate search phrases into classes
search_types = dict()
- def __init__(self, search_term, search_operator=None, dataset=None):
+ def __init__(self, search_term, search_operator=None, dataset=None, search_type=None):
self.search_term = search_term
# Make sure search_operator is something we expect
assert search_operator in (None, "=", "<", ">", "<=", ">="), "Bad search operator"
self.search_operator = search_operator
self.dataset = dataset
+ self.search_type = search_type
if self.dataset:
logger.debug("self.dataset is boo: ", type(self.dataset), pf(self.dataset))
logger.debug("self.dataset.group is: ", pf(self.dataset.group))
#Get group information for dataset and the species id
+
self.species_id = webqtlDatabaseFunction.retrieve_species_id(self.dataset.group.name)
def execute(self, query):
@@ -44,8 +48,8 @@ class DoSearch(object):
def handle_wildcard(self, str):
keyword = str.strip()
- keyword.replace("*",".*")
- keyword.replace("?",".")
+ keyword = keyword.replace("*",".*")
+ keyword = keyword.replace("?",".")
return keyword
@@ -69,7 +73,7 @@ class DoSearch(object):
logger.debug("search_types are:", pf(cls.search_types))
search_type_string = search_type['dataset_type']
- if 'key' in search_type:
+ if 'key' in search_type and search_type['key'] != None:
search_type_string += '_' + search_type['key']
logger.debug("search_type_string is:", search_type_string)
@@ -79,38 +83,6 @@ class DoSearch(object):
else:
return None
-class QuickMrnaAssaySearch(DoSearch):
- """A general search for mRNA assays"""
-
- DoSearch.search_types['quick_mrna_assay'] = "QuickMrnaAssaySearch"
-
- base_query = """SELECT ProbeSet.Name as ProbeSet_Name,
- ProbeSet.Symbol as ProbeSet_Symbol,
- ProbeSet.description as ProbeSet_Description,
- ProbeSet.Chr_num as ProbeSet_Chr_Num,
- ProbeSet.Mb as ProbeSet_Mb,
- ProbeSet.name_num as ProbeSet_name_num
- FROM ProbeSet """
-
- header_fields = ['Index',
- 'Record',
- 'Symbol',
- 'Location']
-
- def run(self):
- """Generates and runs a search for assays across all mRNA expression datasets"""
-
- logger.debug("Running ProbeSetSearch")
- query = self.base_query + """WHERE (MATCH (ProbeSet.Name,
- ProbeSet.description,
- ProbeSet.symbol,
- ProbeSet.alias)
- AGAINST ('%s' IN BOOLEAN MODE))
- """ % (escape(self.search_term[0]))
-
- return self.execute(query)
-
-
class MrnaAssaySearch(DoSearch):
"""A search within an expression dataset, including mRNA, protein, SNP, but not phenotype or metabolites"""
@@ -137,18 +109,34 @@ class MrnaAssaySearch(DoSearch):
'Max LRS Location',
'Additive Effect']
+ def get_alias_where_clause(self):
+ search_string = escape(self.search_term[0])
+
+ if self.search_term[0] != "*":
+ match_clause = """((MATCH (ProbeSet.symbol) AGAINST ('%s' IN BOOLEAN MODE))) and """ % (search_string)
+ else:
+ match_clause = ""
+
+ where_clause = (match_clause +
+ """ProbeSet.Id = ProbeSetXRef.ProbeSetId
+ and ProbeSetXRef.ProbeSetFreezeId = %s
+ """ % (escape(str(self.dataset.id))))
+
+ return where_clause
+
def get_where_clause(self):
+ search_string = escape(self.search_term[0])
if self.search_term[0] != "*":
- match_clause = """(MATCH (ProbeSet.Name,
+ match_clause = """((MATCH (ProbeSet.Name,
ProbeSet.description,
ProbeSet.symbol,
alias,
GenbankId,
UniGeneId,
Probe_Target_Description)
- AGAINST ('%s' IN BOOLEAN MODE)) and
- """ % (escape(self.search_term[0]))
+ AGAINST ('%s' IN BOOLEAN MODE))) AND
+ """ % (search_string)
else:
match_clause = ""
@@ -230,6 +218,7 @@ class PhenotypeSearch(DoSearch):
header_fields = ['Index',
'Record',
'Description',
+ 'Mean',
'Authors',
'Year',
'Max LRS',
@@ -241,8 +230,12 @@ class PhenotypeSearch(DoSearch):
#Todo: Zach will figure out exactly what both these lines mean
#and comment here
- if "'" not in self.search_term[0]:
- search_term = "[[:<:]]" + self.handle_wildcard(self.search_term[0]) + "[[:>:]]"
+
+ #if "'" not in self.search_term[0]:
+ search_term = "[[:<:]]" + self.handle_wildcard(self.search_term[0]) + "[[:>:]]"
+ if "_" in self.search_term[0]:
+ if len(self.search_term[0].split("_")[0]) == 3:
+ search_term = "[[:<:]]" + self.handle_wildcard(self.search_term[0].split("_")[1]) + "[[:>:]]"
# This adds a clause to the query that matches the search term
# against each field in the search_fields tuple
@@ -264,7 +257,8 @@ class PhenotypeSearch(DoSearch):
WHERE PublishXRef.InbredSetId = %s
and PublishXRef.PhenotypeId = Phenotype.Id
and PublishXRef.PublicationId = Publication.Id
- and PublishFreeze.Id = %s""" % (
+ and PublishFreeze.Id = %s
+ ORDER BY PublishXRef.Id""" % (
from_clause,
escape(str(self.dataset.group.id)),
escape(str(self.dataset.id))))
@@ -275,7 +269,8 @@ class PhenotypeSearch(DoSearch):
and PublishXRef.InbredSetId = %s
and PublishXRef.PhenotypeId = Phenotype.Id
and PublishXRef.PublicationId = Publication.Id
- and PublishFreeze.Id = %s""" % (
+ and PublishFreeze.Id = %s
+ ORDER BY PublishXRef.Id""" % (
from_clause,
where_clause,
escape(str(self.dataset.group.id)),
@@ -311,54 +306,6 @@ class PhenotypeSearch(DoSearch):
return self.execute(query)
-class QuickPhenotypeSearch(PhenotypeSearch):
- """A search across all phenotype datasets"""
-
- DoSearch.search_types['quick_phenotype'] = "QuickPhenotypeSearch"
-
- base_query = """SELECT Species.Name as Species_Name,
- PublishFreeze.FullName as Dataset_Name,
- PublishFreeze.Name,
- PublishXRef.Id,
- PublishFreeze.createtime as thistable,
- Publication.PubMed_ID as Publication_PubMed_ID,
- Phenotype.Post_publication_description as Phenotype_Name
- FROM Phenotype,
- PublishFreeze,
- Publication,
- PublishXRef,
- InbredSet,
- Species """
-
- search_fields = ('Phenotype.Post_publication_description',
- 'Phenotype.Pre_publication_description',
- 'Phenotype.Pre_publication_abbreviation',
- 'Phenotype.Post_publication_abbreviation',
- 'Phenotype.Lab_code',
- 'Publication.PubMed_ID',
- 'Publication.Abstract',
- 'Publication.Title',
- 'Publication.Authors')
-
- def compile_final_query(self, where_clause = ''):
- """Generates the final query string"""
-
- query = (self.base_query +
- """WHERE %s
- PublishXRef.PhenotypeId = Phenotype.Id and
- PublishXRef.PublicationId = Publication.Id and
- PublishXRef.InbredSetId = InbredSet.Id and
- InbredSet.SpeciesId = Species.Id""" % where_clause)
-
- return query
-
- def run(self):
- """Generates and runs a search across all phenotype datasets"""
-
- query = self.compile_final_query(where_clause = self.get_where_clause())
-
- return self.execute(query)
-
class GenotypeSearch(DoSearch):
"""A search within a genotype dataset"""
@@ -524,15 +471,18 @@ class LrsSearch(DoSearch):
"""
- DoSearch.search_types['LRS'] = 'LrsSearch'
+ for search_key in ('LRS', 'LOD'):
+ DoSearch.search_types[search_key] = "LrsSearch"
def get_from_clause(self):
- #If the user typed, for example "Chr4", the "Chr" substring needs to be removed so that all search elements can be converted to floats
- if len(self.search_term) > 2 and "Chr" in self.search_term[2]:
- chr_num = self.search_term[2].replace("Chr", "")
- self.search_term[2] = chr_num
+ converted_search_term = []
+ for value in self.search_term:
+ try:
+ converted_search_term.append(float(value))
+ except:
+ converted_search_term.append(value)
- self.search_term = [float(value) for value in self.search_term]
+ self.search_term = converted_search_term
if len(self.search_term) > 2:
from_clause = ", Geno"
@@ -545,6 +495,9 @@ class LrsSearch(DoSearch):
if self.search_operator == "=":
assert isinstance(self.search_term, (list, tuple))
lrs_min, lrs_max = self.search_term[:2]
+ if self.search_type == "LOD":
+ lrs_min = lrs_min*4.61
+ lrs_max = lrs_max*4.61
where_clause = """ %sXRef.LRS > %s and
%sXRef.LRS < %s """ % self.mescape(self.dataset.type,
@@ -553,8 +506,12 @@ class LrsSearch(DoSearch):
max(lrs_min, lrs_max))
if len(self.search_term) > 2:
+ #If the user typed, for example "Chr4", the "Chr" substring needs to be removed so that all search elements can be converted to floats
chr_num = self.search_term[2]
- where_clause += """ and Geno.Chr = %s """ % (chr_num)
+ if "chr" in self.search_term[2].lower():
+ chr_num = self.search_term[2].lower().replace("chr", "")
+ self.search_term[2] = chr_num
+ where_clause += """ and Geno.Chr = '%s' """ % (chr_num)
if len(self.search_term) == 5:
mb_low, mb_high = self.search_term[3:]
where_clause += """ and Geno.Mb > %s and
@@ -569,6 +526,10 @@ class LrsSearch(DoSearch):
else:
# Deal with >, <, >=, and <=
logger.debug("self.search_term is:", self.search_term)
+ lrs_val = self.search_term[0]
+ if self.search_type == "LOD":
+ lrs_val = lrs_val*4.61
+
where_clause = """ %sXRef.LRS %s %s """ % self.mescape(self.dataset.type,
self.search_operator,
self.search_term[0])
@@ -585,12 +546,13 @@ class LrsSearch(DoSearch):
return self.execute(self.query)
+
class MrnaLrsSearch(LrsSearch, MrnaAssaySearch):
- DoSearch.search_types['ProbeSet_LRS'] = 'MrnaLrsSearch'
+ for search_key in ('LRS', 'LOD'):
+ DoSearch.search_types['ProbeSet_' + search_key] = "MrnaLrsSearch"
def run(self):
-
self.from_clause = self.get_from_clause()
self.where_clause = self.get_where_clause()
@@ -600,7 +562,8 @@ class MrnaLrsSearch(LrsSearch, MrnaAssaySearch):
class PhenotypeLrsSearch(LrsSearch, PhenotypeSearch):
- DoSearch.search_types['Publish_LRS'] = 'PhenotypeLrsSearch'
+ for search_key in ('LRS', 'LOD'):
+ DoSearch.search_types['Publish_' + search_key] = "PhenotypeLrsSearch"
def run(self):
@@ -612,31 +575,39 @@ class PhenotypeLrsSearch(LrsSearch, PhenotypeSearch):
return self.execute(self.query)
-
class CisTransLrsSearch(DoSearch):
def get_from_clause(self):
return ", Geno"
def get_where_clause(self, cis_trans):
- self.search_term = [float(value) for value in self.search_term]
self.mb_buffer = 5 # default
+ chromosome = None
if cis_trans == "cis":
the_operator = "<"
else:
the_operator = ">"
if self.search_operator == "=":
+ if len(self.search_term) == 2 or len(self.search_term) == 3:
+ self.search_term = [float(value) for value in self.search_term]
if len(self.search_term) == 2:
lrs_min, lrs_max = self.search_term
#[int(value) for value in self.search_term]
-
elif len(self.search_term) == 3:
lrs_min, lrs_max, self.mb_buffer = self.search_term
-
+ elif len(self.search_term) == 4:
+ lrs_min, lrs_max, self.mb_buffer = [float(value) for value in self.search_term[:3]]
+ chromosome = self.search_term[3]
+ if "Chr" in chromosome or "chr" in chromosome:
+ chromosome = int(chromosome[3:])
else:
SomeError
+ if self.search_type == "CISLOD" or self.search_type == "TRANSLOD":
+ lrs_min = lrs_min * 4.61
+ lrs_max = lrs_max * 4.61
+
sub_clause = """ %sXRef.LRS > %s and
%sXRef.LRS < %s and """ % (
escape(self.dataset.type),
@@ -666,18 +637,24 @@ class CisTransLrsSearch(DoSearch):
escape(self.dataset.type)
)
else:
+ if chromosome:
+ location_clause = "(%s.Chr = '%s' and %s.Chr = Geno.Chr and ABS(%s.Mb-Geno.Mb) %s %s) or (%s.Chr != Geno.Chr and Geno.Chr = '%s')" % (escape(self.dataset.type),
+ chromosome,
+ escape(self.dataset.type),
+ escape(self.dataset.type),
+ the_operator,
+ escape(str(self.mb_buffer)),
+ escape(self.dataset.type),
+ chromosome)
+ else:
+ location_clause = "(ABS(%s.Mb-Geno.Mb) %s %s and %s.Chr = Geno.Chr) or (%s.Chr != Geno.Chr)" % (escape(self.dataset.type), the_operator, escape(str(self.mb_buffer)), escape(self.dataset.type))
where_clause = sub_clause + """
%sXRef.Locus = Geno.name and
Geno.SpeciesId = %s and
- ((ABS(%s.Mb-Geno.Mb) %s %s and %s.Chr = Geno.Chr) or
- (%s.Chr != Geno.Chr))""" % (
+ (%s)""" % (
escape(self.dataset.type),
escape(str(self.species_id)),
- escape(self.dataset.type),
- the_operator,
- escape(str(self.mb_buffer)),
- escape(self.dataset.type),
- escape(self.dataset.type)
+ location_clause
)
return where_clause
@@ -699,7 +676,8 @@ class CisLrsSearch(CisTransLrsSearch, MrnaAssaySearch):
"""
- DoSearch.search_types['ProbeSet_CISLRS'] = 'CisLrsSearch'
+ for search_key in ('LRS', 'LOD'):
+ DoSearch.search_types['ProbeSet_CIS'+search_key] = "CisLrsSearch"
def get_where_clause(self):
return CisTransLrsSearch.get_where_clause(self, "cis")
@@ -728,7 +706,8 @@ class TransLrsSearch(CisTransLrsSearch, MrnaAssaySearch):
"""
- DoSearch.search_types['ProbeSet_TRANSLRS'] = 'TransLrsSearch'
+ for search_key in ('LRS', 'LOD'):
+ DoSearch.search_types['ProbeSet_TRANS'+search_key] = "TransLrsSearch"
def get_where_clause(self):
return CisTransLrsSearch.get_where_clause(self, "trans")
@@ -767,14 +746,6 @@ class MeanSearch(MrnaAssaySearch):
return where_clause
- def get_final_query(self):
- self.where_clause = self.get_where_clause()
- logger.debug("where_clause is:", pf(self.where_clause))
-
- self.query = self.compile_final_query(where_clause = self.where_clause)
-
- return self.query
-
def run(self):
self.where_clause = self.get_where_clause()
logger.debug("where_clause is:", pf(self.where_clause))
@@ -830,7 +801,7 @@ class PositionSearch(DoSearch):
self.chr = str(chr).lower()
self.get_chr()
- where_clause = """ %s.Chr = %s and
+ where_clause = """ %s.Chr = '%s' and
%s.Mb > %s and
%s.Mb < %s """ % self.mescape(self.dataset.type,
self.chr,
@@ -939,6 +910,29 @@ def is_number(s):
except ValueError:
return False
+def get_aliases(symbol, species):
+ if species == "mouse":
+ symbol_string = symbol.capitalize()
+ elif species == "human":
+ symbol_string = symbol.upper()
+ else:
+ return []
+
+ filtered_aliases = []
+ response = requests.get("http://gn2.genenetwork.org/gn3/gene/aliases/" + symbol_string)
+ if response:
+ alias_list = json.loads(response.content)
+
+ seen = set()
+ for item in alias_list:
+ if item in seen:
+ continue
+ else:
+ filtered_aliases.append(item)
+ seen.add(item)
+
+ return filtered_aliases
+
if __name__ == "__main__":
### Usually this will be used as a library, but call it from the command line for testing
### And it runs the code below
@@ -948,7 +942,6 @@ if __name__ == "__main__":
from base import webqtlConfig
from base.data_set import create_dataset
- from base.templatePage import templatePage
from utility import webqtlUtil
from db import webqtlDatabaseFunction
@@ -961,31 +954,6 @@ if __name__ == "__main__":
dataset_name = "HC_M2_0606_P"
dataset = create_dataset(db_conn, dataset_name)
- #cursor.execute("""
- # SELECT ProbeSet.Name as TNAME, 0 as thistable,
- # ProbeSetXRef.Mean as TMEAN, ProbeSetXRef.LRS as TLRS,
- # ProbeSetXRef.PVALUE as TPVALUE, ProbeSet.Chr_num as TCHR_NUM,
- # ProbeSet.Mb as TMB, ProbeSet.Symbol as TSYMBOL,
- # ProbeSet.name_num as TNAME_NUM
- # FROM ProbeSetXRef, ProbeSet, Geno
- # WHERE ProbeSetXRef.LRS > 99.0 and
- # ABS(ProbeSet.Mb-Geno.Mb) < 5 and
- # ProbeSetXRef.Locus = Geno.name and
- # Geno.SpeciesId = 1 and
- # ProbeSet.Chr = Geno.Chr and
- # ProbeSet.Id = ProbeSetXRef.ProbeSetId and
- # ProbeSetXRef.ProbeSetFreezeId = 112""")
-
- #logger.debug(pf(cursor.fetchall()))
- #results = ProbeSetSearch("shh", None, dataset, cursor, db_conn).run()
results = PvalueSearch(['0.005'], '<', dataset, cursor, db_conn).run()
- #results = RifSearch("diabetes", dataset, cursor, db_conn).run()
- #results = WikiSearch("nicotine", dataset, cursor, db_conn).run()
- #results = CisLrsSearch(['99'], '>', dataset, cursor, db_conn).run() # cisLRS > 99
- #results = LrsSearch('99', '>', dataset, cursor, db_conn).run()
- #results = TransLrsSearch(['9', '999', '10'], dataset, cursor, db_conn).run()
- #results = PhenotypeSearch("brain", dataset, cursor, db_conn).run()
- #results = GenotypeSearch("rs13475699", dataset, cursor, db_conn).run()
- #results = GoSearch("0045202", dataset, cursor, db_conn).run()
-
- logger.debug("results are:", pf(results))
+
+ db_conn.close()
diff --git a/wqflask/wqflask/docs.py b/wqflask/wqflask/docs.py
index a8363a1f..0187f32e 100644
--- a/wqflask/wqflask/docs.py
+++ b/wqflask/wqflask/docs.py
@@ -2,9 +2,12 @@ from __future__ import absolute_import, print_function, division
from flask import g
+from utility.logger import getLogger
+logger = getLogger(__name__)
+
class Docs(object):
- def __init__(self, entry):
+ def __init__(self, entry, start_vars={}):
sql = """
SELECT Docs.title, Docs.content
FROM Docs
@@ -12,5 +15,29 @@ class Docs(object):
"""
result = g.db.execute(sql, str(entry)).fetchone()
self.entry = entry
- self.title = result[0]
- self.content = result[1]
+ if result == None:
+ self.title = self.entry.capitalize()
+ self.content = ""
+ else:
+ self.title = result[0]
+ self.content = result[1]
+
+ self.editable = "false"
+ # ZS: Removing option to edit to see if text still gets vandalized
+ try:
+ if g.user_session.record['user_email_address'] == "zachary.a.sloan@gmail.com" or g.user_session.record['user_email_address'] == "labwilliams@gmail.com":
+ self.editable = "true"
+ except:
+ pass
+
+
+def update_text(start_vars):
+ content = start_vars['ckcontent']
+ content = content.replace('%', '%%').replace('"', '\\"').replace("'", "\\'")
+
+ try:
+ if g.user_session.record['user_email_address'] == "zachary.a.sloan@gmail.com" or g.user_session.record['user_email_address'] == "labwilliams@gmail.com":
+ sql = "UPDATE Docs SET content='{0}' WHERE entry='{1}';".format(content, start_vars['entry_type'])
+ g.db.execute(sql)
+ except:
+ pass \ No newline at end of file
diff --git a/wqflask/wqflask/export_traits.py b/wqflask/wqflask/export_traits.py
index f8fce929..2d96c05a 100644
--- a/wqflask/wqflask/export_traits.py
+++ b/wqflask/wqflask/export_traits.py
@@ -1,6 +1,5 @@
from __future__ import print_function, division
-import operator
import csv
import xlsxwriter
import StringIO
@@ -19,23 +18,41 @@ def export_search_results_csv(targs):
buff = StringIO.StringIO()
writer = csv.writer(buff)
+ if 'file_name' in targs:
+ file_name = targs['file_name']
+ else:
+ file_name = "table_export.csv"
+
metadata = []
- metadata.append(["Citations: Please see www.genenetwork.org/reference.html"])
- if targs['database_name'] != "None":
- metadata.append(["Database: " + targs['database_name']])
- metadata.append(["Date: " + datetime.datetime.now().strftime("%B %d, %Y")])
- metadata.append(["Time: " + datetime.datetime.now().strftime("%H:%M GMT")])
- metadata.append(["Status of data ownership: Possibly unpublished data; please see www.genenetwork.org/statusandContact.html for details on sources, ownership, and usage of these data."])
+ if 'database_name' in targs:
+ if targs['database_name'] != "None":
+ metadata.append(["Data Set: " + targs['database_name']])
+ if 'accession_id' in targs:
+ if targs['accession_id'] != "None":
+ metadata.append(["Metadata Link: http://genenetwork.org/webqtl/main.py?FormID=sharinginfo&GN_AccessionId=" + targs['accession_id']])
+ metadata.append(["Export Date: " + datetime.datetime.now().strftime("%B %d, %Y")])
+ metadata.append(["Export Time: " + datetime.datetime.now().strftime("%H:%M GMT")])
+ if 'search_string' in targs:
+ if targs['search_string'] != "None":
+ metadata.append(["Search Query: " + targs['search_string']])
+ if 'filter_term' in targs:
+ if targs['filter_term'] != "None":
+ metadata.append(["Search Filter Terms: " + targs['filter_term']])
+ metadata.append(["Exported Row Number: " + str(len(table_rows))])
for metadata_row in metadata:
writer.writerow(metadata_row)
+ writer.writerow([])
+
writer.writerow(table_headers)
for trait_info in table_rows:
writer.writerow(trait_info)
+ writer.writerow([])
+ writer.writerow(["Funding for The GeneNetwork: NIAAA (U01AA13499, U24AA13513), NIDA, NIMH, and NIAAA (P20-DA21131), NCI MMHCC (U01CA105417), and NCRR (U01NR 105417)"])
csv_data = buff.getvalue()
buff.close()
- return csv_data \ No newline at end of file
+ return csv_data, file_name \ No newline at end of file
diff --git a/wqflask/wqflask/external_tools/__init__.py b/wqflask/wqflask/external_tools/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/wqflask/wqflask/external_tools/__init__.py
diff --git a/wqflask/wqflask/external_tools/send_to_bnw.py b/wqflask/wqflask/external_tools/send_to_bnw.py
new file mode 100644
index 00000000..68efd10d
--- /dev/null
+++ b/wqflask/wqflask/external_tools/send_to_bnw.py
@@ -0,0 +1,72 @@
+## Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License
+# as published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU Affero General Public License for more details.
+#
+# This program is available from Source Forge: at GeneNetwork Project
+# (sourceforge.net/projects/genenetwork/).
+#
+# Contact Dr. Robert W. Williams at rwilliams@uthsc.edu
+#
+#
+# This module is used by GeneNetwork project (www.genenetwork.org)
+
+from __future__ import absolute_import, print_function, division
+
+from base.trait import GeneralTrait
+from utility import helper_functions, corr_result_helpers
+
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
+class SendToBNW(object):
+ def __init__(self, start_vars):
+ trait_db_list = [trait.strip() for trait in start_vars['trait_list'].split(',')]
+ helper_functions.get_trait_db_obs(self, trait_db_list)
+
+ trait_samples_list = []
+
+ for trait_db in self.trait_list:
+ trait_1 = trait_db[0]
+ this_sample_data = trait_1.data
+
+ trait1_samples = list(this_sample_data.keys())
+ trait_samples_list.append(trait1_samples)
+
+ shared_samples = list(set(trait_samples_list[0]).intersection(*trait_samples_list))
+
+ self.form_value = "" #ZS: string that is passed to BNW through form
+ values_list = []
+ for trait_db in self.trait_list:
+ this_trait = trait_db[0]
+ this_sample_data = this_trait.data
+
+ trait_vals = []
+ for sample in this_sample_data:
+ if sample in shared_samples:
+ trait_vals.append(this_sample_data[sample].value)
+
+ values_list.append(trait_vals)
+ self.form_value += "_" + str(this_trait.name) + ","
+
+ values_list = zip(*values_list)
+ self.form_value = self.form_value[:-1]
+ self.form_value += ";"
+
+ for row in values_list:
+ has_none = False
+ for cell in row:
+ if not cell:
+ has_none = True
+ break
+ if has_none:
+ continue
+ self.form_value += ",".join(str(cell) for cell in row)
+ self.form_value += ";" \ No newline at end of file
diff --git a/wqflask/wqflask/external_tools/send_to_geneweaver.py b/wqflask/wqflask/external_tools/send_to_geneweaver.py
new file mode 100644
index 00000000..7a5dba73
--- /dev/null
+++ b/wqflask/wqflask/external_tools/send_to_geneweaver.py
@@ -0,0 +1,112 @@
+## Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License
+# as published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU Affero General Public License for more details.
+#
+# This program is available from Source Forge: at GeneNetwork Project
+# (sourceforge.net/projects/genenetwork/).
+#
+# Contact Dr. Robert W. Williams at rwilliams@uthsc.edu
+#
+#
+# This module is used by GeneNetwork project (www.genenetwork.org)
+
+from __future__ import absolute_import, print_function, division
+
+import string
+
+from flask import Flask, g
+
+from base.trait import GeneralTrait, retrieve_trait_info
+from base.species import TheSpecies
+from utility import helper_functions, corr_result_helpers
+
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
+class SendToGeneWeaver(object):
+ def __init__(self, start_vars):
+ trait_db_list = [trait.strip() for trait in start_vars['trait_list'].split(',')]
+ helper_functions.get_trait_db_obs(self, trait_db_list)
+
+ self.chip_name = test_chip(self.trait_list)
+ self.wrong_input = "False"
+ if self.chip_name == "mixed" or self.chip_name == "not_microarray" or '_NA' in self.chip_name:
+ self.wrong_input = "True"
+ else:
+ species = self.trait_list[0][1].group.species
+ if species == "rat":
+ species_name = "Rattus norvegicus"
+ elif species == "human":
+ species_name = "Homo sapiens"
+ elif species == "mouse":
+ species_name = "Mus musculus"
+ else:
+ species_name = ""
+
+ trait_name_list = get_trait_name_list(self.trait_list)
+
+ self.hidden_vars = {
+ 'client' : "genenetwork",
+ 'species' : species_name,
+ 'idtype' : self.chip_name,
+ 'list' : string.join(trait_name_list, ","),
+ }
+
+def get_trait_name_list(trait_list):
+ name_list = []
+ for trait_db in trait_list:
+ name_list.append(trait_db[0].name)
+
+ return name_list
+
+def test_chip(trait_list):
+ final_chip_name = ""
+
+ for trait_db in trait_list:
+ dataset = trait_db[1]
+ result = g.db.execute("""SELECT GeneChip.GO_tree_value
+ FROM GeneChip, ProbeFreeze, ProbeSetFreeze
+ WHERE GeneChip.Id = ProbeFreeze.ChipId and
+ ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and
+ ProbeSetFreeze.Name = '%s'""" % dataset.name).fetchone()
+
+ if result:
+ chip_name = result[0]
+ if chip_name:
+ if chip_name != final_chip_name:
+ if final_chip_name:
+ return "mixed"
+ else:
+ final_chip_name = chip_name
+ else:
+ pass
+ else:
+ result = g.db.execute("""SELECT GeneChip.Name
+ FROM GeneChip, ProbeFreeze, ProbeSetFreeze
+ WHERE GeneChip.Id = ProbeFreeze.ChipId and
+ ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and
+ ProbeSetFreeze.Name = '%s'""" % dataset.name).fetchone()
+ chip_name = '%s_NA' % result[0]
+ return chip_name
+ else:
+ query = """SELECT GeneChip.Name
+ FROM GeneChip, ProbeFreeze, ProbeSetFreeze
+ WHERE GeneChip.Id = ProbeFreeze.ChipId and
+ ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and
+ ProbeSetFreeze.Name = '%s'""" % dataset.name
+ result = g.db.execute(query).fetchone()
+ if result == None:
+ return "not_microarray"
+ else:
+ chip_name = '%s_NA' % result[0]
+ return chip_name
+
+ return chip_name \ No newline at end of file
diff --git a/wqflask/wqflask/external_tools/send_to_webgestalt.py b/wqflask/wqflask/external_tools/send_to_webgestalt.py
new file mode 100644
index 00000000..30ca024f
--- /dev/null
+++ b/wqflask/wqflask/external_tools/send_to_webgestalt.py
@@ -0,0 +1,126 @@
+## Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU Affero General Public License
+# as published by the Free Software Foundation, either version 3 of the
+# License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the GNU Affero General Public License for more details.
+#
+# This program is available from Source Forge: at GeneNetwork Project
+# (sourceforge.net/projects/genenetwork/).
+#
+# Contact Dr. Robert W. Williams at rwilliams@uthsc.edu
+#
+#
+# This module is used by GeneNetwork project (www.genenetwork.org)
+
+from __future__ import absolute_import, print_function, division
+
+import string
+
+from flask import Flask, g
+
+from base.trait import GeneralTrait, retrieve_trait_info
+from base.species import TheSpecies
+from utility import helper_functions, corr_result_helpers
+
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
+class SendToWebGestalt(object):
+ def __init__(self, start_vars):
+ trait_db_list = [trait.strip() for trait in start_vars['trait_list'].split(',')]
+ helper_functions.get_trait_db_obs(self, trait_db_list)
+
+ self.chip_name = test_chip(self.trait_list)
+
+ self.wrong_input = "False"
+ if self.chip_name == "mixed" or self.chip_name == "not_microarray" or '_NA' in self.chip_name:
+ self.wrong_input = "True"
+ else:
+ trait_name_list, gene_id_list = gen_gene_id_list(self.trait_list)
+
+ self.target_url = "http://www.webgestalt.org/option.php"
+
+ id_type = "entrezgene"
+
+ self.hidden_vars = {
+ 'gene_list' : string.join(gene_id_list, "\n"),
+ 'id_type' : "entrezgene",
+ 'ref_set' : "genome",
+ 'enriched_database_category' : "geneontology",
+ 'enriched_database_name' : "Biological_Process",
+ 'sig_method' : "fdr",
+ 'sig_value' : "0.05",
+ 'enrich_method' : "ORA",
+ 'fdr_method' : "BH",
+ 'min_num' : "2"
+ }
+
+ species = self.trait_list[0][1].group.species
+ if species == "rat":
+ self.hidden_vars['organism'] = "rnorvegicus"
+ elif species == "human":
+ self.hidden_vars['organism'] = "hsapiens"
+ elif species == "mouse":
+ self.hidden_vars['organism'] = "mmusculus"
+ else:
+ self.hidden_vars['organism'] = "others"
+
+def test_chip(trait_list):
+ final_chip_name = ""
+
+ for trait_db in trait_list:
+ dataset = trait_db[1]
+ result = g.db.execute("""SELECT GeneChip.GO_tree_value
+ FROM GeneChip, ProbeFreeze, ProbeSetFreeze
+ WHERE GeneChip.Id = ProbeFreeze.ChipId and
+ ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and
+ ProbeSetFreeze.Name = '%s'""" % dataset.name).fetchone()
+
+ if result:
+ chip_name = result[0]
+ if chip_name:
+ if chip_name != final_chip_name:
+ if final_chip_name:
+ return "mixed"
+ else:
+ final_chip_name = chip_name
+ else:
+ pass
+ else:
+ result = g.db.execute("""SELECT GeneChip.Name
+ FROM GeneChip, ProbeFreeze, ProbeSetFreeze
+ WHERE GeneChip.Id = ProbeFreeze.ChipId and
+ ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and
+ ProbeSetFreeze.Name = '%s'""" % dataset.name).fetchone()
+ chip_name = '%s_NA' % result[0]
+ return chip_name
+ else:
+ query = """SELECT GeneChip.Name
+ FROM GeneChip, ProbeFreeze, ProbeSetFreeze
+ WHERE GeneChip.Id = ProbeFreeze.ChipId and
+ ProbeSetFreeze.ProbeFreezeId = ProbeFreeze.Id and
+ ProbeSetFreeze.Name = '%s'""" % dataset.name
+ result = g.db.execute(query).fetchone()
+ if result == None:
+ return "not_microarray"
+ else:
+ chip_name = '%s_NA' % result[0]
+ return chip_name
+
+ return chip_name
+
+def gen_gene_id_list(trait_list):
+ trait_name_list = []
+ gene_id_list = []
+ for trait_db in trait_list:
+ trait = trait_db[0]
+ trait_name_list.append(trait.name)
+ retrieve_trait_info(trait, trait.dataset)
+ gene_id_list.append(str(trait.geneid))
+ return trait_name_list, gene_id_list \ No newline at end of file
diff --git a/wqflask/wqflask/gsearch.py b/wqflask/wqflask/gsearch.py
index e33e04e1..3d9b508a 100644
--- a/wqflask/wqflask/gsearch.py
+++ b/wqflask/wqflask/gsearch.py
@@ -1,10 +1,17 @@
from __future__ import absolute_import, print_function, division
+import json
+
from flask import Flask, g
from base.data_set import create_dataset
from base.trait import GeneralTrait
from db import webqtlDatabaseFunction
+from base import webqtlConfig
+
+from utility import hmac
+
+from utility.type_checking import is_float, is_int, is_str, get_float, get_int, get_string
from utility.benchmark import Bench
from utility.logger import getLogger
@@ -13,8 +20,13 @@ logger = getLogger(__name__)
class GSearch(object):
def __init__(self, kw):
+ assert('type' in kw)
+ assert('terms' in kw)
+
self.type = kw['type']
self.terms = kw['terms']
+ assert(is_str(self.type))
+
if self.type == "gene":
sql = """
SELECT
@@ -22,6 +34,7 @@ class GSearch(object):
InbredSet.`Name` AS inbredset_name,
Tissue.`Name` AS tissue_name,
ProbeSetFreeze.Name AS probesetfreeze_name,
+ ProbeSetFreeze.FullName AS probesetfreeze_fullname,
ProbeSet.Name AS probeset_name,
ProbeSet.Symbol AS probeset_symbol,
ProbeSet.`description` AS probeset_description,
@@ -48,53 +61,176 @@ class GSearch(object):
with Bench("Running query"):
logger.sql(sql)
re = g.db.execute(sql).fetchall()
- self.trait_list = []
+
+ trait_list = []
with Bench("Creating trait objects"):
- for line in re:
- dataset = create_dataset(line[3], "ProbeSet", get_samplelist=False)
- trait_id = line[4]
+ for i, line in enumerate(re):
+ this_trait = {}
+ this_trait['index'] = i + 1
+ this_trait['name'] = line[5]
+ this_trait['dataset'] = line[3]
+ this_trait['dataset_fullname'] = line[4]
+ this_trait['hmac'] = hmac.data_hmac('{}:{}'.format(line[5], line[3]))
+ this_trait['species'] = line[0]
+ this_trait['group'] = line[1]
+ this_trait['tissue'] = line[2]
+ this_trait['symbol'] = line[6]
+ this_trait['description'] = line[7].decode('utf-8', 'replace')
+ this_trait['location_repr'] = 'N/A'
+ if (line[8] != "NULL" and line[8] != "") and (line[9] != 0):
+ this_trait['location_repr'] = 'Chr%s: %.6f' % (line[8], float(line[9]))
+ try:
+ this_trait['mean'] = '%.3f' % line[10]
+ except:
+ this_trait['mean'] = "N/A"
+ this_trait['LRS_score_repr'] = "N/A"
+ if line[11] != "" and line[11] != None:
+ this_trait['LRS_score_repr'] = '%3.1f' % line[11]
+ this_trait['additive'] = "N/A"
+ if line[14] != "" and line[14] != None:
+ this_trait['additive'] = '%.3f' % line[14]
+
+ #dataset = create_dataset(line[3], "ProbeSet", get_samplelist=False)
+ #trait_id = line[4]
#with Bench("Building trait object"):
- this_trait = GeneralTrait(dataset=dataset, name=trait_id, get_qtl_info=True, get_sample_info=False)
- self.trait_list.append(this_trait)
+ trait_ob = GeneralTrait(dataset_name=this_trait['dataset'], name=this_trait['name'], get_qtl_info=True, get_sample_info=False)
+ max_lrs_text = "N/A"
+ if trait_ob.locus_chr != "" and trait_ob.locus_mb != "":
+ max_lrs_text = "Chr" + str(trait_ob.locus_chr) + ": " + str(trait_ob.locus_mb)
+ this_trait['max_lrs_text'] = max_lrs_text
+
+ trait_list.append(this_trait)
+
+ self.trait_count = len(trait_list)
+ self.trait_list = json.dumps(trait_list)
+
+ self.header_fields = ['Index',
+ 'Record',
+ 'Species',
+ 'Group',
+ 'Tissue',
+ 'Dataset',
+ 'Symbol',
+ 'Description',
+ 'Location',
+ 'Mean',
+ 'Max LRS',
+ 'Max LRS Location',
+ 'Additive Effect']
elif self.type == "phenotype":
+ search_term = self.terms
+ group_clause = ""
+ if "_" in self.terms:
+ if len(self.terms.split("_")[0]) == 3:
+ search_term = self.terms.split("_")[1]
+ group_clause = "AND InbredSet.`InbredSetCode` = '{}'".format(self.terms.split("_")[0])
sql = """
SELECT
Species.`Name`,
InbredSet.`Name`,
PublishFreeze.`Name`,
+ PublishFreeze.`FullName`,
PublishXRef.`Id`,
+ Phenotype.`Pre_publication_description`,
Phenotype.`Post_publication_description`,
Publication.`Authors`,
Publication.`Year`,
+ Publication.`PubMed_ID`,
PublishXRef.`LRS`,
- PublishXRef.`Locus`,
- PublishXRef.`additive`
+ PublishXRef.`additive`,
+ InbredSet.`InbredSetCode`,
+ PublishXRef.`mean`
FROM Species,InbredSet,PublishFreeze,PublishXRef,Phenotype,Publication
WHERE PublishXRef.`InbredSetId`=InbredSet.`Id`
AND PublishFreeze.`InbredSetId`=InbredSet.`Id`
AND InbredSet.`SpeciesId`=Species.`Id`
+ {0}
AND PublishXRef.`PhenotypeId`=Phenotype.`Id`
AND PublishXRef.`PublicationId`=Publication.`Id`
- AND (Phenotype.Post_publication_description REGEXP "[[:<:]]%s[[:>:]]"
- OR Phenotype.Pre_publication_description REGEXP "[[:<:]]%s[[:>:]]"
- OR Phenotype.Pre_publication_abbreviation REGEXP "[[:<:]]%s[[:>:]]"
- OR Phenotype.Post_publication_abbreviation REGEXP "[[:<:]]%s[[:>:]]"
- OR Phenotype.Lab_code REGEXP "[[:<:]]%s[[:>:]]"
- OR Publication.PubMed_ID REGEXP "[[:<:]]%s[[:>:]]"
- OR Publication.Abstract REGEXP "[[:<:]]%s[[:>:]]"
- OR Publication.Title REGEXP "[[:<:]]%s[[:>:]]"
- OR Publication.Authors REGEXP "[[:<:]]%s[[:>:]]"
- OR PublishXRef.Id REGEXP "[[:<:]]%s[[:>:]]")
+ AND (Phenotype.Post_publication_description REGEXP "[[:<:]]{1}[[:>:]]"
+ OR Phenotype.Pre_publication_description REGEXP "[[:<:]]{1}[[:>:]]"
+ OR Phenotype.Pre_publication_abbreviation REGEXP "[[:<:]]{1}[[:>:]]"
+ OR Phenotype.Post_publication_abbreviation REGEXP "[[:<:]]{1}[[:>:]]"
+ OR Phenotype.Lab_code REGEXP "[[:<:]]{1}[[:>:]]"
+ OR Publication.PubMed_ID REGEXP "[[:<:]]{1}[[:>:]]"
+ OR Publication.Abstract REGEXP "[[:<:]]{1}[[:>:]]"
+ OR Publication.Title REGEXP "[[:<:]]{1}[[:>:]]"
+ OR Publication.Authors REGEXP "[[:<:]]{1}[[:>:]]"
+ OR PublishXRef.Id REGEXP "[[:<:]]{1}[[:>:]]")
ORDER BY Species.`Name`, InbredSet.`Name`, PublishXRef.`Id`
LIMIT 6000
- """ % (self.terms, self.terms, self.terms, self.terms, self.terms, self.terms, self.terms, self.terms, self.terms, self.terms)
+ """.format(group_clause, search_term)
logger.sql(sql)
re = g.db.execute(sql).fetchall()
- self.trait_list = []
+ trait_list = []
with Bench("Creating trait objects"):
- for line in re:
- dataset = create_dataset(line[2], "Publish")
- trait_id = line[3]
- this_trait = GeneralTrait(dataset=dataset, name=trait_id, get_qtl_info=True, get_sample_info=False)
- self.trait_list.append(this_trait)
+ for i, line in enumerate(re):
+ this_trait = {}
+ this_trait['index'] = i + 1
+ this_trait['name'] = str(line[4])
+ if len(str(line[12])) == 3:
+ this_trait['display_name'] = str(line[12]) + "_" + this_trait['name']
+ else:
+ this_trait['display_name'] = this_trait['name']
+ this_trait['dataset'] = line[2]
+ this_trait['dataset_fullname'] = line[3]
+ this_trait['hmac'] = hmac.data_hmac('{}:{}'.format(line[4], line[2]))
+ this_trait['species'] = line[0]
+ this_trait['group'] = line[1]
+ if line[9] != None and line[6] != None:
+ this_trait['description'] = line[6].decode('utf-8', 'replace')
+ elif line[5] != None:
+ this_trait['description'] = line[5].decode('utf-8', 'replace')
+ else:
+ this_trait['description'] = "N/A"
+ if line[13] != None and line[13] != "":
+ this_trait['mean'] = line[13]
+ else:
+ this_trait['mean'] = "N/A"
+ this_trait['authors'] = line[7]
+ this_trait['year'] = line[8]
+ if this_trait['year'].isdigit():
+ this_trait['pubmed_text'] = this_trait['year']
+ else:
+ this_trait['pubmed_text'] = "N/A"
+ if line[9] != "" and line[9] != None:
+ this_trait['pubmed_link'] = webqtlConfig.PUBMEDLINK_URL % line[8]
+ else:
+ this_trait['pubmed_link'] = "N/A"
+ if line[12]:
+ this_trait['display_name'] = line[12] + "_" + str(this_trait['name'])
+ this_trait['LRS_score_repr'] = "N/A"
+ if line[10] != "" and line[10] != None:
+ this_trait['LRS_score_repr'] = '%3.1f' % line[10]
+ this_trait['additive'] = "N/A"
+ if line[11] != "" and line[11] != None:
+ this_trait['additive'] = '%.3f' % line[11]
+
+ #dataset = create_dataset(line[2], "Publish")
+ #trait_id = line[3]
+ #this_trait = GeneralTrait(dataset=dataset, name=trait_id, get_qtl_info=True, get_sample_info=False)
+ this_trait['max_lrs_text'] = "N/A"
+ if this_trait['dataset'] == this_trait['group'] + "Publish":
+ try:
+ trait_ob = GeneralTrait(dataset_name=this_trait['dataset'], name=this_trait['name'], get_qtl_info=True, get_sample_info=False)
+ if trait_ob.locus_chr != "" and trait_ob.locus_mb != "":
+ this_trait['max_lrs_text'] = "Chr" + str(trait_ob.locus_chr) + ": " + str(trait_ob.locus_mb)
+ except:
+ this_trait['max_lrs_text'] = "N/A"
+
+ trait_list.append(this_trait)
+
+ self.trait_count = len(trait_list)
+ self.trait_list = json.dumps(trait_list)
+
+ self.header_fields = ['Index',
+ 'Species',
+ 'Group',
+ 'Record',
+ 'Description',
+ 'Authors',
+ 'Year',
+ 'Max LRS',
+ 'Max LRS Location',
+ 'Additive Effect']
diff --git a/wqflask/wqflask/heatmap/heatmap.py b/wqflask/wqflask/heatmap/heatmap.py
index 56ff11cd..e82aa0ef 100644
--- a/wqflask/wqflask/heatmap/heatmap.py
+++ b/wqflask/wqflask/heatmap/heatmap.py
@@ -3,7 +3,6 @@ from __future__ import absolute_import, print_function, division
import sys
# sys.path.append(".") Never in a running webserver
-import gc
import string
import cPickle
import os
@@ -11,27 +10,25 @@ import datetime
import time
import pp
import math
+import random
import collections
import resource
import scipy
import numpy as np
-from scipy import linalg
from pprint import pformat as pf
-from htmlgen import HTMLgen2 as HT
import reaper
from base.trait import GeneralTrait
from base import data_set
from base import species
-# from wqflask.my_pylmm.pyLMM import lmm
-# from wqflask.my_pylmm.pyLMM import input
+from base import webqtlConfig
from utility import helper_functions
from utility import Plot, Bunch
from utility import temp_data
-from utility.tools import PYLMM_COMMAND
+from utility.tools import flat_files, REAPER_COMMAND, TEMPDIR
from MySQLdb import escape_string as escape
@@ -45,12 +42,13 @@ Redis = Redis()
from flask import Flask, g
+from utility.logger import getLogger
+logger = getLogger(__name__ )
+
class Heatmap(object):
def __init__(self, start_vars, temp_uuid):
-
trait_db_list = [trait.strip() for trait in start_vars['trait_list'].split(',')]
-
helper_functions.get_trait_db_obs(self, trait_db_list)
self.temp_uuid = temp_uuid
@@ -82,21 +80,16 @@ class Heatmap(object):
this_trait = trait_db[0]
this_sample_data = this_trait.data
- #self.sample_data[this_trait.name] = []
this_trait_vals = []
for sample in self.all_sample_list:
if sample in this_sample_data:
this_trait_vals.append(this_sample_data[sample].value)
- #self.sample_data[this_trait.name].append(this_sample_data[sample].value)
else:
this_trait_vals.append('')
- #self.sample_data[this_trait.name].append('')
self.sample_data.append(this_trait_vals)
self.gen_reaper_results()
- #self.gen_pylmm_results()
- #chrnames = []
lodnames = []
chr_pos = []
pos = []
@@ -105,10 +98,8 @@ class Heatmap(object):
for trait in self.trait_results.keys():
lodnames.append(trait)
+ self.dataset.group.get_markers()
for marker in self.dataset.group.markers.markers:
- #if marker['chr'] not in chrnames:
- # chr_ob = [marker['chr'], "filler"]
- # chrnames.append(chr_ob)
chr_pos.append(marker['chr'])
pos.append(marker['Mb'])
markernames.append(marker['name'])
@@ -126,191 +117,94 @@ class Heatmap(object):
json_data = self.json_data
)
- print("self.js_data:", self.js_data)
-
-
def gen_reaper_results(self):
self.trait_results = {}
for trait_db in self.trait_list:
self.dataset.group.get_markers()
this_trait = trait_db[0]
- #this_db = trait_db[1]
- genotype = self.dataset.group.read_genotype_file()
+
+ genotype = self.dataset.group.read_genotype_file(use_reaper=False)
samples, values, variances, sample_aliases = this_trait.export_informative()
+ if self.dataset.group.genofile != None:
+ genofile_name = self.dataset.group.genofile[:-5]
+ else:
+ genofile_name = self.dataset.group.name
+
trimmed_samples = []
trimmed_values = []
for i in range(0, len(samples)):
if samples[i] in self.dataset.group.samplelist:
- trimmed_samples.append(samples[i])
+ trimmed_samples.append(str(samples[i]))
trimmed_values.append(values[i])
- self.lrs_array = genotype.permutation(strains = trimmed_samples,
- trait = trimmed_values,
- nperm= self.num_permutations)
+ trait_filename = str(this_trait.name) + "_" + str(self.dataset.name) + "_pheno"
+ gen_pheno_txt_file(trimmed_samples, trimmed_values, trait_filename)
- #self.suggestive = self.lrs_array[int(self.num_permutations*0.37-1)]
- #self.significant = self.lrs_array[int(self.num_permutations*0.95-1)]
+ output_filename = self.dataset.group.name + "_GWA_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
- reaper_results = genotype.regression(strains = trimmed_samples,
- trait = trimmed_values)
+ reaper_command = REAPER_COMMAND + ' --geno {0}/{1}.geno --traits {2}/gn2/{3}.txt -n 1000 -o {4}{5}.txt'.format(flat_files('genotype'),
+ genofile_name,
+ TEMPDIR,
+ trait_filename,
+ webqtlConfig.GENERATED_IMAGE_DIR,
+ output_filename)
+ os.system(reaper_command)
- lrs_values = [float(qtl.lrs) for qtl in reaper_results]
- print("lrs_values:", lrs_values)
- #self.dataset.group.markers.add_pvalues(p_values)
+ reaper_results = parse_reaper_output(output_filename)
+
+ lrs_values = [float(qtl['lrs_value']) for qtl in reaper_results]
self.trait_results[this_trait.name] = []
for qtl in reaper_results:
- if qtl.additive > 0:
- self.trait_results[this_trait.name].append(-float(qtl.lrs))
- else:
- self.trait_results[this_trait.name].append(float(qtl.lrs))
- #for lrs in lrs_values:
- # if
- # self.trait_results[this_trait.name].append(lrs)
-
-
- #this_db_samples = self.dataset.group.samplelist
- #this_sample_data = this_trait.data
- ##print("this_sample_data", this_sample_data)
- #this_trait_vals = []
- #for index, sample in enumerate(this_db_samples):
- # if sample in this_sample_data:
- # sample_value = this_sample_data[sample].value
- # this_trait_vals.append(sample_value)
- # else:
- # this_trait_vals.append("x")
-
- #pheno_vector = np.array([val == "x" and np.nan or float(val) for val in this_trait_vals])
-
- #key = "pylmm:input:" + str(self.temp_uuid)
- #print("key is:", pf(key))
-
- #genotype_data = [marker['genotypes'] for marker in self.dataset.group.markers.markers]
-
- #no_val_samples = self.identify_empty_samples(this_trait_vals)
- #trimmed_genotype_data = self.trim_genotypes(genotype_data, no_val_samples)
-
- #genotype_matrix = np.array(trimmed_genotype_data).T
-
- #print("genotype_matrix:", str(genotype_matrix.tolist()))
- #print("pheno_vector:", str(pheno_vector.tolist()))
-
- #params = dict(pheno_vector = pheno_vector.tolist(),
- # genotype_matrix = genotype_matrix.tolist(),
- # restricted_max_likelihood = True,
- # refit = False,
- # temp_uuid = str(self.temp_uuid),
- #
- # # meta data
- # timestamp = datetime.datetime.now().isoformat(),
- # )
- #
- #json_params = json.dumps(params)
- ##print("json_params:", json_params)
- #Redis.set(key, json_params)
- #Redis.expire(key, 60*60)
- #print("before printing command")
- #
- #command = 'python lmm.py --key {} --species {}'.format(key,
- # "other")
- #print("command is:", command)
- #print("after printing command")
- #
- #os.system(command)
- #
- #json_results = Redis.blpop("pylmm:results:" + str(self.temp_uuid), 45*60)
-
- def gen_pylmm_results(self):
- # This function is NOT used. If it is, we should use a shared function with marker_regression.py
- self.trait_results = {}
- for trait_db in self.trait_list:
- this_trait = trait_db[0]
- #this_db = trait_db[1]
- self.dataset.group.get_markers()
-
- this_db_samples = self.dataset.group.samplelist
- this_sample_data = this_trait.data
- #print("this_sample_data", this_sample_data)
- this_trait_vals = []
- for index, sample in enumerate(this_db_samples):
- if sample in this_sample_data:
- sample_value = this_sample_data[sample].value
- this_trait_vals.append(sample_value)
+ if qtl['additive'] > 0:
+ self.trait_results[this_trait.name].append(-float(qtl['lrs_value']))
else:
- this_trait_vals.append("x")
-
- pheno_vector = np.array([val == "x" and np.nan or float(val) for val in this_trait_vals])
-
- key = "pylmm:input:" + str(self.temp_uuid)
- #print("key is:", pf(key))
-
- genotype_data = [marker['genotypes'] for marker in self.dataset.group.markers.markers]
-
- no_val_samples = self.identify_empty_samples(this_trait_vals)
- trimmed_genotype_data = self.trim_genotypes(genotype_data, no_val_samples)
-
- genotype_matrix = np.array(trimmed_genotype_data).T
-
- #print("genotype_matrix:", str(genotype_matrix.tolist()))
- #print("pheno_vector:", str(pheno_vector.tolist()))
-
- params = dict(pheno_vector = pheno_vector.tolist(),
- genotype_matrix = genotype_matrix.tolist(),
- restricted_max_likelihood = True,
- refit = False,
- temp_uuid = str(self.temp_uuid),
-
- # meta data
- timestamp = datetime.datetime.now().isoformat(),
- )
-
- json_params = json.dumps(params)
- #print("json_params:", json_params)
- Redis.set(key, json_params)
- Redis.expire(key, 60*60)
- print("before printing command")
-
- command = PYLMM_COMMAND+' --key {} --species {}'.format(key,
- "other")
- print("command is:", command)
- print("after printing command")
-
- os.system(command)
-
- json_results = Redis.blpop("pylmm:results:" + str(self.temp_uuid), 45*60)
- results = json.loads(json_results[1])
- p_values = [float(result) for result in results['p_values']]
- #print("p_values:", p_values)
- self.dataset.group.markers.add_pvalues(p_values)
-
- self.trait_results[this_trait.name] = []
- for marker in self.dataset.group.markers.markers:
- self.trait_results[this_trait.name].append(marker['lod_score'])
-
-
- def identify_empty_samples(self, values):
- no_val_samples = []
- for sample_count, val in enumerate(values):
- if val == "x":
- no_val_samples.append(sample_count)
- return no_val_samples
-
- def trim_genotypes(self, genotype_data, no_value_samples):
- trimmed_genotype_data = []
- for marker in genotype_data:
- new_genotypes = []
- for item_count, genotype in enumerate(marker):
- if item_count in no_value_samples:
- continue
+ self.trait_results[this_trait.name].append(float(qtl['lrs_value']))
+
+def gen_pheno_txt_file(samples, vals, filename):
+ """Generates phenotype file for GEMMA"""
+
+ with open("{0}/gn2/{1}.txt".format(TEMPDIR, filename), "w") as outfile:
+ outfile.write("Trait\t")
+
+ filtered_sample_list = []
+ filtered_vals_list = []
+ for i, sample in enumerate(samples):
+ if vals[i] != "x":
+ filtered_sample_list.append(sample)
+ filtered_vals_list.append(str(vals[i]))
+
+ samples_string = "\t".join(filtered_sample_list)
+ outfile.write(samples_string + "\n")
+ outfile.write("T1\t")
+ values_string = "\t".join(filtered_vals_list)
+ outfile.write(values_string)
+
+def parse_reaper_output(gwa_filename):
+ included_markers = []
+ p_values = []
+ marker_obs = []
+
+ with open("{}{}.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, gwa_filename)) as output_file:
+ for line in output_file:
+ if line.startswith("ID\t"):
+ continue
+ else:
+ marker = {}
+ marker['name'] = line.split("\t")[1]
try:
- genotype = float(genotype)
- except ValueError:
- genotype = np.nan
- pass
- new_genotypes.append(genotype)
- trimmed_genotype_data.append(new_genotypes)
- return trimmed_genotype_data
-
-
+ marker['chr'] = int(line.split("\t")[2])
+ except:
+ marker['chr'] = line.split("\t")[2]
+ marker['cM'] = float(line.split("\t")[3])
+ marker['Mb'] = float(line.split("\t")[4])
+ if float(line.split("\t")[7]) != 1:
+ marker['p_value'] = float(line.split("\t")[7])
+ marker['lrs_value'] = float(line.split("\t")[5])
+ marker['lod_score'] = marker['lrs_value'] / 4.61
+ marker['additive'] = float(line.split("\t")[6])
+ marker_obs.append(marker)
+
+ return marker_obs \ No newline at end of file
diff --git a/wqflask/wqflask/interval_analyst/GeneUtil.py b/wqflask/wqflask/interval_analyst/GeneUtil.py
index fda7773f..2c60dd70 100644
--- a/wqflask/wqflask/interval_analyst/GeneUtil.py
+++ b/wqflask/wqflask/interval_analyst/GeneUtil.py
@@ -6,7 +6,7 @@ from flask import Flask, g
#Just return a list of dictionaries
#each dictionary contains sub-dictionary
-def loadGenes(chrName, diffCol, startMb, endMb, webqtlDb =None, species='mouse'):
+def loadGenes(chrName, diffCol, startMb, endMb, species='mouse'):
fetchFields = ['SpeciesId', 'Id', 'GeneSymbol', 'GeneDescription', 'Chromosome', 'TxStart', 'TxEnd',
'Strand', 'GeneID', 'NM_ID', 'kgID', 'GenBankID', 'UnigenID', 'ProteinID', 'AlignID',
'exonCount', 'exonStarts', 'exonEnds', 'cdsStart', 'cdsEnd']
diff --git a/wqflask/wqflask/interval_analyst/IntervalAnalystPage.py b/wqflask/wqflask/interval_analyst/IntervalAnalystPage.py
deleted file mode 100644
index c5cf9e7f..00000000
--- a/wqflask/wqflask/interval_analyst/IntervalAnalystPage.py
+++ /dev/null
@@ -1,405 +0,0 @@
-# Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
-#
-# This program is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Affero General Public License
-# as published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the GNU Affero General Public License for more details.
-#
-# This program is available from Source Forge: at GeneNetwork Project
-# (sourceforge.net/projects/genenetwork/).
-#
-# Contact Drs. Robert W. Williams and Xiaodong Zhou (2010)
-# at rwilliams@uthsc.edu and xzhou15@uthsc.edu
-#
-#
-#
-# This module is used by GeneNetwork project (www.genenetwork.org)
-#
-# Created by GeneNetwork Core Team 2010/08/10
-#
-# Last updated by GeneNetwork Core Team 2010/10/20
-
-from mod_python import apache, util, Cookie
-import os
-import time
-import pyXLWriter as xl
-
-from htmlgen import HTMLgen2 as HT
-
-import GeneUtil
-from base.templatePage import templatePage
-from utility import webqtlUtil
-from base import webqtlConfig
-
-
-class IntervalAnalystPage(templatePage):
- filename = webqtlUtil.genRandStr("Itan_")
-
- _scriptfile = "main.py?FormID=intervalAnalyst"
-
- #A dictionary that lets us map the html form names "txStart_mm6" -> "Mb Start (mm8)"
- #the first item is the short name (column headers) and the second item is the long name (dropdown list)
- # [short name, long name, category]
- columnNames = {"GeneSymbol" : ["Gene", "Gene Name", 'gene'],
- "GeneDescription" : ["Description", "Gene Description", 'species'],
- 'GeneNeighborsCount' : ["Neighbors", "Gene Neighbors", 'gene'],
- 'GeneNeighborsRange' : ["Neighborhood", "Gene Neighborhood (Mb)", 'gene'],
- 'GeneNeighborsDensity' : ["Gene Density", "Gene Density (Neighbors/Mb)", 'gene'],
- "ProteinID" : ["Prot ID", "Protein ID", 'protein'],
- "Chromosome" : ["Chr", "Chromosome", 'species'],
- "TxStart" : ["Start", "Mb Start", 'species'],
- "TxEnd" : ["End", "Mb End", 'species'],
- "GeneLength" : ["Length", "Kb Length", 'species'],
- "cdsStart" : ["CDS Start", "Mb CDS Start", 'species'],
- "cdsEnd" : ["CDS End", "Mb CDS End", 'species'],
- "exonCount" : ["Num Exons", "Exon Count", 'species'],
- "exonStarts" : ["Exon Starts", "Exon Starts", 'species'],
- "exonEnds" : ["Exon Ends", "Exon Ends", 'species'],
- "Strand" : ["Strand", "Strand", 'species'],
- "GeneID" : ["Gene ID", "Gene ID", 'species'],
- "GenBankID" : ["GenBank", "GenBank ID", 'species'],
- "UnigenID" : ["Unigen", "Unigen ID", 'species'],
- "NM_ID" : ["NM ID", "NM ID", 'species'],
- "kgID" : ["kg ID", "kg ID", 'species'],
- "snpCount" : ["SNPs", "SNP Count", 'species'],
- "snpDensity" : ["SNP Density", "SNP Density", 'species'],
- "lrs" : ["LRS", "Likelihood Ratio Statistic", 'misc'],
- "lod" : ["LOD", "Likelihood Odds Ratio", 'misc'],
- "pearson" : ["Pearson", "Pearson Product Moment", 'misc'],
- "literature" : ["Lit Corr", "Literature Correlation", 'misc'],
- }
-
- ###Species Freeze
- speciesFreeze = {'mouse':'mm9', 'rat':'rn3', 'human':'hg19'}
- for key in speciesFreeze.keys():
- speciesFreeze[speciesFreeze[key]] = key
-
- def __init__(self, fd):
-
- templatePage.__init__(self, fd)
-
- fd.formdata['remote_ip'] = fd.remote_ip
- if not self.openMysql():
- return
-
- self.species = fd.formdata.getvalue("species", "mouse")
- try:
- self.startMb = float(fd.formdata.getvalue("startMb"))
- except:
- self.startMb = 10
- try:
- self.endMb = float(fd.formdata.getvalue("endMb"))
- except:
- self.endMb = self.startMb + 10
-
- self.Chr = fd.formdata.getvalue("chromosome", "1")
- self.xls = fd.formdata.getvalue("xls", "1")
- try:
- s1 = int(fd.formdata.getvalue("s1"))
- s2 = int(fd.formdata.getvalue("s2"))
- self.diffColDefault = self.diffCol = [s1, s2]
- except:
- self.diffColDefault = self.diffCol = []
- if self.species != 'mouse':
- self.diffColDefault = [2, 3]#default is B6 and D2 for other species
-
- controlFrm, dispFields = self.genControlForm(fd)
- geneTable, filename = self.genGeneTable(fd, dispFields)
-
- infoTD = HT.TD(width=400, valign= "top")
- infoTD.append(HT.Paragraph("Interval Analyst : Chr %s" % self.Chr, Class="title"),
- HT.Strong("Species : "), self.species.title(), HT.BR(),
- HT.Strong("Database : "), "UCSC %s" % self.speciesFreeze[self.species], HT.BR(),
- HT.Strong("Range : "), "%2.6f Mb - %2.6f Mb" % (self.startMb, self.endMb), HT.BR(),
- )
- if filename:
- infoTD.append(HT.BR(), HT.BR(), HT.Href(text="Download", url = "/tmp/" + filename, Class="normalsize")
- , " output in MS excel format.")
-
- mainTable = HT.TableLite(HT.TR(infoTD, HT.TD(controlFrm, Class="doubleBorder", width=400), HT.TD("&nbsp;", width="")), cellpadding=10)
- mainTable.append(HT.TR(HT.TD(geneTable, colspan=3)))
- self.dict['body'] = HT.TD(mainTable)
- self.dict['title'] = "Interval Analyst"
-
- def genGeneTable(self, fd, dispFields):
- filename = ""
- if self.xls:
- #import pyXLWriter as xl
- filename = "IntAn_Chr%s_%2.6f-%2.6f" % (self.Chr, self.startMb, self.endMb)
- filename += ".xls"
-
- # Create a new Excel workbook
- workbook = xl.Writer(os.path.join(webqtlConfig.TMPDIR, filename))
- worksheet = workbook.add_worksheet()
- titleStyle = workbook.add_format(align = 'left', bold = 0, size=18, border = 1, border_color="gray")
- headingStyle = workbook.add_format(align = 'center', bold = 1, size=13, fg_color = 0x1E, color="white", border = 1, border_color="gray")
-
- ##Write title Info
- worksheet.write([0, 0], "GeneNetwork Interval Analyst Table", titleStyle)
- worksheet.write([1, 0], "%s%s" % (webqtlConfig.PORTADDR, os.path.join(webqtlConfig.CGIDIR, self._scriptfile)))
- #
- worksheet.write([2, 0], "Date : %s" % time.strftime("%B %d, %Y", time.gmtime()))
- worksheet.write([3, 0], "Time : %s GMT" % time.strftime("%H:%M ", time.gmtime()))
- worksheet.write([4, 0], "Search by : %s" % fd.formdata['remote_ip'])
- worksheet.write([5, 0], "view region : Chr %s %2.6f - %2.6f Mb" % (self.Chr, self.startMb, self.endMb))
- nTitleRow = 7
-
- geneTable = HT.TableLite(Class="collap", cellpadding=5)
- headerRow = HT.TR(HT.TD(" ", Class="fs13 fwb ffl b1 cw cbrb", width="1"))
- if self.xls:
- worksheet.write([nTitleRow, 0], "Index", headingStyle)
-
- for ncol, column in enumerate(dispFields):
- if len(column) == 1:
- headerRow.append(HT.TD(self.columnNames[column[0]][0], Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1,align="Center"))
- if self.xls:
- colTitle = self.columnNames[column[0]][0]
- worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
- worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
- else:
- headerRow.append(HT.TD(self.columnNames[column[0]][0], HT.BR(), " (%s)" % self.speciesFreeze[column[1]],
- Class="fs13 fwb ffl b1 cw cbrb", NOWRAP=1, align="Center"))
- if self.xls:
- colTitle = self.columnNames[column[0]][0] + " (%s)" % self.speciesFreeze[column[1]]
- worksheet.write([nTitleRow, ncol+1], colTitle, headingStyle)
- worksheet.set_column([ncol+1, ncol+1], 2*len(colTitle))
- #headerRow.append(HT.TD(self.columnNames[column[0]][0], HT.BR(),
- # "(%s %s)" % (column[1].title(), self.speciesFreeze[column[1]]),
- # Class="colorBlue", NOWRAP=1, align="Center"))
- geneTable.append(headerRow)
-
- geneCol = GeneUtil.loadGenes(self.cursor, self.Chr, self.diffColDefault, self.startMb, self.endMb, species=self.species)
- for gIndex, theGO in enumerate(geneCol):
- geneRow = HT.TR(HT.TD(gIndex+1, Class="fs12 fwn b1", align="right"))
- if self.xls:
- nTitleRow += 1
- worksheet.write([nTitleRow, 0], gIndex + 1)
-
- for ncol, column in enumerate(dispFields):
- if len(column) == 1 or column[1]== self.species:
- keyValue = ""
- fieldName = column[0]
- curSpecies = self.species
- curGO = theGO
- if theGO.has_key(fieldName):
- keyValue = theGO[fieldName]
- else:
- fieldName , othSpec = column
- curSpecies = othSpec
- subGO = '%sGene' % othSpec
- keyValue = ""
- curGO = theGO[subGO]
- if theGO[subGO].has_key(fieldName):
- keyValue = theGO[subGO][fieldName]
-
- if self.xls:
- worksheet.write([nTitleRow, ncol+1], keyValue)
- geneRow.append(self.formatTD(keyValue, fieldName, curSpecies, curGO))
-
- geneTable.append(geneRow)
-
- if self.xls:
- workbook.close()
- return geneTable, filename
-
- def formatTD(self, keyValue, fieldName, Species, theGO):
- if keyValue is None:
- keyValue = ""
- if keyValue != "":
- if fieldName in ("exonStarts", "exonEnds"):
- keyValue = string.replace(keyValue, ',', ' ')
- return HT.TD(HT.Span(keyValue, Class="code", Id="green"), width=350, Class="fs12 fwn b1")
- elif fieldName in ("GeneDescription"):
- if keyValue == "---":
- keyValue = ""
- return HT.TD(keyValue, Class="fs12 fwn b1", width=300)
- elif fieldName in ("GeneSymbol"):
- webqtlLink = HT.Href("./%s?cmd=sch&gene=%s&alias=1&species=%s" % (webqtlConfig.SCRIPTFILE, keyValue, Species),
- HT.Image("/images/webqtl_search.gif", border=0, valign="top"), target="_blank")
- if theGO['GeneID']:
- geneSymbolLink = HT.Href(webqtlConfig.NCBI_LOCUSID % theGO['GeneID'], keyValue, Class="normalsize", target="_blank")
- else:
- geneSymbolLink = keyValue
- return HT.TD(webqtlLink, geneSymbolLink, Class="fs12 fwn b1",NOWRAP=1)
- elif fieldName == 'UnigenID':
- try:
- gurl = HT.Href(webqtlConfig.UNIGEN_ID % tuple(string.split(keyValue,'.')[:2]), keyValue, Class="normalsize", target="_blank")
- except:
- gurl = keyValue
- return HT.TD(gurl, Class="fs12 fwn b1",NOWRAP=1)
- elif fieldName in ("exonCount", "Chromosome"):
- return HT.TD(keyValue, Class="fs12 fwn b1",align="right")
- elif fieldName in ("snpCount"):
- if keyValue:
- snpString = HT.Href(url="%s&chr=%s&start=%s&end=%s&geneName=%s&s1=%d&s2=%d" % (os.path.join(webqtlConfig.CGIDIR, 'main.py?FormID=snpBrowser'),
- theGO["Chromosome"], theGO["TxStart"], theGO["TxEnd"], theGO["GeneSymbol"], self.diffColDefault[0], self.diffColDefault[1]),
- text=theGO["snpCount"], target="_blank", Class="normalsize")
- else:
- snpString = keyValue
- return HT.TD(snpString, Class="fs12 fwn b1",align="right")
- elif fieldName in ("snpDensity", "GeneLength"):
- if keyValue: keyValue = "%2.3f" % keyValue
- else: keyValue = ""
- return HT.TD(keyValue, Class="fs12 fwn b1",align="right")
- elif fieldName in ("TxStart", "TxEnd"):
- return HT.TD("%2.6f" % keyValue, Class="fs12 fwn b1",align="right")
- else:
- return HT.TD(keyValue, Class="fs12 fwn b1",NOWRAP=1)
- else:
- return HT.TD(keyValue, Class="fs12 fwn b1",NOWRAP=1,align="right")
-
- def genControlForm(self, fd):
- ##desc GeneList
- self.cursor.execute("Desc GeneList")
- GeneListFields = self.cursor.fetchall()
- GeneListFields = map(lambda X: X[0], GeneListFields)
-
- #group columns by category--used for creating the dropdown list of possible columns
- categories = {}
- for item in self.columnNames.keys():
- category = self.columnNames[item]
- if category[-1] not in categories.keys():
- categories[category[-1]] = [item ]
- else:
- categories[category[-1]] = categories[category[-1]]+[item]
-
- ##List All Species in the Gene Table
- speciesDict = {}
- self.cursor.execute("select Species.Name, GeneList.SpeciesId from Species, GeneList where \
- GeneList.SpeciesId = Species.Id group by GeneList.SpeciesId order by Species.Id")
- results = self.cursor.fetchall()
- speciesField = categories.pop('species', [])
- categoriesOrder = ['gene', 'protein']
- for item in results:
- specName, specId = item
- categoriesOrder.append(specName)
- speciesDict[specName] = specId
- AppliedField = []
- for item2 in speciesField:
- if item2 in GeneListFields:
- self.cursor.execute("select %s from GeneList where SpeciesId = %d and %s is not NULL limit 1 " % (item2, specId, item2))
- columnApply = self.cursor.fetchone()
- if not columnApply:
- continue
- elif specName != 'mouse' and item2 in ('snpCount', 'snpDensity'):
- continue
- else:
- pass
- AppliedField.append(item2)
- categories[specName] = AppliedField
-
- categoriesOrder += ['misc']
-
- ############################################################
- ## Create the list of possible columns for the dropdown list
- ############################################################
- allColumnsList = HT.Select(name="allColumns", Class="snpBrowserDropBox")
-
- for category in categoriesOrder:
- allFields = categories[category]
- if allFields:
- geneOpt = HT.Optgroup(label=category.title())
- for item in allFields:
- if category in self.speciesFreeze.keys():
- geneOpt.append(("%s (%s %s)" % (self.columnNames[item][1], category.title(), self.speciesFreeze[category]),
- "%s__%s" % (item, self.speciesFreeze[category])))
- else:
- geneOpt.append((self.columnNames[item][1], item))
- geneOpt.sort()
- allColumnsList.append(geneOpt)
-
- ######################################
- ## Create the list of selected columns
- ######################################
-
- #cols contains the value of all the selected columns
- submitCols = cols = fd.formdata.getvalue("columns", "default")
-
- if cols == "default":
- if self.species=="mouse": #these are the same columns that are shown on intervalPage.py
- cols = ['GeneSymbol', 'GeneDescription', 'Chromosome', 'TxStart', 'Strand', 'GeneLength', 'GeneID', 'NM_ID', 'snpCount', 'snpDensity']
- elif self.species=="rat":
- cols = ['GeneSymbol', 'GeneDescription', 'Chromosome', 'TxStart', 'GeneLength', 'Strand', 'GeneID', 'UnigenID']
- else:
- #should not happen
- cols = []
- else:
- if type(cols)==type(""):
- cols = [cols]
-
- colsLst = []
- dispFields = []
- for column in cols:
- if submitCols == "default" and column not in ('GeneSymbol') and (column in GeneListFields or column in speciesField):
- colsLst.append(("%s (%s %s)" % (self.columnNames[column][1], self.species.title(), self.speciesFreeze[self.species]),
- "%s__%s" % (column, self.speciesFreeze[self.species])))
- dispFields.append([column, self.species])
- else:
- column2 = column.split("__")
- if len(column2) == 1:
- colsLst.append((self.columnNames[column2[0]][1], column))
- dispFields.append([column])
- else:
- thisSpecies = self.speciesFreeze[column2[1]]
- colsLst.append(("%s (%s %s)" % (self.columnNames[column2[0]][1], thisSpecies.title(), column2[1]),
- column))
- dispFields.append((column2[0], thisSpecies))
- selectedColumnsList = HT.Select(name="columns", Class="snpBrowserSelectBox", multiple="true", data=colsLst, size=6)
-
- ##########################
- ## Create the columns form
- ##########################
- columnsForm = HT.Form(name="columnsForm", submit=HT.Input(type='hidden'), cgi=os.path.join(webqtlConfig.CGIDIR, self._scriptfile), enctype="multipart/form-data")
- columnsForm.append(HT.Input(type="hidden", name="fromdatabase", value= fd.formdata.getvalue("fromdatabase", "unknown")))
- columnsForm.append(HT.Input(type="hidden", name="species", value=self.species))
- if self.diffCol:
- columnsForm.append(HT.Input(type="hidden", name="s1", value=self.diffCol[0]))
- columnsForm.append(HT.Input(type="hidden", name="s2", value=self.diffCol[1]))
- startBox = HT.Input(type="text", name="startMb", value=self.startMb, size=10)
- endBox = HT.Input(type="text", name="endMb", value=self.endMb, size=10)
- addButton = HT.Input(type="button", name="add", value="Add", Class="button", onClick="addToList(this.form.allColumns.options[this.form.allColumns.selectedIndex].text, this.form.allColumns.options[this.form.allColumns.selectedIndex].value, this.form.columns)")
- removeButton = HT.Input(type="button", name="remove", value="Remove", Class="button", onClick="removeFromList(this.form.columns.selectedIndex, this.form.columns)")
- upButton = HT.Input(type="button", name="up", value="Up", Class="button", onClick="swapOptions(this.form.columns.selectedIndex, this.form.columns.selectedIndex-1, this.form.columns)")
- downButton = HT.Input(type="button", name="down", value="Down", Class="button", onClick="swapOptions(this.form.columns.selectedIndex, this.form.columns.selectedIndex+1, this.form.columns)")
- clearButton = HT.Input(type="button", name="clear", value="Clear", Class="button", onClick="deleteAllElements(this.form.columns)")
- submitButton = HT.Input(type="submit", value="Refresh", Class="button", onClick="selectAllElements(this.form.columns)")
-
- selectChrBox = HT.Select(name="chromosome")
- self.cursor.execute("""
- Select
- Chr_Length.Name, Length from Chr_Length, Species
- where
- Chr_Length.SpeciesId = Species.Id AND
- Species.Name = '%s'
- Order by
- Chr_Length.OrderId
- """ % self.species)
-
- results = self.cursor.fetchall()
- for chrInfo in results:
- selectChrBox.append((chrInfo[0], chrInfo[0]))
- selectChrBox.selected.append(self.Chr)
-
- innerColumnsTable = HT.TableLite(border=0, Class="collap", cellpadding = 2)
- innerColumnsTable.append(HT.TR(HT.TD(selectedColumnsList)),
- HT.TR(HT.TD(clearButton, removeButton, upButton, downButton)))
- columnsTable = HT.TableLite(border=0, cellpadding=2, cellspacing=0)
- columnsTable.append(HT.TR(HT.TD(HT.Font("Chr: ", size=-1)),
- HT.TD(selectChrBox, submitButton)),
- HT.TR(HT.TD(HT.Font("View: ", size=-1)),
- HT.TD(startBox, HT.Font("Mb to ", size=-1), endBox, HT.Font("Mb", size=-1))),
- HT.TR(HT.TD(HT.Font("Show: ", size=-1)),
- HT.TD(allColumnsList, addButton)),
- HT.TR(HT.TD(""),
- HT.TD(innerColumnsTable)))
- columnsForm.append(columnsTable)
- #columnsForm.append(HT.Input(type="hidden", name="sort", value=diffCol),
- # HT.Input(type="hidden", name="identification", value=identification),
- # HT.Input(type="hidden", name="traitInfo", value=traitInfo))
-
- return columnsForm, dispFields
diff --git a/wqflask/wqflask/marker_regression/MarkerRegressionPage.py b/wqflask/wqflask/marker_regression/MarkerRegressionPage.py
deleted file mode 100644
index deb47ad0..00000000
--- a/wqflask/wqflask/marker_regression/MarkerRegressionPage.py
+++ /dev/null
@@ -1,1648 +0,0 @@
-# Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
-#
-# This program is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Affero General Public License
-# as published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the GNU Affero General Public License for more details.
-#
-# This program is available from Source Forge: at GeneNetwork Project
-# (sourceforge.net/projects/genenetwork/).
-#
-# Contact Drs. Robert W. Williams and Xiaodong Zhou (2010)
-# at rwilliams@uthsc.edu and xzhou15@uthsc.edu
-#
-# This module is used by GeneNetwork project (www.genenetwork.org)
-#
-# Created by GeneNetwork Core Team 2010/08/10
-#
-# Last updated by GeneNetwork Core Team 2010/10/20
-
-import time
-import string
-import math
-from math import *
-import piddle as pid
-import sys,os
-import httplib, urllib
-
-from htmlgen import HTMLgen2 as HT
-from utility import Plot
-from intervalAnalyst import GeneUtil
-from base.webqtlTrait import webqtlTrait
-from base.templatePage import templatePage
-from utility import webqtlUtil
-from base import webqtlConfig
-from db import webqtlDatabaseFunction
-from base.GeneralObject import GeneralObject
-
-import reaper
-import cPickle
-from utility.THCell import THCell
-from utility.TDCell import TDCell
-
-class MarkerRegressionPage(templatePage):
-
- def __init__(self, fd):
-
- templatePage.__init__(self, fd)
-
- if not self.openMysql():
- return
-
- self.initializeParameters(fd)
-
- filename= webqtlUtil.genRandStr("Itvl_")
- ChrList,ChrNameOrderIdDict,ChrOrderIdNameDict,ChrLengthMbList= self.getChrNameOrderIdLength(RISet=fd.RISet)
-
- if self.mappingMethodId == '4': # For PLINK
-
- traitInfoList = string.split(string.strip(fd.identification),':')
- probesetName = string.strip(traitInfoList[-1])
- plinkOutputFileName= webqtlUtil.genRandStr("%s_%s_"%(fd.RISet,probesetName))
-
- # get related values from fd.allTraitData; the format of 'allTraitValueDict'is {strainName1: value=-0.2...}
- fd.readData()
- allTraitValueDict = fd.allTraitData
-
- #automatically generate pheno txt file for PLINK
- self.genPhenoTxtFileForPlink(phenoFileName=plinkOutputFileName,RISetName=fd.RISet,probesetName=probesetName, valueDict=allTraitValueDict)
- # os.system full path is required for input and output files; specify missing value is -9999
- plink_command = '%splink/plink --noweb --ped %splink/%s.ped --no-fid --no-parents --no-sex --no-pheno --map %splink/%s.map --pheno %s/%s.txt --pheno-name %s --missing-phenotype -9999 --out %s%s --assoc ' % (webqtlConfig.GENODIR, webqtlConfig.GENODIR, fd.RISet, webqtlConfig.GENODIR, fd.RISet, webqtlConfig.TMPDIR, plinkOutputFileName, probesetName, webqtlConfig.TMPDIR, plinkOutputFileName)
-
- os.system(plink_command)
-
- if fd.identification:
- heading2 = HT.Paragraph('Trait ID: %s' % fd.identification)
- heading2.__setattr__("class","subtitle")
- self.dict['title'] = '%s: Genome Association' % fd.identification
- else:
- heading2 = ""
- self.dict['title'] = 'Genome Association'
-
- if fd.traitInfo:
- symbol,chromosome,MB = string.split(fd.traitInfo,'\t')
- heading3 = HT.Paragraph('[ ',HT.Strong(HT.Italic('%s' % symbol,id="green")),' on Chr %s @ %s Mb ]' % (chromosome,MB))
- else:
- heading3 = ""
-
- heading = HT.Paragraph('Trait Data Entered for %s Set' % fd.RISet)
- heading.__setattr__("class","title")
-
- # header info part:Trait Data Entered for HLC Set & Trait ID:
- headerdiv = HT.TR(HT.TD(heading, heading2,heading3, width='45%',valign='top', align='left', bgColor='#eeeeee'))
-
- self.ChrList=ChrList # get chr name from '1' to 'X'
- self.ChrLengthMbList = ChrLengthMbList
-
- # build plink result dict based on chr, key is chr name, value is in list type including Snpname, bp and pvalue info
- plinkResultDict={}
- count,minPvalue,plinkResultDict =self.getPlinkResultDict(outputFileName=plinkOutputFileName,thresholdPvalue=self.pValue,ChrOrderIdNameDict=ChrOrderIdNameDict)
-
- # if can not find results which are matched with assigned p-value, system info will show up
- if count >0:
-
- #for genome association report table
- reportTable=""
- # sortable table object
- resultstable,tblobj,bottomInfo = self.GenReportForPLINK(ChrNameOrderIdDict=ChrNameOrderIdDict, RISet=fd.RISet,plinkResultDict=plinkResultDict,thresholdPvalue=self.pValue,chrList=self.ChrList)
-
- # creat object for result table for sort function
- objfile = open('%s.obj' % (webqtlConfig.TMPDIR+filename), 'wb')
- cPickle.dump(tblobj, objfile)
- objfile.close()
-
- sortby = ("Index", "up")
- reportTable =HT.Div(webqtlUtil.genTableObj(tblobj=tblobj, file=filename, sortby=sortby, tableID = "sortable", addIndex = "0"), Id="sortable")
-
- descriptionTable = HT.TableLite(border=0, cellpadding=0, cellspacing=0)
- descriptionTable.append(HT.TR(HT.TD(reportTable, colspan=3)))
- descriptionTable.append(HT.TR(HT.TD(HT.BR(),HT.BR())))
- descriptionTable.append(bottomInfo)
-
- # get each chr's length
- self.ChrLengthMbList = map(lambda x: x/1000000.0, self.ChrLengthMbList) # change unit from bp to mb
- self.ChrLengthMbSum = reduce(lambda x, y:x+y, self.ChrLengthMbList, 0.0)# get total length of all chrs
- if self.ChrLengthMbList:
- self.GraphInterval = self.ChrLengthMbSum/(len(self.ChrLengthMbList)*12) #Empirical Mb interval
- else:
- self.GraphInterval = 1
-
- # for human data, there's no CM value
- self.ChrLengthCMList = []
- self.ChrLengthCMSum = 0
-
- # begin: common part with human data
- intCanvas = pid.PILCanvas(size=(self.graphWidth,self.graphHeight))
- gifmap = self.plotIntMappingForPLINK(fd, intCanvas, startMb = self.startMb, endMb = self.endMb, plinkResultDict=plinkResultDict)
-
- intCanvas.save(os.path.join(webqtlConfig.GENERATED_IMAGE_DIR, filename), format='png')
- intImg=HT.Image('/image/'+filename+'.png', border=0, usemap='#WebQTLImageMap')
-
- TD_LR = HT.TR(HT.TD(HT.Blockquote(gifmap,intImg, HT.P()), bgColor='#eeeeee', height = 200))
- self.dict['body'] = str(headerdiv)+str(TD_LR)+str(resultstable)+str(HT.TR(HT.TD(descriptionTable)))
-
- else:
- heading = "Genome Association"
- detail = ['There is no association with marker that meets this criteria. Please provide a less stringend threshold. The minimun p-value is %s.'%minPvalue]
- self.error(heading=heading,detail=detail)
- return
-
- elif self.mappingMethodId == '1': # QTLreaper result
- if not fd.genotype:
- fd.readData()
-
- fd.parentsf14regression = fd.formdata.getvalue('parentsf14regression')
- weightedRegression = fd.formdata.getvalue('applyVarianceSE')
-
- if fd.parentsf14regression and fd.genotype_2:
- _genotype = fd.genotype_2
- else:
- _genotype = fd.genotype_1
-
- _strains, _vals, _vars, N = fd.informativeStrains(_genotype.prgy, weightedRegression)
-
- if fd.identification:
- heading2 = HT.Paragraph('Trait ID: %s' % fd.identification)
- heading2.__setattr__("class","subtitle")
- self.dict['title'] = '%s: Genome Association' % fd.identification
- else:
- heading2 = ""
- self.dict['title'] = 'Genome Association'
-
- if fd.traitInfo:
- symbol,chromosome,MB = string.split(fd.traitInfo,'\t')
- heading3 = HT.Paragraph('[ ',HT.Strong(HT.Italic('%s' % symbol,id="green")),' on Chr %s @ %s Mb ]' % (chromosome,MB))
- else:
- heading3 = ""
-
- if N < webqtlConfig.KMININFORMATIVE:
- heading = "Genome Association"
- detail = ['Fewer than %d strain data were entered for %s data set. No mapping attempted.' % (webqtlConfig.KMININFORMATIVE, fd.RISet)]
- self.error(heading=heading,detail=detail)
- return
- else:
- heading = HT.Paragraph('Trait Data Entered for %s Set' % fd.RISet)
- heading.__setattr__("class","title")
-
- datadiv = HT.TD(heading, heading2,heading3, width='45%',valign='top', align='left', bgColor='#eeeeee')
- resultstable,tblobj,bottomInfo = self.GenReport(ChrNameOrderIdDict,fd, _genotype, _strains, _vals, _vars)
- #resultstable = self.GenReport(fd, _genotype, _strains, _vals, _vars)
-
- # creat object for result table for sort function
- objfile = open('%s.obj' % (webqtlConfig.TMPDIR+filename), 'wb')
- cPickle.dump(tblobj, objfile)
- objfile.close()
-
- sortby = ("Index", "up")
- reportTable =HT.Div(webqtlUtil.genTableObj(tblobj=tblobj, file=filename, sortby=sortby, tableID = "sortable", addIndex = "0"), Id="sortable")
-
- descriptionTable = HT.TableLite(border=0, cellpadding=0, cellspacing=0)
- descriptionTable.append(HT.TR(HT.TD(reportTable, colspan=3)))
- descriptionTable.append(HT.TR(HT.TD(HT.BR(),HT.BR())))
- descriptionTable.append(bottomInfo)
-
- self.traitList=_vals
-
- ##########################plot#######################
-
- ################################################################
- # Generate Chr list and Retrieve Length Information
- ################################################################
- self.genotype= _genotype
- self.ChrList = [("All", -1)]
-
- for i, indChr in enumerate(self.genotype):
- self.ChrList.append((indChr.name, i))
-
- self.cursor.execute("""
- Select
- Length from Chr_Length, InbredSet
- where
- Chr_Length.SpeciesId = InbredSet.SpeciesId AND
- InbredSet.Name = '%s' AND
- Chr_Length.Name in (%s)
- Order by
- OrderId
- """ % (fd.RISet, string.join(map(lambda X: "'%s'" % X[0], self.ChrList[1:]), ", ")))
-
- self.ChrLengthMbList = self.cursor.fetchall()
- self.ChrLengthMbList = map(lambda x: x[0]/1000000.0, self.ChrLengthMbList)
- self.ChrLengthMbSum = reduce(lambda x, y:x+y, self.ChrLengthMbList, 0.0)
- if self.ChrLengthMbList:
- self.MbGraphInterval = self.ChrLengthMbSum/(len(self.ChrLengthMbList)*12) #Empirical Mb interval
- else:
- self.MbGraphInterval = 1
-
- self.ChrLengthCMList = []
- for i, _chr in enumerate(self.genotype):
- self.ChrLengthCMList.append(_chr[-1].cM - _chr[0].cM)
- self.ChrLengthCMSum = reduce(lambda x, y:x+y, self.ChrLengthCMList, 0.0)# used for calculate plot scale
-
- self.GraphInterval = self.MbGraphInterval #Mb
-
- # begin: common part with human data
- intCanvas = pid.PILCanvas(size=(self.graphWidth,self.graphHeight))
- gifmap = self.plotIntMapping(fd, intCanvas, startMb = self.startMb, endMb = self.endMb, showLocusForm= "")
- filename= webqtlUtil.genRandStr("Itvl_")
- intCanvas.save(os.path.join(webqtlConfig.GENERATED_IMAGE_DIR, filename), format='png')
- intImg=HT.Image('/image/'+filename+'.png', border=0, usemap='#WebQTLImageMap')
-
- ################################################################
- # footnote goes here
- ################################################################
- btminfo = HT.Paragraph(Id="smallsize") #Small('More information about this graph is available here.')
-
- if (self.additiveChecked):
- btminfo.append(HT.BR(), 'A positive additive coefficient (', HT.Font('green', color='green'), ' line) indicates that %s alleles increase trait values. In contrast, a negative additive coefficient (' % fd.ppolar, HT.Font('red', color='red'), ' line) indicates that %s alleles increase trait values.' % fd.mpolar)
-
-
- TD_LR = HT.TR(HT.TD(HT.Blockquote(gifmap,intImg, HT.P()), bgColor='#eeeeee', height = 200))
-
- self.dict['body'] = str(datadiv)+str(TD_LR)+str(resultstable)+str(HT.TR(HT.TD(descriptionTable)))
-
- # end: common part with human data
-
- else:
- pass
-
-
- # add by NL 10-2-2011
- def initializeParameters(self, fd):
- """
- Initializes all of the MarkerRegressionPage class parameters,
- acquiring most values from the formdata (fd)
- """
- ###################################
- # manhattam plot parameters
- ###################################
-
- self.graphHeight = 600
- self.graphWidth = 1280
- self.plotScale = 'physic'
- self.selectedChr = -1
- self.GRAPH_BACK_DARK_COLOR = pid.HexColor(0xF1F1F9)
- self.GRAPH_BACK_LIGHT_COLOR = pid.HexColor(0xFBFBFF)
- self.LRS_COLOR = pid.HexColor(0x0000FF)
- self.LRS_LOD ='LRS'
- self.lrsMax = float(fd.formdata.getvalue('lrsMax', 0))
- self.startMb = fd.formdata.getvalue('startMb', "-1")
- self.endMb = fd.formdata.getvalue('endMb', "-1")
- self.mappingMethodId = fd.formdata.getvalue('mappingMethodId', "0")
- self.permChecked=True
- self.multipleInterval=False
- self.SIGNIFICANT_WIDTH = 5
- self.SUGGESTIVE_WIDTH = 5
- self.SIGNIFICANT_COLOR = pid.HexColor(0xEBC7C7)
- self.SUGGESTIVE_COLOR = pid.gainsboro
- self.colorCollection = [self.LRS_COLOR]
- self.additiveChecked= True
- self.ADDITIVE_COLOR_POSITIVE = pid.green
- self.legendChecked =False
- self.pValue=float(fd.formdata.getvalue('pValue',-1))
-
- # allow user to input p-value greater than 1,
- # in this case, the value will be treated as -lgP value. so the input value needs to be transferred to power of 10 format
- if self.pValue >1:
- self.pValue =10**-(self.pValue)
-
- try:
- self.startMb = float(self.startMb)
- self.endMb = float(self.endMb)
- if self.startMb > self.endMb:
- temp = self.startMb
- self.startMb = self.endMb
- self.endMb = temp
- #minimal distance 10bp
- if self.endMb - self.startMb < 0.00001:
- self.endMb = self.startMb + 0.00001
- except:
- self.startMb = self.endMb = -1
-
- def GenReportForPLINK(self, ChrNameOrderIdDict={},RISet='',plinkResultDict= {},thresholdPvalue=-1,chrList=[]):
-
- 'Create an HTML division which reports any loci which are significantly associated with the submitted trait data.'
- #########################################
- # Genome Association report
- #########################################
- locusFormName = webqtlUtil.genRandStr("fm_")
- locusForm = HT.Form(cgi = os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), \
- enctype='multipart/form-data', name=locusFormName, submit=HT.Input(type='hidden'))
- hddn = {'FormID':'showDatabase','ProbeSetID':'_','database':RISet+"Geno",'CellID':'_', \
- 'RISet':RISet, 'incparentsf1':'on'}
- for key in hddn.keys():
- locusForm.append(HT.Input(name=key, value=hddn[key], type='hidden'))
-
- regressionHeading = HT.Paragraph('Genome Association Report')
- regressionHeading.__setattr__("class","title")
-
- filename= webqtlUtil.genRandStr("GenomeAsscociation_")
- fpText = open('%s.txt' % (webqtlConfig.TMPDIR+filename), 'wb')
- fpText.write('The loci meet the criteria of P-Value <= %3.6f.\n'%thresholdPvalue)
- pValueInfo =HT.Paragraph('The loci meet the criteria of P-Value <= %3.6f.\n'%thresholdPvalue)
-
- textUrl = HT.Href(text = 'Download', url= '/tmp/'+filename+'.txt', target = "_blank", Class='fs12 fwn')
- bottomInfo = HT.TR(HT.TD(HT.Paragraph(textUrl, ' result in tab-delimited text format.', HT.BR(), HT.BR(),Class="fs12 fwn"), colspan=3))
-
- tblobj={} # build dict for genTableObj function; keys include header and body
- tblobj_header = [] # value of key 'header'
- tblobj_body=[] # value of key 'body'
- reportHeaderRow=[] # header row list for tblobj_header (html part)
- headerList=['Index','SNP Name','Chr','Mb','-log(P)']
- headerStyle="fs14 fwb ffl b1 cw cbrb" # style of the header
- cellColorStyle = "fs13 b1 fwn c222" # style of the cells
-
- if headerList:
- for ncol, item in enumerate(headerList):
- reportHeaderRow.append(THCell(HT.TD(item, Class=headerStyle, valign='bottom',nowrap='ON'),text=item, idx=ncol))
- #download file for table headers' names
- fpText.write('SNP_Name\tChromosome\tMb\t-log(P)\n')
-
- tblobj_header.append(reportHeaderRow)
- tblobj['header']=tblobj_header
-
- index=1
- for chr in chrList:
-
- if plinkResultDict.has_key(chr):
- if chr in ChrNameOrderIdDict.keys():
- chrOrderId =ChrNameOrderIdDict[chr]
- else:
- chrOrderId=chr
-
- valueList=plinkResultDict[chr]
-
- for value in valueList:
- reportBodyRow=[] # row list for tblobj_body (html part)
- snpName=value[0]
- bp=value[1]
- mb=int(bp)/1000000.0
-
- try:
- pValue =float(value[2])
- except:
- pValue =1
- formattedPvalue = -math.log10(pValue)
-
- formattedPvalue = webqtlUtil.SciFloat(formattedPvalue)
- dbSnprs=snpName.replace('rs','')
- SnpHref = HT.Href(text=snpName, url="http://www.ncbi.nlm.nih.gov/projects/SNP/snp_ref.cgi?rs=%s"%dbSnprs, target="_blank")
-
- selectCheck=HT.Input(type="checkbox", Class="checkbox", name="index",value=index, onClick="highlight(this)")
- reportBodyRow.append(TDCell(HT.TD(str(index),selectCheck, align='right',Class=cellColorStyle,nowrap='ON'),str(index),index))
- reportBodyRow.append(TDCell(HT.TD(SnpHref, Class=cellColorStyle,nowrap='ON'),snpName, snpName))
- reportBodyRow.append(TDCell(HT.TD(chr, Class=cellColorStyle, align="center",nowrap='ON'),chr, chrOrderId))
- reportBodyRow.append(TDCell(HT.TD('%3.6f'%mb, Class=cellColorStyle, align="center",nowrap='ON'),mb, mb))
- reportBodyRow.append(TDCell(HT.TD(formattedPvalue, Class=cellColorStyle, align="center",nowrap='ON'),formattedPvalue, float(formattedPvalue)))
-
- fpText.write('%s\t%s\t%3.6f\t%s\n' % (snpName, str(chr), mb, formattedPvalue))
- index+=1
-
- tblobj_body.append(reportBodyRow)
-
- tblobj['body']=tblobj_body
- rv=HT.TR(HT.TD(regressionHeading,pValueInfo, locusForm, HT.P(), width='55%',valign='top', align='left',bgColor='#eeeeee'))
-
- return rv, tblobj,bottomInfo
-
-
- def GenReport(self, ChrNameOrderIdDict,fd, _genotype, _strains, _vals, _vars= []):
- 'Create an HTML division which reports any loci which are significantly associated with the submitted trait data.'
- #calculate QTL for each trait
- self.qtlresults = []
- if webqtlUtil.ListNotNull(_vars):
- qtlresults = _genotype.regression(strains = _strains, trait = _vals, variance = _vars)
- LRSArray = _genotype.permutation(strains = _strains, trait = _vals, variance = _vars, nperm=fd.nperm)
- else:
- qtlresults = _genotype.regression(strains = _strains, trait = _vals)
- LRSArray = _genotype.permutation(strains = _strains, trait = _vals,nperm=fd.nperm)
-
- self.qtlresults.append(qtlresults)
-
- filename= webqtlUtil.genRandStr("GenomeAsscociation_")
-
- # set suggestive, significant and highly significant LRS
- if fd.suggestive == None:
- fd.suggestive = LRSArray[int(fd.nperm*0.37-1)]
- else:
- fd.suggestive = float(fd.suggestive)
- if fd.significance == None:
- fd.significance = LRSArray[int(fd.nperm*0.95-1)]
- else:
- fd.significance = float(fd.significance)
-
- self.significance =fd.significance
- self.suggestive = fd.suggestive
- self.highlysignificant = LRSArray[int(fd.nperm*0.99-1)]
- _dispAllLRS = 0
- if fd.formdata.getvalue('displayAllLRS'):
- _dispAllLRS = 1
- qtlresults2 = []
- if _dispAllLRS:
- filtered = qtlresults[:]
- else:
- filtered = filter(lambda x, y=fd.suggestive: x.lrs > y, qtlresults)
- if len(filtered) == 0:
- qtlresults2 = qtlresults[:]
- qtlresults2.sort()
- filtered = qtlresults2[-10:]
-
- #########################################
- # Permutation Graph
- #########################################
- myCanvas = pid.PILCanvas(size=(400,300))
- #plotBar(myCanvas,10,10,390,290,LRSArray,XLabel='LRS',YLabel='Frequency',title=' Histogram of Permutation Test',identification=fd.identification)
- Plot.plotBar(myCanvas, LRSArray,XLabel='LRS',YLabel='Frequency',title=' Histogram of Permutation Test')
- filename= webqtlUtil.genRandStr("Reg_")
- myCanvas.save(webqtlConfig.GENERATED_IMAGE_DIR+filename, format='gif')
- img=HT.Image('/image/'+filename+'.gif',border=0,alt='Histogram of Permutation Test')
-
- if fd.suggestive == None:
- fd.suggestive = LRSArray[int(fd.nperm*0.37-1)]
- else:
- fd.suggestive = float(fd.suggestive)
- if fd.significance == None:
- fd.significance = LRSArray[int(fd.nperm*0.95-1)]
- else:
- fd.significance = float(fd.significance)
-
- permutationHeading = HT.Paragraph('Histogram of Permutation Test')
- permutationHeading.__setattr__("class","title")
-
- permutation = HT.TableLite()
- permutation.append(HT.TR(HT.TD(img)))
-
-
- #########################################
- # Genome Association report
- #########################################
- locusFormName = webqtlUtil.genRandStr("fm_")
- locusForm = HT.Form(cgi = os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), \
- enctype='multipart/form-data', name=locusFormName, submit=HT.Input(type='hidden'))
- hddn = {'FormID':'showDatabase','ProbeSetID':'_','database':fd.RISet+"Geno",'CellID':'_', \
- 'RISet':fd.RISet, 'incparentsf1':'on'}
- for key in hddn.keys():
- locusForm.append(HT.Input(name=key, value=hddn[key], type='hidden'))
-
- regressionHeading = HT.Paragraph('Genome Association Report')
- regressionHeading.__setattr__("class","title")
- # report is the info part above report table
- if qtlresults2 != []:
- report = HT.Blockquote(HT.Font('No association ',color="#FF0000"),HT.Font('with a likelihood ratio statistic greater than %3.1f was found. Here are the top 10 LRSs.' % fd.suggestive,color="#000000"))
- else:
- report = HT.Blockquote('The following loci in the %s data set have associations with the above trait data.\n' % fd.RISet, HT.P())
- report.__setattr__("class","normalsize")
-
- fpText = open('%s.txt' % (webqtlConfig.TMPDIR+filename), 'wb')
- fpText.write('Suggestive LRS =%3.2f\n'%self.suggestive)
- fpText.write('Significant LRS =%3.2f\n'%self.significance)
- fpText.write('Highly Significant LRS =%3.2f\n'%self.highlysignificant)
- LRSInfo =HT.Paragraph('&nbsp;&nbsp;&nbsp;&nbsp;Suggestive LRS =%3.2f\n'%fd.suggestive, HT.BR(), '&nbsp;&nbsp;&nbsp;&nbsp;Significant LRS =%3.2f\n'%fd.significance,HT.BR(),'&nbsp;&nbsp;&nbsp;&nbsp;Highly Significant LRS =%3.2f\n' % self.highlysignificant)
-
- textUrl = HT.Href(text = 'Download', url= '/tmp/'+filename+'.txt', target = "_blank", Class='fs12 fwn')
-
- bottomInfo = HT.TR(HT.TD(HT.Paragraph(textUrl, ' result in tab-delimited text format.', HT.BR(), HT.BR(),'LRS values marked with',HT.Font(' * ',color="red"), 'are greater than the significance threshold (specified by you or by permutation test). ' , HT.BR(), HT.BR(), HT.Strong('Additive Effect'), ' is half the difference in the mean phenotype of all cases that are homozygous for one parental allel at this marker minus the mean of all cases that are homozygous for the other parental allele at this marker. ','In the case of %s strains, for example,' % fd.RISet,' A positive additive effect indicates that %s alleles increase trait values. Negative additive effect indicates that %s alleles increase trait values.'% (fd.ppolar,fd.mpolar),Class="fs12 fwn")))
-
- tblobj={} # build dict for genTableObj function; keys include header and body
- tblobj_header = [] # value of key 'header'
- tblobj_body=[] # value of key 'body'
- reportHeaderRow=[] # header row list for tblobj_header (html part)
- headerStyle="fs14 fwb ffl b1 cw cbrb" # style of the header
- cellColorStyle = "fs13 b1 fwn c222" # style of the cells
-
- headerList=['Index','LRS','Chr','Mb','Locus','Additive Effect']
- for ncol, item in enumerate(headerList):
- reportHeaderRow.append(THCell(HT.TD(item, Class=headerStyle, valign='bottom',nowrap='ON'),text=item, idx=ncol))
-
- if fd.genotype.type == 'intercross':
- ncol =len(headerList)
- reportHeaderRow.append(THCell(HT.TD('Dominance Effect', Class=headerStyle, valign='bottom',nowrap='ON'),text='Dominance Effect', idx=ncol))
-
- #download file for table headers' names
- fpText.write('LRS\tChromosome\tMb\tLocus\tAdditive Effect\tDominance Effect\n')
-
- index=1
- for ii in filtered:
- #add by NL 06-20-2011: set LRS to 460 when LRS is infinite,
- if ii.lrs==float('inf') or ii.lrs>webqtlConfig.MAXLRS:
- LRS=webqtlConfig.MAXLRS #maximum LRS value
- else:
- LRS=ii.lrs
-
- if LRS > fd.significance:
- lrs = HT.TD(HT.Font('%3.3f*' % LRS, color='#FF0000'),Class=cellColorStyle)
- else:
- lrs = HT.TD('%3.3f' % LRS,Class=cellColorStyle)
-
- if ii.locus.chr in ChrNameOrderIdDict.keys():
- chrOrderId =ChrNameOrderIdDict[ii.locus.chr]
- else:
- chrOrderId=ii.locus.chr
-
- reportBodyRow=[] # row list for tblobj_body (html part)
- selectCheck=HT.Input(type="checkbox", Class="checkbox", name="index",value=index, onClick="highlight(this)")
- reportBodyRow.append(TDCell(HT.TD(str(index),selectCheck, align='right',Class=cellColorStyle,nowrap='ON'),str(index),index))
- reportBodyRow.append(TDCell(lrs,LRS, LRS))
- reportBodyRow.append(TDCell(HT.TD(ii.locus.chr, Class=cellColorStyle, align="center",nowrap='ON'),ii.locus.chr, chrOrderId))
- reportBodyRow.append(TDCell(HT.TD('%3.6f'%ii.locus.Mb, Class=cellColorStyle, align="center",nowrap='ON'),ii.locus.Mb, ii.locus.Mb))
- reportBodyRow.append(TDCell(HT.TD(HT.Href(text=ii.locus.name, url = "javascript:showTrait('%s','%s');" % (locusFormName, ii.locus.name), Class='normalsize'), Class=cellColorStyle, align="center",nowrap='ON'),ii.locus.name, ii.locus.name))
- reportBodyRow.append(TDCell(HT.TD('%3.3f' % ii.additive, Class=cellColorStyle, align="center",nowrap='ON'),ii.additive, ii.additive))
- reportBodyRow.append(TDCell(HT.TD('%3.3f' % ii.dominance, Class=cellColorStyle, align="center",nowrap='ON'),ii.dominance, ii.dominance))
-
- fpText.write('%2.3f\t%s\t%3.6f\t%s\t%2.3f\t%2.3f\n' % (LRS, ii.locus.chr, ii.locus.Mb, ii.locus.name, ii.additive, ii.dominance))
- index+=1
- tblobj_body.append(reportBodyRow)
- else:
- #download file for table headers' names
- fpText.write('LRS\tChromosome\tMb\tLocus\tAdditive Effect\n')
-
- index=1
- for ii in filtered:
- #add by NL 06-20-2011: set LRS to 460 when LRS is infinite,
- if ii.lrs==float('inf') or ii.lrs>webqtlConfig.MAXLRS:
- LRS=webqtlConfig.MAXLRS #maximum LRS value
- else:
- LRS=ii.lrs
-
- if LRS > fd.significance:
- lrs = HT.TD(HT.Font('%3.3f*' % LRS, color='#FF0000'),Class=cellColorStyle)
- else:
- lrs = HT.TD('%3.3f' % LRS,Class=cellColorStyle)
-
- if ii.locus.chr in ChrNameOrderIdDict.keys():
- chrOrderId =ChrNameOrderIdDict[ii.locus.chr]
- else:
- chrOrderId=ii.locus.chr
-
- reportBodyRow=[] # row list for tblobj_body (html part)
- selectCheck=HT.Input(type="checkbox", Class="checkbox", name="index",value=index, onClick="highlight(this)")
- reportBodyRow.append(TDCell(HT.TD(str(index),selectCheck, align='right',Class=cellColorStyle,nowrap='ON'),str(index),index))
- reportBodyRow.append(TDCell(lrs,LRS, LRS))
- reportBodyRow.append(TDCell(HT.TD(ii.locus.chr, Class=cellColorStyle, align="center",nowrap='ON'),ii.locus.chr, chrOrderId))
- reportBodyRow.append(TDCell(HT.TD('%3.6f'%ii.locus.Mb, Class=cellColorStyle, align="center",nowrap='ON'),ii.locus.Mb, ii.locus.Mb))
- reportBodyRow.append(TDCell(HT.TD(HT.Href(text=ii.locus.name, url = "javascript:showTrait('%s','%s');" % (locusFormName, ii.locus.name), Class='normalsize'), Class=cellColorStyle, align="center",nowrap='ON'),ii.locus.name, ii.locus.name))
- reportBodyRow.append(TDCell(HT.TD('%3.3f' % ii.additive, Class=cellColorStyle, align="center",nowrap='ON'),ii.additive, ii.additive))
-
- fpText.write('%2.3f\t%s\t%3.6f\t%s\t%2.3f\n' % (LRS, ii.locus.chr, ii.locus.Mb, ii.locus.name, ii.additive))
- index+=1
- tblobj_body.append(reportBodyRow)
-
- tblobj_header.append(reportHeaderRow)
- tblobj['header']=tblobj_header
- tblobj['body']=tblobj_body
-
- rv=HT.TD(regressionHeading,LRSInfo,report, locusForm, HT.P(),width='55%',valign='top', align='left', bgColor='#eeeeee')
- if fd.genotype.type == 'intercross':
- bottomInfo.append(HT.BR(), HT.BR(), HT.Strong('Dominance Effect'),' is the difference between the mean trait value of cases heterozygous at a marker and the average mean for the two groups homozygous at this marker: e.g., BD - (BB+DD)/2]. A positive dominance effect indicates that the average phenotype of BD heterozygotes exceeds the mean of BB and DD homozygotes. No dominance deviation can be computed for a set of recombinant inbred strains or for a backcross.')
- return rv,tblobj,bottomInfo
-
- return rv,tblobj,bottomInfo
-
- def plotIntMappingForPLINK(self, fd, canvas, offset= (80, 120, 20, 80), zoom = 1, startMb = None, endMb = None, showLocusForm = "",plinkResultDict={}):
- #calculating margins
- xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
-
- fontZoom = zoom
- if zoom == 2:
- fontZoom = 1.5
-
- xLeftOffset = int(xLeftOffset*fontZoom)
- xRightOffset = int(xRightOffset*fontZoom)
- yBottomOffset = int(yBottomOffset*fontZoom)
-
- cWidth = canvas.size[0]
- cHeight = canvas.size[1]
- plotWidth = cWidth - xLeftOffset - xRightOffset
- plotHeight = cHeight - yTopOffset - yBottomOffset
- startPixelX = xLeftOffset
- endPixelX = (xLeftOffset + plotWidth)
-
- #Drawing Area Height
- drawAreaHeight = plotHeight
- if self.plotScale == 'physic' and self.selectedChr > -1: # for single chr
- drawAreaHeight -= self.ENSEMBL_BAND_HEIGHT + self.UCSC_BAND_HEIGHT+ self.WEBQTL_BAND_HEIGHT + 3*self.BAND_SPACING+ 10*zoom
- if self.geneChecked:
- drawAreaHeight -= self.NUM_GENE_ROWS*self.EACH_GENE_HEIGHT + 3*self.BAND_SPACING + 10*zoom
- else:
- if self.selectedChr > -1:
- drawAreaHeight -= 20
- else:# for all chrs
- drawAreaHeight -= 30
-
- #Image map
- gifmap = HT.Map(name='WebQTLImageMap')
-
- newoffset = (xLeftOffset, xRightOffset, yTopOffset, yBottomOffset)
- # Draw the alternating-color background first and get plotXScale
- plotXScale = self.drawGraphBackgroundForPLINK(canvas, gifmap, offset=newoffset, zoom= zoom, startMb=startMb, endMb = endMb,plinkResultDict=plinkResultDict)
-
- # Draw X axis
- self.drawXAxisForPLINK(fd, canvas, drawAreaHeight, gifmap, plotXScale, showLocusForm, offset=newoffset, zoom= zoom, startMb=startMb, endMb = endMb)
- # Draw manhattam plot
- self.drawManhattanPlotForPLINK(canvas, drawAreaHeight, gifmap, plotXScale, offset=newoffset, zoom= zoom, startMb=startMb, endMb = endMb,plinkResultDict=plinkResultDict,thresholdPvalue=self.pValue)
-
- return gifmap
-
-
- def plotIntMapping(self, fd, canvas, offset= (80, 120, 20, 80), zoom = 1, startMb = None, endMb = None, showLocusForm = ""):
- #calculating margins
- xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
-
- fontZoom = zoom
- if zoom == 2:
- fontZoom = 1.5
-
- xLeftOffset = int(xLeftOffset*fontZoom)
- xRightOffset = int(xRightOffset*fontZoom)
- yBottomOffset = int(yBottomOffset*fontZoom)
-
- cWidth = canvas.size[0]
- cHeight = canvas.size[1]
- plotWidth = cWidth - xLeftOffset - xRightOffset
- plotHeight = cHeight - yTopOffset - yBottomOffset
- startPixelX = xLeftOffset
- endPixelX = (xLeftOffset + plotWidth)
-
- #Drawing Area Height
- drawAreaHeight = plotHeight
- if self.plotScale == 'physic' and self.selectedChr > -1: # for single chr
- drawAreaHeight -= self.ENSEMBL_BAND_HEIGHT + self.UCSC_BAND_HEIGHT+ self.WEBQTL_BAND_HEIGHT + 3*self.BAND_SPACING+ 10*zoom
- if self.geneChecked:
- drawAreaHeight -= self.NUM_GENE_ROWS*self.EACH_GENE_HEIGHT + 3*self.BAND_SPACING + 10*zoom
- else:# for all chrs
- if self.selectedChr > -1:
- drawAreaHeight -= 20
- else:
- drawAreaHeight -= 30
-
- #Image map
- gifmap = HT.Map(name='WebQTLImageMap')
-
- newoffset = (xLeftOffset, xRightOffset, yTopOffset, yBottomOffset)
- # Draw the alternating-color background first and get plotXScale
- plotXScale = self.drawGraphBackground(canvas, gifmap, offset=newoffset, zoom= zoom, startMb=startMb, endMb = endMb)
-
- # Draw X axis
- self.drawXAxis(fd, canvas, drawAreaHeight, gifmap, plotXScale, showLocusForm, offset=newoffset, zoom= zoom, startMb=startMb, endMb = endMb)
- # Draw QTL curve
- self.drawQTL(canvas, drawAreaHeight, gifmap, plotXScale, offset=newoffset, zoom= zoom, startMb=startMb, endMb = endMb)
-
- #draw legend
- if self.multipleInterval:
- self.drawMultiTraitName(fd, canvas, gifmap, showLocusForm, offset=newoffset)
- elif self.legendChecked:
- self.drawLegendPanel(fd, canvas, offset=newoffset)
- else:
- pass
-
- #draw position, no need to use a separate function
- if fd.genotype.Mbmap:
- self.drawProbeSetPosition(canvas, plotXScale, offset=newoffset)
-
- return gifmap
-
-
- # functions for manhattam plot of markers
- def drawManhattanPlotForPLINK(self, canvas, drawAreaHeight, gifmap, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None,plinkResultDict={},thresholdPvalue=-1):
-
- xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
- plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
- plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
- fontZoom = zoom
- if zoom == 2:
- fontZoom = 1.5
-
- # INTERCROSS = (self.genotype.type=="intercross")
- INTERCROSS ='' #??????
-
- ChrLengthDistList = self.ChrLengthMbList
- drawRegionDistance = self.ChrLengthMbSum
- GraphInterval=self.GraphInterval
- pvalueHeightThresh = drawAreaHeight - 80 #ZS: Otherwise the plot gets very close to the chromosome labels
-
- #draw the pvalue scale
- #We first determine whether or not we are using a sliding scale.
- #If so, we need to compute the maximum pvalue value to determine where the max y-value should be, and call this pvalueMax.
- #pvalueTop is then defined to be above the pvalueMax by enough to add one additional pvalueScale increment.
- #if we are using a set-scale, then we set pvalueTop to be the user's value, and pvalueMax doesn't matter.
-
- # for human data we use p value instead of lrs
- pValueList=[]
- for key in plinkResultDict:
- valueList = plinkResultDict[key]
- for item in valueList:
- pValue = item[-1]
- pValueList.append(pValue)
-
- formattedPValueList=[]
- for pValue in pValueList:
- try:
- pValue=float(pValue)
- except:
- pValue =1
- formattedpValue = -math.log10(pValue)
- formattedPValueList.append(formattedpValue)
-
- #sliding scale
- pvalueMax = max(formattedPValueList)
- #pvalueMax =pvalueMax +1
- # no permutation result for plink func: GenReport()
- pvalueMin = int(-math.log10(thresholdPvalue))
-
- if pvalueMax> 100:
- pvalueScale = 20.0
- elif pvalueMax > 20:
- pvalueScale = 5.0
- elif pvalueMax > 7.5:
- pvalueScale = 2.5
- else:
- pvalueScale = 1.0
-
- # the base line for x-axis is -log(thresholdPvalue)
- pvalueAxisList = Plot.frange(pvalueMin, pvalueMax, pvalueScale)
- #make sure the user's value appears on the y-axis
- #ZS: There is no way to do this without making the position of the points not directly proportional to a given distance on the y-axis
- #tempPvalueMax=round(pvalueMax)
- tempPvalueMax = pvalueAxisList[len(pvalueAxisList)-1] + pvalueScale
- pvalueAxisList.append(tempPvalueMax)
-
- #ZS: I don't understand this; the if statement will be true for any number that isn't exactly X.5.
- #if abs(tempPvalueMax-pvalueMax) <0.5:
- # tempPvalueMax=tempPvalueMax+1
- # pvalueAxisList.append(tempPvalueMax)
-
- #draw the "pvalue" string to the left of the axis
- pvalueScaleFont=pid.Font(ttf="verdana", size=14*fontZoom, bold=0)
- pvalueLODFont=pid.Font(ttf="verdana", size=14*zoom*1.5, bold=0)
- yZero = yTopOffset + plotHeight
-
- #yAxis label display area
- yAxis_label ='-log(P)'
- canvas.drawString(yAxis_label, xLeftOffset - canvas.stringWidth("999.99", font=pvalueScaleFont) - 10*zoom, \
- yZero - 150, font=pvalueLODFont, color=pid.black, angle=90)
-
- for i,item in enumerate(pvalueAxisList):
- ypvalue = yZero - (float(i)/float(len(pvalueAxisList) - 1)) * pvalueHeightThresh
- canvas.drawLine(xLeftOffset, ypvalue, xLeftOffset - 4, ypvalue, color=self.LRS_COLOR, width=1*zoom)
- scaleStr = "%2.1f" % item
- #added by NL 6-24-2011:Y-axis scale display
- canvas.drawString(scaleStr, xLeftOffset-4-canvas.stringWidth(scaleStr, font=pvalueScaleFont)-5, ypvalue+3, font=pvalueScaleFont, color=self.LRS_COLOR)
-
- ChrList=self.ChrList
- startPosX = xLeftOffset
-
- for i, chr in enumerate(ChrList):
-
- if plinkResultDict.has_key(chr):
- plinkresultList = plinkResultDict[chr]
-
- m = 0
- #add by NL 06-24-2011: for mahanttam plot
- symbolFont = pid.Font(ttf="fnt_bs", size=5,bold=0)
- # color for point in each chr
- chrCount=len(ChrList)
- chrColorDict =self.getColorForMarker(chrCount=chrCount,flag=1)
- for j, item in enumerate(plinkresultList):
- try :
- mb=float(item[1])/1000000.0
- except:
- mb=0
-
- try :
- pvalue =float(item[-1])
- except:
- pvalue =1
-
- try:
- snpName = item[0]
- except:
- snpName=''
-
- formattedPvalue = -math.log10(pvalue)
-
- Xc = startPosX + (mb-startMb)*plotXScale
- Yc = yZero - (formattedPvalue-pvalueMin)*pvalueHeightThresh/(tempPvalueMax - pvalueMin)
- canvas.drawString("5", Xc-canvas.stringWidth("5",font=symbolFont)/2+1,Yc+2,color=chrColorDict[i], font=symbolFont)
- m += 1
-
- startPosX += (ChrLengthDistList[i]+GraphInterval)*plotXScale
-
- canvas.drawLine(xLeftOffset, yZero, xLeftOffset, yTopOffset, color=self.LRS_COLOR, width=1*zoom) #the blue line running up the y axis
-
- def drawQTL(self, canvas, drawAreaHeight, gifmap, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
-
- xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
- plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
- plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
- fontZoom = zoom
- if zoom == 2:
- fontZoom = 1.5
-
- INTERCROSS = (self.genotype.type=="intercross")
-
- ChrLengthDistList = self.ChrLengthMbList
- GraphInterval=self.GraphInterval
- LRSHeightThresh = drawAreaHeight
- AdditiveHeightThresh = drawAreaHeight/2
- DominanceHeightThresh = drawAreaHeight/2
-
- #draw the LRS scale
- #We first determine whether or not we are using a sliding scale.
- #If so, we need to compute the maximum LRS value to determine where the max y-value should be, and call this LRSMax.
- #LRSTop is then defined to be above the LRSMax by enough to add one additional LRSScale increment.
- #if we are using a set-scale, then we set LRSTop to be the user's value, and LRSMax doesn't matter.
-
- if self.LRS_LOD == 'LOD':
- lodm = self.LODFACTOR
- else:
- lodm = 1.0
-
- if self.lrsMax <= 0: #sliding scale
- LRSMax = max(map(max, self.qtlresults)).lrs
- #genotype trait will give infinite LRS
- LRSMax = min(LRSMax, webqtlConfig.MAXLRS)
- LRSMax = max(self.significance, LRSMax)
- else:
- LRSMax = self.lrsMax*lodm
-
- if LRSMax/lodm > 100:
- LRSScale = 20.0
- elif LRSMax/lodm > 20:
- LRSScale = 5.0
- elif LRSMax/lodm > 7.5:
- LRSScale = 2.5
- else:
- LRSScale = 1.0
-
- LRSAxisList = Plot.frange(LRSScale, LRSMax/lodm, LRSScale)
- #make sure the user's value appears on the y-axis
- #update by NL 6-21-2011: round the LOD value to 100 when LRSMax is equal to 460
- LRSAxisList.append(round(LRSMax/lodm))
-
- #draw the "LRS" or "LOD" string to the left of the axis
- LRSScaleFont=pid.Font(ttf="verdana", size=14*fontZoom, bold=0)
- LRSLODFont=pid.Font(ttf="verdana", size=14*zoom*1.5, bold=0)
- yZero = yTopOffset + plotHeight
-
- #yAxis label display area
- canvas.drawString(self.LRS_LOD, xLeftOffset - canvas.stringWidth("999.99", font=LRSScaleFont) - 10*zoom, \
- yZero - 150, font=LRSLODFont, color=pid.black, angle=90)
-
- for item in LRSAxisList:
- yLRS = yZero - (item*lodm/LRSMax) * LRSHeightThresh
- canvas.drawLine(xLeftOffset, yLRS, xLeftOffset - 4, yLRS, color=self.LRS_COLOR, width=1*zoom)
- scaleStr = "%2.1f" % item
- #added by NL 6-24-2011:Y-axis scale display
- canvas.drawString(scaleStr, xLeftOffset-4-canvas.stringWidth(scaleStr, font=LRSScaleFont)-5, yLRS+3, font=LRSScaleFont, color=self.LRS_COLOR)
-
-
- #"Significant" and "Suggestive" Drawing Routine
- # ======= Draw the thick lines for "Significant" and "Suggestive" ===== (crowell: I tried to make the SNPs draw over these lines, but piddle wouldn't have it...)
- if self.permChecked and not self.multipleInterval:
- significantY = yZero - self.significance*LRSHeightThresh/LRSMax
- suggestiveY = yZero - self.suggestive*LRSHeightThresh/LRSMax
-
-
- startPosX = xLeftOffset
- for i, _chr in enumerate(self.genotype):
- rightEdge = int(startPosX + self.ChrLengthDistList[i]*plotXScale - self.SUGGESTIVE_WIDTH/1.5)
- #added by NL 6-24-2011:draw suggestive line (grey one)
- canvas.drawLine(startPosX+self.SUGGESTIVE_WIDTH/1.5, suggestiveY, rightEdge, suggestiveY, color=self.SUGGESTIVE_COLOR,
- width=self.SUGGESTIVE_WIDTH*zoom, clipX=(xLeftOffset, xLeftOffset + plotWidth-2))
- #added by NL 6-24-2011:draw significant line (pink one)
- canvas.drawLine(startPosX+self.SUGGESTIVE_WIDTH/1.5, significantY, rightEdge, significantY, color=self.SIGNIFICANT_COLOR,
- width=self.SIGNIFICANT_WIDTH*zoom, clipX=(xLeftOffset, xLeftOffset + plotWidth-2))
- sugg_coords = "%d, %d, %d, %d" % (startPosX, suggestiveY-2, rightEdge + 2*zoom, suggestiveY+2)
- sig_coords = "%d, %d, %d, %d" % (startPosX, significantY-2, rightEdge + 2*zoom, significantY+2)
- if self.LRS_LOD == 'LRS':
- sugg_title = "Suggestive LRS = %0.2f" % self.suggestive
- sig_title = "Significant LRS = %0.2f" % self.significance
- else:
- sugg_title = "Suggestive LOD = %0.2f" % (self.suggestive/4.61)
- sig_title = "Significant LOD = %0.2f" % (self.significance/4.61)
- Areas1 = HT.Area(shape='rect',coords=sugg_coords,title=sugg_title)
- Areas2 = HT.Area(shape='rect',coords=sig_coords,title=sig_title)
- gifmap.areas.append(Areas1)
- gifmap.areas.append(Areas2)
-
- startPosX += (self.ChrLengthDistList[i]+self.GraphInterval)*plotXScale
-
-
- if self.multipleInterval:
- lrsEdgeWidth = 1
- else:
- additiveMax = max(map(lambda X : abs(X.additive), self.qtlresults[0]))
- if INTERCROSS:
- dominanceMax = max(map(lambda X : abs(X.dominance), self.qtlresults[0]))
- else:
- dominanceMax = -1
- lrsEdgeWidth = 2
- for i, qtlresult in enumerate(self.qtlresults):
- m = 0
- startPosX = xLeftOffset
- thisLRSColor = self.colorCollection[i]
-
- #add by NL 06-24-2011: for mahanttam plot
- symbolFont = pid.Font(ttf="fnt_bs", size=5,bold=0)
-
- for j, _chr in enumerate(self.genotype):
- chrCount=len(self.genotype)
- chrColorDict =self.getColorForMarker(chrCount=chrCount,flag=1)
- LRSCoordXY = []
- AdditiveCoordXY = []
- DominanceCoordXY = []
- for k, _locus in enumerate(_chr):
- if self.plotScale == 'physic':
- Xc = startPosX + (_locus.Mb-startMb)*plotXScale
- else:
- Xc = startPosX + (_locus.cM-_chr[0].cM)*plotXScale
- # updated by NL 06-18-2011:
- # fix the over limit LRS graph issue since genotype trait may give infinite LRS;
- # for any lrs is over than 460(LRS max in this system), it will be reset to 460
- if qtlresult[m].lrs> 460 or qtlresult[m].lrs=='inf':
- Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/LRSMax
- else:
- Yc = yZero - qtlresult[m].lrs*LRSHeightThresh/LRSMax
-
- LRSCoordXY.append((Xc, Yc))
- #add by NL 06-24-2011: for mahanttam plot
- #self.significance/4.61 consider chr and LOD
- # significantY = yZero - self.significance*LRSHeightThresh/LRSMax
- # if Yc >significantY:
- # canvas.drawString(":", Xc-canvas.stringWidth(":",font=symbolFont)/2+1,Yc+2,color=pid.black, font=symbolFont)
- # else:
- # canvas.drawString(":", Xc-canvas.stringWidth(":",font=symbolFont)/2+1,Yc+2,color=pid.black, font=symbolFont)
-
- # add by NL 06-27-2011: eliminate imputed value when locus name is equal to '-'
- if (qtlresult[m].locus.name) and (qtlresult[m].locus.name!=' - '):
- canvas.drawString("5", Xc-canvas.stringWidth("5",font=symbolFont)/2+1,Yc+2,color=chrColorDict[j], font=symbolFont)
-
- if not self.multipleInterval and self.additiveChecked:
- Yc = yZero - qtlresult[m].additive*AdditiveHeightThresh/additiveMax
- AdditiveCoordXY.append((Xc, Yc))
- if not self.multipleInterval and INTERCROSS and self.additiveChecked:
- Yc = yZero - qtlresult[m].dominance*DominanceHeightThresh/dominanceMax
- DominanceCoordXY.append((Xc, Yc))
- m += 1
-
- startPosX += (ChrLengthDistList[j]+GraphInterval)*plotXScale
-
-
- ###draw additive scale
- if not self.multipleInterval and self.additiveChecked:
- additiveScaleFont=pid.Font(ttf="verdana",size=12*fontZoom,bold=0)
- additiveScale = Plot.detScaleOld(0,additiveMax)
- additiveStep = (additiveScale[1]-additiveScale[0])/additiveScale[2]
- additiveAxisList = Plot.frange(0, additiveScale[1], additiveStep)
- maxAdd = additiveScale[1]
- addPlotScale = AdditiveHeightThresh/additiveMax
-
- additiveAxisList.append(additiveScale[1])
- for item in additiveAxisList:
- additiveY = yZero - item*addPlotScale
- canvas.drawLine(xLeftOffset + plotWidth,additiveY,xLeftOffset+4+ plotWidth,additiveY,color=self.ADDITIVE_COLOR_POSITIVE, width=1*zoom)
- scaleStr = "%2.3f" % item
- canvas.drawString(scaleStr,xLeftOffset + plotWidth +6,additiveY+5,font=additiveScaleFont,color=self.ADDITIVE_COLOR_POSITIVE)
-
- canvas.drawLine(xLeftOffset+plotWidth,additiveY,xLeftOffset+plotWidth,yZero,color=self.ADDITIVE_COLOR_POSITIVE, width=1*zoom)
-
- canvas.drawLine(xLeftOffset, yZero, xLeftOffset, yTopOffset, color=self.LRS_COLOR, width=1*zoom) #the blue line running up the y axis
-
- def drawGraphBackgroundForPLINK(self, canvas, gifmap, offset= (80, 120, 80, 50), zoom = 1, startMb = None, endMb = None,plinkResultDict={} ):
-
- xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
- plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
- plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
- fontZoom = zoom
- if zoom == 2:
- fontZoom = 1.5
-
- #calculate plot scale
- #XZ: all of these global variables should be passed from function signiture
- ChrLengthDistList = self.ChrLengthMbList
- drawRegionDistance = self.ChrLengthMbSum
- GraphInterval=self.GraphInterval
- ChrList =self.ChrList
-
- #multiple chromosome view
- plotXScale = plotWidth / ((len(ChrList)-1)*GraphInterval + drawRegionDistance)
-
- startPosX = xLeftOffset
- chrLabelFont=pid.Font(ttf="verdana",size=24*fontZoom,bold=0)
-
- for i, _chr in enumerate(ChrList):
-
- if (i % 2 == 0):
- theBackColor = self.GRAPH_BACK_DARK_COLOR
- else:
- theBackColor = self.GRAPH_BACK_LIGHT_COLOR
- # NL:resize chr width for drawing
- if float(ChrLengthDistList[i])<90:
- ChrLengthDistList[i]=90
- #draw the shaded boxes and the sig/sug thick lines
- canvas.drawRect(startPosX, yTopOffset, startPosX + ChrLengthDistList[i]*plotXScale, \
- yTopOffset+plotHeight, edgeColor=pid.gainsboro,fillColor=theBackColor)
-
- chrNameWidth = canvas.stringWidth(_chr, font=chrLabelFont)
- chrStartPix = startPosX + (ChrLengthDistList[i]*plotXScale -chrNameWidth)/2
- chrEndPix = startPosX + (ChrLengthDistList[i]*plotXScale +chrNameWidth)/2
-
- canvas.drawString(_chr, chrStartPix, yTopOffset +20,font = chrLabelFont,color=pid.dimgray)
- COORDS = "%d,%d,%d,%d" %(chrStartPix, yTopOffset, chrEndPix,yTopOffset +20)
-
- #add by NL 09-03-2010
- HREF = "javascript:changeView(%d,%s);" % (i,ChrLengthDistList)
- Areas = HT.Area(shape='rect',coords=COORDS,href=HREF)
- gifmap.areas.append(Areas)
- startPosX += (ChrLengthDistList[i]+GraphInterval)*plotXScale
-
- return plotXScale
-
-
- def drawGraphBackground(self, canvas, gifmap, offset= (80, 120, 80, 50), zoom = 1, startMb = None, endMb = None):
- ##conditions
- ##multiple Chromosome view
- ##single Chromosome Physical
- ##single Chromosome Genetic
- xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
- plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
- plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
- fontZoom = zoom
- if zoom == 2:
- fontZoom = 1.5
-
- #calculate plot scale
- if self.plotScale != 'physic':
- self.ChrLengthDistList = self.ChrLengthCMList
- drawRegionDistance = self.ChrLengthCMSum
- else:
- self.ChrLengthDistList = self.ChrLengthMbList
- drawRegionDistance = self.ChrLengthMbSum
-
- if self.selectedChr > -1: #single chromosome view
- spacingAmt = plotWidth/13.5
- i = 0
- for startPix in Plot.frange(xLeftOffset, xLeftOffset+plotWidth, spacingAmt):
- if (i % 2 == 0):
- theBackColor = self.GRAPH_BACK_DARK_COLOR
- else:
- theBackColor = self.GRAPH_BACK_LIGHT_COLOR
- i += 1
- canvas.drawRect(startPix, yTopOffset, min(startPix+spacingAmt, xLeftOffset+plotWidth), \
- yTopOffset+plotHeight, edgeColor=theBackColor, fillColor=theBackColor)
-
- drawRegionDistance = self.ChrLengthDistList[self.selectedChr]
- self.ChrLengthDistList = [drawRegionDistance]
- if self.plotScale == 'physic':
- plotXScale = plotWidth / (endMb-startMb)
- else:
- plotXScale = plotWidth / drawRegionDistance
-
- else: #multiple chromosome view
- plotXScale = plotWidth / ((len(self.genotype)-1)*self.GraphInterval + drawRegionDistance)
-
- startPosX = xLeftOffset
- chrLabelFont=pid.Font(ttf="verdana",size=24*fontZoom,bold=0)
-
- for i, _chr in enumerate(self.genotype):
-
- if (i % 2 == 0):
- theBackColor = self.GRAPH_BACK_DARK_COLOR
- else:
- theBackColor = self.GRAPH_BACK_LIGHT_COLOR
-
- #draw the shaded boxes and the sig/sug thick lines
- canvas.drawRect(startPosX, yTopOffset, startPosX + self.ChrLengthDistList[i]*plotXScale, \
- yTopOffset+plotHeight, edgeColor=pid.gainsboro,fillColor=theBackColor)
-
- chrNameWidth = canvas.stringWidth(_chr.name, font=chrLabelFont)
- chrStartPix = startPosX + (self.ChrLengthDistList[i]*plotXScale -chrNameWidth)/2
- chrEndPix = startPosX + (self.ChrLengthDistList[i]*plotXScale +chrNameWidth)/2
-
- canvas.drawString(_chr.name, chrStartPix, yTopOffset +20,font = chrLabelFont,color=pid.dimgray)
- COORDS = "%d,%d,%d,%d" %(chrStartPix, yTopOffset, chrEndPix,yTopOffset +20)
-
- #add by NL 09-03-2010
- HREF = "javascript:changeView(%d,%s);" % (i,self.ChrLengthMbList)
- Areas = HT.Area(shape='rect',coords=COORDS,href=HREF)
- gifmap.areas.append(Areas)
- startPosX += (self.ChrLengthDistList[i]+self.GraphInterval)*plotXScale
-
- return plotXScale
-
- # XZ: The only difference of function drawXAxisForPLINK and function drawXAxis are the function name and the self.plotScale condition.
- def drawXAxisForPLINK(self, fd, canvas, drawAreaHeight, gifmap, plotXScale, showLocusForm, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
- xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
- plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
- plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
- yZero = canvas.size[1] - yBottomOffset
- fontZoom = zoom
- if zoom == 2:
- fontZoom = 1.5
-
- #Parameters
- ChrLengthDistList = self.ChrLengthMbList
- GraphInterval=self.GraphInterval
-
- NUM_MINOR_TICKS = 5 # Number of minor ticks between major ticks
- X_MAJOR_TICK_THICKNESS = 2
- X_MINOR_TICK_THICKNESS = 1
- X_AXIS_THICKNESS = 1*zoom
-
- # ======= Alex: Draw the X-axis labels (megabase location)
- MBLabelFont = pid.Font(ttf="verdana", size=12*fontZoom, bold=0)
- xMajorTickHeight = 15 # How high the tick extends below the axis
- xMinorTickHeight = 5*zoom
- xAxisTickMarkColor = pid.black
- xAxisLabelColor = pid.black
- fontHeight = 12*fontZoom # How tall the font that we're using is
- spacingFromLabelToAxis = 20
- spacingFromLineToLabel = 3
-
- if self.plotScale == 'physic':
- strYLoc = yZero + spacingFromLabelToAxis + canvas.fontHeight(MBLabelFont)
- ###Physical single chromosome view
- if self.selectedChr > -1:
- graphMbWidth = endMb - startMb
- XScale = Plot.detScale(startMb, endMb)
- XStart, XEnd, XStep = XScale
- if XStep < 8:
- XStep *= 2
- spacingAmtX = spacingAmt = (XEnd-XStart)/XStep
-
- j = 0
- while abs(spacingAmtX -int(spacingAmtX)) >= spacingAmtX/100.0 and j < 6:
- j += 1
- spacingAmtX *= 10
-
- formatStr = '%%2.%df' % j
-
- for counter, _Mb in enumerate(Plot.frange(XStart, XEnd, spacingAmt / NUM_MINOR_TICKS)):
- if _Mb < startMb or _Mb > endMb:
- continue
- Xc = xLeftOffset + plotXScale*(_Mb - startMb)
- if counter % NUM_MINOR_TICKS == 0: # Draw a MAJOR mark, not just a minor tick mark
- canvas.drawLine(Xc, yZero, Xc, yZero+xMajorTickHeight, color=xAxisTickMarkColor, width=X_MAJOR_TICK_THICKNESS) # Draw the MAJOR tick mark
- labelStr = str(formatStr % _Mb) # What Mbase location to put on the label
- strWidth = canvas.stringWidth(labelStr, font=MBLabelFont)
- drawStringXc = (Xc - (strWidth / 2.0))
- canvas.drawString(labelStr, drawStringXc, strYLoc, font=MBLabelFont, color=xAxisLabelColor, angle=0)
- else:
- canvas.drawLine(Xc, yZero, Xc, yZero+xMinorTickHeight, color=xAxisTickMarkColor, width=X_MINOR_TICK_THICKNESS) # Draw the MINOR tick mark
- # end else
-
- ###Physical genome wide view
- else:
- distScale = 0
- startPosX = xLeftOffset
- for i, distLen in enumerate(ChrLengthDistList):
- if distScale == 0: #universal scale in whole genome mapping
- if distLen > 75:
- distScale = 25
- elif distLen > 30:
- distScale = 10
- else:
- distScale = 5
- for tickdists in range(distScale, ceil(distLen), distScale):
- canvas.drawLine(startPosX + tickdists*plotXScale, yZero, startPosX + tickdists*plotXScale, yZero + 7, color=pid.black, width=1*zoom)
- canvas.drawString(str(tickdists), startPosX+tickdists*plotXScale, yZero + 10*zoom, color=pid.black, font=MBLabelFont, angle=270)
- startPosX += (ChrLengthDistList[i]+GraphInterval)*plotXScale
-
- megabaseLabelFont = pid.Font(ttf="verdana", size=14*zoom*1.5, bold=0)
- canvas.drawString("Megabases", xLeftOffset + (plotWidth -canvas.stringWidth("Megabases", font=megabaseLabelFont))/2,
- strYLoc + canvas.fontHeight(MBLabelFont) + 5*zoom, font=megabaseLabelFont, color=pid.black)
- pass
-
- canvas.drawLine(xLeftOffset, yZero, xLeftOffset+plotWidth, yZero, color=pid.black, width=X_AXIS_THICKNESS) # Draw the X axis itself
-
- def drawXAxis(self, fd, canvas, drawAreaHeight, gifmap, plotXScale, showLocusForm, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
- xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
- plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
- plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
- yZero = canvas.size[1] - yBottomOffset
- fontZoom = zoom
- if zoom == 2:
- fontZoom = 1.5
-
- #Parameters
- NUM_MINOR_TICKS = 5 # Number of minor ticks between major ticks
- X_MAJOR_TICK_THICKNESS = 2
- X_MINOR_TICK_THICKNESS = 1
- X_AXIS_THICKNESS = 1*zoom
-
- # ======= Alex: Draw the X-axis labels (megabase location)
- MBLabelFont = pid.Font(ttf="verdana", size=12*fontZoom, bold=0)
- xMajorTickHeight = 15 # How high the tick extends below the axis
- xMinorTickHeight = 5*zoom
- xAxisTickMarkColor = pid.black
- xAxisLabelColor = pid.black
- fontHeight = 12*fontZoom # How tall the font that we're using is
- spacingFromLabelToAxis = 20
- spacingFromLineToLabel = 3
-
- if self.plotScale == 'physic':
- strYLoc = yZero + spacingFromLabelToAxis + canvas.fontHeight(MBLabelFont)
- ###Physical single chromosome view
- if self.selectedChr > -1:
- graphMbWidth = endMb - startMb
- XScale = Plot.detScale(startMb, endMb)
- XStart, XEnd, XStep = XScale
- if XStep < 8:
- XStep *= 2
- spacingAmtX = spacingAmt = (XEnd-XStart)/XStep
-
- j = 0
- while abs(spacingAmtX -int(spacingAmtX)) >= spacingAmtX/100.0 and j < 6:
- j += 1
- spacingAmtX *= 10
-
- formatStr = '%%2.%df' % j
-
- for counter, _Mb in enumerate(Plot.frange(XStart, XEnd, spacingAmt / NUM_MINOR_TICKS)):
- if _Mb < startMb or _Mb > endMb:
- continue
- Xc = xLeftOffset + plotXScale*(_Mb - startMb)
- if counter % NUM_MINOR_TICKS == 0: # Draw a MAJOR mark, not just a minor tick mark
- canvas.drawLine(Xc, yZero, Xc, yZero+xMajorTickHeight, color=xAxisTickMarkColor, width=X_MAJOR_TICK_THICKNESS) # Draw the MAJOR tick mark
- labelStr = str(formatStr % _Mb) # What Mbase location to put on the label
- strWidth = canvas.stringWidth(labelStr, font=MBLabelFont)
- drawStringXc = (Xc - (strWidth / 2.0))
- canvas.drawString(labelStr, drawStringXc, strYLoc, font=MBLabelFont, color=xAxisLabelColor, angle=0)
- else:
- canvas.drawLine(Xc, yZero, Xc, yZero+xMinorTickHeight, color=xAxisTickMarkColor, width=X_MINOR_TICK_THICKNESS) # Draw the MINOR tick mark
- # end else
-
- ###Physical genome wide view
- else:
- distScale = 0
- startPosX = xLeftOffset
- for i, distLen in enumerate(self.ChrLengthDistList):
- if distScale == 0: #universal scale in whole genome mapping
- if distLen > 75:
- distScale = 25
- elif distLen > 30:
- distScale = 10
- else:
- distScale = 5
- for tickdists in range(distScale, ceil(distLen), distScale):
- canvas.drawLine(startPosX + tickdists*plotXScale, yZero, startPosX + tickdists*plotXScale, yZero + 7, color=pid.black, width=1*zoom)
- canvas.drawString(str(tickdists), startPosX+tickdists*plotXScale, yZero + 10*zoom, color=pid.black, font=MBLabelFont, angle=270)
- startPosX += (self.ChrLengthDistList[i]+self.GraphInterval)*plotXScale
-
- megabaseLabelFont = pid.Font(ttf="verdana", size=14*zoom*1.5, bold=0)
- canvas.drawString("Megabases", xLeftOffset + (plotWidth -canvas.stringWidth("Megabases", font=megabaseLabelFont))/2,
- strYLoc + canvas.fontHeight(MBLabelFont) + 5*zoom, font=megabaseLabelFont, color=pid.black)
- pass
- else:
- ChrAInfo = []
- preLpos = -1
- distinctCount = 0.0
- if len(self.genotype) > 1:
- for i, _chr in enumerate(self.genotype):
- thisChr = []
- Locus0CM = _chr[0].cM
- nLoci = len(_chr)
- if nLoci <= 8:
- for _locus in _chr:
- if _locus.name != ' - ':
- if _locus.cM != preLpos:
- distinctCount += 1
- preLpos = _locus.cM
- thisChr.append([_locus.name, _locus.cM-Locus0CM])
- else:
- for j in (0, nLoci/4, nLoci/2, nLoci*3/4, -1):
- while _chr[j].name == ' - ':
- j += 1
- if _chr[j].cM != preLpos:
- distinctCount += 1
- preLpos = _chr[j].cM
- thisChr.append([_chr[j].name, _chr[j].cM-Locus0CM])
- ChrAInfo.append(thisChr)
- else:
- for i, _chr in enumerate(self.genotype):
- thisChr = []
- Locus0CM = _chr[0].cM
- for _locus in _chr:
- if _locus.name != ' - ':
- if _locus.cM != preLpos:
- distinctCount += 1
- preLpos = _locus.cM
- thisChr.append([_locus.name, _locus.cM-Locus0CM])
- ChrAInfo.append(thisChr)
-
- stepA = (plotWidth+0.0)/distinctCount
-
- LRectWidth = 10
- LRectHeight = 3
- offsetA = -stepA
- lineColor = pid.lightblue
- startPosX = xLeftOffset
- for j, ChrInfo in enumerate(ChrAInfo):
- preLpos = -1
- for i, item in enumerate(ChrInfo):
- Lname,Lpos = item
- if Lpos != preLpos:
- offsetA += stepA
- differ = 1
- else:
- differ = 0
- preLpos = Lpos
- Lpos *= plotXScale
- if self.selectedChr > -1:
- Zorder = i % 5
- else:
- Zorder = 0
- if differ:
- canvas.drawLine(startPosX+Lpos,yZero,xLeftOffset+offsetA,\
- yZero+25, color=lineColor)
- canvas.drawLine(xLeftOffset+offsetA,yZero+25,xLeftOffset+offsetA,\
- yZero+40+Zorder*(LRectWidth+3),color=lineColor)
- rectColor = pid.orange
- else:
- canvas.drawLine(xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3)-3,\
- xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3),color=lineColor)
- rectColor = pid.deeppink
- canvas.drawRect(xLeftOffset+offsetA, yZero+40+Zorder*(LRectWidth+3),\
- xLeftOffset+offsetA-LRectHeight,yZero+40+Zorder*(LRectWidth+3)+LRectWidth,\
- edgeColor=rectColor,fillColor=rectColor,edgeWidth = 0)
- COORDS="%d,%d,%d,%d"%(xLeftOffset+offsetA-LRectHeight, yZero+40+Zorder*(LRectWidth+3),\
- xLeftOffset+offsetA,yZero+40+Zorder*(LRectWidth+3)+LRectWidth)
- HREF="javascript:showDatabase3('%s','%s','%s','');" % (showLocusForm,fd.RISet+"Geno", Lname)
- Areas=HT.Area(shape='rect',coords=COORDS,href=HREF, title="Locus : " + Lname)
- gifmap.areas.append(Areas)
- ##piddle bug
- if j == 0:
- canvas.drawLine(startPosX,yZero,startPosX,yZero+40, color=lineColor)
- startPosX += (self.ChrLengthDistList[j]+self.GraphInterval)*plotXScale
-
- canvas.drawLine(xLeftOffset, yZero, xLeftOffset+plotWidth, yZero, color=pid.black, width=X_AXIS_THICKNESS) # Draw the X axis itself
-
- def getColorForMarker(self, chrCount,flag):# no change is needed
- chrColorDict={}
- for i in range(chrCount):
- if flag==1: # display blue and lightblue intercross
- chrColorDict[i]=pid.black
- elif flag==0:
- if (i%2==0):
- chrColorDict[i]=pid.blue
- else:
- chrColorDict[i]=pid.lightblue
- else:#display different color for different chr
- if i in [0,8,16]:
- chrColorDict[i]=pid.black
- elif i in [1,9,17]:
- chrColorDict[i]=pid.red
- elif i in [2,10,18]:
- chrColorDict[i]=pid.lightgreen
- elif i in [3,11,19]:
- chrColorDict[i]=pid.blue
- elif i in [4,12]:
- chrColorDict[i]=pid.lightblue
- elif i in [5,13]:
- chrColorDict[i]=pid.hotpink
- elif i in [6,14]:
- chrColorDict[i]=pid.gold
- elif i in [7,15]:
- chrColorDict[i]=pid.grey
-
- return chrColorDict
-
-
- def drawProbeSetPosition(self, canvas, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
- if len(self.traitList) != 1:
- return
-
- xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
- plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
- plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
- yZero = canvas.size[1] - yBottomOffset
- fontZoom = zoom
- if zoom == 2:
- fontZoom = 1.5
-
- try:
- Chr = self.traitList[0].chr # self.traitListChr =self.traitList[0].chr=_vals need to change to chrList and mbList
- Mb = self.traitList[0].mb # self.traitListMb =self.traitList[0].mb=_vals
- except:
- return
-
- if self.plotScale == 'physic':
- if self.selectedChr > -1:
- if self.genotype[0].name != Chr or Mb < self.startMb or Mb > self.endMb:
- return
- else:
- locPixel = xLeftOffset + (Mb-self.startMb)*plotXScale
- else:
- locPixel = xLeftOffset
- for i, _chr in enumerate(self.genotype):
- if _chr.name != Chr:
- locPixel += (self.ChrLengthDistList[i] + self.GraphInterval)*plotXScale
- else:
- locPixel += Mb*plotXScale
- break
- else:
- if self.selectedChr > -1:
- if self.genotype[0].name != Chr:
- return
- else:
- for i, _locus in enumerate(self.genotype[0]):
- #the trait's position is on the left of the first genotype
- if i==0 and _locus.Mb >= Mb:
- locPixel=-1
- break
-
- #the trait's position is between two traits
- if i > 0 and self.genotype[0][i-1].Mb < Mb and _locus.Mb >= Mb:
- locPixel = xLeftOffset + plotXScale*(self.genotype[0][i-1].cM+(_locus.cM-self.genotype[0][i-1].cM)*(Mb -self.genotype[0][i-1].Mb)/(_locus.Mb-self.genotype[0][i-1].Mb))
- break
-
- #the trait's position is on the right of the last genotype
- if i==len(self.genotype[0]) and Mb>=_locus.Mb:
- locPixel = -1
- else:
- locPixel = xLeftOffset
- for i, _chr in enumerate(self.genotype):
- if _chr.name != Chr:
- locPixel += (self.ChrLengthDistList[i] + self.GraphInterval)*plotXScale
- else:
- locPixel += (Mb*(_chr[-1].cM-_chr[0].cM)/self.ChrLengthCMList[i])*plotXScale
- break
- if locPixel >= 0:
- traitPixel = ((locPixel, yZero), (locPixel-6, yZero+12), (locPixel+6, yZero+12))
- canvas.drawPolygon(traitPixel, edgeColor=pid.black, fillColor=self.TRANSCRIPT_LOCATION_COLOR, closed=1)
-
- if self.legendChecked:
- startPosY = 15
- nCol = 2
- smallLabelFont = pid.Font(ttf="trebuc", size=12, bold=1)
- leftOffset = xLeftOffset+(nCol-1)*200
- canvas.drawPolygon(((leftOffset+6, startPosY-6), (leftOffset, startPosY+6), (leftOffset+12, startPosY+6)), edgeColor=pid.black, fillColor=self.TRANSCRIPT_LOCATION_COLOR, closed=1)
- canvas.drawString("Sequence Site", (leftOffset+15), (startPosY+5), smallLabelFont, self.TOP_RIGHT_INFO_COLOR)
-
- # build dict based on plink result, key is chr, value is list of [snp,BP,pValue]
- def getPlinkResultDict(self,outputFileName='',thresholdPvalue=-1,ChrOrderIdNameDict={}):
-
- ChrList =self.ChrList
- plinkResultDict={}
-
- plinkResultfp = open("%s%s.qassoc"% (webqtlConfig.TMPDIR, outputFileName), "rb")
-
- headerLine=plinkResultfp.readline()# read header line
- line = plinkResultfp.readline()
-
- valueList=[] # initialize value list, this list will include snp, bp and pvalue info
- pValueList=[]
- count=0
-
- while line:
- #convert line from str to list
- lineList=self.buildLineList(line=line)
-
- # only keep the records whose chromosome name is in db
- if ChrOrderIdNameDict.has_key(int(lineList[0])) and lineList[-1] and lineList[-1].strip()!='NA':
-
- chrName=ChrOrderIdNameDict[int(lineList[0])]
- snp = lineList[1]
- BP = lineList[2]
- pValue = float(lineList[-1])
- pValueList.append(pValue)
-
- if plinkResultDict.has_key(chrName):
- valueList=plinkResultDict[chrName]
-
- # pvalue range is [0,1]
- if thresholdPvalue >=0 and thresholdPvalue<=1:
- if pValue < thresholdPvalue:
- valueList.append((snp,BP,pValue))
- count+=1
-
- plinkResultDict[chrName]=valueList
- valueList=[]
- else:
- if thresholdPvalue>=0 and thresholdPvalue<=1:
- if pValue < thresholdPvalue:
- valueList.append((snp,BP,pValue))
- count+=1
-
- if valueList:
- plinkResultDict[chrName]=valueList
-
- valueList=[]
-
-
- line =plinkResultfp.readline()
- else:
- line=plinkResultfp.readline()
-
- if pValueList:
- minPvalue= min(pValueList)
- else:
- minPvalue=0
-
- return count,minPvalue,plinkResultDict
-
-
- ######################################################
- # input: line: str,one line read from file
- # function: convert line from str to list;
- # output: lineList list
- #######################################################
- def buildLineList(self,line=None):
-
- lineList = string.split(string.strip(line),' ')# irregular number of whitespaces between columns
- lineList =[ item for item in lineList if item <>'']
- lineList = map(string.strip, lineList)
-
- return lineList
-
- #added by NL: automatically generate pheno txt file for PLINK based on strainList passed from dataEditing page
- def genPhenoTxtFileForPlink(self,phenoFileName='', RISetName='', probesetName='', valueDict={}):
- pedFileStrainList=self.getStrainNameFromPedFile(RISetName=RISetName)
- outputFile = open("%s%s.txt"%(webqtlConfig.TMPDIR,phenoFileName),"wb")
- headerLine = 'FID\tIID\t%s\n'%probesetName
- outputFile.write(headerLine)
-
- newValueList=[]
-
- #if valueDict does not include some strain, value will be set to -9999 as missing value
- for item in pedFileStrainList:
- try:
- value=valueDict[item]
- value=str(value).replace('value=','')
- value=value.strip()
- except:
- value=-9999
-
- newValueList.append(value)
-
-
- newLine=''
- for i, strain in enumerate(pedFileStrainList):
- j=i+1
- value=newValueList[i]
- newLine+='%s\t%s\t%s\n'%(strain, strain, value)
-
- if j%1000==0:
- outputFile.write(newLine)
- newLine=''
-
- if newLine:
- outputFile.write(newLine)
-
- outputFile.close()
-
- # get strain name from ped file in order
- def getStrainNameFromPedFile(self, RISetName=''):
- pedFileopen= open("%splink/%s.ped"%(webqtlConfig.GENODIR, RISetName),"r")
- line =pedFileopen.readline()
- strainNameList=[]
-
- while line:
- lineList=string.split(string.strip(line),'\t')
- lineList=map(string.strip,lineList)
-
- strainName=lineList[0]
- strainNameList.append(strainName)
-
- line =pedFileopen.readline()
-
- return strainNameList
-
- ################################################################
- # Generate Chr list, Chr OrderId and Retrieve Length Information
- ################################################################
- def getChrNameOrderIdLength(self,RISet=''):
-
- try:
- query = """
- Select
- Chr_Length.Name,Chr_Length.OrderId,Length from Chr_Length, InbredSet
- where
- Chr_Length.SpeciesId = InbredSet.SpeciesId AND
- InbredSet.Name = '%s'
- Order by OrderId
- """ % (RISet)
- self.cursor.execute(query)
-
- results =self.cursor.fetchall()
- ChrList=[]
- ChrLengthMbList=[]
- ChrNameOrderIdDict={}
- ChrOrderIdNameDict={}
-
- for item in results:
- ChrList.append(item[0])
- ChrNameOrderIdDict[item[0]]=item[1] # key is chr name, value is orderId
- ChrOrderIdNameDict[item[1]]=item[0] # key is orderId, value is chr name
- ChrLengthMbList.append(item[2])
-
- except:
- ChrList=[]
- ChrNameOrderIdDict={}
- ChrLengthMbList=[]
-
- return ChrList,ChrNameOrderIdDict,ChrOrderIdNameDict,ChrLengthMbList
diff --git a/wqflask/wqflask/marker_regression/marker_regression_gn1.py b/wqflask/wqflask/marker_regression/display_mapping_results.py
index 392ad745..a7e11738 100644
--- a/wqflask/wqflask/marker_regression/marker_regression_gn1.py
+++ b/wqflask/wqflask/marker_regression/display_mapping_results.py
@@ -24,13 +24,14 @@
#
# Last updated by Zach 12/14/2010
-import time
+import datetime
import string
from math import *
import piddle as pid
import sys,os
import cPickle
-import httplib, urllib
+import httplib
+import json
from flask import Flask, g
@@ -41,6 +42,7 @@ from base.GeneralObject import GeneralObject
from utility import webqtlUtil
from utility import helper_functions
from utility import Plot
+from utility.benchmark import Bench
from wqflask.interval_analyst import GeneUtil
from base.webqtlConfig import TMPDIR, GENERATED_TEXT_DIR, GENERATED_IMAGE_DIR
@@ -50,9 +52,8 @@ logger = utility.logger.getLogger(__name__ )
#########################################
# Inteval Mapping Plot Page
#########################################
-class MarkerRegression(object):
+class DisplayMappingResults(object):
cMGraphInterval = 5
- maxBootStrap = 50
GRAPH_MIN_WIDTH = 900
GRAPH_MAX_WIDTH = 10000 # Don't set this too high
GRAPH_DEFAULT_WIDTH = 1280
@@ -68,12 +69,10 @@ class MarkerRegression(object):
# ** GENES **********
BAND_SPACING = 4
- #ENSEMBL_BAND_Y = UCSC_BAND_Y + UCSC_BAND_HEIGHT + BAND_SPACING
- UCSC_BAND_HEIGHT = 10
- ENSEMBL_BAND_HEIGHT = 10
- WEBQTL_BAND_HEIGHT = 10
+ BAND_HEIGHT = 10
+ BAND_HEIGHT = 10
+ BAND_HEIGHT = 10
- #GENE_START_Y = ENSEMBL_BAND_Y + ENSEMBL_BAND_HEIGHT + BAND_SPACING
NUM_GENE_ROWS = 10
EACH_GENE_HEIGHT = 6 # number of pixels tall, for each gene to display
EACH_GENE_ARROW_WIDTH = 5
@@ -81,8 +80,6 @@ class MarkerRegression(object):
DRAW_DETAIL_MB = 4
DRAW_UTR_LABELS_MB = 4
- MIN_PIXELS_BETWEEN_LABELS = 50
-
qmarkImg = HT.Image('/images/qmarkBoxBlue.gif', width=10, height=13, border=0, alt='Glossary')
# Note that "qmark.gif" is a similar, smaller, rounded-edges question mark. It doesn't look
# like the ones on the image, though, which is why we don't use it here.
@@ -93,11 +90,8 @@ class MarkerRegression(object):
NR_INDIVIDUALS = 0
## END HaplotypeAnalyst
- ALEX_DEBUG_BOOL_COLORIZE_GENES = 1 # 0=don't colorize, 1=colorize
ALEX_DEBUG_BOOL_PRINT_GENE_LIST = 1
- kWIDTH_DEFAULT=1
-
kONE_MILLION = 1000000
LODFACTOR = 4.61
@@ -105,18 +99,14 @@ class MarkerRegression(object):
SNP_COLOR = pid.orange # Color for the SNP "seismograph"
TRANSCRIPT_LOCATION_COLOR = pid.mediumpurple
- GENE_FILL_COLOR = pid.HexColor(0x6666FF)
- GENE_OUTLINE_COLOR = pid.HexColor(0x000077)
BOOTSTRAP_BOX_COLOR = pid.yellow
LRS_COLOR = pid.HexColor(0x0000FF)
- LRS_LINE_WIDTH = 2
SIGNIFICANT_COLOR = pid.HexColor(0xEBC7C7)
SUGGESTIVE_COLOR = pid.gainsboro
SIGNIFICANT_WIDTH = 5
SUGGESTIVE_WIDTH = 5
ADDITIVE_COLOR_POSITIVE = pid.green
ADDITIVE_COLOR_NEGATIVE = pid.orange
- ADDITIVE_COLOR = ADDITIVE_COLOR_POSITIVE
DOMINANCE_COLOR_POSITIVE = pid.darkviolet
DOMINANCE_COLOR_NEGATIVE = pid.red
@@ -127,20 +117,16 @@ class MarkerRegression(object):
HAPLOTYPE_RECOMBINATION = pid.darkgray
## END HaplotypeAnalyst
- QMARK_EDGE_COLOR = pid.HexColor(0x718118)
- QMARK_FILL_COLOR = pid.HexColor(0xDEE3BB)
-
TOP_RIGHT_INFO_COLOR = pid.black
- X_AXIS_LABEL_COLOR = pid.black #HexColor(0x505050)
-
- MINI_VIEW_MAGNIFIED_REGION_COLOR = pid.HexColor(0xCC0000)
- MINI_VIEW_OUTSIDE_REGION_COLOR = pid.HexColor(0xEEEEEE)
- MINI_VIEW_BORDER_COLOR = pid.black
CLICKABLE_WEBQTL_REGION_COLOR = pid.HexColor(0xF5D3D3)
CLICKABLE_WEBQTL_REGION_OUTLINE_COLOR = pid.HexColor(0xFCE9E9)
CLICKABLE_WEBQTL_TEXT_COLOR = pid.HexColor(0x912828)
+ CLICKABLE_PHENOGEN_REGION_COLOR = pid.HexColor(0xA2FB94)
+ CLICKABLE_PHENOGEN_REGION_OUTLINE_COLOR = pid.HexColor(0xCEFEC7)
+ CLICKABLE_PHENOGEN_TEXT_COLOR = pid.HexColor(0x1FD504)
+
CLICKABLE_UCSC_REGION_COLOR = pid.HexColor(0xDDDDEE)
CLICKABLE_UCSC_REGION_OUTLINE_COLOR = pid.HexColor(0xEDEDFF)
CLICKABLE_UCSC_TEXT_COLOR = pid.HexColor(0x333366)
@@ -154,59 +140,50 @@ class MarkerRegression(object):
HELP_PAGE_REF = '/glossary.html'
- DRAW_UTR_LABELS=0
-
def __init__(self, start_vars):
-
- #templatePage.__init__(self, fd)
-
- #if not self.openMysql():
- # return
logger.info("Running qtlreaper")
- #helper_functions.get_species_dataset_trait(self, start_vars)
-
self.temp_uuid = start_vars['temp_uuid']
self.dataset = start_vars['dataset']
self.this_trait = start_vars['this_trait']
+ self.n_samples = start_vars['num_vals']
self.species = start_vars['species']
+ self.genofile_string = ""
+ if 'genofile_string' in start_vars:
+ self.genofile_string = start_vars['genofile_string']
+
+ self.geno_db_exists = start_vars['geno_db_exists']
+
+ self.first_run = True
+ if 'first_run' in start_vars:
+ self.first_run = start_vars['first_run']
+
+ if 'temp_trait' in start_vars and start_vars['temp_trait'] != "False":
+ self.temp_trait = "True"
+ self.group = start_vars['group']
#Needing for form submission when doing single chr mapping or remapping after changing options
self.samples = start_vars['samples']
self.vals = start_vars['vals']
self.mapping_method = start_vars['mapping_method']
+ self.mapping_results_path = start_vars['mapping_results_path']
if self.mapping_method == "rqtl_geno":
self.mapmethod_rqtl_geno = start_vars['method']
self.mapmodel_rqtl_geno = start_vars['model']
self.pair_scan = start_vars['pair_scan']
+ #if self.mapping_method != "gemma" and self.mapping_method != "plink":
self.js_data = start_vars['js_data']
self.trimmed_markers = start_vars['trimmed_markers'] #Top markers to display in table
- #ZS: Think I can just get all this from dataset object now
- #RISet and Species
- #if not fd.genotype:
- # fd.readGenotype()
- #
- #fd.parentsf14regression = fd.formdata.getvalue('parentsf14regression')
- #
- #if ((fd.parentsf14regression == 'on') and fd.genotype_2):
- # fd.genotype = fd.genotype_2
- #else:
- # fd.genotype = fd.genotype_1
- #fd.strainlist = list(fd.genotype.prgy)
- #
- #self.species = webqtlDatabaseFunction.retrieveSpecies(cursor=self.cursor, RISet=fd.RISet)
-
if self.dataset.group.species == "rat":
- self._ucscDb = "rn3"
+ self._ucscDb = "rn6"
elif self.dataset.group.species == "mouse":
self._ucscDb = "mm9"
else:
self._ucscDb = ""
-
#####################################
# Options
#####################################
@@ -252,23 +229,46 @@ class MarkerRegression(object):
self.controlLocus = start_vars['control_marker']
else:
self.controlLocus = ""
+ if 'covariates' in start_vars.keys():
+ self.covariates = start_vars['covariates']
+ if 'maf' in start_vars.keys():
+ self.maf = start_vars['maf']
+ if 'output_files' in start_vars.keys():
+ self.output_files = start_vars['output_files']
+ if 'use_loco' in start_vars.keys() and self.mapping_method == "gemma":
+ self.use_loco = start_vars['use_loco']
+
+ if 'reaper_version' in start_vars.keys() and self.mapping_method == "reaper":
+ self.reaper_version = start_vars['reaper_version']
+ if 'output_files' in start_vars:
+ self.output_files = ",".join(start_vars['output_files'])
- #try:
self.selectedChr = int(start_vars['selected_chr'])
- #except:
- # self.selectedChr = -1
-
- #whether include parents and F1 for InbredSet
- #fd.parentsf14regression = fd.formdata.getvalue('parentsf14regression')
- #if ((fd.parentsf14regression == 'on') and fd.genotype_2):
- # fd.genotype = fd.genotype_2
- #else:
- # fd.genotype = fd.genotype_1
-
- self.strainlist = self.dataset.group.samplelist
- self.genotype = self.dataset.group.read_genotype_file()
+
+ self.strainlist = start_vars['samples']
+
+ self.traitList = []
+ thisTrait = start_vars['this_trait']
+ self.traitList.append(thisTrait)
+
+ ################################################################
+ # Calculations QTL goes here
+ ################################################################
+ self.multipleInterval = len(self.traitList) > 1
+ self.qtlresults = start_vars['qtl_results']
+
+ if self.multipleInterval:
+ self.colorCollection = Plot.colorSpectrum(len(self.qtlresults))
+ else:
+ self.colorCollection = [self.LRS_COLOR]
+
if self.mapping_method == "reaper" and self.manhattan_plot != True:
- self.genotype = self.genotype.addinterval()
+ self.genotype = self.dataset.group.read_genotype_file(use_reaper=True)
+ else:
+ self.genotype = self.dataset.group.read_genotype_file()
+
+ #if self.mapping_method == "rqtl_geno" and self.genotype.filler == True:
+ # self.genotype = self.genotype.read_rdata_output(self.qtlresults)
#Darwing Options
try:
@@ -283,7 +283,6 @@ class MarkerRegression(object):
self.graphWidth = self.MULT_GRAPH_DEFAULT_WIDTH
## BEGIN HaplotypeAnalyst
- #self.haplotypeAnalystChecked = fd.formdata.getvalue('haplotypeAnalystCheck')
if 'haplotypeAnalystCheck' in start_vars.keys():
self.haplotypeAnalystChecked = start_vars['haplotypeAnalystCheck']
else:
@@ -296,7 +295,6 @@ class MarkerRegression(object):
self.LRS_LOD = start_vars['LRSCheck']
else:
self.LRS_LOD = start_vars['score_type']
- self.cutoff = start_vars['cutoff']
self.intervalAnalystChecked = True
self.draw2X = False
if 'additiveCheck' in start_vars.keys():
@@ -328,44 +326,20 @@ class MarkerRegression(object):
except:
self.lrsMax = 0
- #self.additiveChecked = fd.formdata.getvalue('additiveCheck')
- #self.dominanceChecked = fd.formdata.getvalue('dominanceCheck')
- #self.LRS_LOD = fd.formdata.getvalue('LRSCheck', 'LRS')
- #self.intervalAnalystChecked = fd.formdata.getvalue('intervalAnalystCheck')
- #self.legendChecked = fd.formdata.getvalue('viewLegend')
- #self.geneChecked = fd.formdata.getvalue('showGenes')
- #self.SNPChecked = fd.formdata.getvalue('showSNP')
- #self.draw2X = fd.formdata.getvalue('draw2X')
- #self.lrsMax = float(fd.formdata.getvalue('lrsMax', 0))
- #self.startMb = fd.formdata.getvalue('startMb', "-1")
- #self.endMb = fd.formdata.getvalue('endMb', "-1")
-
- #try:
- # self.startMb = float(self.startMb)
- # self.endMb = float(self.endMb)
- # if self.startMb > self.endMb:
- # temp = self.startMb
- # self.startMb = self.endMb
- # self.endMb = temp
- # #minimal distance 10bp
- # if self.endMb - self.startMb < 0.00001:
- # self.endMb = self.startMb + 0.00001
- #except:
- # self.startMb = self.endMb = -1
-
#Trait Infos
self.identification = ""
- #self.identification = fd.formdata.getvalue('identification', "")
################################################################
# Generate Chr list and Retrieve Length Information
################################################################
self.ChrList = [("All", -1)]
for i, indChr in enumerate(self.genotype):
+ if self.dataset.group.species == "mouse" and indChr.name == "20":
+ self.ChrList.append(("X", i))
+ elif self.dataset.group.species == "rat" and indChr.name == "21":
+ self.ChrList.append(("X", i))
self.ChrList.append((indChr.name, i))
-
-
self.ChrLengthMbList = g.db.execute("""
Select
Length from Chr_Length, InbredSet
@@ -387,6 +361,7 @@ class MarkerRegression(object):
self.ChrLengthCMList = []
for i, _chr in enumerate(self.genotype):
self.ChrLengthCMList.append(_chr[-1].cM - _chr[0].cM)
+
self.ChrLengthCMSum = reduce(lambda x, y:x+y, self.ChrLengthCMList, 0.0)
if self.plotScale == 'physic':
@@ -394,88 +369,28 @@ class MarkerRegression(object):
else:
self.GraphInterval = self.cMGraphInterval #cM
- ################################################################
- # Get Trait Values and Infomation
- ################################################################
- ##input from search page or selection page
- #self.searchResult = fd.formdata.getvalue('searchResult')
- ##convert single selection into a list
- #if type("1") == type(self.searchResult):
- # self.searchResult = string.split(self.searchResult,'\t')
- #
- #self.traitList = []
- #if self.searchResult and len(self.searchResult) > webqtlConfig.MULTIPLEMAPPINGLIMIT:
- # heading = 'Multiple Interval Mapping'
- # detail = ['In order to get clear result, do not select more than %d traits for \
- # Multiple Interval Mapping analysis.' % webqtlConfig.MULTIPLEMAPPINGLIMIT]
- # self.error(heading=heading,detail=detail)
- # return
- #elif self.searchResult:
- # self.dataSource = 'selectionPage'
- # for item in self.searchResult:
- # thisTrait = webqtlTrait(fullname=item, cursor=self.cursor)
- # thisTrait.retrieveInfo()
- # thisTrait.retrieveData(fd.strainlist)
- # self.traitList.append(thisTrait)
- #else:
-
- #input from data editing page
- #fd.readData()
- #if not fd.allTraitData:
- # heading = "Mapping"
- # detail = ['No trait data was selected for %s data set. No mapping attempted.' % fd.RISet]
- # self.error(heading=heading,detail=detail)
- # return
-
- self.dataSource = 'editingPage'
- self.traitList = []
- thisTrait = start_vars['this_trait']
- #fullname = fd.formdata.getvalue('fullname', '')
- #if fullname:
- # thisTrait = webqtlTrait(fullname=fullname, data=fd.allTraitData, cursor=self.cursor)
- # thisTrait.retrieveInfo()
- #else:
- # thisTrait = webqtlTrait(data=fd.allTraitData)
- self.traitList.append(thisTrait)
-
-
## BEGIN HaplotypeAnalyst
## count the amount of individuals to be plotted, and increase self.graphHeight
if self.haplotypeAnalystChecked and self.selectedChr > -1:
- #thisTrait = self.traitList[0]
- thisTrait = self.this_trait
- _strains, _vals, _vars = thisTrait.export_informative()
- smd=[]
- for ii, _val in enumerate(_vals):
- temp = GeneralObject(name=_strains[ii], value=_val)
- smd.append(temp)
- samplelist = list(self.genotype.prgy)
- for j,_geno in enumerate (self.genotype[0][1].genotype):
- for item in smd:
- if item.name == samplelist[j]:
- self.NR_INDIVIDUALS = self.NR_INDIVIDUALS + 1
+ thisTrait = self.this_trait
+ _strains, _vals, _vars, _aliases = thisTrait.export_informative()
+ smd=[]
+ for ii, _val in enumerate(self.vals):
+ if _val != "x":
+ temp = GeneralObject(name=self.samples[ii], value=float(_val))
+ smd.append(temp)
+ else:
+ continue
+ samplelist = list(self.genotype.prgy)
+ for j,_geno in enumerate (self.genotype[0][1].genotype):
+ for item in smd:
+ if item.name == samplelist[j]:
+ self.NR_INDIVIDUALS = self.NR_INDIVIDUALS + 1
# default:
- self.graphHeight = self.graphHeight + 2 * (self.NR_INDIVIDUALS+10) * self.EACH_GENE_HEIGHT
-## for paper:
- # #self.graphHeight = self.graphHeight + 1 * self.NR_INDIVIDUALS * self.EACH_GENE_HEIGHT - 180
+ self.graphHeight = self.graphHeight + 2 * (self.NR_INDIVIDUALS+10) * self.EACH_GENE_HEIGHT
## END HaplotypeAnalyst
- ################################################################
- # Calculations QTL goes here
- ################################################################
- self.multipleInterval = len(self.traitList) > 1
- self.qtlresults = start_vars['qtl_results']
- #errorMessage = self.calculateAllResult(fd)
- #if errorMessage:
- # heading = "Mapping"
- # detail = ['%s' % errorMessage]
- # self.error(heading=heading,detail=detail)
- # return
- if self.multipleInterval:
- self.colorCollection = Plot.colorSpectrum(len(self.qtlresults))
- else:
- self.colorCollection = [self.LRS_COLOR]
#########################
@@ -484,7 +399,7 @@ class MarkerRegression(object):
RISet = self.dataset.group.name
if RISet in ('AXB', 'BXA', 'AXBXA'):
self.diffCol = ['B6J', 'A/J']
- elif RISet in ('BXD', 'BXD300', 'B6D2F2', 'BDF2-2005', 'BDF2-1999', 'BHHBF2'):
+ elif RISet in ('BXD', 'BXD300', 'B6D2F2', 'BDF2-2005', 'BDF2-1999', 'BHHBF2', 'BXD-Harvested'):
self.diffCol = ['B6J', 'D2J']
elif RISet in ('CXB'):
self.diffCol = ['CBY', 'B6J']
@@ -499,9 +414,6 @@ class MarkerRegression(object):
for i, strain in enumerate(self.diffCol):
self.diffCol[i] = g.db.execute("select Id from Strain where Symbol = %s", strain).fetchone()[0]
- #self.cursor.execute("select Id from Strain where Symbol = %s", strain)
- #self.diffCol[i] = self.cursor.fetchone()[0]
- #print self.diffCol
################################################################
# GeneCollection goes here
@@ -524,13 +436,13 @@ class MarkerRegression(object):
chrName = "X"
else:
chrName = self.selectedChr
- self.geneCol = GeneUtil.loadGenes(chrName, self.diffCol, self.startMb, self.endMb, webqtldatabase, "mouse")
+ self.geneCol = GeneUtil.loadGenes(chrName, self.diffCol, self.startMb, self.endMb, "mouse")
elif self.dataset.group.species == "rat":
if self.selectedChr == 21:
chrName = "X"
else:
chrName = self.selectedChr
- self.geneCol = GeneUtil.loadGenes(chrName, self.diffCol, self.startMb, self.endMb, webqtldatabase, "rat")
+ self.geneCol = GeneUtil.loadGenes(chrName, self.diffCol, self.startMb, self.endMb, "rat")
if self.geneCol and self.intervalAnalystChecked:
#######################################################################
@@ -539,35 +451,22 @@ class MarkerRegression(object):
#through set GENEID is None #
#######################################################################
- #GENEID = fd.formdata.getvalue('GeneId') or None
GENEID = None
- geneTableContainer = HT.Div(Id="sortable") #Div to hold table
self.geneTable(self.geneCol, GENEID)
- #geneTable = self.geneTable(self.geneCol, GENEID)
- #geneTableContainer.append(geneTable)
-
- #mainfmName = webqtlUtil.genRandStr("fm_")
- #tableForm = HT.Form(cgi=os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), enctype='multipart/form-data', name=mainfmName, submit=HT.Input(type='hidden'))
- #tableForm.append(HT.Input(name='FormID', value='', type='hidden'))
- #tableForm.append(geneTableContainer)
-
################################################################
# Plots goes here
################################################################
- #if self.plotScale != 'physic' or self.multipleInterval:
- # showLocusForm = webqtlUtil.genRandStr("fm_")
- #else:
showLocusForm = ""
intCanvas = pid.PILCanvas(size=(self.graphWidth, self.graphHeight))
- gifmap = self.plotIntMapping(intCanvas, startMb = self.startMb, endMb = self.endMb, showLocusForm= showLocusForm)
+ with Bench("Drawing Plot"):
+ gifmap = self.plotIntMapping(intCanvas, startMb = self.startMb, endMb = self.endMb, showLocusForm= showLocusForm)
self.gifmap = gifmap.__str__()
- #print("GIFMAP:", gifmap.__str__())
self.filename= webqtlUtil.genRandStr("Itvl_")
- intCanvas.save(os.path.join(webqtlConfig.GENERATED_IMAGE_DIR, self.filename), format='jpeg')
+ intCanvas.save(os.path.join(webqtlConfig.GENERATED_IMAGE_DIR, self.filename), format='png')
intImg=HT.Image('/image/'+self.filename+'.png', border=0, usemap='#WebQTLImageMap')
#Scales plot differently for high resolution
@@ -575,23 +474,6 @@ class MarkerRegression(object):
intCanvasX2 = pid.PILCanvas(size=(self.graphWidth*2,self.graphHeight*2))
gifmapX2 = self.plotIntMapping(intCanvasX2, startMb = self.startMb, endMb = self.endMb, showLocusForm= showLocusForm, zoom=2)
intCanvasX2.save(os.path.join(webqtlConfig.GENERATED_IMAGE_DIR, self.filename+"X2"), format='png')
- #DLintImgX2=HT.Href(text='Download',url = '/image/'+self.filename+'X2.png', Class='smallsize', target='_blank')
-
- #textUrl = self.writeQTL2Text(fd, self.filename)
-
- ################################################################
- # Info tables goes here
- ################################################################
- #traitInfoTD = self.traitInfoTD(fd)
-
- #if self.draw2X:
- # traitInfoTD.append(HT.P(), DLintImgX2, ' a higher resolution 2X image. ')
- #else:
- # traitInfoTD.append(HT.P())
- #if textUrl:
- # traitInfoTD.append(HT.BR(), textUrl, ' results in tab-delimited text format.')
- #traitRemapTD = self.traitRemapTD(self.cursor, fd)
- #topTable = HT.TableLite(HT.TR(traitInfoTD, HT.TD("&nbsp;", width=25), traitRemapTD), border=0, cellspacing=0, cellpadding=0)
################################################################
# Outputs goes here
@@ -607,168 +489,25 @@ class MarkerRegression(object):
else:
showLocusForm = intImg
- if self.permChecked and self.nperm > 0 and not self.multipleInterval and 0 < self.nperm:
+ if (self.permChecked and self.nperm > 0) and not (self.multipleInterval and 0 < self.nperm):
self.perm_filename = self.drawPermutationHistogram()
- #perm_text_file = self.permutationTextFile()
################################################################
# footnote goes here
################################################################
btminfo = HT.Paragraph(Id="smallsize") #Small('More information about this graph is available here.')
- #if (self.additiveChecked):
- # btminfo.append(HT.BR(), 'A positive additive coefficient (', HT.Font('green', color='green'), ' line) indicates that %s alleles increase trait values. In contrast, a negative additive coefficient (' % fd.ppolar, HT.Font('red', color='red'), ' line) indicates that %s alleles increase trait values.' % fd.mpolar)
-
if self.traitList and self.traitList[0].dataset and self.traitList[0].dataset.type == 'Geno':
btminfo.append(HT.BR(), 'Mapping using genotype data as a trait will result in infinity LRS at one locus. In order to display the result properly, all LRSs higher than 100 are capped at 100.')
- #if self.permChecked and not self.multipleInterval and 0 < self.nperm:
- # TD_LR = HT.TD(HT.Blockquote(gifmap, showLocusForm, HT.P(), btminfo, HT.P(), perm_histogram, HT.P(), perm_text_file), bgColor='#eeeeee', height = 200)
- # #TD_LR = HT.TD(HT.Blockquote(topTable), HT.Blockquote(gifmap, showLocusForm, HT.P(), btminfo, HT.P(), perm_histogram, HT.P(), perm_text_file), bgColor='#eeeeee', height = 200)
- #else:
- TD_LR = HT.TD(HT.Blockquote(gifmap, showLocusForm, HT.P(), btminfo), bgColor='#eeeeee', height = 200)
- #TD_LR = HT.TD(HT.Blockquote(topTable), HT.Blockquote(gifmap, showLocusForm, HT.P(), btminfo, HT.P(), perm_histogram, HT.P(), perm_text_file), bgColor='#eeeeee', height = 200)
-
-
- if geneTable:
- iaForm = HT.Form(cgi= os.path.join(webqtlConfig.CGIDIR, "main.py?FormID=intervalAnalyst"), enctype='multipart/form-data',
- name="iaForm", submit=HT.Input(type='hidden'))
- hddn = {'chromosome':self.genotype[0].name, 'species':self.species,'startMb':self.startMb,'endMb':self.endMb}
- if self.diffCol:
- hddn['s1'] = self.diffCol[0]
- hddn['s2'] = self.diffCol[1]
- for key in hddn.keys():
- iaForm.append(HT.Input(name=key, value=hddn[key], type='hidden'))
- iaForm.append(HT.Paragraph("Interval Analyst : Chr %s from %2.6f to %2.6f Mb" % (self.genotype[0].name, self.startMb, self.endMb),
- HT.Input(name='customize', value='Customize', onClick= "formInNewWindow(this.form);", type='button', Class="button"), Class="subtitle"))
- TD_LR.append(HT.Blockquote(iaForm))
- # optionsTable
- selectall = HT.Href(url="#redirect", onClick="checkAll(document.getElementsByName('%s')[0]);" % mainfmName)
- selectall_img = HT.Image("/images/select_all2_final.jpg", name="selectall", alt="Select All", title="Select All", style="border:none;")
- selectall.append(selectall_img)
- reset = HT.Href(url="#redirect", onClick="checkNone(document.getElementsByName('%s')[0]); return false;" % mainfmName)
- reset_img = HT.Image("/images/select_none2_final.jpg", alt="Select None", title="Select None", style="border:none;")
- reset.append(reset_img)
- selectinvert = HT.Href(url="#redirect", onClick = "checkInvert(document.getElementsByName('%s')[0]);" % mainfmName)
- selectinvert_img = HT.Image("/images/invert_selection2_final.jpg", name="selectinvert", alt="Invert Selection", title="Invert Selection", style="border:none;")
- selectinvert.append(selectinvert_img)
- addselect = HT.Href(url="#redirect", onClick="addRmvSelection('%s', document.getElementsByName('%s')[0], 'addToSelection');" % (RISet, mainfmName))
- addselect_img = HT.Image("/images/add_collection1_final.jpg", name="addselect", alt="Add To Collection", title="Add To Collection", style="border:none;")
- addselect.append(addselect_img)
- geneweaver = HT.Href(url="#redirect", onClick="databaseFunc(document.getElementsByName('%s')[0], 'ODEIM');" % mainfmName)
- geneweaver_img = HT.Image("/images/ODE_logo_final.jpg", name="GeneWeaver", alt="Gene Weaver", title="Gene Weaver", style="border:none")
- geneweaver.append(geneweaver_img)
- optionsTable = HT.TableLite()
- optionsTable.append(HT.TR(
- HT.TD(selectall, width="77", style="text-align:center"),
- HT.TD(reset, width="77", style="text-align:center"),
- HT.TD(selectinvert, width="77", style="text-align:center"),
- HT.TD(geneweaver, width="77", style="text-align:center"),
- ))
- optionsTable.append(HT.TR(
- HT.TD("Select", style="text-align:center"),
- HT.TD("Deselect", style="text-align:center"),
- HT.TD("Invert", style="text-align:center"),
- HT.TD("Gene Weaver", style="text-align:center"),
- ))
- TD_LR.append(HT.Blockquote(optionsTable))
- # geneTableContainer
- TD_LR.append(HT.Blockquote(tableForm))
-
- self.body = TD_LR
-
- #self.dict['body'] = TD_LR
- #self.dict['title'] = "Mapping"
-
-
- def writeQTL2Text(self, filename):
- if self.multipleInterval:
- return ""
- #_dominance = (self.genotype.type == 'intercross')
- _Mb = self.genotype.Mbmap
-
- ###Write to text file
- fpText = open(os.path.join(webqtlConfig.TMPDIR, filename) + '.txt','wb')
-
- fpText.write("Source: WebQTL, The GeneNetwork (%s)\n" % webqtlConfig.PORTADDR)
- #
- fpText.write("Site: GN\n")
- fpText.write("Page: Map Viewer\n")
- fpText.write(time.strftime("Date and Time (US Center): %b %d, %Y at %I.%M %p\n", time.localtime()))
- fpText.write("Trait ID: %s\n" % self.this_trait.name)
- fpText.write("Suggestive LRS = %0.2f\n" % self.suggestive)
- fpText.write("Significant LRS = %0.2f\n" % self.significant)
- """
- if self.this_trait.symbol and self.this_trait.chr and self.this_trait.mb:
- writeSymbol, writeChromosome, writeMb = self.this_trait.symbol, self.this_trait.chr, self.this_trait.mb
- else:
- writeSymbol, writeChromosome, writeMb = (" ", " ", " ")
- fpText.write("Gene Symbol: %s\n" % writeSymbol)
- fpText.write("Location: Chr %s @ %s Mb\n" % (writeChromosome, writeMb))
- #selectedChr = self.indexToChrName(int(fd.formdata.getvalue('chromosomes', -1)))
- #fpText.write("Chromosome: %s\n" % selectedChr)
- fpText.write("Region: %0.6f-%0.6f Mb\n\n" % (self.startMb, self.endMb))
- """
-
- if hasattr(self, 'LRSArray'):
- if _dominance:
- fpText.write('Chr\tLocus\tcM\tMb\tLRS\tP-value\tAdditive\tDominance\n')
- else:
- fpText.write('Chr\tLocus\tcM\tMb\tLRS\tP-value\tAdditive\n')
- else:
- if _dominance:
- fpText.write('Chr\tLocus\tcM\tMb\tLRS\tAdditive\tDominance\n')
- else:
- fpText.write('Chr\tLocus\tcM\tMb\tLRS\tAdditive\n')
-
- i = 0
- for marker in self.qtlresults:
- if _Mb:
- locusMb = '%2.3f' % marker['Mb']
- else:
- locusMb = 'N/A'
-
- if hasattr(self, 'LRSArray'):
- if start_vars['score_type'] == "LRS":
- lrs_lod = marker['lrs_value']
- else:
- lrs_lod = marker['lod_score']
-
- P_value = self.calculatePValue(lrs_lod, self.perm_output)
-
- #if _dominance:
- # fpText.write("%s\t%s\t%2.3f\t%s\t%2.3f\t%2.3f\t%2.3f\t%2.3f\n" %(qtlresult.locus.chr, \
- # qtlresult.locus.name, qtlresult.locus.cM, locusMb , qtlresult.lrs, P_value, qtlresult.additive, qtlresult.dominance))
- #else:
- if P_value:
- fpText.write("%s\t%s\t%2.3f\t%s\t%2.3f\t%2.3f\n" %(marker['chr'], \
- marker['name'], marker['cM'], locusMb, lrs_lod, P_value))
- else:
- fpText.write("%s\t%s\t%2.3f\t%s\t%2.3f\t%s\n" %(marker['chr'], \
- marker['name'], marker['cM'], locusMb , lrs_lod, '-'))
- else:
- #if _dominance:
- # fpText.write("%s\t%s\t%2.3f\t%s\t%2.3f\t%2.3f\t%2.3f\n" %(qtlresult.locus.chr, \
- # qtlresult.locus.name, qtlresult.locus.cM, locusMb , qtlresult.lrs, qtlresult.additive, qtlresult.dominance))
- #else:
- fpText.write("%s\t%s\t%2.3f\t%s\t%2.3f\n" %(marker['chr'], \
- marker['name'], marker['cM'], locusMb , lrs_lod))
-
- i += 1
-
- fpText.close()
- textUrl = '/tmp/'+filename+'.txt'
- #textUrl = HT.Href(text = 'Download', url= '/tmp/'+filename+'.txt', target = "_blank", Class='smallsize')
- return textUrl
-
def plotIntMapping(self, canvas, offset= (80, 120, 20, 100), zoom = 1, startMb = None, endMb = None, showLocusForm = ""):
#calculating margins
xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
if self.multipleInterval:
- yTopOffset = max(80, yTopOffset)
+ yTopOffset = max(90, yTopOffset)
else:
if self.legendChecked:
- yTopOffset = max(80, yTopOffset)
+ yTopOffset = max(90, yTopOffset)
else:
pass
@@ -787,13 +526,14 @@ class MarkerRegression(object):
cHeight = canvas.size[1]
plotWidth = cWidth - xLeftOffset - xRightOffset
plotHeight = cHeight - yTopOffset - yBottomOffset
- startPixelX = xLeftOffset
- endPixelX = (xLeftOffset + plotWidth)
#Drawing Area Height
drawAreaHeight = plotHeight
if self.plotScale == 'physic' and self.selectedChr > -1:
- drawAreaHeight -= self.ENSEMBL_BAND_HEIGHT + self.UCSC_BAND_HEIGHT+ self.WEBQTL_BAND_HEIGHT + 3*self.BAND_SPACING+ 10*zoom
+ if self.dataset.group.species == "mouse" or self.dataset.group.species == "rat":
+ drawAreaHeight -= 4*self.BAND_HEIGHT + 4*self.BAND_SPACING+ 10*zoom
+ else:
+ drawAreaHeight -= 3*self.BAND_HEIGHT + 3*self.BAND_SPACING+ 10*zoom
if self.geneChecked:
drawAreaHeight -= self.NUM_GENE_ROWS*self.EACH_GENE_HEIGHT + 3*self.BAND_SPACING + 10*zoom
else:
@@ -812,7 +552,6 @@ class MarkerRegression(object):
#Image map
gifmap = HT.Map(name = "WebQTLImageMap")
- #gifmap = None
newoffset = (xLeftOffset, xRightOffset, yTopOffset, yBottomOffset)
# Draw the alternating-color background first and get plotXScale
@@ -847,8 +586,7 @@ class MarkerRegression(object):
pass
#draw position, no need to use a separate function
- if self.genotype.Mbmap:
- self.drawProbeSetPosition(canvas, plotXScale, offset=newoffset, zoom = zoom)
+ self.drawProbeSetPosition(canvas, plotXScale, offset=newoffset, zoom = zoom)
return gifmap
@@ -992,15 +730,6 @@ class MarkerRegression(object):
this_chr = str(self.ChrList[self.selectedChr][0])
else:
this_chr = str(self.ChrList[self.selectedChr][1]+1)
- # for i, qtlresult in enumerate(self.qtlresults):
- # if Chr == this_chr:
- # if Mb < self.startMb or Mb > self.endMb:
- # return
- # else:
- # locPixel = xLeftOffset + (Mb-self.startMb)*plotXScale
- # break
- # elif self.selectedChr == -1:
- # if str(qtlresult['chr']) != Chr:
if self.plotScale == 'physic':
if self.selectedChr > -1:
@@ -1010,52 +739,54 @@ class MarkerRegression(object):
locPixel = xLeftOffset + (Mb-self.startMb)*plotXScale
else:
locPixel = xLeftOffset
- for i, _chr in enumerate(self.genotype):
- if _chr.name != Chr:
+ for i, _chr in enumerate(self.ChrList[1:]):
+ if _chr[0] != Chr:
locPixel += (self.ChrLengthDistList[i] + self.GraphInterval)*plotXScale
else:
locPixel += Mb*plotXScale
break
else:
if self.selectedChr > -1:
- if self.genotype[0].name != Chr:
- return
- else:
- for i, _locus in enumerate(self.genotype[0]):
- #the trait's position is on the left of the first genotype
- if i==0 and _locus.Mb >= Mb:
- locPixel=-1
- break
+ for i, qtlresult in enumerate(self.qtlresults):
+ if qtlresult['chr'] != self.selectedChr:
+ continue
- #the trait's position is between two traits
- if i > 0 and self.genotype[0][i-1].Mb < Mb and _locus.Mb >= Mb:
- locPixel = xLeftOffset + plotXScale*(self.genotype[0][i-1].cM+(_locus.cM-self.genotype[0][i-1].cM)*(Mb -self.genotype[0][i-1].Mb)/(_locus.Mb-self.genotype[0][i-1].Mb))
- break
+ if i==0 and qtlresult['Mb'] >= Mb:
+ locPixel=-1
+ break
- #the trait's position is on the right of the last genotype
- if i==len(self.genotype[0]) and Mb>=_locus.Mb:
- locPixel = -1
+ #the trait's position is between two traits
+ if i > 0 and self.qtlresults[i-1]['Mb'] < Mb and qtlresult['Mb'] >= Mb:
+ locPixel = xLeftOffset + plotXScale*(self.qtlresults[i-1]['Mb']+(qtlresult['Mb']-self.qtlresults[i-1]['Mb'])*(Mb - self.qtlresults[i-1]['Mb'])/(qtlresult['Mb']-self.qtlresults[i-1]['Mb']))
+ break
+
+ #the trait's position is on the right of the last genotype
+ if i==len(self.qtlresults) and Mb>=qtlresult['Mb']:
+ locPixel = -1
else:
locPixel = xLeftOffset
- for i, _chr in enumerate(self.genotype):
- if _chr.name != Chr:
- locPixel += (self.ChrLengthDistList[i] + self.GraphInterval)*plotXScale
- else:
- locPixel += (Mb*(_chr[-1].cM-_chr[0].cM)/self.ChrLengthCMList[i])*plotXScale
- break
+ for i, _chr in enumerate(self.ChrList):
+ if i < (len(self.ChrList)-1):
+ if _chr != Chr:
+ locPixel += (self.ChrLengthDistList[i] + self.GraphInterval)*plotXScale
+ else:
+ locPixel += (Mb*(_chr[-1].cM-_chr[0].cM)/self.ChrLengthCMList[i])*plotXScale
+ break
if locPixel >= 0 and self.plotScale == 'physic':
- traitPixel = ((locPixel, yZero), (locPixel-6, yZero+12), (locPixel+6, yZero+12))
+ traitPixel = ((locPixel, yZero), (locPixel-7, yZero+14), (locPixel+7, yZero+14))
canvas.drawPolygon(traitPixel, edgeColor=pid.black, fillColor=self.TRANSCRIPT_LOCATION_COLOR, closed=1)
if self.legendChecked:
startPosY = 15
nCol = 2
smallLabelFont = pid.Font(ttf="trebuc", size=12*fontZoom, bold=1)
- leftOffset = xLeftOffset+(nCol-1)*200*fontZoom
- canvas.drawPolygon(((leftOffset+6, startPosY-6), (leftOffset, startPosY+6), (leftOffset+12, startPosY+6)), edgeColor=pid.black, fillColor=self.TRANSCRIPT_LOCATION_COLOR, closed=1)
+ if self.manhattan_plot:
+ leftOffset = xLeftOffset
+ else:
+ leftOffset = xLeftOffset+(nCol-1)*200*fontZoom
+ canvas.drawPolygon(((leftOffset+7, startPosY-7), (leftOffset, startPosY+7), (leftOffset+14, startPosY+7)), edgeColor=pid.black, fillColor=self.TRANSCRIPT_LOCATION_COLOR, closed=1)
canvas.drawString("Sequence Site", (leftOffset+15), (startPosY+5), smallLabelFont, self.TOP_RIGHT_INFO_COLOR)
-
def drawSNPTrackNew(self, canvas, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
if self.plotScale != 'physic' or self.selectedChr == -1 or not self.diffCol:
return
@@ -1071,7 +802,8 @@ class MarkerRegression(object):
fontZoom = 1.5
drawSNPLocationY = yTopOffset + plotHeight
- chrName = self.genotype[0].name
+ #chrName = self.genotype[0].name
+ chrName = self.ChrList[self.selectedChr][0]
stepMb = (endMb-startMb)/plotWidth
strainId1, strainId2 = self.diffCol
@@ -1095,7 +827,7 @@ class MarkerRegression(object):
snpDensity = float(SNPCounts[i-xLeftOffset]*SNP_HEIGHT_MODIFIER/maxCount)
canvas.drawLine(i, drawSNPLocationY+(snpDensity)*zoom, i, drawSNPLocationY-(snpDensity)*zoom, color=self.SNP_COLOR, width=1)
- def drawMultiTraitName(self, fd, canvas, gifmap, showLocusForm, offset= (40, 120, 80, 10), zoom = 1, locLocation= None):
+ def drawMultiTraitName(self, fd, canvas, gifmap, showLocusForm, offset= (40, 120, 80, 10), zoom = 1):
nameWidths = []
yPaddingTop = 10
colorFont=pid.Font(ttf="trebuc",size=12,bold=1)
@@ -1123,14 +855,12 @@ class MarkerRegression(object):
canvas.drawRect(rightShift,yPaddingTop+kstep*15, rectWidth+rightShift,yPaddingTop+10+kstep*15, fillColor=thisLRSColor)
canvas.drawString(name,rectWidth+2+rightShift,yPaddingTop+10+kstep*15,font=colorFont,color=pid.black)
if thisTrait.db:
-
COORDS = "%d,%d,%d,%d" %(rectWidth+2+rightShift,yPaddingTop+kstep*15,rectWidth+2+rightShift+nameWidth,yPaddingTop+10+kstep*15,)
HREF= "javascript:showDatabase3('%s','%s','%s','');" % (showLocusForm, thisTrait.db.name, thisTrait.name)
Areas = HT.Area(shape='rect',coords=COORDS,href=HREF)
gifmap.areas.append(Areas)
-
- def drawLegendPanel(self, canvas, offset= (40, 120, 80, 10), zoom = 1, locLocation= None):
+ def drawLegendPanel(self, canvas, offset= (40, 120, 80, 10), zoom = 1):
xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
@@ -1142,9 +872,10 @@ class MarkerRegression(object):
labelFont=pid.Font(ttf="trebuc",size=12*fontZoom, bold=1)
startPosY = 15
stepPosY = 12*fontZoom
- canvas.drawLine(xLeftOffset,startPosY,xLeftOffset+32,startPosY,color=self.LRS_COLOR, width=2)
- canvas.drawString(self.LRS_LOD, xLeftOffset+40,startPosY+5,font=labelFont,color=pid.black)
- startPosY += stepPosY
+ if self.manhattan_plot != True:
+ canvas.drawLine(xLeftOffset,startPosY,xLeftOffset+32,startPosY,color=self.LRS_COLOR, width=2)
+ canvas.drawString(self.LRS_LOD, xLeftOffset+40,startPosY+5,font=labelFont,color=pid.black)
+ startPosY += stepPosY
if self.additiveChecked:
startPosX = xLeftOffset
@@ -1173,33 +904,83 @@ class MarkerRegression(object):
startPosX = xLeftOffset
canvas.drawLine(startPosX, startPosY, startPosX + 32, startPosY, color=self.SIGNIFICANT_COLOR, width=self.SIGNIFICANT_WIDTH)
canvas.drawLine(startPosX, startPosY + stepPosY, startPosX + 32, startPosY + stepPosY, color=self.SUGGESTIVE_COLOR, width=self.SUGGESTIVE_WIDTH)
- lod = 1
- if self.LRS_LOD == 'LOD':
- lod = self.LODFACTOR
canvas.drawString('Significant %s = %2.2f' % (self.LRS_LOD, self.significant),xLeftOffset+42,startPosY +5,font=labelFont,color=pid.black)
canvas.drawString('Suggestive %s = %2.2f' % (self.LRS_LOD, self.suggestive),xLeftOffset+42,startPosY + 5 +stepPosY,font=labelFont,color=pid.black)
- labelFont=pid.Font(ttf="verdana",size=12*fontZoom)
+ labelFont = pid.Font(ttf="verdana",size=12*fontZoom)
labelColor = pid.black
- if self.selectedChr == -1:
- string1 = 'Mapping for Dataset: %s, mapping on All Chromosomes' % self.dataset.group.name
+ if self.dataset.type == "Publish" or self.dataset.type == "Geno":
+ dataset_label = self.dataset.fullname
else:
- string1 = 'Mapping for Dataset: %s, mapping on Chromosome %s' % (self.dataset.group.name, self.ChrList[self.selectedChr][0])
- if self.controlLocus and self.doControl != "false":
- string2 = 'Using %s as control' % self.controlLocus
+ dataset_label = "%s - %s" % (self.dataset.group.name, self.dataset.fullname)
+
+ string1 = 'Dataset: %s' % (dataset_label)
+
+ if self.genofile_string == "":
+ string2 = 'Genotype File: %s.geno' % self.dataset.group.name
else:
- if self.mapping_method == "gemma":
- string2 = 'Using GEMMA mapping method with no control for other QTLs.'
+ string2 = 'Genotype File: %s' % self.genofile_string
+
+ string4 = ''
+ if self.mapping_method == "gemma" or self.mapping_method == "gemma_bimbam":
+ if self.use_loco == "True":
+ string3 = 'Using GEMMA mapping method with LOCO and '
else:
- string2 = 'Using Haldane mapping function with no control for other QTLs'
- d = 4+ max(canvas.stringWidth(string1,font=labelFont),canvas.stringWidth(string2,font=labelFont))
+ string3 = 'Using GEMMA mapping method with '
+ if self.covariates != "":
+ string3 += 'the cofactors below:'
+ cofactor_names = ", ".join([covar.split(":")[0] for covar in self.covariates.split(",")])
+ string4 = cofactor_names
+ else:
+ string3 += 'no cofactors'
+ elif self.mapping_method == "rqtl_plink" or self.mapping_method == "rqtl_geno":
+ string3 = 'Using R/qtl mapping method with '
+ if self.covariates != "":
+ string3 += 'the cofactors below:'
+ cofactor_names = ", ".join([covar.split(":")[0] for covar in self.covariates.split(",")])
+ string4 = cofactor_names
+ elif self.controlLocus and self.doControl != "false":
+ string3 += '%s as control' % self.controlLocus
+ else:
+ string3 += 'no cofactors'
+ else:
+ string3 = 'Using Haldane mapping function with '
+ if self.controlLocus and self.doControl != "false":
+ string3 += '%s as control' % self.controlLocus
+ else:
+ string3 += 'no control for other QTLs'
+
if self.this_trait.name:
- identification = "Trait ID: %s : %s" % (self.dataset.fullname, self.this_trait.name)
- canvas.drawString(identification,canvas.size[0] - xRightOffset-d,20*fontZoom,font=labelFont,color=labelColor)
+ if self.selectedChr == -1:
+ identification = "Mapping on All Chromosomes for "
+ else:
+ identification = "Mapping on Chromosome %s for " % (self.ChrList[self.selectedChr][0])
+
+ if self.this_trait.symbol:
+ identification += "Trait: %s - %s" % (self.this_trait.name, self.this_trait.symbol)
+ elif self.dataset.type == "Publish":
+ if self.this_trait.post_publication_abbreviation:
+ identification += "Trait: %s - %s" % (self.this_trait.name, self.this_trait.post_publication_abbreviation)
+ elif self.this_trait.pre_publication_abbreviation:
+ identification += "Trait: %s - %s" % (self.this_trait.name, self.this_trait.pre_publication_abbreviation)
+ else:
+ identification += "Trait: %s" % (self.this_trait.name)
+ else:
+ identification += "Trait: %s" % (self.this_trait.name)
+ identification += " with %s samples" % (self.n_samples)
+ d = 4+ max(canvas.stringWidth(identification, font=labelFont), canvas.stringWidth(string1, font=labelFont), canvas.stringWidth(string2, font=labelFont))
+ canvas.drawString(identification,canvas.size[0] - xRightOffset-d,20*fontZoom,font=labelFont,color=labelColor)
+ else:
+ d = 4+ max(canvas.stringWidth(string1, font=labelFont), canvas.stringWidth(string2, font=labelFont))
canvas.drawString(string1,canvas.size[0] - xRightOffset-d,35*fontZoom,font=labelFont,color=labelColor)
canvas.drawString(string2,canvas.size[0] - xRightOffset-d,50*fontZoom,font=labelFont,color=labelColor)
-
+ canvas.drawString(string3,canvas.size[0] - xRightOffset-d,65*fontZoom,font=labelFont,color=labelColor)
+ if string4 != '':
+ canvas.drawString(string4,canvas.size[0] - xRightOffset-d,80*fontZoom,font=labelFont,color=labelColor)
+ canvas.drawString("Created at: " + str(datetime.datetime.now()).split('.')[0], canvas.size[0] - xRightOffset-d,95*fontZoom,font=labelFont,color=labelColor)
+ else:
+ canvas.drawString("Created at: " + str(datetime.datetime.now()).split('.')[0], canvas.size[0] - xRightOffset-d,80*fontZoom,font=labelFont,color=labelColor)
def drawGeneBand(self, canvas, gifmap, plotXScale, offset= (40, 120, 80, 10), zoom = 1, startMb = None, endMb = None):
if self.plotScale != 'physic' or self.selectedChr == -1 or not self.geneCol:
@@ -1215,9 +996,6 @@ class MarkerRegression(object):
yPaddingTop = yTopOffset
- displayStartInBases = startMb*self.kONE_MILLION
- displayEndInBases = endMb*self.kONE_MILLION
-
for gIndex, theGO in enumerate(self.geneCol):
geneNCBILink = 'http://www.ncbi.nlm.nih.gov/gene?term=%s'
if self.dataset.group.species == "mouse":
@@ -1232,7 +1010,6 @@ class MarkerRegression(object):
cdsStart = theGO['cdsStart']
cdsEnd = theGO['cdsEnd']
accession = theGO['NM_ID']
- geneId = theGO['GeneID']
geneSymbol = theGO["GeneSymbol"]
strand = theGO["Strand"]
exonCount = theGO["exonCount"]
@@ -1250,10 +1027,7 @@ class MarkerRegression(object):
geneStartPix = xLeftOffset; # clip the first in-range gene
#color the gene based on SNP density
-
-
#found earlier, needs to be recomputed as snps are added
-
#always apply colors now, even if SNP Track not checked - Zach 11/24/2010
densities=[1.0000000000000001e-05, 0.094094033555233408, 0.3306166377816987, 0.88246026851027781, 2.6690084029581951, 4.1, 61.0]
@@ -1286,7 +1060,6 @@ class MarkerRegression(object):
txEnd = theGO["TxEnd"]
cdsStart = theGO["TxStart"]
cdsEnd = theGO["TxEnd"]
- geneId = theGO["GeneID"]
geneSymbol = theGO["GeneSymbol"]
strand = theGO["Strand"]
exonCount = 0
@@ -1315,11 +1088,10 @@ class MarkerRegression(object):
#Draw Genes
geneYLocation = yPaddingTop + (gIndex % self.NUM_GENE_ROWS) * self.EACH_GENE_HEIGHT*zoom
-
- if 1:#drawClickableRegions:
- geneYLocation += self.UCSC_BAND_HEIGHT + self.BAND_SPACING + self.ENSEMBL_BAND_HEIGHT + self.BAND_SPACING + self.WEBQTL_BAND_HEIGHT + self.BAND_SPACING
+ if self.dataset.group.species == "mouse" or self.dataset.group.species == "rat":
+ geneYLocation += 4*self.BAND_HEIGHT + 4*self.BAND_SPACING
else:
- geneYLocation += self.BAND_SPACING
+ geneYLocation += 3*self.BAND_HEIGHT + 3*self.BAND_SPACING
#draw the detail view
if self.endMb - self.startMb <= self.DRAW_DETAIL_MB and geneEndPix - geneStartPix > self.EACH_GENE_ARROW_SPACING * 3:
@@ -1327,7 +1099,6 @@ class MarkerRegression(object):
arrowColor = pid.Color(0.7, 0.7, 0.7)
#draw the line that runs the entire length of the gene
- #canvas.drawString(str(geneStartPix), 300, 400)
canvas.drawLine(geneStartPix, geneYLocation + self.EACH_GENE_HEIGHT/2*zoom, geneEndPix, geneYLocation + self.EACH_GENE_HEIGHT/2*zoom, color=outlineColor, width=1)
#draw the arrows
@@ -1361,7 +1132,6 @@ class MarkerRegression(object):
#draw gray blocks for 3' and 5' UTR blocks
if cdsStart and cdsEnd:
-
utrStartPix = (txStart-startMb)*plotXScale + xLeftOffset
utrEndPix = (cdsStart-startMb)*plotXScale + xLeftOffset
if (utrStartPix < xLeftOffset):
@@ -1372,9 +1142,9 @@ class MarkerRegression(object):
utrEndPix = xLeftOffset + plotWidth
if (utrStartPix > xLeftOffset + plotWidth):
utrStartPix = xLeftOffset + plotWidth
- canvas.drawRect(utrStartPix, geneYLocation, utrEndPix, (geneYLocation+self.EACH_GENE_HEIGHT*zoom), edgeColor=utrColor, fillColor =utrColor)
+ #canvas.drawRect(utrStartPix, geneYLocation, utrEndPix, (geneYLocation+self.EACH_GENE_HEIGHT*zoom), edgeColor=utrColor, fillColor =utrColor)
- if self.DRAW_UTR_LABELS and self.endMb - self.startMb <= self.DRAW_UTR_LABELS_MB:
+ if self.endMb - self.startMb <= self.DRAW_UTR_LABELS_MB:
if strand == "-":
labelText = "3'"
else:
@@ -1393,10 +1163,10 @@ class MarkerRegression(object):
utrEndPix = xLeftOffset + plotWidth
if (utrStartPix > xLeftOffset + plotWidth):
utrStartPix = xLeftOffset + plotWidth
- canvas.drawRect(utrStartPix, geneYLocation, utrEndPix, (geneYLocation+self.EACH_GENE_HEIGHT*zoom), edgeColor=utrColor, fillColor =utrColor)
+ #canvas.drawRect(utrStartPix, geneYLocation, utrEndPix, (geneYLocation+self.EACH_GENE_HEIGHT*zoom), edgeColor=utrColor, fillColor =utrColor)
- if self.DRAW_UTR_LABELS and self.endMb - self.startMb <= self.DRAW_UTR_LABELS_MB:
- if tstrand == "-":
+ if self.endMb - self.startMb <= self.DRAW_UTR_LABELS_MB:
+ if strand == "-":
labelText = "5'"
else:
labelText = "3'"
@@ -1415,31 +1185,21 @@ class MarkerRegression(object):
if self.plotScale != 'physic' or self.selectedChr == -1 or not self.geneCol:
return
- fpText = open(os.path.join(webqtlConfig.TMPDIR, "hallo") + '.txt','wb')
-
- clickableRegionLabelFont=pid.Font(ttf="verdana", size=9, bold=0)
-
xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset
plotWidth = canvas.size[0] - xLeftOffset - xRightOffset
- plotHeight = canvas.size[1] - yTopOffset - yBottomOffset
- yZero = canvas.size[1] - yBottomOffset
- fontZoom = zoom
- widthMultiplier = 1
yPaddingTop = yTopOffset
- exprdrawn = 0
-
- #thisTrait = self.traitList[0]
thisTrait = self.this_trait
- _strains, _vals, _vars = thisTrait.export_informative()
+ _strains, _vals, _vars, _aliases = thisTrait.export_informative()
smd=[]
- for ii, _val in enumerate(_vals):
- if _strains[ii] in self.dataset.group.samplelist:
- temp = GeneralObject(name=_strains[ii], value=_val)
+ for ii, _val in enumerate(self.vals):
+ if _val != "x":
+ temp = GeneralObject(name=self.samples[ii], value=float(_val))
smd.append(temp)
-
+ else:
+ continue
smd.sort(lambda A, B: cmp(A.value, B.value))
smd.reverse()
@@ -1451,26 +1211,24 @@ class MarkerRegression(object):
plotRight = xRightOffset
#### find out PlotRight
- for i, _locus in enumerate(self.genotype[0]):
- txStart = self.genotype[0][i].Mb
- txEnd = self.genotype[0][i].Mb
-
- geneStartPix = xLeftOffset + plotXScale*(float(txStart) - startMb) - 0
- geneEndPix = xLeftOffset + plotXScale*(float(txEnd) - startMb) - 0
-
- drawit = 1
- if (geneStartPix < xLeftOffset):
- drawit = 0;
- if (geneStartPix > xLeftOffset + plotWidth):
- drawit = 0;
+ for _chr in self.genotype:
+ if _chr.name == self.ChrList[self.selectedChr][0]:
+ for i, _locus in enumerate(_chr):
+ txStart = _chr[i].Mb
+ txEnd = _chr[i].Mb
- if drawit == 1:
-
- if self.genotype[0][i].name != " - " :
-
- plotRight = geneEndPix + 4
+ geneStartPix = xLeftOffset + plotXScale*(float(txStart) - startMb) - 0
+ geneEndPix = xLeftOffset + plotXScale*(float(txEnd) - startMb) - 0
+ drawit = 1
+ if (geneStartPix < xLeftOffset):
+ drawit = 0;
+ if (geneStartPix > xLeftOffset + plotWidth):
+ drawit = 0;
+ if drawit == 1:
+ if _chr[i].name != " - " :
+ plotRight = geneEndPix + 4
#### end find out PlotRight
@@ -1482,142 +1240,142 @@ class MarkerRegression(object):
#Now there should always be some value set for "oldgeno" - Zach 12/14/2010
oldgeno = [None]*len(self.strainlist)
- for i, _locus in enumerate(self.genotype[0]):
- txStart = self.genotype[0][i].Mb
- txEnd = self.genotype[0][i].Mb
-
- geneStartPix = xLeftOffset + plotXScale*(float(txStart) - startMb) - 0
- geneEndPix = xLeftOffset + plotXScale*(float(txEnd) - startMb) + 0
+ for i, _chr in enumerate(self.genotype):
+ if _chr.name == self.ChrList[self.selectedChr][0]:
+ for j, _locus in enumerate(_chr):
+ txStart = _chr[j].Mb
+ txEnd = _chr[j].Mb
- if oldgeneEndPix >= xLeftOffset:
- drawStart = oldgeneEndPix + 4
- else:
- drawStart = xLeftOffset + 3
+ geneStartPix = xLeftOffset + plotXScale*(float(txStart) - startMb) - 0
+ geneEndPix = xLeftOffset + plotXScale*(float(txEnd) - startMb) + 0
- drawEnd = plotRight - 9
+ if oldgeneEndPix >= xLeftOffset:
+ drawStart = oldgeneEndPix + 4
+ else:
+ drawStart = xLeftOffset + 3
- drawit = 1
+ drawEnd = plotRight - 9
- if (geneStartPix < xLeftOffset):
- if firstGene == 1:
drawit = 1
- else:
- drawit = 0
- elif (geneStartPix > (xLeftOffset + plotWidth - 3)):
- if lastGene == 0:
- drawit = 1
- drawEnd = xLeftOffset + plotWidth - 6
- lastGene = 1
- else:
- break
-
- else:
- firstGene = 0
- drawit = 1
-
- if drawit == 1:
- myColor = pid.darkblue
- outlineColor = myColor
- fillColor = myColor
-
- maxind=0
-
- #Draw Genes
+ if (geneStartPix < xLeftOffset):
+ if firstGene == 1:
+ drawit = 1
+ else:
+ drawit = 0
- geneYLocation = yPaddingTop + self.NUM_GENE_ROWS * (self.EACH_GENE_HEIGHT)*zoom
+ elif (geneStartPix > (xLeftOffset + plotWidth - 3)):
+ if lastGene == 0:
+ drawit = 1
+ drawEnd = xLeftOffset + plotWidth - 6
+ lastGene = 1
+ else:
+ break
- if 1:#drawClickableRegions:
- geneYLocation += self.UCSC_BAND_HEIGHT + self.BAND_SPACING + self.ENSEMBL_BAND_HEIGHT + self.BAND_SPACING + self.WEBQTL_BAND_HEIGHT + self.BAND_SPACING
- else:
- geneYLocation += self.BAND_SPACING
+ else:
+ firstGene = 0
+ drawit = 1
- if self.genotype[0][i].name != " - " :
+ if drawit == 1:
+ myColor = pid.darkblue
+ outlineColor = myColor
+ fillColor = myColor
- if (firstGene == 1) and (lastGene != 1):
- oldgeneEndPix = drawStart = xLeftOffset
- oldgeno = self.genotype[0][i].genotype
- continue
+ maxind=0
- for j,_geno in enumerate (self.genotype[0][i].genotype):
+ #Draw Genes
- plotbxd=0
- for item in smd:
- if item.name == samplelist[j]:
- plotbxd=1
-
- if (plotbxd == 1):
- ind = 0
- counter = 0
- for item in smd:
- counter = counter + 1
- if item.name == samplelist[j]:
- ind = counter
- maxind=max(ind,maxind)
-
- # lines
- if (oldgeno[j] == -1 and _geno == -1):
- mylineColor = self.HAPLOTYPE_NEGATIVE
- elif (oldgeno[j] == 1 and _geno == 1):
- mylineColor = self.HAPLOTYPE_POSITIVE
- elif (oldgeno[j] == 0 and _geno == 0):
- mylineColor = self.HAPLOTYPE_HETEROZYGOUS
- else:
- mylineColor = self.HAPLOTYPE_RECOMBINATION # XZ: Unknown
+ geneYLocation = yPaddingTop + self.NUM_GENE_ROWS * (self.EACH_GENE_HEIGHT)*zoom
+ if self.dataset.group.species == "mouse" or self.dataset.group.species == "rat":
+ geneYLocation += 4*self.BAND_HEIGHT + 4*self.BAND_SPACING
+ else:
+ geneYLocation += 3*self.BAND_HEIGHT + 3*self.BAND_SPACING
+
+ if _chr[j].name != " - " :
+
+ if (firstGene == 1) and (lastGene != 1):
+ oldgeneEndPix = drawStart = xLeftOffset
+ oldgeno = _chr[j].genotype
+ continue
+
+ for k, _geno in enumerate (_chr[j].genotype):
+ plotbxd=0
+ for item in smd:
+ if item.name == samplelist[k]:
+ plotbxd=1
+
+ if (plotbxd == 1):
+ ind = 0
+ counter = 0
+ for item in smd:
+ counter = counter + 1
+ if item.name == samplelist[k]:
+ ind = counter
+ maxind=max(ind,maxind)
+
+ # lines
+ if (oldgeno[k] == -1 and _geno == -1):
+ mylineColor = self.HAPLOTYPE_NEGATIVE
+ elif (oldgeno[k] == 1 and _geno == 1):
+ mylineColor = self.HAPLOTYPE_POSITIVE
+ elif (oldgeno[k] == 0 and _geno == 0):
+ mylineColor = self.HAPLOTYPE_HETEROZYGOUS
+ else:
+ mylineColor = self.HAPLOTYPE_RECOMBINATION # XZ: Unknown
+
+ canvas.drawLine(drawStart, geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom, drawEnd, geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom, color = mylineColor, width=zoom*(self.EACH_GENE_HEIGHT+2))
+
+ fillColor=pid.black
+ outlineColor=pid.black
+ if lastGene == 0:
+ canvas.drawRect(geneStartPix, geneYLocation+2*ind*self.EACH_GENE_HEIGHT*zoom, geneEndPix, geneYLocation+2*ind*self.EACH_GENE_HEIGHT+ 2*self.EACH_GENE_HEIGHT*zoom, edgeColor = outlineColor, fillColor = fillColor)
+
+
+ COORDS = "%d, %d, %d, %d" %(geneStartPix, geneYLocation+ind*self.EACH_GENE_HEIGHT, geneEndPix+1, (geneYLocation + ind*self.EACH_GENE_HEIGHT))
+ TITLE = "Strain: %s, marker (%s) \n Position %2.3f Mb." % (samplelist[k], _chr[j].name, float(txStart))
+ HREF = ''
+ gifmap.areas.append(HT.Area(shape='rect',coords=COORDS,href=HREF, title=TITLE))
+
+ # if there are no more markers in a chromosome, the plotRight value calculated above will be before the plotWidth
+ # resulting in some empty space on the right side of the plot area. This draws an "unknown" bar from plotRight to the edge.
+ if (plotRight < (xLeftOffset + plotWidth - 3)) and (lastGene == 0):
+ drawEnd = xLeftOffset + plotWidth - 6
+ mylineColor = self.HAPLOTYPE_RECOMBINATION
+ canvas.drawLine(plotRight, geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom, drawEnd, geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom, color = mylineColor, width=zoom*(self.EACH_GENE_HEIGHT+2))
- canvas.drawLine(drawStart, geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom, drawEnd, geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom, color = mylineColor, width=zoom*(self.EACH_GENE_HEIGHT+2))
- fillColor=pid.black
- outlineColor=pid.black
if lastGene == 0:
- canvas.drawRect(geneStartPix, geneYLocation+2*ind*self.EACH_GENE_HEIGHT*zoom, geneEndPix, geneYLocation+2*ind*self.EACH_GENE_HEIGHT+ 2*self.EACH_GENE_HEIGHT*zoom, edgeColor = outlineColor, fillColor = fillColor)
-
-
- COORDS = "%d, %d, %d, %d" %(geneStartPix, geneYLocation+ind*self.EACH_GENE_HEIGHT, geneEndPix+1, (geneYLocation + ind*self.EACH_GENE_HEIGHT))
- TITLE = "Strain: %s, marker (%s) \n Position %2.3f Mb." % (samplelist[j], self.genotype[0][i].name, float(txStart))
- HREF = ''
- gifmap.areas.append(HT.Area(shape='rect',coords=COORDS,href=HREF, title=TITLE))
-
- # if there are no more markers in a chromosome, the plotRight value calculated above will be before the plotWidth
- # resulting in some empty space on the right side of the plot area. This draws an "unknown" bar from plotRight to the edge.
- if (plotRight < (xLeftOffset + plotWidth - 3)) and (lastGene == 0):
- drawEnd = xLeftOffset + plotWidth - 6
- mylineColor = self.HAPLOTYPE_RECOMBINATION
- canvas.drawLine(plotRight, geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom, drawEnd, geneYLocation+7+2*ind*self.EACH_GENE_HEIGHT*zoom, color = mylineColor, width=zoom*(self.EACH_GENE_HEIGHT+2))
-
+ canvas.drawString("%s" % (_chr[j].name), geneStartPix , geneYLocation+17+2*maxind*self.EACH_GENE_HEIGHT*zoom, font=pid.Font(ttf="verdana", size=12, bold=0), color=pid.black, angle=-90)
- if lastGene == 0:
- canvas.drawString("%s" % (self.genotype[0][i].name), geneStartPix , geneYLocation+17+2*maxind*self.EACH_GENE_HEIGHT*zoom, font=pid.Font(ttf="verdana", size=12, bold=0), color=pid.black, angle=-90)
-
- oldgeneEndPix = geneEndPix;
- oldgeno = self.genotype[0][i].genotype
- firstGene = 0
- else:
- lastGene = 0
+ oldgeneEndPix = geneEndPix;
+ oldgeno = _chr[j].genotype
+ firstGene = 0
+ else:
+ lastGene = 0
- for j, _geno in enumerate (self.genotype[0][1].genotype):
+ for i, _chr in enumerate(self.genotype):
+ if _chr.name == self.ChrList[self.selectedChr][0]:
+ for j, _geno in enumerate(_chr[1].genotype):
- plotbxd=0
- for item in smd:
- if item.name == samplelist[j]:
- plotbxd=1
+ plotbxd=0
+ for item in smd:
+ if item.name == samplelist[j]:
+ plotbxd=1
- if (plotbxd == 1):
+ if (plotbxd == 1):
- ind = 0
- counter = 0
- expr = 0
- for item in smd:
- counter = counter + 1
- if item.name == samplelist[j]:
- ind = counter
- expr = item.value
-
- # Place where font is hardcoded
- canvas.drawString("%s" % (samplelist[j]), (xLeftOffset + plotWidth + 10) , geneYLocation+8+2*ind*self.EACH_GENE_HEIGHT*zoom, font=pid.Font(ttf="verdana", size=12, bold=0), color=pid.black)
- canvas.drawString("%2.2f" % (expr), (xLeftOffset + plotWidth + 60) , geneYLocation+8+2*ind*self.EACH_GENE_HEIGHT*zoom, font=pid.Font(ttf="verdana", size=12, bold=0), color=pid.black)
+ ind = 0
+ counter = 0
+ expr = 0
+ for item in smd:
+ counter = counter + 1
+ if item.name == samplelist[j]:
+ ind = counter
+ expr = item.value
- fpText.close()
+ # Place where font is hardcoded
+ canvas.drawString("%s" % (samplelist[j]), (xLeftOffset + plotWidth + 10) , geneYLocation+8+2*ind*self.EACH_GENE_HEIGHT*zoom, font=pid.Font(ttf="verdana", size=12, bold=0), color=pid.black)
+ canvas.drawString("%2.2f" % (expr), (xLeftOffset + plotWidth + 60) , geneYLocation+8+2*ind*self.EACH_GENE_HEIGHT*zoom, font=pid.Font(ttf="verdana", size=12, bold=0), color=pid.black)
## END HaplotypeAnalyst
@@ -1650,57 +1408,76 @@ class MarkerRegression(object):
i = 0
paddingTop = yTopOffset
- ucscPaddingTop = paddingTop + self.WEBQTL_BAND_HEIGHT + self.BAND_SPACING
- ensemblPaddingTop = ucscPaddingTop + self.UCSC_BAND_HEIGHT + self.BAND_SPACING
+ if self.dataset.group.species == "mouse" or self.dataset.group.species == "rat":
+ phenogenPaddingTop = paddingTop + (self.BAND_HEIGHT + self.BAND_SPACING)
+ ucscPaddingTop = paddingTop + 2*(self.BAND_HEIGHT + self.BAND_SPACING)
+ ensemblPaddingTop = paddingTop + 3*(self.BAND_HEIGHT + self.BAND_SPACING)
+ else:
+ ucscPaddingTop = paddingTop + (self.BAND_HEIGHT + self.BAND_SPACING)
+ ensemblPaddingTop = paddingTop + 2*(self.BAND_HEIGHT + self.BAND_SPACING)
if zoom == 1:
for pixel in range(xLeftOffset, xLeftOffset + plotWidth, pixelStep):
calBase = self.kONE_MILLION*(startMb + (endMb-startMb)*(pixel-xLeftOffset-0.0)/plotWidth)
+ if pixel == (xLeftOffset + pixelStep*2):
+ logger.debug("CALBASE:", calBase)
+ logger.debug("FLANKING:", flankingWidthInBases)
xBrowse1 = pixel
xBrowse2 = min(xLeftOffset + plotWidth, (pixel + pixelStep - 1))
- WEBQTL_COORDS = "%d, %d, %d, %d" % (xBrowse1, paddingTop, xBrowse2, (paddingTop+self.WEBQTL_BAND_HEIGHT))
- bandWidth = xBrowse2 - xBrowse1
+ WEBQTL_COORDS = "%d, %d, %d, %d" % (xBrowse1, paddingTop, xBrowse2, (paddingTop+self.BAND_HEIGHT))
WEBQTL_HREF = "javascript:rangeView('%s', %f, %f)" % (self.selectedChr - 1, max(0, (calBase-webqtlZoomWidth))/1000000.0, (calBase+webqtlZoomWidth)/1000000.0)
WEBQTL_TITLE = "Click to view this section of the genome in WebQTL"
gifmap.areas.append(HT.Area(shape='rect',coords=WEBQTL_COORDS,href=WEBQTL_HREF, title=WEBQTL_TITLE))
- canvas.drawRect(xBrowse1, paddingTop, xBrowse2, (paddingTop + self.WEBQTL_BAND_HEIGHT), edgeColor=self.CLICKABLE_WEBQTL_REGION_COLOR, fillColor=self.CLICKABLE_WEBQTL_REGION_COLOR)
- canvas.drawLine(xBrowse1, paddingTop, xBrowse1, (paddingTop + self.WEBQTL_BAND_HEIGHT), color=self.CLICKABLE_WEBQTL_REGION_OUTLINE_COLOR)
+ canvas.drawRect(xBrowse1, paddingTop, xBrowse2, (paddingTop + self.BAND_HEIGHT), edgeColor=self.CLICKABLE_WEBQTL_REGION_COLOR, fillColor=self.CLICKABLE_WEBQTL_REGION_COLOR)
+ canvas.drawLine(xBrowse1, paddingTop, xBrowse1, (paddingTop + self.BAND_HEIGHT), color=self.CLICKABLE_WEBQTL_REGION_OUTLINE_COLOR)
+
+ if self.dataset.group.species == "mouse" or self.dataset.group.species == "rat":
+ PHENOGEN_COORDS = "%d, %d, %d, %d" % (xBrowse1, phenogenPaddingTop, xBrowse2, (phenogenPaddingTop+self.BAND_HEIGHT))
+ if self.dataset.group.species == "mouse":
+ PHENOGEN_HREF = "https://phenogen.org/gene.jsp?speciesCB=Mm&auto=Y&geneTxt=chr%s:%d-%d&genomeVer=mm10" % (self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases)
+ else:
+ PHENOGEN_HREF = "https://phenogen.org/gene.jsp?speciesCB=Mm&auto=Y&geneTxt=chr%s:%d-%d&genomeVer=mm10" % (self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases)
+ PHENOGEN_TITLE = "Click to view this section of the genome in PhenoGen"
+ gifmap.areas.append(HT.Area(shape='rect',coords=PHENOGEN_COORDS,href=PHENOGEN_HREF, title=PHENOGEN_TITLE))
+ canvas.drawRect(xBrowse1, phenogenPaddingTop, xBrowse2, (phenogenPaddingTop+self.BAND_HEIGHT), edgeColor=self.CLICKABLE_PHENOGEN_REGION_COLOR, fillColor=self.CLICKABLE_PHENOGEN_REGION_COLOR)
+ canvas.drawLine(xBrowse1, phenogenPaddingTop, xBrowse1, (phenogenPaddingTop+self.BAND_HEIGHT), color=self.CLICKABLE_PHENOGEN_REGION_OUTLINE_COLOR)
- UCSC_COORDS = "%d, %d, %d, %d" %(xBrowse1, ucscPaddingTop, xBrowse2, (ucscPaddingTop+self.UCSC_BAND_HEIGHT))
+ UCSC_COORDS = "%d, %d, %d, %d" %(xBrowse1, ucscPaddingTop, xBrowse2, (ucscPaddingTop+self.BAND_HEIGHT))
if self.dataset.group.species == "mouse":
UCSC_HREF = "http://genome.ucsc.edu/cgi-bin/hgTracks?db=%s&position=chr%s:%d-%d&hgt.customText=%s/snp/chr%s" % (self._ucscDb, self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases, webqtlConfig.PORTADDR, self.selectedChr)
else:
UCSC_HREF = "http://genome.ucsc.edu/cgi-bin/hgTracks?db=%s&position=chr%s:%d-%d" % (self._ucscDb, self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases)
UCSC_TITLE = "Click to view this section of the genome in the UCSC Genome Browser"
gifmap.areas.append(HT.Area(shape='rect',coords=UCSC_COORDS,href=UCSC_HREF, title=UCSC_TITLE))
- canvas.drawRect(xBrowse1, ucscPaddingTop, xBrowse2, (ucscPaddingTop+self.UCSC_BAND_HEIGHT), edgeColor=self.CLICKABLE_UCSC_REGION_COLOR, fillColor=self.CLICKABLE_UCSC_REGION_COLOR)
- canvas.drawLine(xBrowse1, ucscPaddingTop, xBrowse1, (ucscPaddingTop+self.UCSC_BAND_HEIGHT), color=self.CLICKABLE_UCSC_REGION_OUTLINE_COLOR)
+ canvas.drawRect(xBrowse1, ucscPaddingTop, xBrowse2, (ucscPaddingTop+self.BAND_HEIGHT), edgeColor=self.CLICKABLE_UCSC_REGION_COLOR, fillColor=self.CLICKABLE_UCSC_REGION_COLOR)
+ canvas.drawLine(xBrowse1, ucscPaddingTop, xBrowse1, (ucscPaddingTop+self.BAND_HEIGHT), color=self.CLICKABLE_UCSC_REGION_OUTLINE_COLOR)
- ENSEMBL_COORDS = "%d, %d, %d, %d" %(xBrowse1, ensemblPaddingTop, xBrowse2, (ensemblPaddingTop+self.ENSEMBL_BAND_HEIGHT))
+ ENSEMBL_COORDS = "%d, %d, %d, %d" %(xBrowse1, ensemblPaddingTop, xBrowse2, (ensemblPaddingTop+self.BAND_HEIGHT))
if self.dataset.group.species == "mouse":
ENSEMBL_HREF = "http://www.ensembl.org/Mus_musculus/contigview?highlight=&chr=%s&vc_start=%d&vc_end=%d&x=35&y=12" % (self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases)
else:
ENSEMBL_HREF = "http://www.ensembl.org/Rattus_norvegicus/contigview?chr=%s&start=%d&end=%d" % (self.selectedChr, max(0, calBase-flankingWidthInBases), calBase+flankingWidthInBases)
ENSEMBL_TITLE = "Click to view this section of the genome in the Ensembl Genome Browser"
gifmap.areas.append(HT.Area(shape='rect',coords=ENSEMBL_COORDS,href=ENSEMBL_HREF, title=ENSEMBL_TITLE))
- canvas.drawRect(xBrowse1, ensemblPaddingTop, xBrowse2, (ensemblPaddingTop+self.ENSEMBL_BAND_HEIGHT), edgeColor=self.CLICKABLE_ENSEMBL_REGION_COLOR, fillColor=self.CLICKABLE_ENSEMBL_REGION_COLOR)
- canvas.drawLine(xBrowse1, ensemblPaddingTop, xBrowse1, (ensemblPaddingTop+self.ENSEMBL_BAND_HEIGHT), color=self.CLICKABLE_ENSEMBL_REGION_OUTLINE_COLOR)
+ canvas.drawRect(xBrowse1, ensemblPaddingTop, xBrowse2, (ensemblPaddingTop+self.BAND_HEIGHT), edgeColor=self.CLICKABLE_ENSEMBL_REGION_COLOR, fillColor=self.CLICKABLE_ENSEMBL_REGION_COLOR)
+ canvas.drawLine(xBrowse1, ensemblPaddingTop, xBrowse1, (ensemblPaddingTop+self.BAND_HEIGHT), color=self.CLICKABLE_ENSEMBL_REGION_OUTLINE_COLOR)
# end for
- canvas.drawString("Click to view the corresponding section of the genome in an 8x expanded WebQTL map", (xLeftOffset + 10), paddingTop + self.WEBQTL_BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_WEBQTL_TEXT_COLOR)
- canvas.drawString("Click to view the corresponding section of the genome in the UCSC Genome Browser", (xLeftOffset + 10), ucscPaddingTop + self.UCSC_BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_UCSC_TEXT_COLOR)
- canvas.drawString("Click to view the corresponding section of the genome in the Ensembl Genome Browser", (xLeftOffset+10), ensemblPaddingTop + self.ENSEMBL_BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_ENSEMBL_TEXT_COLOR)
+ canvas.drawString("Click to view the corresponding section of the genome in an 8x expanded WebQTL map", (xLeftOffset + 10), paddingTop + self.BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_WEBQTL_TEXT_COLOR)
+ if self.dataset.group.species == "mouse" or self.dataset.group.species == "rat":
+ canvas.drawString("Click to view the corresponding section of the genome in PhenoGen", (xLeftOffset + 10), phenogenPaddingTop + self.BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_PHENOGEN_TEXT_COLOR)
+ canvas.drawString("Click to view the corresponding section of the genome in the UCSC Genome Browser", (xLeftOffset + 10), ucscPaddingTop + self.BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_UCSC_TEXT_COLOR)
+ canvas.drawString("Click to view the corresponding section of the genome in the Ensembl Genome Browser", (xLeftOffset+10), ensemblPaddingTop + self.BAND_HEIGHT/2, font=clickableRegionLabelFont, color=self.CLICKABLE_ENSEMBL_TEXT_COLOR)
#draw the gray text
chrFont = pid.Font(ttf="verdana", size=26*zoom, bold=1)
traitFont = pid.Font(ttf="verdana", size=14, bold=0)
chrX = xLeftOffset + plotWidth - 2 - canvas.stringWidth("Chr %s" % self.ChrList[self.selectedChr][0], font=chrFont)
canvas.drawString("Chr %s" % self.ChrList[self.selectedChr][0], chrX, ensemblPaddingTop-5, font=chrFont, color=pid.gray)
- traitX = chrX - 28 - canvas.stringWidth("database", font=traitFont)
# end of drawBrowserClickableRegions
else:
#draw the gray text
@@ -1708,7 +1485,6 @@ class MarkerRegression(object):
traitFont = pid.Font(ttf="verdana", size=14, bold=0)
chrX = xLeftOffset + (plotWidth - canvas.stringWidth("Chr %s" % currentChromosome, font=chrFont))/2
canvas.drawString("Chr %s" % currentChromosome, chrX, 32, font=chrFont, color=pid.gray)
- traitX = chrX - 28 - canvas.stringWidth("database", font=traitFont)
# end of drawBrowserClickableRegions
pass
@@ -1735,13 +1511,11 @@ class MarkerRegression(object):
xAxisLabelColor = pid.black
fontHeight = 12*fontZoom # How tall the font that we're using is
spacingFromLabelToAxis = 5
- spacingFromLineToLabel = 3
if self.plotScale == 'physic':
strYLoc = yZero + spacingFromLabelToAxis + canvas.fontHeight(MBLabelFont)
###Physical single chromosome view
if self.selectedChr > -1:
- graphMbWidth = endMb - startMb
XScale = Plot.detScale(startMb, endMb)
XStart, XEnd, XStep = XScale
if XStep < 8:
@@ -1767,7 +1541,6 @@ class MarkerRegression(object):
canvas.drawString(labelStr, drawStringXc, strYLoc, font=MBLabelFont, color=xAxisLabelColor, angle=0)
else:
canvas.drawLine(Xc, yZero, Xc, yZero+xMinorTickHeight, color=xAxisTickMarkColor, width=X_MINOR_TICK_THICKNESS) # Draw the MINOR tick mark
- # end else
###Physical genome wide view
else:
@@ -1781,9 +1554,10 @@ class MarkerRegression(object):
distScale = 10
else:
distScale = 5
- for tickdists in range(distScale, int(ceil(distLen)), distScale):
+ for j, tickdists in enumerate(range(distScale, int(ceil(distLen)), distScale)):
canvas.drawLine(startPosX + tickdists*plotXScale, yZero, startPosX + tickdists*plotXScale, yZero + 7, color=pid.black, width=1*zoom)
- canvas.drawString(str(tickdists), startPosX+tickdists*plotXScale, yZero + 10*zoom, color=pid.black, font=MBLabelFont, angle=270)
+ if j % 2 == 0:
+ canvas.drawString(str(tickdists), startPosX+tickdists*plotXScale, yZero + 10*zoom, color=pid.black, font=MBLabelFont, angle=270)
startPosX += (self.ChrLengthDistList[i]+self.GraphInterval)*plotXScale
megabaseLabelFont = pid.Font(ttf="verdana", size=18*zoom*1.5, bold=0)
@@ -1796,7 +1570,6 @@ class MarkerRegression(object):
preLpos = -1
distinctCount = 0.0
- #if len(self.genotype) > 1:
if self.selectedChr == -1: #ZS: If viewing full genome/all chromosomes
for i, _chr in enumerate(self.genotype):
thisChr = []
@@ -1895,27 +1668,17 @@ class MarkerRegression(object):
INTERCROSS = (self.genotype.type=="intercross")
- LRSHeightThresh = drawAreaHeight
- AdditiveHeightThresh = drawAreaHeight/2
- DominanceHeightThresh = drawAreaHeight/2
-
#draw the LRS scale
#We first determine whether or not we are using a sliding scale.
#If so, we need to compute the maximum LRS value to determine where the max y-value should be, and call this LRS_LOD_Max.
#LRSTop is then defined to be above the LRS_LOD_Max by enough to add one additional LRSScale increment.
#if we are using a set-scale, then we set LRSTop to be the user's value, and LRS_LOD_Max doesn't matter.
- #ZS: I'm not sure what this if statement is supposed to do. It appears to work correctly for both LOD and LRS if I just set lodm to 1.0
- # if self.LRS_LOD == 'LRS':
- # lodm = self.LODFACTOR
- # else:
- # lodm = 1.0
-
#ZS: This is a mess, but I don't know a better way to account for different mapping methods returning results in different formats + the option to change between LRS and LOD
if self.lrsMax <= 0: #sliding scale
if "lrs_value" in self.qtlresults[0]:
LRS_LOD_Max = max([result['lrs_value'] for result in self.qtlresults])
- if self.LRS_LOD == "LOD":
+ if self.LRS_LOD == "LOD" or self.LRS_LOD == "-log(p)":
LRS_LOD_Max = LRS_LOD_Max / self.LODFACTOR
if self.permChecked and self.nperm > 0 and not self.multipleInterval:
self.significant = min(self.significant / self.LODFACTOR, webqtlConfig.MAXLRS)
@@ -1941,13 +1704,36 @@ class MarkerRegression(object):
pass
if self.permChecked and self.nperm > 0 and not self.multipleInterval:
- LRS_LOD_Max = max(self.significant, LRS_LOD_Max)
+ if self.significant > LRS_LOD_Max:
+ LRS_LOD_Max = self.significant * 1.1
+ #LRS_LOD_Max = max(self.significant, LRS_LOD_Max)
+ else:
+ LRS_LOD_Max = 1.15*LRS_LOD_Max
#genotype trait will give infinite LRS
LRS_LOD_Max = min(LRS_LOD_Max, webqtlConfig.MAXLRS)
else:
LRS_LOD_Max = self.lrsMax
+ #ZS: Needed to pass to genome browser
+ js_data = json.loads(self.js_data)
+ if self.LRS_LOD == "LRS":
+ js_data['max_score'] = LRS_LOD_Max/4.61
+ else:
+ js_data['max_score'] = LRS_LOD_Max
+ self.js_data = json.dumps(js_data)
+
+ LRSScaleFont=pid.Font(ttf="verdana", size=16*zoom, bold=0)
+ LRSLODFont=pid.Font(ttf="verdana", size=18*zoom*1.5, bold=0)
+
+ yZero = yTopOffset + plotHeight
+ LRSHeightThresh = drawAreaHeight
+ AdditiveHeightThresh = drawAreaHeight/2
+ DominanceHeightThresh = drawAreaHeight/2
+ # LRSHeightThresh = (yZero - yTopOffset + 30*(zoom - 1))
+ # AdditiveHeightThresh = LRSHeightThresh/2
+ # DominanceHeightThresh = LRSHeightThresh/2
+
if LRS_LOD_Max > 100:
LRSScale = 20.0
elif LRS_LOD_Max > 20:
@@ -1960,28 +1746,45 @@ class MarkerRegression(object):
LRSAxisList = Plot.frange(LRSScale, LRS_LOD_Max, LRSScale)
#make sure the user's value appears on the y-axis
#update by NL 6-21-2011: round the LOD value to 100 when LRS_LOD_Max is equal to 460
- LRSAxisList.append(round(LRS_LOD_Max))
+ LRSAxisList.append(ceil(LRS_LOD_Max))
- #draw the "LRS" or "LOD" string to the left of the axis
- LRSScaleFont=pid.Font(ttf="verdana", size=16*zoom, bold=0)
- LRSLODFont=pid.Font(ttf="verdana", size=18*zoom*1.5, bold=0)
- yZero = yTopOffset + plotHeight
+ #ZS: Convert to int if all axis values are whole numbers
+ all_int = True
+ for item in LRSAxisList:
+ if item.is_integer():
+ continue
+ else:
+ all_int = False
+ break
+
+ if all_int:
+ max_lrs_width = canvas.stringWidth("%d" % LRS_LOD_Max, font=LRSScaleFont) + 30
+ else:
+ max_lrs_width = canvas.stringWidth("%2.1f" % LRS_LOD_Max, font=LRSScaleFont) + 20
- canvas.drawString(self.LRS_LOD, xLeftOffset - canvas.stringWidth("999.99", font=LRSScaleFont) - 15*(zoom-1), \
+ #draw the "LRS" or "LOD" string to the left of the axis
+ canvas.drawString(self.LRS_LOD, xLeftOffset - max_lrs_width - 15*(zoom-1), \
yZero - 150 - 300*(zoom - 1), font=LRSLODFont, color=pid.black, angle=90)
for item in LRSAxisList:
if LRS_LOD_Max == 0.0:
LRS_LOD_Max = 0.000001
+ yTopOffset + 30*(zoom - 1)
yLRS = yZero - (item/LRS_LOD_Max) * LRSHeightThresh
+ #yLRS = yZero - (item/LRSAxisList[-1]) * LRSHeightThresh
canvas.drawLine(xLeftOffset, yLRS, xLeftOffset - 4, yLRS, color=self.LRS_COLOR, width=1*zoom)
- scaleStr = "%2.1f" % item
+ if all_int:
+ scaleStr = "%d" % item
+ else:
+ scaleStr = "%2.1f" % item
#Draw the LRS/LOD Y axis label
canvas.drawString(scaleStr, xLeftOffset-4-canvas.stringWidth(scaleStr, font=LRSScaleFont)-5, yLRS+3, font=LRSScaleFont, color=self.LRS_COLOR)
if self.permChecked and self.nperm > 0 and not self.multipleInterval:
significantY = yZero - self.significant*LRSHeightThresh/LRS_LOD_Max
suggestiveY = yZero - self.suggestive*LRSHeightThresh/LRS_LOD_Max
+ # significantY = yZero - self.significant*LRSHeightThresh/LRSAxisList[-1]
+ # suggestiveY = yZero - self.suggestive*LRSHeightThresh/LRSAxisList[-1]
startPosX = xLeftOffset
#"Significant" and "Suggestive" Drawing Routine
@@ -2025,10 +1828,6 @@ class MarkerRegression(object):
else:
if self.additiveChecked:
additiveMax = max(map(lambda X : abs(X['additive']), self.qtlresults))
- #if INTERCROSS:
- # dominanceMax = max(map(lambda X : abs(X.dominance), self.qtlresults[0]))
- #else:
- # dominanceMax = -1
lrsEdgeWidth = 2
if zoom == 2:
@@ -2047,14 +1846,12 @@ class MarkerRegression(object):
startPosX = xLeftOffset
for i, qtlresult in enumerate(self.qtlresults):
m = 0
- #startPosX = xLeftOffset
thisLRSColor = self.colorCollection[0]
-
if qtlresult['chr'] != previous_chr and self.selectedChr == -1:
if self.manhattan_plot != True:
canvas.drawPolygon(LRSCoordXY,edgeColor=thisLRSColor,closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
- if not self.multipleInterval and not self.manhattan_plot and self.additiveChecked:
+ if not self.multipleInterval and self.additiveChecked:
plusColor = self.ADDITIVE_COLOR_POSITIVE
minusColor = self.ADDITIVE_COLOR_NEGATIVE
for k, aPoint in enumerate(AdditiveCoordXY):
@@ -2088,62 +1885,75 @@ class MarkerRegression(object):
AdditiveCoordXY = []
previous_chr = qtlresult['chr']
previous_chr_as_int += 1
-
newStartPosX = (self.ChrLengthDistList[previous_chr_as_int - 1]+self.GraphInterval)*plotXScale
if newStartPosX != oldStartPosX:
startPosX += newStartPosX
oldStartPosX = newStartPosX
- #startPosX += (self.ChrLengthDistList[j]+self.GraphInterval)*plotXScale
-
- #for j, _chr in enumerate(self.genotype):
#ZS: This is beause the chromosome value stored in qtlresult['chr'] can be (for example) either X or 20 depending upon the mapping method/scale used
- if self.plotScale == "physic":
- this_chr = str(self.ChrList[self.selectedChr][0])
- else:
+ this_chr = str(self.ChrList[self.selectedChr][0])
+ if self.plotScale != "physic":
this_chr = str(self.ChrList[self.selectedChr][1]+1)
+
if self.selectedChr == -1 or str(qtlresult['chr']) == this_chr:
- #AdditiveCoordXY = []
- #DominanceCoordXY = []
- #for k, _locus in enumerate(_chr):
- Xc = startPosX + (qtlresult['Mb']-startMb)*plotXScale
- #if self.plotScale == 'physic':
- #Xc = startPosX + (_locus.Mb-startMb)*plotXScale
- #Xc = startPosX + (qtlresult['Mb']-startMb)*plotXScale
- #else:
- #Xc = startPosX + (_locus.cM-_chr[0].cM)*plotXScale
- #Xc = startPosX + (qtlresult['cM']-qtlresult[0]['cM'])*plotXScale
+ if self.plotScale != "physic" and self.genotype.filler == True:
+ if self.selectedChr != -1:
+ start_cm = self.genotype[self.selectedChr - 1][0].cM
+ Xc = startPosX + (qtlresult['Mb'] - start_cm)*plotXScale
+ else:
+ start_cm = self.genotype[previous_chr_as_int][0].cM
+ Xc = startPosX + ((qtlresult['Mb']-start_cm-startMb)*plotXScale)*(((qtlresult['Mb']-start_cm-startMb)*plotXScale)/((qtlresult['Mb']-start_cm-startMb+self.GraphInterval)*plotXScale))
+ else:
+ Xc = startPosX + (qtlresult['Mb']-startMb)*plotXScale
# updated by NL 06-18-2011:
# fix the over limit LRS graph issue since genotype trait may give infinite LRS;
# for any lrs is over than 460(LRS max in this system), it will be reset to 460
+
+ yLRS = yZero - (item/LRS_LOD_Max) * LRSHeightThresh
+
+
if 'lrs_value' in qtlresult:
- if self.LRS_LOD == "LOD":
+ if self.LRS_LOD == "LOD" or self.LRS_LOD == "-log(p)":
if qtlresult['lrs_value'] > 460 or qtlresult['lrs_value']=='inf':
+ #Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/(LRSAxisList[-1]*self.LODFACTOR)
Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/(LRS_LOD_Max*self.LODFACTOR)
else:
+ #Yc = yZero - qtlresult['lrs_value']*LRSHeightThresh/(LRSAxisList[-1]*self.LODFACTOR)
Yc = yZero - qtlresult['lrs_value']*LRSHeightThresh/(LRS_LOD_Max*self.LODFACTOR)
else:
if qtlresult['lrs_value'] > 460 or qtlresult['lrs_value']=='inf':
+ #Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/LRSAxisList[-1]
Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/LRS_LOD_Max
else:
+ #Yc = yZero - qtlresult['lrs_value']*LRSHeightThresh/LRSAxisList[-1]
Yc = yZero - qtlresult['lrs_value']*LRSHeightThresh/LRS_LOD_Max
else:
if qtlresult['lod_score'] > 100 or qtlresult['lod_score']=='inf':
+ #Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/LRSAxisList[-1]
Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/LRS_LOD_Max
else:
if self.LRS_LOD == "LRS":
+ #Yc = yZero - qtlresult['lod_score']*self.LODFACTOR*LRSHeightThresh/LRSAxisList[-1]
Yc = yZero - qtlresult['lod_score']*self.LODFACTOR*LRSHeightThresh/LRS_LOD_Max
else:
+ #Yc = yZero - qtlresult['lod_score']*LRSHeightThresh/LRSAxisList[-1]
Yc = yZero - qtlresult['lod_score']*LRSHeightThresh/LRS_LOD_Max
- #if qtlresult['lrs_value'] > 460 or qtlresult['lrs_value']=='inf':
- #if self.qtlresults[j]['lrs_value'] > 460 or self.qtlresults[j]['lrs_value']=='inf':
- # Yc = yZero - webqtlConfig.MAXLRS*LRSHeightThresh/LRS_LOD_Max
- #else:
- # Yc = yZero - qtlresult['lrs_value']*LRSHeightThresh/LRS_LOD_Max
if self.manhattan_plot == True:
- canvas.drawString("5", Xc-canvas.stringWidth("5",font=symbolFont)/2+1,Yc+2,color=pid.black, font=symbolFont)
+ if self.selectedChr == -1 and (previous_chr_as_int % 2 == 1):
+ point_color = pid.red
+ else:
+ point_color = pid.blue
+
+ final_x_pos = Xc-canvas.stringWidth("5",font=symbolFont)/2+1
+ if final_x_pos > (xLeftOffset + plotWidth):
+ continue
+ #break ZS: This is temporary until issue with sorting for GEMMA is fixed
+ elif final_x_pos < xLeftOffset:
+ continue
+ else:
+ canvas.drawString("5", final_x_pos,Yc+2,color=point_color, font=symbolFont)
else:
LRSCoordXY.append((Xc, Yc))
@@ -2152,11 +1962,8 @@ class MarkerRegression(object):
additiveMax = 0.000001
Yc = yZero - qtlresult['additive']*AdditiveHeightThresh/additiveMax
AdditiveCoordXY.append((Xc, Yc))
- # if not self.multipleInterval and INTERCROSS and self.additiveChecked:
- # Yc = yZero - qtlresult['dominance']*DominanceHeightThresh/dominanceMax
- # DominanceCoordXY.append((Xc, Yc))
+
m += 1
- #canvas.drawPolygon(LRSCoordXY,edgeColor=thisLRSColor,closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
if self.manhattan_plot != True:
canvas.drawPolygon(LRSCoordXY,edgeColor=thisLRSColor,closed=0, edgeWidth=lrsEdgeWidth, clipX=(xLeftOffset, xLeftOffset + plotWidth))
@@ -2228,7 +2035,6 @@ class MarkerRegression(object):
additiveScale = Plot.detScaleOld(0,additiveMax)
additiveStep = (additiveScale[1]-additiveScale[0])/additiveScale[2]
additiveAxisList = Plot.frange(0, additiveScale[1], additiveStep)
- maxAdd = additiveScale[1]
addPlotScale = AdditiveHeightThresh/additiveMax
additiveAxisList.append(additiveScale[1])
@@ -2320,388 +2126,36 @@ class MarkerRegression(object):
return plotXScale
- def calculateAllResult(self, fd):
-
- weightedRegression = fd.formdata.getvalue('applyVarianceSE')
-
- self.genotype = self.genotype.addinterval()
- resultSlice = []
- controlGeno = []
-
- if self.multipleInterval:
- self.suggestive = 0
- self.significant = 0
- if self.selectedChr > -1:
- self.genotype.chromosome = [self.genotype[self.selectedChr]]
- else:
- #single interval mapping
- try:
- self.suggestive = float(fd.formdata.getvalue('permSuggestive'))
- self.significant = float(fd.formdata.getvalue('permSignificance'))
- except:
- self.suggestive = None
- self.significant = None
-
- _strains, _vals, _vars = self.traitList[0].exportInformative(weightedRegression)
-
- if webqtlUtil.ListNotNull(_vars):
- pass
- else:
- weightedRegression = 0
- _strains, _vals, _vars = self.traitList[0].exportInformative()
-
- ##locate genotype of control Locus
- if self.controlLocus:
- controlGeno2 = []
- _FIND = 0
- for _chr in self.genotype:
- for _locus in _chr:
- if _locus.name == self.controlLocus:
- controlGeno2 = _locus.genotype
- _FIND = 1
- break
- if _FIND:
- break
- if controlGeno2:
- _prgy = list(self.genotype.prgy)
- for _strain in _strains:
- _idx = _prgy.index(_strain)
- controlGeno.append(controlGeno2[_idx])
- else:
- return "The control marker you selected is not in the genofile."
-
- if weightedRegression:
- self.perm_output = self.genotype.permutation(strains = _strains, trait = _vals,
- variance = _vars, nperm=self.nperm)
- else:
- self.perm_output = self.genotype.permutation(strains = _strains, trait = _vals,
- nperm=self.nperm)
-
- if self.significant and self.suggestive:
- pass
- else:
- if self.nperm < 100:
- self.suggestive = 0
- self.significant = 0
- else:
- self.suggestive = self.perm_output[int(self.nperm*0.37-1)]
- self.significant = self.perm_output[int(self.nperm*0.95-1)]
-
- #calculating bootstrap
- #from now on, genotype could only contain a single chromosome
- #permutation need to be performed genome wide, this is not the case for bootstrap
-
- #due to the design of qtlreaper, composite regression need to be performed genome wide
- if not self.controlLocus and self.selectedChr > -1:
- self.genotype.chromosome = [self.genotype[self.selectedChr]]
- elif self.selectedChr > -1: #self.controlLocus and self.selectedChr > -1
- lociPerChr = map(len, self.genotype)
- resultSlice = reduce(lambda X, Y: X+Y, lociPerChr[:self.selectedChr], 0)
- resultSlice = [resultSlice,resultSlice+lociPerChr[self.selectedChr]]
- else:
- pass
-
- #calculate QTL for each trait
- self.qtlresults = []
-
- for thisTrait in self.traitList:
- _strains, _vals, _vars = thisTrait.exportInformative(weightedRegression)
- if self.controlLocus:
- if weightedRegression:
- qtlresult = self.genotype.regression(strains = _strains, trait = _vals,
- variance = _vars, control = self.controlLocus)
- else:
- qtlresult = self.genotype.regression(strains = _strains, trait = _vals,
- control = self.controlLocus)
- if resultSlice:
- qtlresult = qtlresult[resultSlice[0]:resultSlice[1]]
- else:
- if weightedRegression:
- qtlresult = self.genotype.regression(strains = _strains, trait = _vals,
- variance = _vars)
- else:
- qtlresult = self.genotype.regression(strains = _strains, trait = _vals)
-
- self.qtlresults.append(qtlresult)
-
- if not self.multipleInterval:
- if self.controlLocus and self.selectedChr > -1:
- self.genotype.chromosome = [self.genotype[self.selectedChr]]
-
- if self.bootChecked:
- if controlGeno:
- self.bootResult = self.genotype.bootstrap(strains = _strains, trait = _vals,
- control = controlGeno, nboot=fd.nboot)
- elif weightedRegression:
- self.bootResult = self.genotype.bootstrap(strains = _strains, trait = _vals,
- variance = _vars, nboot=fd.nboot)
- else:
- self.bootResult = self.genotype.bootstrap(strains = _strains, trait = _vals,
- nboot=fd.nboot)
- else:
- self.bootResult = []
-
- def calculatePValue (self, query_LRS, permutation_LRS_array):
- query_index = len(permutation_LRS_array)
- for i, one_permutation_LRS in enumerate(permutation_LRS_array):
- if one_permutation_LRS >= query_LRS:
- query_index = i
- break
- try:
- P_value = float(len(permutation_LRS_array) - query_index) / len(permutation_LRS_array)
- except:
- P_value = ''
- return P_value
-
- def helpButton(self, anchor):
- return HT.Href(self.HELP_PAGE_REF + '#%s' % anchor, self.qmarkImg, target=self.HELP_WINDOW_NAME)
-
-
- def traitRemapTD(self, cursor, fd):
- chrList = HT.Select(name="chromosomes", data=self.ChrList, selected=[self.selectedChr],
- onChange="chrLength(this.form.chromosomes.value, this.form.scale.value, this.form, self.ChrLengthMbList);")
-
- physicOnly = HT.Span(' *', Class="cr")
-
- showSNPCheck = HT.Input(type='checkbox', Class='checkbox', name='showSNP', value='ON', checked=self.SNPChecked)
- showSNPText = HT.Span('SNP Track ', self.helpButton("snpSeismograph"), Class="fs12 fwn")
-
- showGenesCheck = HT.Input(type='checkbox', Class='checkbox', name='showGenes', value='ON', checked=self.geneChecked)
- showGenesText = HT.Span('Gene Track', Class="fs12 fwn")
-
- showIntervalAnalystCheck = HT.Input(type='checkbox', Class='checkbox', name='intervalAnalystCheck', value='ON', checked=self.intervalAnalystChecked)
- showIntervalAnalystText = HT.Span('Interval Analyst', Class="fs12 fwn")
-## BEGIN HaplotypeAnalyst
-
- showHaplotypeAnalystCheck = HT.Input(type='checkbox', Class='checkbox', name='haplotypeAnalystCheck', value='ON', checked=self.haplotypeAnalystChecked)
- showHaplotypeAnalystText = HT.Span('Haplotype Analyst', Class="fs12 fwn")
-## END HaplotypeAnalyst
-
- leftBox = HT.Input(type="text", name="startMb", size=10)
- rightBox = HT.Input(type="text", name="endMb", size=10)
- if self.selectedChr > -1 and self.plotScale=='physic':
- leftBox.value = self.startMb
- rightBox.value = self.endMb
-
- scaleBox = HT.Select(name="scale", onChange="chrLength(this.form.chromosomes.value, this.form.scale.value, this.form, self.ChrLengthMbList);")
- scaleBox.append(("Genetic", "morgan"))
- if fd.genotype.Mbmap:
- scaleBox.append(("Physical", "physic"))
- scaleBox.selected.append(self.plotScale)
-
- permBox = HT.Input(type="checkbox", name="permCheck", value='ON', checked=self.permChecked, Class="checkbox")
- permText = HT.Span("Permutation Test ", self.helpButton("Permutation"), Class="fs12 fwn")
- bootBox = HT.Input(type="checkbox", name="bootCheck", value='ON', checked=self.bootChecked, Class="checkbox")
- bootText = HT.Span("Bootstrap Test ", self.helpButton("bootstrap"), Class="fs12 fwn")
- additiveBox = HT.Input(type="checkbox", name="additiveCheck", value='ON', checked=self.additiveChecked, Class="checkbox")
- additiveText = HT.Span("Allele Effects ", self.helpButton("additive"), Class="fs12 fwn")
- dominanceBox = HT.Input(type="checkbox", name="dominanceCheck", value='ON', checked=self.dominanceChecked, Class="checkbox")
- dominanceText = HT.Span("Dominance Effects ", self.helpButton("Dominance"), Class="fs12 fwn")
-
- lrsRadio = HT.Input(type="radio", name="LRSCheck", value='LRS', checked = (self.LRS_LOD == "LRS"))
- lodRadio = HT.Input(type="radio", name="LRSCheck", value='LOD', checked = (self.LRS_LOD != "LRS"))
- lrsMaxBox = HT.Input(type="text", name="lrsMax", value=self.lrsMax, size=3)
- widthBox = HT.Input(type="text", name="graphWidth", size=5, value=str(self.graphWidth))
- legendBox = HT.Input(type="checkbox", name="viewLegend", value='ON', checked=self.legendChecked, Class="checkbox")
- legendText = HT.Span("Legend", Class="fs12 fwn")
-
- draw2XBox = HT.Input(type="checkbox", name="draw2X", value='ON', Class="checkbox")
- draw2XText = HT.Span("2X Plot", Class="fs12 fwn")
-
- regraphButton = HT.Input(type="button", Class="button", onClick="javascript:databaseFunc(this.form,'showIntMap');", value="Remap")
- controlsForm = HT.Form(cgi= os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), enctype="multipart/form-data", name="changeViewForm", submit=HT.Input(type='hidden'))
- controlsTable = HT.TableLite(border=0)
- innerControlsTable = HT.TableLite(border=0)
- if self.selectedChr == -1:
- minimumGraphWidth = self.MULT_GRAPH_MIN_WIDTH
- else:
- minimumGraphWidth = self.GRAPH_MIN_WIDTH
- innerControlsTable.append(
- HT.TR(HT.TD("Chr: ", Class="fs12 fwb ffl"),HT.TD(chrList, scaleBox, regraphButton)),
- HT.TR(HT.TD("View: ", Class="fs12 fwb ffl"),HT.TD(leftBox, " to ", rightBox, "Mb", physicOnly, NOWRAP="on")),
- HT.TR(HT.TD("Units: ", Class="fs12 fwb ffl"), HT.TD(lrsRadio, "LRS ", lodRadio, "LOD ", self.helpButton("LOD"))),
- HT.TR(HT.TD(" ", Class="fs12 fwb ffl"), HT.TD(lrsMaxBox, "units on Y-axis (0 for default)", Class="fs11 fwn")),
- HT.TR(HT.TD("Width: ", Class="fs12 fwb ffl"), HT.TD(widthBox, "pixels (minimum=%d)" % minimumGraphWidth, Class="fs11 fwn "))
- )
- #whether SNP
- # comment this, because this will make caculation very slow.
- #cursor.execute("Select Species.Id from SnpAll, Species where SnpAll.SpeciesId = Species.Id and Species.Name = %s limit 1", self.species)
- #SNPorNot = cursor.fetchall()
- SNPorNot = True
- #Whether Gene
- cursor.execute("Select Species.Id from GeneList, Species where GeneList.SpeciesId = Species.Id and Species.Name = %s limit 1", self.species)
- GeneorNot = cursor.fetchall()
-
- if self.multipleInterval:
- optionPanel = HT.TD(valign="top", NOWRAP="on")
- else:
- optionPanel = HT.TD(permBox, permText, HT.BR(), bootBox, bootText, HT.BR(), additiveBox, additiveText, HT.BR(), valign="top", NOWRAP="on")
- #whether dominance
- if self.genotype.type == 'intercross':
- optionPanel.append(dominanceBox, dominanceText, HT.BR())
- if SNPorNot:
- optionPanel.append(showSNPCheck, showSNPText, physicOnly, HT.BR())
- if GeneorNot:
- optionPanel.append(showGenesCheck, showGenesText, physicOnly, HT.BR(),
- showIntervalAnalystCheck, showIntervalAnalystText, physicOnly, HT.BR())
-## BEGIN HaplotypeAnalyst
- optionPanel.append(showHaplotypeAnalystCheck, showHaplotypeAnalystText, physicOnly, HT.BR())
-## END HaplotypeAnalyst
- optionPanel.append(legendBox, legendText, HT.BR(),draw2XBox, draw2XText)
- controlsTable.append(
- HT.TR(HT.TD(innerControlsTable, valign="top"),
- HT.TD("&nbsp;", width=15), optionPanel),
- HT.TR(HT.TD(physicOnly, " only apply to single chromosome physical mapping", align="Center", colspan=3, Class="fs11 fwn"))
- )
- controlsForm.append(controlsTable)
-
- controlsForm.append(HT.Input(name="permSuggestive", value=self.suggestive, type="hidden"))
- controlsForm.append(HT.Input(name="permSignificance", value=self.significant, type="hidden"))
-
-## BEGIN HaplotypeAnalyst #### haplotypeAnalystCheck added below
-## END HaplotypeAnalyst
-
- for key in fd.formdata.keys():
- if key == "searchResult" and type([]) == type(fd.formdata.getvalue(key)):
- controlsForm.append(HT.Input(name=key, value=string.join(fd.formdata.getvalue(key), "\t"), type="hidden"))
- elif key not in ("endMb", "startMb", "chromosomes", "scale", "permCheck", "bootCheck", "additiveCheck", "dominanceCheck",
- "LRSCheck", "intervalAnalystCheck", "haplotypeAnalystCheck", "lrsMax", "graphWidth", "viewLegend", 'showGenes', 'showSNP', 'draw2X',
- 'permSuggestive', "permSignificance"):
- controlsForm.append(HT.Input(name=key, value=fd.formdata.getvalue(key), type="hidden"))
- else:
- pass
-
- # updated by NL, move function changeView(i) to webqtl.js and change it to function changeView(i, Chr_Mb_list)
- # move function chrLength(a, b, c) to webqtl.js and change it to function chrLength(a, b, c, Chr_Mb_list)
- self.dict['js1'] = '<script src="/javascript/sorttable.js"></script>'
- return HT.TD(controlsForm, Class="doubleBorder", width=400)
-
- def traitInfoTD(self, fd):
- if self.selectedChr == -1:
- intMapHeading = HT.Paragraph('Map Viewer: Whole Genome', Class="title")
- else:
- intMapHeading = HT.Paragraph('Map Viewer: Chr %s' % self.genotype[0].name, Class="title")
-
- heading2 = HT.Paragraph(HT.Strong('Population: '), "%s %s" % (self.species.title(), fd.RISet) , HT.BR())
- #Trait is from an database
- if self.traitList and self.traitList[0] and self.traitList[0].db:
- #single trait
- if len(self.traitList) == 1:
- thisTrait = self.traitList[0]
- trait_url = HT.Href(text=thisTrait.name, url = os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE) + \
- "?FormID=showDatabase&incparentsf1=1&database=%s&ProbeSetID=%s" % (thisTrait.db.name, thisTrait.name), \
- target='_blank', Class="normalsize")
- heading2.append(HT.Strong("Database: "), HT.Href(text=thisTrait.db.fullname, url = webqtlConfig.INFOPAGEHREF % thisTrait.db.name ,\
- target='_blank',Class="normalsize"),HT.BR())
- if thisTrait.db.type == 'ProbeSet':
- heading2.append(HT.Strong('Trait ID: '), trait_url, HT.BR(),
- HT.Strong("Gene Symbol: "), HT.Italic('%s' % thisTrait.symbol,id="green"),HT.BR())
- if thisTrait.chr and thisTrait.mb:
- heading2.append(HT.Strong("Location: "), 'Chr %s @ %s Mb' % (thisTrait.chr, thisTrait.mb))
- elif thisTrait.db.type == 'Geno':
- heading2.append(HT.Strong('Locus : '), trait_url, HT.BR())
- if thisTrait.chr and thisTrait.mb:
- heading2.append(HT.Strong("Location: "), 'Chr %s @ %s Mb' % (thisTrait.chr, thisTrait.mb))
- elif thisTrait.db.type == 'Publish':
- heading2.append(HT.Strong('Record ID: '), trait_url, HT.BR())
- else:
- pass
- else:
- heading2.append(HT.Strong("Traits: "), "Multiple Traits")
- else:
- heading2.append(HT.Strong("Trait Name: "), fd.identification)
- return HT.TD(intMapHeading, heading2, valign="top")
-
def drawPermutationHistogram(self):
#########################################
# Permutation Graph
#########################################
- myCanvas = pid.PILCanvas(size=(400,300))
+ myCanvas = pid.PILCanvas(size=(500,300))
if 'lod_score' in self.qtlresults[0] and self.LRS_LOD == "LRS":
- perm_output = [value*4.16 for value in self.perm_output]
+ perm_output = [value*4.61 for value in self.perm_output]
elif 'lod_score' not in self.qtlresults[0] and self.LRS_LOD == "LOD":
- perm_output = [value/4.16 for value in self.perm_output]
+ perm_output = [value/4.61 for value in self.perm_output]
else:
perm_output = self.perm_output
- Plot.plotBar(myCanvas, perm_output, XLabel=self.LRS_LOD, YLabel='Frequency', title=' Histogram of Permutation Test')
filename= webqtlUtil.genRandStr("Reg_")
+ Plot.plotBar(myCanvas, perm_output, XLabel=self.LRS_LOD, YLabel='Frequency', title=' Histogram of Permutation Test')
myCanvas.save(GENERATED_IMAGE_DIR+filename, format='gif')
return filename
- # img=HT.Image('/image/'+filename+'.gif',border=0,alt='Histogram of Permutation Test')
-
- # self.suggestive = self.perm_output[int(self.nperm*0.37-1)]
- # self.significant = self.perm_output[int(self.nperm*0.95-1)]
- # self.highlysignificant = self.perm_output[int(self.nperm*0.99-1)]
-
- # permutationHeading = HT.Paragraph('Histogram of Permutation Test')
- # permutationHeading.__setattr__("class","title")
-
- # permutation = HT.TableLite()
- # permutation.append(HT.TR(HT.TD(img)),
- # HT.TR(HT.TD('')),
- # HT.TR(HT.TD('Total of %d permutations'%self.nperm)))
-
- # return permutation
-
- def permutationTextFile(self):
- filename= webqtlUtil.genRandStr("Reg_")
- fpText = open('%s.txt' % (webqtlConfig.TMPDIR+filename), 'wb')
- fpText.write('Suggestive LRS (p = 0.63) = %3.2f\n'%self.suggestive)
- fpText.write('Significant LRS (p = 0.05) = %3.2f\n'%self.significant)
- fpText.write('Highly Significant LRS (p = 0.01) = %3.2f\n\n'%self.highlysignificant)
- fpText.write('%s Permutations\n\n' % str(len(self.perm_output)))
- LRSInfo =HT.Paragraph('&nbsp;&nbsp;&nbsp;&nbsp;Suggestive LRS = %3.2f\n'%self.suggestive,
- HT.BR(),
- '&nbsp;&nbsp;&nbsp;&nbsp;Significant LRS =%3.2f\n'%self.significant,
- HT.BR(),
- '&nbsp;&nbsp;&nbsp;&nbsp;Highly Significant LRS =%3.2f\n' % self.highlysignificant)
-
- for lrs_value in self.perm_output:
- fpText.write(str(lrs_value) + "\n")
-
- textUrl = HT.Href(text = 'Download Permutation Results', url= '/tmp/'+filename+'.txt', target = "_blank", Class='fs12 fwn')
-
- return textUrl
-
def geneTable(self, geneCol, refGene=None):
- #SNPLink = 0 #Not sure what this is used for
-
if self.dataset.group.species == 'mouse' or self.dataset.group.species == 'rat':
- #gene_tblobj = {}
- self.gene_table_header = self.getGeneTableHeader(refGene=None)
+ self.gene_table_header = self.getGeneTableHeaderList(refGene=None)
self.gene_table_body = self.getGeneTableBody(geneCol, refGene=None)
- #gene_tblobj["header"] = self.getGeneTableHeader(refGene=None)
- #gene_tblobj["body"] = self.getGeneTableBody(geneCol, refGene=None)
-
- #sortby = self.getSortByValue()
-
- #filename= webqtlUtil.genRandStr("Mapping_")
-
- #objfile = open('%s.obj' % (webqtlConfig.TMPDIR+filename), 'wb')
- #cPickle.dump(gene_tblobj, objfile)
- #objfile.close()
-
- #gene_table = webqtlUtil.genTableObj(tblobj=gene_tblobj, file=filename, sortby=sortby, tableID="sortable", addIndex="0")
else:
self.gene_table_header = None
self.gene_table_body = None
- #gene_table = ""
-
- #return gene_table
-
- def getGeneTableHeader(self, refGene=None):
- gene_tblobj_header = []
+ def getGeneTableHeaderList(self, refGene=None):
gene_table_header_list = []
-
- col_class = "fs14 fwb ffl b1 cw cbrb"
-
if self.dataset.group.species == "mouse":
-
if refGene:
gene_table_header_list = ["Index",
"Symbol",
@@ -2713,26 +2167,7 @@ class MarkerRegression(object):
"Human Chr",
"Mb Start (hg19)",
"Literature Correlation",
- "Gene Description",
- "PolymiRTS Database" + HT.Href(url='http://compbio.uthsc.edu/miRSNP/', text='>>', target="_blank").__str__(),
- "Gene Weaver Info Content" + HT.Href(url='http://geneweaver.org/', text='>>', target="_blank").__str__()]
-
- # gene_tblobj_header = [[THCell(HT.TD('Index', HT.BR(), HT.BR(), align='left', width=50, Class=col_class), text="index", idx=0),
- # THCell(HT.TD('Symbol', HT.BR(), HT.BR(), align='left', width=100, Class=col_class), text="symbol", idx=1),
- # THCell(HT.TD('Mb Start',HT.BR(),'(mm9)', align='left', width=100, Class=col_class), text="mb_start_mm9", idx=2),
- # THCell(HT.TD('Length (Kb)', HT.BR(), HT.BR(), align='left', width=100, Class=col_class), text="length", idx=3),
- # THCell(HT.TD('SNP',HT.BR(),'Count', align='left', width=47, Class=col_class), text="snp_count", idx=4),
- # THCell(HT.TD('SNP',HT.BR(),'Density', align='left', width=78, Class=col_class), text="snp_density", idx=5),
- # THCell(HT.TD('Avg',HT.BR(),'Expr', HT.BR(), HT.BR(), align='left', width=44, Class=col_class), sort=0, idx=6),
- # THCell(HT.TD('Human',HT.BR(),'Chr', align='left', width=60, Class=col_class), text="human_chr", idx=7),
- # THCell(HT.TD('Mb Start',HT.BR(),'(hg19)', align='left', width=100, Class=col_class), text="mb_start_hg19", idx=8),
- # THCell(HT.TD('Literature',HT.BR(),'Correlation', align='left', width=100, Class=col_class), text="lit_corr", idx=9),
- # THCell(HT.TD('Gene Description', HT.BR(), HT.BR(), align='left', width=290, Class=col_class), text="description", idx=10),
- # THCell(HT.TD('PolymiRTS',HT.BR(),'Database', HT.BR(), HT.Href(url='http://compbio.uthsc.edu/miRSNP/', text='>>', target="_blank", Class="normalsize"),
- # align='left', width=100, Class=col_class), sort=0, idx=11),
- # THCell(HT.TD('Gene Weaver', HT.BR(), 'Info Content', HT.BR(), HT.Href(url='http://geneweaver.org/', text='>>', target="_blank", Class="normalsize"),
- # align='left', width=110, Class=col_class), sort=0, idx=12),
- # ]]
+ "Gene Description"]
else:
gene_table_header_list = ["",
"Index",
@@ -2744,28 +2179,8 @@ class MarkerRegression(object):
"Avg Expr",
"Human Chr",
"Mb Start (hg19)",
- "Gene Description",
- "PolymiRTS Database" + HT.Href(url='http://compbio.uthsc.edu/miRSNP/', text='>>', target="_blank").__str__(),
- "Gene Weaver Info Content" + HT.Href(url='http://geneweaver.org/', text='>>', target="_blank").__str__()]
-
- # gene_tblobj_header = [[THCell(HT.TD('Index', HT.BR(), HT.BR(), align='left', width=50, Class=col_class), text="index", idx=0),
- # THCell(HT.TD('Symbol', HT.BR(), HT.BR(), align='left', width=100, Class=col_class), text="symbol", idx=1),
- # THCell(HT.TD('Mb Start',HT.BR(),'(mm9)', align='left', width=100, Class=col_class), text="mb_start_mm9", idx=2),
- # THCell(HT.TD('Length (Kb)', HT.BR(), HT.BR(), align='left', width=100, Class=col_class), text="length", idx=3),
- # THCell(HT.TD('SNP',HT.BR(),'Count', align='left', width=47, Class=col_class), text="snp_count", idx=4),
- # THCell(HT.TD('SNP',HT.BR(),'Density', align='left', width=78, Class=col_class), text="snp_density", idx=5),
- # THCell(HT.TD('Avg',HT.BR(),'Expr', HT.BR(), HT.BR(), align='left', width=44, Class=col_class), sort=0, idx=6),
- # THCell(HT.TD('Human',HT.BR(),'Chr', align='left', width=60, Class=col_class), text="human_chr", idx=7),
- # THCell(HT.TD('Mb Start',HT.BR(),'(hg19)', align='left', width=100, Class=col_class), text="mb_start_hg19", idx=8),
- # THCell(HT.TD('Gene Description', HT.BR(), HT.BR(), align='left', width=290, Class=col_class), text="description", idx=9),
- # THCell(HT.TD('PolymiRTS',HT.BR(),'Database', HT.BR(), HT.Href(url='http://compbio.uthsc.edu/miRSNP/', text='>>', target="_blank", Class="normalsize"),
- # align='left', width=100, Class=col_class), sort=0, idx=10),
- # THCell(HT.TD('Gene Weaver', HT.BR(), 'Info Content', HT.BR(), HT.Href(url='http://geneweaver.org/', text='>>', target="_blank", Class="normalsize"),
- # align='left', width=110, Class=col_class), sort=0, idx=11),
- # ]]
-
+ "Gene Description"]
elif self.dataset.group.species == "rat":
-
gene_table_header_list = ["",
"Index",
"Symbol",
@@ -2778,58 +2193,19 @@ class MarkerRegression(object):
"Mb Start (hg19)",
"Gene Description"]
- # gene_tblobj_header = [[THCell(HT.TD('Index', HT.BR(), HT.BR(), align='left', width=50, Class=col_class), text="index", idx=0),
- # THCell(HT.TD('Symbol', HT.BR(), HT.BR(), align='left', width=100, Class=col_class), text="symbol", idx=1),
- # THCell(HT.TD('Mb Start',HT.BR(),'(rn3)', align='left', width=100, Class=col_class), text="mb_start_rn3", idx=2),
- # THCell(HT.TD('Length (Kb)', HT.BR(), HT.BR(), align='left', width=100, Class=col_class), text="length", idx=3),
- # THCell(HT.TD('Avg',HT.BR(),'Expr', HT.BR(), HT.BR(), align='left', width=44, Class=col_class), sort=0, idx=4),
- # THCell(HT.TD('Mouse',HT.BR(),'Chr', align='left', width=60, Class=col_class), text="mouse_chr", idx=5),
- # THCell(HT.TD('Mb Start',HT.BR(),'(mm9)', align='left', width=100, Class=col_class), text="mb_start_mm9", idx=6),
- # THCell(HT.TD('Human',HT.BR(),'Chr', align='left', width=60, Class=col_class), text="human_chr", idx=7),
- # THCell(HT.TD('Mb Start',HT.BR(),'(hg19)', align='left', width=100, Class=col_class), text="mb_start_hg19", idx=8),
- # THCell(HT.TD('Gene Description', HT.BR(), HT.BR(), align='left', Class=col_class), text="description", idx=9)]]
-
- else:
- pass
-
return gene_table_header_list
- #return gene_tblobj_header
def getGeneTableBody(self, geneCol, refGene=None):
-
- tblobj_body = [] #contains table rows
- className = "fs13 b1 c222"
-
gene_table_body = []
tableIterationsCnt = 0
if self.dataset.group.species == "mouse":
-
- # polymiRTS
- # http://lily.uthsc.edu:8080/20090422_UTHSC_cuiyan/PolymiRTS_CLS?chrom=2&chrom_from=115&chrom_to=125
- #XZ: We can NOT assume their web service is always on. We must put this block of code in try except.
- try:
- conn = httplib.HTTPConnection("lily.uthsc.edu:8080")
- conn.request("GET", "/20090422_UTHSC_cuiyan/PolymiRTS_CLS?chrom=%s&chrom_from=%s&chrom_to=%s" % (self.genotype[0].name, self.startMb, self.endMb))
- response = conn.getresponse()
- data = response.read()
- data = data.split()
- conn.close()
- dic = {}
- index = 0
- for i in data:
- if index%3==0:
- dic[data[index]] = HT.Href(url=data[index+2], text=data[index+1], target="_blank", Class="normalsize")
- index = index+1
- except Exception:
- dic={}
-
for gIndex, theGO in enumerate(geneCol):
tableIterationsCnt = tableIterationsCnt + 1
this_row = [] #container for the cells of each row
- selectCheck = HT.Input(type="checkbox", name="searchResult", value=theGO["GeneSymbol"], Class="checkbox", onClick="highlight(this)") #checkbox for each row
+ selectCheck = HT.Input(type="checkbox", name="selectCheck", value=theGO["GeneSymbol"], Class="checkbox trait_checkbox") #checkbox for each row
geneLength = (theGO["TxEnd"] - theGO["TxStart"])*1000.0
tenPercentLength = geneLength*0.0001
@@ -2837,10 +2213,8 @@ class MarkerRegression(object):
txEnd = theGO["TxEnd"]
theGO["snpDensity"] = theGO["snpCount"]/geneLength
if self.ALEX_DEBUG_BOOL_PRINT_GENE_LIST:
- #accessionString = 'http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?CMD=Display&DB=gene&term=%s' % theGO["NM_ID"]
geneIdString = 'http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids=%s' % theGO["GeneID"]
- allProbeString = '%s?cmd=sch&gene=%s&alias=1' % (os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE), theGO["GeneSymbol"])
if theGO["snpCount"]:
snpString = HT.Href(url="http://genenetwork.org/webqtl/main.py?FormID=snpBrowser&chr=%s&start=%s&end=%s&geneName=%s&s1=%d&s2=%d" % (theGO["Chromosome"],
theGO["TxStart"], theGO["TxEnd"], theGO["GeneSymbol"], self.diffCol[0], self.diffCol[1]),
@@ -2850,10 +2224,6 @@ class MarkerRegression(object):
mouseStartString = "http://genome.ucsc.edu/cgi-bin/hgTracks?clade=vertebrate&org=Mouse&db=mm9&position=chr" + theGO["Chromosome"] + "%3A" + str(int(theGO["TxStart"] * 1000000.0)) + "-" + str(int(theGO["TxEnd"]*1000000.0)) +"&pix=620&Submit=submit"
- #Used for sorting
- mouseStartValue = int(theGO["TxStart"])
-
-
#the chromosomes for human 1 are 1qXX.XX
if theGO['humanGene']:
if theGO['humanGene']["TxStart"] == '':
@@ -2862,25 +2232,15 @@ class MarkerRegression(object):
humanStartDisplay = "%0.6f" % theGO['humanGene']["TxStart"]
humanChr = theGO['humanGene']["Chromosome"]
- if humanChr.find('q'):
- humanChrSort = humanChr[:humanChr.find("q")].join(humanChr[(humanChr.find("q")+1):]) #value used when sorting table
- elif humanChr.find('p'):
- humanChrSort = humanChr[:humanChr.find("p")].join(humanChr[(humanChr.find("p")+1):]) #value used when sorting table
- else:
- humanChrSort = humanChr
humanTxStart = theGO['humanGene']["TxStart"]
- #Used for sorting
- humanStartValue = float(theGO['humanGene']["TxStart"])
-
humanStartString = "http://genome.ucsc.edu/cgi-bin/hgTracks?clade=vertebrate&org=Human&db=hg17&position=chr%s:%d-%d" % (humanChr, int(1000000*theGO['humanGene']["TxStart"]), int(1000000*theGO['humanGene']["TxEnd"]))
else:
- humanStartString = humanChr = humanChrSort = humanStartDisplay = humanStartValue = "--"
+ humanStartString = humanChr = humanStartDisplay = "--"
geneDescription = theGO["GeneDescription"]
- if len(geneDescription) > 26:
- geneDescription = geneDescription[:26]+"..."
- probeSetSearch = HT.Href(allProbeString, ">>", target="_blank")
+ if len(geneDescription) > 70:
+ geneDescription = geneDescription[:70]+"..."
if theGO["snpDensity"] < 0.000001:
snpDensityStr = "0"
@@ -2893,27 +2253,17 @@ class MarkerRegression(object):
else:
avgExpr = "%0.6f" % avgExpr
- # polymiRTS
- polymiRTS = ' '
- if dic.has_key(theGO["GeneID"]):
- polymiRTS = dic[theGO["GeneID"]]
-
# If we have a referenceGene then we will show the Literature Correlation
if theGO["Chromosome"] == "X":
chr_as_int = 19
else:
chr_as_int = int(theGO["Chromosome"]) - 1
if refGene:
- try:
- literatureCorrelation = self.getLiteratureCorrelation(self.cursor,refGene,theGO['GeneID'])
- except:
- literatureCorrelation = "N/A"
-
literatureCorrelationString = str(self.getLiteratureCorrelation(self.cursor,refGene,theGO['GeneID']) or "N/A")
this_row = [selectCheck.__str__(),
str(tableIterationsCnt),
- HT.Href(geneIdString, theGO["GeneSymbol"], target="_blank").__str__() + "&nbsp;" + probeSetSearch.__str__(),
+ HT.Href(geneIdString, theGO["GeneSymbol"], target="_blank").__str__(),
HT.Href(mouseStartString, "%0.6f" % txStart, target="_blank").__str__(),
HT.Href("javascript:rangeView('%s', %f, %f)" % (str(chr_as_int), txStart-tenPercentLength, txEnd+tenPercentLength), "%0.3f" % geneLength).__str__(),
snpString,
@@ -2922,29 +2272,11 @@ class MarkerRegression(object):
humanChr,
HT.Href(humanStartString, humanStartDisplay, target="_blank").__str__(),
literatureCorrelationString,
- geneDescription,
- polymiRTS,
- ""]
-
- # this_row.append(TDCell(HT.TD(tableIterationsCnt, selectCheck, width=30, align='right', Class=className), tableIterationsCnt, tableIterationsCnt))
- # this_row.append(TDCell(HT.TD(HT.Href(geneIdString, theGO["GeneSymbol"], target="_blank"), "&nbsp;", probeSetSearch, align='right', Class=className), theGO["GeneSymbol"], theGO["GeneSymbol"]))
- # this_row.append(TDCell(HT.TD(HT.Href(mouseStartString, "%0.6f" % txStart, target="_blank"), align='right', Class=className), str(mouseStartValue), mouseStartValue))
- # this_row.append(TDCell(HT.TD(HT.Href("javascript:centerIntervalMapOnRange2('%s', " % theGO["Chromosome"]+str(txStart-tenPercentLength) + ", " + str(txEnd+tenPercentLength) + ", document.changeViewForm)", "%0.3f" % geneLength), align='right', Class=className), "%0.3f" % geneLength, geneLength))
- # this_row.append(TDCell(HT.TD(snpString, align='right', Class=className), str(theGO["snpCount"]), theGO["snpCount"]))
- # this_row.append(TDCell(HT.TD(snpDensityStr, align='right', Class=className), snpDensityStr, theGO["snpDensity"]))
- # this_row.append(TDCell(HT.TD(avgExpr, align='right', Class=className), "--", "--"))
- # this_row.append(TDCell(HT.TD(humanChr, align='right', Class=className), humanChr, humanChrSort))
- # this_row.append(TDCell(HT.TD(HT.Href(humanStartString, humanStartDisplay, target="_blank"), align='right', Class=className), humanStartDisplay, humanStartValue))
- # this_row.append(TDCell(HT.TD(literatureCorrelationString, align='right', Class=className), literatureCorrelationString, literatureCorrelation))
- # this_row.append(TDCell(HT.TD(geneDescription, align='right', Class=className), geneDescription, geneDescription))
- # this_row.append(TDCell(HT.TD(polymiRTS, align='right', Class=className), "", ""))
- # this_row.append(TDCell(HT.TD("", align='right', Class=className), "", ""))
-
+ geneDescription]
else:
-
this_row = [selectCheck.__str__(),
str(tableIterationsCnt),
- HT.Href(geneIdString, theGO["GeneSymbol"], target="_blank").__str__() + "&nbsp;" + probeSetSearch.__str__(),
+ HT.Href(geneIdString, theGO["GeneSymbol"], target="_blank").__str__(),
HT.Href(mouseStartString, "%0.6f" % txStart, target="_blank").__str__(),
HT.Href("javascript:rangeView('%s', %f, %f)" % (str(chr_as_int), txStart-tenPercentLength, txEnd+tenPercentLength), "%0.3f" % geneLength).__str__(),
snpString,
@@ -2952,35 +2284,17 @@ class MarkerRegression(object):
avgExpr,
humanChr,
HT.Href(humanStartString, humanStartDisplay, target="_blank").__str__(),
- geneDescription,
- polymiRTS,
- ""]
-
-
- # this_row.append(TDCell(HT.TD(tableIterationsCnt, selectCheck, width=30, align='right', Class=className), tableIterationsCnt, tableIterationsCnt))
- # this_row.append(TDCell(HT.TD(HT.Href(geneIdString, theGO["GeneSymbol"], target="_blank"), "&nbsp;", probeSetSearch, align='right', Class=className), theGO["GeneSymbol"], theGO["GeneSymbol"]))
- # this_row.append(TDCell(HT.TD(HT.Href(mouseStartString, "%0.6f" % txStart, target="_blank"), align='right', Class=className), str(mouseStartValue), mouseStartValue))
- # this_row.append(TDCell(HT.TD(HT.Href("javascript:centerIntervalMapOnRange2('%s', " % theGO["Chromosome"]+str(txStart-tenPercentLength) + ", " + str(txEnd+tenPercentLength) + ", document.changeViewForm)", "%0.3f" % geneLength), align='right', Class=className), "%0.3f" % geneLength, geneLength))
- # this_row.append(TDCell(HT.TD(snpString, align='right', Class=className), str(theGO["snpCount"]), theGO["snpCount"]))
- # this_row.append(TDCell(HT.TD(snpDensityStr, align='right', Class=className), snpDensityStr, theGO["snpDensity"]))
- # this_row.append(TDCell(HT.TD(avgExpr, align='right', Class=className), "--", "--"))
- # this_row.append(TDCell(HT.TD(humanChr, align='right', Class=className), humanChr, humanChrSort))
- # this_row.append(TDCell(HT.TD(HT.Href(humanStartString, humanStartDisplay, target="_blank"), align='right', Class=className), humanStartDisplay, humanStartValue))
- # this_row.append(TDCell(HT.TD(geneDescription, align='right', Class=className), geneDescription, geneDescription))
- # this_row.append(TDCell(HT.TD(polymiRTS, align='right', Class=className), "", ""))
- # this_row.append(TDCell(HT.TD("", align='right', Class=className), "", ""))
+ geneDescription]
gene_table_body.append(this_row)
- #tblobj_body.append(this_row)
elif self.dataset.group.species == 'rat':
-
for gIndex, theGO in enumerate(geneCol):
-
this_row = [] #container for the cells of each row
- selectCheck = HT.Input(type="checkbox", name="searchResult", Class="checkbox", onClick="highlight(this)").__str__() #checkbox for each row
+ selectCheck = HT.Input(type="checkbox", name="selectCheck", Class="checkbox trait_checkbox").__str__() #checkbox for each row
- webqtlSearch = HT.Href(os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE)+"?cmd=sch&gene=%s&alias=1&species=rat" % theGO["GeneSymbol"], ">>", target="_blank").__str__()
+ #ZS: May want to get this working again later
+ #webqtlSearch = HT.Href(os.path.join(webqtlConfig.CGIDIR, webqtlConfig.SCRIPTFILE)+"?cmd=sch&gene=%s&alias=1&species=rat" % theGO["GeneSymbol"], ">>", target="_blank").__str__()
if theGO["GeneID"] != "":
geneSymbolNCBI = HT.Href("http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids=%s" % theGO["GeneID"], theGO["GeneSymbol"], Class="normalsize", target="_blank").__str__()
@@ -2993,7 +2307,6 @@ class MarkerRegression(object):
chr_as_int = int(theGO["Chromosome"]) - 1
geneLength = (float(theGO["TxEnd"]) - float(theGO["TxStart"]))
- #geneLengthURL = "javascript:centerIntervalMapOnRange2('%s', %f, %f, document.changeViewForm)" % (theGO["Chromosome"], float(theGO["TxStart"])-(geneLength*0.1), float(theGO["TxEnd"])+(geneLength*0.1))
geneLengthURL = "javascript:rangeView('%s', %f, %f)" % (theGO["Chromosome"], float(theGO["TxStart"])-(geneLength*0.1), float(theGO["TxEnd"])+(geneLength*0.1))
avgExprVal = []
@@ -3005,22 +2318,16 @@ class MarkerRegression(object):
#Mouse Gene
if theGO['mouseGene']:
mouseChr = theGO['mouseGene']["Chromosome"]
- mouseTxStart = theGO['mouseGene']["TxStart"]
+ mouseTxStart = "%0.6f" % theGO['mouseGene']["TxStart"]
else:
mouseChr = mouseTxStart = ""
#the chromosomes for human 1 are 1qXX.XX
if theGO['humanGene']:
humanChr = theGO['humanGene']["Chromosome"]
- if 'q' in humanChr:
- humanChrSort = humanChr[:humanChr.find("q")].join(humanChr[(humanChr.find("q")+1):]) #value used when sorting table
- elif 'p' in humanChr:
- humanChrSort = humanChr[:humanChr.find("p")].join(humanChr[(humanChr.find("p")+1):]) #value used when sorting table
- else:
- humanChrSort = humanChr
- humanTxStart = theGO['humanGene']["TxStart"]
+ humanTxStart = "%0.6f" % theGO['humanGene']["TxStart"]
else:
- humanChr = humanTxStart = humanChrSort = ""
+ humanChr = humanTxStart = ""
geneDesc = theGO["GeneDescription"]
if geneDesc == "---":
@@ -3028,8 +2335,8 @@ class MarkerRegression(object):
this_row = [selectCheck.__str__(),
str(gIndex+1),
- webqtlSearch.__str__() + geneSymbolNCBI,
- theGO["TxStart"],
+ geneSymbolNCBI,
+ "%0.6f" % theGO["TxStart"],
HT.Href(geneLengthURL, "%0.3f" % (geneLength*1000.0)).__str__(),
avgExprVal,
mouseChr,
@@ -3038,26 +2345,9 @@ class MarkerRegression(object):
humanTxStart,
geneDesc]
-
- #this_row.append(TDCell(HT.TD(gIndex + 1, selectCheck, align='left', Class=className), str(gIndex+1), gIndex+1))
- #this_row.append(TDCell(HT.TD(webqtlSearch, geneSymbolNCBI, align='left', Class=className), theGO["GeneSymbol"], theGO["GeneSymbol"]))
- #this_row.append(TDCell(HT.TD(theGO["TxStart"], align='left', Class=className), theGO["TxStart"], theGO["TxStart"]))
- #this_row.append(TDCell(HT.TD(HT.Href(geneLengthURL, "%0.3f" % (geneLength*1000.0)), align='left', Class=className), "%0.3f" % (geneLength*1000.0), (geneLength*1000.0)))
- #this_row.append(TDCell(HT.TD(avgExprVal, align='left', Class=className), "", ""))
- #this_row.append(TDCell(HT.TD(mouseChr, align='left', Class=className), mouseChr, mouseChr))
- #this_row.append(TDCell(HT.TD(mouseTxStart, align='left', Class=className), mouseTxStart, mouseTxStart))
- #this_row.append(TDCell(HT.TD(humanChr, align='left', Class=className), humanChr, humanChrSort))
- #this_row.append(TDCell(HT.TD(humanTxStart, align='left', Class=className), humanTxStart, humanTxStart))
- #this_row.append(TDCell(HT.TD(geneDesc, align='left', Class=className), geneDesc, geneDesc))
-
gene_table_body.append(this_row)
- #tblobj_body.append(this_row)
-
- else:
- pass
return gene_table_body
- #return tblobj_body
def getLiteratureCorrelation(cursor,geneId1=None,geneId2=None):
if not geneId1 or not geneId2:
@@ -3076,10 +2366,4 @@ class MarkerRegression(object):
lCorr = lCorr[0]
break
except: raise #lCorr = None
- return lCorr
-
- def getSortByValue(self):
-
- sortby = ("", "")
-
- return sortby
+ return lCorr \ No newline at end of file
diff --git a/wqflask/wqflask/marker_regression/gemma_mapping.py b/wqflask/wqflask/marker_regression/gemma_mapping.py
index 3bde61cd..e2b15c26 100644
--- a/wqflask/wqflask/marker_regression/gemma_mapping.py
+++ b/wqflask/wqflask/marker_regression/gemma_mapping.py
@@ -1,62 +1,180 @@
-import os, math
+import os, math, string, random, json
from base import webqtlConfig
-from utility.tools import flat_files, GEMMA_COMMAND, GEMMA_RESULTS_PATH
+from base.trait import GeneralTrait
+from base.data_set import create_dataset
+from utility.tools import flat_files, GEMMA_COMMAND, GEMMA_WRAPPER_COMMAND, TEMPDIR, WEBSERVER_MODE
-def run_gemma(this_dataset, samples, vals):
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
+GEMMAOPTS = "-debug"
+if WEBSERVER_MODE == 'PROD':
+ GEMMAOPTS = "-no-check"
+
+def run_gemma(this_trait, this_dataset, samples, vals, covariates, use_loco, maf=0.01, first_run=True, output_files=None):
"""Generates p-values for each marker using GEMMA"""
- print("INSIDE GEMMA_MAPPING")
+ if this_dataset.group.genofile != None:
+ genofile_name = this_dataset.group.genofile[:-5]
+ else:
+ genofile_name = this_dataset.group.name
- gen_pheno_txt_file(this_dataset, samples, vals)
+ if first_run:
+ trait_filename = str(this_trait.name) + "_" + str(this_dataset.name) + "_pheno"
+ gen_pheno_txt_file(this_dataset, genofile_name, vals, trait_filename)
- # use GEMMA_RUN in the next one, create a unique temp file
+ if not os.path.isfile("{}{}_output.assoc.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, genofile_name)):
+ open("{}{}_output.assoc.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, genofile_name), "w+")
- gemma_command = GEMMA_COMMAND + ' -bfile %s/%s -k %s/%s.sXX.txt -lmm 1 -outdir %s/output -o %s_output' % (flat_files('mapping'),
- this_dataset.group.name,
- flat_files('mapping'),
- this_dataset.group.name,
- GEMMA_RESULTS_PATH,
- this_dataset.group.name)
- print("gemma_command:" + gemma_command)
+ k_output_filename = this_dataset.group.name + "_K_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
+ gwa_output_filename = this_dataset.group.name + "_GWA_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
- os.system(gemma_command)
+ this_chromosomes = this_dataset.species.chromosomes.chromosomes
+ chr_list_string = ""
+ for i in range(len(this_chromosomes)):
+ if i < (len(this_chromosomes) - 1):
+ chr_list_string += this_chromosomes[i+1].name + ","
+ else:
+ chr_list_string += this_chromosomes[i+1].name
- marker_obs = parse_gemma_output(this_dataset)
+ if covariates != "":
+ gen_covariates_file(this_dataset, covariates, samples)
+
+ if use_loco == "True":
+ generate_k_command = GEMMA_WRAPPER_COMMAND + ' --json --loco ' + chr_list_string + ' -- ' + GEMMAOPTS + ' -g %s/%s_geno.txt -p %s/gn2/%s.txt -a %s/%s_snps.txt -gk > %s/gn2/%s.json' % (flat_files('genotype/bimbam'),
+ genofile_name,
+ TEMPDIR,
+ trait_filename,
+ flat_files('genotype/bimbam'),
+ genofile_name,
+ TEMPDIR,
+ k_output_filename)
+ logger.debug("k_command:" + generate_k_command)
+ os.system(generate_k_command)
+
+ gemma_command = GEMMA_WRAPPER_COMMAND + ' --json --loco --input %s/gn2/%s.json -- ' % (TEMPDIR, k_output_filename) + GEMMAOPTS + ' -g %s/%s_geno.txt -p %s/gn2/%s.txt' % (flat_files('genotype/bimbam'),
+ genofile_name,
+ TEMPDIR,
+ trait_filename)
+ if covariates != "":
+ gemma_command += ' -c %s/%s_covariates.txt -a %s/%s_snps.txt -lmm 2 -maf %s > %s/gn2/%s.json' % (flat_files('mapping'),
+ this_dataset.group.name,
+ flat_files('genotype/bimbam'),
+ genofile_name,
+ maf,
+ TEMPDIR,
+ gwa_output_filename)
+ else:
+ gemma_command += ' -a %s/%s_snps.txt -lmm 2 -maf %s > %s/gn2/%s.json' % (flat_files('genotype/bimbam'),
+ genofile_name,
+ maf,
+ TEMPDIR,
+ gwa_output_filename)
+
+ else:
+ generate_k_command = GEMMA_WRAPPER_COMMAND + ' --json -- ' + GEMMAOPTS + ' -g %s/%s_geno.txt -p %s/gn2/%s.txt -a %s/%s_snps.txt -gk > %s/gn2/%s.json' % (flat_files('genotype/bimbam'),
+ genofile_name,
+ TEMPDIR,
+ trait_filename,
+ flat_files('genotype/bimbam'),
+ genofile_name,
+ TEMPDIR,
+ k_output_filename)
+
+ logger.debug("k_command:" + generate_k_command)
+ os.system(generate_k_command)
+
+ gemma_command = GEMMA_WRAPPER_COMMAND + ' --json --input %s/gn2/%s.json -- ' % (TEMPDIR, k_output_filename) + GEMMAOPTS + ' -a %s/%s_snps.txt -lmm 2 -g %s/%s_geno.txt -p %s/gn2/%s.txt' % (flat_files('genotype/bimbam'),
+ genofile_name,
+ flat_files('genotype/bimbam'),
+ genofile_name,
+ TEMPDIR,
+ trait_filename)
- return marker_obs
-def gen_pheno_txt_file(this_dataset, samples, vals):
+ if covariates != "":
+ gemma_command += ' -c %s/%s_covariates.txt > %s/gn2/%s.json' % (flat_files('mapping'), this_dataset.group.name, TEMPDIR, gwa_output_filename)
+ else:
+ gemma_command += ' > %s/gn2/%s.json' % (TEMPDIR, gwa_output_filename)
+
+
+ logger.debug("gemma_command:" + gemma_command)
+ os.system(gemma_command)
+ else:
+ gwa_output_filename = output_files
+
+ if use_loco == "True":
+ marker_obs = parse_loco_output(this_dataset, gwa_output_filename)
+ return marker_obs, gwa_output_filename
+ else:
+ marker_obs = parse_loco_output(this_dataset, gwa_output_filename)
+ return marker_obs, gwa_output_filename
+
+def gen_pheno_txt_file(this_dataset, genofile_name, vals, trait_filename):
"""Generates phenotype file for GEMMA"""
current_file_data = []
- with open("{}/{}.fam".format(flat_files('mapping'), this_dataset.group.name), "r") as outfile:
- for i, line in enumerate(outfile):
- split_line = line.split()
- current_file_data.append(split_line)
-
- with open("{}/{}.fam".format(flat_files('mapping'), this_dataset.group.name), "w") as outfile:
- for i, line in enumerate(current_file_data):
- if vals[i] == "x":
- this_val = -9
+ with open("{}/gn2/{}.txt".format(TEMPDIR, trait_filename), "w") as outfile:
+ for value in vals:
+ if value == "x":
+ outfile.write("NA\n")
else:
- this_val = vals[i]
- outfile.write("0" + " " + line[1] + " " + line[2] + " " + line[3] + " " + line[4] + " " + str(this_val) + "\n")
+ outfile.write(value + "\n")
+
+def gen_covariates_file(this_dataset, covariates, samples):
+ covariate_list = covariates.split(",")
+ covariate_data_object = []
+ for covariate in covariate_list:
+ this_covariate_data = []
+ trait_name = covariate.split(":")[0]
+ dataset_ob = create_dataset(covariate.split(":")[1])
+ trait_ob = GeneralTrait(dataset=dataset_ob,
+ name=trait_name,
+ cellid=None)
+
+ #trait_samples = this_dataset.group.all_samples_ordered()
+ this_dataset.group.get_samplelist()
+ trait_samples = this_dataset.group.samplelist
+ logger.debug("SAMPLES:", trait_samples)
+ trait_sample_data = trait_ob.data
+ logger.debug("SAMPLE DATA:", trait_sample_data)
+ for index, sample in enumerate(trait_samples):
+ if sample in samples:
+ if sample in trait_sample_data:
+ sample_value = trait_sample_data[sample].value
+ this_covariate_data.append(sample_value)
+ else:
+ this_covariate_data.append("-9")
+ covariate_data_object.append(this_covariate_data)
-def parse_gemma_output(this_dataset):
+ with open("{}/{}_covariates.txt".format(flat_files('mapping'), this_dataset.group.name), "w") as outfile:
+ for i in range(len(covariate_data_object[0])):
+ for this_covariate in covariate_data_object:
+ outfile.write(str(this_covariate[i]) + "\t")
+ outfile.write("\n")
+
+def parse_gemma_output(genofile_name):
included_markers = []
p_values = []
marker_obs = []
- with open("{}/output/{}_output.assoc.txt".format(GEMMA_RESULTS_PATH, this_dataset.group.name)) as output_file:
+
+ with open("{}{}_output.assoc.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, genofile_name)) as output_file:
for line in output_file:
- if line.startswith("chr"):
+ if line.startswith("chr\t"):
continue
else:
marker = {}
marker['name'] = line.split("\t")[1]
- marker['chr'] = int(line.split("\t")[0])
+ if line.split("\t")[0] != "X" and line.split("\t")[0] != "X/Y":
+ if "chr" in line.split("\t")[0]:
+ marker['chr'] = int(line.split("\t")[0][3:])
+ else:
+ marker['chr'] = int(line.split("\t")[0])
+ else:
+ marker['chr'] = line.split("\t")[0]
marker['Mb'] = float(line.split("\t")[2]) / 1000000
- marker['p_value'] = float(line.split("\t")[10])
+ marker['p_value'] = float(line.split("\t")[9])
if math.isnan(marker['p_value']) or (marker['p_value'] <= 0):
marker['lod_score'] = 0
#marker['lrs_value'] = 0
@@ -66,6 +184,59 @@ def parse_gemma_output(this_dataset):
marker_obs.append(marker)
included_markers.append(line.split("\t")[1])
- p_values.append(float(line.split("\t")[10]))
+ p_values.append(float(line.split("\t")[9]))
+
+ return marker_obs
+
+def parse_loco_output(this_dataset, gwa_output_filename):
+
+ output_filelist = []
+ with open("{}/gn2/".format(TEMPDIR) + gwa_output_filename + ".json") as data_file:
+ data = json.load(data_file)
+
+ files = data['files']
+ for file in files:
+ output_filelist.append(file[2])
+
+ included_markers = []
+ p_values = []
+ marker_obs = []
+ previous_chr = 0
+
+ no_results = False
+ for this_file in output_filelist:
+ if not os.path.isfile(this_file):
+ no_results = True
+ break
+ with open(this_file) as output_file:
+ for line in output_file:
+ if line.startswith("chr\t"):
+ continue
+ else:
+ marker = {}
+ marker['name'] = line.split("\t")[1]
+ if line.split("\t")[0] != "X" and line.split("\t")[0] != "X/Y" and line.split("\t")[0] != "Y" and line.split("\t")[0] != "M":
+ if "chr" in line.split("\t")[0]:
+ marker['chr'] = int(line.split("\t")[0][3:])
+ else:
+ marker['chr'] = int(line.split("\t")[0])
+ if marker['chr'] > previous_chr:
+ previous_chr = marker['chr']
+ elif marker['chr'] < previous_chr:
+ break
+ else:
+ marker['chr'] = line.split("\t")[0]
+ marker['Mb'] = float(line.split("\t")[2]) / 1000000
+ marker['p_value'] = float(line.split("\t")[9])
+ if math.isnan(marker['p_value']) or (marker['p_value'] <= 0):
+ marker['lod_score'] = 0
+ #marker['lrs_value'] = 0
+ else:
+ marker['lod_score'] = -math.log10(marker['p_value'])
+ #marker['lrs_value'] = -math.log10(marker['p_value']) * 4.61
+ marker_obs.append(marker)
+
+ included_markers.append(line.split("\t")[1])
+ p_values.append(float(line.split("\t")[9]))
return marker_obs
diff --git a/wqflask/wqflask/marker_regression/marker_regression.py b/wqflask/wqflask/marker_regression/marker_regression.py
deleted file mode 100644
index b1d2f811..00000000
--- a/wqflask/wqflask/marker_regression/marker_regression.py
+++ /dev/null
@@ -1,610 +0,0 @@
-from __future__ import absolute_import, print_function, division
-
-from base.trait import GeneralTrait
-from base import data_set #import create_dataset
-
-from pprint import pformat as pf
-
-import string
-import math
-import sys
-import datetime
-import os
-import collections
-import uuid
-
-import rpy2.robjects as ro
-import numpy as np
-from scipy import linalg
-
-import cPickle as pickle
-import itertools
-
-import simplejson as json
-
-from redis import Redis
-Redis = Redis()
-
-from flask import Flask, g
-
-from base.trait import GeneralTrait
-from base import data_set
-from base import species
-from utility import webqtlUtil
-from utility import helper_functions
-from utility import Plot, Bunch
-from utility import temp_data
-from utility.benchmark import Bench
-from wqflask.marker_regression import gemma_mapping, rqtl_mapping, qtlreaper_mapping, plink_mapping
-
-from utility.tools import locate, locate_ignore_error, PYLMM_COMMAND, GEMMA_COMMAND, GEMMA_RESULTS_PATH, PLINK_COMMAND, TEMPDIR
-from utility.external import shell
-from base.webqtlConfig import TMPDIR, GENERATED_TEXT_DIR
-
-import utility.logger
-logger = utility.logger.getLogger(__name__ )
-
-class MarkerRegression(object):
-
- def __init__(self, start_vars, temp_uuid):
-
- helper_functions.get_species_dataset_trait(self, start_vars)
-
- self.temp_uuid = temp_uuid #needed to pass temp_uuid to gn1 mapping code (marker_regression_gn1.py)
-
- self.json_data = {}
- self.json_data['lodnames'] = ['lod.hk']
-
- self.samples = [] # Want only ones with values
- self.vals = []
-
- all_samples_ordered = self.dataset.group.all_samples_ordered()
- primary_sample_names = list(all_samples_ordered)
-
- for sample in self.dataset.group.samplelist:
- # sample is actually the name of an individual
- in_trait_data = False
- for item in self.this_trait.data:
- if self.this_trait.data[item].name == sample:
- value = start_vars['value:' + self.this_trait.data[item].name]
- self.samples.append(self.this_trait.data[item].name)
- self.vals.append(value)
- in_trait_data = True
- break
- if not in_trait_data:
- value = start_vars.get('value:' + sample)
- if value:
- self.samples.append(sample)
- self.vals.append(value)
-
- self.mapping_method = start_vars['method']
- if start_vars['manhattan_plot'] == "True":
- self.manhattan_plot = True
- else:
- self.manhattan_plot = False
-
- self.maf = start_vars['maf'] # Minor allele frequency
- self.suggestive = ""
- self.significant = ""
- self.pair_scan = False # Initializing this since it is checked in views to determine which template to use
- self.score_type = "LRS" #ZS: LRS or LOD
- self.mapping_scale = "physic"
- self.num_perm = 0
- self.perm_output = []
- self.bootstrap_results = []
-
- #ZS: This is passed to GN1 code for single chr mapping
- self.selected_chr = -1
- if "selected_chr" in start_vars:
- if int(start_vars['selected_chr']) != -1: #ZS: Needs to be -1 if showing full map; there's probably a better way to fix this
- self.selected_chr = int(start_vars['selected_chr']) + 1
- else:
- self.selected_chr = int(start_vars['selected_chr'])
- if "startMb" in start_vars:
- self.startMb = start_vars['startMb']
- if "endMb" in start_vars:
- self.endMb = start_vars['endMb']
- if "graphWidth" in start_vars:
- self.graphWidth = start_vars['graphWidth']
- if "lrsMax" in start_vars:
- self.lrsMax = start_vars['lrsMax']
- if "haplotypeAnalystCheck" in start_vars:
- self.haplotypeAnalystCheck = start_vars['haplotypeAnalystCheck']
- if "startMb" in start_vars: #ZS: This is to ensure showGenes, Legend, etc are checked the first time you open the mapping page, since startMb will only not be set during the first load
- if "permCheck" in start_vars:
- self.permCheck = "ON"
- else:
- self.permCheck = False
- self.num_perm = int(start_vars['num_perm'])
-
- self.LRSCheck = start_vars['LRSCheck']
-
- if "showSNP" in start_vars:
- self.showSNP = start_vars['showSNP']
- else:
- self.showSNP = False
-
- if "showGenes" in start_vars:
- self.showGenes = start_vars['showGenes']
- else:
- self.showGenes = False
-
- if "viewLegend" in start_vars:
- self.viewLegend = start_vars['viewLegend']
- else:
- self.viewLegend = False
- else:
- try:
- if int(start_vars['num_perm']) > 0:
- self.num_perm = int(start_vars['num_perm'])
- except:
- self.num_perm = 0
-
- if self.num_perm > 0:
- self.permCheck = "ON"
- else:
- self.permCheck = False
- self.showSNP = "ON"
- self.showGenes = "ON"
- self.viewLegend = "ON"
-
- self.dataset.group.get_markers()
- if self.mapping_method == "gemma":
- self.score_type = "-log(p)"
- self.manhattan_plot = True
- with Bench("Running GEMMA"):
- marker_obs = gemma_mapping.run_gemma(self.dataset, self.samples, self.vals)
- results = marker_obs
- elif self.mapping_method == "rqtl_plink":
- results = self.run_rqtl_plink()
- elif self.mapping_method == "rqtl_geno":
- self.score_type = "LOD"
- self.mapping_scale = "morgan"
- self.control_marker = start_vars['control_marker']
- self.do_control = start_vars['do_control']
- self.dataset.group.genofile = start_vars['genofile']
- self.method = start_vars['mapmethod_rqtl_geno']
- self.model = start_vars['mapmodel_rqtl_geno']
- if start_vars['pair_scan'] == "true":
- self.pair_scan = True
- if self.permCheck and self.num_perm > 0:
- self.perm_output, self.suggestive, self.significant, results = rqtl_mapping.run_rqtl_geno(self.vals, self.dataset, self.method, self.model, self.permCheck, self.num_perm, self.do_control, self.control_marker, self.manhattan_plot, self.pair_scan)
- else:
- results = rqtl_mapping.run_rqtl_geno(self.vals, self.dataset, self.method, self.model, self.permCheck, self.num_perm, self.do_control, self.control_marker, self.manhattan_plot, self.pair_scan)
- elif self.mapping_method == "reaper":
- if "startMb" in start_vars: #ZS: Check if first time page loaded, so it can default to ON
- if "additiveCheck" in start_vars:
- self.additiveCheck = start_vars['additiveCheck']
- else:
- self.additiveCheck = False
-
- if "bootCheck" in start_vars:
- self.bootCheck = "ON"
- else:
- self.bootCheck = False
- self.num_bootstrap = int(start_vars['num_bootstrap'])
- else:
- self.additiveCheck = "ON"
- try:
- if int(start_vars['num_bootstrap']) > 0:
- self.bootCheck = "ON"
- self.num_bootstrap = int(start_vars['num_bootstrap'])
- else:
- self.bootCheck = False
- self.num_bootstrap = 0
- except:
- self.bootCheck = False
- self.num_bootstrap = 0
-
- self.control_marker = start_vars['control_marker']
- self.do_control = start_vars['do_control']
- self.dataset.group.genofile = start_vars['genofile']
- logger.info("Running qtlreaper")
- results, self.json_data, self.perm_output, self.suggestive, self.significant, self.bootstrap_results = qtlreaper_mapping.gen_reaper_results(self.this_trait,
- self.dataset,
- self.samples,
- self.json_data,
- self.num_perm,
- self.bootCheck,
- self.num_bootstrap,
- self.do_control,
- self.control_marker,
- self.manhattan_plot)
- elif self.mapping_method == "plink":
- results = plink_mapping.run_plink(self.this_trait, self.dataset, self.species, self.vals, self.maf)
- #results = self.run_plink()
- elif self.mapping_method == "pylmm":
- logger.debug("RUNNING PYLMM")
- self.dataset.group.genofile = start_vars['genofile']
- if self.num_perm > 0:
- self.run_permutations(str(temp_uuid))
- results = self.gen_data(str(temp_uuid))
- else:
- logger.debug("RUNNING NOTHING")
-
- if self.pair_scan == True:
- self.qtl_results = []
- highest_chr = 1 #This is needed in order to convert the highest chr to X/Y
- for marker in results:
- if marker['chr1'] > 0 or marker['chr1'] == "X" or marker['chr1'] == "X/Y":
- if marker['chr1'] > highest_chr or marker['chr1'] == "X" or marker['chr1'] == "X/Y":
- highest_chr = marker['chr1']
- if 'lod_score' in marker.keys():
- self.qtl_results.append(marker)
-
- self.trimmed_markers = results
-
- for qtl in enumerate(self.qtl_results):
- self.json_data['chr1'].append(str(qtl['chr1']))
- self.json_data['chr2'].append(str(qtl['chr2']))
- self.json_data['Mb'].append(qtl['Mb'])
- self.json_data['markernames'].append(qtl['name'])
-
- self.js_data = dict(
- json_data = self.json_data,
- this_trait = self.this_trait.name,
- data_set = self.dataset.name,
- maf = self.maf,
- manhattan_plot = self.manhattan_plot,
- mapping_scale = self.mapping_scale,
- qtl_results = self.qtl_results
- )
-
- else:
- self.cutoff = 2
- self.qtl_results = []
- highest_chr = 1 #This is needed in order to convert the highest chr to X/Y
- for marker in results:
- if marker['chr'] > 0 or marker['chr'] == "X" or marker['chr'] == "X/Y":
- if marker['chr'] > highest_chr or marker['chr'] == "X" or marker['chr'] == "X/Y":
- highest_chr = marker['chr']
- if ('lod_score' in marker.keys()) or ('lrs_value' in marker.keys()):
- self.qtl_results.append(marker)
-
- self.trimmed_markers = trim_markers_for_table(results)
-
- self.json_data['chr'] = []
- self.json_data['pos'] = []
- self.json_data['lod.hk'] = []
- self.json_data['markernames'] = []
-
- self.json_data['suggestive'] = self.suggestive
- self.json_data['significant'] = self.significant
-
- #Need to convert the QTL objects that qtl reaper returns into a json serializable dictionary
- for index, qtl in enumerate(self.qtl_results):
- #if index<40:
- # logger.debug("lod score is:", qtl['lod_score'])
- if qtl['chr'] == highest_chr and highest_chr != "X" and highest_chr != "X/Y":
- #logger.debug("changing to X")
- self.json_data['chr'].append("X")
- else:
- self.json_data['chr'].append(str(qtl['chr']))
- self.json_data['pos'].append(qtl['Mb'])
- if 'lrs_value' in qtl.keys():
- self.json_data['lod.hk'].append(str(qtl['lrs_value']))
- else:
- self.json_data['lod.hk'].append(str(qtl['lod_score']))
- self.json_data['markernames'].append(qtl['name'])
-
- #Get chromosome lengths for drawing the interval map plot
- chromosome_mb_lengths = {}
- self.json_data['chrnames'] = []
- for key in self.species.chromosomes.chromosomes.keys():
- self.json_data['chrnames'].append([self.species.chromosomes.chromosomes[key].name, self.species.chromosomes.chromosomes[key].mb_length])
- chromosome_mb_lengths[key] = self.species.chromosomes.chromosomes[key].mb_length
-
- # logger.debug("json_data:", self.json_data)
-
- self.js_data = dict(
- result_score_type = self.score_type,
- json_data = self.json_data,
- this_trait = self.this_trait.name,
- data_set = self.dataset.name,
- maf = self.maf,
- manhattan_plot = self.manhattan_plot,
- mapping_scale = self.mapping_scale,
- chromosomes = chromosome_mb_lengths,
- qtl_results = self.qtl_results,
- num_perm = self.num_perm,
- perm_results = self.perm_output,
- )
-
- def run_rqtl_plink(self):
- # os.chdir("") never do this inside a webserver!!
-
- output_filename = webqtlUtil.genRandStr("%s_%s_"%(self.dataset.group.name, self.this_trait.name))
-
- plink_mapping.gen_pheno_txt_file_plink(self.this_trait, self.dataset, self.vals, pheno_filename = output_filename)
-
- rqtl_command = './plink --noweb --ped %s.ped --no-fid --no-parents --no-sex --no-pheno --map %s.map --pheno %s/%s.txt --pheno-name %s --maf %s --missing-phenotype -9999 --out %s%s --assoc ' % (self.dataset.group.name, self.dataset.group.name, TMPDIR, plink_output_filename, self.this_trait.name, self.maf, TMPDIR, plink_output_filename)
-
- os.system(rqtl_command)
-
- count, p_values = self.parse_rqtl_output(plink_output_filename)
-
- def run_permutations(self, temp_uuid):
- """Runs permutations and gets significant and suggestive LOD scores"""
-
- top_lod_scores = []
-
- #logger.debug("self.num_perm:", self.num_perm)
-
- for permutation in range(self.num_perm):
-
- pheno_vector = np.array([val == "x" and np.nan or float(val) for val in self.vals])
- np.random.shuffle(pheno_vector)
-
- key = "pylmm:input:" + temp_uuid
-
- if self.dataset.group.species == "human":
- p_values, t_stats = self.gen_human_results(pheno_vector, key, temp_uuid)
- else:
- genotype_data = [marker['genotypes'] for marker in self.dataset.group.markers.markers]
-
- no_val_samples = self.identify_empty_samples()
- trimmed_genotype_data = self.trim_genotypes(genotype_data, no_val_samples)
-
- genotype_matrix = np.array(trimmed_genotype_data).T
-
- params = dict(pheno_vector = pheno_vector.tolist(),
- genotype_matrix = genotype_matrix.tolist(),
- restricted_max_likelihood = True,
- refit = False,
- temp_uuid = temp_uuid,
-
- # meta data
- timestamp = datetime.datetime.now().isoformat(),
- )
-
- json_params = json.dumps(params)
- Redis.set(key, json_params)
- Redis.expire(key, 60*60)
-
- command = PYLMM_COMMAND+' --key {} --species {}'.format(key,"other")
- shell(command)
-
- json_results = Redis.blpop("pylmm:results:" + temp_uuid, 45*60)
- results = json.loads(json_results[1])
- p_values = [float(result) for result in results['p_values']]
-
- lowest_p_value = 1
- for p_value in p_values:
- if p_value < lowest_p_value:
- lowest_p_value = p_value
-
- #logger.debug("lowest_p_value:", lowest_p_value)
- top_lod_scores.append(-math.log10(lowest_p_value))
-
- #logger.debug("top_lod_scores:", top_lod_scores)
-
- self.suggestive = np.percentile(top_lod_scores, 67)
- self.significant = np.percentile(top_lod_scores, 95)
-
- def gen_data(self, temp_uuid):
- """Generates p-values for each marker"""
-
- logger.debug("self.vals is:", self.vals)
- pheno_vector = np.array([(val == "x" or val == "") and np.nan or float(val) for val in self.vals])
-
- #lmm_uuid = str(uuid.uuid4())
-
- key = "pylmm:input:" + temp_uuid
- logger.debug("key is:", pf(key))
- #with Bench("Loading cache"):
- # result = Redis.get(key)
-
- if self.dataset.group.species == "human":
- p_values, t_stats = self.gen_human_results(pheno_vector, key, temp_uuid)
- #p_values = self.trim_results(p_values)
-
- else:
- logger.debug("NOW CWD IS:", os.getcwd())
- genotype_data = [marker['genotypes'] for marker in self.dataset.group.markers.markers]
-
- no_val_samples = self.identify_empty_samples()
- trimmed_genotype_data = self.trim_genotypes(genotype_data, no_val_samples)
-
- genotype_matrix = np.array(genotype_data).T
-
- #logger.debug("pheno_vector: ", pf(pheno_vector))
- #logger.debug("genotype_matrix: ", pf(genotype_matrix))
- #logger.debug("genotype_matrix.shape: ", pf(genotype_matrix.shape))
-
- #params = {"pheno_vector": pheno_vector,
- # "genotype_matrix": genotype_matrix,
- # "restricted_max_likelihood": True,
- # "refit": False,
- # "temp_data": tempdata}
-
- # logger.debug("genotype_matrix:", str(genotype_matrix.tolist()))
- # logger.debug("pheno_vector:", str(pheno_vector.tolist()))
-
- params = dict(pheno_vector = pheno_vector.tolist(),
- genotype_matrix = genotype_matrix.tolist(),
- restricted_max_likelihood = True,
- refit = False,
- temp_uuid = temp_uuid,
-
- # meta data
- timestamp = datetime.datetime.now().isoformat(),
- )
-
- json_params = json.dumps(params)
- #logger.debug("json_params:", json_params)
- Redis.set(key, json_params)
- Redis.expire(key, 60*60)
- logger.debug("before printing command")
-
- command = PYLMM_COMMAND + ' --key {} --species {}'.format(key, "other")
- logger.debug("command is:", command)
- logger.debug("after printing command")
-
- shell(command)
-
- #t_stats, p_values = lmm.run(key)
- #lmm.run(key)
-
- json_results = Redis.blpop("pylmm:results:" + temp_uuid, 45*60)
- results = json.loads(json_results[1])
- p_values = [float(result) for result in results['p_values']]
- #logger.debug("p_values:", p_values[:10])
- #p_values = self.trim_results(p_values)
- t_stats = results['t_stats']
-
- #t_stats, p_values = lmm.run(
- # pheno_vector,
- # genotype_matrix,
- # restricted_max_likelihood=True,
- # refit=False,
- # temp_data=tempdata
- #)
- #logger.debug("p_values:", p_values)
-
- self.dataset.group.markers.add_pvalues(p_values)
-
- #self.get_lod_score_cutoff()
-
- return self.dataset.group.markers.markers
-
- def trim_results(self, p_values):
- logger.debug("len_p_values:", len(p_values))
- if len(p_values) > 500:
- p_values.sort(reverse=True)
- trimmed_values = p_values[:500]
-
- return trimmed_values
-
- #def gen_human_results(self, pheno_vector, tempdata):
- def gen_human_results(self, pheno_vector, key, temp_uuid):
- file_base = locate(self.dataset.group.name,"mapping")
-
- plink_input = input.plink(file_base, type='b')
- input_file_name = os.path.join(webqtlConfig.SNP_PATH, self.dataset.group.name + ".snps.gz")
-
- pheno_vector = pheno_vector.reshape((len(pheno_vector), 1))
- covariate_matrix = np.ones((pheno_vector.shape[0],1))
- kinship_matrix = np.fromfile(open(file_base + '.kin','r'),sep=" ")
- kinship_matrix.resize((len(plink_input.indivs),len(plink_input.indivs)))
-
- logger.debug("Before creating params")
-
- params = dict(pheno_vector = pheno_vector.tolist(),
- covariate_matrix = covariate_matrix.tolist(),
- input_file_name = input_file_name,
- kinship_matrix = kinship_matrix.tolist(),
- refit = False,
- temp_uuid = temp_uuid,
-
- # meta data
- timestamp = datetime.datetime.now().isoformat(),
- )
-
- logger.debug("After creating params")
-
- json_params = json.dumps(params)
- Redis.set(key, json_params)
- Redis.expire(key, 60*60)
-
- logger.debug("Before creating the command")
-
- command = PYLMM_COMMAND+' --key {} --species {}'.format(key, "human")
-
- logger.debug("command is:", command)
-
- os.system(command)
-
- json_results = Redis.blpop("pylmm:results:" + temp_uuid, 45*60)
- results = json.loads(json_results[1])
- t_stats = results['t_stats']
- p_values = results['p_values']
-
-
- #p_values, t_stats = lmm.run_human(key)
-
- #p_values, t_stats = lmm.run_human(
- # pheno_vector,
- # covariate_matrix,
- # input_file_name,
- # kinship_matrix,
- # loading_progress=tempdata
- # )
-
- return p_values, t_stats
-
- def get_lod_score_cutoff(self):
- logger.debug("INSIDE GET LOD CUTOFF")
- high_qtl_count = 0
- for marker in self.dataset.group.markers.markers:
- if marker['lod_score'] > 1:
- high_qtl_count += 1
-
- if high_qtl_count > 1000:
- return 1
- else:
- return 0
-
- def identify_empty_samples(self):
- no_val_samples = []
- for sample_count, val in enumerate(self.vals):
- if val == "x":
- no_val_samples.append(sample_count)
- return no_val_samples
-
- def trim_genotypes(self, genotype_data, no_value_samples):
- trimmed_genotype_data = []
- for marker in genotype_data:
- new_genotypes = []
- for item_count, genotype in enumerate(marker):
- if item_count in no_value_samples:
- continue
- try:
- genotype = float(genotype)
- except ValueError:
- genotype = np.nan
- pass
- new_genotypes.append(genotype)
- trimmed_genotype_data.append(new_genotypes)
- return trimmed_genotype_data
-
-def create_snp_iterator_file(group):
- """
- This function is only called by main below
- """
- raise Exception("Paths are undefined here")
- plink_file_base = os.path.join(TMPDIR, group)
- plink_input = input.plink(plink_file_base, type='b')
-
- data = dict(plink_input = list(plink_input),
- numSNPs = plink_input.numSNPs)
-
- #input_dict = {}
- #
- #input_dict['plink_input'] = list(plink_input)
- #input_dict['numSNPs'] = plink_input.numSNPs
- #
-
- snp_file_base = os.path.join(webqtlConfig.SNP_PATH, group + ".snps.gz")
-
- with gzip.open(snp_file_base, "wb") as fh:
- pickle.dump(data, fh, pickle.HIGHEST_PROTOCOL)
-
-def trim_markers_for_table(markers):
- num_markers = len(markers)
-
- if 'lod_score' in markers[0].keys():
- sorted_markers = sorted(markers, key=lambda k: k['lod_score'], reverse=True)
- else:
- sorted_markers = sorted(markers, key=lambda k: k['lrs_value'], reverse=True)
-
- #ZS: So we end up with a list of just 200 markers
- if len(sorted_markers) >= 200:
- trimming_factor = 200 / len(sorted_markers)
- trimmed_sorted_markers = sorted_markers[:int(len(sorted_markers) * trimming_factor)]
- return trimmed_sorted_markers
- else:
- return sorted_markers
-
-
-if __name__ == '__main__':
- import cPickle as pickle
diff --git a/wqflask/wqflask/marker_regression/plink_mapping.py b/wqflask/wqflask/marker_regression/plink_mapping.py
index b457b9a0..2f327faf 100644
--- a/wqflask/wqflask/marker_regression/plink_mapping.py
+++ b/wqflask/wqflask/marker_regression/plink_mapping.py
@@ -3,37 +3,44 @@ import os
from base.webqtlConfig import TMPDIR
from utility import webqtlUtil
-from utility.tools import PLINK_COMMAND
+from utility.tools import flat_files, PLINK_COMMAND
import utility.logger
logger = utility.logger.getLogger(__name__ )
def run_plink(this_trait, dataset, species, vals, maf):
plink_output_filename = webqtlUtil.genRandStr("%s_%s_"%(dataset.group.name, this_trait.name))
+ gen_pheno_txt_file(dataset, vals)
- gen_pheno_txt_file_plink(this_trait, dataset, vals, pheno_filename = plink_output_filename)
-
- plink_command = PLINK_COMMAND + ' --noweb --ped %s/%s.ped --no-fid --no-parents --no-sex --no-pheno --map %s/%s.map --pheno %s%s.txt --pheno-name %s --maf %s --missing-phenotype -9999 --out %s%s --assoc ' % (
- PLINK_PATH, dataset.group.name, PLINK_PATH, dataset.group.name,
- TMPDIR, plink_output_filename, this_trait.name, maf, TMPDIR,
- plink_output_filename)
+ plink_command = PLINK_COMMAND + ' --noweb --bfile %s/%s --no-pheno --no-fid --no-parents --no-sex --maf %s --out %s%s --assoc ' % (
+ flat_files('mapping'), dataset.group.name, maf, TMPDIR, plink_output_filename)
logger.debug("plink_command:", plink_command)
os.system(plink_command)
count, p_values = parse_plink_output(plink_output_filename, species)
- #for marker in self.dataset.group.markers.markers:
- # if marker['name'] not in included_markers:
- # logger.debug("marker:", marker)
- # self.dataset.group.markers.markers.remove(marker)
- # #del self.dataset.group.markers.markers[marker]
-
- logger.debug("p_values:", pf(p_values))
+ logger.debug("p_values:", p_values)
dataset.group.markers.add_pvalues(p_values)
return dataset.group.markers.markers
+def gen_pheno_txt_file(this_dataset, vals):
+ """Generates phenotype file for GEMMA/PLINK"""
+
+ current_file_data = []
+ with open("{}/{}.fam".format(flat_files('mapping'), this_dataset.group.name), "r") as outfile:
+ for i, line in enumerate(outfile):
+ split_line = line.split()
+ current_file_data.append(split_line)
+
+ with open("{}/{}.fam".format(flat_files('mapping'), this_dataset.group.name), "w") as outfile:
+ for i, line in enumerate(current_file_data):
+ if vals[i] == "x":
+ this_val = -9
+ else:
+ this_val = vals[i]
+ outfile.write("0 " + line[1] + " " + line[2] + " " + line[3] + " " + line[4] + " " + str(this_val) + "\n")
def gen_pheno_txt_file_plink(this_trait, dataset, vals, pheno_filename = ''):
ped_sample_list = get_samples_from_ped_file(dataset)
@@ -71,7 +78,7 @@ def gen_pheno_txt_file_plink(this_trait, dataset, vals, pheno_filename = ''):
# get strain name from ped file in order
def get_samples_from_ped_file(dataset):
- ped_file= open("{}/{}.ped".format(PLINK_PATH, dataset.group.name),"r")
+ ped_file= open("{}{}.ped".format(flat_files('mapping'), dataset.group.name),"r")
line = ped_file.readline()
sample_list=[]
@@ -89,11 +96,10 @@ def get_samples_from_ped_file(dataset):
def parse_plink_output(output_filename, species):
plink_results={}
- threshold_p_value = 0.01
+ threshold_p_value = 1
result_fp = open("%s%s.qassoc"% (TMPDIR, output_filename), "rb")
- header_line = result_fp.readline()# read header line
line = result_fp.readline()
value_list = [] # initialize value list, this list will include snp, bp and pvalue info
@@ -141,11 +147,6 @@ def parse_plink_output(output_filename, species):
else:
line = result_fp.readline()
- #if p_value_list:
- # min_p_value = min(p_value_list)
- #else:
- # min_p_value = 0
-
return count, p_value_dict
######################################################
@@ -158,4 +159,4 @@ def build_line_list(line=None):
line_list = [item for item in line_list if item <>'']
line_list = map(string.strip, line_list)
- return line_list
+ return line_list \ No newline at end of file
diff --git a/wqflask/wqflask/marker_regression/qtlreaper_mapping.py b/wqflask/wqflask/marker_regression/qtlreaper_mapping.py
index 50228b5e..0c560582 100644
--- a/wqflask/wqflask/marker_regression/qtlreaper_mapping.py
+++ b/wqflask/wqflask/marker_regression/qtlreaper_mapping.py
@@ -1,17 +1,148 @@
-def gen_reaper_results(this_trait, dataset, samples_before, json_data, num_perm, bootCheck, num_bootstrap, do_control, control_marker, manhattan_plot):
- genotype = dataset.group.read_genotype_file()
+import os, math, string, random, json, re
+
+from base import webqtlConfig
+from base.trait import GeneralTrait
+from base.data_set import create_dataset
+from utility.tools import flat_files, REAPER_COMMAND, TEMPDIR
+
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
+def run_reaper(this_trait, this_dataset, samples, vals, json_data, num_perm, boot_check, num_bootstrap, do_control, control_marker, manhattan_plot, first_run=True, output_files=None):
+ """Generates p-values for each marker using qtlreaper"""
+
+ if first_run:
+ if this_dataset.group.genofile != None:
+ genofile_name = this_dataset.group.genofile[:-5]
+ else:
+ genofile_name = this_dataset.group.name
+
+ trait_filename = str(this_trait.name) + "_" + str(this_dataset.name) + "_pheno"
+ gen_pheno_txt_file(samples, vals, trait_filename)
+
+ output_filename = this_dataset.group.name + "_GWA_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
+ bootstrap_filename = None
+ permu_filename = None
+
+ opt_list = []
+ if boot_check and num_bootstrap > 0:
+ bootstrap_filename = this_dataset.group.name + "_BOOTSTRAP_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
+
+ opt_list.append("-b")
+ opt_list.append("--n_bootstrap " + str(num_bootstrap))
+ opt_list.append("--bootstrap_output " + webqtlConfig.GENERATED_IMAGE_DIR + bootstrap_filename + ".txt")
+ if num_perm > 0:
+ permu_filename = this_dataset.group.name + "_PERM_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
+ opt_list.append("-n " + str(num_perm))
+ opt_list.append("--permu_output " + webqtlConfig.GENERATED_IMAGE_DIR + permu_filename + ".txt")
+ if control_marker != "" and do_control == "true":
+ opt_list.append("-c " + control_marker)
+
+ reaper_command = REAPER_COMMAND + ' --geno {0}/{1}.geno --traits {2}/gn2/{3}.txt {4} -o {5}{6}.txt'.format(flat_files('genotype'),
+ genofile_name,
+ TEMPDIR,
+ trait_filename,
+ " ".join(opt_list),
+ webqtlConfig.GENERATED_IMAGE_DIR,
+ output_filename)
+
+ logger.debug("reaper_command:" + reaper_command)
+ os.system(reaper_command)
+ else:
+ output_filename, permu_filename, bootstrap_filename = output_files
+
+ marker_obs, permu_vals, bootstrap_vals = parse_reaper_output(output_filename, permu_filename, bootstrap_filename)
+
+ suggestive = 0
+ significant = 0
+ if len(permu_vals) > 0:
+ suggestive = permu_vals[int(num_perm*0.37-1)]
+ significant = permu_vals[int(num_perm*0.95-1)]
+
+ return marker_obs, permu_vals, suggestive, significant, bootstrap_vals, [output_filename, permu_filename, bootstrap_filename]
+
+def gen_pheno_txt_file(samples, vals, trait_filename):
+ """Generates phenotype file for GEMMA"""
+
+ with open("{}/gn2/{}.txt".format(TEMPDIR, trait_filename), "w") as outfile:
+ outfile.write("Trait\t")
+
+ filtered_sample_list = []
+ filtered_vals_list = []
+ for i, sample in enumerate(samples):
+ if vals[i] != "x":
+ filtered_sample_list.append(sample)
+ filtered_vals_list.append(vals[i])
+
+ samples_string = "\t".join(filtered_sample_list)
+ outfile.write(samples_string + "\n")
+ outfile.write("T1\t")
+ values_string = "\t".join(filtered_vals_list)
+ outfile.write(values_string)
+
+def parse_reaper_output(gwa_filename, permu_filename, bootstrap_filename):
+ included_markers = []
+ p_values = []
+ marker_obs = []
+
+ with open("{}{}.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, gwa_filename)) as output_file:
+ for line in output_file:
+ if line.startswith("ID\t"):
+ continue
+ else:
+ marker = {}
+ marker['name'] = line.split("\t")[1]
+ try:
+ marker['chr'] = int(line.split("\t")[2])
+ except:
+ marker['chr'] = line.split("\t")[2]
+ marker['cM'] = float(line.split("\t")[3])
+ if float(line.split("\t")[4]) > 1000:
+ marker['Mb'] = float(line.split("\t")[4])/1000000
+ else:
+ marker['Mb'] = float(line.split("\t")[4])
+ if float(line.split("\t")[7]) != 1:
+ marker['p_value'] = float(line.split("\t")[7])
+ marker['lrs_value'] = float(line.split("\t")[5])
+ marker['lod_score'] = marker['lrs_value'] / 4.61
+ marker['additive'] = float(line.split("\t")[6])
+ marker_obs.append(marker)
+
+ #ZS: Results have to be reordered because the new reaper returns results sorted alphabetically by chr for some reason, resulting in chr 1 being followed by 10, etc
+ sorted_indices = natural_sort(marker_obs)
+
+ permu_vals = []
+ if permu_filename:
+ with open("{}{}.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, permu_filename)) as permu_file:
+ for line in permu_file:
+ permu_vals.append(float(line))
+
+ bootstrap_vals = []
+ if bootstrap_filename:
+ with open("{}{}.txt".format(webqtlConfig.GENERATED_IMAGE_DIR, bootstrap_filename)) as bootstrap_file:
+ for line in bootstrap_file:
+ bootstrap_vals.append(int(line))
+
+ marker_obs = [marker_obs[i] for i in sorted_indices]
+ if len(bootstrap_vals) > 0:
+ bootstrap_vals = [bootstrap_vals[i] for i in sorted_indices]
+
+ return marker_obs, permu_vals, bootstrap_vals
+
+def run_original_reaper(this_trait, dataset, samples_before, trait_vals, json_data, num_perm, bootCheck, num_bootstrap, do_control, control_marker, manhattan_plot):
+ genotype = dataset.group.read_genotype_file(use_reaper=True)
if manhattan_plot != True:
genotype = genotype.addinterval()
- samples, values, variances, sample_aliases = this_trait.export_informative()
-
trimmed_samples = []
trimmed_values = []
- for i in range(0, len(samples)):
- if this_trait.data[samples[i]].name in samples_before:
- trimmed_samples.append(samples[i])
- trimmed_values.append(values[i])
+ for i in range(0, len(samples_before)):
+ try:
+ trimmed_values.append(float(trait_vals[i]))
+ trimmed_samples.append(str(samples_before[i]))
+ except:
+ pass
perm_output = []
bootstrap_results = []
@@ -23,7 +154,7 @@ def gen_reaper_results(this_trait, dataset, samples_before, json_data, num_perm,
perm_output = genotype.permutation(strains = trimmed_samples, trait = trimmed_values, nperm=num_perm)
suggestive = perm_output[int(num_perm*0.37-1)]
significant = perm_output[int(num_perm*0.95-1)]
- highly_significant = perm_output[int(num_perm*0.99-1)]
+ #highly_significant = perm_output[int(num_perm*0.99-1)] #ZS: Currently not used, but leaving it here just in case
json_data['suggestive'] = suggestive
json_data['significant'] = significant
@@ -89,3 +220,12 @@ def gen_reaper_results(this_trait, dataset, samples_before, json_data, num_perm,
"cM":reaper_locus.cM, "name":reaper_locus.name, "additive":qtl.additive, "dominance":qtl.dominance}
qtl_results.append(qtl)
return qtl_results, json_data, perm_output, suggestive, significant, bootstrap_results
+
+def natural_sort(marker_list):
+ """
+ Function to naturally sort numbers + strings, adopted from user Mark Byers here: https://stackoverflow.com/questions/4836710/does-python-have-a-built-in-function-for-string-natural-sort
+ Changed to return indices instead of values, though, since the same reordering needs to be applied to bootstrap results
+ """
+ convert = lambda text: int(text) if text.isdigit() else text.lower()
+ alphanum_key = lambda key: [ convert(c) for c in re.split('([0-9]+)', str(marker_list[key]['chr'])) ]
+ return sorted(range(len(marker_list)), key = alphanum_key) \ No newline at end of file
diff --git a/wqflask/wqflask/marker_regression/rqtl_mapping.py b/wqflask/wqflask/marker_regression/rqtl_mapping.py
index f3694f0b..aae8e602 100644
--- a/wqflask/wqflask/marker_regression/rqtl_mapping.py
+++ b/wqflask/wqflask/marker_regression/rqtl_mapping.py
@@ -1,59 +1,69 @@
import rpy2.robjects as ro
+import rpy2.robjects.numpy2ri as np2r
import numpy as np
from base.webqtlConfig import TMPDIR
+from base.trait import GeneralTrait
+from base.data_set import create_dataset
from utility import webqtlUtil
from utility.tools import locate, TEMPDIR
-def run_rqtl_geno(vals, dataset, method, model, permCheck, num_perm, do_control, control_marker, manhattan_plot, pair_scan):
- geno_to_rqtl_function(dataset)
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+def run_rqtl_geno(vals, samples, dataset, method, model, permCheck, num_perm, perm_strata_list, do_control, control_marker, manhattan_plot, pair_scan, cofactors):
## Get pointers to some common R functions
r_library = ro.r["library"] # Map the library function
r_c = ro.r["c"] # Map the c function
- r_sum = ro.r["sum"] # Map the sum function
plot = ro.r["plot"] # Map the plot function
- postscript = ro.r["postscript"] # Map the postscript function
png = ro.r["png"] # Map the png function
dev_off = ro.r["dev.off"] # Map the device off function
print(r_library("qtl")) # Load R/qtl
## Get pointers to some R/qtl functions
- scanone = ro.r["scanone"] # Map the scanone function
- scantwo = ro.r["scantwo"] # Map the scantwo function
- calc_genoprob = ro.r["calc.genoprob"] # Map the calc.genoprob function
- read_cross = ro.r["read.cross"] # Map the read.cross function
- write_cross = ro.r["write.cross"] # Map the write.cross function
- GENOtoCSVR = ro.r["GENOtoCSVR"] # Map the local GENOtoCSVR function
+ scanone = ro.r["scanone"] # Map the scanone function
+ scantwo = ro.r["scantwo"] # Map the scantwo function
+ calc_genoprob = ro.r["calc.genoprob"] # Map the calc.genoprob function
crossname = dataset.group.name
- genofilelocation = locate(crossname + ".geno", "genotype")
+ #try:
+ # generate_cross_from_rdata(dataset)
+ # read_cross_from_rdata = ro.r["generate_cross_from_rdata"] # Map the local read_cross_from_rdata function
+ # genofilelocation = locate(crossname + ".RData", "genotype/rdata")
+ # cross_object = read_cross_from_rdata(genofilelocation) # Map the local GENOtoCSVR function
+ #except:
+ generate_cross_from_geno(dataset)
+ GENOtoCSVR = ro.r["GENOtoCSVR"] # Map the local GENOtoCSVR function
crossfilelocation = TMPDIR + crossname + ".cross"
-
- #print("Conversion of geno to cross at location:", genofilelocation, " to ", crossfilelocation)
-
- cross_object = GENOtoCSVR(genofilelocation, crossfilelocation) # TODO: Add the SEX if that is available
+ genofilelocation = locate(dataset.group.genofile, "genotype")
+ cross_object = GENOtoCSVR(genofilelocation, crossfilelocation) # TODO: Add the SEX if that is available
if manhattan_plot:
cross_object = calc_genoprob(cross_object)
else:
cross_object = calc_genoprob(cross_object, step=1, stepwidth="max")
- cross_object = add_phenotype(cross_object, sanitize_rqtl_phenotype(vals)) # Add the phenotype
+ pheno_string = sanitize_rqtl_phenotype(vals)
- # for debug: write_cross(cross_object, "csvr", "test.csvr")
+ cross_object = add_phenotype(cross_object, pheno_string, "the_pheno") # Add the phenotype
# Scan for QTLs
- covar = create_covariates(control_marker, cross_object) # Create the additive covariate matrix
+ marker_covars = create_marker_covariates(control_marker, cross_object) # Create the additive covariate markers
+
+ if cofactors != "":
+ cross_object, trait_covars = add_cofactors(cross_object, dataset, cofactors, samples) # Create the covariates from selected traits
+ ro.r('all_covars <- cbind(marker_covars, trait_covars)')
+ else:
+ ro.r('all_covars <- marker_covars')
+
+ covars = ro.r['all_covars']
if pair_scan:
- if do_control == "true": # If sum(covar) > 0 we have a covariate matrix
- print("Using covariate"); result_data_frame = scantwo(cross_object, pheno = "the_pheno", addcovar = covar, model=model, method=method, n_cluster = 16)
+ if do_control == "true":
+ logger.info("Using covariate"); result_data_frame = scantwo(cross_object, pheno = "the_pheno", addcovar = covars, model=model, method=method, n_cluster = 16)
else:
- print("No covariates"); result_data_frame = scantwo(cross_object, pheno = "the_pheno", model=model, method=method, n_cluster = 16)
-
- #print("Pair scan results:", result_data_frame)
+ logger.info("No covariates"); result_data_frame = scantwo(cross_object, pheno = "the_pheno", model=model, method=method, n_cluster = 16)
pair_scan_filename = webqtlUtil.genRandStr("scantwo_") + ".png"
png(file=TEMPDIR+pair_scan_filename)
@@ -62,23 +72,40 @@ def run_rqtl_geno(vals, dataset, method, model, permCheck, num_perm, do_control,
return process_pair_scan_results(result_data_frame)
else:
- if do_control == "true":
- print("Using covariate"); result_data_frame = scanone(cross_object, pheno = "the_pheno", addcovar = covar, model=model, method=method)
+ if do_control == "true" or cofactors != "":
+ logger.info("Using covariate"); result_data_frame = scanone(cross_object, pheno = "the_pheno", addcovar = covars, model=model, method=method)
else:
- print("No covariates"); result_data_frame = scanone(cross_object, pheno = "the_pheno", model=model, method=method)
+ logger.info("No covariates"); result_data_frame = scanone(cross_object, pheno = "the_pheno", model=model, method=method)
if num_perm > 0 and permCheck == "ON": # Do permutation (if requested by user)
- if do_control == "true":
- perm_data_frame = scanone(cross_object, pheno_col = "the_pheno", addcovar = covar, n_perm = num_perm, model=model, method=method)
+ if len(perm_strata_list) > 0: #ZS: The strata list would only be populated if "Stratified" was checked on before mapping
+ cross_object, strata_ob = add_perm_strata(cross_object, perm_strata_list)
+ if do_control == "true" or cofactors != "":
+ perm_data_frame = scanone(cross_object, pheno_col = "the_pheno", addcovar = covars, n_perm = int(num_perm), perm_strata = strata_ob, model=model, method=method)
+ else:
+ perm_data_frame = scanone(cross_object, pheno_col = "the_pheno", n_perm = num_perm, perm_strata = strata_ob, model=model, method=method)
else:
- perm_data_frame = scanone(cross_object, pheno_col = "the_pheno", n_perm = num_perm, model=model, method=method)
+ if do_control == "true" or cofactors != "":
+ perm_data_frame = scanone(cross_object, pheno_col = "the_pheno", addcovar = covars, n_perm = int(num_perm), model=model, method=method)
+ else:
+ perm_data_frame = scanone(cross_object, pheno_col = "the_pheno", n_perm = num_perm, model=model, method=method)
perm_output, suggestive, significant = process_rqtl_perm_results(num_perm, perm_data_frame) # Functions that sets the thresholds for the webinterface
- return perm_output, suggestive, significant, process_rqtl_results(result_data_frame)
+ return perm_output, suggestive, significant, process_rqtl_results(result_data_frame, dataset.group.species)
else:
- return process_rqtl_results(result_data_frame)
+ return process_rqtl_results(result_data_frame, dataset.group.species)
+
+def generate_cross_from_rdata(dataset):
+ rdata_location = locate(dataset.group.name + ".RData", "genotype/rdata")
+ ro.r("""
+ generate_cross_from_rdata <- function(filename = '%s') {
+ load(file=filename)
+ cross = cunique
+ return(cross)
+ }
+ """ % (rdata_location))
-def geno_to_rqtl_function(dataset): # TODO: Need to figure out why some genofiles have the wrong format and don't convert properly
+def generate_cross_from_geno(dataset): # TODO: Need to figure out why some genofiles have the wrong format and don't convert properly
ro.r("""
trim <- function( x ) { gsub("(^[[:space:]]+|[[:space:]]+$)", "", x) }
@@ -92,8 +119,12 @@ def geno_to_rqtl_function(dataset): # TODO: Need to figure out why some g
header = readLines(genotypes, 40) # Assume a geno header is not longer than 40 lines
toskip = which(unlist(lapply(header, function(x){ length(grep("Chr\t", x)) })) == 1)-1 # Major hack to skip the geno headers
- genocodes <- c(getGenoCode(header, 'mat'), getGenoCode(header, 'het'), getGenoCode(header, 'pat')) # Get the genotype codes
type <- getGenoCode(header, 'type')
+ if(type == '4-way'){
+ genocodes <- c('1','2','3','4')
+ } else {
+ genocodes <- c(getGenoCode(header, 'mat'), getGenoCode(header, 'het'), getGenoCode(header, 'pat')) # Get the genotype codes
+ }
genodata <- read.csv(genotypes, sep='\t', skip=toskip, header=TRUE, na.strings=getGenoCode(header,'unk'), colClasses='character', comment.char = '#')
cat('Genodata:', toskip, " ", dim(genodata), genocodes, '\n')
if(is.null(phenotype)) phenotype <- runif((ncol(genodata)-4)) # If there isn't a phenotype, generate a random one
@@ -107,26 +138,21 @@ def geno_to_rqtl_function(dataset): # TODO: Need to figure out why some g
if(type == 'riset') cross <- convert2riself(cross) # If its a RIL, convert to a RIL in R/qtl
return(cross)
}
- """ % (dataset.group.name + ".geno"))
+ """ % (dataset.group.genofile))
-def add_phenotype(cross, pheno_as_string):
- ro.globalenv["the_cross"] = cross
- ro.r('the_cross$pheno <- cbind(pull.pheno(the_cross), the_pheno = '+ pheno_as_string +')')
- return ro.r["the_cross"]
+def add_perm_strata(cross, perm_strata):
+ col_string = 'c("the_strata")'
+ perm_strata_string = "c("
+ for item in perm_strata:
+ perm_strata_string += str(item) + ","
-def create_covariates(control_marker, cross):
- ro.globalenv["the_cross"] = cross
- ro.r('genotypes <- pull.geno(the_cross)') # Get the genotype matrix
- userinputS = control_marker.replace(" ", "").split(",") # TODO: sanitize user input, Never Ever trust a user
- covariate_names = ', '.join('"{0}"'.format(w) for w in userinputS)
- #print("Marker names of selected covariates:", covariate_names)
- ro.r('covnames <- c(' + covariate_names + ')')
- ro.r('covInGeno <- which(covnames %in% colnames(genotypes))')
- ro.r('covnames <- covnames[covInGeno]')
- ro.r("cat('covnames (purged): ', covnames,'\n')")
- ro.r('covariates <- genotypes[,covnames]') # Get the covariate matrix by using the marker name as index to the genotype file
- #print("R/qtl matrix of covariates:", ro.r["covariates"])
- return ro.r["covariates"]
+ perm_strata_string = perm_strata_string[:-1] + ")"
+
+ cross = add_phenotype(cross, perm_strata_string, "the_strata")
+
+ strata_ob = pull_var("perm_strata", cross, col_string)
+
+ return cross, strata_ob
def sanitize_rqtl_phenotype(vals):
pheno_as_string = "c("
@@ -142,14 +168,85 @@ def sanitize_rqtl_phenotype(vals):
else:
pheno_as_string += str(val)
pheno_as_string += ")"
+
return pheno_as_string
+def add_phenotype(cross, pheno_as_string, col_name):
+ ro.globalenv["the_cross"] = cross
+ ro.r('the_cross$pheno <- cbind(pull.pheno(the_cross), ' + col_name + ' = '+ pheno_as_string +')')
+ return ro.r["the_cross"]
+
+def pull_var(var_name, cross, var_string):
+ ro.globalenv["the_cross"] = cross
+ ro.r(var_name +' <- pull.pheno(the_cross, ' + var_string + ')')
+
+ return ro.r[var_name]
+
+def add_cofactors(cross, this_dataset, covariates, samples):
+ ro.numpy2ri.activate()
+
+ covariate_list = covariates.split(",")
+ covar_name_string = "c("
+ for i, covariate in enumerate(covariate_list):
+ this_covar_data = []
+ covar_as_string = "c("
+ trait_name = covariate.split(":")[0]
+ dataset_ob = create_dataset(covariate.split(":")[1])
+ trait_ob = GeneralTrait(dataset=dataset_ob,
+ name=trait_name,
+ cellid=None)
+
+ this_dataset.group.get_samplelist()
+ trait_samples = this_dataset.group.samplelist
+ trait_sample_data = trait_ob.data
+ for index, sample in enumerate(trait_samples):
+ if sample in samples:
+ if sample in trait_sample_data:
+ sample_value = trait_sample_data[sample].value
+ this_covar_data.append(sample_value)
+ else:
+ this_covar_data.append("NA")
+
+ for j, item in enumerate(this_covar_data):
+ if j < (len(this_covar_data) - 1):
+ covar_as_string += str(item) + ","
+ else:
+ covar_as_string += str(item)
+
+ covar_as_string += ")"
+
+ col_name = "covar_" + str(i)
+ cross = add_phenotype(cross, covar_as_string, col_name)
+
+ if i < (len(covariate_list) - 1):
+ covar_name_string += '"' + col_name + '", '
+ else:
+ covar_name_string += '"' + col_name + '"'
+
+ covar_name_string += ")"
+
+ covars_ob = pull_var("trait_covars", cross, covar_name_string)
+
+ return cross, covars_ob
+
+def create_marker_covariates(control_marker, cross):
+ ro.globalenv["the_cross"] = cross
+ ro.r('genotypes <- pull.geno(the_cross)') # Get the genotype matrix
+ userinputS = control_marker.replace(" ", "").split(",") # TODO: sanitize user input, Never Ever trust a user
+ covariate_names = ', '.join('"{0}"'.format(w) for w in userinputS)
+ ro.r('covnames <- c(' + covariate_names + ')')
+ ro.r('covInGeno <- which(covnames %in% colnames(genotypes))')
+ ro.r('covnames <- covnames[covInGeno]')
+ ro.r("cat('covnames (purged): ', covnames,'\n')")
+ ro.r('marker_covars <- genotypes[,covnames]') # Get the covariate matrix by using the marker name as index to the genotype file
+
+ return ro.r["marker_covars"]
+
def process_pair_scan_results(result):
pair_scan_results = []
result = result[1]
output = [tuple([result[j][i] for j in range(result.ncol)]) for i in range(result.nrow)]
- #print("R/qtl scantwo output:", output)
for i, line in enumerate(result.iter_row()):
marker = {}
@@ -173,19 +270,20 @@ def process_rqtl_perm_results(num_perm, results):
return perm_output, suggestive, significant
-def process_rqtl_results(result): # TODO: how to make this a one liner and not copy the stuff in a loop
+def process_rqtl_results(result, species_name): # TODO: how to make this a one liner and not copy the stuff in a loop
qtl_results = []
-
output = [tuple([result[j][i] for j in range(result.ncol)]) for i in range(result.nrow)]
- #print("R/qtl scanone output:", output)
for i, line in enumerate(result.iter_row()):
marker = {}
marker['name'] = result.rownames[i]
- marker['chr'] = output[i][0]
+ if species_name == "mouse" and output[i][0] == 20: #ZS: This is awkward, but I'm not sure how to change the 20s to Xs in the RData file
+ marker['chr'] = "X"
+ else:
+ marker['chr'] = output[i][0]
+ marker['cM'] = output[i][1]
marker['Mb'] = output[i][1]
marker['lod_score'] = output[i][2]
qtl_results.append(marker)
- return qtl_results
-
+ return qtl_results \ No newline at end of file
diff --git a/wqflask/wqflask/marker_regression/run_mapping.py b/wqflask/wqflask/marker_regression/run_mapping.py
new file mode 100644
index 00000000..e191902c
--- /dev/null
+++ b/wqflask/wqflask/marker_regression/run_mapping.py
@@ -0,0 +1,700 @@
+from __future__ import absolute_import, print_function, division
+
+from base.trait import GeneralTrait
+from base import data_set #import create_dataset
+
+from pprint import pformat as pf
+
+import string
+import math
+from decimal import Decimal
+import random
+import sys
+import datetime
+import os
+import collections
+import uuid
+
+import rpy2.robjects as ro
+import numpy as np
+
+import cPickle as pickle
+import itertools
+
+import simplejson as json
+
+from redis import Redis
+Redis = Redis()
+
+from flask import Flask, g
+
+from base.trait import GeneralTrait
+from base import data_set
+from base import species
+from base import webqtlConfig
+from utility import webqtlUtil
+from utility import helper_functions
+from utility import Plot, Bunch
+from utility import temp_data
+from utility.benchmark import Bench
+from wqflask.marker_regression import gemma_mapping, rqtl_mapping, qtlreaper_mapping, plink_mapping
+from wqflask.show_trait.SampleList import SampleList
+
+from utility.tools import locate, locate_ignore_error, GEMMA_COMMAND, PLINK_COMMAND, TEMPDIR
+from utility.external import shell
+from base.webqtlConfig import TMPDIR, GENERATED_TEXT_DIR
+
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
+class RunMapping(object):
+
+ def __init__(self, start_vars, temp_uuid):
+ helper_functions.get_species_dataset_trait(self, start_vars)
+
+ self.temp_uuid = temp_uuid #needed to pass temp_uuid to gn1 mapping code (marker_regression_gn1.py)
+
+ #ZS: Needed to zoom in or remap temp traits like PCA traits
+ if "temp_trait" in start_vars and start_vars['temp_trait'] != "False":
+ self.temp_trait = "True"
+ self.group = self.dataset.group.name
+
+ self.json_data = {}
+ self.json_data['lodnames'] = ['lod.hk']
+
+ #ZS: Sometimes a group may have a genofile that only includes a subset of samples
+ genofile_samplelist = []
+ if 'genofile' in start_vars:
+ if start_vars['genofile'] != "":
+ self.genofile_string = start_vars['genofile']
+ self.dataset.group.genofile = self.genofile_string.split(":")[0]
+ genofile_samplelist = get_genofile_samplelist(self.dataset)
+
+ all_samples_ordered = self.dataset.group.all_samples_ordered()
+
+ self.vals = []
+ if 'samples' in start_vars:
+ self.samples = start_vars['samples'].split(",")
+ if (len(genofile_samplelist) != 0):
+ for sample in genofile_samplelist:
+ if sample in self.samples:
+ value = start_vars.get('value:' + sample)
+ if value:
+ self.vals.append(value)
+ else:
+ self.vals.append("x")
+ else:
+ for sample in self.samples:
+ value = start_vars.get('value:' + sample)
+ if value:
+ self.vals.append(value)
+ else:
+ self.samples = []
+ if (len(genofile_samplelist) != 0):
+ for sample in genofile_samplelist:
+ if sample in self.dataset.group.samplelist:
+ in_trait_data = False
+ for item in self.this_trait.data:
+ if self.this_trait.data[item].name == sample:
+ value = start_vars['value:' + self.this_trait.data[item].name]
+ self.samples.append(self.this_trait.data[item].name)
+ self.vals.append(value)
+ in_trait_data = True
+ break
+ if not in_trait_data:
+ value = start_vars.get('value:' + sample)
+ if value:
+ self.samples.append(sample)
+ self.vals.append(value)
+ else:
+ self.vals.append("x")
+ else:
+ for sample in self.dataset.group.samplelist: # sample is actually the name of an individual
+ in_trait_data = False
+ for item in self.this_trait.data:
+ if self.this_trait.data[item].name == sample:
+ value = start_vars['value:' + self.this_trait.data[item].name]
+ self.samples.append(self.this_trait.data[item].name)
+ self.vals.append(value)
+ in_trait_data = True
+ break
+ if not in_trait_data:
+ value = start_vars.get('value:' + sample)
+ if value:
+ self.samples.append(sample)
+ self.vals.append(value)
+
+ self.num_vals = start_vars['num_vals']
+
+ #ZS: Check if genotypes exist in the DB in order to create links for markers
+
+ self.geno_db_exists = geno_db_exists(self.dataset)
+
+ self.mapping_method = start_vars['method']
+ if "results_path" in start_vars:
+ self.mapping_results_path = start_vars['results_path']
+ else:
+ mapping_results_filename = self.dataset.group.name + "_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
+ self.mapping_results_path = "{}{}.csv".format(webqtlConfig.GENERATED_IMAGE_DIR, mapping_results_filename)
+
+ if start_vars['manhattan_plot'] == "True":
+ self.manhattan_plot = True
+ else:
+ self.manhattan_plot = False
+
+ self.maf = start_vars['maf'] # Minor allele frequency
+ if "use_loco" in start_vars:
+ self.use_loco = start_vars['use_loco']
+ else:
+ self.use_loco = None
+ self.suggestive = ""
+ self.significant = ""
+ self.pair_scan = False # Initializing this since it is checked in views to determine which template to use
+ self.score_type = "LRS" #ZS: LRS or LOD
+ self.mapping_scale = "physic"
+ self.num_perm = 0
+ self.perm_output = []
+ self.bootstrap_results = []
+ self.covariates = start_vars['covariates'] if "covariates" in start_vars else None
+
+ #ZS: This is passed to GN1 code for single chr mapping
+ self.selected_chr = -1
+ if "selected_chr" in start_vars:
+ if int(start_vars['selected_chr']) != -1: #ZS: Needs to be -1 if showing full map; there's probably a better way to fix this
+ self.selected_chr = int(start_vars['selected_chr']) + 1
+ else:
+ self.selected_chr = int(start_vars['selected_chr'])
+ if "startMb" in start_vars:
+ self.startMb = start_vars['startMb']
+ if "endMb" in start_vars:
+ self.endMb = start_vars['endMb']
+ if "graphWidth" in start_vars:
+ self.graphWidth = start_vars['graphWidth']
+ if "lrsMax" in start_vars:
+ self.lrsMax = start_vars['lrsMax']
+ if "haplotypeAnalystCheck" in start_vars:
+ self.haplotypeAnalystCheck = start_vars['haplotypeAnalystCheck']
+ if "startMb" in start_vars: #ZS: This is to ensure showGenes, Legend, etc are checked the first time you open the mapping page, since startMb will only not be set during the first load
+ if "permCheck" in start_vars:
+ self.permCheck = "ON"
+ else:
+ self.permCheck = False
+ self.num_perm = int(start_vars['num_perm'])
+
+ self.LRSCheck = start_vars['LRSCheck']
+
+ if "showSNP" in start_vars:
+ self.showSNP = start_vars['showSNP']
+ else:
+ self.showSNP = False
+
+ if "showGenes" in start_vars:
+ self.showGenes = start_vars['showGenes']
+ else:
+ self.showGenes = False
+
+ if "viewLegend" in start_vars:
+ self.viewLegend = start_vars['viewLegend']
+ else:
+ self.viewLegend = False
+ else:
+ try:
+ if int(start_vars['num_perm']) > 0:
+ self.num_perm = int(start_vars['num_perm'])
+ except:
+ self.num_perm = 0
+
+ if self.num_perm > 0:
+ self.permCheck = "ON"
+ else:
+ self.permCheck = False
+ self.showSNP = "ON"
+ self.showGenes = "ON"
+ self.viewLegend = "ON"
+
+ #self.dataset.group.get_markers()
+ if self.mapping_method == "gemma":
+ self.first_run = True
+ self.output_files = None
+ if 'output_files' in start_vars:
+ self.output_files = start_vars['output_files']
+ if 'first_run' in start_vars: #ZS: check if first run so existing result files can be used if it isn't (for example zooming on a chromosome, etc)
+ self.first_run = False
+ self.score_type = "-log(p)"
+ self.manhattan_plot = True
+ with Bench("Running GEMMA"):
+ if self.use_loco == "True":
+ marker_obs, self.output_files = gemma_mapping.run_gemma(self.this_trait, self.dataset, self.samples, self.vals, self.covariates, self.use_loco, self.maf, self.first_run, self.output_files)
+ else:
+ marker_obs, self.output_files = gemma_mapping.run_gemma(self.this_trait, self.dataset, self.samples, self.vals, self.covariates, self.use_loco, self.maf, self.first_run, self.output_files)
+ results = marker_obs
+ elif self.mapping_method == "rqtl_plink":
+ results = self.run_rqtl_plink()
+ elif self.mapping_method == "rqtl_geno":
+ perm_strata = []
+ if "perm_strata" in start_vars and "categorical_vars" in start_vars:
+ self.categorical_vars = start_vars["categorical_vars"].split(",")
+ if len(self.categorical_vars) and start_vars["perm_strata"] == "True":
+ primary_samples = SampleList(dataset = self.dataset,
+ sample_names = self.samples,
+ this_trait = self.this_trait)
+
+ perm_strata = get_perm_strata(self.this_trait, primary_samples, self.categorical_vars, self.samples)
+ self.score_type = "LOD"
+ #self.mapping_scale = "morgan"
+ self.control_marker = start_vars['control_marker']
+ self.do_control = start_vars['do_control']
+ if 'mapmethod_rqtl_geno' in start_vars:
+ self.method = start_vars['mapmethod_rqtl_geno']
+ else:
+ self.method = "em"
+ self.model = start_vars['mapmodel_rqtl_geno']
+ #if start_vars['pair_scan'] == "true":
+ # self.pair_scan = True
+ if self.permCheck and self.num_perm > 0:
+ self.perm_output, self.suggestive, self.significant, results = rqtl_mapping.run_rqtl_geno(self.vals, self.samples, self.dataset, self.method, self.model, self.permCheck, self.num_perm, perm_strata, self.do_control, self.control_marker, self.manhattan_plot, self.pair_scan, self.covariates)
+ else:
+ results = rqtl_mapping.run_rqtl_geno(self.vals, self.samples, self.dataset, self.method, self.model, self.permCheck, self.num_perm, perm_strata, self.do_control, self.control_marker, self.manhattan_plot, self.pair_scan, self.covariates)
+ elif self.mapping_method == "reaper":
+ if "startMb" in start_vars: #ZS: Check if first time page loaded, so it can default to ON
+ if "additiveCheck" in start_vars:
+ self.additiveCheck = start_vars['additiveCheck']
+ else:
+ self.additiveCheck = False
+
+ if "bootCheck" in start_vars:
+ self.bootCheck = "ON"
+ else:
+ self.bootCheck = False
+ self.num_bootstrap = int(start_vars['num_bootstrap'])
+ else:
+ self.additiveCheck = "ON"
+ try:
+ if int(start_vars['num_bootstrap']) > 0:
+ self.bootCheck = "ON"
+ self.num_bootstrap = int(start_vars['num_bootstrap'])
+ else:
+ self.bootCheck = False
+ self.num_bootstrap = 0
+ except:
+ self.bootCheck = False
+ self.num_bootstrap = 0
+
+ self.reaper_version = start_vars['reaper_version']
+
+ self.control_marker = start_vars['control_marker']
+ self.do_control = start_vars['do_control']
+ logger.info("Running qtlreaper")
+
+ if self.reaper_version == "new":
+ self.first_run = True
+ self.output_files = None
+ if 'first_run' in start_vars: #ZS: check if first run so existing result files can be used if it isn't (for example zooming on a chromosome, etc)
+ self.first_run = False
+ if 'output_files' in start_vars:
+ self.output_files = start_vars['output_files'].split(",")
+
+ results, self.perm_output, self.suggestive, self.significant, self.bootstrap_results, self.output_files = qtlreaper_mapping.run_reaper(self.this_trait,
+ self.dataset,
+ self.samples,
+ self.vals,
+ self.json_data,
+ self.num_perm,
+ self.bootCheck,
+ self.num_bootstrap,
+ self.do_control,
+ self.control_marker,
+ self.manhattan_plot,
+ self.first_run,
+ self.output_files)
+ else:
+ results, self.json_data, self.perm_output, self.suggestive, self.significant, self.bootstrap_results = qtlreaper_mapping.run_original_reaper(self.this_trait,
+ self.dataset,
+ self.samples,
+ self.vals,
+ self.json_data,
+ self.num_perm,
+ self.bootCheck,
+ self.num_bootstrap,
+ self.do_control,
+ self.control_marker,
+ self.manhattan_plot)
+ elif self.mapping_method == "plink":
+ self.score_type = "-log(p)"
+ self.manhattan_plot = True
+ results = plink_mapping.run_plink(self.this_trait, self.dataset, self.species, self.vals, self.maf)
+ #results = self.run_plink()
+ else:
+ logger.debug("RUNNING NOTHING")
+
+ self.no_results = False
+ if len(results) == 0:
+ self.no_results = True
+ else:
+ if self.pair_scan == True:
+ self.qtl_results = []
+ highest_chr = 1 #This is needed in order to convert the highest chr to X/Y
+ for marker in results:
+ if marker['chr1'] > 0 or marker['chr1'] == "X" or marker['chr1'] == "X/Y":
+ if marker['chr1'] > highest_chr or marker['chr1'] == "X" or marker['chr1'] == "X/Y":
+ highest_chr = marker['chr1']
+ if 'lod_score' in marker.keys():
+ self.qtl_results.append(marker)
+
+ self.trimmed_markers = results
+
+ for qtl in enumerate(self.qtl_results):
+ self.json_data['chr1'].append(str(qtl['chr1']))
+ self.json_data['chr2'].append(str(qtl['chr2']))
+ self.json_data['Mb'].append(qtl['Mb'])
+ self.json_data['markernames'].append(qtl['name'])
+
+ self.js_data = dict(
+ json_data = self.json_data,
+ this_trait = self.this_trait.name,
+ data_set = self.dataset.name,
+ maf = self.maf,
+ manhattan_plot = self.manhattan_plot,
+ mapping_scale = self.mapping_scale,
+ qtl_results = self.qtl_results
+ )
+
+ else:
+ self.qtl_results = []
+ self.results_for_browser = []
+ self.annotations_for_browser = []
+ highest_chr = 1 #This is needed in order to convert the highest chr to X/Y
+ for marker in results:
+ browser_marker = dict(
+ chr = str(marker['chr']),
+ rs = marker['name'],
+ ps = marker['Mb']*1000000,
+ url = "/show_trait?trait_id=" + marker['name'] + "&dataset=" + self.dataset.group.name + "Geno"
+ )
+
+ if self.geno_db_exists == "True":
+ annot_marker = dict(
+ name = str(marker['name']),
+ chr = str(marker['chr']),
+ rs = marker['name'],
+ pos = marker['Mb']*1000000,
+ url = "/show_trait?trait_id=" + marker['name'] + "&dataset=" + self.dataset.group.name + "Geno"
+ )
+ else:
+ annot_marker = dict(
+ name = str(marker['name']),
+ chr = str(marker['chr']),
+ rs = marker['name'],
+ pos = marker['Mb']*1000000
+ )
+ #if 'p_value' in marker:
+ # logger.debug("P EXISTS:", marker['p_value'])
+ #else:
+ if 'lrs_value' in marker and marker['lrs_value'] > 0:
+ browser_marker['p_wald'] = 10**-(marker['lrs_value']/4.61)
+ elif 'lod_score' in marker and marker['lod_score'] > 0:
+ browser_marker['p_wald'] = 10**-(marker['lod_score'])
+ else:
+ browser_marker['p_wald'] = 0
+
+ self.results_for_browser.append(browser_marker)
+ self.annotations_for_browser.append(annot_marker)
+ if marker['chr'] > 0 or marker['chr'] == "X" or marker['chr'] == "X/Y":
+ if marker['chr'] > highest_chr or marker['chr'] == "X" or marker['chr'] == "X/Y":
+ highest_chr = marker['chr']
+ if ('lod_score' in marker.keys()) or ('lrs_value' in marker.keys()):
+ self.qtl_results.append(marker)
+
+ with Bench("Exporting Results"):
+ export_mapping_results(self.dataset, self.this_trait, self.qtl_results, self.mapping_results_path, self.mapping_scale, self.score_type)
+
+ with Bench("Trimming Markers for Figure"):
+ if len(self.qtl_results) > 30000:
+ self.qtl_results = trim_markers_for_figure(self.qtl_results)
+ self.results_for_browser = trim_markers_for_figure(self.results_for_browser)
+ filtered_annotations = []
+ for marker in self.results_for_browser:
+ for annot_marker in self.annotations_for_browser:
+ if annot_marker['rs'] == marker['rs']:
+ filtered_annotations.append(annot_marker)
+ break
+ self.annotations_for_browser = filtered_annotations
+ browser_files = write_input_for_browser(self.dataset, self.results_for_browser, self.annotations_for_browser)
+ else:
+ browser_files = write_input_for_browser(self.dataset, self.results_for_browser, self.annotations_for_browser)
+
+ with Bench("Trimming Markers for Table"):
+ self.trimmed_markers = trim_markers_for_table(results)
+
+ chr_lengths = get_chr_lengths(self.mapping_scale, self.dataset, self.qtl_results)
+
+ #ZS: For zooming into genome browser, need to pass chromosome name instead of number
+ if self.dataset.group.species == "mouse":
+ if self.selected_chr == 20:
+ this_chr = "X"
+ else:
+ this_chr = str(self.selected_chr)
+ elif self.dataset.group.species == "rat":
+ if self.selected_chr == 21:
+ this_chr = "X"
+ else:
+ this_chr = str(self.selected_chr)
+ else:
+ if self.selected_chr == 22:
+ this_chr = "X"
+ elif self.selected_chr == 23:
+ this_chr = "Y"
+ else:
+ this_chr = str(self.selected_chr)
+
+ if self.mapping_method != "gemma":
+ if self.score_type == "LRS":
+ significant_for_browser = self.significant / 4.61
+ else:
+ significant_for_browser = self.significant
+
+ self.js_data = dict(
+ #result_score_type = self.score_type,
+ #this_trait = self.this_trait.name,
+ #data_set = self.dataset.name,
+ #maf = self.maf,
+ #manhattan_plot = self.manhattan_plot,
+ #mapping_scale = self.mapping_scale,
+ #chromosomes = chromosome_mb_lengths,
+ #qtl_results = self.qtl_results,
+ chr_lengths = chr_lengths,
+ num_perm = self.num_perm,
+ perm_results = self.perm_output,
+ significant = significant_for_browser,
+ browser_files = browser_files,
+ selected_chr = this_chr
+ )
+ else:
+ self.js_data = dict(
+ chr_lengths = chr_lengths,
+ browser_files = browser_files,
+ selected_chr = this_chr
+ )
+
+ def run_rqtl_plink(self):
+ # os.chdir("") never do this inside a webserver!!
+
+ output_filename = webqtlUtil.genRandStr("%s_%s_"%(self.dataset.group.name, self.this_trait.name))
+
+ plink_mapping.gen_pheno_txt_file_plink(self.this_trait, self.dataset, self.vals, pheno_filename = output_filename)
+
+ rqtl_command = './plink --noweb --ped %s.ped --no-fid --no-parents --no-sex --no-pheno --map %s.map --pheno %s/%s.txt --pheno-name %s --maf %s --missing-phenotype -9999 --out %s%s --assoc ' % (self.dataset.group.name, self.dataset.group.name, TMPDIR, plink_output_filename, self.this_trait.name, self.maf, TMPDIR, plink_output_filename)
+
+ os.system(rqtl_command)
+
+ count, p_values = self.parse_rqtl_output(plink_output_filename)
+
+ def identify_empty_samples(self):
+ no_val_samples = []
+ for sample_count, val in enumerate(self.vals):
+ if val == "x":
+ no_val_samples.append(sample_count)
+ return no_val_samples
+
+ def trim_genotypes(self, genotype_data, no_value_samples):
+ trimmed_genotype_data = []
+ for marker in genotype_data:
+ new_genotypes = []
+ for item_count, genotype in enumerate(marker):
+ if item_count in no_value_samples:
+ continue
+ try:
+ genotype = float(genotype)
+ except ValueError:
+ genotype = np.nan
+ pass
+ new_genotypes.append(genotype)
+ trimmed_genotype_data.append(new_genotypes)
+ return trimmed_genotype_data
+
+def export_mapping_results(dataset, trait, markers, results_path, mapping_scale, score_type):
+ with open(results_path, "w+") as output_file:
+ output_file.write("Time/Date: " + datetime.datetime.now().strftime("%x / %X") + "\n")
+ output_file.write("Population: " + dataset.group.species.title() + " " + dataset.group.name + "\n")
+ output_file.write("Data Set: " + dataset.fullname + "\n")
+ if dataset.type == "ProbeSet":
+ output_file.write("Gene Symbol: " + trait.symbol + "\n")
+ output_file.write("Location: " + str(trait.chr) + " @ " + str(trait.mb) + " Mb\n")
+ output_file.write("\n")
+ output_file.write("Name,Chr,")
+ if score_type.lower() == "-log(p)":
+ score_type = "'-log(p)"
+ if mapping_scale == "physic":
+ output_file.write("Mb," + score_type)
+ else:
+ output_file.write("Cm," + score_type)
+ if "additive" in markers[0].keys():
+ output_file.write(",Additive")
+ if "dominance" in markers[0].keys():
+ output_file.write(",Dominance")
+ output_file.write("\n")
+ for i, marker in enumerate(markers):
+ output_file.write(marker['name'] + "," + str(marker['chr']) + "," + str(marker['Mb']) + ",")
+ if "lod_score" in marker.keys():
+ output_file.write(str(marker['lod_score']))
+ else:
+ output_file.write(str(marker['lrs_value']))
+ if "additive" in marker.keys():
+ output_file.write("," + str(marker['additive']))
+ if "dominance" in marker.keys():
+ output_file.write("," + str(marker['dominance']))
+ if i < (len(markers) - 1):
+ output_file.write("\n")
+
+def trim_markers_for_figure(markers):
+ if 'p_wald' in markers[0].keys():
+ score_type = 'p_wald'
+ elif 'lod_score' in markers[0].keys():
+ score_type = 'lod_score'
+ else:
+ score_type = 'lrs_value'
+
+ filtered_markers = []
+ low_counter = 0
+ med_counter = 0
+ high_counter = 0
+ for marker in markers:
+ if score_type == 'p_wald':
+ if marker[score_type] > 0.1:
+ if low_counter % 20 == 0:
+ filtered_markers.append(marker)
+ low_counter += 1
+ elif 0.1 >= marker[score_type] > 0.01:
+ if med_counter % 10 == 0:
+ filtered_markers.append(marker)
+ med_counter += 1
+ elif 0.01 >= marker[score_type] > 0.001:
+ if high_counter % 2 == 0:
+ filtered_markers.append(marker)
+ high_counter += 1
+ else:
+ filtered_markers.append(marker)
+ elif score_type == 'lod_score':
+ if marker[score_type] < 1:
+ if low_counter % 20 == 0:
+ filtered_markers.append(marker)
+ low_counter += 1
+ elif 1 <= marker[score_type] < 2:
+ if med_counter % 10 == 0:
+ filtered_markers.append(marker)
+ med_counter += 1
+ elif 2 <= marker[score_type] <= 3:
+ if high_counter % 2 == 0:
+ filtered_markers.append(marker)
+ high_counter += 1
+ else:
+ filtered_markers.append(marker)
+ else:
+ if marker[score_type] < 4.61:
+ if low_counter % 20 == 0:
+ filtered_markers.append(marker)
+ low_counter += 1
+ elif 4.61 <= marker[score_type] < (2*4.61):
+ if med_counter % 10 == 0:
+ filtered_markers.append(marker)
+ med_counter += 1
+ elif (2*4.61) <= marker[score_type] <= (3*4.61):
+ if high_counter % 2 == 0:
+ filtered_markers.append(marker)
+ high_counter += 1
+ else:
+ filtered_markers.append(marker)
+ return filtered_markers
+
+def trim_markers_for_table(markers):
+ if 'lod_score' in markers[0].keys():
+ sorted_markers = sorted(markers, key=lambda k: k['lod_score'], reverse=True)
+ else:
+ sorted_markers = sorted(markers, key=lambda k: k['lrs_value'], reverse=True)
+
+ #ZS: So we end up with a list of just 2000 markers
+ if len(sorted_markers) >= 2000:
+ trimmed_sorted_markers = sorted_markers[:2000]
+ return trimmed_sorted_markers
+ else:
+ return sorted_markers
+
+def write_input_for_browser(this_dataset, gwas_results, annotations):
+ file_base = this_dataset.group.name + "_" + ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(6))
+ gwas_filename = file_base + "_GWAS"
+ annot_filename = file_base + "_ANNOT"
+ gwas_path = "{}/gn2/".format(TEMPDIR) + gwas_filename
+ annot_path = "{}/gn2/".format(TEMPDIR) + annot_filename
+
+ with open(gwas_path + ".json", "w") as gwas_file, open(annot_path + ".json", "w") as annot_file:
+ gwas_file.write(json.dumps(gwas_results))
+ annot_file.write(json.dumps(annotations))
+
+ return [gwas_filename, annot_filename]
+
+def geno_db_exists(this_dataset):
+ geno_db_name = this_dataset.group.name + "Geno"
+ try:
+ geno_db = data_set.create_dataset(dataset_name=geno_db_name, get_samplelist=False)
+ return "True"
+ except:
+ return "False"
+
+def get_chr_lengths(mapping_scale, dataset, qtl_results):
+ chr_lengths = []
+ if mapping_scale == "physic":
+ for i, the_chr in enumerate(dataset.species.chromosomes.chromosomes):
+ this_chr = {
+ "chr": dataset.species.chromosomes.chromosomes[the_chr].name,
+ "size": str(dataset.species.chromosomes.chromosomes[the_chr].length)
+ }
+ chr_lengths.append(this_chr)
+ else:
+ this_chr = 1
+ highest_pos = 0
+ for i, result in enumerate(qtl_results):
+ chr_as_num = 0
+ try:
+ chr_as_num = int(result['chr'])
+ except:
+ chr_as_num = 20
+ if chr_as_num > this_chr or i == (len(qtl_results) - 1):
+ chr_lengths.append({ "chr": str(this_chr), "size": str(highest_pos)})
+ this_chr = chr_as_num
+ highest_pos = 0
+ else:
+ if float(result['Mb']) > highest_pos:
+ highest_pos = float(result['Mb'])
+
+ return chr_lengths
+
+def get_genofile_samplelist(dataset):
+ genofile_samplelist = []
+
+ genofile_json = dataset.group.get_genofiles()
+ for genofile in genofile_json:
+ if genofile['location'] == dataset.group.genofile and 'sample_list' in genofile:
+ genofile_samplelist = genofile['sample_list']
+
+ return genofile_samplelist
+
+def get_perm_strata(this_trait, sample_list, categorical_vars, used_samples):
+ perm_strata_strings = []
+ for sample in used_samples:
+ if sample in sample_list.sample_attribute_values.keys():
+ combined_string = ""
+ for var in categorical_vars:
+ if var in sample_list.sample_attribute_values[sample].keys():
+ combined_string += str(sample_list.sample_attribute_values[sample][var])
+ else:
+ combined_string += "NA"
+ else:
+ combined_string = "NA"
+
+ perm_strata_strings.append(combined_string)
+
+ d = dict([(y,x+1) for x,y in enumerate(sorted(set(perm_strata_strings)))])
+ list_to_numbers = [d[x] for x in perm_strata_strings]
+ perm_strata = list_to_numbers
+
+ return perm_strata \ No newline at end of file
diff --git a/wqflask/wqflask/model.py b/wqflask/wqflask/model.py
index 5321e420..38117a8e 100644
--- a/wqflask/wqflask/model.py
+++ b/wqflask/wqflask/model.py
@@ -6,31 +6,16 @@ import datetime
import simplejson as json
from flask import request
-from flask.ext.sqlalchemy import SQLAlchemy
from wqflask import app
import sqlalchemy
-
-from sqlalchemy import (Column, Integer, String, Table, ForeignKey, Unicode, Boolean, DateTime,
+from sqlalchemy import (Column, ForeignKey, Unicode, Boolean, DateTime,
Text, Index)
-from sqlalchemy.orm import relationship, backref
+from sqlalchemy.orm import relationship
from wqflask.database import Base, init_db
-
-
-# Define models
-#roles_users = Table('roles_users',
-# Column('user_id', Integer(), ForeignKey('user.the_id')),
-# Column('role_id', Integer(), ForeignKey('role.the_id')))
-
-#class Role(Base):
-# __tablename__ = "role"
-# id = Column(Unicode(36), primary_key=True, default=lambda: unicode(uuid.uuid4()))
-# name = Column(Unicode(80), unique=True, nullable=False)
-# description = Column(Unicode(255))
-
class User(Base):
__tablename__ = "user"
id = Column(Unicode(36), primary_key=True, default=lambda: unicode(uuid.uuid4()))
@@ -133,11 +118,6 @@ class User(Base):
except IndexError:
return None
-
- #roles = relationship('Role', secondary=roles_users,
- # backref=backref('users', lazy='dynamic'))
-
-
class Login(Base):
__tablename__ = "login"
id = Column(Unicode(36), primary_key=True, default=lambda: unicode(uuid.uuid4()))
@@ -177,22 +157,15 @@ class UserCollection(Base):
except:
return 0
- #@property
- #def display_num_members(self):
- # return display_collapsible(self.num_members)
-
def members_as_set(self):
return set(json.loads(self.members))
-
def display_collapsible(number):
if number:
return number
else:
return ""
-
def user_uuid():
"""Unique cookie for a user"""
- user_uuid = request.cookies.get('user_uuid')
-
+ user_uuid = request.cookies.get('user_uuid') \ No newline at end of file
diff --git a/wqflask/wqflask/network_graph/network_graph.py b/wqflask/wqflask/network_graph/network_graph.py
index cebe5c03..a332db46 100644
--- a/wqflask/wqflask/network_graph/network_graph.py
+++ b/wqflask/wqflask/network_graph/network_graph.py
@@ -21,9 +21,7 @@
from __future__ import absolute_import, print_function, division
import sys
-# sys.path.append(".") Never do this in a webserver!
-import gc
import string
import cPickle
import os
@@ -42,7 +40,6 @@ import rpy2.robjects as robjects
from pprint import pformat as pf
-from htmlgen import HTMLgen2 as HT
import reaper
from utility.THCell import THCell
@@ -95,7 +92,6 @@ class NetworkGraph(object):
self.lowest_overlap = 8 #ZS: Variable set to the lowest overlapping samples in order to notify user, or 8, whichever is lower (since 8 is when we want to display warning)
- self.network_data = {}
self.nodes_list = []
self.edges_list = []
for trait_db in self.trait_list:
@@ -107,9 +103,9 @@ class NetworkGraph(object):
corr_result_row = []
is_spearman = False #ZS: To determine if it's above or below the diagonal
-
+
max_corr = 0 #ZS: Used to determine whether node should be hidden when correlation coefficient slider is used
-
+
for target in self.trait_list:
target_trait = target[0]
target_db = target[1]
@@ -141,7 +137,7 @@ class NetworkGraph(object):
continue
else:
sample_r, sample_p = scipy.stats.spearmanr(this_trait_vals, target_vals)
-
+
if -1 <= sample_r < -0.7:
color = "#0000ff"
width = 3
@@ -163,10 +159,10 @@ class NetworkGraph(object):
else:
color = "#000000"
width = 0
-
+
if abs(sample_r) > max_corr:
max_corr = abs(sample_r)
-
+
edge_data = {'id' : str(this_trait.name) + '_to_' + str(target_trait.name),
'source' : str(this_trait.name) + ":" + str(this_trait.dataset.name),
'target' : str(target_trait.name) + ":" + str(target_trait.dataset.name),
@@ -176,31 +172,34 @@ class NetworkGraph(object):
'overlap' : num_overlap,
'color' : color,
'width' : width }
-
+
edge_dict = { 'data' : edge_data }
-
+
self.edges_list.append(edge_dict)
-
- node_dict = { 'data' : {'id' : str(this_trait.name) + ":" + str(this_trait.dataset.name),
- 'label' : this_trait.name,
- 'symbol' : this_trait.symbol,
- 'geneid' : this_trait.geneid,
- 'omim' : this_trait.omim,
- 'max_corr' : max_corr } }
+
+ if trait_db[1].type == "ProbeSet":
+ node_dict = { 'data' : {'id' : str(this_trait.name) + ":" + str(this_trait.dataset.name),
+ 'label' : this_trait.symbol,
+ 'symbol' : this_trait.symbol,
+ 'geneid' : this_trait.geneid,
+ 'omim' : this_trait.omim,
+ 'max_corr' : max_corr } }
+ elif trait_db[1].type == "Publish":
+ node_dict = { 'data' : {'id' : str(this_trait.name) + ":" + str(this_trait.dataset.name),
+ 'label' : this_trait.name,
+ 'max_corr' : max_corr } }
+ else:
+ node_dict = { 'data' : {'id' : str(this_trait.name) + ":" + str(this_trait.dataset.name),
+ 'label' : this_trait.name,
+ 'max_corr' : max_corr } }
self.nodes_list.append(node_dict)
-
- #self.network_data['dataSchema'] = {'nodes' : [{'name' : "label" , 'type' : "string"}],
- # 'edges' : [{'name' : "label" , 'type' : "string"}] }
-
- #self.network_data['data'] = {'nodes' : self.nodes_list,
- # 'edges' : self.edges_list }
self.elements = json.dumps(self.nodes_list + self.edges_list)
-
+
groups = []
for sample in self.all_sample_list:
groups.append(1)
-
+
self.js_data = dict(traits = [trait.name for trait in self.traits],
groups = groups,
cols = range(len(self.traits)),
@@ -208,10 +207,8 @@ class NetworkGraph(object):
samples = self.all_sample_list,
sample_data = self.sample_data,
elements = self.elements,)
- # corr_results = [result[1] for result in result_row for result_row in self.corr_results])
def get_trait_db_obs(self, trait_db_list):
-
self.trait_list = []
for i, trait_db in enumerate(trait_db_list):
if i == (len(trait_db_list) - 1):
@@ -221,4 +218,4 @@ class NetworkGraph(object):
trait_ob = GeneralTrait(dataset=dataset_ob,
name=trait_name,
cellid=None)
- self.trait_list.append((trait_ob, dataset_ob))
+ self.trait_list.append((trait_ob, dataset_ob)) \ No newline at end of file
diff --git a/wqflask/wqflask/parser.py b/wqflask/wqflask/parser.py
index ea7ab1b9..1ca5ecff 100644
--- a/wqflask/wqflask/parser.py
+++ b/wqflask/wqflask/parser.py
@@ -33,20 +33,18 @@ def parse(pstring):
"""
pstring = re.split(r"""(?:(\w+\s*=\s*[\('"\[][^)'"]*[\)\]'"]) | # LRS=(1 2 3), cisLRS=[4 5 6], etc
(\w+\s*[=:\>\<][\w\*]+) | # wiki=bar, GO:foobar, etc
+ (".*?") | ('.*?') | # terms in quotes, i.e. "brain weight"
([\w\*]+)) # shh, brain, etc """, pstring,
flags=re.VERBOSE)
+
pstring = [item.strip() for item in pstring if item and item.strip()]
- print(pstring)
+ logger.debug("pstring:", pstring)
items = []
separators = [re.escape(x) for x in ("<=", ">=", ":", "=", "<", ">")]
separators = '(%s)' % ("|".join(separators))
- logger.debug("separators:", separators)
-
-
-
for item in pstring:
splat = re.split(separators, item)
logger.debug("splat is:", splat)
@@ -70,6 +68,8 @@ def parse(pstring):
separator=separator,
search_term=value)
else:
+ if (item[0] == "\"" and item[-1] == "\"") or (item[0] == "'" and item[-1] == "'"):
+ item = item[1:-1]
term = dict(key=None,
separator=None,
search_term=[item])
diff --git a/wqflask/wqflask/search_results.py b/wqflask/wqflask/search_results.py
index 59e100d8..698389ab 100644
--- a/wqflask/wqflask/search_results.py
+++ b/wqflask/wqflask/search_results.py
@@ -10,6 +10,8 @@ import time
import math
import datetime
import collections
+import re
+import requests
from pprint import pformat as pf
@@ -22,9 +24,11 @@ from wqflask import do_search
from utility import webqtlUtil,tools
from db import webqtlDatabaseFunction
-from flask import render_template
+from flask import render_template, Flask, g
from utility import formatting
+from utility import hmac
+from utility.type_checking import is_float, is_int, is_str, get_float, get_int, get_string
from utility.logger import getLogger
logger = getLogger(__name__ )
@@ -42,19 +46,8 @@ views.py).
# Names and IDs of group / F2 set
###########################################
- # All Phenotypes is a special case we'll deal with later
- #if kw['dataset'] == "All Phenotypes":
- # self.cursor.execute("""
- # select PublishFreeze.Name, InbredSet.Name, InbredSet.Id from PublishFreeze,
- # InbredSet where PublishFreeze.Name not like 'BXD300%' and InbredSet.Id =
- # PublishFreeze.InbredSetId""")
- # results = self.cursor.fetchall()
- # self.dataset = map(lambda x: DataSet(x[0], self.cursor), results)
- # self.dataset_groups = map(lambda x: x[1], results)
- # self.dataset_group_ids = map(lambda x: x[2], results)
- #else:
-
self.uc_id = uuid.uuid4()
+ self.go_term = None
logger.debug("uc_id:", self.uc_id) # contains a unique id
logger.debug("kw is:", kw) # dict containing search terms
@@ -64,17 +57,35 @@ views.py).
else:
self.and_or = "and"
self.search_terms = kw['search_terms_and']
- self.search_term_exists = True
+ search = self.search_terms
+ self.original_search_string = self.search_terms
+ # check for dodgy search terms
+ rx = re.compile(r'.*\W(href|http|sql|select|update)\W.*',re.IGNORECASE)
+ if rx.match(search):
+ logger.info("Regex failed search")
+ self.search_term_exists = False
+ return
+ else:
+ self.search_term_exists = True
+
self.results = []
- if kw['type'] == "Phenotypes": # split datatype on type field
+ type = kw.get('type')
+ if type == "Phenotypes": # split datatype on type field
dataset_type = "Publish"
- elif kw['type'] == "Genotypes":
+ elif type == "Genotypes":
dataset_type = "Geno"
else:
dataset_type = "ProbeSet" # ProbeSet is default
+
+ assert(is_str(kw.get('dataset')))
self.dataset = create_dataset(kw['dataset'], dataset_type)
logger.debug("search_terms:", self.search_terms)
- self.search()
+
+ #ZS: I don't like using try/except, but it seems like the easiest way to account for all possible bad searches here
+ try:
+ self.search()
+ except:
+ self.search_term_exists = False
if self.search_term_exists:
self.gen_search_result()
@@ -85,48 +96,113 @@ views.py).
the "search" function
"""
- self.trait_list = []
+ trait_list = []
json_trait_list = []
species = webqtlDatabaseFunction.retrieve_species(self.dataset.group.name)
# result_set represents the results for each search term; a search of
# "shh grin2b" would have two sets of results, one for each term
logger.debug("self.results is:", pf(self.results))
+
for index, result in enumerate(self.results):
if not result:
continue
#### Excel file needs to be generated ####
- #logger.debug("foo locals are:", locals())
+ trait_dict = {}
trait_id = result[0]
+ trait_dict['index'] = index + 1
this_trait = trait.GeneralTrait(dataset=self.dataset, name=trait_id, get_qtl_info=True, get_sample_info=False)
- self.trait_list.append(this_trait)
- json_trait_list.append(trait.jsonable_table_row(this_trait, self.dataset.name, index + 1))
-
- self.json_trait_list = json.dumps(json_trait_list)
+ trait_dict['name'] = this_trait.name
+ if this_trait.dataset.type == "Publish":
+ trait_dict['display_name'] = this_trait.display_name
+ else:
+ trait_dict['display_name'] = this_trait.name
+ trait_dict['dataset'] = this_trait.dataset.name
+ trait_dict['hmac'] = hmac.data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name))
+ if this_trait.dataset.type == "ProbeSet":
+ trait_dict['symbol'] = this_trait.symbol
+ trait_dict['description'] = this_trait.description_display.decode('utf-8', 'replace')
+ trait_dict['location'] = this_trait.location_repr
+ trait_dict['mean'] = "N/A"
+ trait_dict['additive'] = "N/A"
+ if this_trait.mean != "" and this_trait.mean != None:
+ trait_dict['mean'] = '%.3f' % this_trait.mean
+ trait_dict['lrs_score'] = this_trait.LRS_score_repr
+ trait_dict['lrs_location'] = this_trait.LRS_location_repr
+ if this_trait.additive != "":
+ trait_dict['additive'] = '%.3f' % this_trait.additive
+ elif this_trait.dataset.type == "Geno":
+ trait_dict['location'] = this_trait.location_repr
+ elif this_trait.dataset.type == "Publish":
+ trait_dict['description'] = this_trait.description_display
+ trait_dict['authors'] = this_trait.authors
+ trait_dict['pubmed_id'] = "N/A"
+ if this_trait.pubmed_id:
+ trait_dict['pubmed_id'] = this_trait.pubmed_id
+ trait_dict['pubmed_link'] = this_trait.pubmed_link
+ trait_dict['pubmed_text'] = this_trait.pubmed_text
+ trait_dict['mean'] = "N/A"
+ if this_trait.mean != "" and this_trait.mean != None:
+ trait_dict['mean'] = '%.3f' % this_trait.mean
+ trait_dict['lrs_score'] = this_trait.LRS_score_repr
+ trait_dict['lrs_location'] = this_trait.LRS_location_repr
+ trait_dict['additive'] = "N/A"
+ if this_trait.additive != "":
+ trait_dict['additive'] = '%.3f' % this_trait.additive
+ trait_list.append(trait_dict)
+ #json_trait_list.append(trait.jsonable_table_row(this_trait, self.dataset.name, index + 1))
- #def get_group_species_tree(self):
- # self.species_groups = collections.default_dict(list)
- # for key in self.results:
- # for item in self.results[key]:
- # self.species_groups[item['result_fields']['species']].append(
- # item['result_fields']['group_name'])
+ self.trait_list = json.dumps(trait_list)
+ #self.json_trait_list = json.dumps(json_trait_list)
def search(self):
- """This function sets up the actual search query in the form of a SQL
-statement and executes
+ """
+ This function sets up the actual search query in the form of a SQL statement and executes
"""
self.search_terms = parser.parse(self.search_terms)
logger.debug("After parsing:", self.search_terms)
- if len(self.search_terms) > 1:
- logger.debug("len(search_terms)>1")
- combined_from_clause = ""
- combined_where_clause = ""
- previous_from_clauses = [] #The same table can't be referenced twice in the from clause
- for i, a_search in enumerate(self.search_terms):
+ combined_from_clause = ""
+ combined_where_clause = ""
+ previous_from_clauses = [] #The same table can't be referenced twice in the from clause
+
+ logger.debug("len(search_terms)>1")
+ symbol_list = []
+ if self.dataset.type == "ProbeSet":
+ for a_search in self.search_terms:
+ if a_search['key'] == None:
+ symbol_list.append(a_search['search_term'][0])
+
+ alias_terms = get_aliases(symbol_list, self.dataset.group.species)
+
+ for i, a_search in enumerate(alias_terms):
+ the_search = self.get_search_ob(a_search)
+ if the_search != None:
+ get_from_clause = getattr(the_search, "get_from_clause", None)
+ if callable(get_from_clause):
+ from_clause = the_search.get_from_clause()
+ if from_clause in previous_from_clauses:
+ pass
+ else:
+ previous_from_clauses.append(from_clause)
+ combined_from_clause += from_clause
+ where_clause = the_search.get_alias_where_clause()
+ combined_where_clause += "(" + where_clause + ")"
+ if self.and_or == "and":
+ combined_where_clause += "AND"
+ else:
+ combined_where_clause += "OR"
+
+ for i, a_search in enumerate(self.search_terms):
+ if a_search['key'] == "GO":
+ self.go_term = a_search['search_term'][0]
+ gene_list = get_GO_symbols(a_search)
+ self.search_terms += gene_list
+ continue
+ else:
the_search = self.get_search_ob(a_search)
if the_search != None:
get_from_clause = getattr(the_search, "get_from_clause", None)
@@ -146,23 +222,11 @@ statement and executes
combined_where_clause += "OR"
else:
self.search_term_exists = False
- if self.search_term_exists:
- combined_where_clause = "(" + combined_where_clause + ")"
- final_query = the_search.compile_final_query(combined_from_clause, combined_where_clause)
- # logger.debug("final_query",final_query)
- results = the_search.execute(final_query)
- self.results.extend(results)
- else:
- logger.debug("len(search_terms)<=1")
- if self.search_terms == []:
- self.search_term_exists = False
- else:
- for a_search in self.search_terms:
- the_search = self.get_search_ob(a_search)
- if the_search != None:
- self.results.extend(the_search.run())
- else:
- self.search_term_exists = False
+ if self.search_term_exists:
+ combined_where_clause = "(" + combined_where_clause + ")"
+ final_query = the_search.compile_final_query(combined_from_clause, combined_where_clause)
+ results = the_search.execute(final_query)
+ self.results.extend(results)
if self.search_term_exists:
if the_search != None:
@@ -176,6 +240,8 @@ statement and executes
search_type['dataset_type'] = self.dataset.type
if a_search['key']:
search_type['key'] = a_search['key'].upper()
+ else:
+ search_type['key'] = None
logger.debug("search_type is:", pf(search_type))
search_ob = do_search.DoSearch.get_search(search_type)
@@ -185,7 +251,68 @@ statement and executes
the_search = search_class(search_term,
search_operator,
self.dataset,
+ search_type['key']
)
return the_search
else:
return None
+
+def get_GO_symbols(a_search):
+ query = """SELECT genes
+ FROM GORef
+ WHERE goterm='{0}:{1}'""".format(a_search['key'], a_search['search_term'][0])
+
+ gene_list = g.db.execute(query).fetchone()[0].strip().split()
+
+ new_terms = []
+ for gene in gene_list:
+ this_term = dict(key=None,
+ separator=None,
+ search_term=[gene])
+
+ new_terms.append(this_term)
+
+ return new_terms
+
+def insert_newlines(string, every=64):
+ """ This is because it is seemingly impossible to change the width of the description column, so I'm just manually adding line breaks """
+ lines = []
+ for i in xrange(0, len(string), every):
+ lines.append(string[i:i+every])
+ return '\n'.join(lines)
+
+def get_aliases(symbol_list, species):
+
+ updated_symbols = []
+ for symbol in symbol_list:
+ if species == "mouse":
+ updated_symbols.append(symbol.capitalize())
+ elif species == "human":
+ updated_symbols.append(symbol.upper())
+ else:
+ updated_symbols.append(symbol)
+
+ symbols_string = ",".join(updated_symbols)
+
+ filtered_aliases = []
+ response = requests.get("http://gn2.genenetwork.org/gn3/gene/aliases2/" + symbols_string)
+ if response:
+ alias_lists = json.loads(response.content)
+ seen = set()
+ for aliases in alias_lists:
+ for item in aliases[1]:
+ if item in seen:
+ continue
+ else:
+ filtered_aliases.append(item)
+ seen.add(item)
+
+ search_terms = []
+ for alias in filtered_aliases:
+ the_search_term = {'key': None,
+ 'search_term': [alias],
+ 'separator' : None}
+ search_terms.append(the_search_term)
+
+ return search_terms
+
diff --git a/wqflask/wqflask/show_trait/SampleList.py b/wqflask/wqflask/show_trait/SampleList.py
index 7e7503d4..7e126a36 100644
--- a/wqflask/wqflask/show_trait/SampleList.py
+++ b/wqflask/wqflask/show_trait/SampleList.py
@@ -10,8 +10,12 @@ import numpy as np
from scipy import stats
from pprint import pformat as pf
+import simplejson as json
+
import itertools
+from utility.elasticsearch_tools import get_elasticsearch_connection
+
import utility.logger
logger = utility.logger.getLogger(__name__ )
@@ -20,8 +24,8 @@ class SampleList(object):
dataset,
sample_names,
this_trait,
- sample_group_type,
- header):
+ sample_group_type = "primary",
+ header = "Samples"):
self.dataset = dataset
self.this_trait = this_trait
@@ -32,51 +36,45 @@ class SampleList(object):
self.sample_attribute_values = {}
self.get_attributes()
- # logger.debug("camera: attributes are:", pf(self.attributes))
- if self.this_trait and self.dataset and self.dataset.type == 'ProbeSet':
+ #self.sample_qnorm = get_transform_vals(self.dataset, this_trait)
+
+ if self.this_trait and self.dataset:
self.get_extra_attribute_values()
for counter, sample_name in enumerate(sample_names, 1):
sample_name = sample_name.replace("_2nd_", "")
- #ZS - If there's no value for the sample/strain, create the sample object (so samples with no value are still displayed in the table)
- try:
- sample = self.this_trait.data[sample_name]
- except KeyError:
- logger.debug("No sample %s, let's create it now" % sample_name)
- sample = webqtlCaseData.webqtlCaseData(sample_name)
+ if type(self.this_trait) is list: #ZS: self.this_trait will be a list if it is a Temp trait
+ if counter <= len(self.this_trait) and str(self.this_trait[counter-1]).upper() != 'X':
+ sample = webqtlCaseData.webqtlCaseData(name=sample_name, value=float(self.this_trait[counter-1]))
+ else:
+ sample = webqtlCaseData.webqtlCaseData(name=sample_name)
+ else:
+ #ZS - If there's no value for the sample/strain, create the sample object (so samples with no value are still displayed in the table)
+ try:
+ sample = self.this_trait.data[sample_name]
+ except KeyError:
+ #logger.debug("No sample %s, let's create it now" % sample_name)
+ sample = webqtlCaseData.webqtlCaseData(name=sample_name)
- #sampleNameAdd = ''
- #if fd.RISet == 'AXBXA' and sampleName in ('AXB18/19/20','AXB13/14','BXA8/17'):
- # sampleNameAdd = HT.Href(url='/mouseCross.html#AXB/BXA', text=HT.Sup('#'), Class='fs12', target="_blank")
sample.extra_info = {}
if self.dataset.group.name == 'AXBXA' and sample_name in ('AXB18/19/20','AXB13/14','BXA8/17'):
sample.extra_info['url'] = "/mouseCross.html#AXB/BXA"
sample.extra_info['css_class'] = "fs12"
- # logger.debug(" type of sample:", type(sample))
-
- if sample_group_type == 'primary':
- sample.this_id = "Primary_" + str(counter)
- else:
- sample.this_id = "Other_" + str(counter)
+ sample.this_id = str(counter)
#### For extra attribute columns; currently only used by several datasets - Zach
if self.sample_attribute_values:
sample.extra_attributes = self.sample_attribute_values.get(sample_name, {})
- logger.debug("sample.extra_attributes is", pf(sample.extra_attributes))
+ #logger.debug("sample.extra_attributes is", pf(sample.extra_attributes))
self.sample_list.append(sample)
- logger.debug("self.attributes is", pf(self.attributes))
+ #logger.debug("attribute vals are", pf(self.sample_attribute_values))
self.do_outliers()
- #do_outliers(the_samples)
- logger.debug("*the_samples are [%i]: %s" % (len(self.sample_list), pf(self.sample_list)))
- #for sample in self.sample_list:
- # logger.debug("apple:", type(sample), sample)
- #return the_samples
def __repr__(self):
return "<SampleList> --> %s" % (pf(self.__dict__))
@@ -99,33 +97,46 @@ class SampleList(object):
# Get attribute names and distinct values for each attribute
results = g.db.execute('''
- SELECT DISTINCT CaseAttribute.Id, CaseAttribute.Name, CaseAttributeXRef.Value
- FROM CaseAttribute, CaseAttributeXRef
- WHERE CaseAttributeXRef.CaseAttributeId = CaseAttribute.Id
- AND CaseAttributeXRef.ProbeSetFreezeId = %s
- ORDER BY CaseAttribute.Name''', (str(self.dataset.id),))
+ SELECT DISTINCT CaseAttribute.Id, CaseAttribute.Name, CaseAttributeXRefNew.Value
+ FROM CaseAttribute, CaseAttributeXRefNew
+ WHERE CaseAttributeXRefNew.CaseAttributeId = CaseAttribute.Id
+ AND CaseAttributeXRefNew.InbredSetId = %s
+ ORDER BY CaseAttribute.Name''', (str(self.dataset.group.id),))
self.attributes = {}
for attr, values in itertools.groupby(results.fetchall(), lambda row: (row.Id, row.Name)):
key, name = attr
- logger.debug("radish: %s - %s" % (key, name))
+ #logger.debug("radish: %s - %s" % (key, name))
self.attributes[key] = Bunch()
self.attributes[key].name = name
self.attributes[key].distinct_values = [item.Value for item in values]
self.attributes[key].distinct_values.sort(key=natural_sort_key)
+ all_numbers = True
+ for value in self.attributes[key].distinct_values:
+ try:
+ val_as_float = float(value)
+ except:
+ all_numbers = False
+
+ if all_numbers:
+ self.attributes[key].alignment = "right"
+ else:
+ self.attributes[key].alignment = "left"
+
def get_extra_attribute_values(self):
if self.attributes:
- results = g.db.execute('''
- SELECT Strain.Name AS SampleName, CaseAttributeId AS Id, CaseAttributeXRef.Value
- FROM Strain, StrainXRef, InbredSet, CaseAttributeXRef
+ query = '''
+ SELECT Strain.Name AS SampleName, CaseAttributeId AS Id, CaseAttributeXRefNew.Value
+ FROM Strain, StrainXRef, InbredSet, CaseAttributeXRefNew
WHERE StrainXRef.StrainId = Strain.Id
AND InbredSet.Id = StrainXRef.InbredSetId
- AND CaseAttributeXRef.StrainId = Strain.Id
- AND InbredSet.Name = %s
- AND CaseAttributeXRef.ProbeSetFreezeId = %s
- ORDER BY SampleName''',
- (self.dataset.group.name, self.this_trait.dataset.id))
+ AND CaseAttributeXRefNew.StrainId = Strain.Id
+ AND InbredSet.Id = CaseAttributeXRefNew.InbredSetId
+ AND CaseAttributeXRefNew.InbredSetId = %s
+ ORDER BY SampleName''' % self.dataset.group.id
+
+ results = g.db.execute(query)
for sample_name, items in itertools.groupby(results.fetchall(), lambda row: row.SampleName):
attribute_values = {}
@@ -147,36 +158,47 @@ class SampleList(object):
return any(sample.variance for sample in self.sample_list)
-#def z_score(vals):
-# vals_array = np.array(vals)
-# mean = np.mean(vals_array)
-# stdv = np.std(vals_array)
-#
-# z_scores = []
-# for val in vals_array:
-# z_score = (val - mean)/stdv
-# z_scores.append(z_score)
-#
-#
-#
-# return z_scores
-
-
-#def z_score(row):
-# L = [n for n in row if not np.isnan(n)]
-# m = np.mean(L)
-# s = np.std(L)
-# zL = [1.0 * (n - m) / s for n in L]
-# if len(L) == len(row): return zL
-# # deal with nan
-# retL = list()
-# for n in row:
-# if np.isnan(n):
-# retL.append(nan)
-# else:
-# retL.append(zL.pop(0))
-# assert len(zL) == 0
-# return retL
+def get_transform_vals(dataset, trait):
+ es = get_elasticsearch_connection(for_user=False)
+
+ logger.info("DATASET NAME:", dataset.name)
+
+ query = '{"bool": {"must": [{"match": {"name": "%s"}}, {"match": {"dataset": "%s"}}]}}' % (trait.name, dataset.name)
+
+ es_body = {
+ "query": {
+ "bool": {
+ "must": [
+ {
+ "match": {
+ "name": "%s" % (trait.name)
+ }
+ },
+ {
+ "match": {
+ "dataset": "%s" % (dataset.name)
+ }
+ }
+ ]
+ }
+ }
+ }
+
+ response = es.search( index = "traits", doc_type = "trait", body = es_body )
+ logger.info("THE RESPONSE:", response)
+ results = response['hits']['hits']
+
+ if len(results) > 0:
+ samples = results[0]['_source']['samples']
+
+ sample_dict = {}
+ for sample in samples:
+ sample_dict[sample['name']] = sample['qnorm']
+
+ #logger.info("SAMPLE DICT:", sample_dict)
+ return sample_dict
+ else:
+ return None
def natural_sort_key(x):
"""Get expected results when using as a key for sort - ints or strings are sorted properly"""
diff --git a/wqflask/wqflask/show_trait/export_trait_data.py b/wqflask/wqflask/show_trait/export_trait_data.py
index ac3cd366..7ca4a4c0 100644
--- a/wqflask/wqflask/show_trait/export_trait_data.py
+++ b/wqflask/wqflask/show_trait/export_trait_data.py
@@ -1,7 +1,5 @@
from __future__ import print_function, division
-import operator
-
import simplejson as json
from pprint import pformat as pf
@@ -9,6 +7,7 @@ from pprint import pformat as pf
def export_sample_table(targs):
sample_data = json.loads(targs['export_data'])
+ trait_name = targs['trait_display_name']
final_sample_data = []
for sample_group in ['primary_samples', 'other_samples']:
@@ -17,7 +16,7 @@ def export_sample_table(targs):
print("sorted_row is:", pf(sorted_row))
final_sample_data.append(sorted_row)
- return final_sample_data
+ return trait_name, final_sample_data
def dict_to_sorted_list(dictionary):
sorted_list = [item for item in dictionary.iteritems()]
@@ -29,11 +28,19 @@ def cmp_samples(a, b):
if b[0] == 'name':
return 1
elif b[0] == 'value':
- if a[0] == 'se':
+ if a[0] == 'name':
+ return -1
+ else:
return 1
+ elif b[0] == 'se':
+ if a[0] == 'name' or a[0] == 'value':
+ return -1
else:
+ return 1
+ elif b[0] == 'num_cases':
+ if a[0] == 'name' or a[0] == 'value' or a[0] == 'se':
return -1
- elif b[0] == 'se':
- return -1
+ else:
+ return 1
else:
- return 0 \ No newline at end of file
+ return -1 \ No newline at end of file
diff --git a/wqflask/wqflask/show_trait/show_trait.py b/wqflask/wqflask/show_trait/show_trait.py
index 5d55ebe1..d35ba749 100644
--- a/wqflask/wqflask/show_trait/show_trait.py
+++ b/wqflask/wqflask/show_trait/show_trait.py
@@ -2,16 +2,21 @@ from __future__ import absolute_import, print_function, division
import string
import os
+import datetime
import cPickle
import uuid
+import requests
import json as json
-#import pyXLWriter as xl
from collections import OrderedDict
-from flask import Flask, g
+import redis
+Redis = redis.StrictRedis()
+
+import numpy as np
+import scipy.stats as ss
-from htmlgen import HTMLgen2 as HT
+from flask import Flask, g
from base import webqtlConfig
from base import webqtlCaseData
@@ -20,13 +25,9 @@ from utility import webqtlUtil, Plot, Bunch, helper_functions
from base.trait import GeneralTrait
from base import data_set
from db import webqtlDatabaseFunction
-from basicStatistics import BasicStatisticsFunctions
from pprint import pformat as pf
-from utility.tools import flat_files, flat_file_exists
-from utility.tools import get_setting
-
from utility.logger import getLogger
logger = getLogger(__name__ )
@@ -42,117 +43,305 @@ class ShowTrait(object):
def __init__(self, kw):
logger.debug("in ShowTrait, kw are:", kw)
- if kw['trait_id'] != None:
+ if 'trait_id' in kw and kw['dataset'] != "Temp":
self.temp_trait = False
self.trait_id = kw['trait_id']
helper_functions.get_species_dataset_trait(self, kw)
- else:
+ elif 'group' in kw:
self.temp_trait = True
- self.trait_vals = kw['trait_paste'].split()
- self.temp_group = kw['group']
+ self.trait_id = "Temp_"+kw['species']+ "_" + kw['group'] + "_" + datetime.datetime.now().strftime("%m%d%H%M%S")
self.temp_species = kw['species']
- #self.create_temp_trait()
-
- #self.dataset.group.read_genotype_file()
+ self.temp_group = kw['group']
+ self.dataset = data_set.create_dataset(dataset_name = "Temp", dataset_type = "Temp", group_name = self.temp_group)
+ # Put values in Redis so they can be looked up later if added to a collection
+ Redis.set(self.trait_id, kw['trait_paste'])
+ self.trait_vals = kw['trait_paste'].split()
+ self.this_trait = GeneralTrait(dataset=self.dataset,
+ name=self.trait_id,
+ cellid=None)
+ else:
+ self.temp_trait = True
+ self.trait_id = kw['trait_id']
+ self.temp_species = self.trait_id.split("_")[1]
+ self.temp_group = self.trait_id.split("_")[2]
+ self.dataset = data_set.create_dataset(dataset_name = "Temp", dataset_type = "Temp", group_name = self.temp_group)
+ self.this_trait = GeneralTrait(dataset=self.dataset,
+ name=self.trait_id,
+ cellid=None)
+ self.trait_vals = Redis.get(self.trait_id).split()
+
+ #ZS: Get verify/rna-seq link URLs
+ try:
+ blatsequence = self.this_trait.blatseq
+ if not blatsequence:
+ #XZ, 06/03/2009: ProbeSet name is not unique among platforms. We should use ProbeSet Id instead.
+ query1 = """SELECT Probe.Sequence, Probe.Name
+ FROM Probe, ProbeSet, ProbeSetFreeze, ProbeSetXRef
+ WHERE ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id AND
+ ProbeSetXRef.ProbeSetId = ProbeSet.Id AND
+ ProbeSetFreeze.Name = '%s' AND
+ ProbeSet.Name = '%s' AND
+ Probe.ProbeSetId = ProbeSet.Id order by Probe.SerialOrder""" % (self.this_trait.dataset.name, self.this_trait.name)
+ seqs = g.db.execute(query1).fetchall()
+ if not seqs:
+ raise ValueError
+ else:
+ blatsequence = ''
+ for seqt in seqs:
+ if int(seqt[1][-1]) % 2 == 1:
+ blatsequence += string.strip(seqt[0])
+
+ #--------Hongqiang add this part in order to not only blat ProbeSet, but also blat Probe
+ blatsequence = '%3E' + self.this_trait.name + '%0A' + blatsequence + '%0A'
+ #XZ, 06/03/2009: ProbeSet name is not unique among platforms. We should use ProbeSet Id instead.
+ query2 = """SELECT Probe.Sequence, Probe.Name
+ FROM Probe, ProbeSet, ProbeSetFreeze, ProbeSetXRef
+ WHERE ProbeSetXRef.ProbeSetFreezeId = ProbeSetFreeze.Id AND
+ ProbeSetXRef.ProbeSetId = ProbeSet.Id AND
+ ProbeSetFreeze.Name = '%s' AND
+ ProbeSet.Name = '%s' AND
+ Probe.ProbeSetId = ProbeSet.Id order by Probe.SerialOrder""" % (self.this_trait.dataset.name, self.this_trait.name)
+
+ seqs = g.db.execute(query2).fetchall()
+ for seqt in seqs:
+ if int(seqt[1][-1]) %2 == 1:
+ blatsequence += '%3EProbe_' + string.strip(seqt[1]) + '%0A' + string.strip(seqt[0]) + '%0A'
+
+ if self.dataset.group.species == "rat":
+ self.UCSC_BLAT_URL = webqtlConfig.UCSC_BLAT % ('rat', 'rn6', blatsequence)
+ self.UTHSC_BLAT_URL = ""
+ elif self.dataset.group.species == "mouse":
+ self.UCSC_BLAT_URL = webqtlConfig.UCSC_BLAT % ('mouse', 'mm10', blatsequence)
+ self.UTHSC_BLAT_URL = webqtlConfig.UTHSC_BLAT % ('mouse', 'mm10', blatsequence)
+ elif self.dataset.group.species == "human":
+ self.UCSC_BLAT_URL = webqtlConfig.UCSC_BLAT % ('human', 'hg38', blatsequence)
+ self.UTHSC_BLAT_URL = ""
+ else:
+ self.UCSC_BLAT_URL = ""
+ self.UTHSC_BLAT_URL = ""
+ except:
+ self.UCSC_BLAT_URL = ""
+ self.UTHSC_BLAT_URL = ""
- #if this_trait:
- # if this_trait.dataset and this_trait.dataset.type and this_trait.dataset.type == 'ProbeSet':
- # self.cursor.execute("SELECT h2 from ProbeSetXRef WHERE DataId = %d" %
- # this_trait.mysqlid)
- # heritability = self.cursor.fetchone()
+ if self.dataset.type == "ProbeSet":
+ self.show_probes = "True"
+ trait_units = get_trait_units(self.this_trait)
+ self.get_external_links()
self.build_correlation_tools()
+ self.ncbi_summary = get_ncbi_summary(self.this_trait)
+
#Get nearest marker for composite mapping
+ if not self.temp_trait:
+ if check_if_attr_exists(self.this_trait, 'locus_chr') and self.dataset.type != "Geno" and self.dataset.type != "Publish":
+ self.nearest_marker = get_nearest_marker(self.this_trait, self.dataset)
+ #self.nearest_marker1 = get_nearest_marker(self.this_trait, self.dataset)[0]
+ #self.nearest_marker2 = get_nearest_marker(self.this_trait, self.dataset)[1]
+ else:
+ self.nearest_marker = ""
+ #self.nearest_marker1 = ""
+ #self.nearest_marker2 = ""
+
+ self.make_sample_lists()
- if hasattr(self.this_trait, 'locus_chr') and self.this_trait.locus_chr != "" and self.dataset.type != "Geno" and self.dataset.type != "Publish":
- self.nearest_marker = get_nearest_marker(self.this_trait, self.dataset)
- #self.nearest_marker1 = get_nearest_marker(self.this_trait, self.dataset)[0]
- #self.nearest_marker2 = get_nearest_marker(self.this_trait, self.dataset)[1]
+ self.qnorm_vals = quantile_normalize_vals(self.sample_groups)
+ self.z_scores = get_z_scores(self.sample_groups)
+
+ self.temp_uuid = uuid.uuid4()
+
+ self.sample_group_types = OrderedDict()
+ if len(self.sample_groups) > 1:
+ self.sample_group_types['samples_primary'] = self.dataset.group.name
+ self.sample_group_types['samples_other'] = "Other"
+ self.sample_group_types['samples_all'] = "All"
else:
- self.nearest_marker = ""
- #self.nearest_marker1 = ""
- #self.nearest_marker2 = ""
+ self.sample_group_types['samples_primary'] = self.dataset.group.name
+ sample_lists = [group.sample_list for group in self.sample_groups]
- self.make_sample_lists(self.this_trait)
+ categorical_var_list = []
+ if not self.temp_trait:
+ categorical_var_list = get_categorical_variables(self.this_trait, self.sample_groups[0]) #ZS: Only using first samplelist, since I think mapping only uses those samples
+
+ #ZS: Get list of chromosomes to select for mapping
+ self.chr_list = [["All", -1]]
+ for i, this_chr in enumerate(self.dataset.species.chromosomes.chromosomes):
+ self.chr_list.append([self.dataset.species.chromosomes.chromosomes[this_chr].name, i])
+
+ self.genofiles = self.dataset.group.get_genofiles()
+
+ self.has_num_cases = has_num_cases(self.this_trait)
+
+ self.stats_table_width, self.trait_table_width = get_table_widths(self.sample_groups, self.has_num_cases)
+
+ #ZS: Needed to know whether to display bar chart + get max sample name length in order to set table column width
+ self.num_values = 0
+ self.binary = "true" #ZS: So it knows whether to display the Binary R/qtl mapping method, which doesn't work unless all values are 0 or 1
+ self.negative_vals_exist = "false" #ZS: Since we don't want to show log2 transform option for situations where it doesn't make sense
+ max_samplename_width = 1
+ for group in self.sample_groups:
+ for sample in group.sample_list:
+ if len(sample.name) > max_samplename_width:
+ max_samplename_width = len(sample.name)
+ if sample.display_value != "x":
+ self.num_values += 1
+ if sample.display_value != 0 or sample.display_value != 1:
+ self.binary = "false"
+ if sample.value < 0:
+ self.negative_vals_exist = "true"
+
+ sample_column_width = max_samplename_width * 8
+
+ if self.num_values >= 5000:
+ self.maf = 0.01
+ else:
+ self.maf = 0.05
+
+ trait_symbol = None
+ short_description = None
+ if not self.temp_trait:
+ if self.this_trait.symbol:
+ trait_symbol = self.this_trait.symbol
+ short_description = trait_symbol
+
+ elif hasattr(self.this_trait, 'post_publication_abbreviation'):
+ short_description = self.this_trait.post_publication_abbreviation
+
+ elif hasattr(self.this_trait, 'pre_publication_abbreviation'):
+ short_description = self.this_trait.pre_publication_abbreviation
# Todo: Add back in the ones we actually need from below, as we discover we need them
hddn = OrderedDict()
if self.dataset.group.allsamples:
hddn['allsamples'] = string.join(self.dataset.group.allsamples, ' ')
-
+ hddn['primary_samples'] = string.join(self.primary_sample_names, ',')
hddn['trait_id'] = self.trait_id
+ hddn['trait_display_name'] = self.this_trait.display_name
hddn['dataset'] = self.dataset.name
+ hddn['temp_trait'] = False
+ if self.temp_trait:
+ hddn['temp_trait'] = True
+ hddn['group'] = self.temp_group
+ hddn['species'] = self.temp_species
hddn['use_outliers'] = False
- hddn['method'] = "pylmm"
+ hddn['method'] = "gemma"
+ hddn['selected_chr'] = -1
hddn['mapping_display_all'] = True
hddn['suggestive'] = 0
hddn['num_perm'] = 0
+ hddn['categorical_vars'] = ""
hddn['manhattan_plot'] = ""
- if hasattr(self.this_trait, 'locus_chr') and self.this_trait.locus_chr != "" and self.dataset.type != "Geno" and self.dataset.type != "Publish":
- hddn['control_marker'] = self.nearest_marker
- #hddn['control_marker'] = self.nearest_marker1+","+self.nearest_marker2
- else:
- hddn['control_marker'] = ""
+ hddn['control_marker'] = ""
+ if not self.temp_trait:
+ if hasattr(self.this_trait, 'locus_chr') and self.this_trait.locus_chr != "" and self.dataset.type != "Geno" and self.dataset.type != "Publish":
+ hddn['control_marker'] = self.nearest_marker
+ #hddn['control_marker'] = self.nearest_marker1+","+self.nearest_marker2
hddn['do_control'] = False
- hddn['maf'] = 0.01
+ hddn['maf'] = 0.05
hddn['compare_traits'] = []
hddn['export_data'] = ""
+ hddn['export_format'] = "excel"
# We'll need access to this_trait and hddn in the Jinja2 Template, so we put it inside self
self.hddn = hddn
- self.temp_uuid = uuid.uuid4()
-
- self.sample_group_types = OrderedDict()
- if len(self.sample_groups) > 1:
- self.sample_group_types['samples_primary'] = self.dataset.group.name + " Only"
- self.sample_group_types['samples_other'] = "Non-" + self.dataset.group.name
- self.sample_group_types['samples_all'] = "All Cases"
- else:
- self.sample_group_types['samples_primary'] = self.dataset.group.name
- sample_lists = [group.sample_list for group in self.sample_groups]
-
- self.get_mapping_methods()
-
- self.trait_table_width = get_trait_table_width(self.sample_groups)
-
- if self.this_trait.symbol:
- trait_symbol = self.this_trait.symbol
- else:
- trait_symbol = None
- js_data = dict(trait_id = self.this_trait.name,
+ js_data = dict(trait_id = self.trait_id,
trait_symbol = trait_symbol,
+ short_description = short_description,
+ unit_type = trait_units,
dataset_type = self.dataset.type,
data_scale = self.dataset.data_scale,
sample_group_types = self.sample_group_types,
sample_lists = sample_lists,
attribute_names = self.sample_groups[0].attributes,
+ categorical_vars = ",".join(categorical_var_list),
+ num_values = self.num_values,
+ qnorm_values = self.qnorm_vals,
+ zscore_values = self.z_scores,
+ sample_column_width = sample_column_width,
temp_uuid = self.temp_uuid)
self.js_data = js_data
- def get_mapping_methods(self):
- '''Only display mapping methods when the dataset group's genotype file exists'''
- def check_plink_gemma():
- if flat_file_exists("mapping"):
- MAPPING_PATH = flat_files("mapping")+"/"
- if (os.path.isfile(MAPPING_PATH+self.dataset.group.name+".bed") and
- (os.path.isfile(MAPPING_PATH+self.dataset.group.name+".map") or
- os.path.isfile(MAPPING_PATH+self.dataset.group.name+".bim"))):
- return True
- return False
-
- def check_pylmm_rqtl():
- if os.path.isfile(webqtlConfig.GENODIR+self.dataset.group.name+".geno") and (os.path.getsize(webqtlConfig.JSON_GENODIR+self.dataset.group.name+".json") > 0):
- return True
- else:
- return False
-
- self.genofiles = get_genofiles(self.this_trait)
- self.use_plink_gemma = check_plink_gemma()
- self.use_pylmm_rqtl = check_pylmm_rqtl()
-
+ def get_external_links(self):
+ #ZS: There's some weirdness here because some fields don't exist while others are empty strings
+ self.pubmed_link = webqtlConfig.PUBMEDLINK_URL % self.this_trait.pubmed_id if check_if_attr_exists(self.this_trait, 'pubmed_id') else None
+ self.ncbi_gene_link = webqtlConfig.NCBI_LOCUSID % self.this_trait.geneid if check_if_attr_exists(self.this_trait, 'geneid') else None
+ self.omim_link = webqtlConfig.OMIM_ID % self.this_trait.omim if check_if_attr_exists(self.this_trait, 'omim') else None
+ self.homologene_link = webqtlConfig.HOMOLOGENE_ID % self.this_trait.homologeneid if check_if_attr_exists(self.this_trait, 'homologeneid') else None
+
+ self.genbank_link = None
+ if check_if_attr_exists(self.this_trait, 'genbankid'):
+ genbank_id = '|'.join(self.this_trait.genbankid.split('|')[0:10])
+ if genbank_id[-1] == '|':
+ genbank_id = genbank_id[0:-1]
+ self.genbank_link = webqtlConfig.GENBANK_ID % genbank_id
+
+ self.uniprot_link = None
+ if check_if_attr_exists(self.this_trait, 'uniprotid'):
+ self.uniprot_link = webqtlConfig.UNIPROT_URL % self.this_trait.uniprotid
+
+ self.genotation_link = self.rgd_link = self.gtex_link = self.genebridge_link = self.ucsc_blat_link = self.biogps_link = self.protein_atlas_link = None
+ self.string_link = self.panther_link = self.aba_link = self.ebi_gwas_link = self.wiki_pi_link = self.genemania_link = self.ensembl_link = None
+ if self.this_trait.symbol:
+ self.genotation_link = webqtlConfig.GENOTATION_URL % self.this_trait.symbol
+ self.gtex_link = webqtlConfig.GTEX_URL % self.this_trait.symbol
+ self.string_link = webqtlConfig.STRING_URL % self.this_trait.symbol
+ self.panther_link = webqtlConfig.PANTHER_URL % self.this_trait.symbol
+ self.ebi_gwas_link = webqtlConfig.EBIGWAS_URL % self.this_trait.symbol
+ self.protein_atlas_link = webqtlConfig.PROTEIN_ATLAS_URL % self.this_trait.symbol
+ #self.open_targets_link = webqtlConfig.OPEN_TARGETS_URL % self.this_trait.symbol
+
+ if self.dataset.group.species == "mouse" or self.dataset.group.species == "human":
+ self.rgd_link = webqtlConfig.RGD_URL % (self.this_trait.symbol, self.dataset.group.species.capitalize())
+ if self.dataset.group.species == "mouse":
+ self.genemania_link = webqtlConfig.GENEMANIA_URL % ("mus-musculus", self.this_trait.symbol)
+ else:
+ self.genemania_link = webqtlConfig.GENEMANIA_URL % ("homo-sapiens", self.this_trait.symbol)
+
+ if self.dataset.group.species == "mouse":
+ self.aba_link = webqtlConfig.ABA_URL % self.this_trait.symbol
+
+ query = """SELECT chromosome, txStart, txEnd
+ FROM GeneList
+ WHERE geneSymbol = '{}'""".format(self.this_trait.symbol)
+
+ results = g.db.execute(query).fetchone()
+ if results:
+ chr, transcript_start, transcript_end = results
+ else:
+ chr = transcript_start = transcript_end = None
+
+ if chr and transcript_start and transcript_end and self.this_trait.refseq_transcriptid:
+ transcript_start = int(transcript_start*1000000)
+ transcript_end = int(transcript_end*1000000)
+ self.ucsc_blat_link = webqtlConfig.UCSC_REFSEQ % ('mm10', self.this_trait.refseq_transcriptid, chr, transcript_start, transcript_end)
+
+ if self.dataset.group.species == "rat":
+ self.rgd_link = webqtlConfig.RGD_URL % (self.this_trait.symbol, self.dataset.group.species.capitalize())
+ self.genemania_link = webqtlConfig.GENEMANIA_URL % ("rattus-norvegicus", self.this_trait.symbol)
+
+ query = """SELECT kgID, chromosome, txStart, txEnd
+ FROM GeneList_rn33
+ WHERE geneSymbol = '{}'""".format(self.this_trait.symbol)
+
+ results = g.db.execute(query).fetchone()
+ if results:
+ kgId, chr, transcript_start, transcript_end = results
+ else:
+ kgId = chr = transcript_start = transcript_end = None
+
+ if chr and transcript_start and transcript_end and kgId:
+ transcript_start = int(transcript_start*1000000) # Convert to bases from megabases
+ transcript_end = int(transcript_end*1000000)
+ self.ucsc_blat_link = webqtlConfig.UCSC_REFSEQ % ('rn6', kgId, chr, transcript_start, transcript_end)
+
+ if self.this_trait.geneid and (self.dataset.group.species == "mouse" or self.dataset.group.species == "rat" or self.dataset.group.species == "human"):
+ self.biogps_link = webqtlConfig.BIOGPS_URL % (self.dataset.group.species, self.this_trait.geneid)
+ self.gemma_link = webqtlConfig.GEMMA_URL % self.this_trait.geneid
+
+ if self.dataset.group.species == "human":
+ self.aba_link = webqtlConfig.ABA_URL % self.this_trait.geneid
def build_correlation_tools(self):
if self.temp_trait == True:
@@ -162,19 +351,18 @@ class ShowTrait(object):
# We're checking a string here!
assert isinstance(this_group, basestring), "We need a string type thing here"
- if this_group[:3] == 'BXD':
+ if this_group[:3] == 'BXD' and this_group != "BXD-Harvested":
this_group = 'BXD'
if this_group:
- #dataset_menu = self.dataset.group.datasets()
if self.temp_trait == True:
dataset_menu = data_set.datasets(this_group)
else:
dataset_menu = data_set.datasets(this_group, self.dataset.group)
dataset_menu_selected = None
if len(dataset_menu):
- if self.this_trait and self.this_trait.dataset:
- dataset_menu_selected = self.this_trait.dataset.name
+ if self.dataset:
+ dataset_menu_selected = self.dataset.name
return_results_menu = (100, 200, 500, 1000, 2000, 5000, 10000, 15000, 20000)
return_results_menu_selected = 500
@@ -184,59 +372,128 @@ class ShowTrait(object):
return_results_menu = return_results_menu,
return_results_menu_selected = return_results_menu_selected,)
-
- def make_sample_lists(self, this_trait):
+ def make_sample_lists(self):
all_samples_ordered = self.dataset.group.all_samples_ordered()
+ parent_f1_samples = []
+ if self.dataset.group.parlist and self.dataset.group.f1list:
+ parent_f1_samples = self.dataset.group.parlist + self.dataset.group.f1list
+
primary_sample_names = list(all_samples_ordered)
- other_sample_names = []
- for sample in this_trait.data.keys():
- if (this_trait.data[sample].name2 in primary_sample_names) and (this_trait.data[sample].name not in primary_sample_names):
- primary_sample_names.append(this_trait.data[sample].name)
- primary_sample_names.remove(this_trait.data[sample].name2)
- elif sample not in all_samples_ordered:
- all_samples_ordered.append(sample)
- other_sample_names.append(sample)
-
- if self.dataset.group.species == "human":
- primary_sample_names += other_sample_names
-
- primary_samples = SampleList(dataset = self.dataset,
- sample_names=primary_sample_names,
- this_trait=this_trait,
- sample_group_type='primary',
- header="%s Only" % (self.dataset.group.name))
- logger.debug("primary_samples is: ", pf(primary_samples))
-
- logger.debug("other_sample_names2:", other_sample_names)
- if other_sample_names and self.dataset.group.species != "human" and self.dataset.group.name != "CFW":
- parent_f1_samples = None
- if self.dataset.group.parlist and self.dataset.group.f1list:
- parent_f1_samples = self.dataset.group.parlist + self.dataset.group.f1list
-
- other_sample_names.sort() #Sort other samples
- if parent_f1_samples:
- other_sample_names = parent_f1_samples + other_sample_names
-
- logger.debug("other_sample_names:", other_sample_names)
-
- other_samples = SampleList(dataset=self.dataset,
- sample_names=other_sample_names,
- this_trait=this_trait,
- sample_group_type='other',
- header="Non-%s" % (self.dataset.group.name))
-
- self.sample_groups = (primary_samples, other_samples)
+ if not self.temp_trait:
+ other_sample_names = []
+ for sample in self.this_trait.data.keys():
+ if (self.this_trait.data[sample].name2 in primary_sample_names) and (self.this_trait.data[sample].name not in primary_sample_names):
+ primary_sample_names.append(self.this_trait.data[sample].name)
+ primary_sample_names.remove(self.this_trait.data[sample].name2)
+ elif sample not in all_samples_ordered:
+ all_samples_ordered.append(sample)
+ other_sample_names.append(sample)
+
+ #ZS: CFW is here because the .geno file doesn't properly contain its full list of samples. This should probably be fixed.
+ if self.dataset.group.species == "human" or (set(primary_sample_names) == set(parent_f1_samples)) or self.dataset.group.name == "CFW":
+ primary_sample_names += other_sample_names
+ other_sample_names = []
+
+ if other_sample_names:
+ primary_header = "%s Only" % (self.dataset.group.name)
+ else:
+ primary_header = "Samples"
+ primary_samples = SampleList(dataset = self.dataset,
+ sample_names=primary_sample_names,
+ this_trait=self.this_trait,
+ sample_group_type='primary',
+ header=primary_header)
+
+ #if other_sample_names and self.dataset.group.species != "human" and self.dataset.group.name != "CFW":
+ if len(other_sample_names) > 0:
+ other_sample_names.sort() #Sort other samples
+ if parent_f1_samples:
+ other_sample_names = parent_f1_samples + other_sample_names
+
+ other_samples = SampleList(dataset=self.dataset,
+ sample_names=other_sample_names,
+ this_trait=self.this_trait,
+ sample_group_type='other',
+ header="Other")
+
+ self.sample_groups = (primary_samples, other_samples)
+ else:
+ self.sample_groups = (primary_samples,)
else:
+ primary_samples = SampleList(dataset = self.dataset,
+ sample_names=primary_sample_names,
+ this_trait=self.trait_vals,
+ sample_group_type='primary',
+ header="%s Only" % (self.dataset.group.name))
self.sample_groups = (primary_samples,)
- #TODO: Figure out why this if statement is written this way - Zach
- #if (other_sample_names or (fd.f1list and this_trait.data.has_key(fd.f1list[0]))
- # or (fd.f1list and this_trait.data.has_key(fd.f1list[1]))):
- # logger.debug("hjs")
+ self.primary_sample_names = primary_sample_names
self.dataset.group.allsamples = all_samples_ordered
+def quantile_normalize_vals(sample_groups):
+ def normf(trait_vals):
+ ranked_vals = ss.rankdata(trait_vals)
+ p_list = []
+ for i, val in enumerate(trait_vals):
+ p_list.append(((i+1) - 0.5)/len(trait_vals))
+
+ z = ss.norm.ppf(p_list)
+
+ normed_vals = []
+ for rank in ranked_vals:
+ normed_vals.append("%0.3f" % z[int(rank)-1])
+
+ return normed_vals
+
+ qnorm_by_group = []
+ for sample_type in sample_groups:
+ trait_vals = []
+ for sample in sample_type.sample_list:
+ try:
+ trait_vals.append(float(sample.value))
+ except:
+ continue
+
+ qnorm_vals = normf(trait_vals)
+ qnorm_vals_with_x = []
+ counter = 0
+ for sample in sample_type.sample_list:
+ if sample.display_value == "x":
+ qnorm_vals_with_x.append("x")
+ else:
+ qnorm_vals_with_x.append(qnorm_vals[counter])
+ counter += 1
+
+ qnorm_by_group.append(qnorm_vals_with_x)
+
+ return qnorm_by_group
+
+def get_z_scores(sample_groups):
+ zscore_by_group = []
+ for sample_type in sample_groups:
+ trait_vals = []
+ for sample in sample_type.sample_list:
+ try:
+ trait_vals.append(float(sample.value))
+ except:
+ continue
+
+ zscores = ss.mstats.zscore(np.array(trait_vals)).tolist()
+ zscores_with_x = []
+ counter = 0
+ for sample in sample_type.sample_list:
+ if sample.display_value == "x":
+ zscores_with_x.append("x")
+ else:
+ zscores_with_x.append("%0.3f" % zscores[counter])
+ counter += 1
+
+ zscore_by_group.append(zscores_with_x)
+
+ return zscore_by_group
+
def get_nearest_marker(this_trait, this_db):
this_chr = this_trait.locus_chr
logger.debug("this_chr:", this_chr)
@@ -259,24 +516,85 @@ def get_nearest_marker(this_trait, this_db):
#return "", ""
else:
return result[0][0]
- #return result[0][0], result[1][0]
-def get_genofiles(this_trait):
- jsonfile = "%s/%s.json" % (webqtlConfig.GENODIR, this_trait.dataset.group.name)
- try:
- f = open(jsonfile)
- except:
- return None
- jsondata = json.load(f)
- return jsondata['genofile']
+def get_table_widths(sample_groups, has_num_cases=False):
+ stats_table_width = 250
+ if len(sample_groups) > 1:
+ stats_table_width = 450
-def get_trait_table_width(sample_groups):
- table_width = 20
+ trait_table_width = 380
if sample_groups[0].se_exists():
- table_width += 15
- if (table_width + len(sample_groups[0].attributes)*10) > 100:
- table_width = 100
+ trait_table_width += 70
+ if has_num_cases:
+ trait_table_width += 30
+ trait_table_width += len(sample_groups[0].attributes)*70
+
+ trait_table_width = str(trait_table_width) + "px"
+
+ return stats_table_width, trait_table_width
+
+def has_num_cases(this_trait):
+ has_n = False
+ if this_trait.dataset.type != "ProbeSet" and this_trait.dataset.type != "Geno":
+ for name, sample in this_trait.data.iteritems():
+ if sample.num_cases:
+ has_n = True
+ break
+
+ return has_n
+
+def get_trait_units(this_trait):
+ unit_type = ""
+ inside_brackets = False
+ if this_trait.description_fmt:
+ if ("[" in this_trait.description_fmt) and ("]" in this_trait.description_fmt):
+ for i in this_trait.description_fmt:
+ if inside_brackets:
+ if i != "]":
+ unit_type += i
+ else:
+ inside_brackets = False
+ if i == "[":
+ inside_brackets = True
+
+ if unit_type == "":
+ unit_type = "Value"
+
+ return unit_type
+
+def check_if_attr_exists(the_trait, id_type):
+ if hasattr(the_trait, id_type):
+ if getattr(the_trait, id_type) == None or getattr(the_trait, id_type) == "":
+ return False
+ else:
+ return True
else:
- table_width += len(sample_groups[0].attributes)*10
+ return False
+
+def get_ncbi_summary(this_trait):
+ if check_if_attr_exists(this_trait, 'geneid'):
+ #ZS: Need to switch this try/except to something that checks the output later
+ try:
+ response = requests.get("http://eutils.ncbi.nlm.nih.gov/entrez/eutils/esummary.fcgi?db=gene&id=%s&retmode=json" % this_trait.geneid)
+ summary = json.loads(response.content)['result'][this_trait.geneid]['summary']
+ return summary
+ except:
+ return None
+ else:
+ return None
+
+def get_categorical_variables(this_trait, sample_list):
+ categorical_var_list = []
+
+ if len(sample_list.attributes) > 0:
+ for attribute in sample_list.attributes:
+ attribute_vals = []
+ for sample_name in this_trait.data.keys():
+ attribute_vals.append(this_trait.data[sample_name].extra_attributes[sample_list.attributes[attribute].name])
+
+ num_distinct = len(set(attribute_vals))
+
+ if num_distinct < 10:
+ categorical_var_list.append(sample_list.attributes[attribute].name)
- return table_width
+ return categorical_var_list \ No newline at end of file
diff --git a/wqflask/wqflask/show_trait/show_trait_page.py b/wqflask/wqflask/show_trait/show_trait_page.py
deleted file mode 100644
index de818a64..00000000
--- a/wqflask/wqflask/show_trait/show_trait_page.py
+++ /dev/null
@@ -1,141 +0,0 @@
-# Copyright (C) University of Tennessee Health Science Center, Memphis, TN.
-#
-# This program is free software: you can redistribute it and/or modify it
-# under the terms of the GNU Affero General Public License
-# as published by the Free Software Foundation, either version 3 of the
-# License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-# See the GNU Affero General Public License for more details.
-#
-# This program is available from Source Forge: at GeneNetwork Project
-# (sourceforge.net/projects/genenetwork/).
-#
-# Contact Drs. Robert W. Williams and Xiaodong Zhou (2010)
-# at rwilliams@uthsc.edu and xzhou15@uthsc.edu
-#
-#
-#
-# This module is used by GeneNetwork project (www.genenetwork.org)
-#
-# Created by GeneNetwork Core Team 2010/08/10
-#
-# Last updated by GeneNetwork Core Team 2010/10/20
-
-from __future__ import division, print_function
-
-from flask import request
-
-from htmlgen import HTMLgen2 as HT
-
-from base import webqtlConfig
-from utility import webqtlUtil
-from base.webqtlTrait import webqtlTrait
-from base.templatePage import templatePage
-from DataEditingPage import DataEditingPage
-
-
-
-class ShowTraitPage(DataEditingPage):
-
- def __init__(self, fd, traitInfos = None):
- self.fd = fd
-
- # This sets self.cursor
- assert self.openMysql(), "No database"
-
- # When is traitInfos used?
- if traitInfos:
- database, ProbeSetID, CellID = traitInfos
- else:
- print("fd is:", fd)
- database = fd['database']
- ProbeSetID = fd['ProbeSetID']
-
- CellID = fd.get('CellID')
-
-
- thisTrait = webqtlTrait(db=database, name=ProbeSetID, cellid=CellID, cursor=self.cursor)
-
- if thisTrait.db.type == "ProbeSet":
-
- self.cursor.execute('''SELECT Id, Name, FullName, confidentiality, AuthorisedUsers
- FROM ProbeSetFreeze WHERE Name = "%s"''' % database)
-
- indId, indName, indFullName, confidential, AuthorisedUsers = self.cursor.fetchall()[0]
-
- if confidential == 1:
- access_to_confidential_dataset = 0
-
- #for the dataset that confidentiality is 1
- #1. 'admin' and 'root' can see all of the dataset
- #2. 'user' can see the dataset that AuthorisedUsers contains his id(stored in the Id field of User table)
- if webqtlConfig.USERDICT[self.privilege] > webqtlConfig.USERDICT['user']:
- access_to_confidential_dataset = 1
- else:
- AuthorisedUsersList=AuthorisedUsers.split(',')
- if AuthorisedUsersList.__contains__(self.userName):
- access_to_confidential_dataset = 1
-
- if not access_to_confidential_dataset:
- #Error, Confidential Database
- heading = "Show Database"
- detail = ["The %s database you selected is not open to the public \
- at this time, please go back and select other database." % indFullName]
- self.error(heading=heading,detail=detail,error="Confidential Database")
- return
- print("environ:", request.environ)
-
- # Becuase of proxying remote_addr is probably localhost, so we first try for
- # HTTP_X_FORWARDED_FOR
- user_ip = request.environ.get('HTTP_X_FORWARDED_FOR') or request.remote_addr # in old app was fd.remote_ip
- print("user_ip is:", user_ip)
- query = "SELECT count(id) FROM AccessLog WHERE ip_address = %s and \
- UNIX_TIMESTAMP()-UNIX_TIMESTAMP(accesstime)<86400"
- self.cursor.execute(query,user_ip)
- daycount = self.cursor.fetchall()
- if daycount:
- daycount = daycount[0][0]
- if daycount > webqtlConfig.DAILYMAXIMUM:
- heading = "Retrieve Data"
- detail = ['For security reasons, the maximum access to a database is \
- %d times per day per ip address. You have reached the limit, please \
- try it again tomorrow.' % webqtlConfig.DAILYMAXIMUM]
- self.error(heading=heading,detail=detail)
- return
-
-
- if thisTrait.db.type != 'ProbeSet' and thisTrait.cellid:
- heading = "Retrieve Data"
- detail = ['The Record you requested doesn\'t exist!']
- self.error(heading=heading,detail=detail)
- return
-
- ##identification, etc.
- fd.identification = '%s : %s' % (thisTrait.db.shortname,ProbeSetID)
- thisTrait.returnURL = webqtlConfig.CGIDIR + webqtlConfig.SCRIPTFILE + '?FormID=showDatabase&database=%s\
- &ProbeSetID=%s&RISet=%s&parentsf1=on' %(database, ProbeSetID, fd['RISet'])
-
- if CellID:
- fd.identification = '%s/%s'%(fd.identification, CellID)
- thisTrait.returnURL = '%s&CellID=%s' % (thisTrait.returnURL, CellID)
-
- thisTrait.retrieveInfo()
- thisTrait.retrieveData()
- self.updMysql()
- self.cursor.execute("insert into AccessLog(accesstime,ip_address) values(Now(),%s)", user_ip)
- self.openMysql()
-
-
- ##read genotype file
- fd.RISet = thisTrait.riset
- fd.readGenotype()
-
- #if webqtlUtil.ListNotNull(map(lambda x:x.var, thisTrait.data.values())):
- if any([x.variance for x in thisTrait.data.values()]):
- fd.display_variance = True
- fd.formID = 'varianceChoice'
-
- DataEditingPage.__init__(self, fd, thisTrait)
diff --git a/wqflask/wqflask/snp_browser/__init__.py b/wqflask/wqflask/snp_browser/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/wqflask/wqflask/snp_browser/__init__.py
diff --git a/wqflask/wqflask/snp_browser/snp_browser.py b/wqflask/wqflask/snp_browser/snp_browser.py
new file mode 100644
index 00000000..73ab8798
--- /dev/null
+++ b/wqflask/wqflask/snp_browser/snp_browser.py
@@ -0,0 +1,896 @@
+from __future__ import absolute_import, print_function, division
+
+from flask import Flask, g, url_for
+
+import string
+import piddle as pid
+
+from utility.logger import getLogger
+logger = getLogger(__name__ )
+
+from base import species
+from base import webqtlConfig
+
+class SnpBrowser(object):
+
+ def __init__(self, start_vars):
+ self.strain_lists = get_browser_sample_lists()
+ self.initialize_parameters(start_vars)
+ self.limit_number = 10000
+
+ if self.first_run == "false":
+ self.filtered_results = self.get_browser_results()
+
+ if len(self.filtered_results) <= self.limit_number:
+ self.table_rows = self.get_table_rows()
+ else:
+ self.empty_columns = None
+ self.table_rows = []
+
+ if self.limit_strains == "true":
+ self.header_fields, self.empty_field_count = get_header_list(variant_type = self.variant_type, strains = self.chosen_strains, empty_columns = self.empty_columns)
+ else:
+ self.header_fields, self.empty_field_count = get_header_list(variant_type = self.variant_type, strains = self.strain_lists, species = self.species_name, empty_columns = self.empty_columns)
+
+ def initialize_parameters(self, start_vars):
+ if 'first_run' in start_vars:
+ self.first_run = "false"
+ else:
+ self.first_run = "true"
+ self.allele_list = []
+
+ self.variant_type = "SNP"
+ if 'variant' in start_vars:
+ self.variant_type = start_vars['variant']
+
+ self.species_name = "Mouse"
+ self.species_id = 1
+ if 'species' in start_vars:
+ self.species_name = start_vars['species']
+ if self.species_name.capitalize() == "Rat":
+ self.species_id = 2
+
+ self.mouse_chr_list = []
+ self.rat_chr_list = []
+ mouse_species_ob = species.TheSpecies(species_name="Mouse")
+ for key in mouse_species_ob.chromosomes.chromosomes:
+ self.mouse_chr_list.append(mouse_species_ob.chromosomes.chromosomes[key].name)
+ rat_species_ob = species.TheSpecies(species_name="Rat")
+ for key in rat_species_ob.chromosomes.chromosomes:
+ self.rat_chr_list.append(rat_species_ob.chromosomes.chromosomes[key].name)
+
+ if self.species_id == 1:
+ self.this_chr_list = self.mouse_chr_list
+ else:
+ self.this_chr_list = self.rat_chr_list
+
+ if self.first_run == "true":
+ self.chr = "19"
+ self.start_mb = 30.1
+ self.end_mb = 30.12
+ else:
+ if 'gene_name' in start_vars:
+ if start_vars['gene_name'] != "":
+ self.gene_name = start_vars['gene_name']
+ else:
+ self.gene_name = ""
+ self.chr = start_vars['chr']
+ try:
+ self.start_mb = float(start_vars['start_mb'])
+ self.end_mb = float(start_vars['end_mb'])
+ except:
+ self.start_mb = 0.0
+ self.end_mb = 0.0
+ else:
+ try:
+ self.chr = start_vars['chr']
+ self.start_mb = float(start_vars['start_mb'])
+ self.end_mb = float(start_vars['end_mb'])
+ except:
+ self.chr = "1"
+ self.start_mb = 0.0
+ self.end_mb = 0.0
+
+ self.limit_strains = "true"
+ if self.first_run == "false":
+ if 'limit_strains' not in start_vars:
+ self.limit_strains = "false"
+ else:
+ if start_vars['limit_strains'] == "false":
+ self.limit_strains = "false"
+
+ self.chosen_strains_mouse = ["C57BL/6J",
+ "DBA/2J",
+ "A/J",
+ "129S1/SvImJ",
+ "NOD/ShiLtJ",
+ "NZO/HlLtJ",
+ "WSB/EiJ",
+ "PWK/PhJ",
+ "CAST/EiJ"]
+ self.chosen_strains_rat = ["BN", "F344", "WLI", "WMI"]
+ if 'chosen_strains_mouse' in start_vars:
+ self.chosen_strains_mouse = start_vars['chosen_strains_mouse'].split(",")
+ if 'chosen_strains_rat' in start_vars:
+ self.chosen_strains_rat = start_vars['chosen_strains_rat'].split(",")
+
+ if self.species_id == 1:
+ self.chosen_strains = self.chosen_strains_mouse
+ else:
+ self.chosen_strains = self.chosen_strains_rat
+
+ self.domain = "All"
+ if 'domain' in start_vars:
+ self.domain = start_vars['domain']
+ self.function = "All"
+ if 'function' in start_vars:
+ self.function = start_vars['function']
+ self.source = "All"
+ if 'source' in start_vars:
+ self.source = start_vars['source']
+ self.criteria = ">="
+ if 'criteria' in start_vars:
+ self.criteria = start_vars['criteria']
+ self.score = 0.0
+ if 'score' in start_vars:
+ self.score = start_vars['score']
+
+ self.redundant = "false"
+ if self.first_run == "false" and 'redundant' in start_vars:
+ self.redundant = "true"
+ self.diff_alleles = "true"
+ if self.first_run == "false":
+ if 'diff_alleles' not in start_vars:
+ self.diff_alleles = "false"
+ else:
+ if start_vars['diff_alleles'] == "false":
+ self.diff_alleles = "false"
+
+ def get_browser_results(self):
+ self.snp_list = None
+
+ if self.gene_name != "":
+ if self.species_id != 0:
+ query = "SELECT geneSymbol, chromosome, txStart, txEnd FROM GeneList WHERE SpeciesId = %s AND geneSymbol = '%s'" % (self.species_id, self.gene_name)
+ else:
+ query = "SELECT geneSymbol, chromosome, txStart, txEnd FROM GeneList WHERE geneSymbol = '%s'" % (self.gene_name)
+ result = g.db.execute(query).fetchone()
+ if result:
+ self.gene_name, self.chr, self.start_mb, self.end_mb = result
+ else:
+ result_snp = None
+ if self.variant_type == "SNP":
+ if self.gene_name[:2] == "rs":
+ query = "SELECT Id, Chromosome, Position, Position+0.000001 FROM SnpAll WHERE Rs = '%s'" % self.gene_name
+ else:
+ if self.species_id != 0:
+ query = "SELECT Id, Chromosome, Position, Position+0.000001 FROM SnpAll where SpeciesId = %s AND SnpName = '%s'" % (self.species_id, self.gene_name)
+ else:
+ query = "SELECT Id, Chromosome, Position, Position+0.000001 FROM SnpAll where SnpName = '%s'" % (self.gene_name)
+ result_snp = g.db.execute(query).fetchall()
+ if result_snp:
+ self.snp_list = [item[0] for item in result_snp]
+ self.chr = result_snp[0][1]
+ self.start_mb = result_snp[0][2]
+ self.end_mb = result_snp[0][3]
+ else:
+ return []
+ elif self.variant_type == "InDel":
+ if self.gene_name[0] == "I":
+ if self.species_id != 0:
+ query = "SELECT Id, Chromosome, Mb_start, Mb_end FROM IndelAll WHERE SpeciesId = %s AND Name = '%s'" % (self.species_id, self.gene_name)
+ else:
+ query = "SELECT Id, Chromosome, Mb_start, Mb_end FROM IndelAll WHERE Name = '%s'" % (self.gene_name)
+ result_snp = g.db.execute(query).fetchall()
+ if result_snp:
+ self.snp_list = [item[0] for item in result_snp]
+ self.chr = result_snp[0][1]
+ self.start_mb = result_snp[0][2]
+ self.end_mb = result_snp[0][3]
+ else:
+ return []
+
+ if self.variant_type == "SNP":
+ mouse_query = """
+ SELECT
+ a.*, b.*
+ FROM
+ SnpAll a, SnpPattern b
+ WHERE
+ a.SpeciesId = %s AND a.Chromosome = '%s' AND
+ a.Position >= %.6f AND a.Position < %.6f AND
+ a.Id = b.SnpId
+ ORDER BY a.Position
+ """ % (self.species_id, self.chr, self.start_mb, self.end_mb)
+
+ rat_query = """
+ SELECT
+ a.*, b.*
+ FROM
+ SnpAll a, RatSnpPattern b
+ WHERE
+ a.SpeciesId = %s AND a.Chromosome = '%s' AND
+ a.Position >= %.6f AND a.Position < %.6f AND
+ a.Id = b.SnpId
+ ORDER BY a.Position
+ """ % (self.species_id, self.chr, self.start_mb, self.end_mb)
+ if self.species_id == 1:
+ query = mouse_query
+ elif self.species_id == 2:
+ query = rat_query
+
+ elif self.variant_type == "InDel":
+ if self.species_id != 0:
+ query = """
+ SELECT
+ DISTINCT a.Name, a.Chromosome, a.SourceId, a.Mb_start, a.Mb_end, a.Strand, a.Type, a.Size, a.InDelSequence, b.Name
+ FROM
+ IndelAll a, SnpSource b
+ WHERE
+ a.SpeciesId = '%s' AND a.Chromosome = '%s' AND
+ a.Mb_start >= %2.6f AND a.Mb_start < (%2.6f+.0010) AND
+ b.Id = a.SourceId
+ ORDER BY a.Mb_start
+ """ % (self.species_id, self.chr, self.start_mb, self.end_mb)
+ else:
+ query = """
+ SELECT
+ DISTINCT a.Name, a.Chromosome, a.SourceId, a.Mb_start, a.Mb_end, a.Strand, a.Type, a.Size, a.InDelSequence, b.Name
+ FROM
+ IndelAll a, SnpSource b
+ WHERE
+ a.Chromosome = '%s' AND
+ a.Mb_start >= %2.6f AND a.Mb_start < (%2.6f+.0010) AND
+ b.Id = a.SourceId
+ ORDER BY a.Mb_start
+ """ % (self.chr, self.start_mb, self.end_mb)
+
+ results_all = g.db.execute(query).fetchall()
+
+ return self.filter_results(results_all)
+
+ def filter_results(self, results):
+ filtered_results = []
+ strain_index_list = [] #ZS: List of positions of selected strains in strain list
+ last_mb = -1
+
+ if self.limit_strains == "true" and len(self.chosen_strains) > 0:
+ for item in self.chosen_strains:
+ index = self.strain_lists[self.species_name.lower()].index(item)
+ strain_index_list.append(index)
+
+ for seq, result in enumerate(results):
+ result = list(result)
+
+ if self.variant_type == "SNP":
+ display_strains = []
+ snp_id, species_id, snp_name, rs, chr, mb, mb_2016, alleles, snp_source, conservation_score = result[:10]
+ effect_list = result[10:28]
+ if self.species_id == 1:
+ self.allele_list = result[30:]
+ elif self.species_id == 2:
+ self.allele_list = result[31:]
+
+ if self.limit_strains == "true" and len(self.chosen_strains) > 0:
+ for index in strain_index_list:
+ if self.species_id == 1:
+ display_strains.append(result[29+index])
+ elif self.species_id == 2:
+ display_strains.append(result[31+index])
+ self.allele_list = display_strains
+
+ effect_info_dict = get_effect_info(effect_list)
+ coding_domain_list = ['Start Gained', 'Start Lost', 'Stop Gained', 'Stop Lost', 'Nonsynonymous', 'Synonymous']
+ intron_domain_list = ['Splice Site', 'Nonsplice Site']
+
+ for key in effect_info_dict:
+ if key in coding_domain_list:
+ domain = ['Exon', 'Coding']
+ elif key in ['3\' UTR', '5\' UTR']:
+ domain = ['Exon', key]
+ elif key == "Unknown Effect In Exon":
+ domain = ['Exon', '']
+ elif key in intron_domain_list:
+ domain = ['Intron', key]
+ else:
+ domain = [key, '']
+
+ if 'Intergenic' in domain:
+ if self.gene_name != "":
+ gene_id = get_gene_id(self.species_id, self.gene_name)
+ gene = [gene_id, self.gene_name]
+ else:
+ gene = check_if_in_gene(species_id, chr, mb)
+ transcript = exon = function = function_details = ''
+ if self.redundant == "false" or last_mb != mb: # filter redundant
+ if self.include_record(domain, function, snp_source, conservation_score):
+ info_list = [snp_name, rs, chr, mb, alleles, gene, transcript, exon, domain, function, function_details, snp_source, conservation_score, snp_id]
+ info_list.extend(self.allele_list)
+ filtered_results.append(info_list)
+ last_mb = mb
+ else:
+ gene_list, transcript_list, exon_list, function_list, function_details_list = effect_info_dict[key]
+ for index, item in enumerate(gene_list):
+ gene = item
+ transcript = transcript_list[index]
+ if exon_list:
+ exon = exon_list[index]
+ else:
+ exon = ""
+
+ if function_list:
+ function = function_list[index]
+ if function == "Unknown Effect In Exon":
+ function = "Unknown"
+ else:
+ function = ""
+
+ if function_details_list:
+ function_details = "Biotype: " + function_details_list[index]
+ else:
+ function_details = ""
+
+ if self.redundant == "false" or last_mb != mb:
+ if self.include_record(domain, function, snp_source, conservation_score):
+ info_list = [snp_name, rs, chr, mb, alleles, gene, transcript, exon, domain, function, function_details, snp_source, conservation_score, snp_id]
+ info_list.extend(self.allele_list)
+ filtered_results.append(info_list)
+ last_mb = mb
+
+ elif self.variant_type == "InDel":
+ # The order of variables is important; this applies to anything from the variant table as indel
+ indel_name, indel_chr, source_id, indel_mb_start, indel_mb_end, indel_strand, indel_type, indel_size, indel_sequence, source_name = result
+
+ indel_type = indel_type.title()
+ if self.redundant == "false" or last_mb != indel_mb_start:
+ gene = "No Gene"
+ domain = conservation_score = snp_id = snp_name = rs = flank_3 = flank_5 = ncbi = function = ""
+ if self.include_record(domain, function, source_name, conservation_score):
+ filtered_results.append([indel_name, indel_chr, indel_mb_start, indel_mb_end, indel_strand, indel_type, indel_size, indel_sequence, source_name])
+ last_mb = indel_mb_start
+
+ else:
+ filtered_results.append(result)
+
+ return filtered_results
+
+ def get_table_rows(self):
+ """ Take results and put them into the order and format necessary for the tables rows """
+
+ if self.variant_type == "SNP":
+ gene_name_list = []
+ for item in self.filtered_results:
+ if item[5] and item[5] != "":
+ gene_name = item[5][1]
+ # eliminate duplicate gene_name
+ if gene_name and (gene_name not in gene_name_list):
+ gene_name_list.append(gene_name)
+ if len(gene_name_list) > 0:
+ gene_id_name_dict = get_gene_id_name_dict(self.species_id, gene_name_list)
+
+ #ZS: list of booleans representing which columns are entirely empty, so they aren't displayed on the page; only including ones that are sometimes empty (since there's always a location, etc)
+ self.empty_columns = {
+ "snp_source": "false",
+ "conservation_score": "false",
+ "gene_name": "false",
+ "transcript": "false",
+ "exon": "false",
+ "domain_2": "false",
+ "function": "false",
+ "function_details": "false"
+ }
+
+ the_rows = []
+ for i, result in enumerate(self.filtered_results):
+ this_row = []
+ if self.variant_type == "SNP":
+ snp_name, rs, chr, mb, alleles, gene, transcript, exon, domain, function, function_details, snp_source, conservation_score, snp_id = result[:14]
+ allele_value_list = result[14:]
+ if rs:
+ snp_url = webqtlConfig.DBSNP % (rs)
+ snp_name = rs
+ else:
+ rs = ""
+ start_bp = int(mb*1000000 - 100)
+ end_bp = int(mb*1000000 + 100)
+ position_info = "chr%s:%d-%d" % (chr, start_bp, end_bp)
+ if self.species_id == 2:
+ snp_url = webqtlConfig.GENOMEBROWSER_URL % ("rn6", position_info)
+ else:
+ snp_url = webqtlConfig.GENOMEBROWSER_URL % ("mm10", position_info)
+
+ mb = float(mb)
+ mb_formatted = "%2.6f" % mb
+
+ if snp_source == "Sanger/UCLA":
+ source_url_1 = "http://www.sanger.ac.uk/resources/mouse/genomes/"
+ source_url_2 = "http://mouse.cs.ucla.edu/mousehapmap/beta/wellcome.html"
+ source_urls = [source_url_1, source_url_2]
+ self.empty_columns['snp_source'] = "true"
+ else:
+ source_urls = []
+
+ if not conservation_score:
+ conservation_score = ""
+ else:
+ self.empty_columns['conservation_score'] = "true"
+
+ if gene:
+ gene_name = gene[1]
+ # if gene_name has related gene_id, use gene_id for NCBI search
+ if (gene_name in gene_id_name_dict) and (gene_id_name_dict[gene_name] != None and gene_id_name_dict[gene_name] != ""):
+ gene_id = gene_id_name_dict[gene[1]]
+ gene_link = webqtlConfig.NCBI_LOCUSID % gene_id
+ else:
+ gene_link = "http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?CMD=search&DB=gene&term=%s" % gene_name
+
+ self.empty_columns['gene_name'] = "true"
+ else:
+ gene_name = ""
+ gene_link = ""
+
+ if transcript:
+ transcript_link = webqtlConfig.ENSEMBLETRANSCRIPT_URL % (transcript)
+ self.empty_columns['transcript'] = "true"
+ else:
+ transcript_link = ""
+
+ if exon:
+ exon = exon[1] # exon[0] is exon_id, exon[1] is exon_rank
+ self.empty_columns['exon'] = "true"
+ else:
+ exon = ""
+
+ if domain:
+ domain_1 = domain[0]
+ domain_2 = domain[1]
+ if domain_1 == "Intergenic" and gene != "":
+ domain_1 = gene_name
+ else:
+ if domain_1 == "Exon":
+ domain_1 = domain_1 + " " + exon
+
+ if domain_2 != "":
+ self.empty_columns['domain_2'] = "true"
+
+ if function:
+ self.empty_columns['function'] = "true"
+
+ function_list = []
+ if function_details:
+ function_list = string.split(string.strip(function_details), ",")
+ function_list = map(string.strip, function_list)
+ function_list[0] = function_list[0].title()
+ function_details = ", ".join(item for item in function_list)
+ function_details = function_details.replace("_", " ")
+ function_details = function_details.replace("/", " -> ")
+ if function_details == "Biotype: Protein Coding":
+ function_details = function_details + ", Coding Region Unknown"
+
+ self.empty_columns['function_details'] = "true"
+
+ #[snp_href, chr, mb_formatted, alleles, snp_source_cell, conservation_score, gene_name_cell, transcript_href, exon, domain_1, domain_2, function, function_details]
+
+ base_color_dict = {"A": "#C33232", "C": "#1569C7", "T": "#CFCF32", "G": "#32C332",
+ "t": "#FF6", "c": "#5CB3FF", "a": "#F66", "g": "#CF9", ":": "#FFFFFF", "-": "#FFFFFF", "?": "#FFFFFF"}
+
+
+ the_bases = []
+ for j, item in enumerate(allele_value_list):
+ if item and isinstance(item, basestring):
+ this_base = [str(item), base_color_dict[item]]
+ else:
+ this_base = ""
+
+ the_bases.append(this_base)
+
+ this_row = {
+ "index": i + 1,
+ "rs": str(rs),
+ "snp_url": str(snp_url),
+ "snp_name": str(snp_name),
+ "chr": str(chr),
+ "mb_formatted": mb_formatted,
+ "alleles": str(alleles),
+ "snp_source": str(snp_source),
+ "source_urls": source_urls,
+ "conservation_score": str(conservation_score),
+ "gene_name": str(gene_name),
+ "gene_link": str(gene_link),
+ "transcript": str(transcript),
+ "transcript_link": str(transcript_link),
+ "exon": str(exon),
+ "domain_1": str(domain_1),
+ "domain_2": str(domain_2),
+ "function": str(function),
+ "function_details": str(function_details),
+ "allele_value_list": the_bases
+ }
+
+ elif self.variant_type == "InDel":
+ indel_name, indel_chr, indel_mb_s, indel_mb_e, indel_strand, indel_type, indel_size, indel_sequence, source_name = result
+ this_row = {
+ "index": i,
+ "indel_name": str(indel_name),
+ "indel_chr": str(indel_chr),
+ "indel_mb_s": str(indel_mb_s),
+ "indel_mb_e": str(indel_mb_e),
+ "indel_strand": str(indel_strand),
+ "indel_type": str(indel_type),
+ "indel_size": str(indel_size),
+ "indel_sequence": str(indel_sequence),
+ "source_name": str(source_name)
+ }
+ #this_row = [indel_name, indel_chr, indel_mb_s, indel_mb_e, indel_strand, indel_type, indel_size, indel_sequence, source_name]
+ else:
+ this_row = {}
+
+ the_rows.append(this_row)
+
+ return the_rows
+
+
+ def include_record(self, domain, function, snp_source, conservation_score):
+ """ Decide whether to add this record """
+
+ domain_satisfied = True
+ function_satisfied = True
+ different_alleles_satisfied = True
+ source_satisfied = True
+
+ if domain:
+ if len(domain) == 0:
+ if self.domain != "All":
+ domain_satisfied = False
+ else:
+ domain_satisfied = False
+ if domain[0].startswith(self.domain) or domain[1].startswith(self.domain) or self.domain == "All":
+ domain_satisfied = True
+ else:
+ if self.domain != "All":
+ domain_satisfied = False
+
+ if snp_source:
+ if len(snp_source) == 0:
+ if self.source != "All":
+ source_satisfied = False
+ else:
+ source_satisfied = False
+ if snp_source.startswith(self.source) or self.source == "All":
+ source_satisfied = True
+ else:
+ if self.source != "All":
+ source_satisfied = False
+
+ if function:
+ if len(function) == 0:
+ if self.function != "All":
+ function_satisfied = False
+ else:
+ function_satisfied = False
+ if self.function != "All":
+ if function.startswith(self.function):
+ function_satisfied = True
+ else:
+ function_satisfied = True
+ else:
+ if self.function != "All":
+ function_satisfied = False
+
+ if conservation_score:
+ score_as_float = float(conservation_score)
+ try:
+ input_score_float = float(self.score) # the user-input score
+ except:
+ input_score_float = 0.0
+
+ if self.criteria == ">=":
+ if score_as_float >= input_score_float:
+ score_satisfied = True
+ else:
+ score_satisfied = False
+ elif self.criteria == "==":
+ if score_as_float == input_score_float:
+ score_satisfied = True
+ else:
+ score_satisfied = False
+ elif self.criteria == "<=":
+ if score_as_float <= input_score_float:
+ score_satisfied = True
+ else:
+ score_satisfied = False
+ else:
+ try:
+ if float(self.score) > 0:
+ score_satisfied = False
+ else:
+ score_satisfied = True
+ except:
+ score_satisfied = True
+
+ if self.variant_type == "SNP" and self.diff_alleles == "true":
+ this_allele_list = []
+
+ for item in self.allele_list:
+ if item and isinstance(item, basestring) and (item.lower() not in this_allele_list) and (item != "-"):
+ this_allele_list.append(item.lower())
+
+ total_allele_count = len(this_allele_list)
+ if total_allele_count <= 1:
+ different_alleles_satisfied = False
+ else:
+ different_alleles_satisfied = True
+ else:
+ different_alleles_satisfied = True
+
+ return domain_satisfied and function_satisfied and source_satisfied and score_satisfied and different_alleles_satisfied
+
+ def snp_density_map(self, query, results):
+
+ canvas_width = 900
+ canvas_height = 200
+ snp_canvas = pid.PILCanvas(size=(canvas_width, canvas_height))
+ left_offset, right_offset, top_offset, bottom_offset = (30, 30, 40, 50)
+ plot_width = canvas_width - left_offset - right_offset
+ plot_height = canvas_height - top_offset - bottom_offset
+ y_zero = top_offset + plot_height/2
+
+ x_scale = plot_width/(self.end_mb - self.start_mb)
+
+ #draw clickable image map at some point
+
+ n_click = 80.0
+ click_step = plot_width/n_click
+ click_mb_step = (self.end_mb - self.start_mb)/n_click
+
+ #for i in range(n_click):
+ # href = url_for('snp_browser', first_run="false", chosen_strains_mouse=self.chosen_strains_mouse, chosen_strains_rat=self.chosen_strains_rat, variant=self.variant_type, species=self.species_name, gene_name=self.gene_name, chr=self.chr, start_mb=self.start_mb, end_mb=self.end_mb, limit_strains=self.limit_strains, domain=self.domain, function=self.function, criteria=self.criteria, score=self.score, diff_alleles=self.diff_alleles)
+
+def get_browser_sample_lists(species_id=1):
+ strain_lists = {}
+ mouse_strain_list = []
+ query = "SHOW COLUMNS FROM SnpPattern;"
+ results = g.db.execute(query).fetchall();
+ for result in results[1:]:
+ mouse_strain_list.append(result[0])
+
+ rat_strain_list = []
+ query = "SHOW COLUMNS FROM RatSnpPattern;"
+ results = g.db.execute(query).fetchall();
+ for result in results[2:]:
+ rat_strain_list.append(result[0])
+
+ strain_lists['mouse'] = mouse_strain_list
+ strain_lists['rat'] = rat_strain_list
+
+ return strain_lists
+
+def get_header_list(variant_type, strains, species = None, empty_columns = None):
+ if species == "Mouse":
+ strain_list = strains['mouse']
+ elif species == "Rat":
+ strain_list = strains['rat']
+ else:
+ strain_list = strains
+
+ empty_field_count = 0 #ZS: This is an awkward way of letting the javascript know the index where the allele value columns start; there's probably a better way of doing this
+
+ header_fields = []
+ if variant_type == "SNP":
+ header_fields.append(['Index', 'SNP ID', 'Chr', 'Mb', 'Alleles', 'Source', 'ConScore', 'Gene', 'Transcript', 'Exon', 'Domain 1', 'Domain 2', 'Function', 'Details'])
+ header_fields.append(strain_list)
+
+ if empty_columns != None:
+ if empty_columns['snp_source'] == "false":
+ empty_field_count += 1
+ header_fields[0].remove('Source')
+ if empty_columns['conservation_score'] == "false":
+ empty_field_count += 1
+ header_fields[0].remove('ConScore')
+ if empty_columns['gene_name'] == "false":
+ empty_field_count += 1
+ header_fields[0].remove('Gene')
+ if empty_columns['transcript'] == "false":
+ empty_field_count += 1
+ header_fields[0].remove('Transcript')
+ if empty_columns['exon'] == "false":
+ empty_field_count += 1
+ header_fields[0].remove('Exon')
+ if empty_columns['domain_2'] == "false":
+ empty_field_count += 1
+ header_fields[0].remove('Domain 2')
+ if empty_columns['function'] == "false":
+ empty_field_count += 1
+ header_fields[0].remove('Function')
+ if empty_columns['function_details'] == "false":
+ empty_field_count += 1
+ header_fields[0].remove('Details')
+
+ elif variant_type == "InDel":
+ header_fields = ['Index', 'ID', 'Type', 'InDel Chr', 'Mb Start', 'Mb End', 'Strand', 'Size', 'Sequence', 'Source']
+
+ return header_fields, empty_field_count
+
+def get_effect_details_by_category(effect_name = None, effect_value = None):
+ gene_list = []
+ transcript_list = []
+ exon_list = []
+ function_list = []
+ function_detail_list = []
+ tmp_list = []
+
+ gene_group_list = ['Upstream', 'Downstream', 'Splice Site', 'Nonsplice Site', '3\' UTR']
+ biotype_group_list = ['Unknown Effect In Exon', 'Start Gained', 'Start Lost', 'Stop Gained', 'Stop Lost', 'Nonsynonymous', 'Synonymous']
+ new_codon_group_list = ['Start Gained']
+ codon_effect_group_list = ['Start Lost', 'Stop Gained', 'Stop Lost', 'Nonsynonymous', 'Synonymous']
+
+ effect_detail_list = string.split(string.strip(effect_value), '|')
+ effect_detail_list = map(string.strip, effect_detail_list)
+
+ for index, item in enumerate(effect_detail_list):
+ item_list = string.split(string.strip(item), ',')
+ item_list = map(string.strip, item_list)
+
+ gene_id = item_list[0]
+ gene_name = item_list[1]
+ gene_list.append([gene_id, gene_name])
+ transcript_list.append(item_list[2])
+
+ if effect_name not in gene_group_list:
+ exon_id = item_list[3]
+ exon_rank = item_list[4]
+ exon_list.append([exon_id, exon_rank])
+
+ if effect_name in biotype_group_list:
+ biotype = item_list[5]
+ function_list.append(effect_name)
+
+ if effect_name in new_codon_group_list:
+ new_codon = item_list[6]
+ tmp_list = [biotype, new_codon]
+ function_detail_list.append(string.join(tmp_list, ", "))
+ elif effect_name in codon_effect_group_list:
+ old_new_AA = item_list[6]
+ old_new_codon = item_list[7]
+ codon_num = item_list[8]
+ tmp_list = [biotype, old_new_AA, old_new_codon, codon_num]
+ function_detail_list.append(string.join(tmp_list, ", "))
+ else:
+ function_detail_list.append(biotype)
+
+ return [gene_list, transcript_list, exon_list, function_list, function_detail_list]
+
+def get_effect_info(effect_list):
+ domain = ""
+ effect_detail_list = []
+ effect_info_dict = {}
+
+ prime3_utr, prime5_utr, upstream, downstream, intron, nonsplice_site, splice_site, intergenic = effect_list[:8]
+ exon, non_synonymous_coding, synonymous_coding, start_gained, start_lost, stop_gained, stop_lost, unknown_effect_in_exon = effect_list[8:16]
+
+ if intergenic:
+ domain = "Intergenic"
+ effect_info_dict[domain] = ""
+ else:
+ # if not exon, get gene list/transcript list info
+ if upstream:
+ domain = "Upstream"
+ effect_detail_list = get_effect_details_by_category(effect_name='Upstream', effect_value=upstream)
+ effect_info_dict[domain] = effect_detail_list
+ if downstream:
+ domain = "Downstream"
+ effect_detail_list = get_effect_details_by_category(effect_name='Downstream', effect_value=downstream)
+ effect_info_dict[domain] = effect_detail_list
+ if intron:
+ if splice_site:
+ domain = "Splice Site"
+ effect_detail_list = get_effect_details_by_category(effect_name='Splice Site', effect_value=splice_site)
+ effect_info_dict[domain] = effect_detail_list
+ if nonsplice_site:
+ domain = "Nonsplice Site"
+ effect_detail_list = get_effect_details_by_category(effect_name='Nonsplice Site', effect_value=nonsplice_site)
+ effect_info_dict[domain] = effect_detail_list
+ # get gene, transcript_list, and exon info
+ if prime3_utr:
+ domain = "3\' UTR"
+ effect_detail_list = get_effect_details_by_category(effect_name='3\' UTR', effect_value=prime3_utr)
+ effect_info_dict[domain] = effect_detail_list
+ if prime5_utr:
+ domain = "5\' UTR"
+ effect_detail_list = get_effect_details_by_category(effect_name='5\' UTR', effect_value=prime5_utr)
+ effect_info_dict[domain] = effect_detail_list
+
+ if start_gained:
+ domain = "Start Gained"
+ effect_detail_list = get_effect_details_by_category(effect_name='Start Gained', effect_value=start_gained)
+ effect_info_dict[domain] = effect_detail_list
+ if unknown_effect_in_exon:
+ domain = "Unknown Effect In Exon"
+ effect_detail_list = get_effect_details_by_category(effect_name='Unknown Effect In Exon', effect_value=unknown_effect_in_exon)
+ effect_info_dict[domain] = effect_detail_list
+ if start_lost:
+ domain = "Start Lost"
+ effect_detail_list = get_effect_details_by_category(effect_name='Start Lost', effect_value=start_lost)
+ effect_info_dict[domain] = effect_detail_list
+ if stop_gained:
+ domain = "Stop Gained"
+ effect_detail_list = get_effect_details_by_category(effect_name='Stop Gained', effect_value=stop_gained)
+ effect_info_dict[domain] = effect_detail_list
+ if stop_lost:
+ domain = "Stop Lost"
+ effect_detail_list = get_effect_details_by_category(effect_name='Stop Lost', effect_value=stop_lost)
+ effect_info_dict[domain] = effect_detail_list
+
+ if non_synonymous_coding:
+ domain = "Nonsynonymous"
+ effect_detail_list = get_effect_details_by_category(effect_name='Nonsynonymous', effect_value=non_synonymous_coding)
+ effect_info_dict[domain] = effect_detail_list
+ if synonymous_coding:
+ domain = "Synonymous"
+ effect_detail_list = get_effect_details_by_category(effect_name='Synonymous', effect_value=synonymous_coding)
+ effect_info_dict[domain] = effect_detail_list
+
+ return effect_info_dict
+
+def get_gene_id(species_id, gene_name):
+ query = """
+ SELECT
+ geneId
+ FROM
+ GeneList
+ WHERE
+ SpeciesId = %s AND geneSymbol = '%s'
+ """ % (species_id, gene_name)
+
+ result = g.db.execute(query).fetchone()
+
+ if len(result) > 0:
+ return result
+ else:
+ return ""
+
+def get_gene_id_name_dict(species_id, gene_name_list):
+ gene_id_name_dict = {}
+ if len(gene_name_list) == 0:
+ return ""
+ gene_name_str_list = ["'" + gene_name + "'" for gene_name in gene_name_list]
+ gene_name_str = string.join(gene_name_str_list, ",")
+
+ query = """
+ SELECT
+ geneId, geneSymbol
+ FROM
+ GeneList
+ WHERE
+ SpeciesId = %s AND geneSymbol in (%s)
+ """ % (species_id, gene_name_str)
+
+ results = g.db.execute(query).fetchall()
+
+ if len(results) > 0:
+ for item in results:
+ gene_id_name_dict[item[1]] = item[0]
+ else:
+ pass
+
+ return gene_id_name_dict
+
+def check_if_in_gene(species_id, chr, mb):
+ if species_id != 0: #ZS: Check if this is necessary
+ query = """SELECT geneId, geneSymbol
+ FROM GeneList
+ WHERE SpeciesId = {0} AND chromosome = '{1}' AND
+ (txStart < {2} AND txEnd > {2}); """.format(species_id, chr, mb)
+ else:
+ query = """SELECT geneId,geneSymbol
+ FROM GeneList
+ WHERE chromosome = '{0}' AND
+ (txStart < {1} AND txEnd > {1}); """.format(species_id, chr, mb)
+
+ result = g.db.execute(query).fetchone()
+
+ if result:
+ return [result[0], result[1]]
+ else:
+ return ""
+
diff --git a/wqflask/wqflask/static/gif/89.gif b/wqflask/wqflask/static/gif/89.gif
new file mode 100644
index 00000000..e9b3279d
--- /dev/null
+++ b/wqflask/wqflask/static/gif/89.gif
Binary files differ
diff --git a/wqflask/wqflask/static/new/css/corr_scatter_plot.css b/wqflask/wqflask/static/new/css/corr_scatter_plot.css
index c62d4c9a..a2ebb252 100644
--- a/wqflask/wqflask/static/new/css/corr_scatter_plot.css
+++ b/wqflask/wqflask/static/new/css/corr_scatter_plot.css
@@ -1,13 +1,41 @@
-.chart {
+.nvd3 .nv-axis.nv-x text {
+ font-size: 16px;
+ font-weight: normal;
+ fill: black;
+}
+.nvd3 .nv-axis.nv-y text {
+ font-size: 16px;
+ font-weight: normal;
+ fill: black;
}
-.main text {
- font: 10px sans-serif;
+.nv-x .nv-axis g path.domain {
+ stroke: black;
+ stroke-width: 2;
}
-.axis line, .axis path {
- shape-rendering: crispEdges;
+.nv-y .nv-axis g path.domain {
stroke: black;
- fill: none;
+ stroke-width: 2;
+}
+
+.nvd3 .nv-axis.nv-x path.domain {
+ stroke-opacity: 1;
+}
+
+.nvd3 .nv-axis.nv-y path.domain {
+ stroke-opacity: 1;
+}
+
+line.nv-regLine {
+ stroke: red;
+ stroke-width: 1;
+}
+
+.nv-axisMin-x,
+.nv-axisMax-x,
+.nv-axisMin-y,
+.nv-axisMax-y {
+ display: none;
}
diff --git a/wqflask/wqflask/static/new/css/corr_scatter_plot2.css b/wqflask/wqflask/static/new/css/corr_scatter_plot2.css
new file mode 100644
index 00000000..a2ebb252
--- /dev/null
+++ b/wqflask/wqflask/static/new/css/corr_scatter_plot2.css
@@ -0,0 +1,41 @@
+.nvd3 .nv-axis.nv-x text {
+ font-size: 16px;
+ font-weight: normal;
+ fill: black;
+}
+
+.nvd3 .nv-axis.nv-y text {
+ font-size: 16px;
+ font-weight: normal;
+ fill: black;
+}
+
+.nv-x .nv-axis g path.domain {
+ stroke: black;
+ stroke-width: 2;
+}
+
+.nv-y .nv-axis g path.domain {
+ stroke: black;
+ stroke-width: 2;
+}
+
+.nvd3 .nv-axis.nv-x path.domain {
+ stroke-opacity: 1;
+}
+
+.nvd3 .nv-axis.nv-y path.domain {
+ stroke-opacity: 1;
+}
+
+line.nv-regLine {
+ stroke: red;
+ stroke-width: 1;
+}
+
+.nv-axisMin-x,
+.nv-axisMax-x,
+.nv-axisMin-y,
+.nv-axisMax-y {
+ display: none;
+}
diff --git a/wqflask/wqflask/static/new/css/main.css b/wqflask/wqflask/static/new/css/main.css
index 880395a7..097cd997 100644
--- a/wqflask/wqflask/static/new/css/main.css
+++ b/wqflask/wqflask/static/new/css/main.css
@@ -1,11 +1,36 @@
-.security_box {
- padding-left: 30px;
- padding-right: 30px;
-}
-
-ol {
- font-family: Arial;
- font-weight: bold;
- font-size: 16px;
- color: #000082
+@media (max-width: 10px) {
+ .navbar-header {
+ float: none;
+ }
+ .navbar-toggle {
+ display: block;
+ }
+ .navbar-collapse {
+ border-top: 1px solid transparent;
+ box-shadow: inset 0 1px 0 rgba(255,255,255,0.1);
+ }
+ .navbar-collapse.collapse {
+ display: none!important;
+ }
+ .navbar-nav {
+ float: none!important;
+ margin: 7.5px -15px;
+ }
+ .navbar-nav>li {
+ float: none;
+ }
+ .navbar-nav>li>a {
+ padding-top: 10px;
+ padding-bottom: 10px;
+ }
+ .navbar-text {
+ float: none;
+ margin: 15px 0;
+ }
+ .navbar-collapse.collapse.in {
+ display: block!important;
+ }
+ .collapsing {
+ overflow: hidden!important;
+ }
} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/css/marker_regression.css b/wqflask/wqflask/static/new/css/marker_regression.css
index d81b5021..f1a26a83 100644
--- a/wqflask/wqflask/static/new/css/marker_regression.css
+++ b/wqflask/wqflask/static/new/css/marker_regression.css
@@ -35,4 +35,38 @@ rect.pane {
/*rect {
stroke: WhiteSmoke;
fill: Azure;
-}*/ \ No newline at end of file
+}*/
+
+tr .outlier {
+ background-color: #ffff99;
+}
+
+table.dataTable thead th{
+ border-right: 1px solid white;
+ color: white;
+ background-color: #369;
+}
+
+table.dataTable thead .sorting_asc {
+ background-image: url("../packages/DataTables/images/sort_asc_disabled.png");
+}
+table.dataTable thead .sorting_desc {
+ background-image: url("../packages/DataTables/images/sort_desc_disabled.png");
+}
+
+table.dataTable thead th {
+ padding: 4px 18px 4px 10px;
+}
+
+table.dataTable tbody td {
+ padding: 4px 20px 2px 10px;
+}
+
+table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
+ border-top: 1px solid #ccc;
+ border-right: 1px solid #ccc;
+}
+table.dataTable.cell-border tbody tr th:first-child,
+table.dataTable.cell-border tbody tr td:first-child {
+ border-left: 1px solid #ccc;
+} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/css/network_graph.css b/wqflask/wqflask/static/new/css/network_graph.css
index 1cba546a..1a0bafeb 100644
--- a/wqflask/wqflask/static/new/css/network_graph.css
+++ b/wqflask/wqflask/static/new/css/network_graph.css
@@ -14,7 +14,6 @@
position: relative;
float: left;
width: 18.5em;
- padding: 1em 1em 1em 1em;
background: #fff url('/static/new/images/a1.gif') top right repeat-y;
}
diff --git a/wqflask/wqflask/static/new/css/show_trait.css b/wqflask/wqflask/static/new/css/show_trait.css
index 1e9fd4df..09d5e1e3 100644
--- a/wqflask/wqflask/static/new/css/show_trait.css
+++ b/wqflask/wqflask/static/new/css/show_trait.css
@@ -8,4 +8,38 @@ tr .outlier {
div.sample_group {
overflow: auto; # needed because it contains float dataTable wrapper
+}
+
+.js-plotly-plot .plotly .modebar {
+ left: 100px;
+}
+
+table.dataTable thead th, table.dataTable tfoot th{
+ border-right: 1px solid white;
+ color: white;
+ background-color: #369;
+}
+
+table.dataTable thead .sorting_asc {
+ background-image: url("../packages/DataTables/images/sort_asc_disabled.png");
+}
+table.dataTable thead .sorting_desc {
+ background-image: url("../packages/DataTables/images/sort_desc_disabled.png");
+}
+
+table.dataTable thead th, table.dataTable tfoot {
+ padding: 4px 18px 4px 10px;
+}
+
+table.dataTable tbody td {
+ padding: 4px 20px 2px 10px;
+}
+
+table.dataTable.cell-border tbody th, table.dataTable.cell-border tbody td {
+ border-top: 1px solid #ccc;
+ border-right: 1px solid #ccc;
+}
+table.dataTable.cell-border tbody tr th:first-child,
+table.dataTable.cell-border tbody tr td:first-child {
+ border-left: 1px solid #ccc;
} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/css/snp_browser.css b/wqflask/wqflask/static/new/css/snp_browser.css
new file mode 100644
index 00000000..30fe9a59
--- /dev/null
+++ b/wqflask/wqflask/static/new/css/snp_browser.css
@@ -0,0 +1,54 @@
+.form_group {
+ margin-bottom 5px;
+}
+
+table.dataTable thead th {
+ vertical-align: bottom;
+}
+
+table.dataTable thead .sorting,
+table.dataTable thead .sorting_asc,
+table.dataTable thead .sorting_desc,
+table.dataTable thead .sorting_asc_disabled,
+table.dataTable thead .sorting_desc_disabled {
+ background-repeat: no-repeat;
+ background-position: bottom right;
+}
+
+table.dataTable thead th{
+ border-right: 1px solid white;
+ color: white;
+ background-color: royalblue;
+}
+
+table.dataTable tbody td {
+ padding: 4px 20px 2px 10px;
+}
+
+td.A_allele_color {
+ background-color: #C33232
+}
+td.C_allele_color {
+ background-color: #1569C7
+}
+td.T_allele_color {
+ background-color: #CFCF32
+}
+td.G_allele_color {
+ background-color: #32C332
+}
+td.t_allele_color {
+ background-color: #FF6
+}
+td.c_allele_color {
+ background-color: #5CB3FF
+}
+td.a_allele_color {
+ background-color: #F66
+}
+td.g_allele_color {
+ background-color: #CF9
+}
+td.default_allele_color {
+ background-color: #FFFFFF
+} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/css/typeahead-bootstrap.css b/wqflask/wqflask/static/new/css/typeahead-bootstrap.css
new file mode 100644
index 00000000..87dd4b5d
--- /dev/null
+++ b/wqflask/wqflask/static/new/css/typeahead-bootstrap.css
@@ -0,0 +1,94 @@
+span.twitter-typeahead .tt-menu,
+span.twitter-typeahead .tt-dropdown-menu {
+ cursor: pointer;
+ position: absolute;
+ top: 100%;
+ left: 0;
+ z-index: 1000;
+ display: none;
+ float: left;
+ min-width: 160px;
+ padding: 5px 0;
+ margin: 2px 0 0;
+ list-style: none;
+ font-size: 14px;
+ text-align: left;
+ background-color: #ffffff;
+ border: 1px solid #cccccc;
+ border: 1px solid rgba(0, 0, 0, 0.15);
+ border-radius: 4px;
+ -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
+ background-clip: padding-box;
+}
+span.twitter-typeahead .tt-suggestion {
+ display: block;
+ padding: 3px 20px;
+ clear: both;
+ font-weight: normal;
+ line-height: 1.42857143;
+ color: #333333;
+ white-space: nowrap;
+}
+span.twitter-typeahead .tt-suggestion.tt-cursor,
+span.twitter-typeahead .tt-suggestion:hover,
+span.twitter-typeahead .tt-suggestion:focus {
+ color: #ffffff;
+ text-decoration: none;
+ outline: 0;
+ background-color: #337ab7;
+}
+.input-group.input-group-lg span.twitter-typeahead .form-control {
+ height: 46px;
+ padding: 10px 16px;
+ font-size: 18px;
+ line-height: 1.3333333;
+ border-radius: 6px;
+}
+.input-group.input-group-sm span.twitter-typeahead .form-control {
+ height: 30px;
+ padding: 5px 10px;
+ font-size: 12px;
+ line-height: 1.5;
+ border-radius: 3px;
+}
+span.twitter-typeahead {
+ width: 100%;
+}
+.input-group span.twitter-typeahead {
+ display: block !important;
+ height: 34px;
+}
+.input-group span.twitter-typeahead .tt-menu,
+.input-group span.twitter-typeahead .tt-dropdown-menu {
+ top: 32px !important;
+}
+.input-group span.twitter-typeahead:not(:first-child):not(:last-child) .form-control {
+ border-radius: 0;
+}
+.input-group span.twitter-typeahead:first-child .form-control {
+ border-top-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+.input-group span.twitter-typeahead:last-child .form-control {
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ border-top-right-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+.input-group.input-group-sm span.twitter-typeahead {
+ height: 30px;
+}
+.input-group.input-group-sm span.twitter-typeahead .tt-menu,
+.input-group.input-group-sm span.twitter-typeahead .tt-dropdown-menu {
+ top: 30px !important;
+}
+.input-group.input-group-lg span.twitter-typeahead {
+ height: 46px;
+}
+.input-group.input-group-lg span.twitter-typeahead .tt-menu,
+.input-group.input-group-lg span.twitter-typeahead .tt-dropdown-menu {
+ top: 46px !important;
+} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/images/CITGLogo.png b/wqflask/wqflask/static/new/images/CITGLogo.png
new file mode 100644
index 00000000..ae99fedb
--- /dev/null
+++ b/wqflask/wqflask/static/new/images/CITGLogo.png
Binary files differ
diff --git a/wqflask/wqflask/static/new/images/Nif.png b/wqflask/wqflask/static/new/images/Nif.png
new file mode 100644
index 00000000..e975a921
--- /dev/null
+++ b/wqflask/wqflask/static/new/images/Nif.png
Binary files differ
diff --git a/wqflask/wqflask/static/new/images/PythonLogo.png b/wqflask/wqflask/static/new/images/PythonLogo.png
new file mode 100644
index 00000000..b76dafba
--- /dev/null
+++ b/wqflask/wqflask/static/new/images/PythonLogo.png
Binary files differ
diff --git a/wqflask/wqflask/static/new/images/a1.gif b/wqflask/wqflask/static/new/images/a1.gif
new file mode 100644
index 00000000..283921a0
--- /dev/null
+++ b/wqflask/wqflask/static/new/images/a1.gif
Binary files differ
diff --git a/wqflask/wqflask/static/new/images/arrowdown.gif b/wqflask/wqflask/static/new/images/arrowdown.gif
new file mode 100644
index 00000000..577e5476
--- /dev/null
+++ b/wqflask/wqflask/static/new/images/arrowdown.gif
Binary files differ
diff --git a/wqflask/wqflask/static/new/images/edit.gif b/wqflask/wqflask/static/new/images/edit.gif
new file mode 100644
index 00000000..45b314ee
--- /dev/null
+++ b/wqflask/wqflask/static/new/images/edit.gif
Binary files differ
diff --git a/wqflask/wqflask/static/new/images/ipad_icon3.png b/wqflask/wqflask/static/new/images/ipad_icon3.png
new file mode 100644
index 00000000..97060e97
--- /dev/null
+++ b/wqflask/wqflask/static/new/images/ipad_icon3.png
Binary files differ
diff --git a/wqflask/wqflask/static/new/images/question_mark.jpg b/wqflask/wqflask/static/new/images/question_mark.jpg
new file mode 100644
index 00000000..82df7e81
--- /dev/null
+++ b/wqflask/wqflask/static/new/images/question_mark.jpg
Binary files differ
diff --git a/wqflask/wqflask/static/new/images/step1.gif b/wqflask/wqflask/static/new/images/step1.gif
new file mode 100644
index 00000000..42d2bc7d
--- /dev/null
+++ b/wqflask/wqflask/static/new/images/step1.gif
Binary files differ
diff --git a/wqflask/wqflask/static/new/images/step2.gif b/wqflask/wqflask/static/new/images/step2.gif
new file mode 100644
index 00000000..b3dca656
--- /dev/null
+++ b/wqflask/wqflask/static/new/images/step2.gif
Binary files differ
diff --git a/wqflask/wqflask/static/new/images/step3.gif b/wqflask/wqflask/static/new/images/step3.gif
new file mode 100644
index 00000000..0e0c7ea2
--- /dev/null
+++ b/wqflask/wqflask/static/new/images/step3.gif
Binary files differ
diff --git a/wqflask/wqflask/static/new/javascript/bar_chart.coffee b/wqflask/wqflask/static/new/javascript/bar_chart.coffee
deleted file mode 100644
index 7558de80..00000000
--- a/wqflask/wqflask/static/new/javascript/bar_chart.coffee
+++ /dev/null
@@ -1,275 +0,0 @@
-root = exports ? this
-
-class Bar_Chart
- constructor: (sample_lists) ->
- @sample_lists = {}
- l1 = @sample_lists['samples_primary'] = sample_lists[0] or []
- l2 = @sample_lists['samples_other'] = sample_lists[1] or []
-
- l1_names = (x.name for x in l1)
- l3 = l1.concat((x for x in l2 when x.name not in l1_names))
- @sample_lists['samples_all'] = l3
- longest_sample_name_len = d3.max(sample.name.length for sample in l3)
- @margin = {
- top: 20,
- right: 20,
- bottom: longest_sample_name_len * 6,
- left: 40
- }
-
- @attributes = (key for key of sample_lists[0][0]["extra_attributes"])
- @sample_attr_vals = (@extra(s) for s in @sample_lists['samples_all']\
- when s.value != null)
- @get_distinct_attr_vals()
- @get_attr_color_dict(@distinct_attr_vals)
- @attribute_name = "None"
-
- @sort_by = "name"
- @chart = null
-
- @select_attribute_box = $ "#color_attribute"
-
- d3.select("#color_attribute").on("change", =>
- @attribute_name = @select_attribute_box.val()
- @rebuild_bar_graph()
- )
-
- $(".sort_by_value").on("click", =>
- console.log("sorting by value")
- @sort_by = "value"
- @rebuild_bar_graph()
- )
-
- $(".sort_by_name").on("click", =>
- console.log("sorting by name")
- @sort_by = "name"
- @rebuild_bar_graph()
- )
-
- d3.select("#color_by_trait").on("click", =>
- @open_trait_selection()
- )
-
- value: (sample) ->
- @value_dict[sample.name].value
-
- variance: (sample) ->
- @value_dict[sample.name].variance
-
- extra: (sample) ->
- attr_vals = {}
- for attribute in @attributes
- attr_vals[attribute] = sample["extra_attributes"][attribute]
- attr_vals
-
- # takes a dict: name -> value and rebuilds the graph
- redraw: (samples_dict, selected_group) ->
- @value_dict = samples_dict[selected_group]
- @raw_data = (x for x in @sample_lists[selected_group] when\
- x.name of @value_dict and @value(x) != null)
- @rebuild_bar_graph()
-
- rebuild_bar_graph: ->
- raw_data = @raw_data.slice()
- if @sort_by == 'value'
- raw_data = raw_data.sort((x, y) => @value(x) - @value(y))
- console.log("raw_data: ", raw_data)
-
- h = 600
- container = $("#bar_chart_container")
- container.height(h + @margin.top + @margin.bottom)
- if @chart is null
- @chart = nv.models.multiBarChart()
- .height(h)
- .errorBarColor(=> 'red')
- .reduceXTicks(false)
- .staggerLabels(false)
- .showControls(false)
- .showLegend(false)
-
- # show value, sd, and attributes in tooltip
- @chart.multibar.dispatch.on('elementMouseover.tooltip',
- (evt) =>
- evt.value = @chart.x()(evt.data);
- evt['series'] = [{
- key: 'Value',
- value: evt.data.y,
- color: evt.color
- }];
- if evt.data.yErr
- evt['series'].push({key: 'SE', value: evt.data.yErr})
- if evt.data.attr
- for k, v of evt.data.attr
- evt['series'].push({key: k, value: v})
- @chart.tooltip.data(evt).hidden(false);
- )
-
- @chart.tooltip.valueFormatter((d, i) -> d)
-
- nv.addGraph(() =>
- @remove_legend()
- values = ({x: s.name, y: @value(s), yErr: @variance(s) or 0,\
- attr: s.extra_attributes}\
- for s in raw_data)
-
- if @attribute_name != "None"
- @color_dict = @attr_color_dict[@attribute_name]
- @chart.barColor((d) => @color_dict[d.attr[@attribute_name]])
- @add_legend()
- else
- @chart.barColor(=> 'steelblue')
-
- @chart.width(raw_data.length * 20)
- @chart.yDomain([0.9 * _.min((d.y - 1.5 * d.yErr for d in values)),
- 1.05 * _.max((d.y + 1.5 * d.yErr for d in values))])
- console.log("values: ", values)
- d3.select("#bar_chart_container svg")
- .datum([{values: values}])
- .style('width', raw_data.length * 20 + 'px')
- .transition().duration(1000)
- .call(@chart)
-
- d3.select("#bar_chart_container .nv-x")
- .selectAll('.tick text')
- .style("font-size", "12px")
- .style("text-anchor", "end")
- .attr("dx", "-.8em")
- .attr("dy", "-.3em")
- .attr("transform", (d) =>
- return "rotate(-90)"
- )
-
- return @chart
- )
-
- get_attr_color_dict: (vals) ->
- @attr_color_dict = {}
- @is_discrete = {}
- @minimum_values = {}
- @maximum_values = {}
- console.log("vals:", vals)
- for own key, distinct_vals of vals
- @min_val = d3.min(distinct_vals)
- @max_val = d3.max(distinct_vals)
- this_color_dict = {}
- discrete = distinct_vals.length < 10
- if discrete
- color = d3.scale.category10()
- for value, i in distinct_vals
- this_color_dict[value] = color(i)
- else
- console.log("distinct_values:", distinct_vals)
- #Check whether all values are numbers, and if they are get a corresponding
- #color gradient
- if _.every(distinct_vals, (d) =>
- if isNaN(d)
- return false
- else
- return true
- )
- color_range = d3.scale.linear()
- .domain([@min_val, @max_val])
- .range([0,255])
- for value, i in distinct_vals
- console.log("color_range(value):", parseInt(color_range(value)))
- this_color_dict[value] = d3.rgb(parseInt(color_range(value)),0, 0)
- #this_color_dict[value] = d3.rgb("lightblue").darker(color_range(parseInt(value)))
- #this_color_dict[value] = "rgb(0, 0, " + color_range(parseInt(value)) + ")"
- @attr_color_dict[key] = this_color_dict
- @is_discrete[key] = discrete
- @minimum_values[key] = @min_val
- @maximum_values[key] = @max_val
-
- get_distinct_attr_vals: () ->
- # FIXME: this has quadratic behaviour, may cause issues with many samples and continuous attributes
- @distinct_attr_vals = {}
- for sample in @sample_attr_vals
- for attribute of sample
- if not @distinct_attr_vals[attribute]
- @distinct_attr_vals[attribute] = []
- if sample[attribute] not in @distinct_attr_vals[attribute]
- @distinct_attr_vals[attribute].push(sample[attribute])
- #console.log("distinct_attr_vals:", @distinct_attr_vals)
-
- add_legend: =>
- if @is_discrete[@attribute_name]
- @add_legend_discrete()
- else
- @add_legend_continuous()
-
- remove_legend: =>
- $(".legend").remove()
- $("#legend-left,#legend-right,#legend-colors").empty()
-
- add_legend_continuous: =>
- $('#legend-left').html(@minimum_values[@attribute_name])
- $('#legend-right').html(@maximum_values[@attribute_name])
- svg_html = '<svg height="15" width="120"> \
- <rect x="0" width="20" height="15" style="fill: rgb(0, 0, 0);"></rect> \
- <rect x="20" width="20" height="15" style="fill: rgb(50, 0, 0);"></rect> \
- <rect x="40" width="20" height="15" style="fill: rgb(100, 0, 0);"></rect> \
- <rect x="60" width="20" height="15" style="fill: rgb(150, 0, 0);"></rect> \
- <rect x="80" width="20" height="15" style="fill: rgb(200, 0, 0);"></rect> \
- <rect x="100" width="20" height="15" style="fill: rgb(255, 0, 0);"></rect> \
- </svg>'
- console.log("svg_html:", svg_html)
- $('#legend-colors').html(svg_html)
-
- add_legend_discrete: =>
- legend_span = d3.select('#bar_chart_legend')
- .append('div').style('word-wrap', 'break-word')
- .attr('class', 'legend').selectAll('span')
- .data(@distinct_attr_vals[@attribute_name])
- .enter().append('span').style({'word-wrap': 'normal', 'display': 'inline-block'})
-
- legend_span.append('span')
- .style("background-color", (d) =>
- return @attr_color_dict[@attribute_name][d]
- )
- .style({'display': 'inline-block', 'width': '15px', 'height': '15px',\
- 'margin': '0px 5px 0px 15px'})
- legend_span.append('span').text((d) => return d).style('font-size', '20px')
-
- open_trait_selection: () ->
- $('#collections_holder').load('/collections/list?color_by_trait #collections_list', =>
- $.colorbox(
- inline: true
- href: "#collections_holder"
- )
- #Removes the links from the collection names, because clicking them would leave the page
- #instead of loading the list of traits in the colorbox
- $('a.collection_name').attr( 'onClick', 'return false' )
- #$('.collection_name').each (index, element) =>
- # console.log("contents:", $(element).contents())
- # $(element).contents().unwrap()
- )
-
- color_by_trait: (trait_sample_data) ->
- console.log("BXD1:", trait_sample_data["BXD1"])
- console.log("trait_sample_data:", trait_sample_data)
- trimmed_samples = @trim_values(trait_sample_data)
- distinct_values = {}
- distinct_values["collection_trait"] = @get_distinct_values(trimmed_samples)
- #@get_attr_color_dict(distinct_values)
- @get_trait_color_dict(trimmed_samples, distinct_values)
- console.log("TRAIT_COLOR_DICT:", @trait_color_dict)
- console.log("SAMPLES:", @samples)
- # TODO
-
- trim_values: (trait_sample_data) ->
- trimmed_samples = {}
- for sample in @sample_names
- if sample of trait_sample_data
- trimmed_samples[sample] = trait_sample_data[sample]
- console.log("trimmed_samples:", trimmed_samples)
- return trimmed_samples
-
- get_distinct_values: (samples) ->
- distinct_values = _.uniq(_.values(samples))
- console.log("distinct_values:", distinct_values)
- return distinct_values
- #distinct_values = []
- #for sample in samples
- # if samples[sample] in distinct_values
-
-root.Bar_Chart = Bar_Chart
diff --git a/wqflask/wqflask/static/new/javascript/bar_chart.js b/wqflask/wqflask/static/new/javascript/bar_chart.js
index 7ec35148..d8540580 100644
--- a/wqflask/wqflask/static/new/javascript/bar_chart.js
+++ b/wqflask/wqflask/static/new/javascript/bar_chart.js
@@ -253,6 +253,17 @@
})())
]);
console.log("values: ", values);
+
+ decimal_exists = "False";
+ for(i=0; i < values.length; i++){
+ if (values[i]['y'] % 1 != 0){
+ decimal_exists = "True";
+ break;
+ }
+ }
+ if (decimal_exists == "False"){
+ _this.chart.yAxis.tickFormat(d3.format('d'))
+ }
d3.select("#bar_chart_container svg").datum([
{
values: values
diff --git a/wqflask/wqflask/static/new/javascript/box_plot.coffee b/wqflask/wqflask/static/new/javascript/box_plot.coffee
deleted file mode 100644
index edd5e968..00000000
--- a/wqflask/wqflask/static/new/javascript/box_plot.coffee
+++ /dev/null
@@ -1,57 +0,0 @@
-root = exports ? this
-
-class Box_Plot
- constructor: (@sample_list, @sample_group) ->
- @get_samples()
-
- @margin = {top: 10, right: 50, bottom: 20, left: 50}
- @plot_width = 200 - @margin.left - @margin.right
- @plot_height = 500 - @margin.top - @margin.bottom
-
- @min = d3.min(@sample_vals)
- @max = d3.max(@sample_vals)
-
- @svg = @create_svg()
- @enter_data()
-
-
- get_samples: () ->
- @sample_vals = (sample.value for sample in @sample_list when sample.value != null)
-
- create_svg: () ->
- svg = d3.box()
- .whiskers(@inter_quartile_range(1.5))
- .width(@plot_width - 30)
- .height(@plot_height - 30)
- .domain([@min, @max])
- return svg
-
- enter_data: () ->
- d3.select("#box_plot").selectAll("svg")
- .data([@sample_vals])
- .enter().append("svg:svg")
- .attr("class", "box")
- .attr("width", @plot_width)
- .attr("height", @plot_height)
- .append("svg:g")
- .call(@svg)
-
- inter_quartile_range: (k) ->
- return (d, i) =>
- console.log("iqr d:", d)
- q1 = d.quartiles[0]
- q3 = d.quartiles[2]
- inter_quartile_range = (q3 - q1) * k
- console.log("iqr:", inter_quartile_range)
- i = 0
- j = d.length
- console.log("d[-1]:", d[1])
- console.log("q1 - iqr:", q1 - inter_quartile_range)
- i++ while (d[i] < q1 - inter_quartile_range)
- j-- while (d[j] > q3 + inter_quartile_range)
- #while (d[++i] < q1 - inter_quartile_range
- #while d[--j] > q3 + inter_quartile_range
- console.log("[i, j]", [i, j])
- return [i, j]
-
-root.Box_Plot = Box_Plot \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/chr_lod_chart.coffee b/wqflask/wqflask/static/new/javascript/chr_lod_chart.coffee
deleted file mode 100644
index e00694be..00000000
--- a/wqflask/wqflask/static/new/javascript/chr_lod_chart.coffee
+++ /dev/null
@@ -1,286 +0,0 @@
-class Chr_Lod_Chart
-
- constructor: (@plot_height, @plot_width, @chr, manhattanPlot) ->
- @manhattanPlot = manhattanPlot
- @qtl_results = js_data.qtl_results
- console.log("qtl_results are:", @qtl_results)
- console.log("chr is:", @chr)
-
- @get_max_chr()
-
- @filter_qtl_results()
- console.log("filtered results:", @these_results)
- @get_qtl_count()
-
- @x_coords = []
- @y_coords = []
- @marker_names = []
-
- console.time('Create coordinates')
- @create_coordinates()
- console.log("@x_coords: ", @x_coords)
- console.log("@y_coords: ", @y_coords)
- console.timeEnd('Create coordinates')
-
- # Buffer to allow for the ticks/labels to be drawn
- @x_buffer = @plot_width/30
- @y_buffer = @plot_height/20
-
- @x_max = d3.max(@x_coords)
- @y_max = d3.max(@y_coords) * 1.2
-
- @y_threshold = @get_lod_threshold()
-
- @svg = @create_svg()
-
- @plot_coordinates = _.zip(@x_coords, @y_coords, @marker_names)
- console.log("coordinates:", @plot_coordinates)
-
- @plot_height -= @y_buffer
-
- @create_scales()
-
- console.time('Create graph')
- @create_graph()
- console.timeEnd('Create graph')
-
- get_max_chr: () ->
- @max_chr = 0
- for key of js_data.chromosomes
- console.log("key is:", key)
- if parseInt(key) > @max_chr
- @max_chr = parseInt(key)
-
- filter_qtl_results: () ->
- @these_results = []
- this_chr = 100
- for result in @qtl_results
- if result.chr == "X"
- this_chr = @max_chr
- else
- this_chr = result.chr
- console.log("this_chr is:", this_chr)
- console.log("@chr[0] is:", parseInt(@chr[0]))
- if this_chr > parseInt(@chr[0])
- break
- if parseInt(this_chr) == parseInt(@chr[0])
- @these_results.push(result)
-
- get_qtl_count: () ->
- high_qtl_count = 0
- for result in @these_results
- if result.lod_score > 1
- high_qtl_count += 1
- console.log("high_qtl_count:", high_qtl_count)
-
- #if high_qtl_count > 10000
- @y_axis_filter = 2
- #else if high_qtl_count > 1000
- # @y_axis_filter = 1
- #else
- # @y_axis_filter = 0
-
- create_coordinates: () ->
- for result in @these_results
- @x_coords.push(parseFloat(result.Mb))
- @y_coords.push(result.lod_score)
- @marker_names.push(result.name)
-
- create_svg: () ->
- svg = d3.select("#topchart")
- .append("svg")
- .attr("class", "chr_manhattan_plot")
- .attr("width", @plot_width+@x_buffer)
- .attr("height", @plot_height+@y_buffer)
- .append("g")
- return svg
-
- create_scales: () ->
- @x_scale = d3.scale.linear()
- .domain([0, @chr[1]])
- .range([@x_buffer, @plot_width])
- @y_scale = d3.scale.linear()
- .domain([0, @y_max])
- .range([@plot_height, @y_buffer])
-
- get_lod_threshold: () ->
- if @y_max/2 > 2
- return @y_max/2
- else
- return 2
-
- create_graph: () ->
- @add_border()
- @add_x_axis()
- @add_y_axis()
- @add_title()
- @add_back_button()
- if @manhattanPlot
- @add_plot_points()
- else
- @add_path()
-
- add_border: () ->
- border_coords = [[@y_buffer, @plot_height, @x_buffer, @x_buffer],
- [@y_buffer, @plot_height, @plot_width, @plot_width],
- [@y_buffer, @y_buffer, @x_buffer, @plot_width],
- [@plot_height, @plot_height, @x_buffer, @plot_width]]
-
- @svg.selectAll("line")
- .data(border_coords)
- .enter()
- .append("line")
- .attr("y1", (d) =>
- return d[0]
- )
- .attr("y2", (d) =>
- return d[1]
- )
- .attr("x1", (d) =>
- return d[2]
- )
- .attr("x2", (d) =>
- return d[3]
- )
- .style("stroke", "#000")
-
- add_x_axis: () ->
- @xAxis = d3.svg.axis()
- .scale(@x_scale)
- .orient("bottom")
- .ticks(20)
-
- @xAxis.tickFormat((d) =>
- d3.format("d") #format as integer
- return (d)
- )
-
- @svg.append("g")
- .attr("class", "x_axis")
- .attr("transform", "translate(0," + @plot_height + ")")
- .call(@xAxis)
- .selectAll("text")
- .attr("text-anchor", "right")
- .attr("font-size", "12px")
- .attr("dx", "-1.6em")
- .attr("transform", (d) =>
- return "translate(-12,0) rotate(-90)"
- )
-
- add_y_axis: () ->
- @yAxis = d3.svg.axis()
- .scale(@y_scale)
- .orient("left")
- .ticks(5)
-
- @svg.append("g")
- .attr("class", "y_axis")
- .attr("transform", "translate(" + @x_buffer + ",0)")
- .call(@yAxis)
-
- add_title: () ->
- @svg.append("text")
- .attr("class", "title")
- .text("Chr " + @chr[0])
- .attr("x", (d) =>
- return (@plot_width + @x_buffer)/2
- )
- .attr("y", @y_buffer + 20)
- .attr("dx", "0em")
- .attr("text-anchor", "middle")
- .attr("font-family", "sans-serif")
- .attr("font-size", "18px")
- .attr("fill", "black")
-
- add_back_button: () ->
- $("#return_to_full_view").show().click => @return_to_full_view()
-
- add_path: () ->
- line_function = d3.svg.line()
- .x( (d) => return @x_scale(d[0]))
- .y( (d) => return @y_scale(d[1]))
- .interpolate("linear")
-
- line_graph = @svg.append("path")
- .attr("d", line_function(@plot_coordinates))
- .attr("stroke", "blue")
- .attr("stroke-width", 1)
- .attr("fill", "none")
-
- add_plot_points: () ->
- @plot_point = @svg.selectAll("circle")
- .data(@plot_coordinates)
- .enter()
- .append("circle")
- .attr("cx", (d) =>
- return @x_scale(d[0])
- )
- .attr("cy", (d) =>
- return @y_scale(d[1])
- )
- .attr("r", (d) =>
- #if d[1] > 2
- # return 3
- #else
- return 2
- )
- .attr("fill", (d) =>
- #if d[1] > 2
- # return "white"
- #else
- return "black"
- )
- .attr("stroke", "black")
- .attr("stroke-width", "1")
- .attr("id", (d) =>
- return "point_" + String(d[2])
- )
- .classed("circle", true)
- .on("mouseover", (d) =>
- console.log("d3.event is:", d3.event)
- console.log("d is:", d)
- this_id = "point_" + String(d[2])
- d3.select("#" + this_id).classed("d3_highlight", true)
- .attr("r", 5)
- .attr("stroke", "none")
- .attr("fill", "blue")
- .call(@show_marker_in_table(d))
- )
- .on("mouseout", (d) =>
- this_id = "point_" + String(d[2])
- d3.select("#" + this_id).classed("d3_highlight", false)
- .attr("r", (d) =>
- #if d[1] > 2
- # return 3
- #else
- return 2
- )
- .attr("fill", (d) =>
- #if d[1] > 2
- # return "white"
- #else
- return "black"
- )
- .attr("stroke", "black")
- .attr("stroke-width", "1")
- )
- .append("svg:title")
- .text((d) =>
- return d[2]
- )
-
- return_to_full_view: () ->
- $("#return_to_full_view").hide()
- $('#topchart').remove()
- $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>')
- create_lod_chart()
-
- show_marker_in_table: (marker_info) ->
- console.log("in show_marker_in_table")
- ### Searches for the select marker in the results table below ###
- if marker_info
- marker_name = marker_info[2]
- $("#qtl_results_filter").find("input:first").val(marker_name).change()
- #else
- # marker_name = ""
- #$("#qtl_results_filter").find("input:first").val(marker_name).change()
diff --git a/wqflask/wqflask/static/new/javascript/chr_manhattan_plot.coffee b/wqflask/wqflask/static/new/javascript/chr_manhattan_plot.coffee
deleted file mode 100644
index b1d2305e..00000000
--- a/wqflask/wqflask/static/new/javascript/chr_manhattan_plot.coffee
+++ /dev/null
@@ -1,295 +0,0 @@
-class Chr_Manhattan_Plot
-
- constructor: (@plot_height, @plot_width, @chr, manhattanPlot) ->
- @qtl_results = js_data.qtl_results
- console.log("qtl_results are:", @qtl_results)
- console.log("chr is:", @chr)
-
- @get_max_chr()
-
- @filter_qtl_results()
- console.log("filtered results:", @these_results)
- @get_qtl_count()
-
- @x_coords = []
- @y_coords = []
- @marker_names = []
-
- console.time('Create coordinates')
- @create_coordinates()
- console.log("@x_coords: ", @x_coords)
- console.log("@y_coords: ", @y_coords)
- console.timeEnd('Create coordinates')
-
- # Buffer to allow for the ticks/labels to be drawn
- @x_buffer = @plot_width/30
- @y_buffer = @plot_height/20
-
- @x_max = d3.max(@x_coords)
- @y_max = d3.max(@y_coords) * 1.2
-
- @y_threshold = @get_lod_threshold()
-
- @svg = @create_svg()
-
- @plot_coordinates = _.zip(@x_coords, @y_coords, @marker_names)
- console.log("coordinates:", @plot_coordinates)
-
- @plot_height -= @y_buffer
-
- @create_scales()
-
- console.time('Create graph')
- @create_graph()
- console.timeEnd('Create graph')
-
- get_max_chr: () ->
- @max_chr = 0
- for key of js_data.chromosomes
- console.log("key is:", key)
- if parseInt(key) > @max_chr
- @max_chr = parseInt(key)
-
- filter_qtl_results: () ->
- @these_results = []
- this_chr = 100
- for result in @qtl_results
- if result.chr == "X"
- this_chr = @max_chr
- else
- this_chr = result.chr
- console.log("this_chr is:", this_chr)
- console.log("@chr[0] is:", parseInt(@chr[0]))
- if this_chr > parseInt(@chr[0])
- break
- if parseInt(this_chr) == parseInt(@chr[0])
- @these_results.push(result)
-
- get_qtl_count: () ->
- high_qtl_count = 0
- for result in @these_results
- if result.lod_score > 1
- high_qtl_count += 1
- console.log("high_qtl_count:", high_qtl_count)
-
- #if high_qtl_count > 10000
- @y_axis_filter = 2
- #else if high_qtl_count > 1000
- # @y_axis_filter = 1
- #else
- # @y_axis_filter = 0
-
- create_coordinates: () ->
- for result in @these_results
- @x_coords.push(parseFloat(result.Mb))
- @y_coords.push(result.lod_score)
- @marker_names.push(result.name)
-
- create_svg: () ->
- svg = d3.select("#topchart")
- .append("svg")
- .attr("class", "chr_manhattan_plot")
- .attr("width", @plot_width+@x_buffer)
- .attr("height", @plot_height+@y_buffer)
- .append("g")
- return svg
-
- create_scales: () ->
- @x_scale = d3.scale.linear()
- .domain([0, @chr[1]])
- .range([@x_buffer, @plot_width])
- @y_scale = d3.scale.linear()
- .domain([0, @y_max])
- .range([@plot_height, @y_buffer])
-
- get_lod_threshold: () ->
- if @y_max/2 > 2
- return @y_max/2
- else
- return 2
-
- create_graph: () ->
- @add_border()
- @add_x_axis()
- @add_y_axis()
- @add_title()
- @add_back_button()
- if manhattanPlot
- @add_plot_points()
- else
- @add_path()
-
- add_border: () ->
- border_coords = [[@y_buffer, @plot_height, @x_buffer, @x_buffer],
- [@y_buffer, @plot_height, @plot_width, @plot_width],
- [@y_buffer, @y_buffer, @x_buffer, @plot_width],
- [@plot_height, @plot_height, @x_buffer, @plot_width]]
-
- @svg.selectAll("line")
- .data(border_coords)
- .enter()
- .append("line")
- .attr("y1", (d) =>
- return d[0]
- )
- .attr("y2", (d) =>
- return d[1]
- )
- .attr("x1", (d) =>
- return d[2]
- )
- .attr("x2", (d) =>
- return d[3]
- )
- .style("stroke", "#000")
-
- add_x_axis: () ->
- @xAxis = d3.svg.axis()
- .scale(@x_scale)
- .orient("bottom")
- .ticks(20)
-
- @xAxis.tickFormat((d) =>
- d3.format("d") #format as integer
- return (d)
- )
-
- @svg.append("g")
- .attr("class", "x_axis")
- .attr("transform", "translate(0," + @plot_height + ")")
- .call(@xAxis)
- .selectAll("text")
- .attr("text-anchor", "right")
- .attr("font-size", "12px")
- .attr("dx", "-1.6em")
- .attr("transform", (d) =>
- return "translate(-12,0) rotate(-90)"
- )
-
- add_y_axis: () ->
- @yAxis = d3.svg.axis()
- .scale(@y_scale)
- .orient("left")
- .ticks(5)
-
- @svg.append("g")
- .attr("class", "y_axis")
- .attr("transform", "translate(" + @x_buffer + ",0)")
- .call(@yAxis)
-
- add_title: () ->
- @svg.append("text")
- .attr("class", "title")
- .text("Chr " + @chr[0])
- .attr("x", (d) =>
- return (@plot_width + @x_buffer)/2
- )
- .attr("y", @y_buffer + 20)
- .attr("dx", "0em")
- .attr("text-anchor", "middle")
- .attr("font-family", "sans-serif")
- .attr("font-size", "18px")
- .attr("fill", "black")
-
- add_back_button: () ->
- @svg.append("text")
- .attr("class", "back")
- .text("Return to full view")
- .attr("x", @x_buffer*2)
- .attr("y", @y_buffer/2)
- .attr("dx", "0em")
- .attr("text-anchor", "middle")
- .attr("font-family", "sans-serif")
- .attr("font-size", "18px")
- .attr("cursor", "pointer")
- .attr("fill", "black")
- .on("click", @return_to_full_view)
-
- add_path: () ->
- line_function = d3.svg.line()
- .x( (d) => return @x_scale(d[0]))
- .y( (d) => return @y_scale(d[1]))
- .interpolate("linear")
-
- line_graph = @svg.append("path")
- .attr("d", line_function(@plot_coordinates))
- .attr("stroke", "blue")
- .attr("stroke-width", 1)
- .attr("fill", "none")
-
- add_plot_points: () ->
- @plot_point = @svg.selectAll("circle")
- .data(@plot_coordinates)
- .enter()
- .append("circle")
- .attr("cx", (d) =>
- return @x_scale(d[0])
- )
- .attr("cy", (d) =>
- return @y_scale(d[1])
- )
- .attr("r", (d) =>
- #if d[1] > 2
- # return 3
- #else
- return 2
- )
- .attr("fill", (d) =>
- #if d[1] > 2
- # return "white"
- #else
- return "black"
- )
- .attr("stroke", "black")
- .attr("stroke-width", "1")
- .attr("id", (d) =>
- return "point_" + String(d[2])
- )
- .classed("circle", true)
- .on("mouseover", (d) =>
- console.log("d3.event is:", d3.event)
- console.log("d is:", d)
- this_id = "point_" + String(d[2])
- d3.select("#" + this_id).classed("d3_highlight", true)
- .attr("r", 5)
- .attr("stroke", "none")
- .attr("fill", "blue")
- .call(@show_marker_in_table(d))
- )
- .on("mouseout", (d) =>
- this_id = "point_" + String(d[2])
- d3.select("#" + this_id).classed("d3_highlight", false)
- .attr("r", (d) =>
- #if d[1] > 2
- # return 3
- #else
- return 2
- )
- .attr("fill", (d) =>
- #if d[1] > 2
- # return "white"
- #else
- return "black"
- )
- .attr("stroke", "black")
- .attr("stroke-width", "1")
- )
- .append("svg:title")
- .text((d) =>
- return d[2]
- )
-
- return_to_full_view: () ->
- $('#topchart').remove()
- $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>')
- create_manhattan_plot()
-
- show_marker_in_table: (marker_info) ->
- console.log("in show_marker_in_table")
- ### Searches for the select marker in the results table below ###
- if marker_info
- marker_name = marker_info[2]
- $("#qtl_results_filter").find("input:first").val(marker_name).change()
- #else
- # marker_name = ""
- #$("#qtl_results_filter").find("input:first").val(marker_name).change()
diff --git a/wqflask/wqflask/static/new/javascript/compare_traits_scatterplot.coffee b/wqflask/wqflask/static/new/javascript/compare_traits_scatterplot.coffee
deleted file mode 100644
index 64400c7d..00000000
--- a/wqflask/wqflask/static/new/javascript/compare_traits_scatterplot.coffee
+++ /dev/null
@@ -1,145 +0,0 @@
-root = exports ? this
-
-root.create_scatterplot = (json_ids, json_data) ->
-
- console.log("TESTING2")
-
- h = 400
- w = 500
- margin = {left:60, top:40, right:40, bottom: 40, inner:5}
- halfh = (h+margin.top+margin.bottom)
- totalh = halfh*2
- halfw = (w+margin.left+margin.right)
- totalw = halfw*2
-
- # Example 1: simplest use
- #d3.json "data.json", (data) ->
- mychart = scatterplot().xvar(0)
- .yvar(1)
- .xlab("X")
- .ylab("Y")
- .height(h)
- .width(w)
- .margin(margin)
-
- data = json_data
- indID = json_ids
- #slope = js_data.slope
- #intercept = js_data.intercept
-
- d3.select("div#comparison_scatterplot")
- .datum({data:data, indID:indID})
- .call(mychart)
-
- # animate points
- mychart.pointsSelect()
- .on "mouseover", (d) ->
- d3.select(this).attr("r", mychart.pointsize()*3)
- .on "mouseout", (d) ->
- d3.select(this).attr("r", mychart.pointsize())
-
-root.create_scatterplots = (trait_names, json_ids, json_data) ->
-
- #There are various places where 1 is subtracted from the number of traits; this is because
- #we don't want to show a first graph consisting of the trait vs itself. There might be a better
- #way to deal with this.
-
- console.log("json_data:", json_data)
- console.log("trait_names:", trait_names)
-
- num_traits = json_data.length
- console.log("num_traits:", num_traits)
-
- h = 300
- w = 400
- margin = {left:60, top:40, right:40, bottom: 40, inner:5}
- halfh = (h+margin.top+margin.bottom)
- totalh = halfh*(num_traits-1)
- #totalh = halfh*2
- halfw = (w+margin.left+margin.right)
- #totalw = halfw*2
- totalw = halfw
-
- xvar = []
- yvar = []
- xshift = []
- yshift = []
- for i in [0..num_traits-1]
- xvar.push(i)
- yvar.push(0)
- xshift.push(0)
- yshift.push(halfh*i)
-
- console.log("xvar:", xvar)
- console.log("yvar:", yvar)
-
- # Example 2: three scatterplots within one SVG, with brushing
- #d3.json "data.json", (data) ->
- #xvar = [1, 2, 2]
- #yvar = [0, 0, 1]
- #console.log("num_traits_array:", xvar)
- #xshift = [0, halfw, halfw]
- #yshift = [0, 0, halfh]
- #xshift = [0, 0]
- #yshift = [0, halfh]
-
- svg = d3.select("div#comparison_scatterplot")
- .append("svg")
- .attr("height", totalh)
- .attr("width", totalw)
-
- mychart = []
- chart = []
- for i in [1..num_traits-1]
- mychart[i-1] = scatterplot().xvar(xvar[i])
- .yvar(yvar[i])
- .nxticks(6)
- .height(h)
- .width(w)
- .margin(margin)
- .pointsize(4)
- .xlab("#{trait_names[i-1]}")
- .ylab("#{trait_names[0]}")
- .title("#{trait_names[0]} vs. #{trait_names[i-1]}")
-
- data = json_data
- indID = json_ids
-
- chart[i-1] = svg.append("g").attr("id", "chart#{i-1}")
- .attr("transform", "translate(#{xshift[i]},#{yshift[i-1]})")
- chart[i-1].datum({data:data, indID:indID}).call(mychart[i-1])
-
- brush = []
- brushstart = (i) ->
- () ->
- for j in [0..num_traits-2]
- chart[j].call(brush[j].clear()) if j != i
- svg.selectAll("circle").attr("opacity", 0.6).classed("selected", false)
-
- brushmove = (i) ->
- () ->
- svg.selectAll("circle").classed("selected", false)
- e = brush[i].extent()
- chart[i].selectAll("circle")
- .classed("selected", (d,j) ->
- circ = d3.select(this)
- cx = circ.attr("cx")
- cy = circ.attr("cy")
- selected = e[0][0] <= cx and cx <= e[1][0] and
- e[0][1] <= cy and cy <= e[1][1]
- svg.selectAll("circle.pt#{j}").classed("selected", true) if selected
- selected)
-
- brushend = () ->
- svg.selectAll("circle").attr("opacity", 1)
-
- xscale = d3.scale.linear().domain([margin.left,margin.left+w]).range([margin.left,margin.left+w])
- yscale = d3.scale.linear().domain([margin.top,margin.top+h]).range([margin.top,margin.top+h])
-
- for i in [0..num_traits-2]
- brush[i] = d3.svg.brush().x(xscale).y(yscale)
- .on("brushstart", brushstart(i))
- .on("brush", brushmove(i))
- .on("brushend", brushend)
-
- chart[i].call(brush[i]) \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/comparison_bar_chart.js b/wqflask/wqflask/static/new/javascript/comparison_bar_chart.js
new file mode 100644
index 00000000..5e73807c
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/comparison_bar_chart.js
@@ -0,0 +1,25 @@
+generate_traces = function() {
+ traces = [];
+ for (i = 0, _len = js_data.traits.length; i < _len; i++) {
+ this_trace = {
+ x: js_data.samples,
+ y: js_data.sample_data[i],
+ name: js_data.traits[i],
+ type: 'bar',
+ bargap: 20
+ }
+
+ traces.push(this_trace)
+ }
+
+ return traces
+}
+
+create_bar_chart = function() {
+ var data = generate_traces()
+ var layout = {barmode: 'group', bargap: 5};
+
+ Plotly.newPlot('comp_bar_chart', data, layout);
+}
+
+create_bar_chart(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/corr_matrix.coffee b/wqflask/wqflask/static/new/javascript/corr_matrix.coffee
deleted file mode 100644
index 4ecee1d4..00000000
--- a/wqflask/wqflask/static/new/javascript/corr_matrix.coffee
+++ /dev/null
@@ -1,275 +0,0 @@
-# iplotCorr.coffee
-#
-# Left panel is a heat map of a correlation matrix; hover over pixels
-# to see the values; click to see the corresponding scatterplot on the right
-
-root = exports ? this
-
-iplotCorr = (data, chartOpts) ->
-
- # data is an object with 7 components
- # data.indID vector of character strings, of length n, with IDs for individuals
- # data.var vector of character strings, of length p, with variable names
- # data.corr matrix of correlation values, of dim q x r, with q and r each <= p
- # data.rows vector of indicators, of length q, with values in {0, 1, ..., p-1},
- # for each row in data.corr, it says which is the corresponding column in data.dat
- # data.cols vector of indicators, of length r, with values in {0, 1, ..., p-1}
- # for each column in data.corr, it says which is the corresponding column in data.dat
- # data.dat numeric matrix, of dim n x p, with data to be plotted in scatterplots
- # rows correspond to data.indID and columns to data.var
- # data.group numeric vector, of length n, with values in {1, ..., k},
- # used as categories for coloring points in the scatterplot
-
- # chartOpts start
- height = chartOpts?.height ? 450 # height of each panel in pixels
- width = chartOpts?.width ? height # width of each panel in pixels
- margin = chartOpts?.margin ? {left:70, top:40, right:5, bottom: 70, inner:5} # margins in pixels (left, top, right, bottom, inner)
- corcolors = chartOpts?.corcolors ? ["darkslateblue", "white", "crimson"] # heat map colors (same length as `zlim`)
- zlim = chartOpts?.zlim ? [-1, 0, 1] # z-axis limits
- rectcolor = chartOpts?.rectcolor ? d3.rgb(230, 230, 230) # color of background rectangle
- cortitle = chartOpts?.cortitle ? "" # title for heatmap panel
- scattitle = chartOpts?.scattitle ? "" # title for scatterplot panel
- scatcolors = chartOpts?.scatcolors ? null # vector of point colors for scatterplot
- # chartOpts end
- chartdivid = chartOpts?.chartdivid ? 'chart'
-
- totalh = height + margin.top + margin.bottom
- totalw = (width + margin.left + margin.right)*2
-
- svg = d3.select("div##{chartdivid}")
- .append("svg")
- .attr("height", totalh)
- .attr("width", totalw)
-
- # panel for correlation image
- corrplot = svg.append("g")
- .attr("id", "corplot")
- .attr("transform", "translate(#{margin.left},#{margin.top})")
-
- # panel for scatterplot
- scatterplot = svg.append("g")
- .attr("id", "scatterplot")
- .attr("transform", "translate(#{margin.left*2+margin.right+width},#{margin.top})")
-
- # no. data points
- nind = data.indID.length
- nvar = data.var.length
- ncorrX = data.cols.length
- ncorrY = data.rows.length
-
- corXscale = d3.scale.ordinal().domain(d3.range(ncorrX)).rangeBands([0, width])
- corYscale = d3.scale.ordinal().domain(d3.range(ncorrY)).rangeBands([height, 0])
- corZscale = d3.scale.linear().domain(zlim).range(corcolors)
- pixel_width = corXscale(1)-corXscale(0)
- pixel_height = corYscale(0)-corYscale(1)
-
- # create list with correlations
- corr = []
- for i of data.corr
- for j of data.corr[i]
- corr.push({row:i, col:j, value:data.corr[i][j]})
-
-
- # gray background on scatterplot
- scatterplot.append("rect")
- .attr("height", height)
- .attr("width", width)
- .attr("fill", rectcolor)
- .attr("stroke", "black")
- .attr("stroke-width", 1)
- .attr("pointer-events", "none")
-
- corr_tip = d3.tip()
- .attr('class', 'd3-tip')
- .html((d) -> d3.format(".2f")(d.value))
- .direction('e')
- .offset([0,10])
- corrplot.call(corr_tip)
-
-
- cells = corrplot.selectAll("empty")
- .data(corr)
- .enter().append("rect")
- .attr("class", "cell")
- .attr("x", (d) -> corXscale(d.col))
- .attr("y", (d) -> corYscale(d.row))
- .attr("width", corXscale.rangeBand())
- .attr("height", corYscale.rangeBand())
- .attr("fill", (d) -> corZscale(d.value))
- .attr("stroke", "none")
- .attr("stroke-width", 2)
- .on("mouseover", (d) ->
- d3.select(this).attr("stroke", "black")
- corr_tip.show(d)
- corrplot.append("text").attr("class","corrlabel")
- .attr("x", corXscale(d.col)+pixel_width/2)
- .attr("y", height+margin.bottom*0.2)
- .text(data.var[data.cols[d.col]])
- .attr("dominant-baseline", "middle")
- .attr("text-anchor", "middle")
- corrplot.append("text").attr("class","corrlabel")
- .attr("y", corYscale(d.row)+pixel_height/2)
- .attr("x", -margin.left*0.1)
- .text(data.var[data.rows[d.row]])
- .attr("dominant-baseline", "middle")
- .attr("text-anchor", "end"))
- .on("mouseout", (d) ->
- corr_tip.hide(d)
- d3.selectAll("text.corrlabel").remove()
- d3.select(this).attr("stroke","none"))
- .on("click",(d) -> drawScatter(d.col, d.row))
-
- # colors for scatterplot
- nGroup = d3.max(data.group)
- if !(scatcolors?) or scatcolors.length < nGroup
- if nGroup == 1
- scatcolors = [ d3.rgb(150, 150, 150) ]
- else if nGroup <= 3
- scatcolors = ["crimson", "green", "darkslateblue"]
- else
- if nGroup <= 10
- colorScale = d3.scale.category10()
- else
- colorScale = d3.scale.category20()
- scatcolors = (colorScale(i) for i of d3.range(nGroup))
-
- scat_tip = d3.tip()
- .attr('class', 'd3-tip')
- .html((d,i) -> data.indID[i])
- .direction('e')
- .offset([0,10])
- scatterplot.call(scat_tip)
-
- drawScatter = (i,j) ->
- d3.selectAll("circle.points").remove()
- d3.selectAll("text.axes").remove()
- d3.selectAll("line.axes").remove()
- console.log("data.dat:", data.dat)
- console.log("data.cols:", data.cols)
- xScale = d3.scale.linear()
- .domain(d3.extent(data.dat[data.cols[i]]))
- .range([margin.inner, width-margin.inner])
- yScale = d3.scale.linear()
- .domain(d3.extent(data.dat[data.rows[j]]))
- .range([height-margin.inner, margin.inner])
- # axis labels
- scatterplot.append("text")
- .attr("id", "xaxis")
- .attr("class", "axes")
- .attr("x", width/2)
- .attr("y", height+margin.bottom*0.7)
- .text(data.var[data.cols[i]])
- .attr("dominant-baseline", "middle")
- .attr("text-anchor", "middle")
- .attr("fill", "slateblue")
- scatterplot.append("text")
- .attr("id", "yaxis")
- .attr("class", "axes")
- .attr("x", -margin.left*0.8)
- .attr("y", height/2)
- .text(data.var[data.rows[j]])
- .attr("dominant-baseline", "middle")
- .attr("text-anchor", "middle")
- .attr("transform", "rotate(270,#{-margin.left*0.8},#{height/2})")
- .attr("fill", "slateblue")
- # axis scales
- xticks = xScale.ticks(5)
- yticks = yScale.ticks(5)
- scatterplot.selectAll("empty")
- .data(xticks)
- .enter()
- .append("text")
- .attr("class", "axes")
- .text((d) -> formatAxis(xticks)(d))
- .attr("x", (d) -> xScale(d))
- .attr("y", height+margin.bottom*0.3)
- .attr("dominant-baseline", "middle")
- .attr("text-anchor", "middle")
- scatterplot.selectAll("empty")
- .data(yticks)
- .enter()
- .append("text")
- .attr("class", "axes")
- .text((d) -> formatAxis(yticks)(d))
- .attr("x", -margin.left*0.1)
- .attr("y", (d) -> yScale(d))
- .attr("dominant-baseline", "middle")
- .attr("text-anchor", "end")
- scatterplot.selectAll("empty")
- .data(xticks)
- .enter()
- .append("line")
- .attr("class", "axes")
- .attr("x1", (d) -> xScale(d))
- .attr("x2", (d) -> xScale(d))
- .attr("y1", 0)
- .attr("y2", height)
- .attr("stroke", "white")
- .attr("stroke-width", 1)
- scatterplot.selectAll("empty")
- .data(yticks)
- .enter()
- .append("line")
- .attr("class", "axes")
- .attr("y1", (d) -> yScale(d))
- .attr("y2", (d) -> yScale(d))
- .attr("x1", 0)
- .attr("x2", width)
- .attr("stroke", "white")
- .attr("stroke-width", 1)
- # the points
- scatterplot.selectAll("empty")
- .data(d3.range(nind))
- .enter()
- .append("circle")
- .attr("class", "points")
- .attr("cx", (d) -> xScale(data.dat[data.cols[i]][d]))
- .attr("cy", (d) -> yScale(data.dat[data.rows[j]][d]))
- .attr("r", (d) ->
- x = data.dat[data.cols[i]][d]
- y = data.dat[data.rows[j]][d]
- if x? and y? then 3 else null)
- .attr("stroke", "black")
- .attr("stroke-width", 1)
- .attr("fill", (d) -> scatcolors[data.group[d]-1])
- .on("mouseover", scat_tip.show)
- .on("mouseout", scat_tip.hide)
-
- # boxes around panels
- corrplot.append("rect")
- .attr("height", height)
- .attr("width", width)
- .attr("fill", "none")
- .attr("stroke", "black")
- .attr("stroke-width", 1)
- .attr("pointer-events", "none")
-
- scatterplot.append("rect")
- .attr("height", height)
- .attr("width", width)
- .attr("fill", "none")
- .attr("stroke", "black")
- .attr("stroke-width", 1)
- .attr("pointer-events", "none")
-
- # text above
- corrplot.append("text")
- .text(cortitle)
- .attr("id", "corrtitle")
- .attr("x", width/2)
- .attr("y", -margin.top/2)
- .attr("dominant-baseline", "middle")
- .attr("text-anchor", "middle")
-
- scatterplot.append("text")
- .text(scattitle)
- .attr("id", "scattitle")
- .attr("x", width/2)
- .attr("y", -margin.top/2)
- .attr("dominant-baseline", "middle")
- .attr("text-anchor", "middle")
-
- d3.select("div#caption")
- .style("opacity", 1)
-
-root.corr_matrix = iplotCorr \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/corr_scatter_plot.coffee b/wqflask/wqflask/static/new/javascript/corr_scatter_plot.coffee
deleted file mode 100644
index 29a0e8f7..00000000
--- a/wqflask/wqflask/static/new/javascript/corr_scatter_plot.coffee
+++ /dev/null
@@ -1,67 +0,0 @@
-root = exports ? this
-
-class Scatter_Plot
- constructor: () ->
- data = new Array()
- samples_1 = js_data.samples_1
- samples_2 = js_data.samples_2
- i = 0
- for samplename of samples_1
- sample1 = samples_1[samplename]
- sample2 = samples_2[samplename]
- data[i++] = [sample1.value, sample2.value]
- margin =
- top: 100
- right: 15
- bottom: 60
- left: 60
-
- width = js_data.width - margin.left - margin.right
- height = js_data.height - margin.top - margin.bottom
- minx = d3.min(data, (d) ->
- d[0]
- ) * 0.95
- maxx = d3.max(data, (d) ->
- d[0]
- ) * 1.05
- miny = d3.min(data, (d) ->
- d[1]
- ) * 0.95
- maxy = d3.max(data, (d) ->
- d[1]
- ) * 1.05
- x = d3.scale.linear().domain([minx, maxx]).range([0, width])
- y = d3.scale.linear().domain([miny, maxy]).range([height, 0])
- chart = d3.select("#scatter_plot").append("svg:svg").attr("width", width + margin.right + margin.left).attr("height", height + margin.top + margin.bottom).attr("class", "chart")
- main = chart.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")").attr("width", width).attr("height", height).attr("class", "main")
-
- # draw the x axis
- xAxis = d3.svg.axis().scale(x).orient("bottom")
- main.append("g").attr("transform", "translate(0," + height + ")").attr("class", "main axis date").call xAxis
-
- # draw the y axis
- yAxis = d3.svg.axis().scale(y).orient("left")
- main.append("g").attr("transform", "translate(0,0)").attr("class", "main axis date").call yAxis
- g = main.append("svg:g")
- g.selectAll("scatter-dots").data(data).enter().append("svg:circle").attr("cx", (d) ->
- x d[0]
- ).attr("cy", (d) ->
- y d[1]
- ).attr("fill", js_data.circle_color).attr "r", js_data.circle_radius
- main.append("line").attr("x1", x(minx)).attr("y1", y(js_data.slope * minx + js_data.intercept)).attr("x2", x(maxx * 0.995)).attr("y2", y(js_data.slope * maxx * 0.995 + js_data.intercept)).style("stroke", js_data.line_color).style "stroke-width", js_data.line_width
- chart.append("text").attr("x", width / 2).attr("y", margin.top / 2 - 25).text "Sample Correlation Scatterplot"
- text = ""
- text += "N=" + js_data.num_overlap
- chart.append("text").attr("x", margin.left).attr("y", margin.top / 2 - 5).text text
- text = ""
- text += "r=" + js_data.r_value + "\t"
- text += "p(r)=" + js_data.p_value
- chart.append("text").attr("x", margin.left).attr("y", margin.top / 2 + 15).text text
- text = ""
- text += "slope=" + js_data.slope + "\t"
- text += "intercept=" + js_data.intercept
- chart.append("text").attr("x", margin.left).attr("y", margin.top / 2 + 35).text text
- chart.append("text").attr("x", width / 2).attr("y", height + margin.top + 35).text js_data.trait_1
- chart.append("text").attr("x", 20).attr("y", height / 2 + margin.top + 30).attr("transform", "rotate(-90 20," + (height / 2 + margin.top + 30) + ")").text js_data.trait_2
-
-root.Scatter_Plot = Scatter_Plot
diff --git a/wqflask/wqflask/static/new/javascript/create_corr_matrix.coffee b/wqflask/wqflask/static/new/javascript/create_corr_matrix.coffee
deleted file mode 100644
index 88b392d0..00000000
--- a/wqflask/wqflask/static/new/javascript/create_corr_matrix.coffee
+++ /dev/null
@@ -1,42 +0,0 @@
-root = exports ? this
-
-$ ->
- console.log("js_data:", js_data)
-
- chartOpts = get_options()
- data = get_data()
- console.log(data)
-
- mychart = corr_matrix(data, chartOpts)
-
-
-get_options = ->
- #h = 450
- #w = 450
- #margin = {left:70, top:40, right:5, bottom: 70, inner:5}
- #
- chartOpts =
- cortitle: "Correlation Matrix"
- scattitle: "Scatterplot"
- h: 450
- w: 450
- margin: {left:100, top:40, right:5, bottom: 70, inner:5}
-
- return chartOpts
-
-get_data = ->
- data = {}
- data.var = js_data.traits
- data.group = js_data.groups
- data.indID = js_data.samples
- data.dat = js_data.sample_data
- data.corr = js_data.corr_results
- data.cols = js_data.cols
- data.rows = js_data.rows
-
-
- return data
-
-
-
- \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/create_corr_matrix.js b/wqflask/wqflask/static/new/javascript/create_corr_matrix.js
index 44ed3c81..c0c39fbc 100644
--- a/wqflask/wqflask/static/new/javascript/create_corr_matrix.js
+++ b/wqflask/wqflask/static/new/javascript/create_corr_matrix.js
@@ -1,57 +1,12 @@
-// Generated by CoffeeScript 1.8.0
-// var get_data, get_options, root;
-
-// root = typeof exports !== "undefined" && exports !== null ? exports : this;
-
-// $(function() {
- // var chartOpts, data, mychart;
- // console.log("js_data:", js_data);
- // chartOpts = get_options();
- // data = get_data();
- // console.log(data);
- // return mychart = corr_matrix(data, chartOpts);
-// });
-
-// get_options = function() {
- // var chartOpts;
- // chartOpts = {
- // cortitle: "Correlation Matrix",
- // scattitle: "Scatterplot",
- // h: 450,
- // w: 450,
- // margin: {
- // left: 100,
- // top: 40,
- // right: 5,
- // bottom: 70,
- // inner: 5
- // }
- // };
- // return chartOpts;
-// };
-
-// get_data = function() {
- // var data;
- // data = {};
- // data["var"] = js_data.traits;
- // data.group = js_data.groups;
- // data.indID = js_data.samples;
- // data.dat = js_data.sample_data;
- // data.corr = js_data.corr_results;
- // data.cols = js_data.cols;
- // data.rows = js_data.rows;
- // return data;
-// };
-
-var neg_color_scale = chroma.scale(['#FF0000', 'white']).domain([-1, -0.4]);
-var pos_color_scale = chroma.scale(['white', 'aqua']).domain([0.4, 1])
+var neg_color_scale = chroma.scale(['#91bfdb', '#ffffff']).domain([-1, -0.4]);
+var pos_color_scale = chroma.scale(['#ffffff', '#fc8d59']).domain([0.4, 1])
$('.corr_cell').each( function () {
corr_value = parseFloat($(this).find('span.corr_value').text())
if (corr_value >= 0.5){
- $(this).css('background-color', pos_color_scale(parseFloat(corr_value)))
+ $(this).css('background-color', pos_color_scale(parseFloat(corr_value))._rgb)
}
else if (corr_value <= -0.5) {
- $(this).css('background-color', neg_color_scale(parseFloat(corr_value)))
+ $(this).css('background-color', neg_color_scale(parseFloat(corr_value))._rgb)
}
else {
$(this).css('background-color', 'white')
@@ -59,6 +14,11 @@ $('.corr_cell').each( function () {
});
$('#short_labels').click( function (){
+ if ($('.short_check').css("display") == "none"){
+ $('.short_check').css("display", "inline-block")
+ } else {
+ $('.short_check').css("display", "none")
+ }
$('.shortName').each( function() {
if ($(this).css("display") == "none"){
$(this).css("display", "block");
@@ -70,6 +30,11 @@ $('#short_labels').click( function (){
});
$('#long_labels').click( function (){
+ if ($('.long_check').css("display") == "none"){
+ $('.long_check').css("display", "inline-block")
+ } else {
+ $('.long_check').css("display", "none")
+ }
$('.verboseName').each( function() {
if ($(this).css("display") == "none"){
$(this).css("display", "block");
@@ -78,4 +43,52 @@ $('#long_labels').click( function (){
$(this).css("display", "none");
}
});
-}); \ No newline at end of file
+});
+
+select_all = function() {
+ $(".trait_checkbox").each(function() {
+ $(this).prop('checked', true);
+ });
+};
+
+deselect_all = function() {
+ $(".trait_checkbox").each(function() {
+ $(this).prop('checked', false);
+ });
+};
+
+change_buttons = function() {
+ num_checked = $('.trait_checkbox:checked').length;
+ if (num_checked === 0) {
+ $("#add").prop("disabled", true);
+ } else {
+ $("#add").prop("disabled", false);
+ }
+};
+
+add = function() {
+ var traits;
+ traits = $("input[name=pca_trait]:checked").map(function() {
+ return $(this).val();
+ }).get();
+
+ var traits_hash = md5(traits.toString());
+
+ $.ajax({
+ type: "POST",
+ url: "/collections/store_trait_list",
+ data: {
+ hash: traits_hash,
+ traits: traits.toString()
+ }
+ });
+
+ return $.colorbox({
+ href: "/collections/add?hash=" + traits_hash
+ });
+}
+
+$("#select_all").click(select_all);
+$("#deselect_all").click(deselect_all);
+$("#add").click(add);
+$(".btn, .trait_checkbox").click(change_buttons);
diff --git a/wqflask/wqflask/static/new/javascript/create_heatmap.coffee b/wqflask/wqflask/static/new/javascript/create_heatmap.coffee
deleted file mode 100644
index d3f9fb09..00000000
--- a/wqflask/wqflask/static/new/javascript/create_heatmap.coffee
+++ /dev/null
@@ -1,18 +0,0 @@
-create_heatmap = () ->
-
- h = 500
- w = 1200
-
- mychart = lodheatmap().height(h)
- .width(w)
- #.zthresh(1)
-
- data = js_data.json_data
-
- console.log("data:", data)
-
- d3.select("div#chart")
- .datum(data)
- .call(mychart)
-
-create_heatmap() \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/create_lodchart.coffee b/wqflask/wqflask/static/new/javascript/create_lodchart.coffee
deleted file mode 100644
index 88003f4e..00000000
--- a/wqflask/wqflask/static/new/javascript/create_lodchart.coffee
+++ /dev/null
@@ -1,50 +0,0 @@
-create_lod_chart = ->
- h = 500
- w = 1200
- margin = {left:60, top:40, right:40, bottom: 40, inner:5}
- halfh = (h+margin.top+margin.bottom)
- totalh = halfh*2
- totalw = (w+margin.left+margin.right)
- if 'additive' of js_data
- additive = js_data.additive
- else
- additive = false
-
- console.log("js_data:", js_data)
-
- # simplest use
- #d3.json "data.json", (data) ->
- mychart = lodchart().lodvarname("lod.hk")
- .height(h)
- .width(w)
- .margin(margin)
- .ylab(js_data.result_score_type + " score")
- .manhattanPlot(js_data.manhattan_plot)
- #.additive(additive)
-
- data = js_data.json_data
-
- d3.select("div#topchart")
- .datum(data)
- .call(mychart)
-
- # grab chromosome rectangles; color pink on hover
- chrrect = mychart.chrSelect()
- chrrect.on "mouseover", ->
- d3.select(this).attr("fill", "#E9CFEC")
- .on "mouseout", (d,i) ->
- d3.select(this).attr("fill", ->
- return "#F1F1F9" if i % 2
- "#FBFBFF")
-
- # animate points at markers on click
- mychart.markerSelect()
- .on "click", (d) ->
- r = d3.select(this).attr("r")
- d3.select(this)
- .transition().duration(500).attr("r", r*3)
- .transition().duration(500).attr("r", r)
-
-$ ->
- root.create_lod_chart = create_lod_chart
-
diff --git a/wqflask/wqflask/static/new/javascript/create_manhattan_plot.coffee b/wqflask/wqflask/static/new/javascript/create_manhattan_plot.coffee
deleted file mode 100644
index a4c41227..00000000
--- a/wqflask/wqflask/static/new/javascript/create_manhattan_plot.coffee
+++ /dev/null
@@ -1,82 +0,0 @@
-create_manhattan_plot = ->
- h = 500
- w = 1200
- margin = {left:60, top:40, right:40, bottom: 40, inner:5}
- halfh = (h+margin.top+margin.bottom)
- totalh = halfh*2
- totalw = (w+margin.left+margin.right)
-
- console.log("js_data:", js_data)
-
- # simplest use
- #d3.json "data.json", (data) ->
- mychart = lodchart().lodvarname("lod.hk")
- .height(h)
- .width(w)
- .margin(margin)
- .ylab("LOD score")
- .manhattanPlot(js_data.manhattan_plot)
-
- data = js_data.json_data
-
- d3.select("div#topchart")
- .datum(data)
- .call(mychart)
-
- # grab chromosome rectangles; color pink on hover
- chrrect = mychart.chrSelect()
- chrrect.on "mouseover", ->
- d3.select(this).attr("fill", "#E9CFEC")
- .on "mouseout", (d,i) ->
- d3.select(this).attr("fill", ->
- return "#F1F1F9" if i % 2
- "#FBFBFF")
-
- # animate points at markers on click
- mychart.markerSelect()
- .on "click", (d) ->
- r = d3.select(this).attr("r")
- d3.select(this)
- .transition().duration(500).attr("r", r*3)
- .transition().duration(500).attr("r", r)
-
-create_manhattan_plot()
-
-$("#export").click =>
- #Get d3 SVG element
- svg = $("#topchart").find("svg")[0]
-
- #Extract SVG text string
- svg_xml = (new XMLSerializer).serializeToString(svg)
- console.log("svg_xml:", svg_xml)
-
- #Set filename
- filename = "manhattan_plot_" + js_data.this_trait
-
- #Make a form with the SVG data
- form = $("#exportform")
- form.find("#data").val(svg_xml)
- form.find("#filename").val(filename)
- form.submit()
-
-$("#export_pdf").click =>
-
- #$('#topchart').remove()
- #$('#chart_container').append('<div class="qtlcharts" id="topchart"></div>')
- #create_interval_map()
-
- #Get d3 SVG element
- svg = $("#topchart").find("svg")[0]
-
- #Extract SVG text string
- svg_xml = (new XMLSerializer).serializeToString(svg)
- console.log("svg_xml:", svg_xml)
-
- #Set filename
- filename = "manhattan_plot_" + js_data.this_trait
-
- #Make a form with the SVG data
- form = $("#exportpdfform")
- form.find("#data").val(svg_xml)
- form.find("#filename").val(filename)
- form.submit()
diff --git a/wqflask/wqflask/static/new/javascript/curvechart.coffee b/wqflask/wqflask/static/new/javascript/curvechart.coffee
deleted file mode 100644
index 7ed4359a..00000000
--- a/wqflask/wqflask/static/new/javascript/curvechart.coffee
+++ /dev/null
@@ -1,335 +0,0 @@
-# curvechart: reuseable chart with many curves
-
-curvechart = () ->
- width = 800
- height = 500
- margin = {left:60, top:40, right:40, bottom: 40, inner:5}
- axispos = {xtitle:25, ytitle:30, xlabel:5, ylabel:5}
- titlepos = 20
- xlim = null
- ylim = null
- nxticks = 5
- xticks = null
- nyticks = 5
- yticks = null
- rectcolor = "#e6e6e6"
- strokecolor = null
- strokecolorhilit = null
- strokewidth = 2
- strokewidthhilit = 2
- title = ""
- xlab = "X"
- ylab = "Y"
- rotate_ylab = null
- yscale = d3.scale.linear()
- xscale = d3.scale.linear()
- curvesSelect = null
- commonX = true
-
- ## the main function
- chart = (selection) ->
- selection.each (data) ->
-
- # grab indID if it's there
- # if no indID, create a vector of them
- indID = data?.indID ? null
- indID = indID ? [1..data.data.length]
-
- # groups of colors
- group = data?.group ? (1 for i of data.data)
- ngroup = d3.max(group)
- group = (g-1 for g in group) # changed from (1,2,3,...) to (0,1,2,...)
-
- # default light stroke colors
- strokecolor = strokecolor ? selectGroupColors(ngroup, "pastel")
- strokecolor = expand2vector(strokecolor, ngroup)
-
- # default dark stroke colors
- strokecolorhilit = strokecolorhilit ? selectGroupColors(ngroup, "dark")
- strokecolorhilit = expand2vector(strokecolorhilit, ngroup)
-
- # reorganize data?
- if commonX # reorganize data
- data = ({x:data.x, y:data.data[i]} for i of data.data)
- else
- data = data.data
-
- xlim = xlim ? d3.extent(pullVarAsArray(data, "x"))
- ylim = ylim ? d3.extent(pullVarAsArray(data, "y"))
-
- # reorganize again
- for i of data
- tmp = data[i]
- data[i] = []
- for j of tmp.x
- data[i].push({x:tmp.x[j], y:tmp.y[j]}) unless !tmp.x[j]? or !tmp.y[j]?
-
- # Select the svg element, if it exists.
- svg = d3.select(this).selectAll("svg").data([data])
-
- # Otherwise, create the skeletal chart.
- gEnter = svg.enter().append("svg").append("g")
-
- # Update the outer dimensions.
- svg.attr("width", width+margin.left+margin.right)
- .attr("height", height+margin.top+margin.bottom)
-
- g = svg.select("g")
-
- # box
- g.append("rect")
- .attr("x", margin.left)
- .attr("y", margin.top)
- .attr("height", height)
- .attr("width", width)
- .attr("fill", rectcolor)
- .attr("stroke", "none")
-
- # scales
- xrange = [margin.left+margin.inner, margin.left+width-margin.inner]
- yrange = [margin.top+height-margin.inner, margin.top+margin.inner]
- xscale.domain(xlim).range(xrange)
- yscale.domain(ylim).range(yrange)
- xs = d3.scale.linear().domain(xlim).range(xrange)
- ys = d3.scale.linear().domain(ylim).range(yrange)
-
- # if yticks not provided, use nyticks to choose pretty ones
- yticks = yticks ? ys.ticks(nyticks)
- xticks = xticks ? xs.ticks(nxticks)
-
- # title
- titlegrp = g.append("g").attr("class", "title")
- .append("text")
- .attr("x", margin.left + width/2)
- .attr("y", margin.top - titlepos)
- .text(title)
-
- # x-axis
- xaxis = g.append("g").attr("class", "x axis")
- xaxis.selectAll("empty")
- .data(xticks)
- .enter()
- .append("line")
- .attr("x1", (d) -> xscale(d))
- .attr("x2", (d) -> xscale(d))
- .attr("y1", margin.top)
- .attr("y2", margin.top+height)
- .attr("fill", "none")
- .attr("stroke", "white")
- .attr("stroke-width", 1)
- .style("pointer-events", "none")
- xaxis.selectAll("empty")
- .data(xticks)
- .enter()
- .append("text")
- .attr("x", (d) -> xscale(d))
- .attr("y", margin.top+height+axispos.xlabel)
- .text((d) -> formatAxis(xticks)(d))
- xaxis.append("text").attr("class", "title")
- .attr("x", margin.left+width/2)
- .attr("y", margin.top+height+axispos.xtitle)
- .text(xlab)
-
- # y-axis
- rotate_ylab = rotate_ylab ? (ylab.length > 1)
- yaxis = g.append("g").attr("class", "y axis")
- yaxis.selectAll("empty")
- .data(yticks)
- .enter()
- .append("line")
- .attr("y1", (d) -> yscale(d))
- .attr("y2", (d) -> yscale(d))
- .attr("x1", margin.left)
- .attr("x2", margin.left+width)
- .attr("fill", "none")
- .attr("stroke", "white")
- .attr("stroke-width", 1)
- .style("pointer-events", "none")
- yaxis.selectAll("empty")
- .data(yticks)
- .enter()
- .append("text")
- .attr("y", (d) -> yscale(d))
- .attr("x", margin.left-axispos.ylabel)
- .text((d) -> formatAxis(yticks)(d))
- yaxis.append("text").attr("class", "title")
- .attr("y", margin.top+height/2)
- .attr("x", margin.left-axispos.ytitle)
- .text(ylab)
- .attr("transform", if rotate_ylab then "rotate(270,#{margin.left-axispos.ytitle},#{margin.top+height/2})" else "")
-
- indtip = d3.tip()
- .attr('class', 'd3-tip')
- .html((d) -> indID[d])
- .direction('e')
- .offset([0,10])
- svg.call(indtip)
-
- curve = d3.svg.line()
- .x((d) -> xscale(d.x))
- .y((d) -> yscale(d.y))
-
- curves = g.append("g").attr("id", "curves")
- curvesSelect =
- curves.selectAll("empty")
- .data(d3.range(data.length))
- .enter()
- .append("path")
- .datum((d) -> data[d])
- .attr("d", curve)
- .attr("class", (d,i) -> "path#{i}")
- .attr("fill", "none")
- .attr("stroke", (d,i) -> strokecolor[group[i]])
- .attr("stroke-width", strokewidth)
- .on "mouseover.panel", (d,i) ->
- d3.select(this).attr("stroke", strokecolorhilit[group[i]]).moveToFront()
- circle = d3.select("circle#hiddenpoint#{i}")
- indtip.show(i, circle.node())
- .on "mouseout.panel", (d,i) ->
- d3.select(this).attr("stroke", strokecolor[group[i]]).moveToBack()
- indtip.hide()
-
- # grab the last non-null point from each curve
- lastpoint = ({x:null, y:null} for i of data)
- for i of data
- for v in data[i]
- lastpoint[i] = v if v.x? and v.y?
-
- pointsg = g.append("g").attr("id", "invisiblepoints")
- points = pointsg.selectAll("empty")
- .data(lastpoint)
- .enter()
- .append("circle")
- .attr("id", (d,i) -> "hiddenpoint#{i}")
- .attr("cx", (d) -> xscale(d.x))
- .attr("cy", (d) -> yscale(d.y))
- .attr("r", 1)
- .attr("opacity", 0)
-
- # box
- g.append("rect")
- .attr("x", margin.left)
- .attr("y", margin.top)
- .attr("height", height)
- .attr("width", width)
- .attr("fill", "none")
- .attr("stroke", "black")
- .attr("stroke-width", "none")
-
- ## configuration parameters
- chart.width = (value) ->
- return width if !arguments.length
- width = value
- chart
-
- chart.height = (value) ->
- return height if !arguments.length
- height = value
- chart
-
- chart.margin = (value) ->
- return margin if !arguments.length
- margin = value
- chart
-
- chart.axispos = (value) ->
- return axispos if !arguments.length
- axispos = value
- chart
-
- chart.titlepos = (value) ->
- return titlepos if !arguments.length
- titlepos
- chart
-
- chart.xlim = (value) ->
- return xlim if !arguments.length
- xlim = value
- chart
-
- chart.nxticks = (value) ->
- return nxticks if !arguments.length
- nxticks = value
- chart
-
- chart.xticks = (value) ->
- return xticks if !arguments.length
- xticks = value
- chart
-
- chart.ylim = (value) ->
- return ylim if !arguments.length
- ylim = value
- chart
-
- chart.nyticks = (value) ->
- return nyticks if !arguments.length
- nyticks = value
- chart
-
- chart.yticks = (value) ->
- return yticks if !arguments.length
- yticks = value
- chart
-
- chart.rectcolor = (value) ->
- return rectcolor if !arguments.length
- rectcolor = value
- chart
-
- chart.strokecolor = (value) ->
- return strokecolor if !arguments.length
- strokecolor = value
- chart
-
- chart.strokecolorhilit = (value) ->
- return strokecolorhilit if !arguments.length
- strokecolorhilit = value
- chart
-
- chart.strokewidth = (value) ->
- return strokewidth if !arguments.length
- strokewidth = value
- chart
-
- chart.strokewidthhilit = (value) ->
- return strokewidthhilit if !arguments.length
- strokewidthhilit = value
- chart
-
- chart.commonX = (value) ->
- return commonX if !arguments.length
- commonX = value
- chart
-
- chart.title = (value) ->
- return title if !arguments.length
- title = value
- chart
-
- chart.xlab = (value) ->
- return xlab if !arguments.length
- xlab = value
- chart
-
- chart.ylab = (value) ->
- return ylab if !arguments.length
- ylab = value
- chart
-
- chart.rotate_ylab = (value) ->
- return rotate_ylab if !arguments.length
- rotate_ylab = value
- chart
-
- chart.yscale = () ->
- return yscale
-
- chart.xscale = () ->
- return xscale
-
- chart.curvesSelect = () ->
- return curvesSelect
-
- # return the chart function
- chart \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/dataset_menu_structure.json b/wqflask/wqflask/static/new/javascript/dataset_menu_structure.json
index 861af3d6..f9bce083 100644
--- a/wqflask/wqflask/static/new/javascript/dataset_menu_structure.json
+++ b/wqflask/wqflask/static/new/javascript/dataset_menu_structure.json
@@ -1,5023 +1,5779 @@
{
"datasets": {
- "All Species": {
- "All Groups": {
- "Phenotypes": [
- [
- "All Phenotypes",
- "All Phenotypes"
- ]
- ]
- }
- },
"arabidopsis": {
"BayXSha": {
"Genotypes": [
[
- "None",
- "BayXShaGeno",
+ "None",
+ "BayXShaGeno",
"BayXSha Genotypes"
]
- ],
+ ],
"Phenotypes": [
[
- "642",
- "BayXShaPublish",
+ "642",
+ "BayXShaPublish",
"BayXSha Published Phenotypes"
]
]
- },
+ },
"ColXBur": {
"Genotypes": [
[
- "None",
- "ColXBurGeno",
+ "None",
+ "ColXBurGeno",
"ColXBur Genotypes"
]
- ],
+ ],
"Phenotypes": [
[
- "623",
- "ColXBurPublish",
+ "623",
+ "ColXBurPublish",
"ColXBur Published Phenotypes"
]
]
- },
+ },
"ColXCvi": {
"Genotypes": [
[
- "None",
- "ColXCviGeno",
+ "None",
+ "ColXCviGeno",
"ColXCvi Genotypes"
]
- ],
+ ],
"Phenotypes": [
[
- "640",
- "ColXCviPublish",
+ "640",
+ "ColXCviPublish",
"ColXCvi Published Phenotypes"
]
]
}
- },
+ },
"barley": {
"QSM": {
"Leaf mRNA": [
[
- "236",
- "B1LI0809R",
+ "236",
+ "B1LI0809R",
"Barley1 Leaf INOC TTKS (Aug09) RMA"
- ],
+ ],
[
- "235",
- "B1LI0809M5",
+ "235",
+ "B1LI0809M5",
"Barley1 Leaf INOC TTKS (Aug09) MAS5"
- ],
+ ],
[
- "237",
- "B1MI0809M5",
+ "237",
+ "B1MI0809M5",
"Barley1 Leaf MOCK TTKS (Aug09) MAS5"
- ],
+ ],
[
- "238",
- "B1MI0809R",
+ "238",
+ "B1MI0809R",
"Barley1 Leaf MOCK TTKS (Aug09) RMA"
]
]
- },
+ },
"SXM": {
"Embryo mRNA": [
[
- "128",
- "B139_K_1206_R",
+ "128",
+ "B139_K_1206_R",
"Barley1 Embryo gcRMA SCRI (Dec06)"
- ],
+ ],
[
- "124",
- "B139_K_1206_M",
+ "124",
+ "B139_K_1206_M",
"Barley1 Embryo MAS 5.0 SCRI (Dec06)"
- ],
+ ],
[
- "114",
- "B150_K_0406_R",
+ "114",
+ "B150_K_0406_R",
"Barley1 Embryo0 gcRMA SCRI (Apr06)"
]
- ],
+ ],
"Genotypes": [
[
- "615",
- "SXMGeno",
+ "615",
+ "SXMGeno",
"SXM Genotypes"
]
- ],
+ ],
"Leaf mRNA": [
[
- "127",
- "B30_K_1206_M",
+ "127",
+ "B30_K_1206_M",
"Barley1 Leaf MAS 5.0 SCRI (Dec06)"
- ],
- [
- "126",
- "B30_K_1206_Rn",
- "Barley1 Leaf gcRMAn SCRI (Dec06)"
- ],
+ ],
[
- "125",
- "B30_K_1206_R",
+ "125",
+ "B30_K_1206_R",
"Barley1 Leaf gcRMA SCRI (Dec06)"
+ ],
+ [
+ "126",
+ "B30_K_1206_Rn",
+ "Barley1 Leaf gcRMAn SCRI (Dec06)"
]
- ],
+ ],
"Phenotypes": [
[
- "608",
- "SXMPublish",
- "SXM Published Phenotypes"
+ "608",
+ "SXMPublish",
+ "Barley SMP Published Phenotypes"
]
]
}
- },
+ },
"drosophila": {
"DGRP": {
"Whole Body mRNA": [
[
- "297",
- "NCSU_DrosWB_LC_RMA_0111",
+ "297",
+ "NCSU_DrosWB_LC_RMA_0111",
"NCSU Drosophila Whole Body (Jan11) RMA"
]
]
- },
+ },
"Oregon-R_x_2b3": {
"Whole Body mRNA": [
[
- "249",
- "UAB_DrosWB_LC_RMA_1009",
+ "249",
+ "UAB_DrosWB_LC_RMA_1009",
"UAB Whole body D.m. mRNA control (Oct09) RMA"
- ],
+ ],
[
- "250",
- "UAB_DrosWB_LE_RMA_1009",
+ "250",
+ "UAB_DrosWB_LE_RMA_1009",
"UAB Whole body D.m. mRNA lead (pbAc) (Oct09) RMA"
]
]
}
- },
+ },
"human": {
"AD-cases-controls": {
"Brain mRNA": [
[
- "314",
- "GSE5281_F_RMA_N_0709",
+ "314",
+ "GSE5281_F_RMA_N_0709",
"GSE5281 Human Brain Normal Full Liang (Jul09) RMA"
- ],
+ ],
[
- "313",
- "GSE5281_F_RMA_Alzh_0709",
+ "313",
+ "GSE5281_F_RMA_Alzh_0709",
"GSE5281 Human Brain Alzheimer Full Liang (Jul09) RMA"
- ],
+ ],
[
- "233",
- "GSE5281_F_RMA0709",
+ "233",
+ "GSE5281_F_RMA0709",
"GSE5281 Human Brain Full Liang (Jul09) RMA"
- ],
+ ],
[
- "232",
- "GSE5281_RMA0709",
+ "232",
+ "GSE5281_RMA0709",
"GSE5281 Human Brain Best 102 Liang (Jul09) RMA"
]
]
- },
+ },
"AD-cases-controls-Myers": {
"Brain mRNA": [
[
- "234",
- "GSE15222_F_RI_0409",
+ "234",
+ "GSE15222_F_RI_0409",
"GSE15222 Human Brain All Cases Myers (Apr09) RankInv"
- ],
+ ],
[
- "290",
- "GSE15222_F_N_RI_0409",
+ "290",
+ "GSE15222_F_N_RI_0409",
"GSE15222 Human Brain Normal Myers (Apr09) RankInv"
- ],
+ ],
[
- "289",
- "GSE15222_F_A_RI_0409",
+ "289",
+ "GSE15222_F_A_RI_0409",
"GSE15222 Human Brain Alzheimer Myers (Apr09) RankInv"
]
- ],
+ ],
"Genotypes": [
[
- "None",
- "AD-cases-controls-MyersGeno",
+ "None",
+ "AD-cases-controls-MyersGeno",
"AD-cases-controls-Myers Genotypes"
]
- ],
+ ],
"Phenotypes": [
[
- "None",
- "AD-cases-controls-MyersPublish",
+ "None",
+ "AD-cases-controls-MyersPublish",
"AD-cases-controls-Myers Published Phenotypes"
]
]
- },
+ },
"Aging-Brain-UCI": {
"Entorhinal Cortex mRNA": [
[
- "460",
- "UCI_EC_0913",
+ "460",
+ "UCI_EC_0913",
"GSE11882 UCI Human Entorhinal Cortex Affy U133 Plus2 (Sep13) RMA"
]
- ],
+ ],
"Hippocampus mRNA": [
[
- "461",
- "UCI_HC_0913",
+ "461",
+ "UCI_HC_0913",
"GSE11882 UCI Human Hippocampus Affy U133 Plus2 (Sep13) RMA"
]
- ],
+ ],
"Phenotypes": [
[
- "None",
- "Aging-Brain-UCIPublish",
+ "None",
+ "Aging-Brain-UCIPublish",
"Aging-Brain-UCI Published Phenotypes"
]
- ],
+ ],
"Postcentral Gyrus mRNA": [
[
- "462",
- "UCI_PCG_0913",
+ "462",
+ "UCI_PCG_0913",
"GSE11882 UCI Human Postcentral Gyrus Affy U133 Plus2 (Sep13) RMA"
]
- ],
+ ],
"Superior Frontal Gyrus mRNA": [
[
- "463",
- "UCI_SG_0913",
+ "463",
+ "UCI_SG_0913",
"GSE11882 UCI Human Superior Frontal Gyrus Affy U133 Plus2 (Sep13) RMA"
]
]
- },
+ },
"Brain-Normal-NIH-Gibbs": {
"Cerebellum mRNA": [
[
- "481",
- "GSE15745-GPL6104_Cer0510",
+ "481",
+ "GSE15745-GPL6104_Cer0510",
"GSE15745 NIH Human Brain Cerebellum ILM humanRef-8 v2.0 (May10) RankInv"
]
- ],
+ ],
"Pons mRNA": [
[
- "484",
- "GSE15745-GPL6104_Po0510",
+ "484",
+ "GSE15745-GPL6104_Po0510",
"GSE15745 NIH Human Brain Pons ILM humanRef-8 v2.0 (May10) RankInv"
]
- ],
+ ],
"Prefrontal Cortex mRNA": [
[
- "482",
- "GSE15745-GPL6104_PFC0510",
+ "482",
+ "GSE15745-GPL6104_PFC0510",
"GSE15745 NIH Human Brain Prefrontal Cortex ILM humanRef-8 v2.0 (May10) RankInv"
]
- ],
+ ],
"Temporal Cerebral Wall mRNA": [
[
- "483",
- "GSE15745-GPL6104_TC0510",
+ "483",
+ "GSE15745-GPL6104_TC0510",
"GSE15745 NIH Human Brain Temporal Cerebral ILM humanRef-8 v2.0 (May10) RankInv"
]
]
- },
+ },
"CANDLE": {
"Newborn Cord Blood mRNA": [
[
- "324",
- "CANDLE_NB_0711",
+ "324",
+ "CANDLE_NB_0711",
"CANDLE Newborn Cord ILMv6.3 (Jun11) QUANT"
]
- ],
+ ],
"Phenotypes": [
[
- "634",
- "CANDLEPublish",
+ "634",
+ "CANDLEPublish",
"CANDLE Published Phenotypes"
]
]
- },
+ },
"CEPH-2004": {
"Lymphoblast B-cell mRNA": [
[
- "241",
- "UT_CEPH_RankInv0909",
+ "241",
+ "UT_CEPH_RankInv0909",
"UTHSC CEPH B-cells Illumina (Sep09) RankInv"
- ],
+ ],
[
- "215",
- "Human_1008",
+ "215",
+ "Human_1008",
"Monks CEPH B-cells Agilent (Dec04) Log10Ratio"
]
]
- },
+ },
"GTEx": {
"Adipose tissue, subcutaneous mRNA": [
[
- "580",
- "GTEx_log2_Subcu_0314",
+ "580",
+ "GTEx_log2_Subcu_0314",
"GTEx Human Subcutaneous (Mar14) RPKM Log2"
- ],
+ ],
[
- "530",
- "GTEx_Subcu_0414",
+ "530",
+ "GTEx_Subcu_0414",
"GTEx Human Subcutaneous (Apr14) RPKM"
]
- ],
+ ],
"Adipose tissue, visceral mRNA": [
[
- "587",
- "GTEx_log2_Visce_0314",
+ "587",
+ "GTEx_log2_Visce_0314",
"GTEx Human Visceral (Mar14) RPKM Log2"
- ],
+ ],
[
- "537",
- "GTEx_Visce_0414",
+ "537",
+ "GTEx_Visce_0414",
"GTEx Human Visceral (Apr14) RPKM"
]
- ],
+ ],
"Adrenal Gland mRNA": [
[
- "545",
- "GTEx_log2_Adren_0314",
+ "545",
+ "GTEx_log2_Adren_0314",
"GTEx Human Adrenal Gland (Mar14) RPKM Log2"
- ],
+ ],
[
- "495",
- "GTEx_Adren_0414",
+ "495",
+ "GTEx_Adren_0414",
"GTEx Human Adrenal Gland (Apr14) RPKM"
]
- ],
+ ],
"Amygdala mRNA": [
[
- "542",
- "GTEx_log2_AMY_0314",
+ "542",
+ "GTEx_log2_AMY_0314",
"GTEx Human Amygdala (Mar14) RPKM Log2"
- ],
+ ],
[
- "492",
- "GTEx_AMY_0314",
+ "492",
+ "GTEx_AMY_0314",
"GTEx Human Amygdala (Mar14) RPKM"
]
- ],
+ ],
"Anterior Cingulate Cortex mRNA": [
[
- "546",
- "GTEx_log2_Anter_0314",
+ "546",
+ "GTEx_log2_Anter_0314",
"GTEx Human Anterior Cingulate Cortex (Mar14) RPKM Log2"
- ],
+ ],
[
- "496",
- "GTEx_Anter_0414",
+ "496",
+ "GTEx_Anter_0414",
"GTEx Human Anterior Cingulate Cortex (Apr14) RPKM"
]
- ],
+ ],
"Aorta mRNA": [
[
- "547",
- "GTEx_log2_Aorta_0314",
+ "547",
+ "GTEx_log2_Aorta_0314",
"GTEx Human Aorta (Mar14) RPKM Log2"
- ],
+ ],
[
- "497",
- "GTEx_Aorta_0414",
+ "497",
+ "GTEx_Aorta_0414",
"GTEx Human Aorta (Apr14) RPKM"
]
- ],
+ ],
"Blood, Cells - EBV-Transformed Lymphocytes mRNA": [
[
- "548",
- "GTEx_log2_Blood_0314",
+ "548",
+ "GTEx_log2_Blood_0314",
"GTEx Human Blood, Cells - EBV-Transformed Lymphocytes (Mar14) RPKM Log2"
- ],
+ ],
[
- "498",
- "GTEx_Blood_0414",
+ "498",
+ "GTEx_Blood_0414",
"GTEx Human Blood, Cells - EBV-Transformed Lymphocytes (Apr14) RPKM"
]
- ],
+ ],
"Breast - Mammary Tissue mRNA": [
[
- "549",
- "GTEx_log2_Breas_0314",
+ "549",
+ "GTEx_log2_Breas_0314",
"GTEx Human Breast - Mammary Tissue (Mar14) RPKM Log2"
- ],
+ ],
[
- "499",
- "GTEx_Breas_0414",
+ "499",
+ "GTEx_Breas_0414",
"GTEx Human Breast - Mammary Tissue (Apr14) RPKM"
]
- ],
+ ],
"Caudate mRNA": [
[
- "550",
- "GTEx_log2_Cauda_0314",
+ "550",
+ "GTEx_log2_Cauda_0314",
"GTEx Human Caudate (Mar14) RPKM Log2"
- ],
+ ],
[
- "500",
- "GTEx_Cauda_0414",
+ "500",
+ "GTEx_Cauda_0414",
"GTEx Human Caudate (Apr14) RPKM"
]
- ],
+ ],
"Cells - EBV-Transformed Lymphocytes mRNA": [
[
- "551",
- "GTEx_log2_CellsEBV_0314",
+ "551",
+ "GTEx_log2_CellsEBV_0314",
"GTEx Human Cells - EBV-Transformed Lymphocytes (Mar14) RPKM Log2"
- ],
+ ],
[
- "501",
- "GTEx_CellsEBV_0414",
+ "501",
+ "GTEx_CellsEBV_0414",
"GTEx Human Cells - EBV-Transformed Lymphocytes (Apr14) RPKM"
]
- ],
+ ],
"Cells - Leukemia Cell Line (CML) mRNA": [
[
- "552",
- "GTEx_log2_CellsLe_0314",
+ "552",
+ "GTEx_log2_CellsLe_0314",
"GTEx Human Cells - Leukemia Cell Line (CML) (Mar14) RPKM Log2"
- ],
+ ],
[
- "502",
- "GTEx_CellsLe_0414",
+ "502",
+ "GTEx_CellsLe_0414",
"GTEx Human Cells - Leukemia Cell Line (CML) (Apr14) RPKM"
]
- ],
+ ],
"Cells - Transformed Fibroblasts mRNA": [
[
- "553",
- "GTEx_log2_CellsTr_0314",
+ "553",
+ "GTEx_log2_CellsTr_0314",
"GTEx Human Cells - Transformed Fibroblasts (Mar14) RPKM Log2"
- ],
+ ],
[
- "503",
- "GTEx_CellsTr_0414",
+ "503",
+ "GTEx_CellsTr_0414",
"GTEx Human Cells - Transformed Fibroblasts (Apr14) RPKM"
]
- ],
+ ],
"Cerebellar Cortex mRNA": [
[
- "554",
- "GTEx_log2_CerebC_0314",
+ "554",
+ "GTEx_log2_CerebC_0314",
"GTEx Human Cerebellar Cortex (Mar14) RPKM Log2"
- ],
+ ],
[
- "504",
- "GTEx_CerebC_0414",
+ "504",
+ "GTEx_CerebC_0414",
"GTEx Human Cerebellar Cortex (Apr14) RPKM"
]
- ],
+ ],
"Cerebellar Hemisphere mRNA": [
[
- "555",
- "GTEx_log2_CerebH_0314",
+ "555",
+ "GTEx_log2_CerebH_0314",
"GTEx Human Cerebellar Hemisphere (Mar14) RPKM Log2"
- ],
+ ],
[
- "505",
- "GTEx_CerebH_0414",
+ "505",
+ "GTEx_CerebH_0414",
"GTEx Human Cerebellar Hemisphere (Apr14) RPKM"
]
- ],
+ ],
"Cerebellum mRNA": [
[
- "543",
- "GTEx_log2_CER_0314",
+ "543",
+ "GTEx_log2_CER_0314",
"GTEx Human Cerebellum (Mar14) RPKM Log2"
- ],
+ ],
[
- "493",
- "GTEx_CER_0314",
+ "493",
+ "GTEx_CER_0314",
"GTEx Human Cerebellum (Mar14) RPKM"
]
- ],
+ ],
"Colon - Transverse mRNA": [
[
- "556",
- "GTEx_log2_Colon_0314",
+ "556",
+ "GTEx_log2_Colon_0314",
"GTEx Human Colon - Transverse (Mar14) RPKM Log2"
- ],
+ ],
[
- "506",
- "GTEx_Colon_0414",
+ "506",
+ "GTEx_Colon_0414",
"GTEx Human Colon - Transverse (Apr14) RPKM"
]
- ],
+ ],
"Coronary mRNA": [
[
- "557",
- "GTEx_log2_Coron_0314",
+ "557",
+ "GTEx_log2_Coron_0314",
"GTEx Human Coronary (Mar14) RPKM Log2"
- ],
+ ],
[
- "507",
- "GTEx_Coron_0414",
+ "507",
+ "GTEx_Coron_0414",
"GTEx Human Coronary (Apr14) RPKM"
]
- ],
+ ],
"Esophagus - Mucosa mRNA": [
[
- "558",
- "GTEx_log2_EsophMuc_0314",
+ "558",
+ "GTEx_log2_EsophMuc_0314",
"GTEx Human Esophagus - Mucosa (Mar14) RPKM Log2"
- ],
+ ],
[
- "508",
- "GTEx_EsophMuc_0414",
+ "508",
+ "GTEx_EsophMuc_0414",
"GTEx Human Esophagus - Mucosa (Apr14) RPKM"
]
- ],
+ ],
"Esophagus - Muscularis mRNA": [
[
- "559",
- "GTEx_log2_EsophMus_0314",
+ "559",
+ "GTEx_log2_EsophMus_0314",
"GTEx Human Esophagus - Muscularis (Mar14) RPKM Log2"
- ],
+ ],
[
- "509",
- "GTEx_EsophMus_0414",
+ "509",
+ "GTEx_EsophMus_0414",
"GTEx Human Esophagus - Muscularis (Apr14) RPKM"
]
- ],
+ ],
"Fallopian Tube mRNA": [
[
- "560",
- "GTEx_log2_Fallo_0314",
+ "560",
+ "GTEx_log2_Fallo_0314",
"GTEx Human Fallopian Tube (Mar14) RPKM Log2"
- ],
+ ],
[
- "510",
- "GTEx_Fallo_0414",
+ "510",
+ "GTEx_Fallo_0414",
"GTEx Human Fallopian Tube (Apr14) RPKM"
]
- ],
+ ],
"Frontal Cortex mRNA": [
[
- "561",
- "GTEx_log2_Front_0314",
+ "561",
+ "GTEx_log2_Front_0314",
"GTEx Human Frontal Cortex (Mar14) RPKM Log2"
- ],
+ ],
[
- "511",
- "GTEx_Front_0414",
+ "511",
+ "GTEx_Front_0414",
"GTEx Human Frontal Cortex (Apr14) RPKM"
]
- ],
+ ],
"Heart - Atrial Appendage mRNA": [
[
- "562",
- "GTEx_log2_HeartAt_0314",
+ "562",
+ "GTEx_log2_HeartAt_0314",
"GTEx Human Heart - Atrial Appendage (Mar14) RPKM Log2"
- ],
+ ],
[
- "512",
- "GTEx_HeartAt_0414",
+ "512",
+ "GTEx_HeartAt_0414",
"GTEx Human Heart - Atrial Appendage (Apr14) RPKM"
]
- ],
+ ],
"Heart - Left Ventricle mRNA": [
[
- "563",
- "GTEx_log2_HeartLV_0314",
+ "563",
+ "GTEx_log2_HeartLV_0314",
"GTEx Human Heart - Left Ventricle (Mar14) RPKM Log2"
- ],
+ ],
[
- "513",
- "GTEx_HeartLV_0414",
+ "513",
+ "GTEx_HeartLV_0414",
"GTEx Human Heart - Left Ventricle (Apr14) RPKM"
]
- ],
+ ],
"Hippocampus mRNA": [
[
- "544",
- "GTEx_log2_HIP_0314",
+ "544",
+ "GTEx_log2_HIP_0314",
"GTEx Human Hippocampus (Mar14) RPKM Log2"
- ],
+ ],
[
- "494",
- "GTEx_HIP_0314",
+ "494",
+ "GTEx_HIP_0314",
"GTEx Human Hippocampus (Mar14) RPKM"
]
- ],
+ ],
"Hypothalamus mRNA": [
[
- "564",
- "GTEx_log2_Hypot_0314",
+ "564",
+ "GTEx_log2_Hypot_0314",
"GTEx Human Hypothalamus (Mar14) RPKM Log2"
- ],
+ ],
[
- "514",
- "GTEx_Hypot_0414",
+ "514",
+ "GTEx_Hypot_0414",
"GTEx Human Hypothalamus (Apr14) RPKM"
]
- ],
+ ],
"Kidney mRNA": [
[
- "565",
- "GTEx_log2_Kidne_0314",
+ "565",
+ "GTEx_log2_Kidne_0314",
"GTEx Human Kidney (Mar14) RPKM Log2"
- ],
+ ],
[
- "515",
- "GTEx_Kidne_0414",
+ "515",
+ "GTEx_Kidne_0414",
"GTEx Human Kidney (Apr14) RPKM"
]
- ],
+ ],
"Liver mRNA": [
[
- "566",
- "GTEx_log2_Liver_0314",
+ "566",
+ "GTEx_log2_Liver_0314",
"GTEx Human Liver (Mar14) RPKM Log2"
- ],
+ ],
[
- "516",
- "GTEx_Liver_0414",
+ "516",
+ "GTEx_Liver_0414",
"GTEx Human Liver (Apr14) RPKM"
]
- ],
+ ],
"Lung mRNA": [
[
- "567",
- "GTEx_log2_Lung_0314",
+ "567",
+ "GTEx_log2_Lung_0314",
"GTEx Human Lung (Mar14) RPKM Log2"
- ],
+ ],
[
- "517",
- "GTEx_Lung _0414",
+ "517",
+ "GTEx_Lung _0414",
"GTEx Human Lung (Apr14) RPKM"
]
- ],
+ ],
"Muscle mRNA": [
[
- "568",
- "GTEx_log2_Muscle_0314",
+ "568",
+ "GTEx_log2_Muscle_0314",
"GTEx Human Muscle (Mar14) RPKM Log2"
- ],
+ ],
[
- "518",
- "GTEx_Muscl_0414",
+ "518",
+ "GTEx_Muscl_0414",
"GTEx Human Muscle (Apr14) RPKM"
]
- ],
+ ],
"Nerve - Tibial mRNA": [
[
- "569",
- "GTEx_log2_Nerve_0314",
+ "569",
+ "GTEx_log2_Nerve_0314",
"GTEx Human Nerve - Tibial (Mar14) RPKM Log2"
- ],
+ ],
[
- "519",
- "GTEx_Nerve_0414",
+ "519",
+ "GTEx_Nerve_0414",
"GTEx Human Nerve - Tibial (Apr14) RPKM"
]
- ],
+ ],
"Nucleus Accumbens mRNA": [
[
- "570",
- "GTEx_log2_Nucle_0314",
+ "570",
+ "GTEx_log2_Nucle_0314",
"GTEx Human Nucleus Accumbens (Mar14) RPKM Log2"
- ],
+ ],
[
- "520",
- "GTEx_Nucle_0414",
+ "520",
+ "GTEx_Nucle_0414",
"GTEx Human Nucleus Accumbens (Apr14) RPKM"
]
- ],
+ ],
"Ovary mRNA": [
[
- "571",
- "GTEx_log2_Ovary_0314",
+ "571",
+ "GTEx_log2_Ovary_0314",
"GTEx Human Ovary (Mar14) RPKM Log2"
- ],
+ ],
[
- "521",
- "GTEx_Ovary_0414",
+ "521",
+ "GTEx_Ovary_0414",
"GTEx Human Ovary (Apr14) RPKM"
]
- ],
+ ],
"Pancreas mRNA": [
[
- "572",
- "GTEx_log2_Pancr_0314",
+ "572",
+ "GTEx_log2_Pancr_0314",
"GTEx Human Pancreas (Mar14) RPKM Log2"
- ],
+ ],
[
- "522",
- "GTEx_Pancr_0414",
+ "522",
+ "GTEx_Pancr_0414",
"GTEx Human Pancreas (Apr14) RPKM"
]
- ],
+ ],
"Pituitary Gland mRNA": [
[
- "573",
- "GTEx_log2_Pitui_0314",
+ "573",
+ "GTEx_log2_Pitui_0314",
"GTEx Human Pituitary (Mar14) RPKM Log2"
- ],
+ ],
[
- "523",
- "GTEx_Pitui_0414",
+ "523",
+ "GTEx_Pitui_0414",
"GTEx Human Pituitary (Apr14) RPKM"
]
- ],
+ ],
"Prostate mRNA": [
[
- "574",
- "GTEx_log2_Prost_0314",
+ "574",
+ "GTEx_log2_Prost_0314",
"GTEx Human Prostate (Mar14) RPKM Log2"
- ],
+ ],
[
- "524",
- "GTEx_Prost_0414",
+ "524",
+ "GTEx_Prost_0414",
"GTEx Human Prostate (Apr14) RPKM"
]
- ],
+ ],
"Putamen mRNA": [
[
- "575",
- "GTEx_log2_Putam_0314",
+ "575",
+ "GTEx_log2_Putam_0314",
"GTEx Human Putamen (Mar14) RPKM Log2"
- ],
+ ],
[
- "525",
- "GTEx_Putam_0414",
+ "525",
+ "GTEx_Putam_0414",
"GTEx Human Putamen (Apr14) RPKM"
]
- ],
+ ],
"Skin - Not Sun Exposed (Suprapubic) mRNA": [
[
- "576",
- "GTEx_log2_SkinN_0314",
+ "576",
+ "GTEx_log2_SkinN_0314",
"GTEx Human Skin-Not Sun Exposed (Suprapubic) (Mar14) RPKM Log2"
- ],
+ ],
[
- "526",
- "GTEx_SkinN_0414",
+ "526",
+ "GTEx_SkinN_0414",
"GTEx Human Skin-Not Sun Exposed (Suprapubic) (Apr14) RPKM"
]
- ],
+ ],
"Skin - Sun Exposed (Lower leg) mRNA": [
[
- "577",
- "GTEx_log2_SkinE_0314",
+ "577",
+ "GTEx_log2_SkinE_0314",
"GTEx Human Skin-Sun Exposed (Lower leg) (Mar14) RPKM Log2"
- ],
+ ],
[
- "527",
- "GTEx_SkinE_0414",
+ "527",
+ "GTEx_SkinE_0414",
"GTEx Human Skin-Sun Exposed (Lower leg) (Apr14) RPKM"
]
- ],
+ ],
"Spinal Cord mRNA": [
[
- "578",
- "GTEx_log2_Spina_0314",
+ "578",
+ "GTEx_log2_Spina_0314",
"GTEx Human Spinal Cord (Mar14) RPKM Log2"
- ],
+ ],
[
- "528",
- "GTEx_Spina_0414",
+ "528",
+ "GTEx_Spina_0414",
"GTEx Human Spinal Cord (Apr14) RPKM"
]
- ],
+ ],
"Stomach mRNA": [
[
- "579",
- "GTEx_log2_Stoma_0314",
+ "579",
+ "GTEx_log2_Stoma_0314",
"GTEx Human Stomach (Mar14) RPKM Log2"
- ],
+ ],
[
- "529",
- "GTEx_Stoma_0414",
+ "529",
+ "GTEx_Stoma_0414",
"GTEx Human Stomach (Apr14) RPKM"
]
- ],
+ ],
"Substantia Nigra mRNA": [
[
- "581",
- "GTEx_log2_Subst_0314",
+ "581",
+ "GTEx_log2_Subst_0314",
"GTEx Human Substantia Nigra (Mar14) RPKM Log2"
- ],
+ ],
[
- "531",
- "GTEx_Subst_0414",
+ "531",
+ "GTEx_Subst_0414",
"GTEx Human Substantia Nigra (Apr14) RPKM"
]
- ],
+ ],
"Testis mRNA": [
[
- "582",
- "GTEx_log2_Testi_0314",
+ "582",
+ "GTEx_log2_Testi_0314",
"GTEx Human Testis (Mar14) RPKM Log2"
- ],
+ ],
[
- "532",
- "GTEx_Testi_0414",
+ "532",
+ "GTEx_Testi_0414",
"GTEx Human Testis (Apr14) RPKM"
]
- ],
+ ],
"Thyroid mRNA": [
[
- "583",
- "GTEx_log2_Thyro_0314",
+ "583",
+ "GTEx_log2_Thyro_0314",
"GTEx Human Thyroid (Mar14) RPKM Log2"
- ],
+ ],
[
- "533",
- "GTEx_Thyro_0414",
+ "533",
+ "GTEx_Thyro_0414",
"GTEx Human Thyroid (Apr14) RPKM"
]
- ],
+ ],
"Tibial mRNA": [
[
- "584",
- "GTEx_log2_Tibial_0314",
+ "584",
+ "GTEx_log2_Tibial_0314",
"GTEx Human Tibial (Mar14) RPKM Log2"
- ],
+ ],
[
- "534",
- "GTEx_Tibia_0414",
+ "534",
+ "GTEx_Tibia_0414",
"GTEx Human Tibial (Apr14) RPKM"
]
- ],
+ ],
"Uterus mRNA": [
[
- "585",
- "GTEx_log2_Uterus_0314",
+ "585",
+ "GTEx_log2_Uterus_0314",
"GTEx Human Uterus (Mar14) RPKM Log2"
- ],
+ ],
[
- "535",
- "GTEx_Uteru_0414",
+ "535",
+ "GTEx_Uteru_0414",
"GTEx Human Uterus (Apr14) RPKM"
]
- ],
+ ],
"Vagina mRNA": [
[
- "586",
- "GTEx_log2_Vagin_0314",
+ "586",
+ "GTEx_log2_Vagin_0314",
"GTEx Human Vagina (Mar14) RPKM Log2"
- ],
+ ],
[
- "536",
- "GTEx_Vagin_0414",
+ "536",
+ "GTEx_Vagin_0414",
"GTEx Human Vagina (Apr14) RPKM"
]
- ],
+ ],
"Whole Blood mRNA": [
[
- "588",
- "GTEx_log2_WholeB_0314",
+ "588",
+ "GTEx_log2_WholeB_0314",
"GTEx Human Whole Blood (Mar14) RPKM Log2"
- ],
+ ],
[
- "538",
- "GTEx_Whole_0414",
+ "538",
+ "GTEx_Whole_0414",
"GTEx Human Whole Blood (Apr14) RPKM"
]
]
- },
+ },
"GTEx_v5": {
"Adipose tissue, subcutaneous mRNA": [
[
- "718",
- "GTEXv5_AdipSub_0915",
+ "718",
+ "GTEXv5_AdipSub_0915",
"GTEXv5 Human Adipose Subcutaneous RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Adipose tissue, visceral mRNA": [
[
- "719",
- "GTEXv5_AdiVis_0915",
+ "719",
+ "GTEXv5_AdiVis_0915",
"GTEXv5 Human Adipose Visceral Omentum RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Adrenal Gland mRNA": [
[
- "720",
- "GTEXv5_AdrGla_0915",
+ "720",
+ "GTEXv5_AdrGla_0915",
"GTEXv5 Human Adrenal Gland RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Amygdala mRNA": [
[
- "725",
- "GTEXv5_Amy_0915",
+ "725",
+ "GTEXv5_Amy_0915",
"GTEXv5 Human Brain Amygdala RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Anterior Cingulate Cortex mRNA": [
[
- "726",
- "GTEXv5_AntCtx_0915",
+ "726",
+ "GTEXv5_AntCtx_0915",
"GTEXv5 Human Brain Anterior Cingulate Cortex BA24 RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Aorta mRNA": [
[
- "721",
- "GTEXv5_ArtAor_0915",
+ "721",
+ "GTEXv5_ArtAor_0915",
"GTEXv5 Human Artery Aorta RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Bladder mRNA": [
[
- "724",
- "GTEXv5_Bla_0915",
+ "724",
+ "GTEXv5_Bla_0915",
"GTEXv5 Human Bladder RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Bone Marrow mRNA": [
[
- "740",
- "GTEXv5_BM_0915",
+ "740",
+ "GTEXv5_BM_0915",
"GTEXv5 Human Cells-Leukemia Cell Line CML RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Breast - Mammary Tissue mRNA": [
[
- "738",
- "GTEXv5_BrMa_0915",
+ "738",
+ "GTEXv5_BrMa_0915",
"GTEXv5 Human Breast Mammary Tissue RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Caudate mRNA": [
[
- "727",
- "GTEXv5_BrCa_0915",
+ "727",
+ "GTEXv5_BrCa_0915",
"GTEXv5 Human Brain Caudate Basal Ganglia RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Cells - EBV-Transformed Lymphocytes mRNA": [
[
- "739",
- "GTEXv5_EBV_0915",
+ "739",
+ "GTEXv5_EBV_0915",
"GTEXv5 Human Cells-EBV-Transformed Lymphocytes RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Cells - Transformed Fibroblasts mRNA": [
[
- "741",
- "GTEXv5_CTF_0915",
+ "741",
+ "GTEXv5_CTF_0915",
"GTEXv5 Human Cells-Transformed Fibroblasts RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Cerebellar Cortex mRNA": [
[
- "730",
- "GTEXv5_BrCtx_0915",
+ "730",
+ "GTEXv5_BrCtx_0915",
"GTEXv5 Human Brain Cortex RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Cerebellar Hemisphere mRNA": [
[
- "728",
- "GTEXv5_CerH_0915",
+ "728",
+ "GTEXv5_CerH_0915",
"GTEXv5 Human Brain Cerebellar Hemisphere RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Cerebellum mRNA": [
[
- "729",
- "GTEXv5_BrCe_0915",
+ "729",
+ "GTEXv5_BrCe_0915",
"GTEXv5 Human Brain Cerebellum RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Cervix mRNA": [
[
- "742",
- "GTEXv5_CerEct_0915",
+ "742",
+ "GTEXv5_CerEct_0915",
"GTEXv5 Human Cervix-Ectocervix RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Colon - Sigmoid mRNA": [
[
- "743",
- "GTEXv5_ColSig_0915",
+ "743",
+ "GTEXv5_ColSig_0915",
"GTEXv5 Human Colon-Sigmoid RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Colon - Transverse mRNA": [
[
- "744",
- "GTEXv5_ColTra_0915",
+ "744",
+ "GTEXv5_ColTra_0915",
"GTEXv5 Human Colon-Transverse RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Coronary mRNA": [
[
- "722",
- "GTEXv5_ArtCor_0915",
+ "722",
+ "GTEXv5_ArtCor_0915",
"GTEXv5 Human Artery Coronary RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Esophagus - Gastroesophageal mRNA": [
[
- "745",
- "GTEXv5_GastJun_0915",
+ "745",
+ "GTEXv5_GastJun_0915",
"GTEXv5 Human Esophagus - Gastroesophageal Junction RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Esophagus - Mucosa mRNA": [
[
- "746",
- "GTEXv5_EsoMu_0915",
+ "746",
+ "GTEXv5_EsoMu_0915",
"GTEXv5 Human Esophagus - Mucosa RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Esophagus - Muscularis mRNA": [
[
- "747",
- "GTEXv5_EsoMus_0915",
+ "747",
+ "GTEXv5_EsoMus_0915",
"GTEXv5 Human Esophagus - Muscularis RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Fallopian Tube mRNA": [
[
- "748",
- "GTEXv5_Fatu_0915",
+ "748",
+ "GTEXv5_Fatu_0915",
"GTEXv5 Human Fallopian Tube RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Frontal Cortex mRNA": [
[
- "731",
- "GTEXv5_BrFr_0915",
+ "731",
+ "GTEXv5_BrFr_0915",
"GTEXv5 Human Brain Frontal Cortex BA9 RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Heart - Atrial Appendage mRNA": [
[
- "749",
- "GTEXv5_HAA_0915",
+ "749",
+ "GTEXv5_HAA_0915",
"GTEXv5 Human Heart - Atrial Appendage RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Heart - Left Ventricle mRNA": [
[
- "750",
- "GTEXv5_LV_0915",
+ "750",
+ "GTEXv5_LV_0915",
"GTEXv5 Human Heart - Left Ventricle RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Hippocampus mRNA": [
[
- "732",
- "GTEXv5_Hip_0915",
+ "732",
+ "GTEXv5_Hip_0915",
"GTEXv5 Human Brain Hippocampus RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Hypothalamus mRNA": [
[
- "733",
- "GTEXv5_Hiptha_0915",
+ "733",
+ "GTEXv5_Hiptha_0915",
"GTEXv5 Human Brain Hypothalamus RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Kidney mRNA": [
[
- "751",
- "GTEXv5_Kidn_0915",
+ "751",
+ "GTEXv5_Kidn_0915",
"GTEXv5 Human Kidney - Cortex RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Liver mRNA": [
[
- "752",
- "GTEXv5_Liv_0915",
+ "752",
+ "GTEXv5_Liv_0915",
"GTEXv5 Human Liver RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Lung mRNA": [
[
- "753",
- "GTEXv5_Lung_0915",
+ "753",
+ "GTEXv5_Lung_0915",
"GTEXv5 Human Lung RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Muscle mRNA": [
[
- "754",
- "GTEXv5_MuSk_0915",
+ "754",
+ "GTEXv5_MuSk_0915",
"GTEXv5 Human Muscle - Skeletal RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Nerve - Tibial mRNA": [
[
- "755",
- "GTEXv5_Tib_0915",
+ "755",
+ "GTEXv5_Tib_0915",
"GTEXv5 Human Nerve - Tibial RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Nucleus Accumbens mRNA": [
[
- "734",
- "GTEXv5_NuAcc_0915",
+ "734",
+ "GTEXv5_NuAcc_0915",
"GTEXv5 Human Brain Nucleus Accumbens Basal Ganglia RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Ovary mRNA": [
[
- "756",
- "GTEXv5_Ov_0915",
+ "756",
+ "GTEXv5_Ov_0915",
"GTEXv5 Human Ovary RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Pancreas mRNA": [
[
- "757",
- "GTEXv5_Panc_0915",
+ "757",
+ "GTEXv5_Panc_0915",
"GTEXv5 Human Pancreas RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
+ "Phenotypes": [
+ [
+ "None",
+ "GTEx_v5Publish",
+ "GTEx_v5 Phenotypes"
+ ]
+ ],
"Pituitary Gland mRNA": [
[
- "758",
- "GTEXv5_Pit_0915",
+ "758",
+ "GTEXv5_Pit_0915",
"GTEXv5 Human Pituitary RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Prostate mRNA": [
[
- "759",
- "GTEXv5_Prost_0915",
+ "759",
+ "GTEXv5_Prost_0915",
"GTEXv5 Human Prostate RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Putamen mRNA": [
[
- "735",
- "GTEXv5_PutB_0915",
+ "735",
+ "GTEXv5_PutB_0915",
"GTEXv5 Human Brain Putamen Basal Ganglia RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Salivary Gland mRNA": [
[
- "760",
- "GTEXv5_SalGl_0915",
+ "760",
+ "GTEXv5_SalGl_0915",
"GTEXv5 Human Salivary Gland Minor RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Skin - Not Sun Exposed (Suprapubic) mRNA": [
[
- "761",
- "GTEXv5_SkN_0915",
+ "761",
+ "GTEXv5_SkN_0915",
"GTEXv5 Human Skin-Not Sun Exposed-Suprapubic RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Skin - Sun Exposed (Lower leg) mRNA": [
[
- "762",
- "GTEXv5_SkS_0915",
+ "762",
+ "GTEXv5_SkS_0915",
"GTEXv5 Human Skin-Sun Exposed-Lower Leg RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Small Intestine - Terminal Ileum mRNA": [
[
- "763",
- "GTEXv5_SInt_0915",
+ "763",
+ "GTEXv5_SInt_0915",
"GTEXv5 Human Small Intestine - Terminal Ileum RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Spinal Cord mRNA": [
[
- "736",
- "GTEXv5_SpCo_0915",
+ "736",
+ "GTEXv5_SpCo_0915",
"GTEXv5 Human Brain Spinal Cord Cervical C-1 RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Spleen mRNA": [
[
- "764",
- "GTEXv5_Sple_0915",
+ "764",
+ "GTEXv5_Sple_0915",
"GTEXv5 Human Spleen RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Stomach mRNA": [
[
- "765",
- "GTEXv5_Sto_0915",
+ "765",
+ "GTEXv5_Sto_0915",
"GTEXv5 Human Stomach RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Substantia Nigra mRNA": [
[
- "737",
- "GTEXv5_SubN_0915",
+ "737",
+ "GTEXv5_SubN_0915",
"GTEXv5 Human Brain Substantia Nigra RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Testis mRNA": [
[
- "766",
- "GTEXv5_Test_0915",
+ "766",
+ "GTEXv5_Test_0915",
"GTEXv5 Human Testis RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Thyroid mRNA": [
[
- "767",
- "GTEXv5_Thy_0915",
+ "767",
+ "GTEXv5_Thy_0915",
"GTEXv5 Human Thyroid RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Tibial mRNA": [
[
- "723",
- "GTEXv5_ArtTib_0915",
+ "723",
+ "GTEXv5_ArtTib_0915",
"GTEXv5 Human Artery Tibial RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Uterus mRNA": [
[
- "768",
- "GTEXv5_Ut_0915",
+ "768",
+ "GTEXv5_Ut_0915",
"GTEXv5 Human Uterus RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Vagina mRNA": [
[
- "769",
- "GTEXv5_Vag_0915",
+ "769",
+ "GTEXv5_Vag_0915",
"GTEXv5 Human Vagina RefSeq (Sep15) RPKM log2"
]
- ],
+ ],
"Whole Blood mRNA": [
[
- "770",
- "GTEXv5_Wbl_0915",
+ "770",
+ "GTEXv5_Wbl_0915",
"GTEXv5 Human Whole Blood RefSeq (Sep15) RPKM log2"
]
]
- },
+ },
"HB": {
"Cerebellum mRNA": [
[
- "326",
- "HBTRC-MLC_0611",
+ "326",
+ "HBTRC-MLC_0611",
"HBTRC-MLC Human Cerebellum Agilent (Jun11) mlratio"
- ],
+ ],
[
- "361",
- "HBTRC-MLC_N_0611",
+ "361",
+ "HBTRC-MLC_N_0611",
"HBTRC-MLC Human Cerebellum Agilent Normal (Jun11) mlratio"
- ],
+ ],
[
- "362",
- "HBTRC-MLC_AD_0611",
+ "362",
+ "HBTRC-MLC_AD_0611",
"HBTRC-MLC Human Cerebellum Agilent AD (Jun11) mlratio"
- ],
+ ],
[
- "363",
- "HBTRC-MLC_HD_0611",
+ "363",
+ "HBTRC-MLC_HD_0611",
"HBTRC-MLC Human Cerebellum Agilent HD (Jun11) mlratio"
]
- ],
+ ],
"Prefrontal Cortex mRNA": [
[
- "328",
- "HBTRC-MLPFC_0611",
+ "328",
+ "HBTRC-MLPFC_0611",
"HBTRC-MLC Human Prefrontal Cortex Agilent (Jun11) mlratio"
- ],
+ ],
[
- "367",
- "HBTRC-MLPFC_N_0611",
+ "367",
+ "HBTRC-MLPFC_N_0611",
"HBTRC-MLC Human Prefrontal Cortex Agilent Normal (Jun11) mlratio"
- ],
+ ],
[
- "368",
- "HBTRC-MLPFC_AD_0611",
+ "368",
+ "HBTRC-MLPFC_AD_0611",
"HBTRC-MLC Human Prefrontal Cortex Agilent AD (Jun11) mlratio"
- ],
+ ],
[
- "369",
- "HBTRC-MLPFC_HD_0611",
+ "369",
+ "HBTRC-MLPFC_HD_0611",
"HBTRC-MLC Human Prefrontal Cortex Agilent HD (Jun11) mlratio"
]
- ],
+ ],
"Primary Visual Cortex mRNA": [
[
- "327",
- "HBTRC-MLVC_0611",
+ "327",
+ "HBTRC-MLVC_0611",
"HBTRC-MLC Human Visual Cortex Agilent (Jun11) mlratio"
- ],
+ ],
[
- "364",
- "HBTRC-MLVC_N_0611",
+ "364",
+ "HBTRC-MLVC_N_0611",
"HBTRC-MLC Human Visual Cortex Agilent Normal (Jun11) mlratio"
- ],
+ ],
[
- "365",
- "HBTRC-MLVC_AD_0611",
+ "365",
+ "HBTRC-MLVC_AD_0611",
"HBTRC-MLC Human Visual Cortex Agilent AD (Jun11) mlratio"
- ],
+ ],
[
- "366",
- "HBTRC-MLVC_HD_0611",
+ "366",
+ "HBTRC-MLVC_HD_0611",
"HBTRC-MLC Human Visual Cortex Agilent HD (Jun11) mlratio"
]
]
- },
+ },
"HCP": {
"Phenotypes": [
[
- "None",
- "HCPPublish",
- "HCP Published Phenotypes"
+ "None",
+ "HCPPublish",
+ "HCP Private Phenotypes"
]
]
- },
+ },
"HLC": {
"Liver mRNA": [
[
- "320",
- "HLC_0311",
+ "320",
+ "HLC_0311",
"GSE9588 Human Liver Normal (Mar11) Both Sexes"
- ],
+ ],
[
- "384",
- "HLCF_0311",
+ "384",
+ "HLCF_0311",
"GSE9588 Human Liver Normal (Mar11) Females"
- ],
+ ],
[
- "383",
- "HLCM_0311",
+ "383",
+ "HLCM_0311",
"GSE9588 Human Liver Normal (Mar11) Males"
]
- ],
+ ],
"Phenotypes": [
[
- "635",
- "HLCPublish",
+ "635",
+ "HLCPublish",
"HLC Published Phenotypes"
]
]
- },
+ },
"HLT": {
"Lung mRNA": [
[
- "455",
- "GSE23546HLT0613",
+ "455",
+ "GSE23546HLT0613",
"Super Series GSE23546 Whole-Genome GXD Non-Tumorous Human Lung Tissues Affy HuRSTA array (Jun11) RMA"
- ],
+ ],
[
- "454",
- "GRNG-GSE23545HLT0613",
+ "454",
+ "GRNG-GSE23545HLT0613",
"GRNG/GSE23545 Whole-Genome GXD Non-Tumorous Human Lung Tissues Affy HuRSTA array (Jun11) RMA"
]
]
- },
+ },
"HSB": {
"Amygdala mRNA": [
[
- "330",
- "KIN_YSM_AMY_0711",
+ "330",
+ "KIN_YSM_AMY_0711",
"GN330 Human Amygdala Affy Hu-Exon 1.0 ST (Jul11) Quantile"
]
- ],
+ ],
"Cerebellar Cortex mRNA": [
[
- "331",
- "KIN_YSM_CBC_0711",
+ "331",
+ "KIN_YSM_CBC_0711",
"Human Cerebellar Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile"
]
- ],
+ ],
"Dorsolateral Prefrontal Cortex mRNA": [
[
- "333",
- "KIN_YSM_DFC_0711",
+ "333",
+ "KIN_YSM_DFC_0711",
"Human Dorsolateral Prefrontal Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile"
]
- ],
+ ],
"Hippocampus mRNA": [
[
- "337",
- "KIN_YSM_HIP_0711",
+ "337",
+ "KIN_YSM_HIP_0711",
"Human Hippocampus Affy Hu-Exon 1.0 ST (Jul11) Quantile"
]
- ],
+ ],
"Inferior Temporal Cortex mRNA": [
[
- "339",
- "KIN_YSM_ITC_0711",
+ "339",
+ "KIN_YSM_ITC_0711",
"Human Inferior Temporal Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile"
]
- ],
+ ],
"Medial Prefrontal Cortex mRNA": [
[
- "343",
- "KIN_YSM_MFC_0711",
+ "343",
+ "KIN_YSM_MFC_0711",
"Human Medial Prefrontal Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile"
]
- ],
+ ],
"Mediodorsal Nucleus of Thalamus mRNA": [
[
- "342",
- "KIN_YSM_MD_0711",
+ "342",
+ "KIN_YSM_MD_0711",
"Human Mediodorsal Nucleus of Thalamus Affy Hu-Exon 1.0 ST (Jul11) Quantile"
]
- ],
+ ],
"Orbital Prefrontal Cortex mRNA": [
[
- "347",
- "KIN_YSM_OFC_0711",
+ "347",
+ "KIN_YSM_OFC_0711",
"Human Orbital Prefrontal Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile"
]
- ],
+ ],
"Phenotypes": [
[
- "None",
- "HSBPublish",
+ "None",
+ "HSBPublish",
"HSB Published Phenotypes"
]
- ],
+ ],
"Posterior Inferior Parietal Cortex mRNA": [
[
- "338",
- "KIN_YSM_IPC_0711",
+ "338",
+ "KIN_YSM_IPC_0711",
"Human Posterior Inferior Parietal Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile"
]
- ],
+ ],
"Posterior Superior Temporal Cortex mRNA": [
[
- "350",
- "KIN_YSM_STC_0711",
+ "350",
+ "KIN_YSM_STC_0711",
"Human Posterior Superior Temporal Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile"
]
- ],
+ ],
"Primary Auditory (A1) Cortex mRNA": [
[
- "329",
- "KIN_YSM_A1C_0711",
+ "329",
+ "KIN_YSM_A1C_0711",
"Human Primary Auditory (A1) Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile"
]
- ],
+ ],
"Primary Motor (M1) Cortex mRNA": [
[
- "341",
- "KIN_YSM_M1C_0711",
+ "341",
+ "KIN_YSM_M1C_0711",
"Human Primary Motor (M1) Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile"
]
- ],
+ ],
"Primary Somatosensory (S1) Cortex mRNA": [
[
- "349",
- "KIN_YSM_S1C_0711",
+ "349",
+ "KIN_YSM_S1C_0711",
"Human Primary Somatosensory (S1) Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile"
]
- ],
+ ],
"Primary Visual Cortex mRNA": [
[
- "354",
- "KIN_YSM_V1C_0711",
+ "354",
+ "KIN_YSM_V1C_0711",
"Human Primary Visual Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile"
]
- ],
+ ],
"Striatum mRNA": [
[
- "351",
- "KIN_YSM_STR_0711",
+ "351",
+ "KIN_YSM_STR_0711",
"Human Striatum Affy Hu-Exon 1.0 ST (Jul11) Quantile"
]
- ],
+ ],
"Ventrolateral Prefrontal Cortex mRNA": [
[
- "356",
- "KIN_YSM_VFC_0711",
+ "356",
+ "KIN_YSM_VFC_0711",
"Human Ventrolateral Prefrontal Cortex Affy Hu-Exon 1.0 ST (Jul11) Quantile"
]
]
- },
+ },
+ "Islets-Gerling": {
+ "Phenotypes": [
+ [
+ "None",
+ "Islets-GerlingPublish",
+ "Islets-Gerling Phenotypes"
+ ]
+ ]
+ },
"TIGEM-Retina-RNA-Seq": {
"Phenotypes": [
[
- "None",
- "TIGEM-Retina-RNA-SeqPublish",
- "TIGEM-Retina-RNA-Seq Published Phenotypes"
+ "None",
+ "TIGEM-Retina-RNA-SeqPublish",
+ "TIGEM-Retina-RNA-Seq Phenotypes"
]
- ],
+ ],
"Retina mRNA": [
[
- "802",
- "TIGEM_hg38_ret_rna-seq_0916",
+ "802",
+ "TIGEM_hg38_ret_rna-seq_0916",
"TIGEM Human Retina RNA-Seq (Sep16) RPKM log2"
]
]
}
- },
+ },
"mouse": {
+ "AIL": {
+ "Genotypes": [
+ [
+ "None",
+ "AILGeno",
+ "AIL Genotypes"
+ ]
+ ],
+ "Hippocampus mRNA": [
+ [
+ "874",
+ "UCSD_AIL_HIP_RNA-Seq_log2_0418",
+ "UCSD AIL Hippocampus (Apr18) RNA-Seq Log2"
+ ],
+ [
+ "844",
+ "UCSD_AIL_HIP_RNA-Seq_0418",
+ "UCSD AIL Hippocampus (Apr18) RNA-Seq"
+ ]
+ ],
+ "Phenotypes": [
+ [
+ "653",
+ "AILPublish",
+ "AIL Phenotypes"
+ ]
+ ],
+ "Prefrontal Cortex mRNA": [
+ [
+ "876",
+ "UCSD_AIL_PFC_RNA-Seq_log2_0418",
+ "UCSD AIL Prefrontal Cortex (Apr18) RNA-Seq Log2"
+ ],
+ [
+ "846",
+ "UCSD_AIL_PFC_RNA-Seq_0418",
+ "UCSD AIL Prefrontal Cortex (Apr18) RNA-Seq"
+ ]
+ ],
+ "Striatum mRNA": [
+ [
+ "875",
+ "UCSD_AIL_STR_RNA-Seq_log2_0418",
+ "UCSD AIL Striatum (Apr18) RNA-Seq Log2"
+ ],
+ [
+ "845",
+ "UCSD_AIL_STR_RNA-Seq_0418",
+ "UCSD AIL Striatum (Apr18) RNA-Seq"
+ ]
+ ]
+ },
+ "AIL-LGSM-F34-A": {
+ "Phenotypes": [
+ [
+ "655",
+ "AIL-LGSM-F34-APublish",
+ "AIL F34-A Phenotypes"
+ ]
+ ]
+ },
+ "AIL-LGSM-F34-F39-43-GBS": {
+ "Phenotypes": [
+ [
+ "654",
+ "AIL-LGSM-F34-F39-43-GBSPublish",
+ "AIL F34-F39-43-GBS Phenotypes"
+ ]
+ ]
+ },
+ "AIL-LGSM-F34-GBS": {
+ "Phenotypes": [
+ [
+ "656",
+ "AIL-LGSM-F34-GBSPublish",
+ "AIL F34-GBS Phenotypes"
+ ]
+ ]
+ },
+ "AIL-LGSM-F39-43-GBS": {
+ "Phenotypes": [
+ [
+ "657",
+ "AIL-LGSM-F39-43-GBSPublish",
+ "AIL F39-43-GBS Phenotypes"
+ ]
+ ]
+ },
"AKXD": {
"Genotypes": [
[
- "611",
- "AKXDGeno",
+ "611",
+ "AKXDGeno",
"AKXD Genotypes"
]
- ],
+ ],
"Mammary Tumors mRNA": [
[
- "224",
- "NCI_Agil_Mam_Tum_RMA_0409",
+ "224",
+ "NCI_Agil_Mam_Tum_RMA_0409",
"NCI Mammary LMT miRNA v2 (Apr09) RMA"
- ],
+ ],
[
- "37",
- "MA_M_0704_R",
- "NCI Mammary mRNA M430 (July04) RMA"
- ],
- [
- "36",
- "MA_M_0704_M",
+ "36",
+ "MA_M_0704_M",
"NCI Mammary mRNA M430 (July04) MAS5"
+ ],
+ [
+ "37",
+ "MA_M_0704_R",
+ "NCI Mammary mRNA M430 (July04) RMA"
]
]
- },
+ },
"AXBXA": {
"Bone Femur mRNA": [
[
- "411",
- "UCLA_AXB/BXA_Femur_0113_RSN",
+ "411",
+ "UCLA_AXB/BXA_Femur_0113_RSN",
"UCLA GSE27483 AXB/BXA Bone Femur ILM Mouse WG-6 v1, v1.1 (Jan13) RSN"
]
- ],
+ ],
"Eye mRNA": [
[
- "210",
- "Eye_AXBXA_1008_RankInv",
+ "210",
+ "Eye_AXBXA_1008_RankInv",
"Eye AXBXA Illumina V6.2(Oct08) RankInv Beta"
]
- ],
+ ],
"Genotypes": [
[
- "636",
- "AXBXAGeno",
+ "636",
+ "AXBXAGeno",
"AXBXA Genotypes"
]
- ],
+ ],
"Heart mRNA": [
[
- "421",
- "IRCM_AXBXA_HRI0213",
+ "820",
+ "UCLA_AXB_BXA_Aor_Jan16",
+ "UCLA AXB/BXA Aorta Affy M430 2.0 (Jan16) RMA"
+ ],
+ [
+ "421",
+ "IRCM_AXBXA_HRI0213",
"IRCM AXB/BXA Mouse Heart ILM MouseRef-8 v2.0 (Feb13) RankInv"
]
- ],
+ ],
"Liver mRNA": [
[
- "352",
- "GSE16780AB_UCLA_ML0911",
+ "822",
+ "UCLA_AXB_BXA_Liv_Jan16",
+ "UCLA AXB/BXA Liver Affy M430 2.0 (Jan16) RMA"
+ ],
+ [
+ "352",
+ "GSE16780AB_UCLA_ML0911",
"GSE16780 UCLA Mouse AXB/BXA Liver Affy HT M430A (Sep11) RMA"
]
- ],
+ ],
"Phenotypes": [
[
- "629",
- "AXBXAPublish",
- "AXBXA Published Phenotypes"
+ "629",
+ "AXBXAPublish",
+ "AXB/BXA Published Phenotypes"
]
]
- },
+ },
"B6BTBRF2": {
"Genotypes": [
[
- "618",
- "B6BTBRF2Geno",
+ "618",
+ "B6BTBRF2Geno",
"B6BTBRF2 Genotypes"
]
- ],
+ ],
"Liver mRNA": [
[
- "39",
- "LVF2_M_0704_R",
- "(B6 x BTBR)F2-ob/ob Liver mRNA M430 (Jul04) RMA"
- ],
- [
- "38",
- "LVF2_M_0704_M",
+ "38",
+ "LVF2_M_0704_M",
"(B6 x BTBR)F2-ob/ob Liver mRNA M430 (Jul04) MAS5"
+ ],
+ [
+ "39",
+ "LVF2_M_0704_R",
+ "(B6 x BTBR)F2-ob/ob Liver mRNA M430 (Jul04) RMA"
]
- ],
+ ],
"Phenotypes": [
[
- "603",
- "B6BTBRF2Publish",
+ "603",
+ "B6BTBRF2Publish",
"B6BTBRF2 Published Phenotypes"
]
]
- },
+ },
"B6D2": {
"Phenotypes": [
[
- "None",
- "B6D2Publish",
- "B6D2 Published Phenotypes"
+ "None",
+ "B6D2Publish",
+ "UTHSC-Glaucoma-Aged-Retina Phenotypes"
]
]
- },
+ },
"B6D2F2": {
"Brain mRNA": [
[
- "77",
- "BRF2_M_0805_R",
+ "78",
+ "BRF2_M_0805_P",
+ "OHSU/VA B6D2F2 Brain mRNA M430 (Aug05) PDNN"
+ ],
+ [
+ "77",
+ "BRF2_M_0805_R",
"OHSU/VA B6D2F2 Brain mRNA M430 (Aug05) RMA"
- ],
+ ],
[
- "76",
- "BRF2_M_0805_M",
+ "76",
+ "BRF2_M_0805_M",
"OHSU/VA B6D2F2 Brain mRNA M430 (Aug05) MAS5"
- ],
+ ],
[
- "78",
- "BRF2_M_0805_P",
- "OHSU/VA B6D2F2 Brain mRNA M430 (Aug05) PDNN"
- ],
- [
- "33",
- "BRF2_M_0304_P",
+ "33",
+ "BRF2_M_0304_P",
"OHSU/VA B6D2F2 Brain mRNA M430A (Mar04) PDNN"
- ],
+ ],
[
- "32",
- "BRF2_M_0304_R",
- "OHSU/VA B6D2F2 Brain mRNA M430A (Mar04) RMA"
- ],
- [
- "31",
- "BRF2_M_0304_M",
+ "31",
+ "BRF2_M_0304_M",
"OHSU/VA B6D2F2 Brain mRNA M430A (Mar04) MAS5"
+ ],
+ [
+ "32",
+ "BRF2_M_0304_R",
+ "OHSU/VA B6D2F2 Brain mRNA M430A (Mar04) RMA"
]
- ],
+ ],
"Genotypes": [
[
- "637",
- "B6D2F2Geno",
+ "637",
+ "B6D2F2Geno",
"B6D2F2 Genotypes"
]
]
- },
+ },
"B6D2F2-PSU": {
"Genotypes": [
[
- "617",
- "B6D2F2-PSUGeno",
+ "617",
+ "B6D2F2-PSUGeno",
"B6D2F2-PSU Genotypes"
]
- ],
+ ],
"Phenotypes": [
[
- "None",
- "B6D2F2-PSUPublish",
- "B6D2F2-PSU Published Phenotypes"
+ "None",
+ "B6D2F2-PSUPublish",
+ "B6D2F2 PSU Phenotypes"
]
]
- },
+ },
"B6D2RI": {
"Hippocampus mRNA": [
[
- "712",
- "UTHSC_BXDAged_0615",
+ "712",
+ "UTHSC_BXDAged_0615",
"UTHSC BXD Aged Hippocampus Affy Mouse Gene 1.0 ST (Jun15) RMA"
- ],
+ ],
[
- "805",
- "UTHSC_BXDAgedEx_1116",
+ "805",
+ "UTHSC_BXDAgedEx_1116",
"UTHSC BXD Aged Hippocampus Affy Mouse Gene 1.0 ST (Jun15) Exon Level RMA"
- ],
+ ],
[
- "391",
- "UTHSC_B6D2RI_H_0912",
+ "391",
+ "UTHSC_B6D2RI_H_0912",
"UTHSC B6D2RI Aged Hippocampus Affy Mouse Gene 1.0 ST (Sep12) RMA"
]
- ],
+ ],
"Phenotypes": [
[
- "None",
- "B6D2RIPublish",
- "B6D2RI Published Phenotypes"
+ "651",
+ "B6D2RIPublish",
+ "B6D2RI Phenotypes"
]
]
- },
+ },
"BDF2-1999": {
"Genotypes": [
[
- "None",
- "BDF2-1999Geno",
+ "None",
+ "BDF2-1999Geno",
"BDF2-1999 Genotypes"
]
- ],
+ ],
"Liver mRNA": [
[
- "169",
- "UCLA_BDF2_LIVER_1999",
+ "169",
+ "UCLA_BDF2_LIVER_1999",
"UCLA BDF2 Liver (1999) mlratio"
]
]
- },
+ },
"BDF2-2005": {
"Genotypes": [
[
- "None",
- "BDF2-2005Geno",
+ "None",
+ "BDF2-2005Geno",
"BDF2-2005 Genotypes"
]
- ],
+ ],
"Striatum mRNA": [
[
- "85",
- "SA_M2_0905_P",
+ "83",
+ "SA_M2_0905_M",
+ "OHSU/VA B6D2F2 Striatum M430v2 (Sep05) MAS5"
+ ],
+ [
+ "85",
+ "SA_M2_0905_P",
"OHSU/VA B6D2F2 Striatum M430v2 (Sep05) PDNN"
- ],
+ ],
[
- "84",
- "SA_M2_0905_R",
+ "84",
+ "SA_M2_0905_R",
"OHSU/VA B6D2F2 Striatum M430v2 (Sep05) RMA"
- ],
- [
- "83",
- "SA_M2_0905_M",
- "OHSU/VA B6D2F2 Striatum M430v2 (Sep05) MAS5"
]
]
- },
+ },
"BHF2": {
"Adipose mRNA": [
[
- "197",
- "UCLA_BHF2_ADIPOSE_FEMALE",
+ "197",
+ "UCLA_BHF2_ADIPOSE_FEMALE",
"UCLA BHF2 Adipose Female mlratio"
- ],
+ ],
[
- "196",
- "UCLA_BHF2_ADIPOSE_MALE",
+ "196",
+ "UCLA_BHF2_ADIPOSE_MALE",
"UCLA BHF2 Adipose Male mlratio"
- ],
+ ],
[
- "165",
- "UCLA_BHF2_ADIPOSE_0605",
+ "165",
+ "UCLA_BHF2_ADIPOSE_0605",
"UCLA BHF2 Adipose (June05) mlratio"
]
- ],
+ ],
"Brain mRNA": [
[
- "199",
- "UCLA_BHF2_BRAIN_FEMALE",
+ "199",
+ "UCLA_BHF2_BRAIN_FEMALE",
"UCLA BHF2 Brain Female mlratio"
- ],
+ ],
[
- "198",
- "UCLA_BHF2_BRAIN_MALE",
+ "198",
+ "UCLA_BHF2_BRAIN_MALE",
"UCLA BHF2 Brain Male mlratio"
- ],
+ ],
[
- "166",
- "UCLA_BHF2_BRAIN_0605",
+ "166",
+ "UCLA_BHF2_BRAIN_0605",
"UCLA BHF2 Brain (June05) mlratio"
]
- ],
+ ],
"Genotypes": [
[
- "None",
- "BHF2Geno",
+ "None",
+ "BHF2Geno",
"BHF2 Genotypes"
]
- ],
+ ],
"Liver mRNA": [
[
- "201",
- "UCLA_BHF2_LIVER_FEMALE",
+ "201",
+ "UCLA_BHF2_LIVER_FEMALE",
"UCLA BHF2 Liver Female mlratio"
- ],
+ ],
[
- "200",
- "UCLA_BHF2_LIVER_MALE",
+ "200",
+ "UCLA_BHF2_LIVER_MALE",
"UCLA BHF2 Liver Male mlratio"
- ],
+ ],
[
- "167",
- "UCLA_BHF2_LIVER_0605",
+ "167",
+ "UCLA_BHF2_LIVER_0605",
"UCLA BHF2 Liver (June05) mlratio"
]
- ],
+ ],
"Phenotypes": [
[
- "None",
- "BHF2Publish",
- "BHF2 Published Phenotypes"
+ "None",
+ "BHF2Publish",
+ "BHF2 Phenotypes"
]
]
- },
+ },
"BHHBF2": {
"Adipose mRNA": [
[
- "174",
- "UCLA_BHHBF2_ADIPOSE_2005",
+ "174",
+ "UCLA_BHHBF2_ADIPOSE_2005",
"UCLA BHHBF2 Adipose (2005) mlratio"
- ],
+ ],
[
- "180",
- "UCLA_BHHBF2_ADIPOSE_MALE",
+ "180",
+ "UCLA_BHHBF2_ADIPOSE_MALE",
"UCLA BHHBF2 Adipose Male Only"
- ],
+ ],
[
- "181",
- "UCLA_BHHBF2_ADIPOSE_FEMALE",
+ "181",
+ "UCLA_BHHBF2_ADIPOSE_FEMALE",
"UCLA BHHBF2 Adipose Female Only"
]
- ],
+ ],
"Brain mRNA": [
[
- "175",
- "UCLA_BHHBF2_BRAIN_2005",
+ "175",
+ "UCLA_BHHBF2_BRAIN_2005",
"UCLA BHHBF2 Brain (2005) mlratio"
- ],
+ ],
[
- "182",
- "UCLA_BHHBF2_BRAIN_MALE",
+ "182",
+ "UCLA_BHHBF2_BRAIN_MALE",
"UCLA BHHBF2 Brain Male Only"
- ],
+ ],
[
- "183",
- "UCLA_BHHBF2_BRAIN_FEMALE",
+ "183",
+ "UCLA_BHHBF2_BRAIN_FEMALE",
"UCLA BHHBF2 Brain Female Only"
]
- ],
+ ],
"Genotypes": [
[
- "None",
- "BHHBF2Geno",
+ "None",
+ "BHHBF2Geno",
"BHHBF2 Genotypes"
]
- ],
+ ],
"Liver mRNA": [
[
- "176",
- "UCLA_BHHBF2_LIVER_2005",
+ "176",
+ "UCLA_BHHBF2_LIVER_2005",
"UCLA BHHBF2 Liver (2005) mlratio"
- ],
+ ],
[
- "184",
- "UCLA_BHHBF2_LIVER_MALE",
+ "184",
+ "UCLA_BHHBF2_LIVER_MALE",
"UCLA BHHBF2 Liver Male Only"
- ],
+ ],
[
- "185",
- "UCLA_BHHBF2_LIVER_FEMALE",
+ "185",
+ "UCLA_BHHBF2_LIVER_FEMALE",
"UCLA BHHBF2 Liver Female Only"
]
- ],
+ ],
"Muscle mRNA": [
[
- "177",
- "UCLA_BHHBF2_MUSCLE_2005",
+ "177",
+ "UCLA_BHHBF2_MUSCLE_2005",
"UCLA BHHBF2 Muscle (2005) mlratio"
- ],
+ ],
[
- "186",
- "UCLA_BHHBF2_MUSCLE_MALE",
+ "186",
+ "UCLA_BHHBF2_MUSCLE_MALE",
"UCLA BHHBF2 Muscle Male Only"
- ],
+ ],
[
- "187",
- "UCLA_BHHBF2_MUSCLE_FEMALE",
+ "187",
+ "UCLA_BHHBF2_MUSCLE_FEMALE",
"UCLA BHHBF2 Muscle Female Only"
]
]
- },
+ },
"BXD": {
"Adipose Proteome": [
[
- "797",
- "EPFL_AdiPro0416",
- "EPFL/ETHZ BXD Brown Adipose, Total Tissue Proteome, Chow Diet (Apr16) Light SWATH **"
- ],
+ "797",
+ "EPFL_AdiPro0416",
+ "EPFL/ETHZ BXD Brown Adipose, Total Tissue Proteome, Chow Diet (Apr16) Light SWATH"
+ ],
[
- "798",
- "EPFL_AdiMitPro0416",
- "EPFL/ETHZ BXD Brown Adipose, Isolated Mitochondria Proteome, Chow Diet (Apr16) Light SWATH **"
+ "798",
+ "EPFL_AdiMitPro0416",
+ "EPFL/ETHZ BXD Brown Adipose, Isolated Mitochondria Proteome, Chow Diet (Apr16) Light SWATH"
]
- ],
+ ],
"Adipose mRNA": [
[
- "469",
- "EPFLADGL1013",
+ "469",
+ "EPFLADGL1013",
"EPFL/LISP BXD CD Brown Adipose Affy Mouse Gene 2.0 ST Gene Level (Oct13) RMA"
- ],
+ ],
[
- "470",
- "EPFLADEL1013",
+ "470",
+ "EPFLADEL1013",
"EPFL/LISP BXD CD Brown Adipose Affy Mouse Gene 2.0 ST Exon Level (Oct13) RMA"
+ ],
+ [
+ "777",
+ "EL_BXDCDHFDScWAT_0216",
+ "EPFL/LISP BXD CD+HFD Subcutaneous WAT Affy MTA 1.0 Gene Level (Feb16) RMA"
+ ],
+ [
+ "778",
+ "EL_BXDHFDScWAT_0216",
+ "EPFL/LISP BXD HFD Subcutaneous WAT Affy MTA 1.0 Gene Level (Feb16) RMA"
+ ],
+ [
+ "779",
+ "EL_BXDCDScWAT_0216",
+ "EPFL/LISP BXD CD Subcutaneous WAT Affy MTA 1.0 Gene Level (Feb16) RMA"
]
- ],
+ ],
"Adrenal Gland mRNA": [
[
- "388",
- "INIA_Adrenal_RMA_0612",
+ "388",
+ "INIA_Adrenal_RMA_0612",
"INIA Adrenal Affy MoGene 1.0ST (Jun12) RMA"
- ],
+ ],
[
- "426",
- "INIA_Adrenal_RMA_F_0612",
+ "426",
+ "INIA_Adrenal_RMA_F_0612",
"INIA Adrenal Affy MoGene 1.0ST (Jun12) RMA Females"
- ],
+ ],
[
- "425",
- "INIA_Adrenal_RMA_M_0612",
+ "425",
+ "INIA_Adrenal_RMA_M_0612",
"INIA Adrenal Affy MoGene 1.0ST (Jun12) RMA Males"
- ],
+ ],
[
- "334",
- "INIA_Adrenal_RMA_Ex_0612",
+ "334",
+ "INIA_Adrenal_RMA_Ex_0612",
"INIA Adrenal Affy MoGene 1.0ST (Jun12) RMA Exon Level"
]
- ],
+ ],
"Amygdala mRNA": [
[
- "323",
- "INIA_AmgCoh_0311",
+ "323",
+ "INIA_AmgCoh_0311",
"INIA Amygdala Cohort Affy MoGene 1.0 ST (Mar11) RMA"
- ],
+ ],
[
- "280",
- "INIA_Amg_BLA_RMA_1110",
+ "280",
+ "INIA_Amg_BLA_RMA_1110",
"INIA Amygdala Affy MoGene 1.0 ST (Nov10) RMA"
- ],
+ ],
[
- "316",
- "INIA_Amg_BLA_RMA_M_1110",
+ "316",
+ "INIA_Amg_BLA_RMA_M_1110",
"INIA Amygdala Affy MoGene 1.0 ST (Nov10) RMA Male"
- ],
+ ],
[
- "315",
- "INIA_Amg_BLA_RMA_F_1110",
+ "315",
+ "INIA_Amg_BLA_RMA_F_1110",
"INIA Amygdala Affy MoGene 1.0 ST (Nov10) RMA Female"
- ],
+ ],
[
- "158",
- "INIA_Amg_BLA_Ex-RMA_1110",
+ "158",
+ "INIA_Amg_BLA_Ex-RMA_1110",
"INIA Amygdala Exon Affy MoGene 1.0 ST (Nov10) RMA"
]
- ],
+ ],
"Bone Femur mRNA": [
[
- "410",
- "UCLA_BXD_Femur_0113_RSN",
+ "410",
+ "UCLA_BXD_Femur_0113_RSN",
"UCLA GSE27483 BXD Bone Femur ILM Mouse WG-6 v1, v1.1 (Jan13) RSN"
- ],
+ ],
[
- "414",
- "UCLA_BXD-on_Femur_0113_RSN",
+ "414",
+ "UCLA_BXD-on_Femur_0113_RSN",
"UCLA GSE27483 BXD Only Bone Femur ILM Mouse WG-6 v1.1 (Jan13) RSN"
]
- ],
+ ],
"Brain mRNA": [
[
- "164",
- "UTHSC_BXD_WB_RNASeq1112",
+ "164",
+ "UTHSC_BXD_WB_RNASeq1112",
"UTHSC Mouse BXD Whole Brain RNA Sequence (Nov12) RPKM Untrimmed"
- ],
+ ],
[
- "590",
- "UTHSC_BXD_WB_RNASeqtrim1_1112",
+ "590",
+ "UTHSC_BXD_WB_RNASeqtrim1_1112",
"UTHSC Mouse BXD Whole Brain RNA Sequence (Nov12) RPKM Trimmed 1.0"
- ],
+ ],
[
- "394",
- "UTHSC_BXD_WB_RNASeqEx1112",
+ "394",
+ "UTHSC_BXD_WB_RNASeqEx1112",
"UTHSC Mouse BXD Whole Brain RNA Sequence Exon Level (Nov12) RPKM"
- ],
+ ],
[
- "123",
- "BR_M2_1106_R",
+ "123",
+ "BR_M2_1106_R",
"UCHSC BXD Whole Brain M430 2.0 (Nov06) RMA"
- ],
+ ],
+ [
+ "113",
+ "IBR_M_0606_R",
+ "INIA Brain mRNA M430 (Jun06) RMA"
+ ],
+ [
+ "101",
+ "IBR_M_0106_P",
+ "INIA Brain mRNA M430 (Jan06) PDNN"
+ ],
+ [
+ "102",
+ "IBR_M_0106_R",
+ "INIA Brain mRNA M430 (Jan06) RMA"
+ ],
[
- "95",
- "BR_U_1105_P",
+ "95",
+ "BR_U_1105_P",
"UTHSC Brain mRNA U74Av2 (Nov05) PDNN"
- ],
+ ],
[
- "81",
- "BR_U_0805_P",
+ "81",
+ "BR_U_0805_P",
"UTHSC Brain mRNA U74Av2 (Aug05) PDNN"
- ],
+ ],
[
- "80",
- "BR_U_0805_M",
+ "80",
+ "BR_U_0805_M",
"UTHSC Brain mRNA U74Av2 (Aug05) MAS5"
- ],
+ ],
[
- "82",
- "BR_U_0805_R",
+ "82",
+ "BR_U_0805_R",
"UTHSC Brain mRNA U74Av2 (Aug05) RMA"
- ],
+ ],
[
- "42",
- "CB_M_0204_P",
+ "42",
+ "CB_M_0204_P",
"INIA Brain mRNA M430 (Feb04) PDNN"
]
- ],
+ ],
"Cartilage mRNA": [
[
- "208",
- "UCLA_BXDBXH_CARTILAGE_V2",
+ "208",
+ "UCLA_BXDBXH_CARTILAGE_V2",
"UCLA BXD and BXH Cartilage v2"
- ],
+ ],
[
- "204",
- "UCLA_BXDBXH_CARTILAGE",
+ "204",
+ "UCLA_BXDBXH_CARTILAGE",
"UCLA BXD and BXH Cartilage"
- ],
+ ],
[
- "178",
- "UCLA_BXD_CARTILAGE",
+ "178",
+ "UCLA_BXD_CARTILAGE",
"UCLA BXD Cartilage"
]
- ],
+ ],
"Cerebellum mRNA": [
[
- "46",
- "CB_M_1004_R",
+ "72",
+ "GCB_M2_0505_R",
+ "GE-NIAAA Cerebellum mRNA M430v2 (May05) RMA"
+ ],
+ [
+ "73",
+ "GCB_M2_0505_P",
+ "GE-NIAAA Cerebellum mRNA M430v2 (May05) PDNN"
+ ],
+ [
+ "71",
+ "GCB_M2_0505_M",
+ "GE-NIAAA Cerebellum mRNA M430v2 (May05) MAS5"
+ ],
+ [
+ "56",
+ "CB_M_0305_R",
+ "SJUT Cerebellum mRNA M430 (Mar05) RMA"
+ ],
+ [
+ "55",
+ "CB_M_0305_P",
+ "SJUT Cerebellum mRNA M430 (Mar05) PDNN"
+ ],
+ [
+ "54",
+ "CB_M_0305_M",
+ "SJUT Cerebellum mRNA M430 (Mar05) MAS5"
+ ],
+ [
+ "46",
+ "CB_M_1004_R",
"SJUT Cerebellum mRNA M430 (Oct04) RMA"
- ],
+ ],
[
- "45",
- "CB_M_1004_P",
+ "45",
+ "CB_M_1004_P",
"SJUT Cerebellum mRNA M430 (Oct04) PDNN"
- ],
+ ],
[
- "44",
- "CB_M_1004_M",
+ "44",
+ "CB_M_1004_M",
"SJUT Cerebellum mRNA M430 (Oct04) MAS5"
- ],
+ ],
[
- "9",
- "CB_M_1003_M",
+ "9",
+ "CB_M_1003_M",
"SJUT Cerebellum mRNA M430 (Oct03) MAS5"
]
- ],
+ ],
"Eye mRNA": [
[
- "207",
- "Eye_M2_0908_R",
+ "207",
+ "Eye_M2_0908_R",
"Eye M430v2 (Sep08) RMA"
- ],
+ ],
[
- "10",
- "gn10",
+ "10",
+ "gn10",
"Eye M430v2 No Mutant/Mutant (Aug12) RMA"
- ],
+ ],
[
- "261",
- "Eye_M2_0908_R_NB",
+ "261",
+ "Eye_M2_0908_R_NB",
"Eye M430v2 Mutant Gpnmb (Sep08) RMA"
- ],
+ ],
[
- "262",
- "Eye_M2_0908_R_ND",
+ "262",
+ "Eye_M2_0908_R_ND",
"Eye M430v2 WT Gpnmb (Sep08) RMA"
- ],
+ ],
[
- "279",
- "Eye_M2_0908_R_WT",
+ "382",
+ "Eye_M2_0908_WTWT",
+ "Eye M430v2 WT WT (Sep08) RMA"
+ ],
+ [
+ "279",
+ "Eye_M2_0908_R_WT",
"Eye M430v2 WT Tyrp1 (Sep08) RMA"
- ],
+ ],
[
- "278",
- "Eye_M2_0908_R_MT",
+ "278",
+ "Eye_M2_0908_R_MT",
"Eye M430v2 Mutant Tyrp1 (Sep08) RMA"
- ],
- [
- "382",
- "Eye_M2_0908_WTWT",
- "Eye M430v2 WT WT (Sep08) RMA"
- ],
+ ],
[
- "400",
- "DBA2J-ONH-1212",
+ "400",
+ "DBA2J-ONH-1212",
"Howell et al. 2011, DBA/2J Glaucoma Optic Nerve Head M430 2.0 (Dec12) RMA"
- ],
+ ],
[
- "360",
- "BXD_GLA_0911",
+ "360",
+ "BXD_GLA_0911",
"Howell et al. 2011, DBA/2J Glaucoma Retina M430 2.0 (Sep11) RMA"
]
- ],
+ ],
"Fecal Metabolome": [
[
- "717",
- "RTI_RCMRC-BXDFecMetlog0814",
+ "717",
+ "RTI_RCMRC-BXDFecMetlog0814",
"RTI RCMRC BXD Fecal Metabolites CD+HFD (Aug14) Log2"
- ],
+ ],
[
- "716",
- "RTI_RCMRC-BXDFecMetHFlog0814",
+ "716",
+ "RTI_RCMRC-BXDFecMetHFlog0814",
"RTI RCMRC BXD Fecal Metabolites HFD (Aug14) Log2"
- ],
+ ],
[
- "715",
- "RTI_RCMRC-BXDFecMetLFlog0814",
+ "715",
+ "RTI_RCMRC-BXDFecMetLFlog0814",
"RTI RCMRC BXD Fecal Metabolites CD (Aug14) Log2"
]
- ],
+ ],
"Gastrointestinal mRNA": [
[
- "539",
- "UTHSC_GutGL_0414",
+ "539",
+ "UTHSC_GutGL_0414",
"UTHSC Mouse BXD Gastrointestinal Affy MoGene 1.0 ST Gene Level (Apr14) RMA"
- ],
+ ],
[
- "597",
- "UTHSC_GutExL_0414",
+ "597",
+ "UTHSC_GutExL_0414",
"UTHSC Mouse BXD Gastrointestinal Affy MoGene 1.0 ST Exon Level (Apr14) RMA"
]
- ],
+ ],
"Genotypes": [
[
- "600",
- "BXDGeno",
+ "600",
+ "BXDGeno",
"BXD Genotypes"
]
- ],
+ ],
+ "Heart mRNA": [
+ [
+ "819",
+ "UCLA_BXD_Aor_Jan16",
+ "UCLA BXD Aorta Affy M430 2.0 (Jan16) RMA"
+ ],
+ [
+ "485",
+ "EPFL-LISPBXDHeCD0114",
+ "EPFL/LISP BXD CD Heart Affy Mouse Gene 2.0 ST Gene Level (Jan14) RMA"
+ ],
+ [
+ "486",
+ "EPFL-LISPBXDHeHFD0114",
+ "EPFL/LISP BXD HFD Heart Affy Mouse Gene 2.0 ST Gene Level (Jan14) RMA"
+ ],
+ [
+ "487",
+ "EPFL-LISPBXDHeCDEx0114",
+ "EPFL/LISP BXD CD Heart Affy Mouse Gene 2.0 ST Exon Level (Jan14) RMA"
+ ],
+ [
+ "488",
+ "EPFL-LISPBXDHeHFDEx0114",
+ "EPFL/LISP BXD HFD Heart Affy Mouse Gene 2.0 ST Exon Level (Jan14) RMA"
+ ]
+ ],
"Hematopoietic Cells mRNA": [
[
- "149",
- "UMCG_0907_HemaStem_ori",
+ "149",
+ "UMCG_0907_HemaStem_ori",
"UMCG Stem Cells ILM6v1.1 (Apr09) original"
- ],
+ ],
[
- "145",
- "UMCG_0907_HemaStem",
+ "145",
+ "UMCG_0907_HemaStem",
"UMCG Stem Cells ILM6v1.1 (Apr09) transformed"
- ],
+ ],
[
- "151",
- "UMCG_0907_Pro_ori",
+ "151",
+ "UMCG_0907_Pro_ori",
"UMCG Progenitor Cells ILM6v1.1 (Apr09) original"
- ],
+ ],
[
- "147",
- "UMCG_0907_Pro",
+ "147",
+ "UMCG_0907_Pro",
"UMCG Progenitor Cells ILM6v1.1 (Apr09) transformed"
- ],
+ ],
[
- "150",
- "UMCG_0907_Eryth_ori",
+ "150",
+ "UMCG_0907_Eryth_ori",
"UMCG Erythroid Cells ILM6v1.1 (Apr09) original"
- ],
+ ],
[
- "146",
- "UMCG_0907_Eryth",
+ "146",
+ "UMCG_0907_Eryth",
"UMCG Erythroid Cells ILM6v1.1 (Apr09) transformed"
- ],
+ ],
[
- "148",
- "UMCG_0907_Myeloid_ori",
+ "148",
+ "UMCG_0907_Myeloid_ori",
"UMCG Myeloid Cells ILM6v1.1 (Apr09) original"
- ],
+ ],
[
- "144",
- "UMCG_0907_Myeloid",
+ "144",
+ "UMCG_0907_Myeloid",
"UMCG Myeloid Cells ILM6v1.1 (Apr09) transformed"
- ],
+ ],
[
- "7",
- "HC_U_0304_R",
+ "7",
+ "HC_U_0304_R",
"GNF Stem Cells U74Av2 (Mar04) RMA"
]
- ],
+ ],
"Hippocampal Precursor Cells mRNA": [
[
- "706",
- "CRTD_HipPreCell1214",
+ "706",
+ "CRTD_HipPreCell1214",
"CRTD BXD Hippocampal Precursor Cells ILM MouseWG-6_R13 (Dec14) Quantile"
]
- ],
+ ],
"Hippocampus mRNA": [
[
- "112",
- "HC_M2_0606_P",
+ "112",
+ "HC_M2_0606_P",
"Hippocampus Consortium M430v2 (Jun06) PDNN"
- ],
+ ],
[
- "111",
- "HC_M2_0606_M",
+ "111",
+ "HC_M2_0606_M",
"Hippocampus Consortium M430v2 (Jun06) MAS5"
- ],
+ ],
[
- "110",
- "HC_M2_0606_R",
+ "110",
+ "HC_M2_0606_R",
"Hippocampus Consortium M430v2 (Jun06) RMA"
- ],
+ ],
[
- "206",
- "UMUTAffyExon_0209_RMA",
+ "206",
+ "UMUTAffyExon_0209_RMA",
"UMUTAffy Hippocampus Exon (Feb09) RMA"
- ],
- [
- "780",
- "UTHSC_ILM_BXD_hipp_NOEb_0216",
+ ],
+ [
+ "814",
+ "UTHSC_ILM_BXD_hipp_NOSb_0217",
+ "UTHSC BXD Hippocampus ILM v6.1 NOS Balanced (Feb17) RankInv"
+ ],
+ [
+ "815",
+ "UTHSC_ILM_BXD_hipp_NOEb_0217",
+ "UTHSC BXD Hippocampus ILM v6.1 NOE Balanced (Feb17) RankInv"
+ ],
+ [
+ "816",
+ "UTHSC_ILM_BXD_hipp_RSSb_0217",
+ "UTHSC BXD Hippocampus ILM v6.1 RSS Balanced (Feb17) RankInv"
+ ],
+ [
+ "817",
+ "UTHSC_ILM_BXD_hipp_RSEb_0217",
+ "UTHSC BXD Hippocampus ILM v6.1 RSE Balanced (Feb17) RankInv"
+ ],
+ [
+ "780",
+ "UTHSC_ILM_BXD_hipp_NOEb_0216",
"UTHSC BXD Hippocampus ILM v6.1 NOE Balanced (Feb16) RankInv"
- ],
+ ],
[
- "781",
- "UTHSC_ILM_BXD_hipp_RSEb_0216",
+ "781",
+ "UTHSC_ILM_BXD_hipp_RSEb_0216",
"UTHSC BXD Hippocampus ILM v6.1 RSE Balanced (Feb16) RankInv"
- ],
+ ],
[
- "782",
- "UTHSC_ILM_BXD_hipp_RSSb_0216",
+ "782",
+ "UTHSC_ILM_BXD_hipp_RSSb_0216",
"UTHSC BXD Hippocampus ILM v6.1 RSS Balanced (Feb16) RankInv"
- ],
+ ],
[
- "291",
- "UT_ILM_BXD_hipp_5T_1112",
+ "291",
+ "UT_ILM_BXD_hipp_5T_1112",
"UTHSC Hippocampus Illumina v6.1 All Combined (Nov12) RankInv"
- ],
+ ],
[
- "292",
- "UT_ILM_BXD_hipp_NON_1112",
+ "292",
+ "UT_ILM_BXD_hipp_NON_1112",
"UTHSC Hippocampus Illumina v6.1 NON (Nov12) RankInv"
- ],
+ ],
[
- "293",
- "UT_ILM_BXD_hipp_NOS_1112",
+ "293",
+ "UT_ILM_BXD_hipp_NOS_1112",
"UTHSC Hippocampus Illumina v6.1 NOS (Nov12) RankInv"
- ],
+ ],
[
- "294",
- "UT_ILM_BXD_hipp_NOE_1112",
+ "294",
+ "UT_ILM_BXD_hipp_NOE_1112",
"UTHSC Hippocampus Illumina v6.1 NOE (Nov12) RankInv"
- ],
+ ],
[
- "295",
- "UT_ILM_BXD_hipp_RSS_1112",
+ "295",
+ "UT_ILM_BXD_hipp_RSS_1112",
"UTHSC Hippocampus Illumina v6.1 RSS (Nov12) RankInv"
- ],
+ ],
[
- "296",
- "UT_ILM_BXD_hipp_RSE_1112",
+ "296",
+ "UT_ILM_BXD_hipp_RSE_1112",
"UTHSC Hippocampus Illumina v6.1 RSE (Nov12) RankInv"
- ],
+ ],
[
- "242",
- "UT_ILM_BXD_hipp_NON_0909",
+ "242",
+ "UT_ILM_BXD_hipp_NON_0909",
"UTHSC Hippocampus Illumina v6.1 NON (Sep09) RankInv"
- ],
+ ],
[
- "243",
- "UT_ILM_BXD_hipp_NOS_0909",
+ "243",
+ "UT_ILM_BXD_hipp_NOS_0909",
"UTHSC Hippocampus Illumina v6.1 NOS (Sep09) RankInv"
- ],
+ ],
[
- "246",
- "UT_ILM_BXD_hipp_NOE_0909",
+ "246",
+ "UT_ILM_BXD_hipp_NOE_0909",
"UTHSC Hippocampus Illumina v6.1 NOE (Sep09) RankInv"
- ],
+ ],
[
- "244",
- "UT_ILM_BXD_hipp_RSS_0909",
+ "244",
+ "UT_ILM_BXD_hipp_RSS_0909",
"UTHSC Hippocampus Illumina v6.1 RSS (Sep09) RankInv"
- ],
+ ],
[
- "245",
- "UT_ILM_BXD_hipp_RSE_0909",
+ "245",
+ "UT_ILM_BXD_hipp_RSE_0909",
"UTHSC Hippocampus Illumina v6.1 RSE (Sep09) RankInv"
+ ],
+ [
+ "711",
+ "UTHSC_BXD_AgeHipp0515",
+ "UTHSC BXD Aged Hippocampus Affy MoGene1.0 ST (May15) RMA Gene Level"
]
- ],
+ ],
"Hypothalamus mRNA": [
[
- "281",
- "INIA_Hyp_RMA_1110",
+ "281",
+ "INIA_Hyp_RMA_1110",
"INIA Hypothalamus Affy MoGene 1.0 ST (Nov10)"
- ],
+ ],
[
- "318",
- "INIA_Hyp_M_RMA_1110",
+ "318",
+ "INIA_Hyp_M_RMA_1110",
"INIA Hypothalamus Affy MoGene 1.0 ST (Nov10) Male"
- ],
+ ],
[
- "317",
- "INIA_Hyp_F_RMA_1110",
+ "317",
+ "INIA_Hyp_F_RMA_1110",
"INIA Hypothalamus Affy MoGene 1.0 ST (Nov10) Female"
- ],
+ ],
[
- "459",
- "INIA_Hyp_PCA_0813_v4",
+ "459",
+ "INIA_Hyp_PCA_0813_v4",
"INIA Hypothalamus Affy MoGene 1.0 ST (Nov10) PCA Test v080913"
- ],
+ ],
[
- "458",
- "INIA_Hyp_PCA_0813_v3",
+ "458",
+ "INIA_Hyp_PCA_0813_v3",
"INIA Hypothalamus Affy MoGene 1.0 ST (Nov10) PCA Test v080813"
- ],
+ ],
[
- "457",
- "INIA_Hyp_PCA_0813_v2",
+ "457",
+ "INIA_Hyp_PCA_0813_v2",
"INIA Hypothalamus Affy MoGene 1.0 ST (Nov10) PCA Test v080513"
- ],
+ ],
[
- "456",
- "INIA_Hyp_PCA_0813",
+ "456",
+ "INIA_Hyp_PCA_0813",
"INIA Hypothalamus Affy MoGene 1.0 ST (Nov10) PCA Test v080213"
- ],
+ ],
[
- "159",
- "INIA_Hyp_RMA_Ex-1110",
+ "159",
+ "INIA_Hyp_RMA_Ex-1110",
"INIA Hypothalamus Exon Affy MoGene 1.0 ST (Nov10)"
]
- ],
+ ],
"Kidney mRNA": [
[
- "239",
- "MA_M2F_0706_R",
- "Mouse kidney M430v2 Female (Aug06) RMA"
- ],
- [
- "240",
- "MA_M2M_0706_R",
+ "240",
+ "MA_M2M_0706_R",
"Mouse kidney M430v2 Male (Aug06) RMA"
- ],
+ ],
+ [
+ "239",
+ "MA_M2F_0706_R",
+ "Mouse kidney M430v2 Female (Aug06) RMA"
+ ],
[
- "118",
- "MA_M2_0806_R",
+ "118",
+ "MA_M2_0806_R",
"Mouse kidney M430v2 Sex Balanced (Aug06) RMA"
- ],
+ ],
[
- "117",
- "MA_M2_0806_P",
+ "117",
+ "MA_M2_0806_P",
"Mouse Kidney M430v2 Sex Balanced (Aug06) PDNN"
- ],
+ ],
[
- "116",
- "MA_M2_0706_P",
- "Mouse Kidney M430v2 (Jul06) PDNN"
- ],
- [
- "115",
- "MA_M2_0706_R",
+ "115",
+ "MA_M2_0706_R",
"Mouse Kidney M430v2 (Jul06) RMA"
+ ],
+ [
+ "116",
+ "MA_M2_0706_P",
+ "Mouse Kidney M430v2 (Jul06) PDNN"
]
- ],
+ ],
"Liver Metabolome": [
[
- "473",
- "EPFL-LISP_LivPMetCDHFD1213",
+ "835",
+ "UTHSC-ETHZ-EPFL_LivPMetExtACD0817",
+ "UTHSC/ETHZ/EPFL BXD Liver Polar Metabolites Extraction, Chow Diet Cohorts (Jul 2017) log2"
+ ],
+ [
+ "836",
+ "UTHSC-ETHZ-EPFL_LivPMetExtAHFD0817",
+ "UTHSC/ETHZ/EPFL BXD Liver Polar Metabolites Extraction, HFD Cohorts (Jul 2017) log2"
+ ],
+ [
+ "473",
+ "EPFL-LISP_LivPMetCDHFD1213",
"EPFL/LISP BXD Liver Polar Metabolites CD+HFD (Jun14)"
- ],
+ ],
[
- "474",
- "EPFL-LISP_LivPMetHFD1213",
+ "474",
+ "EPFL-LISP_LivPMetHFD1213",
"EPFL/LISP BXD Liver Polar Metabolites HFD (Jun14)"
- ],
+ ],
[
- "475",
- "EPFL-LISP_LivPMetCD1213",
+ "475",
+ "EPFL-LISP_LivPMetCD1213",
"EPFL/LISP BXD Liver Polar Metabolites CD (Jun14)"
- ],
+ ],
[
- "713",
- "EPFL-LISP_LivPMetlog2HFD1213",
+ "713",
+ "EPFL-LISP_LivPMetlog2HFD1213",
"EPFL/LISP BXD Liver Polar Metabolites HFD (Jun14) Log2"
- ],
+ ],
[
- "714",
- "EPFL-LISP_LivPMetlog2CD1213",
+ "714",
+ "EPFL-LISP_LivPMetlog2CD1213",
"EPFL/LISP BXD Liver Polar Metabolites CD (Jun14) Log2"
]
- ],
+ ],
"Liver Proteome": [
[
- "704",
- "EPFLETHZBXDprotCD_LS1114",
- "EPFL/ETHZ BXD Liver, Chow Diet (Oct14) Light SWATH"
- ],
+ "540",
+ "EPFLETHZBXDprotCD0514",
+ "EPFL/ETHZ BXD Liver, Chow Diet (Jun16) Top100 SWATH"
+ ],
[
- "705",
- "EPFLETHZBXDprotHF_LS1114",
- "EPFL/ETHZ BXD Liver, High Fat Diet (Oct14) Light SWATH"
- ],
+ "541",
+ "EPFLETHZBXDprotHFD0514",
+ "EPFL/ETHZ BXD Liver, High Fat Diet (Jun16) Top100 SWATH"
+ ],
[
- "703",
- "EPFLBXDprotCD-CDHFDRPN0214",
+ "704",
+ "EPFLETHZBXDprotCD_LS1114",
+ "EPFL/ETHZ BXD Liver, Chow Diet (Oct14) Top10 SWATH"
+ ],
+ [
+ "705",
+ "EPFLETHZBXDprotHF_LS1114",
+ "EPFL/ETHZ BXD Liver, High Fat Diet Diet (Oct14) Top10 SWATH"
+ ],
+ [
+ "703",
+ "EPFLBXDprotCD-CDHFDRPN0214",
"EPFL/LISP BXD Liver, Soluble Proteins CD+HFD (Feb14) SRM"
- ],
+ ],
[
- "490",
- "EPFLBXDprotCDRPN0214",
+ "490",
+ "EPFLBXDprotCDRPN0214",
"EPFL/LISP BXD Liver, Soluble Proteins CD (Feb14) SRM"
- ],
+ ],
[
- "489",
- "EPFLBXDprotHFDRPN0214",
+ "489",
+ "EPFLBXDprotHFDRPN0214",
"EPFL/LISP BXD Liver, Soluble Proteins HFD (Feb14) SRM"
- ],
- [
- "540",
- "EPFLETHZBXDprotCD0514",
- "EPFL/ETHZ BXD Liver, Soluble Proteins CD (Jun14) SWATH"
- ],
- [
- "541",
- "EPFLETHZBXDprotHFD0514",
- "EPFL/ETHZ BXD Liver, Soluble Proteins HFD (Jun14) SWATH"
]
- ],
+ ],
"Liver mRNA": [
[
- "430",
- "EPFLMouseLiverRMA0413",
+ "857",
+ "EPFLMouseLiverCDHFDRMA0818",
+ "EPFL/LISP BXD CD+HFD Liver Affy Mouse Gene 1.0 ST (Aug18) RMA"
+ ],
+ [
+ "858",
+ "EPFLMouseLiverHFDRMA0818",
+ "EPFL/LISP BXD HFD Liver Affy Mouse Gene 1.0 ST (Aug18) RMA"
+ ],
+ [
+ "859",
+ "EPFLMouseLiverCDRMA0818",
+ "EPFL/LISP BXD CD Liver Affy Mouse Gene 1.0 ST (Aug18) RMA"
+ ],
+ [
+ "854",
+ "NIA-AgBXD-Liv_CDHFD-rna-seq-0818",
+ "NIA Aging BXD CD+HFD Liver RNA-Seq (Aug18) Log2"
+ ],
+ [
+ "855",
+ "NIA-AgBXD-Liv_HFD-rna-seq-0818",
+ "NIA Aging BXD HFD Liver RNA-Seq (Aug18) Log2"
+ ],
+ [
+ "856",
+ "NIA-AgBXD-Liv_CD-rna-seq-0818",
+ "NIA Aging BXD CD Liver RNA-Seq (Aug18) Log2"
+ ],
+ [
+ "818",
+ "UCLA_BXD_Liv_Jan16",
+ "UCLA BXD Liver Affy M430 2.0 (Jan16) RMA"
+ ],
+ [
+ "430",
+ "EPFLMouseLiverRMA0413",
"EPFL/LISP BXD CD+HFD Liver Affy Mouse Gene 1.0 ST (Apr13) RMA"
- ],
+ ],
[
- "431",
- "EPFLMouseLiverHFDRMA0413",
+ "431",
+ "EPFLMouseLiverHFDRMA0413",
"EPFL/LISP BXD HFD Liver Affy Mouse Gene 1.0 ST (Apr13) RMA"
- ],
+ ],
+ [
+ "848",
+ "EPFLMouseLiverHFCEx0413",
+ "EPFL/LISP BXD HFC Liver Affy Mouse Gene 1.0 ST (Apr13) RMA Exon Level"
+ ],
[
- "432",
- "EPFLMouseLiverCDRMA0413",
+ "432",
+ "EPFLMouseLiverCDRMA0413",
"EPFL/LISP BXD CD Liver Affy Mouse Gene 1.0 ST (Apr13) RMA"
- ],
+ ],
+ [
+ "849",
+ "EPFLMouseLiverCDEx0413",
+ "EPFL/LISP BXD CD Liver Affy Mouse Gene 1.0 ST (Apr13) RMA Exon Level"
+ ],
[
- "700",
- "UTHSC-VGX_MmBXDHepatocytesRMA1014",
+ "433",
+ "EPFLMouseLiverBothExRMA0413",
+ "EPFL/LISP BXD CD+HFD Liver Affy Mouse Gene 1.0 ST (Apr13) RMA Exon Level"
+ ],
+ [
+ "700",
+ "UTHSC-VGX_MmBXDHepatocytesRMA1014",
"UT-VGX Hepatocytes Affy Mouse Gene 1.0 ST Gene Level (Oct14) RMA"
- ],
+ ],
[
- "701",
- "UT-VGX_HEL1014",
+ "701",
+ "UT-VGX_HEL1014",
"UT-VGX Hepatocytes Affy Mouse Gene 1.0 ST Exon Level (Oct14) RMA"
- ],
+ ],
[
- "373",
- "GSE16780_UCLA_ML0911",
+ "373",
+ "GSE16780_UCLA_ML0911",
"GSE16780 UCLA Hybrid MDP Liver Affy HT M430A (Sep11) RMA"
- ],
+ ],
[
- "325",
- "SUH_Liv_RMA_0611",
+ "325",
+ "SUH_Liv_RMA_0611",
"SUH BXD Liver CCl4-treated Affy Mouse Gene 1.0 ST (Jun11) RMA"
- ],
+ ],
[
- "702",
- "SUH_Liv_RMAEx_0611",
+ "702",
+ "SUH_Liv_RMAEx_0611",
"SUH BXD Liver CCl4-treated Affy Mouse Gene 1.0 ST Exon Level (Jun11) RMA"
- ]
- ],
+ ],
+ [
+ "256",
+ "GenEx_BXD_liverEt_M5_0912",
+ "GenEx BXD EtOH Liver Affy M430 2.0 (Sep12) MAS5 Both Sexes"
+ ],
+ [
+ "257",
+ "GenEx_BXD_liverEt_M5M_0912",
+ "GenEx BXD EtOH Liver Affy M430 2.0 (Sep12) MAS5 Males"
+ ],
+ [
+ "258",
+ "GenEx_BXD_liverEt_M5F_0912",
+ "GenEx BXD EtOH Liver Affy M430 2.0 (Sep12) MAS5 Females"
+ ],
+ [
+ "307",
+ "GenEx_BXD_liverEt_RMA_0211",
+ "GenEx BXD EtOH Liver Affy M430 2.0 (Feb11) RMA Both Sexes"
+ ],
+ [
+ "308",
+ "GenEx_BXD_liverEt_RMA_M_0211",
+ "GenEx BXD EtOH Liver Affy M430 2.0 (Feb11) RMA Males"
+ ],
+ [
+ "309",
+ "GenEx_BXD_liverEt_RMA_F_0211",
+ "GenEx BXD EtOH Liver Affy M430 2.0 (Feb11) RMA Females"
+ ],
+ [
+ "310",
+ "GenEx_BXD_liverSal_RMA_0211",
+ "GenEx BXD Sal Liver Affy M430 2.0 (Feb11) RMA Both Sexes"
+ ],
+ [
+ "311",
+ "GenEx_BXD_liverSal_RMA_M_0211",
+ "GenEx BXD Sal Liver Affy M430 2.0 (Feb11) RMA Males"
+ ],
+ [
+ "312",
+ "GenEx_BXD_liverSal_RMA_F_0211",
+ "GenEx BXD Sal Liver Affy M430 2.0 (Feb11) RMA Females"
+ ]
+ ],
"Lung mRNA": [
[
- "160",
- "HZI_0408_R",
+ "160",
+ "HZI_0408_R",
"HZI Lung M430v2 (Apr08) RMA"
- ],
+ ],
[
- "161",
- "HZI_0408_M",
+ "161",
+ "HZI_0408_M",
"HZI Lung M430v2 (Apr08) MAS5"
]
- ],
+ ],
"Midbrain mRNA": [
[
- "381",
- "VUBXDMouseMidBrainQ0512",
+ "381",
+ "VUBXDMouseMidBrainQ0512",
"VU BXD Midbrain Agilent SurePrint G3 Mouse GE (May12) Quantile"
]
- ],
+ ],
"Muscle mRNA": [
[
- "378",
- "EPFLMouseMuscleRMA1211",
+ "378",
+ "EPFLMouseMuscleRMA1211",
"EPFL/LISP BXD CD+HFD Muscle Affy Mouse Gene 1.0 ST (Dec11) RMA"
- ],
+ ],
[
- "380",
- "EPFLMouseMuscleHFDRMA1211",
+ "380",
+ "EPFLMouseMuscleHFDRMA1211",
"EPFL/LISP BXD HFD Muscle Affy Mouse Gene 1.0 ST (Dec11) RMA"
- ],
+ ],
[
- "379",
- "EPFLMouseMuscleCDRMA1211",
+ "379",
+ "EPFLMouseMuscleCDRMA1211",
"EPFL/LISP BXD CD Muscle Affy Mouse Gene 1.0 ST (Dec11) RMA"
- ],
+ ],
[
- "395",
- "EPFLMouseMuscleRMA_Ex1112",
+ "395",
+ "EPFLMouseMuscleRMA_Ex1112",
"EPFL/LISP BXD CD+HFD Muscle Affy Mouse Gene 1.0 ST (Nov12) RMA Exon Level"
- ],
+ ],
[
- "396",
- "EPFLMouseMuscleHFDRMAEx1112",
+ "396",
+ "EPFLMouseMuscleHFDRMAEx1112",
"EPFL/LISP BXD HFD Muscle Affy Mouse Gene 1.0 ST (Nov12) RMA Exon Level"
- ],
+ ],
[
- "397",
- "EPFLMouseMuscleCDRMAEx1112",
+ "397",
+ "EPFLMouseMuscleCDRMAEx1112",
"EPFL/LISP BXD CD Muscle Affy Mouse Gene 1.0 ST (Nov12) RMA Exon Level"
]
- ],
+ ],
"Neocortex mRNA": [
[
- "375",
- "DevNeocortex_ILM6.2P14RInv_1111",
- "BIDMC/UTHSC Dev Neocortex P14 ILMv6.2 (Nov11) RankInv"
- ],
- [
- "374",
- "DevNeocortex_ILM6.2P3RInv_1111",
+ "374",
+ "DevNeocortex_ILM6.2P3RInv_1111",
"BIDMC/UTHSC Dev Neocortex P3 ILMv6.2 (Nov11) RankInv"
- ],
+ ],
[
- "284",
- "HQFNeoc_1210v2_RankInv",
+ "375",
+ "DevNeocortex_ILM6.2P14RInv_1111",
+ "BIDMC/UTHSC Dev Neocortex P14 ILMv6.2 (Nov11) RankInv"
+ ],
+ [
+ "284",
+ "HQFNeoc_1210v2_RankInv",
"HQF BXD Neocortex ILM6v1.1 (Dec10v2) RankInv"
- ],
+ ],
[
- "282",
- "HQFNeoc_1210_RankInv",
+ "282",
+ "HQFNeoc_1210_RankInv",
"HQF BXD Neocortex ILM6v1.1 (Dec10) RankInv"
- ],
+ ],
[
- "157",
- "HQFNeoc_0208_RankInv",
+ "157",
+ "HQFNeoc_0208_RankInv",
"HQF BXD Neocortex ILM6v1.1 (Feb08) RankInv"
- ],
+ ],
[
- "275",
- "DevNeocortex_ILM6.2P14RInv_1110",
+ "275",
+ "DevNeocortex_ILM6.2P14RInv_1110",
"BIDMC/UTHSC Dev Neocortex P14 ILMv6.2 (Nov10) RankInv"
- ],
+ ],
[
- "274",
- "DevNeocortex_ILM6.2P3RInv_1110",
+ "274",
+ "DevNeocortex_ILM6.2P3RInv_1110",
"BIDMC/UTHSC Dev Neocortex P3 ILMv6.2 (Nov10) RankInv"
]
- ],
+ ],
"Nucleus Accumbens mRNA": [
[
- "156",
- "VCUSalo_1007_R",
+ "156",
+ "VCUSalo_1007_R",
"VCU BXD NAc Sal M430 2.0 (Oct07) RMA"
]
- ],
+ ],
"Phenotypes": [
[
- "602",
- "BXDPublish",
+ "602",
+ "BXDPublish",
"BXD Published Phenotypes"
+ ],
+ [
+ "658",
+ "GITrMetPublish",
+ "GI Tract Metagenome Phenotypes"
]
- ],
+ ],
"Pituitary Gland mRNA": [
[
- "389",
- "INIA_PG_RMA_0612",
+ "389",
+ "INIA_PG_RMA_0612",
"INIA Pituitary Affy MoGene 1.0ST (Jun12) RMA"
- ],
+ ],
[
- "427",
- "INIA_Pituitary_RMA_F_0612",
+ "427",
+ "INIA_Pituitary_RMA_F_0612",
"INIA Pituitary Affy MoGene 1.0ST (Jun12) RMA Females"
- ],
+ ],
[
- "428",
- "INIA_Pituitary_RMA_M_0612",
+ "428",
+ "INIA_Pituitary_RMA_M_0612",
"INIA Pituitary Affy MoGene 1.0ST (Jun12) RMA Males"
- ],
+ ],
[
- "335",
- "INIA_PG_RMA_Ex_0612",
+ "335",
+ "INIA_PG_RMA_Ex_0612",
"INIA Pituitary Affy MoGene 1.0ST (Jun12) RMA Exon Level"
]
- ],
+ ],
"Prefrontal Cortex mRNA": [
[
- "135",
- "VCUSal_1206_R",
+ "135",
+ "VCUSal_1206_R",
"VCU BXD PFC Sal M430 2.0 (Dec06) RMA"
- ],
+ ],
[
- "136",
- "VCUEtOH_1206_R",
+ "136",
+ "VCUEtOH_1206_R",
"VCU BXD PFC EtOH M430 2.0 (Dec06) RMA"
- ],
+ ],
[
- "137",
- "VCUSal_1006_R",
+ "137",
+ "VCUSal_1006_R",
"VCU BXD PFC Et vs Sal M430 2.0 (Dec06) Sscore"
]
- ],
+ ],
"Retina mRNA": [
[
- "267",
- "Illum_Retina_BXD_RankInv0410",
+ "709",
+ "DoDCMMRPRetMoGene2_0515",
+ "DoD Retina Normal Affy MoGene 2.0 ST (May15) RMA Gene Level"
+ ],
+ [
+ "710",
+ "DoDCMMRPRetMoGene2Ex_0515",
+ "DoD Retina Normal Affy MoGene 2.0 ST (May15) RMA Exon Level"
+ ],
+ [
+ "267",
+ "Illum_Retina_BXD_RankInv0410",
"Full HEI Retina Illumina V6.2 (Apr10) RankInv"
- ],
+ ],
[
- "302",
- "G2NEI_ILM_Retina_BXD_RI0410",
+ "302",
+ "G2NEI_ILM_Retina_BXD_RI0410",
"HEI Retina Normal Illumina V6.2 (Apr10) RankInv"
- ],
+ ],
[
- "709",
- "DoDCMMRPRetMoGene2_0515",
- "DoD Retina Normal Affy MoGene 2.0 ST (May15) RMA Gene Level"
- ],
+ "785",
+ "DoDTATRCRetBLMoGene2_0316",
+ "DoD Retina After Blast Affy MoGene 2.0 ST (Mar16) RMA Gene Level"
+ ],
[
- "710",
- "DoDCMMRPRetMoGene2Ex_0515",
- "DoD Retina Normal Affy MoGene 2.0 ST (May15) RMA Exon Level"
- ],
+ "787",
+ "DoDRetBlastvsNormal_0416",
+ "DoD Retina Blast vs Normal Retina Affy MoGene 2.0 ST (Apr16) RMA Gene Level"
+ ],
+ [
+ "786",
+ "DoDTATRCRetBLMoGene2E_0316",
+ "DoD Retina After Blast Affy MoGene 2.0 ST (Mar16) RMA Exon Level"
+ ],
[
- "385",
- "ONCRetILM6_0412",
+ "385",
+ "ONCRetILM6_0412",
"ONC HEI Retina (April 2012) RankInv"
+ ],
+ [
+ "371",
+ "HEIONCvsCRetILM6_0911",
+ "HEI ONC vs Control Retina Illumina V6.2 (Sep11) RankInv"
]
- ],
+ ],
"Spleen mRNA": [
[
- "283",
- "UTHSC_SPL_RMA_1210",
+ "283",
+ "UTHSC_SPL_RMA_1210",
"UTHSC Affy MoGene 1.0 ST Spleen (Dec10) RMA"
- ],
+ ],
[
- "773",
- "UTHSC_SPLs1_RMA_1210",
+ "773",
+ "UTHSC_SPLs1_RMA_1210",
"UTHSC Affy MoGene 1.0 ST Spleen (Dec10) RMA Set1"
- ],
+ ],
[
- "774",
- "UTHSC_SPLs2_RMA_1210",
+ "774",
+ "UTHSC_SPLs2_RMA_1210",
"UTHSC Affy MoGene 1.0 ST Spleen (Dec10) RMA Set2"
- ],
+ ],
[
- "286",
- "UTHSC_SPL_RMA_1210M",
+ "286",
+ "UTHSC_SPL_RMA_1210M",
"UTHSC Affy MoGene 1.0 ST Spleen (Dec10) RMA Males"
- ],
+ ],
[
- "287",
- "UTHSC_SPL_RMA_1210F",
+ "287",
+ "UTHSC_SPL_RMA_1210F",
"UTHSC Affy MoGene 1.0 ST Spleen (Dec10) RMA Females"
- ],
+ ],
[
- "429",
- "UTHSC_SPL_RMAEx_1210",
+ "429",
+ "UTHSC_SPL_RMAEx_1210",
"UTHSC Affy MoGene 1.0 ST Spleen (Dec10) RMA Exon Level"
- ],
+ ],
[
- "271",
- "UTHSC_SPL_RMA_1010",
+ "271",
+ "UTHSC_SPL_RMA_1010",
"UTHSC Affy MoGene 1.0 ST Spleen (Oct10) RMA"
- ],
+ ],
[
- "260",
- "UTK_BXDSpl_VST_0110",
+ "260",
+ "UTK_BXDSpl_VST_0110",
"UTK Spleen ILM6.1 (Jan10) VST"
- ],
+ ],
[
- "227",
- "IoP_SPL_RMA_0509",
+ "227",
+ "IoP_SPL_RMA_0509",
"IoP Affy MOE 430v2 Spleen (May09) RMA"
]
- ],
+ ],
"Striatum mRNA": [
[
- "376",
- "DevStriatum_ILM6.2P3RInv_1111",
- "BIDMC/UTHSC Dev Striatum P3 ILMv6.2 (Nov11) RankInv"
- ],
- [
- "377",
- "DevStriatum_ILM6.2P14RInv_1111",
- "BIDMC/UTHSC Dev Striatum P14 ILMv6.2 (Nov11) RankInv"
- ],
- [
- "399",
- "Striatum_Exon_1212",
+ "399",
+ "Striatum_Exon_1212",
"HQF Striatum Affy Mouse Exon 1.0ST Gene Level (Dec09) RMA"
- ],
+ ],
[
- "163",
- "Striatum_Exon_0209",
+ "163",
+ "Striatum_Exon_0209",
"HQF Striatum Affy Mouse Exon 1.0ST Exon Level (Dec09) RMA"
- ],
+ ],
[
- "285",
- "UTHSC_Striatum_RankInv_1210",
+ "376",
+ "DevStriatum_ILM6.2P3RInv_1111",
+ "BIDMC/UTHSC Dev Striatum P3 ILMv6.2 (Nov11) RankInv"
+ ],
+ [
+ "377",
+ "DevStriatum_ILM6.2P14RInv_1111",
+ "BIDMC/UTHSC Dev Striatum P14 ILMv6.2 (Nov11) RankInv"
+ ],
+ [
+ "285",
+ "UTHSC_Striatum_RankInv_1210",
"HQF BXD Striatum ILM6.1 (Dec10v2) RankInv"
- ],
+ ],
[
- "298",
- "UTHSC_Str_RankInv_1210",
+ "298",
+ "UTHSC_Str_RankInv_1210",
"HQF BXD Striatum ILM6.1 (Dec10) RankInv"
- ],
+ ],
[
- "152",
- "UTHSC_1107_RankInv",
+ "152",
+ "UTHSC_1107_RankInv",
"HQF BXD Striatum ILM6.1 (Nov07) RankInv"
- ],
+ ],
[
- "74",
- "SA_M2_0405_MC",
+ "74",
+ "SA_M2_0405_MC",
"HBP Rosen Striatum M430V2 (Apr05) MAS5 Clean"
- ],
+ ],
[
- "69",
- "SA_M2_0405_RC",
+ "69",
+ "SA_M2_0405_RC",
"HBP Rosen Striatum M430V2 (Apr05) RMA Clean"
- ],
+ ],
[
- "68",
- "SA_M2_0405_PC",
+ "68",
+ "SA_M2_0405_PC",
"HBP Rosen Striatum M430V2 (Apr05) PDNN Clean"
- ],
+ ],
[
- "67",
- "SA_M2_0405_SS",
+ "67",
+ "SA_M2_0405_SS",
"HBP Rosen Striatum M430V2 (Apr05) SScore"
- ],
+ ],
[
- "66",
- "SA_M2_0405_RR",
+ "66",
+ "SA_M2_0405_RR",
"HBP Rosen Striatum M430V2 (Apr05) RMA Orig"
]
- ],
+ ],
"T Cell (helper) mRNA": [
[
- "319",
- "RTHC_0211_R",
+ "319",
+ "RTHC_0211_R",
"HZI Thelp M430v2 (Feb11) RMA"
]
- ],
+ ],
"T Cell (regulatory) mRNA": [
[
- "122",
- "RTC_1106_R",
+ "122",
+ "RTC_1106_R",
"HZI Treg M430v2 (Feb11) RMA"
]
- ],
+ ],
"Ventral Tegmental Area mRNA": [
[
- "230",
- "VCUEtvsSal_0609_R",
+ "228",
+ "VCUSal_0609_R",
+ "VCU BXD VTA Sal M430 2.0 (Jun09) RMA"
+ ],
+ [
+ "230",
+ "VCUEtvsSal_0609_R",
"VCU BXD VTA Et vs Sal M430 2.0 (Jun09) RMA"
- ],
+ ],
[
- "229",
- "VCUEtOH_0609_R",
+ "229",
+ "VCUEtOH_0609_R",
"VCU BXD VTA EtOH M430 2.0 (Jun09) RMA"
- ],
- [
- "228",
- "VCUSal_0609_R",
- "VCU BXD VTA Sal M430 2.0 (Jun09) RMA"
]
]
- },
+ },
"BXD-Bone": {
"Phenotypes": [
[
- "None",
- "BXD-BonePublish",
- "BXD-Bone Published Phenotypes"
+ "650",
+ "BXD-BonePublish",
+ "BXD-Bone Phenotypes"
]
]
- },
+ },
+ "BXD-Harvested": {
+ "Genotypes": [
+ [
+ "None",
+ "BXD-HarvestedGeno",
+ "BXD-Harvested Genotypes"
+ ]
+ ],
+ "Hippocampus mRNA": [
+ [
+ "873",
+ "JAX-BXD-Hip-Pro-0219",
+ "JAX BXD Hippocampal Proteome (Feb19)"
+ ]
+ ],
+ "Liver mRNA": [
+ [
+ "877",
+ "UTHSC-BXD-Harv_Liv-1019",
+ "UTHSC BXD Harvested Liver RNA-Seq (Oct19) TPM Log2"
+ ],
+ [
+ "843",
+ "UTHSC-BXD-Harv_Liv-0118",
+ "UTHSC BXD Harvested Liver RNA-Seq (Aug18) Log2"
+ ]
+ ],
+ "Phenotypes": [
+ [
+ "None",
+ "BXD-HarvestedPublish",
+ "BXD-NIA-Longevity Phenotypes"
+ ]
+ ]
+ },
+ "BXD300": {
+ "Genotypes": [
+ [
+ "None",
+ "BXD300Geno",
+ "BXD300 Genotypes"
+ ]
+ ],
+ "Liver mRNA": [
+ [
+ "105",
+ "LV_G_0106_B",
+ "UNC Agilent G4121A Liver LOWESS Stanford (Jan06) Both Sexes"
+ ],
+ [
+ "103",
+ "LV_G_0106_M",
+ "UNC Agilent G4121A Liver LOWESS Stanford (Jan06) Males"
+ ],
+ [
+ "104",
+ "LV_G_0106_F",
+ "UNC Agilent G4121A Liver LOWESS Stanford (Jan06) Females"
+ ]
+ ],
+ "Phenotypes": [
+ [
+ "None",
+ "BXD300Publish",
+ "BXD300 Published Phenotypes"
+ ]
+ ]
+ },
"BXH": {
"Bone Femur mRNA": [
[
- "412",
- "UCLA_BXH_Femur_0113_RSN",
+ "412",
+ "UCLA_BXH_Femur_0113_RSN",
"UCLA GSE27483 BXH Bone Femur ILM Mouse WG-6 v1, v1.1 (Jan13) RSN"
]
- ],
+ ],
"Cartilage mRNA": [
[
- "209",
- "UCLA_BXHBXD_CARTILAGE_V2",
+ "209",
+ "UCLA_BXHBXD_CARTILAGE_V2",
"UCLA BXH and BXD Cartilage v2"
- ],
+ ],
[
- "205",
- "UCLA_BXHBXD_CARTILAGE",
+ "205",
+ "UCLA_BXHBXD_CARTILAGE",
"UCLA BXH and BXD Cartilage"
- ],
+ ],
[
- "179",
- "UCLA_BXH_CARTILAGE",
+ "179",
+ "UCLA_BXH_CARTILAGE",
"UCLA BXH Cartilage"
]
- ],
+ ],
"Genotypes": [
[
- "638",
- "BXHGeno",
+ "638",
+ "BXHGeno",
"BXH Genotypes"
]
- ],
+ ],
"Liver mRNA": [
[
- "353",
- "GSE16780BXH_UCLA_ML0911",
+ "353",
+ "GSE16780BXH_UCLA_ML0911",
"GSE16780 UCLA Mouse BXH Liver Affy HT M430A (Sep11) RMA"
]
- ],
+ ],
"Phenotypes": [
[
- "627",
- "BXHPublish",
+ "627",
+ "BXHPublish",
"BXH Published Phenotypes"
]
]
- },
+ },
"C57BL-6JxC57BL-6NJF2": {
"Genotypes": [
[
- "622",
- "C57BL-6JxC57BL-6NJF2Geno",
+ "622",
+ "C57BL-6JxC57BL-6NJF2Geno",
"C57BL-6JxC57BL-6NJF2 Genotypes"
]
- ],
+ ],
"Phenotypes": [
[
- "620",
- "C57BL-6JxC57BL-6NJF2Publish",
- "C57BL-6JxC57BL-6NJF2 Published Phenotypes"
+ "620",
+ "C57BL-6JxC57BL-6NJF2Publish",
+ "C57BL/6JxC57BL/6NJ F2 CROSS Phenotypes"
]
]
- },
+ },
"CFW": {
"Hippocampus mRNA": [
[
- "811",
- "UCSD_CFW_HIP_RNA-Seq_log2_0117",
+ "811",
+ "UCSD_CFW_HIP_RNA-Seq_log2_0117",
"UCSD CFW Hippocampus (Jan17) RNA-Seq Log2 Z-score"
- ],
+ ],
[
- "808",
- "UCSD_CFW_HIP_RNA-Seq_0117",
- "UCSD CFW Hippocampus (Jan17) RNA-Seq"
+ "808",
+ "UCSD_CFW_HIP_RNA-Seq_0117",
+ "UCSD CFW Hippocampus RNA-Seq (Jan17) FPKM Quantile"
]
- ],
+ ],
"Phenotypes": [
[
- "None",
- "CFWPublish",
- "CFW Published Phenotypes"
+ "None",
+ "CFWPublish",
+ "CFW Phenotypes"
]
- ],
+ ],
"Prefrontal Cortex mRNA": [
[
- "813",
- "UCSD_CFW_PFC_RNA-Seq_log2_0117",
+ "813",
+ "UCSD_CFW_PFC_RNA-Seq_log2_0117",
"UCSD CFW Prefrontal Cortex (Jan17) RNA-Seq Log2 Z-score"
- ],
+ ],
[
- "810",
- "UCSD_CFW_PFC_RNA-Seq_0117",
+ "810",
+ "UCSD_CFW_PFC_RNA-Seq_0117",
"UCSD CFW Prefrontal Cortex (Jan17) RNA-Seq"
]
- ],
+ ],
"Striatum mRNA": [
[
- "812",
- "UCSD_CFW_STR_RNA-Seq_log2_0117",
+ "812",
+ "UCSD_CFW_STR_RNA-Seq_log2_0117",
"UCSD CFW Striatum (Jan17) RNA-Seq Log2 Z-score"
- ],
+ ],
[
- "809",
- "UCSD_CFW_SPL_RNA-Seq_0117",
+ "809",
+ "UCSD_CFW_SPL_RNA-Seq_0117",
"UCSD CFW Striatum (Jan17) RNA-Seq"
]
]
- },
+ },
"CIE-INIA": {
"LCM Brain Regions mRNA": [
[
- "776",
- "INIA_LCM_CAB_1215",
+ "776",
+ "INIA_LCM_CAB_1215",
"INIA LCM (11 Regions) CIE/AIR/BAS RNA-seq Transcript Level (Dec15)"
- ],
+ ],
[
- "772",
- "INIA_LCM_1215",
+ "772",
+ "INIA_LCM_1215",
"INIA LCM (11 Regions) CIE/AIR RNA-seq Transcript Level (Dec15)"
- ],
+ ],
[
- "775",
- "INIA_LCMB_1215",
+ "775",
+ "INIA_LCMB_1215",
"INIA LCM (11 Regions) BASELINE RNA-seq Transcript Level (Dec15)"
]
- ],
+ ],
+ "Phenotypes": [
+ [
+ "None",
+ "CIE-INIAPublish",
+ "LCM Phenotypes"
+ ]
+ ]
+ },
+ "CIE-RMA": {
+ "Hippocampus mRNA": [
+ [
+ "831",
+ "INIA_UTHSC_Hip_AffyMTA1_May17",
+ "INIA-UTHSC Hippocampus CIE Affy MTA 1.0 GeneLevel (Mar18) RMA"
+ ]
+ ],
+ "Midbrain mRNA": [
+ [
+ "830",
+ "INIA_UTHSC_Mid_AffyMTA1_Apr17",
+ "INIA-UTHSC Midbrain CIE Affy MTA 1.0 GeneLevel (Apr17) RMA"
+ ],
+ [
+ "834",
+ "INIA_UTHSC_Mid_AffyMTA1_Ex_May17",
+ "INIA-UTHSC Midbrain CIE Affy MTA 1.0 Exon Level (Apr17) RMA"
+ ]
+ ],
"Phenotypes": [
[
- "None",
- "CIE-INIAPublish",
- "CIE-INIA Published Phenotypes"
+ "None",
+ "CIE-RMAPublish",
+ "CIE-RMA Phenotypes"
]
]
- },
+ },
"CMS": {
"Phenotypes": [
[
- "None",
- "CMSPublish",
- "CMS Published Phenotypes"
+ "None",
+ "CMSPublish",
+ "CMS Phenotypes"
]
]
- },
+ },
"CTB6F2": {
"Adipose mRNA": [
[
- "170",
- "UCLA_CTB6B6CTF2_ADIPOSE_2005",
+ "170",
+ "UCLA_CTB6B6CTF2_ADIPOSE_2005",
"UCLA CTB6/B6CTF2 Adipose (2005) mlratio"
- ],
+ ],
[
- "189",
- "UCLA_CTB6B6CTF2_ADIPOSE_FEMALE",
+ "189",
+ "UCLA_CTB6B6CTF2_ADIPOSE_FEMALE",
"UCLA CTB6B6CTF2 Adipose Female mlratio"
- ],
+ ],
[
- "188",
- "UCLA_CTB6B6CTF2_ADIPOSE_MALE",
+ "188",
+ "UCLA_CTB6B6CTF2_ADIPOSE_MALE",
"UCLA CTB6B6CTF2 Adipose Male mlratio"
]
- ],
+ ],
"Brain mRNA": [
[
- "171",
- "UCLA_CTB6B6CTF2_BRAIN_2005",
+ "171",
+ "UCLA_CTB6B6CTF2_BRAIN_2005",
"UCLA CTB6/B6CTF2 Brain (2005) mlratio"
- ],
+ ],
[
- "190",
- "UCLA_CTB6B6CTF2_BRAIN_MALE",
+ "190",
+ "UCLA_CTB6B6CTF2_BRAIN_MALE",
"UCLA CTB6/B6CTF2 Brain Males (2005) mlratio"
- ],
+ ],
[
- "191",
- "UCLA_CTB6B6CTF2_BRAIN_FEMALE",
+ "191",
+ "UCLA_CTB6B6CTF2_BRAIN_FEMALE",
"UCLA CTB6/B6CTF2 Brain Females (2005) mlratio"
]
- ],
+ ],
"Genotypes": [
[
- "None",
- "CTB6F2Geno",
+ "None",
+ "CTB6F2Geno",
"CTB6F2 Genotypes"
]
- ],
+ ],
"Liver mRNA": [
[
- "172",
- "UCLA_CTB6B6CTF2_LIVER_2005",
+ "172",
+ "UCLA_CTB6B6CTF2_LIVER_2005",
"UCLA CTB6/B6CTF2 Liver (2005) mlratio"
- ],
+ ],
[
- "193",
- "UCLA_CTB6B6CTF2_LIVER_FEMALE",
+ "193",
+ "UCLA_CTB6B6CTF2_LIVER_FEMALE",
"UCLA CTB6B6CTF2 Liver Female mlratio"
- ],
+ ],
[
- "192",
- "UCLA_CTB6B6CTF2_LIVER_MALE",
+ "192",
+ "UCLA_CTB6B6CTF2_LIVER_MALE",
"UCLA CTB6B6CTF2 Liver Male mlratio"
]
- ],
+ ],
"Muscle mRNA": [
[
- "173",
- "UCLA_CTB6B6CTF2_MUSCLE_2005",
+ "173",
+ "UCLA_CTB6B6CTF2_MUSCLE_2005",
"UCLA CTB6/B6CTF2 Muscle (2005) mlratio"
- ],
+ ],
[
- "195",
- "UCLA_CTB6B6CTF2_MUSCLE_FEMALE",
+ "195",
+ "UCLA_CTB6B6CTF2_MUSCLE_FEMALE",
"UCLA CTB6B6CTF2 Muscle Female mlratio"
- ],
+ ],
[
- "194",
- "UCLA_CTB6B6CTF2_MUSCLE_MALE",
+ "194",
+ "UCLA_CTB6B6CTF2_MUSCLE_MALE",
"UCLA CTB6B6CTF2 Muscle Male mlratio"
]
- ],
+ ],
"Phenotypes": [
[
- "630",
- "CTB6F2Publish",
- "CTB6F2 Published Phenotypes"
+ "630",
+ "CTB6F2Publish",
+ "CastB6/B6Cast F2 UCLA Published Phenotypes"
]
]
- },
+ },
"CXB": {
"Genotypes": [
[
- "614",
- "CXBGeno",
+ "614",
+ "CXBGeno",
"CXB Genotypes"
]
- ],
+ ],
+ "Heart mRNA": [
+ [
+ "821",
+ "UCLA_CXB_Aor_Jan16",
+ "UCLA CXB Aorta Affy M430 2.0 (Jan16) RMA"
+ ]
+ ],
"Hippocampus mRNA": [
[
- "100",
- "HC_M2CB_1205_R",
+ "99",
+ "HC_M2CB_1205_P",
+ "Hippocampus Consortium M430v2 CXB (Dec05) PDNN"
+ ],
+ [
+ "100",
+ "HC_M2CB_1205_R",
"Hippocampus Consortium M430v2 CXB (Dec05) RMA"
- ],
+ ]
+ ],
+ "Liver mRNA": [
[
- "99",
- "HC_M2CB_1205_P",
- "Hippocampus Consortium M430v2 CXB (Dec05) PDNN"
+ "823",
+ "UCLA_CXB_Liv_Jan16",
+ "UCLA CXB Liver Affy M430 2.0 (Jan16) RMA"
]
- ],
+ ],
"Phenotypes": [
[
- "628",
- "CXBPublish",
+ "628",
+ "CXBPublish",
"CXB Published Phenotypes"
]
- ],
+ ],
"Spleen mRNA": [
[
- "153",
- "STSPL_1107_R",
+ "153",
+ "STSPL_1107_R",
"Stuart Spleen M430v2 (Nov07) RMA"
]
]
- },
+ },
+ "D2GM": {
+ "Phenotypes": [
+ [
+ "None",
+ "D2GMPublish",
+ "D2GM Phenotypes"
+ ]
+ ],
+ "Retina mRNA": [
+ [
+ "847",
+ "JAX_D2GM_RSeq_log2Z_0418",
+ "JAX Retina (Apr18) RNA-Seq log2-Z"
+ ]
+ ]
+ },
"HS": {
"Hippocampus mRNA": [
[
- "268",
- "OXUKHS_ILMHipp_RI0510",
+ "268",
+ "OXUKHS_ILMHipp_RI0510",
"OX UK HS ILM6v1.1 Hippocampus (May 2010) RankInv"
]
- ],
+ ],
"Liver mRNA": [
[
- "269",
- "OXUKHS_ILMLiver_RI0510",
+ "269",
+ "OXUKHS_ILMLiver_RI0510",
"OX UK HS ILM6v1.1 Liver (May 2010) RankInv"
]
- ],
+ ],
"Lung mRNA": [
[
- "270",
- "OXUKHS_ILMLung_RI0510",
+ "270",
+ "OXUKHS_ILMLung_RI0510",
"OX UK HS ILM6v1.1 Lung (May 2010) RankInv"
]
- ],
+ ],
"Phenotypes": [
[
- "624",
- "HSPublish",
- "HS Published Phenotypes"
+ "624",
+ "HSPublish",
+ "Heterogeneous Stock Phenotypes"
]
]
- },
+ },
"HS-CC": {
"Striatum mRNA": [
[
- "304",
- "OHSU_HS-CC_ILMStr_0211",
+ "304",
+ "OHSU_HS-CC_ILMStr_0211",
"OHSU HS-CC Striatum ILM6v1 (Feb11) RankInv"
]
]
- },
+ },
+ "LGSM-AIG34_50-56-GBS": {
+ "Phenotypes": [
+ [
+ "None",
+ "LGSM-AIG34_50-56-GBSPublish",
+ "LGSM AIG34/50-56 GBS Phenotypes"
+ ]
+ ]
+ },
"LXS": {
"Genotypes": [
[
- "601",
- "LXSGeno",
+ "601",
+ "LXSGeno",
"LXS Genotypes"
]
- ],
+ ],
"Hippocampus mRNA": [
[
- "213",
- "Illum_LXS_Hipp_NOS_1008",
+ "211",
+ "Illum_LXS_Hipp_RSS_1008",
+ "Hippocampus Illumina RSS (Oct08) RankInv beta"
+ ],
+ [
+ "213",
+ "Illum_LXS_Hipp_NOS_1008",
"Hippocampus Illumina NOS (Oct08) RankInv beta"
- ],
+ ],
[
- "219",
- "Illum_LXS_Hipp_NON_1008",
+ "219",
+ "Illum_LXS_Hipp_NON_1008",
"Hippocampus Illumina NON (Oct08) RankInv beta"
- ],
+ ],
[
- "212",
- "Illum_LXS_Hipp_RSE_1008",
+ "212",
+ "Illum_LXS_Hipp_RSE_1008",
"Hippocampus Illumina RSE (Oct08) RankInv beta"
- ],
+ ],
[
- "214",
- "Illum_LXS_Hipp_NOE_1008",
+ "214",
+ "Illum_LXS_Hipp_NOE_1008",
"Hippocampus Illumina NOE (Oct08) RankInv beta"
- ],
- [
- "211",
- "Illum_LXS_Hipp_RSS_1008",
- "Hippocampus Illumina RSS (Oct08) RankInv beta"
- ],
+ ],
[
- "143",
- "Illum_LXS_Hipp_loess0807",
+ "143",
+ "Illum_LXS_Hipp_loess0807",
"Hippocampus Illumina (Aug07) LOESS"
- ],
+ ],
[
- "142",
- "Illum_LXS_Hipp_loess_nb0807",
+ "142",
+ "Illum_LXS_Hipp_loess_nb0807",
"Hippocampus Illumina (Aug07) LOESS_NB"
- ],
+ ],
[
- "141",
- "Illum_LXS_Hipp_quant0807",
+ "141",
+ "Illum_LXS_Hipp_quant0807",
"Hippocampus Illumina (Aug07) QUANT"
- ],
+ ],
[
- "140",
- "Illum_LXS_Hipp_quant_nb0807",
+ "140",
+ "Illum_LXS_Hipp_quant_nb0807",
"Hippocampus Illumina (Aug07) QUANT_NB"
- ],
+ ],
[
- "139",
- "Illum_LXS_Hipp_rsn0807",
+ "139",
+ "Illum_LXS_Hipp_rsn0807",
"Hippocampus Illumina (Aug07) RSN"
- ],
+ ],
[
- "138",
- "Illum_LXS_Hipp_rsn_nb0807",
+ "138",
+ "Illum_LXS_Hipp_rsn_nb0807",
"Hippocampus Illumina (Aug07) RSN_NB"
- ],
+ ],
[
- "133",
- "Hipp_Illumina_RankInv_0507",
+ "133",
+ "Hipp_Illumina_RankInv_0507",
"Hippocampus Illumina (May07) RankInv"
]
- ],
+ ],
"Phenotypes": [
[
- "606",
- "LXSPublish",
+ "606",
+ "LXSPublish",
"LXS Published Phenotypes"
]
- ],
+ ],
"Prefrontal Cortex mRNA": [
[
- "130",
- "VCUSal_0806_R",
+ "130",
+ "VCUSal_0806_R",
"VCU LXS PFC Sal M430A 2.0 (Aug06) RMA"
]
]
- },
+ },
"Linsenbardt-Boehm": {
"Genotypes": [
[
- "None",
- "Linsenbardt-BoehmGeno",
+ "None",
+ "Linsenbardt-BoehmGeno",
"Linsenbardt-Boehm Genotypes"
]
- ],
+ ],
"Phenotypes": [
[
- "645",
- "Linsenbardt-BoehmPublish",
+ "645",
+ "Linsenbardt-BoehmPublish",
"Linsenbardt-Boehm Published Phenotypes"
]
]
- },
+ },
"MDP": {
"Bone Femur mRNA": [
[
- "413",
- "UCLA_MDP_Femur_0113_RSN",
+ "413",
+ "UCLA_MDP_Femur_0113_RSN",
"UCLA GSE27483 MDP Bone Femur ILM Mouse WG-6 v1, v1.1 (Jan13) RSN"
]
- ],
+ ],
"Dorsal Root Ganglia mRNA": [
[
- "402",
- "TSRI-DRG-AffyMOE430_0113-MDP",
+ "402",
+ "TSRI-DRG-AffyMOE430_0113-MDP",
"TSRI DRG Affy Mouse Genome 430 2.0 (Jan13) RMA MDP"
]
- ],
+ ],
"Genotypes": [
[
- "609",
- "MDPGeno",
+ "609",
+ "MDPGeno",
"MDP Genotypes"
]
- ],
+ ],
"Hippocampus mRNA": [
[
- "273",
- "UMUTAffyExon_0209_RMA_MDP",
- "UMUTAffy Hippocampus Exon (Feb09) RMA MDP"
- ],
- [
- "272",
- "HC_M2_0606_MDP",
+ "272",
+ "HC_M2_0606_MDP",
"Hippocampus Consortium M430v2 (Jun06) RMA MDP"
+ ],
+ [
+ "273",
+ "UMUTAffyExon_0209_RMA_MDP",
+ "UMUTAffy Hippocampus Exon (Feb09) RMA MDP"
]
- ],
+ ],
"Liver mRNA": [
[
- "370",
- "GSE16780MDP_UCLA_ML0911",
+ "370",
+ "GSE16780MDP_UCLA_ML0911",
"GSE16780 UCLA Mouse MDP Liver Affy HT M430A (Sep11) RMA"
- ],
+ ],
[
- "357",
- "JAX_CSB_L_0711",
+ "357",
+ "JAX_CSB_L_0711",
"JAX Liver Affy M430 2.0 (Jul11) MDP"
- ],
+ ],
[
- "358",
- "JAX_CSB_L_HF_0711",
+ "358",
+ "JAX_CSB_L_HF_0711",
"JAX Liver HF Affy M430 2.0 (Jul11) MDP"
- ],
+ ],
[
- "359",
- "JAX_CSB_L_6C_0711",
+ "359",
+ "JAX_CSB_L_6C_0711",
"JAX Liver 6C Affy M430 2.0 (Jul11) MDP"
- ],
+ ],
[
- "403",
- "JAX_liver_agil_MDP-0113",
+ "403",
+ "JAX_liver_agil_MDP-0113",
"Harrill-Rusyn MDP Liver Acetaminophen Tox Study (G4121A, 2009)"
]
- ],
+ ],
"Phenotypes": [
[
- "605",
- "MDPPublish",
+ "605",
+ "MDPPublish",
"Mouse Phenome Database"
]
- ],
+ ],
"Spleen mRNA": [
[
- "801",
- "HMS_mm8_MDP_Spl_CD4_1116",
+ "801",
+ "HMS_mm8_MDP_Spl_CD4_1116",
"HMS Spleen CD4+ T cells MDP Affy Mouse Gene 1.0 ST (Jul16) Gene Level"
]
]
- },
+ },
"NZBXFVB-N2": {
"Mammary Tumors mRNA": [
[
- "225",
- "NCI_Mam_Tum_RMA_0409",
+ "225",
+ "NCI_Mam_Tum_RMA_0409",
"NCI Mammary M430v2 (Apr09) RMA"
]
- ],
+ ],
"Phenotypes": [
[
- "607",
- "NZBXFVB-N2Publish",
+ "607",
+ "NZBXFVB-N2Publish",
"NZBXFVB-N2 Published Phenotypes"
]
]
- },
+ },
+ "Retina-RGC-Rheaume": {
+ "Phenotypes": [
+ [
+ "None",
+ "Retina-RGC-RheaumePublish",
+ "Retina-RGC-Rheaume Phenotypes"
+ ]
+ ],
+ "Retina Single-cell RNA-Seq": [
+ [
+ "865",
+ "UConn-RGC-RSeq_r-0918",
+ "UConn-Rheaume Retina RGC (Sep18) scRNA-Seq Raw"
+ ],
+ [
+ "866",
+ "UConn-RGC-RSeq_log2-0918",
+ "UConn-Rheaume Retina RGC (Sep18) scRNA-Seq Log2"
+ ],
+ [
+ "867",
+ "UConn-RGC-RSeq_s-0918",
+ "UConn-Rheaume Retina RGC (Sep18) scRNA-Seq Siamak"
+ ]
+ ]
+ },
"SOTNOT-OHSU": {
"Genotypes": [
[
- "613",
- "SOTNOT-OHSUGeno",
+ "613",
+ "SOTNOT-OHSUGeno",
"SOTNOT-OHSU Genotypes"
]
]
- },
- "Scripps-2013": {}
- },
+ }
+ },
"poplar": {
"Poplar": {
"Phenotypes": [
[
- "649",
- "PoplarPublish",
- "Poplar Published Phenotypes"
+ "649",
+ "PoplarPublish",
+ "Poplar Phenotypes"
]
]
}
- },
+ },
"rat": {
+ "HRDP": {
+ "Genotypes": [
+ [
+ "None",
+ "HRDPGeno",
+ "HRDP Genotypes"
+ ]
+ ],
+ "Phenotypes": [
+ [
+ "None",
+ "HRDPPublish",
+ "HRDP Phenotypes"
+ ]
+ ]
+ },
"HSNIH-Palmer": {
+ "Infralimbic Cortex mRNA": [
+ [
+ "861",
+ "HSNIH-Rat-IL-RSeq-0818",
+ "HSNIH-Palmer Infralimbic Cortex RNA-Seq (Aug18) rlog"
+ ]
+ ],
+ "Lateral Habenula mRNA": [
+ [
+ "862",
+ "HSNIH-Rat-LHB-RSeq-0818",
+ "HSNIH-Palmer Lateral Habenula RNA-Seq (Aug18) rlog"
+ ]
+ ],
+ "Nucleus Accumbens mRNA": [
+ [
+ "860",
+ "HSNIH-Rat-Acbc-RSeq-0818",
+ "HSNIH-Palmer Nucleus Accumbens Core RNA-Seq (Aug18) rlog"
+ ]
+ ],
+ "Orbitofrontal Cortex mRNA": [
+ [
+ "864",
+ "HSNIH-Rat-VoLo-RSeq-0818",
+ "HSNIH-Palmer Orbitofrontal Cortex RNA-Seq (Aug18) rlog"
+ ]
+ ],
"Phenotypes": [
[
- "None",
- "HSNIH-PalmerPublish",
- "HSNIH-Palmer Published Phenotypes"
+ "652",
+ "HSNIH-PalmerPublish",
+ "HSNIH Phenotypes"
+ ]
+ ],
+ "Prelimbic Cortex mRNA": [
+ [
+ "863",
+ "HSNIH-Rat-PL-RSeq-0818",
+ "HSNIH-Palmer Prelimbic Cortex RNA-Seq (Aug18) rlog"
]
]
- },
+ },
"HSNIH-RGSMC": {
"Phenotypes": [
[
- "None",
- "HSNIH-RGSMCPublish",
- "HSNIH-RGSMC Published Phenotypes"
+ "None",
+ "HSNIH-RGSMCPublish",
+ "HSNIH Published Phenotypes"
]
]
- },
+ },
"HXBBXH": {
"Adipose mRNA": [
[
- "799",
- "FGUCAS_BAdip0516",
- "FGUCAS BXH/HXB Brown Adipose Affy Rat Gene 2.0 ST (May16) log2 **"
+ "799",
+ "FGUCAS_BAdip0516",
+ "FGUCAS BXH/HXB Brown Adipose Affy Rat Gene 2.0 ST (May16) log2"
]
- ],
+ ],
"Adrenal Gland mRNA": [
[
- "220",
- "HXB_Adrenal_1208",
+ "220",
+ "HXB_Adrenal_1208",
"MDC/CAS/UCL Adrenal 230A (Dec08) RMA"
]
- ],
+ ],
"Genotypes": [
[
- "None",
- "HXBBXHGeno",
+ "None",
+ "HXBBXHGeno",
"HXBBXH Genotypes"
]
- ],
+ ],
"Heart mRNA": [
[
- "221",
- "HXB_Heart_1208",
+ "221",
+ "HXB_Heart_1208",
"MDC/CAS/UCL Heart 230_V2 (Dec08) RMA"
]
- ],
+ ],
"Hippocampus mRNA": [
[
- "231",
- "UT_HippRatEx_RMA_0709",
+ "231",
+ "UT_HippRatEx_RMA_0709",
"UT Hippocampus Affy RaEx 1.0 Exon (Jul09) RMA"
]
- ],
+ ],
"Kidney mRNA": [
[
- "70",
- "KI_2A_0405_M",
+ "70",
+ "KI_2A_0405_M",
"MDC/CAS/ICL Kidney 230A (Apr05) MAS5"
- ],
+ ],
[
- "65",
- "KI_2A_0405_Rz",
+ "65",
+ "KI_2A_0405_Rz",
"MDC/CAS/ICL Kidney 230A (Apr05) RMA 2z+8"
- ],
+ ],
[
- "64",
- "KI_2A_0405_R",
+ "64",
+ "KI_2A_0405_R",
"MDC/CAS/ICL Kidney 230A (Apr05) RMA"
]
- ],
+ ],
"Liver mRNA": [
[
- "222",
- "HXB_Liver_1208",
+ "222",
+ "HXB_Liver_1208",
"MDC/CAS/UCL Liver 230v2 (Dec08) RMA"
]
- ],
+ ],
"Peritoneal Fat mRNA": [
[
- "79",
- "FT_2A_0805_M",
+ "79",
+ "FT_2A_0805_M",
"MDC/CAS/ICL Peritoneal Fat 230A (Aug05) MAS5"
- ],
+ ],
[
- "75",
- "FT_2A_0605_Rz",
+ "75",
+ "FT_2A_0605_Rz",
"MDC/CAS/ICL Peritoneal Fat 230A (Jun05) RMA 2z+8"
]
- ],
+ ],
"Phenotypes": [
[
- "632",
- "HXBBXHPublish",
- "HXBBXH Published Phenotypes"
+ "632",
+ "HXBBXHPublish",
+ "HXB/BXH Published Phenotypes"
]
]
- },
+ },
"SRxSHRSPF2": {
"Eye mRNA": [
[
- "226",
- "UIOWA_Eye_RMA_0906",
+ "226",
+ "UIOWA_Eye_RMA_0906",
"UIOWA Eye mRNA RAE230v2 (Sep06) RMA"
]
]
}
- },
+ },
"soybean": {
"J12XJ58F11": {
"Genotypes": [
[
- "None",
- "J12XJ58F11Geno",
+ "None",
+ "J12XJ58F11Geno",
"J12XJ58F11 Genotypes"
]
- ],
+ ],
"Phenotypes": [
[
- "647",
- "J12XJ58F11Publish",
- "J12XJ58F11 Published Phenotypes"
+ "647",
+ "J12XJ58F11Publish",
+ "J12XJ58F11 Phenotypes"
]
]
- },
+ },
"J12XJ58F2": {
"Phenotypes": [
[
- "616",
- "J12XJ58F2Publish",
+ "616",
+ "J12XJ58F2Publish",
"J12XJ58F2 Published Phenotypes"
]
]
}
- },
+ },
"tomato": {
"LXP": {
"Phenotypes": [
[
- "621",
- "LXPPublish",
+ "621",
+ "LXPPublish",
"LXP Published Phenotypes"
]
]
}
}
- },
+ },
"groups": {
- "All Species": [
- [
- "All Groups",
- "All Groups"
- ]
- ],
"arabidopsis": [
[
- "BayXSha",
+ "BayXSha",
"BayXSha"
- ],
+ ],
[
- "ColXBur",
+ "ColXBur",
"ColXBur"
- ],
+ ],
[
- "ColXCvi",
+ "ColXCvi",
"ColXCvi"
]
- ],
+ ],
"barley": [
[
- "QSM",
+ "QSM",
"QSM"
- ],
+ ],
[
- "SXM",
+ "SXM",
"SXM"
]
- ],
+ ],
"drosophila": [
[
- "DGRP",
+ "DGRP",
"Drosophila Genetic Reference Panel"
- ],
+ ],
[
- "Oregon-R_x_2b3",
+ "Oregon-R_x_2b3",
"Oregon-R x 2b3"
]
- ],
+ ],
"human": [
[
- "AD-cases-controls",
+ "HB",
+ "Brain, Aging: AD, HD, Normal Gene Expression (Harvard/Merck)"
+ ],
+ [
+ "AD-cases-controls",
"Brain, Aging: AD, Normal Gene Expression (Liang)"
- ],
+ ],
[
- "AD-cases-controls-Myers",
+ "AD-cases-controls-Myers",
"Brain, Aging: AD, Normal Gene Expression with Genotypes (Myers)"
- ],
+ ],
[
- "Aging-Brain-UCI",
+ "Aging-Brain-UCI",
"Brain, Aging: Normal Gene Expression (UCI/Cotman)"
- ],
+ ],
[
- "Brain-Normal-NIH-Gibbs",
+ "HCP",
+ "Brain, Cognition, Human Connectome Project"
+ ],
+ [
+ "HSB",
+ "Brain, Development: Normal Gene Expression (Yale/Sestan)"
+ ],
+ [
+ "Brain-Normal-NIH-Gibbs",
"Brain: Normal Gene Expression (NIH/Gibbs)"
- ],
+ ],
[
- "CANDLE",
+ "CANDLE",
"Child Development: CANDLE Cohort with Genotypes (TUCI/UTHSC)"
- ],
- [
- "CEPH-2004",
- "Lymphoblastoid Cells: Gene Expression (CEPH, Williams)"
- ],
+ ],
[
- "GTEx",
+ "GTEx",
"GTEx v3 All Tissues, RNA-Seq with Genotypes"
- ],
+ ],
[
- "GTEx_v5",
+ "GTEx_v5",
"GTEx v5 All Tissues, RNA-Seq with Genotypes"
- ],
+ ],
[
- "HB",
- "Brain, Aging: AD, HD, Normal Gene Expression (Harvard/Merck)"
- ],
- [
- "HCP",
- "Brain, Cognition, Human Connectome Project"
- ],
- [
- "HLC",
+ "HLC",
"Liver: Normal Gene Expression with Genotypes (Merck)"
- ],
+ ],
[
- "HLT",
+ "HLT",
"Lung: Normal Gene Expression (Merck)"
- ],
+ ],
[
- "HSB",
- "Brain, Development: Normal Gene Expression (Yale/Sestan)"
- ],
+ "CEPH-2004",
+ "Lymphoblastoid Cells: Gene Expression (CEPH, Williams)"
+ ],
[
- "TIGEM-Retina-RNA-Seq",
+ "Islets-Gerling",
+ "Pancreatic: Islets (UTHSC/Gerling)"
+ ],
+ [
+ "TIGEM-Retina-RNA-Seq",
"Retina: Normal Adult Gene Expression, RNA-Seq (TIGEM)"
]
- ],
+ ],
"mouse": [
[
- "AKXD",
- "AKXD"
- ],
+ "AIL",
+ "AIL Advanced Intercross Line"
+ ],
+ [
+ "AIL-LGSM-F34-A",
+ "AIL LGSM F34 (Array)"
+ ],
+ [
+ "AIL-LGSM-F34-GBS",
+ "AIL LGSM F34 (GBS)"
+ ],
+ [
+ "AIL-LGSM-F34-F39-43-GBS",
+ "AIL LGSM F34 and F39-43 (GBS)"
+ ],
+ [
+ "AIL-LGSM-F39-43-GBS",
+ "AIL LGSM F39-43 (GBS)"
+ ],
[
- "AXBXA",
- "AXB/BXA"
- ],
+ "AKXD",
+ "AKXD RI Family"
+ ],
[
- "B6BTBRF2",
+ "AXBXA",
+ "AXB/BXA RI Family"
+ ],
+ [
+ "B6BTBRF2",
"B6BTBRF2"
- ],
+ ],
[
- "B6D2",
- "Glaucoma and Aged Retina, UTHSC"
- ],
+ "Linsenbardt-Boehm",
+ "B6D2 EtOH Selected Advanced Intercross"
+ ],
[
- "B6D2F2",
+ "B6D2F2",
"B6D2F2"
- ],
+ ],
[
- "B6D2F2-PSU",
+ "B6D2F2-PSU",
"B6D2F2 PSU"
- ],
+ ],
[
- "B6D2RI",
- "BXD Aged"
- ],
- [
- "BDF2-1999",
+ "BDF2-1999",
"BDF2 UCLA"
- ],
+ ],
[
- "BDF2-2005",
+ "BDF2-2005",
"BDF2-2005"
- ],
+ ],
[
- "BHF2",
+ "BHHBF2",
+ "BH/HB F2 UCLA"
+ ],
+ [
+ "BHF2",
"BHF2 (Apoe Null) UCLA"
- ],
+ ],
[
- "BHHBF2",
- "BH/HB F2 UCLA"
- ],
+ "B6D2RI",
+ "BXD Aged"
+ ],
[
- "BXD",
- "BXD"
- ],
+ "BXD-Bone",
+ "BXD Bone Individual Data"
+ ],
[
- "BXD-Bone",
- "BXD Bone"
- ],
+ "BXD-Harvested",
+ "BXD NIA Longevity Study"
+ ],
[
- "BXH",
- "BXH"
- ],
+ "BXD",
+ "BXD RI Family"
+ ],
[
- "C57BL-6JxC57BL-6NJF2",
- "Reduced Complexity Cross (B6JxB6N F2)"
- ],
+ "BXD300",
+ "BXD300"
+ ],
+ [
+ "BXH",
+ "BXH RI Family"
+ ],
[
- "CFW",
+ "CTB6F2",
+ "CastB6/B6Cast F2 UCLA"
+ ],
+ [
+ "CFW",
"CFW Outbred GWAS"
- ],
+ ],
+ [
+ "CIE-INIA",
+ "Chronic Intermittent Ethanol Phase 1"
+ ],
[
- "CIE-INIA",
- "Chronic Intermittent Ethanol"
- ],
+ "CIE-RMA",
+ "Chronic Intermittent Ethanol Phase 2"
+ ],
[
- "CMS",
+ "CMS",
"Chronic Mild Stress"
- ],
+ ],
[
- "CTB6F2",
- "CastB6/B6Cast F2 UCLA"
- ],
+ "CXB",
+ "CXB RI Family (strain means)"
+ ],
+ [
+ "D2GM",
+ "D2 Glaucoma Model"
+ ],
[
- "CXB",
- "CXB"
- ],
+ "B6D2",
+ "Glaucoma and Aged Retina, UTHSC"
+ ],
[
- "HS",
+ "HS",
"Heterogeneous Stock"
- ],
+ ],
[
- "HS-CC",
+ "HS-CC",
"Heterogeneous Stock Collaborative Cross"
- ],
+ ],
[
- "Linsenbardt-Boehm",
- "B6D2 EtOH Selected Advanced Intercross"
- ],
+ "LXS",
+ "ILSXISS (LXS) RI Family (strain means)"
+ ],
[
- "LXS",
- "LXS"
- ],
+ "LGSM-AIG34_50-56-GBS",
+ "LGSM AI G34/50-56 Lionikas (GBS)"
+ ],
[
- "MDP",
- "Mouse Diversity Panel"
- ],
+ "MDP",
+ "Mouse Diversity Panel (strain means)"
+ ],
[
- "NZBXFVB-N2",
+ "NZBXFVB-N2",
"NZB/FVB N2 NCI"
- ],
+ ],
+ [
+ "C57BL-6JxC57BL-6NJF2",
+ "Reduced Complexity Cross (B6JxB6N F2)"
+ ],
[
- "Scripps-2013",
- "Scripps C57BL/6J"
- ],
+ "Retina-RGC-Rheaume",
+ "Retina RGC Rheaume"
+ ],
[
- "SOTNOT-OHSU",
+ "SOTNOT-OHSU",
"SOTNOT-OHSU"
]
- ],
+ ],
"poplar": [
[
- "Poplar",
+ "Poplar",
"Poplar"
]
- ],
+ ],
"rat": [
[
- "HSNIH-Palmer",
+ "HXBBXH",
+ "HXB/BXH"
+ ],
+ [
+ "HRDP",
+ "Hybrid Rat Diversity Panel"
+ ],
+ [
+ "HSNIH-Palmer",
"NIH Heterogeneous Stock (Palmer)"
- ],
+ ],
[
- "HSNIH-RGSMC",
+ "HSNIH-RGSMC",
"NIH Heterogeneous Stock (RGSMC 2013)"
- ],
- [
- "HXBBXH",
- "HXB/BXH"
- ],
+ ],
[
- "SRxSHRSPF2",
+ "SRxSHRSPF2",
"UIOWA SRxSHRSP F2"
]
- ],
+ ],
"soybean": [
[
- "J12XJ58F11",
+ "J12XJ58F11",
"J12XJ58F11"
- ],
+ ],
[
- "J12XJ58F2",
+ "J12XJ58F2",
"J12XJ58F2"
]
- ],
+ ],
"tomato": [
[
- "LXP",
+ "LXP",
"LXP"
]
]
- },
+ },
"species": [
[
- "human",
+ "human",
"Human (hg19)"
- ],
+ ],
[
- "mouse",
+ "mouse",
"Mouse (mm10)"
- ],
+ ],
[
- "rat",
- "Rat (rn3)"
- ],
+ "rat",
+ "Rat (rn6)"
+ ],
[
- "drosophila",
+ "drosophila",
"Drosophila"
- ],
+ ],
[
- "arabidopsis",
+ "arabidopsis",
"Arabidopsis thaliana"
- ],
+ ],
[
- "barley",
+ "barley",
"Barley"
- ],
+ ],
[
- "poplar",
+ "poplar",
"Poplar"
- ],
+ ],
[
- "soybean",
+ "soybean",
"Soybean"
- ],
+ ],
[
- "tomato",
+ "tomato",
"Tomato"
- ],
- [
- "All Species",
- "All Species"
]
- ],
+ ],
"types": {
- "All Species": {
- "All Groups": [
- [
- "Phenotypes",
- "Phenotypes"
- ]
- ]
- },
"arabidopsis": {
"BayXSha": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
]
- ],
+ ],
"ColXBur": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
]
- ],
+ ],
"ColXCvi": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
]
]
- },
+ },
"barley": {
"QSM": [
[
- "Leaf mRNA",
+ "Leaf mRNA",
"Leaf mRNA"
]
- ],
+ ],
"SXM": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Embryo mRNA",
+ "Embryo mRNA",
"Embryo mRNA"
- ],
+ ],
[
- "Leaf mRNA",
+ "Leaf mRNA",
"Leaf mRNA"
]
]
- },
+ },
"drosophila": {
"DGRP": [
[
- "Whole Body mRNA",
+ "Whole Body mRNA",
"Whole Body mRNA"
]
- ],
+ ],
"Oregon-R_x_2b3": [
[
- "Whole Body mRNA",
+ "Whole Body mRNA",
"Whole Body mRNA"
]
]
- },
+ },
"human": {
"AD-cases-controls": [
[
- "Brain mRNA",
+ "Brain mRNA",
"Brain mRNA"
]
- ],
+ ],
"AD-cases-controls-Myers": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Brain mRNA",
+ "Brain mRNA",
"Brain mRNA"
]
- ],
+ ],
"Aging-Brain-UCI": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Entorhinal Cortex mRNA",
+ "Entorhinal Cortex mRNA",
"Entorhinal Cortex mRNA"
- ],
+ ],
[
- "Hippocampus mRNA",
+ "Hippocampus mRNA",
"Hippocampus mRNA"
- ],
+ ],
[
- "Postcentral Gyrus mRNA",
+ "Postcentral Gyrus mRNA",
"Postcentral Gyrus mRNA"
- ],
+ ],
[
- "Superior Frontal Gyrus mRNA",
+ "Superior Frontal Gyrus mRNA",
"Superior Frontal Gyrus mRNA"
]
- ],
+ ],
"Brain-Normal-NIH-Gibbs": [
[
- "Cerebellum mRNA",
+ "Cerebellum mRNA",
"Cerebellum mRNA"
- ],
+ ],
[
- "Pons mRNA",
+ "Pons mRNA",
"Pons mRNA"
- ],
+ ],
[
- "Prefrontal Cortex mRNA",
+ "Prefrontal Cortex mRNA",
"Prefrontal Cortex mRNA"
- ],
+ ],
[
- "Temporal Cerebral Wall mRNA",
+ "Temporal Cerebral Wall mRNA",
"Temporal Cerebral Wall mRNA"
]
- ],
+ ],
"CANDLE": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Newborn Cord Blood mRNA",
+ "Newborn Cord Blood mRNA",
"Newborn Cord Blood mRNA"
]
- ],
+ ],
"CEPH-2004": [
[
- "Lymphoblast B-cell mRNA",
+ "Lymphoblast B-cell mRNA",
"Lymphoblast B-cell mRNA"
]
- ],
+ ],
"GTEx": [
[
- "Adipose tissue, subcutaneous mRNA",
+ "Adipose tissue, subcutaneous mRNA",
"Adipose tissue, subcutaneous mRNA"
- ],
+ ],
[
- "Adipose tissue, visceral mRNA",
+ "Adipose tissue, visceral mRNA",
"Adipose tissue, visceral mRNA"
- ],
+ ],
[
- "Adrenal Gland mRNA",
+ "Adrenal Gland mRNA",
"Adrenal Gland mRNA"
- ],
+ ],
[
- "Amygdala mRNA",
+ "Amygdala mRNA",
"Amygdala mRNA"
- ],
+ ],
[
- "Anterior Cingulate Cortex mRNA",
+ "Anterior Cingulate Cortex mRNA",
"Anterior Cingulate Cortex mRNA"
- ],
+ ],
[
- "Aorta mRNA",
+ "Aorta mRNA",
"Aorta mRNA"
- ],
+ ],
[
- "Blood, Cells - EBV-Transformed Lymphocytes mRNA",
+ "Blood, Cells - EBV-Transformed Lymphocytes mRNA",
"Blood, Cells - EBV-Transformed Lymphocytes mRNA"
- ],
+ ],
[
- "Breast - Mammary Tissue mRNA",
+ "Breast - Mammary Tissue mRNA",
"Breast - Mammary Tissue mRNA"
- ],
+ ],
[
- "Caudate mRNA",
+ "Caudate mRNA",
"Caudate mRNA"
- ],
+ ],
[
- "Cells - EBV-Transformed Lymphocytes mRNA",
+ "Cells - EBV-Transformed Lymphocytes mRNA",
"Cells - EBV-Transformed Lymphocytes mRNA"
- ],
+ ],
[
- "Cells - Leukemia Cell Line (CML) mRNA",
+ "Cells - Leukemia Cell Line (CML) mRNA",
"Cells - Leukemia Cell Line (CML) mRNA"
- ],
+ ],
[
- "Cells - Transformed Fibroblasts mRNA",
+ "Cells - Transformed Fibroblasts mRNA",
"Cells - Transformed Fibroblasts mRNA"
- ],
+ ],
[
- "Cerebellar Cortex mRNA",
+ "Cerebellar Cortex mRNA",
"Cerebellar Cortex mRNA"
- ],
+ ],
[
- "Cerebellar Hemisphere mRNA",
+ "Cerebellar Hemisphere mRNA",
"Cerebellar Hemisphere mRNA"
- ],
+ ],
[
- "Cerebellum mRNA",
+ "Cerebellum mRNA",
"Cerebellum mRNA"
- ],
+ ],
[
- "Colon - Transverse mRNA",
+ "Colon - Transverse mRNA",
"Colon - Transverse mRNA"
- ],
+ ],
[
- "Coronary mRNA",
+ "Coronary mRNA",
"Coronary mRNA"
- ],
+ ],
[
- "Esophagus - Mucosa mRNA",
+ "Esophagus - Mucosa mRNA",
"Esophagus - Mucosa mRNA"
- ],
+ ],
[
- "Esophagus - Muscularis mRNA",
+ "Esophagus - Muscularis mRNA",
"Esophagus - Muscularis mRNA"
- ],
+ ],
[
- "Fallopian Tube mRNA",
+ "Fallopian Tube mRNA",
"Fallopian Tube mRNA"
- ],
+ ],
[
- "Frontal Cortex mRNA",
+ "Frontal Cortex mRNA",
"Frontal Cortex mRNA"
- ],
+ ],
[
- "Heart - Atrial Appendage mRNA",
+ "Heart - Atrial Appendage mRNA",
"Heart - Atrial Appendage mRNA"
- ],
+ ],
[
- "Heart - Left Ventricle mRNA",
+ "Heart - Left Ventricle mRNA",
"Heart - Left Ventricle mRNA"
- ],
+ ],
[
- "Hippocampus mRNA",
+ "Hippocampus mRNA",
"Hippocampus mRNA"
- ],
+ ],
[
- "Hypothalamus mRNA",
+ "Hypothalamus mRNA",
"Hypothalamus mRNA"
- ],
+ ],
[
- "Kidney mRNA",
+ "Kidney mRNA",
"Kidney mRNA"
- ],
+ ],
[
- "Liver mRNA",
+ "Liver mRNA",
"Liver mRNA"
- ],
+ ],
[
- "Lung mRNA",
+ "Lung mRNA",
"Lung mRNA"
- ],
+ ],
[
- "Muscle mRNA",
+ "Muscle mRNA",
"Muscle mRNA"
- ],
+ ],
[
- "Nerve - Tibial mRNA",
+ "Nerve - Tibial mRNA",
"Nerve - Tibial mRNA"
- ],
+ ],
[
- "Nucleus Accumbens mRNA",
+ "Nucleus Accumbens mRNA",
"Nucleus Accumbens mRNA"
- ],
+ ],
[
- "Ovary mRNA",
+ "Ovary mRNA",
"Ovary mRNA"
- ],
+ ],
[
- "Pancreas mRNA",
+ "Pancreas mRNA",
"Pancreas mRNA"
- ],
+ ],
[
- "Pituitary Gland mRNA",
+ "Pituitary Gland mRNA",
"Pituitary Gland mRNA"
- ],
+ ],
[
- "Prostate mRNA",
+ "Prostate mRNA",
"Prostate mRNA"
- ],
+ ],
[
- "Putamen mRNA",
+ "Putamen mRNA",
"Putamen mRNA"
- ],
+ ],
[
- "Skin - Not Sun Exposed (Suprapubic) mRNA",
+ "Skin - Not Sun Exposed (Suprapubic) mRNA",
"Skin - Not Sun Exposed (Suprapubic) mRNA"
- ],
+ ],
[
- "Skin - Sun Exposed (Lower leg) mRNA",
+ "Skin - Sun Exposed (Lower leg) mRNA",
"Skin - Sun Exposed (Lower leg) mRNA"
- ],
+ ],
[
- "Spinal Cord mRNA",
+ "Spinal Cord mRNA",
"Spinal Cord mRNA"
- ],
+ ],
[
- "Stomach mRNA",
+ "Stomach mRNA",
"Stomach mRNA"
- ],
+ ],
[
- "Substantia Nigra mRNA",
+ "Substantia Nigra mRNA",
"Substantia Nigra mRNA"
- ],
+ ],
[
- "Testis mRNA",
+ "Testis mRNA",
"Testis mRNA"
- ],
+ ],
[
- "Thyroid mRNA",
+ "Thyroid mRNA",
"Thyroid mRNA"
- ],
+ ],
[
- "Tibial mRNA",
+ "Tibial mRNA",
"Tibial mRNA"
- ],
+ ],
[
- "Uterus mRNA",
+ "Uterus mRNA",
"Uterus mRNA"
- ],
+ ],
[
- "Vagina mRNA",
+ "Vagina mRNA",
"Vagina mRNA"
- ],
+ ],
[
- "Whole Blood mRNA",
+ "Whole Blood mRNA",
"Whole Blood mRNA"
]
- ],
+ ],
"GTEx_v5": [
[
- "Adipose tissue, subcutaneous mRNA",
+ "Phenotypes",
+ "Phenotypes"
+ ],
+ [
+ "Adipose tissue, subcutaneous mRNA",
"Adipose tissue, subcutaneous mRNA"
- ],
+ ],
[
- "Adipose tissue, visceral mRNA",
+ "Adipose tissue, visceral mRNA",
"Adipose tissue, visceral mRNA"
- ],
+ ],
[
- "Adrenal Gland mRNA",
+ "Adrenal Gland mRNA",
"Adrenal Gland mRNA"
- ],
+ ],
[
- "Amygdala mRNA",
+ "Amygdala mRNA",
"Amygdala mRNA"
- ],
+ ],
[
- "Anterior Cingulate Cortex mRNA",
+ "Anterior Cingulate Cortex mRNA",
"Anterior Cingulate Cortex mRNA"
- ],
+ ],
[
- "Aorta mRNA",
+ "Aorta mRNA",
"Aorta mRNA"
- ],
+ ],
[
- "Bladder mRNA",
+ "Bladder mRNA",
"Bladder mRNA"
- ],
+ ],
[
- "Bone Marrow mRNA",
+ "Bone Marrow mRNA",
"Bone Marrow mRNA"
- ],
+ ],
[
- "Breast - Mammary Tissue mRNA",
+ "Breast - Mammary Tissue mRNA",
"Breast - Mammary Tissue mRNA"
- ],
+ ],
[
- "Caudate mRNA",
+ "Caudate mRNA",
"Caudate mRNA"
- ],
+ ],
[
- "Cells - EBV-Transformed Lymphocytes mRNA",
+ "Cells - EBV-Transformed Lymphocytes mRNA",
"Cells - EBV-Transformed Lymphocytes mRNA"
- ],
+ ],
[
- "Cells - Transformed Fibroblasts mRNA",
+ "Cells - Transformed Fibroblasts mRNA",
"Cells - Transformed Fibroblasts mRNA"
- ],
+ ],
[
- "Cerebellar Cortex mRNA",
+ "Cerebellar Cortex mRNA",
"Cerebellar Cortex mRNA"
- ],
+ ],
[
- "Cerebellar Hemisphere mRNA",
+ "Cerebellar Hemisphere mRNA",
"Cerebellar Hemisphere mRNA"
- ],
+ ],
[
- "Cerebellum mRNA",
+ "Cerebellum mRNA",
"Cerebellum mRNA"
- ],
+ ],
[
- "Cervix mRNA",
+ "Cervix mRNA",
"Cervix mRNA"
- ],
+ ],
[
- "Colon - Sigmoid mRNA",
+ "Colon - Sigmoid mRNA",
"Colon - Sigmoid mRNA"
- ],
+ ],
[
- "Colon - Transverse mRNA",
+ "Colon - Transverse mRNA",
"Colon - Transverse mRNA"
- ],
+ ],
[
- "Coronary mRNA",
+ "Coronary mRNA",
"Coronary mRNA"
- ],
+ ],
[
- "Esophagus - Gastroesophageal mRNA",
+ "Esophagus - Gastroesophageal mRNA",
"Esophagus - Gastroesophageal mRNA"
- ],
+ ],
[
- "Esophagus - Mucosa mRNA",
+ "Esophagus - Mucosa mRNA",
"Esophagus - Mucosa mRNA"
- ],
+ ],
[
- "Esophagus - Muscularis mRNA",
+ "Esophagus - Muscularis mRNA",
"Esophagus - Muscularis mRNA"
- ],
+ ],
[
- "Fallopian Tube mRNA",
+ "Fallopian Tube mRNA",
"Fallopian Tube mRNA"
- ],
+ ],
[
- "Frontal Cortex mRNA",
+ "Frontal Cortex mRNA",
"Frontal Cortex mRNA"
- ],
+ ],
[
- "Heart - Atrial Appendage mRNA",
+ "Heart - Atrial Appendage mRNA",
"Heart - Atrial Appendage mRNA"
- ],
+ ],
[
- "Heart - Left Ventricle mRNA",
+ "Heart - Left Ventricle mRNA",
"Heart - Left Ventricle mRNA"
- ],
+ ],
[
- "Hippocampus mRNA",
+ "Hippocampus mRNA",
"Hippocampus mRNA"
- ],
+ ],
[
- "Hypothalamus mRNA",
+ "Hypothalamus mRNA",
"Hypothalamus mRNA"
- ],
+ ],
[
- "Kidney mRNA",
+ "Kidney mRNA",
"Kidney mRNA"
- ],
+ ],
[
- "Liver mRNA",
+ "Liver mRNA",
"Liver mRNA"
- ],
+ ],
[
- "Lung mRNA",
+ "Lung mRNA",
"Lung mRNA"
- ],
+ ],
[
- "Muscle mRNA",
+ "Muscle mRNA",
"Muscle mRNA"
- ],
+ ],
[
- "Nerve - Tibial mRNA",
+ "Nerve - Tibial mRNA",
"Nerve - Tibial mRNA"
- ],
+ ],
[
- "Nucleus Accumbens mRNA",
+ "Nucleus Accumbens mRNA",
"Nucleus Accumbens mRNA"
- ],
+ ],
[
- "Ovary mRNA",
+ "Ovary mRNA",
"Ovary mRNA"
- ],
+ ],
[
- "Pancreas mRNA",
+ "Pancreas mRNA",
"Pancreas mRNA"
- ],
+ ],
[
- "Pituitary Gland mRNA",
+ "Pituitary Gland mRNA",
"Pituitary Gland mRNA"
- ],
+ ],
[
- "Prostate mRNA",
+ "Prostate mRNA",
"Prostate mRNA"
- ],
+ ],
[
- "Putamen mRNA",
+ "Putamen mRNA",
"Putamen mRNA"
- ],
+ ],
[
- "Salivary Gland mRNA",
+ "Salivary Gland mRNA",
"Salivary Gland mRNA"
- ],
+ ],
[
- "Skin - Not Sun Exposed (Suprapubic) mRNA",
+ "Skin - Not Sun Exposed (Suprapubic) mRNA",
"Skin - Not Sun Exposed (Suprapubic) mRNA"
- ],
+ ],
[
- "Skin - Sun Exposed (Lower leg) mRNA",
+ "Skin - Sun Exposed (Lower leg) mRNA",
"Skin - Sun Exposed (Lower leg) mRNA"
- ],
+ ],
[
- "Small Intestine - Terminal Ileum mRNA",
+ "Small Intestine - Terminal Ileum mRNA",
"Small Intestine - Terminal Ileum mRNA"
- ],
+ ],
[
- "Spinal Cord mRNA",
+ "Spinal Cord mRNA",
"Spinal Cord mRNA"
- ],
+ ],
[
- "Spleen mRNA",
+ "Spleen mRNA",
"Spleen mRNA"
- ],
+ ],
[
- "Stomach mRNA",
+ "Stomach mRNA",
"Stomach mRNA"
- ],
+ ],
[
- "Substantia Nigra mRNA",
+ "Substantia Nigra mRNA",
"Substantia Nigra mRNA"
- ],
+ ],
[
- "Testis mRNA",
+ "Testis mRNA",
"Testis mRNA"
- ],
+ ],
[
- "Thyroid mRNA",
+ "Thyroid mRNA",
"Thyroid mRNA"
- ],
+ ],
[
- "Tibial mRNA",
+ "Tibial mRNA",
"Tibial mRNA"
- ],
+ ],
[
- "Uterus mRNA",
+ "Uterus mRNA",
"Uterus mRNA"
- ],
+ ],
[
- "Vagina mRNA",
+ "Vagina mRNA",
"Vagina mRNA"
- ],
+ ],
[
- "Whole Blood mRNA",
+ "Whole Blood mRNA",
"Whole Blood mRNA"
]
- ],
+ ],
"HB": [
[
- "Cerebellum mRNA",
+ "Cerebellum mRNA",
"Cerebellum mRNA"
- ],
+ ],
[
- "Prefrontal Cortex mRNA",
+ "Prefrontal Cortex mRNA",
"Prefrontal Cortex mRNA"
- ],
+ ],
[
- "Primary Visual Cortex mRNA",
+ "Primary Visual Cortex mRNA",
"Primary Visual Cortex mRNA"
]
- ],
+ ],
"HCP": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
]
- ],
+ ],
"HLC": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Liver mRNA",
+ "Liver mRNA",
"Liver mRNA"
]
- ],
+ ],
"HLT": [
[
- "Lung mRNA",
+ "Lung mRNA",
"Lung mRNA"
]
- ],
+ ],
"HSB": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Amygdala mRNA",
+ "Amygdala mRNA",
"Amygdala mRNA"
- ],
+ ],
[
- "Cerebellar Cortex mRNA",
+ "Cerebellar Cortex mRNA",
"Cerebellar Cortex mRNA"
- ],
+ ],
[
- "Dorsolateral Prefrontal Cortex mRNA",
+ "Dorsolateral Prefrontal Cortex mRNA",
"Dorsolateral Prefrontal Cortex mRNA"
- ],
+ ],
[
- "Hippocampus mRNA",
+ "Hippocampus mRNA",
"Hippocampus mRNA"
- ],
+ ],
[
- "Inferior Temporal Cortex mRNA",
+ "Inferior Temporal Cortex mRNA",
"Inferior Temporal Cortex mRNA"
- ],
+ ],
[
- "Medial Prefrontal Cortex mRNA",
+ "Medial Prefrontal Cortex mRNA",
"Medial Prefrontal Cortex mRNA"
- ],
+ ],
[
- "Mediodorsal Nucleus of Thalamus mRNA",
+ "Mediodorsal Nucleus of Thalamus mRNA",
"Mediodorsal Nucleus of Thalamus mRNA"
- ],
+ ],
[
- "Orbital Prefrontal Cortex mRNA",
+ "Orbital Prefrontal Cortex mRNA",
"Orbital Prefrontal Cortex mRNA"
- ],
+ ],
[
- "Posterior Inferior Parietal Cortex mRNA",
+ "Posterior Inferior Parietal Cortex mRNA",
"Posterior Inferior Parietal Cortex mRNA"
- ],
+ ],
[
- "Posterior Superior Temporal Cortex mRNA",
+ "Posterior Superior Temporal Cortex mRNA",
"Posterior Superior Temporal Cortex mRNA"
- ],
+ ],
[
- "Primary Auditory (A1) Cortex mRNA",
+ "Primary Auditory (A1) Cortex mRNA",
"Primary Auditory (A1) Cortex mRNA"
- ],
+ ],
[
- "Primary Motor (M1) Cortex mRNA",
+ "Primary Motor (M1) Cortex mRNA",
"Primary Motor (M1) Cortex mRNA"
- ],
+ ],
[
- "Primary Somatosensory (S1) Cortex mRNA",
+ "Primary Somatosensory (S1) Cortex mRNA",
"Primary Somatosensory (S1) Cortex mRNA"
- ],
+ ],
[
- "Primary Visual Cortex mRNA",
+ "Primary Visual Cortex mRNA",
"Primary Visual Cortex mRNA"
- ],
+ ],
[
- "Striatum mRNA",
+ "Striatum mRNA",
"Striatum mRNA"
- ],
+ ],
[
- "Ventrolateral Prefrontal Cortex mRNA",
+ "Ventrolateral Prefrontal Cortex mRNA",
"Ventrolateral Prefrontal Cortex mRNA"
]
- ],
+ ],
+ "Islets-Gerling": [
+ [
+ "Phenotypes",
+ "Phenotypes"
+ ]
+ ],
"TIGEM-Retina-RNA-Seq": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Retina mRNA",
+ "Retina mRNA",
"Retina mRNA"
]
]
- },
+ },
"mouse": {
+ "AIL": [
+ [
+ "Phenotypes",
+ "Phenotypes"
+ ],
+ [
+ "Genotypes",
+ "Genotypes"
+ ],
+ [
+ "Hippocampus mRNA",
+ "Hippocampus mRNA"
+ ],
+ [
+ "Prefrontal Cortex mRNA",
+ "Prefrontal Cortex mRNA"
+ ],
+ [
+ "Striatum mRNA",
+ "Striatum mRNA"
+ ]
+ ],
+ "AIL-LGSM-F34-A": [
+ [
+ "Phenotypes",
+ "Phenotypes"
+ ]
+ ],
+ "AIL-LGSM-F34-F39-43-GBS": [
+ [
+ "Phenotypes",
+ "Phenotypes"
+ ]
+ ],
+ "AIL-LGSM-F34-GBS": [
+ [
+ "Phenotypes",
+ "Phenotypes"
+ ]
+ ],
+ "AIL-LGSM-F39-43-GBS": [
+ [
+ "Phenotypes",
+ "Phenotypes"
+ ]
+ ],
"AKXD": [
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Mammary Tumors mRNA",
+ "Mammary Tumors mRNA",
"Mammary Tumors mRNA"
]
- ],
+ ],
"AXBXA": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Bone Femur mRNA",
+ "Bone Femur mRNA",
"Bone Femur mRNA"
- ],
+ ],
[
- "Eye mRNA",
+ "Eye mRNA",
"Eye mRNA"
- ],
+ ],
[
- "Heart mRNA",
+ "Heart mRNA",
"Heart mRNA"
- ],
+ ],
[
- "Liver mRNA",
+ "Liver mRNA",
"Liver mRNA"
]
- ],
+ ],
"B6BTBRF2": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Liver mRNA",
+ "Liver mRNA",
"Liver mRNA"
]
- ],
+ ],
"B6D2": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
]
- ],
+ ],
"B6D2F2": [
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Brain mRNA",
+ "Brain mRNA",
"Brain mRNA"
]
- ],
+ ],
"B6D2F2-PSU": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
]
- ],
+ ],
"B6D2RI": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Hippocampus mRNA",
+ "Hippocampus mRNA",
"Hippocampus mRNA"
]
- ],
+ ],
"BDF2-1999": [
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Liver mRNA",
+ "Liver mRNA",
"Liver mRNA"
]
- ],
+ ],
"BDF2-2005": [
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Striatum mRNA",
+ "Striatum mRNA",
"Striatum mRNA"
]
- ],
+ ],
"BHF2": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Adipose mRNA",
+ "Adipose mRNA",
"Adipose mRNA"
- ],
+ ],
[
- "Brain mRNA",
+ "Brain mRNA",
"Brain mRNA"
- ],
+ ],
[
- "Liver mRNA",
+ "Liver mRNA",
"Liver mRNA"
]
- ],
+ ],
"BHHBF2": [
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Adipose mRNA",
+ "Adipose mRNA",
"Adipose mRNA"
- ],
+ ],
[
- "Brain mRNA",
+ "Brain mRNA",
"Brain mRNA"
- ],
+ ],
[
- "Liver mRNA",
+ "Liver mRNA",
"Liver mRNA"
- ],
+ ],
[
- "Muscle mRNA",
+ "Muscle mRNA",
"Muscle mRNA"
]
- ],
+ ],
"BXD": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Adipose mRNA",
+ "Adipose mRNA",
"Adipose mRNA"
- ],
+ ],
[
- "Adipose Proteome",
+ "Adipose Proteome",
"Adipose Proteome"
- ],
+ ],
[
- "Adrenal Gland mRNA",
+ "Adrenal Gland mRNA",
"Adrenal Gland mRNA"
- ],
+ ],
[
- "Amygdala mRNA",
+ "Amygdala mRNA",
"Amygdala mRNA"
- ],
+ ],
[
- "Bone Femur mRNA",
+ "Bone Femur mRNA",
"Bone Femur mRNA"
- ],
+ ],
[
- "Brain mRNA",
+ "Brain mRNA",
"Brain mRNA"
- ],
+ ],
[
- "Cartilage mRNA",
+ "Cartilage mRNA",
"Cartilage mRNA"
- ],
+ ],
[
- "Cerebellum mRNA",
+ "Cerebellum mRNA",
"Cerebellum mRNA"
- ],
+ ],
[
- "Eye mRNA",
+ "Eye mRNA",
"Eye mRNA"
- ],
+ ],
[
- "Fecal Metabolome",
+ "Fecal Metabolome",
"Fecal Metabolome"
- ],
+ ],
[
- "Gastrointestinal mRNA",
+ "Gastrointestinal mRNA",
"Gastrointestinal mRNA"
- ],
+ ],
+ [
+ "Heart mRNA",
+ "Heart mRNA"
+ ],
[
- "Hematopoietic Cells mRNA",
+ "Hematopoietic Cells mRNA",
"Hematopoietic Cells mRNA"
- ],
+ ],
[
- "Hippocampal Precursor Cells mRNA",
+ "Hippocampal Precursor Cells mRNA",
"Hippocampal Precursor Cells mRNA"
- ],
+ ],
[
- "Hippocampus mRNA",
+ "Hippocampus mRNA",
"Hippocampus mRNA"
- ],
+ ],
[
- "Hypothalamus mRNA",
+ "Hypothalamus mRNA",
"Hypothalamus mRNA"
- ],
+ ],
[
- "Kidney mRNA",
+ "Kidney mRNA",
"Kidney mRNA"
- ],
+ ],
[
- "Liver Metabolome",
+ "Liver Metabolome",
"Liver Metabolome"
- ],
+ ],
[
- "Liver mRNA",
+ "Liver mRNA",
"Liver mRNA"
- ],
+ ],
[
- "Liver Proteome",
+ "Liver Proteome",
"Liver Proteome"
- ],
+ ],
[
- "Lung mRNA",
+ "Lung mRNA",
"Lung mRNA"
- ],
+ ],
[
- "Midbrain mRNA",
+ "Midbrain mRNA",
"Midbrain mRNA"
- ],
+ ],
[
- "Muscle mRNA",
+ "Muscle mRNA",
"Muscle mRNA"
- ],
+ ],
[
- "Neocortex mRNA",
+ "Neocortex mRNA",
"Neocortex mRNA"
- ],
+ ],
[
- "Nucleus Accumbens mRNA",
+ "Nucleus Accumbens mRNA",
"Nucleus Accumbens mRNA"
- ],
+ ],
[
- "Pituitary Gland mRNA",
+ "Pituitary Gland mRNA",
"Pituitary Gland mRNA"
- ],
+ ],
[
- "Prefrontal Cortex mRNA",
+ "Prefrontal Cortex mRNA",
"Prefrontal Cortex mRNA"
- ],
+ ],
[
- "Retina mRNA",
+ "Retina mRNA",
"Retina mRNA"
- ],
+ ],
[
- "Spleen mRNA",
+ "Spleen mRNA",
"Spleen mRNA"
- ],
+ ],
[
- "Striatum mRNA",
+ "Striatum mRNA",
"Striatum mRNA"
- ],
+ ],
[
- "T Cell (helper) mRNA",
+ "T Cell (helper) mRNA",
"T Cell (helper) mRNA"
- ],
+ ],
[
- "T Cell (regulatory) mRNA",
+ "T Cell (regulatory) mRNA",
"T Cell (regulatory) mRNA"
- ],
+ ],
[
- "Ventral Tegmental Area mRNA",
+ "Ventral Tegmental Area mRNA",
"Ventral Tegmental Area mRNA"
]
- ],
+ ],
"BXD-Bone": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
]
- ],
+ ],
+ "BXD-Harvested": [
+ [
+ "Phenotypes",
+ "Phenotypes"
+ ],
+ [
+ "Genotypes",
+ "Genotypes"
+ ],
+ [
+ "Hippocampus mRNA",
+ "Hippocampus mRNA"
+ ],
+ [
+ "Liver mRNA",
+ "Liver mRNA"
+ ]
+ ],
+ "BXD300": [
+ [
+ "Phenotypes",
+ "Phenotypes"
+ ],
+ [
+ "Genotypes",
+ "Genotypes"
+ ],
+ [
+ "Liver mRNA",
+ "Liver mRNA"
+ ]
+ ],
"BXH": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Bone Femur mRNA",
+ "Bone Femur mRNA",
"Bone Femur mRNA"
- ],
+ ],
[
- "Cartilage mRNA",
+ "Cartilage mRNA",
"Cartilage mRNA"
- ],
+ ],
[
- "Liver mRNA",
+ "Liver mRNA",
"Liver mRNA"
]
- ],
+ ],
"C57BL-6JxC57BL-6NJF2": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
]
- ],
+ ],
"CFW": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Hippocampus mRNA",
+ "Hippocampus mRNA",
"Hippocampus mRNA"
- ],
+ ],
[
- "Prefrontal Cortex mRNA",
+ "Prefrontal Cortex mRNA",
"Prefrontal Cortex mRNA"
- ],
+ ],
[
- "Striatum mRNA",
+ "Striatum mRNA",
"Striatum mRNA"
]
- ],
+ ],
"CIE-INIA": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "LCM Brain Regions mRNA",
+ "LCM Brain Regions mRNA",
"LCM Brain Regions mRNA"
]
- ],
+ ],
+ "CIE-RMA": [
+ [
+ "Phenotypes",
+ "Phenotypes"
+ ],
+ [
+ "Hippocampus mRNA",
+ "Hippocampus mRNA"
+ ],
+ [
+ "Midbrain mRNA",
+ "Midbrain mRNA"
+ ]
+ ],
"CMS": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
]
- ],
+ ],
"CTB6F2": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Adipose mRNA",
+ "Adipose mRNA",
"Adipose mRNA"
- ],
+ ],
[
- "Brain mRNA",
+ "Brain mRNA",
"Brain mRNA"
- ],
+ ],
[
- "Liver mRNA",
+ "Liver mRNA",
"Liver mRNA"
- ],
+ ],
[
- "Muscle mRNA",
+ "Muscle mRNA",
"Muscle mRNA"
]
- ],
+ ],
"CXB": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Hippocampus mRNA",
+ "Heart mRNA",
+ "Heart mRNA"
+ ],
+ [
+ "Hippocampus mRNA",
"Hippocampus mRNA"
- ],
+ ],
+ [
+ "Liver mRNA",
+ "Liver mRNA"
+ ],
[
- "Spleen mRNA",
+ "Spleen mRNA",
"Spleen mRNA"
]
- ],
+ ],
+ "D2GM": [
+ [
+ "Phenotypes",
+ "Phenotypes"
+ ],
+ [
+ "Retina mRNA",
+ "Retina mRNA"
+ ]
+ ],
"HS": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Hippocampus mRNA",
+ "Hippocampus mRNA",
"Hippocampus mRNA"
- ],
+ ],
[
- "Liver mRNA",
+ "Liver mRNA",
"Liver mRNA"
- ],
+ ],
[
- "Lung mRNA",
+ "Lung mRNA",
"Lung mRNA"
]
- ],
+ ],
"HS-CC": [
[
- "Striatum mRNA",
+ "Striatum mRNA",
"Striatum mRNA"
]
- ],
+ ],
+ "LGSM-AIG34_50-56-GBS": [
+ [
+ "Phenotypes",
+ "Phenotypes"
+ ]
+ ],
"LXS": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Hippocampus mRNA",
+ "Hippocampus mRNA",
"Hippocampus mRNA"
- ],
+ ],
[
- "Prefrontal Cortex mRNA",
+ "Prefrontal Cortex mRNA",
"Prefrontal Cortex mRNA"
]
- ],
+ ],
"Linsenbardt-Boehm": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
]
- ],
+ ],
"MDP": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Bone Femur mRNA",
+ "Bone Femur mRNA",
"Bone Femur mRNA"
- ],
+ ],
[
- "Dorsal Root Ganglia mRNA",
+ "Dorsal Root Ganglia mRNA",
"Dorsal Root Ganglia mRNA"
- ],
+ ],
[
- "Hippocampus mRNA",
+ "Hippocampus mRNA",
"Hippocampus mRNA"
- ],
+ ],
[
- "Liver mRNA",
+ "Liver mRNA",
"Liver mRNA"
- ],
+ ],
[
- "Spleen mRNA",
+ "Spleen mRNA",
"Spleen mRNA"
]
- ],
+ ],
"NZBXFVB-N2": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Mammary Tumors mRNA",
+ "Mammary Tumors mRNA",
"Mammary Tumors mRNA"
]
- ],
+ ],
+ "Retina-RGC-Rheaume": [
+ [
+ "Phenotypes",
+ "Phenotypes"
+ ],
+ [
+ "Retina Single-cell RNA-Seq",
+ "Retina Single-cell RNA-Seq"
+ ]
+ ],
"SOTNOT-OHSU": [
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
]
- ],
- "Scripps-2013": []
- },
+ ]
+ },
"poplar": {
"Poplar": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
]
]
- },
+ },
"rat": {
+ "HRDP": [
+ [
+ "Phenotypes",
+ "Phenotypes"
+ ],
+ [
+ "Genotypes",
+ "Genotypes"
+ ]
+ ],
"HSNIH-Palmer": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
+ ],
+ [
+ "Infralimbic Cortex mRNA",
+ "Infralimbic Cortex mRNA"
+ ],
+ [
+ "Lateral Habenula mRNA",
+ "Lateral Habenula mRNA"
+ ],
+ [
+ "Nucleus Accumbens mRNA",
+ "Nucleus Accumbens mRNA"
+ ],
+ [
+ "Orbitofrontal Cortex mRNA",
+ "Orbitofrontal Cortex mRNA"
+ ],
+ [
+ "Prelimbic Cortex mRNA",
+ "Prelimbic Cortex mRNA"
]
- ],
+ ],
"HSNIH-RGSMC": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
]
- ],
+ ],
"HXBBXH": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
- ],
+ ],
[
- "Adipose mRNA",
+ "Adipose mRNA",
"Adipose mRNA"
- ],
+ ],
[
- "Adrenal Gland mRNA",
+ "Adrenal Gland mRNA",
"Adrenal Gland mRNA"
- ],
+ ],
[
- "Heart mRNA",
+ "Heart mRNA",
"Heart mRNA"
- ],
+ ],
[
- "Hippocampus mRNA",
+ "Hippocampus mRNA",
"Hippocampus mRNA"
- ],
+ ],
[
- "Kidney mRNA",
+ "Kidney mRNA",
"Kidney mRNA"
- ],
+ ],
[
- "Liver mRNA",
+ "Liver mRNA",
"Liver mRNA"
- ],
+ ],
[
- "Peritoneal Fat mRNA",
+ "Peritoneal Fat mRNA",
"Peritoneal Fat mRNA"
]
- ],
+ ],
"SRxSHRSPF2": [
[
- "Eye mRNA",
+ "Eye mRNA",
"Eye mRNA"
]
]
- },
+ },
"soybean": {
"J12XJ58F11": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
- ],
+ ],
[
- "Genotypes",
+ "Genotypes",
"Genotypes"
]
- ],
+ ],
"J12XJ58F2": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
]
]
- },
+ },
"tomato": {
"LXP": [
[
- "Phenotypes",
+ "Phenotypes",
"Phenotypes"
]
]
diff --git a/wqflask/wqflask/static/new/javascript/dataset_select_menu_orig.js b/wqflask/wqflask/static/new/javascript/dataset_select_menu_orig.js
index fd96eb78..fad600d2 100644
--- a/wqflask/wqflask/static/new/javascript/dataset_select_menu_orig.js
+++ b/wqflask/wqflask/static/new/javascript/dataset_select_menu_orig.js
@@ -1,62 +1,100 @@
-// Generated by CoffeeScript 1.8.0
-$(function() {
- var apply_default, check_search_term, dataset_info, group_info, make_default, open_window, populate_dataset, populate_group, populate_species, populate_type, process_json, redo_dropdown;
- process_json = function(data) {
- window.jdata = data;
- populate_species();
- if ($('#type').length > 0) { //This is to determine if it's the index page or the submit_trait page (which only has species and group selection and no make default option)
- return apply_default();
+var apply_default, check_search_term, dataset_info, group_info, make_default, open_window, populate_dataset, populate_group, populate_species, populate_type, process_json, redo_dropdown;
+process_json = function(data) {
+ window.jdata = data;
+ populate_species();
+ if ($('#type').length > 0) { //This is to determine if it's the index page or the submit_trait page (which only has species and group selection and no make default option)
+ return apply_default();
+ }
+};
+$.ajax('/api/v_pre1/gen_dropdown', {
+ dataType: 'json',
+ success: process_json
+});
+
+populate_species = function() {
+ var species_list;
+ species_list = this.jdata.species;
+ redo_dropdown($('#species'), species_list);
+ return populate_group();
+};
+window.populate_species = populate_species;
+populate_group = function() {
+ var group_list, species;
+ console.log("in populate group");
+ species = $('#species').val();
+ group_list = this.jdata.groups[species];
+ for (_i = 0, _len = group_list.length; _i < (_len - 1); _i++) {
+ if (group_list[_i][0] == "BXD300"){
+ group_list.splice(_i, 1)
+ }
+ }
+ redo_dropdown($('#group'), group_list);
+ if ($('#type').length > 0) { //This is to determine if it's the index page or the submit_trait page (which only has species and group selection and no make default option)
+ return populate_type();
+ }
+};
+window.populate_group = populate_group;
+populate_type = function() {
+ var group, species, type_list;
+ console.log("in populate type");
+ species = $('#species').val();
+ group = $('#group').val();
+ type_list = this.jdata.types[species][group];
+ redo_dropdown($('#type'), type_list);
+ return populate_dataset();
+};
+window.populate_type = populate_type;
+populate_dataset = function() {
+ var dataset_list, group, species, type;
+ console.log("in populate dataset");
+ species = $('#species').val();
+ group = $('#group').val();
+ type = $('#type').val();
+ console.log("sgt:", species, group, type);
+ dataset_list = this.jdata.datasets[species][group][type];
+ console.log("pop_dataset:", dataset_list);
+ return redo_dropdown($('#dataset'), dataset_list);
+};
+window.populate_dataset = populate_dataset;
+redo_dropdown = function(dropdown, items) {
+ var item, _i, _len, _results;
+ console.log("in redo:", dropdown, items);
+ dropdown.empty();
+ _results = [];
+
+ if (dropdown.attr('id') == "group"){
+ group_family_list = [];
+ for (_i = 0, _len = items.length; _i < _len; _i++) {
+ item = items[_i];
+ group_family = item[2].toString().split(":")[1]
+ group_family_list.push([item[0], item[1], group_family])
}
- };
- $.ajax('/static/new/javascript/dataset_menu_structure.json', {
- dataType: 'json',
- success: process_json
- });
- populate_species = function() {
- var species_list;
- species_list = this.jdata.species;
- redo_dropdown($('#species'), species_list);
- return populate_group();
- };
- window.populate_species = populate_species;
- populate_group = function() {
- var group_list, species;
- console.log("in populate group");
- species = $('#species').val();
- group_list = this.jdata.groups[species];
- redo_dropdown($('#group'), group_list);
- if ($('#type').length > 0) { //This is to determine if it's the index page or the submit_trait page (which only has species and group selection and no make default option)
- return populate_type();
+
+ current_family = ""
+ this_opt_group = null
+ for (_i = 0, _len = group_family_list.length; _i < _len; _i++) {
+ item = group_family_list[_i];
+ console.log("THE ITEM:", item)
+ if (item[2] != "None" && current_family == ""){
+ current_family = item[2]
+ this_opt_group = $("<optgroup label=\"" + item[2] + "\">")
+ this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ } else if (current_family != "" && item[2] == current_family){
+ this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ } else if (current_family != "" && item[2] != current_family && item[2] != "None"){
+ current_family = item[2]
+ _results.push(dropdown.append(this_opt_group))
+ this_opt_group = $("<optgroup label=\"" + current_family + "\">")
+ this_opt_group.append($("<option />").val(item[0]).text(item[1]));
+ } else if (current_family != "" && this_opt_group != null && item[2] == "None"){
+ _results.push(dropdown.append(this_opt_group))
+ current_family = ""
+ _results.push(dropdown.append($("<option />").val(item[0]).text(item[1])));
+ } else {
+ _results.push(dropdown.append($("<option />").val(item[0]).text(item[1])));
+ }
}
- };
- window.populate_group = populate_group;
- populate_type = function() {
- var group, species, type_list;
- console.log("in populate type");
- species = $('#species').val();
- group = $('#group').val();
- type_list = this.jdata.types[species][group];
- redo_dropdown($('#type'), type_list);
- return populate_dataset();
- };
- window.populate_type = populate_type;
- populate_dataset = function() {
- var dataset_list, group, species, type;
- console.log("in populate dataset");
- species = $('#species').val();
- group = $('#group').val();
- type = $('#type').val();
- console.log("sgt:", species, group, type);
- dataset_list = this.jdata.datasets[species][group][type];
- console.log("pop_dataset:", dataset_list);
- return redo_dropdown($('#dataset'), dataset_list);
- };
- window.populate_dataset = populate_dataset;
- redo_dropdown = function(dropdown, items) {
- var item, _i, _len, _results;
- console.log("in redo:", dropdown, items);
- dropdown.empty();
- _results = [];
+ } else {
for (_i = 0, _len = items.length; _i < _len; _i++) {
item = items[_i];
if (item.length > 2){
@@ -65,101 +103,107 @@ $(function() {
_results.push(dropdown.append($("<option />").val(item[0]).text(item[1])));
}
}
- return _results;
- };
- $('#species').change((function(_this) {
- return function() {
- return populate_group();
- };
- })(this));
- $('#group').change((function(_this) {
- return function() {
- if ($('#type').length > 0) { //This is to determine if it's the index page or the submit_trait page (which only has species and group selection and no make default option)
- return populate_type();
- }
- else {
- return false
- }
- };
- })(this));
- $('#type').change((function(_this) {
- return function() {
- return populate_dataset();
- };
- })(this));
- open_window = function(url, name) {
- var options;
- options = "menubar=1,toolbar=1,location=1,resizable=1,status=1,scrollbars=1,directories=1,width=900";
- return open(url, name, options).focus();
- };
- group_info = function() {
- var group, species, url;
- species = $('#species').val();
- group = $('#group').val();
- url = "/" + species + "Cross.html#" + group;
- return open_window(url, "Group Info");
- };
- $('#group_info').click(group_info);
- dataset_info = function() {
- var dataset, url;
- accession_id = $('#dataset option:selected').data("id");
- url = "http://genenetwork.org/webqtl/main.py?FormID=sharinginfo&GN_AccessionId=" + accession_id;
- return open_window(url, "Dataset Info");
- };
- $('#dataset_info').click(dataset_info);
- make_default = function() {
- var holder, item, jholder, _i, _len, _ref;
- alert("The current settings are now your default.")
- holder = {};
- _ref = ['species', 'group', 'type', 'dataset'];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- item = _ref[_i];
- holder[item] = $("#" + item).val();
- }
- jholder = JSON.stringify(holder);
- return $.cookie('search_defaults', jholder, {
- expires: 365
- });
+ }
+ return _results;
+};
+$('#species').change((function(_this) {
+ return function() {
+ return populate_group();
};
- apply_default = function() {
- var defaults, item, populate_function, _i, _len, _ref, _results;
- defaults = $.cookie('search_defaults');
- if (defaults) {
- defaults = $.parseJSON(defaults);
- } else {
- defaults = {
- species: "mouse",
- group: "BXD",
- type: "Hippocampus mRNA",
- dataset: "HC_M2_0606_P"
- };
+})(this));
+$('#group').change((function(_this) {
+ return function() {
+ if ($('#type').length > 0) { //This is to determine if it's the index page or the submit_trait page (which only has species and group selection and no make default option)
+ return populate_type();
}
- _ref = [['species', 'group'], ['group', 'type'], ['type', 'dataset'], ['dataset', null]];
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- item = _ref[_i];
- $("#" + item[0]).val(defaults[item[0]]);
- if (item[1]) {
- populate_function = "populate_" + item[1];
- console.log("Calling:", populate_function);
- _results.push(window[populate_function]());
- } else {
- _results.push(void 0);
- }
+ else {
+ return false
}
- return _results;
};
- check_search_term = function() {
- var or_search_term, and_search_term;
- or_search_term = $('#or_search').val();
- and_search_term = $('#and_search').val();
- console.log("or_search_term:", or_search_term);
- console.log("and_search_term:", and_search_term);
- if (or_search_term === "" && and_search_term === "") {
- alert("Please enter one or more search terms or search equations.");
- return false;
- }
+})(this));
+$('#type').change((function(_this) {
+ return function() {
+ return populate_dataset();
};
- $("#make_default").click(make_default);
- return $("#btsearch").click(check_search_term);
-});
+})(this));
+open_window = function(url, name) {
+ var options;
+ options = "menubar=yes,toolbar=yes,titlebar=yes,location=yes,resizable=yes,status=yes,scrollbars=yes,directories=yes,width=900";
+ return open(url, name, options).focus();
+};
+group_info = function() {
+ var group, species, url;
+ species = $('#species').val();
+ group = $('#group').val();
+ url = "/" + species + "Cross.html#" + group;
+ return open_window(url, "Group Info");
+};
+$('#group_info').click(group_info);
+dataset_info = function() {
+ var dataset, url;
+ accession_id = $('#dataset option:selected').data("id");
+ name = $('#dataset option:selected').val();
+ if (accession_id != "None") {
+ url = "http://genenetwork.org/webqtl/main.py?FormID=sharinginfo&GN_AccessionId=" + accession_id + "&InfoPageName=" + name;
+ } else {
+ url = "http://genenetwork.org/webqtl/main.py?FormID=sharinginfo&InfoPageName=" + name;
+ }
+ return open_window(url, "Dataset Info");
+};
+$('#dataset_info').click(dataset_info);
+make_default = function() {
+ var holder, item, jholder, _i, _len, _ref;
+ alert("The current settings are now your default.")
+ holder = {};
+ _ref = ['species', 'group', 'type', 'dataset'];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ item = _ref[_i];
+ holder[item] = $("#" + item).val();
+ }
+ jholder = JSON.stringify(holder);
+ return $.cookie('search_defaults', jholder, {
+ expires: 365
+ });
+};
+apply_default = function() {
+ var defaults, item, populate_function, _i, _len, _ref, _results;
+ defaults = $.cookie('search_defaults');
+ if (defaults) {
+ defaults = $.parseJSON(defaults);
+ } else {
+ defaults = {
+ species: "mouse",
+ group: "BXD",
+ type: "Hippocampus mRNA",
+ dataset: "HC_M2_0606_P"
+ };
+ }
+
+ _ref = [['species', 'group'], ['group', 'type'], ['type', 'dataset'], ['dataset', null]];
+ _results = [];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ item = _ref[_i];
+ $("#" + item[0]).val(defaults[item[0]]);
+ if (item[1]) {
+ populate_function = "populate_" + item[1];
+ console.log("Calling:", populate_function);
+ _results.push(window[populate_function]());
+ } else {
+ _results.push(void 0);
+ }
+ }
+ return _results;
+};
+check_search_term = function() {
+ var or_search_term, and_search_term;
+ or_search_term = $('#or_search').val();
+ and_search_term = $('#and_search').val();
+ console.log("or_search_term:", or_search_term);
+ console.log("and_search_term:", and_search_term);
+ if (or_search_term === "" && and_search_term === "") {
+ alert("Please enter one or more search terms or search equations.");
+ return false;
+ }
+};
+$("#make_default").click(make_default);
+$("#btsearch").click(check_search_term);
diff --git a/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.coffee b/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.coffee
deleted file mode 100644
index 057c4ee2..00000000
--- a/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.coffee
+++ /dev/null
@@ -1,37 +0,0 @@
-# illustration of use of the scatterplot function
-
-h = 400
-w = 500
-margin = {left:60, top:40, right:40, bottom: 40, inner:5}
-halfh = (h+margin.top+margin.bottom)
-totalh = halfh*2
-halfw = (w+margin.left+margin.right)
-totalw = halfw*2
-
-# Example 1: simplest use
-#d3.json "data.json", (data) ->
-mychart = scatterplot().xvar(0)
- .yvar(1)
- .xlab(js_data.trait_1)
- .ylab(js_data.trait_2)
- .height(h)
- .width(w)
- .margin(margin)
-
-data = js_data.data
-indID = js_data.indIDs
-slope = js_data.slope
-intercept = js_data.intercept
-
-console.log("THE DATA IS:", data)
-
-d3.select("div#chart1")
- .datum({data:data, indID:indID, slope:slope, intercept:intercept})
- .call(mychart)
-
-# animate points
-mychart.pointsSelect()
- .on "mouseover", (d) ->
- d3.select(this).attr("r", mychart.pointsize()*3)
- .on "mouseout", (d) ->
- d3.select(this).attr("r", mychart.pointsize()) \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js b/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js
index 28534709..a0a88773 100644
--- a/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js
+++ b/wqflask/wqflask/static/new/javascript/draw_corr_scatterplot.js
@@ -1,47 +1,906 @@
-// Generated by CoffeeScript 1.8.0
-var data, h, halfh, halfw, indID, intercept, margin, mychart, slope, totalh, totalw, w;
+var chart;
+var srchart;
-h = 600;
+x_val_range = js_data.x_range[1] - js_data.x_range[0]
+y_val_range = js_data.y_range[1] - js_data.y_range[0]
-w = 800;
+if (x_val_range >= 2 && x_val_range < 9){
+ x_tick_digits = '.1f'
+} else if (x_val_range >= 0.8 && x_val_range < 2) {
+ x_tick_digits = '.2f'
+} else if (x_val_range < 0.8) {
+ x_tick_digits = '.3f'
+} else {
+ x_tick_digits = 'f'
+}
-margin = {
- left: 80,
- top: 60,
- right: 40,
- bottom: 40,
- inner: 30
-};
+if (y_val_range >= 2 && y_val_range < 8){
+ y_tick_digits = '.1f'
+} else if (y_val_range >= 0.8 && y_val_range < 2) {
+ y_tick_digits = '.2f'
+} else if (y_val_range < 0.8) {
+ y_tick_digits = '.3f'
+} else {
+ y_tick_digits = 'f'
+}
+
+console.log("y_digits:", y_tick_digits)
+
+var layout = {
+ height: 700,
+ width: 800,
+ margin: {
+ l: 70,
+ r: 30,
+ t: 90,
+ b: 50
+ },
+ xaxis: {
+ range: [js_data.x_range[0], js_data.x_range[1]],
+ title: js_data.trait_1,
+ zeroline: false,
+ visible: true,
+ linecolor: 'black',
+ linewidth: 1,
+ ticklen: 4,
+ tickformat: x_tick_digits
+ },
+ yaxis: {
+ range: [js_data.y_range[0], js_data.y_range[1]],
+ title: js_data.trait_2,
+ zeroline: false,
+ visible: true,
+ linecolor: 'black',
+ linewidth: 1,
+ ticklen: 4,
+ tickformat: y_tick_digits,
+ automargin: true
+ },
+ hovermode: "closest",
+ showlegend: false,
+ annotations:[{
+ xref: 'paper',
+ yref: 'paper',
+ x: 1,
+ xanchor: 'right',
+ y: 1.05,
+ yanchor: 'top',
+ text: '<i>r</i> = ' + js_data.r_value.toFixed(3) + ', <i>p</i> = ' + js_data.p_value.toExponential(3) + ', <i>n</i> = ' + js_data.num_overlap,
+ showarrow: false,
+ font: {
+ size: 14
+ },
+ }
+ ]
+}
+
+var sr_layout = {
+ height: 700,
+ width: 800,
+ margin: {
+ l: 60,
+ r: 30,
+ t: 80,
+ b: 50
+ },
+ xaxis: {
+ range: [js_data.sr_range[0], js_data.sr_range[1]],
+ title: js_data.trait_1,
+ zeroline: false,
+ visible: true,
+ linecolor: 'black',
+ linewidth: 1,
+ },
+ yaxis: {
+ range: [js_data.sr_range[0], js_data.sr_range[1]],
+ title: js_data.trait_2,
+ zeroline: false,
+ visible: true,
+ linecolor: 'black',
+ linewidth: 1,
+ },
+ hovermode: "closest",
+ showlegend: false,
+ annotations:[{
+ xref: 'paper',
+ yref: 'paper',
+ x: 1,
+ xanchor: 'right',
+ y: 1.05,
+ yanchor: 'top',
+ text: '<i>r</i> = ' + js_data.srr_value.toFixed(3) + ', <i>P</i> = ' + js_data.srp_value.toExponential(3) + ', <i>n</i> = ' + js_data.num_overlap,
+ showarrow: false,
+ font: {
+ size: 14
+ },
+ }
+]
+}
+
+var modebar_options = {
+ modeBarButtonsToAdd:[{
+ name: 'Export as SVG',
+ icon: Plotly.Icons.camera,
+ click: function(gd) {
+ Plotly.downloadImage(gd, {format: 'svg'})
+ }
+ },
+ {
+ name: 'Export as JPEG',
+ icon: Plotly.Icons.disk,
+ click: function(gd) {
+ Plotly.downloadImage(gd, {format: 'jpeg'})
+ }
+ }],
+ modeBarButtonsToRemove:['toImage', 'sendDataToCloud', 'hoverClosest', 'hoverCompare', 'hoverClosestCartesian', 'hoverCompareCartesian', 'lasso2d', 'toggleSpikelines'],
+ displaylogo: false
+}
+
+cofactor1_dict = {}
+ranked_cofactor1_dict = {}
+//cofactor1_values = []
+//ranked_cofactor1_values = []
+cofactor2_dict = {}
+ranked_cofactor2_dict = {}
+//cofactor2_values = []
+//ranked_cofactor2_values = []
+cofactor3_dict = {}
+ranked_cofactor3_dict = {}
+
+function drawg() {
+ x_values = []
+ y_values = []
+ sample_names = []
+ for (j = 0; j < js_data.data[0].length; j++) {
+ x_values.push(js_data.data[0][j])
+ y_values.push(js_data.data[1][j])
+ sample_names.push(js_data.indIDs[j])
+ }
+
+ var trace1 = {
+ x: x_values,
+ y: y_values,
+ mode: 'markers',
+ text: sample_names,
+ hoverinfo: "text+x+y"
+ }
+
+ var trace2 = {
+ x: [js_data.intercept_coords[0][0], js_data.intercept_coords[1][0]],
+ y: [js_data.intercept_coords[0][1], js_data.intercept_coords[1][1]],
+ mode: 'lines',
+ line: {
+ color: 'rgb(250, 60, 73)'
+ }
+ }
+
+ Plotly.newPlot('scatterplot2', [trace2, trace1], layout, modebar_options)
+
+}
+
+function srdrawg() {
+ x_values = []
+ y_values = []
+ sample_names = []
+ for (j = 0; j < js_data.rdata[0].length; j++) {
+ x_values.push(js_data.rdata[0][j])
+ y_values.push(js_data.rdata[1][j])
+ sample_names.push(js_data.indIDs[j])
+ }
+
+ var trace1 = {
+ x: x_values,
+ y: y_values,
+ mode: 'markers',
+ text: sample_names,
+ hoverinfo: "text+x+y"
+ }
+
+ Plotly.newPlot('srscatterplot2', [trace1], sr_layout, modebar_options)
+}
+
+function getdata() {
+ var data = [];
+ data.push({
+ values: [],
+ slope: js_data.slope,
+ intercept: js_data.intercept
+ });
+
+ sizemin = 8;
+ sizemax = 30;
+
+ samples1 = [];
+ samples2 = [];
+ samples3 = [];
+
+ if ($('input[name=cofactor1_vals]').val()){
+ vals1 = []
+ val_sample_dict = {}
+ val_sample_pairs = $('input[name=cofactor1_vals]').val().split(",")
+ for (i=0; i < val_sample_pairs.length; i++) {
+ samples1.push(val_sample_pairs[i].split(":")[0])
+ vals1.push(parseFloat(val_sample_pairs[i].split(":")[1]))
+ val_sample_dict[val_sample_pairs[i].split(":")[0]] = parseFloat(val_sample_pairs[i].split(":")[1])
+ }
+ datamin1 = d3.min(vals1);
+ datamax1 = d3.max(vals1);
+
+ cofactor1_dict = val_sample_dict
+ cofactor1_values = vals1
+ }
+
+ if ($('input[name=cofactor2_vals]').val()){
+ vals2 = [];
+ val_sample_dict = {}
+ val_sample_pairs = $('input[name=cofactor2_vals]').val().split(",")
+ for (i=0; i < val_sample_pairs.length; i++) {
+ samples2.push(val_sample_pairs[i].split(":")[0])
+ vals2.push(parseFloat(val_sample_pairs[i].split(":")[1]))
+ val_sample_dict[val_sample_pairs[i].split(":")[0]] = val_sample_pairs[i].split(":")[1]
+ }
+ datamin2 = d3.min(vals2);
+ datamax2 = d3.max(vals2);
+
+ cofactor2_dict = val_sample_dict
+ cofactor2_values = vals2
+ }
+
+ if ($('input[name=cofactor3_vals]').val()){
+ vals3 = [];
+ val_sample_dict = {}
+ val_sample_pairs = $('input[name=cofactor3_vals]').val().split(",")
+ for (i=0; i < val_sample_pairs.length; i++) {
+ samples3.push(val_sample_pairs[i].split(":")[0])
+ vals3.push(parseFloat(val_sample_pairs[i].split(":")[1]))
+ val_sample_dict[val_sample_pairs[i].split(":")[0]] = val_sample_pairs[i].split(":")[1]
+ }
+
+ datamin3 = d3.min(vals3);
+ datamax3 = d3.max(vals3);
+
+ cofactor3_dict = val_sample_dict
+ cofactor3_values = vals3
+ }
+
+ x_values = []
+ y_values = []
+ sample_names = []
+ sizes = []
+
+ size_cofactor_vals = []
+ if ($('#cofactor1_type option:selected').val() == "size" && $('input[name=cofactor1_vals]').val()){
+ size_cofactor_vals = cofactor1_values
+ cofactor_samples = samples1
+ datamin = datamin1
+ datamax = datamax1
+ } else if ($('#cofactor2_type option:selected').val() == "size" && $('input[name=cofactor2_vals]').val()) {
+ size_cofactor_vals = cofactor2_values
+ cofactor_samples = samples2
+ datamin = datamin2
+ datamax = datamax2
+ } else if ($('#cofactor3_type option:selected').val() == "size" && $('input[name=cofactor3_vals]').val()) {
+ size_cofactor_vals = cofactor3_values
+ cofactor_samples = samples3
+ datamin = datamin3
+ datamax = datamax3
+ }
+
+ unique_vals = []
+ symbol_cofactor_vals = []
+ if ($('#cofactor1_type option:selected').val() == "symbol" && $('input[name=cofactor1_vals]').val()){
+ symbol_cofactor_vals = cofactor1_values
+ cofactor_samples = samples1
+ } else if ($('#cofactor2_type option:selected').val() == "symbol" && $('input[name=cofactor2_vals]').val()) {
+ symbol_cofactor_vals = cofactor2_values
+ cofactor_samples = samples2
+ } else if ($('#cofactor3_type option:selected').val() == "symbol" && $('input[name=cofactor3_vals]').val()) {
+ symbol_cofactor_vals = cofactor3_values
+ cofactor_samples = samples3
+ }
+
+ symbol_list = []
+ if (symbol_cofactor_vals.length > 0) {
+ unique_vals = [...new Set(symbol_cofactor_vals)]
+ for (i=0; i<symbol_cofactor_vals.length; i++){
+ val_pos = unique_vals.indexOf(symbol_cofactor_vals[i])
+ if (val_pos != "-1") {
+ symbol_list.push(val_pos)
+ } else {
+ symbol_list.push(0)
+ }
+ }
+ }
+
+ //This is needed to calculate samples shared by cofactors
+ cofactor_samples_array = []
+ if (samples1.length > 0){
+ cofactor_samples_array.push(samples1)
+ }
+ if (samples2.length > 0){
+ cofactor_samples_array.push(samples2)
+ }
+ if (samples3.length > 0){
+ cofactor_samples_array.push(samples3)
+ }
+ if (cofactor_samples_array.length > 0){
+ shared_samples = _.intersection.apply(_, cofactor_samples_array)
+ } else {
+ shared_samples = js_data.indIDs
+ }
+
+ for (j = 0; j < js_data.data[0].length; j++) {
+
+ if (shared_samples.indexOf(js_data.indIDs[j]) == -1) {
+ continue
+ }
+
+ if (size_cofactor_vals.length > 0){
+ if (cofactor_samples.indexOf(js_data.indIDs[j])) {
+ datav = size_cofactor_vals[j]
+ sizev = map1to2(datamin, datamax, sizemin, sizemax, datav);
+ }
+ } else {
+ datav = 0;
+ sizev = 10;
+ }
+
+ x_values.push(js_data.data[0][j])
+ y_values.push(js_data.data[1][j])
+ sample_names.push(js_data.indIDs[j])
+ sizes.push(sizev)
+
+ data[0].values.push({
+ type: "normal",
+ x: js_data.data[0][j],
+ y: js_data.data[1][j],
+ name: js_data.indIDs[j],
+ size: sizev,
+ v3: datav
+ });
+ }
+
+ point_text = []
+ for (j = 0; j < sample_names.length; j++) {
+ this_text = ""
+ this_text += sample_names[j]
+ if (sample_names[j] in cofactor1_dict){
+ this_text += "<br>Cofactor 1: " + cofactor1_dict[sample_names[j]]
+ }
+ if (sample_names[j] in cofactor2_dict){
+ this_text += "<br>Cofactor 2: " + cofactor2_dict[sample_names[j]]
+ }
+ if (sample_names[j] in cofactor3_dict){
+ this_text += "<br>Cofactor 3: " + cofactor3_dict[sample_names[j]]
+ }
+ point_text.push(this_text)
+ }
+
+ if (symbol_list.length > 0) {
+ var trace1 = {
+ x: x_values,
+ y: y_values,
+ mode: 'markers',
+ text: point_text,
+ hoverinfo: "text+x+y",
+ marker: {
+ color: 'rgb(66, 66, 245)',
+ symbol: symbol_list,
+ size: sizes
+ }
+ }
+ } else {
+ var trace1 = {
+ x: x_values,
+ y: y_values,
+ mode: 'markers',
+ text: point_text,
+ hoverinfo: "text+x+y",
+ marker: {
+ color: 'rgb(66, 66, 245)',
+ size: sizes
+ }
+ }
+ }
+
+ var trace2 = {
+ x: [js_data.intercept_coords[0][0], js_data.intercept_coords[1][0]],
+ y: [js_data.intercept_coords[0][1], js_data.intercept_coords[1][1]],
+ mode: 'lines',
+ line: {
+ color: 'rgb(250, 60, 73)'
+ }
+ }
+
+ return [trace2, trace1];
+}
+
+function map1to2 (min1, max1, min2, max2, v1) {
+ v2 = (v1 - min1) * (max2 - min2) / (max1 - min1) + min2;
+ return v2;
+}
+
+function srgetdata() {
+ var data = [];
+ data.push({
+ values: [],
+ slope: js_data.srslope,
+ intercept: js_data.srintercept
+ });
+
+ sizemin = 8;
+ sizemax = 30;
+
+ ranked_cofactor_vals = ""
+
+ samples1 = [];
+ samples2 = [];
+ samples3 = [];
+
+ if ($('input[name=ranked_cofactor1_vals]').val()){
+ vals1 = []
+ val_sample_dict = {}
+ val_sample_pairs = $('input[name=ranked_cofactor1_vals]').val().split(",")
+ for (i=0; i < val_sample_pairs.length; i++) {
+ samples1.push(val_sample_pairs[i].split(":")[0])
+ vals1.push(parseFloat(val_sample_pairs[i].split(":")[1]))
+ val_sample_dict[val_sample_pairs[i].split(":")[0]] = parseFloat(val_sample_pairs[i].split(":")[1])
+ }
+ datamin1 = d3.min(vals1);
+ datamax1 = d3.max(vals1);
+
+ ranked_cofactor1_dict = val_sample_dict
+ ranked_cofactor1_values = vals1
+ }
+
+ if ($('input[name=ranked_cofactor2_vals]').val()){
+ vals2 = [];
+ val_sample_dict = {}
+ val_sample_pairs = $('input[name=ranked_cofactor2_vals]').val().split(",")
+ for (i=0; i < val_sample_pairs.length; i++) {
+ samples2.push(val_sample_pairs[i].split(":")[0])
+ vals2.push(parseFloat(val_sample_pairs[i].split(":")[1]))
+ val_sample_dict[val_sample_pairs[i].split(":")[0]] = val_sample_pairs[i].split(":")[1]
+ }
+ datamin2 = d3.min(vals2);
+ datamax2 = d3.max(vals2);
+
+ ranked_cofactor2_dict = val_sample_dict
+ ranked_cofactor2_values = vals2
+ }
+
+ if ($('input[name=ranked_cofactor3_vals]').val()){
+ vals3 = [];
+ val_sample_dict = {}
+ val_sample_pairs = $('input[name=ranked_cofactor3_vals]').val().split(",")
+ for (i=0; i < val_sample_pairs.length; i++) {
+ samples3.push(val_sample_pairs[i].split(":")[0])
+ vals3.push(parseFloat(val_sample_pairs[i].split(":")[1]))
+ val_sample_dict[val_sample_pairs[i].split(":")[0]] = val_sample_pairs[i].split(":")[1]
+ }
+
+ datamin3 = d3.min(vals3);
+ datamax3 = d3.max(vals3);
+
+ ranked_cofactor3_dict = val_sample_dict
+ ranked_cofactor3_values = vals3
+ }
+
+ x_values = []
+ y_values = []
+ sample_names = []
+ sizes = []
+
+ if ($('#cofactor1_type option:selected').val() == "size" && $('input[name=ranked_cofactor1_vals]').val()){
+ size_cofactor_vals = ranked_cofactor1_values
+ cofactor_samples = samples1
+ datamin = datamin1
+ datamax = datamax1
+ } else if ($('#cofactor2_type option:selected').val() == "size" && $('input[name=ranked_cofactor2_vals]').val()) {
+ size_cofactor_vals = ranked_cofactor2_values
+ cofactor_samples = samples2
+ datamin = datamin2
+ datamax = datamax2
+ } else if ($('#cofactor3_type option:selected').val() == "size" && $('input[name=ranked_cofactor3_vals]').val()) {
+ size_cofactor_vals = ranked_cofactor3_values
+ cofactor_samples = samples3
+ datamin = datamin3
+ datamax = datamax3
+ }
+
+ unique_vals = []
+ symbol_cofactor_vals = []
+ if ($('#cofactor1_type option:selected').val() == "symbol" && $('input[name=ranked_cofactor1_vals]').val()){
+ symbol_cofactor_vals = cofactor1_values
+ cofactor_samples = samples1
+ } else if ($('#cofactor2_type option:selected').val() == "symbol" && $('input[name=ranked_cofactor2_vals]').val()) {
+ symbol_cofactor_vals = cofactor2_values
+ cofactor_samples = samples2
+ } else if ($('#cofactor3_type option:selected').val() == "symbol" && $('input[name=ranked_cofactor3_vals]').val()) {
+ symbol_cofactor_vals = cofactor3_values
+ cofactor_samples = samples3
+ }
-halfh = h + margin.top + margin.bottom;
+ symbol_list = []
+ if (symbol_cofactor_vals.length > 0) {
+ unique_vals = [...new Set(symbol_cofactor_vals)]
+ for (i=0; i<symbol_cofactor_vals.length; i++){
+ val_pos = unique_vals.indexOf(symbol_cofactor_vals[i])
+ if (val_pos != "-1") {
+ symbol_list.push(val_pos)
+ } else {
+ symbol_list.push(0)
+ }
+ }
+ }
-totalh = halfh * 2;
+ //This is needed to calculate samples shared by cofactors
+ cofactor_samples_array = []
+ if (samples1.length > 0){
+ cofactor_samples_array.push(samples1)
+ }
+ if (samples2.length > 0){
+ cofactor_samples_array.push(samples2)
+ }
+ if (samples3.length > 0){
+ cofactor_samples_array.push(samples3)
+ }
+ if (cofactor_samples_array.length > 0){
+ shared_samples = _.intersection.apply(_, cofactor_samples_array)
+ } else {
+ shared_samples = js_data.indIDs
+ }
-halfw = w + margin.left + margin.right;
+ for (j = 0; j < js_data.rdata[0].length; j++) {
-totalw = halfw * 2;
+ if (shared_samples.indexOf(js_data.indIDs[j]) == -1) {
+ continue
+ }
-mychart = scatterplot().xvar(0).yvar(1).xlab(js_data.trait_1).ylab(js_data.trait_2).height(h).width(w).margin(margin);
+ if (size_cofactor_vals.length > 0){
+ if (cofactor_samples.indexOf(js_data.indIDs[j])) {
+ datav = size_cofactor_vals[j]
+ sizev = map1to2(datamin, datamax, sizemin, sizemax, datav);
+ }
+ } else {
+ sizev = 10;
+ }
-data = js_data.data;
+ x_values.push(js_data.rdata[0][j])
+ y_values.push(js_data.rdata[1][j])
+ sample_names.push(js_data.indIDs[j])
+ sizes.push(sizev)
+
+ data[0].values.push({
+ type: "ranked",
+ x: js_data.rdata[0][j],
+ y: js_data.rdata[1][j],
+ name: js_data.indIDs[j],
+ size: sizev,
+ });
+ }
+
+ point_text = []
+ for (j = 0; j < sample_names.length; j++) {
+ this_text = ""
+ this_text += sample_names[j]
+ if (sample_names[j] in ranked_cofactor1_dict){
+ this_text += "<br>Cofactor 1: " + ranked_cofactor1_dict[sample_names[j]]
+ }
+ if (sample_names[j] in ranked_cofactor2_dict){
+ this_text += "<br>Cofactor 2: " + ranked_cofactor2_dict[sample_names[j]]
+ }
+ if (sample_names[j] in cofactor3_dict){
+ this_text += "<br>Cofactor 3: " + ranked_cofactor3_dict[sample_names[j]]
+ }
+ point_text.push(this_text)
+ }
+
+ var trace1 = {
+ x: x_values,
+ y: y_values,
+ mode: 'markers',
+ text: point_text,
+ hoverinfo: "text+x+y",
+ marker: {
+ color: 'rgb(66, 66, 245)',
+ symbol: symbol_list,
+ size: sizes
+ }
+ }
+
+ var trace2 = {
+ x: [js_data.sr_intercept_coords[0][0], js_data.sr_intercept_coords[1][0]],
+ y: [js_data.sr_intercept_coords[0][1], js_data.sr_intercept_coords[1][1]],
+ mode: 'lines',
+ line: {
+ color: 'rgb(250, 60, 73)'
+ }
+ }
+
+ return [trace2, trace1];
+}
+
+function chartupdatewh() {
+ var width = $("#width").val();
+ var height = $("#height").val();
+
+ width_height_update = {
+ height: height,
+ width: width
+ }
+
+ Plotly.newPlot('scatterplot2', getdata(), layout, modebar_options)
+ Plotly.relayout('scatterplot2', width_height_update)
+
+ Plotly.newPlot('srscatterplot2', srgetdata(), sr_layout, modebar_options)
+ Plotly.relayout('srscatterplot2', width_height_update)
+}
+
+function colorer(d) {
+ if ($('#cofactor1_type option:selected').val() == "color"){
+ datamin = d3.min(cofactor1_values);
+ datamax = d3.max(cofactor1_values);
+ } else if ($('#cofactor2_type option:selected').val() == "color"){
+ datamin = d3.min(cofactor2_values);
+ datamax = d3.max(cofactor2_values);
+ } else {
+ datamin = d3.min(cofactor3_values);
+ datamax = d3.max(cofactor3_values);
+ }
+ colormin = $("#cocolorfrom").val();
+ colormax = $("#cocolorto").val();
+
+ compute = d3.interpolate("#"+colormin, "#"+colormax);
+ linear = d3.scale.linear().domain([datamin, datamax]).range([0,1]);
+
+ this_sample = d.tx.split("<br>")[0]
+
+ if ($('#cofactor1_type option:selected').val() == "color"){
+ c= compute(linear(cofactor1_dict[this_sample]));
+ } else if ($('#cofactor2_type option:selected').val() == "color"){
+ c= compute(linear(cofactor2_dict[this_sample]));
+ } else {
+ c= compute(linear(cofactor3_dict[this_sample]));
+ }
+
+ return c;
+}
+
+function ranked_colorer(d) {
+ if ($('#cofactor1_type option:selected').val() == "color"){
+ datamin = d3.min(ranked_cofactor1_values);
+ datamax = d3.max(ranked_cofactor1_values);
+ } else if ($('#cofactor2_type option:selected').val() == "color"){
+ datamin = d3.min(ranked_cofactor2_values);
+ datamax = d3.max(ranked_cofactor2_values);
+ } else {
+ datamin = d3.min(ranked_cofactor3_values);
+ datamax = d3.max(ranked_cofactor3_values);
+ }
+ colormin = $("#cocolorfrom").val();
+ colormax = $("#cocolorto").val();
+
+ compute = d3.interpolate("#"+colormin, "#"+colormax);
+ linear = d3.scale.linear().domain([datamin, datamax]).range([0,1]);
+
+ this_sample = d.tx.split("<br>")[0]
+
+ if ($('#cofactor1_type option:selected').val() == "color"){
+ c= compute(linear(ranked_cofactor1_dict[this_sample]));
+ } else if ($('#cofactor2_type option:selected').val() == "color"){
+ c= compute(linear(ranked_cofactor2_dict[this_sample]));
+ } else {
+ c= compute(linear(ranked_cofactor3_dict[this_sample]));
+ }
+
+ return c;
+}
+
+function chartupdatedata() {
+ var size = $("#marksize").val();
+ var shape = $("#markshape").val();
+
+ var pearson_title_update = {
+ title: "Pearson Correlation Scatterplot"
+ }
+ var spearman_title_update = {
+ title: "Spearman Rank Correlation Scatterplot"
+ }
+
+ Plotly.newPlot('scatterplot2', getdata(), layout, modebar_options)
+ Plotly.relayout('scatterplot2', pearson_title_update)
+ Plotly.newPlot('srscatterplot2', srgetdata(), sr_layout, modebar_options)
+ Plotly.relayout('srscatterplot2', spearman_title_update)
+
+ if ($('#cofactor1_type option:selected').val() == "color"){
+ $('#cofactor_color_selector').css("display", "inline")
+ if ($('input[name=cofactor1_vals]').val()){
+ d3.select('#scatterplot2 svg').selectAll('.point')
+ .style({
+ 'stroke': colorer,
+ 'fill': colorer
+ });
+ d3.select('#srscatterplot2 svg').selectAll('.point')
+ .style({
+ 'stroke': ranked_colorer,
+ 'fill': ranked_colorer
+ });
+ }
+ } else if ($('#cofactor2_type option:selected').val() == "color"){
+ $('#cofactor_color_selector').css("display", "inline")
+ if ($('input[name=cofactor2_vals]').val()){
+ d3.select('#scatterplot2 svg').selectAll('.point')
+ .style({
+ 'stroke': colorer,
+ 'fill': colorer
+ });
+ d3.select('#srscatterplot2 svg').selectAll('.point')
+ .style({
+ 'stroke': ranked_colorer,
+ 'fill': ranked_colorer
+ });
+ }
+ } else {
+ $('#cofactor_color_selector').css("display", "inline")
+ if ($('input[name=cofactor3_vals]').val()){
+ d3.select('#scatterplot2 svg').selectAll('.point')
+ .style({
+ 'stroke': colorer,
+ 'fill': colorer
+ });
+ d3.select('#srscatterplot2 svg').selectAll('.point')
+ .style({
+ 'stroke': ranked_colorer,
+ 'fill': ranked_colorer
+ });
+ }
+ }
+}
+
+drawg();
+srdrawg();
+
+$(".chartupdatewh").change(function () {
+ chartupdatewh();
+});
+
+$(".chartupdatedata").change(function () {
+ chartupdatedata();
+});
+
+$("#cofactor1_type").change(function () {
+
+ the_types = ["color", "size", "symbol"]
+
+ cofactor1_type = $(this).val()
+ cofactor2_type = $("#cofactor2_type option:selected").val()
+ cofactor3_type = $("#cofactor3_type option:selected").val()
+
+ if (cofactor2_type == cofactor1_type){
+ for (i=0; i<3; i++){
+ if (the_types[i] != cofactor1_type && the_types[i] != cofactor3_type) {
+ $("#cofactor2_type").val(the_types[i]);
+ }
+ }
+ }
+ else if (cofactor3_type == cofactor1_type){
+ for (i=0; i<3; i++){
+ if (the_types[i] != cofactor1_type && the_types[i] != cofactor2_type) {
+ $("#cofactor3_type").val(the_types[i]);
+ }
+ }
+ }
+
+ chartupdatedata();
+});
+
+$("#cofactor2_type").change(function () {
+
+ the_types = ["color", "size", "symbol"]
+
+ cofactor2_type = $(this).val()
+ cofactor1_type = $("#cofactor1_type option:selected").val()
+ cofactor3_type = $("#cofactor3_type option:selected").val()
+
+ if (cofactor1_type == cofactor2_type){
+ for (i=0; i<3; i++){
+ if (the_types[i] != cofactor2_type && the_types[i] != cofactor3_type){
+ $("#cofactor1_type").val(the_types[i]);
+ }
+ }
+ }
+ else if (cofactor3_type == cofactor2_type){
+ for (i=0; i<3; i++){
+ if (the_types[i] != cofactor2_type && the_types[i] != cofactor1_type){
+ $("#cofactor3_type").val(the_types[i]);
+ }
+ }
+ }
+
+ chartupdatedata();
+});
+
+$("#cofactor3_type").change(function () {
+
+ the_types = ["color", "size", "symbol"]
+
+ cofactor3_type = $(this).val()
+ cofactor1_type = $("#cofactor1_type option:selected").val()
+ cofactor2_type = $("#cofactor2_type option:selected").val()
+
+ if (cofactor1_type == cofactor3_type){
+ for (i=0; i<3; i++){
+ if (the_types[i] != cofactor2_type && the_types[i] != cofactor3_type){
+ $("#cofactor1_type").val(the_types[i]);
+ }
+ }
+ }
+ else if (cofactor2_type == cofactor3_type){
+ for (i=0; i<3; i++){
+ if (the_types[i] != cofactor2_type && the_types[i] != cofactor1_type){
+ $("#cofactor3_type").val(the_types[i]);
+ }
+ }
+ }
+});
+
+open_covariate_selection = function() {
+ return $('#collections_holder').load('/collections/list #collections_list', (function(_this) {
+ return function() {
+ $.colorbox({
+ inline: true,
+ href: "#collections_holder",
+ onComplete: function(){
+ $.getScript("/static/new/javascript/get_traits_from_collection.js");
+ }
+ });
+ return $('a.collection_name').attr('onClick', 'return false');
+ };
+ })(this));
+};
+
+remove_cofactors = function() {
+ $('input[name=cofactor1_vals]').val("");
+ $('input[name=ranked_cofactor1_vals]').val("");
+ $('input[name=cofactor2_vals]').val("");
+ $('input[name=ranked_cofactor2_vals]').val("");
+ $('input[name=cofactor3_vals]').val("");
+ $('input[name=ranked_cofactor3_vals]').val("");
+
+ $('#select_cofactor1').text("Select Cofactor 1");
+ $('#cofactor2_button').css("display", "none");
+ $('#cofactor3_button').css("display", "none");
+
+ $('#cofactor_color_select').css("display", "none");
+
+ $('#cofactor1_info_container').css("display", "none");
+ $('#cofactor2_info_container').css("display", "none");
+ $('#cofactor3_info_container').css("display", "none");
+
+ chartupdatedata();
+};
-indID = js_data.indIDs;
+$(document).ready(function(){
+ chartupdatedata();
-slope = js_data.slope;
+ $('#select_cofactor1').click(function () {
+ $('input[name=selecting_which_cofactor]').val("1");
+ open_covariate_selection();
+ });
-intercept = js_data.intercept;
+ $('#select_cofactor2').click(function () {
+ $('input[name=selecting_which_cofactor]').val("2");
+ open_covariate_selection();
+ });
-console.log("THE DATA IS:", data);
+ $('#select_cofactor3').click(function () {
+ $('input[name=selecting_which_cofactor]').val("3");
+ open_covariate_selection();
+ });
-d3.select("div#chart1").datum({
- data: data,
- indID: indID,
- slope: slope,
- intercept: intercept
-}).call(mychart);
+ $('#remove_cofactors').click(function () {
+ remove_cofactors();
+ });
-mychart.pointsSelect().on("mouseover", function(d) {
- return d3.select(this).attr("r", mychart.pointsize() * 3);
-}).on("mouseout", function(d) {
- return d3.select(this).attr("r", mychart.pointsize());
});
diff --git a/wqflask/wqflask/static/new/javascript/draw_probability_plot.coffee b/wqflask/wqflask/static/new/javascript/draw_probability_plot.coffee
deleted file mode 100644
index 09ab3bc4..00000000
--- a/wqflask/wqflask/static/new/javascript/draw_probability_plot.coffee
+++ /dev/null
@@ -1,94 +0,0 @@
-root = exports ? this
-
-# calculations here use the same formulae as scipy.stats.probplot
-get_z_scores = (n) ->
- # order statistic medians (Filliben's approximation)
- osm_uniform = new Array(n)
- osm_uniform[n - 1] = Math.pow(0.5, 1.0 / n)
- osm_uniform[0] = 1 - osm_uniform[n - 1]
- for i in [1 .. (n - 2)]
- osm_uniform[i] = (i + 1 - 0.3175) / (n + 0.365)
-
- return (jStat.normal.inv(x, 0, 1) for x in osm_uniform)
-
-# samples is {'samples_primary': {'name1': value1, ...},
-# 'samples_other': {'nameN': valueN, ...},
-# 'samples_all': {'name1': value1, ...}}
-redraw_prob_plot = (samples, sample_group) ->
- h = 600
- w = 600
- margin = {left:60, top:40, right:40, bottom: 40, inner:5}
- totalh = h + margin.top + margin.bottom
- totalw = w + margin.left + margin.right
-
- container = $("#prob_plot_container")
- container.width(totalw)
- container.height(totalh)
-
- nv.addGraph(() =>
- chart = nv.models.scatterChart()
- .width(w)
- .height(h)
- .showLegend(true)
- .color(d3.scale.category10().range())
-
- # size settings are quite counter-intuitive in NVD3!
- chart.pointRange([50,50]) # (50 is the area, not radius)
-
- chart.legend.updateState(false)
-
- chart.xAxis
- .axisLabel("Theoretical quantiles")
- .tickFormat(d3.format('.02f'))
-
- chart.yAxis
- .axisLabel("Sample quantiles")
- .tickFormat(d3.format('.02f'))
-
- chart.tooltipContent((obj) =>
- return '<b style="font-size: 20px">' + obj.point.name + '</b>'
- )
-
- all_samples = samples[sample_group]
- names = (x for x in _.keys(all_samples) when all_samples[x] != null)
- sorted_names = names.sort((x, y) => all_samples[x].value - all_samples[y].value)
- sorted_values = (all_samples[x].value for x in sorted_names)
- sw_result = ShapiroWilkW(sorted_values)
- W = sw_result.w.toFixed(3)
- pvalue = sw_result.p.toFixed(3)
- pvalue_str = if pvalue > 0.05 then\
- pvalue.toString()\
- else\
- "<span style='color:red'>"+pvalue+"</span>"
- test_str = "Shapiro-Wilk test statistic is #{W} (p = #{pvalue_str})"
-
- z_scores = get_z_scores(sorted_values.length)
- slope = jStat.stdev(sorted_values)
- intercept = jStat.mean(sorted_values)
-
- make_data = (group_name) ->
- return {
- key: js_data.sample_group_types[group_name],
- slope: slope,
- intercept: intercept,
- values: ({x: z_score, y: value, name: sample}\
- for [z_score, value, sample] in\
- _.zip(get_z_scores(sorted_values.length),
- sorted_values,
- sorted_names)\
- when sample of samples[group_name])
- }
-
- data = [make_data('samples_primary'), make_data('samples_other')]
- console.log("THE DATA IS:", data)
- d3.select("#prob_plot_container svg")
- .datum(data)
- .call(chart)
-
- $("#prob_plot_title").html("<h3>Normal probability plot</h3>"+test_str)
- $("#prob_plot_container .nv-legendWrap").toggle(sample_group == "samples_all")
-
- return chart
- )
-
-root.redraw_prob_plot_impl = redraw_prob_plot
diff --git a/wqflask/wqflask/static/new/javascript/draw_probability_plot.js b/wqflask/wqflask/static/new/javascript/draw_probability_plot.js
index e5787564..3d756303 100644
--- a/wqflask/wqflask/static/new/javascript/draw_probability_plot.js
+++ b/wqflask/wqflask/static/new/javascript/draw_probability_plot.js
@@ -26,7 +26,7 @@
redraw_prob_plot = function(samples, sample_group) {
var container, h, margin, totalh, totalw, w;
h = 600;
- w = 600;
+ w = 500;
margin = {
left: 60,
top: 40,
@@ -45,7 +45,7 @@
chart = nv.models.scatterChart().width(w).height(h).showLegend(true).color(d3.scale.category10().range());
chart.pointRange([50, 50]);
chart.legend.updateState(false);
- chart.xAxis.axisLabel("Expected Z score").tickFormat(d3.format('.02f'));
+ chart.xAxis.axisLabel("Expected Z score").axisLabelDistance(20).tickFormat(d3.format('.02f'));
chart.tooltipContent(function(obj) {
return '<b style="font-size: 20px">' + obj.point.name + '</b>';
});
@@ -78,13 +78,19 @@
}
return results;
})();
- chart.yAxis.axisLabel("Trait value").tickFormat(d3.format('.0'+max_decimals.toString()+'f'));
+ //ZS: 0.1 indicates buffer, increase to increase buffer
+ y_domain = [sorted_values[0] - (sorted_values.slice(-1)[0] - sorted_values[0])*0.1, sorted_values.slice(-1)[0] + (sorted_values.slice(-1)[0] - sorted_values[0])*0.1]
+ chart.yDomain(y_domain)
+ chart.yAxis.axisLabel("Trait value").axisLabelDistance(10).tickFormat(d3.format('.0'+max_decimals.toString()+'f'));
sw_result = ShapiroWilkW(sorted_values);
W = sw_result.w.toFixed(3);
pvalue = sw_result.p.toFixed(3);
pvalue_str = pvalue > 0.05 ? pvalue.toString() : "<span style='color:red'>" + pvalue + "</span>";
test_str = "Shapiro-Wilk test statistic is " + W + " (p = " + pvalue_str + ")";
z_scores = get_z_scores(sorted_values.length);
+ //ZS: 0.1 indicates buffer, increase to increase buffer
+ x_domain = [z_scores[0] - (z_scores.slice(-1)[0] - z_scores[0])*0.1, z_scores.slice(-1)[0] + (z_scores.slice(-1)[0] - z_scores[0])*0.1]
+ chart.xDomain(x_domain)
slope = jStat.stdev(sorted_values);
intercept = jStat.mean(sorted_values);
make_data = function(group_name) {
diff --git a/wqflask/wqflask/static/new/javascript/get_covariates_from_collection.js b/wqflask/wqflask/static/new/javascript/get_covariates_from_collection.js
new file mode 100644
index 00000000..8cd6dac3
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/get_covariates_from_collection.js
@@ -0,0 +1,224 @@
+// Generated by CoffeeScript 1.8.0
+var add_trait_data, assemble_into_json, back_to_collections, collection_click, collection_list, color_by_trait, create_trait_data_csv, get_this_trait_vals, get_trait_data, process_traits, selected_traits, submit_click, this_trait_data, trait_click,
+ __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+this_trait_data = null;
+
+selected_traits = {};
+
+$('#collections_list').attr("style", "width: 100%;");
+$('#trait_table').dataTable( {
+ "drawCallback": function( settings ) {
+ $('#trait_table tr').click(function(event) {
+ if (event.target.type !== 'checkbox') {
+ $(':checkbox', this).trigger('click');
+ }
+ });
+ },
+ "columns": [
+ { "type": "natural", "width": "3%" },
+ { "type": "natural", "width": "8%" },
+ { "type": "natural", "width": "20%" },
+ { "type": "natural", "width": "25%" },
+ { "type": "natural", "width": "25%" },
+ { "type": "natural", "width": "15%" }
+ ],
+ "columnDefs": [ {
+ "targets": 0,
+ "orderable": false
+ } ],
+ "order": [[1, "asc" ]],
+ "sDom": "RZtr",
+ "iDisplayLength": -1,
+ "autoWidth": true,
+ "bDeferRender": true,
+ "bSortClasses": false,
+ "paging": false,
+ "orderClasses": true
+} );
+
+$('#collection_table').dataTable( {
+ "createdRow": function ( row, data, index ) {
+ if ($('td', row).eq(2).text().length > 40) {
+ $('td', row).eq(2).text($('td', row).eq(2).text().substring(0, 40));
+ $('td', row).eq(2).text($('td', row).eq(2).text() + '...')
+ }
+ if ($('td', row).eq(4).text().length > 50) {
+ $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 50));
+ $('td', row).eq(4).text($('td', row).eq(4).text() + '...')
+ }
+ },
+ "columnDefs": [ {
+ "targets": 0,
+ "orderable": false
+ } ],
+ "order": [[1, "asc" ]],
+ "sDom": "ZRtr",
+ "iDisplayLength": -1,
+ "autoWidth": true,
+ "bSortClasses": false,
+ "paging": false,
+ "orderClasses": true
+} );
+
+collection_click = function() {
+ var this_collection_url;
+ console.log("Clicking on:", $(this));
+ this_collection_url = $(this).find('.collection_name').prop("href");
+ this_collection_url += "&json";
+ console.log("this_collection_url", this_collection_url);
+ collection_list = $("#collections_holder").html();
+ return $.ajax({
+ dataType: "json",
+ url: this_collection_url,
+ success: process_traits
+ });
+};
+
+submit_click = function() {
+ var covariates_string = "";
+ var covariates_display_string = "";
+ $('#collections_holder').find('input[type=checkbox]:checked').each(function() {
+ var this_dataset, this_trait;
+ this_trait = $(this).parents('tr').find('.trait').text();
+ this_trait_display = $(this).parents('tr').find('.trait').data("display_name");
+ this_description = $(this).parents('tr').find('.description').text();
+ console.log("this_trait is:", this_trait_display);
+ this_dataset = $(this).parents('tr').find('.dataset').data("dataset");
+ console.log("this_dataset is:", this_dataset);
+ covariates_string += this_trait + ":" + this_dataset + ","
+ //this_covariate_display_string = this_trait + ": " + this_description
+ this_covariate_display_string = this_trait_display
+ if (this_covariate_display_string.length > 50) {
+ this_covariate_display_string = this_covariate_display_string.substring(0, 45) + "..."
+ }
+ covariates_display_string += this_covariate_display_string + "\n"
+ });
+ // Trim the last newline from display_string
+ covariates_display_string = covariates_display_string.replace(/\n$/, "")
+
+ // Trim the last comma
+ covariates_string = covariates_string.substring(0, covariates_string.length - 1)
+ //covariates_display_string = covariates_display_string.substring(0, covariates_display_string.length - 2)
+
+ $("input[name=covariates]").val(covariates_string)
+ $(".selected_covariates").val(covariates_display_string)
+
+ return $.colorbox.close();
+};
+
+trait_click = function() {
+ var dataset, this_trait_url, trait;
+ trait = $(this).parent().find('.trait').text();
+ dataset = $(this).parent().find('.dataset').text();
+ $("input[name=covariates]").val(trait + ":" + dataset)
+ $(".selected_covariates").text(trait)
+ return $.colorbox.close();
+};
+
+add_trait_data = function(trait_data, textStatus, jqXHR) {
+ var trait_name, trait_sample_data;
+ trait_name = trait_data[0];
+ trait_sample_data = trait_data[1];
+ selected_traits[trait_name] = trait_sample_data;
+ return console.log("selected_traits:", selected_traits);
+};
+
+get_trait_data = function(trait_data, textStatus, jqXHR) {
+ var sample, samples, this_trait_vals, trait_sample_data, vals, _i, _len;
+ trait_sample_data = trait_data[1];
+ samples = $('input[name=allsamples]').val().split(" ");
+ vals = [];
+ for (_i = 0, _len = samples.length; _i < _len; _i++) {
+ sample = samples[_i];
+ if (__indexOf.call(Object.keys(trait_sample_data), sample) >= 0) {
+ vals.push(parseFloat(trait_sample_data[sample]));
+ } else {
+ vals.push(null);
+ }
+ }
+ if ($('input[name=samples]').length < 1) {
+ $('#hidden_inputs').append('<input type="hidden" name="samples" value="[' + samples.toString() + ']" />');
+ }
+ $('#hidden_inputs').append('<input type="hidden" name="vals" value="[' + vals.toString() + ']" />');
+ this_trait_vals = get_this_trait_vals(samples);
+ return color_by_trait(trait_sample_data);
+};
+
+get_this_trait_vals = function(samples) {
+ var sample, this_trait_vals, this_val, this_vals_json, _i, _len;
+ this_trait_vals = [];
+ for (_i = 0, _len = samples.length; _i < _len; _i++) {
+ sample = samples[_i];
+ this_val = parseFloat($("input[name='value:" + sample + "']").val());
+ if (!isNaN(this_val)) {
+ this_trait_vals.push(this_val);
+ } else {
+ this_trait_vals.push(null);
+ }
+ }
+ this_vals_json = '[' + this_trait_vals.toString() + ']';
+ return this_trait_vals;
+};
+
+assemble_into_json = function(this_trait_vals) {
+ var json_data, json_ids, num_traits, samples;
+ num_traits = $('input[name=vals]').length;
+ samples = $('input[name=samples]').val();
+ json_ids = samples;
+ json_data = '[' + this_trait_vals;
+ $('input[name=vals]').each((function(_this) {
+ return function(index, element) {
+ return json_data += ',' + $(element).val();
+ };
+ })(this));
+ json_data += ']';
+ return [json_ids, json_data];
+};
+
+color_by_trait = function(trait_sample_data, textStatus, jqXHR) {
+ console.log('in color_by_trait:', trait_sample_data);
+ return root.bar_chart.color_by_trait(trait_sample_data);
+};
+
+process_traits = function(trait_data, textStatus, jqXHR) {
+ var the_html, trait, _i, _len;
+ console.log('in process_traits with trait_data:', trait_data);
+ the_html = "<button id='back_to_collections' class='btn btn-inverse btn-small'>";
+ the_html += "<i class='icon-white icon-arrow-left'></i> Back </button>";
+ the_html += " <button id='submit' class='btn btn-primary btn-small'> Submit </button>";
+ the_html += "<table id='collection_table' style='padding-top: 10px;' class='table table-hover'>";
+ the_html += "<thead><tr><th></th><th>Record</th><th>Data Set</th><th>Description</th></tr></thead>";
+ the_html += "<tbody>";
+ for (_i = 0, _len = trait_data.length; _i < _len; _i++) {
+ trait = trait_data[_i];
+ the_html += "<tr class='trait_line'>";
+ the_html += "<td class='select_trait'><input type='checkbox' name='selectCheck' class='checkbox edit_sample_checkbox'></td>";
+ if ("abbreviation" in trait) {
+ the_html += "<td class='trait' data-display_name='" + trait.name + " - " + trait.abbreviation + "'>" + trait.name + "</td>";
+ } else if ("symbol" in trait) {
+ the_html += "<td class='trait' data-display_name='" + trait.name + " - " + trait.symbol + "'>" + trait.name + "</td>";
+ } else {
+ the_html += "<td class='trait' data-display_name='" + trait.name + "'>" + trait.name + "</td>";
+ }
+ the_html += "<td class='dataset' data-dataset='" + trait.dataset + "'>" + trait.dataset_name + "</td>";
+ the_html += "<td class='description'>" + trait.description + "</td>";
+ }
+ the_html += "</tbody>";
+ the_html += "</table>";
+ the_html += "<script type='text/javascript' src='/static/new/javascript/get_covariates_from_collection.js'></script>"
+ $("#collections_holder").html(the_html);
+ return $('#collections_holder').colorbox.resize();
+};
+
+back_to_collections = function() {
+ console.log("collection_list:", collection_list);
+ $("#collections_holder").html(collection_list);
+ $(document).on("click", ".collection_line", collection_click);
+ return $('#collections_holder').colorbox.resize();
+};
+
+$(".collection_line").on("click", collection_click);
+$("#submit").on("click", submit_click);
+$(".trait").on("click", trait_click);
+$("#back_to_collections").on("click", back_to_collections); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/get_traits_from_collection.coffee b/wqflask/wqflask/static/new/javascript/get_traits_from_collection.coffee
deleted file mode 100644
index 07be824f..00000000
--- a/wqflask/wqflask/static/new/javascript/get_traits_from_collection.coffee
+++ /dev/null
@@ -1,228 +0,0 @@
-console.log("before get_traits_from_collection")
-
-# Going to be used to hold collection list
-# So we can repopulate it when the back button is clicked
-collection_list = null
-this_trait_data = null
-
-selected_traits = {}
-
-collection_click = () ->
- console.log("Clicking on:", $(this))
- this_collection_url = $(this).find('.collection_name').prop("href")
- this_collection_url += "&json"
- console.log("this_collection_url", this_collection_url)
- collection_list = $("#collections_holder").html()
- $.ajax(
- dataType: "json",
- url: this_collection_url,
- success: process_traits
- )
-
-submit_click = () ->
-
- selected_traits = {}
-
- traits = []
- $('#collections_holder').find('input[type=checkbox]:checked').each ->
- this_trait = $(@).parents('tr').find('.trait').text()
- console.log("this_trait is:", this_trait)
- this_dataset = $(@).parents('tr').find('.dataset').text()
- console.log("this_dataset is:", this_dataset)
- this_trait_url = "/trait/get_sample_data?trait="+this_trait+"&dataset="+this_dataset
- $.ajax(
- dataType: "json",
- url: this_trait_url,
- async: false,
- success: add_trait_data
- )
-
- console.log("SELECTED_TRAITS IS:", selected_traits)
-
- trait_names = []
- samples = $('input[name=allsamples]').val().split(" ")
- all_vals = []
-
- this_trait_vals = get_this_trait_vals(samples)
- all_vals.push(this_trait_vals)
-
- for trait in Object.keys(selected_traits)
- trait_names.push(trait)
-
- this_trait_vals = []
- for sample in samples
- if sample in Object.keys(selected_traits[trait])
- this_trait_vals.push(parseFloat(selected_traits[trait][sample]))
- else
- this_trait_vals.push(null)
- all_vals.push(this_trait_vals)
-
- trait_vals_csv = create_trait_data_csv(selected_traits)
- scatter_matrix = new ScatterMatrix(trait_vals_csv)
- scatter_matrix.render()
-
-
- #create_scatterplots(trait_names, samples, all_vals)
-
- $.colorbox.close()
-
-create_trait_data_csv = (selected_traits) ->
- trait_names = []
- trait_names.push($('input[name=trait_id]').val())
- samples = $('input[name=allsamples]').val().split(" ")
- all_vals = []
- this_trait_vals = get_this_trait_vals(samples)
- all_vals.push(this_trait_vals)
-
- for trait in Object.keys(selected_traits)
- trait_names.push(trait)
-
- this_trait_vals = []
- for sample in samples
- if sample in Object.keys(selected_traits[trait])
- this_trait_vals.push(parseFloat(selected_traits[trait][sample]))
- else
- this_trait_vals.push(null)
- all_vals.push(this_trait_vals)
-
- console.log("all_vals:", all_vals)
-
- trait_vals_csv = trait_names.join(",")
- trait_vals_csv += "\n"
-
- for sample, index in samples
- if all_vals[0][index] == null
- continue
- sample_vals = []
- for trait in all_vals
- sample_vals.push(trait[index])
- trait_vals_csv += sample_vals.join(",")
- trait_vals_csv += "\n"
-
- #console.log("trait_vals_csv:", trait_vals_csv)
-
- return trait_vals_csv
-
-trait_click = () ->
- console.log("Clicking on:", $(this))
- trait = $(this).parent().find('.trait').text()
- dataset = $(this).parent().find('.dataset').text()
- this_trait_url = "/trait/get_sample_data?trait="+trait+"&dataset="+dataset
- console.log("this_trait_url", this_trait_url)
- $.ajax(
- dataType: "json",
- url: this_trait_url,
- success: get_trait_data
- )
- $.colorbox.close()
-
-add_trait_data = (trait_data, textStatus, jqXHR) ->
- trait_name = trait_data[0]
- trait_sample_data = trait_data[1]
- selected_traits[trait_name] = trait_sample_data
- console.log("selected_traits:", selected_traits)
-
-get_trait_data = (trait_data, textStatus, jqXHR) ->
- #trait_list = $('input[name=compare_traits]')
- #console.log("trait_list:", trait_list.val())
- console.log("trait:", trait_data[0])
- trait_sample_data = trait_data[1]
- console.log("trait_sample_data:", trait_sample_data)
- samples = $('input[name=allsamples]').val().split(" ")
- vals = []
-
- for sample in samples
- if sample in Object.keys(trait_sample_data)
- vals.push(parseFloat(trait_sample_data[sample]))
- else
- vals.push(null)
-
- #console.log("sorted_samples:", samples)
- #console.log("sorted_vals:", vals)
-
- if $('input[name=samples]').length < 1
- $('#hidden_inputs').append('<input type="hidden" name="samples" value="[' + samples.toString() + ']" />')
- $('#hidden_inputs').append('<input type="hidden" name="vals" value="[' + vals.toString() + ']" />')
-
- this_trait_vals = get_this_trait_vals(samples)
-
- #json_data = assemble_into_json(this_trait_vals_json)
-
- #console.log("json_data[1]:", json_data[1])
-
- console.log("THE LENGTH IS:", $('input[name=vals]').length)
- #if $('input[name=vals]').length == 1
- # create_scatterplot(samples, [this_trait_vals, vals])
-
- color_by_trait(trait_sample_data)
-
-get_this_trait_vals = (samples) ->
- this_trait_vals = []
- for sample in samples
- this_val = parseFloat($("input[name='value:"+sample+"']").val())
- if !isNaN(this_val)
- this_trait_vals.push(this_val)
- else
- this_trait_vals.push(null)
- console.log("this_trait_vals:", this_trait_vals)
-
- this_vals_json = '[' + this_trait_vals.toString() + ']'
-
- return this_trait_vals
-
-assemble_into_json = (this_trait_vals) ->
- num_traits = $('input[name=vals]').length
- samples = $('input[name=samples]').val()
- json_ids = samples
-
- json_data = '[' + this_trait_vals
-
- $('input[name=vals]').each (index, element) =>
- json_data += ',' + $(element).val()
- json_data += ']'
-
- return [json_ids, json_data]
-
-color_by_trait = (trait_sample_data, textStatus, jqXHR) ->
- #trait_sample_data = trait_sample_data
- console.log('in color_by_trait:', trait_sample_data)
- root.bar_chart.color_by_trait(trait_sample_data)
-
-process_traits = (trait_data, textStatus, jqXHR) ->
- console.log('in process_traits with trait_data:', trait_data)
-
- the_html = "<button id='back_to_collections' class='btn btn-inverse btn-small'>"
- the_html += "<i class='icon-white icon-arrow-left'></i> Back </button>"
- the_html += " <button id='submit' class='btn btn-primary btn-small'> Submit </button>"
-
- the_html += "<table class='table table-hover'>"
- the_html += "<thead><tr><th></th><th>Record</th><th>Data Set</th><th>Description</th><th>Mean</th></tr></thead>"
- the_html += "<tbody>"
- for trait in trait_data
- the_html += "<tr class='trait_line'>"
- the_html += "<td class='select_trait'><input type='checkbox' name='selectCheck' class='checkbox edit_sample_checkbox'></td>"
- the_html += "<td class='trait'>#{ trait.name }</td>"
- the_html += "<td class='dataset'>#{ trait.dataset }</td>"
- the_html += "<td>#{ trait.description }</td>"
- the_html += "<td>#{ trait.mean or '&nbsp;' }</td></tr>"
- the_html += "</tbody>"
- the_html += "</table>"
-
- $("#collections_holder").html(the_html)
- $('#collections_holder').colorbox.resize()
-
-back_to_collections = () ->
- console.log("collection_list:", collection_list)
- $("#collections_holder").html(collection_list)
-
- $(document).on("click", ".collection_line", collection_click)
- $('#collections_holder').colorbox.resize()
-
-$ ->
- console.log("inside get_traits_from_collection")
-
- $(document).on("click", ".collection_line", collection_click)
- $(document).on("click", "#submit", submit_click)
- $(document).on("click", ".trait", trait_click)
- $(document).on("click", "#back_to_collections", back_to_collections)
-
diff --git a/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js b/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js
index bcd83889..6f03b98f 100644
--- a/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js
+++ b/wqflask/wqflask/static/new/javascript/get_traits_from_collection.js
@@ -4,18 +4,72 @@ var add_trait_data, assemble_into_json, back_to_collections, collection_click, c
console.log("before get_traits_from_collection");
-collection_list = null;
+//collection_list = null;
this_trait_data = null;
selected_traits = {};
+$('#collections_list').attr("style", "width: 100%;");
+$('#trait_table').dataTable( {
+ "drawCallback": function( settings ) {
+ $('#trait_table tr').click(function(event) {
+ if (event.target.type !== 'checkbox') {
+ $(':checkbox', this).trigger('click');
+ }
+ });
+ },
+ "columns": [
+ { "type": "natural", "width": "3%" },
+ { "type": "natural", "width": "8%" },
+ { "type": "natural", "width": "20%" },
+ { "type": "natural", "width": "25%" },
+ { "type": "natural", "width": "25%" },
+ { "type": "natural", "width": "15%" }
+ ],
+ "columnDefs": [ {
+ "targets": 0,
+ "orderable": false
+ } ],
+ "order": [[1, "asc" ]],
+ "sDom": "RZtr",
+ "iDisplayLength": -1,
+ "autoWidth": true,
+ "bDeferRender": true,
+ "bSortClasses": false,
+ "paging": false,
+ "orderClasses": true
+} );
+
+$('#collection_table').dataTable( {
+ "createdRow": function ( row, data, index ) {
+ if ($('td', row).eq(2).text().length > 40) {
+ $('td', row).eq(2).text($('td', row).eq(2).text().substring(0, 40));
+ $('td', row).eq(2).text($('td', row).eq(2).text() + '...')
+ }
+ if ($('td', row).eq(4).text().length > 50) {
+ $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 50));
+ $('td', row).eq(4).text($('td', row).eq(4).text() + '...')
+ }
+ },
+ "columnDefs": [ {
+ "targets": 0,
+ "orderable": false
+ } ],
+ "order": [[1, "asc" ]],
+ "sDom": "ZRtr",
+ "iDisplayLength": -1,
+ "autoWidth": true,
+ "bSortClasses": false,
+ "paging": false,
+ "orderClasses": true
+} );
+
collection_click = function() {
var this_collection_url;
- console.log("Clicking on:", $(this));
+ //console.log("Clicking on:", $(this));
this_collection_url = $(this).find('.collection_name').prop("href");
this_collection_url += "&json";
- console.log("this_collection_url", this_collection_url);
collection_list = $("#collections_holder").html();
return $.ajax({
dataType: "json",
@@ -42,7 +96,6 @@ submit_click = function() {
success: add_trait_data
});
});
- console.log("SELECTED_TRAITS IS:", selected_traits);
trait_names = [];
samples = $('input[name=allsamples]').val().split(" ");
all_vals = [];
@@ -117,7 +170,20 @@ trait_click = function() {
trait = $(this).parent().find('.trait').text();
dataset = $(this).parent().find('.dataset').text();
this_trait_url = "/trait/get_sample_data?trait=" + trait + "&dataset=" + dataset;
- console.log("this_trait_url", this_trait_url);
+ $.ajax({
+ dataType: "json",
+ url: this_trait_url,
+ success: get_trait_data
+ });
+ return $.colorbox.close();
+};
+
+trait_row_click = function() {
+ var dataset, this_trait_url, trait;
+ console.log("Clicking on:", $(this));
+ trait = $(this).find('.trait').text();
+ dataset = $(this).find('.dataset').data("dataset");
+ this_trait_url = "/trait/get_sample_data?trait=" + trait + "&dataset=" + dataset;
$.ajax({
dataType: "json",
url: this_trait_url,
@@ -134,28 +200,132 @@ add_trait_data = function(trait_data, textStatus, jqXHR) {
return console.log("selected_traits:", selected_traits);
};
+populate_cofactor_info = function(trait_info) {
+ if ($('input[name=selecting_which_cofactor]').val() == "1"){
+ $('#cofactor1_trait_link').attr("href", trait_info['url'])
+ if (trait_info['type'] == "ProbeSet"){
+ $('#cofactor1_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['tissue'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor1_description').text("[" + trait_info['symbol'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
+ } else {
+ $('#cofactor1_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ if ('pubmed_link' in trait_info) {
+ $('#cofactor1_description').html('<a href=\"' + trait_info['pubmed_link'] + '\">PubMed: ' + trait_info['pubmed_text'] + '</a><br>' + trait_info['description'])
+ } else {
+ $('#cofactor1_description').html('PubMed: ' + trait_info['pubmed_text'] + '<br>' + trait_info['description'])
+ }
+ }
+ $('#select_cofactor1').text("Change Cofactor 1");
+ $('#cofactor1_info_container').css("display", "inline");
+ $('#cofactor2_button').css("display", "inline-block");
+ } else if ($('input[name=selecting_which_cofactor]').val() == "2"){
+ $('#cofactor2_trait_link').attr("href", trait_info['url'])
+ if (trait_info['type'] == "ProbeSet"){
+ $('#cofactor2_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['tissue'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor2_description').text("[" + trait_info['symbol'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
+ } else {
+ $('#cofactor2_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ if ('pubmed_link' in trait_info) {
+ $('#cofactor2_description').html('<a href=\"' + trait_info['pubmed_link'] + '\">PubMed: ' + trait_info['pubmed_text'] + '</a><br>' + trait_info['description'])
+ } else {
+ $('#cofactor2_description').html('PubMed: ' + trait_info['pubmed_text'] + '<br>' + trait_info['description'])
+ }
+ }
+ $('#select_cofactor2').text("Change Cofactor 2");
+ $('#cofactor2_info_container').css("display", "inline");
+ $('#cofactor3_button').css("display", "inline-block");
+ } else {
+ $('#cofactor3_trait_link').attr("href", trait_info['url'])
+ if (trait_info['type'] == "ProbeSet"){
+ $('#cofactor3_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['tissue'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ $('#cofactor3_description').text("[" + trait_info['symbol'] + " on " + trait_info['location'] + " Mb]\n" + trait_info['description'])
+ } else {
+ $('#cofactor3_trait_link').text(trait_info['species'] + " " + trait_info['group'] + " " + trait_info['db'] + ": " + trait_info['name'])
+ if ('pubmed_link' in trait_info) {
+ $('#cofactor3_description').html('<a href=\"' + trait_info['pubmed_link'] + '\">PubMed: ' + trait_info['pubmed_text'] + '</a><br>' + trait_info['description'])
+ } else {
+ $('#cofactor3_description').html('PubMed: ' + trait_info['pubmed_text'] + '<br>' + trait_info['description'])
+ }
+ }
+ $('#select_cofactor3').text("Change Cofactor 3");
+ $('#cofactor3_info_container').css("display", "inline");
+ }
+}
+
get_trait_data = function(trait_data, textStatus, jqXHR) {
var sample, samples, this_trait_vals, trait_sample_data, vals, _i, _len;
- console.log("trait:", trait_data[0]);
trait_sample_data = trait_data[1];
- console.log("trait_sample_data:", trait_sample_data);
- samples = $('input[name=allsamples]').val().split(" ");
+ console.log("IN GET TRAIT DATA")
+ if ( $('input[name=allsamples]').length ) {
+ samples = $('input[name=allsamples]').val().split(" ");
+ } else {
+ samples = js_data.indIDs
+ }
+ sample_vals = [];
vals = [];
for (_i = 0, _len = samples.length; _i < _len; _i++) {
sample = samples[_i];
- if (__indexOf.call(Object.keys(trait_sample_data), sample) >= 0) {
- vals.push(parseFloat(trait_sample_data[sample]));
+ if (sample in trait_sample_data) {
+ sample_vals.push(sample + ":" + parseFloat(trait_sample_data[sample]))
+ vals.push(parseFloat(trait_sample_data[sample]))
} else {
- vals.push(null);
+ sample_vals.push(null)
+ vals.push(null)
}
}
- if ($('input[name=samples]').length < 1) {
- $('#hidden_inputs').append('<input type="hidden" name="samples" value="[' + samples.toString() + ']" />');
+ if ( $('input[name=allsamples]').length ) {
+ if ($('input[name=samples]').length < 1) {
+ $('#hidden_inputs').append('<input type="hidden" name="samples" value="[' + samples.toString() + ']" />');
+ }
+ $('#hidden_inputs').append('<input type="hidden" name="vals" value="[' + vals.toString() + ']" />');
+ this_trait_vals = get_this_trait_vals(samples);
+ return color_by_trait(trait_sample_data);
+ } else{
+ sorted = vals.slice().sort(function(a,b){return a-b})
+ ranks = vals.slice().map(function(v){ return sorted.indexOf(v)+1 });
+ sample_ranks = []
+ for (_i = 0; _i < samples.length; _i++){
+ if (samples[_i] in trait_sample_data){
+ sample_ranks.push(samples[_i] + ":" + ranks[_i])
+ } else {
+ sample_ranks.push(null)
+ }
+ }
+
+ if ($('input[name=selecting_which_cofactor]').val() == "1"){
+ if ($('#cofactor1_type option:selected').val() == "symbol") {
+ unique_vals = [...new Set(vals)]
+ if (unique_vals.length > 45) {
+ alert("If displaying cofactor as symbol, please choose a trait with 45 or fewer distinct sample values.");
+ return false;
+ }
+ }
+ $('input[name=cofactor1_vals]').val(sample_vals)
+ $('input[name=ranked_cofactor1_vals]').val(sample_ranks)
+ } else if ($('input[name=selecting_which_cofactor]').val() == "2"){
+ if ($('#cofactor2_type option:selected').val() == "symbol") {
+ unique_vals = [...new Set(vals)]
+ if (unique_vals.length > 45) {
+ alert("If displaying cofactor as symbol, please choose a trait with 45 or fewer distinct sample values.");
+ return false;
+ }
+ }
+ $('input[name=cofactor2_vals]').val(sample_vals)
+ $('input[name=ranked_cofactor2_vals]').val(sample_ranks)
+ } else{
+ if ($('#cofactor3_type option:selected').val() == "symbol") {
+ unique_vals = [...new Set(vals)]
+ if (unique_vals.length > 45) {
+ alert("If displaying cofactor as symbol, please choose a trait with 45 or fewer distinct sample values.");
+ return false;
+ }
+ }
+ $('input[name=cofactor3_vals]').val(sample_vals)
+ $('input[name=ranked_cofactor3_vals]').val(sample_ranks)
+ }
+ populate_cofactor_info(trait_data[0])
+ chartupdatedata();
+ return false
}
- $('#hidden_inputs').append('<input type="hidden" name="vals" value="[' + vals.toString() + ']" />');
- this_trait_vals = get_this_trait_vals(samples);
- console.log("THE LENGTH IS:", $('input[name=vals]').length);
- return color_by_trait(trait_sample_data);
};
get_this_trait_vals = function(samples) {
@@ -170,7 +340,6 @@ get_this_trait_vals = function(samples) {
this_trait_vals.push(null);
}
}
- console.log("this_trait_vals:", this_trait_vals);
this_vals_json = '[' + this_trait_vals.toString() + ']';
return this_trait_vals;
};
@@ -201,27 +370,33 @@ process_traits = function(trait_data, textStatus, jqXHR) {
the_html = "<button id='back_to_collections' class='btn btn-inverse btn-small'>";
the_html += "<i class='icon-white icon-arrow-left'></i> Back </button>";
the_html += " <button id='submit' class='btn btn-primary btn-small'> Submit </button>";
- the_html += "<table class='table table-hover'>";
- the_html += "<thead><tr><th></th><th>Record</th><th>Data Set</th><th>Description</th><th>Mean</th></tr></thead>";
+ the_html += "<table id='collection_table' style='padding-top: 10px;' class='table table-hover'>";
+ the_html += "<thead><tr><th></th><th>Record</th><th>Data Set</th><th>Description</th></tr></thead>";
the_html += "<tbody>";
for (_i = 0, _len = trait_data.length; _i < _len; _i++) {
trait = trait_data[_i];
the_html += "<tr class='trait_line'>";
the_html += "<td class='select_trait'><input type='checkbox' name='selectCheck' class='checkbox edit_sample_checkbox'></td>";
- the_html += "<td class='trait'>" + trait.name + "</td>";
- the_html += "<td class='dataset'>" + trait.dataset + "</td>";
- the_html += "<td>" + trait.description + "</td>";
- the_html += "<td>" + (trait.mean || '&nbsp;') + "</td></tr>";
+ if ("abbreviation" in trait) {
+ the_html += "<td class='trait' data-display_name='" + trait.name + " - " + trait.abbreviation + "'>" + trait.name + "</td>";
+ } else if ("symbol" in trait) {
+ the_html += "<td class='trait' data-display_name='" + trait.name + " - " + trait.symbol + "'>" + trait.name + "</td>";
+ } else {
+ the_html += "<td class='trait' data-display_name='" + trait.name + "'>" + trait.name + "</td>";
+ }
+ the_html += "<td class='dataset' data-dataset='" + trait.dataset + "'>" + trait.dataset_name + "</td>";
+ the_html += "<td class='description'>" + trait.description + "</td>";
}
the_html += "</tbody>";
the_html += "</table>";
+ the_html += "<script type='text/javascript' src='/static/new/javascript/get_traits_from_collection.js'></script>"
$("#collections_holder").html(the_html);
return $('#collections_holder').colorbox.resize();
};
back_to_collections = function() {
- console.log("collection_list:", collection_list);
- $("#collections_holder").html(collection_list);
+ collection_list_html = $('#collection_list_html').html()
+ $("#collections_holder").html(collection_list_html);
$(document).on("click", ".collection_line", collection_click);
return $('#collections_holder').colorbox.resize();
};
@@ -229,5 +404,9 @@ back_to_collections = function() {
console.log("inside get_traits_from_collection");
$(".collection_line").on("click", collection_click);
$("#submit").on("click", submit_click);
-$(".trait").on("click", trait_click);
+if ($('#scatterplot2').length){
+ $(".trait_line").on("click", trait_row_click);
+} else {
+ $(".trait").on("click", trait_click);
+}
$("#back_to_collections").on("click", back_to_collections); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/histogram.coffee b/wqflask/wqflask/static/new/javascript/histogram.coffee
deleted file mode 100644
index 68d9b5a2..00000000
--- a/wqflask/wqflask/static/new/javascript/histogram.coffee
+++ /dev/null
@@ -1,141 +0,0 @@
-root = exports ? this
-
-class Histogram
- constructor: (@sample_list, @sample_group) ->
- @sort_by = "name"
- @format_count = d3.format(",.0f") #a formatter for counts
-
- @margin = {top: 10, right: 30, bottom: 30, left: 30}
- @plot_width = 960 - @margin.left - @margin.right
- @plot_height = 500 - @margin.top - @margin.bottom
-
- @x_buffer = @plot_width/20
- @y_buffer = @plot_height/20
- @plot_height -= @y_buffer
-
- @get_sample_vals(@sample_list)
- @redraw(@sample_vals)
-
- redraw: (@sample_vals) ->
- @y_min = d3.min(@sample_vals)
- @y_max = d3.max(@sample_vals) * 1.1
-
- @create_x_scale()
- @get_histogram_data()
- @create_y_scale()
-
- $("#histogram").empty()
- @svg = @create_svg()
- @create_graph()
-
- get_sample_vals: (sample_list) ->
- @sample_vals = (sample.value for sample in sample_list when sample.value != null)
-
- create_svg: () ->
- svg = d3.select("#histogram")
- .append("svg")
- .attr("class", "histogram")
- .attr("width", @plot_width + @margin.left + @margin.right)
- .attr("height", @plot_height + @margin.top + @margin.bottom)
- .append("g")
- .attr("transform", "translate(" + @margin.left + "," + @margin.top + ")")
-
- return svg
-
- create_x_scale: () ->
- console.log("min/max:", d3.min(@sample_vals) + "," + d3.max(@sample_vals))
- x0 = Math.max(-d3.min(@sample_vals), d3.max(@sample_vals))
- #if (d3.min(@sample_vals) < 0)
- # min_domain = d3.min(@sample_vals)
- #else
- # min_domain = 0
- @x_scale = d3.scale.linear()
- .domain([d3.min(@sample_vals), d3.max(@sample_vals)])
- .range([0, @plot_width])
- .nice()
-
- get_histogram_data: () ->
- console.log("sample_vals:", @sample_vals)
- n_bins = Math.sqrt(@sample_vals.length)
- @histogram_data = d3.layout.histogram()
- .bins(@x_scale.ticks(n_bins))(@sample_vals)
- console.log("histogram_data:", @histogram_data[0])
-
- create_y_scale: () ->
- @y_scale = d3.scale.linear()
- .domain([0, d3.max(@histogram_data, (d) => return d.y )])
- .range([@plot_height, 0])
-
- create_graph: () ->
- @add_x_axis()
- @add_y_axis()
- @add_bars()
-
- add_x_axis: () ->
- x_axis = d3.svg.axis()
- .scale(@x_scale)
- .orient("bottom");
-
- @svg.append("g")
- .attr("class", "x axis")
- .attr("transform", "translate(0," + @plot_height + ")")
- .call(x_axis)
-
- #add_y_axis: () ->
- # y_axis = d3.svg.axis()
- # .scale(@y_scale)
- # .orient("left")
- # .ticks(5)
- #
- # @svg.append("g")
- # .attr("class", "y axis")
- # #.attr("transform", "translate(0," + @plot_width + ")")
- # .call(y_axis)
-
-
- add_y_axis: () ->
- yAxis = d3.svg.axis()
- .scale(@y_scale)
- .orient("left")
- .ticks(5)
-
- @svg.append("g")
- .attr("class", "y axis")
- .call(yAxis)
- .append("text")
- .attr("transform", "rotate(-90)")
- .attr("y", 6)
- .attr("dy", ".71em")
- .style("text-anchor", "end")
-
- add_bars: () ->
- console.log("bar_width:", @x_scale(@histogram_data[0].dx))
- bar = @svg.selectAll(".bar")
- .data(@histogram_data)
- .enter().append("g")
- .attr("class", "bar")
- .attr("transform", (d) =>
- return "translate(" + @x_scale(d.x) + "," + @y_scale(d.y) + ")")
-
- rect_width = @x_scale(@histogram_data[0].x + @histogram_data[0].dx) -
- @x_scale(@histogram_data[0].x)
-
- bar.append("rect")
- .attr("x", 1)
- .attr("width", rect_width - 1)
- .attr("height", (d) =>
- return @plot_height - @y_scale(d.y)
- )
- bar.append("text")
- .attr("dy", ".75em")
- .attr("y", 6)
- .attr("x", rect_width / 2)
- .attr("text-anchor", "middle")
- .style("fill", "#fff")
- .text((d) =>
- bar_height = @plot_height - @y_scale(d.y)
- if bar_height > 20
- return @format_count(d.y)
- )
-
-root.Histogram = Histogram
diff --git a/wqflask/wqflask/static/new/javascript/init_genome_browser.js b/wqflask/wqflask/static/new/javascript/init_genome_browser.js
new file mode 100644
index 00000000..2552fb04
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/init_genome_browser.js
@@ -0,0 +1,84 @@
+console.log("THE FILES:", js_data.browser_files)
+
+snps_filename = "/browser_input?filename=" + js_data.browser_files[0]
+annot_filename = "/browser_input?filename=" + js_data.browser_files[1]
+
+localUrls =
+{
+ snps: snps_filename,
+ annotations: annot_filename
+};
+
+var coordinateSystem = js_data.chr_lengths
+
+var vscaleWidth = 90.0;
+var legendWidth = 150.0;
+
+if ('significant' in js_data) {
+ var significant_score = parseFloat(js_data.significant)
+} else {
+ var significant_score = js_data.max_score * 0.75
+}
+var score = { min: 0.0, max: js_data.max_score, sig: significant_score };
+var gwasPadding = { top: 35.0,
+ bottom: 35.0,
+ left: vscaleWidth,
+ right: legendWidth };
+var gwasHeight = 500.0;
+var config =
+{ score: score,
+ urls: localUrls,
+ tracks: {
+ gwas: {
+ trackHeight: gwasHeight,
+ padding: gwasPadding,
+ snps: {
+ radius: 3.75,
+ lineWidth: 1.0,
+ color: { outline: "#FFFFFF",
+ fill: "#00008B" },
+ pixelOffset: {x: 0.0, y: 0.0}
+ },
+ annotations: {
+ urls: {
+ url: "GeneNetwork"
+ },
+ radius: 5.5,
+ outline: "#000000",
+ snpColor: "#0074D9",
+ geneColor: "#FF4136"
+ },
+ score: score,
+ legend: {
+ fontSize: 14,
+ hPad: 0.1,
+ vPad: 0.2
+ },
+ vscale: {
+ color: "#000000",
+ hPad: 0.125,
+ numSteps: 3,
+ fonts: { labelSize: 18, scaleSize: 16 }
+ },
+ },
+ },
+ chrs: {
+ chrBG1: "#FFFFFF",
+ chrBG2: "#EEEEEE",
+ chrLabels: { fontSize: 16 },
+ },
+ // initialChrs: { left: "1", right: "5" }
+ coordinateSystem: coordinateSystem,
+};
+
+if (js_data.selected_chr != -1) {
+ config['initialChrs'] = {left: js_data.selected_chr, right: js_data.selected_chr}
+}
+
+$('#browser_tab').click(function() {
+ if ($('#gwas').length == 0){
+ GenomeBrowser.main(config)();
+ }
+});
+
+document.getElementById("controls").style.visibility = "visible"; \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/iplotMScanone_noeff.coffee b/wqflask/wqflask/static/new/javascript/iplotMScanone_noeff.coffee
deleted file mode 100644
index 63ded023..00000000
--- a/wqflask/wqflask/static/new/javascript/iplotMScanone_noeff.coffee
+++ /dev/null
@@ -1,193 +0,0 @@
-# iplotMScanone_noeff: image of lod curves linked to plot of lod curves
-# Karl W Broman
-
-iplotMScanone_noeff = (lod_data, times, chartOpts) ->
-
- # chartOpts start
- wleft = chartOpts?.wleft ? 1000 # width of left panels in pixels
- wright = chartOpts?.wright ? 500 # width of right panel in pixels
- htop = chartOpts?.htop ? 350 # height of top panels in pixels
- hbot = chartOpts?.hbot ? 350 # height of bottom panel in pixels
- margin = chartOpts?.margin ? {left:100, top:40, right:40, bottom: 40, inner:5} # margins in pixels (left, top, right, bottom, inner)
- axispos = chartOpts?.axispos ? {xtitle:25, ytitle:30, xlabel:5, ylabel:5} # position of axis labels in pixels (xtitle, ytitle, xlabel, ylabel)
- titlepos = chartOpts?.titlepos ? 20 # position of chart title in pixels
- chrGap = chartOpts?.chrGap ? 8 # gap between chromosomes in pixels
- darkrect = chartOpts?.darkrect ? "#C8C8C8" # color of darker background rectangle
- lightrect = chartOpts?.lightrect ? "#E6E6E6" # color of lighter background rectangle
- nullcolor = chartOpts?.nullcolor ? "#E6E6E6" # color for pixels with null values
- colors = chartOpts?.colors ? ["slateblue", "white", "crimson"] # heat map colors
- zlim = chartOpts?.zlim ? null # z-axis limits
- zthresh = chartOpts?.zthresh ? null # lower z-axis threshold for display in heat map
- lod_ylab = chartOpts?.lod_ylab ? "" # y-axis label for LOD heatmap (also used as x-axis label on effect plot)
- linecolor = chartOpts?.linecolor ? "darkslateblue" # color of lines
- linewidth = chartOpts?.linewidth ? 2 # width of lines
- nxticks = chartOpts?.nxticks ? 5 # no. ticks in x-axis on right-hand panel, if quantitative scale
- xticks = chartOpts?.xticks ? null # tick positions in x-axis on right-hand panel, if quantitative scale
- lod_labels = chartOpts?.lod_labels ? null # optional vector of strings, for LOD column labels
- # chartOpts end
- chartdivid = chartOpts?.chartdivid ? 'chart'
-
- totalh = htop + hbot + 2*(margin.top + margin.bottom)
- totalw = wleft + wright + 2*(margin.left + margin.right)
-
- # if quant scale, use times as labels; otherwise use lod_data.lodnames
- unless lod_labels?
- lod_labels = if times? then (formatAxis(times, extra_digits=1)(x) for x in times) else lod_data.lodnames
-
- mylodheatmap = lodheatmap().height(htop)
- .width(wleft)
- .margin(margin)
- .axispos(axispos)
- #.titlepos(titlepos)
- #.chrGap(chrGap)
- #.rectcolor(lightrect)
- #.colors(colors)
- #.zlim(zlim)
- #.zthresh(zthresh)
- #.quantScale(times)
- #.lod_labels(lod_labels)
- #.ylab(lod_ylab)
- #.nullcolor(nullcolor)
-
- svg = d3.select("div##{chartdivid}")
- .append("svg")
- .attr("height", totalh)
- .attr("width", totalw)
-
- g_heatmap = svg.append("g")
- .attr("id", "heatmap")
- .datum(lod_data)
- .call(mylodheatmap)
-
- mylodchart = lodchart().height(hbot)
- .width(wleft)
- .margin(margin)
- .axispos(axispos)
- .titlepos(titlepos)
- .chrGap(chrGap)
- .linecolor("none")
- .pad4heatmap(true)
- .darkrect(darkrect)
- .lightrect(lightrect)
- .ylim([0, d3.max(mylodheatmap.zlim())])
- .pointsAtMarkers(false)
-
- g_lodchart = svg.append("g")
- .attr("transform", "translate(0,#{htop+margin.top+margin.bottom})")
- .attr("id", "lodchart")
- .datum(lod_data)
- .call(mylodchart)
-
- # function for lod curve path
- lodcurve = (chr, lodcolumn) ->
- d3.svg.line()
- .x((d) -> mylodchart.xscale()[chr](d))
- .y((d,i) -> mylodchart.yscale()(Math.abs(lod_data.lodByChr[chr][i][lodcolumn])))
-
- # plot lod curves for selected lod column
- lodchart_curves = null
- plotLodCurve = (lodcolumn) ->
- g_lodchart.selectAll("g#curves").remove()
- lodchart_curves = g_lodchart.append("g").attr("id", "lodcurves")
- for chr in lod_data.chrnames
- lodchart_curves.append("path")
- .datum(lod_data.posByChr[chr[0]])
- .attr("d", lodcurve(chr[0], lodcolumn))
- .attr("stroke", linecolor)
- .attr("fill", "none")
- .attr("stroke-width", linewidth)
- .style("pointer-events", "none")
-
- # rearrange data for curves of time x LOD
- lod4curves = {data:[]}
- for pos of lod_data.pos
- y = (Math.abs(lod_data[lodcolumn][pos]) for lodcolumn in lod_data.lodnames)
- x = (+i for i of lod_data.lodnames)
- lod4curves.data.push({x:x, y:y})
-
- #mycurvechart = curvechart().height(htop)
- # .width(wright)
- # .margin(margin)
- # .axispos(axispos)
- # .titlepos(titlepos)
- # .xlab(lod_ylab)
- # .ylab("LOD score")
- # .strokecolor("none")
- # .rectcolor(lightrect)
- # .xlim([-0.5, lod_data.lodnames.length-0.5])
- # .ylim([0, d3.max(mylodheatmap.zlim())])
- # .nxticks(0)
- # .commonX(false)
- #
- #g_curvechart = svg.append("g")
- # .attr("transform", "translate(#{wleft+margin.top+margin.bottom},0)")
- # .attr("id", "curvechart")
- # .datum(lod4curves)
- # .call(mycurvechart)
- #
- ## add X axis
- #if times? # use quantitative axis
- # xscale = d3.scale.linear().range(mycurvechart.xscale().range())
- # xscale.domain([times[0], times[times.length-1]])
- # xticks = xticks ? xscale.ticks(nxticks)
- # curvechart_xaxis = g_curvechart.select("g.x.axis")
- # curvechart_xaxis.selectAll("empty")
- # .data(xticks)
- # .enter()
- # .append("line")
- # .attr("x1", (d) -> xscale(d))
- # .attr("x2", (d) -> xscale(d))
- # .attr("y1", margin.top)
- # .attr("y2", margin.top+htop)
- # .attr("fill", "none")
- # .attr("stroke", "white")
- # .attr("stroke-width", 1)
- # .style("pointer-events", "none")
- # curvechart_xaxis.selectAll("empty")
- # .data(xticks)
- # .enter()
- # .append("text")
- # .attr("x", (d) -> xscale(d))
- # .attr("y", margin.top+htop+axispos.xlabel)
- # .text((d) -> formatAxis(xticks)(d))
- #else # qualitative axis
- # curvechart_xaxis = g_curvechart.select("g.x.axis")
- # .selectAll("empty")
- # .data(lod_labels)
- # .enter()
- # .append("text")
- # .attr("id", (d,i) -> "xaxis#{i}")
- # .attr("x", (d,i) -> mycurvechart.xscale()(i))
- # .attr("y", margin.top+htop+axispos.xlabel)
- # .text((d) -> d)
- # .attr("opacity", 0)
-
- # hash for [chr][pos] -> posindex
- #posindex = {}
- #curindex = 0
- #for chr in lod_data.chrnames
- # posindex[chr] = {}
- # for pos in lod_data.posByChr[chr]
- # posindex[chr][pos] = curindex
- # curindex += 1
-
- #mycurvechart.curvesSelect()
- # .on("mouseover.panel", null)
- # .on("mouseout.panel", null)
- #
- mylodheatmap.cellSelect()
- .on "mouseover", (d) ->
- plotLodCurve(d.lodindex)
- g_lodchart.select("g.title text").text("#{lod_labels[d.lodindex]}")
- #g_curvechart.selectAll("path.path#{posindex[d.chr][d.pos]}").attr("stroke", linecolor)
- p = d3.format(".1f")(d.pos)
- #g_curvechart.select("g.title text").text("#{d.chr}@#{p}")
- #g_curvechart.select("text#xaxis#{d.lodindex}").attr("opacity", 1) unless times?
- .on "mouseout", (d) ->
- lodchart_curves.remove()
- g_lodchart.select("g.title text").text("")
- #g_curvechart.selectAll("path.path#{posindex[d.chr][d.pos]}").attr("stroke", null)
- #g_curvechart.select("g.title text").text("")
- #g_curvechart.select("text#xaxis#{d.lodindex}").attr("opacity", 0) unless times?
-
-iplotMScanone_noeff(lod_data = js_data.json_data) \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/lod_chart.coffee b/wqflask/wqflask/static/new/javascript/lod_chart.coffee
deleted file mode 100644
index 55ffdce0..00000000
--- a/wqflask/wqflask/static/new/javascript/lod_chart.coffee
+++ /dev/null
@@ -1,517 +0,0 @@
-lodchart = () ->
- width = 800
- height = 500
- margin = {left:60, top:40, right:40, bottom: 40, inner:5}
- axispos = {xtitle:25, ytitle:30, xlabel:5, ylabel:5}
- titlepos = 20
- manhattanPlot = false
- additive = false
- ylim = null
- additive_ylim = null
- nyticks = 5
- yticks = null
- additive_yticks = null
- chrGap = 8
- darkrect = "#F1F1F9"
- lightrect = "#FBFBFF"
- lodlinecolor = "darkslateblue"
- additivelinecolor = "red"
- linewidth = 2
- suggestivecolor = "gainsboro"
- significantcolor = "#EBC7C7"
- pointcolor = "#E9CFEC" # pink
- pointsize = 0 # default = no visible points at markers
- pointstroke = "black"
- title = ""
- xlab = "Chromosome"
- ylab = "LRS score"
- additive_ylab = "Additive Effect"
- rotate_ylab = null
- yscale = d3.scale.linear()
- additive_yscale = d3.scale.linear()
- xscale = null
- pad4heatmap = false
- lodcurve = null
- lodvarname = null
- markerSelect = null
- chrSelect = null
- pointsAtMarkers = true
-
-
- ## the main function
- chart = (selection) ->
- selection.each (data) ->
-
- #console.log("data:", data)
-
- if manhattanPlot == true
- pointcolor = "darkslateblue"
- pointsize = 2
-
- lodvarname = lodvarname ? data.lodnames[0]
- data[lodvarname] = (Math.abs(x) for x in data[lodvarname]) # take absolute values
- ylim = ylim ? [0, d3.max(data[lodvarname])]
- if additive
- data['additive'] = (Math.abs(x) for x in data['additive'])
- additive_ylim = additive_ylim ? [0, d3.max(data['additive'])]
-
- lodvarnum = data.lodnames.indexOf(lodvarname)
-
- # Select the svg element, if it exists.
- svg = d3.select(this).selectAll("svg").data([data])
-
- # Otherwise, create the skeletal chart.
- gEnter = svg.enter().append("svg").append("g")
-
- # Update the outer dimensions.
- svg.attr("width", width+margin.left+margin.right)
- .attr("height", height+margin.top+margin.bottom)
-
- # Update the inner dimensions.
- g = svg.select("g")
-
- # box
- g.append("rect")
- .attr("x", margin.left)
- .attr("y", margin.top)
- .attr("height", height)
- .attr("width", width)
- .attr("fill", darkrect)
- .attr("stroke", "none")
-
- yscale.domain(ylim)
- .range([height+margin.top, margin.top+margin.inner])
-
- # if yticks not provided, use nyticks to choose pretty ones
- yticks = yticks ? yscale.ticks(nyticks)
-
- #if data['additive'].length > 0
- if additive
- additive_yscale.domain(additive_ylim)
- .range([height+margin.top, margin.top+margin.inner + height/2])
-
- additive_yticks = additive_yticks ? additive_yscale.ticks(nyticks)
-
- # reorganize lod,pos by chromosomes
- reorgLodData(data, lodvarname)
-
- # add chromosome scales (for x-axis)
- data = chrscales(data, width, chrGap, margin.left, pad4heatmap)
- xscale = data.xscale
-
- # chr rectangles
- chrSelect =
- g.append("g").attr("class", "chrRect")
- .selectAll("empty")
- .data(data.chrnames)
- .enter()
- .append("rect")
- .attr("id", (d) -> "chrrect#{d[0]}")
- .attr("x", (d,i) ->
- return data.chrStart[i] if i==0 and pad4heatmap
- data.chrStart[i]-chrGap/2)
- .attr("width", (d,i) ->
- return data.chrEnd[i] - data.chrStart[i]+chrGap/2 if (i==0 or i+1 == data.chrnames.length) and pad4heatmap
- data.chrEnd[i] - data.chrStart[i]+chrGap)
- .attr("y", margin.top)
- .attr("height", height)
- .attr("fill", (d,i) ->
- return darkrect if i % 2
-
- lightrect)
- .attr("stroke", "none")
- .on("click", (d) ->
- console.log("d is:", d)
- redraw_plot(d)
- )
-
- # x-axis labels
- xaxis = g.append("g").attr("class", "x axis")
- xaxis.selectAll("empty")
- .data(data.chrnames)
- .enter()
- .append("text")
- .text((d) -> d[0])
- .attr("x", (d,i) -> (data.chrStart[i]+data.chrEnd[i])/2)
- .attr("y", margin.top+height+axispos.xlabel)
- .attr("dominant-baseline", "hanging")
- .attr("text-anchor", "middle")
- .attr("cursor", "pointer")
- .on("click", (d) ->
- redraw_plot(d)
- )
-
- xaxis.append("text").attr("class", "title")
- .attr("y", margin.top+height+axispos.xtitle)
- .attr("x", margin.left+width/2)
- .attr("fill", "slateblue")
- .text(xlab)
-
-
- redraw_plot = (chr_ob) ->
- #console.log("chr_name is:", chr_ob[0])
- #console.log("chr_length is:", chr_ob[1])
- $('#topchart').remove()
- $('#chart_container').append('<div class="qtlcharts" id="topchart"></div>')
- chr_plot = new Chr_Lod_Chart(600, 1200, chr_ob, manhattanPlot)
-
- # y-axis
- rotate_ylab = rotate_ylab ? (ylab.length > 1)
- yaxis = g.append("g").attr("class", "y axis")
- yaxis.selectAll("empty")
- .data(yticks)
- .enter()
- .append("line")
- .attr("y1", (d) -> yscale(d))
- .attr("y2", (d) -> yscale(d))
- .attr("x1", margin.left)
- .attr("x2", margin.left+7)
- .attr("fill", "none")
- .attr("stroke", "white")
- .attr("stroke-width", 1)
- .style("pointer-events", "none")
-
- yaxis.selectAll("empty")
- .data(yticks)
- .enter()
- .append("text")
- .attr("y", (d) -> yscale(d))
- .attr("x", margin.left-axispos.ylabel)
- .attr("fill", "blue")
- .attr("dominant-baseline", "middle")
- .attr("text-anchor", "end")
- .text((d) -> formatAxis(yticks)(d))
-
- yaxis.append("text").attr("class", "title")
- .attr("y", margin.top+height/2)
- .attr("x", margin.left-axispos.ytitle)
- .text(ylab)
- .attr("transform", if rotate_ylab then "rotate(270,#{margin.left-axispos.ytitle},#{margin.top+height/2})" else "")
- .attr("text-anchor", "middle")
- .attr("fill", "slateblue")
-
- #if data['additive'].length > 0
- if additive
- rotate_additive_ylab = rotate_additive_ylab ? (additive_ylab.length > 1)
- additive_yaxis = g.append("g").attr("class", "y axis")
- additive_yaxis.selectAll("empty")
- .data(additive_yticks)
- .enter()
- .append("line")
- .attr("y1", (d) -> additive_yscale(d))
- .attr("y2", (d) -> additive_yscale(d))
- .attr("x1", margin.left + width)
- .attr("x2", margin.left + width - 7)
- .attr("fill", "none")
- .attr("stroke", "white")
- .attr("stroke-width", 1)
- .style("pointer-events", "none")
-
- additive_yaxis.selectAll("empty")
- .data(additive_yticks)
- .enter()
- .append("text")
- .attr("y", (d) -> additive_yscale(d))
- .attr("x", (d) -> margin.left + width + axispos.ylabel + 20)
- .attr("fill", "green")
- .attr("dominant-baseline", "middle")
- .attr("text-anchor", "end")
- .text((d) -> formatAxis(additive_yticks)(d))
-
- additive_yaxis.append("text").attr("class", "title")
- .attr("y", margin.top+1.5*height)
- .attr("x", margin.left + width + axispos.ytitle)
- .text(additive_ylab)
- .attr("transform", if rotate_additive_ylab then "rotate(270,#{margin.left + width + axispos.ytitle}, #{margin.top+height*1.5})" else "")
- .attr("text-anchor", "middle")
- .attr("fill", "green")
-
- if 'suggestive' of data
- suggestive_bar = g.append("g").attr("class", "suggestive")
- suggestive_bar.selectAll("empty")
- .data([data.suggestive])
- .enter()
- .append("line")
- .attr("y1", (d) -> yscale(d))
- .attr("y2", (d) -> yscale(d))
- .attr("x1", margin.left)
- .attr("x2", margin.left+width)
- .attr("fill", "none")
- .attr("stroke", suggestivecolor)
- .attr("stroke-width", 5)
- .style("pointer-events", "none")
-
- suggestive_bar = g.append("g").attr("class", "significant")
- suggestive_bar.selectAll("empty")
- .data([data.significant])
- .enter()
- .append("line")
- .attr("y1", (d) -> yscale(d))
- .attr("y2", (d) -> yscale(d))
- .attr("x1", margin.left)
- .attr("x2", margin.left+width)
- .attr("fill", "none")
- .attr("stroke", significantcolor)
- .attr("stroke-width", 5)
- .style("pointer-events", "none")
-
- if manhattanPlot == false
- # lod curves by chr
- lodcurve = (chr, lodcolumn) ->
- d3.svg.line()
- .x((d) -> xscale[chr](d))
- .y((d,i) -> yscale(data.lodByChr[chr][i][lodcolumn]))
-
- if additive
- additivecurve = (chr, lodcolumn) ->
- d3.svg.line()
- .x((d) -> xscale[chr](d))
- .y((d,i) -> additive_yscale(data.additiveByChr[chr][i][lodcolumn]))
-
- curves = g.append("g").attr("id", "curves")
-
- for chr in data.chrnames
- if chr.indexOf(data['chr'])
- curves.append("path")
- .datum(data.posByChr[chr[0]])
- .attr("d", lodcurve(chr[0], lodvarnum))
- .attr("stroke", lodlinecolor)
- .attr("fill", "none")
- .attr("stroke-width", linewidth)
- .style("pointer-events", "none")
-
- if additive
- for chr in data.chrnames
- if chr.indexOf(data['chr'])
- curves.append("path")
- .datum(data.posByChr[chr[0]])
- .attr("d", additivecurve(chr[0], lodvarnum))
- .attr("stroke", additivelinecolor)
- .attr("fill", "none")
- .attr("stroke-width", 1)
- .style("pointer-events", "none")
-
- # points at markers
- console.log("before pointsize")
- if pointsize > 0
- console.log("pointsize > 0 !!!")
- markerpoints = g.append("g").attr("id", "markerpoints_visible")
- markerpoints.selectAll("empty")
- .data(data.markers)
- .enter()
- .append("circle")
- .attr("cx", (d) -> xscale[d.chr](d.pos))
- .attr("cy", (d) -> yscale(d.lod))
- .attr("r", pointsize)
- .attr("fill", pointcolor)
- .attr("stroke", pointstroke)
- .attr("pointer-events", "hidden")
-
- # title
- titlegrp = g.append("g").attr("class", "title")
- .append("text")
- .attr("x", margin.left+width/2)
- .attr("y", margin.top-titlepos)
- .text(title)
-
- # another box around edge
- g.append("rect")
- .attr("x", margin.left)
- .attr("y", margin.top)
- .attr("height", height)
- .attr("width", () ->
- return(data.chrEnd[-1..][0]-margin.left) if pad4heatmap
- data.chrEnd[-1..][0]-margin.left+chrGap/2)
- .attr("fill", "none")
- .attr("stroke", "black")
- .attr("stroke-width", "none")
-
- if pointsAtMarkers
- # these hidden points are what gets selected...a bit larger
- hiddenpoints = g.append("g").attr("id", "markerpoints_hidden")
-
- markertip = d3.tip()
- .attr('class', 'd3-tip')
- .html((d) ->
- [d.name, " LRS = #{d3.format('.2f')(d.lod)}"])
- .direction("e")
- .offset([0,10])
- svg.call(markertip)
-
- markerSelect =
- hiddenpoints.selectAll("empty")
- .data(data.markers)
- .enter()
- .append("circle")
- .attr("cx", (d) -> xscale[d.chr](d.pos))
- .attr("cy", (d) -> yscale(d.lod))
- .attr("id", (d) -> d.name)
- .attr("r", d3.max([pointsize*2, 3]))
- .attr("opacity", 0)
- .attr("fill", pointcolor)
- .attr("stroke", pointstroke)
- .attr("stroke-width", "1")
- .on "mouseover.paneltip", (d) ->
- d3.select(this).attr("opacity", 1)
- markertip.show(d)
- .on "mouseout.paneltip", ->
- d3.select(this).attr("opacity", 0)
- .call(markertip.hide)
-
- ## configuration parameters
- chart.width = (value) ->
- return width unless arguments.length
- width = value
- chart
-
- chart.height = (value) ->
- return height unless arguments.length
- height = value
- chart
-
- chart.margin = (value) ->
- return margin unless arguments.length
- margin = value
- chart
-
- chart.titlepos = (value) ->
- return titlepos unless arguments.length
- titlepos
- chart
-
- chart.axispos = (value) ->
- return axispos unless arguments.length
- axispos = value
- chart
-
- chart.manhattanPlot = (value) ->
- return manhattanPlot unless arguments.length
- manhattanPlot = value
- chart
-
- chart.ylim = (value) ->
- return ylim unless arguments.length
- ylim = value
- chart
-
- #if data['additive'].length > 0
- chart.additive_ylim = (value) ->
- return additive_ylim unless arguments.length
- additive_ylim = value
- chart
-
- chart.nyticks = (value) ->
- return nyticks unless arguments.length
- nyticks = value
- chart
-
- chart.yticks = (value) ->
- return yticks unless arguments.length
- yticks = value
- chart
-
- chart.chrGap = (value) ->
- return chrGap unless arguments.length
- chrGap = value
- chart
-
- chart.darkrect = (value) ->
- return darkrect unless arguments.length
- darkrect = value
- chart
-
- chart.lightrect = (value) ->
- return lightrect unless arguments.length
- lightrect = value
- chart
-
- chart.linecolor = (value) ->
- return linecolor unless arguments.length
- linecolor = value
- chart
-
- chart.linewidth = (value) ->
- return linewidth unless arguments.length
- linewidth = value
- chart
-
- chart.pointcolor = (value) ->
- return pointcolor unless arguments.length
- pointcolor = value
- chart
-
- chart.pointsize = (value) ->
- return pointsize unless arguments.length
- pointsize = value
- chart
-
- chart.pointstroke = (value) ->
- return pointstroke unless arguments.length
- pointstroke = value
- chart
-
- chart.title = (value) ->
- return title unless arguments.length
- title = value
- chart
-
- chart.xlab = (value) ->
- return xlab unless arguments.length
- xlab = value
- chart
-
- chart.ylab = (value) ->
- return ylab unless arguments.length
- ylab = value
- chart
-
- chart.rotate_ylab = (value) ->
- return rotate_ylab if !arguments.length
- rotate_ylab = value
- chart
-
- chart.lodvarname = (value) ->
- return lodvarname unless arguments.length
- lodvarname = value
- chart
-
- chart.pad4heatmap = (value) ->
- return pad4heatmap unless arguments.length
- pad4heatmap = value
- chart
-
- chart.pointsAtMarkers = (value) ->
- return pointsAtMarkers unless arguments.length
- pointsAtMarkers = value
- chart
-
- chart.yscale = () ->
- return yscale
-
- chart.additive = () ->
- return additive
-
- #if data['additive'].length > 0
- chart.additive_yscale = () ->
- return additive_yscale
-
- chart.xscale = () ->
- return xscale
-
- if manhattanPlot == false
- chart.lodcurve = () ->
- return lodcurve
-
- #if data['additive'].length > 0
- chart.additivecurve = () ->
- return additivecurve
-
- chart.markerSelect = () ->
- return markerSelect
-
- chart.chrSelect = () ->
- return chrSelect
-
- # return the chart function
- chart
-
diff --git a/wqflask/wqflask/static/new/javascript/lodheatmap.coffee b/wqflask/wqflask/static/new/javascript/lodheatmap.coffee
deleted file mode 100644
index 5f3716bc..00000000
--- a/wqflask/wqflask/static/new/javascript/lodheatmap.coffee
+++ /dev/null
@@ -1,265 +0,0 @@
-# lodheatmap: reuseable panel with heat map of LOD curves
-
-lodheatmap = () ->
- width = 1200
- height = 600
- margin = {left:100, top:40, right:40, bottom: 40}
- axispos = {xtitle:25, ytitle:30, xlabel:5, ylabel:5}
- chrGap = 8
- titlepos = 20
- rectcolor = d3.rgb(230, 230, 230)
- colors = ["slateblue", "black", "yellow"]
- title = ""
- xlab = "Chromosome"
- ylab = ""
- rotate_ylab = null
- zlim = null
- zthresh = null
- xscale = d3.scale.linear()
- yscale = d3.scale.linear()
- zscale = d3.scale.linear()
- cellSelect = null
-
- ## the main function
- chart = (selection) ->
- selection.each (data) ->
-
- data = reorgLodData(data)
- data = chrscales(data, width, chrGap, margin.left, true)
- xscale = data.xscale
-
- nlod = data.lodnames.length
- yscale.domain([-0.5, nlod-0.5]).range([margin.top+height, margin.top])
- rectHeight = yscale(0)-yscale(1)
-
- xLR = {}
- #console.log("data.posByChr:", data.posByChr["2"])
- #console.log("data.chrnames:", data.chrnames)
- for chr in data.chrnames
- #console.log("posByChr:", data.posByChr)
- #console.log("chr is:", chr)
- xLR[chr[0]] = getLeftRight(data.posByChr[chr[0]])
-
- #console.log("xLR:", xLR)
-
- # z-axis (color) limits; if not provided, make symmetric about 0
- zmin = 0
- zmax = 0
- for lodcol in data.lodnames
- extent = d3.extent(data[lodcol])
- zmin = extent[0] if extent[0] < zmin
- zmax = extent[1] if extent[1] > zmax
- zmax = -zmin if -zmin > zmax
- zlim = zlim ? [-zmax, 0, zmax]
- if zlim.length != colors.length
- console.log("zlim.length (#{zlim.length}) != colors.length (#{colors.length})")
- zscale.domain(zlim).range(colors)
-
- zthresh = zthresh ? zmin - 1
-
- data.cells = []
- for chr_ob in data.chrnames
- chr = chr_ob[0]
- #console.log("xLR[chr]:", xLR[chr])
- for pos, i in data.posByChr[chr]
- for lod,j in data.lodByChr[chr][i]
- if lod >= zthresh or lod <= -zthresh
- data.cells.push({z: lod, left: (xscale[chr](pos) + xscale[chr](xLR[chr][pos].left) )/2,
- right: (xscale[chr](pos) + xscale[chr](xLR[chr][pos].right) )/2, lodindex:j, chr:chr, pos:pos})
-
- # Select the svg element, if it exists.
- svg = d3.select(this).selectAll("svg").data([data])
-
- # Otherwise, create the skeletal chart.
- gEnter = svg.enter().append("svg").append("g")
-
- # Update the outer dimensions.
- svg.attr("width", width+margin.left+margin.right)
- .attr("height", height+margin.top+margin.bottom)
-
- g = svg.select("g")
-
- # boxes
- g.append("g").attr("id", "boxes").selectAll("empty")
- .data(data.chrnames)
- .enter()
- .append("rect")
- .attr("id", (d) -> "box#{d[0]}")
- .attr("x", (d,i) -> data.chrStart[i])
- .attr("y", (d) -> margin.top)
- .attr("height", height)
- .attr("width", (d,i) -> data.chrEnd[i] - data.chrStart[i])
- .attr("fill", rectcolor)
- .attr("stroke", "none")
-
- # title
- titlegrp = g.append("g").attr("class", "title")
- .append("text")
- .attr("x", margin.left + width/2)
- .attr("y", margin.top - titlepos)
- .text(title)
-
- # x-axis
- xaxis = g.append("g").attr("class", "x axis")
- xaxis.selectAll("empty")
- .data(data.chrnames)
- .enter()
- .append("text")
- .attr("x", (d,i) -> (data.chrStart[i] + data.chrEnd[i])/2)
- .attr("y", margin.top+height+axispos.xlabel)
- .text((d) -> d[0])
- xaxis.append("text").attr("class", "title")
- .attr("x", margin.left+width/2)
- .attr("y", margin.top+height+axispos.xtitle)
- .text(xlab)
-
- # y-axis
- rotate_ylab = rotate_ylab ? (ylab.length > 1)
- yaxis = g.append("g").attr("class", "y axis")
- yaxis.append("text").attr("class", "title")
- .attr("y", margin.top+height/2)
- .attr("x", margin.left-axispos.ytitle)
- .text(ylab)
- .attr("transform", if rotate_ylab then "rotate(270,#{margin.left-axispos.ytitle},#{margin.top+height/2})" else "")
- yaxis.selectAll("empty")
- .data(data.lodnames)
- .enter()
- .append("text")
- .attr("id", (d,i) -> "yaxis#{i}")
- .attr("y", (d,i) -> yscale(i))
- .attr("x", margin.left-axispos.ylabel)
- .text((d) -> d)
- .attr("opacity", 0)
-
- celltip = d3.tip()
- .attr('class', 'd3-tip')
- .html((d) ->
- z = d3.format(".2f")(Math.abs(d.z))
- p = d3.format(".1f")(d.pos)
- "#{d.chr}@#{p} &rarr; #{z}")
- .direction('e')
- .offset([0,10])
- svg.call(celltip)
-
- cells = g.append("g").attr("id", "cells")
- cellSelect =
- cells.selectAll("empty")
- .data(data.cells)
- .enter()
- .append("rect")
- .attr("x", (d) -> d.left)
- .attr("y", (d) -> yscale(d.lodindex)-rectHeight/2)
- .attr("width", (d) -> d.right - d.left)
- .attr("height", rectHeight)
- .attr("class", (d,i) -> "cell#{i}")
- .attr("fill", (d) -> zscale(d.z))
- .attr("stroke", "none")
- .attr("stroke-width", "1")
- .on("mouseover.paneltip", (d) ->
- yaxis.select("text#yaxis#{d.lodindex}").attr("opacity", 1)
- d3.select(this).attr("stroke", "black")
- celltip.show(d))
- .on("mouseout.paneltip", (d) ->
- yaxis.select("text#yaxis#{d.lodindex}").attr("opacity", 0)
- d3.select(this).attr("stroke", "none")
- celltip.hide())
-
- # boxes
- g.append("g").attr("id", "boxes").selectAll("empty")
- .data(data.chrnames)
- .enter()
- .append("rect")
- .attr("id", (d) -> "box#{d}")
- .attr("x", (d,i) -> data.chrStart[i])
- .attr("y", (d) -> margin.top)
- .attr("height", height)
- .attr("width", (d,i) -> data.chrEnd[i] - data.chrStart[i])
- .attr("fill", "none")
- .attr("stroke", "black")
- .attr("stroke-width", "none")
-
- ## configuration parameters
- chart.width = (value) ->
- return width if !arguments.length
- width = value
- chart
-
- chart.height = (value) ->
- return height if !arguments.length
- height = value
- chart
-
- chart.margin = (value) ->
- return margin if !arguments.length
- margin = value
- chart
-
- chart.axispos = (value) ->
- return axispos if !arguments.length
- axispos = value
- chart
-
- chart.titlepos = (value) ->
- return titlepos if !arguments.length
- titlepos
- chart
-
- chart.rectcolor = (value) ->
- return rectcolor if !arguments.length
- rectcolor = value
- chart
-
- chart.colors = (value) ->
- return colors if !arguments.length
- colors = value
- chart
-
- chart.title = (value) ->
- return title if !arguments.length
- title = value
- chart
-
- chart.xlab = (value) ->
- return xlab if !arguments.length
- xlab = value
- chart
-
- chart.ylab = (value) ->
- return ylab if !arguments.length
- ylab = value
- chart
-
- chart.rotate_ylab = (value) ->
- return rotate_ylab if !arguments.length
- rotate_ylab = value
- chart
-
- chart.zthresh = (value) ->
- return zthresh if !arguments.length
- zthresh = value
- chart
-
- chart.zlim = (value) ->
- return zlim if !arguments.length
- zlim = value
- chart
-
- chart.chrGap = (value) ->
- return chrGap if !arguments.length
- chrGap = value
- chart
-
- chart.xscale = () ->
- return xscale
-
- chart.yscale = () ->
- return yscale
-
- chart.zscale = () ->
- return zscale
-
- chart.cellSelect = () ->
- return cellSelect
-
- # return the chart function
- chart \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/lodheatmap.js b/wqflask/wqflask/static/new/javascript/lodheatmap.js
index 45feb75d..965a1d53 100644
--- a/wqflask/wqflask/static/new/javascript/lodheatmap.js
+++ b/wqflask/wqflask/static/new/javascript/lodheatmap.js
@@ -20,7 +20,7 @@ lodheatmap = function() {
chrGap = 8;
titlepos = 20;
rectcolor = d3.rgb(230, 230, 230);
- colors = ["slateblue", "black", "yellow"];
+ colors = ["slateblue", "white", "red"];
title = "";
xlab = "Chromosome";
ylab = "";
diff --git a/wqflask/wqflask/static/new/javascript/login.coffee b/wqflask/wqflask/static/new/javascript/login.coffee
deleted file mode 100644
index 15dafd9a..00000000
--- a/wqflask/wqflask/static/new/javascript/login.coffee
+++ /dev/null
@@ -1,42 +0,0 @@
-$ ->
-
-
- modalize = (event) ->
- event.preventDefault()
- console.log("in modal_replace:", $(this).attr("href"))
- $.colorbox(
- open: true
- href: this.href
- onComplete: ->
- $(".focused").focus()
- )
-
-
-
- $(document).one("click", ".modalize", modalize)
- console.log("Modalized click!!!")
-
- form_success = (data) ->
- $.colorbox(
- open: true
- html: data
- onComplete: ->
- $("form").on("submit", submit_form)
- )
-
-
- submit_form = (event) ->
- event.preventDefault()
- submit_to = $(this).attr('action')
- data = $(this).serialize()
- console.log("submit_to is:", submit_to)
- $.ajax(
- type: "POST"
- url: submit_to
- data: data
- dataType: "html"
- success: form_success
- )
-
-
- $("#colorbox form").on("submit", submit_form)
diff --git a/wqflask/wqflask/static/new/javascript/network_graph.js b/wqflask/wqflask/static/new/javascript/network_graph.js
index d1afd47c..4d507a18 100644
--- a/wqflask/wqflask/static/new/javascript/network_graph.js
+++ b/wqflask/wqflask/static/new/javascript/network_graph.js
@@ -1,18 +1,9 @@
-window.onload=function() {
- // id of Cytoscape Web container div
- //var div_id = "cytoscapeweb";
-
- var cy = cytoscape({
- container: $('#cytoscapeweb'), // container to render in
-
- elements: elements_list,
-
- style: [ // the stylesheet for the graph
+var default_style = [ // the stylesheet for the graph
{
selector: 'node',
style: {
'background-color': '#666',
- 'label': 'data(symbol)',
+ 'label': 'data(label)',
'font-size': 10
}
},
@@ -27,16 +18,28 @@ window.onload=function() {
'font-size': 8
}
}
- ],
-
- zoom: 12,
- layout: { name: 'circle',
+ ]
+
+var default_layout = { name: 'circle',
fit: true, // whether to fit the viewport to the graph
padding: 30 // the padding on fit
//idealEdgeLength: function( edge ){ return edge.data['correlation']*10; },
- },
+ }
+window.onload=function() {
+ // id of Cytoscape Web container div
+ //var div_id = "cytoscapeweb";
+
+ var cy = cytoscape({
+ container: $('#cytoscapeweb'), // container to render in
+
+ elements: elements_list,
+ style: default_style,
+
+ zoom: 12,
+ layout: default_layout,
+
zoomingEnabled: true,
userZoomingEnabled: true,
panningEnabled: true,
@@ -81,18 +84,19 @@ window.onload=function() {
function create_qtips(cy){
cy.nodes().qtip({
content: function(){
- gn_link = '<b>'+'<a href="http://gn2.genenetwork.org/show_trait?trait_id=' + this.data().id + '&dataset=' + this.data().dataset + '" >'+this.data().id +'</a>'+'</b><br>'
- ncbi_link = '<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids=' + this.data().geneid + '" >NCBI<a>'+'<br>'
- omim_link = '<a href="http://www.ncbi.nlm.nih.gov/omim/' + this.data().omim + '" >OMIM<a>'+'<br>'
- qtip_content = gn_link + ncbi_link + omim_link
+ qtip_content = ''
+ gn_link = '<b>'+'<a href="http://gn2.genenetwork.org/show_trait?trait_id=' + this.data().id.split(":")[0] + '&dataset=' + this.data().id.split(":")[1] + '" >'+this.data().id +'</a>'+'</b><br>'
+ qtip_content += gn_link
+ if (typeof(this.data().geneid) !== 'undefined'){
+ ncbi_link = '<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids=' + this.data().geneid + '" >NCBI<a>'+'<br>'
+ qtip_content += ncbi_link
+ }
+ if (typeof(this.data().omim) !== 'undefined'){
+ omim_link = '<a href="http://www.ncbi.nlm.nih.gov/omim/' + this.data().omim + '" >OMIM<a>'+'<br>'
+ qtip_content += omim_link
+ }
return qtip_content
- //return '<b>'+'<a href="http://gn2.genenetwork.org/show_trait?trait_id=' + this.data().id + '&dataset=' + this.data().dataset + '" >'+this.data().id +'<a>'+'</b>'
},
- // content: {
- // title: '<b>'+'<a href="http://gn2.genenetwork.org/show_trait?trait_id=' + this.target() + '&dataset=' + this.dataset() + '" >'+this.target() +'<a>'+'</b>',
- // text: this.target,
- // button: true
- // },
position: {
my: 'top center',
at: 'bottom center'
@@ -111,7 +115,7 @@ window.onload=function() {
correlation_line = '<b>Sample r: ' + this.data().correlation + '</b><br>'
p_value_line = 'Sample p(r): ' + this.data().p_value + '<br>'
overlap_line = 'Overlap: ' + this.data().overlap + '<br>'
- scatter_plot = '<a href="http://gn2-zach.genenetwork.org/corr_scatter_plot?dataset_1=' + this.data().source_dataset + '&dataset_2=' + this.data().target_dataset + '&trait_1=' + this.data().source + '&trait_2=' + this.data().target + '" >View Scatterplot</a>'
+ scatter_plot = '<a href="http://gn2-zach.genenetwork.org/corr_scatter_plot?dataset_1=' + this.data().source.split(":")[1] + '&dataset_2=' + this.data().target.split(":")[1] + '&trait_1=' + this.data().source.split(":")[0] + '&trait_2=' + this.data().target.split(":")[0] + '" >View Scatterplot</a>'
return correlation_line + p_value_line + overlap_line + scatter_plot
},
position: {
@@ -130,37 +134,41 @@ window.onload=function() {
create_qtips(cy)
- $('#slide').change(function() {
+ $('#neg_slide').change(function() {
eles.restore()
+
+ pos_slide_val = $('#pos_slide').val();
+ cy.$("node[max_corr > " + $(this).val() + "][max_corr < " + pos_slide_val + "]").remove();
+ cy.$("edge[correlation > " + $(this).val() + "][correlation < " + pos_slide_val + "]").remove();
+
+ cy.layout({ name: $('select[name=layout_select]').val(),
+ fit: true, // whether to fit the viewport to the graph
+ padding: 25 // the padding on fit
+ }).run();
- console.log(eles)
-
- // nodes_to_restore = eles.filter("node[max_corr >= " + $(this).val() + "], edge[correlation >= " + $(this).val() + "][correlation <= -" + $(this).val() + "]")
- // nodes_to_restore.restore()
-
- // edges_to_restore = eles.filter("edge[correlation >= " + $(this).val() + "][correlation <= -" + $(this).val() + "]")
- // edges_to_restore.restore()
-
- //cy.$("node[max_corr >= " + $(this).val() + "]").restore();
- //cy.$("edge[correlation >= " + $(this).val() + "][correlation <= -" + $(this).val() + "]").restore();
-
- cy.$("node[max_corr < " + $(this).val() + "]").remove();
- cy.$("edge[correlation < " + $(this).val() + "][correlation > -" + $(this).val() + "]").remove();
+ });
+ $('#pos_slide').change(function() {
+ eles.restore()
+
+ neg_slide_val = $('#neg_slide').val();
+ cy.$("node[max_corr > " + neg_slide_val +"][max_corr < " + $(this).val() + "]").remove();
+ cy.$("edge[correlation > " + neg_slide_val +"][correlation < " + $(this).val() + "]").remove();
cy.layout({ name: $('select[name=layout_select]').val(),
fit: true, // whether to fit the viewport to the graph
padding: 25 // the padding on fit
- });
+ }).run();
});
$('#reset_graph').click(function() {
eles.restore()
- $('#slide').val(0)
+ $('#pos_slide').val(0)
+ $('#neg_slide').val(0)
cy.layout({ name: $('select[name=layout_select]').val(),
fit: true, // whether to fit the viewport to the graph
padding: 25 // the padding on fit
- });
+ }).run();
});
$('select[name=focus_select]').change(function() {
@@ -172,26 +180,77 @@ window.onload=function() {
cy.layout({ name: $('select[name=layout_select]').val(),
fit: true, // whether to fit the viewport to the graph
padding: 25 // the padding on fit
- });
+ }).run();
});
$('select[name=layout_select]').change(function() {
layout_type = $(this).val()
- console.log("LAYOUT:", layout_type)
cy.layout({ name: layout_type,
fit: true, // whether to fit the viewport to the graph
padding: 25 // the padding on fit
- });
+ }).run();
});
+ $('select[name=font_size]').change(function() {
+ font_size = $(this).val()
+
+ new_style = default_style
+ new_style[0]['style']['font-size'] = parseInt(font_size)
+ cy.style().fromJson(new_style).update()
+ });
+ $('select[name=edge_width]').change(function() {
+ //eles.restore()
+
+ //ZS: This is needed, or else it alters the original object
+ orig_elements = JSON.parse(JSON.stringify(elements_list));
+
+ width_multiplier = $(this).val()
+ updated_elements = []
+ for (i=0; i < orig_elements.length; i++){
+ this_element = orig_elements[i]
+ if ('source' in this_element['data']) {
+ orig_width = this_element['data']['width']
+ this_element['data']['width'] = orig_width * width_multiplier
+ }
+ updated_elements.push(this_element)
+ }
+ cy.remove(eles)
+ cy.add(updated_elements)
+ cy.layout({ name: $('select[name=layout_select]').val(),
+ fit: true, // whether to fit the viewport to the graph
+ padding: 25 // the padding on fit
+ }).run();
+ });
+
+ $('select[name=edge_width]').change(function() {
+ //eles.restore()
+
+ //ZS: This is needed, or else it alters the original object
+ orig_elements = JSON.parse(JSON.stringify(elements_list));
+
+ width_multiplier = $(this).val()
+ updated_elements = []
+ for (i=0; i < orig_elements.length; i++){
+ this_element = orig_elements[i]
+ if ('source' in this_element['data']) {
+ orig_width = this_element['data']['width']
+ this_element['data']['width'] = orig_width * width_multiplier
+ }
+ updated_elements.push(this_element)
+ }
+ cy.remove(eles)
+ cy.add(updated_elements)
+ cy.layout({ name: $('select[name=layout_select]').val(),
+ fit: true, // whether to fit the viewport to the graph
+ padding: 25 // the padding on fit
+ }).run();
+ });
+
$("a#image_link").click(function(e) {
var pngData = cy.png();
$(this).attr('href', pngData);
$(this).attr('download', 'network_graph.png');
-
- console.log("TESTING:", image_link)
-
});
diff --git a/wqflask/wqflask/static/new/javascript/panelutil.coffee b/wqflask/wqflask/static/new/javascript/panelutil.coffee
deleted file mode 100644
index f7b51457..00000000
--- a/wqflask/wqflask/static/new/javascript/panelutil.coffee
+++ /dev/null
@@ -1,356 +0,0 @@
-# A variety of utility functions used by the different panel functions
-
-# determine rounding of axis labels
-formatAxis = (d, extra_digits=0) ->
- d = d[1] - d[0]
- ndig = Math.floor( Math.log(d % 10) / Math.log(10) )
- ndig = 0 if ndig > 0
- ndig = Math.abs(ndig) + extra_digits
- d3.format(".#{ndig}f")
-
-# unique values of array (ignore nulls)
-unique = (x) ->
- output = {}
- output[v] = v for v in x when v
- output[v] for v of output
-
-# Pull out a variable (column) from a two-dimensional array
-pullVarAsArray = (data, variable) ->
- v = []
- for i of data
- v = v.concat data[i][variable]
- v
-
-
-# reorganize lod/pos by chromosome
-# lodvarname==null -> case for multiple LOD columns (lodheatmap)
-# lodvarname provided -> case for one LOD column (lodchart)
-reorgLodData = (data, lodvarname=null) ->
- data.posByChr = {}
- data.lodByChr = {}
-
- for chr,i in data.chrnames
- if data.chr.indexOf(chr[0])
- data.posByChr[chr[0]] = []
- data.lodByChr[chr[0]] = []
- for pos, j in data.pos
- if data.chr[j].toString() == chr[0]
- data.posByChr[chr[0]].push(pos)
- data.lodnames = [data.lodnames] unless Array.isArray(data.lodnames)
- lodval = (data[lodcolumn][j] for lodcolumn in data.lodnames)
- data.lodByChr[chr[0]].push(lodval)
-
- #console.log("data.posByChr:", data.posByChr)
-
- if lodvarname?
- data.markers = []
- for marker,i in data.markernames
- if marker != ""
- data.markers.push({name:marker, chr:data.chr[i], pos:data.pos[i], lod:data[lodvarname][i]})
-
- data
-
-# calculate chromosome start/end + scales, for heat map
-chrscales = (data, width, chrGap, leftMargin, pad4heatmap) ->
- # start and end of chromosome positions
- chrStart = []
- chrEnd = []
- chrLength = []
- totalChrLength = 0
- maxd = 0
- for chr in data.chrnames
- d = maxdiff(data.posByChr[chr[0]])
- maxd = d if d > maxd
-
- rng = d3.extent(data.posByChr[chr[0]])
- chrStart.push(rng[0])
- chrEnd.push(rng[1])
- L = rng[1] - rng[0]
- chrLength.push(L)
- totalChrLength += L
-
- # adjust lengths for heatmap
- if pad4heatmap
- data.recwidth = maxd
- chrStart = chrStart.map (x) -> x-maxd/2
- chrEnd = chrEnd.map (x) -> x+maxd/2
- chrLength = chrLength.map (x) -> x+maxd
- totalChrLength += (chrLength.length*maxd)
-
- # break up x axis into chromosomes by length, with gaps
- data.chrStart = []
- data.chrEnd = []
- cur = leftMargin
- cur += chrGap/2 unless pad4heatmap
- data.xscale = {}
- for chr,i in data.chrnames
- data.chrStart.push(cur)
- w = Math.round((width-chrGap*(data.chrnames.length-pad4heatmap))/totalChrLength*chrLength[i])
- data.chrEnd.push(cur + w)
- cur = data.chrEnd[i] + chrGap
- # x-axis scales, by chromosome
- data.xscale[chr[0]] = d3.scale.linear()
- .domain([chrStart[i], chrEnd[i]])
- .range([data.chrStart[i], data.chrEnd[i]])
-
- # return data with new stuff added
- data
-
-
-# reorganize lod/pos by chromosome
-# lodvarname==null -> case for multiple LOD columns (lodheatmap)
-# lodvarname provided -> case for one LOD column (lodchart)
-#reorgLodData = (data, lodvarname=null) ->
-# data.posByChr = {}
-# data.lodByChr = {}
-#
-# #console.log("data.chr", data.chr)
-# #console.log("data.chrnames:", data.chrnames)
-# the_chr = "0"
-# for chr,i in data.chrnames
-# data.posByChr[chr] = []
-# data.lodByChr[chr] = []
-# for pos,j in data.pos
-# console.log("data.chr[j][0]:", data.chr[j][0])
-# if data.chr[j][0] == chr
-# console.log("IS EQUAL")
-# data.posByChr[chr].push(pos)
-# data.lodnames = [data.lodnames] unless Array.isArray(data.lodnames)
-# lodval = (data[lodcolumn][j] for lodcolumn in data.lodnames)
-# data.lodByChr[chr].push(lodval)
-#
-# if lodvarname?
-# data.markers = []
-# for marker,i in data.markernames
-# if marker != ""
-# data.markers.push({name:marker, chr:data.chr[i][0], pos:data.pos[i], lod:data[lodvarname][i]})
-#
-# data
-
-# calculate chromosome start/end + scales, for heat map
-#chrscales = (data, width, chrGap, leftMargin, pad4heatmap) ->
-# # start and end of chromosome positions
-# chrStart = []
-# chrEnd = []
-# chrLength = []
-# totalChrLength = 0
-# maxd = 0
-# for chr in data.chrnames
-# d = maxdiff(data.posByChr[chr])
-# maxd = d if d > maxd
-#
-# rng = d3.extent(data.posByChr[chr])
-# chrStart.push(rng[0])
-# chrEnd.push(rng[1])
-# L = rng[1] - rng[0]
-# chrLength.push(L)
-# totalChrLength += L
-#
-# # adjust lengths for heatmap
-# if pad4heatmap
-# data.recwidth = maxd
-# chrStart = chrStart.map (x) -> x-maxd/2
-# chrEnd = chrEnd.map (x) -> x+maxd/2
-# chrLength = chrLength.map (x) -> x+maxd
-# totalChrLength += (chrLength.length*maxd)
-#
-# # break up x axis into chromosomes by length, with gaps
-# data.chrStart = []
-# data.chrEnd = []
-# cur = leftMargin
-# cur += chrGap/2 unless pad4heatmap
-# data.xscale = {}
-# for chr,i in data.chrnames
-# data.chrStart.push(cur)
-# w = Math.round((width-chrGap*(data.chrnames.length-pad4heatmap))/totalChrLength*chrLength[i])
-# data.chrEnd.push(cur + w)
-# cur = data.chrEnd[i] + chrGap
-# # x-axis scales, by chromosome
-# data.xscale[chr] = d3.scale.linear()
-# .domain([chrStart[i], chrEnd[i]])
-# .range([data.chrStart[i], data.chrEnd[i]])
-#
-# # return data with new stuff added
-# data
-
-# Select a set of categorical colors
-# ngroup is positive integer
-# palette = "dark" or "pastel"
-selectGroupColors = (ngroup, palette) ->
- return [] if ngroup == 0
-
- if palette == "dark"
- return ["slateblue"] if ngroup == 1
- return ["MediumVioletRed", "slateblue"] if ngroup == 2
- return colorbrewer.Set1[ngroup] if ngroup <= 9
- return d3.scale.category20().range()[0...ngroup]
- else
- return ["#bebebe"] if ngroup == 1
- return ["lightpink", "lightblue"] if ngroup == 2
- return colorbrewer.Pastel1[ngroup] if ngroup <= 9
- # below is rough attempt to make _big_ pastel palette
- return ["#8fc7f4", "#fed7f8", "#ffbf8e", "#fffbb8",
- "#8ce08c", "#d8ffca", "#f68788", "#ffd8d6",
- "#d4a7fd", "#f5f0f5", "#cc968b", "#f4dcd4",
- "#f3b7f2", "#f7f6f2", "#bfbfbf", "#f7f7f7",
- "#fcfd82", "#fbfbcd", "#87feff", "#defaf5"][0...ngroup]
-
-# expand element/array (e.g., of colors) to a given length
-# single elment -> array, then repeated to length n
-expand2vector = (input, n) ->
- return input unless input? # return null if null
- return input if Array.isArray(input) and input.length >= n
- input = [input] unless Array.isArray(input)
- input = (input[0] for i of d3.range(n)) if input.length == 1 and n > 1
- input
-
-# median of a vector
-median = (x) ->
- return null if !x?
- n = x.length
- x.sort((a,b) -> a-b)
- if n % 2 == 1
- return x[(n-1)/2]
- (x[n/2] + x[(n/2)-1])/2
-
-# given a vector of x's, return hash with values to left and right, and the differences
-getLeftRight = (x) ->
- n = x.length
- x.sort( (a,b) -> a-b )
-
- xdif = []
- result = {}
- for v in x
- result[v] = {}
-
- for i in [1...n]
- #console.log("result:", result)
- xdif.push(x[i]-x[i-1])
- result[x[i]].left = x[i-1]
- for i in [0...(n-1)]
- result[x[i]].right = x[i+1]
-
- xdif = median(xdif)
- result.mediandiff = xdif
-
- result[x[0]].left = x[0]-xdif
- result[x[n-1]].right = x[n-1]+xdif
- result.extent = [x[0]-xdif/2, x[n-1]+xdif/2]
-
- result
-
-# maximum difference between adjacent values in a vector
-maxdiff = (x) ->
- return null if x.length < 2
- result = x[1] - x[0]
- return result if x.length < 3
- for i in [2...x.length]
- d = x[i] - x[i-1]
- result = d if d > result
- result
-
-# matrix extent, min max
-matrixMin = (mat) ->
- result = mat[0][0]
- for i of mat
- for j of mat[i]
- result = mat[i][j] if result > mat[i][j]
- result
-
-matrixMax = (mat) ->
- result = mat[0][0]
- for i of mat
- for j of mat[i]
- result = mat[i][j] if result < mat[i][j]
- result
-
-matrixMaxAbs = (mat) ->
- result = Math.abs(mat[0][0])
- for i of mat
- for j of mat[i]
- result = Math.abs(mat[i][j]) if result < mat[i][j]
- result
-
-matrixExtent = (mat) -> [matrixMin(mat), matrixMax(mat)]
-
-d3.selection.prototype.moveToFront = () ->
- this.each () -> this.parentNode.appendChild(this)
-
-d3.selection.prototype.moveToBack = () ->
- this.each () ->
- firstChild = this.parentNode.firstchild
- this.parentNode.insertBefore(this, firstChild) if firstChild
-
-forceAsArray = (x) ->
- return x unless x? # if null, return null
- return x if Array.isArray(x)
- [x]
-
-# any values in vec that appear in missing are made null
-missing2null = (vec, missingvalues=['NA', '']) ->
- vec.map (value) -> if missingvalues.indexOf(value) > -1 then null else value
-
-# display error at top of page
-displayError = (message) ->
- if d3.select("div.error").empty() # no errors yet
- d3.select("body")
- .insert("div", ":first-child")
- .attr("class", "error")
- d3.select("div.error")
- .append("p")
- .text(message)
-
-# sum values in an array
-sumArray = (vec) -> (vec.reduce (a,b) -> a+b)
-
-# calculate cross-tabulation
-calc_crosstab = (data) ->
- nrow = data.ycat.length
- ncol = data.xcat.length
-
- result = ((0 for col in [0..ncol]) for row in [0..nrow]) # matrix of 0's
-
- # count things up
- for i of data.x
- result[data.y[i]][data.x[i]] += 1
-
- # row and column sums
- rs = rowSums(result)
- cs = colSums(result)
-
- # fill in column sums
- for i in [0...ncol]
- result[nrow][i] = cs[i]
-
- # fill in row sums
- for i in [0...nrow]
- result[i][ncol] = rs[i]
-
- # fill in total
- result[nrow][ncol] = sumArray(rs)
-
- result
-
-# rowSums: the sums for each row
-rowSums = (mat) -> (sumArray(x) for x in mat)
-
-# transpose: matrix transpose
-transpose = (mat) -> ((mat[i][j] for i in [0...mat.length]) for j in [0...mat[0].length])
-
-# colSums = the sums for each column
-colSums = (mat) -> rowSums(transpose(mat))
-
-# log base 2
-log2 = (x) ->
- return(x) unless x?
- Math.log(x)/Math.log(2.0)
-
-# log base 10
-log10 = (x) ->
- return(x) unless x?
- Math.log(x)/Math.log(10.0)
-
-# absolute value, preserving nulls
-abs = (x) ->
- return(x) unless x?
- Math.abs(x) \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/password_strength.coffee b/wqflask/wqflask/static/new/javascript/password_strength.coffee
deleted file mode 100644
index 0bee5836..00000000
--- a/wqflask/wqflask/static/new/javascript/password_strength.coffee
+++ /dev/null
@@ -1,33 +0,0 @@
-$ ->
-
-
- $("#password").keyup ->
- passtext = $(this).val()
- result = zxcvbn(passtext)
- if passtext.length < 6
- $("#password_strength").html('')
- $("#password_alert").fadeOut()
- else
- word = word_score(result.score)
- crack_time = result.crack_time_display
- if crack_time == "instant"
- crack_time = "a second"
- display = "This is #{word} password. It can be cracked in #{crack_time}."
- $("#password_strength").html(display)
- $("#password_alert").fadeIn()
-
-
-
- word_score = (num_score) ->
- num_score = parseInt(num_score)
- console.log("num_score is:", num_score)
- mapping =
- 0: "a <strong>terrible</strong>"
- 1: "a <strong>bad</strong>"
- 2: "a <strong>mediocre</strong>"
- 3: "a <strong>good</strong>"
- 4: "an <strong>excellent</strong>"
- console.log("mapping is:", mapping)
- result = mapping[num_score]
- console.log("result is:", result)
- return result \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/plotly_probability_plot.js b/wqflask/wqflask/static/new/javascript/plotly_probability_plot.js
new file mode 100644
index 00000000..e8b7ab83
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/plotly_probability_plot.js
@@ -0,0 +1,295 @@
+// Generated by CoffeeScript 1.9.2
+(function() {
+ var get_z_scores, redraw_prob_plot, root;
+
+ root = typeof exports !== "undefined" && exports !== null ? exports : this;
+
+ get_z_scores = function(n) {
+ var i, j, osm_uniform, ref, x;
+ osm_uniform = new Array(n);
+ osm_uniform[n - 1] = Math.pow(0.5, 1.0 / n);
+ osm_uniform[0] = 1 - osm_uniform[n - 1];
+ for (i = j = 1, ref = n - 2; 1 <= ref ? j <= ref : j >= ref; i = 1 <= ref ? ++j : --j) {
+ osm_uniform[i] = (i + 1 - 0.3175) / (n + 0.365);
+ }
+ return (function() {
+ var k, len, results;
+ results = [];
+ for (k = 0, len = osm_uniform.length; k < len; k++) {
+ x = osm_uniform[k];
+ results.push(jStat.normal.inv(x, 0, 1));
+ }
+ return results;
+ })();
+ };
+
+ redraw_prob_plot = function(samples, sample_group) {
+ var container, h, margin, totalh, totalw, w;
+ h = 370;
+ w = 600;
+ margin = {
+ left: 60,
+ top: 40,
+ right: 40,
+ bottom: 40,
+ inner: 5
+ };
+ totalh = h + margin.top + margin.bottom;
+ totalw = w + margin.left + margin.right;
+ container = $("#prob_plot_container");
+ container.width(totalw);
+ container.height(totalh);
+ var W, all_samples, chart, data, intercept, make_data, names, pvalue, pvalue_str, slope, sorted_names, sorted_values, sw_result, test_str, x, z_scores;
+ all_samples = samples[sample_group];
+ names = (function() {
+ var j, len, ref, results;
+ ref = _.keys(all_samples);
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ x = ref[j];
+ if (all_samples[x] !== null) {
+ results.push(x);
+ }
+ }
+ return results;
+ })();
+ sorted_names = names.sort(function(x, y) {
+ return all_samples[x].value - all_samples[y].value;
+ });
+ max_decimals = 0
+ sorted_values = (function() {
+ var j, len, results;
+ results = [];
+ for (j = 0, len = sorted_names.length; j < len; j++) {
+ x = sorted_names[j];
+ results.push(all_samples[x].value);
+ if (all_samples[x].value.countDecimals() > max_decimals) {
+ max_decimals = all_samples[x].value.countDecimals()-1
+ }
+ }
+ return results;
+ })();
+ //ZS: 0.1 indicates buffer, increase to increase buffer
+ y_domain = [sorted_values[0] - (sorted_values.slice(-1)[0] - sorted_values[0])*0.1, sorted_values.slice(-1)[0] + (sorted_values.slice(-1)[0] - sorted_values[0])*0.1]
+ //sw_result = ShapiroWilkW(sorted_values);
+ //W = sw_result.w.toFixed(3);
+ //pvalue = sw_result.p.toFixed(3);
+ //pvalue_str = pvalue > 0.05 ? pvalue.toString() : "<span style='color:red'>" + pvalue + "</span>";
+ //test_str = "Shapiro-Wilk test statistic is " + W + " (p = " + pvalue_str + ")";
+ z_scores = get_z_scores(sorted_values.length);
+ //ZS: 0.1 indicates buffer, increase to increase buffer
+ x_domain = [z_scores[0] - (z_scores.slice(-1)[0] - z_scores[0])*0.1, z_scores.slice(-1)[0] + (z_scores.slice(-1)[0] - z_scores[0])*0.1]
+ slope = jStat.stdev(sorted_values);
+ intercept = jStat.mean(sorted_values);
+ make_data = function(group_name) {
+ var sample, value, z_score;
+ return {
+ key: js_data.sample_group_types[group_name],
+ slope: slope,
+ intercept: intercept,
+ values: (function() {
+ var j, len, ref, ref1, results;
+ ref = _.zip(get_z_scores(sorted_values.length), sorted_values, sorted_names);
+ results = [];
+ for (j = 0, len = ref.length; j < len; j++) {
+ ref1 = ref[j], z_score = ref1[0], value = ref1[1], sample = ref1[2];
+ if (sample in samples[group_name]) {
+ results.push({
+ x: z_score,
+ y: value,
+ name: sample
+ });
+ }
+ }
+ return results;
+ })()
+ };
+ };
+ data = [make_data('samples_primary'), make_data('samples_other'), make_data('samples_all')];
+ x_values = {}
+ y_values = {}
+ point_names = {}
+ for (i = 0; i < 3; i++){
+ these_x_values = []
+ these_y_values = []
+ these_names = []
+ for (j = 0; j < data[i].values.length; j++){
+ these_x_values.push(data[i].values[j].x)
+ these_y_values.push(data[i].values[j].y)
+ these_names.push(data[i].values[j].name)
+ }
+ if (i == 0){
+ x_values['samples_primary'] = these_x_values
+ y_values['samples_primary'] = these_y_values
+ point_names['samples_primary'] = these_names
+ } else if (i == 1) {
+ x_values['samples_other'] = these_x_values
+ y_values['samples_other'] = these_y_values
+ point_names['samples_other'] = these_names
+ } else {
+ x_values['samples_all'] = these_x_values
+ y_values['samples_all'] = these_y_values
+ point_names['samples_all'] = these_names
+ }
+ }
+
+ intercept_line = {}
+
+ if (sample_group == "samples_primary"){
+ first_x = Math.floor(x_values['samples_primary'][0])
+ first_x = first_x - first_x*0.1
+ last_x = Math.ceil(x_values['samples_primary'][x_values['samples_primary'].length - 1])
+ last_x = last_x + last_x*0.1
+ first_value = data[0].intercept + data[0].slope * first_x
+ last_value = data[0].intercept + data[0].slope * last_x
+ intercept_line['samples_primary'] = [[first_x, last_x], [first_value, last_value]]
+ } else if (sample_group == "samples_other") {
+ first_x = Math.floor(x_values['samples_other'][0])
+ first_x = first_x - first_x*0.1
+ last_x = Math.ceil(x_values['samples_other'][x_values['samples_other'].length - 1])
+ last_x = last_x + last_x*0.1
+ first_value = data[1].intercept + data[1].slope * first_x
+ last_value = data[1].intercept + data[1].slope * last_x
+ intercept_line['samples_other'] = [[first_x, last_x], [first_value, last_value]]
+ } else {
+ first_x = Math.floor(x_values['samples_all'][0])
+ first_x = first_x - first_x*0.1
+ last_x = Math.ceil(x_values['samples_all'][x_values['samples_all'].length - 1])
+ first_value = data[2].intercept + data[2].slope * first_x
+ last_x = last_x + last_x*0.1
+ last_value = data[2].intercept + data[2].slope * last_x
+ intercept_line['samples_all'] = [[first_x, last_x], [first_value, last_value]]
+ }
+
+ val_range = Math.max(...y_values['samples_all']) - Math.min(...y_values['samples_all'])
+ if (val_range < 4){
+ tick_digits = '.1f'
+ } else if (val_range < 0.4) {
+ tick_digits = '.2f'
+ } else {
+ tick_digits = 'f'
+ }
+
+ var layout = {
+ title: "<b>Trait " + js_data.trait_id + ": " + js_data.short_description + "</b>",
+ margin: {
+ l: 100,
+ r: 30,
+ t: 80,
+ b: 60
+ },
+ xaxis: {
+ title: "<b>Normal Theoretical Quantiles</b>",
+ range: [first_x, last_x],
+ zeroline: false,
+ visible: true,
+ linecolor: 'black',
+ linewidth: 1,
+ titlefont: {
+ family: "arial",
+ size: 20
+ },
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ }
+ },
+ yaxis: {
+ zeroline: false,
+ visible: true,
+ linecolor: 'black',
+ linewidth: 1,
+ titlefont: {
+ family: "arial",
+ size: 20
+ },
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ },
+ tickformat: tick_digits,
+ automargin: true
+ },
+ hovermode: "closest"
+ }
+
+ var primary_trace = {
+ x: x_values['samples_primary'],
+ y: y_values['samples_primary'],
+ mode: 'markers',
+ type: 'scatter',
+ name: 'Samples',
+ text: point_names['samples_primary'],
+ marker: {
+ color: 'blue',
+ width: 6
+ }
+ }
+ if ("samples_other" in js_data.sample_group_types) {
+ var other_trace = {
+ x: x_values['samples_other'],
+ y: y_values['samples_other'],
+ mode: 'markers',
+ type: 'scatter',
+ name: js_data.sample_group_types['samples_other'],
+ text: point_names['samples_other'],
+ marker: {
+ color: 'blue',
+ width: 6
+ }
+ }
+ }
+
+ if (sample_group == "samples_primary"){
+ var primary_intercept_trace = {
+ x: intercept_line['samples_primary'][0],
+ y: intercept_line['samples_primary'][1],
+ mode: 'lines',
+ type: 'scatter',
+ name: 'Normal Function',
+ line: {
+ color: 'black',
+ width: 1
+ }
+ }
+ } else if (sample_group == "samples_other"){
+ var other_intercept_trace = {
+ x: intercept_line['samples_other'][0],
+ y: intercept_line['samples_other'][1],
+ mode: 'lines',
+ type: 'scatter',
+ name: 'Normal Function',
+ line: {
+ color: 'black',
+ width: 1
+ }
+ }
+ } else {
+ var all_intercept_trace = {
+ x: intercept_line['samples_all'][0],
+ y: intercept_line['samples_all'][1],
+ mode: 'lines',
+ type: 'scatter',
+ name: 'Normal Function',
+ line: {
+ color: 'black',
+ width: 1
+ }
+ }
+ }
+
+ if (sample_group == "samples_primary"){
+ var data = [primary_intercept_trace, primary_trace]
+ } else if (sample_group == "samples_other"){
+ var data = [other_intercept_trace, other_trace]
+ } else {
+ var data = [all_intercept_trace, primary_trace, other_trace]
+ }
+
+ console.log("TRACE:", data)
+ Plotly.newPlot('prob_plot_div', data, layout, root.modebar_options)
+ };
+
+ root.redraw_prob_plot_impl = redraw_prob_plot;
+
+}).call(this);
diff --git a/wqflask/wqflask/static/new/javascript/scatter-matrix.js b/wqflask/wqflask/static/new/javascript/scatter-matrix.js
index 278a93bc..31cb384b 100644
--- a/wqflask/wqflask/static/new/javascript/scatter-matrix.js
+++ b/wqflask/wqflask/static/new/javascript/scatter-matrix.js
@@ -60,7 +60,7 @@ ScatterMatrix.prototype.render = function () {
.style({'float':'left', 'margin-right':'50px'})
var svg = container.append('div')
.attr('class', 'scatter-matrix-svg')
- .style({'float':'right'})
+ .style({'float':'left'})
.html('<em>Loading data...</em>');
this.onData(function() {
diff --git a/wqflask/wqflask/static/new/javascript/scatterplot.coffee b/wqflask/wqflask/static/new/javascript/scatterplot.coffee
deleted file mode 100644
index 008ab925..00000000
--- a/wqflask/wqflask/static/new/javascript/scatterplot.coffee
+++ /dev/null
@@ -1,430 +0,0 @@
-root = exports ? this
-
-scatterplot = () ->
- width = 800
- height = 600
- margin = {left:60, top:40, right:40, bottom: 40, inner:5}
- axispos = {xtitle:25, ytitle:45, xlabel:5, ylabel:5}
- titlepos = 20
- xNA = {handle:true, force:false, width:15, gap:10}
- yNA = {handle:true, force:false, width:15, gap:10}
- xlim = null
- ylim = null
- nxticks = 5
- xticks = null
- nyticks = 5
- yticks = null
- rectcolor = d3.rgb(230, 230, 230)
- pointcolor = null
- pointstroke = "black"
- pointsize = 3 # default = no visible points at markers
- title = "Correlation Scatterplot"
- xlab = "X"
- ylab = "Y"
- rotate_ylab = null
- yscale = d3.scale.linear()
- xscale = d3.scale.linear()
- xvar = 0
- yvar = 1
- pointsSelect = null
- dataByInd = false
-
- ## the main function
- chart = (selection) ->
- selection.each (data) ->
-
- if dataByInd
- x = data.data.map (d) -> d[xvar]
- y = data.data.map (d) -> d[yvar]
- else # reorganize data
- x = data.data[xvar]
- y = data.data[yvar]
-
- console.log("x:", x)
- console.log("y:", y)
-
-
- # grab indID if it's there
- # if no indID, create a vector of them
- indID = data?.indID ? null
- indID = indID ? [1..x.length]
-
- console.log("indID:", indID)
-
- # groups of colors
- group = data?.group ? (1 for i in x)
- ngroup = d3.max(group)
- group = (g-1 for g in group) # changed from (1,2,3,...) to (0,1,2,...)
-
- # colors of the points in the different groups
- pointcolor = pointcolor ? selectGroupColors(ngroup, "dark")
- pointcolor = expand2vector(pointcolor, ngroup)
-
- # if all (x,y) not null
- xNA.handle = false if x.every (v) -> (v?) and !xNA.force
- yNA.handle = false if y.every (v) -> (v?) and !yNA.force
- if xNA.handle
- paneloffset = xNA.width + xNA.gap
- panelwidth = width - paneloffset
- else
- paneloffset = 0
- panelwidth = width
- if yNA.handle
- panelheight = height - (yNA.width + yNA.gap)
- else
- panelheight = height
-
- xlim = xlim ? d3.extent(x)
- ylim = ylim ? d3.extent(y)
-
- # I'll replace missing values something smaller than what's observed
- na_value = d3.min(x.concat y) - 100
-
- # Select the svg element, if it exists.
- svg = d3.select(this).selectAll("svg").data([data])
-
- # Otherwise, create the skeletal chart.
- gEnter = svg.enter().append("svg").append("g")
-
- # Update the outer dimensions.
- svg.attr("width", width+margin.left+margin.right)
- .attr("height", height+margin.top+margin.bottom)
-
- g = svg.select("g")
-
- # box
- g.append("rect")
- .attr("x", paneloffset+margin.left)
- .attr("y", margin.top)
- .attr("height", panelheight)
- .attr("width", panelwidth)
- .attr("fill", rectcolor)
- .attr("stroke", "none")
- if xNA.handle
- g.append("rect")
- .attr("x", margin.left)
- .attr("y", margin.top)
- .attr("height", panelheight)
- .attr("width", xNA.width)
- .attr("fill", rectcolor)
- .attr("stroke", "none")
- if xNA.handle and yNA.handle
- g.append("rect")
- .attr("x", margin.left)
- .attr("y", margin.top+height - yNA.width)
- .attr("height", yNA.width)
- .attr("width", xNA.width)
- .attr("fill", rectcolor)
- .attr("stroke", "none")
- if yNA.handle
- g.append("rect")
- .attr("x", margin.left+paneloffset)
- .attr("y", margin.top+height-yNA.width)
- .attr("height", yNA.width)
- .attr("width", panelwidth)
- .attr("fill", rectcolor)
- .attr("stroke", "none")
-
- # simple scales (ignore NA business)
- xrange = [margin.left+paneloffset+margin.inner, margin.left+paneloffset+panelwidth-margin.inner]
- yrange = [margin.top+panelheight-margin.inner, margin.top+margin.inner]
- xscale.domain(xlim).range(xrange)
- yscale.domain(ylim).range(yrange)
- xs = d3.scale.linear().domain(xlim).range(xrange)
- ys = d3.scale.linear().domain(ylim).range(yrange)
-
- # "polylinear" scales to handle missing values
- if xNA.handle
- xscale.domain([na_value].concat xlim)
- .range([margin.left + xNA.width/2].concat xrange)
- x = x.map (e) -> if e? then e else na_value
- if yNA.handle
- yscale.domain([na_value].concat ylim)
- .range([height+margin.top-yNA.width/2].concat yrange)
- y = y.map (e) -> if e? then e else na_value
-
- minx = xlim[0]
- maxx = xlim[1]
-
- # if yticks not provided, use nyticks to choose pretty ones
- yticks = yticks ? ys.ticks(nyticks)
- xticks = xticks ? xs.ticks(nxticks)
-
- # title
- titlegrp = g.append("g").attr("class", "title")
- .append("text")
- .attr("x", margin.left + width/2)
- .attr("y", margin.top - titlepos)
- .text(title)
-
- # x-axis
- xaxis = g.append("g").attr("class", "x axis")
- xaxis.selectAll("empty")
- .data(xticks)
- .enter()
- .append("line")
- .attr("x1", (d) -> xscale(d))
- .attr("x2", (d) -> xscale(d))
- .attr("y1", margin.top)
- .attr("y2", margin.top+height)
- .attr("fill", "none")
- .attr("stroke", "white")
- .attr("stroke-width", 1)
- .style("pointer-events", "none")
- xaxis.selectAll("empty")
- .data(xticks)
- .enter()
- .append("text")
- .attr("x", (d) -> xscale(d))
- .attr("y", margin.top+height+axispos.xlabel)
- .text((d) -> formatAxis(xticks)(d))
- xaxis.append("text").attr("class", "title")
- .attr("x", margin.left+width/2)
- .attr("y", margin.top+height+axispos.xtitle)
- .text(xlab)
- if xNA.handle
- xaxis.append("text")
- .attr("x", margin.left+xNA.width/2)
- .attr("y", margin.top+height+axispos.xlabel)
- .text("N/A")
-
- # y-axis
- rotate_ylab = rotate_ylab ? (ylab.length > 1)
- yaxis = g.append("g").attr("class", "y axis")
- yaxis.selectAll("empty")
- .data(yticks)
- .enter()
- .append("line")
- .attr("y1", (d) -> yscale(d))
- .attr("y2", (d) -> yscale(d))
- .attr("x1", margin.left)
- .attr("x2", margin.left+width)
- .attr("fill", "none")
- .attr("stroke", "white")
- .attr("stroke-width", 1)
- .style("pointer-events", "none")
- yaxis.selectAll("empty")
- .data(yticks)
- .enter()
- .append("text")
- .attr("y", (d) -> yscale(d))
- .attr("x", margin.left-axispos.ylabel)
- .text((d) -> formatAxis(yticks)(d))
- yaxis.append("text").attr("class", "title")
- .attr("y", margin.top+height/2)
- .attr("x", margin.left-axispos.ytitle)
- .text(ylab)
- .attr("transform", if rotate_ylab then "rotate(270,#{margin.left-axispos.ytitle},#{margin.top+height/2})" else "")
- if yNA.handle
- yaxis.append("text")
- .attr("x", margin.left-axispos.ylabel)
- .attr("y", margin.top+height-yNA.width/2)
- .text("N/A")
-
- indtip = d3.tip()
- .attr('class', 'd3-tip')
- .html((d,i) -> indID[i])
- .direction('e')
- .offset([0,10])
- svg.call(indtip)
-
-
- if js_data.slope and js_data.intercept
- g.append("line")
- .attr("x1", xscale(minx) - margin.inner)
- .attr('y1', yscale(js_data.slope*minx+js_data.intercept))
- .attr("x2", xscale(maxx*1) + margin.inner)
- .attr("y2", yscale(slope*maxx*1+intercept))
- .style("stroke", "black")
- .style("stroke-width", 2)
-
- points = g.append("g").attr("id", "points")
- pointsSelect =
- points.selectAll("empty")
- .data(d3.range(x.length))
- .enter()
- .append("circle")
- .attr("cx", (d,i) -> xscale(x[i]))
- .attr("cy", (d,i) -> yscale(y[i]))
- .attr("class", (d,i) -> "pt#{i}")
- .attr("r", pointsize)
- .attr("fill", (d,i) -> pointcolor[group[i]])
- .attr("stroke", pointstroke)
- .attr("stroke-width", "1")
- .attr("opacity", (d,i) ->
- return 1 if (x[i]? or xNA.handle) and (y[i]? or yNA.handle)
- return 0)
- .on("mouseover.paneltip", indtip.show)
- .on("mouseout.paneltip", indtip.hide)
-
- # box
- g.append("rect")
- .attr("x", margin.left+paneloffset)
- .attr("y", margin.top)
- .attr("height", panelheight)
- .attr("width", panelwidth)
- .attr("fill", "none")
- .attr("stroke", "black")
- .attr("stroke-width", "none")
- if xNA.handle
- g.append("rect")
- .attr("x", margin.left)
- .attr("y", margin.top)
- .attr("height", panelheight)
- .attr("width", xNA.width)
- .attr("fill", "none")
- .attr("stroke", "black")
- .attr("stroke-width", "none")
- if xNA.handle and yNA.handle
- g.append("rect")
- .attr("x", margin.left)
- .attr("y", margin.top+height - yNA.width)
- .attr("height", yNA.width)
- .attr("width", xNA.width)
- .attr("fill", "none")
- .attr("stroke", "black")
- .attr("stroke-width", "none")
- if yNA.handle
- g.append("rect")
- .attr("x", margin.left+paneloffset)
- .attr("y", margin.top+height-yNA.width)
- .attr("height", yNA.width)
- .attr("width", panelwidth)
- .attr("fill", "none")
- .attr("stroke", "black")
- .attr("stroke-width", "none")
-
- ## configuration parameters
- chart.width = (value) ->
- return width if !arguments.length
- width = value
- chart
-
- chart.height = (value) ->
- return height if !arguments.length
- height = value
- chart
-
- chart.margin = (value) ->
- return margin if !arguments.length
- margin = value
- chart
-
- chart.axispos = (value) ->
- return axispos if !arguments.length
- axispos = value
- chart
-
- chart.titlepos = (value) ->
- return titlepos if !arguments.length
- titlepos
- chart
-
- chart.xlim = (value) ->
- return xlim if !arguments.length
- xlim = value
- chart
-
- chart.nxticks = (value) ->
- return nxticks if !arguments.length
- nxticks = value
- chart
-
- chart.xticks = (value) ->
- return xticks if !arguments.length
- xticks = value
- chart
-
- chart.ylim = (value) ->
- return ylim if !arguments.length
- ylim = value
- chart
-
- chart.nyticks = (value) ->
- return nyticks if !arguments.length
- nyticks = value
- chart
-
- chart.yticks = (value) ->
- return yticks if !arguments.length
- yticks = value
- chart
-
- chart.rectcolor = (value) ->
- return rectcolor if !arguments.length
- rectcolor = value
- chart
-
- chart.pointcolor = (value) ->
- return pointcolor if !arguments.length
- pointcolor = value
- chart
-
- chart.pointsize = (value) ->
- return pointsize if !arguments.length
- pointsize = value
- chart
-
- chart.pointstroke = (value) ->
- return pointstroke if !arguments.length
- pointstroke = value
- chart
-
- chart.dataByInd = (value) ->
- return dataByInd if !arguments.length
- dataByInd = value
- chart
-
- chart.title = (value) ->
- return title if !arguments.length
- title = value
- chart
-
- chart.xlab = (value) ->
- return xlab if !arguments.length
- xlab = value
- chart
-
- chart.ylab = (value) ->
- return ylab if !arguments.length
- ylab = value
- chart
-
- chart.rotate_ylab = (value) ->
- return rotate_ylab if !arguments.length
- rotate_ylab = value
- chart
-
- chart.xvar = (value) ->
- return xvar if !arguments.length
- xvar = value
- chart
-
- chart.yvar = (value) ->
- return yvar if !arguments.length
- yvar = value
- chart
-
- chart.xNA = (value) ->
- return xNA if !arguments.length
- xNA = value
- chart
-
- chart.yNA = (value) ->
- return yNA if !arguments.length
- yNA = value
- chart
-
- chart.yscale = () ->
- return yscale
-
- chart.xscale = () ->
- return xscale
-
- chart.pointsSelect = () ->
- return pointsSelect
-
- # return the chart function
- chart
-
-root.scatterplot = scatterplot
diff --git a/wqflask/wqflask/static/new/javascript/scatterplot.js b/wqflask/wqflask/static/new/javascript/scatterplot.js
index de7b7906..d7f2a4a5 100644
--- a/wqflask/wqflask/static/new/javascript/scatterplot.js
+++ b/wqflask/wqflask/static/new/javascript/scatterplot.js
@@ -166,7 +166,7 @@ scatterplot = function() {
maxx = xlim[1];
yticks = yticks != null ? yticks : ys.ticks(nyticks);
xticks = xticks != null ? xticks : xs.ticks(nxticks);
- titlegrp = g.append("g").attr("class", "title").append("text").attr("x", margin.left + width / 2).attr("y", margin.top - titlepos).style("fill", "black").style("font-size", "28px").text(title);
+ titlegrp = g.append("g").attr("class", "title").append("text").attr("x", margin.left + width / 2).attr("y", margin.top - titlepos).style("fill", "black").style("font-size", "24px").text(title);
xaxis = g.append("g").attr("class", "x axis");
xaxis.selectAll("empty").data(xticks).enter().append("line").attr("x1", function(d) {
return xscale(d);
diff --git a/wqflask/wqflask/static/new/javascript/search_results.coffee b/wqflask/wqflask/static/new/javascript/search_results.coffee
deleted file mode 100644
index e0cfc61a..00000000
--- a/wqflask/wqflask/static/new/javascript/search_results.coffee
+++ /dev/null
@@ -1,86 +0,0 @@
-$ ->
- # These are also used by collections view
- # So the name search_results in the filename is misleading
-
- checked_traits = null
-
- select_all = ->
- console.log("selected_all")
- $(".trait_checkbox").prop('checked', true)
-
- deselect_all = ->
- $(".trait_checkbox").prop('checked', false)
-
- invert = ->
- $(".trait_checkbox").trigger('click')
-
- add = ->
- traits = $("#trait_table input:checked").map(-> return $(this).val()).get()
- console.log("checked length is:", traits.length)
- console.log("checked is:", traits)
- $.colorbox({href:"/collections/add?traits=#{traits}"})
-
- removed_traits = ->
- # After we've removed the traits from the database we get rid of them in the table
- console.log('in removed_traits with checked_traits:', checked_traits)
- checked_traits.closest("tr").fadeOut()
-
-
- change_buttons = ->
- buttons = ["#add", "#remove"]
- num_checked = $('.trait_checkbox:checked').length
- console.log("num_checked is:", num_checked)
- if (num_checked == 0)
- for button in buttons
- $(button).prop("disabled", true)
- else
- for button in buttons
- $(button).prop("disabled", false)
-
-
- if (num_checked > 1)
- console.log("in loop")
- for item in buttons
- console.log(" processing item:", item)
- text = $(item).html()
- #if text.indexOf("Records") == -1
- # text = text.replace("Record", "Records")
- # $(item).html(text)
- else
- console.log("in loop")
- for item in buttons
- console.log(" processing item:", item)
- text = $(item).html()
- #text = text.replace("Records", "Record")
- #$(item).html(text)
-
-
- # remove is only used by collections view
- remove = ->
- checked_traits = $("#trait_table input:checked")
- traits = checked_traits.map(->
- return $(this).val()).get()
- console.log("checked length is:", traits.length)
- console.log("checked is:", traits)
- uc_id = $("#uc_id").val()
- console.log("uc.id is:", uc_id)
- # Todo: Consider adding a failure message
- $.ajax(
- type: "POST"
- url: "/collections/remove"
- data:
- uc_id: uc_id
- traits: traits
- success: removed_traits
- )
-
-
-
- $("#select_all").click(select_all)
- $("#deselect_all").click(deselect_all)
- $("#invert").click(invert)
- $("#add").click(add)
- $("#remove").click(remove)
-
- $('.trait_checkbox').click(change_buttons)
- $('.btn').click(change_buttons)
diff --git a/wqflask/wqflask/static/new/javascript/search_results.js b/wqflask/wqflask/static/new/javascript/search_results.js
index 40fdff70..8fa698b4 100644
--- a/wqflask/wqflask/static/new/javascript/search_results.js
+++ b/wqflask/wqflask/static/new/javascript/search_results.js
@@ -40,6 +40,11 @@ $(function() {
};
$('#searchbox').keyup(function(){
+ if ($(this).val() != ""){
+ $('#filter_term').val($(this).val());
+ } else {
+ $('#filter_term').val("None");
+ }
$('#trait_table').DataTable().search($(this).val()).draw();
});
@@ -93,12 +98,24 @@ $(function() {
traits = $("#trait_table input:checked").map(function() {
return $(this).val();
}).get();
- console.log("checked length is:", traits.length);
- console.log("checked is:", traits);
+
+ var traits_hash = md5(traits.toString());
+
+ $.ajax({
+ type: "POST",
+ url: "/collections/store_trait_list",
+ data: {
+ hash: traits_hash,
+ traits: traits.toString()
+ }
+ });
+
return $.colorbox({
- href: "/collections/add?traits=" + traits
+ href: "/collections/add?hash=" + traits_hash
});
+
};
+
removed_traits = function() {
console.log('in removed_traits with checked_traits:', checked_traits);
return checked_traits.closest("tr").fadeOut();
@@ -154,11 +171,15 @@ $(function() {
}
};
+ submit_bnw = function() {
+ trait_data = get_traits_from_table("trait_table", "submit_bnw")
+ }
+
export_traits = function() {
- trait_data = get_traits_from_table("trait_table")
+ trait_data = get_traits_from_table("trait_table", "export_csv")
};
- get_traits_from_table = function(table_name) {
+ get_traits_from_table = function(table_name, destination) {
trait_table = $('#'+table_name);
table_dict = {};
@@ -194,20 +215,89 @@ $(function() {
}
});
table_dict['rows'] = rows;
- console.log("TABLEDICT:", table_dict);
json_table_dict = JSON.stringify(table_dict);
$('input[name=export_data]').val(json_table_dict);
- $('#export_form').attr('action', '/export_traits_csv');
+ if (destination == "export_csv"){
+ $('#export_form').attr('action', '/export_traits_csv');
+ } else{
+ $('#export_form').attr('action', '/submit_bnw');
+ }
$('#export_form').submit();
};
+ $("#corr_matrix").on("click", function() {
+ traits = $("#trait_table input:checked").map(function() {
+ return $(this).val();
+ }).get();
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("Correlation Matrix")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+ $("#network_graph").on("click", function() {
+ traits = $("#trait_table input:checked").map(function() {
+ return $(this).val();
+ }).get();
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("Network Graph")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+ $("#wgcna_setup").on("click", function() {
+ traits = $("#trait_table input:checked").map(function() {
+ return $(this).val();
+ }).get();
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("WGCNA Setup")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+ $("#ctl_setup").on("click", function() {
+ traits = $("#trait_table input:checked").map(function() {
+ return $(this).val();
+ }).get();
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("CTL Setup")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+ $("#heatmap").on("click", function() {
+ traits = $("#trait_table input:checked").map(function() {
+ return $(this).val();
+ }).get();
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("Heatmap")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+ $("#comp_bar_chart").on("click", function() {
+ traits = $("#trait_table input:checked").map(function() {
+ return $(this).val();
+ }).get();
+ $("#trait_list").val(traits)
+ $("input[name=tool_used]").val("Comparison Bar Chart")
+ $("input[name=form_url]").val($(this).data("url"))
+ return submit_special("/loading")
+ });
+
+ $("#send_to_webgestalt, #send_to_bnw, #send_to_geneweaver").on("click", function() {
+ traits = $("#trait_table input:checked").map(function() {
+ return $(this).val();
+ }).get();
+ $("#trait_list").val(traits)
+ url = $(this).data("url")
+ return submit_special(url)
+ });
+
+
$("#select_all").click(select_all);
$("#deselect_all").click(deselect_all);
$("#invert").click(invert);
$("#add").click(add);
$("#remove").click(remove);
+ $("#submit_bnw").click(submit_bnw);
$("#export_traits").click(export_traits);
$('.trait_checkbox, .btn').click(change_buttons);
}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/show_trait.coffee b/wqflask/wqflask/static/new/javascript/show_trait.coffee
deleted file mode 100644
index 91aa15ba..00000000
--- a/wqflask/wqflask/static/new/javascript/show_trait.coffee
+++ /dev/null
@@ -1,476 +0,0 @@
-console.log("start_b")
-
-#root = exports ? this
-
-# this is our isNumber, do not confuse with the underscore.js one
-is_number = (o) ->
- return ! isNaN (o-0) && o != null
-
-Stat_Table_Rows = [
- {
- vn: "n_of_samples"
- pretty: "N of Samples"
- digits: 0
- },
- {
- vn: "mean"
- pretty: "Mean"
- digits: 2
- },
- {
- vn: "median"
- pretty: "Median"
- digits: 2
- },
- {
- vn: "std_error"
- pretty: "Standard Error (SE)"
- digits: 2
- },
- {
- vn: "std_dev"
- pretty: "Standard Deviation (SD)"
- digits: 2
- },
- {
- vn: "min"
- pretty: "Minimum"
- digits: 2
- },
- {
- vn: "max"
- pretty: "Maximum"
- digits: 2
- },
- {
- vn: "range"
- pretty: "Range (log2)"
- digits: 2
- },
- {
- vn: "range_fold"
- pretty: "Range (fold)"
- digits: 2
- },
- {
- vn: "interquartile"
- pretty: "Interquartile Range"
- url: "/glossary.html#Interquartile"
- digits: 2
- }
- ]
-
-$ ->
-
- add = ->
- trait = $("input[name=trait_hmac]").val()
- console.log("trait is:", trait)
- $.colorbox({href:"/collections/add?traits=#{trait}"})
-
- $('#add_to_collection').click(add)
-
- sample_lists = js_data.sample_lists
- sample_group_types = js_data.sample_group_types
-
- d3.select("#select_compare_trait").on("click", =>
- $('.scatter-matrix-container').remove()
- open_trait_selection()
- )
-
- d3.select("#clear_compare_trait").on("click", =>
- $('.scatter-matrix-container').remove()
- )
-
- open_trait_selection = () ->
- $('#collections_holder').load('/collections/list?color_by_trait #collections_list', =>
- $.colorbox(
- inline: true
- href: "#collections_holder"
- )
- #Removes the links from the collection names, because clicking them would leave the page
- #instead of loading the list of traits in the colorbox
- $('a.collection_name').attr( 'onClick', 'return false' )
- )
-
- hide_tabs = (start) ->
- for x in [start..10]
- $("#stats_tabs" + x).hide()
-
-
- # Changes stats table between all, bxd only and non-bxd, etc.
- stats_mdp_change = ->
- selected = $(this).val()
- hide_tabs(0)
- $("#stats_tabs" + selected).show()
-
-
- change_stats_value = (sample_sets, category, value_type, decimal_places, effects) ->
- id = "#" + process_id(category, value_type)
- console.log("the_id:", id)
- in_box = $(id).html
-
- current_value = parseFloat($(in_box)).toFixed(decimal_places)
-
- the_value = sample_sets[category][value_type]()
- console.log("After running sample_sets, the_value is:", the_value)
- if decimal_places > 0
- title_value = the_value.toFixed(decimal_places * 2)
- the_value = the_value.toFixed(decimal_places)
- else
- title_value = null
-
- console.log("*-* the_value:", the_value)
- console.log("*-* current_value:", current_value)
- if the_value != current_value
- console.log("object:", $(id).html(the_value))
- if effects
- $(id).html(the_value).effect("highlight")
- else
- $(id).html(the_value)
-
- # We go ahead and always change the title value if we have it
- if title_value
- $(id).attr('title', title_value)
-
-
- update_stat_values = (sample_sets)->
- show_effects = $(".tab-pane.active").attr("id") == "stats_tab"
- for category in ['samples_primary', 'samples_other', 'samples_all']
- for row in Stat_Table_Rows
- console.log("Calling change_stats_value")
- change_stats_value(sample_sets, category, row.vn, row.digits, show_effects)
-
- redraw_histogram = ->
- root.histogram.redraw((x.value for x in _.values(root.selected_samples[root.histogram_group])))
-
- redraw_bar_chart = ->
- root.bar_chart.redraw(root.selected_samples, root.bar_chart_group)
-
- redraw_prob_plot = ->
- root.redraw_prob_plot_impl(root.selected_samples, root.prob_plot_group)
-
- make_table = ->
- header = "<thead><tr><th>&nbsp;</th>"
- console.log("js_data.sample_group_types:", js_data.sample_group_types)
- for own key, value of js_data.sample_group_types
- console.log("aa key:", key)
- console.log("aa value:", value)
- the_id = process_id("column", key)
- header += """<th id="#{ the_id }">#{ value }</th>"""
- header += "</thead>"
- console.log("windex header is:", header)
-
- #console.log("rows are:", rows)
- the_rows = "<tbody>"
- #console.log("length of rows:", rows.length)
- for row in Stat_Table_Rows
- console.log("rowing")
- row_line = """<tr>"""
- if row.url?
- row_line += """<td id="#{ row.vn }"><a href="#{row.url }">#{ row.pretty }</a></td>"""
- else
- row_line += """<td id="#{ row.vn }">#{ row.pretty }</td>"""
- console.log("box - js_data.sample_group_types:", js_data.sample_group_types)
- for own key, value of js_data.sample_group_types
- console.log("apple key:", key)
- the_id = process_id(key, row.vn)
- console.log("the_id:", the_id)
- row_line += """<td id="#{ the_id }">foo</td>"""
- row_line += """</tr>"""
- console.log("row line:", row_line)
- the_rows += row_line
- the_rows += "</tbody>"
- table = header + the_rows
- console.log("table is:", table)
- $("#stats_table").append(table)
-
-
- process_id = (values...) ->
- ### Make an id or a class valid javascript by, for example, eliminating spaces ###
- processed = ""
- for value in values
- console.log("value:", value)
- value = value.replace(" ", "_")
- if processed.length
- processed += "-"
- processed += value
- return processed
-
- edit_data_change = ->
- already_seen = {}
- sample_sets =
- samples_primary: new Stats([])
- samples_other: new Stats([])
- samples_all: new Stats([])
-
- root.selected_samples = # maps: sample name -> value
- samples_primary: {}
- samples_other: {}
- samples_all: {}
-
- console.log("at beginning:", sample_sets)
-
- tables = ['samples_primary', 'samples_other']
- for table in tables
- rows = $("#" + table).find('tr')
- for row in rows
- name = $(row).find('.edit_sample_sample_name').html()
- name = $.trim(name)
- real_value = $(row).find('.edit_sample_value').val()
- #console.log("real_value:", real_value)
-
- checkbox = $(row).find(".edit_sample_checkbox")
- checked = $(checkbox).prop('checked')
-
- if checked and is_number(real_value) and real_value != ""
- #console.log("in the iffy if")
- real_value = parseFloat(real_value)
-
- sample_sets[table].add_value(real_value)
-
- real_variance = $(row).find('.edit_sample_se').val()
- if (is_number(real_variance))
- real_variance = parseFloat(real_variance)
- else
- real_variance = null
- real_dict = {value: real_value, variance: real_variance}
- root.selected_samples[table][name] = real_dict
-
- #console.log("checking name of:", name)
- if not (name of already_seen)
- #console.log("haven't seen")
- sample_sets['samples_all'].add_value(real_value)
- root.selected_samples['samples_all'][name] = real_dict
- already_seen[name] = true
- console.log("towards end:", sample_sets)
- update_stat_values(sample_sets)
-
- console.log("redrawing histogram")
- redraw_histogram()
-
- console.log("redrawing bar chart")
- redraw_bar_chart()
-
- console.log("redrawing probability plot")
- redraw_prob_plot()
-
- show_hide_outliers = ->
- console.log("FOOBAR in beginning of show_hide_outliers")
- label = $('#show_hide_outliers').val()
- console.log("lable is:", label)
- if label == "Hide Outliers"
- $('#show_hide_outliers').val("Show Outliers")
- else if label == "Show Outliers"
- console.log("Found Show Outliers")
- $('#show_hide_outliers').val("Hide Outliers")
- console.log("Should be now Hide Outliers")
-
- ##Calculate Correlations Code
-
- on_corr_method_change = ->
- console.log("in beginning of on_corr_method_change")
- corr_method = $('select[name=corr_method]').val()
- console.log("corr_method is:", corr_method)
- $('.correlation_desc').hide()
- $('#' + corr_method + "_r_desc").show().effect("highlight")
- if corr_method == "lit"
- $("#corr_sample_method_options").hide()
- else
- $("#corr_sample_method_options").show()
-
- $('select[name=corr_method]').change(on_corr_method_change)
-
- ##End Calculate Correlations Code
-
- ##Populate Samples Attribute Values Code
-
- create_value_dropdown = (value) ->
- return """<option val=#{value}>#{value}</option>"""
-
- populate_sample_attributes_values_dropdown = ->
- console.log("in beginning of psavd")
- $('#attribute_values').empty()
- sample_attributes = {}
- for own key, attribute_info of js_data.attribute_names
- sample_attributes[attribute_info.name] = attribute_info.distinct_values
- console.log("[visa] attributes is:", sample_attributes)
- selected_attribute = $('#exclude_menu').val().replace("_", " ")
- console.log("selected_attribute is:", selected_attribute)
- for value in sample_attributes[selected_attribute]
- $(create_value_dropdown(value))
- .appendTo($('#attribute_values'))
-
- # Must run once at beginning
- if js_data.attribute_names.length > 0
- populate_sample_attributes_values_dropdown()
- $('#exclude_menu').change(populate_sample_attributes_values_dropdown)
-
- ##End Populate Samples Attribute Values Codess
-
- ##Block Samples By Attribute Value Code
- block_by_attribute_value = ->
- attribute_name = $('#exclude_menu').val()
- exclude_by_value = $('#attribute_values').val()
-
- cell_class = ".column_name-#{attribute_name}"
- $(cell_class).each (index, element) =>
- if $.trim($(element).text()) == exclude_by_value
- row = $(element).parent('tr')
- $(row).find(".trait_value_input").val("x")
-
- $('#exclude_group').click(block_by_attribute_value)
-
- ##End Block Samples By Attribute Value Code
-
- ##Block Samples By Index Code
-
- block_by_index = ->
- index_string = $('#remove_samples_field').val()
- index_list = []
- for index_set in index_string.split(",")
- if index_set.indexOf('-') != -1
- try
- start_index = parseInt(index_set.split("-")[0])
- end_index = parseInt(index_set.split("-")[1])
- index_list.push(index) for index in [start_index..end_index]
- catch error
- alert("Syntax error")
- else
- #try
- index = parseInt(index_set)
- console.log("index:", index)
- index_list.push(index)
- #catch(erro)
- # alert("Syntax error")
- console.log("index_list:", index_list)
- for index in index_list
- if $('#block_group').val() == "primary"
- console.log("block_group:", $('#block_group').val())
- console.log("row:", $('#Primary_'+index.toString()))
- $('#Primary_'+index.toString()).find('.trait_value_input').val("x")
- else if $('#block_group').val() == "other"
- console.log("block_group:", $('#block_group').val())
- console.log("row:", $('#Other_'+index.toString()))
- $('#Other_'+index.toString()).find('.trait_value_input').val("x")
-
- $('#block_by_index').click(block_by_index)
-
- ##End Block Samples By Index Code
-
- ##Hide Sample Rows With No Value (value of 'x') Code
-
- hide_no_value = ->
- $('.value_se').each (_index, element) =>
- if $(element).find('.trait_value_input').val() == 'x'
- $(element).hide()
-
- $('#hide_no_value').click(hide_no_value)
-
- ##End Hide Sample Rows With No Value Code
-
- ##Block Outliers Code
- block_outliers = ->
- $('.outlier').each (_index, element) =>
- $(element).find('.trait_value_input').val('x')
-
- $('#block_outliers').click(block_outliers)
-
- ##End Block Outliers Code
-
- ##Reset Table Values Code
- reset_samples_table = ->
- $('.trait_value_input').each (_index, element) =>
- console.log("value is:", $(element).val())
- $(element).val($(element).data('value'))
- console.log("data-value is:", $(element).data('value'))
- $(element).parents('.value_se').show()
-
- $('#reset').click(reset_samples_table)
-
- ##End Reset Table Values Code
-
- ##Get Sample Data From Table Code
-
- get_sample_table_data = (table_name) ->
- samples = []
- $('#' + table_name).find('.value_se').each (_index, element) =>
- row_data = {}
- row_data.name = $.trim($(element).find('.column_name-Sample').text())
- row_data.value = $(element).find('.edit_sample_value').val()
- if $(element).find('.edit_sample_se').length != -1
- row_data.se = $(element).find('.edit_sample_se').val()
- for own key, attribute_info of js_data.attribute_names
- row_data[attribute_info.name] = $.trim($(element).find(
- '.column_name-'+attribute_info.name.replace(" ", "_")).text())
- console.log("row_data is:", row_data)
- samples.push(row_data)
- return samples
-
- ##End Get Sample Data from Table Code
-
- ##Export Sample Table Data Code
-
- export_sample_table_data = ->
- sample_data = {}
- sample_data.primary_samples = get_sample_table_data('samples_primary')
- sample_data.other_samples = get_sample_table_data('samples_other')
- console.log("sample_data is:", sample_data)
- json_sample_data = JSON.stringify(sample_data)
- console.log("json_sample_data is:", json_sample_data)
-
- $('input[name=export_data]').val(json_sample_data)
- console.log("export_data is", $('input[name=export_data]').val())
-
- format = $('#export_format').val()
- if format == "excel"
- $('#trait_data_form').attr('action', '/export_trait_excel')
- else
- $('#trait_data_form').attr('action', '/export_trait_csv')
- console.log("action is:", $('#trait_data_form').attr('action'))
-
- $('#trait_data_form').submit()
-
- $('#export').click(export_sample_table_data)
-
- ##End Export Sample Table Data Code
-
-
- console.log("before registering block_outliers")
- $('#block_outliers').click(block_outliers)
- console.log("after registering block_outliers")
-
- _.mixin(_.str.exports()); # Add string fuctions directly to underscore
-
- root.histogram_group = 'samples_primary'
- root.histogram = new Histogram(sample_lists[0])
- $('.histogram_samples_group').val(root.histogram_group)
- $('.histogram_samples_group').change ->
- root.histogram_group = $(this).val()
- redraw_histogram()
-
- root.bar_chart_group = 'samples_primary'
- root.bar_chart = new Bar_Chart(sample_lists)
- $('.bar_chart_samples_group').val(root.bar_chart_group)
- $('.bar_chart_samples_group').change ->
- root.bar_chart_group = $(this).val()
- redraw_bar_chart()
-
- root.prob_plot_group = 'samples_primary'
- $('.prob_plot_samples_group').val(root.prob_plot_group)
- $('.prob_plot_samples_group').change ->
- root.prob_plot_group = $(this).val()
- redraw_prob_plot()
-
- make_table()
- edit_data_change() # Set the values at the beginning
-
- $('#edit_sample_lists').change(edit_data_change)
-
- # bind additional handlers for pushing data updates
- $('#block_by_index').click(edit_data_change)
- $('#exclude_group').click(edit_data_change)
- $('#block_outliers').click(edit_data_change)
- $('#reset').click(edit_data_change)
-
- #$("#all-mean").html('foobar8')
- console.log("end")
diff --git a/wqflask/wqflask/static/new/javascript/show_trait.js b/wqflask/wqflask/static/new/javascript/show_trait.js
index 8223a38c..28d13345 100644
--- a/wqflask/wqflask/static/new/javascript/show_trait.js
+++ b/wqflask/wqflask/static/new/javascript/show_trait.js
@@ -1,535 +1,1435 @@
-// Generated by CoffeeScript 1.8.0
-(function() {
- var Stat_Table_Rows, is_number,
- __hasProp = {}.hasOwnProperty,
- __slice = [].slice;
+var Stat_Table_Rows, is_number,
+ __hasProp = {}.hasOwnProperty,
+ __slice = [].slice;
- console.log("start_b");
+is_number = function(o) {
+ return !isNaN((o - 0) && o !== null);
+};
- is_number = function(o) {
- return !isNaN((o - 0) && o !== null);
- };
+Stat_Table_Rows = [
+ {
+ vn: "n_of_samples",
+ pretty: "N of Samples",
+ digits: 0
+ }, {
+ vn: "mean",
+ pretty: "Mean",
+ digits: 3
+ }, {
+ vn: "median",
+ pretty: "Median",
+ digits: 3
+ }, {
+ vn: "std_error",
+ pretty: "Standard Error (SE)",
+ digits: 3
+ }, {
+ vn: "std_dev",
+ pretty: "Standard Deviation (SD)",
+ digits: 3
+ }, {
+ vn: "min",
+ pretty: "Minimum",
+ digits: 3
+ }, {
+ vn: "max",
+ pretty: "Maximum",
+ digits: 3
+ }
+]
+
+if (js_data.dataset_type == "ProbeSet"){
+ if (js_data.data_scale == "linear_positive" || js_data.data_scale == "log2") {
+ Stat_Table_Rows.push({
+ vn: "range",
+ pretty: "Range (log2)",
+ digits: 3
+ })
+ } else {
+ Stat_Table_Rows.push({
+ vn: "range",
+ pretty: "Range",
+ digits: 3
+ })
+ }
+} else {
+ Stat_Table_Rows.push({
+ vn: "range",
+ pretty: "Range",
+ digits: 3
+ })
+}
- Stat_Table_Rows = [
- {
- vn: "n_of_samples",
- pretty: "N of Samples",
- digits: 0
- }, {
- vn: "mean",
- pretty: "Mean",
- digits: 3
- }, {
- vn: "median",
- pretty: "Median",
- digits: 3
- }, {
- vn: "std_error",
- pretty: "Standard Error (SE)",
- digits: 3
- }, {
- vn: "std_dev",
- pretty: "Standard Deviation (SD)",
- digits: 3
- }, {
- vn: "min",
- pretty: "Minimum",
- digits: 2
- }, {
- vn: "max",
- pretty: "Maximum",
- digits: 2
- }, {
- vn: "range",
- pretty: "Range (log2)",
- digits: 3
- }, {
- vn: "range_fold",
- pretty: "Range (fold)",
- digits: 3
- }, {
- vn: "interquartile",
- pretty: "Interquartile Range",
- url: "http://www.genenetwork.org/glossary.html#Interquartile",
- digits: 3
- }
- ];
-
- $(function() {
- var add, block_by_attribute_value, block_by_index, block_outliers, change_stats_value, create_value_dropdown, edit_data_change, export_sample_table_data, get_sample_table_data, hide_no_value, hide_tabs, make_table, on_corr_method_change, open_trait_selection, populate_sample_attributes_values_dropdown, process_id, redraw_bar_chart, redraw_histogram, redraw_prob_plot, reset_samples_table, sample_group_types, sample_lists, show_hide_outliers, stats_mdp_change, update_stat_values;
- add = function() {
- var trait;
- trait = $("input[name=trait_hmac]").val();
- console.log("trait is:", trait);
- return $.colorbox({
- href: "/collections/add?traits=" + trait
+Stat_Table_Rows.push(
+ {
+ vn: "range_fold",
+ pretty: "Range (fold)",
+ digits: 3
+ }, {
+ vn: "interquartile",
+ pretty: "<font color='black'>Interquartile Range</font>",
+ url: "http://www.genenetwork.org/glossary.html#Interquartile",
+ digits: 3
+ }, {
+ vn: "skewness",
+ pretty: "Skewness",
+ url: "https://en.wikipedia.org/wiki/Skewness",
+ digits: 3
+ }, {
+ vn: "kurtosis",
+ pretty: "Excess Kurtosis",
+ url: "https://en.wikipedia.org/wiki/Kurtosis",
+ digits: 3
+ }
+);
+
+var add, block_by_attribute_value, block_by_index, block_outliers, change_stats_value, create_value_dropdown, edit_data_change, export_sample_table_data, get_sample_table_data, hide_no_value, hide_tabs, make_table, on_corr_method_change, open_trait_selection, populate_sample_attributes_values_dropdown, process_id, update_bar_chart, update_histogram, update_prob_plot, reset_samples_table, sample_group_types, sample_lists, show_hide_outliers, stats_mdp_change, update_stat_values;
+add = function() {
+ var trait;
+ trait = $("input[name=trait_hmac]").val();
+ return $.colorbox({
+ href: "/collections/add?traits=" + trait
+ });
+};
+$('#add_to_collection').click(add);
+sample_lists = js_data.sample_lists;
+sample_group_types = js_data.sample_group_types;
+d3.select("#select_compare_trait").on("click", (function(_this) {
+ return function() {
+ $('.scatter-matrix-container').remove();
+ return open_trait_selection();
+ };
+})(this));
+d3.select("#select_covariates").on("click", (function(_this) {
+ return function() {
+ return open_covariate_selection();
+ };
+})(this));
+$("#remove_covariates").click(function () {
+ $("input[name=covariates]").val("")
+ $(".selected_covariates").val("")
+});
+$(".select_covariates").click(function () {
+ open_covariate_selection();
+});
+$(".remove_covariates").click(function () {
+ $("input[name=covariates]").val("")
+ $(".selected_covariates").val("")
+});
+d3.select("#clear_compare_trait").on("click", (function(_this) {
+ return function() {
+ return $('.scatter-matrix-container').remove();
+ };
+})(this));
+open_trait_selection = function() {
+ return $('#collections_holder').load('/collections/list?color_by_trait #collections_list', (function(_this) {
+ return function() {
+ $.colorbox({
+ inline: true,
+ href: "#collections_holder",
+ onComplete: function(){
+ $.getScript("/static/new/javascript/get_traits_from_collection.js");
+ }
});
+ return $('a.collection_name').attr('onClick', 'return false');
};
- $('#add_to_collection').click(add);
- sample_lists = js_data.sample_lists;
- sample_group_types = js_data.sample_group_types;
- d3.select("#select_compare_trait").on("click", (function(_this) {
- return function() {
- $('.scatter-matrix-container').remove();
- return open_trait_selection();
- };
- })(this));
- d3.select("#clear_compare_trait").on("click", (function(_this) {
- return function() {
- return $('.scatter-matrix-container').remove();
- };
- })(this));
- open_trait_selection = function() {
- return $('#collections_holder').load('/collections/list?color_by_trait #collections_list', (function(_this) {
- return function() {
- $.colorbox({
- inline: true,
- href: "#collections_holder"
- });
- return $('a.collection_name').attr('onClick', 'return false');
- };
- })(this));
+ })(this));
+};
+open_covariate_selection = function() {
+ return $('#collections_holder').load('/collections/list #collections_list', (function(_this) {
+ return function() {
+ $.colorbox({
+ inline: true,
+ href: "#collections_holder",
+ width: "1000px",
+ height: "700px",
+ onComplete: function(){
+ $.getScript("/static/new/javascript/get_covariates_from_collection.js");
+ }
+ });
+ return $('a.collection_name').attr('onClick', 'return false');
};
- hide_tabs = function(start) {
- var x, _i, _results;
- _results = [];
- for (x = _i = start; start <= 10 ? _i <= 10 : _i >= 10; x = start <= 10 ? ++_i : --_i) {
- _results.push($("#stats_tabs" + x).hide());
+ })(this));
+};
+hide_tabs = function(start) {
+ var x, _i, _results;
+ _results = [];
+ for (x = _i = start; start <= 10 ? _i <= 10 : _i >= 10; x = start <= 10 ? ++_i : --_i) {
+ _results.push($("#stats_tabs" + x).hide());
+ }
+ return _results;
+};
+stats_mdp_change = function() {
+ var selected;
+ selected = $(this).val();
+ hide_tabs(0);
+ return $("#stats_tabs" + selected).show();
+};
+change_stats_value = function(sample_sets, category, value_type, decimal_places, effects) {
+ var current_value, id, in_box, the_value, title_value;
+ id = "#" + process_id(category, value_type);
+ in_box = $(id).html;
+ current_value = parseFloat($(in_box)).toFixed(decimal_places);
+ the_value = sample_sets[category][value_type]();
+ if (decimal_places > 0) {
+ title_value = the_value.toFixed(decimal_places * 2);
+ the_value = the_value.toFixed(decimal_places);
+ } else {
+ title_value = null;
+ }
+ if (the_value !== current_value) {
+ if (effects) {
+ $(id).html(the_value).effect("highlight");
+ } else {
+ $(id).html(the_value);
+ }
+ }
+ if (title_value) {
+ return $(id).attr('title', title_value);
+ }
+};
+update_stat_values = function(sample_sets) {
+ var category, row, show_effects, _i, _len, _ref, _results;
+ show_effects = $(".tab-pane.active").attr("id") === "stats_tab";
+ _ref = ['samples_primary', 'samples_other', 'samples_all'];
+ _results = [];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ category = _ref[_i];
+ _results.push((function() {
+ var _j, _len1, _results1;
+ _results1 = [];
+ for (_j = 0, _len1 = Stat_Table_Rows.length; _j < _len1; _j++) {
+ row = Stat_Table_Rows[_j];
+ _results1.push(change_stats_value(sample_sets, category, row.vn, row.digits, show_effects));
}
- return _results;
- };
- stats_mdp_change = function() {
- var selected;
- selected = $(this).val();
- hide_tabs(0);
- return $("#stats_tabs" + selected).show();
- };
- change_stats_value = function(sample_sets, category, value_type, decimal_places, effects) {
- var current_value, id, in_box, the_value, title_value;
- id = "#" + process_id(category, value_type);
- console.log("the_id:", id);
- in_box = $(id).html;
- current_value = parseFloat($(in_box)).toFixed(decimal_places);
- the_value = sample_sets[category][value_type]();
- console.log("After running sample_sets, the_value is:", the_value);
- if (decimal_places > 0) {
- title_value = the_value.toFixed(decimal_places * 2);
- the_value = the_value.toFixed(decimal_places);
- } else {
- title_value = null;
+ return _results1;
+ })());
+ }
+ return _results;
+};
+
+update_histogram_width = function() {
+ num_bins = $('#histogram').find('g.trace.bars').find('g.point').length
+
+ if (num_bins < 10) {
+ width_update = {
+ width: 400
+ }
+
+ Plotly.relayout('histogram', width_update)
+ }
+}
+
+update_histogram = function() {
+ var x;
+ var _i, _len, _ref, data;
+ _ref = _.values(root.selected_samples[root.stats_group]);
+ var trait_vals = [];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ x = _ref[_i];
+ trait_vals.push(x.value);
+ }
+ root.histogram_data[0]['x'] = trait_vals
+
+ if ($('input[name="transform"]').val() != ""){
+ root.histogram_layout['xaxis']['title'] = "<b>" + js_data.unit_type + " (" + $('input[name="transform"]').val() + ")</b>"
+ }
+
+ Plotly.newPlot('histogram', root.histogram_data, root.histogram_layout, root.modebar_options);
+ update_histogram_width()
+};
+
+update_bar_chart = function() {
+ var x;
+ var _i, _len, _ref, data;
+ _ref = _.values(root.selected_samples[root.stats_group]);
+ names_and_values = []
+ for (i = 0; i < _ref.length; i++){
+ _ref[i]["name"] = Object.keys(root.selected_samples[root.stats_group])[i]
+ }
+ trait_vals = [];
+ trait_vars = [];
+ trait_samples = [];
+
+ function sortFunction(a, b) {
+ if (a.value === b.value) {
+ return 0;
+ }
+ else {
+ return (a.value < b.value) ? -1 : 1;
+ }
+ }
+
+ if (root.bar_sort == "value") {
+ _ref.sort(sortFunction)
+ }
+
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ x = _ref[_i];
+ trait_samples.push(x.name)
+ trait_vals.push(x.value);
+ if (x["variance"] != undefined) {
+ trait_vars.push(x.variance);
+ } else{
+ trait_vars.push(null)
+ }
+ }
+
+ new_chart_range = get_bar_range(trait_vals, trait_vars)
+
+ root.bar_layout['yaxis']['range'] = new_chart_range
+
+ if ($('input[name="transform"]').val() != ""){
+ root.bar_layout['yaxis']['title'] = "<b>" + js_data.unit_type + " (" + $('input[name="transform"]').val() + ")</b>"
+ }
+
+ root.bar_data[0]['y'] = trait_vals
+ root.bar_data[0]['error_y'] = {
+ type: 'data',
+ array: trait_vars,
+ visible: root.errors_exist
+ }
+ root.bar_data[0]['x'] = trait_samples
+
+ if (trait_vals.length < 256) {
+ Plotly.newPlot('bar_chart', root.bar_data, root.bar_layout, root.modebar_options);
+ }
+};
+
+update_box_plot = function() {
+ var y_value_list = []
+ if (sample_lists.length > 1) {
+ i = 0;
+ for (var sample_group in root.selected_samples){
+ var trait_sample_data = _.values(root.selected_samples[sample_group])
+ var trait_vals = [];
+ for (j = 0, len = trait_sample_data.length; j < len; j++) {
+ this_sample_data = trait_sample_data[j];
+ trait_vals.push(this_sample_data.value);
}
- console.log("*-* the_value:", the_value);
- console.log("*-* current_value:", current_value);
- if (the_value !== current_value) {
- console.log("object:", $(id).html(the_value));
- if (effects) {
- $(id).html(the_value).effect("highlight");
+ root.box_data[i]['y'] = trait_vals
+ i++;
+ }
+ } else {
+ var trait_sample_data = _.values(root.selected_samples['samples_all'])
+ var trait_vals = [];
+ for (j = 0, len = trait_sample_data.length; j < len; j++) {
+ this_sample_data = trait_sample_data[j];
+ trait_vals.push(this_sample_data.value);
+ }
+ root.box_data[0]['y'] = trait_vals
+ }
+
+ if ($('input[name="transform"]').val() != ""){
+ root.box_layout['yaxis']['title'] = "<b>" + js_data.unit_type + " (" + $('input[name="transform"]').val() + ")</b>"
+ }
+
+ Plotly.newPlot('box_plot', root.box_data, root.box_layout, root.modebar_options)
+}
+
+update_violin_plot = function() {
+ var y_value_list = []
+ if (sample_lists.length > 1) {
+ i = 0;
+ for (var sample_group in root.selected_samples){
+ var trait_sample_data = _.values(root.selected_samples[sample_group])
+ var trait_vals = [];
+ for (j = 0, len = trait_sample_data.length; j < len; j++) {
+ this_sample_data = trait_sample_data[j];
+ trait_vals.push(this_sample_data.value);
+ }
+ root.violin_data[i]['y'] = trait_vals
+ i++;
+ }
+ } else {
+ var trait_sample_data = _.values(root.selected_samples['samples_all'])
+ var trait_vals = [];
+ for (j = 0, len = trait_sample_data.length; j < len; j++) {
+ this_sample_data = trait_sample_data[j];
+ trait_vals.push(this_sample_data.value);
+ }
+ root.violin_data[0]['y'] = trait_vals
+ }
+
+ if ($('input[name="transform"]').val() != ""){
+ root.violin_layout['yaxis']['title'] = "<b>" + js_data.unit_type + " (" + $('input[name="transform"]').val() + ")</b>"
+ }
+
+ Plotly.newPlot('violin_plot', root.violin_data, root.violin_layout, root.modebar_options)
+}
+
+
+update_prob_plot = function() {
+ return root.redraw_prob_plot_impl(root.selected_samples, root.prob_plot_group);
+};
+
+make_table = function() {
+ var header, key, row, row_line, table, the_id, the_rows, value, _i, _len, _ref, _ref1;
+ if (js_data.trait_symbol != null) {
+ header = "<thead><tr><th style=\"color: white; background-color: #369; text-align: center;\" colspan=\"100%\">Trait " + js_data.trait_id + " - " + js_data.trait_symbol + "</th></tr><tr><th style=\"text-align: right; padding-left: 5px;\">Statistic</th>";
+ } else {
+ header = "<thead><tr><th style=\"color: white; background-color: #369; text-align: center;\" colspan=\"100%\">Trait " + js_data.trait_id + ": " + js_data.short_description + "</th></tr><tr><th style=\"text-align: right; padding-left: 5px;\">Statistic</th>";
+ }
+ _ref = js_data.sample_group_types;
+ for (key in _ref) {
+ if (!__hasProp.call(_ref, key)) continue;
+ value = _ref[key];
+ the_id = process_id("column", key);
+ if (Object.keys(_ref).length > 1) {
+ header += "<th id=\"" + the_id + "\" style=\"text-align: right; padding-left: 5px;\">" + value + "</th>";
+ } else {
+ header += "<th id=\"" + the_id + "\" style=\"text-align: right; padding-left: 5px;\">Value</th>";
+ }
+ }
+
+ header += "</thead>";
+ the_rows = "<tbody>";
+ for (_i = 0, _len = Stat_Table_Rows.length; _i < _len; _i++) {
+ row = Stat_Table_Rows[_i];
+ if ((row.vn == "range_fold") && js_data.dataset_type == "Publish"){
+ continue;
+ }
+ row_line = "<tr>";
+ if (row.url != null) {
+ row_line += "<td id=\"" + row.vn + "\" align=\"right\"><a href=\"" + row.url + "\" style=\"color: #0000EE;\">" + row.pretty + "</a></td>";
+ } else {
+ row_line += "<td id=\"" + row.vn + "\" align=\"right\">" + row.pretty + "</td>";
+ }
+ _ref1 = js_data.sample_group_types;
+ for (key in _ref1) {
+ if (!__hasProp.call(_ref1, key)) continue;
+ value = _ref1[key];
+ the_id = process_id(key, row.vn);
+ row_line += "<td id=\"" + the_id + "\" align=\"right\">N/A</td>";
+ }
+ row_line += "</tr>";
+ the_rows += row_line;
+ }
+ the_rows += "</tbody>";
+ table = header + the_rows;
+ return $("#stats_table").append(table);
+};
+process_id = function() {
+ var processed, value, values, _i, _len;
+ values = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
+
+ /* Make an id or a class valid javascript by, for example, eliminating spaces */
+ processed = "";
+ for (_i = 0, _len = values.length; _i < _len; _i++) {
+ value = values[_i];
+ value = value.replace(" ", "_");
+ if (processed.length) {
+ processed += "-";
+ }
+ processed += value;
+ }
+ return processed;
+};
+edit_data_change = function() {
+ var already_seen, checkbox, name, real_dict, real_value, real_variance, row, rows, sample_sets, table, tables, _i, _j, _len, _len1;
+ already_seen = {};
+ sample_sets = {
+ samples_primary: new Stats([]),
+ samples_other: new Stats([]),
+ samples_all: new Stats([])
+ };
+ root.selected_samples = {
+ samples_primary: {},
+ samples_other: {},
+ samples_all: {}
+ };
+ tables = ['samples_primary', 'samples_other'];
+ for (_i = 0, _len = tables.length; _i < _len; _i++) {
+ table = tables[_i];
+ rows = $("#" + table).find('tr');
+ for (_j = 0, _len1 = rows.length; _j < _len1; _j++) {
+ row = rows[_j];
+ name = $(row).find('.edit_sample_sample_name').html();
+ name = $.trim(name);
+ real_value = $(row).find('.edit_sample_value').val();
+ checkbox = $(row).find(".edit_sample_checkbox");
+ if (is_number(real_value) && real_value !== "") {
+ real_value = parseFloat(real_value);
+ sample_sets[table].add_value(real_value);
+ real_variance = $(row).find('.edit_sample_se').val();
+ if (is_number(real_variance)) {
+ real_variance = parseFloat(real_variance);
} else {
- $(id).html(the_value);
+ real_variance = null;
+ }
+ real_dict = {
+ value: real_value,
+ variance: real_variance
+ };
+ root.selected_samples[table][name] = real_dict;
+ if (!(name in already_seen)) {
+ sample_sets['samples_all'].add_value(real_value);
+ root.selected_samples['samples_all'][name] = real_dict;
+ already_seen[name] = true;
}
}
- if (title_value) {
- return $(id).attr('title', title_value);
+ }
+ }
+ update_stat_values(sample_sets);
+
+ if ($('#histogram').hasClass('js-plotly-plot')){
+ update_histogram();
+ }
+ if ($('#bar_chart').hasClass('js-plotly-plot')){
+ update_bar_chart();
+ }
+ if ($('#box_plot').hasClass('js-plotly-plot')){
+ update_box_plot();
+ }
+ if ($('#violin_plot').hasClass('js-plotly-plot')){
+ update_violin_plot();
+ }
+ if ($('#prob_plot_div').hasClass('js-plotly-plot')){
+ return update_prob_plot();
+ }
+};
+show_hide_outliers = function() {
+ var label;
+ label = $('#show_hide_outliers').val();
+ if (label === "Hide Outliers") {
+ return $('#show_hide_outliers').val("Show Outliers");
+ } else if (label === "Show Outliers") {
+ $('#show_hide_outliers').val("Hide Outliers");
+ return console.log("Should be now Hide Outliers");
+ }
+};
+on_corr_method_change = function() {
+ var corr_method;
+ corr_method = $('select[name=corr_type]').val();
+ $('.correlation_desc').hide();
+ $('#' + corr_method + "_r_desc").show().effect("highlight");
+ if (corr_method === "lit") {
+ return $("#corr_sample_method").hide();
+ } else {
+ return $("#corr_sample_method").show();
+ }
+};
+$('select[name=corr_type]').change(on_corr_method_change);
+
+submit_special = function(url) {
+ $("#trait_data_form").attr("action", url);
+ return $("#trait_data_form").submit();
+};
+
+var corr_input_list = ['corr_type', 'trait_id', 'dataset', 'group', 'tool_used', 'form_url', 'corr_sample_method', 'corr_samples_group', 'corr_dataset', 'min_expr',
+ 'corr_return_results', 'loc_chr', 'min_loc_mb', 'max_loc_mb', 'p_range_lower', 'p_range_upper']
+
+$(".corr_compute").on("click", (function(_this) {
+ return function() {
+ $('input[name=tool_used]').val("Correlation");
+ $('input[name=form_url]').val("/corr_compute");
+ $('input[name=wanted_inputs]').val(corr_input_list.join(","));
+ url = "/loading";
+ return submit_special(url);
+ };
+})(this));
+
+create_value_dropdown = function(value) {
+ return "<option val=" + value + ">" + value + "</option>";
+};
+populate_sample_attributes_values_dropdown = function() {
+ var attribute_info, key, sample_attributes, selected_attribute, value, _i, _len, _ref, _ref1, _results;
+ $('#attribute_values').empty();
+ sample_attributes = {};
+ _ref = js_data.attribute_names;
+ for (key in _ref) {
+ if (!__hasProp.call(_ref, key)) continue;
+ attribute_info = _ref[key];
+ sample_attributes[attribute_info.name] = attribute_info.distinct_values;
+ }
+ selected_attribute = $('#exclude_menu').val().replace("_", " ");
+ _ref1 = sample_attributes[selected_attribute];
+ _results = [];
+ for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+ value = _ref1[_i];
+ _results.push($(create_value_dropdown(value)).appendTo($('#attribute_values')));
+ }
+ return _results;
+};
+if (Object.keys(js_data.attribute_names).length > 0) {
+ populate_sample_attributes_values_dropdown();
+}
+$('#exclude_menu').change(populate_sample_attributes_values_dropdown);
+block_by_attribute_value = function() {
+ var attribute_name, cell_class, exclude_by_value;
+ attribute_name = $('#exclude_menu').val();
+ exclude_by_value = $('#attribute_values').val();
+ cell_class = ".column_name-" + attribute_name;
+ return $(cell_class).each((function(_this) {
+ return function(index, element) {
+ var row;
+ if ($.trim($(element).text()) === exclude_by_value) {
+ row = $(element).parent('tr');
+ return $(row).find(".trait_value_input").val("x");
}
};
- update_stat_values = function(sample_sets) {
- var category, row, show_effects, _i, _len, _ref, _results;
- show_effects = $(".tab-pane.active").attr("id") === "stats_tab";
- _ref = ['samples_primary', 'samples_other', 'samples_all'];
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- category = _ref[_i];
- _results.push((function() {
- var _j, _len1, _results1;
- _results1 = [];
- for (_j = 0, _len1 = Stat_Table_Rows.length; _j < _len1; _j++) {
- row = Stat_Table_Rows[_j];
- console.log("Calling change_stats_value");
- _results1.push(change_stats_value(sample_sets, category, row.vn, row.digits, show_effects));
- }
- return _results1;
- })());
+ })(this));
+};
+$('#exclude_group').click(block_by_attribute_value);
+block_by_index = function() {
+ var end_index, error, index, index_list, index_set, index_string, start_index, _i, _j, _k, _len, _len1, _ref, _results;
+ index_string = $('#remove_samples_field').val();
+ index_list = [];
+ _ref = index_string.split(",");
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ index_set = _ref[_i];
+ /*
+ if (index_set.indexOf('<') !== -1) {
+ try {
+ start_index = parseInt(index_set.split("<")[0]);
+ end_index = parseInt(index_set.split("<")[1]);
+ for (index = _j = start_index; start_index <= end_index ? _j <= end_index : _j >= end_index; index = start_index <= end_index ? ++_j : --_j) {
+ index_list.push(index);
+ }
+ } catch (_error) {
+ error = _error;
+ alert("Syntax error");
}
- return _results;
- };
- redraw_histogram = function() {
- var x;
- return root.histogram.redraw((function() {
- var _i, _len, _ref, _results;
- _ref = _.values(root.selected_samples[root.histogram_group]);
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- x = _ref[_i];
- _results.push(x.value);
+ }
+ */
+ if (index_set.indexOf('-') !== -1) {
+ try {
+ start_index = parseInt(index_set.split("-")[0]);
+ end_index = parseInt(index_set.split("-")[1]);
+ for (index = _j = start_index; start_index <= end_index ? _j <= end_index : _j >= end_index; index = start_index <= end_index ? ++_j : --_j) {
+ index_list.push(index);
}
- return _results;
- })());
+ } catch (_error) {
+ error = _error;
+ alert("Syntax error");
+ }
+ } else {
+ index = parseInt(index_set);
+ index_list.push(index);
+ }
+ }
+ _results = [];
+ for (_k = 0, _len1 = index_list.length; _k < _len1; _k++) {
+ index = index_list[_k];
+ if ($('#block_group').val() === "primary") {
+ _results.push($('#samples_primary').find('td.column_name-Index').filter(function() { return $(this).text() == index.toString() }).closest('tr').find('.trait_value_input').val("x"));
+ } else if ($('#block_group').val() === "other") {
+ _results.push($('#samples_other').find('td.column_name-Index').filter(function() { return $(this).text() == index.toString() }).closest('tr').find('.trait_value_input').val("x"));
+ } else {
+ _results.push(void 0);
+ }
+ }
+ return _results;
+};
+$('#block_by_index').click(block_by_index);
+
+hide_no_value = function() {
+ return $('.value_se').each((function(_this) {
+ return function(_index, element) {
+ if ($(element).find('.trait_value_input').val() === 'x') {
+ return $(element).hide();
+ }
};
- redraw_bar_chart = function() {
- return root.bar_chart.redraw(root.selected_samples, root.bar_chart_group);
+ })(this));
+};
+$('#hide_no_value').click(hide_no_value);
+block_outliers = function() {
+ return $('.outlier').each((function(_this) {
+ return function(_index, element) {
+ return $(element).find('.trait_value_input').val('x');
};
- redraw_prob_plot = function() {
- return root.redraw_prob_plot_impl(root.selected_samples, root.prob_plot_group);
+ })(this));
+};
+$('#block_outliers').click(block_outliers);
+reset_samples_table = function() {
+ $('input[name="transform"]').val("");
+ $('span[name="transform_text"]').text("")
+ return $('.trait_value_input').each((function(_this) {
+ return function(_index, element) {
+ $(element).val($(element).data('value'));
+ return $(element).parents('.value_se').show();
};
- make_table = function() {
- var header, key, row, row_line, table, the_id, the_rows, value, _i, _len, _ref, _ref1;
- header = "<thead><tr><th style=\"padding-left: 5px;\">Statistic</th>";
- _ref = js_data.sample_group_types;
- for (key in _ref) {
- if (!__hasProp.call(_ref, key)) continue;
- value = _ref[key];
- the_id = process_id("column", key);
- if (Object.keys(_ref).length > 1) {
- header += "<th id=\"" + the_id + "\" style=\"padding-left: 5px;\">" + value + "</th>";
- } else {
- header += "<th id=\"" + the_id + "\" style=\"padding-left: 5px;\">Value</th>";
- }
- }
+ })(this));
+};
+$('.reset').click(function() {
+ reset_samples_table();
+ edit_data_change();
+});
- header += "</thead>";
- the_rows = "<tbody>";
- for (_i = 0, _len = Stat_Table_Rows.length; _i < _len; _i++) {
- row = Stat_Table_Rows[_i];
- if ((row.vn == "range_fold" || row.vn == "range") && js_data.dataset_type == "Publish"){
- continue;
- }
- row_line = "<tr>";
- if (row.url != null) {
- row_line += "<td id=\"" + row.vn + "\"><a href=\"" + row.url + "\">" + row.pretty + "</a></td>";
- } else {
- row_line += "<td id=\"" + row.vn + "\">" + row.pretty + "</td>";
- }
- _ref1 = js_data.sample_group_types;
- for (key in _ref1) {
- if (!__hasProp.call(_ref1, key)) continue;
- value = _ref1[key];
- the_id = process_id(key, row.vn);
- row_line += "<td id=\"" + the_id + "\">foo</td>";
+log2_normalize_data = function(zero_to_one_vals_exist) {
+ return $('.trait_value_input').each((function(_this) {
+ return function(_index, element) {
+ current_value = $(element).data("value")
+ if(isNaN(current_value)) {
+ return current_value
+ } else {
+ if (zero_to_one_vals_exist){
+ current_value = parseFloat(current_value) + 1;
}
- row_line += "</tr>";
- the_rows += row_line;
+ $(element).val(Math.log2(current_value).toFixed(3));
+ return Math.log2(current_value).toFixed(3)
}
- the_rows += "</tbody>";
- table = header + the_rows;
- return $("#stats_table").append(table);
};
- process_id = function() {
- var processed, value, values, _i, _len;
- values = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
-
- /* Make an id or a class valid javascript by, for example, eliminating spaces */
- processed = "";
- for (_i = 0, _len = values.length; _i < _len; _i++) {
- value = values[_i];
- console.log("value:", value);
- value = value.replace(" ", "_");
- if (processed.length) {
- processed += "-";
+ })(this));
+};
+
+log10_normalize_data = function(zero_to_one_vals_exist) {
+ return $('.trait_value_input').each((function(_this) {
+ return function(_index, element) {
+ current_value = $(element).data("value")
+ if(isNaN(current_value)) {
+ return current_value
+ } else {
+ if (zero_to_one_vals_exist){
+ current_value = parseFloat(current_value) + 1;
}
- processed += value;
+ $(element).val(Math.log10(current_value).toFixed(3));
+ return Math.log10(current_value).toFixed(3)
}
- return processed;
};
- edit_data_change = function() {
- var already_seen, checkbox, checked, name, real_dict, real_value, real_variance, row, rows, sample_sets, table, tables, _i, _j, _len, _len1;
- already_seen = {};
- sample_sets = {
- samples_primary: new Stats([]),
- samples_other: new Stats([]),
- samples_all: new Stats([])
- };
- root.selected_samples = {
- samples_primary: {},
- samples_other: {},
- samples_all: {}
- };
- console.log("at beginning:", sample_sets);
- tables = ['samples_primary', 'samples_other'];
- for (_i = 0, _len = tables.length; _i < _len; _i++) {
- table = tables[_i];
- rows = $("#" + table).find('tr');
- for (_j = 0, _len1 = rows.length; _j < _len1; _j++) {
- row = rows[_j];
- name = $(row).find('.edit_sample_sample_name').html();
- name = $.trim(name);
- real_value = $(row).find('.edit_sample_value').val();
- checkbox = $(row).find(".edit_sample_checkbox");
- checked = $(checkbox).prop('checked');
- if (checked && is_number(real_value) && real_value !== "") {
- real_value = parseFloat(real_value);
- sample_sets[table].add_value(real_value);
- real_variance = $(row).find('.edit_sample_se').val();
- if (is_number(real_variance)) {
- real_variance = parseFloat(real_variance);
- } else {
- real_variance = null;
- }
- real_dict = {
- value: real_value,
- variance: real_variance
- };
- root.selected_samples[table][name] = real_dict;
- if (!(name in already_seen)) {
- sample_sets['samples_all'].add_value(real_value);
- root.selected_samples['samples_all'][name] = real_dict;
- already_seen[name] = true;
- }
- }
- }
+ })(this));
+};
+
+
+sqrt_normalize_data = function() {
+ return $('.edit_sample_value').each((function(_this) {
+ return function(_index, element) {
+ current_value = parseFloat($(element).data("value")) + 1;
+ if(isNaN(current_value)) {
+ return current_value
+ } else {
+ $(element).val(Math.sqrt(current_value).toFixed(3));
+ return Math.sqrt(current_value).toFixed(3)
}
- console.log("towards end:", sample_sets);
- update_stat_values(sample_sets);
- console.log("redrawing histogram");
- redraw_histogram();
- console.log("redrawing bar chart");
- redraw_bar_chart();
- console.log("redrawing probability plot");
- return redraw_prob_plot();
};
- show_hide_outliers = function() {
- var label;
- console.log("FOOBAR in beginning of show_hide_outliers");
- label = $('#show_hide_outliers').val();
- console.log("lable is:", label);
- if (label === "Hide Outliers") {
- return $('#show_hide_outliers').val("Show Outliers");
- } else if (label === "Show Outliers") {
- console.log("Found Show Outliers");
- $('#show_hide_outliers').val("Hide Outliers");
- return console.log("Should be now Hide Outliers");
+ })(this));
+};
+
+invert_data = function() {
+ return $('.edit_sample_value').each((function(_this) {
+ return function(_index, element) {
+ current_value = parseFloat($(element).val());
+ if(isNaN(current_value)) {
+ return current_value
+ } else {
+ $(element).val(-(current_value));
+ return -(current_value)
}
};
- on_corr_method_change = function() {
- var corr_method;
- corr_method = $('select[name=corr_type]').val();
- console.log("corr_method is:", corr_method);
- $('.correlation_desc').hide();
- $('#' + corr_method + "_r_desc").show().effect("highlight");
- if (corr_method === "lit") {
- return $("#corr_sample_method").hide();
+ })(this));
+};
+
+
+qnorm_data = function() {
+ return $('.edit_sample_value').each((function(_this) {
+ return function(_index, element) {
+ current_value = parseFloat($(element).data("value")) + 1;
+ if(isNaN(current_value)) {
+ return current_value
} else {
- return $("#corr_sample_method").show();
+ $(element).val($(element).data("qnorm"));
+ return $(element).data("qnorm");
}
};
- $('select[name=corr_type]').change(on_corr_method_change);
+ })(this));
+};
- submit_special = function(url) {
- $("#trait_data_form").attr("action", url);
- return $("#trait_data_form").submit();
+zscore_data = function() {
+ return $('.edit_sample_value').each((function(_this) {
+ return function(_index, element) {
+ current_value = parseFloat($(element).data("value")) + 1;
+ if(isNaN(current_value)) {
+ return current_value
+ } else {
+ $(element).val($(element).data("zscore"));
+ return $(element).data("zscore");
+ }
};
+ })(this));
+};
+
+check_for_zero_to_one_vals = function() {
+ zero_to_one_vals_exist = false
+ $('.trait_value_input').each(function() {
+ current_value = $(this).data("value")
+ if(isNaN(current_value)) {
+ return;
+ } else {
+ current_value = parseFloat(current_value)
+ if (0 < current_value && current_value < 1){
+ zero_to_one_vals_exist = true
+ return false;
+ }
+ }
+ });
+ return zero_to_one_vals_exist
+}
- submit_corr = function(){
- var url;
- url = "/corr_compute";
- return submit_special(url);
- };
-
- $(".corr_compute").on("click", (function(_this) {
- return function() {
- var url;
- url = "/corr_compute";
- return submit_special(url);
- };
- })(this));
-
- create_value_dropdown = function(value) {
- return "<option val=" + value + ">" + value + "</option>";
+normalize_data = function() {
+ if ($('#norm_method option:selected').val() == 'log2' || $('#norm_method option:selected').val() == 'log10'){
+ zero_to_one_vals_exist = check_for_zero_to_one_vals();
+ if ($('input[name="transform"]').val() != "log2" && $('#norm_method option:selected').val() == 'log2') {
+ log2_normalize_data(zero_to_one_vals_exist)
+ $('input[name="transform"]').val("log2")
+ $('span[name="transform_text"]').text(" - log2 transformed")
+ } else {
+ if ($('input[name="transform"]').val() != "log10" && $('#norm_method option:selected').val() == 'log10'){
+ log10_normalize_data(zero_to_one_vals_exist)
+ $('input[name="transform"]').val("log10")
+ $('span[name="transform_text"]').text(" - log10 transformed")
+ }
+ }
+ }
+ else if ($('#norm_method option:selected').val() == 'sqrt'){
+ if ($('input[name="transform"]').val() != "sqrt") {
+ sqrt_normalize_data()
+ $('input[name="transform"]').val("sqrt")
+ $('span[name="transform_text"]').text(" - Square Root transformed")
+ }
+ }
+ else if ($('#norm_method option:selected').val() == 'invert'){
+ invert_data()
+ $('input[name="transform"]').val("inverted")
+ $('span[name="transform_text"]').text(" - Inverted")
+ }
+ else if ($('#norm_method option:selected').val() == 'qnorm'){
+ if ($('input[name="transform"]').val() != "qnorm") {
+ qnorm_data()
+ $('input[name="transform"]').val("qnorm")
+ $('span[name="transform_text"]').text(" - Quantile Normalized")
+ }
+ }
+ else if ($('#norm_method option:selected').val() == 'zscore'){
+ if ($('input[name="transform"]').val() != "zscore") {
+ zscore_data()
+ $('input[name="transform"]').val("zscore")
+ $('span[name="transform_text"]').text(" - Z-Scores")
+ }
+ }
+}
+
+$('#normalize').click(normalize_data);
+
+switch_qnorm_data = function() {
+ return $('.trait_value_input').each((function(_this) {
+ return function(_index, element) {
+ transform_val = $(element).data('transform')
+ if (transform_val != "") {
+ $(element).val(transform_val.toFixed(3));
+ }
+ return transform_val
};
- populate_sample_attributes_values_dropdown = function() {
- var attribute_info, key, sample_attributes, selected_attribute, value, _i, _len, _ref, _ref1, _results;
- console.log("in beginning of psavd");
- $('#attribute_values').empty();
- sample_attributes = {};
+ })(this));
+};
+$('#qnorm').click(switch_qnorm_data);
+get_sample_table_data = function(table_name) {
+ var samples;
+ samples = [];
+ $('#' + table_name).find('.value_se').each((function(_this) {
+ return function(_index, element) {
+ var attribute_info, key, row_data, _ref;
+ row_data = {};
+ row_data.name = $.trim($(element).find('.column_name-Sample').text());
+ row_data.value = $(element).find('.edit_sample_value:eq(0)').val();
+ if ($(element).find('.edit_sample_se').length > 0) {
+ row_data.se = $(element).find('.edit_sample_se').val();
+ }
+ if ($(element).find('.edit_sample_num_cases').length > 0) {
+ row_data.num_cases = $(element).find('.edit_sample_num_cases').val();
+ }
_ref = js_data.attribute_names;
for (key in _ref) {
if (!__hasProp.call(_ref, key)) continue;
attribute_info = _ref[key];
- sample_attributes[attribute_info.name] = attribute_info.distinct_values;
- }
- console.log("[visa] attributes is:", sample_attributes);
- selected_attribute = $('#exclude_menu').val().replace("_", " ");
- console.log("selected_attribute is:", selected_attribute);
- _ref1 = sample_attributes[selected_attribute];
- _results = [];
- for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
- value = _ref1[_i];
- _results.push($(create_value_dropdown(value)).appendTo($('#attribute_values')));
+ row_data[attribute_info.name] = $.trim($(element).find('.column_name-' + attribute_info.name.replace(" ", "_").replace("/", "\\/")).text());
}
- return _results;
+ return samples.push(row_data);
};
- if (js_data.attribute_names.length > 0) {
- populate_sample_attributes_values_dropdown();
- }
- $('#exclude_menu').change(populate_sample_attributes_values_dropdown);
- block_by_attribute_value = function() {
- var attribute_name, cell_class, exclude_by_value;
- attribute_name = $('#exclude_menu').val();
- exclude_by_value = $('#attribute_values').val();
- cell_class = ".column_name-" + attribute_name;
- return $(cell_class).each((function(_this) {
- return function(index, element) {
- var row;
- if ($.trim($(element).text()) === exclude_by_value) {
- row = $(element).parent('tr');
- return $(row).find(".trait_value_input").val("x");
- }
- };
- })(this));
- };
- $('#exclude_group').click(block_by_attribute_value);
- block_by_index = function() {
- var end_index, error, index, index_list, index_set, index_string, start_index, _i, _j, _k, _len, _len1, _ref, _results;
- index_string = $('#remove_samples_field').val();
- index_list = [];
- _ref = index_string.split(",");
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- index_set = _ref[_i];
- if (index_set.indexOf('-') !== -1) {
- try {
- start_index = parseInt(index_set.split("-")[0]);
- end_index = parseInt(index_set.split("-")[1]);
- for (index = _j = start_index; start_index <= end_index ? _j <= end_index : _j >= end_index; index = start_index <= end_index ? ++_j : --_j) {
- index_list.push(index);
- }
- } catch (_error) {
- error = _error;
- alert("Syntax error");
- }
- } else {
- index = parseInt(index_set);
- console.log("index:", index);
- index_list.push(index);
- }
+ })(this));
+ return samples;
+};
+export_sample_table_data = function() {
+ var format, json_sample_data, sample_data;
+ sample_data = {};
+ sample_data.primary_samples = get_sample_table_data('samples_primary');
+ sample_data.other_samples = get_sample_table_data('samples_other');
+ json_sample_data = JSON.stringify(sample_data);
+ $('input[name=export_data]').val(json_sample_data);
+ format = $('input[name=export_format]').val();
+ if (format === "excel") {
+ $('#trait_data_form').attr('action', '/export_trait_excel');
+ } else {
+ $('#trait_data_form').attr('action', '/export_trait_csv');
+ }
+ return $('#trait_data_form').submit();
+};
+
+$('.export_format').change(function() {
+ if (this.value == "csv"){
+ $('#export_code').css("display", "block")
+ } else{
+ $('#export_code').css("display", "none")
+ }
+ $('input[name=export_format]').val( this.value );
+ $('.export_format').val( this.value );
+});
+
+$('.export').click(export_sample_table_data);
+$('#block_outliers').click(block_outliers);
+_.mixin(_.str.exports());
+
+get_sample_vals = function(sample_list) {
+ var sample;
+ return this.sample_vals = (function() {
+ var i, len, results;
+ results = [];
+ for (i = 0, len = sample_list.length; i < len; i++) {
+ sample = sample_list[i];
+ if (sample.value !== null) {
+ results.push(sample.value);
}
- console.log("index_list:", index_list);
- _results = [];
- for (_k = 0, _len1 = index_list.length; _k < _len1; _k++) {
- index = index_list[_k];
- if ($('#block_group').val() === "primary") {
- console.log("block_group:", $('#block_group').val());
- console.log("row:", $('#Primary_' + index.toString()));
- _results.push($('#Primary_' + index.toString()).find('.trait_value_input').val("x"));
- } else if ($('#block_group').val() === "other") {
- console.log("block_group:", $('#block_group').val());
- console.log("row:", $('#Other_' + index.toString()));
- _results.push($('#Other_' + index.toString()).find('.trait_value_input').val("x"));
- } else {
- _results.push(void 0);
+ }
+ return results;
+ })();
+};
+
+get_sample_errors = function(sample_list) {
+ var sample;
+ return this.sample_vals = (function() {
+ var i, len, results;
+ variance_exists = false;
+ results = [];
+ for (i = 0, len = sample_list.length; i < len; i++) {
+ sample = sample_list[i];
+ if (sample.variance !== null) {
+ results.push(sample.variance);
+ variance_exists = true;
+ }
+ }
+ return [results, variance_exists];
+ })();
+};
+
+get_sample_names = function(sample_list) {
+ var sample;
+ return this.sample_names = (function() {
+ var i, len, results;
+ results = [];
+ for (i = 0, len = sample_list.length; i < len; i++) {
+ sample = sample_list[i];
+ if (sample.value !== null) {
+ results.push(sample.name);
+ }
+ }
+ return results;
+ })();
+};
+
+get_bar_bottom_margin = function(sample_list){
+ bottom_margin = 80
+ max_length = 0
+ sample_names = get_sample_names(sample_list)
+ for (i=0; i < sample_names.length; i++){
+ if (sample_names[i].length > max_length) {
+ max_length = sample_names[i].length
+ }
+ }
+
+ if (max_length > 6){
+ bottom_margin += 11*(max_length - 6)
+ }
+
+ return bottom_margin;
+}
+
+root.stats_group = 'samples_primary';
+
+if (Object.keys(js_data.sample_group_types).length > 1) {
+ full_sample_lists = [sample_lists[0], sample_lists[1], sample_lists[0].concat(sample_lists[1])]
+ sample_group_list = [js_data.sample_group_types['samples_primary'], js_data.sample_group_types['samples_other'], js_data.sample_group_types['samples_all']]
+} else {
+ full_sample_lists = [sample_lists[0]]
+ sample_group_list = [js_data.sample_group_types['samples_primary']]
+}
+
+// Define Plotly Options (for the options bar at the top of each figure)
+
+root.modebar_options = {
+ modeBarButtonsToAdd:[{
+ name: 'Export as SVG',
+ icon: Plotly.Icons.disk,
+ click: function(gd) {
+ Plotly.downloadImage(gd, {format: 'svg'})
+ }
+ },
+ {
+ name: 'Export as JPEG',
+ icon: Plotly.Icons.camera,
+ click: function(gd) {
+ Plotly.downloadImage(gd, {format: 'jpeg'})
+ }
+ }],
+ showEditInChartStudio: true,
+ plotlyServerURL: "https://chart-studio.plotly.com",
+ modeBarButtonsToRemove:['toImage', 'hoverClosest', 'hoverCompare', 'hoverClosestCartesian', 'hoverCompareCartesian', 'lasso2d', 'toggleSpikelines', 'resetScale2d'],
+ displaylogo: false
+ //modeBarButtons:['toImage2', 'zoom2d', 'pan2d', 'select2d', 'zoomIn2d', 'zoomOut2d', 'autoScale2d', 'resetScale2d'],
+}
+
+// Bar Chart
+
+root.errors_exist = get_sample_errors(sample_lists[0])[1]
+var bar_trace = {
+ x: get_sample_names(sample_lists[0]),
+ y: get_sample_vals(sample_lists[0]),
+ error_y: {
+ type: 'data',
+ array: get_sample_errors(sample_lists[0])[0],
+ visible: root.errors_exist
+ },
+ type: 'bar'
+}
+
+root.bar_data = [bar_trace]
+
+get_bar_range = function(sample_vals, sample_errors = null){
+ positive_error_vals = []
+ negative_error_vals = []
+ for (i = 0;i < sample_vals.length; i++){
+ if (sample_errors[i] != undefined) {
+ positive_error_vals.push(sample_vals[i] + sample_errors[i])
+ negative_error_vals.push(sample_vals[i] - sample_errors[i])
+ } else {
+ positive_error_vals.push(sample_vals[i])
+ negative_error_vals.push(sample_vals[i])
+ }
+ }
+
+ min_y_val = Math.min(...negative_error_vals)
+ max_y_val = Math.max(...positive_error_vals)
+
+ if (min_y_val == 0) {
+ range_top = max_y_val + Math.abs(max_y_val)*0.1
+ range_bottom = 0;
+ } else {
+ range_top = max_y_val + Math.abs(max_y_val)*0.1
+ range_bottom = min_y_val - Math.abs(min_y_val)*0.1
+ if (min_y_val > 0) {
+ range_bottom = min_y_val - 0.1*Math.abs(min_y_val)
+ } else if (min_y_val < 0) {
+ range_bottom = min_y_val + 0.1*min_y_val
+ } else {
+ range_bottom = 0
+ }
+ }
+
+ return [range_bottom, range_top]
+}
+
+root.chart_range = get_bar_range(get_sample_vals(sample_lists[0]), get_sample_errors(sample_lists[0])[0])
+val_range = root.chart_range[1] - root.chart_range[0]
+
+if (val_range < 0.05){
+ tick_digits = '.3f'
+} else if (val_range < 0.5) {
+ tick_digits = '.2f'
+} else if (val_range < 5){
+ tick_digits = '.1f'
+} else {
+ tick_digits = 'f'
+}
+
+if (js_data.num_values < 256) {
+ bar_chart_width = 25 * get_sample_vals(sample_lists[0]).length
+
+ //ZS: Set bottom margin dependent on longest sample name length, since those can get long
+ bottom_margin = get_bar_bottom_margin(sample_lists[0])
+
+ root.bar_layout = {
+ title: "<b>Trait " + js_data.trait_id + ": " + js_data.short_description + "</b>",
+ xaxis: {
+ type: 'category',
+ titlefont: {
+ size: 16
+ },
+ showline: true,
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ },
+ },
+ yaxis: {
+ title: "<b>" + js_data.unit_type + "</b>",
+ range: root.chart_range,
+ titlefont: {
+ size: 16
+ },
+ showline: true,
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ },
+ tickformat: tick_digits,
+ fixedrange: true
+ },
+ width: bar_chart_width,
+ height: 600,
+ margin: {
+ l: 55,
+ r: 30,
+ t: 30,
+ b: bottom_margin
+ }
+ };
+
+ $('.bar_chart_tab').click(function() {
+ update_bar_chart();
+ });
+}
+
+total_sample_count = 0
+for (i = 0, i < sample_lists.length; i++;) {
+ total_sample_count += get_sample_vals(sample_lists[i]).length
+}
+
+// Histogram
+var hist_trace = {
+ x: get_sample_vals(sample_lists[0]),
+ type: 'histogram'
+};
+root.histogram_data = [hist_trace];
+root.histogram_layout = {
+ bargap: 0.05,
+ title: "<b>Trait " + js_data.trait_id + ": " + js_data.short_description + "</b>",
+ xaxis: {
+ autorange: true,
+ title: js_data.unit_type,
+ titlefont: {
+ family: "arial",
+ size: 20
+ },
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ }
+ },
+ yaxis: {
+ autorange: true,
+ title: "<b>Count</b>",
+ titlefont: {
+ family: "arial",
+ size: 20
+ },
+ showline: true,
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ },
+ automargin: true,
+ fixedrange: true
+ },
+ width: 500,
+ height: 600,
+ margin: {
+ l: 70,
+ r: 30,
+ t: 100,
+ b: 50
+ }
+};
+
+$('.histogram_tab').click(function() {
+ update_histogram();
+ update_histogram_width();
+});
+
+$('.histogram_samples_group').val(root.stats_group);
+$('.histogram_samples_group').change(function() {
+ root.stats_group = $(this).val();
+ return update_histogram();
+});
+
+root.box_layout = {
+ xaxis: {
+ showline: true,
+ titlefont: {
+ family: "arial",
+ size: 20
+ },
+ tickfont: {
+ size: 16
+ },
+ },
+ yaxis: {
+ title: "<b>" + js_data.unit_type +"</b>",
+ autorange: true,
+ showline: true,
+ titlefont: {
+ family: "arial",
+ size: 20
+ },
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ },
+ tickformat: tick_digits,
+ zeroline: false,
+ automargin: true
+ },
+ margin: {
+ l: 90,
+ r: 30,
+ t: 30,
+ b: 80
+ }
+};
+if (full_sample_lists.length > 1) {
+ root.box_layout['width'] = 600;
+ root.box_layout['height'] = 500;
+ var trace1 = {
+ y: get_sample_vals(full_sample_lists[0]),
+ type: 'box',
+ name: sample_group_list[0],
+ boxpoints: 'Outliers',
+ jitter: 0.5,
+ whiskerwidth: 0.2,
+ fillcolor: 'cls',
+ pointpos: -3,
+ marker: {
+ color: 'blue',
+ size: 3
+ },
+ line: {
+ width: 1
+ }
+ }
+ var trace2 = {
+ y: get_sample_vals(full_sample_lists[1]),
+ type: 'box',
+ name: sample_group_list[1],
+ boxpoints: 'Outliers',
+ jitter: 0.5,
+ whiskerwidth: 0.2,
+ fillcolor: 'cls',
+ pointpos: -3,
+ marker: {
+ color: 'red',
+ size: 3
+ },
+ line: {
+ width: 1
+ }
+ }
+ var trace3 = {
+ y: get_sample_vals(full_sample_lists[2]),
+ type: 'box',
+ name: sample_group_list[2],
+ boxpoints: 'Outliers',
+ jitter: 0.5,
+ whiskerwidth: 0.2,
+ fillcolor: 'cls',
+ pointpos: -3,
+ marker: {
+ color: 'green',
+ size: 3
+ },
+ line: {
+ width: 1
+ }
+ }
+ root.box_data = [trace1, trace2, trace3]
+} else {
+ root.box_layout['width'] = 300;
+ root.box_layout['height'] = 400;
+ root.box_data = [
+ {
+ type: 'box',
+ y: get_sample_vals(full_sample_lists[0]),
+ name: "<b>Trait " + js_data.trait_id + "</b>",
+ boxpoints: 'Outliers',
+ jitter: 0.5,
+ whiskerwidth: 0.2,
+ fillcolor: 'cls',
+ pointpos: -3,
+ marker: {
+ size: 3
+ },
+ line: {
+ width: 1
}
}
- return _results;
- };
- $('#block_by_index').click(block_by_index);
- hide_no_value = function() {
- return $('.value_se').each((function(_this) {
- return function(_index, element) {
- if ($(element).find('.trait_value_input').val() === 'x') {
- return $(element).hide();
- }
- };
- })(this));
- };
- $('#hide_no_value').click(hide_no_value);
- block_outliers = function() {
- return $('.outlier').each((function(_this) {
- return function(_index, element) {
- return $(element).find('.trait_value_input').val('x');
- };
- })(this));
- };
- $('#block_outliers').click(block_outliers);
- reset_samples_table = function() {
- return $('.trait_value_input').each((function(_this) {
- return function(_index, element) {
- console.log("value is:", $(element).val());
- $(element).val($(element).data('value'));
- console.log("data-value is:", $(element).data('value'));
- return $(element).parents('.value_se').show();
- };
- })(this));
- };
- $('#reset').click(reset_samples_table);
- get_sample_table_data = function(table_name) {
- var samples;
- samples = [];
- $('#' + table_name).find('.value_se').each((function(_this) {
- return function(_index, element) {
- var attribute_info, key, row_data, _ref;
- row_data = {};
- row_data.name = $.trim($(element).find('.column_name-Sample').text());
- row_data.value = $(element).find('.edit_sample_value').val();
- if ($(element).find('.edit_sample_se').length !== -1) {
- row_data.se = $(element).find('.edit_sample_se').val();
- }
- _ref = js_data.attribute_names;
- for (key in _ref) {
- if (!__hasProp.call(_ref, key)) continue;
- attribute_info = _ref[key];
- row_data[attribute_info.name] = $.trim($(element).find('.column_name-' + attribute_info.name.replace(" ", "_")).text());
- }
- console.log("row_data is:", row_data);
- return samples.push(row_data);
- };
- })(this));
- return samples;
- };
- export_sample_table_data = function() {
- var format, json_sample_data, sample_data;
- sample_data = {};
- sample_data.primary_samples = get_sample_table_data('samples_primary');
- sample_data.other_samples = get_sample_table_data('samples_other');
- console.log("sample_data is:", sample_data);
- json_sample_data = JSON.stringify(sample_data);
- console.log("json_sample_data is:", json_sample_data);
- $('input[name=export_data]').val(json_sample_data);
- console.log("export_data is", $('input[name=export_data]').val());
- format = $('#export_format').val();
- if (format === "excel") {
- $('#trait_data_form').attr('action', '/export_trait_excel');
- } else {
- $('#trait_data_form').attr('action', '/export_trait_csv');
+ ]
+}
+
+box_obj = {
+ data: box_data,
+ layout: root.box_layout
+}
+
+$('.box_plot_tab').click(function() {
+ update_box_plot();
+});
+
+// Violin Plot
+
+root.violin_layout = {
+ xaxis: {
+ showline: true,
+ titlefont: {
+ family: "arial",
+ size: 20
+ },
+ tickfont: {
+ size: 16
}
- console.log("action is:", $('#trait_data_form').attr('action'));
- return $('#trait_data_form').submit();
- };
- $('#export').click(export_sample_table_data);
- console.log("before registering block_outliers");
- $('#block_outliers').click(block_outliers);
- console.log("after registering block_outliers");
- _.mixin(_.str.exports());
- root.histogram_group = 'samples_primary';
- root.histogram = new Histogram(sample_lists[0]);
- $('.histogram_samples_group').val(root.histogram_group);
- $('.histogram_samples_group').change(function() {
- root.histogram_group = $(this).val();
- return redraw_histogram();
- });
- root.bar_chart_group = 'samples_primary';
- root.bar_chart = new Bar_Chart(sample_lists);
- $('.bar_chart_samples_group').val(root.bar_chart_group);
- $('.bar_chart_samples_group').change(function() {
- root.bar_chart_group = $(this).val();
- return redraw_bar_chart();
- });
- root.prob_plot_group = 'samples_primary';
- $('.prob_plot_samples_group').val(root.prob_plot_group);
- $('.prob_plot_samples_group').change(function() {
- root.prob_plot_group = $(this).val();
- return redraw_prob_plot();
- });
- make_table();
- edit_data_change();
- $('#edit_sample_lists').change(edit_data_change);
- $('#block_by_index').click(edit_data_change);
- $('#exclude_group').click(edit_data_change);
- $('#block_outliers').click(edit_data_change);
- $('#reset').click(edit_data_change);
- return console.log("end");
+ },
+ yaxis: {
+ title: "<b>"+js_data.unit_type+"</b>",
+ autorange: true,
+ showline: true,
+ titlefont: {
+ family: "arial",
+ size: 20
+ },
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ },
+ tickformat: tick_digits,
+ zeroline: false,
+ automargin: true
+ },
+ margin: {
+ l: 90,
+ r: 30,
+ t: 30,
+ b: 80
+ }
+};
+
+if (full_sample_lists.length > 1) {
+ root.violin_layout['width'] = 600;
+ root.violin_layout['height'] = 500;
+ var trace1 = {
+ y: get_sample_vals(full_sample_lists[2]),
+ type: 'violin',
+ points: 'none',
+ box: {
+ visible: true
+ },
+ line: {
+ color: 'blue',
+ },
+ meanline: {
+ visible: true
+ },
+ name: sample_group_list[2],
+ x0: sample_group_list[2]
+ }
+ var trace2 = {
+ y: get_sample_vals(full_sample_lists[1]),
+ type: 'violin',
+ points: 'none',
+ box: {
+ visible: true
+ },
+ line: {
+ color: 'red',
+ },
+ meanline: {
+ visible: true
+ },
+ name: sample_group_list[1],
+ x0: sample_group_list[1]
+ }
+ var trace3 = {
+ y: get_sample_vals(full_sample_lists[0]),
+ type: 'violin',
+ points: 'none',
+ box: {
+ visible: true
+ },
+ line: {
+ color: 'green',
+ },
+ meanline: {
+ visible: true
+ },
+ name: sample_group_list[0],
+ x0: sample_group_list[0]
+ }
+ root.violin_data = [trace1, trace2, trace3]
+} else {
+ root.violin_layout['width'] = 300;
+ root.violin_layout['height'] = 400;
+ root.violin_data = [
+ {
+ y: get_sample_vals(full_sample_lists[0]),
+ type: 'violin',
+ points: 'none',
+ box: {
+ visible: true
+ },
+ meanline: {
+ visible: true
+ },
+ name: "<b>Trait " + js_data.trait_id + "</b>",
+ x0: "<b>Trait " + js_data.trait_id + "</b>"
+ }
+ ]
+}
+
+$('.violin_plot_tab').click(function() {
+ update_violin_plot();
+});
+
+if (get_sample_vals(sample_lists[0]).length < 256) {
+ $('.bar_chart_samples_group').change(function() {
+ root.stats_group = $(this).val();
+ return update_bar_chart();
});
+ root.bar_sort = "name"
+}
+$('.sort_by_name').click(function() {
+ root.bar_sort = "name"
+ return update_bar_chart();
+});
+$('.sort_by_value').click(function() {
+ root.bar_sort = "value"
+ return update_bar_chart();
+});
+
+root.prob_plot_group = 'samples_primary';
+$('.prob_plot_samples_group').val(root.prob_plot_group);
+$('.prob_plot_tab').click(function() {
+ return update_prob_plot();
+});
+$('.prob_plot_samples_group').change(function() {
+ root.prob_plot_group = $(this).val();
+ return update_prob_plot();
+});
+
+function isEmpty( el ){
+ return !$.trim(el.html())
+}
- Number.prototype.countDecimals = function () {
- if(Math.floor(this.valueOf()) === this.valueOf()) return 0;
- return this.toString().split(".")[1].length || 0;
+$('.stats_panel').click(function() {
+ if (isEmpty($('#stats_table'))){
+ make_table();
+ edit_data_change();
+ } else {
+ edit_data_change();
}
+});
+$('#edit_sample_lists').change(edit_data_change);
+$('#block_by_index').click(edit_data_change);
+$('#exclude_group').click(edit_data_change);
+$('#block_outliers').click(edit_data_change);
+$('#reset').click(edit_data_change);
+$('#qnorm').click(edit_data_change);
+$('#normalize').click(edit_data_change);
-}).call(this);
+Number.prototype.countDecimals = function () {
+ if(Math.floor(this.valueOf()) === this.valueOf()) return 0;
+ return this.toString().split(".")[1].length || 0;
+} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.coffee b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.coffee
deleted file mode 100644
index d14fb98c..00000000
--- a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.coffee
+++ /dev/null
@@ -1,241 +0,0 @@
-submit_special = ->
- # Add submit_special class plus a data-url field to any button
- # And it will submit to that url
- # No js changes necessary
- console.log("In submit_special")
- console.log("this is:", this)
- console.log("$(this) is:", $(this))
- url = $(this).data("url")
- console.log("url is:", url)
- $("#trait_data_form").attr("action", url);
- $("#trait_data_form").submit()
-
-update_time_remaining = (percent_complete) ->
- now = new Date()
- period = now.getTime() - root.start_time
- console.log("period is:", period)
- if period > 8000
- total_seconds_remaining = (period / percent_complete * (100 - percent_complete))/1000
- minutes_remaining = Math.round(total_seconds_remaining / 60)
- #seconds_remaining = Math.round(total_seconds_remaining % 60)
- #console.log("seconds_remaining:", seconds_remaining)
- if minutes_remaining < 3
- $('#time_remaining').text(Math.round(total_seconds_remaining) + " seconds remaining")
- else
- $('#time_remaining').text(minutes_remaining + " minutes remaining")
-
-get_progress = ->
- console.log("temp_uuid:", $("#temp_uuid").val())
- temp_uuid = $("#temp_uuid").val()
- params = { key:temp_uuid }
- params_str = $.param(params)
- url = "/get_temp_data?" + params_str
- console.log("url:", url)
- $.ajax(
- type: "GET"
- url: url
- success: (progress_data) =>
- percent_complete = progress_data['percent_complete']
- console.log("in get_progress data:", progress_data)
-
- $('#marker_regression_progress').css("width", percent_complete + "%")
-
- if root.start_time
- unless isNaN(percent_complete)
- update_time_remaining(percent_complete)
- else
- root.start_time = new Date().getTime()
- )
- return false
-
-##Block Outliers Code
-block_outliers = ->
- $('.outlier').each (_index, element) =>
- $(element).find('.trait_value_input').val('x')
-
-do_ajax_post = (url, form_data) ->
- $.ajax(
- type: "POST"
- url: url
- data: form_data
- error: (xhr, ajaxOptions, thrownError) =>
- alert("Sorry, an error occurred")
- console.log(xhr)
- clearInterval(this.my_timer)
- $('#progress_bar_container').modal('hide')
- $('#static_progress_bar_container').modal('hide')
- $("body").html("We got an error.")
- success: (data) =>
- clearInterval(this.my_timer)
- $('#progress_bar_container').modal('hide')
- $('#static_progress_bar_container').modal('hide')
- open_mapping_results(data)
- #$("body").html(data)
- )
- console.log("settingInterval")
-
- this.my_timer = setInterval(get_progress, 1000)
- return false
-
-open_mapping_results = (data) ->
- #results_window = window.open("/mapping_results_container")
- #results_window.onload = ->
- # results_window.document.getElementById("mapping_results_container").innerHTML = data
-
- $.colorbox(
- html: data
- href: "#mapping_results_holder"
- height: "90%"
- width: "90%"
- onComplete: =>
- root.create_lod_chart()
-
- #Set filename
- filename = "lod_chart_" + js_data.this_trait
-
- getSvgXml = ->
- svg = $("#topchart").find("svg")[0]
- (new XMLSerializer).serializeToString(svg)
-
- $("#exportform > #export").click =>
- svg_xml = getSvgXml()
- form = $("#exportform")
- form.find("#data").val(svg_xml)
- form.find("#filename").val(filename)
- form.submit()
-
- $("#exportpdfform > #export_pdf").click =>
- svg_xml = getSvgXml()
- form = $("#exportpdfform")
- form.find("#data").val(svg_xml)
- form.find("#filename").val(filename)
- form.submit()
- )
-
-outlier_text = "One or more outliers exist in this data set. Please review values before mapping. \
- Including outliers when mapping may lead to misleading results. \
- We recommend <A HREF=\"http://en.wikipedia.org/wiki/Winsorising\">winsorising</A> the outliers \
- or simply deleting them."
-
-showalert = (message,alerttype) ->
- $('#alert_placeholder').append('<div id="alertdiv" class="alert ' + alerttype + '"><a class="close" data-dismiss="alert">×</a><span>'+message+'</span></div>')
-
-
-$('#suggestive').hide()
-
-$('input[name=display_all]').change(() =>
- console.log("check")
- if $('input[name=display_all]:checked').val() == "False"
- $('#suggestive').show()
- else
- $('#suggestive').hide()
-)
-
-$("#pylmm_mapping_compute").on("mouseover", =>
- if ( $(".outlier").length and $(".outlier-alert").length < 1 )
- showalert(outlier_text, "alert-success outlier-alert")
-)
-
-$("#pylmm_compute").on("click", =>
- $("#progress_bar_container").modal()
- url = "/marker_regression"
- $('input[name=method]').val("pylmm")
- $('input[name=num_perm]').val($('input[name=num_perm_pylmm]').val())
- $('input[name=manhattan_plot]').val($('input[name=manhattan_plot_pylmm]:checked').val())
- form_data = $('#trait_data_form').serialize()
- console.log("form_data is:", form_data)
-
- #remove_outliers = confirm("Remove outliers?")
- #if use_outliers == true
- # block_outliers()
- do_ajax_post(url, form_data)
-)
-
-
-$("#rqtl_geno_compute").on("click", =>
- $("#progress_bar_container").modal()
- url = "/marker_regression"
- $('input[name=method]').val("rqtl_geno")
- $('input[name=num_perm]').val($('input[name=num_perm_rqtl_geno]').val())
- $('input[name=manhattan_plot]').val($('input[name=manhattan_plot_rqtl]:checked').val())
- $('input[name=control_marker]').val($('input[name=control_rqtl_geno]').val())
- form_data = $('#trait_data_form').serialize()
- console.log("form_data is:", form_data)
-
- #remove_outliers = confirm("Remove outliers?")
- #if use_outliers == true
- # block_outliers()
- do_ajax_post(url, form_data)
-)
-
-
-$("#plink_compute").on("click", =>
- $("#static_progress_bar_container").modal()
- url = "/marker_regression"
- $('input[name=method]').val("plink")
- #$('input[name=mapping_display_all]').val($('input[name=display_all_plink]').val())
- #$('input[name=suggestive]').val($('input[name=suggestive_plink]').val())
- $('input[name=maf]').val($('input[name=maf_plink]').val())
- form_data = $('#trait_data_form').serialize()
- console.log("form_data is:", form_data)
-
- do_ajax_post(url, form_data)
-)
-
-$("#gemma_compute").on("click", =>
- console.log("RUNNING GEMMA")
- $("#static_progress_bar_container").modal()
- url = "/marker_regression"
- $('input[name=method]').val("gemma")
- #$('input[name=mapping_display_all]').val($('input[name=display_all_gemma]').val())
- #$('input[name=suggestive]').val($('input[name=suggestive_gemma]').val())
- $('input[name=maf]').val($('input[name=maf_gemma]').val())
- form_data = $('#trait_data_form').serialize()
- console.log("form_data is:", form_data)
-
- do_ajax_post(url, form_data)
-)
-
-$("#interval_mapping_compute").on("mouseover", =>
- if ( $(".outlier").length and $(".outlier-alert").length < 1 )
- showalert(outlier_text, "alert-success outlier-alert")
-)
-
-$("#interval_mapping_compute").on("click", =>
- console.log("In interval mapping")
- $("#progress_bar_container").modal()
- url = "/interval_mapping"
-
- $('input[name=method]').val("reaper")
- $('input[name=manhattan_plot]').val($('input[name=manhattan_plot_reaper]:checked').val())
- $('input[name=mapping_display_all]').val($('input[name=display_all_reaper]'))
- $('input[name=suggestive]').val($('input[name=suggestive_reaper]'))
- form_data = $('#trait_data_form').serialize()
- console.log("form_data is:", form_data)
-
- do_ajax_post(url, form_data)
-)
-
-#$(".submit_special").click(submit_special)
-
-composite_mapping_fields = ->
- $(".composite_fields").toggle()
-mapping_method_fields = ->
- $(".mapping_method_fields").toggle()
-
-
-$("#use_composite_choice").change(composite_mapping_fields)
-$("#mapping_method_choice").change(mapping_method_fields)
-
-
-#### Todo: Redo below so its like submit_special and requires no js hardcoding
-toggle_enable_disable = (elem) ->
- $(elem).prop("disabled", !$(elem).prop("disabled"))
-
-$("#choose_closet_control").change(->
- toggle_enable_disable("#control_locus")
-)
-
-$("#display_all_lrs").change(->
- toggle_enable_disable("#suggestive_lrs")
-);
diff --git a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
index d6cd8134..478ed87e 100644
--- a/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
+++ b/wqflask/wqflask/static/new/javascript/show_trait_mapping_tools.js
@@ -4,9 +4,6 @@
submit_special = function(url) {
console.log("In submit_special");
- console.log("this is:", this);
- console.log("$(this) is:", $(this));
- console.log("url is:", url);
$("#trait_data_form").attr("action", url);
return $("#trait_data_form").submit();
};
@@ -154,111 +151,83 @@
};
})(this));
- $("#pylmm_mapping_compute").on("mouseover", (function(_this) {
- return function() {
- if ($(".outlier").length && $(".outlier-alert").length < 1) {
- return showalert(outlier_text, "alert-success outlier-alert");
- }
- };
- })(this));
-
- $("#pylmm_compute").on("click", (function(_this) {
- return function() {
- var form_data, url;
- //$("#progress_bar_container").modal();
- url = "/loading";
- $('input[name=method]').val("pylmm");
- $('input[name=genofile]').val($('#genofile_pylmm').val());
- $('input[name=num_perm]').val($('input[name=num_perm_pylmm]').val());
- $('input[name=manhattan_plot]').val($('input[name=manhattan_plot_pylmm]:checked').val());
- form_data = $('#trait_data_form').serialize();
- console.log("form_data is:", form_data);
- return submit_special(url);
- //return do_ajax_post(url, form_data);
- };
- })(this));
+ //ZS: This is a list of inputs to be passed to the loading page, since not all inputs on the trait page are relevant to mapping
+ var mapping_input_list = ['temp_uuid', 'trait_id', 'dataset', 'tool_used', 'form_url', 'method', 'transform', 'trimmed_markers', 'selected_chr', 'chromosomes', 'mapping_scale',
+ 'score_type', 'suggestive', 'significant', 'num_perm', 'permCheck', 'perm_output', 'perm_strata', 'categorical_vars', 'num_bootstrap', 'bootCheck', 'bootstrap_results',
+ 'LRSCheck', 'covariates', 'maf', 'use_loco', 'manhattan_plot', 'control_marker', 'control_marker_db', 'do_control', 'genofile',
+ 'pair_scan', 'startMb', 'endMb', 'graphWidth', 'lrsMax', 'additiveCheck', 'showSNP', 'showGenes', 'viewLegend', 'haplotypeAnalystCheck',
+ 'mapmethod_rqtl_geno', 'mapmodel_rqtl_geno', 'temp_trait', 'group', 'species', 'reaper_version', 'primary_samples']
- $("#rqtl_geno_compute").on("click", (function(_this) {
+ $(".rqtl_tab, #rqtl_geno_compute").on("click", (function(_this) {
return function() {
- var form_data, url;
- //$("#progress_bar_container").modal();
- url = "/loading";
- $('input[name=method]').val("rqtl_geno");
- $('input[name=genofile]').val($('#genofile_rqtl_geno').val());
- $('input[name=num_perm]').val($('input[name=num_perm_rqtl_geno]').val());
- $('input[name=manhattan_plot]').val($('input[name=manhattan_plot_rqtl]:checked').val());
- $('input[name=control_marker]').val($('input[name=control_rqtl_geno]').val());
- $('input[name=do_control]').val($('input[name=do_control_rqtl]:checked').val());
- form_data = $('#trait_data_form').serialize();
- console.log("form_data is:", form_data);
- if ($('input[name=pair_scan]:checked').val() == "true") {
- console.log("PAIR SCAN:", $('input[name=pair_scan]:checked').val())
- run_pair_scan = confirm(runtime_warning_text)
- if (run_pair_scan == true) {
- submit_special(url);
- }
- else {
- return false
- }
- }
- else {
+ if ($(this).hasClass('active') || $(this).attr('id') == "rqtl_geno_compute"){
+ var form_data, url;
+ url = "/loading";
+ $('input[name=method]').val("rqtl_geno");
+ $('input[name=selected_chr]').val($('#chr_rqtl_geno').val());
+ $('input[name=genofile]').val($('#genofile_rqtl_geno').val());
+ $('input[name=num_perm]').val($('input[name=num_perm_rqtl_geno]').val());
+ $('input[name=categorical_vars]').val(js_data.categorical_vars)
+ $('input[name=manhattan_plot]').val($('input[name=manhattan_plot_rqtl]:checked').val());
+ $('input[name=control_marker]').val($('input[name=control_rqtl_geno]').val());
+ $('input[name=do_control]').val($('input[name=do_control_rqtl]:checked').val());
+ $('input[name=tool_used]').val("Mapping");
+ $('input[name=form_url]').val("/run_mapping");
+ $('input[name=wanted_inputs]').val(mapping_input_list.join(","));
return submit_special(url);
- //return do_ajax_post(url, form_data);
+ } else {
+ return true
}
};
})(this));
-
- $("#plink_compute").on("click", (function(_this) {
- return function() {
- var form_data, url;
- //$("#static_progress_bar_container").modal();
- url = "/loading";
- $('input[name=method]').val("plink");
- $('input[name=maf]').val($('input[name=maf_plink]').val());
- form_data = $('#trait_data_form').serialize();
- console.log("form_data is:", form_data);
- return submit_special(url);
- //return do_ajax_post(url, form_data);
- };
- })(this));
-
- $("#gemma_compute").on("click", (function(_this) {
+
+ $(".gemma_tab, #gemma_compute").on("click", (function(_this) {
return function() {
- var form_data, url;
- console.log("RUNNING GEMMA");
- //$("#static_progress_bar_container").modal();
- url = "/loading";
- $('input[name=method]').val("gemma");
- $('input[name=maf]').val($('input[name=maf_gemma]').val());
- form_data = $('#trait_data_form').serialize();
- console.log("form_data is:", form_data);
- return submit_special(url);
- //return do_ajax_post(url, form_data);
+ if ($(this).hasClass('active') || $(this).attr('id') == "gemma_compute"){
+ var form_data, url;
+ console.log("RUNNING GEMMA");
+ url = "/loading";
+ $('input[name=method]').val("gemma");
+ $('input[name=selected_chr]').val($('#chr_gemma').val());
+ $('input[name=num_perm]').val(0);
+ $('input[name=genofile]').val($('#genofile_gemma').val());
+ $('input[name=maf]').val($('input[name=maf_gemma]').val());
+ $('input[name=tool_used]').val("Mapping");
+ $('input[name=form_url]').val("/run_mapping");
+ $('input[name=wanted_inputs]').val(mapping_input_list.join(","));
+ return submit_special(url);
+ } else {
+ return true
+ }
};
})(this));
- $("#interval_mapping_compute").on("click", (function(_this) {
+ $(".reaper_tab, #interval_mapping_compute").on("click", (function(_this) {
return function() {
- var form_data, url;
- console.log("In interval mapping");
- //$("#progress_bar_container").modal();
- url = "/loading";
- $('input[name=method]').val("reaper");
- $('input[name=genofile]').val($('#genofile_reaper').val());
- $('input[name=num_perm]').val($('input[name=num_perm_reaper]').val());
- $('input[name=control_marker]').val($('input[name=control_reaper]').val());
- $('input[name=do_control]').val($('input[name=do_control_reaper]:checked').val());
- $('input[name=manhattan_plot]').val($('input[name=manhattan_plot_reaper]:checked').val());
- $('input[name=mapping_display_all]').val($('input[name=display_all_reaper]'));
- $('input[name=suggestive]').val($('input[name=suggestive_reaper]'));
- form_data = $('#trait_data_form').serialize();
- console.log("form_data is:", form_data);
- return submit_special(url);
- //return do_ajax_post(url, form_data);
+ if ($(this).hasClass('active') || $(this).attr('id') == "interval_mapping_compute"){
+ var form_data, url;
+ console.log("In interval mapping");
+ url = "/loading";
+ $('input[name=method]').val("reaper");
+ $('input[name=selected_chr]').val($('#chr_reaper').val());
+ $('input[name=genofile]').val($('#genofile_reaper').val());
+ $('input[name=num_perm]').val($('input[name=num_perm_reaper]').val());
+ $('input[name=control_marker]').val($('input[name=control_reaper]').val());
+ $('input[name=do_control]').val($('input[name=do_control_reaper]:checked').val());
+ $('input[name=manhattan_plot]').val($('input[name=manhattan_plot_reaper]:checked').val());
+ $('input[name=mapping_display_all]').val($('input[name=display_all_reaper]'));
+ $('input[name=suggestive]').val($('input[name=suggestive_reaper]'));
+ $('input[name=tool_used]').val("Mapping");
+ $('input[name=form_url]').val("/run_mapping");
+ $('input[name=wanted_inputs]').val(mapping_input_list.join(","));
+ return submit_special(url);
+ } else {
+ return true
+ }
};
})(this));
- $("#interval_mapping_compute").on("mouseover", (function(_this) {
+ $("#interval_mapping_compute, #gemma_compute, rqtl_geno_compute").on("mouseover", (function(_this) {
return function() {
if ($(".outlier").length && $(".outlier-alert").length < 1) {
return showalert(outlier_text, "alert-success outlier-alert");
@@ -278,6 +247,36 @@
$("#mapping_method_choice").change(mapping_method_fields);
+ $("#mapmodel_rqtl_geno").change(function() {
+ if ($(this).val() == "np"){
+ $("#mapmethod_rqtl_geno").attr('disabled', 'disabled');
+ $("#mapmethod_rqtl_geno").css('background-color', '#CCC');
+ $("#missing_geno").attr('disabled', 'disabled');
+ $("#missing_geno").css('background-color', '#CCC');
+ } else {
+ $("#mapmethod_rqtl_geno").removeAttr('disabled');
+ $("#mapmethod_rqtl_geno").css('background-color', '#FFF');
+ $("#missing_geno").removeAttr('disabled');
+ $("#missing_geno").css('background-color', '#FFF');
+ }
+ });
+
+ $("#mapmethod_rqtl_geno").change(function() {
+ if ($(this).val() == "mr"){
+ $("#missing_geno_div").css('display', 'block');
+ } else {
+ $("#missing_geno_div").css('display', 'none');
+ }
+ });
+
+ $("li.mapping_tab").click(function() {
+ if ($(this).hasClass("rqtl")){
+ $(".rqtl_description").css("display", "block");
+ } else {
+ $(".rqtl_description").css("display", "none");
+ }
+ });
+
toggle_enable_disable = function(elem) {
return $(elem).prop("disabled", !$(elem).prop("disabled"));
};
diff --git a/wqflask/wqflask/static/new/javascript/stats.coffee b/wqflask/wqflask/static/new/javascript/stats.coffee
deleted file mode 100644
index bf79d6c3..00000000
--- a/wqflask/wqflask/static/new/javascript/stats.coffee
+++ /dev/null
@@ -1,71 +0,0 @@
-class Stats
- constructor: (@the_values) ->
-
- add_value: (value) ->
- @the_values.push(value)
-
- n_of_samples: ->
- return @the_values.length
-
- sum: ->
- total = 0
- total += value for value in @the_values
- return total
-
- mean: ->
- return @sum() / @n_of_samples()
-
- median: ->
- is_odd = @the_values.length % 2
- median_position = Math.floor(@the_values.length / 2)
- the_values_sorted = @the_values.sort((a,b) -> return a - b)
- if is_odd
- return the_values_sorted[median_position]
- else
- return (the_values_sorted[median_position] +
- the_values_sorted[median_position - 1]) / 2
-
- std_dev: ->
- sum = 0
- for value in @the_values
- step_a = Math.pow(value - @mean(), 2)
- sum += step_a
- step_b = sum / @the_values.length
- return Math.sqrt(step_b)
-
- std_error: ->
- return @std_dev() / Math.sqrt(@n_of_samples())
-
- # We could also just use the first value here (and last in max) because we assume the
- # lists are sorted for things like interquartile (and in fact they are)
- min: ->
- return Math.min(@the_values...)
-
- max: ->
- return Math.max(@the_values...)
-
- range: ->
- return @max() - @min()
-
- range_fold: ->
- return Math.pow(2, @range())
-
- interquartile: ->
- length = @the_values.length
- # Todo: Consider averaging q1 and a3 when the length is odd
- console.log("in interquartile the_values are:", @the_values)
- console.log("length is:", length)
- q1 = @the_values[Math.floor(length * .25)]
- q3 = @the_values[Math.floor(length * .75)]
- iq = q3 - q1
- return Math.pow(2, iq)
-
-
-bxd_only = new Stats([3, 5, 7, 8])
-console.log("[xred] bxd_only mean:", bxd_only.mean())
-console.log("[xgreen] bxd_only median:", bxd_only.median())
-console.log("[xpurple] bxd_only std_dev:", bxd_only.std_dev())
-console.log("[xmagenta] bxd_only std_error:", bxd_only.std_error())
-console.log("[xyellow] bxd_only min:", bxd_only.min())
-
-window.Stats = Stats
diff --git a/wqflask/wqflask/static/new/javascript/stats.js b/wqflask/wqflask/static/new/javascript/stats.js
index 203652f8..4df03412 100644
--- a/wqflask/wqflask/static/new/javascript/stats.js
+++ b/wqflask/wqflask/static/new/javascript/stats.js
@@ -69,11 +69,23 @@ Stats = (function() {
};
Stats.prototype.range = function() {
- return this.max() - this.min();
+ if (js_data.dataset_type == "ProbeSet"){
+ if (js_data.data_scale == "linear_positive"){
+ return Math.log2(this.max()) - Math.log2(this.min());
+ } else {
+ return this.max() - this.min()
+ }
+ } else {
+ return this.max() - this.min()
+ }
};
Stats.prototype.range_fold = function() {
- return Math.pow(2, this.range());
+ if (js_data.dataset_type == "ProbeSet"){
+ return Math.pow(2, this.range());
+ } else {
+ return this.range()
+ }
};
Stats.prototype.interquartile = function() {
@@ -81,26 +93,86 @@ Stats = (function() {
length = this.the_values.length;
console.log("in interquartile the_values are:", this.the_values);
console.log("length is:", length);
- q1 = this.the_values[Math.floor(length * .25)];
- q3 = this.the_values[Math.floor(length * .75)];
+ if (js_data.dataset_type == "ProbeSet" && js_data.data_scale == "linear_positive") {
+ q1 = Math.log2(this.the_values[Math.floor(length * .25)]);
+ q3 = Math.log2(this.the_values[Math.floor(length * .75)]);
+ } else {
+ q1 = this.the_values[Math.floor(length * .25)];
+ q3 = this.the_values[Math.floor(length * .75)];
+ }
iq = q3 - q1;
- return Math.pow(2, iq);
+ if (js_data.dataset_type == "ProbeSet") {
+ return Math.pow(2, iq);
+ } else {
+ return iq;
+ }
};
- return Stats;
+ Stats.prototype.skewness = function() {
+ var len = this.the_values.length,
+ delta = 0,
+ delta_n = 0,
+ term1 = 0,
+ N = 0,
+ mean = 0,
+ M2 = 0,
+ M3 = 0,
+ g;
-})();
+ for ( var i = 0; i < len; i++ ) {
+ N += 1;
+
+ delta = this.the_values[ i ] - mean;
+ delta_n = delta / N;
-bxd_only = new Stats([3, 5, 7, 8]);
+ term1 = delta * delta_n * (N-1);
-console.log("[xred] bxd_only mean:", bxd_only.mean());
+ M3 += term1*delta_n*(N-2) - 3*delta_n*M2;
+ M2 += term1;
+ mean += delta_n;
+ }
+ // Calculate the population skewness:
+ g = Math.sqrt( N )*M3 / Math.pow( M2, 3/2 );
-console.log("[xgreen] bxd_only median:", bxd_only.median());
+ // Return the corrected sample skewness:
+ return Math.sqrt( N*(N-1))*g / (N-2);
+ };
-console.log("[xpurple] bxd_only std_dev:", bxd_only.std_dev());
+ Stats.prototype.kurtosis = function() {
+ var len = this.the_values.length,
+ delta = 0,
+ delta_n = 0,
+ delta_n2 = 0,
+ term1 = 0,
+ N = 0,
+ mean = 0,
+ M2 = 0,
+ M3 = 0,
+ M4 = 0,
+ g;
+
+ for ( var i = 0; i < len; i++ ) {
+ N += 1;
+
+ delta = this.the_values[ i ] - mean;
+ delta_n = delta / N;
+ delta_n2 = delta_n * delta_n;
+
+ term1 = delta * delta_n * (N-1);
+
+ M4 += term1*delta_n2*(N*N - 3*N + 3) + 6*delta_n2*M2 - 4*delta_n*M3;
+ M3 += term1*delta_n*(N-2) - 3*delta_n*M2;
+ M2 += term1;
+ mean += delta_n;
+ }
+ // Calculate the population excess kurtosis:
+ g = N*M4 / (M2*M2) - 3;
+ //Return the corrected sample excess kurtosis:
+ return (N-1) / ( (N-2)*(N-3) ) * ( (N+1)*g + 6 );
+ };
-console.log("[xmagenta] bxd_only std_error:", bxd_only.std_error());
+ return Stats;
-console.log("[xyellow] bxd_only min:", bxd_only.min());
+})();
window.Stats = Stats;
diff --git a/wqflask/wqflask/static/new/javascript/thank_you.coffee b/wqflask/wqflask/static/new/javascript/thank_you.coffee
deleted file mode 100644
index 975f85c6..00000000
--- a/wqflask/wqflask/static/new/javascript/thank_you.coffee
+++ /dev/null
@@ -1,4 +0,0 @@
-$ ->
- console.log("Starting transform")
- $('#login_out').text('Sign out').attr('href', '/logout').removeClass('modalize')
- console.log("Transformed to sign out I hope")
diff --git a/wqflask/wqflask/static/new/javascript/typeahead_rn6.json b/wqflask/wqflask/static/new/javascript/typeahead_rn6.json
new file mode 100644
index 00000000..1889d8a2
--- /dev/null
+++ b/wqflask/wqflask/static/new/javascript/typeahead_rn6.json
@@ -0,0 +1 @@
+var rat_genes = ["A2ml1","A3galt2","A1cf","AA926063","A2m","A4gnt","A4galt","A1bg","Aadacl4","Aadac","Aacs","Aadat","Aaas","Aadacl2","Aadacl3","Aagab","Aak1","Aaed1","Aanat","Aamdc","Aard","Aasdh","Aar2","Aasdhppt","Aass","Aars","Aarsd1","Aars2","Abca1","Aatk","Abca14","Abca13","Abca15","Aatf","Aamp","Abca12","Abca16","Abca3","Abat","Abca17","Abca5","Abca8","Abca2","Abca9","Abca4","Abca8a","Abcb1a","Abcb11","Abcb10","Abca6","Abca7","Abcb1b","Abcb5","Abcb4","Abcb7","Abcb8","Abcb6","Abcc1","Abcb9","Abcc3","Abcc10","Abcc12","Abcc4","Abcc6","Abcc2","Abcc5","Abcd3","Abcd4","Abcc9","Abcd1","Abcf1","Abce1","Abcf3","Abcg2","Abcg1","Abcg3l1","Abcf2","Abcg4","Abcg5","Abcg3l3","Abcg3","Abcg3l4","Abcg3l2","Abcd2","Abhd11os","Abhd10","Abcg8","Abcc8","Abhd12","Abhd12b","Abhd1","Abhd13","Abhd14a","Abhd15","Abhd11","Abhd16b","Abhd17a","Abhd17b","Abhd16a","Abhd14b","Abhd2","Abhd3","Abhd4","Abhd17c","Abhd5","Abhd8","Abhd6","Abi2","Abi3","Abhd18","Ablim1","Abl2","Abl1","Abi1","Ablim3","Ablim2","Abo2","Abo3","Abra","Abr","Abi3bp","Abracl","Abraxas1","Abt1","Abtb1","Ac1576","Acaa1b","Abraxas2","Abo","Acacb","Abtb2","Acad11","Acad8","Acad9","Acaa2","Acadl","Acadm","Acadsb","Acads","Acadvl","Acaca","Acap1","Acap3","Acat1","Acat2","Acad10","Acaa1a","Acap2","Acat2l1","Acbd4","Acbd5","Acbd7","Acbd6","Accs","Acbd3","Acd","Acan","Acer1","Acer2","Accsl","Ace2","Ackr1","Ache","Ackr2","Ackr3","Acin1","Ackr4","Acnat1","Acmsd","Acly","Acnat2","Acer3","Ace3","Ace","Acot1","Aco1","Acot13","Aco2","Acot12","Acot4","Acot2","Acot6","Acot5","Acot11","Acot8","Acot9","Acod1","Acot3","Acox2","Acot7","Acox1","Acox3","Acp2","Acp1","Acp4","Acp6","Acp5","Acp7","Acrv1","Acrbp","Acsbg1","Acr","Acpp","Acsbg2","Acoxl","Acsf2","Acsf3","Acsl3","Acsl5","Acsl1","Acsl4","Acsl6","Acsm1","Acsm4","Acss1","Acsm2","Acp1-ps1","Acsm5","Acss2","Acsm3","Acss3","Actg1","Acta1","Actc1","Actg2","Actbl2","Actb","Acta2","Actl7a","Actl6a","Actl6b","Actl7b","Actl9","Actl9b","Actl11","Actn3","Actn2","Actl10","Actn1","Actr10","Actn4","Actr1a","Actr1b","Actr3b","Actr2","Actr5","Actr6","Actr3","Actr8","Actrt1","Actrt2","Actrt3","Acvr1b","Acvr1c","Acvr2a","Acvr2b","Acvrl1","Acy3","Acy1","Acyp1","Acyp2-ps1","Acyp2","Adal","Ada","Adad1","Adad2","Adam11","Adam10","Acvr1","Adam12","Adam18","Adam15","Adam19","Adam17","Adam1a","Adam20","Adam2","Adam25","Adam26a","Adam23","Adam24","Adam22","Adam32","Adam34l","Adam33","Adam34","Adam3a","Adam21","Adam4l1","Adam4","Adam6","Adam5","Adam28","Adam30","Adam7","Adamdec1","Adam9","Adam8","Adamts12","Adamts1","Adamts10","Adamts15","Adamts13","Adamts14","Adamts16","Adamts17","Adamts18","Adamts19","Adamts2","Adamts20","Adamts3","Adamts4","Adamts8","Adamts6","Adamts5","Adamts7","Adamts9","Adamtsl1","Adamtsl2","Adamtsl3","Adamtsl5","Adamtsl4","Adap2","Adap1","Adar","Adat1","Adarb2","Adat2","Adarb1","Adck1","Adck2","Adck5","Adcy1","Adcy2","Adcy10","Adcy3","Adcy4","Adcy5","Adcy6","Adcy7","Adcy9","Adcy8","Adat3","Adcyap1r1","Adcyap1","Add1","Add2","Adgra1","Adgb","Add3","Adgra2","Adgra3","Adgrb1","Adgrb2","Adgrd1","Adgrb3","Adgre4","Adgre1","Adgrf1","Adgre5","Adgrf2","Adgrf3","Adgrf4","Adgrg1","Adgrg3","Adgrf5","Adgrg2","Adgrg4","Adgrg7","Adgrg5","Adgrg6","Adgrl1","Adgrl4","Adgrl2","Adgrv1","Adgrl3","Adh4","Adh1","Adh6","Adh6a","Adh7","Adhfe1","Adi1","Adh5","Adipor1","Adipor2","Adm2","Adig","Adk","Adnp","Adm","Ado","Adipoq","Adnp2","Adora2b","Adora3","Adpgk","Adprh","Adprhl2","Adora1","Adprhl1","Adora2a","Adprm","Adra1b","Adra1d","Adra2a","Adra2c","Adra2b","Adra1a","Adrb1","Adrm1","Adtrp","Adsl","Adss","Adssl1","Adrb3","Adrb2","Aebp1","Aebp2","Aen","Afap1l1","Afap1","Afap1l2","Afdn","Aff1","Aff2","Afg1l","Aff3","Aff4","Afg3l1","Aff1-as1","Afg3l2","Afmid","Aftph","Afm","Afp","Aga","Agap1","Agap2","Agap3","Agbl1","Agbl3","Agbl2","Agbl4","Agbl5","Agfg1-ps1","Agfg1","Agfg2","Aggf1","Agk","Agl","Agmat","Aes","Agmo","Ago1","Ago3","Ago2","Ager","Ago4","Agpat2","Agpat1","Agpat3","Agpat4","Agpat5","Agr2","Agps","Agr3","Agrp","Agtpbp1","Agrn","Agtrap","Agtr1b","Agt","Agtr2","Agxt","Agxt2","Ahctf1","Ahcyl1","Ahcy","Ahdc1","Ahcyl2","Ahnak2","Ahnak","Agtr1a","Ahi1","Ahrr","Ahsa2","Ahsa1","Ahsp","Ahr","Aicda","Aif1l","Aida","Aifm2","Ahsg","Aifm1","Aifm3","Aig1","Aim2","Aimp1","Aipl1","Aip","Aimp2","Aire","Ajap1","Ajm1","Ajuba","Ak3","Ak1","Ak2","Aif1","Ak5","Ak4","Ak6","Ak9","Ak8","Ak7","Akap10","Akap1","Akap11","Akap14","Akap17a","Akap12","Akap13","Akap17b","Akap2","Akap3","Akain1","Akap4","Akap5","Akap7","Akap8","Akap6","Akap8l","Akirin1","Akip1","Akap9","Akirin2","Akna","Aknad1","Akr1a1","Akp3","Akr1b1-ps1","Akr1b1-ps2","Akr1b1-ps3","Akr1b7","Akr1b10","Akr1b1","Akr1b8","Akr1c1","Akr1c12","Akr1c12l1","Akr1c13","Akr1c19","Akr1c14","Akr1c2","Akr1cl","Akr1d1","Akr1c3","Akr1e2","Akr7a2","Akr7a3","Akt1s1","Aktip","Akt3","Akt2","Alas1","Alad","Alas2","Alcam","Aldh16a1","Aldh1a1","Aldh1a2","Aldh1a3","Akt1","Aldh1a7","Alb","Aldh1b1","Aldh1l1","Aldh1l2","Aldh18a1","Aldh3b2","Aldh3b1","Aldh3a1","Aldh5a1","Aldh8a1","Aldh7a1","Aldh6a1","Aldh3a2","Aldh9a1","Aldh2","Aldoart2","Alg1","Aldoc","Aldob","Aldoa","Alg10","Alg11","Alg12","Alg14","Alg2","Alg13","Alg3","Alg5","Alg8","Alg6","Alg9","Alk","Alkal1","Alkbh1","Alkbh2","Alkal2","Aldh4a1","Alkbh3","Alkbh4","Alkbh5","Alkbh6","Alkbh7","Alkbh8","Allc","Alms1","Alox12b","Alox12e","Alox12","Alox15b","Alox15","Aloxe3","Alox5ap","Alox5","Alpi","Alpk1","Alpk2","Alpk3","Alppl2","Alpp","Alpl","Als2","Als2cr12","Als2cl","Alx3","Alx4","Alyref","Amacr","Ambn","Ambp","Ambra1","Amd1-ps1","Amd1-ps2","Amd1","Amd1-ps3","Amdhd1","Amer1","Amdhd2","Amer2","Amer3","Amelx","Alx1","Amfr","Amh","Amhr2","Amigo3","Amigo1","Amigo2","Ammecr1","Ammecr1l","Amn1","Amotl1","Amot","Amotl2","Amn","Ampd1","Ampd3","Ampd2","Amtn","Amph","Amt","Amy2-ps1","Amy2-ps2","Amy1a","Amy2a3","Amz1","Amz2","Anapc10","Anapc11","Anapc13","Anapc1","Anapc15","Anapc2","Anapc16","Anapc4","Anapc7","Anapc5","Andpro","Ang2","Ang","Angel1","Angel2","Angpt4","Angptl1","Angptl2","Angptl3","Angptl4","Angpt2","Angptl6","Angptl7","Ank1","Ank2","Ankar","Ankdd1a","Ankdd1b","Angptl8","Angpt1","Ank3","Ankfn1","Ankef1","Ankfy1","Ankh","Ankib1","Ankhd1","Ankk1","Ankle1","Ankmy1","Ankle2","Ankmy2","Ankra2","Ankrd10","Ankrd11","Ankrd1","Ankrd13a","Ankrd12","Ankrd13b","Ankrd13d","Ankrd13c","Ankrd16","Ankrd22","Ankrd2","Ankrd23","Ankrd24","Ankrd17","Ankrd26","Ankrd27","Ankrd28","Ankrd30a","Ankrd31","Ankrd33b","Ankrd34a","Ankrd29","Ankrd34c","Ankrd35","Ankrd36","Ankrd37","Ankrd39","Ankrd40","Ankrd42","Ankrd44","Ankrd45","Ankrd33","Ankrd46","Ankrd34b","Ankrd49","Ankrd50","Ankrd53","Ankrd52","Ankrd54","Ankrd6","Ankrd60","Ankrd55","Ankrd63","Ankrd7","Ankrd66","Ankrd9","Ankrd65","Anks1a","Anks3","Anks4b","Anks1b","Ankrd61","Ankub1","Ankzf1","Anlnl1","Anln","Ano10","Ano1","Ano3","Ano2","Ano4","Anks6","Ano6","Ano8","Ano7","Ano5","Ano9","Anp32a","Anp32e","Anp32b","Anos1","Antxr1","Antxrl","Antxr2","Anxa10","Anxa11","Anxa2-ps1","Anxa13","Anxa1","Anpep","Anxa3","Anxa2","Anxa4","Anxa6","Anxa8","Anxa5","Anxa7","Aoc2-ps1","Anxa9","Aoah","Aoc1","Aox2","Aoc3","Aox1","Ap1ar","Aox3","Ap1b1","Ap1g1","Aox4","Ap1g2","Ap1m2","Ap1m1","Ap1s1","Ap1s2","Ap1s3","Ap2a1","Ap2a2","Ap2s1","Ap2b1","Ap3b1","Ap3b2","Ap3d1","Ap3m1","Ap3m2","Ap3s1","Ap3s2","Ap4b1","Ap4e1","Ap4m1","Ap5b1","Ap4s1","Ap2m1","Ap5m1","Ap5s1","Ap5z1","Apba3","Apba1","Apba2","Apaf1","Apbb1ip","Apbb3","Apbb2","Apbb1","Apcdd1","Apbh","Apc2","Apcdd1l","Apeg3","Apcs","Apeh","Apc","Apex2l1","Apex2","Aph1a","Apex1","Aph1b","Api5","Apip","Aplf","Aplnr","Apln","Aplp1","Apmap","Aplp2","Apoa2","Apoa4","Apoa5","Apobec1","Apoa1","Apobec2","Apobec3b","Apobec4","Apobr","Apob","Apoc1","Apoc4","Apoc2","Apoc3","Apod","Apof","Apol11a","Apol2","Apoh","Apol3","Apol9a","Apold1","Apom","Apon","Apoo","Apool","Apopt1","Apoe","Appl1","Appbp2","Appl2","Aptr","Aprt","Aptx","App","Aqp11","Aqp12a","Aqp1","Aqp3","Aqp5","Aqp2","Aqp6","Aqp7","Aqp8","Aqr","Aqp9","Aqp4","Araf","Arap2","Arap1","Arcn1","Arap3","Areg","Ar","Arc","Arf2","Arel1","Arf5","Arf1","Arf4","Arf3","Arf6","Arfgap1","Arfgap2","Arfgap3","Arfgef1","Arfgef2","Arfgef3","Arfip1","Arfip2","Arfrp1","Arg2","Arglu1","Arhgap11a","Arg1","Arhgap1","Arhgap10","Arhgap12","Arhgap20","Arhgap18","Arhgap19","Arhgap17","Arhgap22","Arhgap21","Arhgap23","Arhgap25","Arhgap24","Arhgap27","Arhgap15","Arhgap28","Arhgap26","Arhgap30","Arhgap29","Arhgap31","Arhgap32","Arhgap36","Arhgap39","Arhgap40","Arhgap35","Arhgap4","Arhgap33","Arhgap42","Arhgap44","Arhgap6","Arhgap45","Arhgap5","Arhgap8","Arhgap9","Arhgdib","Arhgdia","Arhgdig","Arhgef10l","Arhgef10","Arhgef1","Arhgef12","Arhgef11","Arhgef15","Arhgef16","Arhgef17","Arhgef18","Arhgef19","Arhgef2","Arhgef25","Arhgef26","Arhgef28","Arhgef3","Arhgef33","Arhgef38","Arhgef37","Arhgef4","Arhgef39","Arhgef5","Arhgef40","Arhgef6","Arhgef9","Arhgef7","Arid1a","Arid2","Arid3b","Arid3a","Arid4a","Arid1b","Arid4b","Arid5b","Arid5a","Arih1","Arih2","Arid3c","Arl10","Arl1","Arl11","Arl13a","Arl14","Arl13b","Arl14ep","Arl14epl","Arl16","Arl15","Arih2os","Arl2","Arl2bp","Arl4a","Arl4c","Arl3","Arl4d","Arl5a","Arl5c","Arl5b","Arl6","Arl2-ps1","Arl6ip1","Arl6ip5","Arl6ip4","Arl6ip6","Arl8a","Arl8b","Arl9","Armc12","Armc10","Armc1","Armc2","Armc3","Armc4","Armc5","Armc6","Armc7","Armc9","Armc8","Armcx1","Armcx2","Armcx4","Armcx3","Armcx6","Armt1","Arnt2","Arnt","Arpc1a","Arntl2","Arntl","Arpc1b","Armcx5","Arpc2","Arpc3","Arpc5","Arpc4","Arpc5l-ps1","Arpc5l","Arpin","Arpp19","Arrb2-ps","Arrdc2","Arr3","Arrdc1","Arpp21","Arrb1","Arrdc3","Arrb2","Arrdc5","Arrdc4","Arsa","Arse","Arsb","Arsi","Arsg","Arsj","Arsk","Art1","Art4","Art3","Art5","Artn","Arv1","Arvcf","Arxes2","Arx","As3mt","Asah1","Asah2","Asap2","Asap1","Asap3","Art2b","Asb10","Asb1","Asb11","Asb12","Asb14","Asb13","Asb15","Asb16","Asb17","Asb18","Asb4","Asb2","Asb3","Asb6","Asb5","Asb7","Asb8","Asb9","Ascc2","Ascc3","Ascc1","Ascl3","Ascl2","Ascl4","Ascl5","Ascl1","Asf1b","Asf1a","Asgr1","Ash2l","Asgr2","Ash1l","Asic4","Asic1","Asic3","Asic2","Asic5","Asip","Asmt","Asna1","Asmtl","Asl","Aspdh","Asnsd1","Asns","Aspa","Aspg","Asphd1","Asphd2","Asprv1","Aspnl1","Aspm","Aspn","Aspscr1","Asph","Asrgl1","Aste1","Astl","Astn1","Ass1","Asxl1","Astn2","Asxl2","Asxl3","Asz1","Atad2","Atad1","Atad2b","Atad5","Atad3a","Atat1","Atcay","Ate1","Atf1","Atf2","Atf5","Atf3","Atf4","Atf6","Atf6b","Atf7","Atf7ip","Atf7ip2","Atg10","Atg101","Atg12","Atg13","Atg14","Atg16l2","Atg16l1","Atg2a","Atg2b","Atg4a","Atg3","Atg4b","Atg4c","Atg4d","Atg5","Atg9a","Atg7","Atg9b","Atl3","Atl1","Atic","Atl2","Atmin","Atoh1","Atn1","Atoh7","Atoh8","Atm","Atp10a","Atox1","Atp10d","Atp10b","Atp11a","Atp11b","Atp11c","Atp12a","Atp13a1","Atp13a2","Atp13a3","Atp13a5","Atp13a4","Atp1a4","Atp1a3","Atp1a2","Atp1a1","Atp1b2","Atp1b4","Atp1b1","Atp1b3","Atp23","Atp2a1","Atp2a3","Atp2b1","Atp2b3","Atp2a2","Atp2b2","Atp2b4","Atp2c1","Atp2c2","Atp4a","Atp4b","Atp5a1","Atp5c1","Atp5d","Atp5b","Atp5e","Atp5f1","Atp5h-ps1","Atp5g1","Atp5hl1","Atp5g2","Atp5g3","Atp5h","Atp5i","Atp5j","Atp5l","Atp5j2","Atp5s","Atp5o","Atp6ap1","Atp6ap1l","Atp6ap2","Atp6v0b","Atp6v0a1","Atp6v0a4","Atp6v0c","Atp6v0a2","Atp6v0d2","Atp6v0d1","Atp6v0e1","Atp6v0e2","Atp6v1b1","Atp6v1a","Atp6v1c1","Atp6v1b2","Atp6v1d","Atp6v1c2","Atp6v1e2","Atp6v1e1","Atp6v1f","Atp6v1g1","Atp6v1g2","Atp6v1g3","Atp6v1h","Atp7b","Atp8a1","Atp8a2","Atp8b1","Atp7a","Atp8b2","Atp8b3","Atp8b4","Atp9a","Atp8b5p","Atp9b","Atpaf1","Atpaf2","Atraid","Atpif1","Atr","Atrn","Atrnl1","Atxn1l","Atxn10","Atrx","Atxn1","Atxn3","Atxn2","Atxn2l","Atxn7","Atxn7l3","Atxn7l2","Atxn7l1","Atrip","Aup1","Aunip","Auh","Aurkaip1","Aurka","Aurkc","Auts2l1","Aurkb","Auts2l","Atxn7l3b","Auts2","Avgr1","Aven","Avil","Avl9","Avpi1","Awat1","Avpr1b","Axdnd1","Avpr1a","Avpr2","Awat2","Avp","Axin1","Axin2","Azi2","Axl","Azgp1","Azin1","Azin2","B3galnt1","B3galnt2","B3galt2","B3galt1","B3galt4","B3galt5","B3galt6","B2m","B3gat1","B3gat2","B3gat3","B3glct","B3gnt4","B3gnt5","B3gnt2","B3gnt3","B3gnt6","B3gnt8","B3gnt9","B3gnt7","B4galnt2","B3gntl1","B4galnt3","B4galnt1","B4galnt4","B4galt2","B4galt3","B4galt4","B4galt5","B4galt1","B4galt7","B4galt6","B4gat1","B9d2","Baalc","B9d1","Babam1","Baat","Babam2","Bace2","Bace1","Bach1","Bach2","Bag2","Bag3","Bag1","Bag4","Bag5","Bag5l1","Bahcc1","Bag6","Bahd1","Baiap2l1","Bad","Baiap3","Baiap2l2","Bambi","Banf1","Bak1","Banf2","Banp","Bank1","Bap1","Bard1","Barhl1","Barx1","Barhl2","Barx2","Baiap2","Batf","Basp1","Batf2","Batf3","Baz2a","Baz1a","Baz1b","Bbc3","Bbof1","Baz2b","Bbox1","Bbs10","Bbs12","Bbs1","Bbs2","Bax","Bbs4","Bbs5","Bbip1","Bbs7","Bbs9","Bc1","Bbx","Bcam","Bcap29","Bcar3","Bcap31","Bcas2","Bcar1","Bcan","Bcas1","Bcas3","Bccip","Bcdin3d","Bcat2","Bcat1","Bckdhb","Bckdha","Bche","Bckdk","Bcl10","Bcl11b","Bcl2a1","Bcl11a","Bcl2l1-ps1","Bcl2l10","Bcl2l13","Bcl2l15","Bcl2l12","Bcl2l14","Bcl2l1","Bcl2l11","Bcl3","Bcl2l2","Bcl6","Bcl6b","Bcl7a","Bcl7b","Bcl7c","Bcl9","Bcl9l","Bclaf3","Bco1","Bclaf1","Bco2","Bcor","Bcorl1","Bcr","Bcs1l","Bdh2","Bdh1","Bdkrb2","Bean1","Bdkrb1","Bdp1","Becn2","Bend2","Bend3","Begain","Bend4","Becn1","Bend5","Bcl2","Bend6","Bend7","Best2","Best1","Best4","Best3","Bet1","Bex1","Bex2","Bet1l","Bex4-ps1","Bex4","Bfar","Bfsp2","Bfsp1","Bgn","Bhlha9","Bglap","Bhlhb9","Bhlha15","Bhlhe22","Bdnf","Bex3","Bhlhe23","Bhlhe40","Bhlhe41","Bhmt","Bhmt2","Bicd1","Bicc1","Bicd2","Bicdl1","Bicdl2","Bicra","Bhmg1","Bicral","Bid","Bik","Bin2","Bin2a","Bin3","Bin1","Birc3","Birc2","Birc6","Birc7","Birc5","Bivm","Blcap","Bles03","Blk","Blmh","Blm","Blnk","Bloc1s1","Bloc1s2","Bloc1s3","Bloc1s4","Bloc1s5","Blvrb","Bloc1s6","Blzf1","Blvra","Bmf","Bmi1","Bmp10","Bmp1","Bmp2k","Bmp15","Bmp3","Bmp5","Bmp2","Bmp8a","Bmp6","Bmp8b","Bmp7","Bmper","Bmp4","Bmpr1a","Bmt2","Bmpr1b","Bms1","Bmx","Bnc1","Bmpr2","Bmyc","Bnc2","Bnip1","Bnip2","Bnip3-ps1","Bnip3l-ps1","Bnip3","Bnipl","Bod1","Bod1l1","Boc","Bola1","Bok","Bola2","Bola2-ps1","Bola2-ps2","Bola3","Boll","Bop1","Borcs6","Borcs5","Bora","Bnip3l","Borcs7","Borcs8","Bphl","Bpgm","Bpi","Bpifa1","Bpifa3","Bpifa5","Bpifa6","Bpifb2","Bpifb1","Bpifb3","Bpifb4","Bpifa2f","Bpifb5","Bpifb6","Bpnt1-ps1","Bpifc","Bpifa2","Bpnt1","Bptf","Brap","Braf","Brcc3-ps1","Brat1","Brcc3","Brca2","Brd1","Brca1","Brd3","Brd2","Brd4","Brd7","Brd9","Brdt","Brd8","Brf1","Brf2","Bri3","Bri3bp","Bricd5","Brinp1","Brinp2","Brinp3","Brk1","Brms1","Brix1","Brms1l","Brox","Brpf1","Brs3","Brpf3","Brsk2","Brsk1","Brwd3","Brwd1","Bscl2","Bsdc1","Brip1","Bsph1","Bsnd","Bsph2","Bsn","Bsg","Bst1","Bst2","Bspry","Bsx","Btbd1","Btaf1","Btbd10","Btbd11","Btbd18","Btbd16","Btbd17","Btbd19","Btbd2","Btbd3","Btbd6","Btbd7","Btbd8","Btc","Btbd9","Btd","Btf3","Btf3l4","Btg1","Btg3","Btg4","Btk","Btla","Btn1a1","Btn2a2","Btn3a2","Btnl10","Btnl2","Btnl5","Btnl3","Btg2","Btnl6-ps1","Btnl8","Btnl7","Btnl9","Bud13","Bub1","Bub3","Bub1b","Btrc","Bves","Bud23","Bud31","Bysl","Bzw2","Bzw1","C10H17orf102","C17H10orf113","C18H10orf95","C17h6orf52","C19H16orf47","C1d","C10H5orf58","C12H7orf61","C1d-ps1","C1galt1c1","C1H10orf76","C10H10orf95","C1galt1","C1H19orf84","C1H9orf66","C1qa","C1qb","C1ql1","C1ql2","C1qc","C1qbp","C1ql3","C1ql4","C1qtnf1","C1qtnf2","C1qtnf12","C1qtnf4","C1qtnf3","C1qtnf5","C1qtnf6","C1qtnf7","C1qtnf9","C1rl","C1r","C1s","C2cd2","C2","C2cd2l","C2cd3","C2cd4a","C2cd4b","C2cd4c","C2cd4d","C2H5orf64","C2cd6","C2cd5","C3ar1","C4bpb","C4bpa","C4a","C4b","C3","C5ar2","C5","C7H12orf80","C5ar1","C6","C7","C8a","C8b","C8g","Ca5b","C9","Ca5a","Caap1","Cab39l","Cab39","Cabcoco1","Cables2","Cabin1","Cables1","Cabp2","Cabp1","Cabp4","Cabp5","Cabp7","Cabs1","Cabyr","Cacfd1","Cachd1","Cacna1b","Cacna1e","Cacna1a","Cacna1f","Cacna1g","Cacna1c","Cacna1d","Cacna1h","Cacna1i","Cacna2d2","Cacna2d4","Cacna1s","Cacna2d3","Cacnb1","Cacna2d1","Cacnb2","Cacnb3","Cacng1","Cacnb4","Cacng5","Cacng2","Cacng3","Cacng4","Cacng6","Cacng7","Cactin","Cacng8","Cacul1","Cacybp","Cadm1","Cad","Cadm2","Cadm3","Cadm4","Cahm","Cadps","Cage1","Cadps2","Calb2","Calb1","Calcb","Calcoco2","Calcoco1","Calcr","Calhm1","Calca","Calcrl","Cald1","Calhm2","Calhm3","Calhm4","Calm-ps1","Calm-ps2","Calhm5","Calhm6","Calml3","Calml5","Calml4","Calm3","Calm2","Caln1","Calm1","Calr3","Calr4","Calr","Caly","Calu","Camk1","Camk1d","Camk1g","Camk2n1","Camk2n2","Camk2g","Camk2b","Camk2a","Camkk1","Camk2d","Camk4","Camkmt","Camkk2","Camp","Camkv","Camlg","Camsap1","Camsap2","Camsap3","Camta2","Camta1","Cand1","Cand2","Cant1","Cap2","Cap1","Canx","Capg","Capn10","Capn12","Capn11","Capn1","Capn13","Capn15","Capn2","Capn5","Capn7","Capn3","Capn8","Capn9","Capns1","Capns1-ps1","Capns2","Caprin2","Caprin1","Capsl","Caps2","Capza2","Capza1","Capza3","Capzb","Car1","Car10","Car11","Capn6","Car13","Car13-ps1","Car12","Car15","Car14","Car7","Car6","Car3","Car2","Car8","Car4","Card10","Car9","Card14","Card19","Card11","Card6","Card9","Carf","Carhsp1","Carmn","Carm1","Carnmt1","Carns1","Carmil2","Carmil1","Carmil3","Cars","Cars2","Casd1","Casc3","Casc1","Casc4","Cartpt","Cask","Casp14","Casp16","Caskin2","Caskin1","Casp12","Casp1","Casp2","Casp4","Casp7","Casp8ap2","Casp6","Casp8","Casq1","Casq2","Casp9","Cass4","Casp3","Castor2","Castor1","Casr","Cast","Catsper1","Catip","Casz1","Catsper3","Catsper2","Catsper4","Catspere","Catsperd","Catsperg","Catsperz","Cat","Cav2","Cavin1","Cavin2","Cavin3","Catsperb","Cavin4","CB741658","Cbarp","Cbfa2t2","Cbfa2t3","Cbfb","Cblb","Cav1","Cblc","Cbll1","Cbln1","Cb707485","Cav3","Cbl","Cbln2","Cbln4","Cbln3","Cbr3","Cbr4","Cbr1","Cbwd1","Cbs","Cbx1","Cbx2","Cbx3","Cbx4","Cbx5","Cbx6","Cby3","Cbx8","Cbx7","Cby1","Cc2d1a","Cc2d1b","Cc2d2b","Ccbe1","Ccar1","Cc2d2a","Ccdc102a","Ccar2","Ccdc103","Ccdc105","Ccdc106","Ccdc110","Ccdc107","Ccdc112","Ccdc113","Ccdc114","Ccdc115","Ccdc116","Ccdc117","Ccdc121","Ccdc12","Ccdc120","Ccdc122","Ccdc124","Ccdc125","Ccdc126","Ccdc127","Ccdc13","Ccdc129","Ccdc130","Ccdc134","Ccdc136","Ccdc137","Ccdc138","Ccdc144b","Ccdc14","Ccdc142","Ccdc141","Ccdc146","Ccdc148","Ccdc149","Ccdc15","Ccdc150","Ccdc151","Ccdc152","Ccdc153","Ccdc154","Ccdc157","Ccdc155","Ccdc162","Ccdc160","Ccdc158","Ccdc159","Ccdc166","Ccdc163","Ccdc167","Ccdc169","Ccdc17","Ccdc170","Ccdc171","Ccdc174","Ccdc172","Ccdc173","Ccdc168","Ccdc175","Ccdc179","Ccdc177","Ccdc18","Ccdc178","Ccdc181","Ccdc182","Ccdc180","Ccdc183","Ccdc185","Ccdc184","Ccdc187","Ccdc186","Ccdc188","Ccdc189","Ccdc190","Ccdc196","Ccdc22","Ccdc24","Ccdc191","Ccdc25","Ccdc27","Ccdc28a","Ccdc28b","Ccdc3","Ccdc30","Ccdc33","Ccdc32","Ccdc34","Ccdc36","Ccdc38","Ccdc198","Ccdc39","Ccdc40","Ccdc42","Ccdc43","Ccdc47","Ccdc50","Ccdc54","Ccdc51","Ccdc57","Ccdc58","Ccdc59","Ccdc6","Ccdc61","Ccdc60","Ccdc62","Ccdc65","Ccdc63","Ccdc68","Ccdc69","Ccdc70","Ccdc7","Ccdc66","Ccdc71","Ccdc71l","Ccdc74a","Ccdc73","Ccdc77","Ccdc78","Ccdc8","Ccdc80","Ccdc81","Ccdc82","Ccdc83","Ccdc84","Ccdc85b","Ccdc85a","Ccdc85c","Ccdc87","Ccdc86","Ccdc88a","Ccdc88c","Ccdc88b","Ccdc89","Ccdc9","Ccdc90b","Ccdc91","Ccdc92","Ccdc92b","Ccdc96","Ccdc94","Ccdc93","Ccdc9b","Ccdc97","Ccer2","Ccer1","Cchcr1","Ccin","Cck","Ccl1","Ccl12","Cckbr","Cckar","Ccl17","Ccl11","Ccl19","Ccl21","Ccl22","Ccl25","Ccl24","Ccl26","Ccl27","Ccl28","Ccl4","Ccl6","Ccl7","Ccl9","Ccl20","Ccl3","Ccl5","Ccm2","Ccm2l","Ccna1","Ccnb1ip1","Ccnb2","Ccna2","Ccnb3","Ccnb1","Ccnc","Ccnd2","Ccnd3","Ccndbp1","Ccne2","Ccne1","Ccnf","Ccnf-ps1","Ccl2","Ccng2","Ccng1","Ccnh","Ccni","Ccnj","Ccnk","Ccnjl","Ccnl1","Ccnl2","Ccno","Ccnyl1","Ccny","Ccnt2","Ccnd1","Ccp110","Ccp6l1","Ccnt1","Ccpg1","Ccpg1os","Ccr10","Ccr1l1","Ccr1","Ccr4","Ccr3","Ccr2","Ccr7","Ccr6","Ccr8","Ccr9","Ccrl2","Ccs","Ccr5","Ccsap","Cct2-ps1","Ccser2","Ccser1","Cct2","Cct3-ps2","Cct3-ps1","Cct3-ps3","Cct3","Cct3-ps4","Cct5-ps2","Cct4","Cct6a-ps1","Cct5","Cct6a-ps11","Cct6a-ps12","Cct6a-ps10","Cct6a","Cct6a-ps14","Cct6a-ps15","Cct6a-ps2","Cct6a-ps3","Cct6a-ps5","Cct6a-ps4","Cct6a-ps6","Cct6a-ps7","Cct6a-ps8","Cct6a-ps9","Cct7-ps1","Cct7-ps2","Cct7-ps3","Cct6b","Cct7","Cct8-ps1","Cct8-ps2","Cct8","Cct8l1","Ccz1b","Cd109","Cd101","Cd160","Cd151","Cd163","Cd164l2","Cd164","Cd14","Cd180","Cd177","Cd19","Cd1d1","Cd2","Cd200r1","Cd207","Cd200r1l","Cd209a","Cd200","Cd209c","Cd209d","Cd209e","Cd209f","Cd22","Cd226","Cd24","Cd247","Cd244","Cd248","Cd27","Cd274","Cd276","Cd2bp2","Cd28","Cd300a","Cd2ap","Cd300c","Cd300e","Cd300c2","Cd300lb","Cd300ld","Cd300le","Cd300lg","Cd300lf","Cd302","Cd320","Cd33","Cd34","Cd37","Cd3e-ps1","Cd38","Cd3d","Cd3eap","Cd3e","Cd3g","Cd36","Cd4","Cd48","Cd47","Cd44","Cd5","Cd46","Cd52","Cd53","Cd5l","Cd40lg","Cd55","Cd59","Cd6","Cd40","Cd63","Cd68","Cd7","Cd70","Cd72","Cd79al","Cd69","Cd74","Cd79b","Cd80","Cd83","Cd84","Cd81","Cd82","Cd79a","Cd8a","Cd8b","Cd86","Cd99","Cd93","Cd96","Cd9","Cd99l2","Cda","Cdadc1","Cdan1","Cdc123","Cdc14a","Cdc14b","Cdc16","Cdc20b","Cdc20","Cdc23","Cdc26","Cdc27","Cdc34","Cdc37l1","Cdc37","Cdc40","Cdc42bpa","Cdc25b","Cdc42","Cdc42bpb","Cdc42bpg","Cdc42ep1","Cdc42ep2","Cdc42ep4","Cdc42ep3","Cdc42ep5","Cdc42se1","Cdc42se2","Cdc45","Cdc6","Cdc7","Cdc5l","Cdc73","Cdca2","Cdca3","Cdca4","Cdca7","Cdca5","Cdca7l","Cdca8","Cdcp1","Cdc25c","Cdcp2","Cdh10","Cdh11","Cdh14","Cdh15","Cdh12","Cdh1","Cdh16","Cdh13","Cdh17","Cdh19","Cdh18","Cdh20","Cdh22","Cdh23","Cdh2","Cdh24","Cdh26","Cdh3","Cdh6","Cdh4","Cdh7","Cdh5","Cdc25a","Cdh8","Cdh9","Cdhr3","Cdhr1","Cdhr4","Cdhr2","Cdip1","Cdhr5","Cdipt","Cdk10","Cdk13","Cdk11b","Cdk15","Cdk12","Cdk14","Cdk16","Cdk17","Cdk18","Cdk19","Cdk2ap1","Cdk20","Cdk2ap1-ps1","Cdk2","Cdk2ap1-ps2","Cdk2ap1-ps3","Cdk2ap1-ps5","Cdk2ap1-ps4","Cdk2ap1-ps6","Cdk2ap1-ps7","Cdk2ap1-ps8","Cdk2ap2","Cdk5r2","Cdk5r1","Cdk5rap1","Cdk4","Cdk5","Cdk5rap3","Cdk6","Cdk8","Cdk7","Cdk9","Cdkal1","Cdkl1","Cdkl4","Cdkl2","Cdkl3","Cdk5rap2","Cdkn1c","Cdkn2aip","Cdkn1a","Cdkn1b","Cdkn2aipnl","Cdk1","Cdkn2a","Cdkn2d","Cdkn2c","Cdkn3","Cdnf","Cdkn2b","Cdkl5","Cdo1","Cdon","Cdpf1","Cdrt4","Cdr2l","Cdr2","Cds2","Cds1","Cdsn","Cdt1","Cdx1","Cdr1","Cdx2","Cdx4","Cdv3","Cdyl","Cdyl2","Ceacam11","Ceacam12","Ceacam16","Ceacam18","Ceacam19","Ceacam1","Ceacam20","Ceacam3","Ceacam6","Ceacam4","Ceacam9","Cebpd","Cebpe","Cebpg","Cebpa","Cebpb","Cebpz","Cecr2","Cel","Cela1","Cela2a","Cela3b","Celf3","Celf1","Celf4","Celf2","Celf5","Celf6","Celsr1","Celsr2","Cend1","Cenpb","Cemip","Cenpa","Celsr3","Cenpc","Cenpe","Cenph","Cenpf","Cenpk","Cenpj","Cenpi","Cenpm","Cenpl","Cenpo","Cenpp","Cenps","Cenpq","Cenpn","Cenpv","Cenpu","Cenpt","Cenpx","Cenpw","Cep112","Cep104","Cep120","Cep128","Cep126","Cep131","Cep135","Cep152","Cep170b","Cep170","Cep162","Cep164","Cep19","Cep192","Cep250","Cep295nl","Cep44","Cep350","Cep290","Cep295","Cep41","Cep55","Cep57","Cep68","Cep57l1","Cep72","Cep63","Cep70","Cep76","Cep78","Cep83","Cep83os","Cep85l","Cep89","Cep95","Cep85","Cep97","Cept1","Cer1","Cercam","Cerk","Cers1","Cerkl","Cers2","Cers4","Cers3","Cers5","Cers6","Ces1a","Ces1d","Ces2","Ces2a","Ces1c","Ces1e","Ces2c","Ces2e","Ces1f","Ces2i","Ces3a","Ces2g","Ces2j","Ces4a","Ces2h","Ces5a","Cesl1","Cetn1","Cetn4","Cetn2","Cfap100","Cetn3","Cfap157","Cfap126","Cfap161","Cfap20","Cfap206","Cfap221","Cfap43","Cfap36","Cfap45","Cfap44","Cfap46","Cfap47","Cfap53","Cfap54","Cfap52","Cfap57","Cfap58","Cfap61","Cfap65","Cfap73","Cfap58l1","Cfap70","Cfap74","Cfap77","Cfap97","Cfap99","Cfc1","Cfap69","Cfdp1","Cfd","Cfhr2","Cfhr1","Cfb","Cfh","Cfi","Cfl2","Cfp","Cflar","Cga","Cfl1","Cgas","Cggbp1","Cgm4","Cgn","Cgnl1","Cftr","Cgref1","Cgrrf1","Ch25h","Chac1","Chac2","Chad","Chaf1a","Chadl","Champ1","Chaf1b","Chchd1","Chchd10","Chat","Chchd2","Chchd3","Chchd4","Chchd5","Chchd6","Chchd7","Chd1","Chd1l","Chd2","Chd3","Chd4","Chd5","Chd6","Chd8","Chd9","Chdh","Cherp","Chek1","Chfr","Chek2","Chga","Chgb","Chi3l1","Chi3l4","Chi3l3","Chd7","Chic1","Chic2","Chid1","Chit1","Chkb","Chl1","Chka","Chml","Chm","Chmp1a","Chmp1b","Chmp3","Chmp2b","Chmp2a","Chmp4bl1","Chmp4b","Chmp4c","Chmp5","Chmp6","Chmp7","Chn3","Chn1","Chn2","Chia","Chodl","Chordc1","Chp2","Chpf","Chp1","Chpf2","Chpt1","Chrac1","Chrdl2","Chrdl1","Chrd","Chrm2","Chrm4","Chrm1","Chrm3","Chrm5","Chrna1","Chrna10","Chrna2","Chrna3","Chrna5","Chrna6","Chrna4","Chrna9","Chrnb1","Chrnb3","Chrna7","Chrnd","Chrnb2","Chrnb4","Chrng","Chst1","Chrne","Chst10","Chst11","Chst12","Chst13","Chst14","Chst2","Chst15","Chst3","Chst5","Chst4","Chst8","Chst7","Chst9","Chsy1","Chsy3","Chsy3l","Chtf18","Chtop","Chtopl1","Churc1","Chtf8","Chuk","Ciapin1","Ciao1","Ciart","Cib3","Cib2","Cib1","Cib4","Cidea","Cideb","Cic","Cidec","Cilp","Cilp2","Cinp","Cip2a","Cipc","Ciita","Cir1","Cisd2","Cisd1","Cirbp","Cistr","Cisd3","Cish","Cited1","Cited4","Cit","Ckap2l","Ckap2","Ciz1","Cited2","Ckap4","Cklf","Ckap5","Ckmt2","Cks1l","Cks1b","Ckm","Ckb","Ckmt1","Cks2","Clba1","Clasrp","Clasp2","Clca2","Clasp1","Clca1","Clca4","Clca4l","Clca5","Clcf1","Clcc1","Clcn1","Clcn2","Clcn3","Clcn4","Clcn6","Clcn5","Clcn7","Clcnka","Clcnkb","Cldn1","Cldn10","Cldn11","Cldn14","Cldn12","Cldn15","Cldn16","Cldn17","Cldn19","Cldn18","Cldn2","Cldn20","Cldn22","Cldn25","Cldn24","Cldn23","Cldn34a","Cldn3","Cldn34c4","Cldn34d","Cldn34b","Cldn34e","Cldn4","Cldn8","Cldn6","Cldn7","Cldn5","Cldn9","Cldnd1","Cldnd2","Clec10a","Clec11a","Clec12a","Clec12b","Clec14a","Clec16a","Clec18a","Clec19a","Clec1b","Clec1a","Clec2d","Clec2d2","Clec2dl1","Clec2h","Clec2e","Clec2l","Clec2g","Clec3a","Clec3b","Clec4a1","Clec20a","Clec4a2","Clec4a","Clec4a3","Clec4b2","Clec4d","Clec4e","Clec4g","Clec4f","Clec5a","Clec4m","Clec6a-ps1","Clec9a","Clhc1","Clec7a","Clgn","Clic2","Clic3","Clic4","Clic1","Clic6","Clic5","Clint1","Clip2","Clip1","Clip3","Clk1","Clip4","Clk3","Clk2","Clk4","Clmn","Clmp","Cln5","Cln3","Cln8","Clnk","Clns1a","Clp1","Clock","Clpb","Clpp","Clps","Clpsl2","Clptm1","Clrn2","Clptm1l","Clrn1","Clpx","Clrn3","Clspn","Cln6","Clstn1","Clstn3","Clstn2","Cltb","Clta","Cluap1","Cltc","Cluh","Clul1","Clvs2","Clvs1","Clybl","Clu","Cma1","Cmahp","Cmas","Cmbl","Cmc1","Cmc2","Cmklr1","Cmip","Cmpk2","Cmpk1","Cmtm1","Cmtm2a","Cmss1","Cmtm3","Cmtm4","Cmtm5","Cmtm7","Cmtm6","Cmtr2","Cmtm8","Cmtr1","Cmya5","Cnbd2","Cnbd1","Cnep1r1","Cnbp","Cndp2","Cndp1","Cnfn","Cnga1","Cnga2","Cnga3","Cnih1","Cnga4","Cnih2","Cngb3","Cngb1","Cnih3","Cnih4","Cnksr1","Cnmd","Cnksr3","Cnksr2","Cnn2","Cnn1","Cnn3","Cnnm1","Cnnm2","Cnnm3","Cnnm4","Cnot10","Cnot11","Cnot1","Cnot3","Cnot2","Cnot4","Cnot6","Cnot6l","Cnot7","Cnot8","Cnot9","Cnpy1","Cnpy3","Cnppd1","Cnpy2","Cnp","Cnpy4","Cnst","Cnrip1","Cntd1","Cntfr","Cnr2","Cntln","Cntf","Cnr1","Cntn2","Cntn1","Cntn3","Cntn5","Cntn6","Cntn4","Cntnap1","Cntnap3","Cntnap4","Cntnap5a","Cntnap2","Cntnap5c","Cntrl","Cntnap5b","Coa3","Cntrob","Coa4","Coa5","Coa6","Coa7","Coasy","Cobl","Cobll1","Coch","Cog1","Cog3","Cog2","Cog4","Cog6","Cog5","Cog7","Cog8","Coil","Col10a1","Col11a1","Col13a1","Col11a2","Col15a1","Col14a1","Col12a1","Col16a1","Col17a1","Col18a1","Col19a1","Col20a1","Col22a1","Col24a1","Col23a1","Col1a2","Col25a1","Col26a1","Col28a1","Col27a1","Col1a1","Col3a1","Col4a1","Col2a1","Col4a2","Col4a3bp","Col4a3","Col4a4","Col4a5","Col4a6","Col5a2","Col5a1","Col5a3","Col6a1","Col6a2","Col6a4","Col6a5","Col6a6","Col8a1","Col8a2","Col7a1","Col9a1","Col9a2","Colca2","Colec10","Col9a3","Colec11","Colgalt1","Colec12","Col6a3","Colgalt2","Commd1","Colq","Commd2","Commd10","Commd4","Commd3","Commd5","Commd7","Commd8","Commd6","Commd9","Comtd1","Comp","Copb2","Comt","Copa","Copb1","Cope","Coprs","Copg2","Copg1","Cops3","Cops4","Cops2","Cops5","Cops6","Cops7a","Cops7b","Cops8","Copz2","Coq10a","Cops9","Copz1","Coq10b","Coq4","Coq2","Coq3","Coq5","Coq6","Coq8b","Coq7","Coq8a","Coq9","Corin","Coro1a","Coro1c","Coro1b","Coro2a","Coro2b","Cort","Coro7","Coro6","Cotl1","Cox11","Cox10","Cox14","Cox15","Cox17","Cox19","Cox18","Cox20","Cox4i2","Cox5a","Cox4i1","Cox6a1","Cox6a2","Cox5b","Cox6b1-ps1","Cox6b1","Cox6b2","Cox6c-ps1","Cox6c","Cox7a1","Cox7a2","Cox7a2l","Cox7a2l2","Cox7b2","Cox7b","Cox16","Cox8a","Cox8b","Cox8c","Cpa1","Cpa2","Cpa3","Cpa4","Cpa5","Cpa6","Cpb1","Cpamd8","Cpb2","Cpd","Cox7c","Cp","Cpe","Cpeb1","Cpeb2","Cpg1","Cped1","Cpeb3","Cpeb4","Cphx","Cplx1","Cplx3","Cplx2","Cplx4","Cpn2","Cpm","Cpne1","Cpn1","Cpne3","Cpne2","Cpne4","Cpne6","Cpne5","Cpne7","Cpne8","Cpne9","Cpo","Cpped1","Cpox","Cpq","Cpsf1","Cpsf2","Cpsf3","Cpsf4","Cps1","Cpsf4l","Cpsf6","Cpsf7","Cpt1c","Cpt2","Cptp","Cpt1a","Cpvl","Cpt1b","Cpxcr1","Cpxm1","Cpxm2","Cpz","Crabp1","Cr1l","Cracr2a","Cr2","Crabp2","Cracr2b","Cradd","Cramp1","Crb2","Crb3","Crb1","Crat","Crbn","Crct1","Crcp","Creb3","Creb3l2","Creb3l1","Creb3l4","Creb3l3","Creb5","Crebl2","Crebzf","Creg2","Creg1","Crebrf","Crebbp","Creld1","Creb1","Creld2","Crhbp","Crim1","Crem","Crip1","Crh","Crip2","Crhr2","Crip3","Cripak","Cript","Crisp1","Crisp2","Crhr1","Crisp3","Crispld1","Crispld2","Crk","Crkl","Crlf2","Crlf1","Crlf3","Crmp1","Crls1","Crnde","Crnkl1-ps1","Crnkl1","Crnn","Crocc","Crot","Crocc2","Crtac1","Crtam","Crtap","Crtapl1","Crtc1","Crxos1","Crtc2","Crtc3","Crx","Cry1","Cry2","Cryaa","Cryba2","Cryba4","Cryba1","Crybb1","Cryab","Crybb2","Crp","Crybb3","Crybg1","Crybg3","Crybg2","Cryga","Crygb","Crygc","Crygd","Crygf","Cryge","Crygn","Crygs","Cryl1","Crym","Cryz","Cryzl1","Csap1","Cs","Csad","Csdc2","Cse1l","Csde1","Csf2ra","Csf1r","Csf2rb","Csf2","Csf1","Csf3r","Csgalnact1","Csf3","Csgalnact2","Csk","Csmd1","Csn1s2a","Csn1s2b","Csmd2","Csn1s1","Csmd3","Csn2","Csn3","Csnk1g3","Csnk1e","Csnk1g1","Csnk1a1","Csnk1g2","Csnk1d","Csnk2a1","Csnka2ip","Csnk2a2","Csprs","Cspg5","Cspp1","Cspg4","Csnk2b","Csrnp1","Csrnp2","Csrnp3","Cst11","Csrp1","Cst12","Csrp2","Csrp3","Cst13","Cst5","Cst6","Cst8","Cst9l","Cst7","Csta","Cst3","Cstb","Cstl1","Cstf3","Cstf2t","Cstf2","Cstf1","Ct45a9","Ct55","Ctag2","Ctbs","Ctbp2","Ctc1","Ctbp1","Ctcf","Ctcfl","Ctdnep1","Ct47b1","Ctdsp2","Ctdp1","Ctdsp1","Ctdspl","Ctdspl2","Ctf2","Ctf1","Cthrc1","Ctif","Ctla2a","Cth","Ctnna1","Ctla4","Ctgf","Ctnnal1","Ctnna2","Ctnnbip1","Ctnna3","Ctnnbl1","Ctnnd2","Ctps1","Ctnnd1","Ctps2","Ctr9","Ctnnb1","Ctrb1","Ctrc","Cts8","Cts8l1","Ctrl","Cts7","Ctns","Ctsa","Ctsf","Ctse","Ctsg","Ctsc","Ctsd","Ctsh","Ctsb","Ctsj","Ctso","Ctsll3","Ctsm","Ctsk","Ctsq","Ctsr","Ctsql2","Ctsl","Ctsw","Ctss","Ctsz","Cttnbp2","Cttnbp2nl","Ctu1","Cttn","Ctu2","Ctxn3","Ctxn1","Cuedc1","Cuedc2","Ctxn2","Cubn","Cul2","Cul1","Cul4a","Cul3","Cul4b","Cul5","Cul7","Cutc","Cuta","Cul9","Cux2","Cwc15","Cuzd1","Cux1","Cwf19l1","Cwc25","Cwc22","Cwc27","Cwf19l2","Cwh43","Cx3cl1","Cxadrl1","Cxadr","Cx3cr1","Cxcl11","Cxcl1","Cxcl10","Cxcl13","Cxcl14","Cxcl16","Cxcl17","Cxcl12","Cxcl3","Cxcl2","Cxcl9","Cxcl6","Cxcr3","Cxcr6","Cxcr5","CXHXorf65","Cxcr4","Cxx1a","Cxcr1","Cxxc1","Cyb561","Cxxc5","Cyb561d1","Cxxc4","Cyb561a3","Cxcr2","Cyb5d1","Cyb561d2","Cyb5d2","Cyb5b","Cyb5r1","Cyb5a","Cyb5r2","Cyb5r3","Cyb5rl","Cybrd1","Cyc1-ps1","Cyb5r4","Cyc1","Cyba","Cybb","Cyct","Cycs","Cyfip2","Cygb","Cylc2","Cylc1","Cyhr1","Cyld-ps1","Cym","Cyld","Cyp11b1","Cyfip1","Cyp11b3","Cyp11b2","Cyp20a1","Cyp1a2","Cyp1b1","Cyp21a1","Cyp19a1","Cyp1a1","Cyp21a1-ps","Cyp26a1","Cyp24a1","Cyp26b1","Cyp26c1","Cyp27a1","Cyp27b1","Cyp2ab1","Cyp2a2","Cyp2ac1","Cyp2a1","Cyp2a3","Cyp2b13","Cyp2b12","Cyp2b1","Cyp2b15","Cyp2b21","Cyp2b2","Cyp2b31","Cyp17a1","Cyp2b3","Cyp2c11","Cyp2c12","Cyp2c22","Cyp2c13","Cyp2c23","Cyp2c24","Cyp2c77-ps","Cyp2c79","Cyp2c80","Cyp11a1","Cyp2c7","Cyp2c6v1","Cyp2d2","Cyp2d1","Cyp2d3","Cyp2d5","Cyp2g1","Cyp2f4","Cyp2d4","Cyp2j13","Cyp2e1","Cyp2j10","Cyp2j16","Cyp2j5-ps","Cyp2j3","Cyp2r1","Cyp2j4","Cyp2s1","Cyp2t1","Cyp2u1","Cyp2w1","Cyp39a1","Cyp3a62","Cyp3a18","Cyp3a2","Cyp3a71-ps","Cyp3a23/3a1","Cyp3a73","Cyp3a85-ps","Cyp46a1","Cyp4a34-ps","Cyp3a9","Cyp4a3","Cyp4a2","Cyp4b1","Cyp4a8","Cyp4a1","Cyp4f18","Cyp4f17","Cyp4f1","Cyp4f37","Cyp4f40","Cyp4f39","Cyp4f4","Cyp4f5","Cyp4x1","Cyp4f6","Cyp4v3","Cyp51a1-ps1","Cyp51","Cyp7a1","Cyp7b1","Cyp8b1","Cys1","Cysltr2","Cysrt1","Cyr61","Cystm1","Cyss","Cyth2","Cyth1","Cyth3","Cyth4","Cytip","Cytl1","Cyyr1","Da2-19","D2hgdh","Daam2","Daam1","Dab1","Cysltr1","Dab2","Dab2ip","Dach2","Dach1","Dact1","Dact2","Dact3","Dagla","Dalrd3","Dad1","Daglb","Dand5","Dag1","Dap","Dao","Dap3","Dapk2","Dapk1","Dapl1","Dapk3","Dapp1","Dars2","Daw1","Dars","Dazap2","Dazap1","Daxx","Dazl","Dbf4b","Dbf4","Dbil5","Dbh","Dbndd1","Dbndd2","Dbi","Dbn1","Dbnl","Dbp","Dancr","Dbr1","Dbt","Dbx1","Dbx2","Dcaf10","Dcaf1","Dcaf12","Dcaf11","Dcaf12l2","Dcaf12l1","Dcaf15","Dcaf13","Dcaf17","Dcaf4","Dcaf5","Dcaf8l1","Dcaf7","Dcaf8","Dcaf6","Dcakd","Dcbld1","Dcbld2","Dcdc1","Dcdc2b","Dcdc2","Dcdc5","Dchs2","Dcc","Dcdc2c","Dchs1","Dck","Dclre1b","Dclk3","Dclre1a","Dclre1c","Dclk2","Dcm5","Dclk1","Dcn","Dcp1b","Dcp2","Dcst1","Dcp1a","Dcstamp","Dcps","Dcst2","Dct","Dctn3l1","Dctn3","Dctd","Dctn5","Dctn2","Dctn4","Dctn1","Dctn6","Dctpp1","Dcun1d2","Dcun1d1","Dcun1d3","Dcun1d4","Dcun1d5","Dda1","Dcxr","Dcx","Ddah1","Ddah2","Ddb2","Ddb1","Ddhd1","Ddi1","Ddc","Ddhd2","Ddi2","Ddias","Ddit4","Ddit4l2","Ddit4l","Ddit3","Ddn","Ddo","Ddost","Ddrgk1","Ddt","Ddr2","Ddx1","Ddr1","Ddx10","Ddx11","Ddx17","Ddx18","Ddx20","Ddx19b","Ddx19a","Ddx23","Ddx24","Ddx21","Ddx25","Ddx3","Ddx27","Ddx28","Ddx31","Ddx39a","Ddx3y","Ddx39b","Ddx3x","Ddx4","Ddx41","Ddx42","Ddx43","Ddx46","Ddx47","Ddx49","Ddx51","Ddx50","Ddx5","Ddx54","Ddx52","Ddx55","Ddx56","Ddx58","Ddx59","Ddx60","Dear","Ddx6","Deaf1","Decr1","Dedd","Dedd2","Decr2","Def6","Defa10","Def8","Defa11","Defa24","Defa6","Defa7","Defa5","Defa9","Defa8","Defal1","Defb1","Defb10","Defb13","Defb12","Defb11","Defb16-ps","Defb14","Defb15","Defb17","Defb18","Defb19","Defb2","Defb20","Defb21","Defb23","Defb22","Defb24","Defb25","Defb26","Defb28","Defb27","Defb3","Defb29","Defb30","Defb36","Defb33","Defb37","Defb38","Defb39","Defb41","Defb40","Defb4","Defb43","Defb42","Defb44","Defb49","Defb5","Defb50","Defb51","Defb52","Defb9","Degs1","Degs2","Dek","Dennd1c","Dennd1b","Dennd1a","Dennd2a","Dennd2c","Dennd2d","Dennd3","Dennd4b","Dennd4c","Dennd4a","Dennd5a","Dennd5b","Dennd6a","Dennd6b","Denr","Depdc1","Depdc1b","Depdc7","Deptor","Depdc5","Dera","Derl1","Derl3","Det1","Desi1","Desi2","Des","Derl2","Deup1","Dexi","Dffa","Dffb","Dgat2l6","Dgat2","Dgat1","Dgcr2","Dgcr6","Dgcr8","Dgka","Dgke","Dgkb","Dgkd","Dgkg","Dgkh","Dgkk","Dgki","Dgkq","Dglucy","Dguok","Dgkz","Dhcr24","Dhdds","Dhdh","Dhcr7","Dhfr","Dhrs1","Dhh","Dhps","Dhodh","Dhrs11","Dhrs13","Dhrs2","Dhrs3","Dhrs7","Dhrs7c","Dhrs4","Dhrs7b","Dhrs7l1","Dhrs9","Dhrsx","Dhtkd1","Dhx15","Dhx29","Dhx16","Dhx32","Dhx33","Dhx34","Dhx30","Dhx35","Dhx37","Dhx57","Dhx36","Dhx38","Dhx58","Dhx40","Dhx8","Diablo","Dhx9","Diaph2","Diaph3","Diaph1","Dido1","Dicer1","Diexf","Dio3os","Dimt1","Dio1","Dio3","Dio2","Dip2a","Dip2b","Dip2c","Diras1","Diras2","Diras3","Dirc2","Dis3","Dis3l","Dis3l2","Disp1","Disc1","Disp2","Disp3","Dixdc1","Dkc1","Dkk2","Dkk1","Dkk4","Dkkl1","Dkk3","Dlat","Dleu7","Dlec1","Dld","Dlc1","Dlg3","Dlg1","Dlg2","Dlg5","Dlgap3","Dlgap2","Dlgap1","Dlgap4","Dlg4","Dlgap5","Dlk1","Dlk2","Dll3","Dll1","Dll4","Dlx1","Dlx3","Dlx2","Dlx4","Dlst","Dlx6","Dlx5","Dmac1","Dmac2","Dmbx1","Dmc1","Dmap1","Dmbt1","Dmkn","Dmgdh","Dmp1","Dmrt2","Dmrt1","Dmpk","Dmrt3","Dmrta1","Dmd","Dmrta2","Dmrtc1b","Dmrtb1","Dmrtc1a","Dmrtc1c1","Dmrtc2","Dna2","Dmtf1","Dmwd","Dmtn","Dmxl1","Dnaaf2","Dmxl2","Dnaaf1","Dnaaf3","Dnaaf5","Dnah10","Dnaaf4","Dnah14","Dnah1","Dnah11","Dnah12","Dnah3","Dnah17","Dnah5","Dnah6","Dnah2","Dnah8","Dnah7","Dnai1","Dnah9","Dnai2","Dnaja1","Dnaja2","Dnaja3","Dnaja4","Dnajb1","Dnajb11","Dnajb12","Dnajb13","Dnajb14","Dnajb3","Dnajb4","Dnajb2","Dnajb5","Dnajb7","Dnajb8","Dnajb6","Dnajb9","Dnajc1","Dnajc11","Dnajc10","Dnajc12","Dnajc15","Dnajc14","Dnajc13","Dnajc16","Dnajc17","Dnajc18","Dnajc19","Dnajc2","Dnajc22","Dnajc21","Dnajc24","Dnajc25","Dnajc28","Dnajc27","Dnajc30","Dnajc3","Dnajc4","Dnajc5b","Dnajc5","Dnajc5g","Dnajc7","Dnajc6","Dnajc9","Dnajc8","Dnal4","Dnal1","Dnali1","Dnase1","Dnase1l2","Dnase1l1","Dnase2","Dnase1l3","Dnd1","Dnase2b","Dner","Dnhd1","Dnlz","Dnmbp","Dnm1","Dnm3","Dnm2","Dnm1l","Dnmt3b-ps1","Dnmt3b","Dnmt3b-ps2","Dnpep","Dnmt3l","Dnmt1","Dnmt3a","Dnph1","Dnttip1","Dntt","Doc2a","Doc2g","Doc2b","Dock1","Dock10","Dock2-ps1","Dock2","Dnttip2","Dock11","Dock4","Dock3","Dock5","Dock6","Dohh","Dock7","Dock8","Dok1","Dok2","Dock9","Dok3","Dok4","Dok5","Dok6","Dok7","Dolk","Dolpp1","Donson","Dopey1","Dopey2","Doxl1","Dot1l","Dpagt1","Doxl2","Dpcd","Dpcr1","Dpep1","Dpep2","Dpep3","Dpf1","Dph1","Dph2","Dpf2","Dpf3","Dph3","Dph5","Dph6","Dph7","Dpm2","Dpm1","Dpm3-ps1","Dpm3","Dpp3l","Dpp3","Dpp7","Dpp9","Dpp10","Dpp8","Dppa1","Dpp4","Dpp6","Dppa1-ps1","Dppa3-ps2","Dppa3-ps1","Dppa3l1","Dppa3","Dppa4","Dppa5","Dpy19l1","Dpt","Dpy19l2","Dpy19l4","Dpy19l3","Dpy30","Dpys","Dpysl3","Dpysl2","Dpysl5","Dpysl4","Dqx1","Dr1","Dram1","Dram2","Draxin","Drap1","Drc3","Drc1","Drc7","Dpyd","Drg2","Drg1","Drgx","Drd3","Drd5","Drd4","Drd1","Drd2","Dsc1","Dsc3","Drosha","Dsc2","Drp2","Dscam","Dscaml1","Dscc1","Dscr3","Dsel","Dse","Dsg1","Dsg2","Dsg3","Dsg4","Dsn1","Dstnl1","Dsp","Dstn","Dspp","Dstyk","Dtd1","Dtd2","Dst","Dthd1","Dtl","Dtna","Dtnb","Dtnbp1","Dtwd1","Dtwd2","Dtx2-ps1","Dtx1","Dtx2","Dtx3","Dtx3l","Dtx4","Dtymk","Duoxa1","Duox1","Duox2","Duoxa2","Dupd1","Dus1l","Dus2","Dus4l","Dus3l","Dusp10","Dusp11","Dusp12","Dusp1","Dusp13","Dusp14l1","Dusp15","Dusp14","Dusp16","Dusp18","Dusp19","Dusp2","Dusp21","Dusp23","Dusp22","Dusp27","Dusp28","Dusp26","Dusp3","Dusp4","Dusp7","Dusp5","Dusp8","Dusp9","Dusp6","Dut-ps","Dut","Duxbl1","Dvl2","Dvl3","Dydc1","Dxo","Dydc2","Dvl1","Dym","Dynap","Dync1li1","Dync1li2","Dync1i1","Dync1i2","Dync1h1","Dync2li1","Dynll1","Dync2h1","Dynlrb1","Dynlrb2","Dynll2","Dynlt3","Dynlt1","Dyrk1b","Dyrk1a","Dyrk2","Dyrk3","Dyrk4","Dytn","Dzank1","Dysf","Dzip1-ps1","Dzip1","Dzip1l","E230034O05Rik","Dzip3","E2f2","E2f3","E2f1","E2f4","E2f5","E2f7","E2f8","E4f1","Eaf1","Eaf2","Eapp","Ear1","Ears2","Ears2l1","Ebag9","Ebf2","Ebf4","E2f6","Ebf1","Ebf3","Ebi3","Ebna1bp2","Ebpl","Ebp","Ece2","Ecd","Ecel1","Ech1","Echdc1","Ece1","Echdc2","Echdc3","Echs1","Eci1","Ecm1","Eci3","Eci2","Ecm2","Ecscr","Ecsit","Ect2l","Ect2","Edar","Eda","Eda2r","Edaradd","Edc3","Edc4","Eddm3b","Edem1","Edem3","Edem2","Edf1","Edil3","Edn3","Edn2","Edrf1","Eea1","Eed","Ednra","Eef1a2","Ednrb","Eef1akmt3","Eef1akmt2","Eef1a1","Eef1akmt1","Eef1b2","Edn1","Eef1e1","Eef1d","Eef1g","Eef2kmt","Eef2k","Eefsec","Eepd1","Eef2","Ef1","Efcab1","Efcab10","Efcab11","Efcab12","Efcab14","Efcab13","Efcab3","Efcab2","Efcab5","Efcab7","Efcab8","Efcab6","Efcab9","Efcc1","Efemp2","Efemp1","Efhb","Efhc1","Efhc2","Efhd1","Efhd2","Efl1","Efna2","Efna1","Efna3","Efna4","Efna5","Efnb2","Efnb1","Efnb3","Efr3a","Efr3b","Efs","Egfem1","Eftud2","Egfl6","Egfl7","Egf","Egfl8","Egflam","Egln2","Egln1","Egln3","Egr3","Egr2","Egr4","Ehbp1","Ehbp1l1","Ehd1","Egfr","Ehd2","Ehd3","Egr1","Ehf","Ehd4","Ehhadh","Ehmt1","Eid2","Ei24","Eid1","Eid2b","Eid3","Ehmt2","Eif1","Eif1ad","Eif1a","Eif1b","Eif1ax","Eif2a","Eif2ak1","Eif2b1","Eif2ak3","Eif2b2","Eif2ak4","Eif2b3","Eif2b4","Eif2ak2","Eif2b5","Eif2d-ps1","Eif2d","Eif2s2","Eif2s3y","Eif2s3","Eif2s1","Eif3a","Eif3b","Eif3c","Eif3d","Eif3e","Eif3f","Eif3el1","Eif3g","Eif3h","Eif3i-ps1","Eif3i","Eif3j","Eif3l","Eif3m","Eif3k","Eif4a1","Eif4b","Eif4a3","Eif4e1b","Eif4a2","Eif4e3","Eif4e","Eif4e2","Eif4ebp2","Eif4enif1","Eif4ebp1","Eif4g2-ps1","Eif4ebp3","Eif4g2-ps2","Eif4g1","Eif4g2","Eif4h","Eif4g3","Eif5a2","Eif5","Eif5b-ps1","Eif5a","Eif5b","Eif6","Eif6-ps1","Elac1","Eipr1","Elac2","Elane","Elavl1","Elavl3","Elavl4","Elavl2","Elf1","Elf3","Elf2","Elf4","Elfn2","Elf5","Elfn1","Elk1","Elk3","Elk4","Ell","Ell2","Ell3","Elmo1","Elmo2","Elmo3","Elmod2","Elmod1","Elmod3","Elmsan1","Eloa","Elob","Elof1","Eln","Elovl1","Elovl2","Eloc","Elovl3","Elovl4","Elovl5","Elovl7","Elovl6","Elp3","Elp2","Elp1","Elp4","Elp5","Elp6","Emb","Emc2","Emc1","Emc10","Emc3","Emc4","Emc6","Emc8","Emc7","Emc9","Emcn","Eme1","Emd","Eme2","Emg1","Emid1","Emilin3","Emilin1","Emilin2","Eml1","Eml2","Eml3","Eml4","Eml5","Emp1","Emp2","Emp3","Eml6","Emx1","Emsy","Emx2","En1","En2","Enam","Enah","Enc1","Endod1","Endog","Endou","Endov","Engase","Enkur","Enkd1","Eno1-ps1","Eng","Eno1","Eno4","Eno3","Eno2","Enoph1","Enox1","Enox2","Enpep","Enpp4","Enpp5","Enpp2","Enpp3","Enpp1","Enpp6","Enthd1","Enpp7","Ensa","Enho","Entpd2","Entpd1","Entpd3","Entpd4","Entpd6","Entpd5","Entpd7","Entpd8","Eny2","Eomes","Eogt","Epb41l1","Ep300","Ep400","Epas1","Epb41l4a","Epb41l2","Epb41","Epb41l3","Epc2l1","Epb41l5","Epc2","Epc1","Epb42","Epb41l4b","Epcam","Epdr1","Epgn","Epg5","Epha10","Epha1","Epha2","Epha3","Epha4","Epha5","Epha6","Epha8","Epha7","Ephb1","Ephb3","Ephb2","Ephb4","Ephb6","Ephx3","Ephx4","Ephx2","Epm2aip1","Epm2a","Epn1","Epn3","Epn2","Epop","Eppin","Eppk1","Epor","Epo","Eps15","Eprs","Ephx1","Eps15l1","Eps8","Eps8l1","Eps8l3","Eps8l2","Epx","Epsti1","Epyc","Eqtn","Eral1","Eras","Erap1","Erbin","Erc1","Erbb3","Erbb4","Erbb2","Erc2","Ercc4l1","Ercc4","Ercc3","Ercc5","Ercc6l","Ercc6l2","Ercc8","Ereg","Ercc2","Erf","Erfe","Ercc1","Erg28","Ergic1","Ercc6","Ergic2","Erg","Ergic3","Erh","Eri1","Eri2","Erich1","Erich3","Erich2","Eri3","Erich4","Erich5","Erich6b","Erich6","Erlec1","Erlin1","Erlin2","Ermap","Ermard","Ermn","Ermp1","Ern2","Ern1","Ero1b","Ero1a","Erp27","Erp44","Erp29","Ervfrd-1","Errfi1","Esco2-ps1","Esam","Esco2-ps2","Esco2","Esco1","Esd","Esm1","Espnl","Esf1","Espl1","Espn","Esrp1","Esrp2","Esrrb","Esrra","Ess2","Esx1","Esrrg","Esyt1","Esyt2","Esyt3","Etaa1","Esr2","Esr1","Etaa1l1","Etf1","Etfb","Etfa","Etfbkmt","Etfrf1","Ethe1","Etfdh","Etnk1","Etl4","Etnk2","Etnppl","Etv2","Ets2","Ets1","Etv1","Etv3","Etv3l","Etv5","Etv4","Eva1a","Eva1b","Etv6","Eva1c","Evc","Evc2","Evi2a","Evi5l","Evi5","Evl","Evpl","Evx1","Evx2","Evi2b","Ewsr1","Exd1","Exd2","Exoc1l","Exo1","Exo5","Exoc1","Exoc3l2","Exoc2","Exoc3","Exoc3l1","Exoc3l4","Exoc5","Exoc4","Exoc6","Exog","Exoc8","Exoc7","Exoc6b","Exosc1","Exosc2","Exosc10","Exosc3","Exosc6","Exosc5","Exosc7","Exosc4","Exosc8","Exph5","Exosc9","Ext2","Extl1","Ext1","Extl3","Extl2","Eya1","Eya2","Eya3","Eya4","Ezh1","F10","Ezr","Ezh2","F11","F11r","F12","F13b","F13a1","F2rl2","F2rl3","F2r","F2rl1","F2","F5","F8a1","F3","F7","Fa2h","F8","F9","Faah","Faap20","Faap100","Faap24","Fabp12","Fabp3","Fabp1","Fabp2","Fabp5","Fabp4","Fabp7","Fabp9","Fabp6","Fads1","Fads2","Fadd","Fads2l1","Fads6","Fads3","Faf1","Faf2","Fahd1","Fah","Fahd2a","Fam102a","Faim","Faim2","Fam102b","Fam103a1","Fam105a","Fam104a","Fam107a","Fam104b","Fam107b","Fam109a","Fam109b","Fam110a","Fam110d","Fam110b","Fam110c","Fam111a","Fam114a1l1","Fam114a1","Fam114a2","Fam115c","Fam115e","Fam117a","Fam117b","Fam118a","Fam118b","Fam120b","Fam120a","FAM120C","Fam122a","Fam122b","Fam122c","Fam124b","Fam124a","Fam126a","Fam126b","Fam129a","Fam129b","Fam131a","Fam129c","Fam133a","Fam131b","Fam131c","Fam133b","Fam135b","Fam135a","Fam136a","Fam13a","Fam13c","Fam149a","Fam13b","Fam149b1","Fam151b","Fam151a","Fam156b","Fam155b","Fam155a","Fam160a1","Fam160a2","Fam160b1","Fam160b2","Fam161b","Fam161a","Fam162a","Fam163a","Fam163b","Fam166b","Fam166a","Fam167a","Fam167b","Fam169a","Fam168a","Fam168b","Fam169b","Fam170a","Fam170b","Fam171a1","Fam173a","Fam171a2","Fam171b","Fam173b","Fam174a","Fam172a","Fam174b","Fam177a1","Fam177b","Fam180b","Fam180a","Fam178b","Fam181a","Fam181b","Fam183b","Fam184a","Fam184b","Fam185a","Fam186b","Fam187b","FAM187A","Fam188a","Fam188b","Fam188b2","Fam189a1","Fam189a2","Fam18b-ps1","Fam189b","Fam192a","Fam193b","Fam193a","Fam196b","Fam198a","Fam199x","Fam198b","Fam19a1","Fam19a3","Fam19a2","Fam19a4","Fam19a5","Fam204a","Fam205a","Fam205c","Fam206a","Fam196a","Fam207a","Fam208a","Fam209a","Fam208b","Fam20a","Fam20b","Fam210a","Fam212a","Fam20c","Fam210b","Fam212b","Fam213a","Fam213b","Fam216b","Fam214a","Fam217a","Fam214b","Fam216a","Fam217b","Fam219a","Fam219b","Fam220a","Fam222a","Fam221a","Fam221b","Fam222b","Fam227a","Fam227b","Fam228a","Fam229a","Fam234a","Fam229b","Fam228b","Fam234b","Fam237a","Fam241a","Fam241b","Fam24a","Fam25a","Fam32a","Fam3a","Fam35a","Fam3b","Fam3c","Fam3d","Fam43a","Fam43b","Fam45a","Fam46b","Fam46a","Fam46c","Fam47a","Fam47e","Fam46d","Fam48b1","Fam49a","Fam50a","Fam49b","Fam50b","Fam53a","Fam53b","Fam53c","Fam57a","FAM58A-ps1","Fam57b","Fam58b","Fam69a","Fam69c","Fam71a","Fam69b","Fam71b","Fam71d","Fam71e1","Fam71e2","Fam71f1","Fam71f2","Fam76a","Fam72a","Fam76b","Fam78a","Fam78b","Fam81a","Fam83a","Fam81b","Fam83c","Fam83b","Fam83d","Fam83e","Fam83f","Fam83g","Fam83h","Fam84b","Fam89a","Fam84a","Fam89b","Fam8a1","Fam90a1-ps1","Fam90a1","Fam92a","Fam92b","Fam91a1","Fam96b","Fam98a","Fam96a","Fam98b","Fam9b","Fam98c","Fam9c","Fan1","Fancb","Fanca","Fancd2os","Fancc","Fance","Fancd2","Fancf","Fancg","Fanci","Fancm","Fancl","Fank1","Fap","Far2","Far1","Farp1","Farsa","Fars2","Farp2","Farsb","Fastk","Fasn","Fastkd1","Fastkd2","Fastkd5","Fastkd3","Fas","Fat1","Fat2","Fat4","Fat3","Faxc","Fau","Faxdc2","Fblim1","Fbl","Fbll1","Faslg","Fbf1","Fbln2","Fbln1","Fbln7","Fbln5","Fbp2","Fbn2","Fbrs","Fbp1","Fbrsl1","Fbxl12","Fbn1","Fbxl14","Fbxl13","Fbxl15","Fbxl16","Fbxl17","Fbxl18","Fbxl19","Fbxl2","Fbxl20","Fbxl21","Fbxl22","Fbxl3","Fbxl5","Fbxl4","Fbxl6","Fbxl7","Fbxl8","Fbxo10","Fbxo11","Fbxo15","Fbxo16","Fbxo17","Fbxo18","Fbxo2","Fbxo22","Fbxo21","Fbxo25","Fbxo24","Fbxo27","Fbxo28","Fbxo3","Fbxo30","Fbxo31","Fbxo33","Fbxo32","Fbxo34","Fbxo36","Fbxo38","Fbxo4","Fbxo39","Fbxo40","Fbxo43","Fbxo41","Fbxo42","Fbxo44","Fbxo45","Fbxo47","Fbxo46","Fbxo48","Fbxo5","Fbxo6","Fbxo7","Fbxo8","Fbxw10","Fbxo9","Fbxw12","Fbxw17","Fbxw11","Fbxw2","Fbxw4","Fbxw5","Fbxw8","Fcamr","Fbxw9","Fbxw7","Fcar","Fcer1a","Fcgbp","Fcer1g","Fcf1","Fcgbpl1","Fcer2","Fcgr1a","Fcgr2a","Fcho1","Fcho2","Fcgr2b","Fcgrt","Fcgr3a","Fchsd1","Fchsd2","Fcmr","Fcnb","Fcna","Fcrl5","Fcrl2","Fcrl1","Fcrl6","Fcrla","Fcrlb","Fdcsp","Fdxacb1","Fdx1l","Fdx1","Fdft1","Fdps","Fdxr","Fem1a","Fendrr","Fem1b","Fem1c","Fech","Fen1","Fer1l4","Ferd3l","Fer","Fermt1","Fer1l6","Fer1l5","Fermt3","Fermt2","Fes","Fev","Fetub","Fezf1","Fezf2","Fez1","Fez2","Ffar1","Ffar2","Ffar3","Ffar4","Fgd2","Fgd3","Fgd1","Fgb","Fga","Fgd4","Fgd5","Fgd6","Fgf11","Fgf12","Fgf10","Fgf1","Fgf13","Fgf14","Fgf16","Fgf17","Fgf18","Fgf19","Fgf20","Fgf22","Fgf21","Fgf3","Fgf23","Fgf4","Fgf5","Fgf6","Fgf7","Fgf2","Fgfr1-ps1","Fgfbp1","Fgfbp3","Fgf8","Fgf9","Fgfr1op2","Fgfr1op","Fgfr1","Fgfrl1","Fgfr3","Fgfr4","Fgg","Fgl1","Fgfr2","Fggy","Fgl2","Fh","Fgr","Fhdc1","Fhad1","Fhit","Fhl1","Fhl3","Fhl4","Fhl2","Fhl5","Fibcd1","Fhod1","Fhod3","Fibcd1l1","Fibin","Fibp","Ficd","Figla","Fign","Fig4","Fignl2","Fignl1","Filip1","Filip1l","Fip1l1","Fitm1","Fitm2","Fjx1","Fiz1","Fis1","Fkbp10","Fkbp11","Fkbp14","Fkbp15","Fkbp3","Fkbp1b","Fkbp2","Fkbp1a","Fkbp4","Fkbp6","Fkbp5","Fkbp7","Fkbp9","Fkbp8","Fkbpl","Fkrp","Flad1","Flg","Flg2","Fktn","Flcn","Flii","Fli1","Flnc","Flna","Flrt1","Flnb","Flot1","Flrt3","Flrt2","Flot2","Flvcr1","Flt3lg","Flywch2","Flywch1","Flvcr2","Flt3","Flt4","Fmc1","Flt1","Fmn2","Fmn1","Fmnl2","Fmnl1","Fmnl3","Fmo1","Fmo13","Fmo2","Fmo3","Fmo4","Fmo6","Fmo5","Fmo9","Fmod","Fmr1nb","Fn3k","Fn3krp","Fmr1","Fnbp1","Fnbp4","Fnbp1l","Fnd3c2","Fndc1","Fndc10","Fndc11","Fn1","Fndc3b","Fndc3c1","Fndc3a","Fndc5","Fndc7","Fndc8","Fndc9","Fnip1","Fnip2","Fnta","Fntb","Folr2","Fopnl","Focad","Folh1","Folr1","Fosl1","Foxb1","Fosl2","Fosb","Foxb2","Fos","Foxd1","Foxc2","Foxc1","Foxd2","Foxa3","Foxd3","Foxa2","Foxa1","Foxd4","Foxe1","Foxe3","Foxf2","Foxf1","Foxi1","Foxh1","Foxg1","Foxi2","Foxi3","Foxj1","Foxj2","Foxk1","Foxj3","Foxl1","Foxk2","Foxl2","Foxm1","Foxn1","Foxn2","Foxn4","Foxn3","Foxo6","Foxo4","Foxo1","Foxo3","Foxp4","Foxp3","Foxq1","Foxr1","Foxred1","Foxr2","Foxred2","Foxs1","Fpgs","Fpgt","Fpr-rs3","Fpr-rs4","Fpr-rs6","Fpr1","Fpr2l","Fpr3","Fpr2","Fra10ac1","Foxp2","Foxp1","Frat1","Frat2","Fras1","Frg1l1","Frem2","Frem3","Frem1","Frg1","Frg2","Frmd1","Frk","Frmd4a","Frmd3","Frmd6","Frmd4b","Frmd5","Frmd7","Frmd8","Frmpd3","Frmpd2","Frmpd1","Frrs1l","Frrs1","Frmpd4","Frs3","Frs2","Fsbp","Fry","Frzb","Fscb","Fryl","Fscn1","Fscn2","Fscn3","Fsd1","Fsd1l","Fsd2","Fsip2","Fshb","Fsip1","Fsip2-ps1","Fshr","Fst","Fstl1","Fstl3","Fstl4","Fthl17c","Fstl5","Ftcd","Fthl17e","Ftl1l1","Ftmt","Fto","Ftsj1","Ftl1","Ftsj3","Fth1","Ftx","Fubp1","Fubp3","Fuca2","Fuk","Fundc1","Fundc2","Fuom","Fuca1","Fut1","Fus","Fut10","Fut11","Fut7","Fut4","Fut2","Fut9","Fut8","Fxc1-ps1","Fuz","Fv1","Fxr1","Fxn","Furin","Fxr2","Fxyd3","Fxyd4","Fxyd1","Fxyd5","Fxyd2","Fxyd7","Fxyd6","Fyb2","Fyco1","Fyb1","Fzd10","Fyttd1","Fzd1","Fzd2","Fyn","Fzd3","Fzd5","Fzd6","Fzd7","Fzd4","Fzd8","Fzd9","Fzr1","G0s2","G2e3","G4","G3bp1","G3bp2","G6pc2","G6pc","G7e-ps1","G6pc3","G8","Gab1","Gaa","Gab2","G6pd","Gabarap","Gabarapl1","Gabarapl2","Gabpa","Gabpb1","Gabpb1l","Gabbr2","Gabpb2","Gabbr1","Gabra2","Gabra1","Gabra4","Gabra3","Gabra6","Gabra5","Gabrb1","Gabrb2","Gabrb3","Gabrd","Gabre","Gabrg1","Gabrg3","Gabrg2","Gabrp","Gabrq","Gabrr1","Gabrr3","Gabrr2","Gad2","Gadd45b","Gadd45a","Gad1","Gadd45g","Gadl1","Gadd45gip1","Gak","Gal3st2","Gal3st3","Gal3st1","Gal3st4","Gal","Galc","Gale","Galk1","Galm","Galk2","Galns","Galnt1","Galnt10","Galnt11","Galnt12","Galnt15","Galnt14","Galnt16","Galnt13","Galnt17","Galnt18","Galnt3","Galnt2","Galnt4","Galnt5","Galnt6","Galnt7","Galnt9","Galntl5","Galp","Galntl6","Galr1","Galr3","Galr2","Gan","Gamt","Galt","Ganab","Ganc","Gapdh-ps1","Gapdh-ps2","Gapt","Gap43","Gapvd1","Gapdhs","Gar1","Garem1","Garem2","Gas1","Garnl3","Gapdh","Gars","Gart","Gas2","Gas2l1","Gas2l2","Gas5","Gas2l3","Gas8","Gast","Gas7","Gas6","Gata1","Gata2","Gata3","Gata5","Gatad1","Gatad2a","Gata6","Gata4","Gatad2b","Gatb","Gatc","Gatd1","Gba2","Gatm","Gba3","Gbe1","Gba","Gbgt1","Gbp1","Gbf1","Gbp3","Gbp2","Gbp4","Gbx1","Gbp6","Gbp5","Gbx2","Gca","Gcat","Gcc1","Gc","Gcc2","Gcdh","Gcfc2","Gcg","Gchfr","Gch1","Gcgr","Gckr","Gclm","Gclc","Gck","Gcm1","Gcm2","Gcn1l1","Gcnt1","Gcnt3","Gcnt2","Gcnt4","Gcnt6","Gcnt7","Gcsam","Gcsh","Gdap1l1","Gda","Gdap1","Gdap2","Gde1","Gdf1","Gdf10","Gdf11","Gdf15","Gdf2","Gdf3","Gdf5","Gdf6","Gdf7","Gdf9","Gdpd1","Gdi1","Gdpd3","Gdpd2","Gdi2","Gdpd4","Gdpd5","Gdpgp1","Gem","Gdnf","Gemin6","Gemin4","Gemin2","Gemin5","Gemin7","Gemin7l1","Gemin8","Gen1","Get4","Gfer","Gfi1","Gfi1b","Gfap","Gfm2","Gfm1","Gfod1","Gfod2","Gfpt1","Gfpt2","Gfra1","Gfy","Gfral","Gfra3","Gfra2","Gfra4","Gga1","Gga2","Ggact","Gga3","Ggn","Ggct","Ggh","Ggcx","Ggnbp1","Ggnbp2","Ggps1","Ggt6","Ggt5","Ggt7","Ggt1","Ggta1","Ggta1l1","Ghdc","Ghitm","Gh1","Ghrhr","Ghr","Ghrh","Ghsr","Gid4","Gid8","Ghrl","Gif","Gimap4","Gigyf1","Gigyf2","Gimap1","Gimap6","Gimap5","Gimap7","Gimd1","Gimap9","Gimap8","Gin1","Ginm1","Gins1","Gins2","Gins3","Gins4","Giot1","Gip","Gipc2","Gipc3","Gipc1","Gipr","Git1","Git2","Gja10","Gja3","Gja4","Gja6","Gja5","Gja8","Gjb1","Gjb4","Gjb5","Gjb2","Gjb6","Gjc1","Gjc2","Gjc3","Gja1","Gjd3","Gjd2","Gje1","Gjb3","Gjd4","Gk2","Gk5","Gk","Gkn1","Gkap1","Gkn3","Gkn2","Gla","Glb1l","Glb1l2","Glb1l3","Glcci1","Glce","Gldn","Gldc","Gle1-ps1","Gle1","Glg1","Gli1","Glb1","Gli2","Gli4","Glipr1","Glipr1l1","Gli3","Glipr1l2","Glis1","Glipr2","Glis3","Glis2","Glmp","Glmn","Glo1","Glod4","Glod5","Glp2r","Glp1r","Glra1","Glra2","Glra4","Glra3","Glrb","Glrx2","Glrx","Glrx5","Glt1d1","Glt6d1","Glrx3","Gls2","Gls","Glt8d1","Glt8d2","Gltp","Gltpd2","Glyatl1","Glyat","Glul","Glud1","Glyatl2","Glyctk","Glycam1","Glyatl3","Gm2a","Glyr1","Gm5471","Gmcl1l","Gmcl1","Gmds","Gmeb1","Gmeb2","Gmfg","Gmfb","Gmip","Gml","Gmnc","Gmppb","Gmnn","Gmppa","Gmpr","Gmpr2","Gna12","Gmps","Gna11","Gna14","Gna13","Gna15","Gnai1","Gnai3","Gnal","Gnai2","Gnao1","Gnat1","Gnaq","Gnat3","Gnat2","Gnaz","Gnas","Gnb1l","Gnb1","Gnb3","Gnb2","Gnb4","Gnb5","Gne","Gng11","Gng10","Gng13","Gng14","Gng12","Gng2","Gng3","Gng4","Gng7","Gng5","Gngt1","Gngt2","Gng8","Gnl1","Gnl3","Gnl2","Gnl3l","Gnpda1","Gnmt","Gnpda2","Gnpat","Gnpnat1","Gnptab","Gnptg","Golga1","Gns","Gnrhr","Gnrh1","Golga2","Golga3","Golga5","Golga4","Golga7b","Golga7","Golgb1","Golm1","Golim4","Golph3","Golph3l","Golt1a","Golt1b","Gon7","Gon4l","Gopc","Gorab","Gorasp2","Gorasp1","Gosr1","Gosr2","Got1l1","Got1","Gp1ba","Gp1bb","Got2","Gp2","Gp6","Gp5","Gp9","Gpalpp1","Gpa33","Gpaa1","Gpank1","Gpat2","Gpat3","Gpam","Gpat4","Gpatch11","Gpatch1","Gpatch2","Gpatch3","Gpatch2l","Gpatch4","Gpbar1","Gpatch8","Gpbp1l2","Gpbp1l1","Gpbp1","Gpc2","Gpc1","Gpc4","Gpc3","Gpc5","Gpcpd1","Gpd1l","Gpc6","Gpd1","Gpd2","Gpha2","Gphb5","Gper1","Gpihbp1","Gpkow","Gpi","Gphn","Gpld1","Gpn1","Gpm6b","Gpm6a","Gpn2","Gpn3","Gpr1","Gpr112l","Gpr101","Gpnmb","Gpr107","Gpr108","Gpr119","Gpr12","Gpr137","Gpr135","Gpr132","Gpr137b","Gpr141","Gpr137c","Gpr139","Gpr142","Gpr146","Gpr143","Gpr149","Gpr15","Gpr151","Gpr152","Gpr150","Gpr153","Gpr157","Gpr156","Gpr155","Gpr158","Gpr160","Gpr161","Gpr162","Gpr165","Gpr17","Gpr171","Gpr173","Gpr174","Gpr176","Gpr18","Gpr179","Gpr180","Gpr20","Gpr183","Gpr19","Gpr182","Gpr21","Gpr25","Gpr22","Gpr26","Gpr32","Gpr31","Gpr27","Gpr3","Gpr33","Gpr34","Gpr35","Gpr37l1","Gpr37","Gpr4","Gpr39","Gpr45","Gpr52","Gpr50","Gpr55","Gpr6","Gpr61","Gpr62","Gpr63","Gpr65","Gpr68","Gpr75","Gpr82","Gpr83","Gpr84","Gpr87","Gpr85","Gpr88","Gprasp1","Gpr89b","Gprasp2","Gprc5a","Gprc5b","Gprc5d","Gprc5c","Gprin1","Gprc6a","Gprin2","Gprin3","Gps2","Gps1","Gpsm2","Gpsm3","Gpsm1","Gpt","Gpt2","Gpx2-ps1","Gpx2-ps2","Gpx2","Gpx4-ps1","Gpx4-ps2","Gpx3","Gpx4-ps3","Gpx4","Gpx1","Gpx5","Gpx7","Gpx6","Gpx8","Gramd1a","Gramd1c","Gramd2","Gramd1b","Gramd3","Grap","Gramd4","Grap2","Grasp","Grb10","Grb14","Grb7","Greb1l","Greb1","Grcc10","Grb2","Grhl1","Grem1","Grem2","Grhl2","Grhl3","Grhpr","Grid1","Gria3","Gria4","Grid2ip","Grifin","Gria1","Grid2","Gria2","Grik3","Grik4","Grik1","Grik5","Grik2","Grin3a","Grin2c","Grin2d","Grin3b","Grina","Grin2a","Grin2b","Grin1","Grip2","Gripap1","Grk1","Grip1","Grk4","Grk3","Grk2","Grlf1-ps1","Grk5","Grk6","Grm2","Grm4","Grm3","Grm1","Grm6","Grm5","Grm7","Grm8","Grn","Grpel1","Grp","Grpel2","Grpr","Grsf1","Grwd1","Grxcr1","Grxcr2","Grtp1","Gsc","Gsap","Gsc2","Gsdmc","Gsdma","Gsdmd","Gsdme","Gsg1","Gsg1l2","Gse1","Gsg1l","Gskip","Gsk3a","Gspt2","Gspt1","Gsn","Gss","Gsr","Gsta2","Gsta5","Gsta1","Gsta3","Gsta4","Gstcd","Gsk3b","Gstk1","Gstm3","Gstm3l","Gstm4","Gstm5","Gstm6","Gstm2","Gstm6l","Gstm7","Gstp-ps1","Gsto1","Gsto2","Gstm1","Gstt3","Gstt2","Gstt4","Gsx1","Gstt1","Gstz1","Gstp1","Gsx2","Gtdc1","Gtf2a1","Gtf2a1l","Gtf2a2","Gtf2e1","Gtf2b","Gtf2e2","Gtf2f1","Gtf2f2","Gtf2h1","Gtf2h2","Gtf2h3","Gtf2h4","Gtf2h5","Gtf2i","Gtf2ird2","Gtf3a","Gtf3c1","Gtf2ird1","Gtf3c2","Gtf3c4","Gtf3c3","Gtf3c5","Gtf3c6","Gtpbp1","Gtpbp10","Gtpbp2","Gtpbp3","Gtpbp6","Gtpbp8","Gtpbp4","Gtse1","Gtsf1","Gtsf1l","Guca1a","Guca1b","Guca2a","Gucd1","Guca2b","Gucy1a2","Gucy1a3","Gucy2d","Gucy1b2","Gucy2c","Gucy1b3","Gucy2e","Gucy2f","Gucy2g","Guk1","Guf1","Gulo","Gulp1","Gvin1","Gusb","Gvinp1","Gxylt1","Gxylt2","Gykl1","Gyg1","Gypa","Gypc","Gys1","Gys2","Gzf1","Gzma","Gzmbl1","Gzmbl3","Gzmbl2","Gzmb","Gzmf","Gzmc","Gzmk","Gzmm","Gzmn","H1fnt","H1foo","H1f0","H19","H2afb3","H1fx","H2afj","H2afv","H2afy","H2afy2","H2afx","H2afz","H3f3c","H3f3a","H3f3b","H6pd","Habp4","Habp2","Haao","Hacd1","Hacd2","Hacd3","Hacd4","Hace1","Hacl1","Hadh","Hadhb","Hadha","Hagh","Haghl","Hal","Hand1","Hand2","Hao1","Hamp","Hao2","Hap1","Hapln1","Hapln2","Hapln3","Harbi1","Hapln4","Hars","Hars2","Has1","Has2","Has3","Haspin","Hat1","Haus2","Haus1","Haus3","Haus4","Haus5","Haus8-ps1","Haus7","Haus8","Hax1","Havcr2","Havcr1","Hba-a2","Hba-a3","Hba-a1","Hbb-b1","Hbe2","Hbe1","Hbegf","Hbq1","Hbg1","Hbq1b","Hbp1","Hbz","Hbs1l","Hbb","Hcar1","Hcar2","Hccs","Hcfc1r1","Hcfc1","Hcfc2","Hcls1","Hck","Hcn3","Hcn2","Hcn1","Hcn4","Hcst","Hcrtr2","Hcrtr1","Hcrt","Hdac11","Hdac10","Hdac1l","Hdac1","Hdac2","Hdac3","Hdac4","Hdac5","Hdac7","Hdac6","Hdac8","Hddc2","Hddc3","Hdc","Hdac9","Hdgfl1","Hdgf","Hdgfl3","Hdgfl2","Hdhd3","Hdhd2","Hdhd5","Hdx","Heatr1l1","Hdlbp","Heatr3","Heatr4","Heatr5a","Heatr5b","Heatr6","Heatr9","Hebp2","Hebp1","Heatr1","Heca","Hectd3","Hectd2","Hecw2","Hectd1","Hecw1","Hectd4","Helb","Heg1","Hells","Helq","Helz2","Helt","Helz","Hemgn","Hemk1","Henmt1","Hepacam","Hepacam2","Hephl1","Heph","Herc3","Herc1","Herc6","Herc2","Herc4","Herpud2","Herpud1","Hes2","Hes3","Hes5","Hes1","Hes6","Hes7","Hesx1","Hexa","Hexim1","Hexdc","Hexb","Hey1","Hexim2","Hey2","Heyl","Hfe2","Hgd","Hfm1","Hfe","Hgh1","Hgfac","Hgs","Hgsnat","Hhat","Hhex","Hhatl","Hgf","Hhipl1","Hhip","Hhipl2","Hhla2","Hiatl3","Hic1","Hibadh","Hibch","Hid1","Hic2","Higd1c","Hif1an","Higd1a","Higd1b","Hif3a","Higd2a","Hiat1-ps1","Higd2al1","Hilpda","Hils1","Hikeshi","Hint1","Hinfp","Hint1-ps1","Hint2","Hint3","Hipk2","Hip1r","Hipk1","Hip1","Hipk4","Hipk3","Hira","Hirip3","Hist1h1a","Hist1h1b","Hist1h1d","Hist1h1c","Hist1h1e","Hist1h1t","Hist1h2ac","Hist1h2af","Hist1h2aa","Hist1h2ah","Hist1h2ai","Hist1h2ail1","Hif1a","Hist1h2ak","hist1h2ail2","Hist1h2an","Hist1h2ba","Hist1h2bcl1","Hist1h2bd","Hist1h2ao","Hist1h2bg","Hist1h2bh","Hist1h2bk","Hist1h2bl","Hist1h2bo","Hist1h2bq","Hist1h3b","Hist1h3a","Hist1h4a","Hist2h2aa2","Hist1h4m","Hist1h4b","Hist2h2aa3","Hist2h2bb","Hist2h2ab","Hist2h2ac","Hist2h2be","Hist2h3c2","Hist2h4a","Hist2h4","Hist3h2ba","Hist3h2a","Hist3h2bb","Hist3h3","Hist4h4","Hivep1","Hivep3","Hjurp","Hivep2","Hk1","Hk2","Hk3","Hkdc1","Hlcs","Hlf","Hltf","Hlx","Hm13","Hmbox1","Hmbs","Hmces","Hmcn1","Hmcn2","Hmg1l1","Hmg20a","Hmg20b","Hmga1","Hmga2","Hmgb1","Hmgb1-ps1","Hmgb1-ps2","Hmgb1-ps3","Hmgb1-ps4","Hmgb2","Hmgb2l1","Hmgb3","Hmgb4","Hmgcl","Hmgcll1","Hmgcr","Hmgcs1","Hmgcs2","Hmgn1","Hmgn2","Hmgn3","Hmgn4","Hmgn5","Hmgn5b","Hmgxb3","Hmgxb4","Hmmr","Hmox1","Hmox2","Hmox2-ps1","Hmx1","Hmx2","Hmx3","Hnf1a","Hnf1b","Hnf4a","Hnf4g","Hnmt","Hnrnpa0","Hnrnpa1","Hnrnpa1-ps1","Hnrnpa2b1","Hnrnpa3","Hnrnpa3-ps1","Hnrnpab","Hnrnpc","Hnrnpd","Hnrnpdl","Hnrnpf","Hnrnph1","Hnrnph2","Hnrnph3","Hnrnpk","Hnrnpl","Hnrnpll","Hnrnpm","Hnrnpr","Hnrnpu","Hnrnpul1","Hnrnpul2","Hoga1","Homer1","Homer2","Homer3","Homez","Hook1","Hook2","Hook3","Hopx","Hormad1","Hormad2","Hotairm1","Hoxa1","Hoxa10","Hoxa11","Hoxa11-as","Hoxa13","Hoxa2","Hoxa3","Hoxa4","Hoxa5","Hoxa6","Hoxa7","Hoxa9","Hoxaas3","Hoxb1","Hoxb13","Hoxb2","Hoxb3","Hoxb4","Hoxb5","Hoxb5os","Hoxb6","Hoxb7","Hoxb8","Hoxb9","Hoxc10","Hoxc11","Hoxc12","Hoxc13","Hoxc4","Hoxc5","Hoxc6","Hoxc8","Hoxc9","Hoxd1","Hoxd10","Hoxd11","Hoxd12","Hoxd13","Hoxd3","Hoxd4","Hoxd8","Hoxd9","Hp","Hp1bp3","Hpca","Hpcal1","Hpcal4","Hpd","Hpdl","Hpf1","Hpgd","Hpgds","Hpn","Hprt1","Hps1","Hps3","Hps4","Hps5","Hps6","Hpse","Hpse2","Hpx","Hr","Hras","Hrasls","Hrasls5","Hrc","Hrct1","Hrg","Hrh1","Hrh2","Hrh3","Hrh4","Hrk","Hrnr","Hs1bp3","Hs2st1","Hs3st1","Hs3st2","Hs3st3a1","Hs3st3b1","Hs3st4","Hs3st5","Hs3st6","Hs6st1","Hs6st2","Hs6st3","Hsbp1","Hsbp1l1","Hsc70-ps1","Hsc70-ps2","Hscb","Hsd11b1","Hsd11b2","Hsd17b1","Hsd17b10","Hsd17b11","Hsd17b12","Hsd17b13","Hsd17b14","Hsd17b2","Hsd17b3","Hsd17b4","Hsd17b6","Hsd17b7","Hsd17b8","Hsd3b1","Hsd3b2","Hsd3b3","Hsd3b5","Hsd3b7","Hsdl1","Hsdl2","Hsf1","Hsf2","Hsf2bp","Hsf4","Hsf5","Hsfy2","Hsh2d","Hsp90aa1","Hsp90ab1","Hsp90b1","Hspa12a","Hspa12b","Hspa13","Hspa14","Hspa1a","Hspa1b","Hspa1l","Hspa2","Hspa4","Hspa4l","Hspa5","Hspa8","Hspa8-ps1","Hspa9","Hspb1","Hspb11","Hspb2","Hspb3","Hspb6","Hspb7","Hspb8","Hspb9","Hspbap1","Hspbp1","Hspd1","Hspd1-ps1","Hspd1-ps10","Hspd1-ps11","Hspd1-ps12","Hspd1-ps13","Hspd1-ps14","Hspd1-ps15","Hspd1-ps16","Hspd1-ps17","Hspd1-ps18","Hspd1-ps19","Hspd1-ps2","Hspd1-ps20","Hspd1-ps21","Hspd1-ps22","Hspd1-ps23","Hspd1-ps25","Hspd1-ps26","Hspd1-ps27","Hspd1-ps28","Hspd1-ps29","Hspd1-ps3","Hspd1-ps31","Hspd1-ps32","Hspd1-ps4","Hspd1-ps5","Hspd1-ps6","Hspd1-ps7","Hspd1-ps8","Hspd1-ps9","Hspe1","Hspg2","Hsph1","Htatip2","Htatsf1","Htr1a","Htr1b","Htr1d","Htr1f","Htr2a","Htr2b","Htr2c","Htr3a","Htr3b","Htr4","Htr5a","Htr5b","Htr6","Htr7","Htra1","Htra2","Htra3","Htra4","Htt","Hunk","Hus1","Hus1b","Huwe1","Hvcn1","Hyal1","Hyal2","Hyal3","Hyal4","Hyal5","Hyal6","Hydin","Hyi","Hykk","Hyls1","Hyou1","Hypk","Hypm","Iah1","Iapp","Iars","Iars2","Iba57","Ibsp","Ibtk","Ica1","Ica1l","Icam1","Icam2","Icam4","Icam5","Ice1","Ice2","Ick","Icmt","Icos","Icoslg","Id1","Id2","Id3","Id4","Ide","Idh1","Idh2","Idh3a","Idh3B","Idh3g","Idi1","Idi2","Idnk","Ido1","Ido2","Ids","Idua","Ier2","Ier3","Ier3ip1","Ier5","Ier5l","Iffo1","Iffo2","Ifi203-ps1","Ifi27","Ifi27l2b","Ifi30","Ifi35","Ifi44","Ifi44l","Ifi47","Ifih1","Ifit1","Ifit1bl","Ifit2","Ifit3","Ifitm1","Ifitm10","Ifitm2","Ifitm3","Ifitm5","Ifitm6","Ifitm7","Ifna1","Ifna11","Ifna16l1","Ifna2","Ifna4","Ifna5","Ifnar1","Ifnar2","Ifnb1","Ifne","Ifng","Ifngr1","Ifngr2","Ifnk","Ifnl1","Ifnl3","Ifnlr1","Ifrd1","Ifrd2","Ift122","Ift140","Ift172","Ift20","Ift22","Ift27","Ift43","Ift46","Ift52","Ift57","Ift74","Ift80","Ift81","Ift88","Igbp1","Igbp1b","Igdcc3","Igdcc4","Igf1","Igf1r","Igf2","Igf2bp1","Igf2bp2","Igf2bp3","Igf2r","Igfals","Igfbp1","Igfbp2","Igfbp3","Igfbp4","Igfbp5","Igfbp6","Igfbp7","Igfbpl1","Igfl3","Igflr1","Igfn1","IgG-2a","Igh-6","Ighe","Ighg1","Ighmbp2","Ighv","Igip","Igkc","Igkv28","Igl","Igll1","Iglon5","Igsf1","Igsf10","Igsf11","Igsf21","Igsf22","Igsf23","Igsf3","Igsf5","Igsf6","Igsf7","Igsf8","Igsf9","Igsf9b","Igtp","Ihh","Ik","Ikbip","Ikbkb","Ikbke","Ikbkg","Ikzf1","Ikzf2","Ikzf3","Ikzf4","Ikzf5","Il10","Il10ra","Il10rb","Il11","Il11ra1","Il12a","Il12b","Il12rb1","Il12rb2","Il13","Il13ra1","Il13ra2","Il15","Il15ra","Il16","Il17a","Il17b","Il17c","Il17d","Il17f","Il17ra","Il17rb","Il17rc","Il17rd","Il17re","Il18","Il18bp","Il18r1","Il18rap","Il19","Il1a","Il1b","Il1f10","Il1r1","Il1r2","Il1rap","Il1rapl1","Il1rapl2","Il1rl1","Il1rl2","Il1rn","Il2","Il20","Il20ra","Il20rb","Il21","Il21r","Il22","Il22ra1","Il22ra2","Il23a","Il23r","Il24","Il25","Il27","Il27ra","Il2ra","Il2rb","Il2rg","Il3","Il31","Il31ra","Il33","Il34","Il36a","Il36b","Il36g","Il36rn","Il3ra","Il4","Il4i1","Il4r","Il5","Il5ra","Il6","Il6r","Il6st","Il7","Il7r","Il9","Il9r","Ildr1","Ildr2","Ilf2","Ilf3","Ilk","Ilkap","Ilvbl","Immp1l","Immp2l","Immt","Imp3","Imp4","Impa1","Impa2","Impact","Impad1","Impdh1","Impdh2","Impg1","Impg2","Ina","Inafm1","Inafm2","Inca1","Incenp","Inf2","Ing1","Ing2","Ing3","Ing4","Ing5","Inha","Inhba","Inhbb","Inhbc","Inhbe","Inip","Inmt","Ino80","Ino80b","Ino80c","Ino80d","Ino80e","Inpp1","Inpp4a","Inpp4b","Inpp5a","Inpp5b","Inpp5d","Inpp5e","Inpp5f","Inpp5j","Inpp5k","Inppl1","Ins1","Ins2","Insc","Insig1","Insig2","Insl3","Insl5","Insl6","Insm1","Insm2","Insr","Insrr","Ints1","Ints10","Ints11","Ints12","Ints13","Ints14","Ints2","Ints3","Ints4","Ints5","Ints6","Ints6l","Ints7","Ints8","Ints9","Intu","Invs","Ip6k1","Ip6k2","Ip6k3","Ipcef1","Ipmk","Ipo11","Ipo13","Ipo4","Ipo5","Ipo7","Ipo9","Ipp","Ippk","Iqank1","Iqca1","Iqca1l","Iqcb1","Iqcc","Iqcd","Iqce","Iqcf1","Iqcf3","Iqcf5","Iqcf6","Iqcg","Iqch","Iqck","Iqgap1","Iqgap2","Iqgap3","Iqsec1","Iqsec2","Iqsec3","Iqub","Irak1","Irak1bp1","Irak2","Irak3","Irak4","Ireb2","Irf1","Irf2","Irf2bp1","Irf2bp2","Irf2bpl","Irf3","Irf4","Irf5","Irf6","Irf7","Irf8","Irf9","Irgc","Irgm","Irgm2","Irgq","Irs1","Irs2","Irs3","Irs4","Irx1","Irx2","Irx3","Irx4","Irx5","Irx6","Isca1","Isca1-ps1","Isca2","Isca2-ps1","Iscu","Isg15","Isg20","Isg20l2","Isl1","Isl2","Islr","Islr2","Ism1","Ism2","Isoc1","Isoc2b","Ispd","Ist1","Isx","Isy1","Isyna1","Itch","Itfg1","Itfg2","Itga1","Itga10","Itga11","Itga2","Itga2b","Itga3","Itga4","Itga5","Itga6","Itga7","Itga8","Itga9","Itgad","Itgae","Itgal","Itgam","Itgav","Itgax","Itgb1","Itgb1bp1","Itgb1bp2","Itgb2","Itgb3","Itgb3bp","Itgb4","Itgb5","Itgb6","Itgb7","Itgb8","Itgbl1","Itih1","Itih2","Itih3","Itih4","Itih6","Itm2a","Itk","Itln1","Itm2c","Itm2b","Itpka","Itpkc","Itpk1","Itpa","Itpkb","Itpr2","Itpripl2","Itpripl1","Itpr1","Ivd","Itsn2","Itsn1","Itpr3","Ivl","Ivns1abp","Iws1","Iyd","Izumo2","Izumo1r","Izumo3","Izumo1","Izumo4","Jade2","Jade1","Jade3","Jagn1","Jag2","Jag1","Jak1","Jakmip2","Jakmip1","Jak3","Jam2","Jakmip3","Jam3","Jaml","Jak2","Jazf1","Jarid2","Jcad","Jchain","Jdp2","Jhy","Jkamp","Jmjd4","Jmjd1c","Jmjd6","Jmjd8","Jmy","Josd1","Josd2","Jph1","Jmjd7","Jph3","Jph2","Jph4","Jpt1","Jpx","Jpt2","Jrk","Jrkl","Jsrp1","Jtb","Junb","Ka11","Jund","Jup","Kank2","Kank1","Jun","Kank4","Kank3","Kalrn","Kansl1","Kansl1l","Kantr","Kansl2","Kansl3","Kap","Kat14","Kars","Kat2b","Kat2a","Kat6b","Kat7","Kat5","Kat6a","Kat8","Katna1","Katnal1","Katnal2","Katnbl1","Katnb1","Kazald1","Kazn","Kb15","Kb23","Kbtbd12","Kbtbd11","Kbtbd13","Kbtbd2","Kbtbd3","Kbtbd4","Kbtbd6","Kbtbd7","Kbtbd8","Kcmf1","Kcna10","Kcna1","Kcna3","Kcna2","Kcna4","Kcna5","Kcna6","Kcna7","Kcnab1","Kcnab2","Kcnab3","Kcnb2","Kcnc1","Kcnb1","Kcnc3","Kcnc2","Kcnd1","Kcnc4","Kcnd2","Kcne2","Kcne3","Kcne4","Kcne1","Kcnd3","Kcnf1","Kcne5","Kcng1","Kcng3","Kcng4","Kcng2","Kcnh4","Kcnh3","Kcnh2","Kcnh1","Kcnh5","Kcnh6","Kcnh7","Kcnh8","Kcnip1","Kcnip3","Kcnip2","Kcnip4","Kcnj10","Kcnj1","Kcnj13","Kcnj12","Kcnj14","Kcnj16","Kcnj15","Kcnj11","Kcnj2","Kcnj4","Kcnj3","Kcnj5","Kcnj9","Kcnk1","Kcnj8","Kcnj6","Kcnk12","Kcnk10","Kcnk13","Kcnk15","Kcnk16","Kcnk18","Kcnk3","Kcnk4","Kcnk2","Kcnk7","Kcnk5","Kcnk6","Kcnk9","Kcnmb3","Kcnmb1","Kcnmb2","Kcnmb4","Kcnn1","Kcnn2","Kcnma1","Kcnn3","Kcnq4","Kcnrg","Kcnn4","Kcnq3","Kcnq2","Kcnq5","Kcnq1","Kcns1","Kcns2","Kcns3","Kcnv1","Kcnv2","Kcnt1","Kcnt2","Kcnu1","Kcp","Kctd10","Kctd11","Kctd1","Kctd12","Kctd14","Kctd13","Kctd15","Kctd16","Kctd2","Kctd19","Kctd17","Kctd20","Kctd18","Kctd21","Kctd4","Kctd3","Kctd5","Kctd7","Kctd6","Kctd8","Kctd9","Kdelc1","Kdelr1","Kdelc2","Kdf1","Kdelr3","Kdelr2","Kdm1b","Kdm1a","Kdm2a","Kdm2b","Kdm3a","Kdm3b","Kdm4a","Kdm4b","Kdm4dl2","Kdm4e","Kdm4d","Kdm4c","Kdm5a","Kdm7a","Kdm5c","Kdm5d","Kdm5b","Kdm6a","Kdm8","Kdm6b","Kdsr","Kel","Khdc1","Kera","Khdc1b","Khdc3","Keap1","Khdc4","Khps1a","Khdrbs2","Khnyn","Khdrbs3","Khk","Kdr","Khdrbs1","Kiaa1671","Khsrp","Kiaa0408L","Kif11","Kif12","Kif13a","Kidins220","Kif13b","Kif14","Kif15","Kif16b","Kif17","Kif18a","Kif18b","Kif19","Kif1a","Kif1bp","Kif1c","Kif20a","Kif1b","Kif20b","Kif21b","Kif21a","Kif22","Kif23","Kif24","Kif26a","Kif26b","Kif27","Kif28p","Kif2a","Kif2b","Kif3b","Kif2c","Kif3c","Kif4b","Kif4a","Kif3a","Kif5b","Kif5a","Kif6","Kif7","Kif5c","Kif9","Kifap3","Kifc1","Kin","Kir3dl1","Kifc2","Kirrel2","Kifc3","Kirrel1","Kirrel3","Kiss1","Kiz","Kiss1r","Klb","Kitlg","Kl","Klc1","Klc2","Kit","Klc3","Klf1","Klc4","Klf10","Klf11","Klf13","Klf12","Klf14","Klf17","Klf15","Klf16","Klf2","Klf5-ps1","Klf3","Klf4","Klf5","Klf5-ps2","Klf7","Klf6","Klf8","Klf9","Klhdc1","Klhdc2","Klhdc10","Klhdc3","Klhdc4","Klhdc7a","Klhdc7b","Klhdc8b","Klhdc8a","Klhdc9","Klhl1","Klhl11","Klhl10","Klhl12","Klhl14","Klhl13","Klhl15","Klhl17","Klhl18","Klhl2","Klhl20","Klhl21","Klhl22","Klhl23","Klhl24","Klhl25","Klhl28","Klhl26","Klhl29","Klhl3","Klhl31","Klhl33","Klhl32","Klhl30","Klhl34","Klhl35","Klhl36","Klhl4","Klhl40","Klhl38","Klhl42","Klhl41","Klhl5","Klhl6","Klhl7","Klhl9","Klhl8","Klk11","Klk12","Klk10","Klk13","Klk1","Klk14","Klk15","Klk1c10","Klk1c4","Klk1b3","Klk1c3","Klk1c12","Klk1c2","Klk1c6","Klk1c8","Klk5","Klk5l","Klk4","Klk1c9","Klk6","Klk7","Klk9","Klk8","Klra2","Klra1","Klkb1","Klra22","Klra5","Klrb1","Klrb1a","Klrb1b","Klrc2","Klrc1","Klrb1c","Klrc3","Klrd1","Klln","Klre1","Klrg1","Klrh1","Klri1","Klrg2","Klri2","Kmo","Kmt2a","Kmt2c","Kmt2e","Kmt2b","Kmt5b","Kmt5a","Kmt2d","Kndc1","Kncn","Kmt5c","Klrk1","Kng2l1","Kng1","Knl1","Knop1","Kng2","Knstrn","Kntc1","Kpna1","Kpna3","Kpna4","Kpna2","Kpna5","Kpna6","Kpna7","Kprp","Kpnb1","Kptn","Kremen1","Krba1","Kremen2","Kras","Krcc1","Krr1","Kri1","Krit1","Krt1","Krt10","Krt12","Krt15","Krt16","Krt18","Krt13","Krt17","Krt2","Krt19","Krt14","Krt20","Krt222","Krt23","Krt24","Krt27","Krt28","Krt26","Krt25","Krt31","Krt32","Krt33a","Krt33b","Krt35","Krt34","Krt39","Krt36","Krt42","Krt40","Krt4","Krt71","Krt72","Krt5","Krt7","Krt73","Krt76","Krt75","Krt77","Krt79","Krt80","Krt78","Krt81","Krt8","Krt82","Krt83","Krt84","Krt85","Krtap1-1","Krt9","Krt86","Krtap1-3","Krtap1-5","Krtap11-1","Krtap12-2","Krtap13-1","Krtap13-2","Krtap15-1","Krtap14","Krtap14l","Krtap16-1","Krtap16-5","Krtap17-1","Krtap19-5","Krtap20l3","Krtap2-1","Krtap2-4l","Krtap2-4","Krtap24-1","Krtap26-1","Krtap22-2","Krtap27-1","Krtap3-1","Krtap3-3","Krtap4-7","Krtap31-1","Krtap5-1","Krtap3-2","Krtap4-3","Krtap7-1","Krtap8-1","Krtap29-1","Krtcap2","Krtdap","Krtap9-1","Krtcap3","Ksr1","Kti12","Kxd1","Ksr2","Kyat3","Ky","Kyat1","Ktn1","Kynu","L1td1","L2hgdh","L3hypdh","L3mbtl2","L3mbtl4","L1cam","L3mbtl1","L3mbtl3","Lacc1","Lactb","Lactb2","Lad1-ps1","Lad1","Lair1","Lage3","Lag3","Lalba","Lama2","Lama3","Lama1","Lama4","Lamb3","Lamb1","Lamb2","Lama5","Lamc1","Lamc3","Lamc2","Lamp1","Lamp3","Lamp2","Lamp5","Lamtor1","Lamtor2","Lamtor4","Lamtor3","Lamtor5","Lancl3","Lao1","Lancl1","Lancl2","Lap3","Laptm4a","Laptm4b","Laptm5","Large2","Larp1","Large1","Larp1b","Larp4","Larp6","Larp4b","Larp7","Las1l","Lars","Lasp1","Lars2","Lat","Lats1","Lat2","Lats2","Lax1","Lbh","Layn","Lbp","Lbr","Lbx2","Lbx1","Lce1c","Lca5l","Lca5","Lce1d","Lcat","Lce1f","Lce1m","Lce1l","Lce3d","Lce3e","Lce6a","Lclat1","Lcmt1","Lcmt2","Lcn1","Lcn10","Lck","Lcn11","Lcn12","Lcn15l1","Lcn3","Lcn4","Lcn6","Lcn5","Lcn8","Lcn2","Lcn9","Lcor","Lcorl","Lctl","Lcp2","Lcp1","Lct","Ldah","Ldb1","Ldb2","Ldhal6b","Ldhd","Ldhb","Ldhc","Ldha","Ldlrad1","Ldlr","Ldlrad2","Leap2","Ldb3","Ldlrad3","Ldoc1","Ldlrad4","Ldlrap1","Lect2","Lelp1","Lemd1","Lefty1","Lekr1","Lefty2","Lemd2","Lef1","Lemd3","Lenep","Leng1","Leng8","Leo1","Leprotl1","Leprot","Letm2","Letm1","Leng9","Letmd1","Lepr","Lexm","Lfng","Lgals2","Lgals12","Lgals1","Lep","Lgals3bp","Lgals4","Lgals5","Lgals7","Lgals3","Lgals8","Lgalsl","Lgals9","Lgi1","Lgi2","Lgi3","Lgi4","Lgmn","Lgr4","Lgr6","Lgr5","Lgsn","Lhb","Lhfpl1","Lhfpl3","Lhfpl2","Lhfpl5","Lhfpl4","Lhcgr","Lhfpl6","Lhx1","Lhpp","Lhx2","Lhx4","Lhx5","Lhx3","Lhx6","Lhx8","Lhx9","Lias","Lif","Lifr","Lig1","Lig3","Lig4","Lilra5","Lilrb1","Lilrb2","Lilrb3","Lilrb4","Lilrb3a","Lilra3","Lilrc2","Lilrb3l","Lim2","Lima1","Lime1","Limd1","Limd2","Limch1","Limk1","Limk2","Lims1","Lin28c","Lin28b","Lims2","Lin28a","Lin37","Lin52","Lin54","Lin7b","Linc00176","Lin7a","Lin7c","Lin9","Linc00514","Linc01158","Linc-rbe","Lingo3","Lingo2","Lingo1","Lingo4","Lins1","Lipa","Lipe","Lipf","Liph","Lipi","Lipg","Lipk","Lipc","Lipm","Lipogenin","Lipn","Lipt1","Lipo1","Lipt2","Lix1","Litaf","Lix1l","Lkaaear1","Llgl1","Llph","Llgl2","Lman1","Lman1l","Lman2","Lman2l","Lmbr1","Lmbrd2","Lmbr1l","Lmbrd1","Lmcd1","Lmln","Lmf1","Lmf2","Lmnb2","Lmntd2","Lmnb1","Lmo1","Lmna","Lmo2","Lmntd1","Lmo3","Lmod1","Lmod2","Lmod3","Lmo4","Lmtk3","Lmtk2","Lmx1a","Lmo7","Lnc-hc","Lnc001","Lnc004","Lnc012","Lnc056","Lnc016","Lmx1b","Lnc081","Lnc134","Lnc215","Lnp1","Lnpk","Lnx2","Lonrf1","Lonp1","Lonrf2","Lonp2","Lor","Lonrf3","Loxhd1","Lox","Loxl1","Loxl2","Loxl3","Loxl4","Lpal2","Lpar2","Lpar1","Lpar4","Lpar3","Lpar5","Lpar6","Lpcat1","Lpcat2","Lpcat2b","Lpcat3","Lpin1","Lpcat4","Lpgat1","Lpin2","Lpin3","Lpo","Lppos","Lpl","Lpxn","Lpp","Lrap","Lrat","Lrba","Lrch1","Lrch2","Lrch3","Lrcol1","Lre3","Lrch4","Lrfn1","Lrfn2","Lrfn3","Lrfn4","Lrg1","Lrfn5","Lrif1","Lrguk","Lrig1","Lrig2","Lrig3","Lrit1","Lrit2","Lrit3","Lrmp","Lrmda","Lrp10","Lrp12","Lrp11","Lrp1","Lrp1b","Lrp2bp","Lrp3","Lrp4","Lrp2","Lrp6","Lrpap1","Lrp8","Lrp5","Lrpprc","Lrr1","Lrrc1","Lrrc10b","Lrrc10","Lrrc14","Lrrc14b","Lrrc15","Lrrc17","Lrrc19","Lrrc18","Lrrc2","Lrrc20","Lrrc23","Lrrc24","Lrrc25","Lrrc26","Lrrc27","Lrrc28","Lrrc29","Lrrc3","Lrrc30","Lrrc31","Lrrc32","Lrrc34","Lrrc37a","Lrrc36","Lrrc38","Lrrc39","Lrrc3c","Lrrc3b","Lrrc4","Lrrc41","Lrrc42","Lrrc40","Lrrc43","Lrrc45","Lrrc46","Lrrc47","Lrrc49","Lrrc4b","Lrrc51","Lrrc52","Lrrc4c","Lrrc55","Lrrc56","Lrrc57","Lrrc58","Lrrc59","Lrrc6","Lrrc61","Lrrc66","Lrrc63","Lrrc69","Lrrc72","Lrrc71","Lrrc7","Lrrc73","Lrrc74b","Lrrc74a","Lrrc75a","Lrrc75b","Lrrc8b","Lrrc8a","Lrrc8d","Lrrc8c","Lrrc9","Lrrc8e","Lrrd1","Lrrcc1","Lrrfip1","Lrriq1","Lrrfip2","Lrriq3","Lrriq4","Lrrk1","Lrrn1","Lrrn2","Lrrk2","Lrrn4","Lrrn3","Lrrn4cl","LRRTM1","Lrrtm2","Lrrtm3","Lrrtm4","Lrtm1","Lrsam1","Lrtm2","Lrtomt","Lrwd1","Lsamp","Lsg1","Lsm1","Lsm10","Lsm11","Lsm12","Lsm14a","Lsm2","Lsm3","Lsm14b","Lsm4","Lsm5","Lsm7","Lsm6","Lsm8","Lsmem2","Lsmem1","Lsp1","Lsr","Lst1","Lss","Lta4h","Ltb","Ltb4r","Lta","Ltb4r2","Ltbp3","Ltbp2","Ltbp1","Ltbp4","Ltbr","Ltc4s","Ltf","Ltk","Ltv1","Ltn1","Luc7l","Luc7l2","Luc7l3","Lurap1","Lurap1l","Lum","Luzp4","Luzp2","Luzp1","Lvrn","Lxn","Ly49i2","Ly49i3","Ly49i4","Ly49i5","Ly49i9","Ly49i7","Ly49s3","Ly49s4","Ly49s5","Ly49s6","Ly49s7","Ly49si1","Ly6al","Ly49si2","Ly49si3","Ly6c","Ly6d","Ly6g5c","Ly6g5b","Ly6e","Ly6g6c","Ly6g6d","Ly6g6f","Ly6g6e","Ly6h","Ly6l","Ly6k","Ly6i","Ly75","Ly86","Ly96","Ly9","Lyar","Lyg1","Lyg2","Lyc2","Lyl1","Lynx1","Lypd1","Lyn","Lypd2","Lypd3","Lypd4","Lypd5","Lypd6","Lypd6b","Lypd8","Lypla1","Lypla2","Lyplal1","Lyrm1","Lyrm2","Lyrm4","Lyrm7","Lyrm9","Lysmd1","Lysmd2","Lysmd3","Lysmd4","Lyst","Lyve1","Lyzl1","Lyz2","Lyzl4","Lyzl6","Lzic","Lztfl1","Lztr1","Lzts1","Lzts2","Lzts3","M1ap","Maats1","M6pr","Mab21l1","Mab21l2","Macc1","Mab21l3","Macrod1","Macrod2","Mad1l1","Macf1","Mad2l1","Mad2l1bp","Mad2l2","Madcam1","Madd","Maea","Mael","Maf","Maf1","Mafa","Maff","Mafb","Mafg","Mafk","Magea10","Magea11","Magea4","Mag","Magea8","Magea9","Magea9-ps1","Mageb1","Mageb18","mageb1l1","Mageb16","Mageb2","Mageb3","Mageb6","Mageb4","Mageb5","Mageb7","Magebl1","Magec2","Maged1","Maged2","Magee1","Magee2","Magel2","Mageh1","Magix","Magi1","Magi2","Magi3","Magmas-ps1","Magoh","Magohb","Magt1","Maip1","Majin","Mak16","Mak","Mal","Mall","Mal2","Malrd1","Malsu1","Malt1","Mamdc2","Maml1","Mamdc4","Maml2","Maml3","Mamstr","Man1a2","Man1b1","Man1a1","Man1c1","Man2a1","Man2a2","Man2b1","Man2b2","Man2c1","Manbal","Manba","Manea","Maneal","Mansc1","Manf","Mansc4","Maoa","Map10","Maob","Map1a","Map1lc3b2","Map1b","Map1lc3a","Map1lc3b","Map1s","Map2k2","Map2k1","Map2","Map2k3","Map2k4","Map2k6","Map2k7","Map2k5","Map3k10","Map3k1","Map3k11","Map3k12","Map3k13","Map3k15","Map3k14","Map3k19","Map3k21","Map3k2","Map3k20","Map3k3","Map3k4","Map3k6","Map3k5","Map3k7","Map3k7cl","Map3k8","Map3k9","Map4","Map4k1","Map4k2","Map4k3","Map6d1","Map4k5","Map6","Map4k4","Map7","Map7d1","Map7d2","Map7d3","Map9","Mapk11","Mapk10","Mapk12","Mapk13","Mapk15","Mapk1ip1","Mapk1","Mapk1ip1l","Mapk4","Mapk6","Mapk14","Mapk7","Mapk8ip1","Mapk8ip2","Mapk8","Mapk3","Mapk8ip3","Mapkap1","Mapk9","Mapkapk2","Mapkapk3","Mapkapk5","Mapkbp1","Mapre1","Mapre2","Mapre3","1-Mar","1-Mar","2-Mar","10-Mar","11-Mar","2-Mar","Mapt","4-Mar","3-Mar","5-Mar","6-Mar","7-Mar","8-Mar","9-Mar","Marcksl1","Marcks","Marco","Marf1","Mark1","Mark2","Mark3","Mark4","Mars","Mars2","Marveld1","Marveld2","Marveld3","Mas1l","Mas1","Masp1","Masp2","MAST1","Mast2","Mast4","Mast3","Mastl","Mat1a","Mat2b","Mat2a","Matk","Matn1","Matn3","Matn2","Matn4","Matr3-ps1","Matr3-ps2","Matr3","Mau2","Mavs","Max","Max-ps1","Maz","Mb21d2","Mb","Mbd1","Mbd2","Mbd3l1","Mbd3l2","Mbd3","mbd3l2l","Mbd4","Mbd5","Mbd6","Mbip","Mblac2","Mblac1","Mbl1","Mbl2","Mbnl2","Mbnl1","Mbnl3","Mboat1","Mboat2","Mboat4","Mboat7","Mboat7l1","Mbtd1","Mbtps1","Mbtps2","Mbp","Mc1r","Mc2r","Mc3r","Mc5r","Mc4r","Mcart1","Mcam","Mcat","Mcc","Mccc2","Mccc1","Mcee","Mcemp1","Mcf2","Mcfd2","Mcf2l","Mchr1","Mcidas","Mcm10","Mcl1","Mcm2","Mcm3","Mcm4","Mcm3ap","Mcm5","Mcm6","Mcm8","Mcm7","Mcm9","Mcmdc1","Mcmbp","Mcmdc2","Mcoln1","Mcoln2","Mcoln3","Mcph1","Mcpt1","Mcpt10","Mcpt1l1","Mcpt1l2","Mcpt1l3","Mcpt1l4","Mcpt2","Mcpt3","Mcpt4l1","Mcpt4","Mcpt8l2","Mcpt8","Mcpt9","Mcrip1","Mcpt8l3","Mcrip2","Mcrs1","Mctp1","Mcts1","Mctp2","Mcts2","Mcub","Mcur1","Mcu","Mdc1","Mdfic","Mdfi","Mdga1","Mdga2","Mdh1","Mdh2","Mdh1b","Mdk","Mdm1","Mdm4","Mdn1","Mdp1","Mdm2","Me2","Me1","Mea1","Meaf6","Me3","Mecom","Mecr","Med10","Med1","Mecp2","Med11","Med12","Med13","Med12l","Med13l","Med14-ps1","Med14","Med15","Med16","Med18","Med17","Med19","Med20","Med21","Med22","Med24","Med23","Med25","Med26","Med27","Med28","Med29","Med30","Med31","Med6","Med4","Med7","Med8","Med9","Medag","Mef2b","Mef2a","Mef2d","Mef2c","Mefv","Megf10","Megf6","Megf9","Megf11","Megf8","Mei1","Meikin","Mei4","Meig1","Meiob","Meioc","Meis1","Meis2","Meis3","Melk","Meltf","Memo1","Meox1","Men1","Meox2","Mep1a","Mep1b","Mepce","Mepe","Mesd","Mesp1","Mertk","Mesp2","Mest","Metap1","Metap1d","Metap2","Met","Metrn","Metrnl","Mettl1","Mettl13","Mettl11b","Mettl15","Mettl16","Mettl14","Mettl17","Mettl18","Mettl21c","Mettl21a","Mettl21cl1","Mettl21ep","Mettl22","Mettl23","Mettl24","Mettl25","Mettl27","Mettl26","Mettl2b","Mettl4","Mettl3","Mettl5","Mettl6","Mettl7a","Mettl9-ps1","Mettl7b","Mettl8","Mettl9","Mex3a","Mex3b","Mex3c","Mex3d","Mfap2","Mfap1a","Mfap3l","Mfap3","Mfap4","Mfap5","Mfhas1","Mff","Mfge8","Mfng","Mfsd1","Mfrp","Mfn1","Mfn2","Mfsd10","Mfsd11","Mfsd12","Mfsd14a","Mfsd13a","Mfsd14b","Mfsd2a","Mfsd2b","Mfsd4a","Mfsd3","Mfsd4b","Mfsd6l","Mfsd5","Mfsd6","Mfsd7","Mfsd8","Mfsd9","Mgam","Mga","Mgarp","Mgat1","Mgat2","Mgat3","Mgat4b","Mgat4a","Mgat4d","Mgat4e","Mgat4c","Mgat5b","MGC105567","Mgat5","MGC105649","MGC108823","MGC109340","MGC112692","MGC114246","MGC114483","MGC114492","MGC114499","MGC116121","MGC93861","MGC116197","MGC116202","MGC94207","MGC94199","MGC95208","MGC94891","MGC95210","Mgea5","Mgme1","Mgll","Mgp","Mgrn1","Mgst1","Mgmt","Mgst2","Mgst3","Mia","Miat","Mia3","Mia2","Mib1","Mib2","Mical1","Mical2","Micalcl","Mical3","Micall1","Micall2","Micb","Micu2","Micu1","Micu3","Mid1ip1","Mid2","Mid1","Midn","Mief1","Mief2","Mien1","Mier2","Mier1","Mier3","Mif4gd","Miga1","Miga2","Miip","Milr1","Mill1","Mif","Mindy1","Mindy2","Minos1","Minpp1","Mink1","Mios","Miox","Mipol1","Mipep","Mip","Mir1","Mir100","Mir101-2","Mir103a1","Mir101a","Mir103a2","Mir105","Mir107","Mir106a","Mir106b","Mir10a","Mir10b","Mir1188","Mir1193","Mir1199","Mir1224","Mir122","Mir124-1","Mir124-2","Mir124-3","Mir1249","Mir1247","Mir125a","Mir125b1","Mir125b2","Mir126a","Mir126b","Mir127","Mir128-2","Mir128-1","Mir129-1","Mir129-2","Mir1297","Mir1306","Mir1298","Mir130b","Mir130a","Mir132","Mir133a1","Mir133b","Mir134","Mir135a","Mir135b","Mir136","Mir137","Mir138-2","Mir138-1","Mir139","Mir140","Mir141","Mir142","Mir144","Mir143","Mir145","Mir146a","Mir146b","Mir148a","Mir147","Mir148b","Mir149","Mir151","Mir150","Mir151b","Mir152","Mir154","Mir153","Mir155","Mir155hg","Mir15b","Mir16","Mir17","Mir181a-1","Mir181a2","Mir181b1","Mir181b2","Mir181c","Mir181d","Mir182","Mir183","Mir184","Mir1843b","Mir185","Mir186","Mir187","Mir188","Mir1896","Mir18a","Mir190b","Mir190","Mir191","Mir1912","Mir192","Mir193","Mir193a","Mir193b","Mir1949","Mir194-2","Mir194-1","Mir195","Mir1956","Mir196a","Mir196b","Mir196c","Mir1b","Mir19a","Mir199a2","Mir19b1","Mir19b2","Mir200a","Mir200b","Mir200c","Mir201","Mir202","Mir203","Mir204","Mir207","Mir206","Mir205","Mir208a","Mir208b","Mir20a","Mir20b","Mir211","Mir212","Mir210","Mir21","Mir215","Mir216a","Mir214","Mir218-2","Mir216b","Mir217","Mir218-1","Mir219-2","Mir219a1","Mir22","Mir221","Mir222","Mir224","Mir223","Mir23a","Mir23b","Mir24-2","Mir25","Mir24-1","Mir26b","Mir27a","Mir26a","Mir27b","Mir28","Mir290","Mir291a","Mir291b","Mir292","Mir294","Mir293","Mir295-1","Mir295-2","Mir2964","Mir296","Mir299","Mir297","Mir298","Mir2985","Mir299b","Mir29a","Mir29b1","Mir301a","Mir29b2","Mir29c","Mir301b","Mir300","Mir3064","Mir3065","Mir3074","Mir3072","Mir3075","Mir3084a","Mir3084c","Mir3099","Mir3085","Mir30a","Mir30b","Mir30c1","Mir30c2","Mir31","Mir30d","Mir30e","Mir3102","Mir32","Mir323","Mir3120","Mir320a","Mir324","Mir325","Mir326","Mir322","Mir327","Mir328b","Mir328","Mir329","Mir330","Mir33","Mir331","Mir336","Mir337","Mir338","Mir339","Mir341","Mir342","Mir343","Mir344-1","Mir344a-2","Mir344b-1","Mir344g","Mir344i","Mir345","Mir346","Mir349","Mir3473","Mir34a","Mir34b","Mir351","Mir350","Mir34c","Mir3541","Mir3542","Mir3543","Mir3544","Mir3545","Mir3546","Mir3547","Mir3548","Mir3550","Mir3551","Mir3552","Mir3553","Mir3554","Mir3556b","Mir3555","Mir3557","Mir3556a","Mir3558","Mir3559","Mir3560","Mir3561","Mir3565","Mir3562","Mir3564","Mir3566","Mir3568","Mir3569","Mir3570","Mir3571","Mir3572","Mir3576","Mir3573","Mir3575","Mir3574","Mir3577","Mir3578","Mir3579","Mir3580","Mir3581","Mir3582","Mir3583","Mir3584","Mir3585","Mir3587","Mir3588","Mir3589","Mir3590","Mir3591","Mir3592","Mir3593","Mir3594","Mir3595","Mir3596a","Mir3596b","Mir3596c","Mir3597-1","Mir3597-2","Mir3597-3","Mir361","Mir362","Mir363","Mir365b","Mir369","Mir370","Mir374b","Mir376a","Mir375","Mir376b","Mir376c","Mir377","Mir378","Mir379","Mir378b","Mir380","Mir381","Mir382","Mir383","Mir384","Mir410","Mir411","Mir409","Mir412","Mir421","Mir423","Mir425","Mir429","Mir433","Mir431","Mir434","Mir448","Mir449a","Mir449c","Mir450a1","Mir455","Mir463","Mir466c","Mir465","Mir451a","Mir466d","Mir471","Mir483","Mir484","Mir485","Mir488","Mir489","Mir487b","Mir490","Mir493","Mir494","Mir495","Mir496","Mir497","Mir499a","Mir501","Mir500","Mir503","Mir504","Mir505","Mir511","Mir539","Mir5132","Mir509","Mir532","Mir540","Mir541","Mir542","Mir544","Mir543","Mir551b","Mir547","Mir568","Mir582","Mir592","Mir598","Mir615","Mir6215","Mir6216","Mir628","Mir6314","Mir6315","Mir6316","Mir6318","Mir6320","Mir6322","Mir632","Mir6321","Mir6323","Mir6324","Mir6325","Mir6326","Mir6327","Mir6328","Mir6329","Mir6330","Mir6332","Mir6331","Mir6333","Mir6334","Mir652","Mir664-1","Mir653","Mir665","Mir666","Mir664-2","Mir667","Mir668","Mir672","Mir671","Mir673","Mir676","Mir674","Mir675","Mir678","Mir702","Mir741","Mir708","Mir711","Mir742","Mir743a","Mir743b","Mir7578","Mir758","Mir759","Mir761","Mir760","Mir762","Mir770","Mir764","Mir7a1","Mir7a2","Mir802","Mir7b","Mir871","Mir872","Mir874","Mir873","Mir875","Mir876","Mir878","Mir879","Mir877","Mir883","Mir880","Mir881","Mir9-1","Mir9-2","Mir9-3","Mir92a1","Mir92b","Mir92a2","Mir935","Mir93","Mir96","Mir98","Mir99a","Mir99b","Mirlet7a-2","Mirlet7a1","Mirlet7bhg","Mirlet7b","Mirlet7c1","Mirlet7c2","Mirlet7e","Mirlet7f-1","Mirlet7f1","Mirlet7d","Mirlet7f2","Mirlet7g","Mirlet7i","Mis12","Misp","Misp3","Mis18a","Mis18bp1","Mitd1","Mitf","Mixl1","Mk1","Mkl2","Mkks","Mki67","Mkl1","Mkln1","Mknk2","Mknk1","Mkrn1","Mkrn2os","Mkrn2","Mkrn3","Mkx","Mks1","Mlana","Mlc1","Mlec","Mlf1","Mlf2","Mlkl","Mlh1","Mlh3","Mllt1","Mlip","Mllt10","Mllt11","Mllt3","Mln","Mllt6","Mlnr","Mlph","Mlst8","Mlxip","Mlx","Mlxipl","Mlycd","Mmaa","Mmab","Mmachc","Mmd","Mmadhc","Mmd2","Mmgt1","Mmgt2","Mmel1","Mme","Mmp10","Mmp11","Mmp12","Mmp15","Mmp1","Mmp16","Mmp14","Mmp13","Mmp1b","Mmp17","Mmp19","Mmp20","Mmp21","Mmp25","Mmp23","Mmp27","Mmp28","Mmp24","Mmp8","Mmrn1","Mmp7","Mms19","Mmrn2","Mmp3","Mn1","Mnda","Mms22l","Mnd1","Mmp2","Mnat1","Mns1","Moap1-ps1","Mnt","Mnx1","Moap1","Mob1b","Mob2","Mob1a","Mob3a","Mob3c","Mob3b","Mob4","Mocos","Mocs1","Mobp","Mocs3","Mogat1","Mocs2","Mog","Mmp9","Mogat2","Mogat3","Mogs","Mok","Mon1a","Mon1b","Morc2b","Morc2","Morc1","Mon2","Morc3","Morc4","Morf4l1","Morn2","Morn1","Morf4l2","Morn3","Morn5","Morn4","Mos","Mospd1","Mospd4","Mospd3","Mospd2","Mov10","Moxd1","Mov10l1","Moxd2","Mpc1l","Mpdu1","Mpc1","Mpc2","Mpeg1","Mpdz","Mphosph6-ps1","Mpg","Mphosph10","Mphosph6","Mphosph9","Mphosph8","Mpi","Mpig6b","Mplkip","Mpnd","Mpp1","Mpl","Mpo","Mpp2","Mpp3","Mpp4","Mpp5","Mpp6","Mppe1","Mpp7","Mpped1","Mpped2","Mptx1","Mpst","Mpv17","Mpv17l","Mprip","Mpv17l2","Mpz","Mpzl1","Mpzl2","Mpzl3","Mrap","Mr1","Mrap2","Mras","Mrc1","Mrc2","Mreg","Mrfap1","Mrgprb13","Mrgbp","Mre11a","Mrgprb3","Mrgprb4","Mrgprc","Mrgprb5","Mrgprd","Mrgpre","Mrgprf","Mrgprx1","Mrgprg","Mrgprx2l","Mrgprx2","Mrgprx3","Mrgprx4","Mrln","Mri1","Mrm2","Mrm1","Mrm3","Mrnip","Mro","Mroh2a","Mroh2b","Mroh5","Mroh1","Mroh4","Mroh6","Mroh7","Mroh9","Mroh8","Mrpl1","Mrpl10","Mrpl12","mrpl11","Mrpl13","Mrpl14","Mrpl15","Mrpl16","Mrpl17","Mrpl18","Mrpl19","Mrpl2","Mrpl20","Mrpl21","Mrpl22","Mrpl23","Mrpl27","mrpl24","Mrpl28","Mrpl3","Mrpl32","Mrpl30","Mrpl33","Mrpl34","Mrpl35","Mrpl36","Mrpl38","Mrpl37","Mrpl39","Mrpl4","Mrpl42","Mrpl41","Mrpl40","Mrpl43","Mrpl44","Mrpl45","Mrpl46","Mrpl47","Mrpl48","Mrpl50","Mrpl49","Mrpl51","Mrpl52","Mrpl53","Mrpl54","Mrpl55","Mrpl57","Mrpl58","Mrps10","mrpl9","Mrps11","Mrps12","Mrps14","Mrps15","Mrps16","Mrps17-ps1","Mrps17","Mrps18a","Mrps18b","Mrps18c","Mrps2","Mrps21l","Mrps21","Mrps22","Mrps23","Mrps25","Mrps26","Mrps24","Mrps27","Mrps30","Mrps28","Mrps31","Mrps33","Mrps34","Mrps36","Mrps35","Mrps6","Mrps7","Mrps5","Mrrf","Mrps9","Mrs2","Mrto4","Mrvi1","Ms4a10","Ms4a1","Ms4a12","Ms4a13-ps1","Ms4a14","Ms4a18","Ms4a15","Ms4a2","Ms4a3","Ms4a4a","Ms4a4c","Ms4a5","Ms4a6b","Ms4a6a","Ms4a6bl","Ms4a6c","Ms4a7","Ms4a6e","Ms4a8","Msantd2","Msantd1","Msantd3","Msantd4","Msc","Msgn1","Msh3","Msh4","Msi1","Msh5","Msh2","Msh6","Msl1","Msi2","Msl2","Msl3l2","Msl3","Mslnl","Msmb","Msmp","Msln","Msmo1","Msr1","Msrb1","Msn","Msrb2","Msrb3","Mss51","Msra","Mst1","Msto1","Msx3","Mst1r","Msx1","Mstn","Msx2","Mt-atp6","Mt-atp8","Mt-co1","Mt-co2","Mt-co3","Mt-nd2","Mt-nd4","Mt-cyb","Mt-nd3","Mt-nd1","mt-Ta","mt-Tc","mt-Td","mt-Te","Mt-nd6","Mt-nd4l","mt-Tf","Mt-nd5","mt-Th","mt-Tg","mt-Ti","mt-Tk","mt-Tl1","mt-Tl2","mt-Tm","mt-Tn","mt-Tp","mt-Tq","mt-Tr","mt-Ts1","mt-Ts2","mt-Tv","mt-Tt","mt-Tw","mt-Ty","Mt1f","Mt1m","Mt1-ps2","Mt1-ps1","Mt1","Mt2A","Mt3","Mt4","Mta1","Mta2","Mta3","Mtap","Mtbp","Mtch1","Mtch2","Mtcl1","Mtcp1","Mterf1","Mterf2","Mtdh","Mterf4","Mterf3","Mtf1","Mtf2","Mtfmt","Mtfp1","Mtfr1-ps1","Mtfr1","Mtfr1l","Mtg1","Mtfr2","Mtg2","Mthfd1","Mthfd1l","Mthfd2","Mthfd2l","Mthfsd","Mtif3","Mtif2","Mthfs","Mtm1","Mtmr1","Mtmr10","Mtmr11","Mtmr12","Mthfr","Mtmr14","Mtmr2","Mtmr3","Mtmr6","Mtmr4","Mtmr9","Mtmr7","Mto1","Mtnr1b","Mtnr1a","Mtpap","Mtrf1","Mtpn","Mtrf1l","Mtr","Mtss1l","Mtrr","Mtss1","Mttp","Mtor","Mturn","Mtx1","Mtus2","Mtus1","Mtx2","Mtx3","Muc15","Muc13","Muc16","Muc19","Muc19l1","Muc1","Muc20","Muc3","Muc2","Muc5b","Muc5ac","Muc4","Mucl1","Muc6","Mul1","Mum1l1","Mum1","Mug2","Mug1","Mus81","Mup4","Mup5","Mustn1","Musk","Mutyh","Mvb12a","Mut","Mvb12b","Mvd","Mvp","Mvk","Mxd1","Mx1","Mx2","Mxd3","Mxd4","Mxra7","Myadml2","Mxi1","Mxra8","Myb","Mybbp1a","Myadm","Mybl1","Mybl2","Mybpc2","Mybpc3","Mybpc1","Mybphl","Mycbp","Mybph","Mycbp2","Mycbpap","Mycl","Myct1","Mycn","Mycs","Myd88","Mydgf","Myef2","Myf5","Myf6","Myg1","Myh1","Myh13","Myc","Myh10","Myh11","Myh2","Myh15","Myh14","Myh3","Myh7b","Myh6","Myh4","Myh8","Myh9l1","Myh7","Myh9","Myl10","Myl1","Myl12a","Myl2","Myl3","Myl12b","Myl4","Myl6b","Myl6","Myl6l","Myl7","Myl9","Mylip","Mylk3","Mylk2","Mylk4","Mylk","Mymk","Mylpf","Mynn","Myo15b","Myo10","Myo15a","Myo18a","Myo16","Myo19","Myo18b","Myo1a","Myo1b","Myo1c","Myo1e","Myo1f","Myo1h","Myo1d","Myo1g","Myo3b","Myo3a","Myo5c","Myo5a","Myo5b","Myo7b","Myo6","Myo7a","Myo9a","Myo9b","Myoc","Myocd","Myod1","Myof","Myom2","Myom1","Myog","Myom3","Myorg","Myoz3","Myoz2","Myot","Myoz1","Mypn","Mypop","Myrf","Myrfl","Myrip","Myt1","Mysm1","Myt1l","Mzb1","Mzt1","Myzap","Mzf1","N4bp1","N4bp2l1","Mzt2b","N4bp2","N5","N4bp2l2","N4bp3","N6amt1","Naa10","Naa11","Naa15","Naa16","Naa20","Naa30","Naa25","Naa35","Naa38","Naa40","Naa50","Naa60","Naaa","Naaladl1","Naalad2","Naaladl2","Nab1","Nab2","Nabp1","Nabp2","Nacad","Naca","Nacc1","Nacc2","Nadk","Nadk2","Nadsyn1","Nae1","Naga","Nagk","Naf1","Naglt1","Nagpa","Naglu","Naif1","Naip5","Nags","Nalcn","Naip6","Nanos1","Nanos2","Nampt","Nanog","Nanos3","Nanp","Nans","Nap1l2","Nap1l1","Nap1l3","Nap1l4","Nap1l5","Napb","Napa","Napepld","Napg","Naprt","Napsa","Narf","Nars","Narfl","Nars2","Nasp","Nat14","Nat10","Nat6","Nat8","Nat3","Nat1","Nat8b","Nat2","Nat8f1","Nat8f2","Nat8f3","Nat8f4","Nat8f5","Nat8l","Nat9","Natd1","Nav1","Naxd","Nav3","Nav2","Naxe","Nbas","Nbea","Nbeal1","Nbl1","Ncald","Nbeal2","Nbn","Nbr1","Ncam2","Ncapd2","Ncan","Ncaph","Ncapg","Ncapd3","Ncam1","Ncapg2","Ncaph2","Ncbp2","Ncbp3","Ncbp1","Nccrp1","Ncdn","Nceh1","Ncf2","Ncf1","Ncf4","Nck1","Nck2","Nckap1","Nckap1l","Nckap5","Nckap5l","Nckipsd","Ncl-ps1","Ncmap","Ncln","Ncl","Ncoa4","Ncoa5","Ncoa2","Ncoa3","Ncoa1","Ncoa7","Ncoa6","Ncr2","Ncr3lg1","Ncr1","Ncr3","Ncor1","Ncor2","Ncstn","Ndc1","Ncs1","Ndc80","Ndfip1","Nde1","Ndel1","Ndfip2","Ndnf","Ndn","Ndor1","Ndp","Ndrg1","Ndrg3","Ndrg2","Ndst3","Ndst2","Ndst1","Ndrg4","Ndst4","Ndufa1","Ndufa10l1","Ndufa13-ps1","Ndufa11","Ndufa10","Ndufa12","Ndufa13","Ndufa2","Ndufa3","Ndufa4l2","Ndufa7l","Ndufa4","Ndufa6","Ndufa5","Ndufa7","Ndufa8","Ndufaf1","Ndufa9","Ndufaf2","Ndufab1","Ndufaf4","Ndufaf5","Ndufaf3","Ndufaf6","Ndufb1","Ndufaf8","Ndufaf7","Ndufb10","Ndufb1l1","Ndufb11","Ndufb2","Ndufb3","Ndufb4l1","Ndufb4-ps1","Ndufb4","Ndufb6","Ndufb5","Ndufb7","Ndufb8","Ndufb9","Ndufc1","Ndufc2","Ndufs2","Ndufs1","Ndufs3","Ndufs4","Ndufs5-ps1","Ndufs5","Ndufs6","Ndufs7","Ndufs8","Ndufv2","Ndufv1","Ndufv3-ps1","Ndufv3","Nebl","Necab1","Neb","Necab2","Necab3","Necap2","Necap1","Nectin1","Nectin3","Nectin2","Nedd1","Nectin4","Nedd8","Nedd4l","Nedd4","Nedd9","Negr1","Nefh","Neil1","Nefm","Neil2","Nefl","Neil3","Nek1","Nek11","Nek2","Nek10","Nek2l1","Nek3","Nek4","Nek5","Nek6","Nek7","Nelfa","Nek8","Nek9","Nelfcd","Nelfb","Nelfe","Nemp1","Nemf","Nemp2","Nenf","Nell1","Nepn","Neo1","Nell2","Nerg-ps11","Nerg-ps1","Nepro","Nerg-ps12","Nerg-ps10","Nerg-ps13","Nerg-ps14","Nerg-ps15","Nerg-ps2","Nerg-ps4","Nerg-ps6","Nerg-ps5","Nerg-ps3","Nerg-ps7","Nerg-ps8","Nerg-ps9","Net1","Neto2","Neto1","Neu1","Neu4","Neu3","Nes","Neu2","Neurl1b","Neurl2","Neurl1","Neurl3","Neurod2","Neurl4","Neurod4","Neurod1","Neurod6","Nexmif","Nexn","Nf1x","Nfam1","Nf2","Nfat5","Nf1","Nfasc","Nfatc2ip","Nfatc1","Nfatc2","Nfatc3","Nfe2","Nfe2l1","Nfe2l3","Nfatc4","Nfia","Nfic","Nfib","Nfil3","Nfkb2","Nfe2l2","Nfkbib","Nfkbia","Nfkbie","Nfkbil1","Nfkbid","Nfkbiz","Nfrkb","Nfkb1","Nfs1","Nfu1","Nfx1","Nfxl1","Nfya","Nfyb","Nfyc","Ngdn","Ngef","Ngb","Ngly1","Ngp","Ngrn","Nhlh2","Nhlh1","Nhej1","Nhlrc1","Nhlrc2","Ngf","Ngfr","Nhlrc3","Nhlrc4","Nhp2","Nhsl2","Nhs","Nhsl1","Nicn1","Nif3l1","Nid1","Nid2","Nifk","Nim1k","Ninj1","Nin","Ninj2","Nipa1","Nip7","Ninl","Nipa2","Nipal1","Nipal4","Nipal2","Nipal3","Nipsnap1","Nipsnap2","Nipsnap3a","Nipsnap3b","Nipbl","Nit1","Nisch","Nit2","Nkain1","Nkain2","Nkain3","Nkain4","Nkap","Nkapl","Nkapd1","Nkd1","Nkg7","Nkd2","Nkiras1","Nkpd1","Nkiras2","Nkr-p1c","Nkrf","Nktr","Nkx1-1","Nkx1-2","Nkx2-3","Nkx2-4","Nkx2-2","Nkx2-6","Nkx2-8","Nkx2-5","Nkx2-1","Nkx3-1","Nkx3-2","Nkx6-2","Nkx6-1","Nkx6-3","Nle1","Nlgn2","Nlk","Nlgn3","Nlgn1","Nln","Nlrc3","Nlrc5","Nlrc4","Nlrp10","Nlrp14","Nlrp12","Nlrp1b","Nlrp2","Nlrp1a","Nlrp4","Nlrp4b","Nlrp3","Nlrp4a","Nlrp4f","Nlrp5","Nlrp6","Nlrx1","Nlrp9","Nmbr","Nmb","Nmd3","Nme2-ps1","Nme1","Nme5","Nme3","Nme2","Nme4","Nme6","Nme7","Nme9","Nme8","Nmi","Nmnat1","Nmnat2","Nmral1","Nmnat3","Nmrk1","Nmrk2","NMS","Nmt1","Nmt2","Nmur1","Nmur2","Nmu","Nnmt","Nnat","Noa1","Nnt","Nob1","Nobox","Noc2l","Noc3l","Noc4l","Noct","Nod1","Nodal","Nol11","Nol10","Nol12","Nod2","Nol3","Nol4","Nol4l","Nol7","Nol6","Nol8","Nol9","Nom1","Nolc1","Nomo1","Nono","Nono-ps1","Nop14","Nop16","Nop10","Nop2","Nop53","Nop56","Nop58","Nop9","Nos1ap","Nosip","Nostrin","Notch2","Nog","Notch1","Nos1","Notch3","Notch4","Noto","Notum","Nos3","Nova2","Nov","Nova1","Nox3","Nox1","Nos2","Nox4","Noxa1","Noxred1","Noxo1","Np4","Npas1","Npas3","Npas2","Npb","Npas4","Npbwr1","Npat","Npc1","Npc1l1","Npdc1","Npc2","Npepl1","Npepo","Npff","Npepps","Npffr1","Npffr2","Nphp3","Nphp1","Npl","Nphp4","Nphs2","Nphs1","Nploc4","Npm2","Npm3","Npnt","Npm1","Nppc","Npr2","Nppb","Npr1","Npr3","Nprl2","Nppa","Nprl3","Nps","Nptx1","Npsr1","Nptxr","Nptx2","Nptn","Npvf","Npw","Npy4r","Npy2r","Npy1r","Nqo2","Nr0b1","Npy5r","Nqo1","Nr0b2","Nr1d1","Nr1d2","Nr1h2","Nr1h3","Nr1h4","Nr1h5","Nr1i2","Nr2c1","Npy","Nr2c2ap","Nr1i3","Nr2e1","Nr2e3","Nr2f1","Nr2c2","Nr2f6","Nr2f2","Nr3c2","Nr4a1","Nr4a2","Nr4a3","Nr5a1","Nr6a1","Nr5a2","Nr3c1","Nradd","Nras-ps1","Nrarp","Nrap","Nrbf2","Nras","Nrbp2","Nrbp1","Nrde2","Nrep","Nrdc","Nrg2","Nrf1","Nrcam","Nrg3","Nrg4","Nrgn","Nrip1","Nrip2","Nrip3","Nrk","Nrm","Nrl","Nrg1","Nrn1","Nrros","Nrp2","Nrsn1","Nrp1","Nrsn2","Nrtn","Nrxn1","Ns5atp4","Nsa2","Nsd1","Nrxn2","Nrxn3","Nsd2","Nrn1l","Nsdhl","Nsd3","Nsg2","Nsg1","Nsl1","Nsfl1c","Nsf","Nsmaf","Nsmce1","Nsmce3","Nsmce4a","Nsmce2","Nsrp1","Nsun2","Nsmf","Nsun3","Nsun7","Nsun5","Nsun4","Nsun6","Nt5c","Nt5c1a","Nt5c1b","Nt5c2","Nt5dc1","Nt5c3b","Nt5dc3","Nt5dc2","Nt5c3a","Nt5m","Nt5e","Ntan1","Nthl1","Ntmt1","Ntm","Ntf4","Ntn3","Ntf3","Ntn1","Ntn4","Ntn5","Ntpcr","Ntng2","Ntng1","Ntsr2","Nts","Nuak1","Ntsr1","Nuak2","Ntrk3","Ntrk1","Nubpl","Nubp2","Nub1","Nubp1","Nucb1","Ntrk2","Nucb2","Nucks1","Nudcd3","Nudcd2","Nudcd1","Nudc","Nudt1","Nudt10","Nudt11","Nudt12","Nudt13","Nudt15","Nudt14","Nudt16","Nudt17","Nudt16l1","Nudt19","Nudt18","Nudt2","Nudt3","Nudt22","Nudt21","Nudt4","Nudt5","Nudt6","Nudt8","Nudt7","Nuf2","Nufip1","Nudt9","Nufip2","Nuggc","Numa1","Numb","Numbl","Nup107","Nup133","Nup160","Nup153","Nup155","Nup188","Nup205","Nup210l","Nup214","Nup37","Nup210","Nup35","Nup43","Nup50","Nup54","Nup85","Nup62cl","Nup62","Nup88","Nup93","Nup58","Nupl2","Nupr1l1","Nupr1","Nup98","Nupr2","Nus1","Nusap1","Nutf2","Nutf2-ps1","Nutm1","Nwd1","Nutm2f","Nvl","Nwd2","Nxf2","Nxf1","Nxf5","Nxf3","Nxnl1","Nxf7","Nxn","Nxnl2","Nxpe2","Nxpe1","Nxpe3","Nxpe4","Nxph2","Nxpe5l1","Nxpe5","Nxph1","Nxph3","Nxph4","Nxt1","Nxt2","Nynrin","Nyap1","Nyap2","Nyx","Oacyl","Oaf","Oas1d","Oas1a","Oard1","Oas1b","Oas1e","Oas1g","Oas1h","Oas1f","Oas1i","Oas2","Oas1k","Oas3","Oasl","Oasl2","Oaz1-ps","Oat","Oaz1","Obox1","Oaz2","Oaz3","Obox2","Obox5","Obp2a","Obp2b","Obp1f","Oc90","Obsl1","Obscn","Obp3","Oca2","Ociad2","Ocel1","Ociad1","Ocstamp","Ocm2","Ocrl","Ocln","Odam","Odf1","Odc1","Odf2","Odf3","Odf2l","Odf3b","Odf3l1","Odf3l2","Odf4","Ofcc1","Odr4","Ogfod1","Ofd1","Ogdhl","Ogfod2","Ogfod3","Ogdh","Ogfrl1","Ogfr","Ogn","Oip5","Oit3","Ogg1","Ola1","Ogt","Olah","Olfm1","Olfm2","Olfm3","Olfm4","Olfml1","Olfml2a","Olfml3","Olfml2b","Olfr1330-ps1","Olfr1055","Olfr873","Olfr94-ps1","Olig1","Olig3","Olig2","Olr1","Olr1000","Olr1005-ps","Olr100-ps","Olr1004-ps","Olr10","Olr1002","Olr1008-ps","Olr1007","Olr1010-ps","Olr1006","Olr1001-ps","Olr1003-ps","Olr1011-ps","Olr1014","Olr1015-ps","Olr1012","Olr1018-ps","Olr1019-ps","Olr102-ps","Olr1020","Olr1009-ps","Olr1017-ps","Olr1013-ps","Olr101","Olr1021-ps","Olr1022","Olr1016","Olr1023-ps","Olr1025-ps","Olr1027-ps","Olr1026-ps","Olr1024","Olr1028-ps","Olr1029","Olr103","Olr1030-ps","Olr1031-ps","Olr1033-ps","Olr1032-ps","Olr1034-ps","Olr1035-ps","Olr1037-ps","Olr1036-ps","Olr1038-ps","Olr1039-ps","Olr1041-ps","Olr1040-ps","Olr104","Olr1042-ps","Olr1043-ps","Olr1044-ps","Olr1048-ps","Olr1045-ps","Olr1047-ps","Olr1046-ps","Olr1049","Olr105","Olr1050-ps","Olr1051","Olr1052","Olr1053-ps","Olr1054-ps","Olr1056-ps","Olr1055","Olr1057","Olr1058","Olr1059","Olr106","Olr1062-ps","Olr1060","Olr1061","Olr1063","Olr1064","Olr1065","Olr1066-ps","Olr1067","Olr1069","Olr1068","Olr107","Olr1071","Olr1070","Olr1072","Olr1074-ps","Olr1073","Olr1075","Olr1076","Olr1077","Olr1078","Olr1079","Olr1080-ps","Olr108","Olr1081","Olr1083","Olr1082","Olr1084","Olr1085","Olr1086","Olr1088","Olr1087","Olr1089-ps","Olr109","Olr1090","Olr1091","Olr1093","Olr1092","Olr1094-ps","Olr1095","Olr1096","Olr1097-ps","Olr1099-ps","Olr1098-ps","Olr110","Olr11","Olr1100-ps","Olr1102","Olr1105","Olr1104","Olr1106","Olr1107","Olr1109-ps","Olr111","Olr1108","Olr1110-ps","Olr1111","Olr1112-ps","Olr1113-ps","Olr1114-ps","Olr1116-ps","Olr1115","Olr1117","Olr1118","Olr112","Olr1120-ps","Olr1119","Olr1121","Olr1122","Olr1124","Olr1125","Olr1126","Olr1127-ps","Olr1128","Olr1129","Olr113","Olr1130","Olr1131-ps","Olr1132","Olr1133-ps","Olr1134-ps","Olr1136-ps","Olr1135","Olr1137","Olr1139","Olr1138","Olr1140-ps","Olr114","Olr1141-ps","Olr1143","Olr1142","Olr1144","Olr1145","Olr1146","Olr1147","Olr1148","Olr1149","Olr115","Olr1150-ps","Olr1152-ps","Olr1151","Olr1153-ps","Olr1154-ps","Olr1156","Olr1155","Olr1157-ps","Olr1158","Olr116-ps","Olr1161-ps","Olr1159","Olr1160","Olr1163","Olr1162","Olr1164","Olr1165","Olr1166","Olr1167-ps","Olr1168-ps","Olr1169","Olr117-ps","Olr1170-ps","Olr1171","Olr1172","Olr1175-ps","Olr1176-ps","Olr1174","Olr1178-ps","Olr1177","Olr1179","Olr118-ps","Olr1181-ps","Olr1182-ps","Olr1184-ps","Olr1183-ps","Olr1185","Olr1187-ps","Olr1186","Olr119","Olr1191","Olr1192","Olr1193","Olr1194","Olr1195","Olr1197","Olr1196","Olr1198","Olr1199","Olr12","Olr120","Olr1200","Olr1201","Olr1203","Olr1202","Olr1205-ps","Olr1204","Olr1206","Olr1207-ps","Olr1208-ps","Olr1209-ps","Olr1210-ps","Olr121","Olr1212-ps","Olr1211-ps","Olr1215-ps","Olr1213","Olr1214","Olr1217","Olr1218","Olr1219","Olr122","Olr1220","Olr1222","Olr1223","Olr1224-ps","Olr1225","Olr1226","Olr1227","Olr1228","Olr1229","Olr1232","Olr1230","Olr1231","Olr1233","Olr1234","Olr1235","Olr1236","Olr1237","Olr1238","Olr124","Olr1239","Olr1240","Olr1241","Olr1242","Olr1243","Olr1244","Olr1245","Olr1246","Olr1247","Olr1248","Olr1249","Olr125","Olr1250","Olr1251","Olr1252","Olr1253","Olr1254","Olr1255-ps","Olr1256","Olr1257","Olr1258","Olr1258-ps","Olr126","Olr1259","Olr1260","Olr1261","Olr1262","Olr1263-ps","Olr1264","Olr1267-ps","Olr1268-ps","Olr1265","Olr1269-ps","Olr1266","Olr1270-ps","Olr127","Olr1272-ps","Olr1273","Olr1275","Olr1276-ps","Olr1271","Olr1274","Olr1277-ps","Olr1278","Olr1279","Olr1281-ps","Olr1282-ps","Olr128","Olr1280","Olr1284-ps","Olr1283","Olr1285","Olr1287-ps","Olr1286","Olr1289-ps","Olr129","Olr1288","Olr1290-ps","Olr1291","Olr1292","Olr1293","Olr1296-ps","Olr1294","Olr1299-ps","Olr1298-ps","Olr1295","Olr1297","Olr13","Olr1300-ps","Olr130","Olr1301","Olr1302","Olr1303","Olr1304","Olr1305","Olr1306","Olr1307","Olr1308","Olr1310-ps","Olr131","Olr1309","Olr1311","Olr1312-ps","Olr1313","Olr1314","Olr1317-ps","Olr1318","Olr1315","Olr1316","Olr132","Olr1319","Olr1324-ps","Olr1320","Olr1325","Olr1328","Olr1326","Olr1323","Olr1321","Olr1327","Olr133-ps","Olr1329","Olr1333-ps","Olr1332","Olr1330","Olr1331","Olr1334","Olr1335","Olr1337","Olr1338","Olr134-ps","Olr1339","Olr1341","Olr1340","Olr1342-ps","Olr1343","Olr1345","Olr1344","Olr1348-ps","Olr1346","Olr1349","Olr1347","Olr135","Olr1350","Olr1351","Olr1352","Olr1357-ps","Olr1354-ps","Olr1353","Olr1355","Olr1356","Olr1358","Olr1359-ps","Olr1360-ps","Olr136","Olr1363-ps","Olr1362","Olr1361","Olr1364","Olr1365","Olr1367-ps","Olr1366","Olr1368","Olr1369","Olr1371-ps","Olr137","Olr1370","Olr1372","Olr1373","Olr1374","Olr1377-ps","Olr1376","Olr1375","Olr1379-ps","Olr1378","Olr138-ps","Olr1380","Olr1381","Olr1383","Olr1384","Olr1382","Olr1385","Olr1386","Olr1387","Olr1388","Olr1389","Olr1390-ps","Olr139","Olr1391","Olr1392","Olr1393","Olr1394","Olr1395","Olr1396","Olr1397","Olr1398","Olr1399","Olr14","Olr1400","Olr140","Olr1402-ps","Olr1401","Olr1403-ps","Olr1404","Olr1405","Olr1406","Olr1407","Olr1408","Olr1409","Olr1411","Olr1410","Olr141","Olr1412-ps","Olr1414","Olr1413","Olr1415","Olr1416","Olr1419-ps","Olr1417","Olr1418","Olr142","Olr1420-ps","Olr1421","Olr1422","Olr1424","Olr1427-ps","Olr1423","Olr1425","Olr1428","Olr1429-ps","Olr1430-ps","Olr143","Olr1433","Olr1431","Olr1434","Olr1432","Olr1435","Olr1436","Olr1438-ps","Olr1437","Olr144","Olr1439","Olr1440","Olr1444-ps","Olr1442","Olr1443","Olr1446-ps","Olr1445","Olr1447-ps","Olr1448","Olr1451","Olr1449","Olr1450","Olr145","Olr1452","Olr1453","Olr1454","Olr1455","Olr1456","Olr1457","Olr146-ps","Olr1458","Olr1459","Olr1460","Olr1461","Olr1462","Olr1464-ps","Olr1467","Olr1466","Olr1463","Olr1468","Olr147-ps","Olr1469","Olr1470","Olr1472","Olr1471","Olr1473-ps","Olr1475","Olr1474","Olr1476-ps","Olr1477-ps","Olr1479","Olr1480-ps","Olr148","Olr1481","Olr1483-ps","Olr1482","Olr1485","Olr1484-ps","Olr1487-ps","Olr1489-ps","Olr1486","Olr1488","Olr1490","Olr149","Olr1491","Olr1492","Olr1495-ps","Olr1493","Olr1497-ps","Olr1496","Olr1498","Olr1499","Olr15-ps","Olr150","Olr1500","Olr1503-ps","Olr1501","Olr1505","Olr1504","Olr1507","Olr1508-ps","Olr1509","Olr151-ps","Olr1510-ps","Olr1511","Olr1512","Olr1513","Olr1514","Olr1515","Olr1516","Olr1518-ps","Olr1517","Olr1519","Olr152","Olr1520","Olr1521","Olr1522","Olr1524-ps","Olr1525","Olr1523","Olr1526-ps","Olr1527-ps","Olr1528","Olr1529","Olr153","Olr1531","Olr1530","Olr1532","Olr1533","Olr1534-ps","Olr1535","Olr1536","Olr1537","Olr1538","Olr1540","Olr1539","Olr1541","Olr154","Olr1542","Olr1543","Olr1544-ps","Olr1545","Olr1546","Olr1548","Olr1547","Olr1549","Olr155","Olr1550-ps","Olr1551","Olr1552-ps","Olr1554-ps","Olr1553","Olr1555","Olr1556-ps","Olr1557","Olr1558","Olr156","Olr1559","Olr1560","Olr1563","Olr1562","Olr1561","Olr1564","Olr1566","Olr1565","Olr1567","Olr157","Olr1570","Olr1568","Olr1569","Olr1571","Olr1572","Olr1573-ps","Olr1575-ps","Olr1574-ps","Olr1577-ps","Olr1578-ps","Olr1576","Olr1580-ps","Olr158","Olr1579","Olr1581","Olr1583","Olr1582","Olr1584","Olr1585","Olr1586-ps","Olr1588","Olr1587","Olr1589","Olr1590","Olr159","Olr1591","Olr1592","Olr1593","Olr1594-ps","Olr1595","Olr1598","Olr1599-ps","Olr1597","Olr1596","Olr16","Olr1600","Olr160","Olr1601","Olr1604-ps","Olr1603-ps","Olr1602","Olr1605","Olr1606","Olr1607","Olr1608","Olr1609","Olr161","Olr1610","Olr1612","Olr1611","Olr1614","Olr1615","Olr1616","Olr1618-ps","Olr1617","Olr1619","Olr1620","Olr162","Olr1621","Olr1623-ps","Olr1622","Olr1624","Olr1629","Olr1626","Olr1625","Olr1627","Olr1630","Olr163","Olr1631","Olr1632","Olr1633","Olr1634-ps","Olr1637","Olr1635","Olr1638","Olr1639","Olr164","Olr1640","Olr1641","Olr1642","Olr1643","Olr1644","Olr1645","Olr1646","Olr1647-ps","Olr1648-ps","Olr1649-ps","Olr1650-ps","Olr165","Olr1651-ps","Olr1652","Olr1656-ps","Olr1653","Olr1655-ps","Olr1654","Olr1659-ps","Olr1657","Olr1658","Olr166-ps","Olr1665-ps","Olr1664","Olr1660","Olr1662","Olr1666","Olr1667","Olr1669-ps","Olr1668","Olr1672-ps","Olr1671","Olr1670","Olr167","Olr1674-ps","Olr1676-ps","Olr1675","Olr1673","Olr1680","Olr1679","Olr168","Olr1678","Olr1681","Olr1682","Olr1684","Olr1683","Olr1685-ps","Olr1686","Olr1687","Olr1688","Olr1689","Olr1690","Olr1692","Olr1691","Olr1693","Olr1694","Olr1695","Olr1697","Olr1696","Olr1698-ps","Olr1699","Olr17","Olr170","Olr1703-ps","Olr1701","Olr1700","Olr1702","Olr1704","Olr1706-ps","Olr1705","Olr1707","Olr1709","Olr1708","Olr171","Olr1710","Olr1711-ps","Olr1712-ps","Olr1713-ps","Olr1714","Olr1717-ps","Olr1715-ps","Olr1716-ps","Olr1719-ps","Olr1718","Olr172","Olr1720","Olr1721-ps","Olr1723-ps","Olr1722","Olr1724","Olr1725-ps","Olr1726","Olr1728-ps","Olr1729","Olr173-ps","Olr1731","Olr1732-ps","Olr1733","Olr1730","Olr1734","Olr1735","Olr1736","Olr1737","Olr1741-ps","Olr1738","Olr174","Olr1739","Olr1740-ps","Olr1742","Olr1743","Olr1744","Olr1747-ps","Olr1746","Olr1749","Olr1748","Olr175","Olr1750","Olr1751","Olr1752-ps","Olr1753-ps","Olr1754-ps","Olr1756-ps","Olr1755-ps","Olr1757-ps","Olr1758-ps","Olr1759-ps","Olr1760-ps","Olr176","Olr1761-ps","Olr1762-ps","Olr1763-ps","Olr1764-ps","Olr1765","Olr1766","Olr1767","Olr1768","Olr1769-ps","Olr1770-ps","Olr177-ps","Olr1771-ps","Olr1772-ps","Olr1773-ps","Olr1774-ps","Olr1775-ps","Olr1776-ps","Olr1777-ps","Olr1778-ps","Olr1779-ps","Olr1780-ps","Olr178","Olr1781-ps","Olr1783-ps","Olr1782-ps","Olr1785-ps","Olr1784-ps","Olr1786-ps","Olr1787-ps","Olr1788-ps","Olr1790-ps","Olr1789-ps","Olr1791-ps","Olr1792-ps","Olr1793-ps","Olr179","Olr1795-ps","Olr1794-ps","Olr1796-ps","Olr1797-ps","Olr1798-ps","Olr1799-ps","Olr18-ps","Olr180","Olr1800-ps","Olr1802-ps","Olr1801-ps","Olr1803-ps","Olr1804-ps","Olr1805-ps","Olr1806-ps","Olr1807-ps","Olr1809-ps","Olr1808-ps","Olr1810-ps","Olr181","Olr1811-ps","Olr1812-ps","Olr1814-ps","Olr1813-ps","Olr1815-ps","Olr1816-ps","Olr1817-ps","Olr1818-ps","Olr1819-ps","Olr182-ps","Olr1820-ps","Olr1821-ps","Olr1822-ps","Olr1823-ps","Olr1824-ps","Olr1825-ps","Olr1826-ps","Olr1827-ps","Olr1828-ps","Olr1829-ps","Olr1830-ps","Olr183","Olr1831-ps","Olr1832-ps","Olr1833-ps","Olr1835-ps","Olr1834-ps","Olr1836-ps","Olr1837-ps","Olr1838-ps","Olr1839-ps","Olr1840-ps","Olr184","Olr1841-ps","Olr1842-ps","Olr1843-ps","Olr1844-ps","Olr1845","Olr1846-ps","Olr1849-ps","Olr1847-ps","Olr1848-ps","Olr1850-ps","Olr185","Olr1851-ps","Olr1852-ps","Olr1853-ps","Olr1855-ps","Olr1854-ps","Olr1856-ps","Olr1857-ps","Olr1858-ps","Olr1859-ps","Olr1860-ps","Olr186","Olr1861-ps","Olr1862-ps","Olr1863-ps","Olr1864-ps","Olr1865-ps","Olr1866-ps","Olr1868","Olr1869","Olr1870","Olr1867","Olr187-ps","Olr1872","Olr1873","Olr1874","Olr1876","Olr1875","Olr1878","Olr1877","Olr188","Olr19","Olr189","Olr190","Olr191-ps","Olr192","Olr193","Olr195-ps","Olr194","Olr196","Olr197","Olr198","Olr2-ps","Olr199","Olr1l","Olr20","Olr200","Olr201","Olr202","Olr203","Olr205","Olr204","Olr206","Olr207-ps","Olr208","Olr21-ps","Olr209","Olr210","Olr212-ps","Olr211","Olr214","Olr213","Olr215","Olr216-ps","Olr217","Olr218","Olr22-ps","Olr220","Olr219","Olr221","Olr222","Olr223","Olr225-ps","Olr224","Olr228-ps","Olr226","Olr227","Olr229","Olr230","Olr23","Olr231","Olr232","Olr236-ps","Olr233","Olr235","Olr234","Olr238-ps","Olr237","Olr239","Olr24","Olr243-ps","Olr241","Olr240","Olr242","Olr245","Olr244","Olr246","Olr247","Olr248-ps","Olr25","Olr250","Olr251","Olr254-ps","Olr252","Olr255","Olr256-ps","Olr257","Olr258-ps","Olr26-ps","Olr259","Olr260","Olr261-ps","Olr262","Olr265-ps","Olr263","Olr264","Olr266-ps","Olr267","Olr268","Olr269-ps","Olr27","Olr270","Olr271","Olr273-ps","Olr272","Olr274-ps","Olr276","Olr278","Olr279","Olr28-ps","Olr280-ps","Olr281","Olr282","Olr283","Olr284-ps","Olr285","Olr286","Olr287","Olr288","Olr29","Olr289","Olr290-ps","Olr293-ps","Olr292","Olr294-ps","Olr294","Olr295","Olr296-ps","Olr297","Olr298","Olr299","Olr3","Olr30","Olr301-ps","Olr300","Olr302","Olr303","Olr304","Olr305","Olr306","Olr307","Olr308","Olr309","Olr31-ps","Olr310","Olr312","Olr311","Olr313","Olr314-ps","Olr315","Olr317-ps","Olr318","Olr319","Olr32","Olr320-ps","Olr321","Olr322","Olr323","Olr324","Olr325","Olr326","Olr327","Olr328-ps","Olr329","Olr33-ps","Olr330","Olr331","Olr332","Olr333-ps","Olr334","Olr335-ps","Olr336","Olr337","Olr338","Olr339","Olr34","Olr340","Olr342-ps","Olr341","Olr343","Olr344","Olr346","Olr347","Olr348","Olr349","Olr35","Olr350-ps","Olr351-ps","Olr352","Olr353-ps","Olr354","Olr355-ps","Olr356-ps","Olr357","Olr359-ps","Olr358","Olr36","Olr360","Olr361","Olr362-ps","Olr366-ps","Olr363","Olr365","Olr367","Olr368-ps","Olr369-ps","Olr370-ps","Olr37","Olr371","Olr372","Olr373","Olr374","Olr375","Olr376","Olr377","Olr378","Olr38-ps","Olr379","Olr380","Olr381-ps","Olr382","Olr383","Olr384","Olr385","Olr386","Olr389-ps","Olr387","Olr391-ps","Olr39","Olr390","Olr393-ps","Olr394-ps","Olr392","Olr395","Olr396","Olr397","Olr398","Olr399","Olr4","Olr40","Olr400","Olr401","Olr402","Olr403","Olr404","Olr405-ps","Olr406","Olr407","Olr408","Olr409","Olr41","Olr410","Olr411","Olr412-ps","Olr413","Olr414","Olr415","Olr416","Olr417","Olr418","Olr42-ps","Olr419","Olr420","Olr421","Olr422","Olr423","Olr424","Olr425","Olr427","Olr429","Olr428","Olr43","Olr433-ps","Olr431-ps","Olr434","Olr435-ps","Olr436","Olr437","Olr437-ps","Olr438-ps","Olr439","Olr44","Olr440","Olr441","Olr442","Olr443","Olr444","Olr445","Olr446","Olr447","Olr449-ps","Olr448","Olr45","Olr452-ps","Olr450","Olr453","Olr454","Olr455","Olr456","Olr457-ps","Olr458","Olr459","Olr46","Olr460-ps","Olr461","Olr462","Olr463","Olr464","Olr465","Olr466","Olr467-ps","Olr468","Olr469","Olr47","Olr470","Olr471","Olr472","Olr473","Olr475","Olr476","Olr477","Olr478-ps","Olr479","Olr48","Olr480","Olr481","Olr482","Olr483","Olr484","Olr485","Olr487-ps","Olr486","Olr488","Olr489-ps","Olr49","Olr490","Olr491","Olr492-ps","Olr493","Olr494-ps","Olr495","Olr496","Olr497-ps","Olr498-ps","Olr5","Olr499","Olr50","Olr501-ps","Olr500","Olr503-ps","Olr502","Olr505","Olr506-ps","Olr507","Olr508","Olr509-ps","Olr510","Olr51","Olr511-ps","Olr512-ps","Olr513","Olr514","Olr515","Olr516","Olr517","Olr518","Olr519","Olr520","Olr521-ps","Olr523-ps","Olr524-ps","Olr522","Olr525-ps","Olr526","Olr527","Olr528","Olr529","Olr53","Olr530","Olr531","Olr532","Olr533","Olr534-ps","Olr536","Olr535","Olr537","Olr538-ps","Olr54-ps","Olr539","Olr540","Olr541","Olr542","Olr543-ps","Olr544","Olr545","Olr547-ps","Olr546","Olr548-ps","Olr549-ps","Olr55-ps","Olr551","Olr550","Olr552","Olr553-ps","Olr554","Olr555","Olr556","Olr558","Olr557","Olr559","Olr56","Olr560","Olr561","Olr562","Olr563","Olr564-ps","Olr565-ps","Olr567","Olr566","Olr568-ps","Olr569","Olr57","Olr570-ps","Olr571-ps","Olr573-ps","Olr572-ps","Olr574-ps","Olr576","Olr575","Olr577","Olr579-ps","Olr578","Olr58-ps","Olr580-ps","Olr581","Olr582","Olr583","Olr584","Olr585-ps","Olr586","Olr587","Olr588","Olr589-ps","Olr590","Olr591-ps","Olr59","Olr593-ps","Olr592","Olr594","Olr596","Olr595","Olr597","Olr598","Olr6","Olr600-ps","Olr60","Olr601","Olr603-ps","Olr602","Olr604","Olr605-ps","Olr606","Olr607","Olr608","Olr609","Olr61","Olr610","Olr611","Olr612-ps","Olr613","Olr614","Olr616-ps","Olr617-ps","Olr619","Olr62","Olr620-ps","Olr621","Olr622-ps","Olr624","Olr623","Olr625","Olr626-ps","Olr627-ps","Olr628-ps","Olr629","Olr63","Olr630","Olr632-ps","Olr631","Olr633","Olr634","Olr635","Olr636","Olr638-ps","Olr637","Olr639","Olr640","Olr641","Olr642-ps","Olr643-ps","Olr644-ps","Olr645-ps","Olr646","Olr647-ps","Olr648","Olr649","Olr650","Olr651","Olr653","Olr652","Olr654","Olr655","Olr657","Olr658","Olr66-ps","Olr659","Olr660","Olr661","Olr662","Olr663","Olr664","Olr665","Olr667-ps","Olr666","Olr668","Olr67","Olr669","Olr670","Olr671","Olr672","Olr673","Olr674","Olr676-ps","Olr675","Olr678","Olr677","Olr679","Olr680-ps","Olr68","Olr681","Olr682-ps","Olr683-ps","Olr684","Olr685-ps","Olr686","Olr687","Olr688-ps","Olr689","Olr69","Olr690","Olr691","Olr692-ps","Olr693","Olr694","Olr695","Olr696","Olr697","Olr698","Olr699-ps","Olr700-ps","Olr7","Olr70","Olr701","Olr703","Olr702","Olr704","Olr705","Olr706-ps","Olr707","Olr708-ps","Olr709","Olr71-ps","Olr710","Olr711","Olr712","Olr713","Olr714","Olr715","Olr716","Olr717","Olr718","Olr719-ps","Olr72","Olr720","Olr721","Olr722","Olr723-ps","Olr724","Olr726","Olr725","Olr727","Olr728","Olr729","Olr73-ps","Olr730-ps","Olr732-ps","Olr731","Olr734","Olr733","Olr735","Olr738-ps","Olr736","Olr737","Olr739-ps","Olr740-ps","Olr74","Olr741","Olr743-ps","Olr742","Olr744","Olr746-ps","Olr745","Olr747","Olr748","Olr749","Olr75","Olr750","Olr752","Olr753","Olr755-ps","Olr754","Olr756","Olr758","Olr757","Olr76-ps","Olr762-ps","Olr760","Olr764-ps","Olr763","Olr765","Olr766","Olr767","Olr768","Olr769","Olr77","Olr770","Olr771","Olr772","Olr773","Olr775","Olr774","Olr776","Olr777","Olr778","Olr779","Olr78","Olr780","Olr781","Olr782","Olr783","Olr784","Olr785","Olr786","Olr787-ps","Olr788","Olr789","Olr79","Olr790","Olr791","Olr792","Olr794-ps","Olr795","Olr798-ps","Olr796","Olr799","Olr80","Olr8","Olr801","Olr802","Olr803","Olr804","Olr805-ps","Olr806","Olr807","Olr808","Olr809","Olr81","Olr810","Olr811","Olr812","Olr813","Olr814-ps","Olr815-ps","Olr816","Olr818","Olr819","Olr82","Olr820","Olr821","Olr822-ps","Olr823","Olr824","Olr825","Olr826","Olr827","Olr829","Olr83","Olr828","Olr830","Olr831","Olr832","Olr834","Olr833","Olr835-ps","Olr836","Olr837","Olr838","Olr839","Olr84","Olr840","Olr843-ps","Olr841","Olr846-ps","Olr845","Olr844","Olr848","Olr847","Olr85","Olr850","Olr851","Olr852","Olr853","Olr854","Olr855","Olr856","Olr857","Olr858","Olr859","Olr86","Olr860","Olr862","Olr865","Olr867","Olr868","Olr866","Olr870-ps","Olr87","Olr869","Olr872-ps","Olr871-ps","Olr873-ps","Olr874-ps","Olr876","Olr875","Olr877","Olr878","Olr879","Olr88","Olr880","Olr881","Olr882-ps","Olr883","Olr884-ps","Olr885-ps","Olr886","Olr888-ps","Olr887-ps","Olr89","Olr889","Olr890-ps","Olr891-ps","Olr893-ps","Olr892","Olr894","Olr895-ps","Olr896","Olr897-ps","Olr899-ps","Olr898","Olr9-ps","Olr90-ps","Olr900-ps","Olr901","Olr902-ps","Olr904-ps","Olr903","Olr905","Olr906","Olr907","Olr908","Olr909-ps","Olr91","Olr912-ps","Olr910","Olr913-ps","Olr914-ps","Olr916","Olr918-ps","Olr919-ps","Olr917","Olr920","Olr92","Olr921","Olr923-ps","Olr922","Olr924-ps","Olr925-ps","Olr926-ps","Olr927","Olr928-ps","Olr929-ps","Olr930-ps","Olr93","Olr931","Olr932","Olr934-ps","Olr933-ps","Olr935-ps","Olr936","Olr937","Olr938-ps","Olr939-ps","Olr94","Olr940-ps","Olr941-ps","Olr942-ps","Olr943","Olr944-ps","Olr945-ps","Olr946-ps","Olr947","Olr948-ps","Olr949-ps","Olr95","Olr951","Olr950","Olr952","Olr953-ps","Olr954","Olr955-ps","Olr958-ps","Olr956","Olr957-ps","Olr959","Olr96","Olr960","Olr961-ps","Olr963-ps","Olr962","Olr964","Olr966-ps","Olr965-ps","Olr967-ps","Olr968-ps","Olr969-ps","Olr97","Olr970-ps","Olr971-ps","Olr972-ps","Olr973-ps","Olr975-ps","Olr974-ps","Olr976-ps","Olr977-ps","Olr978-ps","Olr979-ps","Olr98","Olr980-ps","Olr981-ps","Olr982","Olr983-ps","Olr985-ps","Olr984","Olr986-ps","Olr987","Olr988-ps","Olr989-ps","Olr99-ps","Olr990","Olr991","Olr992-ps","Olr993-ps","Olr994-ps","Olr995","Olr997-ps","Olr996","Olr998-ps","Olr999-ps","Oma1","Omd","Omg","Omp","Onecut1","Onecut2","Onecut3","Ooep","Oog3","Oog1","Oosp1","Oosp2","Opa3","Opalin","Opa1","Opcml","Oplah","Ophn1","Opn1mw","Opn1sw","Opn3","Opn4","Opn5","Oprd1","Oprk1","Oprl1","Oprpn","Optc","Or10ad1","Oprm1","Or51t1","Optn","Or7e24","Orai2","Orai1","Orai3","Oraov1","Orc1","Orc2","Orc3","Orc4","Orc5","Orc6","Orm1","Ormdl1","Ormdl2","Ormdl3","Os9","Osbp","Osbp2","Osbpl11","Osbpl10","Osbpl1a","Osbpl2","Osbpl3","Osbpl5","Osbpl6","Osbpl7","Osbpl8","Osbpl9","Oscar","Oscp1","Oser1","Osgep","Osgepl1","Osgin1","Osm","Osgin2","Osmr","Osr1","Osr2","Ost4","Ostc","Ostf1","Ostn","Ostm1","Otc","Otoa","Otof","Otogl","Otog","Otol1","Otop1","Otop2","Otop3","Otor","Otos","Otp","Otub1","Otub2","Otud1","Otud3","Otud4","Otud5","Otud6a","Otud6b","Otud7a","Otud7b","Otulin","Otx1","Otx2","Ovca2","Ovch2","Ovol2","Ovol1","Ovol3","Oxa1l","Oxct2a","Oxct1","Oxct2b","Oxgr1","Oxld1","Oxnad1","Oxsm","Oxr1","Oxsr1","P22k15","Oxt","Oxtr","P2rx1","P2rx3","P2rx2","P2rx4","P2rx5","P2rx6","P2ry10","P2ry1","P2rx7","P2ry13","P2ry12","P2ry14","P2ry2","P2ry4","P2ry6","P3h3","P3h2","P3h1","P3h4","P4ha1","P4ha2","P4ha3","P4hb","P4htm","p53-ps","Pabpc1-ps1","Pa2g4","Pabpc1","Pabpc1l2a","Pabpc1l","Pabpc2","Pabpc4l","Pabpc4","Pabpc5","Pabpc6","Pabpn1l","Pabpn1","Pacrg","Pacrgl","Pacs1","Pacs2","Pacsin1","Pacsin2","Pacsin3","Padi1","Padi3","Padi2","Padi6","Padi4","Paf1","Pafah1b3","Pafah1b2","Pafah1b1","Pag1","Pafah2","Pagr1","Paip1","Pah","Paics","Paip2","Paip2b","Paip2l1","Pak1ip1","Pak2","Pak1","Pak3","Pak4","Pak6","Pak7","Palb2","Pald1","Palld","Palldl1","Palm","Palm2","Palm3","Palmd","Pam16","Pamr1","Pam","Pan3","Pan2","Pank1","Pank3","Pank2","Pank4","Panx2","Panx1","Panx3","Paox","Papd4","Papd5","Papd7","Papln","Papolb","Papola","Papolg","Pappa1","Papss1","Papss2","Paqr3","Paqr4","Paqr5","Paqr6","Paqr7","Paqr8","Paqr9","Pard3b","Pard3","Pard6a","Pard6b","Pard6g","Parg","Parl","Park7","Parm1","Parn","Pappa2","Parp10","Parp11","Parp12","Parp16","Parp14","Parp1","Parp2","Parp3","Parp4","Parp6","Parp9","Parp8","Pars2","Parpbp","Parva","Parvg","Parvb","Pasd1","Pate-f","Pask","Pate3","Pate1","Pate2","Pate4","Patl2","Patl1","Patj","Patz1","Pax1","Pawr","Pax2","Pax3","Pax5","Pax4","Pax7","Pax9","Paxbp1","Pax8","Pax6","Paxip1","Pbdc1","Paxx","Pbld2","Pbk","Pbp-ps","Pbld1","Pbp2","Pbsn","Pbx1","Pbx3","Pbx2","Pbrm1","Pbxip1","Pbx4","Pcbd2","Pcbd1","Pcbp1","Pc","Pcbp2","Pcbp4","Pcbp3","Pccb","Pcdh1","Pcca","Pcdh10","Pcdh11x","Pcdh12","Pcdh15","Pcdh17","Pcdh18","Pcdh19","Pcdh20","Pcdh8","Pcdh9","Pcdha1","Pcdh7","Pcdha10","Pcdha2","Pcdha13","Pcdha11","Pcdha12","Pcdha3","Pcdha5","Pcdha7","Pcdha6","Pcdha8","Pcdha4","Pcdha9","Pcdhac1","Pcdhb1","Pcdhac2","Pcdhb10","Pcdhb11","Pcdhb14","Pcdhb12","Pcdhb15","Pcdhb16","Pcdhb17","Pcdhb18","Pcdhb2","Pcdhb19","Pcdhb20","Pcdhb21","Pcdhb2l","Pcdhb22","Pcdhb3","Pcdhb4","Pcdhb5","Pcdhb6","Pcdhb7","Pcdhb8","Pcdhb9","Pcdhga1","Pcdhga10","Pcdhga11","Pcdhga12","Pcdhga2","Pcdhga3","Pcdhga4","Pcdhga5","Pcdhga6","Pcdhga8","Pcdhgb2","Pcdhga7","Pcdhgb4","Pcdhga9","Pcdhgb6","Pcdhgb5","Pcdhgb8","Pcdhgb7","Pcdhgc3","Pcdhgc5","Pced1a","Pcgf1","Pcf11","Pced1b","Pcgf2","Pcgf3","Pcid2","Pcgf6","Pcgf5","Pcif1","Pclaf","Pck2","Pck1","Pclo","Pcm1","Pcmt1","Pcmtd1","Pcmtd2","Pcnp","Pcnt","Pcnx1","Pcna","Pcnx2","Pcnx3","Pcnx4","Pcolce","PCOLCE2","Pcp2","Pcp4l1","Pcp4","Pcsk1n","Pcsk1","Pcsk2","Pcsk4","Pcsk5","Pcsk6","Pcsk7","Pctp","Pcsk9","Pcyox1","Pcyox1l","Pcyt1b","Pcyt1a","Pdap1","Pcyt2","Pdc","Pdcd10","Pdcd1lg2","Pdcd1","Pdcd2","Pdcd11","Pdcd2l","Pdcd5","Pdcd6","Pdcd4","Pdcd6ip","Pdcd7","Pdcl2","Pdcl","Pdcl3","Pde10a","Pde12","Pde11a","Pde1a","Pde1b","Pde1c","Pde2a","Pde3b","Pde3a","Pde4a","Pde4b","Pde4c","Pde4dip","Pde5a","Pde6a","Pde4d","Pde6c","Pde6b","Pde6d","Pde6g","Pde6h","Pde7a","Pde7b","Pde8a","Pde8b","Pdf","Pde9a","Pdgfa","Pdgfc","Pdgfd","Pdgfb","Pdgfrl","Pdgfra","Pdha1l1","Pdha1","Pdha2","Pdgfrb","Pdhb","Pdia2","Pdhx","Pdia5","Pdia3","Pdia4","Pdik1l","Pdia6","Pdilt","Pdk1","Pdk3","Pdk2","Pdk4","Pdlim1","Pdlim2","Pdlim3","Pdlim4","Pdlim5","Pdlim7","Pdp1","Pdp2","Pdpk1","Pdpr","Pdrg1","Pdpn","Pds5a","Pdss1","Pds5b","Pdss2","Pdxdc1","Pdxp","Pdxk","Pdx1","Pdyn","Pdzd11","Pdzd3","Pdzd2","Pdzd4","Pdzd7","Pdzd8","Pdzd9","Pdzk1","Pdzk1ip1","Pdzrn4","Pdzrn3","Pea15","Pebp1-ps1","Peak1","Pear1","Pebp4","Pebp1","Pef1","Pecr","Peg10","Peg12","Pecam1","Peg3","Peli1-ps1","Peli1","Peli2","Peli3","Pelo","Pelp1","Pemt","Pepd","Penk","Per1","Perm1","Per3","Perp","Per2","Pes1","Pet100","Pex10","Pex11a","Pex1","Pex11g","Pex11b","Pex12","Pex13","Pex14","Pex16","Pex26","Pex19","Pex2","Pex3","Pex5","Pex6","Pex5l","Pex7","Pf4","Pfdn1","Pfdn4","Pfdn2","Pfas","Pfdn5","Pfdn6","Pfkfb1","Pfkfb3","Pfkfb4","Pfkfb2","Pfkl","Pfkm","Pfn2","Pfkp","Pfn3","Pfn1","Pfpl","Pfn4","Pga5","Pgam1","Pgam2","Pgap1","Pgam5","Pgbd1","Pgap3","Pgap2","Pgbd2","Pgbd5","Pgc","Pgghg","Pgd","Pggt1b","Pgf","Pgk2","Pgls","Pgk1","Pglyrp1","Pglyrp2","Pglyrp3","Pglyrp3b","Pglyrp4","Pgm1","Pgm2","Pgm2l1","Pgm5","Pgm3","Pgpep1","Pgp","Pgpep1l","Pgr15l","Pgy2","Pgs1","Pgrmc2","Pgr","Pgrmc1","Pgy4","Phactr4","Phactr3","Phactr1","Phactr2","Phb-ps1","Phax","Phc1","Phb","Phb2","Phc2","Phc3","Phf10","Phf1","Phex","Phf11","Phf11b","Phf13","Phf12","Phf19","Phf14","Phf2","Phf20","Phf20l1","Phf21b","Phf23","Phf21a","Phf24","Phf3","Phf5a","Phf6","Phf7","Phf8","Phgr1","Phgdh","Phip","Phka1","Phka2","Phkb","Phkg1","Phkg2","Phlda1","Phlda2","Phlda3","Phldb2","Phldb1","Phldb3","Phlpp2","Phospho1","Phlpp1","Phospho2","Phox2a","Phox2b","Phpt1","Phtf1","Phrf1","Phtf2","Phyh","Phyhd1","Phyhip","Phyhipl","Pi15","Phykpl","Pi16","Pi4k2a","Pi4k2b","Pi4kb","Pianp","Pi4ka","Pias1","Pias2","Pias3","Pibf1","Pias4","Picalm","Pid1","Pidd1","Pick1","Piezo1","Pifo","Pif1","Piga","Piezo2","Pigb","Pigbos1","Pigf","Pigc","Pigh","Pigg","Pigk","Pigm","Pigl","Pigo","Pign","Pigp","Pigq","Pigs","Pigr","Pigt","Pigu","Pigv","Pigw","Pigx","Pigy","Pigz","Pih1d2","Pih1d1","Pih1d3","Pik3ap1","Pik3c2a","Pik3c2b","Pik3c2g","Pik3c3","Pik3ca","Pik3cb","Pik3cd","Pik3ip1","Pik3cg","Pik3r2","Pik3r3","Pik3r4","Pik3r5","Pik3r1","Pik3r6","Pilra","Pilrb","Pikfyve","Pim2","Pim1","Pim3","Pimreg","Pin4","Pin1","Pinlyp","Pinx1","Pink1","Pip","Pip4k2b","Pip4k2a","Pip4k2c","Pip4p1","Pip4p2","Pip5k1a","Pip5kl1","Pip5k1b","Pip5k1c","Pipox","Pira2","Pir","Pirt","Pirb","Pithd1","Pisd","Pitpna","Pitpnb","Pitpnc1","Pitpnm1","Pitpnm2","Pitpnm3","Pitrm1","Pitx1","Pitx3","Pitx2","Piwil1","Piwil2","Piwil4","Pja1","Pja2","Pjvk","Pkd1l2","Pkd1l1","Pkd1","Pkd1l3","Pkd2l1","Pkd2","Pkd2l2","Pkdrej","Pkdcc","Pkhd1","Pkia","Pkhd1l1","Pkig","Pkib","Pkmyt1","Pklr","Pkm","Pkn1","Pkn2","Pknox1","Pkn3","Pknox2","Pkp1","Pkp2","Pkp3","Pla1a","Pkp4","Pla2g10","Pla2g12a","Pla2g12b","Pla2g15","Pla2g16","Pla2g1b","Pla2g2c","Pla2g2a","Pla2g2e","Pla2g2d","Pla2g2f","Pla2g3","Pla2g4b","Pla2g4cl1","Pla2g4c","Pla2g4a","Pla2g4d","Pla2g4f","Pla2g4e","Pla2g5","Pla2g7","Pla2r1","Plaa","Plac1","Pla2g6","Plac8","Plac8l1","Plac9","Plag1","Plagl1","Plagl2","Plb1","Plaur","Plbd1","Plat","Plau","Plbd2","Plcb3","Plcb2","Plcb1","Plcb4","Plcd1","Plcd3","Plcd4","Plce1","Plch1","Plcg2","Plch2","Plcg1","Plcxd1","Plcl1","Plcl2","Plcxd3","Plcxd2","Pld3","Plcz1","Pld4","Pld2","Pld6","Pld1","Pld5","Plek","Plek2","Plekha2","Plekha1","Plec","Plekha3","Plekha4","Plekha6","Plekha7","Plekha5","Plekha8","Plekhb1","Plekhb2","Plekhd1","Plekhf1","Plekhf2","Plekhg1","Plekhg2","Plekhg3","Plekhg4","Plekhg7","Plekhg5","Plekhg6","Plekhh1","Plekhh3","Plekhh2","Plekhm1","Plekhj1","Plekhm2","Plekhm3","Plekhn1","Plekho2","Plekho1","Plet1","Plekhs1","Plgrkt","Plin1","Plin3","Plin2","Plin4","Plg","Plin5","Plk3","Plk2","Plk4","Plk1","Plk5","Pllp","Plod2","Plod1","Pln","Plod3","Plp2","Plp1","Plpbp","Plpp1","Plpp2","Plpp3","Plpp4","Plpp5","Plpp6","Plpp7","Plppr1","Plppr2","Plppr5","Plppr3","Plppr4","Plrg1","Pls1","Plscr2","Pls3","Plscr1","Plscr4","Plscr3","Plscr5","Pltp","Plvap","Plxdc1","Plxdc2","Plxna1","Plxna2","Plxna4","Plxna3","Plxnb1","Plxnb2","Plxnc1","Plxnb3","Plxnd1","Pm20d1","Pm20d2","Pmaip1","Pmel","Pmch","Pmepa1","Pmf1","Pmfbp1","Pmm2","Pmm1","Pml","Pmp2","Pmp22","Pmpca","Pmpcb","Pms1","Pms2","Pmvk","Pnck","Pnisr","Pnldc1","Pnkp","Pnkd","Pnlip","Pnliprp1","Pnma1","Pnma2","Pnliprp2","Pnma3","Pnma5","Pnma8a","Pnma8b","Pno1-ps1","Pnmt","Pnn","Pno1","Pnoc","Pnp","Pnpla1","Pnpla2","Pnpla3","Pnpla4","Pnpla5","Pnpla6","Pnpla8","Pnpla7","Pnpo","Pnrc1","Pnpt1","Pnrc2","Poc1a","Poc1b","Podn","Poc5","Podnl1","Podxl2","Podxl","Pof1b","Pofut2","Pofut1","Pogk","Poglut1","Pogz","Pola2","Pola1","Polb","Pold1","Pold2","Pold3","Pold4","Poldip2","Poldip3","Pole2","Pole4","Pole","Pole3","Polh","Polg2","Poli","Polg","Polk","Poll","Polm","Poln","Polq","Polr1a","Polr1b","Polr1d","Polr1c","Polr1e","Polr2a","Polr2b","Polr2c","Polr2d","Polr2e","Polr2h-ps1","Polr2f","Polr2g","Polr2h","Polr2i","Polr2j","Polr2l","Polr2l-ps1","Polr2k","Polr3b","Polr2m","Polr3d","Polr3a","Polr3c","Polr3d-ps1","Polr3f","Polr3e","Polr3g","Polr3gl","Polr3h","Pom121l12","Polrmt","Polr3k","Pom121","Pom121l2","Pomgnt2","Pomgnt1","Pomk","Pomp","Pomc","Pomt2","Pomt1","Pon2","Pon3","Pon1","Pop1","Pop4","Pop5","Pop7","Popdc3","Popdc2","Porcn","Por","Postn","Pot1b","Pot1","Potec","Potef","Poteh","Poteg","Potem","Pou2af1","Pou1f1","Pou2f1","Pou2f3","Pou2f2","Pou3f1","Pou3f2","Pou3f3","Pou3f4","Pou4f1","Pou4f3","Pou4f2","Pou5f2","Pou6f2","Pou5f1","Pou6f1","Pp2d1","Ppa2","Ppa1","Ppan","Ppard","Ppargc1b","Ppara","Ppbp","Ppat","Ppcdc","Ppargc1a","Ppcs","Pparg","Ppdpf","Ppef1","Ppef2","Ppfia1","Ppfia2","Ppfia3","Ppfia4","Pphln1","Ppfibp1","Ppfibp2","Ppial4d","Ppia","Ppial4g","Ppic","Ppid-ps1","Ppib","Ppid","Ppidl1","Ppie","Ppig","Ppif","Ppih","Ppil1","Ppil2","Ppil4","Ppil3","Ppil6","Ppip5k1","Ppip5k2","Ppl","Ppm1a","Ppm1b","Ppm1d","Ppm1e","Ppm1g","Ppm1f","Ppm1j","Ppm1h","Ppm1m","Ppm1k","Ppm1l","Ppm1n","Ppme1","Ppp1cb-ps","Ppox","Ppp1ca","Ppp1cb","Ppp1r11","Ppp1r10","Ppp1cc","Ppp1r12b","Ppp1r12a","Ppp1r13b","Ppp1r12c","Ppp1r13l","Ppp1r14a","Ppp1r14b","Ppp1r14c","Ppp1r14d","Ppp1r15a","Ppp1r15b","Ppp1r16a","Ppp1r17","Ppp1r16b","Ppp1r18","Ppp1r1a","Ppp1r1c","Ppp1r1b","Ppp1r2","Ppp1r2-ps1","Ppp1r26","Ppp1r21","Ppp1r27","Ppp1r32","Ppp1r35","Ppp1r36","Ppp1r37","Ppp1r3a","Ppp1r3b","Ppp1r3c","Ppp1r3d","Ppp1r3f","Ppp1r3e","Ppp1r3g","Ppp1r42","Ppp1r8","Ppp1r7","Ppp1r9a","Ppp1r9b","Ppp2cb","Ppp2r1a","Ppp2ca","Ppp2r1b","Ppp2r2c","Ppp2r2a","Ppp2r2b","Ppp2r2d","Ppp2r3a","Ppp2r3b","Ppp2r3c","Ppp2r5a","Ppp2r5b","Ppp2r5c","Ppp2r5d","Ppp2r5e","Ppp3cb","Ppp3ca","Ppp3cc","Ppp3r1","Ppp3r2","Ppp4c","Ppp4r1","Ppp4r3c","Ppp4r3a","Ppp4r2","Ppp4r3b","Ppp4r4","Ppp6r1","Ppp6c","Ppp6r2","Ppp5c","Ppp6r3","Pprc1","Ppt1","Ppt2","Pptc7","Ppy","Ppwd1","Pqbp1","Pqlc1","Pqlc2","Pradc1","Pqlc3","Praf2","Prag1","Pram1","Pramef12","Prame","Pramef17","Pramef20","pramef20l","Pramef25","Pramef5","Pramef6","Pramef27","Pramef8","Pramel","Pramel7","Pramel3","Pramel6","Prap1","Prb1","Prb3","Prc1","Prcd","Prcc","Prcp","Prdm1","Prdm11","Prdm12","Prdm10","Prdm13","Prdm14","Prdm15","Prdm16","Prdm2","Prdm4","Prdm5","Prdm8","Prdm6","Prdm9","Prdx1l1","Prdx1","Prdx2","Prdx3","Prdx4","Prdx5","Prdx6","Prelid3a","Prelid1","Preb","Prelid2","Prelid3b","Prep","Prepl","Prelp","Prex1","Prex2","Prg3","Prg2","Prf1","Prg4","Prh1","Prickle2","Prickle1","Prickle4","Prickle3","Prim1","Prima1","Primpol","Prim2","Prkaa1","Prkab1","Prkab2","Prkaa2","Prkaca","Prkacb","Prkag2","Prkag3","Prkag1","Prkar1a-ps1","Prkar1a","Prkar1b","Prkar2a","Prkar2b","Prkcb","Prkca","Prkcg","Prkce","Prkcd","Prkcsh","Prkch","Prkci","Prkcq","Prkd2","Prkd1","Prkd3","Prkcz","Prkdc","Prkg2","Prkg1","Prkra","Prkrip1","Prkx","Prkn","Prl2a1","Prl2b1","Prl2c1","Prl3a1","Prl3b1","Prl3d1","Prl3c1","Prl","Prl3d2","Prl4a1","Prl5a1","Prl3d4","Prl5a2","Prl6a1","Prl7a3","Prl7a4","Prl7d1","Prl7b1","Prl8a3","Prl8a2","Prl8a4","Prl8a7","Prl8a5","Prl8a9","Prlh","Prlhr","Prm2","Prm1","Prm3","Prlr","Prmt2","Prmt1","Prmt3","Prmt5","Prmt6","Prmt7","Prmt8","Prmt9","Prnd","Prob1","Proca1","Prnp","Procr","Prodh1","Proc","Prodh2","Prok1","Prokr1","Prok2","Prokr2","Prom2","Prop1","Prorsd1","Prom1","Proser2","Pros1","Proser1","Proser3","Prox1","Prox2","Prp2","Prp15","Proz","Prp2l1","Prpf18","Prpf31","Prpf3","Prpf19","Prpf38a","Prpf38b","Prpf39","Prpf4","Prpf40a","Prpf40b","Prpf4b","Prpf6","Prpf8","Prpmp5","Prps1l1","Prph","Prps1","Prph2","Prps2","Prpsap1","Prpsap2","Prr11","Prr13","Prr14","Prr12","Prr15","Prr14l","Prr15l","Prr16","Prr18","Prr20e","Prr21","Prr19","Prr23d2","Prr23a","Prr22","Prr29","Prr27","Prr30","Prr32","Prr34","Prr33","Prr3","Prr35","Prr36","Prr7","Prr4","Prr5","Prr5l","Prr9","Prrc1","Prrc2a","Prrc2c","Prrc2b","Prrg1","Prrg2","Prrg3","Prrg4","Prrt1b","Prrt1","Prrt3","Prrt2","Prrt4","Prrx2","Prrx1","Prss1","Prss16","Prss12","Prss21","Prss2","Prss23","Prss27","Prss22","Prss29","Prss3","Prss30","Prss32","Prss33","Prss34","Prss35","Prss36","Prss37","Prss38","Prss39","Prss3b","Prss42","Prss40","Prss41","Prss44","Prss45","Prss46","Prss47","Prss48","Prss50","Prss53","Prss54","Prss55","Prss56","Prss57","Prss58","Prtfdc1","Prss8","Prtn3","Prune1","Prtg","Prune2","Prx","Psapl1","Psca","Psat1","Psap","Psd2","Psd","Psd4","Psd3","Psenen","Psg16","Psg29","Psg19","Psen2","Psen1","Psgb1","Pskh1","Psma1","Psip1","Psma2","Psma3l","Psma3","Psma4","Psma5","Psma6","Psma8","Psma7","Psmb1","Psmb11","Psmb10","Psmb2","Psmb3","Psmb4","Psmb5","Psmb6","Psmb7","Psmb8","Psmc1","Psmc2","Psmb9","Psmc3ip","Psmc3","Psmc4","Psmc6","Psmd10","Psmc5","Psmd1","Psmd11","Psmd12","Psmd13","Psmd14","Psmd2","Psmd3","Psmd4","Psmd5","Psmd6","Psmd7","Psmd8","Psme1-ps1","Psmd9","Psme1","Psme2","Psmf1","Psme3","Psmg1","Psme4","Psmg3","Psmg2","Psmg4","Psors1c2","Pspc1","Pspn","Psph","Psrc1","Pstpip1","Psx1","Pstk","Pstpip2","Ptar1","Ptbp2","Ptafr","Ptcd1","Ptbp1","Ptcd2","Ptbp3","Ptcd3","Ptchd1","Ptchd3","Ptch2","Ptchd4","Ptcra","Ptch1","Ptdss1","Ptdss2","Pter","Ptf1a","Ptgdr","Ptgdr2","Ptgdrl","Ptger1","Ptgds","Ptger2","Ptges2","Pten","Ptges","Ptger4","Ptger3","Ptges3l","Ptges3","Ptges3l1","Ptgir","Ptgfrn","Ptgfr","Ptgr1","Ptgr2","Ptgis","Pth2","Ptgs1","Pth2r","Pth1r","Pthlh","Pth","Ptk6","Ptk7","Ptma","Ptk2","Ptms","Ptn","Ptk2b","Ptov1","Ptp4a2","Ptgs2","Ptp4a1","Ptp4a3","Ptpa","Ptpdc1","Ptpmt1","Ptpn12","Ptpn1","Ptpn13","Ptpn14","Ptpn18","Ptpn11","Ptpn2","Ptpn20","Ptpn21","Ptpn23","Ptpn22","Ptpn3","Ptpn4","Ptpn5","Ptpn6","Ptpn7","Ptpn9","Ptpra","Ptprcap","Ptprb","Ptpre","Ptprc","Ptprd","Ptprf","Ptprg","Ptprh","Ptprj","Ptprk","Ptprm","Ptprn","Ptprn2","Ptpro","Ptprq","Ptprr","Ptprs","Ptprt","Ptpru","Ptprv","Ptprz1","Ptrh1","Ptrh2","Ptrhd1","Pts","Pttg1","Pttg1ip","Ptx3","Ptx4","Pudp","Puf60","Pum1","Pum2","Pum3","Pura","Purb","Purg","Pus1","Pus10","Pus3","Pus7","Pus7l","Pusl1","Pvalb","PVR","Pvrig","Pvt1","Pwp1","Pwp2","Pwwp2a","Pwwp2b","Pxdc1","Pxdn","Pxk","Pxmp2","Pxmp4","Pxn","Pxt1","Pxylp1","Pycard","Pycr1","Pycr2","Pycr3","Pygb","Pygl","Pygm","Pygo1","Pygo2","Pym1","Pyroxd1","Pyroxd2","Pyurf","Pyy","Pzp","Qars","Qdpr","Qk","Qki","Qpct","Qpctl","Qprt","Qrfp","Qrfpr","Qrich1","Qrich2","Qrsl1","Qser1","Qsox1","Qsox2","Qtrt1","Qtrt2","R3hcc1","R3hcc1l","R3hdm1","R3hdm2","R3hdm4","R3hdml","Rab1-ps1","Rab10","Rab11a","Rab11b","Rab11fip1","Rab11fip2","Rab11fip3","Rab11fip4","Rab11fip5","Rab12","Rab13","Rab14","Rab15","Rab17","Rab18","Rab19","Rab1a","Rab1b","Rab1b-ps1","Rab20","Rab21","Rab22a","Rab23","Rab24","Rab25","Rab26","Rab27a","Rab27b","Rab28","Rab29","Rab2a","Rab2b","Rab30","Rab31","Rab32","Rab33a","Rab33b","Rab34","Rab35","Rab36","Rab37","Rab38","Rab39a","Rab3a","Rab3b","Rab3c","Rab3d","Rab3gap1","Rab3gap2","Rab3il1","Rab3ip","Rab40b","Rab40c","Rab42","Rab43","Rab44","Rab4a","Rab4b","Rab5a","Rab5al1","Rab5b","Rab5c","Rab6a","Rab6b","Rab7a","Rab7b","Rab8a","Rab8b","Rab9a","Rab9b","Rabac1","Rabep1","Rabep2","Rabepk","Rabgap1","Rabgap1l","Rabgef1","Rabggta","Rabggta-ps1","Rabggtb","Rabif","Rabl2","Rabl3","Rabl6","Rac1","Rac2","Rac3","Racgap1","Rack1","Rad1","Rad17","Rad18","Rad21","Rad21l1","Rad23a","Rad23b","Rad50","Rad51","Rad51ap1","Rad51ap2","Rad51b","Rad51c","Rad51d","Rad52","Rad54b","Rad54l","Rad54l2","Rad9a","Rad9b","Radil","Rae1","Raet1c","Raet1d","Raet1e","Raet1l","Raf1","Rag1","Rag2","Rai1","Rai14","Rai2","Rala","Ralb","Ralbp1","Ralgapa1","Ralgapa2","Ralgapb","Ralgds","Ralgps1","Ralgps2","Raly","Ralyl","Ramp1","Ramp2","Ramp3","Ran","Ranbp1","Ranbp10","Ranbp17","Ranbp2","Ranbp3","Ranbp3l","Ranbp6","Ranbp9","Rangap1","Rangrf","Rap1a","Rap1b","Rap1gap","Rap1gap2","Rap1gds1","Rap2a","Rap2b","Rap2c","Rapgef1","Rapgef2","Rapgef3","Rapgef4","Rapgef5","Rapgef6","Rapgefl1","Raph1","Rapsn","Rara","Rarb","Rarg","Rarres1","Rarres2","Rars","Rars2","Rasa1","Rasa2","Rasa3","Rasa4","Rasal1","Rasal2","Rasal3","Rasd1","Rasd2","Rasef","Rasgef1a","Rasgef1b","Rasgef1c","Rasgrf1","Rasgrf2","Rasgrp1","Rasgrp2","Rasgrp3","Rasgrp4","Rasip1","Rasl10a","Rasl10b","Rasl11a","Rasl11b","Rasl12","Rasl2-9","Rassf1","Rassf10","Rassf2","Rassf3","Rassf4","Rassf5","Rassf6","Rassf7","Rassf8","Rassf9","RatNP-3b","Raver1","Raver2","Rax","Rb1","Rb1cc1","Rbak","Rbbp4","Rbbp5","Rbbp6","Rbbp7","Rbbp8","Rbbp8nl","Rbbp9","Rbck1","Rbfa","Rbfox1","Rbfox2","Rbfox3","Rbks","Rbl1","Rbl2","Rbm10","Rbm11","Rbm12","Rbm12b","Rbm14","Rbm15","Rbm15b","Rbm17","Rbm18","Rbm19","Rbm20","Rbm22","Rbm24","Rbm25","Rbm25l1","Rbm26","Rbm27","Rbm28","Rbm3","Rbm31y","Rbm33","Rbm34","Rbm38","Rbm39","Rbm4","Rbm41","Rbm42","Rbm43","Rbm44","Rbm45","Rbm46","Rbm47","Rbm48","Rbm4b","Rbm5","Rbm6","Rbm7","Rbm8a","Rbms1","Rbms2","Rbms3","Rbmx","Rbmx2","Rbmxl1","Rbmxl1b","Rbmxl2","Rbmy1j","Rbp1","Rbp2","Rbp3","Rbp4","Rbp7","Rbpj","Rbpjl","Rbpjl2","Rbpms","Rbpms2","Rbsn","Rbx1","Rc3h1","Rc3h2","Rcan1","Rcan2","Rcan3","Rcbtb1","Rcbtb2","Rcc1","Rcc1l","Rcc2","Rccd1","Rce1","Rchy1","Rcl1","Rcn1","Rcn2","Rcn3","Rcor1","Rcor2","Rcor2l1","Rcor3","Rcrg1-ps1","Rcrg1-ps10","Rcrg1-ps11","Rcrg1-ps12","Rcrg1-ps13","Rcrg1-ps14","Rcrg1-ps15","Rcrg1-ps16","Rcrg1-ps17","Rcrg1-ps18","Rcrg1-ps19","Rcrg1-ps2","Rcrg1-ps20","Rcrg1-ps21","Rcrg1-ps22","Rcrg1-ps23","Rcrg1-ps24","Rcrg1-ps25","Rcrg1-ps26","Rcrg1-ps27","Rcrg1-ps28","Rcrg1-ps29","Rcrg1-ps3","Rcrg1-ps30","Rcrg1-ps31","Rcrg1-ps32","Rcrg1-ps33","Rcrg1-ps34","Rcrg1-ps35","Rcrg1-ps36","Rcrg1-ps37","Rcrg1-ps38","Rcrg1-ps39","Rcrg1-ps4","Rcrg1-ps40","Rcrg1-ps5","Rcrg1-ps6","Rcrg1-ps7","Rcrg1-ps8","Rcrg1-ps9","Rcrg2-ps1","Rcrg2-ps2","Rcrg2-ps3","Rcrg2-ps4","Rcrg2-ps5","Rcrg2-ps6","Rcsd1","Rcvrn","Rd3","Rd3l","Rdh10","Rdh11","Rdh12","Rdh13","Rdh14","Rdh16","Rdh5","Rdh7","Rdh8","Rdm1","Rdx","Rec114","Rec8","Reck","Recql","Recql4","Recql5","Reep1","Reep2","Reep3","Reep4","Reep5","Reep6","Reg1a","Reg3a","Reg3b","Reg3g","Reg4","Rel","Rela","Relb","Rell1","Rell2","Reln","Relt","Rem1","Rem2","Ren","Renbp","Rep15","Repin1","Reps1","Reps2","Rer1","Rere","Rerg","Rergl","Resp18","Rest","Ret","Retn","Retnla","Retnlb","Retnlg","Retreg1","Retreg2","Retreg3","Retsat","Rev1","Rev3l","Rex1bd","Rex2","Rexo1","Rexo1l1-ps1","Rexo2","Rexo4","Rexo5","Rfc1","Rfc2","Rfc3","Rfc4","Rfc5","Rfesd","Rffl","Rfk","Rflna","Rflnb","Rfng","Rfpl4a","Rfpl4b","Rft1","Rftn1","Rftn2","Rfwd2","Rfwd3","Rfx1","Rfx2","Rfx3","Rfx4","Rfx5","Rfx6","Rfx7","Rfx8","Rfxank","Rfxap","Rfxapl1","Rgcc","RGD1302996","RGD1303003","RGD1304554","RGD1304567","RGD1304587","RGD1304622","RGD1304624","RGD1304694","RGD1304728","RGD1304745","RGD1304770","RGD1304810","RGD1304870","RGD1304884","RGD1304963","RGD1305014","RGD1305089","RGD1305110","RGD1305178","RGD1305184","RGD1305207","RGD1305298","RGD1305347","RGD1305350","RGD1305455","RGD1305464","RGD1305645","RGD1305704","RGD1305713","RGD1305733","RGD1305807","RGD1305938","RGD1306063","RGD1306072","RGD1306148","RGD1306186","RGD1306195","RGD1306227","RGD1306233","RGD1306271","RGD1306282","RGD1306441","RGD1306474","RGD1306484","RGD1306502","RGD1306519","RGD1306556","RGD1306704","RGD1306746","RGD1306750","RGD1306782","RGD1306941","RGD1306954","RGD1306995","RGD1307100","RGD1307182","RGD1307235","RGD1307443","RGD1307461","RGD1307537","RGD1307554","RGD1307595","RGD1307603","RGD1307621","RGD1307752","RGD1307782","RGD1307916","RGD1307929","RGD1307947","RGD1308005","RGD1308065","RGD1308106","RGD1308117","RGD1308134","RGD1308143","RGD1308147","RGD1308195","RGD1308428","RGD1308430","RGD1308544","RGD1308564","RGD1308601","RGD1308706","RGD1308742","RGD1308750","RGD1308751","RGD1308775","RGD1308878","RGD1309028","RGD1309036","RGD1309049","RGD1309079","RGD1309104","RGD1309106","RGD1309110","RGD1309139","RGD1309170","RGD1309291","RGD1309310","RGD1309350","RGD1309362","RGD1309489","RGD1309534","RGD1309540","RGD1309594","RGD1309621","RGD1309651","RGD1309730","RGD1309748","RGD1309779","RGD1309808","RGD1309870","RGD1309998","RGD1310081","RGD1310110","RGD1310127","RGD1310166","RGD1310209","RGD1310212","RGD1310352","RGD1310429","RGD1310495","RGD1310507","RGD1310553","RGD1310587","RGD1310602","RGD1310717","RGD1310819","RGD1310852","RGD1310935","RGD1310951","RGD1311084","RGD1311164","RGD1311251","RGD1311300","RGD1311318","RGD1311343","RGD1311345","RGD1311447","RGD1311517","RGD1311575","RGD1311595","RGD1311703","RGD1311739","RGD1311744","RGD1311745","RGD1311847","RGD1311892","RGD1311899","RGD1311933","RGD1311946","RGD1312005","RGD1359108","RGD1359127","RGD1359158","RGD1359290","RGD1359334","RGD1359449","RGD1359508","RGD1359634","RGD1559424","RGD1559441","RGD1559458","RGD1559459","RGD1559460","RGD1559461","RGD1559464","RGD1559482","RGD1559499","RGD1559508","RGD1559512","RGD1559513","RGD1559516","RGD1559519","RGD1559532","RGD1559534","RGD1559536","RGD1559545","RGD1559573","RGD1559574","RGD1559575","RGD1559578","RGD1559579","RGD1559588","RGD1559600","RGD1559602","RGD1559607","RGD1559622","RGD1559629","RGD1559639","RGD1559644","RGD1559647","RGD1559654","RGD1559662","RGD1559667","RGD1559669","RGD1559677","RGD1559679","RGD1559683","RGD1559707","RGD1559708","RGD1559710","RGD1559714","RGD1559724","RGD1559726","RGD1559731","RGD1559743","RGD1559747","RGD1559752","RGD1559769","RGD1559772","RGD1559781","RGD1559786","RGD1559795","RGD1559804","RGD1559806","RGD1559808","RGD1559810","RGD1559821","RGD1559833","RGD1559839","RGD1559854","RGD1559859","RGD1559877","RGD1559887","RGD1559890","RGD1559891","RGD1559892","RGD1559896","RGD1559902","RGD1559903","RGD1559908","RGD1559909","RGD1559912","RGD1559916","RGD1559921","RGD1559924","RGD1559935","RGD1559938","RGD1559940","RGD1559948","RGD1559950","RGD1559951","RGD1559955","RGD1559960","RGD1559962","RGD1559965","RGD1559967","RGD1559970","RGD1559972","RGD1559982","RGD1559995","RGD1559999","RGD1560010","RGD1560015","RGD1560017","RGD1560028","RGD1560034","RGD1560065","RGD1560069","RGD1560073","RGD1560076","RGD1560088","RGD1560096","RGD1560099","RGD1560105","RGD1560108","RGD1560109","RGD1560110","RGD1560112","RGD1560119","RGD1560124","RGD1560146","RGD1560162","RGD1560163","RGD1560171","RGD1560180","RGD1560186","RGD1560203","RGD1560207","RGD1560208","RGD1560212","RGD1560225","RGD1560227","RGD1560231","RGD1560234","RGD1560242","RGD1560262","RGD1560263","RGD1560281","RGD1560288","RGD1560289","RGD1560291","RGD1560302","RGD1560303","RGD1560314","RGD1560324","RGD1560325","RGD1560330","RGD1560333","RGD1560337","RGD1560341","RGD1560348","RGD1560349","RGD1560350","RGD1560353","RGD1560357","RGD1560382","RGD1560394","RGD1560398","RGD1560402","RGD1560408","RGD1560412","RGD1560429","RGD1560431","RGD1560436","RGD1560444","RGD1560455","RGD1560462","RGD1560464","RGD1560474","RGD1560482","RGD1560484","RGD1560492","RGD1560510","RGD1560512","RGD1560513","RGD1560523","RGD1560527","RGD1560533","RGD1560539","RGD1560544","RGD1560554","RGD1560559","RGD1560568","RGD1560585","RGD1560590","RGD1560608","RGD1560617","RGD1560623","RGD1560633","RGD1560640","RGD1560648","RGD1560661","RGD1560683","RGD1560687","RGD1560689","RGD1560697","RGD1560700","RGD1560703","RGD1560718","RGD1560723","RGD1560729","RGD1560730","RGD1560738","RGD1560771","RGD1560775","RGD1560784","RGD1560789","RGD1560795","RGD1560797","RGD1560801","RGD1560806","RGD1560813","RGD1560815","RGD1560821","RGD1560824","RGD1560826","RGD1560831","RGD1560842","RGD1560844","RGD1560854","RGD1560857","RGD1560860","RGD1560872","RGD1560883","RGD1560892","RGD1560901","RGD1560917","RGD1560925","RGD1560927","RGD1560931","RGD1560936","RGD1560954","RGD1560958","RGD1560961","RGD1560975","RGD1560979","RGD1560983","RGD1560986","RGD1560987","RGD1561017","RGD1561024","RGD1561034","RGD1561050","RGD1561060","RGD1561079","RGD1561102","RGD1561106","RGD1561111","RGD1561113","RGD1561114","RGD1561118","RGD1561134","RGD1561137","RGD1561143","RGD1561145","RGD1561148","RGD1561149","RGD1561150","RGD1561151","RGD1561154","RGD1561157","RGD1561161","RGD1561185","RGD1561192","RGD1561195","RGD1561206","RGD1561212","RGD1561215","RGD1561219","RGD1561224","RGD1561226","RGD1561230","RGD1561231","RGD1561232","RGD1561236","RGD1561246","RGD1561251","RGD1561252","RGD1561276","RGD1561277","RGD1561286","RGD1561288","RGD1561305","RGD1561306","RGD1561310","RGD1561317","RGD1561318","RGD1561323","RGD1561327","RGD1561333","RGD1561341","RGD1561381","RGD1561382","RGD1561395","RGD1561410","RGD1561413","RGD1561415","RGD1561426","RGD1561430","RGD1561440","RGD1561442","RGD1561445","RGD1561463","RGD1561444","RGD1561453","RGD1561465","RGD1561497","RGD1561481","RGD1561508","RGD1561520","RGD1561517","RGD1561525","RGD1561551","RGD1561552","RGD1561558","RGD1561572","RGD1561557","RGD1561582","RGD1561560","RGD1561575","RGD1561585","RGD1561589","RGD1561590","RGD1561594","RGD1561627","RGD1561620","RGD1561618","RGD1561635","RGD1561636","RGD1561658","RGD1561661","RGD1561689","RGD1561648","RGD1561671","RGD1561662","RGD1561684","RGD1561694","RGD1561667","RGD1561709","RGD1561704","RGD1561722","RGD1561715","RGD1561699","RGD1561729","RGD1561736","RGD1561754","RGD1561738","RGD1561766","RGD1561755","RGD1561767","RGD1561730","RGD1561771","RGD1561777","RGD1561780","RGD1561787","RGD1561788","RGD1561803","RGD1561795","RGD1561808","RGD1561796","RGD1561812","RGD1561821","RGD1561827","RGD1561843","RGD1561847","RGD1561853","RGD1561860","RGD1561849","RGD1561871","RGD1561877","RGD1561870","RGD1561886","RGD1561890","RGD1561897","RGD1561908","RGD1561906","RGD1561911","RGD1561919","RGD1561916","RGD1561935","RGD1561944","RGD1561958","RGD1561986","RGD1561977","RGD1561987","RGD1562020","RGD1562011","RGD1562024","RGD1562033","RGD1562029","RGD1562035","RGD1561998","RGD1562036","RGD1562055","RGD1562039","RGD1562066","RGD1562067","RGD1562068","RGD1562073","RGD1562080","RGD1562088","RGD1562090","RGD1562104","RGD1562118","RGD1562134","RGD1562107","RGD1562114","RGD1562139","RGD1562136","RGD1562140","RGD1562143","RGD1562146","RGD1562152","RGD1562156","RGD1562171","RGD1562178","RGD1562187","RGD1562196","RGD1562218","RGD1562259","RGD1562229","RGD1562266","RGD1562265","RGD1562281","RGD1562272","RGD1562289","RGD1562299","RGD1562290","RGD1562306","RGD1562355","RGD1562310","RGD1562339","RGD1562319","RGD1562387","RGD1562381","RGD1562394","RGD1562378","RGD1562399","RGD1562400","RGD1562402","RGD1562392","RGD1562404","RGD1562415","RGD1562420","RGD1562431","RGD1562423","RGD1562451","RGD1562433","RGD1562461","RGD1562458","RGD1562460","RGD1562462","RGD1562465","RGD1562485","RGD1562494","RGD1562492","RGD1562507","RGD1562508","RGD1562517","RGD1562521","RGD1562515","RGD1562524","RGD1562525","RGD1562545","RGD1562542","RGD1562532","RGD1562558","RGD1562569","RGD1562577","RGD1562598","RGD1562603","RGD1562613","RGD1562614","RGD1562636","RGD1562608","RGD1562618","RGD1562625","RGD1562641","RGD1562638","RGD1562650","RGD1562652","RGD1562690","RGD1562667","RGD1562683","RGD1562700","RGD1562699","RGD1562660","RGD1562704","RGD1562725","RGD1562739","RGD1562753","RGD1562726","RGD1562747","RGD1562755","RGD1562771","RGD1562758","RGD1562774","RGD1562775","RGD1562781","RGD1562776","RGD1562794","RGD1562801","RGD1562811","RGD1562818","RGD1562819","RGD1562820","RGD1562833","RGD1562844","RGD1562835","RGD1562851","RGD1562847","RGD1562863","RGD1562871","RGD1562890","RGD1562885","RGD1562914","RGD1562917","RGD1562936","RGD1562937","RGD1562932","RGD1562960","RGD1562980","RGD1562992","RGD1563029","RGD1562987","RGD1563034","RGD1563036","RGD1563055","RGD1563049","RGD1563057","RGD1563056","RGD1563060","RGD1563066","RGD1563097","RGD1563072","RGD1563100","RGD1563099","RGD1563124","RGD1563104","RGD1563134","RGD1563135","RGD1563145","RGD1563136","RGD1563157","RGD1563150","RGD1563159","RGD1563200","RGD1563217","RGD1563222","RGD1563232","RGD1563242","RGD1563234","RGD1563231","RGD1563270","RGD1563285","RGD1563263","RGD1563294","RGD1563295","RGD1563300","RGD1563301","RGD1563302","RGD1563314","RGD1563322","RGD1563330","RGD1563307","RGD1563323","RGD1563340","RGD1563334","RGD1563346","RGD1563351","RGD1563352","RGD1563349","RGD1563356","RGD1563375","RGD1563365","RGD1563354","RGD1563378","RGD1563392","RGD1563410","RGD1563402","RGD1563412","RGD1563405","RGD1563400","RGD1563445","RGD1563441","RGD1563451","RGD1563459","RGD1563486","RGD1563483","RGD1563482","RGD1563489","RGD1563492","RGD1563496","RGD1563502","RGD1563503","RGD1563527","RGD1563535","RGD1563537","RGD1563545","RGD1563546","RGD1563551","RGD1563554","RGD1563563","RGD1563570","RGD1563581","RGD1563584","RGD1563562","RGD1563578","RGD1563591","RGD1563590","RGD1563601","RGD1563604","RGD1563606","RGD1563613","RGD1563636","RGD1563620","RGD1563656","RGD1563667","RGD1563668","RGD1563679","RGD1563709","RGD1563690","RGD1563705","RGD1563680","RGD1563692","RGD1563725","RGD1563716","RGD1563743","RGD1563738","RGD1563739","RGD1563714","RGD1563747","RGD1563749","RGD1563780","RGD1563757","RGD1563812","RGD1563835","RGD1563834","RGD1563818","RGD1563815","RGD1563847","RGD1563850","RGD1563861","RGD1563903","RGD1563894","RGD1563905","RGD1563931","RGD1563888","RGD1563917","RGD1563937","RGD1563947","RGD1563956","RGD1563943","RGD1563941","RGD1563958","RGD1563963","RGD1563962","RGD1563991","RGD1563978","RGD1564021","RGD1564026","RGD1563986","RGD1564031","RGD1564040","RGD1564053","RGD1564062","RGD1564095","RGD1564100","RGD1564086","RGD1564097","RGD1564125","RGD1564126","RGD1564131","RGD1564133","RGD1564129","RGD1564138","RGD1564159","RGD1564148","RGD1564149","RGD1564162","RGD1564166","RGD1564172","RGD1564167","RGD1564177","RGD1564179","RGD1564193","RGD1564171","RGD1564225","RGD1564236","RGD1564240","RGD1564243","RGD1564277","RGD1564268","RGD1564275","RGD1564247","RGD1564278","RGD1564284","RGD1564292","RGD1564301","RGD1564318","RGD1564306","RGD1564308","RGD1564313","RGD1564320","RGD1564319","RGD1564343","RGD1564325","RGD1564324","RGD1564366","RGD1564347","RGD1564378","RGD1564382","RGD1564386","RGD1564390","RGD1564380","RGD1564392","RGD1564405","RGD1564416","RGD1564400","RGD1564409","RGD1564433","RGD1564425","RGD1564447","RGD1564477","RGD1564463","RGD1564492","RGD1564482","RGD1564480","RGD1564512","RGD1564513","RGD1564515","RGD1564536","RGD1564534","RGD1564571","RGD1564574","RGD1564548","RGD1564541","RGD1564578","RGD1564580","RGD1564581","RGD1564583","RGD1564585","RGD1564587","RGD1564597","RGD1564606","RGD1564599","RGD1564613","RGD1564627","RGD1564617","RGD1564614","RGD1564637","RGD1564645","RGD1564649","RGD1564651","RGD1564650","RGD1564657","RGD1564664","RGD1564665","RGD1564698","RGD1564696","RGD1564699","RGD1564702","RGD1564712","RGD1564730","RGD1564748","RGD1564744","RGD1564781","RGD1564764","RGD1564783","RGD1564770","RGD1564786","RGD1564795","RGD1564798","RGD1564800","RGD1564814","RGD1564801","RGD1564807","RGD1564804","RGD1564836","RGD1564827","RGD1564839","RGD1564845","RGD1564849","RGD1564855","RGD1564854","RGD1564865","RGD1564866","RGD1564883","RGD1564885","RGD1564915","RGD1564897","RGD1564899","RGD1564887","RGD1564933","RGD1564920","RGD1564937","RGD1564941","RGD1564956","RGD1564963","RGD1564958","RGD1564972","RGD1564955","RGD1564974","RGD1564981","RGD1564999","RGD1565032","RGD1565010","RGD1565017","RGD1565046","RGD1565047","RGD1565033","RGD1565048","RGD1565054","RGD1565056","RGD1565058","RGD1565063","RGD1565057","RGD1565066","RGD1565059","RGD1565083","RGD1565086","RGD1565071","RGD1565088","RGD1565102","RGD1565107","RGD1565117","RGD1565119","RGD1565131","RGD1565129","RGD1565143","RGD1565158","RGD1565170","RGD1565166","RGD1565183","RGD1565212","RGD1565245","RGD1565258","RGD1565260","RGD1565272","RGD1565222","RGD1565286","RGD1565288","RGD1565291","RGD1565297","RGD1565299","RGD1565301","RGD1565317","RGD1565329","RGD1565331","RGD1565323","RGD1565332","RGD1565338","RGD1565346","RGD1565356","RGD1565361","RGD1565365","RGD1565355","RGD1565367","RGD1565369","RGD1565395","RGD1565372","RGD1565400","RGD1565403","RGD1565410","RGD1565413","RGD1565422","RGD1565415","RGD1565435","RGD1565429","RGD1565438","RGD1565430","RGD1565478","RGD1565459","RGD1565472","RGD1565462","RGD1565495","RGD1565498","RGD1565533","RGD1565534","RGD1565541","RGD1565548","RGD1565560","RGD1565565","RGD1565566","RGD1565569","RGD1565573","RGD1565598","RGD1565590","RGD1565588","RGD1565600","RGD1565607","RGD1565611","RGD1565627","RGD1565634","RGD1565617","RGD1565622","RGD1565648","RGD1565616","RGD1565641","RGD1565651","RGD1565653","RGD1565657","RGD1565655","RGD1565661","RGD1565660","RGD1565664","RGD1565665","RGD1565679","RGD1565689","RGD1565685","RGD1565732","RGD1565693","RGD1565695","RGD1565725","RGD1565735","RGD1565752","RGD1565762","RGD1565753","RGD1565767","RGD1565779","RGD1565766","RGD1565784","RGD1565785","RGD1565798","RGD1565806","RGD1565822","RGD1565829","RGD1565844","RGD1565862","RGD1565894","RGD1565866","RGD1565900","RGD1565902","RGD1565912","RGD1565904","RGD1565939","RGD1565945","RGD1565956","RGD1565965","RGD1565959","RGD1565977","RGD1565987","RGD1565988","RGD1565989","RGD1565996","RGD1566007","RGD1566033","RGD1566006","RGD1566008","RGD1566035","RGD1566037","RGD1566048","RGD1566059","RGD1566060","RGD1566061","RGD1566067","RGD1566078","RGD1566093","RGD1566085","RGD1566100","RGD1566099","RGD1566129","RGD1566135","RGD1566136","RGD1566134","RGD1566138","RGD1566137","RGD1566184","RGD1566189","RGD1566159","RGD1566197","RGD1566198","RGD1566212","RGD1566217","RGD1566225","RGD1566227","RGD1566237","RGD1566226","RGD1566241","RGD1566244","RGD1566247","RGD1566248","RGD1566257","RGD1566258","RGD1566251","RGD1566262","RGD1566271","RGD1566273","RGD1566265","RGD1566284","RGD1566289","RGD1566292","RGD1566300","RGD1566324","RGD1566303","RGD1566331","RGD1566325","RGD1566337","RGD1566344","RGD1566347","RGD1566353","RGD1566354","RGD1566355","RGD1566368","RGD1566359","RGD1566369","RGD1566373","RGD1566383","RGD1566387","RGD1566386","RGD1566409","RGD1566401","RGD1584023","RGD1597339","RGD2301395","RGD2320734","RGD1624210","RGD9310068","RGD621098","RGD735029","RGD735065","Rgl1","Rgl2","Rgmb","Rgl3","Rgma","Rgp1","Rgr","Rgs1","Rgn","Rgs11","Rgs13","Rgs10","Rgs16","Rgs12","Rgs14","Rgs17","Rgs18","Rgs19","Rgs20","Rgs2","Rgs21","Rgs22","Rgs3","Rgs5","Rgs4","Rgs6","Rgs7bp","Rgs8","Rgs7","Rgs9bp","Rgs9","Rgsl2h","Rgsl1","Rhag","Rhbdd1","Rhbdd2","Rhbdf1","Rhbdd3","Rhbdf2","Rhbdl1","Rhbdl2","Rhbdl3","Rhbg","Rhcg","Rhd","Rhebl1","Rheb","Rhno1","Rho","Rhob","Rhobtb1","Rhobtb2","Rhobtb3","Rhod","Rhoc","Rhof","Rhoh","Rhog","Rhoa","Rhoq","Rhoj","Rhot2","Rhou","Rhot1","Rhox11","Rhox12","Rhov","Rhox13","Rhox2","Rhox3","Rhox4g","Rhox5","Rhox7","Rhox8","Rhox9","Rhoxf10","Rhpn1","Rhpn2","Ribc1","Ribc2","Ric1","Ric3","Ric8b","Ric8a","Rictor","Rida","Riiad1","Rif1","Rilp","Rilpl1","Rilpl2","Rimbp2","Rimbp3","Rimkla","Rimklb","Rims3","Rims4","Rin1","Rims1","Rin3","Rims2","Ring1","Rin2","Rinl","Rint1","Riok1","Riok2","Riox1","Riok3","Riox2","Ripk2","Ripk3","Ripk1","Ripk4","Ripor3","Ripor2","Ripply1","Ripor1","Ripply2","Ripply3","Rit1","Rita1","Rit2","Rlbp1","Rlf","Rlim","Rln1","Rln3","Rmdn1","Rmdn2","Rmi2","Rmdn3","Rmi1","Rmrp","Rmnd1","Rmnd5a","Rmnd5b","Rn18s","Rn28s","Rmt1","Rn5-8s","Rn7sl1","Rn5s","Rnase-ps","Rnase1","Rnase11","Rnase13","Rnase10","Rnase12","Rnase17","Rnase1l1","Rnase1l2","Rnase2","Rnase9","Rnase3","Rnase6","Rnaseh1","Rnase4","Rnaseh2b","Rnaseh2a","Rnaseh2c","Rnasek","Rnaset2","Rnd1","Rnasel","Rnd2","Rnf10","Rnd3","Rnf11","Rnf103","Rnf113a","Rnf112","Rnf111","Rnf113a1","Rnf113a2","Rnf114","Rnf11l2","Rnf115","Rnf11l1","Rnf122","Rnf121","Rnf125","Rnf123","Rnf126","Rnf130","Rnf13","Rnf128","Rnf133","Rnf135","Rnf138","Rnf139","rnf141","Rnf144a","Rnf14","Rnf144b","Rnf145","Rnf146","Rnf148","Rnf149","Rnf150","Rnf151","Rnf157","Rnf152","Rnf165","Rnf166","Rnf167","Rnf169","Rnf168","Rnf17","Rnf170","Rnf180","Rnf181","Rnf182","Rnf186","Rnf185","Rnf183","Rnf187","Rnf19b","Rnf19a","Rnf20","Rnf2","Rnf207","Rnf208","Rnf212","Rnf213","Rnf215","Rnf214","Rnf216","Rnf217","Rnf219","Rnf220","Rnf223","Rnf222","Rnf225","Rnf224","Rnf24","Rnf26","Rnf25","Rnf32","Rnf31","Rnf34","Rnf39","Rnf38","Rnf4","Rnf40","Rnf41","Rnf43","Rnf5","Rnf44","Rnf6","Rnf7","Rnf8","Rnft2","Rnft1","Rngtt","Rnmt","Rnh1","Rnls","Rnpc3","Rnpepl1","Rnps1","Rnr3_mapped","Rnpep","Robld3-ps1","Robo3","Robo4","Robo2","Robo1","Rogdi","Rom1","Rock2","Romo1","Rock1","Ropn1","Ropn1l","Ror1","Ror2","Rora","Rorc","Rorb","Rp1l1","Rp1","Rp2","Ros1","Rp9","Rpa1","Rpa3","Rpain","Rpap1","Rpa2","Rpap2","Rpap3","Rpe","Rpf2","Rpgrip1","Rpf1","Rpe65","Rpgr","Rpgrip1l","Rph3a","Rph3al","Rpia","Rpl10l","Rpl10a","Rpl10","Rpl11","Rpl12-ps1","Rpl12","Rpl13-ps1","Rpl13","Rpl17l1","Rpl13a","Rpl17-ps1","Rpl14","Rpl15","Rpl17","Rpl18","Rpl18a","Rpl21-ps2","Rpl21-ps1","Rpl21-ps3","Rpl19","Rpl22-ps","Rpl21","Rpl22","Rpl22l1","Rpl22l2","Rpl24","Rpl23","Rpl23a","Rpl26-ps1","Rpl26-ps2","Rpl26-ps3","Rpl26","Rpl27-l1","Rpl27-ps1","Rpl27","Rpl27a","Rpl29-ps1","Rpl29-ps2","Rpl28","Rpl29","Rpl29-ps3","Rpl30l1","Rpl31l1","Rpl31l2","Rpl3","Rpl31l3","Rpl31","Rpl30","Rpl31l4","Rpl32-ps1","Rpl32-ps2","Rpl32-ps3","Rpl32-ps4","Rpl34-ps1","Rpl34l1","Rpl32","Rpl34","Rpl35","Rpl36a-ps1","Rpl35al1","Rpl36","Rpl36a-ps2","Rpl36a-ps3","Rpl36a","Rpl35a","Rpl36a-ps4","Rpl37-ps1","Rpl37a-ps2","Rpl37a-ps3","Rpl36al","Rpl37a","Rpl37a-ps1","Rpl37","Rpl38","Rpl38-ps1","Rpl38-ps2","Rpl38-ps3","Rpl39-ps","Rpl39l","Rpl3l","Rpl39","Rpl41-ps1","Rpl41","Rpl5l1","Rpl4","Rpl6-ps1","Rpl5","Rpl6","Rpl7l1","Rpl7","Rpl7a","Rpl8","Rplp0l1","Rpl9","Rplp2","Rpn1","Rplp1","Rpn2","Rpp14","Rplp0","Rpp21","Rpp25","Rpp30","Rpp25l","Rpp38","Rpp40","Rprd1a","Rprd2","Rprd1b","Rprm","Rps10l1","Rprml","Rps12l2","Rps12l3","Rps10","Rps11","Rps12","Rps13","Rps15-ps1","Rps15-ps2","Rps15a-ps1","Rps15","Rps15al1","Rps14","Rps15al2","Rps15a","Rps15al4","Rps17l","Rps17","Rps16","Rps18l1","Rps18","Rps19bp1","Rps19","Rps19l1","Rps2-ps1","Rps2-ps2","Rps2-ps3","Rps2-ps4","Rps2-ps5","Rps2-ps6","Rps2","Rps2-ps7","Rps21-ps1","Rps20","Rps25-ps2","Rps25-ps1","Rps21","Rps23","Rps25","Rps24","Rps26","Rps27a-ps10","Rps27a-ps11","Rps27a-ps1","Rps27a-ps13","Rps27a-ps14","Rps27","Rps27a","Rps27a-ps15","Rps27a-ps16","Rps27a-ps17","Rps27a-ps18","Rps27a-ps19","Rps27a-ps20","Rps27a-ps2","Rps27a-ps21","Rps27a-ps22","Rps27a-ps23","Rps27a-ps25","Rps27a-ps26","Rps27a-ps24","Rps27a-ps27","Rps27a-ps28","Rps27a-ps29","Rps27a-ps3","Rps27a-ps30","Rps27a-ps4","Rps27a-ps5","Rps27a-ps6","Rps27a-ps7","Rps27a-ps8","Rps27a-ps9","Rps27l","Rps28-ps1","Rps28","Rps4x-ps1","Rps3","Rps29","Rps4x-ps3","Rps4x-ps2","Rps3a","Rps4x","Rps4x-ps4","Rps4x-ps5","Rps4x-ps6","Rps4x-ps7","Rps4x-ps8","Rps4x-ps9","Rps4y2","Rps5","Rps6","Rps6ka2","Rps6ka1","Rps6ka4","Rps6ka3","Rps6ka6","Rps6ka5","Rps6kl1","Rps7","Rps6kb2","Rps6kc1","Rps8-ps1","Rps6kb1","Rps8","Rps9","Rptn","Rps9l1","Rpusd1","Rpusd2","Rptor","Rpusd3","Rpsa","Rpusd4","Rraga","Rrad","RragB","Rragc","Rragd","Rras2","Rras","Rrbp1","Rrh","Rrlt","Rreb1","Rrm1-ps1","Rrm1","Rrm2b","Rrn3","Rrm2","Rrnad1","Rrp12","Rrp1","Rrp15","Rrp36","Rrp1b","Rrp7a","Rrp8","Rrs1","RSA-14-44","Rrp9","Rs1","Rsad1","Rsad2","Rsbn1l","Rsbn1","Rsf1","Rsg1","Rsl1","Rsl1d1","Rsl1d1l1","Rsl24d1","Rsph1","Rsph10b","Rsph14","Rsph3","Rsph4a","Rsph6a","Rsph9","Rspo1","Rspo2","Rspo4","Rspo3","Rsrc1","Rspry1","Rsrc2","Rsrp1","Rsu1","RT1-A","RT1-B","RT1-A2","RT1-A3","RT1-A1","RT1-CE1","RT1-CE10","RT1-CE11","RT1-CE12","RT1-CE14","RT1-CE13","RT1-Ba","RT1-CE14-ps1","RT1-Bb","RT1-CE15","RT1-CE16","RT1-CE2","RT1-CE3","RT1-CE6","RT1-CE4","RT1-CE8-ps1","RT1-CE5","RT1-CE9-ps1","RT1-CE7","RT1-Cl","RT1-Db2","RT1-DOa","RT1-DMa","RT1-Da","RT1-DMb","RT1-DOb","RT1-Hb-ps1","RT1-M1-1-ps","RT1-L3","RT1-EC2","RT1-Ha","RT1-Db1","RT1-M1-3-ps","RT1-M1-2","RT1-M10-2-ps","RT1-M10-3-ps","RT1-M1-5","RT1-M1-4","RT1-M10-1","RT1-M10-4-ps","RT1-M2","RT1-M3-3-ps","RT1-M3-2-ps","RT1-M3-1","RT1-M7-ps","RT1-M6-2","RT1-M4","RT1-M6-1","RT1-M5","RT1-M8-ps","RT1-N1","RT1-O2-ps","RT1-O3-ps","RT1-P1-ps1","RT1-O1","RT1-N2","RT1-N3","RT1-P2-ps1","RT1-T24-2","RT1-S2","RT1-T18","RT1-T24-1","RT1-V1-ps1","RT1-T24-3","RT1-S3","RT1-T24-4","Rt1.a-4","RT1-V2-ps1","Rtbdn","Rtcb","Rtca","Rtf1","Rtel1","Rtfdc1","Rtkn2","Rtkn","Rtl1","Rtl3","Rtl5","Rtl8a","Rtl4","Rtl6","Rtl8b","Rtl9","Rtn2","Rtn1","Rtn3","Rtn4ip1","Rtn4rl1","Rtn4rl2","Rtn4r","Rtp1","Rtn4","Rtp2","Rtp3","Rtp4","Rtraf","Rttn","Rubcnl","Rubcn","Rufy1","Rufy2","Rufy4","Rundc1","Rufy3","Rundc3a","Rundc3b","Runx1t1","Runx1","Runx3","Runx2","Rup2","Rusc1","Rusc2","Ruvbl1","Ruvbl2","Rwdd1","Rwdd2a","Rwdd2b","Rwdd3","Rwdd4","Rxfp1","Rxfp2","Rxfp3","Rxfp4-ps1","Rxra","Rxrb","Rybp","Rxrg","Ryk","S100a10","S100a1","Ryr1","Ryr3","S100a11","S100a14","S100a13","S100a16","S100a3","Ryr2","S100a4","S100a5","S100a6","S100a7a","S100a7l2","S100a8","S100a9","S100pbp","S100vp","S100g","S100z","S100b","S1pr4","S1pr2","S1pr1","S1pr3","S1pr5","Sacm2l-ps1","Saal1","Sac3d1","Saa4","Sacm1l","Sacm2l-ps2","Sacm2l-ps5","Sacm2l-ps4","Sacm2l-ps3","Sacm2l-ps6","Sacm2l-ps7","Safb2","Sacs","Sae1","Safb","Sall1","Sag","Samd1","Sall3","Sall2","Samd10","Samd11","Samd12","Samd13","Samd14","Samd15","Samd3","Sall4","Samd5","Samd7","Samd4b","Samd4a","Samd8","Samd9","Samd9l","Samm50","Samhd1","Samt2","Samsn1","Samt4","Samt3","Sap130","Sap18","Sap25","Sap30","Sap30bp","Sap30l","Sapcd2","Sapcd1","Sar1b","Saraf","Sar1a","Sarm1","Sarnp","Sardh","Sars","Sars2","Sart1","Sash1","Sart3","Sash3","Sass6","Sat1","Sat2","Satb1","Satl1","Satb2","Sav1","Saxo2","Saysd1","Saxo1","Saxol1","Sbds","Sbk1","Sbk2","Sbk3","Sbf1","Sbf2","Sbno2","Sbno1","Sbsn","Sbp","Sbspon","Sc5d","Scaf1","Scaf11","Scaf4","Scaf8","Scai","Scamp1","Scamp2","Scamp4","Scamp3","Scand1","Scand3-ps1","Scamp5","Scand3-ps2","Scand3-ps3","Scand3-ps4","Scara3","Scaper","Scap","Scara5","Scarf1","Scarb2","Scarf2","Scarna15","Scarb1","Scarna3","Scart1","Sccpdh","Scd","Scd2","Scd4","Scel","Scfd2","Scfd1","Scg3","Scg2","Scg5","Scgb1b30","Scgb1b24","Scgb1c1","Scgb1d2","Scgb1a1","Scgb1d4","Scgb2a1","Scgb2b2","Scgb2a2","Scgb2b24","Scgb3a1","Scgb3a2","Scgn","Scimp","Schip1","Scin","Scml1","Scmh1","Scly","Sclt1","Scml2","Scml4","Scn11a","Scn2b","Scn10a","Scn1b","Scn1a","Scn2a","Scn3b","Scn3a","Scn4b","Scn7a","Scn4a","Scn8a","Scnm1","Scn5a","Scn9a","Sco1","Scoc","Scnn1a","Scp2d1","Scnn1b","Scnn1g","Scpep1","Scp2","Scrg1","Scrn1","Scrn2","Scrt1","Scrn3","Scrt2","Scrib","Sct","Sctr","Scx","Scube2","Scube1","Scube3","Scyl1","Scyl2","Scyl3","Sdad1","Sdc2","Sdc3","Sdc1","Sdccag1-ps1","Sdcbp2","Sdc4","Sdcbp","Sdccag3","Sde2","Sdf2","Sdccag8","Sdf2l1","Sdhaf1","Sdf4","Sdha","Sdhaf3","Sdhaf2","Sdhaf4","Sdhc","Sdhb","Sdhd","Sdk1","Sdr16c6","Sdr16c5","Sdk2","Sdr39u1","Sdr42e1","Sdr42e2","Sdr9c7","Sdsl","Sec1","Sebox","Sds","Sec11a","Sec11c","Sec13","Sec14l1","Sec14l5","Sec14l4","Sec14l3","Sec14l2","Sec16a","Sec16b","Sec22a","Sec22c","Sec22b","Sec23a","Sec23b","Sec23ip","Sec24a","Sec24b","Sec24c","Sec61-ps","Sec24d","Sec31b","Sec31a","Sec61a1","Sec61a2","Sec61b","Sec61g","Sec61g-ps1","Sec61gl","Sec62","Secisbp2","Sec63","Sectm1a","Secisbp2l","Seh1l","Sectm1b","Sel1l","Sel1l2","Sel1l3","Selenoh","Selenbp1","Selenof","Sele","Selenoi","Selenok-ps1","Selenok","Selenok-ps2","Selenok-ps3","Selenok-ps4","Selenok-ps6","Selenok-ps5","Selenon","Selenom","Selenoo","Selenop","Selenos","Selenot-ps1","Selenot","Selenov","Selenow-ps1","Selenow","Selplg","Sem1","Sell","Sema3b","Sema3c","Sema3a","Sema3d","Sema3e","Sema3g","Sema3f","Sema4a","Sema4b","Sema4c","Sema4d","Selp","Sema4f","Sema6a","Sema4g","Sema5b","Sema5a","Sema6b","Sema6c","Sema6d","Sema7a","Senp17","Senp1","Senp18","Semg1","Senp2","Senp3","Senp5","Sephs2","Senp6","Senp7","Senp8","Sephs1","Sepsecs","1-Sep","10-Sep","12-Sep","14-Sep","11-Sep","3-Sep","2-Sep","4-Sep","5-Sep","6-Sep","7-Sep","Serac1","8-Sep","9-Sep","Serf1","Serbp1","Serf2","Sergef","Serhl2","Serinc2","Serinc1","Serinc3","Serinc4","Serinc5","Serp2","Serp1","Serpina11","Serpina12","Serpina10","Serpina16","Serpina1f","Serpina1","Serpina3c","Serpina3m","Serpina4","Serpina5","Serpina9","Serpina3n","Serpina6","Serpina7","Serpinb10","Serpinb11","Serpinb12","Serpinb13","Serpinb1b","Serpinb2","Serpinb1a","Serpinb3","Serpinb3a","Serpinb5","Serpinb6a","Serpinb6b","Serpinb6e","Serpinb8","Serpinb7","Serpinb9d","Serpinb9","Serpind1","Serpinc1","Serpine3","Serpine2","Serpinf2","Serping1","Serpinf1","Serpinh1","Sert1","Serpini1","Serpini2","Sertad1","Sertad2","Serpine1","Sertad3","Sertm1","Sertad4","Sesn1","Sesn3","Sesn2","Sestd1","Setbp1","Set","Setd1b","Setd1a","Setd3","Setd4","Setd2","Setd6","Setd5","Setd7","Setdb1","Setdb2","Setsip","Setmar","Setx","Sez6","Sez6l2","Sez6l","Sf1","Sf3a2","Sf3a1","Sf3a3","Sf3b4","Sf3b1","Sf3b2","Sf3b3","Sf3b5","Sf3b6","Sfi1","Sfmbt1","Sfmbt2","Sfr1","Sfn","Sfpq","Sfrp2","Sfrp1","Sfrp4","Sfrp5","Sft2d3","Sft2d2","Sfswap","Sft2d1","Sfta2","Sfxn2","Sfxn1","Sfxn3","Sfxn4","Sftpc","Sftpa1","Sftpb","Sftpd","Sfxn5","Sgca","Sgcb","Sgce","Sgcd","Sgcg","Sgcz","Sgf29","Sgk494","Sgk2","Sgk3","Sgip1","Sgo1","Sgms2","Sgk1","Sgms1","Sgo2","Sgpp1","Sgsh","Sgpl1","Sgpp2","Sgsm1","Sgsm2","Sgsm3","Sgta","Sgtb","Sh2b3","Sh2b1","Sh2b2","Sh2d1b2","Sh2d1a","Sh2d1b","Sh2d3a","Sh2d2a","Sh2d4b","Sh2d6","Sh2d3c","Sh2d4a","Sh2d5","Sh2d7","Sh3bgr","Sh3bgrl","Sh3bgrl2","Sh3bgrl3","Sh3bp2","Sh3bp1","Sh3bp4","Sh3bp5","Sh3bp5l","Sh3d19","Sh3gl1","Sh3d21","Sh3gl2","Sh3gl3","Sh3glb1","Sh3glb2","Sh3pxd2a","Sh3kbp1","Sh3pxd2b","Sh3rf1","Sh3rf2","Sh3rf3","Sh3tc1","Sh3tc2","Sh3yl1","Shb","Sharpin","Shank1","Shank3","Shbg","Shc2","Shank2","Shc1","Shc3","Shc4","Shcbp1","Shcbp1l","She","Shf","Shd","Shisa2","Shisa6","Shisa3","Shisa7","Shisa4","Shisa8","Shisa5","Shisa9","Shisal2b","Shisal2a","Shisal1","Shkbp1","Shh","Shmt1","Shmt2","Shoc2","Shpk","Shox2","Shq1","Shroom1","Shprh","Shroom2","Shroom3","Shroom4","Shtn1","Siah2","Siae","Si","Siah1","Siah3","Sidt1","Sidt2","Sigirr","Siglec15","Siglec10","Siglec8","Siglec1","Siglech","Siglec5","Siglecl1","Sik2","Sike1","Sik3","Sigmar1","Sik1","Sil1","Sim2","Sim1","Simc1","Sinhcaf","Sipa1l1","Sipa1","Sin3b","Sipa1l2","Sin3a","Sipa1l3","Sirpb2","Sirpb2l1","Sirpd","Sirpa","Sirt2","Sirt4","Sirt3","Sirt5","Sirt7","Sit1","Sirt6","Siva1","Six2","Six1","Six4","Six3","Six5","Six6","Six6os1","Ska1","Ska2","Sirt1","Ska3","Skap2","Skida1","Skap1","Ski","Skil","Skint10","Skint1","Skint4","Skint8","Skiv2l","Skor1","Skiv2l2","Skor2","Sla","Skp1","Skp2","Sla2","Slain1","Slain2","Slamf1","Slamf6","Slamf7","Slamf8","Slamf9","Slbp","Slc10a3","Slc10a1","Slc10a2","Slc10a4","Slc10a5","Slc10a6","Slc10a7","Slc11a1","Slc12a2","Slc12a1","Slc12a4","Slc12a3","Slc12a6","Slc11a2","Slc12a5","Slc12a9","Slc12a7","Slc13a1","Slc12a8","Slc13a4","Slc13a2","Slc13a3","Slc13a5","Slc14a1","Slc15a3","Slc15a4","Slc15a2","Slc15a5","Slc15a1","Slc14a2","Slc16a1","Slc16a14","Slc16a11","Slc16a12","Slc16a10","Slc16a13","Slc16a2","Slc16a3","Slc16a4","Slc16a9","Slc16a5","Slc16a6","Slc16a8","Slc17a1","Slc16a7","Slc17a2","Slc17a4","Slc17a3","Slc17a5","Slc17a9","Slc17a6","Slc17a8","Slc17a7","Slc18a1","Slc18a3","Slc18b1","Slc18a2","Slc19a3","Slc19a2","Slc19a1","Slc1a4","Slc1a1","Slc1a5","Slc1a6","Slc1a3","Slc1a2","Slc1a7","Slc20a1","Slc20a2","Slc22a14","Slc22a12","Slc21a4","Slc22a16","Slc22a15","Slc22a13","Slc22a1","Slc22a17","Slc22a20","Slc22a18","Slc22a22","Slc22a23","Slc22a24","Slc22a25","Slc22a2","Slc22a7-ps1","Slc22a3","Slc22a4","Slc22a7","Slc22a6","Slc22a5","Slc23a1","Slc22a8","Slc23a3","Slc24a1","Slc23a2","Slc24a3","Slc24a2","Slc24a5","Slc24a4","Slc25a1","Slc25a10","Slc25a11","Slc25a12","Slc25a13","Slc25a14","Slc25a15","Slc25a17","Slc25a16","Slc25a18","Slc25a2","Slc25a19","Slc25a20","Slc25a21","Slc25a22","Slc25a23","Slc25a24","Slc25a26","Slc25a25","Slc25a27","Slc25a28","Slc25a30","Slc25a29","Slc25a32","Slc25a3","Slc25a31","Slc25a33","Slc25a34","Slc25a35","Slc25a36l1","Slc25a36","Slc25a38","Slc25a37","Slc25a39","Slc25a4","Slc25a40","Slc25a41","Slc25a43","Slc25a42","Slc25a44","Slc25a45","Slc25a46","Slc25a48","Slc25a47","Slc25a5","Slc25a53","Slc25a52","Slc25a51","Slc25a54","Slc25a6","Slc26a10","Slc26a1","Slc26a11","Slc26a3","Slc26a2","Slc26a6","Slc26a4","Slc26a5","Slc26a7","Slc26a8","Slc26a9","Slc27a2","Slc27a3","Slc27a1","Slc27a4","Slc27a5","Slc27a6","Slc28a3","Slc28a1","Slc28a2","Slc29a1","Slc29a3","Slc29a4","Slc29a2","Slc2a10","Slc2a12","Slc2a1","Slc2a13","Slc2a5","Slc2a6","Slc2a3","Slc2a2","Slc2a7","Slc2a8","Slc2a9","Slc2a4","Slc30a1","Slc30a10","Slc30a2","Slc30a4","Slc30a3","Slc30a5","Slc30a7","Slc30a8","Slc30a6","Slc30a9","Slc31a2","Slc31a1","Slc33a1","Slc32a1","Slc35a1","Slc34a2","Slc34a3","Slc35a3","Slc35a2","Slc35a5","Slc35a4","Slc34a1","Slc35b1","Slc35b2","Slc35b3","Slc35b4","Slc35c1","Slc35d1","Slc35d2","Slc35c2","Slc35d3","Slc35e1","Slc35e3","Slc35e2b","Slc35e4","Slc35f1","Slc35f3","Slc35f2","Slc35f4","Slc35f5","Slc35f6","Slc35g1","Slc35g2","Slc35g3","Slc36a1","Slc36a2","Slc36a4","Slc36a3","Slc37a1","Slc37a2","Slc37a3","Slc37a4","Slc38a11","Slc38a10","Slc38a1","Slc38a2","Slc38a3","Slc38a5","Slc38a4","Slc38a7","Slc38a6","Slc38a8","Slc38a9","Slc39a1","Slc39a10","Slc39a12","Slc39a11","Slc39a2","Slc39a13","Slc39a14","Slc39a3","Slc39a4l","Slc39a4","Slc39a5","Slc39a6","Slc39a7","Slc39a8","Slc39a9","Slc3a1","Slc3a2","Slc41a1","Slc41a2","Slc41a3","Slc40a1","Slc43a1","Slc43a2","Slc43a3","Slc44a1","Slc44a3","Slc44a2","Slc45a1","Slc44a4","Slc44a5","Slc45a2","Slc45a3","Slc45a4","Slc46a2","Slc46a1","Slc47a2","Slc46a3","Slc48a1","Slc47a1","Slc4a1","Slc4a11","Slc4a1ap","Slc4a10","Slc4a5","Slc4a3","Slc4a2","Slc4a4","Slc50a1","Slc4a7","Slc4a9","Slc4a8","Slc51a","Slc51b","Slc52a2","Slc52a3","Slc5a12","Slc5a10","Slc5a11","Slc5a3","Slc5a1","Slc5a2","Slc5a4","Slc5a4b","Slc5a8","Slc5a6","Slc5a5","Slc5a9","Slc5a7","Slc6a11","Slc6a1","Slc6a12","Slc6a16","Slc6a14","Slc6a13","Slc6a15","Slc6a17","Slc6a18","Slc6a19","Slc6a2","Slc6a20","Slc6a5","Slc6a6","Slc6a7","Slc6a3","Slc6a8","Slc6a4","Slc6a9","Slc7a12","Slc7a10","Slc7a11","Slc7a13","Slc7a1","Slc7a14","Slc7a15","Slc7a4","Slc7a3","Slc7a6os","Slc7a6","Slc7a5","Slc7a2","Slc7a7","Slc7a8","Slc7a9","Slc8a2","Slc8b1","Slc8a3","Slc9a2","Slc9a1","Slc9a3r2","Slc8a1","Slc9a3r1","Slc9a4","Slc9a6","Slc9a3","Slc9a5","Slc9a7","Slc9a8","Slc9b1","Slc9b2","Slc9a9","Slc9c1","Slc9c2","Slco1a1","Slco1a2","Slco1a4","Slco1a6","Slco1b2","Slco1c1","Slco2a1","Slco2b1","Slco3a1","Slco4a1","Slco4c1","Slco6c1","Slco6b1","Slco5a1","Slco6d1","Slf1","Slfn1","Slf2","Slfn13","Slfn14","Slfn3","Slfn2","Slfn4","Slfn5","Slfnl1","Slirp","Slitrk1","Slit1","Slitrk3","Slitrk2","Slitrk4","Slit3","Slitrk5","Slit2","Slitrk6","Slk","Sln","Slpil2","Slpil3","Slpi","Slmap","Sltm","Slurp1","Slu7","Slx1b","Slx4","Slx4ip","Smad1","Smad2","Smad5","Smad3","Smad6","Smad9","Smad7","Smad4","Smagp","Smap1","Smap2","Smarca1","Smarca2","Smarcad1","Smarca5","Smarcal1","Smarcb1","Smarca4","Smarcc1","Smarcd1","Smarcc2","Smarce1l","Smarcd3","Smarcd2","Smc1b","Smarce1","Smc1a","Smc2","Smc3","Smc4","Smc6","Smc5","Smco1","Smco2","Smchd1","Smco3","Smcp","Smcr8","Smdt1","Smco4","Smg5","Smg1","Smim1","Smg6","Smgc","Smg8","Smg7","Smg9","Smim10","Smim10l1","Smim11","Smim12","Smim13","Smim14","Smim15","Smim17","Smim18","Smim19","Smim2","Smim20","Smim22","Smim23","Smim24","Smim26","Smim29","Smim3","Smim31","Smim34a","Smim4","Smim35","Smim5","Smim6","Smim7","Smkr1","Smlr1","Smim8","Smndc1","Smoc1","Smn1","Smok2a","Smoc2","Smo","Smox","Smpd1","Smpd4","Smpd2","Smpd3","Smpd5","Smpdl3a","Smpdl3b","Smptb","Smpx","Smr3a","Sms-ps1","Sms","Smr3b","Smtn","Smtnl1","Smtnl2","Smu1","Smug1","Smurf1","Smurf2","Smyd1","Smyd4","Smyd2","Smyd3","Smyd5","Snai1","Snai2","Snai3","Snap47","Snap23","Snap29","Snapc1","Snapc3","Snap91","Snapc2","Snapc4","Snapc5","Snap25","Snapin","Sncaip","Sncg","Sncb","Snd1","Snf8","Snhg11","Sned1","Snhg4","Snca","Snora19","Snip1","Snn","Snora58","Snph","Snrk","Snrnp200","Snrnp25","Snrnp40","Snrnp35","Snrnp27","Snrnp48","Snrpa","Snrnp70","Snrpc-ps1","Snrpa1","Snrpb2","Snrpc","Snrpb","Snrpd1","Snrpd2","Snrpd2l","Snrpel","Snrpel1","Snrpd3","Snrpep2","Snrpf","Snrpg-ps1","Snrpg","Snrpgl2","Snrpe","Snta1","Sntb1","Snrpn","Sntb2","Sntg1","Sntg2","Sntn","Snu13","Snupn","Snurf","Snw1","Snx1","Snx10","Snx11","Snx12","Snx13","Snx16","Snx15","Snx14","Snx17","Snx18","Snx19","Snx20","Snx2","Snx21","Snx22","Snx24","Snx25","Snx27","Snx3","Snx30","Snx29","Snx31","Snx33","Snx32","Snx4","Snx5","Snx7","Snx8","Snx9","Snx6","Soat1","Sobp","Soat2","Socs4","Socs2","Socs5","Socs1","Socs3","Socs6","Socs7","Soga1","Soga3","Sod3","Sohlh1","Sohlh2","Son","Sod2","Sod1","Sorbs1","Sorbs3","Sorbs2","Sorcs1","Sorcs2","Sorcs3","Sorl1","Sord","Sort1","Sostdc1","Sost","Sowaha","Sos2","Sos1","Sowahb","Sox1","Sowahc","Sowahd","Sox12","Sox11","Sox13","Sox14","Sox10","Sox15","Sox21","Sox17","Sox18","Sox3","Sox30","Sox4","Sox2","Sox7","Sox5","Sox8","Sox6","Sp100","Sp110","Sox9","Sp140","Sp1","Sp2","Sp4","Sp3","Sp5","Sp6","Sp8","Spaca1","Sp7","Sp9","Spa17","Spaca3","Spaca4","Spaca5","Spaca6","Spaca7","Spaca9","Spag1","Spag11a","Spag11b","Spag11bl","Spag17","Spag16","Spag4","Spag6","Spag7","Spag5","Spag6l","Spag8","Spam1","Sparcl1","Spag9","Spart","Sparc","Spast","Spata1","Spata13","Spata16","Spata17","Spata18","Spata19","Spata2","Spata20","Spata21","Spata22","Spata24","Spata25","Spata2L","Spata3","Spata31d1b","Spata31a5","Spata31d1d","Spata31d3","Spata31e1","Spata32","Spata33","Spata4","Spata45","Spata46","Spata5l1","Spata5","Spata6l","Spata6","Spata9","Spata7","Spatc1","Spatc1l","Spats1","Spats2","Spc24","Spats2l","Spc25","Spcs1","Spcs2","Spcs3","Spdef","Spdl1","Spdya","Spdye4","Specc1","Specc1l","Spef1","Spef2","Spem1","Speg","Spen","Spert","Spesp1","Spetex-2A","Spetex-2B","Spetex-2C","Spetex-2D","Spetex-2E","Spetex-2F","Spetex-2G","Spetex-2H","Spg11","Spg21","Spg7","Sphk2","Sphk1","Sphkap","Spi1","Spib","Spic","Spice1","Spidr","Spin1","Spin3","Spin2a","Spin4","Spink10","Spink1","Spink13","Spink14","Spink2","Spink1l","Spink4","Spink5","Spink6","Spink7","Spink8","Spink9","Spint1","Spint2","Spint4","Spint3","Spint5p","Spire1","Spire2","Spn","Spns1","Spns2","Spns3","Spocd1","Spo11","Spock1","Spock2","Spock3","Spon1","Spon2","Spop","Spopl","Spout1","Spp1","Spp2","Sppl2a","Sppl2b","Sppl2c","Sppl3","Spr","Spred1","Spred2","Spred3","Sprn","Sprr1a","Sprr1b","Sprr2d","Sprr3","Sprr4","Sprtn","Spry1","Spry2","Spry3","Spry4","Spryd4","Spryd3","Spryd7","Spsb1","Spsb2","Spsb3","Spsb4","Spt1","Spta1","Sptan1","Sptb","Sptbn1","Sptbn2","Sptbn5","Sptbn4","Sptlc1","Sptlc2","Sptssa","Sptlc3","Sptssb","Spty2d1","Spz1","Spx","Sqor","Sqle","Sra1","Sqstm1","Srarp","Srbd1","Srcap","Src","Srcin1","Srd5a2","Srd5a1","Srd5a3","Srebf1","Srebf2","Srek1","Srek1ip1","Srfbp1","Srf","Srgap1","Srgap2","Srgap3","Srgn","Sri","Srl","Srm","Srms","Srp14","Srp19","Srp54a","Srp68","Srp72-ps1","Srp72","Srp9","Srpk1","Srpk2","Srpk3","Srpra","Srprb","Srpx","Srpx2","Srrd","Srr","Srrm1","Srrm2","Srrm4","Srrm3","Srrm5","Srrt","Srsf10","Srsf1","Srsf12","Srsf11","Srsf3","Srsf2","Srsf3-ps1","Srsf4","Srsf5","Srsf6","Srsf7","Srsf8","Srsf9","Srxn1","Ss18","Sry","Ss18l1","Ss18l2","Ssbp1","Ssb","Ssbp2","Ssbp3","Ssbp4","Ssc4d","Ssc5d","Ssfa2","Ssh1","Ssh2","Ssmem1","Ssh3","Ssna1","Sspn","Ssr1","Sspo","Ssr2","Ssr3","Ssr4","Ssrp1","Sssca1","Sst","Sstr1","Sstr3","Sstr2","Sstr4","Sstr5","Ssty1","Ssu72","Ssuh2","Ssx1","Ssx2","Ssx2ip","St13","St14","St18","St3gal1","St3gal2","St3gal3","St3gal4","St3gal5","St3gal6","St5","St6gal1","St6gal2","St6galnac1","St6galnac2","St6galnac3","St6galnac4","St6galnac5","St6galnac6","St7l","ST7","St8sia2","St8sia1","St8sia3","St8sia4","St8sia6","St8sia5","Stab1","Stab2","Stac","Stac2","Stac3","Stag1","Stag2","Stag3","Stam","Stam2","Stambp","Stambpl1","Stap1","Stap2","Stard10","Stard13","Stard3","Stard3nl","Star","Stard4","Stard5","Stard6","Stard7","Stard8","Stard9","Stat2","Stat1","Stat4","Stat3","Stat5a","Stat5b","Stat6","Stath","Stau1","Stau2","Stbd1","Stc1","Stc2","Steap1","Steap2","Steap3","Steap4","Stfa2","Stfa2l1","Stfa2l2","Stfa3","Stfa3l1","Stil","Stim1","Stim2","Stip1","Stk10","Stk11ip","Stk11","Stk16","Stk17b","Stk19-ps","Stk19","Stk25","Stk24","Stk26","Stk3","Stk31","Stk32a","Stk32c","Stk32b","Stk35","Stk33","Stk36","Stk38","Stk38l","Stk39","Stk4","Stk40","Stkld1","Stmn1","Stmn2","Stmn3","Stmnd1","Stmn4","Stn1","Stom","Stoml1","Stoml2","Stoml3","Ston1","Ston2","Stox1","Stox2","Stpg1","Stpg3","Stpg2","Stpg4","Stra6","Stra8","Strada","Stradb","Strap","Strbp","Strc","Strip1","Strip2","Strn","Strn3","Strn4","Sts","Stt3a","Stt3b","Stum","Stub1","Stx11","Stx12","Stx16","Stx17","Stx19","Stx18","Stx1b","Stx1a","Stx2","Stx3","Stx4","Stx5","Stx6","Stx7","Stx8","Stxbp2","Stxbp1","Stxbp3","Stxbp4","Stxbp5","Stxbp5l","Stxbp6","Styk1","Styx","Styxl1","Styxl2","Sub1","Sucla2","Suclg1","Suclg2","Sucnr1","Suco","Suds3","Sufu","Sugct","Sugp1","Sugp2","Sugt1","Sulf1","Sulf2","Sult1a1","Sult1b1","Sult1c2a","Sult1c2","Sult1d1","Sult1c3","Sult1e1","Sult2a1","Sult2a2","Sult2a6","Sult2b1","Sult4a1","Sult5a1","Sult6b1","Sumf1","Sumf2","Sumo1","Sumo2","Sumo3","Sumo4","Sun1","Sun2","Sun3","Sun5","Suox","Supt16h","Supt3h","Supt20h","Supt4h1","Supt5h","Supt7l","Supt6h","Supv3l1","Surf1","Surf2","Surf4","Surf6","Susd1","Susd2","Susd3","Susd4","Susd5","Suv39h1","Susd6","Suv39h1l1","Suv39h2","Suz12","Sv2a","Sv2b","Sv2c","Sval1","Sval2","Svbp","Svep1","Svil","Svip","Svop","Svopl","Svs1","Svs3a","Svs3b","Svs4","Svs5","Svs6","Swap70","Swi5","Swsap1","Swt1","Syap1","Sybu","Syce1","Syce1l","Syce2","Syce3","Sycn","Sycp1","Sycp2","Sycp2l","Sycp3","Syde1","Syde2","Syf2","Sympk","Syk","Syn2","Syn1","Synb","Syn3","Sync","Syncrip","Syndig1","Syndig1l","Syne1","Syne2","Syne3","Syne4","Syngr1","Syngap1","Syngr2","Syngr3","Syngr4","Synj1","Synj2","Synj2bp","Synm","Synpo","Synpo2","Synpo2l","Synpr","Synrg","Sypl1","Syp","Sypl2","Sys1","Syt10","Syt11","Syt1","Syt12","Syt13","Syt14","Syt15","Syt16","Syt17","Syt2","Syt3","Syt5","Syt4","Syt6","Syt7","Syt8","Syt9","Sytl1","Sytl2","Sytl3","Sytl4","Sytl5","Syvn1","Szrd1","T","Szt2","T2","Taar1","Taar2","Taar3","Taar4","Taar5","Taar6","Taar7a","Taar7b","Taar7c","Taar7d","Taar7e","Taar7f-ps","Taar7g","Taar7h","Taar7i-ps","Taar8a","Taar8b","Taar8c","Taar9","Tab1","Tab2","Tab3","Tac3","Tac1","Tac4","Tacc1","Tacc2","Tacc3","Taco1","Tacr2","Tacr1","Tacr3","Tacstd2","Tada1","Tada2a","Tada2b","Tada3lb","Tada3","Taf1","Taf10","Taf11","Taf12","Taf13","Taf15","Taf1a","Taf1b","Taf1c","Taf1d","Taf2","Taf4","Taf3","Taf4b","Taf5","Taf5l","Taf6","Taf6l","Taf7","Taf7l","Taf7l-ps1","Taf8","Taf9","Taf9-ps","Tagap","Taf9b","Tagln","Tagln2","Tagln3","Tal2","Tal1","Taldo1","Tamm41","Tanc1","Tanc2","Tango2","Tango6","Tank","Taok1","Taok2","Taok3","Tap1","Tap2","Tapbpl","Tapbp","Tarbp1","Tapt1","Tarbp2","Tarm1","Tardbp","Tars","Tars2","Tarsl2","Tas1r1","Tas1r2","Tas1r3","Tas2r102","Tas2r103","Tas2r104","Tas2r105","Tas2r106","Tas2r107","Tas2r108","Tas2r109","Tas2r110","Tas2r113","Tas2r114","Tas2r116","Tas2r117","Tas2r118","Tas2r119","Tas2r120","Tas2r121","Tas2r123","Tas2r124","Tas2r125","Tas2r126","Tas2r129","Tas2r13","Tas2r130","Tas2r134","Tas2r136","Tas2r135","Tas2r137","Tas2r138","Tas2r139","Tas2r140","Tas2r143","Tas2r144","Tas2r145","Tas2r7l","Tasp1","Tatdn1","Tat","Tatdn2","Tatdn3","Tax1bp3","Tax1bp1","Tbata","Taz","Tbc1d1","Tbc1d10a","Tbc1d10b","Tbc1d10c","Tbc1d12","Tbc1d13","Tbc1d14","Tbc1d15","Tbc1d16","Tbc1d17","Tbc1d19","Tbc1d2","Tbc1d20","Tbc1d21","Tbc1d22a","Tbc1d22b","Tbc1d23","Tbc1d24","Tbc1d25","Tbc1d2b","Tbc1d30","Tbc1d31","Tbc1d32","Tbc1d4","Tbc1d5","Tbc1d7","Tbc1d8","Tbc1d8b","Tbc1d9","Tbca","Tbc1d9b","Tbcb","Tbcc","Tbccd1","Tbcd","Tbce","Tbcel","Tbck","Tbk1","Tbkbp1","Tbl1x","Tbl1xr1","Tbl2","Tbl3","Tbp","Tbpl1","Tbpl2","Tbr1","Tbrg1","Tbrg4","Tbx10","Tbx1","Tbx15","Tbx18","Tbx19","Tbx2","Tbx20","Tbx21","Tbx22","Tbx3","Tbx4","Tbx6","Tbx5","Tbxa2r","Tbxas1","Tc2n","Tcaf1","Tcaf2","Tcam1","Tcaim","Tcap","Tcea1","Tcea2","Tcea3","Tceal1","Tceal3","Tceal5","Tceal6","Tceal7","Tceal8","Tceal9","Tceanc","Tceanc2","Tcerg1","Tcerg1l","Tcf15","Tcf12","Tcf19","Tcf20","Tcf21","Tcf23","Tcf24","Tcf25","Tcf3","Tcf4","Tcf7","Tcf7l1","Tcf7l2","Tcfl5","Tchh","Tchhl1","Tchp","Tcirg1","Tcl1a","Tcn2","Tcof1","Tcp1-ps1","Tcp1","Tcp10b","Tcp11","Tcp11l1","Tcp11l2","Tcp11x2","Tcra-v22.1","Tcrb","Tcta","Tcte3","Tcte1","Tctex1d1","Tctex1d2","Tctex1d4","Tctn1","Tctn2","Tctn3","Tdg","Tdg-ps1","Tdgf1","Tdh","Tdo2","Tdp1","Tdp2","Tdpoz1","Tdrd12","Tdrd1","Tdrd15","Tdrd3","Tdrd6","Tdrd5","Tdrd7","Tdrd9","Tdrkh","Tdrp","Tead1","Tead2","Tead3","Tead4","Tec","Tecpr1","Tecpr2","Tecr","Tecrl","Tecta","Tectb","Tedc1","Teddm1","Tef","Tefm","Tekt1","Tek","Tekt2","Tekt3","Tekt4","Tekt5","Telo2","Ten1","Tenm1","Tenm2","Tenm3","Tenm4","Tep1","Tepp","Tepsin","Terb1","Terb2","Terc","Terf1","Terf2","Terf2ip","Tes","Tert","Tesb","Tesc","Tescl","Tesk1","Tesk2","Tesl","Tesmin","Testin","Tet1","Tet2","Tet3","Tex10","Tex101","Tex11","Tex12","Tex13a","Tex13b","Tex13c","Tex14","Tex15","Tex16-ps1","Tex19.1","Tex19.2","Tex2","Tex21","Tex22","Tex26","Tex261","Tex264","Tex28","Tex29","Tex30","Tex33","Tex35","Tex36","Tex37","Tex38","Tex43","Tex44","Tex45","Tex47","Tex49","Tex51","Tex52","Tex9","Tfam","Tf","Tfap2a","Tfap2b","Tfap2c","Tfap2d","Tfap2e","Tfap4","Tfb1m","Tfb2m","Tfcp2","Tfcp2l1","Tfdp1","Tfdp2","Tfe3","Tfeb","Tfec","Tff1","Tff2","Tff3","Tfg","Tfip11","Tfpi","Tfpi2","Tfpt","Tfr2","Tfrc","Tg","tGap1","Tgds","Tgfa","Tgfb1i1","Tgfb2","Tgfb1","Tgfb3","Tgfbi","Tgfbr1","Tgfbr2","Tgfbr3","Tgfbr3l","Tgfbrap1","Tgif1","Tgif2-ps1","Tgif2","Tgif2lx2","Tgm1","Tgm2","Tgm3","Tgm4","Tgm5","Tgm7","Tgm6","Tgs1","Tgoln2","Thada","Thap1","Th","Thap11","Thap12","Thap2","Thap3","Thap4","Thap6","Thap7","Thap8","Thbs1","Thbd","Thbs3","Thbs2","Theg","Thbs4","Thegl","Them4","Them5","Them6","Themis","Themis2","Thg1l","Thnsl1","Thoc1","Thnsl2","Thoc3","Thoc2","Thoc5","Thoc6","Thoc7","Thop1","Thpol1","Thpo","Thrap3","Thra","Thrb","Thrsp","Thsd1","Thsd4","Thsd7a","Thsd7b","Thtpa","Thumpd1","Thumpd2","Thumpd3","Thumpd3-as1","Thyn1","Thy1","Tia1","Tial1","Tiam1","Tiam2","Ticam1","Ticam2","Ticrr","Tie1","Tifa","Tifab","Tigar","Tigd2","Tigd3","Tigd4","Tigd5","Tigit","Timd2","Timd4","Timeless","Timm10","Timm13","Timm10b","Timm17al1","Timm17a","Timm17b","Timm21","Timm22","Timm23","Timm23b","Timm29","Timm44","Timm50","Timm8a1","Timm8a2","Timm8b","Timm9","Timmdc1","Timp1","Timp2","Timp4","Timp3","Tinag","Tinagl1","Tincr","Tinf2","Tiparp","Tipin-ps1","Tipin","Tipinl1","Tiprl","Tirap","Tjap1","Tjp2","Tjp1","Tjp3","Tk1","Tk2","Tkfc","Tkt","Tktl1","Tktl2","Tlcd1","Tlcd2","Tldc1","Tldc2","Tle1","Tle2","Tle3","Tle4","Tle6","Tlk1","Tlk2","Tll1","Tll2","Tln1","Tln2","Tlnrd1","Tlr1","Tlr10","Tlr11","Tlr12","Tlr13","Tlr3","Tlr2","Tlr4","Tlr5","Tlr6","Tlr7","Tlr8","Tlx1","Tlr9","Tlx2","Tlx3","Tm2d1","Tm2d3","Tm2d2","Tm4sf19","Tm4sf1","Tm4sf20","Tm4sf4","Tm4sf5","Tm6sf1","Tm6sf2","Tm7sf2","Tm7sf3","Tm9sf1","Tm9sf2","Tm9sf3","Tm9sf4","Tma16","Tma7","Tmbim1","Tmbim4","Tmbim6","Tmbim7","Tmc1","Tmc2","Tmc3","Tmc4","Tmc4b","Tmc5","Tmc6","Tmc7","Tmc8","Tmcc1","Tmcc2","Tmco1","Tmcc3","Tmco2","Tmco3","Tmco4","Tmco5a","Tmco5b","Tmco6","Tmed1","Tmed10","Tmed11","Tmed2","Tmed3","Tmed4","Tmed5","Tmed6","Tmed7","Tmed8","Tmed9","Tmeff1","Tmeff2","Tmem100","Tmem101","Tmem102","Tmem105","Tmem104","Tmem106a","Tmem106b","Tmem106c","Tmem107","Tmem108","Tmem109","Tmem11","Tmem110","Tmem114","Tmem115","Tmem116","Tmem117","Tmem119","Tmem120a","Tmem120b","Tmem121","Tmem121b","Tmem123","Tmem125","Tmem126a","Tmem126b","Tmem127","Tmem128","Tmem129","Tmem130","Tmem131","Tmem132a","Tmem132b","Tmem132c","Tmem132e","Tmem132d","Tmem134","Tmem135","Tmem136","Tmem138","Tmem139","Tmem140","Tmem141","Tmem144","Tmem143","Tmem145","Tmem147","Tmem14a","Tmem14c","Tmem150a","Tmem150b","Tmem150c","Tmem151a","Tmem151b","Tmem154","Tmem156","Tmem158","Tmem159","Tmem160","Tmem161a","Tmem161b","Tmem163","Tmem164","Tmem165","Tmem167a","Tmem167b","Tmem168","Tmem169","Tmem17","Tmem170a","Tmem170b","Tmem171","Tmem173","Tmem174","Tmem175","Tmem176a","Tmem176b","Tmem177","Tmem178a","Tmem178b","Tmem179","Tmem179b","Tmem18","Tmem181","Tmem182","Tmem183a","Tmem184a","Tmem184b","Tmem184c","Tmem185a","Tmem185b","Tmem186","Tmem189","Tmem19","Tmem190","Tmem191c","Tmem192","Tmem196","Tmem198","Tmem198b","Tmem199","Tmem2","Tmem200a","Tmem200b","Tmem200c","Tmem201","Tmem202","Tmem203","Tmem204","Tmem205","Tmem206","Tmem207","Tmem208","Tmem209","Tmem210","Tmem211","Tmem212","Tmem213","Tmem214","Tmem215","Tmem216","Tmem217","Tmem218","Tmem219","Tmem220","Tmem221","Tmem222","Tmem223","Tmem225","Tmem229a","Tmem229b","Tmem230","Tmem231","Tmem232","Tmem233","Tmem234","Tmem235","Tmem236","Tmem238","Tmem237","Tmem239","Tmem240","Tmem241","Tmem242","Tmem243","Tmem245","Tmem246","Tmem247","Tmem249","Tmem248","Tmem25","Tmem250","Tmem251","Tmem252","Tmem253","Tmem254","Tmem255a","Tmem255b","Tmem256","Tmem258","Tmem258b","Tmem259","Tmem26","Tmem262","Tmem260","Tmem265","Tmem263","Tmem266","Tmem267","Tmem268","Tmem269","Tmem270","Tmem27","Tmem30b","Tmem30a","Tmem30c","Tmem33","Tmem35a","Tmem35b","Tmem37","Tmem38a","Tmem38b","Tmem39a","Tmem39b","Tmem40","Tmem41a","Tmem41b","Tmem42","Tmem43","Tmem44","Tmem45a","Tmem45al","Tmem45b","Tmem47","Tmem5","Tmem50a","Tmem50b","Tmem51","Tmem52","Tmem52b","Tmem53","Tmem54","Tmem56","Tmem57","Tmem59","Tmem59l","Tmem60","Tmem61","Tmem62","Tmem63a","Tmem63b","Tmem63c","Tmem64","Tmem65","Tmem67","Tmem68","Tmem69","Tmem70","Tmem71","Tmem72","Tmem74","Tmem74b","Tmem74bos","Tmem79","Tmem80","Tmem81","Tmem82","Tmem86a","Tmem86b","Tmem87a","Tmem87b","Tmem88","Tmem88b","Tmem89","Tmem8a","Tmem8b","Tmem9","Tmem91","Tmem92","Tmem95","Tmem97","Tmem98","Tmem9b","Tmf1","Tmie","Tmigd1","Tmigd3","Tmlhe","Tmod1","Tmod2","Tmod3","Tmod4","Tmpo","Tmppe","Tmprss11a","Tmprss11b","Tmprss11c","Tmprss11d","Tmprss11e","Tmprss11f","Tmprss11g","Tmprss12","Tmprss13","Tmprss15","Tmprss2","Tmprss3","Tmprss4","Tmprss5","Tmprss6","Tmprss7","Tmprss9","Tmsb10","Tmsb15b2","Tmtc1","Tmsb4x","Tmtc3","Tmtc2","Tmub1","Tmtc4","Tmx1","Tmub2","Tmx2","Tmx3","Tmx4","Tnc","Tnfaip1","Tnfaip2","Tnfaip3","Tnfaip6","Tnfaip8","Tnfaip8l1","Tnfaip8l2","Tnf","Tnfaip8l3","Tnfrsf10b","Tnfrsf11a","Tnfrsf11b","Tnfrsf12a","Tnfrsf13b","Tnfrsf13c","Tnfrsf14","Tnfrsf17","Tnfrsf18","Tnfrsf19","Tnfrsf1b","Tnfrsf1a","Tnfrsf21","Tnfrsf22","Tnfrsf25","Tnfrsf26","Tnfrsf4","Tnfrsf8","Tnfrsf9","Tnfsf10","Tnfsf11","Tnfsf12","Tnfsf13","Tnfsf13b","Tnfsf14","Tnfsf15","Tnfsf18","Tnfsf4","Tnfsf8","Tnfsf9","Tnik","Tnip1","Tnip2","Tnip3","Tnk1","Tnk2","Tnks","Tnks1bp1","Tnks2","Tnmd","Tnn","Tnnc1","Tnnc2","Tnni1","Tnni2","Tnni3","Tnni3k","Tnnt1","Tnnt2","Tnnt3","Tnp1","Tnp2","Tnpo1","Tnpo2","Tnpo3","Tnrc18","Tnr","Tnrc6a","Tnrc6b","Tnrc6c","Tns1","Tns2","Tns3","Tns4","Tnxa-ps1","Tnxb","Tob1","Tob2","Toe1","Togaram1","Togaram2","Tollip","Tom1","Tom1l1","Tom1l2","Tomm20l","Tomm20","Tomm22","Tomm34","Tomm40l","Tomm40","Tomm5","Tomm6","Tomm7","Tomm70","Tonsl","Top1","Top1mt","Top2b","Top2a","Top3a","Top3b","Topaz1","Topbp1","Topors","Tor1a","Tor1aip1","Tor1aip2","Tor1b","Tor2a","Tor3a","Tor4a","Tore","Tox","Tox2","Tox3","Tox4","Tp53bp2","Tp53bp1","Tp53i11","Tp53i3","Tp53i13","Tp53inp2","Tp53rk","Tp53tg5","Tp53inp1","Tpbgl","Tpbpa","Tpbg","Tp63","Tp73","Tpc1808","Tpcr12","Tpcn1","Tpcn2","Tpd52","Tpd52l1","Tp53","Tpgs1","Tpd52l3","Tpd52l2","Tpgs2","Tph2","Tph1","Tpi1","Tpk1","Tpm3_v1","Tpm2","Tpm4","Tpmt","Tpm1","Tpm3","Tpo","Tpp2","Tppp","Tpp1","Tppp2","Tppp3","Tprg1","Tpra1","Tprg1l","Tpr","Tprn","Tprkb","Tpsb2","Tpsg1","Tpsab1","Tpst1","Tpst2","Tpte2","Tpx2","Tra2a","Tpt1","Tra2b","Trabd","Trabd2b","Tradd","Traf1","Traf3ip1","Traf2","Traf3","Traf3ip2","Traf3ip3","Traf5","Traf4","Traf6","Traf7","Trafd1","Traip","Trak1","Tram1l1","Trak2","Tram1","Tram2","Trank1","Trap1","Trap1a","Trappc1","Trappc10","Trappc12","Trappc11","Trappc2","Trappc13","Trappc2b","Trappc2l","Trappc3","Trappc3l","Trappc5","Trappc4","Trappc6a","Trappc6b","Trappc8","Trat1","Trappc9","Trav14s2","Trav12-3","Trav22","Treh","Trem1","Trdmt1","Trem2","Trdn","Trem3","Treml1","Treml4","Treml2","Trex1","Trerf1","Trex2","Trg","Triap1","Trhde","Trhr","Trib1","Trh","Trib2","Tril","Trim10","Trib3","Trim13","Trim11","Trim14","Trim15-ps1","Trim15","Trim16","Trim17","Trim2","Trim21","Trim24","Trim23","Trim25","Trim29","Trim26","Trim27","Trim3","Trim28","Trim30","Trim31","Trim30c","Trim34","Trim32","Trim33","Trim35","Trim36","Trim38","Trim39-ps","Trim39","Trim40","Trim43a","Trim37","Trim42","Trim41","Trim44","Trim45","Trim47","Trim46","Trim50","Trim5","Trim52","Trim54","Trim58","Trim55","Trim60","Trim59","Trim6","Trim62","Trim65","Trim66","Trim63","Trim67","Trim68","Trim7","Trim69","Trim8","Trim72","Trim71","Trim80","Triml1","Triml2","Trim9","Triobp","Trip10","Trip11","Trio","Trip13","Trip6","Trip12","Trip4","Triqk","Trir","Trit1","Trmo","Trmt1","Trmt10a","Trmt10b","Trmt10c","Trmt11","Trmt112","Trmt12","Trmt13","Trmt1l","Trmt2b","Trmt2a","Trmt5","Trmt44","Trmt6","Trmt61a","Trnaa-agc1","Trmu","Trnaa-agc10","Trnaa-agc11","Trnaa-agc13","Trnaa-agc12","Trnaa-agc15","Trnaa-agc14","Trnaa-agc16","Trnaa-agc17","Trnaa-agc19","Trnaa-agc18","Trnaa-agc2","Trnaa-agc20","Trnaa-agc3","Trnaa-agc4","Trnaa-agc5","Trnaa-agc6","Trnaa-agc7","Trnaa-agc8","Trnaa-agc9","Trnaa-cgc1","Trnaa-cgc2","Trnaa-cgc3","Trnaa-cgc4","Trnaa-ggc1","Trnaa-ugc1","Trnaa-ugc2","Trnaa-ugc3","Trnaa-ugc","Trnaa-ugc4","Trnaa-ugc5","Trnaa-ugc6","Trnaa-ugc7","Trnaa-ugc8","Trnaa-ugc9","Trnac-gca1","Trnac-gca10","Trnac-gca11","Trnac-gca12","Trnac-gca13","Trnac-gca","Trnac-gca14","Trnac-gca15","Trnac-gca16","Trnac-gca17","Trnac-gca18","Trnac-gca19","Trnac-gca2","Trnac-gca20","Trnac-gca21","Trnac-gca22","Trnac-gca23","Trnac-gca24","Trnac-gca25","Trnac-gca26","Trnac-gca27","Trnac-gca28","Trnac-gca29","Trnac-gca3","Trnac-gca30","Trnac-gca31","Trnac-gca32","Trnac-gca33","Trnac-gca34","Trnac-gca35","Trnac-gca36","Trnac-gca37","Trnac-gca38","Trnac-gca39","Trnac-gca4","Trnac-gca5","Trnac-gca6","Trnac-gca7","Trnac-gca8","Trnac-gca9","Trnad-guc1","Trnad-guc10","Trnad-guc11","Trnad-guc13","Trnad-guc12","Trnad-guc14","Trnad-guc2","Trnad-guc3","Trnad-guc4","Trnad-guc5","Trnad-guc6","Trnad-guc7","Trnad-guc8","Trnad-guc9","Trnae-cuc1","Trnae-cuc2","Trnae-cuc3","Trnae-cuc4","Trnae-cuc5","Trnae-cuc6","Trnae-cuc7","Trnae-cuc8","Trnae-cuc9","Trnae-uuc1","Trnae-uuc10","Trnae-uuc2","Trnae-uuc3","Trnae-uuc4","Trnae-uuc5","Trnae-uuc6","Trnae-uuc7","Trnae-uuc8","Trnae-uuc9","Trnaf-gaa1","Trnaf-gaa2","Trnaf-gaa3","Trnaf-gaa4","Trnaf-gaa5","Trnaf-gaa6","Trnaf-gaa7","Trnaf-gaa8","Trnag-ccc1","Trnag-ccc3","Trnag-ccc2","Trnag-ccc4","Trnag-ccc5","Trnag-gcc1","Trnag-gcc10","Trnag-gcc11","Trnag-gcc2","Trnag-gcc3","Trnag-gcc4","Trnag-gcc5","Trnag-gcc6","Trnag-gcc7","Trnag-gcc8","Trnag-gcc9","Trnag-ucc","Trnag-ucc1","Trnag-ucc2","Trnag-ucc3","Trnag-ucc4","Trnag-ucc5","Trnag-ucc6","Trnag-ucc7","Trnag-ucc8","Trnag-ucc9","Trnah-gug10","Trnah-gug1","Trnah-gug11","Trnah-gug2","Trnah-gug3","Trnah-gug4","Trnah-gug5","Trnah-gug6","Trnah-gug7","Trnah-gug8","Trnah-gug9","Trnai-aau1","Trnai-aau10","Trnai-aau11","Trnai-aau2","Trnai-aau3","Trnai-aau4","Trnai-aau5","Trnai-aau6","Trnai-aau7","Trnai-aau8","Trnai-aau9","Trnai-uau1","Trnai-uau2","Trnai-uau3","Trnak-cuu1","Trnak-cuu","Trnak-cuu10","Trnak-cuu11","Trnak-cuu12","Trnak-cuu13","Trnak-cuu14","Trnak-cuu15","Trnak-cuu16","Trnak-cuu17","Trnak-cuu18","Trnak-cuu2","Trnak-cuu3","Trnak-cuu4","Trnak-cuu5","Trnak-cuu6","Trnak-cuu7","Trnak-cuu8","Trnak-cuu9","Trnak-uuu","Trnak-uuu1","Trnak-uuu2","Trnak-uuu3","Trnak-uuu4","Trnak-uuu5","Trnak-uuu6","Trnak-uuu7","Trnak-uuu8","Trnak-uuu9","Trnal-aag1","Trnal-aag2","Trnal-aag3","Trnal-aag4","Trnal-aag5","Trnal-aag6","Trnal-caa2","Trnal-caa1","Trnal-caa3","Trnal-cag1","Trnal-cag10","Trnal-cag2","Trnal-cag3","Trnal-cag4","Trnal-cag5","Trnal-cag6","Trnal-cag7","Trnal-cag9","Trnal-cag8","Trnal-uaa1","Trnal-uaa2","Trnal-uag1","Trnal-uag2","Trnal-uag3","Trnam-cau1","Trnam-cau10","Trnam-cau11","Trnam-cau12","Trnam-cau13","Trnam-cau2","Trnam-cau3","Trnam-cau4","Trnam-cau5","Trnam-cau6","Trnam-cau7","Trnam-cau8","Trnam-cau9","Trnan-guu","Trnan-guu1","Trnan-guu10","Trnan-guu11","Trnan-guu12","Trnan-guu13","Trnan-guu2","Trnan-guu3","Trnan-guu4","Trnan-guu5","Trnan-guu6","Trnan-guu7","Trnan-guu8","Trnan-guu9","Trnan1","Trnap-agg","Trnap-agg1","Trnap-agg10","Trnap-agg11","Trnap-agg13","Trnap-agg12","Trnap-agg14","Trnap-agg15","Trnap-agg16","Trnap-agg17","Trnap-agg18","Trnap-agg2","Trnap-agg3","Trnap-agg4","Trnap-agg5","Trnap-agg6","Trnap-agg7","Trnap-agg8","Trnap-agg9","Trnap-cgg1","Trnap-cgg2","Trnap-cgg3","Trnap-ugg","Trnap-ugg1","Trnap-ugg2","Trnap-ugg4","Trnap-ugg3","Trnap-ugg5","Trnap-ugg6","Trnaq-cug1","Trnaq-cug","Trnaq-cug10","Trnaq-cug2","Trnaq-cug3","Trnaq-cug4","Trnaq-cug5","Trnaq-cug6","Trnaq-cug7","Trnaq-cug8","Trnaq-cug9","Trnaq-uug1","Trnaq-uug2","Trnaq-uug3","Trnaq-uug4","Trnaq-uug5","Trnar-acg1","Trnar-acg2","Trnar-acg3","Trnar-acg4","Trnar-acg5","Trnar-acg6","Trnar-ccg1","Trnar-ccg2","Trnar-ccg3","Trnar-ccu","Trnar-ccu1","Trnar-ccu2","Trnar-ccu3","Trnar-ccu4","Trnar-ccu5","Trnar-ccu6","Trnar-ccu7","Trnar-ccu8","Trnar-ccu9","Trnar-ucg1","Trnar-ucg2","Trnar-ucg3","Trnar-ucg4","Trnar-ucg5","Trnar-ucu1","Trnar-ucu2","Trnar-ucu3","Trnar-ucu4","Trnar-ucu5","Trnar-ucu6","Trnar-ucu7","Trnas-aga1","Trnas-aga10","Trnas-aga11","Trnas-aga2","Trnas-aga3","Trnas-aga4","Trnas-aga5","Trnas-aga6","Trnas-aga7","Trnas-aga8","Trnas-aga9","Trnas-cga1","Trnas-cga2","Trnas-cga3","Trnas-gcu","Trnas-gcu1","Trnas-gcu10","Trnas-gcu11","Trnas-gcu2","Trnas-gcu3","Trnas-gcu4","Trnas-gcu5","Trnas-gcu6","Trnas-gcu7","Trnas-gcu8","Trnas-gcu9","Trnas-uga1","Trnas-uga2","Trnas-uga3","Trnas-uga4","Trnat-agu","Trnat-agu1","Trnat-agu2","Trnat-agu3","Trnat-agu4","Trnat-agu5","Trnat-agu6","Trnat-agu7","Trnat-agu8","Trnat-cgu1","Trnat-cgu2","Trnat-cgu3","Trnat-cgu4","Trnat-cgu5","Trnat-ugu1","Trnat-ugu2","Trnat-ugu3","Trnat-ugu4","Trnat-ugu5","Trnav-aac1","Trnau1ap","Trnav-aac2","Trnav-aac3","Trnav-aac4","Trnav-aac5","Trnav-aac6","Trnav-aac7","Trnav-cac1","Trnav-cac2","Trnav-cac3","Trnav-cac4","Trnav-cac5","Trnav-cac6","Trnav-cac7","Trnav-cac8","Trnav-uac1","Trnav-uac2","Trnav-uac3","Trnav-uac4","Trnaw-cca1","Trnaw-cca2","Trnaw-cca3","Trnaw-cca4","Trnaw-cca5","Trnaw-cca6","Trnaw-cca7","Trnaw-cca8","Trnay-gua1","Trnay-gua2","Trnay-gua3","Trnay-gua4","Trnay-gua5","Trnay-gua6","Trnay-gua7","Trnay-gua8","Trnp1","Trnt1","Trnt1-ps1","Tro","Troap","Trove2","Trpa1","Trpc1","Trpc2","Trpc3","Trpc4ap","Trpc4","Trpc5os","Trpc5","Trpc7","Trpc6","Trpm1","Trpm2","Trpm3","Trpm4","Trpm5","Trpm6","Trpm7","Trpm8","Trps1","Trpt1","Trpv2","Trpv3","Trpv1","Trpv4","Trpv5","Trrap","Trpv6","Trub2","Trub1","Trub2-ps1","Trub2-ps2","Try10","Try5","Tryx5","Tsacc","Tsc1","Tsc2","Tsc22d1","Tsc22d2","Tsc22d3","Tsc22d4","Tsen15","Tsen2","Tsen34l1","Tsen34","Tsen54","Tsfm","Tsga10","Tsg101","Tsga10ip","Tsga13","Tshb","Tshr","Tshz1","Tshz2","Tshz3","Tsks","Tsku","Tslp","Tsn","Tsnax","Tsnaxip1","Tspan10","Tspan1","Tspan11","Tspan12","Tspan13","Tspan14","Tspan15","Tspan17","Tspan18","Tspan2","Tspan3","Tspan31","Tspan32","Tspan33","Tspan4","Tspan5","Tspan6","Tspan7","Tspan8","Tspan9","Tspear","Tspo","Tspo2","Tspy1","Tspoap1","Tspy26","Tspyl1","Tspyl2","Tspyl4","Tspyl5","Tsr1","Tsr2","Tsr3","Tssc4","Tssk1b","Tssk2","Tssk3","Tssk4","Tssk5","Tssk6","Tst","Tsta3","Tstd1","Tstd2","Tstd3","Tsx","Ttbk1","Ttbk2","Ttc1","Ttc12","Ttc13","Ttc14","Ttc16","Ttc17","Ttc19","Ttc21a","Ttc21b","Ttc22","Ttc23","Ttc23l","Ttc24","Ttc25","Ttc26","Ttc27","Ttc28","Ttc29","Ttc30a","Ttc3","Ttc30a1","Ttc30b","Ttc32","Ttc33","Ttc34","Ttc36","Ttc38","Ttc37","Ttc39b","Ttc39a","Ttc39d","Ttc39c","Ttc5","Ttc4","Ttc6","Ttc7a","Ttc7b","Ttc9","Ttc8","Ttc9b","Ttc9c","Ttf1","Ttf2","Tti1","Tti2","Ttl","Ttk","Ttll1","Ttll10","Ttll11","Ttll12","Ttll2","Ttll13","Ttll4","Ttll3","Ttll6","Ttll5","Ttll7","Ttll8","Ttll9","Ttn","Ttpa","Ttpal","Ttyh1","Ttr","Ttyh2","Ttyh3","Tub","Tuba1b","Tuba1a","Tuba1c","Tuba3a","Tuba3b","Tuba4a","Tuba8","Tubal3","Tubb1","Tubb2a","Tubb2b","Tubb3","Tubb4a","Tubb4b","Tubb5","Tubd1","Tubb6","Tube1","Tubg1","Tubg2","Tubgcp2","Tubgcp3","Tubgcp4","Tubgcp5","Tubgcp6","Tufm","Tuft1","Tug1","Tulp1","Tulp2","Tulp3","Tulp4","Tusc2","Tusc3","Tusc5","Tut1","Tvp23a","Tvp23b","Twf1","Twf2","Twf2-ps1","Twist1","Twist2","Twistnb","Twnk","Twsg1","Txlna","Txk","Txlnb","Txlng","Txn2","Txn1","Txndc11","Txndc12","Txndc15","Txndc16","Txndc17","Txndc2","Txndc5","Txndc8","Txndc9","Txnip","Txnl1","Txnl4a","Txnl4b","Txnrd1","Txnrd2","Txnrd3","Tyk2","Tymp","Tyms","Tyr","Tyro3","Tyrobp","Tyrp1","Tysnd1","Tyw1","Tyw3","Tyw5","U2af1","U2af1l4","U2af2","U2surp","Uaca","Uap1","Uap1l1","Uap1l2","Uba1","Uba1y","Uba2-ps1","Uba2","Uba3","Uba52","Uba5","Uba6","Uba7","Ubac1","Ubac2","Ubald1","Ubald2","Ubap1","Ubap1l","Ubap2","Ubap2l","Ubash3a","Ubash3b","Ubbp4","Ubb","Ubd","Ubc","Ube2a","Ube2b","Ube2c","Ube2d1","Ube2d2","Ube2d3","Ube2d4","Ube2d4l1","Ube2e1","Ube2e2","Ube2e3","Ube2f","Ube2g1","Ube2g2","Ube2h","Ube2i","Ube2j1","Ube2j2","Ube2k","Ube2l3","Ube2l6","Ube2m","Ube2n","Ube2o","Ube2q1","Ube2q2","Ube2q2l","Ube2ql1","Ube2s","Ube2r2","Ube2t","Ube2u","Ube2v1","Ube2v2","Ube2w","Ube2z","Ube3a","Ube3b","Ube3c","Ube3d","Ube4a","Ube4b","Ubfd1","Ubiad1","Ubl3","Ubl4b","Ubl4a","Ubl5","Ubl7","Ublcp1","Ubn1","Ubn2","Ubox5","Ubp1","Ubqln1","Ubqln2","Ubqln3","Ubqln4","Ubqlnl","Ubr1","Ubr2","Ubr3","Ubr5","Ubr4","Ubr7","Ubtd1","Ubtd2","Ubtfl1","Ubtf","Ubxn10","Ubxn1","Ubxn2a","Ubxn11","Ubxn2b","Ubxn4","Ubxn7","Ubxn6","Ubxn8","Uchl1","Uchl3","Uchl3-ps1","Uck1","Uchl5","Uck2","Uckl1","Ucma","Ucn","Ucn2","Ucn3","Ucp1","Ucp2","Ucp3","Uevld","Ufc1","Ufd1","Ufl1","Ufm1","Ufsp1","Ufsp2","Ugcg","Uggt1","Ugdh","Uggt2","Ugp2","Ugt1a2","Ugt1a1","Ugt1a4-ps","Ugt1a3","Ugt1a5","Ugt1a6","Ugt1a7c","Ugt1a8","Ugt1a9","Ugt1a9-ps","Ugt2a1","Ugt2a3","Ugt2b10","Ugt2b","Ugt2b17","Ugt2b15","Ugt2b35","Ugt2b37","Ugt2b7","Ugt3a2","Ugt8","Uhmk1","Uhrf1","Uhrf1bp1","Uhrf1bp1l","Uhrf2","Uimc1","Ulk1","Ulk2","Ulk3","Ulk4","Umodl","Umod","Umodl1","Umps","Unc119","Unc119b","Unc13a","Unc13b","Unc13c","Unc13d","Unc45a","Unc45b","Unc50","Unc5a","Unc5b","Unc5cl","Unc5c","Unc5d","Unc79","Unc80","Unc93a","Unc93b1","Uncx","Ung","Unk","Unkl","Uox","Upb1","Upf1","Upf2","Upf3a","Upf3b","Upk1a","Upk1b","Upk2","Upk3a","Upk3b","Upk3bl1","Upp2","Upp1","Uprt","Uqcc1","Uqcc2","Uqcc3","Uqcr10","Uqcr11","Uqcrb-ps1","Uqcrb","Uqcrc1","Uqcrc2","Uqcrfs1","Uqcrh","Urad","Uqcrq","Urb1","Urb2","Urgcp","Uri1","Urm1","Uroc1","Urod","Uros","Usb1","Use1","Usf1","Usf2","Usf3","Ush1c","Ush1g","Ushbp1","Usmg5","Ush2a","Uso1","Usp1","Usp10","Usp11","Usp12","Usp13","Usp14","Usp15","Usp16","Usp17l5","Usp18","Usp19","Usp2","Usp20","Usp21","Usp22","Usp24","Usp25","Usp26","Usp27x","Usp28","Usp29","Usp3","Usp30","Usp31","Usp32","Usp33","Usp34","Usp35","Usp36","Usp37","Usp38","Usp39","Usp4","Usp40","Usp42","Usp43","Usp44","Usp45","Usp46","Usp47","Usp48","Usp49","Usp5","Usp50","Usp51","Usp53","Usp54","Usp6nl","Usp7","Usp8","Usp9y","Usp9x","Uspl1","Ust","UST4r","Utf1","Ust5r","Utp11","Utp14a","Utp15","Utp18","Utp20","Utp23","Utp3","Utp4","Utp6","Uts2","Utrn","Uts2b","Uts2r","Uty","Uvrag","Uvssa","Uxt","Uxs1","V1ra14","Vac14","Vamp1","Vamp3","Vamp2","Vamp4","Vamp5","Vamp7","Vamp8","Vangl1","Vangl2","Vapa","Vapb","Vars","Vars2","Vash1","Vash2","Vasn","Vasp","Vat1","Vat1l","Vav1","Vav2","Vav3","Vax1","Vax2","Vbp1","Vcan","Vcam1","Vcl","Vcp","Vcpip1","Vcpkmt","Vcsa2","Vdac1","Vdac2","Vdac3","Vdr","Vegfb","Vegfa","Vegfc","Vegfd","Vegp2","Veph1","Vezf1","Vezt","Vgf","Vgll1","Vgll2","Vgll3","Vgll4","Vhl","Vhll","Vil1","Vill","Vim","Vip","Vipas39","Vipr1","Vipr2","Virma","Vit","Vkorc1","Vkorc1l1","Vma21","Vldlr","Vmac","Vmo1","Vmp1","Vnn1","Vnn3","Vof16","Vom1r-ps1","Vom1r-ps10","Vom1r-ps100","Vom1r-ps101","Vom1r-ps102","Vom1r-ps103","Vom1r-ps104","Vom1r-ps105","Vom1r-ps106","Vom1r-ps107","Vom1r-ps108","Vom1r-ps11","Vom1r-ps110","Vom1r-ps111","Vom1r-ps112","Vom1r-ps12","Vom1r-ps13","Vom1r-ps14","Vom1r-ps15","Vom1r-ps16","Vom1r-ps17","Vom1r-ps18","Vom1r-ps19","Vom1r-ps2","Vom1r-ps20","Vom1r-ps21","Vom1r-ps22","Vom1r-ps23","Vom1r-ps24","Vom1r-ps25","Vom1r-ps26","Vom1r-ps27","Vom1r-ps28","Vom1r-ps29","Vom1r-ps3","Vom1r-ps30","Vom1r-ps31","Vom1r-ps32","Vom1r-ps33","Vom1r-ps34","Vom1r-ps35","Vom1r-ps36","Vom1r-ps37","Vom1r-ps38","Vom1r-ps4","Vom1r-ps40","Vom1r-ps41","Vom1r-ps43","Vom1r-ps42","Vom1r-ps44","Vom1r-ps45","Vom1r-ps46","Vom1r-ps47","Vom1r-ps48","Vom1r-ps49","Vom1r-ps5","Vom1r-ps50","Vom1r-ps51","Vom1r-ps52","Vom1r-ps53","Vom1r-ps54","Vom1r-ps55","Vom1r-ps56","Vom1r-ps57","Vom1r-ps58","Vom1r-ps59","Vom1r-ps6","Vom1r-ps60","Vom1r-ps61","Vom1r-ps62","Vom1r-ps63","Vom1r-ps64","Vom1r-ps65","Vom1r-ps66","Vom1r-ps68","Vom1r-ps67","Vom1r-ps69","Vom1r-ps7","Vom1r-ps70","Vom1r-ps71","Vom1r-ps72","Vom1r-ps73","Vom1r-ps74","Vom1r-ps75","Vom1r-ps76","Vom1r-ps77","Vom1r-ps78","Vom1r-ps79","Vom1r-ps8","Vom1r-ps80","Vom1r-ps81","Vom1r-ps82","Vom1r-ps83","Vom1r-ps84","Vom1r-ps85","Vom1r-ps86","Vom1r-ps87","Vom1r-ps88","Vom1r-ps89","Vom1r-ps9","Vom1r-ps90","Vom1r-ps92","Vom1r-ps91","Vom1r-ps93","Vom1r-ps94","Vom1r-ps95","Vom1r-ps96","Vom1r-ps97","Vom1r-ps98","Vom1r-ps99","Vom1r1","Vom1r10","Vom1r100","Vom1r101","Vom1r102","Vom1r103","Vom1r104","Vom1r105","Vom1r106","Vom1r107","Vom1r108","Vom1r109","Vom1r11","Vom1r110","Vom1r111","Vom1r12","Vom1r13","Vom1r14","Vom1r15","Vom1r16","Vom1r17","Vom1r19","Vom1r2","Vom1r20","Vom1r21","Vom1r22","Vom1r23","Vom1r24","Vom1r25","Vom1r26","Vom1r27","Vom1r28","Vom1r3","Vom1r29","Vom1r30","Vom1r31","Vom1r32","Vom1r33","Vom1r34","Vom1r35","Vom1r36","Vom1r37","Vom1r38","Vom1r39","Vom1r4","Vom1r40","Vom1r41","Vom1r42","Vom1r43","Vom1r44","Vom1r45","Vom1r46","Vom1r47","Vom1r48","Vom1r49","Vom1r5","Vom1r50","Vom1r51","Vom1r52","Vom1r53","Vom1r54","Vom1r55","Vom1r56","Vom1r58","Vom1r57","Vom1r59","Vom1r6","Vom1r60","Vom1r61","Vom1r62","Vom1r63","Vom1r64","Vom1r65","Vom1r66","Vom1r67","Vom1r68","Vom1r69","Vom1r7","Vom1r70","Vom1r71","Vom1r72","Vom1r73","Vom1r74","Vom1r75","Vom1r76","Vom1r77","Vom1r78","Vom1r79","Vom1r8","Vom1r80","Vom1r81","Vom1r82","Vom1r83","Vom1r84","Vom1r85","Vom1r86","Vom1r87","Vom1r88","Vom1r89","Vom1r9","Vom1r92","Vom1r90","Vom1r93","Vom1r94","Vom1r95","Vom1r96","Vom1r97","Vom1r98","Vom2r-ps1","Vom1r99","Vom2r-ps10","Vom2r-ps100","Vom2r-ps101","Vom2r-ps103","Vom2r-ps104","Vom2r-ps105","Vom2r-ps106","Vom2r-ps107","Vom2r-ps108","Vom2r-ps109","Vom2r-ps110","Vom2r-ps11","Vom2r-ps111","Vom2r-ps112","Vom2r-ps113","Vom2r-ps114","Vom2r-ps115","Vom2r-ps116","Vom2r-ps117","Vom2r-ps118","Vom2r-ps119","Vom2r-ps12","Vom2r-ps120","Vom2r-ps121","Vom2r-ps122","Vom2r-ps123","Vom2r-ps124","Vom2r-ps125","Vom2r-ps126","Vom2r-ps127","Vom2r-ps128","Vom2r-ps129","Vom2r-ps13","Vom2r-ps130","Vom2r-ps131","Vom2r-ps132","Vom2r-ps133","Vom2r-ps136","Vom2r-ps135","Vom2r-ps137","Vom2r-ps138","Vom2r-ps14","Vom2r-ps140","Vom2r-ps141","Vom2r-ps142","Vom2r-ps15","Vom2r-ps16","Vom2r-ps17","Vom2r-ps18","Vom2r-ps19","Vom2r-ps20","Vom2r-ps22","Vom2r-ps23","Vom2r-ps24","Vom2r-ps25","Vom2r-ps26","Vom2r-ps28","Vom2r-ps27","Vom2r-ps3","Vom2r-ps30","Vom2r-ps31","Vom2r-ps32","Vom2r-ps33","Vom2r-ps34","Vom2r-ps35","Vom2r-ps36","Vom2r-ps37","Vom2r-ps38","Vom2r-ps39","Vom2r-ps4","Vom2r-ps40","Vom2r-ps41","Vom2r-ps42","Vom2r-ps43","Vom2r-ps44","Vom2r-ps46","Vom2r-ps45","Vom2r-ps47","Vom2r-ps48","Vom2r-ps49","Vom2r-ps5","Vom2r-ps50","Vom2r-ps51","Vom2r-ps52","Vom2r-ps53","Vom2r-ps54","Vom2r-ps55","Vom2r-ps56","Vom2r-ps57","Vom2r-ps59","Vom2r-ps61","Vom2r-ps60","Vom2r-ps62","Vom2r-ps63","Vom2r-ps64","Vom2r-ps65","Vom2r-ps66","Vom2r-ps67","Vom2r-ps69","Vom2r-ps7","Vom2r-ps70","Vom2r-ps71","Vom2r-ps72","Vom2r-ps74","Vom2r-ps75","Vom2r-ps76","Vom2r-ps77","Vom2r-ps78","Vom2r-ps79","Vom2r-ps8","Vom2r-ps82","Vom2r-ps84","Vom2r-ps83","Vom2r-ps85","Vom2r-ps86","Vom2r-ps87","Vom2r-ps88","Vom2r-ps89","Vom2r-ps9","Vom2r-ps90","Vom2r-ps91","Vom2r-ps92","Vom2r-ps93","Vom2r-ps94","Vom2r-ps95","Vom2r-ps96","Vom2r-ps97","Vom2r-ps98","Vom2r-ps99","Vom2r1","Vom2r10","Vom2r11","Vom2r12","Vom2r13","Vom2r15","Vom2r16","Vom2r17","Vom2r18","Vom2r19","Vom2r2","Vom2r21","Vom2r22","Vom2r23","Vom2r24","Vom2r25","Vom2r26","Vom2r27","Vom2r28","Vom2r29","Vom2r3","Vom2r30","Vom2r31","Vom2r32","Vom2r34","Vom2r33","Vom2r35","Vom2r36","Vom2r38","Vom2r37","Vom2r39","Vom2r4","Vom2r40","Vom2r41","Vom2r42","Vom2r43","Vom2r44","Vom2r45","Vom2r46","Vom2r47","Vom2r48","Vom2r49","Vom2r5","Vom2r50","Vom2r51","Vom2r52","Vom2r53","Vom2r54","Vom2r55","Vom2r56","Vom2r57","Vom2r58","Vom2r59","Vom2r6","Vom2r60","Vom2r62","Vom2r61","Vom2r63","Vom2r64","Vom2r65","Vom2r66","Vom2r67","Vom2r68","Vom2r69","Vom2r7","Vom2r70","Vom2r71","Vom2r72","Vom2r73","Vom2r75","Vom2r76","Vom2r77","Vom2r78","Vom2r79","Vom2r8","Vom2r80","Vom2r81","Vom2r9","Vopp1","Vpreb2","Vpreb1","Vpreb3","Vps11","Vps13b","Vps13a","Vps13c","Vps13d","Vps16","Vps18","Vps25","Vps26a","Vps26b","Vps28","Vps29","Vps33a","Vps33b","Vps35","Vps36","Vps37a","Vps37b","Vps37c","Vps37d","Vps39","Vps41","Vps45","Vps4a","Vps4b","Vps50","Vps51","Vps52","Vps53","Vps54","Vps54-ps1","Vps72","Vps8","Vps9d1","Vrk1","Vrk2","Vrk3","Vrtn","Vsig1","Vsig10","Vsig10l2","Vsig10l","Vsig2","Vsig4","Vsig8","Vsir","Vstm1","Vsnl1","Vstm2a","Vstm2b","Vstm2l","Vstm4","Vstm5","Vsx1","Vsx2","Vta1","Vtcn1","Vti1a","Vti1b","Vtn","Vwa1","Vwa2","Vwa3a","Vwa3b","Vwa5b1","Vwa5a","Vwa7","Vwa5b2","Vwc2","Vwa8","Vwc2l","Vwce","Vwde","Wac","Vwf","Wap","Wapl","Wars","Wars2","Was","Wasf1","Wasf2","Wasf3","Washc1","Washc2c","Washc3","Washc4","Washc5","Wbp1","Wasl","Wbp11","Wbp11l1","Wbp1l","Wbp2","Wbp2nl","Wbp4","Wdcp","Wdfy2","Wdfy1","Wdfy3","Wdfy4","Wdhd1","Wdpcp","Wdr1","Wdr11","Wdr12","Wdr13","Wdr17","Wdr18","Wdr19","Wdr20","Wdr24","Wdr25","Wdr26","Wdr27","Wdr3","Wdr33","Wdr31","Wdr34","Wdr35","Wdr36","Wdr37","Wdr38","Wdr4","Wdr41","Wdr43","Wdr44","Wdr45","Wdr45b","Wdr46","Wdr47","Wdr48","Wdr49","Wdr53","Wdr5","Wdr54","Wdr55","Wdr5b","Wdr59","Wdr6","Wdr60","Wdr61","Wdr62","Wdr63","Wdr64","Wdr65-ps1","Wdr66","Wdr7","Wdr70","Wdr72","Wdr73","Wdr74","Wdr75","Wdr76","Wdr78","Wdr81","Wdr77","Wdr82","Wdr83","Wdr83os","Wdr87","Wdr86","Wdr88","Wdr89","Wdr90","Wdr91","Wdr92","Wdr93","Wdr95","Wdr97","Wdr98","Wdsub1","Wdyhv1","Wdtc1","Wee1","Wee2","Wfdc10a","Wfdc11","Wfdc1","Wfdc13","Wfdc12","Wfdc15a","Wfdc15b","Wfdc16","Wfdc2","Wfdc18","Wfdc21","Wfdc3","Wfdc5","Wfdc6b","Wfdc6a","Wfdc9","Wfdc8","Wfikkn1","Wfikkn2","Wfs1","Whamm","Whrn","Wif1","Wipf1","Wipf2","Wipf3","Wipi1","Wipi2","Wisp1","Wisp2","Wisp3","Wiz","Wls","Wnk1","Wnk2","Wnk3","Wnk4","Wnt10b","Wnt10a","Wnt1","Wnt11","Wnt16","Wnt2b","Wnt2","Wnt3","Wnt3a","Wnt4","Wnt5a","Wnt5b","Wnt6","Wnt7a","Wnt7b","Wnt8b","Wnt8a","Wnt9a","Wnt9b","Wrap73","Wrap53","Wrb","Wrnip1","Wsb1","Wrn","Wsb2","Wscd2","Wscd1","Wt1","Wtip","Wtap","Wwc1","Wwc2","Wwc3","Wwox","Wwp1","Wwp2","Wwtr1","Xab2","Xaf1","Xcl1","Xbp1","Xcr1","Xirp1","Xiap","Xirp2","Xdh","Xkr4","Xk","Xkr5","Xkr7","Xkr8","Xkr9","Xkr6","Xkrx","Xlr3a","Xlr4a","Xpa","Xpnpep1","Xpc","Xpnpep2","Xpnpep3","Xpo4","Xpo1","Xpo5","Xpo6","Xpot","Xpo7","Xpr1","Xrcc2","Xrcc1","Xrcc3","Xrcc4","Xrcc5","Xrn1","Xrcc6","Xrn2","Xxylt1","Xrra1","Xylb","Xylt1","Xylt2","Yae1d1","Yaf2","Yars2","Yars","Yap1","Ybey","Ybx1-ps1","Ybx1-ps2","Ybx1-ps4","Ybx1-ps3","Ybx1","Ybx1-ps5","Ybx1-ps6","Ybx2","Ydjc","Ybx3","Yeats2","Yeats4","Yif1a","Yes1","Yif1b","Yipf1","Yipf2","Yipf4","Yipf3","Yipf5","Yipf6","Yipf7","Yjefn3","Ykt6","Ylpm1","Yme1l1","Yod1","Ypel1","Ypel3","Ypel2","Ypel4","Ypel5","Yrdc","Ythdc2","Ythdc1","Ythdf1","Ythdf2","Ythdf3","Ywhab","Ywhae","Ywhag","Ywhah","Ywhaq","Yy2","Yy1","Ywhaz","Zan","Zadh2","Zar1","Zap70","Zar1l","Zbed2","Zbbx","Zbed3","Zbed4","Zbed6","Zbed5","Zbp1","Zbtb1","Zbtb11","Zbtb10","Zbtb11os1","Zbtb12","Zbtb18","Zbtb17","Zbtb2","Zbtb16","Zbtb21","Zbtb20","Zbtb22","Zbtb24","Zbtb25","Zbtb26","Zbtb3","Zbtb32","Zbtb33","Zbtb34","Zbtb37","Zbtb38","Zbtb39","Zbtb4","Zbtb41","Zbtb40","Zbtb42","Zbtb43","Zbtb45","Zbtb44","Zbtb46","Zbtb47","Zbtb48","Zbtb49","Zbtb5","Zbtb6","Zbtb7b","Zbtb7a","Zbtb7c","Zbtb8a","Zbtb8b","Zbtb8os","Zbtb9","Zc2hc1a","Zc2hc1b","Zc2hc1c","Zc3h10","Zc3h11a","Zc3h12a","Zc3h12b","Zc3h12c","Zc3h12d","Zc3h13","Zc3h14","Zc3h18","Zc3h15","Zc3h3","Zc3h6","Zc3h4","Zc3h7a","Zc3h7b","Zc3h8","Zc3hav1l","Zc3hav1","Zc3hc1","Zc4h2","Zcchc10","Zcchc12","Zcchc11","Zcchc13","Zcchc14","Zcchc18","Zcchc17","Zcchc2","Zcchc24","Zcchc4","Zcchc3","Zcchc6","Zcchc8","Zcchc7","Zcchc9","Zcrb1","Zcwpw1","Zcwpw2","Zdbf2","Zdhhc11","Zdhhc1","Zdhhc12","Zdhhc13","Zdhhc14","Zdhhc15","Zdhhc16","Zdhhc17","Zdhhc18","Zdhhc19","Zdhhc2","Zdhhc21","Zdhhc20","Zdhhc22","Zdhhc23","Zdhhc24","Zdhhc25","Zdhhc3","Zdhhc4","Zdhhc5","Zdhhc6","Zdhhc7","Zdhhc9","Zdhhc8","Zeb1","Zeb2","Zeb2os","Zer1","Zfand1","Zfand2a","Zfand2b","Zfand3","Zfand5","Zfand6","Zfand4","Zfat","Zfc3h1","Zfhx2","Zfhx3","Zfhx4","Zfp1","Zfp105","Zfp108","Zfp106","Zfp11","Zfp110","Zfp113","Zfp111","Zfp112","Zfp12","Zfp13","Zfp133","Zfp131","Zfp136","Zfp141","Zfp14","Zfp143","Zfp142","Zfp146","Zfp148","Zfp157","Zfp161","Zfp169","Zfp17","Zfp174","Zfp18","Zfp180","Zfp182","Zfp184","Zfp185","Zfp189","Zfp2","Zfp202","Zfp207","Zfp212","Zfp213","Zfp217","Zfp219","Zfp24","Zfp236","Zfp248","Zfp251","Zfp26","Zfp263","Zfp260","Zfp266","Zfp27","Zfp267","Zfp275","Zfp277","Zfp276","Zfp28","Zfp28-ps1","Zfp280b","Zfp281","Zfp280d","Zfp280c","Zfp282","Zfp287","Zfp286a","Zfp292","Zfp296","Zfp3","Zfp30","Zfp300","Zfp316","Zfp318","Zfp317","Zfp319","Zfp322a","Zfp324","Zfp326","Zfp330","Zfp329","Zfp334","Zfp335","Zfp341","Zfp347","Zfp346","Zfp352","Zfp35","Zfp353","Zfp354b","Zfp354a","Zfp354c","Zfp358","Zfp362","Zfp36","Zfp366","Zfp365","Zfp367","Zfp36l3","Zfp36l2","Zfp36l1","Zfp383","Zfp37","Zfp382","Zfp384","Zfp385c","Zfp385a","Zfp385b","Zfp385d","Zfp386","Zfp39","Zfp394","Zfp397","Zfp398","Zfp395","Zfp40","Zfp407","Zfp41","Zfp410","Zfp414","Zfp42","Zfp420","Zfp418","Zfp422","Zfp423","Zfp428","Zfp426","Zfp42l","Zfp438","Zfp445","Zfp444","Zfp446","Zfp446-ps1","Zfp449","Zfp451","Zfp455","Zfp458","Zfp46","Zfp462","Zfp467","Zfp469","Zfp472","Zfp473","Zfp474","Zfp483","Zfp488","Zfp494","Zfp496","Zfp503","Zfp507","Zfp51","Zfp512b","Zfp512","Zfp511","Zfp513","Zfp518b","Zfp516","Zfp518a","Zfp52","Zfp524","Zfp523","Zfp521","Zfp526","Zfp53","Zfp532","Zfp536","Zfp54","Zfp541","Zfp558","Zfp551","Zfp560","Zfp563","Zfp569","Zfp566","Zfp57","Zfp574","Zfp575","Zfp579","Zfp580","Zfp59","Zfp583","Zfp593","Zfp592","Zfp598","Zfp597","Zfp600","Zfp605","Zfp606","Zfp608","Zfp609","Zfp61","Zfp612","Zfp617","Zfp618","Zfp623","Zfp62","Zfp622","Zfp628","Zfp629","Zfp637","Zfp638","Zfp639","Zfp646","Zfp64","Zfp641","Zfp647","Zfp648","Zfp644","Zfp652","Zfp653","Zfp654","Zfp664","Zfp663","Zfp655","Zfp668","Zfp667","Zfp672","Zfp683","Zfp68","Zfp688","Zfp687","Zfp69","Zfp691","Zfp689","Zfp697","Zfp692","Zfp704","Zfp703","Zfp7","Zfp706","Zfp707","Zfp707l1","Zfp709","Zfp709l1","Zfp719","Zfp711","Zfp710","Zfp717","Zfp74","Zfp748","Zfp758","Zfp768","Zfp764","Zfp764l1","Zfp746","Zfp763","Zfp770","Zfp773-ps1","Zfp771","Zfp772","Zfp78","Zfp775","Zfp777","Zfp780b","Zfp780b-ps1","Zfp786","Zfp788","Zfp787","Zfp791","Zfp800","Zfp804a","Zfp799","Zfp804b","Zfp821","Zfp819","Zfp82","Zfp827","Zfp830","Zfp839","Zfp831","Zfp853","Zfp865","Zfp862","Zfp846","Zfp84","Zfp866","Zfp867","Zfp868","Zfp87","Zfp869","Zfp874b","Zfp870","Zfp879","Zfp9","Zfp90","Zfp939","Zfp92","Zfp93","Zfp940-ps1","Zfp91","Zfp945","Zfp94","Zfp948-ps1","Zfp952","Zfp951","Zfp949","Zfp954","Zfp956","Zfp955a","Zfp961","Zfp958","Zfp964","Zfpl1","Zfpm2","Zfpm1","Zfr2","Zfr","Zfyve1","Zfx","Zfyve16","Zfyve19","Zfyve21","Zfyve26","Zfyve28","Zfyve27","Zg16","Zfyve9","Zglp1","Zg16b","Zgpat","Zgrf1","Zhx1","Zhx2","Zic1","Zhx3","Zic3","Zic5","Zic2","Zic4","Zik1","Zim1","Zkscan1","Zkscan2","Zkscan5","Zkscan4","Zkscan3","Zkscan7","Zmat1","Zkscan8","Zmat2","Zmat5","Zmat3","Zmat4","Zmiz1","Zmiz2","Zmpste24","Zmym1","Zmym2","Zmym3","Zmym5","Zmym4","Zmym6","Zmynd10","Znf146","Zmynd12","Zmynd15","Zmynd11","Zmynd19","Znf235","Znf354b","Znf408","Znf442","Znf454","Zmynd8","Znf48","Znf658","Znf474","Znf660","Znf7","Znf750","Znf740","Znf768","Znhit1","Znhit2","Znfx1","Znhit3","Znhit6","Znrd1-ps1","Znrd1as","Znrd1","Znrd1as1","Znrf2","Znrf3","Znrf1","Znrf4","Zp1","Zp2","Zp3","Zp3r","Zp4","Zpbp","Zpld1","Zpbp2","Zpr1","Zranb1","Zrsr1","Zscan10","Zrsr2","Zranb2","Zranb3","Zscan12","Zscan18","Zscan2","Zscan22","Zscan29","Zscan20","Zscan26","Zscan21","Zscan25","Zscan30","Zscan5b","Zscan4f","Zswim1","Zswim3","Zswim2","Zswim4","Zswim5","Zswim6","Zswim7","Zswim9","Zwilch","Zufsp","Zswim8","Zw10","Zxdb","Zwint","Zxdc","Zyg11a","Zyx","Zyg11b","Zzz3","Zzef1"] \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/validation.coffee b/wqflask/wqflask/static/new/javascript/validation.coffee
deleted file mode 100644
index 901f8c7c..00000000
--- a/wqflask/wqflask/static/new/javascript/validation.coffee
+++ /dev/null
@@ -1,42 +0,0 @@
-$ ->
-
- remove_samples_is_valid = (input)->
- #Validate if input is empty or just white spaces
- if _.trim(input).length == 0
- return true
- splats = input.split(",")
- new_splats = (_.trim(input) for input in splats)
- console.log("new_splats:", new_splats)
- pattern = /^\d+\s*(?:-\s*\d+)?\s*$/ #Pattern like 3, 10-15, 24
- for splat in new_splats
- console.log("splat is:", splat)
- if not splat.match(pattern)
- return false
- return true
-
- validate_remove_samples = ->
- ###
- Check if input for the remove samples function is valid and notify the user if not
- ###
- input = $('#remove_samples_field').val()
- console.log("input is:", input)
- if remove_samples_is_valid(input)
- console.log("input is valid")
- $('#remove_samples_invalid').hide()
- else
- console.log("input isn't valid")
- $('#remove_samples_invalid').show()
-
- validate_pylmm_permutation = ->
- ###
- Check if number of permutations is high (and will take long to compute)
- ###
- input = $('input[name=num_perm_pylmm]').val()
- console.log("input:", input)
- if input > 20
- $('#permutations_alert').show()
- else
- $('#permutations_alert').hide()
-
- $('input[name=num_perm_pylmm]').change(validate_pylmm_permutation)
- $('#remove_samples_field').change(validate_remove_samples) \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/javascript/validation.js b/wqflask/wqflask/static/new/javascript/validation.js
index d5725c2d..6769b490 100644
--- a/wqflask/wqflask/static/new/javascript/validation.js
+++ b/wqflask/wqflask/static/new/javascript/validation.js
@@ -1,6 +1,6 @@
// Generated by CoffeeScript 1.8.0
$(function() {
- var remove_samples_is_valid, validate_pylmm_permutation, validate_remove_samples;
+ var remove_samples_is_valid, validate_remove_samples;
remove_samples_is_valid = function(input) {
var new_splats, pattern, splat, splats, _i, _len;
if (_.trim(input).length === 0) {
@@ -43,20 +43,5 @@ $(function() {
return $('#remove_samples_invalid').show();
}
};
- validate_pylmm_permutation = function() {
-
- /*
- Check if number of permutations is high (and will take long to compute)
- */
- var input;
- input = $('input[name=num_perm_pylmm]').val();
- console.log("input:", input);
- if (input > 20) {
- return $('#permutations_alert').show();
- } else {
- return $('#permutations_alert').hide();
- }
- };
- $('input[name=num_perm_pylmm]').change(validate_pylmm_permutation);
return $('#remove_samples_field').change(validate_remove_samples);
});
diff --git a/wqflask/wqflask/static/new/js_external/jscolor.js b/wqflask/wqflask/static/new/js_external/jscolor.js
new file mode 100644
index 00000000..5c77177d
--- /dev/null
+++ b/wqflask/wqflask/static/new/js_external/jscolor.js
@@ -0,0 +1,1855 @@
+/**
+ * jscolor - JavaScript Color Picker
+ *
+ * @link http://jscolor.com
+ * @license For open source use: GPLv3
+ * For commercial use: JSColor Commercial License
+ * @author Jan Odvarko
+ * @version 2.0.5
+ *
+ * See usage examples at http://jscolor.com/examples/
+ */
+
+
+"use strict";
+
+
+if (!window.jscolor) { window.jscolor = (function () {
+
+
+var jsc = {
+
+
+ register : function () {
+ jsc.attachDOMReadyEvent(jsc.init);
+ jsc.attachEvent(document, 'mousedown', jsc.onDocumentMouseDown);
+ jsc.attachEvent(document, 'touchstart', jsc.onDocumentTouchStart);
+ jsc.attachEvent(window, 'resize', jsc.onWindowResize);
+ },
+
+
+ init : function () {
+ if (jsc.jscolor.lookupClass) {
+ jsc.jscolor.installByClassName(jsc.jscolor.lookupClass);
+ }
+ },
+
+
+ tryInstallOnElements : function (elms, className) {
+ var matchClass = new RegExp('(^|\\s)(' + className + ')(\\s*(\\{[^}]*\\})|\\s|$)', 'i');
+
+ for (var i = 0; i < elms.length; i += 1) {
+ if (elms[i].type !== undefined && elms[i].type.toLowerCase() == 'color') {
+ if (jsc.isColorAttrSupported) {
+ // skip inputs of type 'color' if supported by the browser
+ continue;
+ }
+ }
+ var m;
+ if (!elms[i].jscolor && elms[i].className && (m = elms[i].className.match(matchClass))) {
+ var targetElm = elms[i];
+ var optsStr = null;
+
+ var dataOptions = jsc.getDataAttr(targetElm, 'jscolor');
+ if (dataOptions !== null) {
+ optsStr = dataOptions;
+ } else if (m[4]) {
+ optsStr = m[4];
+ }
+
+ var opts = {};
+ if (optsStr) {
+ try {
+ opts = (new Function ('return (' + optsStr + ')'))();
+ } catch(eParseError) {
+ jsc.warn('Error parsing jscolor options: ' + eParseError + ':\n' + optsStr);
+ }
+ }
+ targetElm.jscolor = new jsc.jscolor(targetElm, opts);
+ }
+ }
+ },
+
+
+ isColorAttrSupported : (function () {
+ var elm = document.createElement('input');
+ if (elm.setAttribute) {
+ elm.setAttribute('type', 'color');
+ if (elm.type.toLowerCase() == 'color') {
+ return true;
+ }
+ }
+ return false;
+ })(),
+
+
+ isCanvasSupported : (function () {
+ var elm = document.createElement('canvas');
+ return !!(elm.getContext && elm.getContext('2d'));
+ })(),
+
+
+ fetchElement : function (mixed) {
+ return typeof mixed === 'string' ? document.getElementById(mixed) : mixed;
+ },
+
+
+ isElementType : function (elm, type) {
+ return elm.nodeName.toLowerCase() === type.toLowerCase();
+ },
+
+
+ getDataAttr : function (el, name) {
+ var attrName = 'data-' + name;
+ var attrValue = el.getAttribute(attrName);
+ if (attrValue !== null) {
+ return attrValue;
+ }
+ return null;
+ },
+
+
+ attachEvent : function (el, evnt, func) {
+ if (el.addEventListener) {
+ el.addEventListener(evnt, func, false);
+ } else if (el.attachEvent) {
+ el.attachEvent('on' + evnt, func);
+ }
+ },
+
+
+ detachEvent : function (el, evnt, func) {
+ if (el.removeEventListener) {
+ el.removeEventListener(evnt, func, false);
+ } else if (el.detachEvent) {
+ el.detachEvent('on' + evnt, func);
+ }
+ },
+
+
+ _attachedGroupEvents : {},
+
+
+ attachGroupEvent : function (groupName, el, evnt, func) {
+ if (!jsc._attachedGroupEvents.hasOwnProperty(groupName)) {
+ jsc._attachedGroupEvents[groupName] = [];
+ }
+ jsc._attachedGroupEvents[groupName].push([el, evnt, func]);
+ jsc.attachEvent(el, evnt, func);
+ },
+
+
+ detachGroupEvents : function (groupName) {
+ if (jsc._attachedGroupEvents.hasOwnProperty(groupName)) {
+ for (var i = 0; i < jsc._attachedGroupEvents[groupName].length; i += 1) {
+ var evt = jsc._attachedGroupEvents[groupName][i];
+ jsc.detachEvent(evt[0], evt[1], evt[2]);
+ }
+ delete jsc._attachedGroupEvents[groupName];
+ }
+ },
+
+
+ attachDOMReadyEvent : function (func) {
+ var fired = false;
+ var fireOnce = function () {
+ if (!fired) {
+ fired = true;
+ func();
+ }
+ };
+
+ if (document.readyState === 'complete') {
+ setTimeout(fireOnce, 1); // async
+ return;
+ }
+
+ if (document.addEventListener) {
+ document.addEventListener('DOMContentLoaded', fireOnce, false);
+
+ // Fallback
+ window.addEventListener('load', fireOnce, false);
+
+ } else if (document.attachEvent) {
+ // IE
+ document.attachEvent('onreadystatechange', function () {
+ if (document.readyState === 'complete') {
+ document.detachEvent('onreadystatechange', arguments.callee);
+ fireOnce();
+ }
+ })
+
+ // Fallback
+ window.attachEvent('onload', fireOnce);
+
+ // IE7/8
+ if (document.documentElement.doScroll && window == window.top) {
+ var tryScroll = function () {
+ if (!document.body) { return; }
+ try {
+ document.documentElement.doScroll('left');
+ fireOnce();
+ } catch (e) {
+ setTimeout(tryScroll, 1);
+ }
+ };
+ tryScroll();
+ }
+ }
+ },
+
+
+ warn : function (msg) {
+ if (window.console && window.console.warn) {
+ window.console.warn(msg);
+ }
+ },
+
+
+ preventDefault : function (e) {
+ if (e.preventDefault) { e.preventDefault(); }
+ e.returnValue = false;
+ },
+
+
+ captureTarget : function (target) {
+ // IE
+ if (target.setCapture) {
+ jsc._capturedTarget = target;
+ jsc._capturedTarget.setCapture();
+ }
+ },
+
+
+ releaseTarget : function () {
+ // IE
+ if (jsc._capturedTarget) {
+ jsc._capturedTarget.releaseCapture();
+ jsc._capturedTarget = null;
+ }
+ },
+
+
+ fireEvent : function (el, evnt) {
+ if (!el) {
+ return;
+ }
+ if (document.createEvent) {
+ var ev = document.createEvent('HTMLEvents');
+ ev.initEvent(evnt, true, true);
+ el.dispatchEvent(ev);
+ } else if (document.createEventObject) {
+ var ev = document.createEventObject();
+ el.fireEvent('on' + evnt, ev);
+ } else if (el['on' + evnt]) { // alternatively use the traditional event model
+ el['on' + evnt]();
+ }
+ },
+
+
+ classNameToList : function (className) {
+ return className.replace(/^\s+|\s+$/g, '').split(/\s+/);
+ },
+
+
+ // The className parameter (str) can only contain a single class name
+ hasClass : function (elm, className) {
+ if (!className) {
+ return false;
+ }
+ return -1 != (' ' + elm.className.replace(/\s+/g, ' ') + ' ').indexOf(' ' + className + ' ');
+ },
+
+
+ // The className parameter (str) can contain multiple class names separated by whitespace
+ setClass : function (elm, className) {
+ var classList = jsc.classNameToList(className);
+ for (var i = 0; i < classList.length; i += 1) {
+ if (!jsc.hasClass(elm, classList[i])) {
+ elm.className += (elm.className ? ' ' : '') + classList[i];
+ }
+ }
+ },
+
+
+ // The className parameter (str) can contain multiple class names separated by whitespace
+ unsetClass : function (elm, className) {
+ var classList = jsc.classNameToList(className);
+ for (var i = 0; i < classList.length; i += 1) {
+ var repl = new RegExp(
+ '^\\s*' + classList[i] + '\\s*|' +
+ '\\s*' + classList[i] + '\\s*$|' +
+ '\\s+' + classList[i] + '(\\s+)',
+ 'g'
+ );
+ elm.className = elm.className.replace(repl, '$1');
+ }
+ },
+
+
+ getStyle : function (elm) {
+ return window.getComputedStyle ? window.getComputedStyle(elm) : elm.currentStyle;
+ },
+
+
+ setStyle : (function () {
+ var helper = document.createElement('div');
+ var getSupportedProp = function (names) {
+ for (var i = 0; i < names.length; i += 1) {
+ if (names[i] in helper.style) {
+ return names[i];
+ }
+ }
+ };
+ var props = {
+ borderRadius: getSupportedProp(['borderRadius', 'MozBorderRadius', 'webkitBorderRadius']),
+ boxShadow: getSupportedProp(['boxShadow', 'MozBoxShadow', 'webkitBoxShadow'])
+ };
+ return function (elm, prop, value) {
+ switch (prop.toLowerCase()) {
+ case 'opacity':
+ var alphaOpacity = Math.round(parseFloat(value) * 100);
+ elm.style.opacity = value;
+ elm.style.filter = 'alpha(opacity=' + alphaOpacity + ')';
+ break;
+ default:
+ elm.style[props[prop]] = value;
+ break;
+ }
+ };
+ })(),
+
+
+ setBorderRadius : function (elm, value) {
+ jsc.setStyle(elm, 'borderRadius', value || '0');
+ },
+
+
+ setBoxShadow : function (elm, value) {
+ jsc.setStyle(elm, 'boxShadow', value || 'none');
+ },
+
+
+ getElementPos : function (e, relativeToViewport) {
+ var x=0, y=0;
+ var rect = e.getBoundingClientRect();
+ x = rect.left;
+ y = rect.top;
+ if (!relativeToViewport) {
+ var viewPos = jsc.getViewPos();
+ x += viewPos[0];
+ y += viewPos[1];
+ }
+ return [x, y];
+ },
+
+
+ getElementSize : function (e) {
+ return [e.offsetWidth, e.offsetHeight];
+ },
+
+
+ // get pointer's X/Y coordinates relative to viewport
+ getAbsPointerPos : function (e) {
+ if (!e) { e = window.event; }
+ var x = 0, y = 0;
+ if (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) {
+ // touch devices
+ x = e.changedTouches[0].clientX;
+ y = e.changedTouches[0].clientY;
+ } else if (typeof e.clientX === 'number') {
+ x = e.clientX;
+ y = e.clientY;
+ }
+ return { x: x, y: y };
+ },
+
+
+ // get pointer's X/Y coordinates relative to target element
+ getRelPointerPos : function (e) {
+ if (!e) { e = window.event; }
+ var target = e.target || e.srcElement;
+ var targetRect = target.getBoundingClientRect();
+
+ var x = 0, y = 0;
+
+ var clientX = 0, clientY = 0;
+ if (typeof e.changedTouches !== 'undefined' && e.changedTouches.length) {
+ // touch devices
+ clientX = e.changedTouches[0].clientX;
+ clientY = e.changedTouches[0].clientY;
+ } else if (typeof e.clientX === 'number') {
+ clientX = e.clientX;
+ clientY = e.clientY;
+ }
+
+ x = clientX - targetRect.left;
+ y = clientY - targetRect.top;
+ return { x: x, y: y };
+ },
+
+
+ getViewPos : function () {
+ var doc = document.documentElement;
+ return [
+ (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0),
+ (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0)
+ ];
+ },
+
+
+ getViewSize : function () {
+ var doc = document.documentElement;
+ return [
+ (window.innerWidth || doc.clientWidth),
+ (window.innerHeight || doc.clientHeight),
+ ];
+ },
+
+
+ redrawPosition : function () {
+
+ if (jsc.picker && jsc.picker.owner) {
+ var thisObj = jsc.picker.owner;
+
+ var tp, vp;
+
+ if (thisObj.fixed) {
+ // Fixed elements are positioned relative to viewport,
+ // therefore we can ignore the scroll offset
+ tp = jsc.getElementPos(thisObj.targetElement, true); // target pos
+ vp = [0, 0]; // view pos
+ } else {
+ tp = jsc.getElementPos(thisObj.targetElement); // target pos
+ vp = jsc.getViewPos(); // view pos
+ }
+
+ var ts = jsc.getElementSize(thisObj.targetElement); // target size
+ var vs = jsc.getViewSize(); // view size
+ var ps = jsc.getPickerOuterDims(thisObj); // picker size
+ var a, b, c;
+ switch (thisObj.position.toLowerCase()) {
+ case 'left': a=1; b=0; c=-1; break;
+ case 'right':a=1; b=0; c=1; break;
+ case 'top': a=0; b=1; c=-1; break;
+ default: a=0; b=1; c=1; break;
+ }
+ var l = (ts[b]+ps[b])/2;
+
+ // compute picker position
+ if (!thisObj.smartPosition) {
+ var pp = [
+ tp[a],
+ tp[b]+ts[b]-l+l*c
+ ];
+ } else {
+ var pp = [
+ -vp[a]+tp[a]+ps[a] > vs[a] ?
+ (-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) :
+ tp[a],
+ -vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ?
+ (-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) :
+ (tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c)
+ ];
+ }
+
+ var x = pp[a];
+ var y = pp[b];
+ var positionValue = thisObj.fixed ? 'fixed' : 'absolute';
+ var contractShadow =
+ (pp[0] + ps[0] > tp[0] || pp[0] < tp[0] + ts[0]) &&
+ (pp[1] + ps[1] < tp[1] + ts[1]);
+
+ jsc._drawPosition(thisObj, x, y, positionValue, contractShadow);
+ }
+ },
+
+
+ _drawPosition : function (thisObj, x, y, positionValue, contractShadow) {
+ var vShadow = contractShadow ? 0 : thisObj.shadowBlur; // px
+
+ jsc.picker.wrap.style.position = positionValue;
+ jsc.picker.wrap.style.left = x + 'px';
+ jsc.picker.wrap.style.top = y + 'px';
+
+ jsc.setBoxShadow(
+ jsc.picker.boxS,
+ thisObj.shadow ?
+ new jsc.BoxShadow(0, vShadow, thisObj.shadowBlur, 0, thisObj.shadowColor) :
+ null);
+ },
+
+
+ getPickerDims : function (thisObj) {
+ var displaySlider = !!jsc.getSliderComponent(thisObj);
+ var dims = [
+ 2 * thisObj.insetWidth + 2 * thisObj.padding + thisObj.width +
+ (displaySlider ? 2 * thisObj.insetWidth + jsc.getPadToSliderPadding(thisObj) + thisObj.sliderSize : 0),
+ 2 * thisObj.insetWidth + 2 * thisObj.padding + thisObj.height +
+ (thisObj.closable ? 2 * thisObj.insetWidth + thisObj.padding + thisObj.buttonHeight : 0)
+ ];
+ return dims;
+ },
+
+
+ getPickerOuterDims : function (thisObj) {
+ var dims = jsc.getPickerDims(thisObj);
+ return [
+ dims[0] + 2 * thisObj.borderWidth,
+ dims[1] + 2 * thisObj.borderWidth
+ ];
+ },
+
+
+ getPadToSliderPadding : function (thisObj) {
+ return Math.max(thisObj.padding, 1.5 * (2 * thisObj.pointerBorderWidth + thisObj.pointerThickness));
+ },
+
+
+ getPadYComponent : function (thisObj) {
+ switch (thisObj.mode.charAt(1).toLowerCase()) {
+ case 'v': return 'v'; break;
+ }
+ return 's';
+ },
+
+
+ getSliderComponent : function (thisObj) {
+ if (thisObj.mode.length > 2) {
+ switch (thisObj.mode.charAt(2).toLowerCase()) {
+ case 's': return 's'; break;
+ case 'v': return 'v'; break;
+ }
+ }
+ return null;
+ },
+
+
+ onDocumentMouseDown : function (e) {
+ if (!e) { e = window.event; }
+ var target = e.target || e.srcElement;
+
+ if (target._jscLinkedInstance) {
+ if (target._jscLinkedInstance.showOnClick) {
+ target._jscLinkedInstance.show();
+ }
+ } else if (target._jscControlName) {
+ jsc.onControlPointerStart(e, target, target._jscControlName, 'mouse');
+ } else {
+ // Mouse is outside the picker controls -> hide the color picker!
+ if (jsc.picker && jsc.picker.owner) {
+ jsc.picker.owner.hide();
+ }
+ }
+ },
+
+
+ onDocumentTouchStart : function (e) {
+ if (!e) { e = window.event; }
+ var target = e.target || e.srcElement;
+
+ if (target._jscLinkedInstance) {
+ if (target._jscLinkedInstance.showOnClick) {
+ target._jscLinkedInstance.show();
+ }
+ } else if (target._jscControlName) {
+ jsc.onControlPointerStart(e, target, target._jscControlName, 'touch');
+ } else {
+ if (jsc.picker && jsc.picker.owner) {
+ jsc.picker.owner.hide();
+ }
+ }
+ },
+
+
+ onWindowResize : function (e) {
+ jsc.redrawPosition();
+ },
+
+
+ onParentScroll : function (e) {
+ // hide the picker when one of the parent elements is scrolled
+ if (jsc.picker && jsc.picker.owner) {
+ jsc.picker.owner.hide();
+ }
+ },
+
+
+ _pointerMoveEvent : {
+ mouse: 'mousemove',
+ touch: 'touchmove'
+ },
+ _pointerEndEvent : {
+ mouse: 'mouseup',
+ touch: 'touchend'
+ },
+
+
+ _pointerOrigin : null,
+ _capturedTarget : null,
+
+
+ onControlPointerStart : function (e, target, controlName, pointerType) {
+ var thisObj = target._jscInstance;
+
+ jsc.preventDefault(e);
+ jsc.captureTarget(target);
+
+ var registerDragEvents = function (doc, offset) {
+ jsc.attachGroupEvent('drag', doc, jsc._pointerMoveEvent[pointerType],
+ jsc.onDocumentPointerMove(e, target, controlName, pointerType, offset));
+ jsc.attachGroupEvent('drag', doc, jsc._pointerEndEvent[pointerType],
+ jsc.onDocumentPointerEnd(e, target, controlName, pointerType));
+ };
+
+ registerDragEvents(document, [0, 0]);
+
+ if (window.parent && window.frameElement) {
+ var rect = window.frameElement.getBoundingClientRect();
+ var ofs = [-rect.left, -rect.top];
+ registerDragEvents(window.parent.window.document, ofs);
+ }
+
+ var abs = jsc.getAbsPointerPos(e);
+ var rel = jsc.getRelPointerPos(e);
+ jsc._pointerOrigin = {
+ x: abs.x - rel.x,
+ y: abs.y - rel.y
+ };
+
+ switch (controlName) {
+ case 'pad':
+ // if the slider is at the bottom, move it up
+ switch (jsc.getSliderComponent(thisObj)) {
+ case 's': if (thisObj.hsv[1] === 0) { thisObj.fromHSV(null, 100, null); }; break;
+ case 'v': if (thisObj.hsv[2] === 0) { thisObj.fromHSV(null, null, 100); }; break;
+ }
+ jsc.setPad(thisObj, e, 0, 0);
+ break;
+
+ case 'sld':
+ jsc.setSld(thisObj, e, 0);
+ break;
+ }
+
+ jsc.dispatchFineChange(thisObj);
+ },
+
+
+ onDocumentPointerMove : function (e, target, controlName, pointerType, offset) {
+ return function (e) {
+ var thisObj = target._jscInstance;
+ switch (controlName) {
+ case 'pad':
+ if (!e) { e = window.event; }
+ jsc.setPad(thisObj, e, offset[0], offset[1]);
+ jsc.dispatchFineChange(thisObj);
+ break;
+
+ case 'sld':
+ if (!e) { e = window.event; }
+ jsc.setSld(thisObj, e, offset[1]);
+ jsc.dispatchFineChange(thisObj);
+ break;
+ }
+ }
+ },
+
+
+ onDocumentPointerEnd : function (e, target, controlName, pointerType) {
+ return function (e) {
+ var thisObj = target._jscInstance;
+ jsc.detachGroupEvents('drag');
+ jsc.releaseTarget();
+ // Always dispatch changes after detaching outstanding mouse handlers,
+ // in case some user interaction will occur in user's onchange callback
+ // that would intrude with current mouse events
+ jsc.dispatchChange(thisObj);
+ };
+ },
+
+
+ dispatchChange : function (thisObj) {
+ if (thisObj.valueElement) {
+ if (jsc.isElementType(thisObj.valueElement, 'input')) {
+ jsc.fireEvent(thisObj.valueElement, 'change');
+ }
+ }
+ },
+
+
+ dispatchFineChange : function (thisObj) {
+ if (thisObj.onFineChange) {
+ var callback;
+ if (typeof thisObj.onFineChange === 'string') {
+ callback = new Function (thisObj.onFineChange);
+ } else {
+ callback = thisObj.onFineChange;
+ }
+ callback.call(thisObj);
+ }
+ },
+
+
+ setPad : function (thisObj, e, ofsX, ofsY) {
+ var pointerAbs = jsc.getAbsPointerPos(e);
+ var x = ofsX + pointerAbs.x - jsc._pointerOrigin.x - thisObj.padding - thisObj.insetWidth;
+ var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.insetWidth;
+
+ var xVal = x * (360 / (thisObj.width - 1));
+ var yVal = 100 - (y * (100 / (thisObj.height - 1)));
+
+ switch (jsc.getPadYComponent(thisObj)) {
+ case 's': thisObj.fromHSV(xVal, yVal, null, jsc.leaveSld); break;
+ case 'v': thisObj.fromHSV(xVal, null, yVal, jsc.leaveSld); break;
+ }
+ },
+
+
+ setSld : function (thisObj, e, ofsY) {
+ var pointerAbs = jsc.getAbsPointerPos(e);
+ var y = ofsY + pointerAbs.y - jsc._pointerOrigin.y - thisObj.padding - thisObj.insetWidth;
+
+ var yVal = 100 - (y * (100 / (thisObj.height - 1)));
+
+ switch (jsc.getSliderComponent(thisObj)) {
+ case 's': thisObj.fromHSV(null, yVal, null, jsc.leavePad); break;
+ case 'v': thisObj.fromHSV(null, null, yVal, jsc.leavePad); break;
+ }
+ },
+
+
+ _vmlNS : 'jsc_vml_',
+ _vmlCSS : 'jsc_vml_css_',
+ _vmlReady : false,
+
+
+ initVML : function () {
+ if (!jsc._vmlReady) {
+ // init VML namespace
+ var doc = document;
+ if (!doc.namespaces[jsc._vmlNS]) {
+ doc.namespaces.add(jsc._vmlNS, 'urn:schemas-microsoft-com:vml');
+ }
+ if (!doc.styleSheets[jsc._vmlCSS]) {
+ var tags = ['shape', 'shapetype', 'group', 'background', 'path', 'formulas', 'handles', 'fill', 'stroke', 'shadow', 'textbox', 'textpath', 'imagedata', 'line', 'polyline', 'curve', 'rect', 'roundrect', 'oval', 'arc', 'image'];
+ var ss = doc.createStyleSheet();
+ ss.owningElement.id = jsc._vmlCSS;
+ for (var i = 0; i < tags.length; i += 1) {
+ ss.addRule(jsc._vmlNS + '\\:' + tags[i], 'behavior:url(#default#VML);');
+ }
+ }
+ jsc._vmlReady = true;
+ }
+ },
+
+
+ createPalette : function () {
+
+ var paletteObj = {
+ elm: null,
+ draw: null
+ };
+
+ if (jsc.isCanvasSupported) {
+ // Canvas implementation for modern browsers
+
+ var canvas = document.createElement('canvas');
+ var ctx = canvas.getContext('2d');
+
+ var drawFunc = function (width, height, type) {
+ canvas.width = width;
+ canvas.height = height;
+
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+
+ var hGrad = ctx.createLinearGradient(0, 0, canvas.width, 0);
+ hGrad.addColorStop(0 / 6, '#F00');
+ hGrad.addColorStop(1 / 6, '#FF0');
+ hGrad.addColorStop(2 / 6, '#0F0');
+ hGrad.addColorStop(3 / 6, '#0FF');
+ hGrad.addColorStop(4 / 6, '#00F');
+ hGrad.addColorStop(5 / 6, '#F0F');
+ hGrad.addColorStop(6 / 6, '#F00');
+
+ ctx.fillStyle = hGrad;
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+
+ var vGrad = ctx.createLinearGradient(0, 0, 0, canvas.height);
+ switch (type.toLowerCase()) {
+ case 's':
+ vGrad.addColorStop(0, 'rgba(255,255,255,0)');
+ vGrad.addColorStop(1, 'rgba(255,255,255,1)');
+ break;
+ case 'v':
+ vGrad.addColorStop(0, 'rgba(0,0,0,0)');
+ vGrad.addColorStop(1, 'rgba(0,0,0,1)');
+ break;
+ }
+ ctx.fillStyle = vGrad;
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ };
+
+ paletteObj.elm = canvas;
+ paletteObj.draw = drawFunc;
+
+ } else {
+ // VML fallback for IE 7 and 8
+
+ jsc.initVML();
+
+ var vmlContainer = document.createElement('div');
+ vmlContainer.style.position = 'relative';
+ vmlContainer.style.overflow = 'hidden';
+
+ var hGrad = document.createElement(jsc._vmlNS + ':fill');
+ hGrad.type = 'gradient';
+ hGrad.method = 'linear';
+ hGrad.angle = '90';
+ hGrad.colors = '16.67% #F0F, 33.33% #00F, 50% #0FF, 66.67% #0F0, 83.33% #FF0'
+
+ var hRect = document.createElement(jsc._vmlNS + ':rect');
+ hRect.style.position = 'absolute';
+ hRect.style.left = -1 + 'px';
+ hRect.style.top = -1 + 'px';
+ hRect.stroked = false;
+ hRect.appendChild(hGrad);
+ vmlContainer.appendChild(hRect);
+
+ var vGrad = document.createElement(jsc._vmlNS + ':fill');
+ vGrad.type = 'gradient';
+ vGrad.method = 'linear';
+ vGrad.angle = '180';
+ vGrad.opacity = '0';
+
+ var vRect = document.createElement(jsc._vmlNS + ':rect');
+ vRect.style.position = 'absolute';
+ vRect.style.left = -1 + 'px';
+ vRect.style.top = -1 + 'px';
+ vRect.stroked = false;
+ vRect.appendChild(vGrad);
+ vmlContainer.appendChild(vRect);
+
+ var drawFunc = function (width, height, type) {
+ vmlContainer.style.width = width + 'px';
+ vmlContainer.style.height = height + 'px';
+
+ hRect.style.width =
+ vRect.style.width =
+ (width + 1) + 'px';
+ hRect.style.height =
+ vRect.style.height =
+ (height + 1) + 'px';
+
+ // Colors must be specified during every redraw, otherwise IE won't display
+ // a full gradient during a subsequential redraw
+ hGrad.color = '#F00';
+ hGrad.color2 = '#F00';
+
+ switch (type.toLowerCase()) {
+ case 's':
+ vGrad.color = vGrad.color2 = '#FFF';
+ break;
+ case 'v':
+ vGrad.color = vGrad.color2 = '#000';
+ break;
+ }
+ };
+
+ paletteObj.elm = vmlContainer;
+ paletteObj.draw = drawFunc;
+ }
+
+ return paletteObj;
+ },
+
+
+ createSliderGradient : function () {
+
+ var sliderObj = {
+ elm: null,
+ draw: null
+ };
+
+ if (jsc.isCanvasSupported) {
+ // Canvas implementation for modern browsers
+
+ var canvas = document.createElement('canvas');
+ var ctx = canvas.getContext('2d');
+
+ var drawFunc = function (width, height, color1, color2) {
+ canvas.width = width;
+ canvas.height = height;
+
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
+
+ var grad = ctx.createLinearGradient(0, 0, 0, canvas.height);
+ grad.addColorStop(0, color1);
+ grad.addColorStop(1, color2);
+
+ ctx.fillStyle = grad;
+ ctx.fillRect(0, 0, canvas.width, canvas.height);
+ };
+
+ sliderObj.elm = canvas;
+ sliderObj.draw = drawFunc;
+
+ } else {
+ // VML fallback for IE 7 and 8
+
+ jsc.initVML();
+
+ var vmlContainer = document.createElement('div');
+ vmlContainer.style.position = 'relative';
+ vmlContainer.style.overflow = 'hidden';
+
+ var grad = document.createElement(jsc._vmlNS + ':fill');
+ grad.type = 'gradient';
+ grad.method = 'linear';
+ grad.angle = '180';
+
+ var rect = document.createElement(jsc._vmlNS + ':rect');
+ rect.style.position = 'absolute';
+ rect.style.left = -1 + 'px';
+ rect.style.top = -1 + 'px';
+ rect.stroked = false;
+ rect.appendChild(grad);
+ vmlContainer.appendChild(rect);
+
+ var drawFunc = function (width, height, color1, color2) {
+ vmlContainer.style.width = width + 'px';
+ vmlContainer.style.height = height + 'px';
+
+ rect.style.width = (width + 1) + 'px';
+ rect.style.height = (height + 1) + 'px';
+
+ grad.color = color1;
+ grad.color2 = color2;
+ };
+
+ sliderObj.elm = vmlContainer;
+ sliderObj.draw = drawFunc;
+ }
+
+ return sliderObj;
+ },
+
+
+ leaveValue : 1<<0,
+ leaveStyle : 1<<1,
+ leavePad : 1<<2,
+ leaveSld : 1<<3,
+
+
+ BoxShadow : (function () {
+ var BoxShadow = function (hShadow, vShadow, blur, spread, color, inset) {
+ this.hShadow = hShadow;
+ this.vShadow = vShadow;
+ this.blur = blur;
+ this.spread = spread;
+ this.color = color;
+ this.inset = !!inset;
+ };
+
+ BoxShadow.prototype.toString = function () {
+ var vals = [
+ Math.round(this.hShadow) + 'px',
+ Math.round(this.vShadow) + 'px',
+ Math.round(this.blur) + 'px',
+ Math.round(this.spread) + 'px',
+ this.color
+ ];
+ if (this.inset) {
+ vals.push('inset');
+ }
+ return vals.join(' ');
+ };
+
+ return BoxShadow;
+ })(),
+
+
+ //
+ // Usage:
+ // var myColor = new jscolor(<targetElement> [, <options>])
+ //
+
+ jscolor : function (targetElement, options) {
+
+ // General options
+ //
+ this.value = null; // initial HEX color. To change it later, use methods fromString(), fromHSV() and fromRGB()
+ this.valueElement = targetElement; // element that will be used to display and input the color code
+ this.styleElement = targetElement; // element that will preview the picked color using CSS backgroundColor
+ this.required = true; // whether the associated text <input> can be left empty
+ this.refine = true; // whether to refine the entered color code (e.g. uppercase it and remove whitespace)
+ this.hash = false; // whether to prefix the HEX color code with # symbol
+ this.uppercase = true; // whether to show the color code in upper case
+ this.onFineChange = null; // called instantly every time the color changes (value can be either a function or a string with javascript code)
+ this.activeClass = 'jscolor-active'; // class to be set to the target element when a picker window is open on it
+ this.overwriteImportant = false; // whether to overwrite colors of styleElement using !important
+ this.minS = 0; // min allowed saturation (0 - 100)
+ this.maxS = 100; // max allowed saturation (0 - 100)
+ this.minV = 0; // min allowed value (brightness) (0 - 100)
+ this.maxV = 100; // max allowed value (brightness) (0 - 100)
+
+ // Accessing the picked color
+ //
+ this.hsv = [0, 0, 100]; // read-only [0-360, 0-100, 0-100]
+ this.rgb = [255, 255, 255]; // read-only [0-255, 0-255, 0-255]
+
+ // Color Picker options
+ //
+ this.width = 181; // width of color palette (in px)
+ this.height = 101; // height of color palette (in px)
+ this.showOnClick = true; // whether to display the color picker when user clicks on its target element
+ this.mode = 'HSV'; // HSV | HVS | HS | HV - layout of the color picker controls
+ this.position = 'bottom'; // left | right | top | bottom - position relative to the target element
+ this.smartPosition = true; // automatically change picker position when there is not enough space for it
+ this.sliderSize = 16; // px
+ this.crossSize = 8; // px
+ this.closable = false; // whether to display the Close button
+ this.closeText = 'Close';
+ this.buttonColor = '#000000'; // CSS color
+ this.buttonHeight = 18; // px
+ this.padding = 12; // px
+ this.backgroundColor = '#FFFFFF'; // CSS color
+ this.borderWidth = 1; // px
+ this.borderColor = '#BBBBBB'; // CSS color
+ this.borderRadius = 8; // px
+ this.insetWidth = 1; // px
+ this.insetColor = '#BBBBBB'; // CSS color
+ this.shadow = true; // whether to display shadow
+ this.shadowBlur = 15; // px
+ this.shadowColor = 'rgba(0,0,0,0.2)'; // CSS color
+ this.pointerColor = '#4C4C4C'; // px
+ this.pointerBorderColor = '#FFFFFF'; // px
+ this.pointerBorderWidth = 1; // px
+ this.pointerThickness = 2; // px
+ this.zIndex = 1000;
+ this.container = null; // where to append the color picker (BODY element by default)
+
+
+ for (var opt in options) {
+ if (options.hasOwnProperty(opt)) {
+ this[opt] = options[opt];
+ }
+ }
+
+
+ this.hide = function () {
+ if (isPickerOwner()) {
+ detachPicker();
+ }
+ };
+
+
+ this.show = function () {
+ drawPicker();
+ };
+
+
+ this.redraw = function () {
+ if (isPickerOwner()) {
+ drawPicker();
+ }
+ };
+
+
+ this.importColor = function () {
+ if (!this.valueElement) {
+ this.exportColor();
+ } else {
+ if (jsc.isElementType(this.valueElement, 'input')) {
+ if (!this.refine) {
+ if (!this.fromString(this.valueElement.value, jsc.leaveValue)) {
+ if (this.styleElement) {
+ this.styleElement.style.backgroundImage = this.styleElement._jscOrigStyle.backgroundImage;
+ this.styleElement.style.backgroundColor = this.styleElement._jscOrigStyle.backgroundColor;
+ this.styleElement.style.color = this.styleElement._jscOrigStyle.color;
+ }
+ this.exportColor(jsc.leaveValue | jsc.leaveStyle);
+ }
+ } else if (!this.required && /^\s*$/.test(this.valueElement.value)) {
+ this.valueElement.value = '';
+ if (this.styleElement) {
+ this.styleElement.style.backgroundImage = this.styleElement._jscOrigStyle.backgroundImage;
+ this.styleElement.style.backgroundColor = this.styleElement._jscOrigStyle.backgroundColor;
+ this.styleElement.style.color = this.styleElement._jscOrigStyle.color;
+ }
+ this.exportColor(jsc.leaveValue | jsc.leaveStyle);
+
+ } else if (this.fromString(this.valueElement.value)) {
+ // managed to import color successfully from the value -> OK, don't do anything
+ } else {
+ this.exportColor();
+ }
+ } else {
+ // not an input element -> doesn't have any value
+ this.exportColor();
+ }
+ }
+ };
+
+
+ this.exportColor = function (flags) {
+ if (!(flags & jsc.leaveValue) && this.valueElement) {
+ var value = this.toString();
+ if (this.uppercase) { value = value.toUpperCase(); }
+ if (this.hash) { value = '#' + value; }
+
+ if (jsc.isElementType(this.valueElement, 'input')) {
+ this.valueElement.value = value;
+ } else {
+ this.valueElement.innerHTML = value;
+ }
+ }
+ if (!(flags & jsc.leaveStyle)) {
+ if (this.styleElement) {
+ var bgColor = '#' + this.toString();
+ var fgColor = this.isLight() ? '#000' : '#FFF';
+
+ this.styleElement.style.backgroundImage = 'none';
+ this.styleElement.style.backgroundColor = bgColor;
+ this.styleElement.style.color = fgColor;
+
+ if (this.overwriteImportant) {
+ this.styleElement.setAttribute('style',
+ 'background: ' + bgColor + ' !important; ' +
+ 'color: ' + fgColor + ' !important;'
+ );
+ }
+ }
+ }
+ if (!(flags & jsc.leavePad) && isPickerOwner()) {
+ redrawPad();
+ }
+ if (!(flags & jsc.leaveSld) && isPickerOwner()) {
+ redrawSld();
+ }
+ };
+
+
+ // h: 0-360
+ // s: 0-100
+ // v: 0-100
+ //
+ this.fromHSV = function (h, s, v, flags) { // null = don't change
+ if (h !== null) {
+ if (isNaN(h)) { return false; }
+ h = Math.max(0, Math.min(360, h));
+ }
+ if (s !== null) {
+ if (isNaN(s)) { return false; }
+ s = Math.max(0, Math.min(100, this.maxS, s), this.minS);
+ }
+ if (v !== null) {
+ if (isNaN(v)) { return false; }
+ v = Math.max(0, Math.min(100, this.maxV, v), this.minV);
+ }
+
+ this.rgb = HSV_RGB(
+ h===null ? this.hsv[0] : (this.hsv[0]=h),
+ s===null ? this.hsv[1] : (this.hsv[1]=s),
+ v===null ? this.hsv[2] : (this.hsv[2]=v)
+ );
+
+ this.exportColor(flags);
+ };
+
+
+ // r: 0-255
+ // g: 0-255
+ // b: 0-255
+ //
+ this.fromRGB = function (r, g, b, flags) { // null = don't change
+ if (r !== null) {
+ if (isNaN(r)) { return false; }
+ r = Math.max(0, Math.min(255, r));
+ }
+ if (g !== null) {
+ if (isNaN(g)) { return false; }
+ g = Math.max(0, Math.min(255, g));
+ }
+ if (b !== null) {
+ if (isNaN(b)) { return false; }
+ b = Math.max(0, Math.min(255, b));
+ }
+
+ var hsv = RGB_HSV(
+ r===null ? this.rgb[0] : r,
+ g===null ? this.rgb[1] : g,
+ b===null ? this.rgb[2] : b
+ );
+ if (hsv[0] !== null) {
+ this.hsv[0] = Math.max(0, Math.min(360, hsv[0]));
+ }
+ if (hsv[2] !== 0) {
+ this.hsv[1] = hsv[1]===null ? null : Math.max(0, this.minS, Math.min(100, this.maxS, hsv[1]));
+ }
+ this.hsv[2] = hsv[2]===null ? null : Math.max(0, this.minV, Math.min(100, this.maxV, hsv[2]));
+
+ // update RGB according to final HSV, as some values might be trimmed
+ var rgb = HSV_RGB(this.hsv[0], this.hsv[1], this.hsv[2]);
+ this.rgb[0] = rgb[0];
+ this.rgb[1] = rgb[1];
+ this.rgb[2] = rgb[2];
+
+ this.exportColor(flags);
+ };
+
+
+ this.fromString = function (str, flags) {
+ var m;
+ if (m = str.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i)) {
+ // HEX notation
+ //
+
+ if (m[1].length === 6) {
+ // 6-char notation
+ this.fromRGB(
+ parseInt(m[1].substr(0,2),16),
+ parseInt(m[1].substr(2,2),16),
+ parseInt(m[1].substr(4,2),16),
+ flags
+ );
+ } else {
+ // 3-char notation
+ this.fromRGB(
+ parseInt(m[1].charAt(0) + m[1].charAt(0),16),
+ parseInt(m[1].charAt(1) + m[1].charAt(1),16),
+ parseInt(m[1].charAt(2) + m[1].charAt(2),16),
+ flags
+ );
+ }
+ return true;
+
+ } else if (m = str.match(/^\W*rgba?\(([^)]*)\)\W*$/i)) {
+ var params = m[1].split(',');
+ var re = /^\s*(\d*)(\.\d+)?\s*$/;
+ var mR, mG, mB;
+ if (
+ params.length >= 3 &&
+ (mR = params[0].match(re)) &&
+ (mG = params[1].match(re)) &&
+ (mB = params[2].match(re))
+ ) {
+ var r = parseFloat((mR[1] || '0') + (mR[2] || ''));
+ var g = parseFloat((mG[1] || '0') + (mG[2] || ''));
+ var b = parseFloat((mB[1] || '0') + (mB[2] || ''));
+ this.fromRGB(r, g, b, flags);
+ return true;
+ }
+ }
+ return false;
+ };
+
+
+ this.toString = function () {
+ return (
+ (0x100 | Math.round(this.rgb[0])).toString(16).substr(1) +
+ (0x100 | Math.round(this.rgb[1])).toString(16).substr(1) +
+ (0x100 | Math.round(this.rgb[2])).toString(16).substr(1)
+ );
+ };
+
+
+ this.toHEXString = function () {
+ return '#' + this.toString().toUpperCase();
+ };
+
+
+ this.toRGBString = function () {
+ return ('rgb(' +
+ Math.round(this.rgb[0]) + ',' +
+ Math.round(this.rgb[1]) + ',' +
+ Math.round(this.rgb[2]) + ')'
+ );
+ };
+
+
+ this.isLight = function () {
+ return (
+ 0.213 * this.rgb[0] +
+ 0.715 * this.rgb[1] +
+ 0.072 * this.rgb[2] >
+ 255 / 2
+ );
+ };
+
+
+ this._processParentElementsInDOM = function () {
+ if (this._linkedElementsProcessed) { return; }
+ this._linkedElementsProcessed = true;
+
+ var elm = this.targetElement;
+ do {
+ // If the target element or one of its parent nodes has fixed position,
+ // then use fixed positioning instead
+ //
+ // Note: In Firefox, getComputedStyle returns null in a hidden iframe,
+ // that's why we need to check if the returned style object is non-empty
+ var currStyle = jsc.getStyle(elm);
+ if (currStyle && currStyle.position.toLowerCase() === 'fixed') {
+ this.fixed = true;
+ }
+
+ if (elm !== this.targetElement) {
+ // Ensure to attach onParentScroll only once to each parent element
+ // (multiple targetElements can share the same parent nodes)
+ //
+ // Note: It's not just offsetParents that can be scrollable,
+ // that's why we loop through all parent nodes
+ if (!elm._jscEventsAttached) {
+ jsc.attachEvent(elm, 'scroll', jsc.onParentScroll);
+ elm._jscEventsAttached = true;
+ }
+ }
+ } while ((elm = elm.parentNode) && !jsc.isElementType(elm, 'body'));
+ };
+
+
+ // r: 0-255
+ // g: 0-255
+ // b: 0-255
+ //
+ // returns: [ 0-360, 0-100, 0-100 ]
+ //
+ function RGB_HSV (r, g, b) {
+ r /= 255;
+ g /= 255;
+ b /= 255;
+ var n = Math.min(Math.min(r,g),b);
+ var v = Math.max(Math.max(r,g),b);
+ var m = v - n;
+ if (m === 0) { return [ null, 0, 100 * v ]; }
+ var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m);
+ return [
+ 60 * (h===6?0:h),
+ 100 * (m/v),
+ 100 * v
+ ];
+ }
+
+
+ // h: 0-360
+ // s: 0-100
+ // v: 0-100
+ //
+ // returns: [ 0-255, 0-255, 0-255 ]
+ //
+ function HSV_RGB (h, s, v) {
+ var u = 255 * (v / 100);
+
+ if (h === null) {
+ return [ u, u, u ];
+ }
+
+ h /= 60;
+ s /= 100;
+
+ var i = Math.floor(h);
+ var f = i%2 ? h-i : 1-(h-i);
+ var m = u * (1 - s);
+ var n = u * (1 - s * f);
+ switch (i) {
+ case 6:
+ case 0: return [u,n,m];
+ case 1: return [n,u,m];
+ case 2: return [m,u,n];
+ case 3: return [m,n,u];
+ case 4: return [n,m,u];
+ case 5: return [u,m,n];
+ }
+ }
+
+
+ function detachPicker () {
+ jsc.unsetClass(THIS.targetElement, THIS.activeClass);
+ jsc.picker.wrap.parentNode.removeChild(jsc.picker.wrap);
+ delete jsc.picker.owner;
+ }
+
+
+ function drawPicker () {
+
+ // At this point, when drawing the picker, we know what the parent elements are
+ // and we can do all related DOM operations, such as registering events on them
+ // or checking their positioning
+ THIS._processParentElementsInDOM();
+
+ if (!jsc.picker) {
+ jsc.picker = {
+ owner: null,
+ wrap : document.createElement('div'),
+ box : document.createElement('div'),
+ boxS : document.createElement('div'), // shadow area
+ boxB : document.createElement('div'), // border
+ pad : document.createElement('div'),
+ padB : document.createElement('div'), // border
+ padM : document.createElement('div'), // mouse/touch area
+ padPal : jsc.createPalette(),
+ cross : document.createElement('div'),
+ crossBY : document.createElement('div'), // border Y
+ crossBX : document.createElement('div'), // border X
+ crossLY : document.createElement('div'), // line Y
+ crossLX : document.createElement('div'), // line X
+ sld : document.createElement('div'),
+ sldB : document.createElement('div'), // border
+ sldM : document.createElement('div'), // mouse/touch area
+ sldGrad : jsc.createSliderGradient(),
+ sldPtrS : document.createElement('div'), // slider pointer spacer
+ sldPtrIB : document.createElement('div'), // slider pointer inner border
+ sldPtrMB : document.createElement('div'), // slider pointer middle border
+ sldPtrOB : document.createElement('div'), // slider pointer outer border
+ btn : document.createElement('div'),
+ btnT : document.createElement('span') // text
+ };
+
+ jsc.picker.pad.appendChild(jsc.picker.padPal.elm);
+ jsc.picker.padB.appendChild(jsc.picker.pad);
+ jsc.picker.cross.appendChild(jsc.picker.crossBY);
+ jsc.picker.cross.appendChild(jsc.picker.crossBX);
+ jsc.picker.cross.appendChild(jsc.picker.crossLY);
+ jsc.picker.cross.appendChild(jsc.picker.crossLX);
+ jsc.picker.padB.appendChild(jsc.picker.cross);
+ jsc.picker.box.appendChild(jsc.picker.padB);
+ jsc.picker.box.appendChild(jsc.picker.padM);
+
+ jsc.picker.sld.appendChild(jsc.picker.sldGrad.elm);
+ jsc.picker.sldB.appendChild(jsc.picker.sld);
+ jsc.picker.sldB.appendChild(jsc.picker.sldPtrOB);
+ jsc.picker.sldPtrOB.appendChild(jsc.picker.sldPtrMB);
+ jsc.picker.sldPtrMB.appendChild(jsc.picker.sldPtrIB);
+ jsc.picker.sldPtrIB.appendChild(jsc.picker.sldPtrS);
+ jsc.picker.box.appendChild(jsc.picker.sldB);
+ jsc.picker.box.appendChild(jsc.picker.sldM);
+
+ jsc.picker.btn.appendChild(jsc.picker.btnT);
+ jsc.picker.box.appendChild(jsc.picker.btn);
+
+ jsc.picker.boxB.appendChild(jsc.picker.box);
+ jsc.picker.wrap.appendChild(jsc.picker.boxS);
+ jsc.picker.wrap.appendChild(jsc.picker.boxB);
+ }
+
+ var p = jsc.picker;
+
+ var displaySlider = !!jsc.getSliderComponent(THIS);
+ var dims = jsc.getPickerDims(THIS);
+ var crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize);
+ var padToSliderPadding = jsc.getPadToSliderPadding(THIS);
+ var borderRadius = Math.min(
+ THIS.borderRadius,
+ Math.round(THIS.padding * Math.PI)); // px
+ var padCursor = 'crosshair';
+
+ // wrap
+ p.wrap.style.clear = 'both';
+ p.wrap.style.width = (dims[0] + 2 * THIS.borderWidth) + 'px';
+ p.wrap.style.height = (dims[1] + 2 * THIS.borderWidth) + 'px';
+ p.wrap.style.zIndex = THIS.zIndex;
+
+ // picker
+ p.box.style.width = dims[0] + 'px';
+ p.box.style.height = dims[1] + 'px';
+
+ p.boxS.style.position = 'absolute';
+ p.boxS.style.left = '0';
+ p.boxS.style.top = '0';
+ p.boxS.style.width = '100%';
+ p.boxS.style.height = '100%';
+ jsc.setBorderRadius(p.boxS, borderRadius + 'px');
+
+ // picker border
+ p.boxB.style.position = 'relative';
+ p.boxB.style.border = THIS.borderWidth + 'px solid';
+ p.boxB.style.borderColor = THIS.borderColor;
+ p.boxB.style.background = THIS.backgroundColor;
+ jsc.setBorderRadius(p.boxB, borderRadius + 'px');
+
+ // IE hack:
+ // If the element is transparent, IE will trigger the event on the elements under it,
+ // e.g. on Canvas or on elements with border
+ p.padM.style.background =
+ p.sldM.style.background =
+ '#FFF';
+ jsc.setStyle(p.padM, 'opacity', '0');
+ jsc.setStyle(p.sldM, 'opacity', '0');
+
+ // pad
+ p.pad.style.position = 'relative';
+ p.pad.style.width = THIS.width + 'px';
+ p.pad.style.height = THIS.height + 'px';
+
+ // pad palettes (HSV and HVS)
+ p.padPal.draw(THIS.width, THIS.height, jsc.getPadYComponent(THIS));
+
+ // pad border
+ p.padB.style.position = 'absolute';
+ p.padB.style.left = THIS.padding + 'px';
+ p.padB.style.top = THIS.padding + 'px';
+ p.padB.style.border = THIS.insetWidth + 'px solid';
+ p.padB.style.borderColor = THIS.insetColor;
+
+ // pad mouse area
+ p.padM._jscInstance = THIS;
+ p.padM._jscControlName = 'pad';
+ p.padM.style.position = 'absolute';
+ p.padM.style.left = '0';
+ p.padM.style.top = '0';
+ p.padM.style.width = (THIS.padding + 2 * THIS.insetWidth + THIS.width + padToSliderPadding / 2) + 'px';
+ p.padM.style.height = dims[1] + 'px';
+ p.padM.style.cursor = padCursor;
+
+ // pad cross
+ p.cross.style.position = 'absolute';
+ p.cross.style.left =
+ p.cross.style.top =
+ '0';
+ p.cross.style.width =
+ p.cross.style.height =
+ crossOuterSize + 'px';
+
+ // pad cross border Y and X
+ p.crossBY.style.position =
+ p.crossBX.style.position =
+ 'absolute';
+ p.crossBY.style.background =
+ p.crossBX.style.background =
+ THIS.pointerBorderColor;
+ p.crossBY.style.width =
+ p.crossBX.style.height =
+ (2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px';
+ p.crossBY.style.height =
+ p.crossBX.style.width =
+ crossOuterSize + 'px';
+ p.crossBY.style.left =
+ p.crossBX.style.top =
+ (Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2) - THIS.pointerBorderWidth) + 'px';
+ p.crossBY.style.top =
+ p.crossBX.style.left =
+ '0';
+
+ // pad cross line Y and X
+ p.crossLY.style.position =
+ p.crossLX.style.position =
+ 'absolute';
+ p.crossLY.style.background =
+ p.crossLX.style.background =
+ THIS.pointerColor;
+ p.crossLY.style.height =
+ p.crossLX.style.width =
+ (crossOuterSize - 2 * THIS.pointerBorderWidth) + 'px';
+ p.crossLY.style.width =
+ p.crossLX.style.height =
+ THIS.pointerThickness + 'px';
+ p.crossLY.style.left =
+ p.crossLX.style.top =
+ (Math.floor(crossOuterSize / 2) - Math.floor(THIS.pointerThickness / 2)) + 'px';
+ p.crossLY.style.top =
+ p.crossLX.style.left =
+ THIS.pointerBorderWidth + 'px';
+
+ // slider
+ p.sld.style.overflow = 'hidden';
+ p.sld.style.width = THIS.sliderSize + 'px';
+ p.sld.style.height = THIS.height + 'px';
+
+ // slider gradient
+ p.sldGrad.draw(THIS.sliderSize, THIS.height, '#000', '#000');
+
+ // slider border
+ p.sldB.style.display = displaySlider ? 'block' : 'none';
+ p.sldB.style.position = 'absolute';
+ p.sldB.style.right = THIS.padding + 'px';
+ p.sldB.style.top = THIS.padding + 'px';
+ p.sldB.style.border = THIS.insetWidth + 'px solid';
+ p.sldB.style.borderColor = THIS.insetColor;
+
+ // slider mouse area
+ p.sldM._jscInstance = THIS;
+ p.sldM._jscControlName = 'sld';
+ p.sldM.style.display = displaySlider ? 'block' : 'none';
+ p.sldM.style.position = 'absolute';
+ p.sldM.style.right = '0';
+ p.sldM.style.top = '0';
+ p.sldM.style.width = (THIS.sliderSize + padToSliderPadding / 2 + THIS.padding + 2 * THIS.insetWidth) + 'px';
+ p.sldM.style.height = dims[1] + 'px';
+ p.sldM.style.cursor = 'default';
+
+ // slider pointer inner and outer border
+ p.sldPtrIB.style.border =
+ p.sldPtrOB.style.border =
+ THIS.pointerBorderWidth + 'px solid ' + THIS.pointerBorderColor;
+
+ // slider pointer outer border
+ p.sldPtrOB.style.position = 'absolute';
+ p.sldPtrOB.style.left = -(2 * THIS.pointerBorderWidth + THIS.pointerThickness) + 'px';
+ p.sldPtrOB.style.top = '0';
+
+ // slider pointer middle border
+ p.sldPtrMB.style.border = THIS.pointerThickness + 'px solid ' + THIS.pointerColor;
+
+ // slider pointer spacer
+ p.sldPtrS.style.width = THIS.sliderSize + 'px';
+ p.sldPtrS.style.height = sliderPtrSpace + 'px';
+
+ // the Close button
+ function setBtnBorder () {
+ var insetColors = THIS.insetColor.split(/\s+/);
+ var outsetColor = insetColors.length < 2 ? insetColors[0] : insetColors[1] + ' ' + insetColors[0] + ' ' + insetColors[0] + ' ' + insetColors[1];
+ p.btn.style.borderColor = outsetColor;
+ }
+ p.btn.style.display = THIS.closable ? 'block' : 'none';
+ p.btn.style.position = 'absolute';
+ p.btn.style.left = THIS.padding + 'px';
+ p.btn.style.bottom = THIS.padding + 'px';
+ p.btn.style.padding = '0 15px';
+ p.btn.style.height = THIS.buttonHeight + 'px';
+ p.btn.style.border = THIS.insetWidth + 'px solid';
+ setBtnBorder();
+ p.btn.style.color = THIS.buttonColor;
+ p.btn.style.font = '12px sans-serif';
+ p.btn.style.textAlign = 'center';
+ try {
+ p.btn.style.cursor = 'pointer';
+ } catch(eOldIE) {
+ p.btn.style.cursor = 'hand';
+ }
+ p.btn.onmousedown = function () {
+ THIS.hide();
+ };
+ p.btnT.style.lineHeight = THIS.buttonHeight + 'px';
+ p.btnT.innerHTML = '';
+ p.btnT.appendChild(document.createTextNode(THIS.closeText));
+
+ // place pointers
+ redrawPad();
+ redrawSld();
+
+ // If we are changing the owner without first closing the picker,
+ // make sure to first deal with the old owner
+ if (jsc.picker.owner && jsc.picker.owner !== THIS) {
+ jsc.unsetClass(jsc.picker.owner.targetElement, THIS.activeClass);
+ }
+
+ // Set the new picker owner
+ jsc.picker.owner = THIS;
+
+ // The redrawPosition() method needs picker.owner to be set, that's why we call it here,
+ // after setting the owner
+ if (jsc.isElementType(container, 'body')) {
+ jsc.redrawPosition();
+ } else {
+ jsc._drawPosition(THIS, 0, 0, 'relative', false);
+ }
+
+ if (p.wrap.parentNode != container) {
+ container.appendChild(p.wrap);
+ }
+
+ jsc.setClass(THIS.targetElement, THIS.activeClass);
+ }
+
+
+ function redrawPad () {
+ // redraw the pad pointer
+ switch (jsc.getPadYComponent(THIS)) {
+ case 's': var yComponent = 1; break;
+ case 'v': var yComponent = 2; break;
+ }
+ var x = Math.round((THIS.hsv[0] / 360) * (THIS.width - 1));
+ var y = Math.round((1 - THIS.hsv[yComponent] / 100) * (THIS.height - 1));
+ var crossOuterSize = (2 * THIS.pointerBorderWidth + THIS.pointerThickness + 2 * THIS.crossSize);
+ var ofs = -Math.floor(crossOuterSize / 2);
+ jsc.picker.cross.style.left = (x + ofs) + 'px';
+ jsc.picker.cross.style.top = (y + ofs) + 'px';
+
+ // redraw the slider
+ switch (jsc.getSliderComponent(THIS)) {
+ case 's':
+ var rgb1 = HSV_RGB(THIS.hsv[0], 100, THIS.hsv[2]);
+ var rgb2 = HSV_RGB(THIS.hsv[0], 0, THIS.hsv[2]);
+ var color1 = 'rgb(' +
+ Math.round(rgb1[0]) + ',' +
+ Math.round(rgb1[1]) + ',' +
+ Math.round(rgb1[2]) + ')';
+ var color2 = 'rgb(' +
+ Math.round(rgb2[0]) + ',' +
+ Math.round(rgb2[1]) + ',' +
+ Math.round(rgb2[2]) + ')';
+ jsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2);
+ break;
+ case 'v':
+ var rgb = HSV_RGB(THIS.hsv[0], THIS.hsv[1], 100);
+ var color1 = 'rgb(' +
+ Math.round(rgb[0]) + ',' +
+ Math.round(rgb[1]) + ',' +
+ Math.round(rgb[2]) + ')';
+ var color2 = '#000';
+ jsc.picker.sldGrad.draw(THIS.sliderSize, THIS.height, color1, color2);
+ break;
+ }
+ }
+
+
+ function redrawSld () {
+ var sldComponent = jsc.getSliderComponent(THIS);
+ if (sldComponent) {
+ // redraw the slider pointer
+ switch (sldComponent) {
+ case 's': var yComponent = 1; break;
+ case 'v': var yComponent = 2; break;
+ }
+ var y = Math.round((1 - THIS.hsv[yComponent] / 100) * (THIS.height - 1));
+ jsc.picker.sldPtrOB.style.top = (y - (2 * THIS.pointerBorderWidth + THIS.pointerThickness) - Math.floor(sliderPtrSpace / 2)) + 'px';
+ }
+ }
+
+
+ function isPickerOwner () {
+ return jsc.picker && jsc.picker.owner === THIS;
+ }
+
+
+ function blurValue () {
+ THIS.importColor();
+ }
+
+
+ // Find the target element
+ if (typeof targetElement === 'string') {
+ var id = targetElement;
+ var elm = document.getElementById(id);
+ if (elm) {
+ this.targetElement = elm;
+ } else {
+ jsc.warn('Could not find target element with ID \'' + id + '\'');
+ }
+ } else if (targetElement) {
+ this.targetElement = targetElement;
+ } else {
+ jsc.warn('Invalid target element: \'' + targetElement + '\'');
+ }
+
+ if (this.targetElement._jscLinkedInstance) {
+ jsc.warn('Cannot link jscolor twice to the same element. Skipping.');
+ return;
+ }
+ this.targetElement._jscLinkedInstance = this;
+
+ // Find the value element
+ this.valueElement = jsc.fetchElement(this.valueElement);
+ // Find the style element
+ this.styleElement = jsc.fetchElement(this.styleElement);
+
+ var THIS = this;
+ var container =
+ this.container ?
+ jsc.fetchElement(this.container) :
+ document.getElementsByTagName('body')[0];
+ var sliderPtrSpace = 3; // px
+
+ // For BUTTON elements it's important to stop them from sending the form when clicked
+ // (e.g. in Safari)
+ if (jsc.isElementType(this.targetElement, 'button')) {
+ if (this.targetElement.onclick) {
+ var origCallback = this.targetElement.onclick;
+ this.targetElement.onclick = function (evt) {
+ origCallback.call(this, evt);
+ return false;
+ };
+ } else {
+ this.targetElement.onclick = function () { return false; };
+ }
+ }
+
+ /*
+ var elm = this.targetElement;
+ do {
+ // If the target element or one of its offsetParents has fixed position,
+ // then use fixed positioning instead
+ //
+ // Note: In Firefox, getComputedStyle returns null in a hidden iframe,
+ // that's why we need to check if the returned style object is non-empty
+ var currStyle = jsc.getStyle(elm);
+ if (currStyle && currStyle.position.toLowerCase() === 'fixed') {
+ this.fixed = true;
+ }
+
+ if (elm !== this.targetElement) {
+ // attach onParentScroll so that we can recompute the picker position
+ // when one of the offsetParents is scrolled
+ if (!elm._jscEventsAttached) {
+ jsc.attachEvent(elm, 'scroll', jsc.onParentScroll);
+ elm._jscEventsAttached = true;
+ }
+ }
+ } while ((elm = elm.offsetParent) && !jsc.isElementType(elm, 'body'));
+ */
+
+ // valueElement
+ if (this.valueElement) {
+ if (jsc.isElementType(this.valueElement, 'input')) {
+ var updateField = function () {
+ THIS.fromString(THIS.valueElement.value, jsc.leaveValue);
+ jsc.dispatchFineChange(THIS);
+ };
+ jsc.attachEvent(this.valueElement, 'keyup', updateField);
+ jsc.attachEvent(this.valueElement, 'input', updateField);
+ jsc.attachEvent(this.valueElement, 'blur', blurValue);
+ this.valueElement.setAttribute('autocomplete', 'off');
+ }
+ }
+
+ // styleElement
+ if (this.styleElement) {
+ this.styleElement._jscOrigStyle = {
+ backgroundImage : this.styleElement.style.backgroundImage,
+ backgroundColor : this.styleElement.style.backgroundColor,
+ color : this.styleElement.style.color
+ };
+ }
+
+ if (this.value) {
+ // Try to set the color from the .value option and if unsuccessful,
+ // export the current color
+ this.fromString(this.value) || this.exportColor();
+ } else {
+ this.importColor();
+ }
+ }
+
+};
+
+
+//================================
+// Public properties and methods
+//================================
+
+
+// By default, search for all elements with class="jscolor" and install a color picker on them.
+//
+// You can change what class name will be looked for by setting the property jscolor.lookupClass
+// anywhere in your HTML document. To completely disable the automatic lookup, set it to null.
+//
+jsc.jscolor.lookupClass = 'jscolor';
+
+
+jsc.jscolor.installByClassName = function (className) {
+ var inputElms = document.getElementsByTagName('input');
+ var buttonElms = document.getElementsByTagName('button');
+
+ jsc.tryInstallOnElements(inputElms, className);
+ jsc.tryInstallOnElements(buttonElms, className);
+};
+
+
+jsc.register();
+
+
+return jsc.jscolor;
+
+
+})(); }
diff --git a/wqflask/wqflask/static/new/js_external/md5.min.js b/wqflask/wqflask/static/new/js_external/md5.min.js
new file mode 100644
index 00000000..7d8a3f53
--- /dev/null
+++ b/wqflask/wqflask/static/new/js_external/md5.min.js
@@ -0,0 +1,2 @@
+!function(n){"use strict";function t(n,t){var r=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(r>>16)<<16|65535&r}function r(n,t){return n<<t|n>>>32-t}function e(n,e,o,u,c,f){return t(r(t(t(e,n),t(u,f)),c),o)}function o(n,t,r,o,u,c,f){return e(t&r|~t&o,n,t,u,c,f)}function u(n,t,r,o,u,c,f){return e(t&o|r&~o,n,t,u,c,f)}function c(n,t,r,o,u,c,f){return e(t^r^o,n,t,u,c,f)}function f(n,t,r,o,u,c,f){return e(r^(t|~o),n,t,u,c,f)}function i(n,r){n[r>>5]|=128<<r%32,n[14+(r+64>>>9<<4)]=r;var e,i,a,d,h,l=1732584193,g=-271733879,v=-1732584194,m=271733878;for(e=0;e<n.length;e+=16)i=l,a=g,d=v,h=m,g=f(g=f(g=f(g=f(g=c(g=c(g=c(g=c(g=u(g=u(g=u(g=u(g=o(g=o(g=o(g=o(g,v=o(v,m=o(m,l=o(l,g,v,m,n[e],7,-680876936),g,v,n[e+1],12,-389564586),l,g,n[e+2],17,606105819),m,l,n[e+3],22,-1044525330),v=o(v,m=o(m,l=o(l,g,v,m,n[e+4],7,-176418897),g,v,n[e+5],12,1200080426),l,g,n[e+6],17,-1473231341),m,l,n[e+7],22,-45705983),v=o(v,m=o(m,l=o(l,g,v,m,n[e+8],7,1770035416),g,v,n[e+9],12,-1958414417),l,g,n[e+10],17,-42063),m,l,n[e+11],22,-1990404162),v=o(v,m=o(m,l=o(l,g,v,m,n[e+12],7,1804603682),g,v,n[e+13],12,-40341101),l,g,n[e+14],17,-1502002290),m,l,n[e+15],22,1236535329),v=u(v,m=u(m,l=u(l,g,v,m,n[e+1],5,-165796510),g,v,n[e+6],9,-1069501632),l,g,n[e+11],14,643717713),m,l,n[e],20,-373897302),v=u(v,m=u(m,l=u(l,g,v,m,n[e+5],5,-701558691),g,v,n[e+10],9,38016083),l,g,n[e+15],14,-660478335),m,l,n[e+4],20,-405537848),v=u(v,m=u(m,l=u(l,g,v,m,n[e+9],5,568446438),g,v,n[e+14],9,-1019803690),l,g,n[e+3],14,-187363961),m,l,n[e+8],20,1163531501),v=u(v,m=u(m,l=u(l,g,v,m,n[e+13],5,-1444681467),g,v,n[e+2],9,-51403784),l,g,n[e+7],14,1735328473),m,l,n[e+12],20,-1926607734),v=c(v,m=c(m,l=c(l,g,v,m,n[e+5],4,-378558),g,v,n[e+8],11,-2022574463),l,g,n[e+11],16,1839030562),m,l,n[e+14],23,-35309556),v=c(v,m=c(m,l=c(l,g,v,m,n[e+1],4,-1530992060),g,v,n[e+4],11,1272893353),l,g,n[e+7],16,-155497632),m,l,n[e+10],23,-1094730640),v=c(v,m=c(m,l=c(l,g,v,m,n[e+13],4,681279174),g,v,n[e],11,-358537222),l,g,n[e+3],16,-722521979),m,l,n[e+6],23,76029189),v=c(v,m=c(m,l=c(l,g,v,m,n[e+9],4,-640364487),g,v,n[e+12],11,-421815835),l,g,n[e+15],16,530742520),m,l,n[e+2],23,-995338651),v=f(v,m=f(m,l=f(l,g,v,m,n[e],6,-198630844),g,v,n[e+7],10,1126891415),l,g,n[e+14],15,-1416354905),m,l,n[e+5],21,-57434055),v=f(v,m=f(m,l=f(l,g,v,m,n[e+12],6,1700485571),g,v,n[e+3],10,-1894986606),l,g,n[e+10],15,-1051523),m,l,n[e+1],21,-2054922799),v=f(v,m=f(m,l=f(l,g,v,m,n[e+8],6,1873313359),g,v,n[e+15],10,-30611744),l,g,n[e+6],15,-1560198380),m,l,n[e+13],21,1309151649),v=f(v,m=f(m,l=f(l,g,v,m,n[e+4],6,-145523070),g,v,n[e+11],10,-1120210379),l,g,n[e+2],15,718787259),m,l,n[e+9],21,-343485551),l=t(l,i),g=t(g,a),v=t(v,d),m=t(m,h);return[l,g,v,m]}function a(n){var t,r="",e=32*n.length;for(t=0;t<e;t+=8)r+=String.fromCharCode(n[t>>5]>>>t%32&255);return r}function d(n){var t,r=[];for(r[(n.length>>2)-1]=void 0,t=0;t<r.length;t+=1)r[t]=0;var e=8*n.length;for(t=0;t<e;t+=8)r[t>>5]|=(255&n.charCodeAt(t/8))<<t%32;return r}function h(n){return a(i(d(n),8*n.length))}function l(n,t){var r,e,o=d(n),u=[],c=[];for(u[15]=c[15]=void 0,o.length>16&&(o=i(o,8*n.length)),r=0;r<16;r+=1)u[r]=909522486^o[r],c[r]=1549556828^o[r];return e=i(u.concat(d(t)),512+8*t.length),a(i(c.concat(e),640))}function g(n){var t,r,e="";for(r=0;r<n.length;r+=1)t=n.charCodeAt(r),e+="0123456789abcdef".charAt(t>>>4&15)+"0123456789abcdef".charAt(15&t);return e}function v(n){return unescape(encodeURIComponent(n))}function m(n){return h(v(n))}function p(n){return g(m(n))}function s(n,t){return l(v(n),v(t))}function C(n,t){return g(s(n,t))}function A(n,t,r){return t?r?s(t,n):C(t,n):r?m(n):p(n)}"function"==typeof define&&define.amd?define(function(){return A}):"object"==typeof module&&module.exports?module.exports=A:n.md5=A}(this);
+//# sourceMappingURL=md5.min.js.map \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/js_external/plotly-latest.min.js b/wqflask/wqflask/static/new/js_external/plotly-latest.min.js
new file mode 100644
index 00000000..dde07672
--- /dev/null
+++ b/wqflask/wqflask/static/new/js_external/plotly-latest.min.js
@@ -0,0 +1,7 @@
+/**
+* plotly.js v1.53.0
+* Copyright 2012-2020, Plotly, Inc.
+* All rights reserved.
+* Licensed under the MIT license
+*/
+!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).Plotly=t()}}(function(){return function(){return function t(e,r,n){function a(o,s){if(!r[o]){if(!e[o]){var l="function"==typeof require&&require;if(!s&&l)return l(o,!0);if(i)return i(o,!0);var c=new Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var u=r[o]={exports:{}};e[o][0].call(u.exports,function(t){return a(e[o][1][t]||t)},u,u.exports,t,e,r,n)}return r[o].exports}for(var i="function"==typeof require&&require,o=0;o<n.length;o++)a(n[o]);return a}}()({1:[function(t,e,r){"use strict";var n=t("../src/lib"),a={"X,X div":"direction:ltr;font-family:'Open Sans', verdana, arial, sans-serif;margin:0;padding:0;","X input,X button":"font-family:'Open Sans', verdana, arial, sans-serif;","X input:focus,X button:focus":"outline:none;","X a":"text-decoration:none;","X a:hover":"text-decoration:none;","X .crisp":"shape-rendering:crispEdges;","X .user-select-none":"-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;","X svg":"overflow:hidden;","X svg a":"fill:#447adb;","X svg a:hover":"fill:#3c6dc5;","X .main-svg":"position:absolute;top:0;left:0;pointer-events:none;","X .main-svg .draglayer":"pointer-events:all;","X .cursor-default":"cursor:default;","X .cursor-pointer":"cursor:pointer;","X .cursor-crosshair":"cursor:crosshair;","X .cursor-move":"cursor:move;","X .cursor-col-resize":"cursor:col-resize;","X .cursor-row-resize":"cursor:row-resize;","X .cursor-ns-resize":"cursor:ns-resize;","X .cursor-ew-resize":"cursor:ew-resize;","X .cursor-sw-resize":"cursor:sw-resize;","X .cursor-s-resize":"cursor:s-resize;","X .cursor-se-resize":"cursor:se-resize;","X .cursor-w-resize":"cursor:w-resize;","X .cursor-e-resize":"cursor:e-resize;","X .cursor-nw-resize":"cursor:nw-resize;","X .cursor-n-resize":"cursor:n-resize;","X .cursor-ne-resize":"cursor:ne-resize;","X .cursor-grab":"cursor:-webkit-grab;cursor:grab;","X .modebar":"position:absolute;top:2px;right:2px;","X .ease-bg":"-webkit-transition:background-color 0.3s ease 0s;-moz-transition:background-color 0.3s ease 0s;-ms-transition:background-color 0.3s ease 0s;-o-transition:background-color 0.3s ease 0s;transition:background-color 0.3s ease 0s;","X .modebar--hover>:not(.watermark)":"opacity:0;-webkit-transition:opacity 0.3s ease 0s;-moz-transition:opacity 0.3s ease 0s;-ms-transition:opacity 0.3s ease 0s;-o-transition:opacity 0.3s ease 0s;transition:opacity 0.3s ease 0s;","X:hover .modebar--hover .modebar-group":"opacity:1;","X .modebar-group":"float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;","X .modebar-btn":"position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;","X .modebar-btn svg":"position:relative;top:2px;","X .modebar.vertical":"display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;","X .modebar.vertical svg":"top:-1px;","X .modebar.vertical .modebar-group":"display:block;float:none;padding-left:0px;padding-bottom:8px;","X .modebar.vertical .modebar-group .modebar-btn":"display:block;text-align:center;","X [data-title]:before,X [data-title]:after":"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;","X [data-title]:hover:before,X [data-title]:hover:after":"display:block;opacity:1;","X [data-title]:before":"content:'';position:absolute;background:transparent;border:6px solid transparent;z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;","X [data-title]:after":"content:attr(data-title);background:#69738a;color:white;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;","X .vertical [data-title]:before,X .vertical [data-title]:after":"top:0%;right:200%;","X .vertical [data-title]:before":"border:6px solid transparent;border-left-color:#69738a;margin-top:8px;margin-right:-30px;","X .select-outline":"fill:none;stroke-width:1;shape-rendering:crispEdges;","X .select-outline-1":"stroke:white;","X .select-outline-2":"stroke:black;stroke-dasharray:2px 2px;",Y:"font-family:'Open Sans';position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;","Y p":"margin:0;","Y .notifier-note":"min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140,151,175,0.9);color:#fff;padding:10px;overflow-wrap:break-word;word-wrap:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;","Y .notifier-close":"color:#fff;opacity:0.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;","Y .notifier-close:hover":"color:#444;text-decoration:none;cursor:pointer;"};for(var i in a){var o=i.replace(/^,/," ,").replace(/X/g,".js-plotly-plot .plotly").replace(/Y/g,".plotly-notifier");n.addStyleRule(o,a[i])}},{"../src/lib":717}],2:[function(t,e,r){"use strict";e.exports=t("../src/transforms/aggregate")},{"../src/transforms/aggregate":1297}],3:[function(t,e,r){"use strict";e.exports=t("../src/traces/bar")},{"../src/traces/bar":864}],4:[function(t,e,r){"use strict";e.exports=t("../src/traces/barpolar")},{"../src/traces/barpolar":877}],5:[function(t,e,r){"use strict";e.exports=t("../src/traces/box")},{"../src/traces/box":887}],6:[function(t,e,r){"use strict";e.exports=t("../src/components/calendars")},{"../src/components/calendars":589}],7:[function(t,e,r){"use strict";e.exports=t("../src/traces/candlestick")},{"../src/traces/candlestick":896}],8:[function(t,e,r){"use strict";e.exports=t("../src/traces/carpet")},{"../src/traces/carpet":915}],9:[function(t,e,r){"use strict";e.exports=t("../src/traces/choropleth")},{"../src/traces/choropleth":929}],10:[function(t,e,r){"use strict";e.exports=t("../src/traces/choroplethmapbox")},{"../src/traces/choroplethmapbox":936}],11:[function(t,e,r){"use strict";e.exports=t("../src/traces/cone")},{"../src/traces/cone":942}],12:[function(t,e,r){"use strict";e.exports=t("../src/traces/contour")},{"../src/traces/contour":957}],13:[function(t,e,r){"use strict";e.exports=t("../src/traces/contourcarpet")},{"../src/traces/contourcarpet":968}],14:[function(t,e,r){"use strict";e.exports=t("../src/core")},{"../src/core":695}],15:[function(t,e,r){"use strict";e.exports=t("../src/traces/densitymapbox")},{"../src/traces/densitymapbox":976}],16:[function(t,e,r){"use strict";e.exports=t("../src/transforms/filter")},{"../src/transforms/filter":1298}],17:[function(t,e,r){"use strict";e.exports=t("../src/traces/funnel")},{"../src/traces/funnel":986}],18:[function(t,e,r){"use strict";e.exports=t("../src/traces/funnelarea")},{"../src/traces/funnelarea":995}],19:[function(t,e,r){"use strict";e.exports=t("../src/transforms/groupby")},{"../src/transforms/groupby":1299}],20:[function(t,e,r){"use strict";e.exports=t("../src/traces/heatmap")},{"../src/traces/heatmap":1008}],21:[function(t,e,r){"use strict";e.exports=t("../src/traces/heatmapgl")},{"../src/traces/heatmapgl":1017}],22:[function(t,e,r){"use strict";e.exports=t("../src/traces/histogram")},{"../src/traces/histogram":1029}],23:[function(t,e,r){"use strict";e.exports=t("../src/traces/histogram2d")},{"../src/traces/histogram2d":1035}],24:[function(t,e,r){"use strict";e.exports=t("../src/traces/histogram2dcontour")},{"../src/traces/histogram2dcontour":1039}],25:[function(t,e,r){"use strict";e.exports=t("../src/traces/image")},{"../src/traces/image":1046}],26:[function(t,e,r){"use strict";var n=t("./core");n.register([t("./bar"),t("./box"),t("./heatmap"),t("./histogram"),t("./histogram2d"),t("./histogram2dcontour"),t("./contour"),t("./scatterternary"),t("./violin"),t("./funnel"),t("./waterfall"),t("./image"),t("./pie"),t("./sunburst"),t("./treemap"),t("./funnelarea"),t("./scatter3d"),t("./surface"),t("./isosurface"),t("./volume"),t("./mesh3d"),t("./cone"),t("./streamtube"),t("./scattergeo"),t("./choropleth"),t("./scattergl"),t("./splom"),t("./pointcloud"),t("./heatmapgl"),t("./parcoords"),t("./parcats"),t("./scattermapbox"),t("./choroplethmapbox"),t("./densitymapbox"),t("./sankey"),t("./indicator"),t("./table"),t("./carpet"),t("./scattercarpet"),t("./contourcarpet"),t("./ohlc"),t("./candlestick"),t("./scatterpolar"),t("./scatterpolargl"),t("./barpolar")]),n.register([t("./aggregate"),t("./filter"),t("./groupby"),t("./sort")]),n.register([t("./calendars")]),e.exports=n},{"./aggregate":2,"./bar":3,"./barpolar":4,"./box":5,"./calendars":6,"./candlestick":7,"./carpet":8,"./choropleth":9,"./choroplethmapbox":10,"./cone":11,"./contour":12,"./contourcarpet":13,"./core":14,"./densitymapbox":15,"./filter":16,"./funnel":17,"./funnelarea":18,"./groupby":19,"./heatmap":20,"./heatmapgl":21,"./histogram":22,"./histogram2d":23,"./histogram2dcontour":24,"./image":25,"./indicator":27,"./isosurface":28,"./mesh3d":29,"./ohlc":30,"./parcats":31,"./parcoords":32,"./pie":33,"./pointcloud":34,"./sankey":35,"./scatter3d":36,"./scattercarpet":37,"./scattergeo":38,"./scattergl":39,"./scattermapbox":40,"./scatterpolar":41,"./scatterpolargl":42,"./scatterternary":43,"./sort":44,"./splom":45,"./streamtube":46,"./sunburst":47,"./surface":48,"./table":49,"./treemap":50,"./violin":51,"./volume":52,"./waterfall":53}],27:[function(t,e,r){"use strict";e.exports=t("../src/traces/indicator")},{"../src/traces/indicator":1054}],28:[function(t,e,r){"use strict";e.exports=t("../src/traces/isosurface")},{"../src/traces/isosurface":1060}],29:[function(t,e,r){"use strict";e.exports=t("../src/traces/mesh3d")},{"../src/traces/mesh3d":1065}],30:[function(t,e,r){"use strict";e.exports=t("../src/traces/ohlc")},{"../src/traces/ohlc":1070}],31:[function(t,e,r){"use strict";e.exports=t("../src/traces/parcats")},{"../src/traces/parcats":1079}],32:[function(t,e,r){"use strict";e.exports=t("../src/traces/parcoords")},{"../src/traces/parcoords":1089}],33:[function(t,e,r){"use strict";e.exports=t("../src/traces/pie")},{"../src/traces/pie":1100}],34:[function(t,e,r){"use strict";e.exports=t("../src/traces/pointcloud")},{"../src/traces/pointcloud":1109}],35:[function(t,e,r){"use strict";e.exports=t("../src/traces/sankey")},{"../src/traces/sankey":1115}],36:[function(t,e,r){"use strict";e.exports=t("../src/traces/scatter3d")},{"../src/traces/scatter3d":1152}],37:[function(t,e,r){"use strict";e.exports=t("../src/traces/scattercarpet")},{"../src/traces/scattercarpet":1159}],38:[function(t,e,r){"use strict";e.exports=t("../src/traces/scattergeo")},{"../src/traces/scattergeo":1167}],39:[function(t,e,r){"use strict";e.exports=t("../src/traces/scattergl")},{"../src/traces/scattergl":1180}],40:[function(t,e,r){"use strict";e.exports=t("../src/traces/scattermapbox")},{"../src/traces/scattermapbox":1190}],41:[function(t,e,r){"use strict";e.exports=t("../src/traces/scatterpolar")},{"../src/traces/scatterpolar":1198}],42:[function(t,e,r){"use strict";e.exports=t("../src/traces/scatterpolargl")},{"../src/traces/scatterpolargl":1205}],43:[function(t,e,r){"use strict";e.exports=t("../src/traces/scatterternary")},{"../src/traces/scatterternary":1213}],44:[function(t,e,r){"use strict";e.exports=t("../src/transforms/sort")},{"../src/transforms/sort":1301}],45:[function(t,e,r){"use strict";e.exports=t("../src/traces/splom")},{"../src/traces/splom":1222}],46:[function(t,e,r){"use strict";e.exports=t("../src/traces/streamtube")},{"../src/traces/streamtube":1230}],47:[function(t,e,r){"use strict";e.exports=t("../src/traces/sunburst")},{"../src/traces/sunburst":1238}],48:[function(t,e,r){"use strict";e.exports=t("../src/traces/surface")},{"../src/traces/surface":1247}],49:[function(t,e,r){"use strict";e.exports=t("../src/traces/table")},{"../src/traces/table":1255}],50:[function(t,e,r){"use strict";e.exports=t("../src/traces/treemap")},{"../src/traces/treemap":1264}],51:[function(t,e,r){"use strict";e.exports=t("../src/traces/violin")},{"../src/traces/violin":1276}],52:[function(t,e,r){"use strict";e.exports=t("../src/traces/volume")},{"../src/traces/volume":1284}],53:[function(t,e,r){"use strict";e.exports=t("../src/traces/waterfall")},{"../src/traces/waterfall":1292}],54:[function(t,e,r){"use strict";e.exports=function(t){var e=(t=t||{}).eye||[0,0,1],r=t.center||[0,0,0],s=t.up||[0,1,0],l=t.distanceLimits||[0,1/0],c=t.mode||"turntable",u=n(),h=a(),f=i();return u.setDistanceLimits(l[0],l[1]),u.lookAt(0,e,r,s),h.setDistanceLimits(l[0],l[1]),h.lookAt(0,e,r,s),f.setDistanceLimits(l[0],l[1]),f.lookAt(0,e,r,s),new o({turntable:u,orbit:h,matrix:f},c)};var n=t("turntable-camera-controller"),a=t("orbit-camera-controller"),i=t("matrix-camera-controller");function o(t,e){this._controllerNames=Object.keys(t),this._controllerList=this._controllerNames.map(function(e){return t[e]}),this._mode=e,this._active=t[e],this._active||(this._mode="turntable",this._active=t.turntable),this.modes=this._controllerNames,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}var s=o.prototype;[["flush",1],["idle",1],["lookAt",4],["rotate",4],["pan",4],["translate",4],["setMatrix",2],["setDistanceLimits",2],["setDistance",2]].forEach(function(t){for(var e=t[0],r=[],n=0;n<t[1];++n)r.push("a"+n);var a="var cc=this._controllerList;for(var i=0;i<cc.length;++i){cc[i]."+t[0]+"("+r.join()+")}";s[e]=Function.apply(null,r.concat(a))}),s.recalcMatrix=function(t){this._active.recalcMatrix(t)},s.getDistance=function(t){return this._active.getDistance(t)},s.getDistanceLimits=function(t){return this._active.getDistanceLimits(t)},s.lastT=function(){return this._active.lastT()},s.setMode=function(t){if(t!==this._mode){var e=this._controllerNames.indexOf(t);if(!(e<0)){var r=this._active,n=this._controllerList[e],a=Math.max(r.lastT(),n.lastT());r.recalcMatrix(a),n.setMatrix(a,r.computedMatrix),this._active=n,this._mode=t,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}}},s.getMode=function(){return this._mode}},{"matrix-camera-controller":434,"orbit-camera-controller":457,"turntable-camera-controller":540}],55:[function(t,e,r){var n,a;n=this,a=function(t,e,r,n,a){"use strict";function i(t){return t.target.depth}function o(t,e){return t.sourceLinks.length?t.depth:e-1}function s(t){return function(){return t}}a=a&&a.hasOwnProperty("default")?a.default:a;var l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t};function c(t,e){return h(t.source,e.source)||t.index-e.index}function u(t,e){return h(t.target,e.target)||t.index-e.index}function h(t,e){return t.partOfCycle===e.partOfCycle?t.y0-e.y0:"top"===t.circularLinkType||"bottom"===e.circularLinkType?-1:1}function f(t){return t.value}function p(t){return(t.y0+t.y1)/2}function d(t){return p(t.source)}function g(t){return p(t.target)}function v(t){return t.index}function m(t){return t.nodes}function y(t){return t.links}function x(t,e){var r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function b(t,e){return e(t)}var _=25,w=10,k=.3;function T(t,e){var r=0,n=0;t.links.forEach(function(a){a.circular&&(a.source.circularLinkType||a.target.circularLinkType?a.circularLinkType=a.source.circularLinkType?a.source.circularLinkType:a.target.circularLinkType:a.circularLinkType=r<n?"top":"bottom","top"==a.circularLinkType?r+=1:n+=1,t.nodes.forEach(function(t){b(t,e)!=b(a.source,e)&&b(t,e)!=b(a.target,e)||(t.circularLinkType=a.circularLinkType)}))}),t.links.forEach(function(t){t.circular&&(t.source.circularLinkType==t.target.circularLinkType&&(t.circularLinkType=t.source.circularLinkType),Y(t,e)&&(t.circularLinkType=t.source.circularLinkType))})}function M(t){var e=Math.abs(t.y1-t.y0),r=Math.abs(t.target.x0-t.source.x1);return Math.atan(r/e)}function A(t,e){var r=0;t.sourceLinks.forEach(function(t){r=t.circular&&!Y(t,e)?r+1:r});var n=0;return t.targetLinks.forEach(function(t){n=t.circular&&!Y(t,e)?n+1:n}),r+n}function S(t){var e=t.source.sourceLinks,r=0;e.forEach(function(t){r=t.circular?r+1:r});var n=t.target.targetLinks,a=0;return n.forEach(function(t){a=t.circular?a+1:a}),!(r>1||a>1)}function E(t,e,r){return t.sort(C),t.forEach(function(n,a){var i,o,s=0;if(Y(n,r)&&S(n))n.circularPathData.verticalBuffer=s+n.width/2;else{for(var l=0;l<a;l++)if(i=t[a],o=t[l],!(i.source.column<o.target.column||i.target.column>o.source.column)){var c=t[l].circularPathData.verticalBuffer+t[l].width/2+e;s=c>s?c:s}n.circularPathData.verticalBuffer=s+n.width/2}}),t}function L(t,r,a,i){var o=e.min(t.links,function(t){return t.source.y0});t.links.forEach(function(t){t.circular&&(t.circularPathData={})}),E(t.links.filter(function(t){return"top"==t.circularLinkType}),r,i),E(t.links.filter(function(t){return"bottom"==t.circularLinkType}),r,i),t.links.forEach(function(e){if(e.circular){if(e.circularPathData.arcRadius=e.width+w,e.circularPathData.leftNodeBuffer=5,e.circularPathData.rightNodeBuffer=5,e.circularPathData.sourceWidth=e.source.x1-e.source.x0,e.circularPathData.sourceX=e.source.x0+e.circularPathData.sourceWidth,e.circularPathData.targetX=e.target.x0,e.circularPathData.sourceY=e.y0,e.circularPathData.targetY=e.y1,Y(e,i)&&S(e))e.circularPathData.leftSmallArcRadius=w+e.width/2,e.circularPathData.leftLargeArcRadius=w+e.width/2,e.circularPathData.rightSmallArcRadius=w+e.width/2,e.circularPathData.rightLargeArcRadius=w+e.width/2,"bottom"==e.circularLinkType?(e.circularPathData.verticalFullExtent=e.source.y1+_+e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.rightLargeArcRadius):(e.circularPathData.verticalFullExtent=e.source.y0-_-e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.rightLargeArcRadius);else{var s=e.source.column,l=e.circularLinkType,c=t.links.filter(function(t){return t.source.column==s&&t.circularLinkType==l});"bottom"==e.circularLinkType?c.sort(O):c.sort(P);var u=0;c.forEach(function(t,n){t.circularLinkID==e.circularLinkID&&(e.circularPathData.leftSmallArcRadius=w+e.width/2+u,e.circularPathData.leftLargeArcRadius=w+e.width/2+n*r+u),u+=t.width}),s=e.target.column,c=t.links.filter(function(t){return t.target.column==s&&t.circularLinkType==l}),"bottom"==e.circularLinkType?c.sort(I):c.sort(z),u=0,c.forEach(function(t,n){t.circularLinkID==e.circularLinkID&&(e.circularPathData.rightSmallArcRadius=w+e.width/2+u,e.circularPathData.rightLargeArcRadius=w+e.width/2+n*r+u),u+=t.width}),"bottom"==e.circularLinkType?(e.circularPathData.verticalFullExtent=Math.max(a,e.source.y1,e.target.y1)+_+e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent-e.circularPathData.rightLargeArcRadius):(e.circularPathData.verticalFullExtent=o-_-e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent=e.circularPathData.verticalFullExtent+e.circularPathData.rightLargeArcRadius)}e.circularPathData.leftInnerExtent=e.circularPathData.sourceX+e.circularPathData.leftNodeBuffer,e.circularPathData.rightInnerExtent=e.circularPathData.targetX-e.circularPathData.rightNodeBuffer,e.circularPathData.leftFullExtent=e.circularPathData.sourceX+e.circularPathData.leftLargeArcRadius+e.circularPathData.leftNodeBuffer,e.circularPathData.rightFullExtent=e.circularPathData.targetX-e.circularPathData.rightLargeArcRadius-e.circularPathData.rightNodeBuffer}if(e.circular)e.path=function(t){var e="";e="top"==t.circularLinkType?"M"+t.circularPathData.sourceX+" "+t.circularPathData.sourceY+" L"+t.circularPathData.leftInnerExtent+" "+t.circularPathData.sourceY+" A"+t.circularPathData.leftLargeArcRadius+" "+t.circularPathData.leftSmallArcRadius+" 0 0 0 "+t.circularPathData.leftFullExtent+" "+(t.circularPathData.sourceY-t.circularPathData.leftSmallArcRadius)+" L"+t.circularPathData.leftFullExtent+" "+t.circularPathData.verticalLeftInnerExtent+" A"+t.circularPathData.leftLargeArcRadius+" "+t.circularPathData.leftLargeArcRadius+" 0 0 0 "+t.circularPathData.leftInnerExtent+" "+t.circularPathData.verticalFullExtent+" L"+t.circularPathData.rightInnerExtent+" "+t.circularPathData.verticalFullExtent+" A"+t.circularPathData.rightLargeArcRadius+" "+t.circularPathData.rightLargeArcRadius+" 0 0 0 "+t.circularPathData.rightFullExtent+" "+t.circularPathData.verticalRightInnerExtent+" L"+t.circularPathData.rightFullExtent+" "+(t.circularPathData.targetY-t.circularPathData.rightSmallArcRadius)+" A"+t.circularPathData.rightLargeArcRadius+" "+t.circularPathData.rightSmallArcRadius+" 0 0 0 "+t.circularPathData.rightInnerExtent+" "+t.circularPathData.targetY+" L"+t.circularPathData.targetX+" "+t.circularPathData.targetY:"M"+t.circularPathData.sourceX+" "+t.circularPathData.sourceY+" L"+t.circularPathData.leftInnerExtent+" "+t.circularPathData.sourceY+" A"+t.circularPathData.leftLargeArcRadius+" "+t.circularPathData.leftSmallArcRadius+" 0 0 1 "+t.circularPathData.leftFullExtent+" "+(t.circularPathData.sourceY+t.circularPathData.leftSmallArcRadius)+" L"+t.circularPathData.leftFullExtent+" "+t.circularPathData.verticalLeftInnerExtent+" A"+t.circularPathData.leftLargeArcRadius+" "+t.circularPathData.leftLargeArcRadius+" 0 0 1 "+t.circularPathData.leftInnerExtent+" "+t.circularPathData.verticalFullExtent+" L"+t.circularPathData.rightInnerExtent+" "+t.circularPathData.verticalFullExtent+" A"+t.circularPathData.rightLargeArcRadius+" "+t.circularPathData.rightLargeArcRadius+" 0 0 1 "+t.circularPathData.rightFullExtent+" "+t.circularPathData.verticalRightInnerExtent+" L"+t.circularPathData.rightFullExtent+" "+(t.circularPathData.targetY+t.circularPathData.rightSmallArcRadius)+" A"+t.circularPathData.rightLargeArcRadius+" "+t.circularPathData.rightSmallArcRadius+" 0 0 1 "+t.circularPathData.rightInnerExtent+" "+t.circularPathData.targetY+" L"+t.circularPathData.targetX+" "+t.circularPathData.targetY;return e}(e);else{var h=n.linkHorizontal().source(function(t){return[t.source.x0+(t.source.x1-t.source.x0),t.y0]}).target(function(t){return[t.target.x0,t.y1]});e.path=h(e)}})}function C(t,e){return D(t)==D(e)?"bottom"==t.circularLinkType?O(t,e):P(t,e):D(e)-D(t)}function P(t,e){return t.y0-e.y0}function O(t,e){return e.y0-t.y0}function z(t,e){return t.y1-e.y1}function I(t,e){return e.y1-t.y1}function D(t){return t.target.column-t.source.column}function R(t){return t.target.x0-t.source.x1}function F(t,e){var r=M(t),n=R(e)/Math.tan(r);return"up"==G(t)?t.y1+n:t.y1-n}function B(t,e){var r=M(t),n=R(e)/Math.tan(r);return"up"==G(t)?t.y1-n:t.y1+n}function N(t,e,r,n){t.links.forEach(function(a){if(!a.circular&&a.target.column-a.source.column>1){var i=a.source.column+1,o=a.target.column-1,s=1,l=o-i+1;for(s=1;i<=o;i++,s++)t.nodes.forEach(function(o){if(o.column==i){var c,u=s/(l+1),h=Math.pow(1-u,3),f=3*u*Math.pow(1-u,2),p=3*Math.pow(u,2)*(1-u),d=Math.pow(u,3),g=h*a.y0+f*a.y0+p*a.y1+d*a.y1,v=g-a.width/2,m=g+a.width/2;v>o.y0&&v<o.y1?(c=o.y1-v+10,c="bottom"==o.circularLinkType?c:-c,o=V(o,c,e,r),t.nodes.forEach(function(t){b(t,n)!=b(o,n)&&t.column==o.column&&j(o,t)&&V(t,c,e,r)})):m>o.y0&&m<o.y1?(c=m-o.y0+10,o=V(o,c,e,r),t.nodes.forEach(function(t){b(t,n)!=b(o,n)&&t.column==o.column&&t.y0<o.y1&&t.y1>o.y1&&V(t,c,e,r)})):v<o.y0&&m>o.y1&&(c=m-o.y0+10,o=V(o,c,e,r),t.nodes.forEach(function(t){b(t,n)!=b(o,n)&&t.column==o.column&&t.y0<o.y1&&t.y1>o.y1&&V(t,c,e,r)}))}})}})}function j(t,e){return t.y0>e.y0&&t.y0<e.y1||(t.y1>e.y0&&t.y1<e.y1||t.y0<e.y0&&t.y1>e.y1)}function V(t,e,r,n){return t.y0+e>=r&&t.y1+e<=n&&(t.y0=t.y0+e,t.y1=t.y1+e,t.targetLinks.forEach(function(t){t.y1=t.y1+e}),t.sourceLinks.forEach(function(t){t.y0=t.y0+e})),t}function U(t,e,r,n){t.nodes.forEach(function(a){n&&a.y+(a.y1-a.y0)>e&&(a.y=a.y-(a.y+(a.y1-a.y0)-e));var i=t.links.filter(function(t){return b(t.source,r)==b(a,r)}),o=i.length;o>1&&i.sort(function(t,e){if(!t.circular&&!e.circular){if(t.target.column==e.target.column)return t.y1-e.y1;if(!H(t,e))return t.y1-e.y1;if(t.target.column>e.target.column){var r=B(e,t);return t.y1-r}if(e.target.column>t.target.column)return B(t,e)-e.y1}return t.circular&&!e.circular?"top"==t.circularLinkType?-1:1:e.circular&&!t.circular?"top"==e.circularLinkType?1:-1:t.circular&&e.circular?t.circularLinkType===e.circularLinkType&&"top"==t.circularLinkType?t.target.column===e.target.column?t.target.y1-e.target.y1:e.target.column-t.target.column:t.circularLinkType===e.circularLinkType&&"bottom"==t.circularLinkType?t.target.column===e.target.column?e.target.y1-t.target.y1:t.target.column-e.target.column:"top"==t.circularLinkType?-1:1:void 0});var s=a.y0;i.forEach(function(t){t.y0=s+t.width/2,s+=t.width}),i.forEach(function(t,e){if("bottom"==t.circularLinkType){for(var r=e+1,n=0;r<o;r++)n+=i[r].width;t.y0=a.y1-n-t.width/2}})})}function q(t,e,r){t.nodes.forEach(function(e){var n=t.links.filter(function(t){return b(t.target,r)==b(e,r)}),a=n.length;a>1&&n.sort(function(t,e){if(!t.circular&&!e.circular){if(t.source.column==e.source.column)return t.y0-e.y0;if(!H(t,e))return t.y0-e.y0;if(e.source.column<t.source.column){var r=F(e,t);return t.y0-r}if(t.source.column<e.source.column)return F(t,e)-e.y0}return t.circular&&!e.circular?"top"==t.circularLinkType?-1:1:e.circular&&!t.circular?"top"==e.circularLinkType?1:-1:t.circular&&e.circular?t.circularLinkType===e.circularLinkType&&"top"==t.circularLinkType?t.source.column===e.source.column?t.source.y1-e.source.y1:t.source.column-e.source.column:t.circularLinkType===e.circularLinkType&&"bottom"==t.circularLinkType?t.source.column===e.source.column?t.source.y1-e.source.y1:e.source.column-t.source.column:"top"==t.circularLinkType?-1:1:void 0});var i=e.y0;n.forEach(function(t){t.y1=i+t.width/2,i+=t.width}),n.forEach(function(t,r){if("bottom"==t.circularLinkType){for(var i=r+1,o=0;i<a;i++)o+=n[i].width;t.y1=e.y1-o-t.width/2}})})}function H(t,e){return G(t)==G(e)}function G(t){return t.y0-t.y1>0?"up":"down"}function Y(t,e){return b(t.source,e)==b(t.target,e)}t.sankeyCircular=function(){var t,n,i=0,b=0,M=1,S=1,E=24,C=v,P=o,O=m,z=y,I=32,D=2,R=null;function F(){var o={nodes:O.apply(null,arguments),links:z.apply(null,arguments)};!function(t){t.nodes.forEach(function(t,e){t.index=e,t.sourceLinks=[],t.targetLinks=[]});var e=r.map(t.nodes,C);t.links.forEach(function(t,r){t.index=r;var n=t.source,a=t.target;"object"!==("undefined"==typeof n?"undefined":l(n))&&(n=t.source=x(e,n)),"object"!==("undefined"==typeof a?"undefined":l(a))&&(a=t.target=x(e,a)),n.sourceLinks.push(t),a.targetLinks.push(t)})}(o),function(t,e,r){var n=0;if(null===r){for(var i=[],o=0;o<t.links.length;o++){var s=t.links[o],l=s.source.index,c=s.target.index;i[l]||(i[l]=[]),i[c]||(i[c]=[]),-1===i[l].indexOf(c)&&i[l].push(c)}var u=a(i);u.sort(function(t,e){return t.length-e.length});var h={};for(o=0;o<u.length;o++){var f=u[o],p=f.slice(-2);h[p[0]]||(h[p[0]]={}),h[p[0]][p[1]]=!0}t.links.forEach(function(t){var e=t.target.index,r=t.source.index;e===r||h[r]&&h[r][e]?(t.circular=!0,t.circularLinkID=n,n+=1):t.circular=!1})}else t.links.forEach(function(t){t.source[r]<t.target[r]?t.circular=!1:(t.circular=!0,t.circularLinkID=n,n+=1)})}(o,0,R),function(t){t.nodes.forEach(function(t){t.partOfCycle=!1,t.value=Math.max(e.sum(t.sourceLinks,f),e.sum(t.targetLinks,f)),t.sourceLinks.forEach(function(e){e.circular&&(t.partOfCycle=!0,t.circularLinkType=e.circularLinkType)}),t.targetLinks.forEach(function(e){e.circular&&(t.partOfCycle=!0,t.circularLinkType=e.circularLinkType)})})}(o),function(t){var e,r,n;for(e=t.nodes,r=[],n=0;e.length;++n,e=r,r=[])e.forEach(function(t){t.depth=n,t.sourceLinks.forEach(function(t){r.indexOf(t.target)<0&&!t.circular&&r.push(t.target)})});for(e=t.nodes,r=[],n=0;e.length;++n,e=r,r=[])e.forEach(function(t){t.height=n,t.targetLinks.forEach(function(t){r.indexOf(t.source)<0&&!t.circular&&r.push(t.source)})});t.nodes.forEach(function(t){t.column=Math.floor(P.call(null,t,n))})}(o),T(o,C),function(a,o,s){var l=r.nest().key(function(t){return t.column}).sortKeys(e.ascending).entries(a.nodes).map(function(t){return t.values});(function(r){if(n){var o=1/0;l.forEach(function(t){var e=S*n/(t.length+1);o=e<o?e:o}),t=o}var s=e.min(l,function(r){return(S-b-(r.length-1)*t)/e.sum(r,f)});s*=k,a.links.forEach(function(t){t.width=t.value*s});var c=function(t){var r=0,n=0,a=0,i=0,o=e.max(t.nodes,function(t){return t.column});return t.links.forEach(function(t){t.circular&&("top"==t.circularLinkType?r+=t.width:n+=t.width,0==t.target.column&&(i+=t.width),t.source.column==o&&(a+=t.width))}),{top:r=r>0?r+_+w:r,bottom:n=n>0?n+_+w:n,left:i=i>0?i+_+w:i,right:a=a>0?a+_+w:a}}(a),u=function(t,r){var n=e.max(t.nodes,function(t){return t.column}),a=M-i,o=S-b,s=a+r.right+r.left,l=o+r.top+r.bottom,c=a/s,u=o/l;return i=i*c+r.left,M=0==r.right?M:M*c,b=b*u+r.top,S*=u,t.nodes.forEach(function(t){t.x0=i+t.column*((M-i-E)/n),t.x1=t.x0+E}),u}(a,c);s*=u,a.links.forEach(function(t){t.width=t.value*s}),l.forEach(function(t){var e=t.length;t.forEach(function(t,n){t.depth==l.length-1&&1==e?(t.y0=S/2-t.value*s,t.y1=t.y0+t.value*s):0==t.depth&&1==e?(t.y0=S/2-t.value*s,t.y1=t.y0+t.value*s):t.partOfCycle?0==A(t,r)?(t.y0=S/2+n,t.y1=t.y0+t.value*s):"top"==t.circularLinkType?(t.y0=b+n,t.y1=t.y0+t.value*s):(t.y0=S-t.value*s-n,t.y1=t.y0+t.value*s):0==c.top||0==c.bottom?(t.y0=(S-b)/e*n,t.y1=t.y0+t.value*s):(t.y0=(S-b)/2-e/2+n,t.y1=t.y0+t.value*s)})})})(s),m();for(var c=1,u=o;u>0;--u)v(c*=.99,s),m();function v(t,r){var n=l.length;l.forEach(function(a){var i=a.length,o=a[0].depth;a.forEach(function(a){var s;if(a.sourceLinks.length||a.targetLinks.length)if(a.partOfCycle&&A(a,r)>0);else if(0==o&&1==i)s=a.y1-a.y0,a.y0=S/2-s/2,a.y1=S/2+s/2;else if(o==n-1&&1==i)s=a.y1-a.y0,a.y0=S/2-s/2,a.y1=S/2+s/2;else{var l=e.mean(a.sourceLinks,g),c=e.mean(a.targetLinks,d),u=((l&&c?(l+c)/2:l||c)-p(a))*t;a.y0+=u,a.y1+=u}})})}function m(){l.forEach(function(e){var r,n,a,i=b,o=e.length;for(e.sort(h),a=0;a<o;++a)r=e[a],(n=i-r.y0)>0&&(r.y0+=n,r.y1+=n),i=r.y1+t;if((n=i-t-S)>0)for(i=r.y0-=n,r.y1-=n,a=o-2;a>=0;--a)r=e[a],(n=r.y1+t-i)>0&&(r.y0-=n,r.y1-=n),i=r.y0})}}(o,I,C),B(o);for(var s=0;s<4;s++)U(o,S,C),q(o,0,C),N(o,b,S,C),U(o,S,C),q(o,0,C);return function(t,r,n){var a=t.nodes,i=t.links,o=!1,s=!1;if(i.forEach(function(t){"top"==t.circularLinkType?o=!0:"bottom"==t.circularLinkType&&(s=!0)}),0==o||0==s){var l=e.min(a,function(t){return t.y0}),c=e.max(a,function(t){return t.y1}),u=c-l,h=n-r,f=h/u;a.forEach(function(t){var e=(t.y1-t.y0)*f;t.y0=(t.y0-l)*f,t.y1=t.y0+e}),i.forEach(function(t){t.y0=(t.y0-l)*f,t.y1=(t.y1-l)*f,t.width=t.width*f})}}(o,b,S),L(o,D,S,C),o}function B(t){t.nodes.forEach(function(t){t.sourceLinks.sort(u),t.targetLinks.sort(c)}),t.nodes.forEach(function(t){var e=t.y0,r=e,n=t.y1,a=n;t.sourceLinks.forEach(function(t){t.circular?(t.y0=n-t.width/2,n-=t.width):(t.y0=e+t.width/2,e+=t.width)}),t.targetLinks.forEach(function(t){t.circular?(t.y1=a-t.width/2,a-=t.width):(t.y1=r+t.width/2,r+=t.width)})})}return F.nodeId=function(t){return arguments.length?(C="function"==typeof t?t:s(t),F):C},F.nodeAlign=function(t){return arguments.length?(P="function"==typeof t?t:s(t),F):P},F.nodeWidth=function(t){return arguments.length?(E=+t,F):E},F.nodePadding=function(e){return arguments.length?(t=+e,F):t},F.nodes=function(t){return arguments.length?(O="function"==typeof t?t:s(t),F):O},F.links=function(t){return arguments.length?(z="function"==typeof t?t:s(t),F):z},F.size=function(t){return arguments.length?(i=b=0,M=+t[0],S=+t[1],F):[M-i,S-b]},F.extent=function(t){return arguments.length?(i=+t[0][0],M=+t[1][0],b=+t[0][1],S=+t[1][1],F):[[i,b],[M,S]]},F.iterations=function(t){return arguments.length?(I=+t,F):I},F.circularLinkGap=function(t){return arguments.length?(D=+t,F):D},F.nodePaddingRatio=function(t){return arguments.length?(n=+t,F):n},F.sortNodes=function(t){return arguments.length?(R=t,F):R},F.update=function(t){return T(t,C),B(t),t.links.forEach(function(t){t.circular&&(t.circularLinkType=t.y0+t.y1<S?"top":"bottom",t.source.circularLinkType=t.circularLinkType,t.target.circularLinkType=t.circularLinkType)}),U(t,S,C,!1),q(t,0,C),L(t,D,S,C),t},F},t.sankeyCenter=function(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?e.min(t.sourceLinks,i)-1:0},t.sankeyLeft=function(t){return t.depth},t.sankeyRight=function(t,e){return e-1-t.height},t.sankeyJustify=o,Object.defineProperty(t,"__esModule",{value:!0})},"object"==typeof r&&"undefined"!=typeof e?a(r,t("d3-array"),t("d3-collection"),t("d3-shape"),t("elementary-circuits-directed-graph")):a(n.d3=n.d3||{},n.d3,n.d3,n.d3,null)},{"d3-array":154,"d3-collection":155,"d3-shape":163,"elementary-circuits-directed-graph":175}],56:[function(t,e,r){var n,a;n=this,a=function(t,e,r,n){"use strict";function a(t){return t.target.depth}function i(t,e){return t.sourceLinks.length?t.depth:e-1}function o(t){return function(){return t}}function s(t,e){return c(t.source,e.source)||t.index-e.index}function l(t,e){return c(t.target,e.target)||t.index-e.index}function c(t,e){return t.y0-e.y0}function u(t){return t.value}function h(t){return(t.y0+t.y1)/2}function f(t){return h(t.source)*t.value}function p(t){return h(t.target)*t.value}function d(t){return t.index}function g(t){return t.nodes}function v(t){return t.links}function m(t,e){var r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function y(t){return[t.source.x1,t.y0]}function x(t){return[t.target.x0,t.y1]}t.sankey=function(){var t=0,n=0,a=1,y=1,x=24,b=8,_=d,w=i,k=g,T=v,M=32,A=2/3;function S(){var i={nodes:k.apply(null,arguments),links:T.apply(null,arguments)};return function(t){t.nodes.forEach(function(t,e){t.index=e,t.sourceLinks=[],t.targetLinks=[]});var e=r.map(t.nodes,_);t.links.forEach(function(t,r){t.index=r;var n=t.source,a=t.target;"object"!=typeof n&&(n=t.source=m(e,n)),"object"!=typeof a&&(a=t.target=m(e,a)),n.sourceLinks.push(t),a.targetLinks.push(t)})}(i),function(t){t.nodes.forEach(function(t){t.value=Math.max(e.sum(t.sourceLinks,u),e.sum(t.targetLinks,u))})}(i),function(e){var r,n,i;for(r=e.nodes,n=[],i=0;r.length;++i,r=n,n=[])r.forEach(function(t){t.depth=i,t.sourceLinks.forEach(function(t){n.indexOf(t.target)<0&&n.push(t.target)})});for(r=e.nodes,n=[],i=0;r.length;++i,r=n,n=[])r.forEach(function(t){t.height=i,t.targetLinks.forEach(function(t){n.indexOf(t.source)<0&&n.push(t.source)})});var o=(a-t-x)/(i-1);e.nodes.forEach(function(e){e.x1=(e.x0=t+Math.max(0,Math.min(i-1,Math.floor(w.call(null,e,i))))*o)+x})}(i),function(t){var a=r.nest().key(function(t){return t.x0}).sortKeys(e.ascending).entries(t.nodes).map(function(t){return t.values});(function(){var r=e.max(a,function(t){return t.length}),i=A*(y-n)/(r-1);b>i&&(b=i);var o=e.min(a,function(t){return(y-n-(t.length-1)*b)/e.sum(t,u)});a.forEach(function(t){t.forEach(function(t,e){t.y1=(t.y0=e)+t.value*o})}),t.links.forEach(function(t){t.width=t.value*o})})(),d();for(var i=1,o=M;o>0;--o)l(i*=.99),d(),s(i),d();function s(t){a.forEach(function(r){r.forEach(function(r){if(r.targetLinks.length){var n=(e.sum(r.targetLinks,f)/e.sum(r.targetLinks,u)-h(r))*t;r.y0+=n,r.y1+=n}})})}function l(t){a.slice().reverse().forEach(function(r){r.forEach(function(r){if(r.sourceLinks.length){var n=(e.sum(r.sourceLinks,p)/e.sum(r.sourceLinks,u)-h(r))*t;r.y0+=n,r.y1+=n}})})}function d(){a.forEach(function(t){var e,r,a,i=n,o=t.length;for(t.sort(c),a=0;a<o;++a)e=t[a],(r=i-e.y0)>0&&(e.y0+=r,e.y1+=r),i=e.y1+b;if((r=i-b-y)>0)for(i=e.y0-=r,e.y1-=r,a=o-2;a>=0;--a)e=t[a],(r=e.y1+b-i)>0&&(e.y0-=r,e.y1-=r),i=e.y0})}}(i),E(i),i}function E(t){t.nodes.forEach(function(t){t.sourceLinks.sort(l),t.targetLinks.sort(s)}),t.nodes.forEach(function(t){var e=t.y0,r=e;t.sourceLinks.forEach(function(t){t.y0=e+t.width/2,e+=t.width}),t.targetLinks.forEach(function(t){t.y1=r+t.width/2,r+=t.width})})}return S.update=function(t){return E(t),t},S.nodeId=function(t){return arguments.length?(_="function"==typeof t?t:o(t),S):_},S.nodeAlign=function(t){return arguments.length?(w="function"==typeof t?t:o(t),S):w},S.nodeWidth=function(t){return arguments.length?(x=+t,S):x},S.nodePadding=function(t){return arguments.length?(b=+t,S):b},S.nodes=function(t){return arguments.length?(k="function"==typeof t?t:o(t),S):k},S.links=function(t){return arguments.length?(T="function"==typeof t?t:o(t),S):T},S.size=function(e){return arguments.length?(t=n=0,a=+e[0],y=+e[1],S):[a-t,y-n]},S.extent=function(e){return arguments.length?(t=+e[0][0],a=+e[1][0],n=+e[0][1],y=+e[1][1],S):[[t,n],[a,y]]},S.iterations=function(t){return arguments.length?(M=+t,S):M},S},t.sankeyCenter=function(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?e.min(t.sourceLinks,a)-1:0},t.sankeyLeft=function(t){return t.depth},t.sankeyRight=function(t,e){return e-1-t.height},t.sankeyJustify=i,t.sankeyLinkHorizontal=function(){return n.linkHorizontal().source(y).target(x)},Object.defineProperty(t,"__esModule",{value:!0})},"object"==typeof r&&"undefined"!=typeof e?a(r,t("d3-array"),t("d3-collection"),t("d3-shape")):a(n.d3=n.d3||{},n.d3,n.d3,n.d3)},{"d3-array":154,"d3-collection":155,"d3-shape":163}],57:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=t("@turf/meta"),a=6378137;function i(t){var e=0;if(t&&t.length>0){e+=Math.abs(o(t[0]));for(var r=1;r<t.length;r++)e-=Math.abs(o(t[r]))}return e}function o(t){var e,r,n,i,o,l,c=0,u=t.length;if(u>2){for(l=0;l<u;l++)l===u-2?(n=u-2,i=u-1,o=0):l===u-1?(n=u-1,i=0,o=1):(n=l,i=l+1,o=l+2),e=t[n],r=t[i],c+=(s(t[o][0])-s(e[0]))*Math.sin(s(r[1]));c=c*a*a/2}return c}function s(t){return t*Math.PI/180}r.default=function(t){return n.geomReduce(t,function(t,e){return t+function(t){var e,r=0;switch(t.type){case"Polygon":return i(t.coordinates);case"MultiPolygon":for(e=0;e<t.coordinates.length;e++)r+=i(t.coordinates[e]);return r;case"Point":case"MultiPoint":case"LineString":case"MultiLineString":return 0}return 0}(e)},0)}},{"@turf/meta":61}],58:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=t("@turf/meta");r.default=function(t){var e=[1/0,1/0,-1/0,-1/0];return n.coordEach(t,function(t){e[0]>t[0]&&(e[0]=t[0]),e[1]>t[1]&&(e[1]=t[1]),e[2]<t[0]&&(e[2]=t[0]),e[3]<t[1]&&(e[3]=t[1])}),e}},{"@turf/meta":61}],59:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=t("@turf/meta"),a=t("@turf/helpers");r.default=function(t,e){void 0===e&&(e={});var r=0,i=0,o=0;return n.coordEach(t,function(t){r+=t[0],i+=t[1],o++}),a.point([r/o,i/o],e.properties)}},{"@turf/helpers":60,"@turf/meta":61}],60:[function(t,e,r){"use strict";function n(t,e,r){void 0===r&&(r={});var n={type:"Feature"};return(0===r.id||r.id)&&(n.id=r.id),r.bbox&&(n.bbox=r.bbox),n.properties=e||{},n.geometry=t,n}function a(t,e,r){return void 0===r&&(r={}),n({type:"Point",coordinates:t},e,r)}function i(t,e,r){void 0===r&&(r={});for(var a=0,i=t;a<i.length;a++){var o=i[a];if(o.length<4)throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");for(var s=0;s<o[o.length-1].length;s++)if(o[o.length-1][s]!==o[0][s])throw new Error("First and last Position are not equivalent.")}return n({type:"Polygon",coordinates:t},e,r)}function o(t,e,r){if(void 0===r&&(r={}),t.length<2)throw new Error("coordinates must be an array of two or more positions");return n({type:"LineString",coordinates:t},e,r)}function s(t,e){void 0===e&&(e={});var r={type:"FeatureCollection"};return e.id&&(r.id=e.id),e.bbox&&(r.bbox=e.bbox),r.features=t,r}function l(t,e,r){return void 0===r&&(r={}),n({type:"MultiLineString",coordinates:t},e,r)}function c(t,e,r){return void 0===r&&(r={}),n({type:"MultiPoint",coordinates:t},e,r)}function u(t,e,r){return void 0===r&&(r={}),n({type:"MultiPolygon",coordinates:t},e,r)}function h(t,e){void 0===e&&(e="kilometers");var n=r.factors[e];if(!n)throw new Error(e+" units is invalid");return t*n}function f(t,e){void 0===e&&(e="kilometers");var n=r.factors[e];if(!n)throw new Error(e+" units is invalid");return t/n}function p(t){return 180*(t%(2*Math.PI))/Math.PI}function d(t){return!isNaN(t)&&null!==t&&!Array.isArray(t)&&!/^\s*$/.test(t)}Object.defineProperty(r,"__esModule",{value:!0}),r.earthRadius=6371008.8,r.factors={centimeters:100*r.earthRadius,centimetres:100*r.earthRadius,degrees:r.earthRadius/111325,feet:3.28084*r.earthRadius,inches:39.37*r.earthRadius,kilometers:r.earthRadius/1e3,kilometres:r.earthRadius/1e3,meters:r.earthRadius,metres:r.earthRadius,miles:r.earthRadius/1609.344,millimeters:1e3*r.earthRadius,millimetres:1e3*r.earthRadius,nauticalmiles:r.earthRadius/1852,radians:1,yards:r.earthRadius/1.0936},r.unitsFactors={centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/r.earthRadius,yards:1/1.0936},r.areaFactors={acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:3.86e-7,millimeters:1e6,millimetres:1e6,yards:1.195990046},r.feature=n,r.geometry=function(t,e,r){switch(void 0===r&&(r={}),t){case"Point":return a(e).geometry;case"LineString":return o(e).geometry;case"Polygon":return i(e).geometry;case"MultiPoint":return c(e).geometry;case"MultiLineString":return l(e).geometry;case"MultiPolygon":return u(e).geometry;default:throw new Error(t+" is invalid")}},r.point=a,r.points=function(t,e,r){return void 0===r&&(r={}),s(t.map(function(t){return a(t,e)}),r)},r.polygon=i,r.polygons=function(t,e,r){return void 0===r&&(r={}),s(t.map(function(t){return i(t,e)}),r)},r.lineString=o,r.lineStrings=function(t,e,r){return void 0===r&&(r={}),s(t.map(function(t){return o(t,e)}),r)},r.featureCollection=s,r.multiLineString=l,r.multiPoint=c,r.multiPolygon=u,r.geometryCollection=function(t,e,r){return void 0===r&&(r={}),n({type:"GeometryCollection",geometries:t},e,r)},r.round=function(t,e){if(void 0===e&&(e=0),e&&!(e>=0))throw new Error("precision must be a positive number");var r=Math.pow(10,e||0);return Math.round(t*r)/r},r.radiansToLength=h,r.lengthToRadians=f,r.lengthToDegrees=function(t,e){return p(f(t,e))},r.bearingToAzimuth=function(t){var e=t%360;return e<0&&(e+=360),e},r.radiansToDegrees=p,r.degreesToRadians=function(t){return t%360*Math.PI/180},r.convertLength=function(t,e,r){if(void 0===e&&(e="kilometers"),void 0===r&&(r="kilometers"),!(t>=0))throw new Error("length must be a positive number");return h(f(t,e),r)},r.convertArea=function(t,e,n){if(void 0===e&&(e="meters"),void 0===n&&(n="kilometers"),!(t>=0))throw new Error("area must be a positive number");var a=r.areaFactors[e];if(!a)throw new Error("invalid original units");var i=r.areaFactors[n];if(!i)throw new Error("invalid final units");return t/a*i},r.isNumber=d,r.isObject=function(t){return!!t&&t.constructor===Object},r.validateBBox=function(t){if(!t)throw new Error("bbox is required");if(!Array.isArray(t))throw new Error("bbox must be an Array");if(4!==t.length&&6!==t.length)throw new Error("bbox must be an Array of 4 or 6 numbers");t.forEach(function(t){if(!d(t))throw new Error("bbox must only contain numbers")})},r.validateId=function(t){if(!t)throw new Error("id is required");if(-1===["string","number"].indexOf(typeof t))throw new Error("id must be a number or a string")},r.radians2degrees=function(){throw new Error("method has been renamed to `radiansToDegrees`")},r.degrees2radians=function(){throw new Error("method has been renamed to `degreesToRadians`")},r.distanceToDegrees=function(){throw new Error("method has been renamed to `lengthToDegrees`")},r.distanceToRadians=function(){throw new Error("method has been renamed to `lengthToRadians`")},r.radiansToDistance=function(){throw new Error("method has been renamed to `radiansToLength`")},r.bearingToAngle=function(){throw new Error("method has been renamed to `bearingToAzimuth`")},r.convertDistance=function(){throw new Error("method has been renamed to `convertLength`")}},{}],61:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=t("@turf/helpers");function a(t,e,r){if(null!==t)for(var n,i,o,s,l,c,u,h,f=0,p=0,d=t.type,g="FeatureCollection"===d,v="Feature"===d,m=g?t.features.length:1,y=0;y<m;y++){l=(h=!!(u=g?t.features[y].geometry:v?t.geometry:t)&&"GeometryCollection"===u.type)?u.geometries.length:1;for(var x=0;x<l;x++){var b=0,_=0;if(null!==(s=h?u.geometries[x]:u)){c=s.coordinates;var w=s.type;switch(f=!r||"Polygon"!==w&&"MultiPolygon"!==w?0:1,w){case null:break;case"Point":if(!1===e(c,p,y,b,_))return!1;p++,b++;break;case"LineString":case"MultiPoint":for(n=0;n<c.length;n++){if(!1===e(c[n],p,y,b,_))return!1;p++,"MultiPoint"===w&&b++}"LineString"===w&&b++;break;case"Polygon":case"MultiLineString":for(n=0;n<c.length;n++){for(i=0;i<c[n].length-f;i++){if(!1===e(c[n][i],p,y,b,_))return!1;p++}"MultiLineString"===w&&b++,"Polygon"===w&&_++}"Polygon"===w&&b++;break;case"MultiPolygon":for(n=0;n<c.length;n++){for(_=0,i=0;i<c[n].length;i++){for(o=0;o<c[n][i].length-f;o++){if(!1===e(c[n][i][o],p,y,b,_))return!1;p++}_++}b++}break;case"GeometryCollection":for(n=0;n<s.geometries.length;n++)if(!1===a(s.geometries[n],e,r))return!1;break;default:throw new Error("Unknown Geometry Type")}}}}}function i(t,e){var r;switch(t.type){case"FeatureCollection":for(r=0;r<t.features.length&&!1!==e(t.features[r].properties,r);r++);break;case"Feature":e(t.properties,0)}}function o(t,e){if("Feature"===t.type)e(t,0);else if("FeatureCollection"===t.type)for(var r=0;r<t.features.length&&!1!==e(t.features[r],r);r++);}function s(t,e){var r,n,a,i,o,s,l,c,u,h,f=0,p="FeatureCollection"===t.type,d="Feature"===t.type,g=p?t.features.length:1;for(r=0;r<g;r++){for(s=p?t.features[r].geometry:d?t.geometry:t,c=p?t.features[r].properties:d?t.properties:{},u=p?t.features[r].bbox:d?t.bbox:void 0,h=p?t.features[r].id:d?t.id:void 0,o=(l=!!s&&"GeometryCollection"===s.type)?s.geometries.length:1,a=0;a<o;a++)if(null!==(i=l?s.geometries[a]:s))switch(i.type){case"Point":case"LineString":case"MultiPoint":case"Polygon":case"MultiLineString":case"MultiPolygon":if(!1===e(i,f,c,u,h))return!1;break;case"GeometryCollection":for(n=0;n<i.geometries.length;n++)if(!1===e(i.geometries[n],f,c,u,h))return!1;break;default:throw new Error("Unknown Geometry Type")}else if(!1===e(null,f,c,u,h))return!1;f++}}function l(t,e){s(t,function(t,r,a,i,o){var s,l=null===t?null:t.type;switch(l){case null:case"Point":case"LineString":case"Polygon":return!1!==e(n.feature(t,a,{bbox:i,id:o}),r,0)&&void 0}switch(l){case"MultiPoint":s="Point";break;case"MultiLineString":s="LineString";break;case"MultiPolygon":s="Polygon"}for(var c=0;c<t.coordinates.length;c++){var u={type:s,coordinates:t.coordinates[c]};if(!1===e(n.feature(u,a),r,c))return!1}})}function c(t,e){l(t,function(t,r,i){var o=0;if(t.geometry){var s=t.geometry.type;if("Point"!==s&&"MultiPoint"!==s){var l,c=0,u=0,h=0;return!1!==a(t,function(a,s,f,p,d){if(void 0===l||r>c||p>u||d>h)return l=a,c=r,u=p,h=d,void(o=0);var g=n.lineString([l,a],t.properties);if(!1===e(g,r,i,d,o))return!1;o++,l=a})&&void 0}}})}function u(t,e){if(!t)throw new Error("geojson is required");l(t,function(t,r,a){if(null!==t.geometry){var i=t.geometry.type,o=t.geometry.coordinates;switch(i){case"LineString":if(!1===e(t,r,a,0,0))return!1;break;case"Polygon":for(var s=0;s<o.length;s++)if(!1===e(n.lineString(o[s],t.properties),r,a,s))return!1}}})}r.coordEach=a,r.coordReduce=function(t,e,r,n){var i=r;return a(t,function(t,n,a,o,s){i=0===n&&void 0===r?t:e(i,t,n,a,o,s)},n),i},r.propEach=i,r.propReduce=function(t,e,r){var n=r;return i(t,function(t,a){n=0===a&&void 0===r?t:e(n,t,a)}),n},r.featureEach=o,r.featureReduce=function(t,e,r){var n=r;return o(t,function(t,a){n=0===a&&void 0===r?t:e(n,t,a)}),n},r.coordAll=function(t){var e=[];return a(t,function(t){e.push(t)}),e},r.geomEach=s,r.geomReduce=function(t,e,r){var n=r;return s(t,function(t,a,i,o,s){n=0===a&&void 0===r?t:e(n,t,a,i,o,s)}),n},r.flattenEach=l,r.flattenReduce=function(t,e,r){var n=r;return l(t,function(t,a,i){n=0===a&&0===i&&void 0===r?t:e(n,t,a,i)}),n},r.segmentEach=c,r.segmentReduce=function(t,e,r){var n=r,a=!1;return c(t,function(t,i,o,s,l){n=!1===a&&void 0===r?t:e(n,t,i,o,s,l),a=!0}),n},r.lineEach=u,r.lineReduce=function(t,e,r){var n=r;return u(t,function(t,a,i,o){n=0===a&&void 0===r?t:e(n,t,a,i,o)}),n},r.findSegment=function(t,e){if(e=e||{},!n.isObject(e))throw new Error("options is invalid");var r,a=e.featureIndex||0,i=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.segmentIndex||0,l=e.properties;switch(t.type){case"FeatureCollection":a<0&&(a=t.features.length+a),l=l||t.features[a].properties,r=t.features[a].geometry;break;case"Feature":l=l||t.properties,r=t.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":r=t;break;default:throw new Error("geojson is invalid")}if(null===r)return null;var c=r.coordinates;switch(r.type){case"Point":case"MultiPoint":return null;case"LineString":return s<0&&(s=c.length+s-1),n.lineString([c[s],c[s+1]],l,e);case"Polygon":return o<0&&(o=c.length+o),s<0&&(s=c[o].length+s-1),n.lineString([c[o][s],c[o][s+1]],l,e);case"MultiLineString":return i<0&&(i=c.length+i),s<0&&(s=c[i].length+s-1),n.lineString([c[i][s],c[i][s+1]],l,e);case"MultiPolygon":return i<0&&(i=c.length+i),o<0&&(o=c[i].length+o),s<0&&(s=c[i][o].length-s-1),n.lineString([c[i][o][s],c[i][o][s+1]],l,e)}throw new Error("geojson is invalid")},r.findPoint=function(t,e){if(e=e||{},!n.isObject(e))throw new Error("options is invalid");var r,a=e.featureIndex||0,i=e.multiFeatureIndex||0,o=e.geometryIndex||0,s=e.coordIndex||0,l=e.properties;switch(t.type){case"FeatureCollection":a<0&&(a=t.features.length+a),l=l||t.features[a].properties,r=t.features[a].geometry;break;case"Feature":l=l||t.properties,r=t.geometry;break;case"Point":case"MultiPoint":return null;case"LineString":case"Polygon":case"MultiLineString":case"MultiPolygon":r=t;break;default:throw new Error("geojson is invalid")}if(null===r)return null;var c=r.coordinates;switch(r.type){case"Point":return n.point(c,l,e);case"MultiPoint":return i<0&&(i=c.length+i),n.point(c[i],l,e);case"LineString":return s<0&&(s=c.length+s),n.point(c[s],l,e);case"Polygon":return o<0&&(o=c.length+o),s<0&&(s=c[o].length+s),n.point(c[o][s],l,e);case"MultiLineString":return i<0&&(i=c.length+i),s<0&&(s=c[i].length+s),n.point(c[i][s],l,e);case"MultiPolygon":return i<0&&(i=c.length+i),o<0&&(o=c[i].length+o),s<0&&(s=c[i][o].length-s),n.point(c[i][o][s],l,e)}throw new Error("geojson is invalid")}},{"@turf/helpers":60}],62:[function(t,e,r){"use strict";var n="undefined"==typeof WeakMap?t("weak-map"):WeakMap,a=t("gl-buffer"),i=t("gl-vao"),o=new n;e.exports=function(t){var e=o.get(t),r=e&&(e._triangleBuffer.handle||e._triangleBuffer.buffer);if(!r||!t.isBuffer(r)){var n=a(t,new Float32Array([-1,-1,-1,4,4,-1]));(e=i(t,[{buffer:n,type:t.FLOAT,size:2}]))._triangleBuffer=n,o.set(t,e)}e.bind(),t.drawArrays(t.TRIANGLES,0,3),e.unbind()}},{"gl-buffer":244,"gl-vao":329,"weak-map":550}],63:[function(t,e,r){e.exports=function(t){var e=0,r=0,n=0,a=0;return t.map(function(t){var i=(t=t.slice())[0],o=i.toUpperCase();if(i!=o)switch(t[0]=o,i){case"a":t[6]+=n,t[7]+=a;break;case"v":t[1]+=a;break;case"h":t[1]+=n;break;default:for(var s=1;s<t.length;)t[s++]+=n,t[s++]+=a}switch(o){case"Z":n=e,a=r;break;case"H":n=t[1];break;case"V":a=t[1];break;case"M":n=e=t[1],a=r=t[2];break;default:n=t[t.length-2],a=t[t.length-1]}return t})}},{}],64:[function(t,e,r){var n=t("pad-left");e.exports=function(t,e,r){e="number"==typeof e?e:1,r=r||": ";var a=t.split(/\r?\n/),i=String(a.length+e-1).length;return a.map(function(t,a){var o=a+e,s=String(o).length,l=n(o,i-s);return l+r+t}).join("\n")}},{"pad-left":458}],65:[function(t,e,r){"use strict";e.exports=function(t){var e=t.length;if(0===e)return[];if(1===e)return[0];for(var r=t[0].length,n=[t[0]],i=[0],o=1;o<e;++o)if(n.push(t[o]),a(n,r)){if(i.push(o),i.length===r+1)return i}else n.pop();return i};var n=t("robust-orientation");function a(t,e){for(var r=new Array(e+1),a=0;a<t.length;++a)r[a]=t[a];for(a=0;a<=t.length;++a){for(var i=t.length;i<=e;++i){for(var o=new Array(e),s=0;s<e;++s)o[s]=Math.pow(i+1-a,s);r[i]=o}if(n.apply(void 0,r))return!0}return!1}},{"robust-orientation":508}],66:[function(t,e,r){"use strict";e.exports=function(t,e){return n(e).filter(function(r){for(var n=new Array(r.length),i=0;i<r.length;++i)n[i]=e[r[i]];return a(n)*t<1})};var n=t("delaunay-triangulate"),a=t("circumradius")},{circumradius:116,"delaunay-triangulate":167}],67:[function(t,e,r){e.exports=function(t,e){return a(n(t,e))};var n=t("alpha-complex"),a=t("simplicial-complex-boundary")},{"alpha-complex":66,"simplicial-complex-boundary":515}],68:[function(t,e,r){"use strict";e.exports=function(t,e){if(!t||null==t.length)throw Error("Argument should be an array");e=null==e?1:Math.floor(e);for(var r=Array(2*e),n=0;n<e;n++){for(var a=-1/0,i=1/0,o=n,s=t.length;o<s;o+=e)t[o]>a&&(a=t[o]),t[o]<i&&(i=t[o]);r[n]=i,r[e+n]=a}return r}},{}],69:[function(t,e,r){e.exports=function(t,e){var r="number"==typeof t,n="number"==typeof e;r&&!n?(e=t,t=0):r||n||(t=0,e=0);var a=(e|=0)-(t|=0);if(a<0)throw new Error("array length must be positive");for(var i=new Array(a),o=0,s=t;o<a;o++,s++)i[o]=s;return i}},{}],70:[function(t,e,r){(function(r){"use strict";var n=t("object-assign");function a(t,e){if(t===e)return 0;for(var r=t.length,n=e.length,a=0,i=Math.min(r,n);a<i;++a)if(t[a]!==e[a]){r=t[a],n=e[a];break}return r<n?-1:n<r?1:0}function i(t){return r.Buffer&&"function"==typeof r.Buffer.isBuffer?r.Buffer.isBuffer(t):!(null==t||!t._isBuffer)}var o=t("util/"),s=Object.prototype.hasOwnProperty,l=Array.prototype.slice,c="foo"===function(){}.name;function u(t){return Object.prototype.toString.call(t)}function h(t){return!i(t)&&("function"==typeof r.ArrayBuffer&&("function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):!!t&&(t instanceof DataView||!!(t.buffer&&t.buffer instanceof ArrayBuffer))))}var f=e.exports=y,p=/\s*function\s+([^\(\s]*)\s*/;function d(t){if(o.isFunction(t)){if(c)return t.name;var e=t.toString().match(p);return e&&e[1]}}function g(t,e){return"string"==typeof t?t.length<e?t:t.slice(0,e):t}function v(t){if(c||!o.isFunction(t))return o.inspect(t);var e=d(t);return"[Function"+(e?": "+e:"")+"]"}function m(t,e,r,n,a){throw new f.AssertionError({message:r,actual:t,expected:e,operator:n,stackStartFunction:a})}function y(t,e){t||m(t,!0,e,"==",f.ok)}function x(t,e,r,n){if(t===e)return!0;if(i(t)&&i(e))return 0===a(t,e);if(o.isDate(t)&&o.isDate(e))return t.getTime()===e.getTime();if(o.isRegExp(t)&&o.isRegExp(e))return t.source===e.source&&t.global===e.global&&t.multiline===e.multiline&&t.lastIndex===e.lastIndex&&t.ignoreCase===e.ignoreCase;if(null!==t&&"object"==typeof t||null!==e&&"object"==typeof e){if(h(t)&&h(e)&&u(t)===u(e)&&!(t instanceof Float32Array||t instanceof Float64Array))return 0===a(new Uint8Array(t.buffer),new Uint8Array(e.buffer));if(i(t)!==i(e))return!1;var s=(n=n||{actual:[],expected:[]}).actual.indexOf(t);return-1!==s&&s===n.expected.indexOf(e)||(n.actual.push(t),n.expected.push(e),function(t,e,r,n){if(null==t||null==e)return!1;if(o.isPrimitive(t)||o.isPrimitive(e))return t===e;if(r&&Object.getPrototypeOf(t)!==Object.getPrototypeOf(e))return!1;var a=b(t),i=b(e);if(a&&!i||!a&&i)return!1;if(a)return t=l.call(t),e=l.call(e),x(t,e,r);var s,c,u=k(t),h=k(e);if(u.length!==h.length)return!1;for(u.sort(),h.sort(),c=u.length-1;c>=0;c--)if(u[c]!==h[c])return!1;for(c=u.length-1;c>=0;c--)if(s=u[c],!x(t[s],e[s],r,n))return!1;return!0}(t,e,r,n))}return r?t===e:t==e}function b(t){return"[object Arguments]"==Object.prototype.toString.call(t)}function _(t,e){if(!t||!e)return!1;if("[object RegExp]"==Object.prototype.toString.call(e))return e.test(t);try{if(t instanceof e)return!0}catch(t){}return!Error.isPrototypeOf(e)&&!0===e.call({},t)}function w(t,e,r,n){var a;if("function"!=typeof e)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(n=r,r=null),a=function(t){var e;try{t()}catch(t){e=t}return e}(e),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),t&&!a&&m(a,r,"Missing expected exception"+n);var i="string"==typeof n,s=!t&&a&&!r;if((!t&&o.isError(a)&&i&&_(a,r)||s)&&m(a,r,"Got unwanted exception"+n),t&&a&&r&&!_(a,r)||!t&&a)throw a}f.AssertionError=function(t){var e;this.name="AssertionError",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=g(v((e=this).actual),128)+" "+e.operator+" "+g(v(e.expected),128),this.generatedMessage=!0);var r=t.stackStartFunction||m;if(Error.captureStackTrace)Error.captureStackTrace(this,r);else{var n=new Error;if(n.stack){var a=n.stack,i=d(r),o=a.indexOf("\n"+i);if(o>=0){var s=a.indexOf("\n",o+1);a=a.substring(s+1)}this.stack=a}}},o.inherits(f.AssertionError,Error),f.fail=m,f.ok=y,f.equal=function(t,e,r){t!=e&&m(t,e,r,"==",f.equal)},f.notEqual=function(t,e,r){t==e&&m(t,e,r,"!=",f.notEqual)},f.deepEqual=function(t,e,r){x(t,e,!1)||m(t,e,r,"deepEqual",f.deepEqual)},f.deepStrictEqual=function(t,e,r){x(t,e,!0)||m(t,e,r,"deepStrictEqual",f.deepStrictEqual)},f.notDeepEqual=function(t,e,r){x(t,e,!1)&&m(t,e,r,"notDeepEqual",f.notDeepEqual)},f.notDeepStrictEqual=function t(e,r,n){x(e,r,!0)&&m(e,r,n,"notDeepStrictEqual",t)},f.strictEqual=function(t,e,r){t!==e&&m(t,e,r,"===",f.strictEqual)},f.notStrictEqual=function(t,e,r){t===e&&m(t,e,r,"!==",f.notStrictEqual)},f.throws=function(t,e,r){w(!0,t,e,r)},f.doesNotThrow=function(t,e,r){w(!1,t,e,r)},f.ifError=function(t){if(t)throw t},f.strict=n(function t(e,r){e||m(e,!0,r,"==",t)},f,{equal:f.strictEqual,deepEqual:f.deepStrictEqual,notEqual:f.notStrictEqual,notDeepEqual:f.notDeepStrictEqual}),f.strict.strict=f.strict;var k=Object.keys||function(t){var e=[];for(var r in t)s.call(t,r)&&e.push(r);return e}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"object-assign":455,"util/":73}],71:[function(t,e,r){"function"==typeof Object.create?e.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},{}],72:[function(t,e,r){e.exports=function(t){return t&&"object"==typeof t&&"function"==typeof t.copy&&"function"==typeof t.fill&&"function"==typeof t.readUInt8}},{}],73:[function(t,e,r){(function(e,n){var a=/%[sdj%]/g;r.format=function(t){if(!m(t)){for(var e=[],r=0;r<arguments.length;r++)e.push(s(arguments[r]));return e.join(" ")}r=1;for(var n=arguments,i=n.length,o=String(t).replace(a,function(t){if("%%"===t)return"%";if(r>=i)return t;switch(t){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(t){return"[Circular]"}default:return t}}),l=n[r];r<i;l=n[++r])g(l)||!b(l)?o+=" "+l:o+=" "+s(l);return o},r.deprecate=function(t,a){if(y(n.process))return function(){return r.deprecate(t,a).apply(this,arguments)};if(!0===e.noDeprecation)return t;var i=!1;return function(){if(!i){if(e.throwDeprecation)throw new Error(a);e.traceDeprecation?console.trace(a):console.error(a),i=!0}return t.apply(this,arguments)}};var i,o={};function s(t,e){var n={seen:[],stylize:c};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),d(e)?n.showHidden=e:e&&r._extend(n,e),y(n.showHidden)&&(n.showHidden=!1),y(n.depth)&&(n.depth=2),y(n.colors)&&(n.colors=!1),y(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=l),u(n,t,n.depth)}function l(t,e){var r=s.styles[e];return r?"\x1b["+s.colors[r][0]+"m"+t+"\x1b["+s.colors[r][1]+"m":t}function c(t,e){return t}function u(t,e,n){if(t.customInspect&&e&&k(e.inspect)&&e.inspect!==r.inspect&&(!e.constructor||e.constructor.prototype!==e)){var a=e.inspect(n,t);return m(a)||(a=u(t,a,n)),a}var i=function(t,e){if(y(e))return t.stylize("undefined","undefined");if(m(e)){var r="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(r,"string")}if(v(e))return t.stylize(""+e,"number");if(d(e))return t.stylize(""+e,"boolean");if(g(e))return t.stylize("null","null")}(t,e);if(i)return i;var o=Object.keys(e),s=function(t){var e={};return t.forEach(function(t,r){e[t]=!0}),e}(o);if(t.showHidden&&(o=Object.getOwnPropertyNames(e)),w(e)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return h(e);if(0===o.length){if(k(e)){var l=e.name?": "+e.name:"";return t.stylize("[Function"+l+"]","special")}if(x(e))return t.stylize(RegExp.prototype.toString.call(e),"regexp");if(_(e))return t.stylize(Date.prototype.toString.call(e),"date");if(w(e))return h(e)}var c,b="",T=!1,M=["{","}"];(p(e)&&(T=!0,M=["[","]"]),k(e))&&(b=" [Function"+(e.name?": "+e.name:"")+"]");return x(e)&&(b=" "+RegExp.prototype.toString.call(e)),_(e)&&(b=" "+Date.prototype.toUTCString.call(e)),w(e)&&(b=" "+h(e)),0!==o.length||T&&0!=e.length?n<0?x(e)?t.stylize(RegExp.prototype.toString.call(e),"regexp"):t.stylize("[Object]","special"):(t.seen.push(e),c=T?function(t,e,r,n,a){for(var i=[],o=0,s=e.length;o<s;++o)S(e,String(o))?i.push(f(t,e,r,n,String(o),!0)):i.push("");return a.forEach(function(a){a.match(/^\d+$/)||i.push(f(t,e,r,n,a,!0))}),i}(t,e,n,s,o):o.map(function(r){return f(t,e,n,s,r,T)}),t.seen.pop(),function(t,e,r){if(t.reduce(function(t,e){return 0,e.indexOf("\n")>=0&&0,t+e.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60)return r[0]+(""===e?"":e+"\n ")+" "+t.join(",\n ")+" "+r[1];return r[0]+e+" "+t.join(", ")+" "+r[1]}(c,b,M)):M[0]+b+M[1]}function h(t){return"["+Error.prototype.toString.call(t)+"]"}function f(t,e,r,n,a,i){var o,s,l;if((l=Object.getOwnPropertyDescriptor(e,a)||{value:e[a]}).get?s=l.set?t.stylize("[Getter/Setter]","special"):t.stylize("[Getter]","special"):l.set&&(s=t.stylize("[Setter]","special")),S(n,a)||(o="["+a+"]"),s||(t.seen.indexOf(l.value)<0?(s=g(r)?u(t,l.value,null):u(t,l.value,r-1)).indexOf("\n")>-1&&(s=i?s.split("\n").map(function(t){return" "+t}).join("\n").substr(2):"\n"+s.split("\n").map(function(t){return" "+t}).join("\n")):s=t.stylize("[Circular]","special")),y(o)){if(i&&a.match(/^\d+$/))return s;(o=JSON.stringify(""+a)).match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(o=o.substr(1,o.length-2),o=t.stylize(o,"name")):(o=o.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),o=t.stylize(o,"string"))}return o+": "+s}function p(t){return Array.isArray(t)}function d(t){return"boolean"==typeof t}function g(t){return null===t}function v(t){return"number"==typeof t}function m(t){return"string"==typeof t}function y(t){return void 0===t}function x(t){return b(t)&&"[object RegExp]"===T(t)}function b(t){return"object"==typeof t&&null!==t}function _(t){return b(t)&&"[object Date]"===T(t)}function w(t){return b(t)&&("[object Error]"===T(t)||t instanceof Error)}function k(t){return"function"==typeof t}function T(t){return Object.prototype.toString.call(t)}function M(t){return t<10?"0"+t.toString(10):t.toString(10)}r.debuglog=function(t){if(y(i)&&(i=e.env.NODE_DEBUG||""),t=t.toUpperCase(),!o[t])if(new RegExp("\\b"+t+"\\b","i").test(i)){var n=e.pid;o[t]=function(){var e=r.format.apply(r,arguments);console.error("%s %d: %s",t,n,e)}}else o[t]=function(){};return o[t]},r.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},r.isArray=p,r.isBoolean=d,r.isNull=g,r.isNullOrUndefined=function(t){return null==t},r.isNumber=v,r.isString=m,r.isSymbol=function(t){return"symbol"==typeof t},r.isUndefined=y,r.isRegExp=x,r.isObject=b,r.isDate=_,r.isError=w,r.isFunction=k,r.isPrimitive=function(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||"undefined"==typeof t},r.isBuffer=t("./support/isBuffer");var A=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function S(t,e){return Object.prototype.hasOwnProperty.call(t,e)}r.log=function(){var t,e;console.log("%s - %s",(t=new Date,e=[M(t.getHours()),M(t.getMinutes()),M(t.getSeconds())].join(":"),[t.getDate(),A[t.getMonth()],e].join(" ")),r.format.apply(r,arguments))},r.inherits=t("inherits"),r._extend=function(t,e){if(!e||!b(e))return t;for(var r=Object.keys(e),n=r.length;n--;)t[r[n]]=e[r[n]];return t}}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":72,_process:483,inherits:71}],74:[function(t,e,r){e.exports=function(t){return atob(t)}},{}],75:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r=e.length,i=new Array(r+1),o=0;o<r;++o){for(var s=new Array(r+1),l=0;l<=r;++l)s[l]=t[l][o];i[o]=s}i[r]=new Array(r+1);for(var o=0;o<=r;++o)i[r][o]=1;for(var c=new Array(r+1),o=0;o<r;++o)c[o]=e[o];c[r]=1;var u=n(i,c),h=a(u[r+1]);0===h&&(h=1);for(var f=new Array(r+1),o=0;o<=r;++o)f[o]=a(u[o])/h;return f};var n=t("robust-linear-solve");function a(t){for(var e=0,r=0;r<t.length;++r)e+=t[r];return e}},{"robust-linear-solve":507}],76:[function(t,e,r){"use strict";r.byteLength=function(t){var e=c(t),r=e[0],n=e[1];return 3*(r+n)/4-n},r.toByteArray=function(t){var e,r,n=c(t),o=n[0],s=n[1],l=new i(function(t,e,r){return 3*(e+r)/4-r}(0,o,s)),u=0,h=s>0?o-4:o;for(r=0;r<h;r+=4)e=a[t.charCodeAt(r)]<<18|a[t.charCodeAt(r+1)]<<12|a[t.charCodeAt(r+2)]<<6|a[t.charCodeAt(r+3)],l[u++]=e>>16&255,l[u++]=e>>8&255,l[u++]=255&e;2===s&&(e=a[t.charCodeAt(r)]<<2|a[t.charCodeAt(r+1)]>>4,l[u++]=255&e);1===s&&(e=a[t.charCodeAt(r)]<<10|a[t.charCodeAt(r+1)]<<4|a[t.charCodeAt(r+2)]>>2,l[u++]=e>>8&255,l[u++]=255&e);return l},r.fromByteArray=function(t){for(var e,r=t.length,a=r%3,i=[],o=0,s=r-a;o<s;o+=16383)i.push(u(t,o,o+16383>s?s:o+16383));1===a?(e=t[r-1],i.push(n[e>>2]+n[e<<4&63]+"==")):2===a&&(e=(t[r-2]<<8)+t[r-1],i.push(n[e>>10]+n[e>>4&63]+n[e<<2&63]+"="));return i.join("")};for(var n=[],a=[],i="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=0,l=o.length;s<l;++s)n[s]=o[s],a[o.charCodeAt(s)]=s;function c(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");return-1===r&&(r=e),[r,r===e?0:4-r%4]}function u(t,e,r){for(var a,i,o=[],s=e;s<r;s+=3)a=(t[s]<<16&16711680)+(t[s+1]<<8&65280)+(255&t[s+2]),o.push(n[(i=a)>>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return o.join("")}a["-".charCodeAt(0)]=62,a["_".charCodeAt(0)]=63},{}],77:[function(t,e,r){"use strict";var n=t("./lib/rationalize");e.exports=function(t,e){return n(t[0].mul(e[1]).add(e[0].mul(t[1])),t[1].mul(e[1]))}},{"./lib/rationalize":87}],78:[function(t,e,r){"use strict";e.exports=function(t,e){return t[0].mul(e[1]).cmp(e[0].mul(t[1]))}},{}],79:[function(t,e,r){"use strict";var n=t("./lib/rationalize");e.exports=function(t,e){return n(t[0].mul(e[1]),t[1].mul(e[0]))}},{"./lib/rationalize":87}],80:[function(t,e,r){"use strict";var n=t("./is-rat"),a=t("./lib/is-bn"),i=t("./lib/num-to-bn"),o=t("./lib/str-to-bn"),s=t("./lib/rationalize"),l=t("./div");e.exports=function t(e,r){if(n(e))return r?l(e,t(r)):[e[0].clone(),e[1].clone()];var c=0;var u,h;if(a(e))u=e.clone();else if("string"==typeof e)u=o(e);else{if(0===e)return[i(0),i(1)];if(e===Math.floor(e))u=i(e);else{for(;e!==Math.floor(e);)e*=Math.pow(2,256),c-=256;u=i(e)}}if(n(r))u.mul(r[1]),h=r[0].clone();else if(a(r))h=r.clone();else if("string"==typeof r)h=o(r);else if(r)if(r===Math.floor(r))h=i(r);else{for(;r!==Math.floor(r);)r*=Math.pow(2,256),c+=256;h=i(r)}else h=i(1);c>0?u=u.ushln(c):c<0&&(h=h.ushln(-c));return s(u,h)}},{"./div":79,"./is-rat":81,"./lib/is-bn":85,"./lib/num-to-bn":86,"./lib/rationalize":87,"./lib/str-to-bn":88}],81:[function(t,e,r){"use strict";var n=t("./lib/is-bn");e.exports=function(t){return Array.isArray(t)&&2===t.length&&n(t[0])&&n(t[1])}},{"./lib/is-bn":85}],82:[function(t,e,r){"use strict";var n=t("bn.js");e.exports=function(t){return t.cmp(new n(0))}},{"bn.js":96}],83:[function(t,e,r){"use strict";var n=t("./bn-sign");e.exports=function(t){var e=t.length,r=t.words,a=0;if(1===e)a=r[0];else if(2===e)a=r[0]+67108864*r[1];else for(var i=0;i<e;i++){var o=r[i];a+=o*Math.pow(67108864,i)}return n(t)*a}},{"./bn-sign":82}],84:[function(t,e,r){"use strict";var n=t("double-bits"),a=t("bit-twiddle").countTrailingZeros;e.exports=function(t){var e=a(n.lo(t));if(e<32)return e;var r=a(n.hi(t));if(r>20)return 52;return r+32}},{"bit-twiddle":94,"double-bits":169}],85:[function(t,e,r){"use strict";t("bn.js");e.exports=function(t){return t&&"object"==typeof t&&Boolean(t.words)}},{"bn.js":96}],86:[function(t,e,r){"use strict";var n=t("bn.js"),a=t("double-bits");e.exports=function(t){var e=a.exponent(t);return e<52?new n(t):new n(t*Math.pow(2,52-e)).ushln(e-52)}},{"bn.js":96,"double-bits":169}],87:[function(t,e,r){"use strict";var n=t("./num-to-bn"),a=t("./bn-sign");e.exports=function(t,e){var r=a(t),i=a(e);if(0===r)return[n(0),n(1)];if(0===i)return[n(0),n(0)];i<0&&(t=t.neg(),e=e.neg());var o=t.gcd(e);if(o.cmpn(1))return[t.div(o),e.div(o)];return[t,e]}},{"./bn-sign":82,"./num-to-bn":86}],88:[function(t,e,r){"use strict";var n=t("bn.js");e.exports=function(t){return new n(t)}},{"bn.js":96}],89:[function(t,e,r){"use strict";var n=t("./lib/rationalize");e.exports=function(t,e){return n(t[0].mul(e[0]),t[1].mul(e[1]))}},{"./lib/rationalize":87}],90:[function(t,e,r){"use strict";var n=t("./lib/bn-sign");e.exports=function(t){return n(t[0])*n(t[1])}},{"./lib/bn-sign":82}],91:[function(t,e,r){"use strict";var n=t("./lib/rationalize");e.exports=function(t,e){return n(t[0].mul(e[1]).sub(t[1].mul(e[0])),t[1].mul(e[1]))}},{"./lib/rationalize":87}],92:[function(t,e,r){"use strict";var n=t("./lib/bn-to-num"),a=t("./lib/ctz");e.exports=function(t){var e=t[0],r=t[1];if(0===e.cmpn(0))return 0;var i=e.abs().divmod(r.abs()),o=i.div,s=n(o),l=i.mod,c=e.negative!==r.negative?-1:1;if(0===l.cmpn(0))return c*s;if(s){var u=a(s)+4,h=n(l.ushln(u).divRound(r));return c*(s+h*Math.pow(2,-u))}var f=r.bitLength()-l.bitLength()+53,h=n(l.ushln(f).divRound(r));return f<1023?c*h*Math.pow(2,-f):(h*=Math.pow(2,-1023),c*h*Math.pow(2,1023-f))}},{"./lib/bn-to-num":83,"./lib/ctz":84}],93:[function(t,e,r){"use strict";function n(t,e,r,n,a,i){var o=["function ",t,"(a,l,h,",n.join(","),"){",i?"":"var i=",r?"l-1":"h+1",";while(l<=h){var m=(l+h)>>>1,x=a",a?".get(m)":"[m]"];return i?e.indexOf("c")<0?o.push(";if(x===y){return m}else if(x<=y){"):o.push(";var p=c(x,y);if(p===0){return m}else if(p<=0){"):o.push(";if(",e,"){i=m;"),r?o.push("l=m+1}else{h=m-1}"):o.push("h=m-1}else{l=m+1}"),o.push("}"),i?o.push("return -1};"):o.push("return i};"),o.join("")}function a(t,e,r,a){return new Function([n("A","x"+t+"y",e,["y"],!1,a),n("B","x"+t+"y",e,["y"],!0,a),n("P","c(x,y)"+t+"0",e,["y","c"],!1,a),n("Q","c(x,y)"+t+"0",e,["y","c"],!0,a),"function dispatchBsearch",r,"(a,y,c,l,h){if(a.shape){if(typeof(c)==='function'){return Q(a,(l===undefined)?0:l|0,(h===undefined)?a.shape[0]-1:h|0,y,c)}else{return B(a,(c===undefined)?0:c|0,(l===undefined)?a.shape[0]-1:l|0,y)}}else{if(typeof(c)==='function'){return P(a,(l===undefined)?0:l|0,(h===undefined)?a.length-1:h|0,y,c)}else{return A(a,(c===undefined)?0:c|0,(l===undefined)?a.length-1:l|0,y)}}}return dispatchBsearch",r].join(""))()}e.exports={ge:a(">=",!1,"GE"),gt:a(">",!1,"GT"),lt:a("<",!0,"LT"),le:a("<=",!0,"LE"),eq:a("-",!0,"EQ",!0)}},{}],94:[function(t,e,r){"use strict";function n(t){var e=32;return(t&=-t)&&e--,65535&t&&(e-=16),16711935&t&&(e-=8),252645135&t&&(e-=4),858993459&t&&(e-=2),1431655765&t&&(e-=1),e}r.INT_BITS=32,r.INT_MAX=2147483647,r.INT_MIN=-1<<31,r.sign=function(t){return(t>0)-(t<0)},r.abs=function(t){var e=t>>31;return(t^e)-e},r.min=function(t,e){return e^(t^e)&-(t<e)},r.max=function(t,e){return t^(t^e)&-(t<e)},r.isPow2=function(t){return!(t&t-1||!t)},r.log2=function(t){var e,r;return e=(t>65535)<<4,e|=r=((t>>>=e)>255)<<3,e|=r=((t>>>=r)>15)<<2,(e|=r=((t>>>=r)>3)<<1)|(t>>>=r)>>1},r.log10=function(t){return t>=1e9?9:t>=1e8?8:t>=1e7?7:t>=1e6?6:t>=1e5?5:t>=1e4?4:t>=1e3?3:t>=100?2:t>=10?1:0},r.popCount=function(t){return 16843009*((t=(858993459&(t-=t>>>1&1431655765))+(t>>>2&858993459))+(t>>>4)&252645135)>>>24},r.countTrailingZeros=n,r.nextPow2=function(t){return t+=0===t,--t,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)+1},r.prevPow2=function(t){return t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)-(t>>>1)},r.parity=function(t){return t^=t>>>16,t^=t>>>8,t^=t>>>4,27030>>>(t&=15)&1};var a=new Array(256);!function(t){for(var e=0;e<256;++e){var r=e,n=e,a=7;for(r>>>=1;r;r>>>=1)n<<=1,n|=1&r,--a;t[e]=n<<a&255}}(a),r.reverse=function(t){return a[255&t]<<24|a[t>>>8&255]<<16|a[t>>>16&255]<<8|a[t>>>24&255]},r.interleave2=function(t,e){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t&=65535)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e&=65535)|e<<8))|e<<4))|e<<2))|e<<1))<<1},r.deinterleave2=function(t,e){return(t=65535&((t=16711935&((t=252645135&((t=858993459&((t=t>>>e&1431655765)|t>>>1))|t>>>2))|t>>>4))|t>>>16))<<16>>16},r.interleave3=function(t,e,r){return t=1227133513&((t=3272356035&((t=251719695&((t=4278190335&((t&=1023)|t<<16))|t<<8))|t<<4))|t<<2),(t|=(e=1227133513&((e=3272356035&((e=251719695&((e=4278190335&((e&=1023)|e<<16))|e<<8))|e<<4))|e<<2))<<1)|(r=1227133513&((r=3272356035&((r=251719695&((r=4278190335&((r&=1023)|r<<16))|r<<8))|r<<4))|r<<2))<<2},r.deinterleave3=function(t,e){return(t=1023&((t=4278190335&((t=251719695&((t=3272356035&((t=t>>>e&1227133513)|t>>>2))|t>>>4))|t>>>8))|t>>>16))<<22>>22},r.nextCombination=function(t){var e=t|t-1;return e+1|(~e&-~e)-1>>>n(t)+1}},{}],95:[function(t,e,r){"use strict";var n=t("clamp");e.exports=function(t,e){e||(e={});var r,o,s,l,c,u,h,f,p,d,g,v=null==e.cutoff?.25:e.cutoff,m=null==e.radius?8:e.radius,y=e.channel||0;if(ArrayBuffer.isView(t)||Array.isArray(t)){if(!e.width||!e.height)throw Error("For raw data width and height should be provided by options");r=e.width,o=e.height,l=t,u=e.stride?e.stride:Math.floor(t.length/r/o)}else window.HTMLCanvasElement&&t instanceof window.HTMLCanvasElement?(h=(f=t).getContext("2d"),r=f.width,o=f.height,p=h.getImageData(0,0,r,o),l=p.data,u=4):window.CanvasRenderingContext2D&&t instanceof window.CanvasRenderingContext2D?(f=t.canvas,h=t,r=f.width,o=f.height,p=h.getImageData(0,0,r,o),l=p.data,u=4):window.ImageData&&t instanceof window.ImageData&&(p=t,r=t.width,o=t.height,l=p.data,u=4);if(s=Math.max(r,o),window.Uint8ClampedArray&&l instanceof window.Uint8ClampedArray||window.Uint8Array&&l instanceof window.Uint8Array)for(c=l,l=Array(r*o),d=0,g=c.length;d<g;d++)l[d]=c[d*u+y]/255;else if(1!==u)throw Error("Raw data can have only 1 value per pixel");var x=Array(r*o),b=Array(r*o),_=Array(s),w=Array(s),k=Array(s+1),T=Array(s);for(d=0,g=r*o;d<g;d++){var M=l[d];x[d]=1===M?0:0===M?a:Math.pow(Math.max(0,.5-M),2),b[d]=1===M?a:0===M?0:Math.pow(Math.max(0,M-.5),2)}i(x,r,o,_,w,T,k),i(b,r,o,_,w,T,k);var A=window.Float32Array?new Float32Array(r*o):new Array(r*o);for(d=0,g=r*o;d<g;d++)A[d]=n(1-((x[d]-b[d])/m+v),0,1);return A};var a=1e20;function i(t,e,r,n,a,i,s){for(var l=0;l<e;l++){for(var c=0;c<r;c++)n[c]=t[c*e+l];for(o(n,a,i,s,r),c=0;c<r;c++)t[c*e+l]=a[c]}for(c=0;c<r;c++){for(l=0;l<e;l++)n[l]=t[c*e+l];for(o(n,a,i,s,e),l=0;l<e;l++)t[c*e+l]=Math.sqrt(a[l])}}function o(t,e,r,n,i){r[0]=0,n[0]=-a,n[1]=+a;for(var o=1,s=0;o<i;o++){for(var l=(t[o]+o*o-(t[r[s]]+r[s]*r[s]))/(2*o-2*r[s]);l<=n[s];)s--,l=(t[o]+o*o-(t[r[s]]+r[s]*r[s]))/(2*o-2*r[s]);r[++s]=o,n[s]=l,n[s+1]=+a}for(o=0,s=0;o<i;o++){for(;n[s+1]<o;)s++;e[o]=(o-r[s])*(o-r[s])+t[r[s]]}}},{clamp:117}],96:[function(t,e,r){!function(e,r){"use strict";function n(t,e){if(!t)throw new Error(e||"Assertion failed")}function a(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function i(t,e,r){if(i.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}var o;"object"==typeof e?e.exports=i:r.BN=i,i.BN=i,i.wordSize=26;try{o=t("buffer").Buffer}catch(t){}function s(t,e,r){for(var n=0,a=Math.min(t.length,r),i=e;i<a;i++){var o=t.charCodeAt(i)-48;n<<=4,n|=o>=49&&o<=54?o-49+10:o>=17&&o<=22?o-17+10:15&o}return n}function l(t,e,r,n){for(var a=0,i=Math.min(t.length,r),o=e;o<i;o++){var s=t.charCodeAt(o)-48;a*=n,a+=s>=49?s-49+10:s>=17?s-17+10:s}return a}i.isBN=function(t){return t instanceof i||null!==t&&"object"==typeof t&&t.constructor.wordSize===i.wordSize&&Array.isArray(t.words)},i.max=function(t,e){return t.cmp(e)>0?t:e},i.min=function(t,e){return t.cmp(e)<0?t:e},i.prototype._init=function(t,e,r){if("number"==typeof t)return this._initNumber(t,e,r);if("object"==typeof t)return this._initArray(t,e,r);"hex"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36);var a=0;"-"===(t=t.toString().replace(/\s+/g,""))[0]&&a++,16===e?this._parseHex(t,a):this._parseBase(t,e,a),"-"===t[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),e,r)},i.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(n(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),e,r)},i.prototype._initArray=function(t,e,r){if(n("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var a=0;a<this.length;a++)this.words[a]=0;var i,o,s=0;if("be"===r)for(a=t.length-1,i=0;a>=0;a-=3)o=t[a]|t[a-1]<<8|t[a-2]<<16,this.words[i]|=o<<s&67108863,this.words[i+1]=o>>>26-s&67108863,(s+=24)>=26&&(s-=26,i++);else if("le"===r)for(a=0,i=0;a<t.length;a+=3)o=t[a]|t[a+1]<<8|t[a+2]<<16,this.words[i]|=o<<s&67108863,this.words[i+1]=o>>>26-s&67108863,(s+=24)>=26&&(s-=26,i++);return this.strip()},i.prototype._parseHex=function(t,e){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var n,a,i=0;for(r=t.length-6,n=0;r>=e;r-=6)a=s(t,r,r+6),this.words[n]|=a<<i&67108863,this.words[n+1]|=a>>>26-i&4194303,(i+=24)>=26&&(i-=26,n++);r+6!==e&&(a=s(t,e,r+6),this.words[n]|=a<<i&67108863,this.words[n+1]|=a>>>26-i&4194303),this.strip()},i.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,a=1;a<=67108863;a*=e)n++;n--,a=a/e|0;for(var i=t.length-r,o=i%n,s=Math.min(i,i-o)+r,c=0,u=r;u<s;u+=n)c=l(t,u,u+n,e),this.imuln(a),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c);if(0!==o){var h=1;for(c=l(t,u,t.length,e),u=0;u<o;u++)h*=e;this.imuln(h),this.words[0]+c<67108864?this.words[0]+=c:this._iaddn(c)}},i.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},i.prototype.clone=function(){var t=new i(null);return this.copy(t),t},i.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},i.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},i.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},i.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var c=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],u=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],h=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function f(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var a=0|t.words[0],i=0|e.words[0],o=a*i,s=67108863&o,l=o/67108864|0;r.words[0]=s;for(var c=1;c<n;c++){for(var u=l>>>26,h=67108863&l,f=Math.min(c,e.length-1),p=Math.max(0,c-t.length+1);p<=f;p++){var d=c-p|0;u+=(o=(a=0|t.words[d])*(i=0|e.words[p])+h)/67108864|0,h=67108863&o}r.words[c]=0|h,l=0|u}return 0!==l?r.words[c]=0|l:r.length--,r.strip()}i.prototype.toString=function(t,e){var r;if(e=0|e||1,16===(t=t||10)||"hex"===t){r="";for(var a=0,i=0,o=0;o<this.length;o++){var s=this.words[o],l=(16777215&(s<<a|i)).toString(16);r=0!==(i=s>>>24-a&16777215)||o!==this.length-1?c[6-l.length]+l+r:l+r,(a+=2)>=26&&(a-=26,o--)}for(0!==i&&(r=i.toString(16)+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(t===(0|t)&&t>=2&&t<=36){var f=u[t],p=h[t];r="";var d=this.clone();for(d.negative=0;!d.isZero();){var g=d.modn(p).toString(t);r=(d=d.idivn(p)).isZero()?g+r:c[f-g.length]+g+r}for(this.isZero()&&(r="0"+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},i.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},i.prototype.toJSON=function(){return this.toString(16)},i.prototype.toBuffer=function(t,e){return n("undefined"!=typeof o),this.toArrayLike(o,t,e)},i.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},i.prototype.toArrayLike=function(t,e,r){var a=this.byteLength(),i=r||Math.max(1,a);n(a<=i,"byte array longer than desired length"),n(i>0,"Requested array length <= 0"),this.strip();var o,s,l="le"===e,c=new t(i),u=this.clone();if(l){for(s=0;!u.isZero();s++)o=u.andln(255),u.iushrn(8),c[s]=o;for(;s<i;s++)c[s]=0}else{for(s=0;s<i-a;s++)c[s]=0;for(s=0;!u.isZero();s++)o=u.andln(255),u.iushrn(8),c[i-s-1]=o}return c},Math.clz32?i.prototype._countBits=function(t){return 32-Math.clz32(t)}:i.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},i.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},i.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},i.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},i.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},i.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},i.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},i.prototype.isNeg=function(){return 0!==this.negative},i.prototype.neg=function(){return this.clone().ineg()},i.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},i.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},i.prototype.ior=function(t){return n(0==(this.negative|t.negative)),this.iuor(t)},i.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},i.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},i.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},i.prototype.iand=function(t){return n(0==(this.negative|t.negative)),this.iuand(t)},i.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},i.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},i.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;n<r.length;n++)this.words[n]=e.words[n]^r.words[n];if(this!==e)for(;n<e.length;n++)this.words[n]=e.words[n];return this.length=e.length,this.strip()},i.prototype.ixor=function(t){return n(0==(this.negative|t.negative)),this.iuxor(t)},i.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},i.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},i.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var a=0;a<e;a++)this.words[a]=67108863&~this.words[a];return r>0&&(this.words[a]=~this.words[a]&67108863>>26-r),this.strip()},i.prototype.notn=function(t){return this.clone().inotn(t)},i.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,a=t%26;return this._expand(r+1),this.words[r]=e?this.words[r]|1<<a:this.words[r]&~(1<<a),this.strip()},i.prototype.iadd=function(t){var e,r,n;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();this.length>t.length?(r=this,n=t):(r=t,n=this);for(var a=0,i=0;i<n.length;i++)e=(0|r.words[i])+(0|n.words[i])+a,this.words[i]=67108863&e,a=e>>>26;for(;0!==a&&i<r.length;i++)e=(0|r.words[i])+a,this.words[i]=67108863&e,a=e>>>26;if(this.length=r.length,0!==a)this.words[this.length]=a,this.length++;else if(r!==this)for(;i<r.length;i++)this.words[i]=r.words[i];return this},i.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},i.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r,n,a=this.cmp(t);if(0===a)return this.negative=0,this.length=1,this.words[0]=0,this;a>0?(r=this,n=t):(r=t,n=this);for(var i=0,o=0;o<n.length;o++)i=(e=(0|r.words[o])-(0|n.words[o])+i)>>26,this.words[o]=67108863&e;for(;0!==i&&o<r.length;o++)i=(e=(0|r.words[o])+i)>>26,this.words[o]=67108863&e;if(0===i&&o<r.length&&r!==this)for(;o<r.length;o++)this.words[o]=r.words[o];return this.length=Math.max(this.length,o),r!==this&&(this.negative=1),this.strip()},i.prototype.sub=function(t){return this.clone().isub(t)};var p=function(t,e,r){var n,a,i,o=t.words,s=e.words,l=r.words,c=0,u=0|o[0],h=8191&u,f=u>>>13,p=0|o[1],d=8191&p,g=p>>>13,v=0|o[2],m=8191&v,y=v>>>13,x=0|o[3],b=8191&x,_=x>>>13,w=0|o[4],k=8191&w,T=w>>>13,M=0|o[5],A=8191&M,S=M>>>13,E=0|o[6],L=8191&E,C=E>>>13,P=0|o[7],O=8191&P,z=P>>>13,I=0|o[8],D=8191&I,R=I>>>13,F=0|o[9],B=8191&F,N=F>>>13,j=0|s[0],V=8191&j,U=j>>>13,q=0|s[1],H=8191&q,G=q>>>13,Y=0|s[2],W=8191&Y,X=Y>>>13,Z=0|s[3],J=8191&Z,K=Z>>>13,Q=0|s[4],$=8191&Q,tt=Q>>>13,et=0|s[5],rt=8191&et,nt=et>>>13,at=0|s[6],it=8191&at,ot=at>>>13,st=0|s[7],lt=8191&st,ct=st>>>13,ut=0|s[8],ht=8191&ut,ft=ut>>>13,pt=0|s[9],dt=8191&pt,gt=pt>>>13;r.negative=t.negative^e.negative,r.length=19;var vt=(c+(n=Math.imul(h,V))|0)+((8191&(a=(a=Math.imul(h,U))+Math.imul(f,V)|0))<<13)|0;c=((i=Math.imul(f,U))+(a>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(d,V),a=(a=Math.imul(d,U))+Math.imul(g,V)|0,i=Math.imul(g,U);var mt=(c+(n=n+Math.imul(h,H)|0)|0)+((8191&(a=(a=a+Math.imul(h,G)|0)+Math.imul(f,H)|0))<<13)|0;c=((i=i+Math.imul(f,G)|0)+(a>>>13)|0)+(mt>>>26)|0,mt&=67108863,n=Math.imul(m,V),a=(a=Math.imul(m,U))+Math.imul(y,V)|0,i=Math.imul(y,U),n=n+Math.imul(d,H)|0,a=(a=a+Math.imul(d,G)|0)+Math.imul(g,H)|0,i=i+Math.imul(g,G)|0;var yt=(c+(n=n+Math.imul(h,W)|0)|0)+((8191&(a=(a=a+Math.imul(h,X)|0)+Math.imul(f,W)|0))<<13)|0;c=((i=i+Math.imul(f,X)|0)+(a>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(b,V),a=(a=Math.imul(b,U))+Math.imul(_,V)|0,i=Math.imul(_,U),n=n+Math.imul(m,H)|0,a=(a=a+Math.imul(m,G)|0)+Math.imul(y,H)|0,i=i+Math.imul(y,G)|0,n=n+Math.imul(d,W)|0,a=(a=a+Math.imul(d,X)|0)+Math.imul(g,W)|0,i=i+Math.imul(g,X)|0;var xt=(c+(n=n+Math.imul(h,J)|0)|0)+((8191&(a=(a=a+Math.imul(h,K)|0)+Math.imul(f,J)|0))<<13)|0;c=((i=i+Math.imul(f,K)|0)+(a>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(k,V),a=(a=Math.imul(k,U))+Math.imul(T,V)|0,i=Math.imul(T,U),n=n+Math.imul(b,H)|0,a=(a=a+Math.imul(b,G)|0)+Math.imul(_,H)|0,i=i+Math.imul(_,G)|0,n=n+Math.imul(m,W)|0,a=(a=a+Math.imul(m,X)|0)+Math.imul(y,W)|0,i=i+Math.imul(y,X)|0,n=n+Math.imul(d,J)|0,a=(a=a+Math.imul(d,K)|0)+Math.imul(g,J)|0,i=i+Math.imul(g,K)|0;var bt=(c+(n=n+Math.imul(h,$)|0)|0)+((8191&(a=(a=a+Math.imul(h,tt)|0)+Math.imul(f,$)|0))<<13)|0;c=((i=i+Math.imul(f,tt)|0)+(a>>>13)|0)+(bt>>>26)|0,bt&=67108863,n=Math.imul(A,V),a=(a=Math.imul(A,U))+Math.imul(S,V)|0,i=Math.imul(S,U),n=n+Math.imul(k,H)|0,a=(a=a+Math.imul(k,G)|0)+Math.imul(T,H)|0,i=i+Math.imul(T,G)|0,n=n+Math.imul(b,W)|0,a=(a=a+Math.imul(b,X)|0)+Math.imul(_,W)|0,i=i+Math.imul(_,X)|0,n=n+Math.imul(m,J)|0,a=(a=a+Math.imul(m,K)|0)+Math.imul(y,J)|0,i=i+Math.imul(y,K)|0,n=n+Math.imul(d,$)|0,a=(a=a+Math.imul(d,tt)|0)+Math.imul(g,$)|0,i=i+Math.imul(g,tt)|0;var _t=(c+(n=n+Math.imul(h,rt)|0)|0)+((8191&(a=(a=a+Math.imul(h,nt)|0)+Math.imul(f,rt)|0))<<13)|0;c=((i=i+Math.imul(f,nt)|0)+(a>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(L,V),a=(a=Math.imul(L,U))+Math.imul(C,V)|0,i=Math.imul(C,U),n=n+Math.imul(A,H)|0,a=(a=a+Math.imul(A,G)|0)+Math.imul(S,H)|0,i=i+Math.imul(S,G)|0,n=n+Math.imul(k,W)|0,a=(a=a+Math.imul(k,X)|0)+Math.imul(T,W)|0,i=i+Math.imul(T,X)|0,n=n+Math.imul(b,J)|0,a=(a=a+Math.imul(b,K)|0)+Math.imul(_,J)|0,i=i+Math.imul(_,K)|0,n=n+Math.imul(m,$)|0,a=(a=a+Math.imul(m,tt)|0)+Math.imul(y,$)|0,i=i+Math.imul(y,tt)|0,n=n+Math.imul(d,rt)|0,a=(a=a+Math.imul(d,nt)|0)+Math.imul(g,rt)|0,i=i+Math.imul(g,nt)|0;var wt=(c+(n=n+Math.imul(h,it)|0)|0)+((8191&(a=(a=a+Math.imul(h,ot)|0)+Math.imul(f,it)|0))<<13)|0;c=((i=i+Math.imul(f,ot)|0)+(a>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(O,V),a=(a=Math.imul(O,U))+Math.imul(z,V)|0,i=Math.imul(z,U),n=n+Math.imul(L,H)|0,a=(a=a+Math.imul(L,G)|0)+Math.imul(C,H)|0,i=i+Math.imul(C,G)|0,n=n+Math.imul(A,W)|0,a=(a=a+Math.imul(A,X)|0)+Math.imul(S,W)|0,i=i+Math.imul(S,X)|0,n=n+Math.imul(k,J)|0,a=(a=a+Math.imul(k,K)|0)+Math.imul(T,J)|0,i=i+Math.imul(T,K)|0,n=n+Math.imul(b,$)|0,a=(a=a+Math.imul(b,tt)|0)+Math.imul(_,$)|0,i=i+Math.imul(_,tt)|0,n=n+Math.imul(m,rt)|0,a=(a=a+Math.imul(m,nt)|0)+Math.imul(y,rt)|0,i=i+Math.imul(y,nt)|0,n=n+Math.imul(d,it)|0,a=(a=a+Math.imul(d,ot)|0)+Math.imul(g,it)|0,i=i+Math.imul(g,ot)|0;var kt=(c+(n=n+Math.imul(h,lt)|0)|0)+((8191&(a=(a=a+Math.imul(h,ct)|0)+Math.imul(f,lt)|0))<<13)|0;c=((i=i+Math.imul(f,ct)|0)+(a>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(D,V),a=(a=Math.imul(D,U))+Math.imul(R,V)|0,i=Math.imul(R,U),n=n+Math.imul(O,H)|0,a=(a=a+Math.imul(O,G)|0)+Math.imul(z,H)|0,i=i+Math.imul(z,G)|0,n=n+Math.imul(L,W)|0,a=(a=a+Math.imul(L,X)|0)+Math.imul(C,W)|0,i=i+Math.imul(C,X)|0,n=n+Math.imul(A,J)|0,a=(a=a+Math.imul(A,K)|0)+Math.imul(S,J)|0,i=i+Math.imul(S,K)|0,n=n+Math.imul(k,$)|0,a=(a=a+Math.imul(k,tt)|0)+Math.imul(T,$)|0,i=i+Math.imul(T,tt)|0,n=n+Math.imul(b,rt)|0,a=(a=a+Math.imul(b,nt)|0)+Math.imul(_,rt)|0,i=i+Math.imul(_,nt)|0,n=n+Math.imul(m,it)|0,a=(a=a+Math.imul(m,ot)|0)+Math.imul(y,it)|0,i=i+Math.imul(y,ot)|0,n=n+Math.imul(d,lt)|0,a=(a=a+Math.imul(d,ct)|0)+Math.imul(g,lt)|0,i=i+Math.imul(g,ct)|0;var Tt=(c+(n=n+Math.imul(h,ht)|0)|0)+((8191&(a=(a=a+Math.imul(h,ft)|0)+Math.imul(f,ht)|0))<<13)|0;c=((i=i+Math.imul(f,ft)|0)+(a>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(B,V),a=(a=Math.imul(B,U))+Math.imul(N,V)|0,i=Math.imul(N,U),n=n+Math.imul(D,H)|0,a=(a=a+Math.imul(D,G)|0)+Math.imul(R,H)|0,i=i+Math.imul(R,G)|0,n=n+Math.imul(O,W)|0,a=(a=a+Math.imul(O,X)|0)+Math.imul(z,W)|0,i=i+Math.imul(z,X)|0,n=n+Math.imul(L,J)|0,a=(a=a+Math.imul(L,K)|0)+Math.imul(C,J)|0,i=i+Math.imul(C,K)|0,n=n+Math.imul(A,$)|0,a=(a=a+Math.imul(A,tt)|0)+Math.imul(S,$)|0,i=i+Math.imul(S,tt)|0,n=n+Math.imul(k,rt)|0,a=(a=a+Math.imul(k,nt)|0)+Math.imul(T,rt)|0,i=i+Math.imul(T,nt)|0,n=n+Math.imul(b,it)|0,a=(a=a+Math.imul(b,ot)|0)+Math.imul(_,it)|0,i=i+Math.imul(_,ot)|0,n=n+Math.imul(m,lt)|0,a=(a=a+Math.imul(m,ct)|0)+Math.imul(y,lt)|0,i=i+Math.imul(y,ct)|0,n=n+Math.imul(d,ht)|0,a=(a=a+Math.imul(d,ft)|0)+Math.imul(g,ht)|0,i=i+Math.imul(g,ft)|0;var Mt=(c+(n=n+Math.imul(h,dt)|0)|0)+((8191&(a=(a=a+Math.imul(h,gt)|0)+Math.imul(f,dt)|0))<<13)|0;c=((i=i+Math.imul(f,gt)|0)+(a>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(B,H),a=(a=Math.imul(B,G))+Math.imul(N,H)|0,i=Math.imul(N,G),n=n+Math.imul(D,W)|0,a=(a=a+Math.imul(D,X)|0)+Math.imul(R,W)|0,i=i+Math.imul(R,X)|0,n=n+Math.imul(O,J)|0,a=(a=a+Math.imul(O,K)|0)+Math.imul(z,J)|0,i=i+Math.imul(z,K)|0,n=n+Math.imul(L,$)|0,a=(a=a+Math.imul(L,tt)|0)+Math.imul(C,$)|0,i=i+Math.imul(C,tt)|0,n=n+Math.imul(A,rt)|0,a=(a=a+Math.imul(A,nt)|0)+Math.imul(S,rt)|0,i=i+Math.imul(S,nt)|0,n=n+Math.imul(k,it)|0,a=(a=a+Math.imul(k,ot)|0)+Math.imul(T,it)|0,i=i+Math.imul(T,ot)|0,n=n+Math.imul(b,lt)|0,a=(a=a+Math.imul(b,ct)|0)+Math.imul(_,lt)|0,i=i+Math.imul(_,ct)|0,n=n+Math.imul(m,ht)|0,a=(a=a+Math.imul(m,ft)|0)+Math.imul(y,ht)|0,i=i+Math.imul(y,ft)|0;var At=(c+(n=n+Math.imul(d,dt)|0)|0)+((8191&(a=(a=a+Math.imul(d,gt)|0)+Math.imul(g,dt)|0))<<13)|0;c=((i=i+Math.imul(g,gt)|0)+(a>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(B,W),a=(a=Math.imul(B,X))+Math.imul(N,W)|0,i=Math.imul(N,X),n=n+Math.imul(D,J)|0,a=(a=a+Math.imul(D,K)|0)+Math.imul(R,J)|0,i=i+Math.imul(R,K)|0,n=n+Math.imul(O,$)|0,a=(a=a+Math.imul(O,tt)|0)+Math.imul(z,$)|0,i=i+Math.imul(z,tt)|0,n=n+Math.imul(L,rt)|0,a=(a=a+Math.imul(L,nt)|0)+Math.imul(C,rt)|0,i=i+Math.imul(C,nt)|0,n=n+Math.imul(A,it)|0,a=(a=a+Math.imul(A,ot)|0)+Math.imul(S,it)|0,i=i+Math.imul(S,ot)|0,n=n+Math.imul(k,lt)|0,a=(a=a+Math.imul(k,ct)|0)+Math.imul(T,lt)|0,i=i+Math.imul(T,ct)|0,n=n+Math.imul(b,ht)|0,a=(a=a+Math.imul(b,ft)|0)+Math.imul(_,ht)|0,i=i+Math.imul(_,ft)|0;var St=(c+(n=n+Math.imul(m,dt)|0)|0)+((8191&(a=(a=a+Math.imul(m,gt)|0)+Math.imul(y,dt)|0))<<13)|0;c=((i=i+Math.imul(y,gt)|0)+(a>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(B,J),a=(a=Math.imul(B,K))+Math.imul(N,J)|0,i=Math.imul(N,K),n=n+Math.imul(D,$)|0,a=(a=a+Math.imul(D,tt)|0)+Math.imul(R,$)|0,i=i+Math.imul(R,tt)|0,n=n+Math.imul(O,rt)|0,a=(a=a+Math.imul(O,nt)|0)+Math.imul(z,rt)|0,i=i+Math.imul(z,nt)|0,n=n+Math.imul(L,it)|0,a=(a=a+Math.imul(L,ot)|0)+Math.imul(C,it)|0,i=i+Math.imul(C,ot)|0,n=n+Math.imul(A,lt)|0,a=(a=a+Math.imul(A,ct)|0)+Math.imul(S,lt)|0,i=i+Math.imul(S,ct)|0,n=n+Math.imul(k,ht)|0,a=(a=a+Math.imul(k,ft)|0)+Math.imul(T,ht)|0,i=i+Math.imul(T,ft)|0;var Et=(c+(n=n+Math.imul(b,dt)|0)|0)+((8191&(a=(a=a+Math.imul(b,gt)|0)+Math.imul(_,dt)|0))<<13)|0;c=((i=i+Math.imul(_,gt)|0)+(a>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(B,$),a=(a=Math.imul(B,tt))+Math.imul(N,$)|0,i=Math.imul(N,tt),n=n+Math.imul(D,rt)|0,a=(a=a+Math.imul(D,nt)|0)+Math.imul(R,rt)|0,i=i+Math.imul(R,nt)|0,n=n+Math.imul(O,it)|0,a=(a=a+Math.imul(O,ot)|0)+Math.imul(z,it)|0,i=i+Math.imul(z,ot)|0,n=n+Math.imul(L,lt)|0,a=(a=a+Math.imul(L,ct)|0)+Math.imul(C,lt)|0,i=i+Math.imul(C,ct)|0,n=n+Math.imul(A,ht)|0,a=(a=a+Math.imul(A,ft)|0)+Math.imul(S,ht)|0,i=i+Math.imul(S,ft)|0;var Lt=(c+(n=n+Math.imul(k,dt)|0)|0)+((8191&(a=(a=a+Math.imul(k,gt)|0)+Math.imul(T,dt)|0))<<13)|0;c=((i=i+Math.imul(T,gt)|0)+(a>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(B,rt),a=(a=Math.imul(B,nt))+Math.imul(N,rt)|0,i=Math.imul(N,nt),n=n+Math.imul(D,it)|0,a=(a=a+Math.imul(D,ot)|0)+Math.imul(R,it)|0,i=i+Math.imul(R,ot)|0,n=n+Math.imul(O,lt)|0,a=(a=a+Math.imul(O,ct)|0)+Math.imul(z,lt)|0,i=i+Math.imul(z,ct)|0,n=n+Math.imul(L,ht)|0,a=(a=a+Math.imul(L,ft)|0)+Math.imul(C,ht)|0,i=i+Math.imul(C,ft)|0;var Ct=(c+(n=n+Math.imul(A,dt)|0)|0)+((8191&(a=(a=a+Math.imul(A,gt)|0)+Math.imul(S,dt)|0))<<13)|0;c=((i=i+Math.imul(S,gt)|0)+(a>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,n=Math.imul(B,it),a=(a=Math.imul(B,ot))+Math.imul(N,it)|0,i=Math.imul(N,ot),n=n+Math.imul(D,lt)|0,a=(a=a+Math.imul(D,ct)|0)+Math.imul(R,lt)|0,i=i+Math.imul(R,ct)|0,n=n+Math.imul(O,ht)|0,a=(a=a+Math.imul(O,ft)|0)+Math.imul(z,ht)|0,i=i+Math.imul(z,ft)|0;var Pt=(c+(n=n+Math.imul(L,dt)|0)|0)+((8191&(a=(a=a+Math.imul(L,gt)|0)+Math.imul(C,dt)|0))<<13)|0;c=((i=i+Math.imul(C,gt)|0)+(a>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,n=Math.imul(B,lt),a=(a=Math.imul(B,ct))+Math.imul(N,lt)|0,i=Math.imul(N,ct),n=n+Math.imul(D,ht)|0,a=(a=a+Math.imul(D,ft)|0)+Math.imul(R,ht)|0,i=i+Math.imul(R,ft)|0;var Ot=(c+(n=n+Math.imul(O,dt)|0)|0)+((8191&(a=(a=a+Math.imul(O,gt)|0)+Math.imul(z,dt)|0))<<13)|0;c=((i=i+Math.imul(z,gt)|0)+(a>>>13)|0)+(Ot>>>26)|0,Ot&=67108863,n=Math.imul(B,ht),a=(a=Math.imul(B,ft))+Math.imul(N,ht)|0,i=Math.imul(N,ft);var zt=(c+(n=n+Math.imul(D,dt)|0)|0)+((8191&(a=(a=a+Math.imul(D,gt)|0)+Math.imul(R,dt)|0))<<13)|0;c=((i=i+Math.imul(R,gt)|0)+(a>>>13)|0)+(zt>>>26)|0,zt&=67108863;var It=(c+(n=Math.imul(B,dt))|0)+((8191&(a=(a=Math.imul(B,gt))+Math.imul(N,dt)|0))<<13)|0;return c=((i=Math.imul(N,gt))+(a>>>13)|0)+(It>>>26)|0,It&=67108863,l[0]=vt,l[1]=mt,l[2]=yt,l[3]=xt,l[4]=bt,l[5]=_t,l[6]=wt,l[7]=kt,l[8]=Tt,l[9]=Mt,l[10]=At,l[11]=St,l[12]=Et,l[13]=Lt,l[14]=Ct,l[15]=Pt,l[16]=Ot,l[17]=zt,l[18]=It,0!==c&&(l[19]=c,r.length++),r};function d(t,e,r){return(new g).mulp(t,e,r)}function g(t,e){this.x=t,this.y=e}Math.imul||(p=f),i.prototype.mulTo=function(t,e){var r=this.length+t.length;return 10===this.length&&10===t.length?p(this,t,e):r<63?f(this,t,e):r<1024?function(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,a=0,i=0;i<r.length-1;i++){var o=a;a=0;for(var s=67108863&n,l=Math.min(i,e.length-1),c=Math.max(0,i-t.length+1);c<=l;c++){var u=i-c,h=(0|t.words[u])*(0|e.words[c]),f=67108863&h;s=67108863&(f=f+s|0),a+=(o=(o=o+(h/67108864|0)|0)+(f>>>26)|0)>>>26,o&=67108863}r.words[i]=s,n=o,o=a}return 0!==n?r.words[i]=n:r.length--,r.strip()}(this,t,e):d(this,t,e)},g.prototype.makeRBT=function(t){for(var e=new Array(t),r=i.prototype._countBits(t)-1,n=0;n<t;n++)e[n]=this.revBin(n,r,t);return e},g.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var n=0,a=0;a<e;a++)n|=(1&t)<<e-a-1,t>>=1;return n},g.prototype.permute=function(t,e,r,n,a,i){for(var o=0;o<i;o++)n[o]=e[t[o]],a[o]=r[t[o]]},g.prototype.transform=function(t,e,r,n,a,i){this.permute(i,t,e,r,n,a);for(var o=1;o<a;o<<=1)for(var s=o<<1,l=Math.cos(2*Math.PI/s),c=Math.sin(2*Math.PI/s),u=0;u<a;u+=s)for(var h=l,f=c,p=0;p<o;p++){var d=r[u+p],g=n[u+p],v=r[u+p+o],m=n[u+p+o],y=h*v-f*m;m=h*m+f*v,v=y,r[u+p]=d+v,n[u+p]=g+m,r[u+p+o]=d-v,n[u+p+o]=g-m,p!==s&&(y=l*h-c*f,f=l*f+c*h,h=y)}},g.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),n=1&r,a=0;for(r=r/2|0;r;r>>>=1)a++;return 1<<a+1+n},g.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var n=0;n<r/2;n++){var a=t[n];t[n]=t[r-n-1],t[r-n-1]=a,a=e[n],e[n]=-e[r-n-1],e[r-n-1]=-a}},g.prototype.normalize13b=function(t,e){for(var r=0,n=0;n<e/2;n++){var a=8192*Math.round(t[2*n+1]/e)+Math.round(t[2*n]/e)+r;t[n]=67108863&a,r=a<67108864?0:a/67108864|0}return t},g.prototype.convert13b=function(t,e,r,a){for(var i=0,o=0;o<e;o++)i+=0|t[o],r[2*o]=8191&i,i>>>=13,r[2*o+1]=8191&i,i>>>=13;for(o=2*e;o<a;++o)r[o]=0;n(0===i),n(0==(-8192&i))},g.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},g.prototype.mulp=function(t,e,r){var n=2*this.guessLen13b(t.length,e.length),a=this.makeRBT(n),i=this.stub(n),o=new Array(n),s=new Array(n),l=new Array(n),c=new Array(n),u=new Array(n),h=new Array(n),f=r.words;f.length=n,this.convert13b(t.words,t.length,o,n),this.convert13b(e.words,e.length,c,n),this.transform(o,i,s,l,n,a),this.transform(c,i,u,h,n,a);for(var p=0;p<n;p++){var d=s[p]*u[p]-l[p]*h[p];l[p]=s[p]*h[p]+l[p]*u[p],s[p]=d}return this.conjugate(s,l,n),this.transform(s,l,f,i,n,a),this.conjugate(f,i,n),this.normalize13b(f,n),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},i.prototype.mul=function(t){var e=new i(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},i.prototype.mulf=function(t){var e=new i(null);return e.words=new Array(this.length+t.length),d(this,t,e)},i.prototype.imul=function(t){return this.clone().mulTo(t,this)},i.prototype.imuln=function(t){n("number"==typeof t),n(t<67108864);for(var e=0,r=0;r<this.length;r++){var a=(0|this.words[r])*t,i=(67108863&a)+(67108863&e);e>>=26,e+=a/67108864|0,e+=i>>>26,this.words[r]=67108863&i}return 0!==e&&(this.words[r]=e,this.length++),this},i.prototype.muln=function(t){return this.clone().imuln(t)},i.prototype.sqr=function(){return this.mul(this)},i.prototype.isqr=function(){return this.imul(this.clone())},i.prototype.pow=function(t){var e=function(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var n=r/26|0,a=r%26;e[r]=(t.words[n]&1<<a)>>>a}return e}(t);if(0===e.length)return new i(1);for(var r=this,n=0;n<e.length&&0===e[n];n++,r=r.sqr());if(++n<e.length)for(var a=r.sqr();n<e.length;n++,a=a.sqr())0!==e[n]&&(r=r.mul(a));return r},i.prototype.iushln=function(t){n("number"==typeof t&&t>=0);var e,r=t%26,a=(t-r)/26,i=67108863>>>26-r<<26-r;if(0!==r){var o=0;for(e=0;e<this.length;e++){var s=this.words[e]&i,l=(0|this.words[e])-s<<r;this.words[e]=l|o,o=s>>>26-r}o&&(this.words[e]=o,this.length++)}if(0!==a){for(e=this.length-1;e>=0;e--)this.words[e+a]=this.words[e];for(e=0;e<a;e++)this.words[e]=0;this.length+=a}return this.strip()},i.prototype.ishln=function(t){return n(0===this.negative),this.iushln(t)},i.prototype.iushrn=function(t,e,r){var a;n("number"==typeof t&&t>=0),a=e?(e-e%26)/26:0;var i=t%26,o=Math.min((t-i)/26,this.length),s=67108863^67108863>>>i<<i,l=r;if(a-=o,a=Math.max(0,a),l){for(var c=0;c<o;c++)l.words[c]=this.words[c];l.length=o}if(0===o);else if(this.length>o)for(this.length-=o,c=0;c<this.length;c++)this.words[c]=this.words[c+o];else this.words[0]=0,this.length=1;var u=0;for(c=this.length-1;c>=0&&(0!==u||c>=a);c--){var h=0|this.words[c];this.words[c]=u<<26-i|h>>>i,u=h&s}return l&&0!==u&&(l.words[l.length++]=u),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},i.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},i.prototype.shln=function(t){return this.clone().ishln(t)},i.prototype.ushln=function(t){return this.clone().iushln(t)},i.prototype.shrn=function(t){return this.clone().ishrn(t)},i.prototype.ushrn=function(t){return this.clone().iushrn(t)},i.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,a=1<<e;return!(this.length<=r)&&!!(this.words[r]&a)},i.prototype.imaskn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var a=67108863^67108863>>>e<<e;this.words[this.length-1]&=a}return this.strip()},i.prototype.maskn=function(t){return this.clone().imaskn(t)},i.prototype.iaddn=function(t){return n("number"==typeof t),n(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},i.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},i.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},i.prototype.addn=function(t){return this.clone().iaddn(t)},i.prototype.subn=function(t){return this.clone().isubn(t)},i.prototype.iabs=function(){return this.negative=0,this},i.prototype.abs=function(){return this.clone().iabs()},i.prototype._ishlnsubmul=function(t,e,r){var a,i,o=t.length+r;this._expand(o);var s=0;for(a=0;a<t.length;a++){i=(0|this.words[a+r])+s;var l=(0|t.words[a])*e;s=((i-=67108863&l)>>26)-(l/67108864|0),this.words[a+r]=67108863&i}for(;a<this.length-r;a++)s=(i=(0|this.words[a+r])+s)>>26,this.words[a+r]=67108863&i;if(0===s)return this.strip();for(n(-1===s),s=0,a=0;a<this.length;a++)s=(i=-(0|this.words[a])+s)>>26,this.words[a]=67108863&i;return this.negative=1,this.strip()},i.prototype._wordDiv=function(t,e){var r=(this.length,t.length),n=this.clone(),a=t,o=0|a.words[a.length-1];0!==(r=26-this._countBits(o))&&(a=a.ushln(r),n.iushln(r),o=0|a.words[a.length-1]);var s,l=n.length-a.length;if("mod"!==e){(s=new i(null)).length=l+1,s.words=new Array(s.length);for(var c=0;c<s.length;c++)s.words[c]=0}var u=n.clone()._ishlnsubmul(a,1,l);0===u.negative&&(n=u,s&&(s.words[l]=1));for(var h=l-1;h>=0;h--){var f=67108864*(0|n.words[a.length+h])+(0|n.words[a.length+h-1]);for(f=Math.min(f/o|0,67108863),n._ishlnsubmul(a,f,h);0!==n.negative;)f--,n.negative=0,n._ishlnsubmul(a,1,h),n.isZero()||(n.negative^=1);s&&(s.words[h]=f)}return s&&s.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},i.prototype.divmod=function(t,e,r){return n(!t.isZero()),this.isZero()?{div:new i(0),mod:new i(0)}:0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,e),"mod"!==e&&(a=s.div.neg()),"div"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.iadd(t)),{div:a,mod:o}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),e),"mod"!==e&&(a=s.div.neg()),{div:a,mod:s.mod}):0!=(this.negative&t.negative)?(s=this.neg().divmod(t.neg(),e),"div"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.isub(t)),{div:s.div,mod:o}):t.length>this.length||this.cmp(t)<0?{div:new i(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new i(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new i(this.modn(t.words[0]))}:this._wordDiv(t,e);var a,o,s},i.prototype.div=function(t){return this.divmod(t,"div",!1).div},i.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},i.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},i.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),a=t.andln(1),i=r.cmp(n);return i<0||1===a&&0===i?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},i.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,a=this.length-1;a>=0;a--)r=(e*r+(0|this.words[a]))%t;return r},i.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var a=(0|this.words[r])+67108864*e;this.words[r]=a/t|0,e=a%t}return this.strip()},i.prototype.divn=function(t){return this.clone().idivn(t)},i.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var a=new i(1),o=new i(0),s=new i(0),l=new i(1),c=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++c;for(var u=r.clone(),h=e.clone();!e.isZero();){for(var f=0,p=1;0==(e.words[0]&p)&&f<26;++f,p<<=1);if(f>0)for(e.iushrn(f);f-- >0;)(a.isOdd()||o.isOdd())&&(a.iadd(u),o.isub(h)),a.iushrn(1),o.iushrn(1);for(var d=0,g=1;0==(r.words[0]&g)&&d<26;++d,g<<=1);if(d>0)for(r.iushrn(d);d-- >0;)(s.isOdd()||l.isOdd())&&(s.iadd(u),l.isub(h)),s.iushrn(1),l.iushrn(1);e.cmp(r)>=0?(e.isub(r),a.isub(s),o.isub(l)):(r.isub(e),s.isub(a),l.isub(o))}return{a:s,b:l,gcd:r.iushln(c)}},i.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var a,o=new i(1),s=new i(0),l=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var c=0,u=1;0==(e.words[0]&u)&&c<26;++c,u<<=1);if(c>0)for(e.iushrn(c);c-- >0;)o.isOdd()&&o.iadd(l),o.iushrn(1);for(var h=0,f=1;0==(r.words[0]&f)&&h<26;++h,f<<=1);if(h>0)for(r.iushrn(h);h-- >0;)s.isOdd()&&s.iadd(l),s.iushrn(1);e.cmp(r)>=0?(e.isub(r),o.isub(s)):(r.isub(e),s.isub(o))}return(a=0===e.cmpn(1)?o:s).cmpn(0)<0&&a.iadd(t),a},i.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var a=e.cmp(r);if(a<0){var i=e;e=r,r=i}else if(0===a||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},i.prototype.invm=function(t){return this.egcd(t).a.umod(t)},i.prototype.isEven=function(){return 0==(1&this.words[0])},i.prototype.isOdd=function(){return 1==(1&this.words[0])},i.prototype.andln=function(t){return this.words[0]&t},i.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,a=1<<e;if(this.length<=r)return this._expand(r+1),this.words[r]|=a,this;for(var i=a,o=r;0!==i&&o<this.length;o++){var s=0|this.words[o];i=(s+=i)>>>26,s&=67108863,this.words[o]=s}return 0!==i&&(this.words[o]=i,this.length++),this},i.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},i.prototype.cmpn=function(t){var e,r=t<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)e=1;else{r&&(t=-t),n(t<=67108863,"Number is too big");var a=0|this.words[0];e=a===t?0:a<t?-1:1}return 0!==this.negative?0|-e:e},i.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},i.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],a=0|t.words[r];if(n!==a){n<a?e=-1:n>a&&(e=1);break}}return e},i.prototype.gtn=function(t){return 1===this.cmpn(t)},i.prototype.gt=function(t){return 1===this.cmp(t)},i.prototype.gten=function(t){return this.cmpn(t)>=0},i.prototype.gte=function(t){return this.cmp(t)>=0},i.prototype.ltn=function(t){return-1===this.cmpn(t)},i.prototype.lt=function(t){return-1===this.cmp(t)},i.prototype.lten=function(t){return this.cmpn(t)<=0},i.prototype.lte=function(t){return this.cmp(t)<=0},i.prototype.eqn=function(t){return 0===this.cmpn(t)},i.prototype.eq=function(t){return 0===this.cmp(t)},i.red=function(t){return new w(t)},i.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},i.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},i.prototype._forceRed=function(t){return this.red=t,this},i.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},i.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},i.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},i.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},i.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},i.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},i.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},i.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},i.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},i.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},i.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},i.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},i.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},i.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var v={k256:null,p224:null,p192:null,p25519:null};function m(t,e){this.name=t,this.p=new i(e,16),this.n=this.p.bitLength(),this.k=new i(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function y(){m.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function x(){m.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function b(){m.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function _(){m.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function w(t){if("string"==typeof t){var e=i._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function k(t){w.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new i(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}m.prototype._tmp=function(){var t=new i(null);return t.words=new Array(Math.ceil(this.n/13)),t},m.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),e=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(e>this.n);var n=e<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):r.strip(),r},m.prototype.split=function(t,e){t.iushrn(this.n,0,e)},m.prototype.imulK=function(t){return t.imul(this.k)},a(y,m),y.prototype.split=function(t,e){for(var r=Math.min(t.length,9),n=0;n<r;n++)e.words[n]=t.words[n];if(e.length=r,t.length<=9)return t.words[0]=0,void(t.length=1);var a=t.words[9];for(e.words[e.length++]=4194303&a,n=10;n<t.length;n++){var i=0|t.words[n];t.words[n-10]=(4194303&i)<<4|a>>>22,a=i}a>>>=22,t.words[n-10]=a,0===a&&t.length>10?t.length-=10:t.length-=9},y.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var n=0|t.words[r];e+=977*n,t.words[r]=67108863&e,e=64*n+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},a(x,m),a(b,m),a(_,m),_.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var n=19*(0|t.words[r])+e,a=67108863&n;n>>>=26,t.words[r]=a,e=n}return 0!==e&&(t.words[t.length++]=e),t},i._prime=function(t){if(v[t])return v[t];var e;if("k256"===t)e=new y;else if("p224"===t)e=new x;else if("p192"===t)e=new b;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new _}return v[t]=e,e},w.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},w.prototype._verify2=function(t,e){n(0==(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},w.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},w.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},w.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},w.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},w.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},w.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},w.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},w.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},w.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},w.prototype.isqr=function(t){return this.imul(t,t.clone())},w.prototype.sqr=function(t){return this.mul(t,t)},w.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2==1),3===e){var r=this.m.add(new i(1)).iushrn(2);return this.pow(t,r)}for(var a=this.m.subn(1),o=0;!a.isZero()&&0===a.andln(1);)o++,a.iushrn(1);n(!a.isZero());var s=new i(1).toRed(this),l=s.redNeg(),c=this.m.subn(1).iushrn(1),u=this.m.bitLength();for(u=new i(2*u*u).toRed(this);0!==this.pow(u,c).cmp(l);)u.redIAdd(l);for(var h=this.pow(u,a),f=this.pow(t,a.addn(1).iushrn(1)),p=this.pow(t,a),d=o;0!==p.cmp(s);){for(var g=p,v=0;0!==g.cmp(s);v++)g=g.redSqr();n(v<d);var m=this.pow(h,new i(1).iushln(d-v-1));f=f.redMul(m),h=m.redSqr(),p=p.redMul(h),d=v}return f},w.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},w.prototype.pow=function(t,e){if(e.isZero())return new i(1).toRed(this);if(0===e.cmpn(1))return t.clone();var r=new Array(16);r[0]=new i(1).toRed(this),r[1]=t;for(var n=2;n<r.length;n++)r[n]=this.mul(r[n-1],t);var a=r[0],o=0,s=0,l=e.bitLength()%26;for(0===l&&(l=26),n=e.length-1;n>=0;n--){for(var c=e.words[n],u=l-1;u>=0;u--){var h=c>>u&1;a!==r[0]&&(a=this.sqr(a)),0!==h||0!==o?(o<<=1,o|=h,(4===++s||0===n&&0===u)&&(a=this.mul(a,r[o]),s=0,o=0)):s=0}l=26}return a},w.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},w.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},i.mont=function(t){return new k(t)},a(k,w),k.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},k.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},k.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a=r.isub(n).iushrn(this.shift),i=a;return a.cmp(this.m)>=0?i=a.isub(this.m):a.cmpn(0)<0&&(i=a.iadd(this.m)),i._forceRed(this)},k.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new i(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),a=r.isub(n).iushrn(this.shift),o=a;return a.cmp(this.m)>=0?o=a.isub(this.m):a.cmpn(0)<0&&(o=a.iadd(this.m)),o._forceRed(this)},k.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}("undefined"==typeof e||e,this)},{buffer:105}],97:[function(t,e,r){"use strict";e.exports=function(t){var e,r,n,a=t.length,i=0;for(e=0;e<a;++e)i+=t[e].length;var o=new Array(i),s=0;for(e=0;e<a;++e){var l=t[e],c=l.length;for(r=0;r<c;++r){var u=o[s++]=new Array(c-1),h=0;for(n=0;n<c;++n)n!==r&&(u[h++]=l[n]);if(1&r){var f=u[1];u[1]=u[0],u[0]=f}}}return o}},{}],98:[function(t,e,r){"use strict";e.exports=function(t,e,r){switch(arguments.length){case 1:return n=[],c(a=t,a,u,!0),n;case 2:return"function"==typeof e?c(t,t,e,!0):function(t,e){return n=[],c(t,e,u,!1),n}(t,e);case 3:return c(t,e,r,!1);default:throw new Error("box-intersect: Invalid arguments")}var a};var n,a=t("typedarray-pool"),i=t("./lib/sweep"),o=t("./lib/intersect");function s(t,e){for(var r=0;r<t;++r)if(!(e[r]<=e[r+t]))return!0;return!1}function l(t,e,r,n){for(var a=0,i=0,o=0,l=t.length;o<l;++o){var c=t[o];if(!s(e,c)){for(var u=0;u<2*e;++u)r[a++]=c[u];n[i++]=o}}return i}function c(t,e,r,n){var s=t.length,c=e.length;if(!(s<=0||c<=0)){var u=t[0].length>>>1;if(!(u<=0)){var h,f=a.mallocDouble(2*u*s),p=a.mallocInt32(s);if((s=l(t,u,f,p))>0){if(1===u&&n)i.init(s),h=i.sweepComplete(u,r,0,s,f,p,0,s,f,p);else{var d=a.mallocDouble(2*u*c),g=a.mallocInt32(c);(c=l(e,u,d,g))>0&&(i.init(s+c),h=1===u?i.sweepBipartite(u,r,0,s,f,p,0,c,d,g):o(u,r,n,s,f,p,c,d,g),a.free(d),a.free(g))}a.free(f),a.free(p)}return h}}}function u(t,e){n.push([t,e])}},{"./lib/intersect":100,"./lib/sweep":104,"typedarray-pool":543}],99:[function(t,e,r){"use strict";var n="d",a="ax",i="vv",o="fp",s="es",l="rs",c="re",u="rb",h="ri",f="rp",p="bs",d="be",g="bb",v="bi",m="bp",y="rv",x="Q",b=[n,a,i,l,c,u,h,p,d,g,v];function _(t){var e="bruteForce"+(t?"Full":"Partial"),r=[],_=b.slice();t||_.splice(3,0,o);var w=["function "+e+"("+_.join()+"){"];function k(e,o){var _=function(t,e,r){var o="bruteForce"+(t?"Red":"Blue")+(e?"Flip":"")+(r?"Full":""),_=["function ",o,"(",b.join(),"){","var ",s,"=2*",n,";"],w="for(var i="+l+","+f+"="+s+"*"+l+";i<"+c+";++i,"+f+"+="+s+"){var x0="+u+"["+a+"+"+f+"],x1="+u+"["+a+"+"+f+"+"+n+"],xi="+h+"[i];",k="for(var j="+p+","+m+"="+s+"*"+p+";j<"+d+";++j,"+m+"+="+s+"){var y0="+g+"["+a+"+"+m+"],"+(r?"y1="+g+"["+a+"+"+m+"+"+n+"],":"")+"yi="+v+"[j];";return t?_.push(w,x,":",k):_.push(k,x,":",w),r?_.push("if(y1<x0||x1<y0)continue;"):e?_.push("if(y0<=x0||x1<y0)continue;"):_.push("if(y0<x0||x1<y0)continue;"),_.push("for(var k="+a+"+1;k<"+n+";++k){var r0="+u+"[k+"+f+"],r1="+u+"[k+"+n+"+"+f+"],b0="+g+"[k+"+m+"],b1="+g+"[k+"+n+"+"+m+"];if(r1<b0||b1<r0)continue "+x+";}var "+y+"="+i+"("),e?_.push("yi,xi"):_.push("xi,yi"),_.push(");if("+y+"!==void 0)return "+y+";}}}"),{name:o,code:_.join("")}}(e,o,t);r.push(_.code),w.push("return "+_.name+"("+b.join()+");")}w.push("if("+c+"-"+l+">"+d+"-"+p+"){"),t?(k(!0,!1),w.push("}else{"),k(!1,!1)):(w.push("if("+o+"){"),k(!0,!0),w.push("}else{"),k(!0,!1),w.push("}}else{if("+o+"){"),k(!1,!0),w.push("}else{"),k(!1,!1),w.push("}")),w.push("}}return "+e);var T=r.join("")+w.join("");return new Function(T)()}r.partial=_(!1),r.full=_(!0)},{}],100:[function(t,e,r){"use strict";e.exports=function(t,e,r,i,u,S,E,L,C){!function(t,e){var r=8*a.log2(e+1)*(t+1)|0,i=a.nextPow2(b*r);w.length<i&&(n.free(w),w=n.mallocInt32(i));var o=a.nextPow2(_*r);k<o&&(n.free(k),k=n.mallocDouble(o))}(t,i+E);var P,O=0,z=2*t;T(O++,0,0,i,0,E,r?16:0,-1/0,1/0),r||T(O++,0,0,E,0,i,1,-1/0,1/0);for(;O>0;){var I=(O-=1)*b,D=w[I],R=w[I+1],F=w[I+2],B=w[I+3],N=w[I+4],j=w[I+5],V=O*_,U=k[V],q=k[V+1],H=1&j,G=!!(16&j),Y=u,W=S,X=L,Z=C;if(H&&(Y=L,W=C,X=u,Z=S),!(2&j&&(F=v(t,D,R,F,Y,W,q),R>=F)||4&j&&(R=m(t,D,R,F,Y,W,U))>=F)){var J=F-R,K=N-B;if(G){if(t*J*(J+K)<p){if(void 0!==(P=l.scanComplete(t,D,e,R,F,Y,W,B,N,X,Z)))return P;continue}}else{if(t*Math.min(J,K)<h){if(void 0!==(P=o(t,D,e,H,R,F,Y,W,B,N,X,Z)))return P;continue}if(t*J*K<f){if(void 0!==(P=l.scanBipartite(t,D,e,H,R,F,Y,W,B,N,X,Z)))return P;continue}}var Q=d(t,D,R,F,Y,W,U,q);if(R<Q)if(t*(Q-R)<h){if(void 0!==(P=s(t,D+1,e,R,Q,Y,W,B,N,X,Z)))return P}else if(D===t-2){if(void 0!==(P=H?l.sweepBipartite(t,e,B,N,X,Z,R,Q,Y,W):l.sweepBipartite(t,e,R,Q,Y,W,B,N,X,Z)))return P}else T(O++,D+1,R,Q,B,N,H,-1/0,1/0),T(O++,D+1,B,N,R,Q,1^H,-1/0,1/0);if(Q<F){var $=c(t,D,B,N,X,Z),tt=X[z*$+D],et=g(t,D,$,N,X,Z,tt);if(et<N&&T(O++,D,Q,F,et,N,(4|H)+(G?16:0),tt,q),B<$&&T(O++,D,Q,F,B,$,(2|H)+(G?16:0),U,tt),$+1===et){if(void 0!==(P=G?A(t,D,e,Q,F,Y,W,$,X,Z[$]):M(t,D,e,H,Q,F,Y,W,$,X,Z[$])))return P}else if($<et){var rt;if(G){if(rt=y(t,D,Q,F,Y,W,tt),Q<rt){var nt=g(t,D,Q,rt,Y,W,tt);if(D===t-2){if(Q<nt&&void 0!==(P=l.sweepComplete(t,e,Q,nt,Y,W,$,et,X,Z)))return P;if(nt<rt&&void 0!==(P=l.sweepBipartite(t,e,nt,rt,Y,W,$,et,X,Z)))return P}else Q<nt&&T(O++,D+1,Q,nt,$,et,16,-1/0,1/0),nt<rt&&(T(O++,D+1,nt,rt,$,et,0,-1/0,1/0),T(O++,D+1,$,et,nt,rt,1,-1/0,1/0))}}else rt=H?x(t,D,Q,F,Y,W,tt):y(t,D,Q,F,Y,W,tt),Q<rt&&(D===t-2?P=H?l.sweepBipartite(t,e,$,et,X,Z,Q,rt,Y,W):l.sweepBipartite(t,e,Q,rt,Y,W,$,et,X,Z):(T(O++,D+1,Q,rt,$,et,H,-1/0,1/0),T(O++,D+1,$,et,Q,rt,1^H,-1/0,1/0)))}}}}};var n=t("typedarray-pool"),a=t("bit-twiddle"),i=t("./brute"),o=i.partial,s=i.full,l=t("./sweep"),c=t("./median"),u=t("./partition"),h=128,f=1<<22,p=1<<22,d=u("!(lo>=p0)&&!(p1>=hi)",["p0","p1"]),g=u("lo===p0",["p0"]),v=u("lo<p0",["p0"]),m=u("hi<=p0",["p0"]),y=u("lo<=p0&&p0<=hi",["p0"]),x=u("lo<p0&&p0<=hi",["p0"]),b=6,_=2,w=n.mallocInt32(1024),k=n.mallocDouble(1024);function T(t,e,r,n,a,i,o,s,l){var c=b*t;w[c]=e,w[c+1]=r,w[c+2]=n,w[c+3]=a,w[c+4]=i,w[c+5]=o;var u=_*t;k[u]=s,k[u+1]=l}function M(t,e,r,n,a,i,o,s,l,c,u){var h=2*t,f=l*h,p=c[f+e];t:for(var d=a,g=a*h;d<i;++d,g+=h){var v=o[g+e],m=o[g+e+t];if(!(p<v||m<p)&&(!n||p!==v)){for(var y,x=s[d],b=e+1;b<t;++b){v=o[g+b],m=o[g+b+t];var _=c[f+b],w=c[f+b+t];if(m<_||w<v)continue t}if(void 0!==(y=n?r(u,x):r(x,u)))return y}}}function A(t,e,r,n,a,i,o,s,l,c){var u=2*t,h=s*u,f=l[h+e];t:for(var p=n,d=n*u;p<a;++p,d+=u){var g=o[p];if(g!==c){var v=i[d+e],m=i[d+e+t];if(!(f<v||m<f)){for(var y=e+1;y<t;++y){v=i[d+y],m=i[d+y+t];var x=l[h+y],b=l[h+y+t];if(m<x||b<v)continue t}var _=r(g,c);if(void 0!==_)return _}}}}},{"./brute":99,"./median":101,"./partition":102,"./sweep":104,"bit-twiddle":94,"typedarray-pool":543}],101:[function(t,e,r){"use strict";e.exports=function(t,e,r,o,s,l){if(o<=r+1)return r;var c=r,u=o,h=o+r>>>1,f=2*t,p=h,d=s[f*h+e];for(;c<u;){if(u-c<a){i(t,e,c,u,s,l),d=s[f*h+e];break}var g=u-c,v=Math.random()*g+c|0,m=s[f*v+e],y=Math.random()*g+c|0,x=s[f*y+e],b=Math.random()*g+c|0,_=s[f*b+e];m<=x?_>=x?(p=y,d=x):m>=_?(p=v,d=m):(p=b,d=_):x>=_?(p=y,d=x):_>=m?(p=v,d=m):(p=b,d=_);for(var w=f*(u-1),k=f*p,T=0;T<f;++T,++w,++k){var M=s[w];s[w]=s[k],s[k]=M}var A=l[u-1];l[u-1]=l[p],l[p]=A,p=n(t,e,c,u-1,s,l,d);for(var w=f*(u-1),k=f*p,T=0;T<f;++T,++w,++k){var M=s[w];s[w]=s[k],s[k]=M}var A=l[u-1];if(l[u-1]=l[p],l[p]=A,h<p){for(u=p-1;c<u&&s[f*(u-1)+e]===d;)u-=1;u+=1}else{if(!(p<h))break;for(c=p+1;c<u&&s[f*c+e]===d;)c+=1}}return n(t,e,r,h,s,l,s[f*h+e])};var n=t("./partition")("lo<p0",["p0"]),a=8;function i(t,e,r,n,a,i){for(var o=2*t,s=o*(r+1)+e,l=r+1;l<n;++l,s+=o)for(var c=a[s],u=l,h=o*(l-1);u>r&&a[h+e]>c;--u,h-=o){for(var f=h,p=h+o,d=0;d<o;++d,++f,++p){var g=a[f];a[f]=a[p],a[p]=g}var v=i[u];i[u]=i[u-1],i[u-1]=v}}},{"./partition":102}],102:[function(t,e,r){"use strict";e.exports=function(t,e){var r="abcdef".split("").concat(e),a=[];t.indexOf("lo")>=0&&a.push("lo=e[k+n]");t.indexOf("hi")>=0&&a.push("hi=e[k+o]");return r.push(n.replace("_",a.join()).replace("$",t)),Function.apply(void 0,r)};var n="for(var j=2*a,k=j*c,l=k,m=c,n=b,o=a+b,p=c;d>p;++p,k+=j){var _;if($)if(m===p)m+=1,l+=j;else{for(var s=0;j>s;++s){var t=e[k+s];e[k+s]=e[l],e[l++]=t}var u=f[p];f[p]=f[m],f[m++]=u}}return m"},{}],103:[function(t,e,r){"use strict";e.exports=function(t,e){e<=4*n?a(0,e-1,t):function t(e,r,h){var f=(r-e+1)/6|0,p=e+f,d=r-f,g=e+r>>1,v=g-f,m=g+f,y=p,x=v,b=g,_=m,w=d,k=e+1,T=r-1,M=0;c(y,x,h)&&(M=y,y=x,x=M);c(_,w,h)&&(M=_,_=w,w=M);c(y,b,h)&&(M=y,y=b,b=M);c(x,b,h)&&(M=x,x=b,b=M);c(y,_,h)&&(M=y,y=_,_=M);c(b,_,h)&&(M=b,b=_,_=M);c(x,w,h)&&(M=x,x=w,w=M);c(x,b,h)&&(M=x,x=b,b=M);c(_,w,h)&&(M=_,_=w,w=M);var A=h[2*x];var S=h[2*x+1];var E=h[2*_];var L=h[2*_+1];var C=2*y;var P=2*b;var O=2*w;var z=2*p;var I=2*g;var D=2*d;for(var R=0;R<2;++R){var F=h[C+R],B=h[P+R],N=h[O+R];h[z+R]=F,h[I+R]=B,h[D+R]=N}o(v,e,h);o(m,r,h);for(var j=k;j<=T;++j)if(u(j,A,S,h))j!==k&&i(j,k,h),++k;else if(!u(j,E,L,h))for(;;){if(u(T,E,L,h)){u(T,A,S,h)?(s(j,k,T,h),++k,--T):(i(j,T,h),--T);break}if(--T<j)break}l(e,k-1,A,S,h);l(r,T+1,E,L,h);k-2-e<=n?a(e,k-2,h):t(e,k-2,h);r-(T+2)<=n?a(T+2,r,h):t(T+2,r,h);T-k<=n?a(k,T,h):t(k,T,h)}(0,e-1,t)};var n=32;function a(t,e,r){for(var n=2*(t+1),a=t+1;a<=e;++a){for(var i=r[n++],o=r[n++],s=a,l=n-2;s-- >t;){var c=r[l-2],u=r[l-1];if(c<i)break;if(c===i&&u<o)break;r[l]=c,r[l+1]=u,l-=2}r[l]=i,r[l+1]=o}}function i(t,e,r){e*=2;var n=r[t*=2],a=r[t+1];r[t]=r[e],r[t+1]=r[e+1],r[e]=n,r[e+1]=a}function o(t,e,r){e*=2,r[t*=2]=r[e],r[t+1]=r[e+1]}function s(t,e,r,n){e*=2,r*=2;var a=n[t*=2],i=n[t+1];n[t]=n[e],n[t+1]=n[e+1],n[e]=n[r],n[e+1]=n[r+1],n[r]=a,n[r+1]=i}function l(t,e,r,n,a){e*=2,a[t*=2]=a[e],a[e]=r,a[t+1]=a[e+1],a[e+1]=n}function c(t,e,r){e*=2;var n=r[t*=2],a=r[e];return!(n<a)&&(n!==a||r[t+1]>r[e+1])}function u(t,e,r,n){var a=n[t*=2];return a<e||a===e&&n[t+1]<r}},{}],104:[function(t,e,r){"use strict";e.exports={init:function(t){var e=a.nextPow2(t);s.length<e&&(n.free(s),s=n.mallocInt32(e));l.length<e&&(n.free(l),l=n.mallocInt32(e));c.length<e&&(n.free(c),c=n.mallocInt32(e));u.length<e&&(n.free(u),u=n.mallocInt32(e));h.length<e&&(n.free(h),h=n.mallocInt32(e));f.length<e&&(n.free(f),f=n.mallocInt32(e));var r=8*e;p.length<r&&(n.free(p),p=n.mallocDouble(r))},sweepBipartite:function(t,e,r,n,a,h,f,v,m,y){for(var x=0,b=2*t,_=t-1,w=b-1,k=r;k<n;++k){var T=h[k],M=b*k;p[x++]=a[M+_],p[x++]=-(T+1),p[x++]=a[M+w],p[x++]=T}for(var k=f;k<v;++k){var T=y[k]+o,A=b*k;p[x++]=m[A+_],p[x++]=-T,p[x++]=m[A+w],p[x++]=T}var S=x>>>1;i(p,S);for(var E=0,L=0,k=0;k<S;++k){var C=0|p[2*k+1];if(C>=o)d(c,u,L--,C=C-o|0);else if(C>=0)d(s,l,E--,C);else if(C<=-o){C=-C-o|0;for(var P=0;P<E;++P){var O=e(s[P],C);if(void 0!==O)return O}g(c,u,L++,C)}else{C=-C-1|0;for(var P=0;P<L;++P){var O=e(C,c[P]);if(void 0!==O)return O}g(s,l,E++,C)}}},sweepComplete:function(t,e,r,n,a,o,v,m,y,x){for(var b=0,_=2*t,w=t-1,k=_-1,T=r;T<n;++T){var M=o[T]+1<<1,A=_*T;p[b++]=a[A+w],p[b++]=-M,p[b++]=a[A+k],p[b++]=M}for(var T=v;T<m;++T){var M=x[T]+1<<1,S=_*T;p[b++]=y[S+w],p[b++]=1|-M,p[b++]=y[S+k],p[b++]=1|M}var E=b>>>1;i(p,E);for(var L=0,C=0,P=0,T=0;T<E;++T){var O=0|p[2*T+1],z=1&O;if(T<E-1&&O>>1==p[2*T+3]>>1&&(z=2,T+=1),O<0){for(var I=-(O>>1)-1,D=0;D<P;++D){var R=e(h[D],I);if(void 0!==R)return R}if(0!==z)for(var D=0;D<L;++D){var R=e(s[D],I);if(void 0!==R)return R}if(1!==z)for(var D=0;D<C;++D){var R=e(c[D],I);if(void 0!==R)return R}0===z?g(s,l,L++,I):1===z?g(c,u,C++,I):2===z&&g(h,f,P++,I)}else{var I=(O>>1)-1;0===z?d(s,l,L--,I):1===z?d(c,u,C--,I):2===z&&d(h,f,P--,I)}}},scanBipartite:function(t,e,r,n,a,c,u,h,f,v,m,y){var x=0,b=2*t,_=e,w=e+t,k=1,T=1;n?T=o:k=o;for(var M=a;M<c;++M){var A=M+k,S=b*M;p[x++]=u[S+_],p[x++]=-A,p[x++]=u[S+w],p[x++]=A}for(var M=f;M<v;++M){var A=M+T,E=b*M;p[x++]=m[E+_],p[x++]=-A}var L=x>>>1;i(p,L);for(var C=0,M=0;M<L;++M){var P=0|p[2*M+1];if(P<0){var A=-P,O=!1;if(A>=o?(O=!n,A-=o):(O=!!n,A-=1),O)g(s,l,C++,A);else{var z=y[A],I=b*A,D=m[I+e+1],R=m[I+e+1+t];t:for(var F=0;F<C;++F){var B=s[F],N=b*B;if(!(R<u[N+e+1]||u[N+e+1+t]<D)){for(var j=e+2;j<t;++j)if(m[I+j+t]<u[N+j]||u[N+j+t]<m[I+j])continue t;var V,U=h[B];if(void 0!==(V=n?r(z,U):r(U,z)))return V}}}}else d(s,l,C--,P-k)}},scanComplete:function(t,e,r,n,a,l,c,u,h,f,d){for(var g=0,v=2*t,m=e,y=e+t,x=n;x<a;++x){var b=x+o,_=v*x;p[g++]=l[_+m],p[g++]=-b,p[g++]=l[_+y],p[g++]=b}for(var x=u;x<h;++x){var b=x+1,w=v*x;p[g++]=f[w+m],p[g++]=-b}var k=g>>>1;i(p,k);for(var T=0,x=0;x<k;++x){var M=0|p[2*x+1];if(M<0){var b=-M;if(b>=o)s[T++]=b-o;else{var A=d[b-=1],S=v*b,E=f[S+e+1],L=f[S+e+1+t];t:for(var C=0;C<T;++C){var P=s[C],O=c[P];if(O===A)break;var z=v*P;if(!(L<l[z+e+1]||l[z+e+1+t]<E)){for(var I=e+2;I<t;++I)if(f[S+I+t]<l[z+I]||l[z+I+t]<f[S+I])continue t;var D=r(O,A);if(void 0!==D)return D}}}}else{for(var b=M-o,C=T-1;C>=0;--C)if(s[C]===b){for(var I=C+1;I<T;++I)s[I-1]=s[I];break}--T}}}};var n=t("typedarray-pool"),a=t("bit-twiddle"),i=t("./sort"),o=1<<28,s=n.mallocInt32(1024),l=n.mallocInt32(1024),c=n.mallocInt32(1024),u=n.mallocInt32(1024),h=n.mallocInt32(1024),f=n.mallocInt32(1024),p=n.mallocDouble(8192);function d(t,e,r,n){var a=e[n],i=t[r-1];t[a]=i,e[i]=a}function g(t,e,r,n){t[r]=n,e[n]=r}},{"./sort":103,"bit-twiddle":94,"typedarray-pool":543}],105:[function(t,e,r){},{}],106:[function(t,e,r){var n=Object.create||function(t){var e=function(){};return e.prototype=t,new e},a=Object.keys||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.push(r);return r},i=Function.prototype.bind||function(t){var e=this;return function(){return e.apply(t,arguments)}};function o(){this._events&&Object.prototype.hasOwnProperty.call(this,"_events")||(this._events=n(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0}e.exports=o,o.EventEmitter=o,o.prototype._events=void 0,o.prototype._maxListeners=void 0;var s,l=10;try{var c={};Object.defineProperty&&Object.defineProperty(c,"x",{value:0}),s=0===c.x}catch(t){s=!1}function u(t){return void 0===t._maxListeners?o.defaultMaxListeners:t._maxListeners}function h(t,e,r,a){var i,o,s;if("function"!=typeof r)throw new TypeError('"listener" argument must be a function');if((o=t._events)?(o.newListener&&(t.emit("newListener",e,r.listener?r.listener:r),o=t._events),s=o[e]):(o=t._events=n(null),t._eventsCount=0),s){if("function"==typeof s?s=o[e]=a?[r,s]:[s,r]:a?s.unshift(r):s.push(r),!s.warned&&(i=u(t))&&i>0&&s.length>i){s.warned=!0;var l=new Error("Possible EventEmitter memory leak detected. "+s.length+' "'+String(e)+'" listeners added. Use emitter.setMaxListeners() to increase limit.');l.name="MaxListenersExceededWarning",l.emitter=t,l.type=e,l.count=s.length,"object"==typeof console&&console.warn&&console.warn("%s: %s",l.name,l.message)}}else s=o[e]=r,++t._eventsCount;return t}function f(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var t=new Array(arguments.length),e=0;e<t.length;++e)t[e]=arguments[e];this.listener.apply(this.target,t)}}function p(t,e,r){var n={fired:!1,wrapFn:void 0,target:t,type:e,listener:r},a=i.call(f,n);return a.listener=r,n.wrapFn=a,a}function d(t,e,r){var n=t._events;if(!n)return[];var a=n[e];return a?"function"==typeof a?r?[a.listener||a]:[a]:r?function(t){for(var e=new Array(t.length),r=0;r<e.length;++r)e[r]=t[r].listener||t[r];return e}(a):v(a,a.length):[]}function g(t){var e=this._events;if(e){var r=e[t];if("function"==typeof r)return 1;if(r)return r.length}return 0}function v(t,e){for(var r=new Array(e),n=0;n<e;++n)r[n]=t[n];return r}s?Object.defineProperty(o,"defaultMaxListeners",{enumerable:!0,get:function(){return l},set:function(t){if("number"!=typeof t||t<0||t!=t)throw new TypeError('"defaultMaxListeners" must be a positive number');l=t}}):o.defaultMaxListeners=l,o.prototype.setMaxListeners=function(t){if("number"!=typeof t||t<0||isNaN(t))throw new TypeError('"n" argument must be a positive number');return this._maxListeners=t,this},o.prototype.getMaxListeners=function(){return u(this)},o.prototype.emit=function(t){var e,r,n,a,i,o,s="error"===t;if(o=this._events)s=s&&null==o.error;else if(!s)return!1;if(s){if(arguments.length>1&&(e=arguments[1]),e instanceof Error)throw e;var l=new Error('Unhandled "error" event. ('+e+")");throw l.context=e,l}if(!(r=o[t]))return!1;var c="function"==typeof r;switch(n=arguments.length){case 1:!function(t,e,r){if(e)t.call(r);else for(var n=t.length,a=v(t,n),i=0;i<n;++i)a[i].call(r)}(r,c,this);break;case 2:!function(t,e,r,n){if(e)t.call(r,n);else for(var a=t.length,i=v(t,a),o=0;o<a;++o)i[o].call(r,n)}(r,c,this,arguments[1]);break;case 3:!function(t,e,r,n,a){if(e)t.call(r,n,a);else for(var i=t.length,o=v(t,i),s=0;s<i;++s)o[s].call(r,n,a)}(r,c,this,arguments[1],arguments[2]);break;case 4:!function(t,e,r,n,a,i){if(e)t.call(r,n,a,i);else for(var o=t.length,s=v(t,o),l=0;l<o;++l)s[l].call(r,n,a,i)}(r,c,this,arguments[1],arguments[2],arguments[3]);break;default:for(a=new Array(n-1),i=1;i<n;i++)a[i-1]=arguments[i];!function(t,e,r,n){if(e)t.apply(r,n);else for(var a=t.length,i=v(t,a),o=0;o<a;++o)i[o].apply(r,n)}(r,c,this,a)}return!0},o.prototype.addListener=function(t,e){return h(this,t,e,!1)},o.prototype.on=o.prototype.addListener,o.prototype.prependListener=function(t,e){return h(this,t,e,!0)},o.prototype.once=function(t,e){if("function"!=typeof e)throw new TypeError('"listener" argument must be a function');return this.on(t,p(this,t,e)),this},o.prototype.prependOnceListener=function(t,e){if("function"!=typeof e)throw new TypeError('"listener" argument must be a function');return this.prependListener(t,p(this,t,e)),this},o.prototype.removeListener=function(t,e){var r,a,i,o,s;if("function"!=typeof e)throw new TypeError('"listener" argument must be a function');if(!(a=this._events))return this;if(!(r=a[t]))return this;if(r===e||r.listener===e)0==--this._eventsCount?this._events=n(null):(delete a[t],a.removeListener&&this.emit("removeListener",t,r.listener||e));else if("function"!=typeof r){for(i=-1,o=r.length-1;o>=0;o--)if(r[o]===e||r[o].listener===e){s=r[o].listener,i=o;break}if(i<0)return this;0===i?r.shift():function(t,e){for(var r=e,n=r+1,a=t.length;n<a;r+=1,n+=1)t[r]=t[n];t.pop()}(r,i),1===r.length&&(a[t]=r[0]),a.removeListener&&this.emit("removeListener",t,s||e)}return this},o.prototype.removeAllListeners=function(t){var e,r,i;if(!(r=this._events))return this;if(!r.removeListener)return 0===arguments.length?(this._events=n(null),this._eventsCount=0):r[t]&&(0==--this._eventsCount?this._events=n(null):delete r[t]),this;if(0===arguments.length){var o,s=a(r);for(i=0;i<s.length;++i)"removeListener"!==(o=s[i])&&this.removeAllListeners(o);return this.removeAllListeners("removeListener"),this._events=n(null),this._eventsCount=0,this}if("function"==typeof(e=r[t]))this.removeListener(t,e);else if(e)for(i=e.length-1;i>=0;i--)this.removeListener(t,e[i]);return this},o.prototype.listeners=function(t){return d(this,t,!0)},o.prototype.rawListeners=function(t){return d(this,t,!1)},o.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):g.call(t,e)},o.prototype.listenerCount=g,o.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]}},{}],107:[function(t,e,r){(function(e){"use strict";var n=t("base64-js"),a=t("ieee754"),i="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;r.Buffer=e,r.SlowBuffer=function(t){+t!=t&&(t=0);return e.alloc(+t)},r.INSPECT_MAX_BYTES=50;var o=2147483647;function s(t){if(t>o)throw new RangeError('The value "'+t+'" is invalid for option "size"');var r=new Uint8Array(t);return Object.setPrototypeOf(r,e.prototype),r}function e(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return u(t)}return l(t,e,r)}function l(t,r,n){if("string"==typeof t)return function(t,r){"string"==typeof r&&""!==r||(r="utf8");if(!e.isEncoding(r))throw new TypeError("Unknown encoding: "+r);var n=0|p(t,r),a=s(n),i=a.write(t,r);i!==n&&(a=a.slice(0,i));return a}(t,r);if(ArrayBuffer.isView(t))return h(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(j(t,ArrayBuffer)||t&&j(t.buffer,ArrayBuffer))return function(t,r,n){if(r<0||t.byteLength<r)throw new RangeError('"offset" is outside of buffer bounds');if(t.byteLength<r+(n||0))throw new RangeError('"length" is outside of buffer bounds');var a;a=void 0===r&&void 0===n?new Uint8Array(t):void 0===n?new Uint8Array(t,r):new Uint8Array(t,r,n);return Object.setPrototypeOf(a,e.prototype),a}(t,r,n);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');var a=t.valueOf&&t.valueOf();if(null!=a&&a!==t)return e.from(a,r,n);var i=function(t){if(e.isBuffer(t)){var r=0|f(t.length),n=s(r);return 0===n.length?n:(t.copy(n,0,0,r),n)}if(void 0!==t.length)return"number"!=typeof t.length||V(t.length)?s(0):h(t);if("Buffer"===t.type&&Array.isArray(t.data))return h(t.data)}(t);if(i)return i;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return e.from(t[Symbol.toPrimitive]("string"),r,n);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t)}function c(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"')}function u(t){return c(t),s(t<0?0:0|f(t))}function h(t){for(var e=t.length<0?0:0|f(t.length),r=s(e),n=0;n<e;n+=1)r[n]=255&t[n];return r}function f(t){if(t>=o)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+o.toString(16)+" bytes");return 0|t}function p(t,r){if(e.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||j(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var n=t.length,a=arguments.length>2&&!0===arguments[2];if(!a&&0===n)return 0;for(var i=!1;;)switch(r){case"ascii":case"latin1":case"binary":return n;case"utf8":case"utf-8":return F(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*n;case"hex":return n>>>1;case"base64":return B(t).length;default:if(i)return a?-1:F(t).length;r=(""+r).toLowerCase(),i=!0}}function d(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function g(t,r,n,a,i){if(0===t.length)return-1;if("string"==typeof n?(a=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),V(n=+n)&&(n=i?0:t.length-1),n<0&&(n=t.length+n),n>=t.length){if(i)return-1;n=t.length-1}else if(n<0){if(!i)return-1;n=0}if("string"==typeof r&&(r=e.from(r,a)),e.isBuffer(r))return 0===r.length?-1:v(t,r,n,a,i);if("number"==typeof r)return r&=255,"function"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,r,n):Uint8Array.prototype.lastIndexOf.call(t,r,n):v(t,[r],n,a,i);throw new TypeError("val must be string, number or Buffer")}function v(t,e,r,n,a){var i,o=1,s=t.length,l=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;o=2,s/=2,l/=2,r/=2}function c(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}if(a){var u=-1;for(i=r;i<s;i++)if(c(t,i)===c(e,-1===u?0:i-u)){if(-1===u&&(u=i),i-u+1===l)return u*o}else-1!==u&&(i-=i-u),u=-1}else for(r+l>s&&(r=s-l),i=r;i>=0;i--){for(var h=!0,f=0;f<l;f++)if(c(t,i+f)!==c(e,f)){h=!1;break}if(h)return i}return-1}function m(t,e,r,n){r=Number(r)||0;var a=t.length-r;n?(n=Number(n))>a&&(n=a):n=a;var i=e.length;n>i/2&&(n=i/2);for(var o=0;o<n;++o){var s=parseInt(e.substr(2*o,2),16);if(V(s))return o;t[r+o]=s}return o}function y(t,e,r,n){return N(F(e,t.length-r),t,r,n)}function x(t,e,r,n){return N(function(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}(e),t,r,n)}function b(t,e,r,n){return x(t,e,r,n)}function _(t,e,r,n){return N(B(e),t,r,n)}function w(t,e,r,n){return N(function(t,e){for(var r,n,a,i=[],o=0;o<t.length&&!((e-=2)<0);++o)r=t.charCodeAt(o),n=r>>8,a=r%256,i.push(a),i.push(n);return i}(e,t.length-r),t,r,n)}function k(t,e,r){return 0===e&&r===t.length?n.fromByteArray(t):n.fromByteArray(t.slice(e,r))}function T(t,e,r){r=Math.min(t.length,r);for(var n=[],a=e;a<r;){var i,o,s,l,c=t[a],u=null,h=c>239?4:c>223?3:c>191?2:1;if(a+h<=r)switch(h){case 1:c<128&&(u=c);break;case 2:128==(192&(i=t[a+1]))&&(l=(31&c)<<6|63&i)>127&&(u=l);break;case 3:i=t[a+1],o=t[a+2],128==(192&i)&&128==(192&o)&&(l=(15&c)<<12|(63&i)<<6|63&o)>2047&&(l<55296||l>57343)&&(u=l);break;case 4:i=t[a+1],o=t[a+2],s=t[a+3],128==(192&i)&&128==(192&o)&&128==(192&s)&&(l=(15&c)<<18|(63&i)<<12|(63&o)<<6|63&s)>65535&&l<1114112&&(u=l)}null===u?(u=65533,h=1):u>65535&&(u-=65536,n.push(u>>>10&1023|55296),u=56320|1023&u),n.push(u),a+=h}return function(t){var e=t.length;if(e<=M)return String.fromCharCode.apply(String,t);var r="",n=0;for(;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=M));return r}(n)}r.kMaxLength=o,e.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1),e={foo:function(){return 42}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo()}catch(t){return!1}}(),e.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(e.prototype,"parent",{enumerable:!0,get:function(){if(e.isBuffer(this))return this.buffer}}),Object.defineProperty(e.prototype,"offset",{enumerable:!0,get:function(){if(e.isBuffer(this))return this.byteOffset}}),"undefined"!=typeof Symbol&&null!=Symbol.species&&e[Symbol.species]===e&&Object.defineProperty(e,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),e.poolSize=8192,e.from=function(t,e,r){return l(t,e,r)},Object.setPrototypeOf(e.prototype,Uint8Array.prototype),Object.setPrototypeOf(e,Uint8Array),e.alloc=function(t,e,r){return function(t,e,r){return c(t),t<=0?s(t):void 0!==e?"string"==typeof r?s(t).fill(e,r):s(t).fill(e):s(t)}(t,e,r)},e.allocUnsafe=function(t){return u(t)},e.allocUnsafeSlow=function(t){return u(t)},e.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==e.prototype},e.compare=function(t,r){if(j(t,Uint8Array)&&(t=e.from(t,t.offset,t.byteLength)),j(r,Uint8Array)&&(r=e.from(r,r.offset,r.byteLength)),!e.isBuffer(t)||!e.isBuffer(r))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===r)return 0;for(var n=t.length,a=r.length,i=0,o=Math.min(n,a);i<o;++i)if(t[i]!==r[i]){n=t[i],a=r[i];break}return n<a?-1:a<n?1:0},e.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},e.concat=function(t,r){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return e.alloc(0);var n;if(void 0===r)for(r=0,n=0;n<t.length;++n)r+=t[n].length;var a=e.allocUnsafe(r),i=0;for(n=0;n<t.length;++n){var o=t[n];if(j(o,Uint8Array)&&(o=e.from(o)),!e.isBuffer(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(a,i),i+=o.length}return a},e.byteLength=p,e.prototype._isBuffer=!0,e.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)d(this,e,e+1);return this},e.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)d(this,e,e+3),d(this,e+1,e+2);return this},e.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)d(this,e,e+7),d(this,e+1,e+6),d(this,e+2,e+5),d(this,e+3,e+4);return this},e.prototype.toString=function(){var t=this.length;return 0===t?"":0===arguments.length?T(this,0,t):function(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(e>>>=0))return"";for(t||(t="utf8");;)switch(t){case"hex":return E(this,e,r);case"utf8":case"utf-8":return T(this,e,r);case"ascii":return A(this,e,r);case"latin1":case"binary":return S(this,e,r);case"base64":return k(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return L(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}.apply(this,arguments)},e.prototype.toLocaleString=e.prototype.toString,e.prototype.equals=function(t){if(!e.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===e.compare(this,t)},e.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return t=this.toString("hex",0,e).replace(/(.{2})/g,"$1 ").trim(),this.length>e&&(t+=" ... "),"<Buffer "+t+">"},i&&(e.prototype[i]=e.prototype.inspect),e.prototype.compare=function(t,r,n,a,i){if(j(t,Uint8Array)&&(t=e.from(t,t.offset,t.byteLength)),!e.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===r&&(r=0),void 0===n&&(n=t?t.length:0),void 0===a&&(a=0),void 0===i&&(i=this.length),r<0||n>t.length||a<0||i>this.length)throw new RangeError("out of range index");if(a>=i&&r>=n)return 0;if(a>=i)return-1;if(r>=n)return 1;if(this===t)return 0;for(var o=(i>>>=0)-(a>>>=0),s=(n>>>=0)-(r>>>=0),l=Math.min(o,s),c=this.slice(a,i),u=t.slice(r,n),h=0;h<l;++h)if(c[h]!==u[h]){o=c[h],s=u[h];break}return o<s?-1:s<o?1:0},e.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},e.prototype.indexOf=function(t,e,r){return g(this,t,e,r,!0)},e.prototype.lastIndexOf=function(t,e,r){return g(this,t,e,r,!1)},e.prototype.write=function(t,e,r,n){if(void 0===e)n="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var a=this.length-e;if((void 0===r||r>a)&&(r=a),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i=!1;;)switch(n){case"hex":return m(this,t,e,r);case"utf8":case"utf-8":return y(this,t,e,r);case"ascii":return x(this,t,e,r);case"latin1":case"binary":return b(this,t,e,r);case"base64":return _(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return w(this,t,e,r);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},e.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var M=4096;function A(t,e,r){var n="";r=Math.min(t.length,r);for(var a=e;a<r;++a)n+=String.fromCharCode(127&t[a]);return n}function S(t,e,r){var n="";r=Math.min(t.length,r);for(var a=e;a<r;++a)n+=String.fromCharCode(t[a]);return n}function E(t,e,r){var n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);for(var a="",i=e;i<r;++i)a+=R(t[i]);return a}function L(t,e,r){for(var n=t.slice(e,r),a="",i=0;i<n.length;i+=2)a+=String.fromCharCode(n[i]+256*n[i+1]);return a}function C(t,e,r){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>r)throw new RangeError("Trying to access beyond buffer length")}function P(t,r,n,a,i,o){if(!e.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>i||r<o)throw new RangeError('"value" argument is out of bounds');if(n+a>t.length)throw new RangeError("Index out of range")}function O(t,e,r,n,a,i){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function z(t,e,r,n,i){return e=+e,r>>>=0,i||O(t,0,r,4),a.write(t,e,r,n,23,4),r+4}function I(t,e,r,n,i){return e=+e,r>>>=0,i||O(t,0,r,8),a.write(t,e,r,n,52,8),r+8}e.prototype.slice=function(t,r){var n=this.length;(t=~~t)<0?(t+=n)<0&&(t=0):t>n&&(t=n),(r=void 0===r?n:~~r)<0?(r+=n)<0&&(r=0):r>n&&(r=n),r<t&&(r=t);var a=this.subarray(t,r);return Object.setPrototypeOf(a,e.prototype),a},e.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||C(t,e,this.length);for(var n=this[t],a=1,i=0;++i<e&&(a*=256);)n+=this[t+i]*a;return n},e.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||C(t,e,this.length);for(var n=this[t+--e],a=1;e>0&&(a*=256);)n+=this[t+--e]*a;return n},e.prototype.readUInt8=function(t,e){return t>>>=0,e||C(t,1,this.length),this[t]},e.prototype.readUInt16LE=function(t,e){return t>>>=0,e||C(t,2,this.length),this[t]|this[t+1]<<8},e.prototype.readUInt16BE=function(t,e){return t>>>=0,e||C(t,2,this.length),this[t]<<8|this[t+1]},e.prototype.readUInt32LE=function(t,e){return t>>>=0,e||C(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},e.prototype.readUInt32BE=function(t,e){return t>>>=0,e||C(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},e.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||C(t,e,this.length);for(var n=this[t],a=1,i=0;++i<e&&(a*=256);)n+=this[t+i]*a;return n>=(a*=128)&&(n-=Math.pow(2,8*e)),n},e.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||C(t,e,this.length);for(var n=e,a=1,i=this[t+--n];n>0&&(a*=256);)i+=this[t+--n]*a;return i>=(a*=128)&&(i-=Math.pow(2,8*e)),i},e.prototype.readInt8=function(t,e){return t>>>=0,e||C(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},e.prototype.readInt16LE=function(t,e){t>>>=0,e||C(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},e.prototype.readInt16BE=function(t,e){t>>>=0,e||C(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},e.prototype.readInt32LE=function(t,e){return t>>>=0,e||C(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},e.prototype.readInt32BE=function(t,e){return t>>>=0,e||C(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},e.prototype.readFloatLE=function(t,e){return t>>>=0,e||C(t,4,this.length),a.read(this,t,!0,23,4)},e.prototype.readFloatBE=function(t,e){return t>>>=0,e||C(t,4,this.length),a.read(this,t,!1,23,4)},e.prototype.readDoubleLE=function(t,e){return t>>>=0,e||C(t,8,this.length),a.read(this,t,!0,52,8)},e.prototype.readDoubleBE=function(t,e){return t>>>=0,e||C(t,8,this.length),a.read(this,t,!1,52,8)},e.prototype.writeUIntLE=function(t,e,r,n){(t=+t,e>>>=0,r>>>=0,n)||P(this,t,e,r,Math.pow(2,8*r)-1,0);var a=1,i=0;for(this[e]=255&t;++i<r&&(a*=256);)this[e+i]=t/a&255;return e+r},e.prototype.writeUIntBE=function(t,e,r,n){(t=+t,e>>>=0,r>>>=0,n)||P(this,t,e,r,Math.pow(2,8*r)-1,0);var a=r-1,i=1;for(this[e+a]=255&t;--a>=0&&(i*=256);)this[e+a]=t/i&255;return e+r},e.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,1,255,0),this[e]=255&t,e+1},e.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},e.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},e.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},e.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},e.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var a=Math.pow(2,8*r-1);P(this,t,e,r,a-1,-a)}var i=0,o=1,s=0;for(this[e]=255&t;++i<r&&(o*=256);)t<0&&0===s&&0!==this[e+i-1]&&(s=1),this[e+i]=(t/o>>0)-s&255;return e+r},e.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var a=Math.pow(2,8*r-1);P(this,t,e,r,a-1,-a)}var i=r-1,o=1,s=0;for(this[e+i]=255&t;--i>=0&&(o*=256);)t<0&&0===s&&0!==this[e+i+1]&&(s=1),this[e+i]=(t/o>>0)-s&255;return e+r},e.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},e.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},e.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},e.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},e.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},e.prototype.writeFloatLE=function(t,e,r){return z(this,t,e,!0,r)},e.prototype.writeFloatBE=function(t,e,r){return z(this,t,e,!1,r)},e.prototype.writeDoubleLE=function(t,e,r){return I(this,t,e,!0,r)},e.prototype.writeDoubleBE=function(t,e,r){return I(this,t,e,!1,r)},e.prototype.copy=function(t,r,n,a){if(!e.isBuffer(t))throw new TypeError("argument should be a Buffer");if(n||(n=0),a||0===a||(a=this.length),r>=t.length&&(r=t.length),r||(r=0),a>0&&a<n&&(a=n),a===n)return 0;if(0===t.length||0===this.length)return 0;if(r<0)throw new RangeError("targetStart out of bounds");if(n<0||n>=this.length)throw new RangeError("Index out of range");if(a<0)throw new RangeError("sourceEnd out of bounds");a>this.length&&(a=this.length),t.length-r<a-n&&(a=t.length-r+n);var i=a-n;if(this===t&&"function"==typeof Uint8Array.prototype.copyWithin)this.copyWithin(r,n,a);else if(this===t&&n<r&&r<a)for(var o=i-1;o>=0;--o)t[o+r]=this[o+n];else Uint8Array.prototype.set.call(t,this.subarray(n,a),r);return i},e.prototype.fill=function(t,r,n,a){if("string"==typeof t){if("string"==typeof r?(a=r,r=0,n=this.length):"string"==typeof n&&(a=n,n=this.length),void 0!==a&&"string"!=typeof a)throw new TypeError("encoding must be a string");if("string"==typeof a&&!e.isEncoding(a))throw new TypeError("Unknown encoding: "+a);if(1===t.length){var i=t.charCodeAt(0);("utf8"===a&&i<128||"latin1"===a)&&(t=i)}}else"number"==typeof t?t&=255:"boolean"==typeof t&&(t=Number(t));if(r<0||this.length<r||this.length<n)throw new RangeError("Out of range index");if(n<=r)return this;var o;if(r>>>=0,n=void 0===n?this.length:n>>>0,t||(t=0),"number"==typeof t)for(o=r;o<n;++o)this[o]=t;else{var s=e.isBuffer(t)?t:e.from(t,a),l=s.length;if(0===l)throw new TypeError('The value "'+t+'" is invalid for argument "value"');for(o=0;o<n-r;++o)this[o+r]=s[o%l]}return this};var D=/[^+/0-9A-Za-z-_]/g;function R(t){return t<16?"0"+t.toString(16):t.toString(16)}function F(t,e){var r;e=e||1/0;for(var n=t.length,a=null,i=[],o=0;o<n;++o){if((r=t.charCodeAt(o))>55295&&r<57344){if(!a){if(r>56319){(e-=3)>-1&&i.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&i.push(239,191,189);continue}a=r;continue}if(r<56320){(e-=3)>-1&&i.push(239,191,189),a=r;continue}r=65536+(a-55296<<10|r-56320)}else a&&(e-=3)>-1&&i.push(239,191,189);if(a=null,r<128){if((e-=1)<0)break;i.push(r)}else if(r<2048){if((e-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function B(t){return n.toByteArray(function(t){if((t=(t=t.split("=")[0]).trim().replace(D,"")).length<2)return"";for(;t.length%4!=0;)t+="=";return t}(t))}function N(t,e,r,n){for(var a=0;a<n&&!(a+r>=e.length||a>=t.length);++a)e[a+r]=t[a];return a}function j(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name}function V(t){return t!=t}}).call(this,t("buffer").Buffer)},{"base64-js":76,buffer:107,ieee754:413}],108:[function(t,e,r){"use strict";var n=t("./lib/monotone"),a=t("./lib/triangulation"),i=t("./lib/delaunay"),o=t("./lib/filter");function s(t){return[Math.min(t[0],t[1]),Math.max(t[0],t[1])]}function l(t,e){return t[0]-e[0]||t[1]-e[1]}function c(t,e,r){return e in t?t[e]:r}e.exports=function(t,e,r){Array.isArray(e)?(r=r||{},e=e||[]):(r=e||{},e=[]);var u=!!c(r,"delaunay",!0),h=!!c(r,"interior",!0),f=!!c(r,"exterior",!0),p=!!c(r,"infinity",!1);if(!h&&!f||0===t.length)return[];var d=n(t,e);if(u||h!==f||p){for(var g=a(t.length,function(t){return t.map(s).sort(l)}(e)),v=0;v<d.length;++v){var m=d[v];g.addTriangle(m[0],m[1],m[2])}return u&&i(t,g),f?h?p?o(g,0,p):g.cells():o(g,1,p):o(g,-1)}return d}},{"./lib/delaunay":109,"./lib/filter":110,"./lib/monotone":111,"./lib/triangulation":112}],109:[function(t,e,r){"use strict";var n=t("robust-in-sphere")[4];t("binary-search-bounds");function a(t,e,r,a,i,o){var s=e.opposite(a,i);if(!(s<0)){if(i<a){var l=a;a=i,i=l,l=o,o=s,s=l}e.isConstraint(a,i)||n(t[a],t[i],t[o],t[s])<0&&r.push(a,i)}}e.exports=function(t,e){for(var r=[],i=t.length,o=e.stars,s=0;s<i;++s)for(var l=o[s],c=1;c<l.length;c+=2){var u=l[c];if(!(u<s)&&!e.isConstraint(s,u)){for(var h=l[c-1],f=-1,p=1;p<l.length;p+=2)if(l[p-1]===u){f=l[p];break}f<0||n(t[s],t[u],t[h],t[f])<0&&r.push(s,u)}}for(;r.length>0;){for(var u=r.pop(),s=r.pop(),h=-1,f=-1,l=o[s],d=1;d<l.length;d+=2){var g=l[d-1],v=l[d];g===u?f=v:v===u&&(h=g)}h<0||f<0||(n(t[s],t[u],t[h],t[f])>=0||(e.flip(s,u),a(t,e,r,h,s,f),a(t,e,r,s,f,h),a(t,e,r,f,u,h),a(t,e,r,u,h,f)))}}},{"binary-search-bounds":113,"robust-in-sphere":506}],110:[function(t,e,r){"use strict";var n,a=t("binary-search-bounds");function i(t,e,r,n,a,i,o){this.cells=t,this.neighbor=e,this.flags=n,this.constraint=r,this.active=a,this.next=i,this.boundary=o}function o(t,e){return t[0]-e[0]||t[1]-e[1]||t[2]-e[2]}e.exports=function(t,e,r){var n=function(t,e){for(var r=t.cells(),n=r.length,a=0;a<n;++a){var s=r[a],l=s[0],c=s[1],u=s[2];c<u?c<l&&(s[0]=c,s[1]=u,s[2]=l):u<l&&(s[0]=u,s[1]=l,s[2]=c)}r.sort(o);for(var h=new Array(n),a=0;a<h.length;++a)h[a]=0;var f=[],p=[],d=new Array(3*n),g=new Array(3*n),v=null;e&&(v=[]);for(var m=new i(r,d,g,h,f,p,v),a=0;a<n;++a)for(var s=r[a],y=0;y<3;++y){var l=s[y],c=s[(y+1)%3],x=d[3*a+y]=m.locate(c,l,t.opposite(c,l)),b=g[3*a+y]=t.isConstraint(l,c);x<0&&(b?p.push(a):(f.push(a),h[a]=1),e&&v.push([c,l,-1]))}return m}(t,r);if(0===e)return r?n.cells.concat(n.boundary):n.cells;var a=1,s=n.active,l=n.next,c=n.flags,u=n.cells,h=n.constraint,f=n.neighbor;for(;s.length>0||l.length>0;){for(;s.length>0;){var p=s.pop();if(c[p]!==-a){c[p]=a;u[p];for(var d=0;d<3;++d){var g=f[3*p+d];g>=0&&0===c[g]&&(h[3*p+d]?l.push(g):(s.push(g),c[g]=a))}}}var v=l;l=s,s=v,l.length=0,a=-a}var m=function(t,e,r){for(var n=0,a=0;a<t.length;++a)e[a]===r&&(t[n++]=t[a]);return t.length=n,t}(u,c,e);if(r)return m.concat(n.boundary);return m},i.prototype.locate=(n=[0,0,0],function(t,e,r){var i=t,s=e,l=r;return e<r?e<t&&(i=e,s=r,l=t):r<t&&(i=r,s=t,l=e),i<0?-1:(n[0]=i,n[1]=s,n[2]=l,a.eq(this.cells,n,o))})},{"binary-search-bounds":113}],111:[function(t,e,r){"use strict";var n=t("binary-search-bounds"),a=t("robust-orientation")[3],i=0,o=1,s=2;function l(t,e,r,n,a){this.a=t,this.b=e,this.idx=r,this.lowerIds=n,this.upperIds=a}function c(t,e,r,n){this.a=t,this.b=e,this.type=r,this.idx=n}function u(t,e){var r=t.a[0]-e.a[0]||t.a[1]-e.a[1]||t.type-e.type;return r||(t.type!==i&&(r=a(t.a,t.b,e.b))?r:t.idx-e.idx)}function h(t,e){return a(t.a,t.b,e)}function f(t,e,r,i,o){for(var s=n.lt(e,i,h),l=n.gt(e,i,h),c=s;c<l;++c){for(var u=e[c],f=u.lowerIds,p=f.length;p>1&&a(r[f[p-2]],r[f[p-1]],i)>0;)t.push([f[p-1],f[p-2],o]),p-=1;f.length=p,f.push(o);var d=u.upperIds;for(p=d.length;p>1&&a(r[d[p-2]],r[d[p-1]],i)<0;)t.push([d[p-2],d[p-1],o]),p-=1;d.length=p,d.push(o)}}function p(t,e){var r;return(r=t.a[0]<e.a[0]?a(t.a,t.b,e.a):a(e.b,e.a,t.a))?r:(r=e.b[0]<t.b[0]?a(t.a,t.b,e.b):a(e.b,e.a,t.b))||t.idx-e.idx}function d(t,e,r){var a=n.le(t,r,p),i=t[a],o=i.upperIds,s=o[o.length-1];i.upperIds=[s],t.splice(a+1,0,new l(r.a,r.b,r.idx,[s],o))}function g(t,e,r){var a=r.a;r.a=r.b,r.b=a;var i=n.eq(t,r,p),o=t[i];t[i-1].upperIds=o.upperIds,t.splice(i,1)}e.exports=function(t,e){for(var r=t.length,n=e.length,a=[],h=0;h<r;++h)a.push(new c(t[h],null,i,h));for(var h=0;h<n;++h){var p=e[h],v=t[p[0]],m=t[p[1]];v[0]<m[0]?a.push(new c(v,m,s,h),new c(m,v,o,h)):v[0]>m[0]&&a.push(new c(m,v,s,h),new c(v,m,o,h))}a.sort(u);for(var y=a[0].a[0]-(1+Math.abs(a[0].a[0]))*Math.pow(2,-52),x=[new l([y,1],[y,0],-1,[],[],[],[])],b=[],h=0,_=a.length;h<_;++h){var w=a[h],k=w.type;k===i?f(b,x,t,w.a,w.idx):k===s?d(x,t,w):g(x,t,w)}return b}},{"binary-search-bounds":113,"robust-orientation":508}],112:[function(t,e,r){"use strict";var n=t("binary-search-bounds");function a(t,e){this.stars=t,this.edges=e}e.exports=function(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=[];return new a(r,e)};var i=a.prototype;function o(t,e,r){for(var n=1,a=t.length;n<a;n+=2)if(t[n-1]===e&&t[n]===r)return t[n-1]=t[a-2],t[n]=t[a-1],void(t.length=a-2)}i.isConstraint=function(){var t=[0,0];function e(t,e){return t[0]-e[0]||t[1]-e[1]}return function(r,a){return t[0]=Math.min(r,a),t[1]=Math.max(r,a),n.eq(this.edges,t,e)>=0}}(),i.removeTriangle=function(t,e,r){var n=this.stars;o(n[t],e,r),o(n[e],r,t),o(n[r],t,e)},i.addTriangle=function(t,e,r){var n=this.stars;n[t].push(e,r),n[e].push(r,t),n[r].push(t,e)},i.opposite=function(t,e){for(var r=this.stars[e],n=1,a=r.length;n<a;n+=2)if(r[n]===t)return r[n-1];return-1},i.flip=function(t,e){var r=this.opposite(t,e),n=this.opposite(e,t);this.removeTriangle(t,e,r),this.removeTriangle(e,t,n),this.addTriangle(t,n,r),this.addTriangle(e,r,n)},i.edges=function(){for(var t=this.stars,e=[],r=0,n=t.length;r<n;++r)for(var a=t[r],i=0,o=a.length;i<o;i+=2)e.push([a[i],a[i+1]]);return e},i.cells=function(){for(var t=this.stars,e=[],r=0,n=t.length;r<n;++r)for(var a=t[r],i=0,o=a.length;i<o;i+=2){var s=a[i],l=a[i+1];r<Math.min(s,l)&&e.push([r,s,l])}return e}},{"binary-search-bounds":113}],113:[function(t,e,r){"use strict";function n(t,e,r,n,a){var i=["function ",t,"(a,l,h,",n.join(","),"){",a?"":"var i=",r?"l-1":"h+1",";while(l<=h){var m=(l+h)>>>1,x=a[m]"];return a?e.indexOf("c")<0?i.push(";if(x===y){return m}else if(x<=y){"):i.push(";var p=c(x,y);if(p===0){return m}else if(p<=0){"):i.push(";if(",e,"){i=m;"),r?i.push("l=m+1}else{h=m-1}"):i.push("h=m-1}else{l=m+1}"),i.push("}"),a?i.push("return -1};"):i.push("return i};"),i.join("")}function a(t,e,r,a){return new Function([n("A","x"+t+"y",e,["y"],a),n("P","c(x,y)"+t+"0",e,["y","c"],a),"function dispatchBsearch",r,"(a,y,c,l,h){if(typeof(c)==='function'){return P(a,(l===void 0)?0:l|0,(h===void 0)?a.length-1:h|0,y,c)}else{return A(a,(c===void 0)?0:c|0,(l===void 0)?a.length-1:l|0,y)}}return dispatchBsearch",r].join(""))()}e.exports={ge:a(">=",!1,"GE"),gt:a(">",!1,"GT"),lt:a("<",!0,"LT"),le:a("<=",!0,"LE"),eq:a("-",!0,"EQ",!0)}},{}],114:[function(t,e,r){"use strict";e.exports=function(t){for(var e=1,r=1;r<t.length;++r)for(var n=0;n<r;++n)if(t[r]<t[n])e=-e;else if(t[n]===t[r])return 0;return e}},{}],115:[function(t,e,r){"use strict";var n=t("dup"),a=t("robust-linear-solve");function i(t,e){for(var r=0,n=t.length,a=0;a<n;++a)r+=t[a]*e[a];return r}function o(t){var e=t.length;if(0===e)return[];t[0].length;var r=n([t.length+1,t.length+1],1),o=n([t.length+1],1);r[e][e]=0;for(var s=0;s<e;++s){for(var l=0;l<=s;++l)r[l][s]=r[s][l]=2*i(t[s],t[l]);o[s]=i(t[s],t[s])}var c=a(r,o),u=0,h=c[e+1];for(s=0;s<h.length;++s)u+=h[s];var f=new Array(e);for(s=0;s<e;++s){h=c[s];var p=0;for(l=0;l<h.length;++l)p+=h[l];f[s]=p/u}return f}function s(t){if(0===t.length)return[];for(var e=t[0].length,r=n([e]),a=o(t),i=0;i<t.length;++i)for(var s=0;s<e;++s)r[s]+=t[i][s]*a[i];return r}s.barycenetric=o,e.exports=s},{dup:172,"robust-linear-solve":507}],116:[function(t,e,r){e.exports=function(t){for(var e=n(t),r=0,a=0;a<t.length;++a)for(var i=t[a],o=0;o<e.length;++o)r+=Math.pow(i[o]-e[o],2);return Math.sqrt(r/t.length)};var n=t("circumcenter")},{circumcenter:115}],117:[function(t,e,r){e.exports=function(t,e,r){return e<r?t<e?e:t>r?r:t:t<r?r:t>e?e:t}},{}],118:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n;if(r){n=e;for(var a=new Array(e.length),i=0;i<e.length;++i){var o=e[i];a[i]=[o[0],o[1],r[i]]}e=a}var s=function(t,e,r){var n=d(t,[],p(t));return m(e,n,r),!!n}(t,e,!!r);for(;y(t,e,!!r);)s=!0;if(r&&s){n.length=0,r.length=0;for(var i=0;i<e.length;++i){var o=e[i];n.push([o[0],o[1]]),r.push(o[2])}}return s};var n=t("union-find"),a=t("box-intersect"),i=t("robust-segment-intersect"),o=t("big-rat"),s=t("big-rat/cmp"),l=t("big-rat/to-float"),c=t("rat-vec"),u=t("nextafter"),h=t("./lib/rat-seg-intersect");function f(t){var e=l(t);return[u(e,-1/0),u(e,1/0)]}function p(t){for(var e=new Array(t.length),r=0;r<t.length;++r){var n=t[r];e[r]=[u(n[0],-1/0),u(n[1],-1/0),u(n[0],1/0),u(n[1],1/0)]}return e}function d(t,e,r){for(var i=e.length,o=new n(i),s=[],l=0;l<e.length;++l){var c=e[l],h=f(c[0]),p=f(c[1]);s.push([u(h[0],-1/0),u(p[0],-1/0),u(h[1],1/0),u(p[1],1/0)])}a(s,function(t,e){o.link(t,e)});var d=!0,g=new Array(i);for(l=0;l<i;++l){(m=o.find(l))!==l&&(d=!1,t[m]=[Math.min(t[l][0],t[m][0]),Math.min(t[l][1],t[m][1])])}if(d)return null;var v=0;for(l=0;l<i;++l){var m;(m=o.find(l))===l?(g[l]=v,t[v++]=t[l]):g[l]=-1}t.length=v;for(l=0;l<i;++l)g[l]<0&&(g[l]=g[o.find(l)]);return g}function g(t,e){return t[0]-e[0]||t[1]-e[1]}function v(t,e){var r=t[0]-e[0]||t[1]-e[1];return r||(t[2]<e[2]?-1:t[2]>e[2]?1:0)}function m(t,e,r){if(0!==t.length){if(e)for(var n=0;n<t.length;++n){var a=e[(o=t[n])[0]],i=e[o[1]];o[0]=Math.min(a,i),o[1]=Math.max(a,i)}else for(n=0;n<t.length;++n){var o;a=(o=t[n])[0],i=o[1];o[0]=Math.min(a,i),o[1]=Math.max(a,i)}r?t.sort(v):t.sort(g);var s=1;for(n=1;n<t.length;++n){var l=t[n-1],c=t[n];(c[0]!==l[0]||c[1]!==l[1]||r&&c[2]!==l[2])&&(t[s++]=c)}t.length=s}}function y(t,e,r){var n=function(t,e){for(var r=new Array(e.length),n=0;n<e.length;++n){var a=e[n],i=t[a[0]],o=t[a[1]];r[n]=[u(Math.min(i[0],o[0]),-1/0),u(Math.min(i[1],o[1]),-1/0),u(Math.max(i[0],o[0]),1/0),u(Math.max(i[1],o[1]),1/0)]}return r}(t,e),f=function(t,e,r){var n=[];return a(r,function(r,a){var o=e[r],s=e[a];if(o[0]!==s[0]&&o[0]!==s[1]&&o[1]!==s[0]&&o[1]!==s[1]){var l=t[o[0]],c=t[o[1]],u=t[s[0]],h=t[s[1]];i(l,c,u,h)&&n.push([r,a])}}),n}(t,e,n),g=p(t),v=function(t,e,r,n){var o=[];return a(r,n,function(r,n){var a=e[r];if(a[0]!==n&&a[1]!==n){var s=t[n],l=t[a[0]],c=t[a[1]];i(l,c,s,s)&&o.push([r,n])}}),o}(t,e,n,g),y=d(t,function(t,e,r,n,a){var i,u,f=t.map(function(t){return[o(t[0]),o(t[1])]});for(i=0;i<r.length;++i){var p=r[i];u=p[0];var d=p[1],g=e[u],v=e[d],m=h(c(t[g[0]]),c(t[g[1]]),c(t[v[0]]),c(t[v[1]]));if(m){var y=t.length;t.push([l(m[0]),l(m[1])]),f.push(m),n.push([u,y],[d,y])}}for(n.sort(function(t,e){if(t[0]!==e[0])return t[0]-e[0];var r=f[t[1]],n=f[e[1]];return s(r[0],n[0])||s(r[1],n[1])}),i=n.length-1;i>=0;--i){var x=e[u=(S=n[i])[0]],b=x[0],_=x[1],w=t[b],k=t[_];if((w[0]-k[0]||w[1]-k[1])<0){var T=b;b=_,_=T}x[0]=b;var M,A=x[1]=S[1];for(a&&(M=x[2]);i>0&&n[i-1][0]===u;){var S,E=(S=n[--i])[1];a?e.push([A,E,M]):e.push([A,E]),A=E}a?e.push([A,_,M]):e.push([A,_])}return f}(t,e,f,v,r));return m(e,y,r),!!y||(f.length>0||v.length>0)}},{"./lib/rat-seg-intersect":119,"big-rat":80,"big-rat/cmp":78,"big-rat/to-float":92,"box-intersect":98,nextafter:452,"rat-vec":487,"robust-segment-intersect":511,"union-find":544}],119:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){var i=s(e,t),h=s(n,r),f=u(i,h);if(0===o(f))return null;var p=s(t,r),d=u(h,p),g=a(d,f),v=c(i,g);return l(t,v)};var n=t("big-rat/mul"),a=t("big-rat/div"),i=t("big-rat/sub"),o=t("big-rat/sign"),s=t("rat-vec/sub"),l=t("rat-vec/add"),c=t("rat-vec/muls");function u(t,e){return i(n(t[0],e[1]),n(t[1],e[0]))}},{"big-rat/div":79,"big-rat/mul":89,"big-rat/sign":90,"big-rat/sub":91,"rat-vec/add":486,"rat-vec/muls":488,"rat-vec/sub":489}],120:[function(t,e,r){"use strict";var n=t("clamp");function a(t,e){null==e&&(e=!0);var r=t[0],a=t[1],i=t[2],o=t[3];return null==o&&(o=e?1:255),e&&(r*=255,a*=255,i*=255,o*=255),16777216*(r=255&n(r,0,255))+((a=255&n(a,0,255))<<16)+((i=255&n(i,0,255))<<8)+(o=255&n(o,0,255))}e.exports=a,e.exports.to=a,e.exports.from=function(t,e){var r=(t=+t)>>>24,n=(16711680&t)>>>16,a=(65280&t)>>>8,i=255&t;return!1===e?[r,n,a,i]:[r/255,n/255,a/255,i/255]}},{clamp:117}],121:[function(t,e,r){"use strict";e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],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],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},{}],122:[function(t,e,r){"use strict";var n=t("color-rgba"),a=t("clamp"),i=t("dtype");e.exports=function(t,e){"float"!==e&&e||(e="array"),"uint"===e&&(e="uint8"),"uint_clamped"===e&&(e="uint8_clamped");var r=new(i(e))(4),o="uint8"!==e&&"uint8_clamped"!==e;return t.length&&"string"!=typeof t||((t=n(t))[0]/=255,t[1]/=255,t[2]/=255),function(t){return t instanceof Uint8Array||t instanceof Uint8ClampedArray||!!(Array.isArray(t)&&(t[0]>1||0===t[0])&&(t[1]>1||0===t[1])&&(t[2]>1||0===t[2])&&(!t[3]||t[3]>1))}(t)?(r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=null!=t[3]?t[3]:255,o&&(r[0]/=255,r[1]/=255,r[2]/=255,r[3]/=255),r):(o?(r[0]=t[0],r[1]=t[1],r[2]=t[2],r[3]=null!=t[3]?t[3]:1):(r[0]=a(Math.floor(255*t[0]),0,255),r[1]=a(Math.floor(255*t[1]),0,255),r[2]=a(Math.floor(255*t[2]),0,255),r[3]=null==t[3]?255:a(Math.floor(255*t[3]),0,255)),r)}},{clamp:117,"color-rgba":124,dtype:171}],123:[function(t,e,r){(function(r){"use strict";var n=t("color-name"),a=t("is-plain-obj"),i=t("defined");e.exports=function(t){var e,s,l=[],c=1;if("string"==typeof t)if(n[t])l=n[t].slice(),s="rgb";else if("transparent"===t)c=0,s="rgb",l=[0,0,0];else if(/^#[A-Fa-f0-9]+$/.test(t)){var u=t.slice(1),h=u.length,f=h<=4;c=1,f?(l=[parseInt(u[0]+u[0],16),parseInt(u[1]+u[1],16),parseInt(u[2]+u[2],16)],4===h&&(c=parseInt(u[3]+u[3],16)/255)):(l=[parseInt(u[0]+u[1],16),parseInt(u[2]+u[3],16),parseInt(u[4]+u[5],16)],8===h&&(c=parseInt(u[6]+u[7],16)/255)),l[0]||(l[0]=0),l[1]||(l[1]=0),l[2]||(l[2]=0),s="rgb"}else if(e=/^((?:rgb|hs[lvb]|hwb|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms)a?)\s*\(([^\)]*)\)/.exec(t)){var p=e[1],d="rgb"===p,u=p.replace(/a$/,"");s=u;var h="cmyk"===u?4:"gray"===u?1:3;l=e[2].trim().split(/\s*,\s*/).map(function(t,e){if(/%$/.test(t))return e===h?parseFloat(t)/100:"rgb"===u?255*parseFloat(t)/100:parseFloat(t);if("h"===u[e]){if(/deg$/.test(t))return parseFloat(t);if(void 0!==o[t])return o[t]}return parseFloat(t)}),p===u&&l.push(1),c=d?1:void 0===l[h]?1:l[h],l=l.slice(0,h)}else t.length>10&&/[0-9](?:\s|\/)/.test(t)&&(l=t.match(/([0-9]+)/g).map(function(t){return parseFloat(t)}),s=t.match(/([a-z])/gi).join("").toLowerCase());else if(isNaN(t))if(a(t)){var g=i(t.r,t.red,t.R,null);null!==g?(s="rgb",l=[g,i(t.g,t.green,t.G),i(t.b,t.blue,t.B)]):(s="hsl",l=[i(t.h,t.hue,t.H),i(t.s,t.saturation,t.S),i(t.l,t.lightness,t.L,t.b,t.brightness)]),c=i(t.a,t.alpha,t.opacity,1),null!=t.opacity&&(c/=100)}else(Array.isArray(t)||r.ArrayBuffer&&ArrayBuffer.isView&&ArrayBuffer.isView(t))&&(l=[t[0],t[1],t[2]],s="rgb",c=4===t.length?t[3]:1);else s="rgb",l=[t>>>16,(65280&t)>>>8,255&t];return{space:s,values:l,alpha:c}};var o={red:0,orange:60,yellow:120,green:180,blue:240,purple:300}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"color-name":121,defined:166,"is-plain-obj":423}],124:[function(t,e,r){"use strict";var n=t("color-parse"),a=t("color-space/hsl"),i=t("clamp");e.exports=function(t){var e,r=n(t);return r.space?((e=Array(3))[0]=i(r.values[0],0,255),e[1]=i(r.values[1],0,255),e[2]=i(r.values[2],0,255),"h"===r.space[0]&&(e=a.rgb(e)),e.push(i(r.alpha,0,1)),e):[]}},{clamp:117,"color-parse":123,"color-space/hsl":125}],125:[function(t,e,r){"use strict";var n=t("./rgb");e.exports={name:"hsl",min:[0,0,0],max:[360,100,100],channel:["hue","saturation","lightness"],alias:["HSL"],rgb:function(t){var e,r,n,a,i,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return[i=255*l,i,i];e=2*l-(r=l<.5?l*(1+s):l+s-l*s),a=[0,0,0];for(var c=0;c<3;c++)(n=o+1/3*-(c-1))<0?n++:n>1&&n--,i=6*n<1?e+6*(r-e)*n:2*n<1?r:3*n<2?e+(r-e)*(2/3-n)*6:e,a[c]=255*i;return a}},n.hsl=function(t){var e,r,n=t[0]/255,a=t[1]/255,i=t[2]/255,o=Math.min(n,a,i),s=Math.max(n,a,i),l=s-o;return s===o?e=0:n===s?e=(a-i)/l:a===s?e=2+(i-n)/l:i===s&&(e=4+(n-a)/l),(e=Math.min(60*e,360))<0&&(e+=360),r=(o+s)/2,[e,100*(s===o?0:r<=.5?l/(s+o):l/(2-s-o)),100*r]}},{"./rgb":126}],126:[function(t,e,r){"use strict";e.exports={name:"rgb",min:[0,0,0],max:[255,255,255],channel:["red","green","blue"],alias:["RGB"]}},{}],127:[function(t,e,r){e.exports={jet:[{index:0,rgb:[0,0,131]},{index:.125,rgb:[0,60,170]},{index:.375,rgb:[5,255,255]},{index:.625,rgb:[255,255,0]},{index:.875,rgb:[250,0,0]},{index:1,rgb:[128,0,0]}],hsv:[{index:0,rgb:[255,0,0]},{index:.169,rgb:[253,255,2]},{index:.173,rgb:[247,255,2]},{index:.337,rgb:[0,252,4]},{index:.341,rgb:[0,252,10]},{index:.506,rgb:[1,249,255]},{index:.671,rgb:[2,0,253]},{index:.675,rgb:[8,0,253]},{index:.839,rgb:[255,0,251]},{index:.843,rgb:[255,0,245]},{index:1,rgb:[255,0,6]}],hot:[{index:0,rgb:[0,0,0]},{index:.3,rgb:[230,0,0]},{index:.6,rgb:[255,210,0]},{index:1,rgb:[255,255,255]}],cool:[{index:0,rgb:[0,255,255]},{index:1,rgb:[255,0,255]}],spring:[{index:0,rgb:[255,0,255]},{index:1,rgb:[255,255,0]}],summer:[{index:0,rgb:[0,128,102]},{index:1,rgb:[255,255,102]}],autumn:[{index:0,rgb:[255,0,0]},{index:1,rgb:[255,255,0]}],winter:[{index:0,rgb:[0,0,255]},{index:1,rgb:[0,255,128]}],bone:[{index:0,rgb:[0,0,0]},{index:.376,rgb:[84,84,116]},{index:.753,rgb:[169,200,200]},{index:1,rgb:[255,255,255]}],copper:[{index:0,rgb:[0,0,0]},{index:.804,rgb:[255,160,102]},{index:1,rgb:[255,199,127]}],greys:[{index:0,rgb:[0,0,0]},{index:1,rgb:[255,255,255]}],yignbu:[{index:0,rgb:[8,29,88]},{index:.125,rgb:[37,52,148]},{index:.25,rgb:[34,94,168]},{index:.375,rgb:[29,145,192]},{index:.5,rgb:[65,182,196]},{index:.625,rgb:[127,205,187]},{index:.75,rgb:[199,233,180]},{index:.875,rgb:[237,248,217]},{index:1,rgb:[255,255,217]}],greens:[{index:0,rgb:[0,68,27]},{index:.125,rgb:[0,109,44]},{index:.25,rgb:[35,139,69]},{index:.375,rgb:[65,171,93]},{index:.5,rgb:[116,196,118]},{index:.625,rgb:[161,217,155]},{index:.75,rgb:[199,233,192]},{index:.875,rgb:[229,245,224]},{index:1,rgb:[247,252,245]}],yiorrd:[{index:0,rgb:[128,0,38]},{index:.125,rgb:[189,0,38]},{index:.25,rgb:[227,26,28]},{index:.375,rgb:[252,78,42]},{index:.5,rgb:[253,141,60]},{index:.625,rgb:[254,178,76]},{index:.75,rgb:[254,217,118]},{index:.875,rgb:[255,237,160]},{index:1,rgb:[255,255,204]}],bluered:[{index:0,rgb:[0,0,255]},{index:1,rgb:[255,0,0]}],rdbu:[{index:0,rgb:[5,10,172]},{index:.35,rgb:[106,137,247]},{index:.5,rgb:[190,190,190]},{index:.6,rgb:[220,170,132]},{index:.7,rgb:[230,145,90]},{index:1,rgb:[178,10,28]}],picnic:[{index:0,rgb:[0,0,255]},{index:.1,rgb:[51,153,255]},{index:.2,rgb:[102,204,255]},{index:.3,rgb:[153,204,255]},{index:.4,rgb:[204,204,255]},{index:.5,rgb:[255,255,255]},{index:.6,rgb:[255,204,255]},{index:.7,rgb:[255,153,255]},{index:.8,rgb:[255,102,204]},{index:.9,rgb:[255,102,102]},{index:1,rgb:[255,0,0]}],rainbow:[{index:0,rgb:[150,0,90]},{index:.125,rgb:[0,0,200]},{index:.25,rgb:[0,25,255]},{index:.375,rgb:[0,152,255]},{index:.5,rgb:[44,255,150]},{index:.625,rgb:[151,255,0]},{index:.75,rgb:[255,234,0]},{index:.875,rgb:[255,111,0]},{index:1,rgb:[255,0,0]}],portland:[{index:0,rgb:[12,51,131]},{index:.25,rgb:[10,136,186]},{index:.5,rgb:[242,211,56]},{index:.75,rgb:[242,143,56]},{index:1,rgb:[217,30,30]}],blackbody:[{index:0,rgb:[0,0,0]},{index:.2,rgb:[230,0,0]},{index:.4,rgb:[230,210,0]},{index:.7,rgb:[255,255,255]},{index:1,rgb:[160,200,255]}],earth:[{index:0,rgb:[0,0,130]},{index:.1,rgb:[0,180,180]},{index:.2,rgb:[40,210,40]},{index:.4,rgb:[230,230,50]},{index:.6,rgb:[120,70,20]},{index:1,rgb:[255,255,255]}],electric:[{index:0,rgb:[0,0,0]},{index:.15,rgb:[30,0,100]},{index:.4,rgb:[120,0,100]},{index:.6,rgb:[160,90,0]},{index:.8,rgb:[230,200,0]},{index:1,rgb:[255,250,220]}],alpha:[{index:0,rgb:[255,255,255,0]},{index:1,rgb:[255,255,255,1]}],viridis:[{index:0,rgb:[68,1,84]},{index:.13,rgb:[71,44,122]},{index:.25,rgb:[59,81,139]},{index:.38,rgb:[44,113,142]},{index:.5,rgb:[33,144,141]},{index:.63,rgb:[39,173,129]},{index:.75,rgb:[92,200,99]},{index:.88,rgb:[170,220,50]},{index:1,rgb:[253,231,37]}],inferno:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[31,12,72]},{index:.25,rgb:[85,15,109]},{index:.38,rgb:[136,34,106]},{index:.5,rgb:[186,54,85]},{index:.63,rgb:[227,89,51]},{index:.75,rgb:[249,140,10]},{index:.88,rgb:[249,201,50]},{index:1,rgb:[252,255,164]}],magma:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[28,16,68]},{index:.25,rgb:[79,18,123]},{index:.38,rgb:[129,37,129]},{index:.5,rgb:[181,54,122]},{index:.63,rgb:[229,80,100]},{index:.75,rgb:[251,135,97]},{index:.88,rgb:[254,194,135]},{index:1,rgb:[252,253,191]}],plasma:[{index:0,rgb:[13,8,135]},{index:.13,rgb:[75,3,161]},{index:.25,rgb:[125,3,168]},{index:.38,rgb:[168,34,150]},{index:.5,rgb:[203,70,121]},{index:.63,rgb:[229,107,93]},{index:.75,rgb:[248,148,65]},{index:.88,rgb:[253,195,40]},{index:1,rgb:[240,249,33]}],warm:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[172,0,187]},{index:.25,rgb:[219,0,170]},{index:.38,rgb:[255,0,130]},{index:.5,rgb:[255,63,74]},{index:.63,rgb:[255,123,0]},{index:.75,rgb:[234,176,0]},{index:.88,rgb:[190,228,0]},{index:1,rgb:[147,255,0]}],cool:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[116,0,218]},{index:.25,rgb:[98,74,237]},{index:.38,rgb:[68,146,231]},{index:.5,rgb:[0,204,197]},{index:.63,rgb:[0,247,146]},{index:.75,rgb:[0,255,88]},{index:.88,rgb:[40,255,8]},{index:1,rgb:[147,255,0]}],"rainbow-soft":[{index:0,rgb:[125,0,179]},{index:.1,rgb:[199,0,180]},{index:.2,rgb:[255,0,121]},{index:.3,rgb:[255,108,0]},{index:.4,rgb:[222,194,0]},{index:.5,rgb:[150,255,0]},{index:.6,rgb:[0,255,55]},{index:.7,rgb:[0,246,150]},{index:.8,rgb:[50,167,222]},{index:.9,rgb:[103,51,235]},{index:1,rgb:[124,0,186]}],bathymetry:[{index:0,rgb:[40,26,44]},{index:.13,rgb:[59,49,90]},{index:.25,rgb:[64,76,139]},{index:.38,rgb:[63,110,151]},{index:.5,rgb:[72,142,158]},{index:.63,rgb:[85,174,163]},{index:.75,rgb:[120,206,163]},{index:.88,rgb:[187,230,172]},{index:1,rgb:[253,254,204]}],cdom:[{index:0,rgb:[47,15,62]},{index:.13,rgb:[87,23,86]},{index:.25,rgb:[130,28,99]},{index:.38,rgb:[171,41,96]},{index:.5,rgb:[206,67,86]},{index:.63,rgb:[230,106,84]},{index:.75,rgb:[242,149,103]},{index:.88,rgb:[249,193,135]},{index:1,rgb:[254,237,176]}],chlorophyll:[{index:0,rgb:[18,36,20]},{index:.13,rgb:[25,63,41]},{index:.25,rgb:[24,91,59]},{index:.38,rgb:[13,119,72]},{index:.5,rgb:[18,148,80]},{index:.63,rgb:[80,173,89]},{index:.75,rgb:[132,196,122]},{index:.88,rgb:[175,221,162]},{index:1,rgb:[215,249,208]}],density:[{index:0,rgb:[54,14,36]},{index:.13,rgb:[89,23,80]},{index:.25,rgb:[110,45,132]},{index:.38,rgb:[120,77,178]},{index:.5,rgb:[120,113,213]},{index:.63,rgb:[115,151,228]},{index:.75,rgb:[134,185,227]},{index:.88,rgb:[177,214,227]},{index:1,rgb:[230,241,241]}],"freesurface-blue":[{index:0,rgb:[30,4,110]},{index:.13,rgb:[47,14,176]},{index:.25,rgb:[41,45,236]},{index:.38,rgb:[25,99,212]},{index:.5,rgb:[68,131,200]},{index:.63,rgb:[114,156,197]},{index:.75,rgb:[157,181,203]},{index:.88,rgb:[200,208,216]},{index:1,rgb:[241,237,236]}],"freesurface-red":[{index:0,rgb:[60,9,18]},{index:.13,rgb:[100,17,27]},{index:.25,rgb:[142,20,29]},{index:.38,rgb:[177,43,27]},{index:.5,rgb:[192,87,63]},{index:.63,rgb:[205,125,105]},{index:.75,rgb:[216,162,148]},{index:.88,rgb:[227,199,193]},{index:1,rgb:[241,237,236]}],oxygen:[{index:0,rgb:[64,5,5]},{index:.13,rgb:[106,6,15]},{index:.25,rgb:[144,26,7]},{index:.38,rgb:[168,64,3]},{index:.5,rgb:[188,100,4]},{index:.63,rgb:[206,136,11]},{index:.75,rgb:[220,174,25]},{index:.88,rgb:[231,215,44]},{index:1,rgb:[248,254,105]}],par:[{index:0,rgb:[51,20,24]},{index:.13,rgb:[90,32,35]},{index:.25,rgb:[129,44,34]},{index:.38,rgb:[159,68,25]},{index:.5,rgb:[182,99,19]},{index:.63,rgb:[199,134,22]},{index:.75,rgb:[212,171,35]},{index:.88,rgb:[221,210,54]},{index:1,rgb:[225,253,75]}],phase:[{index:0,rgb:[145,105,18]},{index:.13,rgb:[184,71,38]},{index:.25,rgb:[186,58,115]},{index:.38,rgb:[160,71,185]},{index:.5,rgb:[110,97,218]},{index:.63,rgb:[50,123,164]},{index:.75,rgb:[31,131,110]},{index:.88,rgb:[77,129,34]},{index:1,rgb:[145,105,18]}],salinity:[{index:0,rgb:[42,24,108]},{index:.13,rgb:[33,50,162]},{index:.25,rgb:[15,90,145]},{index:.38,rgb:[40,118,137]},{index:.5,rgb:[59,146,135]},{index:.63,rgb:[79,175,126]},{index:.75,rgb:[120,203,104]},{index:.88,rgb:[193,221,100]},{index:1,rgb:[253,239,154]}],temperature:[{index:0,rgb:[4,35,51]},{index:.13,rgb:[23,51,122]},{index:.25,rgb:[85,59,157]},{index:.38,rgb:[129,79,143]},{index:.5,rgb:[175,95,130]},{index:.63,rgb:[222,112,101]},{index:.75,rgb:[249,146,66]},{index:.88,rgb:[249,196,65]},{index:1,rgb:[232,250,91]}],turbidity:[{index:0,rgb:[34,31,27]},{index:.13,rgb:[65,50,41]},{index:.25,rgb:[98,69,52]},{index:.38,rgb:[131,89,57]},{index:.5,rgb:[161,112,59]},{index:.63,rgb:[185,140,66]},{index:.75,rgb:[202,174,88]},{index:.88,rgb:[216,209,126]},{index:1,rgb:[233,246,171]}],"velocity-blue":[{index:0,rgb:[17,32,64]},{index:.13,rgb:[35,52,116]},{index:.25,rgb:[29,81,156]},{index:.38,rgb:[31,113,162]},{index:.5,rgb:[50,144,169]},{index:.63,rgb:[87,173,176]},{index:.75,rgb:[149,196,189]},{index:.88,rgb:[203,221,211]},{index:1,rgb:[254,251,230]}],"velocity-green":[{index:0,rgb:[23,35,19]},{index:.13,rgb:[24,64,38]},{index:.25,rgb:[11,95,45]},{index:.38,rgb:[39,123,35]},{index:.5,rgb:[95,146,12]},{index:.63,rgb:[152,165,18]},{index:.75,rgb:[201,186,69]},{index:.88,rgb:[233,216,137]},{index:1,rgb:[255,253,205]}],cubehelix:[{index:0,rgb:[0,0,0]},{index:.07,rgb:[22,5,59]},{index:.13,rgb:[60,4,105]},{index:.2,rgb:[109,1,135]},{index:.27,rgb:[161,0,147]},{index:.33,rgb:[210,2,142]},{index:.4,rgb:[251,11,123]},{index:.47,rgb:[255,29,97]},{index:.53,rgb:[255,54,69]},{index:.6,rgb:[255,85,46]},{index:.67,rgb:[255,120,34]},{index:.73,rgb:[255,157,37]},{index:.8,rgb:[241,191,57]},{index:.87,rgb:[224,220,93]},{index:.93,rgb:[218,241,142]},{index:1,rgb:[227,253,198]}]}},{}],128:[function(t,e,r){"use strict";var n=t("./colorScale"),a=t("lerp");function i(t){return[t[0]/255,t[1]/255,t[2]/255,t[3]]}function o(t){for(var e,r="#",n=0;n<3;++n)r+=("00"+(e=(e=t[n]).toString(16))).substr(e.length);return r}function s(t){return"rgba("+t.join(",")+")"}e.exports=function(t){var e,r,l,c,u,h,f,p,d,g;t||(t={});p=(t.nshades||72)-1,f=t.format||"hex",(h=t.colormap)||(h="jet");if("string"==typeof h){if(h=h.toLowerCase(),!n[h])throw Error(h+" not a supported colorscale");u=n[h]}else{if(!Array.isArray(h))throw Error("unsupported colormap option",h);u=h.slice()}if(u.length>p+1)throw new Error(h+" map requires nshades to be at least size "+u.length);d=Array.isArray(t.alpha)?2!==t.alpha.length?[1,1]:t.alpha.slice():"number"==typeof t.alpha?[t.alpha,t.alpha]:[1,1];e=u.map(function(t){return Math.round(t.index*p)}),d[0]=Math.min(Math.max(d[0],0),1),d[1]=Math.min(Math.max(d[1],0),1);var v=u.map(function(t,e){var r=u[e].index,n=u[e].rgb.slice();return 4===n.length&&n[3]>=0&&n[3]<=1?n:(n[3]=d[0]+(d[1]-d[0])*r,n)}),m=[];for(g=0;g<e.length-1;++g){c=e[g+1]-e[g],r=v[g],l=v[g+1];for(var y=0;y<c;y++){var x=y/c;m.push([Math.round(a(r[0],l[0],x)),Math.round(a(r[1],l[1],x)),Math.round(a(r[2],l[2],x)),a(r[3],l[3],x)])}}m.push(u[u.length-1].rgb.concat(d[1])),"hex"===f?m=m.map(o):"rgbaString"===f?m=m.map(s):"float"===f&&(m=m.map(i));return m}},{"./colorScale":127,lerp:426}],129:[function(t,e,r){"use strict";e.exports=function(t,e,r,i){var o=n(e,r,i);if(0===o){var s=a(n(t,e,r)),c=a(n(t,e,i));if(s===c){if(0===s){var u=l(t,e,r),h=l(t,e,i);return u===h?0:u?1:-1}return 0}return 0===c?s>0?-1:l(t,e,i)?-1:1:0===s?c>0?1:l(t,e,r)?1:-1:a(c-s)}var f=n(t,e,r);if(f>0)return o>0&&n(t,e,i)>0?1:-1;if(f<0)return o>0||n(t,e,i)>0?1:-1;var p=n(t,e,i);return p>0?1:l(t,e,r)?1:-1};var n=t("robust-orientation"),a=t("signum"),i=t("two-sum"),o=t("robust-product"),s=t("robust-sum");function l(t,e,r){var n=i(t[0],-e[0]),a=i(t[1],-e[1]),l=i(r[0],-e[0]),c=i(r[1],-e[1]),u=s(o(n,l),o(a,c));return u[u.length-1]>=0}},{"robust-orientation":508,"robust-product":509,"robust-sum":513,signum:514,"two-sum":542}],130:[function(t,e,r){e.exports=function(t,e){var r=t.length,i=t.length-e.length;if(i)return i;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:return t[0]+t[1]-e[0]-e[1]||n(t[0],t[1])-n(e[0],e[1]);case 3:var o=t[0]+t[1],s=e[0]+e[1];if(i=o+t[2]-(s+e[2]))return i;var l=n(t[0],t[1]),c=n(e[0],e[1]);return n(l,t[2])-n(c,e[2])||n(l+t[2],o)-n(c+e[2],s);case 4:var u=t[0],h=t[1],f=t[2],p=t[3],d=e[0],g=e[1],v=e[2],m=e[3];return u+h+f+p-(d+g+v+m)||n(u,h,f,p)-n(d,g,v,m,d)||n(u+h,u+f,u+p,h+f,h+p,f+p)-n(d+g,d+v,d+m,g+v,g+m,v+m)||n(u+h+f,u+h+p,u+f+p,h+f+p)-n(d+g+v,d+g+m,d+v+m,g+v+m);default:for(var y=t.slice().sort(a),x=e.slice().sort(a),b=0;b<r;++b)if(i=y[b]-x[b])return i;return 0}};var n=Math.min;function a(t,e){return t-e}},{}],131:[function(t,e,r){"use strict";var n=t("compare-cell"),a=t("cell-orientation");e.exports=function(t,e){return n(t,e)||a(t)-a(e)}},{"cell-orientation":114,"compare-cell":130}],132:[function(t,e,r){"use strict";var n=t("./lib/ch1d"),a=t("./lib/ch2d"),i=t("./lib/chnd");e.exports=function(t){var e=t.length;if(0===e)return[];if(1===e)return[[0]];var r=t[0].length;if(0===r)return[];if(1===r)return n(t);if(2===r)return a(t);return i(t,r)}},{"./lib/ch1d":133,"./lib/ch2d":134,"./lib/chnd":135}],133:[function(t,e,r){"use strict";e.exports=function(t){for(var e=0,r=0,n=1;n<t.length;++n)t[n][0]<t[e][0]&&(e=n),t[n][0]>t[r][0]&&(r=n);return e<r?[[e],[r]]:e>r?[[r],[e]]:[[e]]}},{}],134:[function(t,e,r){"use strict";e.exports=function(t){var e=n(t),r=e.length;if(r<=2)return[];for(var a=new Array(r),i=e[r-1],o=0;o<r;++o){var s=e[o];a[o]=[i,s],i=s}return a};var n=t("monotone-convex-hull-2d")},{"monotone-convex-hull-2d":435}],135:[function(t,e,r){"use strict";e.exports=function(t,e){try{return n(t,!0)}catch(s){var r=a(t);if(r.length<=e)return[];var i=function(t,e){for(var r=t.length,n=new Array(r),a=0;a<e.length;++a)n[a]=t[e[a]];for(var i=e.length,a=0;a<r;++a)e.indexOf(a)<0&&(n[i++]=t[a]);return n}(t,r),o=n(i,!0);return function(t,e){for(var r=t.length,n=e.length,a=0;a<r;++a)for(var i=t[a],o=0;o<i.length;++o){var s=i[o];if(s<n)i[o]=e[s];else{s-=n;for(var l=0;l<n;++l)s>=e[l]&&(s+=1);i[o]=s}}return t}(o,r)}};var n=t("incremental-convex-hull"),a=t("affine-hull")},{"affine-hull":65,"incremental-convex-hull":414}],136:[function(t,e,r){e.exports={AFG:"afghan",ALA:"\\b\\wland",ALB:"albania",DZA:"algeria",ASM:"^(?=.*americ).*samoa",AND:"andorra",AGO:"angola",AIA:"anguill?a",ATA:"antarctica",ATG:"antigua",ARG:"argentin",ARM:"armenia",ABW:"^(?!.*bonaire).*\\baruba",AUS:"australia",AUT:"^(?!.*hungary).*austria|\\baustri.*\\bemp",AZE:"azerbaijan",BHS:"bahamas",BHR:"bahrain",BGD:"bangladesh|^(?=.*east).*paki?stan",BRB:"barbados",BLR:"belarus|byelo",BEL:"^(?!.*luxem).*belgium",BLZ:"belize|^(?=.*british).*honduras",BEN:"benin|dahome",BMU:"bermuda",BTN:"bhutan",BOL:"bolivia",BES:"^(?=.*bonaire).*eustatius|^(?=.*carib).*netherlands|\\bbes.?islands",BIH:"herzegovina|bosnia",BWA:"botswana|bechuana",BVT:"bouvet",BRA:"brazil",IOT:"british.?indian.?ocean",BRN:"brunei",BGR:"bulgaria",BFA:"burkina|\\bfaso|upper.?volta",BDI:"burundi",CPV:"verde",KHM:"cambodia|kampuchea|khmer",CMR:"cameroon",CAN:"canada",CYM:"cayman",CAF:"\\bcentral.african.republic",TCD:"\\bchad",CHL:"\\bchile",CHN:"^(?!.*\\bmac)(?!.*\\bhong)(?!.*\\btai)(?!.*\\brep).*china|^(?=.*peo)(?=.*rep).*china",CXR:"christmas",CCK:"\\bcocos|keeling",COL:"colombia",COM:"comoro",COG:"^(?!.*\\bdem)(?!.*\\bd[\\.]?r)(?!.*kinshasa)(?!.*zaire)(?!.*belg)(?!.*l.opoldville)(?!.*free).*\\bcongo",COK:"\\bcook",CRI:"costa.?rica",CIV:"ivoire|ivory",HRV:"croatia",CUB:"\\bcuba",CUW:"^(?!.*bonaire).*\\bcura(c|\xe7)ao",CYP:"cyprus",CSK:"czechoslovakia",CZE:"^(?=.*rep).*czech|czechia|bohemia",COD:"\\bdem.*congo|congo.*\\bdem|congo.*\\bd[\\.]?r|\\bd[\\.]?r.*congo|belgian.?congo|congo.?free.?state|kinshasa|zaire|l.opoldville|drc|droc|rdc",DNK:"denmark",DJI:"djibouti",DMA:"dominica(?!n)",DOM:"dominican.rep",ECU:"ecuador",EGY:"egypt",SLV:"el.?salvador",GNQ:"guine.*eq|eq.*guine|^(?=.*span).*guinea",ERI:"eritrea",EST:"estonia",ETH:"ethiopia|abyssinia",FLK:"falkland|malvinas",FRO:"faroe|faeroe",FJI:"fiji",FIN:"finland",FRA:"^(?!.*\\bdep)(?!.*martinique).*france|french.?republic|\\bgaul",GUF:"^(?=.*french).*guiana",PYF:"french.?polynesia|tahiti",ATF:"french.?southern",GAB:"gabon",GMB:"gambia",GEO:"^(?!.*south).*georgia",DDR:"german.?democratic.?republic|democratic.?republic.*germany|east.germany",DEU:"^(?!.*east).*germany|^(?=.*\\bfed.*\\brep).*german",GHA:"ghana|gold.?coast",GIB:"gibraltar",GRC:"greece|hellenic|hellas",GRL:"greenland",GRD:"grenada",GLP:"guadeloupe",GUM:"\\bguam",GTM:"guatemala",GGY:"guernsey",GIN:"^(?!.*eq)(?!.*span)(?!.*bissau)(?!.*portu)(?!.*new).*guinea",GNB:"bissau|^(?=.*portu).*guinea",GUY:"guyana|british.?guiana",HTI:"haiti",HMD:"heard.*mcdonald",VAT:"holy.?see|vatican|papal.?st",HND:"^(?!.*brit).*honduras",HKG:"hong.?kong",HUN:"^(?!.*austr).*hungary",ISL:"iceland",IND:"india(?!.*ocea)",IDN:"indonesia",IRN:"\\biran|persia",IRQ:"\\biraq|mesopotamia",IRL:"(^ireland)|(^republic.*ireland)",IMN:"^(?=.*isle).*\\bman",ISR:"israel",ITA:"italy",JAM:"jamaica",JPN:"japan",JEY:"jersey",JOR:"jordan",KAZ:"kazak",KEN:"kenya|british.?east.?africa|east.?africa.?prot",KIR:"kiribati",PRK:"^(?=.*democrat|people|north|d.*p.*.r).*\\bkorea|dprk|korea.*(d.*p.*r)",KWT:"kuwait",KGZ:"kyrgyz|kirghiz",LAO:"\\blaos?\\b",LVA:"latvia",LBN:"lebanon",LSO:"lesotho|basuto",LBR:"liberia",LBY:"libya",LIE:"liechtenstein",LTU:"lithuania",LUX:"^(?!.*belg).*luxem",MAC:"maca(o|u)",MDG:"madagascar|malagasy",MWI:"malawi|nyasa",MYS:"malaysia",MDV:"maldive",MLI:"\\bmali\\b",MLT:"\\bmalta",MHL:"marshall",MTQ:"martinique",MRT:"mauritania",MUS:"mauritius",MYT:"\\bmayotte",MEX:"\\bmexic",FSM:"fed.*micronesia|micronesia.*fed",MCO:"monaco",MNG:"mongolia",MNE:"^(?!.*serbia).*montenegro",MSR:"montserrat",MAR:"morocco|\\bmaroc",MOZ:"mozambique",MMR:"myanmar|burma",NAM:"namibia",NRU:"nauru",NPL:"nepal",NLD:"^(?!.*\\bant)(?!.*\\bcarib).*netherlands",ANT:"^(?=.*\\bant).*(nether|dutch)",NCL:"new.?caledonia",NZL:"new.?zealand",NIC:"nicaragua",NER:"\\bniger(?!ia)",NGA:"nigeria",NIU:"niue",NFK:"norfolk",MNP:"mariana",NOR:"norway",OMN:"\\boman|trucial",PAK:"^(?!.*east).*paki?stan",PLW:"palau",PSE:"palestin|\\bgaza|west.?bank",PAN:"panama",PNG:"papua|new.?guinea",PRY:"paraguay",PER:"peru",PHL:"philippines",PCN:"pitcairn",POL:"poland",PRT:"portugal",PRI:"puerto.?rico",QAT:"qatar",KOR:"^(?!.*d.*p.*r)(?!.*democrat)(?!.*people)(?!.*north).*\\bkorea(?!.*d.*p.*r)",MDA:"moldov|b(a|e)ssarabia",REU:"r(e|\xe9)union",ROU:"r(o|u|ou)mania",RUS:"\\brussia|soviet.?union|u\\.?s\\.?s\\.?r|socialist.?republics",RWA:"rwanda",BLM:"barth(e|\xe9)lemy",SHN:"helena",KNA:"kitts|\\bnevis",LCA:"\\blucia",MAF:"^(?=.*collectivity).*martin|^(?=.*france).*martin(?!ique)|^(?=.*french).*martin(?!ique)",SPM:"miquelon",VCT:"vincent",WSM:"^(?!.*amer).*samoa",SMR:"san.?marino",STP:"\\bs(a|\xe3)o.?tom(e|\xe9)",SAU:"\\bsa\\w*.?arabia",SEN:"senegal",SRB:"^(?!.*monte).*serbia",SYC:"seychell",SLE:"sierra",SGP:"singapore",SXM:"^(?!.*martin)(?!.*saba).*maarten",SVK:"^(?!.*cze).*slovak",SVN:"slovenia",SLB:"solomon",SOM:"somali",ZAF:"south.africa|s\\\\..?africa",SGS:"south.?georgia|sandwich",SSD:"\\bs\\w*.?sudan",ESP:"spain",LKA:"sri.?lanka|ceylon",SDN:"^(?!.*\\bs(?!u)).*sudan",SUR:"surinam|dutch.?guiana",SJM:"svalbard",SWZ:"swaziland",SWE:"sweden",CHE:"switz|swiss",SYR:"syria",TWN:"taiwan|taipei|formosa|^(?!.*peo)(?=.*rep).*china",TJK:"tajik",THA:"thailand|\\bsiam",MKD:"macedonia|fyrom",TLS:"^(?=.*leste).*timor|^(?=.*east).*timor",TGO:"togo",TKL:"tokelau",TON:"tonga",TTO:"trinidad|tobago",TUN:"tunisia",TUR:"turkey",TKM:"turkmen",TCA:"turks",TUV:"tuvalu",UGA:"uganda",UKR:"ukrain",ARE:"emirates|^u\\.?a\\.?e\\.?$|united.?arab.?em",GBR:"united.?kingdom|britain|^u\\.?k\\.?$",TZA:"tanzania",USA:"united.?states\\b(?!.*islands)|\\bu\\.?s\\.?a\\.?\\b|^\\s*u\\.?s\\.?\\b(?!.*islands)",UMI:"minor.?outlying.?is",URY:"uruguay",UZB:"uzbek",VUT:"vanuatu|new.?hebrides",VEN:"venezuela",VNM:"^(?!.*republic).*viet.?nam|^(?=.*socialist).*viet.?nam",VGB:"^(?=.*\\bu\\.?\\s?k).*virgin|^(?=.*brit).*virgin|^(?=.*kingdom).*virgin",VIR:"^(?=.*\\bu\\.?\\s?s).*virgin|^(?=.*states).*virgin",WLF:"futuna|wallis",ESH:"western.sahara",YEM:"^(?!.*arab)(?!.*north)(?!.*sana)(?!.*peo)(?!.*dem)(?!.*south)(?!.*aden)(?!.*\\bp\\.?d\\.?r).*yemen",YMD:"^(?=.*peo).*yemen|^(?!.*rep)(?=.*dem).*yemen|^(?=.*south).*yemen|^(?=.*aden).*yemen|^(?=.*\\bp\\.?d\\.?r).*yemen",YUG:"yugoslavia",ZMB:"zambia|northern.?rhodesia",EAZ:"zanzibar",ZWE:"zimbabwe|^(?!.*northern).*rhodesia"}},{}],137:[function(t,e,r){e.exports=["xx-small","x-small","small","medium","large","x-large","xx-large","larger","smaller"]},{}],138:[function(t,e,r){e.exports=["normal","condensed","semi-condensed","extra-condensed","ultra-condensed","expanded","semi-expanded","extra-expanded","ultra-expanded"]},{}],139:[function(t,e,r){e.exports=["normal","italic","oblique"]},{}],140:[function(t,e,r){e.exports=["normal","bold","bolder","lighter","100","200","300","400","500","600","700","800","900"]},{}],141:[function(t,e,r){"use strict";e.exports={parse:t("./parse"),stringify:t("./stringify")}},{"./parse":143,"./stringify":144}],142:[function(t,e,r){"use strict";var n=t("css-font-size-keywords");e.exports={isSize:function(t){return/^[\d\.]/.test(t)||-1!==t.indexOf("/")||-1!==n.indexOf(t)}}},{"css-font-size-keywords":137}],143:[function(t,e,r){"use strict";var n=t("unquote"),a=t("css-global-keywords"),i=t("css-system-font-keywords"),o=t("css-font-weight-keywords"),s=t("css-font-style-keywords"),l=t("css-font-stretch-keywords"),c=t("string-split-by"),u=t("./lib/util").isSize;e.exports=f;var h=f.cache={};function f(t){if("string"!=typeof t)throw new Error("Font argument must be a string.");if(h[t])return h[t];if(""===t)throw new Error("Cannot parse an empty string.");if(-1!==i.indexOf(t))return h[t]={system:t};for(var e,r={style:"normal",variant:"normal",weight:"normal",stretch:"normal",lineHeight:"normal",size:"1rem",family:["serif"]},f=c(t,/\s+/);e=f.shift();){if(-1!==a.indexOf(e))return["style","variant","weight","stretch"].forEach(function(t){r[t]=e}),h[t]=r;if(-1===s.indexOf(e))if("normal"!==e&&"small-caps"!==e)if(-1===l.indexOf(e)){if(-1===o.indexOf(e)){if(u(e)){var d=c(e,"/");if(r.size=d[0],null!=d[1]?r.lineHeight=p(d[1]):"/"===f[0]&&(f.shift(),r.lineHeight=p(f.shift())),!f.length)throw new Error("Missing required font-family.");return r.family=c(f.join(" "),/\s*,\s*/).map(n),h[t]=r}throw new Error("Unknown or unsupported font token: "+e)}r.weight=e}else r.stretch=e;else r.variant=e;else r.style=e}throw new Error("Missing required font-size.")}function p(t){var e=parseFloat(t);return e.toString()===t?e:t}},{"./lib/util":142,"css-font-stretch-keywords":138,"css-font-style-keywords":139,"css-font-weight-keywords":140,"css-global-keywords":145,"css-system-font-keywords":146,"string-split-by":527,unquote:546}],144:[function(t,e,r){"use strict";var n=t("pick-by-alias"),a=t("./lib/util").isSize,i=g(t("css-global-keywords")),o=g(t("css-system-font-keywords")),s=g(t("css-font-weight-keywords")),l=g(t("css-font-style-keywords")),c=g(t("css-font-stretch-keywords")),u={normal:1,"small-caps":1},h={serif:1,"sans-serif":1,monospace:1,cursive:1,fantasy:1,"system-ui":1},f="1rem",p="serif";function d(t,e){if(t&&!e[t]&&!i[t])throw Error("Unknown keyword `"+t+"`");return t}function g(t){for(var e={},r=0;r<t.length;r++)e[t[r]]=1;return e}e.exports=function(t){if((t=n(t,{style:"style fontstyle fontStyle font-style slope distinction",variant:"variant font-variant fontVariant fontvariant var capitalization",weight:"weight w font-weight fontWeight fontweight",stretch:"stretch font-stretch fontStretch fontstretch width",size:"size s font-size fontSize fontsize height em emSize",lineHeight:"lh line-height lineHeight lineheight leading",family:"font family fontFamily font-family fontfamily type typeface face",system:"system reserved default global"})).system)return t.system&&d(t.system,o),t.system;if(d(t.style,l),d(t.variant,u),d(t.weight,s),d(t.stretch,c),null==t.size&&(t.size=f),"number"==typeof t.size&&(t.size+="px"),!a)throw Error("Bad size value `"+t.size+"`");t.family||(t.family=p),Array.isArray(t.family)&&(t.family.length||(t.family=[p]),t.family=t.family.map(function(t){return h[t]?t:'"'+t+'"'}).join(", "));var e=[];return e.push(t.style),t.variant!==t.style&&e.push(t.variant),t.weight!==t.variant&&t.weight!==t.style&&e.push(t.weight),t.stretch!==t.weight&&t.stretch!==t.variant&&t.stretch!==t.style&&e.push(t.stretch),e.push(t.size+(null==t.lineHeight||"normal"===t.lineHeight||t.lineHeight+""=="1"?"":"/"+t.lineHeight)),e.push(t.family),e.filter(Boolean).join(" ")}},{"./lib/util":142,"css-font-stretch-keywords":138,"css-font-style-keywords":139,"css-font-weight-keywords":140,"css-global-keywords":145,"css-system-font-keywords":146,"pick-by-alias":466}],145:[function(t,e,r){e.exports=["inherit","initial","unset"]},{}],146:[function(t,e,r){e.exports=["caption","icon","menu","message-box","small-caption","status-bar"]},{}],147:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a,i){var o=a-1,s=a*a,l=o*o,c=(1+2*a)*l,u=a*l,h=s*(3-2*a),f=s*o;if(t.length){i||(i=new Array(t.length));for(var p=t.length-1;p>=0;--p)i[p]=c*t[p]+u*e[p]+h*r[p]+f*n[p];return i}return c*t+u*e+h*r+f*n},e.exports.derivative=function(t,e,r,n,a,i){var o=6*a*a-6*a,s=3*a*a-4*a+1,l=-6*a*a+6*a,c=3*a*a-2*a;if(t.length){i||(i=new Array(t.length));for(var u=t.length-1;u>=0;--u)i[u]=o*t[u]+s*e[u]+l*r[u]+c*n[u];return i}return o*t+s*e+l*r[u]+c*n}},{}],148:[function(t,e,r){"use strict";var n=t("./lib/thunk.js");function a(){this.argTypes=[],this.shimArgs=[],this.arrayArgs=[],this.arrayBlockIndices=[],this.scalarArgs=[],this.offsetArgs=[],this.offsetArgIndex=[],this.indexArgs=[],this.shapeArgs=[],this.funcName="",this.pre=null,this.body=null,this.post=null,this.debug=!1}e.exports=function(t){var e=new a;e.pre=t.pre,e.body=t.body,e.post=t.post;var r=t.args.slice(0);e.argTypes=r;for(var i=0;i<r.length;++i){var o=r[i];if("array"===o||"object"==typeof o&&o.blockIndices){if(e.argTypes[i]="array",e.arrayArgs.push(i),e.arrayBlockIndices.push(o.blockIndices?o.blockIndices:0),e.shimArgs.push("array"+i),i<e.pre.args.length&&e.pre.args[i].count>0)throw new Error("cwise: pre() block may not reference array args");if(i<e.post.args.length&&e.post.args[i].count>0)throw new Error("cwise: post() block may not reference array args")}else if("scalar"===o)e.scalarArgs.push(i),e.shimArgs.push("scalar"+i);else if("index"===o){if(e.indexArgs.push(i),i<e.pre.args.length&&e.pre.args[i].count>0)throw new Error("cwise: pre() block may not reference array index");if(i<e.body.args.length&&e.body.args[i].lvalue)throw new Error("cwise: body() block may not write to array index");if(i<e.post.args.length&&e.post.args[i].count>0)throw new Error("cwise: post() block may not reference array index")}else if("shape"===o){if(e.shapeArgs.push(i),i<e.pre.args.length&&e.pre.args[i].lvalue)throw new Error("cwise: pre() block may not write to array shape");if(i<e.body.args.length&&e.body.args[i].lvalue)throw new Error("cwise: body() block may not write to array shape");if(i<e.post.args.length&&e.post.args[i].lvalue)throw new Error("cwise: post() block may not write to array shape")}else{if("object"!=typeof o||!o.offset)throw new Error("cwise: Unknown argument type "+r[i]);e.argTypes[i]="offset",e.offsetArgs.push({array:o.array,offset:o.offset}),e.offsetArgIndex.push(i)}}if(e.arrayArgs.length<=0)throw new Error("cwise: No array arguments specified");if(e.pre.args.length>r.length)throw new Error("cwise: Too many arguments in pre() block");if(e.body.args.length>r.length)throw new Error("cwise: Too many arguments in body() block");if(e.post.args.length>r.length)throw new Error("cwise: Too many arguments in post() block");return e.debug=!!t.printCode||!!t.debug,e.funcName=t.funcName||"cwise",e.blockSize=t.blockSize||64,n(e)}},{"./lib/thunk.js":150}],149:[function(t,e,r){"use strict";var n=t("uniq");function a(t,e,r){var n,a,i=t.length,o=e.arrayArgs.length,s=e.indexArgs.length>0,l=[],c=[],u=0,h=0;for(n=0;n<i;++n)c.push(["i",n,"=0"].join(""));for(a=0;a<o;++a)for(n=0;n<i;++n)h=u,u=t[n],0===n?c.push(["d",a,"s",n,"=t",a,"p",u].join("")):c.push(["d",a,"s",n,"=(t",a,"p",u,"-s",h,"*t",a,"p",h,")"].join(""));for(c.length>0&&l.push("var "+c.join(",")),n=i-1;n>=0;--n)u=t[n],l.push(["for(i",n,"=0;i",n,"<s",u,";++i",n,"){"].join(""));for(l.push(r),n=0;n<i;++n){for(h=u,u=t[n],a=0;a<o;++a)l.push(["p",a,"+=d",a,"s",n].join(""));s&&(n>0&&l.push(["index[",h,"]-=s",h].join("")),l.push(["++index[",u,"]"].join(""))),l.push("}")}return l.join("\n")}function i(t,e,r){for(var n=t.body,a=[],i=[],o=0;o<t.args.length;++o){var s=t.args[o];if(!(s.count<=0)){var l=new RegExp(s.name,"g"),c="",u=e.arrayArgs.indexOf(o);switch(e.argTypes[o]){case"offset":var h=e.offsetArgIndex.indexOf(o);u=e.offsetArgs[h].array,c="+q"+h;case"array":c="p"+u+c;var f="l"+o,p="a"+u;if(0===e.arrayBlockIndices[u])1===s.count?"generic"===r[u]?s.lvalue?(a.push(["var ",f,"=",p,".get(",c,")"].join("")),n=n.replace(l,f),i.push([p,".set(",c,",",f,")"].join(""))):n=n.replace(l,[p,".get(",c,")"].join("")):n=n.replace(l,[p,"[",c,"]"].join("")):"generic"===r[u]?(a.push(["var ",f,"=",p,".get(",c,")"].join("")),n=n.replace(l,f),s.lvalue&&i.push([p,".set(",c,",",f,")"].join(""))):(a.push(["var ",f,"=",p,"[",c,"]"].join("")),n=n.replace(l,f),s.lvalue&&i.push([p,"[",c,"]=",f].join("")));else{for(var d=[s.name],g=[c],v=0;v<Math.abs(e.arrayBlockIndices[u]);v++)d.push("\\s*\\[([^\\]]+)\\]"),g.push("$"+(v+1)+"*t"+u+"b"+v);if(l=new RegExp(d.join(""),"g"),c=g.join("+"),"generic"===r[u])throw new Error("cwise: Generic arrays not supported in combination with blocks!");n=n.replace(l,[p,"[",c,"]"].join(""))}break;case"scalar":n=n.replace(l,"Y"+e.scalarArgs.indexOf(o));break;case"index":n=n.replace(l,"index");break;case"shape":n=n.replace(l,"shape")}}}return[a.join("\n"),n,i.join("\n")].join("\n").trim()}function o(t){for(var e=new Array(t.length),r=!0,n=0;n<t.length;++n){var a=t[n],i=a.match(/\d+/);i=i?i[0]:"",0===a.charAt(0)?e[n]="u"+a.charAt(1)+i:e[n]=a.charAt(0)+i,n>0&&(r=r&&e[n]===e[n-1])}return r?e[0]:e.join("")}e.exports=function(t,e){for(var r=e[1].length-Math.abs(t.arrayBlockIndices[0])|0,s=new Array(t.arrayArgs.length),l=new Array(t.arrayArgs.length),c=0;c<t.arrayArgs.length;++c)l[c]=e[2*c],s[c]=e[2*c+1];var u=[],h=[],f=[],p=[],d=[];for(c=0;c<t.arrayArgs.length;++c){t.arrayBlockIndices[c]<0?(f.push(0),p.push(r),u.push(r),h.push(r+t.arrayBlockIndices[c])):(f.push(t.arrayBlockIndices[c]),p.push(t.arrayBlockIndices[c]+r),u.push(0),h.push(t.arrayBlockIndices[c]));for(var g=[],v=0;v<s[c].length;v++)f[c]<=s[c][v]&&s[c][v]<p[c]&&g.push(s[c][v]-f[c]);d.push(g)}var m=["SS"],y=["'use strict'"],x=[];for(v=0;v<r;++v)x.push(["s",v,"=SS[",v,"]"].join(""));for(c=0;c<t.arrayArgs.length;++c){for(m.push("a"+c),m.push("t"+c),m.push("p"+c),v=0;v<r;++v)x.push(["t",c,"p",v,"=t",c,"[",f[c]+v,"]"].join(""));for(v=0;v<Math.abs(t.arrayBlockIndices[c]);++v)x.push(["t",c,"b",v,"=t",c,"[",u[c]+v,"]"].join(""))}for(c=0;c<t.scalarArgs.length;++c)m.push("Y"+c);if(t.shapeArgs.length>0&&x.push("shape=SS.slice(0)"),t.indexArgs.length>0){var b=new Array(r);for(c=0;c<r;++c)b[c]="0";x.push(["index=[",b.join(","),"]"].join(""))}for(c=0;c<t.offsetArgs.length;++c){var _=t.offsetArgs[c],w=[];for(v=0;v<_.offset.length;++v)0!==_.offset[v]&&(1===_.offset[v]?w.push(["t",_.array,"p",v].join("")):w.push([_.offset[v],"*t",_.array,"p",v].join("")));0===w.length?x.push("q"+c+"=0"):x.push(["q",c,"=",w.join("+")].join(""))}var k=n([].concat(t.pre.thisVars).concat(t.body.thisVars).concat(t.post.thisVars));for((x=x.concat(k)).length>0&&y.push("var "+x.join(",")),c=0;c<t.arrayArgs.length;++c)y.push("p"+c+"|=0");t.pre.body.length>3&&y.push(i(t.pre,t,l));var T=i(t.body,t,l),M=function(t){for(var e=0,r=t[0].length;e<r;){for(var n=1;n<t.length;++n)if(t[n][e]!==t[0][e])return e;++e}return e}(d);M<r?y.push(function(t,e,r,n){for(var i=e.length,o=r.arrayArgs.length,s=r.blockSize,l=r.indexArgs.length>0,c=[],u=0;u<o;++u)c.push(["var offset",u,"=p",u].join(""));for(u=t;u<i;++u)c.push(["for(var j"+u+"=SS[",e[u],"]|0;j",u,">0;){"].join("")),c.push(["if(j",u,"<",s,"){"].join("")),c.push(["s",e[u],"=j",u].join("")),c.push(["j",u,"=0"].join("")),c.push(["}else{s",e[u],"=",s].join("")),c.push(["j",u,"-=",s,"}"].join("")),l&&c.push(["index[",e[u],"]=j",u].join(""));for(u=0;u<o;++u){for(var h=["offset"+u],f=t;f<i;++f)h.push(["j",f,"*t",u,"p",e[f]].join(""));c.push(["p",u,"=(",h.join("+"),")"].join(""))}for(c.push(a(e,r,n)),u=t;u<i;++u)c.push("}");return c.join("\n")}(M,d[0],t,T)):y.push(a(d[0],t,T)),t.post.body.length>3&&y.push(i(t.post,t,l)),t.debug&&console.log("-----Generated cwise routine for ",e,":\n"+y.join("\n")+"\n----------");var A=[t.funcName||"unnamed","_cwise_loop_",s[0].join("s"),"m",M,o(l)].join("");return new Function(["function ",A,"(",m.join(","),"){",y.join("\n"),"} return ",A].join(""))()}},{uniq:545}],150:[function(t,e,r){"use strict";var n=t("./compile.js");e.exports=function(t){var e=["'use strict'","var CACHED={}"],r=[],a=t.funcName+"_cwise_thunk";e.push(["return function ",a,"(",t.shimArgs.join(","),"){"].join(""));for(var i=[],o=[],s=[["array",t.arrayArgs[0],".shape.slice(",Math.max(0,t.arrayBlockIndices[0]),t.arrayBlockIndices[0]<0?","+t.arrayBlockIndices[0]+")":")"].join("")],l=[],c=[],u=0;u<t.arrayArgs.length;++u){var h=t.arrayArgs[u];r.push(["t",h,"=array",h,".dtype,","r",h,"=array",h,".order"].join("")),i.push("t"+h),i.push("r"+h),o.push("t"+h),o.push("r"+h+".join()"),s.push("array"+h+".data"),s.push("array"+h+".stride"),s.push("array"+h+".offset|0"),u>0&&(l.push("array"+t.arrayArgs[0]+".shape.length===array"+h+".shape.length+"+(Math.abs(t.arrayBlockIndices[0])-Math.abs(t.arrayBlockIndices[u]))),c.push("array"+t.arrayArgs[0]+".shape[shapeIndex+"+Math.max(0,t.arrayBlockIndices[0])+"]===array"+h+".shape[shapeIndex+"+Math.max(0,t.arrayBlockIndices[u])+"]"))}for(t.arrayArgs.length>1&&(e.push("if (!("+l.join(" && ")+")) throw new Error('cwise: Arrays do not all have the same dimensionality!')"),e.push("for(var shapeIndex=array"+t.arrayArgs[0]+".shape.length-"+Math.abs(t.arrayBlockIndices[0])+"; shapeIndex--\x3e0;) {"),e.push("if (!("+c.join(" && ")+")) throw new Error('cwise: Arrays do not all have the same shape!')"),e.push("}")),u=0;u<t.scalarArgs.length;++u)s.push("scalar"+t.scalarArgs[u]);return r.push(["type=[",o.join(","),"].join()"].join("")),r.push("proc=CACHED[type]"),e.push("var "+r.join(",")),e.push(["if(!proc){","CACHED[type]=proc=compile([",i.join(","),"])}","return proc(",s.join(","),")}"].join("")),t.debug&&console.log("-----Generated thunk:\n"+e.join("\n")+"\n----------"),new Function("compile",e.join("\n"))(n.bind(void 0,t))}},{"./compile.js":149}],151:[function(t,e,r){e.exports=t("cwise-compiler")},{"cwise-compiler":148}],152:[function(t,e,r){"use strict";var n,a=t("es5-ext/object/copy"),i=t("es5-ext/object/normalize-options"),o=t("es5-ext/object/valid-callable"),s=t("es5-ext/object/map"),l=t("es5-ext/object/valid-callable"),c=t("es5-ext/object/valid-value"),u=Function.prototype.bind,h=Object.defineProperty,f=Object.prototype.hasOwnProperty;n=function(t,e,r){var n,i=c(e)&&l(e.value);return delete(n=a(e)).writable,delete n.value,n.get=function(){return!r.overwriteDefinition&&f.call(this,t)?i:(e.value=u.call(i,r.resolveContext?r.resolveContext(this):this),h(this,t,e),this[t])},n},e.exports=function(t){var e=i(arguments[1]);return null!=e.resolveContext&&o(e.resolveContext),s(t,function(t,r){return n(r,t,e)})}},{"es5-ext/object/copy":192,"es5-ext/object/map":201,"es5-ext/object/normalize-options":202,"es5-ext/object/valid-callable":206,"es5-ext/object/valid-value":208}],153:[function(t,e,r){"use strict";var n=t("es5-ext/object/assign"),a=t("es5-ext/object/normalize-options"),i=t("es5-ext/object/is-callable"),o=t("es5-ext/string/#/contains");(e.exports=function(t,e){var r,i,s,l,c;return arguments.length<2||"string"!=typeof t?(l=e,e=t,t=null):l=arguments[2],null==t?(r=s=!0,i=!1):(r=o.call(t,"c"),i=o.call(t,"e"),s=o.call(t,"w")),c={value:e,configurable:r,enumerable:i,writable:s},l?n(a(l),c):c}).gs=function(t,e,r){var s,l,c,u;return"string"!=typeof t?(c=r,r=e,e=t,t=null):c=arguments[3],null==e?e=void 0:i(e)?null==r?r=void 0:i(r)||(c=r,r=void 0):(c=e,e=r=void 0),null==t?(s=!0,l=!1):(s=o.call(t,"c"),l=o.call(t,"e")),u={get:e,set:r,configurable:s,enumerable:l},c?n(a(c),u):u}},{"es5-ext/object/assign":189,"es5-ext/object/is-callable":195,"es5-ext/object/normalize-options":202,"es5-ext/string/#/contains":209}],154:[function(t,e,r){var n;n=this,function(t){"use strict";function e(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function r(t){var r;return 1===t.length&&(r=t,t=function(t,n){return e(r(t),n)}),{left:function(e,r,n,a){for(null==n&&(n=0),null==a&&(a=e.length);n<a;){var i=n+a>>>1;t(e[i],r)<0?n=i+1:a=i}return n},right:function(e,r,n,a){for(null==n&&(n=0),null==a&&(a=e.length);n<a;){var i=n+a>>>1;t(e[i],r)>0?a=i:n=i+1}return n}}}var n=r(e),a=n.right,i=n.left;function o(t,e){return[t,e]}function s(t){return null===t?NaN:+t}function l(t,e){var r,n,a=t.length,i=0,o=-1,l=0,c=0;if(null==e)for(;++o<a;)isNaN(r=s(t[o]))||(c+=(n=r-l)*(r-(l+=n/++i)));else for(;++o<a;)isNaN(r=s(e(t[o],o,t)))||(c+=(n=r-l)*(r-(l+=n/++i)));if(i>1)return c/(i-1)}function c(t,e){var r=l(t,e);return r?Math.sqrt(r):r}function u(t,e){var r,n,a,i=t.length,o=-1;if(null==e){for(;++o<i;)if(null!=(r=t[o])&&r>=r)for(n=a=r;++o<i;)null!=(r=t[o])&&(n>r&&(n=r),a<r&&(a=r))}else for(;++o<i;)if(null!=(r=e(t[o],o,t))&&r>=r)for(n=a=r;++o<i;)null!=(r=e(t[o],o,t))&&(n>r&&(n=r),a<r&&(a=r));return[n,a]}var h=Array.prototype,f=h.slice,p=h.map;function d(t){return function(){return t}}function g(t){return t}function v(t,e,r){t=+t,e=+e,r=(a=arguments.length)<2?(e=t,t=0,1):a<3?1:+r;for(var n=-1,a=0|Math.max(0,Math.ceil((e-t)/r)),i=new Array(a);++n<a;)i[n]=t+n*r;return i}var m=Math.sqrt(50),y=Math.sqrt(10),x=Math.sqrt(2);function b(t,e,r){var n=(e-t)/Math.max(0,r),a=Math.floor(Math.log(n)/Math.LN10),i=n/Math.pow(10,a);return a>=0?(i>=m?10:i>=y?5:i>=x?2:1)*Math.pow(10,a):-Math.pow(10,-a)/(i>=m?10:i>=y?5:i>=x?2:1)}function _(t,e,r){var n=Math.abs(e-t)/Math.max(0,r),a=Math.pow(10,Math.floor(Math.log(n)/Math.LN10)),i=n/a;return i>=m?a*=10:i>=y?a*=5:i>=x&&(a*=2),e<t?-a:a}function w(t){return Math.ceil(Math.log(t.length)/Math.LN2)+1}function k(t,e,r){if(null==r&&(r=s),n=t.length){if((e=+e)<=0||n<2)return+r(t[0],0,t);if(e>=1)return+r(t[n-1],n-1,t);var n,a=(n-1)*e,i=Math.floor(a),o=+r(t[i],i,t);return o+(+r(t[i+1],i+1,t)-o)*(a-i)}}function T(t,e){var r,n,a=t.length,i=-1;if(null==e){for(;++i<a;)if(null!=(r=t[i])&&r>=r)for(n=r;++i<a;)null!=(r=t[i])&&n>r&&(n=r)}else for(;++i<a;)if(null!=(r=e(t[i],i,t))&&r>=r)for(n=r;++i<a;)null!=(r=e(t[i],i,t))&&n>r&&(n=r);return n}function M(t){if(!(a=t.length))return[];for(var e=-1,r=T(t,A),n=new Array(r);++e<r;)for(var a,i=-1,o=n[e]=new Array(a);++i<a;)o[i]=t[i][e];return n}function A(t){return t.length}t.bisect=a,t.bisectRight=a,t.bisectLeft=i,t.ascending=e,t.bisector=r,t.cross=function(t,e,r){var n,a,i,s,l=t.length,c=e.length,u=new Array(l*c);for(null==r&&(r=o),n=i=0;n<l;++n)for(s=t[n],a=0;a<c;++a,++i)u[i]=r(s,e[a]);return u},t.descending=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},t.deviation=c,t.extent=u,t.histogram=function(){var t=g,e=u,r=w;function n(n){var i,o,s=n.length,l=new Array(s);for(i=0;i<s;++i)l[i]=t(n[i],i,n);var c=e(l),u=c[0],h=c[1],f=r(l,u,h);Array.isArray(f)||(f=_(u,h,f),f=v(Math.ceil(u/f)*f,h,f));for(var p=f.length;f[0]<=u;)f.shift(),--p;for(;f[p-1]>h;)f.pop(),--p;var d,g=new Array(p+1);for(i=0;i<=p;++i)(d=g[i]=[]).x0=i>0?f[i-1]:u,d.x1=i<p?f[i]:h;for(i=0;i<s;++i)u<=(o=l[i])&&o<=h&&g[a(f,o,0,p)].push(n[i]);return g}return n.value=function(e){return arguments.length?(t="function"==typeof e?e:d(e),n):t},n.domain=function(t){return arguments.length?(e="function"==typeof t?t:d([t[0],t[1]]),n):e},n.thresholds=function(t){return arguments.length?(r="function"==typeof t?t:Array.isArray(t)?d(f.call(t)):d(t),n):r},n},t.thresholdFreedmanDiaconis=function(t,r,n){return t=p.call(t,s).sort(e),Math.ceil((n-r)/(2*(k(t,.75)-k(t,.25))*Math.pow(t.length,-1/3)))},t.thresholdScott=function(t,e,r){return Math.ceil((r-e)/(3.5*c(t)*Math.pow(t.length,-1/3)))},t.thresholdSturges=w,t.max=function(t,e){var r,n,a=t.length,i=-1;if(null==e){for(;++i<a;)if(null!=(r=t[i])&&r>=r)for(n=r;++i<a;)null!=(r=t[i])&&r>n&&(n=r)}else for(;++i<a;)if(null!=(r=e(t[i],i,t))&&r>=r)for(n=r;++i<a;)null!=(r=e(t[i],i,t))&&r>n&&(n=r);return n},t.mean=function(t,e){var r,n=t.length,a=n,i=-1,o=0;if(null==e)for(;++i<n;)isNaN(r=s(t[i]))?--a:o+=r;else for(;++i<n;)isNaN(r=s(e(t[i],i,t)))?--a:o+=r;if(a)return o/a},t.median=function(t,r){var n,a=t.length,i=-1,o=[];if(null==r)for(;++i<a;)isNaN(n=s(t[i]))||o.push(n);else for(;++i<a;)isNaN(n=s(r(t[i],i,t)))||o.push(n);return k(o.sort(e),.5)},t.merge=function(t){for(var e,r,n,a=t.length,i=-1,o=0;++i<a;)o+=t[i].length;for(r=new Array(o);--a>=0;)for(e=(n=t[a]).length;--e>=0;)r[--o]=n[e];return r},t.min=T,t.pairs=function(t,e){null==e&&(e=o);for(var r=0,n=t.length-1,a=t[0],i=new Array(n<0?0:n);r<n;)i[r]=e(a,a=t[++r]);return i},t.permute=function(t,e){for(var r=e.length,n=new Array(r);r--;)n[r]=t[e[r]];return n},t.quantile=k,t.range=v,t.scan=function(t,r){if(n=t.length){var n,a,i=0,o=0,s=t[o];for(null==r&&(r=e);++i<n;)(r(a=t[i],s)<0||0!==r(s,s))&&(s=a,o=i);return 0===r(s,s)?o:void 0}},t.shuffle=function(t,e,r){for(var n,a,i=(null==r?t.length:r)-(e=null==e?0:+e);i;)a=Math.random()*i--|0,n=t[i+e],t[i+e]=t[a+e],t[a+e]=n;return t},t.sum=function(t,e){var r,n=t.length,a=-1,i=0;if(null==e)for(;++a<n;)(r=+t[a])&&(i+=r);else for(;++a<n;)(r=+e(t[a],a,t))&&(i+=r);return i},t.ticks=function(t,e,r){var n,a,i,o,s=-1;if(r=+r,(t=+t)==(e=+e)&&r>0)return[t];if((n=e<t)&&(a=t,t=e,e=a),0===(o=b(t,e,r))||!isFinite(o))return[];if(o>0)for(t=Math.ceil(t/o),e=Math.floor(e/o),i=new Array(a=Math.ceil(e-t+1));++s<a;)i[s]=(t+s)*o;else for(t=Math.floor(t*o),e=Math.ceil(e*o),i=new Array(a=Math.ceil(t-e+1));++s<a;)i[s]=(t-s)/o;return n&&i.reverse(),i},t.tickIncrement=b,t.tickStep=_,t.transpose=M,t.variance=l,t.zip=function(){return M(arguments)},Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],155:[function(t,e,r){var n;n=this,function(t){"use strict";function e(){}function r(t,r){var n=new e;if(t instanceof e)t.each(function(t,e){n.set(e,t)});else if(Array.isArray(t)){var a,i=-1,o=t.length;if(null==r)for(;++i<o;)n.set(i,t[i]);else for(;++i<o;)n.set(r(a=t[i],i,t),a)}else if(t)for(var s in t)n.set(s,t[s]);return n}function n(){return{}}function a(t,e,r){t[e]=r}function i(){return r()}function o(t,e,r){t.set(e,r)}function s(){}e.prototype=r.prototype={constructor:e,has:function(t){return"$"+t in this},get:function(t){return this["$"+t]},set:function(t,e){return this["$"+t]=e,this},remove:function(t){var e="$"+t;return e in this&&delete this[e]},clear:function(){for(var t in this)"$"===t[0]&&delete this[t]},keys:function(){var t=[];for(var e in this)"$"===e[0]&&t.push(e.slice(1));return t},values:function(){var t=[];for(var e in this)"$"===e[0]&&t.push(this[e]);return t},entries:function(){var t=[];for(var e in this)"$"===e[0]&&t.push({key:e.slice(1),value:this[e]});return t},size:function(){var t=0;for(var e in this)"$"===e[0]&&++t;return t},empty:function(){for(var t in this)if("$"===t[0])return!1;return!0},each:function(t){for(var e in this)"$"===e[0]&&t(this[e],e.slice(1),this)}};var l=r.prototype;function c(t,e){var r=new s;if(t instanceof s)t.each(function(t){r.add(t)});else if(t){var n=-1,a=t.length;if(null==e)for(;++n<a;)r.add(t[n]);else for(;++n<a;)r.add(e(t[n],n,t))}return r}s.prototype=c.prototype={constructor:s,has:l.has,add:function(t){return this["$"+(t+="")]=t,this},remove:l.remove,clear:l.clear,values:l.keys,size:l.size,empty:l.empty,each:l.each},t.nest=function(){var t,e,s,l=[],c=[];function u(n,a,i,o){if(a>=l.length)return null!=t&&n.sort(t),null!=e?e(n):n;for(var s,c,h,f=-1,p=n.length,d=l[a++],g=r(),v=i();++f<p;)(h=g.get(s=d(c=n[f])+""))?h.push(c):g.set(s,[c]);return g.each(function(t,e){o(v,e,u(t,a,i,o))}),v}return s={object:function(t){return u(t,0,n,a)},map:function(t){return u(t,0,i,o)},entries:function(t){return function t(r,n){if(++n>l.length)return r;var a,i=c[n-1];return null!=e&&n>=l.length?a=r.entries():(a=[],r.each(function(e,r){a.push({key:r,values:t(e,n)})})),null!=i?a.sort(function(t,e){return i(t.key,e.key)}):a}(u(t,0,i,o),0)},key:function(t){return l.push(t),s},sortKeys:function(t){return c[l.length-1]=t,s},sortValues:function(e){return t=e,s},rollup:function(t){return e=t,s}}},t.set=c,t.map=r,t.keys=function(t){var e=[];for(var r in t)e.push(r);return e},t.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},t.entries=function(t){var e=[];for(var r in t)e.push({key:r,value:t[r]});return e},Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],156:[function(t,e,r){var n;n=this,function(t){"use strict";function e(t,e,r){t.prototype=e.prototype=r,r.constructor=t}function r(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}function n(){}var a="\\s*([+-]?\\d+)\\s*",i="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",o="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",s=/^#([0-9a-f]{3,8})$/,l=new RegExp("^rgb\\("+[a,a,a]+"\\)$"),c=new RegExp("^rgb\\("+[o,o,o]+"\\)$"),u=new RegExp("^rgba\\("+[a,a,a,i]+"\\)$"),h=new RegExp("^rgba\\("+[o,o,o,i]+"\\)$"),f=new RegExp("^hsl\\("+[i,o,o]+"\\)$"),p=new RegExp("^hsla\\("+[i,o,o,i]+"\\)$"),d={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function g(){return this.rgb().formatHex()}function v(){return this.rgb().formatRgb()}function m(t){var e,r;return t=(t+"").trim().toLowerCase(),(e=s.exec(t))?(r=e[1].length,e=parseInt(e[1],16),6===r?y(e):3===r?new w(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===r?new w(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===r?new w(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=l.exec(t))?new w(e[1],e[2],e[3],1):(e=c.exec(t))?new w(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=u.exec(t))?x(e[1],e[2],e[3],e[4]):(e=h.exec(t))?x(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=f.exec(t))?A(e[1],e[2]/100,e[3]/100,1):(e=p.exec(t))?A(e[1],e[2]/100,e[3]/100,e[4]):d.hasOwnProperty(t)?y(d[t]):"transparent"===t?new w(NaN,NaN,NaN,0):null}function y(t){return new w(t>>16&255,t>>8&255,255&t,1)}function x(t,e,r,n){return n<=0&&(t=e=r=NaN),new w(t,e,r,n)}function b(t){return t instanceof n||(t=m(t)),t?new w((t=t.rgb()).r,t.g,t.b,t.opacity):new w}function _(t,e,r,n){return 1===arguments.length?b(t):new w(t,e,r,null==n?1:n)}function w(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function k(){return"#"+M(this.r)+M(this.g)+M(this.b)}function T(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function M(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function A(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new L(t,e,r,n)}function S(t){if(t instanceof L)return new L(t.h,t.s,t.l,t.opacity);if(t instanceof n||(t=m(t)),!t)return new L;if(t instanceof L)return t;var e=(t=t.rgb()).r/255,r=t.g/255,a=t.b/255,i=Math.min(e,r,a),o=Math.max(e,r,a),s=NaN,l=o-i,c=(o+i)/2;return l?(s=e===o?(r-a)/l+6*(r<a):r===o?(a-e)/l+2:(e-r)/l+4,l/=c<.5?o+i:2-o-i,s*=60):l=c>0&&c<1?0:s,new L(s,l,c,t.opacity)}function E(t,e,r,n){return 1===arguments.length?S(t):new L(t,e,r,null==n?1:n)}function L(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function C(t,e,r){return 255*(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)}e(n,m,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:g,formatHex:g,formatHsl:function(){return S(this).formatHsl()},formatRgb:v,toString:v}),e(w,_,r(n,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new w(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new w(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:k,formatHex:k,formatRgb:T,toString:T})),e(L,E,r(n,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new L(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new L(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,a=2*r-n;return new w(C(t>=240?t-240:t+120,a,n),C(t,a,n),C(t<120?t+240:t-120,a,n),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));var P=Math.PI/180,O=180/Math.PI,z=.96422,I=1,D=.82521,R=4/29,F=6/29,B=3*F*F,N=F*F*F;function j(t){if(t instanceof U)return new U(t.l,t.a,t.b,t.opacity);if(t instanceof Z)return J(t);t instanceof w||(t=b(t));var e,r,n=Y(t.r),a=Y(t.g),i=Y(t.b),o=q((.2225045*n+.7168786*a+.0606169*i)/I);return n===a&&a===i?e=r=o:(e=q((.4360747*n+.3850649*a+.1430804*i)/z),r=q((.0139322*n+.0971045*a+.7141733*i)/D)),new U(116*o-16,500*(e-o),200*(o-r),t.opacity)}function V(t,e,r,n){return 1===arguments.length?j(t):new U(t,e,r,null==n?1:n)}function U(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}function q(t){return t>N?Math.pow(t,1/3):t/B+R}function H(t){return t>F?t*t*t:B*(t-R)}function G(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Y(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function W(t){if(t instanceof Z)return new Z(t.h,t.c,t.l,t.opacity);if(t instanceof U||(t=j(t)),0===t.a&&0===t.b)return new Z(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*O;return new Z(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function X(t,e,r,n){return 1===arguments.length?W(t):new Z(t,e,r,null==n?1:n)}function Z(t,e,r,n){this.h=+t,this.c=+e,this.l=+r,this.opacity=+n}function J(t){if(isNaN(t.h))return new U(t.l,0,0,t.opacity);var e=t.h*P;return new U(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}e(U,V,r(n,{brighter:function(t){return new U(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new U(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return new w(G(3.1338561*(e=z*H(e))-1.6168667*(t=I*H(t))-.4906146*(r=D*H(r))),G(-.9787684*e+1.9161415*t+.033454*r),G(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}})),e(Z,X,r(n,{brighter:function(t){return new Z(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new Z(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return J(this).rgb()}}));var K=-.14861,Q=1.78277,$=-.29227,tt=-.90649,et=1.97294,rt=et*tt,nt=et*Q,at=Q*$-tt*K;function it(t,e,r,n){return 1===arguments.length?function(t){if(t instanceof ot)return new ot(t.h,t.s,t.l,t.opacity);t instanceof w||(t=b(t));var e=t.r/255,r=t.g/255,n=t.b/255,a=(at*n+rt*e-nt*r)/(at+rt-nt),i=n-a,o=(et*(r-a)-$*i)/tt,s=Math.sqrt(o*o+i*i)/(et*a*(1-a)),l=s?Math.atan2(o,i)*O-120:NaN;return new ot(l<0?l+360:l,s,a,t.opacity)}(t):new ot(t,e,r,null==n?1:n)}function ot(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}e(ot,it,r(n,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new ot(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new ot(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*P,e=+this.l,r=isNaN(this.s)?0:this.s*e*(1-e),n=Math.cos(t),a=Math.sin(t);return new w(255*(e+r*(K*n+Q*a)),255*(e+r*($*n+tt*a)),255*(e+r*(et*n)),this.opacity)}})),t.color=m,t.cubehelix=it,t.gray=function(t,e){return new U(t,0,0,null==e?1:e)},t.hcl=X,t.hsl=E,t.lab=V,t.lch=function(t,e,r,n){return 1===arguments.length?W(t):new Z(r,e,t,null==n?1:n)},t.rgb=_,Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:(n=n||self).d3=n.d3||{})},{}],157:[function(t,e,r){var n;n=this,function(t){"use strict";var e={value:function(){}};function r(){for(var t,e=0,r=arguments.length,a={};e<r;++e){if(!(t=arguments[e]+"")||t in a)throw new Error("illegal type: "+t);a[t]=[]}return new n(a)}function n(t){this._=t}function a(t,e){for(var r,n=0,a=t.length;n<a;++n)if((r=t[n]).name===e)return r.value}function i(t,r,n){for(var a=0,i=t.length;a<i;++a)if(t[a].name===r){t[a]=e,t=t.slice(0,a).concat(t.slice(a+1));break}return null!=n&&t.push({name:r,value:n}),t}n.prototype=r.prototype={constructor:n,on:function(t,e){var r,n,o=this._,s=(n=o,(t+"").trim().split(/^|\s+/).map(function(t){var e="",r=t.indexOf(".");if(r>=0&&(e=t.slice(r+1),t=t.slice(0,r)),t&&!n.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}})),l=-1,c=s.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++l<c;)if(r=(t=s[l]).type)o[r]=i(o[r],t.name,e);else if(null==e)for(r in o)o[r]=i(o[r],t.name,null);return this}for(;++l<c;)if((r=(t=s[l]).type)&&(r=a(o[r],t.name)))return r},copy:function(){var t={},e=this._;for(var r in e)t[r]=e[r].slice();return new n(t)},call:function(t,e){if((r=arguments.length-2)>0)for(var r,n,a=new Array(r),i=0;i<r;++i)a[i]=arguments[i+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(i=0,r=(n=this._[t]).length;i<r;++i)n[i].value.apply(e,a)},apply:function(t,e,r){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var n=this._[t],a=0,i=n.length;a<i;++a)n[a].value.apply(e,r)}},t.dispatch=r,Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],158:[function(t,e,r){var n,a;n=this,a=function(t,e,r,n,a){"use strict";var i=function(t){return function(){return t}},o=function(){return 1e-6*(Math.random()-.5)};function s(t){return t.x+t.vx}function l(t){return t.y+t.vy}function c(t){return t.index}function u(t,e){var r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function h(t){return t.x}function f(t){return t.y}var p=10,d=Math.PI*(3-Math.sqrt(5));t.forceCenter=function(t,e){var r;function n(){var n,a,i=r.length,o=0,s=0;for(n=0;n<i;++n)o+=(a=r[n]).x,s+=a.y;for(o=o/i-t,s=s/i-e,n=0;n<i;++n)(a=r[n]).x-=o,a.y-=s}return null==t&&(t=0),null==e&&(e=0),n.initialize=function(t){r=t},n.x=function(e){return arguments.length?(t=+e,n):t},n.y=function(t){return arguments.length?(e=+t,n):e},n},t.forceCollide=function(t){var r,n,a=1,c=1;function u(){for(var t,i,u,f,p,d,g,v=r.length,m=0;m<c;++m)for(i=e.quadtree(r,s,l).visitAfter(h),t=0;t<v;++t)u=r[t],d=n[u.index],g=d*d,f=u.x+u.vx,p=u.y+u.vy,i.visit(y);function y(t,e,r,n,i){var s=t.data,l=t.r,c=d+l;if(!s)return e>f+c||n<f-c||r>p+c||i<p-c;if(s.index>u.index){var h=f-s.x-s.vx,v=p-s.y-s.vy,m=h*h+v*v;m<c*c&&(0===h&&(m+=(h=o())*h),0===v&&(m+=(v=o())*v),m=(c-(m=Math.sqrt(m)))/m*a,u.vx+=(h*=m)*(c=(l*=l)/(g+l)),u.vy+=(v*=m)*c,s.vx-=h*(c=1-c),s.vy-=v*c)}}}function h(t){if(t.data)return t.r=n[t.data.index];for(var e=t.r=0;e<4;++e)t[e]&&t[e].r>t.r&&(t.r=t[e].r)}function f(){if(r){var e,a,i=r.length;for(n=new Array(i),e=0;e<i;++e)a=r[e],n[a.index]=+t(a,e,r)}}return"function"!=typeof t&&(t=i(null==t?1:+t)),u.initialize=function(t){r=t,f()},u.iterations=function(t){return arguments.length?(c=+t,u):c},u.strength=function(t){return arguments.length?(a=+t,u):a},u.radius=function(e){return arguments.length?(t="function"==typeof e?e:i(+e),f(),u):t},u},t.forceLink=function(t){var e,n,a,s,l,h=c,f=function(t){return 1/Math.min(s[t.source.index],s[t.target.index])},p=i(30),d=1;function g(r){for(var a=0,i=t.length;a<d;++a)for(var s,c,u,h,f,p,g,v=0;v<i;++v)c=(s=t[v]).source,h=(u=s.target).x+u.vx-c.x-c.vx||o(),f=u.y+u.vy-c.y-c.vy||o(),h*=p=((p=Math.sqrt(h*h+f*f))-n[v])/p*r*e[v],f*=p,u.vx-=h*(g=l[v]),u.vy-=f*g,c.vx+=h*(g=1-g),c.vy+=f*g}function v(){if(a){var i,o,c=a.length,f=t.length,p=r.map(a,h);for(i=0,s=new Array(c);i<f;++i)(o=t[i]).index=i,"object"!=typeof o.source&&(o.source=u(p,o.source)),"object"!=typeof o.target&&(o.target=u(p,o.target)),s[o.source.index]=(s[o.source.index]||0)+1,s[o.target.index]=(s[o.target.index]||0)+1;for(i=0,l=new Array(f);i<f;++i)o=t[i],l[i]=s[o.source.index]/(s[o.source.index]+s[o.target.index]);e=new Array(f),m(),n=new Array(f),y()}}function m(){if(a)for(var r=0,n=t.length;r<n;++r)e[r]=+f(t[r],r,t)}function y(){if(a)for(var e=0,r=t.length;e<r;++e)n[e]=+p(t[e],e,t)}return null==t&&(t=[]),g.initialize=function(t){a=t,v()},g.links=function(e){return arguments.length?(t=e,v(),g):t},g.id=function(t){return arguments.length?(h=t,g):h},g.iterations=function(t){return arguments.length?(d=+t,g):d},g.strength=function(t){return arguments.length?(f="function"==typeof t?t:i(+t),m(),g):f},g.distance=function(t){return arguments.length?(p="function"==typeof t?t:i(+t),y(),g):p},g},t.forceManyBody=function(){var t,r,n,a,s=i(-30),l=1,c=1/0,u=.81;function p(a){var i,o=t.length,s=e.quadtree(t,h,f).visitAfter(g);for(n=a,i=0;i<o;++i)r=t[i],s.visit(v)}function d(){if(t){var e,r,n=t.length;for(a=new Array(n),e=0;e<n;++e)r=t[e],a[r.index]=+s(r,e,t)}}function g(t){var e,r,n,i,o,s=0,l=0;if(t.length){for(n=i=o=0;o<4;++o)(e=t[o])&&(r=Math.abs(e.value))&&(s+=e.value,l+=r,n+=r*e.x,i+=r*e.y);t.x=n/l,t.y=i/l}else{(e=t).x=e.data.x,e.y=e.data.y;do{s+=a[e.data.index]}while(e=e.next)}t.value=s}function v(t,e,i,s){if(!t.value)return!0;var h=t.x-r.x,f=t.y-r.y,p=s-e,d=h*h+f*f;if(p*p/u<d)return d<c&&(0===h&&(d+=(h=o())*h),0===f&&(d+=(f=o())*f),d<l&&(d=Math.sqrt(l*d)),r.vx+=h*t.value*n/d,r.vy+=f*t.value*n/d),!0;if(!(t.length||d>=c)){(t.data!==r||t.next)&&(0===h&&(d+=(h=o())*h),0===f&&(d+=(f=o())*f),d<l&&(d=Math.sqrt(l*d)));do{t.data!==r&&(p=a[t.data.index]*n/d,r.vx+=h*p,r.vy+=f*p)}while(t=t.next)}}return p.initialize=function(e){t=e,d()},p.strength=function(t){return arguments.length?(s="function"==typeof t?t:i(+t),d(),p):s},p.distanceMin=function(t){return arguments.length?(l=t*t,p):Math.sqrt(l)},p.distanceMax=function(t){return arguments.length?(c=t*t,p):Math.sqrt(c)},p.theta=function(t){return arguments.length?(u=t*t,p):Math.sqrt(u)},p},t.forceRadial=function(t,e,r){var n,a,o,s=i(.1);function l(t){for(var i=0,s=n.length;i<s;++i){var l=n[i],c=l.x-e||1e-6,u=l.y-r||1e-6,h=Math.sqrt(c*c+u*u),f=(o[i]-h)*a[i]*t/h;l.vx+=c*f,l.vy+=u*f}}function c(){if(n){var e,r=n.length;for(a=new Array(r),o=new Array(r),e=0;e<r;++e)o[e]=+t(n[e],e,n),a[e]=isNaN(o[e])?0:+s(n[e],e,n)}}return"function"!=typeof t&&(t=i(+t)),null==e&&(e=0),null==r&&(r=0),l.initialize=function(t){n=t,c()},l.strength=function(t){return arguments.length?(s="function"==typeof t?t:i(+t),c(),l):s},l.radius=function(e){return arguments.length?(t="function"==typeof e?e:i(+e),c(),l):t},l.x=function(t){return arguments.length?(e=+t,l):e},l.y=function(t){return arguments.length?(r=+t,l):r},l},t.forceSimulation=function(t){var e,i=1,o=.001,s=1-Math.pow(o,1/300),l=0,c=.6,u=r.map(),h=a.timer(g),f=n.dispatch("tick","end");function g(){v(),f.call("tick",e),i<o&&(h.stop(),f.call("end",e))}function v(){var e,r,n=t.length;for(i+=(l-i)*s,u.each(function(t){t(i)}),e=0;e<n;++e)null==(r=t[e]).fx?r.x+=r.vx*=c:(r.x=r.fx,r.vx=0),null==r.fy?r.y+=r.vy*=c:(r.y=r.fy,r.vy=0)}function m(){for(var e,r=0,n=t.length;r<n;++r){if((e=t[r]).index=r,isNaN(e.x)||isNaN(e.y)){var a=p*Math.sqrt(r),i=r*d;e.x=a*Math.cos(i),e.y=a*Math.sin(i)}(isNaN(e.vx)||isNaN(e.vy))&&(e.vx=e.vy=0)}}function y(e){return e.initialize&&e.initialize(t),e}return null==t&&(t=[]),m(),e={tick:v,restart:function(){return h.restart(g),e},stop:function(){return h.stop(),e},nodes:function(r){return arguments.length?(t=r,m(),u.each(y),e):t},alpha:function(t){return arguments.length?(i=+t,e):i},alphaMin:function(t){return arguments.length?(o=+t,e):o},alphaDecay:function(t){return arguments.length?(s=+t,e):+s},alphaTarget:function(t){return arguments.length?(l=+t,e):l},velocityDecay:function(t){return arguments.length?(c=1-t,e):1-c},force:function(t,r){return arguments.length>1?(null==r?u.remove(t):u.set(t,y(r)),e):u.get(t)},find:function(e,r,n){var a,i,o,s,l,c=0,u=t.length;for(null==n?n=1/0:n*=n,c=0;c<u;++c)(o=(a=e-(s=t[c]).x)*a+(i=r-s.y)*i)<n&&(l=s,n=o);return l},on:function(t,r){return arguments.length>1?(f.on(t,r),e):f.on(t)}}},t.forceX=function(t){var e,r,n,a=i(.1);function o(t){for(var a,i=0,o=e.length;i<o;++i)(a=e[i]).vx+=(n[i]-a.x)*r[i]*t}function s(){if(e){var i,o=e.length;for(r=new Array(o),n=new Array(o),i=0;i<o;++i)r[i]=isNaN(n[i]=+t(e[i],i,e))?0:+a(e[i],i,e)}}return"function"!=typeof t&&(t=i(null==t?0:+t)),o.initialize=function(t){e=t,s()},o.strength=function(t){return arguments.length?(a="function"==typeof t?t:i(+t),s(),o):a},o.x=function(e){return arguments.length?(t="function"==typeof e?e:i(+e),s(),o):t},o},t.forceY=function(t){var e,r,n,a=i(.1);function o(t){for(var a,i=0,o=e.length;i<o;++i)(a=e[i]).vy+=(n[i]-a.y)*r[i]*t}function s(){if(e){var i,o=e.length;for(r=new Array(o),n=new Array(o),i=0;i<o;++i)r[i]=isNaN(n[i]=+t(e[i],i,e))?0:+a(e[i],i,e)}}return"function"!=typeof t&&(t=i(null==t?0:+t)),o.initialize=function(t){e=t,s()},o.strength=function(t){return arguments.length?(a="function"==typeof t?t:i(+t),s(),o):a},o.y=function(e){return arguments.length?(t="function"==typeof e?e:i(+e),s(),o):t},o},Object.defineProperty(t,"__esModule",{value:!0})},"object"==typeof r&&"undefined"!=typeof e?a(r,t("d3-quadtree"),t("d3-collection"),t("d3-dispatch"),t("d3-timer")):a(n.d3=n.d3||{},n.d3,n.d3,n.d3,n.d3)},{"d3-collection":155,"d3-dispatch":157,"d3-quadtree":162,"d3-timer":164}],159:[function(t,e,r){var n;n=this,function(t){"use strict";function e(t,e){return t.parent===e.parent?1:2}function r(t,e){return t+e.x}function n(t,e){return Math.max(t,e.y)}function a(t){var e=0,r=t.children,n=r&&r.length;if(n)for(;--n>=0;)e+=r[n].value;else e=1;t.value=e}function i(t,e){var r,n,a,i,s,u=new c(t),h=+t.value&&(u.value=t.value),f=[u];for(null==e&&(e=o);r=f.pop();)if(h&&(r.value=+r.data.value),(a=e(r.data))&&(s=a.length))for(r.children=new Array(s),i=s-1;i>=0;--i)f.push(n=r.children[i]=new c(a[i])),n.parent=r,n.depth=r.depth+1;return u.eachBefore(l)}function o(t){return t.children}function s(t){t.data=t.data.data}function l(t){var e=0;do{t.height=e}while((t=t.parent)&&t.height<++e)}function c(t){this.data=t,this.depth=this.height=0,this.parent=null}c.prototype=i.prototype={constructor:c,count:function(){return this.eachAfter(a)},each:function(t){var e,r,n,a,i=this,o=[i];do{for(e=o.reverse(),o=[];i=e.pop();)if(t(i),r=i.children)for(n=0,a=r.length;n<a;++n)o.push(r[n])}while(o.length);return this},eachAfter:function(t){for(var e,r,n,a=this,i=[a],o=[];a=i.pop();)if(o.push(a),e=a.children)for(r=0,n=e.length;r<n;++r)i.push(e[r]);for(;a=o.pop();)t(a);return this},eachBefore:function(t){for(var e,r,n=this,a=[n];n=a.pop();)if(t(n),e=n.children)for(r=e.length-1;r>=0;--r)a.push(e[r]);return this},sum:function(t){return this.eachAfter(function(e){for(var r=+t(e.data)||0,n=e.children,a=n&&n.length;--a>=0;)r+=n[a].value;e.value=r})},sort:function(t){return this.eachBefore(function(e){e.children&&e.children.sort(t)})},path:function(t){for(var e=this,r=function(t,e){if(t===e)return t;var r=t.ancestors(),n=e.ancestors(),a=null;for(t=r.pop(),e=n.pop();t===e;)a=t,t=r.pop(),e=n.pop();return a}(e,t),n=[e];e!==r;)e=e.parent,n.push(e);for(var a=n.length;t!==r;)n.splice(a,0,t),t=t.parent;return n},ancestors:function(){for(var t=this,e=[t];t=t.parent;)e.push(t);return e},descendants:function(){var t=[];return this.each(function(e){t.push(e)}),t},leaves:function(){var t=[];return this.eachBefore(function(e){e.children||t.push(e)}),t},links:function(){var t=this,e=[];return t.each(function(r){r!==t&&e.push({source:r.parent,target:r})}),e},copy:function(){return i(this).eachBefore(s)}};var u=Array.prototype.slice;function h(t){for(var e,r,n=0,a=(t=function(t){for(var e,r,n=t.length;n;)r=Math.random()*n--|0,e=t[n],t[n]=t[r],t[r]=e;return t}(u.call(t))).length,i=[];n<a;)e=t[n],r&&d(r,e)?++n:(r=v(i=f(i,e)),n=0);return r}function f(t,e){var r,n;if(g(e,t))return[e];for(r=0;r<t.length;++r)if(p(e,t[r])&&g(m(t[r],e),t))return[t[r],e];for(r=0;r<t.length-1;++r)for(n=r+1;n<t.length;++n)if(p(m(t[r],t[n]),e)&&p(m(t[r],e),t[n])&&p(m(t[n],e),t[r])&&g(y(t[r],t[n],e),t))return[t[r],t[n],e];throw new Error}function p(t,e){var r=t.r-e.r,n=e.x-t.x,a=e.y-t.y;return r<0||r*r<n*n+a*a}function d(t,e){var r=t.r-e.r+1e-6,n=e.x-t.x,a=e.y-t.y;return r>0&&r*r>n*n+a*a}function g(t,e){for(var r=0;r<e.length;++r)if(!d(t,e[r]))return!1;return!0}function v(t){switch(t.length){case 1:return{x:(e=t[0]).x,y:e.y,r:e.r};case 2:return m(t[0],t[1]);case 3:return y(t[0],t[1],t[2])}var e}function m(t,e){var r=t.x,n=t.y,a=t.r,i=e.x,o=e.y,s=e.r,l=i-r,c=o-n,u=s-a,h=Math.sqrt(l*l+c*c);return{x:(r+i+l/h*u)/2,y:(n+o+c/h*u)/2,r:(h+a+s)/2}}function y(t,e,r){var n=t.x,a=t.y,i=t.r,o=e.x,s=e.y,l=e.r,c=r.x,u=r.y,h=r.r,f=n-o,p=n-c,d=a-s,g=a-u,v=l-i,m=h-i,y=n*n+a*a-i*i,x=y-o*o-s*s+l*l,b=y-c*c-u*u+h*h,_=p*d-f*g,w=(d*b-g*x)/(2*_)-n,k=(g*v-d*m)/_,T=(p*x-f*b)/(2*_)-a,M=(f*m-p*v)/_,A=k*k+M*M-1,S=2*(i+w*k+T*M),E=w*w+T*T-i*i,L=-(A?(S+Math.sqrt(S*S-4*A*E))/(2*A):E/S);return{x:n+w+k*L,y:a+T+M*L,r:L}}function x(t,e,r){var n,a,i,o,s=t.x-e.x,l=t.y-e.y,c=s*s+l*l;c?(a=e.r+r.r,a*=a,o=t.r+r.r,a>(o*=o)?(n=(c+o-a)/(2*c),i=Math.sqrt(Math.max(0,o/c-n*n)),r.x=t.x-n*s-i*l,r.y=t.y-n*l+i*s):(n=(c+a-o)/(2*c),i=Math.sqrt(Math.max(0,a/c-n*n)),r.x=e.x+n*s-i*l,r.y=e.y+n*l+i*s)):(r.x=e.x+r.r,r.y=e.y)}function b(t,e){var r=t.r+e.r-1e-6,n=e.x-t.x,a=e.y-t.y;return r>0&&r*r>n*n+a*a}function _(t){var e=t._,r=t.next._,n=e.r+r.r,a=(e.x*r.r+r.x*e.r)/n,i=(e.y*r.r+r.y*e.r)/n;return a*a+i*i}function w(t){this._=t,this.next=null,this.previous=null}function k(t){if(!(a=t.length))return 0;var e,r,n,a,i,o,s,l,c,u,f;if((e=t[0]).x=0,e.y=0,!(a>1))return e.r;if(r=t[1],e.x=-r.r,r.x=e.r,r.y=0,!(a>2))return e.r+r.r;x(r,e,n=t[2]),e=new w(e),r=new w(r),n=new w(n),e.next=n.previous=r,r.next=e.previous=n,n.next=r.previous=e;t:for(s=3;s<a;++s){x(e._,r._,n=t[s]),n=new w(n),l=r.next,c=e.previous,u=r._.r,f=e._.r;do{if(u<=f){if(b(l._,n._)){r=l,e.next=r,r.previous=e,--s;continue t}u+=l._.r,l=l.next}else{if(b(c._,n._)){(e=c).next=r,r.previous=e,--s;continue t}f+=c._.r,c=c.previous}}while(l!==c.next);for(n.previous=e,n.next=r,e.next=r.previous=r=n,i=_(e);(n=n.next)!==r;)(o=_(n))<i&&(e=n,i=o);r=e.next}for(e=[r._],n=r;(n=n.next)!==r;)e.push(n._);for(n=h(e),s=0;s<a;++s)(e=t[s]).x-=n.x,e.y-=n.y;return n.r}function T(t){if("function"!=typeof t)throw new Error;return t}function M(){return 0}function A(t){return function(){return t}}function S(t){return Math.sqrt(t.value)}function E(t){return function(e){e.children||(e.r=Math.max(0,+t(e)||0))}}function L(t,e){return function(r){if(n=r.children){var n,a,i,o=n.length,s=t(r)*e||0;if(s)for(a=0;a<o;++a)n[a].r+=s;if(i=k(n),s)for(a=0;a<o;++a)n[a].r-=s;r.r=i+s}}}function C(t){return function(e){var r=e.parent;e.r*=t,r&&(e.x=r.x+t*e.x,e.y=r.y+t*e.y)}}function P(t){t.x0=Math.round(t.x0),t.y0=Math.round(t.y0),t.x1=Math.round(t.x1),t.y1=Math.round(t.y1)}function O(t,e,r,n,a){for(var i,o=t.children,s=-1,l=o.length,c=t.value&&(n-e)/t.value;++s<l;)(i=o[s]).y0=r,i.y1=a,i.x0=e,i.x1=e+=i.value*c}var z="$",I={depth:-1},D={};function R(t){return t.id}function F(t){return t.parentId}function B(t,e){return t.parent===e.parent?1:2}function N(t){var e=t.children;return e?e[0]:t.t}function j(t){var e=t.children;return e?e[e.length-1]:t.t}function V(t,e,r){var n=r/(e.i-t.i);e.c-=n,e.s+=r,t.c+=n,e.z+=r,e.m+=r}function U(t,e,r){return t.a.parent===e.parent?t.a:r}function q(t,e){this._=t,this.parent=null,this.children=null,this.A=null,this.a=this,this.z=0,this.m=0,this.c=0,this.s=0,this.t=null,this.i=e}function H(t,e,r,n,a){for(var i,o=t.children,s=-1,l=o.length,c=t.value&&(a-r)/t.value;++s<l;)(i=o[s]).x0=e,i.x1=n,i.y0=r,i.y1=r+=i.value*c}q.prototype=Object.create(c.prototype);var G=(1+Math.sqrt(5))/2;function Y(t,e,r,n,a,i){for(var o,s,l,c,u,h,f,p,d,g,v,m=[],y=e.children,x=0,b=0,_=y.length,w=e.value;x<_;){l=a-r,c=i-n;do{u=y[b++].value}while(!u&&b<_);for(h=f=u,v=u*u*(g=Math.max(c/l,l/c)/(w*t)),d=Math.max(f/v,v/h);b<_;++b){if(u+=s=y[b].value,s<h&&(h=s),s>f&&(f=s),v=u*u*g,(p=Math.max(f/v,v/h))>d){u-=s;break}d=p}m.push(o={value:u,dice:l<c,children:y.slice(x,b)}),o.dice?O(o,r,n,a,w?n+=c*u/w:i):H(o,r,n,w?r+=l*u/w:a,i),w-=u,x=b}return m}var W=function t(e){function r(t,r,n,a,i){Y(e,t,r,n,a,i)}return r.ratio=function(e){return t((e=+e)>1?e:1)},r}(G),X=function t(e){function r(t,r,n,a,i){if((o=t._squarify)&&o.ratio===e)for(var o,s,l,c,u,h=-1,f=o.length,p=t.value;++h<f;){for(l=(s=o[h]).children,c=s.value=0,u=l.length;c<u;++c)s.value+=l[c].value;s.dice?O(s,r,n,a,n+=(i-n)*s.value/p):H(s,r,n,r+=(a-r)*s.value/p,i),p-=s.value}else t._squarify=o=Y(e,t,r,n,a,i),o.ratio=e}return r.ratio=function(e){return t((e=+e)>1?e:1)},r}(G);t.cluster=function(){var t=e,a=1,i=1,o=!1;function s(e){var s,l=0;e.eachAfter(function(e){var a=e.children;a?(e.x=function(t){return t.reduce(r,0)/t.length}(a),e.y=function(t){return 1+t.reduce(n,0)}(a)):(e.x=s?l+=t(e,s):0,e.y=0,s=e)});var c=function(t){for(var e;e=t.children;)t=e[0];return t}(e),u=function(t){for(var e;e=t.children;)t=e[e.length-1];return t}(e),h=c.x-t(c,u)/2,f=u.x+t(u,c)/2;return e.eachAfter(o?function(t){t.x=(t.x-e.x)*a,t.y=(e.y-t.y)*i}:function(t){t.x=(t.x-h)/(f-h)*a,t.y=(1-(e.y?t.y/e.y:1))*i})}return s.separation=function(e){return arguments.length?(t=e,s):t},s.size=function(t){return arguments.length?(o=!1,a=+t[0],i=+t[1],s):o?null:[a,i]},s.nodeSize=function(t){return arguments.length?(o=!0,a=+t[0],i=+t[1],s):o?[a,i]:null},s},t.hierarchy=i,t.pack=function(){var t=null,e=1,r=1,n=M;function a(a){return a.x=e/2,a.y=r/2,t?a.eachBefore(E(t)).eachAfter(L(n,.5)).eachBefore(C(1)):a.eachBefore(E(S)).eachAfter(L(M,1)).eachAfter(L(n,a.r/Math.min(e,r))).eachBefore(C(Math.min(e,r)/(2*a.r))),a}return a.radius=function(e){return arguments.length?(t=null==(r=e)?null:T(r),a):t;var r},a.size=function(t){return arguments.length?(e=+t[0],r=+t[1],a):[e,r]},a.padding=function(t){return arguments.length?(n="function"==typeof t?t:A(+t),a):n},a},t.packEnclose=h,t.packSiblings=function(t){return k(t),t},t.partition=function(){var t=1,e=1,r=0,n=!1;function a(a){var i=a.height+1;return a.x0=a.y0=r,a.x1=t,a.y1=e/i,a.eachBefore(function(t,e){return function(n){n.children&&O(n,n.x0,t*(n.depth+1)/e,n.x1,t*(n.depth+2)/e);var a=n.x0,i=n.y0,o=n.x1-r,s=n.y1-r;o<a&&(a=o=(a+o)/2),s<i&&(i=s=(i+s)/2),n.x0=a,n.y0=i,n.x1=o,n.y1=s}}(e,i)),n&&a.eachBefore(P),a}return a.round=function(t){return arguments.length?(n=!!t,a):n},a.size=function(r){return arguments.length?(t=+r[0],e=+r[1],a):[t,e]},a.padding=function(t){return arguments.length?(r=+t,a):r},a},t.stratify=function(){var t=R,e=F;function r(r){var n,a,i,o,s,u,h,f=r.length,p=new Array(f),d={};for(a=0;a<f;++a)n=r[a],s=p[a]=new c(n),null!=(u=t(n,a,r))&&(u+="")&&(d[h=z+(s.id=u)]=h in d?D:s);for(a=0;a<f;++a)if(s=p[a],null!=(u=e(r[a],a,r))&&(u+="")){if(!(o=d[z+u]))throw new Error("missing: "+u);if(o===D)throw new Error("ambiguous: "+u);o.children?o.children.push(s):o.children=[s],s.parent=o}else{if(i)throw new Error("multiple roots");i=s}if(!i)throw new Error("no root");if(i.parent=I,i.eachBefore(function(t){t.depth=t.parent.depth+1,--f}).eachBefore(l),i.parent=null,f>0)throw new Error("cycle");return i}return r.id=function(e){return arguments.length?(t=T(e),r):t},r.parentId=function(t){return arguments.length?(e=T(t),r):e},r},t.tree=function(){var t=B,e=1,r=1,n=null;function a(a){var l=function(t){for(var e,r,n,a,i,o=new q(t,0),s=[o];e=s.pop();)if(n=e._.children)for(e.children=new Array(i=n.length),a=i-1;a>=0;--a)s.push(r=e.children[a]=new q(n[a],a)),r.parent=e;return(o.parent=new q(null,0)).children=[o],o}(a);if(l.eachAfter(i),l.parent.m=-l.z,l.eachBefore(o),n)a.eachBefore(s);else{var c=a,u=a,h=a;a.eachBefore(function(t){t.x<c.x&&(c=t),t.x>u.x&&(u=t),t.depth>h.depth&&(h=t)});var f=c===u?1:t(c,u)/2,p=f-c.x,d=e/(u.x+f+p),g=r/(h.depth||1);a.eachBefore(function(t){t.x=(t.x+p)*d,t.y=t.depth*g})}return a}function i(e){var r=e.children,n=e.parent.children,a=e.i?n[e.i-1]:null;if(r){!function(t){for(var e,r=0,n=0,a=t.children,i=a.length;--i>=0;)(e=a[i]).z+=r,e.m+=r,r+=e.s+(n+=e.c)}(e);var i=(r[0].z+r[r.length-1].z)/2;a?(e.z=a.z+t(e._,a._),e.m=e.z-i):e.z=i}else a&&(e.z=a.z+t(e._,a._));e.parent.A=function(e,r,n){if(r){for(var a,i=e,o=e,s=r,l=i.parent.children[0],c=i.m,u=o.m,h=s.m,f=l.m;s=j(s),i=N(i),s&&i;)l=N(l),(o=j(o)).a=e,(a=s.z+h-i.z-c+t(s._,i._))>0&&(V(U(s,e,n),e,a),c+=a,u+=a),h+=s.m,c+=i.m,f+=l.m,u+=o.m;s&&!j(o)&&(o.t=s,o.m+=h-u),i&&!N(l)&&(l.t=i,l.m+=c-f,n=e)}return n}(e,a,e.parent.A||n[0])}function o(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function s(t){t.x*=e,t.y=t.depth*r}return a.separation=function(e){return arguments.length?(t=e,a):t},a.size=function(t){return arguments.length?(n=!1,e=+t[0],r=+t[1],a):n?null:[e,r]},a.nodeSize=function(t){return arguments.length?(n=!0,e=+t[0],r=+t[1],a):n?[e,r]:null},a},t.treemap=function(){var t=W,e=!1,r=1,n=1,a=[0],i=M,o=M,s=M,l=M,c=M;function u(t){return t.x0=t.y0=0,t.x1=r,t.y1=n,t.eachBefore(h),a=[0],e&&t.eachBefore(P),t}function h(e){var r=a[e.depth],n=e.x0+r,u=e.y0+r,h=e.x1-r,f=e.y1-r;h<n&&(n=h=(n+h)/2),f<u&&(u=f=(u+f)/2),e.x0=n,e.y0=u,e.x1=h,e.y1=f,e.children&&(r=a[e.depth+1]=i(e)/2,n+=c(e)-r,u+=o(e)-r,(h-=s(e)-r)<n&&(n=h=(n+h)/2),(f-=l(e)-r)<u&&(u=f=(u+f)/2),t(e,n,u,h,f))}return u.round=function(t){return arguments.length?(e=!!t,u):e},u.size=function(t){return arguments.length?(r=+t[0],n=+t[1],u):[r,n]},u.tile=function(e){return arguments.length?(t=T(e),u):t},u.padding=function(t){return arguments.length?u.paddingInner(t).paddingOuter(t):u.paddingInner()},u.paddingInner=function(t){return arguments.length?(i="function"==typeof t?t:A(+t),u):i},u.paddingOuter=function(t){return arguments.length?u.paddingTop(t).paddingRight(t).paddingBottom(t).paddingLeft(t):u.paddingTop()},u.paddingTop=function(t){return arguments.length?(o="function"==typeof t?t:A(+t),u):o},u.paddingRight=function(t){return arguments.length?(s="function"==typeof t?t:A(+t),u):s},u.paddingBottom=function(t){return arguments.length?(l="function"==typeof t?t:A(+t),u):l},u.paddingLeft=function(t){return arguments.length?(c="function"==typeof t?t:A(+t),u):c},u},t.treemapBinary=function(t,e,r,n,a){var i,o,s=t.children,l=s.length,c=new Array(l+1);for(c[0]=o=i=0;i<l;++i)c[i+1]=o+=s[i].value;!function t(e,r,n,a,i,o,l){if(e>=r-1){var u=s[e];return u.x0=a,u.y0=i,u.x1=o,void(u.y1=l)}for(var h=c[e],f=n/2+h,p=e+1,d=r-1;p<d;){var g=p+d>>>1;c[g]<f?p=g+1:d=g}f-c[p-1]<c[p]-f&&e+1<p&&--p;var v=c[p]-h,m=n-v;if(o-a>l-i){var y=(a*m+o*v)/n;t(e,p,v,a,i,y,l),t(p,r,m,y,i,o,l)}else{var x=(i*m+l*v)/n;t(e,p,v,a,i,o,x),t(p,r,m,a,x,o,l)}}(0,l,t.value,e,r,n,a)},t.treemapDice=O,t.treemapResquarify=X,t.treemapSlice=H,t.treemapSliceDice=function(t,e,r,n,a){(1&t.depth?H:O)(t,e,r,n,a)},t.treemapSquarify=W,Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:(n=n||self).d3=n.d3||{})},{}],160:[function(t,e,r){var n,a;n=this,a=function(t,e){"use strict";function r(t,e,r,n,a){var i=t*t,o=i*t;return((1-3*t+3*i-o)*e+(4-6*i+3*o)*r+(1+3*t+3*i-3*o)*n+o*a)/6}function n(t){var e=t.length-1;return function(n){var a=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[a],o=t[a+1],s=a>0?t[a-1]:2*i-o,l=a<e-1?t[a+2]:2*o-i;return r((n-a/e)*e,s,i,o,l)}}function a(t){var e=t.length;return function(n){var a=Math.floor(((n%=1)<0?++n:n)*e),i=t[(a+e-1)%e],o=t[a%e],s=t[(a+1)%e],l=t[(a+2)%e];return r((n-a/e)*e,i,o,s,l)}}function i(t){return function(){return t}}function o(t,e){return function(r){return t+r*e}}function s(t,e){var r=e-t;return r?o(t,r>180||r<-180?r-360*Math.round(r/360):r):i(isNaN(t)?e:t)}function l(t){return 1==(t=+t)?c:function(e,r){return r-e?function(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}(e,r,t):i(isNaN(e)?r:e)}}function c(t,e){var r=e-t;return r?o(t,r):i(isNaN(t)?e:t)}var u=function t(r){var n=l(r);function a(t,r){var a=n((t=e.rgb(t)).r,(r=e.rgb(r)).r),i=n(t.g,r.g),o=n(t.b,r.b),s=c(t.opacity,r.opacity);return function(e){return t.r=a(e),t.g=i(e),t.b=o(e),t.opacity=s(e),t+""}}return a.gamma=t,a}(1);function h(t){return function(r){var n,a,i=r.length,o=new Array(i),s=new Array(i),l=new Array(i);for(n=0;n<i;++n)a=e.rgb(r[n]),o[n]=a.r||0,s[n]=a.g||0,l[n]=a.b||0;return o=t(o),s=t(s),l=t(l),a.opacity=1,function(t){return a.r=o(t),a.g=s(t),a.b=l(t),a+""}}}var f=h(n),p=h(a);function d(t,e){e||(e=[]);var r,n=t?Math.min(e.length,t.length):0,a=e.slice();return function(i){for(r=0;r<n;++r)a[r]=t[r]*(1-i)+e[r]*i;return a}}function g(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}function v(t,e){var r,n=e?e.length:0,a=t?Math.min(n,t.length):0,i=new Array(a),o=new Array(n);for(r=0;r<a;++r)i[r]=k(t[r],e[r]);for(;r<n;++r)o[r]=e[r];return function(t){for(r=0;r<a;++r)o[r]=i[r](t);return o}}function m(t,e){var r=new Date;return t=+t,e=+e,function(n){return r.setTime(t*(1-n)+e*n),r}}function y(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}function x(t,e){var r,n={},a={};for(r in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)r in t?n[r]=k(t[r],e[r]):a[r]=e[r];return function(t){for(r in n)a[r]=n[r](t);return a}}var b=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,_=new RegExp(b.source,"g");function w(t,e){var r,n,a,i=b.lastIndex=_.lastIndex=0,o=-1,s=[],l=[];for(t+="",e+="";(r=b.exec(t))&&(n=_.exec(e));)(a=n.index)>i&&(a=e.slice(i,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:y(r,n)})),i=_.lastIndex;return i<e.length&&(a=e.slice(i),s[o]?s[o]+=a:s[++o]=a),s.length<2?l[0]?function(t){return function(e){return t(e)+""}}(l[0].x):function(t){return function(){return t}}(e):(e=l.length,function(t){for(var r,n=0;n<e;++n)s[(r=l[n]).i]=r.x(t);return s.join("")})}function k(t,r){var n,a=typeof r;return null==r||"boolean"===a?i(r):("number"===a?y:"string"===a?(n=e.color(r))?(r=n,u):w:r instanceof e.color?u:r instanceof Date?m:g(r)?d:Array.isArray(r)?v:"function"!=typeof r.valueOf&&"function"!=typeof r.toString||isNaN(r)?x:y)(t,r)}var T,M,A,S,E=180/Math.PI,L={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function C(t,e,r,n,a,i){var o,s,l;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(l=t*r+e*n)&&(r-=t*l,n-=e*l),(s=Math.sqrt(r*r+n*n))&&(r/=s,n/=s,l/=s),t*n<e*r&&(t=-t,e=-e,l=-l,o=-o),{translateX:a,translateY:i,rotate:Math.atan2(e,t)*E,skewX:Math.atan(l)*E,scaleX:o,scaleY:s}}function P(t,e,r,n){function a(t){return t.length?t.pop()+" ":""}return function(i,o){var s=[],l=[];return i=t(i),o=t(o),function(t,n,a,i,o,s){if(t!==a||n!==i){var l=o.push("translate(",null,e,null,r);s.push({i:l-4,x:y(t,a)},{i:l-2,x:y(n,i)})}else(a||i)&&o.push("translate("+a+e+i+r)}(i.translateX,i.translateY,o.translateX,o.translateY,s,l),function(t,e,r,i){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),i.push({i:r.push(a(r)+"rotate(",null,n)-2,x:y(t,e)})):e&&r.push(a(r)+"rotate("+e+n)}(i.rotate,o.rotate,s,l),function(t,e,r,i){t!==e?i.push({i:r.push(a(r)+"skewX(",null,n)-2,x:y(t,e)}):e&&r.push(a(r)+"skewX("+e+n)}(i.skewX,o.skewX,s,l),function(t,e,r,n,i,o){if(t!==r||e!==n){var s=i.push(a(i)+"scale(",null,",",null,")");o.push({i:s-4,x:y(t,r)},{i:s-2,x:y(e,n)})}else 1===r&&1===n||i.push(a(i)+"scale("+r+","+n+")")}(i.scaleX,i.scaleY,o.scaleX,o.scaleY,s,l),i=o=null,function(t){for(var e,r=-1,n=l.length;++r<n;)s[(e=l[r]).i]=e.x(t);return s.join("")}}}var O=P(function(t){return"none"===t?L:(T||(T=document.createElement("DIV"),M=document.documentElement,A=document.defaultView),T.style.transform=t,t=A.getComputedStyle(M.appendChild(T),null).getPropertyValue("transform"),M.removeChild(T),C(+(t=t.slice(7,-1).split(","))[0],+t[1],+t[2],+t[3],+t[4],+t[5]))},"px, ","px)","deg)"),z=P(function(t){return null==t?L:(S||(S=document.createElementNS("http://www.w3.org/2000/svg","g")),S.setAttribute("transform",t),(t=S.transform.baseVal.consolidate())?C((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):L)},", ",")",")"),I=Math.SQRT2,D=2,R=4,F=1e-12;function B(t){return((t=Math.exp(t))+1/t)/2}function N(t){return function(r,n){var a=t((r=e.hsl(r)).h,(n=e.hsl(n)).h),i=c(r.s,n.s),o=c(r.l,n.l),s=c(r.opacity,n.opacity);return function(t){return r.h=a(t),r.s=i(t),r.l=o(t),r.opacity=s(t),r+""}}}var j=N(s),V=N(c);function U(t){return function(r,n){var a=t((r=e.hcl(r)).h,(n=e.hcl(n)).h),i=c(r.c,n.c),o=c(r.l,n.l),s=c(r.opacity,n.opacity);return function(t){return r.h=a(t),r.c=i(t),r.l=o(t),r.opacity=s(t),r+""}}}var q=U(s),H=U(c);function G(t){return function r(n){function a(r,a){var i=t((r=e.cubehelix(r)).h,(a=e.cubehelix(a)).h),o=c(r.s,a.s),s=c(r.l,a.l),l=c(r.opacity,a.opacity);return function(t){return r.h=i(t),r.s=o(t),r.l=s(Math.pow(t,n)),r.opacity=l(t),r+""}}return n=+n,a.gamma=r,a}(1)}var Y=G(s),W=G(c);t.interpolate=k,t.interpolateArray=function(t,e){return(g(e)?d:v)(t,e)},t.interpolateBasis=n,t.interpolateBasisClosed=a,t.interpolateCubehelix=Y,t.interpolateCubehelixLong=W,t.interpolateDate=m,t.interpolateDiscrete=function(t){var e=t.length;return function(r){return t[Math.max(0,Math.min(e-1,Math.floor(r*e)))]}},t.interpolateHcl=q,t.interpolateHclLong=H,t.interpolateHsl=j,t.interpolateHslLong=V,t.interpolateHue=function(t,e){var r=s(+t,+e);return function(t){var e=r(t);return e-360*Math.floor(e/360)}},t.interpolateLab=function(t,r){var n=c((t=e.lab(t)).l,(r=e.lab(r)).l),a=c(t.a,r.a),i=c(t.b,r.b),o=c(t.opacity,r.opacity);return function(e){return t.l=n(e),t.a=a(e),t.b=i(e),t.opacity=o(e),t+""}},t.interpolateNumber=y,t.interpolateNumberArray=d,t.interpolateObject=x,t.interpolateRgb=u,t.interpolateRgbBasis=f,t.interpolateRgbBasisClosed=p,t.interpolateRound=function(t,e){return t=+t,e=+e,function(r){return Math.round(t*(1-r)+e*r)}},t.interpolateString=w,t.interpolateTransformCss=O,t.interpolateTransformSvg=z,t.interpolateZoom=function(t,e){var r,n,a=t[0],i=t[1],o=t[2],s=e[0],l=e[1],c=e[2],u=s-a,h=l-i,f=u*u+h*h;if(f<F)n=Math.log(c/o)/I,r=function(t){return[a+t*u,i+t*h,o*Math.exp(I*t*n)]};else{var p=Math.sqrt(f),d=(c*c-o*o+R*f)/(2*o*D*p),g=(c*c-o*o-R*f)/(2*c*D*p),v=Math.log(Math.sqrt(d*d+1)-d),m=Math.log(Math.sqrt(g*g+1)-g);n=(m-v)/I,r=function(t){var e,r=t*n,s=B(v),l=o/(D*p)*(s*(e=I*r+v,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(v));return[a+l*u,i+l*h,o*s/B(I*r+v)]}}return r.duration=1e3*n,r},t.piecewise=function(t,e){for(var r=0,n=e.length-1,a=e[0],i=new Array(n<0?0:n);r<n;)i[r]=t(a,a=e[++r]);return function(t){var e=Math.max(0,Math.min(n-1,Math.floor(t*=n)));return i[e](t-e)}},t.quantize=function(t,e){for(var r=new Array(e),n=0;n<e;++n)r[n]=t(n/(e-1));return r},Object.defineProperty(t,"__esModule",{value:!0})},"object"==typeof r&&"undefined"!=typeof e?a(r,t("d3-color")):a((n=n||self).d3=n.d3||{},n.d3)},{"d3-color":156}],161:[function(t,e,r){var n;n=this,function(t){"use strict";var e=Math.PI,r=2*e,n=r-1e-6;function a(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function i(){return new a}a.prototype=i.prototype={constructor:a,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,r,n){this._+="Q"+ +t+","+ +e+","+(this._x1=+r)+","+(this._y1=+n)},bezierCurveTo:function(t,e,r,n,a,i){this._+="C"+ +t+","+ +e+","+ +r+","+ +n+","+(this._x1=+a)+","+(this._y1=+i)},arcTo:function(t,r,n,a,i){t=+t,r=+r,n=+n,a=+a,i=+i;var o=this._x1,s=this._y1,l=n-t,c=a-r,u=o-t,h=s-r,f=u*u+h*h;if(i<0)throw new Error("negative radius: "+i);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=r);else if(f>1e-6)if(Math.abs(h*l-c*u)>1e-6&&i){var p=n-o,d=a-s,g=l*l+c*c,v=p*p+d*d,m=Math.sqrt(g),y=Math.sqrt(f),x=i*Math.tan((e-Math.acos((g+f-v)/(2*m*y)))/2),b=x/y,_=x/m;Math.abs(b-1)>1e-6&&(this._+="L"+(t+b*u)+","+(r+b*h)),this._+="A"+i+","+i+",0,0,"+ +(h*p>u*d)+","+(this._x1=t+_*l)+","+(this._y1=r+_*c)}else this._+="L"+(this._x1=t)+","+(this._y1=r);else;},arc:function(t,a,i,o,s,l){t=+t,a=+a;var c=(i=+i)*Math.cos(o),u=i*Math.sin(o),h=t+c,f=a+u,p=1^l,d=l?o-s:s-o;if(i<0)throw new Error("negative radius: "+i);null===this._x1?this._+="M"+h+","+f:(Math.abs(this._x1-h)>1e-6||Math.abs(this._y1-f)>1e-6)&&(this._+="L"+h+","+f),i&&(d<0&&(d=d%r+r),d>n?this._+="A"+i+","+i+",0,1,"+p+","+(t-c)+","+(a-u)+"A"+i+","+i+",0,1,"+p+","+(this._x1=h)+","+(this._y1=f):d>1e-6&&(this._+="A"+i+","+i+",0,"+ +(d>=e)+","+p+","+(this._x1=t+i*Math.cos(s))+","+(this._y1=a+i*Math.sin(s))))},rect:function(t,e,r,n){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +r+"v"+ +n+"h"+-r+"Z"},toString:function(){return this._}},t.path=i,Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],162:[function(t,e,r){var n;n=this,function(t){"use strict";function e(t,e,r,n){if(isNaN(e)||isNaN(r))return t;var a,i,o,s,l,c,u,h,f,p=t._root,d={data:n},g=t._x0,v=t._y0,m=t._x1,y=t._y1;if(!p)return t._root=d,t;for(;p.length;)if((c=e>=(i=(g+m)/2))?g=i:m=i,(u=r>=(o=(v+y)/2))?v=o:y=o,a=p,!(p=p[h=u<<1|c]))return a[h]=d,t;if(s=+t._x.call(null,p.data),l=+t._y.call(null,p.data),e===s&&r===l)return d.next=p,a?a[h]=d:t._root=d,t;do{a=a?a[h]=new Array(4):t._root=new Array(4),(c=e>=(i=(g+m)/2))?g=i:m=i,(u=r>=(o=(v+y)/2))?v=o:y=o}while((h=u<<1|c)==(f=(l>=o)<<1|s>=i));return a[f]=p,a[h]=d,t}var r=function(t,e,r,n,a){this.node=t,this.x0=e,this.y0=r,this.x1=n,this.y1=a};function n(t){return t[0]}function a(t){return t[1]}function i(t,e,r){var i=new o(null==e?n:e,null==r?a:r,NaN,NaN,NaN,NaN);return null==t?i:i.addAll(t)}function o(t,e,r,n,a,i){this._x=t,this._y=e,this._x0=r,this._y0=n,this._x1=a,this._y1=i,this._root=void 0}function s(t){for(var e={data:t.data},r=e;t=t.next;)r=r.next={data:t.data};return e}var l=i.prototype=o.prototype;l.copy=function(){var t,e,r=new o(this._x,this._y,this._x0,this._y0,this._x1,this._y1),n=this._root;if(!n)return r;if(!n.length)return r._root=s(n),r;for(t=[{source:n,target:r._root=new Array(4)}];n=t.pop();)for(var a=0;a<4;++a)(e=n.source[a])&&(e.length?t.push({source:e,target:n.target[a]=new Array(4)}):n.target[a]=s(e));return r},l.add=function(t){var r=+this._x.call(null,t),n=+this._y.call(null,t);return e(this.cover(r,n),r,n,t)},l.addAll=function(t){var r,n,a,i,o=t.length,s=new Array(o),l=new Array(o),c=1/0,u=1/0,h=-1/0,f=-1/0;for(n=0;n<o;++n)isNaN(a=+this._x.call(null,r=t[n]))||isNaN(i=+this._y.call(null,r))||(s[n]=a,l[n]=i,a<c&&(c=a),a>h&&(h=a),i<u&&(u=i),i>f&&(f=i));for(h<c&&(c=this._x0,h=this._x1),f<u&&(u=this._y0,f=this._y1),this.cover(c,u).cover(h,f),n=0;n<o;++n)e(this,s[n],l[n],t[n]);return this},l.cover=function(t,e){if(isNaN(t=+t)||isNaN(e=+e))return this;var r=this._x0,n=this._y0,a=this._x1,i=this._y1;if(isNaN(r))a=(r=Math.floor(t))+1,i=(n=Math.floor(e))+1;else{if(!(r>t||t>a||n>e||e>i))return this;var o,s,l=a-r,c=this._root;switch(s=(e<(n+i)/2)<<1|t<(r+a)/2){case 0:do{(o=new Array(4))[s]=c,c=o}while(i=n+(l*=2),t>(a=r+l)||e>i);break;case 1:do{(o=new Array(4))[s]=c,c=o}while(i=n+(l*=2),(r=a-l)>t||e>i);break;case 2:do{(o=new Array(4))[s]=c,c=o}while(n=i-(l*=2),t>(a=r+l)||n>e);break;case 3:do{(o=new Array(4))[s]=c,c=o}while(n=i-(l*=2),(r=a-l)>t||n>e)}this._root&&this._root.length&&(this._root=c)}return this._x0=r,this._y0=n,this._x1=a,this._y1=i,this},l.data=function(){var t=[];return this.visit(function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)}),t},l.extent=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},l.find=function(t,e,n){var a,i,o,s,l,c,u,h=this._x0,f=this._y0,p=this._x1,d=this._y1,g=[],v=this._root;for(v&&g.push(new r(v,h,f,p,d)),null==n?n=1/0:(h=t-n,f=e-n,p=t+n,d=e+n,n*=n);c=g.pop();)if(!(!(v=c.node)||(i=c.x0)>p||(o=c.y0)>d||(s=c.x1)<h||(l=c.y1)<f))if(v.length){var m=(i+s)/2,y=(o+l)/2;g.push(new r(v[3],m,y,s,l),new r(v[2],i,y,m,l),new r(v[1],m,o,s,y),new r(v[0],i,o,m,y)),(u=(e>=y)<<1|t>=m)&&(c=g[g.length-1],g[g.length-1]=g[g.length-1-u],g[g.length-1-u]=c)}else{var x=t-+this._x.call(null,v.data),b=e-+this._y.call(null,v.data),_=x*x+b*b;if(_<n){var w=Math.sqrt(n=_);h=t-w,f=e-w,p=t+w,d=e+w,a=v.data}}return a},l.remove=function(t){if(isNaN(i=+this._x.call(null,t))||isNaN(o=+this._y.call(null,t)))return this;var e,r,n,a,i,o,s,l,c,u,h,f,p=this._root,d=this._x0,g=this._y0,v=this._x1,m=this._y1;if(!p)return this;if(p.length)for(;;){if((c=i>=(s=(d+v)/2))?d=s:v=s,(u=o>=(l=(g+m)/2))?g=l:m=l,e=p,!(p=p[h=u<<1|c]))return this;if(!p.length)break;(e[h+1&3]||e[h+2&3]||e[h+3&3])&&(r=e,f=h)}for(;p.data!==t;)if(n=p,!(p=p.next))return this;return(a=p.next)&&delete p.next,n?(a?n.next=a:delete n.next,this):e?(a?e[h]=a:delete e[h],(p=e[0]||e[1]||e[2]||e[3])&&p===(e[3]||e[2]||e[1]||e[0])&&!p.length&&(r?r[f]=p:this._root=p),this):(this._root=a,this)},l.removeAll=function(t){for(var e=0,r=t.length;e<r;++e)this.remove(t[e]);return this},l.root=function(){return this._root},l.size=function(){var t=0;return this.visit(function(e){if(!e.length)do{++t}while(e=e.next)}),t},l.visit=function(t){var e,n,a,i,o,s,l=[],c=this._root;for(c&&l.push(new r(c,this._x0,this._y0,this._x1,this._y1));e=l.pop();)if(!t(c=e.node,a=e.x0,i=e.y0,o=e.x1,s=e.y1)&&c.length){var u=(a+o)/2,h=(i+s)/2;(n=c[3])&&l.push(new r(n,u,h,o,s)),(n=c[2])&&l.push(new r(n,a,h,u,s)),(n=c[1])&&l.push(new r(n,u,i,o,h)),(n=c[0])&&l.push(new r(n,a,i,u,h))}return this},l.visitAfter=function(t){var e,n=[],a=[];for(this._root&&n.push(new r(this._root,this._x0,this._y0,this._x1,this._y1));e=n.pop();){var i=e.node;if(i.length){var o,s=e.x0,l=e.y0,c=e.x1,u=e.y1,h=(s+c)/2,f=(l+u)/2;(o=i[0])&&n.push(new r(o,s,l,h,f)),(o=i[1])&&n.push(new r(o,h,l,c,f)),(o=i[2])&&n.push(new r(o,s,f,h,u)),(o=i[3])&&n.push(new r(o,h,f,c,u))}a.push(e)}for(;e=a.pop();)t(e.node,e.x0,e.y0,e.x1,e.y1);return this},l.x=function(t){return arguments.length?(this._x=t,this):this._x},l.y=function(t){return arguments.length?(this._y=t,this):this._y},t.quadtree=i,Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],163:[function(t,e,r){var n,a;n=this,a=function(t,e){"use strict";function r(t){return function(){return t}}var n=Math.abs,a=Math.atan2,i=Math.cos,o=Math.max,s=Math.min,l=Math.sin,c=Math.sqrt,u=1e-12,h=Math.PI,f=h/2,p=2*h;function d(t){return t>=1?f:t<=-1?-f:Math.asin(t)}function g(t){return t.innerRadius}function v(t){return t.outerRadius}function m(t){return t.startAngle}function y(t){return t.endAngle}function x(t){return t&&t.padAngle}function b(t,e,r,n,a,i,s){var l=t-r,u=e-n,h=(s?i:-i)/c(l*l+u*u),f=h*u,p=-h*l,d=t+f,g=e+p,v=r+f,m=n+p,y=(d+v)/2,x=(g+m)/2,b=v-d,_=m-g,w=b*b+_*_,k=a-i,T=d*m-v*g,M=(_<0?-1:1)*c(o(0,k*k*w-T*T)),A=(T*_-b*M)/w,S=(-T*b-_*M)/w,E=(T*_+b*M)/w,L=(-T*b+_*M)/w,C=A-y,P=S-x,O=E-y,z=L-x;return C*C+P*P>O*O+z*z&&(A=E,S=L),{cx:A,cy:S,x01:-f,y01:-p,x11:A*(a/k-1),y11:S*(a/k-1)}}function _(t){this._context=t}function w(t){return new _(t)}function k(t){return t[0]}function T(t){return t[1]}function M(){var t=k,n=T,a=r(!0),i=null,o=w,s=null;function l(r){var l,c,u,h=r.length,f=!1;for(null==i&&(s=o(u=e.path())),l=0;l<=h;++l)!(l<h&&a(c=r[l],l,r))===f&&((f=!f)?s.lineStart():s.lineEnd()),f&&s.point(+t(c,l,r),+n(c,l,r));if(u)return s=null,u+""||null}return l.x=function(e){return arguments.length?(t="function"==typeof e?e:r(+e),l):t},l.y=function(t){return arguments.length?(n="function"==typeof t?t:r(+t),l):n},l.defined=function(t){return arguments.length?(a="function"==typeof t?t:r(!!t),l):a},l.curve=function(t){return arguments.length?(o=t,null!=i&&(s=o(i)),l):o},l.context=function(t){return arguments.length?(null==t?i=s=null:s=o(i=t),l):i},l}function A(){var t=k,n=null,a=r(0),i=T,o=r(!0),s=null,l=w,c=null;function u(r){var u,h,f,p,d,g=r.length,v=!1,m=new Array(g),y=new Array(g);for(null==s&&(c=l(d=e.path())),u=0;u<=g;++u){if(!(u<g&&o(p=r[u],u,r))===v)if(v=!v)h=u,c.areaStart(),c.lineStart();else{for(c.lineEnd(),c.lineStart(),f=u-1;f>=h;--f)c.point(m[f],y[f]);c.lineEnd(),c.areaEnd()}v&&(m[u]=+t(p,u,r),y[u]=+a(p,u,r),c.point(n?+n(p,u,r):m[u],i?+i(p,u,r):y[u]))}if(d)return c=null,d+""||null}function h(){return M().defined(o).curve(l).context(s)}return u.x=function(e){return arguments.length?(t="function"==typeof e?e:r(+e),n=null,u):t},u.x0=function(e){return arguments.length?(t="function"==typeof e?e:r(+e),u):t},u.x1=function(t){return arguments.length?(n=null==t?null:"function"==typeof t?t:r(+t),u):n},u.y=function(t){return arguments.length?(a="function"==typeof t?t:r(+t),i=null,u):a},u.y0=function(t){return arguments.length?(a="function"==typeof t?t:r(+t),u):a},u.y1=function(t){return arguments.length?(i=null==t?null:"function"==typeof t?t:r(+t),u):i},u.lineX0=u.lineY0=function(){return h().x(t).y(a)},u.lineY1=function(){return h().x(t).y(i)},u.lineX1=function(){return h().x(n).y(a)},u.defined=function(t){return arguments.length?(o="function"==typeof t?t:r(!!t),u):o},u.curve=function(t){return arguments.length?(l=t,null!=s&&(c=l(s)),u):l},u.context=function(t){return arguments.length?(null==t?s=c=null:c=l(s=t),u):s},u}function S(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function E(t){return t}_.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}};var L=P(w);function C(t){this._curve=t}function P(t){function e(e){return new C(t(e))}return e._curve=t,e}function O(t){var e=t.curve;return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t.curve=function(t){return arguments.length?e(P(t)):e()._curve},t}function z(){return O(M().curve(L))}function I(){var t=A().curve(L),e=t.curve,r=t.lineX0,n=t.lineX1,a=t.lineY0,i=t.lineY1;return t.angle=t.x,delete t.x,t.startAngle=t.x0,delete t.x0,t.endAngle=t.x1,delete t.x1,t.radius=t.y,delete t.y,t.innerRadius=t.y0,delete t.y0,t.outerRadius=t.y1,delete t.y1,t.lineStartAngle=function(){return O(r())},delete t.lineX0,t.lineEndAngle=function(){return O(n())},delete t.lineX1,t.lineInnerRadius=function(){return O(a())},delete t.lineY0,t.lineOuterRadius=function(){return O(i())},delete t.lineY1,t.curve=function(t){return arguments.length?e(P(t)):e()._curve},t}function D(t,e){return[(e=+e)*Math.cos(t-=Math.PI/2),e*Math.sin(t)]}C.prototype={areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};var R=Array.prototype.slice;function F(t){return t.source}function B(t){return t.target}function N(t){var n=F,a=B,i=k,o=T,s=null;function l(){var r,l=R.call(arguments),c=n.apply(this,l),u=a.apply(this,l);if(s||(s=r=e.path()),t(s,+i.apply(this,(l[0]=c,l)),+o.apply(this,l),+i.apply(this,(l[0]=u,l)),+o.apply(this,l)),r)return s=null,r+""||null}return l.source=function(t){return arguments.length?(n=t,l):n},l.target=function(t){return arguments.length?(a=t,l):a},l.x=function(t){return arguments.length?(i="function"==typeof t?t:r(+t),l):i},l.y=function(t){return arguments.length?(o="function"==typeof t?t:r(+t),l):o},l.context=function(t){return arguments.length?(s=null==t?null:t,l):s},l}function j(t,e,r,n,a){t.moveTo(e,r),t.bezierCurveTo(e=(e+n)/2,r,e,a,n,a)}function V(t,e,r,n,a){t.moveTo(e,r),t.bezierCurveTo(e,r=(r+a)/2,n,r,n,a)}function U(t,e,r,n,a){var i=D(e,r),o=D(e,r=(r+a)/2),s=D(n,r),l=D(n,a);t.moveTo(i[0],i[1]),t.bezierCurveTo(o[0],o[1],s[0],s[1],l[0],l[1])}var q={draw:function(t,e){var r=Math.sqrt(e/h);t.moveTo(r,0),t.arc(0,0,r,0,p)}},H={draw:function(t,e){var r=Math.sqrt(e/5)/2;t.moveTo(-3*r,-r),t.lineTo(-r,-r),t.lineTo(-r,-3*r),t.lineTo(r,-3*r),t.lineTo(r,-r),t.lineTo(3*r,-r),t.lineTo(3*r,r),t.lineTo(r,r),t.lineTo(r,3*r),t.lineTo(-r,3*r),t.lineTo(-r,r),t.lineTo(-3*r,r),t.closePath()}},G=Math.sqrt(1/3),Y=2*G,W={draw:function(t,e){var r=Math.sqrt(e/Y),n=r*G;t.moveTo(0,-r),t.lineTo(n,0),t.lineTo(0,r),t.lineTo(-n,0),t.closePath()}},X=Math.sin(h/10)/Math.sin(7*h/10),Z=Math.sin(p/10)*X,J=-Math.cos(p/10)*X,K={draw:function(t,e){var r=Math.sqrt(.8908130915292852*e),n=Z*r,a=J*r;t.moveTo(0,-r),t.lineTo(n,a);for(var i=1;i<5;++i){var o=p*i/5,s=Math.cos(o),l=Math.sin(o);t.lineTo(l*r,-s*r),t.lineTo(s*n-l*a,l*n+s*a)}t.closePath()}},Q={draw:function(t,e){var r=Math.sqrt(e),n=-r/2;t.rect(n,n,r,r)}},$=Math.sqrt(3),tt={draw:function(t,e){var r=-Math.sqrt(e/(3*$));t.moveTo(0,2*r),t.lineTo(-$*r,-r),t.lineTo($*r,-r),t.closePath()}},et=-.5,rt=Math.sqrt(3)/2,nt=1/Math.sqrt(12),at=3*(nt/2+1),it={draw:function(t,e){var r=Math.sqrt(e/at),n=r/2,a=r*nt,i=n,o=r*nt+r,s=-i,l=o;t.moveTo(n,a),t.lineTo(i,o),t.lineTo(s,l),t.lineTo(et*n-rt*a,rt*n+et*a),t.lineTo(et*i-rt*o,rt*i+et*o),t.lineTo(et*s-rt*l,rt*s+et*l),t.lineTo(et*n+rt*a,et*a-rt*n),t.lineTo(et*i+rt*o,et*o-rt*i),t.lineTo(et*s+rt*l,et*l-rt*s),t.closePath()}},ot=[q,H,W,Q,K,tt,it];function st(){}function lt(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function ct(t){this._context=t}function ut(t){this._context=t}function ht(t){this._context=t}function ft(t,e){this._basis=new ct(t),this._beta=e}ct.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:lt(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:lt(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ut.prototype={areaStart:st,areaEnd:st,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x2=t,this._y2=e;break;case 1:this._point=2,this._x3=t,this._y3=e;break;case 2:this._point=3,this._x4=t,this._y4=e,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:lt(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ht.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var r=(this._x0+4*this._x1+t)/6,n=(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point=4;default:lt(this,t,e)}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e}},ft.prototype={lineStart:function(){this._x=[],this._y=[],this._basis.lineStart()},lineEnd:function(){var t=this._x,e=this._y,r=t.length-1;if(r>0)for(var n,a=t[0],i=e[0],o=t[r]-a,s=e[r]-i,l=-1;++l<=r;)n=l/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(a+n*o),this._beta*e[l]+(1-this._beta)*(i+n*s));this._x=this._y=null,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var pt=function t(e){function r(t){return 1===e?new ct(t):new ft(t,e)}return r.beta=function(e){return t(+e)},r}(.85);function dt(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function gt(t,e){this._context=t,this._k=(1-e)/6}gt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:dt(this,this._x1,this._y1)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2,this._x1=t,this._y1=e;break;case 2:this._point=3;default:dt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var vt=function t(e){function r(t){return new gt(t,e)}return r.tension=function(e){return t(+e)},r}(0);function mt(t,e){this._context=t,this._k=(1-e)/6}mt.prototype={areaStart:st,areaEnd:st,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:dt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var yt=function t(e){function r(t){return new mt(t,e)}return r.tension=function(e){return t(+e)},r}(0);function xt(t,e){this._context=t,this._k=(1-e)/6}xt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:dt(this,t,e)}this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var bt=function t(e){function r(t){return new xt(t,e)}return r.tension=function(e){return t(+e)},r}(0);function _t(t,e,r){var n=t._x1,a=t._y1,i=t._x2,o=t._y2;if(t._l01_a>u){var s=2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l=3*t._l01_a*(t._l01_a+t._l12_a);n=(n*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,a=(a*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a>u){var c=2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,h=3*t._l23_a*(t._l23_a+t._l12_a);i=(i*c+t._x1*t._l23_2a-e*t._l12_2a)/h,o=(o*c+t._y1*t._l23_2a-r*t._l12_2a)/h}t._context.bezierCurveTo(n,a,i,o,t._x2,t._y2)}function wt(t,e){this._context=t,this._alpha=e}wt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3;default:_t(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var kt=function t(e){function r(t){return e?new wt(t,e):new gt(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function Tt(t,e){this._context=t,this._alpha=e}Tt.prototype={areaStart:st,areaEnd:st,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._x5=this._y0=this._y1=this._y2=this._y3=this._y4=this._y5=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1,this._x3=t,this._y3=e;break;case 1:this._point=2,this._context.moveTo(this._x4=t,this._y4=e);break;case 2:this._point=3,this._x5=t,this._y5=e;break;default:_t(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var Mt=function t(e){function r(t){return e?new Tt(t,e):new mt(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function At(t,e){this._context=t,this._alpha=e}At.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._x2=this._y0=this._y1=this._y2=NaN,this._l01_a=this._l12_a=this._l23_a=this._l01_2a=this._l12_2a=this._l23_2a=this._point=0},lineEnd:function(){(this._line||0!==this._line&&3===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){if(t=+t,e=+e,this._point){var r=this._x2-t,n=this._y2-e;this._l23_a=Math.sqrt(this._l23_2a=Math.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point=4;default:_t(this,t,e)}this._l01_a=this._l12_a,this._l12_a=this._l23_a,this._l01_2a=this._l12_2a,this._l12_2a=this._l23_2a,this._x0=this._x1,this._x1=this._x2,this._x2=t,this._y0=this._y1,this._y1=this._y2,this._y2=e}};var St=function t(e){function r(t){return e?new At(t,e):new xt(t,0)}return r.alpha=function(e){return t(+e)},r}(.5);function Et(t){this._context=t}function Lt(t){return t<0?-1:1}function Ct(t,e,r){var n=t._x1-t._x0,a=e-t._x1,i=(t._y1-t._y0)/(n||a<0&&-0),o=(r-t._y1)/(a||n<0&&-0),s=(i*a+o*n)/(n+a);return(Lt(i)+Lt(o))*Math.min(Math.abs(i),Math.abs(o),.5*Math.abs(s))||0}function Pt(t,e){var r=t._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function Ot(t,e,r){var n=t._x0,a=t._y0,i=t._x1,o=t._y1,s=(i-n)/3;t._context.bezierCurveTo(n+s,a+s*e,i-s,o-s*r,i,o)}function zt(t){this._context=t}function It(t){this._context=new Dt(t)}function Dt(t){this._context=t}function Rt(t){this._context=t}function Ft(t){var e,r,n=t.length-1,a=new Array(n),i=new Array(n),o=new Array(n);for(a[0]=0,i[0]=2,o[0]=t[0]+2*t[1],e=1;e<n-1;++e)a[e]=1,i[e]=4,o[e]=4*t[e]+2*t[e+1];for(a[n-1]=2,i[n-1]=7,o[n-1]=8*t[n-1]+t[n],e=1;e<n;++e)r=a[e]/i[e-1],i[e]-=r,o[e]-=r*o[e-1];for(a[n-1]=o[n-1]/i[n-1],e=n-2;e>=0;--e)a[e]=(o[e]-a[e+1])/i[e];for(i[n-1]=(t[n]+a[n-1])/2,e=0;e<n-1;++e)i[e]=2*t[e+1]-a[e+1];return[a,i]}function Bt(t,e){this._context=t,this._t=e}function Nt(t,e){if((a=t.length)>1)for(var r,n,a,i=1,o=t[e[0]],s=o.length;i<a;++i)for(n=o,o=t[e[i]],r=0;r<s;++r)o[r][1]+=o[r][0]=isNaN(n[r][1])?n[r][0]:n[r][1]}function jt(t){for(var e=t.length,r=new Array(e);--e>=0;)r[e]=e;return r}function Vt(t,e){return t[e]}function Ut(t){var e=t.map(qt);return jt(t).sort(function(t,r){return e[t]-e[r]})}function qt(t){for(var e,r=-1,n=0,a=t.length,i=-1/0;++r<a;)(e=+t[r][1])>i&&(i=e,n=r);return n}function Ht(t){var e=t.map(Gt);return jt(t).sort(function(t,r){return e[t]-e[r]})}function Gt(t){for(var e,r=0,n=-1,a=t.length;++n<a;)(e=+t[n][1])&&(r+=e);return r}Et.prototype={areaStart:st,areaEnd:st,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(t,e){t=+t,e=+e,this._point?this._context.lineTo(t,e):(this._point=1,this._context.moveTo(t,e))}},zt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Ot(this,this._t0,Pt(this,this._t0))}(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){var r=NaN;if(e=+e,(t=+t)!==this._x1||e!==this._y1){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;break;case 2:this._point=3,Ot(this,Pt(this,r=Ct(this,t,e)),r);break;default:Ot(this,this._t0,r=Ct(this,t,e))}this._x0=this._x1,this._x1=t,this._y0=this._y1,this._y1=e,this._t0=r}}},(It.prototype=Object.create(zt.prototype)).point=function(t,e){zt.prototype.point.call(this,e,t)},Dt.prototype={moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,r,n,a,i){this._context.bezierCurveTo(e,t,n,r,i,a)}},Rt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var t=this._x,e=this._y,r=t.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2===r)this._context.lineTo(t[1],e[1]);else for(var n=Ft(t),a=Ft(e),i=0,o=1;o<r;++i,++o)this._context.bezierCurveTo(n[0][i],a[0][i],n[1][i],a[1][i],t[o],e[o]);(this._line||0!==this._line&&1===r)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(t,e){this._x.push(+t),this._y.push(+e)}},Bt.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&2===this._point&&this._context.lineTo(this._x,this._y),(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:if(this._t<=0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r=this._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}}this._x=t,this._y=e}},t.arc=function(){var t=g,o=v,_=r(0),w=null,k=m,T=y,M=x,A=null;function S(){var r,g,v,m=+t.apply(this,arguments),y=+o.apply(this,arguments),x=k.apply(this,arguments)-f,S=T.apply(this,arguments)-f,E=n(S-x),L=S>x;if(A||(A=r=e.path()),y<m&&(g=y,y=m,m=g),y>u)if(E>p-u)A.moveTo(y*i(x),y*l(x)),A.arc(0,0,y,x,S,!L),m>u&&(A.moveTo(m*i(S),m*l(S)),A.arc(0,0,m,S,x,L));else{var C,P,O=x,z=S,I=x,D=S,R=E,F=E,B=M.apply(this,arguments)/2,N=B>u&&(w?+w.apply(this,arguments):c(m*m+y*y)),j=s(n(y-m)/2,+_.apply(this,arguments)),V=j,U=j;if(N>u){var q=d(N/m*l(B)),H=d(N/y*l(B));(R-=2*q)>u?(I+=q*=L?1:-1,D-=q):(R=0,I=D=(x+S)/2),(F-=2*H)>u?(O+=H*=L?1:-1,z-=H):(F=0,O=z=(x+S)/2)}var G=y*i(O),Y=y*l(O),W=m*i(D),X=m*l(D);if(j>u){var Z,J=y*i(z),K=y*l(z),Q=m*i(I),$=m*l(I);if(E<h&&(Z=function(t,e,r,n,a,i,o,s){var l=r-t,c=n-e,h=o-a,f=s-i,p=f*l-h*c;if(!(p*p<u))return[t+(p=(h*(e-i)-f*(t-a))/p)*l,e+p*c]}(G,Y,Q,$,J,K,W,X))){var tt=G-Z[0],et=Y-Z[1],rt=J-Z[0],nt=K-Z[1],at=1/l(((v=(tt*rt+et*nt)/(c(tt*tt+et*et)*c(rt*rt+nt*nt)))>1?0:v<-1?h:Math.acos(v))/2),it=c(Z[0]*Z[0]+Z[1]*Z[1]);V=s(j,(m-it)/(at-1)),U=s(j,(y-it)/(at+1))}}F>u?U>u?(C=b(Q,$,G,Y,y,U,L),P=b(J,K,W,X,y,U,L),A.moveTo(C.cx+C.x01,C.cy+C.y01),U<j?A.arc(C.cx,C.cy,U,a(C.y01,C.x01),a(P.y01,P.x01),!L):(A.arc(C.cx,C.cy,U,a(C.y01,C.x01),a(C.y11,C.x11),!L),A.arc(0,0,y,a(C.cy+C.y11,C.cx+C.x11),a(P.cy+P.y11,P.cx+P.x11),!L),A.arc(P.cx,P.cy,U,a(P.y11,P.x11),a(P.y01,P.x01),!L))):(A.moveTo(G,Y),A.arc(0,0,y,O,z,!L)):A.moveTo(G,Y),m>u&&R>u?V>u?(C=b(W,X,J,K,m,-V,L),P=b(G,Y,Q,$,m,-V,L),A.lineTo(C.cx+C.x01,C.cy+C.y01),V<j?A.arc(C.cx,C.cy,V,a(C.y01,C.x01),a(P.y01,P.x01),!L):(A.arc(C.cx,C.cy,V,a(C.y01,C.x01),a(C.y11,C.x11),!L),A.arc(0,0,m,a(C.cy+C.y11,C.cx+C.x11),a(P.cy+P.y11,P.cx+P.x11),L),A.arc(P.cx,P.cy,V,a(P.y11,P.x11),a(P.y01,P.x01),!L))):A.arc(0,0,m,D,I,L):A.lineTo(W,X)}else A.moveTo(0,0);if(A.closePath(),r)return A=null,r+""||null}return S.centroid=function(){var e=(+t.apply(this,arguments)+ +o.apply(this,arguments))/2,r=(+k.apply(this,arguments)+ +T.apply(this,arguments))/2-h/2;return[i(r)*e,l(r)*e]},S.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:r(+e),S):t},S.outerRadius=function(t){return arguments.length?(o="function"==typeof t?t:r(+t),S):o},S.cornerRadius=function(t){return arguments.length?(_="function"==typeof t?t:r(+t),S):_},S.padRadius=function(t){return arguments.length?(w=null==t?null:"function"==typeof t?t:r(+t),S):w},S.startAngle=function(t){return arguments.length?(k="function"==typeof t?t:r(+t),S):k},S.endAngle=function(t){return arguments.length?(T="function"==typeof t?t:r(+t),S):T},S.padAngle=function(t){return arguments.length?(M="function"==typeof t?t:r(+t),S):M},S.context=function(t){return arguments.length?(A=null==t?null:t,S):A},S},t.area=A,t.line=M,t.pie=function(){var t=E,e=S,n=null,a=r(0),i=r(p),o=r(0);function s(r){var s,l,c,u,h,f=r.length,d=0,g=new Array(f),v=new Array(f),m=+a.apply(this,arguments),y=Math.min(p,Math.max(-p,i.apply(this,arguments)-m)),x=Math.min(Math.abs(y)/f,o.apply(this,arguments)),b=x*(y<0?-1:1);for(s=0;s<f;++s)(h=v[g[s]=s]=+t(r[s],s,r))>0&&(d+=h);for(null!=e?g.sort(function(t,r){return e(v[t],v[r])}):null!=n&&g.sort(function(t,e){return n(r[t],r[e])}),s=0,c=d?(y-f*b)/d:0;s<f;++s,m=u)l=g[s],u=m+((h=v[l])>0?h*c:0)+b,v[l]={data:r[l],index:s,value:h,startAngle:m,endAngle:u,padAngle:x};return v}return s.value=function(e){return arguments.length?(t="function"==typeof e?e:r(+e),s):t},s.sortValues=function(t){return arguments.length?(e=t,n=null,s):e},s.sort=function(t){return arguments.length?(n=t,e=null,s):n},s.startAngle=function(t){return arguments.length?(a="function"==typeof t?t:r(+t),s):a},s.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:r(+t),s):i},s.padAngle=function(t){return arguments.length?(o="function"==typeof t?t:r(+t),s):o},s},t.areaRadial=I,t.radialArea=I,t.lineRadial=z,t.radialLine=z,t.pointRadial=D,t.linkHorizontal=function(){return N(j)},t.linkVertical=function(){return N(V)},t.linkRadial=function(){var t=N(U);return t.angle=t.x,delete t.x,t.radius=t.y,delete t.y,t},t.symbol=function(){var t=r(q),n=r(64),a=null;function i(){var r;if(a||(a=r=e.path()),t.apply(this,arguments).draw(a,+n.apply(this,arguments)),r)return a=null,r+""||null}return i.type=function(e){return arguments.length?(t="function"==typeof e?e:r(e),i):t},i.size=function(t){return arguments.length?(n="function"==typeof t?t:r(+t),i):n},i.context=function(t){return arguments.length?(a=null==t?null:t,i):a},i},t.symbols=ot,t.symbolCircle=q,t.symbolCross=H,t.symbolDiamond=W,t.symbolSquare=Q,t.symbolStar=K,t.symbolTriangle=tt,t.symbolWye=it,t.curveBasisClosed=function(t){return new ut(t)},t.curveBasisOpen=function(t){return new ht(t)},t.curveBasis=function(t){return new ct(t)},t.curveBundle=pt,t.curveCardinalClosed=yt,t.curveCardinalOpen=bt,t.curveCardinal=vt,t.curveCatmullRomClosed=Mt,t.curveCatmullRomOpen=St,t.curveCatmullRom=kt,t.curveLinearClosed=function(t){return new Et(t)},t.curveLinear=w,t.curveMonotoneX=function(t){return new zt(t)},t.curveMonotoneY=function(t){return new It(t)},t.curveNatural=function(t){return new Rt(t)},t.curveStep=function(t){return new Bt(t,.5)},t.curveStepAfter=function(t){return new Bt(t,1)},t.curveStepBefore=function(t){return new Bt(t,0)},t.stack=function(){var t=r([]),e=jt,n=Nt,a=Vt;function i(r){var i,o,s=t.apply(this,arguments),l=r.length,c=s.length,u=new Array(c);for(i=0;i<c;++i){for(var h,f=s[i],p=u[i]=new Array(l),d=0;d<l;++d)p[d]=h=[0,+a(r[d],f,d,r)],h.data=r[d];p.key=f}for(i=0,o=e(u);i<c;++i)u[o[i]].index=i;return n(u,o),u}return i.keys=function(e){return arguments.length?(t="function"==typeof e?e:r(R.call(e)),i):t},i.value=function(t){return arguments.length?(a="function"==typeof t?t:r(+t),i):a},i.order=function(t){return arguments.length?(e=null==t?jt:"function"==typeof t?t:r(R.call(t)),i):e},i.offset=function(t){return arguments.length?(n=null==t?Nt:t,i):n},i},t.stackOffsetExpand=function(t,e){if((n=t.length)>0){for(var r,n,a,i=0,o=t[0].length;i<o;++i){for(a=r=0;r<n;++r)a+=t[r][i][1]||0;if(a)for(r=0;r<n;++r)t[r][i][1]/=a}Nt(t,e)}},t.stackOffsetDiverging=function(t,e){if((s=t.length)>1)for(var r,n,a,i,o,s,l=0,c=t[e[0]].length;l<c;++l)for(i=o=0,r=0;r<s;++r)(a=(n=t[e[r]][l])[1]-n[0])>=0?(n[0]=i,n[1]=i+=a):a<0?(n[1]=o,n[0]=o+=a):n[0]=i},t.stackOffsetNone=Nt,t.stackOffsetSilhouette=function(t,e){if((r=t.length)>0){for(var r,n=0,a=t[e[0]],i=a.length;n<i;++n){for(var o=0,s=0;o<r;++o)s+=t[o][n][1]||0;a[n][1]+=a[n][0]=-s/2}Nt(t,e)}},t.stackOffsetWiggle=function(t,e){if((a=t.length)>0&&(n=(r=t[e[0]]).length)>0){for(var r,n,a,i=0,o=1;o<n;++o){for(var s=0,l=0,c=0;s<a;++s){for(var u=t[e[s]],h=u[o][1]||0,f=(h-(u[o-1][1]||0))/2,p=0;p<s;++p){var d=t[e[p]];f+=(d[o][1]||0)-(d[o-1][1]||0)}l+=h,c+=f*h}r[o-1][1]+=r[o-1][0]=i,l&&(i-=c/l)}r[o-1][1]+=r[o-1][0]=i,Nt(t,e)}},t.stackOrderAppearance=Ut,t.stackOrderAscending=Ht,t.stackOrderDescending=function(t){return Ht(t).reverse()},t.stackOrderInsideOut=function(t){var e,r,n=t.length,a=t.map(Gt),i=Ut(t),o=0,s=0,l=[],c=[];for(e=0;e<n;++e)r=i[e],o<s?(o+=a[r],l.push(r)):(s+=a[r],c.push(r));return c.reverse().concat(l)},t.stackOrderNone=jt,t.stackOrderReverse=function(t){return jt(t).reverse()},Object.defineProperty(t,"__esModule",{value:!0})},"object"==typeof r&&"undefined"!=typeof e?a(r,t("d3-path")):a(n.d3=n.d3||{},n.d3)},{"d3-path":161}],164:[function(t,e,r){var n;n=this,function(t){"use strict";var e,r,n=0,a=0,i=0,o=1e3,s=0,l=0,c=0,u="object"==typeof performance&&performance.now?performance:Date,h="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function f(){return l||(h(p),l=u.now()+c)}function p(){l=0}function d(){this._call=this._time=this._next=null}function g(t,e,r){var n=new d;return n.restart(t,e,r),n}function v(){f(),++n;for(var t,r=e;r;)(t=l-r._time)>=0&&r._call.call(null,t),r=r._next;--n}function m(){l=(s=u.now())+c,n=a=0;try{v()}finally{n=0,function(){var t,n,a=e,i=1/0;for(;a;)a._call?(i>a._time&&(i=a._time),t=a,a=a._next):(n=a._next,a._next=null,a=t?t._next=n:e=n);r=t,x(i)}(),l=0}}function y(){var t=u.now(),e=t-s;e>o&&(c-=e,s=t)}function x(t){n||(a&&(a=clearTimeout(a)),t-l>24?(t<1/0&&(a=setTimeout(m,t-u.now()-c)),i&&(i=clearInterval(i))):(i||(s=u.now(),i=setInterval(y,o)),n=1,h(m)))}d.prototype=g.prototype={constructor:d,restart:function(t,n,a){if("function"!=typeof t)throw new TypeError("callback is not a function");a=(null==a?f():+a)+(null==n?0:+n),this._next||r===this||(r?r._next=this:e=this,r=this),this._call=t,this._time=a,x()},stop:function(){this._call&&(this._call=null,this._time=1/0,x())}},t.now=f,t.timer=g,t.timerFlush=v,t.timeout=function(t,e,r){var n=new d;return e=null==e?0:+e,n.restart(function(r){n.stop(),t(r+e)},e,r),n},t.interval=function(t,e,r){var n=new d,a=e;return null==e?(n.restart(t,e,r),n):(e=+e,r=null==r?f():+r,n.restart(function i(o){o+=a,n.restart(i,a+=e,r),t(o)},e,r),n)},Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.d3=n.d3||{})},{}],165:[function(t,e,r){!function(){var t={version:"3.5.17"},r=[].slice,n=function(t){return r.call(t)},a=this.document;function i(t){return t&&(t.ownerDocument||t.document||t).documentElement}function o(t){return t&&(t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView)}if(a)try{n(a.documentElement.childNodes)[0].nodeType}catch(t){n=function(t){for(var e=t.length,r=new Array(e);e--;)r[e]=t[e];return r}}if(Date.now||(Date.now=function(){return+new Date}),a)try{a.createElement("DIV").style.setProperty("opacity",0,"")}catch(t){var s=this.Element.prototype,l=s.setAttribute,c=s.setAttributeNS,u=this.CSSStyleDeclaration.prototype,h=u.setProperty;s.setAttribute=function(t,e){l.call(this,t,e+"")},s.setAttributeNS=function(t,e,r){c.call(this,t,e,r+"")},u.setProperty=function(t,e,r){h.call(this,t,e+"",r)}}function f(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function p(t){return null===t?NaN:+t}function d(t){return!isNaN(t)}function g(t){return{left:function(e,r,n,a){for(arguments.length<3&&(n=0),arguments.length<4&&(a=e.length);n<a;){var i=n+a>>>1;t(e[i],r)<0?n=i+1:a=i}return n},right:function(e,r,n,a){for(arguments.length<3&&(n=0),arguments.length<4&&(a=e.length);n<a;){var i=n+a>>>1;t(e[i],r)>0?a=i:n=i+1}return n}}}t.ascending=f,t.descending=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},t.min=function(t,e){var r,n,a=-1,i=t.length;if(1===arguments.length){for(;++a<i;)if(null!=(n=t[a])&&n>=n){r=n;break}for(;++a<i;)null!=(n=t[a])&&r>n&&(r=n)}else{for(;++a<i;)if(null!=(n=e.call(t,t[a],a))&&n>=n){r=n;break}for(;++a<i;)null!=(n=e.call(t,t[a],a))&&r>n&&(r=n)}return r},t.max=function(t,e){var r,n,a=-1,i=t.length;if(1===arguments.length){for(;++a<i;)if(null!=(n=t[a])&&n>=n){r=n;break}for(;++a<i;)null!=(n=t[a])&&n>r&&(r=n)}else{for(;++a<i;)if(null!=(n=e.call(t,t[a],a))&&n>=n){r=n;break}for(;++a<i;)null!=(n=e.call(t,t[a],a))&&n>r&&(r=n)}return r},t.extent=function(t,e){var r,n,a,i=-1,o=t.length;if(1===arguments.length){for(;++i<o;)if(null!=(n=t[i])&&n>=n){r=a=n;break}for(;++i<o;)null!=(n=t[i])&&(r>n&&(r=n),a<n&&(a=n))}else{for(;++i<o;)if(null!=(n=e.call(t,t[i],i))&&n>=n){r=a=n;break}for(;++i<o;)null!=(n=e.call(t,t[i],i))&&(r>n&&(r=n),a<n&&(a=n))}return[r,a]},t.sum=function(t,e){var r,n=0,a=t.length,i=-1;if(1===arguments.length)for(;++i<a;)d(r=+t[i])&&(n+=r);else for(;++i<a;)d(r=+e.call(t,t[i],i))&&(n+=r);return n},t.mean=function(t,e){var r,n=0,a=t.length,i=-1,o=a;if(1===arguments.length)for(;++i<a;)d(r=p(t[i]))?n+=r:--o;else for(;++i<a;)d(r=p(e.call(t,t[i],i)))?n+=r:--o;if(o)return n/o},t.quantile=function(t,e){var r=(t.length-1)*e+1,n=Math.floor(r),a=+t[n-1],i=r-n;return i?a+i*(t[n]-a):a},t.median=function(e,r){var n,a=[],i=e.length,o=-1;if(1===arguments.length)for(;++o<i;)d(n=p(e[o]))&&a.push(n);else for(;++o<i;)d(n=p(r.call(e,e[o],o)))&&a.push(n);if(a.length)return t.quantile(a.sort(f),.5)},t.variance=function(t,e){var r,n,a=t.length,i=0,o=0,s=-1,l=0;if(1===arguments.length)for(;++s<a;)d(r=p(t[s]))&&(o+=(n=r-i)*(r-(i+=n/++l)));else for(;++s<a;)d(r=p(e.call(t,t[s],s)))&&(o+=(n=r-i)*(r-(i+=n/++l)));if(l>1)return o/(l-1)},t.deviation=function(){var e=t.variance.apply(this,arguments);return e?Math.sqrt(e):e};var v=g(f);function m(t){return t.length}t.bisectLeft=v.left,t.bisect=t.bisectRight=v.right,t.bisector=function(t){return g(1===t.length?function(e,r){return f(t(e),r)}:t)},t.shuffle=function(t,e,r){(i=arguments.length)<3&&(r=t.length,i<2&&(e=0));for(var n,a,i=r-e;i;)a=Math.random()*i--|0,n=t[i+e],t[i+e]=t[a+e],t[a+e]=n;return t},t.permute=function(t,e){for(var r=e.length,n=new Array(r);r--;)n[r]=t[e[r]];return n},t.pairs=function(t){for(var e=0,r=t.length-1,n=t[0],a=new Array(r<0?0:r);e<r;)a[e]=[n,n=t[++e]];return a},t.transpose=function(e){if(!(i=e.length))return[];for(var r=-1,n=t.min(e,m),a=new Array(n);++r<n;)for(var i,o=-1,s=a[r]=new Array(i);++o<i;)s[o]=e[o][r];return a},t.zip=function(){return t.transpose(arguments)},t.keys=function(t){var e=[];for(var r in t)e.push(r);return e},t.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},t.entries=function(t){var e=[];for(var r in t)e.push({key:r,value:t[r]});return e},t.merge=function(t){for(var e,r,n,a=t.length,i=-1,o=0;++i<a;)o+=t[i].length;for(r=new Array(o);--a>=0;)for(e=(n=t[a]).length;--e>=0;)r[--o]=n[e];return r};var y=Math.abs;function x(t,e){for(var r in e)Object.defineProperty(t.prototype,r,{value:e[r],enumerable:!1})}function b(){this._=Object.create(null)}t.range=function(t,e,r){if(arguments.length<3&&(r=1,arguments.length<2&&(e=t,t=0)),(e-t)/r==1/0)throw new Error("infinite range");var n,a=[],i=function(t){var e=1;for(;t*e%1;)e*=10;return e}(y(r)),o=-1;if(t*=i,e*=i,(r*=i)<0)for(;(n=t+r*++o)>e;)a.push(n/i);else for(;(n=t+r*++o)<e;)a.push(n/i);return a},t.map=function(t,e){var r=new b;if(t instanceof b)t.forEach(function(t,e){r.set(t,e)});else if(Array.isArray(t)){var n,a=-1,i=t.length;if(1===arguments.length)for(;++a<i;)r.set(a,t[a]);else for(;++a<i;)r.set(e.call(t,n=t[a],a),n)}else for(var o in t)r.set(o,t[o]);return r};var _="__proto__",w="\0";function k(t){return(t+="")===_||t[0]===w?w+t:t}function T(t){return(t+="")[0]===w?t.slice(1):t}function M(t){return k(t)in this._}function A(t){return(t=k(t))in this._&&delete this._[t]}function S(){var t=[];for(var e in this._)t.push(T(e));return t}function E(){var t=0;for(var e in this._)++t;return t}function L(){for(var t in this._)return!1;return!0}function C(){this._=Object.create(null)}function P(t){return t}function O(t,e,r){return function(){var n=r.apply(e,arguments);return n===e?t:n}}function z(t,e){if(e in t)return e;e=e.charAt(0).toUpperCase()+e.slice(1);for(var r=0,n=I.length;r<n;++r){var a=I[r]+e;if(a in t)return a}}x(b,{has:M,get:function(t){return this._[k(t)]},set:function(t,e){return this._[k(t)]=e},remove:A,keys:S,values:function(){var t=[];for(var e in this._)t.push(this._[e]);return t},entries:function(){var t=[];for(var e in this._)t.push({key:T(e),value:this._[e]});return t},size:E,empty:L,forEach:function(t){for(var e in this._)t.call(this,T(e),this._[e])}}),t.nest=function(){var e,r,n={},a=[],i=[];function o(t,i,s){if(s>=a.length)return r?r.call(n,i):e?i.sort(e):i;for(var l,c,u,h,f=-1,p=i.length,d=a[s++],g=new b;++f<p;)(h=g.get(l=d(c=i[f])))?h.push(c):g.set(l,[c]);return t?(c=t(),u=function(e,r){c.set(e,o(t,r,s))}):(c={},u=function(e,r){c[e]=o(t,r,s)}),g.forEach(u),c}return n.map=function(t,e){return o(e,t,0)},n.entries=function(e){return function t(e,r){if(r>=a.length)return e;var n=[],o=i[r++];return e.forEach(function(e,a){n.push({key:e,values:t(a,r)})}),o?n.sort(function(t,e){return o(t.key,e.key)}):n}(o(t.map,e,0),0)},n.key=function(t){return a.push(t),n},n.sortKeys=function(t){return i[a.length-1]=t,n},n.sortValues=function(t){return e=t,n},n.rollup=function(t){return r=t,n},n},t.set=function(t){var e=new C;if(t)for(var r=0,n=t.length;r<n;++r)e.add(t[r]);return e},x(C,{has:M,add:function(t){return this._[k(t+="")]=!0,t},remove:A,values:S,size:E,empty:L,forEach:function(t){for(var e in this._)t.call(this,T(e))}}),t.behavior={},t.rebind=function(t,e){for(var r,n=1,a=arguments.length;++n<a;)t[r=arguments[n]]=O(t,e,e[r]);return t};var I=["webkit","ms","moz","Moz","o","O"];function D(){}function R(){}function F(t){var e=[],r=new b;function n(){for(var r,n=e,a=-1,i=n.length;++a<i;)(r=n[a].on)&&r.apply(this,arguments);return t}return n.on=function(n,a){var i,o=r.get(n);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,i=e.indexOf(o)).concat(e.slice(i+1)),r.remove(n)),a&&e.push(r.set(n,{on:a})),t)},n}function B(){t.event.preventDefault()}function N(){for(var e,r=t.event;e=r.sourceEvent;)r=e;return r}function j(e){for(var r=new R,n=0,a=arguments.length;++n<a;)r[arguments[n]]=F(r);return r.of=function(n,a){return function(i){try{var o=i.sourceEvent=t.event;i.target=e,t.event=i,r[i.type].apply(n,a)}finally{t.event=o}}},r}t.dispatch=function(){for(var t=new R,e=-1,r=arguments.length;++e<r;)t[arguments[e]]=F(t);return t},R.prototype.on=function(t,e){var r=t.indexOf("."),n="";if(r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),t)return arguments.length<2?this[t].on(n):this[t].on(n,e);if(2===arguments.length){if(null==e)for(t in this)this.hasOwnProperty(t)&&this[t].on(n,null);return this}},t.event=null,t.requote=function(t){return t.replace(V,"\\$&")};var V=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,U={}.__proto__?function(t,e){t.__proto__=e}:function(t,e){for(var r in e)t[r]=e[r]};function q(t){return U(t,W),t}var H=function(t,e){return e.querySelector(t)},G=function(t,e){return e.querySelectorAll(t)},Y=function(t,e){var r=t.matches||t[z(t,"matchesSelector")];return(Y=function(t,e){return r.call(t,e)})(t,e)};"function"==typeof Sizzle&&(H=function(t,e){return Sizzle(t,e)[0]||null},G=Sizzle,Y=Sizzle.matchesSelector),t.selection=function(){return t.select(a.documentElement)};var W=t.selection.prototype=[];function X(t){return"function"==typeof t?t:function(){return H(t,this)}}function Z(t){return"function"==typeof t?t:function(){return G(t,this)}}W.select=function(t){var e,r,n,a,i=[];t=X(t);for(var o=-1,s=this.length;++o<s;){i.push(e=[]),e.parentNode=(n=this[o]).parentNode;for(var l=-1,c=n.length;++l<c;)(a=n[l])?(e.push(r=t.call(a,a.__data__,l,o)),r&&"__data__"in a&&(r.__data__=a.__data__)):e.push(null)}return q(i)},W.selectAll=function(t){var e,r,a=[];t=Z(t);for(var i=-1,o=this.length;++i<o;)for(var s=this[i],l=-1,c=s.length;++l<c;)(r=s[l])&&(a.push(e=n(t.call(r,r.__data__,l,i))),e.parentNode=r);return q(a)};var J="http://www.w3.org/1999/xhtml",K={svg:"http://www.w3.org/2000/svg",xhtml:J,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Q(e,r){return e=t.ns.qualify(e),null==r?e.local?function(){this.removeAttributeNS(e.space,e.local)}:function(){this.removeAttribute(e)}:"function"==typeof r?e.local?function(){var t=r.apply(this,arguments);null==t?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,t)}:function(){var t=r.apply(this,arguments);null==t?this.removeAttribute(e):this.setAttribute(e,t)}:e.local?function(){this.setAttributeNS(e.space,e.local,r)}:function(){this.setAttribute(e,r)}}function $(t){return t.trim().replace(/\s+/g," ")}function tt(e){return new RegExp("(?:^|\\s+)"+t.requote(e)+"(?:\\s+|$)","g")}function et(t){return(t+"").trim().split(/^|\s+/)}function rt(t,e){var r=(t=et(t).map(nt)).length;return"function"==typeof e?function(){for(var n=-1,a=e.apply(this,arguments);++n<r;)t[n](this,a)}:function(){for(var n=-1;++n<r;)t[n](this,e)}}function nt(t){var e=tt(t);return function(r,n){if(a=r.classList)return n?a.add(t):a.remove(t);var a=r.getAttribute("class")||"";n?(e.lastIndex=0,e.test(a)||r.setAttribute("class",$(a+" "+t))):r.setAttribute("class",$(a.replace(e," ")))}}function at(t,e,r){return null==e?function(){this.style.removeProperty(t)}:"function"==typeof e?function(){var n=e.apply(this,arguments);null==n?this.style.removeProperty(t):this.style.setProperty(t,n,r)}:function(){this.style.setProperty(t,e,r)}}function it(t,e){return null==e?function(){delete this[t]}:"function"==typeof e?function(){var r=e.apply(this,arguments);null==r?delete this[t]:this[t]=r}:function(){this[t]=e}}function ot(e){return"function"==typeof e?e:(e=t.ns.qualify(e)).local?function(){return this.ownerDocument.createElementNS(e.space,e.local)}:function(){var t=this.ownerDocument,r=this.namespaceURI;return r===J&&t.documentElement.namespaceURI===J?t.createElement(e):t.createElementNS(r,e)}}function st(){var t=this.parentNode;t&&t.removeChild(this)}function lt(t){return{__data__:t}}function ct(t){return function(){return Y(this,t)}}function ut(t,e){for(var r=0,n=t.length;r<n;r++)for(var a,i=t[r],o=0,s=i.length;o<s;o++)(a=i[o])&&e(a,o,r);return t}function ht(t){return U(t,ft),t}t.ns={prefix:K,qualify:function(t){var e=t.indexOf(":"),r=t;return e>=0&&"xmlns"!==(r=t.slice(0,e))&&(t=t.slice(e+1)),K.hasOwnProperty(r)?{space:K[r],local:t}:t}},W.attr=function(e,r){if(arguments.length<2){if("string"==typeof e){var n=this.node();return(e=t.ns.qualify(e)).local?n.getAttributeNS(e.space,e.local):n.getAttribute(e)}for(r in e)this.each(Q(r,e[r]));return this}return this.each(Q(e,r))},W.classed=function(t,e){if(arguments.length<2){if("string"==typeof t){var r=this.node(),n=(t=et(t)).length,a=-1;if(e=r.classList){for(;++a<n;)if(!e.contains(t[a]))return!1}else for(e=r.getAttribute("class");++a<n;)if(!tt(t[a]).test(e))return!1;return!0}for(e in t)this.each(rt(e,t[e]));return this}return this.each(rt(t,e))},W.style=function(t,e,r){var n=arguments.length;if(n<3){if("string"!=typeof t){for(r in n<2&&(e=""),t)this.each(at(r,t[r],e));return this}if(n<2){var a=this.node();return o(a).getComputedStyle(a,null).getPropertyValue(t)}r=""}return this.each(at(t,e,r))},W.property=function(t,e){if(arguments.length<2){if("string"==typeof t)return this.node()[t];for(e in t)this.each(it(e,t[e]));return this}return this.each(it(t,e))},W.text=function(t){return arguments.length?this.each("function"==typeof t?function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}:null==t?function(){this.textContent=""}:function(){this.textContent=t}):this.node().textContent},W.html=function(t){return arguments.length?this.each("function"==typeof t?function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}:null==t?function(){this.innerHTML=""}:function(){this.innerHTML=t}):this.node().innerHTML},W.append=function(t){return t=ot(t),this.select(function(){return this.appendChild(t.apply(this,arguments))})},W.insert=function(t,e){return t=ot(t),e=X(e),this.select(function(){return this.insertBefore(t.apply(this,arguments),e.apply(this,arguments)||null)})},W.remove=function(){return this.each(st)},W.data=function(t,e){var r,n,a=-1,i=this.length;if(!arguments.length){for(t=new Array(i=(r=this[0]).length);++a<i;)(n=r[a])&&(t[a]=n.__data__);return t}function o(t,r){var n,a,i,o=t.length,u=r.length,h=Math.min(o,u),f=new Array(u),p=new Array(u),d=new Array(o);if(e){var g,v=new b,m=new Array(o);for(n=-1;++n<o;)(a=t[n])&&(v.has(g=e.call(a,a.__data__,n))?d[n]=a:v.set(g,a),m[n]=g);for(n=-1;++n<u;)(a=v.get(g=e.call(r,i=r[n],n)))?!0!==a&&(f[n]=a,a.__data__=i):p[n]=lt(i),v.set(g,!0);for(n=-1;++n<o;)n in m&&!0!==v.get(m[n])&&(d[n]=t[n])}else{for(n=-1;++n<h;)a=t[n],i=r[n],a?(a.__data__=i,f[n]=a):p[n]=lt(i);for(;n<u;++n)p[n]=lt(r[n]);for(;n<o;++n)d[n]=t[n]}p.update=f,p.parentNode=f.parentNode=d.parentNode=t.parentNode,s.push(p),l.push(f),c.push(d)}var s=ht([]),l=q([]),c=q([]);if("function"==typeof t)for(;++a<i;)o(r=this[a],t.call(r,r.parentNode.__data__,a));else for(;++a<i;)o(r=this[a],t);return l.enter=function(){return s},l.exit=function(){return c},l},W.datum=function(t){return arguments.length?this.property("__data__",t):this.property("__data__")},W.filter=function(t){var e,r,n,a=[];"function"!=typeof t&&(t=ct(t));for(var i=0,o=this.length;i<o;i++){a.push(e=[]),e.parentNode=(r=this[i]).parentNode;for(var s=0,l=r.length;s<l;s++)(n=r[s])&&t.call(n,n.__data__,s,i)&&e.push(n)}return q(a)},W.order=function(){for(var t=-1,e=this.length;++t<e;)for(var r,n=this[t],a=n.length-1,i=n[a];--a>=0;)(r=n[a])&&(i&&i!==r.nextSibling&&i.parentNode.insertBefore(r,i),i=r);return this},W.sort=function(t){t=function(t){arguments.length||(t=f);return function(e,r){return e&&r?t(e.__data__,r.__data__):!e-!r}}.apply(this,arguments);for(var e=-1,r=this.length;++e<r;)this[e].sort(t);return this.order()},W.each=function(t){return ut(this,function(e,r,n){t.call(e,e.__data__,r,n)})},W.call=function(t){var e=n(arguments);return t.apply(e[0]=this,e),this},W.empty=function(){return!this.node()},W.node=function(){for(var t=0,e=this.length;t<e;t++)for(var r=this[t],n=0,a=r.length;n<a;n++){var i=r[n];if(i)return i}return null},W.size=function(){var t=0;return ut(this,function(){++t}),t};var ft=[];function pt(e,r,a){var i="__on"+e,o=e.indexOf("."),s=gt;o>0&&(e=e.slice(0,o));var l=dt.get(e);function c(){var t=this[i];t&&(this.removeEventListener(e,t,t.$),delete this[i])}return l&&(e=l,s=vt),o?r?function(){var t=s(r,n(arguments));c.call(this),this.addEventListener(e,this[i]=t,t.$=a),t._=r}:c:r?D:function(){var r,n=new RegExp("^__on([^.]+)"+t.requote(e)+"$");for(var a in this)if(r=a.match(n)){var i=this[a];this.removeEventListener(r[1],i,i.$),delete this[a]}}}t.selection.enter=ht,t.selection.enter.prototype=ft,ft.append=W.append,ft.empty=W.empty,ft.node=W.node,ft.call=W.call,ft.size=W.size,ft.select=function(t){for(var e,r,n,a,i,o=[],s=-1,l=this.length;++s<l;){n=(a=this[s]).update,o.push(e=[]),e.parentNode=a.parentNode;for(var c=-1,u=a.length;++c<u;)(i=a[c])?(e.push(n[c]=r=t.call(a.parentNode,i.__data__,c,s)),r.__data__=i.__data__):e.push(null)}return q(o)},ft.insert=function(t,e){var r,n,a;return arguments.length<2&&(r=this,e=function(t,e,i){var o,s=r[i].update,l=s.length;for(i!=a&&(a=i,n=0),e>=n&&(n=e+1);!(o=s[n])&&++n<l;);return o}),W.insert.call(this,t,e)},t.select=function(t){var e;return"string"==typeof t?(e=[H(t,a)]).parentNode=a.documentElement:(e=[t]).parentNode=i(t),q([e])},t.selectAll=function(t){var e;return"string"==typeof t?(e=n(G(t,a))).parentNode=a.documentElement:(e=n(t)).parentNode=null,q([e])},W.on=function(t,e,r){var n=arguments.length;if(n<3){if("string"!=typeof t){for(r in n<2&&(e=!1),t)this.each(pt(r,t[r],e));return this}if(n<2)return(n=this.node()["__on"+t])&&n._;r=!1}return this.each(pt(t,e,r))};var dt=t.map({mouseenter:"mouseover",mouseleave:"mouseout"});function gt(e,r){return function(n){var a=t.event;t.event=n,r[0]=this.__data__;try{e.apply(this,r)}finally{t.event=a}}}function vt(t,e){var r=gt(t,e);return function(t){var e=t.relatedTarget;e&&(e===this||8&e.compareDocumentPosition(this))||r.call(this,t)}}a&&dt.forEach(function(t){"on"+t in a&&dt.remove(t)});var mt,yt=0;function xt(e){var r=".dragsuppress-"+ ++yt,n="click"+r,a=t.select(o(e)).on("touchmove"+r,B).on("dragstart"+r,B).on("selectstart"+r,B);if(null==mt&&(mt=!("onselectstart"in e)&&z(e.style,"userSelect")),mt){var s=i(e).style,l=s[mt];s[mt]="none"}return function(t){if(a.on(r,null),mt&&(s[mt]=l),t){var e=function(){a.on(n,null)};a.on(n,function(){B(),e()},!0),setTimeout(e,0)}}}t.mouse=function(t){return _t(t,N())};var bt=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;function _t(e,r){r.changedTouches&&(r=r.changedTouches[0]);var n=e.ownerSVGElement||e;if(n.createSVGPoint){var a=n.createSVGPoint();if(bt<0){var i=o(e);if(i.scrollX||i.scrollY){var s=(n=t.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important"))[0][0].getScreenCTM();bt=!(s.f||s.e),n.remove()}}return bt?(a.x=r.pageX,a.y=r.pageY):(a.x=r.clientX,a.y=r.clientY),[(a=a.matrixTransform(e.getScreenCTM().inverse())).x,a.y]}var l=e.getBoundingClientRect();return[r.clientX-l.left-e.clientLeft,r.clientY-l.top-e.clientTop]}function wt(){return t.event.changedTouches[0].identifier}t.touch=function(t,e,r){if(arguments.length<3&&(r=e,e=N().changedTouches),e)for(var n,a=0,i=e.length;a<i;++a)if((n=e[a]).identifier===r)return _t(t,n)},t.behavior.drag=function(){var e=j(i,"drag","dragstart","dragend"),r=null,n=s(D,t.mouse,o,"mousemove","mouseup"),a=s(wt,t.touch,P,"touchmove","touchend");function i(){this.on("mousedown.drag",n).on("touchstart.drag",a)}function s(n,a,i,o,s){return function(){var l,c=t.event.target.correspondingElement||t.event.target,u=this.parentNode,h=e.of(this,arguments),f=0,p=n(),d=".drag"+(null==p?"":"-"+p),g=t.select(i(c)).on(o+d,function(){var t,e,r=a(u,p);if(!r)return;t=r[0]-m[0],e=r[1]-m[1],f|=t|e,m=r,h({type:"drag",x:r[0]+l[0],y:r[1]+l[1],dx:t,dy:e})}).on(s+d,function(){if(!a(u,p))return;g.on(o+d,null).on(s+d,null),v(f),h({type:"dragend"})}),v=xt(c),m=a(u,p);l=r?[(l=r.apply(this,arguments)).x-m[0],l.y-m[1]]:[0,0],h({type:"dragstart"})}}return i.origin=function(t){return arguments.length?(r=t,i):r},t.rebind(i,e,"on")},t.touches=function(t,e){return arguments.length<2&&(e=N().touches),e?n(e).map(function(e){var r=_t(t,e);return r.identifier=e.identifier,r}):[]};var kt=1e-6,Tt=kt*kt,Mt=Math.PI,At=2*Mt,St=At-kt,Et=Mt/2,Lt=Mt/180,Ct=180/Mt;function Pt(t){return t>0?1:t<0?-1:0}function Ot(t,e,r){return(e[0]-t[0])*(r[1]-t[1])-(e[1]-t[1])*(r[0]-t[0])}function zt(t){return t>1?0:t<-1?Mt:Math.acos(t)}function It(t){return t>1?Et:t<-1?-Et:Math.asin(t)}function Dt(t){return((t=Math.exp(t))+1/t)/2}function Rt(t){return(t=Math.sin(t/2))*t}var Ft=Math.SQRT2;t.interpolateZoom=function(t,e){var r,n,a=t[0],i=t[1],o=t[2],s=e[0],l=e[1],c=e[2],u=s-a,h=l-i,f=u*u+h*h;if(f<Tt)n=Math.log(c/o)/Ft,r=function(t){return[a+t*u,i+t*h,o*Math.exp(Ft*t*n)]};else{var p=Math.sqrt(f),d=(c*c-o*o+4*f)/(2*o*2*p),g=(c*c-o*o-4*f)/(2*c*2*p),v=Math.log(Math.sqrt(d*d+1)-d),m=Math.log(Math.sqrt(g*g+1)-g);n=(m-v)/Ft,r=function(t){var e,r=t*n,s=Dt(v),l=o/(2*p)*(s*(e=Ft*r+v,((e=Math.exp(2*e))-1)/(e+1))-function(t){return((t=Math.exp(t))-1/t)/2}(v));return[a+l*u,i+l*h,o*s/Dt(Ft*r+v)]}}return r.duration=1e3*n,r},t.behavior.zoom=function(){var e,r,n,i,s,l,c,u,h,f={x:0,y:0,k:1},p=[960,500],d=jt,g=250,v=0,m="mousedown.zoom",y="mousemove.zoom",x="mouseup.zoom",b="touchstart.zoom",_=j(w,"zoomstart","zoom","zoomend");function w(t){t.on(m,P).on(Nt+".zoom",z).on("dblclick.zoom",I).on(b,O)}function k(t){return[(t[0]-f.x)/f.k,(t[1]-f.y)/f.k]}function T(t){f.k=Math.max(d[0],Math.min(d[1],t))}function M(t,e){e=function(t){return[t[0]*f.k+f.x,t[1]*f.k+f.y]}(e),f.x+=t[0]-e[0],f.y+=t[1]-e[1]}function A(e,n,a,i){e.__chart__={x:f.x,y:f.y,k:f.k},T(Math.pow(2,i)),M(r=n,a),e=t.select(e),g>0&&(e=e.transition().duration(g)),e.call(w.event)}function S(){c&&c.domain(l.range().map(function(t){return(t-f.x)/f.k}).map(l.invert)),h&&h.domain(u.range().map(function(t){return(t-f.y)/f.k}).map(u.invert))}function E(t){v++||t({type:"zoomstart"})}function L(t){S(),t({type:"zoom",scale:f.k,translate:[f.x,f.y]})}function C(t){--v||(t({type:"zoomend"}),r=null)}function P(){var e=this,r=_.of(e,arguments),n=0,a=t.select(o(e)).on(y,function(){n=1,M(t.mouse(e),i),L(r)}).on(x,function(){a.on(y,null).on(x,null),s(n),C(r)}),i=k(t.mouse(e)),s=xt(e);ps.call(e),E(r)}function O(){var e,r=this,n=_.of(r,arguments),a={},i=0,o=".zoom-"+t.event.changedTouches[0].identifier,l="touchmove"+o,c="touchend"+o,u=[],h=t.select(r),p=xt(r);function d(){var n=t.touches(r);return e=f.k,n.forEach(function(t){t.identifier in a&&(a[t.identifier]=k(t))}),n}function g(){var e=t.event.target;t.select(e).on(l,v).on(c,y),u.push(e);for(var n=t.event.changedTouches,o=0,h=n.length;o<h;++o)a[n[o].identifier]=null;var p=d(),g=Date.now();if(1===p.length){if(g-s<500){var m=p[0];A(r,m,a[m.identifier],Math.floor(Math.log(f.k)/Math.LN2)+1),B()}s=g}else if(p.length>1){m=p[0];var x=p[1],b=m[0]-x[0],_=m[1]-x[1];i=b*b+_*_}}function v(){var o,l,c,u,h=t.touches(r);ps.call(r);for(var f=0,p=h.length;f<p;++f,u=null)if(c=h[f],u=a[c.identifier]){if(l)break;o=c,l=u}if(u){var d=(d=c[0]-o[0])*d+(d=c[1]-o[1])*d,g=i&&Math.sqrt(d/i);o=[(o[0]+c[0])/2,(o[1]+c[1])/2],l=[(l[0]+u[0])/2,(l[1]+u[1])/2],T(g*e)}s=null,M(o,l),L(n)}function y(){if(t.event.touches.length){for(var e=t.event.changedTouches,r=0,i=e.length;r<i;++r)delete a[e[r].identifier];for(var s in a)return void d()}t.selectAll(u).on(o,null),h.on(m,P).on(b,O),p(),C(n)}g(),E(n),h.on(m,null).on(b,g)}function z(){var a=_.of(this,arguments);i?clearTimeout(i):(ps.call(this),e=k(r=n||t.mouse(this)),E(a)),i=setTimeout(function(){i=null,C(a)},50),B(),T(Math.pow(2,.002*Bt())*f.k),M(r,e),L(a)}function I(){var e=t.mouse(this),r=Math.log(f.k)/Math.LN2;A(this,e,k(e),t.event.shiftKey?Math.ceil(r)-1:Math.floor(r)+1)}return Nt||(Nt="onwheel"in a?(Bt=function(){return-t.event.deltaY*(t.event.deltaMode?120:1)},"wheel"):"onmousewheel"in a?(Bt=function(){return t.event.wheelDelta},"mousewheel"):(Bt=function(){return-t.event.detail},"MozMousePixelScroll")),w.event=function(e){e.each(function(){var e=_.of(this,arguments),n=f;vs?t.select(this).transition().each("start.zoom",function(){f=this.__chart__||{x:0,y:0,k:1},E(e)}).tween("zoom:zoom",function(){var a=p[0],i=p[1],o=r?r[0]:a/2,s=r?r[1]:i/2,l=t.interpolateZoom([(o-f.x)/f.k,(s-f.y)/f.k,a/f.k],[(o-n.x)/n.k,(s-n.y)/n.k,a/n.k]);return function(t){var r=l(t),n=a/r[2];this.__chart__=f={x:o-r[0]*n,y:s-r[1]*n,k:n},L(e)}}).each("interrupt.zoom",function(){C(e)}).each("end.zoom",function(){C(e)}):(this.__chart__=f,E(e),L(e),C(e))})},w.translate=function(t){return arguments.length?(f={x:+t[0],y:+t[1],k:f.k},S(),w):[f.x,f.y]},w.scale=function(t){return arguments.length?(f={x:f.x,y:f.y,k:null},T(+t),S(),w):f.k},w.scaleExtent=function(t){return arguments.length?(d=null==t?jt:[+t[0],+t[1]],w):d},w.center=function(t){return arguments.length?(n=t&&[+t[0],+t[1]],w):n},w.size=function(t){return arguments.length?(p=t&&[+t[0],+t[1]],w):p},w.duration=function(t){return arguments.length?(g=+t,w):g},w.x=function(t){return arguments.length?(c=t,l=t.copy(),f={x:0,y:0,k:1},w):c},w.y=function(t){return arguments.length?(h=t,u=t.copy(),f={x:0,y:0,k:1},w):h},t.rebind(w,_,"on")};var Bt,Nt,jt=[0,1/0];function Vt(){}function Ut(t,e,r){return this instanceof Ut?(this.h=+t,this.s=+e,void(this.l=+r)):arguments.length<2?t instanceof Ut?new Ut(t.h,t.s,t.l):ue(""+t,he,Ut):new Ut(t,e,r)}t.color=Vt,Vt.prototype.toString=function(){return this.rgb()+""},t.hsl=Ut;var qt=Ut.prototype=new Vt;function Ht(t,e,r){var n,a;function i(t){return Math.round(255*function(t){return t>360?t-=360:t<0&&(t+=360),t<60?n+(a-n)*t/60:t<180?a:t<240?n+(a-n)*(240-t)/60:n}(t))}return t=isNaN(t)?0:(t%=360)<0?t+360:t,e=isNaN(e)?0:e<0?0:e>1?1:e,n=2*(r=r<0?0:r>1?1:r)-(a=r<=.5?r*(1+e):r+e-r*e),new ie(i(t+120),i(t),i(t-120))}function Gt(e,r,n){return this instanceof Gt?(this.h=+e,this.c=+r,void(this.l=+n)):arguments.length<2?e instanceof Gt?new Gt(e.h,e.c,e.l):ee(e instanceof Xt?e.l:(e=fe((e=t.rgb(e)).r,e.g,e.b)).l,e.a,e.b):new Gt(e,r,n)}qt.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),new Ut(this.h,this.s,this.l/t)},qt.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new Ut(this.h,this.s,t*this.l)},qt.rgb=function(){return Ht(this.h,this.s,this.l)},t.hcl=Gt;var Yt=Gt.prototype=new Vt;function Wt(t,e,r){return isNaN(t)&&(t=0),isNaN(e)&&(e=0),new Xt(r,Math.cos(t*=Lt)*e,Math.sin(t)*e)}function Xt(t,e,r){return this instanceof Xt?(this.l=+t,this.a=+e,void(this.b=+r)):arguments.length<2?t instanceof Xt?new Xt(t.l,t.a,t.b):t instanceof Gt?Wt(t.h,t.c,t.l):fe((t=ie(t)).r,t.g,t.b):new Xt(t,e,r)}Yt.brighter=function(t){return new Gt(this.h,this.c,Math.min(100,this.l+Zt*(arguments.length?t:1)))},Yt.darker=function(t){return new Gt(this.h,this.c,Math.max(0,this.l-Zt*(arguments.length?t:1)))},Yt.rgb=function(){return Wt(this.h,this.c,this.l).rgb()},t.lab=Xt;var Zt=18,Jt=.95047,Kt=1,Qt=1.08883,$t=Xt.prototype=new Vt;function te(t,e,r){var n=(t+16)/116,a=n+e/500,i=n-r/200;return new ie(ae(3.2404542*(a=re(a)*Jt)-1.5371385*(n=re(n)*Kt)-.4985314*(i=re(i)*Qt)),ae(-.969266*a+1.8760108*n+.041556*i),ae(.0556434*a-.2040259*n+1.0572252*i))}function ee(t,e,r){return t>0?new Gt(Math.atan2(r,e)*Ct,Math.sqrt(e*e+r*r),t):new Gt(NaN,NaN,t)}function re(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function ne(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function ae(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function ie(t,e,r){return this instanceof ie?(this.r=~~t,this.g=~~e,void(this.b=~~r)):arguments.length<2?t instanceof ie?new ie(t.r,t.g,t.b):ue(""+t,ie,Ht):new ie(t,e,r)}function oe(t){return new ie(t>>16,t>>8&255,255&t)}function se(t){return oe(t)+""}$t.brighter=function(t){return new Xt(Math.min(100,this.l+Zt*(arguments.length?t:1)),this.a,this.b)},$t.darker=function(t){return new Xt(Math.max(0,this.l-Zt*(arguments.length?t:1)),this.a,this.b)},$t.rgb=function(){return te(this.l,this.a,this.b)},t.rgb=ie;var le=ie.prototype=new Vt;function ce(t){return t<16?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function ue(t,e,r){var n,a,i,o=0,s=0,l=0;if(n=/([a-z]+)\((.*)\)/.exec(t=t.toLowerCase()))switch(a=n[2].split(","),n[1]){case"hsl":return r(parseFloat(a[0]),parseFloat(a[1])/100,parseFloat(a[2])/100);case"rgb":return e(de(a[0]),de(a[1]),de(a[2]))}return(i=ge.get(t))?e(i.r,i.g,i.b):(null==t||"#"!==t.charAt(0)||isNaN(i=parseInt(t.slice(1),16))||(4===t.length?(o=(3840&i)>>4,o|=o>>4,s=240&i,s|=s>>4,l=15&i,l|=l<<4):7===t.length&&(o=(16711680&i)>>16,s=(65280&i)>>8,l=255&i)),e(o,s,l))}function he(t,e,r){var n,a,i=Math.min(t/=255,e/=255,r/=255),o=Math.max(t,e,r),s=o-i,l=(o+i)/2;return s?(a=l<.5?s/(o+i):s/(2-o-i),n=t==o?(e-r)/s+(e<r?6:0):e==o?(r-t)/s+2:(t-e)/s+4,n*=60):(n=NaN,a=l>0&&l<1?0:n),new Ut(n,a,l)}function fe(t,e,r){var n=ne((.4124564*(t=pe(t))+.3575761*(e=pe(e))+.1804375*(r=pe(r)))/Jt),a=ne((.2126729*t+.7151522*e+.072175*r)/Kt);return Xt(116*a-16,500*(n-a),200*(a-ne((.0193339*t+.119192*e+.9503041*r)/Qt)))}function pe(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function de(t){var e=parseFloat(t);return"%"===t.charAt(t.length-1)?Math.round(2.55*e):e}le.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var e=this.r,r=this.g,n=this.b,a=30;return e||r||n?(e&&e<a&&(e=a),r&&r<a&&(r=a),n&&n<a&&(n=a),new ie(Math.min(255,e/t),Math.min(255,r/t),Math.min(255,n/t))):new ie(a,a,a)},le.darker=function(t){return new ie((t=Math.pow(.7,arguments.length?t:1))*this.r,t*this.g,t*this.b)},le.hsl=function(){return he(this.r,this.g,this.b)},le.toString=function(){return"#"+ce(this.r)+ce(this.g)+ce(this.b)};var ge=t.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});function ve(t){return"function"==typeof t?t:function(){return t}}function me(t){return function(e,r,n){return 2===arguments.length&&"function"==typeof r&&(n=r,r=null),ye(e,r,t,n)}}function ye(e,r,a,i){var o={},s=t.dispatch("beforesend","progress","load","error"),l={},c=new XMLHttpRequest,u=null;function h(){var t,e=c.status;if(!e&&function(t){var e=t.responseType;return e&&"text"!==e?t.response:t.responseText}(c)||e>=200&&e<300||304===e){try{t=a.call(o,c)}catch(t){return void s.error.call(o,t)}s.load.call(o,t)}else s.error.call(o,c)}return!this.XDomainRequest||"withCredentials"in c||!/^(http(s)?:)?\/\//.test(e)||(c=new XDomainRequest),"onload"in c?c.onload=c.onerror=h:c.onreadystatechange=function(){c.readyState>3&&h()},c.onprogress=function(e){var r=t.event;t.event=e;try{s.progress.call(o,c)}finally{t.event=r}},o.header=function(t,e){return t=(t+"").toLowerCase(),arguments.length<2?l[t]:(null==e?delete l[t]:l[t]=e+"",o)},o.mimeType=function(t){return arguments.length?(r=null==t?null:t+"",o):r},o.responseType=function(t){return arguments.length?(u=t,o):u},o.response=function(t){return a=t,o},["get","post"].forEach(function(t){o[t]=function(){return o.send.apply(o,[t].concat(n(arguments)))}}),o.send=function(t,n,a){if(2===arguments.length&&"function"==typeof n&&(a=n,n=null),c.open(t,e,!0),null==r||"accept"in l||(l.accept=r+",*/*"),c.setRequestHeader)for(var i in l)c.setRequestHeader(i,l[i]);return null!=r&&c.overrideMimeType&&c.overrideMimeType(r),null!=u&&(c.responseType=u),null!=a&&o.on("error",a).on("load",function(t){a(null,t)}),s.beforesend.call(o,c),c.send(null==n?null:n),o},o.abort=function(){return c.abort(),o},t.rebind(o,s,"on"),null==i?o:o.get(function(t){return 1===t.length?function(e,r){t(null==e?r:null)}:t}(i))}ge.forEach(function(t,e){ge.set(t,oe(e))}),t.functor=ve,t.xhr=me(P),t.dsv=function(t,e){var r=new RegExp('["'+t+"\n]"),n=t.charCodeAt(0);function a(t,r,n){arguments.length<3&&(n=r,r=null);var a=ye(t,e,null==r?i:o(r),n);return a.row=function(t){return arguments.length?a.response(null==(r=t)?i:o(t)):r},a}function i(t){return a.parse(t.responseText)}function o(t){return function(e){return a.parse(e.responseText,t)}}function s(e){return e.map(l).join(t)}function l(t){return r.test(t)?'"'+t.replace(/\"/g,'""')+'"':t}return a.parse=function(t,e){var r;return a.parseRows(t,function(t,n){if(r)return r(t,n-1);var a=new Function("d","return {"+t.map(function(t,e){return JSON.stringify(t)+": d["+e+"]"}).join(",")+"}");r=e?function(t,r){return e(a(t),r)}:a})},a.parseRows=function(t,e){var r,a,i={},o={},s=[],l=t.length,c=0,u=0;function h(){if(c>=l)return o;if(a)return a=!1,i;var e=c;if(34===t.charCodeAt(e)){for(var r=e;r++<l;)if(34===t.charCodeAt(r)){if(34!==t.charCodeAt(r+1))break;++r}return c=r+2,13===(s=t.charCodeAt(r+1))?(a=!0,10===t.charCodeAt(r+2)&&++c):10===s&&(a=!0),t.slice(e+1,r).replace(/""/g,'"')}for(;c<l;){var s,u=1;if(10===(s=t.charCodeAt(c++)))a=!0;else if(13===s)a=!0,10===t.charCodeAt(c)&&(++c,++u);else if(s!==n)continue;return t.slice(e,c-u)}return t.slice(e)}for(;(r=h())!==o;){for(var f=[];r!==i&&r!==o;)f.push(r),r=h();e&&null==(f=e(f,u++))||s.push(f)}return s},a.format=function(e){if(Array.isArray(e[0]))return a.formatRows(e);var r=new C,n=[];return e.forEach(function(t){for(var e in t)r.has(e)||n.push(r.add(e))}),[n.map(l).join(t)].concat(e.map(function(e){return n.map(function(t){return l(e[t])}).join(t)})).join("\n")},a.formatRows=function(t){return t.map(s).join("\n")},a},t.csv=t.dsv(",","text/csv"),t.tsv=t.dsv("\t","text/tab-separated-values");var xe,be,_e,we,ke=this[z(this,"requestAnimationFrame")]||function(t){setTimeout(t,17)};function Te(t,e,r){var n=arguments.length;n<2&&(e=0),n<3&&(r=Date.now());var a={c:t,t:r+e,n:null};return be?be.n=a:xe=a,be=a,_e||(we=clearTimeout(we),_e=1,ke(Me)),a}function Me(){var t=Ae(),e=Se()-t;e>24?(isFinite(e)&&(clearTimeout(we),we=setTimeout(Me,e)),_e=0):(_e=1,ke(Me))}function Ae(){for(var t=Date.now(),e=xe;e;)t>=e.t&&e.c(t-e.t)&&(e.c=null),e=e.n;return t}function Se(){for(var t,e=xe,r=1/0;e;)e.c?(e.t<r&&(r=e.t),e=(t=e).n):e=t?t.n=e.n:xe=e.n;return be=t,r}function Ee(t,e){return e-(t?Math.ceil(Math.log(t)/Math.LN10):1)}t.timer=function(){Te.apply(this,arguments)},t.timer.flush=function(){Ae(),Se()},t.round=function(t,e){return e?Math.round(t*(e=Math.pow(10,e)))/e:Math.round(t)};var Le=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(function(t,e){var r=Math.pow(10,3*y(8-e));return{scale:e>8?function(t){return t/r}:function(t){return t*r},symbol:t}});function Ce(e){var r=e.decimal,n=e.thousands,a=e.grouping,i=e.currency,o=a&&n?function(t,e){for(var r=t.length,i=[],o=0,s=a[0],l=0;r>0&&s>0&&(l+s+1>e&&(s=Math.max(1,e-l)),i.push(t.substring(r-=s,r+s)),!((l+=s+1)>e));)s=a[o=(o+1)%a.length];return i.reverse().join(n)}:P;return function(e){var n=Pe.exec(e),a=n[1]||" ",s=n[2]||">",l=n[3]||"-",c=n[4]||"",u=n[5],h=+n[6],f=n[7],p=n[8],d=n[9],g=1,v="",m="",y=!1,x=!0;switch(p&&(p=+p.substring(1)),(u||"0"===a&&"="===s)&&(u=a="0",s="="),d){case"n":f=!0,d="g";break;case"%":g=100,m="%",d="f";break;case"p":g=100,m="%",d="r";break;case"b":case"o":case"x":case"X":"#"===c&&(v="0"+d.toLowerCase());case"c":x=!1;case"d":y=!0,p=0;break;case"s":g=-1,d="r"}"$"===c&&(v=i[0],m=i[1]),"r"!=d||p||(d="g"),null!=p&&("g"==d?p=Math.max(1,Math.min(21,p)):"e"!=d&&"f"!=d||(p=Math.max(0,Math.min(20,p)))),d=Oe.get(d)||ze;var b=u&&f;return function(e){var n=m;if(y&&e%1)return"";var i=e<0||0===e&&1/e<0?(e=-e,"-"):"-"===l?"":l;if(g<0){var c=t.formatPrefix(e,p);e=c.scale(e),n=c.symbol+m}else e*=g;var _,w,k=(e=d(e,p)).lastIndexOf(".");if(k<0){var T=x?e.lastIndexOf("e"):-1;T<0?(_=e,w=""):(_=e.substring(0,T),w=e.substring(T))}else _=e.substring(0,k),w=r+e.substring(k+1);!u&&f&&(_=o(_,1/0));var M=v.length+_.length+w.length+(b?0:i.length),A=M<h?new Array(M=h-M+1).join(a):"";return b&&(_=o(A+_,A.length?h-w.length:1/0)),i+=v,e=_+w,("<"===s?i+e+A:">"===s?A+i+e:"^"===s?A.substring(0,M>>=1)+i+e+A.substring(M):i+(b?e:A+e))+n}}}t.formatPrefix=function(e,r){var n=0;return(e=+e)&&(e<0&&(e*=-1),r&&(e=t.round(e,Ee(e,r))),n=1+Math.floor(1e-12+Math.log(e)/Math.LN10),n=Math.max(-24,Math.min(24,3*Math.floor((n-1)/3)))),Le[8+n/3]};var Pe=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,Oe=t.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,e){return t.toPrecision(e)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},r:function(e,r){return(e=t.round(e,Ee(e,r))).toFixed(Math.max(0,Math.min(20,Ee(e*(1+1e-15),r))))}});function ze(t){return t+""}var Ie=t.time={},De=Date;function Re(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}Re.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){Fe.setUTCDate.apply(this._,arguments)},setDay:function(){Fe.setUTCDay.apply(this._,arguments)},setFullYear:function(){Fe.setUTCFullYear.apply(this._,arguments)},setHours:function(){Fe.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){Fe.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){Fe.setUTCMinutes.apply(this._,arguments)},setMonth:function(){Fe.setUTCMonth.apply(this._,arguments)},setSeconds:function(){Fe.setUTCSeconds.apply(this._,arguments)},setTime:function(){Fe.setTime.apply(this._,arguments)}};var Fe=Date.prototype;function Be(t,e,r){function n(e){var r=t(e),n=i(r,1);return e-r<n-e?r:n}function a(r){return e(r=t(new De(r-1)),1),r}function i(t,r){return e(t=new De(+t),r),t}function o(t,n,i){var o=a(t),s=[];if(i>1)for(;o<n;)r(o)%i||s.push(new Date(+o)),e(o,1);else for(;o<n;)s.push(new Date(+o)),e(o,1);return s}t.floor=t,t.round=n,t.ceil=a,t.offset=i,t.range=o;var s=t.utc=Ne(t);return s.floor=s,s.round=Ne(n),s.ceil=Ne(a),s.offset=Ne(i),s.range=function(t,e,r){try{De=Re;var n=new Re;return n._=t,o(n,e,r)}finally{De=Date}},t}function Ne(t){return function(e,r){try{De=Re;var n=new Re;return n._=e,t(n,r)._}finally{De=Date}}}function je(e){var r=e.dateTime,n=e.date,a=e.time,i=e.periods,o=e.days,s=e.shortDays,l=e.months,c=e.shortMonths;function u(t){var e=t.length;function r(r){for(var n,a,i,o=[],s=-1,l=0;++s<e;)37===t.charCodeAt(s)&&(o.push(t.slice(l,s)),null!=(a=Ve[n=t.charAt(++s)])&&(n=t.charAt(++s)),(i=_[n])&&(n=i(r,null==a?"e"===n?" ":"0":a)),o.push(n),l=s+1);return o.push(t.slice(l,s)),o.join("")}return r.parse=function(e){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null};if(h(r,t,e,0)!=e.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var n=null!=r.Z&&De!==Re,a=new(n?Re:De);return"j"in r?a.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),a.setFullYear(r.y,0,1),a.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(a.getDay()+5)%7:r.w+7*r.U-(a.getDay()+6)%7)):a.setFullYear(r.y,r.m,r.d),a.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),n?a._:a},r.toString=function(){return t},r}function h(t,e,r,n){for(var a,i,o,s=0,l=e.length,c=r.length;s<l;){if(n>=c)return-1;if(37===(a=e.charCodeAt(s++))){if(o=e.charAt(s++),!(i=w[o in Ve?e.charAt(s++):o])||(n=i(t,r,n))<0)return-1}else if(a!=r.charCodeAt(n++))return-1}return n}u.utc=function(t){var e=u(t);function r(t){try{var r=new(De=Re);return r._=t,e(r)}finally{De=Date}}return r.parse=function(t){try{De=Re;var r=e.parse(t);return r&&r._}finally{De=Date}},r.toString=e.toString,r},u.multi=u.utc.multi=lr;var f=t.map(),p=Ge(o),d=Ye(o),g=Ge(s),v=Ye(s),m=Ge(l),y=Ye(l),x=Ge(c),b=Ye(c);i.forEach(function(t,e){f.set(t.toLowerCase(),e)});var _={a:function(t){return s[t.getDay()]},A:function(t){return o[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return l[t.getMonth()]},c:u(r),d:function(t,e){return He(t.getDate(),e,2)},e:function(t,e){return He(t.getDate(),e,2)},H:function(t,e){return He(t.getHours(),e,2)},I:function(t,e){return He(t.getHours()%12||12,e,2)},j:function(t,e){return He(1+Ie.dayOfYear(t),e,3)},L:function(t,e){return He(t.getMilliseconds(),e,3)},m:function(t,e){return He(t.getMonth()+1,e,2)},M:function(t,e){return He(t.getMinutes(),e,2)},p:function(t){return i[+(t.getHours()>=12)]},S:function(t,e){return He(t.getSeconds(),e,2)},U:function(t,e){return He(Ie.sundayOfYear(t),e,2)},w:function(t){return t.getDay()},W:function(t,e){return He(Ie.mondayOfYear(t),e,2)},x:u(n),X:u(a),y:function(t,e){return He(t.getFullYear()%100,e,2)},Y:function(t,e){return He(t.getFullYear()%1e4,e,4)},Z:or,"%":function(){return"%"}},w={a:function(t,e,r){g.lastIndex=0;var n=g.exec(e.slice(r));return n?(t.w=v.get(n[0].toLowerCase()),r+n[0].length):-1},A:function(t,e,r){p.lastIndex=0;var n=p.exec(e.slice(r));return n?(t.w=d.get(n[0].toLowerCase()),r+n[0].length):-1},b:function(t,e,r){x.lastIndex=0;var n=x.exec(e.slice(r));return n?(t.m=b.get(n[0].toLowerCase()),r+n[0].length):-1},B:function(t,e,r){m.lastIndex=0;var n=m.exec(e.slice(r));return n?(t.m=y.get(n[0].toLowerCase()),r+n[0].length):-1},c:function(t,e,r){return h(t,_.c.toString(),e,r)},d:tr,e:tr,H:rr,I:rr,j:er,L:ir,m:$e,M:nr,p:function(t,e,r){var n=f.get(e.slice(r,r+=2).toLowerCase());return null==n?-1:(t.p=n,r)},S:ar,U:Xe,w:We,W:Ze,x:function(t,e,r){return h(t,_.x.toString(),e,r)},X:function(t,e,r){return h(t,_.X.toString(),e,r)},y:Ke,Y:Je,Z:Qe,"%":sr};return u}Ie.year=Be(function(t){return(t=Ie.day(t)).setMonth(0,1),t},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t){return t.getFullYear()}),Ie.years=Ie.year.range,Ie.years.utc=Ie.year.utc.range,Ie.day=Be(function(t){var e=new De(2e3,0);return e.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),e},function(t,e){t.setDate(t.getDate()+e)},function(t){return t.getDate()-1}),Ie.days=Ie.day.range,Ie.days.utc=Ie.day.utc.range,Ie.dayOfYear=function(t){var e=Ie.year(t);return Math.floor((t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(t,e){e=7-e;var r=Ie[t]=Be(function(t){return(t=Ie.day(t)).setDate(t.getDate()-(t.getDay()+e)%7),t},function(t,e){t.setDate(t.getDate()+7*Math.floor(e))},function(t){var r=Ie.year(t).getDay();return Math.floor((Ie.dayOfYear(t)+(r+e)%7)/7)-(r!==e)});Ie[t+"s"]=r.range,Ie[t+"s"].utc=r.utc.range,Ie[t+"OfYear"]=function(t){var r=Ie.year(t).getDay();return Math.floor((Ie.dayOfYear(t)+(r+e)%7)/7)}}),Ie.week=Ie.sunday,Ie.weeks=Ie.sunday.range,Ie.weeks.utc=Ie.sunday.utc.range,Ie.weekOfYear=Ie.sundayOfYear;var Ve={"-":"",_:" ",0:"0"},Ue=/^\s*\d+/,qe=/^%/;function He(t,e,r){var n=t<0?"-":"",a=(n?-t:t)+"",i=a.length;return n+(i<r?new Array(r-i+1).join(e)+a:a)}function Ge(e){return new RegExp("^(?:"+e.map(t.requote).join("|")+")","i")}function Ye(t){for(var e=new b,r=-1,n=t.length;++r<n;)e.set(t[r].toLowerCase(),r);return e}function We(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function Xe(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r));return n?(t.U=+n[0],r+n[0].length):-1}function Ze(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r));return n?(t.W=+n[0],r+n[0].length):-1}function Je(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function Ke(t,e,r){Ue.lastIndex=0;var n,a=Ue.exec(e.slice(r,r+2));return a?(t.y=(n=+a[0])+(n>68?1900:2e3),r+a[0].length):-1}function Qe(t,e,r){return/^[+-]\d{4}$/.test(e=e.slice(r,r+5))?(t.Z=-e,r+5):-1}function $e(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function tr(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function er(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+3));return n?(t.j=+n[0],r+n[0].length):-1}function rr(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function nr(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function ar(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function ir(t,e,r){Ue.lastIndex=0;var n=Ue.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function or(t){var e=t.getTimezoneOffset(),r=e>0?"-":"+",n=y(e)/60|0,a=y(e)%60;return r+He(n,"0",2)+He(a,"0",2)}function sr(t,e,r){qe.lastIndex=0;var n=qe.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function lr(t){for(var e=t.length,r=-1;++r<e;)t[r][0]=this(t[r][0]);return function(e){for(var r=0,n=t[r];!n[1](e);)n=t[++r];return n[0](e)}}t.locale=function(t){return{numberFormat:Ce(t),timeFormat:je(t)}};var cr=t.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function ur(){}t.format=cr.numberFormat,t.geo={},ur.prototype={s:0,t:0,add:function(t){fr(t,this.t,hr),fr(hr.s,this.s,this),this.s?this.t+=hr.t:this.s=hr.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var hr=new ur;function fr(t,e,r){var n=r.s=t+e,a=n-t,i=n-a;r.t=t-i+(e-a)}function pr(t,e){t&&gr.hasOwnProperty(t.type)&&gr[t.type](t,e)}t.geo.stream=function(t,e){t&&dr.hasOwnProperty(t.type)?dr[t.type](t,e):pr(t,e)};var dr={Feature:function(t,e){pr(t.geometry,e)},FeatureCollection:function(t,e){for(var r=t.features,n=-1,a=r.length;++n<a;)pr(r[n].geometry,e)}},gr={Sphere:function(t,e){e.sphere()},Point:function(t,e){t=t.coordinates,e.point(t[0],t[1],t[2])},MultiPoint:function(t,e){for(var r=t.coordinates,n=-1,a=r.length;++n<a;)t=r[n],e.point(t[0],t[1],t[2])},LineString:function(t,e){vr(t.coordinates,e,0)},MultiLineString:function(t,e){for(var r=t.coordinates,n=-1,a=r.length;++n<a;)vr(r[n],e,0)},Polygon:function(t,e){mr(t.coordinates,e)},MultiPolygon:function(t,e){for(var r=t.coordinates,n=-1,a=r.length;++n<a;)mr(r[n],e)},GeometryCollection:function(t,e){for(var r=t.geometries,n=-1,a=r.length;++n<a;)pr(r[n],e)}};function vr(t,e,r){var n,a=-1,i=t.length-r;for(e.lineStart();++a<i;)n=t[a],e.point(n[0],n[1],n[2]);e.lineEnd()}function mr(t,e){var r=-1,n=t.length;for(e.polygonStart();++r<n;)vr(t[r],e,1);e.polygonEnd()}t.geo.area=function(e){return yr=0,t.geo.stream(e,Pr),yr};var yr,xr,br,_r,wr,kr,Tr,Mr,Ar,Sr,Er,Lr,Cr=new ur,Pr={sphere:function(){yr+=4*Mt},point:D,lineStart:D,lineEnd:D,polygonStart:function(){Cr.reset(),Pr.lineStart=Or},polygonEnd:function(){var t=2*Cr;yr+=t<0?4*Mt+t:t,Pr.lineStart=Pr.lineEnd=Pr.point=D}};function Or(){var t,e,r,n,a;function i(t,e){e=e*Lt/2+Mt/4;var i=(t*=Lt)-r,o=i>=0?1:-1,s=o*i,l=Math.cos(e),c=Math.sin(e),u=a*c,h=n*l+u*Math.cos(s),f=u*o*Math.sin(s);Cr.add(Math.atan2(f,h)),r=t,n=l,a=c}Pr.point=function(o,s){Pr.point=i,r=(t=o)*Lt,n=Math.cos(s=(e=s)*Lt/2+Mt/4),a=Math.sin(s)},Pr.lineEnd=function(){i(t,e)}}function zr(t){var e=t[0],r=t[1],n=Math.cos(r);return[n*Math.cos(e),n*Math.sin(e),Math.sin(r)]}function Ir(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Dr(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function Rr(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function Fr(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function Br(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}function Nr(t){return[Math.atan2(t[1],t[0]),It(t[2])]}function jr(t,e){return y(t[0]-e[0])<kt&&y(t[1]-e[1])<kt}t.geo.bounds=function(){var e,r,n,a,i,o,s,l,c,u,h,f={point:p,lineStart:g,lineEnd:v,polygonStart:function(){f.point=m,f.lineStart=x,f.lineEnd=b,c=0,Pr.polygonStart()},polygonEnd:function(){Pr.polygonEnd(),f.point=p,f.lineStart=g,f.lineEnd=v,Cr<0?(e=-(n=180),r=-(a=90)):c>kt?a=90:c<-kt&&(r=-90),h[0]=e,h[1]=n}};function p(t,i){u.push(h=[e=t,n=t]),i<r&&(r=i),i>a&&(a=i)}function d(t,o){var s=zr([t*Lt,o*Lt]);if(l){var c=Dr(l,s),u=Dr([c[1],-c[0],0],c);Br(u),u=Nr(u);var h=t-i,f=h>0?1:-1,d=u[0]*Ct*f,g=y(h)>180;if(g^(f*i<d&&d<f*t))(v=u[1]*Ct)>a&&(a=v);else if(g^(f*i<(d=(d+360)%360-180)&&d<f*t)){var v;(v=-u[1]*Ct)<r&&(r=v)}else o<r&&(r=o),o>a&&(a=o);g?t<i?_(e,t)>_(e,n)&&(n=t):_(t,n)>_(e,n)&&(e=t):n>=e?(t<e&&(e=t),t>n&&(n=t)):t>i?_(e,t)>_(e,n)&&(n=t):_(t,n)>_(e,n)&&(e=t)}else p(t,o);l=s,i=t}function g(){f.point=d}function v(){h[0]=e,h[1]=n,f.point=p,l=null}function m(t,e){if(l){var r=t-i;c+=y(r)>180?r+(r>0?360:-360):r}else o=t,s=e;Pr.point(t,e),d(t,e)}function x(){Pr.lineStart()}function b(){m(o,s),Pr.lineEnd(),y(c)>kt&&(e=-(n=180)),h[0]=e,h[1]=n,l=null}function _(t,e){return(e-=t)<0?e+360:e}function w(t,e){return t[0]-e[0]}function k(t,e){return e[0]<=e[1]?e[0]<=t&&t<=e[1]:t<e[0]||e[1]<t}return function(i){if(a=n=-(e=r=1/0),u=[],t.geo.stream(i,f),c=u.length){u.sort(w);for(var o=1,s=[g=u[0]];o<c;++o)k((p=u[o])[0],g)||k(p[1],g)?(_(g[0],p[1])>_(g[0],g[1])&&(g[1]=p[1]),_(p[0],g[1])>_(g[0],g[1])&&(g[0]=p[0])):s.push(g=p);for(var l,c,p,d=-1/0,g=(o=0,s[c=s.length-1]);o<=c;g=p,++o)p=s[o],(l=_(g[1],p[0]))>d&&(d=l,e=p[0],n=g[1])}return u=h=null,e===1/0||r===1/0?[[NaN,NaN],[NaN,NaN]]:[[e,r],[n,a]]}}(),t.geo.centroid=function(e){xr=br=_r=wr=kr=Tr=Mr=Ar=Sr=Er=Lr=0,t.geo.stream(e,Vr);var r=Sr,n=Er,a=Lr,i=r*r+n*n+a*a;return i<Tt&&(r=Tr,n=Mr,a=Ar,br<kt&&(r=_r,n=wr,a=kr),(i=r*r+n*n+a*a)<Tt)?[NaN,NaN]:[Math.atan2(n,r)*Ct,It(a/Math.sqrt(i))*Ct]};var Vr={sphere:D,point:Ur,lineStart:Hr,lineEnd:Gr,polygonStart:function(){Vr.lineStart=Yr},polygonEnd:function(){Vr.lineStart=Hr}};function Ur(t,e){t*=Lt;var r=Math.cos(e*=Lt);qr(r*Math.cos(t),r*Math.sin(t),Math.sin(e))}function qr(t,e,r){_r+=(t-_r)/++xr,wr+=(e-wr)/xr,kr+=(r-kr)/xr}function Hr(){var t,e,r;function n(n,a){n*=Lt;var i=Math.cos(a*=Lt),o=i*Math.cos(n),s=i*Math.sin(n),l=Math.sin(a),c=Math.atan2(Math.sqrt((c=e*l-r*s)*c+(c=r*o-t*l)*c+(c=t*s-e*o)*c),t*o+e*s+r*l);br+=c,Tr+=c*(t+(t=o)),Mr+=c*(e+(e=s)),Ar+=c*(r+(r=l)),qr(t,e,r)}Vr.point=function(a,i){a*=Lt;var o=Math.cos(i*=Lt);t=o*Math.cos(a),e=o*Math.sin(a),r=Math.sin(i),Vr.point=n,qr(t,e,r)}}function Gr(){Vr.point=Ur}function Yr(){var t,e,r,n,a;function i(t,e){t*=Lt;var i=Math.cos(e*=Lt),o=i*Math.cos(t),s=i*Math.sin(t),l=Math.sin(e),c=n*l-a*s,u=a*o-r*l,h=r*s-n*o,f=Math.sqrt(c*c+u*u+h*h),p=r*o+n*s+a*l,d=f&&-zt(p)/f,g=Math.atan2(f,p);Sr+=d*c,Er+=d*u,Lr+=d*h,br+=g,Tr+=g*(r+(r=o)),Mr+=g*(n+(n=s)),Ar+=g*(a+(a=l)),qr(r,n,a)}Vr.point=function(o,s){t=o,e=s,Vr.point=i,o*=Lt;var l=Math.cos(s*=Lt);r=l*Math.cos(o),n=l*Math.sin(o),a=Math.sin(s),qr(r,n,a)},Vr.lineEnd=function(){i(t,e),Vr.lineEnd=Gr,Vr.point=Ur}}function Wr(t,e){function r(r,n){return r=t(r,n),e(r[0],r[1])}return t.invert&&e.invert&&(r.invert=function(r,n){return(r=e.invert(r,n))&&t.invert(r[0],r[1])}),r}function Xr(){return!0}function Zr(t,e,r,n,a){var i=[],o=[];if(t.forEach(function(t){if(!((e=t.length-1)<=0)){var e,r=t[0],n=t[e];if(jr(r,n)){a.lineStart();for(var s=0;s<e;++s)a.point((r=t[s])[0],r[1]);a.lineEnd()}else{var l=new Kr(r,t,null,!0),c=new Kr(r,null,l,!1);l.o=c,i.push(l),o.push(c),l=new Kr(n,t,null,!1),c=new Kr(n,null,l,!0),l.o=c,i.push(l),o.push(c)}}}),o.sort(e),Jr(i),Jr(o),i.length){for(var s=0,l=r,c=o.length;s<c;++s)o[s].e=l=!l;for(var u,h,f=i[0];;){for(var p=f,d=!0;p.v;)if((p=p.n)===f)return;u=p.z,a.lineStart();do{if(p.v=p.o.v=!0,p.e){if(d)for(s=0,c=u.length;s<c;++s)a.point((h=u[s])[0],h[1]);else n(p.x,p.n.x,1,a);p=p.n}else{if(d)for(s=(u=p.p.z).length-1;s>=0;--s)a.point((h=u[s])[0],h[1]);else n(p.x,p.p.x,-1,a);p=p.p}u=(p=p.o).z,d=!d}while(!p.v);a.lineEnd()}}}function Jr(t){if(e=t.length){for(var e,r,n=0,a=t[0];++n<e;)a.n=r=t[n],r.p=a,a=r;a.n=r=t[0],r.p=a}}function Kr(t,e,r,n){this.x=t,this.z=e,this.o=r,this.e=n,this.v=!1,this.n=this.p=null}function Qr(e,r,n,a){return function(i,o){var s,l=r(o),c=i.invert(a[0],a[1]),u={point:h,lineStart:p,lineEnd:d,polygonStart:function(){u.point=b,u.lineStart=_,u.lineEnd=w,s=[],g=[]},polygonEnd:function(){u.point=h,u.lineStart=p,u.lineEnd=d,s=t.merge(s);var e=function(t,e){var r=t[0],n=t[1],a=[Math.sin(r),-Math.cos(r),0],i=0,o=0;Cr.reset();for(var s=0,l=e.length;s<l;++s){var c=e[s],u=c.length;if(u)for(var h=c[0],f=h[0],p=h[1]/2+Mt/4,d=Math.sin(p),g=Math.cos(p),v=1;;){v===u&&(v=0);var m=(t=c[v])[0],y=t[1]/2+Mt/4,x=Math.sin(y),b=Math.cos(y),_=m-f,w=_>=0?1:-1,k=w*_,T=k>Mt,M=d*x;if(Cr.add(Math.atan2(M*w*Math.sin(k),g*b+M*Math.cos(k))),i+=T?_+w*At:_,T^f>=r^m>=r){var A=Dr(zr(h),zr(t));Br(A);var S=Dr(a,A);Br(S);var E=(T^_>=0?-1:1)*It(S[2]);(n>E||n===E&&(A[0]||A[1]))&&(o+=T^_>=0?1:-1)}if(!v++)break;f=m,d=x,g=b,h=t}}return(i<-kt||i<kt&&Cr<-kt)^1&o}(c,g);s.length?(x||(o.polygonStart(),x=!0),Zr(s,en,e,n,o)):e&&(x||(o.polygonStart(),x=!0),o.lineStart(),n(null,null,1,o),o.lineEnd()),x&&(o.polygonEnd(),x=!1),s=g=null},sphere:function(){o.polygonStart(),o.lineStart(),n(null,null,1,o),o.lineEnd(),o.polygonEnd()}};function h(t,r){var n=i(t,r);e(t=n[0],r=n[1])&&o.point(t,r)}function f(t,e){var r=i(t,e);l.point(r[0],r[1])}function p(){u.point=f,l.lineStart()}function d(){u.point=h,l.lineEnd()}var g,v,m=tn(),y=r(m),x=!1;function b(t,e){v.push([t,e]);var r=i(t,e);y.point(r[0],r[1])}function _(){y.lineStart(),v=[]}function w(){b(v[0][0],v[0][1]),y.lineEnd();var t,e=y.clean(),r=m.buffer(),n=r.length;if(v.pop(),g.push(v),v=null,n)if(1&e){var a,i=-1;if((n=(t=r[0]).length-1)>0){for(x||(o.polygonStart(),x=!0),o.lineStart();++i<n;)o.point((a=t[i])[0],a[1]);o.lineEnd()}}else n>1&&2&e&&r.push(r.pop().concat(r.shift())),s.push(r.filter($r))}return u}}function $r(t){return t.length>1}function tn(){var t,e=[];return{lineStart:function(){e.push(t=[])},point:function(e,r){t.push([e,r])},lineEnd:D,buffer:function(){var r=e;return e=[],t=null,r},rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))}}}function en(t,e){return((t=t.x)[0]<0?t[1]-Et-kt:Et-t[1])-((e=e.x)[0]<0?e[1]-Et-kt:Et-e[1])}var rn=Qr(Xr,function(t){var e,r=NaN,n=NaN,a=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(i,o){var s=i>0?Mt:-Mt,l=y(i-r);y(l-Mt)<kt?(t.point(r,n=(n+o)/2>0?Et:-Et),t.point(a,n),t.lineEnd(),t.lineStart(),t.point(s,n),t.point(i,n),e=0):a!==s&&l>=Mt&&(y(r-a)<kt&&(r-=a*kt),y(i-s)<kt&&(i-=s*kt),n=function(t,e,r,n){var a,i,o=Math.sin(t-r);return y(o)>kt?Math.atan((Math.sin(e)*(i=Math.cos(n))*Math.sin(r)-Math.sin(n)*(a=Math.cos(e))*Math.sin(t))/(a*i*o)):(e+n)/2}(r,n,i,o),t.point(a,n),t.lineEnd(),t.lineStart(),t.point(s,n),e=0),t.point(r=i,n=o),a=s},lineEnd:function(){t.lineEnd(),r=n=NaN},clean:function(){return 2-e}}},function(t,e,r,n){var a;if(null==t)a=r*Et,n.point(-Mt,a),n.point(0,a),n.point(Mt,a),n.point(Mt,0),n.point(Mt,-a),n.point(0,-a),n.point(-Mt,-a),n.point(-Mt,0),n.point(-Mt,a);else if(y(t[0]-e[0])>kt){var i=t[0]<e[0]?Mt:-Mt;a=r*i/2,n.point(-i,a),n.point(0,a),n.point(i,a)}else n.point(e[0],e[1])},[-Mt,-Mt/2]);function nn(t,e,r,n){return function(a){var i,o=a.a,s=a.b,l=o.x,c=o.y,u=0,h=1,f=s.x-l,p=s.y-c;if(i=t-l,f||!(i>0)){if(i/=f,f<0){if(i<u)return;i<h&&(h=i)}else if(f>0){if(i>h)return;i>u&&(u=i)}if(i=r-l,f||!(i<0)){if(i/=f,f<0){if(i>h)return;i>u&&(u=i)}else if(f>0){if(i<u)return;i<h&&(h=i)}if(i=e-c,p||!(i>0)){if(i/=p,p<0){if(i<u)return;i<h&&(h=i)}else if(p>0){if(i>h)return;i>u&&(u=i)}if(i=n-c,p||!(i<0)){if(i/=p,p<0){if(i>h)return;i>u&&(u=i)}else if(p>0){if(i<u)return;i<h&&(h=i)}return u>0&&(a.a={x:l+u*f,y:c+u*p}),h<1&&(a.b={x:l+h*f,y:c+h*p}),a}}}}}}var an=1e9;function on(e,r,n,a){return function(l){var c,u,h,f,p,d,g,v,m,y,x,b=l,_=tn(),w=nn(e,r,n,a),k={point:A,lineStart:function(){k.point=S,u&&u.push(h=[]);y=!0,m=!1,g=v=NaN},lineEnd:function(){c&&(S(f,p),d&&m&&_.rejoin(),c.push(_.buffer()));k.point=A,m&&l.lineEnd()},polygonStart:function(){l=_,c=[],u=[],x=!0},polygonEnd:function(){l=b,c=t.merge(c);var r=function(t){for(var e=0,r=u.length,n=t[1],a=0;a<r;++a)for(var i,o=1,s=u[a],l=s.length,c=s[0];o<l;++o)i=s[o],c[1]<=n?i[1]>n&&Ot(c,i,t)>0&&++e:i[1]<=n&&Ot(c,i,t)<0&&--e,c=i;return 0!==e}([e,a]),n=x&&r,i=c.length;(n||i)&&(l.polygonStart(),n&&(l.lineStart(),T(null,null,1,l),l.lineEnd()),i&&Zr(c,o,r,T,l),l.polygonEnd()),c=u=h=null}};function T(t,o,l,c){var u=0,h=0;if(null==t||(u=i(t,l))!==(h=i(o,l))||s(t,o)<0^l>0)do{c.point(0===u||3===u?e:n,u>1?a:r)}while((u=(u+l+4)%4)!==h);else c.point(o[0],o[1])}function M(t,i){return e<=t&&t<=n&&r<=i&&i<=a}function A(t,e){M(t,e)&&l.point(t,e)}function S(t,e){var r=M(t=Math.max(-an,Math.min(an,t)),e=Math.max(-an,Math.min(an,e)));if(u&&h.push([t,e]),y)f=t,p=e,d=r,y=!1,r&&(l.lineStart(),l.point(t,e));else if(r&&m)l.point(t,e);else{var n={a:{x:g,y:v},b:{x:t,y:e}};w(n)?(m||(l.lineStart(),l.point(n.a.x,n.a.y)),l.point(n.b.x,n.b.y),r||l.lineEnd(),x=!1):r&&(l.lineStart(),l.point(t,e),x=!1)}g=t,v=e,m=r}return k};function i(t,a){return y(t[0]-e)<kt?a>0?0:3:y(t[0]-n)<kt?a>0?2:1:y(t[1]-r)<kt?a>0?1:0:a>0?3:2}function o(t,e){return s(t.x,e.x)}function s(t,e){var r=i(t,1),n=i(e,1);return r!==n?r-n:0===r?e[1]-t[1]:1===r?t[0]-e[0]:2===r?t[1]-e[1]:e[0]-t[0]}}function sn(t){var e=0,r=Mt/3,n=Pn(t),a=n(e,r);return a.parallels=function(t){return arguments.length?n(e=t[0]*Mt/180,r=t[1]*Mt/180):[e/Mt*180,r/Mt*180]},a}function ln(t,e){var r=Math.sin(t),n=(r+Math.sin(e))/2,a=1+r*(2*n-r),i=Math.sqrt(a)/n;function o(t,e){var r=Math.sqrt(a-2*n*Math.sin(e))/n;return[r*Math.sin(t*=n),i-r*Math.cos(t)]}return o.invert=function(t,e){var r=i-e;return[Math.atan2(t,r)/n,It((a-(t*t+r*r)*n*n)/(2*n))]},o}t.geo.clipExtent=function(){var t,e,r,n,a,i,o={stream:function(t){return a&&(a.valid=!1),(a=i(t)).valid=!0,a},extent:function(s){return arguments.length?(i=on(t=+s[0][0],e=+s[0][1],r=+s[1][0],n=+s[1][1]),a&&(a.valid=!1,a=null),o):[[t,e],[r,n]]}};return o.extent([[0,0],[960,500]])},(t.geo.conicEqualArea=function(){return sn(ln)}).raw=ln,t.geo.albers=function(){return t.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},t.geo.albersUsa=function(){var e,r,n,a,i=t.geo.albers(),o=t.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),s=t.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(t,r){e=[t,r]}};function c(t){var i=t[0],o=t[1];return e=null,r(i,o),e||(n(i,o),e)||a(i,o),e}return c.invert=function(t){var e=i.scale(),r=i.translate(),n=(t[0]-r[0])/e,a=(t[1]-r[1])/e;return(a>=.12&&a<.234&&n>=-.425&&n<-.214?o:a>=.166&&a<.234&&n>=-.214&&n<-.115?s:i).invert(t)},c.stream=function(t){var e=i.stream(t),r=o.stream(t),n=s.stream(t);return{point:function(t,a){e.point(t,a),r.point(t,a),n.point(t,a)},sphere:function(){e.sphere(),r.sphere(),n.sphere()},lineStart:function(){e.lineStart(),r.lineStart(),n.lineStart()},lineEnd:function(){e.lineEnd(),r.lineEnd(),n.lineEnd()},polygonStart:function(){e.polygonStart(),r.polygonStart(),n.polygonStart()},polygonEnd:function(){e.polygonEnd(),r.polygonEnd(),n.polygonEnd()}}},c.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),s.precision(t),c):i.precision()},c.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),s.scale(t),c.translate(i.translate())):i.scale()},c.translate=function(t){if(!arguments.length)return i.translate();var e=i.scale(),u=+t[0],h=+t[1];return r=i.translate(t).clipExtent([[u-.455*e,h-.238*e],[u+.455*e,h+.238*e]]).stream(l).point,n=o.translate([u-.307*e,h+.201*e]).clipExtent([[u-.425*e+kt,h+.12*e+kt],[u-.214*e-kt,h+.234*e-kt]]).stream(l).point,a=s.translate([u-.205*e,h+.212*e]).clipExtent([[u-.214*e+kt,h+.166*e+kt],[u-.115*e-kt,h+.234*e-kt]]).stream(l).point,c},c.scale(1070)};var cn,un,hn,fn,pn,dn,gn={point:D,lineStart:D,lineEnd:D,polygonStart:function(){un=0,gn.lineStart=vn},polygonEnd:function(){gn.lineStart=gn.lineEnd=gn.point=D,cn+=y(un/2)}};function vn(){var t,e,r,n;function a(t,e){un+=n*t-r*e,r=t,n=e}gn.point=function(i,o){gn.point=a,t=r=i,e=n=o},gn.lineEnd=function(){a(t,e)}}var mn={point:function(t,e){t<hn&&(hn=t);t>pn&&(pn=t);e<fn&&(fn=e);e>dn&&(dn=e)},lineStart:D,lineEnd:D,polygonStart:D,polygonEnd:D};function yn(){var t=xn(4.5),e=[],r={point:n,lineStart:function(){r.point=a},lineEnd:o,polygonStart:function(){r.lineEnd=s},polygonEnd:function(){r.lineEnd=o,r.point=n},pointRadius:function(e){return t=xn(e),r},result:function(){if(e.length){var t=e.join("");return e=[],t}}};function n(r,n){e.push("M",r,",",n,t)}function a(t,n){e.push("M",t,",",n),r.point=i}function i(t,r){e.push("L",t,",",r)}function o(){r.point=n}function s(){e.push("Z")}return r}function xn(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}var bn,_n={point:wn,lineStart:kn,lineEnd:Tn,polygonStart:function(){_n.lineStart=Mn},polygonEnd:function(){_n.point=wn,_n.lineStart=kn,_n.lineEnd=Tn}};function wn(t,e){_r+=t,wr+=e,++kr}function kn(){var t,e;function r(r,n){var a=r-t,i=n-e,o=Math.sqrt(a*a+i*i);Tr+=o*(t+r)/2,Mr+=o*(e+n)/2,Ar+=o,wn(t=r,e=n)}_n.point=function(n,a){_n.point=r,wn(t=n,e=a)}}function Tn(){_n.point=wn}function Mn(){var t,e,r,n;function a(t,e){var a=t-r,i=e-n,o=Math.sqrt(a*a+i*i);Tr+=o*(r+t)/2,Mr+=o*(n+e)/2,Ar+=o,Sr+=(o=n*t-r*e)*(r+t),Er+=o*(n+e),Lr+=3*o,wn(r=t,n=e)}_n.point=function(i,o){_n.point=a,wn(t=r=i,e=n=o)},_n.lineEnd=function(){a(t,e)}}function An(t){var e=4.5,r={point:n,lineStart:function(){r.point=a},lineEnd:o,polygonStart:function(){r.lineEnd=s},polygonEnd:function(){r.lineEnd=o,r.point=n},pointRadius:function(t){return e=t,r},result:D};function n(r,n){t.moveTo(r+e,n),t.arc(r,n,e,0,At)}function a(e,n){t.moveTo(e,n),r.point=i}function i(e,r){t.lineTo(e,r)}function o(){r.point=n}function s(){t.closePath()}return r}function Sn(t){var e=.5,r=Math.cos(30*Lt),n=16;function a(e){return(n?function(e){var r,a,o,s,l,c,u,h,f,p,d,g,v={point:m,lineStart:y,lineEnd:b,polygonStart:function(){e.polygonStart(),v.lineStart=_},polygonEnd:function(){e.polygonEnd(),v.lineStart=y}};function m(r,n){r=t(r,n),e.point(r[0],r[1])}function y(){h=NaN,v.point=x,e.lineStart()}function x(r,a){var o=zr([r,a]),s=t(r,a);i(h,f,u,p,d,g,h=s[0],f=s[1],u=r,p=o[0],d=o[1],g=o[2],n,e),e.point(h,f)}function b(){v.point=m,e.lineEnd()}function _(){y(),v.point=w,v.lineEnd=k}function w(t,e){x(r=t,e),a=h,o=f,s=p,l=d,c=g,v.point=x}function k(){i(h,f,u,p,d,g,a,o,r,s,l,c,n,e),v.lineEnd=b,b()}return v}:function(e){return Ln(e,function(r,n){r=t(r,n),e.point(r[0],r[1])})})(e)}function i(n,a,o,s,l,c,u,h,f,p,d,g,v,m){var x=u-n,b=h-a,_=x*x+b*b;if(_>4*e&&v--){var w=s+p,k=l+d,T=c+g,M=Math.sqrt(w*w+k*k+T*T),A=Math.asin(T/=M),S=y(y(T)-1)<kt||y(o-f)<kt?(o+f)/2:Math.atan2(k,w),E=t(S,A),L=E[0],C=E[1],P=L-n,O=C-a,z=b*P-x*O;(z*z/_>e||y((x*P+b*O)/_-.5)>.3||s*p+l*d+c*g<r)&&(i(n,a,o,s,l,c,L,C,S,w/=M,k/=M,T,v,m),m.point(L,C),i(L,C,S,w,k,T,u,h,f,p,d,g,v,m))}}return a.precision=function(t){return arguments.length?(n=(e=t*t)>0&&16,a):Math.sqrt(e)},a}function En(t){this.stream=t}function Ln(t,e){return{point:e,sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function Cn(t){return Pn(function(){return t})()}function Pn(e){var r,n,a,i,o,s,l=Sn(function(t,e){return[(t=r(t,e))[0]*c+i,o-t[1]*c]}),c=150,u=480,h=250,f=0,p=0,d=0,g=0,v=0,m=rn,x=P,b=null,_=null;function w(t){return[(t=a(t[0]*Lt,t[1]*Lt))[0]*c+i,o-t[1]*c]}function k(t){return(t=a.invert((t[0]-i)/c,(o-t[1])/c))&&[t[0]*Ct,t[1]*Ct]}function T(){a=Wr(n=Dn(d,g,v),r);var t=r(f,p);return i=u-t[0]*c,o=h+t[1]*c,M()}function M(){return s&&(s.valid=!1,s=null),w}return w.stream=function(t){return s&&(s.valid=!1),(s=On(m(n,l(x(t))))).valid=!0,s},w.clipAngle=function(t){return arguments.length?(m=null==t?(b=t,rn):function(t){var e=Math.cos(t),r=e>0,n=y(e)>kt;return Qr(a,function(t){var e,s,l,c,u;return{lineStart:function(){c=l=!1,u=1},point:function(h,f){var p,d=[h,f],g=a(h,f),v=r?g?0:o(h,f):g?o(h+(h<0?Mt:-Mt),f):0;if(!e&&(c=l=g)&&t.lineStart(),g!==l&&(p=i(e,d),(jr(e,p)||jr(d,p))&&(d[0]+=kt,d[1]+=kt,g=a(d[0],d[1]))),g!==l)u=0,g?(t.lineStart(),p=i(d,e),t.point(p[0],p[1])):(p=i(e,d),t.point(p[0],p[1]),t.lineEnd()),e=p;else if(n&&e&&r^g){var m;v&s||!(m=i(d,e,!0))||(u=0,r?(t.lineStart(),t.point(m[0][0],m[0][1]),t.point(m[1][0],m[1][1]),t.lineEnd()):(t.point(m[1][0],m[1][1]),t.lineEnd(),t.lineStart(),t.point(m[0][0],m[0][1])))}!g||e&&jr(e,d)||t.point(d[0],d[1]),e=d,l=g,s=v},lineEnd:function(){l&&t.lineEnd(),e=null},clean:function(){return u|(c&&l)<<1}}},Nn(t,6*Lt),r?[0,-t]:[-Mt,t-Mt]);function a(t,r){return Math.cos(t)*Math.cos(r)>e}function i(t,r,n){var a=[1,0,0],i=Dr(zr(t),zr(r)),o=Ir(i,i),s=i[0],l=o-s*s;if(!l)return!n&&t;var c=e*o/l,u=-e*s/l,h=Dr(a,i),f=Fr(a,c);Rr(f,Fr(i,u));var p=h,d=Ir(f,p),g=Ir(p,p),v=d*d-g*(Ir(f,f)-1);if(!(v<0)){var m=Math.sqrt(v),x=Fr(p,(-d-m)/g);if(Rr(x,f),x=Nr(x),!n)return x;var b,_=t[0],w=r[0],k=t[1],T=r[1];w<_&&(b=_,_=w,w=b);var M=w-_,A=y(M-Mt)<kt;if(!A&&T<k&&(b=k,k=T,T=b),A||M<kt?A?k+T>0^x[1]<(y(x[0]-_)<kt?k:T):k<=x[1]&&x[1]<=T:M>Mt^(_<=x[0]&&x[0]<=w)){var S=Fr(p,(-d+m)/g);return Rr(S,f),[x,Nr(S)]}}}function o(e,n){var a=r?t:Mt-t,i=0;return e<-a?i|=1:e>a&&(i|=2),n<-a?i|=4:n>a&&(i|=8),i}}((b=+t)*Lt),M()):b},w.clipExtent=function(t){return arguments.length?(_=t,x=t?on(t[0][0],t[0][1],t[1][0],t[1][1]):P,M()):_},w.scale=function(t){return arguments.length?(c=+t,T()):c},w.translate=function(t){return arguments.length?(u=+t[0],h=+t[1],T()):[u,h]},w.center=function(t){return arguments.length?(f=t[0]%360*Lt,p=t[1]%360*Lt,T()):[f*Ct,p*Ct]},w.rotate=function(t){return arguments.length?(d=t[0]%360*Lt,g=t[1]%360*Lt,v=t.length>2?t[2]%360*Lt:0,T()):[d*Ct,g*Ct,v*Ct]},t.rebind(w,l,"precision"),function(){return r=e.apply(this,arguments),w.invert=r.invert&&k,T()}}function On(t){return Ln(t,function(e,r){t.point(e*Lt,r*Lt)})}function zn(t,e){return[t,e]}function In(t,e){return[t>Mt?t-At:t<-Mt?t+At:t,e]}function Dn(t,e,r){return t?e||r?Wr(Fn(t),Bn(e,r)):Fn(t):e||r?Bn(e,r):In}function Rn(t){return function(e,r){return[(e+=t)>Mt?e-At:e<-Mt?e+At:e,r]}}function Fn(t){var e=Rn(t);return e.invert=Rn(-t),e}function Bn(t,e){var r=Math.cos(t),n=Math.sin(t),a=Math.cos(e),i=Math.sin(e);function o(t,e){var o=Math.cos(e),s=Math.cos(t)*o,l=Math.sin(t)*o,c=Math.sin(e),u=c*r+s*n;return[Math.atan2(l*a-u*i,s*r-c*n),It(u*a+l*i)]}return o.invert=function(t,e){var o=Math.cos(e),s=Math.cos(t)*o,l=Math.sin(t)*o,c=Math.sin(e),u=c*a-l*i;return[Math.atan2(l*a+c*i,s*r+u*n),It(u*r-s*n)]},o}function Nn(t,e){var r=Math.cos(t),n=Math.sin(t);return function(a,i,o,s){var l=o*e;null!=a?(a=jn(r,a),i=jn(r,i),(o>0?a<i:a>i)&&(a+=o*At)):(a=t+o*At,i=t-.5*l);for(var c,u=a;o>0?u>i:u<i;u-=l)s.point((c=Nr([r,-n*Math.cos(u),-n*Math.sin(u)]))[0],c[1])}}function jn(t,e){var r=zr(e);r[0]-=t,Br(r);var n=zt(-r[1]);return((-r[2]<0?-n:n)+2*Math.PI-kt)%(2*Math.PI)}function Vn(e,r,n){var a=t.range(e,r-kt,n).concat(r);return function(t){return a.map(function(e){return[t,e]})}}function Un(e,r,n){var a=t.range(e,r-kt,n).concat(r);return function(t){return a.map(function(e){return[e,t]})}}function qn(t){return t.source}function Hn(t){return t.target}t.geo.path=function(){var e,r,n,a,i,o=4.5;function s(e){return e&&("function"==typeof o&&a.pointRadius(+o.apply(this,arguments)),i&&i.valid||(i=n(a)),t.geo.stream(e,i)),a.result()}function l(){return i=null,s}return s.area=function(e){return cn=0,t.geo.stream(e,n(gn)),cn},s.centroid=function(e){return _r=wr=kr=Tr=Mr=Ar=Sr=Er=Lr=0,t.geo.stream(e,n(_n)),Lr?[Sr/Lr,Er/Lr]:Ar?[Tr/Ar,Mr/Ar]:kr?[_r/kr,wr/kr]:[NaN,NaN]},s.bounds=function(e){return pn=dn=-(hn=fn=1/0),t.geo.stream(e,n(mn)),[[hn,fn],[pn,dn]]},s.projection=function(t){return arguments.length?(n=(e=t)?t.stream||(r=t,a=Sn(function(t,e){return r([t*Ct,e*Ct])}),function(t){return On(a(t))}):P,l()):e;var r,a},s.context=function(t){return arguments.length?(a=null==(r=t)?new yn:new An(t),"function"!=typeof o&&a.pointRadius(o),l()):r},s.pointRadius=function(t){return arguments.length?(o="function"==typeof t?t:(a.pointRadius(+t),+t),s):o},s.projection(t.geo.albersUsa()).context(null)},t.geo.transform=function(t){return{stream:function(e){var r=new En(e);for(var n in t)r[n]=t[n];return r}}},En.prototype={point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},t.geo.projection=Cn,t.geo.projectionMutator=Pn,(t.geo.equirectangular=function(){return Cn(zn)}).raw=zn.invert=zn,t.geo.rotation=function(t){function e(e){return(e=t(e[0]*Lt,e[1]*Lt))[0]*=Ct,e[1]*=Ct,e}return t=Dn(t[0]%360*Lt,t[1]*Lt,t.length>2?t[2]*Lt:0),e.invert=function(e){return(e=t.invert(e[0]*Lt,e[1]*Lt))[0]*=Ct,e[1]*=Ct,e},e},In.invert=zn,t.geo.circle=function(){var t,e,r=[0,0],n=6;function a(){var t="function"==typeof r?r.apply(this,arguments):r,n=Dn(-t[0]*Lt,-t[1]*Lt,0).invert,a=[];return e(null,null,1,{point:function(t,e){a.push(t=n(t,e)),t[0]*=Ct,t[1]*=Ct}}),{type:"Polygon",coordinates:[a]}}return a.origin=function(t){return arguments.length?(r=t,a):r},a.angle=function(r){return arguments.length?(e=Nn((t=+r)*Lt,n*Lt),a):t},a.precision=function(r){return arguments.length?(e=Nn(t*Lt,(n=+r)*Lt),a):n},a.angle(90)},t.geo.distance=function(t,e){var r,n=(e[0]-t[0])*Lt,a=t[1]*Lt,i=e[1]*Lt,o=Math.sin(n),s=Math.cos(n),l=Math.sin(a),c=Math.cos(a),u=Math.sin(i),h=Math.cos(i);return Math.atan2(Math.sqrt((r=h*o)*r+(r=c*u-l*h*s)*r),l*u+c*h*s)},t.geo.graticule=function(){var e,r,n,a,i,o,s,l,c,u,h,f,p=10,d=p,g=90,v=360,m=2.5;function x(){return{type:"MultiLineString",coordinates:b()}}function b(){return t.range(Math.ceil(a/g)*g,n,g).map(h).concat(t.range(Math.ceil(l/v)*v,s,v).map(f)).concat(t.range(Math.ceil(r/p)*p,e,p).filter(function(t){return y(t%g)>kt}).map(c)).concat(t.range(Math.ceil(o/d)*d,i,d).filter(function(t){return y(t%v)>kt}).map(u))}return x.lines=function(){return b().map(function(t){return{type:"LineString",coordinates:t}})},x.outline=function(){return{type:"Polygon",coordinates:[h(a).concat(f(s).slice(1),h(n).reverse().slice(1),f(l).reverse().slice(1))]}},x.extent=function(t){return arguments.length?x.majorExtent(t).minorExtent(t):x.minorExtent()},x.majorExtent=function(t){return arguments.length?(a=+t[0][0],n=+t[1][0],l=+t[0][1],s=+t[1][1],a>n&&(t=a,a=n,n=t),l>s&&(t=l,l=s,s=t),x.precision(m)):[[a,l],[n,s]]},x.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],o=+t[0][1],i=+t[1][1],r>e&&(t=r,r=e,e=t),o>i&&(t=o,o=i,i=t),x.precision(m)):[[r,o],[e,i]]},x.step=function(t){return arguments.length?x.majorStep(t).minorStep(t):x.minorStep()},x.majorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],x):[g,v]},x.minorStep=function(t){return arguments.length?(p=+t[0],d=+t[1],x):[p,d]},x.precision=function(t){return arguments.length?(m=+t,c=Vn(o,i,90),u=Un(r,e,m),h=Vn(l,s,90),f=Un(a,n,m),x):m},x.majorExtent([[-180,-90+kt],[180,90-kt]]).minorExtent([[-180,-80-kt],[180,80+kt]])},t.geo.greatArc=function(){var e,r,n=qn,a=Hn;function i(){return{type:"LineString",coordinates:[e||n.apply(this,arguments),r||a.apply(this,arguments)]}}return i.distance=function(){return t.geo.distance(e||n.apply(this,arguments),r||a.apply(this,arguments))},i.source=function(t){return arguments.length?(n=t,e="function"==typeof t?null:t,i):n},i.target=function(t){return arguments.length?(a=t,r="function"==typeof t?null:t,i):a},i.precision=function(){return arguments.length?i:0},i},t.geo.interpolate=function(t,e){return r=t[0]*Lt,n=t[1]*Lt,a=e[0]*Lt,i=e[1]*Lt,o=Math.cos(n),s=Math.sin(n),l=Math.cos(i),c=Math.sin(i),u=o*Math.cos(r),h=o*Math.sin(r),f=l*Math.cos(a),p=l*Math.sin(a),d=2*Math.asin(Math.sqrt(Rt(i-n)+o*l*Rt(a-r))),g=1/Math.sin(d),(v=d?function(t){var e=Math.sin(t*=d)*g,r=Math.sin(d-t)*g,n=r*u+e*f,a=r*h+e*p,i=r*s+e*c;return[Math.atan2(a,n)*Ct,Math.atan2(i,Math.sqrt(n*n+a*a))*Ct]}:function(){return[r*Ct,n*Ct]}).distance=d,v;var r,n,a,i,o,s,l,c,u,h,f,p,d,g,v},t.geo.length=function(e){return bn=0,t.geo.stream(e,Gn),bn};var Gn={sphere:D,point:D,lineStart:function(){var t,e,r;function n(n,a){var i=Math.sin(a*=Lt),o=Math.cos(a),s=y((n*=Lt)-t),l=Math.cos(s);bn+=Math.atan2(Math.sqrt((s=o*Math.sin(s))*s+(s=r*i-e*o*l)*s),e*i+r*o*l),t=n,e=i,r=o}Gn.point=function(a,i){t=a*Lt,e=Math.sin(i*=Lt),r=Math.cos(i),Gn.point=n},Gn.lineEnd=function(){Gn.point=Gn.lineEnd=D}},lineEnd:D,polygonStart:D,polygonEnd:D};function Yn(t,e){function r(e,r){var n=Math.cos(e),a=Math.cos(r),i=t(n*a);return[i*a*Math.sin(e),i*Math.sin(r)]}return r.invert=function(t,r){var n=Math.sqrt(t*t+r*r),a=e(n),i=Math.sin(a),o=Math.cos(a);return[Math.atan2(t*i,n*o),Math.asin(n&&r*i/n)]},r}var Wn=Yn(function(t){return Math.sqrt(2/(1+t))},function(t){return 2*Math.asin(t/2)});(t.geo.azimuthalEqualArea=function(){return Cn(Wn)}).raw=Wn;var Xn=Yn(function(t){var e=Math.acos(t);return e&&e/Math.sin(e)},P);function Zn(t,e){var r=Math.cos(t),n=function(t){return Math.tan(Mt/4+t/2)},a=t===e?Math.sin(t):Math.log(r/Math.cos(e))/Math.log(n(e)/n(t)),i=r*Math.pow(n(t),a)/a;if(!a)return Qn;function o(t,e){i>0?e<-Et+kt&&(e=-Et+kt):e>Et-kt&&(e=Et-kt);var r=i/Math.pow(n(e),a);return[r*Math.sin(a*t),i-r*Math.cos(a*t)]}return o.invert=function(t,e){var r=i-e,n=Pt(a)*Math.sqrt(t*t+r*r);return[Math.atan2(t,r)/a,2*Math.atan(Math.pow(i/n,1/a))-Et]},o}function Jn(t,e){var r=Math.cos(t),n=t===e?Math.sin(t):(r-Math.cos(e))/(e-t),a=r/n+t;if(y(n)<kt)return zn;function i(t,e){var r=a-e;return[r*Math.sin(n*t),a-r*Math.cos(n*t)]}return i.invert=function(t,e){var r=a-e;return[Math.atan2(t,r)/n,a-Pt(n)*Math.sqrt(t*t+r*r)]},i}(t.geo.azimuthalEquidistant=function(){return Cn(Xn)}).raw=Xn,(t.geo.conicConformal=function(){return sn(Zn)}).raw=Zn,(t.geo.conicEquidistant=function(){return sn(Jn)}).raw=Jn;var Kn=Yn(function(t){return 1/t},Math.atan);function Qn(t,e){return[t,Math.log(Math.tan(Mt/4+e/2))]}function $n(t){var e,r=Cn(t),n=r.scale,a=r.translate,i=r.clipExtent;return r.scale=function(){var t=n.apply(r,arguments);return t===r?e?r.clipExtent(null):r:t},r.translate=function(){var t=a.apply(r,arguments);return t===r?e?r.clipExtent(null):r:t},r.clipExtent=function(t){var o=i.apply(r,arguments);if(o===r){if(e=null==t){var s=Mt*n(),l=a();i([[l[0]-s,l[1]-s],[l[0]+s,l[1]+s]])}}else e&&(o=null);return o},r.clipExtent(null)}(t.geo.gnomonic=function(){return Cn(Kn)}).raw=Kn,Qn.invert=function(t,e){return[t,2*Math.atan(Math.exp(e))-Et]},(t.geo.mercator=function(){return $n(Qn)}).raw=Qn;var ta=Yn(function(){return 1},Math.asin);(t.geo.orthographic=function(){return Cn(ta)}).raw=ta;var ea=Yn(function(t){return 1/(1+t)},function(t){return 2*Math.atan(t)});function ra(t,e){return[Math.log(Math.tan(Mt/4+e/2)),-t]}function na(t){return t[0]}function aa(t){return t[1]}function ia(t){for(var e=t.length,r=[0,1],n=2,a=2;a<e;a++){for(;n>1&&Ot(t[r[n-2]],t[r[n-1]],t[a])<=0;)--n;r[n++]=a}return r.slice(0,n)}function oa(t,e){return t[0]-e[0]||t[1]-e[1]}(t.geo.stereographic=function(){return Cn(ea)}).raw=ea,ra.invert=function(t,e){return[-e,2*Math.atan(Math.exp(t))-Et]},(t.geo.transverseMercator=function(){var t=$n(ra),e=t.center,r=t.rotate;return t.center=function(t){return t?e([-t[1],t[0]]):[(t=e())[1],-t[0]]},t.rotate=function(t){return t?r([t[0],t[1],t.length>2?t[2]+90:90]):[(t=r())[0],t[1],t[2]-90]},r([0,0,90])}).raw=ra,t.geom={},t.geom.hull=function(t){var e=na,r=aa;if(arguments.length)return n(t);function n(t){if(t.length<3)return[];var n,a=ve(e),i=ve(r),o=t.length,s=[],l=[];for(n=0;n<o;n++)s.push([+a.call(this,t[n],n),+i.call(this,t[n],n),n]);for(s.sort(oa),n=0;n<o;n++)l.push([s[n][0],-s[n][1]]);var c=ia(s),u=ia(l),h=u[0]===c[0],f=u[u.length-1]===c[c.length-1],p=[];for(n=c.length-1;n>=0;--n)p.push(t[s[c[n]][2]]);for(n=+h;n<u.length-f;++n)p.push(t[s[u[n]][2]]);return p}return n.x=function(t){return arguments.length?(e=t,n):e},n.y=function(t){return arguments.length?(r=t,n):r},n},t.geom.polygon=function(t){return U(t,sa),t};var sa=t.geom.polygon.prototype=[];function la(t,e,r){return(r[0]-e[0])*(t[1]-e[1])<(r[1]-e[1])*(t[0]-e[0])}function ca(t,e,r,n){var a=t[0],i=r[0],o=e[0]-a,s=n[0]-i,l=t[1],c=r[1],u=e[1]-l,h=n[1]-c,f=(s*(l-c)-h*(a-i))/(h*o-s*u);return[a+f*o,l+f*u]}function ua(t){var e=t[0],r=t[t.length-1];return!(e[0]-r[0]||e[1]-r[1])}sa.area=function(){for(var t,e=-1,r=this.length,n=this[r-1],a=0;++e<r;)t=n,n=this[e],a+=t[1]*n[0]-t[0]*n[1];return.5*a},sa.centroid=function(t){var e,r,n=-1,a=this.length,i=0,o=0,s=this[a-1];for(arguments.length||(t=-1/(6*this.area()));++n<a;)e=s,s=this[n],r=e[0]*s[1]-s[0]*e[1],i+=(e[0]+s[0])*r,o+=(e[1]+s[1])*r;return[i*t,o*t]},sa.clip=function(t){for(var e,r,n,a,i,o,s=ua(t),l=-1,c=this.length-ua(this),u=this[c-1];++l<c;){for(e=t.slice(),t.length=0,a=this[l],i=e[(n=e.length-s)-1],r=-1;++r<n;)la(o=e[r],u,a)?(la(i,u,a)||t.push(ca(i,o,u,a)),t.push(o)):la(i,u,a)&&t.push(ca(i,o,u,a)),i=o;s&&t.push(t[0]),u=a}return t};var ha,fa,pa,da,ga,va=[],ma=[];function ya(){Ra(this),this.edge=this.site=this.circle=null}function xa(t){var e=va.pop()||new ya;return e.site=t,e}function ba(t){La(t),pa.remove(t),va.push(t),Ra(t)}function _a(t){var e=t.circle,r=e.x,n=e.cy,a={x:r,y:n},i=t.P,o=t.N,s=[t];ba(t);for(var l=i;l.circle&&y(r-l.circle.x)<kt&&y(n-l.circle.cy)<kt;)i=l.P,s.unshift(l),ba(l),l=i;s.unshift(l),La(l);for(var c=o;c.circle&&y(r-c.circle.x)<kt&&y(n-c.circle.cy)<kt;)o=c.N,s.push(c),ba(c),c=o;s.push(c),La(c);var u,h=s.length;for(u=1;u<h;++u)c=s[u],l=s[u-1],za(c.edge,l.site,c.site,a);l=s[0],(c=s[h-1]).edge=Oa(l.site,c.site,null,a),Ea(l),Ea(c)}function wa(t){for(var e,r,n,a,i=t.x,o=t.y,s=pa._;s;)if((n=ka(s,o)-i)>kt)s=s.L;else{if(!((a=i-Ta(s,o))>kt)){n>-kt?(e=s.P,r=s):a>-kt?(e=s,r=s.N):e=r=s;break}if(!s.R){e=s;break}s=s.R}var l=xa(t);if(pa.insert(e,l),e||r){if(e===r)return La(e),r=xa(e.site),pa.insert(l,r),l.edge=r.edge=Oa(e.site,l.site),Ea(e),void Ea(r);if(r){La(e),La(r);var c=e.site,u=c.x,h=c.y,f=t.x-u,p=t.y-h,d=r.site,g=d.x-u,v=d.y-h,m=2*(f*v-p*g),y=f*f+p*p,x=g*g+v*v,b={x:(v*y-p*x)/m+u,y:(f*x-g*y)/m+h};za(r.edge,c,d,b),l.edge=Oa(c,t,null,b),r.edge=Oa(t,d,null,b),Ea(e),Ea(r)}else l.edge=Oa(e.site,l.site)}}function ka(t,e){var r=t.site,n=r.x,a=r.y,i=a-e;if(!i)return n;var o=t.P;if(!o)return-1/0;var s=(r=o.site).x,l=r.y,c=l-e;if(!c)return s;var u=s-n,h=1/i-1/c,f=u/c;return h?(-f+Math.sqrt(f*f-2*h*(u*u/(-2*c)-l+c/2+a-i/2)))/h+n:(n+s)/2}function Ta(t,e){var r=t.N;if(r)return ka(r,e);var n=t.site;return n.y===e?n.x:1/0}function Ma(t){this.site=t,this.edges=[]}function Aa(t,e){return e.angle-t.angle}function Sa(){Ra(this),this.x=this.y=this.arc=this.site=this.cy=null}function Ea(t){var e=t.P,r=t.N;if(e&&r){var n=e.site,a=t.site,i=r.site;if(n!==i){var o=a.x,s=a.y,l=n.x-o,c=n.y-s,u=i.x-o,h=2*(l*(v=i.y-s)-c*u);if(!(h>=-Tt)){var f=l*l+c*c,p=u*u+v*v,d=(v*f-c*p)/h,g=(l*p-u*f)/h,v=g+s,m=ma.pop()||new Sa;m.arc=t,m.site=a,m.x=d+o,m.y=v+Math.sqrt(d*d+g*g),m.cy=v,t.circle=m;for(var y=null,x=ga._;x;)if(m.y<x.y||m.y===x.y&&m.x<=x.x){if(!x.L){y=x.P;break}x=x.L}else{if(!x.R){y=x;break}x=x.R}ga.insert(y,m),y||(da=m)}}}}function La(t){var e=t.circle;e&&(e.P||(da=e.N),ga.remove(e),ma.push(e),Ra(e),t.circle=null)}function Ca(t,e){var r=t.b;if(r)return!0;var n,a,i=t.a,o=e[0][0],s=e[1][0],l=e[0][1],c=e[1][1],u=t.l,h=t.r,f=u.x,p=u.y,d=h.x,g=h.y,v=(f+d)/2,m=(p+g)/2;if(g===p){if(v<o||v>=s)return;if(f>d){if(i){if(i.y>=c)return}else i={x:v,y:l};r={x:v,y:c}}else{if(i){if(i.y<l)return}else i={x:v,y:c};r={x:v,y:l}}}else if(a=m-(n=(f-d)/(g-p))*v,n<-1||n>1)if(f>d){if(i){if(i.y>=c)return}else i={x:(l-a)/n,y:l};r={x:(c-a)/n,y:c}}else{if(i){if(i.y<l)return}else i={x:(c-a)/n,y:c};r={x:(l-a)/n,y:l}}else if(p<g){if(i){if(i.x>=s)return}else i={x:o,y:n*o+a};r={x:s,y:n*s+a}}else{if(i){if(i.x<o)return}else i={x:s,y:n*s+a};r={x:o,y:n*o+a}}return t.a=i,t.b=r,!0}function Pa(t,e){this.l=t,this.r=e,this.a=this.b=null}function Oa(t,e,r,n){var a=new Pa(t,e);return ha.push(a),r&&za(a,t,e,r),n&&za(a,e,t,n),fa[t.i].edges.push(new Ia(a,t,e)),fa[e.i].edges.push(new Ia(a,e,t)),a}function za(t,e,r,n){t.a||t.b?t.l===r?t.b=n:t.a=n:(t.a=n,t.l=e,t.r=r)}function Ia(t,e,r){var n=t.a,a=t.b;this.edge=t,this.site=e,this.angle=r?Math.atan2(r.y-e.y,r.x-e.x):t.l===e?Math.atan2(a.x-n.x,n.y-a.y):Math.atan2(n.x-a.x,a.y-n.y)}function Da(){this._=null}function Ra(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function Fa(t,e){var r=e,n=e.R,a=r.U;a?a.L===r?a.L=n:a.R=n:t._=n,n.U=a,r.U=n,r.R=n.L,r.R&&(r.R.U=r),n.L=r}function Ba(t,e){var r=e,n=e.L,a=r.U;a?a.L===r?a.L=n:a.R=n:t._=n,n.U=a,r.U=n,r.L=n.R,r.L&&(r.L.U=r),n.R=r}function Na(t){for(;t.L;)t=t.L;return t}function ja(t,e){var r,n,a,i=t.sort(Va).pop();for(ha=[],fa=new Array(t.length),pa=new Da,ga=new Da;;)if(a=da,i&&(!a||i.y<a.y||i.y===a.y&&i.x<a.x))i.x===r&&i.y===n||(fa[i.i]=new Ma(i),wa(i),r=i.x,n=i.y),i=t.pop();else{if(!a)break;_a(a.arc)}e&&(function(t){for(var e,r=ha,n=nn(t[0][0],t[0][1],t[1][0],t[1][1]),a=r.length;a--;)(!Ca(e=r[a],t)||!n(e)||y(e.a.x-e.b.x)<kt&&y(e.a.y-e.b.y)<kt)&&(e.a=e.b=null,r.splice(a,1))}(e),function(t){for(var e,r,n,a,i,o,s,l,c,u,h=t[0][0],f=t[1][0],p=t[0][1],d=t[1][1],g=fa,v=g.length;v--;)if((i=g[v])&&i.prepare())for(l=(s=i.edges).length,o=0;o<l;)n=(u=s[o].end()).x,a=u.y,e=(c=s[++o%l].start()).x,r=c.y,(y(n-e)>kt||y(a-r)>kt)&&(s.splice(o,0,new Ia((m=i.site,x=u,b=y(n-h)<kt&&d-a>kt?{x:h,y:y(e-h)<kt?r:d}:y(a-d)<kt&&f-n>kt?{x:y(r-d)<kt?e:f,y:d}:y(n-f)<kt&&a-p>kt?{x:f,y:y(e-f)<kt?r:p}:y(a-p)<kt&&n-h>kt?{x:y(r-p)<kt?e:h,y:p}:null,_=void 0,_=new Pa(m,null),_.a=x,_.b=b,ha.push(_),_),i.site,null)),++l);var m,x,b,_}(e));var o={cells:fa,edges:ha};return pa=ga=ha=fa=null,o}function Va(t,e){return e.y-t.y||e.x-t.x}Ma.prototype.prepare=function(){for(var t,e=this.edges,r=e.length;r--;)(t=e[r].edge).b&&t.a||e.splice(r,1);return e.sort(Aa),e.length},Ia.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},Da.prototype={insert:function(t,e){var r,n,a;if(t){if(e.P=t,e.N=t.N,t.N&&(t.N.P=e),t.N=e,t.R){for(t=t.R;t.L;)t=t.L;t.L=e}else t.R=e;r=t}else this._?(t=Na(this._),e.P=null,e.N=t,t.P=t.L=e,r=t):(e.P=e.N=null,this._=e,r=null);for(e.L=e.R=null,e.U=r,e.C=!0,t=e;r&&r.C;)r===(n=r.U).L?(a=n.R)&&a.C?(r.C=a.C=!1,n.C=!0,t=n):(t===r.R&&(Fa(this,r),r=(t=r).U),r.C=!1,n.C=!0,Ba(this,n)):(a=n.L)&&a.C?(r.C=a.C=!1,n.C=!0,t=n):(t===r.L&&(Ba(this,r),r=(t=r).U),r.C=!1,n.C=!0,Fa(this,n)),r=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var e,r,n,a=t.U,i=t.L,o=t.R;if(r=i?o?Na(o):i:o,a?a.L===t?a.L=r:a.R=r:this._=r,i&&o?(n=r.C,r.C=t.C,r.L=i,i.U=r,r!==o?(a=r.U,r.U=t.U,t=r.R,a.L=t,r.R=o,o.U=r):(r.U=a,a=r,t=r.R)):(n=t.C,t=r),t&&(t.U=a),!n)if(t&&t.C)t.C=!1;else{do{if(t===this._)break;if(t===a.L){if((e=a.R).C&&(e.C=!1,a.C=!0,Fa(this,a),e=a.R),e.L&&e.L.C||e.R&&e.R.C){e.R&&e.R.C||(e.L.C=!1,e.C=!0,Ba(this,e),e=a.R),e.C=a.C,a.C=e.R.C=!1,Fa(this,a),t=this._;break}}else if((e=a.L).C&&(e.C=!1,a.C=!0,Ba(this,a),e=a.L),e.L&&e.L.C||e.R&&e.R.C){e.L&&e.L.C||(e.R.C=!1,e.C=!0,Fa(this,e),e=a.L),e.C=a.C,a.C=e.L.C=!1,Ba(this,a),t=this._;break}e.C=!0,t=a,a=a.U}while(!t.C);t&&(t.C=!1)}}},t.geom.voronoi=function(t){var e=na,r=aa,n=e,a=r,i=Ua;if(t)return o(t);function o(t){var e=new Array(t.length),r=i[0][0],n=i[0][1],a=i[1][0],o=i[1][1];return ja(s(t),i).cells.forEach(function(i,s){var l=i.edges,c=i.site;(e[s]=l.length?l.map(function(t){var e=t.start();return[e.x,e.y]}):c.x>=r&&c.x<=a&&c.y>=n&&c.y<=o?[[r,o],[a,o],[a,n],[r,n]]:[]).point=t[s]}),e}function s(t){return t.map(function(t,e){return{x:Math.round(n(t,e)/kt)*kt,y:Math.round(a(t,e)/kt)*kt,i:e}})}return o.links=function(t){return ja(s(t)).edges.filter(function(t){return t.l&&t.r}).map(function(e){return{source:t[e.l.i],target:t[e.r.i]}})},o.triangles=function(t){var e=[];return ja(s(t)).cells.forEach(function(r,n){for(var a,i,o,s,l=r.site,c=r.edges.sort(Aa),u=-1,h=c.length,f=c[h-1].edge,p=f.l===l?f.r:f.l;++u<h;)f,a=p,p=(f=c[u].edge).l===l?f.r:f.l,n<a.i&&n<p.i&&(o=a,s=p,((i=l).x-s.x)*(o.y-i.y)-(i.x-o.x)*(s.y-i.y)<0)&&e.push([t[n],t[a.i],t[p.i]])}),e},o.x=function(t){return arguments.length?(n=ve(e=t),o):e},o.y=function(t){return arguments.length?(a=ve(r=t),o):r},o.clipExtent=function(t){return arguments.length?(i=null==t?Ua:t,o):i===Ua?null:i},o.size=function(t){return arguments.length?o.clipExtent(t&&[[0,0],t]):i===Ua?null:i&&i[1]},o};var Ua=[[-1e6,-1e6],[1e6,1e6]];function qa(t){return t.x}function Ha(t){return t.y}function Ga(e,r){e=t.rgb(e),r=t.rgb(r);var n=e.r,a=e.g,i=e.b,o=r.r-n,s=r.g-a,l=r.b-i;return function(t){return"#"+ce(Math.round(n+o*t))+ce(Math.round(a+s*t))+ce(Math.round(i+l*t))}}function Ya(t,e){var r,n={},a={};for(r in t)r in e?n[r]=Ka(t[r],e[r]):a[r]=t[r];for(r in e)r in t||(a[r]=e[r]);return function(t){for(r in n)a[r]=n[r](t);return a}}function Wa(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}function Xa(t,e){var r,n,a,i=Za.lastIndex=Ja.lastIndex=0,o=-1,s=[],l=[];for(t+="",e+="";(r=Za.exec(t))&&(n=Ja.exec(e));)(a=n.index)>i&&(a=e.slice(i,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:Wa(r,n)})),i=Ja.lastIndex;return i<e.length&&(a=e.slice(i),s[o]?s[o]+=a:s[++o]=a),s.length<2?l[0]?(e=l[0].x,function(t){return e(t)+""}):function(){return e}:(e=l.length,function(t){for(var r,n=0;n<e;++n)s[(r=l[n]).i]=r.x(t);return s.join("")})}t.geom.delaunay=function(e){return t.geom.voronoi().triangles(e)},t.geom.quadtree=function(t,e,r,n,a){var i,o=na,s=aa;if(i=arguments.length)return o=qa,s=Ha,3===i&&(a=r,n=e,r=e=0),l(t);function l(t){var l,c,u,h,f,p,d,g,v,m=ve(o),x=ve(s);if(null!=e)p=e,d=r,g=n,v=a;else if(g=v=-(p=d=1/0),c=[],u=[],f=t.length,i)for(h=0;h<f;++h)(l=t[h]).x<p&&(p=l.x),l.y<d&&(d=l.y),l.x>g&&(g=l.x),l.y>v&&(v=l.y),c.push(l.x),u.push(l.y);else for(h=0;h<f;++h){var b=+m(l=t[h],h),_=+x(l,h);b<p&&(p=b),_<d&&(d=_),b>g&&(g=b),_>v&&(v=_),c.push(b),u.push(_)}var w=g-p,k=v-d;function T(t,e,r,n,a,i,o,s){if(!isNaN(r)&&!isNaN(n))if(t.leaf){var l=t.x,c=t.y;if(null!=l)if(y(l-r)+y(c-n)<.01)M(t,e,r,n,a,i,o,s);else{var u=t.point;t.x=t.y=t.point=null,M(t,u,l,c,a,i,o,s),M(t,e,r,n,a,i,o,s)}else t.x=r,t.y=n,t.point=e}else M(t,e,r,n,a,i,o,s)}function M(t,e,r,n,a,i,o,s){var l=.5*(a+o),c=.5*(i+s),u=r>=l,h=n>=c,f=h<<1|u;t.leaf=!1,u?a=l:o=l,h?i=c:s=c,T(t=t.nodes[f]||(t.nodes[f]={leaf:!0,nodes:[],point:null,x:null,y:null}),e,r,n,a,i,o,s)}w>k?v=d+w:g=p+k;var A={leaf:!0,nodes:[],point:null,x:null,y:null,add:function(t){T(A,t,+m(t,++h),+x(t,h),p,d,g,v)}};if(A.visit=function(t){!function t(e,r,n,a,i,o){if(!e(r,n,a,i,o)){var s=.5*(n+i),l=.5*(a+o),c=r.nodes;c[0]&&t(e,c[0],n,a,s,l),c[1]&&t(e,c[1],s,a,i,l),c[2]&&t(e,c[2],n,l,s,o),c[3]&&t(e,c[3],s,l,i,o)}}(t,A,p,d,g,v)},A.find=function(t){return function(t,e,r,n,a,i,o){var s,l=1/0;return function t(c,u,h,f,p){if(!(u>i||h>o||f<n||p<a)){if(d=c.point){var d,g=e-c.x,v=r-c.y,m=g*g+v*v;if(m<l){var y=Math.sqrt(l=m);n=e-y,a=r-y,i=e+y,o=r+y,s=d}}for(var x=c.nodes,b=.5*(u+f),_=.5*(h+p),w=(r>=_)<<1|e>=b,k=w+4;w<k;++w)if(c=x[3&w])switch(3&w){case 0:t(c,u,h,b,_);break;case 1:t(c,b,h,f,_);break;case 2:t(c,u,_,b,p);break;case 3:t(c,b,_,f,p)}}}(t,n,a,i,o),s}(A,t[0],t[1],p,d,g,v)},h=-1,null==e){for(;++h<f;)T(A,t[h],c[h],u[h],p,d,g,v);--h}else t.forEach(A.add);return c=u=t=l=null,A}return l.x=function(t){return arguments.length?(o=t,l):o},l.y=function(t){return arguments.length?(s=t,l):s},l.extent=function(t){return arguments.length?(null==t?e=r=n=a=null:(e=+t[0][0],r=+t[0][1],n=+t[1][0],a=+t[1][1]),l):null==e?null:[[e,r],[n,a]]},l.size=function(t){return arguments.length?(null==t?e=r=n=a=null:(e=r=0,n=+t[0],a=+t[1]),l):null==e?null:[n-e,a-r]},l},t.interpolateRgb=Ga,t.interpolateObject=Ya,t.interpolateNumber=Wa,t.interpolateString=Xa;var Za=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Ja=new RegExp(Za.source,"g");function Ka(e,r){for(var n,a=t.interpolators.length;--a>=0&&!(n=t.interpolators[a](e,r)););return n}function Qa(t,e){var r,n=[],a=[],i=t.length,o=e.length,s=Math.min(t.length,e.length);for(r=0;r<s;++r)n.push(Ka(t[r],e[r]));for(;r<i;++r)a[r]=t[r];for(;r<o;++r)a[r]=e[r];return function(t){for(r=0;r<s;++r)a[r]=n[r](t);return a}}t.interpolate=Ka,t.interpolators=[function(t,e){var r=typeof e;return("string"===r?ge.has(e.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(e)?Ga:Xa:e instanceof Vt?Ga:Array.isArray(e)?Qa:"object"===r&&isNaN(e)?Ya:Wa)(t,e)}],t.interpolateArray=Qa;var $a=function(){return P},ti=t.map({linear:$a,poly:function(t){return function(e){return Math.pow(e,t)}},quad:function(){return ai},cubic:function(){return ii},sin:function(){return si},exp:function(){return li},circle:function(){return ci},elastic:function(t,e){var r;arguments.length<2&&(e=.45);arguments.length?r=e/At*Math.asin(1/t):(t=1,r=e/4);return function(n){return 1+t*Math.pow(2,-10*n)*Math.sin((n-r)*At/e)}},back:function(t){t||(t=1.70158);return function(e){return e*e*((t+1)*e-t)}},bounce:function(){return ui}}),ei=t.map({in:P,out:ri,"in-out":ni,"out-in":function(t){return ni(ri(t))}});function ri(t){return function(e){return 1-t(1-e)}}function ni(t){return function(e){return.5*(e<.5?t(2*e):2-t(2-2*e))}}function ai(t){return t*t}function ii(t){return t*t*t}function oi(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75)}function si(t){return 1-Math.cos(t*Et)}function li(t){return Math.pow(2,10*(t-1))}function ci(t){return 1-Math.sqrt(1-t*t)}function ui(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function hi(t,e){return e-=t,function(r){return Math.round(t+e*r)}}function fi(t){var e,r,n,a=[t.a,t.b],i=[t.c,t.d],o=di(a),s=pi(a,i),l=di(((e=i)[0]+=(n=-s)*(r=a)[0],e[1]+=n*r[1],e))||0;a[0]*i[1]<i[0]*a[1]&&(a[0]*=-1,a[1]*=-1,o*=-1,s*=-1),this.rotate=(o?Math.atan2(a[1],a[0]):Math.atan2(-i[0],i[1]))*Ct,this.translate=[t.e,t.f],this.scale=[o,l],this.skew=l?Math.atan2(s,l)*Ct:0}function pi(t,e){return t[0]*e[0]+t[1]*e[1]}function di(t){var e=Math.sqrt(pi(t,t));return e&&(t[0]/=e,t[1]/=e),e}t.ease=function(t){var e,n=t.indexOf("-"),a=n>=0?t.slice(0,n):t,i=n>=0?t.slice(n+1):"in";return a=ti.get(a)||$a,i=ei.get(i)||P,e=i(a.apply(null,r.call(arguments,1))),function(t){return t<=0?0:t>=1?1:e(t)}},t.interpolateHcl=function(e,r){e=t.hcl(e),r=t.hcl(r);var n=e.h,a=e.c,i=e.l,o=r.h-n,s=r.c-a,l=r.l-i;isNaN(s)&&(s=0,a=isNaN(a)?r.c:a);isNaN(o)?(o=0,n=isNaN(n)?r.h:n):o>180?o-=360:o<-180&&(o+=360);return function(t){return Wt(n+o*t,a+s*t,i+l*t)+""}},t.interpolateHsl=function(e,r){e=t.hsl(e),r=t.hsl(r);var n=e.h,a=e.s,i=e.l,o=r.h-n,s=r.s-a,l=r.l-i;isNaN(s)&&(s=0,a=isNaN(a)?r.s:a);isNaN(o)?(o=0,n=isNaN(n)?r.h:n):o>180?o-=360:o<-180&&(o+=360);return function(t){return Ht(n+o*t,a+s*t,i+l*t)+""}},t.interpolateLab=function(e,r){e=t.lab(e),r=t.lab(r);var n=e.l,a=e.a,i=e.b,o=r.l-n,s=r.a-a,l=r.b-i;return function(t){return te(n+o*t,a+s*t,i+l*t)+""}},t.interpolateRound=hi,t.transform=function(e){var r=a.createElementNS(t.ns.prefix.svg,"g");return(t.transform=function(t){if(null!=t){r.setAttribute("transform",t);var e=r.transform.baseVal.consolidate()}return new fi(e?e.matrix:gi)})(e)},fi.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var gi={a:1,b:0,c:0,d:1,e:0,f:0};function vi(t){return t.length?t.pop()+",":""}function mi(e,r){var n=[],a=[];return e=t.transform(e),r=t.transform(r),function(t,e,r,n){if(t[0]!==e[0]||t[1]!==e[1]){var a=r.push("translate(",null,",",null,")");n.push({i:a-4,x:Wa(t[0],e[0])},{i:a-2,x:Wa(t[1],e[1])})}else(e[0]||e[1])&&r.push("translate("+e+")")}(e.translate,r.translate,n,a),function(t,e,r,n){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),n.push({i:r.push(vi(r)+"rotate(",null,")")-2,x:Wa(t,e)})):e&&r.push(vi(r)+"rotate("+e+")")}(e.rotate,r.rotate,n,a),function(t,e,r,n){t!==e?n.push({i:r.push(vi(r)+"skewX(",null,")")-2,x:Wa(t,e)}):e&&r.push(vi(r)+"skewX("+e+")")}(e.skew,r.skew,n,a),function(t,e,r,n){if(t[0]!==e[0]||t[1]!==e[1]){var a=r.push(vi(r)+"scale(",null,",",null,")");n.push({i:a-4,x:Wa(t[0],e[0])},{i:a-2,x:Wa(t[1],e[1])})}else 1===e[0]&&1===e[1]||r.push(vi(r)+"scale("+e+")")}(e.scale,r.scale,n,a),e=r=null,function(t){for(var e,r=-1,i=a.length;++r<i;)n[(e=a[r]).i]=e.x(t);return n.join("")}}function yi(t,e){return e=(e-=t=+t)||1/e,function(r){return(r-t)/e}}function xi(t,e){return e=(e-=t=+t)||1/e,function(r){return Math.max(0,Math.min(1,(r-t)/e))}}function bi(t){for(var e=t.source,r=t.target,n=function(t,e){if(t===e)return t;var r=_i(t),n=_i(e),a=r.pop(),i=n.pop(),o=null;for(;a===i;)o=a,a=r.pop(),i=n.pop();return o}(e,r),a=[e];e!==n;)e=e.parent,a.push(e);for(var i=a.length;r!==n;)a.splice(i,0,r),r=r.parent;return a}function _i(t){for(var e=[],r=t.parent;null!=r;)e.push(t),t=r,r=r.parent;return e.push(t),e}function wi(t){t.fixed|=2}function ki(t){t.fixed&=-7}function Ti(t){t.fixed|=4,t.px=t.x,t.py=t.y}function Mi(t){t.fixed&=-5}t.interpolateTransform=mi,t.layout={},t.layout.bundle=function(){return function(t){for(var e=[],r=-1,n=t.length;++r<n;)e.push(bi(t[r]));return e}},t.layout.chord=function(){var e,r,n,a,i,o,s,l={},c=0;function u(){var l,u,f,p,d,g={},v=[],m=t.range(a),y=[];for(e=[],r=[],l=0,p=-1;++p<a;){for(u=0,d=-1;++d<a;)u+=n[p][d];v.push(u),y.push(t.range(a)),l+=u}for(i&&m.sort(function(t,e){return i(v[t],v[e])}),o&&y.forEach(function(t,e){t.sort(function(t,r){return o(n[e][t],n[e][r])})}),l=(At-c*a)/l,u=0,p=-1;++p<a;){for(f=u,d=-1;++d<a;){var x=m[p],b=y[x][d],_=n[x][b],w=u,k=u+=_*l;g[x+"-"+b]={index:x,subindex:b,startAngle:w,endAngle:k,value:_}}r[x]={index:x,startAngle:f,endAngle:u,value:v[x]},u+=c}for(p=-1;++p<a;)for(d=p-1;++d<a;){var T=g[p+"-"+d],M=g[d+"-"+p];(T.value||M.value)&&e.push(T.value<M.value?{source:M,target:T}:{source:T,target:M})}s&&h()}function h(){e.sort(function(t,e){return s((t.source.value+t.target.value)/2,(e.source.value+e.target.value)/2)})}return l.matrix=function(t){return arguments.length?(a=(n=t)&&n.length,e=r=null,l):n},l.padding=function(t){return arguments.length?(c=t,e=r=null,l):c},l.sortGroups=function(t){return arguments.length?(i=t,e=r=null,l):i},l.sortSubgroups=function(t){return arguments.length?(o=t,e=null,l):o},l.sortChords=function(t){return arguments.length?(s=t,e&&h(),l):s},l.chords=function(){return e||u(),e},l.groups=function(){return r||u(),r},l},t.layout.force=function(){var e,r,n,a,i,o,s={},l=t.dispatch("start","tick","end"),c=[1,1],u=.9,h=Ai,f=Si,p=-30,d=Ei,g=.1,v=.64,m=[],y=[];function x(t){return function(e,r,n,a){if(e.point!==t){var i=e.cx-t.x,o=e.cy-t.y,s=a-r,l=i*i+o*o;if(s*s/v<l){if(l<d){var c=e.charge/l;t.px-=i*c,t.py-=o*c}return!0}if(e.point&&l&&l<d){c=e.pointCharge/l;t.px-=i*c,t.py-=o*c}}return!e.charge}}function b(e){e.px=t.event.x,e.py=t.event.y,s.resume()}return s.tick=function(){if((n*=.99)<.005)return e=null,l.end({type:"end",alpha:n=0}),!0;var r,s,h,f,d,v,b,_,w,k=m.length,T=y.length;for(s=0;s<T;++s)f=(h=y[s]).source,(v=(_=(d=h.target).x-f.x)*_+(w=d.y-f.y)*w)&&(_*=v=n*i[s]*((v=Math.sqrt(v))-a[s])/v,w*=v,d.x-=_*(b=f.weight+d.weight?f.weight/(f.weight+d.weight):.5),d.y-=w*b,f.x+=_*(b=1-b),f.y+=w*b);if((b=n*g)&&(_=c[0]/2,w=c[1]/2,s=-1,b))for(;++s<k;)(h=m[s]).x+=(_-h.x)*b,h.y+=(w-h.y)*b;if(p)for(!function t(e,r,n){var a=0,i=0;e.charge=0;if(!e.leaf)for(var o,s=e.nodes,l=s.length,c=-1;++c<l;)null!=(o=s[c])&&(t(o,r,n),e.charge+=o.charge,a+=o.charge*o.cx,i+=o.charge*o.cy);if(e.point){e.leaf||(e.point.x+=Math.random()-.5,e.point.y+=Math.random()-.5);var u=r*n[e.point.index];e.charge+=e.pointCharge=u,a+=u*e.point.x,i+=u*e.point.y}e.cx=a/e.charge;e.cy=i/e.charge}(r=t.geom.quadtree(m),n,o),s=-1;++s<k;)(h=m[s]).fixed||r.visit(x(h));for(s=-1;++s<k;)(h=m[s]).fixed?(h.x=h.px,h.y=h.py):(h.x-=(h.px-(h.px=h.x))*u,h.y-=(h.py-(h.py=h.y))*u);l.tick({type:"tick",alpha:n})},s.nodes=function(t){return arguments.length?(m=t,s):m},s.links=function(t){return arguments.length?(y=t,s):y},s.size=function(t){return arguments.length?(c=t,s):c},s.linkDistance=function(t){return arguments.length?(h="function"==typeof t?t:+t,s):h},s.distance=s.linkDistance,s.linkStrength=function(t){return arguments.length?(f="function"==typeof t?t:+t,s):f},s.friction=function(t){return arguments.length?(u=+t,s):u},s.charge=function(t){return arguments.length?(p="function"==typeof t?t:+t,s):p},s.chargeDistance=function(t){return arguments.length?(d=t*t,s):Math.sqrt(d)},s.gravity=function(t){return arguments.length?(g=+t,s):g},s.theta=function(t){return arguments.length?(v=t*t,s):Math.sqrt(v)},s.alpha=function(t){return arguments.length?(t=+t,n?t>0?n=t:(e.c=null,e.t=NaN,e=null,l.end({type:"end",alpha:n=0})):t>0&&(l.start({type:"start",alpha:n=t}),e=Te(s.tick)),s):n},s.start=function(){var t,e,r,n=m.length,l=y.length,u=c[0],d=c[1];for(t=0;t<n;++t)(r=m[t]).index=t,r.weight=0;for(t=0;t<l;++t)"number"==typeof(r=y[t]).source&&(r.source=m[r.source]),"number"==typeof r.target&&(r.target=m[r.target]),++r.source.weight,++r.target.weight;for(t=0;t<n;++t)r=m[t],isNaN(r.x)&&(r.x=g("x",u)),isNaN(r.y)&&(r.y=g("y",d)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(a=[],"function"==typeof h)for(t=0;t<l;++t)a[t]=+h.call(this,y[t],t);else for(t=0;t<l;++t)a[t]=h;if(i=[],"function"==typeof f)for(t=0;t<l;++t)i[t]=+f.call(this,y[t],t);else for(t=0;t<l;++t)i[t]=f;if(o=[],"function"==typeof p)for(t=0;t<n;++t)o[t]=+p.call(this,m[t],t);else for(t=0;t<n;++t)o[t]=p;function g(r,a){if(!e){for(e=new Array(n),c=0;c<n;++c)e[c]=[];for(c=0;c<l;++c){var i=y[c];e[i.source.index].push(i.target),e[i.target.index].push(i.source)}}for(var o,s=e[t],c=-1,u=s.length;++c<u;)if(!isNaN(o=s[c][r]))return o;return Math.random()*a}return s.resume()},s.resume=function(){return s.alpha(.1)},s.stop=function(){return s.alpha(0)},s.drag=function(){if(r||(r=t.behavior.drag().origin(P).on("dragstart.force",wi).on("drag.force",b).on("dragend.force",ki)),!arguments.length)return r;this.on("mouseover.force",Ti).on("mouseout.force",Mi).call(r)},t.rebind(s,l,"on")};var Ai=20,Si=1,Ei=1/0;function Li(e,r){return t.rebind(e,r,"sort","children","value"),e.nodes=e,e.links=Di,e}function Ci(t,e){for(var r=[t];null!=(t=r.pop());)if(e(t),(a=t.children)&&(n=a.length))for(var n,a;--n>=0;)r.push(a[n])}function Pi(t,e){for(var r=[t],n=[];null!=(t=r.pop());)if(n.push(t),(i=t.children)&&(a=i.length))for(var a,i,o=-1;++o<a;)r.push(i[o]);for(;null!=(t=n.pop());)e(t)}function Oi(t){return t.children}function zi(t){return t.value}function Ii(t,e){return e.value-t.value}function Di(e){return t.merge(e.map(function(t){return(t.children||[]).map(function(e){return{source:t,target:e}})}))}t.layout.hierarchy=function(){var t=Ii,e=Oi,r=zi;function n(a){var i,o=[a],s=[];for(a.depth=0;null!=(i=o.pop());)if(s.push(i),(c=e.call(n,i,i.depth))&&(l=c.length)){for(var l,c,u;--l>=0;)o.push(u=c[l]),u.parent=i,u.depth=i.depth+1;r&&(i.value=0),i.children=c}else r&&(i.value=+r.call(n,i,i.depth)||0),delete i.children;return Pi(a,function(e){var n,a;t&&(n=e.children)&&n.sort(t),r&&(a=e.parent)&&(a.value+=e.value)}),s}return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(Ci(t,function(t){t.children&&(t.value=0)}),Pi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},t.layout.partition=function(){var e=t.layout.hierarchy(),r=[1,1];function n(t,n){var a=e.call(this,t,n);return function t(e,r,n,a){var i=e.children;if(e.x=r,e.y=e.depth*a,e.dx=n,e.dy=a,i&&(o=i.length)){var o,s,l,c=-1;for(n=e.value?n/e.value:0;++c<o;)t(s=i[c],r,l=s.value*n,a),r+=l}}(a[0],0,r[0],r[1]/function t(e){var r=e.children,n=0;if(r&&(a=r.length))for(var a,i=-1;++i<a;)n=Math.max(n,t(r[i]));return 1+n}(a[0])),a}return n.size=function(t){return arguments.length?(r=t,n):r},Li(n,e)},t.layout.pie=function(){var e=Number,r=Ri,n=0,a=At,i=0;function o(s){var l,c=s.length,u=s.map(function(t,r){return+e.call(o,t,r)}),h=+("function"==typeof n?n.apply(this,arguments):n),f=("function"==typeof a?a.apply(this,arguments):a)-h,p=Math.min(Math.abs(f)/c,+("function"==typeof i?i.apply(this,arguments):i)),d=p*(f<0?-1:1),g=t.sum(u),v=g?(f-c*d)/g:0,m=t.range(c),y=[];return null!=r&&m.sort(r===Ri?function(t,e){return u[e]-u[t]}:function(t,e){return r(s[t],s[e])}),m.forEach(function(t){y[t]={data:s[t],value:l=u[t],startAngle:h,endAngle:h+=l*v+d,padAngle:p}}),y}return o.value=function(t){return arguments.length?(e=t,o):e},o.sort=function(t){return arguments.length?(r=t,o):r},o.startAngle=function(t){return arguments.length?(n=t,o):n},o.endAngle=function(t){return arguments.length?(a=t,o):a},o.padAngle=function(t){return arguments.length?(i=t,o):i},o};var Ri={};function Fi(t){return t.x}function Bi(t){return t.y}function Ni(t,e,r){t.y0=e,t.y=r}t.layout.stack=function(){var e=P,r=Ui,n=qi,a=Ni,i=Fi,o=Bi;function s(l,c){if(!(p=l.length))return l;var u=l.map(function(t,r){return e.call(s,t,r)}),h=u.map(function(t){return t.map(function(t,e){return[i.call(s,t,e),o.call(s,t,e)]})}),f=r.call(s,h,c);u=t.permute(u,f),h=t.permute(h,f);var p,d,g,v,m=n.call(s,h,c),y=u[0].length;for(g=0;g<y;++g)for(a.call(s,u[0][g],v=m[g],h[0][g][1]),d=1;d<p;++d)a.call(s,u[d][g],v+=h[d-1][g][1],h[d][g][1]);return l}return s.values=function(t){return arguments.length?(e=t,s):e},s.order=function(t){return arguments.length?(r="function"==typeof t?t:ji.get(t)||Ui,s):r},s.offset=function(t){return arguments.length?(n="function"==typeof t?t:Vi.get(t)||qi,s):n},s.x=function(t){return arguments.length?(i=t,s):i},s.y=function(t){return arguments.length?(o=t,s):o},s.out=function(t){return arguments.length?(a=t,s):a},s};var ji=t.map({"inside-out":function(e){var r,n,a=e.length,i=e.map(Hi),o=e.map(Gi),s=t.range(a).sort(function(t,e){return i[t]-i[e]}),l=0,c=0,u=[],h=[];for(r=0;r<a;++r)n=s[r],l<c?(l+=o[n],u.push(n)):(c+=o[n],h.push(n));return h.reverse().concat(u)},reverse:function(e){return t.range(e.length).reverse()},default:Ui}),Vi=t.map({silhouette:function(t){var e,r,n,a=t.length,i=t[0].length,o=[],s=0,l=[];for(r=0;r<i;++r){for(e=0,n=0;e<a;e++)n+=t[e][r][1];n>s&&(s=n),o.push(n)}for(r=0;r<i;++r)l[r]=(s-o[r])/2;return l},wiggle:function(t){var e,r,n,a,i,o,s,l,c,u=t.length,h=t[0],f=h.length,p=[];for(p[0]=l=c=0,r=1;r<f;++r){for(e=0,a=0;e<u;++e)a+=t[e][r][1];for(e=0,i=0,s=h[r][0]-h[r-1][0];e<u;++e){for(n=0,o=(t[e][r][1]-t[e][r-1][1])/(2*s);n<e;++n)o+=(t[n][r][1]-t[n][r-1][1])/s;i+=o*t[e][r][1]}p[r]=l-=a?i/a*s:0,l<c&&(c=l)}for(r=0;r<f;++r)p[r]-=c;return p},expand:function(t){var e,r,n,a=t.length,i=t[0].length,o=1/a,s=[];for(r=0;r<i;++r){for(e=0,n=0;e<a;e++)n+=t[e][r][1];if(n)for(e=0;e<a;e++)t[e][r][1]/=n;else for(e=0;e<a;e++)t[e][r][1]=o}for(r=0;r<i;++r)s[r]=0;return s},zero:qi});function Ui(e){return t.range(e.length)}function qi(t){for(var e=-1,r=t[0].length,n=[];++e<r;)n[e]=0;return n}function Hi(t){for(var e,r=1,n=0,a=t[0][1],i=t.length;r<i;++r)(e=t[r][1])>a&&(n=r,a=e);return n}function Gi(t){return t.reduce(Yi,0)}function Yi(t,e){return t+e[1]}function Wi(t,e){return Xi(t,Math.ceil(Math.log(e.length)/Math.LN2+1))}function Xi(t,e){for(var r=-1,n=+t[0],a=(t[1]-n)/e,i=[];++r<=e;)i[r]=a*r+n;return i}function Zi(e){return[t.min(e),t.max(e)]}function Ji(t,e){return t.value-e.value}function Ki(t,e){var r=t._pack_next;t._pack_next=e,e._pack_prev=t,e._pack_next=r,r._pack_prev=e}function Qi(t,e){t._pack_next=e,e._pack_prev=t}function $i(t,e){var r=e.x-t.x,n=e.y-t.y,a=t.r+e.r;return.999*a*a>r*r+n*n}function to(t){if((e=t.children)&&(l=e.length)){var e,r,n,a,i,o,s,l,c=1/0,u=-1/0,h=1/0,f=-1/0;if(e.forEach(eo),(r=e[0]).x=-r.r,r.y=0,x(r),l>1&&((n=e[1]).x=n.r,n.y=0,x(n),l>2))for(no(r,n,a=e[2]),x(a),Ki(r,a),r._pack_prev=a,Ki(a,n),n=r._pack_next,i=3;i<l;i++){no(r,n,a=e[i]);var p=0,d=1,g=1;for(o=n._pack_next;o!==n;o=o._pack_next,d++)if($i(o,a)){p=1;break}if(1==p)for(s=r._pack_prev;s!==o._pack_prev&&!$i(s,a);s=s._pack_prev,g++);p?(d<g||d==g&&n.r<r.r?Qi(r,n=o):Qi(r=s,n),i--):(Ki(r,a),n=a,x(a))}var v=(c+u)/2,m=(h+f)/2,y=0;for(i=0;i<l;i++)(a=e[i]).x-=v,a.y-=m,y=Math.max(y,a.r+Math.sqrt(a.x*a.x+a.y*a.y));t.r=y,e.forEach(ro)}function x(t){c=Math.min(t.x-t.r,c),u=Math.max(t.x+t.r,u),h=Math.min(t.y-t.r,h),f=Math.max(t.y+t.r,f)}}function eo(t){t._pack_next=t._pack_prev=t}function ro(t){delete t._pack_next,delete t._pack_prev}function no(t,e,r){var n=t.r+r.r,a=e.x-t.x,i=e.y-t.y;if(n&&(a||i)){var o=e.r+r.r,s=a*a+i*i,l=.5+((n*=n)-(o*=o))/(2*s),c=Math.sqrt(Math.max(0,2*o*(n+s)-(n-=s)*n-o*o))/(2*s);r.x=t.x+l*a+c*i,r.y=t.y+l*i-c*a}else r.x=t.x+n,r.y=t.y}function ao(t,e){return t.parent==e.parent?1:2}function io(t){var e=t.children;return e.length?e[0]:t.t}function oo(t){var e,r=t.children;return(e=r.length)?r[e-1]:t.t}function so(t,e,r){var n=r/(e.i-t.i);e.c-=n,e.s+=r,t.c+=n,e.z+=r,e.m+=r}function lo(t,e,r){return t.a.parent===e.parent?t.a:r}function co(t){return{x:t.x,y:t.y,dx:t.dx,dy:t.dy}}function uo(t,e){var r=t.x+e[3],n=t.y+e[0],a=t.dx-e[1]-e[3],i=t.dy-e[0]-e[2];return a<0&&(r+=a/2,a=0),i<0&&(n+=i/2,i=0),{x:r,y:n,dx:a,dy:i}}function ho(t){var e=t[0],r=t[t.length-1];return e<r?[e,r]:[r,e]}function fo(t){return t.rangeExtent?t.rangeExtent():ho(t.range())}function po(t,e,r,n){var a=r(t[0],t[1]),i=n(e[0],e[1]);return function(t){return i(a(t))}}function go(t,e){var r,n=0,a=t.length-1,i=t[n],o=t[a];return o<i&&(r=n,n=a,a=r,r=i,i=o,o=r),t[n]=e.floor(i),t[a]=e.ceil(o),t}function vo(t){return t?{floor:function(e){return Math.floor(e/t)*t},ceil:function(e){return Math.ceil(e/t)*t}}:mo}t.layout.histogram=function(){var e=!0,r=Number,n=Zi,a=Wi;function i(i,o){for(var s,l,c=[],u=i.map(r,this),h=n.call(this,u,o),f=a.call(this,h,u,o),p=(o=-1,u.length),d=f.length-1,g=e?1:1/p;++o<d;)(s=c[o]=[]).dx=f[o+1]-(s.x=f[o]),s.y=0;if(d>0)for(o=-1;++o<p;)(l=u[o])>=h[0]&&l<=h[1]&&((s=c[t.bisect(f,l,1,d)-1]).y+=g,s.push(i[o]));return c}return i.value=function(t){return arguments.length?(r=t,i):r},i.range=function(t){return arguments.length?(n=ve(t),i):n},i.bins=function(t){return arguments.length?(a="number"==typeof t?function(e){return Xi(e,t)}:ve(t),i):a},i.frequency=function(t){return arguments.length?(e=!!t,i):e},i},t.layout.pack=function(){var e,r=t.layout.hierarchy().sort(Ji),n=0,a=[1,1];function i(t,i){var o=r.call(this,t,i),s=o[0],l=a[0],c=a[1],u=null==e?Math.sqrt:"function"==typeof e?e:function(){return e};if(s.x=s.y=0,Pi(s,function(t){t.r=+u(t.value)}),Pi(s,to),n){var h=n*(e?1:Math.max(2*s.r/l,2*s.r/c))/2;Pi(s,function(t){t.r+=h}),Pi(s,to),Pi(s,function(t){t.r-=h})}return function t(e,r,n,a){var i=e.children;e.x=r+=a*e.x;e.y=n+=a*e.y;e.r*=a;if(i)for(var o=-1,s=i.length;++o<s;)t(i[o],r,n,a)}(s,l/2,c/2,e?1:1/Math.max(2*s.r/l,2*s.r/c)),o}return i.size=function(t){return arguments.length?(a=t,i):a},i.radius=function(t){return arguments.length?(e=null==t||"function"==typeof t?t:+t,i):e},i.padding=function(t){return arguments.length?(n=+t,i):n},Li(i,r)},t.layout.tree=function(){var e=t.layout.hierarchy().sort(null).value(null),r=ao,n=[1,1],a=null;function i(t,i){var c=e.call(this,t,i),u=c[0],h=function(t){var e,r={A:null,children:[t]},n=[r];for(;null!=(e=n.pop());)for(var a,i=e.children,o=0,s=i.length;o<s;++o)n.push((i[o]=a={_:i[o],parent:e,children:(a=i[o].children)&&a.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=a);return r.children[0]}(u);if(Pi(h,o),h.parent.m=-h.z,Ci(h,s),a)Ci(u,l);else{var f=u,p=u,d=u;Ci(u,function(t){t.x<f.x&&(f=t),t.x>p.x&&(p=t),t.depth>d.depth&&(d=t)});var g=r(f,p)/2-f.x,v=n[0]/(p.x+r(p,f)/2+g),m=n[1]/(d.depth||1);Ci(u,function(t){t.x=(t.x+g)*v,t.y=t.depth*m})}return c}function o(t){var e=t.children,n=t.parent.children,a=t.i?n[t.i-1]:null;if(e.length){!function(t){var e,r=0,n=0,a=t.children,i=a.length;for(;--i>=0;)(e=a[i]).z+=r,e.m+=r,r+=e.s+(n+=e.c)}(t);var i=(e[0].z+e[e.length-1].z)/2;a?(t.z=a.z+r(t._,a._),t.m=t.z-i):t.z=i}else a&&(t.z=a.z+r(t._,a._));t.parent.A=function(t,e,n){if(e){for(var a,i=t,o=t,s=e,l=i.parent.children[0],c=i.m,u=o.m,h=s.m,f=l.m;s=oo(s),i=io(i),s&&i;)l=io(l),(o=oo(o)).a=t,(a=s.z+h-i.z-c+r(s._,i._))>0&&(so(lo(s,t,n),t,a),c+=a,u+=a),h+=s.m,c+=i.m,f+=l.m,u+=o.m;s&&!oo(o)&&(o.t=s,o.m+=h-u),i&&!io(l)&&(l.t=i,l.m+=c-f,n=t)}return n}(t,a,t.parent.A||n[0])}function s(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function l(t){t.x*=n[0],t.y=t.depth*n[1]}return i.separation=function(t){return arguments.length?(r=t,i):r},i.size=function(t){return arguments.length?(a=null==(n=t)?l:null,i):a?null:n},i.nodeSize=function(t){return arguments.length?(a=null==(n=t)?null:l,i):a?n:null},Li(i,e)},t.layout.cluster=function(){var e=t.layout.hierarchy().sort(null).value(null),r=ao,n=[1,1],a=!1;function i(i,o){var s,l=e.call(this,i,o),c=l[0],u=0;Pi(c,function(e){var n=e.children;n&&n.length?(e.x=function(t){return t.reduce(function(t,e){return t+e.x},0)/t.length}(n),e.y=function(e){return 1+t.max(e,function(t){return t.y})}(n)):(e.x=s?u+=r(e,s):0,e.y=0,s=e)});var h=function t(e){var r=e.children;return r&&r.length?t(r[0]):e}(c),f=function t(e){var r,n=e.children;return n&&(r=n.length)?t(n[r-1]):e}(c),p=h.x-r(h,f)/2,d=f.x+r(f,h)/2;return Pi(c,a?function(t){t.x=(t.x-c.x)*n[0],t.y=(c.y-t.y)*n[1]}:function(t){t.x=(t.x-p)/(d-p)*n[0],t.y=(1-(c.y?t.y/c.y:1))*n[1]}),l}return i.separation=function(t){return arguments.length?(r=t,i):r},i.size=function(t){return arguments.length?(a=null==(n=t),i):a?null:n},i.nodeSize=function(t){return arguments.length?(a=null!=(n=t),i):a?n:null},Li(i,e)},t.layout.treemap=function(){var e,r=t.layout.hierarchy(),n=Math.round,a=[1,1],i=null,o=co,s=!1,l="squarify",c=.5*(1+Math.sqrt(5));function u(t,e){for(var r,n,a=-1,i=t.length;++a<i;)n=(r=t[a]).value*(e<0?0:e),r.area=isNaN(n)||n<=0?0:n}function h(t){var e=t.children;if(e&&e.length){var r,n,a,i=o(t),s=[],c=e.slice(),f=1/0,g="slice"===l?i.dx:"dice"===l?i.dy:"slice-dice"===l?1&t.depth?i.dy:i.dx:Math.min(i.dx,i.dy);for(u(c,i.dx*i.dy/t.value),s.area=0;(a=c.length)>0;)s.push(r=c[a-1]),s.area+=r.area,"squarify"!==l||(n=p(s,g))<=f?(c.pop(),f=n):(s.area-=s.pop().area,d(s,g,i,!1),g=Math.min(i.dx,i.dy),s.length=s.area=0,f=1/0);s.length&&(d(s,g,i,!0),s.length=s.area=0),e.forEach(h)}}function f(t){var e=t.children;if(e&&e.length){var r,n=o(t),a=e.slice(),i=[];for(u(a,n.dx*n.dy/t.value),i.area=0;r=a.pop();)i.push(r),i.area+=r.area,null!=r.z&&(d(i,r.z?n.dx:n.dy,n,!a.length),i.length=i.area=0);e.forEach(f)}}function p(t,e){for(var r,n=t.area,a=0,i=1/0,o=-1,s=t.length;++o<s;)(r=t[o].area)&&(r<i&&(i=r),r>a&&(a=r));return e*=e,(n*=n)?Math.max(e*a*c/n,n/(e*i*c)):1/0}function d(t,e,r,a){var i,o=-1,s=t.length,l=r.x,c=r.y,u=e?n(t.area/e):0;if(e==r.dx){for((a||u>r.dy)&&(u=r.dy);++o<s;)(i=t[o]).x=l,i.y=c,i.dy=u,l+=i.dx=Math.min(r.x+r.dx-l,u?n(i.area/u):0);i.z=!0,i.dx+=r.x+r.dx-l,r.y+=u,r.dy-=u}else{for((a||u>r.dx)&&(u=r.dx);++o<s;)(i=t[o]).x=l,i.y=c,i.dx=u,c+=i.dy=Math.min(r.y+r.dy-c,u?n(i.area/u):0);i.z=!1,i.dy+=r.y+r.dy-c,r.x+=u,r.dx-=u}}function g(t){var n=e||r(t),i=n[0];return i.x=i.y=0,i.value?(i.dx=a[0],i.dy=a[1]):i.dx=i.dy=0,e&&r.revalue(i),u([i],i.dx*i.dy/i.value),(e?f:h)(i),s&&(e=n),n}return g.size=function(t){return arguments.length?(a=t,g):a},g.padding=function(t){if(!arguments.length)return i;function e(e){return uo(e,t)}var r;return o=null==(i=t)?co:"function"==(r=typeof t)?function(e){var r=t.call(g,e,e.depth);return null==r?co(e):uo(e,"number"==typeof r?[r,r,r,r]:r)}:"number"===r?(t=[t,t,t,t],e):e,g},g.round=function(t){return arguments.length?(n=t?Math.round:Number,g):n!=Number},g.sticky=function(t){return arguments.length?(s=t,e=null,g):s},g.ratio=function(t){return arguments.length?(c=t,g):c},g.mode=function(t){return arguments.length?(l=t+"",g):l},Li(g,r)},t.random={normal:function(t,e){var r=arguments.length;return r<2&&(e=1),r<1&&(t=0),function(){var r,n,a;do{a=(r=2*Math.random()-1)*r+(n=2*Math.random()-1)*n}while(!a||a>1);return t+e*r*Math.sqrt(-2*Math.log(a)/a)}},logNormal:function(){var e=t.random.normal.apply(t,arguments);return function(){return Math.exp(e())}},bates:function(e){var r=t.random.irwinHall(e);return function(){return r()/e}},irwinHall:function(t){return function(){for(var e=0,r=0;r<t;r++)e+=Math.random();return e}}},t.scale={};var mo={floor:P,ceil:P};function yo(e,r,n,a){var i=[],o=[],s=0,l=Math.min(e.length,r.length)-1;for(e[l]<e[0]&&(e=e.slice().reverse(),r=r.slice().reverse());++s<=l;)i.push(n(e[s-1],e[s])),o.push(a(r[s-1],r[s]));return function(r){var n=t.bisect(e,r,1,l)-1;return o[n](i[n](r))}}function xo(e,r){return t.rebind(e,r,"range","rangeRound","interpolate","clamp")}function bo(t,e){return go(t,vo(_o(t,e)[2])),go(t,vo(_o(t,e)[2])),t}function _o(t,e){null==e&&(e=10);var r=ho(t),n=r[1]-r[0],a=Math.pow(10,Math.floor(Math.log(n/e)/Math.LN10)),i=e/n*a;return i<=.15?a*=10:i<=.35?a*=5:i<=.75&&(a*=2),r[0]=Math.ceil(r[0]/a)*a,r[1]=Math.floor(r[1]/a)*a+.5*a,r[2]=a,r}function wo(e,r){return t.range.apply(t,_o(e,r))}function ko(e,r,n){var a=_o(e,r);if(n){var i=Pe.exec(n);if(i.shift(),"s"===i[8]){var o=t.formatPrefix(Math.max(y(a[0]),y(a[1])));return i[7]||(i[7]="."+Mo(o.scale(a[2]))),i[8]="f",n=t.format(i.join("")),function(t){return n(o.scale(t))+o.symbol}}i[7]||(i[7]="."+function(t,e){var r=Mo(e[2]);return t in To?Math.abs(r-Mo(Math.max(y(e[0]),y(e[1]))))+ +("e"!==t):r-2*("%"===t)}(i[8],a)),n=i.join("")}else n=",."+Mo(a[2])+"f";return t.format(n)}t.scale.linear=function(){return function t(e,r,n,a){var i,o;function s(){var t=Math.min(e.length,r.length)>2?yo:po,s=a?xi:yi;return i=t(e,r,s,n),o=t(r,e,s,Ka),l}function l(t){return i(t)}l.invert=function(t){return o(t)};l.domain=function(t){return arguments.length?(e=t.map(Number),s()):e};l.range=function(t){return arguments.length?(r=t,s()):r};l.rangeRound=function(t){return l.range(t).interpolate(hi)};l.clamp=function(t){return arguments.length?(a=t,s()):a};l.interpolate=function(t){return arguments.length?(n=t,s()):n};l.ticks=function(t){return wo(e,t)};l.tickFormat=function(t,r){return ko(e,t,r)};l.nice=function(t){return bo(e,t),s()};l.copy=function(){return t(e,r,n,a)};return s()}([0,1],[0,1],Ka,!1)};var To={s:1,g:1,p:1,r:1,e:1};function Mo(t){return-Math.floor(Math.log(t)/Math.LN10+.01)}t.scale.log=function(){return function e(r,n,a,i){function o(t){return(a?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(n)}function s(t){return a?Math.pow(n,t):-Math.pow(n,-t)}function l(t){return r(o(t))}l.invert=function(t){return s(r.invert(t))};l.domain=function(t){return arguments.length?(a=t[0]>=0,r.domain((i=t.map(Number)).map(o)),l):i};l.base=function(t){return arguments.length?(n=+t,r.domain(i.map(o)),l):n};l.nice=function(){var t=go(i.map(o),a?Math:So);return r.domain(t),i=t.map(s),l};l.ticks=function(){var t=ho(i),e=[],r=t[0],l=t[1],c=Math.floor(o(r)),u=Math.ceil(o(l)),h=n%1?2:n;if(isFinite(u-c)){if(a){for(;c<u;c++)for(var f=1;f<h;f++)e.push(s(c)*f);e.push(s(c))}else for(e.push(s(c));c++<u;)for(var f=h-1;f>0;f--)e.push(s(c)*f);for(c=0;e[c]<r;c++);for(u=e.length;e[u-1]>l;u--);e=e.slice(c,u)}return e};l.tickFormat=function(e,r){if(!arguments.length)return Ao;arguments.length<2?r=Ao:"function"!=typeof r&&(r=t.format(r));var a=Math.max(1,n*e/l.ticks().length);return function(t){var e=t/s(Math.round(o(t)));return e*n<n-.5&&(e*=n),e<=a?r(t):""}};l.copy=function(){return e(r.copy(),n,a,i)};return xo(l,r)}(t.scale.linear().domain([0,1]),10,!0,[1,10])};var Ao=t.format(".0e"),So={floor:function(t){return-Math.ceil(-t)},ceil:function(t){return-Math.floor(-t)}};function Eo(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}t.scale.pow=function(){return function t(e,r,n){var a=Eo(r),i=Eo(1/r);function o(t){return e(a(t))}o.invert=function(t){return i(e.invert(t))};o.domain=function(t){return arguments.length?(e.domain((n=t.map(Number)).map(a)),o):n};o.ticks=function(t){return wo(n,t)};o.tickFormat=function(t,e){return ko(n,t,e)};o.nice=function(t){return o.domain(bo(n,t))};o.exponent=function(t){return arguments.length?(a=Eo(r=t),i=Eo(1/r),e.domain(n.map(a)),o):r};o.copy=function(){return t(e.copy(),r,n)};return xo(o,e)}(t.scale.linear(),1,[0,1])},t.scale.sqrt=function(){return t.scale.pow().exponent(.5)},t.scale.ordinal=function(){return function e(r,n){var a,i,o;function s(t){return i[((a.get(t)||("range"===n.t?a.set(t,r.push(t)):NaN))-1)%i.length]}function l(e,n){return t.range(r.length).map(function(t){return e+n*t})}s.domain=function(t){if(!arguments.length)return r;r=[],a=new b;for(var e,i=-1,o=t.length;++i<o;)a.has(e=t[i])||a.set(e,r.push(e));return s[n.t].apply(s,n.a)};s.range=function(t){return arguments.length?(i=t,o=0,n={t:"range",a:arguments},s):i};s.rangePoints=function(t,e){arguments.length<2&&(e=0);var a=t[0],c=t[1],u=r.length<2?(a=(a+c)/2,0):(c-a)/(r.length-1+e);return i=l(a+u*e/2,u),o=0,n={t:"rangePoints",a:arguments},s};s.rangeRoundPoints=function(t,e){arguments.length<2&&(e=0);var a=t[0],c=t[1],u=r.length<2?(a=c=Math.round((a+c)/2),0):(c-a)/(r.length-1+e)|0;return i=l(a+Math.round(u*e/2+(c-a-(r.length-1+e)*u)/2),u),o=0,n={t:"rangeRoundPoints",a:arguments},s};s.rangeBands=function(t,e,a){arguments.length<2&&(e=0),arguments.length<3&&(a=e);var c=t[1]<t[0],u=t[c-0],h=t[1-c],f=(h-u)/(r.length-e+2*a);return i=l(u+f*a,f),c&&i.reverse(),o=f*(1-e),n={t:"rangeBands",a:arguments},s};s.rangeRoundBands=function(t,e,a){arguments.length<2&&(e=0),arguments.length<3&&(a=e);var c=t[1]<t[0],u=t[c-0],h=t[1-c],f=Math.floor((h-u)/(r.length-e+2*a));return i=l(u+Math.round((h-u-(r.length-e)*f)/2),f),c&&i.reverse(),o=Math.round(f*(1-e)),n={t:"rangeRoundBands",a:arguments},s};s.rangeBand=function(){return o};s.rangeExtent=function(){return ho(n.a[0])};s.copy=function(){return e(r,n)};return s.domain(r)}([],{t:"range",a:[[]]})},t.scale.category10=function(){return t.scale.ordinal().range(Lo)},t.scale.category20=function(){return t.scale.ordinal().range(Co)},t.scale.category20b=function(){return t.scale.ordinal().range(Po)},t.scale.category20c=function(){return t.scale.ordinal().range(Oo)};var Lo=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(se),Co=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(se),Po=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(se),Oo=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(se);function zo(){return 0}t.scale.quantile=function(){return function e(r,n){var a;function i(){var e=0,i=n.length;for(a=[];++e<i;)a[e-1]=t.quantile(r,e/i);return o}function o(e){if(!isNaN(e=+e))return n[t.bisect(a,e)]}o.domain=function(t){return arguments.length?(r=t.map(p).filter(d).sort(f),i()):r};o.range=function(t){return arguments.length?(n=t,i()):n};o.quantiles=function(){return a};o.invertExtent=function(t){return(t=n.indexOf(t))<0?[NaN,NaN]:[t>0?a[t-1]:r[0],t<a.length?a[t]:r[r.length-1]]};o.copy=function(){return e(r,n)};return i()}([],[])},t.scale.quantize=function(){return function t(e,r,n){var a,i;function o(t){return n[Math.max(0,Math.min(i,Math.floor(a*(t-e))))]}function s(){return a=n.length/(r-e),i=n.length-1,o}o.domain=function(t){return arguments.length?(e=+t[0],r=+t[t.length-1],s()):[e,r]};o.range=function(t){return arguments.length?(n=t,s()):n};o.invertExtent=function(t){return[t=(t=n.indexOf(t))<0?NaN:t/a+e,t+1/a]};o.copy=function(){return t(e,r,n)};return s()}(0,1,[0,1])},t.scale.threshold=function(){return function e(r,n){function a(e){if(e<=e)return n[t.bisect(r,e)]}a.domain=function(t){return arguments.length?(r=t,a):r};a.range=function(t){return arguments.length?(n=t,a):n};a.invertExtent=function(t){return t=n.indexOf(t),[r[t-1],r[t]]};a.copy=function(){return e(r,n)};return a}([.5],[0,1])},t.scale.identity=function(){return function t(e){function r(t){return+t}r.invert=r;r.domain=r.range=function(t){return arguments.length?(e=t.map(r),r):e};r.ticks=function(t){return wo(e,t)};r.tickFormat=function(t,r){return ko(e,t,r)};r.copy=function(){return t(e)};return r}([0,1])},t.svg={},t.svg.arc=function(){var t=Do,e=Ro,r=zo,n=Io,a=Fo,i=Bo,o=No;function s(){var s=Math.max(0,+t.apply(this,arguments)),c=Math.max(0,+e.apply(this,arguments)),u=a.apply(this,arguments)-Et,h=i.apply(this,arguments)-Et,f=Math.abs(h-u),p=u>h?0:1;if(c<s&&(d=c,c=s,s=d),f>=St)return l(c,p)+(s?l(s,1-p):"")+"Z";var d,g,v,m,y,x,b,_,w,k,T,M,A=0,S=0,E=[];if((m=(+o.apply(this,arguments)||0)/2)&&(v=n===Io?Math.sqrt(s*s+c*c):+n.apply(this,arguments),p||(S*=-1),c&&(S=It(v/c*Math.sin(m))),s&&(A=It(v/s*Math.sin(m)))),c){y=c*Math.cos(u+S),x=c*Math.sin(u+S),b=c*Math.cos(h-S),_=c*Math.sin(h-S);var L=Math.abs(h-u-2*S)<=Mt?0:1;if(S&&jo(y,x,b,_)===p^L){var C=(u+h)/2;y=c*Math.cos(C),x=c*Math.sin(C),b=_=null}}else y=x=0;if(s){w=s*Math.cos(h-A),k=s*Math.sin(h-A),T=s*Math.cos(u+A),M=s*Math.sin(u+A);var P=Math.abs(u-h+2*A)<=Mt?0:1;if(A&&jo(w,k,T,M)===1-p^P){var O=(u+h)/2;w=s*Math.cos(O),k=s*Math.sin(O),T=M=null}}else w=k=0;if(f>kt&&(d=Math.min(Math.abs(c-s)/2,+r.apply(this,arguments)))>.001){g=s<c^p?0:1;var z=d,I=d;if(f<Mt){var D=null==T?[w,k]:null==b?[y,x]:ca([y,x],[T,M],[b,_],[w,k]),R=y-D[0],F=x-D[1],B=b-D[0],N=_-D[1],j=1/Math.sin(Math.acos((R*B+F*N)/(Math.sqrt(R*R+F*F)*Math.sqrt(B*B+N*N)))/2),V=Math.sqrt(D[0]*D[0]+D[1]*D[1]);I=Math.min(d,(s-V)/(j-1)),z=Math.min(d,(c-V)/(j+1))}if(null!=b){var U=Vo(null==T?[w,k]:[T,M],[y,x],c,z,p),q=Vo([b,_],[w,k],c,z,p);d===z?E.push("M",U[0],"A",z,",",z," 0 0,",g," ",U[1],"A",c,",",c," 0 ",1-p^jo(U[1][0],U[1][1],q[1][0],q[1][1]),",",p," ",q[1],"A",z,",",z," 0 0,",g," ",q[0]):E.push("M",U[0],"A",z,",",z," 0 1,",g," ",q[0])}else E.push("M",y,",",x);if(null!=T){var H=Vo([y,x],[T,M],s,-I,p),G=Vo([w,k],null==b?[y,x]:[b,_],s,-I,p);d===I?E.push("L",G[0],"A",I,",",I," 0 0,",g," ",G[1],"A",s,",",s," 0 ",p^jo(G[1][0],G[1][1],H[1][0],H[1][1]),",",1-p," ",H[1],"A",I,",",I," 0 0,",g," ",H[0]):E.push("L",G[0],"A",I,",",I," 0 0,",g," ",H[0])}else E.push("L",w,",",k)}else E.push("M",y,",",x),null!=b&&E.push("A",c,",",c," 0 ",L,",",p," ",b,",",_),E.push("L",w,",",k),null!=T&&E.push("A",s,",",s," 0 ",P,",",1-p," ",T,",",M);return E.push("Z"),E.join("")}function l(t,e){return"M0,"+t+"A"+t+","+t+" 0 1,"+e+" 0,"+-t+"A"+t+","+t+" 0 1,"+e+" 0,"+t}return s.innerRadius=function(e){return arguments.length?(t=ve(e),s):t},s.outerRadius=function(t){return arguments.length?(e=ve(t),s):e},s.cornerRadius=function(t){return arguments.length?(r=ve(t),s):r},s.padRadius=function(t){return arguments.length?(n=t==Io?Io:ve(t),s):n},s.startAngle=function(t){return arguments.length?(a=ve(t),s):a},s.endAngle=function(t){return arguments.length?(i=ve(t),s):i},s.padAngle=function(t){return arguments.length?(o=ve(t),s):o},s.centroid=function(){var r=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,n=(+a.apply(this,arguments)+ +i.apply(this,arguments))/2-Et;return[Math.cos(n)*r,Math.sin(n)*r]},s};var Io="auto";function Do(t){return t.innerRadius}function Ro(t){return t.outerRadius}function Fo(t){return t.startAngle}function Bo(t){return t.endAngle}function No(t){return t&&t.padAngle}function jo(t,e,r,n){return(t-r)*e-(e-n)*t>0?0:1}function Vo(t,e,r,n,a){var i=t[0]-e[0],o=t[1]-e[1],s=(a?n:-n)/Math.sqrt(i*i+o*o),l=s*o,c=-s*i,u=t[0]+l,h=t[1]+c,f=e[0]+l,p=e[1]+c,d=(u+f)/2,g=(h+p)/2,v=f-u,m=p-h,y=v*v+m*m,x=r-n,b=u*p-f*h,_=(m<0?-1:1)*Math.sqrt(Math.max(0,x*x*y-b*b)),w=(b*m-v*_)/y,k=(-b*v-m*_)/y,T=(b*m+v*_)/y,M=(-b*v+m*_)/y,A=w-d,S=k-g,E=T-d,L=M-g;return A*A+S*S>E*E+L*L&&(w=T,k=M),[[w-l,k-c],[w*r/x,k*r/x]]}function Uo(t){var e=na,r=aa,n=Xr,a=Ho,i=a.key,o=.7;function s(i){var s,l=[],c=[],u=-1,h=i.length,f=ve(e),p=ve(r);function d(){l.push("M",a(t(c),o))}for(;++u<h;)n.call(this,s=i[u],u)?c.push([+f.call(this,s,u),+p.call(this,s,u)]):c.length&&(d(),c=[]);return c.length&&d(),l.length?l.join(""):null}return s.x=function(t){return arguments.length?(e=t,s):e},s.y=function(t){return arguments.length?(r=t,s):r},s.defined=function(t){return arguments.length?(n=t,s):n},s.interpolate=function(t){return arguments.length?(i="function"==typeof t?a=t:(a=qo.get(t)||Ho).key,s):i},s.tension=function(t){return arguments.length?(o=t,s):o},s}t.svg.line=function(){return Uo(P)};var qo=t.map({linear:Ho,"linear-closed":Go,step:function(t){var e=0,r=t.length,n=t[0],a=[n[0],",",n[1]];for(;++e<r;)a.push("H",(n[0]+(n=t[e])[0])/2,"V",n[1]);r>1&&a.push("H",n[0]);return a.join("")},"step-before":Yo,"step-after":Wo,basis:Jo,"basis-open":function(t){if(t.length<4)return Ho(t);var e,r=[],n=-1,a=t.length,i=[0],o=[0];for(;++n<3;)e=t[n],i.push(e[0]),o.push(e[1]);r.push(Ko(ts,i)+","+Ko(ts,o)),--n;for(;++n<a;)e=t[n],i.shift(),i.push(e[0]),o.shift(),o.push(e[1]),es(r,i,o);return r.join("")},"basis-closed":function(t){var e,r,n=-1,a=t.length,i=a+4,o=[],s=[];for(;++n<4;)r=t[n%a],o.push(r[0]),s.push(r[1]);e=[Ko(ts,o),",",Ko(ts,s)],--n;for(;++n<i;)r=t[n%a],o.shift(),o.push(r[0]),s.shift(),s.push(r[1]),es(e,o,s);return e.join("")},bundle:function(t,e){var r=t.length-1;if(r)for(var n,a,i=t[0][0],o=t[0][1],s=t[r][0]-i,l=t[r][1]-o,c=-1;++c<=r;)n=t[c],a=c/r,n[0]=e*n[0]+(1-e)*(i+a*s),n[1]=e*n[1]+(1-e)*(o+a*l);return Jo(t)},cardinal:function(t,e){return t.length<3?Ho(t):t[0]+Xo(t,Zo(t,e))},"cardinal-open":function(t,e){return t.length<4?Ho(t):t[1]+Xo(t.slice(1,-1),Zo(t,e))},"cardinal-closed":function(t,e){return t.length<3?Go(t):t[0]+Xo((t.push(t[0]),t),Zo([t[t.length-2]].concat(t,[t[1]]),e))},monotone:function(t){return t.length<3?Ho(t):t[0]+Xo(t,function(t){var e,r,n,a,i=[],o=function(t){var e=0,r=t.length-1,n=[],a=t[0],i=t[1],o=n[0]=rs(a,i);for(;++e<r;)n[e]=(o+(o=rs(a=i,i=t[e+1])))/2;return n[e]=o,n}(t),s=-1,l=t.length-1;for(;++s<l;)e=rs(t[s],t[s+1]),y(e)<kt?o[s]=o[s+1]=0:(r=o[s]/e,n=o[s+1]/e,(a=r*r+n*n)>9&&(a=3*e/Math.sqrt(a),o[s]=a*r,o[s+1]=a*n));s=-1;for(;++s<=l;)a=(t[Math.min(l,s+1)][0]-t[Math.max(0,s-1)][0])/(6*(1+o[s]*o[s])),i.push([a||0,o[s]*a||0]);return i}(t))}});function Ho(t){return t.length>1?t.join("L"):t+"Z"}function Go(t){return t.join("L")+"Z"}function Yo(t){for(var e=0,r=t.length,n=t[0],a=[n[0],",",n[1]];++e<r;)a.push("V",(n=t[e])[1],"H",n[0]);return a.join("")}function Wo(t){for(var e=0,r=t.length,n=t[0],a=[n[0],",",n[1]];++e<r;)a.push("H",(n=t[e])[0],"V",n[1]);return a.join("")}function Xo(t,e){if(e.length<1||t.length!=e.length&&t.length!=e.length+2)return Ho(t);var r=t.length!=e.length,n="",a=t[0],i=t[1],o=e[0],s=o,l=1;if(r&&(n+="Q"+(i[0]-2*o[0]/3)+","+(i[1]-2*o[1]/3)+","+i[0]+","+i[1],a=t[1],l=2),e.length>1){s=e[1],i=t[l],l++,n+="C"+(a[0]+o[0])+","+(a[1]+o[1])+","+(i[0]-s[0])+","+(i[1]-s[1])+","+i[0]+","+i[1];for(var c=2;c<e.length;c++,l++)i=t[l],s=e[c],n+="S"+(i[0]-s[0])+","+(i[1]-s[1])+","+i[0]+","+i[1]}if(r){var u=t[l];n+="Q"+(i[0]+2*s[0]/3)+","+(i[1]+2*s[1]/3)+","+u[0]+","+u[1]}return n}function Zo(t,e){for(var r,n=[],a=(1-e)/2,i=t[0],o=t[1],s=1,l=t.length;++s<l;)r=i,i=o,o=t[s],n.push([a*(o[0]-r[0]),a*(o[1]-r[1])]);return n}function Jo(t){if(t.length<3)return Ho(t);var e=1,r=t.length,n=t[0],a=n[0],i=n[1],o=[a,a,a,(n=t[1])[0]],s=[i,i,i,n[1]],l=[a,",",i,"L",Ko(ts,o),",",Ko(ts,s)];for(t.push(t[r-1]);++e<=r;)n=t[e],o.shift(),o.push(n[0]),s.shift(),s.push(n[1]),es(l,o,s);return t.pop(),l.push("L",n),l.join("")}function Ko(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}qo.forEach(function(t,e){e.key=t,e.closed=/-closed$/.test(t)});var Qo=[0,2/3,1/3,0],$o=[0,1/3,2/3,0],ts=[0,1/6,2/3,1/6];function es(t,e,r){t.push("C",Ko(Qo,e),",",Ko(Qo,r),",",Ko($o,e),",",Ko($o,r),",",Ko(ts,e),",",Ko(ts,r))}function rs(t,e){return(e[1]-t[1])/(e[0]-t[0])}function ns(t){for(var e,r,n,a=-1,i=t.length;++a<i;)r=(e=t[a])[0],n=e[1]-Et,e[0]=r*Math.cos(n),e[1]=r*Math.sin(n);return t}function as(t){var e=na,r=na,n=0,a=aa,i=Xr,o=Ho,s=o.key,l=o,c="L",u=.7;function h(s){var h,f,p,d=[],g=[],v=[],m=-1,y=s.length,x=ve(e),b=ve(n),_=e===r?function(){return f}:ve(r),w=n===a?function(){return p}:ve(a);function k(){d.push("M",o(t(v),u),c,l(t(g.reverse()),u),"Z")}for(;++m<y;)i.call(this,h=s[m],m)?(g.push([f=+x.call(this,h,m),p=+b.call(this,h,m)]),v.push([+_.call(this,h,m),+w.call(this,h,m)])):g.length&&(k(),g=[],v=[]);return g.length&&k(),d.length?d.join(""):null}return h.x=function(t){return arguments.length?(e=r=t,h):r},h.x0=function(t){return arguments.length?(e=t,h):e},h.x1=function(t){return arguments.length?(r=t,h):r},h.y=function(t){return arguments.length?(n=a=t,h):a},h.y0=function(t){return arguments.length?(n=t,h):n},h.y1=function(t){return arguments.length?(a=t,h):a},h.defined=function(t){return arguments.length?(i=t,h):i},h.interpolate=function(t){return arguments.length?(s="function"==typeof t?o=t:(o=qo.get(t)||Ho).key,l=o.reverse||o,c=o.closed?"M":"L",h):s},h.tension=function(t){return arguments.length?(u=t,h):u},h}function is(t){return t.radius}function os(t){return[t.x,t.y]}function ss(){return 64}function ls(){return"circle"}function cs(t){var e=Math.sqrt(t/Mt);return"M0,"+e+"A"+e+","+e+" 0 1,1 0,"+-e+"A"+e+","+e+" 0 1,1 0,"+e+"Z"}t.svg.line.radial=function(){var t=Uo(ns);return t.radius=t.x,delete t.x,t.angle=t.y,delete t.y,t},Yo.reverse=Wo,Wo.reverse=Yo,t.svg.area=function(){return as(P)},t.svg.area.radial=function(){var t=as(ns);return t.radius=t.x,delete t.x,t.innerRadius=t.x0,delete t.x0,t.outerRadius=t.x1,delete t.x1,t.angle=t.y,delete t.y,t.startAngle=t.y0,delete t.y0,t.endAngle=t.y1,delete t.y1,t},t.svg.chord=function(){var t=qn,e=Hn,r=is,n=Fo,a=Bo;function i(r,n){var a,i,c=o(this,t,r,n),u=o(this,e,r,n);return"M"+c.p0+s(c.r,c.p1,c.a1-c.a0)+(i=u,(a=c).a0==i.a0&&a.a1==i.a1?l(c.r,c.p1,c.r,c.p0):l(c.r,c.p1,u.r,u.p0)+s(u.r,u.p1,u.a1-u.a0)+l(u.r,u.p1,c.r,c.p0))+"Z"}function o(t,e,i,o){var s=e.call(t,i,o),l=r.call(t,s,o),c=n.call(t,s,o)-Et,u=a.call(t,s,o)-Et;return{r:l,a0:c,a1:u,p0:[l*Math.cos(c),l*Math.sin(c)],p1:[l*Math.cos(u),l*Math.sin(u)]}}function s(t,e,r){return"A"+t+","+t+" 0 "+ +(r>Mt)+",1 "+e}function l(t,e,r,n){return"Q 0,0 "+n}return i.radius=function(t){return arguments.length?(r=ve(t),i):r},i.source=function(e){return arguments.length?(t=ve(e),i):t},i.target=function(t){return arguments.length?(e=ve(t),i):e},i.startAngle=function(t){return arguments.length?(n=ve(t),i):n},i.endAngle=function(t){return arguments.length?(a=ve(t),i):a},i},t.svg.diagonal=function(){var t=qn,e=Hn,r=os;function n(n,a){var i=t.call(this,n,a),o=e.call(this,n,a),s=(i.y+o.y)/2,l=[i,{x:i.x,y:s},{x:o.x,y:s},o];return"M"+(l=l.map(r))[0]+"C"+l[1]+" "+l[2]+" "+l[3]}return n.source=function(e){return arguments.length?(t=ve(e),n):t},n.target=function(t){return arguments.length?(e=ve(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},t.svg.diagonal.radial=function(){var e=t.svg.diagonal(),r=os,n=e.projection;return e.projection=function(t){return arguments.length?n(function(t){return function(){var e=t.apply(this,arguments),r=e[0],n=e[1]-Et;return[r*Math.cos(n),r*Math.sin(n)]}}(r=t)):r},e},t.svg.symbol=function(){var t=ls,e=ss;function r(r,n){return(us.get(t.call(this,r,n))||cs)(e.call(this,r,n))}return r.type=function(e){return arguments.length?(t=ve(e),r):t},r.size=function(t){return arguments.length?(e=ve(t),r):e},r};var us=t.map({circle:cs,cross:function(t){var e=Math.sqrt(t/5)/2;return"M"+-3*e+","+-e+"H"+-e+"V"+-3*e+"H"+e+"V"+-e+"H"+3*e+"V"+e+"H"+e+"V"+3*e+"H"+-e+"V"+e+"H"+-3*e+"Z"},diamond:function(t){var e=Math.sqrt(t/(2*fs)),r=e*fs;return"M0,"+-e+"L"+r+",0 0,"+e+" "+-r+",0Z"},square:function(t){var e=Math.sqrt(t)/2;return"M"+-e+","+-e+"L"+e+","+-e+" "+e+","+e+" "+-e+","+e+"Z"},"triangle-down":function(t){var e=Math.sqrt(t/hs),r=e*hs/2;return"M0,"+r+"L"+e+","+-r+" "+-e+","+-r+"Z"},"triangle-up":function(t){var e=Math.sqrt(t/hs),r=e*hs/2;return"M0,"+-r+"L"+e+","+r+" "+-e+","+r+"Z"}});t.svg.symbolTypes=us.keys();var hs=Math.sqrt(3),fs=Math.tan(30*Lt);W.transition=function(t){for(var e,r,n=vs||++xs,a=ws(t),i=[],o=ms||{time:Date.now(),ease:oi,delay:0,duration:250},s=-1,l=this.length;++s<l;){i.push(e=[]);for(var c=this[s],u=-1,h=c.length;++u<h;)(r=c[u])&&ks(r,u,a,n,o),e.push(r)}return gs(i,a,n)},W.interrupt=function(t){return this.each(null==t?ps:ds(ws(t)))};var ps=ds(ws());function ds(t){return function(){var e,r,n;(e=this[t])&&(n=e[r=e.active])&&(n.timer.c=null,n.timer.t=NaN,--e.count?delete e[r]:delete this[t],e.active+=.5,n.event&&n.event.interrupt.call(this,this.__data__,n.index))}}function gs(t,e,r){return U(t,ys),t.namespace=e,t.id=r,t}var vs,ms,ys=[],xs=0;function bs(t,e,r,n){var a=t.id,i=t.namespace;return ut(t,"function"==typeof r?function(t,o,s){t[i][a].tween.set(e,n(r.call(t,t.__data__,o,s)))}:(r=n(r),function(t){t[i][a].tween.set(e,r)}))}function _s(t){return null==t&&(t=""),function(){this.textContent=t}}function ws(t){return null==t?"__transition__":"__transition_"+t+"__"}function ks(t,e,r,n,a){var i,o,s,l,c,u=t[r]||(t[r]={active:0,count:0}),h=u[n];function f(r){var a=u.active,f=u[a];for(var d in f&&(f.timer.c=null,f.timer.t=NaN,--u.count,delete u[a],f.event&&f.event.interrupt.call(t,t.__data__,f.index)),u)if(+d<n){var g=u[d];g.timer.c=null,g.timer.t=NaN,--u.count,delete u[d]}o.c=p,Te(function(){return o.c&&p(r||1)&&(o.c=null,o.t=NaN),1},0,i),u.active=n,h.event&&h.event.start.call(t,t.__data__,e),c=[],h.tween.forEach(function(r,n){(n=n.call(t,t.__data__,e))&&c.push(n)}),l=h.ease,s=h.duration}function p(a){for(var i=a/s,o=l(i),f=c.length;f>0;)c[--f].call(t,o);if(i>=1)return h.event&&h.event.end.call(t,t.__data__,e),--u.count?delete u[n]:delete t[r],1}h||(i=a.time,o=Te(function(t){var e=h.delay;if(o.t=e+i,e<=t)return f(t-e);o.c=f},0,i),h=u[n]={tween:new b,time:i,timer:o,delay:a.delay,duration:a.duration,ease:a.ease,index:e},a=null,++u.count)}ys.call=W.call,ys.empty=W.empty,ys.node=W.node,ys.size=W.size,t.transition=function(e,r){return e&&e.transition?vs?e.transition(r):e:t.selection().transition(e)},t.transition.prototype=ys,ys.select=function(t){var e,r,n,a=this.id,i=this.namespace,o=[];t=X(t);for(var s=-1,l=this.length;++s<l;){o.push(e=[]);for(var c=this[s],u=-1,h=c.length;++u<h;)(n=c[u])&&(r=t.call(n,n.__data__,u,s))?("__data__"in n&&(r.__data__=n.__data__),ks(r,u,i,a,n[i][a]),e.push(r)):e.push(null)}return gs(o,i,a)},ys.selectAll=function(t){var e,r,n,a,i,o=this.id,s=this.namespace,l=[];t=Z(t);for(var c=-1,u=this.length;++c<u;)for(var h=this[c],f=-1,p=h.length;++f<p;)if(n=h[f]){i=n[s][o],r=t.call(n,n.__data__,f,c),l.push(e=[]);for(var d=-1,g=r.length;++d<g;)(a=r[d])&&ks(a,d,s,o,i),e.push(a)}return gs(l,s,o)},ys.filter=function(t){var e,r,n=[];"function"!=typeof t&&(t=ct(t));for(var a=0,i=this.length;a<i;a++){n.push(e=[]);for(var o,s=0,l=(o=this[a]).length;s<l;s++)(r=o[s])&&t.call(r,r.__data__,s,a)&&e.push(r)}return gs(n,this.namespace,this.id)},ys.tween=function(t,e){var r=this.id,n=this.namespace;return arguments.length<2?this.node()[n][r].tween.get(t):ut(this,null==e?function(e){e[n][r].tween.remove(t)}:function(a){a[n][r].tween.set(t,e)})},ys.attr=function(e,r){if(arguments.length<2){for(r in e)this.attr(r,e[r]);return this}var n="transform"==e?mi:Ka,a=t.ns.qualify(e);function i(){this.removeAttribute(a)}function o(){this.removeAttributeNS(a.space,a.local)}return bs(this,"attr."+e,r,a.local?function(t){return null==t?o:(t+="",function(){var e,r=this.getAttributeNS(a.space,a.local);return r!==t&&(e=n(r,t),function(t){this.setAttributeNS(a.space,a.local,e(t))})})}:function(t){return null==t?i:(t+="",function(){var e,r=this.getAttribute(a);return r!==t&&(e=n(r,t),function(t){this.setAttribute(a,e(t))})})})},ys.attrTween=function(e,r){var n=t.ns.qualify(e);return this.tween("attr."+e,n.local?function(t,e){var a=r.call(this,t,e,this.getAttributeNS(n.space,n.local));return a&&function(t){this.setAttributeNS(n.space,n.local,a(t))}}:function(t,e){var a=r.call(this,t,e,this.getAttribute(n));return a&&function(t){this.setAttribute(n,a(t))}})},ys.style=function(t,e,r){var n=arguments.length;if(n<3){if("string"!=typeof t){for(r in n<2&&(e=""),t)this.style(r,t[r],e);return this}r=""}function a(){this.style.removeProperty(t)}return bs(this,"style."+t,e,function(e){return null==e?a:(e+="",function(){var n,a=o(this).getComputedStyle(this,null).getPropertyValue(t);return a!==e&&(n=Ka(a,e),function(e){this.style.setProperty(t,n(e),r)})})})},ys.styleTween=function(t,e,r){return arguments.length<3&&(r=""),this.tween("style."+t,function(n,a){var i=e.call(this,n,a,o(this).getComputedStyle(this,null).getPropertyValue(t));return i&&function(e){this.style.setProperty(t,i(e),r)}})},ys.text=function(t){return bs(this,"text",t,_s)},ys.remove=function(){var t=this.namespace;return this.each("end.transition",function(){var e;this[t].count<2&&(e=this.parentNode)&&e.removeChild(this)})},ys.ease=function(e){var r=this.id,n=this.namespace;return arguments.length<1?this.node()[n][r].ease:("function"!=typeof e&&(e=t.ease.apply(t,arguments)),ut(this,function(t){t[n][r].ease=e}))},ys.delay=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].delay:ut(this,"function"==typeof t?function(n,a,i){n[r][e].delay=+t.call(n,n.__data__,a,i)}:(t=+t,function(n){n[r][e].delay=t}))},ys.duration=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].duration:ut(this,"function"==typeof t?function(n,a,i){n[r][e].duration=Math.max(1,t.call(n,n.__data__,a,i))}:(t=Math.max(1,t),function(n){n[r][e].duration=t}))},ys.each=function(e,r){var n=this.id,a=this.namespace;if(arguments.length<2){var i=ms,o=vs;try{vs=n,ut(this,function(t,r,i){ms=t[a][n],e.call(t,t.__data__,r,i)})}finally{ms=i,vs=o}}else ut(this,function(i){var o=i[a][n];(o.event||(o.event=t.dispatch("start","end","interrupt"))).on(e,r)});return this},ys.transition=function(){for(var t,e,r,n=this.id,a=++xs,i=this.namespace,o=[],s=0,l=this.length;s<l;s++){o.push(t=[]);for(var c,u=0,h=(c=this[s]).length;u<h;u++)(e=c[u])&&ks(e,u,i,a,{time:(r=e[i][n]).time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration}),t.push(e)}return gs(o,i,a)},t.svg.axis=function(){var e,r=t.scale.linear(),a=Ts,i=6,o=6,s=3,l=[10],c=null;function u(n){n.each(function(){var n,u=t.select(this),h=this.__chart__||r,f=this.__chart__=r.copy(),p=null==c?f.ticks?f.ticks.apply(f,l):f.domain():c,d=null==e?f.tickFormat?f.tickFormat.apply(f,l):P:e,g=u.selectAll(".tick").data(p,f),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",kt),m=t.transition(g.exit()).style("opacity",kt).remove(),y=t.transition(g.order()).style("opacity",1),x=Math.max(i,0)+s,b=fo(f),_=u.selectAll(".domain").data([0]),w=(_.enter().append("path").attr("class","domain"),t.transition(_));v.append("line"),v.append("text");var k,T,M,A,S=v.select("line"),E=y.select("line"),L=g.select("text").text(d),C=v.select("text"),O=y.select("text"),z="top"===a||"left"===a?-1:1;if("bottom"===a||"top"===a?(n=As,k="x",M="y",T="x2",A="y2",L.attr("dy",z<0?"0em":".71em").style("text-anchor","middle"),w.attr("d","M"+b[0]+","+z*o+"V0H"+b[1]+"V"+z*o)):(n=Ss,k="y",M="x",T="y2",A="x2",L.attr("dy",".32em").style("text-anchor",z<0?"end":"start"),w.attr("d","M"+z*o+","+b[0]+"H0V"+b[1]+"H"+z*o)),S.attr(A,z*i),C.attr(M,z*x),E.attr(T,0).attr(A,z*i),O.attr(k,0).attr(M,z*x),f.rangeBand){var I=f,D=I.rangeBand()/2;h=f=function(t){return I(t)+D}}else h.rangeBand?h=f:m.call(n,f,h);v.call(n,h,f),y.call(n,f,f)})}return u.scale=function(t){return arguments.length?(r=t,u):r},u.orient=function(t){return arguments.length?(a=t in Ms?t+"":Ts,u):a},u.ticks=function(){return arguments.length?(l=n(arguments),u):l},u.tickValues=function(t){return arguments.length?(c=t,u):c},u.tickFormat=function(t){return arguments.length?(e=t,u):e},u.tickSize=function(t){var e=arguments.length;return e?(i=+t,o=+arguments[e-1],u):i},u.innerTickSize=function(t){return arguments.length?(i=+t,u):i},u.outerTickSize=function(t){return arguments.length?(o=+t,u):o},u.tickPadding=function(t){return arguments.length?(s=+t,u):s},u.tickSubdivide=function(){return arguments.length&&u},u};var Ts="bottom",Ms={top:1,right:1,bottom:1,left:1};function As(t,e,r){t.attr("transform",function(t){var n=e(t);return"translate("+(isFinite(n)?n:r(t))+",0)"})}function Ss(t,e,r){t.attr("transform",function(t){var n=e(t);return"translate(0,"+(isFinite(n)?n:r(t))+")"})}t.svg.brush=function(){var e,r,n=j(f,"brushstart","brush","brushend"),a=null,i=null,s=[0,0],l=[0,0],c=!0,u=!0,h=Ls[0];function f(e){e.each(function(){var e=t.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",v).on("touchstart.brush",v),r=e.selectAll(".background").data([0]);r.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),e.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var n=e.selectAll(".resize").data(h,P);n.exit().remove(),n.enter().append("g").attr("class",function(t){return"resize "+t}).style("cursor",function(t){return Es[t]}).append("rect").attr("x",function(t){return/[ew]$/.test(t)?-3:null}).attr("y",function(t){return/^[ns]/.test(t)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),n.style("display",f.empty()?"none":null);var o,s=t.transition(e),l=t.transition(r);a&&(o=fo(a),l.attr("x",o[0]).attr("width",o[1]-o[0]),d(s)),i&&(o=fo(i),l.attr("y",o[0]).attr("height",o[1]-o[0]),g(s)),p(s)})}function p(t){t.selectAll(".resize").attr("transform",function(t){return"translate("+s[+/e$/.test(t)]+","+l[+/^s/.test(t)]+")"})}function d(t){t.select(".extent").attr("x",s[0]),t.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function g(t){t.select(".extent").attr("y",l[0]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",l[1]-l[0])}function v(){var h,v,m=this,y=t.select(t.event.target),x=n.of(m,arguments),b=t.select(m),_=y.datum(),w=!/^(n|s)$/.test(_)&&a,k=!/^(e|w)$/.test(_)&&i,T=y.classed("extent"),M=xt(m),A=t.mouse(m),S=t.select(o(m)).on("keydown.brush",function(){32==t.event.keyCode&&(T||(h=null,A[0]-=s[1],A[1]-=l[1],T=2),B())}).on("keyup.brush",function(){32==t.event.keyCode&&2==T&&(A[0]+=s[1],A[1]+=l[1],T=0,B())});if(t.event.changedTouches?S.on("touchmove.brush",C).on("touchend.brush",O):S.on("mousemove.brush",C).on("mouseup.brush",O),b.interrupt().selectAll("*").interrupt(),T)A[0]=s[0]-A[0],A[1]=l[0]-A[1];else if(_){var E=+/w$/.test(_),L=+/^n/.test(_);v=[s[1-E]-A[0],l[1-L]-A[1]],A[0]=s[E],A[1]=l[L]}else t.event.altKey&&(h=A.slice());function C(){var e=t.mouse(m),r=!1;v&&(e[0]+=v[0],e[1]+=v[1]),T||(t.event.altKey?(h||(h=[(s[0]+s[1])/2,(l[0]+l[1])/2]),A[0]=s[+(e[0]<h[0])],A[1]=l[+(e[1]<h[1])]):h=null),w&&P(e,a,0)&&(d(b),r=!0),k&&P(e,i,1)&&(g(b),r=!0),r&&(p(b),x({type:"brush",mode:T?"move":"resize"}))}function P(t,n,a){var i,o,f=fo(n),p=f[0],d=f[1],g=A[a],v=a?l:s,m=v[1]-v[0];if(T&&(p-=g,d-=m+g),i=(a?u:c)?Math.max(p,Math.min(d,t[a])):t[a],T?o=(i+=g)+m:(h&&(g=Math.max(p,Math.min(d,2*h[a]-i))),g<i?(o=i,i=g):o=g),v[0]!=i||v[1]!=o)return a?r=null:e=null,v[0]=i,v[1]=o,!0}function O(){C(),b.style("pointer-events","all").selectAll(".resize").style("display",f.empty()?"none":null),t.select("body").style("cursor",null),S.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),M(),x({type:"brushend"})}b.style("pointer-events","none").selectAll(".resize").style("display",null),t.select("body").style("cursor",y.style("cursor")),x({type:"brushstart"}),C()}return f.event=function(a){a.each(function(){var a=n.of(this,arguments),i={x:s,y:l,i:e,j:r},o=this.__chart__||i;this.__chart__=i,vs?t.select(this).transition().each("start.brush",function(){e=o.i,r=o.j,s=o.x,l=o.y,a({type:"brushstart"})}).tween("brush:brush",function(){var t=Qa(s,i.x),n=Qa(l,i.y);return e=r=null,function(e){s=i.x=t(e),l=i.y=n(e),a({type:"brush",mode:"resize"})}}).each("end.brush",function(){e=i.i,r=i.j,a({type:"brush",mode:"resize"}),a({type:"brushend"})}):(a({type:"brushstart"}),a({type:"brush",mode:"resize"}),a({type:"brushend"}))})},f.x=function(t){return arguments.length?(h=Ls[!(a=t)<<1|!i],f):a},f.y=function(t){return arguments.length?(h=Ls[!a<<1|!(i=t)],f):i},f.clamp=function(t){return arguments.length?(a&&i?(c=!!t[0],u=!!t[1]):a?c=!!t:i&&(u=!!t),f):a&&i?[c,u]:a?c:i?u:null},f.extent=function(t){var n,o,c,u,h;return arguments.length?(a&&(n=t[0],o=t[1],i&&(n=n[0],o=o[0]),e=[n,o],a.invert&&(n=a(n),o=a(o)),o<n&&(h=n,n=o,o=h),n==s[0]&&o==s[1]||(s=[n,o])),i&&(c=t[0],u=t[1],a&&(c=c[1],u=u[1]),r=[c,u],i.invert&&(c=i(c),u=i(u)),u<c&&(h=c,c=u,u=h),c==l[0]&&u==l[1]||(l=[c,u])),f):(a&&(e?(n=e[0],o=e[1]):(n=s[0],o=s[1],a.invert&&(n=a.invert(n),o=a.invert(o)),o<n&&(h=n,n=o,o=h))),i&&(r?(c=r[0],u=r[1]):(c=l[0],u=l[1],i.invert&&(c=i.invert(c),u=i.invert(u)),u<c&&(h=c,c=u,u=h))),a&&i?[[n,c],[o,u]]:a?[n,o]:i&&[c,u])},f.clear=function(){return f.empty()||(s=[0,0],l=[0,0],e=r=null),f},f.empty=function(){return!!a&&s[0]==s[1]||!!i&&l[0]==l[1]},t.rebind(f,n,"on")};var Es={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Ls=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Cs=Ie.format=cr.timeFormat,Ps=Cs.utc,Os=Ps("%Y-%m-%dT%H:%M:%S.%LZ");function zs(t){return t.toISOString()}function Is(e,r,n){function a(t){return e(t)}function i(e,n){var a=(e[1]-e[0])/n,i=t.bisect(Rs,a);return i==Rs.length?[r.year,_o(e.map(function(t){return t/31536e6}),n)[2]]:i?r[a/Rs[i-1]<Rs[i]/a?i-1:i]:[Ns,_o(e,n)[2]]}return a.invert=function(t){return Ds(e.invert(t))},a.domain=function(t){return arguments.length?(e.domain(t),a):e.domain().map(Ds)},a.nice=function(t,e){var r=a.domain(),n=ho(r),o=null==t?i(n,10):"number"==typeof t&&i(n,t);function s(r){return!isNaN(r)&&!t.range(r,Ds(+r+1),e).length}return o&&(t=o[0],e=o[1]),a.domain(go(r,e>1?{floor:function(e){for(;s(e=t.floor(e));)e=Ds(e-1);return e},ceil:function(e){for(;s(e=t.ceil(e));)e=Ds(+e+1);return e}}:t))},a.ticks=function(t,e){var r=ho(a.domain()),n=null==t?i(r,10):"number"==typeof t?i(r,t):!t.range&&[{range:t},e];return n&&(t=n[0],e=n[1]),t.range(r[0],Ds(+r[1]+1),e<1?1:e)},a.tickFormat=function(){return n},a.copy=function(){return Is(e.copy(),r,n)},xo(a,e)}function Ds(t){return new Date(t)}Cs.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?zs:Os,zs.parse=function(t){var e=new Date(t);return isNaN(e)?null:e},zs.toString=Os.toString,Ie.second=Be(function(t){return new De(1e3*Math.floor(t/1e3))},function(t,e){t.setTime(t.getTime()+1e3*Math.floor(e))},function(t){return t.getSeconds()}),Ie.seconds=Ie.second.range,Ie.seconds.utc=Ie.second.utc.range,Ie.minute=Be(function(t){return new De(6e4*Math.floor(t/6e4))},function(t,e){t.setTime(t.getTime()+6e4*Math.floor(e))},function(t){return t.getMinutes()}),Ie.minutes=Ie.minute.range,Ie.minutes.utc=Ie.minute.utc.range,Ie.hour=Be(function(t){var e=t.getTimezoneOffset()/60;return new De(36e5*(Math.floor(t/36e5-e)+e))},function(t,e){t.setTime(t.getTime()+36e5*Math.floor(e))},function(t){return t.getHours()}),Ie.hours=Ie.hour.range,Ie.hours.utc=Ie.hour.utc.range,Ie.month=Be(function(t){return(t=Ie.day(t)).setDate(1),t},function(t,e){t.setMonth(t.getMonth()+e)},function(t){return t.getMonth()}),Ie.months=Ie.month.range,Ie.months.utc=Ie.month.utc.range;var Rs=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Fs=[[Ie.second,1],[Ie.second,5],[Ie.second,15],[Ie.second,30],[Ie.minute,1],[Ie.minute,5],[Ie.minute,15],[Ie.minute,30],[Ie.hour,1],[Ie.hour,3],[Ie.hour,6],[Ie.hour,12],[Ie.day,1],[Ie.day,2],[Ie.week,1],[Ie.month,1],[Ie.month,3],[Ie.year,1]],Bs=Cs.multi([[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["%I:%M",function(t){return t.getMinutes()}],["%I %p",function(t){return t.getHours()}],["%a %d",function(t){return t.getDay()&&1!=t.getDate()}],["%b %d",function(t){return 1!=t.getDate()}],["%B",function(t){return t.getMonth()}],["%Y",Xr]]),Ns={range:function(e,r,n){return t.range(Math.ceil(e/n)*n,+r,n).map(Ds)},floor:P,ceil:P};Fs.year=Ie.year,Ie.scale=function(){return Is(t.scale.linear(),Fs,Bs)};var js=Fs.map(function(t){return[t[0].utc,t[1]]}),Vs=Ps.multi([[".%L",function(t){return t.getUTCMilliseconds()}],[":%S",function(t){return t.getUTCSeconds()}],["%I:%M",function(t){return t.getUTCMinutes()}],["%I %p",function(t){return t.getUTCHours()}],["%a %d",function(t){return t.getUTCDay()&&1!=t.getUTCDate()}],["%b %d",function(t){return 1!=t.getUTCDate()}],["%B",function(t){return t.getUTCMonth()}],["%Y",Xr]]);function Us(t){return JSON.parse(t.responseText)}function qs(t){var e=a.createRange();return e.selectNode(a.body),e.createContextualFragment(t.responseText)}js.year=Ie.year.utc,Ie.scale.utc=function(){return Is(t.scale.linear(),js,Vs)},t.text=me(function(t){return t.responseText}),t.json=function(t,e){return ye(t,"application/json",Us,e)},t.html=function(t,e){return ye(t,"text/html",qs,e)},t.xml=me(function(t){return t.responseXML}),"object"==typeof e&&e.exports?e.exports=t:this.d3=t}()},{}],166:[function(t,e,r){e.exports=function(){for(var t=0;t<arguments.length;t++)if(void 0!==arguments[t])return arguments[t]}},{}],167:[function(t,e,r){"use strict";var n=t("incremental-convex-hull"),a=t("uniq");function i(t,e){this.point=t,this.index=e}function o(t,e){for(var r=t.point,n=e.point,a=r.length,i=0;i<a;++i){var o=n[i]-r[i];if(o)return o}return 0}e.exports=function(t,e){var r=t.length;if(0===r)return[];var s=t[0].length;if(s<1)return[];if(1===s)return function(t,e,r){if(1===t)return r?[[-1,0]]:[];var n=e.map(function(t,e){return[t[0],e]});n.sort(function(t,e){return t[0]-e[0]});for(var a=new Array(t-1),i=1;i<t;++i){var o=n[i-1],s=n[i];a[i-1]=[o[1],s[1]]}r&&a.push([-1,a[0][1]],[a[t-1][1],-1]);return a}(r,t,e);for(var l=new Array(r),c=1,u=0;u<r;++u){for(var h=t[u],f=new Array(s+1),p=0,d=0;d<s;++d){var g=h[d];f[d]=g,p+=g*g}f[s]=p,l[u]=new i(f,u),c=Math.max(p,c)}a(l,o),r=l.length;for(var v=new Array(r+s+1),m=new Array(r+s+1),y=(s+1)*(s+1)*c,x=new Array(s+1),u=0;u<=s;++u)x[u]=0;x[s]=y,v[0]=x.slice(),m[0]=-1;for(var u=0;u<=s;++u){var f=x.slice();f[u]=1,v[u+1]=f,m[u+1]=-1}for(var u=0;u<r;++u){var b=l[u];v[u+s+1]=b.point,m[u+s+1]=b.index}var _=n(v,!1);_=e?_.filter(function(t){for(var e=0,r=0;r<=s;++r){var n=m[t[r]];if(n<0&&++e>=2)return!1;t[r]=n}return!0}):_.filter(function(t){for(var e=0;e<=s;++e){var r=m[t[e]];if(r<0)return!1;t[e]=r}return!0});if(1&s)for(var u=0;u<_.length;++u){var b=_[u],f=b[0];b[0]=b[1],b[1]=f}return _}},{"incremental-convex-hull":414,uniq:545}],168:[function(t,e,r){"use strict";e.exports=i;var n=(i.canvas=document.createElement("canvas")).getContext("2d"),a=o([32,126]);function i(t,e){Array.isArray(t)&&(t=t.join(", "));var r,i={},s=16,l=.05;e&&(2===e.length&&"number"==typeof e[0]?r=o(e):Array.isArray(e)?r=e:(e.o?r=o(e.o):e.pairs&&(r=e.pairs),e.fontSize&&(s=e.fontSize),null!=e.threshold&&(l=e.threshold))),r||(r=a),n.font=s+"px "+t;for(var c=0;c<r.length;c++){var u=r[c],h=n.measureText(u[0]).width+n.measureText(u[1]).width,f=n.measureText(u).width;if(Math.abs(h-f)>s*l){var p=(f-h)/s;i[u]=1e3*p}}return i}function o(t){for(var e=[],r=t[0];r<=t[1];r++)for(var n=String.fromCharCode(r),a=t[0];a<t[1];a++){var i=n+String.fromCharCode(a);e.push(i)}return e}i.createPairs=o,i.ascii=a},{}],169:[function(t,e,r){(function(t){var r=!1;if("undefined"!=typeof Float64Array){var n=new Float64Array(1),a=new Uint32Array(n.buffer);if(n[0]=1,r=!0,1072693248===a[1]){e.exports=function(t){return n[0]=t,[a[0],a[1]]},e.exports.pack=function(t,e){return a[0]=t,a[1]=e,n[0]},e.exports.lo=function(t){return n[0]=t,a[0]},e.exports.hi=function(t){return n[0]=t,a[1]}}else if(1072693248===a[0]){e.exports=function(t){return n[0]=t,[a[1],a[0]]},e.exports.pack=function(t,e){return a[1]=t,a[0]=e,n[0]},e.exports.lo=function(t){return n[0]=t,a[1]},e.exports.hi=function(t){return n[0]=t,a[0]}}else r=!1}if(!r){var i=new t(8);e.exports=function(t){return i.writeDoubleLE(t,0,!0),[i.readUInt32LE(0,!0),i.readUInt32LE(4,!0)]},e.exports.pack=function(t,e){return i.writeUInt32LE(t,0,!0),i.writeUInt32LE(e,4,!0),i.readDoubleLE(0,!0)},e.exports.lo=function(t){return i.writeDoubleLE(t,0,!0),i.readUInt32LE(0,!0)},e.exports.hi=function(t){return i.writeDoubleLE(t,0,!0),i.readUInt32LE(4,!0)}}e.exports.sign=function(t){return e.exports.hi(t)>>>31},e.exports.exponent=function(t){return(e.exports.hi(t)<<1>>>21)-1023},e.exports.fraction=function(t){var r=e.exports.lo(t),n=e.exports.hi(t),a=1048575&n;return 2146435072&n&&(a+=1<<20),[r,a]},e.exports.denormalized=function(t){return!(2146435072&e.exports.hi(t))}}).call(this,t("buffer").Buffer)},{buffer:107}],170:[function(t,e,r){var n=t("abs-svg-path"),a=t("normalize-svg-path"),i={M:"moveTo",C:"bezierCurveTo"};e.exports=function(t,e){t.beginPath(),a(n(e)).forEach(function(e){var r=e[0],n=e.slice(1);t[i[r]].apply(t,n)}),t.closePath()}},{"abs-svg-path":63,"normalize-svg-path":453}],171:[function(t,e,r){e.exports=function(t){switch(t){case"int8":return Int8Array;case"int16":return Int16Array;case"int32":return Int32Array;case"uint8":return Uint8Array;case"uint16":return Uint16Array;case"uint32":return Uint32Array;case"float32":return Float32Array;case"float64":return Float64Array;case"array":return Array;case"uint8_clamped":return Uint8ClampedArray}}},{}],172:[function(t,e,r){"use strict";e.exports=function(t,e){switch("undefined"==typeof e&&(e=0),typeof t){case"number":if(t>0)return function(t,e){var r,n;for(r=new Array(t),n=0;n<t;++n)r[n]=e;return r}(0|t,e);break;case"object":if("number"==typeof t.length)return function t(e,r,n){var a=0|e[n];if(a<=0)return[];var i,o=new Array(a);if(n===e.length-1)for(i=0;i<a;++i)o[i]=r;else for(i=0;i<a;++i)o[i]=t(e,r,n+1);return o}(t,e,0)}return[]}},{}],173:[function(t,e,r){"use strict";function n(t,e,r){r=r||2;var n,s,l,c,u,p,d,v=e&&e.length,m=v?e[0]*r:t.length,y=a(t,0,m,r,!0),x=[];if(!y||y.next===y.prev)return x;if(v&&(y=function(t,e,r,n){var o,s,l,c,u,p=[];for(o=0,s=e.length;o<s;o++)l=e[o]*n,c=o<s-1?e[o+1]*n:t.length,(u=a(t,l,c,n,!1))===u.next&&(u.steiner=!0),p.push(g(u));for(p.sort(h),o=0;o<p.length;o++)f(p[o],r),r=i(r,r.next);return r}(t,e,y,r)),t.length>80*r){n=l=t[0],s=c=t[1];for(var b=r;b<m;b+=r)(u=t[b])<n&&(n=u),(p=t[b+1])<s&&(s=p),u>l&&(l=u),p>c&&(c=p);d=0!==(d=Math.max(l-n,c-s))?1/d:0}return o(y,x,r,n,s,d),x}function a(t,e,r,n,a){var i,o;if(a===E(t,e,r,n)>0)for(i=e;i<r;i+=n)o=M(i,t[i],t[i+1],o);else for(i=r-n;i>=e;i-=n)o=M(i,t[i],t[i+1],o);return o&&x(o,o.next)&&(A(o),o=o.next),o}function i(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!x(n,n.next)&&0!==y(n.prev,n,n.next))n=n.next;else{if(A(n),(n=e=n.prev)===n.next)break;r=!0}}while(r||n!==e);return e}function o(t,e,r,n,a,h,f){if(t){!f&&h&&function(t,e,r,n){var a=t;do{null===a.z&&(a.z=d(a.x,a.y,e,r,n)),a.prevZ=a.prev,a.nextZ=a.next,a=a.next}while(a!==t);a.prevZ.nextZ=null,a.prevZ=null,function(t){var e,r,n,a,i,o,s,l,c=1;do{for(r=t,t=null,i=null,o=0;r;){for(o++,n=r,s=0,e=0;e<c&&(s++,n=n.nextZ);e++);for(l=c;s>0||l>0&&n;)0!==s&&(0===l||!n||r.z<=n.z)?(a=r,r=r.nextZ,s--):(a=n,n=n.nextZ,l--),i?i.nextZ=a:t=a,a.prevZ=i,i=a;r=n}i.nextZ=null,c*=2}while(o>1)}(a)}(t,n,a,h);for(var p,g,v=t;t.prev!==t.next;)if(p=t.prev,g=t.next,h?l(t,n,a,h):s(t))e.push(p.i/r),e.push(t.i/r),e.push(g.i/r),A(t),t=g.next,v=g.next;else if((t=g)===v){f?1===f?o(t=c(i(t),e,r),e,r,n,a,h,2):2===f&&u(t,e,r,n,a,h):o(i(t),e,r,n,a,h,1);break}}}function s(t){var e=t.prev,r=t,n=t.next;if(y(e,r,n)>=0)return!1;for(var a=t.next.next;a!==t.prev;){if(v(e.x,e.y,r.x,r.y,n.x,n.y,a.x,a.y)&&y(a.prev,a,a.next)>=0)return!1;a=a.next}return!0}function l(t,e,r,n){var a=t.prev,i=t,o=t.next;if(y(a,i,o)>=0)return!1;for(var s=a.x<i.x?a.x<o.x?a.x:o.x:i.x<o.x?i.x:o.x,l=a.y<i.y?a.y<o.y?a.y:o.y:i.y<o.y?i.y:o.y,c=a.x>i.x?a.x>o.x?a.x:o.x:i.x>o.x?i.x:o.x,u=a.y>i.y?a.y>o.y?a.y:o.y:i.y>o.y?i.y:o.y,h=d(s,l,e,r,n),f=d(c,u,e,r,n),p=t.prevZ,g=t.nextZ;p&&p.z>=h&&g&&g.z<=f;){if(p!==t.prev&&p!==t.next&&v(a.x,a.y,i.x,i.y,o.x,o.y,p.x,p.y)&&y(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,g!==t.prev&&g!==t.next&&v(a.x,a.y,i.x,i.y,o.x,o.y,g.x,g.y)&&y(g.prev,g,g.next)>=0)return!1;g=g.nextZ}for(;p&&p.z>=h;){if(p!==t.prev&&p!==t.next&&v(a.x,a.y,i.x,i.y,o.x,o.y,p.x,p.y)&&y(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;g&&g.z<=f;){if(g!==t.prev&&g!==t.next&&v(a.x,a.y,i.x,i.y,o.x,o.y,g.x,g.y)&&y(g.prev,g,g.next)>=0)return!1;g=g.nextZ}return!0}function c(t,e,r){var n=t;do{var a=n.prev,o=n.next.next;!x(a,o)&&b(a,n,n.next,o)&&k(a,o)&&k(o,a)&&(e.push(a.i/r),e.push(n.i/r),e.push(o.i/r),A(n),A(n.next),n=t=o),n=n.next}while(n!==t);return i(n)}function u(t,e,r,n,a,s){var l=t;do{for(var c=l.next.next;c!==l.prev;){if(l.i!==c.i&&m(l,c)){var u=T(l,c);return l=i(l,l.next),u=i(u,u.next),o(l,e,r,n,a,s),void o(u,e,r,n,a,s)}c=c.next}l=l.next}while(l!==t)}function h(t,e){return t.x-e.x}function f(t,e){if(e=function(t,e){var r,n=e,a=t.x,i=t.y,o=-1/0;do{if(i<=n.y&&i>=n.next.y&&n.next.y!==n.y){var s=n.x+(i-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=a&&s>o){if(o=s,s===a){if(i===n.y)return n;if(i===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(a===o)return r;var l,c=r,u=r.x,h=r.y,f=1/0;n=r;do{a>=n.x&&n.x>=u&&a!==n.x&&v(i<h?a:o,i,u,h,i<h?o:a,i,n.x,n.y)&&(l=Math.abs(i-n.y)/(a-n.x),k(n,t)&&(l<f||l===f&&(n.x>r.x||n.x===r.x&&p(r,n)))&&(r=n,f=l)),n=n.next}while(n!==c);return r}(t,e)){var r=T(e,t);i(r,r.next)}}function p(t,e){return y(t.prev,t,e.prev)<0&&y(e.next,t,t.next)<0}function d(t,e,r,n,a){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*a)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*a)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function g(t){var e=t,r=t;do{(e.x<r.x||e.x===r.x&&e.y<r.y)&&(r=e),e=e.next}while(e!==t);return r}function v(t,e,r,n,a,i,o,s){return(a-o)*(e-s)-(t-o)*(i-s)>=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(i-s)-(a-o)*(n-s)>=0}function m(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&b(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}(t,e)&&(k(t,e)&&k(e,t)&&function(t,e){var r=t,n=!1,a=(t.x+e.x)/2,i=(t.y+e.y)/2;do{r.y>i!=r.next.y>i&&r.next.y!==r.y&&a<(r.next.x-r.x)*(i-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}(t,e)&&(y(t.prev,t,e.prev)||y(t,e.prev,e))||x(t,e)&&y(t.prev,t,t.next)>0&&y(e.prev,e,e.next)>0)}function y(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function x(t,e){return t.x===e.x&&t.y===e.y}function b(t,e,r,n){var a=w(y(t,e,r)),i=w(y(t,e,n)),o=w(y(r,n,t)),s=w(y(r,n,e));return a!==i&&o!==s||(!(0!==a||!_(t,r,e))||(!(0!==i||!_(t,n,e))||(!(0!==o||!_(r,t,n))||!(0!==s||!_(r,e,n)))))}function _(t,e,r){return e.x<=Math.max(t.x,r.x)&&e.x>=Math.min(t.x,r.x)&&e.y<=Math.max(t.y,r.y)&&e.y>=Math.min(t.y,r.y)}function w(t){return t>0?1:t<0?-1:0}function k(t,e){return y(t.prev,t,t.next)<0?y(t,e,t.next)>=0&&y(t,t.prev,e)>=0:y(t,e,t.prev)<0||y(t,t.next,e)<0}function T(t,e){var r=new S(t.i,t.x,t.y),n=new S(e.i,e.x,e.y),a=t.next,i=e.prev;return t.next=e,e.prev=t,r.next=a,a.prev=r,n.next=r,r.prev=n,i.next=n,n.prev=i,n}function M(t,e,r,n){var a=new S(t,e,r);return n?(a.next=n.next,a.prev=n,n.next.prev=a,n.next=a):(a.prev=a,a.next=a),a}function A(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function S(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function E(t,e,r,n){for(var a=0,i=e,o=r-n;i<r;i+=n)a+=(t[o]-t[i])*(t[i+1]+t[o+1]),o=i;return a}e.exports=n,e.exports.default=n,n.deviation=function(t,e,r,n){var a=e&&e.length,i=a?e[0]*r:t.length,o=Math.abs(E(t,0,i,r));if(a)for(var s=0,l=e.length;s<l;s++){var c=e[s]*r,u=s<l-1?e[s+1]*r:t.length;o-=Math.abs(E(t,c,u,r))}var h=0;for(s=0;s<n.length;s+=3){var f=n[s]*r,p=n[s+1]*r,d=n[s+2]*r;h+=Math.abs((t[f]-t[d])*(t[p+1]-t[f+1])-(t[f]-t[p])*(t[d+1]-t[f+1]))}return 0===o&&0===h?0:Math.abs((h-o)/o)},n.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},n=0,a=0;a<t.length;a++){for(var i=0;i<t[a].length;i++)for(var o=0;o<e;o++)r.vertices.push(t[a][i][o]);a>0&&(n+=t[a-1].length,r.holes.push(n))}return r}},{}],174:[function(t,e,r){"use strict";e.exports=function(t,e){var r=t.length;if("number"!=typeof e){e=0;for(var a=0;a<r;++a){var i=t[a];e=Math.max(e,i[0],i[1])}e=1+(0|e)}e|=0;for(var o=new Array(e),a=0;a<e;++a)o[a]=[];for(var a=0;a<r;++a){var i=t[a];o[i[0]].push(i[1]),o[i[1]].push(i[0])}for(var s=0;s<e;++s)n(o[s],function(t,e){return t-e});return o};var n=t("uniq")},{uniq:545}],175:[function(t,e,r){var n=t("strongly-connected-components");e.exports=function(t){var e,r=[],a=[],i=[],o={},s=[];function l(t){var r,n,u=!1;for(a.push(t),i[t]=!0,r=0;r<s[t].length;r++)(n=s[t][r])===e?(c(e,a),u=!0):i[n]||(u=l(n));if(u)!function t(e){i[e]=!1,o.hasOwnProperty(e)&&Object.keys(o[e]).forEach(function(r){delete o[e][r],i[r]&&t(r)})}(t);else for(r=0;r<s[t].length;r++){n=s[t][r];var h=o[n];h||(h={},o[n]=h),h[n]=!0}return a.pop(),u}function c(t,e){var n=[].concat(e).concat(t);r.push(n)}function u(e){!function(e){for(var r=0;r<t.length;r++)r<e&&(t[r]=[]),t[r]=t[r].filter(function(t){return t>=e})}(e);for(var r,a=n(t).components.filter(function(t){return t.length>1}),i=1/0,o=0;o<a.length;o++)for(var s=0;s<a[o].length;s++)a[o][s]<i&&(i=a[o][s],r=o);var l=a[r];return!!l&&{leastVertex:i,adjList:t.map(function(t,e){return-1===l.indexOf(e)?[]:t.filter(function(t){return-1!==l.indexOf(t)})})}}e=0;for(var h=t.length;e<h;){var f=u(e);if(e=f.leastVertex,s=f.adjList){for(var p=0;p<s.length;p++)for(var d=0;d<s[p].length;d++){var g=s[p][d];i[+g]=!1,o[g]={}}l(e),e+=1}else e=h}return r}},{"strongly-connected-components":528}],176:[function(t,e,r){"use strict";var n=t("../../object/valid-value");e.exports=function(){return n(this).length=0,this}},{"../../object/valid-value":208}],177:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?Array.from:t("./shim")},{"./is-implemented":178,"./shim":179}],178:[function(t,e,r){"use strict";e.exports=function(){var t,e,r=Array.from;return"function"==typeof r&&(e=r(t=["raz","dwa"]),Boolean(e&&e!==t&&"dwa"===e[1]))}},{}],179:[function(t,e,r){"use strict";var n=t("es6-symbol").iterator,a=t("../../function/is-arguments"),i=t("../../function/is-function"),o=t("../../number/to-pos-integer"),s=t("../../object/valid-callable"),l=t("../../object/valid-value"),c=t("../../object/is-value"),u=t("../../string/is-string"),h=Array.isArray,f=Function.prototype.call,p={configurable:!0,enumerable:!0,writable:!0,value:null},d=Object.defineProperty;e.exports=function(t){var e,r,g,v,m,y,x,b,_,w,k=arguments[1],T=arguments[2];if(t=Object(l(t)),c(k)&&s(k),this&&this!==Array&&i(this))e=this;else{if(!k){if(a(t))return 1!==(m=t.length)?Array.apply(null,t):((v=new Array(1))[0]=t[0],v);if(h(t)){for(v=new Array(m=t.length),r=0;r<m;++r)v[r]=t[r];return v}}v=[]}if(!h(t))if(void 0!==(_=t[n])){for(x=s(_).call(t),e&&(v=new e),b=x.next(),r=0;!b.done;)w=k?f.call(k,T,b.value,r):b.value,e?(p.value=w,d(v,r,p)):v[r]=w,b=x.next(),++r;m=r}else if(u(t)){for(m=t.length,e&&(v=new e),r=0,g=0;r<m;++r)w=t[r],r+1<m&&(y=w.charCodeAt(0))>=55296&&y<=56319&&(w+=t[++r]),w=k?f.call(k,T,w,g):w,e?(p.value=w,d(v,g,p)):v[g]=w,++g;m=g}if(void 0===m)for(m=o(t.length),e&&(v=new e(m)),r=0;r<m;++r)w=k?f.call(k,T,t[r],r):t[r],e?(p.value=w,d(v,r,p)):v[r]=w;return e&&(p.value=null,v.length=m),v}},{"../../function/is-arguments":180,"../../function/is-function":181,"../../number/to-pos-integer":187,"../../object/is-value":197,"../../object/valid-callable":206,"../../object/valid-value":208,"../../string/is-string":212,"es6-symbol":222}],180:[function(t,e,r){"use strict";var n=Object.prototype.toString,a=n.call(function(){return arguments}());e.exports=function(t){return n.call(t)===a}},{}],181:[function(t,e,r){"use strict";var n=Object.prototype.toString,a=n.call(t("./noop"));e.exports=function(t){return"function"==typeof t&&n.call(t)===a}},{"./noop":182}],182:[function(t,e,r){"use strict";e.exports=function(){}},{}],183:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?Math.sign:t("./shim")},{"./is-implemented":184,"./shim":185}],184:[function(t,e,r){"use strict";e.exports=function(){var t=Math.sign;return"function"==typeof t&&(1===t(10)&&-1===t(-20))}},{}],185:[function(t,e,r){"use strict";e.exports=function(t){return t=Number(t),isNaN(t)||0===t?t:t>0?1:-1}},{}],186:[function(t,e,r){"use strict";var n=t("../math/sign"),a=Math.abs,i=Math.floor;e.exports=function(t){return isNaN(t)?0:0!==(t=Number(t))&&isFinite(t)?n(t)*i(a(t)):t}},{"../math/sign":183}],187:[function(t,e,r){"use strict";var n=t("./to-integer"),a=Math.max;e.exports=function(t){return a(0,n(t))}},{"./to-integer":186}],188:[function(t,e,r){"use strict";var n=t("./valid-callable"),a=t("./valid-value"),i=Function.prototype.bind,o=Function.prototype.call,s=Object.keys,l=Object.prototype.propertyIsEnumerable;e.exports=function(t,e){return function(r,c){var u,h=arguments[2],f=arguments[3];return r=Object(a(r)),n(c),u=s(r),f&&u.sort("function"==typeof f?i.call(f,r):void 0),"function"!=typeof t&&(t=u[t]),o.call(t,u,function(t,n){return l.call(r,t)?o.call(c,h,r[t],t,r,n):e})}}},{"./valid-callable":206,"./valid-value":208}],189:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?Object.assign:t("./shim")},{"./is-implemented":190,"./shim":191}],190:[function(t,e,r){"use strict";e.exports=function(){var t,e=Object.assign;return"function"==typeof e&&(e(t={foo:"raz"},{bar:"dwa"},{trzy:"trzy"}),t.foo+t.bar+t.trzy==="razdwatrzy")}},{}],191:[function(t,e,r){"use strict";var n=t("../keys"),a=t("../valid-value"),i=Math.max;e.exports=function(t,e){var r,o,s,l=i(arguments.length,2);for(t=Object(a(t)),s=function(n){try{t[n]=e[n]}catch(t){r||(r=t)}},o=1;o<l;++o)e=arguments[o],n(e).forEach(s);if(void 0!==r)throw r;return t}},{"../keys":198,"../valid-value":208}],192:[function(t,e,r){"use strict";var n=t("../array/from"),a=t("./assign"),i=t("./valid-value");e.exports=function(t){var e=Object(i(t)),r=arguments[1],o=Object(arguments[2]);if(e!==t&&!r)return e;var s={};return r?n(r,function(e){(o.ensure||e in t)&&(s[e]=t[e])}):a(s,t),s}},{"../array/from":177,"./assign":189,"./valid-value":208}],193:[function(t,e,r){"use strict";var n,a,i,o,s=Object.create;t("./set-prototype-of/is-implemented")()||(n=t("./set-prototype-of/shim")),e.exports=n?1!==n.level?s:(a={},i={},o={configurable:!1,enumerable:!1,writable:!0,value:void 0},Object.getOwnPropertyNames(Object.prototype).forEach(function(t){i[t]="__proto__"!==t?o:{configurable:!0,enumerable:!1,writable:!0,value:void 0}}),Object.defineProperties(a,i),Object.defineProperty(n,"nullPolyfill",{configurable:!1,enumerable:!1,writable:!1,value:a}),function(t,e){return s(null===t?a:t,e)}):s},{"./set-prototype-of/is-implemented":204,"./set-prototype-of/shim":205}],194:[function(t,e,r){"use strict";e.exports=t("./_iterate")("forEach")},{"./_iterate":188}],195:[function(t,e,r){"use strict";e.exports=function(t){return"function"==typeof t}},{}],196:[function(t,e,r){"use strict";var n=t("./is-value"),a={function:!0,object:!0};e.exports=function(t){return n(t)&&a[typeof t]||!1}},{"./is-value":197}],197:[function(t,e,r){"use strict";var n=t("../function/noop")();e.exports=function(t){return t!==n&&null!==t}},{"../function/noop":182}],198:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?Object.keys:t("./shim")},{"./is-implemented":199,"./shim":200}],199:[function(t,e,r){"use strict";e.exports=function(){try{return Object.keys("primitive"),!0}catch(t){return!1}}},{}],200:[function(t,e,r){"use strict";var n=t("../is-value"),a=Object.keys;e.exports=function(t){return a(n(t)?Object(t):t)}},{"../is-value":197}],201:[function(t,e,r){"use strict";var n=t("./valid-callable"),a=t("./for-each"),i=Function.prototype.call;e.exports=function(t,e){var r={},o=arguments[2];return n(e),a(t,function(t,n,a,s){r[n]=i.call(e,o,t,n,a,s)}),r}},{"./for-each":194,"./valid-callable":206}],202:[function(t,e,r){"use strict";var n=t("./is-value"),a=Array.prototype.forEach,i=Object.create;e.exports=function(t){var e=i(null);return a.call(arguments,function(t){n(t)&&function(t,e){var r;for(r in t)e[r]=t[r]}(Object(t),e)}),e}},{"./is-value":197}],203:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?Object.setPrototypeOf:t("./shim")},{"./is-implemented":204,"./shim":205}],204:[function(t,e,r){"use strict";var n=Object.create,a=Object.getPrototypeOf,i={};e.exports=function(){var t=Object.setPrototypeOf,e=arguments[0]||n;return"function"==typeof t&&a(t(e(null),i))===i}},{}],205:[function(t,e,r){"use strict";var n,a,i,o,s=t("../is-object"),l=t("../valid-value"),c=Object.prototype.isPrototypeOf,u=Object.defineProperty,h={configurable:!0,enumerable:!1,writable:!0,value:void 0};n=function(t,e){if(l(t),null===e||s(e))return t;throw new TypeError("Prototype must be null or an object")},e.exports=(a=function(){var t,e=Object.create(null),r={},n=Object.getOwnPropertyDescriptor(Object.prototype,"__proto__");if(n){try{(t=n.set).call(e,r)}catch(t){}if(Object.getPrototypeOf(e)===r)return{set:t,level:2}}return e.__proto__=r,Object.getPrototypeOf(e)===r?{level:2}:((e={}).__proto__=r,Object.getPrototypeOf(e)===r&&{level:1})}())?(2===a.level?a.set?(o=a.set,i=function(t,e){return o.call(n(t,e),e),t}):i=function(t,e){return n(t,e).__proto__=e,t}:i=function t(e,r){var a;return n(e,r),(a=c.call(t.nullPolyfill,e))&&delete t.nullPolyfill.__proto__,null===r&&(r=t.nullPolyfill),e.__proto__=r,a&&u(t.nullPolyfill,"__proto__",h),e},Object.defineProperty(i,"level",{configurable:!1,enumerable:!1,writable:!1,value:a.level})):null,t("../create")},{"../create":193,"../is-object":196,"../valid-value":208}],206:[function(t,e,r){"use strict";e.exports=function(t){if("function"!=typeof t)throw new TypeError(t+" is not a function");return t}},{}],207:[function(t,e,r){"use strict";var n=t("./is-object");e.exports=function(t){if(!n(t))throw new TypeError(t+" is not an Object");return t}},{"./is-object":196}],208:[function(t,e,r){"use strict";var n=t("./is-value");e.exports=function(t){if(!n(t))throw new TypeError("Cannot use null or undefined");return t}},{"./is-value":197}],209:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?String.prototype.contains:t("./shim")},{"./is-implemented":210,"./shim":211}],210:[function(t,e,r){"use strict";var n="razdwatrzy";e.exports=function(){return"function"==typeof n.contains&&(!0===n.contains("dwa")&&!1===n.contains("foo"))}},{}],211:[function(t,e,r){"use strict";var n=String.prototype.indexOf;e.exports=function(t){return n.call(this,t,arguments[1])>-1}},{}],212:[function(t,e,r){"use strict";var n=Object.prototype.toString,a=n.call("");e.exports=function(t){return"string"==typeof t||t&&"object"==typeof t&&(t instanceof String||n.call(t)===a)||!1}},{}],213:[function(t,e,r){"use strict";var n=Object.create(null),a=Math.random;e.exports=function(){var t;do{t=a().toString(36).slice(2)}while(n[t]);return t}},{}],214:[function(t,e,r){"use strict";var n,a=t("es5-ext/object/set-prototype-of"),i=t("es5-ext/string/#/contains"),o=t("d"),s=t("es6-symbol"),l=t("./"),c=Object.defineProperty;n=e.exports=function(t,e){if(!(this instanceof n))throw new TypeError("Constructor requires 'new'");l.call(this,t),e=e?i.call(e,"key+value")?"key+value":i.call(e,"key")?"key":"value":"value",c(this,"__kind__",o("",e))},a&&a(n,l),delete n.prototype.constructor,n.prototype=Object.create(l.prototype,{_resolve:o(function(t){return"value"===this.__kind__?this.__list__[t]:"key+value"===this.__kind__?[t,this.__list__[t]]:t})}),c(n.prototype,s.toStringTag,o("c","Array Iterator"))},{"./":217,d:153,"es5-ext/object/set-prototype-of":203,"es5-ext/string/#/contains":209,"es6-symbol":222}],215:[function(t,e,r){"use strict";var n=t("es5-ext/function/is-arguments"),a=t("es5-ext/object/valid-callable"),i=t("es5-ext/string/is-string"),o=t("./get"),s=Array.isArray,l=Function.prototype.call,c=Array.prototype.some;e.exports=function(t,e){var r,u,h,f,p,d,g,v,m=arguments[2];if(s(t)||n(t)?r="array":i(t)?r="string":t=o(t),a(e),h=function(){f=!0},"array"!==r)if("string"!==r)for(u=t.next();!u.done;){if(l.call(e,m,u.value,h),f)return;u=t.next()}else for(d=t.length,p=0;p<d&&(g=t[p],p+1<d&&(v=g.charCodeAt(0))>=55296&&v<=56319&&(g+=t[++p]),l.call(e,m,g,h),!f);++p);else c.call(t,function(t){return l.call(e,m,t,h),f})}},{"./get":216,"es5-ext/function/is-arguments":180,"es5-ext/object/valid-callable":206,"es5-ext/string/is-string":212}],216:[function(t,e,r){"use strict";var n=t("es5-ext/function/is-arguments"),a=t("es5-ext/string/is-string"),i=t("./array"),o=t("./string"),s=t("./valid-iterable"),l=t("es6-symbol").iterator;e.exports=function(t){return"function"==typeof s(t)[l]?t[l]():n(t)?new i(t):a(t)?new o(t):new i(t)}},{"./array":214,"./string":219,"./valid-iterable":220,"es5-ext/function/is-arguments":180,"es5-ext/string/is-string":212,"es6-symbol":222}],217:[function(t,e,r){"use strict";var n,a=t("es5-ext/array/#/clear"),i=t("es5-ext/object/assign"),o=t("es5-ext/object/valid-callable"),s=t("es5-ext/object/valid-value"),l=t("d"),c=t("d/auto-bind"),u=t("es6-symbol"),h=Object.defineProperty,f=Object.defineProperties;e.exports=n=function(t,e){if(!(this instanceof n))throw new TypeError("Constructor requires 'new'");f(this,{__list__:l("w",s(t)),__context__:l("w",e),__nextIndex__:l("w",0)}),e&&(o(e.on),e.on("_add",this._onAdd),e.on("_delete",this._onDelete),e.on("_clear",this._onClear))},delete n.prototype.constructor,f(n.prototype,i({_next:l(function(){var t;if(this.__list__)return this.__redo__&&void 0!==(t=this.__redo__.shift())?t:this.__nextIndex__<this.__list__.length?this.__nextIndex__++:void this._unBind()}),next:l(function(){return this._createResult(this._next())}),_createResult:l(function(t){return void 0===t?{done:!0,value:void 0}:{done:!1,value:this._resolve(t)}}),_resolve:l(function(t){return this.__list__[t]}),_unBind:l(function(){this.__list__=null,delete this.__redo__,this.__context__&&(this.__context__.off("_add",this._onAdd),this.__context__.off("_delete",this._onDelete),this.__context__.off("_clear",this._onClear),this.__context__=null)}),toString:l(function(){return"[object "+(this[u.toStringTag]||"Object")+"]"})},c({_onAdd:l(function(t){t>=this.__nextIndex__||(++this.__nextIndex__,this.__redo__?(this.__redo__.forEach(function(e,r){e>=t&&(this.__redo__[r]=++e)},this),this.__redo__.push(t)):h(this,"__redo__",l("c",[t])))}),_onDelete:l(function(t){var e;t>=this.__nextIndex__||(--this.__nextIndex__,this.__redo__&&(-1!==(e=this.__redo__.indexOf(t))&&this.__redo__.splice(e,1),this.__redo__.forEach(function(e,r){e>t&&(this.__redo__[r]=--e)},this)))}),_onClear:l(function(){this.__redo__&&a.call(this.__redo__),this.__nextIndex__=0})}))),h(n.prototype,u.iterator,l(function(){return this}))},{d:153,"d/auto-bind":152,"es5-ext/array/#/clear":176,"es5-ext/object/assign":189,"es5-ext/object/valid-callable":206,"es5-ext/object/valid-value":208,"es6-symbol":222}],218:[function(t,e,r){"use strict";var n=t("es5-ext/function/is-arguments"),a=t("es5-ext/object/is-value"),i=t("es5-ext/string/is-string"),o=t("es6-symbol").iterator,s=Array.isArray;e.exports=function(t){return!!a(t)&&(!!s(t)||(!!i(t)||(!!n(t)||"function"==typeof t[o])))}},{"es5-ext/function/is-arguments":180,"es5-ext/object/is-value":197,"es5-ext/string/is-string":212,"es6-symbol":222}],219:[function(t,e,r){"use strict";var n,a=t("es5-ext/object/set-prototype-of"),i=t("d"),o=t("es6-symbol"),s=t("./"),l=Object.defineProperty;n=e.exports=function(t){if(!(this instanceof n))throw new TypeError("Constructor requires 'new'");t=String(t),s.call(this,t),l(this,"__length__",i("",t.length))},a&&a(n,s),delete n.prototype.constructor,n.prototype=Object.create(s.prototype,{_next:i(function(){if(this.__list__)return this.__nextIndex__<this.__length__?this.__nextIndex__++:void this._unBind()}),_resolve:i(function(t){var e,r=this.__list__[t];return this.__nextIndex__===this.__length__?r:(e=r.charCodeAt(0))>=55296&&e<=56319?r+this.__list__[this.__nextIndex__++]:r})}),l(n.prototype,o.toStringTag,i("c","String Iterator"))},{"./":217,d:153,"es5-ext/object/set-prototype-of":203,"es6-symbol":222}],220:[function(t,e,r){"use strict";var n=t("./is-iterable");e.exports=function(t){if(!n(t))throw new TypeError(t+" is not iterable");return t}},{"./is-iterable":218}],221:[function(t,e,r){(function(n,a){!function(t,n){"object"==typeof r&&"undefined"!=typeof e?e.exports=n():t.ES6Promise=n()}(this,function(){"use strict";function e(t){return"function"==typeof t}var r=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},i=0,o=void 0,s=void 0,l=function(t,e){g[i]=t,g[i+1]=e,2===(i+=2)&&(s?s(v):_())};var c="undefined"!=typeof window?window:void 0,u=c||{},h=u.MutationObserver||u.WebKitMutationObserver,f="undefined"==typeof self&&"undefined"!=typeof n&&"[object process]"==={}.toString.call(n),p="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel;function d(){var t=setTimeout;return function(){return t(v,1)}}var g=new Array(1e3);function v(){for(var t=0;t<i;t+=2){(0,g[t])(g[t+1]),g[t]=void 0,g[t+1]=void 0}i=0}var m,y,x,b,_=void 0;function w(t,e){var r=arguments,n=this,a=new this.constructor(M);void 0===a[T]&&U(a);var i,o=n._state;return o?(i=r[o-1],l(function(){return j(o,a,i,n._result)})):R(n,a,t,e),a}function k(t){if(t&&"object"==typeof t&&t.constructor===this)return t;var e=new this(M);return O(e,t),e}f?_=function(){return n.nextTick(v)}:h?(y=0,x=new h(v),b=document.createTextNode(""),x.observe(b,{characterData:!0}),_=function(){b.data=y=++y%2}):p?((m=new MessageChannel).port1.onmessage=v,_=function(){return m.port2.postMessage(0)}):_=void 0===c&&"function"==typeof t?function(){try{var e=t("vertx");return o=e.runOnLoop||e.runOnContext,function(){o(v)}}catch(t){return d()}}():d();var T=Math.random().toString(36).substring(16);function M(){}var A=void 0,S=1,E=2,L=new B;function C(t){try{return t.then}catch(t){return L.error=t,L}}function P(t,r,n){r.constructor===t.constructor&&n===w&&r.constructor.resolve===k?function(t,e){e._state===S?I(t,e._result):e._state===E?D(t,e._result):R(e,void 0,function(e){return O(t,e)},function(e){return D(t,e)})}(t,r):n===L?D(t,L.error):void 0===n?I(t,r):e(n)?function(t,e,r){l(function(t){var n=!1,a=function(t,e,r,n){try{t.call(e,r,n)}catch(t){return t}}(r,e,function(r){n||(n=!0,e!==r?O(t,r):I(t,r))},function(e){n||(n=!0,D(t,e))},t._label);!n&&a&&(n=!0,D(t,a))},t)}(t,r,n):I(t,r)}function O(t,e){var r;t===e?D(t,new TypeError("You cannot resolve a promise with itself")):"function"==typeof(r=e)||"object"==typeof r&&null!==r?P(t,e,C(e)):I(t,e)}function z(t){t._onerror&&t._onerror(t._result),F(t)}function I(t,e){t._state===A&&(t._result=e,t._state=S,0!==t._subscribers.length&&l(F,t))}function D(t,e){t._state===A&&(t._state=E,t._result=e,l(z,t))}function R(t,e,r,n){var a=t._subscribers,i=a.length;t._onerror=null,a[i]=e,a[i+S]=r,a[i+E]=n,0===i&&t._state&&l(F,t)}function F(t){var e=t._subscribers,r=t._state;if(0!==e.length){for(var n=void 0,a=void 0,i=t._result,o=0;o<e.length;o+=3)n=e[o],a=e[o+r],n?j(r,n,a,i):a(i);t._subscribers.length=0}}function B(){this.error=null}var N=new B;function j(t,r,n,a){var i=e(n),o=void 0,s=void 0,l=void 0,c=void 0;if(i){if((o=function(t,e){try{return t(e)}catch(t){return N.error=t,N}}(n,a))===N?(c=!0,s=o.error,o=null):l=!0,r===o)return void D(r,new TypeError("A promises callback cannot return that same promise."))}else o=a,l=!0;r._state!==A||(i&&l?O(r,o):c?D(r,s):t===S?I(r,o):t===E&&D(r,o))}var V=0;function U(t){t[T]=V++,t._state=void 0,t._result=void 0,t._subscribers=[]}function q(t,e){this._instanceConstructor=t,this.promise=new t(M),this.promise[T]||U(this.promise),r(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?I(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&I(this.promise,this._result))):D(this.promise,new Error("Array Methods must be provided an Array"))}function H(t){this[T]=V++,this._result=this._state=void 0,this._subscribers=[],M!==t&&("function"!=typeof t&&function(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}(),this instanceof H?function(t,e){try{e(function(e){O(t,e)},function(e){D(t,e)})}catch(e){D(t,e)}}(this,t):function(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}())}function G(){var t=void 0;if("undefined"!=typeof a)t=a;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var e=t.Promise;if(e){var r=null;try{r=Object.prototype.toString.call(e.resolve())}catch(t){}if("[object Promise]"===r&&!e.cast)return}t.Promise=H}return q.prototype._enumerate=function(){for(var t=this.length,e=this._input,r=0;this._state===A&&r<t;r++)this._eachEntry(e[r],r)},q.prototype._eachEntry=function(t,e){var r=this._instanceConstructor,n=r.resolve;if(n===k){var a=C(t);if(a===w&&t._state!==A)this._settledAt(t._state,e,t._result);else if("function"!=typeof a)this._remaining--,this._result[e]=t;else if(r===H){var i=new r(M);P(i,t,a),this._willSettleAt(i,e)}else this._willSettleAt(new r(function(e){return e(t)}),e)}else this._willSettleAt(n(t),e)},q.prototype._settledAt=function(t,e,r){var n=this.promise;n._state===A&&(this._remaining--,t===E?D(n,r):this._result[e]=r),0===this._remaining&&I(n,this._result)},q.prototype._willSettleAt=function(t,e){var r=this;R(t,void 0,function(t){return r._settledAt(S,e,t)},function(t){return r._settledAt(E,e,t)})},H.all=function(t){return new q(this,t).promise},H.race=function(t){var e=this;return r(t)?new e(function(r,n){for(var a=t.length,i=0;i<a;i++)e.resolve(t[i]).then(r,n)}):new e(function(t,e){return e(new TypeError("You must pass an array to race."))})},H.resolve=k,H.reject=function(t){var e=new this(M);return D(e,t),e},H._setScheduler=function(t){s=t},H._setAsap=function(t){l=t},H._asap=l,H.prototype={constructor:H,then:w,catch:function(t){return this.then(null,t)}},G(),H.polyfill=G,H.Promise=H,H})}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:483}],222:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?Symbol:t("./polyfill")},{"./is-implemented":223,"./polyfill":225}],223:[function(t,e,r){"use strict";var n={object:!0,symbol:!0};e.exports=function(){var t;if("function"!=typeof Symbol)return!1;t=Symbol("test symbol");try{String(t)}catch(t){return!1}return!!n[typeof Symbol.iterator]&&(!!n[typeof Symbol.toPrimitive]&&!!n[typeof Symbol.toStringTag])}},{}],224:[function(t,e,r){"use strict";e.exports=function(t){return!!t&&("symbol"==typeof t||!!t.constructor&&("Symbol"===t.constructor.name&&"Symbol"===t[t.constructor.toStringTag]))}},{}],225:[function(t,e,r){"use strict";var n,a,i,o,s=t("d"),l=t("./validate-symbol"),c=Object.create,u=Object.defineProperties,h=Object.defineProperty,f=Object.prototype,p=c(null);if("function"==typeof Symbol){n=Symbol;try{String(n()),o=!0}catch(t){}}var d,g=(d=c(null),function(t){for(var e,r,n=0;d[t+(n||"")];)++n;return d[t+=n||""]=!0,h(f,e="@@"+t,s.gs(null,function(t){r||(r=!0,h(this,e,s(t)),r=!1)})),e});i=function(t){if(this instanceof i)throw new TypeError("Symbol is not a constructor");return a(t)},e.exports=a=function t(e){var r;if(this instanceof t)throw new TypeError("Symbol is not a constructor");return o?n(e):(r=c(i.prototype),e=void 0===e?"":String(e),u(r,{__description__:s("",e),__name__:s("",g(e))}))},u(a,{for:s(function(t){return p[t]?p[t]:p[t]=a(String(t))}),keyFor:s(function(t){var e;for(e in l(t),p)if(p[e]===t)return e}),hasInstance:s("",n&&n.hasInstance||a("hasInstance")),isConcatSpreadable:s("",n&&n.isConcatSpreadable||a("isConcatSpreadable")),iterator:s("",n&&n.iterator||a("iterator")),match:s("",n&&n.match||a("match")),replace:s("",n&&n.replace||a("replace")),search:s("",n&&n.search||a("search")),species:s("",n&&n.species||a("species")),split:s("",n&&n.split||a("split")),toPrimitive:s("",n&&n.toPrimitive||a("toPrimitive")),toStringTag:s("",n&&n.toStringTag||a("toStringTag")),unscopables:s("",n&&n.unscopables||a("unscopables"))}),u(i.prototype,{constructor:s(a),toString:s("",function(){return this.__name__})}),u(a.prototype,{toString:s(function(){return"Symbol ("+l(this).__description__+")"}),valueOf:s(function(){return l(this)})}),h(a.prototype,a.toPrimitive,s("",function(){var t=l(this);return"symbol"==typeof t?t:t.toString()})),h(a.prototype,a.toStringTag,s("c","Symbol")),h(i.prototype,a.toStringTag,s("c",a.prototype[a.toStringTag])),h(i.prototype,a.toPrimitive,s("c",a.prototype[a.toPrimitive]))},{"./validate-symbol":226,d:153}],226:[function(t,e,r){"use strict";var n=t("./is-symbol");e.exports=function(t){if(!n(t))throw new TypeError(t+" is not a symbol");return t}},{"./is-symbol":224}],227:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n=e||0,a=r||1;return[[t[12]+t[0],t[13]+t[1],t[14]+t[2],t[15]+t[3]],[t[12]-t[0],t[13]-t[1],t[14]-t[2],t[15]-t[3]],[t[12]+t[4],t[13]+t[5],t[14]+t[6],t[15]+t[7]],[t[12]-t[4],t[13]-t[5],t[14]-t[6],t[15]-t[7]],[n*t[12]+t[8],n*t[13]+t[9],n*t[14]+t[10],n*t[15]+t[11]],[a*t[12]-t[8],a*t[13]-t[9],a*t[14]-t[10],a*t[15]-t[11]]]}},{}],228:[function(t,e,r){"use strict";var n=t("is-string-blank");e.exports=function(t){var e=typeof t;if("string"===e){var r=t;if(0===(t=+t)&&n(r))return!1}else if("number"!==e)return!1;return t-t<1}},{"is-string-blank":424}],229:[function(t,e,r){"use strict";e.exports=function(t,e,r){switch(arguments.length){case 0:return new o([0],[0],0);case 1:if("number"==typeof t){var n=l(t);return new o(n,n,0)}return new o(t,l(t.length),0);case 2:if("number"==typeof e){var n=l(t.length);return new o(t,n,+e)}r=0;case 3:if(t.length!==e.length)throw new Error("state and velocity lengths must match");return new o(t,e,r)}};var n=t("cubic-hermite"),a=t("binary-search-bounds");function i(t,e,r){return Math.min(e,Math.max(t,r))}function o(t,e,r){this.dimension=t.length,this.bounds=[new Array(this.dimension),new Array(this.dimension)];for(var n=0;n<this.dimension;++n)this.bounds[0][n]=-1/0,this.bounds[1][n]=1/0;this._state=t.slice().reverse(),this._velocity=e.slice().reverse(),this._time=[r],this._scratch=[t.slice(),t.slice(),t.slice(),t.slice(),t.slice()]}var s=o.prototype;function l(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=0;return e}s.flush=function(t){var e=a.gt(this._time,t)-1;e<=0||(this._time.splice(0,e),this._state.splice(0,e*this.dimension),this._velocity.splice(0,e*this.dimension))},s.curve=function(t){var e=this._time,r=e.length,o=a.le(e,t),s=this._scratch[0],l=this._state,c=this._velocity,u=this.dimension,h=this.bounds;if(o<0)for(var f=u-1,p=0;p<u;++p,--f)s[p]=l[f];else if(o>=r-1){f=l.length-1;var d=t-e[r-1];for(p=0;p<u;++p,--f)s[p]=l[f]+d*c[f]}else{f=u*(o+1)-1;var g=e[o],v=e[o+1]-g||1,m=this._scratch[1],y=this._scratch[2],x=this._scratch[3],b=this._scratch[4],_=!0;for(p=0;p<u;++p,--f)m[p]=l[f],x[p]=c[f]*v,y[p]=l[f+u],b[p]=c[f+u]*v,_=_&&m[p]===y[p]&&x[p]===b[p]&&0===x[p];if(_)for(p=0;p<u;++p)s[p]=m[p];else n(m,x,y,b,(t-g)/v,s)}var w=h[0],k=h[1];for(p=0;p<u;++p)s[p]=i(w[p],k[p],s[p]);return s},s.dcurve=function(t){var e=this._time,r=e.length,i=a.le(e,t),o=this._scratch[0],s=this._state,l=this._velocity,c=this.dimension;if(i>=r-1)for(var u=s.length-1,h=(e[r-1],0);h<c;++h,--u)o[h]=l[u];else{u=c*(i+1)-1;var f=e[i],p=e[i+1]-f||1,d=this._scratch[1],g=this._scratch[2],v=this._scratch[3],m=this._scratch[4],y=!0;for(h=0;h<c;++h,--u)d[h]=s[u],v[h]=l[u]*p,g[h]=s[u+c],m[h]=l[u+c]*p,y=y&&d[h]===g[h]&&v[h]===m[h]&&0===v[h];if(y)for(h=0;h<c;++h)o[h]=0;else{n.derivative(d,v,g,m,(t-f)/p,o);for(h=0;h<c;++h)o[h]/=p}}return o},s.lastT=function(){var t=this._time;return t[t.length-1]},s.stable=function(){for(var t=this._velocity,e=t.length,r=this.dimension-1;r>=0;--r)if(t[--e])return!1;return!0},s.jump=function(t){var e=this.lastT(),r=this.dimension;if(!(t<e||arguments.length!==r+1)){var n=this._state,a=this._velocity,o=n.length-this.dimension,s=this.bounds,l=s[0],c=s[1];this._time.push(e,t);for(var u=0;u<2;++u)for(var h=0;h<r;++h)n.push(n[o++]),a.push(0);this._time.push(t);for(h=r;h>0;--h)n.push(i(l[h-1],c[h-1],arguments[h])),a.push(0)}},s.push=function(t){var e=this.lastT(),r=this.dimension;if(!(t<e||arguments.length!==r+1)){var n=this._state,a=this._velocity,o=n.length-this.dimension,s=t-e,l=this.bounds,c=l[0],u=l[1],h=s>1e-6?1/s:0;this._time.push(t);for(var f=r;f>0;--f){var p=i(c[f-1],u[f-1],arguments[f]);n.push(p),a.push((p-n[o++])*h)}}},s.set=function(t){var e=this.dimension;if(!(t<this.lastT()||arguments.length!==e+1)){var r=this._state,n=this._velocity,a=this.bounds,o=a[0],s=a[1];this._time.push(t);for(var l=e;l>0;--l)r.push(i(o[l-1],s[l-1],arguments[l])),n.push(0)}},s.move=function(t){var e=this.lastT(),r=this.dimension;if(!(t<=e||arguments.length!==r+1)){var n=this._state,a=this._velocity,o=n.length-this.dimension,s=this.bounds,l=s[0],c=s[1],u=t-e,h=u>1e-6?1/u:0;this._time.push(t);for(var f=r;f>0;--f){var p=arguments[f];n.push(i(l[f-1],c[f-1],n[o++]+p)),a.push(p*h)}}},s.idle=function(t){var e=this.lastT();if(!(t<e)){var r=this.dimension,n=this._state,a=this._velocity,o=n.length-r,s=this.bounds,l=s[0],c=s[1],u=t-e;this._time.push(t);for(var h=r-1;h>=0;--h)n.push(i(l[h],c[h],n[o]+u*a[o])),a.push(0),o+=1}}},{"binary-search-bounds":93,"cubic-hermite":147}],230:[function(t,e,r){var n=t("dtype");e.exports=function(t,e,r){if(!t)throw new TypeError("must specify data as first parameter");if(r=0|+(r||0),Array.isArray(t)&&t[0]&&"number"==typeof t[0][0]){var a,i,o,s,l=t[0].length,c=t.length*l;e&&"string"!=typeof e||(e=new(n(e||"float32"))(c+r));var u=e.length-r;if(c!==u)throw new Error("source length "+c+" ("+l+"x"+t.length+") does not match destination length "+u);for(a=0,o=r;a<t.length;a++)for(i=0;i<l;i++)e[o++]=null===t[a][i]?NaN:t[a][i]}else if(e&&"string"!=typeof e)e.set(t,r);else{var h=n(e||"float32");if(Array.isArray(t)||"array"===e)for(e=new h(t.length+r),a=0,o=r,s=e.length;o<s;o++,a++)e[o]=null===t[a]?NaN:t[a];else 0===r?e=new h(t):(e=new h(t.length+r)).set(t,r)}return e}},{dtype:171}],231:[function(t,e,r){"use strict";var n=t("css-font/stringify"),a=[32,126];e.exports=function(t){var e=(t=t||{}).shape?t.shape:t.canvas?[t.canvas.width,t.canvas.height]:[512,512],r=t.canvas||document.createElement("canvas"),i=t.font,o="number"==typeof t.step?[t.step,t.step]:t.step||[32,32],s=t.chars||a;i&&"string"!=typeof i&&(i=n(i));if(Array.isArray(s)){if(2===s.length&&"number"==typeof s[0]&&"number"==typeof s[1]){for(var l=[],c=s[0],u=0;c<=s[1];c++)l[u++]=String.fromCharCode(c);s=l}}else s=String(s).split("");e=e.slice(),r.width=e[0],r.height=e[1];var h=r.getContext("2d");h.fillStyle="#000",h.fillRect(0,0,r.width,r.height),h.font=i,h.textAlign="center",h.textBaseline="middle",h.fillStyle="#fff";for(var f=o[0]/2,p=o[1]/2,c=0;c<s.length;c++)h.fillText(s[c],f,p),(f+=o[0])>e[0]-o[0]/2&&(f=o[0]/2,p+=o[1]);return r}},{"css-font/stringify":144}],232:[function(t,e,r){"use strict";function n(t,e){e||(e={}),("string"==typeof t||Array.isArray(t))&&(e.family=t);var r=Array.isArray(e.family)?e.family.join(", "):e.family;if(!r)throw Error("`family` must be defined");var s=e.size||e.fontSize||e.em||48,l=e.weight||e.fontWeight||"",c=(t=[e.style||e.fontStyle||"",l,s].join(" ")+"px "+r,e.origin||"top");if(n.cache[r]&&s<=n.cache[r].em)return a(n.cache[r],c);var u=e.canvas||n.canvas,h=u.getContext("2d"),f={upper:void 0!==e.upper?e.upper:"H",lower:void 0!==e.lower?e.lower:"x",descent:void 0!==e.descent?e.descent:"p",ascent:void 0!==e.ascent?e.ascent:"h",tittle:void 0!==e.tittle?e.tittle:"i",overshoot:void 0!==e.overshoot?e.overshoot:"O"},p=Math.ceil(1.5*s);u.height=p,u.width=.5*p,h.font=t;var d={top:0};h.clearRect(0,0,p,p),h.textBaseline="top",h.fillStyle="black",h.fillText("H",0,0);var g=i(h.getImageData(0,0,p,p));h.clearRect(0,0,p,p),h.textBaseline="bottom",h.fillText("H",0,p);var v=i(h.getImageData(0,0,p,p));d.lineHeight=d.bottom=p-v+g,h.clearRect(0,0,p,p),h.textBaseline="alphabetic",h.fillText("H",0,p);var m=p-i(h.getImageData(0,0,p,p))-1+g;d.baseline=d.alphabetic=m,h.clearRect(0,0,p,p),h.textBaseline="middle",h.fillText("H",0,.5*p);var y=i(h.getImageData(0,0,p,p));d.median=d.middle=p-y-1+g-.5*p,h.clearRect(0,0,p,p),h.textBaseline="hanging",h.fillText("H",0,.5*p);var x=i(h.getImageData(0,0,p,p));d.hanging=p-x-1+g-.5*p,h.clearRect(0,0,p,p),h.textBaseline="ideographic",h.fillText("H",0,p);var b=i(h.getImageData(0,0,p,p));if(d.ideographic=p-b-1+g,f.upper&&(h.clearRect(0,0,p,p),h.textBaseline="top",h.fillText(f.upper,0,0),d.upper=i(h.getImageData(0,0,p,p)),d.capHeight=d.baseline-d.upper),f.lower&&(h.clearRect(0,0,p,p),h.textBaseline="top",h.fillText(f.lower,0,0),d.lower=i(h.getImageData(0,0,p,p)),d.xHeight=d.baseline-d.lower),f.tittle&&(h.clearRect(0,0,p,p),h.textBaseline="top",h.fillText(f.tittle,0,0),d.tittle=i(h.getImageData(0,0,p,p))),f.ascent&&(h.clearRect(0,0,p,p),h.textBaseline="top",h.fillText(f.ascent,0,0),d.ascent=i(h.getImageData(0,0,p,p))),f.descent&&(h.clearRect(0,0,p,p),h.textBaseline="top",h.fillText(f.descent,0,0),d.descent=o(h.getImageData(0,0,p,p))),f.overshoot){h.clearRect(0,0,p,p),h.textBaseline="top",h.fillText(f.overshoot,0,0);var _=o(h.getImageData(0,0,p,p));d.overshoot=_-m}for(var w in d)d[w]/=s;return d.em=s,n.cache[r]=d,a(d,c)}function a(t,e){var r={};for(var n in"string"==typeof e&&(e=t[e]),t)"em"!==n&&(r[n]=t[n]-e);return r}function i(t){for(var e=t.height,r=t.data,n=3;n<r.length;n+=4)if(0!==r[n])return Math.floor(.25*(n-3)/e)}function o(t){for(var e=t.height,r=t.data,n=r.length-1;n>0;n-=4)if(0!==r[n])return Math.floor(.25*(n-3)/e)}e.exports=n,n.canvas=document.createElement("canvas"),n.cache={}},{}],233:[function(t,e,r){"use strict";e.exports=function(t){return new c(t||d,null)};var n=0,a=1;function i(t,e,r,n,a,i){this._color=t,this.key=e,this.value=r,this.left=n,this.right=a,this._count=i}function o(t){return new i(t._color,t.key,t.value,t.left,t.right,t._count)}function s(t,e){return new i(t,e.key,e.value,e.left,e.right,e._count)}function l(t){t._count=1+(t.left?t.left._count:0)+(t.right?t.right._count:0)}function c(t,e){this._compare=t,this.root=e}var u=c.prototype;function h(t,e){this.tree=t,this._stack=e}Object.defineProperty(u,"keys",{get:function(){var t=[];return this.forEach(function(e,r){t.push(e)}),t}}),Object.defineProperty(u,"values",{get:function(){var t=[];return this.forEach(function(e,r){t.push(r)}),t}}),Object.defineProperty(u,"length",{get:function(){return this.root?this.root._count:0}}),u.insert=function(t,e){for(var r=this._compare,o=this.root,u=[],h=[];o;){var f=r(t,o.key);u.push(o),h.push(f),o=f<=0?o.left:o.right}u.push(new i(n,t,e,null,null,1));for(var p=u.length-2;p>=0;--p){o=u[p];h[p]<=0?u[p]=new i(o._color,o.key,o.value,u[p+1],o.right,o._count+1):u[p]=new i(o._color,o.key,o.value,o.left,u[p+1],o._count+1)}for(p=u.length-1;p>1;--p){var d=u[p-1];o=u[p];if(d._color===a||o._color===a)break;var g=u[p-2];if(g.left===d)if(d.left===o){if(!(v=g.right)||v._color!==n){if(g._color=n,g.left=d.right,d._color=a,d.right=g,u[p-2]=d,u[p-1]=o,l(g),l(d),p>=3)(m=u[p-3]).left===g?m.left=d:m.right=d;break}d._color=a,g.right=s(a,v),g._color=n,p-=1}else{if(!(v=g.right)||v._color!==n){if(d.right=o.left,g._color=n,g.left=o.right,o._color=a,o.left=d,o.right=g,u[p-2]=o,u[p-1]=d,l(g),l(d),l(o),p>=3)(m=u[p-3]).left===g?m.left=o:m.right=o;break}d._color=a,g.right=s(a,v),g._color=n,p-=1}else if(d.right===o){if(!(v=g.left)||v._color!==n){if(g._color=n,g.right=d.left,d._color=a,d.left=g,u[p-2]=d,u[p-1]=o,l(g),l(d),p>=3)(m=u[p-3]).right===g?m.right=d:m.left=d;break}d._color=a,g.left=s(a,v),g._color=n,p-=1}else{var v;if(!(v=g.left)||v._color!==n){var m;if(d.left=o.right,g._color=n,g.right=o.left,o._color=a,o.right=d,o.left=g,u[p-2]=o,u[p-1]=d,l(g),l(d),l(o),p>=3)(m=u[p-3]).right===g?m.right=o:m.left=o;break}d._color=a,g.left=s(a,v),g._color=n,p-=1}}return u[0]._color=a,new c(r,u[0])},u.forEach=function(t,e,r){if(this.root)switch(arguments.length){case 1:return function t(e,r){var n;if(r.left&&(n=t(e,r.left)))return n;return(n=e(r.key,r.value))||(r.right?t(e,r.right):void 0)}(t,this.root);case 2:return function t(e,r,n,a){if(r(e,a.key)<=0){var i;if(a.left&&(i=t(e,r,n,a.left)))return i;if(i=n(a.key,a.value))return i}if(a.right)return t(e,r,n,a.right)}(e,this._compare,t,this.root);case 3:if(this._compare(e,r)>=0)return;return function t(e,r,n,a,i){var o,s=n(e,i.key),l=n(r,i.key);if(s<=0){if(i.left&&(o=t(e,r,n,a,i.left)))return o;if(l>0&&(o=a(i.key,i.value)))return o}if(l>0&&i.right)return t(e,r,n,a,i.right)}(e,r,this._compare,t,this.root)}},Object.defineProperty(u,"begin",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.left;return new h(this,t)}}),Object.defineProperty(u,"end",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.right;return new h(this,t)}}),u.at=function(t){if(t<0)return new h(this,[]);for(var e=this.root,r=[];;){if(r.push(e),e.left){if(t<e.left._count){e=e.left;continue}t-=e.left._count}if(!t)return new h(this,r);if(t-=1,!e.right)break;if(t>=e.right._count)break;e=e.right}return new h(this,[])},u.ge=function(t){for(var e=this._compare,r=this.root,n=[],a=0;r;){var i=e(t,r.key);n.push(r),i<=0&&(a=n.length),r=i<=0?r.left:r.right}return n.length=a,new h(this,n)},u.gt=function(t){for(var e=this._compare,r=this.root,n=[],a=0;r;){var i=e(t,r.key);n.push(r),i<0&&(a=n.length),r=i<0?r.left:r.right}return n.length=a,new h(this,n)},u.lt=function(t){for(var e=this._compare,r=this.root,n=[],a=0;r;){var i=e(t,r.key);n.push(r),i>0&&(a=n.length),r=i<=0?r.left:r.right}return n.length=a,new h(this,n)},u.le=function(t){for(var e=this._compare,r=this.root,n=[],a=0;r;){var i=e(t,r.key);n.push(r),i>=0&&(a=n.length),r=i<0?r.left:r.right}return n.length=a,new h(this,n)},u.find=function(t){for(var e=this._compare,r=this.root,n=[];r;){var a=e(t,r.key);if(n.push(r),0===a)return new h(this,n);r=a<=0?r.left:r.right}return new h(this,[])},u.remove=function(t){var e=this.find(t);return e?e.remove():this},u.get=function(t){for(var e=this._compare,r=this.root;r;){var n=e(t,r.key);if(0===n)return r.value;r=n<=0?r.left:r.right}};var f=h.prototype;function p(t,e){t.key=e.key,t.value=e.value,t.left=e.left,t.right=e.right,t._color=e._color,t._count=e._count}function d(t,e){return t<e?-1:t>e?1:0}Object.defineProperty(f,"valid",{get:function(){return this._stack.length>0}}),Object.defineProperty(f,"node",{get:function(){return this._stack.length>0?this._stack[this._stack.length-1]:null},enumerable:!0}),f.clone=function(){return new h(this.tree,this._stack.slice())},f.remove=function(){var t=this._stack;if(0===t.length)return this.tree;var e=new Array(t.length),r=t[t.length-1];e[e.length-1]=new i(r._color,r.key,r.value,r.left,r.right,r._count);for(var u=t.length-2;u>=0;--u){(r=t[u]).left===t[u+1]?e[u]=new i(r._color,r.key,r.value,e[u+1],r.right,r._count):e[u]=new i(r._color,r.key,r.value,r.left,e[u+1],r._count)}if((r=e[e.length-1]).left&&r.right){var h=e.length;for(r=r.left;r.right;)e.push(r),r=r.right;var f=e[h-1];e.push(new i(r._color,f.key,f.value,r.left,r.right,r._count)),e[h-1].key=r.key,e[h-1].value=r.value;for(u=e.length-2;u>=h;--u)r=e[u],e[u]=new i(r._color,r.key,r.value,r.left,e[u+1],r._count);e[h-1].left=e[h]}if((r=e[e.length-1])._color===n){var d=e[e.length-2];d.left===r?d.left=null:d.right===r&&(d.right=null),e.pop();for(u=0;u<e.length;++u)e[u]._count--;return new c(this.tree._compare,e[0])}if(r.left||r.right){r.left?p(r,r.left):r.right&&p(r,r.right),r._color=a;for(u=0;u<e.length-1;++u)e[u]._count--;return new c(this.tree._compare,e[0])}if(1===e.length)return new c(this.tree._compare,null);for(u=0;u<e.length;++u)e[u]._count--;var g=e[e.length-2];return function(t){for(var e,r,i,c,u=t.length-1;u>=0;--u){if(e=t[u],0===u)return void(e._color=a);if((r=t[u-1]).left===e){if((i=r.right).right&&i.right._color===n)return c=(i=r.right=o(i)).right=o(i.right),r.right=i.left,i.left=r,i.right=c,i._color=r._color,e._color=a,r._color=a,c._color=a,l(r),l(i),u>1&&((h=t[u-2]).left===r?h.left=i:h.right=i),void(t[u-1]=i);if(i.left&&i.left._color===n)return c=(i=r.right=o(i)).left=o(i.left),r.right=c.left,i.left=c.right,c.left=r,c.right=i,c._color=r._color,r._color=a,i._color=a,e._color=a,l(r),l(i),l(c),u>1&&((h=t[u-2]).left===r?h.left=c:h.right=c),void(t[u-1]=c);if(i._color===a){if(r._color===n)return r._color=a,void(r.right=s(n,i));r.right=s(n,i);continue}i=o(i),r.right=i.left,i.left=r,i._color=r._color,r._color=n,l(r),l(i),u>1&&((h=t[u-2]).left===r?h.left=i:h.right=i),t[u-1]=i,t[u]=r,u+1<t.length?t[u+1]=e:t.push(e),u+=2}else{if((i=r.left).left&&i.left._color===n)return c=(i=r.left=o(i)).left=o(i.left),r.left=i.right,i.right=r,i.left=c,i._color=r._color,e._color=a,r._color=a,c._color=a,l(r),l(i),u>1&&((h=t[u-2]).right===r?h.right=i:h.left=i),void(t[u-1]=i);if(i.right&&i.right._color===n)return c=(i=r.left=o(i)).right=o(i.right),r.left=c.right,i.right=c.left,c.right=r,c.left=i,c._color=r._color,r._color=a,i._color=a,e._color=a,l(r),l(i),l(c),u>1&&((h=t[u-2]).right===r?h.right=c:h.left=c),void(t[u-1]=c);if(i._color===a){if(r._color===n)return r._color=a,void(r.left=s(n,i));r.left=s(n,i);continue}var h;i=o(i),r.left=i.right,i.right=r,i._color=r._color,r._color=n,l(r),l(i),u>1&&((h=t[u-2]).right===r?h.right=i:h.left=i),t[u-1]=i,t[u]=r,u+1<t.length?t[u+1]=e:t.push(e),u+=2}}}(e),g.left===r?g.left=null:g.right=null,new c(this.tree._compare,e[0])},Object.defineProperty(f,"key",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].key},enumerable:!0}),Object.defineProperty(f,"value",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].value},enumerable:!0}),Object.defineProperty(f,"index",{get:function(){var t=0,e=this._stack;if(0===e.length){var r=this.tree.root;return r?r._count:0}e[e.length-1].left&&(t=e[e.length-1].left._count);for(var n=e.length-2;n>=0;--n)e[n+1]===e[n].right&&(++t,e[n].left&&(t+=e[n].left._count));return t},enumerable:!0}),f.next=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.right)for(e=e.right;e;)t.push(e),e=e.left;else for(t.pop();t.length>0&&t[t.length-1].right===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(f,"hasNext",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].right)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].left===t[e])return!0;return!1}}),f.update=function(t){var e=this._stack;if(0===e.length)throw new Error("Can't update empty node!");var r=new Array(e.length),n=e[e.length-1];r[r.length-1]=new i(n._color,n.key,t,n.left,n.right,n._count);for(var a=e.length-2;a>=0;--a)(n=e[a]).left===e[a+1]?r[a]=new i(n._color,n.key,n.value,r[a+1],n.right,n._count):r[a]=new i(n._color,n.key,n.value,n.left,r[a+1],n._count);return new c(this.tree._compare,r[0])},f.prev=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.left)for(e=e.left;e;)t.push(e),e=e.right;else for(t.pop();t.length>0&&t[t.length-1].left===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(f,"hasPrev",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].left)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].right===t[e])return!0;return!1}})},{}],234:[function(t,e,r){var n=[.9999999999998099,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,1.5056327351493116e-7],a=607/128,i=[.9999999999999971,57.15623566586292,-59.59796035547549,14.136097974741746,-.4919138160976202,3399464998481189e-20,4652362892704858e-20,-9837447530487956e-20,.0001580887032249125,-.00021026444172410488,.00021743961811521265,-.0001643181065367639,8441822398385275e-20,-26190838401581408e-21,36899182659531625e-22];function o(t){if(t<0)return Number("0/0");for(var e=i[0],r=i.length-1;r>0;--r)e+=i[r]/(t+r);var n=t+a+.5;return.5*Math.log(2*Math.PI)+(t+.5)*Math.log(n)-n+Math.log(e)-Math.log(t)}e.exports=function t(e){if(e<.5)return Math.PI/(Math.sin(Math.PI*e)*t(1-e));if(e>100)return Math.exp(o(e));e-=1;for(var r=n[0],a=1;a<9;a++)r+=n[a]/(e+a);var i=e+7+.5;return Math.sqrt(2*Math.PI)*Math.pow(i,e+.5)*Math.exp(-i)*r},e.exports.log=o},{}],235:[function(t,e,r){e.exports=function(t,e){if("string"!=typeof t)throw new TypeError("must specify type string");if(e=e||{},"undefined"==typeof document&&!e.canvas)return null;var r=e.canvas||document.createElement("canvas");"number"==typeof e.width&&(r.width=e.width);"number"==typeof e.height&&(r.height=e.height);var n,a=e;try{var i=[t];0===t.indexOf("webgl")&&i.push("experimental-"+t);for(var o=0;o<i.length;o++)if(n=r.getContext(i[o],a))return n}catch(t){n=null}return n||null}},{}],236:[function(t,e,r){"use strict";e.exports=function(t,e){var r=new u(t);return r.update(e),r};var n=t("./lib/text.js"),a=t("./lib/lines.js"),i=t("./lib/background.js"),o=t("./lib/cube.js"),s=t("./lib/ticks.js"),l=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);function c(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function u(t){this.gl=t,this.pixelRatio=1,this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.autoTicks=!0,this.tickSpacing=[1,1,1],this.tickEnable=[!0,!0,!0],this.tickFont=["sans-serif","sans-serif","sans-serif"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickAlign=["auto","auto","auto"],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[10,10,10],this.lastCubeProps={cubeEdges:[0,0,0],axis:[0,0,0]},this.labels=["x","y","z"],this.labelEnable=[!0,!0,!0],this.labelFont="sans-serif",this.labelSize=[20,20,20],this.labelAngle=[0,0,0],this.labelAlign=["auto","auto","auto"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[10,10,10],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[0,0,0],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!1,!1,!1],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._firstInit=!0,this._text=null,this._lines=null,this._background=i(t)}var h=u.prototype;function f(){this.primalOffset=[0,0,0],this.primalMinor=[0,0,0],this.mirrorOffset=[0,0,0],this.mirrorMinor=[0,0,0]}h.update=function(t){function e(e,r,n){if(n in t){var a,i=t[n],o=this[n];(e?Array.isArray(i)&&Array.isArray(i[0]):Array.isArray(i))?this[n]=a=[r(i[0]),r(i[1]),r(i[2])]:this[n]=a=[r(i),r(i),r(i)];for(var s=0;s<3;++s)if(a[s]!==o[s])return!0}return!1}t=t||{};var r,i=e.bind(this,!1,Number),o=e.bind(this,!1,Boolean),l=e.bind(this,!1,String),c=e.bind(this,!0,function(t){if(Array.isArray(t)){if(3===t.length)return[+t[0],+t[1],+t[2],1];if(4===t.length)return[+t[0],+t[1],+t[2],+t[3]]}return[0,0,0,1]}),u=!1,h=!1;if("bounds"in t)for(var f=t.bounds,p=0;p<2;++p)for(var d=0;d<3;++d)f[p][d]!==this.bounds[p][d]&&(h=!0),this.bounds[p][d]=f[p][d];if("ticks"in t){r=t.ticks,u=!0,this.autoTicks=!1;for(p=0;p<3;++p)this.tickSpacing[p]=0}else i("tickSpacing")&&(this.autoTicks=!0,h=!0);if(this._firstInit&&("ticks"in t||"tickSpacing"in t||(this.autoTicks=!0),h=!0,u=!0,this._firstInit=!1),h&&this.autoTicks&&(r=s.create(this.bounds,this.tickSpacing),u=!0),u){for(p=0;p<3;++p)r[p].sort(function(t,e){return t.x-e.x});s.equal(r,this.ticks)?u=!1:this.ticks=r}o("tickEnable"),l("tickFont")&&(u=!0),i("tickSize"),i("tickAngle"),i("tickPad"),c("tickColor");var g=l("labels");l("labelFont")&&(g=!0),o("labelEnable"),i("labelSize"),i("labelPad"),c("labelColor"),o("lineEnable"),o("lineMirror"),i("lineWidth"),c("lineColor"),o("lineTickEnable"),o("lineTickMirror"),i("lineTickLength"),i("lineTickWidth"),c("lineTickColor"),o("gridEnable"),i("gridWidth"),c("gridColor"),o("zeroEnable"),c("zeroLineColor"),i("zeroLineWidth"),o("backgroundEnable"),c("backgroundColor"),this._text?this._text&&(g||u)&&this._text.update(this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont):this._text=n(this.gl,this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont),this._lines&&u&&(this._lines.dispose(),this._lines=null),this._lines||(this._lines=a(this.gl,this.bounds,this.ticks))};var p=[new f,new f,new f];function d(t,e,r,n,a){for(var i=t.primalOffset,o=t.primalMinor,s=t.mirrorOffset,l=t.mirrorMinor,c=n[e],u=0;u<3;++u)if(e!==u){var h=i,f=s,p=o,d=l;c&1<<u&&(h=s,f=i,p=l,d=o),h[u]=r[0][u],f[u]=r[1][u],a[u]>0?(p[u]=-1,d[u]=0):(p[u]=0,d[u]=1)}}var g=[0,0,0],v={model:l,view:l,projection:l,_ortho:!1};h.isOpaque=function(){return!0},h.isTransparent=function(){return!1},h.drawTransparent=function(t){};var m=[0,0,0],y=[0,0,0],x=[0,0,0];h.draw=function(t){t=t||v;for(var e=this.gl,r=t.model||l,n=t.view||l,a=t.projection||l,i=this.bounds,s=t._ortho||!1,u=o(r,n,a,i,s),h=u.cubeEdges,f=u.axis,b=n[12],_=n[13],w=n[14],k=n[15],T=(s?2:1)*this.pixelRatio*(a[3]*b+a[7]*_+a[11]*w+a[15]*k)/e.drawingBufferHeight,M=0;M<3;++M)this.lastCubeProps.cubeEdges[M]=h[M],this.lastCubeProps.axis[M]=f[M];var A=p;for(M=0;M<3;++M)d(p[M],M,this.bounds,h,f);e=this.gl;var S,E=g;for(M=0;M<3;++M)this.backgroundEnable[M]?E[M]=f[M]:E[M]=0;this._background.draw(r,n,a,i,E,this.backgroundColor),this._lines.bind(r,n,a,this);for(M=0;M<3;++M){var L=[0,0,0];f[M]>0?L[M]=i[1][M]:L[M]=i[0][M];for(var C=0;C<2;++C){var P=(M+1+C)%3,O=(M+1+(1^C))%3;this.gridEnable[P]&&this._lines.drawGrid(P,O,this.bounds,L,this.gridColor[P],this.gridWidth[P]*this.pixelRatio)}for(C=0;C<2;++C){P=(M+1+C)%3,O=(M+1+(1^C))%3;this.zeroEnable[O]&&Math.min(i[0][O],i[1][O])<=0&&Math.max(i[0][O],i[1][O])>=0&&this._lines.drawZero(P,O,this.bounds,L,this.zeroLineColor[O],this.zeroLineWidth[O]*this.pixelRatio)}}for(M=0;M<3;++M){this.lineEnable[M]&&this._lines.drawAxisLine(M,this.bounds,A[M].primalOffset,this.lineColor[M],this.lineWidth[M]*this.pixelRatio),this.lineMirror[M]&&this._lines.drawAxisLine(M,this.bounds,A[M].mirrorOffset,this.lineColor[M],this.lineWidth[M]*this.pixelRatio);var z=c(m,A[M].primalMinor),I=c(y,A[M].mirrorMinor),D=this.lineTickLength;for(C=0;C<3;++C){var R=T/r[5*C];z[C]*=D[C]*R,I[C]*=D[C]*R}this.lineTickEnable[M]&&this._lines.drawAxisTicks(M,A[M].primalOffset,z,this.lineTickColor[M],this.lineTickWidth[M]*this.pixelRatio),this.lineTickMirror[M]&&this._lines.drawAxisTicks(M,A[M].mirrorOffset,I,this.lineTickColor[M],this.lineTickWidth[M]*this.pixelRatio)}this._lines.unbind(),this._text.bind(r,n,a,this.pixelRatio);var F,B;function N(t){(B=[0,0,0])[t]=1}function j(t,e,r){var n=(t+1)%3,a=(t+2)%3,i=e[n],o=e[a],s=r[n],l=r[a];i>0&&l>0?N(n):i>0&&l<0?N(n):i<0&&l>0?N(n):i<0&&l<0?N(n):o>0&&s>0?N(a):o>0&&s<0?N(a):o<0&&s>0?N(a):o<0&&s<0&&N(a)}for(M=0;M<3;++M){var V=A[M].primalMinor,U=A[M].mirrorMinor,q=c(x,A[M].primalOffset);for(C=0;C<3;++C)this.lineTickEnable[M]&&(q[C]+=T*V[C]*Math.max(this.lineTickLength[C],0)/r[5*C]);var H=[0,0,0];if(H[M]=1,this.tickEnable[M]){-3600===this.tickAngle[M]?(this.tickAngle[M]=0,this.tickAlign[M]="auto"):this.tickAlign[M]=-1,F=1,"auto"===(S=[this.tickAlign[M],.5,F])[0]?S[0]=0:S[0]=parseInt(""+S[0]),B=[0,0,0],j(M,V,U);for(C=0;C<3;++C)q[C]+=T*V[C]*this.tickPad[C]/r[5*C];this._text.drawTicks(M,this.tickSize[M],this.tickAngle[M],q,this.tickColor[M],H,B,S)}if(this.labelEnable[M]){F=0,B=[0,0,0],this.labels[M].length>4&&(N(M),F=1),"auto"===(S=[this.labelAlign[M],.5,F])[0]?S[0]=0:S[0]=parseInt(""+S[0]);for(C=0;C<3;++C)q[C]+=T*V[C]*this.labelPad[C]/r[5*C];q[M]+=.5*(i[0][M]+i[1][M]),this._text.drawLabel(M,this.labelSize[M],this.labelAngle[M],q,this.labelColor[M],[0,0,0],B,S)}}this._text.unbind()},h.dispose=function(){this._text.dispose(),this._lines.dispose(),this._background.dispose(),this._lines=null,this._text=null,this._background=null,this.gl=null}},{"./lib/background.js":237,"./lib/cube.js":238,"./lib/lines.js":239,"./lib/text.js":241,"./lib/ticks.js":242}],237:[function(t,e,r){"use strict";e.exports=function(t){for(var e=[],r=[],s=0,l=0;l<3;++l)for(var c=(l+1)%3,u=(l+2)%3,h=[0,0,0],f=[0,0,0],p=-1;p<=1;p+=2){r.push(s,s+2,s+1,s+1,s+2,s+3),h[l]=p,f[l]=p;for(var d=-1;d<=1;d+=2){h[c]=d;for(var g=-1;g<=1;g+=2)h[u]=g,e.push(h[0],h[1],h[2],f[0],f[1],f[2]),s+=1}var v=c;c=u,u=v}var m=n(t,new Float32Array(e)),y=n(t,new Uint16Array(r),t.ELEMENT_ARRAY_BUFFER),x=a(t,[{buffer:m,type:t.FLOAT,size:3,offset:0,stride:24},{buffer:m,type:t.FLOAT,size:3,offset:12,stride:24}],y),b=i(t);return b.attributes.position.location=0,b.attributes.normal.location=1,new o(t,m,x,b)};var n=t("gl-buffer"),a=t("gl-vao"),i=t("./shaders").bg;function o(t,e,r,n){this.gl=t,this.buffer=e,this.vao=r,this.shader=n}var s=o.prototype;s.draw=function(t,e,r,n,a,i){for(var o=!1,s=0;s<3;++s)o=o||a[s];if(o){var l=this.gl;l.enable(l.POLYGON_OFFSET_FILL),l.polygonOffset(1,2),this.shader.bind(),this.shader.uniforms={model:t,view:e,projection:r,bounds:n,enable:a,colors:i},this.vao.bind(),this.vao.draw(this.gl.TRIANGLES,36),this.vao.unbind(),l.disable(l.POLYGON_OFFSET_FILL)}},s.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},{"./shaders":240,"gl-buffer":244,"gl-vao":329}],238:[function(t,e,r){"use strict";e.exports=function(t,e,r,i,p){a(s,e,t),a(s,r,s);for(var y=0,x=0;x<2;++x){u[2]=i[x][2];for(var b=0;b<2;++b){u[1]=i[b][1];for(var _=0;_<2;++_)u[0]=i[_][0],f(l[y],u,s),y+=1}}for(var w=-1,x=0;x<8;++x){for(var k=l[x][3],T=0;T<3;++T)c[x][T]=l[x][T]/k;p&&(c[x][2]*=-1),k<0&&(w<0?w=x:c[x][2]<c[w][2]&&(w=x))}if(w<0){w=0;for(var M=0;M<3;++M){for(var A=(M+2)%3,S=(M+1)%3,E=-1,L=-1,C=0;C<2;++C){var P=C<<M,O=P+(C<<A)+(1-C<<S),z=P+(1-C<<A)+(C<<S);o(c[P],c[O],c[z],h)<0||(C?E=1:L=1)}if(E<0||L<0)L>E&&(w|=1<<M);else{for(var C=0;C<2;++C){var P=C<<M,O=P+(C<<A)+(1-C<<S),z=P+(1-C<<A)+(C<<S),I=d([l[P],l[O],l[z],l[P+(1<<A)+(1<<S)]]);C?E=I:L=I}L>E&&(w|=1<<M)}}}for(var D=7^w,R=-1,x=0;x<8;++x)x!==w&&x!==D&&(R<0?R=x:c[R][1]>c[x][1]&&(R=x));for(var F=-1,x=0;x<3;++x){var B=R^1<<x;if(B!==w&&B!==D){F<0&&(F=B);var S=c[B];S[0]<c[F][0]&&(F=B)}}for(var N=-1,x=0;x<3;++x){var B=R^1<<x;if(B!==w&&B!==D&&B!==F){N<0&&(N=B);var S=c[B];S[0]>c[N][0]&&(N=B)}}var j=g;j[0]=j[1]=j[2]=0,j[n.log2(F^R)]=R&F,j[n.log2(R^N)]=R&N;var V=7^N;V===w||V===D?(V=7^F,j[n.log2(N^V)]=V&N):j[n.log2(F^V)]=V&F;for(var U=v,q=w,M=0;M<3;++M)U[M]=q&1<<M?-1:1;return m};var n=t("bit-twiddle"),a=t("gl-mat4/multiply"),i=t("split-polygon"),o=t("robust-orientation"),s=new Array(16),l=new Array(8),c=new Array(8),u=new Array(3),h=[0,0,0];function f(t,e,r){for(var n=0;n<4;++n){t[n]=r[12+n];for(var a=0;a<3;++a)t[n]+=e[a]*r[4*a+n]}}!function(){for(var t=0;t<8;++t)l[t]=[1,1,1,1],c[t]=[1,1,1]}();var p=[[0,0,1,0,0],[0,0,-1,1,0],[0,-1,0,1,0],[0,1,0,1,0],[-1,0,0,1,0],[1,0,0,1,0]];function d(t){for(var e=0;e<p.length;++e)if((t=i.positive(t,p[e])).length<3)return 0;var r=t[0],n=r[0]/r[3],a=r[1]/r[3],o=0;for(e=1;e+1<t.length;++e){var s=t[e],l=t[e+1],c=s[0]/s[3]-n,u=s[1]/s[3]-a,h=l[0]/l[3]-n,f=l[1]/l[3]-a;o+=Math.abs(c*f-u*h)}return o}var g=[1,1,1],v=[0,0,0],m={cubeEdges:g,axis:v}},{"bit-twiddle":94,"gl-mat4/multiply":270,"robust-orientation":508,"split-polygon":525}],239:[function(t,e,r){"use strict";e.exports=function(t,e,r){var o=[],s=[0,0,0],l=[0,0,0],c=[0,0,0],u=[0,0,0];o.push(0,0,1,0,1,1,0,0,-1,0,0,-1,0,1,1,0,1,-1);for(var h=0;h<3;++h){for(var f=o.length/3|0,d=0;d<r[h].length;++d){var g=+r[h][d].x;o.push(g,0,1,g,1,1,g,0,-1,g,0,-1,g,1,1,g,1,-1)}var v=o.length/3|0;s[h]=f,l[h]=v-f;for(var f=o.length/3|0,m=0;m<r[h].length;++m){var g=+r[h][m].x;o.push(g,0,1,g,1,1,g,0,-1,g,0,-1,g,1,1,g,1,-1)}var v=o.length/3|0;c[h]=f,u[h]=v-f}var y=n(t,new Float32Array(o)),x=a(t,[{buffer:y,type:t.FLOAT,size:3,stride:0,offset:0}]),b=i(t);return b.attributes.position.location=0,new p(t,y,x,b,l,s,u,c)};var n=t("gl-buffer"),a=t("gl-vao"),i=t("./shaders").line,o=[0,0,0],s=[0,0,0],l=[0,0,0],c=[0,0,0],u=[1,1];function h(t){return t[0]=t[1]=t[2]=0,t}function f(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function p(t,e,r,n,a,i,o,s){this.gl=t,this.vertBuffer=e,this.vao=r,this.shader=n,this.tickCount=a,this.tickOffset=i,this.gridCount=o,this.gridOffset=s}var d=p.prototype;d.bind=function(t,e,r){this.shader.bind(),this.shader.uniforms.model=t,this.shader.uniforms.view=e,this.shader.uniforms.projection=r,u[0]=this.gl.drawingBufferWidth,u[1]=this.gl.drawingBufferHeight,this.shader.uniforms.screenShape=u,this.vao.bind()},d.unbind=function(){this.vao.unbind()},d.drawAxisLine=function(t,e,r,n,a){var i=h(s);this.shader.uniforms.majorAxis=s,i[t]=e[1][t]-e[0][t],this.shader.uniforms.minorAxis=i;var o,u=f(c,r);u[t]+=e[0][t],this.shader.uniforms.offset=u,this.shader.uniforms.lineWidth=a,this.shader.uniforms.color=n,(o=h(l))[(t+2)%3]=1,this.shader.uniforms.screenAxis=o,this.vao.draw(this.gl.TRIANGLES,6),(o=h(l))[(t+1)%3]=1,this.shader.uniforms.screenAxis=o,this.vao.draw(this.gl.TRIANGLES,6)},d.drawAxisTicks=function(t,e,r,n,a){if(this.tickCount[t]){var i=h(o);i[t]=1,this.shader.uniforms.majorAxis=i,this.shader.uniforms.offset=e,this.shader.uniforms.minorAxis=r,this.shader.uniforms.color=n,this.shader.uniforms.lineWidth=a;var s=h(l);s[t]=1,this.shader.uniforms.screenAxis=s,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t])}},d.drawGrid=function(t,e,r,n,a,i){if(this.gridCount[t]){var u=h(s);u[e]=r[1][e]-r[0][e],this.shader.uniforms.minorAxis=u;var p=f(c,n);p[e]+=r[0][e],this.shader.uniforms.offset=p;var d=h(o);d[t]=1,this.shader.uniforms.majorAxis=d;var g=h(l);g[t]=1,this.shader.uniforms.screenAxis=g,this.shader.uniforms.lineWidth=i,this.shader.uniforms.color=a,this.vao.draw(this.gl.TRIANGLES,this.gridCount[t],this.gridOffset[t])}},d.drawZero=function(t,e,r,n,a,i){var o=h(s);this.shader.uniforms.majorAxis=o,o[t]=r[1][t]-r[0][t],this.shader.uniforms.minorAxis=o;var u=f(c,n);u[t]+=r[0][t],this.shader.uniforms.offset=u;var p=h(l);p[e]=1,this.shader.uniforms.screenAxis=p,this.shader.uniforms.lineWidth=i,this.shader.uniforms.color=a,this.vao.draw(this.gl.TRIANGLES,6)},d.dispose=function(){this.vao.dispose(),this.vertBuffer.dispose(),this.shader.dispose()}},{"./shaders":240,"gl-buffer":244,"gl-vao":329}],240:[function(t,e,r){"use strict";var n=t("glslify"),a=t("gl-shader"),i=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\n\nuniform mat4 model, view, projection;\nuniform vec3 offset, majorAxis, minorAxis, screenAxis;\nuniform float lineWidth;\nuniform vec2 screenShape;\n\nvec3 project(vec3 p) {\n vec4 pp = projection * view * model * vec4(p, 1.0);\n return pp.xyz / max(pp.w, 0.0001);\n}\n\nvoid main() {\n vec3 major = position.x * majorAxis;\n vec3 minor = position.y * minorAxis;\n\n vec3 vPosition = major + minor + offset;\n vec3 pPosition = project(vPosition);\n vec3 offset = project(vPosition + screenAxis * position.z);\n\n vec2 screen = normalize((offset - pPosition).xy * screenShape) / screenShape;\n\n gl_Position = vec4(pPosition + vec3(0.5 * screen * lineWidth, 0), 1.0);\n}\n"]),o=n(["precision highp float;\n#define GLSLIFY 1\n\nuniform vec4 color;\nvoid main() {\n gl_FragColor = color;\n}"]);r.line=function(t){return a(t,i,o,null,[{name:"position",type:"vec3"}])};var s=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\n\nuniform mat4 model, view, projection;\nuniform vec3 offset, axis, alignDir, alignOpt;\nuniform float scale, angle, pixelScale;\nuniform vec2 resolution;\n\nvec3 project(vec3 p) {\n vec4 pp = projection * view * model * vec4(p, 1.0);\n return pp.xyz / max(pp.w, 0.0001);\n}\n\nfloat computeViewAngle(vec3 a, vec3 b) {\n vec3 A = project(a);\n vec3 B = project(b);\n\n return atan(\n (B.y - A.y) * resolution.y,\n (B.x - A.x) * resolution.x\n );\n}\n\nconst float PI = 3.141592;\nconst float TWO_PI = 2.0 * PI;\nconst float HALF_PI = 0.5 * PI;\nconst float ONE_AND_HALF_PI = 1.5 * PI;\n\nint option = int(floor(alignOpt.x + 0.001));\nfloat hv_ratio = alignOpt.y;\nbool enableAlign = (alignOpt.z != 0.0);\n\nfloat mod_angle(float a) {\n return mod(a, PI);\n}\n\nfloat positive_angle(float a) {\n return mod_angle((a < 0.0) ?\n a + TWO_PI :\n a\n );\n}\n\nfloat look_upwards(float a) {\n float b = positive_angle(a);\n return ((b > HALF_PI) && (b <= ONE_AND_HALF_PI)) ?\n b - PI :\n b;\n}\n\nfloat look_horizontal_or_vertical(float a, float ratio) {\n // ratio controls the ratio between being horizontal to (vertical + horizontal)\n // if ratio is set to 0.5 then it is 50%, 50%.\n // when using a higher ratio e.g. 0.75 the result would\n // likely be more horizontal than vertical.\n\n float b = positive_angle(a);\n\n return\n (b < ( ratio) * HALF_PI) ? 0.0 :\n (b < (2.0 - ratio) * HALF_PI) ? -HALF_PI :\n (b < (2.0 + ratio) * HALF_PI) ? 0.0 :\n (b < (4.0 - ratio) * HALF_PI) ? HALF_PI :\n 0.0;\n}\n\nfloat roundTo(float a, float b) {\n return float(b * floor((a + 0.5 * b) / b));\n}\n\nfloat look_round_n_directions(float a, int n) {\n float b = positive_angle(a);\n float div = TWO_PI / float(n);\n float c = roundTo(b, div);\n return look_upwards(c);\n}\n\nfloat applyAlignOption(float rawAngle, float delta) {\n return\n (option > 2) ? look_round_n_directions(rawAngle + delta, option) : // option 3-n: round to n directions\n (option == 2) ? look_horizontal_or_vertical(rawAngle + delta, hv_ratio) : // horizontal or vertical\n (option == 1) ? rawAngle + delta : // use free angle, and flip to align with one direction of the axis\n (option == 0) ? look_upwards(rawAngle) : // use free angle, and stay upwards\n (option ==-1) ? 0.0 : // useful for backward compatibility, all texts remains horizontal\n rawAngle; // otherwise return back raw input angle\n}\n\nbool isAxisTitle = (axis.x == 0.0) &&\n (axis.y == 0.0) &&\n (axis.z == 0.0);\n\nvoid main() {\n //Compute world offset\n float axisDistance = position.z;\n vec3 dataPosition = axisDistance * axis + offset;\n\n float beta = angle; // i.e. user defined attributes for each tick\n\n float axisAngle;\n float clipAngle;\n float flip;\n\n if (enableAlign) {\n axisAngle = (isAxisTitle) ? HALF_PI :\n computeViewAngle(dataPosition, dataPosition + axis);\n clipAngle = computeViewAngle(dataPosition, dataPosition + alignDir);\n\n axisAngle += (sin(axisAngle) < 0.0) ? PI : 0.0;\n clipAngle += (sin(clipAngle) < 0.0) ? PI : 0.0;\n\n flip = (dot(vec2(cos(axisAngle), sin(axisAngle)),\n vec2(sin(clipAngle),-cos(clipAngle))) > 0.0) ? 1.0 : 0.0;\n\n beta += applyAlignOption(clipAngle, flip * PI);\n }\n\n //Compute plane offset\n vec2 planeCoord = position.xy * pixelScale;\n\n mat2 planeXform = scale * mat2(\n cos(beta), sin(beta),\n -sin(beta), cos(beta)\n );\n\n vec2 viewOffset = 2.0 * planeXform * planeCoord / resolution;\n\n //Compute clip position\n vec3 clipPosition = project(dataPosition);\n\n //Apply text offset in clip coordinates\n clipPosition += vec3(viewOffset, 0.0);\n\n //Done\n gl_Position = vec4(clipPosition, 1.0);\n}"]),l=n(["precision highp float;\n#define GLSLIFY 1\n\nuniform vec4 color;\nvoid main() {\n gl_FragColor = color;\n}"]);r.text=function(t){return a(t,s,l,null,[{name:"position",type:"vec3"}])};var c=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec3 normal;\n\nuniform mat4 model, view, projection;\nuniform vec3 enable;\nuniform vec3 bounds[2];\n\nvarying vec3 colorChannel;\n\nvoid main() {\n\n vec3 signAxis = sign(bounds[1] - bounds[0]);\n\n vec3 realNormal = signAxis * normal;\n\n if(dot(realNormal, enable) > 0.0) {\n vec3 minRange = min(bounds[0], bounds[1]);\n vec3 maxRange = max(bounds[0], bounds[1]);\n vec3 nPosition = mix(minRange, maxRange, 0.5 * (position + 1.0));\n gl_Position = projection * view * model * vec4(nPosition, 1.0);\n } else {\n gl_Position = vec4(0,0,0,0);\n }\n\n colorChannel = abs(realNormal);\n}"]),u=n(["precision highp float;\n#define GLSLIFY 1\n\nuniform vec4 colors[3];\n\nvarying vec3 colorChannel;\n\nvoid main() {\n gl_FragColor = colorChannel.x * colors[0] +\n colorChannel.y * colors[1] +\n colorChannel.z * colors[2];\n}"]);r.bg=function(t){return a(t,c,u,null,[{name:"position",type:"vec3"},{name:"normal",type:"vec3"}])}},{"gl-shader":304,glslify:410}],241:[function(t,e,r){(function(r){"use strict";e.exports=function(t,e,r,i,s,l){var u=n(t),h=a(t,[{buffer:u,size:3}]),f=o(t);f.attributes.position.location=0;var p=new c(t,f,u,h);return p.update(e,r,i,s,l),p};var n=t("gl-buffer"),a=t("gl-vao"),i=t("vectorize-text"),o=t("./shaders").text,s=window||r.global||{},l=s.__TEXT_CACHE||{};s.__TEXT_CACHE={};function c(t,e,r,n){this.gl=t,this.shader=e,this.buffer=r,this.vao=n,this.tickOffset=this.tickCount=this.labelOffset=this.labelCount=null}var u=c.prototype,h=[0,0];u.bind=function(t,e,r,n){this.vao.bind(),this.shader.bind();var a=this.shader.uniforms;a.model=t,a.view=e,a.projection=r,a.pixelScale=n,h[0]=this.gl.drawingBufferWidth,h[1]=this.gl.drawingBufferHeight,this.shader.uniforms.resolution=h},u.unbind=function(){this.vao.unbind()},u.update=function(t,e,r,n,a){var o=[];function s(t,e,r,n,a,s){var c=l[r];c||(c=l[r]={});var u=c[e];u||(u=c[e]=function(t,e){try{return i(t,e)}catch(e){return console.warn('error vectorizing text:"'+t+'" error:',e),{cells:[],positions:[]}}}(e,{triangles:!0,font:r,textAlign:"center",textBaseline:"middle",lineSpacing:a,styletags:s}));for(var h=(n||12)/12,f=u.positions,p=u.cells,d=0,g=p.length;d<g;++d)for(var v=p[d],m=2;m>=0;--m){var y=f[v[m]];o.push(h*y[0],-h*y[1],t)}}for(var c=[0,0,0],u=[0,0,0],h=[0,0,0],f=[0,0,0],p={breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},d=0;d<3;++d){h[d]=o.length/3|0,s(.5*(t[0][d]+t[1][d]),e[d],r[d],12,1.25,p),f[d]=(o.length/3|0)-h[d],c[d]=o.length/3|0;for(var g=0;g<n[d].length;++g)n[d][g].text&&s(n[d][g].x,n[d][g].text,n[d][g].font||a,n[d][g].fontSize||12,1.25,p);u[d]=(o.length/3|0)-c[d]}this.buffer.update(o),this.tickOffset=c,this.tickCount=u,this.labelOffset=h,this.labelCount=f},u.drawTicks=function(t,e,r,n,a,i,o,s){this.tickCount[t]&&(this.shader.uniforms.axis=i,this.shader.uniforms.color=a,this.shader.uniforms.angle=r,this.shader.uniforms.scale=e,this.shader.uniforms.offset=n,this.shader.uniforms.alignDir=o,this.shader.uniforms.alignOpt=s,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t]))},u.drawLabel=function(t,e,r,n,a,i,o,s){this.labelCount[t]&&(this.shader.uniforms.axis=i,this.shader.uniforms.color=a,this.shader.uniforms.angle=r,this.shader.uniforms.scale=e,this.shader.uniforms.offset=n,this.shader.uniforms.alignDir=o,this.shader.uniforms.alignOpt=s,this.vao.draw(this.gl.TRIANGLES,this.labelCount[t],this.labelOffset[t]))},u.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()}}).call(this,t("_process"))},{"./shaders":240,_process:483,"gl-buffer":244,"gl-vao":329,"vectorize-text":548}],242:[function(t,e,r){"use strict";function n(t,e){var r=t+"",n=r.indexOf("."),a=0;n>=0&&(a=r.length-n-1);var i=Math.pow(10,a),o=Math.round(t*e*i),s=o+"";if(s.indexOf("e")>=0)return s;var l=o/i,c=o%i;o<0?(l=0|-Math.ceil(l),c=0|-c):(l=0|Math.floor(l),c|=0);var u=""+l;if(o<0&&(u="-"+u),a){for(var h=""+c;h.length<a;)h="0"+h;return u+"."+h}return u}r.create=function(t,e){for(var r=[],a=0;a<3;++a){for(var i=[],o=(t[0][a],t[1][a],0);o*e[a]<=t[1][a];++o)i.push({x:o*e[a],text:n(e[a],o)});for(var o=-1;o*e[a]>=t[0][a];--o)i.push({x:o*e[a],text:n(e[a],o)});r.push(i)}return r},r.equal=function(t,e){for(var r=0;r<3;++r){if(t[r].length!==e[r].length)return!1;for(var n=0;n<t[r].length;++n){var a=t[r][n],i=e[r][n];if(a.x!==i.x||a.text!==i.text||a.font!==i.font||a.fontColor!==i.fontColor||a.fontSize!==i.fontSize||a.dx!==i.dx||a.dy!==i.dy)return!1}}return!0}},{}],243:[function(t,e,r){"use strict";e.exports=function(t,e,r,l,h){var f=e.model||c,p=e.view||c,m=e.projection||c,y=e._ortho||!1,x=t.bounds,b=(h=h||i(f,p,m,x,y)).axis;o(u,p,f),o(u,m,u);for(var _=g,w=0;w<3;++w)_[w].lo=1/0,_[w].hi=-1/0,_[w].pixelsPerDataUnit=1/0;var k=n(s(u,u));s(u,u);for(var T=0;T<3;++T){var M=(T+1)%3,A=(T+2)%3,S=v;t:for(var w=0;w<2;++w){var E=[];if(b[T]<0!=!!w){S[T]=x[w][T];for(var L=0;L<2;++L){S[M]=x[L^w][M];for(var C=0;C<2;++C)S[A]=x[C^L^w][A],E.push(S.slice())}for(var P=y?5:4,L=P;L===P;++L){if(0===E.length)continue t;E=a.positive(E,k[L])}for(var L=0;L<E.length;++L)for(var A=E[L],O=d(v,u,A,r,l),C=0;C<3;++C)_[C].lo=Math.min(_[C].lo,A[C]),_[C].hi=Math.max(_[C].hi,A[C]),C!==T&&(_[C].pixelsPerDataUnit=Math.min(_[C].pixelsPerDataUnit,Math.abs(O[C])))}}}return _};var n=t("extract-frustum-planes"),a=t("split-polygon"),i=t("./lib/cube.js"),o=t("gl-mat4/multiply"),s=t("gl-mat4/transpose"),l=t("gl-vec4/transformMat4"),c=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),u=new Float32Array(16);function h(t,e,r){this.lo=t,this.hi=e,this.pixelsPerDataUnit=r}var f=[0,0,0,1],p=[0,0,0,1];function d(t,e,r,n,a){for(var i=0;i<3;++i){for(var o=f,s=p,c=0;c<3;++c)s[c]=o[c]=r[c];s[3]=o[3]=1,s[i]+=1,l(s,s,e),s[3]<0&&(t[i]=1/0),o[i]-=1,l(o,o,e),o[3]<0&&(t[i]=1/0);var u=(o[0]/o[3]-s[0]/s[3])*n,h=(o[1]/o[3]-s[1]/s[3])*a;t[i]=.25*Math.sqrt(u*u+h*h)}return t}var g=[new h(1/0,-1/0,1/0),new h(1/0,-1/0,1/0),new h(1/0,-1/0,1/0)],v=[0,0,0]},{"./lib/cube.js":238,"extract-frustum-planes":227,"gl-mat4/multiply":270,"gl-mat4/transpose":279,"gl-vec4/transformMat4":400,"split-polygon":525}],244:[function(t,e,r){"use strict";var n=t("typedarray-pool"),a=t("ndarray-ops"),i=t("ndarray"),o=["uint8","uint8_clamped","uint16","uint32","int8","int16","int32","float32"];function s(t,e,r,n,a){this.gl=t,this.type=e,this.handle=r,this.length=n,this.usage=a}var l=s.prototype;function c(t,e,r,n,a,i){var o=a.length*a.BYTES_PER_ELEMENT;if(i<0)return t.bufferData(e,a,n),o;if(o+i>r)throw new Error("gl-buffer: If resizing buffer, must not specify offset");return t.bufferSubData(e,i,a),r}function u(t,e){for(var r=n.malloc(t.length,e),a=t.length,i=0;i<a;++i)r[i]=t[i];return r}l.bind=function(){this.gl.bindBuffer(this.type,this.handle)},l.unbind=function(){this.gl.bindBuffer(this.type,null)},l.dispose=function(){this.gl.deleteBuffer(this.handle)},l.update=function(t,e){if("number"!=typeof e&&(e=-1),this.bind(),"object"==typeof t&&"undefined"!=typeof t.shape){var r=t.dtype;if(o.indexOf(r)<0&&(r="float32"),this.type===this.gl.ELEMENT_ARRAY_BUFFER)r=gl.getExtension("OES_element_index_uint")&&"uint16"!==r?"uint32":"uint16";if(r===t.dtype&&function(t,e){for(var r=1,n=e.length-1;n>=0;--n){if(e[n]!==r)return!1;r*=t[n]}return!0}(t.shape,t.stride))0===t.offset&&t.data.length===t.shape[0]?this.length=c(this.gl,this.type,this.length,this.usage,t.data,e):this.length=c(this.gl,this.type,this.length,this.usage,t.data.subarray(t.offset,t.shape[0]),e);else{var s=n.malloc(t.size,r),l=i(s,t.shape);a.assign(l,t),this.length=c(this.gl,this.type,this.length,this.usage,e<0?s:s.subarray(0,t.size),e),n.free(s)}}else if(Array.isArray(t)){var h;h=this.type===this.gl.ELEMENT_ARRAY_BUFFER?u(t,"uint16"):u(t,"float32"),this.length=c(this.gl,this.type,this.length,this.usage,e<0?h:h.subarray(0,t.length),e),n.free(h)}else if("object"==typeof t&&"number"==typeof t.length)this.length=c(this.gl,this.type,this.length,this.usage,t,e);else{if("number"!=typeof t&&void 0!==t)throw new Error("gl-buffer: Invalid data type");if(e>=0)throw new Error("gl-buffer: Cannot specify offset when resizing buffer");(t|=0)<=0&&(t=1),this.gl.bufferData(this.type,0|t,this.usage),this.length=t}},e.exports=function(t,e,r,n){if(r=r||t.ARRAY_BUFFER,n=n||t.DYNAMIC_DRAW,r!==t.ARRAY_BUFFER&&r!==t.ELEMENT_ARRAY_BUFFER)throw new Error("gl-buffer: Invalid type for webgl buffer, must be either gl.ARRAY_BUFFER or gl.ELEMENT_ARRAY_BUFFER");if(n!==t.DYNAMIC_DRAW&&n!==t.STATIC_DRAW&&n!==t.STREAM_DRAW)throw new Error("gl-buffer: Invalid usage for buffer, must be either gl.DYNAMIC_DRAW, gl.STATIC_DRAW or gl.STREAM_DRAW");var a=t.createBuffer(),i=new s(t,r,a,0,n);return i.update(e),i}},{ndarray:451,"ndarray-ops":445,"typedarray-pool":543}],245:[function(t,e,r){"use strict";var n=t("gl-vec3");e.exports=function(t,e){var r=t.positions,a=t.vectors,i={positions:[],vertexIntensity:[],vertexIntensityBounds:t.vertexIntensityBounds,vectors:[],cells:[],coneOffset:t.coneOffset,colormap:t.colormap};if(0===t.positions.length)return e&&(e[0]=[0,0,0],e[1]=[0,0,0]),i;for(var o=0,s=1/0,l=-1/0,c=1/0,u=-1/0,h=1/0,f=-1/0,p=null,d=null,g=[],v=1/0,m=!1,y=0;y<r.length;y++){var x=r[y];s=Math.min(x[0],s),l=Math.max(x[0],l),c=Math.min(x[1],c),u=Math.max(x[1],u),h=Math.min(x[2],h),f=Math.max(x[2],f);var b=a[y];if(n.length(b)>o&&(o=n.length(b)),y){var _=2*n.distance(p,x)/(n.length(d)+n.length(b));_?(v=Math.min(v,_),m=!1):m=!0}m||(p=x,d=b),g.push(b)}var w=[s,c,h],k=[l,u,f];e&&(e[0]=w,e[1]=k),0===o&&(o=1);var T=1/o;isFinite(v)||(v=1),i.vectorScale=v;var M=t.coneSize||.5;t.absoluteConeSize&&(M=t.absoluteConeSize*T),i.coneScale=M;y=0;for(var A=0;y<r.length;y++)for(var S=(x=r[y])[0],E=x[1],L=x[2],C=g[y],P=n.length(C)*T,O=0;O<8;O++){i.positions.push([S,E,L,A++]),i.positions.push([S,E,L,A++]),i.positions.push([S,E,L,A++]),i.positions.push([S,E,L,A++]),i.positions.push([S,E,L,A++]),i.positions.push([S,E,L,A++]),i.vectors.push(C),i.vectors.push(C),i.vectors.push(C),i.vectors.push(C),i.vectors.push(C),i.vectors.push(C),i.vertexIntensity.push(P,P,P),i.vertexIntensity.push(P,P,P);var z=i.positions.length;i.cells.push([z-6,z-5,z-4],[z-3,z-2,z-1])}return i};var a=t("./lib/shaders");e.exports.createMesh=t("./create_mesh"),e.exports.createConeMesh=function(t,r){return e.exports.createMesh(t,r,{shaders:a,traceType:"cone"})}},{"./create_mesh":246,"./lib/shaders":247,"gl-vec3":348}],246:[function(t,e,r){"use strict";var n=t("gl-shader"),a=t("gl-buffer"),i=t("gl-vao"),o=t("gl-texture2d"),s=t("gl-mat4/multiply"),l=t("gl-mat4/invert"),c=t("ndarray"),u=t("colormap"),h=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function f(t,e,r,n,a,i,o,s,l,c,u){this.gl=t,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=r,this.pickShader=n,this.trianglePositions=a,this.triangleVectors=i,this.triangleColors=s,this.triangleUVs=l,this.triangleIds=o,this.triangleVAO=c,this.triangleCount=0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.traceType=u,this.tubeScale=1,this.coneScale=2,this.vectorScale=1,this.coneOffset=.25,this._model=h,this._view=h,this._projection=h,this._resolution=[1,1]}var p=f.prototype;p.isOpaque=function(){return this.opacity>=1},p.isTransparent=function(){return this.opacity<1},p.pickSlots=1,p.setPickBase=function(t){this.pickId=t},p.update=function(t){t=t||{};var e=this.gl;this.dirty=!0,"lightPosition"in t&&(this.lightPosition=t.lightPosition),"opacity"in t&&(this.opacity=t.opacity),"ambient"in t&&(this.ambientLight=t.ambient),"diffuse"in t&&(this.diffuseLight=t.diffuse),"specular"in t&&(this.specularLight=t.specular),"roughness"in t&&(this.roughness=t.roughness),"fresnel"in t&&(this.fresnel=t.fresnel),void 0!==t.tubeScale&&(this.tubeScale=t.tubeScale),void 0!==t.vectorScale&&(this.vectorScale=t.vectorScale),void 0!==t.coneScale&&(this.coneScale=t.coneScale),void 0!==t.coneOffset&&(this.coneOffset=t.coneOffset),t.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=e.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=e.LINEAR,this.texture.setPixels(function(t){for(var e=u({colormap:t,nshades:256,format:"rgba"}),r=new Uint8Array(1024),n=0;n<256;++n){for(var a=e[n],i=0;i<3;++i)r[4*n+i]=a[i];r[4*n+3]=255*a[3]}return c(r,[256,256,4],[4,0,1])}(t.colormap)),this.texture.generateMipmap());var r=t.cells,n=t.positions,a=t.vectors;if(n&&r&&a){var i=[],o=[],s=[],l=[],h=[];this.cells=r,this.positions=n,this.vectors=a;var f=t.meshColor||[1,1,1,1],p=t.vertexIntensity,d=1/0,g=-1/0;if(p)if(t.vertexIntensityBounds)d=+t.vertexIntensityBounds[0],g=+t.vertexIntensityBounds[1];else for(var v=0;v<p.length;++v){var m=p[v];d=Math.min(d,m),g=Math.max(g,m)}else for(v=0;v<n.length;++v){m=n[v][2];d=Math.min(d,m),g=Math.max(g,m)}this.intensity=p||function(t){for(var e=t.length,r=new Array(e),n=0;n<e;++n)r[n]=t[n][2];return r}(n),this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(v=0;v<n.length;++v)for(var y=n[v],x=0;x<3;++x)!isNaN(y[x])&&isFinite(y[x])&&(this.bounds[0][x]=Math.min(this.bounds[0][x],y[x]),this.bounds[1][x]=Math.max(this.bounds[1][x],y[x]));var b=0;t:for(v=0;v<r.length;++v){var _=r[v];switch(_.length){case 3:for(x=0;x<3;++x){y=n[k=_[x]];for(var w=0;w<3;++w)if(isNaN(y[w])||!isFinite(y[w]))continue t}for(x=0;x<3;++x){var k;y=n[k=_[2-x]];i.push(y[0],y[1],y[2],y[3]);var T=a[k];o.push(T[0],T[1],T[2],T[3]||0);var M,A=f;3===A.length?s.push(A[0],A[1],A[2],1):s.push(A[0],A[1],A[2],A[3]),M=p?[(p[k]-d)/(g-d),0]:[(y[2]-d)/(g-d),0],l.push(M[0],M[1]),h.push(v)}b+=1}}this.triangleCount=b,this.trianglePositions.update(i),this.triangleVectors.update(o),this.triangleColors.update(s),this.triangleUVs.update(l),this.triangleIds.update(new Uint32Array(h))}},p.drawTransparent=p.draw=function(t){t=t||{};for(var e=this.gl,r=t.model||h,n=t.view||h,a=t.projection||h,i=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)i[0][o]=Math.max(i[0][o],this.clipBounds[0][o]),i[1][o]=Math.min(i[1][o],this.clipBounds[1][o]);var c={model:r,view:n,projection:a,inverseModel:h.slice(),clipBounds:i,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],opacity:this.opacity,tubeScale:this.tubeScale,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,texture:0};c.inverseModel=l(c.inverseModel,c.model),e.disable(e.CULL_FACE),this.texture.bind(0);var u=new Array(16);s(u,c.view,c.model),s(u,c.projection,u),l(u,u);for(o=0;o<3;++o)c.eyePosition[o]=u[12+o]/u[15];var f=u[15];for(o=0;o<3;++o)f+=this.lightPosition[o]*u[4*o+3];for(o=0;o<3;++o){for(var p=u[12+o],d=0;d<3;++d)p+=u[4*d+o]*this.lightPosition[d];c.lightPosition[o]=p/f}if(this.triangleCount>0){var g=this.triShader;g.bind(),g.uniforms=c,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()}},p.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||h,n=t.view||h,a=t.projection||h,i=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)i[0][o]=Math.max(i[0][o],this.clipBounds[0][o]),i[1][o]=Math.min(i[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(a),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s={model:r,view:n,projection:a,clipBounds:i,tubeScale:this.tubeScale,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,pickId:this.pickId/255},l=this.pickShader;l.bind(),l.uniforms=s,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind())},p.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions[r[1]].slice(0,3),a={position:n,dataCoordinate:n,index:Math.floor(r[1]/48)};return"cone"===this.traceType?a.index=Math.floor(r[1]/48):"streamtube"===this.traceType&&(a.intensity=this.intensity[r[1]],a.velocity=this.vectors[r[1]].slice(0,3),a.divergence=this.vectors[r[1]][3],a.index=e),a},p.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.pickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleVectors.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleIds.dispose()},e.exports=function(t,e,r){var s=r.shaders;1===arguments.length&&(t=(e=t).gl);var l=function(t,e){var r=n(t,e.meshShader.vertex,e.meshShader.fragment,null,e.meshShader.attributes);return r.attributes.position.location=0,r.attributes.color.location=2,r.attributes.uv.location=3,r.attributes.vector.location=4,r}(t,s),u=function(t,e){var r=n(t,e.pickShader.vertex,e.pickShader.fragment,null,e.pickShader.attributes);return r.attributes.position.location=0,r.attributes.id.location=1,r.attributes.vector.location=4,r}(t,s),h=o(t,c(new Uint8Array([255,255,255,255]),[1,1,4]));h.generateMipmap(),h.minFilter=t.LINEAR_MIPMAP_LINEAR,h.magFilter=t.LINEAR;var p=a(t),d=a(t),g=a(t),v=a(t),m=a(t),y=new f(t,h,l,u,p,d,m,g,v,i(t,[{buffer:p,type:t.FLOAT,size:4},{buffer:m,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:g,type:t.FLOAT,size:4},{buffer:v,type:t.FLOAT,size:2},{buffer:d,type:t.FLOAT,size:4}]),r.traceType||"cone");return y.update(e),y}},{colormap:128,"gl-buffer":244,"gl-mat4/invert":268,"gl-mat4/multiply":270,"gl-shader":304,"gl-texture2d":324,"gl-vao":329,ndarray:451}],247:[function(t,e,r){var n=t("glslify"),a=n(["precision highp float;\n\nprecision highp float;\n#define GLSLIFY 1\n\nvec3 getOrthogonalVector(vec3 v) {\n // Return up-vector for only-z vector.\n // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\n // From the above if-statement we have ||a|| > 0 U ||b|| > 0.\n // Assign z = 0, x = -b, y = a:\n // a*-b + b*a + c*0 = -ba + ba + 0 = 0\n if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\n return normalize(vec3(-v.y, v.x, 0.0));\n } else {\n return normalize(vec3(0.0, v.z, -v.y));\n }\n}\n\n// Calculate the cone vertex and normal at the given index.\n//\n// The returned vertex is for a cone with its top at origin and height of 1.0,\n// pointing in the direction of the vector attribute.\n//\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\n// These vertices are used to make up the triangles of the cone by the following:\n// segment + 0 top vertex\n// segment + 1 perimeter vertex a+1\n// segment + 2 perimeter vertex a\n// segment + 3 center base vertex\n// segment + 4 perimeter vertex a\n// segment + 5 perimeter vertex a+1\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\n// To go from index to segment, floor(index / 6)\n// To go from segment to angle, 2*pi * (segment/segmentCount)\n// To go from index to segment index, index - (segment*6)\n//\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\n\n const float segmentCount = 8.0;\n\n float index = rawIndex - floor(rawIndex /\n (segmentCount * 6.0)) *\n (segmentCount * 6.0);\n\n float segment = floor(0.001 + index/6.0);\n float segmentIndex = index - (segment*6.0);\n\n normal = -normalize(d);\n\n if (segmentIndex > 2.99 && segmentIndex < 3.01) {\n return mix(vec3(0.0), -d, coneOffset);\n }\n\n float nextAngle = (\n (segmentIndex > 0.99 && segmentIndex < 1.01) ||\n (segmentIndex > 4.99 && segmentIndex < 5.01)\n ) ? 1.0 : 0.0;\n float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\n\n vec3 v1 = mix(d, vec3(0.0), coneOffset);\n vec3 v2 = v1 - d;\n\n vec3 u = getOrthogonalVector(d);\n vec3 v = normalize(cross(u, d));\n\n vec3 x = u * cos(angle) * length(d)*0.25;\n vec3 y = v * sin(angle) * length(d)*0.25;\n vec3 v3 = v2 + x + y;\n if (segmentIndex < 3.0) {\n vec3 tx = u * sin(angle);\n vec3 ty = v * -cos(angle);\n vec3 tangent = tx + ty;\n normal = normalize(cross(v3 - v1, tangent));\n }\n\n if (segmentIndex == 0.0) {\n return mix(d, vec3(0.0), coneOffset);\n }\n return v3;\n}\n\nattribute vec3 vector;\nattribute vec4 color, position;\nattribute vec2 uv;\n\nuniform float vectorScale, coneScale, coneOffset;\nuniform mat4 model, view, projection, inverseModel;\nuniform vec3 eyePosition, lightPosition;\n\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n // Scale the vector magnitude to stay constant with\n // model & view changes.\n vec3 normal;\n vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector), position.w, coneOffset, normal);\n vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\n\n //Lighting geometry parameters\n vec4 cameraCoordinate = view * conePosition;\n cameraCoordinate.xyz /= cameraCoordinate.w;\n f_lightDirection = lightPosition - cameraCoordinate.xyz;\n f_eyeDirection = eyePosition - cameraCoordinate.xyz;\n f_normal = normalize((vec4(normal, 0.0) * inverseModel).xyz);\n\n // vec4 m_position = model * vec4(conePosition, 1.0);\n vec4 t_position = view * conePosition;\n gl_Position = projection * t_position;\n\n f_color = color;\n f_data = conePosition.xyz;\n f_position = position.xyz;\n f_uv = uv;\n}\n"]),i=n(["#extension GL_OES_standard_derivatives : enable\n\nprecision highp float;\n#define GLSLIFY 1\n\nfloat beckmannDistribution(float x, float roughness) {\n float NdotH = max(x, 0.0001);\n float cos2Alpha = NdotH * NdotH;\n float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n float roughness2 = roughness * roughness;\n float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n return exp(tan2Alpha / roughness2) / denom;\n}\n\nfloat cookTorranceSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float roughness,\n float fresnel) {\n\n float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\n float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\n\n //Half angle vector\n vec3 H = normalize(lightDirection + viewDirection);\n\n //Geometric term\n float NdotH = max(dot(surfaceNormal, H), 0.0);\n float VdotH = max(dot(viewDirection, H), 0.000001);\n float LdotH = max(dot(lightDirection, H), 0.000001);\n float G1 = (2.0 * NdotH * VdotN) / VdotH;\n float G2 = (2.0 * NdotH * LdotN) / LdotH;\n float G = min(1.0, min(G1, G2));\n \n //Distribution term\n float D = beckmannDistribution(NdotH, roughness);\n\n //Fresnel term\n float F = pow(1.0 - VdotN, fresnel);\n\n //Multiply terms and done\n return G * F * D / max(3.14159265 * VdotN, 0.000001);\n}\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\nuniform sampler2D texture;\n\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n vec3 N = normalize(f_normal);\n vec3 L = normalize(f_lightDirection);\n vec3 V = normalize(f_eyeDirection);\n\n if(gl_FrontFacing) {\n N = -N;\n }\n\n float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\n float diffuse = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n vec4 surfaceColor = f_color * texture2D(texture, f_uv);\n vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular, 1.0);\n\n gl_FragColor = litColor * opacity;\n}\n"]),o=n(["precision highp float;\n\nprecision highp float;\n#define GLSLIFY 1\n\nvec3 getOrthogonalVector(vec3 v) {\n // Return up-vector for only-z vector.\n // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\n // From the above if-statement we have ||a|| > 0 U ||b|| > 0.\n // Assign z = 0, x = -b, y = a:\n // a*-b + b*a + c*0 = -ba + ba + 0 = 0\n if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\n return normalize(vec3(-v.y, v.x, 0.0));\n } else {\n return normalize(vec3(0.0, v.z, -v.y));\n }\n}\n\n// Calculate the cone vertex and normal at the given index.\n//\n// The returned vertex is for a cone with its top at origin and height of 1.0,\n// pointing in the direction of the vector attribute.\n//\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\n// These vertices are used to make up the triangles of the cone by the following:\n// segment + 0 top vertex\n// segment + 1 perimeter vertex a+1\n// segment + 2 perimeter vertex a\n// segment + 3 center base vertex\n// segment + 4 perimeter vertex a\n// segment + 5 perimeter vertex a+1\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\n// To go from index to segment, floor(index / 6)\n// To go from segment to angle, 2*pi * (segment/segmentCount)\n// To go from index to segment index, index - (segment*6)\n//\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\n\n const float segmentCount = 8.0;\n\n float index = rawIndex - floor(rawIndex /\n (segmentCount * 6.0)) *\n (segmentCount * 6.0);\n\n float segment = floor(0.001 + index/6.0);\n float segmentIndex = index - (segment*6.0);\n\n normal = -normalize(d);\n\n if (segmentIndex > 2.99 && segmentIndex < 3.01) {\n return mix(vec3(0.0), -d, coneOffset);\n }\n\n float nextAngle = (\n (segmentIndex > 0.99 && segmentIndex < 1.01) ||\n (segmentIndex > 4.99 && segmentIndex < 5.01)\n ) ? 1.0 : 0.0;\n float angle = 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\n\n vec3 v1 = mix(d, vec3(0.0), coneOffset);\n vec3 v2 = v1 - d;\n\n vec3 u = getOrthogonalVector(d);\n vec3 v = normalize(cross(u, d));\n\n vec3 x = u * cos(angle) * length(d)*0.25;\n vec3 y = v * sin(angle) * length(d)*0.25;\n vec3 v3 = v2 + x + y;\n if (segmentIndex < 3.0) {\n vec3 tx = u * sin(angle);\n vec3 ty = v * -cos(angle);\n vec3 tangent = tx + ty;\n normal = normalize(cross(v3 - v1, tangent));\n }\n\n if (segmentIndex == 0.0) {\n return mix(d, vec3(0.0), coneOffset);\n }\n return v3;\n}\n\nattribute vec4 vector;\nattribute vec4 position;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\nuniform float vectorScale, coneScale, coneOffset;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n vec3 normal;\n vec3 XYZ = getConePosition(mat3(model) * ((vectorScale * coneScale) * vector.xyz), position.w, coneOffset, normal);\n vec4 conePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\n gl_Position = projection * view * conePosition;\n f_id = id;\n f_position = position.xyz;\n}\n"]),s=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float pickId;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n\n gl_FragColor = vec4(pickId, f_id.xyz);\n}"]);r.meshShader={vertex:a,fragment:i,attributes:[{name:"position",type:"vec4"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"},{name:"vector",type:"vec3"}]},r.pickShader={vertex:o,fragment:s,attributes:[{name:"position",type:"vec4"},{name:"id",type:"vec4"},{name:"vector",type:"vec3"}]}},{glslify:410}],248:[function(t,e,r){e.exports={0:"NONE",1:"ONE",2:"LINE_LOOP",3:"LINE_STRIP",4:"TRIANGLES",5:"TRIANGLE_STRIP",6:"TRIANGLE_FAN",256:"DEPTH_BUFFER_BIT",512:"NEVER",513:"LESS",514:"EQUAL",515:"LEQUAL",516:"GREATER",517:"NOTEQUAL",518:"GEQUAL",519:"ALWAYS",768:"SRC_COLOR",769:"ONE_MINUS_SRC_COLOR",770:"SRC_ALPHA",771:"ONE_MINUS_SRC_ALPHA",772:"DST_ALPHA",773:"ONE_MINUS_DST_ALPHA",774:"DST_COLOR",775:"ONE_MINUS_DST_COLOR",776:"SRC_ALPHA_SATURATE",1024:"STENCIL_BUFFER_BIT",1028:"FRONT",1029:"BACK",1032:"FRONT_AND_BACK",1280:"INVALID_ENUM",1281:"INVALID_VALUE",1282:"INVALID_OPERATION",1285:"OUT_OF_MEMORY",1286:"INVALID_FRAMEBUFFER_OPERATION",2304:"CW",2305:"CCW",2849:"LINE_WIDTH",2884:"CULL_FACE",2885:"CULL_FACE_MODE",2886:"FRONT_FACE",2928:"DEPTH_RANGE",2929:"DEPTH_TEST",2930:"DEPTH_WRITEMASK",2931:"DEPTH_CLEAR_VALUE",2932:"DEPTH_FUNC",2960:"STENCIL_TEST",2961:"STENCIL_CLEAR_VALUE",2962:"STENCIL_FUNC",2963:"STENCIL_VALUE_MASK",2964:"STENCIL_FAIL",2965:"STENCIL_PASS_DEPTH_FAIL",2966:"STENCIL_PASS_DEPTH_PASS",2967:"STENCIL_REF",2968:"STENCIL_WRITEMASK",2978:"VIEWPORT",3024:"DITHER",3042:"BLEND",3088:"SCISSOR_BOX",3089:"SCISSOR_TEST",3106:"COLOR_CLEAR_VALUE",3107:"COLOR_WRITEMASK",3317:"UNPACK_ALIGNMENT",3333:"PACK_ALIGNMENT",3379:"MAX_TEXTURE_SIZE",3386:"MAX_VIEWPORT_DIMS",3408:"SUBPIXEL_BITS",3410:"RED_BITS",3411:"GREEN_BITS",3412:"BLUE_BITS",3413:"ALPHA_BITS",3414:"DEPTH_BITS",3415:"STENCIL_BITS",3553:"TEXTURE_2D",4352:"DONT_CARE",4353:"FASTEST",4354:"NICEST",5120:"BYTE",5121:"UNSIGNED_BYTE",5122:"SHORT",5123:"UNSIGNED_SHORT",5124:"INT",5125:"UNSIGNED_INT",5126:"FLOAT",5386:"INVERT",5890:"TEXTURE",6401:"STENCIL_INDEX",6402:"DEPTH_COMPONENT",6406:"ALPHA",6407:"RGB",6408:"RGBA",6409:"LUMINANCE",6410:"LUMINANCE_ALPHA",7680:"KEEP",7681:"REPLACE",7682:"INCR",7683:"DECR",7936:"VENDOR",7937:"RENDERER",7938:"VERSION",9728:"NEAREST",9729:"LINEAR",9984:"NEAREST_MIPMAP_NEAREST",9985:"LINEAR_MIPMAP_NEAREST",9986:"NEAREST_MIPMAP_LINEAR",9987:"LINEAR_MIPMAP_LINEAR",10240:"TEXTURE_MAG_FILTER",10241:"TEXTURE_MIN_FILTER",10242:"TEXTURE_WRAP_S",10243:"TEXTURE_WRAP_T",10497:"REPEAT",10752:"POLYGON_OFFSET_UNITS",16384:"COLOR_BUFFER_BIT",32769:"CONSTANT_COLOR",32770:"ONE_MINUS_CONSTANT_COLOR",32771:"CONSTANT_ALPHA",32772:"ONE_MINUS_CONSTANT_ALPHA",32773:"BLEND_COLOR",32774:"FUNC_ADD",32777:"BLEND_EQUATION_RGB",32778:"FUNC_SUBTRACT",32779:"FUNC_REVERSE_SUBTRACT",32819:"UNSIGNED_SHORT_4_4_4_4",32820:"UNSIGNED_SHORT_5_5_5_1",32823:"POLYGON_OFFSET_FILL",32824:"POLYGON_OFFSET_FACTOR",32854:"RGBA4",32855:"RGB5_A1",32873:"TEXTURE_BINDING_2D",32926:"SAMPLE_ALPHA_TO_COVERAGE",32928:"SAMPLE_COVERAGE",32936:"SAMPLE_BUFFERS",32937:"SAMPLES",32938:"SAMPLE_COVERAGE_VALUE",32939:"SAMPLE_COVERAGE_INVERT",32968:"BLEND_DST_RGB",32969:"BLEND_SRC_RGB",32970:"BLEND_DST_ALPHA",32971:"BLEND_SRC_ALPHA",33071:"CLAMP_TO_EDGE",33170:"GENERATE_MIPMAP_HINT",33189:"DEPTH_COMPONENT16",33306:"DEPTH_STENCIL_ATTACHMENT",33635:"UNSIGNED_SHORT_5_6_5",33648:"MIRRORED_REPEAT",33901:"ALIASED_POINT_SIZE_RANGE",33902:"ALIASED_LINE_WIDTH_RANGE",33984:"TEXTURE0",33985:"TEXTURE1",33986:"TEXTURE2",33987:"TEXTURE3",33988:"TEXTURE4",33989:"TEXTURE5",33990:"TEXTURE6",33991:"TEXTURE7",33992:"TEXTURE8",33993:"TEXTURE9",33994:"TEXTURE10",33995:"TEXTURE11",33996:"TEXTURE12",33997:"TEXTURE13",33998:"TEXTURE14",33999:"TEXTURE15",34000:"TEXTURE16",34001:"TEXTURE17",34002:"TEXTURE18",34003:"TEXTURE19",34004:"TEXTURE20",34005:"TEXTURE21",34006:"TEXTURE22",34007:"TEXTURE23",34008:"TEXTURE24",34009:"TEXTURE25",34010:"TEXTURE26",34011:"TEXTURE27",34012:"TEXTURE28",34013:"TEXTURE29",34014:"TEXTURE30",34015:"TEXTURE31",34016:"ACTIVE_TEXTURE",34024:"MAX_RENDERBUFFER_SIZE",34041:"DEPTH_STENCIL",34055:"INCR_WRAP",34056:"DECR_WRAP",34067:"TEXTURE_CUBE_MAP",34068:"TEXTURE_BINDING_CUBE_MAP",34069:"TEXTURE_CUBE_MAP_POSITIVE_X",34070:"TEXTURE_CUBE_MAP_NEGATIVE_X",34071:"TEXTURE_CUBE_MAP_POSITIVE_Y",34072:"TEXTURE_CUBE_MAP_NEGATIVE_Y",34073:"TEXTURE_CUBE_MAP_POSITIVE_Z",34074:"TEXTURE_CUBE_MAP_NEGATIVE_Z",34076:"MAX_CUBE_MAP_TEXTURE_SIZE",34338:"VERTEX_ATTRIB_ARRAY_ENABLED",34339:"VERTEX_ATTRIB_ARRAY_SIZE",34340:"VERTEX_ATTRIB_ARRAY_STRIDE",34341:"VERTEX_ATTRIB_ARRAY_TYPE",34342:"CURRENT_VERTEX_ATTRIB",34373:"VERTEX_ATTRIB_ARRAY_POINTER",34466:"NUM_COMPRESSED_TEXTURE_FORMATS",34467:"COMPRESSED_TEXTURE_FORMATS",34660:"BUFFER_SIZE",34661:"BUFFER_USAGE",34816:"STENCIL_BACK_FUNC",34817:"STENCIL_BACK_FAIL",34818:"STENCIL_BACK_PASS_DEPTH_FAIL",34819:"STENCIL_BACK_PASS_DEPTH_PASS",34877:"BLEND_EQUATION_ALPHA",34921:"MAX_VERTEX_ATTRIBS",34922:"VERTEX_ATTRIB_ARRAY_NORMALIZED",34930:"MAX_TEXTURE_IMAGE_UNITS",34962:"ARRAY_BUFFER",34963:"ELEMENT_ARRAY_BUFFER",34964:"ARRAY_BUFFER_BINDING",34965:"ELEMENT_ARRAY_BUFFER_BINDING",34975:"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",35040:"STREAM_DRAW",35044:"STATIC_DRAW",35048:"DYNAMIC_DRAW",35632:"FRAGMENT_SHADER",35633:"VERTEX_SHADER",35660:"MAX_VERTEX_TEXTURE_IMAGE_UNITS",35661:"MAX_COMBINED_TEXTURE_IMAGE_UNITS",35663:"SHADER_TYPE",35664:"FLOAT_VEC2",35665:"FLOAT_VEC3",35666:"FLOAT_VEC4",35667:"INT_VEC2",35668:"INT_VEC3",35669:"INT_VEC4",35670:"BOOL",35671:"BOOL_VEC2",35672:"BOOL_VEC3",35673:"BOOL_VEC4",35674:"FLOAT_MAT2",35675:"FLOAT_MAT3",35676:"FLOAT_MAT4",35678:"SAMPLER_2D",35680:"SAMPLER_CUBE",35712:"DELETE_STATUS",35713:"COMPILE_STATUS",35714:"LINK_STATUS",35715:"VALIDATE_STATUS",35716:"INFO_LOG_LENGTH",35717:"ATTACHED_SHADERS",35718:"ACTIVE_UNIFORMS",35719:"ACTIVE_UNIFORM_MAX_LENGTH",35720:"SHADER_SOURCE_LENGTH",35721:"ACTIVE_ATTRIBUTES",35722:"ACTIVE_ATTRIBUTE_MAX_LENGTH",35724:"SHADING_LANGUAGE_VERSION",35725:"CURRENT_PROGRAM",36003:"STENCIL_BACK_REF",36004:"STENCIL_BACK_VALUE_MASK",36005:"STENCIL_BACK_WRITEMASK",36006:"FRAMEBUFFER_BINDING",36007:"RENDERBUFFER_BINDING",36048:"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE",36049:"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",36050:"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL",36051:"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",36053:"FRAMEBUFFER_COMPLETE",36054:"FRAMEBUFFER_INCOMPLETE_ATTACHMENT",36055:"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",36057:"FRAMEBUFFER_INCOMPLETE_DIMENSIONS",36061:"FRAMEBUFFER_UNSUPPORTED",36064:"COLOR_ATTACHMENT0",36096:"DEPTH_ATTACHMENT",36128:"STENCIL_ATTACHMENT",36160:"FRAMEBUFFER",36161:"RENDERBUFFER",36162:"RENDERBUFFER_WIDTH",36163:"RENDERBUFFER_HEIGHT",36164:"RENDERBUFFER_INTERNAL_FORMAT",36168:"STENCIL_INDEX8",36176:"RENDERBUFFER_RED_SIZE",36177:"RENDERBUFFER_GREEN_SIZE",36178:"RENDERBUFFER_BLUE_SIZE",36179:"RENDERBUFFER_ALPHA_SIZE",36180:"RENDERBUFFER_DEPTH_SIZE",36181:"RENDERBUFFER_STENCIL_SIZE",36194:"RGB565",36336:"LOW_FLOAT",36337:"MEDIUM_FLOAT",36338:"HIGH_FLOAT",36339:"LOW_INT",36340:"MEDIUM_INT",36341:"HIGH_INT",36346:"SHADER_COMPILER",36347:"MAX_VERTEX_UNIFORM_VECTORS",36348:"MAX_VARYING_VECTORS",36349:"MAX_FRAGMENT_UNIFORM_VECTORS",37440:"UNPACK_FLIP_Y_WEBGL",37441:"UNPACK_PREMULTIPLY_ALPHA_WEBGL",37442:"CONTEXT_LOST_WEBGL",37443:"UNPACK_COLORSPACE_CONVERSION_WEBGL",37444:"BROWSER_DEFAULT_WEBGL"}},{}],249:[function(t,e,r){var n=t("./1.0/numbers");e.exports=function(t){return n[t]}},{"./1.0/numbers":248}],250:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl,r=n(e),o=a(e,[{buffer:r,type:e.FLOAT,size:3,offset:0,stride:40},{buffer:r,type:e.FLOAT,size:4,offset:12,stride:40},{buffer:r,type:e.FLOAT,size:3,offset:28,stride:40}]),l=i(e);l.attributes.position.location=0,l.attributes.color.location=1,l.attributes.offset.location=2;var c=new s(e,r,o,l);return c.update(t),c};var n=t("gl-buffer"),a=t("gl-vao"),i=t("./shaders/index"),o=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,r,n){this.gl=t,this.shader=n,this.buffer=e,this.vao=r,this.pixelRatio=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lineWidth=[1,1,1],this.capSize=[10,10,10],this.lineCount=[0,0,0],this.lineOffset=[0,0,0],this.opacity=1,this.hasAlpha=!1}var l=s.prototype;function c(t,e){for(var r=0;r<3;++r)t[0][r]=Math.min(t[0][r],e[r]),t[1][r]=Math.max(t[1][r],e[r])}l.isOpaque=function(){return!this.hasAlpha},l.isTransparent=function(){return this.hasAlpha},l.drawTransparent=l.draw=function(t){var e=this.gl,r=this.shader.uniforms;this.shader.bind();var n=r.view=t.view||o,a=r.projection=t.projection||o;r.model=t.model||o,r.clipBounds=this.clipBounds,r.opacity=this.opacity;var i=n[12],s=n[13],l=n[14],c=n[15],u=(t._ortho||!1?2:1)*this.pixelRatio*(a[3]*i+a[7]*s+a[11]*l+a[15]*c)/e.drawingBufferHeight;this.vao.bind();for(var h=0;h<3;++h)e.lineWidth(this.lineWidth[h]*this.pixelRatio),r.capSize=this.capSize[h]*u,this.lineCount[h]&&e.drawArrays(e.LINES,this.lineOffset[h],this.lineCount[h]);this.vao.unbind()};var u=function(){for(var t=new Array(3),e=0;e<3;++e){for(var r=[],n=1;n<=2;++n)for(var a=-1;a<=1;a+=2){var i=[0,0,0];i[(n+e)%3]=a,r.push(i)}t[e]=r}return t}();function h(t,e,r,n){for(var a=u[n],i=0;i<a.length;++i){var o=a[i];t.push(e[0],e[1],e[2],r[0],r[1],r[2],r[3],o[0],o[1],o[2])}return a.length}l.update=function(t){"lineWidth"in(t=t||{})&&(this.lineWidth=t.lineWidth,Array.isArray(this.lineWidth)||(this.lineWidth=[this.lineWidth,this.lineWidth,this.lineWidth])),"capSize"in t&&(this.capSize=t.capSize,Array.isArray(this.capSize)||(this.capSize=[this.capSize,this.capSize,this.capSize])),this.hasAlpha=!1,"opacity"in t&&(this.opacity=+t.opacity,this.opacity<1&&(this.hasAlpha=!0));var e=t.color||[[0,0,0],[0,0,0],[0,0,0]],r=t.position,n=t.error;if(Array.isArray(e[0])||(e=[e,e,e]),r&&n){var a=[],i=r.length,o=0;this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.lineCount=[0,0,0];for(var s=0;s<3;++s){this.lineOffset[s]=o;t:for(var l=0;l<i;++l){for(var u=r[l],f=0;f<3;++f)if(isNaN(u[f])||!isFinite(u[f]))continue t;var p=n[l],d=e[s];if(Array.isArray(d[0])&&(d=e[l]),3===d.length?d=[d[0],d[1],d[2],1]:4===d.length&&(d=[d[0],d[1],d[2],d[3]],!this.hasAlpha&&d[3]<1&&(this.hasAlpha=!0)),!isNaN(p[0][s])&&!isNaN(p[1][s])){var g;if(p[0][s]<0)(g=u.slice())[s]+=p[0][s],a.push(u[0],u[1],u[2],d[0],d[1],d[2],d[3],0,0,0,g[0],g[1],g[2],d[0],d[1],d[2],d[3],0,0,0),c(this.bounds,g),o+=2+h(a,g,d,s);if(p[1][s]>0)(g=u.slice())[s]+=p[1][s],a.push(u[0],u[1],u[2],d[0],d[1],d[2],d[3],0,0,0,g[0],g[1],g[2],d[0],d[1],d[2],d[3],0,0,0),c(this.bounds,g),o+=2+h(a,g,d,s)}}this.lineCount[s]=o-this.lineOffset[s]}this.buffer.update(a)}},l.dispose=function(){this.shader.dispose(),this.buffer.dispose(),this.vao.dispose()}},{"./shaders/index":251,"gl-buffer":244,"gl-vao":329}],251:[function(t,e,r){"use strict";var n=t("glslify"),a=t("gl-shader"),i=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position, offset;\nattribute vec4 color;\nuniform mat4 model, view, projection;\nuniform float capSize;\nvarying vec4 fragColor;\nvarying vec3 fragPosition;\n\nvoid main() {\n vec4 worldPosition = model * vec4(position, 1.0);\n worldPosition = (worldPosition / worldPosition.w) + vec4(capSize * offset, 0.0);\n gl_Position = projection * view * worldPosition;\n fragColor = color;\n fragPosition = position;\n}"]),o=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float opacity;\nvarying vec3 fragPosition;\nvarying vec4 fragColor;\n\nvoid main() {\n if (\n outOfRange(clipBounds[0], clipBounds[1], fragPosition) ||\n fragColor.a * opacity == 0.\n ) discard;\n\n gl_FragColor = opacity * fragColor;\n}"]);e.exports=function(t){return a(t,i,o,null,[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"offset",type:"vec3"}])}},{"gl-shader":304,glslify:410}],252:[function(t,e,r){"use strict";var n=t("gl-texture2d");e.exports=function(t,e,r,n){a||(a=t.FRAMEBUFFER_UNSUPPORTED,i=t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT,o=t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS,s=t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT);var c=t.getExtension("WEBGL_draw_buffers");!l&&c&&function(t,e){var r=t.getParameter(e.MAX_COLOR_ATTACHMENTS_WEBGL);l=new Array(r+1);for(var n=0;n<=r;++n){for(var a=new Array(r),i=0;i<n;++i)a[i]=t.COLOR_ATTACHMENT0+i;for(var i=n;i<r;++i)a[i]=t.NONE;l[n]=a}}(t,c);Array.isArray(e)&&(n=r,r=0|e[1],e=0|e[0]);if("number"!=typeof e)throw new Error("gl-fbo: Missing shape parameter");var u=t.getParameter(t.MAX_RENDERBUFFER_SIZE);if(e<0||e>u||r<0||r>u)throw new Error("gl-fbo: Parameters are too large for FBO");var h=1;if("color"in(n=n||{})){if((h=Math.max(0|n.color,0))<0)throw new Error("gl-fbo: Must specify a nonnegative number of colors");if(h>1){if(!c)throw new Error("gl-fbo: Multiple draw buffer extension not supported");if(h>t.getParameter(c.MAX_COLOR_ATTACHMENTS_WEBGL))throw new Error("gl-fbo: Context does not support "+h+" draw buffers")}}var f=t.UNSIGNED_BYTE,p=t.getExtension("OES_texture_float");if(n.float&&h>0){if(!p)throw new Error("gl-fbo: Context does not support floating point textures");f=t.FLOAT}else n.preferFloat&&h>0&&p&&(f=t.FLOAT);var g=!0;"depth"in n&&(g=!!n.depth);var v=!1;"stencil"in n&&(v=!!n.stencil);return new d(t,e,r,f,h,g,v,c)};var a,i,o,s,l=null;function c(t){return[t.getParameter(t.FRAMEBUFFER_BINDING),t.getParameter(t.RENDERBUFFER_BINDING),t.getParameter(t.TEXTURE_BINDING_2D)]}function u(t,e){t.bindFramebuffer(t.FRAMEBUFFER,e[0]),t.bindRenderbuffer(t.RENDERBUFFER,e[1]),t.bindTexture(t.TEXTURE_2D,e[2])}function h(t){switch(t){case a:throw new Error("gl-fbo: Framebuffer unsupported");case i:throw new Error("gl-fbo: Framebuffer incomplete attachment");case o:throw new Error("gl-fbo: Framebuffer incomplete dimensions");case s:throw new Error("gl-fbo: Framebuffer incomplete missing attachment");default:throw new Error("gl-fbo: Framebuffer failed for unspecified reason")}}function f(t,e,r,a,i,o){if(!a)return null;var s=n(t,e,r,i,a);return s.magFilter=t.NEAREST,s.minFilter=t.NEAREST,s.mipSamples=1,s.bind(),t.framebufferTexture2D(t.FRAMEBUFFER,o,t.TEXTURE_2D,s.handle,0),s}function p(t,e,r,n,a){var i=t.createRenderbuffer();return t.bindRenderbuffer(t.RENDERBUFFER,i),t.renderbufferStorage(t.RENDERBUFFER,n,e,r),t.framebufferRenderbuffer(t.FRAMEBUFFER,a,t.RENDERBUFFER,i),i}function d(t,e,r,n,a,i,o,s){this.gl=t,this._shape=[0|e,0|r],this._destroyed=!1,this._ext=s,this.color=new Array(a);for(var d=0;d<a;++d)this.color[d]=null;this._color_rb=null,this.depth=null,this._depth_rb=null,this._colorType=n,this._useDepth=i,this._useStencil=o;var g=this,v=[0|e,0|r];Object.defineProperties(v,{0:{get:function(){return g._shape[0]},set:function(t){return g.width=t}},1:{get:function(){return g._shape[1]},set:function(t){return g.height=t}}}),this._shapeVector=v,function(t){var e=c(t.gl),r=t.gl,n=t.handle=r.createFramebuffer(),a=t._shape[0],i=t._shape[1],o=t.color.length,s=t._ext,d=t._useStencil,g=t._useDepth,v=t._colorType;r.bindFramebuffer(r.FRAMEBUFFER,n);for(var m=0;m<o;++m)t.color[m]=f(r,a,i,v,r.RGBA,r.COLOR_ATTACHMENT0+m);0===o?(t._color_rb=p(r,a,i,r.RGBA4,r.COLOR_ATTACHMENT0),s&&s.drawBuffersWEBGL(l[0])):o>1&&s.drawBuffersWEBGL(l[o]);var y=r.getExtension("WEBGL_depth_texture");y?d?t.depth=f(r,a,i,y.UNSIGNED_INT_24_8_WEBGL,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):g&&(t.depth=f(r,a,i,r.UNSIGNED_SHORT,r.DEPTH_COMPONENT,r.DEPTH_ATTACHMENT)):g&&d?t._depth_rb=p(r,a,i,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):g?t._depth_rb=p(r,a,i,r.DEPTH_COMPONENT16,r.DEPTH_ATTACHMENT):d&&(t._depth_rb=p(r,a,i,r.STENCIL_INDEX,r.STENCIL_ATTACHMENT));var x=r.checkFramebufferStatus(r.FRAMEBUFFER);if(x!==r.FRAMEBUFFER_COMPLETE){for(t._destroyed=!0,r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteFramebuffer(t.handle),t.handle=null,t.depth&&(t.depth.dispose(),t.depth=null),t._depth_rb&&(r.deleteRenderbuffer(t._depth_rb),t._depth_rb=null),m=0;m<t.color.length;++m)t.color[m].dispose(),t.color[m]=null;t._color_rb&&(r.deleteRenderbuffer(t._color_rb),t._color_rb=null),u(r,e),h(x)}u(r,e)}(this)}var g=d.prototype;function v(t,e,r){if(t._destroyed)throw new Error("gl-fbo: Can't resize destroyed FBO");if(t._shape[0]!==e||t._shape[1]!==r){var n=t.gl,a=n.getParameter(n.MAX_RENDERBUFFER_SIZE);if(e<0||e>a||r<0||r>a)throw new Error("gl-fbo: Can't resize FBO, invalid dimensions");t._shape[0]=e,t._shape[1]=r;for(var i=c(n),o=0;o<t.color.length;++o)t.color[o].shape=t._shape;t._color_rb&&(n.bindRenderbuffer(n.RENDERBUFFER,t._color_rb),n.renderbufferStorage(n.RENDERBUFFER,n.RGBA4,t._shape[0],t._shape[1])),t.depth&&(t.depth.shape=t._shape),t._depth_rb&&(n.bindRenderbuffer(n.RENDERBUFFER,t._depth_rb),t._useDepth&&t._useStencil?n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_STENCIL,t._shape[0],t._shape[1]):t._useDepth?n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_COMPONENT16,t._shape[0],t._shape[1]):t._useStencil&&n.renderbufferStorage(n.RENDERBUFFER,n.STENCIL_INDEX,t._shape[0],t._shape[1])),n.bindFramebuffer(n.FRAMEBUFFER,t.handle);var s=n.checkFramebufferStatus(n.FRAMEBUFFER);s!==n.FRAMEBUFFER_COMPLETE&&(t.dispose(),u(n,i),h(s)),u(n,i)}}Object.defineProperties(g,{shape:{get:function(){return this._destroyed?[0,0]:this._shapeVector},set:function(t){if(Array.isArray(t)||(t=[0|t,0|t]),2!==t.length)throw new Error("gl-fbo: Shape vector must be length 2");var e=0|t[0],r=0|t[1];return v(this,e,r),[e,r]},enumerable:!1},width:{get:function(){return this._destroyed?0:this._shape[0]},set:function(t){return v(this,t|=0,this._shape[1]),t},enumerable:!1},height:{get:function(){return this._destroyed?0:this._shape[1]},set:function(t){return t|=0,v(this,this._shape[0],t),t},enumerable:!1}}),g.bind=function(){if(!this._destroyed){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.handle),t.viewport(0,0,this._shape[0],this._shape[1])}},g.dispose=function(){if(!this._destroyed){this._destroyed=!0;var t=this.gl;t.deleteFramebuffer(this.handle),this.handle=null,this.depth&&(this.depth.dispose(),this.depth=null),this._depth_rb&&(t.deleteRenderbuffer(this._depth_rb),this._depth_rb=null);for(var e=0;e<this.color.length;++e)this.color[e].dispose(),this.color[e]=null;this._color_rb&&(t.deleteRenderbuffer(this._color_rb),this._color_rb=null)}}},{"gl-texture2d":324}],253:[function(t,e,r){var n=t("sprintf-js").sprintf,a=t("gl-constants/lookup"),i=t("glsl-shader-name"),o=t("add-line-numbers");e.exports=function(t,e,r){"use strict";var s=i(e)||"of unknown name (see npm glsl-shader-name)",l="unknown type";void 0!==r&&(l=r===a.FRAGMENT_SHADER?"fragment":"vertex");for(var c=n("Error compiling %s shader %s:\n",l,s),u=n("%s%s",c,t),h=t.split("\n"),f={},p=0;p<h.length;p++){var d=h[p];if(""!==d&&"\0"!==d){var g=parseInt(d.split(":")[2]);if(isNaN(g))throw new Error(n("Could not parse error: %s",d));f[g]=d}}for(var v=o(e).split("\n"),p=0;p<v.length;p++)if(f[p+3]||f[p+2]||f[p+1]){var m=v[p];if(c+=m+"\n",f[p+1]){var y=f[p+1];y=y.substr(y.split(":",3).join(":").length+1).trim(),c+=n("^^^ %s\n\n",y)}}return{long:c.trim(),short:u.trim()}}},{"add-line-numbers":64,"gl-constants/lookup":249,"glsl-shader-name":402,"sprintf-js":526}],254:[function(t,e,r){"use strict";e.exports=function(t,e){var r=t.gl,n=o(r,l.vertex,l.fragment),a=o(r,l.pickVertex,l.pickFragment),i=s(r),u=s(r),h=s(r),f=s(r),p=new c(t,n,a,i,u,h,f);return p.update(e),t.addObject(p),p};var n=t("binary-search-bounds"),a=t("iota-array"),i=t("typedarray-pool"),o=t("gl-shader"),s=t("gl-buffer"),l=t("./lib/shaders");function c(t,e,r,n,a,i,o){this.plot=t,this.shader=e,this.pickShader=r,this.positionBuffer=n,this.weightBuffer=a,this.colorBuffer=i,this.idBuffer=o,this.xData=[],this.yData=[],this.shape=[0,0],this.bounds=[1/0,1/0,-1/0,-1/0],this.pickOffset=0}var u,h=c.prototype,f=[0,0,1,0,0,1,1,0,1,1,0,1];h.draw=(u=[1,0,0,0,1,0,0,0,1],function(){var t=this.plot,e=this.shader,r=this.bounds,n=this.numVertices;if(!(n<=0)){var a=t.gl,i=t.dataBox,o=r[2]-r[0],s=r[3]-r[1],l=i[2]-i[0],c=i[3]-i[1];u[0]=2*o/l,u[4]=2*s/c,u[6]=2*(r[0]-i[0])/l-1,u[7]=2*(r[1]-i[1])/c-1,e.bind();var h=e.uniforms;h.viewTransform=u,h.shape=this.shape;var f=e.attributes;this.positionBuffer.bind(),f.position.pointer(),this.weightBuffer.bind(),f.weight.pointer(a.UNSIGNED_BYTE,!1),this.colorBuffer.bind(),f.color.pointer(a.UNSIGNED_BYTE,!0),a.drawArrays(a.TRIANGLES,0,n)}}),h.drawPick=function(){var t=[1,0,0,0,1,0,0,0,1],e=[0,0,0,0];return function(r){var n=this.plot,a=this.pickShader,i=this.bounds,o=this.numVertices;if(!(o<=0)){var s=n.gl,l=n.dataBox,c=i[2]-i[0],u=i[3]-i[1],h=l[2]-l[0],f=l[3]-l[1];t[0]=2*c/h,t[4]=2*u/f,t[6]=2*(i[0]-l[0])/h-1,t[7]=2*(i[1]-l[1])/f-1;for(var p=0;p<4;++p)e[p]=r>>8*p&255;this.pickOffset=r,a.bind();var d=a.uniforms;d.viewTransform=t,d.pickOffset=e,d.shape=this.shape;var g=a.attributes;return this.positionBuffer.bind(),g.position.pointer(),this.weightBuffer.bind(),g.weight.pointer(s.UNSIGNED_BYTE,!1),this.idBuffer.bind(),g.pickId.pointer(s.UNSIGNED_BYTE,!1),s.drawArrays(s.TRIANGLES,0,o),r+this.shape[0]*this.shape[1]}}}(),h.pick=function(t,e,r){var n=this.pickOffset,a=this.shape[0]*this.shape[1];if(r<n||r>=n+a)return null;var i=r-n,o=this.xData,s=this.yData;return{object:this,pointId:i,dataCoord:[o[i%this.shape[0]],s[i/this.shape[0]|0]]}},h.update=function(t){var e=(t=t||{}).shape||[0,0],r=t.x||a(e[0]),o=t.y||a(e[1]),s=t.z||new Float32Array(e[0]*e[1]);this.xData=r,this.yData=o;var l=t.colorLevels||[0],c=t.colorValues||[0,0,0,1],u=l.length,h=this.bounds,p=h[0]=r[0],d=h[1]=o[0],g=1/((h[2]=r[r.length-1])-p),v=1/((h[3]=o[o.length-1])-d),m=e[0],y=e[1];this.shape=[m,y];var x=(m-1)*(y-1)*(f.length>>>1);this.numVertices=x;for(var b=i.mallocUint8(4*x),_=i.mallocFloat32(2*x),w=i.mallocUint8(2*x),k=i.mallocUint32(x),T=0,M=0;M<y-1;++M)for(var A=v*(o[M]-d),S=v*(o[M+1]-d),E=0;E<m-1;++E)for(var L=g*(r[E]-p),C=g*(r[E+1]-p),P=0;P<f.length;P+=2){var O,z,I,D,R=f[P],F=f[P+1],B=s[(M+F)*m+(E+R)],N=n.le(l,B);if(N<0)O=c[0],z=c[1],I=c[2],D=c[3];else if(N===u-1)O=c[4*u-4],z=c[4*u-3],I=c[4*u-2],D=c[4*u-1];else{var j=(B-l[N])/(l[N+1]-l[N]),V=1-j,U=4*N,q=4*(N+1);O=V*c[U]+j*c[q],z=V*c[U+1]+j*c[q+1],I=V*c[U+2]+j*c[q+2],D=V*c[U+3]+j*c[q+3]}b[4*T]=255*O,b[4*T+1]=255*z,b[4*T+2]=255*I,b[4*T+3]=255*D,_[2*T]=.5*L+.5*C,_[2*T+1]=.5*A+.5*S,w[2*T]=R,w[2*T+1]=F,k[T]=M*m+E,T+=1}this.positionBuffer.update(_),this.weightBuffer.update(w),this.colorBuffer.update(b),this.idBuffer.update(k),i.free(_),i.free(b),i.free(w),i.free(k)},h.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.positionBuffer.dispose(),this.weightBuffer.dispose(),this.colorBuffer.dispose(),this.idBuffer.dispose(),this.plot.removeObject(this)}},{"./lib/shaders":255,"binary-search-bounds":256,"gl-buffer":244,"gl-shader":304,"iota-array":417,"typedarray-pool":543}],255:[function(t,e,r){"use strict";var n=t("glslify");e.exports={fragment:n(["precision lowp float;\n#define GLSLIFY 1\nvarying vec4 fragColor;\nvoid main() {\n gl_FragColor = vec4(fragColor.rgb * fragColor.a, fragColor.a);\n}\n"]),vertex:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\nattribute vec4 color;\nattribute vec2 weight;\n\nuniform vec2 shape;\nuniform mat3 viewTransform;\n\nvarying vec4 fragColor;\n\nvoid main() {\n vec3 vPosition = viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\n fragColor = color;\n gl_Position = vec4(vPosition.xy, 0, vPosition.z);\n}\n"]),pickFragment:n(["precision mediump float;\n#define GLSLIFY 1\n\nvarying vec4 fragId;\nvarying vec2 vWeight;\n\nuniform vec2 shape;\nuniform vec4 pickOffset;\n\nvoid main() {\n vec2 d = step(.5, vWeight);\n vec4 id = fragId + pickOffset;\n id.x += d.x + d.y*shape.x;\n\n id.y += floor(id.x / 256.0);\n id.x -= floor(id.x / 256.0) * 256.0;\n\n id.z += floor(id.y / 256.0);\n id.y -= floor(id.y / 256.0) * 256.0;\n\n id.w += floor(id.z / 256.0);\n id.z -= floor(id.z / 256.0) * 256.0;\n\n gl_FragColor = id/255.;\n}\n"]),pickVertex:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\nattribute vec4 pickId;\nattribute vec2 weight;\n\nuniform vec2 shape;\nuniform mat3 viewTransform;\n\nvarying vec4 fragId;\nvarying vec2 vWeight;\n\nvoid main() {\n vWeight = weight;\n\n fragId = pickId;\n\n vec3 vPosition = viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\n gl_Position = vec4(vPosition.xy, 0, vPosition.z);\n}\n"])}},{glslify:410}],256:[function(t,e,r){arguments[4][113][0].apply(r,arguments)},{dup:113}],257:[function(t,e,r){var n=t("glslify"),a=t("gl-shader"),i=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position, nextPosition;\nattribute float arcLength, lineWidth;\nattribute vec4 color;\n\nuniform vec2 screenShape;\nuniform float pixelRatio;\nuniform mat4 model, view, projection;\n\nvarying vec4 fragColor;\nvarying vec3 worldPosition;\nvarying float pixelArcLength;\n\nvec4 project(vec3 p) {\n return projection * view * model * vec4(p, 1.0);\n}\n\nvoid main() {\n vec4 startPoint = project(position);\n vec4 endPoint = project(nextPosition);\n\n vec2 A = startPoint.xy / startPoint.w;\n vec2 B = endPoint.xy / endPoint.w;\n\n float clipAngle = atan(\n (B.y - A.y) * screenShape.y,\n (B.x - A.x) * screenShape.x\n );\n\n vec2 offset = 0.5 * pixelRatio * lineWidth * vec2(\n sin(clipAngle),\n -cos(clipAngle)\n ) / screenShape;\n\n gl_Position = vec4(startPoint.xy + startPoint.w * offset, startPoint.zw);\n\n worldPosition = position;\n pixelArcLength = arcLength;\n fragColor = color;\n}\n"]),o=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform sampler2D dashTexture;\nuniform float dashScale;\nuniform float opacity;\n\nvarying vec3 worldPosition;\nvarying float pixelArcLength;\nvarying vec4 fragColor;\n\nvoid main() {\n if (\n outOfRange(clipBounds[0], clipBounds[1], worldPosition) ||\n fragColor.a * opacity == 0.\n ) discard;\n\n float dashWeight = texture2D(dashTexture, vec2(dashScale * pixelArcLength, 0)).r;\n if(dashWeight < 0.5) {\n discard;\n }\n gl_FragColor = fragColor * opacity;\n}\n"]),s=n(["precision highp float;\n#define GLSLIFY 1\n\n#define FLOAT_MAX 1.70141184e38\n#define FLOAT_MIN 1.17549435e-38\n\n// https://github.com/mikolalysenko/glsl-read-float/blob/master/index.glsl\nvec4 packFloat(float v) {\n float av = abs(v);\n\n //Handle special cases\n if(av < FLOAT_MIN) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n } else if(v > FLOAT_MAX) {\n return vec4(127.0, 128.0, 0.0, 0.0) / 255.0;\n } else if(v < -FLOAT_MAX) {\n return vec4(255.0, 128.0, 0.0, 0.0) / 255.0;\n }\n\n vec4 c = vec4(0,0,0,0);\n\n //Compute exponent and mantissa\n float e = floor(log2(av));\n float m = av * pow(2.0, -e) - 1.0;\n\n //Unpack mantissa\n c[1] = floor(128.0 * m);\n m -= c[1] / 128.0;\n c[2] = floor(32768.0 * m);\n m -= c[2] / 32768.0;\n c[3] = floor(8388608.0 * m);\n\n //Unpack exponent\n float ebias = e + 127.0;\n c[0] = floor(ebias / 2.0);\n ebias -= c[0] * 2.0;\n c[1] += floor(ebias) * 128.0;\n\n //Unpack sign bit\n c[0] += 128.0 * step(0.0, -v);\n\n //Scale back to range\n return c / 255.0;\n}\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform float pickId;\nuniform vec3 clipBounds[2];\n\nvarying vec3 worldPosition;\nvarying float pixelArcLength;\nvarying vec4 fragColor;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], worldPosition)) discard;\n\n gl_FragColor = vec4(pickId/255.0, packFloat(pixelArcLength).xyz);\n}"]),l=[{name:"position",type:"vec3"},{name:"nextPosition",type:"vec3"},{name:"arcLength",type:"float"},{name:"lineWidth",type:"float"},{name:"color",type:"vec4"}];r.createShader=function(t){return a(t,i,o,null,l)},r.createPickShader=function(t){return a(t,i,s,null,l)}},{"gl-shader":304,glslify:410}],258:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl||t.scene&&t.scene.gl,r=h(e);r.attributes.position.location=0,r.attributes.nextPosition.location=1,r.attributes.arcLength.location=2,r.attributes.lineWidth.location=3,r.attributes.color.location=4;var o=f(e);o.attributes.position.location=0,o.attributes.nextPosition.location=1,o.attributes.arcLength.location=2,o.attributes.lineWidth.location=3,o.attributes.color.location=4;for(var s=n(e),l=a(e,[{buffer:s,size:3,offset:0,stride:48},{buffer:s,size:3,offset:12,stride:48},{buffer:s,size:1,offset:24,stride:48},{buffer:s,size:1,offset:28,stride:48},{buffer:s,size:4,offset:32,stride:48}]),u=c(new Array(1024),[256,1,4]),p=0;p<1024;++p)u.data[p]=255;var d=i(e,u);d.wrap=e.REPEAT;var g=new m(e,r,o,s,l,d);return g.update(t),g};var n=t("gl-buffer"),a=t("gl-vao"),i=t("gl-texture2d"),o=new Uint8Array(4),s=new Float32Array(o.buffer);var l=t("binary-search-bounds"),c=t("ndarray"),u=t("./lib/shaders"),h=u.createShader,f=u.createPickShader,p=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function d(t,e){for(var r=0,n=0;n<3;++n){var a=t[n]-e[n];r+=a*a}return Math.sqrt(r)}function g(t){for(var e=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],r=0;r<3;++r)e[0][r]=Math.max(t[0][r],e[0][r]),e[1][r]=Math.min(t[1][r],e[1][r]);return e}function v(t,e,r,n){this.arcLength=t,this.position=e,this.index=r,this.dataCoordinate=n}function m(t,e,r,n,a,i){this.gl=t,this.shader=e,this.pickShader=r,this.buffer=n,this.vao=a,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.points=[],this.arcLength=[],this.vertexCount=0,this.bounds=[[0,0,0],[0,0,0]],this.pickId=0,this.lineWidth=1,this.texture=i,this.dashScale=1,this.opacity=1,this.hasAlpha=!1,this.dirty=!0,this.pixelRatio=1}var y=m.prototype;y.isTransparent=function(){return this.hasAlpha},y.isOpaque=function(){return!this.hasAlpha},y.pickSlots=1,y.setPickBase=function(t){this.pickId=t},y.drawTransparent=y.draw=function(t){if(this.vertexCount){var e=this.gl,r=this.shader,n=this.vao;r.bind(),r.uniforms={model:t.model||p,view:t.view||p,projection:t.projection||p,clipBounds:g(this.clipBounds),dashTexture:this.texture.bind(),dashScale:this.dashScale/this.arcLength[this.arcLength.length-1],opacity:this.opacity,screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount),n.unbind()}},y.drawPick=function(t){if(this.vertexCount){var e=this.gl,r=this.pickShader,n=this.vao;r.bind(),r.uniforms={model:t.model||p,view:t.view||p,projection:t.projection||p,pickId:this.pickId,clipBounds:g(this.clipBounds),screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount),n.unbind()}},y.update=function(t){var e,r;this.dirty=!0;var n=!!t.connectGaps;"dashScale"in t&&(this.dashScale=t.dashScale),this.hasAlpha=!1,"opacity"in t&&(this.opacity=+t.opacity,this.opacity<1&&(this.hasAlpha=!0));var a=[],i=[],o=[],s=0,u=0,h=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],f=t.position||t.positions;if(f){var p=t.color||t.colors||[0,0,0,1],g=t.lineWidth||1,v=!1;t:for(e=1;e<f.length;++e){var m,y,x,b=f[e-1],_=f[e];for(i.push(s),o.push(b.slice()),r=0;r<3;++r){if(isNaN(b[r])||isNaN(_[r])||!isFinite(b[r])||!isFinite(_[r])){if(!n&&a.length>0){for(var w=0;w<24;++w)a.push(a[a.length-12]);u+=2,v=!0}continue t}h[0][r]=Math.min(h[0][r],b[r],_[r]),h[1][r]=Math.max(h[1][r],b[r],_[r])}Array.isArray(p[0])?(m=p.length>e-1?p[e-1]:p.length>0?p[p.length-1]:[0,0,0,1],y=p.length>e?p[e]:p.length>0?p[p.length-1]:[0,0,0,1]):m=y=p,3===m.length&&(m=[m[0],m[1],m[2],1]),3===y.length&&(y=[y[0],y[1],y[2],1]),!this.hasAlpha&&m[3]<1&&(this.hasAlpha=!0),x=Array.isArray(g)?g.length>e-1?g[e-1]:g.length>0?g[g.length-1]:[0,0,0,1]:g;var k=s;if(s+=d(b,_),v){for(r=0;r<2;++r)a.push(b[0],b[1],b[2],_[0],_[1],_[2],k,x,m[0],m[1],m[2],m[3]);u+=2,v=!1}a.push(b[0],b[1],b[2],_[0],_[1],_[2],k,x,m[0],m[1],m[2],m[3],b[0],b[1],b[2],_[0],_[1],_[2],k,-x,m[0],m[1],m[2],m[3],_[0],_[1],_[2],b[0],b[1],b[2],s,-x,y[0],y[1],y[2],y[3],_[0],_[1],_[2],b[0],b[1],b[2],s,x,y[0],y[1],y[2],y[3]),u+=4}}if(this.buffer.update(a),i.push(s),o.push(f[f.length-1].slice()),this.bounds=h,this.vertexCount=u,this.points=o,this.arcLength=i,"dashes"in t){var T=t.dashes.slice();for(T.unshift(0),e=1;e<T.length;++e)T[e]=T[e-1]+T[e];var M=c(new Array(1024),[256,1,4]);for(e=0;e<256;++e){for(r=0;r<4;++r)M.set(e,0,r,0);1&l.le(T,T[T.length-1]*e/255)?M.set(e,0,0,0):M.set(e,0,0,255)}this.texture.setPixels(M)}},y.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()},y.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=function(t,e,r,n){return o[0]=n,o[1]=r,o[2]=e,o[3]=t,s[0]}(t.value[0],t.value[1],t.value[2],0),r=l.le(this.arcLength,e);if(r<0)return null;if(r===this.arcLength.length-1)return new v(this.arcLength[this.arcLength.length-1],this.points[this.points.length-1].slice(),r);for(var n=this.points[r],a=this.points[Math.min(r+1,this.points.length-1)],i=(e-this.arcLength[r])/(this.arcLength[r+1]-this.arcLength[r]),c=1-i,u=[0,0,0],h=0;h<3;++h)u[h]=c*n[h]+i*a[h];var f=Math.min(i<.5?r:r+1,this.points.length-1);return new v(e,u,f,this.points[f])}},{"./lib/shaders":257,"binary-search-bounds":259,"gl-buffer":244,"gl-texture2d":324,"gl-vao":329,ndarray:451}],259:[function(t,e,r){arguments[4][113][0].apply(r,arguments)},{dup:113}],260:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],a=e[2],i=e[3],o=r*i-a*n;return o?(o=1/o,t[0]=i*o,t[1]=-n*o,t[2]=-a*o,t[3]=r*o,t):null}},{}],261:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],a=e[2],i=e[3],o=e[4],s=e[5],l=e[6],c=e[7],u=e[8],h=u*o-s*c,f=-u*i+s*l,p=c*i-o*l,d=r*h+n*f+a*p;return d?(d=1/d,t[0]=h*d,t[1]=(-u*n+a*c)*d,t[2]=(s*n-a*o)*d,t[3]=f*d,t[4]=(u*r-a*l)*d,t[5]=(-s*r+a*i)*d,t[6]=p*d,t[7]=(-c*r+n*l)*d,t[8]=(o*r-n*i)*d,t):null}},{}],262:[function(t,e,r){e.exports=function(t){var e=new Float32Array(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}},{}],263:[function(t,e,r){e.exports=function(){var t=new Float32Array(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},{}],264:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2],a=t[3],i=t[4],o=t[5],s=t[6],l=t[7],c=t[8],u=t[9],h=t[10],f=t[11],p=t[12],d=t[13],g=t[14],v=t[15];return(e*o-r*i)*(h*v-f*g)-(e*s-n*i)*(u*v-f*d)+(e*l-a*i)*(u*g-h*d)+(r*s-n*o)*(c*v-f*p)-(r*l-a*o)*(c*g-h*p)+(n*l-a*s)*(c*d-u*p)}},{}],265:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],a=e[2],i=e[3],o=r+r,s=n+n,l=a+a,c=r*o,u=n*o,h=n*s,f=a*o,p=a*s,d=a*l,g=i*o,v=i*s,m=i*l;return t[0]=1-h-d,t[1]=u+m,t[2]=f-v,t[3]=0,t[4]=u-m,t[5]=1-c-d,t[6]=p+g,t[7]=0,t[8]=f+v,t[9]=p-g,t[10]=1-c-h,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},{}],266:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=e[3],s=n+n,l=a+a,c=i+i,u=n*s,h=n*l,f=n*c,p=a*l,d=a*c,g=i*c,v=o*s,m=o*l,y=o*c;return t[0]=1-(p+g),t[1]=h+y,t[2]=f-m,t[3]=0,t[4]=h-y,t[5]=1-(u+g),t[6]=d+v,t[7]=0,t[8]=f+m,t[9]=d-v,t[10]=1-(u+p),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}},{}],267:[function(t,e,r){e.exports=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}},{}],268:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],a=e[2],i=e[3],o=e[4],s=e[5],l=e[6],c=e[7],u=e[8],h=e[9],f=e[10],p=e[11],d=e[12],g=e[13],v=e[14],m=e[15],y=r*s-n*o,x=r*l-a*o,b=r*c-i*o,_=n*l-a*s,w=n*c-i*s,k=a*c-i*l,T=u*g-h*d,M=u*v-f*d,A=u*m-p*d,S=h*v-f*g,E=h*m-p*g,L=f*m-p*v,C=y*L-x*E+b*S+_*A-w*M+k*T;if(!C)return null;return C=1/C,t[0]=(s*L-l*E+c*S)*C,t[1]=(a*E-n*L-i*S)*C,t[2]=(g*k-v*w+m*_)*C,t[3]=(f*w-h*k-p*_)*C,t[4]=(l*A-o*L-c*M)*C,t[5]=(r*L-a*A+i*M)*C,t[6]=(v*b-d*k-m*x)*C,t[7]=(u*k-f*b+p*x)*C,t[8]=(o*E-s*A+c*T)*C,t[9]=(n*A-r*E-i*T)*C,t[10]=(d*w-g*b+m*y)*C,t[11]=(h*b-u*w-p*y)*C,t[12]=(s*M-o*S-l*T)*C,t[13]=(r*S-n*M+a*T)*C,t[14]=(g*x-d*_-v*y)*C,t[15]=(u*_-h*x+f*y)*C,t}},{}],269:[function(t,e,r){var n=t("./identity");e.exports=function(t,e,r,a){var i,o,s,l,c,u,h,f,p,d,g=e[0],v=e[1],m=e[2],y=a[0],x=a[1],b=a[2],_=r[0],w=r[1],k=r[2];if(Math.abs(g-_)<1e-6&&Math.abs(v-w)<1e-6&&Math.abs(m-k)<1e-6)return n(t);h=g-_,f=v-w,p=m-k,d=1/Math.sqrt(h*h+f*f+p*p),i=x*(p*=d)-b*(f*=d),o=b*(h*=d)-y*p,s=y*f-x*h,(d=Math.sqrt(i*i+o*o+s*s))?(i*=d=1/d,o*=d,s*=d):(i=0,o=0,s=0);l=f*s-p*o,c=p*i-h*s,u=h*o-f*i,(d=Math.sqrt(l*l+c*c+u*u))?(l*=d=1/d,c*=d,u*=d):(l=0,c=0,u=0);return t[0]=i,t[1]=l,t[2]=h,t[3]=0,t[4]=o,t[5]=c,t[6]=f,t[7]=0,t[8]=s,t[9]=u,t[10]=p,t[11]=0,t[12]=-(i*g+o*v+s*m),t[13]=-(l*g+c*v+u*m),t[14]=-(h*g+f*v+p*m),t[15]=1,t}},{"./identity":267}],270:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=e[3],s=e[4],l=e[5],c=e[6],u=e[7],h=e[8],f=e[9],p=e[10],d=e[11],g=e[12],v=e[13],m=e[14],y=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*h+w*g,t[1]=x*a+b*l+_*f+w*v,t[2]=x*i+b*c+_*p+w*m,t[3]=x*o+b*u+_*d+w*y,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*h+w*g,t[5]=x*a+b*l+_*f+w*v,t[6]=x*i+b*c+_*p+w*m,t[7]=x*o+b*u+_*d+w*y,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*h+w*g,t[9]=x*a+b*l+_*f+w*v,t[10]=x*i+b*c+_*p+w*m,t[11]=x*o+b*u+_*d+w*y,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*h+w*g,t[13]=x*a+b*l+_*f+w*v,t[14]=x*i+b*c+_*p+w*m,t[15]=x*o+b*u+_*d+w*y,t}},{}],271:[function(t,e,r){e.exports=function(t,e,r,n,a,i,o){var s=1/(e-r),l=1/(n-a),c=1/(i-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*c,t[11]=0,t[12]=(e+r)*s,t[13]=(a+n)*l,t[14]=(o+i)*c,t[15]=1,t}},{}],272:[function(t,e,r){e.exports=function(t,e,r,n,a){var i=1/Math.tan(e/2),o=1/(n-a);return t[0]=i/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=i,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(a+n)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*a*n*o,t[15]=0,t}},{}],273:[function(t,e,r){e.exports=function(t,e,r,n){var a,i,o,s,l,c,u,h,f,p,d,g,v,m,y,x,b,_,w,k,T,M,A,S,E=n[0],L=n[1],C=n[2],P=Math.sqrt(E*E+L*L+C*C);if(Math.abs(P)<1e-6)return null;E*=P=1/P,L*=P,C*=P,a=Math.sin(r),i=Math.cos(r),o=1-i,s=e[0],l=e[1],c=e[2],u=e[3],h=e[4],f=e[5],p=e[6],d=e[7],g=e[8],v=e[9],m=e[10],y=e[11],x=E*E*o+i,b=L*E*o+C*a,_=C*E*o-L*a,w=E*L*o-C*a,k=L*L*o+i,T=C*L*o+E*a,M=E*C*o+L*a,A=L*C*o-E*a,S=C*C*o+i,t[0]=s*x+h*b+g*_,t[1]=l*x+f*b+v*_,t[2]=c*x+p*b+m*_,t[3]=u*x+d*b+y*_,t[4]=s*w+h*k+g*T,t[5]=l*w+f*k+v*T,t[6]=c*w+p*k+m*T,t[7]=u*w+d*k+y*T,t[8]=s*M+h*A+g*S,t[9]=l*M+f*A+v*S,t[10]=c*M+p*A+m*S,t[11]=u*M+d*A+y*S,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t}},{}],274:[function(t,e,r){e.exports=function(t,e,r){var n=Math.sin(r),a=Math.cos(r),i=e[4],o=e[5],s=e[6],l=e[7],c=e[8],u=e[9],h=e[10],f=e[11];e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t[4]=i*a+c*n,t[5]=o*a+u*n,t[6]=s*a+h*n,t[7]=l*a+f*n,t[8]=c*a-i*n,t[9]=u*a-o*n,t[10]=h*a-s*n,t[11]=f*a-l*n,t}},{}],275:[function(t,e,r){e.exports=function(t,e,r){var n=Math.sin(r),a=Math.cos(r),i=e[0],o=e[1],s=e[2],l=e[3],c=e[8],u=e[9],h=e[10],f=e[11];e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t[0]=i*a-c*n,t[1]=o*a-u*n,t[2]=s*a-h*n,t[3]=l*a-f*n,t[8]=i*n+c*a,t[9]=o*n+u*a,t[10]=s*n+h*a,t[11]=l*n+f*a,t}},{}],276:[function(t,e,r){e.exports=function(t,e,r){var n=Math.sin(r),a=Math.cos(r),i=e[0],o=e[1],s=e[2],l=e[3],c=e[4],u=e[5],h=e[6],f=e[7];e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t[0]=i*a+c*n,t[1]=o*a+u*n,t[2]=s*a+h*n,t[3]=l*a+f*n,t[4]=c*a-i*n,t[5]=u*a-o*n,t[6]=h*a-s*n,t[7]=f*a-l*n,t}},{}],277:[function(t,e,r){e.exports=function(t,e,r){var n=r[0],a=r[1],i=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*a,t[5]=e[5]*a,t[6]=e[6]*a,t[7]=e[7]*a,t[8]=e[8]*i,t[9]=e[9]*i,t[10]=e[10]*i,t[11]=e[11]*i,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}},{}],278:[function(t,e,r){e.exports=function(t,e,r){var n,a,i,o,s,l,c,u,h,f,p,d,g=r[0],v=r[1],m=r[2];e===t?(t[12]=e[0]*g+e[4]*v+e[8]*m+e[12],t[13]=e[1]*g+e[5]*v+e[9]*m+e[13],t[14]=e[2]*g+e[6]*v+e[10]*m+e[14],t[15]=e[3]*g+e[7]*v+e[11]*m+e[15]):(n=e[0],a=e[1],i=e[2],o=e[3],s=e[4],l=e[5],c=e[6],u=e[7],h=e[8],f=e[9],p=e[10],d=e[11],t[0]=n,t[1]=a,t[2]=i,t[3]=o,t[4]=s,t[5]=l,t[6]=c,t[7]=u,t[8]=h,t[9]=f,t[10]=p,t[11]=d,t[12]=n*g+s*v+h*m+e[12],t[13]=a*g+l*v+f*m+e[13],t[14]=i*g+c*v+p*m+e[14],t[15]=o*g+u*v+d*m+e[15]);return t}},{}],279:[function(t,e,r){e.exports=function(t,e){if(t===e){var r=e[1],n=e[2],a=e[3],i=e[6],o=e[7],s=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=i,t[11]=e[14],t[12]=a,t[13]=o,t[14]=s}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}},{}],280:[function(t,e,r){"use strict";e.exports=function(t,e){switch(e.length){case 0:break;case 1:t[0]=1/e[0];break;case 4:n(t,e);break;case 9:a(t,e);break;case 16:i(t,e);break;default:throw new Error("currently supports matrices up to 4x4")}return t};var n=t("gl-mat2/invert"),a=t("gl-mat3/invert"),i=t("gl-mat4/invert")},{"gl-mat2/invert":260,"gl-mat3/invert":261,"gl-mat4/invert":268}],281:[function(t,e,r){"use strict";var n=t("barycentric"),a=t("polytope-closest-point/lib/closest_point_2d.js");function i(t,e){for(var r=[0,0,0,0],n=0;n<4;++n)for(var a=0;a<4;++a)r[a]+=t[4*n+a]*e[n];return r}function o(t,e,r,n,a){for(var o=i(n,i(r,i(e,[t[0],t[1],t[2],1]))),s=0;s<3;++s)o[s]/=o[3];return[.5*a[0]*(1+o[0]),.5*a[1]*(1-o[1])]}function s(t,e){for(var r=[0,0,0],n=0;n<t.length;++n)for(var a=t[n],i=e[n],o=0;o<3;++o)r[o]+=i*a[o];return r}e.exports=function(t,e,r,i,l,c){if(1===t.length)return[0,t[0].slice()];for(var u=new Array(t.length),h=0;h<t.length;++h)u[h]=o(t[h],r,i,l,c);for(var f=0,p=1/0,h=0;h<u.length;++h){for(var d=0,g=0;g<2;++g)d+=Math.pow(u[h][g]-e[g],2);d<p&&(p=d,f=h)}for(var v=function(t,e){if(2===t.length){for(var r=0,i=0,o=0;o<2;++o)r+=Math.pow(e[o]-t[0][o],2),i+=Math.pow(e[o]-t[1][o],2);return r=Math.sqrt(r),i=Math.sqrt(i),r+i<1e-6?[1,0]:[i/(r+i),r/(i+r)]}if(3===t.length){var s=[0,0];return a(t[0],t[1],t[2],e,s),n(t,s)}return[]}(u,e),m=0,h=0;h<3;++h){if(v[h]<-.001||v[h]>1.0001)return null;m+=v[h]}if(Math.abs(m-1)>.001)return null;return[f,s(t,v),v]}},{barycentric:75,"polytope-closest-point/lib/closest_point_2d.js":482}],282:[function(t,e,r){var n=t("glslify"),a=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position, normal;\nattribute vec4 color;\nattribute vec2 uv;\n\nuniform mat4 model\n , view\n , projection\n , inverseModel;\nuniform vec3 eyePosition\n , lightPosition;\n\nvarying vec3 f_normal\n , f_lightDirection\n , f_eyeDirection\n , f_data;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvec4 project(vec3 p) {\n return projection * view * model * vec4(p, 1.0);\n}\n\nvoid main() {\n gl_Position = project(position);\n\n //Lighting geometry parameters\n vec4 cameraCoordinate = view * vec4(position , 1.0);\n cameraCoordinate.xyz /= cameraCoordinate.w;\n f_lightDirection = lightPosition - cameraCoordinate.xyz;\n f_eyeDirection = eyePosition - cameraCoordinate.xyz;\n f_normal = normalize((vec4(normal, 0.0) * inverseModel).xyz);\n\n f_color = color;\n f_data = position;\n f_uv = uv;\n}\n"]),i=n(["#extension GL_OES_standard_derivatives : enable\n\nprecision highp float;\n#define GLSLIFY 1\n\nfloat beckmannDistribution(float x, float roughness) {\n float NdotH = max(x, 0.0001);\n float cos2Alpha = NdotH * NdotH;\n float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n float roughness2 = roughness * roughness;\n float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n return exp(tan2Alpha / roughness2) / denom;\n}\n\nfloat cookTorranceSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float roughness,\n float fresnel) {\n\n float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\n float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\n\n //Half angle vector\n vec3 H = normalize(lightDirection + viewDirection);\n\n //Geometric term\n float NdotH = max(dot(surfaceNormal, H), 0.0);\n float VdotH = max(dot(viewDirection, H), 0.000001);\n float LdotH = max(dot(lightDirection, H), 0.000001);\n float G1 = (2.0 * NdotH * VdotN) / VdotH;\n float G2 = (2.0 * NdotH * LdotN) / LdotH;\n float G = min(1.0, min(G1, G2));\n \n //Distribution term\n float D = beckmannDistribution(NdotH, roughness);\n\n //Fresnel term\n float F = pow(1.0 - VdotN, fresnel);\n\n //Multiply terms and done\n return G * F * D / max(3.14159265 * VdotN, 0.000001);\n}\n\n//#pragma glslify: beckmann = require(glsl-specular-beckmann) // used in gl-surface3d\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float roughness\n , fresnel\n , kambient\n , kdiffuse\n , kspecular;\nuniform sampler2D texture;\n\nvarying vec3 f_normal\n , f_lightDirection\n , f_eyeDirection\n , f_data;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n if (f_color.a == 0.0 ||\n outOfRange(clipBounds[0], clipBounds[1], f_data)\n ) discard;\n\n vec3 N = normalize(f_normal);\n vec3 L = normalize(f_lightDirection);\n vec3 V = normalize(f_eyeDirection);\n\n if(gl_FrontFacing) {\n N = -N;\n }\n\n float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\n //float specular = max(0.0, beckmann(L, V, N, roughness)); // used in gl-surface3d\n\n float diffuse = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n vec4 surfaceColor = vec4(f_color.rgb, 1.0) * texture2D(texture, f_uv);\n vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular, 1.0);\n\n gl_FragColor = litColor * f_color.a;\n}\n"]),o=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 uv;\n\nuniform mat4 model, view, projection;\n\nvarying vec4 f_color;\nvarying vec3 f_data;\nvarying vec2 f_uv;\n\nvoid main() {\n gl_Position = projection * view * model * vec4(position, 1.0);\n f_color = color;\n f_data = position;\n f_uv = uv;\n}"]),s=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform sampler2D texture;\nuniform float opacity;\n\nvarying vec4 f_color;\nvarying vec3 f_data;\nvarying vec2 f_uv;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_data)) discard;\n\n gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\n}"]),l=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 uv;\nattribute float pointSize;\n\nuniform mat4 model, view, projection;\nuniform vec3 clipBounds[2];\n\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n gl_Position = vec4(0.0, 0.0 ,0.0 ,0.0);\n } else {\n gl_Position = projection * view * model * vec4(position, 1.0);\n }\n gl_PointSize = pointSize;\n f_color = color;\n f_uv = uv;\n}"]),c=n(["precision highp float;\n#define GLSLIFY 1\n\nuniform sampler2D texture;\nuniform float opacity;\n\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n vec2 pointR = gl_PointCoord.xy - vec2(0.5, 0.5);\n if(dot(pointR, pointR) > 0.25) {\n discard;\n }\n gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\n}"]),u=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n gl_Position = projection * view * model * vec4(position, 1.0);\n f_id = id;\n f_position = position;\n}"]),h=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float pickId;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n\n gl_FragColor = vec4(pickId, f_id.xyz);\n}"]),f=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute float pointSize;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\nuniform vec3 clipBounds[2];\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n gl_Position = vec4(0.0, 0.0, 0.0, 0.0);\n } else {\n gl_Position = projection * view * model * vec4(position, 1.0);\n gl_PointSize = pointSize;\n }\n f_id = id;\n f_position = position;\n}"]),p=n(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec3 position;\n\nuniform mat4 model, view, projection;\n\nvoid main() {\n gl_Position = projection * view * model * vec4(position, 1.0);\n}"]),d=n(["precision highp float;\n#define GLSLIFY 1\n\nuniform vec3 contourColor;\n\nvoid main() {\n gl_FragColor = vec4(contourColor, 1.0);\n}\n"]);r.meshShader={vertex:a,fragment:i,attributes:[{name:"position",type:"vec3"},{name:"normal",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"}]},r.wireShader={vertex:o,fragment:s,attributes:[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"}]},r.pointShader={vertex:l,fragment:c,attributes:[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"},{name:"pointSize",type:"float"}]},r.pickShader={vertex:u,fragment:h,attributes:[{name:"position",type:"vec3"},{name:"id",type:"vec4"}]},r.pointPickShader={vertex:f,fragment:h,attributes:[{name:"position",type:"vec3"},{name:"pointSize",type:"float"},{name:"id",type:"vec4"}]},r.contourShader={vertex:p,fragment:d,attributes:[{name:"position",type:"vec3"}]}},{glslify:410}],283:[function(t,e,r){"use strict";var n=t("gl-shader"),a=t("gl-buffer"),i=t("gl-vao"),o=t("gl-texture2d"),s=t("normals"),l=t("gl-mat4/multiply"),c=t("gl-mat4/invert"),u=t("ndarray"),h=t("colormap"),f=t("simplicial-complex-contour"),p=t("typedarray-pool"),d=t("./lib/shaders"),g=t("./lib/closest-point"),v=d.meshShader,m=d.wireShader,y=d.pointShader,x=d.pickShader,b=d.pointPickShader,_=d.contourShader,w=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function k(t,e,r,n,a,i,o,s,l,c,u,h,f,p,d,g,v,m,y,x,b,_,k,T,M,A,S){this.gl=t,this.pixelRatio=1,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=r,this.lineShader=n,this.pointShader=a,this.pickShader=i,this.pointPickShader=o,this.contourShader=s,this.trianglePositions=l,this.triangleColors=u,this.triangleNormals=f,this.triangleUVs=h,this.triangleIds=c,this.triangleVAO=p,this.triangleCount=0,this.lineWidth=1,this.edgePositions=d,this.edgeColors=v,this.edgeUVs=m,this.edgeIds=g,this.edgeVAO=y,this.edgeCount=0,this.pointPositions=x,this.pointColors=_,this.pointUVs=k,this.pointSizes=T,this.pointIds=b,this.pointVAO=M,this.pointCount=0,this.contourLineWidth=1,this.contourPositions=A,this.contourVAO=S,this.contourCount=0,this.contourColor=[0,0,0],this.contourEnable=!0,this.pickVertex=!0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this.hasAlpha=!1,this.opacityscale=!1,this._model=w,this._view=w,this._projection=w,this._resolution=[1,1]}var T=k.prototype;function M(t,e){if(!e)return 1;if(!e.length)return 1;for(var r=0;r<e.length;++r){if(e.length<2)return 1;if(e[r][0]===t)return e[r][1];if(e[r][0]>t&&r>0){var n=(e[r][0]-t)/(e[r][0]-e[r-1][0]);return e[r][1]*(1-n)+n*e[r-1][1]}}return 1}function A(t){var e=n(t,y.vertex,y.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.pointSize.location=4,e}function S(t){var e=n(t,x.vertex,x.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e}function E(t){var e=n(t,b.vertex,b.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e.attributes.pointSize.location=4,e}function L(t){var e=n(t,_.vertex,_.fragment);return e.attributes.position.location=0,e}T.isOpaque=function(){return!this.hasAlpha},T.isTransparent=function(){return this.hasAlpha},T.pickSlots=1,T.setPickBase=function(t){this.pickId=t},T.highlight=function(t){if(t&&this.contourEnable){for(var e=f(this.cells,this.intensity,t.intensity),r=e.cells,n=e.vertexIds,a=e.vertexWeights,i=r.length,o=p.mallocFloat32(6*i),s=0,l=0;l<i;++l)for(var c=r[l],u=0;u<2;++u){var h=c[0];2===c.length&&(h=c[u]);for(var d=n[h][0],g=n[h][1],v=a[h],m=1-v,y=this.positions[d],x=this.positions[g],b=0;b<3;++b)o[s++]=v*y[b]+m*x[b]}this.contourCount=s/3|0,this.contourPositions.update(o.subarray(0,s)),p.free(o)}else this.contourCount=0},T.update=function(t){t=t||{};var e=this.gl;this.dirty=!0,"contourEnable"in t&&(this.contourEnable=t.contourEnable),"contourColor"in t&&(this.contourColor=t.contourColor),"lineWidth"in t&&(this.lineWidth=t.lineWidth),"lightPosition"in t&&(this.lightPosition=t.lightPosition),this.hasAlpha=!1,"opacity"in t&&(this.opacity=t.opacity,this.opacity<1&&(this.hasAlpha=!0)),"opacityscale"in t&&(this.opacityscale=t.opacityscale,this.hasAlpha=!0),"ambient"in t&&(this.ambientLight=t.ambient),"diffuse"in t&&(this.diffuseLight=t.diffuse),"specular"in t&&(this.specularLight=t.specular),"roughness"in t&&(this.roughness=t.roughness),"fresnel"in t&&(this.fresnel=t.fresnel),t.texture?(this.texture.dispose(),this.texture=o(e,t.texture)):t.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=e.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=e.LINEAR,this.texture.setPixels(function(t,e){for(var r=h({colormap:t,nshades:256,format:"rgba"}),n=new Uint8Array(1024),a=0;a<256;++a){for(var i=r[a],o=0;o<3;++o)n[4*a+o]=i[o];n[4*a+3]=e?255*M(a/255,e):255*i[3]}return u(n,[256,256,4],[4,0,1])}(t.colormap,this.opacityscale)),this.texture.generateMipmap());var r=t.cells,n=t.positions;if(n&&r){var a=[],i=[],l=[],c=[],f=[],p=[],d=[],g=[],v=[],m=[],y=[],x=[],b=[],_=[];this.cells=r,this.positions=n;var w=t.vertexNormals,k=t.cellNormals,T=void 0===t.vertexNormalsEpsilon?1e-6:t.vertexNormalsEpsilon,A=void 0===t.faceNormalsEpsilon?1e-6:t.faceNormalsEpsilon;t.useFacetNormals&&!k&&(k=s.faceNormals(r,n,A)),k||w||(w=s.vertexNormals(r,n,T));var S=t.vertexColors,E=t.cellColors,L=t.meshColor||[1,1,1,1],C=t.vertexUVs,P=t.vertexIntensity,O=t.cellUVs,z=t.cellIntensity,I=1/0,D=-1/0;if(!C&&!O)if(P)if(t.vertexIntensityBounds)I=+t.vertexIntensityBounds[0],D=+t.vertexIntensityBounds[1];else for(var R=0;R<P.length;++R){var F=P[R];I=Math.min(I,F),D=Math.max(D,F)}else if(z)if(t.cellIntensityBounds)I=+t.cellIntensityBounds[0],D=+t.cellIntensityBounds[1];else for(R=0;R<z.length;++R){F=z[R];I=Math.min(I,F),D=Math.max(D,F)}else for(R=0;R<n.length;++R){F=n[R][2];I=Math.min(I,F),D=Math.max(D,F)}this.intensity=P||(z||function(t){for(var e=t.length,r=new Array(e),n=0;n<e;++n)r[n]=t[n][2];return r}(n)),this.pickVertex=!(z||E);var B=t.pointSizes,N=t.pointSize||1;this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(R=0;R<n.length;++R)for(var j=n[R],V=0;V<3;++V)!isNaN(j[V])&&isFinite(j[V])&&(this.bounds[0][V]=Math.min(this.bounds[0][V],j[V]),this.bounds[1][V]=Math.max(this.bounds[1][V],j[V]));var U=0,q=0,H=0;t:for(R=0;R<r.length;++R){var G=r[R];switch(G.length){case 1:for(j=n[W=G[0]],V=0;V<3;++V)if(isNaN(j[V])||!isFinite(j[V]))continue t;m.push(j[0],j[1],j[2]),X=S?S[W]:E?E[R]:L,this.opacityscale&&P?i.push(X[0],X[1],X[2],this.opacity*M((P[W]-I)/(D-I),this.opacityscale)):3===X.length?y.push(X[0],X[1],X[2],this.opacity):(y.push(X[0],X[1],X[2],X[3]*this.opacity),X[3]<1&&(this.hasAlpha=!0)),Z=C?C[W]:P?[(P[W]-I)/(D-I),0]:O?O[R]:z?[(z[R]-I)/(D-I),0]:[(j[2]-I)/(D-I),0],x.push(Z[0],Z[1]),B?b.push(B[W]):b.push(N),_.push(R),H+=1;break;case 2:for(V=0;V<2;++V){j=n[W=G[V]];for(var Y=0;Y<3;++Y)if(isNaN(j[Y])||!isFinite(j[Y]))continue t}for(V=0;V<2;++V){j=n[W=G[V]];p.push(j[0],j[1],j[2]),X=S?S[W]:E?E[R]:L,this.opacityscale&&P?i.push(X[0],X[1],X[2],this.opacity*M((P[W]-I)/(D-I),this.opacityscale)):3===X.length?d.push(X[0],X[1],X[2],this.opacity):(d.push(X[0],X[1],X[2],X[3]*this.opacity),X[3]<1&&(this.hasAlpha=!0)),Z=C?C[W]:P?[(P[W]-I)/(D-I),0]:O?O[R]:z?[(z[R]-I)/(D-I),0]:[(j[2]-I)/(D-I),0],g.push(Z[0],Z[1]),v.push(R)}q+=1;break;case 3:for(V=0;V<3;++V)for(j=n[W=G[V]],Y=0;Y<3;++Y)if(isNaN(j[Y])||!isFinite(j[Y]))continue t;for(V=0;V<3;++V){var W,X,Z,J;j=n[W=G[2-V]];a.push(j[0],j[1],j[2]),(X=S?S[W]:E?E[R]:L)?this.opacityscale&&P?i.push(X[0],X[1],X[2],this.opacity*M((P[W]-I)/(D-I),this.opacityscale)):3===X.length?i.push(X[0],X[1],X[2],this.opacity):(i.push(X[0],X[1],X[2],X[3]*this.opacity),X[3]<1&&(this.hasAlpha=!0)):i.push(.5,.5,.5,1),Z=C?C[W]:P?[(P[W]-I)/(D-I),0]:O?O[R]:z?[(z[R]-I)/(D-I),0]:[(j[2]-I)/(D-I),0],c.push(Z[0],Z[1]),J=w?w[W]:k[R],l.push(J[0],J[1],J[2]),f.push(R)}U+=1}}this.pointCount=H,this.edgeCount=q,this.triangleCount=U,this.pointPositions.update(m),this.pointColors.update(y),this.pointUVs.update(x),this.pointSizes.update(b),this.pointIds.update(new Uint32Array(_)),this.edgePositions.update(p),this.edgeColors.update(d),this.edgeUVs.update(g),this.edgeIds.update(new Uint32Array(v)),this.trianglePositions.update(a),this.triangleColors.update(i),this.triangleUVs.update(c),this.triangleNormals.update(l),this.triangleIds.update(new Uint32Array(f))}},T.drawTransparent=T.draw=function(t){t=t||{};for(var e=this.gl,r=t.model||w,n=t.view||w,a=t.projection||w,i=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)i[0][o]=Math.max(i[0][o],this.clipBounds[0][o]),i[1][o]=Math.min(i[1][o],this.clipBounds[1][o]);var s={model:r,view:n,projection:a,inverseModel:w.slice(),clipBounds:i,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],contourColor:this.contourColor,texture:0};s.inverseModel=c(s.inverseModel,s.model),e.disable(e.CULL_FACE),this.texture.bind(0);var u=new Array(16);l(u,s.view,s.model),l(u,s.projection,u),c(u,u);for(o=0;o<3;++o)s.eyePosition[o]=u[12+o]/u[15];var h,f=u[15];for(o=0;o<3;++o)f+=this.lightPosition[o]*u[4*o+3];for(o=0;o<3;++o){for(var p=u[12+o],d=0;d<3;++d)p+=u[4*d+o]*this.lightPosition[d];s.lightPosition[o]=p/f}this.triangleCount>0&&((h=this.triShader).bind(),h.uniforms=s,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind());this.edgeCount>0&&this.lineWidth>0&&((h=this.lineShader).bind(),h.uniforms=s,this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind());this.pointCount>0&&((h=this.pointShader).bind(),h.uniforms=s,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind());this.contourEnable&&this.contourCount>0&&this.contourLineWidth>0&&((h=this.contourShader).bind(),h.uniforms=s,this.contourVAO.bind(),e.drawArrays(e.LINES,0,this.contourCount),this.contourVAO.unbind())},T.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||w,n=t.view||w,a=t.projection||w,i=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)i[0][o]=Math.max(i[0][o],this.clipBounds[0][o]),i[1][o]=Math.min(i[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(a),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s,l={model:r,view:n,projection:a,clipBounds:i,pickId:this.pickId/255};((s=this.pickShader).bind(),s.uniforms=l,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&(this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind()),this.pointCount>0)&&((s=this.pointPickShader).bind(),s.uniforms=l,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind())},T.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;for(var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions,a=new Array(r.length),i=0;i<r.length;++i)a[i]=n[r[i]];var o=t.coord[0],s=t.coord[1];if(!this.pickVertex){var l=this.positions[r[0]],c=this.positions[r[1]],u=this.positions[r[2]],h=[(l[0]+c[0]+u[0])/3,(l[1]+c[1]+u[1])/3,(l[2]+c[2]+u[2])/3];return{_cellCenter:!0,position:[o,s],index:e,cell:r,cellId:e,intensity:this.intensity[e],dataCoordinate:h}}var f=g(a,[o*this.pixelRatio,this._resolution[1]-s*this.pixelRatio],this._model,this._view,this._projection,this._resolution);if(!f)return null;var p=f[2],d=0;for(i=0;i<r.length;++i)d+=p[i]*this.intensity[r[i]];return{position:f[1],index:r[f[0]],cell:r,cellId:e,intensity:d,dataCoordinate:this.positions[r[f[0]]]}},T.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.lineShader.dispose(),this.pointShader.dispose(),this.pickShader.dispose(),this.pointPickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleNormals.dispose(),this.triangleIds.dispose(),this.edgeVAO.dispose(),this.edgePositions.dispose(),this.edgeColors.dispose(),this.edgeUVs.dispose(),this.edgeIds.dispose(),this.pointVAO.dispose(),this.pointPositions.dispose(),this.pointColors.dispose(),this.pointUVs.dispose(),this.pointSizes.dispose(),this.pointIds.dispose(),this.contourVAO.dispose(),this.contourPositions.dispose(),this.contourShader.dispose()},e.exports=function(t,e){if(1===arguments.length&&(t=(e=t).gl),!(t.getExtension("OES_standard_derivatives")||t.getExtension("MOZ_OES_standard_derivatives")||t.getExtension("WEBKIT_OES_standard_derivatives")))throw new Error("derivatives not supported");var r=function(t){var e=n(t,v.vertex,v.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.normal.location=4,e}(t),s=function(t){var e=n(t,m.vertex,m.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e}(t),l=A(t),c=S(t),h=E(t),f=L(t),p=o(t,u(new Uint8Array([255,255,255,255]),[1,1,4]));p.generateMipmap(),p.minFilter=t.LINEAR_MIPMAP_LINEAR,p.magFilter=t.LINEAR;var d=a(t),g=a(t),y=a(t),x=a(t),b=a(t),_=i(t,[{buffer:d,type:t.FLOAT,size:3},{buffer:b,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:g,type:t.FLOAT,size:4},{buffer:y,type:t.FLOAT,size:2},{buffer:x,type:t.FLOAT,size:3}]),w=a(t),T=a(t),M=a(t),C=a(t),P=i(t,[{buffer:w,type:t.FLOAT,size:3},{buffer:C,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:T,type:t.FLOAT,size:4},{buffer:M,type:t.FLOAT,size:2}]),O=a(t),z=a(t),I=a(t),D=a(t),R=a(t),F=i(t,[{buffer:O,type:t.FLOAT,size:3},{buffer:R,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:z,type:t.FLOAT,size:4},{buffer:I,type:t.FLOAT,size:2},{buffer:D,type:t.FLOAT,size:1}]),B=a(t),N=new k(t,p,r,s,l,c,h,f,d,b,g,y,x,_,w,C,T,M,P,O,R,z,I,D,F,B,i(t,[{buffer:B,type:t.FLOAT,size:3}]));return N.update(e),N}},{"./lib/closest-point":281,"./lib/shaders":282,colormap:128,"gl-buffer":244,"gl-mat4/invert":268,"gl-mat4/multiply":270,"gl-shader":304,"gl-texture2d":324,"gl-vao":329,ndarray:451,normals:454,"simplicial-complex-contour":516,"typedarray-pool":543}],284:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl,r=n(e,[0,0,0,1,1,0,1,1]),s=a(e,i.boxVert,i.lineFrag);return new o(t,r,s)};var n=t("gl-buffer"),a=t("gl-shader"),i=t("./shaders");function o(t,e,r){this.plot=t,this.vbo=e,this.shader=r}var s,l,c=o.prototype;c.bind=function(){var t=this.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox=this.plot.screenBox},c.drawBox=(s=[0,0],l=[0,0],function(t,e,r,n,a){var i=this.plot,o=this.shader,c=i.gl;s[0]=t,s[1]=e,l[0]=r,l[1]=n,o.uniforms.lo=s,o.uniforms.hi=l,o.uniforms.color=a,c.drawArrays(c.TRIANGLE_STRIP,0,4)}),c.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},{"./shaders":287,"gl-buffer":244,"gl-shader":304}],285:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl,r=n(e),i=a(e,o.gridVert,o.gridFrag),l=a(e,o.tickVert,o.gridFrag);return new s(t,r,i,l)};var n=t("gl-buffer"),a=t("gl-shader"),i=t("binary-search-bounds"),o=t("./shaders");function s(t,e,r,n){this.plot=t,this.vbo=e,this.shader=r,this.tickShader=n,this.ticks=[[],[]]}function l(t,e){return t-e}var c,u,h,f,p,d=s.prototype;d.draw=(c=[0,0],u=[0,0],h=[0,0],function(){for(var t=this.plot,e=this.vbo,r=this.shader,n=this.ticks,a=t.gl,i=t._tickBounds,o=t.dataBox,s=t.viewBox,l=t.gridLineWidth,f=t.gridLineColor,p=t.gridLineEnable,d=t.pixelRatio,g=0;g<2;++g){var v=i[g],m=i[g+2]-v,y=.5*(o[g+2]+o[g]),x=o[g+2]-o[g];u[g]=2*m/x,c[g]=2*(v-y)/x}r.bind(),e.bind(),r.attributes.dataCoord.pointer(),r.uniforms.dataShift=c,r.uniforms.dataScale=u;var b=0;for(g=0;g<2;++g){h[0]=h[1]=0,h[g]=1,r.uniforms.dataAxis=h,r.uniforms.lineWidth=l[g]/(s[g+2]-s[g])*d,r.uniforms.color=f[g];var _=6*n[g].length;p[g]&&_&&a.drawArrays(a.TRIANGLES,b,_),b+=_}}),d.drawTickMarks=function(){var t=[0,0],e=[0,0],r=[1,0],n=[0,1],a=[0,0],o=[0,0];return function(){for(var s=this.plot,c=this.vbo,u=this.tickShader,h=this.ticks,f=s.gl,p=s._tickBounds,d=s.dataBox,g=s.viewBox,v=s.pixelRatio,m=s.screenBox,y=m[2]-m[0],x=m[3]-m[1],b=g[2]-g[0],_=g[3]-g[1],w=0;w<2;++w){var k=p[w],T=p[w+2]-k,M=.5*(d[w+2]+d[w]),A=d[w+2]-d[w];e[w]=2*T/A,t[w]=2*(k-M)/A}e[0]*=b/y,t[0]*=b/y,e[1]*=_/x,t[1]*=_/x,u.bind(),c.bind(),u.attributes.dataCoord.pointer();var S=u.uniforms;S.dataShift=t,S.dataScale=e;var E=s.tickMarkLength,L=s.tickMarkWidth,C=s.tickMarkColor,P=6*h[0].length,O=Math.min(i.ge(h[0],(d[0]-p[0])/(p[2]-p[0]),l),h[0].length),z=Math.min(i.gt(h[0],(d[2]-p[0])/(p[2]-p[0]),l),h[0].length),I=0+6*O,D=6*Math.max(0,z-O),R=Math.min(i.ge(h[1],(d[1]-p[1])/(p[3]-p[1]),l),h[1].length),F=Math.min(i.gt(h[1],(d[3]-p[1])/(p[3]-p[1]),l),h[1].length),B=P+6*R,N=6*Math.max(0,F-R);a[0]=2*(g[0]-E[1])/y-1,a[1]=(g[3]+g[1])/x-1,o[0]=E[1]*v/y,o[1]=L[1]*v/x,N&&(S.color=C[1],S.tickScale=o,S.dataAxis=n,S.screenOffset=a,f.drawArrays(f.TRIANGLES,B,N)),a[0]=(g[2]+g[0])/y-1,a[1]=2*(g[1]-E[0])/x-1,o[0]=L[0]*v/y,o[1]=E[0]*v/x,D&&(S.color=C[0],S.tickScale=o,S.dataAxis=r,S.screenOffset=a,f.drawArrays(f.TRIANGLES,I,D)),a[0]=2*(g[2]+E[3])/y-1,a[1]=(g[3]+g[1])/x-1,o[0]=E[3]*v/y,o[1]=L[3]*v/x,N&&(S.color=C[3],S.tickScale=o,S.dataAxis=n,S.screenOffset=a,f.drawArrays(f.TRIANGLES,B,N)),a[0]=(g[2]+g[0])/y-1,a[1]=2*(g[3]+E[2])/x-1,o[0]=L[2]*v/y,o[1]=E[2]*v/x,D&&(S.color=C[2],S.tickScale=o,S.dataAxis=r,S.screenOffset=a,f.drawArrays(f.TRIANGLES,I,D))}}(),d.update=(f=[1,1,-1,-1,1,-1],p=[1,-1,1,1,-1,-1],function(t){for(var e=t.ticks,r=t.bounds,n=new Float32Array(18*(e[0].length+e[1].length)),a=(this.plot.zeroLineEnable,0),i=[[],[]],o=0;o<2;++o)for(var s=i[o],l=e[o],c=r[o],u=r[o+2],h=0;h<l.length;++h){var d=(l[h].x-c)/(u-c);s.push(d);for(var g=0;g<6;++g)n[a++]=d,n[a++]=f[g],n[a++]=p[g]}this.ticks=i,this.vbo.update(n)}),d.dispose=function(){this.vbo.dispose(),this.shader.dispose(),this.tickShader.dispose()}},{"./shaders":287,"binary-search-bounds":289,"gl-buffer":244,"gl-shader":304}],286:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl,r=n(e,[-1,-1,-1,1,1,-1,1,1]),s=a(e,i.lineVert,i.lineFrag);return new o(t,r,s)};var n=t("gl-buffer"),a=t("gl-shader"),i=t("./shaders");function o(t,e,r){this.plot=t,this.vbo=e,this.shader=r}var s,l,c=o.prototype;c.bind=function(){var t=this.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox=this.plot.screenBox},c.drawLine=(s=[0,0],l=[0,0],function(t,e,r,n,a,i){var o=this.plot,c=this.shader,u=o.gl;s[0]=t,s[1]=e,l[0]=r,l[1]=n,c.uniforms.start=s,c.uniforms.end=l,c.uniforms.width=a*o.pixelRatio,c.uniforms.color=i,u.drawArrays(u.TRIANGLE_STRIP,0,4)}),c.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},{"./shaders":287,"gl-buffer":244,"gl-shader":304}],287:[function(t,e,r){"use strict";var n=t("glslify"),a=n(["precision lowp float;\n#define GLSLIFY 1\nuniform vec4 color;\nvoid main() {\n gl_FragColor = vec4(color.xyz * color.w, color.w);\n}\n"]);e.exports={lineVert:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 coord;\n\nuniform vec4 screenBox;\nuniform vec2 start, end;\nuniform float width;\n\nvec2 perp(vec2 v) {\n return vec2(v.y, -v.x);\n}\n\nvec2 screen(vec2 v) {\n return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\n}\n\nvoid main() {\n vec2 delta = normalize(perp(start - end));\n vec2 offset = mix(start, end, 0.5 * (coord.y+1.0));\n gl_Position = vec4(screen(offset + 0.5 * width * delta * coord.x), 0, 1);\n}\n"]),lineFrag:a,textVert:n(["#define GLSLIFY 1\nattribute vec3 textCoordinate;\n\nuniform vec2 dataScale, dataShift, dataAxis, screenOffset, textScale;\nuniform float angle;\n\nvoid main() {\n float dataOffset = textCoordinate.z;\n vec2 glyphOffset = textCoordinate.xy;\n mat2 glyphMatrix = mat2(cos(angle), sin(angle), -sin(angle), cos(angle));\n vec2 screenCoordinate = dataAxis * (dataScale * dataOffset + dataShift) +\n glyphMatrix * glyphOffset * textScale + screenOffset;\n gl_Position = vec4(screenCoordinate, 0, 1);\n}\n"]),textFrag:a,gridVert:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 dataCoord;\n\nuniform vec2 dataAxis, dataShift, dataScale;\nuniform float lineWidth;\n\nvoid main() {\n vec2 pos = dataAxis * (dataScale * dataCoord.x + dataShift);\n pos += 10.0 * dataCoord.y * vec2(dataAxis.y, -dataAxis.x) + dataCoord.z * lineWidth;\n gl_Position = vec4(pos, 0, 1);\n}\n"]),gridFrag:a,boxVert:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 coord;\n\nuniform vec4 screenBox;\nuniform vec2 lo, hi;\n\nvec2 screen(vec2 v) {\n return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\n}\n\nvoid main() {\n gl_Position = vec4(screen(mix(lo, hi, coord)), 0, 1);\n}\n"]),tickVert:n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 dataCoord;\n\nuniform vec2 dataAxis, dataShift, dataScale, screenOffset, tickScale;\n\nvoid main() {\n vec2 pos = dataAxis * (dataScale * dataCoord.x + dataShift);\n gl_Position = vec4(pos + tickScale*dataCoord.yz + screenOffset, 0, 1);\n}\n"])}},{glslify:410}],288:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl,r=n(e),i=a(e,s.textVert,s.textFrag);return new l(t,r,i)};var n=t("gl-buffer"),a=t("gl-shader"),i=t("text-cache"),o=t("binary-search-bounds"),s=t("./shaders");function l(t,e,r){this.plot=t,this.vbo=e,this.shader=r,this.tickOffset=[[],[]],this.tickX=[[],[]],this.labelOffset=[0,0],this.labelCount=[0,0]}var c,u,h,f,p,d,g=l.prototype;g.drawTicks=(c=[0,0],u=[0,0],h=[0,0],function(t){var e=this.plot,r=this.shader,n=this.tickX[t],a=this.tickOffset[t],i=e.gl,s=e.viewBox,l=e.dataBox,f=e.screenBox,p=e.pixelRatio,d=e.tickEnable,g=e.tickPad,v=e.tickColor,m=e.tickAngle,y=e.labelEnable,x=e.labelPad,b=e.labelColor,_=e.labelAngle,w=this.labelOffset[t],k=this.labelCount[t],T=o.lt(n,l[t]),M=o.le(n,l[t+2]);c[0]=c[1]=0,c[t]=1,u[t]=(s[2+t]+s[t])/(f[2+t]-f[t])-1;var A=2/f[2+(1^t)]-f[1^t];u[1^t]=A*s[1^t]-1,d[t]&&(u[1^t]-=A*p*g[t],T<M&&a[M]>a[T]&&(r.uniforms.dataAxis=c,r.uniforms.screenOffset=u,r.uniforms.color=v[t],r.uniforms.angle=m[t],i.drawArrays(i.TRIANGLES,a[T],a[M]-a[T]))),y[t]&&k&&(u[1^t]-=A*p*x[t],r.uniforms.dataAxis=h,r.uniforms.screenOffset=u,r.uniforms.color=b[t],r.uniforms.angle=_[t],i.drawArrays(i.TRIANGLES,w,k)),u[1^t]=A*s[2+(1^t)]-1,d[t+2]&&(u[1^t]+=A*p*g[t+2],T<M&&a[M]>a[T]&&(r.uniforms.dataAxis=c,r.uniforms.screenOffset=u,r.uniforms.color=v[t+2],r.uniforms.angle=m[t+2],i.drawArrays(i.TRIANGLES,a[T],a[M]-a[T]))),y[t+2]&&k&&(u[1^t]+=A*p*x[t+2],r.uniforms.dataAxis=h,r.uniforms.screenOffset=u,r.uniforms.color=b[t+2],r.uniforms.angle=_[t+2],i.drawArrays(i.TRIANGLES,w,k))}),g.drawTitle=function(){var t=[0,0],e=[0,0];return function(){var r=this.plot,n=this.shader,a=r.gl,i=r.screenBox,o=r.titleCenter,s=r.titleAngle,l=r.titleColor,c=r.pixelRatio;if(this.titleCount){for(var u=0;u<2;++u)e[u]=2*(o[u]*c-i[u])/(i[2+u]-i[u])-1;n.bind(),n.uniforms.dataAxis=t,n.uniforms.screenOffset=e,n.uniforms.angle=s,n.uniforms.color=l,a.drawArrays(a.TRIANGLES,this.titleOffset,this.titleCount)}}}(),g.bind=(f=[0,0],p=[0,0],d=[0,0],function(){var t=this.plot,e=this.shader,r=t._tickBounds,n=t.dataBox,a=t.screenBox,i=t.viewBox;e.bind();for(var o=0;o<2;++o){var s=r[o],l=r[o+2]-s,c=.5*(n[o+2]+n[o]),u=n[o+2]-n[o],h=i[o],g=i[o+2]-h,v=a[o],m=a[o+2]-v;p[o]=2*l/u*g/m,f[o]=2*(s-c)/u*g/m}d[1]=2*t.pixelRatio/(a[3]-a[1]),d[0]=d[1]*(a[3]-a[1])/(a[2]-a[0]),e.uniforms.dataScale=p,e.uniforms.dataShift=f,e.uniforms.textScale=d,this.vbo.bind(),e.attributes.textCoordinate.pointer()}),g.update=function(t){var e,r,n,a,o,s=[],l=t.ticks,c=t.bounds;for(o=0;o<2;++o){var u=[Math.floor(s.length/3)],h=[-1/0],f=l[o];for(e=0;e<f.length;++e){var p=f[e],d=p.x,g=p.text,v=p.font||"sans-serif";a=p.fontSize||12;for(var m=1/(c[o+2]-c[o]),y=c[o],x=g.split("\n"),b=0;b<x.length;b++)for(n=i(v,x[b]).data,r=0;r<n.length;r+=2)s.push(n[r]*a,-n[r+1]*a-b*a*1.2,(d-y)*m);u.push(Math.floor(s.length/3)),h.push(d)}this.tickOffset[o]=u,this.tickX[o]=h}for(o=0;o<2;++o){for(this.labelOffset[o]=Math.floor(s.length/3),n=i(t.labelFont[o],t.labels[o],{textAlign:"center"}).data,a=t.labelSize[o],e=0;e<n.length;e+=2)s.push(n[e]*a,-n[e+1]*a,0);this.labelCount[o]=Math.floor(s.length/3)-this.labelOffset[o]}for(this.titleOffset=Math.floor(s.length/3),n=i(t.titleFont,t.title).data,a=t.titleSize,e=0;e<n.length;e+=2)s.push(n[e]*a,-n[e+1]*a,0);this.titleCount=Math.floor(s.length/3)-this.titleOffset,this.vbo.update(s)},g.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},{"./shaders":287,"binary-search-bounds":289,"gl-buffer":244,"gl-shader":304,"text-cache":534}],289:[function(t,e,r){arguments[4][113][0].apply(r,arguments)},{dup:113}],290:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl,r=n(e,[e.drawingBufferWidth,e.drawingBufferHeight]),c=new l(e,r);return c.grid=a(c),c.text=i(c),c.line=o(c),c.box=s(c),c.update(t),c};var n=t("gl-select-static"),a=t("./lib/grid"),i=t("./lib/text"),o=t("./lib/line"),s=t("./lib/box");function l(t,e){this.gl=t,this.pickBuffer=e,this.screenBox=[0,0,t.drawingBufferWidth,t.drawingBufferHeight],this.viewBox=[0,0,0,0],this.dataBox=[-10,-10,10,10],this.gridLineEnable=[!0,!0],this.gridLineWidth=[1,1],this.gridLineColor=[[0,0,0,1],[0,0,0,1]],this.pixelRatio=1,this.tickMarkLength=[0,0,0,0],this.tickMarkWidth=[0,0,0,0],this.tickMarkColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[15,15,15,15],this.tickAngle=[0,0,0,0],this.tickEnable=[!0,!0,!0,!0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[15,15,15,15],this.labelAngle=[0,Math.PI/2,0,3*Math.PI/2],this.labelEnable=[!0,!0,!0,!0],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.titleCenter=[0,0],this.titleEnable=!0,this.titleAngle=0,this.titleColor=[0,0,0,1],this.borderColor=[0,0,0,0],this.backgroundColor=[0,0,0,0],this.zeroLineEnable=[!0,!0],this.zeroLineWidth=[4,4],this.zeroLineColor=[[0,0,0,1],[0,0,0,1]],this.borderLineEnable=[!0,!0,!0,!0],this.borderLineWidth=[2,2,2,2],this.borderLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.grid=null,this.text=null,this.line=null,this.box=null,this.objects=[],this.overlays=[],this._tickBounds=[1/0,1/0,-1/0,-1/0],this.static=!1,this.dirty=!1,this.pickDirty=!1,this.pickDelay=120,this.pickRadius=10,this._pickTimeout=null,this._drawPick=this.drawPick.bind(this),this._depthCounter=0}var c=l.prototype;function u(t){for(var e=t.slice(),r=0;r<e.length;++r)e[r]=e[r].slice();return e}function h(t,e){return t.x-e.x}c.setDirty=function(){this.dirty=this.pickDirty=!0},c.setOverlayDirty=function(){this.dirty=!0},c.nextDepthValue=function(){return this._depthCounter++/65536},c.draw=function(){var t=this.gl,e=this.screenBox,r=this.viewBox,n=this.dataBox,a=this.pixelRatio,i=this.grid,o=this.line,s=this.text,l=this.objects;if(this._depthCounter=0,this.pickDirty&&(this._pickTimeout&&clearTimeout(this._pickTimeout),this.pickDirty=!1,this._pickTimeout=setTimeout(this._drawPick,this.pickDelay)),this.dirty){if(this.dirty=!1,t.bindFramebuffer(t.FRAMEBUFFER,null),t.enable(t.SCISSOR_TEST),t.disable(t.DEPTH_TEST),t.depthFunc(t.LESS),t.depthMask(!1),t.enable(t.BLEND),t.blendEquation(t.FUNC_ADD,t.FUNC_ADD),t.blendFunc(t.ONE,t.ONE_MINUS_SRC_ALPHA),this.borderColor){t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]);var c=this.borderColor;t.clearColor(c[0]*c[3],c[1]*c[3],c[2]*c[3],c[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT)}t.scissor(r[0],r[1],r[2]-r[0],r[3]-r[1]),t.viewport(r[0],r[1],r[2]-r[0],r[3]-r[1]);var u=this.backgroundColor;t.clearColor(u[0]*u[3],u[1]*u[3],u[2]*u[3],u[3]),t.clear(t.COLOR_BUFFER_BIT),i.draw();var h=this.zeroLineEnable,f=this.zeroLineColor,p=this.zeroLineWidth;if(h[0]||h[1]){o.bind();for(var d=0;d<2;++d)if(h[d]&&n[d]<=0&&n[d+2]>=0){var g=e[d]-n[d]*(e[d+2]-e[d])/(n[d+2]-n[d]);0===d?o.drawLine(g,e[1],g,e[3],p[d],f[d]):o.drawLine(e[0],g,e[2],g,p[d],f[d])}}for(d=0;d<l.length;++d)l[d].draw();t.viewport(e[0],e[1],e[2]-e[0],e[3]-e[1]),t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]),this.grid.drawTickMarks(),o.bind();var v=this.borderLineEnable,m=this.borderLineWidth,y=this.borderLineColor;for(v[1]&&o.drawLine(r[0],r[1]-.5*m[1]*a,r[0],r[3]+.5*m[3]*a,m[1],y[1]),v[0]&&o.drawLine(r[0]-.5*m[0]*a,r[1],r[2]+.5*m[2]*a,r[1],m[0],y[0]),v[3]&&o.drawLine(r[2],r[1]-.5*m[1]*a,r[2],r[3]+.5*m[3]*a,m[3],y[3]),v[2]&&o.drawLine(r[0]-.5*m[0]*a,r[3],r[2]+.5*m[2]*a,r[3],m[2],y[2]),s.bind(),d=0;d<2;++d)s.drawTicks(d);this.titleEnable&&s.drawTitle();var x=this.overlays;for(d=0;d<x.length;++d)x[d].draw();t.disable(t.SCISSOR_TEST),t.disable(t.BLEND),t.depthMask(!0)}},c.drawPick=function(){if(!this.static){var t=this.pickBuffer;this.gl,this._pickTimeout=null,t.begin();for(var e=1,r=this.objects,n=0;n<r.length;++n)e=r[n].drawPick(e);t.end()}},c.pick=function(t,e){if(!this.static){var r=this.pixelRatio,n=this.pickPixelRatio,a=this.viewBox,i=0|Math.round((t-a[0]/r)*n),o=0|Math.round((e-a[1]/r)*n),s=this.pickBuffer.query(i,o,this.pickRadius);if(!s)return null;for(var l=s.id+(s.value[0]<<8)+(s.value[1]<<16)+(s.value[2]<<24),c=this.objects,u=0;u<c.length;++u){var h=c[u].pick(i,o,l);if(h)return h}return null}},c.setScreenBox=function(t){var e=this.screenBox,r=this.pixelRatio;e[0]=0|Math.round(t[0]*r),e[1]=0|Math.round(t[1]*r),e[2]=0|Math.round(t[2]*r),e[3]=0|Math.round(t[3]*r),this.setDirty()},c.setDataBox=function(t){var e=this.dataBox;(e[0]!==t[0]||e[1]!==t[1]||e[2]!==t[2]||e[3]!==t[3])&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],this.setDirty())},c.setViewBox=function(t){var e=this.pixelRatio,r=this.viewBox;r[0]=0|Math.round(t[0]*e),r[1]=0|Math.round(t[1]*e),r[2]=0|Math.round(t[2]*e),r[3]=0|Math.round(t[3]*e);var n=this.pickPixelRatio;this.pickBuffer.shape=[0|Math.round((t[2]-t[0])*n),0|Math.round((t[3]-t[1])*n)],this.setDirty()},c.update=function(t){t=t||{};var e=this.gl;this.pixelRatio=t.pixelRatio||1;var r=this.pixelRatio;this.pickPixelRatio=Math.max(r,1),this.setScreenBox(t.screenBox||[0,0,e.drawingBufferWidth/r,e.drawingBufferHeight/r]);this.screenBox;this.setViewBox(t.viewBox||[.125*(this.screenBox[2]-this.screenBox[0])/r,.125*(this.screenBox[3]-this.screenBox[1])/r,.875*(this.screenBox[2]-this.screenBox[0])/r,.875*(this.screenBox[3]-this.screenBox[1])/r]);var n=this.viewBox,a=(n[2]-n[0])/(n[3]-n[1]);this.setDataBox(t.dataBox||[-10,-10/a,10,10/a]),this.borderColor=!1!==t.borderColor&&(t.borderColor||[0,0,0,0]).slice(),this.backgroundColor=(t.backgroundColor||[0,0,0,0]).slice(),this.gridLineEnable=(t.gridLineEnable||[!0,!0]).slice(),this.gridLineWidth=(t.gridLineWidth||[1,1]).slice(),this.gridLineColor=u(t.gridLineColor||[[.5,.5,.5,1],[.5,.5,.5,1]]),this.zeroLineEnable=(t.zeroLineEnable||[!0,!0]).slice(),this.zeroLineWidth=(t.zeroLineWidth||[4,4]).slice(),this.zeroLineColor=u(t.zeroLineColor||[[0,0,0,1],[0,0,0,1]]),this.tickMarkLength=(t.tickMarkLength||[0,0,0,0]).slice(),this.tickMarkWidth=(t.tickMarkWidth||[0,0,0,0]).slice(),this.tickMarkColor=u(t.tickMarkColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.titleCenter=(t.titleCenter||[.5*(n[0]+n[2])/r,(n[3]+120)/r]).slice(),this.titleEnable=!("titleEnable"in t&&!t.titleEnable),this.titleAngle=t.titleAngle||0,this.titleColor=(t.titleColor||[0,0,0,1]).slice(),this.labelPad=(t.labelPad||[15,15,15,15]).slice(),this.labelAngle=(t.labelAngle||[0,Math.PI/2,0,3*Math.PI/2]).slice(),this.labelEnable=(t.labelEnable||[!0,!0,!0,!0]).slice(),this.labelColor=u(t.labelColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.tickPad=(t.tickPad||[15,15,15,15]).slice(),this.tickAngle=(t.tickAngle||[0,0,0,0]).slice(),this.tickEnable=(t.tickEnable||[!0,!0,!0,!0]).slice(),this.tickColor=u(t.tickColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.borderLineEnable=(t.borderLineEnable||[!0,!0,!0,!0]).slice(),this.borderLineWidth=(t.borderLineWidth||[2,2,2,2]).slice(),this.borderLineColor=u(t.borderLineColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]);var i=t.ticks||[[],[]],o=this._tickBounds;o[0]=o[1]=1/0,o[2]=o[3]=-1/0;for(var s=0;s<2;++s){var l=i[s].slice(0);0!==l.length&&(l.sort(h),o[s]=Math.min(o[s],l[0].x),o[s+2]=Math.max(o[s+2],l[l.length-1].x))}this.grid.update({bounds:o,ticks:i}),this.text.update({bounds:o,ticks:i,labels:t.labels||["x","y"],labelSize:t.labelSize||[12,12],labelFont:t.labelFont||["sans-serif","sans-serif"],title:t.title||"",titleSize:t.titleSize||18,titleFont:t.titleFont||"sans-serif"}),this.static=!!t.static,this.setDirty()},c.dispose=function(){this.box.dispose(),this.grid.dispose(),this.text.dispose(),this.line.dispose();for(var t=this.objects.length-1;t>=0;--t)this.objects[t].dispose();this.objects.length=0;for(t=this.overlays.length-1;t>=0;--t)this.overlays[t].dispose();this.overlays.length=0,this.gl=null},c.addObject=function(t){this.objects.indexOf(t)<0&&(this.objects.push(t),this.setDirty())},c.removeObject=function(t){for(var e=this.objects,r=0;r<e.length;++r)if(e[r]===t){e.splice(r,1),this.setDirty();break}},c.addOverlay=function(t){this.overlays.indexOf(t)<0&&(this.overlays.push(t),this.setOverlayDirty())},c.removeOverlay=function(t){for(var e=this.overlays,r=0;r<e.length;++r)if(e[r]===t){e.splice(r,1),this.setOverlayDirty();break}}},{"./lib/box":284,"./lib/grid":285,"./lib/line":286,"./lib/text":288,"gl-select-static":303}],291:[function(t,e,r){"use strict";e.exports=function(t,e){t=t||document.body,e=e||{};var r=[.01,1/0];"distanceLimits"in e&&(r[0]=e.distanceLimits[0],r[1]=e.distanceLimits[1]);"zoomMin"in e&&(r[0]=e.zoomMin);"zoomMax"in e&&(r[1]=e.zoomMax);var c=a({center:e.center||[0,0,0],up:e.up||[0,1,0],eye:e.eye||[0,0,10],mode:e.mode||"orbit",distanceLimits:r}),u=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],h=0,f=t.clientWidth,p=t.clientHeight,d={keyBindingMode:"rotate",enableWheel:!0,view:c,element:t,delay:e.delay||16,rotateSpeed:e.rotateSpeed||1,zoomSpeed:e.zoomSpeed||1,translateSpeed:e.translateSpeed||1,flipX:!!e.flipX,flipY:!!e.flipY,modes:c.modes,_ortho:e._ortho||e.projection&&"orthographic"===e.projection.type||!1,tick:function(){var e=n(),r=this.delay,a=e-2*r;c.idle(e-r),c.recalcMatrix(a),c.flush(e-(100+2*r));for(var i=!0,o=c.computedMatrix,s=0;s<16;++s)i=i&&u[s]===o[s],u[s]=o[s];var l=t.clientWidth===f&&t.clientHeight===p;return f=t.clientWidth,p=t.clientHeight,i?!l:(h=Math.exp(c.computedRadius[0]),!0)},lookAt:function(t,e,r){c.lookAt(c.lastT(),t,e,r)},rotate:function(t,e,r){c.rotate(c.lastT(),t,e,r)},pan:function(t,e,r){c.pan(c.lastT(),t,e,r)},translate:function(t,e,r){c.translate(c.lastT(),t,e,r)}};return Object.defineProperties(d,{matrix:{get:function(){return c.computedMatrix},set:function(t){return c.setMatrix(c.lastT(),t),c.computedMatrix},enumerable:!0},mode:{get:function(){return c.getMode()},set:function(t){var e=c.computedUp.slice(),r=c.computedEye.slice(),a=c.computedCenter.slice();if(c.setMode(t),"turntable"===t){var i=n();c._active.lookAt(i,r,a,e),c._active.lookAt(i+500,r,a,[0,0,1]),c._active.flush(i)}return c.getMode()},enumerable:!0},center:{get:function(){return c.computedCenter},set:function(t){return c.lookAt(c.lastT(),null,t),c.computedCenter},enumerable:!0},eye:{get:function(){return c.computedEye},set:function(t){return c.lookAt(c.lastT(),t),c.computedEye},enumerable:!0},up:{get:function(){return c.computedUp},set:function(t){return c.lookAt(c.lastT(),null,null,t),c.computedUp},enumerable:!0},distance:{get:function(){return h},set:function(t){return c.setDistance(c.lastT(),t),t},enumerable:!0},distanceLimits:{get:function(){return c.getDistanceLimits(r)},set:function(t){return c.setDistanceLimits(t),t},enumerable:!0}}),t.addEventListener("contextmenu",function(t){return t.preventDefault(),!1}),d._lastX=-1,d._lastY=-1,d._lastMods={shift:!1,control:!1,alt:!1,meta:!1},d.enableMouseListeners=function(){function e(e,r,a,i){var o=d.keyBindingMode;if(!1!==o){var s="rotate"===o,l="pan"===o,u="zoom"===o,f=!!i.control,p=!!i.alt,g=!!i.shift,v=!!(1&e),m=!!(2&e),y=!!(4&e),x=1/t.clientHeight,b=x*(r-d._lastX),_=x*(a-d._lastY),w=d.flipX?1:-1,k=d.flipY?1:-1,T=Math.PI*d.rotateSpeed,M=n();if(-1!==d._lastX&&-1!==d._lastY&&((s&&v&&!f&&!p&&!g||v&&!f&&!p&&g)&&c.rotate(M,w*T*b,-k*T*_,0),(l&&v&&!f&&!p&&!g||m||v&&f&&!p&&!g)&&c.pan(M,-d.translateSpeed*b*h,d.translateSpeed*_*h,0),u&&v&&!f&&!p&&!g||y||v&&!f&&p&&!g)){var A=-d.zoomSpeed*_/window.innerHeight*(M-c.lastT())*100;c.pan(M,0,0,h*(Math.exp(A)-1))}return d._lastX=r,d._lastY=a,d._lastMods=i,!0}}d.mouseListener=i(t,e),t.addEventListener("touchstart",function(r){var n=s(r.changedTouches[0],t);e(0,n[0],n[1],d._lastMods),e(1,n[0],n[1],d._lastMods),r.preventDefault()},!!l&&{passive:!1}),t.addEventListener("touchmove",function(r){var n=s(r.changedTouches[0],t);e(1,n[0],n[1],d._lastMods),r.preventDefault()},!!l&&{passive:!1}),t.addEventListener("touchend",function(t){e(0,d._lastX,d._lastY,d._lastMods),t.preventDefault()},!!l&&{passive:!1}),d.wheelListener=o(t,function(t,e){if(!1!==d.keyBindingMode&&d.enableWheel){var r=d.flipX?1:-1,a=d.flipY?1:-1,i=n();if(Math.abs(t)>Math.abs(e))c.rotate(i,0,0,-t*r*Math.PI*d.rotateSpeed/window.innerWidth);else if(!d._ortho){var o=-d.zoomSpeed*a*e/window.innerHeight*(i-c.lastT())/20;c.pan(i,0,0,h*(Math.exp(o)-1))}}},!0)},d.enableMouseListeners(),d};var n=t("right-now"),a=t("3d-view"),i=t("mouse-change"),o=t("mouse-wheel"),s=t("mouse-event-offset"),l=t("has-passive-events")},{"3d-view":54,"has-passive-events":412,"mouse-change":436,"mouse-event-offset":437,"mouse-wheel":439,"right-now":502}],292:[function(t,e,r){var n=t("glslify"),a=t("gl-shader"),i=n(["precision mediump float;\n#define GLSLIFY 1\nattribute vec2 position;\nvarying vec2 uv;\nvoid main() {\n uv = position;\n gl_Position = vec4(position, 0, 1);\n}"]),o=n(["precision mediump float;\n#define GLSLIFY 1\n\nuniform sampler2D accumBuffer;\nvarying vec2 uv;\n\nvoid main() {\n vec4 accum = texture2D(accumBuffer, 0.5 * (uv + 1.0));\n gl_FragColor = min(vec4(1,1,1,1), accum);\n}"]);e.exports=function(t){return a(t,i,o,null,[{name:"position",type:"vec2"}])}},{"gl-shader":304,glslify:410}],293:[function(t,e,r){"use strict";var n=t("./camera.js"),a=t("gl-axes3d"),i=t("gl-axes3d/properties"),o=t("gl-spikes3d"),s=t("gl-select-static"),l=t("gl-fbo"),c=t("a-big-triangle"),u=t("mouse-change"),h=t("gl-mat4/perspective"),f=t("gl-mat4/ortho"),p=t("./lib/shader"),d=t("is-mobile")({tablet:!0,featureDetect:!0});function g(){this.mouse=[-1,-1],this.screen=null,this.distance=1/0,this.index=null,this.dataCoordinate=null,this.dataPosition=null,this.object=null,this.data=null}function v(t){var e=Math.round(Math.log(Math.abs(t))/Math.log(10));if(e<0){var r=Math.round(Math.pow(10,-e));return Math.ceil(t*r)/r}if(e>0){r=Math.round(Math.pow(10,e));return Math.ceil(t/r)*r}return Math.ceil(t)}function m(t){return"boolean"!=typeof t||t}e.exports={createScene:function(t){(t=t||{}).camera=t.camera||{};var e=t.canvas;if(!e)if(e=document.createElement("canvas"),t.container){var r=t.container;r.appendChild(e)}else document.body.appendChild(e);var y=t.gl;y||(t.glOptions&&(d=!!t.glOptions.preserveDrawingBuffer),y=function(t,e){var r=null;try{(r=t.getContext("webgl",e))||(r=t.getContext("experimental-webgl",e))}catch(t){return null}return r}(e,t.glOptions||{premultipliedAlpha:!0,antialias:!0,preserveDrawingBuffer:d}));if(!y)throw new Error("webgl not supported");var x=t.bounds||[[-10,-10,-10],[10,10,10]],b=new g,_=l(y,y.drawingBufferWidth,y.drawingBufferHeight,{preferFloat:!d}),w=p(y),k=t.cameraObject&&!0===t.cameraObject._ortho||t.camera.projection&&"orthographic"===t.camera.projection.type||!1,T={eye:t.camera.eye||[2,0,0],center:t.camera.center||[0,0,0],up:t.camera.up||[0,1,0],zoomMin:t.camera.zoomMax||.1,zoomMax:t.camera.zoomMin||100,mode:t.camera.mode||"turntable",_ortho:k},M=t.axes||{},A=a(y,M);A.enable=!M.disable;var S=t.spikes||{},E=o(y,S),L=[],C=[],P=[],O=[],z=!0,I=!0,D=new Array(16),R=new Array(16),F={view:null,projection:D,model:R,_ortho:!1},I=!0,B=[y.drawingBufferWidth,y.drawingBufferHeight],N=t.cameraObject||n(e,T),j={gl:y,contextLost:!1,pixelRatio:t.pixelRatio||1,canvas:e,selection:b,camera:N,axes:A,axesPixels:null,spikes:E,bounds:x,objects:L,shape:B,aspect:t.aspectRatio||[1,1,1],pickRadius:t.pickRadius||10,zNear:t.zNear||.01,zFar:t.zFar||1e3,fovy:t.fovy||Math.PI/4,clearColor:t.clearColor||[0,0,0,0],autoResize:m(t.autoResize),autoBounds:m(t.autoBounds),autoScale:!!t.autoScale,autoCenter:m(t.autoCenter),clipToBounds:m(t.clipToBounds),snapToData:!!t.snapToData,onselect:t.onselect||null,onrender:t.onrender||null,onclick:t.onclick||null,cameraParams:F,oncontextloss:null,mouseListener:null,_stopped:!1,getAspectratio:function(){return{x:this.aspect[0],y:this.aspect[1],z:this.aspect[2]}},setAspectratio:function(t){this.aspect[0]=t.x,this.aspect[1]=t.y,this.aspect[2]=t.z,I=!0},setBounds:function(t,e){this.bounds[0][t]=e.min,this.bounds[1][t]=e.max},setClearColor:function(t){this.clearColor=t},clearRGBA:function(){this.gl.clearColor(this.clearColor[0],this.clearColor[1],this.clearColor[2],this.clearColor[3]),this.gl.clear(this.gl.COLOR_BUFFER_BIT|this.gl.DEPTH_BUFFER_BIT)}},V=[y.drawingBufferWidth/j.pixelRatio|0,y.drawingBufferHeight/j.pixelRatio|0];function U(){if(!j._stopped&&j.autoResize){var t=e.parentNode,r=1,n=1;t&&t!==document.body?(r=t.clientWidth,n=t.clientHeight):(r=window.innerWidth,n=window.innerHeight);var a=0|Math.ceil(r*j.pixelRatio),i=0|Math.ceil(n*j.pixelRatio);if(a!==e.width||i!==e.height){e.width=a,e.height=i;var o=e.style;o.position=o.position||"absolute",o.left="0px",o.top="0px",o.width=r+"px",o.height=n+"px",z=!0}}}j.autoResize&&U();function q(){for(var t=L.length,e=O.length,r=0;r<e;++r)P[r]=0;t:for(var r=0;r<t;++r){var n=L[r],a=n.pickSlots;if(a){for(var i=0;i<e;++i)if(P[i]+a<255){C[r]=i,n.setPickBase(P[i]+1),P[i]+=a;continue t}var o=s(y,B);C[r]=e,O.push(o),P.push(a),n.setPickBase(1),e+=1}else C[r]=-1}for(;e>0&&0===P[e-1];)P.pop(),O.pop().dispose()}function H(){if(j.contextLost)return!0;y.isContextLost()&&(j.contextLost=!0,j.mouseListener.enabled=!1,j.selection.object=null,j.oncontextloss&&j.oncontextloss())}window.addEventListener("resize",U),j.update=function(t){j._stopped||(t=t||{},z=!0,I=!0)},j.add=function(t){j._stopped||(t.axes=A,L.push(t),C.push(-1),z=!0,I=!0,q())},j.remove=function(t){if(!j._stopped){var e=L.indexOf(t);e<0||(L.splice(e,1),C.pop(),z=!0,I=!0,q())}},j.dispose=function(){if(!j._stopped&&(j._stopped=!0,window.removeEventListener("resize",U),e.removeEventListener("webglcontextlost",H),j.mouseListener.enabled=!1,!j.contextLost)){A.dispose(),E.dispose();for(var t=0;t<L.length;++t)L[t].dispose();_.dispose();for(var t=0;t<O.length;++t)O[t].dispose();w.dispose(),y=null,A=null,E=null,L=[]}},j._mouseRotating=!1,j._prevButtons=0,j.enableMouseListeners=function(){j.mouseListener=u(e,function(t,e,r){if(!j._stopped){var n=O.length,a=L.length,i=b.object;b.distance=1/0,b.mouse[0]=e,b.mouse[1]=r,b.object=null,b.screen=null,b.dataCoordinate=b.dataPosition=null;var o=!1;if(t&&j._prevButtons)j._mouseRotating=!0;else{j._mouseRotating&&(I=!0),j._mouseRotating=!1;for(var s=0;s<n;++s){var l=O[s].query(e,V[1]-r-1,j.pickRadius);if(l){if(l.distance>b.distance)continue;for(var c=0;c<a;++c){var u=L[c];if(C[c]===s){var h=u.pick(l);h&&(b.buttons=t,b.screen=l.coord,b.distance=l.distance,b.object=u,b.index=h.distance,b.dataPosition=h.position,b.dataCoordinate=h.dataCoordinate,b.data=h,o=!0)}}}}}i&&i!==b.object&&(i.highlight&&i.highlight(null),z=!0),b.object&&(b.object.highlight&&b.object.highlight(b.data),z=!0),(o=o||b.object!==i)&&j.onselect&&j.onselect(b),1&t&&!(1&j._prevButtons)&&j.onclick&&j.onclick(b),j._prevButtons=t}})},e.addEventListener("webglcontextlost",H);var G=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],Y=[G[0].slice(),G[1].slice()];function W(){if(!H()){U();var t=j.camera.tick();F.view=j.camera.matrix,z=z||t,I=I||t,A.pixelRatio=j.pixelRatio,E.pixelRatio=j.pixelRatio;var e=L.length,r=G[0],n=G[1];r[0]=r[1]=r[2]=1/0,n[0]=n[1]=n[2]=-1/0;for(var a=0;a<e;++a){var o=L[a];o.pixelRatio=j.pixelRatio,o.axes=j.axes,z=z||!!o.dirty,I=I||!!o.dirty;var s=o.bounds;if(s)for(var l=s[0],u=s[1],p=0;p<3;++p)r[p]=Math.min(r[p],l[p]),n[p]=Math.max(n[p],u[p])}var d=j.bounds;if(j.autoBounds)for(var p=0;p<3;++p){if(n[p]<r[p])r[p]=-1,n[p]=1;else{r[p]===n[p]&&(r[p]-=1,n[p]+=1);var g=.05*(n[p]-r[p]);r[p]=r[p]-g,n[p]=n[p]+g}d[0][p]=r[p],d[1][p]=n[p]}for(var m=!1,p=0;p<3;++p)m=m||Y[0][p]!==d[0][p]||Y[1][p]!==d[1][p],Y[0][p]=d[0][p],Y[1][p]=d[1][p];if(I=I||m,z=z||m){if(m){for(var x=[0,0,0],a=0;a<3;++a)x[a]=v((d[1][a]-d[0][a])/10);A.autoTicks?A.update({bounds:d,tickSpacing:x}):A.update({bounds:d})}var T=y.drawingBufferWidth,M=y.drawingBufferHeight;B[0]=T,B[1]=M,V[0]=0|Math.max(T/j.pixelRatio,1),V[1]=0|Math.max(M/j.pixelRatio,1),function(t,e){var r=t.bounds,n=t.cameraParams,a=n.projection,i=n.model,o=t.gl.drawingBufferWidth,s=t.gl.drawingBufferHeight,l=t.zNear,c=t.zFar,u=t.fovy,p=o/s;e?(f(a,-p,p,-1,1,l,c),n._ortho=!0):(h(a,u,p,l,c),n._ortho=!1);for(var d=0;d<16;++d)i[d]=0;i[15]=1;for(var g=0,d=0;d<3;++d)g=Math.max(g,r[1][d]-r[0][d]);for(var d=0;d<3;++d)t.autoScale?i[5*d]=t.aspect[d]/(r[1][d]-r[0][d]):i[5*d]=1/g,t.autoCenter&&(i[12+d]=.5*-i[5*d]*(r[0][d]+r[1][d]))}(j,k);for(var a=0;a<e;++a){var o=L[a];o.axesBounds=d,j.clipToBounds&&(o.clipBounds=d)}b.object&&(j.snapToData?E.position=b.dataCoordinate:E.position=b.dataPosition,E.bounds=d),I&&(I=!1,function(){if(H())return;y.colorMask(!0,!0,!0,!0),y.depthMask(!0),y.disable(y.BLEND),y.enable(y.DEPTH_TEST),y.depthFunc(y.LEQUAL);for(var t=L.length,e=O.length,r=0;r<e;++r){var n=O[r];n.shape=V,n.begin();for(var a=0;a<t;++a)if(C[a]===r){var i=L[a];i.drawPick&&(i.pixelRatio=1,i.drawPick(F))}n.end()}}()),j.axesPixels=i(j.axes,F,T,M),j.onrender&&j.onrender(),y.bindFramebuffer(y.FRAMEBUFFER,null),y.viewport(0,0,T,M),j.clearRGBA(),y.depthMask(!0),y.colorMask(!0,!0,!0,!0),y.enable(y.DEPTH_TEST),y.depthFunc(y.LEQUAL),y.disable(y.BLEND),y.disable(y.CULL_FACE);var S=!1;A.enable&&(S=S||A.isTransparent(),A.draw(F)),E.axes=A,b.object&&E.draw(F),y.disable(y.CULL_FACE);for(var a=0;a<e;++a){var o=L[a];o.axes=A,o.pixelRatio=j.pixelRatio,o.isOpaque&&o.isOpaque()&&o.draw(F),o.isTransparent&&o.isTransparent()&&(S=!0)}if(S){_.shape=B,_.bind(),y.clear(y.DEPTH_BUFFER_BIT),y.colorMask(!1,!1,!1,!1),y.depthMask(!0),y.depthFunc(y.LESS),A.enable&&A.isTransparent()&&A.drawTransparent(F);for(var a=0;a<e;++a){var o=L[a];o.isOpaque&&o.isOpaque()&&o.draw(F)}y.enable(y.BLEND),y.blendEquation(y.FUNC_ADD),y.blendFunc(y.ONE,y.ONE_MINUS_SRC_ALPHA),y.colorMask(!0,!0,!0,!0),y.depthMask(!1),y.clearColor(0,0,0,0),y.clear(y.COLOR_BUFFER_BIT),A.isTransparent()&&A.drawTransparent(F);for(var a=0;a<e;++a){var o=L[a];o.isTransparent&&o.isTransparent()&&o.drawTransparent(F)}y.bindFramebuffer(y.FRAMEBUFFER,null),y.blendFunc(y.ONE,y.ONE_MINUS_SRC_ALPHA),y.disable(y.DEPTH_TEST),w.bind(),_.color[0].bind(0),w.uniforms.accumBuffer=0,c(y),y.disable(y.BLEND)}z=!1;for(var a=0;a<e;++a)L[a].dirty=!1}}}return j.enableMouseListeners(),function t(){j._stopped||j.contextLost||(W(),requestAnimationFrame(t))}(),j.redraw=function(){j._stopped||(z=!0,W())},j},createCamera:n}},{"./camera.js":291,"./lib/shader":292,"a-big-triangle":62,"gl-axes3d":236,"gl-axes3d/properties":243,"gl-fbo":252,"gl-mat4/ortho":271,"gl-mat4/perspective":272,"gl-select-static":303,"gl-spikes3d":313,"is-mobile":421,"mouse-change":436}],294:[function(t,e,r){var n=t("glslify");r.pointVertex=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\n\nuniform mat3 matrix;\nuniform float pointSize;\nuniform float pointCloud;\n\nhighp float rand(vec2 co) {\n highp float a = 12.9898;\n highp float b = 78.233;\n highp float c = 43758.5453;\n highp float d = dot(co.xy, vec2(a, b));\n highp float e = mod(d, 3.14);\n return fract(sin(e) * c);\n}\n\nvoid main() {\n vec3 hgPosition = matrix * vec3(position, 1);\n gl_Position = vec4(hgPosition.xy, 0, hgPosition.z);\n // if we don't jitter the point size a bit, overall point cloud\n // saturation 'jumps' on zooming, which is disturbing and confusing\n gl_PointSize = pointSize * ((19.5 + rand(position)) / 20.0);\n if(pointCloud != 0.0) { // pointCloud is truthy\n // get the same square surface as circle would be\n gl_PointSize *= 0.886;\n }\n}"]),r.pointFragment=n(["precision mediump float;\n#define GLSLIFY 1\n\nuniform vec4 color, borderColor;\nuniform float centerFraction;\nuniform float pointCloud;\n\nvoid main() {\n float radius;\n vec4 baseColor;\n if(pointCloud != 0.0) { // pointCloud is truthy\n if(centerFraction == 1.0) {\n gl_FragColor = color;\n } else {\n gl_FragColor = mix(borderColor, color, centerFraction);\n }\n } else {\n radius = length(2.0 * gl_PointCoord.xy - 1.0);\n if(radius > 1.0) {\n discard;\n }\n baseColor = mix(borderColor, color, step(radius, centerFraction));\n gl_FragColor = vec4(baseColor.rgb * baseColor.a, baseColor.a);\n }\n}\n"]),r.pickVertex=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\nattribute vec4 pickId;\n\nuniform mat3 matrix;\nuniform float pointSize;\nuniform vec4 pickOffset;\n\nvarying vec4 fragId;\n\nvoid main() {\n vec3 hgPosition = matrix * vec3(position, 1);\n gl_Position = vec4(hgPosition.xy, 0, hgPosition.z);\n gl_PointSize = pointSize;\n\n vec4 id = pickId + pickOffset;\n id.y += floor(id.x / 256.0);\n id.x -= floor(id.x / 256.0) * 256.0;\n\n id.z += floor(id.y / 256.0);\n id.y -= floor(id.y / 256.0) * 256.0;\n\n id.w += floor(id.z / 256.0);\n id.z -= floor(id.z / 256.0) * 256.0;\n\n fragId = id;\n}\n"]),r.pickFragment=n(["precision mediump float;\n#define GLSLIFY 1\n\nvarying vec4 fragId;\n\nvoid main() {\n float radius = length(2.0 * gl_PointCoord.xy - 1.0);\n if(radius > 1.0) {\n discard;\n }\n gl_FragColor = fragId / 255.0;\n}\n"])},{glslify:410}],295:[function(t,e,r){"use strict";var n=t("gl-shader"),a=t("gl-buffer"),i=t("typedarray-pool"),o=t("./lib/shader");function s(t,e,r,n,a){this.plot=t,this.offsetBuffer=e,this.pickBuffer=r,this.shader=n,this.pickShader=a,this.sizeMin=.5,this.sizeMinCap=2,this.sizeMax=20,this.areaRatio=1,this.pointCount=0,this.color=[1,0,0,1],this.borderColor=[0,0,0,1],this.blend=!1,this.pickOffset=0,this.points=null}e.exports=function(t,e){var r=t.gl,i=a(r),l=a(r),c=n(r,o.pointVertex,o.pointFragment),u=n(r,o.pickVertex,o.pickFragment),h=new s(t,i,l,c,u);return h.update(e),t.addObject(h),h};var l,c,u=s.prototype;u.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.offsetBuffer.dispose(),this.pickBuffer.dispose(),this.plot.removeObject(this)},u.update=function(t){var e;function r(e,r){return e in t?t[e]:r}t=t||{},this.sizeMin=r("sizeMin",.5),this.sizeMax=r("sizeMax",20),this.color=r("color",[1,0,0,1]).slice(),this.areaRatio=r("areaRatio",1),this.borderColor=r("borderColor",[0,0,0,1]).slice(),this.blend=r("blend",!1);var n=t.positions.length>>>1,a=t.positions instanceof Float32Array,o=t.idToIndex instanceof Int32Array&&t.idToIndex.length>=n,s=t.positions,l=a?s:i.mallocFloat32(s.length),c=o?t.idToIndex:i.mallocInt32(n);if(a||l.set(s),!o)for(l.set(s),e=0;e<n;e++)c[e]=e;this.points=s,this.offsetBuffer.update(l),this.pickBuffer.update(c),a||i.free(l),o||i.free(c),this.pointCount=n,this.pickOffset=0},u.unifiedDraw=(l=[1,0,0,0,1,0,0,0,1],c=[0,0,0,0],function(t){var e=void 0!==t,r=e?this.pickShader:this.shader,n=this.plot.gl,a=this.plot.dataBox;if(0===this.pointCount)return t;var i=a[2]-a[0],o=a[3]-a[1],s=function(t,e){var r,n=0,a=t.length>>>1;for(r=0;r<a;r++){var i=t[2*r],o=t[2*r+1];i>=e[0]&&i<=e[2]&&o>=e[1]&&o<=e[3]&&n++}return n}(this.points,a),u=this.plot.pickPixelRatio*Math.max(Math.min(this.sizeMinCap,this.sizeMin),Math.min(this.sizeMax,this.sizeMax/Math.pow(s,.33333)));l[0]=2/i,l[4]=2/o,l[6]=-2*a[0]/i-1,l[7]=-2*a[1]/o-1,this.offsetBuffer.bind(),r.bind(),r.attributes.position.pointer(),r.uniforms.matrix=l,r.uniforms.color=this.color,r.uniforms.borderColor=this.borderColor,r.uniforms.pointCloud=u<5,r.uniforms.pointSize=u,r.uniforms.centerFraction=Math.min(1,Math.max(0,Math.sqrt(1-this.areaRatio))),e&&(c[0]=255&t,c[1]=t>>8&255,c[2]=t>>16&255,c[3]=t>>24&255,this.pickBuffer.bind(),r.attributes.pickId.pointer(n.UNSIGNED_BYTE),r.uniforms.pickOffset=c,this.pickOffset=t);var h=n.getParameter(n.BLEND),f=n.getParameter(n.DITHER);return h&&!this.blend&&n.disable(n.BLEND),f&&n.disable(n.DITHER),n.drawArrays(n.POINTS,0,this.pointCount),h&&!this.blend&&n.enable(n.BLEND),f&&n.enable(n.DITHER),t+this.pointCount}),u.draw=u.unifiedDraw,u.drawPick=u.unifiedDraw,u.pick=function(t,e,r){var n=this.pickOffset,a=this.pointCount;if(r<n||r>=n+a)return null;var i=r-n,o=this.points;return{object:this,pointId:i,dataCoord:[o[2*i],o[2*i+1]]}}},{"./lib/shader":294,"gl-buffer":244,"gl-shader":304,"typedarray-pool":543}],296:[function(t,e,r){e.exports=function(t,e,r,n){var a,i,o,s,l,c=e[0],u=e[1],h=e[2],f=e[3],p=r[0],d=r[1],g=r[2],v=r[3];(i=c*p+u*d+h*g+f*v)<0&&(i=-i,p=-p,d=-d,g=-g,v=-v);1-i>1e-6?(a=Math.acos(i),o=Math.sin(a),s=Math.sin((1-n)*a)/o,l=Math.sin(n*a)/o):(s=1-n,l=n);return t[0]=s*c+l*p,t[1]=s*u+l*d,t[2]=s*h+l*g,t[3]=s*f+l*v,t}},{}],297:[function(t,e,r){"use strict";e.exports=function(t){return t||0===t?t.toString():""}},{}],298:[function(t,e,r){"use strict";var n=t("vectorize-text");e.exports=function(t,e,r){var i=a[e];i||(i=a[e]={});if(t in i)return i[t];var o={textAlign:"center",textBaseline:"middle",lineHeight:1,font:e,lineSpacing:1.25,styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},triangles:!0},s=n(t,o);o.triangles=!1;var l,c,u=n(t,o);if(r&&1!==r){for(l=0;l<s.positions.length;++l)for(c=0;c<s.positions[l].length;++c)s.positions[l][c]/=r;for(l=0;l<u.positions.length;++l)for(c=0;c<u.positions[l].length;++c)u.positions[l][c]/=r}var h=[[1/0,1/0],[-1/0,-1/0]],f=u.positions.length;for(l=0;l<f;++l){var p=u.positions[l];for(c=0;c<2;++c)h[0][c]=Math.min(h[0][c],p[c]),h[1][c]=Math.max(h[1][c],p[c])}return i[t]=[s,u,h]};var a={}},{"vectorize-text":548}],299:[function(t,e,r){var n=t("gl-shader"),a=t("glslify"),i=a(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 glyph;\nattribute vec4 id;\n\nuniform vec4 highlightId;\nuniform float highlightScale;\nuniform mat4 model, view, projection;\nuniform vec3 clipBounds[2];\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n gl_Position = vec4(0,0,0,0);\n } else {\n float scale = 1.0;\n if(distance(highlightId, id) < 0.0001) {\n scale = highlightScale;\n }\n\n vec4 worldPosition = model * vec4(position, 1);\n vec4 viewPosition = view * worldPosition;\n viewPosition = viewPosition / viewPosition.w;\n vec4 clipPosition = projection * (viewPosition + scale * vec4(glyph.x, -glyph.y, 0, 0));\n\n gl_Position = clipPosition;\n interpColor = color;\n pickId = id;\n dataCoordinate = position;\n }\n}"]),o=a(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 glyph;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\nuniform vec2 screenSize;\nuniform vec3 clipBounds[2];\nuniform float highlightScale, pixelRatio;\nuniform vec4 highlightId;\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n gl_Position = vec4(0,0,0,0);\n } else {\n float scale = pixelRatio;\n if(distance(highlightId.bgr, id.bgr) < 0.001) {\n scale *= highlightScale;\n }\n\n vec4 worldPosition = model * vec4(position, 1.0);\n vec4 viewPosition = view * worldPosition;\n vec4 clipPosition = projection * viewPosition;\n clipPosition /= clipPosition.w;\n\n gl_Position = clipPosition + vec4(screenSize * scale * vec2(glyph.x, -glyph.y), 0.0, 0.0);\n interpColor = color;\n pickId = id;\n dataCoordinate = position;\n }\n}"]),s=a(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 glyph;\nattribute vec4 id;\n\nuniform float highlightScale;\nuniform vec4 highlightId;\nuniform vec3 axes[2];\nuniform mat4 model, view, projection;\nuniform vec2 screenSize;\nuniform vec3 clipBounds[2];\nuniform float scale, pixelRatio;\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], position)) {\n\n gl_Position = vec4(0,0,0,0);\n } else {\n float lscale = pixelRatio * scale;\n if(distance(highlightId, id) < 0.0001) {\n lscale *= highlightScale;\n }\n\n vec4 clipCenter = projection * view * model * vec4(position, 1);\n vec3 dataPosition = position + 0.5*lscale*(axes[0] * glyph.x + axes[1] * glyph.y) * clipCenter.w * screenSize.y;\n vec4 clipPosition = projection * view * model * vec4(dataPosition, 1);\n\n gl_Position = clipPosition;\n interpColor = color;\n pickId = id;\n dataCoordinate = dataPosition;\n }\n}\n"]),l=a(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 fragClipBounds[2];\nuniform float opacity;\n\nvarying vec4 interpColor;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if (\n outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate) ||\n interpColor.a * opacity == 0.\n ) discard;\n gl_FragColor = interpColor * opacity;\n}\n"]),c=a(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 fragClipBounds[2];\nuniform float pickGroup;\n\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if (outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate)) discard;\n\n gl_FragColor = vec4(pickGroup, pickId.bgr);\n}"]),u=[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"glyph",type:"vec2"},{name:"id",type:"vec4"}],h={vertex:i,fragment:l,attributes:u},f={vertex:o,fragment:l,attributes:u},p={vertex:s,fragment:l,attributes:u},d={vertex:i,fragment:c,attributes:u},g={vertex:o,fragment:c,attributes:u},v={vertex:s,fragment:c,attributes:u};function m(t,e){var r=n(t,e),a=r.attributes;return a.position.location=0,a.color.location=1,a.glyph.location=2,a.id.location=3,r}r.createPerspective=function(t){return m(t,h)},r.createOrtho=function(t){return m(t,f)},r.createProject=function(t){return m(t,p)},r.createPickPerspective=function(t){return m(t,d)},r.createPickOrtho=function(t){return m(t,g)},r.createPickProject=function(t){return m(t,v)}},{"gl-shader":304,glslify:410}],300:[function(t,e,r){"use strict";var n=t("is-string-blank"),a=t("gl-buffer"),i=t("gl-vao"),o=t("typedarray-pool"),s=t("gl-mat4/multiply"),l=t("./lib/shaders"),c=t("./lib/glyphs"),u=t("./lib/get-simple-string"),h=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function f(t,e){var r=t[0],n=t[1],a=t[2],i=t[3];return t[0]=e[0]*r+e[4]*n+e[8]*a+e[12]*i,t[1]=e[1]*r+e[5]*n+e[9]*a+e[13]*i,t[2]=e[2]*r+e[6]*n+e[10]*a+e[14]*i,t[3]=e[3]*r+e[7]*n+e[11]*a+e[15]*i,t}function p(t,e,r,n){return f(n,n),f(n,n),f(n,n)}function d(t,e){this.index=t,this.dataCoordinate=this.position=e}function g(t){return!0===t?1:t>1?1:t}function v(t,e,r,n,a,i,o,s,l,c,u,h){this.gl=t,this.pixelRatio=1,this.shader=e,this.orthoShader=r,this.projectShader=n,this.pointBuffer=a,this.colorBuffer=i,this.glyphBuffer=o,this.idBuffer=s,this.vao=l,this.vertexCount=0,this.lineVertexCount=0,this.opacity=1,this.hasAlpha=!1,this.lineWidth=0,this.projectScale=[2/3,2/3,2/3],this.projectOpacity=[1,1,1],this.projectHasAlpha=!1,this.pickId=0,this.pickPerspectiveShader=c,this.pickOrthoShader=u,this.pickProjectShader=h,this.points=[],this._selectResult=new d(0,[0,0,0]),this.useOrtho=!0,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.axesProject=[!0,!0,!0],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.highlightId=[1,1,1,1],this.highlightScale=2,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.dirty=!0}e.exports=function(t){var e=t.gl,r=l.createPerspective(e),n=l.createOrtho(e),o=l.createProject(e),s=l.createPickPerspective(e),c=l.createPickOrtho(e),u=l.createPickProject(e),h=a(e),f=a(e),p=a(e),d=a(e),g=i(e,[{buffer:h,size:3,type:e.FLOAT},{buffer:f,size:4,type:e.FLOAT},{buffer:p,size:2,type:e.FLOAT},{buffer:d,size:4,type:e.UNSIGNED_BYTE,normalized:!0}]),m=new v(e,r,n,o,h,f,p,d,g,s,c,u);return m.update(t),m};var m=v.prototype;m.pickSlots=1,m.setPickBase=function(t){this.pickId=t},m.isTransparent=function(){if(this.hasAlpha)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&this.projectHasAlpha)return!0;return!1},m.isOpaque=function(){if(!this.hasAlpha)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&!this.projectHasAlpha)return!0;return!1};var y=[0,0],x=[0,0,0],b=[0,0,0],_=[0,0,0,1],w=[0,0,0,1],k=h.slice(),T=[0,0,0],M=[[0,0,0],[0,0,0]];function A(t){return t[0]=t[1]=t[2]=0,t}function S(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=1,t}function E(t,e,r,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[r]=n,t}function L(t,e,r,n){var a,i=e.axesProject,o=e.gl,l=t.uniforms,c=r.model||h,u=r.view||h,f=r.projection||h,d=e.axesBounds,g=function(t){for(var e=M,r=0;r<2;++r)for(var n=0;n<3;++n)e[r][n]=Math.max(Math.min(t[r][n],1e8),-1e8);return e}(e.clipBounds);a=e.axes&&e.axes.lastCubeProps?e.axes.lastCubeProps.axis:[1,1,1],y[0]=2/o.drawingBufferWidth,y[1]=2/o.drawingBufferHeight,t.bind(),l.view=u,l.projection=f,l.screenSize=y,l.highlightId=e.highlightId,l.highlightScale=e.highlightScale,l.clipBounds=g,l.pickGroup=e.pickId/255,l.pixelRatio=n;for(var v=0;v<3;++v)if(i[v]){l.scale=e.projectScale[v],l.opacity=e.projectOpacity[v];for(var m=k,L=0;L<16;++L)m[L]=0;for(L=0;L<4;++L)m[5*L]=1;m[5*v]=0,a[v]<0?m[12+v]=d[0][v]:m[12+v]=d[1][v],s(m,c,m),l.model=m;var C=(v+1)%3,P=(v+2)%3,O=A(x),z=A(b);O[C]=1,z[P]=1;var I=p(0,0,0,S(_,O)),D=p(0,0,0,S(w,z));if(Math.abs(I[1])>Math.abs(D[1])){var R=I;I=D,D=R,R=O,O=z,z=R;var F=C;C=P,P=F}I[0]<0&&(O[C]=-1),D[1]>0&&(z[P]=-1);var B=0,N=0;for(L=0;L<4;++L)B+=Math.pow(c[4*C+L],2),N+=Math.pow(c[4*P+L],2);O[C]/=Math.sqrt(B),z[P]/=Math.sqrt(N),l.axes[0]=O,l.axes[1]=z,l.fragClipBounds[0]=E(T,g[0],v,-1e8),l.fragClipBounds[1]=E(T,g[1],v,1e8),e.vao.bind(),e.vao.draw(o.TRIANGLES,e.vertexCount),e.lineWidth>0&&(o.lineWidth(e.lineWidth*n),e.vao.draw(o.LINES,e.lineVertexCount,e.vertexCount)),e.vao.unbind()}}var C=[[-1e8,-1e8,-1e8],[1e8,1e8,1e8]];function P(t,e,r,n,a,i,o){var s=r.gl;if((i===r.projectHasAlpha||o)&&L(e,r,n,a),i===r.hasAlpha||o){t.bind();var l=t.uniforms;l.model=n.model||h,l.view=n.view||h,l.projection=n.projection||h,y[0]=2/s.drawingBufferWidth,y[1]=2/s.drawingBufferHeight,l.screenSize=y,l.highlightId=r.highlightId,l.highlightScale=r.highlightScale,l.fragClipBounds=C,l.clipBounds=r.axes.bounds,l.opacity=r.opacity,l.pickGroup=r.pickId/255,l.pixelRatio=a,r.vao.bind(),r.vao.draw(s.TRIANGLES,r.vertexCount),r.lineWidth>0&&(s.lineWidth(r.lineWidth*a),r.vao.draw(s.LINES,r.lineVertexCount,r.vertexCount)),r.vao.unbind()}}function O(t,e,r,a){var i;i=Array.isArray(t)?e<t.length?t[e]:void 0:t,i=u(i);var o=!0;n(i)&&(i="\u25bc",o=!1);var s=c(i,r,a);return{mesh:s[0],lines:s[1],bounds:s[2],visible:o}}m.draw=function(t){P(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,this.pixelRatio,!1,!1)},m.drawTransparent=function(t){P(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,this.pixelRatio,!0,!1)},m.drawPick=function(t){P(this.useOrtho?this.pickOrthoShader:this.pickPerspectiveShader,this.pickProjectShader,this,t,1,!0,!0)},m.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[2]+(t.value[1]<<8)+(t.value[0]<<16);if(e>=this.pointCount||e<0)return null;var r=this.points[e],n=this._selectResult;n.index=e;for(var a=0;a<3;++a)n.position[a]=n.dataCoordinate[a]=r[a];return n},m.highlight=function(t){if(t){var e=t.index,r=255&e,n=e>>8&255,a=e>>16&255;this.highlightId=[r/255,n/255,a/255,0]}else this.highlightId=[1,1,1,1]},m.update=function(t){if("perspective"in(t=t||{})&&(this.useOrtho=!t.perspective),"orthographic"in t&&(this.useOrtho=!!t.orthographic),"lineWidth"in t&&(this.lineWidth=t.lineWidth),"project"in t)if(Array.isArray(t.project))this.axesProject=t.project;else{var e=!!t.project;this.axesProject=[e,e,e]}if("projectScale"in t)if(Array.isArray(t.projectScale))this.projectScale=t.projectScale.slice();else{var r=+t.projectScale;this.projectScale=[r,r,r]}if(this.projectHasAlpha=!1,"projectOpacity"in t){if(Array.isArray(t.projectOpacity))this.projectOpacity=t.projectOpacity.slice();else{r=+t.projectOpacity;this.projectOpacity=[r,r,r]}for(var n=0;n<3;++n)this.projectOpacity[n]=g(this.projectOpacity[n]),this.projectOpacity[n]<1&&(this.projectHasAlpha=!0)}this.hasAlpha=!1,"opacity"in t&&(this.opacity=g(t.opacity),this.opacity<1&&(this.hasAlpha=!0)),this.dirty=!0;var a,i,s=t.position,l=t.font||"normal",c=t.alignment||[0,0];if(2===c.length)a=c[0],i=c[1];else{a=[],i=[];for(n=0;n<c.length;++n)a[n]=c[n][0],i[n]=c[n][1]}var u=[1/0,1/0,1/0],h=[-1/0,-1/0,-1/0],f=t.glyph,p=t.color,d=t.size,v=t.angle,m=t.lineColor,y=-1,x=0,b=0,_=0;if(s.length){_=s.length;t:for(n=0;n<_;++n){for(var w=s[n],k=0;k<3;++k)if(isNaN(w[k])||!isFinite(w[k]))continue t;var T=(N=O(f,n,l,this.pixelRatio)).mesh,M=N.lines,A=N.bounds;x+=3*T.cells.length,b+=2*M.edges.length}}var S=x+b,E=o.mallocFloat(3*S),L=o.mallocFloat(4*S),C=o.mallocFloat(2*S),P=o.mallocUint32(S);if(S>0){var z=0,I=x,D=[0,0,0,1],R=[0,0,0,1],F=Array.isArray(p)&&Array.isArray(p[0]),B=Array.isArray(m)&&Array.isArray(m[0]);t:for(n=0;n<_;++n){y+=1;for(w=s[n],k=0;k<3;++k){if(isNaN(w[k])||!isFinite(w[k]))continue t;h[k]=Math.max(h[k],w[k]),u[k]=Math.min(u[k],w[k])}T=(N=O(f,n,l,this.pixelRatio)).mesh,M=N.lines,A=N.bounds;var N,j=N.visible;if(j)if(Array.isArray(p)){if(3===(V=F?n<p.length?p[n]:[0,0,0,0]:p).length){for(k=0;k<3;++k)D[k]=V[k];D[3]=1}else if(4===V.length){for(k=0;k<4;++k)D[k]=V[k];!this.hasAlpha&&V[3]<1&&(this.hasAlpha=!0)}}else D[0]=D[1]=D[2]=0,D[3]=1;else D=[1,1,1,0];if(j)if(Array.isArray(m)){var V;if(3===(V=B?n<m.length?m[n]:[0,0,0,0]:m).length){for(k=0;k<3;++k)R[k]=V[k];R[k]=1}else if(4===V.length){for(k=0;k<4;++k)R[k]=V[k];!this.hasAlpha&&V[3]<1&&(this.hasAlpha=!0)}}else R[0]=R[1]=R[2]=0,R[3]=1;else R=[1,1,1,0];var U=.5;j?Array.isArray(d)?U=n<d.length?+d[n]:12:d?U=+d:this.useOrtho&&(U=12):U=0;var q=0;Array.isArray(v)?q=n<v.length?+v[n]:0:v&&(q=+v);var H=Math.cos(q),G=Math.sin(q);for(w=s[n],k=0;k<3;++k)h[k]=Math.max(h[k],w[k]),u[k]=Math.min(u[k],w[k]);var Y=a,W=i;Y=0;Array.isArray(a)?Y=n<a.length?a[n]:0:a&&(Y=a);W=0;Array.isArray(i)?W=n<i.length?i[n]:0:i&&(W=i);var X=[Y*=Y>0?1-A[0][0]:Y<0?1+A[1][0]:1,W*=W>0?1-A[0][1]:W<0?1+A[1][1]:1],Z=T.cells||[],J=T.positions||[];for(k=0;k<Z.length;++k)for(var K=Z[k],Q=0;Q<3;++Q){for(var $=0;$<3;++$)E[3*z+$]=w[$];for($=0;$<4;++$)L[4*z+$]=D[$];P[z]=y;var tt=J[K[Q]];C[2*z]=U*(H*tt[0]-G*tt[1]+X[0]),C[2*z+1]=U*(G*tt[0]+H*tt[1]+X[1]),z+=1}for(Z=M.edges,J=M.positions,k=0;k<Z.length;++k)for(K=Z[k],Q=0;Q<2;++Q){for($=0;$<3;++$)E[3*I+$]=w[$];for($=0;$<4;++$)L[4*I+$]=R[$];P[I]=y;tt=J[K[Q]];C[2*I]=U*(H*tt[0]-G*tt[1]+X[0]),C[2*I+1]=U*(G*tt[0]+H*tt[1]+X[1]),I+=1}}}this.bounds=[u,h],this.points=s,this.pointCount=s.length,this.vertexCount=x,this.lineVertexCount=b,this.pointBuffer.update(E),this.colorBuffer.update(L),this.glyphBuffer.update(C),this.idBuffer.update(P),o.free(E),o.free(L),o.free(C),o.free(P)},m.dispose=function(){this.shader.dispose(),this.orthoShader.dispose(),this.pickPerspectiveShader.dispose(),this.pickOrthoShader.dispose(),this.vao.dispose(),this.pointBuffer.dispose(),this.colorBuffer.dispose(),this.glyphBuffer.dispose(),this.idBuffer.dispose()}},{"./lib/get-simple-string":297,"./lib/glyphs":298,"./lib/shaders":299,"gl-buffer":244,"gl-mat4/multiply":270,"gl-vao":329,"is-string-blank":424,"typedarray-pool":543}],301:[function(t,e,r){"use strict";var n=t("glslify");r.boxVertex=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 vertex;\n\nuniform vec2 cornerA, cornerB;\n\nvoid main() {\n gl_Position = vec4(mix(cornerA, cornerB, vertex), 0, 1);\n}\n"]),r.boxFragment=n(["precision mediump float;\n#define GLSLIFY 1\n\nuniform vec4 color;\n\nvoid main() {\n gl_FragColor = color;\n}\n"])},{glslify:410}],302:[function(t,e,r){"use strict";var n=t("gl-shader"),a=t("gl-buffer"),i=t("./lib/shaders");function o(t,e,r){this.plot=t,this.boxBuffer=e,this.boxShader=r,this.enabled=!0,this.selectBox=[1/0,1/0,-1/0,-1/0],this.borderColor=[0,0,0,1],this.innerFill=!1,this.innerColor=[0,0,0,.25],this.outerFill=!0,this.outerColor=[0,0,0,.5],this.borderWidth=10}e.exports=function(t,e){var r=t.gl,s=a(r,[0,0,0,1,1,0,1,1]),l=n(r,i.boxVertex,i.boxFragment),c=new o(t,s,l);return c.update(e),t.addOverlay(c),c};var s=o.prototype;s.draw=function(){if(this.enabled){var t=this.plot,e=this.selectBox,r=this.borderWidth,n=(this.innerFill,this.innerColor),a=(this.outerFill,this.outerColor),i=this.borderColor,o=t.box,s=t.screenBox,l=t.dataBox,c=t.viewBox,u=t.pixelRatio,h=(e[0]-l[0])*(c[2]-c[0])/(l[2]-l[0])+c[0],f=(e[1]-l[1])*(c[3]-c[1])/(l[3]-l[1])+c[1],p=(e[2]-l[0])*(c[2]-c[0])/(l[2]-l[0])+c[0],d=(e[3]-l[1])*(c[3]-c[1])/(l[3]-l[1])+c[1];if(h=Math.max(h,c[0]),f=Math.max(f,c[1]),p=Math.min(p,c[2]),d=Math.min(d,c[3]),!(p<h||d<f)){o.bind();var g=s[2]-s[0],v=s[3]-s[1];if(this.outerFill&&(o.drawBox(0,0,g,f,a),o.drawBox(0,f,h,d,a),o.drawBox(0,d,g,v,a),o.drawBox(p,f,g,d,a)),this.innerFill&&o.drawBox(h,f,p,d,n),r>0){var m=r*u;o.drawBox(h-m,f-m,p+m,f+m,i),o.drawBox(h-m,d-m,p+m,d+m,i),o.drawBox(h-m,f-m,h+m,d+m,i),o.drawBox(p-m,f-m,p+m,d+m,i)}}}},s.update=function(t){t=t||{},this.innerFill=!!t.innerFill,this.outerFill=!!t.outerFill,this.innerColor=(t.innerColor||[0,0,0,.5]).slice(),this.outerColor=(t.outerColor||[0,0,0,.5]).slice(),this.borderColor=(t.borderColor||[0,0,0,1]).slice(),this.borderWidth=t.borderWidth||0,this.selectBox=(t.selectBox||this.selectBox).slice()},s.dispose=function(){this.boxBuffer.dispose(),this.boxShader.dispose(),this.plot.removeOverlay(this)}},{"./lib/shaders":301,"gl-buffer":244,"gl-shader":304}],303:[function(t,e,r){"use strict";e.exports=function(t,e){var r=e[0],i=e[1],o=n(t,r,i,{}),s=a.mallocUint8(r*i*4);return new c(t,o,s)};var n=t("gl-fbo"),a=t("typedarray-pool"),i=t("ndarray"),o=t("bit-twiddle").nextPow2,s=t("cwise/lib/wrapper")({args:["array",{offset:[0,0,1],array:0},{offset:[0,0,2],array:0},{offset:[0,0,3],array:0},"scalar","scalar","index"],pre:{body:"{this_closestD2=1e8,this_closestX=-1,this_closestY=-1}",args:[],thisVars:["this_closestD2","this_closestX","this_closestY"],localVars:[]},body:{body:"{if(_inline_16_arg0_<255||_inline_16_arg1_<255||_inline_16_arg2_<255||_inline_16_arg3_<255){var _inline_16_l=_inline_16_arg4_-_inline_16_arg6_[0],_inline_16_a=_inline_16_arg5_-_inline_16_arg6_[1],_inline_16_f=_inline_16_l*_inline_16_l+_inline_16_a*_inline_16_a;_inline_16_f<this_closestD2&&(this_closestD2=_inline_16_f,this_closestX=_inline_16_arg6_[0],this_closestY=_inline_16_arg6_[1])}}",args:[{name:"_inline_16_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_16_arg1_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_16_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_16_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_16_arg4_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_16_arg5_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_16_arg6_",lvalue:!1,rvalue:!0,count:4}],thisVars:["this_closestD2","this_closestX","this_closestY"],localVars:["_inline_16_a","_inline_16_f","_inline_16_l"]},post:{body:"{return[this_closestX,this_closestY,this_closestD2]}",args:[],thisVars:["this_closestD2","this_closestX","this_closestY"],localVars:[]},debug:!1,funcName:"cwise",blockSize:64});function l(t,e,r,n,a){this.coord=[t,e],this.id=r,this.value=n,this.distance=a}function c(t,e,r){this.gl=t,this.fbo=e,this.buffer=r,this._readTimeout=null;var n=this;this._readCallback=function(){n.gl&&(e.bind(),t.readPixels(0,0,e.shape[0],e.shape[1],t.RGBA,t.UNSIGNED_BYTE,n.buffer),n._readTimeout=null)}}var u=c.prototype;Object.defineProperty(u,"shape",{get:function(){return this.gl?this.fbo.shape.slice():[0,0]},set:function(t){if(this.gl){this.fbo.shape=t;var e=this.fbo.shape[0],r=this.fbo.shape[1];if(r*e*4>this.buffer.length){a.free(this.buffer);for(var n=this.buffer=a.mallocUint8(o(r*e*4)),i=0;i<r*e*4;++i)n[i]=255}return t}}}),u.begin=function(){var t=this.gl;this.shape;t&&(this.fbo.bind(),t.clearColor(1,1,1,1),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT))},u.end=function(){var t=this.gl;t&&(t.bindFramebuffer(t.FRAMEBUFFER,null),this._readTimeout||clearTimeout(this._readTimeout),this._readTimeout=setTimeout(this._readCallback,1))},u.query=function(t,e,r){if(!this.gl)return null;var n=this.fbo.shape.slice();t|=0,e|=0,"number"!=typeof r&&(r=1);var a=0|Math.min(Math.max(t-r,0),n[0]),o=0|Math.min(Math.max(t+r,0),n[0]),c=0|Math.min(Math.max(e-r,0),n[1]),u=0|Math.min(Math.max(e+r,0),n[1]);if(o<=a||u<=c)return null;var h=[o-a,u-c],f=i(this.buffer,[h[0],h[1],4],[4,4*n[0],1],4*(a+n[0]*c)),p=s(f.hi(h[0],h[1],1),r,r),d=p[0],g=p[1];return d<0||Math.pow(this.radius,2)<p[2]?null:new l(d+a|0,g+c|0,f.get(d,g,0),[f.get(d,g,1),f.get(d,g,2),f.get(d,g,3)],Math.sqrt(p[2]))},u.dispose=function(){this.gl&&(this.fbo.dispose(),a.free(this.buffer),this.gl=null,this._readTimeout&&clearTimeout(this._readTimeout))}},{"bit-twiddle":94,"cwise/lib/wrapper":151,"gl-fbo":252,ndarray:451,"typedarray-pool":543}],304:[function(t,e,r){"use strict";var n=t("./lib/create-uniforms"),a=t("./lib/create-attributes"),i=t("./lib/reflect"),o=t("./lib/shader-cache"),s=t("./lib/runtime-reflect"),l=t("./lib/GLError");function c(t){this.gl=t,this.gl.lastAttribCount=0,this._vref=this._fref=this._relink=this.vertShader=this.fragShader=this.program=this.attributes=this.uniforms=this.types=null}var u=c.prototype;function h(t,e){return t.name<e.name?-1:1}u.bind=function(){var t;this.program||this._relink();var e=this.gl.getProgramParameter(this.program,this.gl.ACTIVE_ATTRIBUTES),r=this.gl.lastAttribCount;if(e>r)for(t=r;t<e;t++)this.gl.enableVertexAttribArray(t);else if(r>e)for(t=e;t<r;t++)this.gl.disableVertexAttribArray(t);this.gl.lastAttribCount=e,this.gl.useProgram(this.program)},u.dispose=function(){for(var t=this.gl.lastAttribCount,e=0;e<t;e++)this.gl.disableVertexAttribArray(e);this.gl.lastAttribCount=0,this._fref&&this._fref.dispose(),this._vref&&this._vref.dispose(),this.attributes=this.types=this.vertShader=this.fragShader=this.program=this._relink=this._fref=this._vref=null},u.update=function(t,e,r,c){if(!e||1===arguments.length){var u=t;t=u.vertex,e=u.fragment,r=u.uniforms,c=u.attributes}var f=this,p=f.gl,d=f._vref;f._vref=o.shader(p,p.VERTEX_SHADER,t),d&&d.dispose(),f.vertShader=f._vref.shader;var g=this._fref;if(f._fref=o.shader(p,p.FRAGMENT_SHADER,e),g&&g.dispose(),f.fragShader=f._fref.shader,!r||!c){var v=p.createProgram();if(p.attachShader(v,f.fragShader),p.attachShader(v,f.vertShader),p.linkProgram(v),!p.getProgramParameter(v,p.LINK_STATUS)){var m=p.getProgramInfoLog(v);throw new l(m,"Error linking program:"+m)}r=r||s.uniforms(p,v),c=c||s.attributes(p,v),p.deleteProgram(v)}(c=c.slice()).sort(h);var y,x=[],b=[],_=[];for(y=0;y<c.length;++y){var w=c[y];if(w.type.indexOf("mat")>=0){for(var k=0|w.type.charAt(w.type.length-1),T=new Array(k),M=0;M<k;++M)T[M]=_.length,b.push(w.name+"["+M+"]"),"number"==typeof w.location?_.push(w.location+M):Array.isArray(w.location)&&w.location.length===k&&"number"==typeof w.location[M]?_.push(0|w.location[M]):_.push(-1);x.push({name:w.name,type:w.type,locations:T})}else x.push({name:w.name,type:w.type,locations:[_.length]}),b.push(w.name),"number"==typeof w.location?_.push(0|w.location):_.push(-1)}var A=0;for(y=0;y<_.length;++y)if(_[y]<0){for(;_.indexOf(A)>=0;)A+=1;_[y]=A}var S=new Array(r.length);function E(){f.program=o.program(p,f._vref,f._fref,b,_);for(var t=0;t<r.length;++t)S[t]=p.getUniformLocation(f.program,r[t].name)}E(),f._relink=E,f.types={uniforms:i(r),attributes:i(c)},f.attributes=a(p,f,x,_),Object.defineProperty(f,"uniforms",n(p,f,r,S))},e.exports=function(t,e,r,n,a){var i=new c(t);return i.update(e,r,n,a),i}},{"./lib/GLError":305,"./lib/create-attributes":306,"./lib/create-uniforms":307,"./lib/reflect":308,"./lib/runtime-reflect":309,"./lib/shader-cache":310}],305:[function(t,e,r){function n(t,e,r){this.shortMessage=e||"",this.longMessage=r||"",this.rawError=t||"",this.message="gl-shader: "+(e||t||"")+(r?"\n"+r:""),this.stack=(new Error).stack}n.prototype=new Error,n.prototype.name="GLError",n.prototype.constructor=n,e.exports=n},{}],306:[function(t,e,r){"use strict";e.exports=function(t,e,r,a){for(var i={},l=0,c=r.length;l<c;++l){var u=r[l],h=u.name,f=u.type,p=u.locations;switch(f){case"bool":case"int":case"float":o(t,e,p[0],a,1,i,h);break;default:if(f.indexOf("vec")>=0){var d=f.charCodeAt(f.length-1)-48;if(d<2||d>4)throw new n("","Invalid data type for attribute "+h+": "+f);o(t,e,p[0],a,d,i,h)}else{if(!(f.indexOf("mat")>=0))throw new n("","Unknown data type for attribute "+h+": "+f);var d=f.charCodeAt(f.length-1)-48;if(d<2||d>4)throw new n("","Invalid data type for attribute "+h+": "+f);s(t,e,p,a,d,i,h)}}}return i};var n=t("./GLError");function a(t,e,r,n,a,i){this._gl=t,this._wrapper=e,this._index=r,this._locations=n,this._dimension=a,this._constFunc=i}var i=a.prototype;function o(t,e,r,n,i,o,s){for(var l=["gl","v"],c=[],u=0;u<i;++u)l.push("x"+u),c.push("x"+u);l.push("if(x0.length===void 0){return gl.vertexAttrib"+i+"f(v,"+c.join()+")}else{return gl.vertexAttrib"+i+"fv(v,x0)}");var h=Function.apply(null,l),f=new a(t,e,r,n,i,h);Object.defineProperty(o,s,{set:function(e){return t.disableVertexAttribArray(n[r]),h(t,n[r],e),e},get:function(){return f},enumerable:!0})}function s(t,e,r,n,a,i,s){for(var l=new Array(a),c=new Array(a),u=0;u<a;++u)o(t,e,r[u],n,a,l,u),c[u]=l[u];Object.defineProperty(l,"location",{set:function(t){if(Array.isArray(t))for(var e=0;e<a;++e)c[e].location=t[e];else for(e=0;e<a;++e)c[e].location=t+e;return t},get:function(){for(var t=new Array(a),e=0;e<a;++e)t[e]=n[r[e]];return t},enumerable:!0}),l.pointer=function(e,i,o,s){e=e||t.FLOAT,i=!!i,o=o||a*a,s=s||0;for(var l=0;l<a;++l){var c=n[r[l]];t.vertexAttribPointer(c,a,e,i,o,s+l*a),t.enableVertexAttribArray(c)}};var h=new Array(a),f=t["vertexAttrib"+a+"fv"];Object.defineProperty(i,s,{set:function(e){for(var i=0;i<a;++i){var o=n[r[i]];if(t.disableVertexAttribArray(o),Array.isArray(e[0]))f.call(t,o,e[i]);else{for(var s=0;s<a;++s)h[s]=e[a*i+s];f.call(t,o,h)}}return e},get:function(){return l},enumerable:!0})}i.pointer=function(t,e,r,n){var a=this._gl,i=this._locations[this._index];a.vertexAttribPointer(i,this._dimension,t||a.FLOAT,!!e,r||0,n||0),a.enableVertexAttribArray(i)},i.set=function(t,e,r,n){return this._constFunc(this._locations[this._index],t,e,r,n)},Object.defineProperty(i,"location",{get:function(){return this._locations[this._index]},set:function(t){return t!==this._locations[this._index]&&(this._locations[this._index]=0|t,this._wrapper.program=null),0|t}})},{"./GLError":305}],307:[function(t,e,r){"use strict";var n=t("./reflect"),a=t("./GLError");function i(t){return new Function("y","return function(){return y}")(t)}function o(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=e;return r}e.exports=function(t,e,r,s){function l(t,e,r){switch(r){case"bool":case"int":case"sampler2D":case"samplerCube":return"gl.uniform1i(locations["+e+"],obj"+t+")";case"float":return"gl.uniform1f(locations["+e+"],obj"+t+")";default:var n=r.indexOf("vec");if(!(0<=n&&n<=1&&r.length===4+n)){if(0===r.indexOf("mat")&&4===r.length){var i=r.charCodeAt(r.length-1)-48;if(i<2||i>4)throw new a("","Invalid uniform dimension type for matrix "+name+": "+r);return"gl.uniformMatrix"+i+"fv(locations["+e+"],false,obj"+t+")"}throw new a("","Unknown uniform data type for "+name+": "+r)}var i=r.charCodeAt(r.length-1)-48;if(i<2||i>4)throw new a("","Invalid data type");switch(r.charAt(0)){case"b":case"i":return"gl.uniform"+i+"iv(locations["+e+"],obj"+t+")";case"v":return"gl.uniform"+i+"fv(locations["+e+"],obj"+t+")";default:throw new a("","Unrecognized data type for vector "+name+": "+r)}}}function c(e){for(var n=["return function updateProperty(obj){"],a=function t(e,r){if("object"!=typeof r)return[[e,r]];var n=[];for(var a in r){var i=r[a],o=e;parseInt(a)+""===a?o+="["+a+"]":o+="."+a,"object"==typeof i?n.push.apply(n,t(o,i)):n.push([o,i])}return n}("",e),i=0;i<a.length;++i){var o=a[i],c=o[0],u=o[1];s[u]&&n.push(l(c,u,r[u].type))}n.push("return obj}");var h=new Function("gl","locations",n.join("\n"));return h(t,s)}function u(n,l,u){if("object"==typeof u){var f=h(u);Object.defineProperty(n,l,{get:i(f),set:c(u),enumerable:!0,configurable:!1})}else s[u]?Object.defineProperty(n,l,{get:(p=u,d=new Function("gl","wrapper","locations","return function(){return gl.getUniform(wrapper.program,locations["+p+"])}"),d(t,e,s)),set:c(u),enumerable:!0,configurable:!1}):n[l]=function(t){switch(t){case"bool":return!1;case"int":case"sampler2D":case"samplerCube":case"float":return 0;default:var e=t.indexOf("vec");if(0<=e&&e<=1&&t.length===4+e){var r=t.charCodeAt(t.length-1)-48;if(r<2||r>4)throw new a("","Invalid data type");return"b"===t.charAt(0)?o(r,!1):o(r,0)}if(0===t.indexOf("mat")&&4===t.length){var r=t.charCodeAt(t.length-1)-48;if(r<2||r>4)throw new a("","Invalid uniform dimension type for matrix "+name+": "+t);return o(r*r,0)}throw new a("","Unknown uniform data type for "+name+": "+t)}}(r[u].type);var p,d}function h(t){var e;if(Array.isArray(t)){e=new Array(t.length);for(var r=0;r<t.length;++r)u(e,r,t[r])}else for(var n in e={},t)u(e,n,t[n]);return e}var f=n(r,!0);return{get:i(h(f)),set:c(f),enumerable:!0,configurable:!0}}},{"./GLError":305,"./reflect":308}],308:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r={},n=0;n<t.length;++n)for(var a=t[n].name,i=a.split("."),o=r,s=0;s<i.length;++s){var l=i[s].split("[");if(l.length>1){l[0]in o||(o[l[0]]=[]),o=o[l[0]];for(var c=1;c<l.length;++c){var u=parseInt(l[c]);c<l.length-1||s<i.length-1?(u in o||(c<l.length-1?o[u]=[]:o[u]={}),o=o[u]):o[u]=e?n:t[n].type}}else s<i.length-1?(l[0]in o||(o[l[0]]={}),o=o[l[0]]):o[l[0]]=e?n:t[n].type}return r}},{}],309:[function(t,e,r){"use strict";r.uniforms=function(t,e){for(var r=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),n=[],a=0;a<r;++a){var o=t.getActiveUniform(e,a);if(o){var s=i(t,o.type);if(o.size>1)for(var l=0;l<o.size;++l)n.push({name:o.name.replace("[0]","["+l+"]"),type:s});else n.push({name:o.name,type:s})}}return n},r.attributes=function(t,e){for(var r=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES),n=[],a=0;a<r;++a){var o=t.getActiveAttrib(e,a);o&&n.push({name:o.name,type:i(t,o.type)})}return n};var n={FLOAT:"float",FLOAT_VEC2:"vec2",FLOAT_VEC3:"vec3",FLOAT_VEC4:"vec4",INT:"int",INT_VEC2:"ivec2",INT_VEC3:"ivec3",INT_VEC4:"ivec4",BOOL:"bool",BOOL_VEC2:"bvec2",BOOL_VEC3:"bvec3",BOOL_VEC4:"bvec4",FLOAT_MAT2:"mat2",FLOAT_MAT3:"mat3",FLOAT_MAT4:"mat4",SAMPLER_2D:"sampler2D",SAMPLER_CUBE:"samplerCube"},a=null;function i(t,e){if(!a){var r=Object.keys(n);a={};for(var i=0;i<r.length;++i){var o=r[i];a[t[o]]=n[o]}}return a[e]}},{}],310:[function(t,e,r){"use strict";r.shader=function(t,e,r){return u(t).getShaderReference(e,r)},r.program=function(t,e,r,n,a){return u(t).getProgram(e,r,n,a)};var n=t("./GLError"),a=t("gl-format-compiler-error"),i=new("undefined"==typeof WeakMap?t("weakmap-shim"):WeakMap),o=0;function s(t,e,r,n,a,i,o){this.id=t,this.src=e,this.type=r,this.shader=n,this.count=i,this.programs=[],this.cache=o}function l(t){this.gl=t,this.shaders=[{},{}],this.programs={}}s.prototype.dispose=function(){if(0==--this.count){for(var t=this.cache,e=t.gl,r=this.programs,n=0,a=r.length;n<a;++n){var i=t.programs[r[n]];i&&(delete t.programs[n],e.deleteProgram(i))}e.deleteShader(this.shader),delete t.shaders[this.type===e.FRAGMENT_SHADER|0][this.src]}};var c=l.prototype;function u(t){var e=i.get(t);return e||(e=new l(t),i.set(t,e)),e}c.getShaderReference=function(t,e){var r=this.gl,i=this.shaders[t===r.FRAGMENT_SHADER|0],l=i[e];if(l&&r.isShader(l.shader))l.count+=1;else{var c=function(t,e,r){var i=t.createShader(e);if(t.shaderSource(i,r),t.compileShader(i),!t.getShaderParameter(i,t.COMPILE_STATUS)){var o=t.getShaderInfoLog(i);try{var s=a(o,r,e)}catch(t){throw console.warn("Failed to format compiler error: "+t),new n(o,"Error compiling shader:\n"+o)}throw new n(o,s.short,s.long)}return i}(r,t,e);l=i[e]=new s(o++,e,t,c,[],1,this)}return l},c.getProgram=function(t,e,r,a){var i=[t.id,e.id,r.join(":"),a.join(":")].join("@"),o=this.programs[i];return o&&this.gl.isProgram(o)||(this.programs[i]=o=function(t,e,r,a,i){var o=t.createProgram();t.attachShader(o,e),t.attachShader(o,r);for(var s=0;s<a.length;++s)t.bindAttribLocation(o,i[s],a[s]);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){var l=t.getProgramInfoLog(o);throw new n(l,"Error linking program: "+l)}return o}(this.gl,t.shader,e.shader,r,a),t.programs.push(i),e.programs.push(i)),o}},{"./GLError":305,"gl-format-compiler-error":253,"weakmap-shim":553}],311:[function(t,e,r){"use strict";function n(t){this.plot=t,this.enable=[!0,!0,!1,!1],this.width=[1,1,1,1],this.color=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.center=[1/0,1/0]}e.exports=function(t,e){var r=new n(t);return r.update(e),t.addOverlay(r),r};var a=n.prototype;a.update=function(t){t=t||{},this.enable=(t.enable||[!0,!0,!1,!1]).slice(),this.width=(t.width||[1,1,1,1]).slice(),this.color=(t.color||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]).map(function(t){return t.slice()}),this.center=(t.center||[1/0,1/0]).slice(),this.plot.setOverlayDirty()},a.draw=function(){var t=this.enable,e=this.width,r=this.color,n=this.center,a=this.plot,i=a.line,o=a.dataBox,s=a.viewBox;if(i.bind(),o[0]<=n[0]&&n[0]<=o[2]&&o[1]<=n[1]&&n[1]<=o[3]){var l=s[0]+(n[0]-o[0])/(o[2]-o[0])*(s[2]-s[0]),c=s[1]+(n[1]-o[1])/(o[3]-o[1])*(s[3]-s[1]);t[0]&&i.drawLine(l,c,s[0],c,e[0],r[0]),t[1]&&i.drawLine(l,c,l,s[1],e[1],r[1]),t[2]&&i.drawLine(l,c,s[2],c,e[2],r[2]),t[3]&&i.drawLine(l,c,l,s[3],e[3],r[3])}},a.dispose=function(){this.plot.removeOverlay(this)}},{}],312:[function(t,e,r){"use strict";var n=t("glslify"),a=t("gl-shader"),i=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position, color;\nattribute float weight;\n\nuniform mat4 model, view, projection;\nuniform vec3 coordinates[3];\nuniform vec4 colors[3];\nuniform vec2 screenShape;\nuniform float lineWidth;\n\nvarying vec4 fragColor;\n\nvoid main() {\n vec3 vertexPosition = mix(coordinates[0],\n mix(coordinates[2], coordinates[1], 0.5 * (position + 1.0)), abs(position));\n\n vec4 clipPos = projection * view * model * vec4(vertexPosition, 1.0);\n vec2 clipOffset = (projection * view * model * vec4(color, 0.0)).xy;\n vec2 delta = weight * clipOffset * screenShape;\n vec2 lineOffset = normalize(vec2(delta.y, -delta.x)) / screenShape;\n\n gl_Position = vec4(clipPos.xy + clipPos.w * 0.5 * lineWidth * lineOffset, clipPos.z, clipPos.w);\n fragColor = color.x * colors[0] + color.y * colors[1] + color.z * colors[2];\n}\n"]),o=n(["precision mediump float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor;\n\nvoid main() {\n gl_FragColor = fragColor;\n}"]);e.exports=function(t){return a(t,i,o,null,[{name:"position",type:"vec3"},{name:"color",type:"vec3"},{name:"weight",type:"float"}])}},{"gl-shader":304,glslify:410}],313:[function(t,e,r){"use strict";var n=t("gl-buffer"),a=t("gl-vao"),i=t("./shaders/index");e.exports=function(t,e){var r=[];function o(t,e,n,a,i,o){var s=[t,e,n,0,0,0,1];s[a+3]=1,s[a]=i,r.push.apply(r,s),s[6]=-1,r.push.apply(r,s),s[a]=o,r.push.apply(r,s),r.push.apply(r,s),s[6]=1,r.push.apply(r,s),s[a]=i,r.push.apply(r,s)}o(0,0,0,0,0,1),o(0,0,0,1,0,1),o(0,0,0,2,0,1),o(1,0,0,1,-1,1),o(1,0,0,2,-1,1),o(0,1,0,0,-1,1),o(0,1,0,2,-1,1),o(0,0,1,0,-1,1),o(0,0,1,1,-1,1);var l=n(t,r),c=a(t,[{type:t.FLOAT,buffer:l,size:3,offset:0,stride:28},{type:t.FLOAT,buffer:l,size:3,offset:12,stride:28},{type:t.FLOAT,buffer:l,size:1,offset:24,stride:28}]),u=i(t);u.attributes.position.location=0,u.attributes.color.location=1,u.attributes.weight.location=2;var h=new s(t,l,c,u);return h.update(e),h};var o=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,r,n){this.gl=t,this.buffer=e,this.vao=r,this.shader=n,this.pixelRatio=1,this.bounds=[[-1e3,-1e3,-1e3],[1e3,1e3,1e3]],this.position=[0,0,0],this.lineWidth=[2,2,2],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.enabled=[!0,!0,!0],this.drawSides=[!0,!0,!0],this.axes=null}var l=s.prototype,c=[0,0,0],u=[0,0,0],h=[0,0];l.isTransparent=function(){return!1},l.drawTransparent=function(t){},l.draw=function(t){var e=this.gl,r=this.vao,n=this.shader;r.bind(),n.bind();var a,i=t.model||o,s=t.view||o,l=t.projection||o;this.axes&&(a=this.axes.lastCubeProps.axis);for(var f=c,p=u,d=0;d<3;++d)a&&a[d]<0?(f[d]=this.bounds[0][d],p[d]=this.bounds[1][d]):(f[d]=this.bounds[1][d],p[d]=this.bounds[0][d]);h[0]=e.drawingBufferWidth,h[1]=e.drawingBufferHeight,n.uniforms.model=i,n.uniforms.view=s,n.uniforms.projection=l,n.uniforms.coordinates=[this.position,f,p],n.uniforms.colors=this.colors,n.uniforms.screenShape=h;for(d=0;d<3;++d)n.uniforms.lineWidth=this.lineWidth[d]*this.pixelRatio,this.enabled[d]&&(r.draw(e.TRIANGLES,6,6*d),this.drawSides[d]&&r.draw(e.TRIANGLES,12,18+12*d));r.unbind()},l.update=function(t){t&&("bounds"in t&&(this.bounds=t.bounds),"position"in t&&(this.position=t.position),"lineWidth"in t&&(this.lineWidth=t.lineWidth),"colors"in t&&(this.colors=t.colors),"enabled"in t&&(this.enabled=t.enabled),"drawSides"in t&&(this.drawSides=t.drawSides))},l.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},{"./shaders/index":312,"gl-buffer":244,"gl-vao":329}],314:[function(t,e,r){var n=t("glslify"),a=n(["precision highp float;\n\nprecision highp float;\n#define GLSLIFY 1\n\nvec3 getOrthogonalVector(vec3 v) {\n // Return up-vector for only-z vector.\n // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\n // From the above if-statement we have ||a|| > 0 U ||b|| > 0.\n // Assign z = 0, x = -b, y = a:\n // a*-b + b*a + c*0 = -ba + ba + 0 = 0\n if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\n return normalize(vec3(-v.y, v.x, 0.0));\n } else {\n return normalize(vec3(0.0, v.z, -v.y));\n }\n}\n\n// Calculate the tube vertex and normal at the given index.\n//\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\n//\n// Each tube segment is made up of a ring of vertices.\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\n// The indexes of tube segments run from 0 to 8.\n//\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\n float segmentCount = 8.0;\n\n float angle = 2.0 * 3.14159 * (index / segmentCount);\n\n vec3 u = getOrthogonalVector(d);\n vec3 v = normalize(cross(u, d));\n\n vec3 x = u * cos(angle) * length(d);\n vec3 y = v * sin(angle) * length(d);\n vec3 v3 = x + y;\n\n normal = normalize(v3);\n\n return v3;\n}\n\nattribute vec4 vector;\nattribute vec4 color, position;\nattribute vec2 uv;\n\nuniform float vectorScale, tubeScale;\nuniform mat4 model, view, projection, inverseModel;\nuniform vec3 eyePosition, lightPosition;\n\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n // Scale the vector magnitude to stay constant with\n // model & view changes.\n vec3 normal;\n vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\n vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\n\n //Lighting geometry parameters\n vec4 cameraCoordinate = view * tubePosition;\n cameraCoordinate.xyz /= cameraCoordinate.w;\n f_lightDirection = lightPosition - cameraCoordinate.xyz;\n f_eyeDirection = eyePosition - cameraCoordinate.xyz;\n f_normal = normalize((vec4(normal, 0.0) * inverseModel).xyz);\n\n // vec4 m_position = model * vec4(tubePosition, 1.0);\n vec4 t_position = view * tubePosition;\n gl_Position = projection * t_position;\n\n f_color = color;\n f_data = tubePosition.xyz;\n f_position = position.xyz;\n f_uv = uv;\n}\n"]),i=n(["#extension GL_OES_standard_derivatives : enable\n\nprecision highp float;\n#define GLSLIFY 1\n\nfloat beckmannDistribution(float x, float roughness) {\n float NdotH = max(x, 0.0001);\n float cos2Alpha = NdotH * NdotH;\n float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n float roughness2 = roughness * roughness;\n float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n return exp(tan2Alpha / roughness2) / denom;\n}\n\nfloat cookTorranceSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float roughness,\n float fresnel) {\n\n float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\n float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\n\n //Half angle vector\n vec3 H = normalize(lightDirection + viewDirection);\n\n //Geometric term\n float NdotH = max(dot(surfaceNormal, H), 0.0);\n float VdotH = max(dot(viewDirection, H), 0.000001);\n float LdotH = max(dot(lightDirection, H), 0.000001);\n float G1 = (2.0 * NdotH * VdotN) / VdotH;\n float G2 = (2.0 * NdotH * LdotN) / LdotH;\n float G = min(1.0, min(G1, G2));\n \n //Distribution term\n float D = beckmannDistribution(NdotH, roughness);\n\n //Fresnel term\n float F = pow(1.0 - VdotN, fresnel);\n\n //Multiply terms and done\n return G * F * D / max(3.14159265 * VdotN, 0.000001);\n}\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\nuniform sampler2D texture;\n\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n vec3 N = normalize(f_normal);\n vec3 L = normalize(f_lightDirection);\n vec3 V = normalize(f_eyeDirection);\n\n if(gl_FrontFacing) {\n N = -N;\n }\n\n float specular = min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\n float diffuse = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n vec4 surfaceColor = f_color * texture2D(texture, f_uv);\n vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular, 1.0);\n\n gl_FragColor = litColor * opacity;\n}\n"]),o=n(["precision highp float;\n\nprecision highp float;\n#define GLSLIFY 1\n\nvec3 getOrthogonalVector(vec3 v) {\n // Return up-vector for only-z vector.\n // Return ax + by + cz = 0, a point that lies on the plane that has v as a normal and that isn't (0,0,0).\n // From the above if-statement we have ||a|| > 0 U ||b|| > 0.\n // Assign z = 0, x = -b, y = a:\n // a*-b + b*a + c*0 = -ba + ba + 0 = 0\n if (v.x*v.x > v.z*v.z || v.y*v.y > v.z*v.z) {\n return normalize(vec3(-v.y, v.x, 0.0));\n } else {\n return normalize(vec3(0.0, v.z, -v.y));\n }\n}\n\n// Calculate the tube vertex and normal at the given index.\n//\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\n//\n// Each tube segment is made up of a ring of vertices.\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\n// The indexes of tube segments run from 0 to 8.\n//\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\n float segmentCount = 8.0;\n\n float angle = 2.0 * 3.14159 * (index / segmentCount);\n\n vec3 u = getOrthogonalVector(d);\n vec3 v = normalize(cross(u, d));\n\n vec3 x = u * cos(angle) * length(d);\n vec3 y = v * sin(angle) * length(d);\n vec3 v3 = x + y;\n\n normal = normalize(v3);\n\n return v3;\n}\n\nattribute vec4 vector;\nattribute vec4 position;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\nuniform float tubeScale;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n vec3 normal;\n vec3 XYZ = getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\n vec4 tubePosition = model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\n\n gl_Position = projection * view * tubePosition;\n f_id = id;\n f_position = position.xyz;\n}\n"]),s=n(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 clipBounds[2];\nuniform float pickId;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\n\n gl_FragColor = vec4(pickId, f_id.xyz);\n}"]);r.meshShader={vertex:a,fragment:i,attributes:[{name:"position",type:"vec4"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"},{name:"vector",type:"vec4"}]},r.pickShader={vertex:o,fragment:s,attributes:[{name:"position",type:"vec4"},{name:"id",type:"vec4"},{name:"vector",type:"vec4"}]}},{glslify:410}],315:[function(t,e,r){"use strict";var n=t("gl-vec3"),a=t("gl-vec4"),i=["xyz","xzy","yxz","yzx","zxy","zyx"],o=function(t,e,r,i){for(var o=0,s=0;s<t.length;s++)for(var l=t[s].velocities,c=0;c<l.length;c++)o=Math.max(o,n.length(l[c]));var u=t.map(function(t){return function(t,e,r,i){for(var o=t.points,s=t.velocities,l=t.divergences,c=[],u=[],h=[],f=[],p=[],d=[],g=0,v=0,m=a.create(),y=a.create(),x=0;x<o.length;x++){var b=o[x],_=s[x],w=l[x];0===e&&(w=.05*r),v=n.length(_)/i,m=a.create(),n.copy(m,_),m[3]=w;for(var k=0;k<8;k++)p[k]=[b[0],b[1],b[2],k];if(f.length>0)for(k=0;k<8;k++){var T=(k+1)%8;c.push(f[k],p[k],p[T],p[T],f[T],f[k]),h.push(y,m,m,m,y,y),d.push(g,v,v,v,g,g);var M=c.length;u.push([M-6,M-5,M-4],[M-3,M-2,M-1])}var A=f;f=p,p=A;var S=y;y=m,m=S;var E=g;g=v,v=E}return{positions:c,cells:u,vectors:h,vertexIntensity:d}}(t,r,i,o)}),h=[],f=[],p=[],d=[];for(s=0;s<u.length;s++){var g=u[s],v=h.length;h=h.concat(g.positions),p=p.concat(g.vectors),d=d.concat(g.vertexIntensity);for(c=0;c<g.cells.length;c++){var m=g.cells[c],y=[];f.push(y);for(var x=0;x<m.length;x++)y.push(m[x]+v)}}return{positions:h,cells:f,vectors:p,vertexIntensity:d,colormap:e}},s=function(t,e){var r,n=t.length;for(r=0;r<n;r++){var a=t[r];if(a===e)return r;if(a>e)return r-1}return r},l=function(t,e,r){return t<e?e:t>r?r:t},c=function(t){var e=1/0;t.sort(function(t,e){return t-e});for(var r=t.length,n=1;n<r;n++){var a=Math.abs(t[n]-t[n-1]);a<e&&(e=a)}return e};e.exports=function(t,e){var r=t.startingPositions,a=t.maxLength||1e3,u=t.tubeSize||1,h=t.absoluteTubeSize,f=t.gridFill||"+x+y+z",p={};-1!==f.indexOf("-x")&&(p.reversedX=!0),-1!==f.indexOf("-y")&&(p.reversedY=!0),-1!==f.indexOf("-z")&&(p.reversedZ=!0),p.filled=i.indexOf(f.replace(/-/g,"").replace(/\+/g,""));var d=t.getVelocity||function(e){return function(t,e,r){var a=e.vectors,i=e.meshgrid,o=t[0],c=t[1],u=t[2],h=i[0].length,f=i[1].length,p=i[2].length,d=s(i[0],o),g=s(i[1],c),v=s(i[2],u),m=d+1,y=g+1,x=v+1;if(d=l(d,0,h-1),m=l(m,0,h-1),g=l(g,0,f-1),y=l(y,0,f-1),v=l(v,0,p-1),x=l(x,0,p-1),d<0||g<0||v<0||m>h-1||y>f-1||x>p-1)return n.create();var b,_,w,k,T,M,A=i[0][d],S=i[0][m],E=i[1][g],L=i[1][y],C=i[2][v],P=(o-A)/(S-A),O=(c-E)/(L-E),z=(u-C)/(i[2][x]-C);switch(isFinite(P)||(P=.5),isFinite(O)||(O=.5),isFinite(z)||(z=.5),r.reversedX&&(d=h-1-d,m=h-1-m),r.reversedY&&(g=f-1-g,y=f-1-y),r.reversedZ&&(v=p-1-v,x=p-1-x),r.filled){case 5:T=v,M=x,w=g*p,k=y*p,b=d*p*f,_=m*p*f;break;case 4:T=v,M=x,b=d*p,_=m*p,w=g*p*h,k=y*p*h;break;case 3:w=g,k=y,T=v*f,M=x*f,b=d*f*p,_=m*f*p;break;case 2:w=g,k=y,b=d*f,_=m*f,T=v*f*h,M=x*f*h;break;case 1:b=d,_=m,T=v*h,M=x*h,w=g*h*p,k=y*h*p;break;default:b=d,_=m,w=g*h,k=y*h,T=v*h*f,M=x*h*f}var I=a[b+w+T],D=a[b+w+M],R=a[b+k+T],F=a[b+k+M],B=a[_+w+T],N=a[_+w+M],j=a[_+k+T],V=a[_+k+M],U=n.create(),q=n.create(),H=n.create(),G=n.create();n.lerp(U,I,B,P),n.lerp(q,D,N,P),n.lerp(H,R,j,P),n.lerp(G,F,V,P);var Y=n.create(),W=n.create();n.lerp(Y,U,H,O),n.lerp(W,q,G,O);var X=n.create();return n.lerp(X,Y,W,z),X}(e,t,p)},g=t.getDivergence||function(t,e){var r=n.create(),a=1e-4;n.add(r,t,[a,0,0]);var i=d(r);n.subtract(i,i,e),n.scale(i,i,1e4),n.add(r,t,[0,a,0]);var o=d(r);n.subtract(o,o,e),n.scale(o,o,1e4),n.add(r,t,[0,0,a]);var s=d(r);return n.subtract(s,s,e),n.scale(s,s,1e4),n.add(r,i,o),n.add(r,r,s),r},v=[],m=e[0][0],y=e[0][1],x=e[0][2],b=e[1][0],_=e[1][1],w=e[1][2],k=function(t){var e=t[0],r=t[1],n=t[2];return!(e<m||e>b||r<y||r>_||n<x||n>w)},T=10*n.distance(e[0],e[1])/a,M=T*T,A=1,S=0,E=r.length;E>1&&(A=function(t){for(var e=[],r=[],n=[],a={},i={},o={},s=t.length,l=0;l<s;l++){var u=t[l],h=u[0],f=u[1],p=u[2];a[h]||(e.push(h),a[h]=!0),i[f]||(r.push(f),i[f]=!0),o[p]||(n.push(p),o[p]=!0)}var d=c(e),g=c(r),v=c(n),m=Math.min(d,g,v);return isFinite(m)?m:1}(r));for(var L=0;L<E;L++){var C=n.create();n.copy(C,r[L]);var P=[C],O=[],z=d(C),I=C;O.push(z);var D=[],R=g(C,z),F=n.length(R);isFinite(F)&&F>S&&(S=F),D.push(F),v.push({points:P,velocities:O,divergences:D});for(var B=0;B<100*a&&P.length<a&&k(C);){B++;var N=n.clone(z),j=n.squaredLength(N);if(0===j)break;if(j>M&&n.scale(N,N,T/Math.sqrt(j)),n.add(N,N,C),z=d(N),n.squaredDistance(I,N)-M>-1e-4*M){P.push(N),I=N,O.push(z);R=g(N,z),F=n.length(R);isFinite(F)&&F>S&&(S=F),D.push(F)}C=N}}var V=o(v,t.colormap,S,A);return h?V.tubeScale=h:(0===S&&(S=1),V.tubeScale=.5*u*A/S),V};var u=t("./lib/shaders"),h=t("gl-cone3d").createMesh;e.exports.createTubeMesh=function(t,e){return h(t,e,{shaders:u,traceType:"streamtube"})}},{"./lib/shaders":314,"gl-cone3d":245,"gl-vec3":348,"gl-vec4":384}],316:[function(t,e,r){var n=t("gl-shader"),a=t("glslify"),i=a(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec4 uv;\nattribute vec3 f;\nattribute vec3 normal;\n\nuniform vec3 objectOffset;\nuniform mat4 model, view, projection, inverseModel;\nuniform vec3 lightPosition, eyePosition;\nuniform sampler2D colormap;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec2 planeCoordinate;\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\nvarying vec4 vColor;\n\nvoid main() {\n vec3 localCoordinate = vec3(uv.zw, f.x);\n worldCoordinate = objectOffset + localCoordinate;\n vec4 worldPosition = model * vec4(worldCoordinate, 1.0);\n vec4 clipPosition = projection * view * worldPosition;\n gl_Position = clipPosition;\n kill = f.y;\n value = f.z;\n planeCoordinate = uv.xy;\n\n vColor = texture2D(colormap, vec2(value, value));\n\n //Lighting geometry parameters\n vec4 cameraCoordinate = view * worldPosition;\n cameraCoordinate.xyz /= cameraCoordinate.w;\n lightDirection = lightPosition - cameraCoordinate.xyz;\n eyeDirection = eyePosition - cameraCoordinate.xyz;\n surfaceNormal = normalize((vec4(normal,0) * inverseModel).xyz);\n}\n"]),o=a(["precision highp float;\n#define GLSLIFY 1\n\nfloat beckmannDistribution(float x, float roughness) {\n float NdotH = max(x, 0.0001);\n float cos2Alpha = NdotH * NdotH;\n float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n float roughness2 = roughness * roughness;\n float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n return exp(tan2Alpha / roughness2) / denom;\n}\n\nfloat beckmannSpecular(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float roughness) {\n return beckmannDistribution(dot(surfaceNormal, normalize(lightDirection + viewDirection)), roughness);\n}\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec3 lowerBound, upperBound;\nuniform float contourTint;\nuniform vec4 contourColor;\nuniform sampler2D colormap;\nuniform vec3 clipBounds[2];\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\nuniform float vertexColor;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\nvarying vec4 vColor;\n\nvoid main() {\n if (\n kill > 0.0 ||\n vColor.a == 0.0 ||\n outOfRange(clipBounds[0], clipBounds[1], worldCoordinate)\n ) discard;\n\n vec3 N = normalize(surfaceNormal);\n vec3 V = normalize(eyeDirection);\n vec3 L = normalize(lightDirection);\n\n if(gl_FrontFacing) {\n N = -N;\n }\n\n float specular = max(beckmannSpecular(L, V, N, roughness), 0.);\n float diffuse = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n //decide how to interpolate color \u2014 in vertex or in fragment\n vec4 surfaceColor =\n step(vertexColor, .5) * texture2D(colormap, vec2(value, value)) +\n step(.5, vertexColor) * vColor;\n\n vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular, 1.0);\n\n gl_FragColor = mix(litColor, contourColor, contourTint) * opacity;\n}\n"]),s=a(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec4 uv;\nattribute float f;\n\nuniform vec3 objectOffset;\nuniform mat3 permutation;\nuniform mat4 model, view, projection;\nuniform float height, zOffset;\nuniform sampler2D colormap;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec2 planeCoordinate;\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\nvarying vec4 vColor;\n\nvoid main() {\n vec3 dataCoordinate = permutation * vec3(uv.xy, height);\n worldCoordinate = objectOffset + dataCoordinate;\n vec4 worldPosition = model * vec4(worldCoordinate, 1.0);\n\n vec4 clipPosition = projection * view * worldPosition;\n clipPosition.z += zOffset;\n\n gl_Position = clipPosition;\n value = f + objectOffset.z;\n kill = -1.0;\n planeCoordinate = uv.zw;\n\n vColor = texture2D(colormap, vec2(value, value));\n\n //Don't do lighting for contours\n surfaceNormal = vec3(1,0,0);\n eyeDirection = vec3(0,1,0);\n lightDirection = vec3(0,0,1);\n}\n"]),l=a(["precision highp float;\n#define GLSLIFY 1\n\nbool outOfRange(float a, float b, float p) {\n return ((p > max(a, b)) || \n (p < min(a, b)));\n}\n\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y));\n}\n\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\n return (outOfRange(a.x, b.x, p.x) ||\n outOfRange(a.y, b.y, p.y) ||\n outOfRange(a.z, b.z, p.z));\n}\n\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\n return outOfRange(a.xyz, b.xyz, p.xyz);\n}\n\nuniform vec2 shape;\nuniform vec3 clipBounds[2];\nuniform float pickId;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec2 planeCoordinate;\nvarying vec3 surfaceNormal;\n\nvec2 splitFloat(float v) {\n float vh = 255.0 * v;\n float upper = floor(vh);\n float lower = fract(vh);\n return vec2(upper / 255.0, floor(lower * 16.0) / 16.0);\n}\n\nvoid main() {\n if ((kill > 0.0) ||\n (outOfRange(clipBounds[0], clipBounds[1], worldCoordinate))) discard;\n\n vec2 ux = splitFloat(planeCoordinate.x / shape.x);\n vec2 uy = splitFloat(planeCoordinate.y / shape.y);\n gl_FragColor = vec4(pickId, ux.x, uy.x, ux.y + (uy.y/16.0));\n}\n"]);r.createShader=function(t){var e=n(t,i,o,null,[{name:"uv",type:"vec4"},{name:"f",type:"vec3"},{name:"normal",type:"vec3"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},r.createPickShader=function(t){var e=n(t,i,l,null,[{name:"uv",type:"vec4"},{name:"f",type:"vec3"},{name:"normal",type:"vec3"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},r.createContourShader=function(t){var e=n(t,s,o,null,[{name:"uv",type:"vec4"},{name:"f",type:"float"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e},r.createPickContourShader=function(t){var e=n(t,s,l,null,[{name:"uv",type:"vec4"},{name:"f",type:"float"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e}},{"gl-shader":304,glslify:410}],317:[function(t,e,r){arguments[4][113][0].apply(r,arguments)},{dup:113}],318:[function(t,e,r){"use strict";e.exports=function(t){var e=t.gl,r=y(e),n=b(e),s=x(e),l=_(e),c=a(e),u=i(e,[{buffer:c,size:4,stride:w,offset:0},{buffer:c,size:3,stride:w,offset:16},{buffer:c,size:3,stride:w,offset:28}]),h=a(e),f=i(e,[{buffer:h,size:4,stride:20,offset:0},{buffer:h,size:1,stride:20,offset:16}]),p=a(e),d=i(e,[{buffer:p,size:2,type:e.FLOAT}]),g=o(e,1,S,e.RGBA,e.UNSIGNED_BYTE);g.minFilter=e.LINEAR,g.magFilter=e.LINEAR;var v=new E(e,[0,0],[[0,0,0],[0,0,0]],r,n,c,u,g,s,l,h,f,p,d,[0,0,0]),m={levels:[[],[],[]]};for(var k in t)m[k]=t[k];return m.colormap=m.colormap||"jet",v.update(m),v};var n=t("bit-twiddle"),a=t("gl-buffer"),i=t("gl-vao"),o=t("gl-texture2d"),s=t("typedarray-pool"),l=t("colormap"),c=t("ndarray-ops"),u=t("ndarray-pack"),h=t("ndarray"),f=t("surface-nets"),p=t("gl-mat4/multiply"),d=t("gl-mat4/invert"),g=t("binary-search-bounds"),v=t("ndarray-gradient"),m=t("./lib/shaders"),y=m.createShader,x=m.createContourShader,b=m.createPickShader,_=m.createPickContourShader,w=40,k=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],T=[[0,0],[0,1],[1,0],[1,1],[1,0],[0,1]],M=[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]];function A(t,e,r,n,a){this.position=t,this.index=e,this.uv=r,this.level=n,this.dataCoordinate=a}!function(){for(var t=0;t<3;++t){var e=M[t],r=(t+2)%3;e[(t+1)%3+0]=1,e[r+3]=1,e[t+6]=1}}();var S=256;function E(t,e,r,n,a,i,o,l,c,u,f,p,d,g,v){this.gl=t,this.shape=e,this.bounds=r,this.objectOffset=v,this.intensityBounds=[],this._shader=n,this._pickShader=a,this._coordinateBuffer=i,this._vao=o,this._colorMap=l,this._contourShader=c,this._contourPickShader=u,this._contourBuffer=f,this._contourVAO=p,this._contourOffsets=[[],[],[]],this._contourCounts=[[],[],[]],this._vertexCount=0,this._pickResult=new A([0,0,0],[0,0],[0,0],[0,0,0],[0,0,0]),this._dynamicBuffer=d,this._dynamicVAO=g,this._dynamicOffsets=[0,0,0],this._dynamicCounts=[0,0,0],this.contourWidth=[1,1,1],this.contourLevels=[[1],[1],[1]],this.contourTint=[0,0,0],this.contourColor=[[.5,.5,.5,1],[.5,.5,.5,1],[.5,.5,.5,1]],this.showContour=!0,this.showSurface=!0,this.enableHighlight=[!0,!0,!0],this.highlightColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.highlightTint=[1,1,1],this.highlightLevel=[-1,-1,-1],this.enableDynamic=[!0,!0,!0],this.dynamicLevel=[NaN,NaN,NaN],this.dynamicColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.dynamicTint=[1,1,1],this.dynamicWidth=[1,1,1],this.axesBounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.surfaceProject=[!1,!1,!1],this.contourProject=[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],this.colorBounds=[!1,!1],this._field=[h(s.mallocFloat(1024),[0,0]),h(s.mallocFloat(1024),[0,0]),h(s.mallocFloat(1024),[0,0])],this.pickId=1,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.snapToData=!1,this.pixelRatio=1,this.opacity=1,this.opacityscale=!1,this.lightPosition=[10,1e4,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.vertexColor=0,this.dirty=!0}var L=E.prototype;L.isTransparent=function(){return this.opacity<1||this.opacityscale},L.isOpaque=function(){if(this.opacityscale)return!1;if(this.opacity<1)return!1;if(this.opacity>=1)return!0;for(var t=0;t<3;++t)if(this._contourCounts[t].length>0)return!0;return!1},L.pickSlots=1,L.setPickBase=function(t){this.pickId=t};var C=[0,0,0],P={showSurface:!1,showContour:!1,projections:[k.slice(),k.slice(),k.slice()],clipBounds:[[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]]]};function O(t,e){var r,n,a,i=e.axes&&e.axes.lastCubeProps.axis||C,o=e.showSurface,s=e.showContour;for(r=0;r<3;++r)for(o=o||e.surfaceProject[r],n=0;n<3;++n)s=s||e.contourProject[r][n];for(r=0;r<3;++r){var l=P.projections[r];for(n=0;n<16;++n)l[n]=0;for(n=0;n<4;++n)l[5*n]=1;l[5*r]=0,l[12+r]=e.axesBounds[+(i[r]>0)][r],p(l,t.model,l);var c=P.clipBounds[r];for(a=0;a<2;++a)for(n=0;n<3;++n)c[a][n]=t.clipBounds[a][n];c[0][r]=-1e8,c[1][r]=1e8}return P.showSurface=o,P.showContour=s,P}var z={model:k,view:k,projection:k,inverseModel:k.slice(),lowerBound:[0,0,0],upperBound:[0,0,0],colorMap:0,clipBounds:[[0,0,0],[0,0,0]],height:0,contourTint:0,contourColor:[0,0,0,1],permutation:[1,0,0,0,1,0,0,0,1],zOffset:-1e-4,objectOffset:[0,0,0],kambient:1,kdiffuse:1,kspecular:1,lightPosition:[1e3,1e3,1e3],eyePosition:[0,0,0],roughness:1,fresnel:1,opacity:1,vertexColor:0},I=k.slice(),D=[1,0,0,0,1,0,0,0,1];function R(t,e){t=t||{};var r=this.gl;r.disable(r.CULL_FACE),this._colorMap.bind(0);var n=z;n.model=t.model||k,n.view=t.view||k,n.projection=t.projection||k,n.lowerBound=[this.bounds[0][0],this.bounds[0][1],this.colorBounds[0]||this.bounds[0][2]],n.upperBound=[this.bounds[1][0],this.bounds[1][1],this.colorBounds[1]||this.bounds[1][2]],n.objectOffset=this.objectOffset,n.contourColor=this.contourColor[0],n.inverseModel=d(n.inverseModel,n.model);for(var a=0;a<2;++a)for(var i=n.clipBounds[a],o=0;o<3;++o)i[o]=Math.min(Math.max(this.clipBounds[a][o],-1e8),1e8);n.kambient=this.ambientLight,n.kdiffuse=this.diffuseLight,n.kspecular=this.specularLight,n.roughness=this.roughness,n.fresnel=this.fresnel,n.opacity=this.opacity,n.height=0,n.permutation=D,n.vertexColor=this.vertexColor;var s=I;for(p(s,n.view,n.model),p(s,n.projection,s),d(s,s),a=0;a<3;++a)n.eyePosition[a]=s[12+a]/s[15];var l=s[15];for(a=0;a<3;++a)l+=this.lightPosition[a]*s[4*a+3];for(a=0;a<3;++a){var c=s[12+a];for(o=0;o<3;++o)c+=s[4*o+a]*this.lightPosition[o];n.lightPosition[a]=c/l}var u=O(n,this);if(u.showSurface){for(this._shader.bind(),this._shader.uniforms=n,this._vao.bind(),this.showSurface&&this._vertexCount&&this._vao.draw(r.TRIANGLES,this._vertexCount),a=0;a<3;++a)this.surfaceProject[a]&&this.vertexCount&&(this._shader.uniforms.model=u.projections[a],this._shader.uniforms.clipBounds=u.clipBounds[a],this._vao.draw(r.TRIANGLES,this._vertexCount));this._vao.unbind()}if(u.showContour){var h=this._contourShader;n.kambient=1,n.kdiffuse=0,n.kspecular=0,n.opacity=1,h.bind(),h.uniforms=n;var f=this._contourVAO;for(f.bind(),a=0;a<3;++a)for(h.uniforms.permutation=M[a],r.lineWidth(this.contourWidth[a]*this.pixelRatio),o=0;o<this.contourLevels[a].length;++o)o===this.highlightLevel[a]?(h.uniforms.contourColor=this.highlightColor[a],h.uniforms.contourTint=this.highlightTint[a]):0!==o&&o-1!==this.highlightLevel[a]||(h.uniforms.contourColor=this.contourColor[a],h.uniforms.contourTint=this.contourTint[a]),this._contourCounts[a][o]&&(h.uniforms.height=this.contourLevels[a][o],f.draw(r.LINES,this._contourCounts[a][o],this._contourOffsets[a][o]));for(a=0;a<3;++a)for(h.uniforms.model=u.projections[a],h.uniforms.clipBounds=u.clipBounds[a],o=0;o<3;++o)if(this.contourProject[a][o]){h.uniforms.permutation=M[o],r.lineWidth(this.contourWidth[o]*this.pixelRatio);for(var g=0;g<this.contourLevels[o].length;++g)g===this.highlightLevel[o]?(h.uniforms.contourColor=this.highlightColor[o],h.uniforms.contourTint=this.highlightTint[o]):0!==g&&g-1!==this.highlightLevel[o]||(h.uniforms.contourColor=this.contourColor[o],h.uniforms.contourTint=this.contourTint[o]),this._contourCounts[o][g]&&(h.uniforms.height=this.contourLevels[o][g],f.draw(r.LINES,this._contourCounts[o][g],this._contourOffsets[o][g]))}for(f.unbind(),(f=this._dynamicVAO).bind(),a=0;a<3;++a)if(0!==this._dynamicCounts[a])for(h.uniforms.model=n.model,h.uniforms.clipBounds=n.clipBounds,h.uniforms.permutation=M[a],r.lineWidth(this.dynamicWidth[a]*this.pixelRatio),h.uniforms.contourColor=this.dynamicColor[a],h.uniforms.contourTint=this.dynamicTint[a],h.uniforms.height=this.dynamicLevel[a],f.draw(r.LINES,this._dynamicCounts[a],this._dynamicOffsets[a]),o=0;o<3;++o)this.contourProject[o][a]&&(h.uniforms.model=u.projections[o],h.uniforms.clipBounds=u.clipBounds[o],f.draw(r.LINES,this._dynamicCounts[a],this._dynamicOffsets[a]));f.unbind()}}L.draw=function(t){return R.call(this,t,!1)},L.drawTransparent=function(t){return R.call(this,t,!0)};var F={model:k,view:k,projection:k,inverseModel:k,clipBounds:[[0,0,0],[0,0,0]],height:0,shape:[0,0],pickId:0,lowerBound:[0,0,0],upperBound:[0,0,0],zOffset:0,objectOffset:[0,0,0],permutation:[1,0,0,0,1,0,0,0,1],lightPosition:[0,0,0],eyePosition:[0,0,0]};function B(t,e){return Array.isArray(t)?[e(t[0]),e(t[1]),e(t[2])]:[e(t),e(t),e(t)]}function N(t){return Array.isArray(t)?3===t.length?[t[0],t[1],t[2],1]:[t[0],t[1],t[2],t[3]]:[0,0,0,1]}function j(t){if(Array.isArray(t)){if(Array.isArray(t))return[N(t[0]),N(t[1]),N(t[2])];var e=N(t);return[e.slice(),e.slice(),e.slice()]}}L.drawPick=function(t){t=t||{};var e=this.gl;e.disable(e.CULL_FACE);var r=F;r.model=t.model||k,r.view=t.view||k,r.projection=t.projection||k,r.shape=this._field[2].shape,r.pickId=this.pickId/255,r.lowerBound=this.bounds[0],r.upperBound=this.bounds[1],r.objectOffset=this.objectOffset,r.permutation=D;for(var n=0;n<2;++n)for(var a=r.clipBounds[n],i=0;i<3;++i)a[i]=Math.min(Math.max(this.clipBounds[n][i],-1e8),1e8);var o=O(r,this);if(o.showSurface){for(this._pickShader.bind(),this._pickShader.uniforms=r,this._vao.bind(),this._vao.draw(e.TRIANGLES,this._vertexCount),n=0;n<3;++n)this.surfaceProject[n]&&(this._pickShader.uniforms.model=o.projections[n],this._pickShader.uniforms.clipBounds=o.clipBounds[n],this._vao.draw(e.TRIANGLES,this._vertexCount));this._vao.unbind()}if(o.showContour){var s=this._contourPickShader;s.bind(),s.uniforms=r;var l=this._contourVAO;for(l.bind(),i=0;i<3;++i)for(e.lineWidth(this.contourWidth[i]*this.pixelRatio),s.uniforms.permutation=M[i],n=0;n<this.contourLevels[i].length;++n)this._contourCounts[i][n]&&(s.uniforms.height=this.contourLevels[i][n],l.draw(e.LINES,this._contourCounts[i][n],this._contourOffsets[i][n]));for(n=0;n<3;++n)for(s.uniforms.model=o.projections[n],s.uniforms.clipBounds=o.clipBounds[n],i=0;i<3;++i)if(this.contourProject[n][i]){s.uniforms.permutation=M[i],e.lineWidth(this.contourWidth[i]*this.pixelRatio);for(var c=0;c<this.contourLevels[i].length;++c)this._contourCounts[i][c]&&(s.uniforms.height=this.contourLevels[i][c],l.draw(e.LINES,this._contourCounts[i][c],this._contourOffsets[i][c]))}l.unbind()}},L.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=this._field[2].shape,r=this._pickResult,n=e[0]*(t.value[0]+(t.value[2]>>4)/16)/255,a=Math.floor(n),i=n-a,o=e[1]*(t.value[1]+(15&t.value[2])/16)/255,s=Math.floor(o),l=o-s;a+=1,s+=1;var c=r.position;c[0]=c[1]=c[2]=0;for(var u=0;u<2;++u)for(var h=u?i:1-i,f=0;f<2;++f)for(var p=a+u,d=s+f,v=h*(f?l:1-l),m=0;m<3;++m)c[m]+=this._field[m].get(p,d)*v;for(var y=this._pickResult.level,x=0;x<3;++x)if(y[x]=g.le(this.contourLevels[x],c[x]),y[x]<0)this.contourLevels[x].length>0&&(y[x]=0);else if(y[x]<this.contourLevels[x].length-1){var b=this.contourLevels[x][y[x]],_=this.contourLevels[x][y[x]+1];Math.abs(b-c[x])>Math.abs(_-c[x])&&(y[x]+=1)}for(r.index[0]=i<.5?a:a+1,r.index[1]=l<.5?s:s+1,r.uv[0]=n/e[0],r.uv[1]=o/e[1],m=0;m<3;++m)r.dataCoordinate[m]=this._field[m].get(r.index[0],r.index[1]);return r},L.padField=function(t,e){var r=e.shape.slice(),n=t.shape.slice();c.assign(t.lo(1,1).hi(r[0],r[1]),e),c.assign(t.lo(1).hi(r[0],1),e.hi(r[0],1)),c.assign(t.lo(1,n[1]-1).hi(r[0],1),e.lo(0,r[1]-1).hi(r[0],1)),c.assign(t.lo(0,1).hi(1,r[1]),e.hi(1)),c.assign(t.lo(n[0]-1,1).hi(1,r[1]),e.lo(r[0]-1)),t.set(0,0,e.get(0,0)),t.set(0,n[1]-1,e.get(0,r[1]-1)),t.set(n[0]-1,0,e.get(r[0]-1,0)),t.set(n[0]-1,n[1]-1,e.get(r[0]-1,r[1]-1))},L.update=function(t){t=t||{},this.objectOffset=t.objectOffset||this.objectOffset,this.dirty=!0,"contourWidth"in t&&(this.contourWidth=B(t.contourWidth,Number)),"showContour"in t&&(this.showContour=B(t.showContour,Boolean)),"showSurface"in t&&(this.showSurface=!!t.showSurface),"contourTint"in t&&(this.contourTint=B(t.contourTint,Boolean)),"contourColor"in t&&(this.contourColor=j(t.contourColor)),"contourProject"in t&&(this.contourProject=B(t.contourProject,function(t){return B(t,Boolean)})),"surfaceProject"in t&&(this.surfaceProject=t.surfaceProject),"dynamicColor"in t&&(this.dynamicColor=j(t.dynamicColor)),"dynamicTint"in t&&(this.dynamicTint=B(t.dynamicTint,Number)),"dynamicWidth"in t&&(this.dynamicWidth=B(t.dynamicWidth,Number)),"opacity"in t&&(this.opacity=t.opacity),"opacityscale"in t&&(this.opacityscale=t.opacityscale),"colorBounds"in t&&(this.colorBounds=t.colorBounds),"vertexColor"in t&&(this.vertexColor=t.vertexColor?1:0);var e=t.field||t.coords&&t.coords[2]||null,r=!1;if(e||(e=this._field[2].shape[0]||this._field[2].shape[2]?this._field[2].lo(1,1).hi(this._field[2].shape[0]-2,this._field[2].shape[1]-2):this._field[2].hi(0,0)),"field"in t||"coords"in t){var a=(e.shape[0]+2)*(e.shape[1]+2);a>this._field[2].data.length&&(s.freeFloat(this._field[2].data),this._field[2].data=s.mallocFloat(n.nextPow2(a))),this._field[2]=h(this._field[2].data,[e.shape[0]+2,e.shape[1]+2]),this.padField(this._field[2],e),this.shape=e.shape.slice();for(var i=this.shape,o=0;o<2;++o)this._field[2].size>this._field[o].data.length&&(s.freeFloat(this._field[o].data),this._field[o].data=s.mallocFloat(this._field[2].size)),this._field[o]=h(this._field[o].data,[i[0]+2,i[1]+2]);if(t.coords){var p=t.coords;if(!Array.isArray(p)||3!==p.length)throw new Error("gl-surface: invalid coordinates for x/y");for(o=0;o<2;++o){var d=p[o];for(b=0;b<2;++b)if(d.shape[b]!==i[b])throw new Error("gl-surface: coords have incorrect shape");this.padField(this._field[o],d)}}else if(t.ticks){var g=t.ticks;if(!Array.isArray(g)||2!==g.length)throw new Error("gl-surface: invalid ticks");for(o=0;o<2;++o){var m=g[o];if((Array.isArray(m)||m.length)&&(m=h(m)),m.shape[0]!==i[o])throw new Error("gl-surface: invalid tick length");var y=h(m.data,i);y.stride[o]=m.stride[0],y.stride[1^o]=0,this.padField(this._field[o],y)}}else{for(o=0;o<2;++o){var x=[0,0];x[o]=1,this._field[o]=h(this._field[o].data,[i[0]+2,i[1]+2],x,0)}this._field[0].set(0,0,0);for(var b=0;b<i[0];++b)this._field[0].set(b+1,0,b);for(this._field[0].set(i[0]+1,0,i[0]-1),this._field[1].set(0,0,0),b=0;b<i[1];++b)this._field[1].set(0,b+1,b);this._field[1].set(0,i[1]+1,i[1]-1)}var _=this._field,w=h(s.mallocFloat(3*_[2].size*2),[3,i[0]+2,i[1]+2,2]);for(o=0;o<3;++o)v(w.pick(o),_[o],"mirror");var k=h(s.mallocFloat(3*_[2].size),[i[0]+2,i[1]+2,3]);for(o=0;o<i[0]+2;++o)for(b=0;b<i[1]+2;++b){var M=w.get(0,o,b,0),A=w.get(0,o,b,1),E=w.get(1,o,b,0),L=w.get(1,o,b,1),C=w.get(2,o,b,0),P=w.get(2,o,b,1),O=E*P-L*C,z=C*A-P*M,I=M*L-A*E,D=Math.sqrt(O*O+z*z+I*I);D<1e-8?(D=Math.max(Math.abs(O),Math.abs(z),Math.abs(I)))<1e-8?(I=1,z=O=0,D=1):D=1/D:D=1/Math.sqrt(D),k.set(o,b,0,O*D),k.set(o,b,1,z*D),k.set(o,b,2,I*D)}s.free(w.data);var R=[1/0,1/0,1/0],F=[-1/0,-1/0,-1/0],N=1/0,V=-1/0,U=(i[0]-1)*(i[1]-1)*6,q=s.mallocFloat(n.nextPow2(10*U)),H=0,G=0;for(o=0;o<i[0]-1;++o)t:for(b=0;b<i[1]-1;++b){for(var Y=0;Y<2;++Y)for(var W=0;W<2;++W)for(var X=0;X<3;++X){var Z=this._field[X].get(1+o+Y,1+b+W);if(isNaN(Z)||!isFinite(Z))continue t}for(X=0;X<6;++X){var J=o+T[X][0],K=b+T[X][1],Q=this._field[0].get(J+1,K+1),$=this._field[1].get(J+1,K+1);Z=this._field[2].get(J+1,K+1),O=k.get(J+1,K+1,0),z=k.get(J+1,K+1,1),I=k.get(J+1,K+1,2),t.intensity&&(tt=t.intensity.get(J,K));var tt=t.intensity?t.intensity.get(J,K):Z+this.objectOffset[2];q[H++]=J,q[H++]=K,q[H++]=Q,q[H++]=$,q[H++]=Z,q[H++]=0,q[H++]=tt,q[H++]=O,q[H++]=z,q[H++]=I,R[0]=Math.min(R[0],Q+this.objectOffset[0]),R[1]=Math.min(R[1],$+this.objectOffset[1]),R[2]=Math.min(R[2],Z+this.objectOffset[2]),N=Math.min(N,tt),F[0]=Math.max(F[0],Q+this.objectOffset[0]),F[1]=Math.max(F[1],$+this.objectOffset[1]),F[2]=Math.max(F[2],Z+this.objectOffset[2]),V=Math.max(V,tt),G+=1}}for(t.intensityBounds&&(N=+t.intensityBounds[0],V=+t.intensityBounds[1]),o=6;o<H;o+=10)q[o]=(q[o]-N)/(V-N);this._vertexCount=G,this._coordinateBuffer.update(q.subarray(0,H)),s.freeFloat(q),s.free(k.data),this.bounds=[R,F],this.intensity=t.intensity||this._field[2],this.intensityBounds[0]===N&&this.intensityBounds[1]===V||(r=!0),this.intensityBounds=[N,V]}if("levels"in t){var et=t.levels;for(et=Array.isArray(et[0])?et.slice():[[],[],et],o=0;o<3;++o)et[o]=et[o].slice(),et[o].sort(function(t,e){return t-e});for(o=0;o<3;++o)for(b=0;b<et[o].length;++b)et[o][b]-=this.objectOffset[o];t:for(o=0;o<3;++o){if(et[o].length!==this.contourLevels[o].length){r=!0;break}for(b=0;b<et[o].length;++b)if(et[o][b]!==this.contourLevels[o][b]){r=!0;break t}}this.contourLevels=et}if(r){_=this._field,i=this.shape;for(var rt=[],nt=0;nt<3;++nt){var at=this.contourLevels[nt],it=[],ot=[],st=[0,0,0];for(o=0;o<at.length;++o){var lt=f(this._field[nt],at[o]);it.push(rt.length/5|0),G=0;t:for(b=0;b<lt.cells.length;++b){var ct=lt.cells[b];for(X=0;X<2;++X){var ut=lt.positions[ct[X]],ht=ut[0],ft=0|Math.floor(ht),pt=ht-ft,dt=ut[1],gt=0|Math.floor(dt),vt=dt-gt,mt=!1;e:for(var yt=0;yt<3;++yt){st[yt]=0;var xt=(nt+yt+1)%3;for(Y=0;Y<2;++Y){var bt=Y?pt:1-pt;for(J=0|Math.min(Math.max(ft+Y,0),i[0]),W=0;W<2;++W){var _t=W?vt:1-vt;if(K=0|Math.min(Math.max(gt+W,0),i[1]),Z=yt<2?this._field[xt].get(J,K):(this.intensity.get(J,K)-this.intensityBounds[0])/(this.intensityBounds[1]-this.intensityBounds[0]),!isFinite(Z)||isNaN(Z)){mt=!0;break e}var wt=bt*_t;st[yt]+=wt*Z}}}if(mt){if(X>0){for(var kt=0;kt<5;++kt)rt.pop();G-=1}continue t}rt.push(st[0],st[1],ut[0],ut[1],st[2]),G+=1}}ot.push(G)}this._contourOffsets[nt]=it,this._contourCounts[nt]=ot}var Tt=s.mallocFloat(rt.length);for(o=0;o<rt.length;++o)Tt[o]=rt[o];this._contourBuffer.update(Tt),s.freeFloat(Tt)}t.colormap&&this._colorMap.setPixels(function(t,e){var r=u([l({colormap:t,nshades:S,format:"rgba"}).map(function(t,r){var n=e?function(t,e){if(!e)return 1;if(!e.length)return 1;for(var r=0;r<e.length;++r){if(e.length<2)return 1;if(e[r][0]===t)return e[r][1];if(e[r][0]>t&&r>0){var n=(e[r][0]-t)/(e[r][0]-e[r-1][0]);return e[r][1]*(1-n)+n*e[r-1][1]}}return 1}(r/255,e):1;return[t[0],t[1],t[2],255*n]})]);return c.divseq(r,255),r}(t.colormap,this.opacityscale))},L.dispose=function(){this._shader.dispose(),this._vao.dispose(),this._coordinateBuffer.dispose(),this._colorMap.dispose(),this._contourBuffer.dispose(),this._contourVAO.dispose(),this._contourShader.dispose(),this._contourPickShader.dispose(),this._dynamicBuffer.dispose(),this._dynamicVAO.dispose();for(var t=0;t<3;++t)s.freeFloat(this._field[t].data)},L.highlight=function(t){var e,r;if(!t)return this._dynamicCounts=[0,0,0],this.dyanamicLevel=[NaN,NaN,NaN],void(this.highlightLevel=[-1,-1,-1]);for(e=0;e<3;++e)this.enableHighlight[e]?this.highlightLevel[e]=t.level[e]:this.highlightLevel[e]=-1;for(r=this.snapToData?t.dataCoordinate:t.position,e=0;e<3;++e)r[e]-=this.objectOffset[e];if(this.enableDynamic[0]&&r[0]!==this.dynamicLevel[0]||this.enableDynamic[1]&&r[1]!==this.dynamicLevel[1]||this.enableDynamic[2]&&r[2]!==this.dynamicLevel[2]){for(var n=0,a=this.shape,i=s.mallocFloat(12*a[0]*a[1]),o=0;o<3;++o)if(this.enableDynamic[o]){this.dynamicLevel[o]=r[o];var l=(o+1)%3,c=(o+2)%3,u=this._field[o],h=this._field[l],p=this._field[c],d=f(u,r[o]),g=d.cells,v=d.positions;for(this._dynamicOffsets[o]=n,e=0;e<g.length;++e)for(var m=g[e],y=0;y<2;++y){var x=v[m[y]],b=+x[0],_=0|b,w=0|Math.min(_+1,a[0]),k=b-_,T=1-k,M=+x[1],A=0|M,S=0|Math.min(A+1,a[1]),E=M-A,L=1-E,C=T*L,P=T*E,O=k*L,z=k*E,I=C*h.get(_,A)+P*h.get(_,S)+O*h.get(w,A)+z*h.get(w,S),D=C*p.get(_,A)+P*p.get(_,S)+O*p.get(w,A)+z*p.get(w,S);if(isNaN(I)||isNaN(D)){y&&(n-=1);break}i[2*n+0]=I,i[2*n+1]=D,n+=1}this._dynamicCounts[o]=n-this._dynamicOffsets[o]}else this.dynamicLevel[o]=NaN,this._dynamicCounts[o]=0;this._dynamicBuffer.update(i.subarray(0,2*n)),s.freeFloat(i)}}},{"./lib/shaders":316,"binary-search-bounds":317,"bit-twiddle":94,colormap:128,"gl-buffer":244,"gl-mat4/invert":268,"gl-mat4/multiply":270,"gl-texture2d":324,"gl-vao":329,ndarray:451,"ndarray-gradient":442,"ndarray-ops":445,"ndarray-pack":446,"surface-nets":529,"typedarray-pool":543}],319:[function(t,e,r){"use strict";var n=t("css-font"),a=t("pick-by-alias"),i=t("regl"),o=t("gl-util/context"),s=t("es6-weak-map"),l=t("color-normalize"),c=t("font-atlas"),u=t("typedarray-pool"),h=t("parse-rect"),f=t("is-plain-obj"),p=t("parse-unit"),d=t("to-px"),g=t("detect-kerning"),v=t("object-assign"),m=t("font-measure"),y=t("flatten-vertex-data"),x=t("bit-twiddle").nextPow2,b=new s,_=!1;if(document.body){var w=document.body.appendChild(document.createElement("div"));w.style.font="italic small-caps bold condensed 16px/2 cursive",getComputedStyle(w).fontStretch&&(_=!0),document.body.removeChild(w)}var k=function(t){!function(t){return"function"==typeof t&&t._gl&&t.prop&&t.texture&&t.buffer}(t)?this.gl=o(t):(t={regl:t},this.gl=t.regl._gl),this.shader=b.get(this.gl),this.shader?this.regl=this.shader.regl:this.regl=t.regl||i({gl:this.gl}),this.charBuffer=this.regl.buffer({type:"uint8",usage:"stream"}),this.sizeBuffer=this.regl.buffer({type:"float",usage:"stream"}),this.shader||(this.shader=this.createShader(),b.set(this.gl,this.shader)),this.batch=[],this.fontSize=[],this.font=[],this.fontAtlas=[],this.draw=this.shader.draw.bind(this),this.render=function(){this.regl._refresh(),this.draw(this.batch)},this.canvas=this.gl.canvas,this.update(f(t)?t:{})};k.prototype.createShader=function(){var t=this.regl,e=t({blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},stencil:{enable:!1},depth:{enable:!1},count:t.prop("count"),offset:t.prop("offset"),attributes:{charOffset:{offset:4,stride:8,buffer:t.this("sizeBuffer")},width:{offset:0,stride:8,buffer:t.this("sizeBuffer")},char:t.this("charBuffer"),position:t.this("position")},uniforms:{atlasSize:function(t,e){return[e.atlas.width,e.atlas.height]},atlasDim:function(t,e){return[e.atlas.cols,e.atlas.rows]},atlas:function(t,e){return e.atlas.texture},charStep:function(t,e){return e.atlas.step},em:function(t,e){return e.atlas.em},color:t.prop("color"),opacity:t.prop("opacity"),viewport:t.this("viewportArray"),scale:t.this("scale"),align:t.prop("align"),baseline:t.prop("baseline"),translate:t.this("translate"),positionOffset:t.prop("positionOffset")},primitive:"points",viewport:t.this("viewport"),vert:"\n\t\t\tprecision highp float;\n\t\t\tattribute float width, charOffset, char;\n\t\t\tattribute vec2 position;\n\t\t\tuniform float fontSize, charStep, em, align, baseline;\n\t\t\tuniform vec4 viewport;\n\t\t\tuniform vec4 color;\n\t\t\tuniform vec2 atlasSize, atlasDim, scale, translate, positionOffset;\n\t\t\tvarying vec2 charCoord, charId;\n\t\t\tvarying float charWidth;\n\t\t\tvarying vec4 fontColor;\n\t\t\tvoid main () {\n\t\t\t\t"+(k.normalViewport?"":"vec2 positionOffset = vec2(positionOffset.x,- positionOffset.y);")+"\n\n\t\t\t\tvec2 offset = floor(em * (vec2(align + charOffset, baseline)\n\t\t\t\t\t+ positionOffset))\n\t\t\t\t\t/ (viewport.zw * scale.xy);\n\n\t\t\t\tvec2 position = (position + translate) * scale;\n\t\t\t\tposition += offset * scale;\n\n\t\t\t\t"+(k.normalViewport?"position.y = 1. - position.y;":"")+"\n\n\t\t\t\tcharCoord = position * viewport.zw + viewport.xy;\n\n\t\t\t\tgl_Position = vec4(position * 2. - 1., 0, 1);\n\n\t\t\t\tgl_PointSize = charStep;\n\n\t\t\t\tcharId.x = mod(char, atlasDim.x);\n\t\t\t\tcharId.y = floor(char / atlasDim.x);\n\n\t\t\t\tcharWidth = width * em;\n\n\t\t\t\tfontColor = color / 255.;\n\t\t\t}",frag:"\n\t\t\tprecision highp float;\n\t\t\tuniform sampler2D atlas;\n\t\t\tuniform float fontSize, charStep, opacity;\n\t\t\tuniform vec2 atlasSize;\n\t\t\tuniform vec4 viewport;\n\t\t\tvarying vec4 fontColor;\n\t\t\tvarying vec2 charCoord, charId;\n\t\t\tvarying float charWidth;\n\n\t\t\tfloat lightness(vec4 color) {\n\t\t\t\treturn color.r * 0.299 + color.g * 0.587 + color.b * 0.114;\n\t\t\t}\n\n\t\t\tvoid main () {\n\t\t\t\tvec2 uv = gl_FragCoord.xy - charCoord + charStep * .5;\n\t\t\t\tfloat halfCharStep = floor(charStep * .5 + .5);\n\n\t\t\t\t// invert y and shift by 1px (FF expecially needs that)\n\t\t\t\tuv.y = charStep - uv.y;\n\n\t\t\t\t// ignore points outside of character bounding box\n\t\t\t\tfloat halfCharWidth = ceil(charWidth * .5);\n\t\t\t\tif (floor(uv.x) > halfCharStep + halfCharWidth ||\n\t\t\t\t\tfloor(uv.x) < halfCharStep - halfCharWidth) return;\n\n\t\t\t\tuv += charId * charStep;\n\t\t\t\tuv = uv / atlasSize;\n\n\t\t\t\tvec4 color = fontColor;\n\t\t\t\tvec4 mask = texture2D(atlas, uv);\n\n\t\t\t\tfloat maskY = lightness(mask);\n\t\t\t\t// float colorY = lightness(color);\n\t\t\t\tcolor.a *= maskY;\n\t\t\t\tcolor.a *= opacity;\n\n\t\t\t\t// color.a += .1;\n\n\t\t\t\t// antialiasing, see yiq color space y-channel formula\n\t\t\t\t// color.rgb += (1. - color.rgb) * (1. - mask.rgb);\n\n\t\t\t\tgl_FragColor = color;\n\t\t\t}"});return{regl:t,draw:e,atlas:{}}},k.prototype.update=function(t){var e=this;if("string"==typeof t)t={text:t};else if(!t)return;null!=(t=a(t,{position:"position positions coord coords coordinates",font:"font fontFace fontface typeface cssFont css-font family fontFamily",fontSize:"fontSize fontsize size font-size",text:"text texts chars characters value values symbols",align:"align alignment textAlign textbaseline",baseline:"baseline textBaseline textbaseline",direction:"dir direction textDirection",color:"color colour fill fill-color fillColor textColor textcolor",kerning:"kerning kern",range:"range dataBox",viewport:"vp viewport viewBox viewbox viewPort",opacity:"opacity alpha transparency visible visibility opaque",offset:"offset positionOffset padding shift indent indentation"},!0)).opacity&&(Array.isArray(t.opacity)?this.opacity=t.opacity.map(function(t){return parseFloat(t)}):this.opacity=parseFloat(t.opacity)),null!=t.viewport&&(this.viewport=h(t.viewport),k.normalViewport&&(this.viewport.y=this.canvas.height-this.viewport.y-this.viewport.height),this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null==this.viewport&&(this.viewport={x:0,y:0,width:this.gl.drawingBufferWidth,height:this.gl.drawingBufferHeight},this.viewportArray=[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null!=t.kerning&&(this.kerning=t.kerning),null!=t.offset&&("number"==typeof t.offset&&(t.offset=[t.offset,0]),this.positionOffset=y(t.offset)),t.direction&&(this.direction=t.direction),t.range&&(this.range=t.range,this.scale=[1/(t.range[2]-t.range[0]),1/(t.range[3]-t.range[1])],this.translate=[-t.range[0],-t.range[1]]),t.scale&&(this.scale=t.scale),t.translate&&(this.translate=t.translate),this.scale||(this.scale=[1/this.viewport.width,1/this.viewport.height]),this.translate||(this.translate=[0,0]),this.font.length||t.font||(t.font=k.baseFontSize+"px sans-serif");var r,i=!1,o=!1;if(t.font&&(Array.isArray(t.font)?t.font:[t.font]).forEach(function(t,r){if("string"==typeof t)try{t=n.parse(t)}catch(e){t=n.parse(k.baseFontSize+"px "+t)}else t=n.parse(n.stringify(t));var a=n.stringify({size:k.baseFontSize,family:t.family,stretch:_?t.stretch:void 0,variant:t.variant,weight:t.weight,style:t.style}),s=p(t.size),l=Math.round(s[0]*d(s[1]));if(l!==e.fontSize[r]&&(o=!0,e.fontSize[r]=l),!(e.font[r]&&a==e.font[r].baseString||(i=!0,e.font[r]=k.fonts[a],e.font[r]))){var c=t.family.join(", "),u=[t.style];t.style!=t.variant&&u.push(t.variant),t.variant!=t.weight&&u.push(t.weight),_&&t.weight!=t.stretch&&u.push(t.stretch),e.font[r]={baseString:a,family:c,weight:t.weight,stretch:t.stretch,style:t.style,variant:t.variant,width:{},kerning:{},metrics:m(c,{origin:"top",fontSize:k.baseFontSize,fontStyle:u.join(" ")})},k.fonts[a]=e.font[r]}}),(i||o)&&this.font.forEach(function(r,a){var i=n.stringify({size:e.fontSize[a],family:r.family,stretch:_?r.stretch:void 0,variant:r.variant,weight:r.weight,style:r.style});if(e.fontAtlas[a]=e.shader.atlas[i],!e.fontAtlas[a]){var o=r.metrics;e.shader.atlas[i]=e.fontAtlas[a]={fontString:i,step:2*Math.ceil(e.fontSize[a]*o.bottom*.5),em:e.fontSize[a],cols:0,rows:0,height:0,width:0,chars:[],ids:{},texture:e.regl.texture()}}null==t.text&&(t.text=e.text)}),"string"==typeof t.text&&t.position&&t.position.length>2){for(var s=Array(.5*t.position.length),f=0;f<s.length;f++)s[f]=t.text;t.text=s}if(null!=t.text||i){if(this.textOffsets=[0],Array.isArray(t.text)){this.count=t.text[0].length,this.counts=[this.count];for(var b=1;b<t.text.length;b++)this.textOffsets[b]=this.textOffsets[b-1]+t.text[b-1].length,this.count+=t.text[b].length,this.counts.push(t.text[b].length);this.text=t.text.join("")}else this.text=t.text,this.count=this.text.length,this.counts=[this.count];r=[],this.font.forEach(function(t,n){k.atlasContext.font=t.baseString;for(var a=e.fontAtlas[n],i=0;i<e.text.length;i++){var o=e.text.charAt(i);if(null==a.ids[o]&&(a.ids[o]=a.chars.length,a.chars.push(o),r.push(o)),null==t.width[o]&&(t.width[o]=k.atlasContext.measureText(o).width/k.baseFontSize,e.kerning)){var s=[];for(var l in t.width)s.push(l+o,o+l);v(t.kerning,g(t.family,{pairs:s}))}}})}if(t.position)if(t.position.length>2){for(var w=!t.position[0].length,T=u.mallocFloat(2*this.count),M=0,A=0;M<this.counts.length;M++){var S=this.counts[M];if(w)for(var E=0;E<S;E++)T[A++]=t.position[2*M],T[A++]=t.position[2*M+1];else for(var L=0;L<S;L++)T[A++]=t.position[M][0],T[A++]=t.position[M][1]}this.position.call?this.position({type:"float",data:T}):this.position=this.regl.buffer({type:"float",data:T}),u.freeFloat(T)}else this.position.destroy&&this.position.destroy(),this.position={constant:t.position};if(t.text||i){var C=u.mallocUint8(this.count),P=u.mallocFloat(2*this.count);this.textWidth=[];for(var O=0,z=0;O<this.counts.length;O++){for(var I=this.counts[O],D=this.font[O]||this.font[0],R=this.fontAtlas[O]||this.fontAtlas[0],F=0;F<I;F++){var B=this.text.charAt(z),N=this.text.charAt(z-1);if(C[z]=R.ids[B],P[2*z]=D.width[B],F){var j=P[2*z-2],V=P[2*z],U=P[2*z-1]+.5*j+.5*V;if(this.kerning){var q=D.kerning[N+B];q&&(U+=.001*q)}P[2*z+1]=U}else P[2*z+1]=.5*P[2*z];z++}this.textWidth.push(P.length?.5*P[2*z-2]+P[2*z-1]:0)}t.align||(t.align=this.align),this.charBuffer({data:C,type:"uint8",usage:"stream"}),this.sizeBuffer({data:P,type:"float",usage:"stream"}),u.freeUint8(C),u.freeFloat(P),r.length&&this.font.forEach(function(t,r){var n=e.fontAtlas[r],a=n.step,i=Math.floor(k.maxAtlasSize/a),o=Math.min(i,n.chars.length),s=Math.ceil(n.chars.length/o),l=x(o*a),u=x(s*a);n.width=l,n.height=u,n.rows=s,n.cols=o,n.em&&n.texture({data:c({canvas:k.atlasCanvas,font:n.fontString,chars:n.chars,shape:[l,u],step:[a,a]})})})}if(t.align&&(this.align=t.align,this.alignOffset=this.textWidth.map(function(t,r){var n=Array.isArray(e.align)?e.align.length>1?e.align[r]:e.align[0]:e.align;if("number"==typeof n)return n;switch(n){case"right":case"end":return-t;case"center":case"centre":case"middle":return.5*-t}return 0})),null==this.baseline&&null==t.baseline&&(t.baseline=0),null!=t.baseline&&(this.baseline=t.baseline,Array.isArray(this.baseline)||(this.baseline=[this.baseline]),this.baselineOffset=this.baseline.map(function(t,r){var n=(e.font[r]||e.font[0]).metrics,a=0;return a+=.5*n.bottom,a+="number"==typeof t?t-n.baseline:-n[t],k.normalViewport||(a*=-1),a})),null!=t.color)if(t.color||(t.color="transparent"),"string"!=typeof t.color&&isNaN(t.color)){var H;if("number"==typeof t.color[0]&&t.color.length>this.counts.length){var G=t.color.length;H=u.mallocUint8(G);for(var Y=(t.color.subarray||t.color.slice).bind(t.color),W=0;W<G;W+=4)H.set(l(Y(W,W+4),"uint8"),W)}else{var X=t.color.length;H=u.mallocUint8(4*X);for(var Z=0;Z<X;Z++)H.set(l(t.color[Z]||0,"uint8"),4*Z)}this.color=H}else this.color=l(t.color,"uint8");if(t.position||t.text||t.color||t.baseline||t.align||t.font||t.offset||t.opacity)if(this.color.length>4||this.baselineOffset.length>1||this.align&&this.align.length>1||this.fontAtlas.length>1||this.positionOffset.length>2){var J=Math.max(.5*this.position.length||0,.25*this.color.length||0,this.baselineOffset.length||0,this.alignOffset.length||0,this.font.length||0,this.opacity.length||0,.5*this.positionOffset.length||0);this.batch=Array(J);for(var K=0;K<this.batch.length;K++)this.batch[K]={count:this.counts.length>1?this.counts[K]:this.counts[0],offset:this.textOffsets.length>1?this.textOffsets[K]:this.textOffsets[0],color:this.color?this.color.length<=4?this.color:this.color.subarray(4*K,4*K+4):[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[K]:this.opacity,baseline:null!=this.baselineOffset[K]?this.baselineOffset[K]:this.baselineOffset[0],align:this.align?null!=this.alignOffset[K]?this.alignOffset[K]:this.alignOffset[0]:0,atlas:this.fontAtlas[K]||this.fontAtlas[0],positionOffset:this.positionOffset.length>2?this.positionOffset.subarray(2*K,2*K+2):this.positionOffset}}else this.count?this.batch=[{count:this.count,offset:0,color:this.color||[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[0]:this.opacity,baseline:this.baselineOffset[0],align:this.alignOffset?this.alignOffset[0]:0,atlas:this.fontAtlas[0],positionOffset:this.positionOffset}]:this.batch=[]},k.prototype.destroy=function(){},k.prototype.kerning=!0,k.prototype.position={constant:new Float32Array(2)},k.prototype.translate=null,k.prototype.scale=null,k.prototype.font=null,k.prototype.text="",k.prototype.positionOffset=[0,0],k.prototype.opacity=1,k.prototype.color=new Uint8Array([0,0,0,255]),k.prototype.alignOffset=[0,0],k.normalViewport=!1,k.maxAtlasSize=1024,k.atlasCanvas=document.createElement("canvas"),k.atlasContext=k.atlasCanvas.getContext("2d",{alpha:!1}),k.baseFontSize=64,k.fonts={},e.exports=k},{"bit-twiddle":94,"color-normalize":122,"css-font":141,"detect-kerning":168,"es6-weak-map":320,"flatten-vertex-data":230,"font-atlas":231,"font-measure":232,"gl-util/context":325,"is-plain-obj":423,"object-assign":455,"parse-rect":460,"parse-unit":462,"pick-by-alias":466,regl:500,"to-px":537,"typedarray-pool":543}],320:[function(t,e,r){"use strict";e.exports=t("./is-implemented")()?WeakMap:t("./polyfill")},{"./is-implemented":321,"./polyfill":323}],321:[function(t,e,r){"use strict";e.exports=function(){var t,e;if("function"!=typeof WeakMap)return!1;try{t=new WeakMap([[e={},"one"],[{},"two"],[{},"three"]])}catch(t){return!1}return"[object WeakMap]"===String(t)&&("function"==typeof t.set&&(t.set({},1)===t&&("function"==typeof t.delete&&("function"==typeof t.has&&"one"===t.get(e)))))}},{}],322:[function(t,e,r){"use strict";e.exports="function"==typeof WeakMap&&"[object WeakMap]"===Object.prototype.toString.call(new WeakMap)},{}],323:[function(t,e,r){"use strict";var n,a=t("es5-ext/object/is-value"),i=t("es5-ext/object/set-prototype-of"),o=t("es5-ext/object/valid-object"),s=t("es5-ext/object/valid-value"),l=t("es5-ext/string/random-uniq"),c=t("d"),u=t("es6-iterator/get"),h=t("es6-iterator/for-of"),f=t("es6-symbol").toStringTag,p=t("./is-native-implemented"),d=Array.isArray,g=Object.defineProperty,v=Object.prototype.hasOwnProperty,m=Object.getPrototypeOf;e.exports=n=function(){var t,e=arguments[0];if(!(this instanceof n))throw new TypeError("Constructor requires 'new'");return t=p&&i&&WeakMap!==n?i(new WeakMap,m(this)):this,a(e)&&(d(e)||(e=u(e))),g(t,"__weakMapData__",c("c","$weakMap$"+l())),e?(h(e,function(e){s(e),t.set(e[0],e[1])}),t):t},p&&(i&&i(n,WeakMap),n.prototype=Object.create(WeakMap.prototype,{constructor:c(n)})),Object.defineProperties(n.prototype,{delete:c(function(t){return!!v.call(o(t),this.__weakMapData__)&&(delete t[this.__weakMapData__],!0)}),get:c(function(t){if(v.call(o(t),this.__weakMapData__))return t[this.__weakMapData__]}),has:c(function(t){return v.call(o(t),this.__weakMapData__)}),set:c(function(t,e){return g(o(t),this.__weakMapData__,c("c",e)),this}),toString:c(function(){return"[object WeakMap]"})}),g(n.prototype,f,c("c","WeakMap"))},{"./is-native-implemented":322,d:153,"es5-ext/object/is-value":197,"es5-ext/object/set-prototype-of":203,"es5-ext/object/valid-object":207,"es5-ext/object/valid-value":208,"es5-ext/string/random-uniq":213,"es6-iterator/for-of":215,"es6-iterator/get":216,"es6-symbol":222}],324:[function(t,e,r){"use strict";var n=t("ndarray"),a=t("ndarray-ops"),i=t("typedarray-pool");e.exports=function(t){if(arguments.length<=1)throw new Error("gl-texture2d: Missing arguments for texture2d constructor");o||function(t){o=[t.LINEAR,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_NEAREST],s=[t.NEAREST,t.LINEAR,t.NEAREST_MIPMAP_NEAREST,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_LINEAR],l=[t.REPEAT,t.CLAMP_TO_EDGE,t.MIRRORED_REPEAT]}(t);if("number"==typeof arguments[1])return v(t,arguments[1],arguments[2],arguments[3]||t.RGBA,arguments[4]||t.UNSIGNED_BYTE);if(Array.isArray(arguments[1]))return v(t,0|arguments[1][0],0|arguments[1][1],arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if("object"==typeof arguments[1]){var e=arguments[1],r=c(e)?e:e.raw;if(r)return function(t,e,r,n,a,i){var o=g(t);return t.texImage2D(t.TEXTURE_2D,0,a,a,i,e),new f(t,o,r,n,a,i)}(t,r,0|e.width,0|e.height,arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if(e.shape&&e.data&&e.stride)return function(t,e){var r=e.dtype,o=e.shape.slice(),s=t.getParameter(t.MAX_TEXTURE_SIZE);if(o[0]<0||o[0]>s||o[1]<0||o[1]>s)throw new Error("gl-texture2d: Invalid texture size");var l=d(o,e.stride.slice()),c=0;"float32"===r?c=t.FLOAT:"float64"===r?(c=t.FLOAT,l=!1,r="float32"):"uint8"===r?c=t.UNSIGNED_BYTE:(c=t.UNSIGNED_BYTE,l=!1,r="uint8");var h,p,v=0;if(2===o.length)v=t.LUMINANCE,o=[o[0],o[1],1],e=n(e.data,o,[e.stride[0],e.stride[1],1],e.offset);else{if(3!==o.length)throw new Error("gl-texture2d: Invalid shape for texture");if(1===o[2])v=t.ALPHA;else if(2===o[2])v=t.LUMINANCE_ALPHA;else if(3===o[2])v=t.RGB;else{if(4!==o[2])throw new Error("gl-texture2d: Invalid shape for pixel coords");v=t.RGBA}}c!==t.FLOAT||t.getExtension("OES_texture_float")||(c=t.UNSIGNED_BYTE,l=!1);var m=e.size;if(l)h=0===e.offset&&e.data.length===m?e.data:e.data.subarray(e.offset,e.offset+m);else{var y=[o[2],o[2]*o[0],1];p=i.malloc(m,r);var x=n(p,o,y,0);"float32"!==r&&"float64"!==r||c!==t.UNSIGNED_BYTE?a.assign(x,e):u(x,e),h=p.subarray(0,m)}var b=g(t);t.texImage2D(t.TEXTURE_2D,0,v,o[0],o[1],0,v,c,h),l||i.free(p);return new f(t,b,o[0],o[1],v,c)}(t,e)}throw new Error("gl-texture2d: Invalid arguments for texture2d constructor")};var o=null,s=null,l=null;function c(t){return"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement||"undefined"!=typeof ImageData&&t instanceof ImageData}var u=function(t,e){a.muls(t,e,255)};function h(t,e,r){var n=t.gl,a=n.getParameter(n.MAX_TEXTURE_SIZE);if(e<0||e>a||r<0||r>a)throw new Error("gl-texture2d: Invalid texture size");return t._shape=[e,r],t.bind(),n.texImage2D(n.TEXTURE_2D,0,t.format,e,r,0,t.format,t.type,null),t._mipLevels=[0],t}function f(t,e,r,n,a,i){this.gl=t,this.handle=e,this.format=a,this.type=i,this._shape=[r,n],this._mipLevels=[0],this._magFilter=t.NEAREST,this._minFilter=t.NEAREST,this._wrapS=t.CLAMP_TO_EDGE,this._wrapT=t.CLAMP_TO_EDGE,this._anisoSamples=1;var o=this,s=[this._wrapS,this._wrapT];Object.defineProperties(s,[{get:function(){return o._wrapS},set:function(t){return o.wrapS=t}},{get:function(){return o._wrapT},set:function(t){return o.wrapT=t}}]),this._wrapVector=s;var l=[this._shape[0],this._shape[1]];Object.defineProperties(l,[{get:function(){return o._shape[0]},set:function(t){return o.width=t}},{get:function(){return o._shape[1]},set:function(t){return o.height=t}}]),this._shapeVector=l}var p=f.prototype;function d(t,e){return 3===t.length?1===e[2]&&e[1]===t[0]*t[2]&&e[0]===t[2]:1===e[0]&&e[1]===t[0]}function g(t){var e=t.createTexture();return t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),e}function v(t,e,r,n,a){var i=t.getParameter(t.MAX_TEXTURE_SIZE);if(e<0||e>i||r<0||r>i)throw new Error("gl-texture2d: Invalid texture shape");if(a===t.FLOAT&&!t.getExtension("OES_texture_float"))throw new Error("gl-texture2d: Floating point textures not supported on this platform");var o=g(t);return t.texImage2D(t.TEXTURE_2D,0,n,e,r,0,n,a,null),new f(t,o,e,r,n,a)}Object.defineProperties(p,{minFilter:{get:function(){return this._minFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&o.indexOf(t)>=0&&(e.getExtension("OES_texture_float_linear")||(t=e.NEAREST)),s.indexOf(t)<0)throw new Error("gl-texture2d: Unknown filter mode "+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t),this._minFilter=t}},magFilter:{get:function(){return this._magFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&o.indexOf(t)>=0&&(e.getExtension("OES_texture_float_linear")||(t=e.NEAREST)),s.indexOf(t)<0)throw new Error("gl-texture2d: Unknown filter mode "+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t),this._magFilter=t}},mipSamples:{get:function(){return this._anisoSamples},set:function(t){var e=this._anisoSamples;if(this._anisoSamples=0|Math.max(t,1),e!==this._anisoSamples){var r=this.gl.getExtension("EXT_texture_filter_anisotropic");r&&this.gl.texParameterf(this.gl.TEXTURE_2D,r.TEXTURE_MAX_ANISOTROPY_EXT,this._anisoSamples)}return this._anisoSamples}},wrapS:{get:function(){return this._wrapS},set:function(t){if(this.bind(),l.indexOf(t)<0)throw new Error("gl-texture2d: Unknown wrap mode "+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,t),this._wrapS=t}},wrapT:{get:function(){return this._wrapT},set:function(t){if(this.bind(),l.indexOf(t)<0)throw new Error("gl-texture2d: Unknown wrap mode "+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,t),this._wrapT=t}},wrap:{get:function(){return this._wrapVector},set:function(t){if(Array.isArray(t)||(t=[t,t]),2!==t.length)throw new Error("gl-texture2d: Must specify wrap mode for rows and columns");for(var e=0;e<2;++e)if(l.indexOf(t[e])<0)throw new Error("gl-texture2d: Unknown wrap mode "+t);this._wrapS=t[0],this._wrapT=t[1];var r=this.gl;return this.bind(),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,this._wrapS),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,this._wrapT),t}},shape:{get:function(){return this._shapeVector},set:function(t){if(Array.isArray(t)){if(2!==t.length)throw new Error("gl-texture2d: Invalid texture shape")}else t=[0|t,0|t];return h(this,0|t[0],0|t[1]),[0|t[0],0|t[1]]}},width:{get:function(){return this._shape[0]},set:function(t){return h(this,t|=0,this._shape[1]),t}},height:{get:function(){return this._shape[1]},set:function(t){return t|=0,h(this,this._shape[0],t),t}}}),p.bind=function(t){var e=this.gl;return void 0!==t&&e.activeTexture(e.TEXTURE0+(0|t)),e.bindTexture(e.TEXTURE_2D,this.handle),void 0!==t?0|t:e.getParameter(e.ACTIVE_TEXTURE)-e.TEXTURE0},p.dispose=function(){this.gl.deleteTexture(this.handle)},p.generateMipmap=function(){this.bind(),this.gl.generateMipmap(this.gl.TEXTURE_2D);for(var t=Math.min(this._shape[0],this._shape[1]),e=0;t>0;++e,t>>>=1)this._mipLevels.indexOf(e)<0&&this._mipLevels.push(e)},p.setPixels=function(t,e,r,o){var s=this.gl;this.bind(),Array.isArray(e)?(o=r,r=0|e[1],e=0|e[0]):(e=e||0,r=r||0),o=o||0;var l=c(t)?t:t.raw;if(l){this._mipLevels.indexOf(o)<0?(s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,this.type,l),this._mipLevels.push(o)):s.texSubImage2D(s.TEXTURE_2D,o,e,r,this.format,this.type,l)}else{if(!(t.shape&&t.stride&&t.data))throw new Error("gl-texture2d: Unsupported data type");if(t.shape.length<2||e+t.shape[1]>this._shape[1]>>>o||r+t.shape[0]>this._shape[0]>>>o||e<0||r<0)throw new Error("gl-texture2d: Texture dimensions are out of bounds");!function(t,e,r,o,s,l,c,h){var f=h.dtype,p=h.shape.slice();if(p.length<2||p.length>3)throw new Error("gl-texture2d: Invalid ndarray, must be 2d or 3d");var g=0,v=0,m=d(p,h.stride.slice());"float32"===f?g=t.FLOAT:"float64"===f?(g=t.FLOAT,m=!1,f="float32"):"uint8"===f?g=t.UNSIGNED_BYTE:(g=t.UNSIGNED_BYTE,m=!1,f="uint8");if(2===p.length)v=t.LUMINANCE,p=[p[0],p[1],1],h=n(h.data,p,[h.stride[0],h.stride[1],1],h.offset);else{if(3!==p.length)throw new Error("gl-texture2d: Invalid shape for texture");if(1===p[2])v=t.ALPHA;else if(2===p[2])v=t.LUMINANCE_ALPHA;else if(3===p[2])v=t.RGB;else{if(4!==p[2])throw new Error("gl-texture2d: Invalid shape for pixel coords");v=t.RGBA}p[2]}v!==t.LUMINANCE&&v!==t.ALPHA||s!==t.LUMINANCE&&s!==t.ALPHA||(v=s);if(v!==s)throw new Error("gl-texture2d: Incompatible texture format for setPixels");var y=h.size,x=c.indexOf(o)<0;x&&c.push(o);if(g===l&&m)0===h.offset&&h.data.length===y?x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,h.data):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,h.data):x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,h.data.subarray(h.offset,h.offset+y)):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,h.data.subarray(h.offset,h.offset+y));else{var b;b=l===t.FLOAT?i.mallocFloat32(y):i.mallocUint8(y);var _=n(b,p,[p[2],p[2]*p[0],1]);g===t.FLOAT&&l===t.UNSIGNED_BYTE?u(_,h):a.assign(_,h),x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,b.subarray(0,y)):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,b.subarray(0,y)),l===t.FLOAT?i.freeFloat32(b):i.freeUint8(b)}}(s,e,r,o,this.format,this.type,this._mipLevels,t)}}},{ndarray:451,"ndarray-ops":445,"typedarray-pool":543}],325:[function(t,e,r){(function(r){"use strict";var n=t("pick-by-alias");function a(t){if(t.container)if(t.container==document.body)document.body.style.width||(t.canvas.width=t.width||t.pixelRatio*r.innerWidth),document.body.style.height||(t.canvas.height=t.height||t.pixelRatio*r.innerHeight);else{var e=t.container.getBoundingClientRect();t.canvas.width=t.width||e.right-e.left,t.canvas.height=t.height||e.bottom-e.top}}function i(t){return"function"==typeof t.getContext&&"width"in t&&"height"in t}function o(){var t=document.createElement("canvas");return t.style.position="absolute",t.style.top=0,t.style.left=0,t}e.exports=function(t){var e;if(t?"string"==typeof t&&(t={container:t}):t={},i(t)?t={container:t}:t="string"==typeof(e=t).nodeName&&"function"==typeof e.appendChild&&"function"==typeof e.getBoundingClientRect?{container:t}:function(t){return"function"==typeof t.drawArrays||"function"==typeof t.drawElements}(t)?{gl:t}:n(t,{container:"container target element el canvas holder parent parentNode wrapper use ref root node",gl:"gl context webgl glContext",attrs:"attributes attrs contextAttributes",pixelRatio:"pixelRatio pxRatio px ratio pxratio pixelratio",width:"w width",height:"h height"},!0),t.pixelRatio||(t.pixelRatio=r.pixelRatio||1),t.gl)return t.gl;if(t.canvas&&(t.container=t.canvas.parentNode),t.container){if("string"==typeof t.container){var s=document.querySelector(t.container);if(!s)throw Error("Element "+t.container+" is not found");t.container=s}i(t.container)?(t.canvas=t.container,t.container=t.canvas.parentNode):t.canvas||(t.canvas=o(),t.container.appendChild(t.canvas),a(t))}else if(!t.canvas){if("undefined"==typeof document)throw Error("Not DOM environment. Use headless-gl.");t.container=document.body||document.documentElement,t.canvas=o(),t.container.appendChild(t.canvas),a(t)}if(!t.gl)try{t.gl=t.canvas.getContext("webgl",t.attrs)}catch(e){try{t.gl=t.canvas.getContext("experimental-webgl",t.attrs)}catch(e){t.gl=t.canvas.getContext("webgl-experimental",t.attrs)}}return t.gl}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"pick-by-alias":466}],326:[function(t,e,r){"use strict";e.exports=function(t,e,r){e?e.bind():t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null);var n=0|t.getParameter(t.MAX_VERTEX_ATTRIBS);if(r){if(r.length>n)throw new Error("gl-vao: Too many vertex attributes");for(var a=0;a<r.length;++a){var i=r[a];if(i.buffer){var o=i.buffer,s=i.size||4,l=i.type||t.FLOAT,c=!!i.normalized,u=i.stride||0,h=i.offset||0;o.bind(),t.enableVertexAttribArray(a),t.vertexAttribPointer(a,s,l,c,u,h)}else{if("number"==typeof i)t.vertexAttrib1f(a,i);else if(1===i.length)t.vertexAttrib1f(a,i[0]);else if(2===i.length)t.vertexAttrib2f(a,i[0],i[1]);else if(3===i.length)t.vertexAttrib3f(a,i[0],i[1],i[2]);else{if(4!==i.length)throw new Error("gl-vao: Invalid vertex attribute");t.vertexAttrib4f(a,i[0],i[1],i[2],i[3])}t.disableVertexAttribArray(a)}}for(;a<n;++a)t.disableVertexAttribArray(a)}else for(t.bindBuffer(t.ARRAY_BUFFER,null),a=0;a<n;++a)t.disableVertexAttribArray(a)}},{}],327:[function(t,e,r){"use strict";var n=t("./do-bind.js");function a(t){this.gl=t,this._elements=null,this._attributes=null,this._elementsType=t.UNSIGNED_SHORT}a.prototype.bind=function(){n(this.gl,this._elements,this._attributes)},a.prototype.update=function(t,e,r){this._elements=e,this._attributes=t,this._elementsType=r||this.gl.UNSIGNED_SHORT},a.prototype.dispose=function(){},a.prototype.unbind=function(){},a.prototype.draw=function(t,e,r){r=r||0;var n=this.gl;this._elements?n.drawElements(t,e,this._elementsType,r):n.drawArrays(t,r,e)},e.exports=function(t){return new a(t)}},{"./do-bind.js":326}],328:[function(t,e,r){"use strict";var n=t("./do-bind.js");function a(t,e,r,n,a,i){this.location=t,this.dimension=e,this.a=r,this.b=n,this.c=a,this.d=i}function i(t,e,r){this.gl=t,this._ext=e,this.handle=r,this._attribs=[],this._useElements=!1,this._elementsType=t.UNSIGNED_SHORT}a.prototype.bind=function(t){switch(this.dimension){case 1:t.vertexAttrib1f(this.location,this.a);break;case 2:t.vertexAttrib2f(this.location,this.a,this.b);break;case 3:t.vertexAttrib3f(this.location,this.a,this.b,this.c);break;case 4:t.vertexAttrib4f(this.location,this.a,this.b,this.c,this.d)}},i.prototype.bind=function(){this._ext.bindVertexArrayOES(this.handle);for(var t=0;t<this._attribs.length;++t)this._attribs[t].bind(this.gl)},i.prototype.unbind=function(){this._ext.bindVertexArrayOES(null)},i.prototype.dispose=function(){this._ext.deleteVertexArrayOES(this.handle)},i.prototype.update=function(t,e,r){if(this.bind(),n(this.gl,e,t),this.unbind(),this._attribs.length=0,t)for(var i=0;i<t.length;++i){var o=t[i];"number"==typeof o?this._attribs.push(new a(i,1,o)):Array.isArray(o)&&this._attribs.push(new a(i,o.length,o[0],o[1],o[2],o[3]))}this._useElements=!!e,this._elementsType=r||this.gl.UNSIGNED_SHORT},i.prototype.draw=function(t,e,r){r=r||0;var n=this.gl;this._useElements?n.drawElements(t,e,this._elementsType,r):n.drawArrays(t,r,e)},e.exports=function(t,e){return new i(t,e,e.createVertexArrayOES())}},{"./do-bind.js":326}],329:[function(t,e,r){"use strict";var n=t("./lib/vao-native.js"),a=t("./lib/vao-emulated.js");function i(t){this.bindVertexArrayOES=t.bindVertexArray.bind(t),this.createVertexArrayOES=t.createVertexArray.bind(t),this.deleteVertexArrayOES=t.deleteVertexArray.bind(t)}e.exports=function(t,e,r,o){var s,l=t.createVertexArray?new i(t):t.getExtension("OES_vertex_array_object");return(s=l?n(t,l):a(t)).update(e,r,o),s}},{"./lib/vao-emulated.js":327,"./lib/vao-native.js":328}],330:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t}},{}],331:[function(t,e,r){e.exports=function(t,e){var r=n(t[0],t[1],t[2]),o=n(e[0],e[1],e[2]);a(r,r),a(o,o);var s=i(r,o);return s>1?0:Math.acos(s)};var n=t("./fromValues"),a=t("./normalize"),i=t("./dot")},{"./dot":341,"./fromValues":347,"./normalize":358}],332:[function(t,e,r){e.exports=function(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t}},{}],333:[function(t,e,r){e.exports=function(t){var e=new Float32Array(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e}},{}],334:[function(t,e,r){e.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}},{}],335:[function(t,e,r){e.exports=function(){var t=new Float32Array(3);return t[0]=0,t[1]=0,t[2]=0,t}},{}],336:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=r[0],s=r[1],l=r[2];return t[0]=a*l-i*s,t[1]=i*o-n*l,t[2]=n*s-a*o,t}},{}],337:[function(t,e,r){e.exports=t("./distance")},{"./distance":338}],338:[function(t,e,r){e.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],a=e[2]-t[2];return Math.sqrt(r*r+n*n+a*a)}},{}],339:[function(t,e,r){e.exports=t("./divide")},{"./divide":340}],340:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t}},{}],341:[function(t,e,r){e.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}},{}],342:[function(t,e,r){e.exports=1e-6},{}],343:[function(t,e,r){e.exports=function(t,e){var r=t[0],a=t[1],i=t[2],o=e[0],s=e[1],l=e[2];return Math.abs(r-o)<=n*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(a-s)<=n*Math.max(1,Math.abs(a),Math.abs(s))&&Math.abs(i-l)<=n*Math.max(1,Math.abs(i),Math.abs(l))};var n=t("./epsilon")},{"./epsilon":342}],344:[function(t,e,r){e.exports=function(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]}},{}],345:[function(t,e,r){e.exports=function(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t}},{}],346:[function(t,e,r){e.exports=function(t,e,r,a,i,o){var s,l;e||(e=3);r||(r=0);l=a?Math.min(a*e+r,t.length):t.length;for(s=r;s<l;s+=e)n[0]=t[s],n[1]=t[s+1],n[2]=t[s+2],i(n,n,o),t[s]=n[0],t[s+1]=n[1],t[s+2]=n[2];return t};var n=t("./create")()},{"./create":335}],347:[function(t,e,r){e.exports=function(t,e,r){var n=new Float32Array(3);return n[0]=t,n[1]=e,n[2]=r,n}},{}],348:[function(t,e,r){e.exports={EPSILON:t("./epsilon"),create:t("./create"),clone:t("./clone"),angle:t("./angle"),fromValues:t("./fromValues"),copy:t("./copy"),set:t("./set"),equals:t("./equals"),exactEquals:t("./exactEquals"),add:t("./add"),subtract:t("./subtract"),sub:t("./sub"),multiply:t("./multiply"),mul:t("./mul"),divide:t("./divide"),div:t("./div"),min:t("./min"),max:t("./max"),floor:t("./floor"),ceil:t("./ceil"),round:t("./round"),scale:t("./scale"),scaleAndAdd:t("./scaleAndAdd"),distance:t("./distance"),dist:t("./dist"),squaredDistance:t("./squaredDistance"),sqrDist:t("./sqrDist"),length:t("./length"),len:t("./len"),squaredLength:t("./squaredLength"),sqrLen:t("./sqrLen"),negate:t("./negate"),inverse:t("./inverse"),normalize:t("./normalize"),dot:t("./dot"),cross:t("./cross"),lerp:t("./lerp"),random:t("./random"),transformMat4:t("./transformMat4"),transformMat3:t("./transformMat3"),transformQuat:t("./transformQuat"),rotateX:t("./rotateX"),rotateY:t("./rotateY"),rotateZ:t("./rotateZ"),forEach:t("./forEach")}},{"./add":330,"./angle":331,"./ceil":332,"./clone":333,"./copy":334,"./create":335,"./cross":336,"./dist":337,"./distance":338,"./div":339,"./divide":340,"./dot":341,"./epsilon":342,"./equals":343,"./exactEquals":344,"./floor":345,"./forEach":346,"./fromValues":347,"./inverse":349,"./len":350,"./length":351,"./lerp":352,"./max":353,"./min":354,"./mul":355,"./multiply":356,"./negate":357,"./normalize":358,"./random":359,"./rotateX":360,"./rotateY":361,"./rotateZ":362,"./round":363,"./scale":364,"./scaleAndAdd":365,"./set":366,"./sqrDist":367,"./sqrLen":368,"./squaredDistance":369,"./squaredLength":370,"./sub":371,"./subtract":372,"./transformMat3":373,"./transformMat4":374,"./transformQuat":375}],349:[function(t,e,r){e.exports=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t}},{}],350:[function(t,e,r){e.exports=t("./length")},{"./length":351}],351:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}},{}],352:[function(t,e,r){e.exports=function(t,e,r,n){var a=e[0],i=e[1],o=e[2];return t[0]=a+n*(r[0]-a),t[1]=i+n*(r[1]-i),t[2]=o+n*(r[2]-o),t}},{}],353:[function(t,e,r){e.exports=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t}},{}],354:[function(t,e,r){e.exports=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t}},{}],355:[function(t,e,r){e.exports=t("./multiply")},{"./multiply":356}],356:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t}},{}],357:[function(t,e,r){e.exports=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t}},{}],358:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],a=e[2],i=r*r+n*n+a*a;i>0&&(i=1/Math.sqrt(i),t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i);return t}},{}],359:[function(t,e,r){e.exports=function(t,e){e=e||1;var r=2*Math.random()*Math.PI,n=2*Math.random()-1,a=Math.sqrt(1-n*n)*e;return t[0]=Math.cos(r)*a,t[1]=Math.sin(r)*a,t[2]=n*e,t}},{}],360:[function(t,e,r){e.exports=function(t,e,r,n){var a=r[1],i=r[2],o=e[1]-a,s=e[2]-i,l=Math.sin(n),c=Math.cos(n);return t[0]=e[0],t[1]=a+o*c-s*l,t[2]=i+o*l+s*c,t}},{}],361:[function(t,e,r){e.exports=function(t,e,r,n){var a=r[0],i=r[2],o=e[0]-a,s=e[2]-i,l=Math.sin(n),c=Math.cos(n);return t[0]=a+s*l+o*c,t[1]=e[1],t[2]=i+s*c-o*l,t}},{}],362:[function(t,e,r){e.exports=function(t,e,r,n){var a=r[0],i=r[1],o=e[0]-a,s=e[1]-i,l=Math.sin(n),c=Math.cos(n);return t[0]=a+o*c-s*l,t[1]=i+o*l+s*c,t[2]=e[2],t}},{}],363:[function(t,e,r){e.exports=function(t,e){return t[0]=Math.round(e[0]),t[1]=Math.round(e[1]),t[2]=Math.round(e[2]),t}},{}],364:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t}},{}],365:[function(t,e,r){e.exports=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t}},{}],366:[function(t,e,r){e.exports=function(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t}},{}],367:[function(t,e,r){e.exports=t("./squaredDistance")},{"./squaredDistance":369}],368:[function(t,e,r){e.exports=t("./squaredLength")},{"./squaredLength":370}],369:[function(t,e,r){e.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],a=e[2]-t[2];return r*r+n*n+a*a}},{}],370:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n}},{}],371:[function(t,e,r){e.exports=t("./subtract")},{"./subtract":372}],372:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t}},{}],373:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],a=e[1],i=e[2];return t[0]=n*r[0]+a*r[3]+i*r[6],t[1]=n*r[1]+a*r[4]+i*r[7],t[2]=n*r[2]+a*r[5]+i*r[8],t}},{}],374:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=r[3]*n+r[7]*a+r[11]*i+r[15];return o=o||1,t[0]=(r[0]*n+r[4]*a+r[8]*i+r[12])/o,t[1]=(r[1]*n+r[5]*a+r[9]*i+r[13])/o,t[2]=(r[2]*n+r[6]*a+r[10]*i+r[14])/o,t}},{}],375:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=r[0],s=r[1],l=r[2],c=r[3],u=c*n+s*i-l*a,h=c*a+l*n-o*i,f=c*i+o*a-s*n,p=-o*n-s*a-l*i;return t[0]=u*c+p*-o+h*-l-f*-s,t[1]=h*c+p*-s+f*-o-u*-l,t[2]=f*c+p*-l+u*-s-h*-o,t}},{}],376:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t}},{}],377:[function(t,e,r){e.exports=function(t){var e=new Float32Array(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e}},{}],378:[function(t,e,r){e.exports=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t}},{}],379:[function(t,e,r){e.exports=function(){var t=new Float32Array(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t}},{}],380:[function(t,e,r){e.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],a=e[2]-t[2],i=e[3]-t[3];return Math.sqrt(r*r+n*n+a*a+i*i)}},{}],381:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t[3]=e[3]/r[3],t}},{}],382:[function(t,e,r){e.exports=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}},{}],383:[function(t,e,r){e.exports=function(t,e,r,n){var a=new Float32Array(4);return a[0]=t,a[1]=e,a[2]=r,a[3]=n,a}},{}],384:[function(t,e,r){e.exports={create:t("./create"),clone:t("./clone"),fromValues:t("./fromValues"),copy:t("./copy"),set:t("./set"),add:t("./add"),subtract:t("./subtract"),multiply:t("./multiply"),divide:t("./divide"),min:t("./min"),max:t("./max"),scale:t("./scale"),scaleAndAdd:t("./scaleAndAdd"),distance:t("./distance"),squaredDistance:t("./squaredDistance"),length:t("./length"),squaredLength:t("./squaredLength"),negate:t("./negate"),inverse:t("./inverse"),normalize:t("./normalize"),dot:t("./dot"),lerp:t("./lerp"),random:t("./random"),transformMat4:t("./transformMat4"),transformQuat:t("./transformQuat")}},{"./add":376,"./clone":377,"./copy":378,"./create":379,"./distance":380,"./divide":381,"./dot":382,"./fromValues":383,"./inverse":385,"./length":386,"./lerp":387,"./max":388,"./min":389,"./multiply":390,"./negate":391,"./normalize":392,"./random":393,"./scale":394,"./scaleAndAdd":395,"./set":396,"./squaredDistance":397,"./squaredLength":398,"./subtract":399,"./transformMat4":400,"./transformQuat":401}],385:[function(t,e,r){e.exports=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t[3]=1/e[3],t}},{}],386:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2],a=t[3];return Math.sqrt(e*e+r*r+n*n+a*a)}},{}],387:[function(t,e,r){e.exports=function(t,e,r,n){var a=e[0],i=e[1],o=e[2],s=e[3];return t[0]=a+n*(r[0]-a),t[1]=i+n*(r[1]-i),t[2]=o+n*(r[2]-o),t[3]=s+n*(r[3]-s),t}},{}],388:[function(t,e,r){e.exports=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t[3]=Math.max(e[3],r[3]),t}},{}],389:[function(t,e,r){e.exports=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t[3]=Math.min(e[3],r[3]),t}},{}],390:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t[3]=e[3]*r[3],t}},{}],391:[function(t,e,r){e.exports=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t}},{}],392:[function(t,e,r){e.exports=function(t,e){var r=e[0],n=e[1],a=e[2],i=e[3],o=r*r+n*n+a*a+i*i;o>0&&(o=1/Math.sqrt(o),t[0]=r*o,t[1]=n*o,t[2]=a*o,t[3]=i*o);return t}},{}],393:[function(t,e,r){var n=t("./normalize"),a=t("./scale");e.exports=function(t,e){return e=e||1,t[0]=Math.random(),t[1]=Math.random(),t[2]=Math.random(),t[3]=Math.random(),n(t,t),a(t,t,e),t}},{"./normalize":392,"./scale":394}],394:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t}},{}],395:[function(t,e,r){e.exports=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t}},{}],396:[function(t,e,r){e.exports=function(t,e,r,n,a){return t[0]=e,t[1]=r,t[2]=n,t[3]=a,t}},{}],397:[function(t,e,r){e.exports=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],a=e[2]-t[2],i=e[3]-t[3];return r*r+n*n+a*a+i*i}},{}],398:[function(t,e,r){e.exports=function(t){var e=t[0],r=t[1],n=t[2],a=t[3];return e*e+r*r+n*n+a*a}},{}],399:[function(t,e,r){e.exports=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t}},{}],400:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=e[3];return t[0]=r[0]*n+r[4]*a+r[8]*i+r[12]*o,t[1]=r[1]*n+r[5]*a+r[9]*i+r[13]*o,t[2]=r[2]*n+r[6]*a+r[10]*i+r[14]*o,t[3]=r[3]*n+r[7]*a+r[11]*i+r[15]*o,t}},{}],401:[function(t,e,r){e.exports=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=r[0],s=r[1],l=r[2],c=r[3],u=c*n+s*i-l*a,h=c*a+l*n-o*i,f=c*i+o*a-s*n,p=-o*n-s*a-l*i;return t[0]=u*c+p*-o+h*-l-f*-s,t[1]=h*c+p*-s+f*-o-u*-l,t[2]=f*c+p*-l+u*-s-h*-o,t[3]=e[3],t}},{}],402:[function(t,e,r){var n=t("glsl-tokenizer"),a=t("atob-lite");e.exports=function(t){for(var e=Array.isArray(t)?t:n(t),r=0;r<e.length;r++){var i=e[r];if("preprocessor"===i.type){var o=i.data.match(/\#define\s+SHADER_NAME(_B64)?\s+(.+)$/);if(o&&o[2]){var s=o[1],l=o[2];return(s?a(l):l).trim()}}}}},{"atob-lite":74,"glsl-tokenizer":409}],403:[function(t,e,r){e.exports=function(t){var e,r,k,T=0,M=0,A=l,S=[],E=[],L=1,C=0,P=0,O=!1,z=!1,I="",D=i,R=n;"300 es"===(t=t||{}).version&&(D=s,R=o);return function(t){return E=[],null!==t?function(t){var r;T=0,k=(I+=t).length;for(;e=I[T],T<k;){switch(r=T,A){case u:T=V();break;case h:case f:T=j();break;case p:T=U();break;case d:T=G();break;case _:T=H();break;case g:T=Y();break;case c:T=W();break;case x:T=N();break;case l:T=B()}if(r!==T)switch(I[r]){case"\n":C=0,++L;break;default:++C}}return M+=T,I=I.slice(T),E}(t.replace?t.replace(/\r\n/g,"\n"):t):function(t){S.length&&F(S.join(""));return A=b,F("(eof)"),E}()};function F(t){t.length&&E.push({type:w[A],data:t,position:P,line:L,column:C})}function B(){return S=S.length?[]:S,"/"===r&&"*"===e?(P=M+T-1,A=u,r=e,T+1):"/"===r&&"/"===e?(P=M+T-1,A=h,r=e,T+1):"#"===e?(A=f,P=M+T,T):/\s/.test(e)?(A=x,P=M+T,T):(O=/\d/.test(e),z=/[^\w_]/.test(e),P=M+T,A=O?d:z?p:c,T)}function N(){return/[^\s]/g.test(e)?(F(S.join("")),A=l,T):(S.push(e),r=e,T+1)}function j(){return"\r"!==e&&"\n"!==e||"\\"===r?(S.push(e),r=e,T+1):(F(S.join("")),A=l,T)}function V(){return"/"===e&&"*"===r?(S.push(e),F(S.join("")),A=l,T+1):(S.push(e),r=e,T+1)}function U(){if("."===r&&/\d/.test(e))return A=g,T;if("/"===r&&"*"===e)return A=u,T;if("/"===r&&"/"===e)return A=h,T;if("."===e&&S.length){for(;q(S););return A=g,T}if(";"===e||")"===e||"("===e){if(S.length)for(;q(S););return F(e),A=l,T+1}var t=2===S.length&&"="!==e;if(/[\w_\d\s]/.test(e)||t){for(;q(S););return A=l,T}return S.push(e),r=e,T+1}function q(t){for(var e,r,n=0;;){if(e=a.indexOf(t.slice(0,t.length+n).join("")),r=a[e],-1===e){if(n--+t.length>0)continue;r=t.slice(0,1).join("")}return F(r),P+=r.length,(S=S.slice(r.length)).length}}function H(){return/[^a-fA-F0-9]/.test(e)?(F(S.join("")),A=l,T):(S.push(e),r=e,T+1)}function G(){return"."===e?(S.push(e),A=g,r=e,T+1):/[eE]/.test(e)?(S.push(e),A=g,r=e,T+1):"x"===e&&1===S.length&&"0"===S[0]?(A=_,S.push(e),r=e,T+1):/[^\d]/.test(e)?(F(S.join("")),A=l,T):(S.push(e),r=e,T+1)}function Y(){return"f"===e&&(S.push(e),r=e,T+=1),/[eE]/.test(e)?(S.push(e),r=e,T+1):"-"===e&&/[eE]/.test(r)?(S.push(e),r=e,T+1):/[^\d]/.test(e)?(F(S.join("")),A=l,T):(S.push(e),r=e,T+1)}function W(){if(/[^\d\w_]/.test(e)){var t=S.join("");return A=R.indexOf(t)>-1?y:D.indexOf(t)>-1?m:v,F(S.join("")),A=l,T}return S.push(e),r=e,T+1}};var n=t("./lib/literals"),a=t("./lib/operators"),i=t("./lib/builtins"),o=t("./lib/literals-300es"),s=t("./lib/builtins-300es"),l=999,c=9999,u=0,h=1,f=2,p=3,d=4,g=5,v=6,m=7,y=8,x=9,b=10,_=11,w=["block-comment","line-comment","preprocessor","operator","integer","float","ident","builtin","keyword","whitespace","eof","integer"]},{"./lib/builtins":405,"./lib/builtins-300es":404,"./lib/literals":407,"./lib/literals-300es":406,"./lib/operators":408}],404:[function(t,e,r){var n=t("./builtins");n=n.slice().filter(function(t){return!/^(gl\_|texture)/.test(t)}),e.exports=n.concat(["gl_VertexID","gl_InstanceID","gl_Position","gl_PointSize","gl_FragCoord","gl_FrontFacing","gl_FragDepth","gl_PointCoord","gl_MaxVertexAttribs","gl_MaxVertexUniformVectors","gl_MaxVertexOutputVectors","gl_MaxFragmentInputVectors","gl_MaxVertexTextureImageUnits","gl_MaxCombinedTextureImageUnits","gl_MaxTextureImageUnits","gl_MaxFragmentUniformVectors","gl_MaxDrawBuffers","gl_MinProgramTexelOffset","gl_MaxProgramTexelOffset","gl_DepthRangeParameters","gl_DepthRange","trunc","round","roundEven","isnan","isinf","floatBitsToInt","floatBitsToUint","intBitsToFloat","uintBitsToFloat","packSnorm2x16","unpackSnorm2x16","packUnorm2x16","unpackUnorm2x16","packHalf2x16","unpackHalf2x16","outerProduct","transpose","determinant","inverse","texture","textureSize","textureProj","textureLod","textureOffset","texelFetch","texelFetchOffset","textureProjOffset","textureLodOffset","textureProjLod","textureProjLodOffset","textureGrad","textureGradOffset","textureProjGrad","textureProjGradOffset"])},{"./builtins":405}],405:[function(t,e,r){e.exports=["abs","acos","all","any","asin","atan","ceil","clamp","cos","cross","dFdx","dFdy","degrees","distance","dot","equal","exp","exp2","faceforward","floor","fract","gl_BackColor","gl_BackLightModelProduct","gl_BackLightProduct","gl_BackMaterial","gl_BackSecondaryColor","gl_ClipPlane","gl_ClipVertex","gl_Color","gl_DepthRange","gl_DepthRangeParameters","gl_EyePlaneQ","gl_EyePlaneR","gl_EyePlaneS","gl_EyePlaneT","gl_Fog","gl_FogCoord","gl_FogFragCoord","gl_FogParameters","gl_FragColor","gl_FragCoord","gl_FragData","gl_FragDepth","gl_FragDepthEXT","gl_FrontColor","gl_FrontFacing","gl_FrontLightModelProduct","gl_FrontLightProduct","gl_FrontMaterial","gl_FrontSecondaryColor","gl_LightModel","gl_LightModelParameters","gl_LightModelProducts","gl_LightProducts","gl_LightSource","gl_LightSourceParameters","gl_MaterialParameters","gl_MaxClipPlanes","gl_MaxCombinedTextureImageUnits","gl_MaxDrawBuffers","gl_MaxFragmentUniformComponents","gl_MaxLights","gl_MaxTextureCoords","gl_MaxTextureImageUnits","gl_MaxTextureUnits","gl_MaxVaryingFloats","gl_MaxVertexAttribs","gl_MaxVertexTextureImageUnits","gl_MaxVertexUniformComponents","gl_ModelViewMatrix","gl_ModelViewMatrixInverse","gl_ModelViewMatrixInverseTranspose","gl_ModelViewMatrixTranspose","gl_ModelViewProjectionMatrix","gl_ModelViewProjectionMatrixInverse","gl_ModelViewProjectionMatrixInverseTranspose","gl_ModelViewProjectionMatrixTranspose","gl_MultiTexCoord0","gl_MultiTexCoord1","gl_MultiTexCoord2","gl_MultiTexCoord3","gl_MultiTexCoord4","gl_MultiTexCoord5","gl_MultiTexCoord6","gl_MultiTexCoord7","gl_Normal","gl_NormalMatrix","gl_NormalScale","gl_ObjectPlaneQ","gl_ObjectPlaneR","gl_ObjectPlaneS","gl_ObjectPlaneT","gl_Point","gl_PointCoord","gl_PointParameters","gl_PointSize","gl_Position","gl_ProjectionMatrix","gl_ProjectionMatrixInverse","gl_ProjectionMatrixInverseTranspose","gl_ProjectionMatrixTranspose","gl_SecondaryColor","gl_TexCoord","gl_TextureEnvColor","gl_TextureMatrix","gl_TextureMatrixInverse","gl_TextureMatrixInverseTranspose","gl_TextureMatrixTranspose","gl_Vertex","greaterThan","greaterThanEqual","inversesqrt","length","lessThan","lessThanEqual","log","log2","matrixCompMult","max","min","mix","mod","normalize","not","notEqual","pow","radians","reflect","refract","sign","sin","smoothstep","sqrt","step","tan","texture2D","texture2DLod","texture2DProj","texture2DProjLod","textureCube","textureCubeLod","texture2DLodEXT","texture2DProjLodEXT","textureCubeLodEXT","texture2DGradEXT","texture2DProjGradEXT","textureCubeGradEXT"]},{}],406:[function(t,e,r){var n=t("./literals");e.exports=n.slice().concat(["layout","centroid","smooth","case","mat2x2","mat2x3","mat2x4","mat3x2","mat3x3","mat3x4","mat4x2","mat4x3","mat4x4","uint","uvec2","uvec3","uvec4","samplerCubeShadow","sampler2DArray","sampler2DArrayShadow","isampler2D","isampler3D","isamplerCube","isampler2DArray","usampler2D","usampler3D","usamplerCube","usampler2DArray","coherent","restrict","readonly","writeonly","resource","atomic_uint","noperspective","patch","sample","subroutine","common","partition","active","filter","image1D","image2D","image3D","imageCube","iimage1D","iimage2D","iimage3D","iimageCube","uimage1D","uimage2D","uimage3D","uimageCube","image1DArray","image2DArray","iimage1DArray","iimage2DArray","uimage1DArray","uimage2DArray","image1DShadow","image2DShadow","image1DArrayShadow","image2DArrayShadow","imageBuffer","iimageBuffer","uimageBuffer","sampler1DArray","sampler1DArrayShadow","isampler1D","isampler1DArray","usampler1D","usampler1DArray","isampler2DRect","usampler2DRect","samplerBuffer","isamplerBuffer","usamplerBuffer","sampler2DMS","isampler2DMS","usampler2DMS","sampler2DMSArray","isampler2DMSArray","usampler2DMSArray"])},{"./literals":407}],407:[function(t,e,r){e.exports=["precision","highp","mediump","lowp","attribute","const","uniform","varying","break","continue","do","for","while","if","else","in","out","inout","float","int","void","bool","true","false","discard","return","mat2","mat3","mat4","vec2","vec3","vec4","ivec2","ivec3","ivec4","bvec2","bvec3","bvec4","sampler1D","sampler2D","sampler3D","samplerCube","sampler1DShadow","sampler2DShadow","struct","asm","class","union","enum","typedef","template","this","packed","goto","switch","default","inline","noinline","volatile","public","static","extern","external","interface","long","short","double","half","fixed","unsigned","input","output","hvec2","hvec3","hvec4","dvec2","dvec3","dvec4","fvec2","fvec3","fvec4","sampler2DRect","sampler3DRect","sampler2DRectShadow","sizeof","cast","namespace","using"]},{}],408:[function(t,e,r){e.exports=["<<=",">>=","++","--","<<",">>","<=",">=","==","!=","&&","||","+=","-=","*=","/=","%=","&=","^^","^=","|=","(",")","[","]",".","!","~","*","/","%","+","-","<",">","&","^","|","?",":","=",",",";","{","}"]},{}],409:[function(t,e,r){var n=t("./index");e.exports=function(t,e){var r=n(e),a=[];return a=(a=a.concat(r(t))).concat(r(null))}},{"./index":403}],410:[function(t,e,r){e.exports=function(t){"string"==typeof t&&(t=[t]);for(var e=[].slice.call(arguments,1),r=[],n=0;n<t.length-1;n++)r.push(t[n],e[n]||"");return r.push(t[n]),r.join("")}},{}],411:[function(t,e,r){(function(r){"use strict";var n,a=t("is-browser");n="function"==typeof r.matchMedia?!r.matchMedia("(hover: none)").matches:a,e.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"is-browser":418}],412:[function(t,e,r){"use strict";var n=t("is-browser");e.exports=n&&function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("test",null,e),window.removeEventListener("test",null,e)}catch(e){t=!1}return t}()},{"is-browser":418}],413:[function(t,e,r){r.read=function(t,e,r,n,a){var i,o,s=8*a-n-1,l=(1<<s)-1,c=l>>1,u=-7,h=r?a-1:0,f=r?-1:1,p=t[e+h];for(h+=f,i=p&(1<<-u)-1,p>>=-u,u+=s;u>0;i=256*i+t[e+h],h+=f,u-=8);for(o=i&(1<<-u)-1,i>>=-u,u+=n;u>0;o=256*o+t[e+h],h+=f,u-=8);if(0===i)i=1-c;else{if(i===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),i-=c}return(p?-1:1)*o*Math.pow(2,i-n)},r.write=function(t,e,r,n,a,i){var o,s,l,c=8*i-a-1,u=(1<<c)-1,h=u>>1,f=23===a?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:i-1,d=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=u):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+h>=1?f/l:f*Math.pow(2,1-h))*l>=2&&(o++,l/=2),o+h>=u?(s=0,o=u):o+h>=1?(s=(e*l-1)*Math.pow(2,a),o+=h):(s=e*Math.pow(2,h-1)*Math.pow(2,a),o=0));a>=8;t[r+p]=255&s,p+=d,s/=256,a-=8);for(o=o<<a|s,c+=a;c>0;t[r+p]=255&o,p+=d,o/=256,c-=8);t[r+p-d]|=128*g}},{}],414:[function(t,e,r){"use strict";e.exports=function(t,e){var r=t.length;if(0===r)throw new Error("Must have at least d+1 points");var a=t[0].length;if(r<=a)throw new Error("Must input at least d+1 points");var o=t.slice(0,a+1),s=n.apply(void 0,o);if(0===s)throw new Error("Input not in general position");for(var l=new Array(a+1),u=0;u<=a;++u)l[u]=u;s<0&&(l[0]=1,l[1]=0);for(var h=new i(l,new Array(a+1),!1),f=h.adjacent,p=new Array(a+2),u=0;u<=a;++u){for(var d=l.slice(),g=0;g<=a;++g)g===u&&(d[g]=-1);var v=d[0];d[0]=d[1],d[1]=v;var m=new i(d,new Array(a+1),!0);f[u]=m,p[u]=m}p[a+1]=h;for(var u=0;u<=a;++u)for(var d=f[u].vertices,y=f[u].adjacent,g=0;g<=a;++g){var x=d[g];if(x<0)y[g]=h;else for(var b=0;b<=a;++b)f[b].vertices.indexOf(x)<0&&(y[g]=f[b])}for(var _=new c(a,o,p),w=!!e,u=a+1;u<r;++u)_.insert(t[u],w);return _.boundary()};var n=t("robust-orientation"),a=t("simplicial-complex").compareCells;function i(t,e,r){this.vertices=t,this.adjacent=e,this.boundary=r,this.lastVisited=-1}function o(t,e,r){this.vertices=t,this.cell=e,this.index=r}function s(t,e){return a(t.vertices,e.vertices)}i.prototype.flip=function(){var t=this.vertices[0];this.vertices[0]=this.vertices[1],this.vertices[1]=t;var e=this.adjacent[0];this.adjacent[0]=this.adjacent[1],this.adjacent[1]=e};var l=[];function c(t,e,r){this.dimension=t,this.vertices=e,this.simplices=r,this.interior=r.filter(function(t){return!t.boundary}),this.tuple=new Array(t+1);for(var a=0;a<=t;++a)this.tuple[a]=this.vertices[a];var i=l[t];i||(i=l[t]=function(t){for(var e=["function orient(){var tuple=this.tuple;return test("],r=0;r<=t;++r)r>0&&e.push(","),e.push("tuple[",r,"]");e.push(")}return orient");var a=new Function("test",e.join("")),i=n[t+1];return i||(i=n),a(i)}(t)),this.orient=i}var u=c.prototype;u.handleBoundaryDegeneracy=function(t,e){var r=this.dimension,n=this.vertices.length-1,a=this.tuple,i=this.vertices,o=[t];for(t.lastVisited=-n;o.length>0;){(t=o.pop()).vertices;for(var s=t.adjacent,l=0;l<=r;++l){var c=s[l];if(c.boundary&&!(c.lastVisited<=-n)){for(var u=c.vertices,h=0;h<=r;++h){var f=u[h];a[h]=f<0?e:i[f]}var p=this.orient();if(p>0)return c;c.lastVisited=-n,0===p&&o.push(c)}}}return null},u.walk=function(t,e){var r=this.vertices.length-1,n=this.dimension,a=this.vertices,i=this.tuple,o=e?this.interior.length*Math.random()|0:this.interior.length-1,s=this.interior[o];t:for(;!s.boundary;){for(var l=s.vertices,c=s.adjacent,u=0;u<=n;++u)i[u]=a[l[u]];s.lastVisited=r;for(u=0;u<=n;++u){var h=c[u];if(!(h.lastVisited>=r)){var f=i[u];i[u]=t;var p=this.orient();if(i[u]=f,p<0){s=h;continue t}h.boundary?h.lastVisited=-r:h.lastVisited=r}}return}return s},u.addPeaks=function(t,e){var r=this.vertices.length-1,n=this.dimension,a=this.vertices,l=this.tuple,c=this.interior,u=this.simplices,h=[e];e.lastVisited=r,e.vertices[e.vertices.indexOf(-1)]=r,e.boundary=!1,c.push(e);for(var f=[];h.length>0;){var p=(e=h.pop()).vertices,d=e.adjacent,g=p.indexOf(r);if(!(g<0))for(var v=0;v<=n;++v)if(v!==g){var m=d[v];if(m.boundary&&!(m.lastVisited>=r)){var y=m.vertices;if(m.lastVisited!==-r){for(var x=0,b=0;b<=n;++b)y[b]<0?(x=b,l[b]=t):l[b]=a[y[b]];if(this.orient()>0){y[x]=r,m.boundary=!1,c.push(m),h.push(m),m.lastVisited=r;continue}m.lastVisited=-r}var _=m.adjacent,w=p.slice(),k=d.slice(),T=new i(w,k,!0);u.push(T);var M=_.indexOf(e);if(!(M<0)){_[M]=T,k[g]=m,w[v]=-1,k[v]=e,d[v]=T,T.flip();for(b=0;b<=n;++b){var A=w[b];if(!(A<0||A===r)){for(var S=new Array(n-1),E=0,L=0;L<=n;++L){var C=w[L];C<0||L===b||(S[E++]=C)}f.push(new o(S,T,b))}}}}}}f.sort(s);for(v=0;v+1<f.length;v+=2){var P=f[v],O=f[v+1],z=P.index,I=O.index;z<0||I<0||(P.cell.adjacent[P.index]=O.cell,O.cell.adjacent[O.index]=P.cell)}},u.insert=function(t,e){var r=this.vertices;r.push(t);var n=this.walk(t,e);if(n){for(var a=this.dimension,i=this.tuple,o=0;o<=a;++o){var s=n.vertices[o];i[o]=s<0?t:r[s]}var l=this.orient(i);l<0||(0!==l||(n=this.handleBoundaryDegeneracy(n,t)))&&this.addPeaks(t,n)}},u.boundary=function(){for(var t=this.dimension,e=[],r=this.simplices,n=r.length,a=0;a<n;++a){var i=r[a];if(i.boundary){for(var o=new Array(t),s=i.vertices,l=0,c=0,u=0;u<=t;++u)s[u]>=0?o[l++]=s[u]:c=1&u;if(c===(1&t)){var h=o[0];o[0]=o[1],o[1]=h}e.push(o)}}return e}},{"robust-orientation":508,"simplicial-complex":518}],415:[function(t,e,r){"use strict";var n=t("binary-search-bounds"),a=0,i=1;function o(t,e,r,n,a){this.mid=t,this.left=e,this.right=r,this.leftPoints=n,this.rightPoints=a,this.count=(e?e.count:0)+(r?r.count:0)+n.length}e.exports=function(t){if(!t||0===t.length)return new x(null);return new x(y(t))};var s=o.prototype;function l(t,e){t.mid=e.mid,t.left=e.left,t.right=e.right,t.leftPoints=e.leftPoints,t.rightPoints=e.rightPoints,t.count=e.count}function c(t,e){var r=y(e);t.mid=r.mid,t.left=r.left,t.right=r.right,t.leftPoints=r.leftPoints,t.rightPoints=r.rightPoints,t.count=r.count}function u(t,e){var r=t.intervals([]);r.push(e),c(t,r)}function h(t,e){var r=t.intervals([]),n=r.indexOf(e);return n<0?a:(r.splice(n,1),c(t,r),i)}function f(t,e,r){for(var n=0;n<t.length&&t[n][0]<=e;++n){var a=r(t[n]);if(a)return a}}function p(t,e,r){for(var n=t.length-1;n>=0&&t[n][1]>=e;--n){var a=r(t[n]);if(a)return a}}function d(t,e){for(var r=0;r<t.length;++r){var n=e(t[r]);if(n)return n}}function g(t,e){return t-e}function v(t,e){var r=t[0]-e[0];return r||t[1]-e[1]}function m(t,e){var r=t[1]-e[1];return r||t[0]-e[0]}function y(t){if(0===t.length)return null;for(var e=[],r=0;r<t.length;++r)e.push(t[r][0],t[r][1]);e.sort(g);var n=e[e.length>>1],a=[],i=[],s=[];for(r=0;r<t.length;++r){var l=t[r];l[1]<n?a.push(l):n<l[0]?i.push(l):s.push(l)}var c=s,u=s.slice();return c.sort(v),u.sort(m),new o(n,y(a),y(i),c,u)}function x(t){this.root=t}s.intervals=function(t){return t.push.apply(t,this.leftPoints),this.left&&this.left.intervals(t),this.right&&this.right.intervals(t),t},s.insert=function(t){var e=this.count-this.leftPoints.length;if(this.count+=1,t[1]<this.mid)this.left?4*(this.left.count+1)>3*(e+1)?u(this,t):this.left.insert(t):this.left=y([t]);else if(t[0]>this.mid)this.right?4*(this.right.count+1)>3*(e+1)?u(this,t):this.right.insert(t):this.right=y([t]);else{var r=n.ge(this.leftPoints,t,v),a=n.ge(this.rightPoints,t,m);this.leftPoints.splice(r,0,t),this.rightPoints.splice(a,0,t)}},s.remove=function(t){var e=this.count-this.leftPoints;if(t[1]<this.mid)return this.left?4*(this.right?this.right.count:0)>3*(e-1)?h(this,t):2===(c=this.left.remove(t))?(this.left=null,this.count-=1,i):(c===i&&(this.count-=1),c):a;if(t[0]>this.mid)return this.right?4*(this.left?this.left.count:0)>3*(e-1)?h(this,t):2===(c=this.right.remove(t))?(this.right=null,this.count-=1,i):(c===i&&(this.count-=1),c):a;if(1===this.count)return this.leftPoints[0]===t?2:a;if(1===this.leftPoints.length&&this.leftPoints[0]===t){if(this.left&&this.right){for(var r=this,o=this.left;o.right;)r=o,o=o.right;if(r===this)o.right=this.right;else{var s=this.left,c=this.right;r.count-=o.count,r.right=o.left,o.left=s,o.right=c}l(this,o),this.count=(this.left?this.left.count:0)+(this.right?this.right.count:0)+this.leftPoints.length}else this.left?l(this,this.left):l(this,this.right);return i}for(s=n.ge(this.leftPoints,t,v);s<this.leftPoints.length&&this.leftPoints[s][0]===t[0];++s)if(this.leftPoints[s]===t){this.count-=1,this.leftPoints.splice(s,1);for(c=n.ge(this.rightPoints,t,m);c<this.rightPoints.length&&this.rightPoints[c][1]===t[1];++c)if(this.rightPoints[c]===t)return this.rightPoints.splice(c,1),i}return a},s.queryPoint=function(t,e){if(t<this.mid){if(this.left)if(r=this.left.queryPoint(t,e))return r;return f(this.leftPoints,t,e)}if(t>this.mid){var r;if(this.right)if(r=this.right.queryPoint(t,e))return r;return p(this.rightPoints,t,e)}return d(this.leftPoints,e)},s.queryInterval=function(t,e,r){var n;if(t<this.mid&&this.left&&(n=this.left.queryInterval(t,e,r)))return n;if(e>this.mid&&this.right&&(n=this.right.queryInterval(t,e,r)))return n;return e<this.mid?f(this.leftPoints,e,r):t>this.mid?p(this.rightPoints,t,r):d(this.leftPoints,r)};var b=x.prototype;b.insert=function(t){this.root?this.root.insert(t):this.root=new o(t[0],null,null,[t],[t])},b.remove=function(t){if(this.root){var e=this.root.remove(t);return 2===e&&(this.root=null),e!==a}return!1},b.queryPoint=function(t,e){if(this.root)return this.root.queryPoint(t,e)},b.queryInterval=function(t,e,r){if(t<=e&&this.root)return this.root.queryInterval(t,e,r)},Object.defineProperty(b,"count",{get:function(){return this.root?this.root.count:0}}),Object.defineProperty(b,"intervals",{get:function(){return this.root?this.root.intervals([]):[]}})},{"binary-search-bounds":93}],416:[function(t,e,r){"use strict";e.exports=function(t,e){e=e||new Array(t.length);for(var r=0;r<t.length;++r)e[t[r]]=r;return e}},{}],417:[function(t,e,r){"use strict";e.exports=function(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=r;return e}},{}],418:[function(t,e,r){e.exports=!0},{}],419:[function(t,e,r){function n(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}e.exports=function(t){return null!=t&&(n(t)||function(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&n(t.slice(0,0))}(t)||!!t._isBuffer)}},{}],420:[function(t,e,r){"use strict";e.exports="undefined"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\//.test(navigator.appVersion))},{}],421:[function(t,e,r){"use strict";e.exports=i,e.exports.isMobile=i,e.exports.default=i;var n=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series[46]0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,a=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series[46]0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|android|ipad|playbook|silk/i;function i(t){t||(t={});var e=t.ua;if(e||"undefined"==typeof navigator||(e=navigator.userAgent),e&&e.headers&&"string"==typeof e.headers["user-agent"]&&(e=e.headers["user-agent"]),"string"!=typeof e)return!1;var r=t.tablet?a.test(e):n.test(e);return!r&&t.tablet&&t.featureDetect&&navigator&&navigator.maxTouchPoints>1&&-1!==e.indexOf("Macintosh")&&-1!==e.indexOf("Safari")&&(r=!0),r}},{}],422:[function(t,e,r){"use strict";e.exports=function(t){var e=typeof t;return null!==t&&("object"===e||"function"===e)}},{}],423:[function(t,e,r){"use strict";var n=Object.prototype.toString;e.exports=function(t){var e;return"[object Object]"===n.call(t)&&(null===(e=Object.getPrototypeOf(t))||e===Object.getPrototypeOf({}))}},{}],424:[function(t,e,r){"use strict";e.exports=function(t){for(var e,r=t.length,n=0;n<r;n++)if(((e=t.charCodeAt(n))<9||e>13)&&32!==e&&133!==e&&160!==e&&5760!==e&&6158!==e&&(e<8192||e>8205)&&8232!==e&&8233!==e&&8239!==e&&8287!==e&&8288!==e&&12288!==e&&65279!==e)return!1;return!0}},{}],425:[function(t,e,r){"use strict";e.exports=function(t){return"string"==typeof t&&(t=t.trim(),!!(/^[mzlhvcsqta]\s*[-+.0-9][^mlhvzcsqta]+/i.test(t)&&/[\dz]$/i.test(t)&&t.length>4))}},{}],426:[function(t,e,r){e.exports=function(t,e,r){return t*(1-r)+e*r}},{}],427:[function(t,e,r){var n,a;n=this,a=function(){"use strict";var t,e,r;function n(n,a){if(t)if(e){var i="var sharedChunk = {}; ("+t+")(sharedChunk); ("+e+")(sharedChunk);",o={};t(o),(r=a(o)).workerUrl=window.URL.createObjectURL(new Blob([i],{type:"text/javascript"}))}else e=a;else t=a}return n(0,function(t){function e(t,e){return t(e={exports:{}},e.exports),e.exports}var r=n;function n(t,e,r,n){this.cx=3*t,this.bx=3*(r-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(n-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=n,this.p2x=r,this.p2y=n}n.prototype.sampleCurveX=function(t){return((this.ax*t+this.bx)*t+this.cx)*t},n.prototype.sampleCurveY=function(t){return((this.ay*t+this.by)*t+this.cy)*t},n.prototype.sampleCurveDerivativeX=function(t){return(3*this.ax*t+2*this.bx)*t+this.cx},n.prototype.solveCurveX=function(t,e){var r,n,a,i,o;for(void 0===e&&(e=1e-6),a=t,o=0;o<8;o++){if(i=this.sampleCurveX(a)-t,Math.abs(i)<e)return a;var s=this.sampleCurveDerivativeX(a);if(Math.abs(s)<1e-6)break;a-=i/s}if((a=t)<(r=0))return r;if(a>(n=1))return n;for(;r<n;){if(i=this.sampleCurveX(a),Math.abs(i-t)<e)return a;t>i?r=a:n=a,a=.5*(n-r)+r}return a},n.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var a=i;function i(t,e){this.x=t,this.y=e}function o(t,e){if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return!1;for(var r=0;r<t.length;r++)if(!o(t[r],e[r]))return!1;return!0}if("object"==typeof t&&null!==t&&null!==e){if("object"!=typeof e)return!1;if(Object.keys(t).length!==Object.keys(e).length)return!1;for(var n in t)if(!o(t[n],e[n]))return!1;return!0}return t===e}function s(t,e,n,a){var i=new r(t,e,n,a);return function(t){return i.solve(t)}}i.prototype={clone:function(){return new i(this.x,this.y)},add:function(t){return this.clone()._add(t)},sub:function(t){return this.clone()._sub(t)},multByPoint:function(t){return this.clone()._multByPoint(t)},divByPoint:function(t){return this.clone()._divByPoint(t)},mult:function(t){return this.clone()._mult(t)},div:function(t){return this.clone()._div(t)},rotate:function(t){return this.clone()._rotate(t)},rotateAround:function(t,e){return this.clone()._rotateAround(t,e)},matMult:function(t){return this.clone()._matMult(t)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(t){return this.x===t.x&&this.y===t.y},dist:function(t){return Math.sqrt(this.distSqr(t))},distSqr:function(t){var e=t.x-this.x,r=t.y-this.y;return e*e+r*r},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(t){return Math.atan2(this.y-t.y,this.x-t.x)},angleWith:function(t){return this.angleWithSep(t.x,t.y)},angleWithSep:function(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e)},_matMult:function(t){var e=t[0]*this.x+t[1]*this.y,r=t[2]*this.x+t[3]*this.y;return this.x=e,this.y=r,this},_add:function(t){return this.x+=t.x,this.y+=t.y,this},_sub:function(t){return this.x-=t.x,this.y-=t.y,this},_mult:function(t){return this.x*=t,this.y*=t,this},_div:function(t){return this.x/=t,this.y/=t,this},_multByPoint:function(t){return this.x*=t.x,this.y*=t.y,this},_divByPoint:function(t){return this.x/=t.x,this.y/=t.y,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var t=this.y;return this.y=this.x,this.x=-t,this},_rotate:function(t){var e=Math.cos(t),r=Math.sin(t),n=e*this.x-r*this.y,a=r*this.x+e*this.y;return this.x=n,this.y=a,this},_rotateAround:function(t,e){var r=Math.cos(t),n=Math.sin(t),a=e.x+r*(this.x-e.x)-n*(this.y-e.y),i=e.y+n*(this.x-e.x)+r*(this.y-e.y);return this.x=a,this.y=i,this},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},i.convert=function(t){return t instanceof i?t:Array.isArray(t)?new i(t[0],t[1]):t};var l=s(.25,.1,.25,1);function c(t,e,r){return Math.min(r,Math.max(e,t))}function u(t,e,r){var n=r-e,a=((t-e)%n+n)%n+e;return a===e?r:a}function h(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,a=e;n<a.length;n+=1){var i=a[n];for(var o in i)t[o]=i[o]}return t}var f=1;function p(){return f++}function d(){return function t(e){return e?(e^16*Math.random()>>e/4).toString(16):([1e7]+-[1e3]+-4e3+-8e3+-1e11).replace(/[018]/g,t)}()}function g(t){return!!t&&/^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)}function v(t,e){t.forEach(function(t){e[t]&&(e[t]=e[t].bind(e))})}function m(t,e){return-1!==t.indexOf(e,t.length-e.length)}function y(t,e,r){var n={};for(var a in t)n[a]=e.call(r||this,t[a],a,t);return n}function x(t,e,r){var n={};for(var a in t)e.call(r||this,t[a],a,t)&&(n[a]=t[a]);return n}function b(t){return Array.isArray(t)?t.map(b):"object"==typeof t&&t?y(t,b):t}var _={};function w(t){_[t]||("undefined"!=typeof console&&console.warn(t),_[t]=!0)}function k(t,e,r){return(r.y-t.y)*(e.x-t.x)>(e.y-t.y)*(r.x-t.x)}function T(t){for(var e=0,r=0,n=t.length,a=n-1,i=void 0,o=void 0;r<n;a=r++)i=t[r],e+=((o=t[a]).x-i.x)*(i.y+o.y);return e}function M(t){var e={};if(t.replace(/(?:^|(?:\s*\,\s*))([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g,function(t,r,n,a){var i=n||a;return e[r]=!i||i.toLowerCase(),""}),e["max-age"]){var r=parseInt(e["max-age"],10);isNaN(r)?delete e["max-age"]:e["max-age"]=r}return e}function A(t){try{var e=self[t];return e.setItem("_mapbox_test_",1),e.removeItem("_mapbox_test_"),!0}catch(t){return!1}}var S,E,L,C,P=self.performance&&self.performance.now?self.performance.now.bind(self.performance):Date.now.bind(Date),O=self.requestAnimationFrame||self.mozRequestAnimationFrame||self.webkitRequestAnimationFrame||self.msRequestAnimationFrame,z=self.cancelAnimationFrame||self.mozCancelAnimationFrame||self.webkitCancelAnimationFrame||self.msCancelAnimationFrame,I={now:P,frame:function(t){var e=O(t);return{cancel:function(){return z(e)}}},getImageData:function(t){var e=self.document.createElement("canvas"),r=e.getContext("2d");if(!r)throw new Error("failed to create canvas 2d context");return e.width=t.width,e.height=t.height,r.drawImage(t,0,0,t.width,t.height),r.getImageData(0,0,t.width,t.height)},resolveURL:function(t){return S||(S=self.document.createElement("a")),S.href=t,S.href},hardwareConcurrency:self.navigator.hardwareConcurrency||4,get devicePixelRatio(){return self.devicePixelRatio},get prefersReducedMotion(){return!!self.matchMedia&&(null==E&&(E=self.matchMedia("(prefers-reduced-motion: reduce)")),E.matches)}},D={API_URL:"https://api.mapbox.com",get EVENTS_URL(){return this.API_URL?0===this.API_URL.indexOf("https://api.mapbox.cn")?"https://events.mapbox.cn/events/v2":0===this.API_URL.indexOf("https://api.mapbox.com")?"https://events.mapbox.com/events/v2":null:null},FEEDBACK_URL:"https://apps.mapbox.com/feedback",REQUIRE_ACCESS_TOKEN:!0,ACCESS_TOKEN:null,MAX_PARALLEL_IMAGE_REQUESTS:16},R={supported:!1,testSupport:function(t){!F&&C&&(B?N(t):L=t)}},F=!1,B=!1;function N(t){var e=t.createTexture();t.bindTexture(t.TEXTURE_2D,e);try{if(t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,C),t.isContextLost())return;R.supported=!0}catch(t){}t.deleteTexture(e),F=!0}self.document&&((C=self.document.createElement("img")).onload=function(){L&&N(L),L=null,B=!0},C.onerror=function(){F=!0,L=null},C.src="data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA=");var j="01",V=function(t,e){this._transformRequestFn=t,this._customAccessToken=e,this._createSkuToken()};function U(t){return 0===t.indexOf("mapbox:")}V.prototype._createSkuToken=function(){var t=function(){for(var t="",e=0;e<10;e++)t+="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[Math.floor(62*Math.random())];return{token:["1",j,t].join(""),tokenExpiresAt:Date.now()+432e5}}();this._skuToken=t.token,this._skuTokenExpiresAt=t.tokenExpiresAt},V.prototype._isSkuTokenExpired=function(){return Date.now()>this._skuTokenExpiresAt},V.prototype.transformRequest=function(t,e){return this._transformRequestFn&&this._transformRequestFn(t,e)||{url:t}},V.prototype.normalizeStyleURL=function(t,e){if(!U(t))return t;var r=Y(t);return r.path="/styles/v1"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},V.prototype.normalizeGlyphsURL=function(t,e){if(!U(t))return t;var r=Y(t);return r.path="/fonts/v1"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},V.prototype.normalizeSourceURL=function(t,e){if(!U(t))return t;var r=Y(t);return r.path="/v4/"+r.authority+".json",r.params.push("secure"),this._makeAPIURL(r,this._customAccessToken||e)},V.prototype.normalizeSpriteURL=function(t,e,r,n){var a=Y(t);return U(t)?(a.path="/styles/v1"+a.path+"/sprite"+e+r,this._makeAPIURL(a,this._customAccessToken||n)):(a.path+=""+e+r,W(a))},V.prototype.normalizeTileURL=function(t,e,r){if(this._isSkuTokenExpired()&&this._createSkuToken(),!e||!U(e))return t;var n=Y(t),a=I.devicePixelRatio>=2||512===r?"@2x":"",i=R.supported?".webp":"$1";return n.path=n.path.replace(/(\.(png|jpg)\d*)(?=$)/,""+a+i),n.path=n.path.replace(/^.+\/v4\//,"/"),n.path="/v4"+n.path,D.REQUIRE_ACCESS_TOKEN&&(D.ACCESS_TOKEN||this._customAccessToken)&&this._skuToken&&n.params.push("sku="+this._skuToken),this._makeAPIURL(n,this._customAccessToken)},V.prototype.canonicalizeTileURL=function(t){var e=Y(t);if(!e.path.match(/(^\/v4\/)/)||!e.path.match(/\.[\w]+$/))return t;var r="mapbox://tiles/";r+=e.path.replace("/v4/","");var n=e.params.filter(function(t){return!t.match(/^access_token=/)});return n.length&&(r+="?"+n.join("&")),r},V.prototype.canonicalizeTileset=function(t,e){if(!U(e))return t.tiles||[];for(var r=[],n=0,a=t.tiles;n<a.length;n+=1){var i=a[n],o=this.canonicalizeTileURL(i);r.push(o)}return r},V.prototype._makeAPIURL=function(t,e){var r="See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes",n=Y(D.API_URL);if(t.protocol=n.protocol,t.authority=n.authority,"/"!==n.path&&(t.path=""+n.path+t.path),!D.REQUIRE_ACCESS_TOKEN)return W(t);if(!(e=e||D.ACCESS_TOKEN))throw new Error("An API access token is required to use Mapbox GL. "+r);if("s"===e[0])throw new Error("Use a public access token (pk.*) with Mapbox GL, not a secret access token (sk.*). "+r);return t.params=t.params.filter(function(t){return-1===t.indexOf("access_token")}),t.params.push("access_token="+e),W(t)};var q=/^((https?:)?\/\/)?([^\/]+\.)?mapbox\.c(n|om)(\/|\?|$)/i;function H(t){return q.test(t)}var G=/^(\w+):\/\/([^\/?]*)(\/[^?]+)?\??(.+)?/;function Y(t){var e=t.match(G);if(!e)throw new Error("Unable to parse URL object");return{protocol:e[1],authority:e[2],path:e[3]||"/",params:e[4]?e[4].split("&"):[]}}function W(t){var e=t.params.length?"?"+t.params.join("&"):"";return t.protocol+"://"+t.authority+t.path+e}function X(t){if(!t)return null;var e,r=t.split(".");if(!r||3!==r.length)return null;try{return JSON.parse((e=r[1],decodeURIComponent(self.atob(e).split("").map(function(t){return"%"+("00"+t.charCodeAt(0).toString(16)).slice(-2)}).join(""))))}catch(t){return null}}var Z=function(t){this.type=t,this.anonId=null,this.eventData={},this.queue=[],this.pendingRequest=null};Z.prototype.getStorageKey=function(t){var e,r=X(D.ACCESS_TOKEN),n="";return r&&r.u?(e=r.u,n=self.btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,function(t,e){return String.fromCharCode(Number("0x"+e))}))):n=D.ACCESS_TOKEN||"",t?"mapbox.eventData."+t+":"+n:"mapbox.eventData:"+n},Z.prototype.fetchEventData=function(){var t=A("localStorage"),e=this.getStorageKey(),r=this.getStorageKey("uuid");if(t)try{var n=self.localStorage.getItem(e);n&&(this.eventData=JSON.parse(n));var a=self.localStorage.getItem(r);a&&(this.anonId=a)}catch(t){w("Unable to read from LocalStorage")}},Z.prototype.saveEventData=function(){var t=A("localStorage"),e=this.getStorageKey(),r=this.getStorageKey("uuid");if(t)try{self.localStorage.setItem(r,this.anonId),Object.keys(this.eventData).length>=1&&self.localStorage.setItem(e,JSON.stringify(this.eventData))}catch(t){w("Unable to write to LocalStorage")}},Z.prototype.processRequests=function(t){},Z.prototype.postEvent=function(t,e,r,n){var a=this;if(D.EVENTS_URL){var i=Y(D.EVENTS_URL);i.params.push("access_token="+(n||D.ACCESS_TOKEN||""));var o={event:this.type,created:new Date(t).toISOString(),sdkIdentifier:"mapbox-gl-js",sdkVersion:"1.3.2",skuId:j,userId:this.anonId},s=e?h(o,e):o,l={url:W(i),headers:{"Content-Type":"text/plain"},body:JSON.stringify([s])};this.pendingRequest=mt(l,function(t){a.pendingRequest=null,r(t),a.saveEventData(),a.processRequests(n)})}},Z.prototype.queueRequest=function(t,e){this.queue.push(t),this.processRequests(e)};var J,K=function(t){function e(){t.call(this,"map.load"),this.success={},this.skuToken=""}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postMapLoadEvent=function(t,e,r,n){this.skuToken=r,(D.EVENTS_URL&&n||D.ACCESS_TOKEN&&Array.isArray(t)&&t.some(function(t){return U(t)||H(t)}))&&this.queueRequest({id:e,timestamp:Date.now()},n)},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){var r=this.queue.shift(),n=r.id,a=r.timestamp;n&&this.success[n]||(this.anonId||this.fetchEventData(),g(this.anonId)||(this.anonId=d()),this.postEvent(a,{skuToken:this.skuToken},function(t){t||n&&(e.success[n]=!0)},t))}},e}(Z),Q=new(function(t){function e(e){t.call(this,"appUserTurnstile"),this._customAccessToken=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.postTurnstileEvent=function(t,e){D.EVENTS_URL&&D.ACCESS_TOKEN&&Array.isArray(t)&&t.some(function(t){return U(t)||H(t)})&&this.queueRequest(Date.now(),e)},e.prototype.processRequests=function(t){var e=this;if(!this.pendingRequest&&0!==this.queue.length){this.anonId&&this.eventData.lastSuccess&&this.eventData.tokenU||this.fetchEventData();var r=X(D.ACCESS_TOKEN),n=r?r.u:D.ACCESS_TOKEN,a=n!==this.eventData.tokenU;g(this.anonId)||(this.anonId=d(),a=!0);var i=this.queue.shift();if(this.eventData.lastSuccess){var o=new Date(this.eventData.lastSuccess),s=new Date(i),l=(i-this.eventData.lastSuccess)/864e5;a=a||l>=1||l<-1||o.getDate()!==s.getDate()}else a=!0;if(!a)return this.processRequests();this.postEvent(i,{"enabled.telemetry":!1},function(t){t||(e.eventData.lastSuccess=i,e.eventData.tokenU=n)},t)}},e}(Z)),$=Q.postTurnstileEvent.bind(Q),tt=new K,et=tt.postMapLoadEvent.bind(tt),rt="mapbox-tiles",nt=500,at=50,it=42e4;function ot(t){var e=t.indexOf("?");return e<0?t:t.slice(0,e)}var st=1/0,lt={Unknown:"Unknown",Style:"Style",Source:"Source",Tile:"Tile",Glyphs:"Glyphs",SpriteImage:"SpriteImage",SpriteJSON:"SpriteJSON",Image:"Image"};"function"==typeof Object.freeze&&Object.freeze(lt);var ct=function(t){function e(e,r,n){401===r&&H(n)&&(e+=": you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes"),t.call(this,e),this.status=r,this.url=n,this.name=this.constructor.name,this.message=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.toString=function(){return this.name+": "+this.message+" ("+this.status+"): "+this.url},e}(Error);function ut(){return"undefined"!=typeof WorkerGlobalScope&&"undefined"!=typeof self&&self instanceof WorkerGlobalScope}var ht=ut()?function(){return self.worker&&self.worker.referrer}:function(){return("blob:"===self.location.protocol?self.parent:self).location.href};function ft(t,e){var r,n=new self.AbortController,a=new self.Request(t.url,{method:t.method||"GET",body:t.body,credentials:t.credentials,headers:t.headers,referrer:ht(),signal:n.signal}),i=!1,o=!1,s=(r=a.url).indexOf("sku=")>0&&H(r);"json"===t.type&&a.headers.set("Accept","application/json");var l=function(r,n,i){if(!o){if(r&&"SecurityError"!==r.message&&w(r),n&&i)return c(n);var l=Date.now();self.fetch(a).then(function(r){if(r.ok){var n=s?r.clone():null;return c(r,n,l)}return e(new ct(r.statusText,r.status,t.url))}).catch(function(t){20!==t.code&&e(new Error(t.message))})}},c=function(r,n,s){("arrayBuffer"===t.type?r.arrayBuffer():"json"===t.type?r.json():r.text()).then(function(t){o||(n&&s&&function(t,e,r){if(self.caches){var n={status:e.status,statusText:e.statusText,headers:new self.Headers};e.headers.forEach(function(t,e){return n.headers.set(e,t)});var a=M(e.headers.get("Cache-Control")||"");a["no-store"]||(a["max-age"]&&n.headers.set("Expires",new Date(r+1e3*a["max-age"]).toUTCString()),new Date(n.headers.get("Expires")).getTime()-r<it||function(t,e){if(void 0===J)try{new Response(new ReadableStream),J=!0}catch(t){J=!1}J?e(t.body):t.blob().then(e)}(e,function(e){var r=new self.Response(e,n);self.caches.open(rt).then(function(e){return e.put(ot(t.url),r)}).catch(function(t){return w(t.message)})}))}}(a,n,s),i=!0,e(null,t,r.headers.get("Cache-Control"),r.headers.get("Expires")))}).catch(function(t){return e(new Error(t.message))})};return s?function(t,e){if(!self.caches)return e(null);var r=ot(t.url);self.caches.open(rt).then(function(t){t.match(r).then(function(n){var a=function(t){if(!t)return!1;var e=new Date(t.headers.get("Expires")),r=M(t.headers.get("Cache-Control")||"");return e>Date.now()&&!r["no-cache"]}(n);t.delete(r),a&&t.put(r,n.clone()),e(null,n,a)}).catch(e)}).catch(e)}(a,l):l(null,null),{cancel:function(){o=!0,i||n.abort()}}}var pt,dt,gt=function(t,e){if(r=t.url,!(/^file:/.test(r)||/^file:/.test(ht())&&!/^\w+:/.test(r))){if(self.fetch&&self.Request&&self.AbortController&&self.Request.prototype.hasOwnProperty("signal"))return ft(t,e);if(ut()&&self.worker&&self.worker.actor)return self.worker.actor.send("getResource",t,e)}var r;return function(t,e){var r=new self.XMLHttpRequest;for(var n in r.open(t.method||"GET",t.url,!0),"arrayBuffer"===t.type&&(r.responseType="arraybuffer"),t.headers)r.setRequestHeader(n,t.headers[n]);return"json"===t.type&&(r.responseType="text",r.setRequestHeader("Accept","application/json")),r.withCredentials="include"===t.credentials,r.onerror=function(){e(new Error(r.statusText))},r.onload=function(){if((r.status>=200&&r.status<300||0===r.status)&&null!==r.response){var n=r.response;if("json"===t.type)try{n=JSON.parse(r.response)}catch(t){return e(t)}e(null,n,r.getResponseHeader("Cache-Control"),r.getResponseHeader("Expires"))}else e(new ct(r.statusText,r.status,t.url))},r.send(t.body),{cancel:function(){return r.abort()}}}(t,e)},vt=function(t,e){return gt(h(t,{type:"arrayBuffer"}),e)},mt=function(t,e){return gt(h(t,{method:"POST"}),e)};pt=[],dt=0;var yt=function(t,e){if(dt>=D.MAX_PARALLEL_IMAGE_REQUESTS){var r={requestParameters:t,callback:e,cancelled:!1,cancel:function(){this.cancelled=!0}};return pt.push(r),r}dt++;var n=!1,a=function(){if(!n)for(n=!0,dt--;pt.length&&dt<D.MAX_PARALLEL_IMAGE_REQUESTS;){var t=pt.shift(),e=t.requestParameters,r=t.callback;t.cancelled||(t.cancel=yt(e,r).cancel)}},i=vt(t,function(t,r,n,i){if(a(),t)e(t);else if(r){var o=new self.Image,s=self.URL||self.webkitURL;o.onload=function(){e(null,o),s.revokeObjectURL(o.src)},o.onerror=function(){return e(new Error("Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported."))};var l=new self.Blob([new Uint8Array(r)],{type:"image/png"});o.cacheControl=n,o.expires=i,o.src=r.byteLength?s.createObjectURL(l):"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII="}});return{cancel:function(){i.cancel(),a()}}};function xt(t,e,r){r[t]&&-1!==r[t].indexOf(e)||(r[t]=r[t]||[],r[t].push(e))}function bt(t,e,r){if(r&&r[t]){var n=r[t].indexOf(e);-1!==n&&r[t].splice(n,1)}}var _t=function(t,e){void 0===e&&(e={}),h(this,e),this.type=t},wt=function(t){function e(e,r){void 0===r&&(r={}),t.call(this,"error",h({error:e},r))}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(_t),kt=function(){};kt.prototype.on=function(t,e){return this._listeners=this._listeners||{},xt(t,e,this._listeners),this},kt.prototype.off=function(t,e){return bt(t,e,this._listeners),bt(t,e,this._oneTimeListeners),this},kt.prototype.once=function(t,e){return this._oneTimeListeners=this._oneTimeListeners||{},xt(t,e,this._oneTimeListeners),this},kt.prototype.fire=function(t,e){"string"==typeof t&&(t=new _t(t,e||{}));var r=t.type;if(this.listens(r)){t.target=this;for(var n=0,a=this._listeners&&this._listeners[r]?this._listeners[r].slice():[];n<a.length;n+=1)a[n].call(this,t);for(var i=0,o=this._oneTimeListeners&&this._oneTimeListeners[r]?this._oneTimeListeners[r].slice():[];i<o.length;i+=1){var s=o[i];bt(r,s,this._oneTimeListeners),s.call(this,t)}var l=this._eventedParent;l&&(h(t,"function"==typeof this._eventedParentData?this._eventedParentData():this._eventedParentData),l.fire(t))}else t instanceof wt&&console.error(t.error);return this},kt.prototype.listens=function(t){return this._listeners&&this._listeners[t]&&this._listeners[t].length>0||this._oneTimeListeners&&this._oneTimeListeners[t]&&this._oneTimeListeners[t].length>0||this._eventedParent&&this._eventedParent.listens(t)},kt.prototype.setEventedParent=function(t,e){return this._eventedParent=t,this._eventedParentData=e,this};var Tt={$version:8,$root:{version:{required:!0,type:"enum",values:[8]},name:{type:"string"},metadata:{type:"*"},center:{type:"array",value:"number"},zoom:{type:"number"},bearing:{type:"number",default:0,period:360,units:"degrees"},pitch:{type:"number",default:0,units:"degrees"},light:{type:"light"},sources:{required:!0,type:"sources"},sprite:{type:"string"},glyphs:{type:"string"},transition:{type:"transition"},layers:{required:!0,type:"array",value:"layer"}},sources:{"*":{type:"source"}},source:["source_vector","source_raster","source_raster_dem","source_geojson","source_video","source_image"],source_vector:{type:{required:!0,type:"enum",values:{vector:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},attribution:{type:"string"},"*":{type:"*"}},source_raster:{type:{required:!0,type:"enum",values:{raster:{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},scheme:{type:"enum",values:{xyz:{},tms:{}},default:"xyz"},attribution:{type:"string"},"*":{type:"*"}},source_raster_dem:{type:{required:!0,type:"enum",values:{"raster-dem":{}}},url:{type:"string"},tiles:{type:"array",value:"string"},bounds:{type:"array",value:"number",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},attribution:{type:"string"},encoding:{type:"enum",values:{terrarium:{},mapbox:{}},default:"mapbox"},"*":{type:"*"}},source_geojson:{type:{required:!0,type:"enum",values:{geojson:{}}},data:{type:"*"},maxzoom:{type:"number",default:18},attribution:{type:"string"},buffer:{type:"number",default:128,maximum:512,minimum:0},tolerance:{type:"number",default:.375},cluster:{type:"boolean",default:!1},clusterRadius:{type:"number",default:50,minimum:0},clusterMaxZoom:{type:"number"},clusterProperties:{type:"*"},lineMetrics:{type:"boolean",default:!1},generateId:{type:"boolean",default:!1}},source_video:{type:{required:!0,type:"enum",values:{video:{}}},urls:{required:!0,type:"array",value:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},source_image:{type:{required:!0,type:"enum",values:{image:{}}},url:{required:!0,type:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},layer:{id:{type:"string",required:!0},type:{type:"enum",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},"fill-extrusion":{},raster:{},hillshade:{},background:{}},required:!0},metadata:{type:"*"},source:{type:"string"},"source-layer":{type:"string"},minzoom:{type:"number",minimum:0,maximum:24},maxzoom:{type:"number",minimum:0,maximum:24},filter:{type:"filter"},layout:{type:"layout"},paint:{type:"paint"}},layout:["layout_fill","layout_line","layout_circle","layout_heatmap","layout_fill-extrusion","layout_symbol","layout_raster","layout_hillshade","layout_background"],layout_background:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_fill:{"fill-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_circle:{"circle-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_heatmap:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},"layout_fill-extrusion":{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_line:{"line-cap":{type:"enum",values:{butt:{},round:{},square:{}},default:"butt",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-join":{type:"enum",values:{bevel:{},round:{},miter:{}},default:"miter",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"line-miter-limit":{type:"number",default:2,requires:[{"line-join":"miter"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-round-limit":{type:"number",default:1.05,requires:[{"line-join":"round"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_symbol:{"symbol-placement":{type:"enum",values:{point:{},line:{},"line-center":{}},default:"point",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-spacing":{type:"number",default:250,minimum:1,units:"pixels",requires:[{"symbol-placement":"line"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"symbol-avoid-edges":{type:"boolean",default:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"symbol-sort-key":{type:"number",expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"symbol-z-order":{type:"enum",values:{auto:{},"viewport-y":{},source:{}},default:"auto",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-allow-overlap":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-ignore-placement":{type:"boolean",default:!1,requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-optional":{type:"boolean",default:!1,requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-size":{type:"number",default:1,minimum:0,units:"factor of the original icon size",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-text-fit":{type:"enum",values:{none:{},width:{},height:{},both:{}},default:"none",requires:["icon-image","text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",requires:["icon-image","text-field",{"icon-text-fit":["both","width","height"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-image":{type:"string",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-keep-upright":{type:"boolean",default:!1,requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"icon-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-pitch-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotation-alignment":{type:"enum",values:{map:{},viewport:{},auto:{}},default:"auto",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-field":{type:"formatted",default:"",tokens:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-font":{type:"array",value:"string",default:["Open Sans Regular","Arial Unicode MS Regular"],requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-size":{type:"number",default:16,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-width":{type:"number",default:10,minimum:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-line-height":{type:"number",default:1.2,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-letter-spacing":{type:"number",default:0,units:"ems",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-justify":{type:"enum",values:{auto:{},left:{},center:{},right:{}},default:"center",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-radial-offset":{type:"number",units:"ems",default:0,requires:["text-field"],"property-type":"data-driven",expression:{interpolated:!0,parameters:["zoom","feature"]}},"text-variable-anchor":{type:"array",value:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-anchor":{type:"enum",values:{center:{},left:{},right:{},top:{},bottom:{},"top-left":{},"top-right":{},"bottom-left":{},"bottom-right":{}},default:"center",requires:["text-field",{"!":"text-variable-anchor"}],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-max-angle":{type:"number",default:45,units:"degrees",requires:["text-field",{"symbol-placement":["line","line-center"]}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-writing-mode":{type:"array",value:"enum",values:{horizontal:{},vertical:{}},requires:["text-field",{"symbol-placement":["point"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-rotate":{type:"number",default:0,period:360,units:"degrees",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-keep-upright":{type:"boolean",default:!0,requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":["line","line-center"]}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-transform":{type:"enum",values:{none:{},uppercase:{},lowercase:{}},default:"none",requires:["text-field"],expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-offset":{type:"array",value:"number",units:"ems",length:2,default:[0,0],requires:["text-field",{"!":"text-radial-offset"},{"!":"text-variable-anchor"}],expression:{interpolated:!0,parameters:["zoom","feature"]},"property-type":"data-driven"},"text-allow-overlap":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-ignore-placement":{type:"boolean",default:!1,requires:["text-field"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-optional":{type:"boolean",default:!1,requires:["text-field","icon-image"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_raster:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},layout_hillshade:{visibility:{type:"enum",values:{visible:{},none:{}},default:"visible","property-type":"constant"}},filter:{type:"array",value:"*"},filter_operator:{type:"enum",values:{"==":{},"!=":{},">":{},">=":{},"<":{},"<=":{},in:{},"!in":{},all:{},any:{},none:{},has:{},"!has":{}}},geometry_type:{type:"enum",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:"expression"},stops:{type:"array",value:"function_stop"},base:{type:"number",default:1,minimum:0},property:{type:"string",default:"$zoom"},type:{type:"enum",values:{identity:{},exponential:{},interval:{},categorical:{}},default:"exponential"},colorSpace:{type:"enum",values:{rgb:{},lab:{},hcl:{}},default:"rgb"},default:{type:"*",required:!1}},function_stop:{type:"array",minimum:0,maximum:22,value:["number","color"],length:2},expression:{type:"array",value:"*",minimum:1},expression_name:{type:"enum",values:{let:{group:"Variable binding"},var:{group:"Variable binding"},literal:{group:"Types"},array:{group:"Types"},at:{group:"Lookup"},case:{group:"Decision"},match:{group:"Decision"},coalesce:{group:"Decision"},step:{group:"Ramps, scales, curves"},interpolate:{group:"Ramps, scales, curves"},"interpolate-hcl":{group:"Ramps, scales, curves"},"interpolate-lab":{group:"Ramps, scales, curves"},ln2:{group:"Math"},pi:{group:"Math"},e:{group:"Math"},typeof:{group:"Types"},string:{group:"Types"},number:{group:"Types"},boolean:{group:"Types"},object:{group:"Types"},collator:{group:"Types"},format:{group:"Types"},"number-format":{group:"Types"},"to-string":{group:"Types"},"to-number":{group:"Types"},"to-boolean":{group:"Types"},"to-rgba":{group:"Color"},"to-color":{group:"Types"},rgb:{group:"Color"},rgba:{group:"Color"},get:{group:"Lookup"},has:{group:"Lookup"},length:{group:"Lookup"},properties:{group:"Feature data"},"feature-state":{group:"Feature data"},"geometry-type":{group:"Feature data"},id:{group:"Feature data"},zoom:{group:"Zoom"},"heatmap-density":{group:"Heatmap"},"line-progress":{group:"Feature data"},accumulated:{group:"Feature data"},"+":{group:"Math"},"*":{group:"Math"},"-":{group:"Math"},"/":{group:"Math"},"%":{group:"Math"},"^":{group:"Math"},sqrt:{group:"Math"},log10:{group:"Math"},ln:{group:"Math"},log2:{group:"Math"},sin:{group:"Math"},cos:{group:"Math"},tan:{group:"Math"},asin:{group:"Math"},acos:{group:"Math"},atan:{group:"Math"},min:{group:"Math"},max:{group:"Math"},round:{group:"Math"},abs:{group:"Math"},ceil:{group:"Math"},floor:{group:"Math"},"==":{group:"Decision"},"!=":{group:"Decision"},">":{group:"Decision"},"<":{group:"Decision"},">=":{group:"Decision"},"<=":{group:"Decision"},all:{group:"Decision"},any:{group:"Decision"},"!":{group:"Decision"},"is-supported-script":{group:"String"},upcase:{group:"String"},downcase:{group:"String"},concat:{group:"String"},"resolved-locale":{group:"String"}}},light:{anchor:{type:"enum",default:"viewport",values:{map:{},viewport:{}},"property-type":"data-constant",transition:!1,expression:{interpolated:!1,parameters:["zoom"]}},position:{type:"array",default:[1.15,210,30],length:3,value:"number","property-type":"data-constant",transition:!0,expression:{interpolated:!0,parameters:["zoom"]}},color:{type:"color","property-type":"data-constant",default:"#ffffff",expression:{interpolated:!0,parameters:["zoom"]},transition:!0},intensity:{type:"number","property-type":"data-constant",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:["zoom"]},transition:!0}},paint:["paint_fill","paint_line","paint_circle","paint_heatmap","paint_fill-extrusion","paint_symbol","paint_raster","paint_hillshade","paint_background"],paint_fill:{"fill-antialias":{type:"boolean",default:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-outline-color":{type:"color",transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-pattern":{type:"string",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"}},"paint_fill-extrusion":{"fill-extrusion-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"fill-extrusion-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["fill-extrusion-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"fill-extrusion-pattern":{type:"string",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"fill-extrusion-height":{type:"number",default:0,minimum:0,units:"meters",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-base":{type:"number",default:0,minimum:0,units:"meters",transition:!0,requires:["fill-extrusion-height"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"fill-extrusion-vertical-gradient":{type:"boolean",default:!0,transition:!1,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_line:{"line-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"line-pattern"}],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"line-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["line-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"line-width":{type:"number",default:1,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-gap-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-offset":{type:"number",default:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"line-dasharray":{type:"array",value:"number",minimum:0,transition:!0,units:"line widths",requires:[{"!":"line-pattern"}],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"cross-faded"},"line-pattern":{type:"string",transition:!0,expression:{interpolated:!1,parameters:["zoom","feature"]},"property-type":"cross-faded-data-driven"},"line-gradient":{type:"color",transition:!1,requires:[{"!":"line-dasharray"},{"!":"line-pattern"},{source:"geojson",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:["line-progress"]},"property-type":"color-ramp"}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-blur":{type:"number",default:0,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"circle-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["circle-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-scale":{type:"enum",values:{map:{},viewport:{}},default:"map",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-pitch-alignment":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"circle-stroke-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"circle-stroke-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"}},paint_heatmap:{"heatmap-radius":{type:"number",default:30,minimum:1,transition:!0,units:"pixels",expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-weight":{type:"number",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"heatmap-intensity":{type:"number",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"heatmap-color":{type:"color",default:["interpolate",["linear"],["heatmap-density"],0,"rgba(0, 0, 255, 0)",.1,"royalblue",.3,"cyan",.5,"lime",.7,"yellow",1,"red"],transition:!1,expression:{interpolated:!0,parameters:["heatmap-density"]},"property-type":"color-ramp"},"heatmap-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_symbol:{"icon-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-color":{type:"color",default:"#000000",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["icon-image"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"icon-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["icon-image","icon-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"text-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-color":{type:"color",default:"#000000",transition:!0,overridable:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",transition:!0,requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-width":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-halo-blur":{type:"number",default:0,minimum:0,transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom","feature","feature-state"]},"property-type":"data-driven"},"text-translate":{type:"array",value:"number",length:2,default:[0,0],transition:!0,units:"pixels",requires:["text-field"],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"text-translate-anchor":{type:"enum",values:{map:{},viewport:{}},default:"map",requires:["text-field","text-translate"],expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"}},paint_raster:{"raster-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-hue-rotate":{type:"number",default:0,period:360,transition:!0,units:"degrees",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-min":{type:"number",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-brightness-max":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-saturation":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-contrast":{type:"number",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"raster-resampling":{type:"enum",values:{linear:{},nearest:{}},default:"linear",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"raster-fade-duration":{type:"number",default:300,minimum:0,transition:!1,units:"milliseconds",expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_hillshade:{"hillshade-illumination-direction":{type:"number",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-illumination-anchor":{type:"enum",values:{map:{},viewport:{}},default:"viewport",expression:{interpolated:!1,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-exaggeration":{type:"number",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-shadow-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-highlight-color":{type:"color",default:"#FFFFFF",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"hillshade-accent-color":{type:"color",default:"#000000",transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},paint_background:{"background-color":{type:"color",default:"#000000",transition:!0,requires:[{"!":"background-pattern"}],expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"},"background-pattern":{type:"string",transition:!0,expression:{interpolated:!1,parameters:["zoom"]},"property-type":"cross-faded"},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:["zoom"]},"property-type":"data-constant"}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds"},delay:{type:"number",default:0,minimum:0,units:"milliseconds"}},"property-type":{"data-driven":{type:"property-type"},"cross-faded":{type:"property-type"},"cross-faded-data-driven":{type:"property-type"},"color-ramp":{type:"property-type"},"data-constant":{type:"property-type"},constant:{type:"property-type"}}},Mt=function(t,e,r,n){this.message=(t?t+": ":"")+r,n&&(this.identifier=n),null!=e&&e.__line__&&(this.line=e.__line__)};function At(t){var e=t.key,r=t.value;return r?[new Mt(e,r,"constants have been deprecated as of v8")]:[]}function St(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];for(var n=0,a=e;n<a.length;n+=1){var i=a[n];for(var o in i)t[o]=i[o]}return t}function Et(t){return t instanceof Number||t instanceof String||t instanceof Boolean}function Lt(t){return Et(t)?t.valueOf():t}function Ct(t){if(Array.isArray(t))return t.map(Ct);if(t instanceof Object&&!Et(t)){var e={};for(var r in t)e[r]=Ct(t[r]);return e}return Lt(t)}var Pt=function(t){function e(e,r){t.call(this,r),this.message=r,this.key=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Error),Ot=function(t,e){void 0===e&&(e=[]),this.parent=t,this.bindings={};for(var r=0,n=e;r<n.length;r+=1){var a=n[r],i=a[0],o=a[1];this.bindings[i]=o}};Ot.prototype.concat=function(t){return new Ot(this,t)},Ot.prototype.get=function(t){if(this.bindings[t])return this.bindings[t];if(this.parent)return this.parent.get(t);throw new Error(t+" not found in scope.")},Ot.prototype.has=function(t){return!!this.bindings[t]||!!this.parent&&this.parent.has(t)};var zt={kind:"null"},It={kind:"number"},Dt={kind:"string"},Rt={kind:"boolean"},Ft={kind:"color"},Bt={kind:"object"},Nt={kind:"value"},jt={kind:"collator"},Vt={kind:"formatted"};function Ut(t,e){return{kind:"array",itemType:t,N:e}}function qt(t){if("array"===t.kind){var e=qt(t.itemType);return"number"==typeof t.N?"array<"+e+", "+t.N+">":"value"===t.itemType.kind?"array":"array<"+e+">"}return t.kind}var Ht=[zt,It,Dt,Rt,Ft,Vt,Bt,Ut(Nt)];function Gt(t,e){if("error"===e.kind)return null;if("array"===t.kind){if("array"===e.kind&&(0===e.N&&"value"===e.itemType.kind||!Gt(t.itemType,e.itemType))&&("number"!=typeof t.N||t.N===e.N))return null}else{if(t.kind===e.kind)return null;if("value"===t.kind)for(var r=0,n=Ht;r<n.length;r+=1)if(!Gt(n[r],e))return null}return"Expected "+qt(t)+" but found "+qt(e)+" instead."}var Yt=e(function(t,e){var r={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function n(t){return(t=Math.round(t))<0?0:t>255?255:t}function a(t){return t<0?0:t>1?1:t}function i(t){return"%"===t[t.length-1]?n(parseFloat(t)/100*255):n(parseInt(t))}function o(t){return"%"===t[t.length-1]?a(parseFloat(t)/100):a(parseFloat(t))}function s(t,e,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?t+(e-t)*r*6:2*r<1?e:3*r<2?t+(e-t)*(2/3-r)*6:t}try{e.parseCSSColor=function(t){var e,a=t.replace(/ /g,"").toLowerCase();if(a in r)return r[a].slice();if("#"===a[0])return 4===a.length?(e=parseInt(a.substr(1),16))>=0&&e<=4095?[(3840&e)>>4|(3840&e)>>8,240&e|(240&e)>>4,15&e|(15&e)<<4,1]:null:7===a.length&&(e=parseInt(a.substr(1),16))>=0&&e<=16777215?[(16711680&e)>>16,(65280&e)>>8,255&e,1]:null;var l=a.indexOf("("),c=a.indexOf(")");if(-1!==l&&c+1===a.length){var u=a.substr(0,l),h=a.substr(l+1,c-(l+1)).split(","),f=1;switch(u){case"rgba":if(4!==h.length)return null;f=o(h.pop());case"rgb":return 3!==h.length?null:[i(h[0]),i(h[1]),i(h[2]),f];case"hsla":if(4!==h.length)return null;f=o(h.pop());case"hsl":if(3!==h.length)return null;var p=(parseFloat(h[0])%360+360)%360/360,d=o(h[1]),g=o(h[2]),v=g<=.5?g*(d+1):g+d-g*d,m=2*g-v;return[n(255*s(m,v,p+1/3)),n(255*s(m,v,p)),n(255*s(m,v,p-1/3)),f];default:return null}}return null}}catch(t){}}).parseCSSColor,Wt=function(t,e,r,n){void 0===n&&(n=1),this.r=t,this.g=e,this.b=r,this.a=n};Wt.parse=function(t){if(t){if(t instanceof Wt)return t;if("string"==typeof t){var e=Yt(t);if(e)return new Wt(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3])}}},Wt.prototype.toString=function(){var t=this.toArray(),e=t[0],r=t[1],n=t[2],a=t[3];return"rgba("+Math.round(e)+","+Math.round(r)+","+Math.round(n)+","+a+")"},Wt.prototype.toArray=function(){var t=this.r,e=this.g,r=this.b,n=this.a;return 0===n?[0,0,0,0]:[255*t/n,255*e/n,255*r/n,n]},Wt.black=new Wt(0,0,0,1),Wt.white=new Wt(1,1,1,1),Wt.transparent=new Wt(0,0,0,0),Wt.red=new Wt(1,0,0,1);var Xt=function(t,e,r){this.sensitivity=t?e?"variant":"case":e?"accent":"base",this.locale=r,this.collator=new Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:"search"})};Xt.prototype.compare=function(t,e){return this.collator.compare(t,e)},Xt.prototype.resolvedLocale=function(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale};var Zt=function(t,e,r,n){this.text=t,this.scale=e,this.fontStack=r,this.textColor=n},Jt=function(t){this.sections=t};function Kt(t,e,r,n){return"number"==typeof t&&t>=0&&t<=255&&"number"==typeof e&&e>=0&&e<=255&&"number"==typeof r&&r>=0&&r<=255?void 0===n||"number"==typeof n&&n>=0&&n<=1?null:"Invalid rgba value ["+[t,e,r,n].join(", ")+"]: 'a' must be between 0 and 1.":"Invalid rgba value ["+("number"==typeof n?[t,e,r,n]:[t,e,r]).join(", ")+"]: 'r', 'g', and 'b' must be between 0 and 255."}function Qt(t){if(null===t)return zt;if("string"==typeof t)return Dt;if("boolean"==typeof t)return Rt;if("number"==typeof t)return It;if(t instanceof Wt)return Ft;if(t instanceof Xt)return jt;if(t instanceof Jt)return Vt;if(Array.isArray(t)){for(var e,r=t.length,n=0,a=t;n<a.length;n+=1){var i=Qt(a[n]);if(e){if(e===i)continue;e=Nt;break}e=i}return Ut(e||Nt,r)}return Bt}function $t(t){var e=typeof t;return null===t?"":"string"===e||"number"===e||"boolean"===e?String(t):t instanceof Wt||t instanceof Jt?t.toString():JSON.stringify(t)}Jt.fromString=function(t){return new Jt([new Zt(t,null,null,null)])},Jt.prototype.toString=function(){return this.sections.map(function(t){return t.text}).join("")},Jt.prototype.serialize=function(){for(var t=["format"],e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t.push(n.text);var a={};n.fontStack&&(a["text-font"]=["literal",n.fontStack.split(",")]),n.scale&&(a["font-scale"]=n.scale),n.textColor&&(a["text-color"]=["rgba"].concat(n.textColor.toArray())),t.push(a)}return t};var te=function(t,e){this.type=t,this.value=e};te.parse=function(t,e){if(2!==t.length)return e.error("'literal' expression requires exactly one argument, but found "+(t.length-1)+" instead.");if(!function t(e){if(null===e)return!0;if("string"==typeof e)return!0;if("boolean"==typeof e)return!0;if("number"==typeof e)return!0;if(e instanceof Wt)return!0;if(e instanceof Xt)return!0;if(e instanceof Jt)return!0;if(Array.isArray(e)){for(var r=0,n=e;r<n.length;r+=1)if(!t(n[r]))return!1;return!0}if("object"==typeof e){for(var a in e)if(!t(e[a]))return!1;return!0}return!1}(t[1]))return e.error("invalid value");var r=t[1],n=Qt(r),a=e.expectedType;return"array"!==n.kind||0!==n.N||!a||"array"!==a.kind||"number"==typeof a.N&&0!==a.N||(n=a),new te(n,r)},te.prototype.evaluate=function(){return this.value},te.prototype.eachChild=function(){},te.prototype.possibleOutputs=function(){return[this.value]},te.prototype.serialize=function(){return"array"===this.type.kind||"object"===this.type.kind?["literal",this.value]:this.value instanceof Wt?["rgba"].concat(this.value.toArray()):this.value instanceof Jt?this.value.serialize():this.value};var ee=function(t){this.name="ExpressionEvaluationError",this.message=t};ee.prototype.toJSON=function(){return this.message};var re={string:Dt,number:It,boolean:Rt,object:Bt},ne=function(t,e){this.type=t,this.args=e};ne.parse=function(t,e){if(t.length<2)return e.error("Expected at least one argument.");var r,n=1,a=t[0];if("array"===a){var i,o;if(t.length>2){var s=t[1];if("string"!=typeof s||!(s in re)||"object"===s)return e.error('The item type argument of "array" must be one of string, number, boolean',1);i=re[s],n++}else i=Nt;if(t.length>3){if(null!==t[2]&&("number"!=typeof t[2]||t[2]<0||t[2]!==Math.floor(t[2])))return e.error('The length argument to "array" must be a positive integer literal',2);o=t[2],n++}r=Ut(i,o)}else r=re[a];for(var l=[];n<t.length;n++){var c=e.parse(t[n],n,Nt);if(!c)return null;l.push(c)}return new ne(r,l)},ne.prototype.evaluate=function(t){for(var e=0;e<this.args.length;e++){var r=this.args[e].evaluate(t);if(!Gt(this.type,Qt(r)))return r;if(e===this.args.length-1)throw new ee("Expected value to be of type "+qt(this.type)+", but found "+qt(Qt(r))+" instead.")}return null},ne.prototype.eachChild=function(t){this.args.forEach(t)},ne.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.args.map(function(t){return t.possibleOutputs()}))},ne.prototype.serialize=function(){var t=this.type,e=[t.kind];if("array"===t.kind){var r=t.itemType;if("string"===r.kind||"number"===r.kind||"boolean"===r.kind){e.push(r.kind);var n=t.N;("number"==typeof n||this.args.length>1)&&e.push(n)}}return e.concat(this.args.map(function(t){return t.serialize()}))};var ae=function(t){this.type=Vt,this.sections=t};ae.parse=function(t,e){if(t.length<3)return e.error("Expected at least two arguments.");if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");for(var r=[],n=1;n<t.length-1;n+=2){var a=e.parse(t[n],1,Nt);if(!a)return null;var i=a.type.kind;if("string"!==i&&"value"!==i&&"null"!==i)return e.error("Formatted text type must be 'string', 'value', or 'null'.");var o=t[n+1];if("object"!=typeof o||Array.isArray(o))return e.error("Format options argument must be an object.");var s=null;if(o["font-scale"]&&!(s=e.parse(o["font-scale"],1,It)))return null;var l=null;if(o["text-font"]&&!(l=e.parse(o["text-font"],1,Ut(Dt))))return null;var c=null;if(o["text-color"]&&!(c=e.parse(o["text-color"],1,Ft)))return null;r.push({text:a,scale:s,font:l,textColor:c})}return new ae(r)},ae.prototype.evaluate=function(t){return new Jt(this.sections.map(function(e){return new Zt($t(e.text.evaluate(t)),e.scale?e.scale.evaluate(t):null,e.font?e.font.evaluate(t).join(","):null,e.textColor?e.textColor.evaluate(t):null)}))},ae.prototype.eachChild=function(t){for(var e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t(n.text),n.scale&&t(n.scale),n.font&&t(n.font),n.textColor&&t(n.textColor)}},ae.prototype.possibleOutputs=function(){return[void 0]},ae.prototype.serialize=function(){for(var t=["format"],e=0,r=this.sections;e<r.length;e+=1){var n=r[e];t.push(n.text.serialize());var a={};n.scale&&(a["font-scale"]=n.scale.serialize()),n.font&&(a["text-font"]=n.font.serialize()),n.textColor&&(a["text-color"]=n.textColor.serialize()),t.push(a)}return t};var ie={"to-boolean":Rt,"to-color":Ft,"to-number":It,"to-string":Dt},oe=function(t,e){this.type=t,this.args=e};oe.parse=function(t,e){if(t.length<2)return e.error("Expected at least one argument.");var r=t[0];if(("to-boolean"===r||"to-string"===r)&&2!==t.length)return e.error("Expected one argument.");for(var n=ie[r],a=[],i=1;i<t.length;i++){var o=e.parse(t[i],i,Nt);if(!o)return null;a.push(o)}return new oe(n,a)},oe.prototype.evaluate=function(t){if("boolean"===this.type.kind)return Boolean(this.args[0].evaluate(t));if("color"===this.type.kind){for(var e,r,n=0,a=this.args;n<a.length;n+=1){if(r=null,(e=a[n].evaluate(t))instanceof Wt)return e;if("string"==typeof e){var i=t.parseColor(e);if(i)return i}else if(Array.isArray(e)&&!(r=e.length<3||e.length>4?"Invalid rbga value "+JSON.stringify(e)+": expected an array containing either three or four numeric values.":Kt(e[0],e[1],e[2],e[3])))return new Wt(e[0]/255,e[1]/255,e[2]/255,e[3])}throw new ee(r||"Could not parse color from value '"+("string"==typeof e?e:String(JSON.stringify(e)))+"'")}if("number"===this.type.kind){for(var o=null,s=0,l=this.args;s<l.length;s+=1){if(null===(o=l[s].evaluate(t)))return 0;var c=Number(o);if(!isNaN(c))return c}throw new ee("Could not convert "+JSON.stringify(o)+" to number.")}return"formatted"===this.type.kind?Jt.fromString($t(this.args[0].evaluate(t))):$t(this.args[0].evaluate(t))},oe.prototype.eachChild=function(t){this.args.forEach(t)},oe.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.args.map(function(t){return t.possibleOutputs()}))},oe.prototype.serialize=function(){if("formatted"===this.type.kind)return new ae([{text:this.args[0],scale:null,font:null,textColor:null}]).serialize();var t=["to-"+this.type.kind];return this.eachChild(function(e){t.push(e.serialize())}),t};var se=["Unknown","Point","LineString","Polygon"],le=function(){this.globals=null,this.feature=null,this.featureState=null,this.formattedSection=null,this._parseColorCache={}};le.prototype.id=function(){return this.feature&&"id"in this.feature?this.feature.id:null},le.prototype.geometryType=function(){return this.feature?"number"==typeof this.feature.type?se[this.feature.type]:this.feature.type:null},le.prototype.properties=function(){return this.feature&&this.feature.properties||{}},le.prototype.parseColor=function(t){var e=this._parseColorCache[t];return e||(e=this._parseColorCache[t]=Wt.parse(t)),e};var ce=function(t,e,r,n){this.name=t,this.type=e,this._evaluate=r,this.args=n};ce.prototype.evaluate=function(t){return this._evaluate(t,this.args)},ce.prototype.eachChild=function(t){this.args.forEach(t)},ce.prototype.possibleOutputs=function(){return[void 0]},ce.prototype.serialize=function(){return[this.name].concat(this.args.map(function(t){return t.serialize()}))},ce.parse=function(t,e){var r,n=t[0],a=ce.definitions[n];if(!a)return e.error('Unknown expression "'+n+'". If you wanted a literal array, use ["literal", [...]].',0);for(var i=Array.isArray(a)?a[0]:a.type,o=Array.isArray(a)?[[a[1],a[2]]]:a.overloads,s=o.filter(function(e){var r=e[0];return!Array.isArray(r)||r.length===t.length-1}),l=null,c=0,u=s;c<u.length;c+=1){var h=u[c],f=h[0],p=h[1];l=new ge(e.registry,e.path,null,e.scope);for(var d=[],g=!1,v=1;v<t.length;v++){var m=t[v],y=Array.isArray(f)?f[v-1]:f.type,x=l.parse(m,1+d.length,y);if(!x){g=!0;break}d.push(x)}if(!g)if(Array.isArray(f)&&f.length!==d.length)l.error("Expected "+f.length+" arguments, but found "+d.length+" instead.");else{for(var b=0;b<d.length;b++){var _=Array.isArray(f)?f[b]:f.type,w=d[b];l.concat(b+1).checkSubtype(_,w.type)}if(0===l.errors.length)return new ce(n,i,p,d)}}if(1===s.length)(r=e.errors).push.apply(r,l.errors);else{for(var k=(s.length?s:o).map(function(t){var e;return e=t[0],Array.isArray(e)?"("+e.map(qt).join(", ")+")":"("+qt(e.type)+"...)"}).join(" | "),T=[],M=1;M<t.length;M++){var A=e.parse(t[M],1+T.length);if(!A)return null;T.push(qt(A.type))}e.error("Expected arguments of type "+k+", but found ("+T.join(", ")+") instead.")}return null},ce.register=function(t,e){for(var r in ce.definitions=e,e)t[r]=ce};var ue=function(t,e,r){this.type=jt,this.locale=r,this.caseSensitive=t,this.diacriticSensitive=e};function he(t){if(t instanceof ce){if("get"===t.name&&1===t.args.length)return!1;if("feature-state"===t.name)return!1;if("has"===t.name&&1===t.args.length)return!1;if("properties"===t.name||"geometry-type"===t.name||"id"===t.name)return!1;if(/^filter-/.test(t.name))return!1}var e=!0;return t.eachChild(function(t){e&&!he(t)&&(e=!1)}),e}function fe(t){if(t instanceof ce&&"feature-state"===t.name)return!1;var e=!0;return t.eachChild(function(t){e&&!fe(t)&&(e=!1)}),e}function pe(t,e){if(t instanceof ce&&e.indexOf(t.name)>=0)return!1;var r=!0;return t.eachChild(function(t){r&&!pe(t,e)&&(r=!1)}),r}ue.parse=function(t,e){if(2!==t.length)return e.error("Expected one argument.");var r=t[1];if("object"!=typeof r||Array.isArray(r))return e.error("Collator options argument must be an object.");var n=e.parse(void 0!==r["case-sensitive"]&&r["case-sensitive"],1,Rt);if(!n)return null;var a=e.parse(void 0!==r["diacritic-sensitive"]&&r["diacritic-sensitive"],1,Rt);if(!a)return null;var i=null;return r.locale&&!(i=e.parse(r.locale,1,Dt))?null:new ue(n,a,i)},ue.prototype.evaluate=function(t){return new Xt(this.caseSensitive.evaluate(t),this.diacriticSensitive.evaluate(t),this.locale?this.locale.evaluate(t):null)},ue.prototype.eachChild=function(t){t(this.caseSensitive),t(this.diacriticSensitive),this.locale&&t(this.locale)},ue.prototype.possibleOutputs=function(){return[void 0]},ue.prototype.serialize=function(){var t={};return t["case-sensitive"]=this.caseSensitive.serialize(),t["diacritic-sensitive"]=this.diacriticSensitive.serialize(),this.locale&&(t.locale=this.locale.serialize()),["collator",t]};var de=function(t,e){this.type=e.type,this.name=t,this.boundExpression=e};de.parse=function(t,e){if(2!==t.length||"string"!=typeof t[1])return e.error("'var' expression requires exactly one string literal argument.");var r=t[1];return e.scope.has(r)?new de(r,e.scope.get(r)):e.error('Unknown variable "'+r+'". Make sure "'+r+'" has been bound in an enclosing "let" expression before using it.',1)},de.prototype.evaluate=function(t){return this.boundExpression.evaluate(t)},de.prototype.eachChild=function(){},de.prototype.possibleOutputs=function(){return[void 0]},de.prototype.serialize=function(){return["var",this.name]};var ge=function(t,e,r,n,a){void 0===e&&(e=[]),void 0===n&&(n=new Ot),void 0===a&&(a=[]),this.registry=t,this.path=e,this.key=e.map(function(t){return"["+t+"]"}).join(""),this.scope=n,this.errors=a,this.expectedType=r};function ve(t,e){for(var r,n,a=t.length-1,i=0,o=a,s=0;i<=o;)if(r=t[s=Math.floor((i+o)/2)],n=t[s+1],r<=e){if(s===a||e<n)return s;i=s+1}else{if(!(r>e))throw new ee("Input is not a number.");o=s-1}return 0}ge.prototype.parse=function(t,e,r,n,a){return void 0===a&&(a={}),e?this.concat(e,r,n)._parse(t,a):this._parse(t,a)},ge.prototype._parse=function(t,e){function r(t,e,r){return"assert"===r?new ne(e,[t]):"coerce"===r?new oe(e,[t]):t}if(null!==t&&"string"!=typeof t&&"boolean"!=typeof t&&"number"!=typeof t||(t=["literal",t]),Array.isArray(t)){if(0===t.length)return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].');var n=t[0];if("string"!=typeof n)return this.error("Expression name must be a string, but found "+typeof n+' instead. If you wanted a literal array, use ["literal", [...]].',0),null;var a=this.registry[n];if(a){var i=a.parse(t,this);if(!i)return null;if(this.expectedType){var o=this.expectedType,s=i.type;if("string"!==o.kind&&"number"!==o.kind&&"boolean"!==o.kind&&"object"!==o.kind&&"array"!==o.kind||"value"!==s.kind)if("color"!==o.kind&&"formatted"!==o.kind||"value"!==s.kind&&"string"!==s.kind){if(this.checkSubtype(o,s))return null}else i=r(i,o,e.typeAnnotation||"coerce");else i=r(i,o,e.typeAnnotation||"assert")}if(!(i instanceof te)&&function t(e){if(e instanceof de)return t(e.boundExpression);if(e instanceof ce&&"error"===e.name)return!1;if(e instanceof ue)return!1;var r=e instanceof oe||e instanceof ne,n=!0;return e.eachChild(function(e){n=r?n&&t(e):n&&e instanceof te}),!!n&&(he(e)&&pe(e,["zoom","heatmap-density","line-progress","accumulated","is-supported-script"]))}(i)){var l=new le;try{i=new te(i.type,i.evaluate(l))}catch(t){return this.error(t.message),null}}return i}return this.error('Unknown expression "'+n+'". If you wanted a literal array, use ["literal", [...]].',0)}return void 0===t?this.error("'undefined' value invalid. Use null instead."):"object"==typeof t?this.error('Bare objects invalid. Use ["literal", {...}] instead.'):this.error("Expected an array, but found "+typeof t+" instead.")},ge.prototype.concat=function(t,e,r){var n="number"==typeof t?this.path.concat(t):this.path,a=r?this.scope.concat(r):this.scope;return new ge(this.registry,n,e||null,a,this.errors)},ge.prototype.error=function(t){for(var e=[],r=arguments.length-1;r-- >0;)e[r]=arguments[r+1];var n=""+this.key+e.map(function(t){return"["+t+"]"}).join("");this.errors.push(new Pt(n,t))},ge.prototype.checkSubtype=function(t,e){var r=Gt(t,e);return r&&this.error(r),r};var me=function(t,e,r){this.type=t,this.input=e,this.labels=[],this.outputs=[];for(var n=0,a=r;n<a.length;n+=1){var i=a[n],o=i[0],s=i[1];this.labels.push(o),this.outputs.push(s)}};function ye(t,e,r){return t*(1-r)+e*r}me.parse=function(t,e){if(t.length-1<4)return e.error("Expected at least 4 arguments, but found only "+(t.length-1)+".");if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");var r=e.parse(t[1],1,It);if(!r)return null;var n=[],a=null;e.expectedType&&"value"!==e.expectedType.kind&&(a=e.expectedType);for(var i=1;i<t.length;i+=2){var o=1===i?-1/0:t[i],s=t[i+1],l=i,c=i+1;if("number"!=typeof o)return e.error('Input/output pairs for "step" expressions must be defined using literal numeric values (not computed expressions) for the input values.',l);if(n.length&&n[n.length-1][0]>=o)return e.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.',l);var u=e.parse(s,c,a);if(!u)return null;a=a||u.type,n.push([o,u])}return new me(a,r,n)},me.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var a=e.length;return n>=e[a-1]?r[a-1].evaluate(t):r[ve(e,n)].evaluate(t)},me.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e<r.length;e+=1)t(r[e])},me.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.outputs.map(function(t){return t.possibleOutputs()}))},me.prototype.serialize=function(){for(var t=["step",this.input.serialize()],e=0;e<this.labels.length;e++)e>0&&t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t};var xe=Object.freeze({number:ye,color:function(t,e,r){return new Wt(ye(t.r,e.r,r),ye(t.g,e.g,r),ye(t.b,e.b,r),ye(t.a,e.a,r))},array:function(t,e,r){return t.map(function(t,n){return ye(t,e[n],r)})}}),be=.95047,_e=1,we=1.08883,ke=4/29,Te=6/29,Me=3*Te*Te,Ae=Te*Te*Te,Se=Math.PI/180,Ee=180/Math.PI;function Le(t){return t>Ae?Math.pow(t,1/3):t/Me+ke}function Ce(t){return t>Te?t*t*t:Me*(t-ke)}function Pe(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Oe(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function ze(t){var e=Oe(t.r),r=Oe(t.g),n=Oe(t.b),a=Le((.4124564*e+.3575761*r+.1804375*n)/be),i=Le((.2126729*e+.7151522*r+.072175*n)/_e);return{l:116*i-16,a:500*(a-i),b:200*(i-Le((.0193339*e+.119192*r+.9503041*n)/we)),alpha:t.a}}function Ie(t){var e=(t.l+16)/116,r=isNaN(t.a)?e:e+t.a/500,n=isNaN(t.b)?e:e-t.b/200;return e=_e*Ce(e),r=be*Ce(r),n=we*Ce(n),new Wt(Pe(3.2404542*r-1.5371385*e-.4985314*n),Pe(-.969266*r+1.8760108*e+.041556*n),Pe(.0556434*r-.2040259*e+1.0572252*n),t.alpha)}function De(t,e,r){var n=e-t;return t+r*(n>180||n<-180?n-360*Math.round(n/360):n)}var Re={forward:ze,reverse:Ie,interpolate:function(t,e,r){return{l:ye(t.l,e.l,r),a:ye(t.a,e.a,r),b:ye(t.b,e.b,r),alpha:ye(t.alpha,e.alpha,r)}}},Fe={forward:function(t){var e=ze(t),r=e.l,n=e.a,a=e.b,i=Math.atan2(a,n)*Ee;return{h:i<0?i+360:i,c:Math.sqrt(n*n+a*a),l:r,alpha:t.a}},reverse:function(t){var e=t.h*Se,r=t.c;return Ie({l:t.l,a:Math.cos(e)*r,b:Math.sin(e)*r,alpha:t.alpha})},interpolate:function(t,e,r){return{h:De(t.h,e.h,r),c:ye(t.c,e.c,r),l:ye(t.l,e.l,r),alpha:ye(t.alpha,e.alpha,r)}}},Be=Object.freeze({lab:Re,hcl:Fe}),Ne=function(t,e,r,n,a){this.type=t,this.operator=e,this.interpolation=r,this.input=n,this.labels=[],this.outputs=[];for(var i=0,o=a;i<o.length;i+=1){var s=o[i],l=s[0],c=s[1];this.labels.push(l),this.outputs.push(c)}};function je(t,e,r,n){var a=n-r,i=t-r;return 0===a?0:1===e?i/a:(Math.pow(e,i)-1)/(Math.pow(e,a)-1)}Ne.interpolationFactor=function(t,e,n,a){var i=0;if("exponential"===t.name)i=je(e,t.base,n,a);else if("linear"===t.name)i=je(e,1,n,a);else if("cubic-bezier"===t.name){var o=t.controlPoints;i=new r(o[0],o[1],o[2],o[3]).solve(je(e,1,n,a))}return i},Ne.parse=function(t,e){var r=t[0],n=t[1],a=t[2],i=t.slice(3);if(!Array.isArray(n)||0===n.length)return e.error("Expected an interpolation type expression.",1);if("linear"===n[0])n={name:"linear"};else if("exponential"===n[0]){var o=n[1];if("number"!=typeof o)return e.error("Exponential interpolation requires a numeric base.",1,1);n={name:"exponential",base:o}}else{if("cubic-bezier"!==n[0])return e.error("Unknown interpolation type "+String(n[0]),1,0);var s=n.slice(1);if(4!==s.length||s.some(function(t){return"number"!=typeof t||t<0||t>1}))return e.error("Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.",1);n={name:"cubic-bezier",controlPoints:s}}if(t.length-1<4)return e.error("Expected at least 4 arguments, but found only "+(t.length-1)+".");if((t.length-1)%2!=0)return e.error("Expected an even number of arguments.");if(!(a=e.parse(a,2,It)))return null;var l=[],c=null;"interpolate-hcl"===r||"interpolate-lab"===r?c=Ft:e.expectedType&&"value"!==e.expectedType.kind&&(c=e.expectedType);for(var u=0;u<i.length;u+=2){var h=i[u],f=i[u+1],p=u+3,d=u+4;if("number"!=typeof h)return e.error('Input/output pairs for "interpolate" expressions must be defined using literal numeric values (not computed expressions) for the input values.',p);if(l.length&&l[l.length-1][0]>=h)return e.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.',p);var g=e.parse(f,d,c);if(!g)return null;c=c||g.type,l.push([h,g])}return"number"===c.kind||"color"===c.kind||"array"===c.kind&&"number"===c.itemType.kind&&"number"==typeof c.N?new Ne(c,r,n,a,l):e.error("Type "+qt(c)+" is not interpolatable.")},Ne.prototype.evaluate=function(t){var e=this.labels,r=this.outputs;if(1===e.length)return r[0].evaluate(t);var n=this.input.evaluate(t);if(n<=e[0])return r[0].evaluate(t);var a=e.length;if(n>=e[a-1])return r[a-1].evaluate(t);var i=ve(e,n),o=e[i],s=e[i+1],l=Ne.interpolationFactor(this.interpolation,n,o,s),c=r[i].evaluate(t),u=r[i+1].evaluate(t);return"interpolate"===this.operator?xe[this.type.kind.toLowerCase()](c,u,l):"interpolate-hcl"===this.operator?Fe.reverse(Fe.interpolate(Fe.forward(c),Fe.forward(u),l)):Re.reverse(Re.interpolate(Re.forward(c),Re.forward(u),l))},Ne.prototype.eachChild=function(t){t(this.input);for(var e=0,r=this.outputs;e<r.length;e+=1)t(r[e])},Ne.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.outputs.map(function(t){return t.possibleOutputs()}))},Ne.prototype.serialize=function(){var t;t="linear"===this.interpolation.name?["linear"]:"exponential"===this.interpolation.name?1===this.interpolation.base?["linear"]:["exponential",this.interpolation.base]:["cubic-bezier"].concat(this.interpolation.controlPoints);for(var e=[this.operator,t,this.input.serialize()],r=0;r<this.labels.length;r++)e.push(this.labels[r],this.outputs[r].serialize());return e};var Ve=function(t,e){this.type=t,this.args=e};Ve.parse=function(t,e){if(t.length<2)return e.error("Expectected at least one argument.");var r=null,n=e.expectedType;n&&"value"!==n.kind&&(r=n);for(var a=[],i=0,o=t.slice(1);i<o.length;i+=1){var s=o[i],l=e.parse(s,1+a.length,r,void 0,{typeAnnotation:"omit"});if(!l)return null;r=r||l.type,a.push(l)}var c=n&&a.some(function(t){return Gt(n,t.type)});return new Ve(c?Nt:r,a)},Ve.prototype.evaluate=function(t){for(var e=null,r=0,n=this.args;r<n.length&&null===(e=n[r].evaluate(t));r+=1);return e},Ve.prototype.eachChild=function(t){this.args.forEach(t)},Ve.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.args.map(function(t){return t.possibleOutputs()}))},Ve.prototype.serialize=function(){var t=["coalesce"];return this.eachChild(function(e){t.push(e.serialize())}),t};var Ue=function(t,e){this.type=e.type,this.bindings=[].concat(t),this.result=e};Ue.prototype.evaluate=function(t){return this.result.evaluate(t)},Ue.prototype.eachChild=function(t){for(var e=0,r=this.bindings;e<r.length;e+=1)t(r[e][1]);t(this.result)},Ue.parse=function(t,e){if(t.length<4)return e.error("Expected at least 3 arguments, but found "+(t.length-1)+" instead.");for(var r=[],n=1;n<t.length-1;n+=2){var a=t[n];if("string"!=typeof a)return e.error("Expected string, but found "+typeof a+" instead.",n);if(/[^a-zA-Z0-9_]/.test(a))return e.error("Variable names must contain only alphanumeric characters or '_'.",n);var i=e.parse(t[n+1],n+1);if(!i)return null;r.push([a,i])}var o=e.parse(t[t.length-1],t.length-1,e.expectedType,r);return o?new Ue(r,o):null},Ue.prototype.possibleOutputs=function(){return this.result.possibleOutputs()},Ue.prototype.serialize=function(){for(var t=["let"],e=0,r=this.bindings;e<r.length;e+=1){var n=r[e],a=n[0],i=n[1];t.push(a,i.serialize())}return t.push(this.result.serialize()),t};var qe=function(t,e,r){this.type=t,this.index=e,this.input=r};qe.parse=function(t,e){if(3!==t.length)return e.error("Expected 2 arguments, but found "+(t.length-1)+" instead.");var r=e.parse(t[1],1,It),n=e.parse(t[2],2,Ut(e.expectedType||Nt));if(!r||!n)return null;var a=n.type;return new qe(a.itemType,r,n)},qe.prototype.evaluate=function(t){var e=this.index.evaluate(t),r=this.input.evaluate(t);if(e<0)throw new ee("Array index out of bounds: "+e+" < 0.");if(e>=r.length)throw new ee("Array index out of bounds: "+e+" > "+(r.length-1)+".");if(e!==Math.floor(e))throw new ee("Array index must be an integer, but found "+e+" instead.");return r[e]},qe.prototype.eachChild=function(t){t(this.index),t(this.input)},qe.prototype.possibleOutputs=function(){return[void 0]},qe.prototype.serialize=function(){return["at",this.index.serialize(),this.input.serialize()]};var He=function(t,e,r,n,a,i){this.inputType=t,this.type=e,this.input=r,this.cases=n,this.outputs=a,this.otherwise=i};He.parse=function(t,e){if(t.length<5)return e.error("Expected at least 4 arguments, but found only "+(t.length-1)+".");if(t.length%2!=1)return e.error("Expected an even number of arguments.");var r,n;e.expectedType&&"value"!==e.expectedType.kind&&(n=e.expectedType);for(var a={},i=[],o=2;o<t.length-1;o+=2){var s=t[o],l=t[o+1];Array.isArray(s)||(s=[s]);var c=e.concat(o);if(0===s.length)return c.error("Expected at least one branch label.");for(var u=0,h=s;u<h.length;u+=1){var f=h[u];if("number"!=typeof f&&"string"!=typeof f)return c.error("Branch labels must be numbers or strings.");if("number"==typeof f&&Math.abs(f)>Number.MAX_SAFE_INTEGER)return c.error("Branch labels must be integers no larger than "+Number.MAX_SAFE_INTEGER+".");if("number"==typeof f&&Math.floor(f)!==f)return c.error("Numeric branch labels must be integer values.");if(r){if(c.checkSubtype(r,Qt(f)))return null}else r=Qt(f);if(void 0!==a[String(f)])return c.error("Branch labels must be unique.");a[String(f)]=i.length}var p=e.parse(l,o,n);if(!p)return null;n=n||p.type,i.push(p)}var d=e.parse(t[1],1,Nt);if(!d)return null;var g=e.parse(t[t.length-1],t.length-1,n);return g?"value"!==d.type.kind&&e.concat(1).checkSubtype(r,d.type)?null:new He(r,n,d,a,i,g):null},He.prototype.evaluate=function(t){var e=this.input.evaluate(t);return(Qt(e)===this.inputType&&this.outputs[this.cases[e]]||this.otherwise).evaluate(t)},He.prototype.eachChild=function(t){t(this.input),this.outputs.forEach(t),t(this.otherwise)},He.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.outputs.map(function(t){return t.possibleOutputs()})).concat(this.otherwise.possibleOutputs())},He.prototype.serialize=function(){for(var t=this,e=["match",this.input.serialize()],r=[],n={},a=0,i=Object.keys(this.cases).sort();a<i.length;a+=1){var o=i[a];void 0===(h=n[this.cases[o]])?(n[this.cases[o]]=r.length,r.push([this.cases[o],[o]])):r[h][1].push(o)}for(var s=function(e){return"number"===t.inputType.kind?Number(e):e},l=0,c=r;l<c.length;l+=1){var u=c[l],h=u[0],f=u[1];1===f.length?e.push(s(f[0])):e.push(f.map(s)),e.push(this.outputs[outputIndex$1].serialize())}return e.push(this.otherwise.serialize()),e};var Ge=function(t,e,r){this.type=t,this.branches=e,this.otherwise=r};function Ye(t,e){return"=="===t||"!="===t?"boolean"===e.kind||"string"===e.kind||"number"===e.kind||"null"===e.kind||"value"===e.kind:"string"===e.kind||"number"===e.kind||"value"===e.kind}function We(t,e,r,n){return 0===n.compare(e,r)}function Xe(t,e,r){var n="=="!==t&&"!="!==t;return function(){function a(t,e,r){this.type=Rt,this.lhs=t,this.rhs=e,this.collator=r,this.hasUntypedArgument="value"===t.type.kind||"value"===e.type.kind}return a.parse=function(t,e){if(3!==t.length&&4!==t.length)return e.error("Expected two or three arguments.");var r=t[0],i=e.parse(t[1],1,Nt);if(!i)return null;if(!Ye(r,i.type))return e.concat(1).error('"'+r+"\" comparisons are not supported for type '"+qt(i.type)+"'.");var o=e.parse(t[2],2,Nt);if(!o)return null;if(!Ye(r,o.type))return e.concat(2).error('"'+r+"\" comparisons are not supported for type '"+qt(o.type)+"'.");if(i.type.kind!==o.type.kind&&"value"!==i.type.kind&&"value"!==o.type.kind)return e.error("Cannot compare types '"+qt(i.type)+"' and '"+qt(o.type)+"'.");n&&("value"===i.type.kind&&"value"!==o.type.kind?i=new ne(o.type,[i]):"value"!==i.type.kind&&"value"===o.type.kind&&(o=new ne(i.type,[o])));var s=null;if(4===t.length){if("string"!==i.type.kind&&"string"!==o.type.kind&&"value"!==i.type.kind&&"value"!==o.type.kind)return e.error("Cannot use collator to compare non-string types.");if(!(s=e.parse(t[3],3,jt)))return null}return new a(i,o,s)},a.prototype.evaluate=function(a){var i=this.lhs.evaluate(a),o=this.rhs.evaluate(a);if(n&&this.hasUntypedArgument){var s=Qt(i),l=Qt(o);if(s.kind!==l.kind||"string"!==s.kind&&"number"!==s.kind)throw new ee('Expected arguments for "'+t+'" to be (string, string) or (number, number), but found ('+s.kind+", "+l.kind+") instead.")}if(this.collator&&!n&&this.hasUntypedArgument){var c=Qt(i),u=Qt(o);if("string"!==c.kind||"string"!==u.kind)return e(a,i,o)}return this.collator?r(a,i,o,this.collator.evaluate(a)):e(a,i,o)},a.prototype.eachChild=function(t){t(this.lhs),t(this.rhs),this.collator&&t(this.collator)},a.prototype.possibleOutputs=function(){return[!0,!1]},a.prototype.serialize=function(){var e=[t];return this.eachChild(function(t){e.push(t.serialize())}),e},a}()}Ge.parse=function(t,e){if(t.length<4)return e.error("Expected at least 3 arguments, but found only "+(t.length-1)+".");if(t.length%2!=0)return e.error("Expected an odd number of arguments.");var r;e.expectedType&&"value"!==e.expectedType.kind&&(r=e.expectedType);for(var n=[],a=1;a<t.length-1;a+=2){var i=e.parse(t[a],a,Rt);if(!i)return null;var o=e.parse(t[a+1],a+1,r);if(!o)return null;n.push([i,o]),r=r||o.type}var s=e.parse(t[t.length-1],t.length-1,r);return s?new Ge(r,n,s):null},Ge.prototype.evaluate=function(t){for(var e=0,r=this.branches;e<r.length;e+=1){var n=r[e],a=n[0],i=n[1];if(a.evaluate(t))return i.evaluate(t)}return this.otherwise.evaluate(t)},Ge.prototype.eachChild=function(t){for(var e=0,r=this.branches;e<r.length;e+=1){var n=r[e],a=n[0],i=n[1];t(a),t(i)}t(this.otherwise)},Ge.prototype.possibleOutputs=function(){var t;return(t=[]).concat.apply(t,this.branches.map(function(t){return t[0],t[1].possibleOutputs()})).concat(this.otherwise.possibleOutputs())},Ge.prototype.serialize=function(){var t=["case"];return this.eachChild(function(e){t.push(e.serialize())}),t};var Ze=Xe("==",function(t,e,r){return e===r},We),Je=Xe("!=",function(t,e,r){return e!==r},function(t,e,r,n){return!We(0,e,r,n)}),Ke=Xe("<",function(t,e,r){return e<r},function(t,e,r,n){return n.compare(e,r)<0}),Qe=Xe(">",function(t,e,r){return e>r},function(t,e,r,n){return n.compare(e,r)>0}),$e=Xe("<=",function(t,e,r){return e<=r},function(t,e,r,n){return n.compare(e,r)<=0}),tr=Xe(">=",function(t,e,r){return e>=r},function(t,e,r,n){return n.compare(e,r)>=0}),er=function(t,e,r,n,a){this.type=Dt,this.number=t,this.locale=e,this.currency=r,this.minFractionDigits=n,this.maxFractionDigits=a};er.parse=function(t,e){if(3!==t.length)return e.error("Expected two arguments.");var r=e.parse(t[1],1,It);if(!r)return null;var n=t[2];if("object"!=typeof n||Array.isArray(n))return e.error("NumberFormat options argument must be an object.");var a=null;if(n.locale&&!(a=e.parse(n.locale,1,Dt)))return null;var i=null;if(n.currency&&!(i=e.parse(n.currency,1,Dt)))return null;var o=null;if(n["min-fraction-digits"]&&!(o=e.parse(n["min-fraction-digits"],1,It)))return null;var s=null;return n["max-fraction-digits"]&&!(s=e.parse(n["max-fraction-digits"],1,It))?null:new er(r,a,i,o,s)},er.prototype.evaluate=function(t){return new Intl.NumberFormat(this.locale?this.locale.evaluate(t):[],{style:this.currency?"currency":"decimal",currency:this.currency?this.currency.evaluate(t):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(t):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(t):void 0}).format(this.number.evaluate(t))},er.prototype.eachChild=function(t){t(this.number),this.locale&&t(this.locale),this.currency&&t(this.currency),this.minFractionDigits&&t(this.minFractionDigits),this.maxFractionDigits&&t(this.maxFractionDigits)},er.prototype.possibleOutputs=function(){return[void 0]},er.prototype.serialize=function(){var t={};return this.locale&&(t.locale=this.locale.serialize()),this.currency&&(t.currency=this.currency.serialize()),this.minFractionDigits&&(t["min-fraction-digits"]=this.minFractionDigits.serialize()),this.maxFractionDigits&&(t["max-fraction-digits"]=this.maxFractionDigits.serialize()),["number-format",this.number.serialize(),t]};var rr=function(t){this.type=It,this.input=t};rr.parse=function(t,e){if(2!==t.length)return e.error("Expected 1 argument, but found "+(t.length-1)+" instead.");var r=e.parse(t[1],1);return r?"array"!==r.type.kind&&"string"!==r.type.kind&&"value"!==r.type.kind?e.error("Expected argument of type string or array, but found "+qt(r.type)+" instead."):new rr(r):null},rr.prototype.evaluate=function(t){var e=this.input.evaluate(t);if("string"==typeof e)return e.length;if(Array.isArray(e))return e.length;throw new ee("Expected value to be of type string or array, but found "+qt(Qt(e))+" instead.")},rr.prototype.eachChild=function(t){t(this.input)},rr.prototype.possibleOutputs=function(){return[void 0]},rr.prototype.serialize=function(){var t=["length"];return this.eachChild(function(e){t.push(e.serialize())}),t};var nr={"==":Ze,"!=":Je,">":Qe,"<":Ke,">=":tr,"<=":$e,array:ne,at:qe,boolean:ne,case:Ge,coalesce:Ve,collator:ue,format:ae,interpolate:Ne,"interpolate-hcl":Ne,"interpolate-lab":Ne,length:rr,let:Ue,literal:te,match:He,number:ne,"number-format":er,object:ne,step:me,string:ne,"to-boolean":oe,"to-color":oe,"to-number":oe,"to-string":oe,var:de};function ar(t,e){var r=e[0],n=e[1],a=e[2],i=e[3];r=r.evaluate(t),n=n.evaluate(t),a=a.evaluate(t);var o=i?i.evaluate(t):1,s=Kt(r,n,a,o);if(s)throw new ee(s);return new Wt(r/255*o,n/255*o,a/255*o,o)}function ir(t,e){return t in e}function or(t,e){var r=e[t];return void 0===r?null:r}function sr(t){return{type:t}}function lr(t){return{result:"success",value:t}}function cr(t){return{result:"error",value:t}}function ur(t){return"data-driven"===t["property-type"]||"cross-faded-data-driven"===t["property-type"]}function hr(t){return!!t.expression&&t.expression.parameters.indexOf("zoom")>-1}function fr(t){return!!t.expression&&t.expression.interpolated}function pr(t){return t instanceof Number?"number":t instanceof String?"string":t instanceof Boolean?"boolean":Array.isArray(t)?"array":null===t?"null":typeof t}function dr(t){return"object"==typeof t&&null!==t&&!Array.isArray(t)}function gr(t){return t}function vr(t,e,r){return void 0!==t?t:void 0!==e?e:void 0!==r?r:void 0}function mr(t,e,r,n,a){return vr(typeof r===a?n[r]:void 0,t.default,e.default)}function yr(t,e,r){if("number"!==pr(r))return vr(t.default,e.default);var n=t.stops.length;if(1===n)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[n-1][0])return t.stops[n-1][1];var a=ve(t.stops.map(function(t){return t[0]}),r);return t.stops[a][1]}function xr(t,e,r){var n=void 0!==t.base?t.base:1;if("number"!==pr(r))return vr(t.default,e.default);var a=t.stops.length;if(1===a)return t.stops[0][1];if(r<=t.stops[0][0])return t.stops[0][1];if(r>=t.stops[a-1][0])return t.stops[a-1][1];var i=ve(t.stops.map(function(t){return t[0]}),r),o=function(t,e,r,n){var a=n-r,i=t-r;return 0===a?0:1===e?i/a:(Math.pow(e,i)-1)/(Math.pow(e,a)-1)}(r,n,t.stops[i][0],t.stops[i+1][0]),s=t.stops[i][1],l=t.stops[i+1][1],c=xe[e.type]||gr;if(t.colorSpace&&"rgb"!==t.colorSpace){var u=Be[t.colorSpace];c=function(t,e){return u.reverse(u.interpolate(u.forward(t),u.forward(e),o))}}return"function"==typeof s.evaluate?{evaluate:function(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var r=s.evaluate.apply(void 0,t),n=l.evaluate.apply(void 0,t);if(void 0!==r&&void 0!==n)return c(r,n,o)}}:c(s,l,o)}function br(t,e,r){return"color"===e.type?r=Wt.parse(r):"formatted"===e.type?r=Jt.fromString(r.toString()):pr(r)===e.type||"enum"===e.type&&e.values[r]||(r=void 0),vr(r,t.default,e.default)}ce.register(nr,{error:[{kind:"error"},[Dt],function(t,e){var r=e[0];throw new ee(r.evaluate(t))}],typeof:[Dt,[Nt],function(t,e){return qt(Qt(e[0].evaluate(t)))}],"to-rgba":[Ut(It,4),[Ft],function(t,e){return e[0].evaluate(t).toArray()}],rgb:[Ft,[It,It,It],ar],rgba:[Ft,[It,It,It,It],ar],has:{type:Rt,overloads:[[[Dt],function(t,e){return ir(e[0].evaluate(t),t.properties())}],[[Dt,Bt],function(t,e){var r=e[0],n=e[1];return ir(r.evaluate(t),n.evaluate(t))}]]},get:{type:Nt,overloads:[[[Dt],function(t,e){return or(e[0].evaluate(t),t.properties())}],[[Dt,Bt],function(t,e){var r=e[0],n=e[1];return or(r.evaluate(t),n.evaluate(t))}]]},"feature-state":[Nt,[Dt],function(t,e){return or(e[0].evaluate(t),t.featureState||{})}],properties:[Bt,[],function(t){return t.properties()}],"geometry-type":[Dt,[],function(t){return t.geometryType()}],id:[Nt,[],function(t){return t.id()}],zoom:[It,[],function(t){return t.globals.zoom}],"heatmap-density":[It,[],function(t){return t.globals.heatmapDensity||0}],"line-progress":[It,[],function(t){return t.globals.lineProgress||0}],accumulated:[Nt,[],function(t){return void 0===t.globals.accumulated?null:t.globals.accumulated}],"+":[It,sr(It),function(t,e){for(var r=0,n=0,a=e;n<a.length;n+=1)r+=a[n].evaluate(t);return r}],"*":[It,sr(It),function(t,e){for(var r=1,n=0,a=e;n<a.length;n+=1)r*=a[n].evaluate(t);return r}],"-":{type:It,overloads:[[[It,It],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)-n.evaluate(t)}],[[It],function(t,e){return-e[0].evaluate(t)}]]},"/":[It,[It,It],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)/n.evaluate(t)}],"%":[It,[It,It],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)%n.evaluate(t)}],ln2:[It,[],function(){return Math.LN2}],pi:[It,[],function(){return Math.PI}],e:[It,[],function(){return Math.E}],"^":[It,[It,It],function(t,e){var r=e[0],n=e[1];return Math.pow(r.evaluate(t),n.evaluate(t))}],sqrt:[It,[It],function(t,e){var r=e[0];return Math.sqrt(r.evaluate(t))}],log10:[It,[It],function(t,e){var r=e[0];return Math.log(r.evaluate(t))/Math.LN10}],ln:[It,[It],function(t,e){var r=e[0];return Math.log(r.evaluate(t))}],log2:[It,[It],function(t,e){var r=e[0];return Math.log(r.evaluate(t))/Math.LN2}],sin:[It,[It],function(t,e){var r=e[0];return Math.sin(r.evaluate(t))}],cos:[It,[It],function(t,e){var r=e[0];return Math.cos(r.evaluate(t))}],tan:[It,[It],function(t,e){var r=e[0];return Math.tan(r.evaluate(t))}],asin:[It,[It],function(t,e){var r=e[0];return Math.asin(r.evaluate(t))}],acos:[It,[It],function(t,e){var r=e[0];return Math.acos(r.evaluate(t))}],atan:[It,[It],function(t,e){var r=e[0];return Math.atan(r.evaluate(t))}],min:[It,sr(It),function(t,e){return Math.min.apply(Math,e.map(function(e){return e.evaluate(t)}))}],max:[It,sr(It),function(t,e){return Math.max.apply(Math,e.map(function(e){return e.evaluate(t)}))}],abs:[It,[It],function(t,e){var r=e[0];return Math.abs(r.evaluate(t))}],round:[It,[It],function(t,e){var r=e[0].evaluate(t);return r<0?-Math.round(-r):Math.round(r)}],floor:[It,[It],function(t,e){var r=e[0];return Math.floor(r.evaluate(t))}],ceil:[It,[It],function(t,e){var r=e[0];return Math.ceil(r.evaluate(t))}],"filter-==":[Rt,[Dt,Nt],function(t,e){var r=e[0],n=e[1];return t.properties()[r.value]===n.value}],"filter-id-==":[Rt,[Nt],function(t,e){var r=e[0];return t.id()===r.value}],"filter-type-==":[Rt,[Dt],function(t,e){var r=e[0];return t.geometryType()===r.value}],"filter-<":[Rt,[Dt,Nt],function(t,e){var r=e[0],n=e[1],a=t.properties()[r.value],i=n.value;return typeof a==typeof i&&a<i}],"filter-id-<":[Rt,[Nt],function(t,e){var r=e[0],n=t.id(),a=r.value;return typeof n==typeof a&&n<a}],"filter->":[Rt,[Dt,Nt],function(t,e){var r=e[0],n=e[1],a=t.properties()[r.value],i=n.value;return typeof a==typeof i&&a>i}],"filter-id->":[Rt,[Nt],function(t,e){var r=e[0],n=t.id(),a=r.value;return typeof n==typeof a&&n>a}],"filter-<=":[Rt,[Dt,Nt],function(t,e){var r=e[0],n=e[1],a=t.properties()[r.value],i=n.value;return typeof a==typeof i&&a<=i}],"filter-id-<=":[Rt,[Nt],function(t,e){var r=e[0],n=t.id(),a=r.value;return typeof n==typeof a&&n<=a}],"filter->=":[Rt,[Dt,Nt],function(t,e){var r=e[0],n=e[1],a=t.properties()[r.value],i=n.value;return typeof a==typeof i&&a>=i}],"filter-id->=":[Rt,[Nt],function(t,e){var r=e[0],n=t.id(),a=r.value;return typeof n==typeof a&&n>=a}],"filter-has":[Rt,[Nt],function(t,e){return e[0].value in t.properties()}],"filter-has-id":[Rt,[],function(t){return null!==t.id()}],"filter-type-in":[Rt,[Ut(Dt)],function(t,e){return e[0].value.indexOf(t.geometryType())>=0}],"filter-id-in":[Rt,[Ut(Nt)],function(t,e){return e[0].value.indexOf(t.id())>=0}],"filter-in-small":[Rt,[Dt,Ut(Nt)],function(t,e){var r=e[0];return e[1].value.indexOf(t.properties()[r.value])>=0}],"filter-in-large":[Rt,[Dt,Ut(Nt)],function(t,e){var r=e[0],n=e[1];return function(t,e,r,n){for(;r<=n;){var a=r+n>>1;if(e[a]===t)return!0;e[a]>t?n=a-1:r=a+1}return!1}(t.properties()[r.value],n.value,0,n.value.length-1)}],all:{type:Rt,overloads:[[[Rt,Rt],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)&&n.evaluate(t)}],[sr(Rt),function(t,e){for(var r=0,n=e;r<n.length;r+=1)if(!n[r].evaluate(t))return!1;return!0}]]},any:{type:Rt,overloads:[[[Rt,Rt],function(t,e){var r=e[0],n=e[1];return r.evaluate(t)||n.evaluate(t)}],[sr(Rt),function(t,e){for(var r=0,n=e;r<n.length;r+=1)if(n[r].evaluate(t))return!0;return!1}]]},"!":[Rt,[Rt],function(t,e){return!e[0].evaluate(t)}],"is-supported-script":[Rt,[Dt],function(t,e){var r=e[0],n=t.globals&&t.globals.isSupportedScript;return!n||n(r.evaluate(t))}],upcase:[Dt,[Dt],function(t,e){return e[0].evaluate(t).toUpperCase()}],downcase:[Dt,[Dt],function(t,e){return e[0].evaluate(t).toLowerCase()}],concat:[Dt,sr(Nt),function(t,e){return e.map(function(e){return $t(e.evaluate(t))}).join("")}],"resolved-locale":[Dt,[jt],function(t,e){return e[0].evaluate(t).resolvedLocale()}]});var _r=function(t,e){this.expression=t,this._warningHistory={},this._evaluator=new le,this._defaultValue=e?function(t){return"color"===t.type&&dr(t.default)?new Wt(0,0,0,0):"color"===t.type?Wt.parse(t.default)||null:void 0===t.default?null:t.default}(e):null,this._enumValues=e&&"enum"===e.type?e.values:null};function wr(t){return Array.isArray(t)&&t.length>0&&"string"==typeof t[0]&&t[0]in nr}function kr(t,e){var r=new ge(nr,[],e?function(t){var e={color:Ft,string:Dt,number:It,enum:Dt,boolean:Rt,formatted:Vt};return"array"===t.type?Ut(e[t.value]||Nt,t.length):e[t.type]}(e):void 0),n=r.parse(t,void 0,void 0,void 0,e&&"string"===e.type?{typeAnnotation:"coerce"}:void 0);return n?lr(new _r(n,e)):cr(r.errors)}_r.prototype.evaluateWithoutErrorHandling=function(t,e,r,n){return this._evaluator.globals=t,this._evaluator.feature=e,this._evaluator.featureState=r,this._evaluator.formattedSection=n,this.expression.evaluate(this._evaluator)},_r.prototype.evaluate=function(t,e,r,n){this._evaluator.globals=t,this._evaluator.feature=e||null,this._evaluator.featureState=r||null,this._evaluator.formattedSection=n||null;try{var a=this.expression.evaluate(this._evaluator);if(null==a)return this._defaultValue;if(this._enumValues&&!(a in this._enumValues))throw new ee("Expected value to be one of "+Object.keys(this._enumValues).map(function(t){return JSON.stringify(t)}).join(", ")+", but found "+JSON.stringify(a)+" instead.");return a}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]=!0,"undefined"!=typeof console&&console.warn(t.message)),this._defaultValue}};var Tr=function(t,e){this.kind=t,this._styleExpression=e,this.isStateDependent="constant"!==t&&!fe(e.expression)};Tr.prototype.evaluateWithoutErrorHandling=function(t,e,r,n){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n)},Tr.prototype.evaluate=function(t,e,r,n){return this._styleExpression.evaluate(t,e,r,n)};var Mr=function(t,e,r,n){this.kind=t,this.zoomStops=r,this._styleExpression=e,this.isStateDependent="camera"!==t&&!fe(e.expression),this.interpolationType=n};function Ar(t,e){if("error"===(t=kr(t,e)).result)return t;var r=t.value.expression,n=he(r);if(!n&&!ur(e))return cr([new Pt("","data expressions not supported")]);var a=pe(r,["zoom"]);if(!a&&!hr(e))return cr([new Pt("","zoom expressions not supported")]);var i=function t(e){var r=null;if(e instanceof Ue)r=t(e.result);else if(e instanceof Ve)for(var n=0,a=e.args;n<a.length;n+=1){var i=a[n];if(r=t(i))break}else(e instanceof me||e instanceof Ne)&&e.input instanceof ce&&"zoom"===e.input.name&&(r=e);return r instanceof Pt?r:(e.eachChild(function(e){var n=t(e);n instanceof Pt?r=n:!r&&n?r=new Pt("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.'):r&&n&&r!==n&&(r=new Pt("",'Only one zoom-based "step" or "interpolate" subexpression may be used in an expression.'))}),r)}(r);if(!i&&!a)return cr([new Pt("",'"zoom" expression may only be used as input to a top-level "step" or "interpolate" expression.')]);if(i instanceof Pt)return cr([i]);if(i instanceof Ne&&!fr(e))return cr([new Pt("",'"interpolate" expressions cannot be used with this property')]);if(!i)return lr(new Tr(n?"constant":"source",t.value));var o=i instanceof Ne?i.interpolation:void 0;return lr(new Mr(n?"camera":"composite",t.value,i.labels,o))}Mr.prototype.evaluateWithoutErrorHandling=function(t,e,r,n){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n)},Mr.prototype.evaluate=function(t,e,r,n){return this._styleExpression.evaluate(t,e,r,n)},Mr.prototype.interpolationFactor=function(t,e,r){return this.interpolationType?Ne.interpolationFactor(this.interpolationType,t,e,r):0};var Sr=function(t,e){this._parameters=t,this._specification=e,St(this,function t(e,r){var n,a,i,o="color"===r.type,s=e.stops&&"object"==typeof e.stops[0][0],l=s||void 0!==e.property,c=s||!l,u=e.type||(fr(r)?"exponential":"interval");if(o&&((e=St({},e)).stops&&(e.stops=e.stops.map(function(t){return[t[0],Wt.parse(t[1])]})),e.default?e.default=Wt.parse(e.default):e.default=Wt.parse(r.default)),e.colorSpace&&"rgb"!==e.colorSpace&&!Be[e.colorSpace])throw new Error("Unknown color space: "+e.colorSpace);if("exponential"===u)n=xr;else if("interval"===u)n=yr;else if("categorical"===u){n=mr,a=Object.create(null);for(var h=0,f=e.stops;h<f.length;h+=1){var p=f[h];a[p[0]]=p[1]}i=typeof e.stops[0][0]}else{if("identity"!==u)throw new Error('Unknown function type "'+u+'"');n=br}if(s){for(var d={},g=[],v=0;v<e.stops.length;v++){var m=e.stops[v],y=m[0].zoom;void 0===d[y]&&(d[y]={zoom:y,type:e.type,property:e.property,default:e.default,stops:[]},g.push(y)),d[y].stops.push([m[0].value,m[1]])}for(var x=[],b=0,_=g;b<_.length;b+=1){var w=_[b];x.push([d[w].zoom,t(d[w],r)])}var k={name:"linear"};return{kind:"composite",interpolationType:k,interpolationFactor:Ne.interpolationFactor.bind(void 0,k),zoomStops:x.map(function(t){return t[0]}),evaluate:function(t,n){var a=t.zoom;return xr({stops:x,base:e.base},r,a).evaluate(a,n)}}}if(c){var T="exponential"===u?{name:"exponential",base:void 0!==e.base?e.base:1}:null;return{kind:"camera",interpolationType:T,interpolationFactor:Ne.interpolationFactor.bind(void 0,T),zoomStops:e.stops.map(function(t){return t[0]}),evaluate:function(t){var o=t.zoom;return n(e,r,o,a,i)}}}return{kind:"source",evaluate:function(t,o){var s=o&&o.properties?o.properties[e.property]:void 0;return void 0===s?vr(e.default,r.default):n(e,r,s,a,i)}}}(this._parameters,this._specification))};function Er(t){var e=t.key,r=t.value,n=t.valueSpec||{},a=t.objectElementValidators||{},i=t.style,o=t.styleSpec,s=[],l=pr(r);if("object"!==l)return[new Mt(e,r,"object expected, "+l+" found")];for(var c in r){var u=c.split(".")[0],h=n[u]||n["*"],f=void 0;if(a[u])f=a[u];else if(n[u])f=Qr;else if(a["*"])f=a["*"];else{if(!n["*"]){s.push(new Mt(e,r[c],'unknown property "'+c+'"'));continue}f=Qr}s=s.concat(f({key:(e?e+".":e)+c,value:r[c],valueSpec:h,style:i,styleSpec:o,object:r,objectKey:c},r))}for(var p in n)a[p]||n[p].required&&void 0===n[p].default&&void 0===r[p]&&s.push(new Mt(e,r,'missing required property "'+p+'"'));return s}function Lr(t){var e=t.value,r=t.valueSpec,n=t.style,a=t.styleSpec,i=t.key,o=t.arrayElementValidator||Qr;if("array"!==pr(e))return[new Mt(i,e,"array expected, "+pr(e)+" found")];if(r.length&&e.length!==r.length)return[new Mt(i,e,"array length "+r.length+" expected, length "+e.length+" found")];if(r["min-length"]&&e.length<r["min-length"])return[new Mt(i,e,"array length at least "+r["min-length"]+" expected, length "+e.length+" found")];var s={type:r.value,values:r.values};a.$version<7&&(s.function=r.function),"object"===pr(r.value)&&(s=r.value);for(var l=[],c=0;c<e.length;c++)l=l.concat(o({array:e,arrayIndex:c,value:e[c],valueSpec:s,style:n,styleSpec:a,key:i+"["+c+"]"}));return l}function Cr(t){var e=t.key,r=t.value,n=t.valueSpec,a=pr(r);return"number"!==a?[new Mt(e,r,"number expected, "+a+" found")]:"minimum"in n&&r<n.minimum?[new Mt(e,r,r+" is less than the minimum value "+n.minimum)]:"maximum"in n&&r>n.maximum?[new Mt(e,r,r+" is greater than the maximum value "+n.maximum)]:[]}function Pr(t){var e,r,n,a=t.valueSpec,i=Lt(t.value.type),o={},s="categorical"!==i&&void 0===t.value.property,l=!s,c="array"===pr(t.value.stops)&&"array"===pr(t.value.stops[0])&&"object"===pr(t.value.stops[0][0]),u=Er({key:t.key,value:t.value,valueSpec:t.styleSpec.function,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:function(t){if("identity"===i)return[new Mt(t.key,t.value,'identity function may not have a "stops" property')];var e=[],r=t.value;return e=e.concat(Lr({key:t.key,value:r,valueSpec:t.valueSpec,style:t.style,styleSpec:t.styleSpec,arrayElementValidator:h})),"array"===pr(r)&&0===r.length&&e.push(new Mt(t.key,r,"array must have at least one stop")),e},default:function(t){return Qr({key:t.key,value:t.value,valueSpec:a,style:t.style,styleSpec:t.styleSpec})}}});return"identity"===i&&s&&u.push(new Mt(t.key,t.value,'missing required property "property"')),"identity"===i||t.value.stops||u.push(new Mt(t.key,t.value,'missing required property "stops"')),"exponential"===i&&t.valueSpec.expression&&!fr(t.valueSpec)&&u.push(new Mt(t.key,t.value,"exponential functions not supported")),t.styleSpec.$version>=8&&(l&&!ur(t.valueSpec)?u.push(new Mt(t.key,t.value,"property functions not supported")):s&&!hr(t.valueSpec)&&u.push(new Mt(t.key,t.value,"zoom functions not supported"))),"categorical"!==i&&!c||void 0!==t.value.property||u.push(new Mt(t.key,t.value,'"property" property is required')),u;function h(t){var e=[],i=t.value,s=t.key;if("array"!==pr(i))return[new Mt(s,i,"array expected, "+pr(i)+" found")];if(2!==i.length)return[new Mt(s,i,"array length 2 expected, length "+i.length+" found")];if(c){if("object"!==pr(i[0]))return[new Mt(s,i,"object expected, "+pr(i[0])+" found")];if(void 0===i[0].zoom)return[new Mt(s,i,"object stop key must have zoom")];if(void 0===i[0].value)return[new Mt(s,i,"object stop key must have value")];if(n&&n>Lt(i[0].zoom))return[new Mt(s,i[0].zoom,"stop zoom values must appear in ascending order")];Lt(i[0].zoom)!==n&&(n=Lt(i[0].zoom),r=void 0,o={}),e=e.concat(Er({key:s+"[0]",value:i[0],valueSpec:{zoom:{}},style:t.style,styleSpec:t.styleSpec,objectElementValidators:{zoom:Cr,value:f}}))}else e=e.concat(f({key:s+"[0]",value:i[0],valueSpec:{},style:t.style,styleSpec:t.styleSpec},i));return wr(Ct(i[1]))?e.concat([new Mt(s+"[1]",i[1],"expressions are not allowed in function stops.")]):e.concat(Qr({key:s+"[1]",value:i[1],valueSpec:a,style:t.style,styleSpec:t.styleSpec}))}function f(t,n){var s=pr(t.value),l=Lt(t.value),c=null!==t.value?t.value:n;if(e){if(s!==e)return[new Mt(t.key,c,s+" stop domain type must match previous stop domain type "+e)]}else e=s;if("number"!==s&&"string"!==s&&"boolean"!==s)return[new Mt(t.key,c,"stop domain value must be a number, string, or boolean")];if("number"!==s&&"categorical"!==i){var u="number expected, "+s+" found";return ur(a)&&void 0===i&&(u+='\nIf you intended to use a categorical function, specify `"type": "categorical"`.'),[new Mt(t.key,c,u)]}return"categorical"!==i||"number"!==s||isFinite(l)&&Math.floor(l)===l?"categorical"!==i&&"number"===s&&void 0!==r&&l<r?[new Mt(t.key,c,"stop domain values must appear in ascending order")]:(r=l,"categorical"===i&&l in o?[new Mt(t.key,c,"stop domain values must be unique")]:(o[l]=!0,[])):[new Mt(t.key,c,"integer expected, found "+l)]}}function Or(t){var e=("property"===t.expressionContext?Ar:kr)(Ct(t.value),t.valueSpec);if("error"===e.result)return e.value.map(function(e){return new Mt(""+t.key+e.key,t.value,e.message)});var r=e.value.expression||e.value._styleExpression.expression;if("property"===t.expressionContext&&"text-font"===t.propertyKey&&-1!==r.possibleOutputs().indexOf(void 0))return[new Mt(t.key,t.value,'Invalid data expression for "'+t.propertyKey+'". Output values must be contained as literals within the expression.')];if("property"===t.expressionContext&&"layout"===t.propertyType&&!fe(r))return[new Mt(t.key,t.value,'"feature-state" data expressions are not supported with layout properties.')];if("filter"===t.expressionContext&&!fe(r))return[new Mt(t.key,t.value,'"feature-state" data expressions are not supported with filters.')];if(t.expressionContext&&0===t.expressionContext.indexOf("cluster")){if(!pe(r,["zoom","feature-state"]))return[new Mt(t.key,t.value,'"zoom" and "feature-state" expressions are not supported with cluster properties.')];if("cluster-initial"===t.expressionContext&&!he(r))return[new Mt(t.key,t.value,"Feature data expressions are not supported with initial expression part of cluster properties.")]}return[]}function zr(t){var e=t.key,r=t.value,n=t.valueSpec,a=[];return Array.isArray(n.values)?-1===n.values.indexOf(Lt(r))&&a.push(new Mt(e,r,"expected one of ["+n.values.join(", ")+"], "+JSON.stringify(r)+" found")):-1===Object.keys(n.values).indexOf(Lt(r))&&a.push(new Mt(e,r,"expected one of ["+Object.keys(n.values).join(", ")+"], "+JSON.stringify(r)+" found")),a}function Ir(t){if(!0===t||!1===t)return!0;if(!Array.isArray(t)||0===t.length)return!1;switch(t[0]){case"has":return t.length>=2&&"$id"!==t[1]&&"$type"!==t[1];case"in":case"!in":case"!has":case"none":return!1;case"==":case"!=":case">":case">=":case"<":case"<=":return 3!==t.length||Array.isArray(t[1])||Array.isArray(t[2]);case"any":case"all":for(var e=0,r=t.slice(1);e<r.length;e+=1){var n=r[e];if(!Ir(n)&&"boolean"!=typeof n)return!1}return!0;default:return!0}}Sr.deserialize=function(t){return new Sr(t._parameters,t._specification)},Sr.serialize=function(t){return{_parameters:t._parameters,_specification:t._specification}};var Dr={type:"boolean",default:!1,transition:!1,"property-type":"data-driven",expression:{interpolated:!1,parameters:["zoom","feature"]}};function Rr(t){if(null==t)return function(){return!0};Ir(t)||(t=Br(t));var e=kr(t,Dr);if("error"===e.result)throw new Error(e.value.map(function(t){return t.key+": "+t.message}).join(", "));return function(t,r){return e.value.evaluate(t,r)}}function Fr(t,e){return t<e?-1:t>e?1:0}function Br(t){if(!t)return!0;var e,r=t[0];return t.length<=1?"any"!==r:"=="===r?Nr(t[1],t[2],"=="):"!="===r?Ur(Nr(t[1],t[2],"==")):"<"===r||">"===r||"<="===r||">="===r?Nr(t[1],t[2],r):"any"===r?(e=t.slice(1),["any"].concat(e.map(Br))):"all"===r?["all"].concat(t.slice(1).map(Br)):"none"===r?["all"].concat(t.slice(1).map(Br).map(Ur)):"in"===r?jr(t[1],t.slice(2)):"!in"===r?Ur(jr(t[1],t.slice(2))):"has"===r?Vr(t[1]):"!has"!==r||Ur(Vr(t[1]))}function Nr(t,e,r){switch(t){case"$type":return["filter-type-"+r,e];case"$id":return["filter-id-"+r,e];default:return["filter-"+r,t,e]}}function jr(t,e){if(0===e.length)return!1;switch(t){case"$type":return["filter-type-in",["literal",e]];case"$id":return["filter-id-in",["literal",e]];default:return e.length>200&&!e.some(function(t){return typeof t!=typeof e[0]})?["filter-in-large",t,["literal",e.sort(Fr)]]:["filter-in-small",t,["literal",e]]}}function Vr(t){switch(t){case"$type":return!0;case"$id":return["filter-has-id"];default:return["filter-has",t]}}function Ur(t){return["!",t]}function qr(t){return Ir(Ct(t.value))?Or(St({},t,{expressionContext:"filter",valueSpec:{value:"boolean"}})):function t(e){var r=e.value,n=e.key;if("array"!==pr(r))return[new Mt(n,r,"array expected, "+pr(r)+" found")];var a,i=e.styleSpec,o=[];if(r.length<1)return[new Mt(n,r,"filter array must have at least 1 element")];switch(o=o.concat(zr({key:n+"[0]",value:r[0],valueSpec:i.filter_operator,style:e.style,styleSpec:e.styleSpec})),Lt(r[0])){case"<":case"<=":case">":case">=":r.length>=2&&"$type"===Lt(r[1])&&o.push(new Mt(n,r,'"$type" cannot be use with operator "'+r[0]+'"'));case"==":case"!=":3!==r.length&&o.push(new Mt(n,r,'filter array for operator "'+r[0]+'" must have 3 elements'));case"in":case"!in":r.length>=2&&"string"!==(a=pr(r[1]))&&o.push(new Mt(n+"[1]",r[1],"string expected, "+a+" found"));for(var s=2;s<r.length;s++)a=pr(r[s]),"$type"===Lt(r[1])?o=o.concat(zr({key:n+"["+s+"]",value:r[s],valueSpec:i.geometry_type,style:e.style,styleSpec:e.styleSpec})):"string"!==a&&"number"!==a&&"boolean"!==a&&o.push(new Mt(n+"["+s+"]",r[s],"string, number, or boolean expected, "+a+" found"));break;case"any":case"all":case"none":for(var l=1;l<r.length;l++)o=o.concat(t({key:n+"["+l+"]",value:r[l],style:e.style,styleSpec:e.styleSpec}));break;case"has":case"!has":a=pr(r[1]),2!==r.length?o.push(new Mt(n,r,'filter array for "'+r[0]+'" operator must have 2 elements')):"string"!==a&&o.push(new Mt(n+"[1]",r[1],"string expected, "+a+" found"))}return o}(t)}function Hr(t,e){var r=t.key,n=t.style,a=t.styleSpec,i=t.value,o=t.objectKey,s=a[e+"_"+t.layerType];if(!s)return[];var l=o.match(/^(.*)-transition$/);if("paint"===e&&l&&s[l[1]]&&s[l[1]].transition)return Qr({key:r,value:i,valueSpec:a.transition,style:n,styleSpec:a});var c,u=t.valueSpec||s[o];if(!u)return[new Mt(r,i,'unknown property "'+o+'"')];if("string"===pr(i)&&ur(u)&&!u.tokens&&(c=/^{([^}]+)}$/.exec(i)))return[new Mt(r,i,'"'+o+'" does not support interpolation syntax\nUse an identity property function instead: `{ "type": "identity", "property": '+JSON.stringify(c[1])+" }`.")];var h=[];return"symbol"===t.layerType&&("text-field"===o&&n&&!n.glyphs&&h.push(new Mt(r,i,'use of "text-field" requires a style "glyphs" property')),"text-font"===o&&dr(Ct(i))&&"identity"===Lt(i.type)&&h.push(new Mt(r,i,'"text-font" does not support identity functions'))),h.concat(Qr({key:t.key,value:i,valueSpec:u,style:n,styleSpec:a,expressionContext:"property",propertyType:e,propertyKey:o}))}function Gr(t){return Hr(t,"paint")}function Yr(t){return Hr(t,"layout")}function Wr(t){var e=[],r=t.value,n=t.key,a=t.style,i=t.styleSpec;r.type||r.ref||e.push(new Mt(n,r,'either "type" or "ref" is required'));var o,s=Lt(r.type),l=Lt(r.ref);if(r.id)for(var c=Lt(r.id),u=0;u<t.arrayIndex;u++){var h=a.layers[u];Lt(h.id)===c&&e.push(new Mt(n,r.id,'duplicate layer id "'+r.id+'", previously used at line '+h.id.__line__))}if("ref"in r)["type","source","source-layer","filter","layout"].forEach(function(t){t in r&&e.push(new Mt(n,r[t],'"'+t+'" is prohibited for ref layers'))}),a.layers.forEach(function(t){Lt(t.id)===l&&(o=t)}),o?o.ref?e.push(new Mt(n,r.ref,"ref cannot reference another ref layer")):s=Lt(o.type):e.push(new Mt(n,r.ref,'ref layer "'+l+'" not found'));else if("background"!==s)if(r.source){var f=a.sources&&a.sources[r.source],p=f&&Lt(f.type);f?"vector"===p&&"raster"===s?e.push(new Mt(n,r.source,'layer "'+r.id+'" requires a raster source')):"raster"===p&&"raster"!==s?e.push(new Mt(n,r.source,'layer "'+r.id+'" requires a vector source')):"vector"!==p||r["source-layer"]?"raster-dem"===p&&"hillshade"!==s?e.push(new Mt(n,r.source,"raster-dem source can only be used with layer type 'hillshade'.")):"line"!==s||!r.paint||!r.paint["line-gradient"]||"geojson"===p&&f.lineMetrics||e.push(new Mt(n,r,'layer "'+r.id+'" specifies a line-gradient, which requires a GeoJSON source with `lineMetrics` enabled.')):e.push(new Mt(n,r,'layer "'+r.id+'" must specify a "source-layer"')):e.push(new Mt(n,r.source,'source "'+r.source+'" not found'))}else e.push(new Mt(n,r,'missing required property "source"'));return e=e.concat(Er({key:n,value:r,valueSpec:i.layer,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{"*":function(){return[]},type:function(){return Qr({key:n+".type",value:r.type,valueSpec:i.layer.type,style:t.style,styleSpec:t.styleSpec,object:r,objectKey:"type"})},filter:qr,layout:function(t){return Er({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{"*":function(t){return Yr(St({layerType:s},t))}}})},paint:function(t){return Er({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{"*":function(t){return Gr(St({layerType:s},t))}}})}}}))}function Xr(t){var e=t.value,r=t.key,n=t.styleSpec,a=t.style;if(!e.type)return[new Mt(r,e,'"type" is required')];var i,o=Lt(e.type);switch(o){case"vector":case"raster":case"raster-dem":return Er({key:r,value:e,valueSpec:n["source_"+o.replace("-","_")],style:t.style,styleSpec:n});case"geojson":if(i=Er({key:r,value:e,valueSpec:n.source_geojson,style:a,styleSpec:n}),e.cluster)for(var s in e.clusterProperties){var l=e.clusterProperties[s],c=l[0],u=l[1],h="string"==typeof c?[c,["accumulated"],["get",s]]:c;i.push.apply(i,Or({key:r+"."+s+".map",value:u,expressionContext:"cluster-map"})),i.push.apply(i,Or({key:r+"."+s+".reduce",value:h,expressionContext:"cluster-reduce"}))}return i;case"video":return Er({key:r,value:e,valueSpec:n.source_video,style:a,styleSpec:n});case"image":return Er({key:r,value:e,valueSpec:n.source_image,style:a,styleSpec:n});case"canvas":return[new Mt(r,null,"Please use runtime APIs to add canvas sources, rather than including them in stylesheets.","source.canvas")];default:return zr({key:r+".type",value:e.type,valueSpec:{values:["vector","raster","raster-dem","geojson","video","image"]},style:a,styleSpec:n})}}function Zr(t){var e=t.value,r=t.styleSpec,n=r.light,a=t.style,i=[],o=pr(e);if(void 0===e)return i;if("object"!==o)return i.concat([new Mt("light",e,"object expected, "+o+" found")]);for(var s in e){var l=s.match(/^(.*)-transition$/);i=l&&n[l[1]]&&n[l[1]].transition?i.concat(Qr({key:s,value:e[s],valueSpec:r.transition,style:a,styleSpec:r})):n[s]?i.concat(Qr({key:s,value:e[s],valueSpec:n[s],style:a,styleSpec:r})):i.concat([new Mt(s,e[s],'unknown property "'+s+'"')])}return i}function Jr(t){var e=t.value,r=t.key,n=pr(e);return"string"!==n?[new Mt(r,e,"string expected, "+n+" found")]:[]}var Kr={"*":function(){return[]},array:Lr,boolean:function(t){var e=t.value,r=t.key,n=pr(e);return"boolean"!==n?[new Mt(r,e,"boolean expected, "+n+" found")]:[]},number:Cr,color:function(t){var e=t.key,r=t.value,n=pr(r);return"string"!==n?[new Mt(e,r,"color expected, "+n+" found")]:null===Yt(r)?[new Mt(e,r,'color expected, "'+r+'" found')]:[]},constants:At,enum:zr,filter:qr,function:Pr,layer:Wr,object:Er,source:Xr,light:Zr,string:Jr,formatted:function(t){return 0===Jr(t).length?[]:Or(t)}};function Qr(t){var e=t.value,r=t.valueSpec,n=t.styleSpec;return r.expression&&dr(Lt(e))?Pr(t):r.expression&&wr(Ct(e))?Or(t):r.type&&Kr[r.type]?Kr[r.type](t):Er(St({},t,{valueSpec:r.type?n[r.type]:r}))}function $r(t){var e=t.value,r=t.key,n=Jr(t);return n.length?n:(-1===e.indexOf("{fontstack}")&&n.push(new Mt(r,e,'"glyphs" url must include a "{fontstack}" token')),-1===e.indexOf("{range}")&&n.push(new Mt(r,e,'"glyphs" url must include a "{range}" token')),n)}function tn(t,e){e=e||Tt;var r=[];return r=r.concat(Qr({key:"",value:t,valueSpec:e.$root,styleSpec:e,style:t,objectElementValidators:{glyphs:$r,"*":function(){return[]}}})),t.constants&&(r=r.concat(At({key:"constants",value:t.constants,style:t,styleSpec:e}))),en(r)}function en(t){return[].concat(t).sort(function(t,e){return t.line-e.line})}function rn(t){return function(){for(var e=[],r=arguments.length;r--;)e[r]=arguments[r];return en(t.apply(this,e))}}tn.source=rn(Xr),tn.light=rn(Zr),tn.layer=rn(Wr),tn.filter=rn(qr),tn.paintProperty=rn(Gr),tn.layoutProperty=rn(Yr);var nn=tn,an=nn.light,on=nn.paintProperty,sn=nn.layoutProperty;function ln(t,e){var r=!1;if(e&&e.length)for(var n=0,a=e;n<a.length;n+=1){var i=a[n];t.fire(new wt(new Error(i.message))),r=!0}return r}var cn=hn,un=3;function hn(t,e,r){var n=this.cells=[];if(t instanceof ArrayBuffer){this.arrayBuffer=t;var a=new Int32Array(this.arrayBuffer);t=a[0],e=a[1],r=a[2],this.d=e+2*r;for(var i=0;i<this.d*this.d;i++){var o=a[un+i],s=a[un+i+1];n.push(o===s?null:a.subarray(o,s))}var l=a[un+n.length],c=a[un+n.length+1];this.keys=a.subarray(l,c),this.bboxes=a.subarray(c),this.insert=this._insertReadonly}else{this.d=e+2*r;for(var u=0;u<this.d*this.d;u++)n.push([]);this.keys=[],this.bboxes=[]}this.n=e,this.extent=t,this.padding=r,this.scale=e/t,this.uid=0;var h=r/e*t;this.min=-h,this.max=t+h}hn.prototype.insert=function(t,e,r,n,a){this._forEachCell(e,r,n,a,this._insertCell,this.uid++),this.keys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(n),this.bboxes.push(a)},hn.prototype._insertReadonly=function(){throw"Cannot insert into a GridIndex created from an ArrayBuffer."},hn.prototype._insertCell=function(t,e,r,n,a,i){this.cells[a].push(i)},hn.prototype.query=function(t,e,r,n,a){var i=this.min,o=this.max;if(t<=i&&e<=i&&o<=r&&o<=n&&!a)return Array.prototype.slice.call(this.keys);var s=[];return this._forEachCell(t,e,r,n,this._queryCell,s,{},a),s},hn.prototype._queryCell=function(t,e,r,n,a,i,o,s){var l=this.cells[a];if(null!==l)for(var c=this.keys,u=this.bboxes,h=0;h<l.length;h++){var f=l[h];if(void 0===o[f]){var p=4*f;(s?s(u[p+0],u[p+1],u[p+2],u[p+3]):t<=u[p+2]&&e<=u[p+3]&&r>=u[p+0]&&n>=u[p+1])?(o[f]=!0,i.push(c[f])):o[f]=!1}}},hn.prototype._forEachCell=function(t,e,r,n,a,i,o,s){for(var l=this._convertToCellCoord(t),c=this._convertToCellCoord(e),u=this._convertToCellCoord(r),h=this._convertToCellCoord(n),f=l;f<=u;f++)for(var p=c;p<=h;p++){var d=this.d*p+f;if((!s||s(this._convertFromCellCoord(f),this._convertFromCellCoord(p),this._convertFromCellCoord(f+1),this._convertFromCellCoord(p+1)))&&a.call(this,t,e,r,n,d,i,o,s))return}},hn.prototype._convertFromCellCoord=function(t){return(t-this.padding)/this.scale},hn.prototype._convertToCellCoord=function(t){return Math.max(0,Math.min(this.d-1,Math.floor(t*this.scale)+this.padding))},hn.prototype.toArrayBuffer=function(){if(this.arrayBuffer)return this.arrayBuffer;for(var t=this.cells,e=un+this.cells.length+1+1,r=0,n=0;n<this.cells.length;n++)r+=this.cells[n].length;var a=new Int32Array(e+r+this.keys.length+this.bboxes.length);a[0]=this.extent,a[1]=this.n,a[2]=this.padding;for(var i=e,o=0;o<t.length;o++){var s=t[o];a[un+o]=i,a.set(s,i),i+=s.length}return a[un+t.length]=i,a.set(this.keys,i),i+=this.keys.length,a[un+t.length+1]=i,a.set(this.bboxes,i),i+=this.bboxes.length,a.buffer};var fn=self.ImageData,pn={};function dn(t,e,r){void 0===r&&(r={}),Object.defineProperty(e,"_classRegistryKey",{value:t,writeable:!1}),pn[t]={klass:e,omit:r.omit||[],shallow:r.shallow||[]}}for(var gn in dn("Object",Object),cn.serialize=function(t,e){var r=t.toArrayBuffer();return e&&e.push(r),{buffer:r}},cn.deserialize=function(t){return new cn(t.buffer)},dn("Grid",cn),dn("Color",Wt),dn("Error",Error),dn("StylePropertyFunction",Sr),dn("StyleExpression",_r,{omit:["_evaluator"]}),dn("ZoomDependentExpression",Mr),dn("ZoomConstantExpression",Tr),dn("CompoundExpression",ce,{omit:["_evaluate"]}),nr)nr[gn]._classRegistryKey||dn("Expression_"+gn,nr[gn]);function vn(t,e){if(null==t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp)return t;if(t instanceof ArrayBuffer)return e&&e.push(t),t;if(ArrayBuffer.isView(t)){var r=t;return e&&e.push(r.buffer),r}if(t instanceof fn)return e&&e.push(t.data.buffer),t;if(Array.isArray(t)){for(var n=[],a=0,i=t;a<i.length;a+=1){var o=i[a];n.push(vn(o,e))}return n}if("object"==typeof t){var s=t.constructor,l=s._classRegistryKey;if(!l)throw new Error("can't serialize object of unregistered class");var c=s.serialize?s.serialize(t,e):{};if(!s.serialize){for(var u in t)if(t.hasOwnProperty(u)&&!(pn[l].omit.indexOf(u)>=0)){var h=t[u];c[u]=pn[l].shallow.indexOf(u)>=0?h:vn(h,e)}t instanceof Error&&(c.message=t.message)}if(c.$name)throw new Error("$name property is reserved for worker serialization logic.");return"Object"!==l&&(c.$name=l),c}throw new Error("can't serialize object of type "+typeof t)}function mn(t){if(null==t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp||t instanceof ArrayBuffer||ArrayBuffer.isView(t)||t instanceof fn)return t;if(Array.isArray(t))return t.map(mn);if("object"==typeof t){var e=t.$name||"Object",r=pn[e].klass;if(!r)throw new Error("can't deserialize unregistered class "+e);if(r.deserialize)return r.deserialize(t);for(var n=Object.create(r.prototype),a=0,i=Object.keys(t);a<i.length;a+=1){var o=i[a];if("$name"!==o){var s=t[o];n[o]=pn[e].shallow.indexOf(o)>=0?s:mn(s)}}return n}throw new Error("can't deserialize object of type "+typeof t)}var yn=function(){this.first=!0};yn.prototype.update=function(t,e){var r=Math.floor(t);return this.first?(this.first=!1,this.lastIntegerZoom=r,this.lastIntegerZoomTime=0,this.lastZoom=t,this.lastFloorZoom=r,!0):(this.lastFloorZoom>r?(this.lastIntegerZoom=r+1,this.lastIntegerZoomTime=e):this.lastFloorZoom<r&&(this.lastIntegerZoom=r,this.lastIntegerZoomTime=e),t!==this.lastZoom&&(this.lastZoom=t,this.lastFloorZoom=r,!0))};var xn={"Latin-1 Supplement":function(t){return t>=128&&t<=255},Arabic:function(t){return t>=1536&&t<=1791},"Arabic Supplement":function(t){return t>=1872&&t<=1919},"Arabic Extended-A":function(t){return t>=2208&&t<=2303},"Hangul Jamo":function(t){return t>=4352&&t<=4607},"Unified Canadian Aboriginal Syllabics":function(t){return t>=5120&&t<=5759},Khmer:function(t){return t>=6016&&t<=6143},"Unified Canadian Aboriginal Syllabics Extended":function(t){return t>=6320&&t<=6399},"General Punctuation":function(t){return t>=8192&&t<=8303},"Letterlike Symbols":function(t){return t>=8448&&t<=8527},"Number Forms":function(t){return t>=8528&&t<=8591},"Miscellaneous Technical":function(t){return t>=8960&&t<=9215},"Control Pictures":function(t){return t>=9216&&t<=9279},"Optical Character Recognition":function(t){return t>=9280&&t<=9311},"Enclosed Alphanumerics":function(t){return t>=9312&&t<=9471},"Geometric Shapes":function(t){return t>=9632&&t<=9727},"Miscellaneous Symbols":function(t){return t>=9728&&t<=9983},"Miscellaneous Symbols and Arrows":function(t){return t>=11008&&t<=11263},"CJK Radicals Supplement":function(t){return t>=11904&&t<=12031},"Kangxi Radicals":function(t){return t>=12032&&t<=12255},"Ideographic Description Characters":function(t){return t>=12272&&t<=12287},"CJK Symbols and Punctuation":function(t){return t>=12288&&t<=12351},Hiragana:function(t){return t>=12352&&t<=12447},Katakana:function(t){return t>=12448&&t<=12543},Bopomofo:function(t){return t>=12544&&t<=12591},"Hangul Compatibility Jamo":function(t){return t>=12592&&t<=12687},Kanbun:function(t){return t>=12688&&t<=12703},"Bopomofo Extended":function(t){return t>=12704&&t<=12735},"CJK Strokes":function(t){return t>=12736&&t<=12783},"Katakana Phonetic Extensions":function(t){return t>=12784&&t<=12799},"Enclosed CJK Letters and Months":function(t){return t>=12800&&t<=13055},"CJK Compatibility":function(t){return t>=13056&&t<=13311},"CJK Unified Ideographs Extension A":function(t){return t>=13312&&t<=19903},"Yijing Hexagram Symbols":function(t){return t>=19904&&t<=19967},"CJK Unified Ideographs":function(t){return t>=19968&&t<=40959},"Yi Syllables":function(t){return t>=40960&&t<=42127},"Yi Radicals":function(t){return t>=42128&&t<=42191},"Hangul Jamo Extended-A":function(t){return t>=43360&&t<=43391},"Hangul Syllables":function(t){return t>=44032&&t<=55215},"Hangul Jamo Extended-B":function(t){return t>=55216&&t<=55295},"Private Use Area":function(t){return t>=57344&&t<=63743},"CJK Compatibility Ideographs":function(t){return t>=63744&&t<=64255},"Arabic Presentation Forms-A":function(t){return t>=64336&&t<=65023},"Vertical Forms":function(t){return t>=65040&&t<=65055},"CJK Compatibility Forms":function(t){return t>=65072&&t<=65103},"Small Form Variants":function(t){return t>=65104&&t<=65135},"Arabic Presentation Forms-B":function(t){return t>=65136&&t<=65279},"Halfwidth and Fullwidth Forms":function(t){return t>=65280&&t<=65519}};function bn(t){for(var e=0,r=t;e<r.length;e+=1)if(wn(r[e].charCodeAt(0)))return!0;return!1}function _n(t){return!(xn.Arabic(t)||xn["Arabic Supplement"](t)||xn["Arabic Extended-A"](t)||xn["Arabic Presentation Forms-A"](t)||xn["Arabic Presentation Forms-B"](t))}function wn(t){return!!(746===t||747===t||!(t<4352)&&(xn["Bopomofo Extended"](t)||xn.Bopomofo(t)||xn["CJK Compatibility Forms"](t)&&!(t>=65097&&t<=65103)||xn["CJK Compatibility Ideographs"](t)||xn["CJK Compatibility"](t)||xn["CJK Radicals Supplement"](t)||xn["CJK Strokes"](t)||!(!xn["CJK Symbols and Punctuation"](t)||t>=12296&&t<=12305||t>=12308&&t<=12319||12336===t)||xn["CJK Unified Ideographs Extension A"](t)||xn["CJK Unified Ideographs"](t)||xn["Enclosed CJK Letters and Months"](t)||xn["Hangul Compatibility Jamo"](t)||xn["Hangul Jamo Extended-A"](t)||xn["Hangul Jamo Extended-B"](t)||xn["Hangul Jamo"](t)||xn["Hangul Syllables"](t)||xn.Hiragana(t)||xn["Ideographic Description Characters"](t)||xn.Kanbun(t)||xn["Kangxi Radicals"](t)||xn["Katakana Phonetic Extensions"](t)||xn.Katakana(t)&&12540!==t||!(!xn["Halfwidth and Fullwidth Forms"](t)||65288===t||65289===t||65293===t||t>=65306&&t<=65310||65339===t||65341===t||65343===t||t>=65371&&t<=65503||65507===t||t>=65512&&t<=65519)||!(!xn["Small Form Variants"](t)||t>=65112&&t<=65118||t>=65123&&t<=65126)||xn["Unified Canadian Aboriginal Syllabics"](t)||xn["Unified Canadian Aboriginal Syllabics Extended"](t)||xn["Vertical Forms"](t)||xn["Yijing Hexagram Symbols"](t)||xn["Yi Syllables"](t)||xn["Yi Radicals"](t)))}function kn(t){return!(wn(t)||function(t){return!!(xn["Latin-1 Supplement"](t)&&(167===t||169===t||174===t||177===t||188===t||189===t||190===t||215===t||247===t)||xn["General Punctuation"](t)&&(8214===t||8224===t||8225===t||8240===t||8241===t||8251===t||8252===t||8258===t||8263===t||8264===t||8265===t||8273===t)||xn["Letterlike Symbols"](t)||xn["Number Forms"](t)||xn["Miscellaneous Technical"](t)&&(t>=8960&&t<=8967||t>=8972&&t<=8991||t>=8996&&t<=9e3||9003===t||t>=9085&&t<=9114||t>=9150&&t<=9165||9167===t||t>=9169&&t<=9179||t>=9186&&t<=9215)||xn["Control Pictures"](t)&&9251!==t||xn["Optical Character Recognition"](t)||xn["Enclosed Alphanumerics"](t)||xn["Geometric Shapes"](t)||xn["Miscellaneous Symbols"](t)&&!(t>=9754&&t<=9759)||xn["Miscellaneous Symbols and Arrows"](t)&&(t>=11026&&t<=11055||t>=11088&&t<=11097||t>=11192&&t<=11243)||xn["CJK Symbols and Punctuation"](t)||xn.Katakana(t)||xn["Private Use Area"](t)||xn["CJK Compatibility Forms"](t)||xn["Small Form Variants"](t)||xn["Halfwidth and Fullwidth Forms"](t)||8734===t||8756===t||8757===t||t>=9984&&t<=10087||t>=10102&&t<=10131||65532===t||65533===t)}(t))}function Tn(t,e){return!(!e&&(t>=1424&&t<=2303||xn["Arabic Presentation Forms-A"](t)||xn["Arabic Presentation Forms-B"](t))||t>=2304&&t<=3583||t>=3840&&t<=4255||xn.Khmer(t))}var Mn,An=!1,Sn=null,En=!1,Ln=new kt,Cn={applyArabicShaping:null,processBidirectionalText:null,processStyledBidirectionalText:null,isLoaded:function(){return En||null!=Cn.applyArabicShaping}},Pn=function(t,e){this.zoom=t,e?(this.now=e.now,this.fadeDuration=e.fadeDuration,this.zoomHistory=e.zoomHistory,this.transition=e.transition):(this.now=0,this.fadeDuration=0,this.zoomHistory=new yn,this.transition={})};Pn.prototype.isSupportedScript=function(t){return function(t,e){for(var r=0,n=t;r<n.length;r+=1)if(!Tn(n[r].charCodeAt(0),e))return!1;return!0}(t,Cn.isLoaded())},Pn.prototype.crossFadingFactor=function(){return 0===this.fadeDuration?1:Math.min((this.now-this.zoomHistory.lastIntegerZoomTime)/this.fadeDuration,1)},Pn.prototype.getCrossfadeParameters=function(){var t=this.zoom,e=t-Math.floor(t),r=this.crossFadingFactor();return t>this.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:e+(1-e)*r}:{fromScale:.5,toScale:1,t:1-(1-r)*e}};var On=function(t,e){this.property=t,this.value=e,this.expression=function(t,e){if(dr(t))return new Sr(t,e);if(wr(t)){var r=Ar(t,e);if("error"===r.result)throw new Error(r.value.map(function(t){return t.key+": "+t.message}).join(", "));return r.value}var n=t;return"string"==typeof t&&"color"===e.type&&(n=Wt.parse(t)),{kind:"constant",evaluate:function(){return n}}}(void 0===e?t.specification.default:e,t.specification)};On.prototype.isDataDriven=function(){return"source"===this.expression.kind||"composite"===this.expression.kind},On.prototype.possiblyEvaluate=function(t){return this.property.possiblyEvaluate(this,t)};var zn=function(t){this.property=t,this.value=new On(t,void 0)};zn.prototype.transitioned=function(t,e){return new Dn(this.property,this.value,e,h({},t.transition,this.transition),t.now)},zn.prototype.untransitioned=function(){return new Dn(this.property,this.value,null,{},0)};var In=function(t){this._properties=t,this._values=Object.create(t.defaultTransitionablePropertyValues)};In.prototype.getValue=function(t){return b(this._values[t].value.value)},In.prototype.setValue=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new zn(this._values[t].property)),this._values[t].value=new On(this._values[t].property,null===e?void 0:b(e))},In.prototype.getTransition=function(t){return b(this._values[t].transition)},In.prototype.setTransition=function(t,e){this._values.hasOwnProperty(t)||(this._values[t]=new zn(this._values[t].property)),this._values[t].transition=b(e)||void 0},In.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e],a=this.getValue(n);void 0!==a&&(t[n]=a);var i=this.getTransition(n);void 0!==i&&(t[n+"-transition"]=i)}return t},In.prototype.transitioned=function(t,e){for(var r=new Rn(this._properties),n=0,a=Object.keys(this._values);n<a.length;n+=1){var i=a[n];r._values[i]=this._values[i].transitioned(t,e._values[i])}return r},In.prototype.untransitioned=function(){for(var t=new Rn(this._properties),e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e];t._values[n]=this._values[n].untransitioned()}return t};var Dn=function(t,e,r,n,a){this.property=t,this.value=e,this.begin=a+n.delay||0,this.end=this.begin+n.duration||0,t.specification.transition&&(n.delay||n.duration)&&(this.prior=r)};Dn.prototype.possiblyEvaluate=function(t){var e=t.now||0,r=this.value.possiblyEvaluate(t),n=this.prior;if(n){if(e>this.end)return this.prior=null,r;if(this.value.isDataDriven())return this.prior=null,r;if(e<this.begin)return n.possiblyEvaluate(t);var a=(e-this.begin)/(this.end-this.begin);return this.property.interpolate(n.possiblyEvaluate(t),r,function(t){if(a<=0)return 0;if(a>=1)return 1;var e=a*a,r=e*a;return 4*(a<.5?r:3*(a-e)+r-.75)}())}return r};var Rn=function(t){this._properties=t,this._values=Object.create(t.defaultTransitioningPropertyValues)};Rn.prototype.possiblyEvaluate=function(t){for(var e=new Nn(this._properties),r=0,n=Object.keys(this._values);r<n.length;r+=1){var a=n[r];e._values[a]=this._values[a].possiblyEvaluate(t)}return e},Rn.prototype.hasTransition=function(){for(var t=0,e=Object.keys(this._values);t<e.length;t+=1){var r=e[t];if(this._values[r].prior)return!0}return!1};var Fn=function(t){this._properties=t,this._values=Object.create(t.defaultPropertyValues)};Fn.prototype.getValue=function(t){return b(this._values[t].value)},Fn.prototype.setValue=function(t,e){this._values[t]=new On(this._values[t].property,null===e?void 0:b(e))},Fn.prototype.serialize=function(){for(var t={},e=0,r=Object.keys(this._values);e<r.length;e+=1){var n=r[e],a=this.getValue(n);void 0!==a&&(t[n]=a)}return t},Fn.prototype.possiblyEvaluate=function(t){for(var e=new Nn(this._properties),r=0,n=Object.keys(this._values);r<n.length;r+=1){var a=n[r];e._values[a]=this._values[a].possiblyEvaluate(t)}return e};var Bn=function(t,e,r){this.property=t,this.value=e,this.parameters=r};Bn.prototype.isConstant=function(){return"constant"===this.value.kind},Bn.prototype.constantOr=function(t){return"constant"===this.value.kind?this.value.value:t},Bn.prototype.evaluate=function(t,e){return this.property.evaluate(this.value,this.parameters,t,e)};var Nn=function(t){this._properties=t,this._values=Object.create(t.defaultPossiblyEvaluatedValues)};Nn.prototype.get=function(t){return this._values[t]};var jn=function(t){this.specification=t};jn.prototype.possiblyEvaluate=function(t,e){return t.expression.evaluate(e)},jn.prototype.interpolate=function(t,e,r){var n=xe[this.specification.type];return n?n(t,e,r):t};var Vn=function(t,e){this.specification=t,this.overrides=e};Vn.prototype.possiblyEvaluate=function(t,e){return"constant"===t.expression.kind||"camera"===t.expression.kind?new Bn(this,{kind:"constant",value:t.expression.evaluate(e)},e):new Bn(this,t.expression,e)},Vn.prototype.interpolate=function(t,e,r){if("constant"!==t.value.kind||"constant"!==e.value.kind)return t;if(void 0===t.value.value||void 0===e.value.value)return new Bn(this,{kind:"constant",value:void 0},t.parameters);var n=xe[this.specification.type];return n?new Bn(this,{kind:"constant",value:n(t.value.value,e.value.value,r)},t.parameters):t},Vn.prototype.evaluate=function(t,e,r,n){return"constant"===t.kind?t.value:t.evaluate(e,r,n)};var Un=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(t,e){if(void 0===t.value)return new Bn(this,{kind:"constant",value:void 0},e);if("constant"===t.expression.kind){var r=t.expression.evaluate(e),n=this._calculate(r,r,r,e);return new Bn(this,{kind:"constant",value:n},e)}if("camera"===t.expression.kind){var a=this._calculate(t.expression.evaluate({zoom:e.zoom-1}),t.expression.evaluate({zoom:e.zoom}),t.expression.evaluate({zoom:e.zoom+1}),e);return new Bn(this,{kind:"constant",value:a},e)}return new Bn(this,t.expression,e)},e.prototype.evaluate=function(t,e,r,n){if("source"===t.kind){var a=t.evaluate(e,r,n);return this._calculate(a,a,a,e)}return"composite"===t.kind?this._calculate(t.evaluate({zoom:Math.floor(e.zoom)-1},r,n),t.evaluate({zoom:Math.floor(e.zoom)},r,n),t.evaluate({zoom:Math.floor(e.zoom)+1},r,n),e):t.value},e.prototype._calculate=function(t,e,r,n){return n.zoom>n.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},e.prototype.interpolate=function(t){return t},e}(Vn),qn=function(t){this.specification=t};qn.prototype.possiblyEvaluate=function(t,e){if(void 0!==t.value){if("constant"===t.expression.kind){var r=t.expression.evaluate(e);return this._calculate(r,r,r,e)}return this._calculate(t.expression.evaluate(new Pn(Math.floor(e.zoom-1),e)),t.expression.evaluate(new Pn(Math.floor(e.zoom),e)),t.expression.evaluate(new Pn(Math.floor(e.zoom+1),e)),e)}},qn.prototype._calculate=function(t,e,r,n){return n.zoom>n.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},qn.prototype.interpolate=function(t){return t};var Hn=function(t){this.specification=t};Hn.prototype.possiblyEvaluate=function(t,e){return!!t.expression.evaluate(e)},Hn.prototype.interpolate=function(){return!1};var Gn=function(t){for(var e in this.properties=t,this.defaultPropertyValues={},this.defaultTransitionablePropertyValues={},this.defaultTransitioningPropertyValues={},this.defaultPossiblyEvaluatedValues={},this.overridableProperties=[],t){var r=t[e];r.specification.overridable&&this.overridableProperties.push(e);var n=this.defaultPropertyValues[e]=new On(r,void 0),a=this.defaultTransitionablePropertyValues[e]=new zn(r);this.defaultTransitioningPropertyValues[e]=a.untransitioned(),this.defaultPossiblyEvaluatedValues[e]=n.possiblyEvaluate({})}};dn("DataDrivenProperty",Vn),dn("DataConstantProperty",jn),dn("CrossFadedDataDrivenProperty",Un),dn("CrossFadedProperty",qn),dn("ColorRampProperty",Hn);var Yn=function(t){function e(e,r){if(t.call(this),this.id=e.id,this.type=e.type,this._featureFilter=function(){return!0},"custom"!==e.type&&(e=e,this.metadata=e.metadata,this.minzoom=e.minzoom,this.maxzoom=e.maxzoom,"background"!==e.type&&(this.source=e.source,this.sourceLayer=e["source-layer"],this.filter=e.filter),r.layout&&(this._unevaluatedLayout=new Fn(r.layout)),r.paint)){for(var n in this._transitionablePaint=new In(r.paint),e.paint)this.setPaintProperty(n,e.paint[n],{validate:!1});for(var a in e.layout)this.setLayoutProperty(a,e.layout[a],{validate:!1});this._transitioningPaint=this._transitionablePaint.untransitioned()}}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getCrossfadeParameters=function(){return this._crossfadeParameters},e.prototype.getLayoutProperty=function(t){return"visibility"===t?this.visibility:this._unevaluatedLayout.getValue(t)},e.prototype.setLayoutProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e){var n="layers."+this.id+".layout."+t;if(this._validate(sn,n,t,e,r))return}"visibility"!==t?this._unevaluatedLayout.setValue(t,e):this.visibility=e},e.prototype.getPaintProperty=function(t){return m(t,"-transition")?this._transitionablePaint.getTransition(t.slice(0,-"-transition".length)):this._transitionablePaint.getValue(t)},e.prototype.setPaintProperty=function(t,e,r){if(void 0===r&&(r={}),null!=e){var n="layers."+this.id+".paint."+t;if(this._validate(on,n,t,e,r))return!1}if(m(t,"-transition"))return this._transitionablePaint.setTransition(t.slice(0,-"-transition".length),e||void 0),!1;var a=this._transitionablePaint._values[t],i="cross-faded-data-driven"===a.property.specification["property-type"],o=a.value.isDataDriven(),s=a.value;this._transitionablePaint.setValue(t,e),this._handleSpecialPaintPropertyUpdate(t);var l=this._transitionablePaint._values[t].value;return l.isDataDriven()||o||i||this._handleOverridablePaintPropertyUpdate(t,s,l)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){},e.prototype._handleOverridablePaintPropertyUpdate=function(t,e,r){return!1},e.prototype.isHidden=function(t){return!!(this.minzoom&&t<this.minzoom)||!!(this.maxzoom&&t>=this.maxzoom)||"none"===this.visibility},e.prototype.updateTransitions=function(t){this._transitioningPaint=this._transitionablePaint.transitioned(t,this._transitioningPaint)},e.prototype.hasTransition=function(){return this._transitioningPaint.hasTransition()},e.prototype.recalculate=function(t){t.getCrossfadeParameters&&(this._crossfadeParameters=t.getCrossfadeParameters()),this._unevaluatedLayout&&(this.layout=this._unevaluatedLayout.possiblyEvaluate(t)),this.paint=this._transitioningPaint.possiblyEvaluate(t)},e.prototype.serialize=function(){var t={id:this.id,type:this.type,source:this.source,"source-layer":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:this._unevaluatedLayout&&this._unevaluatedLayout.serialize(),paint:this._transitionablePaint&&this._transitionablePaint.serialize()};return this.visibility&&(t.layout=t.layout||{},t.layout.visibility=this.visibility),x(t,function(t,e){return!(void 0===t||"layout"===e&&!Object.keys(t).length||"paint"===e&&!Object.keys(t).length)})},e.prototype._validate=function(t,e,r,n,a){return void 0===a&&(a={}),(!a||!1!==a.validate)&&ln(this,t.call(nn,{key:e,layerType:this.type,objectKey:r,value:n,styleSpec:Tt,style:{glyphs:!0,sprite:!0}}))},e.prototype.is3D=function(){return!1},e.prototype.isTileClipped=function(){return!1},e.prototype.hasOffscreenPass=function(){return!1},e.prototype.resize=function(){},e.prototype.isStateDependent=function(){for(var t in this.paint._values){var e=this.paint.get(t);if(e instanceof Bn&&ur(e.property.specification)&&("source"===e.value.kind||"composite"===e.value.kind)&&e.value.isStateDependent)return!0}return!1},e}(kt),Wn={Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},Xn=function(t,e){this._structArray=t,this._pos1=e*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8},Zn=function(){this.isTransferred=!1,this.capacity=-1,this.resize(0)};function Jn(t,e){void 0===e&&(e=1);var r=0,n=0;return{members:t.map(function(t){var a,i=(a=t.type,Wn[a].BYTES_PER_ELEMENT),o=r=Kn(r,Math.max(e,i)),s=t.components||1;return n=Math.max(n,i),r+=i*s,{name:t.name,type:t.type,components:s,offset:o}}),size:Kn(r,Math.max(n,e)),alignment:e}}function Kn(t,e){return Math.ceil(t/e)*e}Zn.serialize=function(t,e){return t._trim(),e&&(t.isTransferred=!0,e.push(t.arrayBuffer)),{length:t.length,arrayBuffer:t.arrayBuffer}},Zn.deserialize=function(t){var e=Object.create(this.prototype);return e.arrayBuffer=t.arrayBuffer,e.length=t.length,e.capacity=t.arrayBuffer.byteLength/e.bytesPerElement,e._refreshViews(),e},Zn.prototype._trim=function(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews())},Zn.prototype.clear=function(){this.length=0},Zn.prototype.resize=function(t){this.reserve(t),this.length=t},Zn.prototype.reserve=function(t){if(t>this.capacity){this.capacity=Math.max(t,Math.floor(5*this.capacity),128),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);var e=this.uint8;this._refreshViews(),e&&this.uint8.set(e)}},Zn.prototype._refreshViews=function(){throw new Error("_refreshViews() must be implemented by each concrete StructArray layout")};var Qn=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.int16[n+0]=e,this.int16[n+1]=r,t},e}(Zn);Qn.prototype.bytesPerElement=4,dn("StructArrayLayout2i4",Qn);var $n=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,a){var i=4*t;return this.int16[i+0]=e,this.int16[i+1]=r,this.int16[i+2]=n,this.int16[i+3]=a,t},e}(Zn);$n.prototype.bytesPerElement=8,dn("StructArrayLayout4i8",$n);var ta=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,a,i){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,a,i)},e.prototype.emplace=function(t,e,r,n,a,i,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=a,this.int16[s+4]=i,this.int16[s+5]=o,t},e}(Zn);ta.prototype.bytesPerElement=12,dn("StructArrayLayout2i4i12",ta);var ea=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,a,i){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,a,i)},e.prototype.emplace=function(t,e,r,n,a,i,o){var s=4*t,l=8*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.uint8[l+4]=n,this.uint8[l+5]=a,this.uint8[l+6]=i,this.uint8[l+7]=o,t},e}(Zn);ea.prototype.bytesPerElement=8,dn("StructArrayLayout2i4ub8",ea);var ra=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,a,i,o,s){var l=this.length;return this.resize(l+1),this.emplace(l,t,e,r,n,a,i,o,s)},e.prototype.emplace=function(t,e,r,n,a,i,o,s,l){var c=8*t;return this.uint16[c+0]=e,this.uint16[c+1]=r,this.uint16[c+2]=n,this.uint16[c+3]=a,this.uint16[c+4]=i,this.uint16[c+5]=o,this.uint16[c+6]=s,this.uint16[c+7]=l,t},e}(Zn);ra.prototype.bytesPerElement=16,dn("StructArrayLayout8ui16",ra);var na=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,a,i,o,s){var l=this.length;return this.resize(l+1),this.emplace(l,t,e,r,n,a,i,o,s)},e.prototype.emplace=function(t,e,r,n,a,i,o,s,l){var c=8*t;return this.int16[c+0]=e,this.int16[c+1]=r,this.int16[c+2]=n,this.int16[c+3]=a,this.uint16[c+4]=i,this.uint16[c+5]=o,this.uint16[c+6]=s,this.uint16[c+7]=l,t},e}(Zn);na.prototype.bytesPerElement=16,dn("StructArrayLayout4i4ui16",na);var aa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var a=3*t;return this.float32[a+0]=e,this.float32[a+1]=r,this.float32[a+2]=n,t},e}(Zn);aa.prototype.bytesPerElement=12,dn("StructArrayLayout3f12",aa);var ia=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.uint32[r+0]=e,t},e}(Zn);ia.prototype.bytesPerElement=4,dn("StructArrayLayout1ul4",ia);var oa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,a,i,o,s,l,c,u){var h=this.length;return this.resize(h+1),this.emplace(h,t,e,r,n,a,i,o,s,l,c,u)},e.prototype.emplace=function(t,e,r,n,a,i,o,s,l,c,u,h){var f=12*t,p=6*t;return this.int16[f+0]=e,this.int16[f+1]=r,this.int16[f+2]=n,this.int16[f+3]=a,this.int16[f+4]=i,this.int16[f+5]=o,this.uint32[p+3]=s,this.uint16[f+8]=l,this.uint16[f+9]=c,this.int16[f+10]=u,this.int16[f+11]=h,t},e}(Zn);oa.prototype.bytesPerElement=24,dn("StructArrayLayout6i1ul2ui2i24",oa);var sa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,a,i){var o=this.length;return this.resize(o+1),this.emplace(o,t,e,r,n,a,i)},e.prototype.emplace=function(t,e,r,n,a,i,o){var s=6*t;return this.int16[s+0]=e,this.int16[s+1]=r,this.int16[s+2]=n,this.int16[s+3]=a,this.int16[s+4]=i,this.int16[s+5]=o,t},e}(Zn);sa.prototype.bytesPerElement=12,dn("StructArrayLayout2i2i2i12",sa);var la=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,a){var i=12*t,o=3*t;return this.uint8[i+0]=e,this.uint8[i+1]=r,this.float32[o+1]=n,this.float32[o+2]=a,t},e}(Zn);la.prototype.bytesPerElement=12,dn("StructArrayLayout2ub2f12",la);var ca=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,a,i,o,s,l,c,u,h,f,p,d,g){var v=this.length;return this.resize(v+1),this.emplace(v,t,e,r,n,a,i,o,s,l,c,u,h,f,p,d,g)},e.prototype.emplace=function(t,e,r,n,a,i,o,s,l,c,u,h,f,p,d,g,v){var m=22*t,y=11*t,x=44*t;return this.int16[m+0]=e,this.int16[m+1]=r,this.uint16[m+2]=n,this.uint16[m+3]=a,this.uint32[y+2]=i,this.uint32[y+3]=o,this.uint32[y+4]=s,this.uint16[m+10]=l,this.uint16[m+11]=c,this.uint16[m+12]=u,this.float32[y+7]=h,this.float32[y+8]=f,this.uint8[x+36]=p,this.uint8[x+37]=d,this.uint8[x+38]=g,this.uint32[y+10]=v,t},e}(Zn);ca.prototype.bytesPerElement=44,dn("StructArrayLayout2i2ui3ul3ui2f3ub1ul44",ca);var ua=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n,a,i,o,s,l,c,u,h,f,p,d,g,v,m,y,x){var b=this.length;return this.resize(b+1),this.emplace(b,t,e,r,n,a,i,o,s,l,c,u,h,f,p,d,g,v,m,y,x)},e.prototype.emplace=function(t,e,r,n,a,i,o,s,l,c,u,h,f,p,d,g,v,m,y,x,b){var _=24*t,w=12*t;return this.int16[_+0]=e,this.int16[_+1]=r,this.int16[_+2]=n,this.int16[_+3]=a,this.int16[_+4]=i,this.int16[_+5]=o,this.uint16[_+6]=s,this.uint16[_+7]=l,this.uint16[_+8]=c,this.uint16[_+9]=u,this.uint16[_+10]=h,this.uint16[_+11]=f,this.uint16[_+12]=p,this.uint16[_+13]=d,this.uint16[_+14]=g,this.uint16[_+15]=v,this.uint16[_+16]=m,this.uint32[w+9]=y,this.float32[w+10]=x,this.float32[w+11]=b,t},e}(Zn);ua.prototype.bytesPerElement=48,dn("StructArrayLayout6i11ui1ul2f48",ua);var ha=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.float32[r+0]=e,t},e}(Zn);ha.prototype.bytesPerElement=4,dn("StructArrayLayout1f4",ha);var fa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.int16=new Int16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var a=3*t;return this.int16[a+0]=e,this.int16[a+1]=r,this.int16[a+2]=n,t},e}(Zn);fa.prototype.bytesPerElement=6,dn("StructArrayLayout3i6",fa);var pa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint32=new Uint32Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var a=2*t,i=4*t;return this.uint32[a+0]=e,this.uint16[i+2]=r,this.uint16[i+3]=n,t},e}(Zn);pa.prototype.bytesPerElement=8,dn("StructArrayLayout1ul2ui8",pa);var da=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r){var n=this.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace=function(t,e,r,n){var a=3*t;return this.uint16[a+0]=e,this.uint16[a+1]=r,this.uint16[a+2]=n,t},e}(Zn);da.prototype.bytesPerElement=6,dn("StructArrayLayout3ui6",da);var ga=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.uint16[n+0]=e,this.uint16[n+1]=r,t},e}(Zn);ga.prototype.bytesPerElement=4,dn("StructArrayLayout2ui4",ga);var va=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.uint16=new Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t){var e=this.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace=function(t,e){var r=1*t;return this.uint16[r+0]=e,t},e}(Zn);va.prototype.bytesPerElement=2,dn("StructArrayLayout1ui2",va);var ma=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e){var r=this.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace=function(t,e,r){var n=2*t;return this.float32[n+0]=e,this.float32[n+1]=r,t},e}(Zn);ma.prototype.bytesPerElement=8,dn("StructArrayLayout2f8",ma);var ya=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._refreshViews=function(){this.uint8=new Uint8Array(this.arrayBuffer),this.float32=new Float32Array(this.arrayBuffer)},e.prototype.emplaceBack=function(t,e,r,n){var a=this.length;return this.resize(a+1),this.emplace(a,t,e,r,n)},e.prototype.emplace=function(t,e,r,n,a){var i=4*t;return this.float32[i+0]=e,this.float32[i+1]=r,this.float32[i+2]=n,this.float32[i+3]=a,t},e}(Zn);ya.prototype.bytesPerElement=16,dn("StructArrayLayout4f16",ya);var xa=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorPointX:{configurable:!0},anchorPointY:{configurable:!0},x1:{configurable:!0},y1:{configurable:!0},x2:{configurable:!0},y2:{configurable:!0},featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0},radius:{configurable:!0},signedDistanceFromAnchor:{configurable:!0},anchorPoint:{configurable:!0}};return r.anchorPointX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorPointX.set=function(t){this._structArray.int16[this._pos2+0]=t},r.anchorPointY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorPointY.set=function(t){this._structArray.int16[this._pos2+1]=t},r.x1.get=function(){return this._structArray.int16[this._pos2+2]},r.x1.set=function(t){this._structArray.int16[this._pos2+2]=t},r.y1.get=function(){return this._structArray.int16[this._pos2+3]},r.y1.set=function(t){this._structArray.int16[this._pos2+3]=t},r.x2.get=function(){return this._structArray.int16[this._pos2+4]},r.x2.set=function(t){this._structArray.int16[this._pos2+4]=t},r.y2.get=function(){return this._structArray.int16[this._pos2+5]},r.y2.set=function(t){this._structArray.int16[this._pos2+5]=t},r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.featureIndex.set=function(t){this._structArray.uint32[this._pos4+3]=t},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+8]},r.sourceLayerIndex.set=function(t){this._structArray.uint16[this._pos2+8]=t},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.bucketIndex.set=function(t){this._structArray.uint16[this._pos2+9]=t},r.radius.get=function(){return this._structArray.int16[this._pos2+10]},r.radius.set=function(t){this._structArray.int16[this._pos2+10]=t},r.signedDistanceFromAnchor.get=function(){return this._structArray.int16[this._pos2+11]},r.signedDistanceFromAnchor.set=function(t){this._structArray.int16[this._pos2+11]=t},r.anchorPoint.get=function(){return new a(this.anchorPointX,this.anchorPointY)},Object.defineProperties(e.prototype,r),e}(Xn);xa.prototype.size=24;var ba=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new xa(this,t)},e}(oa);dn("CollisionBoxArray",ba);var _a=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},glyphStartIndex:{configurable:!0},numGlyphs:{configurable:!0},vertexStartIndex:{configurable:!0},lineStartIndex:{configurable:!0},lineLength:{configurable:!0},segment:{configurable:!0},lowerSize:{configurable:!0},upperSize:{configurable:!0},lineOffsetX:{configurable:!0},lineOffsetY:{configurable:!0},writingMode:{configurable:!0},placedOrientation:{configurable:!0},hidden:{configurable:!0},crossTileID:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorX.set=function(t){this._structArray.int16[this._pos2+0]=t},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorY.set=function(t){this._structArray.int16[this._pos2+1]=t},r.glyphStartIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.glyphStartIndex.set=function(t){this._structArray.uint16[this._pos2+2]=t},r.numGlyphs.get=function(){return this._structArray.uint16[this._pos2+3]},r.numGlyphs.set=function(t){this._structArray.uint16[this._pos2+3]=t},r.vertexStartIndex.get=function(){return this._structArray.uint32[this._pos4+2]},r.vertexStartIndex.set=function(t){this._structArray.uint32[this._pos4+2]=t},r.lineStartIndex.get=function(){return this._structArray.uint32[this._pos4+3]},r.lineStartIndex.set=function(t){this._structArray.uint32[this._pos4+3]=t},r.lineLength.get=function(){return this._structArray.uint32[this._pos4+4]},r.lineLength.set=function(t){this._structArray.uint32[this._pos4+4]=t},r.segment.get=function(){return this._structArray.uint16[this._pos2+10]},r.segment.set=function(t){this._structArray.uint16[this._pos2+10]=t},r.lowerSize.get=function(){return this._structArray.uint16[this._pos2+11]},r.lowerSize.set=function(t){this._structArray.uint16[this._pos2+11]=t},r.upperSize.get=function(){return this._structArray.uint16[this._pos2+12]},r.upperSize.set=function(t){this._structArray.uint16[this._pos2+12]=t},r.lineOffsetX.get=function(){return this._structArray.float32[this._pos4+7]},r.lineOffsetX.set=function(t){this._structArray.float32[this._pos4+7]=t},r.lineOffsetY.get=function(){return this._structArray.float32[this._pos4+8]},r.lineOffsetY.set=function(t){this._structArray.float32[this._pos4+8]=t},r.writingMode.get=function(){return this._structArray.uint8[this._pos1+36]},r.writingMode.set=function(t){this._structArray.uint8[this._pos1+36]=t},r.placedOrientation.get=function(){return this._structArray.uint8[this._pos1+37]},r.placedOrientation.set=function(t){this._structArray.uint8[this._pos1+37]=t},r.hidden.get=function(){return this._structArray.uint8[this._pos1+38]},r.hidden.set=function(t){this._structArray.uint8[this._pos1+38]=t},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+10]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+10]=t},Object.defineProperties(e.prototype,r),e}(Xn);_a.prototype.size=44;var wa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new _a(this,t)},e}(ca);dn("PlacedSymbolArray",wa);var ka=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={anchorX:{configurable:!0},anchorY:{configurable:!0},rightJustifiedTextSymbolIndex:{configurable:!0},centerJustifiedTextSymbolIndex:{configurable:!0},leftJustifiedTextSymbolIndex:{configurable:!0},verticalPlacedTextSymbolIndex:{configurable:!0},key:{configurable:!0},textBoxStartIndex:{configurable:!0},textBoxEndIndex:{configurable:!0},verticalTextBoxStartIndex:{configurable:!0},verticalTextBoxEndIndex:{configurable:!0},iconBoxStartIndex:{configurable:!0},iconBoxEndIndex:{configurable:!0},featureIndex:{configurable:!0},numHorizontalGlyphVertices:{configurable:!0},numVerticalGlyphVertices:{configurable:!0},numIconVertices:{configurable:!0},crossTileID:{configurable:!0},textBoxScale:{configurable:!0},radialTextOffset:{configurable:!0}};return r.anchorX.get=function(){return this._structArray.int16[this._pos2+0]},r.anchorX.set=function(t){this._structArray.int16[this._pos2+0]=t},r.anchorY.get=function(){return this._structArray.int16[this._pos2+1]},r.anchorY.set=function(t){this._structArray.int16[this._pos2+1]=t},r.rightJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+2]},r.rightJustifiedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+2]=t},r.centerJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+3]},r.centerJustifiedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+3]=t},r.leftJustifiedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+4]},r.leftJustifiedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+4]=t},r.verticalPlacedTextSymbolIndex.get=function(){return this._structArray.int16[this._pos2+5]},r.verticalPlacedTextSymbolIndex.set=function(t){this._structArray.int16[this._pos2+5]=t},r.key.get=function(){return this._structArray.uint16[this._pos2+6]},r.key.set=function(t){this._structArray.uint16[this._pos2+6]=t},r.textBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+7]},r.textBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+7]=t},r.textBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+8]},r.textBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+8]=t},r.verticalTextBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+9]},r.verticalTextBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+9]=t},r.verticalTextBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+10]},r.verticalTextBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+10]=t},r.iconBoxStartIndex.get=function(){return this._structArray.uint16[this._pos2+11]},r.iconBoxStartIndex.set=function(t){this._structArray.uint16[this._pos2+11]=t},r.iconBoxEndIndex.get=function(){return this._structArray.uint16[this._pos2+12]},r.iconBoxEndIndex.set=function(t){this._structArray.uint16[this._pos2+12]=t},r.featureIndex.get=function(){return this._structArray.uint16[this._pos2+13]},r.featureIndex.set=function(t){this._structArray.uint16[this._pos2+13]=t},r.numHorizontalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+14]},r.numHorizontalGlyphVertices.set=function(t){this._structArray.uint16[this._pos2+14]=t},r.numVerticalGlyphVertices.get=function(){return this._structArray.uint16[this._pos2+15]},r.numVerticalGlyphVertices.set=function(t){this._structArray.uint16[this._pos2+15]=t},r.numIconVertices.get=function(){return this._structArray.uint16[this._pos2+16]},r.numIconVertices.set=function(t){this._structArray.uint16[this._pos2+16]=t},r.crossTileID.get=function(){return this._structArray.uint32[this._pos4+9]},r.crossTileID.set=function(t){this._structArray.uint32[this._pos4+9]=t},r.textBoxScale.get=function(){return this._structArray.float32[this._pos4+10]},r.textBoxScale.set=function(t){this._structArray.float32[this._pos4+10]=t},r.radialTextOffset.get=function(){return this._structArray.float32[this._pos4+11]},r.radialTextOffset.set=function(t){this._structArray.float32[this._pos4+11]=t},Object.defineProperties(e.prototype,r),e}(Xn);ka.prototype.size=48;var Ta=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new ka(this,t)},e}(ua);dn("SymbolInstanceArray",Ta);var Ma=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={offsetX:{configurable:!0}};return r.offsetX.get=function(){return this._structArray.float32[this._pos4+0]},r.offsetX.set=function(t){this._structArray.float32[this._pos4+0]=t},Object.defineProperties(e.prototype,r),e}(Xn);Ma.prototype.size=4;var Aa=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getoffsetX=function(t){return this.float32[1*t+0]},e.prototype.get=function(t){return new Ma(this,t)},e}(ha);dn("GlyphOffsetArray",Aa);var Sa=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={x:{configurable:!0},y:{configurable:!0},tileUnitDistanceFromAnchor:{configurable:!0}};return r.x.get=function(){return this._structArray.int16[this._pos2+0]},r.x.set=function(t){this._structArray.int16[this._pos2+0]=t},r.y.get=function(){return this._structArray.int16[this._pos2+1]},r.y.set=function(t){this._structArray.int16[this._pos2+1]=t},r.tileUnitDistanceFromAnchor.get=function(){return this._structArray.int16[this._pos2+2]},r.tileUnitDistanceFromAnchor.set=function(t){this._structArray.int16[this._pos2+2]=t},Object.defineProperties(e.prototype,r),e}(Xn);Sa.prototype.size=6;var Ea=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getx=function(t){return this.int16[3*t+0]},e.prototype.gety=function(t){return this.int16[3*t+1]},e.prototype.gettileUnitDistanceFromAnchor=function(t){return this.int16[3*t+2]},e.prototype.get=function(t){return new Sa(this,t)},e}(fa);dn("SymbolLineVertexArray",Ea);var La=function(t){function e(){t.apply(this,arguments)}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0}};return r.featureIndex.get=function(){return this._structArray.uint32[this._pos4+0]},r.featureIndex.set=function(t){this._structArray.uint32[this._pos4+0]=t},r.sourceLayerIndex.get=function(){return this._structArray.uint16[this._pos2+2]},r.sourceLayerIndex.set=function(t){this._structArray.uint16[this._pos2+2]=t},r.bucketIndex.get=function(){return this._structArray.uint16[this._pos2+3]},r.bucketIndex.set=function(t){this._structArray.uint16[this._pos2+3]=t},Object.defineProperties(e.prototype,r),e}(Xn);La.prototype.size=8;var Ca=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.get=function(t){return new La(this,t)},e}(pa);dn("FeatureIndexArray",Ca);var Pa=Jn([{name:"a_pos",components:2,type:"Int16"}],4).members,Oa=function(t){void 0===t&&(t=[]),this.segments=t};function za(t,e){return 256*(t=c(Math.floor(t),0,255))+c(Math.floor(e),0,255)}Oa.prototype.prepareSegment=function(t,e,r,n){var a=this.segments[this.segments.length-1];return t>Oa.MAX_VERTEX_ARRAY_LENGTH&&w("Max vertices per segment is "+Oa.MAX_VERTEX_ARRAY_LENGTH+": bucket requested "+t),(!a||a.vertexLength+t>Oa.MAX_VERTEX_ARRAY_LENGTH||a.sortKey!==n)&&(a={vertexOffset:e.length,primitiveOffset:r.length,vertexLength:0,primitiveLength:0},void 0!==n&&(a.sortKey=n),this.segments.push(a)),a},Oa.prototype.get=function(){return this.segments},Oa.prototype.destroy=function(){for(var t=0,e=this.segments;t<e.length;t+=1){var r=e[t];for(var n in r.vaos)r.vaos[n].destroy()}},Oa.simpleSegment=function(t,e,r,n){return new Oa([{vertexOffset:t,primitiveOffset:e,vertexLength:r,primitiveLength:n,vaos:{},sortKey:0}])},Oa.MAX_VERTEX_ARRAY_LENGTH=Math.pow(2,16)-1,dn("SegmentVector",Oa);var Ia=function(){this.ids=[],this.positions=[],this.indexed=!1};function Da(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}Ia.prototype.add=function(t,e,r,n){this.ids.push(t),this.positions.push(e,r,n)},Ia.prototype.getPositions=function(t){for(var e=0,r=this.ids.length-1;e<r;){var n=e+r>>1;this.ids[n]>=t?r=n:e=n+1}for(var a=[];this.ids[e]===t;){var i=this.positions[3*e],o=this.positions[3*e+1],s=this.positions[3*e+2];a.push({index:i,start:o,end:s}),e++}return a},Ia.serialize=function(t,e){var r=new Float64Array(t.ids),n=new Uint32Array(t.positions);return function t(e,r,n,a){if(!(n>=a)){for(var i=e[n+a>>1],o=n-1,s=a+1;;){do{o++}while(e[o]<i);do{s--}while(e[s]>i);if(o>=s)break;Da(e,o,s),Da(r,3*o,3*s),Da(r,3*o+1,3*s+1),Da(r,3*o+2,3*s+2)}t(e,r,n,s),t(e,r,s+1,a)}}(r,n,0,r.length-1),e.push(r.buffer,n.buffer),{ids:r,positions:n}},Ia.deserialize=function(t){var e=new Ia;return e.ids=t.ids,e.positions=t.positions,e.indexed=!0,e},dn("FeaturePositionMap",Ia);var Ra=function(t,e){this.gl=t.gl,this.location=e},Fa=function(t){function e(e,r){t.call(this,e,r),this.current=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1i(this.location,t))},e}(Ra),Ba=function(t){function e(e,r){t.call(this,e,r),this.current=0}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){this.current!==t&&(this.current=t,this.gl.uniform1f(this.location,t))},e}(Ra),Na=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]||(this.current=t,this.gl.uniform2f(this.location,t[0],t[1]))},e}(Ra),ja=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]||(this.current=t,this.gl.uniform3f(this.location,t[0],t[1],t[2]))},e}(Ra),Va=function(t){function e(e,r){t.call(this,e,r),this.current=[0,0,0,0]}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t[0]===this.current[0]&&t[1]===this.current[1]&&t[2]===this.current[2]&&t[3]===this.current[3]||(this.current=t,this.gl.uniform4f(this.location,t[0],t[1],t[2],t[3]))},e}(Ra),Ua=function(t){function e(e,r){t.call(this,e,r),this.current=Wt.transparent}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){t.r===this.current.r&&t.g===this.current.g&&t.b===this.current.b&&t.a===this.current.a||(this.current=t,this.gl.uniform4f(this.location,t.r,t.g,t.b,t.a))},e}(Ra),qa=new Float32Array(16),Ha=function(t){function e(e,r){t.call(this,e,r),this.current=qa}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){if(t[12]!==this.current[12]||t[0]!==this.current[0])return this.current=t,void this.gl.uniformMatrix4fv(this.location,!1,t);for(var e=1;e<16;e++)if(t[e]!==this.current[e]){this.current=t,this.gl.uniformMatrix4fv(this.location,!1,t);break}},e}(Ra);function Ga(t){return[za(255*t.r,255*t.g),za(255*t.b,255*t.a)]}var Ya=function(t,e,r){this.value=t,this.names=e,this.uniformNames=this.names.map(function(t){return"u_"+t}),this.type=r,this.maxValue=-1/0};Ya.prototype.defines=function(){return this.names.map(function(t){return"#define HAS_UNIFORM_u_"+t})},Ya.prototype.setConstantPatternPositions=function(){},Ya.prototype.populatePaintArray=function(){},Ya.prototype.updatePaintArray=function(){},Ya.prototype.upload=function(){},Ya.prototype.destroy=function(){},Ya.prototype.setUniforms=function(t,e,r,n){e.set(n.constantOr(this.value))},Ya.prototype.getBinding=function(t,e){return"color"===this.type?new Ua(t,e):new Ba(t,e)},Ya.serialize=function(t){var e=t.value,r=t.names,n=t.type;return{value:vn(e),names:r,type:n}},Ya.deserialize=function(t){var e=t.value,r=t.names,n=t.type;return new Ya(mn(e),r,n)};var Wa=function(t,e,r){this.value=t,this.names=e,this.uniformNames=this.names.map(function(t){return"u_"+t}),this.type=r,this.maxValue=-1/0,this.patternPositions={patternTo:null,patternFrom:null}};Wa.prototype.defines=function(){return this.names.map(function(t){return"#define HAS_UNIFORM_u_"+t})},Wa.prototype.populatePaintArray=function(){},Wa.prototype.updatePaintArray=function(){},Wa.prototype.upload=function(){},Wa.prototype.destroy=function(){},Wa.prototype.setConstantPatternPositions=function(t,e){this.patternPositions.patternTo=t.tlbr,this.patternPositions.patternFrom=e.tlbr},Wa.prototype.setUniforms=function(t,e,r,n,a){var i=this.patternPositions;"u_pattern_to"===a&&i.patternTo&&e.set(i.patternTo),"u_pattern_from"===a&&i.patternFrom&&e.set(i.patternFrom)},Wa.prototype.getBinding=function(t,e){return new Va(t,e)};var Xa=function(t,e,r,n){this.expression=t,this.names=e,this.type=r,this.uniformNames=this.names.map(function(t){return"a_"+t}),this.maxValue=-1/0,this.paintVertexAttributes=e.map(function(t){return{name:"a_"+t,type:"Float32",components:"color"===r?2:1,offset:0}}),this.paintVertexArray=new n};Xa.prototype.defines=function(){return[]},Xa.prototype.setConstantPatternPositions=function(){},Xa.prototype.populatePaintArray=function(t,e,r,n){var a=this.paintVertexArray,i=a.length;a.reserve(t);var o=this.expression.evaluate(new Pn(0),e,{},n);if("color"===this.type)for(var s=Ga(o),l=i;l<t;l++)a.emplaceBack(s[0],s[1]);else{for(var c=i;c<t;c++)a.emplaceBack(o);this.maxValue=Math.max(this.maxValue,o)}},Xa.prototype.updatePaintArray=function(t,e,r,n){var a=this.paintVertexArray,i=this.expression.evaluate({zoom:0},r,n);if("color"===this.type)for(var o=Ga(i),s=t;s<e;s++)a.emplace(s,o[0],o[1]);else{for(var l=t;l<e;l++)a.emplace(l,i);this.maxValue=Math.max(this.maxValue,i)}},Xa.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},Xa.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()},Xa.prototype.setUniforms=function(t,e){e.set(0)},Xa.prototype.getBinding=function(t,e){return new Ba(t,e)};var Za=function(t,e,r,n,a,i){this.expression=t,this.names=e,this.uniformNames=this.names.map(function(t){return"u_"+t+"_t"}),this.type=r,this.useIntegerZoom=n,this.zoom=a,this.maxValue=-1/0;var o=i;this.paintVertexAttributes=e.map(function(t){return{name:"a_"+t,type:"Float32",components:"color"===r?4:2,offset:0}}),this.paintVertexArray=new o};Za.prototype.defines=function(){return[]},Za.prototype.setConstantPatternPositions=function(){},Za.prototype.populatePaintArray=function(t,e,r,n){var a=this.paintVertexArray,i=a.length;a.reserve(t);var o=this.expression.evaluate(new Pn(this.zoom),e,{},n),s=this.expression.evaluate(new Pn(this.zoom+1),e,{},n);if("color"===this.type)for(var l=Ga(o),c=Ga(s),u=i;u<t;u++)a.emplaceBack(l[0],l[1],c[0],c[1]);else{for(var h=i;h<t;h++)a.emplaceBack(o,s);this.maxValue=Math.max(this.maxValue,o,s)}},Za.prototype.updatePaintArray=function(t,e,r,n){var a=this.paintVertexArray,i=this.expression.evaluate({zoom:this.zoom},r,n),o=this.expression.evaluate({zoom:this.zoom+1},r,n);if("color"===this.type)for(var s=Ga(i),l=Ga(o),c=t;c<e;c++)a.emplace(c,s[0],s[1],l[0],l[1]);else{for(var u=t;u<e;u++)a.emplace(u,i,o);this.maxValue=Math.max(this.maxValue,i,o)}},Za.prototype.upload=function(t){this.paintVertexArray&&this.paintVertexArray.arrayBuffer&&(this.paintVertexBuffer&&this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer=t.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},Za.prototype.destroy=function(){this.paintVertexBuffer&&this.paintVertexBuffer.destroy()},Za.prototype.interpolationFactor=function(t){return this.useIntegerZoom?this.expression.interpolationFactor(Math.floor(t),this.zoom,this.zoom+1):this.expression.interpolationFactor(t,this.zoom,this.zoom+1)},Za.prototype.setUniforms=function(t,e,r){e.set(this.interpolationFactor(r.zoom))},Za.prototype.getBinding=function(t,e){return new Ba(t,e)};var Ja=function(t,e,r,n,a,i,o){this.expression=t,this.names=e,this.type=r,this.uniformNames=this.names.map(function(t){return"u_"+t+"_t"}),this.useIntegerZoom=n,this.zoom=a,this.maxValue=-1/0,this.layerId=o,this.paintVertexAttributes=e.map(function(t){return{name:"a_"+t,type:"Uint16",components:4,offset:0}}),this.zoomInPaintVertexArray=new i,this.zoomOutPaintVertexArray=new i};Ja.prototype.defines=function(){return[]},Ja.prototype.setConstantPatternPositions=function(){},Ja.prototype.populatePaintArray=function(t,e,r){var n=this.zoomInPaintVertexArray,a=this.zoomOutPaintVertexArray,i=this.layerId,o=n.length;if(n.reserve(t),a.reserve(t),r&&e.patterns&&e.patterns[i]){var s=e.patterns[i],l=s.min,c=s.mid,u=s.max,h=r[l],f=r[c],p=r[u];if(!h||!f||!p)return;for(var d=o;d<t;d++)n.emplaceBack(f.tl[0],f.tl[1],f.br[0],f.br[1],h.tl[0],h.tl[1],h.br[0],h.br[1]),a.emplaceBack(f.tl[0],f.tl[1],f.br[0],f.br[1],p.tl[0],p.tl[1],p.br[0],p.br[1])}},Ja.prototype.updatePaintArray=function(t,e,r,n,a){var i=this.zoomInPaintVertexArray,o=this.zoomOutPaintVertexArray,s=this.layerId;if(a&&r.patterns&&r.patterns[s]){var l=r.patterns[s],c=l.min,u=l.mid,h=l.max,f=a[c],p=a[u],d=a[h];if(!f||!p||!d)return;for(var g=t;g<e;g++)i.emplace(g,p.tl[0],p.tl[1],p.br[0],p.br[1],f.tl[0],f.tl[1],f.br[0],f.br[1]),o.emplace(g,p.tl[0],p.tl[1],p.br[0],p.br[1],d.tl[0],d.tl[1],d.br[0],d.br[1])}},Ja.prototype.upload=function(t){this.zoomInPaintVertexArray&&this.zoomInPaintVertexArray.arrayBuffer&&this.zoomOutPaintVertexArray&&this.zoomOutPaintVertexArray.arrayBuffer&&(this.zoomInPaintVertexBuffer=t.createVertexBuffer(this.zoomInPaintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent),this.zoomOutPaintVertexBuffer=t.createVertexBuffer(this.zoomOutPaintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},Ja.prototype.destroy=function(){this.zoomOutPaintVertexBuffer&&this.zoomOutPaintVertexBuffer.destroy(),this.zoomInPaintVertexBuffer&&this.zoomInPaintVertexBuffer.destroy()},Ja.prototype.setUniforms=function(t,e){e.set(0)},Ja.prototype.getBinding=function(t,e){return new Ba(t,e)};var Ka=function(){this.binders={},this.cacheKey="",this._buffers=[],this._featureMap=new Ia,this._bufferOffset=0};Ka.createDynamic=function(t,e,r){var n=new Ka,a=[];for(var i in t.paint._values)if(r(i)){var o=t.paint.get(i);if(o instanceof Bn&&ur(o.property.specification)){var s=$a(i,t.type),l=o.property.specification.type,c=o.property.useIntegerZoom;if("cross-faded"===o.property.specification["property-type"]||"cross-faded-data-driven"===o.property.specification["property-type"])if("constant"===o.value.kind)n.binders[i]=new Wa(o.value.value,s,l),a.push("/u_"+i);else{var u=ti(i,l,"source");n.binders[i]=new Ja(o.value,s,l,c,e,u,t.id),a.push("/a_"+i)}else if("constant"===o.value.kind)n.binders[i]=new Ya(o.value.value,s,l),a.push("/u_"+i);else if("source"===o.value.kind){var h=ti(i,l,"source");n.binders[i]=new Xa(o.value,s,l,h),a.push("/a_"+i)}else{var f=ti(i,l,"composite");n.binders[i]=new Za(o.value,s,l,c,e,f),a.push("/z_"+i)}}}return n.cacheKey=a.sort().join(""),n},Ka.prototype.populatePaintArrays=function(t,e,r,n,a){for(var i in this.binders)this.binders[i].populatePaintArray(t,e,n,a);void 0!==e.id&&this._featureMap.add(+e.id,r,this._bufferOffset,t),this._bufferOffset=t},Ka.prototype.setConstantPatternPositions=function(t,e){for(var r in this.binders)this.binders[r].setConstantPatternPositions(t,e)},Ka.prototype.updatePaintArrays=function(t,e,r,n){var a=!1;for(var i in t)for(var o=0,s=this._featureMap.getPositions(+i);o<s.length;o+=1){var l=s[o],c=e.feature(l.index);for(var u in this.binders){var h=this.binders[u];if(!(h instanceof Ya||h instanceof Wa)&&!0===h.expression.isStateDependent){var f=r.paint.get(u);h.expression=f.value,h.updatePaintArray(l.start,l.end,c,t[i],n),a=!0}}}return a},Ka.prototype.defines=function(){var t=[];for(var e in this.binders)t.push.apply(t,this.binders[e].defines());return t},Ka.prototype.getPaintVertexBuffers=function(){return this._buffers},Ka.prototype.getUniforms=function(t,e){var r=[];for(var n in this.binders)for(var a=this.binders[n],i=0,o=a.uniformNames;i<o.length;i+=1){var s=o[i];if(e[s]){var l=a.getBinding(t,e[s]);r.push({name:s,property:n,binding:l})}}return r},Ka.prototype.setUniforms=function(t,e,r,n){for(var a=0,i=e;a<i.length;a+=1){var o=i[a],s=o.name,l=o.property,c=o.binding;this.binders[l].setUniforms(t,c,n,r.get(l),s)}},Ka.prototype.updatePatternPaintBuffers=function(t){var e=[];for(var r in this.binders){var n=this.binders[r];if(n instanceof Ja){var a=2===t.fromScale?n.zoomInPaintVertexBuffer:n.zoomOutPaintVertexBuffer;a&&e.push(a)}else(n instanceof Xa||n instanceof Za)&&n.paintVertexBuffer&&e.push(n.paintVertexBuffer)}this._buffers=e},Ka.prototype.upload=function(t){for(var e in this.binders)this.binders[e].upload(t);var r=[];for(var n in this.binders){var a=this.binders[n];(a instanceof Xa||a instanceof Za)&&a.paintVertexBuffer&&r.push(a.paintVertexBuffer)}this._buffers=r},Ka.prototype.destroy=function(){for(var t in this.binders)this.binders[t].destroy()};var Qa=function(t,e,r,n){void 0===n&&(n=function(){return!0}),this.programConfigurations={};for(var a=0,i=e;a<i.length;a+=1){var o=i[a];this.programConfigurations[o.id]=Ka.createDynamic(o,r,n),this.programConfigurations[o.id].layoutAttributes=t}this.needsUpload=!1};function $a(t,e){return{"text-opacity":["opacity"],"icon-opacity":["opacity"],"text-color":["fill_color"],"icon-color":["fill_color"],"text-halo-color":["halo_color"],"icon-halo-color":["halo_color"],"text-halo-blur":["halo_blur"],"icon-halo-blur":["halo_blur"],"text-halo-width":["halo_width"],"icon-halo-width":["halo_width"],"line-gap-width":["gapwidth"],"line-pattern":["pattern_to","pattern_from"],"fill-pattern":["pattern_to","pattern_from"],"fill-extrusion-pattern":["pattern_to","pattern_from"]}[t]||[t.replace(e+"-","").replace(/-/g,"_")]}function ti(t,e,r){var n={color:{source:ma,composite:ya},number:{source:ha,composite:ma}},a=function(t){return{"line-pattern":{source:ra,composite:ra},"fill-pattern":{source:ra,composite:ra},"fill-extrusion-pattern":{source:ra,composite:ra}}[t]}(t);return a&&a[r]||n[e][r]}Qa.prototype.populatePaintArrays=function(t,e,r,n,a){for(var i in this.programConfigurations)this.programConfigurations[i].populatePaintArrays(t,e,r,n,a);this.needsUpload=!0},Qa.prototype.updatePaintArrays=function(t,e,r,n){for(var a=0,i=r;a<i.length;a+=1){var o=i[a];this.needsUpload=this.programConfigurations[o.id].updatePaintArrays(t,e,o,n)||this.needsUpload}},Qa.prototype.get=function(t){return this.programConfigurations[t]},Qa.prototype.upload=function(t){if(this.needsUpload){for(var e in this.programConfigurations)this.programConfigurations[e].upload(t);this.needsUpload=!1}},Qa.prototype.destroy=function(){for(var t in this.programConfigurations)this.programConfigurations[t].destroy()},dn("ConstantBinder",Ya),dn("CrossFadedConstantBinder",Wa),dn("SourceExpressionBinder",Xa),dn("CrossFadedCompositeBinder",Ja),dn("CompositeExpressionBinder",Za),dn("ProgramConfiguration",Ka,{omit:["_buffers"]}),dn("ProgramConfigurationSet",Qa);var ei=8192,ri=(15,{min:-1*Math.pow(2,14),max:Math.pow(2,14)-1});function ni(t){for(var e=ei/t.extent,r=t.loadGeometry(),n=0;n<r.length;n++)for(var a=r[n],i=0;i<a.length;i++){var o=a[i];o.x=Math.round(o.x*e),o.y=Math.round(o.y*e),(o.x<ri.min||o.x>ri.max||o.y<ri.min||o.y>ri.max)&&(w("Geometry exceeds allowed extent, reduce your vector tile buffer size"),o.x=c(o.x,ri.min,ri.max),o.y=c(o.y,ri.min,ri.max))}return r}function ai(t,e,r,n,a){t.emplaceBack(2*e+(n+1)/2,2*r+(a+1)/2)}var ii=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new Qn,this.indexArray=new da,this.segments=new Oa,this.programConfigurations=new Qa(Pa,t.layers,t.zoom),this.stateDependentLayerIds=this.layers.filter(function(t){return t.isStateDependent()}).map(function(t){return t.id})};function oi(t,e){for(var r=0;r<t.length;r++)if(gi(e,t[r]))return!0;for(var n=0;n<e.length;n++)if(gi(t,e[n]))return!0;return!!ui(t,e)}function si(t,e,r){return!!gi(t,e)||!!fi(e,t,r)}function li(t,e){if(1===t.length)return di(e,t[0]);for(var r=0;r<e.length;r++)for(var n=e[r],a=0;a<n.length;a++)if(gi(t,n[a]))return!0;for(var i=0;i<t.length;i++)if(di(e,t[i]))return!0;for(var o=0;o<e.length;o++)if(ui(t,e[o]))return!0;return!1}function ci(t,e,r){if(t.length>1){if(ui(t,e))return!0;for(var n=0;n<e.length;n++)if(fi(e[n],t,r))return!0}for(var a=0;a<t.length;a++)if(fi(t[a],e,r))return!0;return!1}function ui(t,e){if(0===t.length||0===e.length)return!1;for(var r=0;r<t.length-1;r++)for(var n=t[r],a=t[r+1],i=0;i<e.length-1;i++)if(hi(n,a,e[i],e[i+1]))return!0;return!1}function hi(t,e,r,n){return k(t,r,n)!==k(e,r,n)&&k(t,e,r)!==k(t,e,n)}function fi(t,e,r){var n=r*r;if(1===e.length)return t.distSqr(e[0])<n;for(var a=1;a<e.length;a++)if(pi(t,e[a-1],e[a])<n)return!0;return!1}function pi(t,e,r){var n=e.distSqr(r);if(0===n)return t.distSqr(e);var a=((t.x-e.x)*(r.x-e.x)+(t.y-e.y)*(r.y-e.y))/n;return a<0?t.distSqr(e):a>1?t.distSqr(r):t.distSqr(r.sub(e)._mult(a)._add(e))}function di(t,e){for(var r,n,a,i=!1,o=0;o<t.length;o++)for(var s=0,l=(r=t[o]).length-1;s<r.length;l=s++)n=r[s],a=r[l],n.y>e.y!=a.y>e.y&&e.x<(a.x-n.x)*(e.y-n.y)/(a.y-n.y)+n.x&&(i=!i);return i}function gi(t,e){for(var r=!1,n=0,a=t.length-1;n<t.length;a=n++){var i=t[n],o=t[a];i.y>e.y!=o.y>e.y&&e.x<(o.x-i.x)*(e.y-i.y)/(o.y-i.y)+i.x&&(r=!r)}return r}function vi(t,e,r){var n=r[0],a=r[2];if(t.x<n.x&&e.x<n.x||t.x>a.x&&e.x>a.x||t.y<n.y&&e.y<n.y||t.y>a.y&&e.y>a.y)return!1;var i=k(t,e,r[0]);return i!==k(t,e,r[1])||i!==k(t,e,r[2])||i!==k(t,e,r[3])}function mi(t,e,r){var n=e.paint.get(t).value;return"constant"===n.kind?n.value:r.programConfigurations.get(e.id).binders[t].maxValue}function yi(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function xi(t,e,r,n,i){if(!e[0]&&!e[1])return t;var o=a.convert(e)._mult(i);"viewport"===r&&o._rotate(-n);for(var s=[],l=0;l<t.length;l++){var c=t[l];s.push(c.sub(o))}return s}ii.prototype.populate=function(t,e){var r=this.layers[0],n=[],a=null;"circle"===r.type&&(a=r.layout.get("circle-sort-key"));for(var i=0,o=t;i<o.length;i+=1){var s=o[i],l=s.feature,c=s.index,u=s.sourceLayerIndex;if(this.layers[0]._featureFilter(new Pn(this.zoom),l)){var h=ni(l),f=a?a.evaluate(l,{}):void 0,p={id:l.id,properties:l.properties,type:l.type,sourceLayerIndex:u,index:c,geometry:h,patterns:{},sortKey:f};n.push(p)}}a&&n.sort(function(t,e){return t.sortKey-e.sortKey});for(var d=0,g=n;d<g.length;d+=1){var v=g[d],m=v,y=m.geometry,x=m.index,b=m.sourceLayerIndex,_=t[x].feature;this.addFeature(v,y,x),e.featureIndex.insert(_,y,x,b,this.index)}},ii.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},ii.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},ii.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},ii.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Pa),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},ii.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},ii.prototype.addFeature=function(t,e,r){for(var n=0,a=e;n<a.length;n+=1)for(var i=0,o=a[n];i<o.length;i+=1){var s=o[i],l=s.x,c=s.y;if(!(l<0||l>=ei||c<0||c>=ei)){var u=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray,t.sortKey),h=u.vertexLength;ai(this.layoutVertexArray,l,c,-1,-1),ai(this.layoutVertexArray,l,c,1,-1),ai(this.layoutVertexArray,l,c,1,1),ai(this.layoutVertexArray,l,c,-1,1),this.indexArray.emplaceBack(h,h+1,h+2),this.indexArray.emplaceBack(h,h+3,h+2),u.vertexLength+=4,u.primitiveLength+=2}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{})},dn("CircleBucket",ii,{omit:["layers"]});var bi,_i=new Gn({"circle-sort-key":new Vn(Tt.layout_circle["circle-sort-key"])}),wi={paint:new Gn({"circle-radius":new Vn(Tt.paint_circle["circle-radius"]),"circle-color":new Vn(Tt.paint_circle["circle-color"]),"circle-blur":new Vn(Tt.paint_circle["circle-blur"]),"circle-opacity":new Vn(Tt.paint_circle["circle-opacity"]),"circle-translate":new jn(Tt.paint_circle["circle-translate"]),"circle-translate-anchor":new jn(Tt.paint_circle["circle-translate-anchor"]),"circle-pitch-scale":new jn(Tt.paint_circle["circle-pitch-scale"]),"circle-pitch-alignment":new jn(Tt.paint_circle["circle-pitch-alignment"]),"circle-stroke-width":new Vn(Tt.paint_circle["circle-stroke-width"]),"circle-stroke-color":new Vn(Tt.paint_circle["circle-stroke-color"]),"circle-stroke-opacity":new Vn(Tt.paint_circle["circle-stroke-opacity"])}),layout:_i},ki="undefined"!=typeof Float32Array?Float32Array:Array;function Ti(t,e,r){var n=e[0],a=e[1],i=e[2],o=e[3];return t[0]=r[0]*n+r[4]*a+r[8]*i+r[12]*o,t[1]=r[1]*n+r[5]*a+r[9]*i+r[13]*o,t[2]=r[2]*n+r[6]*a+r[10]*i+r[14]*o,t[3]=r[3]*n+r[7]*a+r[11]*i+r[15]*o,t}Math.hypot||(Math.hypot=function(){for(var t=arguments,e=0,r=arguments.length;r--;)e+=t[r]*t[r];return Math.sqrt(e)}),bi=new ki(3),ki!=Float32Array&&(bi[0]=0,bi[1]=0,bi[2]=0),function(){var t=new ki(4);ki!=Float32Array&&(t[0]=0,t[1]=0,t[2]=0,t[3]=0)}();var Mi=function(t){function e(e){t.call(this,e,wi)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new ii(t)},e.prototype.queryRadius=function(t){var e=t;return mi("circle-radius",this,e)+mi("circle-stroke-width",this,e)+yi(this.paint.get("circle-translate"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,a,i,o,s){for(var l=xi(t,this.paint.get("circle-translate"),this.paint.get("circle-translate-anchor"),i.angle,o),c=this.paint.get("circle-radius").evaluate(e,r)+this.paint.get("circle-stroke-width").evaluate(e,r),u="map"===this.paint.get("circle-pitch-alignment"),h=u?l:function(t,e){return l.map(function(t){return Ai(t,e)})}(0,s),f=u?c*o:c,p=0,d=n;p<d.length;p+=1)for(var g=0,v=d[p];g<v.length;g+=1){var m=v[g],y=u?m:Ai(m,s),x=f,b=Ti([],[m.x,m.y,0,1],s);if("viewport"===this.paint.get("circle-pitch-scale")&&"map"===this.paint.get("circle-pitch-alignment")?x*=b[3]/i.cameraToCenterDistance:"map"===this.paint.get("circle-pitch-scale")&&"viewport"===this.paint.get("circle-pitch-alignment")&&(x*=i.cameraToCenterDistance/b[3]),si(h,y,x))return!0}return!1},e}(Yn);function Ai(t,e){var r=Ti([],[t.x,t.y,0,1],e);return new a(r[0]/r[3],r[1]/r[3])}var Si=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(ii);function Ei(t,e,r,n){var a=e.width,i=e.height;if(n){if(n instanceof Uint8ClampedArray)n=new Uint8Array(n.buffer);else if(n.length!==a*i*r)throw new RangeError("mismatched image size")}else n=new Uint8Array(a*i*r);return t.width=a,t.height=i,t.data=n,t}function Li(t,e,r){var n=e.width,a=e.height;if(n!==t.width||a!==t.height){var i=Ei({},{width:n,height:a},r);Ci(t,i,{x:0,y:0},{x:0,y:0},{width:Math.min(t.width,n),height:Math.min(t.height,a)},r),t.width=n,t.height=a,t.data=i.data}}function Ci(t,e,r,n,a,i){if(0===a.width||0===a.height)return e;if(a.width>t.width||a.height>t.height||r.x>t.width-a.width||r.y>t.height-a.height)throw new RangeError("out of range source coordinates for image copy");if(a.width>e.width||a.height>e.height||n.x>e.width-a.width||n.y>e.height-a.height)throw new RangeError("out of range destination coordinates for image copy");for(var o=t.data,s=e.data,l=0;l<a.height;l++)for(var c=((r.y+l)*t.width+r.x)*i,u=((n.y+l)*e.width+n.x)*i,h=0;h<a.width*i;h++)s[u+h]=o[c+h];return e}dn("HeatmapBucket",Si,{omit:["layers"]});var Pi=function(t,e){Ei(this,t,1,e)};Pi.prototype.resize=function(t){Li(this,t,1)},Pi.prototype.clone=function(){return new Pi({width:this.width,height:this.height},new Uint8Array(this.data))},Pi.copy=function(t,e,r,n,a){Ci(t,e,r,n,a,1)};var Oi=function(t,e){Ei(this,t,4,e)};Oi.prototype.resize=function(t){Li(this,t,4)},Oi.prototype.replace=function(t,e){e?this.data.set(t):t instanceof Uint8ClampedArray?this.data=new Uint8Array(t.buffer):this.data=t},Oi.prototype.clone=function(){return new Oi({width:this.width,height:this.height},new Uint8Array(this.data))},Oi.copy=function(t,e,r,n,a){Ci(t,e,r,n,a,4)},dn("AlphaImage",Pi),dn("RGBAImage",Oi);var zi={paint:new Gn({"heatmap-radius":new Vn(Tt.paint_heatmap["heatmap-radius"]),"heatmap-weight":new Vn(Tt.paint_heatmap["heatmap-weight"]),"heatmap-intensity":new jn(Tt.paint_heatmap["heatmap-intensity"]),"heatmap-color":new Hn(Tt.paint_heatmap["heatmap-color"]),"heatmap-opacity":new jn(Tt.paint_heatmap["heatmap-opacity"])})};function Ii(t,e){for(var r=new Uint8Array(1024),n={},a=0,i=0;a<256;a++,i+=4){n[e]=a/255;var o=t.evaluate(n);r[i+0]=Math.floor(255*o.r/o.a),r[i+1]=Math.floor(255*o.g/o.a),r[i+2]=Math.floor(255*o.b/o.a),r[i+3]=Math.floor(255*o.a)}return new Oi({width:256,height:1},r)}var Di=function(t){function e(e){t.call(this,e,zi),this._updateColorRamp()}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new Si(t)},e.prototype._handleSpecialPaintPropertyUpdate=function(t){"heatmap-color"===t&&this._updateColorRamp()},e.prototype._updateColorRamp=function(){var t=this._transitionablePaint._values["heatmap-color"].value.expression;this.colorRamp=Ii(t,"heatmapDensity"),this.colorRampTexture=null},e.prototype.resize=function(){this.heatmapFbo&&(this.heatmapFbo.destroy(),this.heatmapFbo=null)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return!1},e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get("heatmap-opacity")&&"none"!==this.visibility},e}(Yn),Ri={paint:new Gn({"hillshade-illumination-direction":new jn(Tt.paint_hillshade["hillshade-illumination-direction"]),"hillshade-illumination-anchor":new jn(Tt.paint_hillshade["hillshade-illumination-anchor"]),"hillshade-exaggeration":new jn(Tt.paint_hillshade["hillshade-exaggeration"]),"hillshade-shadow-color":new jn(Tt.paint_hillshade["hillshade-shadow-color"]),"hillshade-highlight-color":new jn(Tt.paint_hillshade["hillshade-highlight-color"]),"hillshade-accent-color":new jn(Tt.paint_hillshade["hillshade-accent-color"])})},Fi=function(t){function e(e){t.call(this,e,Ri)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.hasOffscreenPass=function(){return 0!==this.paint.get("hillshade-exaggeration")&&"none"!==this.visibility},e}(Yn),Bi=Jn([{name:"a_pos",components:2,type:"Int16"}],4).members,Ni=Vi,ji=Vi;function Vi(t,e,r){r=r||2;var n,a,i,o,s,l,c,u=e&&e.length,h=u?e[0]*r:t.length,f=Ui(t,0,h,r,!0),p=[];if(!f||f.next===f.prev)return p;if(u&&(f=function(t,e,r,n){var a,i,o,s=[];for(a=0,i=e.length;a<i;a++)(o=Ui(t,e[a]*n,a<i-1?e[a+1]*n:t.length,n,!1))===o.next&&(o.steiner=!0),s.push($i(o));for(s.sort(Zi),a=0;a<s.length;a++)Ji(s[a],r),r=qi(r,r.next);return r}(t,e,f,r)),t.length>80*r){n=i=t[0],a=o=t[1];for(var d=r;d<h;d+=r)(s=t[d])<n&&(n=s),(l=t[d+1])<a&&(a=l),s>i&&(i=s),l>o&&(o=l);c=0!==(c=Math.max(i-n,o-a))?1/c:0}return Hi(f,p,r,n,a,c),p}function Ui(t,e,r,n,a){var i,o;if(a===fo(t,e,r,n)>0)for(i=e;i<r;i+=n)o=co(i,t[i],t[i+1],o);else for(i=r-n;i>=e;i-=n)o=co(i,t[i],t[i+1],o);return o&&no(o,o.next)&&(uo(o),o=o.next),o}function qi(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!no(n,n.next)&&0!==ro(n.prev,n,n.next))n=n.next;else{if(uo(n),(n=e=n.prev)===n.next)break;r=!0}}while(r||n!==e);return e}function Hi(t,e,r,n,a,i,o){if(t){!o&&i&&function(t,e,r,n){var a=t;do{null===a.z&&(a.z=Qi(a.x,a.y,e,r,n)),a.prevZ=a.prev,a.nextZ=a.next,a=a.next}while(a!==t);a.prevZ.nextZ=null,a.prevZ=null,function(t){var e,r,n,a,i,o,s,l,c=1;do{for(r=t,t=null,i=null,o=0;r;){for(o++,n=r,s=0,e=0;e<c&&(s++,n=n.nextZ);e++);for(l=c;s>0||l>0&&n;)0!==s&&(0===l||!n||r.z<=n.z)?(a=r,r=r.nextZ,s--):(a=n,n=n.nextZ,l--),i?i.nextZ=a:t=a,a.prevZ=i,i=a;r=n}i.nextZ=null,c*=2}while(o>1)}(a)}(t,n,a,i);for(var s,l,c=t;t.prev!==t.next;)if(s=t.prev,l=t.next,i?Yi(t,n,a,i):Gi(t))e.push(s.i/r),e.push(t.i/r),e.push(l.i/r),uo(t),t=l.next,c=l.next;else if((t=l)===c){o?1===o?Hi(t=Wi(qi(t),e,r),e,r,n,a,i,2):2===o&&Xi(t,e,r,n,a,i):Hi(qi(t),e,r,n,a,i,1);break}}}function Gi(t){var e=t.prev,r=t,n=t.next;if(ro(e,r,n)>=0)return!1;for(var a=t.next.next;a!==t.prev;){if(to(e.x,e.y,r.x,r.y,n.x,n.y,a.x,a.y)&&ro(a.prev,a,a.next)>=0)return!1;a=a.next}return!0}function Yi(t,e,r,n){var a=t.prev,i=t,o=t.next;if(ro(a,i,o)>=0)return!1;for(var s=a.x<i.x?a.x<o.x?a.x:o.x:i.x<o.x?i.x:o.x,l=a.y<i.y?a.y<o.y?a.y:o.y:i.y<o.y?i.y:o.y,c=a.x>i.x?a.x>o.x?a.x:o.x:i.x>o.x?i.x:o.x,u=a.y>i.y?a.y>o.y?a.y:o.y:i.y>o.y?i.y:o.y,h=Qi(s,l,e,r,n),f=Qi(c,u,e,r,n),p=t.prevZ,d=t.nextZ;p&&p.z>=h&&d&&d.z<=f;){if(p!==t.prev&&p!==t.next&&to(a.x,a.y,i.x,i.y,o.x,o.y,p.x,p.y)&&ro(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,d!==t.prev&&d!==t.next&&to(a.x,a.y,i.x,i.y,o.x,o.y,d.x,d.y)&&ro(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(;p&&p.z>=h;){if(p!==t.prev&&p!==t.next&&to(a.x,a.y,i.x,i.y,o.x,o.y,p.x,p.y)&&ro(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;d&&d.z<=f;){if(d!==t.prev&&d!==t.next&&to(a.x,a.y,i.x,i.y,o.x,o.y,d.x,d.y)&&ro(d.prev,d,d.next)>=0)return!1;d=d.nextZ}return!0}function Wi(t,e,r){var n=t;do{var a=n.prev,i=n.next.next;!no(a,i)&&ao(a,n,n.next,i)&&so(a,i)&&so(i,a)&&(e.push(a.i/r),e.push(n.i/r),e.push(i.i/r),uo(n),uo(n.next),n=t=i),n=n.next}while(n!==t);return qi(n)}function Xi(t,e,r,n,a,i){var o=t;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&eo(o,s)){var l=lo(o,s);return o=qi(o,o.next),l=qi(l,l.next),Hi(o,e,r,n,a,i),void Hi(l,e,r,n,a,i)}s=s.next}o=o.next}while(o!==t)}function Zi(t,e){return t.x-e.x}function Ji(t,e){if(e=function(t,e){var r,n=e,a=t.x,i=t.y,o=-1/0;do{if(i<=n.y&&i>=n.next.y&&n.next.y!==n.y){var s=n.x+(i-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=a&&s>o){if(o=s,s===a){if(i===n.y)return n;if(i===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(a===o)return r;var l,c=r,u=r.x,h=r.y,f=1/0;n=r;do{a>=n.x&&n.x>=u&&a!==n.x&&to(i<h?a:o,i,u,h,i<h?o:a,i,n.x,n.y)&&(l=Math.abs(i-n.y)/(a-n.x),so(n,t)&&(l<f||l===f&&(n.x>r.x||n.x===r.x&&Ki(r,n)))&&(r=n,f=l)),n=n.next}while(n!==c);return r}(t,e)){var r=lo(e,t);qi(r,r.next)}}function Ki(t,e){return ro(t.prev,t,e.prev)<0&&ro(e.next,t,t.next)<0}function Qi(t,e,r,n,a){return(t=1431655765&((t=858993459&((t=252645135&((t=16711935&((t=32767*(t-r)*a)|t<<8))|t<<4))|t<<2))|t<<1))|(e=1431655765&((e=858993459&((e=252645135&((e=16711935&((e=32767*(e-n)*a)|e<<8))|e<<4))|e<<2))|e<<1))<<1}function $i(t){var e=t,r=t;do{(e.x<r.x||e.x===r.x&&e.y<r.y)&&(r=e),e=e.next}while(e!==t);return r}function to(t,e,r,n,a,i,o,s){return(a-o)*(e-s)-(t-o)*(i-s)>=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(i-s)-(a-o)*(n-s)>=0}function eo(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!function(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&ao(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}(t,e)&&(so(t,e)&&so(e,t)&&function(t,e){var r=t,n=!1,a=(t.x+e.x)/2,i=(t.y+e.y)/2;do{r.y>i!=r.next.y>i&&r.next.y!==r.y&&a<(r.next.x-r.x)*(i-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}(t,e)&&(ro(t.prev,t,e.prev)||ro(t,e.prev,e))||no(t,e)&&ro(t.prev,t,t.next)>0&&ro(e.prev,e,e.next)>0)}function ro(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function no(t,e){return t.x===e.x&&t.y===e.y}function ao(t,e,r,n){var a=oo(ro(t,e,r)),i=oo(ro(t,e,n)),o=oo(ro(r,n,t)),s=oo(ro(r,n,e));return a!==i&&o!==s||!(0!==a||!io(t,r,e))||!(0!==i||!io(t,n,e))||!(0!==o||!io(r,t,n))||!(0!==s||!io(r,e,n))}function io(t,e,r){return e.x<=Math.max(t.x,r.x)&&e.x>=Math.min(t.x,r.x)&&e.y<=Math.max(t.y,r.y)&&e.y>=Math.min(t.y,r.y)}function oo(t){return t>0?1:t<0?-1:0}function so(t,e){return ro(t.prev,t,t.next)<0?ro(t,e,t.next)>=0&&ro(t,t.prev,e)>=0:ro(t,e,t.prev)<0||ro(t,t.next,e)<0}function lo(t,e){var r=new ho(t.i,t.x,t.y),n=new ho(e.i,e.x,e.y),a=t.next,i=e.prev;return t.next=e,e.prev=t,r.next=a,a.prev=r,n.next=r,r.prev=n,i.next=n,n.prev=i,n}function co(t,e,r,n){var a=new ho(t,e,r);return n?(a.next=n.next,a.prev=n,n.next.prev=a,n.next=a):(a.prev=a,a.next=a),a}function uo(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function ho(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function fo(t,e,r,n){for(var a=0,i=e,o=r-n;i<r;i+=n)a+=(t[o]-t[i])*(t[i+1]+t[o+1]),o=i;return a}function po(t,e,r,n,a){!function t(e,r,n,a,i){for(;a>n;){if(a-n>600){var o=a-n+1,s=r-n+1,l=Math.log(o),c=.5*Math.exp(2*l/3),u=.5*Math.sqrt(l*c*(o-c)/o)*(s-o/2<0?-1:1);t(e,r,Math.max(n,Math.floor(r-s*c/o+u)),Math.min(a,Math.floor(r+(o-s)*c/o+u)),i)}var h=e[r],f=n,p=a;for(go(e,n,r),i(e[a],h)>0&&go(e,n,a);f<p;){for(go(e,f,p),f++,p--;i(e[f],h)<0;)f++;for(;i(e[p],h)>0;)p--}0===i(e[n],h)?go(e,n,p):go(e,++p,a),p<=r&&(n=p+1),r<=p&&(a=p-1)}}(t,e,r||0,n||t.length-1,a||vo)}function go(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function vo(t,e){return t<e?-1:t>e?1:0}function mo(t,e){var r=t.length;if(r<=1)return[t];for(var n,a,i=[],o=0;o<r;o++){var s=T(t[o]);0!==s&&(t[o].area=Math.abs(s),void 0===a&&(a=s<0),a===s<0?(n&&i.push(n),n=[t[o]]):n.push(t[o]))}if(n&&i.push(n),e>1)for(var l=0;l<i.length;l++)i[l].length<=e||(po(i[l],e,1,i[l].length-1,yo),i[l]=i[l].slice(0,e));return i}function yo(t,e){return e.area-t.area}function xo(t,e,r){for(var n=r.patternDependencies,a=!1,i=0,o=e;i<o.length;i+=1){var s=o[i].paint.get(t+"-pattern");s.isConstant()||(a=!0);var l=s.constantOr(null);l&&(a=!0,n[l.to]=!0,n[l.from]=!0)}return a}function bo(t,e,r,n,a){for(var i=a.patternDependencies,o=0,s=e;o<s.length;o+=1){var l=s[o],c=l.paint.get(t+"-pattern").value;if("constant"!==c.kind){var u=c.evaluate({zoom:n-1},r,{}),h=c.evaluate({zoom:n},r,{}),f=c.evaluate({zoom:n+1},r,{});i[u]=!0,i[h]=!0,i[f]=!0,r.patterns[l.id]={min:u,mid:h,max:f}}}return r}Vi.deviation=function(t,e,r,n){var a=e&&e.length,i=a?e[0]*r:t.length,o=Math.abs(fo(t,0,i,r));if(a)for(var s=0,l=e.length;s<l;s++){var c=e[s]*r,u=s<l-1?e[s+1]*r:t.length;o-=Math.abs(fo(t,c,u,r))}var h=0;for(s=0;s<n.length;s+=3){var f=n[s]*r,p=n[s+1]*r,d=n[s+2]*r;h+=Math.abs((t[f]-t[d])*(t[p+1]-t[f+1])-(t[f]-t[p])*(t[d+1]-t[f+1]))}return 0===o&&0===h?0:Math.abs((h-o)/o)},Vi.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},n=0,a=0;a<t.length;a++){for(var i=0;i<t[a].length;i++)for(var o=0;o<e;o++)r.vertices.push(t[a][i][o]);a>0&&(n+=t[a-1].length,r.holes.push(n))}return r},Ni.default=ji;var _o=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.layoutVertexArray=new Qn,this.indexArray=new da,this.indexArray2=new ga,this.programConfigurations=new Qa(Bi,t.layers,t.zoom),this.segments=new Oa,this.segments2=new Oa,this.stateDependentLayerIds=this.layers.filter(function(t){return t.isStateDependent()}).map(function(t){return t.id})};_o.prototype.populate=function(t,e){this.hasPattern=xo("fill",this.layers,e);for(var r=this.layers[0].layout.get("fill-sort-key"),n=[],a=0,i=t;a<i.length;a+=1){var o=i[a],s=o.feature,l=o.index,c=o.sourceLayerIndex;if(this.layers[0]._featureFilter(new Pn(this.zoom),s)){var u=ni(s),h=r?r.evaluate(s,{}):void 0,f={id:s.id,properties:s.properties,type:s.type,sourceLayerIndex:c,index:l,geometry:u,patterns:{},sortKey:h};n.push(f)}}r&&n.sort(function(t,e){return t.sortKey-e.sortKey});for(var p=0,d=n;p<d.length;p+=1){var g=d[p],v=g,m=v.geometry,y=v.index,x=v.sourceLayerIndex;if(this.hasPattern){var b=bo("fill",this.layers,g,this.zoom,e);this.patternFeatures.push(b)}else this.addFeature(g,m,y,{});var _=t[y].feature;e.featureIndex.insert(_,m,y,x,this.index)}},_o.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},_o.prototype.addFeatures=function(t,e){for(var r=0,n=this.patternFeatures;r<n.length;r+=1){var a=n[r];this.addFeature(a,a.geometry,a.index,e)}},_o.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},_o.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},_o.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Bi),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.indexBuffer2=t.createIndexBuffer(this.indexArray2)),this.programConfigurations.upload(t),this.uploaded=!0},_o.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.indexBuffer2.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.segments2.destroy())},_o.prototype.addFeature=function(t,e,r,n){for(var a=0,i=mo(e,500);a<i.length;a+=1){for(var o=i[a],s=0,l=0,c=o;l<c.length;l+=1)s+=c[l].length;for(var u=this.segments.prepareSegment(s,this.layoutVertexArray,this.indexArray),h=u.vertexLength,f=[],p=[],d=0,g=o;d<g.length;d+=1){var v=g[d];if(0!==v.length){v!==o[0]&&p.push(f.length/2);var m=this.segments2.prepareSegment(v.length,this.layoutVertexArray,this.indexArray2),y=m.vertexLength;this.layoutVertexArray.emplaceBack(v[0].x,v[0].y),this.indexArray2.emplaceBack(y+v.length-1,y),f.push(v[0].x),f.push(v[0].y);for(var x=1;x<v.length;x++)this.layoutVertexArray.emplaceBack(v[x].x,v[x].y),this.indexArray2.emplaceBack(y+x-1,y+x),f.push(v[x].x),f.push(v[x].y);m.vertexLength+=v.length,m.primitiveLength+=v.length}}for(var b=Ni(f,p),_=0;_<b.length;_+=3)this.indexArray.emplaceBack(h+b[_],h+b[_+1],h+b[_+2]);u.vertexLength+=s,u.primitiveLength+=b.length/3}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,n)},dn("FillBucket",_o,{omit:["layers","patternFeatures"]});var wo=new Gn({"fill-sort-key":new Vn(Tt.layout_fill["fill-sort-key"])}),ko={paint:new Gn({"fill-antialias":new jn(Tt.paint_fill["fill-antialias"]),"fill-opacity":new Vn(Tt.paint_fill["fill-opacity"]),"fill-color":new Vn(Tt.paint_fill["fill-color"]),"fill-outline-color":new Vn(Tt.paint_fill["fill-outline-color"]),"fill-translate":new jn(Tt.paint_fill["fill-translate"]),"fill-translate-anchor":new jn(Tt.paint_fill["fill-translate-anchor"]),"fill-pattern":new Un(Tt.paint_fill["fill-pattern"])}),layout:wo},To=function(t){function e(e){t.call(this,e,ko)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.recalculate=function(e){t.prototype.recalculate.call(this,e);var r=this.paint._values["fill-outline-color"];"constant"===r.value.kind&&void 0===r.value.value&&(this.paint._values["fill-outline-color"]=this.paint._values["fill-color"])},e.prototype.createBucket=function(t){return new _o(t)},e.prototype.queryRadius=function(){return yi(this.paint.get("fill-translate"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,a,i,o){return li(xi(t,this.paint.get("fill-translate"),this.paint.get("fill-translate-anchor"),i.angle,o),n)},e.prototype.isTileClipped=function(){return!0},e}(Yn),Mo=Jn([{name:"a_pos",components:2,type:"Int16"},{name:"a_normal_ed",components:4,type:"Int16"}],4).members,Ao=So;function So(t,e,r,n,a){this.properties={},this.extent=r,this.type=0,this._pbf=t,this._geometry=-1,this._keys=n,this._values=a,t.readFields(Eo,this,e)}function Eo(t,e,r){1==t?e.id=r.readVarint():2==t?function(t,e){for(var r=t.readVarint()+t.pos;t.pos<r;){var n=e._keys[t.readVarint()],a=e._values[t.readVarint()];e.properties[n]=a}}(r,e):3==t?e.type=r.readVarint():4==t&&(e._geometry=r.pos)}function Lo(t){for(var e,r,n=0,a=0,i=t.length,o=i-1;a<i;o=a++)e=t[a],n+=((r=t[o]).x-e.x)*(e.y+r.y);return n}So.types=["Unknown","Point","LineString","Polygon"],So.prototype.loadGeometry=function(){var t=this._pbf;t.pos=this._geometry;for(var e,r=t.readVarint()+t.pos,n=1,i=0,o=0,s=0,l=[];t.pos<r;){if(i<=0){var c=t.readVarint();n=7&c,i=c>>3}if(i--,1===n||2===n)o+=t.readSVarint(),s+=t.readSVarint(),1===n&&(e&&l.push(e),e=[]),e.push(new a(o,s));else{if(7!==n)throw new Error("unknown command "+n);e&&e.push(e[0].clone())}}return e&&l.push(e),l},So.prototype.bbox=function(){var t=this._pbf;t.pos=this._geometry;for(var e=t.readVarint()+t.pos,r=1,n=0,a=0,i=0,o=1/0,s=-1/0,l=1/0,c=-1/0;t.pos<e;){if(n<=0){var u=t.readVarint();r=7&u,n=u>>3}if(n--,1===r||2===r)(a+=t.readSVarint())<o&&(o=a),a>s&&(s=a),(i+=t.readSVarint())<l&&(l=i),i>c&&(c=i);else if(7!==r)throw new Error("unknown command "+r)}return[o,l,s,c]},So.prototype.toGeoJSON=function(t,e,r){var n,a,i=this.extent*Math.pow(2,r),o=this.extent*t,s=this.extent*e,l=this.loadGeometry(),c=So.types[this.type];function u(t){for(var e=0;e<t.length;e++){var r=t[e],n=180-360*(r.y+s)/i;t[e]=[360*(r.x+o)/i-180,360/Math.PI*Math.atan(Math.exp(n*Math.PI/180))-90]}}switch(this.type){case 1:var h=[];for(n=0;n<l.length;n++)h[n]=l[n][0];u(l=h);break;case 2:for(n=0;n<l.length;n++)u(l[n]);break;case 3:for(l=function(t){var e=t.length;if(e<=1)return[t];for(var r,n,a=[],i=0;i<e;i++){var o=Lo(t[i]);0!==o&&(void 0===n&&(n=o<0),n===o<0?(r&&a.push(r),r=[t[i]]):r.push(t[i]))}return r&&a.push(r),a}(l),n=0;n<l.length;n++)for(a=0;a<l[n].length;a++)u(l[n][a])}1===l.length?l=l[0]:c="Multi"+c;var f={type:"Feature",geometry:{type:c,coordinates:l},properties:this.properties};return"id"in this&&(f.id=this.id),f};var Co=Po;function Po(t,e){this.version=1,this.name=null,this.extent=4096,this.length=0,this._pbf=t,this._keys=[],this._values=[],this._features=[],t.readFields(Oo,this,e),this.length=this._features.length}function Oo(t,e,r){15===t?e.version=r.readVarint():1===t?e.name=r.readString():5===t?e.extent=r.readVarint():2===t?e._features.push(r.pos):3===t?e._keys.push(r.readString()):4===t&&e._values.push(function(t){for(var e=null,r=t.readVarint()+t.pos;t.pos<r;){var n=t.readVarint()>>3;e=1===n?t.readString():2===n?t.readFloat():3===n?t.readDouble():4===n?t.readVarint64():5===n?t.readVarint():6===n?t.readSVarint():7===n?t.readBoolean():null}return e}(r))}function zo(t,e,r){if(3===t){var n=new Co(r,r.readVarint()+r.pos);n.length&&(e[n.name]=n)}}Po.prototype.feature=function(t){if(t<0||t>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[t];var e=this._pbf.readVarint()+this._pbf.pos;return new Ao(this._pbf,e,this.extent,this._keys,this._values)};var Io={VectorTile:function(t,e){this.layers=t.readFields(zo,{},e)},VectorTileFeature:Ao,VectorTileLayer:Co},Do=Io.VectorTileFeature.types,Ro=Math.pow(2,13);function Fo(t,e,r,n,a,i,o,s){t.emplaceBack(e,r,2*Math.floor(n*Ro)+o,a*Ro*2,i*Ro*2,Math.round(s))}var Bo=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.hasPattern=!1,this.layoutVertexArray=new ta,this.indexArray=new da,this.programConfigurations=new Qa(Mo,t.layers,t.zoom),this.segments=new Oa,this.stateDependentLayerIds=this.layers.filter(function(t){return t.isStateDependent()}).map(function(t){return t.id})};function No(t,e){return t.x===e.x&&(t.x<0||t.x>ei)||t.y===e.y&&(t.y<0||t.y>ei)}function jo(t){return t.every(function(t){return t.x<0})||t.every(function(t){return t.x>ei})||t.every(function(t){return t.y<0})||t.every(function(t){return t.y>ei})}Bo.prototype.populate=function(t,e){this.features=[],this.hasPattern=xo("fill-extrusion",this.layers,e);for(var r=0,n=t;r<n.length;r+=1){var a=n[r],i=a.feature,o=a.index,s=a.sourceLayerIndex;if(this.layers[0]._featureFilter(new Pn(this.zoom),i)){var l=ni(i),c={sourceLayerIndex:s,index:o,geometry:l,properties:i.properties,type:i.type,patterns:{}};void 0!==i.id&&(c.id=i.id),this.hasPattern?this.features.push(bo("fill-extrusion",this.layers,c,this.zoom,e)):this.addFeature(c,l,o,{}),e.featureIndex.insert(i,l,o,s,this.index,!0)}}},Bo.prototype.addFeatures=function(t,e){for(var r=0,n=this.features;r<n.length;r+=1){var a=n[r],i=a.geometry;this.addFeature(a,i,a.index,e)}},Bo.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},Bo.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},Bo.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},Bo.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Mo),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},Bo.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},Bo.prototype.addFeature=function(t,e,r,n){for(var a=0,i=mo(e,500);a<i.length;a+=1){for(var o=i[a],s=0,l=0,c=o;l<c.length;l+=1)s+=c[l].length;for(var u=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray),h=0,f=o;h<f.length;h+=1){var p=f[h];if(0!==p.length&&!jo(p))for(var d=0,g=0;g<p.length;g++){var v=p[g];if(g>=1){var m=p[g-1];if(!No(v,m)){u.vertexLength+4>Oa.MAX_VERTEX_ARRAY_LENGTH&&(u=this.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));var y=v.sub(m)._perp()._unit(),x=m.dist(v);d+x>32768&&(d=0),Fo(this.layoutVertexArray,v.x,v.y,y.x,y.y,0,0,d),Fo(this.layoutVertexArray,v.x,v.y,y.x,y.y,0,1,d),d+=x,Fo(this.layoutVertexArray,m.x,m.y,y.x,y.y,0,0,d),Fo(this.layoutVertexArray,m.x,m.y,y.x,y.y,0,1,d);var b=u.vertexLength;this.indexArray.emplaceBack(b,b+2,b+1),this.indexArray.emplaceBack(b+1,b+2,b+3),u.vertexLength+=4,u.primitiveLength+=2}}}}if(u.vertexLength+s>Oa.MAX_VERTEX_ARRAY_LENGTH&&(u=this.segments.prepareSegment(s,this.layoutVertexArray,this.indexArray)),"Polygon"===Do[t.type]){for(var _=[],w=[],k=u.vertexLength,T=0,M=o;T<M.length;T+=1){var A=M[T];if(0!==A.length){A!==o[0]&&w.push(_.length/2);for(var S=0;S<A.length;S++){var E=A[S];Fo(this.layoutVertexArray,E.x,E.y,0,0,1,1,0),_.push(E.x),_.push(E.y)}}}for(var L=Ni(_,w),C=0;C<L.length;C+=3)this.indexArray.emplaceBack(k+L[C],k+L[C+2],k+L[C+1]);u.primitiveLength+=L.length/3,u.vertexLength+=s}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,n)},dn("FillExtrusionBucket",Bo,{omit:["layers","features"]});var Vo={paint:new Gn({"fill-extrusion-opacity":new jn(Tt["paint_fill-extrusion"]["fill-extrusion-opacity"]),"fill-extrusion-color":new Vn(Tt["paint_fill-extrusion"]["fill-extrusion-color"]),"fill-extrusion-translate":new jn(Tt["paint_fill-extrusion"]["fill-extrusion-translate"]),"fill-extrusion-translate-anchor":new jn(Tt["paint_fill-extrusion"]["fill-extrusion-translate-anchor"]),"fill-extrusion-pattern":new Un(Tt["paint_fill-extrusion"]["fill-extrusion-pattern"]),"fill-extrusion-height":new Vn(Tt["paint_fill-extrusion"]["fill-extrusion-height"]),"fill-extrusion-base":new Vn(Tt["paint_fill-extrusion"]["fill-extrusion-base"]),"fill-extrusion-vertical-gradient":new jn(Tt["paint_fill-extrusion"]["fill-extrusion-vertical-gradient"])})},Uo=function(t){function e(e){t.call(this,e,Vo)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.createBucket=function(t){return new Bo(t)},e.prototype.queryRadius=function(){return yi(this.paint.get("fill-extrusion-translate"))},e.prototype.is3D=function(){return!0},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,o,s,l){var c=xi(t,this.paint.get("fill-extrusion-translate"),this.paint.get("fill-extrusion-translate-anchor"),o.angle,s),u=this.paint.get("fill-extrusion-height").evaluate(e,r),h=this.paint.get("fill-extrusion-base").evaluate(e,r),f=function(t,e,r,n){for(var i=[],o=0,s=t;o<s.length;o+=1){var l=s[o],c=[l.x,l.y,0,1];Ti(c,c,e),i.push(new a(c[0]/c[3],c[1]/c[3]))}return i}(c,l),p=function(t,e,r,n){for(var i=[],o=[],s=n[8]*e,l=n[9]*e,c=n[10]*e,u=n[11]*e,h=n[8]*r,f=n[9]*r,p=n[10]*r,d=n[11]*r,g=0,v=t;g<v.length;g+=1){for(var m=[],y=[],x=0,b=v[g];x<b.length;x+=1){var _=b[x],w=_.x,k=_.y,T=n[0]*w+n[4]*k+n[12],M=n[1]*w+n[5]*k+n[13],A=n[2]*w+n[6]*k+n[14],S=n[3]*w+n[7]*k+n[15],E=A+c,L=S+u,C=T+h,P=M+f,O=A+p,z=S+d,I=new a((T+s)/L,(M+l)/L);I.z=E/L,m.push(I);var D=new a(C/z,P/z);D.z=O/z,y.push(D)}i.push(m),o.push(y)}return[i,o]}(n,h,u,l);return function(t,e,r){var n=1/0;li(r,e)&&(n=Ho(r,e[0]));for(var a=0;a<e.length;a++)for(var i=e[a],o=t[a],s=0;s<i.length-1;s++){var l=i[s],c=i[s+1],u=o[s],h=[l,c,o[s+1],u,l];oi(r,h)&&(n=Math.min(n,Ho(r,h)))}return n!==1/0&&n}(p[0],p[1],f)},e}(Yn);function qo(t,e){return t.x*e.x+t.y*e.y}function Ho(t,e){if(1===t.length){var r=e[0],n=e[1],a=e[3],i=t[0],o=n.sub(r),s=a.sub(r),l=i.sub(r),c=qo(o,o),u=qo(o,s),h=qo(s,s),f=qo(l,o),p=qo(l,s),d=c*h-u*u,g=(h*f-u*p)/d,v=(c*p-u*f)/d,m=1-g-v;return r.z*m+n.z*g+a.z*v}for(var y=1/0,x=0,b=e;x<b.length;x+=1){var _=b[x];y=Math.min(y,_.z)}return y}var Go=Jn([{name:"a_pos_normal",components:2,type:"Int16"},{name:"a_data",components:4,type:"Uint8"}],4).members,Yo=Io.VectorTileFeature.types,Wo=Math.cos(Math.PI/180*37.5),Xo=Math.pow(2,14)/.5,Zo=function(t){this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.hasPattern=!1,this.patternFeatures=[],this.layoutVertexArray=new ea,this.indexArray=new da,this.programConfigurations=new Qa(Go,t.layers,t.zoom),this.segments=new Oa,this.stateDependentLayerIds=this.layers.filter(function(t){return t.isStateDependent()}).map(function(t){return t.id})};Zo.prototype.populate=function(t,e){this.hasPattern=xo("line",this.layers,e);for(var r=this.layers[0].layout.get("line-sort-key"),n=[],a=0,i=t;a<i.length;a+=1){var o=i[a],s=o.feature,l=o.index,c=o.sourceLayerIndex;if(this.layers[0]._featureFilter(new Pn(this.zoom),s)){var u=ni(s),h=r?r.evaluate(s,{}):void 0,f={id:s.id,properties:s.properties,type:s.type,sourceLayerIndex:c,index:l,geometry:u,patterns:{},sortKey:h};n.push(f)}}r&&n.sort(function(t,e){return t.sortKey-e.sortKey});for(var p=0,d=n;p<d.length;p+=1){var g=d[p],v=g,m=v.geometry,y=v.index,x=v.sourceLayerIndex;if(this.hasPattern){var b=bo("line",this.layers,g,this.zoom,e);this.patternFeatures.push(b)}else this.addFeature(g,m,y,{});var _=t[y].feature;e.featureIndex.insert(_,m,y,x,this.index)}},Zo.prototype.update=function(t,e,r){this.stateDependentLayers.length&&this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},Zo.prototype.addFeatures=function(t,e){for(var r=0,n=this.patternFeatures;r<n.length;r+=1){var a=n[r];this.addFeature(a,a.geometry,a.index,e)}},Zo.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},Zo.prototype.uploadPending=function(){return!this.uploaded||this.programConfigurations.needsUpload},Zo.prototype.upload=function(t){this.uploaded||(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,Go),this.indexBuffer=t.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded=!0},Zo.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},Zo.prototype.addFeature=function(t,e,r,n){for(var a=this.layers[0].layout,i=a.get("line-join").evaluate(t,{}),o=a.get("line-cap"),s=a.get("line-miter-limit"),l=a.get("line-round-limit"),c=0,u=e;c<u.length;c+=1){var h=u[c];this.addLine(h,t,i,o,s,l,r,n)}},Zo.prototype.addLine=function(t,e,r,n,a,i,o,s){if(this.distance=0,this.scaledDistance=0,this.totalDistance=0,e.properties&&e.properties.hasOwnProperty("mapbox_clip_start")&&e.properties.hasOwnProperty("mapbox_clip_end")){this.clipStart=+e.properties.mapbox_clip_start,this.clipEnd=+e.properties.mapbox_clip_end;for(var l=0;l<t.length-1;l++)this.totalDistance+=t[l].dist(t[l+1])}for(var c="Polygon"===Yo[e.type],u=t.length;u>=2&&t[u-1].equals(t[u-2]);)u--;for(var h=0;h<u-1&&t[h].equals(t[h+1]);)h++;if(!(u<(c?3:2))){"bevel"===r&&(a=1.05);var f,p=ei/(512*this.overscaling)*15,d=this.segments.prepareSegment(10*u,this.layoutVertexArray,this.indexArray),g=void 0,v=void 0,m=void 0,y=void 0;this.e1=this.e2=-1,c&&(f=t[u-2],y=t[h].sub(f)._unit()._perp());for(var x=h;x<u;x++)if(!(v=c&&x===u-1?t[h+1]:t[x+1])||!t[x].equals(v)){y&&(m=y),f&&(g=f),f=t[x],y=v?v.sub(f)._unit()._perp():m;var b=(m=m||y).add(y);0===b.x&&0===b.y||b._unit();var _=m.x*y.x+m.y*y.y,w=b.x*y.x+b.y*y.y,k=0!==w?1/w:1/0,T=2*Math.sqrt(2-2*w),M=w<Wo&&g&&v,A=m.x*y.y-m.y*y.x>0;if(M&&x>h){var S=f.dist(g);if(S>2*p){var E=f.sub(f.sub(g)._mult(p/S)._round());this.updateDistance(g,E),this.addCurrentVertex(E,m,0,0,d),g=E}}var L=g&&v,C=L?r:c?"butt":n;if(L&&"round"===C&&(k<i?C="miter":k<=2&&(C="fakeround")),"miter"===C&&k>a&&(C="bevel"),"bevel"===C&&(k>2&&(C="flipbevel"),k<a&&(C="miter")),g&&this.updateDistance(g,f),"miter"===C)b._mult(k),this.addCurrentVertex(f,b,0,0,d);else if("flipbevel"===C){if(k>100)b=y.mult(-1);else{var P=k*m.add(y).mag()/m.sub(y).mag();b._perp()._mult(P*(A?-1:1))}this.addCurrentVertex(f,b,0,0,d),this.addCurrentVertex(f,b.mult(-1),0,0,d)}else if("bevel"===C||"fakeround"===C){var O=-Math.sqrt(k*k-1),z=A?O:0,I=A?0:O;if(g&&this.addCurrentVertex(f,m,z,I,d),"fakeround"===C)for(var D=Math.round(180*T/Math.PI/20),R=1;R<D;R++){var F=R/D;if(.5!==F){var B=F-.5;F+=F*B*(F-1)*((1.0904+_*(_*(3.55645-1.43519*_)-3.2452))*B*B+(.848013+_*(.215638*_-1.06021)))}var N=y.sub(m)._mult(F)._add(m)._unit()._mult(A?-1:1);this.addHalfVertex(f,N.x,N.y,!1,A,0,d)}v&&this.addCurrentVertex(f,y,-z,-I,d)}else if("butt"===C)this.addCurrentVertex(f,b,0,0,d);else if("square"===C){var j=g?1:-1;this.addCurrentVertex(f,b,j,j,d)}else"round"===C&&(g&&(this.addCurrentVertex(f,m,0,0,d),this.addCurrentVertex(f,m,1,1,d,!0)),v&&(this.addCurrentVertex(f,y,-1,-1,d,!0),this.addCurrentVertex(f,y,0,0,d)));if(M&&x<u-1){var V=f.dist(v);if(V>2*p){var U=f.add(v.sub(f)._mult(p/V)._round());this.updateDistance(f,U),this.addCurrentVertex(U,y,0,0,d),f=U}}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,e,o,s)}},Zo.prototype.addCurrentVertex=function(t,e,r,n,a,i){void 0===i&&(i=!1);var o=e.x+e.y*r,s=e.y-e.x*r,l=-e.x+e.y*n,c=-e.y-e.x*n;this.addHalfVertex(t,o,s,i,!1,r,a),this.addHalfVertex(t,l,c,i,!0,-n,a),this.distance>Xo/2&&0===this.totalDistance&&(this.distance=0,this.addCurrentVertex(t,e,r,n,a,i))},Zo.prototype.addHalfVertex=function(t,e,r,n,a,i,o){var s=t.x,l=t.y,c=.5*this.scaledDistance;this.layoutVertexArray.emplaceBack((s<<1)+(n?1:0),(l<<1)+(a?1:0),Math.round(63*e)+128,Math.round(63*r)+128,1+(0===i?0:i<0?-1:1)|(63&c)<<2,c>>6);var u=o.vertexLength++;this.e1>=0&&this.e2>=0&&(this.indexArray.emplaceBack(this.e1,this.e2,u),o.primitiveLength++),a?this.e2=u:this.e1=u},Zo.prototype.updateDistance=function(t,e){this.distance+=t.dist(e),this.scaledDistance=this.totalDistance>0?(this.clipStart+(this.clipEnd-this.clipStart)*this.distance/this.totalDistance)*(Xo-1):this.distance},dn("LineBucket",Zo,{omit:["layers","patternFeatures"]});var Jo=new Gn({"line-cap":new jn(Tt.layout_line["line-cap"]),"line-join":new Vn(Tt.layout_line["line-join"]),"line-miter-limit":new jn(Tt.layout_line["line-miter-limit"]),"line-round-limit":new jn(Tt.layout_line["line-round-limit"]),"line-sort-key":new Vn(Tt.layout_line["line-sort-key"])}),Ko={paint:new Gn({"line-opacity":new Vn(Tt.paint_line["line-opacity"]),"line-color":new Vn(Tt.paint_line["line-color"]),"line-translate":new jn(Tt.paint_line["line-translate"]),"line-translate-anchor":new jn(Tt.paint_line["line-translate-anchor"]),"line-width":new Vn(Tt.paint_line["line-width"]),"line-gap-width":new Vn(Tt.paint_line["line-gap-width"]),"line-offset":new Vn(Tt.paint_line["line-offset"]),"line-blur":new Vn(Tt.paint_line["line-blur"]),"line-dasharray":new qn(Tt.paint_line["line-dasharray"]),"line-pattern":new Un(Tt.paint_line["line-pattern"]),"line-gradient":new Hn(Tt.paint_line["line-gradient"])}),layout:Jo},Qo=new(function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.possiblyEvaluate=function(e,r){return r=new Pn(Math.floor(r.zoom),{now:r.now,fadeDuration:r.fadeDuration,zoomHistory:r.zoomHistory,transition:r.transition}),t.prototype.possiblyEvaluate.call(this,e,r)},e.prototype.evaluate=function(e,r,n,a){return r=h({},r,{zoom:Math.floor(r.zoom)}),t.prototype.evaluate.call(this,e,r,n,a)},e}(Vn))(Ko.paint.properties["line-width"].specification);Qo.useIntegerZoom=!0;var $o=function(t){function e(e){t.call(this,e,Ko)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype._handleSpecialPaintPropertyUpdate=function(t){"line-gradient"===t&&this._updateGradient()},e.prototype._updateGradient=function(){var t=this._transitionablePaint._values["line-gradient"].value.expression;this.gradient=Ii(t,"lineProgress"),this.gradientTexture=null},e.prototype.recalculate=function(e){t.prototype.recalculate.call(this,e),this.paint._values["line-floorwidth"]=Qo.possiblyEvaluate(this._transitioningPaint._values["line-width"].value,e)},e.prototype.createBucket=function(t){return new Zo(t)},e.prototype.queryRadius=function(t){var e=t,r=ts(mi("line-width",this,e),mi("line-gap-width",this,e)),n=mi("line-offset",this,e);return r/2+Math.abs(n)+yi(this.paint.get("line-translate"))},e.prototype.queryIntersectsFeature=function(t,e,r,n,i,o,s){var l=xi(t,this.paint.get("line-translate"),this.paint.get("line-translate-anchor"),o.angle,s),c=s/2*ts(this.paint.get("line-width").evaluate(e,r),this.paint.get("line-gap-width").evaluate(e,r)),u=this.paint.get("line-offset").evaluate(e,r);return u&&(n=function(t,e){for(var r=[],n=new a(0,0),i=0;i<t.length;i++){for(var o=t[i],s=[],l=0;l<o.length;l++){var c=o[l-1],u=o[l],h=o[l+1],f=0===l?n:u.sub(c)._unit()._perp(),p=l===o.length-1?n:h.sub(u)._unit()._perp(),d=f._add(p)._unit(),g=d.x*p.x+d.y*p.y;d._mult(1/g),s.push(d._mult(e)._add(u))}r.push(s)}return r}(n,u*s)),function(t,e,r){for(var n=0;n<e.length;n++){var a=e[n];if(t.length>=3)for(var i=0;i<a.length;i++)if(gi(t,a[i]))return!0;if(ci(t,a,r))return!0}return!1}(l,n,c)},e.prototype.isTileClipped=function(){return!0},e}(Yn);function ts(t,e){return e>0?e+2*t:t}var es=Jn([{name:"a_pos_offset",components:4,type:"Int16"},{name:"a_data",components:4,type:"Uint16"}]),rs=Jn([{name:"a_projected_pos",components:3,type:"Float32"}],4),ns=(Jn([{name:"a_fade_opacity",components:1,type:"Uint32"}],4),Jn([{name:"a_placed",components:2,type:"Uint8"},{name:"a_shift",components:2,type:"Float32"}])),as=(Jn([{type:"Int16",name:"anchorPointX"},{type:"Int16",name:"anchorPointY"},{type:"Int16",name:"x1"},{type:"Int16",name:"y1"},{type:"Int16",name:"x2"},{type:"Int16",name:"y2"},{type:"Uint32",name:"featureIndex"},{type:"Uint16",name:"sourceLayerIndex"},{type:"Uint16",name:"bucketIndex"},{type:"Int16",name:"radius"},{type:"Int16",name:"signedDistanceFromAnchor"}]),Jn([{name:"a_pos",components:2,type:"Int16"},{name:"a_anchor_pos",components:2,type:"Int16"},{name:"a_extrude",components:2,type:"Int16"}],4)),is=Jn([{name:"a_pos",components:2,type:"Int16"},{name:"a_anchor_pos",components:2,type:"Int16"},{name:"a_extrude",components:2,type:"Int16"}],4);function os(t,e,r){return t.sections.forEach(function(t){t.text=function(t,e,r){var n=e.layout.get("text-transform").evaluate(r,{});return"uppercase"===n?t=t.toLocaleUpperCase():"lowercase"===n&&(t=t.toLocaleLowerCase()),Cn.applyArabicShaping&&(t=Cn.applyArabicShaping(t)),t}(t.text,e,r)}),t}Jn([{type:"Int16",name:"anchorX"},{type:"Int16",name:"anchorY"},{type:"Uint16",name:"glyphStartIndex"},{type:"Uint16",name:"numGlyphs"},{type:"Uint32",name:"vertexStartIndex"},{type:"Uint32",name:"lineStartIndex"},{type:"Uint32",name:"lineLength"},{type:"Uint16",name:"segment"},{type:"Uint16",name:"lowerSize"},{type:"Uint16",name:"upperSize"},{type:"Float32",name:"lineOffsetX"},{type:"Float32",name:"lineOffsetY"},{type:"Uint8",name:"writingMode"},{type:"Uint8",name:"placedOrientation"},{type:"Uint8",name:"hidden"},{type:"Uint32",name:"crossTileID"}]),Jn([{type:"Int16",name:"anchorX"},{type:"Int16",name:"anchorY"},{type:"Int16",name:"rightJustifiedTextSymbolIndex"},{type:"Int16",name:"centerJustifiedTextSymbolIndex"},{type:"Int16",name:"leftJustifiedTextSymbolIndex"},{type:"Int16",name:"verticalPlacedTextSymbolIndex"},{type:"Uint16",name:"key"},{type:"Uint16",name:"textBoxStartIndex"},{type:"Uint16",name:"textBoxEndIndex"},{type:"Uint16",name:"verticalTextBoxStartIndex"},{type:"Uint16",name:"verticalTextBoxEndIndex"},{type:"Uint16",name:"iconBoxStartIndex"},{type:"Uint16",name:"iconBoxEndIndex"},{type:"Uint16",name:"featureIndex"},{type:"Uint16",name:"numHorizontalGlyphVertices"},{type:"Uint16",name:"numVerticalGlyphVertices"},{type:"Uint16",name:"numIconVertices"},{type:"Uint32",name:"crossTileID"},{type:"Float32",name:"textBoxScale"},{type:"Float32",name:"radialTextOffset"}]),Jn([{type:"Float32",name:"offsetX"}]),Jn([{type:"Int16",name:"x"},{type:"Int16",name:"y"},{type:"Int16",name:"tileUnitDistanceFromAnchor"}]);var ss={"!":"\ufe15","#":"\uff03",$:"\uff04","%":"\uff05","&":"\uff06","(":"\ufe35",")":"\ufe36","*":"\uff0a","+":"\uff0b",",":"\ufe10","-":"\ufe32",".":"\u30fb","/":"\uff0f",":":"\ufe13",";":"\ufe14","<":"\ufe3f","=":"\uff1d",">":"\ufe40","?":"\ufe16","@":"\uff20","[":"\ufe47","\\":"\uff3c","]":"\ufe48","^":"\uff3e",_:"\ufe33","`":"\uff40","{":"\ufe37","|":"\u2015","}":"\ufe38","~":"\uff5e","\xa2":"\uffe0","\xa3":"\uffe1","\xa5":"\uffe5","\xa6":"\uffe4","\xac":"\uffe2","\xaf":"\uffe3","\u2013":"\ufe32","\u2014":"\ufe31","\u2018":"\ufe43","\u2019":"\ufe44","\u201c":"\ufe41","\u201d":"\ufe42","\u2026":"\ufe19","\u2027":"\u30fb","\u20a9":"\uffe6","\u3001":"\ufe11","\u3002":"\ufe12","\u3008":"\ufe3f","\u3009":"\ufe40","\u300a":"\ufe3d","\u300b":"\ufe3e","\u300c":"\ufe41","\u300d":"\ufe42","\u300e":"\ufe43","\u300f":"\ufe44","\u3010":"\ufe3b","\u3011":"\ufe3c","\u3014":"\ufe39","\u3015":"\ufe3a","\u3016":"\ufe17","\u3017":"\ufe18","\uff01":"\ufe15","\uff08":"\ufe35","\uff09":"\ufe36","\uff0c":"\ufe10","\uff0d":"\ufe32","\uff0e":"\u30fb","\uff1a":"\ufe13","\uff1b":"\ufe14","\uff1c":"\ufe3f","\uff1e":"\ufe40","\uff1f":"\ufe16","\uff3b":"\ufe47","\uff3d":"\ufe48","\uff3f":"\ufe33","\uff5b":"\ufe37","\uff5c":"\u2015","\uff5d":"\ufe38","\uff5f":"\ufe35","\uff60":"\ufe36","\uff61":"\ufe12","\uff62":"\ufe41","\uff63":"\ufe42"},ls=24,cs={horizontal:1,vertical:2,horizontalOnly:3},us=function(){this.text="",this.sectionIndex=[],this.sections=[]};function hs(t,e,r,n,a,i,o,s,l,c,u){var h,f=us.fromFeature(t,r);c===cs.vertical&&f.verticalizePunctuation();var p=Cn.processBidirectionalText,d=Cn.processStyledBidirectionalText;if(p&&1===f.sections.length){h=[];for(var g=0,v=p(f.toString(),ms(f,s,n,e));g<v.length;g+=1){var m=v[g],y=new us;y.text=m,y.sections=f.sections;for(var x=0;x<m.length;x++)y.sectionIndex.push(0);h.push(y)}}else if(d){h=[];for(var b=0,_=d(f.text,f.sectionIndex,ms(f,s,n,e));b<_.length;b+=1){var w=_[b],k=new us;k.text=w[0],k.sectionIndex=w[1],k.sections=f.sections,h.push(k)}}else h=function(t,e){for(var r=[],n=t.text,a=0,i=0,o=e;i<o.length;i+=1){var s=o[i];r.push(t.substring(a,s)),a=s}return a<n.length&&r.push(t.substring(a,n.length)),r}(f,ms(f,s,n,e));var T=[],M={positionedGlyphs:T,text:f.toString(),top:l[1],bottom:l[1],left:l[0],right:l[0],writingMode:c,lineCount:h.length,yOffset:-17};return function(t,e,r,n,a,i,o,s,l){for(var c=0,u=t.yOffset,h=0,f=t.positionedGlyphs,p="right"===i?1:"left"===i?0:.5,d=0,g=r;d<g.length;d+=1){var v=g[d];v.trim();var m=v.getMaxScale();if(v.length()){for(var y=f.length,x=0;x<v.length();x++){var b=v.getSection(x),_=v.getSectionIndex(x),w=v.getCharCode(x),k=24*(m-b.scale),T=e[b.fontStack],M=T&&T[w];M&&(o===cs.horizontal||!l&&!wn(w)||l&&(fs[w]||(S=w,xn.Arabic(S)||xn["Arabic Supplement"](S)||xn["Arabic Extended-A"](S)||xn["Arabic Presentation Forms-A"](S)||xn["Arabic Presentation Forms-B"](S)))?(f.push({glyph:w,x:c,y:u+k,vertical:!1,scale:b.scale,fontStack:b.fontStack,sectionIndex:_}),c+=M.metrics.advance*b.scale+s):(f.push({glyph:w,x:c,y:u+k,vertical:!0,scale:b.scale,fontStack:b.fontStack,sectionIndex:_}),c+=ls*b.scale+s))}if(f.length!==y){var A=c-s;h=Math.max(A,h),xs(f,e,y,f.length-1,p)}c=0,u+=n*m}else u+=n}var S,E=ys(a),L=E.horizontalAlign,C=E.verticalAlign;!function(t,e,r,n,a,i,o){for(var s=(e-r)*a,l=(-n*o+.5)*i,c=0;c<t.length;c++)t[c].x+=s,t[c].y+=l}(f,p,L,C,h,n,r.length);var P=u-t.yOffset;t.top+=-C*P,t.bottom=t.top+P,t.left+=-L*h,t.right=t.left+h}(M,e,h,a,i,o,c,s,u),!!T.length&&M}us.fromFeature=function(t,e){for(var r=new us,n=0;n<t.sections.length;n++){var a=t.sections[n];r.sections.push({scale:a.scale||1,fontStack:a.fontStack||e}),r.text+=a.text;for(var i=0;i<a.text.length;i++)r.sectionIndex.push(n)}return r},us.prototype.length=function(){return this.text.length},us.prototype.getSection=function(t){return this.sections[this.sectionIndex[t]]},us.prototype.getSectionIndex=function(t){return this.sectionIndex[t]},us.prototype.getCharCode=function(t){return this.text.charCodeAt(t)},us.prototype.verticalizePunctuation=function(){this.text=function(t){for(var e="",r=0;r<t.length;r++){var n=t.charCodeAt(r+1)||null,a=t.charCodeAt(r-1)||null;n&&kn(n)&&!ss[t[r+1]]||a&&kn(a)&&!ss[t[r-1]]||!ss[t[r]]?e+=t[r]:e+=ss[t[r]]}return e}(this.text)},us.prototype.trim=function(){for(var t=0,e=0;e<this.text.length&&fs[this.text.charCodeAt(e)];e++)t++;for(var r=this.text.length,n=this.text.length-1;n>=0&&n>=t&&fs[this.text.charCodeAt(n)];n--)r--;this.text=this.text.substring(t,r),this.sectionIndex=this.sectionIndex.slice(t,r)},us.prototype.substring=function(t,e){var r=new us;return r.text=this.text.substring(t,e),r.sectionIndex=this.sectionIndex.slice(t,e),r.sections=this.sections,r},us.prototype.toString=function(){return this.text},us.prototype.getMaxScale=function(){var t=this;return this.sectionIndex.reduce(function(e,r){return Math.max(e,t.sections[r].scale)},0)};var fs={9:!0,10:!0,11:!0,12:!0,13:!0,32:!0},ps={};function ds(t,e,r,n){var a=Math.pow(t-e,2);return n?t<e?a/2:2*a:a+Math.abs(r)*r}function gs(t,e,r){var n=0;return 10===t&&(n-=1e4),r&&(n+=150),40!==t&&65288!==t||(n+=50),41!==e&&65289!==e||(n+=50),n}function vs(t,e,r,n,a,i){for(var o=null,s=ds(e,r,a,i),l=0,c=n;l<c.length;l+=1){var u=c[l],h=ds(e-u.x,r,a,i)+u.badness;h<=s&&(o=u,s=h)}return{index:t,x:e,priorBreak:o,badness:s}}function ms(t,e,r,n){if(!r)return[];if(!t)return[];for(var a,i=[],o=function(t,e,r,n){for(var a=0,i=0;i<t.length();i++){var o=t.getSection(i),s=n[o.fontStack],l=s&&s[t.getCharCode(i)];l&&(a+=l.metrics.advance*o.scale+e)}return a/Math.max(1,Math.ceil(a/r))}(t,e,r,n),s=t.text.indexOf("\u200b")>=0,l=0,c=0;c<t.length();c++){var u=t.getSection(c),h=t.getCharCode(c),f=n[u.fontStack],p=f&&f[h];if(p&&!fs[h]&&(l+=p.metrics.advance*u.scale+e),c<t.length()-1){var d=!((a=h)<11904||!(xn["Bopomofo Extended"](a)||xn.Bopomofo(a)||xn["CJK Compatibility Forms"](a)||xn["CJK Compatibility Ideographs"](a)||xn["CJK Compatibility"](a)||xn["CJK Radicals Supplement"](a)||xn["CJK Strokes"](a)||xn["CJK Symbols and Punctuation"](a)||xn["CJK Unified Ideographs Extension A"](a)||xn["CJK Unified Ideographs"](a)||xn["Enclosed CJK Letters and Months"](a)||xn["Halfwidth and Fullwidth Forms"](a)||xn.Hiragana(a)||xn["Ideographic Description Characters"](a)||xn["Kangxi Radicals"](a)||xn["Katakana Phonetic Extensions"](a)||xn.Katakana(a)||xn["Vertical Forms"](a)||xn["Yi Radicals"](a)||xn["Yi Syllables"](a)));(ps[h]||d)&&i.push(vs(c+1,l,o,i,gs(h,t.getCharCode(c+1),d&&s),!1))}}return function t(e){return e?t(e.priorBreak).concat(e.index):[]}(vs(t.length(),l,o,i,0,!0))}function ys(t){var e=.5,r=.5;switch(t){case"right":case"top-right":case"bottom-right":e=1;break;case"left":case"top-left":case"bottom-left":e=0}switch(t){case"bottom":case"bottom-right":case"bottom-left":r=1;break;case"top":case"top-right":case"top-left":r=0}return{horizontalAlign:e,verticalAlign:r}}function xs(t,e,r,n,a){if(a){var i=t[n],o=e[i.fontStack],s=o&&o[i.glyph];if(s)for(var l=s.metrics.advance*i.scale,c=(t[n].x+l)*a,u=r;u<=n;u++)t[u].x-=c}}ps[10]=!0,ps[32]=!0,ps[38]=!0,ps[40]=!0,ps[41]=!0,ps[43]=!0,ps[45]=!0,ps[47]=!0,ps[173]=!0,ps[183]=!0,ps[8203]=!0,ps[8208]=!0,ps[8211]=!0,ps[8231]=!0;var bs=function(t){function e(e,r,n,a){t.call(this,e,r),this.angle=n,void 0!==a&&(this.segment=a)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.clone=function(){return new e(this.x,this.y,this.angle,this.segment)},e}(a);dn("Anchor",bs);var _s=256;function ws(t,e){var r=e.expression;if("constant"===r.kind)return{kind:"constant",layoutSize:r.evaluate(new Pn(t+1))};if("source"===r.kind)return{kind:"source"};for(var n=r.zoomStops,a=r.interpolationType,i=0;i<n.length&&n[i]<=t;)i++;for(var o=i=Math.max(0,i-1);o<n.length&&n[o]<t+1;)o++;o=Math.min(n.length-1,o);var s=n[i],l=n[o];return"composite"===r.kind?{kind:"composite",minZoom:s,maxZoom:l,interpolationType:a}:{kind:"camera",minZoom:s,maxZoom:l,minSize:r.evaluate(new Pn(s)),maxSize:r.evaluate(new Pn(l)),interpolationType:a}}function ks(t,e,r){var n=e.uSize,a=e.uSizeT,i=r.lowerSize,o=r.upperSize;return"source"===t.kind?i/_s:"composite"===t.kind?ye(i/_s,o/_s,a):n}function Ts(t,e){var r=0,n=0;if("constant"===t.kind)n=t.layoutSize;else if("source"!==t.kind){var a=t.interpolationType,i=t.minZoom,o=t.maxZoom,s=a?c(Ne.interpolationFactor(a,e,i,o),0,1):0;"camera"===t.kind?n=ye(t.minSize,t.maxSize,s):r=s}return{uSizeT:r,uSize:n}}var Ms=Object.freeze({getSizeData:ws,evaluateSizeForFeature:ks,evaluateSizeForZoom:Ts,SIZE_PACK_FACTOR:_s}),As=Io.VectorTileFeature.types,Ss=[{name:"a_fade_opacity",components:1,type:"Uint8",offset:0}];function Es(t,e,r,n,a,i,o,s){t.emplaceBack(e,r,Math.round(32*n),Math.round(32*a),i,o,s?s[0]:0,s?s[1]:0)}function Ls(t,e,r){t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r)}var Cs=function(t){this.layoutVertexArray=new na,this.indexArray=new da,this.programConfigurations=t,this.segments=new Oa,this.dynamicLayoutVertexArray=new aa,this.opacityVertexArray=new ia,this.placedSymbolArray=new wa};Cs.prototype.upload=function(t,e,r,n){r&&(this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,es.members),this.indexBuffer=t.createIndexBuffer(this.indexArray,e),this.dynamicLayoutVertexBuffer=t.createVertexBuffer(this.dynamicLayoutVertexArray,rs.members,!0),this.opacityVertexBuffer=t.createVertexBuffer(this.opacityVertexArray,Ss,!0),this.opacityVertexBuffer.itemSize=1),(r||n)&&this.programConfigurations.upload(t)},Cs.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.dynamicLayoutVertexBuffer.destroy(),this.opacityVertexBuffer.destroy())},dn("SymbolBuffers",Cs);var Ps=function(t,e,r){this.layoutVertexArray=new t,this.layoutAttributes=e,this.indexArray=new r,this.segments=new Oa,this.collisionVertexArray=new la};Ps.prototype.upload=function(t){this.layoutVertexBuffer=t.createVertexBuffer(this.layoutVertexArray,this.layoutAttributes),this.indexBuffer=t.createIndexBuffer(this.indexArray),this.collisionVertexBuffer=t.createVertexBuffer(this.collisionVertexArray,ns.members,!0)},Ps.prototype.destroy=function(){this.layoutVertexBuffer&&(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.segments.destroy(),this.collisionVertexBuffer.destroy())},dn("CollisionBuffers",Ps);var Os=function(t){this.collisionBoxArray=t.collisionBoxArray,this.zoom=t.zoom,this.overscaling=t.overscaling,this.layers=t.layers,this.layerIds=this.layers.map(function(t){return t.id}),this.index=t.index,this.pixelRatio=t.pixelRatio,this.sourceLayerIndex=t.sourceLayerIndex,this.hasPattern=!1,this.hasPaintOverrides=!1;var e=this.layers[0]._unevaluatedLayout._values;this.textSizeData=ws(this.zoom,e["text-size"]),this.iconSizeData=ws(this.zoom,e["icon-size"]);var r=this.layers[0].layout,n=r.get("symbol-sort-key"),a=r.get("symbol-z-order");this.sortFeaturesByKey="viewport-y"!==a&&void 0!==n.constantOr(1);var i="viewport-y"===a||"auto"===a&&!this.sortFeaturesByKey;this.sortFeaturesByY=i&&(r.get("text-allow-overlap")||r.get("icon-allow-overlap")||r.get("text-ignore-placement")||r.get("icon-ignore-placement")),"point"===r.get("symbol-placement")&&(this.writingModes=r.get("text-writing-mode").map(function(t){return cs[t]})),this.stateDependentLayerIds=this.layers.filter(function(t){return t.isStateDependent()}).map(function(t){return t.id}),this.sourceID=t.sourceID};Os.prototype.createArrays=function(){var t=this.layers[0].layout;this.hasPaintOverrides=Rs.hasPaintOverrides(t),this.text=new Cs(new Qa(es.members,this.layers,this.zoom,function(t){return/^text/.test(t)})),this.icon=new Cs(new Qa(es.members,this.layers,this.zoom,function(t){return/^icon/.test(t)})),this.collisionBox=new Ps(sa,as.members,ga),this.collisionCircle=new Ps(sa,is.members,da),this.glyphOffsetArray=new Aa,this.lineVertexArray=new Ea,this.symbolInstances=new Ta},Os.prototype.calculateGlyphDependencies=function(t,e,r,n,a){for(var i=0;i<t.length;i++)if(e[t.charCodeAt(i)]=!0,(r||n)&&a){var o=ss[t.charAt(i)];o&&(e[o.charCodeAt(0)]=!0)}},Os.prototype.populate=function(t,e){var r=this.layers[0],n=r.layout,a=n.get("text-font"),i=n.get("text-field"),o=n.get("icon-image"),s=("constant"!==i.value.kind||i.value.value.toString().length>0)&&("constant"!==a.value.kind||a.value.value.length>0),l="constant"!==o.value.kind||o.value.value&&o.value.value.length>0,c=n.get("symbol-sort-key");if(this.features=[],s||l){for(var u=e.iconDependencies,h=e.glyphDependencies,f=new Pn(this.zoom),p=0,d=t;p<d.length;p+=1){var g=d[p],v=g.feature,m=g.index,y=g.sourceLayerIndex;if(r._featureFilter(f,v)){var x=void 0;if(s){var b=r.getValueAndResolveTokens("text-field",v);x=os(b instanceof Jt?b:Jt.fromString(b),r,v)}var _=void 0;if(l&&(_=r.getValueAndResolveTokens("icon-image",v)),x||_){var w=this.sortFeaturesByKey?c.evaluate(v,{}):void 0,k={text:x,icon:_,index:m,sourceLayerIndex:y,geometry:ni(v),properties:v.properties,type:As[v.type],sortKey:w};if(void 0!==v.id&&(k.id=v.id),this.features.push(k),_&&(u[_]=!0),x){var T=a.evaluate(v,{}).join(","),M="map"===n.get("text-rotation-alignment")&&"point"!==n.get("symbol-placement");this.allowVerticalPlacement=this.writingModes&&this.writingModes.indexOf(cs.vertical)>=0;for(var A=0,S=x.sections;A<S.length;A+=1){var E=S[A],L=bn(x.toString()),C=E.fontStack||T,P=h[C]=h[C]||{};this.calculateGlyphDependencies(E.text,P,M,this.allowVerticalPlacement,L)}}}}}"line"===n.get("symbol-placement")&&(this.features=function(t){var e={},r={},n=[],a=0;function i(e){n.push(t[e]),a++}function o(t,e,a){var i=r[t];return delete r[t],r[e]=i,n[i].geometry[0].pop(),n[i].geometry[0]=n[i].geometry[0].concat(a[0]),i}function s(t,r,a){var i=e[r];return delete e[r],e[t]=i,n[i].geometry[0].shift(),n[i].geometry[0]=a[0].concat(n[i].geometry[0]),i}function l(t,e,r){var n=r?e[0][e[0].length-1]:e[0][0];return t+":"+n.x+":"+n.y}for(var c=0;c<t.length;c++){var u=t[c],h=u.geometry,f=u.text?u.text.toString():null;if(f){var p=l(f,h),d=l(f,h,!0);if(p in r&&d in e&&r[p]!==e[d]){var g=s(p,d,h),v=o(p,d,n[g].geometry);delete e[p],delete r[d],r[l(f,n[v].geometry,!0)]=v,n[g].geometry=null}else p in r?o(p,d,h):d in e?s(p,d,h):(i(c),e[p]=a-1,r[d]=a-1)}else i(c)}return n.filter(function(t){return t.geometry})}(this.features)),this.sortFeaturesByKey&&this.features.sort(function(t,e){return t.sortKey-e.sortKey})}},Os.prototype.update=function(t,e,r){this.stateDependentLayers.length&&(this.text.programConfigurations.updatePaintArrays(t,e,this.layers,r),this.icon.programConfigurations.updatePaintArrays(t,e,this.layers,r))},Os.prototype.isEmpty=function(){return 0===this.symbolInstances.length},Os.prototype.uploadPending=function(){return!this.uploaded||this.text.programConfigurations.needsUpload||this.icon.programConfigurations.needsUpload},Os.prototype.upload=function(t){this.uploaded||(this.collisionBox.upload(t),this.collisionCircle.upload(t)),this.text.upload(t,this.sortFeaturesByY,!this.uploaded,this.text.programConfigurations.needsUpload),this.icon.upload(t,this.sortFeaturesByY,!this.uploaded,this.icon.programConfigurations.needsUpload),this.uploaded=!0},Os.prototype.destroy=function(){this.text.destroy(),this.icon.destroy(),this.collisionBox.destroy(),this.collisionCircle.destroy()},Os.prototype.addToLineVertexArray=function(t,e){var r=this.lineVertexArray.length;if(void 0!==t.segment){for(var n=t.dist(e[t.segment+1]),a=t.dist(e[t.segment]),i={},o=t.segment+1;o<e.length;o++)i[o]={x:e[o].x,y:e[o].y,tileUnitDistanceFromAnchor:n},o<e.length-1&&(n+=e[o+1].dist(e[o]));for(var s=t.segment||0;s>=0;s--)i[s]={x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:a},s>0&&(a+=e[s-1].dist(e[s]));for(var l=0;l<e.length;l++){var c=i[l];this.lineVertexArray.emplaceBack(c.x,c.y,c.tileUnitDistanceFromAnchor)}}return{lineStartIndex:r,lineLength:this.lineVertexArray.length-r}},Os.prototype.addSymbols=function(t,e,r,n,a,i,o,s,l,c){var u=this,h=t.indexArray,f=t.layoutVertexArray,p=t.dynamicLayoutVertexArray,d=t.segments.prepareSegment(4*e.length,t.layoutVertexArray,t.indexArray,i.sortKey),g=this.glyphOffsetArray.length,v=d.vertexLength,m=this.allowVerticalPlacement&&o===cs.vertical?Math.PI/2:0,y=function(t){var e=t.tl,n=t.tr,a=t.bl,i=t.br,o=t.tex,l=d.vertexLength,c=t.glyphOffset[1];Es(f,s.x,s.y,e.x,c+e.y,o.x,o.y,r),Es(f,s.x,s.y,n.x,c+n.y,o.x+o.w,o.y,r),Es(f,s.x,s.y,a.x,c+a.y,o.x,o.y+o.h,r),Es(f,s.x,s.y,i.x,c+i.y,o.x+o.w,o.y+o.h,r),Ls(p,s,m),h.emplaceBack(l,l+1,l+2),h.emplaceBack(l+1,l+2,l+3),d.vertexLength+=4,d.primitiveLength+=2,u.glyphOffsetArray.emplaceBack(t.glyphOffset[0])};if(i.text&&i.text.sections){var x=i.text.sections;if(this.hasPaintOverrides){for(var b,_=function(e,r){void 0===b||b===e&&!r||t.programConfigurations.populatePaintArrays(t.layoutVertexArray.length,i,i.index,{},x[b]),b=e},w=0,k=e;w<k.length;w+=1){var T=k[w];_(T.sectionIndex,!1),y(T)}_(b,!0)}else{for(var M=0,A=e;M<A.length;M+=1)y(A[M]);t.programConfigurations.populatePaintArrays(t.layoutVertexArray.length,i,i.index,{},x[0])}}else{for(var S=0,E=e;S<E.length;S+=1)y(E[S]);t.programConfigurations.populatePaintArrays(t.layoutVertexArray.length,i,i.index,{})}t.placedSymbolArray.emplaceBack(s.x,s.y,g,this.glyphOffsetArray.length-g,v,l,c,s.segment,r?r[0]:0,r?r[1]:0,n[0],n[1],o,0,!1,0)},Os.prototype._addCollisionDebugVertex=function(t,e,r,n,a,i){return e.emplaceBack(0,0),t.emplaceBack(r.x,r.y,n,a,Math.round(i.x),Math.round(i.y))},Os.prototype.addCollisionDebugVertices=function(t,e,r,n,i,o,s,l){var c=i.segments.prepareSegment(4,i.layoutVertexArray,i.indexArray),u=c.vertexLength,h=i.layoutVertexArray,f=i.collisionVertexArray,p=s.anchorX,d=s.anchorY;if(this._addCollisionDebugVertex(h,f,o,p,d,new a(t,e)),this._addCollisionDebugVertex(h,f,o,p,d,new a(r,e)),this._addCollisionDebugVertex(h,f,o,p,d,new a(r,n)),this._addCollisionDebugVertex(h,f,o,p,d,new a(t,n)),c.vertexLength+=4,l){var g=i.indexArray;g.emplaceBack(u,u+1,u+2),g.emplaceBack(u,u+2,u+3),c.primitiveLength+=2}else{var v=i.indexArray;v.emplaceBack(u,u+1),v.emplaceBack(u+1,u+2),v.emplaceBack(u+2,u+3),v.emplaceBack(u+3,u),c.primitiveLength+=4}},Os.prototype.addDebugCollisionBoxes=function(t,e,r){for(var n=t;n<e;n++){var a=this.collisionBoxArray.get(n),i=a.x1,o=a.y1,s=a.x2,l=a.y2,c=a.radius>0;this.addCollisionDebugVertices(i,o,s,l,c?this.collisionCircle:this.collisionBox,a.anchorPoint,r,c)}},Os.prototype.generateCollisionDebugBuffers=function(){for(var t=0;t<this.symbolInstances.length;t++){var e=this.symbolInstances.get(t);this.addDebugCollisionBoxes(e.textBoxStartIndex,e.textBoxEndIndex,e),this.addDebugCollisionBoxes(e.verticalTextBoxStartIndex,e.verticalTextBoxEndIndex,e),this.addDebugCollisionBoxes(e.iconBoxStartIndex,e.iconBoxEndIndex,e)}},Os.prototype._deserializeCollisionBoxesForSymbol=function(t,e,r,n,a,i,o){for(var s={},l=e;l<r;l++){var c=t.get(l);if(0===c.radius){s.textBox={x1:c.x1,y1:c.y1,x2:c.x2,y2:c.y2,anchorPointX:c.anchorPointX,anchorPointY:c.anchorPointY},s.textFeatureIndex=c.featureIndex;break}s.textCircles||(s.textCircles=[],s.textFeatureIndex=c.featureIndex),s.textCircles.push(c.anchorPointX,c.anchorPointY,c.radius,c.signedDistanceFromAnchor,1)}for(var u=n;u<a;u++){var h=t.get(u);if(0===h.radius){s.verticalTextBox={x1:h.x1,y1:h.y1,x2:h.x2,y2:h.y2,anchorPointX:h.anchorPointX,anchorPointY:h.anchorPointY},s.verticalTextFeatureIndex=h.featureIndex;break}}for(var f=i;f<o;f++){var p=t.get(f);if(0===p.radius){s.iconBox={x1:p.x1,y1:p.y1,x2:p.x2,y2:p.y2,anchorPointX:p.anchorPointX,anchorPointY:p.anchorPointY},s.iconFeatureIndex=p.featureIndex;break}}return s},Os.prototype.deserializeCollisionBoxes=function(t){this.collisionArrays=[];for(var e=0;e<this.symbolInstances.length;e++){var r=this.symbolInstances.get(e);this.collisionArrays.push(this._deserializeCollisionBoxesForSymbol(t,r.textBoxStartIndex,r.textBoxEndIndex,r.verticalTextBoxStartIndex,r.verticalTextBoxEndIndex,r.iconBoxStartIndex,r.iconBoxEndIndex))}},Os.prototype.hasTextData=function(){return this.text.segments.get().length>0},Os.prototype.hasIconData=function(){return this.icon.segments.get().length>0},Os.prototype.hasCollisionBoxData=function(){return this.collisionBox.segments.get().length>0},Os.prototype.hasCollisionCircleData=function(){return this.collisionCircle.segments.get().length>0},Os.prototype.addIndicesForPlacedTextSymbol=function(t){for(var e=this.text.placedSymbolArray.get(t),r=e.vertexStartIndex+4*e.numGlyphs,n=e.vertexStartIndex;n<r;n+=4)this.text.indexArray.emplaceBack(n,n+1,n+2),this.text.indexArray.emplaceBack(n+1,n+2,n+3)},Os.prototype.getSortedSymbolIndexes=function(t){if(this.sortedAngle===t&&void 0!==this.symbolInstanceIndexes)return this.symbolInstanceIndexes;for(var e=Math.sin(t),r=Math.cos(t),n=[],a=[],i=[],o=0;o<this.symbolInstances.length;++o){i.push(o);var s=this.symbolInstances.get(o);n.push(0|Math.round(e*s.anchorX+r*s.anchorY)),a.push(s.featureIndex)}return i.sort(function(t,e){return n[t]-n[e]||a[e]-a[t]}),i},Os.prototype.sortFeatures=function(t){var e=this;if(this.sortFeaturesByY&&this.sortedAngle!==t&&!(this.text.segments.get().length>1||this.icon.segments.get().length>1)){this.symbolInstanceIndexes=this.getSortedSymbolIndexes(t),this.sortedAngle=t,this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder=[];for(var r=0,n=this.symbolInstanceIndexes;r<n.length;r+=1){var a=n[r],i=this.symbolInstances.get(a);this.featureSortOrder.push(i.featureIndex),[i.rightJustifiedTextSymbolIndex,i.centerJustifiedTextSymbolIndex,i.leftJustifiedTextSymbolIndex].forEach(function(t,r,n){t>=0&&n.indexOf(t)===r&&e.addIndicesForPlacedTextSymbol(t)}),i.verticalPlacedTextSymbolIndex>=0&&this.addIndicesForPlacedTextSymbol(i.verticalPlacedTextSymbolIndex);var o=this.icon.placedSymbolArray.get(a);if(o.numGlyphs){var s=o.vertexStartIndex;this.icon.indexArray.emplaceBack(s,s+1,s+2),this.icon.indexArray.emplaceBack(s+1,s+2,s+3)}}this.text.indexBuffer&&this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer&&this.icon.indexBuffer.updateData(this.icon.indexArray)}},dn("SymbolBucket",Os,{omit:["layers","collisionBoxArray","features","compareText"]}),Os.MAX_GLYPHS=65535,Os.addDynamicAttributes=Ls;var zs=new Gn({"symbol-placement":new jn(Tt.layout_symbol["symbol-placement"]),"symbol-spacing":new jn(Tt.layout_symbol["symbol-spacing"]),"symbol-avoid-edges":new jn(Tt.layout_symbol["symbol-avoid-edges"]),"symbol-sort-key":new Vn(Tt.layout_symbol["symbol-sort-key"]),"symbol-z-order":new jn(Tt.layout_symbol["symbol-z-order"]),"icon-allow-overlap":new jn(Tt.layout_symbol["icon-allow-overlap"]),"icon-ignore-placement":new jn(Tt.layout_symbol["icon-ignore-placement"]),"icon-optional":new jn(Tt.layout_symbol["icon-optional"]),"icon-rotation-alignment":new jn(Tt.layout_symbol["icon-rotation-alignment"]),"icon-size":new Vn(Tt.layout_symbol["icon-size"]),"icon-text-fit":new jn(Tt.layout_symbol["icon-text-fit"]),"icon-text-fit-padding":new jn(Tt.layout_symbol["icon-text-fit-padding"]),"icon-image":new Vn(Tt.layout_symbol["icon-image"]),"icon-rotate":new Vn(Tt.layout_symbol["icon-rotate"]),"icon-padding":new jn(Tt.layout_symbol["icon-padding"]),"icon-keep-upright":new jn(Tt.layout_symbol["icon-keep-upright"]),"icon-offset":new Vn(Tt.layout_symbol["icon-offset"]),"icon-anchor":new Vn(Tt.layout_symbol["icon-anchor"]),"icon-pitch-alignment":new jn(Tt.layout_symbol["icon-pitch-alignment"]),"text-pitch-alignment":new jn(Tt.layout_symbol["text-pitch-alignment"]),"text-rotation-alignment":new jn(Tt.layout_symbol["text-rotation-alignment"]),"text-field":new Vn(Tt.layout_symbol["text-field"]),"text-font":new Vn(Tt.layout_symbol["text-font"]),"text-size":new Vn(Tt.layout_symbol["text-size"]),"text-max-width":new Vn(Tt.layout_symbol["text-max-width"]),"text-line-height":new jn(Tt.layout_symbol["text-line-height"]),"text-letter-spacing":new Vn(Tt.layout_symbol["text-letter-spacing"]),"text-justify":new Vn(Tt.layout_symbol["text-justify"]),"text-radial-offset":new Vn(Tt.layout_symbol["text-radial-offset"]),"text-variable-anchor":new jn(Tt.layout_symbol["text-variable-anchor"]),"text-anchor":new Vn(Tt.layout_symbol["text-anchor"]),"text-max-angle":new jn(Tt.layout_symbol["text-max-angle"]),"text-writing-mode":new jn(Tt.layout_symbol["text-writing-mode"]),"text-rotate":new Vn(Tt.layout_symbol["text-rotate"]),"text-padding":new jn(Tt.layout_symbol["text-padding"]),"text-keep-upright":new jn(Tt.layout_symbol["text-keep-upright"]),"text-transform":new Vn(Tt.layout_symbol["text-transform"]),"text-offset":new Vn(Tt.layout_symbol["text-offset"]),"text-allow-overlap":new jn(Tt.layout_symbol["text-allow-overlap"]),"text-ignore-placement":new jn(Tt.layout_symbol["text-ignore-placement"]),"text-optional":new jn(Tt.layout_symbol["text-optional"])}),Is={paint:new Gn({"icon-opacity":new Vn(Tt.paint_symbol["icon-opacity"]),"icon-color":new Vn(Tt.paint_symbol["icon-color"]),"icon-halo-color":new Vn(Tt.paint_symbol["icon-halo-color"]),"icon-halo-width":new Vn(Tt.paint_symbol["icon-halo-width"]),"icon-halo-blur":new Vn(Tt.paint_symbol["icon-halo-blur"]),"icon-translate":new jn(Tt.paint_symbol["icon-translate"]),"icon-translate-anchor":new jn(Tt.paint_symbol["icon-translate-anchor"]),"text-opacity":new Vn(Tt.paint_symbol["text-opacity"]),"text-color":new Vn(Tt.paint_symbol["text-color"],{runtimeType:Ft,getOverride:function(t){return t.textColor},hasOverride:function(t){return!!t.textColor}}),"text-halo-color":new Vn(Tt.paint_symbol["text-halo-color"]),"text-halo-width":new Vn(Tt.paint_symbol["text-halo-width"]),"text-halo-blur":new Vn(Tt.paint_symbol["text-halo-blur"]),"text-translate":new jn(Tt.paint_symbol["text-translate"]),"text-translate-anchor":new jn(Tt.paint_symbol["text-translate-anchor"])}),layout:zs},Ds=function(t){this.type=t.property.overrides?t.property.overrides.runtimeType:zt,this.defaultValue=t};Ds.prototype.evaluate=function(t){if(t.formattedSection){var e=this.defaultValue.property.overrides;if(e&&e.hasOverride(t.formattedSection))return e.getOverride(t.formattedSection)}return t.feature&&t.featureState?this.defaultValue.evaluate(t.feature,t.featureState):this.defaultValue.property.specification.default},Ds.prototype.eachChild=function(t){this.defaultValue.isConstant()||t(this.defaultValue.value._styleExpression.expression)},Ds.prototype.possibleOutputs=function(){return[void 0]},Ds.prototype.serialize=function(){return null},dn("FormatSectionOverride",Ds,{omit:["defaultValue"]});var Rs=function(t){function e(e){t.call(this,e,Is)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.recalculate=function(e){if(t.prototype.recalculate.call(this,e),"auto"===this.layout.get("icon-rotation-alignment")&&("point"!==this.layout.get("symbol-placement")?this.layout._values["icon-rotation-alignment"]="map":this.layout._values["icon-rotation-alignment"]="viewport"),"auto"===this.layout.get("text-rotation-alignment")&&("point"!==this.layout.get("symbol-placement")?this.layout._values["text-rotation-alignment"]="map":this.layout._values["text-rotation-alignment"]="viewport"),"auto"===this.layout.get("text-pitch-alignment")&&(this.layout._values["text-pitch-alignment"]=this.layout.get("text-rotation-alignment")),"auto"===this.layout.get("icon-pitch-alignment")&&(this.layout._values["icon-pitch-alignment"]=this.layout.get("icon-rotation-alignment")),"point"===this.layout.get("symbol-placement")){var r=this.layout.get("text-writing-mode");if(r){for(var n=[],a=0,i=r;a<i.length;a+=1){var o=i[a];n.indexOf(o)<0&&n.push(o)}this.layout._values["text-writing-mode"]=n}else this.layout._values["text-writing-mode"]=["horizontal"]}this._setPaintOverrides()},e.prototype.getValueAndResolveTokens=function(t,e){var r=this.layout.get(t).evaluate(e,{}),n=this._unevaluatedLayout._values[t];return n.isDataDriven()||wr(n.value)?r:function(t,e){return r.replace(/{([^{}]+)}/g,function(e,r){return r in t?String(t[r]):""})}(e.properties)},e.prototype.createBucket=function(t){return new Os(t)},e.prototype.queryRadius=function(){return 0},e.prototype.queryIntersectsFeature=function(){return!1},e.prototype._setPaintOverrides=function(){for(var t=0,r=Is.paint.overridableProperties;t<r.length;t+=1){var n=r[t];if(e.hasPaintOverride(this.layout,n)){var a,i=this.paint.get(n),o=new Ds(i),s=new _r(o,i.property.specification);a="constant"===i.value.kind||"source"===i.value.kind?new Tr("source",s):new Mr("composite",s,i.value.zoomStops,i.value._interpolationType),this.paint._values[n]=new Bn(i.property,a,i.parameters)}}},e.prototype._handleOverridablePaintPropertyUpdate=function(t,r,n){return!(!this.layout||r.isDataDriven()||n.isDataDriven())&&e.hasPaintOverride(this.layout,t)},e.hasPaintOverride=function(t,e){var r=t.get("text-field"),n=Is.paint.properties[e],a=!1,i=function(t){for(var e=0,r=t;e<r.length;e+=1){var i=r[e];if(n.overrides&&n.overrides.hasOverride(i))return void(a=!0)}};if("constant"===r.value.kind&&r.value.value instanceof Jt)i(r.value.value.sections);else if("source"===r.value.kind){var o=function(t){if(!a)if(t instanceof te&&Qt(t.value)===Vt){var e=t.value;i(e.sections)}else t instanceof ae?i(t.sections):t.eachChild(o)},s=r.value;s._styleExpression&&o(s._styleExpression.expression)}return a},e.hasPaintOverrides=function(t){for(var r=0,n=Is.paint.overridableProperties;r<n.length;r+=1){var a=n[r];if(e.hasPaintOverride(t,a))return!0}return!1},e}(Yn),Fs={paint:new Gn({"background-color":new jn(Tt.paint_background["background-color"]),"background-pattern":new qn(Tt.paint_background["background-pattern"]),"background-opacity":new jn(Tt.paint_background["background-opacity"])})},Bs=function(t){function e(e){t.call(this,e,Fs)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Yn),Ns={paint:new Gn({"raster-opacity":new jn(Tt.paint_raster["raster-opacity"]),"raster-hue-rotate":new jn(Tt.paint_raster["raster-hue-rotate"]),"raster-brightness-min":new jn(Tt.paint_raster["raster-brightness-min"]),"raster-brightness-max":new jn(Tt.paint_raster["raster-brightness-max"]),"raster-saturation":new jn(Tt.paint_raster["raster-saturation"]),"raster-contrast":new jn(Tt.paint_raster["raster-contrast"]),"raster-resampling":new jn(Tt.paint_raster["raster-resampling"]),"raster-fade-duration":new jn(Tt.paint_raster["raster-fade-duration"])})},js=function(t){function e(e){t.call(this,e,Ns)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e}(Yn),Vs=function(t){function e(e){t.call(this,e,{}),this.implementation=e}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.is3D=function(){return"3d"===this.implementation.renderingMode},e.prototype.hasOffscreenPass=function(){return void 0!==this.implementation.prerender},e.prototype.recalculate=function(){},e.prototype.updateTransitions=function(){},e.prototype.hasTransition=function(){},e.prototype.serialize=function(){},e.prototype.onAdd=function(t){this.implementation.onAdd&&this.implementation.onAdd(t,t.painter.context.gl)},e.prototype.onRemove=function(t){this.implementation.onRemove&&this.implementation.onRemove(t,t.painter.context.gl)},e}(Yn),Us={circle:Mi,heatmap:Di,hillshade:Fi,fill:To,"fill-extrusion":Uo,line:$o,symbol:Rs,background:Bs,raster:js};function qs(t){for(var e=0,r=0,n=0,a=t;n<a.length;n+=1){var i=a[n];e+=i.w*i.h,r=Math.max(r,i.w)}t.sort(function(t,e){return e.h-t.h});for(var o=[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(e/.95)),r),h:1/0}],s=0,l=0,c=0,u=t;c<u.length;c+=1)for(var h=u[c],f=o.length-1;f>=0;f--){var p=o[f];if(!(h.w>p.w||h.h>p.h)){if(h.x=p.x,h.y=p.y,l=Math.max(l,h.y+h.h),s=Math.max(s,h.x+h.w),h.w===p.w&&h.h===p.h){var d=o.pop();f<o.length&&(o[f]=d)}else h.h===p.h?(p.x+=h.w,p.w-=h.w):h.w===p.w?(p.y+=h.h,p.h-=h.h):(o.push({x:p.x+h.w,y:p.y,w:p.w-h.w,h:h.h}),p.y+=h.h,p.h-=h.h);break}}return{w:s,h:l,fill:e/(s*l)||0}}var Hs=function(t,e){var r=e.pixelRatio,n=e.version;this.paddedRect=t,this.pixelRatio=r,this.version=n},Gs={tl:{configurable:!0},br:{configurable:!0},tlbr:{configurable:!0},displaySize:{configurable:!0}};Gs.tl.get=function(){return[this.paddedRect.x+1,this.paddedRect.y+1]},Gs.br.get=function(){return[this.paddedRect.x+this.paddedRect.w-1,this.paddedRect.y+this.paddedRect.h-1]},Gs.tlbr.get=function(){return this.tl.concat(this.br)},Gs.displaySize.get=function(){return[(this.paddedRect.w-2)/this.pixelRatio,(this.paddedRect.h-2)/this.pixelRatio]},Object.defineProperties(Hs.prototype,Gs);var Ys=function(t,e){var r={},n={};this.haveRenderCallbacks=[];var a=[];this.addImages(t,r,a),this.addImages(e,n,a);var i=qs(a),o=i.w,s=i.h,l=new Oi({width:o||1,height:s||1});for(var c in t){var u=t[c],h=r[c].paddedRect;Oi.copy(u.data,l,{x:0,y:0},{x:h.x+1,y:h.y+1},u.data)}for(var f in e){var p=e[f],d=n[f].paddedRect,g=d.x+1,v=d.y+1,m=p.data.width,y=p.data.height;Oi.copy(p.data,l,{x:0,y:0},{x:g,y:v},p.data),Oi.copy(p.data,l,{x:0,y:y-1},{x:g,y:v-1},{width:m,height:1}),Oi.copy(p.data,l,{x:0,y:0},{x:g,y:v+y},{width:m,height:1}),Oi.copy(p.data,l,{x:m-1,y:0},{x:g-1,y:v},{width:1,height:y}),Oi.copy(p.data,l,{x:0,y:0},{x:g+m,y:v},{width:1,height:y})}this.image=l,this.iconPositions=r,this.patternPositions=n};Ys.prototype.addImages=function(t,e,r){for(var n in t){var a=t[n],i={x:0,y:0,w:a.data.width+2,h:a.data.height+2};r.push(i),e[n]=new Hs(i,a),a.hasRenderCallback&&this.haveRenderCallbacks.push(n)}},Ys.prototype.patchUpdatedImages=function(t,e){for(var r in t.dispatchRenderCallbacks(this.haveRenderCallbacks),t.updatedImages)this.patchUpdatedImage(this.iconPositions[r],t.getImage(r),e),this.patchUpdatedImage(this.patternPositions[r],t.getImage(r),e)},Ys.prototype.patchUpdatedImage=function(t,e,r){if(t&&e&&t.version!==e.version){t.version=e.version;var n=t.tl,a=n[0],i=n[1];r.update(e.data,void 0,{x:a,y:i})}},dn("ImagePosition",Hs),dn("ImageAtlas",Ys);var Ws=self.HTMLImageElement,Xs=self.HTMLCanvasElement,Zs=self.HTMLVideoElement,Js=self.ImageData,Ks=function(t,e,r,n){this.context=t,this.format=r,this.texture=t.gl.createTexture(),this.update(e,n)};Ks.prototype.update=function(t,e,r){var n=t.width,a=t.height,i=!(this.size&&this.size[0]===n&&this.size[1]===a||r),o=this.context,s=o.gl;if(this.useMipmap=Boolean(e&&e.useMipmap),s.bindTexture(s.TEXTURE_2D,this.texture),o.pixelStoreUnpackFlipY.set(!1),o.pixelStoreUnpack.set(1),o.pixelStoreUnpackPremultiplyAlpha.set(this.format===s.RGBA&&(!e||!1!==e.premultiply)),i)this.size=[n,a],t instanceof Ws||t instanceof Xs||t instanceof Zs||t instanceof Js?s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,s.UNSIGNED_BYTE,t):s.texImage2D(s.TEXTURE_2D,0,this.format,n,a,0,this.format,s.UNSIGNED_BYTE,t.data);else{var l=r||{x:0,y:0},c=l.x,u=l.y;t instanceof Ws||t instanceof Xs||t instanceof Zs||t instanceof Js?s.texSubImage2D(s.TEXTURE_2D,0,c,u,s.RGBA,s.UNSIGNED_BYTE,t):s.texSubImage2D(s.TEXTURE_2D,0,c,u,n,a,s.RGBA,s.UNSIGNED_BYTE,t.data)}this.useMipmap&&this.isSizePowerOfTwo()&&s.generateMipmap(s.TEXTURE_2D)},Ks.prototype.bind=function(t,e,r){var n=this.context.gl;n.bindTexture(n.TEXTURE_2D,this.texture),r!==n.LINEAR_MIPMAP_NEAREST||this.isSizePowerOfTwo()||(r=n.LINEAR),t!==this.filter&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,t),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,r||t),this.filter=t),e!==this.wrap&&(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,e),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,e),this.wrap=e)},Ks.prototype.isSizePowerOfTwo=function(){return this.size[0]===this.size[1]&&Math.log(this.size[0])/Math.LN2%1==0},Ks.prototype.destroy=function(){this.context.gl.deleteTexture(this.texture),this.texture=null};var Qs=function(t,e,r,n,a){var i,o,s=8*a-n-1,l=(1<<s)-1,c=l>>1,u=-7,h=r?a-1:0,f=r?-1:1,p=t[e+h];for(h+=f,i=p&(1<<-u)-1,p>>=-u,u+=s;u>0;i=256*i+t[e+h],h+=f,u-=8);for(o=i&(1<<-u)-1,i>>=-u,u+=n;u>0;o=256*o+t[e+h],h+=f,u-=8);if(0===i)i=1-c;else{if(i===l)return o?NaN:1/0*(p?-1:1);o+=Math.pow(2,n),i-=c}return(p?-1:1)*o*Math.pow(2,i-n)},$s=function(t,e,r,n,a,i){var o,s,l,c=8*i-a-1,u=(1<<c)-1,h=u>>1,f=23===a?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:i-1,d=n?1:-1,g=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=u):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),(e+=o+h>=1?f/l:f*Math.pow(2,1-h))*l>=2&&(o++,l/=2),o+h>=u?(s=0,o=u):o+h>=1?(s=(e*l-1)*Math.pow(2,a),o+=h):(s=e*Math.pow(2,h-1)*Math.pow(2,a),o=0));a>=8;t[r+p]=255&s,p+=d,s/=256,a-=8);for(o=o<<a|s,c+=a;c>0;t[r+p]=255&o,p+=d,o/=256,c-=8);t[r+p-d]|=128*g},tl=el;function el(t){this.buf=ArrayBuffer.isView&&ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos=0,this.type=0,this.length=this.buf.length}function rl(t){return t.type===el.Bytes?t.readVarint()+t.pos:t.pos+1}function nl(t,e,r){return r?4294967296*e+(t>>>0):4294967296*(e>>>0)+(t>>>0)}function al(t,e,r){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));r.realloc(n);for(var a=r.pos-1;a>=t;a--)r.buf[a+n]=r.buf[a]}function il(t,e){for(var r=0;r<t.length;r++)e.writeVarint(t[r])}function ol(t,e){for(var r=0;r<t.length;r++)e.writeSVarint(t[r])}function sl(t,e){for(var r=0;r<t.length;r++)e.writeFloat(t[r])}function ll(t,e){for(var r=0;r<t.length;r++)e.writeDouble(t[r])}function cl(t,e){for(var r=0;r<t.length;r++)e.writeBoolean(t[r])}function ul(t,e){for(var r=0;r<t.length;r++)e.writeFixed32(t[r])}function hl(t,e){for(var r=0;r<t.length;r++)e.writeSFixed32(t[r])}function fl(t,e){for(var r=0;r<t.length;r++)e.writeFixed64(t[r])}function pl(t,e){for(var r=0;r<t.length;r++)e.writeSFixed64(t[r])}function dl(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+16777216*t[e+3]}function gl(t,e,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function vl(t,e){return(t[e]|t[e+1]<<8|t[e+2]<<16)+(t[e+3]<<24)}el.Varint=0,el.Fixed64=1,el.Bytes=2,el.Fixed32=5,el.prototype={destroy:function(){this.buf=null},readFields:function(t,e,r){for(r=r||this.length;this.pos<r;){var n=this.readVarint(),a=n>>3,i=this.pos;this.type=7&n,t(a,e,this),this.pos===i&&this.skip(n)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=dl(this.buf,this.pos);return this.pos+=4,t},readSFixed32:function(){var t=vl(this.buf,this.pos);return this.pos+=4,t},readFixed64:function(){var t=dl(this.buf,this.pos)+4294967296*dl(this.buf,this.pos+4);return this.pos+=8,t},readSFixed64:function(){var t=dl(this.buf,this.pos)+4294967296*vl(this.buf,this.pos+4);return this.pos+=8,t},readFloat:function(){var t=Qs(this.buf,this.pos,!0,23,4);return this.pos+=4,t},readDouble:function(){var t=Qs(this.buf,this.pos,!0,52,8);return this.pos+=8,t},readVarint:function(t){var e,r,n=this.buf;return e=127&(r=n[this.pos++]),r<128?e:(e|=(127&(r=n[this.pos++]))<<7,r<128?e:(e|=(127&(r=n[this.pos++]))<<14,r<128?e:(e|=(127&(r=n[this.pos++]))<<21,r<128?e:function(t,e,r){var n,a,i=r.buf;if(n=(112&(a=i[r.pos++]))>>4,a<128)return nl(t,n,e);if(n|=(127&(a=i[r.pos++]))<<3,a<128)return nl(t,n,e);if(n|=(127&(a=i[r.pos++]))<<10,a<128)return nl(t,n,e);if(n|=(127&(a=i[r.pos++]))<<17,a<128)return nl(t,n,e);if(n|=(127&(a=i[r.pos++]))<<24,a<128)return nl(t,n,e);if(n|=(1&(a=i[r.pos++]))<<31,a<128)return nl(t,n,e);throw new Error("Expected varint not more than 10 bytes")}(e|=(15&(r=n[this.pos]))<<28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=function(t,e,r){for(var n="",a=e;a<r;){var i,o,s,l=t[a],c=null,u=l>239?4:l>223?3:l>191?2:1;if(a+u>r)break;1===u?l<128&&(c=l):2===u?128==(192&(i=t[a+1]))&&(c=(31&l)<<6|63&i)<=127&&(c=null):3===u?(i=t[a+1],o=t[a+2],128==(192&i)&&128==(192&o)&&((c=(15&l)<<12|(63&i)<<6|63&o)<=2047||c>=55296&&c<=57343)&&(c=null)):4===u&&(i=t[a+1],o=t[a+2],s=t[a+3],128==(192&i)&&128==(192&o)&&128==(192&s)&&((c=(15&l)<<18|(63&i)<<12|(63&o)<<6|63&s)<=65535||c>=1114112)&&(c=null)),null===c?(c=65533,u=1):c>65535&&(c-=65536,n+=String.fromCharCode(c>>>10&1023|55296),c=56320|1023&c),n+=String.fromCharCode(c),a+=u}return n}(this.buf,this.pos,t);return this.pos=t,e},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.subarray(this.pos,t);return this.pos=t,e},readPackedVarint:function(t,e){if(this.type!==el.Bytes)return t.push(this.readVarint(e));var r=rl(this);for(t=t||[];this.pos<r;)t.push(this.readVarint(e));return t},readPackedSVarint:function(t){if(this.type!==el.Bytes)return t.push(this.readSVarint());var e=rl(this);for(t=t||[];this.pos<e;)t.push(this.readSVarint());return t},readPackedBoolean:function(t){if(this.type!==el.Bytes)return t.push(this.readBoolean());var e=rl(this);for(t=t||[];this.pos<e;)t.push(this.readBoolean());return t},readPackedFloat:function(t){if(this.type!==el.Bytes)return t.push(this.readFloat());var e=rl(this);for(t=t||[];this.pos<e;)t.push(this.readFloat());return t},readPackedDouble:function(t){if(this.type!==el.Bytes)return t.push(this.readDouble());var e=rl(this);for(t=t||[];this.pos<e;)t.push(this.readDouble());return t},readPackedFixed32:function(t){if(this.type!==el.Bytes)return t.push(this.readFixed32());var e=rl(this);for(t=t||[];this.pos<e;)t.push(this.readFixed32());return t},readPackedSFixed32:function(t){if(this.type!==el.Bytes)return t.push(this.readSFixed32());var e=rl(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed32());return t},readPackedFixed64:function(t){if(this.type!==el.Bytes)return t.push(this.readFixed64());var e=rl(this);for(t=t||[];this.pos<e;)t.push(this.readFixed64());return t},readPackedSFixed64:function(t){if(this.type!==el.Bytes)return t.push(this.readSFixed64());var e=rl(this);for(t=t||[];this.pos<e;)t.push(this.readSFixed64());return t},skip:function(t){var e=7&t;if(e===el.Varint)for(;this.buf[this.pos++]>127;);else if(e===el.Bytes)this.pos=this.readVarint()+this.pos;else if(e===el.Fixed32)this.pos+=4;else{if(e!==el.Fixed64)throw new Error("Unimplemented type: "+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e<this.pos+t;)e*=2;if(e!==this.length){var r=new Uint8Array(e);r.set(this.buf),this.buf=r,this.length=e}},finish:function(){return this.length=this.pos,this.pos=0,this.buf.subarray(0,this.length)},writeFixed32:function(t){this.realloc(4),gl(this.buf,t,this.pos),this.pos+=4},writeSFixed32:function(t){this.realloc(4),gl(this.buf,t,this.pos),this.pos+=4},writeFixed64:function(t){this.realloc(8),gl(this.buf,-1&t,this.pos),gl(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8},writeSFixed64:function(t){this.realloc(8),gl(this.buf,-1&t,this.pos),gl(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8},writeVarint:function(t){(t=+t||0)>268435455||t<0?function(t,e){var r,n;if(t>=0?(r=t%4294967296|0,n=t/4294967296|0):(n=~(-t/4294967296),4294967295^(r=~(-t%4294967296))?r=r+1|0:(r=0,n=n+1|0)),t>=0x10000000000000000||t<-0x10000000000000000)throw new Error("Given varint doesn't fit into 10 bytes");e.realloc(10),function(t,e,r){r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos++]=127&t|128,t>>>=7,r.buf[r.pos]=127&t}(r,0,e),function(t,e){var r=(7&t)<<4;e.buf[e.pos++]|=r|((t>>>=3)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t|((t>>>=7)?128:0),t&&(e.buf[e.pos++]=127&t)))))}(n,e)}(t,this):(this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127))))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t),this.realloc(4*t.length),this.pos++;var e=this.pos;this.pos=function(t,e,r){for(var n,a,i=0;i<e.length;i++){if((n=e.charCodeAt(i))>55295&&n<57344){if(!a){n>56319||i+1===e.length?(t[r++]=239,t[r++]=191,t[r++]=189):a=n;continue}if(n<56320){t[r++]=239,t[r++]=191,t[r++]=189,a=n;continue}n=a-55296<<10|n-56320|65536,a=null}else a&&(t[r++]=239,t[r++]=191,t[r++]=189,a=null);n<128?t[r++]=n:(n<2048?t[r++]=n>>6|192:(n<65536?t[r++]=n>>12|224:(t[r++]=n>>18|240,t[r++]=n>>12&63|128),t[r++]=n>>6&63|128),t[r++]=63&n|128)}return r}(this.buf,t,this.pos);var r=this.pos-e;r>=128&&al(e,r,this),this.pos=e-1,this.writeVarint(r),this.pos+=r},writeFloat:function(t){this.realloc(4),$s(this.buf,t,this.pos,!0,23,4),this.pos+=4},writeDouble:function(t){this.realloc(8),$s(this.buf,t,this.pos,!0,52,8),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var r=0;r<e;r++)this.buf[this.pos++]=t[r]},writeRawMessage:function(t,e){this.pos++;var r=this.pos;t(e,this);var n=this.pos-r;n>=128&&al(r,n,this),this.pos=r-1,this.writeVarint(n),this.pos+=n},writeMessage:function(t,e,r){this.writeTag(t,el.Bytes),this.writeRawMessage(e,r)},writePackedVarint:function(t,e){e.length&&this.writeMessage(t,il,e)},writePackedSVarint:function(t,e){e.length&&this.writeMessage(t,ol,e)},writePackedBoolean:function(t,e){e.length&&this.writeMessage(t,cl,e)},writePackedFloat:function(t,e){e.length&&this.writeMessage(t,sl,e)},writePackedDouble:function(t,e){e.length&&this.writeMessage(t,ll,e)},writePackedFixed32:function(t,e){e.length&&this.writeMessage(t,ul,e)},writePackedSFixed32:function(t,e){e.length&&this.writeMessage(t,hl,e)},writePackedFixed64:function(t,e){e.length&&this.writeMessage(t,fl,e)},writePackedSFixed64:function(t,e){e.length&&this.writeMessage(t,pl,e)},writeBytesField:function(t,e){this.writeTag(t,el.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,el.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,el.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,el.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,el.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,el.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,el.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,el.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,el.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,el.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}};var ml=3;function yl(t,e,r){1===t&&r.readMessage(xl,e)}function xl(t,e,r){if(3===t){var n=r.readMessage(bl,{}),a=n.id,i=n.bitmap,o=n.width,s=n.height,l=n.left,c=n.top,u=n.advance;e.push({id:a,bitmap:new Pi({width:o+2*ml,height:s+2*ml},i),metrics:{width:o,height:s,left:l,top:c,advance:u}})}}function bl(t,e,r){1===t?e.id=r.readVarint():2===t?e.bitmap=r.readBytes():3===t?e.width=r.readVarint():4===t?e.height=r.readVarint():5===t?e.left=r.readSVarint():6===t?e.top=r.readSVarint():7===t&&(e.advance=r.readVarint())}var _l=ml,wl=function(t){var e=this;this._callback=t,this._triggered=!1,"undefined"!=typeof MessageChannel&&(this._channel=new MessageChannel,this._channel.port2.onmessage=function(){e._triggered=!1,e._callback()})};wl.prototype.trigger=function(){var t=this;this._triggered||(this._triggered=!0,this._channel?this._channel.port1.postMessage(!0):setTimeout(function(){t._triggered=!1,t._callback()},0))};var kl=function(t,e,r){this.target=t,this.parent=e,this.mapId=r,this.callbacks={},this.tasks={},this.taskQueue=[],this.cancelCallbacks={},v(["receive","process"],this),this.invoker=new wl(this.process),this.target.addEventListener("message",this.receive,!1)};function Tl(t,e,r){var n=2*Math.PI*6378137/256/Math.pow(2,r);return[t*n-2*Math.PI*6378137/2,e*n-2*Math.PI*6378137/2]}kl.prototype.send=function(t,e,r,n){var a=this,i=Math.round(1e18*Math.random()).toString(36).substring(0,10);r&&(this.callbacks[i]=r);var o=[];return this.target.postMessage({id:i,type:t,hasCallback:!!r,targetMapId:n,sourceMapId:this.mapId,data:vn(e,o)},o),{cancel:function(){r&&delete a.callbacks[i],a.target.postMessage({id:i,type:"<cancel>",targetMapId:n,sourceMapId:a.mapId})}}},kl.prototype.receive=function(t){var e=t.data,r=e.id;if(r&&(!e.targetMapId||this.mapId===e.targetMapId))if("<cancel>"===e.type){delete this.tasks[r];var n=this.cancelCallbacks[r];delete this.cancelCallbacks[r],n&&n()}else this.tasks[r]=e,this.taskQueue.push(r),this.invoker.trigger()},kl.prototype.process=function(){var t=this;if(this.taskQueue.length){var e=this.taskQueue.shift(),r=this.tasks[e];if(delete this.tasks[e],this.taskQueue.length&&this.invoker.trigger(),r)if("<response>"===r.type){var n=this.callbacks[e];delete this.callbacks[e],n&&(r.error?n(mn(r.error)):n(null,mn(r.data)))}else{var a=!1,i=r.hasCallback?function(r,n){a=!0,delete t.cancelCallbacks[e];var i=[];t.target.postMessage({id:e,type:"<response>",sourceMapId:t.mapId,error:r?vn(r):null,data:vn(n,i)},i)}:function(t){a=!0},o=null,s=mn(r.data);if(this.parent[r.type])o=this.parent[r.type](r.sourceMapId,s,i);else if(this.parent.getWorkerSource){var l=r.type.split(".");o=this.parent.getWorkerSource(r.sourceMapId,l[0],s.source)[l[1]](s,i)}else i(new Error("Could not find function "+r.type));!a&&o&&o.cancel&&(this.cancelCallbacks[e]=o.cancel)}}},kl.prototype.remove=function(){this.target.removeEventListener("message",this.receive,!1)};var Ml=function(t,e){t&&(e?this.setSouthWest(t).setNorthEast(e):4===t.length?this.setSouthWest([t[0],t[1]]).setNorthEast([t[2],t[3]]):this.setSouthWest(t[0]).setNorthEast(t[1]))};Ml.prototype.setNorthEast=function(t){return this._ne=t instanceof Al?new Al(t.lng,t.lat):Al.convert(t),this},Ml.prototype.setSouthWest=function(t){return this._sw=t instanceof Al?new Al(t.lng,t.lat):Al.convert(t),this},Ml.prototype.extend=function(t){var e,r,n=this._sw,a=this._ne;if(t instanceof Al)e=t,r=t;else{if(!(t instanceof Ml))return Array.isArray(t)?t.every(Array.isArray)?this.extend(Ml.convert(t)):this.extend(Al.convert(t)):this;if(e=t._sw,r=t._ne,!e||!r)return this}return n||a?(n.lng=Math.min(e.lng,n.lng),n.lat=Math.min(e.lat,n.lat),a.lng=Math.max(r.lng,a.lng),a.lat=Math.max(r.lat,a.lat)):(this._sw=new Al(e.lng,e.lat),this._ne=new Al(r.lng,r.lat)),this},Ml.prototype.getCenter=function(){return new Al((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)},Ml.prototype.getSouthWest=function(){return this._sw},Ml.prototype.getNorthEast=function(){return this._ne},Ml.prototype.getNorthWest=function(){return new Al(this.getWest(),this.getNorth())},Ml.prototype.getSouthEast=function(){return new Al(this.getEast(),this.getSouth())},Ml.prototype.getWest=function(){return this._sw.lng},Ml.prototype.getSouth=function(){return this._sw.lat},Ml.prototype.getEast=function(){return this._ne.lng},Ml.prototype.getNorth=function(){return this._ne.lat},Ml.prototype.toArray=function(){return[this._sw.toArray(),this._ne.toArray()]},Ml.prototype.toString=function(){return"LngLatBounds("+this._sw.toString()+", "+this._ne.toString()+")"},Ml.prototype.isEmpty=function(){return!(this._sw&&this._ne)},Ml.convert=function(t){return!t||t instanceof Ml?t:new Ml(t)};var Al=function(t,e){if(isNaN(t)||isNaN(e))throw new Error("Invalid LngLat object: ("+t+", "+e+")");if(this.lng=+t,this.lat=+e,this.lat>90||this.lat<-90)throw new Error("Invalid LngLat latitude value: must be between -90 and 90")};Al.prototype.wrap=function(){return new Al(u(this.lng,-180,180),this.lat)},Al.prototype.toArray=function(){return[this.lng,this.lat]},Al.prototype.toString=function(){return"LngLat("+this.lng+", "+this.lat+")"},Al.prototype.toBounds=function(t){void 0===t&&(t=0);var e=360*t/40075017,r=e/Math.cos(Math.PI/180*this.lat);return new Ml(new Al(this.lng-r,this.lat-e),new Al(this.lng+r,this.lat+e))},Al.convert=function(t){if(t instanceof Al)return t;if(Array.isArray(t)&&(2===t.length||3===t.length))return new Al(Number(t[0]),Number(t[1]));if(!Array.isArray(t)&&"object"==typeof t&&null!==t)return new Al(Number("lng"in t?t.lng:t.lon),Number(t.lat));throw new Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: <lng>, lat: <lat>}, an object {lon: <lng>, lat: <lat>}, or an array of [<lng>, <lat>]")};var Sl=2*Math.PI*6378137;function El(t){return Sl*Math.cos(t*Math.PI/180)}function Ll(t){return(180+t)/360}function Cl(t){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360}function Pl(t,e){return t/El(e)}function Ol(t){var e=180-360*t;return 360/Math.PI*Math.atan(Math.exp(e*Math.PI/180))-90}var zl=function(t,e,r){void 0===r&&(r=0),this.x=+t,this.y=+e,this.z=+r};zl.fromLngLat=function(t,e){void 0===e&&(e=0);var r=Al.convert(t);return new zl(Ll(r.lng),Cl(r.lat),Pl(e,r.lat))},zl.prototype.toLngLat=function(){return new Al(360*this.x-180,Ol(this.y))},zl.prototype.toAltitude=function(){return this.z*El(Ol(this.y))},zl.prototype.meterInMercatorCoordinateUnits=function(){return 1/Sl*(t=Ol(this.y),1/Math.cos(t*Math.PI/180));var t};var Il=function(t,e,r){this.z=t,this.x=e,this.y=r,this.key=Fl(0,t,e,r)};Il.prototype.equals=function(t){return this.z===t.z&&this.x===t.x&&this.y===t.y},Il.prototype.url=function(t,e){var r,n,a,i,o,s=(r=this.x,n=this.y,a=this.z,i=Tl(256*r,256*(n=Math.pow(2,a)-n-1),a),o=Tl(256*(r+1),256*(n+1),a),i[0]+","+i[1]+","+o[0]+","+o[1]),l=function(t,e,r){for(var n,a="",i=t;i>0;i--)a+=(e&(n=1<<i-1)?1:0)+(r&n?2:0);return a}(this.z,this.x,this.y);return t[(this.x+this.y)%t.length].replace("{prefix}",(this.x%16).toString(16)+(this.y%16).toString(16)).replace("{z}",String(this.z)).replace("{x}",String(this.x)).replace("{y}",String("tms"===e?Math.pow(2,this.z)-this.y-1:this.y)).replace("{quadkey}",l).replace("{bbox-epsg-3857}",s)},Il.prototype.getTilePoint=function(t){var e=Math.pow(2,this.z);return new a((t.x*e-this.x)*ei,(t.y*e-this.y)*ei)};var Dl=function(t,e){this.wrap=t,this.canonical=e,this.key=Fl(t,e.z,e.x,e.y)},Rl=function(t,e,r,n,a){this.overscaledZ=t,this.wrap=e,this.canonical=new Il(r,+n,+a),this.key=Fl(e,t,n,a)};function Fl(t,e,r,n){(t*=2)<0&&(t=-1*t-1);var a=1<<e;return 32*(a*a*t+a*n+r)+e}Rl.prototype.equals=function(t){return this.overscaledZ===t.overscaledZ&&this.wrap===t.wrap&&this.canonical.equals(t.canonical)},Rl.prototype.scaledTo=function(t){var e=this.canonical.z-t;return t>this.canonical.z?new Rl(t,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new Rl(t,this.wrap,t,this.canonical.x>>e,this.canonical.y>>e)},Rl.prototype.isChildOf=function(t){if(t.wrap!==this.wrap)return!1;var e=this.canonical.z-t.canonical.z;return 0===t.overscaledZ||t.overscaledZ<this.overscaledZ&&t.canonical.x===this.canonical.x>>e&&t.canonical.y===this.canonical.y>>e},Rl.prototype.children=function(t){if(this.overscaledZ>=t)return[new Rl(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];var e=this.canonical.z+1,r=2*this.canonical.x,n=2*this.canonical.y;return[new Rl(e,this.wrap,e,r,n),new Rl(e,this.wrap,e,r+1,n),new Rl(e,this.wrap,e,r,n+1),new Rl(e,this.wrap,e,r+1,n+1)]},Rl.prototype.isLessThan=function(t){return this.wrap<t.wrap||!(this.wrap>t.wrap)&&(this.overscaledZ<t.overscaledZ||!(this.overscaledZ>t.overscaledZ)&&(this.canonical.x<t.canonical.x||!(this.canonical.x>t.canonical.x)&&this.canonical.y<t.canonical.y))},Rl.prototype.wrapped=function(){return new Rl(this.overscaledZ,0,this.canonical.z,this.canonical.x,this.canonical.y)},Rl.prototype.unwrapTo=function(t){return new Rl(this.overscaledZ,t,this.canonical.z,this.canonical.x,this.canonical.y)},Rl.prototype.overscaleFactor=function(){return Math.pow(2,this.overscaledZ-this.canonical.z)},Rl.prototype.toUnwrapped=function(){return new Dl(this.wrap,this.canonical)},Rl.prototype.toString=function(){return this.overscaledZ+"/"+this.canonical.x+"/"+this.canonical.y},Rl.prototype.getTilePoint=function(t){return this.canonical.getTilePoint(new zl(t.x-this.wrap,t.y))},dn("CanonicalTileID",Il),dn("OverscaledTileID",Rl,{omit:["posMatrix"]});var Bl=function(t,e,r){if(this.uid=t,e.height!==e.width)throw new RangeError("DEM tiles must be square");if(r&&"mapbox"!==r&&"terrarium"!==r)return w('"'+r+'" is not a valid encoding type. Valid types include "mapbox" and "terrarium".');var n=this.dim=e.height;this.stride=this.dim+2,this.data=new Int32Array(this.stride*this.stride);for(var a=e.data,i="terrarium"===r?this._unpackTerrarium:this._unpackMapbox,o=0;o<n;o++)for(var s=0;s<n;s++){var l=4*(o*n+s);this.set(s,o,i(a[l],a[l+1],a[l+2]))}for(var c=0;c<n;c++)this.set(-1,c,this.get(0,c)),this.set(n,c,this.get(n-1,c)),this.set(c,-1,this.get(c,0)),this.set(c,n,this.get(c,n-1));this.set(-1,-1,this.get(0,0)),this.set(n,-1,this.get(n-1,0)),this.set(-1,n,this.get(0,n-1)),this.set(n,n,this.get(n-1,n-1))};Bl.prototype.set=function(t,e,r){this.data[this._idx(t,e)]=r+65536},Bl.prototype.get=function(t,e){return this.data[this._idx(t,e)]-65536},Bl.prototype._idx=function(t,e){if(t<-1||t>=this.dim+1||e<-1||e>=this.dim+1)throw new RangeError("out of range source coordinates for DEM data");return(e+1)*this.stride+(t+1)},Bl.prototype._unpackMapbox=function(t,e,r){return(256*t*256+256*e+r)/10-1e4},Bl.prototype._unpackTerrarium=function(t,e,r){return 256*t+e+r/256-32768},Bl.prototype.getPixels=function(){return new Oi({width:this.stride,height:this.stride},new Uint8Array(this.data.buffer))},Bl.prototype.backfillBorder=function(t,e,r){if(this.dim!==t.dim)throw new Error("dem dimension mismatch");var n=e*this.dim,a=e*this.dim+this.dim,i=r*this.dim,o=r*this.dim+this.dim;switch(e){case-1:n=a-1;break;case 1:a=n+1}switch(r){case-1:i=o-1;break;case 1:o=i+1}for(var s=-e*this.dim,l=-r*this.dim,c=i;c<o;c++)for(var u=n;u<a;u++)this.set(u,c,t.get(u+s,c+l))},dn("DEMData",Bl);var Nl=Jn([{name:"a_pos",type:"Int16",components:2},{name:"a_texture_pos",type:"Int16",components:2}]),jl=function(t){this._stringToNumber={},this._numberToString=[];for(var e=0;e<t.length;e++){var r=t[e];this._stringToNumber[r]=e,this._numberToString[e]=r}};jl.prototype.encode=function(t){return this._stringToNumber[t]},jl.prototype.decode=function(t){return this._numberToString[t]};var Vl=function(t,e,r,n){this.type="Feature",this._vectorTileFeature=t,t._z=e,t._x=r,t._y=n,this.properties=t.properties,null!=t.id&&(this.id=t.id)},Ul={geometry:{configurable:!0}};Ul.geometry.get=function(){return void 0===this._geometry&&(this._geometry=this._vectorTileFeature.toGeoJSON(this._vectorTileFeature._x,this._vectorTileFeature._y,this._vectorTileFeature._z).geometry),this._geometry},Ul.geometry.set=function(t){this._geometry=t},Vl.prototype.toJSON=function(){var t={geometry:this.geometry};for(var e in this)"_geometry"!==e&&"_vectorTileFeature"!==e&&(t[e]=this[e]);return t},Object.defineProperties(Vl.prototype,Ul);var ql=function(){this.state={},this.stateChanges={},this.deletedStates={}};ql.prototype.updateState=function(t,e,r){var n=String(e);if(this.stateChanges[t]=this.stateChanges[t]||{},this.stateChanges[t][n]=this.stateChanges[t][n]||{},h(this.stateChanges[t][n],r),null===this.deletedStates[t])for(var a in this.deletedStates[t]={},this.state[t])a!==n&&(this.deletedStates[t][a]=null);else if(this.deletedStates[t]&&null===this.deletedStates[t][n])for(var i in this.deletedStates[t][n]={},this.state[t][n])r[i]||(this.deletedStates[t][n][i]=null);else for(var o in r)this.deletedStates[t]&&this.deletedStates[t][n]&&null===this.deletedStates[t][n][o]&&delete this.deletedStates[t][n][o]},ql.prototype.removeFeatureState=function(t,e,r){if(null!==this.deletedStates[t]){var n=String(e);if(this.deletedStates[t]=this.deletedStates[t]||{},r&&void 0!==e&&e>=0)null!==this.deletedStates[t][n]&&(this.deletedStates[t][n]=this.deletedStates[t][n]||{},this.deletedStates[t][n][r]=null);else if(void 0!==e&&e>=0)if(this.stateChanges[t]&&this.stateChanges[t][n])for(r in this.deletedStates[t][n]={},this.stateChanges[t][n])this.deletedStates[t][n][r]=null;else this.deletedStates[t][n]=null;else this.deletedStates[t]=null}},ql.prototype.getState=function(t,e){var r=String(e),n=this.state[t]||{},a=this.stateChanges[t]||{},i=h({},n[r],a[r]);if(null===this.deletedStates[t])return{};if(this.deletedStates[t]){var o=this.deletedStates[t][e];if(null===o)return{};for(var s in o)delete i[s]}return i},ql.prototype.initializeTileState=function(t,e){t.setFeatureState(this.state,e)},ql.prototype.coalesceChanges=function(t,e){var r={};for(var n in this.stateChanges){this.state[n]=this.state[n]||{};var a={};for(var i in this.stateChanges[n])this.state[n][i]||(this.state[n][i]={}),h(this.state[n][i],this.stateChanges[n][i]),a[i]=this.state[n][i];r[n]=a}for(var o in this.deletedStates){this.state[o]=this.state[o]||{};var s={};if(null===this.deletedStates[o])for(var l in this.state[o])s[l]={},this.state[o][l]={};else for(var c in this.deletedStates[o]){if(null===this.deletedStates[o][c])this.state[o][c]={};else for(var u=0,f=Object.keys(this.deletedStates[o][c]);u<f.length;u+=1){var p=f[u];delete this.state[o][c][p]}s[c]=this.state[o][c]}r[o]=r[o]||{},h(r[o],s)}if(this.stateChanges={},this.deletedStates={},0!==Object.keys(r).length)for(var d in t)t[d].setFeatureState(r,e)};var Hl=function(t,e,r){this.tileID=t,this.x=t.canonical.x,this.y=t.canonical.y,this.z=t.canonical.z,this.grid=e||new cn(ei,16,0),this.grid3D=new cn(ei,16,0),this.featureIndexArray=r||new Ca};function Gl(t){for(var e=1/0,r=1/0,n=-1/0,a=-1/0,i=0,o=t;i<o.length;i+=1){var s=o[i];e=Math.min(e,s.x),r=Math.min(r,s.y),n=Math.max(n,s.x),a=Math.max(a,s.y)}return{minX:e,minY:r,maxX:n,maxY:a}}function Yl(t,e){return e-t}Hl.prototype.insert=function(t,e,r,n,a,i){var o=this.featureIndexArray.length;this.featureIndexArray.emplaceBack(r,n,a);for(var s=i?this.grid3D:this.grid,l=0;l<e.length;l++){for(var c=e[l],u=[1/0,1/0,-1/0,-1/0],h=0;h<c.length;h++){var f=c[h];u[0]=Math.min(u[0],f.x),u[1]=Math.min(u[1],f.y),u[2]=Math.max(u[2],f.x),u[3]=Math.max(u[3],f.y)}u[0]<ei&&u[1]<ei&&u[2]>=0&&u[3]>=0&&s.insert(o,u[0],u[1],u[2],u[3])}},Hl.prototype.loadVTLayers=function(){return this.vtLayers||(this.vtLayers=new Io.VectorTile(new tl(this.rawTileData)).layers,this.sourceLayerCoder=new jl(this.vtLayers?Object.keys(this.vtLayers).sort():["_geojsonTileLayer"])),this.vtLayers},Hl.prototype.query=function(t,e,r){var n=this;this.loadVTLayers();for(var i=t.params||{},o=ei/t.tileSize/t.scale,s=Rr(i.filter),l=t.queryGeometry,c=t.queryPadding*o,u=Gl(l),h=this.grid.query(u.minX-c,u.minY-c,u.maxX+c,u.maxY+c),f=Gl(t.cameraQueryGeometry),p=0,d=this.grid3D.query(f.minX-c,f.minY-c,f.maxX+c,f.maxY+c,function(e,r,n,i){return function(t,e,r,n,i){for(var o=0,s=t;o<s.length;o+=1){var l=s[o];if(e<=l.x&&r<=l.y&&n>=l.x&&i>=l.y)return!0}var c=[new a(e,r),new a(e,i),new a(n,i),new a(n,r)];if(t.length>2)for(var u=0,h=c;u<h.length;u+=1)if(gi(t,h[u]))return!0;for(var f=0;f<t.length-1;f++)if(vi(t[f],t[f+1],c))return!0;return!1}(t.cameraQueryGeometry,e-c,r-c,n+c,i+c)});p<d.length;p+=1){var g=d[p];h.push(g)}h.sort(Yl);for(var v,m={},y=function(a){var c=h[a];if(c!==v){v=c;var u=n.featureIndexArray.get(c),f=null;n.loadMatchingFeature(m,u.bucketIndex,u.sourceLayerIndex,u.featureIndex,s,i.layers,e,function(e,a){f||(f=ni(e));var i={};return e.id&&(i=r.getState(a.sourceLayer||"_geojsonTileLayer",e.id)),a.queryIntersectsFeature(l,e,i,f,n.z,t.transform,o,t.pixelPosMatrix)})}},x=0;x<h.length;x++)y(x);return m},Hl.prototype.loadMatchingFeature=function(t,e,r,n,a,i,o,s){var l=this.bucketLayerIDs[e];if(!i||function(t,e){for(var r=0;r<t.length;r++)if(e.indexOf(t[r])>=0)return!0;return!1}(i,l)){var c=this.sourceLayerCoder.decode(r),u=this.vtLayers[c].feature(n);if(a(new Pn(this.tileID.overscaledZ),u))for(var h=0;h<l.length;h++){var f=l[h];if(!(i&&i.indexOf(f)<0)){var p=o[f];if(p){var d=!s||s(u,p);if(d){var g=new Vl(u,this.z,this.x,this.y);g.layer=p.serialize();var v=t[f];void 0===v&&(v=t[f]=[]),v.push({featureIndex:n,feature:g,intersectionZ:d})}}}}}},Hl.prototype.lookupSymbolFeatures=function(t,e,r,n,a,i){var o={};this.loadVTLayers();for(var s=Rr(n),l=0,c=t;l<c.length;l+=1){var u=c[l];this.loadMatchingFeature(o,e,r,u,s,a,i)}return o},Hl.prototype.hasLayer=function(t){for(var e=0,r=this.bucketLayerIDs;e<r.length;e+=1)for(var n=0,a=r[e];n<a.length;n+=1)if(t===a[n])return!0;return!1},dn("FeatureIndex",Hl,{omit:["rawTileData","sourceLayerCoder"]});var Wl=function(t,e){this.tileID=t,this.uid=p(),this.uses=0,this.tileSize=e,this.buckets={},this.expirationTime=null,this.queryPadding=0,this.hasSymbolBuckets=!1,this.expiredRequestCount=0,this.state="loading"};function Xl(t,e,r,n,a){if(void 0===e.segment)return!0;for(var i=e,o=e.segment+1,s=0;s>-r/2;){if(--o<0)return!1;s-=t[o].dist(i),i=t[o]}s+=t[o].dist(t[o+1]),o++;for(var l=[],c=0;s<r/2;){var u=t[o-1],h=t[o],f=t[o+1];if(!f)return!1;var p=u.angleTo(h)-h.angleTo(f);for(p=Math.abs((p+3*Math.PI)%(2*Math.PI)-Math.PI),l.push({distance:s,angleDelta:p}),c+=p;s-l[0].distance>n;)c-=l.shift().angleDelta;if(c>a)return!1;o++,s+=h.dist(f)}return!0}function Zl(t){for(var e=0,r=0;r<t.length-1;r++)e+=t[r].dist(t[r+1]);return e}function Jl(t,e,r){return t?.6*e*r:0}function Kl(t,e){return Math.max(t?t.right-t.left:0,e?e.right-e.left:0)}function Ql(t,e,r,n,a,i){for(var o=Jl(r,a,i),s=Kl(r,n)*i,l=0,c=Zl(t)/2,u=0;u<t.length-1;u++){var h=t[u],f=t[u+1],p=h.dist(f);if(l+p>c){var d=(c-l)/p,g=ye(h.x,f.x,d),v=ye(h.y,f.y,d),m=new bs(g,v,f.angleTo(h),u);return m._round(),!o||Xl(t,m,s,o,e)?m:void 0}l+=p}}function $l(t,e,r,n,a,i,o,s,l){var c=Jl(n,i,o),u=Kl(n,a),h=u*o,f=0===t[0].x||t[0].x===l||0===t[0].y||t[0].y===l;return e-h<e/4&&(e=h+e/4),function t(e,r,n,a,i,o,s,l,c){for(var u=o/2,h=Zl(e),f=0,p=r-n,d=[],g=0;g<e.length-1;g++){for(var v=e[g],m=e[g+1],y=v.dist(m),x=m.angleTo(v);p+n<f+y;){var b=((p+=n)-f)/y,_=ye(v.x,m.x,b),w=ye(v.y,m.y,b);if(_>=0&&_<c&&w>=0&&w<c&&p-u>=0&&p+u<=h){var k=new bs(_,w,x,g);k._round(),a&&!Xl(e,k,o,a,i)||d.push(k)}}f+=y}return l||d.length||s||(d=t(e,f/2,n,a,i,o,s,!0,c)),d}(t,f?e/2*s%e:(u/2+2*i)*o*s%e,e,c,r,h,f,!1,l)}Wl.prototype.registerFadeDuration=function(t){var e=t+this.timeAdded;e<I.now()||this.fadeEndTime&&e<this.fadeEndTime||(this.fadeEndTime=e)},Wl.prototype.wasRequested=function(){return"errored"===this.state||"loaded"===this.state||"reloading"===this.state},Wl.prototype.loadVectorData=function(t,e,r){if(this.hasData()&&this.unloadVectorData(),this.state="loaded",t){for(var n in t.featureIndex&&(this.latestFeatureIndex=t.featureIndex,t.rawTileData?(this.latestRawTileData=t.rawTileData,this.latestFeatureIndex.rawTileData=t.rawTileData):this.latestRawTileData&&(this.latestFeatureIndex.rawTileData=this.latestRawTileData)),this.collisionBoxArray=t.collisionBoxArray,this.buckets=function(t,e){var r={};if(!e)return r;for(var n=function(){var t=i[a],n=t.layerIds.map(function(t){return e.getLayer(t)}).filter(Boolean);if(0!==n.length){t.layers=n,t.stateDependentLayerIds&&(t.stateDependentLayers=t.stateDependentLayerIds.map(function(t){return n.filter(function(e){return e.id===t})[0]}));for(var o=0,s=n;o<s.length;o+=1){var l=s[o];r[l.id]=t}}},a=0,i=t;a<i.length;a+=1)n();return r}(t.buckets,e.style),this.hasSymbolBuckets=!1,this.buckets){var a=this.buckets[n];if(a instanceof Os){if(this.hasSymbolBuckets=!0,!r)break;a.justReloaded=!0}}for(var i in this.queryPadding=0,this.buckets){var o=this.buckets[i];this.queryPadding=Math.max(this.queryPadding,e.style.getLayer(i).queryRadius(o))}t.imageAtlas&&(this.imageAtlas=t.imageAtlas),t.glyphAtlasImage&&(this.glyphAtlasImage=t.glyphAtlasImage)}else this.collisionBoxArray=new ba},Wl.prototype.unloadVectorData=function(){for(var t in this.buckets)this.buckets[t].destroy();this.buckets={},this.imageAtlasTexture&&this.imageAtlasTexture.destroy(),this.imageAtlas&&(this.imageAtlas=null),this.glyphAtlasTexture&&this.glyphAtlasTexture.destroy(),this.latestFeatureIndex=null,this.state="unloaded"},Wl.prototype.unloadDEMData=function(){this.dem=null,this.neighboringTiles=null,this.state="unloaded"},Wl.prototype.getBucket=function(t){return this.buckets[t.id]},Wl.prototype.upload=function(t){for(var e in this.buckets){var r=this.buckets[e];r.uploadPending()&&r.upload(t)}var n=t.gl;this.imageAtlas&&!this.imageAtlas.uploaded&&(this.imageAtlasTexture=new Ks(t,this.imageAtlas.image,n.RGBA),this.imageAtlas.uploaded=!0),this.glyphAtlasImage&&(this.glyphAtlasTexture=new Ks(t,this.glyphAtlasImage,n.ALPHA),this.glyphAtlasImage=null)},Wl.prototype.prepare=function(t){this.imageAtlas&&this.imageAtlas.patchUpdatedImages(t,this.imageAtlasTexture)},Wl.prototype.queryRenderedFeatures=function(t,e,r,n,a,i,o,s,l){return this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData?this.latestFeatureIndex.query({queryGeometry:r,cameraQueryGeometry:n,scale:a,tileSize:this.tileSize,pixelPosMatrix:l,transform:o,params:i,queryPadding:this.queryPadding*s},t,e):{}},Wl.prototype.querySourceFeatures=function(t,e){if(this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData){var r=this.latestFeatureIndex.loadVTLayers(),n=e?e.sourceLayer:"",a=r._geojsonTileLayer||r[n];if(a)for(var i=Rr(e&&e.filter),o=this.tileID.canonical,s=o.z,l=o.x,c=o.y,u={z:s,x:l,y:c},h=0;h<a.length;h++){var f=a.feature(h);if(i(new Pn(this.tileID.overscaledZ),f)){var p=new Vl(f,s,l,c);p.tile=u,t.push(p)}}}},Wl.prototype.clearMask=function(){this.segments&&(this.segments.destroy(),delete this.segments),this.maskedBoundsBuffer&&(this.maskedBoundsBuffer.destroy(),delete this.maskedBoundsBuffer),this.maskedIndexBuffer&&(this.maskedIndexBuffer.destroy(),delete this.maskedIndexBuffer)},Wl.prototype.setMask=function(t,e){if(!o(this.mask,t)&&(this.mask=t,this.clearMask(),!o(t,{0:!0}))){var r=new $n,n=new da;this.segments=new Oa,this.segments.prepareSegment(0,r,n);for(var i=Object.keys(t),s=0;s<i.length;s++){var l=t[+i[s]],c=ei>>l.z,u=new a(l.x*c,l.y*c),h=new a(u.x+c,u.y+c),f=this.segments.prepareSegment(4,r,n);r.emplaceBack(u.x,u.y,u.x,u.y),r.emplaceBack(h.x,u.y,h.x,u.y),r.emplaceBack(u.x,h.y,u.x,h.y),r.emplaceBack(h.x,h.y,h.x,h.y);var p=f.vertexLength;n.emplaceBack(p,p+1,p+2),n.emplaceBack(p+1,p+2,p+3),f.vertexLength+=4,f.primitiveLength+=2}this.maskedBoundsBuffer=e.createVertexBuffer(r,Nl.members),this.maskedIndexBuffer=e.createIndexBuffer(n)}},Wl.prototype.hasData=function(){return"loaded"===this.state||"reloading"===this.state||"expired"===this.state},Wl.prototype.patternsLoaded=function(){return this.imageAtlas&&!!Object.keys(this.imageAtlas.patternPositions).length},Wl.prototype.setExpiryData=function(t){var e=this.expirationTime;if(t.cacheControl){var r=M(t.cacheControl);r["max-age"]&&(this.expirationTime=Date.now()+1e3*r["max-age"])}else t.expires&&(this.expirationTime=new Date(t.expires).getTime());if(this.expirationTime){var n=Date.now(),a=!1;if(this.expirationTime>n)a=!1;else if(e)if(this.expirationTime<e)a=!0;else{var i=this.expirationTime-e;i?this.expirationTime=n+Math.max(i,3e4):a=!0}else a=!0;a?(this.expiredRequestCount++,this.state="expired"):this.expiredRequestCount=0}},Wl.prototype.getExpiryTimeout=function(){if(this.expirationTime)return this.expiredRequestCount?1e3*(1<<Math.min(this.expiredRequestCount-1,31)):Math.min(this.expirationTime-(new Date).getTime(),Math.pow(2,31)-1)},Wl.prototype.setFeatureState=function(t,e){if(this.latestFeatureIndex&&this.latestFeatureIndex.rawTileData&&0!==Object.keys(t).length){var r=this.latestFeatureIndex.loadVTLayers();for(var n in this.buckets){var a=this.buckets[n],i=a.layers[0].sourceLayer||"_geojsonTileLayer",o=r[i],s=t[i];o&&s&&0!==Object.keys(s).length&&(a.update(s,o,this.imageAtlas&&this.imageAtlas.patternPositions||{}),e&&e.style&&(this.queryPadding=Math.max(this.queryPadding,e.style.getLayer(n).queryRadius(a))))}}},Wl.prototype.holdingForFade=function(){return void 0!==this.symbolFadeHoldUntil},Wl.prototype.symbolFadeFinished=function(){return!this.symbolFadeHoldUntil||this.symbolFadeHoldUntil<I.now()},Wl.prototype.clearFadeHold=function(){this.symbolFadeHoldUntil=void 0},Wl.prototype.setHoldDuration=function(t){this.symbolFadeHoldUntil=I.now()+t};var tc=function(t,e,r,n,i,o,s,l,c,u,h,f){var p=s.top*l-c,d=s.bottom*l+c,g=s.left*l-c,v=s.right*l+c;if(this.boxStartIndex=t.length,u){var m=d-p,y=v-g;m>0&&(m=Math.max(10*l,m),this._addLineCollisionCircles(t,e,r,r.segment,y,m,n,i,o,h))}else{if(f){var x=new a(g,p),b=new a(v,p),_=new a(g,d),w=new a(v,d),k=f*Math.PI/180;x._rotate(k),b._rotate(k),_._rotate(k),w._rotate(k),g=Math.min(x.x,b.x,_.x,w.x),v=Math.max(x.x,b.x,_.x,w.x),p=Math.min(x.y,b.y,_.y,w.y),d=Math.max(x.y,b.y,_.y,w.y)}t.emplaceBack(r.x,r.y,g,p,v,d,n,i,o,0,0)}this.boxEndIndex=t.length};tc.prototype._addLineCollisionCircles=function(t,e,r,n,a,i,o,s,l,c){var u=i/2,h=Math.floor(a/u)||1,f=1+.4*Math.log(c)/Math.LN2,p=Math.floor(h*f/2),d=-i/2,g=r,v=n+1,m=d,y=-a/2,x=y-a/4;do{if(--v<0){if(m>y)return;v=0;break}m-=e[v].dist(g),g=e[v]}while(m>x);for(var b=e[v].dist(e[v+1]),_=-p;_<h+p;_++){var w=_*u,k=y+w;if(w<0&&(k+=w),w>a&&(k+=w-a),!(k<m)){for(;m+b<k;){if(m+=b,++v+1>=e.length)return;b=e[v].dist(e[v+1])}var T=k-m,M=e[v],A=e[v+1].sub(M)._unit()._mult(T)._add(M)._round(),S=Math.abs(k-d)<u?0:.8*(k-d);t.emplaceBack(A.x,A.y,-i/2,-i/2,i/2,i/2,o,s,l,i/2,S)}}};var ec=function(t,e){if(void 0===t&&(t=[]),void 0===e&&(e=rc),this.data=t,this.length=this.data.length,this.compare=e,this.length>0)for(var r=(this.length>>1)-1;r>=0;r--)this._down(r)};function rc(t,e){return t<e?-1:t>e?1:0}function nc(t,e,r){void 0===e&&(e=1),void 0===r&&(r=!1);for(var n=1/0,i=1/0,o=-1/0,s=-1/0,l=t[0],c=0;c<l.length;c++){var u=l[c];(!c||u.x<n)&&(n=u.x),(!c||u.y<i)&&(i=u.y),(!c||u.x>o)&&(o=u.x),(!c||u.y>s)&&(s=u.y)}var h=o-n,f=s-i,p=Math.min(h,f),d=p/2,g=new ec([],ac);if(0===p)return new a(n,i);for(var v=n;v<o;v+=p)for(var m=i;m<s;m+=p)g.push(new ic(v+d,m+d,d,t));for(var y=function(t){for(var e=0,r=0,n=0,a=t[0],i=0,o=a.length,s=o-1;i<o;s=i++){var l=a[i],c=a[s],u=l.x*c.y-c.x*l.y;r+=(l.x+c.x)*u,n+=(l.y+c.y)*u,e+=3*u}return new ic(r/e,n/e,0,t)}(t),x=g.length;g.length;){var b=g.pop();(b.d>y.d||!y.d)&&(y=b,r&&console.log("found best %d after %d probes",Math.round(1e4*b.d)/1e4,x)),b.max-y.d<=e||(d=b.h/2,g.push(new ic(b.p.x-d,b.p.y-d,d,t)),g.push(new ic(b.p.x+d,b.p.y-d,d,t)),g.push(new ic(b.p.x-d,b.p.y+d,d,t)),g.push(new ic(b.p.x+d,b.p.y+d,d,t)),x+=4)}return r&&(console.log("num probes: "+x),console.log("best distance: "+y.d)),y.p}function ac(t,e){return e.max-t.max}function ic(t,e,r,n){this.p=new a(t,e),this.h=r,this.d=function(t,e){for(var r=!1,n=1/0,a=0;a<e.length;a++)for(var i=e[a],o=0,s=i.length,l=s-1;o<s;l=o++){var c=i[o],u=i[l];c.y>t.y!=u.y>t.y&&t.x<(u.x-c.x)*(t.y-c.y)/(u.y-c.y)+c.x&&(r=!r),n=Math.min(n,pi(t,c,u))}return(r?1:-1)*Math.sqrt(n)}(this.p,n),this.max=this.d+this.h*Math.SQRT2}ec.prototype.push=function(t){this.data.push(t),this.length++,this._up(this.length-1)},ec.prototype.pop=function(){if(0!==this.length){var t=this.data[0],e=this.data.pop();return this.length--,this.length>0&&(this.data[0]=e,this._down(0)),t}},ec.prototype.peek=function(){return this.data[0]},ec.prototype._up=function(t){for(var e=this.data,r=this.compare,n=e[t];t>0;){var a=t-1>>1,i=e[a];if(r(n,i)>=0)break;e[t]=i,t=a}e[t]=n},ec.prototype._down=function(t){for(var e=this.data,r=this.compare,n=this.length>>1,a=e[t];t<n;){var i=1+(t<<1),o=e[i],s=i+1;if(s<this.length&&r(e[s],o)<0&&(i=s,o=e[s]),r(o,a)>=0)break;e[t]=o,t=i}e[t]=a};var oc=e(function(t){t.exports=function(t,e){var r,n,a,i,o,s,l,c;for(r=3&t.length,n=t.length-r,a=e,o=3432918353,s=461845907,c=0;c<n;)l=255&t.charCodeAt(c)|(255&t.charCodeAt(++c))<<8|(255&t.charCodeAt(++c))<<16|(255&t.charCodeAt(++c))<<24,++c,a=27492+(65535&(i=5*(65535&(a=(a^=l=(65535&(l=(l=(65535&l)*o+(((l>>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295)<<13|a>>>19))+((5*(a>>>16)&65535)<<16)&4294967295))+((58964+(i>>>16)&65535)<<16);switch(l=0,r){case 3:l^=(255&t.charCodeAt(c+2))<<16;case 2:l^=(255&t.charCodeAt(c+1))<<8;case 1:a^=l=(65535&(l=(l=(65535&(l^=255&t.charCodeAt(c)))*o+(((l>>>16)*o&65535)<<16)&4294967295)<<15|l>>>17))*s+(((l>>>16)*s&65535)<<16)&4294967295}return a^=t.length,a=2246822507*(65535&(a^=a>>>16))+((2246822507*(a>>>16)&65535)<<16)&4294967295,a=3266489909*(65535&(a^=a>>>13))+((3266489909*(a>>>16)&65535)<<16)&4294967295,(a^=a>>>16)>>>0}}),sc=e(function(t){t.exports=function(t,e){for(var r,n=t.length,a=e^n,i=0;n>=4;)r=1540483477*(65535&(r=255&t.charCodeAt(i)|(255&t.charCodeAt(++i))<<8|(255&t.charCodeAt(++i))<<16|(255&t.charCodeAt(++i))<<24))+((1540483477*(r>>>16)&65535)<<16),a=1540483477*(65535&a)+((1540483477*(a>>>16)&65535)<<16)^(r=1540483477*(65535&(r^=r>>>24))+((1540483477*(r>>>16)&65535)<<16)),n-=4,++i;switch(n){case 3:a^=(255&t.charCodeAt(i+2))<<16;case 2:a^=(255&t.charCodeAt(i+1))<<8;case 1:a=1540483477*(65535&(a^=255&t.charCodeAt(i)))+((1540483477*(a>>>16)&65535)<<16)}return a=1540483477*(65535&(a^=a>>>13))+((1540483477*(a>>>16)&65535)<<16),(a^=a>>>15)>>>0}}),lc=oc,cc=oc,uc=sc;lc.murmur3=cc,lc.murmur2=uc;var hc=7;function fc(t,e){var r=0,n=0,a=e/Math.sqrt(2);switch(t){case"top-right":case"top-left":n=a-hc;break;case"bottom-right":case"bottom-left":n=-a+hc;break;case"bottom":n=-e+hc;break;case"top":n=e-hc}switch(t){case"top-right":case"bottom-right":r=-a;break;case"top-left":case"bottom-left":r=a;break;case"left":r=e;break;case"right":r=-e}return[r,n]}function pc(t){switch(t){case"right":case"top-right":case"bottom-right":return"right";case"left":case"top-left":case"bottom-left":return"left"}return"center"}var dc=65535;function gc(t,e,r,n,i,o,s,l,c,u,h,f,p){var d=function(t,e,r,n,i,o,s,l){for(var c=n.layout.get("text-rotate").evaluate(o,{})*Math.PI/180,u=e.positionedGlyphs,h=[],f=0;f<u.length;f++){var p=u[f],d=s[p.fontStack],g=d&&d[p.glyph];if(g){var v=g.rect;if(v){var m=_l+1,y=g.metrics.advance*p.scale/2,x=i?[p.x+y,p.y]:[0,0],b=i?[0,0]:[p.x+y+r[0],p.y+r[1]],_=(i||l)&&p.vertical,w=[0,0];_&&(w=b,b=[0,0]);var k=(g.metrics.left-m)*p.scale-y+b[0],T=(-g.metrics.top-m)*p.scale+b[1],M=k+v.w*p.scale,A=T+v.h*p.scale,S=new a(k,T),E=new a(M,T),L=new a(k,A),C=new a(M,A);if(_){var P=new a(-y,y-e.yOffset),O=-Math.PI/2,z=ls/2-y,I=new a(5-e.yOffset-z,0),D=new(Function.prototype.bind.apply(a,[null].concat(w)));S._rotateAround(O,P)._add(I)._add(D),E._rotateAround(O,P)._add(I)._add(D),L._rotateAround(O,P)._add(I)._add(D),C._rotateAround(O,P)._add(I)._add(D)}if(c){var R=Math.sin(c),F=Math.cos(c),B=[F,-R,R,F];S._matMult(B),E._matMult(B),L._matMult(B),C._matMult(B)}h.push({tl:S,tr:E,bl:L,br:C,tex:v,writingMode:e.writingMode,glyphOffset:x,sectionIndex:p.sectionIndex})}}}return h}(0,r,s,n,i,o,f,t.allowVerticalPlacement),g=t.textSizeData,v=null;"source"===g.kind?(v=[_s*n.layout.get("text-size").evaluate(o,{})])[0]>dc&&w(t.layerIds[0]+': Value for "text-size" is >= 256. Reduce your "text-size".'):"composite"===g.kind&&((v=[_s*p.compositeTextSizes[0].evaluate(o,{}),_s*p.compositeTextSizes[1].evaluate(o,{})])[0]>dc||v[1]>dc)&&w(t.layerIds[0]+': Value for "text-size" is >= 256. Reduce your "text-size".'),t.addSymbols(t.text,d,v,s,i,o,c,e,l.lineStartIndex,l.lineLength);for(var m=0,y=u;m<y.length;m+=1)h[y[m]]=t.text.placedSymbolArray.length-1;return 4*d.length}function vc(t){for(var e in t)return t[e];return null}function mc(t,e,r,n){var a=t.compareText;if(e in a){for(var i=a[e],o=i.length-1;o>=0;o--)if(n.dist(i[o])<r)return!0}else a[e]=[];return a[e].push(n),!1}t.Actor=kl,t.AlphaImage=Pi,t.CanonicalTileID=Il,t.CollisionBoxArray=ba,t.Color=Wt,t.DEMData=Bl,t.DataConstantProperty=jn,t.DictionaryCoder=jl,t.EXTENT=ei,t.ErrorEvent=wt,t.EvaluationParameters=Pn,t.Event=_t,t.Evented=kt,t.FeatureIndex=Hl,t.FillBucket=_o,t.FillExtrusionBucket=Bo,t.ImageAtlas=Ys,t.ImagePosition=Hs,t.LineBucket=Zo,t.LngLat=Al,t.LngLatBounds=Ml,t.MercatorCoordinate=zl,t.ONE_EM=ls,t.OverscaledTileID=Rl,t.Point=a,t.Point$1=a,t.ProgramConfiguration=Ka,t.Properties=Gn,t.Protobuf=tl,t.RGBAImage=Oi,t.RequestManager=V,t.ResourceType=lt,t.SegmentVector=Oa,t.SourceFeatureState=ql,t.StructArrayLayout1ui2=va,t.StructArrayLayout2i4=Qn,t.StructArrayLayout2ui4=ga,t.StructArrayLayout3ui6=da,t.StructArrayLayout4i8=$n,t.SymbolBucket=Os,t.Texture=Ks,t.Tile=Wl,t.Transitionable=In,t.Uniform1f=Ba,t.Uniform1i=Fa,t.Uniform2f=Na,t.Uniform3f=ja,t.Uniform4f=Va,t.UniformColor=Ua,t.UniformMatrix4f=Ha,t.UnwrappedTileID=Dl,t.ValidationError=Mt,t.WritingMode=cs,t.ZoomHistory=yn,t.addDynamicAttributes=Ls,t.asyncAll=function(t,e,r){if(!t.length)return r(null,[]);var n=t.length,a=new Array(t.length),i=null;t.forEach(function(t,o){e(t,function(t,e){t&&(i=t),a[o]=e,0==--n&&r(i,a)})})},t.bezier=s,t.bindAll=v,t.browser=I,t.cacheEntryPossiblyAdded=function(t){++st>at&&(t.getActor().send("enforceCacheSizeLimit",nt),st=0)},t.clamp=c,t.clearTileCache=function(t){var e=self.caches.delete(rt);t&&e.catch(t).then(function(){return t()})},t.clone=function(t){var e=new ki(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},t.clone$1=b,t.config=D,t.create=function(){var t=new ki(16);return ki!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0),t[0]=1,t[5]=1,t[10]=1,t[15]=1,t},t.create$1=function(){var t=new ki(9);return ki!=Float32Array&&(t[1]=0,t[2]=0,t[3]=0,t[5]=0,t[6]=0,t[7]=0),t[0]=1,t[4]=1,t[8]=1,t},t.create$2=function(){var t=new ki(4);return ki!=Float32Array&&(t[1]=0,t[2]=0),t[0]=1,t[3]=1,t},t.createCommonjsModule=e,t.createExpression=kr,t.createLayout=Jn,t.createStyleLayer=function(t){return"custom"===t.type?new Vs(t):new Us[t.type](t)},t.deepEqual=o,t.ease=l,t.emitValidationErrors=ln,t.endsWith=m,t.enforceCacheSizeLimit=function(t){self.caches&&self.caches.open(rt).then(function(e){e.keys().then(function(r){for(var n=0;n<r.length-t;n++)e.delete(r[n])})})},t.evaluateRadialOffset=fc,t.evaluateSizeForFeature=ks,t.evaluateSizeForZoom=Ts,t.evented=Ln,t.extend=h,t.featureFilter=Rr,t.filterObject=x,t.fromRotation=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=-r,t[4]=n,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},t.getAnchorAlignment=ys,t.getAnchorJustification=pc,t.getArrayBuffer=vt,t.getImage=yt,t.getJSON=function(t,e){return gt(h(t,{type:"json"}),e)},t.getReferrer=ht,t.getVideo=function(t,e){var r,n,a=self.document.createElement("video");a.muted=!0,a.onloadstart=function(){e(null,a)};for(var i=0;i<t.length;i++){var o=self.document.createElement("source");r=t[i],n=void 0,(n=self.document.createElement("a")).href=r,(n.protocol!==self.document.location.protocol||n.host!==self.document.location.host)&&(a.crossOrigin="Anonymous"),o.src=t[i],a.appendChild(o)}return{cancel:function(){}}},t.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},t.invert=function(t,e){var r=e[0],n=e[1],a=e[2],i=e[3],o=e[4],s=e[5],l=e[6],c=e[7],u=e[8],h=e[9],f=e[10],p=e[11],d=e[12],g=e[13],v=e[14],m=e[15],y=r*s-n*o,x=r*l-a*o,b=r*c-i*o,_=n*l-a*s,w=n*c-i*s,k=a*c-i*l,T=u*g-h*d,M=u*v-f*d,A=u*m-p*d,S=h*v-f*g,E=h*m-p*g,L=f*m-p*v,C=y*L-x*E+b*S+_*A-w*M+k*T;return C?(C=1/C,t[0]=(s*L-l*E+c*S)*C,t[1]=(a*E-n*L-i*S)*C,t[2]=(g*k-v*w+m*_)*C,t[3]=(f*w-h*k-p*_)*C,t[4]=(l*A-o*L-c*M)*C,t[5]=(r*L-a*A+i*M)*C,t[6]=(v*b-d*k-m*x)*C,t[7]=(u*k-f*b+p*x)*C,t[8]=(o*E-s*A+c*T)*C,t[9]=(n*A-r*E-i*T)*C,t[10]=(d*w-g*b+m*y)*C,t[11]=(h*b-u*w-p*y)*C,t[12]=(s*M-o*S-l*T)*C,t[13]=(r*S-n*M+a*T)*C,t[14]=(g*x-d*_-v*y)*C,t[15]=(u*_-h*x+f*y)*C,t):null},t.isChar=xn,t.isMapboxURL=U,t.keysDifference=function(t,e){var r=[];for(var n in t)n in e||r.push(n);return r},t.makeRequest=gt,t.mapObject=y,t.mercatorXfromLng=Ll,t.mercatorYfromLat=Cl,t.mercatorZfromAltitude=Pl,t.multiply=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=e[3],s=e[4],l=e[5],c=e[6],u=e[7],h=e[8],f=e[9],p=e[10],d=e[11],g=e[12],v=e[13],m=e[14],y=e[15],x=r[0],b=r[1],_=r[2],w=r[3];return t[0]=x*n+b*s+_*h+w*g,t[1]=x*a+b*l+_*f+w*v,t[2]=x*i+b*c+_*p+w*m,t[3]=x*o+b*u+_*d+w*y,x=r[4],b=r[5],_=r[6],w=r[7],t[4]=x*n+b*s+_*h+w*g,t[5]=x*a+b*l+_*f+w*v,t[6]=x*i+b*c+_*p+w*m,t[7]=x*o+b*u+_*d+w*y,x=r[8],b=r[9],_=r[10],w=r[11],t[8]=x*n+b*s+_*h+w*g,t[9]=x*a+b*l+_*f+w*v,t[10]=x*i+b*c+_*p+w*m,t[11]=x*o+b*u+_*d+w*y,x=r[12],b=r[13],_=r[14],w=r[15],t[12]=x*n+b*s+_*h+w*g,t[13]=x*a+b*l+_*f+w*v,t[14]=x*i+b*c+_*p+w*m,t[15]=x*o+b*u+_*d+w*y,t},t.mvt=Io,t.number=ye,t.ortho=function(t,e,r,n,a,i,o){var s=1/(e-r),l=1/(n-a),c=1/(i-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*c,t[11]=0,t[12]=(e+r)*s,t[13]=(a+n)*l,t[14]=(o+i)*c,t[15]=1,t},t.parseGlyphPBF=function(t){return new tl(t).readFields(yl,[])},t.pbf=tl,t.performSymbolLayout=function(t,e,r,n,i,o){t.createArrays();var s=512*t.overscaling;t.tilePixelRatio=ei/s,t.compareText={},t.iconsNeedLinear=!1;var l=t.layers[0].layout,c=t.layers[0]._unevaluatedLayout._values,u={};if("composite"===t.textSizeData.kind){var h=t.textSizeData,f=h.minZoom,p=h.maxZoom;u.compositeTextSizes=[c["text-size"].possiblyEvaluate(new Pn(f)),c["text-size"].possiblyEvaluate(new Pn(p))]}if("composite"===t.iconSizeData.kind){var d=t.iconSizeData,g=d.minZoom,v=d.maxZoom;u.compositeIconSizes=[c["icon-size"].possiblyEvaluate(new Pn(g)),c["icon-size"].possiblyEvaluate(new Pn(v))]}u.layoutTextSize=c["text-size"].possiblyEvaluate(new Pn(t.zoom+1)),u.layoutIconSize=c["icon-size"].possiblyEvaluate(new Pn(t.zoom+1)),u.textMaxSize=c["text-size"].possiblyEvaluate(new Pn(18));for(var m=l.get("text-line-height")*ls,y="map"===l.get("text-rotation-alignment")&&"point"!==l.get("symbol-placement"),x=l.get("text-keep-upright"),b=function(){var o=k[_],s=l.get("text-font").evaluate(o,{}).join(","),c=r,h={horizontal:{},vertical:void 0},f=o.text,p=[0,0];if(f){var d=f.toString(),g=l.get("text-letter-spacing").evaluate(o,{})*ls,v=function(t){for(var e=0,r=d;e<r.length;e+=1)if(!_n(r[e].charCodeAt(0)))return!1;return!0}()?g:0,b=l.get("text-anchor").evaluate(o,{}),T=l.get("text-variable-anchor"),M=l.get("text-radial-offset").evaluate(o,{});T||(p=M?fc(b,M*ls):l.get("text-offset").evaluate(o,{}).map(function(t){return t*ls}));var A=y?"center":l.get("text-justify").evaluate(o,{}),S="point"===l.get("symbol-placement")?l.get("text-max-width").evaluate(o,{})*ls:0,E=function(){t.allowVerticalPlacement&&bn(d)&&(h.vertical=hs(f,e,s,S,m,b,"left",v,p,cs.vertical,!0))};if(!y&&T){for(var L="auto"===A?T.map(function(t){return pc(t)}):[A],C=!1,P=0;P<L.length;P++){var O=L[P];if(!h.horizontal[O])if(C)h.horizontal[O]=h.horizontal[0];else{var z=hs(f,e,s,S,m,"center",O,v,p,cs.horizontal,!1);z&&(h.horizontal[O]=z,C=1===z.lineCount)}}E()}else{"auto"===A&&(A=pc(b));var I=hs(f,e,s,S,m,b,A,v,p,cs.horizontal,!1);I&&(h.horizontal[A]=I),E(),bn(d)&&y&&x&&(h.vertical=hs(f,e,s,S,m,b,A,v,p,cs.vertical,!1))}}var D=void 0;if(o.icon){var R=n[o.icon];R&&(D=function(t,e,r){var n=ys(r),a=n.horizontalAlign,i=n.verticalAlign,o=e[0],s=e[1],l=o-t.displaySize[0]*a,c=l+t.displaySize[0],u=s-t.displaySize[1]*i;return{image:t,top:u,bottom:u+t.displaySize[1],left:l,right:c}}(i[o.icon],l.get("icon-offset").evaluate(o,{}),l.get("icon-anchor").evaluate(o,{})),void 0===t.sdfIcons?t.sdfIcons=R.sdf:t.sdfIcons!==R.sdf&&w("Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer"),R.pixelRatio!==t.pixelRatio?t.iconsNeedLinear=!0:0!==l.get("icon-rotate").constantOr(1)&&(t.iconsNeedLinear=!0))}(Object.keys(h.horizontal).length||D)&&function(t,e,r,n,i,o,s){var l=o.layoutTextSize.evaluate(e,{}),c=o.layoutIconSize.evaluate(e,{}),u=o.textMaxSize.evaluate(e,{});void 0===u&&(u=l);var h=t.layers[0].layout,f=h.get("icon-offset").evaluate(e,{}),p=vc(r.horizontal),d=l/24,g=t.tilePixelRatio*d,v=t.tilePixelRatio*u/24,m=t.tilePixelRatio*c,y=t.tilePixelRatio*h.get("symbol-spacing"),x=h.get("text-padding")*t.tilePixelRatio,b=h.get("icon-padding")*t.tilePixelRatio,_=h.get("text-max-angle")/180*Math.PI,k="map"===h.get("text-rotation-alignment")&&"point"!==h.get("symbol-placement"),T="map"===h.get("icon-rotation-alignment")&&"point"!==h.get("symbol-placement"),M=h.get("symbol-placement"),A=y/2,S=function(l,c){c.x<0||c.x>=ei||c.y<0||c.y>=ei||function(t,e,r,n,i,o,s,l,c,u,h,f,p,d,g,v,m,y,x,b,_){var k,T,M,A=t.addToLineVertexArray(e,r),S=0,E=0,L=0,C={},P=lc(""),O=(o.layout.get("text-radial-offset").evaluate(x,{})||0)*ls;if(t.allowVerticalPlacement&&n.vertical){var z=o.layout.get("text-rotate").evaluate(x,{})+90,I=n.vertical;M=new tc(s,r,e,l,c,u,I,h,f,p,t.overscaling,z)}for(var D in n.horizontal){var R=n.horizontal[D];if(!k){P=lc(R.text);var F=o.layout.get("text-rotate").evaluate(x,{});k=new tc(s,r,e,l,c,u,R,h,f,p,t.overscaling,F)}var B=1===R.lineCount;if(E+=gc(t,e,R,o,p,x,d,A,n.vertical?cs.horizontal:cs.horizontalOnly,B?Object.keys(n.horizontal):[D],C,b,_),B)break}n.vertical&&(L+=gc(t,e,n.vertical,o,p,x,d,A,cs.vertical,["vertical"],C,b,_));var N=k?k.boxStartIndex:t.collisionBoxArray.length,j=k?k.boxEndIndex:t.collisionBoxArray.length,V=M?M.boxStartIndex:t.collisionBoxArray.length,U=M?M.boxEndIndex:t.collisionBoxArray.length;if(i){var q=function(t,e,r,n,i,o){var s,l,c,u,h=e.image,f=r.layout,p=e.top-1/h.pixelRatio,d=e.left-1/h.pixelRatio,g=e.bottom+1/h.pixelRatio,v=e.right+1/h.pixelRatio;if("none"!==f.get("icon-text-fit")&&i){var m=v-d,y=g-p,x=f.get("text-size").evaluate(o,{})/24,b=i.left*x,_=i.right*x,w=i.top*x,k=_-b,T=i.bottom*x-w,M=f.get("icon-text-fit-padding")[0],A=f.get("icon-text-fit-padding")[1],S=f.get("icon-text-fit-padding")[2],E=f.get("icon-text-fit-padding")[3],L="width"===f.get("icon-text-fit")?.5*(T-y):0,C="height"===f.get("icon-text-fit")?.5*(k-m):0,P="width"===f.get("icon-text-fit")||"both"===f.get("icon-text-fit")?k:m,O="height"===f.get("icon-text-fit")||"both"===f.get("icon-text-fit")?T:y;s=new a(b+C-E,w+L-M),l=new a(b+C+A+P,w+L-M),c=new a(b+C+A+P,w+L+S+O),u=new a(b+C-E,w+L+S+O)}else s=new a(d,p),l=new a(v,p),c=new a(v,g),u=new a(d,g);var z=r.layout.get("icon-rotate").evaluate(o,{})*Math.PI/180;if(z){var I=Math.sin(z),D=Math.cos(z),R=[D,-I,I,D];s._matMult(R),l._matMult(R),u._matMult(R),c._matMult(R)}return[{tl:s,tr:l,bl:u,br:c,tex:h.paddedRect,writingMode:void 0,glyphOffset:[0,0],sectionIndex:0}]}(0,i,o,0,vc(n.horizontal),x),H=o.layout.get("icon-rotate").evaluate(x,{});T=new tc(s,r,e,l,c,u,i,g,v,!1,t.overscaling,H),S=4*q.length;var G=t.iconSizeData,Y=null;"source"===G.kind?(Y=[_s*o.layout.get("icon-size").evaluate(x,{})])[0]>dc&&w(t.layerIds[0]+': Value for "icon-size" is >= 256. Reduce your "icon-size".'):"composite"===G.kind&&((Y=[_s*_.compositeIconSizes[0].evaluate(x,{}),_s*_.compositeIconSizes[1].evaluate(x,{})])[0]>dc||Y[1]>dc)&&w(t.layerIds[0]+': Value for "icon-size" is >= 256. Reduce your "icon-size".'),t.addSymbols(t.icon,q,Y,y,m,x,!1,e,A.lineStartIndex,A.lineLength)}var W=T?T.boxStartIndex:t.collisionBoxArray.length,X=T?T.boxEndIndex:t.collisionBoxArray.length;t.glyphOffsetArray.length>=Os.MAX_GLYPHS&&w("Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907"),t.symbolInstances.emplaceBack(e.x,e.y,C.right>=0?C.right:-1,C.center>=0?C.center:-1,C.left>=0?C.left:-1,C.vertical||-1,P,N,j,V,U,W,X,l,E,L,S,0,h,O)}(t,c,l,r,n,t.layers[0],t.collisionBoxArray,e.index,e.sourceLayerIndex,t.index,g,x,k,s,m,b,T,f,e,i,o)};if("line"===M)for(var E=0,L=function(t,e,r,n,i){for(var o=[],s=0;s<t.length;s++)for(var l=t[s],c=void 0,u=0;u<l.length-1;u++){var h=l[u],f=l[u+1];h.x<0&&f.x<0||(h.x<0?h=new a(0,h.y+(f.y-h.y)*((0-h.x)/(f.x-h.x)))._round():f.x<0&&(f=new a(0,h.y+(f.y-h.y)*((0-h.x)/(f.x-h.x)))._round()),h.y<0&&f.y<0||(h.y<0?h=new a(h.x+(f.x-h.x)*((0-h.y)/(f.y-h.y)),0)._round():f.y<0&&(f=new a(h.x+(f.x-h.x)*((0-h.y)/(f.y-h.y)),0)._round()),h.x>=n&&f.x>=n||(h.x>=n?h=new a(n,h.y+(f.y-h.y)*((n-h.x)/(f.x-h.x)))._round():f.x>=n&&(f=new a(n,h.y+(f.y-h.y)*((n-h.x)/(f.x-h.x)))._round()),h.y>=i&&f.y>=i||(h.y>=i?h=new a(h.x+(f.x-h.x)*((i-h.y)/(f.y-h.y)),i)._round():f.y>=i&&(f=new a(h.x+(f.x-h.x)*((i-h.y)/(f.y-h.y)),i)._round()),c&&h.equals(c[c.length-1])||(c=[h],o.push(c)),c.push(f)))))}return o}(e.geometry,0,0,ei,ei);E<L.length;E+=1)for(var C=L[E],P=0,O=$l(C,y,_,r.vertical||p,n,24,v,t.overscaling,ei);P<O.length;P+=1){var z=O[P];p&&mc(t,p.text,A,z)||S(C,z)}else if("line-center"===M)for(var I=0,D=e.geometry;I<D.length;I+=1){var R=D[I];if(R.length>1){var F=Ql(R,_,r.vertical||p,n,24,v);F&&S(R,F)}}else if("Polygon"===e.type)for(var B=0,N=mo(e.geometry,0);B<N.length;B+=1){var j=N[B],V=nc(j,16);S(j[0],new bs(V.x,V.y,0))}else if("LineString"===e.type)for(var U=0,q=e.geometry;U<q.length;U+=1){var H=q[U];S(H,new bs(H[0].x,H[0].y,0))}else if("Point"===e.type)for(var G=0,Y=e.geometry;G<Y.length;G+=1)for(var W=0,X=Y[G];W<X.length;W+=1){var Z=X[W];S([Z],new bs(Z.x,Z.y,0))}}(t,o,h,D,c,u,p)},_=0,k=t.features;_<k.length;_+=1)b();o&&t.generateCollisionDebugBuffers()},t.perspective=function(t,e,r,n,a){var i,o=1/Math.tan(e/2);return t[0]=o/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=o,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[11]=-1,t[12]=0,t[13]=0,t[15]=0,null!=a&&a!==1/0?(i=1/(n-a),t[10]=(a+n)*i,t[14]=2*a*n*i):(t[10]=-1,t[14]=-2*n),t},t.pick=function(t,e){for(var r={},n=0;n<e.length;n++){var a=e[n];a in t&&(r[a]=t[a])}return r},t.plugin=Cn,t.polygonIntersectsPolygon=oi,t.postMapLoadEvent=et,t.postTurnstileEvent=$,t.potpack=qs,t.rasterBoundsAttributes=Nl,t.refProperties=["type","source","source-layer","minzoom","maxzoom","filter","layout"],t.register=dn,t.registerForPluginAvailability=function(t){return Sn?t({pluginURL:Sn,completionCallback:Mn}):Ln.once("pluginAvailable",t),t},t.rotate=function(t,e,r){var n=e[0],a=e[1],i=e[2],o=e[3],s=Math.sin(r),l=Math.cos(r);return t[0]=n*l+i*s,t[1]=a*l+o*s,t[2]=n*-s+i*l,t[3]=a*-s+o*l,t},t.rotateX=function(t,e,r){var n=Math.sin(r),a=Math.cos(r),i=e[4],o=e[5],s=e[6],l=e[7],c=e[8],u=e[9],h=e[10],f=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=i*a+c*n,t[5]=o*a+u*n,t[6]=s*a+h*n,t[7]=l*a+f*n,t[8]=c*a-i*n,t[9]=u*a-o*n,t[10]=h*a-s*n,t[11]=f*a-l*n,t},t.rotateZ=function(t,e,r){var n=Math.sin(r),a=Math.cos(r),i=e[0],o=e[1],s=e[2],l=e[3],c=e[4],u=e[5],h=e[6],f=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=i*a+c*n,t[1]=o*a+u*n,t[2]=s*a+h*n,t[3]=l*a+f*n,t[4]=c*a-i*n,t[5]=u*a-o*n,t[6]=h*a-s*n,t[7]=f*a-l*n,t},t.scale=function(t,e,r){var n=r[0],a=r[1],i=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*a,t[5]=e[5]*a,t[6]=e[6]*a,t[7]=e[7]*a,t[8]=e[8]*i,t[9]=e[9]*i,t[10]=e[10]*i,t[11]=e[11]*i,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},t.setCacheLimits=function(t,e){nt=t,at=e},t.setRTLTextPlugin=function(t,e){if(An)throw new Error("setRTLTextPlugin cannot be called multiple times.");An=!0,Sn=I.resolveURL(t),Mn=function(t){t?(An=!1,Sn=null,e&&e(t)):En=!0},Ln.fire(new _t("pluginAvailable",{pluginURL:Sn,completionCallback:Mn}))},t.sphericalToCartesian=function(t){var e=t[0],r=t[1],n=t[2];return r+=90,r*=Math.PI/180,n*=Math.PI/180,{x:e*Math.cos(r)*Math.sin(n),y:e*Math.sin(r)*Math.sin(n),z:e*Math.cos(n)}},t.styleSpec=Tt,t.symbolSize=Ms,t.transformMat3=function(t,e,r){var n=e[0],a=e[1],i=e[2];return t[0]=n*r[0]+a*r[3]+i*r[6],t[1]=n*r[1]+a*r[4]+i*r[7],t[2]=n*r[2]+a*r[5]+i*r[8],t},t.transformMat4=Ti,t.translate=function(t,e,r){var n,a,i,o,s,l,c,u,h,f,p,d,g=r[0],v=r[1],m=r[2];return e===t?(t[12]=e[0]*g+e[4]*v+e[8]*m+e[12],t[13]=e[1]*g+e[5]*v+e[9]*m+e[13],t[14]=e[2]*g+e[6]*v+e[10]*m+e[14],t[15]=e[3]*g+e[7]*v+e[11]*m+e[15]):(n=e[0],a=e[1],i=e[2],o=e[3],s=e[4],l=e[5],c=e[6],u=e[7],h=e[8],f=e[9],p=e[10],d=e[11],t[0]=n,t[1]=a,t[2]=i,t[3]=o,t[4]=s,t[5]=l,t[6]=c,t[7]=u,t[8]=h,t[9]=f,t[10]=p,t[11]=d,t[12]=n*g+s*v+h*m+e[12],t[13]=a*g+l*v+f*m+e[13],t[14]=i*g+c*v+p*m+e[14],t[15]=o*g+u*v+d*m+e[15]),t},t.uniqueId=p,t.validateCustomStyleLayer=function(t){var e=[],r=t.id;return void 0===r&&e.push({message:"layers."+r+': missing required property "id"'}),void 0===t.render&&e.push({message:"layers."+r+': missing required method "render"'}),t.renderingMode&&"2d"!==t.renderingMode&&"3d"!==t.renderingMode&&e.push({message:"layers."+r+': property "renderingMode" must be either "2d" or "3d"'}),e},t.validateLight=an,t.validateStyle=nn,t.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},t.vectorTile=Io,t.version="1.3.2",t.warnOnce=w,t.webpSupported=R,t.window=self,t.wrap=u}),n(0,function(t){function e(t){var r=typeof t;if("number"===r||"boolean"===r||"string"===r||null==t)return JSON.stringify(t);if(Array.isArray(t)){for(var n="[",a=0,i=t;a<i.length;a+=1)n+=e(i[a])+",";return n+"]"}for(var o=Object.keys(t).sort(),s="{",l=0;l<o.length;l++)s+=JSON.stringify(o[l])+":"+e(t[o[l]])+",";return s+"}"}function r(r){for(var n="",a=0,i=t.refProperties;a<i.length;a+=1)n+="/"+e(r[i[a]]);return n}var n=function(t){this.keyCache={},t&&this.replace(t)};n.prototype.replace=function(t){this._layerConfigs={},this._layers={},this.update(t,[])},n.prototype.update=function(e,n){for(var a=this,i=0,o=e;i<o.length;i+=1){var s=o[i];this._layerConfigs[s.id]=s;var l=this._layers[s.id]=t.createStyleLayer(s);l._featureFilter=t.featureFilter(l.filter),this.keyCache[s.id]&&delete this.keyCache[s.id]}for(var c=0,u=n;c<u.length;c+=1){var h=u[c];delete this.keyCache[h],delete this._layerConfigs[h],delete this._layers[h]}this.familiesBySource={};for(var f=0,p=function(t,e){for(var n={},a=0;a<t.length;a++){var i=e&&e[t[a].id]||r(t[a]);e&&(e[t[a].id]=i);var o=n[i];o||(o=n[i]=[]),o.push(t[a])}var s=[];for(var l in n)s.push(n[l]);return s}(t.values(this._layerConfigs),this.keyCache);f<p.length;f+=1){var d=p[f].map(function(t){return a._layers[t.id]}),g=d[0];if("none"!==g.visibility){var v=g.source||"",m=this.familiesBySource[v];m||(m=this.familiesBySource[v]={});var y=g.sourceLayer||"_geojsonTileLayer",x=m[y];x||(x=m[y]=[]),x.push(d)}}};var a=function(e){var r={},n=[];for(var a in e){var i=e[a],o=r[a]={};for(var s in i){var l=i[+s];if(l&&0!==l.bitmap.width&&0!==l.bitmap.height){var c={x:0,y:0,w:l.bitmap.width+2,h:l.bitmap.height+2};n.push(c),o[s]={rect:c,metrics:l.metrics}}}}var u=t.potpack(n),h=u.w,f=u.h,p=new t.AlphaImage({width:h||1,height:f||1});for(var d in e){var g=e[d];for(var v in g){var m=g[+v];if(m&&0!==m.bitmap.width&&0!==m.bitmap.height){var y=r[d][v].rect;t.AlphaImage.copy(m.bitmap,p,{x:0,y:0},{x:y.x+1,y:y.y+1},m.bitmap)}}}this.image=p,this.positions=r};t.register("GlyphAtlas",a);var i=function(e){this.tileID=new t.OverscaledTileID(e.tileID.overscaledZ,e.tileID.wrap,e.tileID.canonical.z,e.tileID.canonical.x,e.tileID.canonical.y),this.uid=e.uid,this.zoom=e.zoom,this.pixelRatio=e.pixelRatio,this.tileSize=e.tileSize,this.source=e.source,this.overscaling=this.tileID.overscaleFactor(),this.showCollisionBoxes=e.showCollisionBoxes,this.collectResourceTiming=!!e.collectResourceTiming,this.returnDependencies=!!e.returnDependencies};function o(e,r){for(var n=new t.EvaluationParameters(r),a=0,i=e;a<i.length;a+=1)i[a].recalculate(n)}i.prototype.parse=function(e,r,n,i){var s=this;this.status="parsing",this.data=e,this.collisionBoxArray=new t.CollisionBoxArray;var l=new t.DictionaryCoder(Object.keys(e.layers).sort()),c=new t.FeatureIndex(this.tileID);c.bucketLayerIDs=[];var u,h,f,p,d={},g={featureIndex:c,iconDependencies:{},patternDependencies:{},glyphDependencies:{}},v=r.familiesBySource[this.source];for(var m in v){var y=e.layers[m];if(y){1===y.version&&t.warnOnce('Vector tile source "'+this.source+'" layer "'+m+'" does not use vector tile spec v2 and therefore may have some rendering errors.');for(var x=l.encode(m),b=[],_=0;_<y.length;_++){var w=y.feature(_);b.push({feature:w,index:_,sourceLayerIndex:x})}for(var k=0,T=v[m];k<T.length;k+=1){var M=T[k],A=M[0];A.minzoom&&this.zoom<Math.floor(A.minzoom)||A.maxzoom&&this.zoom>=A.maxzoom||"none"!==A.visibility&&(o(M,this.zoom),(d[A.id]=A.createBucket({index:c.bucketLayerIDs.length,layers:M,zoom:this.zoom,pixelRatio:this.pixelRatio,overscaling:this.overscaling,collisionBoxArray:this.collisionBoxArray,sourceLayerIndex:x,sourceID:this.source})).populate(b,g),c.bucketLayerIDs.push(M.map(function(t){return t.id})))}}}var S=t.mapObject(g.glyphDependencies,function(t){return Object.keys(t).map(Number)});Object.keys(S).length?n.send("getGlyphs",{uid:this.uid,stacks:S},function(t,e){u||(u=t,h=e,C.call(s))}):h={};var E=Object.keys(g.iconDependencies);E.length?n.send("getImages",{icons:E},function(t,e){u||(u=t,f=e,C.call(s))}):f={};var L=Object.keys(g.patternDependencies);function C(){if(u)return i(u);if(h&&f&&p){var e=new a(h),r=new t.ImageAtlas(f,p);for(var n in d){var s=d[n];s instanceof t.SymbolBucket?(o(s.layers,this.zoom),t.performSymbolLayout(s,h,e.positions,f,r.iconPositions,this.showCollisionBoxes)):s.hasPattern&&(s instanceof t.LineBucket||s instanceof t.FillBucket||s instanceof t.FillExtrusionBucket)&&(o(s.layers,this.zoom),s.addFeatures(g,r.patternPositions))}this.status="done",i(null,{buckets:t.values(d).filter(function(t){return!t.isEmpty()}),featureIndex:c,collisionBoxArray:this.collisionBoxArray,glyphAtlasImage:e.image,imageAtlas:r,glyphMap:this.returnDependencies?h:null,iconMap:this.returnDependencies?f:null,glyphPositions:this.returnDependencies?e.positions:null})}}L.length?n.send("getImages",{icons:L},function(t,e){u||(u=t,p=e,C.call(s))}):p={},C.call(this)};var s="undefined"!=typeof performance,l={getEntriesByName:function(t){return!!(s&&performance&&performance.getEntriesByName)&&performance.getEntriesByName(t)},mark:function(t){return!!(s&&performance&&performance.mark)&&performance.mark(t)},measure:function(t,e,r){return!!(s&&performance&&performance.measure)&&performance.measure(t,e,r)},clearMarks:function(t){return!!(s&&performance&&performance.clearMarks)&&performance.clearMarks(t)},clearMeasures:function(t){return!!(s&&performance&&performance.clearMeasures)&&performance.clearMeasures(t)}},c=function(t){this._marks={start:[t.url,"start"].join("#"),end:[t.url,"end"].join("#"),measure:t.url.toString()},l.mark(this._marks.start)};function u(e,r){var n=t.getArrayBuffer(e.request,function(e,n,a,i){e?r(e):n&&r(null,{vectorTile:new t.vectorTile.VectorTile(new t.pbf(n)),rawData:n,cacheControl:a,expires:i})});return function(){n.cancel(),r()}}c.prototype.finish=function(){l.mark(this._marks.end);var t=l.getEntriesByName(this._marks.measure);return 0===t.length&&(l.measure(this._marks.measure,this._marks.start,this._marks.end),t=l.getEntriesByName(this._marks.measure),l.clearMarks(this._marks.start),l.clearMarks(this._marks.end),l.clearMeasures(this._marks.measure)),t},l.Performance=c;var h=function(t,e,r){this.actor=t,this.layerIndex=e,this.loadVectorData=r||u,this.loading={},this.loaded={}};h.prototype.loadTile=function(e,r){var n=this,a=e.uid;this.loading||(this.loading={});var o=!!(e&&e.request&&e.request.collectResourceTiming)&&new l.Performance(e.request),s=this.loading[a]=new i(e);s.abort=this.loadVectorData(e,function(e,i){if(delete n.loading[a],e||!i)return s.status="done",n.loaded[a]=s,r(e);var l=i.rawData,c={};i.expires&&(c.expires=i.expires),i.cacheControl&&(c.cacheControl=i.cacheControl);var u={};if(o){var h=o.finish();h&&(u.resourceTiming=JSON.parse(JSON.stringify(h)))}s.vectorTile=i.vectorTile,s.parse(i.vectorTile,n.layerIndex,n.actor,function(e,n){if(e||!n)return r(e);r(null,t.extend({rawTileData:l.slice(0)},n,c,u))}),n.loaded=n.loaded||{},n.loaded[a]=s})},h.prototype.reloadTile=function(t,e){var r=this.loaded,n=t.uid,a=this;if(r&&r[n]){var i=r[n];i.showCollisionBoxes=t.showCollisionBoxes;var o=function(t,r){var n=i.reloadCallback;n&&(delete i.reloadCallback,i.parse(i.vectorTile,a.layerIndex,a.actor,n)),e(t,r)};"parsing"===i.status?i.reloadCallback=o:"done"===i.status&&(i.vectorTile?i.parse(i.vectorTile,this.layerIndex,this.actor,o):o())}},h.prototype.abortTile=function(t,e){var r=this.loading,n=t.uid;r&&r[n]&&r[n].abort&&(r[n].abort(),delete r[n]),e()},h.prototype.removeTile=function(t,e){var r=this.loaded,n=t.uid;r&&r[n]&&delete r[n],e()};var f=function(){this.loaded={}};f.prototype.loadTile=function(e,r){var n=e.uid,a=e.encoding,i=e.rawImageData,o=new t.DEMData(n,i,a);this.loaded=this.loaded||{},this.loaded[n]=o,r(null,o)},f.prototype.removeTile=function(t){var e=this.loaded,r=t.uid;e&&e[r]&&delete e[r]};var p={RADIUS:6378137,FLATTENING:1/298.257223563,POLAR_RADIUS:6356752.3142};function d(t){var e=0;if(t&&t.length>0){e+=Math.abs(g(t[0]));for(var r=1;r<t.length;r++)e-=Math.abs(g(t[r]))}return e}function g(t){var e,r,n,a,i,o,s=0,l=t.length;if(l>2){for(o=0;o<l;o++)o===l-2?(n=l-2,a=l-1,i=0):o===l-1?(n=l-1,a=0,i=1):(n=o,a=o+1,i=o+2),e=t[n],r=t[a],s+=(v(t[i][0])-v(e[0]))*Math.sin(v(r[1]));s=s*p.RADIUS*p.RADIUS/2}return s}function v(t){return t*Math.PI/180}var m={geometry:function t(e){var r,n=0;switch(e.type){case"Polygon":return d(e.coordinates);case"MultiPolygon":for(r=0;r<e.coordinates.length;r++)n+=d(e.coordinates[r]);return n;case"Point":case"MultiPoint":case"LineString":case"MultiLineString":return 0;case"GeometryCollection":for(r=0;r<e.geometries.length;r++)n+=t(e.geometries[r]);return n}},ring:g};function y(t,e){return function(r){return t(r,e)}}function x(t,e){e=!!e,t[0]=b(t[0],e);for(var r=1;r<t.length;r++)t[r]=b(t[r],!e);return t}function b(t,e){return function(t){return m.ring(t)>=0}(t)===e?t:t.reverse()}var _=t.vectorTile.VectorTileFeature.prototype.toGeoJSON,w=function(e){this._feature=e,this.extent=t.EXTENT,this.type=e.type,this.properties=e.tags,"id"in e&&!isNaN(e.id)&&(this.id=parseInt(e.id,10))};w.prototype.loadGeometry=function(){if(1===this._feature.type){for(var e=[],r=0,n=this._feature.geometry;r<n.length;r+=1){var a=n[r];e.push([new t.Point$1(a[0],a[1])])}return e}for(var i=[],o=0,s=this._feature.geometry;o<s.length;o+=1){for(var l=[],c=0,u=s[o];c<u.length;c+=1){var h=u[c];l.push(new t.Point$1(h[0],h[1]))}i.push(l)}return i},w.prototype.toGeoJSON=function(t,e,r){return _.call(this,t,e,r)};var k=function(e){this.layers={_geojsonTileLayer:this},this.name="_geojsonTileLayer",this.extent=t.EXTENT,this.length=e.length,this._features=e};k.prototype.feature=function(t){return new w(this._features[t])};var T=t.vectorTile.VectorTileFeature,M=A;function A(t,e){this.options=e||{},this.features=t,this.length=t.length}function S(t,e){this.id="number"==typeof t.id?t.id:void 0,this.type=t.type,this.rawGeometry=1===t.type?[t.geometry]:t.geometry,this.properties=t.tags,this.extent=e||4096}A.prototype.feature=function(t){return new S(this.features[t],this.options.extent)},S.prototype.loadGeometry=function(){var e=this.rawGeometry;this.geometry=[];for(var r=0;r<e.length;r++){for(var n=e[r],a=[],i=0;i<n.length;i++)a.push(new t.Point$1(n[i][0],n[i][1]));this.geometry.push(a)}return this.geometry},S.prototype.bbox=function(){this.geometry||this.loadGeometry();for(var t=this.geometry,e=1/0,r=-1/0,n=1/0,a=-1/0,i=0;i<t.length;i++)for(var o=t[i],s=0;s<o.length;s++){var l=o[s];e=Math.min(e,l.x),r=Math.max(r,l.x),n=Math.min(n,l.y),a=Math.max(a,l.y)}return[e,n,r,a]},S.prototype.toGeoJSON=T.prototype.toGeoJSON;var E=P,L=P,C=M;function P(e){var r=new t.pbf;return function(t,e){for(var r in t.layers)e.writeMessage(3,O,t.layers[r])}(e,r),r.finish()}function O(t,e){var r;e.writeVarintField(15,t.version||1),e.writeStringField(1,t.name||""),e.writeVarintField(5,t.extent||4096);var n={keys:[],values:[],keycache:{},valuecache:{}};for(r=0;r<t.length;r++)n.feature=t.feature(r),e.writeMessage(2,z,n);var a=n.keys;for(r=0;r<a.length;r++)e.writeStringField(3,a[r]);var i=n.values;for(r=0;r<i.length;r++)e.writeMessage(4,B,i[r])}function z(t,e){var r=t.feature;void 0!==r.id&&e.writeVarintField(1,r.id),e.writeMessage(2,I,t),e.writeVarintField(3,r.type),e.writeMessage(4,F,r)}function I(t,e){var r=t.feature,n=t.keys,a=t.values,i=t.keycache,o=t.valuecache;for(var s in r.properties){var l=i[s];void 0===l&&(n.push(s),l=n.length-1,i[s]=l),e.writeVarint(l);var c=r.properties[s],u=typeof c;"string"!==u&&"boolean"!==u&&"number"!==u&&(c=JSON.stringify(c));var h=u+":"+c,f=o[h];void 0===f&&(a.push(c),f=a.length-1,o[h]=f),e.writeVarint(f)}}function D(t,e){return(e<<3)+(7&t)}function R(t){return t<<1^t>>31}function F(t,e){for(var r=t.loadGeometry(),n=t.type,a=0,i=0,o=r.length,s=0;s<o;s++){var l=r[s],c=1;1===n&&(c=l.length),e.writeVarint(D(1,c));for(var u=3===n?l.length-1:l.length,h=0;h<u;h++){1===h&&1!==n&&e.writeVarint(D(2,u-1));var f=l[h].x-a,p=l[h].y-i;e.writeVarint(R(f)),e.writeVarint(R(p)),a+=f,i+=p}3===n&&e.writeVarint(D(7,1))}}function B(t,e){var r=typeof t;"string"===r?e.writeStringField(1,t):"boolean"===r?e.writeBooleanField(7,t):"number"===r&&(t%1!=0?e.writeDoubleField(3,t):t<0?e.writeSVarintField(6,t):e.writeVarintField(5,t))}function N(t,e,r,n){j(t,r,n),j(e,2*r,2*n),j(e,2*r+1,2*n+1)}function j(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function V(t,e,r,n){var a=t-r,i=e-n;return a*a+i*i}E.fromVectorTileJs=L,E.fromGeojsonVt=function(t,e){e=e||{};var r={};for(var n in t)r[n]=new M(t[n].features,e),r[n].name=n,r[n].version=e.version,r[n].extent=e.extent;return P({layers:r})},E.GeoJSONWrapper=C;var U=function(t){return t[0]},q=function(t){return t[1]},H=function(t,e,r,n,a){void 0===e&&(e=U),void 0===r&&(r=q),void 0===n&&(n=64),void 0===a&&(a=Float64Array),this.nodeSize=n,this.points=t;for(var i=t.length<65536?Uint16Array:Uint32Array,o=this.ids=new i(t.length),s=this.coords=new a(2*t.length),l=0;l<t.length;l++)o[l]=l,s[2*l]=e(t[l]),s[2*l+1]=r(t[l]);!function t(e,r,n,a,i,o){if(!(i-a<=n)){var s=a+i>>1;!function t(e,r,n,a,i,o){for(;i>a;){if(i-a>600){var s=i-a+1,l=n-a+1,c=Math.log(s),u=.5*Math.exp(2*c/3),h=.5*Math.sqrt(c*u*(s-u)/s)*(l-s/2<0?-1:1);t(e,r,n,Math.max(a,Math.floor(n-l*u/s+h)),Math.min(i,Math.floor(n+(s-l)*u/s+h)),o)}var f=r[2*n+o],p=a,d=i;for(N(e,r,a,n),r[2*i+o]>f&&N(e,r,a,i);p<d;){for(N(e,r,p,d),p++,d--;r[2*p+o]<f;)p++;for(;r[2*d+o]>f;)d--}r[2*a+o]===f?N(e,r,a,d):N(e,r,++d,i),d<=n&&(a=d+1),n<=d&&(i=d-1)}}(e,r,s,a,i,o%2),t(e,r,n,a,s-1,o+1),t(e,r,n,s+1,i,o+1)}}(o,s,n,0,o.length-1,0)};H.prototype.range=function(t,e,r,n){return function(t,e,r,n,a,i,o){for(var s,l,c=[0,t.length-1,0],u=[];c.length;){var h=c.pop(),f=c.pop(),p=c.pop();if(f-p<=o)for(var d=p;d<=f;d++)s=e[2*d],l=e[2*d+1],s>=r&&s<=a&&l>=n&&l<=i&&u.push(t[d]);else{var g=Math.floor((p+f)/2);s=e[2*g],l=e[2*g+1],s>=r&&s<=a&&l>=n&&l<=i&&u.push(t[g]);var v=(h+1)%2;(0===h?r<=s:n<=l)&&(c.push(p),c.push(g-1),c.push(v)),(0===h?a>=s:i>=l)&&(c.push(g+1),c.push(f),c.push(v))}}return u}(this.ids,this.coords,t,e,r,n,this.nodeSize)},H.prototype.within=function(t,e,r){return function(t,e,r,n,a,i){for(var o=[0,t.length-1,0],s=[],l=a*a;o.length;){var c=o.pop(),u=o.pop(),h=o.pop();if(u-h<=i)for(var f=h;f<=u;f++)V(e[2*f],e[2*f+1],r,n)<=l&&s.push(t[f]);else{var p=Math.floor((h+u)/2),d=e[2*p],g=e[2*p+1];V(d,g,r,n)<=l&&s.push(t[p]);var v=(c+1)%2;(0===c?r-a<=d:n-a<=g)&&(o.push(h),o.push(p-1),o.push(v)),(0===c?r+a>=d:n+a>=g)&&(o.push(p+1),o.push(u),o.push(v))}}return s}(this.ids,this.coords,t,e,r,this.nodeSize)};var G={minZoom:0,maxZoom:16,radius:40,extent:512,nodeSize:64,log:!1,reduce:null,map:function(t){return t}},Y=function(t){this.options=$(Object.create(G),t),this.trees=new Array(this.options.maxZoom+1)};function W(t,e,r,n,a){return{x:t,y:e,zoom:1/0,id:r,parentId:-1,numPoints:n,properties:a}}function X(t,e){var r=t.geometry.coordinates,n=r[0],a=r[1];return{x:K(n),y:Q(a),zoom:1/0,index:e,parentId:-1}}function Z(t){return{type:"Feature",id:t.id,properties:J(t),geometry:{type:"Point",coordinates:[(n=t.x,360*(n-.5)),(e=t.y,r=(180-360*e)*Math.PI/180,360*Math.atan(Math.exp(r))/Math.PI-90)]}};var e,r,n}function J(t){var e=t.numPoints,r=e>=1e4?Math.round(e/1e3)+"k":e>=1e3?Math.round(e/100)/10+"k":e;return $($({},t.properties),{cluster:!0,cluster_id:t.id,point_count:e,point_count_abbreviated:r})}function K(t){return t/360+.5}function Q(t){var e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function $(t,e){for(var r in e)t[r]=e[r];return t}function tt(t){return t.x}function et(t){return t.y}function rt(t,e,r,n,a,i){var o=a-r,s=i-n;if(0!==o||0!==s){var l=((t-r)*o+(e-n)*s)/(o*o+s*s);l>1?(r=a,n=i):l>0&&(r+=o*l,n+=s*l)}return(o=t-r)*o+(s=e-n)*s}function nt(t,e,r,n){var a={id:void 0===t?null:t,type:e,geometry:r,tags:n,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};return function(t){var e=t.geometry,r=t.type;if("Point"===r||"MultiPoint"===r||"LineString"===r)at(t,e);else if("Polygon"===r||"MultiLineString"===r)for(var n=0;n<e.length;n++)at(t,e[n]);else if("MultiPolygon"===r)for(n=0;n<e.length;n++)for(var a=0;a<e[n].length;a++)at(t,e[n][a])}(a),a}function at(t,e){for(var r=0;r<e.length;r+=3)t.minX=Math.min(t.minX,e[r]),t.minY=Math.min(t.minY,e[r+1]),t.maxX=Math.max(t.maxX,e[r]),t.maxY=Math.max(t.maxY,e[r+1])}function it(t,e,r,n){if(e.geometry){var a=e.geometry.coordinates,i=e.geometry.type,o=Math.pow(r.tolerance/((1<<r.maxZoom)*r.extent),2),s=[],l=e.id;if(r.promoteId?l=e.properties[r.promoteId]:r.generateId&&(l=n||0),"Point"===i)ot(a,s);else if("MultiPoint"===i)for(var c=0;c<a.length;c++)ot(a[c],s);else if("LineString"===i)st(a,s,o,!1);else if("MultiLineString"===i){if(r.lineMetrics){for(c=0;c<a.length;c++)s=[],st(a[c],s,o,!1),t.push(nt(l,"LineString",s,e.properties));return}lt(a,s,o,!1)}else if("Polygon"===i)lt(a,s,o,!0);else{if("MultiPolygon"!==i){if("GeometryCollection"===i){for(c=0;c<e.geometry.geometries.length;c++)it(t,{id:l,geometry:e.geometry.geometries[c],properties:e.properties},r,n);return}throw new Error("Input data is not a valid GeoJSON object.")}for(c=0;c<a.length;c++){var u=[];lt(a[c],u,o,!0),s.push(u)}}t.push(nt(l,i,s,e.properties))}}function ot(t,e){e.push(ct(t[0])),e.push(ut(t[1])),e.push(0)}function st(t,e,r,n){for(var a,i,o=0,s=0;s<t.length;s++){var l=ct(t[s][0]),c=ut(t[s][1]);e.push(l),e.push(c),e.push(0),s>0&&(o+=n?(a*c-l*i)/2:Math.sqrt(Math.pow(l-a,2)+Math.pow(c-i,2))),a=l,i=c}var u=e.length-3;e[2]=1,function t(e,r,n,a){for(var i,o=a,s=n-r>>1,l=n-r,c=e[r],u=e[r+1],h=e[n],f=e[n+1],p=r+3;p<n;p+=3){var d=rt(e[p],e[p+1],c,u,h,f);if(d>o)i=p,o=d;else if(d===o){var g=Math.abs(p-s);g<l&&(i=p,l=g)}}o>a&&(i-r>3&&t(e,r,i,a),e[i+2]=o,n-i>3&&t(e,i,n,a))}(e,0,u,r),e[u+2]=1,e.size=Math.abs(o),e.start=0,e.end=e.size}function lt(t,e,r,n){for(var a=0;a<t.length;a++){var i=[];st(t[a],i,r,n),e.push(i)}}function ct(t){return t/360+.5}function ut(t){var e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function ht(t,e,r,n,a,i,o,s){if(n/=e,i>=(r/=e)&&o<n)return t;if(o<r||i>=n)return null;for(var l=[],c=0;c<t.length;c++){var u=t[c],h=u.geometry,f=u.type,p=0===a?u.minX:u.minY,d=0===a?u.maxX:u.maxY;if(p>=r&&d<n)l.push(u);else if(!(d<r||p>=n)){var g=[];if("Point"===f||"MultiPoint"===f)ft(h,g,r,n,a);else if("LineString"===f)pt(h,g,r,n,a,!1,s.lineMetrics);else if("MultiLineString"===f)gt(h,g,r,n,a,!1);else if("Polygon"===f)gt(h,g,r,n,a,!0);else if("MultiPolygon"===f)for(var v=0;v<h.length;v++){var m=[];gt(h[v],m,r,n,a,!0),m.length&&g.push(m)}if(g.length){if(s.lineMetrics&&"LineString"===f){for(v=0;v<g.length;v++)l.push(nt(u.id,f,g[v],u.tags));continue}"LineString"!==f&&"MultiLineString"!==f||(1===g.length?(f="LineString",g=g[0]):f="MultiLineString"),"Point"!==f&&"MultiPoint"!==f||(f=3===g.length?"Point":"MultiPoint"),l.push(nt(u.id,f,g,u.tags))}}}return l.length?l:null}function ft(t,e,r,n,a){for(var i=0;i<t.length;i+=3){var o=t[i+a];o>=r&&o<=n&&(e.push(t[i]),e.push(t[i+1]),e.push(t[i+2]))}}function pt(t,e,r,n,a,i,o){for(var s,l,c=dt(t),u=0===a?mt:yt,h=t.start,f=0;f<t.length-3;f+=3){var p=t[f],d=t[f+1],g=t[f+2],v=t[f+3],m=t[f+4],y=0===a?p:d,x=0===a?v:m,b=!1;o&&(s=Math.sqrt(Math.pow(p-v,2)+Math.pow(d-m,2))),y<r?x>r&&(l=u(c,p,d,v,m,r),o&&(c.start=h+s*l)):y>n?x<n&&(l=u(c,p,d,v,m,n),o&&(c.start=h+s*l)):vt(c,p,d,g),x<r&&y>=r&&(l=u(c,p,d,v,m,r),b=!0),x>n&&y<=n&&(l=u(c,p,d,v,m,n),b=!0),!i&&b&&(o&&(c.end=h+s*l),e.push(c),c=dt(t)),o&&(h+=s)}var _=t.length-3;p=t[_],d=t[_+1],g=t[_+2],(y=0===a?p:d)>=r&&y<=n&&vt(c,p,d,g),_=c.length-3,i&&_>=3&&(c[_]!==c[0]||c[_+1]!==c[1])&&vt(c,c[0],c[1],c[2]),c.length&&e.push(c)}function dt(t){var e=[];return e.size=t.size,e.start=t.start,e.end=t.end,e}function gt(t,e,r,n,a,i){for(var o=0;o<t.length;o++)pt(t[o],e,r,n,a,i,!1)}function vt(t,e,r,n){t.push(e),t.push(r),t.push(n)}function mt(t,e,r,n,a,i){var o=(i-e)/(n-e);return t.push(i),t.push(r+(a-r)*o),t.push(1),o}function yt(t,e,r,n,a,i){var o=(i-r)/(a-r);return t.push(e+(n-e)*o),t.push(i),t.push(1),o}function xt(t,e){for(var r=[],n=0;n<t.length;n++){var a,i=t[n],o=i.type;if("Point"===o||"MultiPoint"===o||"LineString"===o)a=bt(i.geometry,e);else if("MultiLineString"===o||"Polygon"===o){a=[];for(var s=0;s<i.geometry.length;s++)a.push(bt(i.geometry[s],e))}else if("MultiPolygon"===o)for(a=[],s=0;s<i.geometry.length;s++){for(var l=[],c=0;c<i.geometry[s].length;c++)l.push(bt(i.geometry[s][c],e));a.push(l)}r.push(nt(i.id,o,a,i.tags))}return r}function bt(t,e){var r=[];r.size=t.size,void 0!==t.start&&(r.start=t.start,r.end=t.end);for(var n=0;n<t.length;n+=3)r.push(t[n]+e,t[n+1],t[n+2]);return r}function _t(t,e){if(t.transformed)return t;var r,n,a,i=1<<t.z,o=t.x,s=t.y;for(r=0;r<t.features.length;r++){var l=t.features[r],c=l.geometry,u=l.type;if(l.geometry=[],1===u)for(n=0;n<c.length;n+=2)l.geometry.push(wt(c[n],c[n+1],e,i,o,s));else for(n=0;n<c.length;n++){var h=[];for(a=0;a<c[n].length;a+=2)h.push(wt(c[n][a],c[n][a+1],e,i,o,s));l.geometry.push(h)}}return t.transformed=!0,t}function wt(t,e,r,n,a,i){return[Math.round(r*(t*n-a)),Math.round(r*(e*n-i))]}function kt(t,e,r,n,a){for(var i=e===a.maxZoom?0:a.tolerance/((1<<e)*a.extent),o={features:[],numPoints:0,numSimplified:0,numFeatures:0,source:null,x:r,y:n,z:e,transformed:!1,minX:2,minY:1,maxX:-1,maxY:0},s=0;s<t.length;s++){o.numFeatures++,Tt(o,t[s],i,a);var l=t[s].minX,c=t[s].minY,u=t[s].maxX,h=t[s].maxY;l<o.minX&&(o.minX=l),c<o.minY&&(o.minY=c),u>o.maxX&&(o.maxX=u),h>o.maxY&&(o.maxY=h)}return o}function Tt(t,e,r,n){var a=e.geometry,i=e.type,o=[];if("Point"===i||"MultiPoint"===i)for(var s=0;s<a.length;s+=3)o.push(a[s]),o.push(a[s+1]),t.numPoints++,t.numSimplified++;else if("LineString"===i)Mt(o,a,t,r,!1,!1);else if("MultiLineString"===i||"Polygon"===i)for(s=0;s<a.length;s++)Mt(o,a[s],t,r,"Polygon"===i,0===s);else if("MultiPolygon"===i)for(var l=0;l<a.length;l++){var c=a[l];for(s=0;s<c.length;s++)Mt(o,c[s],t,r,!0,0===s)}if(o.length){var u=e.tags||null;if("LineString"===i&&n.lineMetrics){for(var h in u={},e.tags)u[h]=e.tags[h];u.mapbox_clip_start=a.start/a.size,u.mapbox_clip_end=a.end/a.size}var f={geometry:o,type:"Polygon"===i||"MultiPolygon"===i?3:"LineString"===i||"MultiLineString"===i?2:1,tags:u};null!==e.id&&(f.id=e.id),t.features.push(f)}}function Mt(t,e,r,n,a,i){var o=n*n;if(n>0&&e.size<(a?o:n))r.numPoints+=e.length/3;else{for(var s=[],l=0;l<e.length;l+=3)(0===n||e[l+2]>o)&&(r.numSimplified++,s.push(e[l]),s.push(e[l+1])),r.numPoints++;a&&function(t,e){for(var r=0,n=0,a=t.length,i=a-2;n<a;i=n,n+=2)r+=(t[n]-t[i])*(t[n+1]+t[i+1]);if(r>0===e)for(n=0,a=t.length;n<a/2;n+=2){var o=t[n],s=t[n+1];t[n]=t[a-2-n],t[n+1]=t[a-1-n],t[a-2-n]=o,t[a-1-n]=s}}(s,i),t.push(s)}}function At(t,e){var r=(e=this.options=function(t,e){for(var r in e)t[r]=e[r];return t}(Object.create(this.options),e)).debug;if(r&&console.time("preprocess data"),e.maxZoom<0||e.maxZoom>24)throw new Error("maxZoom should be in the 0-24 range");if(e.promoteId&&e.generateId)throw new Error("promoteId and generateId cannot be used together.");var n=function(t,e){var r=[];if("FeatureCollection"===t.type)for(var n=0;n<t.features.length;n++)it(r,t.features[n],e,n);else"Feature"===t.type?it(r,t,e):it(r,{geometry:t},e);return r}(t,e);this.tiles={},this.tileCoords=[],r&&(console.timeEnd("preprocess data"),console.log("index: maxZoom: %d, maxPoints: %d",e.indexMaxZoom,e.indexMaxPoints),console.time("generate tiles"),this.stats={},this.total=0),(n=function(t,e){var r=e.buffer/e.extent,n=t,a=ht(t,1,-1-r,r,0,-1,2,e),i=ht(t,1,1-r,2+r,0,-1,2,e);return(a||i)&&(n=ht(t,1,-r,1+r,0,-1,2,e)||[],a&&(n=xt(a,1).concat(n)),i&&(n=n.concat(xt(i,-1)))),n}(n,e)).length&&this.splitTile(n,0,0,0),r&&(n.length&&console.log("features: %d, points: %d",this.tiles[0].numFeatures,this.tiles[0].numPoints),console.timeEnd("generate tiles"),console.log("tiles generated:",this.total,JSON.stringify(this.stats)))}function St(t,e,r){return 32*((1<<t)*r+e)+t}function Et(t,e){var r=t.tileID.canonical;if(!this._geoJSONIndex)return e(null,null);var n=this._geoJSONIndex.getTile(r.z,r.x,r.y);if(!n)return e(null,null);var a=new k(n.features),i=E(a);0===i.byteOffset&&i.byteLength===i.buffer.byteLength||(i=new Uint8Array(i)),e(null,{vectorTile:a,rawData:i.buffer})}Y.prototype.load=function(t){var e=this.options,r=e.log,n=e.minZoom,a=e.maxZoom,i=e.nodeSize;r&&console.time("total time");var o="prepare "+t.length+" points";r&&console.time(o),this.points=t;for(var s=[],l=0;l<t.length;l++)t[l].geometry&&s.push(X(t[l],l));this.trees[a+1]=new H(s,tt,et,i,Float32Array),r&&console.timeEnd(o);for(var c=a;c>=n;c--){var u=+Date.now();s=this._cluster(s,c),this.trees[c]=new H(s,tt,et,i,Float32Array),r&&console.log("z%d: %d clusters in %dms",c,s.length,+Date.now()-u)}return r&&console.timeEnd("total time"),this},Y.prototype.getClusters=function(t,e){var r=((t[0]+180)%360+360)%360-180,n=Math.max(-90,Math.min(90,t[1])),a=180===t[2]?180:((t[2]+180)%360+360)%360-180,i=Math.max(-90,Math.min(90,t[3]));if(t[2]-t[0]>=360)r=-180,a=180;else if(r>a){var o=this.getClusters([r,n,180,i],e),s=this.getClusters([-180,n,a,i],e);return o.concat(s)}for(var l=this.trees[this._limitZoom(e)],c=[],u=0,h=l.range(K(r),Q(i),K(a),Q(n));u<h.length;u+=1){var f=h[u],p=l.points[f];c.push(p.numPoints?Z(p):this.points[p.index])}return c},Y.prototype.getChildren=function(t){var e=t>>5,r=t%32,n="No cluster with the specified id.",a=this.trees[r];if(!a)throw new Error(n);var i=a.points[e];if(!i)throw new Error(n);for(var o=this.options.radius/(this.options.extent*Math.pow(2,r-1)),s=[],l=0,c=a.within(i.x,i.y,o);l<c.length;l+=1){var u=c[l],h=a.points[u];h.parentId===t&&s.push(h.numPoints?Z(h):this.points[h.index])}if(0===s.length)throw new Error(n);return s},Y.prototype.getLeaves=function(t,e,r){e=e||10,r=r||0;var n=[];return this._appendLeaves(n,t,e,r,0),n},Y.prototype.getTile=function(t,e,r){var n=this.trees[this._limitZoom(t)],a=Math.pow(2,t),i=this.options,o=i.extent,s=i.radius/o,l=(r-s)/a,c=(r+1+s)/a,u={features:[]};return this._addTileFeatures(n.range((e-s)/a,l,(e+1+s)/a,c),n.points,e,r,a,u),0===e&&this._addTileFeatures(n.range(1-s/a,l,1,c),n.points,a,r,a,u),e===a-1&&this._addTileFeatures(n.range(0,l,s/a,c),n.points,-1,r,a,u),u.features.length?u:null},Y.prototype.getClusterExpansionZoom=function(t){for(var e=t%32-1;e<=this.options.maxZoom;){var r=this.getChildren(t);if(e++,1!==r.length)break;t=r[0].properties.cluster_id}return e},Y.prototype._appendLeaves=function(t,e,r,n,a){for(var i=0,o=this.getChildren(e);i<o.length;i+=1){var s=o[i],l=s.properties;if(l&&l.cluster?a+l.point_count<=n?a+=l.point_count:a=this._appendLeaves(t,l.cluster_id,r,n,a):a<n?a++:t.push(s),t.length===r)break}return a},Y.prototype._addTileFeatures=function(t,e,r,n,a,i){for(var o=0,s=t;o<s.length;o+=1){var l=e[s[o]],c={type:1,geometry:[[Math.round(this.options.extent*(l.x*a-r)),Math.round(this.options.extent*(l.y*a-n))]],tags:l.numPoints?J(l):this.points[l.index].properties},u=l.numPoints?l.id:this.points[l.index].id;void 0!==u&&(c.id=u),i.features.push(c)}},Y.prototype._limitZoom=function(t){return Math.max(this.options.minZoom,Math.min(t,this.options.maxZoom+1))},Y.prototype._cluster=function(t,e){for(var r=[],n=this.options,a=n.radius,i=n.extent,o=n.reduce,s=a/(i*Math.pow(2,e)),l=0;l<t.length;l++){var c=t[l];if(!(c.zoom<=e)){c.zoom=e;for(var u=this.trees[e+1],h=u.within(c.x,c.y,s),f=c.numPoints||1,p=c.x*f,d=c.y*f,g=o&&f>1?this._map(c,!0):null,v=(l<<5)+(e+1),m=0,y=h;m<y.length;m+=1){var x=y[m],b=u.points[x];if(!(b.zoom<=e)){b.zoom=e;var _=b.numPoints||1;p+=b.x*_,d+=b.y*_,f+=_,b.parentId=v,o&&(g||(g=this._map(c,!0)),o(g,this._map(b)))}}1===f?r.push(c):(c.parentId=v,r.push(W(p/f,d/f,v,f,g)))}}return r},Y.prototype._map=function(t,e){if(t.numPoints)return e?$({},t.properties):t.properties;var r=this.points[t.index].properties,n=this.options.map(r);return e&&n===r?$({},n):n},At.prototype.options={maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,tolerance:3,extent:4096,buffer:64,lineMetrics:!1,promoteId:null,generateId:!1,debug:0},At.prototype.splitTile=function(t,e,r,n,a,i,o){for(var s=[t,e,r,n],l=this.options,c=l.debug;s.length;){n=s.pop(),r=s.pop(),e=s.pop(),t=s.pop();var u=1<<e,h=St(e,r,n),f=this.tiles[h];if(!f&&(c>1&&console.time("creation"),f=this.tiles[h]=kt(t,e,r,n,l),this.tileCoords.push({z:e,x:r,y:n}),c)){c>1&&(console.log("tile z%d-%d-%d (features: %d, points: %d, simplified: %d)",e,r,n,f.numFeatures,f.numPoints,f.numSimplified),console.timeEnd("creation"));var p="z"+e;this.stats[p]=(this.stats[p]||0)+1,this.total++}if(f.source=t,a){if(e===l.maxZoom||e===a)continue;var d=1<<a-e;if(r!==Math.floor(i/d)||n!==Math.floor(o/d))continue}else if(e===l.indexMaxZoom||f.numPoints<=l.indexMaxPoints)continue;if(f.source=null,0!==t.length){c>1&&console.time("clipping");var g,v,m,y,x,b,_=.5*l.buffer/l.extent,w=.5-_,k=.5+_,T=1+_;g=v=m=y=null,x=ht(t,u,r-_,r+k,0,f.minX,f.maxX,l),b=ht(t,u,r+w,r+T,0,f.minX,f.maxX,l),t=null,x&&(g=ht(x,u,n-_,n+k,1,f.minY,f.maxY,l),v=ht(x,u,n+w,n+T,1,f.minY,f.maxY,l),x=null),b&&(m=ht(b,u,n-_,n+k,1,f.minY,f.maxY,l),y=ht(b,u,n+w,n+T,1,f.minY,f.maxY,l),b=null),c>1&&console.timeEnd("clipping"),s.push(g||[],e+1,2*r,2*n),s.push(v||[],e+1,2*r,2*n+1),s.push(m||[],e+1,2*r+1,2*n),s.push(y||[],e+1,2*r+1,2*n+1)}}},At.prototype.getTile=function(t,e,r){var n=this.options,a=n.extent,i=n.debug;if(t<0||t>24)return null;var o=1<<t,s=St(t,e=(e%o+o)%o,r);if(this.tiles[s])return _t(this.tiles[s],a);i>1&&console.log("drilling down to z%d-%d-%d",t,e,r);for(var l,c=t,u=e,h=r;!l&&c>0;)c--,u=Math.floor(u/2),h=Math.floor(h/2),l=this.tiles[St(c,u,h)];return l&&l.source?(i>1&&console.log("found parent tile z%d-%d-%d",c,u,h),i>1&&console.time("drilling down"),this.splitTile(l.source,c,u,h,t,e,r),i>1&&console.timeEnd("drilling down"),this.tiles[s]?_t(this.tiles[s],a):null):null};var Lt=function(e){function r(t,r,n){e.call(this,t,r,Et),n&&(this.loadGeoJSON=n)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.loadData=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),this._pendingCallback=e,this._pendingLoadDataParams=t,this._state&&"Idle"!==this._state?this._state="NeedsLoadData":(this._state="Coalescing",this._loadData())},r.prototype._loadData=function(){var e=this;if(this._pendingCallback&&this._pendingLoadDataParams){var r=this._pendingCallback,n=this._pendingLoadDataParams;delete this._pendingCallback,delete this._pendingLoadDataParams;var a=!!(n&&n.request&&n.request.collectResourceTiming)&&new l.Performance(n.request);this.loadGeoJSON(n,function(i,o){if(i||!o)return r(i);if("object"!=typeof o)return r(new Error("Input data given to '"+n.source+"' is not a valid GeoJSON object."));!function t(e,r){switch(e&&e.type||null){case"FeatureCollection":return e.features=e.features.map(y(t,r)),e;case"GeometryCollection":return e.geometries=e.geometries.map(y(t,r)),e;case"Feature":return e.geometry=t(e.geometry,r),e;case"Polygon":case"MultiPolygon":return function(t,e){return"Polygon"===t.type?t.coordinates=x(t.coordinates,e):"MultiPolygon"===t.type&&(t.coordinates=t.coordinates.map(y(x,e))),t}(e,r);default:return e}}(o,!0);try{e._geoJSONIndex=n.cluster?new Y(function(e){var r=e.superclusterOptions,n=e.clusterProperties;if(!n||!r)return r;for(var a={},i={},o={accumulated:null,zoom:0},s={properties:null},l=Object.keys(n),c=0,u=l;c<u.length;c+=1){var h=u[c],f=n[h],p=f[0],d=f[1],g=t.createExpression(d),v=t.createExpression("string"==typeof p?[p,["accumulated"],["get",h]]:p);a[h]=g.value,i[h]=v.value}return r.map=function(t){s.properties=t;for(var e={},r=0,n=l;r<n.length;r+=1){var i=n[r];e[i]=a[i].evaluate(o,s)}return e},r.reduce=function(t,e){s.properties=e;for(var r=0,n=l;r<n.length;r+=1){var a=n[r];o.accumulated=t[a],t[a]=i[a].evaluate(o,s)}},r}(n)).load(o.features):new At(o,n.geojsonVtOptions)}catch(i){return r(i)}e.loaded={};var s={};if(a){var l=a.finish();l&&(s.resourceTiming={},s.resourceTiming[n.source]=JSON.parse(JSON.stringify(l)))}r(null,s)})}},r.prototype.coalesce=function(){"Coalescing"===this._state?this._state="Idle":"NeedsLoadData"===this._state&&(this._state="Coalescing",this._loadData())},r.prototype.reloadTile=function(t,r){var n=this.loaded,a=t.uid;return n&&n[a]?e.prototype.reloadTile.call(this,t,r):this.loadTile(t,r)},r.prototype.loadGeoJSON=function(e,r){if(e.request)t.getJSON(e.request,r);else{if("string"!=typeof e.data)return r(new Error("Input data given to '"+e.source+"' is not a valid GeoJSON object."));try{return r(null,JSON.parse(e.data))}catch(t){return r(new Error("Input data given to '"+e.source+"' is not a valid GeoJSON object."))}}},r.prototype.removeSource=function(t,e){this._pendingCallback&&this._pendingCallback(null,{abandoned:!0}),e()},r.prototype.getClusterExpansionZoom=function(t,e){e(null,this._geoJSONIndex.getClusterExpansionZoom(t.clusterId))},r.prototype.getClusterChildren=function(t,e){e(null,this._geoJSONIndex.getChildren(t.clusterId))},r.prototype.getClusterLeaves=function(t,e){e(null,this._geoJSONIndex.getLeaves(t.clusterId,t.limit,t.offset))},r}(h),Ct=function(e){var r=this;this.self=e,this.actor=new t.Actor(e,this),this.layerIndexes={},this.workerSourceTypes={vector:h,geojson:Lt},this.workerSources={},this.demWorkerSources={},this.self.registerWorkerSource=function(t,e){if(r.workerSourceTypes[t])throw new Error('Worker source with name "'+t+'" already registered.');r.workerSourceTypes[t]=e},this.self.registerRTLTextPlugin=function(e){if(t.plugin.isLoaded())throw new Error("RTL text plugin already registered.");t.plugin.applyArabicShaping=e.applyArabicShaping,t.plugin.processBidirectionalText=e.processBidirectionalText,t.plugin.processStyledBidirectionalText=e.processStyledBidirectionalText}};return Ct.prototype.setReferrer=function(t,e){this.referrer=e},Ct.prototype.setLayers=function(t,e,r){this.getLayerIndex(t).replace(e),r()},Ct.prototype.updateLayers=function(t,e,r){this.getLayerIndex(t).update(e.layers,e.removedIds),r()},Ct.prototype.loadTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).loadTile(e,r)},Ct.prototype.loadDEMTile=function(t,e,r){this.getDEMWorkerSource(t,e.source).loadTile(e,r)},Ct.prototype.reloadTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).reloadTile(e,r)},Ct.prototype.abortTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).abortTile(e,r)},Ct.prototype.removeTile=function(t,e,r){this.getWorkerSource(t,e.type,e.source).removeTile(e,r)},Ct.prototype.removeDEMTile=function(t,e){this.getDEMWorkerSource(t,e.source).removeTile(e)},Ct.prototype.removeSource=function(t,e,r){if(this.workerSources[t]&&this.workerSources[t][e.type]&&this.workerSources[t][e.type][e.source]){var n=this.workerSources[t][e.type][e.source];delete this.workerSources[t][e.type][e.source],void 0!==n.removeSource?n.removeSource(e,r):r()}},Ct.prototype.loadWorkerSource=function(t,e,r){try{this.self.importScripts(e.url),r()}catch(t){r(t.toString())}},Ct.prototype.loadRTLTextPlugin=function(e,r,n){try{t.plugin.isLoaded()||(this.self.importScripts(r),n(t.plugin.isLoaded()?null:new Error("RTL Text Plugin failed to import scripts from "+r)))}catch(t){n(t.toString())}},Ct.prototype.getLayerIndex=function(t){var e=this.layerIndexes[t];return e||(e=this.layerIndexes[t]=new n),e},Ct.prototype.getWorkerSource=function(t,e,r){var n=this;if(this.workerSources[t]||(this.workerSources[t]={}),this.workerSources[t][e]||(this.workerSources[t][e]={}),!this.workerSources[t][e][r]){var a={send:function(e,r,a){n.actor.send(e,r,a,t)}};this.workerSources[t][e][r]=new this.workerSourceTypes[e](a,this.getLayerIndex(t))}return this.workerSources[t][e][r]},Ct.prototype.getDEMWorkerSource=function(t,e){return this.demWorkerSources[t]||(this.demWorkerSources[t]={}),this.demWorkerSources[t][e]||(this.demWorkerSources[t][e]=new f),this.demWorkerSources[t][e]},Ct.prototype.enforceCacheSizeLimit=function(e,r){t.enforceCacheSizeLimit(r)},"undefined"!=typeof WorkerGlobalScope&&void 0!==t.window&&t.window instanceof WorkerGlobalScope&&(t.window.worker=new Ct(t.window)),Ct}),n(0,function(t){var e=t.createCommonjsModule(function(t){function e(t){return!!("undefined"!=typeof window&&"undefined"!=typeof document&&Array.prototype&&Array.prototype.every&&Array.prototype.filter&&Array.prototype.forEach&&Array.prototype.indexOf&&Array.prototype.lastIndexOf&&Array.prototype.map&&Array.prototype.some&&Array.prototype.reduce&&Array.prototype.reduceRight&&Array.isArray&&Function.prototype&&Function.prototype.bind&&Object.keys&&Object.create&&Object.getPrototypeOf&&Object.getOwnPropertyNames&&Object.isSealed&&Object.isFrozen&&Object.isExtensible&&Object.getOwnPropertyDescriptor&&Object.defineProperty&&Object.defineProperties&&Object.seal&&Object.freeze&&Object.preventExtensions&&"JSON"in window&&"parse"in JSON&&"stringify"in JSON&&function(){if(!("Worker"in window&&"Blob"in window&&"URL"in window))return!1;var t,e,r=new Blob([""],{type:"text/javascript"}),n=URL.createObjectURL(r);try{e=new Worker(n),t=!0}catch(e){t=!1}return e&&e.terminate(),URL.revokeObjectURL(n),t}()&&"Uint8ClampedArray"in window&&ArrayBuffer.isView&&function(t){return void 0===r[t]&&(r[t]=function(t){var r=document.createElement("canvas"),n=Object.create(e.webGLContextAttributes);return n.failIfMajorPerformanceCaveat=t,r.probablySupportsContext?r.probablySupportsContext("webgl",n)||r.probablySupportsContext("experimental-webgl",n):r.supportsContext?r.supportsContext("webgl",n)||r.supportsContext("experimental-webgl",n):r.getContext("webgl",n)||r.getContext("experimental-webgl",n)}(t)),r[t]}(t&&t.failIfMajorPerformanceCaveat))}t.exports?t.exports=e:window&&(window.mapboxgl=window.mapboxgl||{},window.mapboxgl.supported=e);var r={};e.webGLContextAttributes={antialias:!1,alpha:!0,stencil:!0,depth:!0}}),r={create:function(e,r,n){var a=t.window.document.createElement(e);return void 0!==r&&(a.className=r),n&&n.appendChild(a),a},createNS:function(e,r){return t.window.document.createElementNS(e,r)}},n=t.window.document.documentElement.style;function a(t){if(!n)return t[0];for(var e=0;e<t.length;e++)if(t[e]in n)return t[e];return t[0]}var i,o=a(["userSelect","MozUserSelect","WebkitUserSelect","msUserSelect"]);r.disableDrag=function(){n&&o&&(i=n[o],n[o]="none")},r.enableDrag=function(){n&&o&&(n[o]=i)};var s=a(["transform","WebkitTransform"]);r.setTransform=function(t,e){t.style[s]=e};var l=!1;try{var c=Object.defineProperty({},"passive",{get:function(){l=!0}});t.window.addEventListener("test",c,c),t.window.removeEventListener("test",c,c)}catch(t){l=!1}r.addEventListener=function(t,e,r,n){void 0===n&&(n={}),"passive"in n&&l?t.addEventListener(e,r,n):t.addEventListener(e,r,n.capture)},r.removeEventListener=function(t,e,r,n){void 0===n&&(n={}),"passive"in n&&l?t.removeEventListener(e,r,n):t.removeEventListener(e,r,n.capture)};var u=function(e){e.preventDefault(),e.stopPropagation(),t.window.removeEventListener("click",u,!0)};function h(t){var e=t.userImage;return!!(e&&e.render&&e.render())&&(t.data.replace(new Uint8Array(e.data.buffer)),!0)}r.suppressClick=function(){t.window.addEventListener("click",u,!0),t.window.setTimeout(function(){t.window.removeEventListener("click",u,!0)},0)},r.mousePos=function(e,r){var n=e.getBoundingClientRect(),a=t.window.TouchEvent&&r instanceof t.window.TouchEvent?r.touches[0]:r;return new t.Point(a.clientX-n.left-e.clientLeft,a.clientY-n.top-e.clientTop)},r.touchPos=function(e,r){for(var n=e.getBoundingClientRect(),a=[],i="touchend"===r.type?r.changedTouches:r.touches,o=0;o<i.length;o++)a.push(new t.Point(i[o].clientX-n.left-e.clientLeft,i[o].clientY-n.top-e.clientTop));return a},r.mouseButton=function(e){return void 0!==t.window.InstallTrigger&&2===e.button&&e.ctrlKey&&t.window.navigator.platform.toUpperCase().indexOf("MAC")>=0?0:e.button},r.remove=function(t){t.parentNode&&t.parentNode.removeChild(t)};var f=function(e){function r(){e.call(this),this.images={},this.updatedImages={},this.callbackDispatchedThisFrame={},this.loaded=!1,this.requestors=[],this.patterns={},this.atlasImage=new t.RGBAImage({width:1,height:1}),this.dirty=!0}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.isLoaded=function(){return this.loaded},r.prototype.setLoaded=function(t){if(this.loaded!==t&&(this.loaded=t,t)){for(var e=0,r=this.requestors;e<r.length;e+=1){var n=r[e],a=n.ids,i=n.callback;this._notify(a,i)}this.requestors=[]}},r.prototype.getImage=function(t){return this.images[t]},r.prototype.addImage=function(t,e){this.images[t]=e},r.prototype.updateImage=function(t,e){var r=this.images[t];e.version=r.version+1,this.images[t]=e,this.updatedImages[t]=!0},r.prototype.removeImage=function(t){var e=this.images[t];delete this.images[t],delete this.patterns[t],e.userImage&&e.userImage.onRemove&&e.userImage.onRemove()},r.prototype.listImages=function(){return Object.keys(this.images)},r.prototype.getImages=function(t,e){var r=!0;if(!this.isLoaded())for(var n=0,a=t;n<a.length;n+=1){var i=a[n];this.images[i]||(r=!1)}this.isLoaded()||r?this._notify(t,e):this.requestors.push({ids:t,callback:e})},r.prototype._notify=function(e,r){for(var n={},a=0,i=e;a<i.length;a+=1){var o=i[a];this.images[o]||this.fire(new t.Event("styleimagemissing",{id:o}));var s=this.images[o];s?n[o]={data:s.data.clone(),pixelRatio:s.pixelRatio,sdf:s.sdf,version:s.version,hasRenderCallback:Boolean(s.userImage&&s.userImage.render)}:t.warnOnce('Image "'+o+'" could not be loaded. Please make sure you have added the image with map.addImage() or a "sprite" property in your style. You can provide missing images by listening for the "styleimagemissing" map event.')}r(null,n)},r.prototype.getPixelSize=function(){var t=this.atlasImage;return{width:t.width,height:t.height}},r.prototype.getPattern=function(e){var r=this.patterns[e],n=this.getImage(e);if(!n)return null;if(r&&r.position.version===n.version)return r.position;if(r)r.position.version=n.version;else{var a={w:n.data.width+2,h:n.data.height+2,x:0,y:0},i=new t.ImagePosition(a,n);this.patterns[e]={bin:a,position:i}}return this._updatePatternAtlas(),this.patterns[e].position},r.prototype.bind=function(e){var r=e.gl;this.atlasTexture?this.dirty&&(this.atlasTexture.update(this.atlasImage),this.dirty=!1):this.atlasTexture=new t.Texture(e,this.atlasImage,r.RGBA),this.atlasTexture.bind(r.LINEAR,r.CLAMP_TO_EDGE)},r.prototype._updatePatternAtlas=function(){var e=[];for(var r in this.patterns)e.push(this.patterns[r].bin);var n=t.potpack(e),a=n.w,i=n.h,o=this.atlasImage;for(var s in o.resize({width:a||1,height:i||1}),this.patterns){var l=this.patterns[s].bin,c=l.x+1,u=l.y+1,h=this.images[s].data,f=h.width,p=h.height;t.RGBAImage.copy(h,o,{x:0,y:0},{x:c,y:u},{width:f,height:p}),t.RGBAImage.copy(h,o,{x:0,y:p-1},{x:c,y:u-1},{width:f,height:1}),t.RGBAImage.copy(h,o,{x:0,y:0},{x:c,y:u+p},{width:f,height:1}),t.RGBAImage.copy(h,o,{x:f-1,y:0},{x:c-1,y:u},{width:1,height:p}),t.RGBAImage.copy(h,o,{x:0,y:0},{x:c+f,y:u},{width:1,height:p})}this.dirty=!0},r.prototype.beginFrame=function(){this.callbackDispatchedThisFrame={}},r.prototype.dispatchRenderCallbacks=function(t){for(var e=0,r=t;e<r.length;e+=1){var n=r[e];if(!this.callbackDispatchedThisFrame[n]){this.callbackDispatchedThisFrame[n]=!0;var a=this.images[n];h(a)&&this.updateImage(n,a)}}},r}(t.Evented),p=v,d=v,g=1e20;function v(t,e,r,n,a,i){this.fontSize=t||24,this.buffer=void 0===e?3:e,this.cutoff=n||.25,this.fontFamily=a||"sans-serif",this.fontWeight=i||"normal",this.radius=r||8;var o=this.size=this.fontSize+2*this.buffer;this.canvas=document.createElement("canvas"),this.canvas.width=this.canvas.height=o,this.ctx=this.canvas.getContext("2d"),this.ctx.font=this.fontWeight+" "+this.fontSize+"px "+this.fontFamily,this.ctx.textBaseline="middle",this.ctx.fillStyle="black",this.gridOuter=new Float64Array(o*o),this.gridInner=new Float64Array(o*o),this.f=new Float64Array(o),this.d=new Float64Array(o),this.z=new Float64Array(o+1),this.v=new Int16Array(o),this.middle=Math.round(o/2*(navigator.userAgent.indexOf("Gecko/")>=0?1.2:1))}function m(t,e,r,n,a,i,o){for(var s=0;s<e;s++){for(var l=0;l<r;l++)n[l]=t[l*e+s];for(y(n,a,i,o,r),l=0;l<r;l++)t[l*e+s]=a[l]}for(l=0;l<r;l++){for(s=0;s<e;s++)n[s]=t[l*e+s];for(y(n,a,i,o,e),s=0;s<e;s++)t[l*e+s]=Math.sqrt(a[s])}}function y(t,e,r,n,a){r[0]=0,n[0]=-g,n[1]=+g;for(var i=1,o=0;i<a;i++){for(var s=(t[i]+i*i-(t[r[o]]+r[o]*r[o]))/(2*i-2*r[o]);s<=n[o];)o--,s=(t[i]+i*i-(t[r[o]]+r[o]*r[o]))/(2*i-2*r[o]);r[++o]=i,n[o]=s,n[o+1]=+g}for(i=0,o=0;i<a;i++){for(;n[o+1]<i;)o++;e[i]=(i-r[o])*(i-r[o])+t[r[o]]}}v.prototype.draw=function(t){this.ctx.clearRect(0,0,this.size,this.size),this.ctx.fillText(t,this.buffer,this.middle);for(var e=this.ctx.getImageData(0,0,this.size,this.size),r=new Uint8ClampedArray(this.size*this.size),n=0;n<this.size*this.size;n++){var a=e.data[4*n+3]/255;this.gridOuter[n]=1===a?0:0===a?g:Math.pow(Math.max(0,.5-a),2),this.gridInner[n]=1===a?g:0===a?0:Math.pow(Math.max(0,a-.5),2)}for(m(this.gridOuter,this.size,this.size,this.f,this.d,this.v,this.z),m(this.gridInner,this.size,this.size,this.f,this.d,this.v,this.z),n=0;n<this.size*this.size;n++){var i=this.gridOuter[n]-this.gridInner[n];r[n]=Math.max(0,Math.min(255,Math.round(255-255*(i/this.radius+this.cutoff))))}return r},p.default=d;var x=function(t,e){this.requestManager=t,this.localIdeographFontFamily=e,this.entries={}};x.prototype.setURL=function(t){this.url=t},x.prototype.getGlyphs=function(e,r){var n=this,a=[];for(var i in e)for(var o=0,s=e[i];o<s.length;o+=1){var l=s[o];a.push({stack:i,id:l})}t.asyncAll(a,function(t,e){var r=t.stack,a=t.id,i=n.entries[r];i||(i=n.entries[r]={glyphs:{},requests:{}});var o=i.glyphs[a];if(void 0===o){if(o=n._tinySDF(i,r,a))return i.glyphs[a]=o,void e(null,{stack:r,id:a,glyph:o});var s=Math.floor(a/256);if(256*s>65535)e(new Error("glyphs > 65535 not supported"));else{var l=i.requests[s];l||(l=i.requests[s]=[],x.loadGlyphRange(r,s,n.url,n.requestManager,function(t,e){if(e)for(var r in e)n._doesCharSupportLocalGlyph(+r)||(i.glyphs[+r]=e[+r]);for(var a=0,o=l;a<o.length;a+=1)(0,o[a])(t,e);delete i.requests[s]})),l.push(function(t,n){t?e(t):n&&e(null,{stack:r,id:a,glyph:n[a]||null})})}}else e(null,{stack:r,id:a,glyph:o})},function(t,e){if(t)r(t);else if(e){for(var n={},a=0,i=e;a<i.length;a+=1){var o=i[a],s=o.stack,l=o.id,c=o.glyph;(n[s]||(n[s]={}))[l]=c&&{id:c.id,bitmap:c.bitmap.clone(),metrics:c.metrics}}r(null,n)}})},x.prototype._doesCharSupportLocalGlyph=function(e){return!!this.localIdeographFontFamily&&(t.isChar["CJK Unified Ideographs"](e)||t.isChar["Hangul Syllables"](e)||t.isChar.Hiragana(e)||t.isChar.Katakana(e))},x.prototype._tinySDF=function(e,r,n){var a=this.localIdeographFontFamily;if(a&&this._doesCharSupportLocalGlyph(n)){var i=e.tinySDF;if(!i){var o="400";/bold/i.test(r)?o="900":/medium/i.test(r)?o="500":/light/i.test(r)&&(o="200"),i=e.tinySDF=new x.TinySDF(24,3,8,.25,a,o)}return{id:n,bitmap:new t.AlphaImage({width:30,height:30},i.draw(String.fromCharCode(n))),metrics:{width:24,height:24,left:0,top:-8,advance:24}}}},x.loadGlyphRange=function(e,r,n,a,i){var o=256*r,s=o+255,l=a.transformRequest(a.normalizeGlyphsURL(n).replace("{fontstack}",e).replace("{range}",o+"-"+s),t.ResourceType.Glyphs);t.getArrayBuffer(l,function(e,r){if(e)i(e);else if(r){for(var n={},a=0,o=t.parseGlyphPBF(r);a<o.length;a+=1){var s=o[a];n[s.id]=s}i(null,n)}})},x.TinySDF=p;var b=function(){this.specification=t.styleSpec.light.position};b.prototype.possiblyEvaluate=function(e,r){return t.sphericalToCartesian(e.expression.evaluate(r))},b.prototype.interpolate=function(e,r,n){return{x:t.number(e.x,r.x,n),y:t.number(e.y,r.y,n),z:t.number(e.z,r.z,n)}};var _=new t.Properties({anchor:new t.DataConstantProperty(t.styleSpec.light.anchor),position:new b,color:new t.DataConstantProperty(t.styleSpec.light.color),intensity:new t.DataConstantProperty(t.styleSpec.light.intensity)}),w=function(e){function r(r){e.call(this),this._transitionable=new t.Transitionable(_),this.setLight(r),this._transitioning=this._transitionable.untransitioned()}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getLight=function(){return this._transitionable.serialize()},r.prototype.setLight=function(e,r){if(void 0===r&&(r={}),!this._validate(t.validateLight,e,r))for(var n in e){var a=e[n];t.endsWith(n,"-transition")?this._transitionable.setTransition(n.slice(0,-"-transition".length),a):this._transitionable.setValue(n,a)}},r.prototype.updateTransitions=function(t){this._transitioning=this._transitionable.transitioned(t,this._transitioning)},r.prototype.hasTransition=function(){return this._transitioning.hasTransition()},r.prototype.recalculate=function(t){this.properties=this._transitioning.possiblyEvaluate(t)},r.prototype._validate=function(e,r,n){return(!n||!1!==n.validate)&&t.emitValidationErrors(this,e.call(t.validateStyle,t.extend({value:r,style:{glyphs:!0,sprite:!0},styleSpec:t.styleSpec})))},r}(t.Evented),k=function(t,e){this.width=t,this.height=e,this.nextRow=0,this.bytes=4,this.data=new Uint8Array(this.width*this.height*this.bytes),this.positions={}};k.prototype.getDash=function(t,e){var r=t.join(",")+String(e);return this.positions[r]||(this.positions[r]=this.addDash(t,e)),this.positions[r]},k.prototype.addDash=function(e,r){var n=r?7:0,a=2*n+1;if(this.nextRow+a>this.height)return t.warnOnce("LineAtlas out of space"),null;for(var i=0,o=0;o<e.length;o++)i+=e[o];for(var s=this.width/i,l=s/2,c=e.length%2==1,u=-n;u<=n;u++)for(var h=this.nextRow+n+u,f=this.width*h,p=c?-e[e.length-1]:0,d=e[0],g=1,v=0;v<this.width;v++){for(;d<v/s;)p=d,d+=e[g],c&&g===e.length-1&&(d+=e[0]),g++;var m=Math.abs(v-p*s),y=Math.abs(v-d*s),x=Math.min(m,y),b=g%2==1,_=void 0;if(r){var w=n?u/n*(l+1):0;if(b){var k=l-Math.abs(w);_=Math.sqrt(x*x+k*k)}else _=l-Math.sqrt(x*x+w*w)}else _=(b?1:-1)*x;this.data[3+4*(f+v)]=Math.max(0,Math.min(255,_+128))}var T={y:(this.nextRow+n+.5)/this.height,height:2*n/this.height,width:i};return this.nextRow+=a,this.dirty=!0,T},k.prototype.bind=function(t){var e=t.gl;this.texture?(e.bindTexture(e.TEXTURE_2D,this.texture),this.dirty&&(this.dirty=!1,e.texSubImage2D(e.TEXTURE_2D,0,0,0,this.width,this.height,e.RGBA,e.UNSIGNED_BYTE,this.data))):(this.texture=e.createTexture(),e.bindTexture(e.TEXTURE_2D,this.texture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,this.width,this.height,0,e.RGBA,e.UNSIGNED_BYTE,this.data))};var T=function e(r,n){this.workerPool=r,this.actors=[],this.currentActor=0,this.id=t.uniqueId();for(var a=this.workerPool.acquire(this.id),i=0;i<a.length;i++){var o=a[i],s=new e.Actor(o,n,this.id);s.name="Worker "+i,this.actors.push(s)}};function M(e,r,n){var a=function(a,i){if(a)return n(a);if(i){var o=t.pick(t.extend(i,e),["tiles","minzoom","maxzoom","attribution","mapbox_logo","bounds","scheme","tileSize","encoding"]);i.vector_layers&&(o.vectorLayers=i.vector_layers,o.vectorLayerIds=o.vectorLayers.map(function(t){return t.id})),e.url&&(o.tiles=r.canonicalizeTileset(o,e.url)),n(null,o)}};return e.url?t.getJSON(r.transformRequest(r.normalizeSourceURL(e.url),t.ResourceType.Source),a):t.browser.frame(function(){return a(null,e)})}T.prototype.broadcast=function(e,r,n){n=n||function(){},t.asyncAll(this.actors,function(t,n){t.send(e,r,n)},n)},T.prototype.getActor=function(){return this.currentActor=(this.currentActor+1)%this.actors.length,this.actors[this.currentActor]},T.prototype.remove=function(){this.actors.forEach(function(t){t.remove()}),this.actors=[],this.workerPool.release(this.id)},T.Actor=t.Actor;var A=function(e,r,n){this.bounds=t.LngLatBounds.convert(this.validateBounds(e)),this.minzoom=r||0,this.maxzoom=n||24};A.prototype.validateBounds=function(t){return Array.isArray(t)&&4===t.length?[Math.max(-180,t[0]),Math.max(-90,t[1]),Math.min(180,t[2]),Math.min(90,t[3])]:[-180,-90,180,90]},A.prototype.contains=function(e){var r=Math.pow(2,e.z),n=Math.floor(t.mercatorXfromLng(this.bounds.getWest())*r),a=Math.floor(t.mercatorYfromLat(this.bounds.getNorth())*r),i=Math.ceil(t.mercatorXfromLng(this.bounds.getEast())*r),o=Math.ceil(t.mercatorYfromLat(this.bounds.getSouth())*r);return e.x>=n&&e.x<i&&e.y>=a&&e.y<o};var S=function(e){function r(r,n,a,i){if(e.call(this),this.id=r,this.dispatcher=a,this.type="vector",this.minzoom=0,this.maxzoom=22,this.scheme="xyz",this.tileSize=512,this.reparseOverscaled=!0,this.isTileClipped=!0,this._loaded=!1,t.extend(this,t.pick(n,["url","scheme","tileSize"])),this._options=t.extend({type:"vector"},n),this._collectResourceTiming=n.collectResourceTiming,512!==this.tileSize)throw new Error("vector tile sources must have a tileSize of 512");this.setEventedParent(i)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this._loaded=!1,this.fire(new t.Event("dataloading",{dataType:"source"})),this._tileJSONRequest=M(this._options,this.map._requestManager,function(r,n){e._tileJSONRequest=null,e._loaded=!0,r?e.fire(new t.ErrorEvent(r)):n&&(t.extend(e,n),n.bounds&&(e.tileBounds=new A(n.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(n.tiles,e.map._requestManager._customAccessToken),t.postMapLoadEvent(n.tiles,e.map._getMapId(),e.map._requestManager._skuToken,e.map._requestManager._customAccessToken),e.fire(new t.Event("data",{dataType:"source",sourceDataType:"metadata"})),e.fire(new t.Event("data",{dataType:"source",sourceDataType:"content"})))})},r.prototype.loaded=function(){return this._loaded},r.prototype.hasTile=function(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null)},r.prototype.serialize=function(){return t.extend({},this._options)},r.prototype.loadTile=function(e,r){var n=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.url,null),a={request:this.map._requestManager.transformRequest(n,t.ResourceType.Tile),uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,tileSize:this.tileSize*e.tileID.overscaleFactor(),type:this.type,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes};function i(n,a){return delete e.request,e.aborted?r(null):n&&404!==n.status?r(n):(a&&a.resourceTiming&&(e.resourceTiming=a.resourceTiming),this.map._refreshExpiredTiles&&a&&e.setExpiryData(a),e.loadVectorData(a,this.map.painter),t.cacheEntryPossiblyAdded(this.dispatcher),r(null),void(e.reloadCallback&&(this.loadTile(e,e.reloadCallback),e.reloadCallback=null)))}a.request.collectResourceTiming=this._collectResourceTiming,e.actor&&"expired"!==e.state?"loading"===e.state?e.reloadCallback=r:e.request=e.actor.send("reloadTile",a,i.bind(this)):(e.actor=this.dispatcher.getActor(),e.request=e.actor.send("loadTile",a,i.bind(this)))},r.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.actor&&t.actor.send("abortTile",{uid:t.uid,type:this.type,source:this.id},void 0)},r.prototype.unloadTile=function(t){t.unloadVectorData(),t.actor&&t.actor.send("removeTile",{uid:t.uid,type:this.type,source:this.id},void 0)},r.prototype.hasTransition=function(){return!1},r}(t.Evented),E=function(e){function r(r,n,a,i){e.call(this),this.id=r,this.dispatcher=a,this.setEventedParent(i),this.type="raster",this.minzoom=0,this.maxzoom=22,this.roundZoom=!0,this.scheme="xyz",this.tileSize=512,this._loaded=!1,this._options=t.extend({type:"raster"},n),t.extend(this,t.pick(n,["url","scheme","tileSize"]))}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this._loaded=!1,this.fire(new t.Event("dataloading",{dataType:"source"})),this._tileJSONRequest=M(this._options,this.map._requestManager,function(r,n){e._tileJSONRequest=null,e._loaded=!0,r?e.fire(new t.ErrorEvent(r)):n&&(t.extend(e,n),n.bounds&&(e.tileBounds=new A(n.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(n.tiles),t.postMapLoadEvent(n.tiles,e.map._getMapId(),e.map._requestManager._skuToken),e.fire(new t.Event("data",{dataType:"source",sourceDataType:"metadata"})),e.fire(new t.Event("data",{dataType:"source",sourceDataType:"content"})))})},r.prototype.loaded=function(){return this._loaded},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.onRemove=function(){this._tileJSONRequest&&(this._tileJSONRequest.cancel(),this._tileJSONRequest=null)},r.prototype.serialize=function(){return t.extend({},this._options)},r.prototype.hasTile=function(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},r.prototype.loadTile=function(e,r){var n=this,a=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.url,this.tileSize);e.request=t.getImage(this.map._requestManager.transformRequest(a,t.ResourceType.Tile),function(a,i){if(delete e.request,e.aborted)e.state="unloaded",r(null);else if(a)e.state="errored",r(a);else if(i){n.map._refreshExpiredTiles&&e.setExpiryData(i),delete i.cacheControl,delete i.expires;var o=n.map.painter.context,s=o.gl;e.texture=n.map.painter.getTileTexture(i.width),e.texture?e.texture.update(i,{useMipmap:!0}):(e.texture=new t.Texture(o,i,s.RGBA,{useMipmap:!0}),e.texture.bind(s.LINEAR,s.CLAMP_TO_EDGE,s.LINEAR_MIPMAP_NEAREST),o.extTextureFilterAnisotropic&&s.texParameterf(s.TEXTURE_2D,o.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,o.extTextureFilterAnisotropicMax)),e.state="loaded",t.cacheEntryPossiblyAdded(n.dispatcher),r(null)}})},r.prototype.abortTile=function(t,e){t.request&&(t.request.cancel(),delete t.request),e()},r.prototype.unloadTile=function(t,e){t.texture&&this.map.painter.saveTileTexture(t.texture),e()},r.prototype.hasTransition=function(){return!1},r}(t.Evented),L=function(e){function r(r,n,a,i){e.call(this,r,n,a,i),this.type="raster-dem",this.maxzoom=22,this._options=t.extend({type:"raster-dem"},n),this.encoding=n.encoding||"mapbox"}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.serialize=function(){return{type:"raster-dem",url:this.url,tileSize:this.tileSize,tiles:this.tiles,bounds:this.bounds,encoding:this.encoding}},r.prototype.loadTile=function(e,r){var n=this.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.url,this.tileSize);e.request=t.getImage(this.map._requestManager.transformRequest(n,t.ResourceType.Tile),function(n,a){if(delete e.request,e.aborted)e.state="unloaded",r(null);else if(n)e.state="errored",r(n);else if(a){this.map._refreshExpiredTiles&&e.setExpiryData(a),delete a.cacheControl,delete a.expires;var i=t.browser.getImageData(a),o={uid:e.uid,coord:e.tileID,source:this.id,rawImageData:i,encoding:this.encoding};e.actor&&"expired"!==e.state||(e.actor=this.dispatcher.getActor(),e.actor.send("loadDEMTile",o,function(t,n){t&&(e.state="errored",r(t)),n&&(e.dem=n,e.needsHillshadePrepare=!0,e.state="loaded",r(null))}.bind(this)))}}.bind(this)),e.neighboringTiles=this._getNeighboringTiles(e.tileID)},r.prototype._getNeighboringTiles=function(e){var r=e.canonical,n=Math.pow(2,r.z),a=(r.x-1+n)%n,i=0===r.x?e.wrap-1:e.wrap,o=(r.x+1+n)%n,s=r.x+1===n?e.wrap+1:e.wrap,l={};return l[new t.OverscaledTileID(e.overscaledZ,i,r.z,a,r.y).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y).key]={backfilled:!1},r.y>0&&(l[new t.OverscaledTileID(e.overscaledZ,i,r.z,a,r.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y-1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y-1).key]={backfilled:!1}),r.y+1<n&&(l[new t.OverscaledTileID(e.overscaledZ,i,r.z,a,r.y+1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y+1).key]={backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y+1).key]={backfilled:!1}),l},r.prototype.unloadTile=function(t){t.demTexture&&this.map.painter.saveTileTexture(t.demTexture),t.fbo&&(t.fbo.destroy(),delete t.fbo),t.dem&&delete t.dem,delete t.neighboringTiles,t.state="unloaded",t.actor&&t.actor.send("removeDEMTile",{uid:t.uid,source:this.id})},r}(E),C=function(e){function r(r,n,a,i){e.call(this),this.id=r,this.type="geojson",this.minzoom=0,this.maxzoom=18,this.tileSize=512,this.isTileClipped=!0,this.reparseOverscaled=!0,this._removed=!1,this._loaded=!1,this.actor=a.getActor(),this.setEventedParent(i),this._data=n.data,this._options=t.extend({},n),this._collectResourceTiming=n.collectResourceTiming,this._resourceTiming=[],void 0!==n.maxzoom&&(this.maxzoom=n.maxzoom),n.type&&(this.type=n.type),n.attribution&&(this.attribution=n.attribution);var o=t.EXTENT/this.tileSize;this.workerOptions=t.extend({source:this.id,cluster:n.cluster||!1,geojsonVtOptions:{buffer:(void 0!==n.buffer?n.buffer:128)*o,tolerance:(void 0!==n.tolerance?n.tolerance:.375)*o,extent:t.EXTENT,maxZoom:this.maxzoom,lineMetrics:n.lineMetrics||!1,generateId:n.generateId||!1},superclusterOptions:{maxZoom:void 0!==n.clusterMaxZoom?Math.min(n.clusterMaxZoom,this.maxzoom-1):this.maxzoom-1,extent:t.EXTENT,radius:(n.clusterRadius||50)*o,log:!1},clusterProperties:n.clusterProperties},n.workerOptions)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this.fire(new t.Event("dataloading",{dataType:"source"})),this._updateWorkerData(function(r){if(r)e.fire(new t.ErrorEvent(r));else{var n={dataType:"source",sourceDataType:"metadata"};e._collectResourceTiming&&e._resourceTiming&&e._resourceTiming.length>0&&(n.resourceTiming=e._resourceTiming,e._resourceTiming=[]),e.fire(new t.Event("data",n))}})},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.setData=function(e){var r=this;return this._data=e,this.fire(new t.Event("dataloading",{dataType:"source"})),this._updateWorkerData(function(e){if(e)r.fire(new t.ErrorEvent(e));else{var n={dataType:"source",sourceDataType:"content"};r._collectResourceTiming&&r._resourceTiming&&r._resourceTiming.length>0&&(n.resourceTiming=r._resourceTiming,r._resourceTiming=[]),r.fire(new t.Event("data",n))}}),this},r.prototype.getClusterExpansionZoom=function(t,e){return this.actor.send("geojson.getClusterExpansionZoom",{clusterId:t,source:this.id},e),this},r.prototype.getClusterChildren=function(t,e){return this.actor.send("geojson.getClusterChildren",{clusterId:t,source:this.id},e),this},r.prototype.getClusterLeaves=function(t,e,r,n){return this.actor.send("geojson.getClusterLeaves",{source:this.id,clusterId:t,limit:e,offset:r},n),this},r.prototype._updateWorkerData=function(e){var r=this;this._loaded=!1;var n=t.extend({},this.workerOptions),a=this._data;"string"==typeof a?(n.request=this.map._requestManager.transformRequest(t.browser.resolveURL(a),t.ResourceType.Source),n.request.collectResourceTiming=this._collectResourceTiming):n.data=JSON.stringify(a),this.actor.send(this.type+".loadData",n,function(t,a){r._removed||a&&a.abandoned||(r._loaded=!0,a&&a.resourceTiming&&a.resourceTiming[r.id]&&(r._resourceTiming=a.resourceTiming[r.id].slice(0)),r.actor.send(r.type+".coalesce",{source:n.source},null),e(t))})},r.prototype.loaded=function(){return this._loaded},r.prototype.loadTile=function(e,r){var n=this,a=e.actor?"reloadTile":"loadTile";e.actor=this.actor;var i={type:this.type,uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes};e.request=this.actor.send(a,i,function(t,i){return delete e.request,e.unloadVectorData(),e.aborted?r(null):t?r(t):(e.loadVectorData(i,n.map.painter,"reloadTile"===a),r(null))})},r.prototype.abortTile=function(t){t.request&&(t.request.cancel(),delete t.request),t.aborted=!0},r.prototype.unloadTile=function(t){t.unloadVectorData(),this.actor.send("removeTile",{uid:t.uid,type:this.type,source:this.id})},r.prototype.onRemove=function(){this._removed=!0,this.actor.send("removeSource",{type:this.type,source:this.id})},r.prototype.serialize=function(){return t.extend({},this._options,{type:this.type,data:this._data})},r.prototype.hasTransition=function(){return!1},r}(t.Evented),P=function(e){function r(t,r,n,a){e.call(this),this.id=t,this.dispatcher=n,this.coordinates=r.coordinates,this.type="image",this.minzoom=0,this.maxzoom=22,this.tileSize=512,this.tiles={},this._loaded=!1,this.setEventedParent(a),this.options=r}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(e,r){var n=this;this._loaded=!1,this.fire(new t.Event("dataloading",{dataType:"source"})),this.url=this.options.url,t.getImage(this.map._requestManager.transformRequest(this.url,t.ResourceType.Image),function(a,i){n._loaded=!0,a?n.fire(new t.ErrorEvent(a)):i&&(n.image=i,e&&(n.coordinates=e),r&&r(),n._finishLoading())})},r.prototype.loaded=function(){return this._loaded},r.prototype.updateImage=function(t){var e=this;return this.image&&t.url?(this.options.url=t.url,this.load(t.coordinates,function(){e.texture=null}),this):this},r.prototype._finishLoading=function(){this.map&&(this.setCoordinates(this.coordinates),this.fire(new t.Event("data",{dataType:"source",sourceDataType:"metadata"})))},r.prototype.onAdd=function(t){this.map=t,this.load()},r.prototype.setCoordinates=function(e){var r=this;this.coordinates=e;var n=e.map(t.MercatorCoordinate.fromLngLat);this.tileID=function(e){for(var r=1/0,n=1/0,a=-1/0,i=-1/0,o=0,s=e;o<s.length;o+=1){var l=s[o];r=Math.min(r,l.x),n=Math.min(n,l.y),a=Math.max(a,l.x),i=Math.max(i,l.y)}var c=a-r,u=i-n,h=Math.max(c,u),f=Math.max(0,Math.floor(-Math.log(h)/Math.LN2)),p=Math.pow(2,f);return new t.CanonicalTileID(f,Math.floor((r+a)/2*p),Math.floor((n+i)/2*p))}(n),this.minzoom=this.maxzoom=this.tileID.z;var a=n.map(function(t){return r.tileID.getTilePoint(t)._round()});return this._boundsArray=new t.StructArrayLayout4i8,this._boundsArray.emplaceBack(a[0].x,a[0].y,0,0),this._boundsArray.emplaceBack(a[1].x,a[1].y,t.EXTENT,0),this._boundsArray.emplaceBack(a[3].x,a[3].y,0,t.EXTENT),this._boundsArray.emplaceBack(a[2].x,a[2].y,t.EXTENT,t.EXTENT),this.boundsBuffer&&(this.boundsBuffer.destroy(),delete this.boundsBuffer),this.fire(new t.Event("data",{dataType:"source",sourceDataType:"content"})),this},r.prototype.prepare=function(){if(0!==Object.keys(this.tiles).length&&this.image){var e=this.map.painter.context,r=e.gl;for(var n in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,t.rasterBoundsAttributes.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture||(this.texture=new t.Texture(e,this.image,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this.tiles){var a=this.tiles[n];"loaded"!==a.state&&(a.state="loaded",a.texture=this.texture)}}},r.prototype.loadTile=function(t,e){this.tileID&&this.tileID.equals(t.tileID.canonical)?(this.tiles[String(t.tileID.wrap)]=t,t.buckets={},e(null)):(t.state="errored",e(null))},r.prototype.serialize=function(){return{type:"image",url:this.options.url,coordinates:this.coordinates}},r.prototype.hasTransition=function(){return!1},r}(t.Evented),O=function(e){function r(t,r,n,a){e.call(this,t,r,n,a),this.roundZoom=!0,this.type="video",this.options=r}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){var e=this;this._loaded=!1;var r=this.options;this.urls=[];for(var n=0,a=r.urls;n<a.length;n+=1){var i=a[n];this.urls.push(this.map._requestManager.transformRequest(i,t.ResourceType.Source).url)}t.getVideo(this.urls,function(r,n){e._loaded=!0,r?e.fire(new t.ErrorEvent(r)):n&&(e.video=n,e.video.loop=!0,e.video.addEventListener("playing",function(){e.map.triggerRepaint()}),e.map&&e.video.play(),e._finishLoading())})},r.prototype.pause=function(){this.video&&this.video.pause()},r.prototype.play=function(){this.video&&this.video.play()},r.prototype.seek=function(e){if(this.video){var r=this.video.seekable;e<r.start(0)||e>r.end(0)?this.fire(new t.ErrorEvent(new t.ValidationError("Playback for this video can be set only between the "+r.start(0)+" and "+r.end(0)+"-second mark."))):this.video.currentTime=e}},r.prototype.getVideo=function(){return this.video},r.prototype.onAdd=function(t){this.map||(this.map=t,this.load(),this.video&&(this.video.play(),this.setCoordinates(this.coordinates)))},r.prototype.prepare=function(){if(!(0===Object.keys(this.tiles).length||this.video.readyState<2)){var e=this.map.painter.context,r=e.gl;for(var n in this.boundsBuffer||(this.boundsBuffer=e.createVertexBuffer(this._boundsArray,t.rasterBoundsAttributes.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?this.video.paused||(this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE),r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,this.video)):(this.texture=new t.Texture(e,this.video,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this.tiles){var a=this.tiles[n];"loaded"!==a.state&&(a.state="loaded",a.texture=this.texture)}}},r.prototype.serialize=function(){return{type:"video",urls:this.urls,coordinates:this.coordinates}},r.prototype.hasTransition=function(){return this.video&&!this.video.paused},r}(P),z=function(e){function r(r,n,a,i){e.call(this,r,n,a,i),n.coordinates?Array.isArray(n.coordinates)&&4===n.coordinates.length&&!n.coordinates.some(function(t){return!Array.isArray(t)||2!==t.length||t.some(function(t){return"number"!=typeof t})})||this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'"coordinates" property must be an array of 4 longitude/latitude array pairs'))):this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'missing required property "coordinates"'))),n.animate&&"boolean"!=typeof n.animate&&this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'optional "animate" property must be a boolean value'))),n.canvas?"string"==typeof n.canvas||n.canvas instanceof t.window.HTMLCanvasElement||this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'"canvas" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance'))):this.fire(new t.ErrorEvent(new t.ValidationError("sources."+r,null,'missing required property "canvas"'))),this.options=n,this.animate=void 0===n.animate||n.animate}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.load=function(){this._loaded=!0,this.canvas||(this.canvas=this.options.canvas instanceof t.window.HTMLCanvasElement?this.options.canvas:t.window.document.getElementById(this.options.canvas)),this.width=this.canvas.width,this.height=this.canvas.height,this._hasInvalidDimensions()?this.fire(new t.ErrorEvent(new Error("Canvas dimensions cannot be less than or equal to zero."))):(this.play=function(){this._playing=!0,this.map.triggerRepaint()},this.pause=function(){this._playing&&(this.prepare(),this._playing=!1)},this._finishLoading())},r.prototype.getCanvas=function(){return this.canvas},r.prototype.onAdd=function(t){this.map=t,this.load(),this.canvas&&this.animate&&this.play()},r.prototype.onRemove=function(){this.pause()},r.prototype.prepare=function(){var e=!1;if(this.canvas.width!==this.width&&(this.width=this.canvas.width,e=!0),this.canvas.height!==this.height&&(this.height=this.canvas.height,e=!0),!this._hasInvalidDimensions()&&0!==Object.keys(this.tiles).length){var r=this.map.painter.context,n=r.gl;for(var a in this.boundsBuffer||(this.boundsBuffer=r.createVertexBuffer(this._boundsArray,t.rasterBoundsAttributes.members)),this.boundsSegments||(this.boundsSegments=t.SegmentVector.simpleSegment(0,0,4,2)),this.texture?(e||this._playing)&&this.texture.update(this.canvas,{premultiply:!0}):this.texture=new t.Texture(r,this.canvas,n.RGBA,{premultiply:!0}),this.tiles){var i=this.tiles[a];"loaded"!==i.state&&(i.state="loaded",i.texture=this.texture)}}},r.prototype.serialize=function(){return{type:"canvas",coordinates:this.coordinates}},r.prototype.hasTransition=function(){return this._playing},r.prototype._hasInvalidDimensions=function(){for(var t=0,e=[this.canvas.width,this.canvas.height];t<e.length;t+=1){var r=e[t];if(isNaN(r)||r<=0)return!0}return!1},r}(P),I={vector:S,raster:E,"raster-dem":L,geojson:C,video:O,image:P,canvas:z},D=function(e,r,n,a){var i=new I[r.type](e,r,n,a);if(i.id!==e)throw new Error("Expected Source id to be "+e+" instead of "+i.id);return t.bindAll(["load","abort","unload","serialize","prepare"],i),i};function R(e,r){var n=t.identity([]);return t.translate(n,n,[1,1,0]),t.scale(n,n,[.5*e.width,.5*e.height,1]),t.multiply(n,n,e.calculatePosMatrix(r.toUnwrapped()))}function F(t,e,r,n,a){var i=function(t,e,r){if(t)for(var n=0,a=t;n<a.length;n+=1){var i=e[a[n]];if(i&&i.source===r&&"fill-extrusion"===i.type)return!0}else for(var o in e){var s=e[o];if(s.source===r&&"fill-extrusion"===s.type)return!0}return!1}(n&&n.layers,e,t.id),o=a.maxPitchScaleFactor(),s=t.tilesIn(r,o,i);s.sort(B);for(var l=[],c=0,u=s;c<u.length;c+=1){var h=u[c];l.push({wrappedTileID:h.tileID.wrapped().key,queryResults:h.tile.queryRenderedFeatures(e,t._state,h.queryGeometry,h.cameraQueryGeometry,h.scale,n,a,o,R(t.transform,h.tileID))})}var f=function(t){for(var e={},r={},n=0,a=t;n<a.length;n+=1){var i=a[n],o=i.queryResults,s=i.wrappedTileID,l=r[s]=r[s]||{};for(var c in o)for(var u=o[c],h=l[c]=l[c]||{},f=e[c]=e[c]||[],p=0,d=u;p<d.length;p+=1){var g=d[p];h[g.featureIndex]||(h[g.featureIndex]=!0,f.push(g))}}return e}(l);for(var p in f)f[p].forEach(function(e){var r=e.feature,n=t.getFeatureState(r.layer["source-layer"],r.id);r.source=r.layer.source,r.layer["source-layer"]&&(r.sourceLayer=r.layer["source-layer"]),r.state=n});return f}function B(t,e){var r=t.tileID,n=e.tileID;return r.overscaledZ-n.overscaledZ||r.canonical.y-n.canonical.y||r.wrap-n.wrap||r.canonical.x-n.canonical.x}var N=function(t,e){this.max=t,this.onRemove=e,this.reset()};N.prototype.reset=function(){for(var t in this.data)for(var e=0,r=this.data[t];e<r.length;e+=1){var n=r[e];n.timeout&&clearTimeout(n.timeout),this.onRemove(n.value)}return this.data={},this.order=[],this},N.prototype.add=function(t,e,r){var n=this,a=t.wrapped().key;void 0===this.data[a]&&(this.data[a]=[]);var i={value:e,timeout:void 0};if(void 0!==r&&(i.timeout=setTimeout(function(){n.remove(t,i)},r)),this.data[a].push(i),this.order.push(a),this.order.length>this.max){var o=this._getAndRemoveByKey(this.order[0]);o&&this.onRemove(o)}return this},N.prototype.has=function(t){return t.wrapped().key in this.data},N.prototype.getAndRemove=function(t){return this.has(t)?this._getAndRemoveByKey(t.wrapped().key):null},N.prototype._getAndRemoveByKey=function(t){var e=this.data[t].shift();return e.timeout&&clearTimeout(e.timeout),0===this.data[t].length&&delete this.data[t],this.order.splice(this.order.indexOf(t),1),e.value},N.prototype.get=function(t){return this.has(t)?this.data[t.wrapped().key][0].value:null},N.prototype.remove=function(t,e){if(!this.has(t))return this;var r=t.wrapped().key,n=void 0===e?0:this.data[r].indexOf(e),a=this.data[r][n];return this.data[r].splice(n,1),a.timeout&&clearTimeout(a.timeout),0===this.data[r].length&&delete this.data[r],this.onRemove(a.value),this.order.splice(this.order.indexOf(r),1),this},N.prototype.setMaxSize=function(t){for(this.max=t;this.order.length>this.max;){var e=this._getAndRemoveByKey(this.order[0]);e&&this.onRemove(e)}return this};var j=function(t,e,r){this.context=t;var n=t.gl;this.buffer=n.createBuffer(),this.dynamicDraw=Boolean(r),this.context.unbindVAO(),t.bindElementBuffer.set(this.buffer),n.bufferData(n.ELEMENT_ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?n.DYNAMIC_DRAW:n.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};j.prototype.bind=function(){this.context.bindElementBuffer.set(this.buffer)},j.prototype.updateData=function(t){var e=this.context.gl;this.context.unbindVAO(),this.bind(),e.bufferSubData(e.ELEMENT_ARRAY_BUFFER,0,t.arrayBuffer)},j.prototype.destroy=function(){var t=this.context.gl;this.buffer&&(t.deleteBuffer(this.buffer),delete this.buffer)};var V={Int8:"BYTE",Uint8:"UNSIGNED_BYTE",Int16:"SHORT",Uint16:"UNSIGNED_SHORT",Int32:"INT",Uint32:"UNSIGNED_INT",Float32:"FLOAT"},U=function(t,e,r,n){this.length=e.length,this.attributes=r,this.itemSize=e.bytesPerElement,this.dynamicDraw=n,this.context=t;var a=t.gl;this.buffer=a.createBuffer(),t.bindVertexBuffer.set(this.buffer),a.bufferData(a.ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?a.DYNAMIC_DRAW:a.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};U.prototype.bind=function(){this.context.bindVertexBuffer.set(this.buffer)},U.prototype.updateData=function(t){var e=this.context.gl;this.bind(),e.bufferSubData(e.ARRAY_BUFFER,0,t.arrayBuffer)},U.prototype.enableAttributes=function(t,e){for(var r=0;r<this.attributes.length;r++){var n=this.attributes[r],a=e.attributes[n.name];void 0!==a&&t.enableVertexAttribArray(a)}},U.prototype.setVertexAttribPointers=function(t,e,r){for(var n=0;n<this.attributes.length;n++){var a=this.attributes[n],i=e.attributes[a.name];void 0!==i&&t.vertexAttribPointer(i,a.components,t[V[a.type]],!1,this.itemSize,a.offset+this.itemSize*(r||0))}},U.prototype.destroy=function(){var t=this.context.gl;this.buffer&&(t.deleteBuffer(this.buffer),delete this.buffer)};var q=function(t){this.gl=t.gl,this.default=this.getDefault(),this.current=this.default,this.dirty=!1};q.prototype.get=function(){return this.current},q.prototype.set=function(t){},q.prototype.getDefault=function(){return this.default},q.prototype.setDefault=function(){this.set(this.default)};var H=function(e){function r(){e.apply(this,arguments)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getDefault=function(){return t.Color.transparent},r.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.clearColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1)},r}(q),G=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 1},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearDepth(t),this.current=t,this.dirty=!1)},e}(q),Y=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.clearStencil(t),this.current=t,this.dirty=!1)},e}(q),W=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return[!0,!0,!0,!0]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.colorMask(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1)},e}(q),X=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthMask(t),this.current=t,this.dirty=!1)},e}(q),Z=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 255},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.stencilMask(t),this.current=t,this.dirty=!1)},e}(q),J=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return{func:this.gl.ALWAYS,ref:0,mask:255}},e.prototype.set=function(t){var e=this.current;(t.func!==e.func||t.ref!==e.ref||t.mask!==e.mask||this.dirty)&&(this.gl.stencilFunc(t.func,t.ref,t.mask),this.current=t,this.dirty=!1)},e}(q),K=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[t.KEEP,t.KEEP,t.KEEP]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||this.dirty)&&(this.gl.stencilOp(t[0],t[1],t[2]),this.current=t,this.dirty=!1)},e}(q),Q=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.STENCIL_TEST):e.disable(e.STENCIL_TEST),this.current=t,this.dirty=!1}},e}(q),$=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return[0,1]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.depthRange(t[0],t[1]),this.current=t,this.dirty=!1)},e}(q),tt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.DEPTH_TEST):e.disable(e.DEPTH_TEST),this.current=t,this.dirty=!1}},e}(q),et=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.LESS},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.depthFunc(t),this.current=t,this.dirty=!1)},e}(q),rt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.BLEND):e.disable(e.BLEND),this.current=t,this.dirty=!1}},e}(q),nt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[t.ONE,t.ZERO]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||this.dirty)&&(this.gl.blendFunc(t[0],t[1]),this.current=t,this.dirty=!1)},e}(q),at=function(e){function r(){e.apply(this,arguments)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getDefault=function(){return t.Color.transparent},r.prototype.set=function(t){var e=this.current;(t.r!==e.r||t.g!==e.g||t.b!==e.b||t.a!==e.a||this.dirty)&&(this.gl.blendColor(t.r,t.g,t.b,t.a),this.current=t,this.dirty=!1)},r}(q),it=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.FUNC_ADD},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.blendEquation(t),this.current=t,this.dirty=!1)},e}(q),ot=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;t?e.enable(e.CULL_FACE):e.disable(e.CULL_FACE),this.current=t,this.dirty=!1}},e}(q),st=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.BACK},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.cullFace(t),this.current=t,this.dirty=!1)},e}(q),lt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.CCW},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.frontFace(t),this.current=t,this.dirty=!1)},e}(q),ct=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.useProgram(t),this.current=t,this.dirty=!1)},e}(q),ut=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return this.gl.TEXTURE0},e.prototype.set=function(t){(t!==this.current||this.dirty)&&(this.gl.activeTexture(t),this.current=t,this.dirty=!1)},e}(q),ht=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){var t=this.gl;return[0,0,t.drawingBufferWidth,t.drawingBufferHeight]},e.prototype.set=function(t){var e=this.current;(t[0]!==e[0]||t[1]!==e[1]||t[2]!==e[2]||t[3]!==e[3]||this.dirty)&&(this.gl.viewport(t[0],t[1],t[2],t[3]),this.current=t,this.dirty=!1)},e}(q),ft=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindFramebuffer(e.FRAMEBUFFER,t),this.current=t,this.dirty=!1}},e}(q),pt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindRenderbuffer(e.RENDERBUFFER,t),this.current=t,this.dirty=!1}},e}(q),dt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindTexture(e.TEXTURE_2D,t),this.current=t,this.dirty=!1}},e}(q),gt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.bindBuffer(e.ARRAY_BUFFER,t),this.current=t,this.dirty=!1}},e}(q),vt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){var e=this.gl;e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t),this.current=t,this.dirty=!1},e}(q),mt=function(t){function e(e){t.call(this,e),this.vao=e.extVertexArrayObject}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e.prototype.set=function(t){this.vao&&(t!==this.current||this.dirty)&&(this.vao.bindVertexArrayOES(t),this.current=t,this.dirty=!1)},e}(q),yt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return 4},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_ALIGNMENT,t),this.current=t,this.dirty=!1}},e}(q),xt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t),this.current=t,this.dirty=!1}},e}(q),bt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return!1},e.prototype.set=function(t){if(t!==this.current||this.dirty){var e=this.gl;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,t),this.current=t,this.dirty=!1}},e}(q),_t=function(t){function e(e,r){t.call(this,e),this.context=e,this.parent=r}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.getDefault=function(){return null},e}(q),wt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.setDirty=function(){this.dirty=!0},e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0),this.current=t,this.dirty=!1}},e}(_t),kt=function(t){function e(){t.apply(this,arguments)}return t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e,e.prototype.set=function(t){if(t!==this.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e=this.gl;e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,t),this.current=t,this.dirty=!1}},e}(_t),Tt=function(t,e,r){this.context=t,this.width=e,this.height=r;var n=t.gl,a=this.framebuffer=n.createFramebuffer();this.colorAttachment=new wt(t,a),this.depthAttachment=new kt(t,a)};Tt.prototype.destroy=function(){var t=this.context.gl,e=this.colorAttachment.get();e&&t.deleteTexture(e);var r=this.depthAttachment.get();r&&t.deleteRenderbuffer(r),t.deleteFramebuffer(this.framebuffer)};var Mt=function(t,e,r){this.func=t,this.mask=e,this.range=r};Mt.ReadOnly=!1,Mt.ReadWrite=!0,Mt.disabled=new Mt(519,Mt.ReadOnly,[0,1]);var At=function(t,e,r,n,a,i){this.test=t,this.ref=e,this.mask=r,this.fail=n,this.depthFail=a,this.pass=i};At.disabled=new At({func:519,mask:0},0,0,7680,7680,7680);var St=function(t,e,r){this.blendFunction=t,this.blendColor=e,this.mask=r};St.disabled=new St(St.Replace=[1,0],t.Color.transparent,[!1,!1,!1,!1]),St.unblended=new St(St.Replace,t.Color.transparent,[!0,!0,!0,!0]),St.alphaBlended=new St([1,771],t.Color.transparent,[!0,!0,!0,!0]);var Et=function(t,e,r){this.enable=t,this.mode=e,this.frontFace=r};Et.disabled=new Et(!1,1029,2305),Et.backCCW=new Et(!0,1029,2305);var Lt=function(t){this.gl=t,this.extVertexArrayObject=this.gl.getExtension("OES_vertex_array_object"),this.clearColor=new H(this),this.clearDepth=new G(this),this.clearStencil=new Y(this),this.colorMask=new W(this),this.depthMask=new X(this),this.stencilMask=new Z(this),this.stencilFunc=new J(this),this.stencilOp=new K(this),this.stencilTest=new Q(this),this.depthRange=new $(this),this.depthTest=new tt(this),this.depthFunc=new et(this),this.blend=new rt(this),this.blendFunc=new nt(this),this.blendColor=new at(this),this.blendEquation=new it(this),this.cullFace=new ot(this),this.cullFaceSide=new st(this),this.frontFace=new lt(this),this.program=new ct(this),this.activeTexture=new ut(this),this.viewport=new ht(this),this.bindFramebuffer=new ft(this),this.bindRenderbuffer=new pt(this),this.bindTexture=new dt(this),this.bindVertexBuffer=new gt(this),this.bindElementBuffer=new vt(this),this.bindVertexArrayOES=this.extVertexArrayObject&&new mt(this),this.pixelStoreUnpack=new yt(this),this.pixelStoreUnpackPremultiplyAlpha=new xt(this),this.pixelStoreUnpackFlipY=new bt(this),this.extTextureFilterAnisotropic=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic"),this.extTextureFilterAnisotropic&&(this.extTextureFilterAnisotropicMax=t.getParameter(this.extTextureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT)),this.extTextureHalfFloat=t.getExtension("OES_texture_half_float"),this.extTextureHalfFloat&&t.getExtension("OES_texture_half_float_linear")};Lt.prototype.setDefault=function(){this.unbindVAO(),this.clearColor.setDefault(),this.clearDepth.setDefault(),this.clearStencil.setDefault(),this.colorMask.setDefault(),this.depthMask.setDefault(),this.stencilMask.setDefault(),this.stencilFunc.setDefault(),this.stencilOp.setDefault(),this.stencilTest.setDefault(),this.depthRange.setDefault(),this.depthTest.setDefault(),this.depthFunc.setDefault(),this.blend.setDefault(),this.blendFunc.setDefault(),this.blendColor.setDefault(),this.blendEquation.setDefault(),this.cullFace.setDefault(),this.cullFaceSide.setDefault(),this.frontFace.setDefault(),this.program.setDefault(),this.activeTexture.setDefault(),this.bindFramebuffer.setDefault(),this.pixelStoreUnpack.setDefault(),this.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.pixelStoreUnpackFlipY.setDefault()},Lt.prototype.setDirty=function(){this.clearColor.dirty=!0,this.clearDepth.dirty=!0,this.clearStencil.dirty=!0,this.colorMask.dirty=!0,this.depthMask.dirty=!0,this.stencilMask.dirty=!0,this.stencilFunc.dirty=!0,this.stencilOp.dirty=!0,this.stencilTest.dirty=!0,this.depthRange.dirty=!0,this.depthTest.dirty=!0,this.depthFunc.dirty=!0,this.blend.dirty=!0,this.blendFunc.dirty=!0,this.blendColor.dirty=!0,this.blendEquation.dirty=!0,this.cullFace.dirty=!0,this.cullFaceSide.dirty=!0,this.frontFace.dirty=!0,this.program.dirty=!0,this.activeTexture.dirty=!0,this.viewport.dirty=!0,this.bindFramebuffer.dirty=!0,this.bindRenderbuffer.dirty=!0,this.bindTexture.dirty=!0,this.bindVertexBuffer.dirty=!0,this.bindElementBuffer.dirty=!0,this.extVertexArrayObject&&(this.bindVertexArrayOES.dirty=!0),this.pixelStoreUnpack.dirty=!0,this.pixelStoreUnpackPremultiplyAlpha.dirty=!0,this.pixelStoreUnpackFlipY.dirty=!0},Lt.prototype.createIndexBuffer=function(t,e){return new j(this,t,e)},Lt.prototype.createVertexBuffer=function(t,e,r){return new U(this,t,e,r)},Lt.prototype.createRenderbuffer=function(t,e,r){var n=this.gl,a=n.createRenderbuffer();return this.bindRenderbuffer.set(a),n.renderbufferStorage(n.RENDERBUFFER,t,e,r),this.bindRenderbuffer.set(null),a},Lt.prototype.createFramebuffer=function(t,e){return new Tt(this,t,e)},Lt.prototype.clear=function(t){var e=t.color,r=t.depth,n=this.gl,a=0;e&&(a|=n.COLOR_BUFFER_BIT,this.clearColor.set(e),this.colorMask.set([!0,!0,!0,!0])),void 0!==r&&(a|=n.DEPTH_BUFFER_BIT,this.depthRange.set([0,1]),this.clearDepth.set(r),this.depthMask.set(!0)),n.clear(a)},Lt.prototype.setCullFace=function(t){!1===t.enable?this.cullFace.set(!1):(this.cullFace.set(!0),this.cullFaceSide.set(t.mode),this.frontFace.set(t.frontFace))},Lt.prototype.setDepthMode=function(t){t.func!==this.gl.ALWAYS||t.mask?(this.depthTest.set(!0),this.depthFunc.set(t.func),this.depthMask.set(t.mask),this.depthRange.set(t.range)):this.depthTest.set(!1)},Lt.prototype.setStencilMode=function(t){t.test.func!==this.gl.ALWAYS||t.mask?(this.stencilTest.set(!0),this.stencilMask.set(t.mask),this.stencilOp.set([t.fail,t.depthFail,t.pass]),this.stencilFunc.set({func:t.test.func,ref:t.ref,mask:t.test.mask})):this.stencilTest.set(!1)},Lt.prototype.setColorMode=function(e){t.deepEqual(e.blendFunction,St.Replace)?this.blend.set(!1):(this.blend.set(!0),this.blendFunc.set(e.blendFunction),this.blendColor.set(e.blendColor)),this.colorMask.set(e.mask)},Lt.prototype.unbindVAO=function(){this.extVertexArrayObject&&this.bindVertexArrayOES.set(null)};var Ct=function(e){function r(r,n,a){var i=this;e.call(this),this.id=r,this.dispatcher=a,this.on("data",function(t){"source"===t.dataType&&"metadata"===t.sourceDataType&&(i._sourceLoaded=!0),i._sourceLoaded&&!i._paused&&"source"===t.dataType&&"content"===t.sourceDataType&&(i.reload(),i.transform&&i.update(i.transform))}),this.on("error",function(){i._sourceErrored=!0}),this._source=D(r,n,a,this),this._tiles={},this._cache=new N(0,this._unloadTile.bind(this)),this._timers={},this._cacheTimers={},this._maxTileCacheSize=null,this._coveredTiles={},this._state=new t.SourceFeatureState}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.onAdd=function(t){this.map=t,this._maxTileCacheSize=t?t._maxTileCacheSize:null,this._source&&this._source.onAdd&&this._source.onAdd(t)},r.prototype.onRemove=function(t){this._source&&this._source.onRemove&&this._source.onRemove(t)},r.prototype.loaded=function(){if(this._sourceErrored)return!0;if(!this._sourceLoaded)return!1;if(!this._source.loaded())return!1;for(var t in this._tiles){var e=this._tiles[t];if("loaded"!==e.state&&"errored"!==e.state)return!1}return!0},r.prototype.getSource=function(){return this._source},r.prototype.pause=function(){this._paused=!0},r.prototype.resume=function(){if(this._paused){var t=this._shouldReloadOnResume;this._paused=!1,this._shouldReloadOnResume=!1,t&&this.reload(),this.transform&&this.update(this.transform)}},r.prototype._loadTile=function(t,e){return this._source.loadTile(t,e)},r.prototype._unloadTile=function(t){if(this._source.unloadTile)return this._source.unloadTile(t,function(){})},r.prototype._abortTile=function(t){if(this._source.abortTile)return this._source.abortTile(t,function(){})},r.prototype.serialize=function(){return this._source.serialize()},r.prototype.prepare=function(t){for(var e in this._source.prepare&&this._source.prepare(),this._state.coalesceChanges(this._tiles,this.map?this.map.painter:null),this._tiles){var r=this._tiles[e];r.upload(t),r.prepare(this.map.style.imageManager)}},r.prototype.getIds=function(){return Object.keys(this._tiles).map(Number).sort(Pt)},r.prototype.getRenderableIds=function(e){var r=this,n=[];for(var a in this._tiles)this._isIdRenderable(+a,e)&&n.push(+a);return e?n.sort(function(e,n){var a=r._tiles[e].tileID,i=r._tiles[n].tileID,o=new t.Point(a.canonical.x,a.canonical.y)._rotate(r.transform.angle),s=new t.Point(i.canonical.x,i.canonical.y)._rotate(r.transform.angle);return a.overscaledZ-i.overscaledZ||s.y-o.y||s.x-o.x}):n.sort(Pt)},r.prototype.hasRenderableParent=function(t){var e=this.findLoadedParent(t,0);return!!e&&this._isIdRenderable(e.tileID.key)},r.prototype._isIdRenderable=function(t,e){return this._tiles[t]&&this._tiles[t].hasData()&&!this._coveredTiles[t]&&(e||!this._tiles[t].holdingForFade())},r.prototype.reload=function(){if(this._paused)this._shouldReloadOnResume=!0;else for(var t in this._cache.reset(),this._tiles)"errored"!==this._tiles[t].state&&this._reloadTile(t,"reloading")},r.prototype._reloadTile=function(t,e){var r=this._tiles[t];r&&("loading"!==r.state&&(r.state=e),this._loadTile(r,this._tileLoaded.bind(this,r,t,e)))},r.prototype._tileLoaded=function(e,r,n,a){if(a)return e.state="errored",void(404!==a.status?this._source.fire(new t.ErrorEvent(a,{tile:e})):this.update(this.transform));e.timeAdded=t.browser.now(),"expired"===n&&(e.refreshedUponExpiration=!0),this._setTileReloadTimer(r,e),"raster-dem"===this.getSource().type&&e.dem&&this._backfillDEM(e),this._state.initializeTileState(e,this.map?this.map.painter:null),this._source.fire(new t.Event("data",{dataType:"source",tile:e,coord:e.tileID}))},r.prototype._backfillDEM=function(t){for(var e=this.getRenderableIds(),r=0;r<e.length;r++){var n=e[r];if(t.neighboringTiles&&t.neighboringTiles[n]){var a=this.getTileByID(n);i(t,a),i(a,t)}}function i(t,e){t.needsHillshadePrepare=!0;var r=e.tileID.canonical.x-t.tileID.canonical.x,n=e.tileID.canonical.y-t.tileID.canonical.y,a=Math.pow(2,t.tileID.canonical.z),i=e.tileID.key;0===r&&0===n||Math.abs(n)>1||(Math.abs(r)>1&&(1===Math.abs(r+a)?r+=a:1===Math.abs(r-a)&&(r-=a)),e.dem&&t.dem&&(t.dem.backfillBorder(e.dem,r,n),t.neighboringTiles&&t.neighboringTiles[i]&&(t.neighboringTiles[i].backfilled=!0)))}},r.prototype.getTile=function(t){return this.getTileByID(t.key)},r.prototype.getTileByID=function(t){return this._tiles[t]},r.prototype.getZoom=function(t){return t.zoom+t.scaleZoom(t.tileSize/this._source.tileSize)},r.prototype._retainLoadedChildren=function(t,e,r,n){for(var a in this._tiles){var i=this._tiles[a];if(!(n[a]||!i.hasData()||i.tileID.overscaledZ<=e||i.tileID.overscaledZ>r)){for(var o=i.tileID;i&&i.tileID.overscaledZ>e+1;){var s=i.tileID.scaledTo(i.tileID.overscaledZ-1);(i=this._tiles[s.key])&&i.hasData()&&(o=s)}for(var l=o;l.overscaledZ>e;)if(t[(l=l.scaledTo(l.overscaledZ-1)).key]){n[o.key]=o;break}}}},r.prototype.findLoadedParent=function(t,e){for(var r=t.overscaledZ-1;r>=e;r--){var n=t.scaledTo(r);if(!n)return;var a=String(n.key),i=this._tiles[a];if(i&&i.hasData())return i;if(this._cache.has(n))return this._cache.get(n)}},r.prototype.updateCacheSize=function(t){var e=(Math.ceil(t.width/this._source.tileSize)+1)*(Math.ceil(t.height/this._source.tileSize)+1),r=Math.floor(5*e),n="number"==typeof this._maxTileCacheSize?Math.min(this._maxTileCacheSize,r):r;this._cache.setMaxSize(n)},r.prototype.handleWrapJump=function(t){var e=(t-(void 0===this._prevLng?t:this._prevLng))/360,r=Math.round(e);if(this._prevLng=t,r){var n={};for(var a in this._tiles){var i=this._tiles[a];i.tileID=i.tileID.unwrapTo(i.tileID.wrap+r),n[i.tileID.key]=i}for(var o in this._tiles=n,this._timers)clearTimeout(this._timers[o]),delete this._timers[o];for(var s in this._tiles){var l=this._tiles[s];this._setTileReloadTimer(s,l)}}},r.prototype.update=function(e){var n=this;if(this.transform=e,this._sourceLoaded&&!this._paused){var a;this.updateCacheSize(e),this.handleWrapJump(this.transform.center.lng),this._coveredTiles={},this.used?this._source.tileID?a=e.getVisibleUnwrappedCoordinates(this._source.tileID).map(function(e){return new t.OverscaledTileID(e.canonical.z,e.wrap,e.canonical.z,e.canonical.x,e.canonical.y)}):(a=e.coveringTiles({tileSize:this._source.tileSize,minzoom:this._source.minzoom,maxzoom:this._source.maxzoom,roundZoom:this._source.roundZoom,reparseOverscaled:this._source.reparseOverscaled}),this._source.hasTile&&(a=a.filter(function(t){return n._source.hasTile(t)}))):a=[];var i=(this._source.roundZoom?Math.round:Math.floor)(this.getZoom(e)),o=Math.max(i-r.maxOverzooming,this._source.minzoom),s=Math.max(i+r.maxUnderzooming,this._source.minzoom),l=this._updateRetainedTiles(a,i);if(Ot(this._source.type)){for(var c={},u={},h=0,f=Object.keys(l);h<f.length;h+=1){var p=f[h],d=l[p],g=this._tiles[p];if(g&&!(g.fadeEndTime&&g.fadeEndTime<=t.browser.now())){var v=this.findLoadedParent(d,o);v&&(this._addTile(v.tileID),c[v.tileID.key]=v.tileID),u[p]=d}}for(var m in this._retainLoadedChildren(u,i,s,l),c)l[m]||(this._coveredTiles[m]=!0,l[m]=c[m])}for(var y in l)this._tiles[y].clearFadeHold();for(var x=0,b=t.keysDifference(this._tiles,l);x<b.length;x+=1){var _=b[x],w=this._tiles[_];w.hasSymbolBuckets&&!w.holdingForFade()?w.setHoldDuration(this.map._fadeDuration):w.hasSymbolBuckets&&!w.symbolFadeFinished()||this._removeTile(_)}}},r.prototype.releaseSymbolFadeTiles=function(){for(var t in this._tiles)this._tiles[t].holdingForFade()&&this._removeTile(t)},r.prototype._updateRetainedTiles=function(t,e){for(var n={},a={},i=Math.max(e-r.maxOverzooming,this._source.minzoom),o=Math.max(e+r.maxUnderzooming,this._source.minzoom),s={},l=0,c=t;l<c.length;l+=1){var u=c[l],h=this._addTile(u);n[u.key]=u,h.hasData()||e<this._source.maxzoom&&(s[u.key]=u)}this._retainLoadedChildren(s,e,o,n);for(var f=0,p=t;f<p.length;f+=1){var d=p[f],g=this._tiles[d.key];if(!g.hasData()){if(e+1>this._source.maxzoom){var v=d.children(this._source.maxzoom)[0],m=this.getTile(v);if(m&&m.hasData()){n[v.key]=v;continue}}else{var y=d.children(this._source.maxzoom);if(n[y[0].key]&&n[y[1].key]&&n[y[2].key]&&n[y[3].key])continue}for(var x=g.wasRequested(),b=d.overscaledZ-1;b>=i;--b){var _=d.scaledTo(b);if(a[_.key])break;if(a[_.key]=!0,!(g=this.getTile(_))&&x&&(g=this._addTile(_)),g&&(n[_.key]=_,x=g.wasRequested(),g.hasData()))break}}}return n},r.prototype._addTile=function(e){var r=this._tiles[e.key];if(r)return r;(r=this._cache.getAndRemove(e))&&(this._setTileReloadTimer(e.key,r),r.tileID=e,this._state.initializeTileState(r,this.map?this.map.painter:null),this._cacheTimers[e.key]&&(clearTimeout(this._cacheTimers[e.key]),delete this._cacheTimers[e.key],this._setTileReloadTimer(e.key,r)));var n=Boolean(r);return n||(r=new t.Tile(e,this._source.tileSize*e.overscaleFactor()),this._loadTile(r,this._tileLoaded.bind(this,r,e.key,r.state))),r?(r.uses++,this._tiles[e.key]=r,n||this._source.fire(new t.Event("dataloading",{tile:r,coord:r.tileID,dataType:"source"})),r):null},r.prototype._setTileReloadTimer=function(t,e){var r=this;t in this._timers&&(clearTimeout(this._timers[t]),delete this._timers[t]);var n=e.getExpiryTimeout();n&&(this._timers[t]=setTimeout(function(){r._reloadTile(t,"expired"),delete r._timers[t]},n))},r.prototype._removeTile=function(t){var e=this._tiles[t];e&&(e.uses--,delete this._tiles[t],this._timers[t]&&(clearTimeout(this._timers[t]),delete this._timers[t]),e.uses>0||(e.hasData()&&"reloading"!==e.state?this._cache.add(e.tileID,e,e.getExpiryTimeout()):(e.aborted=!0,this._abortTile(e),this._unloadTile(e))))},r.prototype.clearTiles=function(){for(var t in this._shouldReloadOnResume=!1,this._paused=!1,this._tiles)this._removeTile(t);this._cache.reset()},r.prototype.tilesIn=function(e,r,n){var a=this,i=[],o=this.transform;if(!o)return i;for(var s=n?o.getCameraQueryGeometry(e):e,l=e.map(function(t){return o.pointCoordinate(t)}),c=s.map(function(t){return o.pointCoordinate(t)}),u=this.getIds(),h=1/0,f=1/0,p=-1/0,d=-1/0,g=0,v=c;g<v.length;g+=1){var m=v[g];h=Math.min(h,m.x),f=Math.min(f,m.y),p=Math.max(p,m.x),d=Math.max(d,m.y)}for(var y=function(e){var n=a._tiles[u[e]];if(!n.holdingForFade()){var s=n.tileID,g=Math.pow(2,o.zoom-n.tileID.overscaledZ),v=r*n.queryPadding*t.EXTENT/n.tileSize/g,m=[s.getTilePoint(new t.MercatorCoordinate(h,f)),s.getTilePoint(new t.MercatorCoordinate(p,d))];if(m[0].x-v<t.EXTENT&&m[0].y-v<t.EXTENT&&m[1].x+v>=0&&m[1].y+v>=0){var y=l.map(function(t){return s.getTilePoint(t)}),x=c.map(function(t){return s.getTilePoint(t)});i.push({tile:n,tileID:s,queryGeometry:y,cameraQueryGeometry:x,scale:g})}}},x=0;x<u.length;x++)y(x);return i},r.prototype.getVisibleCoordinates=function(t){for(var e=this,r=this.getRenderableIds(t).map(function(t){return e._tiles[t].tileID}),n=0,a=r;n<a.length;n+=1){var i=a[n];i.posMatrix=this.transform.calculatePosMatrix(i.toUnwrapped())}return r},r.prototype.hasTransition=function(){if(this._source.hasTransition())return!0;if(Ot(this._source.type))for(var e in this._tiles){var r=this._tiles[e];if(void 0!==r.fadeEndTime&&r.fadeEndTime>=t.browser.now())return!0}return!1},r.prototype.setFeatureState=function(t,e,r){t=t||"_geojsonTileLayer",this._state.updateState(t,e,r)},r.prototype.removeFeatureState=function(t,e,r){t=t||"_geojsonTileLayer",this._state.removeFeatureState(t,e,r)},r.prototype.getFeatureState=function(t,e){return t=t||"_geojsonTileLayer",this._state.getState(t,e)},r}(t.Evented);function Pt(t,e){return t%32-e%32||e-t}function Ot(t){return"raster"===t||"image"===t||"video"===t}function zt(){return new t.window.Worker($n.workerUrl)}Ct.maxOverzooming=10,Ct.maxUnderzooming=3;var It=function(){this.active={}};It.prototype.acquire=function(t){if(!this.workers)for(this.workers=[];this.workers.length<It.workerCount;)this.workers.push(new zt);return this.active[t]=!0,this.workers.slice()},It.prototype.release=function(t){delete this.active[t],0===Object.keys(this.active).length&&(this.workers.forEach(function(t){t.terminate()}),this.workers=null)};var Dt,Rt=Math.floor(t.browser.hardwareConcurrency/2);function Ft(e,r){var n={};for(var a in e)"ref"!==a&&(n[a]=e[a]);return t.refProperties.forEach(function(t){t in r&&(n[t]=r[t])}),n}function Bt(t){t=t.slice();for(var e=Object.create(null),r=0;r<t.length;r++)e[t[r].id]=t[r];for(var n=0;n<t.length;n++)"ref"in t[n]&&(t[n]=Ft(t[n],e[t[n].ref]));return t}It.workerCount=Math.max(Math.min(Rt,6),1);var Nt={setStyle:"setStyle",addLayer:"addLayer",removeLayer:"removeLayer",setPaintProperty:"setPaintProperty",setLayoutProperty:"setLayoutProperty",setFilter:"setFilter",addSource:"addSource",removeSource:"removeSource",setGeoJSONSourceData:"setGeoJSONSourceData",setLayerZoomRange:"setLayerZoomRange",setLayerProperty:"setLayerProperty",setCenter:"setCenter",setZoom:"setZoom",setBearing:"setBearing",setPitch:"setPitch",setSprite:"setSprite",setGlyphs:"setGlyphs",setTransition:"setTransition",setLight:"setLight"};function jt(t,e,r){r.push({command:Nt.addSource,args:[t,e[t]]})}function Vt(t,e,r){e.push({command:Nt.removeSource,args:[t]}),r[t]=!0}function Ut(t,e,r,n){Vt(t,r,n),jt(t,e,r)}function qt(e,r,n){var a;for(a in e[n])if(e[n].hasOwnProperty(a)&&"data"!==a&&!t.deepEqual(e[n][a],r[n][a]))return!1;for(a in r[n])if(r[n].hasOwnProperty(a)&&"data"!==a&&!t.deepEqual(e[n][a],r[n][a]))return!1;return!0}function Ht(e,r,n,a,i,o){var s;for(s in r=r||{},e=e||{})e.hasOwnProperty(s)&&(t.deepEqual(e[s],r[s])||n.push({command:o,args:[a,s,r[s],i]}));for(s in r)r.hasOwnProperty(s)&&!e.hasOwnProperty(s)&&(t.deepEqual(e[s],r[s])||n.push({command:o,args:[a,s,r[s],i]}))}function Gt(t){return t.id}function Yt(t,e){return t[e.id]=e,t}var Wt=function(t,e,r){var n=this.boxCells=[],a=this.circleCells=[];this.xCellCount=Math.ceil(t/r),this.yCellCount=Math.ceil(e/r);for(var i=0;i<this.xCellCount*this.yCellCount;i++)n.push([]),a.push([]);this.circleKeys=[],this.boxKeys=[],this.bboxes=[],this.circles=[],this.width=t,this.height=e,this.xScale=this.xCellCount/t,this.yScale=this.yCellCount/e,this.boxUid=0,this.circleUid=0};function Xt(e,r,n,a,i){var o=t.create();return r?(t.scale(o,o,[1/i,1/i,1]),n||t.rotateZ(o,o,a.angle)):t.multiply(o,a.labelPlaneMatrix,e),o}function Zt(e,r,n,a,i){if(r){var o=t.clone(e);return t.scale(o,o,[i,i,1]),n||t.rotateZ(o,o,-a.angle),o}return a.glCoordMatrix}function Jt(e,r){var n=[e.x,e.y,0,1];oe(n,n,r);var a=n[3];return{point:new t.Point(n[0]/a,n[1]/a),signedDistanceFromCamera:a}}function Kt(t,e){var r=t[0]/t[3],n=t[1]/t[3];return r>=-e[0]&&r<=e[0]&&n>=-e[1]&&n<=e[1]}function Qt(e,r,n,a,i,o,s,l){var c=a?e.textSizeData:e.iconSizeData,u=t.evaluateSizeForZoom(c,n.transform.zoom),h=[256/n.width*2+1,256/n.height*2+1],f=a?e.text.dynamicLayoutVertexArray:e.icon.dynamicLayoutVertexArray;f.clear();for(var p=e.lineVertexArray,d=a?e.text.placedSymbolArray:e.icon.placedSymbolArray,g=n.transform.width/n.transform.height,v=!1,m=0;m<d.length;m++){var y=d.get(m);if(y.hidden||y.writingMode===t.WritingMode.vertical&&!v)ie(y.numGlyphs,f);else{v=!1;var x=[y.anchorX,y.anchorY,0,1];if(t.transformMat4(x,x,r),Kt(x,h)){var b=.5+x[3]/n.transform.cameraToCenterDistance*.5,_=t.evaluateSizeForFeature(c,u,y),w=s?_*b:_/b,k=new t.Point(y.anchorX,y.anchorY),T=Jt(k,i).point,M={},A=ee(y,w,!1,l,r,i,o,e.glyphOffsetArray,p,f,T,k,M,g);v=A.useVertical,(A.notEnoughRoom||v||A.needsFlipping&&ee(y,w,!0,l,r,i,o,e.glyphOffsetArray,p,f,T,k,M,g).notEnoughRoom)&&ie(y.numGlyphs,f)}else ie(y.numGlyphs,f)}}a?e.text.dynamicLayoutVertexBuffer.updateData(f):e.icon.dynamicLayoutVertexBuffer.updateData(f)}function $t(t,e,r,n,a,i,o,s,l,c,u,h){var f=s.glyphStartIndex+s.numGlyphs,p=s.lineStartIndex,d=s.lineStartIndex+s.lineLength,g=e.getoffsetX(s.glyphStartIndex),v=e.getoffsetX(f-1),m=ne(t*g,r,n,a,i,o,s.segment,p,d,l,c,u,h);if(!m)return null;var y=ne(t*v,r,n,a,i,o,s.segment,p,d,l,c,u,h);return y?{first:m,last:y}:null}function te(e,r,n,a){return e===t.WritingMode.horizontal&&Math.abs(n.y-r.y)>Math.abs(n.x-r.x)*a?{useVertical:!0}:(e===t.WritingMode.vertical?r.y<n.y:r.x>n.x)?{needsFlipping:!0}:null}function ee(e,r,n,a,i,o,s,l,c,u,h,f,p,d){var g,v=r/24,m=e.lineOffsetX*v,y=e.lineOffsetY*v;if(e.numGlyphs>1){var x=e.glyphStartIndex+e.numGlyphs,b=e.lineStartIndex,_=e.lineStartIndex+e.lineLength,w=$t(v,l,m,y,n,h,f,e,c,o,p,!1);if(!w)return{notEnoughRoom:!0};var k=Jt(w.first.point,s).point,T=Jt(w.last.point,s).point;if(a&&!n){var M=te(e.writingMode,k,T,d);if(M)return M}g=[w.first];for(var A=e.glyphStartIndex+1;A<x-1;A++)g.push(ne(v*l.getoffsetX(A),m,y,n,h,f,e.segment,b,_,c,o,p,!1));g.push(w.last)}else{if(a&&!n){var S=Jt(f,i).point,E=e.lineStartIndex+e.segment+1,L=new t.Point(c.getx(E),c.gety(E)),C=Jt(L,i),P=C.signedDistanceFromCamera>0?C.point:re(f,L,S,1,i),O=te(e.writingMode,S,P,d);if(O)return O}var z=ne(v*l.getoffsetX(e.glyphStartIndex),m,y,n,h,f,e.segment,e.lineStartIndex,e.lineStartIndex+e.lineLength,c,o,p,!1);if(!z)return{notEnoughRoom:!0};g=[z]}for(var I=0,D=g;I<D.length;I+=1){var R=D[I];t.addDynamicAttributes(u,R.point,R.angle)}return{}}function re(t,e,r,n,a){var i=Jt(t.add(t.sub(e)._unit()),a).point,o=r.sub(i);return r.add(o._mult(n/o.mag()))}function ne(e,r,n,a,i,o,s,l,c,u,h,f,p){var d=a?e-r:e+r,g=d>0?1:-1,v=0;a&&(g*=-1,v=Math.PI),g<0&&(v+=Math.PI);for(var m=g>0?l+s:l+s+1,y=m,x=i,b=i,_=0,w=0,k=Math.abs(d);_+w<=k;){if((m+=g)<l||m>=c)return null;if(b=x,void 0===(x=f[m])){var T=new t.Point(u.getx(m),u.gety(m)),M=Jt(T,h);if(M.signedDistanceFromCamera>0)x=f[m]=M.point;else{var A=m-g;x=re(0===_?o:new t.Point(u.getx(A),u.gety(A)),T,b,k-_+1,h)}}_+=w,w=b.dist(x)}var S=(k-_)/w,E=x.sub(b),L=E.mult(S)._add(b);return L._add(E._unit()._perp()._mult(n*g)),{point:L,angle:v+Math.atan2(x.y-b.y,x.x-b.x),tileDistance:p?{prevTileDistance:m-g===y?0:u.gettileUnitDistanceFromAnchor(m-g),lastSegmentViewportDistance:k-_}:null}}Wt.prototype.keysLength=function(){return this.boxKeys.length+this.circleKeys.length},Wt.prototype.insert=function(t,e,r,n,a){this._forEachCell(e,r,n,a,this._insertBoxCell,this.boxUid++),this.boxKeys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(n),this.bboxes.push(a)},Wt.prototype.insertCircle=function(t,e,r,n){this._forEachCell(e-n,r-n,e+n,r+n,this._insertCircleCell,this.circleUid++),this.circleKeys.push(t),this.circles.push(e),this.circles.push(r),this.circles.push(n)},Wt.prototype._insertBoxCell=function(t,e,r,n,a,i){this.boxCells[a].push(i)},Wt.prototype._insertCircleCell=function(t,e,r,n,a,i){this.circleCells[a].push(i)},Wt.prototype._query=function(t,e,r,n,a,i){if(r<0||t>this.width||n<0||e>this.height)return!a&&[];var o=[];if(t<=0&&e<=0&&this.width<=r&&this.height<=n){if(a)return!0;for(var s=0;s<this.boxKeys.length;s++)o.push({key:this.boxKeys[s],x1:this.bboxes[4*s],y1:this.bboxes[4*s+1],x2:this.bboxes[4*s+2],y2:this.bboxes[4*s+3]});for(var l=0;l<this.circleKeys.length;l++){var c=this.circles[3*l],u=this.circles[3*l+1],h=this.circles[3*l+2];o.push({key:this.circleKeys[l],x1:c-h,y1:u-h,x2:c+h,y2:u+h})}return i?o.filter(i):o}var f={hitTest:a,seenUids:{box:{},circle:{}}};return this._forEachCell(t,e,r,n,this._queryCell,o,f,i),a?o.length>0:o},Wt.prototype._queryCircle=function(t,e,r,n,a){var i=t-r,o=t+r,s=e-r,l=e+r;if(o<0||i>this.width||l<0||s>this.height)return!n&&[];var c=[],u={hitTest:n,circle:{x:t,y:e,radius:r},seenUids:{box:{},circle:{}}};return this._forEachCell(i,s,o,l,this._queryCellCircle,c,u,a),n?c.length>0:c},Wt.prototype.query=function(t,e,r,n,a){return this._query(t,e,r,n,!1,a)},Wt.prototype.hitTest=function(t,e,r,n,a){return this._query(t,e,r,n,!0,a)},Wt.prototype.hitTestCircle=function(t,e,r,n){return this._queryCircle(t,e,r,!0,n)},Wt.prototype._queryCell=function(t,e,r,n,a,i,o,s){var l=o.seenUids,c=this.boxCells[a];if(null!==c)for(var u=this.bboxes,h=0,f=c;h<f.length;h+=1){var p=f[h];if(!l.box[p]){l.box[p]=!0;var d=4*p;if(t<=u[d+2]&&e<=u[d+3]&&r>=u[d+0]&&n>=u[d+1]&&(!s||s(this.boxKeys[p]))){if(o.hitTest)return i.push(!0),!0;i.push({key:this.boxKeys[p],x1:u[d],y1:u[d+1],x2:u[d+2],y2:u[d+3]})}}}var g=this.circleCells[a];if(null!==g)for(var v=this.circles,m=0,y=g;m<y.length;m+=1){var x=y[m];if(!l.circle[x]){l.circle[x]=!0;var b=3*x;if(this._circleAndRectCollide(v[b],v[b+1],v[b+2],t,e,r,n)&&(!s||s(this.circleKeys[x]))){if(o.hitTest)return i.push(!0),!0;var _=v[b],w=v[b+1],k=v[b+2];i.push({key:this.circleKeys[x],x1:_-k,y1:w-k,x2:_+k,y2:w+k})}}}},Wt.prototype._queryCellCircle=function(t,e,r,n,a,i,o,s){var l=o.circle,c=o.seenUids,u=this.boxCells[a];if(null!==u)for(var h=this.bboxes,f=0,p=u;f<p.length;f+=1){var d=p[f];if(!c.box[d]){c.box[d]=!0;var g=4*d;if(this._circleAndRectCollide(l.x,l.y,l.radius,h[g+0],h[g+1],h[g+2],h[g+3])&&(!s||s(this.boxKeys[d])))return i.push(!0),!0}}var v=this.circleCells[a];if(null!==v)for(var m=this.circles,y=0,x=v;y<x.length;y+=1){var b=x[y];if(!c.circle[b]){c.circle[b]=!0;var _=3*b;if(this._circlesCollide(m[_],m[_+1],m[_+2],l.x,l.y,l.radius)&&(!s||s(this.circleKeys[b])))return i.push(!0),!0}}},Wt.prototype._forEachCell=function(t,e,r,n,a,i,o,s){for(var l=this._convertToXCellCoord(t),c=this._convertToYCellCoord(e),u=this._convertToXCellCoord(r),h=this._convertToYCellCoord(n),f=l;f<=u;f++)for(var p=c;p<=h;p++){var d=this.xCellCount*p+f;if(a.call(this,t,e,r,n,d,i,o,s))return}},Wt.prototype._convertToXCellCoord=function(t){return Math.max(0,Math.min(this.xCellCount-1,Math.floor(t*this.xScale)))},Wt.prototype._convertToYCellCoord=function(t){return Math.max(0,Math.min(this.yCellCount-1,Math.floor(t*this.yScale)))},Wt.prototype._circlesCollide=function(t,e,r,n,a,i){var o=n-t,s=a-e,l=r+i;return l*l>o*o+s*s},Wt.prototype._circleAndRectCollide=function(t,e,r,n,a,i,o){var s=(i-n)/2,l=Math.abs(t-(n+s));if(l>s+r)return!1;var c=(o-a)/2,u=Math.abs(e-(a+c));if(u>c+r)return!1;if(l<=s||u<=c)return!0;var h=l-s,f=u-c;return h*h+f*f<=r*r};var ae=new Float32Array([-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0]);function ie(t,e){for(var r=0;r<t;r++){var n=e.length;e.resize(n+4),e.float32.set(ae,3*n)}}function oe(t,e,r){var n=e[0],a=e[1];return t[0]=r[0]*n+r[4]*a+r[12],t[1]=r[1]*n+r[5]*a+r[13],t[3]=r[3]*n+r[7]*a+r[15],t}var se=function(t,e,r){void 0===e&&(e=new Wt(t.width+200,t.height+200,25)),void 0===r&&(r=new Wt(t.width+200,t.height+200,25)),this.transform=t,this.grid=e,this.ignoredGrid=r,this.pitchfactor=Math.cos(t._pitch)*t.cameraToCenterDistance,this.screenRightBoundary=t.width+100,this.screenBottomBoundary=t.height+100,this.gridRightBoundary=t.width+200,this.gridBottomBoundary=t.height+200};function le(t,e,r){t[e+4]=r?1:0}function ce(e,r,n){return r*(t.EXTENT/(e.tileSize*Math.pow(2,n-e.tileID.overscaledZ)))}se.prototype.placeCollisionBox=function(t,e,r,n,a){var i=this.projectAndGetPerspectiveRatio(n,t.anchorPointX,t.anchorPointY),o=r*i.perspectiveRatio,s=t.x1*o+i.point.x,l=t.y1*o+i.point.y,c=t.x2*o+i.point.x,u=t.y2*o+i.point.y;return!this.isInsideGrid(s,l,c,u)||!e&&this.grid.hitTest(s,l,c,u,a)?{box:[],offscreen:!1}:{box:[s,l,c,u],offscreen:this.isOffscreen(s,l,c,u)}},se.prototype.approximateTileDistance=function(t,e,r,n,a){var i=a?1:n/this.pitchfactor,o=t.lastSegmentViewportDistance*r;return t.prevTileDistance+o+(i-1)*o*Math.abs(Math.sin(e))},se.prototype.placeCollisionCircles=function(e,r,n,a,i,o,s,l,c,u,h,f,p){var d=[],g=this.projectAnchor(c,i.anchorX,i.anchorY),v=l/24,m=i.lineOffsetX*l,y=i.lineOffsetY*l,x=new t.Point(i.anchorX,i.anchorY),b=$t(v,s,m,y,!1,Jt(x,u).point,x,i,o,u,{},!0),_=!1,w=!1,k=!0,T=g.perspectiveRatio*a,M=1/(a*n),A=0,S=0;b&&(A=this.approximateTileDistance(b.first.tileDistance,b.first.angle,M,g.cameraDistance,f),S=this.approximateTileDistance(b.last.tileDistance,b.last.angle,M,g.cameraDistance,f));for(var E=0;E<e.length;E+=5){var L=e[E],C=e[E+1],P=e[E+2],O=e[E+3];if(!b||O<-A||O>S)le(e,E,!1);else{var z=this.projectPoint(c,L,C),I=P*T;if(d.length>0){var D=z.x-d[d.length-4],R=z.y-d[d.length-3];if(I*I*2>D*D+R*R&&E+8<e.length){var F=e[E+8];if(F>-A&&F<S){le(e,E,!1);continue}}}var B=E/5;d.push(z.x,z.y,I,B),le(e,E,!0);var N=z.x-I,j=z.y-I,V=z.x+I,U=z.y+I;if(k=k&&this.isOffscreen(N,j,V,U),w=w||this.isInsideGrid(N,j,V,U),!r&&this.grid.hitTestCircle(z.x,z.y,I,p)){if(!h)return{circles:[],offscreen:!1};_=!0}}}return{circles:_||!w?[]:d,offscreen:k}},se.prototype.queryRenderedSymbols=function(e){if(0===e.length||0===this.grid.keysLength()&&0===this.ignoredGrid.keysLength())return{};for(var r=[],n=1/0,a=1/0,i=-1/0,o=-1/0,s=0,l=e;s<l.length;s+=1){var c=l[s],u=new t.Point(c.x+100,c.y+100);n=Math.min(n,u.x),a=Math.min(a,u.y),i=Math.max(i,u.x),o=Math.max(o,u.y),r.push(u)}for(var h={},f={},p=0,d=this.grid.query(n,a,i,o).concat(this.ignoredGrid.query(n,a,i,o));p<d.length;p+=1){var g=d[p],v=g.key;if(void 0===h[v.bucketInstanceId]&&(h[v.bucketInstanceId]={}),!h[v.bucketInstanceId][v.featureIndex]){var m=[new t.Point(g.x1,g.y1),new t.Point(g.x2,g.y1),new t.Point(g.x2,g.y2),new t.Point(g.x1,g.y2)];t.polygonIntersectsPolygon(r,m)&&(h[v.bucketInstanceId][v.featureIndex]=!0,void 0===f[v.bucketInstanceId]&&(f[v.bucketInstanceId]=[]),f[v.bucketInstanceId].push(v.featureIndex))}}return f},se.prototype.insertCollisionBox=function(t,e,r,n,a){var i={bucketInstanceId:r,featureIndex:n,collisionGroupID:a};(e?this.ignoredGrid:this.grid).insert(i,t[0],t[1],t[2],t[3])},se.prototype.insertCollisionCircles=function(t,e,r,n,a){for(var i=e?this.ignoredGrid:this.grid,o={bucketInstanceId:r,featureIndex:n,collisionGroupID:a},s=0;s<t.length;s+=4)i.insertCircle(o,t[s],t[s+1],t[s+2])},se.prototype.projectAnchor=function(t,e,r){var n=[e,r,0,1];return oe(n,n,t),{perspectiveRatio:.5+this.transform.cameraToCenterDistance/n[3]*.5,cameraDistance:n[3]}},se.prototype.projectPoint=function(e,r,n){var a=[r,n,0,1];return oe(a,a,e),new t.Point((a[0]/a[3]+1)/2*this.transform.width+100,(-a[1]/a[3]+1)/2*this.transform.height+100)},se.prototype.projectAndGetPerspectiveRatio=function(e,r,n){var a=[r,n,0,1];return oe(a,a,e),{point:new t.Point((a[0]/a[3]+1)/2*this.transform.width+100,(-a[1]/a[3]+1)/2*this.transform.height+100),perspectiveRatio:.5+this.transform.cameraToCenterDistance/a[3]*.5}},se.prototype.isOffscreen=function(t,e,r,n){return r<100||t>=this.screenRightBoundary||n<100||e>this.screenBottomBoundary},se.prototype.isInsideGrid=function(t,e,r,n){return r>=0&&t<this.gridRightBoundary&&n>=0&&e<this.gridBottomBoundary};var ue=function(t,e,r,n){this.opacity=t?Math.max(0,Math.min(1,t.opacity+(t.placed?e:-e))):n&&r?1:0,this.placed=r};ue.prototype.isHidden=function(){return 0===this.opacity&&!this.placed};var he=function(t,e,r,n,a){this.text=new ue(t?t.text:null,e,r,a),this.icon=new ue(t?t.icon:null,e,n,a)};he.prototype.isHidden=function(){return this.text.isHidden()&&this.icon.isHidden()};var fe=function(t,e,r){this.text=t,this.icon=e,this.skipFade=r},pe=function(t,e,r,n,a){this.bucketInstanceId=t,this.featureIndex=e,this.sourceLayerIndex=r,this.bucketIndex=n,this.tileID=a},de=function(t){this.crossSourceCollisions=t,this.maxGroupID=0,this.collisionGroups={}};function ge(e,r,n,a,i){var o=t.getAnchorAlignment(e),s=-(o.horizontalAlign-.5)*r,l=-(o.verticalAlign-.5)*n,c=t.evaluateRadialOffset(e,a);return new t.Point(s+c[0]*i,l+c[1]*i)}de.prototype.get=function(t){if(this.crossSourceCollisions)return{ID:0,predicate:null};if(!this.collisionGroups[t]){var e=++this.maxGroupID;this.collisionGroups[t]={ID:e,predicate:function(t){return t.collisionGroupID===e}}}return this.collisionGroups[t]};var ve=function(t,e,r,n){this.transform=t.clone(),this.collisionIndex=new se(this.transform),this.placements={},this.opacities={},this.variableOffsets={},this.stale=!1,this.commitTime=0,this.fadeDuration=e,this.retainedQueryData={},this.collisionGroups=new de(r),this.prevPlacement=n,n&&(n.prevPlacement=void 0),this.placedOrientations={}};function me(t,e,r,n,a){t.emplaceBack(e?1:0,r?1:0,n||0,a||0),t.emplaceBack(e?1:0,r?1:0,n||0,a||0),t.emplaceBack(e?1:0,r?1:0,n||0,a||0),t.emplaceBack(e?1:0,r?1:0,n||0,a||0)}ve.prototype.placeLayerTile=function(e,r,n,a){var i=r.getBucket(e),o=r.latestFeatureIndex;if(i&&o&&e.id===i.layerIds[0]){var s=r.collisionBoxArray,l=i.layers[0].layout,c=Math.pow(2,this.transform.zoom-r.tileID.overscaledZ),u=r.tileSize/t.EXTENT,h=this.transform.calculatePosMatrix(r.tileID.toUnwrapped()),f=Xt(h,"map"===l.get("text-pitch-alignment"),"map"===l.get("text-rotation-alignment"),this.transform,ce(r,1,this.transform.zoom)),p=Xt(h,"map"===l.get("icon-pitch-alignment"),"map"===l.get("icon-rotation-alignment"),this.transform,ce(r,1,this.transform.zoom));this.retainedQueryData[i.bucketInstanceId]=new pe(i.bucketInstanceId,o,i.sourceLayerIndex,i.index,r.tileID),this.placeLayerBucket(i,h,f,p,c,u,n,r.holdingForFade(),a,s)}},ve.prototype.attemptAnchorPlacement=function(e,r,n,a,i,o,s,l,c,u,h,f,p,d,g){var v,m=ge(e,n,a,i,o),y=this.collisionIndex.placeCollisionBox(function(e,r,n,a,i,o){var s=e.x1,l=e.x2,c=e.y1,u=e.y2,h=e.anchorPointX,f=e.anchorPointY,p=new t.Point(r,n);return a&&p._rotate(i?o:-o),{x1:s+p.x,y1:c+p.y,x2:l+p.x,y2:u+p.y,anchorPointX:h,anchorPointY:f}}(r,m.x,m.y,s,l,this.transform.angle),f,c,u,h.predicate);if(y.box.length>0)return this.prevPlacement&&this.prevPlacement.variableOffsets[p.crossTileID]&&this.prevPlacement.placements[p.crossTileID]&&this.prevPlacement.placements[p.crossTileID].text&&(v=this.prevPlacement.variableOffsets[p.crossTileID].anchor),this.variableOffsets[p.crossTileID]={radialOffset:i,width:n,height:a,anchor:e,textBoxScale:o,prevAnchor:v},this.markUsedJustification(d,e,p,g),d.allowVerticalPlacement&&(this.markUsedOrientation(d,g,p),this.placedOrientations[p.crossTileID]=g),y},ve.prototype.placeLayerBucket=function(e,r,n,a,i,o,s,l,c,u){var h=this,f=e.layers[0].layout,p=t.evaluateSizeForZoom(e.textSizeData,this.transform.zoom),d=f.get("text-optional"),g=f.get("icon-optional"),v=f.get("text-allow-overlap"),m=f.get("icon-allow-overlap"),y=v&&(m||!e.hasIconData()||g),x=m&&(v||!e.hasTextData()||d),b=this.collisionGroups.get(e.sourceID),_="map"===f.get("text-rotation-alignment"),w="map"===f.get("text-pitch-alignment"),k="viewport-y"===f.get("symbol-z-order");!e.collisionArrays&&u&&e.deserializeCollisionBoxes(u);var T=function(a,u){if(!c[a.crossTileID])if(l)h.placements[a.crossTileID]=new fe(!1,!1,!1);else{var m,k=!1,T=!1,M=!0,A={box:null,offscreen:null},S={box:null,offscreen:null},E=null,L=null,C=0,P=0,O=0;u.textFeatureIndex&&(C=u.textFeatureIndex),u.verticalTextFeatureIndex&&(P=u.verticalTextFeatureIndex);var z=u.textBox;if(z){var I=function(r){var n=t.WritingMode.horizontal;if(e.allowVerticalPlacement&&!r&&h.prevPlacement){var i=h.prevPlacement.placedOrientations[a.crossTileID];i&&(h.placedOrientations[a.crossTileID]=i,n=i,h.markUsedOrientation(e,n,a))}return n},D=function(r,n){if(e.allowVerticalPlacement&&a.numVerticalGlyphVertices>0&&u.verticalTextBox)for(var i=0,o=e.writingModes;i<o.length&&(o[i]===t.WritingMode.vertical?(A=n(),S=A):A=r(),!(A&&A.box&&A.box.length));i+=1);else A=r()};if(f.get("text-variable-anchor")){var R=f.get("text-variable-anchor");if(h.prevPlacement&&h.prevPlacement.variableOffsets[a.crossTileID]){var F=h.prevPlacement.variableOffsets[a.crossTileID];R.indexOf(F.anchor)>0&&(R=R.filter(function(t){return t!==F.anchor})).unshift(F.anchor)}var B=function(t,n){for(var i=t.x2-t.x1,s=t.y2-t.y1,l=a.textBoxScale,c={box:[],offscreen:!1},u=v?2*R.length:R.length,f=0;f<u;++f){var p=R[f%R.length],d=f>=R.length;if((c=h.attemptAnchorPlacement(p,t,i,s,a.radialTextOffset,l,_,w,o,r,b,d,a,e,n))&&c.box&&c.box.length){k=!0;break}}return c};D(function(){return B(z,t.WritingMode.horizontal)},function(){var r=u.verticalTextBox,n=A&&A.box&&A.box.length;return e.allowVerticalPlacement&&!n&&a.numVerticalGlyphVertices>0&&r?B(r,t.WritingMode.vertical):{box:null,offscreen:null}}),A&&(k=A.box,M=A.offscreen);var N=I(A&&A.box);if(!k&&h.prevPlacement){var j=h.prevPlacement.variableOffsets[a.crossTileID];j&&(h.variableOffsets[a.crossTileID]=j,h.markUsedJustification(e,j.anchor,a,N))}}else{var V=function(t,n){var i=h.collisionIndex.placeCollisionBox(t,f.get("text-allow-overlap"),o,r,b.predicate);return i&&i.box&&i.box.length&&(h.markUsedOrientation(e,n,a),h.placedOrientations[a.crossTileID]=n),i};D(function(){return V(z,t.WritingMode.horizontal)},function(){var r=u.verticalTextBox;return e.allowVerticalPlacement&&a.numVerticalGlyphVertices>0&&r?V(r,t.WritingMode.vertical):{box:null,offscreen:null}}),I(A&&A.box&&A.box.length)}}k=(m=A)&&m.box&&m.box.length>0,M=m&&m.offscreen;var U=u.textCircles;if(U){var q=e.text.placedSymbolArray.get(a.centerJustifiedTextSymbolIndex),H=t.evaluateSizeForFeature(e.textSizeData,p,q);E=h.collisionIndex.placeCollisionCircles(U,f.get("text-allow-overlap"),i,o,q,e.lineVertexArray,e.glyphOffsetArray,H,r,n,s,w,b.predicate),k=f.get("text-allow-overlap")||E.circles.length>0,M=M&&E.offscreen}u.iconFeatureIndex&&(O=u.iconFeatureIndex),u.iconBox&&(T=(L=h.collisionIndex.placeCollisionBox(u.iconBox,f.get("icon-allow-overlap"),o,r,b.predicate)).box.length>0,M=M&&L.offscreen);var G=d||0===a.numHorizontalGlyphVertices&&0===a.numVerticalGlyphVertices,Y=g||0===a.numIconVertices;G||Y?Y?G||(T=T&&k):k=T&&k:T=k=T&&k,k&&m&&m.box&&(S&&S.box&&P?h.collisionIndex.insertCollisionBox(m.box,f.get("text-ignore-placement"),e.bucketInstanceId,P,b.ID):h.collisionIndex.insertCollisionBox(m.box,f.get("text-ignore-placement"),e.bucketInstanceId,C,b.ID)),T&&L&&h.collisionIndex.insertCollisionBox(L.box,f.get("icon-ignore-placement"),e.bucketInstanceId,O,b.ID),k&&E&&h.collisionIndex.insertCollisionCircles(E.circles,f.get("text-ignore-placement"),e.bucketInstanceId,C,b.ID),h.placements[a.crossTileID]=new fe(k||y,T||x,M||e.justReloaded),c[a.crossTileID]=!0}};if(k)for(var M=e.getSortedSymbolIndexes(this.transform.angle),A=M.length-1;A>=0;--A){var S=M[A];T(e.symbolInstances.get(S),e.collisionArrays[S])}else for(var E=0;E<e.symbolInstances.length;++E)T(e.symbolInstances.get(E),e.collisionArrays[E]);e.justReloaded=!1},ve.prototype.markUsedJustification=function(e,r,n,a){var i,o={left:n.leftJustifiedTextSymbolIndex,center:n.centerJustifiedTextSymbolIndex,right:n.rightJustifiedTextSymbolIndex};i=a===t.WritingMode.vertical?n.verticalPlacedTextSymbolIndex:o[t.getAnchorJustification(r)];for(var s=0,l=[n.leftJustifiedTextSymbolIndex,n.centerJustifiedTextSymbolIndex,n.rightJustifiedTextSymbolIndex,n.verticalPlacedTextSymbolIndex];s<l.length;s+=1){var c=l[s];c>=0&&(e.text.placedSymbolArray.get(c).crossTileID=i>=0&&c!==i?0:n.crossTileID)}},ve.prototype.markUsedOrientation=function(e,r,n){for(var a=r===t.WritingMode.horizontal||r===t.WritingMode.horizontalOnly?r:0,i=r===t.WritingMode.vertical?r:0,o=0,s=[n.leftJustifiedTextSymbolIndex,n.centerJustifiedTextSymbolIndex,n.rightJustifiedTextSymbolIndex];o<s.length;o+=1){var l=s[o];e.text.placedSymbolArray.get(l).placedOrientation=a}n.verticalPlacedTextSymbolIndex&&(e.text.placedSymbolArray.get(n.verticalPlacedTextSymbolIndex).placedOrientation=i)},ve.prototype.commit=function(t){this.commitTime=t;var e=this.prevPlacement,r=!1,n=e&&0!==this.fadeDuration?(this.commitTime-e.commitTime)/this.fadeDuration:1,a=e?e.opacities:{},i=e?e.variableOffsets:{},o=e?e.placedOrientations:{};for(var s in this.placements){var l=this.placements[s],c=a[s];c?(this.opacities[s]=new he(c,n,l.text,l.icon),r=r||l.text!==c.text.placed||l.icon!==c.icon.placed):(this.opacities[s]=new he(null,n,l.text,l.icon,l.skipFade),r=r||l.text||l.icon)}for(var u in a){var h=a[u];if(!this.opacities[u]){var f=new he(h,n,!1,!1);f.isHidden()||(this.opacities[u]=f,r=r||h.text.placed||h.icon.placed)}}for(var p in i)this.variableOffsets[p]||!this.opacities[p]||this.opacities[p].isHidden()||(this.variableOffsets[p]=i[p]);for(var d in o)this.placedOrientations[d]||!this.opacities[d]||this.opacities[d].isHidden()||(this.placedOrientations[d]=o[d]);r?this.lastPlacementChangeTime=t:"number"!=typeof this.lastPlacementChangeTime&&(this.lastPlacementChangeTime=e?e.lastPlacementChangeTime:t)},ve.prototype.updateLayerOpacities=function(t,e){for(var r={},n=0,a=e;n<a.length;n+=1){var i=a[n],o=i.getBucket(t);o&&i.latestFeatureIndex&&t.id===o.layerIds[0]&&this.updateBucketOpacities(o,r,i.collisionBoxArray)}},ve.prototype.updateBucketOpacities=function(e,r,n){e.hasTextData()&&e.text.opacityVertexArray.clear(),e.hasIconData()&&e.icon.opacityVertexArray.clear(),e.hasCollisionBoxData()&&e.collisionBox.collisionVertexArray.clear(),e.hasCollisionCircleData()&&e.collisionCircle.collisionVertexArray.clear();var a=e.layers[0].layout,i=new he(null,0,!1,!1,!0),o=a.get("text-allow-overlap"),s=a.get("icon-allow-overlap"),l=a.get("text-variable-anchor"),c="map"===a.get("text-rotation-alignment"),u="map"===a.get("text-pitch-alignment"),h=new he(null,0,o&&(s||!e.hasIconData()||a.get("icon-optional")),s&&(o||!e.hasTextData()||a.get("text-optional")),!0);!e.collisionArrays&&n&&(e.hasCollisionBoxData()||e.hasCollisionCircleData())&&e.deserializeCollisionBoxes(n);for(var f=0;f<e.symbolInstances.length;f++){var p=e.symbolInstances.get(f),d=p.numHorizontalGlyphVertices,g=p.numVerticalGlyphVertices,v=p.crossTileID,m=r[v],y=this.opacities[v];m?y=i:y||(y=h,this.opacities[v]=y),r[v]=!0;var x=d>0||g>0,b=p.numIconVertices>0;if(x){for(var _=Me(y.text),w=(d+g)/4,k=0;k<w;k++)e.text.opacityVertexArray.emplaceBack(_);var T=y.text.isHidden()?1:0,M=this.placedOrientations[p.crossTileID],A=M===t.WritingMode.horizontal||M===t.WritingMode.horizontalOnly?1:0,S=M===t.WritingMode.vertical?1:0;[p.rightJustifiedTextSymbolIndex,p.centerJustifiedTextSymbolIndex,p.leftJustifiedTextSymbolIndex].forEach(function(t){t>=0&&(e.text.placedSymbolArray.get(t).hidden=T||S)}),p.verticalPlacedTextSymbolIndex>=0&&(e.text.placedSymbolArray.get(p.verticalPlacedTextSymbolIndex).hidden=T||A);var E=this.variableOffsets[p.crossTileID];E&&this.markUsedJustification(e,E.anchor,p,M);var L=this.placedOrientations[p.crossTileID];L&&(this.markUsedJustification(e,"left",p,L),this.markUsedOrientation(e,L,p))}if(b){for(var C=Me(y.icon),P=0;P<p.numIconVertices/4;P++)e.icon.opacityVertexArray.emplaceBack(C);e.icon.placedSymbolArray.get(f).hidden=y.icon.isHidden()}if(e.hasCollisionBoxData()||e.hasCollisionCircleData()){var O=e.collisionArrays[f];if(O){if(O.textBox){var z=new t.Point(0,0),I=!0;if(l){var D=this.variableOffsets[v];D?(z=ge(D.anchor,D.width,D.height,D.radialOffset,D.textBoxScale),c&&z._rotate(u?this.transform.angle:-this.transform.angle)):I=!1}me(e.collisionBox.collisionVertexArray,y.text.placed,!I,z.x,z.y)}O.iconBox&&me(e.collisionBox.collisionVertexArray,y.icon.placed,!1);var R=O.textCircles;if(R&&e.hasCollisionCircleData())for(var F=0;F<R.length;F+=5){var B=m||0===R[F+4];me(e.collisionCircle.collisionVertexArray,y.text.placed,B)}}}}e.sortFeatures(this.transform.angle),this.retainedQueryData[e.bucketInstanceId]&&(this.retainedQueryData[e.bucketInstanceId].featureSortOrder=e.featureSortOrder),e.hasTextData()&&e.text.opacityVertexBuffer&&e.text.opacityVertexBuffer.updateData(e.text.opacityVertexArray),e.hasIconData()&&e.icon.opacityVertexBuffer&&e.icon.opacityVertexBuffer.updateData(e.icon.opacityVertexArray),e.hasCollisionBoxData()&&e.collisionBox.collisionVertexBuffer&&e.collisionBox.collisionVertexBuffer.updateData(e.collisionBox.collisionVertexArray),e.hasCollisionCircleData()&&e.collisionCircle.collisionVertexBuffer&&e.collisionCircle.collisionVertexBuffer.updateData(e.collisionCircle.collisionVertexArray)},ve.prototype.symbolFadeChange=function(t){return 0===this.fadeDuration?1:(t-this.commitTime)/this.fadeDuration},ve.prototype.hasTransitions=function(t){return this.stale||t-this.lastPlacementChangeTime<this.fadeDuration},ve.prototype.stillRecent=function(t){return this.commitTime+this.fadeDuration>t},ve.prototype.setStale=function(){this.stale=!0};var ye=Math.pow(2,25),xe=Math.pow(2,24),be=Math.pow(2,17),_e=Math.pow(2,16),we=Math.pow(2,9),ke=Math.pow(2,8),Te=Math.pow(2,1);function Me(t){if(0===t.opacity&&!t.placed)return 0;if(1===t.opacity&&t.placed)return 4294967295;var e=t.placed?1:0,r=Math.floor(127*t.opacity);return r*ye+e*xe+r*be+e*_e+r*we+e*ke+r*Te+e}var Ae=function(){this._currentTileIndex=0,this._seenCrossTileIDs={}};Ae.prototype.continuePlacement=function(t,e,r,n,a){for(;this._currentTileIndex<t.length;){var i=t[this._currentTileIndex];if(e.placeLayerTile(n,i,r,this._seenCrossTileIDs),this._currentTileIndex++,a())return!0}};var Se=function(t,e,r,n,a,i,o){this.placement=new ve(t,a,i,o),this._currentPlacementIndex=e.length-1,this._forceFullPlacement=r,this._showCollisionBoxes=n,this._done=!1};Se.prototype.isDone=function(){return this._done},Se.prototype.continuePlacement=function(e,r,n){for(var a=this,i=t.browser.now(),o=function(){var e=t.browser.now()-i;return!a._forceFullPlacement&&e>2};this._currentPlacementIndex>=0;){var s=r[e[this._currentPlacementIndex]],l=this.placement.collisionIndex.transform.zoom;if("symbol"===s.type&&(!s.minzoom||s.minzoom<=l)&&(!s.maxzoom||s.maxzoom>l)){if(this._inProgressLayer||(this._inProgressLayer=new Ae),this._inProgressLayer.continuePlacement(n[s.source],this.placement,this._showCollisionBoxes,s,o))return;delete this._inProgressLayer}this._currentPlacementIndex--}this._done=!0},Se.prototype.commit=function(t){return this.placement.commit(t),this.placement};var Ee=512/t.EXTENT/2,Le=function(t,e,r){this.tileID=t,this.indexedSymbolInstances={},this.bucketInstanceId=r;for(var n=0;n<e.length;n++){var a=e.get(n),i=a.key;this.indexedSymbolInstances[i]||(this.indexedSymbolInstances[i]=[]),this.indexedSymbolInstances[i].push({crossTileID:a.crossTileID,coord:this.getScaledCoordinates(a,t)})}};Le.prototype.getScaledCoordinates=function(e,r){var n=r.canonical.z-this.tileID.canonical.z,a=Ee/Math.pow(2,n);return{x:Math.floor((r.canonical.x*t.EXTENT+e.anchorX)*a),y:Math.floor((r.canonical.y*t.EXTENT+e.anchorY)*a)}},Le.prototype.findMatches=function(t,e,r){for(var n=this.tileID.canonical.z<e.canonical.z?1:Math.pow(2,this.tileID.canonical.z-e.canonical.z),a=0;a<t.length;a++){var i=t.get(a);if(!i.crossTileID){var o=this.indexedSymbolInstances[i.key];if(o)for(var s=this.getScaledCoordinates(i,e),l=0,c=o;l<c.length;l+=1){var u=c[l];if(Math.abs(u.coord.x-s.x)<=n&&Math.abs(u.coord.y-s.y)<=n&&!r[u.crossTileID]){r[u.crossTileID]=!0,i.crossTileID=u.crossTileID;break}}}}};var Ce=function(){this.maxCrossTileID=0};Ce.prototype.generate=function(){return++this.maxCrossTileID};var Pe=function(){this.indexes={},this.usedCrossTileIDs={},this.lng=0};Pe.prototype.handleWrapJump=function(t){var e=Math.round((t-this.lng)/360);if(0!==e)for(var r in this.indexes){var n=this.indexes[r],a={};for(var i in n){var o=n[i];o.tileID=o.tileID.unwrapTo(o.tileID.wrap+e),a[o.tileID.key]=o}this.indexes[r]=a}this.lng=t},Pe.prototype.addBucket=function(t,e,r){if(this.indexes[t.overscaledZ]&&this.indexes[t.overscaledZ][t.key]){if(this.indexes[t.overscaledZ][t.key].bucketInstanceId===e.bucketInstanceId)return!1;this.removeBucketCrossTileIDs(t.overscaledZ,this.indexes[t.overscaledZ][t.key])}for(var n=0;n<e.symbolInstances.length;n++)e.symbolInstances.get(n).crossTileID=0;this.usedCrossTileIDs[t.overscaledZ]||(this.usedCrossTileIDs[t.overscaledZ]={});var a=this.usedCrossTileIDs[t.overscaledZ];for(var i in this.indexes){var o=this.indexes[i];if(Number(i)>t.overscaledZ)for(var s in o){var l=o[s];l.tileID.isChildOf(t)&&l.findMatches(e.symbolInstances,t,a)}else{var c=o[t.scaledTo(Number(i)).key];c&&c.findMatches(e.symbolInstances,t,a)}}for(var u=0;u<e.symbolInstances.length;u++){var h=e.symbolInstances.get(u);h.crossTileID||(h.crossTileID=r.generate(),a[h.crossTileID]=!0)}return void 0===this.indexes[t.overscaledZ]&&(this.indexes[t.overscaledZ]={}),this.indexes[t.overscaledZ][t.key]=new Le(t,e.symbolInstances,e.bucketInstanceId),!0},Pe.prototype.removeBucketCrossTileIDs=function(t,e){for(var r in e.indexedSymbolInstances)for(var n=0,a=e.indexedSymbolInstances[r];n<a.length;n+=1){var i=a[n];delete this.usedCrossTileIDs[t][i.crossTileID]}},Pe.prototype.removeStaleBuckets=function(t){var e=!1;for(var r in this.indexes){var n=this.indexes[r];for(var a in n)t[n[a].bucketInstanceId]||(this.removeBucketCrossTileIDs(r,n[a]),delete n[a],e=!0)}return e};var Oe=function(){this.layerIndexes={},this.crossTileIDs=new Ce,this.maxBucketInstanceId=0,this.bucketsInCurrentPlacement={}};Oe.prototype.addLayer=function(t,e,r){var n=this.layerIndexes[t.id];void 0===n&&(n=this.layerIndexes[t.id]=new Pe);var a=!1,i={};n.handleWrapJump(r);for(var o=0,s=e;o<s.length;o+=1){var l=s[o],c=l.getBucket(t);c&&t.id===c.layerIds[0]&&(c.bucketInstanceId||(c.bucketInstanceId=++this.maxBucketInstanceId),n.addBucket(l.tileID,c,this.crossTileIDs)&&(a=!0),i[c.bucketInstanceId]=!0)}return n.removeStaleBuckets(i)&&(a=!0),a},Oe.prototype.pruneUnusedLayers=function(t){var e={};for(var r in t.forEach(function(t){e[t]=!0}),this.layerIndexes)e[r]||delete this.layerIndexes[r]};var ze=function(e,r){return t.emitValidationErrors(e,r&&r.filter(function(t){return"source.canvas"!==t.identifier}))},Ie=t.pick(Nt,["addLayer","removeLayer","setPaintProperty","setLayoutProperty","setFilter","addSource","removeSource","setLayerZoomRange","setLight","setTransition","setGeoJSONSourceData"]),De=t.pick(Nt,["setCenter","setZoom","setBearing","setPitch"]),Re=function(e){function r(n,a){var i=this;void 0===a&&(a={}),e.call(this),this.map=n,this.dispatcher=new T((Dt||(Dt=new It),Dt),this),this.imageManager=new f,this.imageManager.setEventedParent(this),this.glyphManager=new x(n._requestManager,a.localIdeographFontFamily),this.lineAtlas=new k(256,512),this.crossTileSymbolIndex=new Oe,this._layers={},this._order=[],this.sourceCaches={},this.zoomHistory=new t.ZoomHistory,this._loaded=!1,this._resetUpdates(),this.dispatcher.broadcast("setReferrer",t.getReferrer());var o=this;this._rtlTextPluginCallback=r.registerForPluginAvailability(function(t){for(var e in o.dispatcher.broadcast("loadRTLTextPlugin",t.pluginURL,t.completionCallback),o.sourceCaches)o.sourceCaches[e].reload()}),this.on("data",function(t){if("source"===t.dataType&&"metadata"===t.sourceDataType){var e=i.sourceCaches[t.sourceId];if(e){var r=e.getSource();if(r&&r.vectorLayerIds)for(var n in i._layers){var a=i._layers[n];a.source===r.id&&i._validateLayer(a)}}}})}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.loadURL=function(e,r){var n=this;void 0===r&&(r={}),this.fire(new t.Event("dataloading",{dataType:"style"}));var a="boolean"==typeof r.validate?r.validate:!t.isMapboxURL(e);e=this.map._requestManager.normalizeStyleURL(e,r.accessToken);var i=this.map._requestManager.transformRequest(e,t.ResourceType.Style);this._request=t.getJSON(i,function(e,r){n._request=null,e?n.fire(new t.ErrorEvent(e)):r&&n._load(r,a)})},r.prototype.loadJSON=function(e,r){var n=this;void 0===r&&(r={}),this.fire(new t.Event("dataloading",{dataType:"style"})),this._request=t.browser.frame(function(){n._request=null,n._load(e,!1!==r.validate)})},r.prototype._load=function(e,r){var n=this;if(!r||!ze(this,t.validateStyle(e))){for(var a in this._loaded=!0,this.stylesheet=e,e.sources)this.addSource(a,e.sources[a],{validate:!1});e.sprite?this._spriteRequest=function(e,r,n){var a,i,o,s=t.browser.devicePixelRatio>1?"@2x":"",l=t.getJSON(r.transformRequest(r.normalizeSpriteURL(e,s,".json"),t.ResourceType.SpriteJSON),function(t,e){l=null,o||(o=t,a=e,u())}),c=t.getImage(r.transformRequest(r.normalizeSpriteURL(e,s,".png"),t.ResourceType.SpriteImage),function(t,e){c=null,o||(o=t,i=e,u())});function u(){if(o)n(o);else if(a&&i){var e=t.browser.getImageData(i),r={};for(var s in a){var l=a[s],c=l.width,u=l.height,h=l.x,f=l.y,p=l.sdf,d=l.pixelRatio,g=new t.RGBAImage({width:c,height:u});t.RGBAImage.copy(e,g,{x:h,y:f},{x:0,y:0},{width:c,height:u}),r[s]={data:g,pixelRatio:d,sdf:p}}n(null,r)}}return{cancel:function(){l&&(l.cancel(),l=null),c&&(c.cancel(),c=null)}}}(e.sprite,this.map._requestManager,function(e,r){if(n._spriteRequest=null,e)n.fire(new t.ErrorEvent(e));else if(r)for(var a in r)n.imageManager.addImage(a,r[a]);n.imageManager.setLoaded(!0),n.fire(new t.Event("data",{dataType:"style"}))}):this.imageManager.setLoaded(!0),this.glyphManager.setURL(e.glyphs);var i=Bt(this.stylesheet.layers);this._order=i.map(function(t){return t.id}),this._layers={};for(var o=0,s=i;o<s.length;o+=1){var l=s[o];(l=t.createStyleLayer(l)).setEventedParent(this,{layer:{id:l.id}}),this._layers[l.id]=l}this.dispatcher.broadcast("setLayers",this._serializeLayers(this._order)),this.light=new w(this.stylesheet.light),this.fire(new t.Event("data",{dataType:"style"})),this.fire(new t.Event("style.load"))}},r.prototype._validateLayer=function(e){var r=this.sourceCaches[e.source];if(r){var n=e.sourceLayer;if(n){var a=r.getSource();("geojson"===a.type||a.vectorLayerIds&&-1===a.vectorLayerIds.indexOf(n))&&this.fire(new t.ErrorEvent(new Error('Source layer "'+n+'" does not exist on source "'+a.id+'" as specified by style layer "'+e.id+'"')))}}},r.prototype.loaded=function(){if(!this._loaded)return!1;if(Object.keys(this._updatedSources).length)return!1;for(var t in this.sourceCaches)if(!this.sourceCaches[t].loaded())return!1;return!!this.imageManager.isLoaded()},r.prototype._serializeLayers=function(t){for(var e=[],r=0,n=t;r<n.length;r+=1){var a=n[r],i=this._layers[a];"custom"!==i.type&&e.push(i.serialize())}return e},r.prototype.hasTransitions=function(){if(this.light&&this.light.hasTransition())return!0;for(var t in this.sourceCaches)if(this.sourceCaches[t].hasTransition())return!0;for(var e in this._layers)if(this._layers[e].hasTransition())return!0;return!1},r.prototype._checkLoaded=function(){if(!this._loaded)throw new Error("Style is not done loading")},r.prototype.update=function(e){if(this._loaded){var r=this._changed;if(this._changed){var n=Object.keys(this._updatedLayers),a=Object.keys(this._removedLayers);for(var i in(n.length||a.length)&&this._updateWorkerLayers(n,a),this._updatedSources){var o=this._updatedSources[i];"reload"===o?this._reloadSource(i):"clear"===o&&this._clearSource(i)}for(var s in this._updatedPaintProps)this._layers[s].updateTransitions(e);this.light.updateTransitions(e),this._resetUpdates()}for(var l in this.sourceCaches)this.sourceCaches[l].used=!1;for(var c=0,u=this._order;c<u.length;c+=1){var h=u[c],f=this._layers[h];f.recalculate(e),!f.isHidden(e.zoom)&&f.source&&(this.sourceCaches[f.source].used=!0)}this.light.recalculate(e),this.z=e.zoom,r&&this.fire(new t.Event("data",{dataType:"style"}))}},r.prototype._updateWorkerLayers=function(t,e){this.dispatcher.broadcast("updateLayers",{layers:this._serializeLayers(t),removedIds:e})},r.prototype._resetUpdates=function(){this._changed=!1,this._updatedLayers={},this._removedLayers={},this._updatedSources={},this._updatedPaintProps={}},r.prototype.setState=function(e){var r=this;if(this._checkLoaded(),ze(this,t.validateStyle(e)))return!1;(e=t.clone$1(e)).layers=Bt(e.layers);var n=function(e,r){if(!e)return[{command:Nt.setStyle,args:[r]}];var n=[];try{if(!t.deepEqual(e.version,r.version))return[{command:Nt.setStyle,args:[r]}];t.deepEqual(e.center,r.center)||n.push({command:Nt.setCenter,args:[r.center]}),t.deepEqual(e.zoom,r.zoom)||n.push({command:Nt.setZoom,args:[r.zoom]}),t.deepEqual(e.bearing,r.bearing)||n.push({command:Nt.setBearing,args:[r.bearing]}),t.deepEqual(e.pitch,r.pitch)||n.push({command:Nt.setPitch,args:[r.pitch]}),t.deepEqual(e.sprite,r.sprite)||n.push({command:Nt.setSprite,args:[r.sprite]}),t.deepEqual(e.glyphs,r.glyphs)||n.push({command:Nt.setGlyphs,args:[r.glyphs]}),t.deepEqual(e.transition,r.transition)||n.push({command:Nt.setTransition,args:[r.transition]}),t.deepEqual(e.light,r.light)||n.push({command:Nt.setLight,args:[r.light]});var a={},i=[];!function(e,r,n,a){var i;for(i in r=r||{},e=e||{})e.hasOwnProperty(i)&&(r.hasOwnProperty(i)||Vt(i,n,a));for(i in r)r.hasOwnProperty(i)&&(e.hasOwnProperty(i)?t.deepEqual(e[i],r[i])||("geojson"===e[i].type&&"geojson"===r[i].type&&qt(e,r,i)?n.push({command:Nt.setGeoJSONSourceData,args:[i,r[i].data]}):Ut(i,r,n,a)):jt(i,r,n))}(e.sources,r.sources,i,a);var o=[];e.layers&&e.layers.forEach(function(t){a[t.source]?n.push({command:Nt.removeLayer,args:[t.id]}):o.push(t)}),n=n.concat(i),function(e,r,n){r=r||[];var a,i,o,s,l,c,u,h=(e=e||[]).map(Gt),f=r.map(Gt),p=e.reduce(Yt,{}),d=r.reduce(Yt,{}),g=h.slice(),v=Object.create(null);for(a=0,i=0;a<h.length;a++)o=h[a],d.hasOwnProperty(o)?i++:(n.push({command:Nt.removeLayer,args:[o]}),g.splice(g.indexOf(o,i),1));for(a=0,i=0;a<f.length;a++)o=f[f.length-1-a],g[g.length-1-a]!==o&&(p.hasOwnProperty(o)?(n.push({command:Nt.removeLayer,args:[o]}),g.splice(g.lastIndexOf(o,g.length-i),1)):i++,c=g[g.length-a],n.push({command:Nt.addLayer,args:[d[o],c]}),g.splice(g.length-a,0,o),v[o]=!0);for(a=0;a<f.length;a++)if(s=p[o=f[a]],l=d[o],!v[o]&&!t.deepEqual(s,l))if(t.deepEqual(s.source,l.source)&&t.deepEqual(s["source-layer"],l["source-layer"])&&t.deepEqual(s.type,l.type)){for(u in Ht(s.layout,l.layout,n,o,null,Nt.setLayoutProperty),Ht(s.paint,l.paint,n,o,null,Nt.setPaintProperty),t.deepEqual(s.filter,l.filter)||n.push({command:Nt.setFilter,args:[o,l.filter]}),t.deepEqual(s.minzoom,l.minzoom)&&t.deepEqual(s.maxzoom,l.maxzoom)||n.push({command:Nt.setLayerZoomRange,args:[o,l.minzoom,l.maxzoom]}),s)s.hasOwnProperty(u)&&"layout"!==u&&"paint"!==u&&"filter"!==u&&"metadata"!==u&&"minzoom"!==u&&"maxzoom"!==u&&(0===u.indexOf("paint.")?Ht(s[u],l[u],n,o,u.slice(6),Nt.setPaintProperty):t.deepEqual(s[u],l[u])||n.push({command:Nt.setLayerProperty,args:[o,u,l[u]]}));for(u in l)l.hasOwnProperty(u)&&!s.hasOwnProperty(u)&&"layout"!==u&&"paint"!==u&&"filter"!==u&&"metadata"!==u&&"minzoom"!==u&&"maxzoom"!==u&&(0===u.indexOf("paint.")?Ht(s[u],l[u],n,o,u.slice(6),Nt.setPaintProperty):t.deepEqual(s[u],l[u])||n.push({command:Nt.setLayerProperty,args:[o,u,l[u]]}))}else n.push({command:Nt.removeLayer,args:[o]}),c=g[g.lastIndexOf(o)+1],n.push({command:Nt.addLayer,args:[l,c]})}(o,r.layers,n)}catch(t){console.warn("Unable to compute style diff:",t),n=[{command:Nt.setStyle,args:[r]}]}return n}(this.serialize(),e).filter(function(t){return!(t.command in De)});if(0===n.length)return!1;var a=n.filter(function(t){return!(t.command in Ie)});if(a.length>0)throw new Error("Unimplemented: "+a.map(function(t){return t.command}).join(", ")+".");return n.forEach(function(t){"setTransition"!==t.command&&r[t.command].apply(r,t.args)}),this.stylesheet=e,!0},r.prototype.addImage=function(e,r){if(this.getImage(e))return this.fire(new t.ErrorEvent(new Error("An image with this name already exists.")));this.imageManager.addImage(e,r),this.fire(new t.Event("data",{dataType:"style"}))},r.prototype.updateImage=function(t,e){this.imageManager.updateImage(t,e)},r.prototype.getImage=function(t){return this.imageManager.getImage(t)},r.prototype.removeImage=function(e){if(!this.getImage(e))return this.fire(new t.ErrorEvent(new Error("No image with this name exists.")));this.imageManager.removeImage(e),this.fire(new t.Event("data",{dataType:"style"}))},r.prototype.listImages=function(){return this._checkLoaded(),this.imageManager.listImages()},r.prototype.addSource=function(e,r,n){var a=this;if(void 0===n&&(n={}),this._checkLoaded(),void 0!==this.sourceCaches[e])throw new Error("There is already a source with this ID");if(!r.type)throw new Error("The type property must be defined, but the only the following properties were given: "+Object.keys(r).join(", ")+".");if(!(["vector","raster","geojson","video","image"].indexOf(r.type)>=0&&this._validate(t.validateStyle.source,"sources."+e,r,null,n))){this.map&&this.map._collectResourceTiming&&(r.collectResourceTiming=!0);var i=this.sourceCaches[e]=new Ct(e,r,this.dispatcher);i.style=this,i.setEventedParent(this,function(){return{isSourceLoaded:a.loaded(),source:i.serialize(),sourceId:e}}),i.onAdd(this.map),this._changed=!0}},r.prototype.removeSource=function(e){if(this._checkLoaded(),void 0===this.sourceCaches[e])throw new Error("There is no source with this ID");for(var r in this._layers)if(this._layers[r].source===e)return this.fire(new t.ErrorEvent(new Error('Source "'+e+'" cannot be removed while layer "'+r+'" is using it.')));var n=this.sourceCaches[e];delete this.sourceCaches[e],delete this._updatedSources[e],n.fire(new t.Event("data",{sourceDataType:"metadata",dataType:"source",sourceId:e})),n.setEventedParent(null),n.clearTiles(),n.onRemove&&n.onRemove(this.map),this._changed=!0},r.prototype.setGeoJSONSourceData=function(t,e){this._checkLoaded(),this.sourceCaches[t].getSource().setData(e),this._changed=!0},r.prototype.getSource=function(t){return this.sourceCaches[t]&&this.sourceCaches[t].getSource()},r.prototype.addLayer=function(e,r,n){void 0===n&&(n={}),this._checkLoaded();var a=e.id;if(this.getLayer(a))this.fire(new t.ErrorEvent(new Error('Layer with id "'+a+'" already exists on this map')));else{var i;if("custom"===e.type){if(ze(this,t.validateCustomStyleLayer(e)))return;i=t.createStyleLayer(e)}else{if("object"==typeof e.source&&(this.addSource(a,e.source),e=t.clone$1(e),e=t.extend(e,{source:a})),this._validate(t.validateStyle.layer,"layers."+a,e,{arrayIndex:-1},n))return;i=t.createStyleLayer(e),this._validateLayer(i),i.setEventedParent(this,{layer:{id:a}})}var o=r?this._order.indexOf(r):this._order.length;if(r&&-1===o)this.fire(new t.ErrorEvent(new Error('Layer with id "'+r+'" does not exist on this map.')));else{if(this._order.splice(o,0,a),this._layerOrderChanged=!0,this._layers[a]=i,this._removedLayers[a]&&i.source&&"custom"!==i.type){var s=this._removedLayers[a];delete this._removedLayers[a],s.type!==i.type?this._updatedSources[i.source]="clear":(this._updatedSources[i.source]="reload",this.sourceCaches[i.source].pause())}this._updateLayer(i),i.onAdd&&i.onAdd(this.map)}}},r.prototype.moveLayer=function(e,r){if(this._checkLoaded(),this._changed=!0,this._layers[e]){if(e!==r){var n=this._order.indexOf(e);this._order.splice(n,1);var a=r?this._order.indexOf(r):this._order.length;r&&-1===a?this.fire(new t.ErrorEvent(new Error('Layer with id "'+r+'" does not exist on this map.'))):(this._order.splice(a,0,e),this._layerOrderChanged=!0)}}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be moved.")))},r.prototype.removeLayer=function(e){this._checkLoaded();var r=this._layers[e];if(r){r.setEventedParent(null);var n=this._order.indexOf(e);this._order.splice(n,1),this._layerOrderChanged=!0,this._changed=!0,this._removedLayers[e]=r,delete this._layers[e],delete this._updatedLayers[e],delete this._updatedPaintProps[e],r.onRemove&&r.onRemove(this.map)}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be removed.")))},r.prototype.getLayer=function(t){return this._layers[t]},r.prototype.setLayerZoomRange=function(e,r,n){this._checkLoaded();var a=this.getLayer(e);a?a.minzoom===r&&a.maxzoom===n||(null!=r&&(a.minzoom=r),null!=n&&(a.maxzoom=n),this._updateLayer(a)):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot have zoom extent.")))},r.prototype.setFilter=function(e,r,n){void 0===n&&(n={}),this._checkLoaded();var a=this.getLayer(e);if(a){if(!t.deepEqual(a.filter,r))return null==r?(a.filter=void 0,void this._updateLayer(a)):void(this._validate(t.validateStyle.filter,"layers."+a.id+".filter",r,null,n)||(a.filter=t.clone$1(r),this._updateLayer(a)))}else this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be filtered.")))},r.prototype.getFilter=function(e){return t.clone$1(this.getLayer(e).filter)},r.prototype.setLayoutProperty=function(e,r,n,a){void 0===a&&(a={}),this._checkLoaded();var i=this.getLayer(e);i?t.deepEqual(i.getLayoutProperty(r),n)||(i.setLayoutProperty(r,n,a),this._updateLayer(i)):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be styled.")))},r.prototype.getLayoutProperty=function(e,r){var n=this.getLayer(e);if(n)return n.getLayoutProperty(r);this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style.")))},r.prototype.setPaintProperty=function(e,r,n,a){void 0===a&&(a={}),this._checkLoaded();var i=this.getLayer(e);i?t.deepEqual(i.getPaintProperty(r),n)||(i.setPaintProperty(r,n,a)&&this._updateLayer(i),this._changed=!0,this._updatedPaintProps[e]=!0):this.fire(new t.ErrorEvent(new Error("The layer '"+e+"' does not exist in the map's style and cannot be styled.")))},r.prototype.getPaintProperty=function(t,e){return this.getLayer(t).getPaintProperty(e)},r.prototype.setFeatureState=function(e,r){this._checkLoaded();var n=e.source,a=e.sourceLayer,i=this.sourceCaches[n],o=parseInt(e.id,10);if(void 0!==i){var s=i.getSource().type;"geojson"===s&&a?this.fire(new t.ErrorEvent(new Error("GeoJSON sources cannot have a sourceLayer parameter."))):"vector"!==s||a?isNaN(o)||o<0?this.fire(new t.ErrorEvent(new Error("The feature id parameter must be provided and non-negative."))):i.setFeatureState(a,o,r):this.fire(new t.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types.")))}else this.fire(new t.ErrorEvent(new Error("The source '"+n+"' does not exist in the map's style.")))},r.prototype.removeFeatureState=function(e,r){this._checkLoaded();var n=e.source,a=this.sourceCaches[n];if(void 0!==a){var i=a.getSource().type,o="vector"===i?e.sourceLayer:void 0,s=parseInt(e.id,10);"vector"!==i||o?void 0!==e.id&&isNaN(s)||s<0?this.fire(new t.ErrorEvent(new Error("The feature id parameter must be non-negative."))):r&&"string"!=typeof e.id&&"number"!=typeof e.id?this.fire(new t.ErrorEvent(new Error("A feature id is requred to remove its specific state property."))):a.removeFeatureState(o,s,r):this.fire(new t.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types.")))}else this.fire(new t.ErrorEvent(new Error("The source '"+n+"' does not exist in the map's style.")))},r.prototype.getFeatureState=function(e){this._checkLoaded();var r=e.source,n=e.sourceLayer,a=this.sourceCaches[r],i=parseInt(e.id,10);if(void 0!==a)if("vector"!==a.getSource().type||n){if(!(isNaN(i)||i<0))return a.getFeatureState(n,i);this.fire(new t.ErrorEvent(new Error("The feature id parameter must be provided and non-negative.")))}else this.fire(new t.ErrorEvent(new Error("The sourceLayer parameter must be provided for vector source types.")));else this.fire(new t.ErrorEvent(new Error("The source '"+r+"' does not exist in the map's style.")))},r.prototype.getTransition=function(){return t.extend({duration:300,delay:0},this.stylesheet&&this.stylesheet.transition)},r.prototype.serialize=function(){return t.filterObject({version:this.stylesheet.version,name:this.stylesheet.name,metadata:this.stylesheet.metadata,light:this.stylesheet.light,center:this.stylesheet.center,zoom:this.stylesheet.zoom,bearing:this.stylesheet.bearing,pitch:this.stylesheet.pitch,sprite:this.stylesheet.sprite,glyphs:this.stylesheet.glyphs,transition:this.stylesheet.transition,sources:t.mapObject(this.sourceCaches,function(t){return t.serialize()}),layers:this._serializeLayers(this._order)},function(t){return void 0!==t})},r.prototype._updateLayer=function(t){this._updatedLayers[t.id]=!0,t.source&&!this._updatedSources[t.source]&&(this._updatedSources[t.source]="reload",this.sourceCaches[t.source].pause()),this._changed=!0},r.prototype._flattenAndSortRenderedFeatures=function(t){for(var e=this,r=function(t){return"fill-extrusion"===e._layers[t].type},n={},a=[],i=this._order.length-1;i>=0;i--){var o=this._order[i];if(r(o)){n[o]=i;for(var s=0,l=t;s<l.length;s+=1){var c=l[s][o];if(c)for(var u=0,h=c;u<h.length;u+=1){var f=h[u];a.push(f)}}}}a.sort(function(t,e){return e.intersectionZ-t.intersectionZ});for(var p=[],d=this._order.length-1;d>=0;d--){var g=this._order[d];if(r(g))for(var v=a.length-1;v>=0;v--){var m=a[v].feature;if(n[m.layer.id]<d)break;p.push(m),a.pop()}else for(var y=0,x=t;y<x.length;y+=1){var b=x[y][g];if(b)for(var _=0,w=b;_<w.length;_+=1){var k=w[_];p.push(k.feature)}}}return p},r.prototype.queryRenderedFeatures=function(e,r,n){r&&r.filter&&this._validate(t.validateStyle.filter,"queryRenderedFeatures.filter",r.filter,null,r);var a={};if(r&&r.layers){if(!Array.isArray(r.layers))return this.fire(new t.ErrorEvent(new Error("parameters.layers must be an Array."))),[];for(var i=0,o=r.layers;i<o.length;i+=1){var s=o[i],l=this._layers[s];if(!l)return this.fire(new t.ErrorEvent(new Error("The layer '"+s+"' does not exist in the map's style and cannot be queried for features."))),[];a[l.source]=!0}}var c=[];for(var u in this.sourceCaches)r.layers&&!a[u]||c.push(F(this.sourceCaches[u],this._layers,e,r,n));return this.placement&&c.push(function(t,e,r,n,a,i){for(var o={},s=a.queryRenderedSymbols(r),l=[],c=0,u=Object.keys(s).map(Number);c<u.length;c+=1){var h=u[c];l.push(i[h])}l.sort(B);for(var f=function(){var e=d[p],r=e.featureIndex.lookupSymbolFeatures(s[e.bucketInstanceId],e.bucketIndex,e.sourceLayerIndex,n.filter,n.layers,t);for(var a in r){var i=o[a]=o[a]||[],l=r[a];l.sort(function(t,r){var n=e.featureSortOrder;if(n){var a=n.indexOf(t.featureIndex);return n.indexOf(r.featureIndex)-a}return r.featureIndex-t.featureIndex});for(var c=0,u=l;c<u.length;c+=1){var h=u[c];i.push(h)}}},p=0,d=l;p<d.length;p+=1)f();var g=function(r){o[r].forEach(function(n){var a=n.feature,i=t[r],o=e[i.source].getFeatureState(a.layer["source-layer"],a.id);a.source=a.layer.source,a.layer["source-layer"]&&(a.sourceLayer=a.layer["source-layer"]),a.state=o})};for(var v in o)g(v);return o}(this._layers,this.sourceCaches,e,r,this.placement.collisionIndex,this.placement.retainedQueryData)),this._flattenAndSortRenderedFeatures(c)},r.prototype.querySourceFeatures=function(e,r){r&&r.filter&&this._validate(t.validateStyle.filter,"querySourceFeatures.filter",r.filter,null,r);var n=this.sourceCaches[e];return n?function(t,e){for(var r=t.getRenderableIds().map(function(e){return t.getTileByID(e)}),n=[],a={},i=0;i<r.length;i++){var o=r[i],s=o.tileID.canonical.key;a[s]||(a[s]=!0,o.querySourceFeatures(n,e))}return n}(n,r):[]},r.prototype.addSourceType=function(t,e,n){return r.getSourceType(t)?n(new Error('A source type called "'+t+'" already exists.')):(r.setSourceType(t,e),e.workerSourceURL?void this.dispatcher.broadcast("loadWorkerSource",{name:t,url:e.workerSourceURL},n):n(null,null))},r.prototype.getLight=function(){return this.light.getLight()},r.prototype.setLight=function(e,r){void 0===r&&(r={}),this._checkLoaded();var n=this.light.getLight(),a=!1;for(var i in e)if(!t.deepEqual(e[i],n[i])){a=!0;break}if(a){var o={now:t.browser.now(),transition:t.extend({duration:300,delay:0},this.stylesheet.transition)};this.light.setLight(e,r),this.light.updateTransitions(o)}},r.prototype._validate=function(e,r,n,a,i){return void 0===i&&(i={}),(!i||!1!==i.validate)&&ze(this,e.call(t.validateStyle,t.extend({key:r,style:this.serialize(),value:n,styleSpec:t.styleSpec},a)))},r.prototype._remove=function(){for(var e in this._request&&(this._request.cancel(),this._request=null),this._spriteRequest&&(this._spriteRequest.cancel(),this._spriteRequest=null),t.evented.off("pluginAvailable",this._rtlTextPluginCallback),this.sourceCaches)this.sourceCaches[e].clearTiles();this.dispatcher.remove()},r.prototype._clearSource=function(t){this.sourceCaches[t].clearTiles()},r.prototype._reloadSource=function(t){this.sourceCaches[t].resume(),this.sourceCaches[t].reload()},r.prototype._updateSources=function(t){for(var e in this.sourceCaches)this.sourceCaches[e].update(t)},r.prototype._generateCollisionBoxes=function(){for(var t in this.sourceCaches)this._reloadSource(t)},r.prototype._updatePlacement=function(e,r,n,a){for(var i=!1,o=!1,s={},l=0,c=this._order;l<c.length;l+=1){var u=c[l],h=this._layers[u];if("symbol"===h.type){if(!s[h.source]){var f=this.sourceCaches[h.source];s[h.source]=f.getRenderableIds(!0).map(function(t){return f.getTileByID(t)}).sort(function(t,e){return e.tileID.overscaledZ-t.tileID.overscaledZ||(t.tileID.isLessThan(e.tileID)?-1:1)})}var p=this.crossTileSymbolIndex.addLayer(h,s[h.source],e.center.lng);i=i||p}}this.crossTileSymbolIndex.pruneUnusedLayers(this._order);var d=this._layerOrderChanged||0===n;if((d||!this.pauseablePlacement||this.pauseablePlacement.isDone()&&!this.placement.stillRecent(t.browser.now()))&&(this.pauseablePlacement=new Se(e,this._order,d,r,n,a,this.placement),this._layerOrderChanged=!1),this.pauseablePlacement.isDone()?this.placement.setStale():(this.pauseablePlacement.continuePlacement(this._order,this._layers,s),this.pauseablePlacement.isDone()&&(this.placement=this.pauseablePlacement.commit(t.browser.now()),o=!0),i&&this.pauseablePlacement.placement.setStale()),o||i)for(var g=0,v=this._order;g<v.length;g+=1){var m=v[g],y=this._layers[m];"symbol"===y.type&&this.placement.updateLayerOpacities(y,s[y.source])}return!this.pauseablePlacement.isDone()||this.placement.hasTransitions(t.browser.now())},r.prototype._releaseSymbolFadeTiles=function(){for(var t in this.sourceCaches)this.sourceCaches[t].releaseSymbolFadeTiles()},r.prototype.getImages=function(t,e,r){this.imageManager.getImages(e.icons,r)},r.prototype.getGlyphs=function(t,e,r){this.glyphManager.getGlyphs(e.stacks,r)},r.prototype.getResource=function(e,r,n){return t.makeRequest(r,n)},r}(t.Evented);Re.getSourceType=function(t){return I[t]},Re.setSourceType=function(t,e){I[t]=e},Re.registerForPluginAvailability=t.registerForPluginAvailability;var Fe=t.createLayout([{name:"a_pos",type:"Int16",components:2}]),Be=cr("#ifdef GL_ES\nprecision mediump float;\n#else\n#if !defined(lowp)\n#define lowp\n#endif\n#if !defined(mediump)\n#define mediump\n#endif\n#if !defined(highp)\n#define highp\n#endif\n#endif","#ifdef GL_ES\nprecision highp float;\n#else\n#if !defined(lowp)\n#define lowp\n#endif\n#if !defined(mediump)\n#define mediump\n#endif\n#if !defined(highp)\n#define highp\n#endif\n#endif\nvec2 unpack_float(const float packedValue) {int packedIntValue=int(packedValue);int v0=packedIntValue/256;return vec2(v0,packedIntValue-v0*256);}vec2 unpack_opacity(const float packedOpacity) {int intOpacity=int(packedOpacity)/2;return vec2(float(intOpacity)/127.0,mod(packedOpacity,2.0));}vec4 decode_color(const vec2 encodedColor) {return vec4(unpack_float(encodedColor[0])/255.0,unpack_float(encodedColor[1])/255.0\n);}float unpack_mix_vec2(const vec2 packedValue,const float t) {return mix(packedValue[0],packedValue[1],t);}vec4 unpack_mix_color(const vec4 packedColors,const float t) {vec4 minColor=decode_color(vec2(packedColors[0],packedColors[1]));vec4 maxColor=decode_color(vec2(packedColors[2],packedColors[3]));return mix(minColor,maxColor,t);}vec2 get_pattern_pos(const vec2 pixel_coord_upper,const vec2 pixel_coord_lower,const vec2 pattern_size,const float tile_units_to_pixels,const vec2 pos) {vec2 offset=mod(mod(mod(pixel_coord_upper,pattern_size)*256.0,pattern_size)*256.0+pixel_coord_lower,pattern_size);return (tile_units_to_pixels*pos+offset)/pattern_size;}"),Ne=cr("uniform vec4 u_color;uniform float u_opacity;void main() {gl_FragColor=u_color*u_opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}"),je=cr("uniform vec2 u_pattern_tl_a;uniform vec2 u_pattern_br_a;uniform vec2 u_pattern_tl_b;uniform vec2 u_pattern_br_b;uniform vec2 u_texsize;uniform float u_mix;uniform float u_opacity;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(u_pattern_tl_a/u_texsize,u_pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(u_pattern_tl_b/u_texsize,u_pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_mix)*u_opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_pattern_size_a;uniform vec2 u_pattern_size_b;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_scale_a;uniform float u_scale_b;uniform float u_tile_units_to_pixels;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_a*u_pattern_size_a,u_tile_units_to_pixels,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_b*u_pattern_size_b,u_tile_units_to_pixels,a_pos);}"),Ve=cr("varying vec3 v_data;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define mediump float radius\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define highp vec4 stroke_color\n#pragma mapbox: define mediump float stroke_width\n#pragma mapbox: define lowp float stroke_opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize mediump float radius\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize highp vec4 stroke_color\n#pragma mapbox: initialize mediump float stroke_width\n#pragma mapbox: initialize lowp float stroke_opacity\nvec2 extrude=v_data.xy;float extrude_length=length(extrude);lowp float antialiasblur=v_data.z;float antialiased_blur=-max(blur,antialiasblur);float opacity_t=smoothstep(0.0,antialiased_blur,extrude_length-1.0);float color_t=stroke_width < 0.01 ? 0.0 : smoothstep(antialiased_blur,0.0,extrude_length-radius/(radius+stroke_width));gl_FragColor=opacity_t*mix(color*opacity,stroke_color*stroke_opacity,color_t);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform bool u_scale_with_map;uniform bool u_pitch_with_map;uniform vec2 u_extrude_scale;uniform lowp float u_device_pixel_ratio;uniform highp float u_camera_to_center_distance;attribute vec2 a_pos;varying vec3 v_data;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define mediump float radius\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define highp vec4 stroke_color\n#pragma mapbox: define mediump float stroke_width\n#pragma mapbox: define lowp float stroke_opacity\nvoid main(void) {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize mediump float radius\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize highp vec4 stroke_color\n#pragma mapbox: initialize mediump float stroke_width\n#pragma mapbox: initialize lowp float stroke_opacity\nvec2 extrude=vec2(mod(a_pos,2.0)*2.0-1.0);vec2 circle_center=floor(a_pos*0.5);if (u_pitch_with_map) {vec2 corner_position=circle_center;if (u_scale_with_map) {corner_position+=extrude*(radius+stroke_width)*u_extrude_scale;} else {vec4 projected_center=u_matrix*vec4(circle_center,0,1);corner_position+=extrude*(radius+stroke_width)*u_extrude_scale*(projected_center.w/u_camera_to_center_distance);}gl_Position=u_matrix*vec4(corner_position,0,1);} else {gl_Position=u_matrix*vec4(circle_center,0,1);if (u_scale_with_map) {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*u_camera_to_center_distance;} else {gl_Position.xy+=extrude*(radius+stroke_width)*u_extrude_scale*gl_Position.w;}}lowp float antialiasblur=1.0/u_device_pixel_ratio/(radius+stroke_width);v_data=vec3(extrude.x,extrude.y,antialiasblur);}"),Ue=cr("void main() {gl_FragColor=vec4(1.0);}","attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}"),qe=cr("uniform highp float u_intensity;varying vec2 v_extrude;\n#pragma mapbox: define highp float weight\n#define GAUSS_COEF 0.3989422804014327\nvoid main() {\n#pragma mapbox: initialize highp float weight\nfloat d=-0.5*3.0*3.0*dot(v_extrude,v_extrude);float val=weight*u_intensity*GAUSS_COEF*exp(d);gl_FragColor=vec4(val,1.0,1.0,1.0);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform float u_extrude_scale;uniform float u_opacity;uniform float u_intensity;attribute vec2 a_pos;varying vec2 v_extrude;\n#pragma mapbox: define highp float weight\n#pragma mapbox: define mediump float radius\nconst highp float ZERO=1.0/255.0/16.0;\n#define GAUSS_COEF 0.3989422804014327\nvoid main(void) {\n#pragma mapbox: initialize highp float weight\n#pragma mapbox: initialize mediump float radius\nvec2 unscaled_extrude=vec2(mod(a_pos,2.0)*2.0-1.0);float S=sqrt(-2.0*log(ZERO/weight/u_intensity/GAUSS_COEF))/3.0;v_extrude=S*unscaled_extrude;vec2 extrude=v_extrude*radius*u_extrude_scale;vec4 pos=vec4(floor(a_pos*0.5)+extrude,0,1);gl_Position=u_matrix*pos;}"),He=cr("uniform sampler2D u_image;uniform sampler2D u_color_ramp;uniform float u_opacity;varying vec2 v_pos;void main() {float t=texture2D(u_image,v_pos).r;vec4 color=texture2D(u_color_ramp,vec2(t,0.5));gl_FragColor=color*u_opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(0.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_world;attribute vec2 a_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos*u_world,0,1);v_pos.x=a_pos.x;v_pos.y=1.0-a_pos.y;}"),Ge=cr("varying float v_placed;varying float v_notUsed;void main() {float alpha=0.5;gl_FragColor=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {gl_FragColor=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {gl_FragColor*=.1;}}","attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;attribute vec2 a_shift;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);gl_Position.xy+=(a_extrude+a_shift)*u_extrude_scale*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;}"),Ye=cr("uniform float u_overscale_factor;varying float v_placed;varying float v_notUsed;varying float v_radius;varying vec2 v_extrude;varying vec2 v_extrude_scale;void main() {float alpha=0.5;vec4 color=vec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed > 0.5) {color=vec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed > 0.5) {color*=.2;}float extrude_scale_length=length(v_extrude_scale);float extrude_length=length(v_extrude)*extrude_scale_length;float stroke_width=15.0*extrude_scale_length/u_overscale_factor;float radius=v_radius*extrude_scale_length;float distance_to_edge=abs(extrude_length-radius);float opacity_t=smoothstep(-stroke_width,0.0,-distance_to_edge);gl_FragColor=opacity_t*color;}","attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;varying float v_radius;varying vec2 v_extrude;varying vec2 v_extrude_scale;void main() {vec4 projectedPoint=u_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float collision_perspective_ratio=clamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position=u_matrix*vec4(a_pos,0.0,1.0);highp float padding_factor=1.2;gl_Position.xy+=a_extrude*u_extrude_scale*padding_factor*gl_Position.w*collision_perspective_ratio;v_placed=a_placed.x;v_notUsed=a_placed.y;v_radius=abs(a_extrude.y);v_extrude=a_extrude*padding_factor;v_extrude_scale=u_extrude_scale*u_camera_to_center_distance*collision_perspective_ratio;}"),We=cr("uniform highp vec4 u_color;void main() {gl_FragColor=u_color;}","attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);}"),Xe=cr("#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float opacity\ngl_FragColor=color*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","attribute vec2 a_pos;uniform mat4 u_matrix;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float opacity\ngl_Position=u_matrix*vec4(a_pos,0,1);}"),Ze=cr("varying vec2 v_pos;\n#pragma mapbox: define highp vec4 outline_color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 outline_color\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=outline_color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","attribute vec2 a_pos;uniform mat4 u_matrix;uniform vec2 u_world;varying vec2 v_pos;\n#pragma mapbox: define highp vec4 outline_color\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 outline_color\n#pragma mapbox: initialize lowp float opacity\ngl_Position=u_matrix*vec4(a_pos,0,1);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}"),Je=cr("uniform vec2 u_texsize;uniform sampler2D u_image;uniform float u_fade;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);float dist=length(v_pos-gl_FragCoord.xy);float alpha=1.0-smoothstep(0.0,1.0,dist);gl_FragColor=mix(color1,color2,u_fade)*alpha*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_world;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec4 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;gl_Position=u_matrix*vec4(a_pos,0,1);vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,a_pos);v_pos=(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}"),Ke=cr("uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);gl_FragColor=mix(color1,color2,u_fade)*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec4 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileZoomRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);gl_Position=u_matrix*vec4(a_pos,0,1);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileZoomRatio,a_pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileZoomRatio,a_pos);}"),Qe=cr("varying vec4 v_color;void main() {gl_FragColor=v_color;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;uniform lowp float u_opacity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec4 v_color;\n#pragma mapbox: define highp float base\n#pragma mapbox: define highp float height\n#pragma mapbox: define highp vec4 color\nvoid main() {\n#pragma mapbox: initialize highp float base\n#pragma mapbox: initialize highp float height\n#pragma mapbox: initialize highp vec4 color\nvec3 normal=a_normal_ed.xyz;base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);gl_Position=u_matrix*vec4(a_pos,t > 0.0 ? height : base,1);float colorvalue=color.r*0.2126+color.g*0.7152+color.b*0.0722;v_color=vec4(0.0,0.0,0.0,1.0);vec4 ambientlight=vec4(0.03,0.03,0.03,1.0);color+=ambientlight;float directional=clamp(dot(normal/16384.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_color.r+=clamp(color.r*directional*u_lightcolor.r,mix(0.0,0.3,1.0-u_lightcolor.r),1.0);v_color.g+=clamp(color.g*directional*u_lightcolor.g,mix(0.0,0.3,1.0-u_lightcolor.g),1.0);v_color.b+=clamp(color.b*directional*u_lightcolor.b,mix(0.0,0.3,1.0-u_lightcolor.b),1.0);v_color*=u_opacity;}"),$e=cr("uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float base\n#pragma mapbox: initialize lowp float height\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;vec2 imagecoord=mod(v_pos_a,1.0);vec2 pos=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1=texture2D(u_image,pos);vec2 imagecoord_b=mod(v_pos_b,1.0);vec2 pos2=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2=texture2D(u_image,pos2);vec4 mixedColor=mix(color1,color2,u_fade);gl_FragColor=mixedColor*v_lighting;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform vec4 u_scale;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\n#pragma mapbox: define lowp float base\n#pragma mapbox: define lowp float height\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float base\n#pragma mapbox: initialize lowp float height\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec3 normal=a_normal_ed.xyz;float edgedistance=a_normal_ed.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);base=max(0.0,base);height=max(0.0,height);float t=mod(normal.x,2.0);float z=t > 0.0 ? height : base;gl_Position=u_matrix*vec4(a_pos,z,1);vec2 pos=normal.x==1.0 && normal.y==0.0 && normal.z==16384.0\n? a_pos\n: vec2(edgedistance,z*u_height_factor);v_pos_a=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,pos);v_pos_b=get_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,pos);v_lighting=vec4(0.0,0.0,0.0,1.0);float directional=clamp(dot(normal/16383.0,u_lightpos),0.0,1.0);directional=mix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),directional);if (normal.y !=0.0) {directional*=((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_lighting.rgb+=clamp(directional*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_lighting*=u_opacity;}"),tr=cr("#ifdef GL_ES\nprecision highp float;\n#endif\nuniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;uniform float u_maxzoom;float getElevation(vec2 coord,float bias) {vec4 data=texture2D(u_image,coord)*255.0;return (data.r+data.g*256.0+data.b*256.0*256.0)/4.0;}void main() {vec2 epsilon=1.0/u_dimension;float a=getElevation(v_pos+vec2(-epsilon.x,-epsilon.y),0.0);float b=getElevation(v_pos+vec2(0,-epsilon.y),0.0);float c=getElevation(v_pos+vec2(epsilon.x,-epsilon.y),0.0);float d=getElevation(v_pos+vec2(-epsilon.x,0),0.0);float e=getElevation(v_pos,0.0);float f=getElevation(v_pos+vec2(epsilon.x,0),0.0);float g=getElevation(v_pos+vec2(-epsilon.x,epsilon.y),0.0);float h=getElevation(v_pos+vec2(0,epsilon.y),0.0);float i=getElevation(v_pos+vec2(epsilon.x,epsilon.y),0.0);float exaggeration=u_zoom < 2.0 ? 0.4 : u_zoom < 4.5 ? 0.35 : 0.3;vec2 deriv=vec2((c+f+f+i)-(a+d+d+g),(g+h+h+i)-(a+b+b+c))/ pow(2.0,(u_zoom-u_maxzoom)*exaggeration+19.2562-u_zoom);gl_FragColor=clamp(vec4(deriv.x/2.0+0.5,deriv.y/2.0+0.5,1.0,1.0),0.0,1.0);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_dimension;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);highp vec2 epsilon=1.0/u_dimension;float scale=(u_dimension.x-2.0)/u_dimension.x;v_pos=(a_texture_pos/8192.0)*scale+epsilon;}"),er=cr("uniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_latrange;uniform vec2 u_light;uniform vec4 u_shadow;uniform vec4 u_highlight;uniform vec4 u_accent;\n#define PI 3.141592653589793\nvoid main() {vec4 pixel=texture2D(u_image,v_pos);vec2 deriv=((pixel.rg*2.0)-1.0);float scaleFactor=cos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));float slope=atan(1.25*length(deriv)/scaleFactor);float aspect=deriv.x !=0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y > 0.0 ? 1.0 :-1.0);float intensity=u_light.x;float azimuth=u_light.y+PI;float base=1.875-intensity*1.75;float maxValue=0.5*PI;float scaledSlope=intensity !=0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent=cos(scaledSlope);vec4 accent_color=(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade=abs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color=mix(u_shadow,u_highlight,shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);gl_FragColor=accent_color*(1.0-shade_color.a)+shade_color;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos=a_texture_pos/8192.0;}"),rr=cr("uniform lowp float u_device_pixel_ratio;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);gl_FragColor=color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define scale 0.015873016\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform vec2 u_units_to_pixels;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_linesofar;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float width\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}"),nr=cr("uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;varying highp float v_lineprogress;\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color=texture2D(u_image,vec2(v_lineprogress,0.5));gl_FragColor=color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define MAX_LINE_DISTANCE 32767.0\n#define scale 0.015873016\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_lineprogress;\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\nvoid main() {\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float width\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;v_lineprogress=(floor(a_data.z/4.0)+a_data.w*64.0)*2.0/MAX_LINE_DISTANCE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_width2=vec2(outset,inset);}"),ar=cr("uniform lowp float u_device_pixel_ratio;uniform vec2 u_texsize;uniform float u_fade;uniform mediump vec4 u_scale;uniform sampler2D u_image;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\nvec2 pattern_tl_a=pattern_from.xy;vec2 pattern_br_a=pattern_from.zw;vec2 pattern_tl_b=pattern_to.xy;vec2 pattern_br_b=pattern_to.zw;float pixelRatio=u_scale.x;float tileZoomRatio=u_scale.y;float fromScale=u_scale.z;float toScale=u_scale.w;vec2 display_size_a=vec2((pattern_br_a.x-pattern_tl_a.x)/pixelRatio,(pattern_br_a.y-pattern_tl_a.y)/pixelRatio);vec2 display_size_b=vec2((pattern_br_b.x-pattern_tl_b.x)/pixelRatio,(pattern_br_b.y-pattern_tl_b.y)/pixelRatio);vec2 pattern_size_a=vec2(display_size_a.x*fromScale/tileZoomRatio,display_size_a.y);vec2 pattern_size_b=vec2(display_size_b.x*toScale/tileZoomRatio,display_size_b.y);float dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float x_a=mod(v_linesofar/pattern_size_a.x,1.0);float x_b=mod(v_linesofar/pattern_size_b.x,1.0);float y_a=0.5+(v_normal.y*clamp(v_width2.s,0.0,(pattern_size_a.y+2.0)/2.0)/pattern_size_a.y);float y_b=0.5+(v_normal.y*clamp(v_width2.s,0.0,(pattern_size_b.y+2.0)/2.0)/pattern_size_b.y);vec2 pos_a=mix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,vec2(x_a,y_a));vec2 pos_b=mix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,vec2(x_b,y_b));vec4 color=mix(texture2D(u_image,pos_a),texture2D(u_image,pos_b),u_fade);gl_FragColor=color*alpha*opacity;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define scale 0.015873016\n#define LINE_DISTANCE_SCALE 2.0\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform vec2 u_units_to_pixels;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp vec4 pattern_from\n#pragma mapbox: define lowp vec4 pattern_to\nvoid main() {\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize mediump float width\n#pragma mapbox: initialize mediump vec4 pattern_from\n#pragma mapbox: initialize mediump vec4 pattern_to\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_linesofar=a_linesofar;v_width2=vec2(outset,inset);}"),ir=cr("uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;uniform float u_sdfgamma;uniform float u_mix;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp float floorwidth\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float width\n#pragma mapbox: initialize lowp float floorwidth\nfloat dist=length(v_normal)*v_width2.s;float blur2=(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha=clamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float sdfdist_a=texture2D(u_image,v_tex_a).a;float sdfdist_b=texture2D(u_image,v_tex_b).a;float sdfdist=mix(sdfdist_a,sdfdist_b,u_mix);alpha*=smoothstep(0.5-u_sdfgamma/floorwidth,0.5+u_sdfgamma/floorwidth,sdfdist);gl_FragColor=color*(alpha*opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","\n#define scale 0.015873016\n#define LINE_DISTANCE_SCALE 2.0\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_patternscale_a;uniform float u_tex_y_a;uniform vec2 u_patternscale_b;uniform float u_tex_y_b;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\n#pragma mapbox: define highp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define mediump float gapwidth\n#pragma mapbox: define lowp float offset\n#pragma mapbox: define mediump float width\n#pragma mapbox: define lowp float floorwidth\nvoid main() {\n#pragma mapbox: initialize highp vec4 color\n#pragma mapbox: initialize lowp float blur\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize mediump float gapwidth\n#pragma mapbox: initialize lowp float offset\n#pragma mapbox: initialize mediump float width\n#pragma mapbox: initialize lowp float floorwidth\nfloat ANTIALIASING=1.0/u_device_pixel_ratio/2.0;vec2 a_extrude=a_data.xy-128.0;float a_direction=mod(a_data.z,4.0)-1.0;float a_linesofar=(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos=floor(a_pos_normal*0.5);mediump vec2 normal=a_pos_normal-2.0*pos;normal.y=normal.y*2.0-1.0;v_normal=normal;gapwidth=gapwidth/2.0;float halfwidth=width/2.0;offset=-1.0*offset;float inset=gapwidth+(gapwidth > 0.0 ? ANTIALIASING : 0.0);float outset=gapwidth+halfwidth*(gapwidth > 0.0 ? 2.0 : 1.0)+(halfwidth==0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist=outset*a_extrude*scale;mediump float u=0.5*a_direction;mediump float t=1.0-abs(u);mediump vec2 offset2=offset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude=u_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position=u_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective=length(dist);float extrude_length_with_perspective=length(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale=extrude_length_without_perspective/extrude_length_with_perspective;v_tex_a=vec2(a_linesofar*u_patternscale_a.x/floorwidth,normal.y*u_patternscale_a.y+u_tex_y_a);v_tex_b=vec2(a_linesofar*u_patternscale_b.x/floorwidth,normal.y*u_patternscale_b.y+u_tex_y_b);v_width2=vec2(outset,inset);}"),or=cr("uniform float u_fade_t;uniform float u_opacity;uniform sampler2D u_image0;uniform sampler2D u_image1;varying vec2 v_pos0;varying vec2 v_pos1;uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;void main() {vec4 color0=texture2D(u_image0,v_pos0);vec4 color1=texture2D(u_image1,v_pos1);if (color0.a > 0.0) {color0.rgb=color0.rgb/color0.a;}if (color1.a > 0.0) {color1.rgb=color1.rgb/color1.a;}vec4 color=mix(color0,color1,u_fade_t);color.a*=u_opacity;vec3 rgb=color.rgb;rgb=vec3(dot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average=(color.r+color.g+color.b)/3.0;rgb+=(average-rgb)*u_saturation_factor;rgb=(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec=vec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec=vec3(u_brightness_high,u_brightness_high,u_brightness_high);gl_FragColor=vec4(mix(u_high_vec,u_low_vec,rgb)*color.a,color.a);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","uniform mat4 u_matrix;uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform float u_buffer_scale;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos0;varying vec2 v_pos1;void main() {gl_Position=u_matrix*vec4(a_pos,0,1);v_pos0=(((a_texture_pos/8192.0)-0.5)/u_buffer_scale )+0.5;v_pos1=(v_pos0*u_scale_parent)+u_tl_parent;}"),sr=cr("uniform sampler2D u_texture;varying vec2 v_tex;varying float v_fade_opacity;\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\nlowp float alpha=opacity*v_fade_opacity;gl_FragColor=texture2D(u_texture,v_tex)*alpha;\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform highp float u_camera_to_center_distance;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform float u_fade_change;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform vec2 u_texsize;varying vec2 v_tex;varying float v_fade_opacity;\n#pragma mapbox: define lowp float opacity\nvoid main() {\n#pragma mapbox: initialize lowp float opacity\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size[0],a_size[1],u_size_t)/256.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size[0]/256.0;} else if (!u_is_size_zoom_constant && u_is_size_feature_constant) {size=u_size;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\ncamera_to_anchor_distance/u_camera_to_center_distance :\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);v_tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;v_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));}"),lr=cr("#define SDF_PX 8.0\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;uniform bool u_is_text;varying vec2 v_data0;varying vec3 v_data1;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nvoid main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nfloat EDGE_GAMMA=0.105/u_device_pixel_ratio;vec2 tex=v_data0.xy;float gamma_scale=v_data1.x;float size=v_data1.y;float fade_opacity=v_data1[2];float fontScale=u_is_text ? size/24.0 : size;lowp vec4 color=fill_color;highp float gamma=EDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff=(256.0-64.0)/256.0;if (u_is_halo) {color=halo_color;gamma=(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff=(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist=texture2D(u_texture,tex).a;highp float gamma_scaled=gamma*gamma_scale;highp float alpha=smoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor=color*(alpha*opacity*fade_opacity);\n#ifdef OVERDRAW_INSPECTOR\ngl_FragColor=vec4(1.0);\n#endif\n}","const float PI=3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;varying vec2 v_data0;varying vec3 v_data1;\n#pragma mapbox: define highp vec4 fill_color\n#pragma mapbox: define highp vec4 halo_color\n#pragma mapbox: define lowp float opacity\n#pragma mapbox: define lowp float halo_width\n#pragma mapbox: define lowp float halo_blur\nvoid main() {\n#pragma mapbox: initialize highp vec4 fill_color\n#pragma mapbox: initialize highp vec4 halo_color\n#pragma mapbox: initialize lowp float opacity\n#pragma mapbox: initialize lowp float halo_width\n#pragma mapbox: initialize lowp float halo_blur\nvec2 a_pos=a_pos_offset.xy;vec2 a_offset=a_pos_offset.zw;vec2 a_tex=a_data.xy;vec2 a_size=a_data.zw;highp float segment_angle=-a_projected_pos[2];float size;if (!u_is_size_zoom_constant && !u_is_size_feature_constant) {size=mix(a_size[0],a_size[1],u_size_t)/256.0;} else if (u_is_size_zoom_constant && !u_is_size_feature_constant) {size=a_size[0]/256.0;} else if (!u_is_size_zoom_constant && u_is_size_feature_constant) {size=u_size;} else {size=u_size;}vec4 projectedPoint=u_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance=projectedPoint.w;highp float distance_ratio=u_pitch_with_map ?\ncamera_to_anchor_distance/u_camera_to_center_distance :\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio=clamp(0.5+0.5*distance_ratio,0.0,4.0);size*=perspective_ratio;float fontScale=u_is_text ? size/24.0 : size;highp float symbol_rotation=0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint=u_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a=projectedPoint.xy/projectedPoint.w;vec2 b=offsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation=atan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin=sin(segment_angle+symbol_rotation);highp float angle_cos=cos(segment_angle+symbol_rotation);mat2 rotation_matrix=mat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos=u_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position=u_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);float gamma_scale=gl_Position.w;vec2 tex=a_tex/u_texsize;vec2 fade_opacity=unpack_opacity(a_fade_opacity);float fade_change=fade_opacity[1] > 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity=max(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0=vec2(tex.x,tex.y);v_data1=vec3(gamma_scale,size,interpolated_fade_opacity);}");function cr(t,e){var r=/#pragma mapbox: ([\w]+) ([\w]+) ([\w]+) ([\w]+)/g,n={};return{fragmentSource:t=t.replace(r,function(t,e,r,a,i){return n[i]=!0,"define"===e?"\n#ifndef HAS_UNIFORM_u_"+i+"\nvarying "+r+" "+a+" "+i+";\n#else\nuniform "+r+" "+a+" u_"+i+";\n#endif\n":"\n#ifdef HAS_UNIFORM_u_"+i+"\n "+r+" "+a+" "+i+" = u_"+i+";\n#endif\n"}),vertexSource:e=e.replace(r,function(t,e,r,a,i){var o="float"===a?"vec2":"vec4",s=i.match(/color/)?"color":o;return n[i]?"define"===e?"\n#ifndef HAS_UNIFORM_u_"+i+"\nuniform lowp float u_"+i+"_t;\nattribute "+r+" "+o+" a_"+i+";\nvarying "+r+" "+a+" "+i+";\n#else\nuniform "+r+" "+a+" u_"+i+";\n#endif\n":"vec4"===s?"\n#ifndef HAS_UNIFORM_u_"+i+"\n "+i+" = a_"+i+";\n#else\n "+r+" "+a+" "+i+" = u_"+i+";\n#endif\n":"\n#ifndef HAS_UNIFORM_u_"+i+"\n "+i+" = unpack_mix_"+s+"(a_"+i+", u_"+i+"_t);\n#else\n "+r+" "+a+" "+i+" = u_"+i+";\n#endif\n":"define"===e?"\n#ifndef HAS_UNIFORM_u_"+i+"\nuniform lowp float u_"+i+"_t;\nattribute "+r+" "+o+" a_"+i+";\n#else\nuniform "+r+" "+a+" u_"+i+";\n#endif\n":"vec4"===s?"\n#ifndef HAS_UNIFORM_u_"+i+"\n "+r+" "+a+" "+i+" = a_"+i+";\n#else\n "+r+" "+a+" "+i+" = u_"+i+";\n#endif\n":"\n#ifndef HAS_UNIFORM_u_"+i+"\n "+r+" "+a+" "+i+" = unpack_mix_"+s+"(a_"+i+", u_"+i+"_t);\n#else\n "+r+" "+a+" "+i+" = u_"+i+";\n#endif\n"})}}var ur=Object.freeze({prelude:Be,background:Ne,backgroundPattern:je,circle:Ve,clippingMask:Ue,heatmap:qe,heatmapTexture:He,collisionBox:Ge,collisionCircle:Ye,debug:We,fill:Xe,fillOutline:Ze,fillOutlinePattern:Je,fillPattern:Ke,fillExtrusion:Qe,fillExtrusionPattern:$e,hillshadePrepare:tr,hillshade:er,line:rr,lineGradient:nr,linePattern:ar,lineSDF:ir,raster:or,symbolIcon:sr,symbolSDF:lr}),hr=function(){this.boundProgram=null,this.boundLayoutVertexBuffer=null,this.boundPaintVertexBuffers=[],this.boundIndexBuffer=null,this.boundVertexOffset=null,this.boundDynamicVertexBuffer=null,this.vao=null};hr.prototype.bind=function(t,e,r,n,a,i,o,s){this.context=t;for(var l=this.boundPaintVertexBuffers.length!==n.length,c=0;!l&&c<n.length;c++)this.boundPaintVertexBuffers[c]!==n[c]&&(l=!0);var u=!this.vao||this.boundProgram!==e||this.boundLayoutVertexBuffer!==r||l||this.boundIndexBuffer!==a||this.boundVertexOffset!==i||this.boundDynamicVertexBuffer!==o||this.boundDynamicVertexBuffer2!==s;!t.extVertexArrayObject||u?this.freshBind(e,r,n,a,i,o,s):(t.bindVertexArrayOES.set(this.vao),o&&o.bind(),a&&a.dynamicDraw&&a.bind(),s&&s.bind())},hr.prototype.freshBind=function(t,e,r,n,a,i,o){var s,l=t.numAttributes,c=this.context,u=c.gl;if(c.extVertexArrayObject)this.vao&&this.destroy(),this.vao=c.extVertexArrayObject.createVertexArrayOES(),c.bindVertexArrayOES.set(this.vao),s=0,this.boundProgram=t,this.boundLayoutVertexBuffer=e,this.boundPaintVertexBuffers=r,this.boundIndexBuffer=n,this.boundVertexOffset=a,this.boundDynamicVertexBuffer=i,this.boundDynamicVertexBuffer2=o;else{s=c.currentNumAttributes||0;for(var h=l;h<s;h++)u.disableVertexAttribArray(h)}e.enableAttributes(u,t);for(var f=0,p=r;f<p.length;f+=1)p[f].enableAttributes(u,t);i&&i.enableAttributes(u,t),o&&o.enableAttributes(u,t),e.bind(),e.setVertexAttribPointers(u,t,a);for(var d=0,g=r;d<g.length;d+=1){var v=g[d];v.bind(),v.setVertexAttribPointers(u,t,a)}i&&(i.bind(),i.setVertexAttribPointers(u,t,a)),n&&n.bind(),o&&(o.bind(),o.setVertexAttribPointers(u,t,a)),c.currentNumAttributes=l},hr.prototype.destroy=function(){this.vao&&(this.context.extVertexArrayObject.deleteVertexArrayOES(this.vao),this.vao=null)};var fr=function(t,e,r,n,a){var i=t.gl;this.program=i.createProgram();var o=r.defines();a&&o.push("#define OVERDRAW_INSPECTOR;");var s=o.concat(Be.fragmentSource,e.fragmentSource).join("\n"),l=o.concat(Be.vertexSource,e.vertexSource).join("\n"),c=i.createShader(i.FRAGMENT_SHADER);i.shaderSource(c,s),i.compileShader(c),i.attachShader(this.program,c);var u=i.createShader(i.VERTEX_SHADER);i.shaderSource(u,l),i.compileShader(u),i.attachShader(this.program,u);for(var h=r.layoutAttributes||[],f=0;f<h.length;f++)i.bindAttribLocation(this.program,f,h[f].name);i.linkProgram(this.program),this.numAttributes=i.getProgramParameter(this.program,i.ACTIVE_ATTRIBUTES),this.attributes={};for(var p={},d=0;d<this.numAttributes;d++){var g=i.getActiveAttrib(this.program,d);g&&(this.attributes[g.name]=i.getAttribLocation(this.program,g.name))}for(var v=i.getProgramParameter(this.program,i.ACTIVE_UNIFORMS),m=0;m<v;m++){var y=i.getActiveUniform(this.program,m);y&&(p[y.name]=i.getUniformLocation(this.program,y.name))}this.fixedUniforms=n(t,p),this.binderUniforms=r.getUniforms(t,p)};function pr(e,r,n){var a=1/ce(n,1,r.transform.tileZoom),i=Math.pow(2,n.tileID.overscaledZ),o=n.tileSize*Math.pow(2,r.transform.tileZoom)/i,s=o*(n.tileID.canonical.x+n.tileID.wrap*i),l=o*n.tileID.canonical.y;return{u_image:0,u_texsize:n.imageAtlasTexture.size,u_scale:[t.browser.devicePixelRatio,a,e.fromScale,e.toScale],u_fade:e.t,u_pixel_coord_upper:[s>>16,l>>16],u_pixel_coord_lower:[65535&s,65535&l]}}fr.prototype.draw=function(t,e,r,n,a,i,o,s,l,c,u,h,f,p,d,g){var v,m=t.gl;for(var y in t.program.set(this.program),t.setDepthMode(r),t.setStencilMode(n),t.setColorMode(a),t.setCullFace(i),this.fixedUniforms)this.fixedUniforms[y].set(o[y]);p&&p.setUniforms(t,this.binderUniforms,h,{zoom:f});for(var x=(v={},v[m.LINES]=2,v[m.TRIANGLES]=3,v[m.LINE_STRIP]=1,v)[e],b=0,_=u.get();b<_.length;b+=1){var w=_[b],k=w.vaos||(w.vaos={});(k[s]||(k[s]=new hr)).bind(t,this,l,p?p.getPaintVertexBuffers():[],c,w.vertexOffset,d,g),m.drawElements(e,w.primitiveLength*x,m.UNSIGNED_SHORT,w.primitiveOffset*x*2)}};var dr=function(e,r,n,a){var i=r.style.light,o=i.properties.get("position"),s=[o.x,o.y,o.z],l=t.create$1();"viewport"===i.properties.get("anchor")&&t.fromRotation(l,-r.transform.angle),t.transformMat3(s,s,l);var c=i.properties.get("color");return{u_matrix:e,u_lightpos:s,u_lightintensity:i.properties.get("intensity"),u_lightcolor:[c.r,c.g,c.b],u_vertical_gradient:+n,u_opacity:a}},gr=function(e,r,n,a,i,o,s){return t.extend(dr(e,r,n,a),pr(o,r,s),{u_height_factor:-Math.pow(2,i.overscaledZ)/s.tileSize/8})},vr=function(t){return{u_matrix:t}},mr=function(e,r,n,a){return t.extend(vr(e),pr(n,r,a))},yr=function(t,e){return{u_matrix:t,u_world:e}},xr=function(e,r,n,a,i){return t.extend(mr(e,r,n,a),{u_world:i})},br=function(e,r,n,a){var i,o,s=e.transform;if("map"===a.paint.get("circle-pitch-alignment")){var l=ce(n,1,s.zoom);i=!0,o=[l,l]}else i=!1,o=s.pixelsToGLUnits;return{u_camera_to_center_distance:s.cameraToCenterDistance,u_scale_with_map:+("map"===a.paint.get("circle-pitch-scale")),u_matrix:e.translatePosMatrix(r.posMatrix,n,a.paint.get("circle-translate"),a.paint.get("circle-translate-anchor")),u_pitch_with_map:+i,u_device_pixel_ratio:t.browser.devicePixelRatio,u_extrude_scale:o}},_r=function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pixels_to_tile_units:new t.Uniform1f(e,r.u_pixels_to_tile_units),u_extrude_scale:new t.Uniform2f(e,r.u_extrude_scale),u_overscale_factor:new t.Uniform1f(e,r.u_overscale_factor)}},wr=function(t,e,r){var n=ce(r,1,e.zoom),a=Math.pow(2,e.zoom-r.tileID.overscaledZ),i=r.tileID.overscaleFactor();return{u_matrix:t,u_camera_to_center_distance:e.cameraToCenterDistance,u_pixels_to_tile_units:n,u_extrude_scale:[e.pixelsToGLUnits[0]/(n*a),e.pixelsToGLUnits[1]/(n*a)],u_overscale_factor:i}},kr=function(t,e){return{u_matrix:t,u_color:e}},Tr=function(t){return{u_matrix:t}},Mr=function(t,e,r,n){return{u_matrix:t,u_extrude_scale:ce(e,1,r),u_intensity:n}},Ar=function(t,e,r){var n=r.paint.get("hillshade-shadow-color"),a=r.paint.get("hillshade-highlight-color"),i=r.paint.get("hillshade-accent-color"),o=r.paint.get("hillshade-illumination-direction")*(Math.PI/180);"viewport"===r.paint.get("hillshade-illumination-anchor")&&(o-=t.transform.angle);var s=!t.options.moving;return{u_matrix:t.transform.calculatePosMatrix(e.tileID.toUnwrapped(),s),u_image:0,u_latrange:Er(t,e.tileID),u_light:[r.paint.get("hillshade-exaggeration"),o],u_shadow:n,u_highlight:a,u_accent:i}},Sr=function(e,r){var n=e.dem.stride,a=t.create();return t.ortho(a,0,t.EXTENT,-t.EXTENT,0,0,1),t.translate(a,a,[0,-t.EXTENT,0]),{u_matrix:a,u_image:1,u_dimension:[n,n],u_zoom:e.tileID.overscaledZ,u_maxzoom:r}};function Er(e,r){var n=Math.pow(2,r.canonical.z),a=r.canonical.y;return[new t.MercatorCoordinate(0,a/n).toLngLat().lat,new t.MercatorCoordinate(0,(a+1)/n).toLngLat().lat]}var Lr=function(e,r,n){var a=e.transform;return{u_matrix:Ir(e,r,n),u_ratio:1/ce(r,1,a.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_units_to_pixels:[1/a.pixelsToGLUnits[0],1/a.pixelsToGLUnits[1]]}},Cr=function(e,r,n){return t.extend(Lr(e,r,n),{u_image:0})},Pr=function(e,r,n,a){var i=e.transform,o=zr(r,i);return{u_matrix:Ir(e,r,n),u_texsize:r.imageAtlasTexture.size,u_ratio:1/ce(r,1,i.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_image:0,u_scale:[t.browser.devicePixelRatio,o,a.fromScale,a.toScale],u_fade:a.t,u_units_to_pixels:[1/i.pixelsToGLUnits[0],1/i.pixelsToGLUnits[1]]}},Or=function(e,r,n,a,i){var o=e.transform,s=e.lineAtlas,l=zr(r,o),c="round"===n.layout.get("line-cap"),u=s.getDash(a.from,c),h=s.getDash(a.to,c),f=u.width*i.fromScale,p=h.width*i.toScale;return t.extend(Lr(e,r,n),{u_patternscale_a:[l/f,-u.height/2],u_patternscale_b:[l/p,-h.height/2],u_sdfgamma:s.width/(256*Math.min(f,p)*t.browser.devicePixelRatio)/2,u_image:0,u_tex_y_a:u.y,u_tex_y_b:h.y,u_mix:i.t})};function zr(t,e){return 1/ce(t,1,e.tileZoom)}function Ir(t,e,r){return t.translatePosMatrix(e.tileID.posMatrix,e,r.paint.get("line-translate"),r.paint.get("line-translate-anchor"))}var Dr=function(t,e,r,n,a){return{u_matrix:t,u_tl_parent:e,u_scale_parent:r,u_buffer_scale:1,u_fade_t:n.mix,u_opacity:n.opacity*a.paint.get("raster-opacity"),u_image0:0,u_image1:1,u_brightness_low:a.paint.get("raster-brightness-min"),u_brightness_high:a.paint.get("raster-brightness-max"),u_saturation_factor:(o=a.paint.get("raster-saturation"),o>0?1-1/(1.001-o):-o),u_contrast_factor:(i=a.paint.get("raster-contrast"),i>0?1/(1-i):1+i),u_spin_weights:Rr(a.paint.get("raster-hue-rotate"))};var i,o};function Rr(t){t*=Math.PI/180;var e=Math.sin(t),r=Math.cos(t);return[(2*r+1)/3,(-Math.sqrt(3)*e-r+1)/3,(Math.sqrt(3)*e-r+1)/3]}var Fr=function(t,e,r,n,a,i,o,s,l,c){var u=a.transform;return{u_is_size_zoom_constant:+("constant"===t||"source"===t),u_is_size_feature_constant:+("constant"===t||"camera"===t),u_size_t:e?e.uSizeT:0,u_size:e?e.uSize:0,u_camera_to_center_distance:u.cameraToCenterDistance,u_pitch:u.pitch/360*2*Math.PI,u_rotate_symbol:+r,u_aspect_ratio:u.width/u.height,u_fade_change:a.options.fadeDuration?a.symbolFadeChange:1,u_matrix:i,u_label_plane_matrix:o,u_coord_matrix:s,u_is_text:+l,u_pitch_with_map:+n,u_texsize:c,u_texture:0}},Br=function(e,r,n,a,i,o,s,l,c,u,h){var f=i.transform;return t.extend(Fr(e,r,n,a,i,o,s,l,c,u),{u_gamma_scale:a?Math.cos(f._pitch)*f.cameraToCenterDistance:1,u_device_pixel_ratio:t.browser.devicePixelRatio,u_is_halo:+h})},Nr=function(t,e,r){return{u_matrix:t,u_opacity:e,u_color:r}},jr=function(e,r,n,a,i,o){return t.extend(function(t,e,r,n){var a=r.imageManager.getPattern(t.from),i=r.imageManager.getPattern(t.to),o=r.imageManager.getPixelSize(),s=o.width,l=o.height,c=Math.pow(2,n.tileID.overscaledZ),u=n.tileSize*Math.pow(2,r.transform.tileZoom)/c,h=u*(n.tileID.canonical.x+n.tileID.wrap*c),f=u*n.tileID.canonical.y;return{u_image:0,u_pattern_tl_a:a.tl,u_pattern_br_a:a.br,u_pattern_tl_b:i.tl,u_pattern_br_b:i.br,u_texsize:[s,l],u_mix:e.t,u_pattern_size_a:a.displaySize,u_pattern_size_b:i.displaySize,u_scale_a:e.fromScale,u_scale_b:e.toScale,u_tile_units_to_pixels:1/ce(n,1,r.transform.tileZoom),u_pixel_coord_upper:[h>>16,f>>16],u_pixel_coord_lower:[65535&h,65535&f]}}(a,o,n,i),{u_matrix:e,u_opacity:r})},Vr={fillExtrusion:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_lightpos:new t.Uniform3f(e,r.u_lightpos),u_lightintensity:new t.Uniform1f(e,r.u_lightintensity),u_lightcolor:new t.Uniform3f(e,r.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,r.u_vertical_gradient),u_opacity:new t.Uniform1f(e,r.u_opacity)}},fillExtrusionPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_lightpos:new t.Uniform3f(e,r.u_lightpos),u_lightintensity:new t.Uniform1f(e,r.u_lightintensity),u_lightcolor:new t.Uniform3f(e,r.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,r.u_vertical_gradient),u_height_factor:new t.Uniform1f(e,r.u_height_factor),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade),u_opacity:new t.Uniform1f(e,r.u_opacity)}},fill:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},fillPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},fillOutline:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world)}},fillOutlinePattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform4f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},circle:function(e,r){return{u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_scale_with_map:new t.Uniform1i(e,r.u_scale_with_map),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_extrude_scale:new t.Uniform2f(e,r.u_extrude_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},collisionBox:_r,collisionCircle:_r,debug:function(e,r){return{u_color:new t.UniformColor(e,r.u_color),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},clippingMask:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},heatmap:function(e,r){return{u_extrude_scale:new t.Uniform1f(e,r.u_extrude_scale),u_intensity:new t.Uniform1f(e,r.u_intensity),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},heatmapTexture:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_color_ramp:new t.Uniform1i(e,r.u_color_ramp),u_opacity:new t.Uniform1f(e,r.u_opacity)}},hillshade:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_latrange:new t.Uniform2f(e,r.u_latrange),u_light:new t.Uniform2f(e,r.u_light),u_shadow:new t.UniformColor(e,r.u_shadow),u_highlight:new t.UniformColor(e,r.u_highlight),u_accent:new t.UniformColor(e,r.u_accent)}},hillshadePrepare:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_dimension:new t.Uniform2f(e,r.u_dimension),u_zoom:new t.Uniform1f(e,r.u_zoom),u_maxzoom:new t.Uniform1f(e,r.u_maxzoom)}},line:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels)}},lineGradient:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_image:new t.Uniform1i(e,r.u_image)}},linePattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_texsize:new t.Uniform2f(e,r.u_texsize),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_image:new t.Uniform1i(e,r.u_image),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_scale:new t.Uniform4f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},lineSDF:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_patternscale_a:new t.Uniform2f(e,r.u_patternscale_a),u_patternscale_b:new t.Uniform2f(e,r.u_patternscale_b),u_sdfgamma:new t.Uniform1f(e,r.u_sdfgamma),u_image:new t.Uniform1i(e,r.u_image),u_tex_y_a:new t.Uniform1f(e,r.u_tex_y_a),u_tex_y_b:new t.Uniform1f(e,r.u_tex_y_b),u_mix:new t.Uniform1f(e,r.u_mix)}},raster:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_tl_parent:new t.Uniform2f(e,r.u_tl_parent),u_scale_parent:new t.Uniform1f(e,r.u_scale_parent),u_buffer_scale:new t.Uniform1f(e,r.u_buffer_scale),u_fade_t:new t.Uniform1f(e,r.u_fade_t),u_opacity:new t.Uniform1f(e,r.u_opacity),u_image0:new t.Uniform1i(e,r.u_image0),u_image1:new t.Uniform1i(e,r.u_image1),u_brightness_low:new t.Uniform1f(e,r.u_brightness_low),u_brightness_high:new t.Uniform1f(e,r.u_brightness_high),u_saturation_factor:new t.Uniform1f(e,r.u_saturation_factor),u_contrast_factor:new t.Uniform1f(e,r.u_contrast_factor),u_spin_weights:new t.Uniform3f(e,r.u_spin_weights)}},symbolIcon:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1f(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texture:new t.Uniform1i(e,r.u_texture)}},symbolSDF:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1f(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texture:new t.Uniform1i(e,r.u_texture),u_gamma_scale:new t.Uniform1f(e,r.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_is_halo:new t.Uniform1f(e,r.u_is_halo)}},background:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_opacity:new t.Uniform1f(e,r.u_opacity),u_color:new t.UniformColor(e,r.u_color)}},backgroundPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_opacity:new t.Uniform1f(e,r.u_opacity),u_image:new t.Uniform1i(e,r.u_image),u_pattern_tl_a:new t.Uniform2f(e,r.u_pattern_tl_a),u_pattern_br_a:new t.Uniform2f(e,r.u_pattern_br_a),u_pattern_tl_b:new t.Uniform2f(e,r.u_pattern_tl_b),u_pattern_br_b:new t.Uniform2f(e,r.u_pattern_br_b),u_texsize:new t.Uniform2f(e,r.u_texsize),u_mix:new t.Uniform1f(e,r.u_mix),u_pattern_size_a:new t.Uniform2f(e,r.u_pattern_size_a),u_pattern_size_b:new t.Uniform2f(e,r.u_pattern_size_b),u_scale_a:new t.Uniform1f(e,r.u_scale_a),u_scale_b:new t.Uniform1f(e,r.u_scale_b),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_tile_units_to_pixels:new t.Uniform1f(e,r.u_tile_units_to_pixels)}}};function Ur(e,r){for(var n=e.sort(function(t,e){return t.tileID.isLessThan(e.tileID)?-1:e.tileID.isLessThan(t.tileID)?1:0}),a=0;a<n.length;a++){var i={},o=n[a],s=n.slice(a+1);qr(o.tileID.wrapped(),o.tileID,s,new t.OverscaledTileID(0,o.tileID.wrap+1,0,0,0),i),o.setMask(i,r)}}function qr(e,r,n,a,i){for(var o=0;o<n.length;o++){var s=n[o];if(a.isLessThan(s.tileID))break;if(r.key===s.tileID.key)return;if(s.tileID.isChildOf(r)){for(var l=r.children(1/0),c=0;c<l.length;c++)qr(e,l[c],n.slice(o),a,i);return}}var u=r.overscaledZ-e.overscaledZ,h=new t.CanonicalTileID(u,r.canonical.x-(e.canonical.x<<u),r.canonical.y-(e.canonical.y<<u));i[h.key]=i[h.key]||h}function Hr(t,e,r,n,a){for(var i=t.context,o=i.gl,s=a?t.useProgram("collisionCircle"):t.useProgram("collisionBox"),l=0;l<n.length;l++){var c=n[l],u=e.getTile(c),h=u.getBucket(r);if(h){var f=a?h.collisionCircle:h.collisionBox;f&&s.draw(i,a?o.TRIANGLES:o.LINES,Mt.disabled,At.disabled,t.colorModeForRenderPass(),Et.disabled,wr(c.posMatrix,t.transform,u),r.id,f.layoutVertexBuffer,f.indexBuffer,f.segments,null,t.transform.zoom,null,null,f.collisionVertexBuffer)}}}var Gr=t.identity(new Float32Array(16));function Yr(e,r,n,a,i,o){var s=t.getAnchorAlignment(e),l=-(s.horizontalAlign-.5)*r,c=-(s.verticalAlign-.5)*n,u=t.evaluateRadialOffset(e,a);return new t.Point((l/i+u[0])*o,(c/i+u[1])*o)}function Wr(e,r,n,a,i,o,s,l,c,u){var h=e.text.placedSymbolArray,f=e.text.dynamicLayoutVertexArray;f.clear();for(var p=0;p<h.length;p++){var d=h.get(p),g=e.allowVerticalPlacement&&!d.placedOrientation,v=d.hidden||!d.crossTileID||g?null:a[d.crossTileID];if(v){var m=new t.Point(d.anchorX,d.anchorY),y=Jt(m,n?l:s),x=.5+o.cameraToCenterDistance/y.signedDistanceFromCamera*.5,b=i.evaluateSizeForFeature(e.textSizeData,u,d)*x/t.ONE_EM;n&&(b*=e.tilePixelRatio/c);for(var _=v.width,w=v.height,k=v.radialOffset,T=v.textBoxScale,M=Yr(v.anchor,_,w,k,T,b),A=n?Jt(m.add(M),s).point:y.point.add(r?M.rotate(-o.angle):M),S=e.allowVerticalPlacement&&d.placedOrientation===t.WritingMode.vertical?Math.PI/2:0,E=0;E<d.numGlyphs;E++)t.addDynamicAttributes(f,A,S)}else ie(d.numGlyphs,f)}e.text.dynamicLayoutVertexBuffer.updateData(f)}function Xr(e){var r=e.text.placedSymbolArray,n=e.text.dynamicLayoutVertexArray;n.clear();for(var a=0;a<r.length;a++){var i=r.get(a);if(i.hidden||!i.placedOrientation)ie(i.numGlyphs,n);else for(var o=new t.Point(i.anchorX,i.anchorY),s=e.allowVerticalPlacement&&i.placedOrientation===t.WritingMode.vertical?Math.PI/2:0,l=0;l<i.numGlyphs;l++)t.addDynamicAttributes(n,o,s)}e.text.dynamicLayoutVertexBuffer.updateData(n)}function Zr(e,r,n,a,i,o,s,l,c,u,h,f,p){for(var d,g,v=e.context,m=v.gl,y=e.transform,x="map"===l,b="map"===c,_=x&&"point"!==n.layout.get("symbol-placement"),w=x&&!b&&!_,k=void 0!==n.layout.get("symbol-sort-key").constantOr(1),T=e.depthModeForSublayer(0,Mt.ReadOnly),M=n.layout.get("text-variable-anchor"),A=[],S=0,E=a;S<E.length;S+=1){var L=E[S],C=r.getTile(L),P=C.getBucket(n);if(P){var O=i?P.text:P.icon;if(O&&O.segments.get().length){var z=O.programConfigurations.get(n.id),I=i||P.sdfIcons,D=i?P.textSizeData:P.iconSizeData;d||(d=e.useProgram(I?"symbolSDF":"symbolIcon",z),g=t.evaluateSizeForZoom(D,y.zoom)),v.activeTexture.set(m.TEXTURE0);var R=void 0,F=void 0,B=void 0;if(i)F=C.glyphAtlasTexture,B=m.LINEAR,R=C.glyphAtlasTexture.size;else{var N=1!==n.layout.get("icon-size").constantOr(0)||P.iconsNeedLinear,j=b||0!==y.pitch;F=C.imageAtlasTexture,B=I||e.options.rotating||e.options.zooming||N||j?m.LINEAR:m.NEAREST,R=C.imageAtlasTexture.size}var V=ce(C,1,e.transform.zoom),U=Xt(L.posMatrix,b,x,e.transform,V),q=Zt(L.posMatrix,b,x,e.transform,V);if(_)Qt(P,L.posMatrix,e,i,U,q,b,u);else if(i&&g&&M){var H=Math.pow(2,y.zoom-C.tileID.overscaledZ);Wr(P,x,b,p,t.symbolSize,y,U,L.posMatrix,H,g)}else i&&g&&P.allowVerticalPlacement&&Xr(P);var G=e.translatePosMatrix(L.posMatrix,C,o,s),Y=_||i&&M?Gr:U,W=e.translatePosMatrix(q,C,o,s,!0),X=I&&0!==n.paint.get(i?"text-halo-width":"icon-halo-width").constantOr(1),Z={program:d,buffers:O,uniformValues:I?Br(D.kind,g,w,b,e,G,Y,W,i,R,!0):Fr(D.kind,g,w,b,e,G,Y,W,i,R),atlasTexture:F,atlasInterpolation:B,isSDF:I,hasHalo:X};if(k)for(var J=0,K=O.segments.get();J<K.length;J+=1){var Q=K[J];A.push({segments:new t.SegmentVector([Q]),sortKey:Q.sortKey,state:Z})}else A.push({segments:O.segments,sortKey:0,state:Z})}}}k&&A.sort(function(t,e){return t.sortKey-e.sortKey});for(var $=0,tt=A;$<tt.length;$+=1){var et=tt[$],rt=et.state;if(rt.atlasTexture.bind(rt.atlasInterpolation,m.CLAMP_TO_EDGE),rt.isSDF){var nt=rt.uniformValues;rt.hasHalo&&(nt.u_is_halo=1,Jr(rt.buffers,et.segments,n,e,rt.program,T,h,f,nt)),nt.u_is_halo=0}Jr(rt.buffers,et.segments,n,e,rt.program,T,h,f,rt.uniformValues)}}function Jr(t,e,r,n,a,i,o,s,l){var c=n.context,u=c.gl;a.draw(c,u.TRIANGLES,i,o,s,Et.disabled,l,r.id,t.layoutVertexBuffer,t.indexBuffer,e,r.paint,n.transform.zoom,t.programConfigurations.get(r.id),t.dynamicLayoutVertexBuffer,t.opacityVertexBuffer)}function Kr(t,e,r,n,a,i,o){var s,l,c,u,h,f=t.context.gl,p=r.paint.get("fill-pattern"),d=p&&p.constantOr(1),g=r.getCrossfadeParameters();o?(l=d&&!r.getPaintProperty("fill-outline-color")?"fillOutlinePattern":"fillOutline",s=f.LINES):(l=d?"fillPattern":"fill",s=f.TRIANGLES);for(var v=0,m=n;v<m.length;v+=1){var y=m[v],x=e.getTile(y);if(!d||x.patternsLoaded()){var b=x.getBucket(r);if(b){var _=b.programConfigurations.get(r.id),w=t.useProgram(l,_);d&&(t.context.activeTexture.set(f.TEXTURE0),x.imageAtlasTexture.bind(f.LINEAR,f.CLAMP_TO_EDGE),_.updatePatternPaintBuffers(g));var k=p.constantOr(null);if(k&&x.imageAtlas){var T=x.imageAtlas.patternPositions[k.to],M=x.imageAtlas.patternPositions[k.from];T&&M&&_.setConstantPatternPositions(T,M)}var A=t.translatePosMatrix(y.posMatrix,x,r.paint.get("fill-translate"),r.paint.get("fill-translate-anchor"));if(o){u=b.indexBuffer2,h=b.segments2;var S=[f.drawingBufferWidth,f.drawingBufferHeight];c="fillOutlinePattern"===l&&d?xr(A,t,g,x,S):yr(A,S)}else u=b.indexBuffer,h=b.segments,c=d?mr(A,t,g,x):vr(A);w.draw(t.context,s,a,t.stencilModeForClipping(y),i,Et.disabled,c,r.id,b.layoutVertexBuffer,u,h,r.paint,t.transform.zoom,_)}}}}function Qr(t,e,r,n,a,i,o){for(var s=t.context,l=s.gl,c=r.paint.get("fill-extrusion-pattern"),u=c.constantOr(1),h=r.getCrossfadeParameters(),f=r.paint.get("fill-extrusion-opacity"),p=0,d=n;p<d.length;p+=1){var g=d[p],v=e.getTile(g),m=v.getBucket(r);if(m){var y=m.programConfigurations.get(r.id),x=t.useProgram(u?"fillExtrusionPattern":"fillExtrusion",y);u&&(t.context.activeTexture.set(l.TEXTURE0),v.imageAtlasTexture.bind(l.LINEAR,l.CLAMP_TO_EDGE),y.updatePatternPaintBuffers(h));var b=c.constantOr(null);if(b&&v.imageAtlas){var _=v.imageAtlas.patternPositions[b.to],w=v.imageAtlas.patternPositions[b.from];_&&w&&y.setConstantPatternPositions(_,w)}var k=t.translatePosMatrix(g.posMatrix,v,r.paint.get("fill-extrusion-translate"),r.paint.get("fill-extrusion-translate-anchor")),T=r.paint.get("fill-extrusion-vertical-gradient"),M=u?gr(k,t,T,f,g,h,v):dr(k,t,T,f);x.draw(s,s.gl.TRIANGLES,a,i,o,Et.backCCW,M,r.id,m.layoutVertexBuffer,m.indexBuffer,m.segments,r.paint,t.transform.zoom,y)}}}function $r(t,e,r,n,a,i){var o=t.context,s=o.gl,l=e.fbo;if(l){var c=t.useProgram("hillshade");o.activeTexture.set(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,l.colorAttachment.get());var u=Ar(t,e,r);e.maskedBoundsBuffer&&e.maskedIndexBuffer&&e.segments?c.draw(o,s.TRIANGLES,n,a,i,Et.disabled,u,r.id,e.maskedBoundsBuffer,e.maskedIndexBuffer,e.segments):c.draw(o,s.TRIANGLES,n,a,i,Et.disabled,u,r.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}}function tn(e,r,n,a,i,o,s){var l=e.context,c=l.gl;if(r.dem&&r.dem.data){var u=r.dem.dim,h=r.dem.stride,f=r.dem.getPixels();if(l.activeTexture.set(c.TEXTURE1),l.pixelStoreUnpackPremultiplyAlpha.set(!1),r.demTexture=r.demTexture||e.getTileTexture(h),r.demTexture){var p=r.demTexture;p.update(f,{premultiply:!1}),p.bind(c.NEAREST,c.CLAMP_TO_EDGE)}else r.demTexture=new t.Texture(l,f,c.RGBA,{premultiply:!1}),r.demTexture.bind(c.NEAREST,c.CLAMP_TO_EDGE);l.activeTexture.set(c.TEXTURE0);var d=r.fbo;if(!d){var g=new t.Texture(l,{width:u,height:u,data:null},c.RGBA);g.bind(c.LINEAR,c.CLAMP_TO_EDGE),(d=r.fbo=l.createFramebuffer(u,u)).colorAttachment.set(g.texture)}l.bindFramebuffer.set(d.framebuffer),l.viewport.set([0,0,u,u]),e.useProgram("hillshadePrepare").draw(l,c.TRIANGLES,i,o,s,Et.disabled,Sr(r,a),n.id,e.rasterBoundsBuffer,e.quadTriangleIndexBuffer,e.rasterBoundsSegments),r.needsHillshadePrepare=!1}}function en(e,r,n,a,i){var o=a.paint.get("raster-fade-duration");if(o>0){var s=t.browser.now(),l=(s-e.timeAdded)/o,c=r?(s-r.timeAdded)/o:-1,u=n.getSource(),h=i.coveringZoomLevel({tileSize:u.tileSize,roundZoom:u.roundZoom}),f=!r||Math.abs(r.tileID.overscaledZ-h)>Math.abs(e.tileID.overscaledZ-h),p=f&&e.refreshedUponExpiration?1:t.clamp(f?l:1-c,0,1);return e.refreshedUponExpiration&&l>=1&&(e.refreshedUponExpiration=!1),r?{opacity:1,mix:1-p}:{opacity:p,mix:0}}return{opacity:1,mix:0}}function rn(e,r,n){var a=e.context,i=a.gl,o=n.posMatrix,s=e.useProgram("debug"),l=Mt.disabled,c=At.disabled,u=e.colorModeForRenderPass(),h="$debug";s.draw(a,i.LINE_STRIP,l,c,u,Et.disabled,kr(o,t.Color.red),h,e.debugBuffer,e.tileBorderIndexBuffer,e.debugSegments);for(var f=r.getTileByID(n.key).latestRawTileData,p=f&&f.byteLength||0,d=Math.floor(p/1024),g=r.getTile(n).tileSize,v=512/Math.min(g,512),m=function(t,e,r,n){n=n||1;var a,i,o,s,l,c,u,h,f=[];for(a=0,i=t.length;a<i;a++)if(l=nn[t[a]]){for(h=null,o=0,s=l[1].length;o<s;o+=2)-1===l[1][o]&&-1===l[1][o+1]?h=null:(c=e+l[1][o]*n,u=r-l[1][o+1]*n,h&&f.push(h.x,h.y,c,u),h={x:c,y:u});e+=l[0]*n}return f}(n.toString()+" "+d+"kb",50,200*v,5*v),y=new t.StructArrayLayout2i4,x=new t.StructArrayLayout2ui4,b=0;b<m.length;b+=2)y.emplaceBack(m[b],m[b+1]),x.emplaceBack(b,b+1);for(var _=a.createVertexBuffer(y,Fe.members),w=a.createIndexBuffer(x),k=t.SegmentVector.simpleSegment(0,0,y.length/2,y.length/2),T=t.EXTENT/(Math.pow(2,e.transform.zoom-n.overscaledZ)*g*v),M=[],A=-1;A<=1;A++)for(var S=-1;S<=1&&(0!==A||0!==S);S++)M.push([A,S]);for(var E=0;E<M.length;E++){var L=M[E];s.draw(a,i.LINES,l,c,u,Et.disabled,kr(t.translate([],o,[T*L[0],T*L[1],0]),t.Color.white),h,_,w,k)}s.draw(a,i.LINES,l,c,u,Et.disabled,kr(o,t.Color.black),h,_,w,k)}var nn={" ":[16,[]],"!":[10,[5,21,5,7,-1,-1,5,2,4,1,5,0,6,1,5,2]],'"':[16,[4,21,4,14,-1,-1,12,21,12,14]],"#":[21,[11,25,4,-7,-1,-1,17,25,10,-7,-1,-1,4,12,18,12,-1,-1,3,6,17,6]],$:[20,[8,25,8,-4,-1,-1,12,25,12,-4,-1,-1,17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3]],"%":[24,[21,21,3,0,-1,-1,8,21,10,19,10,17,9,15,7,14,5,14,3,16,3,18,4,20,6,21,8,21,10,20,13,19,16,19,19,20,21,21,-1,-1,17,7,15,6,14,4,14,2,16,0,18,0,20,1,21,3,21,5,19,7,17,7]],"&":[26,[23,12,23,13,22,14,21,14,20,13,19,11,17,6,15,3,13,1,11,0,7,0,5,1,4,2,3,4,3,6,4,8,5,9,12,13,13,14,14,16,14,18,13,20,11,21,9,20,8,18,8,16,9,13,11,10,16,3,18,1,20,0,22,0,23,1,23,2]],"'":[10,[5,19,4,20,5,21,6,20,6,18,5,16,4,15]],"(":[14,[11,25,9,23,7,20,5,16,4,11,4,7,5,2,7,-2,9,-5,11,-7]],")":[14,[3,25,5,23,7,20,9,16,10,11,10,7,9,2,7,-2,5,-5,3,-7]],"*":[16,[8,21,8,9,-1,-1,3,18,13,12,-1,-1,13,18,3,12]],"+":[26,[13,18,13,0,-1,-1,4,9,22,9]],",":[10,[6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4]],"-":[26,[4,9,22,9]],".":[10,[5,2,4,1,5,0,6,1,5,2]],"/":[22,[20,25,2,-7]],0:[20,[9,21,6,20,4,17,3,12,3,9,4,4,6,1,9,0,11,0,14,1,16,4,17,9,17,12,16,17,14,20,11,21,9,21]],1:[20,[6,17,8,18,11,21,11,0]],2:[20,[4,16,4,17,5,19,6,20,8,21,12,21,14,20,15,19,16,17,16,15,15,13,13,10,3,0,17,0]],3:[20,[5,21,16,21,10,13,13,13,15,12,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4]],4:[20,[13,21,3,7,18,7,-1,-1,13,21,13,0]],5:[20,[15,21,5,21,4,12,5,13,8,14,11,14,14,13,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4]],6:[20,[16,18,15,20,12,21,10,21,7,20,5,17,4,12,4,7,5,3,7,1,10,0,11,0,14,1,16,3,17,6,17,7,16,10,14,12,11,13,10,13,7,12,5,10,4,7]],7:[20,[17,21,7,0,-1,-1,3,21,17,21]],8:[20,[8,21,5,20,4,18,4,16,5,14,7,13,11,12,14,11,16,9,17,7,17,4,16,2,15,1,12,0,8,0,5,1,4,2,3,4,3,7,4,9,6,11,9,12,13,13,15,14,16,16,16,18,15,20,12,21,8,21]],9:[20,[16,14,15,11,13,9,10,8,9,8,6,9,4,11,3,14,3,15,4,18,6,20,9,21,10,21,13,20,15,18,16,14,16,9,15,4,13,1,10,0,8,0,5,1,4,3]],":":[10,[5,14,4,13,5,12,6,13,5,14,-1,-1,5,2,4,1,5,0,6,1,5,2]],";":[10,[5,14,4,13,5,12,6,13,5,14,-1,-1,6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4]],"<":[24,[20,18,4,9,20,0]],"=":[26,[4,12,22,12,-1,-1,4,6,22,6]],">":[24,[4,18,20,9,4,0]],"?":[18,[3,16,3,17,4,19,5,20,7,21,11,21,13,20,14,19,15,17,15,15,14,13,13,12,9,10,9,7,-1,-1,9,2,8,1,9,0,10,1,9,2]],"@":[27,[18,13,17,15,15,16,12,16,10,15,9,14,8,11,8,8,9,6,11,5,14,5,16,6,17,8,-1,-1,12,16,10,14,9,11,9,8,10,6,11,5,-1,-1,18,16,17,8,17,6,19,5,21,5,23,7,24,10,24,12,23,15,22,17,20,19,18,20,15,21,12,21,9,20,7,19,5,17,4,15,3,12,3,9,4,6,5,4,7,2,9,1,12,0,15,0,18,1,20,2,21,3,-1,-1,19,16,18,8,18,6,19,5]],A:[18,[9,21,1,0,-1,-1,9,21,17,0,-1,-1,4,7,14,7]],B:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,-1,-1,4,11,13,11,16,10,17,9,18,7,18,4,17,2,16,1,13,0,4,0]],C:[21,[18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5]],D:[21,[4,21,4,0,-1,-1,4,21,11,21,14,20,16,18,17,16,18,13,18,8,17,5,16,3,14,1,11,0,4,0]],E:[19,[4,21,4,0,-1,-1,4,21,17,21,-1,-1,4,11,12,11,-1,-1,4,0,17,0]],F:[18,[4,21,4,0,-1,-1,4,21,17,21,-1,-1,4,11,12,11]],G:[21,[18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,18,8,-1,-1,13,8,18,8]],H:[22,[4,21,4,0,-1,-1,18,21,18,0,-1,-1,4,11,18,11]],I:[8,[4,21,4,0]],J:[16,[12,21,12,5,11,2,10,1,8,0,6,0,4,1,3,2,2,5,2,7]],K:[21,[4,21,4,0,-1,-1,18,21,4,7,-1,-1,9,12,18,0]],L:[17,[4,21,4,0,-1,-1,4,0,16,0]],M:[24,[4,21,4,0,-1,-1,4,21,12,0,-1,-1,20,21,12,0,-1,-1,20,21,20,0]],N:[22,[4,21,4,0,-1,-1,4,21,18,0,-1,-1,18,21,18,0]],O:[22,[9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21]],P:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,14,17,12,16,11,13,10,4,10]],Q:[22,[9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21,-1,-1,12,4,18,-2]],R:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,4,11,-1,-1,11,11,18,0]],S:[20,[17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3]],T:[16,[8,21,8,0,-1,-1,1,21,15,21]],U:[22,[4,21,4,6,5,3,7,1,10,0,12,0,15,1,17,3,18,6,18,21]],V:[18,[1,21,9,0,-1,-1,17,21,9,0]],W:[24,[2,21,7,0,-1,-1,12,21,7,0,-1,-1,12,21,17,0,-1,-1,22,21,17,0]],X:[20,[3,21,17,0,-1,-1,17,21,3,0]],Y:[18,[1,21,9,11,9,0,-1,-1,17,21,9,11]],Z:[20,[17,21,3,0,-1,-1,3,21,17,21,-1,-1,3,0,17,0]],"[":[14,[4,25,4,-7,-1,-1,5,25,5,-7,-1,-1,4,25,11,25,-1,-1,4,-7,11,-7]],"\\":[14,[0,21,14,-3]],"]":[14,[9,25,9,-7,-1,-1,10,25,10,-7,-1,-1,3,25,10,25,-1,-1,3,-7,10,-7]],"^":[16,[6,15,8,18,10,15,-1,-1,3,12,8,17,13,12,-1,-1,8,17,8,0]],_:[16,[0,-2,16,-2]],"`":[10,[6,21,5,20,4,18,4,16,5,15,6,16,5,17]],a:[19,[15,14,15,0,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],b:[19,[4,21,4,0,-1,-1,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3]],c:[18,[15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],d:[19,[15,21,15,0,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],e:[18,[3,8,15,8,15,10,14,12,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],f:[12,[10,21,8,21,6,20,5,17,5,0,-1,-1,2,14,9,14]],g:[19,[15,14,15,-2,14,-5,13,-6,11,-7,8,-7,6,-6,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],h:[19,[4,21,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0]],i:[8,[3,21,4,20,5,21,4,22,3,21,-1,-1,4,14,4,0]],j:[10,[5,21,6,20,7,21,6,22,5,21,-1,-1,6,14,6,-3,5,-6,3,-7,1,-7]],k:[17,[4,21,4,0,-1,-1,14,14,4,4,-1,-1,8,8,15,0]],l:[8,[4,21,4,0]],m:[30,[4,14,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0,-1,-1,15,10,18,13,20,14,23,14,25,13,26,10,26,0]],n:[19,[4,14,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0]],o:[19,[8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3,16,6,16,8,15,11,13,13,11,14,8,14]],p:[19,[4,14,4,-7,-1,-1,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3]],q:[19,[15,14,15,-7,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],r:[13,[4,14,4,0,-1,-1,4,8,5,11,7,13,9,14,12,14]],s:[17,[14,11,13,13,10,14,7,14,4,13,3,11,4,9,6,8,11,7,13,6,14,4,14,3,13,1,10,0,7,0,4,1,3,3]],t:[12,[5,21,5,4,6,1,8,0,10,0,-1,-1,2,14,9,14]],u:[19,[4,14,4,4,5,1,7,0,10,0,12,1,15,4,-1,-1,15,14,15,0]],v:[16,[2,14,8,0,-1,-1,14,14,8,0]],w:[22,[3,14,7,0,-1,-1,11,14,7,0,-1,-1,11,14,15,0,-1,-1,19,14,15,0]],x:[17,[3,14,14,0,-1,-1,14,14,3,0]],y:[16,[2,14,8,0,-1,-1,14,14,8,0,6,-4,4,-6,2,-7,1,-7]],z:[17,[14,14,3,0,-1,-1,3,14,14,14,-1,-1,3,0,14,0]],"{":[14,[9,25,7,24,6,23,5,21,5,19,6,17,7,16,8,14,8,12,6,10,-1,-1,7,24,6,22,6,20,7,18,8,17,9,15,9,13,8,11,4,9,8,7,9,5,9,3,8,1,7,0,6,-2,6,-4,7,-6,-1,-1,6,8,8,6,8,4,7,2,6,1,5,-1,5,-3,6,-5,7,-6,9,-7]],"|":[8,[4,25,4,-7]],"}":[14,[5,25,7,24,8,23,9,21,9,19,8,17,7,16,6,14,6,12,8,10,-1,-1,7,24,8,22,8,20,7,18,6,17,5,15,5,13,6,11,10,9,6,7,5,5,5,3,6,1,7,0,8,-2,8,-4,7,-6,-1,-1,8,8,6,6,6,4,7,2,8,1,9,-1,9,-3,8,-5,7,-6,5,-7]],"~":[24,[3,6,3,8,4,11,6,12,8,12,10,11,14,8,16,7,18,7,20,8,21,10,-1,-1,3,8,4,10,6,11,8,11,10,10,14,7,16,6,18,6,20,7,21,10,21,12]]},an={symbol:function(t,e,r,n,a){if("translucent"===t.renderPass){var i=At.disabled,o=t.colorModeForRenderPass();0!==r.paint.get("icon-opacity").constantOr(1)&&Zr(t,e,r,n,!1,r.paint.get("icon-translate"),r.paint.get("icon-translate-anchor"),r.layout.get("icon-rotation-alignment"),r.layout.get("icon-pitch-alignment"),r.layout.get("icon-keep-upright"),i,o,a),0!==r.paint.get("text-opacity").constantOr(1)&&Zr(t,e,r,n,!0,r.paint.get("text-translate"),r.paint.get("text-translate-anchor"),r.layout.get("text-rotation-alignment"),r.layout.get("text-pitch-alignment"),r.layout.get("text-keep-upright"),i,o,a),e.map.showCollisionBoxes&&function(t,e,r,n){Hr(t,e,r,n,!1),Hr(t,e,r,n,!0)}(t,e,r,n)}},circle:function(e,r,n,a){if("translucent"===e.renderPass){var i=n.paint.get("circle-opacity"),o=n.paint.get("circle-stroke-width"),s=n.paint.get("circle-stroke-opacity"),l=void 0!==n.layout.get("circle-sort-key").constantOr(1);if(0!==i.constantOr(1)||0!==o.constantOr(1)&&0!==s.constantOr(1)){for(var c=e.context,u=c.gl,h=e.depthModeForSublayer(0,Mt.ReadOnly),f=At.disabled,p=e.colorModeForRenderPass(),d=[],g=0;g<a.length;g++){var v=a[g],m=r.getTile(v),y=m.getBucket(n);if(y){var x=y.programConfigurations.get(n.id),b={programConfiguration:x,program:e.useProgram("circle",x),layoutVertexBuffer:y.layoutVertexBuffer,indexBuffer:y.indexBuffer,uniformValues:br(e,v,m,n)};if(l)for(var _=0,w=y.segments.get();_<w.length;_+=1){var k=w[_];d.push({segments:new t.SegmentVector([k]),sortKey:k.sortKey,state:b})}else d.push({segments:y.segments,sortKey:0,state:b})}}l&&d.sort(function(t,e){return t.sortKey-e.sortKey});for(var T=0,M=d;T<M.length;T+=1){var A=M[T],S=A.state,E=S.programConfiguration,L=S.program,C=S.layoutVertexBuffer,P=S.indexBuffer,O=S.uniformValues,z=A.segments;L.draw(c,u.TRIANGLES,h,f,p,Et.disabled,O,n.id,C,P,z,n.paint,e.transform.zoom,E)}}}},heatmap:function(e,r,n,a){if(0!==n.paint.get("heatmap-opacity"))if("offscreen"===e.renderPass){var i=e.context,o=i.gl,s=e.depthModeForSublayer(0,Mt.ReadOnly),l=At.disabled,c=new St([o.ONE,o.ONE],t.Color.transparent,[!0,!0,!0,!0]);!function(t,e,r){var n=t.gl;t.activeTexture.set(n.TEXTURE1),t.viewport.set([0,0,e.width/4,e.height/4]);var a=r.heatmapFbo;if(a)n.bindTexture(n.TEXTURE_2D,a.colorAttachment.get()),t.bindFramebuffer.set(a.framebuffer);else{var i=n.createTexture();n.bindTexture(n.TEXTURE_2D,i),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.LINEAR),a=r.heatmapFbo=t.createFramebuffer(e.width/4,e.height/4),function t(e,r,n,a){var i=e.gl;i.texImage2D(i.TEXTURE_2D,0,i.RGBA,r.width/4,r.height/4,0,i.RGBA,e.extTextureHalfFloat?e.extTextureHalfFloat.HALF_FLOAT_OES:i.UNSIGNED_BYTE,null),a.colorAttachment.set(n),e.extTextureHalfFloat&&i.checkFramebufferStatus(i.FRAMEBUFFER)!==i.FRAMEBUFFER_COMPLETE&&(e.extTextureHalfFloat=null,a.colorAttachment.setDirty(),t(e,r,n,a))}(t,e,i,a)}}(i,e,n),i.clear({color:t.Color.transparent});for(var u=0;u<a.length;u++){var h=a[u];if(!r.hasRenderableParent(h)){var f=r.getTile(h),p=f.getBucket(n);if(p){var d=p.programConfigurations.get(n.id),g=e.useProgram("heatmap",d),v=e.transform.zoom;g.draw(i,o.TRIANGLES,s,l,c,Et.disabled,Mr(h.posMatrix,f,v,n.paint.get("heatmap-intensity")),n.id,p.layoutVertexBuffer,p.indexBuffer,p.segments,n.paint,e.transform.zoom,d)}}}i.viewport.set([0,0,e.width,e.height])}else"translucent"===e.renderPass&&(e.context.setColorMode(e.colorModeForRenderPass()),function(e,r){var n=e.context,a=n.gl,i=r.heatmapFbo;if(i){n.activeTexture.set(a.TEXTURE0),a.bindTexture(a.TEXTURE_2D,i.colorAttachment.get()),n.activeTexture.set(a.TEXTURE1);var o=r.colorRampTexture;o||(o=r.colorRampTexture=new t.Texture(n,r.colorRamp,a.RGBA)),o.bind(a.LINEAR,a.CLAMP_TO_EDGE),e.useProgram("heatmapTexture").draw(n,a.TRIANGLES,Mt.disabled,At.disabled,e.colorModeForRenderPass(),Et.disabled,function(e,r,n,a){var i=t.create();t.ortho(i,0,e.width,e.height,0,0,1);var o=e.context.gl;return{u_matrix:i,u_world:[o.drawingBufferWidth,o.drawingBufferHeight],u_image:n,u_color_ramp:a,u_opacity:r.paint.get("heatmap-opacity")}}(e,r,0,1),r.id,e.viewportBuffer,e.quadTriangleIndexBuffer,e.viewportSegments,r.paint,e.transform.zoom)}}(e,n))},line:function(e,r,n,a){if("translucent"===e.renderPass){var i=n.paint.get("line-opacity"),o=n.paint.get("line-width");if(0!==i.constantOr(1)&&0!==o.constantOr(1)){var s=e.depthModeForSublayer(0,Mt.ReadOnly),l=e.colorModeForRenderPass(),c=n.paint.get("line-dasharray"),u=n.paint.get("line-pattern"),h=u.constantOr(1),f=n.paint.get("line-gradient"),p=n.getCrossfadeParameters(),d=c?"lineSDF":h?"linePattern":f?"lineGradient":"line",g=e.context,v=g.gl,m=!0;if(f){g.activeTexture.set(v.TEXTURE0);var y=n.gradientTexture;if(!n.gradient)return;y||(y=n.gradientTexture=new t.Texture(g,n.gradient,v.RGBA)),y.bind(v.LINEAR,v.CLAMP_TO_EDGE)}for(var x=0,b=a;x<b.length;x+=1){var _=b[x],w=r.getTile(_);if(!h||w.patternsLoaded()){var k=w.getBucket(n);if(k){var T=k.programConfigurations.get(n.id),M=e.context.program.get(),A=e.useProgram(d,T),S=m||A.program!==M,E=u.constantOr(null);if(E&&w.imageAtlas){var L=w.imageAtlas.patternPositions[E.to],C=w.imageAtlas.patternPositions[E.from];L&&C&&T.setConstantPatternPositions(L,C)}var P=c?Or(e,w,n,c,p):h?Pr(e,w,n,p):f?Cr(e,w,n):Lr(e,w,n);c&&(S||e.lineAtlas.dirty)?(g.activeTexture.set(v.TEXTURE0),e.lineAtlas.bind(g)):h&&(g.activeTexture.set(v.TEXTURE0),w.imageAtlasTexture.bind(v.LINEAR,v.CLAMP_TO_EDGE),T.updatePatternPaintBuffers(p)),A.draw(g,v.TRIANGLES,s,e.stencilModeForClipping(_),l,Et.disabled,P,n.id,k.layoutVertexBuffer,k.indexBuffer,k.segments,n.paint,e.transform.zoom,T),m=!1}}}}}},fill:function(e,r,n,a){var i=n.paint.get("fill-color"),o=n.paint.get("fill-opacity");if(0!==o.constantOr(1)){var s=e.colorModeForRenderPass(),l=n.paint.get("fill-pattern"),c=e.opaquePassEnabledForLayer()&&!l.constantOr(1)&&1===i.constantOr(t.Color.transparent).a&&1===o.constantOr(0)?"opaque":"translucent";if(e.renderPass===c){var u=e.depthModeForSublayer(1,"opaque"===e.renderPass?Mt.ReadWrite:Mt.ReadOnly);Kr(e,r,n,a,u,s,!1)}if("translucent"===e.renderPass&&n.paint.get("fill-antialias")){var h=e.depthModeForSublayer(n.getPaintProperty("fill-outline-color")?2:0,Mt.ReadOnly);Kr(e,r,n,a,h,s,!0)}}},"fill-extrusion":function(t,e,r,n){var a=r.paint.get("fill-extrusion-opacity");if(0!==a&&"translucent"===t.renderPass){var i=new Mt(t.context.gl.LEQUAL,Mt.ReadWrite,t.depthRangeFor3D);if(1!==a||r.paint.get("fill-extrusion-pattern").constantOr(1))Qr(t,e,r,n,i,At.disabled,St.disabled),Qr(t,e,r,n,i,t.stencilModeFor3D(),t.colorModeForRenderPass());else{var o=t.colorModeForRenderPass();Qr(t,e,r,n,i,At.disabled,o)}}},hillshade:function(t,e,r,n){if("offscreen"===t.renderPass||"translucent"===t.renderPass){for(var a=t.context,i=e.getSource().maxzoom,o=t.depthModeForSublayer(0,Mt.ReadOnly),s=At.disabled,l=t.colorModeForRenderPass(),c=0,u=n;c<u.length;c+=1){var h=u[c],f=e.getTile(h);f.needsHillshadePrepare&&"offscreen"===t.renderPass?tn(t,f,r,i,o,s,l):"translucent"===t.renderPass&&$r(t,f,r,o,s,l)}a.viewport.set([0,0,t.width,t.height])}},raster:function(t,e,r,n){if("translucent"===t.renderPass&&0!==r.paint.get("raster-opacity"))for(var a=t.context,i=a.gl,o=e.getSource(),s=t.useProgram("raster"),l=At.disabled,c=t.colorModeForRenderPass(),u=n.length&&n[0].overscaledZ,h=!t.options.moving,f=0,p=n;f<p.length;f+=1){var d=p[f],g=t.depthModeForSublayer(d.overscaledZ-u,1===r.paint.get("raster-opacity")?Mt.ReadWrite:Mt.ReadOnly,i.LESS),v=e.getTile(d),m=t.transform.calculatePosMatrix(d.toUnwrapped(),h);v.registerFadeDuration(r.paint.get("raster-fade-duration"));var y=e.findLoadedParent(d,0),x=en(v,y,e,r,t.transform),b=void 0,_=void 0,w="nearest"===r.paint.get("raster-resampling")?i.NEAREST:i.LINEAR;a.activeTexture.set(i.TEXTURE0),v.texture.bind(w,i.CLAMP_TO_EDGE,i.LINEAR_MIPMAP_NEAREST),a.activeTexture.set(i.TEXTURE1),y?(y.texture.bind(w,i.CLAMP_TO_EDGE,i.LINEAR_MIPMAP_NEAREST),b=Math.pow(2,y.tileID.overscaledZ-v.tileID.overscaledZ),_=[v.tileID.canonical.x*b%1,v.tileID.canonical.y*b%1]):v.texture.bind(w,i.CLAMP_TO_EDGE,i.LINEAR_MIPMAP_NEAREST);var k=Dr(m,_||[0,0],b||1,x,r);o instanceof P?s.draw(a,i.TRIANGLES,g,l,c,Et.disabled,k,r.id,o.boundsBuffer,t.quadTriangleIndexBuffer,o.boundsSegments):v.maskedBoundsBuffer&&v.maskedIndexBuffer&&v.segments?s.draw(a,i.TRIANGLES,g,l,c,Et.disabled,k,r.id,v.maskedBoundsBuffer,v.maskedIndexBuffer,v.segments,r.paint,t.transform.zoom):s.draw(a,i.TRIANGLES,g,l,c,Et.disabled,k,r.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}},background:function(t,e,r){var n=r.paint.get("background-color"),a=r.paint.get("background-opacity");if(0!==a){var i=t.context,o=i.gl,s=t.transform,l=s.tileSize,c=r.paint.get("background-pattern");if(!t.isPatternMissing(c)){var u=!c&&1===n.a&&1===a&&t.opaquePassEnabledForLayer()?"opaque":"translucent";if(t.renderPass===u){var h=At.disabled,f=t.depthModeForSublayer(0,"opaque"===u?Mt.ReadWrite:Mt.ReadOnly),p=t.colorModeForRenderPass(),d=t.useProgram(c?"backgroundPattern":"background"),g=s.coveringTiles({tileSize:l});c&&(i.activeTexture.set(o.TEXTURE0),t.imageManager.bind(t.context));for(var v=r.getCrossfadeParameters(),m=0,y=g;m<y.length;m+=1){var x=y[m],b=t.transform.calculatePosMatrix(x.toUnwrapped()),_=c?jr(b,a,t,c,{tileID:x,tileSize:l},v):Nr(b,a,n);d.draw(i,o.TRIANGLES,f,h,p,Et.disabled,_,r.id,t.tileExtentBuffer,t.quadTriangleIndexBuffer,t.tileExtentSegments)}}}}},debug:function(t,e,r){for(var n=0;n<r.length;n++)rn(t,e,r[n])},custom:function(t,e,r){var n=t.context,a=r.implementation;if("offscreen"===t.renderPass){var i=a.prerender;i&&(t.setCustomLayerDefaults(),n.setColorMode(t.colorModeForRenderPass()),i.call(a,n.gl,t.transform.customLayerMatrix()),n.setDirty(),t.setBaseState())}else if("translucent"===t.renderPass){t.setCustomLayerDefaults(),n.setColorMode(t.colorModeForRenderPass()),n.setStencilMode(At.disabled);var o="3d"===a.renderingMode?new Mt(t.context.gl.LEQUAL,Mt.ReadWrite,t.depthRangeFor3D):t.depthModeForSublayer(0,Mt.ReadOnly);n.setDepthMode(o),a.render(n.gl,t.transform.customLayerMatrix()),n.setDirty(),t.setBaseState(),n.bindFramebuffer.set(null)}}},on=function(e,r){this.context=new Lt(e),this.transform=r,this._tileTextures={},this.setup(),this.numSublayers=Ct.maxUnderzooming+Ct.maxOverzooming+1,this.depthEpsilon=1/Math.pow(2,16),this.depthRboNeedsClear=!0,this.emptyProgramConfiguration=new t.ProgramConfiguration,this.crossTileSymbolIndex=new Oe};function sn(t,e){if(t.y>e.y){var r=t;t=e,e=r}return{x0:t.x,y0:t.y,x1:e.x,y1:e.y,dx:e.x-t.x,dy:e.y-t.y}}function ln(t,e,r,n,a){var i=Math.max(r,Math.floor(e.y0)),o=Math.min(n,Math.ceil(e.y1));if(t.x0===e.x0&&t.y0===e.y0?t.x0+e.dy/t.dy*t.dx<e.x1:t.x1-e.dy/t.dy*t.dx<e.x0){var s=t;t=e,e=s}for(var l=t.dx/t.dy,c=e.dx/e.dy,u=t.dx>0,h=e.dx<0,f=i;f<o;f++){var p=l*Math.max(0,Math.min(t.dy,f+u-t.y0))+t.x0,d=c*Math.max(0,Math.min(e.dy,f+h-e.y0))+e.x0;a(Math.floor(d),Math.ceil(p),f)}}function cn(t,e,r,n,a,i){var o,s=sn(t,e),l=sn(e,r),c=sn(r,t);s.dy>l.dy&&(o=s,s=l,l=o),s.dy>c.dy&&(o=s,s=c,c=o),l.dy>c.dy&&(o=l,l=c,c=o),s.dy&&ln(c,s,n,a,i),l.dy&&ln(c,l,n,a,i)}on.prototype.resize=function(e,r){var n=this.context.gl;if(this.width=e*t.browser.devicePixelRatio,this.height=r*t.browser.devicePixelRatio,this.context.viewport.set([0,0,this.width,this.height]),this.style)for(var a=0,i=this.style._order;a<i.length;a+=1){var o=i[a];this.style._layers[o].resize()}this.depthRbo&&(n.deleteRenderbuffer(this.depthRbo),this.depthRbo=null)},on.prototype.setup=function(){var e=this.context,r=new t.StructArrayLayout2i4;r.emplaceBack(0,0),r.emplaceBack(t.EXTENT,0),r.emplaceBack(0,t.EXTENT),r.emplaceBack(t.EXTENT,t.EXTENT),this.tileExtentBuffer=e.createVertexBuffer(r,Fe.members),this.tileExtentSegments=t.SegmentVector.simpleSegment(0,0,4,2);var n=new t.StructArrayLayout2i4;n.emplaceBack(0,0),n.emplaceBack(t.EXTENT,0),n.emplaceBack(0,t.EXTENT),n.emplaceBack(t.EXTENT,t.EXTENT),this.debugBuffer=e.createVertexBuffer(n,Fe.members),this.debugSegments=t.SegmentVector.simpleSegment(0,0,4,5);var a=new t.StructArrayLayout4i8;a.emplaceBack(0,0,0,0),a.emplaceBack(t.EXTENT,0,t.EXTENT,0),a.emplaceBack(0,t.EXTENT,0,t.EXTENT),a.emplaceBack(t.EXTENT,t.EXTENT,t.EXTENT,t.EXTENT),this.rasterBoundsBuffer=e.createVertexBuffer(a,t.rasterBoundsAttributes.members),this.rasterBoundsSegments=t.SegmentVector.simpleSegment(0,0,4,2);var i=new t.StructArrayLayout2i4;i.emplaceBack(0,0),i.emplaceBack(1,0),i.emplaceBack(0,1),i.emplaceBack(1,1),this.viewportBuffer=e.createVertexBuffer(i,Fe.members),this.viewportSegments=t.SegmentVector.simpleSegment(0,0,4,2);var o=new t.StructArrayLayout1ui2;o.emplaceBack(0),o.emplaceBack(1),o.emplaceBack(3),o.emplaceBack(2),o.emplaceBack(0),this.tileBorderIndexBuffer=e.createIndexBuffer(o);var s=new t.StructArrayLayout3ui6;s.emplaceBack(0,1,2),s.emplaceBack(2,1,3),this.quadTriangleIndexBuffer=e.createIndexBuffer(s);var l=this.context.gl;this.stencilClearMode=new At({func:l.ALWAYS,mask:0},0,255,l.ZERO,l.ZERO,l.ZERO)},on.prototype.clearStencil=function(){var e=this.context,r=e.gl;this.nextStencilID=1,this.currentStencilSource=void 0;var n=t.create();t.ortho(n,0,this.width,this.height,0,0,1),t.scale(n,n,[r.drawingBufferWidth,r.drawingBufferHeight,0]),this.useProgram("clippingMask").draw(e,r.TRIANGLES,Mt.disabled,this.stencilClearMode,St.disabled,Et.disabled,Tr(n),"$clipping",this.viewportBuffer,this.quadTriangleIndexBuffer,this.viewportSegments)},on.prototype._renderTileClippingMasks=function(t,e){if(this.currentStencilSource!==t.source&&t.isTileClipped()&&e&&e.length){this.currentStencilSource=t.source;var r=this.context,n=r.gl;this.nextStencilID+e.length>256&&this.clearStencil(),r.setColorMode(St.disabled),r.setDepthMode(Mt.disabled);var a=this.useProgram("clippingMask");this._tileClippingMaskIDs={};for(var i=0,o=e;i<o.length;i+=1){var s=o[i],l=this._tileClippingMaskIDs[s.key]=this.nextStencilID++;a.draw(r,n.TRIANGLES,Mt.disabled,new At({func:n.ALWAYS,mask:0},l,255,n.KEEP,n.KEEP,n.REPLACE),St.disabled,Et.disabled,Tr(s.posMatrix),"$clipping",this.tileExtentBuffer,this.quadTriangleIndexBuffer,this.tileExtentSegments)}}},on.prototype.stencilModeFor3D=function(){this.currentStencilSource=void 0,this.nextStencilID+1>256&&this.clearStencil();var t=this.nextStencilID++,e=this.context.gl;return new At({func:e.NOTEQUAL,mask:255},t,255,e.KEEP,e.KEEP,e.REPLACE)},on.prototype.stencilModeForClipping=function(t){var e=this.context.gl;return new At({func:e.EQUAL,mask:255},this._tileClippingMaskIDs[t.key],0,e.KEEP,e.KEEP,e.REPLACE)},on.prototype.colorModeForRenderPass=function(){var e=this.context.gl;return this._showOverdrawInspector?new St([e.CONSTANT_COLOR,e.ONE],new t.Color(1/8,1/8,1/8,0),[!0,!0,!0,!0]):"opaque"===this.renderPass?St.unblended:St.alphaBlended},on.prototype.depthModeForSublayer=function(t,e,r){if(!this.opaquePassEnabledForLayer())return Mt.disabled;var n=1-((1+this.currentLayer)*this.numSublayers+t)*this.depthEpsilon;return new Mt(r||this.context.gl.LEQUAL,e,[n,n])},on.prototype.opaquePassEnabledForLayer=function(){return this.currentLayer<this.opaquePassCutoff},on.prototype.render=function(e,r){this.style=e,this.options=r,this.lineAtlas=e.lineAtlas,this.imageManager=e.imageManager,this.glyphManager=e.glyphManager,this.symbolFadeChange=e.placement.symbolFadeChange(t.browser.now()),this.imageManager.beginFrame();var n=this.style._order,a=this.style.sourceCaches;for(var i in a){var o=a[i];o.used&&o.prepare(this.context)}var s={},l={},c={};for(var u in a){var h=a[u];s[u]=h.getVisibleCoordinates(),l[u]=s[u].slice().reverse(),c[u]=h.getVisibleCoordinates(!0).reverse()}for(var f in a){var p=a[f],d=p.getSource();if("raster"===d.type||"raster-dem"===d.type){for(var g=[],v=0,m=s[f];v<m.length;v+=1){var y=m[v];g.push(p.getTile(y))}Ur(g,this.context)}}this.opaquePassCutoff=1/0;for(var x=0;x<n.length;x++){var b=n[x];if(this.style._layers[b].is3D()){this.opaquePassCutoff=x;break}}this.renderPass="offscreen",this.depthRboNeedsClear=!0;for(var _=0,w=n;_<w.length;_+=1){var k=w[_],T=this.style._layers[k];if(T.hasOffscreenPass()&&!T.isHidden(this.transform.zoom)){var M=l[T.source];("custom"===T.type||M.length)&&this.renderLayer(this,a[T.source],T,M)}}for(this.context.bindFramebuffer.set(null),this.context.clear({color:r.showOverdrawInspector?t.Color.black:t.Color.transparent,depth:1}),this.clearStencil(),this._showOverdrawInspector=r.showOverdrawInspector,this.depthRangeFor3D=[0,1-(e._order.length+2)*this.numSublayers*this.depthEpsilon],this.renderPass="opaque",this.currentLayer=n.length-1;this.currentLayer>=0;this.currentLayer--){var A=this.style._layers[n[this.currentLayer]],S=a[A.source],E=s[A.source];this._renderTileClippingMasks(A,E),this.renderLayer(this,S,A,E)}for(this.renderPass="translucent",this.currentLayer=0;this.currentLayer<n.length;this.currentLayer++){var L=this.style._layers[n[this.currentLayer]],C=a[L.source],P=("symbol"===L.type?c:l)[L.source];this._renderTileClippingMasks(L,s[L.source]),this.renderLayer(this,C,L,P)}if(this.options.showTileBoundaries)for(var O in a){an.debug(this,a[O],s[O]);break}this.context.setDefault()},on.prototype.setupOffscreenDepthRenderbuffer=function(){var t=this.context;this.depthRbo||(this.depthRbo=t.createRenderbuffer(t.gl.DEPTH_COMPONENT16,this.width,this.height))},on.prototype.renderLayer=function(t,e,r,n){r.isHidden(this.transform.zoom)||("background"===r.type||"custom"===r.type||n.length)&&(this.id=r.id,an[r.type](t,e,r,n,this.style.placement.variableOffsets))},on.prototype.translatePosMatrix=function(e,r,n,a,i){if(!n[0]&&!n[1])return e;var o=i?"map"===a?this.transform.angle:0:"viewport"===a?-this.transform.angle:0;if(o){var s=Math.sin(o),l=Math.cos(o);n=[n[0]*l-n[1]*s,n[0]*s+n[1]*l]}var c=[i?n[0]:ce(r,n[0],this.transform.zoom),i?n[1]:ce(r,n[1],this.transform.zoom),0],u=new Float32Array(16);return t.translate(u,e,c),u},on.prototype.saveTileTexture=function(t){var e=this._tileTextures[t.size[0]];e?e.push(t):this._tileTextures[t.size[0]]=[t]},on.prototype.getTileTexture=function(t){var e=this._tileTextures[t];return e&&e.length>0?e.pop():null},on.prototype.isPatternMissing=function(t){if(!t)return!1;var e=this.imageManager.getPattern(t.from),r=this.imageManager.getPattern(t.to);return!e||!r},on.prototype.useProgram=function(t,e){void 0===e&&(e=this.emptyProgramConfiguration),this.cache=this.cache||{};var r=""+t+(e.cacheKey||"")+(this._showOverdrawInspector?"/overdraw":"");return this.cache[r]||(this.cache[r]=new fr(this.context,ur[t],e,Vr[t],this._showOverdrawInspector)),this.cache[r]},on.prototype.setCustomLayerDefaults=function(){this.context.unbindVAO(),this.context.cullFace.setDefault(),this.context.activeTexture.setDefault(),this.context.pixelStoreUnpack.setDefault(),this.context.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.context.pixelStoreUnpackFlipY.setDefault()},on.prototype.setBaseState=function(){var t=this.context.gl;this.context.cullFace.set(!1),this.context.viewport.set([0,0,this.width,this.height]),this.context.blendEquation.set(t.FUNC_ADD)};var un=function(e,r,n){this.tileSize=512,this.maxValidLatitude=85.051129,this._renderWorldCopies=void 0===n||n,this._minZoom=e||0,this._maxZoom=r||22,this.setMaxBounds(),this.width=0,this.height=0,this._center=new t.LngLat(0,0),this.zoom=0,this.angle=0,this._fov=.6435011087932844,this._pitch=0,this._unmodified=!0,this._posMatrixCache={},this._alignedPosMatrixCache={}},hn={minZoom:{configurable:!0},maxZoom:{configurable:!0},renderWorldCopies:{configurable:!0},worldSize:{configurable:!0},centerPoint:{configurable:!0},size:{configurable:!0},bearing:{configurable:!0},pitch:{configurable:!0},fov:{configurable:!0},zoom:{configurable:!0},center:{configurable:!0},unmodified:{configurable:!0},point:{configurable:!0}};un.prototype.clone=function(){var t=new un(this._minZoom,this._maxZoom,this._renderWorldCopies);return t.tileSize=this.tileSize,t.latRange=this.latRange,t.width=this.width,t.height=this.height,t._center=this._center,t.zoom=this.zoom,t.angle=this.angle,t._fov=this._fov,t._pitch=this._pitch,t._unmodified=this._unmodified,t._calcMatrices(),t},hn.minZoom.get=function(){return this._minZoom},hn.minZoom.set=function(t){this._minZoom!==t&&(this._minZoom=t,this.zoom=Math.max(this.zoom,t))},hn.maxZoom.get=function(){return this._maxZoom},hn.maxZoom.set=function(t){this._maxZoom!==t&&(this._maxZoom=t,this.zoom=Math.min(this.zoom,t))},hn.renderWorldCopies.get=function(){return this._renderWorldCopies},hn.renderWorldCopies.set=function(t){void 0===t?t=!0:null===t&&(t=!1),this._renderWorldCopies=t},hn.worldSize.get=function(){return this.tileSize*this.scale},hn.centerPoint.get=function(){return this.size._div(2)},hn.size.get=function(){return new t.Point(this.width,this.height)},hn.bearing.get=function(){return-this.angle/Math.PI*180},hn.bearing.set=function(e){var r=-t.wrap(e,-180,180)*Math.PI/180;this.angle!==r&&(this._unmodified=!1,this.angle=r,this._calcMatrices(),this.rotationMatrix=t.create$2(),t.rotate(this.rotationMatrix,this.rotationMatrix,this.angle))},hn.pitch.get=function(){return this._pitch/Math.PI*180},hn.pitch.set=function(e){var r=t.clamp(e,0,60)/180*Math.PI;this._pitch!==r&&(this._unmodified=!1,this._pitch=r,this._calcMatrices())},hn.fov.get=function(){return this._fov/Math.PI*180},hn.fov.set=function(t){t=Math.max(.01,Math.min(60,t)),this._fov!==t&&(this._unmodified=!1,this._fov=t/180*Math.PI,this._calcMatrices())},hn.zoom.get=function(){return this._zoom},hn.zoom.set=function(t){var e=Math.min(Math.max(t,this.minZoom),this.maxZoom);this._zoom!==e&&(this._unmodified=!1,this._zoom=e,this.scale=this.zoomScale(e),this.tileZoom=Math.floor(e),this.zoomFraction=e-this.tileZoom,this._constrain(),this._calcMatrices())},hn.center.get=function(){return this._center},hn.center.set=function(t){t.lat===this._center.lat&&t.lng===this._center.lng||(this._unmodified=!1,this._center=t,this._constrain(),this._calcMatrices())},un.prototype.coveringZoomLevel=function(t){return(t.roundZoom?Math.round:Math.floor)(this.zoom+this.scaleZoom(this.tileSize/t.tileSize))},un.prototype.getVisibleUnwrappedCoordinates=function(e){var r=[new t.UnwrappedTileID(0,e)];if(this._renderWorldCopies)for(var n=this.pointCoordinate(new t.Point(0,0)),a=this.pointCoordinate(new t.Point(this.width,0)),i=this.pointCoordinate(new t.Point(this.width,this.height)),o=this.pointCoordinate(new t.Point(0,this.height)),s=Math.floor(Math.min(n.x,a.x,i.x,o.x)),l=Math.floor(Math.max(n.x,a.x,i.x,o.x)),c=s-1;c<=l+1;c++)0!==c&&r.push(new t.UnwrappedTileID(c,e));return r},un.prototype.coveringTiles=function(e){var r=this.coveringZoomLevel(e),n=r;if(void 0!==e.minzoom&&r<e.minzoom)return[];void 0!==e.maxzoom&&r>e.maxzoom&&(r=e.maxzoom);var a=t.MercatorCoordinate.fromLngLat(this.center),i=Math.pow(2,r),o=new t.Point(i*a.x-.5,i*a.y-.5);return function(e,r,n,a){void 0===a&&(a=!0);var i=1<<e,o={};function s(r,s,l){var c,u,h,f;if(l>=0&&l<=i)for(c=r;c<s;c++)u=Math.floor(c/i),h=(c%i+i)%i,0!==u&&!0!==a||(f=new t.OverscaledTileID(n,u,e,h,l),o[f.key]=f)}var l=r.map(function(e){return new t.Point(e.x,e.y)._mult(i)});return cn(l[0],l[1],l[2],0,i,s),cn(l[2],l[3],l[0],0,i,s),Object.keys(o).map(function(t){return o[t]})}(r,[this.pointCoordinate(new t.Point(0,0)),this.pointCoordinate(new t.Point(this.width,0)),this.pointCoordinate(new t.Point(this.width,this.height)),this.pointCoordinate(new t.Point(0,this.height))],e.reparseOverscaled?n:r,this._renderWorldCopies).sort(function(t,e){return o.dist(t.canonical)-o.dist(e.canonical)})},un.prototype.resize=function(t,e){this.width=t,this.height=e,this.pixelsToGLUnits=[2/t,-2/e],this._constrain(),this._calcMatrices()},hn.unmodified.get=function(){return this._unmodified},un.prototype.zoomScale=function(t){return Math.pow(2,t)},un.prototype.scaleZoom=function(t){return Math.log(t)/Math.LN2},un.prototype.project=function(e){var r=t.clamp(e.lat,-this.maxValidLatitude,this.maxValidLatitude);return new t.Point(t.mercatorXfromLng(e.lng)*this.worldSize,t.mercatorYfromLat(r)*this.worldSize)},un.prototype.unproject=function(e){return new t.MercatorCoordinate(e.x/this.worldSize,e.y/this.worldSize).toLngLat()},hn.point.get=function(){return this.project(this.center)},un.prototype.setLocationAtPoint=function(e,r){var n=this.pointCoordinate(r),a=this.pointCoordinate(this.centerPoint),i=this.locationCoordinate(e),o=new t.MercatorCoordinate(i.x-(n.x-a.x),i.y-(n.y-a.y));this.center=this.coordinateLocation(o),this._renderWorldCopies&&(this.center=this.center.wrap())},un.prototype.locationPoint=function(t){return this.coordinatePoint(this.locationCoordinate(t))},un.prototype.pointLocation=function(t){return this.coordinateLocation(this.pointCoordinate(t))},un.prototype.locationCoordinate=function(e){return t.MercatorCoordinate.fromLngLat(e)},un.prototype.coordinateLocation=function(t){return t.toLngLat()},un.prototype.pointCoordinate=function(e){var r=[e.x,e.y,0,1],n=[e.x,e.y,1,1];t.transformMat4(r,r,this.pixelMatrixInverse),t.transformMat4(n,n,this.pixelMatrixInverse);var a=r[3],i=n[3],o=r[0]/a,s=n[0]/i,l=r[1]/a,c=n[1]/i,u=r[2]/a,h=n[2]/i,f=u===h?0:(0-u)/(h-u);return new t.MercatorCoordinate(t.number(o,s,f)/this.worldSize,t.number(l,c,f)/this.worldSize)},un.prototype.coordinatePoint=function(e){var r=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(r,r,this.pixelMatrix),new t.Point(r[0]/r[3],r[1]/r[3])},un.prototype.getBounds=function(){return(new t.LngLatBounds).extend(this.pointLocation(new t.Point(0,0))).extend(this.pointLocation(new t.Point(this.width,0))).extend(this.pointLocation(new t.Point(this.width,this.height))).extend(this.pointLocation(new t.Point(0,this.height)))},un.prototype.getMaxBounds=function(){return this.latRange&&2===this.latRange.length&&this.lngRange&&2===this.lngRange.length?new t.LngLatBounds([this.lngRange[0],this.latRange[0]],[this.lngRange[1],this.latRange[1]]):null},un.prototype.setMaxBounds=function(t){t?(this.lngRange=[t.getWest(),t.getEast()],this.latRange=[t.getSouth(),t.getNorth()],this._constrain()):(this.lngRange=null,this.latRange=[-this.maxValidLatitude,this.maxValidLatitude])},un.prototype.calculatePosMatrix=function(e,r){void 0===r&&(r=!1);var n=e.key,a=r?this._alignedPosMatrixCache:this._posMatrixCache;if(a[n])return a[n];var i=e.canonical,o=this.worldSize/this.zoomScale(i.z),s=i.x+Math.pow(2,i.z)*e.wrap,l=t.identity(new Float64Array(16));return t.translate(l,l,[s*o,i.y*o,0]),t.scale(l,l,[o/t.EXTENT,o/t.EXTENT,1]),t.multiply(l,r?this.alignedProjMatrix:this.projMatrix,l),a[n]=new Float32Array(l),a[n]},un.prototype.customLayerMatrix=function(){return this.mercatorMatrix.slice()},un.prototype._constrain=function(){if(this.center&&this.width&&this.height&&!this._constraining){this._constraining=!0;var e,r,n,a,i=-90,o=90,s=-180,l=180,c=this.size,u=this._unmodified;if(this.latRange){var h=this.latRange;i=t.mercatorYfromLat(h[1])*this.worldSize,e=(o=t.mercatorYfromLat(h[0])*this.worldSize)-i<c.y?c.y/(o-i):0}if(this.lngRange){var f=this.lngRange;s=t.mercatorXfromLng(f[0])*this.worldSize,r=(l=t.mercatorXfromLng(f[1])*this.worldSize)-s<c.x?c.x/(l-s):0}var p=this.point,d=Math.max(r||0,e||0);if(d)return this.center=this.unproject(new t.Point(r?(l+s)/2:p.x,e?(o+i)/2:p.y)),this.zoom+=this.scaleZoom(d),this._unmodified=u,void(this._constraining=!1);if(this.latRange){var g=p.y,v=c.y/2;g-v<i&&(a=i+v),g+v>o&&(a=o-v)}if(this.lngRange){var m=p.x,y=c.x/2;m-y<s&&(n=s+y),m+y>l&&(n=l-y)}void 0===n&&void 0===a||(this.center=this.unproject(new t.Point(void 0!==n?n:p.x,void 0!==a?a:p.y))),this._unmodified=u,this._constraining=!1}},un.prototype._calcMatrices=function(){if(this.height){this.cameraToCenterDistance=.5/Math.tan(this._fov/2)*this.height;var e=this._fov/2,r=Math.PI/2+this._pitch,n=Math.sin(e)*this.cameraToCenterDistance/Math.sin(Math.PI-r-e),a=this.point,i=a.x,o=a.y,s=1.01*(Math.cos(Math.PI/2-this._pitch)*n+this.cameraToCenterDistance),l=this.height/50,c=new Float64Array(16);t.perspective(c,this._fov,this.width/this.height,l,s),t.scale(c,c,[1,-1,1]),t.translate(c,c,[0,0,-this.cameraToCenterDistance]),t.rotateX(c,c,this._pitch),t.rotateZ(c,c,this.angle),t.translate(c,c,[-i,-o,0]),this.mercatorMatrix=t.scale([],c,[this.worldSize,this.worldSize,this.worldSize]),t.scale(c,c,[1,1,t.mercatorZfromAltitude(1,this.center.lat)*this.worldSize,1]),this.projMatrix=c;var u=this.width%2/2,h=this.height%2/2,f=Math.cos(this.angle),p=Math.sin(this.angle),d=i-Math.round(i)+f*u+p*h,g=o-Math.round(o)+f*h+p*u,v=new Float64Array(c);if(t.translate(v,v,[d>.5?d-1:d,g>.5?g-1:g,0]),this.alignedProjMatrix=v,c=t.create(),t.scale(c,c,[this.width/2,-this.height/2,1]),t.translate(c,c,[1,-1,0]),this.labelPlaneMatrix=c,c=t.create(),t.scale(c,c,[1,-1,1]),t.translate(c,c,[-1,-1,0]),t.scale(c,c,[2/this.width,2/this.height,1]),this.glCoordMatrix=c,this.pixelMatrix=t.multiply(new Float64Array(16),this.labelPlaneMatrix,this.projMatrix),!(c=t.invert(new Float64Array(16),this.pixelMatrix)))throw new Error("failed to invert matrix");this.pixelMatrixInverse=c,this._posMatrixCache={},this._alignedPosMatrixCache={}}},un.prototype.maxPitchScaleFactor=function(){if(!this.pixelMatrixInverse)return 1;var e=this.pointCoordinate(new t.Point(0,0)),r=[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(r,r,this.pixelMatrix)[3]/this.cameraToCenterDistance},un.prototype.getCameraPoint=function(){var e=this._pitch,r=Math.tan(e)*(this.cameraToCenterDistance||1);return this.centerPoint.add(new t.Point(0,r))},un.prototype.getCameraQueryGeometry=function(e){var r=this.getCameraPoint();if(1===e.length)return[e[0],r];for(var n=r.x,a=r.y,i=r.x,o=r.y,s=0,l=e;s<l.length;s+=1){var c=l[s];n=Math.min(n,c.x),a=Math.min(a,c.y),i=Math.max(i,c.x),o=Math.max(o,c.y)}return[new t.Point(n,a),new t.Point(i,a),new t.Point(i,o),new t.Point(n,o),new t.Point(n,a)]},Object.defineProperties(un.prototype,hn);var fn=function(){var e,r,n,a;t.bindAll(["_onHashChange","_updateHash"],this),this._updateHash=(e=this._updateHashUnthrottled.bind(this),300,r=!1,n=null,a=function(){n=null,r&&(e(),n=setTimeout(a,300),r=!1)},function(){return r=!0,n||a(),n})};fn.prototype.addTo=function(e){return this._map=e,t.window.addEventListener("hashchange",this._onHashChange,!1),this._map.on("moveend",this._updateHash),this},fn.prototype.remove=function(){return t.window.removeEventListener("hashchange",this._onHashChange,!1),this._map.off("moveend",this._updateHash),clearTimeout(this._updateHash()),delete this._map,this},fn.prototype.getHashString=function(t){var e=this._map.getCenter(),r=Math.round(100*this._map.getZoom())/100,n=Math.ceil((r*Math.LN2+Math.log(512/360/.5))/Math.LN10),a=Math.pow(10,n),i=Math.round(e.lng*a)/a,o=Math.round(e.lat*a)/a,s=this._map.getBearing(),l=this._map.getPitch(),c="";return c+=t?"#/"+i+"/"+o+"/"+r:"#"+r+"/"+o+"/"+i,(s||l)&&(c+="/"+Math.round(10*s)/10),l&&(c+="/"+Math.round(l)),c},fn.prototype._onHashChange=function(){var e=t.window.location.hash.replace("#","").split("/");return e.length>=3&&(this._map.jumpTo({center:[+e[2],+e[1]],zoom:+e[0],bearing:+(e[3]||0),pitch:+(e[4]||0)}),!0)},fn.prototype._updateHashUnthrottled=function(){var e=this.getHashString();try{t.window.history.replaceState(t.window.history.state,"",e)}catch(t){}};var pn=function(e){function n(n,a,i,o){void 0===o&&(o={});var s=r.mousePos(a.getCanvasContainer(),i),l=a.unproject(s);e.call(this,n,t.extend({point:s,lngLat:l,originalEvent:i},o)),this._defaultPrevented=!1,this.target=a}e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n;var a={defaultPrevented:{configurable:!0}};return n.prototype.preventDefault=function(){this._defaultPrevented=!0},a.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(n.prototype,a),n}(t.Event),dn=function(e){function n(n,a,i){var o=r.touchPos(a.getCanvasContainer(),i),s=o.map(function(t){return a.unproject(t)}),l=o.reduce(function(t,e,r,n){return t.add(e.div(n.length))},new t.Point(0,0)),c=a.unproject(l);e.call(this,n,{points:o,point:l,lngLats:s,lngLat:c,originalEvent:i}),this._defaultPrevented=!1}e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n;var a={defaultPrevented:{configurable:!0}};return n.prototype.preventDefault=function(){this._defaultPrevented=!0},a.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(n.prototype,a),n}(t.Event),gn=function(t){function e(e,r,n){t.call(this,e,{originalEvent:n}),this._defaultPrevented=!1}t&&(e.__proto__=t),e.prototype=Object.create(t&&t.prototype),e.prototype.constructor=e;var r={defaultPrevented:{configurable:!0}};return e.prototype.preventDefault=function(){this._defaultPrevented=!0},r.defaultPrevented.get=function(){return this._defaultPrevented},Object.defineProperties(e.prototype,r),e}(t.Event),vn=function(e){this._map=e,this._el=e.getCanvasContainer(),this._delta=0,this._defaultZoomRate=.01,this._wheelZoomRate=1/450,t.bindAll(["_onWheel","_onTimeout","_onScrollFrame","_onScrollFinished"],this)};vn.prototype.setZoomRate=function(t){this._defaultZoomRate=t},vn.prototype.setWheelZoomRate=function(t){this._wheelZoomRate=t},vn.prototype.isEnabled=function(){return!!this._enabled},vn.prototype.isActive=function(){return!!this._active},vn.prototype.isZooming=function(){return!!this._zooming},vn.prototype.enable=function(t){this.isEnabled()||(this._enabled=!0,this._aroundCenter=t&&"center"===t.around)},vn.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},vn.prototype.onWheel=function(e){if(this.isEnabled()){var r=e.deltaMode===t.window.WheelEvent.DOM_DELTA_LINE?40*e.deltaY:e.deltaY,n=t.browser.now(),a=n-(this._lastWheelEventTime||0);this._lastWheelEventTime=n,0!==r&&r%4.000244140625==0?this._type="wheel":0!==r&&Math.abs(r)<4?this._type="trackpad":a>400?(this._type=null,this._lastValue=r,this._timeout=setTimeout(this._onTimeout,40,e)):this._type||(this._type=Math.abs(a*r)<200?"trackpad":"wheel",this._timeout&&(clearTimeout(this._timeout),this._timeout=null,r+=this._lastValue)),e.shiftKey&&r&&(r/=4),this._type&&(this._lastWheelEvent=e,this._delta-=r,this.isActive()||this._start(e)),e.preventDefault()}},vn.prototype._onTimeout=function(t){this._type="wheel",this._delta-=this._lastValue,this.isActive()||this._start(t)},vn.prototype._start=function(e){if(this._delta){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),this._active=!0,this.isZooming()||(this._zooming=!0,this._map.fire(new t.Event("movestart",{originalEvent:e})),this._map.fire(new t.Event("zoomstart",{originalEvent:e}))),this._finishTimeout&&clearTimeout(this._finishTimeout);var n=r.mousePos(this._el,e);this._around=t.LngLat.convert(this._aroundCenter?this._map.getCenter():this._map.unproject(n)),this._aroundPoint=this._map.transform.locationPoint(this._around),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onScrollFrame))}},vn.prototype._onScrollFrame=function(){var e=this;if(this._frameId=null,this.isActive()){var r=this._map.transform;if(0!==this._delta){var n="wheel"===this._type&&Math.abs(this._delta)>4.000244140625?this._wheelZoomRate:this._defaultZoomRate,a=2/(1+Math.exp(-Math.abs(this._delta*n)));this._delta<0&&0!==a&&(a=1/a);var i="number"==typeof this._targetZoom?r.zoomScale(this._targetZoom):r.scale;this._targetZoom=Math.min(r.maxZoom,Math.max(r.minZoom,r.scaleZoom(i*a))),"wheel"===this._type&&(this._startZoom=r.zoom,this._easing=this._smoothOutEasing(200)),this._delta=0}var o="number"==typeof this._targetZoom?this._targetZoom:r.zoom,s=this._startZoom,l=this._easing,c=!1;if("wheel"===this._type&&s&&l){var u=Math.min((t.browser.now()-this._lastWheelEventTime)/200,1),h=l(u);r.zoom=t.number(s,o,h),u<1?this._frameId||(this._frameId=this._map._requestRenderFrame(this._onScrollFrame)):c=!0}else r.zoom=o,c=!0;r.setLocationAtPoint(this._around,this._aroundPoint),this._map.fire(new t.Event("move",{originalEvent:this._lastWheelEvent})),this._map.fire(new t.Event("zoom",{originalEvent:this._lastWheelEvent})),c&&(this._active=!1,this._finishTimeout=setTimeout(function(){e._zooming=!1,e._map.fire(new t.Event("zoomend",{originalEvent:e._lastWheelEvent})),e._map.fire(new t.Event("moveend",{originalEvent:e._lastWheelEvent})),delete e._targetZoom},200))}},vn.prototype._smoothOutEasing=function(e){var r=t.ease;if(this._prevEase){var n=this._prevEase,a=(t.browser.now()-n.start)/n.duration,i=n.easing(a+.01)-n.easing(a),o=.27/Math.sqrt(i*i+1e-4)*.01,s=Math.sqrt(.0729-o*o);r=t.bezier(o,s,.25,1)}return this._prevEase={start:t.browser.now(),duration:e,easing:r},r};var mn=function(e,r){this._map=e,this._el=e.getCanvasContainer(),this._container=e.getContainer(),this._clickTolerance=r.clickTolerance||1,t.bindAll(["_onMouseMove","_onMouseUp","_onKeyDown"],this)};mn.prototype.isEnabled=function(){return!!this._enabled},mn.prototype.isActive=function(){return!!this._active},mn.prototype.enable=function(){this.isEnabled()||(this._enabled=!0)},mn.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},mn.prototype.onMouseDown=function(e){this.isEnabled()&&e.shiftKey&&0===e.button&&(t.window.document.addEventListener("mousemove",this._onMouseMove,!1),t.window.document.addEventListener("keydown",this._onKeyDown,!1),t.window.document.addEventListener("mouseup",this._onMouseUp,!1),r.disableDrag(),this._startPos=this._lastPos=r.mousePos(this._el,e),this._active=!0)},mn.prototype._onMouseMove=function(t){var e=r.mousePos(this._el,t);if(!(this._lastPos.equals(e)||!this._box&&e.dist(this._startPos)<this._clickTolerance)){var n=this._startPos;this._lastPos=e,this._box||(this._box=r.create("div","mapboxgl-boxzoom",this._container),this._container.classList.add("mapboxgl-crosshair"),this._fireEvent("boxzoomstart",t));var a=Math.min(n.x,e.x),i=Math.max(n.x,e.x),o=Math.min(n.y,e.y),s=Math.max(n.y,e.y);r.setTransform(this._box,"translate("+a+"px,"+o+"px)"),this._box.style.width=i-a+"px",this._box.style.height=s-o+"px"}},mn.prototype._onMouseUp=function(e){if(0===e.button){var n=this._startPos,a=r.mousePos(this._el,e);this._finish(),r.suppressClick(),n.x===a.x&&n.y===a.y?this._fireEvent("boxzoomcancel",e):this._map.fitScreenCoordinates(n,a,this._map.getBearing(),{linear:!0}).fire(new t.Event("boxzoomend",{originalEvent:e}))}},mn.prototype._onKeyDown=function(t){27===t.keyCode&&(this._finish(),this._fireEvent("boxzoomcancel",t))},mn.prototype._finish=function(){this._active=!1,t.window.document.removeEventListener("mousemove",this._onMouseMove,!1),t.window.document.removeEventListener("keydown",this._onKeyDown,!1),t.window.document.removeEventListener("mouseup",this._onMouseUp,!1),this._container.classList.remove("mapboxgl-crosshair"),this._box&&(r.remove(this._box),this._box=null),r.enableDrag(),delete this._startPos,delete this._lastPos},mn.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,{originalEvent:r}))};var yn=t.bezier(0,0,.25,1),xn=function(e,r){this._map=e,this._el=r.element||e.getCanvasContainer(),this._state="disabled",this._button=r.button||"right",this._bearingSnap=r.bearingSnap||0,this._pitchWithRotate=!1!==r.pitchWithRotate,t.bindAll(["onMouseDown","_onMouseMove","_onMouseUp","_onBlur","_onDragFrame"],this)};xn.prototype.isEnabled=function(){return"disabled"!==this._state},xn.prototype.isActive=function(){return"active"===this._state},xn.prototype.enable=function(){this.isEnabled()||(this._state="enabled")},xn.prototype.disable=function(){if(this.isEnabled())switch(this._state){case"active":this._state="disabled",this._unbind(),this._deactivate(),this._fireEvent("rotateend"),this._pitchWithRotate&&this._fireEvent("pitchend"),this._fireEvent("moveend");break;case"pending":this._state="disabled",this._unbind();break;default:this._state="disabled"}},xn.prototype.onMouseDown=function(e){if("enabled"===this._state){var n="touchstart"===e.type;if(n)this._startTime=Date.now();else if("right"===this._button){if(this._eventButton=r.mouseButton(e),this._eventButton!==(e.ctrlKey?0:2))return}else{if(e.ctrlKey||0!==r.mouseButton(e))return;this._eventButton=0}r.disableDrag(),n?(t.window.document.addEventListener("touchmove",this._onMouseMove,{capture:!0}),t.window.document.addEventListener("touchend",this._onMouseUp)):(t.window.document.addEventListener("mousemove",this._onMouseMove,{capture:!0}),t.window.document.addEventListener("mouseup",this._onMouseUp)),t.window.addEventListener("blur",this._onBlur),this._state="pending",this._inertia=[[t.browser.now(),this._map.getBearing()]],this._startPos=this._prevPos=this._lastPos=r.mousePos(this._el,e),this._center=this._map.transform.centerPoint,e.preventDefault()}},xn.prototype._onMouseMove=function(t){var e=r.mousePos(this._el,t);this._lastPos.equals(e)||(this._lastMoveEvent=t,this._lastPos=e,"pending"===this._state&&(this._state="active",this._fireEvent("rotatestart",t),this._fireEvent("movestart",t),this._pitchWithRotate&&this._fireEvent("pitchstart",t)),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onDragFrame)))},xn.prototype._onDragFrame=function(){this._frameId=null;var e=this._lastMoveEvent;if(e){var r=this._map.transform,n=this._prevPos,a=this._lastPos,i=.8*(n.x-a.x),o=-.5*(n.y-a.y),s=r.bearing-i,l=r.pitch-o,c=this._inertia,u=c[c.length-1];this._drainInertiaBuffer(),c.push([t.browser.now(),this._map._normalizeBearing(s,u[1])]),r.bearing=s,this._pitchWithRotate&&(this._fireEvent("pitch",e),r.pitch=l),this._fireEvent("rotate",e),this._fireEvent("move",e),delete this._lastMoveEvent,this._prevPos=this._lastPos}},xn.prototype._onMouseUp=function(t){if("touchend"===t.type&&this._startPos===this._lastPos&&Date.now()-this._startTime<300&&this._el.click(),r.mouseButton(t)===this._eventButton)switch(this._state){case"active":this._state="enabled",r.suppressClick(),this._unbind(),this._deactivate(),this._inertialRotate(t);break;case"pending":this._state="enabled",this._unbind()}},xn.prototype._onBlur=function(t){switch(this._state){case"active":this._state="enabled",this._unbind(),this._deactivate(),this._fireEvent("rotateend",t),this._pitchWithRotate&&this._fireEvent("pitchend",t),this._fireEvent("moveend",t);break;case"pending":this._state="enabled",this._unbind()}},xn.prototype._unbind=function(){t.window.document.removeEventListener("mousemove",this._onMouseMove,{capture:!0}),t.window.document.removeEventListener("mouseup",this._onMouseUp),t.window.document.removeEventListener("touchmove",this._onMouseMove,{capture:!0}),t.window.document.removeEventListener("touchend",this._onMouseUp),t.window.removeEventListener("blur",this._onBlur),r.enableDrag()},xn.prototype._deactivate=function(){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._lastMoveEvent,delete this._startPos,delete this._prevPos,delete this._lastPos},xn.prototype._inertialRotate=function(t){var e=this;this._fireEvent("rotateend",t),this._drainInertiaBuffer();var r=this._map,n=r.getBearing(),a=this._inertia,i=function(){Math.abs(n)<e._bearingSnap?r.resetNorth({noMoveStart:!0},{originalEvent:t}):e._fireEvent("moveend",t),e._pitchWithRotate&&e._fireEvent("pitchend",t)};if(a.length<2)i();else{var o=a[0],s=a[a.length-1],l=a[a.length-2],c=r._normalizeBearing(n,l[1]),u=s[1]-o[1],h=u<0?-1:1,f=(s[0]-o[0])/1e3;if(0!==u&&0!==f){var p=Math.abs(u*(.25/f));p>180&&(p=180);var d=p/180;c+=h*p*(d/2),Math.abs(r._normalizeBearing(c,0))<this._bearingSnap&&(c=r._normalizeBearing(0,c)),r.rotateTo(c,{duration:1e3*d,easing:yn,noMoveStart:!0},{originalEvent:t})}else i()}},xn.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,r?{originalEvent:r}:{}))},xn.prototype._drainInertiaBuffer=function(){for(var e=this._inertia,r=t.browser.now();e.length>0&&r-e[0][0]>160;)e.shift()};var bn=t.bezier(0,0,.3,1),_n=function(e,r){this._map=e,this._el=e.getCanvasContainer(),this._state="disabled",this._clickTolerance=r.clickTolerance||1,t.bindAll(["_onMove","_onMouseUp","_onTouchEnd","_onBlur","_onDragFrame"],this)};_n.prototype.isEnabled=function(){return"disabled"!==this._state},_n.prototype.isActive=function(){return"active"===this._state},_n.prototype.enable=function(){this.isEnabled()||(this._el.classList.add("mapboxgl-touch-drag-pan"),this._state="enabled")},_n.prototype.disable=function(){if(this.isEnabled())switch(this._el.classList.remove("mapboxgl-touch-drag-pan"),this._state){case"active":this._state="disabled",this._unbind(),this._deactivate(),this._fireEvent("dragend"),this._fireEvent("moveend");break;case"pending":this._state="disabled",this._unbind();break;default:this._state="disabled"}},_n.prototype.onMouseDown=function(e){"enabled"===this._state&&(e.ctrlKey||0!==r.mouseButton(e)||(r.addEventListener(t.window.document,"mousemove",this._onMove,{capture:!0}),r.addEventListener(t.window.document,"mouseup",this._onMouseUp),this._start(e)))},_n.prototype.onTouchStart=function(e){"enabled"===this._state&&(e.touches.length>1||(r.addEventListener(t.window.document,"touchmove",this._onMove,{capture:!0,passive:!1}),r.addEventListener(t.window.document,"touchend",this._onTouchEnd),this._start(e)))},_n.prototype._start=function(e){t.window.addEventListener("blur",this._onBlur),this._state="pending",this._startPos=this._mouseDownPos=this._prevPos=this._lastPos=r.mousePos(this._el,e),this._inertia=[[t.browser.now(),this._startPos]]},_n.prototype._onMove=function(e){e.preventDefault();var n=r.mousePos(this._el,e);this._lastPos.equals(n)||"pending"===this._state&&n.dist(this._mouseDownPos)<this._clickTolerance||(this._lastMoveEvent=e,this._lastPos=n,this._drainInertiaBuffer(),this._inertia.push([t.browser.now(),this._lastPos]),"pending"===this._state&&(this._state="active",this._fireEvent("dragstart",e),this._fireEvent("movestart",e)),this._frameId||(this._frameId=this._map._requestRenderFrame(this._onDragFrame)))},_n.prototype._onDragFrame=function(){this._frameId=null;var t=this._lastMoveEvent;if(t){var e=this._map.transform;e.setLocationAtPoint(e.pointLocation(this._prevPos),this._lastPos),this._fireEvent("drag",t),this._fireEvent("move",t),this._prevPos=this._lastPos,delete this._lastMoveEvent}},_n.prototype._onMouseUp=function(t){if(0===r.mouseButton(t))switch(this._state){case"active":this._state="enabled",r.suppressClick(),this._unbind(),this._deactivate(),this._inertialPan(t);break;case"pending":this._state="enabled",this._unbind()}},_n.prototype._onTouchEnd=function(t){switch(this._state){case"active":this._state="enabled",this._unbind(),this._deactivate(),this._inertialPan(t);break;case"pending":this._state="enabled",this._unbind()}},_n.prototype._onBlur=function(t){switch(this._state){case"active":this._state="enabled",this._unbind(),this._deactivate(),this._fireEvent("dragend",t),this._fireEvent("moveend",t);break;case"pending":this._state="enabled",this._unbind()}},_n.prototype._unbind=function(){r.removeEventListener(t.window.document,"touchmove",this._onMove,{capture:!0,passive:!1}),r.removeEventListener(t.window.document,"touchend",this._onTouchEnd),r.removeEventListener(t.window.document,"mousemove",this._onMove,{capture:!0}),r.removeEventListener(t.window.document,"mouseup",this._onMouseUp),r.removeEventListener(t.window,"blur",this._onBlur)},_n.prototype._deactivate=function(){this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._lastMoveEvent,delete this._startPos,delete this._prevPos,delete this._mouseDownPos,delete this._lastPos},_n.prototype._inertialPan=function(t){this._fireEvent("dragend",t),this._drainInertiaBuffer();var e=this._inertia;if(e.length<2)this._fireEvent("moveend",t);else{var r=e[e.length-1],n=e[0],a=r[1].sub(n[1]),i=(r[0]-n[0])/1e3;if(0===i||r[1].equals(n[1]))this._fireEvent("moveend",t);else{var o=a.mult(.3/i),s=o.mag();s>1400&&(s=1400,o._unit()._mult(s));var l=s/750,c=o.mult(-l/2);this._map.panBy(c,{duration:1e3*l,easing:bn,noMoveStart:!0},{originalEvent:t})}}},_n.prototype._fireEvent=function(e,r){return this._map.fire(new t.Event(e,r?{originalEvent:r}:{}))},_n.prototype._drainInertiaBuffer=function(){for(var e=this._inertia,r=t.browser.now();e.length>0&&r-e[0][0]>160;)e.shift()};var wn=function(e){this._map=e,this._el=e.getCanvasContainer(),t.bindAll(["_onKeyDown"],this)};function kn(t){return t*(2-t)}wn.prototype.isEnabled=function(){return!!this._enabled},wn.prototype.enable=function(){this.isEnabled()||(this._el.addEventListener("keydown",this._onKeyDown,!1),this._enabled=!0)},wn.prototype.disable=function(){this.isEnabled()&&(this._el.removeEventListener("keydown",this._onKeyDown),this._enabled=!1)},wn.prototype._onKeyDown=function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var e=0,r=0,n=0,a=0,i=0;switch(t.keyCode){case 61:case 107:case 171:case 187:e=1;break;case 189:case 109:case 173:e=-1;break;case 37:t.shiftKey?r=-1:(t.preventDefault(),a=-1);break;case 39:t.shiftKey?r=1:(t.preventDefault(),a=1);break;case 38:t.shiftKey?n=1:(t.preventDefault(),i=-1);break;case 40:t.shiftKey?n=-1:(i=1,t.preventDefault());break;default:return}var o=this._map,s=o.getZoom(),l={duration:300,delayEndEvents:500,easing:kn,zoom:e?Math.round(s)+e*(t.shiftKey?2:1):s,bearing:o.getBearing()+15*r,pitch:o.getPitch()+10*n,offset:[100*-a,100*-i],center:o.getCenter()};o.easeTo(l,{originalEvent:t})}};var Tn=function(e){this._map=e,t.bindAll(["_onDblClick","_onZoomEnd"],this)};Tn.prototype.isEnabled=function(){return!!this._enabled},Tn.prototype.isActive=function(){return!!this._active},Tn.prototype.enable=function(){this.isEnabled()||(this._enabled=!0)},Tn.prototype.disable=function(){this.isEnabled()&&(this._enabled=!1)},Tn.prototype.onTouchStart=function(t){var e=this;if(this.isEnabled()&&!(t.points.length>1))if(this._tapped){var r=t.points[0],n=this._tappedPoint;if(n&&n.dist(r)<=30){t.originalEvent.preventDefault();var a=function(){e._tapped&&e._zoom(t),e._map.off("touchcancel",i),e._resetTapped()},i=function(){e._map.off("touchend",a),e._resetTapped()};this._map.once("touchend",a),this._map.once("touchcancel",i)}else this._resetTapped()}else this._tappedPoint=t.points[0],this._tapped=setTimeout(function(){e._tapped=null,e._tappedPoint=null},300)},Tn.prototype._resetTapped=function(){clearTimeout(this._tapped),this._tapped=null,this._tappedPoint=null},Tn.prototype.onDblClick=function(t){this.isEnabled()&&(t.originalEvent.preventDefault(),this._zoom(t))},Tn.prototype._zoom=function(t){this._active=!0,this._map.on("zoomend",this._onZoomEnd),this._map.zoomTo(this._map.getZoom()+(t.originalEvent.shiftKey?-1:1),{around:t.lngLat},t)},Tn.prototype._onZoomEnd=function(){this._active=!1,this._map.off("zoomend",this._onZoomEnd)};var Mn=t.bezier(0,0,.15,1),An=function(e){this._map=e,this._el=e.getCanvasContainer(),t.bindAll(["_onMove","_onEnd","_onTouchFrame"],this)};An.prototype.isEnabled=function(){return!!this._enabled},An.prototype.enable=function(t){this.isEnabled()||(this._el.classList.add("mapboxgl-touch-zoom-rotate"),this._enabled=!0,this._aroundCenter=!!t&&"center"===t.around)},An.prototype.disable=function(){this.isEnabled()&&(this._el.classList.remove("mapboxgl-touch-zoom-rotate"),this._enabled=!1)},An.prototype.disableRotation=function(){this._rotationDisabled=!0},An.prototype.enableRotation=function(){this._rotationDisabled=!1},An.prototype.onStart=function(e){if(this.isEnabled()&&2===e.touches.length){var n=r.mousePos(this._el,e.touches[0]),a=r.mousePos(this._el,e.touches[1]),i=n.add(a).div(2);this._startVec=n.sub(a),this._startAround=this._map.transform.pointLocation(i),this._gestureIntent=void 0,this._inertia=[],r.addEventListener(t.window.document,"touchmove",this._onMove,{passive:!1}),r.addEventListener(t.window.document,"touchend",this._onEnd)}},An.prototype._getTouchEventData=function(t){var e=r.mousePos(this._el,t.touches[0]),n=r.mousePos(this._el,t.touches[1]),a=e.sub(n);return{vec:a,center:e.add(n).div(2),scale:a.mag()/this._startVec.mag(),bearing:this._rotationDisabled?0:180*a.angleWith(this._startVec)/Math.PI}},An.prototype._onMove=function(e){if(2===e.touches.length){var r=this._getTouchEventData(e),n=r.vec,a=r.scale,i=r.bearing;if(!this._gestureIntent){var o=this._rotationDisabled&&1!==a||Math.abs(1-a)>.15;Math.abs(i)>10?this._gestureIntent="rotate":o&&(this._gestureIntent="zoom"),this._gestureIntent&&(this._map.fire(new t.Event(this._gestureIntent+"start",{originalEvent:e})),this._map.fire(new t.Event("movestart",{originalEvent:e})),this._startVec=n)}this._lastTouchEvent=e,this._frameId||(this._frameId=this._map._requestRenderFrame(this._onTouchFrame)),e.preventDefault()}},An.prototype._onTouchFrame=function(){this._frameId=null;var e=this._gestureIntent;if(e){var r=this._map.transform;this._startScale||(this._startScale=r.scale,this._startBearing=r.bearing);var n=this._getTouchEventData(this._lastTouchEvent),a=n.center,i=n.bearing,o=n.scale,s=r.pointLocation(a),l=r.locationPoint(s);"rotate"===e&&(r.bearing=this._startBearing+i),r.zoom=r.scaleZoom(this._startScale*o),r.setLocationAtPoint(this._startAround,l),this._map.fire(new t.Event(e,{originalEvent:this._lastTouchEvent})),this._map.fire(new t.Event("move",{originalEvent:this._lastTouchEvent})),this._drainInertiaBuffer(),this._inertia.push([t.browser.now(),o,a])}},An.prototype._onEnd=function(e){r.removeEventListener(t.window.document,"touchmove",this._onMove,{passive:!1}),r.removeEventListener(t.window.document,"touchend",this._onEnd);var n=this._gestureIntent,a=this._startScale;if(this._frameId&&(this._map._cancelRenderFrame(this._frameId),this._frameId=null),delete this._gestureIntent,delete this._startScale,delete this._startBearing,delete this._lastTouchEvent,n){this._map.fire(new t.Event(n+"end",{originalEvent:e})),this._drainInertiaBuffer();var i=this._inertia,o=this._map;if(i.length<2)o.snapToNorth({},{originalEvent:e});else{var s=i[i.length-1],l=i[0],c=o.transform.scaleZoom(a*s[1]),u=o.transform.scaleZoom(a*l[1]),h=c-u,f=(s[0]-l[0])/1e3,p=s[2];if(0!==f&&c!==u){var d=.15*h/f;Math.abs(d)>2.5&&(d=d>0?2.5:-2.5);var g=1e3*Math.abs(d/(12*.15)),v=c+d*g/2e3;v<0&&(v=0),o.easeTo({zoom:v,duration:g,easing:Mn,around:this._aroundCenter?o.getCenter():o.unproject(p),noMoveStart:!0},{originalEvent:e})}else o.snapToNorth({},{originalEvent:e})}}},An.prototype._drainInertiaBuffer=function(){for(var e=this._inertia,r=t.browser.now();e.length>2&&r-e[0][0]>160;)e.shift()};var Sn={scrollZoom:vn,boxZoom:mn,dragRotate:xn,dragPan:_n,keyboard:wn,doubleClickZoom:Tn,touchZoomRotate:An},En=function(e){function r(r,n){e.call(this),this._moving=!1,this._zooming=!1,this.transform=r,this._bearingSnap=n.bearingSnap,t.bindAll(["_renderFrameCallback"],this)}return e&&(r.__proto__=e),r.prototype=Object.create(e&&e.prototype),r.prototype.constructor=r,r.prototype.getCenter=function(){return new t.LngLat(this.transform.center.lng,this.transform.center.lat)},r.prototype.setCenter=function(t,e){return this.jumpTo({center:t},e)},r.prototype.panBy=function(e,r,n){return e=t.Point.convert(e).mult(-1),this.panTo(this.transform.center,t.extend({offset:e},r),n)},r.prototype.panTo=function(e,r,n){return this.easeTo(t.extend({center:e},r),n)},r.prototype.getZoom=function(){return this.transform.zoom},r.prototype.setZoom=function(t,e){return this.jumpTo({zoom:t},e),this},r.prototype.zoomTo=function(e,r,n){return this.easeTo(t.extend({zoom:e},r),n)},r.prototype.zoomIn=function(t,e){return this.zoomTo(this.getZoom()+1,t,e),this},r.prototype.zoomOut=function(t,e){return this.zoomTo(this.getZoom()-1,t,e),this},r.prototype.getBearing=function(){return this.transform.bearing},r.prototype.setBearing=function(t,e){return this.jumpTo({bearing:t},e),this},r.prototype.rotateTo=function(e,r,n){return this.easeTo(t.extend({bearing:e},r),n)},r.prototype.resetNorth=function(e,r){return this.rotateTo(0,t.extend({duration:1e3},e),r),this},r.prototype.resetNorthPitch=function(e,r){return this.easeTo(t.extend({bearing:0,pitch:0,duration:1e3},e),r),this},r.prototype.snapToNorth=function(t,e){return Math.abs(this.getBearing())<this._bearingSnap?this.resetNorth(t,e):this},r.prototype.getPitch=function(){return this.transform.pitch},r.prototype.setPitch=function(t,e){return this.jumpTo({pitch:t},e),this},r.prototype.cameraForBounds=function(e,r){return e=t.LngLatBounds.convert(e),this._cameraForBoxAndBearing(e.getNorthWest(),e.getSouthEast(),0,r)},r.prototype._cameraForBoxAndBearing=function(e,r,n,a){if("number"==typeof(a=t.extend({padding:{top:0,bottom:0,right:0,left:0},offset:[0,0],maxZoom:this.transform.maxZoom},a)).padding){var i=a.padding;a.padding={top:i,bottom:i,right:i,left:i}}if(t.deepEqual(Object.keys(a.padding).sort(function(t,e){return t<e?-1:t>e?1:0}),["bottom","left","right","top"])){var o=this.transform,s=o.project(t.LngLat.convert(e)),l=o.project(t.LngLat.convert(r)),c=s.rotate(-n*Math.PI/180),u=l.rotate(-n*Math.PI/180),h=new t.Point(Math.max(c.x,u.x),Math.max(c.y,u.y)),f=new t.Point(Math.min(c.x,u.x),Math.min(c.y,u.y)),p=h.sub(f),d=(o.width-a.padding.left-a.padding.right)/p.x,g=(o.height-a.padding.top-a.padding.bottom)/p.y;if(!(g<0||d<0)){var v=Math.min(o.scaleZoom(o.scale*Math.min(d,g)),a.maxZoom),m=t.Point.convert(a.offset),y=(a.padding.left-a.padding.right)/2,x=(a.padding.top-a.padding.bottom)/2,b=new t.Point(m.x+y,m.y+x).mult(o.scale/o.zoomScale(v));return{center:o.unproject(s.add(l).div(2).sub(b)),zoom:v,bearing:n}}t.warnOnce("Map cannot fit within canvas with the given bounds, padding, and/or offset.")}else t.warnOnce("options.padding must be a positive number, or an Object with keys 'bottom', 'left', 'right', 'top'")},r.prototype.fitBounds=function(t,e,r){return this._fitInternal(this.cameraForBounds(t,e),e,r)},r.prototype.fitScreenCoordinates=function(e,r,n,a,i){return this._fitInternal(this._cameraForBoxAndBearing(this.transform.pointLocation(t.Point.convert(e)),this.transform.pointLocation(t.Point.convert(r)),n,a),a,i)},r.prototype._fitInternal=function(e,r,n){return e?(r=t.extend(e,r)).linear?this.easeTo(r,n):this.flyTo(r,n):this},r.prototype.jumpTo=function(e,r){this.stop();var n=this.transform,a=!1,i=!1,o=!1;return"zoom"in e&&n.zoom!==+e.zoom&&(a=!0,n.zoom=+e.zoom),void 0!==e.center&&(n.center=t.LngLat.convert(e.center)),"bearing"in e&&n.bearing!==+e.bearing&&(i=!0,n.bearing=+e.bearing),"pitch"in e&&n.pitch!==+e.pitch&&(o=!0,n.pitch=+e.pitch),this.fire(new t.Event("movestart",r)).fire(new t.Event("move",r)),a&&this.fire(new t.Event("zoomstart",r)).fire(new t.Event("zoom",r)).fire(new t.Event("zoomend",r)),i&&this.fire(new t.Event("rotatestart",r)).fire(new t.Event("rotate",r)).fire(new t.Event("rotateend",r)),o&&this.fire(new t.Event("pitchstart",r)).fire(new t.Event("pitch",r)).fire(new t.Event("pitchend",r)),this.fire(new t.Event("moveend",r))},r.prototype.easeTo=function(e,r){var n=this;this.stop(),(!1===(e=t.extend({offset:[0,0],duration:500,easing:t.ease},e)).animate||t.browser.prefersReducedMotion)&&(e.duration=0);var a=this.transform,i=this.getZoom(),o=this.getBearing(),s=this.getPitch(),l="zoom"in e?+e.zoom:i,c="bearing"in e?this._normalizeBearing(e.bearing,o):o,u="pitch"in e?+e.pitch:s,h=a.centerPoint.add(t.Point.convert(e.offset)),f=a.pointLocation(h),p=t.LngLat.convert(e.center||f);this._normalizeCenter(p);var d,g,v=a.project(f),m=a.project(p).sub(v),y=a.zoomScale(l-i);return e.around&&(d=t.LngLat.convert(e.around),g=a.locationPoint(d)),this._zooming=l!==i,this._rotating=o!==c,this._pitching=u!==s,this._prepareEase(r,e.noMoveStart),clearTimeout(this._easeEndTimeoutID),this._ease(function(e){if(n._zooming&&(a.zoom=t.number(i,l,e)),n._rotating&&(a.bearing=t.number(o,c,e)),n._pitching&&(a.pitch=t.number(s,u,e)),d)a.setLocationAtPoint(d,g);else{var f=a.zoomScale(a.zoom-i),p=l>i?Math.min(2,y):Math.max(.5,y),x=Math.pow(p,1-e),b=a.unproject(v.add(m.mult(e*x)).mult(f));a.setLocationAtPoint(a.renderWorldCopies?b.wrap():b,h)}n._fireMoveEvents(r)},function(){e.delayEndEvents?n._easeEndTimeoutID=setTimeout(function(){return n._afterEase(r)},e.delayEndEvents):n._afterEase(r)},e),this},r.prototype._prepareEase=function(e,r){this._moving=!0,r||this.fire(new t.Event("movestart",e)),this._zooming&&this.fire(new t.Event("zoomstart",e)),this._rotating&&this.fire(new t.Event("rotatestart",e)),this._pitching&&this.fire(new t.Event("pitchstart",e))},r.prototype._fireMoveEvents=function(e){this.fire(new t.Event("move",e)),this._zooming&&this.fire(new t.Event("zoom",e)),this._rotating&&this.fire(new t.Event("rotate",e)),this._pitching&&this.fire(new t.Event("pitch",e))},r.prototype._afterEase=function(e){var r=this._zooming,n=this._rotating,a=this._pitching;this._moving=!1,this._zooming=!1,this._rotating=!1,this._pitching=!1,r&&this.fire(new t.Event("zoomend",e)),n&&this.fire(new t.Event("rotateend",e)),a&&this.fire(new t.Event("pitchend",e)),this.fire(new t.Event("moveend",e))},r.prototype.flyTo=function(e,r){var n=this;if(t.browser.prefersReducedMotion){var a=t.pick(e,["center","zoom","bearing","pitch","around"]);return this.jumpTo(a,r)}this.stop(),e=t.extend({offset:[0,0],speed:1.2,curve:1.42,easing:t.ease},e);var i=this.transform,o=this.getZoom(),s=this.getBearing(),l=this.getPitch(),c="zoom"in e?t.clamp(+e.zoom,i.minZoom,i.maxZoom):o,u="bearing"in e?this._normalizeBearing(e.bearing,s):s,h="pitch"in e?+e.pitch:l,f=i.zoomScale(c-o),p=i.centerPoint.add(t.Point.convert(e.offset)),d=i.pointLocation(p),g=t.LngLat.convert(e.center||d);this._normalizeCenter(g);var v=i.project(d),m=i.project(g).sub(v),y=e.curve,x=Math.max(i.width,i.height),b=x/f,_=m.mag();if("minZoom"in e){var w=t.clamp(Math.min(e.minZoom,o,c),i.minZoom,i.maxZoom),k=x/i.zoomScale(w-o);y=Math.sqrt(k/_*2)}var T=y*y;function M(t){var e=(b*b-x*x+(t?-1:1)*T*T*_*_)/(2*(t?b:x)*T*_);return Math.log(Math.sqrt(e*e+1)-e)}function A(t){return(Math.exp(t)-Math.exp(-t))/2}function S(t){return(Math.exp(t)+Math.exp(-t))/2}var E=M(0),L=function(t){return S(E)/S(E+y*t)},C=function(t){return x*((S(E)*(A(e=E+y*t)/S(e))-A(E))/T)/_;var e},P=(M(1)-E)/y;if(Math.abs(_)<1e-6||!isFinite(P)){if(Math.abs(x-b)<1e-6)return this.easeTo(e,r);var O=b<x?-1:1;P=Math.abs(Math.log(b/x))/y,C=function(){return 0},L=function(t){return Math.exp(O*y*t)}}if("duration"in e)e.duration=+e.duration;else{var z="screenSpeed"in e?+e.screenSpeed/y:+e.speed;e.duration=1e3*P/z}return e.maxDuration&&e.duration>e.maxDuration&&(e.duration=0),this._zooming=!0,this._rotating=s!==u,this._pitching=h!==l,this._prepareEase(r,!1),this._ease(function(e){var a=e*P,f=1/L(a);i.zoom=1===e?c:o+i.scaleZoom(f),n._rotating&&(i.bearing=t.number(s,u,e)),n._pitching&&(i.pitch=t.number(l,h,e));var d=1===e?g:i.unproject(v.add(m.mult(C(a))).mult(f));i.setLocationAtPoint(i.renderWorldCopies?d.wrap():d,p),n._fireMoveEvents(r)},function(){return n._afterEase(r)},e),this},r.prototype.isEasing=function(){return!!this._easeFrameId},r.prototype.stop=function(){if(this._easeFrameId&&(this._cancelRenderFrame(this._easeFrameId),delete this._easeFrameId,delete this._onEaseFrame),this._onEaseEnd){var t=this._onEaseEnd;delete this._onEaseEnd,t.call(this)}return this},r.prototype._ease=function(e,r,n){!1===n.animate||0===n.duration?(e(1),r()):(this._easeStart=t.browser.now(),this._easeOptions=n,this._onEaseFrame=e,this._onEaseEnd=r,this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback))},r.prototype._renderFrameCallback=function(){var e=Math.min((t.browser.now()-this._easeStart)/this._easeOptions.duration,1);this._onEaseFrame(this._easeOptions.easing(e)),e<1?this._easeFrameId=this._requestRenderFrame(this._renderFrameCallback):this.stop()},r.prototype._normalizeBearing=function(e,r){e=t.wrap(e,-180,180);var n=Math.abs(e-r);return Math.abs(e-360-r)<n&&(e-=360),Math.abs(e+360-r)<n&&(e+=360),e},r.prototype._normalizeCenter=function(t){var e=this.transform;if(e.renderWorldCopies&&!e.lngRange){var r=t.lng-e.center.lng;t.lng+=r>180?-360:r<-180?360:0}},r}(t.Evented),Ln=function(e){void 0===e&&(e={}),this.options=e,t.bindAll(["_updateEditLink","_updateData","_updateCompact"],this)};Ln.prototype.getDefaultPosition=function(){return"bottom-right"},Ln.prototype.onAdd=function(t){var e=this.options&&this.options.compact;return this._map=t,this._container=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-attrib"),this._innerContainer=r.create("div","mapboxgl-ctrl-attrib-inner",this._container),e&&this._container.classList.add("mapboxgl-compact"),this._updateAttributions(),this._updateEditLink(),this._map.on("styledata",this._updateData),this._map.on("sourcedata",this._updateData),this._map.on("moveend",this._updateEditLink),void 0===e&&(this._map.on("resize",this._updateCompact),this._updateCompact()),this._container},Ln.prototype.onRemove=function(){r.remove(this._container),this._map.off("styledata",this._updateData),this._map.off("sourcedata",this._updateData),this._map.off("moveend",this._updateEditLink),this._map.off("resize",this._updateCompact),this._map=void 0},Ln.prototype._updateEditLink=function(){var e=this._editLink;e||(e=this._editLink=this._container.querySelector(".mapbox-improve-map"));var r=[{key:"owner",value:this.styleOwner},{key:"id",value:this.styleId},{key:"access_token",value:this._map._requestManager._customAccessToken||t.config.ACCESS_TOKEN}];if(e){var n=r.reduce(function(t,e,n){return e.value&&(t+=e.key+"="+e.value+(n<r.length-1?"&":"")),t},"?");e.href=t.config.FEEDBACK_URL+"/"+n+(this._map._hash?this._map._hash.getHashString(!0):""),e.rel="noopener nofollow"}},Ln.prototype._updateData=function(t){!t||"metadata"!==t.sourceDataType&&"style"!==t.dataType||(this._updateAttributions(),this._updateEditLink())},Ln.prototype._updateAttributions=function(){if(this._map.style){var t=[];if(this.options.customAttribution&&(Array.isArray(this.options.customAttribution)?t=t.concat(this.options.customAttribution.map(function(t){return"string"!=typeof t?"":t})):"string"==typeof this.options.customAttribution&&t.push(this.options.customAttribution)),this._map.style.stylesheet){var e=this._map.style.stylesheet;this.styleOwner=e.owner,this.styleId=e.id}var r=this._map.style.sourceCaches;for(var n in r){var a=r[n];if(a.used){var i=a.getSource();i.attribution&&t.indexOf(i.attribution)<0&&t.push(i.attribution)}}t.sort(function(t,e){return t.length-e.length});var o=(t=t.filter(function(e,r){for(var n=r+1;n<t.length;n++)if(t[n].indexOf(e)>=0)return!1;return!0})).join(" | ");o!==this._attribHTML&&(this._attribHTML=o,t.length?(this._innerContainer.innerHTML=o,this._container.classList.remove("mapboxgl-attrib-empty")):this._container.classList.add("mapboxgl-attrib-empty"),this._editLink=null)}},Ln.prototype._updateCompact=function(){this._map.getCanvasContainer().offsetWidth<=640?this._container.classList.add("mapboxgl-compact"):this._container.classList.remove("mapboxgl-compact")};var Cn=function(){t.bindAll(["_updateLogo"],this),t.bindAll(["_updateCompact"],this)};Cn.prototype.onAdd=function(t){this._map=t,this._container=r.create("div","mapboxgl-ctrl");var e=r.create("a","mapboxgl-ctrl-logo");return e.target="_blank",e.rel="noopener nofollow",e.href="https://www.mapbox.com/",e.setAttribute("aria-label","Mapbox logo"),e.setAttribute("rel","noopener nofollow"),this._container.appendChild(e),this._container.style.display="none",this._map.on("sourcedata",this._updateLogo),this._updateLogo(),this._map.on("resize",this._updateCompact),this._updateCompact(),this._container},Cn.prototype.onRemove=function(){r.remove(this._container),this._map.off("sourcedata",this._updateLogo),this._map.off("resize",this._updateCompact)},Cn.prototype.getDefaultPosition=function(){return"bottom-left"},Cn.prototype._updateLogo=function(t){t&&"metadata"!==t.sourceDataType||(this._container.style.display=this._logoRequired()?"block":"none")},Cn.prototype._logoRequired=function(){if(this._map.style){var t=this._map.style.sourceCaches;for(var e in t)if(t[e].getSource().mapbox_logo)return!0;return!1}},Cn.prototype._updateCompact=function(){var t=this._container.children;if(t.length){var e=t[0];this._map.getCanvasContainer().offsetWidth<250?e.classList.add("mapboxgl-compact"):e.classList.remove("mapboxgl-compact")}};var Pn=function(){this._queue=[],this._id=0,this._cleared=!1,this._currentlyRunning=!1};Pn.prototype.add=function(t){var e=++this._id;return this._queue.push({callback:t,id:e,cancelled:!1}),e},Pn.prototype.remove=function(t){for(var e=this._currentlyRunning,r=0,n=e?this._queue.concat(e):this._queue;r<n.length;r+=1){var a=n[r];if(a.id===t)return void(a.cancelled=!0)}},Pn.prototype.run=function(){var t=this._currentlyRunning=this._queue;this._queue=[];for(var e=0,r=t;e<r.length;e+=1){var n=r[e];if(!n.cancelled&&(n.callback(),this._cleared))break}this._cleared=!1,this._currentlyRunning=!1},Pn.prototype.clear=function(){this._currentlyRunning&&(this._cleared=!0),this._queue=[]};var On=t.window.HTMLImageElement,zn=t.window.HTMLElement,In={center:[0,0],zoom:0,bearing:0,pitch:0,minZoom:0,maxZoom:22,interactive:!0,scrollZoom:!0,boxZoom:!0,dragRotate:!0,dragPan:!0,keyboard:!0,doubleClickZoom:!0,touchZoomRotate:!0,bearingSnap:7,clickTolerance:3,hash:!1,attributionControl:!0,failIfMajorPerformanceCaveat:!1,preserveDrawingBuffer:!1,trackResize:!0,renderWorldCopies:!0,refreshExpiredTiles:!0,maxTileCacheSize:null,localIdeographFontFamily:"sans-serif",transformRequest:null,accessToken:null,fadeDuration:300,crossSourceCollisions:!0},Dn=function(n){function a(e){var a=this;if(null!=(e=t.extend({},In,e)).minZoom&&null!=e.maxZoom&&e.minZoom>e.maxZoom)throw new Error("maxZoom must be greater than minZoom");var i=new un(e.minZoom,e.maxZoom,e.renderWorldCopies);if(n.call(this,i,e),this._interactive=e.interactive,this._maxTileCacheSize=e.maxTileCacheSize,this._failIfMajorPerformanceCaveat=e.failIfMajorPerformanceCaveat,this._preserveDrawingBuffer=e.preserveDrawingBuffer,this._antialias=e.antialias,this._trackResize=e.trackResize,this._bearingSnap=e.bearingSnap,this._refreshExpiredTiles=e.refreshExpiredTiles,this._fadeDuration=e.fadeDuration,this._crossSourceCollisions=e.crossSourceCollisions,this._crossFadingFactor=1,this._collectResourceTiming=e.collectResourceTiming,this._renderTaskQueue=new Pn,this._controls=[],this._mapId=t.uniqueId(),this._requestManager=new t.RequestManager(e.transformRequest,e.accessToken),"string"==typeof e.container){if(this._container=t.window.document.getElementById(e.container),!this._container)throw new Error("Container '"+e.container+"' not found.")}else{if(!(e.container instanceof zn))throw new Error("Invalid type: 'container' must be a String or HTMLElement.");this._container=e.container}if(e.maxBounds&&this.setMaxBounds(e.maxBounds),t.bindAll(["_onWindowOnline","_onWindowResize","_contextLost","_contextRestored"],this),this._setupContainer(),this._setupPainter(),void 0===this.painter)throw new Error("Failed to initialize WebGL.");this.on("move",function(){return a._update(!1)}),this.on("moveend",function(){return a._update(!1)}),this.on("zoom",function(){return a._update(!0)}),void 0!==t.window&&(t.window.addEventListener("online",this._onWindowOnline,!1),t.window.addEventListener("resize",this._onWindowResize,!1)),function(t,e){var n=t.getCanvasContainer(),a=null,i=!1,o=null;for(var s in Sn)t[s]=new Sn[s](t,e),e.interactive&&e[s]&&t[s].enable(e[s]);r.addEventListener(n,"mouseout",function(e){t.fire(new pn("mouseout",t,e))}),r.addEventListener(n,"mousedown",function(a){i=!0,o=r.mousePos(n,a);var s=new pn("mousedown",t,a);t.fire(s),s.defaultPrevented||(e.interactive&&!t.doubleClickZoom.isActive()&&t.stop(),t.boxZoom.onMouseDown(a),t.boxZoom.isActive()||t.dragPan.isActive()||t.dragRotate.onMouseDown(a),t.boxZoom.isActive()||t.dragRotate.isActive()||t.dragPan.onMouseDown(a))}),r.addEventListener(n,"mouseup",function(e){var r=t.dragRotate.isActive();a&&!r&&t.fire(new pn("contextmenu",t,a)),a=null,i=!1,t.fire(new pn("mouseup",t,e))}),r.addEventListener(n,"mousemove",function(e){if(!t.dragPan.isActive()&&!t.dragRotate.isActive()){for(var r=e.target;r&&r!==n;)r=r.parentNode;r===n&&t.fire(new pn("mousemove",t,e))}}),r.addEventListener(n,"mouseover",function(e){for(var r=e.target;r&&r!==n;)r=r.parentNode;r===n&&t.fire(new pn("mouseover",t,e))}),r.addEventListener(n,"touchstart",function(r){var n=new dn("touchstart",t,r);t.fire(n),n.defaultPrevented||(e.interactive&&t.stop(),t.boxZoom.isActive()||t.dragRotate.isActive()||t.dragPan.onTouchStart(r),t.touchZoomRotate.onStart(r),t.doubleClickZoom.onTouchStart(n))},{passive:!1}),r.addEventListener(n,"touchmove",function(e){t.fire(new dn("touchmove",t,e))},{passive:!1}),r.addEventListener(n,"touchend",function(e){t.fire(new dn("touchend",t,e))}),r.addEventListener(n,"touchcancel",function(e){t.fire(new dn("touchcancel",t,e))}),r.addEventListener(n,"click",function(a){var i=r.mousePos(n,a);(!o||i.equals(o)||i.dist(o)<e.clickTolerance)&&t.fire(new pn("click",t,a))}),r.addEventListener(n,"dblclick",function(e){var r=new pn("dblclick",t,e);t.fire(r),r.defaultPrevented||t.doubleClickZoom.onDblClick(r)}),r.addEventListener(n,"contextmenu",function(e){var r=t.dragRotate.isActive();i||r?i&&(a=e):t.fire(new pn("contextmenu",t,e)),(t.dragRotate.isEnabled()||t.listens("contextmenu"))&&e.preventDefault()}),r.addEventListener(n,"wheel",function(r){e.interactive&&t.stop();var n=new gn("wheel",t,r);t.fire(n),n.defaultPrevented||t.scrollZoom.onWheel(r)},{passive:!1})}(this,e),this._hash=e.hash&&(new fn).addTo(this),this._hash&&this._hash._onHashChange()||(this.jumpTo({center:e.center,zoom:e.zoom,bearing:e.bearing,pitch:e.pitch}),e.bounds&&(this.resize(),this.fitBounds(e.bounds,t.extend({},e.fitBoundsOptions,{duration:0})))),this.resize(),this._localIdeographFontFamily=e.localIdeographFontFamily,e.style&&this.setStyle(e.style,{localIdeographFontFamily:e.localIdeographFontFamily}),e.attributionControl&&this.addControl(new Ln({customAttribution:e.customAttribution})),this.addControl(new Cn,e.logoPosition),this.on("style.load",function(){a.transform.unmodified&&a.jumpTo(a.style.stylesheet)}),this.on("data",function(e){a._update("style"===e.dataType),a.fire(new t.Event(e.dataType+"data",e))}),this.on("dataloading",function(e){a.fire(new t.Event(e.dataType+"dataloading",e))})}n&&(a.__proto__=n),a.prototype=Object.create(n&&n.prototype),a.prototype.constructor=a;var i={showTileBoundaries:{configurable:!0},showCollisionBoxes:{configurable:!0},showOverdrawInspector:{configurable:!0},repaint:{configurable:!0},vertices:{configurable:!0},version:{configurable:!0}};return a.prototype._getMapId=function(){return this._mapId},a.prototype.addControl=function(e,r){if(void 0===r&&e.getDefaultPosition&&(r=e.getDefaultPosition()),void 0===r&&(r="top-right"),!e||!e.onAdd)return this.fire(new t.ErrorEvent(new Error("Invalid argument to map.addControl(). Argument must be a control with onAdd and onRemove methods.")));var n=e.onAdd(this);this._controls.push(e);var a=this._controlPositions[r];return-1!==r.indexOf("bottom")?a.insertBefore(n,a.firstChild):a.appendChild(n),this},a.prototype.removeControl=function(e){if(!e||!e.onRemove)return this.fire(new t.ErrorEvent(new Error("Invalid argument to map.removeControl(). Argument must be a control with onAdd and onRemove methods.")));var r=this._controls.indexOf(e);return r>-1&&this._controls.splice(r,1),e.onRemove(this),this},a.prototype.resize=function(e){var r=this._containerDimensions(),n=r[0],a=r[1];return this._resizeCanvas(n,a),this.transform.resize(n,a),this.painter.resize(n,a),this.fire(new t.Event("movestart",e)).fire(new t.Event("move",e)).fire(new t.Event("resize",e)).fire(new t.Event("moveend",e)),this},a.prototype.getBounds=function(){return this.transform.getBounds()},a.prototype.getMaxBounds=function(){return this.transform.getMaxBounds()},a.prototype.setMaxBounds=function(e){return this.transform.setMaxBounds(t.LngLatBounds.convert(e)),this._update()},a.prototype.setMinZoom=function(t){if((t=null==t?0:t)>=0&&t<=this.transform.maxZoom)return this.transform.minZoom=t,this._update(),this.getZoom()<t&&this.setZoom(t),this;throw new Error("minZoom must be between 0 and the current maxZoom, inclusive")},a.prototype.getMinZoom=function(){return this.transform.minZoom},a.prototype.setMaxZoom=function(t){if((t=null==t?22:t)>=this.transform.minZoom)return this.transform.maxZoom=t,this._update(),this.getZoom()>t&&this.setZoom(t),this;throw new Error("maxZoom must be greater than the current minZoom")},a.prototype.getRenderWorldCopies=function(){return this.transform.renderWorldCopies},a.prototype.setRenderWorldCopies=function(t){return this.transform.renderWorldCopies=t,this._update()},a.prototype.getMaxZoom=function(){return this.transform.maxZoom},a.prototype.project=function(e){return this.transform.locationPoint(t.LngLat.convert(e))},a.prototype.unproject=function(e){return this.transform.pointLocation(t.Point.convert(e))},a.prototype.isMoving=function(){return this._moving||this.dragPan.isActive()||this.dragRotate.isActive()||this.scrollZoom.isActive()},a.prototype.isZooming=function(){return this._zooming||this.scrollZoom.isZooming()},a.prototype.isRotating=function(){return this._rotating||this.dragRotate.isActive()},a.prototype.on=function(t,e,r){var a=this;if(void 0===r)return n.prototype.on.call(this,t,e);var i=function(){var n;if("mouseenter"===t||"mouseover"===t){var i=!1;return{layer:e,listener:r,delegates:{mousemove:function(n){var o=a.getLayer(e)?a.queryRenderedFeatures(n.point,{layers:[e]}):[];o.length?i||(i=!0,r.call(a,new pn(t,a,n.originalEvent,{features:o}))):i=!1},mouseout:function(){i=!1}}}}if("mouseleave"===t||"mouseout"===t){var o=!1;return{layer:e,listener:r,delegates:{mousemove:function(n){(a.getLayer(e)?a.queryRenderedFeatures(n.point,{layers:[e]}):[]).length?o=!0:o&&(o=!1,r.call(a,new pn(t,a,n.originalEvent)))},mouseout:function(e){o&&(o=!1,r.call(a,new pn(t,a,e.originalEvent)))}}}}return{layer:e,listener:r,delegates:(n={},n[t]=function(t){var n=a.getLayer(e)?a.queryRenderedFeatures(t.point,{layers:[e]}):[];n.length&&(t.features=n,r.call(a,t),delete t.features)},n)}}();for(var o in this._delegatedListeners=this._delegatedListeners||{},this._delegatedListeners[t]=this._delegatedListeners[t]||[],this._delegatedListeners[t].push(i),i.delegates)this.on(o,i.delegates[o]);return this},a.prototype.off=function(t,e,r){if(void 0===r)return n.prototype.off.call(this,t,e);if(this._delegatedListeners&&this._delegatedListeners[t])for(var a=this._delegatedListeners[t],i=0;i<a.length;i++){var o=a[i];if(o.layer===e&&o.listener===r){for(var s in o.delegates)this.off(s,o.delegates[s]);return a.splice(i,1),this}}return this},a.prototype.queryRenderedFeatures=function(e,r){if(!this.style)return[];var n;if(void 0!==r||void 0===e||e instanceof t.Point||Array.isArray(e)||(r=e,e=void 0),r=r||{},(e=e||[[0,0],[this.transform.width,this.transform.height]])instanceof t.Point||"number"==typeof e[0])n=[t.Point.convert(e)];else{var a=t.Point.convert(e[0]),i=t.Point.convert(e[1]);n=[a,new t.Point(i.x,a.y),i,new t.Point(a.x,i.y),a]}return this.style.queryRenderedFeatures(n,r,this.transform)},a.prototype.querySourceFeatures=function(t,e){return this.style.querySourceFeatures(t,e)},a.prototype.setStyle=function(e,r){return!1!==(r=t.extend({},{localIdeographFontFamily:this._localIdeographFontFamily},r)).diff&&r.localIdeographFontFamily===this._localIdeographFontFamily&&this.style&&e?(this._diffStyle(e,r),this):(this._localIdeographFontFamily=r.localIdeographFontFamily,this._updateStyle(e,r))},a.prototype._updateStyle=function(t,e){return this.style&&(this.style.setEventedParent(null),this.style._remove()),t?(this.style=new Re(this,e||{}),this.style.setEventedParent(this,{style:this.style}),"string"==typeof t?this.style.loadURL(t):this.style.loadJSON(t),this):(delete this.style,this)},a.prototype._diffStyle=function(e,r){var n=this;if("string"==typeof e){var a=this._requestManager.normalizeStyleURL(e),i=this._requestManager.transformRequest(a,t.ResourceType.Style);t.getJSON(i,function(e,a){e?n.fire(new t.ErrorEvent(e)):a&&n._updateDiff(a,r)})}else"object"==typeof e&&this._updateDiff(e,r)},a.prototype._updateDiff=function(e,r){try{this.style.setState(e)&&this._update(!0)}catch(n){t.warnOnce("Unable to perform style diff: "+(n.message||n.error||n)+". Rebuilding the style from scratch."),this._updateStyle(e,r)}},a.prototype.getStyle=function(){if(this.style)return this.style.serialize()},a.prototype.isStyleLoaded=function(){return this.style?this.style.loaded():t.warnOnce("There is no style added to the map.")},a.prototype.addSource=function(t,e){return this.style.addSource(t,e),this._update(!0)},a.prototype.isSourceLoaded=function(e){var r=this.style&&this.style.sourceCaches[e];if(void 0!==r)return r.loaded();this.fire(new t.ErrorEvent(new Error("There is no source with ID '"+e+"'")))},a.prototype.areTilesLoaded=function(){var t=this.style&&this.style.sourceCaches;for(var e in t){var r=t[e]._tiles;for(var n in r){var a=r[n];if("loaded"!==a.state&&"errored"!==a.state)return!1}}return!0},a.prototype.addSourceType=function(t,e,r){return this.style.addSourceType(t,e,r)},a.prototype.removeSource=function(t){return this.style.removeSource(t),this._update(!0)},a.prototype.getSource=function(t){return this.style.getSource(t)},a.prototype.addImage=function(e,r,n){void 0===n&&(n={});var a=n.pixelRatio;void 0===a&&(a=1);var i=n.sdf;if(void 0===i&&(i=!1),r instanceof On){var o=t.browser.getImageData(r),s=o.width,l=o.height,c=o.data;this.style.addImage(e,{data:new t.RGBAImage({width:s,height:l},c),pixelRatio:a,sdf:i,version:0})}else{if(void 0===r.width||void 0===r.height)return this.fire(new t.ErrorEvent(new Error("Invalid arguments to map.addImage(). The second argument must be an `HTMLImageElement`, `ImageData`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`")));var u=r.width,h=r.height,f=r.data,p=r;this.style.addImage(e,{data:new t.RGBAImage({width:u,height:h},new Uint8Array(f)),pixelRatio:a,sdf:i,version:0,userImage:p}),p.onAdd&&p.onAdd(this,e)}},a.prototype.updateImage=function(e,r){var n=this.style.getImage(e);if(!n)return this.fire(new t.ErrorEvent(new Error("The map has no image with that id. If you are adding a new image use `map.addImage(...)` instead.")));var a=r instanceof On?t.browser.getImageData(r):r,i=a.width,o=a.height,s=a.data;if(void 0===i||void 0===o)return this.fire(new t.ErrorEvent(new Error("Invalid arguments to map.updateImage(). The second argument must be an `HTMLImageElement`, `ImageData`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`")));if(i!==n.data.width||o!==n.data.height)return this.fire(new t.ErrorEvent(new Error("The width and height of the updated image must be that same as the previous version of the image")));var l=!(r instanceof On);n.data.replace(s,l),this.style.updateImage(e,n)},a.prototype.hasImage=function(e){return e?!!this.style.getImage(e):(this.fire(new t.ErrorEvent(new Error("Missing required image id"))),!1)},a.prototype.removeImage=function(t){this.style.removeImage(t)},a.prototype.loadImage=function(e,r){t.getImage(this._requestManager.transformRequest(e,t.ResourceType.Image),r)},a.prototype.listImages=function(){return this.style.listImages()},a.prototype.addLayer=function(t,e){return this.style.addLayer(t,e),this._update(!0)},a.prototype.moveLayer=function(t,e){return this.style.moveLayer(t,e),this._update(!0)},a.prototype.removeLayer=function(t){return this.style.removeLayer(t),this._update(!0)},a.prototype.getLayer=function(t){return this.style.getLayer(t)},a.prototype.setFilter=function(t,e,r){return void 0===r&&(r={}),this.style.setFilter(t,e,r),this._update(!0)},a.prototype.setLayerZoomRange=function(t,e,r){return this.style.setLayerZoomRange(t,e,r),this._update(!0)},a.prototype.getFilter=function(t){return this.style.getFilter(t)},a.prototype.setPaintProperty=function(t,e,r,n){return void 0===n&&(n={}),this.style.setPaintProperty(t,e,r,n),this._update(!0)},a.prototype.getPaintProperty=function(t,e){return this.style.getPaintProperty(t,e)},a.prototype.setLayoutProperty=function(t,e,r,n){return void 0===n&&(n={}),this.style.setLayoutProperty(t,e,r,n),this._update(!0)},a.prototype.getLayoutProperty=function(t,e){return this.style.getLayoutProperty(t,e)},a.prototype.setLight=function(t,e){return void 0===e&&(e={}),this.style.setLight(t,e),this._update(!0)},a.prototype.getLight=function(){return this.style.getLight()},a.prototype.setFeatureState=function(t,e){return this.style.setFeatureState(t,e),this._update()},a.prototype.removeFeatureState=function(t,e){return this.style.removeFeatureState(t,e),this._update()},a.prototype.getFeatureState=function(t){return this.style.getFeatureState(t)},a.prototype.getContainer=function(){return this._container},a.prototype.getCanvasContainer=function(){return this._canvasContainer},a.prototype.getCanvas=function(){return this._canvas},a.prototype._containerDimensions=function(){var t=0,e=0;return this._container&&(t=this._container.clientWidth||400,e=this._container.clientHeight||300),[t,e]},a.prototype._detectMissingCSS=function(){"rgb(250, 128, 114)"!==t.window.getComputedStyle(this._missingCSSCanary).getPropertyValue("background-color")&&t.warnOnce("This page appears to be missing CSS declarations for Mapbox GL JS, which may cause the map to display incorrectly. Please ensure your page includes mapbox-gl.css, as described in https://www.mapbox.com/mapbox-gl-js/api/.")},a.prototype._setupContainer=function(){var t=this._container;t.classList.add("mapboxgl-map"),(this._missingCSSCanary=r.create("div","mapboxgl-canary",t)).style.visibility="hidden",this._detectMissingCSS();var e=this._canvasContainer=r.create("div","mapboxgl-canvas-container",t);this._interactive&&e.classList.add("mapboxgl-interactive"),this._canvas=r.create("canvas","mapboxgl-canvas",e),this._canvas.style.position="absolute",this._canvas.addEventListener("webglcontextlost",this._contextLost,!1),this._canvas.addEventListener("webglcontextrestored",this._contextRestored,!1),this._canvas.setAttribute("tabindex","0"),this._canvas.setAttribute("aria-label","Map");var n=this._containerDimensions();this._resizeCanvas(n[0],n[1]);var a=this._controlContainer=r.create("div","mapboxgl-control-container",t),i=this._controlPositions={};["top-left","top-right","bottom-left","bottom-right"].forEach(function(t){i[t]=r.create("div","mapboxgl-ctrl-"+t,a)})},a.prototype._resizeCanvas=function(e,r){var n=t.window.devicePixelRatio||1;this._canvas.width=n*e,this._canvas.height=n*r,this._canvas.style.width=e+"px",this._canvas.style.height=r+"px"},a.prototype._setupPainter=function(){var r=t.extend({},e.webGLContextAttributes,{failIfMajorPerformanceCaveat:this._failIfMajorPerformanceCaveat,preserveDrawingBuffer:this._preserveDrawingBuffer,antialias:this._antialias||!1}),n=this._canvas.getContext("webgl",r)||this._canvas.getContext("experimental-webgl",r);n?(this.painter=new on(n,this.transform),t.webpSupported.testSupport(n)):this.fire(new t.ErrorEvent(new Error("Failed to initialize WebGL")))},a.prototype._contextLost=function(e){e.preventDefault(),this._frame&&(this._frame.cancel(),this._frame=null),this.fire(new t.Event("webglcontextlost",{originalEvent:e}))},a.prototype._contextRestored=function(e){this._setupPainter(),this.resize(),this._update(),this.fire(new t.Event("webglcontextrestored",{originalEvent:e}))},a.prototype.loaded=function(){return!this._styleDirty&&!this._sourcesDirty&&!!this.style&&this.style.loaded()},a.prototype._update=function(t){return this.style?(this._styleDirty=this._styleDirty||t,this._sourcesDirty=!0,this.triggerRepaint(),this):this},a.prototype._requestRenderFrame=function(t){return this._update(),this._renderTaskQueue.add(t)},a.prototype._cancelRenderFrame=function(t){this._renderTaskQueue.remove(t)},a.prototype._render=function(){this.painter.context.setDirty(),this.painter.setBaseState(),this._renderTaskQueue.run();var e=!1;if(this.style&&this._styleDirty){this._styleDirty=!1;var r=this.transform.zoom,n=t.browser.now();this.style.zoomHistory.update(r,n);var a=new t.EvaluationParameters(r,{now:n,fadeDuration:this._fadeDuration,zoomHistory:this.style.zoomHistory,transition:this.style.getTransition()}),i=a.crossFadingFactor();1===i&&i===this._crossFadingFactor||(e=!0,this._crossFadingFactor=i),this.style.update(a)}return this.style&&this._sourcesDirty&&(this._sourcesDirty=!1,this.style._updateSources(this.transform)),this._placementDirty=this.style&&this.style._updatePlacement(this.painter.transform,this.showCollisionBoxes,this._fadeDuration,this._crossSourceCollisions),this.painter.render(this.style,{showTileBoundaries:this.showTileBoundaries,showOverdrawInspector:this._showOverdrawInspector,rotating:this.isRotating(),zooming:this.isZooming(),moving:this.isMoving(),fadeDuration:this._fadeDuration}),this.fire(new t.Event("render")),this.loaded()&&!this._loaded&&(this._loaded=!0,this.fire(new t.Event("load"))),this.style&&(this.style.hasTransitions()||e)&&(this._styleDirty=!0),this.style&&!this._placementDirty&&this.style._releaseSymbolFadeTiles(),this._sourcesDirty||this._repaint||this._styleDirty||this._placementDirty?this.triggerRepaint():!this.isMoving()&&this.loaded()&&this.fire(new t.Event("idle")),this},a.prototype.remove=function(){this._hash&&this._hash.remove();for(var e=0,r=this._controls;e<r.length;e+=1)r[e].onRemove(this);this._controls=[],this._frame&&(this._frame.cancel(),this._frame=null),this._renderTaskQueue.clear(),this.setStyle(null),void 0!==t.window&&(t.window.removeEventListener("resize",this._onWindowResize,!1),t.window.removeEventListener("online",this._onWindowOnline,!1));var n=this.painter.context.gl.getExtension("WEBGL_lose_context");n&&n.loseContext(),Rn(this._canvasContainer),Rn(this._controlContainer),Rn(this._missingCSSCanary),this._container.classList.remove("mapboxgl-map"),this.fire(new t.Event("remove"))},a.prototype.triggerRepaint=function(){var e=this;this.style&&!this._frame&&(this._frame=t.browser.frame(function(){e._frame=null,e._render()}))},a.prototype._onWindowOnline=function(){this._update()},a.prototype._onWindowResize=function(){this._trackResize&&this.resize()._update()},i.showTileBoundaries.get=function(){return!!this._showTileBoundaries},i.showTileBoundaries.set=function(t){this._showTileBoundaries!==t&&(this._showTileBoundaries=t,this._update())},i.showCollisionBoxes.get=function(){return!!this._showCollisionBoxes},i.showCollisionBoxes.set=function(t){this._showCollisionBoxes!==t&&(this._showCollisionBoxes=t,t?this.style._generateCollisionBoxes():this._update())},i.showOverdrawInspector.get=function(){return!!this._showOverdrawInspector},i.showOverdrawInspector.set=function(t){this._showOverdrawInspector!==t&&(this._showOverdrawInspector=t,this._update())},i.repaint.get=function(){return!!this._repaint},i.repaint.set=function(t){this._repaint!==t&&(this._repaint=t,this.triggerRepaint())},i.vertices.get=function(){return!!this._vertices},i.vertices.set=function(t){this._vertices=t,this._update()},a.prototype._setCacheLimits=function(e,r){t.setCacheLimits(e,r)},i.version.get=function(){return t.version},Object.defineProperties(a.prototype,i),a}(En);function Rn(t){t.parentNode&&t.parentNode.removeChild(t)}var Fn={showCompass:!0,showZoom:!0,visualizePitch:!1},Bn=function(e){var n=this;this.options=t.extend({},Fn,e),this._container=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-group"),this._container.addEventListener("contextmenu",function(t){return t.preventDefault()}),this.options.showZoom&&(t.bindAll(["_updateZoomButtons"],this),this._zoomInButton=this._createButton("mapboxgl-ctrl-icon mapboxgl-ctrl-zoom-in","Zoom in",function(){return n._map.zoomIn()}),this._zoomOutButton=this._createButton("mapboxgl-ctrl-icon mapboxgl-ctrl-zoom-out","Zoom out",function(){return n._map.zoomOut()})),this.options.showCompass&&(t.bindAll(["_rotateCompassArrow"],this),this._compass=this._createButton("mapboxgl-ctrl-icon mapboxgl-ctrl-compass","Reset bearing to north",function(){n.options.visualizePitch?n._map.resetNorthPitch():n._map.resetNorth()}),this._compassArrow=r.create("span","mapboxgl-ctrl-compass-arrow",this._compass))};function Nn(e,r,n){if(e=new t.LngLat(e.lng,e.lat),r){var a=new t.LngLat(e.lng-360,e.lat),i=new t.LngLat(e.lng+360,e.lat),o=n.locationPoint(e).distSqr(r);n.locationPoint(a).distSqr(r)<o?e=a:n.locationPoint(i).distSqr(r)<o&&(e=i)}for(;Math.abs(e.lng-n.center.lng)>180;){var s=n.locationPoint(e);if(s.x>=0&&s.y>=0&&s.x<=n.width&&s.y<=n.height)break;e.lng>n.center.lng?e.lng-=360:e.lng+=360}return e}Bn.prototype._updateZoomButtons=function(){var t=this._map.getZoom();t===this._map.getMaxZoom()?this._zoomInButton.classList.add("mapboxgl-ctrl-icon-disabled"):this._zoomInButton.classList.remove("mapboxgl-ctrl-icon-disabled"),t===this._map.getMinZoom()?this._zoomOutButton.classList.add("mapboxgl-ctrl-icon-disabled"):this._zoomOutButton.classList.remove("mapboxgl-ctrl-icon-disabled")},Bn.prototype._rotateCompassArrow=function(){var t=this.options.visualizePitch?"scale("+1/Math.pow(Math.cos(this._map.transform.pitch*(Math.PI/180)),.5)+") rotateX("+this._map.transform.pitch+"deg) rotateZ("+this._map.transform.angle*(180/Math.PI)+"deg)":"rotate("+this._map.transform.angle*(180/Math.PI)+"deg)";this._compassArrow.style.transform=t},Bn.prototype.onAdd=function(t){return this._map=t,this.options.showZoom&&(this._map.on("zoom",this._updateZoomButtons),this._updateZoomButtons()),this.options.showCompass&&(this.options.visualizePitch&&this._map.on("pitch",this._rotateCompassArrow),this._map.on("rotate",this._rotateCompassArrow),this._rotateCompassArrow(),this._handler=new xn(t,{button:"left",element:this._compass}),r.addEventListener(this._compass,"mousedown",this._handler.onMouseDown),r.addEventListener(this._compass,"touchstart",this._handler.onMouseDown,{passive:!1}),this._handler.enable()),this._container},Bn.prototype.onRemove=function(){r.remove(this._container),this.options.showZoom&&this._map.off("zoom",this._updateZoomButtons),this.options.showCompass&&(this.options.visualizePitch&&this._map.off("pitch",this._rotateCompassArrow),this._map.off("rotate",this._rotateCompassArrow),r.removeEventListener(this._compass,"mousedown",this._handler.onMouseDown),r.removeEventListener(this._compass,"touchstart",this._handler.onMouseDown,{passive:!1}),this._handler.disable(),delete this._handler),delete this._map},Bn.prototype._createButton=function(t,e,n){var a=r.create("button",t,this._container);return a.type="button",a.title=e,a.setAttribute("aria-label",e),a.addEventListener("click",n),a};var jn={center:"translate(-50%,-50%)",top:"translate(-50%,0)","top-left":"translate(0,0)","top-right":"translate(-100%,0)",bottom:"translate(-50%,-100%)","bottom-left":"translate(0,-100%)","bottom-right":"translate(-100%,-100%)",left:"translate(0,-50%)",right:"translate(-100%,-50%)"};function Vn(t,e,r){var n=t.classList;for(var a in jn)n.remove("mapboxgl-"+r+"-anchor-"+a);n.add("mapboxgl-"+r+"-anchor-"+e)}var Un,qn=function(e){function n(n,a){if(e.call(this),(n instanceof t.window.HTMLElement||a)&&(n=t.extend({element:n},a)),t.bindAll(["_update","_onMove","_onUp","_addDragHandler","_onMapClick"],this),this._anchor=n&&n.anchor||"center",this._color=n&&n.color||"#3FB1CE",this._draggable=n&&n.draggable||!1,this._state="inactive",n&&n.element)this._element=n.element,this._offset=t.Point.convert(n&&n.offset||[0,0]);else{this._defaultMarker=!0,this._element=r.create("div");var i=r.createNS("http://www.w3.org/2000/svg","svg");i.setAttributeNS(null,"display","block"),i.setAttributeNS(null,"height","41px"),i.setAttributeNS(null,"width","27px"),i.setAttributeNS(null,"viewBox","0 0 27 41");var o=r.createNS("http://www.w3.org/2000/svg","g");o.setAttributeNS(null,"stroke","none"),o.setAttributeNS(null,"stroke-width","1"),o.setAttributeNS(null,"fill","none"),o.setAttributeNS(null,"fill-rule","evenodd");var s=r.createNS("http://www.w3.org/2000/svg","g");s.setAttributeNS(null,"fill-rule","nonzero");var l=r.createNS("http://www.w3.org/2000/svg","g");l.setAttributeNS(null,"transform","translate(3.0, 29.0)"),l.setAttributeNS(null,"fill","#000000");for(var c=0,u=[{rx:"10.5",ry:"5.25002273"},{rx:"10.5",ry:"5.25002273"},{rx:"9.5",ry:"4.77275007"},{rx:"8.5",ry:"4.29549936"},{rx:"7.5",ry:"3.81822308"},{rx:"6.5",ry:"3.34094679"},{rx:"5.5",ry:"2.86367051"},{rx:"4.5",ry:"2.38636864"}];c<u.length;c+=1){var h=u[c],f=r.createNS("http://www.w3.org/2000/svg","ellipse");f.setAttributeNS(null,"opacity","0.04"),f.setAttributeNS(null,"cx","10.5"),f.setAttributeNS(null,"cy","5.80029008"),f.setAttributeNS(null,"rx",h.rx),f.setAttributeNS(null,"ry",h.ry),l.appendChild(f)}var p=r.createNS("http://www.w3.org/2000/svg","g");p.setAttributeNS(null,"fill",this._color);var d=r.createNS("http://www.w3.org/2000/svg","path");d.setAttributeNS(null,"d","M27,13.5 C27,19.074644 20.250001,27.000002 14.75,34.500002 C14.016665,35.500004 12.983335,35.500004 12.25,34.500002 C6.7499993,27.000002 0,19.222562 0,13.5 C0,6.0441559 6.0441559,0 13.5,0 C20.955844,0 27,6.0441559 27,13.5 Z"),p.appendChild(d);var g=r.createNS("http://www.w3.org/2000/svg","g");g.setAttributeNS(null,"opacity","0.25"),g.setAttributeNS(null,"fill","#000000");var v=r.createNS("http://www.w3.org/2000/svg","path");v.setAttributeNS(null,"d","M13.5,0 C6.0441559,0 0,6.0441559 0,13.5 C0,19.222562 6.7499993,27 12.25,34.5 C13,35.522727 14.016664,35.500004 14.75,34.5 C20.250001,27 27,19.074644 27,13.5 C27,6.0441559 20.955844,0 13.5,0 Z M13.5,1 C20.415404,1 26,6.584596 26,13.5 C26,15.898657 24.495584,19.181431 22.220703,22.738281 C19.945823,26.295132 16.705119,30.142167 13.943359,33.908203 C13.743445,34.180814 13.612715,34.322738 13.5,34.441406 C13.387285,34.322738 13.256555,34.180814 13.056641,33.908203 C10.284481,30.127985 7.4148684,26.314159 5.015625,22.773438 C2.6163816,19.232715 1,15.953538 1,13.5 C1,6.584596 6.584596,1 13.5,1 Z"),g.appendChild(v);var m=r.createNS("http://www.w3.org/2000/svg","g");m.setAttributeNS(null,"transform","translate(6.0, 7.0)"),m.setAttributeNS(null,"fill","#FFFFFF");var y=r.createNS("http://www.w3.org/2000/svg","g");y.setAttributeNS(null,"transform","translate(8.0, 8.0)");var x=r.createNS("http://www.w3.org/2000/svg","circle");x.setAttributeNS(null,"fill","#000000"),x.setAttributeNS(null,"opacity","0.25"),x.setAttributeNS(null,"cx","5.5"),x.setAttributeNS(null,"cy","5.5"),x.setAttributeNS(null,"r","5.4999962");var b=r.createNS("http://www.w3.org/2000/svg","circle");b.setAttributeNS(null,"fill","#FFFFFF"),b.setAttributeNS(null,"cx","5.5"),b.setAttributeNS(null,"cy","5.5"),b.setAttributeNS(null,"r","5.4999962"),y.appendChild(x),y.appendChild(b),s.appendChild(l),s.appendChild(p),s.appendChild(g),s.appendChild(m),s.appendChild(y),i.appendChild(s),this._element.appendChild(i),this._offset=t.Point.convert(n&&n.offset||[0,-14])}this._element.classList.add("mapboxgl-marker"),this._element.addEventListener("dragstart",function(t){t.preventDefault()}),Vn(this._element,this._anchor,"marker"),this._popup=null}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.addTo=function(t){return this.remove(),this._map=t,t.getCanvasContainer().appendChild(this._element),t.on("move",this._update),t.on("moveend",this._update),this.setDraggable(this._draggable),this._update(),this._map.on("click",this._onMapClick),this},n.prototype.remove=function(){return this._map&&(this._map.off("click",this._onMapClick),this._map.off("move",this._update),this._map.off("moveend",this._update),this._map.off("mousedown",this._addDragHandler),this._map.off("touchstart",this._addDragHandler),this._map.off("mouseup",this._onUp),this._map.off("touchend",this._onUp),this._map.off("mousemove",this._onMove),this._map.off("touchmove",this._onMove),delete this._map),r.remove(this._element),this._popup&&this._popup.remove(),this},n.prototype.getLngLat=function(){return this._lngLat},n.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._popup&&this._popup.setLngLat(this._lngLat),this._update(),this},n.prototype.getElement=function(){return this._element},n.prototype.setPopup=function(t){if(this._popup&&(this._popup.remove(),this._popup=null),t){if(!("offset"in t.options)){var e=Math.sqrt(Math.pow(13.5,2)/2);t.options.offset=this._defaultMarker?{top:[0,0],"top-left":[0,0],"top-right":[0,0],bottom:[0,-38.1],"bottom-left":[e,-1*(24.6+e)],"bottom-right":[-e,-1*(24.6+e)],left:[13.5,-24.6],right:[-13.5,-24.6]}:this._offset}this._popup=t,this._lngLat&&this._popup.setLngLat(this._lngLat)}return this},n.prototype._onMapClick=function(t){var e=t.originalEvent.target,r=this._element;this._popup&&(e===r||r.contains(e))&&this.togglePopup()},n.prototype.getPopup=function(){return this._popup},n.prototype.togglePopup=function(){var t=this._popup;return t?(t.isOpen()?t.remove():t.addTo(this._map),this):this},n.prototype._update=function(t){this._map&&(this._map.transform.renderWorldCopies&&(this._lngLat=Nn(this._lngLat,this._pos,this._map.transform)),this._pos=this._map.project(this._lngLat)._add(this._offset),t&&"moveend"!==t.type||(this._pos=this._pos.round()),r.setTransform(this._element,jn[this._anchor]+" translate("+this._pos.x+"px, "+this._pos.y+"px)"))},n.prototype.getOffset=function(){return this._offset},n.prototype.setOffset=function(e){return this._offset=t.Point.convert(e),this._update(),this},n.prototype._onMove=function(e){this._pos=e.point.sub(this._positionDelta),this._lngLat=this._map.unproject(this._pos),this.setLngLat(this._lngLat),this._element.style.pointerEvents="none","pending"===this._state&&(this._state="active",this.fire(new t.Event("dragstart"))),this.fire(new t.Event("drag"))},n.prototype._onUp=function(){this._element.style.pointerEvents="auto",this._positionDelta=null,this._map.off("mousemove",this._onMove),this._map.off("touchmove",this._onMove),"active"===this._state&&this.fire(new t.Event("dragend")),this._state="inactive"},n.prototype._addDragHandler=function(t){this._element.contains(t.originalEvent.target)&&(t.preventDefault(),this._positionDelta=t.point.sub(this._pos).add(this._offset),this._state="pending",this._map.on("mousemove",this._onMove),this._map.on("touchmove",this._onMove),this._map.once("mouseup",this._onUp),this._map.once("touchend",this._onUp))},n.prototype.setDraggable=function(t){return this._draggable=!!t,this._map&&(t?(this._map.on("mousedown",this._addDragHandler),this._map.on("touchstart",this._addDragHandler)):(this._map.off("mousedown",this._addDragHandler),this._map.off("touchstart",this._addDragHandler))),this},n.prototype.isDraggable=function(){return this._draggable},n}(t.Evented),Hn={positionOptions:{enableHighAccuracy:!1,maximumAge:0,timeout:6e3},fitBoundsOptions:{maxZoom:15},trackUserLocation:!1,showUserLocation:!0},Gn=function(e){function n(r){e.call(this),this.options=t.extend({},Hn,r),t.bindAll(["_onSuccess","_onError","_finish","_setupUI","_updateCamera","_updateMarker"],this)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.onAdd=function(e){var n;return this._map=e,this._container=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-group"),n=this._setupUI,void 0!==Un?n(Un):void 0!==t.window.navigator.permissions?t.window.navigator.permissions.query({name:"geolocation"}).then(function(t){Un="denied"!==t.state,n(Un)}):(Un=!!t.window.navigator.geolocation,n(Un)),this._container},n.prototype.onRemove=function(){void 0!==this._geolocationWatchID&&(t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0),this.options.showUserLocation&&this._userLocationDotMarker&&this._userLocationDotMarker.remove(),r.remove(this._container),this._map=void 0},n.prototype._onSuccess=function(e){if(this.options.trackUserLocation)switch(this._lastKnownPosition=e,this._watchState){case"WAITING_ACTIVE":case"ACTIVE_LOCK":case"ACTIVE_ERROR":this._watchState="ACTIVE_LOCK",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");break;case"BACKGROUND":case"BACKGROUND_ERROR":this._watchState="BACKGROUND",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background")}this.options.showUserLocation&&"OFF"!==this._watchState&&this._updateMarker(e),this.options.trackUserLocation&&"ACTIVE_LOCK"!==this._watchState||this._updateCamera(e),this.options.showUserLocation&&this._dotElement.classList.remove("mapboxgl-user-location-dot-stale"),this.fire(new t.Event("geolocate",e)),this._finish()},n.prototype._updateCamera=function(e){var r=new t.LngLat(e.coords.longitude,e.coords.latitude),n=e.coords.accuracy,a=this._map.getBearing(),i=t.extend({bearing:a},this.options.fitBoundsOptions);this._map.fitBounds(r.toBounds(n),i,{geolocateSource:!0})},n.prototype._updateMarker=function(t){t?this._userLocationDotMarker.setLngLat([t.coords.longitude,t.coords.latitude]).addTo(this._map):this._userLocationDotMarker.remove()},n.prototype._onError=function(e){if(this.options.trackUserLocation)if(1===e.code)this._watchState="OFF",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"),void 0!==this._geolocationWatchID&&this._clearWatch();else switch(this._watchState){case"WAITING_ACTIVE":this._watchState="ACTIVE_ERROR",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error");break;case"ACTIVE_LOCK":this._watchState="ACTIVE_ERROR",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting");break;case"BACKGROUND":this._watchState="BACKGROUND_ERROR",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background-error"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting")}"OFF"!==this._watchState&&this.options.showUserLocation&&this._dotElement.classList.add("mapboxgl-user-location-dot-stale"),this.fire(new t.Event("error",e)),this._finish()},n.prototype._finish=function(){this._timeoutId&&clearTimeout(this._timeoutId),this._timeoutId=void 0},n.prototype._setupUI=function(e){var n=this;!1!==e?(this._container.addEventListener("contextmenu",function(t){return t.preventDefault()}),this._geolocateButton=r.create("button","mapboxgl-ctrl-icon mapboxgl-ctrl-geolocate",this._container),this._geolocateButton.type="button",this._geolocateButton.setAttribute("aria-label","Geolocate"),this.options.trackUserLocation&&(this._geolocateButton.setAttribute("aria-pressed","false"),this._watchState="OFF"),this.options.showUserLocation&&(this._dotElement=r.create("div","mapboxgl-user-location-dot"),this._userLocationDotMarker=new qn(this._dotElement),this.options.trackUserLocation&&(this._watchState="OFF")),this._geolocateButton.addEventListener("click",this.trigger.bind(this)),this._setup=!0,this.options.trackUserLocation&&this._map.on("movestart",function(e){e.geolocateSource||"ACTIVE_LOCK"!==n._watchState||(n._watchState="BACKGROUND",n._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background"),n._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),n.fire(new t.Event("trackuserlocationend")))})):t.warnOnce("Geolocation support is not available, the GeolocateControl will not be visible.")},n.prototype.trigger=function(){if(!this._setup)return t.warnOnce("Geolocate control triggered before added to a map"),!1;if(this.options.trackUserLocation){switch(this._watchState){case"OFF":this._watchState="WAITING_ACTIVE",this.fire(new t.Event("trackuserlocationstart"));break;case"WAITING_ACTIVE":case"ACTIVE_LOCK":case"ACTIVE_ERROR":case"BACKGROUND_ERROR":this._watchState="OFF",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-active-error"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background-error"),this.fire(new t.Event("trackuserlocationend"));break;case"BACKGROUND":this._watchState="ACTIVE_LOCK",this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-background"),this._lastKnownPosition&&this._updateCamera(this._lastKnownPosition),this.fire(new t.Event("trackuserlocationstart"))}switch(this._watchState){case"WAITING_ACTIVE":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");break;case"ACTIVE_LOCK":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active");break;case"ACTIVE_ERROR":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-active-error");break;case"BACKGROUND":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background");break;case"BACKGROUND_ERROR":this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-background-error")}"OFF"===this._watchState&&void 0!==this._geolocationWatchID?this._clearWatch():void 0===this._geolocationWatchID&&(this._geolocateButton.classList.add("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.setAttribute("aria-pressed","true"),this._geolocationWatchID=t.window.navigator.geolocation.watchPosition(this._onSuccess,this._onError,this.options.positionOptions))}else t.window.navigator.geolocation.getCurrentPosition(this._onSuccess,this._onError,this.options.positionOptions),this._timeoutId=setTimeout(this._finish,1e4);return!0},n.prototype._clearWatch=function(){t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID=void 0,this._geolocateButton.classList.remove("mapboxgl-ctrl-geolocate-waiting"),this._geolocateButton.setAttribute("aria-pressed","false"),this.options.showUserLocation&&this._updateMarker(null)},n}(t.Evented),Yn={maxWidth:100,unit:"metric"},Wn=function(e){this.options=t.extend({},Yn,e),t.bindAll(["_onMove","setUnit"],this)};function Xn(t,e,r){var n,a,i,o,s,l,c=r&&r.maxWidth||100,u=t._container.clientHeight/2,h=(n=t.unproject([0,u]),a=t.unproject([c,u]),i=Math.PI/180,o=n.lat*i,s=a.lat*i,l=Math.sin(o)*Math.sin(s)+Math.cos(o)*Math.cos(s)*Math.cos((a.lng-n.lng)*i),6371e3*Math.acos(Math.min(l,1)));if(r&&"imperial"===r.unit){var f=3.2808*h;f>5280?Zn(e,c,f/5280,"mi"):Zn(e,c,f,"ft")}else r&&"nautical"===r.unit?Zn(e,c,h/1852,"nm"):Zn(e,c,h,"m")}function Zn(t,e,r,n){var a,i,o,s=(a=r,(i=Math.pow(10,(""+Math.floor(a)).length-1))*(o=(o=a/i)>=10?10:o>=5?5:o>=3?3:o>=2?2:o>=1?1:function(t){var e=Math.pow(10,Math.ceil(-Math.log(t)/Math.LN10));return Math.round(t*e)/e}(o))),l=s/r;"m"===n&&s>=1e3&&(s/=1e3,n="km"),t.style.width=e*l+"px",t.innerHTML=s+n}Wn.prototype.getDefaultPosition=function(){return"bottom-left"},Wn.prototype._onMove=function(){Xn(this._map,this._container,this.options)},Wn.prototype.onAdd=function(t){return this._map=t,this._container=r.create("div","mapboxgl-ctrl mapboxgl-ctrl-scale",t.getContainer()),this._map.on("move",this._onMove),this._onMove(),this._container},Wn.prototype.onRemove=function(){r.remove(this._container),this._map.off("move",this._onMove),this._map=void 0},Wn.prototype.setUnit=function(t){this.options.unit=t,Xn(this._map,this._container,this.options)};var Jn=function(e){this._fullscreen=!1,e&&e.container&&(e.container instanceof t.window.HTMLElement?this._container=e.container:t.warnOnce("Full screen control 'container' must be a DOM element.")),t.bindAll(["_onClickFullscreen","_changeIcon"],this),"onfullscreenchange"in t.window.document?this._fullscreenchange="fullscreenchange":"onmozfullscreenchange"in t.window.document?this._fullscreenchange="mozfullscreenchange":"onwebkitfullscreenchange"in t.window.document?this._fullscreenchange="webkitfullscreenchange":"onmsfullscreenchange"in t.window.document&&(this._fullscreenchange="MSFullscreenChange"),this._className="mapboxgl-ctrl"};Jn.prototype.onAdd=function(e){return this._map=e,this._container||(this._container=this._map.getContainer()),this._controlContainer=r.create("div",this._className+" mapboxgl-ctrl-group"),this._checkFullscreenSupport()?this._setupUI():(this._controlContainer.style.display="none",t.warnOnce("This device does not support fullscreen mode.")),this._controlContainer},Jn.prototype.onRemove=function(){r.remove(this._controlContainer),this._map=null,t.window.document.removeEventListener(this._fullscreenchange,this._changeIcon)},Jn.prototype._checkFullscreenSupport=function(){return!!(t.window.document.fullscreenEnabled||t.window.document.mozFullScreenEnabled||t.window.document.msFullscreenEnabled||t.window.document.webkitFullscreenEnabled)},Jn.prototype._setupUI=function(){(this._fullscreenButton=r.create("button",this._className+"-icon "+this._className+"-fullscreen",this._controlContainer)).type="button",this._updateTitle(),this._fullscreenButton.addEventListener("click",this._onClickFullscreen),t.window.document.addEventListener(this._fullscreenchange,this._changeIcon)},Jn.prototype._updateTitle=function(){var t=this._isFullscreen()?"Exit fullscreen":"Enter fullscreen";this._fullscreenButton.setAttribute("aria-label",t),this._fullscreenButton.title=t},Jn.prototype._isFullscreen=function(){return this._fullscreen},Jn.prototype._changeIcon=function(){(t.window.document.fullscreenElement||t.window.document.mozFullScreenElement||t.window.document.webkitFullscreenElement||t.window.document.msFullscreenElement)===this._container!==this._fullscreen&&(this._fullscreen=!this._fullscreen,this._fullscreenButton.classList.toggle(this._className+"-shrink"),this._fullscreenButton.classList.toggle(this._className+"-fullscreen"),this._updateTitle())},Jn.prototype._onClickFullscreen=function(){this._isFullscreen()?t.window.document.exitFullscreen?t.window.document.exitFullscreen():t.window.document.mozCancelFullScreen?t.window.document.mozCancelFullScreen():t.window.document.msExitFullscreen?t.window.document.msExitFullscreen():t.window.document.webkitCancelFullScreen&&t.window.document.webkitCancelFullScreen():this._container.requestFullscreen?this._container.requestFullscreen():this._container.mozRequestFullScreen?this._container.mozRequestFullScreen():this._container.msRequestFullscreen?this._container.msRequestFullscreen():this._container.webkitRequestFullscreen&&this._container.webkitRequestFullscreen()};var Kn={closeButton:!0,closeOnClick:!0,className:"",maxWidth:"240px"},Qn=function(e){function n(r){e.call(this),this.options=t.extend(Object.create(Kn),r),t.bindAll(["_update","_onClickClose","remove"],this)}return e&&(n.__proto__=e),n.prototype=Object.create(e&&e.prototype),n.prototype.constructor=n,n.prototype.addTo=function(e){var r=this;return this._map=e,this.options.closeOnClick&&this._map.on("click",this._onClickClose),this._map.on("remove",this.remove),this._update(),this._trackPointer?(this._map.on("mousemove",function(t){r._update(t.point)}),this._map.on("mouseup",function(t){r._update(t.point)}),this._container.classList.add("mapboxgl-popup-track-pointer"),this._map._canvasContainer.classList.add("mapboxgl-track-pointer")):this._map.on("move",this._update),this.fire(new t.Event("open")),this},n.prototype.isOpen=function(){return!!this._map},n.prototype.remove=function(){return this._content&&r.remove(this._content),this._container&&(r.remove(this._container),delete this._container),this._map&&(this._map.off("move",this._update),this._map.off("click",this._onClickClose),this._map.off("remove",this.remove),this._map.off("mousemove"),delete this._map),this.fire(new t.Event("close")),this},n.prototype.getLngLat=function(){return this._lngLat},n.prototype.setLngLat=function(e){return this._lngLat=t.LngLat.convert(e),this._pos=null,this._trackPointer=!1,this._update(),this._map&&(this._map.on("move",this._update),this._map.off("mousemove"),this._container.classList.remove("mapboxgl-popup-track-pointer"),this._map._canvasContainer.classList.remove("mapboxgl-track-pointer")),this},n.prototype.trackPointer=function(){var t=this;return this._trackPointer=!0,this._pos=null,this._map&&(this._map.off("move",this._update),this._map.on("mousemove",function(e){t._update(e.point)}),this._map.on("drag",function(e){t._update(e.point)}),this._container.classList.add("mapboxgl-popup-track-pointer"),this._map._canvasContainer.classList.add("mapboxgl-track-pointer")),this},n.prototype.getElement=function(){return this._container},n.prototype.setText=function(e){return this.setDOMContent(t.window.document.createTextNode(e))},n.prototype.setHTML=function(e){var r,n=t.window.document.createDocumentFragment(),a=t.window.document.createElement("body");for(a.innerHTML=e;r=a.firstChild;)n.appendChild(r);return this.setDOMContent(n)},n.prototype.getMaxWidth=function(){return this._container.style.maxWidth},n.prototype.setMaxWidth=function(t){return this.options.maxWidth=t,this._update(),this},n.prototype.setDOMContent=function(t){return this._createContent(),this._content.appendChild(t),this._update(),this},n.prototype._createContent=function(){this._content&&r.remove(this._content),this._content=r.create("div","mapboxgl-popup-content",this._container),this.options.closeButton&&(this._closeButton=r.create("button","mapboxgl-popup-close-button",this._content),this._closeButton.type="button",this._closeButton.setAttribute("aria-label","Close popup"),this._closeButton.innerHTML="&#215;",this._closeButton.addEventListener("click",this._onClickClose))},n.prototype._update=function(e){var n=this,a=this._lngLat||this._trackPointer;if(this._map&&a&&this._content&&(this._container||(this._container=r.create("div","mapboxgl-popup",this._map.getContainer()),this._tip=r.create("div","mapboxgl-popup-tip",this._container),this._container.appendChild(this._content),this.options.className&&this.options.className.split(" ").forEach(function(t){return n._container.classList.add(t)})),this.options.maxWidth&&this._container.style.maxWidth!==this.options.maxWidth&&(this._container.style.maxWidth=this.options.maxWidth),this._map.transform.renderWorldCopies&&!this._trackPointer&&(this._lngLat=Nn(this._lngLat,this._pos,this._map.transform)),!this._trackPointer||e)){var i=this._pos=this._trackPointer&&e?e:this._map.project(this._lngLat),o=this.options.anchor,s=function e(r){if(r){if("number"==typeof r){var n=Math.round(Math.sqrt(.5*Math.pow(r,2)));return{center:new t.Point(0,0),top:new t.Point(0,r),"top-left":new t.Point(n,n),"top-right":new t.Point(-n,n),bottom:new t.Point(0,-r),"bottom-left":new t.Point(n,-n),"bottom-right":new t.Point(-n,-n),left:new t.Point(r,0),right:new t.Point(-r,0)}}if(r instanceof t.Point||Array.isArray(r)){var a=t.Point.convert(r);return{center:a,top:a,"top-left":a,"top-right":a,bottom:a,"bottom-left":a,"bottom-right":a,left:a,right:a}}return{center:t.Point.convert(r.center||[0,0]),top:t.Point.convert(r.top||[0,0]),"top-left":t.Point.convert(r["top-left"]||[0,0]),"top-right":t.Point.convert(r["top-right"]||[0,0]),bottom:t.Point.convert(r.bottom||[0,0]),"bottom-left":t.Point.convert(r["bottom-left"]||[0,0]),"bottom-right":t.Point.convert(r["bottom-right"]||[0,0]),left:t.Point.convert(r.left||[0,0]),right:t.Point.convert(r.right||[0,0])}}return e(new t.Point(0,0))}(this.options.offset);if(!o){var l,c=this._container.offsetWidth,u=this._container.offsetHeight;l=i.y+s.bottom.y<u?["top"]:i.y>this._map.transform.height-u?["bottom"]:[],i.x<c/2?l.push("left"):i.x>this._map.transform.width-c/2&&l.push("right"),o=0===l.length?"bottom":l.join("-")}var h=i.add(s[o]).round();r.setTransform(this._container,jn[o]+" translate("+h.x+"px,"+h.y+"px)"),Vn(this._container,o,"popup")}},n.prototype._onClickClose=function(){this.remove()},n}(t.Evented),$n={version:t.version,supported:e,setRTLTextPlugin:t.setRTLTextPlugin,Map:Dn,NavigationControl:Bn,GeolocateControl:Gn,AttributionControl:Ln,ScaleControl:Wn,FullscreenControl:Jn,Popup:Qn,Marker:qn,Style:Re,LngLat:t.LngLat,LngLatBounds:t.LngLatBounds,Point:t.Point,MercatorCoordinate:t.MercatorCoordinate,Evented:t.Evented,config:t.config,get accessToken(){return t.config.ACCESS_TOKEN},set accessToken(e){t.config.ACCESS_TOKEN=e},get baseApiUrl(){return t.config.API_URL},set baseApiUrl(e){t.config.API_URL=e},get workerCount(){return It.workerCount},set workerCount(t){It.workerCount=t},get maxParallelImageRequests(){return t.config.MAX_PARALLEL_IMAGE_REQUESTS},set maxParallelImageRequests(e){t.config.MAX_PARALLEL_IMAGE_REQUESTS=e},clearStorage:function(e){t.clearTileCache(e)},workerUrl:""};return $n}),r},"object"==typeof r&&"undefined"!=typeof e?e.exports=a():(n=n||self).mapboxgl=a()},{}],428:[function(t,e,r){"use strict";e.exports=function(t){for(var e=1<<t+1,r=new Array(e),n=0;n<e;++n)r[n]=i(t,n);return r};var n=t("convex-hull");function a(t,e,r){for(var n=new Array(t),a=0;a<t;++a)n[a]=0,a===e&&(n[a]+=.5),a===r&&(n[a]+=.5);return n}function i(t,e){if(0===e||e===(1<<t+1)-1)return[];for(var r=[],i=[],o=0;o<=t;++o)if(e&1<<o){r.push(a(t,o-1,o-1)),i.push(null);for(var s=0;s<=t;++s)~e&1<<s&&(r.push(a(t,o-1,s-1)),i.push([o,s]))}var l=n(r),c=[];t:for(o=0;o<l.length;++o){var u=l[o],h=[];for(s=0;s<u.length;++s){if(!i[u[s]])continue t;h.push(i[u[s]].slice())}c.push(h)}return c}},{"convex-hull":132}],429:[function(t,e,r){var n=t("./normalize"),a=t("gl-mat4/create"),i=t("gl-mat4/clone"),o=t("gl-mat4/determinant"),s=t("gl-mat4/invert"),l=t("gl-mat4/transpose"),c={length:t("gl-vec3/length"),normalize:t("gl-vec3/normalize"),dot:t("gl-vec3/dot"),cross:t("gl-vec3/cross")},u=a(),h=a(),f=[0,0,0,0],p=[[0,0,0],[0,0,0],[0,0,0]],d=[0,0,0];function g(t,e,r,n,a){t[0]=e[0]*n+r[0]*a,t[1]=e[1]*n+r[1]*a,t[2]=e[2]*n+r[2]*a}e.exports=function(t,e,r,a,v,m){if(e||(e=[0,0,0]),r||(r=[0,0,0]),a||(a=[0,0,0]),v||(v=[0,0,0,1]),m||(m=[0,0,0,1]),!n(u,t))return!1;if(i(h,u),h[3]=0,h[7]=0,h[11]=0,h[15]=1,Math.abs(o(h)<1e-8))return!1;var y,x,b,_,w,k,T,M=u[3],A=u[7],S=u[11],E=u[12],L=u[13],C=u[14],P=u[15];if(0!==M||0!==A||0!==S){if(f[0]=M,f[1]=A,f[2]=S,f[3]=P,!s(h,h))return!1;l(h,h),y=v,b=h,_=(x=f)[0],w=x[1],k=x[2],T=x[3],y[0]=b[0]*_+b[4]*w+b[8]*k+b[12]*T,y[1]=b[1]*_+b[5]*w+b[9]*k+b[13]*T,y[2]=b[2]*_+b[6]*w+b[10]*k+b[14]*T,y[3]=b[3]*_+b[7]*w+b[11]*k+b[15]*T}else v[0]=v[1]=v[2]=0,v[3]=1;if(e[0]=E,e[1]=L,e[2]=C,function(t,e){t[0][0]=e[0],t[0][1]=e[1],t[0][2]=e[2],t[1][0]=e[4],t[1][1]=e[5],t[1][2]=e[6],t[2][0]=e[8],t[2][1]=e[9],t[2][2]=e[10]}(p,u),r[0]=c.length(p[0]),c.normalize(p[0],p[0]),a[0]=c.dot(p[0],p[1]),g(p[1],p[1],p[0],1,-a[0]),r[1]=c.length(p[1]),c.normalize(p[1],p[1]),a[0]/=r[1],a[1]=c.dot(p[0],p[2]),g(p[2],p[2],p[0],1,-a[1]),a[2]=c.dot(p[1],p[2]),g(p[2],p[2],p[1],1,-a[2]),r[2]=c.length(p[2]),c.normalize(p[2],p[2]),a[1]/=r[2],a[2]/=r[2],c.cross(d,p[1],p[2]),c.dot(p[0],d)<0)for(var O=0;O<3;O++)r[O]*=-1,p[O][0]*=-1,p[O][1]*=-1,p[O][2]*=-1;return m[0]=.5*Math.sqrt(Math.max(1+p[0][0]-p[1][1]-p[2][2],0)),m[1]=.5*Math.sqrt(Math.max(1-p[0][0]+p[1][1]-p[2][2],0)),m[2]=.5*Math.sqrt(Math.max(1-p[0][0]-p[1][1]+p[2][2],0)),m[3]=.5*Math.sqrt(Math.max(1+p[0][0]+p[1][1]+p[2][2],0)),p[2][1]>p[1][2]&&(m[0]=-m[0]),p[0][2]>p[2][0]&&(m[1]=-m[1]),p[1][0]>p[0][1]&&(m[2]=-m[2]),!0}},{"./normalize":430,"gl-mat4/clone":262,"gl-mat4/create":263,"gl-mat4/determinant":264,"gl-mat4/invert":268,"gl-mat4/transpose":279,"gl-vec3/cross":336,"gl-vec3/dot":341,"gl-vec3/length":351,"gl-vec3/normalize":358}],430:[function(t,e,r){e.exports=function(t,e){var r=e[15];if(0===r)return!1;for(var n=1/r,a=0;a<16;a++)t[a]=e[a]*n;return!0}},{}],431:[function(t,e,r){var n=t("gl-vec3/lerp"),a=t("mat4-recompose"),i=t("mat4-decompose"),o=t("gl-mat4/determinant"),s=t("quat-slerp"),l=h(),c=h(),u=h();function h(){return{translate:f(),scale:f(1),skew:f(),perspective:[0,0,0,1],quaternion:[0,0,0,1]}}function f(t){return[t||0,t||0,t||0]}e.exports=function(t,e,r,h){if(0===o(e)||0===o(r))return!1;var f=i(e,l.translate,l.scale,l.skew,l.perspective,l.quaternion),p=i(r,c.translate,c.scale,c.skew,c.perspective,c.quaternion);return!(!f||!p||(n(u.translate,l.translate,c.translate,h),n(u.skew,l.skew,c.skew,h),n(u.scale,l.scale,c.scale,h),n(u.perspective,l.perspective,c.perspective,h),s(u.quaternion,l.quaternion,c.quaternion,h),a(t,u.translate,u.scale,u.skew,u.perspective,u.quaternion),0))}},{"gl-mat4/determinant":264,"gl-vec3/lerp":352,"mat4-decompose":429,"mat4-recompose":432,"quat-slerp":484}],432:[function(t,e,r){var n={identity:t("gl-mat4/identity"),translate:t("gl-mat4/translate"),multiply:t("gl-mat4/multiply"),create:t("gl-mat4/create"),scale:t("gl-mat4/scale"),fromRotationTranslation:t("gl-mat4/fromRotationTranslation")},a=(n.create(),n.create());e.exports=function(t,e,r,i,o,s){return n.identity(t),n.fromRotationTranslation(t,s,e),t[3]=o[0],t[7]=o[1],t[11]=o[2],t[15]=o[3],n.identity(a),0!==i[2]&&(a[9]=i[2],n.multiply(t,t,a)),0!==i[1]&&(a[9]=0,a[8]=i[1],n.multiply(t,t,a)),0!==i[0]&&(a[8]=0,a[4]=i[0],n.multiply(t,t,a)),n.scale(t,t,r),t}},{"gl-mat4/create":263,"gl-mat4/fromRotationTranslation":266,"gl-mat4/identity":267,"gl-mat4/multiply":270,"gl-mat4/scale":277,"gl-mat4/translate":278}],433:[function(t,e,r){"use strict";e.exports=Math.log2||function(t){return Math.log(t)*Math.LOG2E}},{}],434:[function(t,e,r){"use strict";var n=t("binary-search-bounds"),a=t("mat4-interpolate"),i=t("gl-mat4/invert"),o=t("gl-mat4/rotateX"),s=t("gl-mat4/rotateY"),l=t("gl-mat4/rotateZ"),c=t("gl-mat4/lookAt"),u=t("gl-mat4/translate"),h=(t("gl-mat4/scale"),t("gl-vec3/normalize")),f=[0,0,0];function p(t){this._components=t.slice(),this._time=[0],this.prevMatrix=t.slice(),this.nextMatrix=t.slice(),this.computedMatrix=t.slice(),this.computedInverse=t.slice(),this.computedEye=[0,0,0],this.computedUp=[0,0,0],this.computedCenter=[0,0,0],this.computedRadius=[0],this._limits=[-1/0,1/0]}e.exports=function(t){return new p((t=t||{}).matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])};var d=p.prototype;d.recalcMatrix=function(t){var e=this._time,r=n.le(e,t),o=this.computedMatrix;if(!(r<0)){var s=this._components;if(r===e.length-1)for(var l=16*r,c=0;c<16;++c)o[c]=s[l++];else{var u=e[r+1]-e[r],f=(l=16*r,this.prevMatrix),p=!0;for(c=0;c<16;++c)f[c]=s[l++];var d=this.nextMatrix;for(c=0;c<16;++c)d[c]=s[l++],p=p&&f[c]===d[c];if(u<1e-6||p)for(c=0;c<16;++c)o[c]=f[c];else a(o,f,d,(t-e[r])/u)}var g=this.computedUp;g[0]=o[1],g[1]=o[5],g[2]=o[9],h(g,g);var v=this.computedInverse;i(v,o);var m=this.computedEye,y=v[15];m[0]=v[12]/y,m[1]=v[13]/y,m[2]=v[14]/y;var x=this.computedCenter,b=Math.exp(this.computedRadius[0]);for(c=0;c<3;++c)x[c]=m[c]-o[2+4*c]*b}},d.idle=function(t){if(!(t<this.lastT())){for(var e=this._components,r=e.length-16,n=0;n<16;++n)e.push(e[r++]);this._time.push(t)}},d.flush=function(t){var e=n.gt(this._time,t)-2;e<0||(this._time.splice(0,e),this._components.splice(0,16*e))},d.lastT=function(){return this._time[this._time.length-1]},d.lookAt=function(t,e,r,n){this.recalcMatrix(t),e=e||this.computedEye,r=r||f,n=n||this.computedUp,this.setMatrix(t,c(this.computedMatrix,e,r,n));for(var a=0,i=0;i<3;++i)a+=Math.pow(r[i]-e[i],2);a=Math.log(Math.sqrt(a)),this.computedRadius[0]=a},d.rotate=function(t,e,r,n){this.recalcMatrix(t);var a=this.computedInverse;e&&s(a,a,e),r&&o(a,a,r),n&&l(a,a,n),this.setMatrix(t,i(this.computedMatrix,a))};var g=[0,0,0];d.pan=function(t,e,r,n){g[0]=-(e||0),g[1]=-(r||0),g[2]=-(n||0),this.recalcMatrix(t);var a=this.computedInverse;u(a,a,g),this.setMatrix(t,i(a,a))},d.translate=function(t,e,r,n){g[0]=e||0,g[1]=r||0,g[2]=n||0,this.recalcMatrix(t);var a=this.computedMatrix;u(a,a,g),this.setMatrix(t,a)},d.setMatrix=function(t,e){if(!(t<this.lastT())){this._time.push(t);for(var r=0;r<16;++r)this._components.push(e[r])}},d.setDistance=function(t,e){this.computedRadius[0]=e},d.setDistanceLimits=function(t,e){var r=this._limits;r[0]=t,r[1]=e},d.getDistanceLimits=function(t){var e=this._limits;return t?(t[0]=e[0],t[1]=e[1],t):e}},{"binary-search-bounds":93,"gl-mat4/invert":268,"gl-mat4/lookAt":269,"gl-mat4/rotateX":274,"gl-mat4/rotateY":275,"gl-mat4/rotateZ":276,"gl-mat4/scale":277,"gl-mat4/translate":278,"gl-vec3/normalize":358,"mat4-interpolate":431}],435:[function(t,e,r){"use strict";e.exports=function(t){var e=t.length;if(e<3){for(var r=new Array(e),a=0;a<e;++a)r[a]=a;return 2===e&&t[0][0]===t[1][0]&&t[0][1]===t[1][1]?[0]:r}for(var i=new Array(e),a=0;a<e;++a)i[a]=a;i.sort(function(e,r){var n=t[e][0]-t[r][0];return n||t[e][1]-t[r][1]});for(var o=[i[0],i[1]],s=[i[0],i[1]],a=2;a<e;++a){for(var l=i[a],c=t[l],u=o.length;u>1&&n(t[o[u-2]],t[o[u-1]],c)<=0;)u-=1,o.pop();for(o.push(l),u=s.length;u>1&&n(t[s[u-2]],t[s[u-1]],c)>=0;)u-=1,s.pop();s.push(l)}for(var r=new Array(s.length+o.length-2),h=0,a=0,f=o.length;a<f;++a)r[h++]=o[a];for(var p=s.length-2;p>0;--p)r[h++]=s[p];return r};var n=t("robust-orientation")[3]},{"robust-orientation":508}],436:[function(t,e,r){"use strict";e.exports=function(t,e){e||(e=t,t=window);var r=0,a=0,i=0,o={shift:!1,alt:!1,control:!1,meta:!1},s=!1;function l(t){var e=!1;return"altKey"in t&&(e=e||t.altKey!==o.alt,o.alt=!!t.altKey),"shiftKey"in t&&(e=e||t.shiftKey!==o.shift,o.shift=!!t.shiftKey),"ctrlKey"in t&&(e=e||t.ctrlKey!==o.control,o.control=!!t.ctrlKey),"metaKey"in t&&(e=e||t.metaKey!==o.meta,o.meta=!!t.metaKey),e}function c(t,s){var c=n.x(s),u=n.y(s);"buttons"in s&&(t=0|s.buttons),(t!==r||c!==a||u!==i||l(s))&&(r=0|t,a=c||0,i=u||0,e&&e(r,a,i,o))}function u(t){c(0,t)}function h(){(r||a||i||o.shift||o.alt||o.meta||o.control)&&(a=i=0,r=0,o.shift=o.alt=o.control=o.meta=!1,e&&e(0,0,0,o))}function f(t){l(t)&&e&&e(r,a,i,o)}function p(t){0===n.buttons(t)?c(0,t):c(r,t)}function d(t){c(r|n.buttons(t),t)}function g(t){c(r&~n.buttons(t),t)}function v(){s||(s=!0,t.addEventListener("mousemove",p),t.addEventListener("mousedown",d),t.addEventListener("mouseup",g),t.addEventListener("mouseleave",u),t.addEventListener("mouseenter",u),t.addEventListener("mouseout",u),t.addEventListener("mouseover",u),t.addEventListener("blur",h),t.addEventListener("keyup",f),t.addEventListener("keydown",f),t.addEventListener("keypress",f),t!==window&&(window.addEventListener("blur",h),window.addEventListener("keyup",f),window.addEventListener("keydown",f),window.addEventListener("keypress",f)))}v();var m={element:t};return Object.defineProperties(m,{enabled:{get:function(){return s},set:function(e){e?v():s&&(s=!1,t.removeEventListener("mousemove",p),t.removeEventListener("mousedown",d),t.removeEventListener("mouseup",g),t.removeEventListener("mouseleave",u),t.removeEventListener("mouseenter",u),t.removeEventListener("mouseout",u),t.removeEventListener("mouseover",u),t.removeEventListener("blur",h),t.removeEventListener("keyup",f),t.removeEventListener("keydown",f),t.removeEventListener("keypress",f),t!==window&&(window.removeEventListener("blur",h),window.removeEventListener("keyup",f),window.removeEventListener("keydown",f),window.removeEventListener("keypress",f)))},enumerable:!0},buttons:{get:function(){return r},enumerable:!0},x:{get:function(){return a},enumerable:!0},y:{get:function(){return i},enumerable:!0},mods:{get:function(){return o},enumerable:!0}}),m};var n=t("mouse-event")},{"mouse-event":438}],437:[function(t,e,r){var n={left:0,top:0};e.exports=function(t,e,r){e=e||t.currentTarget||t.srcElement,Array.isArray(r)||(r=[0,0]);var a=t.clientX||0,i=t.clientY||0,o=(s=e,s===window||s===document||s===document.body?n:s.getBoundingClientRect());var s;return r[0]=a-o.left,r[1]=i-o.top,r}},{}],438:[function(t,e,r){"use strict";function n(t){return t.target||t.srcElement||window}r.buttons=function(t){if("object"==typeof t){if("buttons"in t)return t.buttons;if("which"in t){if(2===(e=t.which))return 4;if(3===e)return 2;if(e>0)return 1<<e-1}else if("button"in t){var e;if(1===(e=t.button))return 4;if(2===e)return 2;if(e>=0)return 1<<e}}return 0},r.element=n,r.x=function(t){if("object"==typeof t){if("offsetX"in t)return t.offsetX;var e=n(t).getBoundingClientRect();return t.clientX-e.left}return 0},r.y=function(t){if("object"==typeof t){if("offsetY"in t)return t.offsetY;var e=n(t).getBoundingClientRect();return t.clientY-e.top}return 0}},{}],439:[function(t,e,r){"use strict";var n=t("to-px");e.exports=function(t,e,r){"function"==typeof t&&(r=!!e,e=t,t=window);var a=n("ex",t),i=function(t){r&&t.preventDefault();var n=t.deltaX||0,i=t.deltaY||0,o=t.deltaZ||0,s=t.deltaMode,l=1;switch(s){case 1:l=a;break;case 2:l=window.innerHeight}if(i*=l,o*=l,(n*=l)||i||o)return e(n,i,o,t)};return t.addEventListener("wheel",i),i}},{"to-px":537}],440:[function(t,e,r){"use strict";var n=t("typedarray-pool");function a(t){return"a"+t}function i(t){return"d"+t}function o(t,e){return"c"+t+"_"+e}function s(t){return"s"+t}function l(t,e){return"t"+t+"_"+e}function c(t){return"o"+t}function u(t){return"x"+t}function h(t){return"p"+t}function f(t,e){return"d"+t+"_"+e}function p(t){return"i"+t}function d(t,e){return"u"+t+"_"+e}function g(t){return"b"+t}function v(t){return"y"+t}function m(t){return"e"+t}function y(t){return"v"+t}e.exports=function(t){function e(t){throw new Error("ndarray-extract-contour: "+t)}"object"!=typeof t&&e("Must specify arguments");var r=t.order;Array.isArray(r)||e("Must specify order");var A=t.arrayArguments||1;A<1&&e("Must have at least one array argument");var S=t.scalarArguments||0;S<0&&e("Scalar arg count must be > 0");"function"!=typeof t.vertex&&e("Must specify vertex creation function");"function"!=typeof t.cell&&e("Must specify cell creation function");"function"!=typeof t.phase&&e("Must specify phase function");for(var E=t.getters||[],L=new Array(A),C=0;C<A;++C)E.indexOf(C)>=0?L[C]=!0:L[C]=!1;return function(t,e,r,A,S,E){var L=E.length,C=S.length;if(C<2)throw new Error("ndarray-extract-contour: Dimension must be at least 2");for(var P="extractContour"+S.join("_"),O=[],z=[],I=[],D=0;D<L;++D)I.push(a(D));for(var D=0;D<A;++D)I.push(u(D));for(var D=0;D<C;++D)z.push(s(D)+"="+a(0)+".shape["+D+"]|0");for(var D=0;D<L;++D){z.push(i(D)+"="+a(D)+".data",c(D)+"="+a(D)+".offset|0");for(var R=0;R<C;++R)z.push(l(D,R)+"="+a(D)+".stride["+R+"]|0")}for(var D=0;D<L;++D){z.push(h(D)+"="+c(D)),z.push(o(D,0));for(var R=1;R<1<<C;++R){for(var F=[],B=0;B<C;++B)R&1<<B&&F.push("-"+l(D,B));z.push(f(D,R)+"=("+F.join("")+")|0"),z.push(o(D,R)+"=0")}}for(var D=0;D<L;++D)for(var R=0;R<C;++R){var N=[l(D,S[R])];R>0&&N.push(l(D,S[R-1])+"*"+s(S[R-1])),z.push(d(D,S[R])+"=("+N.join("-")+")|0")}for(var D=0;D<C;++D)z.push(p(D)+"=0");z.push(_+"=0");for(var j=["2"],D=C-2;D>=0;--D)j.push(s(S[D]));z.push(w+"=("+j.join("*")+")|0",b+"=mallocUint32("+w+")",x+"=mallocUint32("+w+")",k+"=0"),z.push(g(0)+"=0");for(var R=1;R<1<<C;++R){for(var V=[],U=[],B=0;B<C;++B)R&1<<B&&(0===U.length?V.push("1"):V.unshift(U.join("*"))),U.push(s(S[B]));var q="";V[0].indexOf(s(S[C-2]))<0&&(q="-");var H=M(C,R,S);z.push(m(H)+"=(-"+V.join("-")+")|0",v(H)+"=("+q+V.join("-")+")|0",g(H)+"=0")}function G(t,e){O.push("for(",p(S[t]),"=",e,";",p(S[t]),"<",s(S[t]),";","++",p(S[t]),"){")}function Y(t){for(var e=0;e<L;++e)O.push(h(e),"+=",d(e,S[t]),";");O.push("}")}function W(){for(var t=1;t<1<<C;++t)O.push(T,"=",m(t),";",m(t),"=",v(t),";",v(t),"=",T,";")}z.push(y(0)+"=0",T+"=0"),function t(e,r){if(e<0)return void function(t){for(var e=0;e<L;++e)E[e]?O.push(o(e,0),"=",i(e),".get(",h(e),");"):O.push(o(e,0),"=",i(e),"[",h(e),"];");for(var r=[],e=0;e<L;++e)r.push(o(e,0));for(var e=0;e<A;++e)r.push(u(e));O.push(g(0),"=",b,"[",k,"]=phase(",r.join(),");");for(var n=1;n<1<<C;++n)O.push(g(n),"=",b,"[",k,"+",m(n),"];");for(var a=[],n=1;n<1<<C;++n)a.push("("+g(0)+"!=="+g(n)+")");O.push("if(",a.join("||"),"){");for(var s=[],e=0;e<C;++e)s.push(p(e));for(var e=0;e<L;++e){s.push(o(e,0));for(var n=1;n<1<<C;++n)E[e]?O.push(o(e,n),"=",i(e),".get(",h(e),"+",f(e,n),");"):O.push(o(e,n),"=",i(e),"[",h(e),"+",f(e,n),"];"),s.push(o(e,n))}for(var e=0;e<1<<C;++e)s.push(g(e));for(var e=0;e<A;++e)s.push(u(e));O.push("vertex(",s.join(),");",y(0),"=",x,"[",k,"]=",_,"++;");for(var l=(1<<C)-1,c=g(l),n=0;n<C;++n)if(0==(t&~(1<<n))){for(var d=l^1<<n,v=g(d),w=[],T=d;T>0;T=T-1&d)w.push(x+"["+k+"+"+m(T)+"]");w.push(y(0));for(var T=0;T<L;++T)1&n?w.push(o(T,l),o(T,d)):w.push(o(T,d),o(T,l));1&n?w.push(c,v):w.push(v,c);for(var T=0;T<A;++T)w.push(u(T));O.push("if(",c,"!==",v,"){","face(",w.join(),")}")}O.push("}",k,"+=1;")}(r);!function(t){for(var e=t-1;e>=0;--e)G(e,0);for(var r=[],e=0;e<L;++e)E[e]?r.push(i(e)+".get("+h(e)+")"):r.push(i(e)+"["+h(e)+"]");for(var e=0;e<A;++e)r.push(u(e));O.push(b,"[",k,"++]=phase(",r.join(),");");for(var e=0;e<t;++e)Y(e);for(var n=0;n<L;++n)O.push(h(n),"+=",d(n,S[t]),";")}(e);O.push("if(",s(S[e]),">0){",p(S[e]),"=1;");t(e-1,r|1<<S[e]);for(var n=0;n<L;++n)O.push(h(n),"+=",d(n,S[e]),";");e===C-1&&(O.push(k,"=0;"),W());G(e,2);t(e-1,r);e===C-1&&(O.push("if(",p(S[C-1]),"&1){",k,"=0;}"),W());Y(e);O.push("}")}(C-1,0),O.push("freeUint32(",x,");freeUint32(",b,");");var X=["'use strict';","function ",P,"(",I.join(),"){","var ",z.join(),";",O.join(""),"}","return ",P].join("");return new Function("vertex","face","phase","mallocUint32","freeUint32",X)(t,e,r,n.mallocUint32,n.freeUint32)}(t.vertex,t.cell,t.phase,S,r,L)};var x="V",b="P",_="N",w="Q",k="X",T="T";function M(t,e,r){for(var n=0,a=0;a<t;++a)e&1<<a&&(n|=1<<r[a]);return n}},{"typedarray-pool":543}],441:[function(t,e,r){"use strict";var n=t("cwise/lib/wrapper")({args:["index","array","scalar"],pre:{body:"{}",args:[],thisVars:[],localVars:[]},body:{body:"{_inline_1_arg1_=_inline_1_arg2_.apply(void 0,_inline_1_arg0_)}",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_1_arg2_",lvalue:!1,rvalue:!0,count:1}],thisVars:[],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"cwise",blockSize:64});e.exports=function(t,e){return n(t,e),t}},{"cwise/lib/wrapper":151}],442:[function(t,e,r){"use strict";e.exports=function(t,e,r){if(Array.isArray(r)){if(r.length!==e.dimension)throw new Error("ndarray-gradient: invalid boundary conditions")}else r=n(e.dimension,"string"==typeof r?r:"clamp");if(t.dimension!==e.dimension+1)throw new Error("ndarray-gradient: output dimension must be +1 input dimension");if(t.shape[e.dimension]!==e.dimension)throw new Error("ndarray-gradient: output shape must match input shape");for(var a=0;a<e.dimension;++a)if(t.shape[a]!==e.shape[a])throw new Error("ndarray-gradient: shape mismatch");if(0===e.size)return t;if(e.dimension<=0)return t.set(0),t;return function(t){var e=t.join();if(m=o[e])return m;var r=t.length,n=["function gradient(dst,src){var s=src.shape.slice();"];function a(e){for(var a=r-e.length,i=[],o=[],s=[],l=0;l<r;++l)e.indexOf(l+1)>=0?s.push("0"):e.indexOf(-(l+1))>=0?s.push("s["+l+"]-1"):(s.push("-1"),i.push("1"),o.push("s["+l+"]-2"));var c=".lo("+i.join()+").hi("+o.join()+")";if(0===i.length&&(c=""),a>0){n.push("if(1");for(var l=0;l<r;++l)e.indexOf(l+1)>=0||e.indexOf(-(l+1))>=0||n.push("&&s[",l,"]>2");n.push("){grad",a,"(src.pick(",s.join(),")",c);for(var l=0;l<r;++l)e.indexOf(l+1)>=0||e.indexOf(-(l+1))>=0||n.push(",dst.pick(",s.join(),",",l,")",c);n.push(");")}for(var l=0;l<e.length;++l){var u=Math.abs(e[l])-1,h="dst.pick("+s.join()+","+u+")"+c;switch(t[u]){case"clamp":var f=s.slice(),p=s.slice();e[l]<0?f[u]="s["+u+"]-2":p[u]="1",0===a?n.push("if(s[",u,"]>1){dst.set(",s.join(),",",u,",0.5*(src.get(",f.join(),")-src.get(",p.join(),")))}else{dst.set(",s.join(),",",u,",0)};"):n.push("if(s[",u,"]>1){diff(",h,",src.pick(",f.join(),")",c,",src.pick(",p.join(),")",c,");}else{zero(",h,");};");break;case"mirror":0===a?n.push("dst.set(",s.join(),",",u,",0);"):n.push("zero(",h,");");break;case"wrap":var d=s.slice(),g=s.slice();e[l]<0?(d[u]="s["+u+"]-2",g[u]="0"):(d[u]="s["+u+"]-1",g[u]="1"),0===a?n.push("if(s[",u,"]>2){dst.set(",s.join(),",",u,",0.5*(src.get(",d.join(),")-src.get(",g.join(),")))}else{dst.set(",s.join(),",",u,",0)};"):n.push("if(s[",u,"]>2){diff(",h,",src.pick(",d.join(),")",c,",src.pick(",g.join(),")",c,");}else{zero(",h,");};");break;default:throw new Error("ndarray-gradient: Invalid boundary condition")}}a>0&&n.push("};")}for(var s=0;s<1<<r;++s){for(var h=[],f=0;f<r;++f)s&1<<f&&h.push(f+1);for(var p=0;p<1<<h.length;++p){for(var d=h.slice(),f=0;f<h.length;++f)p&1<<f&&(d[f]=-d[f]);a(d)}}n.push("return dst;};return gradient");for(var g=["diff","zero"],v=[l,c],s=1;s<=r;++s)g.push("grad"+s),v.push(u(s));g.push(n.join(""));var m=Function.apply(void 0,g).apply(void 0,v);return i[e]=m,m}(r)(t,e)};var n=t("dup"),a=t("cwise-compiler"),i={},o={},s={body:"",args:[],thisVars:[],localVars:[]},l=a({args:["array","array","array"],pre:s,post:s,body:{args:[{name:"out",lvalue:!0,rvalue:!1,count:1},{name:"left",lvalue:!1,rvalue:!0,count:1},{name:"right",lvalue:!1,rvalue:!0,count:1}],body:"out=0.5*(left-right)",thisVars:[],localVars:[]},funcName:"cdiff"}),c=a({args:["array"],pre:s,post:s,body:{args:[{name:"out",lvalue:!0,rvalue:!1,count:1}],body:"out=0",thisVars:[],localVars:[]},funcName:"zero"});function u(t){if(t in i)return i[t];for(var e=[],r=0;r<t;++r)e.push("out",r,"s=0.5*(inp",r,"l-inp",r,"r);");var o=["array"],l=["junk"];for(r=0;r<t;++r){o.push("array"),l.push("out"+r+"s");var c=n(t);c[r]=-1,o.push({array:0,offset:c.slice()}),c[r]=1,o.push({array:0,offset:c.slice()}),l.push("inp"+r+"l","inp"+r+"r")}return i[t]=a({args:o,pre:s,post:s,body:{body:e.join(""),args:l.map(function(t){return{name:t,lvalue:0===t.indexOf("out"),rvalue:0===t.indexOf("inp"),count:"junk"!==t|0}}),thisVars:[],localVars:[]},funcName:"fdTemplate"+t})}},{"cwise-compiler":148,dup:172}],443:[function(t,e,r){"use strict";var n=t("ndarray-warp"),a=t("gl-matrix-invert");e.exports=function(t,e,r){var i=e.dimension,o=a([],r);return n(t,e,function(t,e){for(var r=0;r<i;++r){t[r]=o[(i+1)*i+r];for(var n=0;n<i;++n)t[r]+=o[(i+1)*n+r]*e[n]}var a=o[(i+1)*(i+1)-1];for(n=0;n<i;++n)a+=o[(i+1)*n+i]*e[n];var s=1/a;for(r=0;r<i;++r)t[r]*=s;return t}),t}},{"gl-matrix-invert":280,"ndarray-warp":450}],444:[function(t,e,r){"use strict";function n(t,e){var r=Math.floor(e),n=e-r,a=0<=r&&r<t.shape[0],i=0<=r+1&&r+1<t.shape[0];return(1-n)*(a?+t.get(r):0)+n*(i?+t.get(r+1):0)}function a(t,e,r){var n=Math.floor(e),a=e-n,i=0<=n&&n<t.shape[0],o=0<=n+1&&n+1<t.shape[0],s=Math.floor(r),l=r-s,c=0<=s&&s<t.shape[1],u=0<=s+1&&s+1<t.shape[1],h=i&&c?t.get(n,s):0,f=i&&u?t.get(n,s+1):0;return(1-l)*((1-a)*h+a*(o&&c?t.get(n+1,s):0))+l*((1-a)*f+a*(o&&u?t.get(n+1,s+1):0))}function i(t,e,r,n){var a=Math.floor(e),i=e-a,o=0<=a&&a<t.shape[0],s=0<=a+1&&a+1<t.shape[0],l=Math.floor(r),c=r-l,u=0<=l&&l<t.shape[1],h=0<=l+1&&l+1<t.shape[1],f=Math.floor(n),p=n-f,d=0<=f&&f<t.shape[2],g=0<=f+1&&f+1<t.shape[2],v=o&&u&&d?t.get(a,l,f):0,m=o&&h&&d?t.get(a,l+1,f):0,y=s&&u&&d?t.get(a+1,l,f):0,x=s&&h&&d?t.get(a+1,l+1,f):0,b=o&&u&&g?t.get(a,l,f+1):0,_=o&&h&&g?t.get(a,l+1,f+1):0;return(1-p)*((1-c)*((1-i)*v+i*y)+c*((1-i)*m+i*x))+p*((1-c)*((1-i)*b+i*(s&&u&&g?t.get(a+1,l,f+1):0))+c*((1-i)*_+i*(s&&h&&g?t.get(a+1,l+1,f+1):0)))}e.exports=function(t,e,r,o){switch(t.shape.length){case 0:return 0;case 1:return n(t,e);case 2:return a(t,e,r);case 3:return i(t,e,r,o);default:return function(t){var e,r,n=0|t.shape.length,a=new Array(n),i=new Array(n),o=new Array(n),s=new Array(n);for(e=0;e<n;++e)r=+arguments[e+1],a[e]=Math.floor(r),i[e]=r-a[e],o[e]=0<=a[e]&&a[e]<t.shape[e],s[e]=0<=a[e]+1&&a[e]+1<t.shape[e];var l,c,u,h=0;t:for(e=0;e<1<<n;++e){for(c=1,u=t.offset,l=0;l<n;++l)if(e&1<<l){if(!s[l])continue t;c*=i[l],u+=t.stride[l]*(a[l]+1)}else{if(!o[l])continue t;c*=1-i[l],u+=t.stride[l]*a[l]}h+=c*t.data[u]}return h}.apply(void 0,arguments)}},e.exports.d1=n,e.exports.d2=a,e.exports.d3=i},{}],445:[function(t,e,r){"use strict";var n=t("cwise-compiler"),a={body:"",args:[],thisVars:[],localVars:[]};function i(t){if(!t)return a;for(var e=0;e<t.args.length;++e){var r=t.args[e];t.args[e]=0===e?{name:r,lvalue:!0,rvalue:!!t.rvalue,count:t.count||1}:{name:r,lvalue:!1,rvalue:!0,count:1}}return t.thisVars||(t.thisVars=[]),t.localVars||(t.localVars=[]),t}function o(t){for(var e=[],r=0;r<t.args.length;++r)e.push("a"+r);return new Function("P",["return function ",t.funcName,"_ndarrayops(",e.join(","),") {P(",e.join(","),");return a0}"].join(""))(function(t){return n({args:t.args,pre:i(t.pre),body:i(t.body),post:i(t.proc),funcName:t.funcName})}(t))}var s={add:"+",sub:"-",mul:"*",div:"/",mod:"%",band:"&",bor:"|",bxor:"^",lshift:"<<",rshift:">>",rrshift:">>>"};!function(){for(var t in s){var e=s[t];r[t]=o({args:["array","array","array"],body:{args:["a","b","c"],body:"a=b"+e+"c"},funcName:t}),r[t+"eq"]=o({args:["array","array"],body:{args:["a","b"],body:"a"+e+"=b"},rvalue:!0,funcName:t+"eq"}),r[t+"s"]=o({args:["array","array","scalar"],body:{args:["a","b","s"],body:"a=b"+e+"s"},funcName:t+"s"}),r[t+"seq"]=o({args:["array","scalar"],body:{args:["a","s"],body:"a"+e+"=s"},rvalue:!0,funcName:t+"seq"})}}();var l={not:"!",bnot:"~",neg:"-",recip:"1.0/"};!function(){for(var t in l){var e=l[t];r[t]=o({args:["array","array"],body:{args:["a","b"],body:"a="+e+"b"},funcName:t}),r[t+"eq"]=o({args:["array"],body:{args:["a"],body:"a="+e+"a"},rvalue:!0,count:2,funcName:t+"eq"})}}();var c={and:"&&",or:"||",eq:"===",neq:"!==",lt:"<",gt:">",leq:"<=",geq:">="};!function(){for(var t in c){var e=c[t];r[t]=o({args:["array","array","array"],body:{args:["a","b","c"],body:"a=b"+e+"c"},funcName:t}),r[t+"s"]=o({args:["array","array","scalar"],body:{args:["a","b","s"],body:"a=b"+e+"s"},funcName:t+"s"}),r[t+"eq"]=o({args:["array","array"],body:{args:["a","b"],body:"a=a"+e+"b"},rvalue:!0,count:2,funcName:t+"eq"}),r[t+"seq"]=o({args:["array","scalar"],body:{args:["a","s"],body:"a=a"+e+"s"},rvalue:!0,count:2,funcName:t+"seq"})}}();var u=["abs","acos","asin","atan","ceil","cos","exp","floor","log","round","sin","sqrt","tan"];!function(){for(var t=0;t<u.length;++t){var e=u[t];r[e]=o({args:["array","array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b)",thisVars:["this_f"]},funcName:e}),r[e+"eq"]=o({args:["array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a"],body:"a=this_f(a)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:e+"eq"})}}();var h=["max","min","atan2","pow"];!function(){for(var t=0;t<h.length;++t){var e=h[t];r[e]=o({args:["array","array","array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(b,c)",thisVars:["this_f"]},funcName:e}),r[e+"s"]=o({args:["array","array","scalar"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(b,c)",thisVars:["this_f"]},funcName:e+"s"}),r[e+"eq"]=o({args:["array","array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(a,b)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:e+"eq"}),r[e+"seq"]=o({args:["array","scalar"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(a,b)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:e+"seq"})}}();var f=["atan2","pow"];!function(){for(var t=0;t<f.length;++t){var e=f[t];r[e+"op"]=o({args:["array","array","array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(c,b)",thisVars:["this_f"]},funcName:e+"op"}),r[e+"ops"]=o({args:["array","array","scalar"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(c,b)",thisVars:["this_f"]},funcName:e+"ops"}),r[e+"opeq"]=o({args:["array","array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b,a)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:e+"opeq"}),r[e+"opseq"]=o({args:["array","scalar"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b,a)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:e+"opseq"})}}(),r.any=n({args:["array"],pre:a,body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:1}],body:"if(a){return true}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return false"},funcName:"any"}),r.all=n({args:["array"],pre:a,body:{args:[{name:"x",lvalue:!1,rvalue:!0,count:1}],body:"if(!x){return false}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return true"},funcName:"all"}),r.sum=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:1}],body:"this_s+=a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"sum"}),r.prod=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=1"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:1}],body:"this_s*=a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"prod"}),r.norm2squared=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:2}],body:"this_s+=a*a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norm2squared"}),r.norm2=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:2}],body:"this_s+=a*a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return Math.sqrt(this_s)"},funcName:"norm2"}),r.norminf=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:4}],body:"if(-a>this_s){this_s=-a}else if(a>this_s){this_s=a}",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norminf"}),r.norm1=n({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:3}],body:"this_s+=a<0?-a:a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norm1"}),r.sup=n({args:["array"],pre:{body:"this_h=-Infinity",args:[],thisVars:["this_h"],localVars:[]},body:{body:"if(_inline_1_arg0_>this_h)this_h=_inline_1_arg0_",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_h"],localVars:[]},post:{body:"return this_h",args:[],thisVars:["this_h"],localVars:[]}}),r.inf=n({args:["array"],pre:{body:"this_h=Infinity",args:[],thisVars:["this_h"],localVars:[]},body:{body:"if(_inline_1_arg0_<this_h)this_h=_inline_1_arg0_",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_h"],localVars:[]},post:{body:"return this_h",args:[],thisVars:["this_h"],localVars:[]}}),r.argmin=n({args:["index","array","shape"],pre:{body:"{this_v=Infinity;this_i=_inline_0_arg2_.slice(0)}",args:[{name:"_inline_0_arg0_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg1_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg2_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_i","this_v"],localVars:[]},body:{body:"{if(_inline_1_arg1_<this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_i","this_v"],localVars:["_inline_1_k"]},post:{body:"{return this_i}",args:[],thisVars:["this_i"],localVars:[]}}),r.argmax=n({args:["index","array","shape"],pre:{body:"{this_v=-Infinity;this_i=_inline_0_arg2_.slice(0)}",args:[{name:"_inline_0_arg0_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg1_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg2_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_i","this_v"],localVars:[]},body:{body:"{if(_inline_1_arg1_>this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_i","this_v"],localVars:["_inline_1_k"]},post:{body:"{return this_i}",args:[],thisVars:["this_i"],localVars:[]}}),r.random=o({args:["array"],pre:{args:[],body:"this_f=Math.random",thisVars:["this_f"]},body:{args:["a"],body:"a=this_f()",thisVars:["this_f"]},funcName:"random"}),r.assign=o({args:["array","array"],body:{args:["a","b"],body:"a=b"},funcName:"assign"}),r.assigns=o({args:["array","scalar"],body:{args:["a","b"],body:"a=b"},funcName:"assigns"}),r.equals=n({args:["array","array"],pre:a,body:{args:[{name:"x",lvalue:!1,rvalue:!0,count:1},{name:"y",lvalue:!1,rvalue:!0,count:1}],body:"if(x!==y){return false}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return true"},funcName:"equals"})},{"cwise-compiler":148}],446:[function(t,e,r){"use strict";var n=t("ndarray"),a=t("./doConvert.js");e.exports=function(t,e){for(var r=[],i=t,o=1;Array.isArray(i);)r.push(i.length),o*=i.length,i=i[0];return 0===r.length?n():(e||(e=n(new Float64Array(o),r)),a(e,t),e)}},{"./doConvert.js":447,ndarray:451}],447:[function(t,e,r){e.exports=t("cwise-compiler")({args:["array","scalar","index"],pre:{body:"{}",args:[],thisVars:[],localVars:[]},body:{body:"{\nvar _inline_1_v=_inline_1_arg1_,_inline_1_i\nfor(_inline_1_i=0;_inline_1_i<_inline_1_arg2_.length-1;++_inline_1_i) {\n_inline_1_v=_inline_1_v[_inline_1_arg2_[_inline_1_i]]\n}\n_inline_1_arg0_=_inline_1_v[_inline_1_arg2_[_inline_1_arg2_.length-1]]\n}",args:[{name:"_inline_1_arg0_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg2_",lvalue:!1,rvalue:!0,count:4}],thisVars:[],localVars:["_inline_1_i","_inline_1_v"]},post:{body:"{}",args:[],thisVars:[],localVars:[]},funcName:"convert",blockSize:64})},{"cwise-compiler":148}],448:[function(t,e,r){"use strict";var n=t("typedarray-pool"),a=32;function i(t){switch(t){case"uint8":return[n.mallocUint8,n.freeUint8];case"uint16":return[n.mallocUint16,n.freeUint16];case"uint32":return[n.mallocUint32,n.freeUint32];case"int8":return[n.mallocInt8,n.freeInt8];case"int16":return[n.mallocInt16,n.freeInt16];case"int32":return[n.mallocInt32,n.freeInt32];case"float32":return[n.mallocFloat,n.freeFloat];case"float64":return[n.mallocDouble,n.freeDouble];default:return null}}function o(t){for(var e=[],r=0;r<t;++r)e.push("s"+r);for(r=0;r<t;++r)e.push("n"+r);for(r=1;r<t;++r)e.push("d"+r);for(r=1;r<t;++r)e.push("e"+r);for(r=1;r<t;++r)e.push("f"+r);return e}e.exports=function(t,e){var r=["'use strict'"],n=["ndarraySortWrapper",t.join("d"),e].join("");r.push(["function ",n,"(",["array"].join(","),"){"].join(""));for(var s=["data=array.data,offset=array.offset|0,shape=array.shape,stride=array.stride"],l=0;l<t.length;++l)s.push(["s",l,"=stride[",l,"]|0,n",l,"=shape[",l,"]|0"].join(""));var c=new Array(t.length),u=[];for(l=0;l<t.length;++l)0!==(p=t[l])&&(0===u.length?c[p]="1":c[p]=u.join("*"),u.push("n"+p));var h=-1,f=-1;for(l=0;l<t.length;++l){var p,d=t[l];0!==d&&(h>0?s.push(["d",d,"=s",d,"-d",h,"*n",h].join("")):s.push(["d",d,"=s",d].join("")),h=d),0!=(p=t.length-1-l)&&(f>0?s.push(["e",p,"=s",p,"-e",f,"*n",f,",f",p,"=",c[p],"-f",f,"*n",f].join("")):s.push(["e",p,"=s",p,",f",p,"=",c[p]].join("")),f=p)}r.push("var "+s.join(","));var g=["0","n0-1","data","offset"].concat(o(t.length));r.push(["if(n0<=",a,"){","insertionSort(",g.join(","),")}else{","quickSort(",g.join(","),")}"].join("")),r.push("}return "+n);var v=new Function("insertionSort","quickSort",r.join("\n")),m=function(t,e){var r=["'use strict'"],n=["ndarrayInsertionSort",t.join("d"),e].join(""),a=["left","right","data","offset"].concat(o(t.length)),s=i(e),l=["i,j,cptr,ptr=left*s0+offset"];if(t.length>1){for(var c=[],u=1;u<t.length;++u)l.push("i"+u),c.push("n"+u);s?l.push("scratch=malloc("+c.join("*")+")"):l.push("scratch=new Array("+c.join("*")+")"),l.push("dptr","sptr","a","b")}else l.push("scratch");function h(t){return"generic"===e?["data.get(",t,")"].join(""):["data[",t,"]"].join("")}function f(t,r){return"generic"===e?["data.set(",t,",",r,")"].join(""):["data[",t,"]=",r].join("")}if(r.push(["function ",n,"(",a.join(","),"){var ",l.join(",")].join(""),"for(i=left+1;i<=right;++i){","j=i;ptr+=s0","cptr=ptr"),t.length>1){for(r.push("dptr=0;sptr=ptr"),u=t.length-1;u>=0;--u)0!==(p=t[u])&&r.push(["for(i",p,"=0;i",p,"<n",p,";++i",p,"){"].join(""));for(r.push("scratch[dptr++]=",h("sptr")),u=0;u<t.length;++u)0!==(p=t[u])&&r.push("sptr+=d"+p,"}");for(r.push("__g:while(j--\x3eleft){","dptr=0","sptr=cptr-s0"),u=1;u<t.length;++u)1===u&&r.push("__l:"),r.push(["for(i",u,"=0;i",u,"<n",u,";++i",u,"){"].join(""));for(r.push(["a=",h("sptr"),"\nb=scratch[dptr]\nif(a<b){break __g}\nif(a>b){break __l}"].join("")),u=t.length-1;u>=1;--u)r.push("sptr+=e"+u,"dptr+=f"+u,"}");for(r.push("dptr=cptr;sptr=cptr-s0"),u=t.length-1;u>=0;--u)0!==(p=t[u])&&r.push(["for(i",p,"=0;i",p,"<n",p,";++i",p,"){"].join(""));for(r.push(f("dptr",h("sptr"))),u=0;u<t.length;++u)0!==(p=t[u])&&r.push(["dptr+=d",p,";sptr+=d",p].join(""),"}");for(r.push("cptr-=s0\n}"),r.push("dptr=cptr;sptr=0"),u=t.length-1;u>=0;--u)0!==(p=t[u])&&r.push(["for(i",p,"=0;i",p,"<n",p,";++i",p,"){"].join(""));for(r.push(f("dptr","scratch[sptr++]")),u=0;u<t.length;++u){var p;0!==(p=t[u])&&r.push("dptr+=d"+p,"}")}}else r.push("scratch="+h("ptr"),"while((j--\x3eleft)&&("+h("cptr-s0")+">scratch)){",f("cptr",h("cptr-s0")),"cptr-=s0","}",f("cptr","scratch"));return r.push("}"),t.length>1&&s&&r.push("free(scratch)"),r.push("} return "+n),s?new Function("malloc","free",r.join("\n"))(s[0],s[1]):new Function(r.join("\n"))()}(t,e),y=function(t,e,r){var n=["'use strict'"],s=["ndarrayQuickSort",t.join("d"),e].join(""),l=["left","right","data","offset"].concat(o(t.length)),c=i(e),u=0;n.push(["function ",s,"(",l.join(","),"){"].join(""));var h=["sixth=((right-left+1)/6)|0","index1=left+sixth","index5=right-sixth","index3=(left+right)>>1","index2=index3-sixth","index4=index3+sixth","el1=index1","el2=index2","el3=index3","el4=index4","el5=index5","less=left+1","great=right-1","pivots_are_equal=true","tmp","tmp0","x","y","z","k","ptr0","ptr1","ptr2","comp_pivot1=0","comp_pivot2=0","comp=0"];if(t.length>1){for(var f=[],p=1;p<t.length;++p)f.push("n"+p),h.push("i"+p);for(p=0;p<8;++p)h.push("b_ptr"+p);h.push("ptr3","ptr4","ptr5","ptr6","ptr7","pivot_ptr","ptr_shift","elementSize="+f.join("*")),c?h.push("pivot1=malloc(elementSize)","pivot2=malloc(elementSize)"):h.push("pivot1=new Array(elementSize),pivot2=new Array(elementSize)")}else h.push("pivot1","pivot2");function d(t){return["(offset+",t,"*s0)"].join("")}function g(t){return"generic"===e?["data.get(",t,")"].join(""):["data[",t,"]"].join("")}function v(t,r){return"generic"===e?["data.set(",t,",",r,")"].join(""):["data[",t,"]=",r].join("")}function m(e,r,a){if(1===e.length)n.push("ptr0="+d(e[0]));else for(var i=0;i<e.length;++i)n.push(["b_ptr",i,"=s0*",e[i]].join(""));for(r&&n.push("pivot_ptr=0"),n.push("ptr_shift=offset"),i=t.length-1;i>=0;--i)0!==(o=t[i])&&n.push(["for(i",o,"=0;i",o,"<n",o,";++i",o,"){"].join(""));if(e.length>1)for(i=0;i<e.length;++i)n.push(["ptr",i,"=b_ptr",i,"+ptr_shift"].join(""));for(n.push(a),r&&n.push("++pivot_ptr"),i=0;i<t.length;++i){var o;0!==(o=t[i])&&(e.length>1?n.push("ptr_shift+=d"+o):n.push("ptr0+=d"+o),n.push("}"))}}function y(e,r,a,i){if(1===r.length)n.push("ptr0="+d(r[0]));else{for(var o=0;o<r.length;++o)n.push(["b_ptr",o,"=s0*",r[o]].join(""));n.push("ptr_shift=offset")}for(a&&n.push("pivot_ptr=0"),e&&n.push(e+":"),o=1;o<t.length;++o)n.push(["for(i",o,"=0;i",o,"<n",o,";++i",o,"){"].join(""));if(r.length>1)for(o=0;o<r.length;++o)n.push(["ptr",o,"=b_ptr",o,"+ptr_shift"].join(""));for(n.push(i),o=t.length-1;o>=1;--o)a&&n.push("pivot_ptr+=f"+o),r.length>1?n.push("ptr_shift+=e"+o):n.push("ptr0+=e"+o),n.push("}")}function x(){t.length>1&&c&&n.push("free(pivot1)","free(pivot2)")}function b(e,r){var a="el"+e,i="el"+r;if(t.length>1){var o="__l"+ ++u;y(o,[a,i],!1,["comp=",g("ptr0"),"-",g("ptr1"),"\n","if(comp>0){tmp0=",a,";",a,"=",i,";",i,"=tmp0;break ",o,"}\n","if(comp<0){break ",o,"}"].join(""))}else n.push(["if(",g(d(a)),">",g(d(i)),"){tmp0=",a,";",a,"=",i,";",i,"=tmp0}"].join(""))}function _(e,r){t.length>1?m([e,r],!1,v("ptr0",g("ptr1"))):n.push(v(d(e),g(d(r))))}function w(e,r,a){if(t.length>1){var i="__l"+ ++u;y(i,[r],!0,[e,"=",g("ptr0"),"-pivot",a,"[pivot_ptr]\n","if(",e,"!==0){break ",i,"}"].join(""))}else n.push([e,"=",g(d(r)),"-pivot",a].join(""))}function k(e,r){t.length>1?m([e,r],!1,["tmp=",g("ptr0"),"\n",v("ptr0",g("ptr1")),"\n",v("ptr1","tmp")].join("")):n.push(["ptr0=",d(e),"\n","ptr1=",d(r),"\n","tmp=",g("ptr0"),"\n",v("ptr0",g("ptr1")),"\n",v("ptr1","tmp")].join(""))}function T(e,r,a){t.length>1?(m([e,r,a],!1,["tmp=",g("ptr0"),"\n",v("ptr0",g("ptr1")),"\n",v("ptr1",g("ptr2")),"\n",v("ptr2","tmp")].join("")),n.push("++"+r,"--"+a)):n.push(["ptr0=",d(e),"\n","ptr1=",d(r),"\n","ptr2=",d(a),"\n","++",r,"\n","--",a,"\n","tmp=",g("ptr0"),"\n",v("ptr0",g("ptr1")),"\n",v("ptr1",g("ptr2")),"\n",v("ptr2","tmp")].join(""))}function M(t,e){k(t,e),n.push("--"+e)}function A(e,r,a){t.length>1?m([e,r],!0,[v("ptr0",g("ptr1")),"\n",v("ptr1",["pivot",a,"[pivot_ptr]"].join(""))].join("")):n.push(v(d(e),g(d(r))),v(d(r),"pivot"+a))}function S(e,r){n.push(["if((",r,"-",e,")<=",a,"){\n","insertionSort(",e,",",r,",data,offset,",o(t.length).join(","),")\n","}else{\n",s,"(",e,",",r,",data,offset,",o(t.length).join(","),")\n","}"].join(""))}function E(e,r,a){t.length>1?(n.push(["__l",++u,":while(true){"].join("")),m([e],!0,["if(",g("ptr0"),"!==pivot",r,"[pivot_ptr]){break __l",u,"}"].join("")),n.push(a,"}")):n.push(["while(",g(d(e)),"===pivot",r,"){",a,"}"].join(""))}return n.push("var "+h.join(",")),b(1,2),b(4,5),b(1,3),b(2,3),b(1,4),b(3,4),b(2,5),b(2,3),b(4,5),t.length>1?m(["el1","el2","el3","el4","el5","index1","index3","index5"],!0,["pivot1[pivot_ptr]=",g("ptr1"),"\n","pivot2[pivot_ptr]=",g("ptr3"),"\n","pivots_are_equal=pivots_are_equal&&(pivot1[pivot_ptr]===pivot2[pivot_ptr])\n","x=",g("ptr0"),"\n","y=",g("ptr2"),"\n","z=",g("ptr4"),"\n",v("ptr5","x"),"\n",v("ptr6","y"),"\n",v("ptr7","z")].join("")):n.push(["pivot1=",g(d("el2")),"\n","pivot2=",g(d("el4")),"\n","pivots_are_equal=pivot1===pivot2\n","x=",g(d("el1")),"\n","y=",g(d("el3")),"\n","z=",g(d("el5")),"\n",v(d("index1"),"x"),"\n",v(d("index3"),"y"),"\n",v(d("index5"),"z")].join("")),_("index2","left"),_("index4","right"),n.push("if(pivots_are_equal){"),n.push("for(k=less;k<=great;++k){"),w("comp","k",1),n.push("if(comp===0){continue}"),n.push("if(comp<0){"),n.push("if(k!==less){"),k("k","less"),n.push("}"),n.push("++less"),n.push("}else{"),n.push("while(true){"),w("comp","great",1),n.push("if(comp>0){"),n.push("great--"),n.push("}else if(comp<0){"),T("k","less","great"),n.push("break"),n.push("}else{"),M("k","great"),n.push("break"),n.push("}"),n.push("}"),n.push("}"),n.push("}"),n.push("}else{"),n.push("for(k=less;k<=great;++k){"),w("comp_pivot1","k",1),n.push("if(comp_pivot1<0){"),n.push("if(k!==less){"),k("k","less"),n.push("}"),n.push("++less"),n.push("}else{"),w("comp_pivot2","k",2),n.push("if(comp_pivot2>0){"),n.push("while(true){"),w("comp","great",2),n.push("if(comp>0){"),n.push("if(--great<k){break}"),n.push("continue"),n.push("}else{"),w("comp","great",1),n.push("if(comp<0){"),T("k","less","great"),n.push("}else{"),M("k","great"),n.push("}"),n.push("break"),n.push("}"),n.push("}"),n.push("}"),n.push("}"),n.push("}"),n.push("}"),A("left","(less-1)",1),A("right","(great+1)",2),S("left","(less-2)"),S("(great+2)","right"),n.push("if(pivots_are_equal){"),x(),n.push("return"),n.push("}"),n.push("if(less<index1&&great>index5){"),E("less",1,"++less"),E("great",2,"--great"),n.push("for(k=less;k<=great;++k){"),w("comp_pivot1","k",1),n.push("if(comp_pivot1===0){"),n.push("if(k!==less){"),k("k","less"),n.push("}"),n.push("++less"),n.push("}else{"),w("comp_pivot2","k",2),n.push("if(comp_pivot2===0){"),n.push("while(true){"),w("comp","great",2),n.push("if(comp===0){"),n.push("if(--great<k){break}"),n.push("continue"),n.push("}else{"),w("comp","great",1),n.push("if(comp<0){"),T("k","less","great"),n.push("}else{"),M("k","great"),n.push("}"),n.push("break"),n.push("}"),n.push("}"),n.push("}"),n.push("}"),n.push("}"),n.push("}"),x(),S("less","great"),n.push("}return "+s),t.length>1&&c?new Function("insertionSort","malloc","free",n.join("\n"))(r,c[0],c[1]):new Function("insertionSort",n.join("\n"))(r)}(t,e,m);return v(m,y)}},{"typedarray-pool":543}],449:[function(t,e,r){"use strict";var n=t("./lib/compile_sort.js"),a={};e.exports=function(t){var e=t.order,r=t.dtype,i=[e,r].join(":"),o=a[i];return o||(a[i]=o=n(e,r)),o(t),t}},{"./lib/compile_sort.js":448}],450:[function(t,e,r){"use strict";var n=t("ndarray-linear-interpolate"),a=t("cwise/lib/wrapper")({args:["index","array","scalar","scalar","scalar"],pre:{body:"{this_warped=new Array(_inline_3_arg4_)}",args:[{name:"_inline_3_arg0_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_3_arg1_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_3_arg2_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_3_arg3_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_3_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_warped"],localVars:[]},body:{body:"{_inline_4_arg2_(this_warped,_inline_4_arg0_),_inline_4_arg1_=_inline_4_arg3_.apply(void 0,this_warped)}",args:[{name:"_inline_4_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_4_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_4_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_4_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_4_arg4_",lvalue:!1,rvalue:!1,count:0}],thisVars:["this_warped"],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"warpND",blockSize:64}),i=t("cwise/lib/wrapper")({args:["index","array","scalar","scalar","scalar"],pre:{body:"{this_warped=[0]}",args:[],thisVars:["this_warped"],localVars:[]},body:{body:"{_inline_7_arg2_(this_warped,_inline_7_arg0_),_inline_7_arg1_=_inline_7_arg3_(_inline_7_arg4_,this_warped[0])}",args:[{name:"_inline_7_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_7_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_7_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_7_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_7_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_warped"],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"warp1D",blockSize:64}),o=t("cwise/lib/wrapper")({args:["index","array","scalar","scalar","scalar"],pre:{body:"{this_warped=[0,0]}",args:[],thisVars:["this_warped"],localVars:[]},body:{body:"{_inline_10_arg2_(this_warped,_inline_10_arg0_),_inline_10_arg1_=_inline_10_arg3_(_inline_10_arg4_,this_warped[0],this_warped[1])}",args:[{name:"_inline_10_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_10_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_10_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_10_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_10_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_warped"],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"warp2D",blockSize:64}),s=t("cwise/lib/wrapper")({args:["index","array","scalar","scalar","scalar"],pre:{body:"{this_warped=[0,0,0]}",args:[],thisVars:["this_warped"],localVars:[]},body:{body:"{_inline_13_arg2_(this_warped,_inline_13_arg0_),_inline_13_arg1_=_inline_13_arg3_(_inline_13_arg4_,this_warped[0],this_warped[1],this_warped[2])}",args:[{name:"_inline_13_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_13_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_13_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_13_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_13_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_warped"],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"warp3D",blockSize:64});e.exports=function(t,e,r){switch(e.shape.length){case 1:i(t,r,n.d1,e);break;case 2:o(t,r,n.d2,e);break;case 3:s(t,r,n.d3,e);break;default:a(t,r,n.bind(void 0,e),e.shape.length)}return t}},{"cwise/lib/wrapper":151,"ndarray-linear-interpolate":444}],451:[function(t,e,r){var n=t("iota-array"),a=t("is-buffer"),i="undefined"!=typeof Float64Array;function o(t,e){return t[0]-e[0]}function s(){var t,e=this.stride,r=new Array(e.length);for(t=0;t<r.length;++t)r[t]=[Math.abs(e[t]),t];r.sort(o);var n=new Array(r.length);for(t=0;t<n.length;++t)n[t]=r[t][1];return n}function l(t,e){var r=["View",e,"d",t].join("");e<0&&(r="View_Nil"+t);var a="generic"===t;if(-1===e){var i="function "+r+"(a){this.data=a;};var proto="+r+".prototype;proto.dtype='"+t+"';proto.index=function(){return -1};proto.size=0;proto.dimension=-1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function(){return new "+r+"(this.data);};proto.get=proto.set=function(){};proto.pick=function(){return null};return function construct_"+r+"(a){return new "+r+"(a);}";return new Function(i)()}if(0===e){i="function "+r+"(a,d) {this.data = a;this.offset = d};var proto="+r+".prototype;proto.dtype='"+t+"';proto.index=function(){return this.offset};proto.dimension=0;proto.size=1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function "+r+"_copy() {return new "+r+"(this.data,this.offset)};proto.pick=function "+r+"_pick(){return TrivialArray(this.data);};proto.valueOf=proto.get=function "+r+"_get(){return "+(a?"this.data.get(this.offset)":"this.data[this.offset]")+"};proto.set=function "+r+"_set(v){return "+(a?"this.data.set(this.offset,v)":"this.data[this.offset]=v")+"};return function construct_"+r+"(a,b,c,d){return new "+r+"(a,d)}";return new Function("TrivialArray",i)(c[t][0])}i=["'use strict'"];var o=n(e),l=o.map(function(t){return"i"+t}),u="this.offset+"+o.map(function(t){return"this.stride["+t+"]*i"+t}).join("+"),h=o.map(function(t){return"b"+t}).join(","),f=o.map(function(t){return"c"+t}).join(",");i.push("function "+r+"(a,"+h+","+f+",d){this.data=a","this.shape=["+h+"]","this.stride=["+f+"]","this.offset=d|0}","var proto="+r+".prototype","proto.dtype='"+t+"'","proto.dimension="+e),i.push("Object.defineProperty(proto,'size',{get:function "+r+"_size(){return "+o.map(function(t){return"this.shape["+t+"]"}).join("*"),"}})"),1===e?i.push("proto.order=[0]"):(i.push("Object.defineProperty(proto,'order',{get:"),e<4?(i.push("function "+r+"_order(){"),2===e?i.push("return (Math.abs(this.stride[0])>Math.abs(this.stride[1]))?[1,0]:[0,1]}})"):3===e&&i.push("var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);if(s0>s1){if(s1>s2){return [2,1,0];}else if(s0>s2){return [1,2,0];}else{return [1,0,2];}}else if(s0>s2){return [2,0,1];}else if(s2>s1){return [0,1,2];}else{return [0,2,1];}}})")):i.push("ORDER})")),i.push("proto.set=function "+r+"_set("+l.join(",")+",v){"),a?i.push("return this.data.set("+u+",v)}"):i.push("return this.data["+u+"]=v}"),i.push("proto.get=function "+r+"_get("+l.join(",")+"){"),a?i.push("return this.data.get("+u+")}"):i.push("return this.data["+u+"]}"),i.push("proto.index=function "+r+"_index(",l.join(),"){return "+u+"}"),i.push("proto.hi=function "+r+"_hi("+l.join(",")+"){return new "+r+"(this.data,"+o.map(function(t){return["(typeof i",t,"!=='number'||i",t,"<0)?this.shape[",t,"]:i",t,"|0"].join("")}).join(",")+","+o.map(function(t){return"this.stride["+t+"]"}).join(",")+",this.offset)}");var p=o.map(function(t){return"a"+t+"=this.shape["+t+"]"}),d=o.map(function(t){return"c"+t+"=this.stride["+t+"]"});i.push("proto.lo=function "+r+"_lo("+l.join(",")+"){var b=this.offset,d=0,"+p.join(",")+","+d.join(","));for(var g=0;g<e;++g)i.push("if(typeof i"+g+"==='number'&&i"+g+">=0){d=i"+g+"|0;b+=c"+g+"*d;a"+g+"-=d}");i.push("return new "+r+"(this.data,"+o.map(function(t){return"a"+t}).join(",")+","+o.map(function(t){return"c"+t}).join(",")+",b)}"),i.push("proto.step=function "+r+"_step("+l.join(",")+"){var "+o.map(function(t){return"a"+t+"=this.shape["+t+"]"}).join(",")+","+o.map(function(t){return"b"+t+"=this.stride["+t+"]"}).join(",")+",c=this.offset,d=0,ceil=Math.ceil");for(g=0;g<e;++g)i.push("if(typeof i"+g+"==='number'){d=i"+g+"|0;if(d<0){c+=b"+g+"*(a"+g+"-1);a"+g+"=ceil(-a"+g+"/d)}else{a"+g+"=ceil(a"+g+"/d)}b"+g+"*=d}");i.push("return new "+r+"(this.data,"+o.map(function(t){return"a"+t}).join(",")+","+o.map(function(t){return"b"+t}).join(",")+",c)}");var v=new Array(e),m=new Array(e);for(g=0;g<e;++g)v[g]="a[i"+g+"]",m[g]="b[i"+g+"]";i.push("proto.transpose=function "+r+"_transpose("+l+"){"+l.map(function(t,e){return t+"=("+t+"===undefined?"+e+":"+t+"|0)"}).join(";"),"var a=this.shape,b=this.stride;return new "+r+"(this.data,"+v.join(",")+","+m.join(",")+",this.offset)}"),i.push("proto.pick=function "+r+"_pick("+l+"){var a=[],b=[],c=this.offset");for(g=0;g<e;++g)i.push("if(typeof i"+g+"==='number'&&i"+g+">=0){c=(c+this.stride["+g+"]*i"+g+")|0}else{a.push(this.shape["+g+"]);b.push(this.stride["+g+"])}");return i.push("var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}"),i.push("return function construct_"+r+"(data,shape,stride,offset){return new "+r+"(data,"+o.map(function(t){return"shape["+t+"]"}).join(",")+","+o.map(function(t){return"stride["+t+"]"}).join(",")+",offset)}"),new Function("CTOR_LIST","ORDER",i.join("\n"))(c[t],s)}var c={float32:[],float64:[],int8:[],int16:[],int32:[],uint8:[],uint16:[],uint32:[],array:[],uint8_clamped:[],buffer:[],generic:[]};e.exports=function(t,e,r,n){if(void 0===t)return(0,c.array[0])([]);"number"==typeof t&&(t=[t]),void 0===e&&(e=[t.length]);var o=e.length;if(void 0===r){r=new Array(o);for(var s=o-1,u=1;s>=0;--s)r[s]=u,u*=e[s]}if(void 0===n)for(n=0,s=0;s<o;++s)r[s]<0&&(n-=(e[s]-1)*r[s]);for(var h=function(t){if(a(t))return"buffer";if(i)switch(Object.prototype.toString.call(t)){case"[object Float64Array]":return"float64";case"[object Float32Array]":return"float32";case"[object Int8Array]":return"int8";case"[object Int16Array]":return"int16";case"[object Int32Array]":return"int32";case"[object Uint8Array]":return"uint8";case"[object Uint16Array]":return"uint16";case"[object Uint32Array]":return"uint32";case"[object Uint8ClampedArray]":return"uint8_clamped"}return Array.isArray(t)?"array":"generic"}(t),f=c[h];f.length<=o+1;)f.push(l(h,f.length-1));return(0,f[o+1])(t,e,r,n)}},{"iota-array":417,"is-buffer":419}],452:[function(t,e,r){"use strict";var n=t("double-bits"),a=Math.pow(2,-1074),i=-1>>>0;e.exports=function(t,e){if(isNaN(t)||isNaN(e))return NaN;if(t===e)return t;if(0===t)return e<0?-a:a;var r=n.hi(t),o=n.lo(t);e>t==t>0?o===i?(r+=1,o=0):o+=1:0===o?(o=i,r-=1):o-=1;return n.pack(o,r)}},{"double-bits":169}],453:[function(t,e,r){var n=Math.PI,a=c(120);function i(t,e,r,n){return["C",t,e,r,n,r,n]}function o(t,e,r,n,a,i){return["C",t/3+2/3*r,e/3+2/3*n,a/3+2/3*r,i/3+2/3*n,a,i]}function s(t,e,r,i,o,c,u,h,f,p){if(p)k=p[0],T=p[1],_=p[2],w=p[3];else{var d=l(t,e,-o);t=d.x,e=d.y;var g=(t-(h=(d=l(h,f,-o)).x))/2,v=(e-(f=d.y))/2,m=g*g/(r*r)+v*v/(i*i);m>1&&(r*=m=Math.sqrt(m),i*=m);var y=r*r,x=i*i,b=(c==u?-1:1)*Math.sqrt(Math.abs((y*x-y*v*v-x*g*g)/(y*v*v+x*g*g)));b==1/0&&(b=1);var _=b*r*v/i+(t+h)/2,w=b*-i*g/r+(e+f)/2,k=Math.asin(((e-w)/i).toFixed(9)),T=Math.asin(((f-w)/i).toFixed(9));(k=t<_?n-k:k)<0&&(k=2*n+k),(T=h<_?n-T:T)<0&&(T=2*n+T),u&&k>T&&(k-=2*n),!u&&T>k&&(T-=2*n)}if(Math.abs(T-k)>a){var M=T,A=h,S=f;T=k+a*(u&&T>k?1:-1);var E=s(h=_+r*Math.cos(T),f=w+i*Math.sin(T),r,i,o,0,u,A,S,[T,M,_,w])}var L=Math.tan((T-k)/4),C=4/3*r*L,P=4/3*i*L,O=[2*t-(t+C*Math.sin(k)),2*e-(e-P*Math.cos(k)),h+C*Math.sin(T),f-P*Math.cos(T),h,f];if(p)return O;E&&(O=O.concat(E));for(var z=0;z<O.length;){var I=l(O[z],O[z+1],o);O[z++]=I.x,O[z++]=I.y}return O}function l(t,e,r){return{x:t*Math.cos(r)-e*Math.sin(r),y:t*Math.sin(r)+e*Math.cos(r)}}function c(t){return t*(n/180)}e.exports=function(t){for(var e,r=[],n=0,a=0,l=0,u=0,h=null,f=null,p=0,d=0,g=0,v=t.length;g<v;g++){var m=t[g],y=m[0];switch(y){case"M":l=m[1],u=m[2];break;case"A":(m=s(p,d,m[1],m[2],c(m[3]),m[4],m[5],m[6],m[7])).unshift("C"),m.length>7&&(r.push(m.splice(0,7)),m.unshift("C"));break;case"S":var x=p,b=d;"C"!=e&&"S"!=e||(x+=x-n,b+=b-a),m=["C",x,b,m[1],m[2],m[3],m[4]];break;case"T":"Q"==e||"T"==e?(h=2*p-h,f=2*d-f):(h=p,f=d),m=o(p,d,h,f,m[1],m[2]);break;case"Q":h=m[1],f=m[2],m=o(p,d,m[1],m[2],m[3],m[4]);break;case"L":m=i(p,d,m[1],m[2]);break;case"H":m=i(p,d,m[1],d);break;case"V":m=i(p,d,p,m[1]);break;case"Z":m=i(p,d,l,u)}e=y,p=m[m.length-2],d=m[m.length-1],m.length>4?(n=m[m.length-4],a=m[m.length-3]):(n=p,a=d),r.push(m)}return r}},{}],454:[function(t,e,r){r.vertexNormals=function(t,e,r){for(var n=e.length,a=new Array(n),i=void 0===r?1e-6:r,o=0;o<n;++o)a[o]=[0,0,0];for(o=0;o<t.length;++o)for(var s=t[o],l=0,c=s[s.length-1],u=s[0],h=0;h<s.length;++h){l=c,c=u,u=s[(h+1)%s.length];for(var f=e[l],p=e[c],d=e[u],g=new Array(3),v=0,m=new Array(3),y=0,x=0;x<3;++x)g[x]=f[x]-p[x],v+=g[x]*g[x],m[x]=d[x]-p[x],y+=m[x]*m[x];if(v*y>i){var b=a[c],_=1/Math.sqrt(v*y);for(x=0;x<3;++x){var w=(x+1)%3,k=(x+2)%3;b[x]+=_*(m[w]*g[k]-m[k]*g[w])}}}for(o=0;o<n;++o){b=a[o];var T=0;for(x=0;x<3;++x)T+=b[x]*b[x];if(T>i)for(_=1/Math.sqrt(T),x=0;x<3;++x)b[x]*=_;else for(x=0;x<3;++x)b[x]=0}return a},r.faceNormals=function(t,e,r){for(var n=t.length,a=new Array(n),i=void 0===r?1e-6:r,o=0;o<n;++o){for(var s=t[o],l=new Array(3),c=0;c<3;++c)l[c]=e[s[c]];var u=new Array(3),h=new Array(3);for(c=0;c<3;++c)u[c]=l[1][c]-l[0][c],h[c]=l[2][c]-l[0][c];var f=new Array(3),p=0;for(c=0;c<3;++c){var d=(c+1)%3,g=(c+2)%3;f[c]=u[d]*h[g]-u[g]*h[d],p+=f[c]*f[c]}p=p>i?1/Math.sqrt(p):0;for(c=0;c<3;++c)f[c]*=p;a[o]=f}return a}},{}],455:[function(t,e,r){"use strict";var n=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,i=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach(function(t){n[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(t){return!1}}()?Object.assign:function(t,e){for(var r,o,s=function(t){if(null==t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}(t),l=1;l<arguments.length;l++){for(var c in r=Object(arguments[l]))a.call(r,c)&&(s[c]=r[c]);if(n){o=n(r);for(var u=0;u<o.length;u++)i.call(r,o[u])&&(s[o[u]]=r[o[u]])}}return s}},{}],456:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a,i,o,s,l,c){var u=e+i+c;if(h>0){var h=Math.sqrt(u+1);t[0]=.5*(o-l)/h,t[1]=.5*(s-n)/h,t[2]=.5*(r-i)/h,t[3]=.5*h}else{var f=Math.max(e,i,c),h=Math.sqrt(2*f-u+1);e>=f?(t[0]=.5*h,t[1]=.5*(a+r)/h,t[2]=.5*(s+n)/h,t[3]=.5*(o-l)/h):i>=f?(t[0]=.5*(r+a)/h,t[1]=.5*h,t[2]=.5*(l+o)/h,t[3]=.5*(s-n)/h):(t[0]=.5*(n+s)/h,t[1]=.5*(o+l)/h,t[2]=.5*h,t[3]=.5*(r-a)/h)}return t}},{}],457:[function(t,e,r){"use strict";e.exports=function(t){var e=(t=t||{}).center||[0,0,0],r=t.rotation||[0,0,0,1],n=t.radius||1;e=[].slice.call(e,0,3),u(r=[].slice.call(r,0,4),r);var a=new h(r,e,Math.log(n));a.setDistanceLimits(t.zoomMin,t.zoomMax),("eye"in t||"up"in t)&&a.lookAt(0,t.eye,t.center,t.up);return a};var n=t("filtered-vector"),a=t("gl-mat4/lookAt"),i=t("gl-mat4/fromQuat"),o=t("gl-mat4/invert"),s=t("./lib/quatFromFrame");function l(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function c(t,e,r,n){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2)+Math.pow(n,2))}function u(t,e){var r=e[0],n=e[1],a=e[2],i=e[3],o=c(r,n,a,i);o>1e-6?(t[0]=r/o,t[1]=n/o,t[2]=a/o,t[3]=i/o):(t[0]=t[1]=t[2]=0,t[3]=1)}function h(t,e,r){this.radius=n([r]),this.center=n(e),this.rotation=n(t),this.computedRadius=this.radius.curve(0),this.computedCenter=this.center.curve(0),this.computedRotation=this.rotation.curve(0),this.computedUp=[.1,0,0],this.computedEye=[.1,0,0],this.computedMatrix=[.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.recalcMatrix(0)}var f=h.prototype;f.lastT=function(){return Math.max(this.radius.lastT(),this.center.lastT(),this.rotation.lastT())},f.recalcMatrix=function(t){this.radius.curve(t),this.center.curve(t),this.rotation.curve(t);var e=this.computedRotation;u(e,e);var r=this.computedMatrix;i(r,e);var n=this.computedCenter,a=this.computedEye,o=this.computedUp,s=Math.exp(this.computedRadius[0]);a[0]=n[0]+s*r[2],a[1]=n[1]+s*r[6],a[2]=n[2]+s*r[10],o[0]=r[1],o[1]=r[5],o[2]=r[9];for(var l=0;l<3;++l){for(var c=0,h=0;h<3;++h)c+=r[l+4*h]*a[h];r[12+l]=-c}},f.getMatrix=function(t,e){this.recalcMatrix(t);var r=this.computedMatrix;if(e){for(var n=0;n<16;++n)e[n]=r[n];return e}return r},f.idle=function(t){this.center.idle(t),this.radius.idle(t),this.rotation.idle(t)},f.flush=function(t){this.center.flush(t),this.radius.flush(t),this.rotation.flush(t)},f.pan=function(t,e,r,n){e=e||0,r=r||0,n=n||0,this.recalcMatrix(t);var a=this.computedMatrix,i=a[1],o=a[5],s=a[9],c=l(i,o,s);i/=c,o/=c,s/=c;var u=a[0],h=a[4],f=a[8],p=u*i+h*o+f*s,d=l(u-=i*p,h-=o*p,f-=s*p);u/=d,h/=d,f/=d;var g=a[2],v=a[6],m=a[10],y=g*i+v*o+m*s,x=g*u+v*h+m*f,b=l(g-=y*i+x*u,v-=y*o+x*h,m-=y*s+x*f);g/=b,v/=b,m/=b;var _=u*e+i*r,w=h*e+o*r,k=f*e+s*r;this.center.move(t,_,w,k);var T=Math.exp(this.computedRadius[0]);T=Math.max(1e-4,T+n),this.radius.set(t,Math.log(T))},f.rotate=function(t,e,r,n){this.recalcMatrix(t),e=e||0,r=r||0;var a=this.computedMatrix,i=a[0],o=a[4],s=a[8],u=a[1],h=a[5],f=a[9],p=a[2],d=a[6],g=a[10],v=e*i+r*u,m=e*o+r*h,y=e*s+r*f,x=-(d*y-g*m),b=-(g*v-p*y),_=-(p*m-d*v),w=Math.sqrt(Math.max(0,1-Math.pow(x,2)-Math.pow(b,2)-Math.pow(_,2))),k=c(x,b,_,w);k>1e-6?(x/=k,b/=k,_/=k,w/=k):(x=b=_=0,w=1);var T=this.computedRotation,M=T[0],A=T[1],S=T[2],E=T[3],L=M*w+E*x+A*_-S*b,C=A*w+E*b+S*x-M*_,P=S*w+E*_+M*b-A*x,O=E*w-M*x-A*b-S*_;if(n){x=p,b=d,_=g;var z=Math.sin(n)/l(x,b,_);x*=z,b*=z,_*=z,O=O*(w=Math.cos(e))-(L=L*w+O*x+C*_-P*b)*x-(C=C*w+O*b+P*x-L*_)*b-(P=P*w+O*_+L*b-C*x)*_}var I=c(L,C,P,O);I>1e-6?(L/=I,C/=I,P/=I,O/=I):(L=C=P=0,O=1),this.rotation.set(t,L,C,P,O)},f.lookAt=function(t,e,r,n){this.recalcMatrix(t),r=r||this.computedCenter,e=e||this.computedEye,n=n||this.computedUp;var i=this.computedMatrix;a(i,e,r,n);var o=this.computedRotation;s(o,i[0],i[1],i[2],i[4],i[5],i[6],i[8],i[9],i[10]),u(o,o),this.rotation.set(t,o[0],o[1],o[2],o[3]);for(var l=0,c=0;c<3;++c)l+=Math.pow(r[c]-e[c],2);this.radius.set(t,.5*Math.log(Math.max(l,1e-6))),this.center.set(t,r[0],r[1],r[2])},f.translate=function(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},f.setMatrix=function(t,e){var r=this.computedRotation;s(r,e[0],e[1],e[2],e[4],e[5],e[6],e[8],e[9],e[10]),u(r,r),this.rotation.set(t,r[0],r[1],r[2],r[3]);var n=this.computedMatrix;o(n,e);var a=n[15];if(Math.abs(a)>1e-6){var i=n[12]/a,l=n[13]/a,c=n[14]/a;this.recalcMatrix(t);var h=Math.exp(this.computedRadius[0]);this.center.set(t,i-n[2]*h,l-n[6]*h,c-n[10]*h),this.radius.idle(t)}else this.center.idle(t),this.radius.idle(t)},f.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},f.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},f.getDistanceLimits=function(t){var e=this.radius.bounds;return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},f.toJSON=function(){return this.recalcMatrix(this.lastT()),{center:this.computedCenter.slice(),rotation:this.computedRotation.slice(),distance:Math.log(this.computedRadius[0]),zoomMin:this.radius.bounds[0][0],zoomMax:this.radius.bounds[1][0]}},f.fromJSON=function(t){var e=this.lastT(),r=t.center;r&&this.center.set(e,r[0],r[1],r[2]);var n=t.rotation;n&&this.rotation.set(e,n[0],n[1],n[2],n[3]);var a=t.distance;a&&a>0&&this.radius.set(e,Math.log(a)),this.setDistanceLimits(t.zoomMin,t.zoomMax)}},{"./lib/quatFromFrame":456,"filtered-vector":229,"gl-mat4/fromQuat":265,"gl-mat4/invert":268,"gl-mat4/lookAt":269}],458:[function(t,e,r){"use strict";var n=t("repeat-string");e.exports=function(t,e,r){return n(r="undefined"!=typeof r?r+"":" ",e)+t}},{"repeat-string":501}],459:[function(t,e,r){"use strict";function n(t,e){if("string"!=typeof t)return[t];var r=[t];"string"==typeof e||Array.isArray(e)?e={brackets:e}:e||(e={});var n=e.brackets?Array.isArray(e.brackets)?e.brackets:[e.brackets]:["{}","[]","()"],a=e.escape||"___",i=!!e.flat;n.forEach(function(t){var e=new RegExp(["\\",t[0],"[^\\",t[0],"\\",t[1],"]*\\",t[1]].join("")),n=[];function i(e,i,o){var s=r.push(e.slice(t[0].length,-t[1].length))-1;return n.push(s),a+s+a}r.forEach(function(t,n){for(var a,o=0;t!=a;)if(a=t,t=t.replace(e,i),o++>1e4)throw Error("References have circular dependency. Please, check them.");r[n]=t}),n=n.reverse(),r=r.map(function(e){return n.forEach(function(r){e=e.replace(new RegExp("(\\"+a+r+"\\"+a+")","g"),t[0]+"$1"+t[1])}),e})});var o=new RegExp("\\"+a+"([0-9]+)\\"+a);return i?r:function t(e,r,n){for(var a,i=[],s=0;a=o.exec(e);){if(s++>1e4)throw Error("Circular references in parenthesis");i.push(e.slice(0,a.index)),i.push(t(r[a[1]],r)),e=e.slice(a.index+a[0].length)}return i.push(e),i}(r[0],r)}function a(t,e){if(e&&e.flat){var r,n=e&&e.escape||"___",a=t[0];if(!a)return"";for(var i=new RegExp("\\"+n+"([0-9]+)\\"+n),o=0;a!=r;){if(o++>1e4)throw Error("Circular references in "+t);r=a,a=a.replace(i,s)}return a}return t.reduce(function t(e,r){return Array.isArray(r)&&(r=r.reduce(t,"")),e+r},"");function s(e,r){if(null==t[r])throw Error("Reference "+r+"is undefined");return t[r]}}function i(t,e){return Array.isArray(t)?a(t,e):n(t,e)}i.parse=n,i.stringify=a,e.exports=i},{}],460:[function(t,e,r){"use strict";var n=t("pick-by-alias");e.exports=function(t){var e;arguments.length>1&&(t=arguments);"string"==typeof t?t=t.split(/\s/).map(parseFloat):"number"==typeof t&&(t=[t]);t.length&&"number"==typeof t[0]?e=1===t.length?{width:t[0],height:t[0],x:0,y:0}:2===t.length?{width:t[0],height:t[1],x:0,y:0}:{x:t[0],y:t[1],width:t[2]-t[0]||0,height:t[3]-t[1]||0}:t&&(t=n(t,{left:"x l left Left",top:"y t top Top",width:"w width W Width",height:"h height W Width",bottom:"b bottom Bottom",right:"r right Right"}),e={x:t.left||0,y:t.top||0},null==t.width?t.right?e.width=t.right-e.x:e.width=0:e.width=t.width,null==t.height?t.bottom?e.height=t.bottom-e.y:e.height=0:e.height=t.height);return e}},{"pick-by-alias":466}],461:[function(t,e,r){e.exports=function(t){var e=[];return t.replace(a,function(t,r,a){var o=r.toLowerCase();for(a=function(t){var e=t.match(i);return e?e.map(Number):[]}(a),"m"==o&&a.length>2&&(e.push([r].concat(a.splice(0,2))),o="l",r="m"==r?"l":"L");;){if(a.length==n[o])return a.unshift(r),e.push(a);if(a.length<n[o])throw new Error("malformed path data");e.push([r].concat(a.splice(0,n[o])))}}),e};var n={a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},a=/([astvzqmhlc])([^astvzqmhlc]*)/gi;var i=/-?[0-9]*\.?[0-9]+(?:e[-+]?\d+)?/gi},{}],462:[function(t,e,r){e.exports=function(t,e){e||(e=[0,""]),t=String(t);var r=parseFloat(t,10);return e[0]=r,e[1]=t.match(/[\d.\-\+]*\s*(.*)/)[1]||"",e}},{}],463:[function(t,e,r){(function(t){(function(){var r,n,a,i,o,s;"undefined"!=typeof performance&&null!==performance&&performance.now?e.exports=function(){return performance.now()}:"undefined"!=typeof t&&null!==t&&t.hrtime?(e.exports=function(){return(r()-o)/1e6},n=t.hrtime,i=(r=function(){var t;return 1e9*(t=n())[0]+t[1]})(),s=1e9*t.uptime(),o=i-s):Date.now?(e.exports=function(){return Date.now()-a},a=Date.now()):(e.exports=function(){return(new Date).getTime()-a},a=(new Date).getTime())}).call(this)}).call(this,t("_process"))},{_process:483}],464:[function(t,e,r){"use strict";e.exports=function(t){var e=t.length;if(e<n){for(var r=1,i=0;i<e;++i)for(var o=0;o<i;++o)if(t[i]<t[o])r=-r;else if(t[i]===t[o])return 0;return r}for(var s=a.mallocUint8(e),i=0;i<e;++i)s[i]=0;for(var r=1,i=0;i<e;++i)if(!s[i]){var l=1;s[i]=1;for(var o=t[i];o!==i;o=t[o]){if(s[o])return a.freeUint8(s),0;l+=1,s[o]=1}1&l||(r=-r)}return a.freeUint8(s),r};var n=32,a=t("typedarray-pool")},{"typedarray-pool":543}],465:[function(t,e,r){"use strict";var n=t("typedarray-pool"),a=t("invert-permutation");r.rank=function(t){var e=t.length;switch(e){case 0:case 1:return 0;case 2:return t[1]}var r,i,o,s=n.mallocUint32(e),l=n.mallocUint32(e),c=0;for(a(t,l),o=0;o<e;++o)s[o]=t[o];for(o=e-1;o>0;--o)i=l[o],r=s[o],s[o]=s[i],s[i]=r,l[o]=l[r],l[r]=i,c=(c+r)*o;return n.freeUint32(l),n.freeUint32(s),c},r.unrank=function(t,e,r){switch(t){case 0:return r||[];case 1:return r?(r[0]=0,r):[0];case 2:return r?(e?(r[0]=0,r[1]=1):(r[0]=1,r[1]=0),r):e?[0,1]:[1,0]}var n,a,i,o=1;for((r=r||new Array(t))[0]=0,i=1;i<t;++i)r[i]=i,o=o*i|0;for(i=t-1;i>0;--i)e=e-(n=e/o|0)*o|0,o=o/i|0,a=0|r[i],r[i]=0|r[n],r[n]=0|a;return r}},{"invert-permutation":416,"typedarray-pool":543}],466:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n,i,o={};if("string"==typeof e&&(e=a(e)),Array.isArray(e)){var s={};for(i=0;i<e.length;i++)s[e[i]]=!0;e=s}for(n in e)e[n]=a(e[n]);var l={};for(n in e){var c=e[n];if(Array.isArray(c))for(i=0;i<c.length;i++){var u=c[i];if(r&&(l[u]=!0),u in t){if(o[n]=t[u],r)for(var h=i;h<c.length;h++)l[c[h]]=!0;break}}else n in t&&(e[n]&&(o[n]=t[n]),r&&(l[n]=!0))}if(r)for(n in t)l[n]||(o[n]=t[n]);return o};var n={};function a(t){return n[t]?n[t]:("string"==typeof t&&(t=n[t]=t.split(/\s*,\s*|\s+/)),t)}},{}],467:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r=0|e.length,a=t.length,i=[new Array(r),new Array(r)],o=0;o<r;++o)i[0][o]=[],i[1][o]=[];for(var o=0;o<a;++o){var s=t[o];i[0][s[0]].push(s),i[1][s[1]].push(s)}for(var l=[],o=0;o<r;++o)i[0][o].length+i[1][o].length===0&&l.push([o]);function c(t,e){var r=i[e][t[e]];r.splice(r.indexOf(t),1)}function u(t,r,a){for(var o,s,l,u=0;u<2;++u)if(i[u][r].length>0){o=i[u][r][0],l=u;break}s=o[1^l];for(var h=0;h<2;++h)for(var f=i[h][r],p=0;p<f.length;++p){var d=f[p],g=d[1^h],v=n(e[t],e[r],e[s],e[g]);v>0&&(o=d,s=g,l=h)}return a?s:(o&&c(o,l),s)}function h(t,r){var a=i[r][t][0],o=[t];c(a,r);for(var s=a[1^r];;){for(;s!==t;)o.push(s),s=u(o[o.length-2],s,!1);if(i[0][t].length+i[1][t].length===0)break;var l=o[o.length-1],h=t,f=o[1],p=u(l,h,!0);if(n(e[l],e[h],e[f],e[p])<0)break;o.push(t),s=u(l,h)}return o}function f(t,e){return e[1]===e[e.length-1]}for(var o=0;o<r;++o)for(var p=0;p<2;++p){for(var d=[];i[p][o].length>0;){i[0][o].length;var g=h(o,p);f(d,g)?d.push.apply(d,g):(d.length>0&&l.push(d),d=g)}d.length>0&&l.push(d)}return l};var n=t("compare-angle")},{"compare-angle":129}],468:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r=n(t,e.length),a=new Array(e.length),i=new Array(e.length),o=[],s=0;s<e.length;++s){var l=r[s].length;i[s]=l,a[s]=!0,l<=1&&o.push(s)}for(;o.length>0;){var c=o.pop();a[c]=!1;for(var u=r[c],s=0;s<u.length;++s){var h=u[s];0==--i[h]&&o.push(h)}}for(var f=new Array(e.length),p=[],s=0;s<e.length;++s)if(a[s]){var c=p.length;f[s]=c,p.push(e[s])}else f[s]=-1;for(var d=[],s=0;s<t.length;++s){var g=t[s];a[g[0]]&&a[g[1]]&&d.push([f[g[0]],f[g[1]]])}return[d,p]};var n=t("edges-to-adjacency-list")},{"edges-to-adjacency-list":174}],469:[function(t,e,r){"use strict";e.exports=function(t,e){var r=c(t,e);t=r[0];for(var h=(e=r[1]).length,f=(t.length,n(t,e.length)),p=0;p<h;++p)if(f[p].length%2==1)throw new Error("planar-graph-to-polyline: graph must be manifold");var d=a(t,e);for(var g=(d=d.filter(function(t){for(var r=t.length,n=[0],a=0;a<r;++a){var i=e[t[a]],l=e[t[(a+1)%r]],c=o(-i[0],i[1]),u=o(-i[0],l[1]),h=o(l[0],i[1]),f=o(l[0],l[1]);n=s(n,s(s(c,u),s(h,f)))}return n[n.length-1]>0})).length,v=new Array(g),m=new Array(g),p=0;p<g;++p){v[p]=p;var y=new Array(g),x=d[p].map(function(t){return e[t]}),b=i([x]),_=0;t:for(var w=0;w<g;++w)if(y[w]=0,p!==w){for(var k=d[w],T=k.length,M=0;M<T;++M){var A=b(e[k[M]]);if(0!==A){A<0&&(y[w]=1,_+=1);continue t}}y[w]=1,_+=1}m[p]=[_,p,y]}m.sort(function(t,e){return e[0]-t[0]});for(var p=0;p<g;++p)for(var y=m[p],S=y[1],E=y[2],w=0;w<g;++w)E[w]&&(v[w]=S);for(var L=function(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=[];return e}(g),p=0;p<g;++p)L[p].push(v[p]),L[v[p]].push(p);for(var C={},P=u(h,!1),p=0;p<g;++p)for(var k=d[p],T=k.length,w=0;w<T;++w){var O=k[w],z=k[(w+1)%T],I=Math.min(O,z)+":"+Math.max(O,z);if(I in C){var D=C[I];L[D].push(p),L[p].push(D),P[O]=P[z]=!0}else C[I]=p}function R(t){for(var e=t.length,r=0;r<e;++r)if(!P[t[r]])return!1;return!0}for(var F=[],B=u(g,-1),p=0;p<g;++p)v[p]!==p||R(d[p])?B[p]=-1:(F.push(p),B[p]=0);var r=[];for(;F.length>0;){var N=F.pop(),j=L[N];l(j,function(t,e){return t-e});var V,U=j.length,q=B[N];if(0===q){var k=d[N];V=[k]}for(var p=0;p<U;++p){var H=j[p];if(!(B[H]>=0)&&(B[H]=1^q,F.push(H),0===q)){var k=d[H];R(k)||(k.reverse(),V.push(k))}}0===q&&r.push(V)}return r};var n=t("edges-to-adjacency-list"),a=t("planar-dual"),i=t("point-in-big-polygon"),o=t("two-product"),s=t("robust-sum"),l=t("uniq"),c=t("./lib/trim-leaves");function u(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=e;return r}},{"./lib/trim-leaves":468,"edges-to-adjacency-list":174,"planar-dual":467,"point-in-big-polygon":473,"robust-sum":513,"two-product":541,uniq:545}],470:[function(t,e,r){"use strict";e.exports=t("./quad")},{"./quad":472}],471:[function(t,e,r){arguments[4][113][0].apply(r,arguments)},{dup:113}],472:[function(t,e,r){"use strict";var n=t("binary-search-bounds"),a=t("clamp"),i=t("parse-rect"),o=t("array-bounds"),s=t("pick-by-alias"),l=t("defined"),c=t("flatten-vertex-data"),u=t("is-obj"),h=t("dtype"),f=t("math-log2"),p=1073741824;function d(t,e){for(var r=e[0],n=e[1],i=1/(e[2]-r),o=1/(e[3]-n),s=new Array(t.length),l=0,c=t.length/2;l<c;l++)s[2*l]=a((t[2*l]-r)*i,0,1),s[2*l+1]=a((t[2*l+1]-n)*o,0,1);return s}e.exports=function(t,e){e||(e={}),t=c(t,"float64"),e=s(e,{bounds:"range bounds dataBox databox",maxDepth:"depth maxDepth maxdepth level maxLevel maxlevel levels",dtype:"type dtype format out dst output destination"});var r=l(e.maxDepth,255),a=l(e.bounds,o(t,2));a[0]===a[2]&&a[2]++,a[1]===a[3]&&a[3]++;var g,v=d(t,a),m=t.length>>>1;e.dtype||(e.dtype="array"),"string"==typeof e.dtype?g=new(h(e.dtype))(m):e.dtype&&(g=e.dtype,Array.isArray(g)&&(g.length=m));for(var y=0;y<m;++y)g[y]=y;var x=[],b=[],_=[],w=[];!function t(e,n,a,i,o,s){if(!i.length)return null;var l=x[o]||(x[o]=[]);var c=_[o]||(_[o]=[]);var u=b[o]||(b[o]=[]);var h=l.length;o++;if(o>r||s>p){for(var f=0;f<i.length;f++)l.push(i[f]),c.push(s),u.push(null,null,null,null);return h}l.push(i[0]);c.push(s);if(i.length<=1)return u.push(null,null,null,null),h;var d=.5*a;var g=e+d,m=n+d;var y=[],w=[],k=[],T=[];for(var M=1,A=i.length;M<A;M++){var S=i[M],E=v[2*S],L=v[2*S+1];E<g?L<m?y.push(S):w.push(S):L<m?k.push(S):T.push(S)}s<<=2;u.push(t(e,n,d,y,o,s),t(e,m,d,w,o,s+1),t(g,n,d,k,o,s+2),t(g,m,d,T,o,s+3));return h}(0,0,1,g,0,1);for(var k=0,T=0;T<x.length;T++){var M=x[T];if(g.set)g.set(M,k);else for(var A=0,S=M.length;A<S;A++)g[A+k]=M[A];var E=k+x[T].length;w[T]=[k,E],k=E}return g.range=function(){var e,r=[],o=arguments.length;for(;o--;)r[o]=arguments[o];if(u(r[r.length-1])){var c=r.pop();r.length||null==c.x&&null==c.l&&null==c.left||(r=[c],e={}),e=s(c,{level:"level maxLevel",d:"d diam diameter r radius px pxSize pixel pixelSize maxD size minSize",lod:"lod details ranges offsets"})}else e={};r.length||(r=a);var h=i.apply(void 0,r),p=[Math.min(h.x,h.x+h.width),Math.min(h.y,h.y+h.height),Math.max(h.x,h.x+h.width),Math.max(h.y,h.y+h.height)],g=p[0],v=p[1],m=p[2],y=p[3],k=d([g,v,m,y],a),T=k[0],M=k[1],A=k[2],S=k[3],E=l(e.level,x.length);if(null!=e.d){var C;"number"==typeof e.d?C=[e.d,e.d]:e.d.length&&(C=e.d),E=Math.min(Math.max(Math.ceil(-f(Math.abs(C[0])/(a[2]-a[0]))),Math.ceil(-f(Math.abs(C[1])/(a[3]-a[1])))),E)}if(E=Math.min(E,x.length),e.lod)return function(t,e,r,a,i){for(var o=[],s=0;s<i;s++){var l=_[s],c=w[s][0],u=L(t,e,s),h=L(r,a,s),f=n.ge(l,u),p=n.gt(l,h,f,l.length-1);o[s]=[f+c,p+c]}return o}(T,M,A,S,E);var P=[];return function e(r,n,a,i,o,s){if(null!==o&&null!==s){var l=r+a,c=n+a;if(!(T>l||M>c||A<r||S<n||i>=E||o===s)){var u=x[i];void 0===s&&(s=u.length);for(var h=o;h<s;h++){var f=u[h],p=t[2*f],d=t[2*f+1];p>=g&&p<=m&&d>=v&&d<=y&&P.push(f)}var _=b[i],w=_[4*o+0],k=_[4*o+1],L=_[4*o+2],C=_[4*o+3],O=function(t,e){for(var r=null,n=0;null===r;)if(r=t[4*e+n],++n>t.length)return null;return r}(_,o+1),z=.5*a,I=i+1;e(r,n,z,I,w,k||L||C||O),e(r,n+z,z,I,k,L||C||O),e(r+z,n,z,I,L,C||O),e(r+z,n+z,z,I,C,O)}}}(0,0,1,0,0,1),P},g;function L(t,e,r){for(var n=1,a=.5,i=.5,o=.5,s=0;s<r;s++)n<<=2,n+=t<a?e<i?0:1:e<i?2:3,o*=.5,a+=t<a?-o:o,i+=e<i?-o:o;return n}}},{"array-bounds":68,"binary-search-bounds":471,clamp:117,defined:166,dtype:171,"flatten-vertex-data":230,"is-obj":422,"math-log2":433,"parse-rect":460,"pick-by-alias":466}],473:[function(t,e,r){e.exports=function(t){for(var e=t.length,r=[],i=[],s=0;s<e;++s)for(var u=t[s],h=u.length,f=h-1,p=0;p<h;f=p++){var d=u[f],g=u[p];d[0]===g[0]?i.push([d,g]):r.push([d,g])}if(0===r.length)return 0===i.length?c:(v=l(i),function(t){return v(t[0],t[1])?0:1});var v;var m=a(r),y=function(t,e){return function(r){var a=o.le(e,r[0]);if(a<0)return 1;var i=t[a];if(!i){if(!(a>0&&e[a]===r[0]))return 1;i=t[a-1]}for(var s=1;i;){var l=i.key,c=n(r,l[0],l[1]);if(l[0][0]<l[1][0])if(c<0)i=i.left;else{if(!(c>0))return 0;s=-1,i=i.right}else if(c>0)i=i.left;else{if(!(c<0))return 0;s=1,i=i.right}}return s}}(m.slabs,m.coordinates);return 0===i.length?y:function(t,e){return function(r){return t(r[0],r[1])?0:e(r)}}(l(i),y)};var n=t("robust-orientation")[3],a=t("slab-decomposition"),i=t("interval-tree-1d"),o=t("binary-search-bounds");function s(){return!0}function l(t){for(var e={},r=0;r<t.length;++r){var n=t[r],a=n[0][0],o=n[0][1],l=n[1][1],c=[Math.min(o,l),Math.max(o,l)];a in e?e[a].push(c):e[a]=[c]}var u={},h=Object.keys(e);for(r=0;r<h.length;++r){var f=e[h[r]];u[h[r]]=i(f)}return function(t){return function(e,r){var n=t[e];return!!n&&!!n.queryPoint(r,s)}}(u)}function c(t){return 1}},{"binary-search-bounds":93,"interval-tree-1d":415,"robust-orientation":508,"slab-decomposition":524}],474:[function(t,e,r){var n,a=t("./lib/build-log"),i=t("./lib/epsilon"),o=t("./lib/intersecter"),s=t("./lib/segment-chainer"),l=t("./lib/segment-selector"),c=t("./lib/geojson"),u=!1,h=i();function f(t,e,r){var a=n.segments(t),i=n.segments(e),o=r(n.combine(a,i));return n.polygon(o)}n={buildLog:function(t){return!0===t?u=a():!1===t&&(u=!1),!1!==u&&u.list},epsilon:function(t){return h.epsilon(t)},segments:function(t){var e=o(!0,h,u);return t.regions.forEach(e.addRegion),{segments:e.calculate(t.inverted),inverted:t.inverted}},combine:function(t,e){return{combined:o(!1,h,u).calculate(t.segments,t.inverted,e.segments,e.inverted),inverted1:t.inverted,inverted2:e.inverted}},selectUnion:function(t){return{segments:l.union(t.combined,u),inverted:t.inverted1||t.inverted2}},selectIntersect:function(t){return{segments:l.intersect(t.combined,u),inverted:t.inverted1&&t.inverted2}},selectDifference:function(t){return{segments:l.difference(t.combined,u),inverted:t.inverted1&&!t.inverted2}},selectDifferenceRev:function(t){return{segments:l.differenceRev(t.combined,u),inverted:!t.inverted1&&t.inverted2}},selectXor:function(t){return{segments:l.xor(t.combined,u),inverted:t.inverted1!==t.inverted2}},polygon:function(t){return{regions:s(t.segments,h,u),inverted:t.inverted}},polygonFromGeoJSON:function(t){return c.toPolygon(n,t)},polygonToGeoJSON:function(t){return c.fromPolygon(n,h,t)},union:function(t,e){return f(t,e,n.selectUnion)},intersect:function(t,e){return f(t,e,n.selectIntersect)},difference:function(t,e){return f(t,e,n.selectDifference)},differenceRev:function(t,e){return f(t,e,n.selectDifferenceRev)},xor:function(t,e){return f(t,e,n.selectXor)}},"object"==typeof window&&(window.PolyBool=n),e.exports=n},{"./lib/build-log":475,"./lib/epsilon":476,"./lib/geojson":477,"./lib/intersecter":478,"./lib/segment-chainer":480,"./lib/segment-selector":481}],475:[function(t,e,r){e.exports=function(){var t,e=0,r=!1;function n(e,r){return t.list.push({type:e,data:r?JSON.parse(JSON.stringify(r)):void 0}),t}return t={list:[],segmentId:function(){return e++},checkIntersection:function(t,e){return n("check",{seg1:t,seg2:e})},segmentChop:function(t,e){return n("div_seg",{seg:t,pt:e}),n("chop",{seg:t,pt:e})},statusRemove:function(t){return n("pop_seg",{seg:t})},segmentUpdate:function(t){return n("seg_update",{seg:t})},segmentNew:function(t,e){return n("new_seg",{seg:t,primary:e})},segmentRemove:function(t){return n("rem_seg",{seg:t})},tempStatus:function(t,e,r){return n("temp_status",{seg:t,above:e,below:r})},rewind:function(t){return n("rewind",{seg:t})},status:function(t,e,r){return n("status",{seg:t,above:e,below:r})},vert:function(e){return e===r?t:(r=e,n("vert",{x:e}))},log:function(t){return"string"!=typeof t&&(t=JSON.stringify(t,!1," ")),n("log",{txt:t})},reset:function(){return n("reset")},selected:function(t){return n("selected",{segs:t})},chainStart:function(t){return n("chain_start",{seg:t})},chainRemoveHead:function(t,e){return n("chain_rem_head",{index:t,pt:e})},chainRemoveTail:function(t,e){return n("chain_rem_tail",{index:t,pt:e})},chainNew:function(t,e){return n("chain_new",{pt1:t,pt2:e})},chainMatch:function(t){return n("chain_match",{index:t})},chainClose:function(t){return n("chain_close",{index:t})},chainAddHead:function(t,e){return n("chain_add_head",{index:t,pt:e})},chainAddTail:function(t,e){return n("chain_add_tail",{index:t,pt:e})},chainConnect:function(t,e){return n("chain_con",{index1:t,index2:e})},chainReverse:function(t){return n("chain_rev",{index:t})},chainJoin:function(t,e){return n("chain_join",{index1:t,index2:e})},done:function(){return n("done")}}}},{}],476:[function(t,e,r){e.exports=function(t){"number"!=typeof t&&(t=1e-10);var e={epsilon:function(e){return"number"==typeof e&&(t=e),t},pointAboveOrOnLine:function(e,r,n){var a=r[0],i=r[1],o=n[0],s=n[1],l=e[0];return(o-a)*(e[1]-i)-(s-i)*(l-a)>=-t},pointBetween:function(e,r,n){var a=e[1]-r[1],i=n[0]-r[0],o=e[0]-r[0],s=n[1]-r[1],l=o*i+a*s;return!(l<t||l-(i*i+s*s)>-t)},pointsSameX:function(e,r){return Math.abs(e[0]-r[0])<t},pointsSameY:function(e,r){return Math.abs(e[1]-r[1])<t},pointsSame:function(t,r){return e.pointsSameX(t,r)&&e.pointsSameY(t,r)},pointsCompare:function(t,r){return e.pointsSameX(t,r)?e.pointsSameY(t,r)?0:t[1]<r[1]?-1:1:t[0]<r[0]?-1:1},pointsCollinear:function(e,r,n){var a=e[0]-r[0],i=e[1]-r[1],o=r[0]-n[0],s=r[1]-n[1];return Math.abs(a*s-o*i)<t},linesIntersect:function(e,r,n,a){var i=r[0]-e[0],o=r[1]-e[1],s=a[0]-n[0],l=a[1]-n[1],c=i*l-o*s;if(Math.abs(c)<t)return!1;var u=e[0]-n[0],h=e[1]-n[1],f=(s*h-l*u)/c,p=(i*h-o*u)/c,d={alongA:0,alongB:0,pt:[e[0]+f*i,e[1]+f*o]};return d.alongA=f<=-t?-2:f<t?-1:f-1<=-t?0:f-1<t?1:2,d.alongB=p<=-t?-2:p<t?-1:p-1<=-t?0:p-1<t?1:2,d},pointInsideRegion:function(e,r){for(var n=e[0],a=e[1],i=r[r.length-1][0],o=r[r.length-1][1],s=!1,l=0;l<r.length;l++){var c=r[l][0],u=r[l][1];u-a>t!=o-a>t&&(i-c)*(a-u)/(o-u)+c-n>t&&(s=!s),i=c,o=u}return s}};return e}},{}],477:[function(t,e,r){var n={toPolygon:function(t,e){function r(e){if(e.length<=0)return t.segments({inverted:!1,regions:[]});function r(e){var r=e.slice(0,e.length-1);return t.segments({inverted:!1,regions:[r]})}for(var n=r(e[0]),a=1;a<e.length;a++)n=t.selectDifference(t.combine(n,r(e[a])));return n}if("Polygon"===e.type)return t.polygon(r(e.coordinates));if("MultiPolygon"===e.type){for(var n=t.segments({inverted:!1,regions:[]}),a=0;a<e.coordinates.length;a++)n=t.selectUnion(t.combine(n,r(e.coordinates[a])));return t.polygon(n)}throw new Error("PolyBool: Cannot convert GeoJSON object to PolyBool polygon")},fromPolygon:function(t,e,r){function n(t,r){return e.pointInsideRegion([.5*(t[0][0]+t[1][0]),.5*(t[0][1]+t[1][1])],r)}function a(t){return{region:t,children:[]}}r=t.polygon(t.segments(r));var i=a(null);function o(t,e){for(var r=0;r<t.children.length;r++){if(n(e,(s=t.children[r]).region))return void o(s,e)}var i=a(e);for(r=0;r<t.children.length;r++){var s;n((s=t.children[r]).region,e)&&(i.children.push(s),t.children.splice(r,1),r--)}t.children.push(i)}for(var s=0;s<r.regions.length;s++){var l=r.regions[s];l.length<3||o(i,l)}function c(t,e){for(var r=0,n=t[t.length-1][0],a=t[t.length-1][1],i=[],o=0;o<t.length;o++){var s=t[o][0],l=t[o][1];i.push([s,l]),r+=l*n-s*a,n=s,a=l}return r<0!==e&&i.reverse(),i.push([i[0][0],i[0][1]]),i}var u=[];function h(t){var e=[c(t.region,!1)];u.push(e);for(var r=0;r<t.children.length;r++)e.push(f(t.children[r]))}function f(t){for(var e=0;e<t.children.length;e++)h(t.children[e]);return c(t.region,!0)}for(s=0;s<i.children.length;s++)h(i.children[s]);return u.length<=0?{type:"Polygon",coordinates:[]}:1==u.length?{type:"Polygon",coordinates:u[0]}:{type:"MultiPolygon",coordinates:u}}};e.exports=n},{}],478:[function(t,e,r){var n=t("./linked-list");e.exports=function(t,e,r){function a(t,e,n){return{id:r?r.segmentId():-1,start:t,end:e,myFill:{above:n.myFill.above,below:n.myFill.below},otherFill:null}}var i=n.create();function o(t,r){i.insertBefore(t,function(n){return function(t,r,n,a,i,o){var s=e.pointsCompare(r,i);return 0!==s?s:e.pointsSame(n,o)?0:t!==a?t?1:-1:e.pointAboveOrOnLine(n,a?i:o,a?o:i)?1:-1}(t.isStart,t.pt,r,n.isStart,n.pt,n.other.pt)<0})}function s(t,e){var r=function(t,e){var r=n.node({isStart:!0,pt:t.start,seg:t,primary:e,other:null,status:null});return o(r,t.end),r}(t,e);return function(t,e,r){var a=n.node({isStart:!1,pt:e.end,seg:e,primary:r,other:t,status:null});t.other=a,o(a,t.pt)}(r,t,e),r}function l(t,e){var n=a(e,t.seg.end,t.seg);return function(t,e){r&&r.segmentChop(t.seg,e),t.other.remove(),t.seg.end=e,t.other.pt=e,o(t.other,t.pt)}(t,e),s(n,t.primary)}function c(a,o){var s=n.create();function c(t){return s.findTransition(function(r){var n,a,i,o,s,l;return n=t,a=r.ev,i=n.seg.start,o=n.seg.end,s=a.seg.start,l=a.seg.end,(e.pointsCollinear(i,s,l)?e.pointsCollinear(o,s,l)?1:e.pointAboveOrOnLine(o,s,l)?1:-1:e.pointAboveOrOnLine(i,s,l)?1:-1)>0})}function u(t,n){var a=t.seg,i=n.seg,o=a.start,s=a.end,c=i.start,u=i.end;r&&r.checkIntersection(a,i);var h=e.linesIntersect(o,s,c,u);if(!1===h){if(!e.pointsCollinear(o,s,c))return!1;if(e.pointsSame(o,u)||e.pointsSame(s,c))return!1;var f=e.pointsSame(o,c),p=e.pointsSame(s,u);if(f&&p)return n;var d=!f&&e.pointBetween(o,c,u),g=!p&&e.pointBetween(s,c,u);if(f)return g?l(n,s):l(t,u),n;d&&(p||(g?l(n,s):l(t,u)),l(n,o))}else 0===h.alongA&&(-1===h.alongB?l(t,c):0===h.alongB?l(t,h.pt):1===h.alongB&&l(t,u)),0===h.alongB&&(-1===h.alongA?l(n,o):0===h.alongA?l(n,h.pt):1===h.alongA&&l(n,s));return!1}for(var h=[];!i.isEmpty();){var f=i.getHead();if(r&&r.vert(f.pt[0]),f.isStart){r&&r.segmentNew(f.seg,f.primary);var p=c(f),d=p.before?p.before.ev:null,g=p.after?p.after.ev:null;function v(){if(d){var t=u(f,d);if(t)return t}return!!g&&u(f,g)}r&&r.tempStatus(f.seg,!!d&&d.seg,!!g&&g.seg);var m,y,x=v();if(x)t?(y=null===f.seg.myFill.below||f.seg.myFill.above!==f.seg.myFill.below)&&(x.seg.myFill.above=!x.seg.myFill.above):x.seg.otherFill=f.seg.myFill,r&&r.segmentUpdate(x.seg),f.other.remove(),f.remove();if(i.getHead()!==f){r&&r.rewind(f.seg);continue}t?(y=null===f.seg.myFill.below||f.seg.myFill.above!==f.seg.myFill.below,f.seg.myFill.below=g?g.seg.myFill.above:a,f.seg.myFill.above=y?!f.seg.myFill.below:f.seg.myFill.below):null===f.seg.otherFill&&(m=g?f.primary===g.primary?g.seg.otherFill.above:g.seg.myFill.above:f.primary?o:a,f.seg.otherFill={above:m,below:m}),r&&r.status(f.seg,!!d&&d.seg,!!g&&g.seg),f.other.status=p.insert(n.node({ev:f}))}else{var b=f.status;if(null===b)throw new Error("PolyBool: Zero-length segment detected; your epsilon is probably too small or too large");if(s.exists(b.prev)&&s.exists(b.next)&&u(b.prev.ev,b.next.ev),r&&r.statusRemove(b.ev.seg),b.remove(),!f.primary){var _=f.seg.myFill;f.seg.myFill=f.seg.otherFill,f.seg.otherFill=_}h.push(f.seg)}i.getHead().remove()}return r&&r.done(),h}return t?{addRegion:function(t){for(var n,a,i,o=t[t.length-1],l=0;l<t.length;l++){n=o,o=t[l];var c=e.pointsCompare(n,o);0!==c&&s((a=c<0?n:o,i=c<0?o:n,{id:r?r.segmentId():-1,start:a,end:i,myFill:{above:null,below:null},otherFill:null}),!0)}},calculate:function(t){return c(t,!1)}}:{calculate:function(t,e,r,n){return t.forEach(function(t){s(a(t.start,t.end,t),!0)}),r.forEach(function(t){s(a(t.start,t.end,t),!1)}),c(e,n)}}}},{"./linked-list":479}],479:[function(t,e,r){e.exports={create:function(){var t={root:{root:!0,next:null},exists:function(e){return null!==e&&e!==t.root},isEmpty:function(){return null===t.root.next},getHead:function(){return t.root.next},insertBefore:function(e,r){for(var n=t.root,a=t.root.next;null!==a;){if(r(a))return e.prev=a.prev,e.next=a,a.prev.next=e,void(a.prev=e);n=a,a=a.next}n.next=e,e.prev=n,e.next=null},findTransition:function(e){for(var r=t.root,n=t.root.next;null!==n&&!e(n);)r=n,n=n.next;return{before:r===t.root?null:r,after:n,insert:function(t){return t.prev=r,t.next=n,r.next=t,null!==n&&(n.prev=t),t}}}};return t},node:function(t){return t.prev=null,t.next=null,t.remove=function(){t.prev.next=t.next,t.next&&(t.next.prev=t.prev),t.prev=null,t.next=null},t}}},{}],480:[function(t,e,r){e.exports=function(t,e,r){var n=[],a=[];return t.forEach(function(t){var i=t.start,o=t.end;if(e.pointsSame(i,o))console.warn("PolyBool: Warning: Zero-length segment detected; your epsilon is probably too small or too large");else{r&&r.chainStart(t);for(var s={index:0,matches_head:!1,matches_pt1:!1},l={index:0,matches_head:!1,matches_pt1:!1},c=s,u=0;u<n.length;u++){var h=(v=n[u])[0],f=(v[1],v[v.length-1]);if(v[v.length-2],e.pointsSame(h,i)){if(T(u,!0,!0))break}else if(e.pointsSame(h,o)){if(T(u,!0,!1))break}else if(e.pointsSame(f,i)){if(T(u,!1,!0))break}else if(e.pointsSame(f,o)&&T(u,!1,!1))break}if(c===s)return n.push([i,o]),void(r&&r.chainNew(i,o));if(c===l){r&&r.chainMatch(s.index);var p=s.index,d=s.matches_pt1?o:i,g=s.matches_head,v=n[p],m=g?v[0]:v[v.length-1],y=g?v[1]:v[v.length-2],x=g?v[v.length-1]:v[0],b=g?v[v.length-2]:v[1];return e.pointsCollinear(y,m,d)&&(g?(r&&r.chainRemoveHead(s.index,d),v.shift()):(r&&r.chainRemoveTail(s.index,d),v.pop()),m=y),e.pointsSame(x,d)?(n.splice(p,1),e.pointsCollinear(b,x,m)&&(g?(r&&r.chainRemoveTail(s.index,m),v.pop()):(r&&r.chainRemoveHead(s.index,m),v.shift())),r&&r.chainClose(s.index),void a.push(v)):void(g?(r&&r.chainAddHead(s.index,d),v.unshift(d)):(r&&r.chainAddTail(s.index,d),v.push(d)))}var _=s.index,w=l.index;r&&r.chainConnect(_,w);var k=n[_].length<n[w].length;s.matches_head?l.matches_head?k?(M(_),A(_,w)):(M(w),A(w,_)):A(w,_):l.matches_head?A(_,w):k?(M(_),A(w,_)):(M(w),A(_,w))}function T(t,e,r){return c.index=t,c.matches_head=e,c.matches_pt1=r,c===s?(c=l,!1):(c=null,!0)}function M(t){r&&r.chainReverse(t),n[t].reverse()}function A(t,a){var i=n[t],o=n[a],s=i[i.length-1],l=i[i.length-2],c=o[0],u=o[1];e.pointsCollinear(l,s,c)&&(r&&r.chainRemoveTail(t,s),i.pop(),s=l),e.pointsCollinear(s,c,u)&&(r&&r.chainRemoveHead(a,c),o.shift()),r&&r.chainJoin(t,a),n[t]=i.concat(o),n.splice(a,1)}}),a}},{}],481:[function(t,e,r){function n(t,e,r){var n=[];return t.forEach(function(t){var a=(t.myFill.above?8:0)+(t.myFill.below?4:0)+(t.otherFill&&t.otherFill.above?2:0)+(t.otherFill&&t.otherFill.below?1:0);0!==e[a]&&n.push({id:r?r.segmentId():-1,start:t.start,end:t.end,myFill:{above:1===e[a],below:2===e[a]},otherFill:null})}),r&&r.selected(n),n}var a={union:function(t,e){return n(t,[0,2,1,0,2,2,0,0,1,0,1,0,0,0,0,0],e)},intersect:function(t,e){return n(t,[0,0,0,0,0,2,0,2,0,0,1,1,0,2,1,0],e)},difference:function(t,e){return n(t,[0,0,0,0,2,0,2,0,1,1,0,0,0,1,2,0],e)},differenceRev:function(t,e){return n(t,[0,2,1,0,0,0,1,1,0,2,0,2,0,0,0,0],e)},xor:function(t,e){return n(t,[0,2,1,0,2,0,0,1,1,0,0,2,0,1,2,0],e)}};e.exports=a},{}],482:[function(t,e,r){"use strict";var n=new Float64Array(4),a=new Float64Array(4),i=new Float64Array(4);e.exports=function(t,e,r,o,s){n.length<o.length&&(n=new Float64Array(o.length),a=new Float64Array(o.length),i=new Float64Array(o.length));for(var l=0;l<o.length;++l)n[l]=t[l]-o[l],a[l]=e[l]-t[l],i[l]=r[l]-t[l];var c=0,u=0,h=0,f=0,p=0,d=0;for(l=0;l<o.length;++l){var g=a[l],v=i[l],m=n[l];c+=g*g,u+=g*v,h+=v*v,f+=m*g,p+=m*v,d+=m*m}var y,x,b,_,w,k=Math.abs(c*h-u*u),T=u*p-h*f,M=u*f-c*p;if(T+M<=k)if(T<0)M<0&&f<0?(M=0,-f>=c?(T=1,y=c+2*f+d):y=f*(T=-f/c)+d):(T=0,p>=0?(M=0,y=d):-p>=h?(M=1,y=h+2*p+d):y=p*(M=-p/h)+d);else if(M<0)M=0,f>=0?(T=0,y=d):-f>=c?(T=1,y=c+2*f+d):y=f*(T=-f/c)+d;else{var A=1/k;y=(T*=A)*(c*T+u*(M*=A)+2*f)+M*(u*T+h*M+2*p)+d}else T<0?(b=h+p)>(x=u+f)?(_=b-x)>=(w=c-2*u+h)?(T=1,M=0,y=c+2*f+d):y=(T=_/w)*(c*T+u*(M=1-T)+2*f)+M*(u*T+h*M+2*p)+d:(T=0,b<=0?(M=1,y=h+2*p+d):p>=0?(M=0,y=d):y=p*(M=-p/h)+d):M<0?(b=c+f)>(x=u+p)?(_=b-x)>=(w=c-2*u+h)?(M=1,T=0,y=h+2*p+d):y=(T=1-(M=_/w))*(c*T+u*M+2*f)+M*(u*T+h*M+2*p)+d:(M=0,b<=0?(T=1,y=c+2*f+d):f>=0?(T=0,y=d):y=f*(T=-f/c)+d):(_=h+p-u-f)<=0?(T=0,M=1,y=h+2*p+d):_>=(w=c-2*u+h)?(T=1,M=0,y=c+2*f+d):y=(T=_/w)*(c*T+u*(M=1-T)+2*f)+M*(u*T+h*M+2*p)+d;var S=1-T-M;for(l=0;l<o.length;++l)s[l]=S*t[l]+T*e[l]+M*r[l];return y<0?0:y}},{}],483:[function(t,e,r){var n,a,i=e.exports={};function o(){throw new Error("setTimeout has not been defined")}function s(){throw new Error("clearTimeout has not been defined")}function l(t){if(n===setTimeout)return setTimeout(t,0);if((n===o||!n)&&setTimeout)return n=setTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n="function"==typeof setTimeout?setTimeout:o}catch(t){n=o}try{a="function"==typeof clearTimeout?clearTimeout:s}catch(t){a=s}}();var c,u=[],h=!1,f=-1;function p(){h&&c&&(h=!1,c.length?u=c.concat(u):f=-1,u.length&&d())}function d(){if(!h){var t=l(p);h=!0;for(var e=u.length;e;){for(c=u,u=[];++f<e;)c&&c[f].run();f=-1,e=u.length}c=null,h=!1,function(t){if(a===clearTimeout)return clearTimeout(t);if((a===s||!a)&&clearTimeout)return a=clearTimeout,clearTimeout(t);try{a(t)}catch(e){try{return a.call(null,t)}catch(e){return a.call(this,t)}}}(t)}}function g(t,e){this.fun=t,this.array=e}function v(){}i.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];u.push(new g(t,e)),1!==u.length||h||l(d)},g.prototype.run=function(){this.fun.apply(null,this.array)},i.title="browser",i.browser=!0,i.env={},i.argv=[],i.version="",i.versions={},i.on=v,i.addListener=v,i.once=v,i.off=v,i.removeListener=v,i.removeAllListeners=v,i.emit=v,i.prependListener=v,i.prependOnceListener=v,i.listeners=function(t){return[]},i.binding=function(t){throw new Error("process.binding is not supported")},i.cwd=function(){return"/"},i.chdir=function(t){throw new Error("process.chdir is not supported")},i.umask=function(){return 0}},{}],484:[function(t,e,r){e.exports=t("gl-quat/slerp")},{"gl-quat/slerp":296}],485:[function(t,e,r){(function(r){for(var n=t("performance-now"),a="undefined"==typeof window?r:window,i=["moz","webkit"],o="AnimationFrame",s=a["request"+o],l=a["cancel"+o]||a["cancelRequest"+o],c=0;!s&&c<i.length;c++)s=a[i[c]+"Request"+o],l=a[i[c]+"Cancel"+o]||a[i[c]+"CancelRequest"+o];if(!s||!l){var u=0,h=0,f=[];s=function(t){if(0===f.length){var e=n(),r=Math.max(0,1e3/60-(e-u));u=r+e,setTimeout(function(){var t=f.slice(0);f.length=0;for(var e=0;e<t.length;e++)if(!t[e].cancelled)try{t[e].callback(u)}catch(t){setTimeout(function(){throw t},0)}},Math.round(r))}return f.push({handle:++h,callback:t,cancelled:!1}),h},l=function(t){for(var e=0;e<f.length;e++)f[e].handle===t&&(f[e].cancelled=!0)}}e.exports=function(t){return s.call(a,t)},e.exports.cancel=function(){l.apply(a,arguments)},e.exports.polyfill=function(t){t||(t=a),t.requestAnimationFrame=s,t.cancelAnimationFrame=l}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"performance-now":463}],486:[function(t,e,r){"use strict";var n=t("big-rat/add");e.exports=function(t,e){for(var r=t.length,a=new Array(r),i=0;i<r;++i)a[i]=n(t[i],e[i]);return a}},{"big-rat/add":77}],487:[function(t,e,r){"use strict";e.exports=function(t){for(var e=new Array(t.length),r=0;r<t.length;++r)e[r]=n(t[r]);return e};var n=t("big-rat")},{"big-rat":80}],488:[function(t,e,r){"use strict";var n=t("big-rat"),a=t("big-rat/mul");e.exports=function(t,e){for(var r=n(e),i=t.length,o=new Array(i),s=0;s<i;++s)o[s]=a(t[s],r);return o}},{"big-rat":80,"big-rat/mul":89}],489:[function(t,e,r){"use strict";var n=t("big-rat/sub");e.exports=function(t,e){for(var r=t.length,a=new Array(r),i=0;i<r;++i)a[i]=n(t[i],e[i]);return a}},{"big-rat/sub":91}],490:[function(t,e,r){"use strict";var n=t("compare-cell"),a=t("compare-oriented-cell"),i=t("cell-orientation");e.exports=function(t){t.sort(a);for(var e=t.length,r=0,o=0;o<e;++o){var s=t[o],l=i(s);if(0!==l){if(r>0){var c=t[r-1];if(0===n(s,c)&&i(c)!==l){r-=1;continue}}t[r++]=s}}return t.length=r,t}},{"cell-orientation":114,"compare-cell":130,"compare-oriented-cell":131}],491:[function(t,e,r){"use strict";var n=t("array-bounds"),a=t("color-normalize"),i=t("update-diff"),o=t("pick-by-alias"),s=t("object-assign"),l=t("flatten-vertex-data"),c=t("to-float32"),u=c.float32,h=c.fract32;e.exports=function(t,e){"function"==typeof t?(e||(e={}),e.regl=t):e=t;e.length&&(e.positions=e);if(!(t=e.regl).hasExtension("ANGLE_instanced_arrays"))throw Error("regl-error2d: `ANGLE_instanced_arrays` extension should be enabled");var r,c,p,d,g,v,m=t._gl,y={color:"black",capSize:5,lineWidth:1,opacity:1,viewport:null,range:null,offset:0,count:0,bounds:null,positions:[],errors:[]},x=[];return d=t.buffer({usage:"dynamic",type:"uint8",data:new Uint8Array(0)}),c=t.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)}),p=t.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)}),g=t.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)}),v=t.buffer({usage:"static",type:"float",data:f}),k(e),r=t({vert:"\n\t\tprecision highp float;\n\n\t\tattribute vec2 position, positionFract;\n\t\tattribute vec4 error;\n\t\tattribute vec4 color;\n\n\t\tattribute vec2 direction, lineOffset, capOffset;\n\n\t\tuniform vec4 viewport;\n\t\tuniform float lineWidth, capSize;\n\t\tuniform vec2 scale, scaleFract, translate, translateFract;\n\n\t\tvarying vec4 fragColor;\n\n\t\tvoid main() {\n\t\t\tfragColor = color / 255.;\n\n\t\t\tvec2 pixelOffset = lineWidth * lineOffset + (capSize + lineWidth) * capOffset;\n\n\t\t\tvec2 dxy = -step(.5, direction.xy) * error.xz + step(direction.xy, vec2(-.5)) * error.yw;\n\n\t\t\tvec2 position = position + dxy;\n\n\t\t\tvec2 pos = (position + translate) * scale\n\t\t\t\t+ (positionFract + translateFract) * scale\n\t\t\t\t+ (position + translate) * scaleFract\n\t\t\t\t+ (positionFract + translateFract) * scaleFract;\n\n\t\t\tpos += pixelOffset / viewport.zw;\n\n\t\t\tgl_Position = vec4(pos * 2. - 1., 0, 1);\n\t\t}\n\t\t",frag:"\n\t\tprecision highp float;\n\n\t\tvarying vec4 fragColor;\n\n\t\tuniform float opacity;\n\n\t\tvoid main() {\n\t\t\tgl_FragColor = fragColor;\n\t\t\tgl_FragColor.a *= opacity;\n\t\t}\n\t\t",uniforms:{range:t.prop("range"),lineWidth:t.prop("lineWidth"),capSize:t.prop("capSize"),opacity:t.prop("opacity"),scale:t.prop("scale"),translate:t.prop("translate"),scaleFract:t.prop("scaleFract"),translateFract:t.prop("translateFract"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{color:{buffer:d,offset:function(t,e){return 4*e.offset},divisor:1},position:{buffer:c,offset:function(t,e){return 8*e.offset},divisor:1},positionFract:{buffer:p,offset:function(t,e){return 8*e.offset},divisor:1},error:{buffer:g,offset:function(t,e){return 16*e.offset},divisor:1},direction:{buffer:v,stride:24,offset:0},lineOffset:{buffer:v,stride:24,offset:8},capOffset:{buffer:v,stride:24,offset:16}},primitive:"triangles",blend:{enable:!0,color:[0,0,0,0],equation:{rgb:"add",alpha:"add"},func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},depth:{enable:!1},scissor:{enable:!0,box:t.prop("viewport")},viewport:t.prop("viewport"),stencil:!1,instances:t.prop("count"),count:f.length}),s(b,{update:k,draw:_,destroy:T,regl:t,gl:m,canvas:m.canvas,groups:x}),b;function b(t){t?k(t):null===t&&T(),_()}function _(e){if("number"==typeof e)return w(e);e&&!Array.isArray(e)&&(e=[e]),t._refresh(),x.forEach(function(t,r){t&&(e&&(e[r]?t.draw=!0:t.draw=!1),t.draw?w(r):t.draw=!0)})}function w(t){"number"==typeof t&&(t=x[t]),null!=t&&t&&t.count&&t.color&&t.opacity&&t.positions&&t.positions.length>1&&(t.scaleRatio=[t.scale[0]*t.viewport.width,t.scale[1]*t.viewport.height],r(t),t.after&&t.after(t))}function k(t){if(t){null!=t.length?"number"==typeof t[0]&&(t=[{positions:t}]):Array.isArray(t)||(t=[t]);var e=0,r=0;if(b.groups=x=t.map(function(t,c){var u=x[c];return t?("function"==typeof t?t={after:t}:"number"==typeof t[0]&&(t={positions:t}),t=o(t,{color:"color colors fill",capSize:"capSize cap capsize cap-size",lineWidth:"lineWidth line-width width line thickness",opacity:"opacity alpha",range:"range dataBox",viewport:"viewport viewBox",errors:"errors error",positions:"positions position data points"}),u||(x[c]=u={id:c,scale:null,translate:null,scaleFract:null,translateFract:null,draw:!0},t=s({},y,t)),i(u,t,[{lineWidth:function(t){return.5*+t},capSize:function(t){return.5*+t},opacity:parseFloat,errors:function(t){return t=l(t),r+=t.length,t},positions:function(t,r){return t=l(t,"float64"),r.count=Math.floor(t.length/2),r.bounds=n(t,2),r.offset=e,e+=r.count,t}},{color:function(t,e){var r=e.count;if(t||(t="transparent"),!Array.isArray(t)||"number"==typeof t[0]){var n=t;t=Array(r);for(var i=0;i<r;i++)t[i]=n}if(t.length<r)throw Error("Not enough colors");for(var o=new Uint8Array(4*r),s=0;s<r;s++){var l=a(t[s],"uint8");o.set(l,4*s)}return o},range:function(t,e,r){var n=e.bounds;return t||(t=n),e.scale=[1/(t[2]-t[0]),1/(t[3]-t[1])],e.translate=[-t[0],-t[1]],e.scaleFract=h(e.scale),e.translateFract=h(e.translate),t},viewport:function(t){var e;return Array.isArray(t)?e={x:t[0],y:t[1],width:t[2]-t[0],height:t[3]-t[1]}:t?(e={x:t.x||t.left||0,y:t.y||t.top||0},t.right?e.width=t.right-e.x:e.width=t.w||t.width||0,t.bottom?e.height=t.bottom-e.y:e.height=t.h||t.height||0):e={x:0,y:0,width:m.drawingBufferWidth,height:m.drawingBufferHeight},e}}]),u):u}),e||r){var f=x.reduce(function(t,e,r){return t+(e?e.count:0)},0),v=new Float64Array(2*f),_=new Uint8Array(4*f),w=new Float32Array(4*f);x.forEach(function(t,e){if(t){var r=t.positions,n=t.count,a=t.offset,i=t.color,o=t.errors;n&&(_.set(i,4*a),w.set(o,4*a),v.set(r,2*a))}}),c(u(v)),p(h(v)),d(_),g(w)}}}function T(){c.destroy(),p.destroy(),d.destroy(),g.destroy(),v.destroy()}};var f=[[1,0,0,1,0,0],[1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,1,0,0],[1,0,0,1,0,0],[1,0,-1,0,0,1],[1,0,-1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,1],[1,0,-1,0,0,1],[-1,0,-1,0,0,1],[-1,0,-1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,1],[-1,0,-1,0,0,1],[0,1,1,0,0,0],[0,1,-1,0,0,0],[0,-1,-1,0,0,0],[0,-1,-1,0,0,0],[0,1,1,0,0,0],[0,-1,1,0,0,0],[0,1,0,-1,1,0],[0,1,0,-1,-1,0],[0,1,0,1,-1,0],[0,1,0,1,1,0],[0,1,0,-1,1,0],[0,1,0,1,-1,0],[0,-1,0,-1,1,0],[0,-1,0,-1,-1,0],[0,-1,0,1,-1,0],[0,-1,0,1,1,0],[0,-1,0,-1,1,0],[0,-1,0,1,-1,0]]},{"array-bounds":68,"color-normalize":122,"flatten-vertex-data":230,"object-assign":455,"pick-by-alias":466,"to-float32":536,"update-diff":547}],492:[function(t,e,r){"use strict";var n=t("color-normalize"),a=t("array-bounds"),i=t("object-assign"),o=t("glslify"),s=t("pick-by-alias"),l=t("flatten-vertex-data"),c=t("earcut"),u=t("array-normalize"),h=t("to-float32"),f=h.float32,p=h.fract32,d=t("es6-weak-map"),g=t("parse-rect");function v(t,e){if(!(this instanceof v))return new v(t,e);if("function"==typeof t?(e||(e={}),e.regl=t):e=t,e.length&&(e.positions=e),!(t=e.regl).hasExtension("ANGLE_instanced_arrays"))throw Error("regl-error2d: `ANGLE_instanced_arrays` extension should be enabled");this.gl=t._gl,this.regl=t,this.passes=[],this.shaders=v.shaders.has(t)?v.shaders.get(t):v.shaders.set(t,v.createShaders(t)).get(t),this.update(e)}e.exports=v,v.dashMult=2,v.maxPatternLength=256,v.precisionThreshold=3e6,v.maxPoints=1e4,v.maxLines=2048,v.shaders=new d,v.createShaders=function(t){var e,r=t.buffer({usage:"static",type:"float",data:[0,1,0,0,1,1,1,0]}),n={primitive:"triangle strip",instances:t.prop("count"),count:4,offset:0,uniforms:{miterMode:function(t,e){return"round"===e.join?2:1},miterLimit:t.prop("miterLimit"),scale:t.prop("scale"),scaleFract:t.prop("scaleFract"),translateFract:t.prop("translateFract"),translate:t.prop("translate"),thickness:t.prop("thickness"),dashPattern:t.prop("dashTexture"),opacity:t.prop("opacity"),pixelRatio:t.context("pixelRatio"),id:t.prop("id"),dashSize:t.prop("dashLength"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]},depth:t.prop("depth")},blend:{enable:!0,color:[0,0,0,0],equation:{rgb:"add",alpha:"add"},func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},depth:{enable:function(t,e){return!e.overlay}},stencil:{enable:!1},scissor:{enable:!0,box:t.prop("viewport")},viewport:t.prop("viewport")},a=t(i({vert:o(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 aCoord, bCoord, aCoordFract, bCoordFract;\nattribute vec4 color;\nattribute float lineEnd, lineTop;\n\nuniform vec2 scale, scaleFract, translate, translateFract;\nuniform float thickness, pixelRatio, id, depth;\nuniform vec4 viewport;\n\nvarying vec4 fragColor;\nvarying vec2 tangent;\n\nvec2 project(vec2 position, vec2 positionFract, vec2 scale, vec2 scaleFract, vec2 translate, vec2 translateFract) {\n\t// the order is important\n\treturn position * scale + translate\n + positionFract * scale + translateFract\n + position * scaleFract\n + positionFract * scaleFract;\n}\n\nvoid main() {\n\tfloat lineStart = 1. - lineEnd;\n\tfloat lineOffset = lineTop * 2. - 1.;\n\n\tvec2 diff = (bCoord + bCoordFract - aCoord - aCoordFract);\n\ttangent = normalize(diff * scale * viewport.zw);\n\tvec2 normal = vec2(-tangent.y, tangent.x);\n\n\tvec2 position = project(aCoord, aCoordFract, scale, scaleFract, translate, translateFract) * lineStart\n\t\t+ project(bCoord, bCoordFract, scale, scaleFract, translate, translateFract) * lineEnd\n\n\t\t+ thickness * normal * .5 * lineOffset / viewport.zw;\n\n\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\n\n\tfragColor = color / 255.;\n}\n"]),frag:o(["precision highp float;\n#define GLSLIFY 1\n\nuniform sampler2D dashPattern;\n\nuniform float dashSize, pixelRatio, thickness, opacity, id;\n\nvarying vec4 fragColor;\nvarying vec2 tangent;\n\nvoid main() {\n\tfloat alpha = 1.;\n\n\tfloat t = fract(dot(tangent, gl_FragCoord.xy) / dashSize) * .5 + .25;\n\tfloat dash = texture2D(dashPattern, vec2(t, .5)).r;\n\n\tgl_FragColor = fragColor;\n\tgl_FragColor.a *= alpha * opacity * dash;\n}\n"]),attributes:{lineEnd:{buffer:r,divisor:0,stride:8,offset:0},lineTop:{buffer:r,divisor:0,stride:8,offset:4},aCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:16,divisor:1},aCoordFract:{buffer:t.prop("positionFractBuffer"),stride:8,offset:8,divisor:1},bCoordFract:{buffer:t.prop("positionFractBuffer"),stride:8,offset:16,divisor:1},color:{buffer:t.prop("colorBuffer"),stride:4,offset:0,divisor:1}}},n));try{e=t(i({cull:{enable:!0,face:"back"},vert:o(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 aCoord, bCoord, nextCoord, prevCoord;\nattribute vec4 aColor, bColor;\nattribute float lineEnd, lineTop;\n\nuniform vec2 scale, translate;\nuniform float thickness, pixelRatio, id, depth;\nuniform vec4 viewport;\nuniform float miterLimit, miterMode;\n\nvarying vec4 fragColor;\nvarying vec4 startCutoff, endCutoff;\nvarying vec2 tangent;\nvarying vec2 startCoord, endCoord;\nvarying float enableStartMiter, enableEndMiter;\n\nconst float REVERSE_THRESHOLD = -.875;\nconst float MIN_DIFF = 1e-6;\n\n// TODO: possible optimizations: avoid overcalculating all for vertices and calc just one instead\n// TODO: precalculate dot products, normalize things beforehead etc.\n// TODO: refactor to rectangular algorithm\n\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\n\tvec2 diff = b - a;\n\tvec2 perp = normalize(vec2(-diff.y, diff.x));\n\treturn dot(p - a, perp);\n}\n\nbool isNaN( float val ){\n return ( val < 0.0 || 0.0 < val || val == 0.0 ) ? false : true;\n}\n\nvoid main() {\n\tvec2 aCoord = aCoord, bCoord = bCoord, prevCoord = prevCoord, nextCoord = nextCoord;\n\n vec2 adjustedScale;\n adjustedScale.x = (abs(scale.x) < MIN_DIFF) ? MIN_DIFF : scale.x;\n adjustedScale.y = (abs(scale.y) < MIN_DIFF) ? MIN_DIFF : scale.y;\n\n vec2 scaleRatio = adjustedScale * viewport.zw;\n\tvec2 normalWidth = thickness / scaleRatio;\n\n\tfloat lineStart = 1. - lineEnd;\n\tfloat lineBot = 1. - lineTop;\n\n\tfragColor = (lineStart * aColor + lineEnd * bColor) / 255.;\n\n\tif (isNaN(aCoord.x) || isNaN(aCoord.y) || isNaN(bCoord.x) || isNaN(bCoord.y)) return;\n\n\tif (aCoord == prevCoord) prevCoord = aCoord + normalize(bCoord - aCoord);\n\tif (bCoord == nextCoord) nextCoord = bCoord - normalize(bCoord - aCoord);\n\n\tvec2 prevDiff = aCoord - prevCoord;\n\tvec2 currDiff = bCoord - aCoord;\n\tvec2 nextDiff = nextCoord - bCoord;\n\n\tvec2 prevTangent = normalize(prevDiff * scaleRatio);\n\tvec2 currTangent = normalize(currDiff * scaleRatio);\n\tvec2 nextTangent = normalize(nextDiff * scaleRatio);\n\n\tvec2 prevNormal = vec2(-prevTangent.y, prevTangent.x);\n\tvec2 currNormal = vec2(-currTangent.y, currTangent.x);\n\tvec2 nextNormal = vec2(-nextTangent.y, nextTangent.x);\n\n\tvec2 startJoinDirection = normalize(prevTangent - currTangent);\n\tvec2 endJoinDirection = normalize(currTangent - nextTangent);\n\n\t// collapsed/unidirectional segment cases\n\t// FIXME: there should be more elegant solution\n\tvec2 prevTanDiff = abs(prevTangent - currTangent);\n\tvec2 nextTanDiff = abs(nextTangent - currTangent);\n\tif (max(prevTanDiff.x, prevTanDiff.y) < MIN_DIFF) {\n\t\tstartJoinDirection = currNormal;\n\t}\n\tif (max(nextTanDiff.x, nextTanDiff.y) < MIN_DIFF) {\n\t\tendJoinDirection = currNormal;\n\t}\n\tif (aCoord == bCoord) {\n\t\tendJoinDirection = startJoinDirection;\n\t\tcurrNormal = prevNormal;\n\t\tcurrTangent = prevTangent;\n\t}\n\n\ttangent = currTangent;\n\n\t//calculate join shifts relative to normals\n\tfloat startJoinShift = dot(currNormal, startJoinDirection);\n\tfloat endJoinShift = dot(currNormal, endJoinDirection);\n\n\tfloat startMiterRatio = abs(1. / startJoinShift);\n\tfloat endMiterRatio = abs(1. / endJoinShift);\n\n\tvec2 startJoin = startJoinDirection * startMiterRatio;\n\tvec2 endJoin = endJoinDirection * endMiterRatio;\n\n\tvec2 startTopJoin, startBotJoin, endTopJoin, endBotJoin;\n\tstartTopJoin = sign(startJoinShift) * startJoin * .5;\n\tstartBotJoin = -startTopJoin;\n\n\tendTopJoin = sign(endJoinShift) * endJoin * .5;\n\tendBotJoin = -endTopJoin;\n\n\tvec2 aTopCoord = aCoord + normalWidth * startTopJoin;\n\tvec2 bTopCoord = bCoord + normalWidth * endTopJoin;\n\tvec2 aBotCoord = aCoord + normalWidth * startBotJoin;\n\tvec2 bBotCoord = bCoord + normalWidth * endBotJoin;\n\n\t//miter anti-clipping\n\tfloat baClipping = distToLine(bCoord, aCoord, aBotCoord) / dot(normalize(normalWidth * endBotJoin), normalize(normalWidth.yx * vec2(-startBotJoin.y, startBotJoin.x)));\n\tfloat abClipping = distToLine(aCoord, bCoord, bTopCoord) / dot(normalize(normalWidth * startBotJoin), normalize(normalWidth.yx * vec2(-endBotJoin.y, endBotJoin.x)));\n\n\t//prevent close to reverse direction switch\n\tbool prevReverse = dot(currTangent, prevTangent) <= REVERSE_THRESHOLD && abs(dot(currTangent, prevNormal)) * min(length(prevDiff), length(currDiff)) < length(normalWidth * currNormal);\n\tbool nextReverse = dot(currTangent, nextTangent) <= REVERSE_THRESHOLD && abs(dot(currTangent, nextNormal)) * min(length(nextDiff), length(currDiff)) < length(normalWidth * currNormal);\n\n\tif (prevReverse) {\n\t\t//make join rectangular\n\t\tvec2 miterShift = normalWidth * startJoinDirection * miterLimit * .5;\n\t\tfloat normalAdjust = 1. - min(miterLimit / startMiterRatio, 1.);\n\t\taBotCoord = aCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\n\t\taTopCoord = aCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\n\t}\n\telse if (!nextReverse && baClipping > 0. && baClipping < length(normalWidth * endBotJoin)) {\n\t\t//handle miter clipping\n\t\tbTopCoord -= normalWidth * endTopJoin;\n\t\tbTopCoord += normalize(endTopJoin * normalWidth) * baClipping;\n\t}\n\n\tif (nextReverse) {\n\t\t//make join rectangular\n\t\tvec2 miterShift = normalWidth * endJoinDirection * miterLimit * .5;\n\t\tfloat normalAdjust = 1. - min(miterLimit / endMiterRatio, 1.);\n\t\tbBotCoord = bCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\n\t\tbTopCoord = bCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\n\t}\n\telse if (!prevReverse && abClipping > 0. && abClipping < length(normalWidth * startBotJoin)) {\n\t\t//handle miter clipping\n\t\taBotCoord -= normalWidth * startBotJoin;\n\t\taBotCoord += normalize(startBotJoin * normalWidth) * abClipping;\n\t}\n\n\tvec2 aTopPosition = (aTopCoord) * adjustedScale + translate;\n\tvec2 aBotPosition = (aBotCoord) * adjustedScale + translate;\n\n\tvec2 bTopPosition = (bTopCoord) * adjustedScale + translate;\n\tvec2 bBotPosition = (bBotCoord) * adjustedScale + translate;\n\n\t//position is normalized 0..1 coord on the screen\n\tvec2 position = (aTopPosition * lineTop + aBotPosition * lineBot) * lineStart + (bTopPosition * lineTop + bBotPosition * lineBot) * lineEnd;\n\n\tstartCoord = aCoord * scaleRatio + translate * viewport.zw + viewport.xy;\n\tendCoord = bCoord * scaleRatio + translate * viewport.zw + viewport.xy;\n\n\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\n\n\tenableStartMiter = step(dot(currTangent, prevTangent), .5);\n\tenableEndMiter = step(dot(currTangent, nextTangent), .5);\n\n\t//bevel miter cutoffs\n\tif (miterMode == 1.) {\n\t\tif (enableStartMiter == 1.) {\n\t\t\tvec2 startMiterWidth = vec2(startJoinDirection) * thickness * miterLimit * .5;\n\t\t\tstartCutoff = vec4(aCoord, aCoord);\n\t\t\tstartCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\n\t\t\tstartCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\n\t\t\tstartCutoff += viewport.xyxy;\n\t\t\tstartCutoff += startMiterWidth.xyxy;\n\t\t}\n\n\t\tif (enableEndMiter == 1.) {\n\t\t\tvec2 endMiterWidth = vec2(endJoinDirection) * thickness * miterLimit * .5;\n\t\t\tendCutoff = vec4(bCoord, bCoord);\n\t\t\tendCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x) / scaleRatio;\n\t\t\tendCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\n\t\t\tendCutoff += viewport.xyxy;\n\t\t\tendCutoff += endMiterWidth.xyxy;\n\t\t}\n\t}\n\n\t//round miter cutoffs\n\telse if (miterMode == 2.) {\n\t\tif (enableStartMiter == 1.) {\n\t\t\tvec2 startMiterWidth = vec2(startJoinDirection) * thickness * abs(dot(startJoinDirection, currNormal)) * .5;\n\t\t\tstartCutoff = vec4(aCoord, aCoord);\n\t\t\tstartCutoff.zw += vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\n\t\t\tstartCutoff = startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\n\t\t\tstartCutoff += viewport.xyxy;\n\t\t\tstartCutoff += startMiterWidth.xyxy;\n\t\t}\n\n\t\tif (enableEndMiter == 1.) {\n\t\t\tvec2 endMiterWidth = vec2(endJoinDirection) * thickness * abs(dot(endJoinDirection, currNormal)) * .5;\n\t\t\tendCutoff = vec4(bCoord, bCoord);\n\t\t\tendCutoff.zw += vec2(-endJoinDirection.y, endJoinDirection.x) / scaleRatio;\n\t\t\tendCutoff = endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\n\t\t\tendCutoff += viewport.xyxy;\n\t\t\tendCutoff += endMiterWidth.xyxy;\n\t\t}\n\t}\n}\n"]),frag:o(["precision highp float;\n#define GLSLIFY 1\n\nuniform sampler2D dashPattern;\nuniform float dashSize, pixelRatio, thickness, opacity, id, miterMode;\n\nvarying vec4 fragColor;\nvarying vec2 tangent;\nvarying vec4 startCutoff, endCutoff;\nvarying vec2 startCoord, endCoord;\nvarying float enableStartMiter, enableEndMiter;\n\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\n\tvec2 diff = b - a;\n\tvec2 perp = normalize(vec2(-diff.y, diff.x));\n\treturn dot(p - a, perp);\n}\n\nvoid main() {\n\tfloat alpha = 1., distToStart, distToEnd;\n\tfloat cutoff = thickness * .5;\n\n\t//bevel miter\n\tif (miterMode == 1.) {\n\t\tif (enableStartMiter == 1.) {\n\t\t\tdistToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\n\t\t\tif (distToStart < -1.) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\talpha *= min(max(distToStart + 1., 0.), 1.);\n\t\t}\n\n\t\tif (enableEndMiter == 1.) {\n\t\t\tdistToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\n\t\t\tif (distToEnd < -1.) {\n\t\t\t\tdiscard;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\talpha *= min(max(distToEnd + 1., 0.), 1.);\n\t\t}\n\t}\n\n\t// round miter\n\telse if (miterMode == 2.) {\n\t\tif (enableStartMiter == 1.) {\n\t\t\tdistToStart = distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\n\t\t\tif (distToStart < 0.) {\n\t\t\t\tfloat radius = length(gl_FragCoord.xy - startCoord);\n\n\t\t\t\tif(radius > cutoff + .5) {\n\t\t\t\t\tdiscard;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\talpha -= smoothstep(cutoff - .5, cutoff + .5, radius);\n\t\t\t}\n\t\t}\n\n\t\tif (enableEndMiter == 1.) {\n\t\t\tdistToEnd = distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\n\t\t\tif (distToEnd < 0.) {\n\t\t\t\tfloat radius = length(gl_FragCoord.xy - endCoord);\n\n\t\t\t\tif(radius > cutoff + .5) {\n\t\t\t\t\tdiscard;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\talpha -= smoothstep(cutoff - .5, cutoff + .5, radius);\n\t\t\t}\n\t\t}\n\t}\n\n\tfloat t = fract(dot(tangent, gl_FragCoord.xy) / dashSize) * .5 + .25;\n\tfloat dash = texture2D(dashPattern, vec2(t, .5)).r;\n\n\tgl_FragColor = fragColor;\n\tgl_FragColor.a *= alpha * opacity * dash;\n}\n"]),attributes:{lineEnd:{buffer:r,divisor:0,stride:8,offset:0},lineTop:{buffer:r,divisor:0,stride:8,offset:4},aColor:{buffer:t.prop("colorBuffer"),stride:4,offset:0,divisor:1},bColor:{buffer:t.prop("colorBuffer"),stride:4,offset:4,divisor:1},prevCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:0,divisor:1},aCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:16,divisor:1},nextCoord:{buffer:t.prop("positionBuffer"),stride:8,offset:24,divisor:1}}},n))}catch(t){e=a}return{fill:t({primitive:"triangle",elements:function(t,e){return e.triangles},offset:0,vert:o(["precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 position, positionFract;\n\nuniform vec4 color;\nuniform vec2 scale, scaleFract, translate, translateFract;\nuniform float pixelRatio, id;\nuniform vec4 viewport;\nuniform float opacity;\n\nvarying vec4 fragColor;\n\nconst float MAX_LINES = 256.;\n\nvoid main() {\n\tfloat depth = (MAX_LINES - 4. - id) / (MAX_LINES);\n\n\tvec2 position = position * scale + translate\n + positionFract * scale + translateFract\n + position * scaleFract\n + positionFract * scaleFract;\n\n\tgl_Position = vec4(position * 2.0 - 1.0, depth, 1);\n\n\tfragColor = color / 255.;\n\tfragColor.a *= opacity;\n}\n"]),frag:o(["precision highp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor;\n\nvoid main() {\n\tgl_FragColor = fragColor;\n}\n"]),uniforms:{scale:t.prop("scale"),color:t.prop("fill"),scaleFract:t.prop("scaleFract"),translateFract:t.prop("translateFract"),translate:t.prop("translate"),opacity:t.prop("opacity"),pixelRatio:t.context("pixelRatio"),id:t.prop("id"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{position:{buffer:t.prop("positionBuffer"),stride:8,offset:8},positionFract:{buffer:t.prop("positionFractBuffer"),stride:8,offset:8}},blend:n.blend,depth:{enable:!1},scissor:n.scissor,stencil:n.stencil,viewport:n.viewport}),rect:a,miter:e}},v.defaults={dashes:null,join:"miter",miterLimit:1,thickness:10,cap:"square",color:"black",opacity:1,overlay:!1,viewport:null,range:null,close:!1,fill:null},v.prototype.render=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];e.length&&(t=this).update.apply(t,e),this.draw()},v.prototype.draw=function(){for(var t=this,e=[],r=arguments.length;r--;)e[r]=arguments[r];return(e.length?e:this.passes).forEach(function(e,r){var n;if(e&&Array.isArray(e))return(n=t).draw.apply(n,e);"number"==typeof e&&(e=t.passes[e]),e&&e.count>1&&e.opacity&&(t.regl._refresh(),e.fill&&e.triangles&&e.triangles.length>2&&t.shaders.fill(e),e.thickness&&(e.scale[0]*e.viewport.width>v.precisionThreshold||e.scale[1]*e.viewport.height>v.precisionThreshold?t.shaders.rect(e):"rect"===e.join||!e.join&&(e.thickness<=2||e.count>=v.maxPoints)?t.shaders.rect(e):t.shaders.miter(e)))}),this},v.prototype.update=function(t){var e=this;if(t){null!=t.length?"number"==typeof t[0]&&(t=[{positions:t}]):Array.isArray(t)||(t=[t]);var r=this.regl,o=this.gl;if(t.forEach(function(t,h){var d=e.passes[h];if(void 0!==t)if(null!==t){if("number"==typeof t[0]&&(t={positions:t}),t=s(t,{positions:"positions points data coords",thickness:"thickness lineWidth lineWidths line-width linewidth width stroke-width strokewidth strokeWidth",join:"lineJoin linejoin join type mode",miterLimit:"miterlimit miterLimit",dashes:"dash dashes dasharray dash-array dashArray",color:"color colour stroke colors colours stroke-color strokeColor",fill:"fill fill-color fillColor",opacity:"alpha opacity",overlay:"overlay crease overlap intersect",close:"closed close closed-path closePath",range:"range dataBox",viewport:"viewport viewBox",hole:"holes hole hollow"}),d||(e.passes[h]=d={id:h,scale:null,scaleFract:null,translate:null,translateFract:null,count:0,hole:[],depth:0,dashLength:1,dashTexture:r.texture({channels:1,data:new Uint8Array([255]),width:1,height:1,mag:"linear",min:"linear"}),colorBuffer:r.buffer({usage:"dynamic",type:"uint8",data:new Uint8Array}),positionBuffer:r.buffer({usage:"dynamic",type:"float",data:new Uint8Array}),positionFractBuffer:r.buffer({usage:"dynamic",type:"float",data:new Uint8Array})},t=i({},v.defaults,t)),null!=t.thickness&&(d.thickness=parseFloat(t.thickness)),null!=t.opacity&&(d.opacity=parseFloat(t.opacity)),null!=t.miterLimit&&(d.miterLimit=parseFloat(t.miterLimit)),null!=t.overlay&&(d.overlay=!!t.overlay,h<v.maxLines&&(d.depth=2*(v.maxLines-1-h%v.maxLines)/v.maxLines-1)),null!=t.join&&(d.join=t.join),null!=t.hole&&(d.hole=t.hole),null!=t.fill&&(d.fill=t.fill?n(t.fill,"uint8"):null),null!=t.viewport&&(d.viewport=g(t.viewport)),d.viewport||(d.viewport=g([o.drawingBufferWidth,o.drawingBufferHeight])),null!=t.close&&(d.close=t.close),null===t.positions&&(t.positions=[]),t.positions){var m,y;if(t.positions.x&&t.positions.y){var x=t.positions.x,b=t.positions.y;y=d.count=Math.max(x.length,b.length),m=new Float64Array(2*y);for(var _=0;_<y;_++)m[2*_]=x[_],m[2*_+1]=b[_]}else m=l(t.positions,"float64"),y=d.count=Math.floor(m.length/2);var w=d.bounds=a(m,2);if(d.fill){for(var k=[],T={},M=0,A=0,S=0,E=d.count;A<E;A++){var L=m[2*A],C=m[2*A+1];isNaN(L)||isNaN(C)||null==L||null==C?(L=m[2*M],C=m[2*M+1],T[A]=M):M=A,k[S++]=L,k[S++]=C}for(var P=c(k,d.hole||[]),O=0,z=P.length;O<z;O++)null!=T[P[O]]&&(P[O]=T[P[O]]);d.triangles=P}var I=new Float64Array(m);u(I,2,w);var D=new Float64Array(2*y+6);d.close?m[0]===m[2*y-2]&&m[1]===m[2*y-1]?(D[0]=I[2*y-4],D[1]=I[2*y-3]):(D[0]=I[2*y-2],D[1]=I[2*y-1]):(D[0]=I[0],D[1]=I[1]),D.set(I,2),d.close?m[0]===m[2*y-2]&&m[1]===m[2*y-1]?(D[2*y+2]=I[2],D[2*y+3]=I[3],d.count-=1):(D[2*y+2]=I[0],D[2*y+3]=I[1],D[2*y+4]=I[2],D[2*y+5]=I[3]):(D[2*y+2]=I[2*y-2],D[2*y+3]=I[2*y-1],D[2*y+4]=I[2*y-2],D[2*y+5]=I[2*y-1]),d.positionBuffer(f(D)),d.positionFractBuffer(p(D))}if(t.range?d.range=t.range:d.range||(d.range=d.bounds),(t.range||t.positions)&&d.count){var R=d.bounds,F=R[2]-R[0],B=R[3]-R[1],N=d.range[2]-d.range[0],j=d.range[3]-d.range[1];d.scale=[F/N,B/j],d.translate=[-d.range[0]/N+R[0]/N||0,-d.range[1]/j+R[1]/j||0],d.scaleFract=p(d.scale),d.translateFract=p(d.translate)}if(t.dashes){var V,U=0;if(!t.dashes||t.dashes.length<2)U=1,V=new Uint8Array([255,255,255,255,255,255,255,255]);else{U=0;for(var q=0;q<t.dashes.length;++q)U+=t.dashes[q];V=new Uint8Array(U*v.dashMult);for(var H=0,G=255,Y=0;Y<2;Y++)for(var W=0;W<t.dashes.length;++W){for(var X=0,Z=t.dashes[W]*v.dashMult*.5;X<Z;++X)V[H++]=G;G^=255}}d.dashLength=U,d.dashTexture({channels:1,data:V,width:V.length,height:1,mag:"linear",min:"linear"},0,0)}if(t.color){var J=d.count,K=t.color;K||(K="transparent");var Q=new Uint8Array(4*J+4);if(Array.isArray(K)&&"number"!=typeof K[0]){for(var $=0;$<J;$++){var tt=n(K[$],"uint8");Q.set(tt,4*$)}Q.set(n(K[0],"uint8"),4*J)}else for(var et=n(K,"uint8"),rt=0;rt<J+1;rt++)Q.set(et,4*rt);d.colorBuffer({usage:"dynamic",type:"uint8",data:Q})}}else e.passes[h]=null}),t.length<this.passes.length){for(var h=t.length;h<this.passes.length;h++){var d=e.passes[h];d&&(d.colorBuffer.destroy(),d.positionBuffer.destroy(),d.dashTexture.destroy())}this.passes.length=t.length}for(var m=[],y=0;y<this.passes.length;y++)null!==e.passes[y]&&m.push(e.passes[y]);return this.passes=m,this}},v.prototype.destroy=function(){return this.passes.forEach(function(t){t.colorBuffer.destroy(),t.positionBuffer.destroy(),t.dashTexture.destroy()}),this.passes.length=0,this}},{"array-bounds":68,"array-normalize":493,"color-normalize":122,earcut:173,"es6-weak-map":494,"flatten-vertex-data":230,glslify:410,"object-assign":455,"parse-rect":460,"pick-by-alias":466,"to-float32":536}],493:[function(t,e,r){"use strict";var n=t("array-bounds");e.exports=function(t,e,r){if(!t||null==t.length)throw Error("Argument should be an array");null==e&&(e=1);null==r&&(r=n(t,e));for(var a=0;a<e;a++){var i=r[e+a],o=r[a],s=a,l=t.length;if(i===1/0&&o===-1/0)for(s=a;s<l;s+=e)t[s]=t[s]===i?1:t[s]===o?0:.5;else if(i===1/0)for(s=a;s<l;s+=e)t[s]=t[s]===i?1:0;else if(o===-1/0)for(s=a;s<l;s+=e)t[s]=t[s]===o?0:1;else{var c=i-o;for(s=a;s<l;s+=e)isNaN(t[s])||(t[s]=0===c?.5:(t[s]-o)/c)}}return t}},{"array-bounds":68}],494:[function(t,e,r){arguments[4][320][0].apply(r,arguments)},{"./is-implemented":495,"./polyfill":497,dup:320}],495:[function(t,e,r){arguments[4][321][0].apply(r,arguments)},{dup:321}],496:[function(t,e,r){arguments[4][322][0].apply(r,arguments)},{dup:322}],497:[function(t,e,r){arguments[4][323][0].apply(r,arguments)},{"./is-native-implemented":496,d:153,dup:323,"es5-ext/object/is-value":197,"es5-ext/object/set-prototype-of":203,"es5-ext/object/valid-object":207,"es5-ext/object/valid-value":208,"es5-ext/string/random-uniq":213,"es6-iterator/for-of":215,"es6-iterator/get":216,"es6-symbol":222}],498:[function(t,e,r){"use strict";function n(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=[],n=!0,a=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(n=(o=s.next()).done)&&(r.push(o.value),!e||r.length!==e);n=!0);}catch(t){a=!0,i=t}finally{try{n||null==s.return||s.return()}finally{if(a)throw i}}return r}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}()}function a(t){return function(t){if(Array.isArray(t)){for(var e=0,r=new Array(t.length);e<t.length;e++)r[e]=t[e];return r}}(t)||function(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance")}()}var i=t("color-normalize"),o=t("array-bounds"),s=t("color-id"),l=t("point-cluster"),c=t("object-assign"),u=t("glslify"),h=t("pick-by-alias"),f=t("update-diff"),p=t("flatten-vertex-data"),d=t("is-iexplorer"),g=t("to-float32"),v=t("parse-rect"),m=y;function y(t,e){var r=this;if(!(this instanceof y))return new y(t,e);"function"==typeof t?(e||(e={}),e.regl=t):(e=t,t=null),e&&e.length&&(e.positions=e);var n,a=(t=e.regl)._gl,i=[];this.tooManyColors=d,n=t.texture({data:new Uint8Array(1020),width:255,height:1,type:"uint8",format:"rgba",wrapS:"clamp",wrapT:"clamp",mag:"nearest",min:"nearest"}),c(this,{regl:t,gl:a,groups:[],markerCache:[null],markerTextures:[null],palette:i,paletteIds:{},paletteTexture:n,maxColors:255,maxSize:100,canvas:a.canvas}),this.update(e);var o={uniforms:{pixelRatio:t.context("pixelRatio"),palette:n,paletteSize:function(t,e){return[r.tooManyColors?0:255,n.height]},scale:t.prop("scale"),scaleFract:t.prop("scaleFract"),translate:t.prop("translate"),translateFract:t.prop("translateFract"),opacity:t.prop("opacity"),marker:t.prop("markerTexture")},attributes:{x:function(t,e){return e.xAttr||{buffer:e.positionBuffer,stride:8,offset:0}},y:function(t,e){return e.yAttr||{buffer:e.positionBuffer,stride:8,offset:4}},xFract:function(t,e){return e.xAttr?{constant:[0,0]}:{buffer:e.positionFractBuffer,stride:8,offset:0}},yFract:function(t,e){return e.yAttr?{constant:[0,0]}:{buffer:e.positionFractBuffer,stride:8,offset:4}},size:function(t,e){return e.size.length?{buffer:e.sizeBuffer,stride:2,offset:0}:{constant:[Math.round(255*e.size/r.maxSize)]}},borderSize:function(t,e){return e.borderSize.length?{buffer:e.sizeBuffer,stride:2,offset:1}:{constant:[Math.round(255*e.borderSize/r.maxSize)]}},colorId:function(t,e){return e.color.length?{buffer:e.colorBuffer,stride:r.tooManyColors?8:4,offset:0}:{constant:r.tooManyColors?i.slice(4*e.color,4*e.color+4):[e.color]}},borderColorId:function(t,e){return e.borderColor.length?{buffer:e.colorBuffer,stride:r.tooManyColors?8:4,offset:r.tooManyColors?4:2}:{constant:r.tooManyColors?i.slice(4*e.borderColor,4*e.borderColor+4):[e.borderColor]}},isActive:function(t,e){return!0===e.activation?{constant:[1]}:e.activation?e.activation:{constant:[0]}}},blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:"one minus dst alpha",dstAlpha:"one"}},scissor:{enable:!0,box:t.prop("viewport")},viewport:t.prop("viewport"),stencil:{enable:!1},depth:{enable:!1},elements:t.prop("elements"),count:t.prop("count"),offset:t.prop("offset"),primitive:"points"},s=c({},o);s.frag=u(["precision highp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor, fragBorderColor;\nvarying float fragWidth, fragBorderColorLevel, fragColorLevel;\n\nuniform sampler2D marker;\nuniform float pixelRatio, opacity;\n\nfloat smoothStep(float x, float y) {\n return 1.0 / (1.0 + exp(50.0*(x - y)));\n}\n\nvoid main() {\n float dist = texture2D(marker, gl_PointCoord).r, delta = fragWidth;\n\n // max-distance alpha\n if (dist < 0.003) discard;\n\n // null-border case\n if (fragBorderColorLevel == fragColorLevel || fragBorderColor.a == 0.) {\n float colorAmt = smoothstep(.5 - delta, .5 + delta, dist);\n gl_FragColor = vec4(fragColor.rgb, colorAmt * fragColor.a * opacity);\n }\n else {\n float borderColorAmt = smoothstep(fragBorderColorLevel - delta, fragBorderColorLevel + delta, dist);\n float colorAmt = smoothstep(fragColorLevel - delta, fragColorLevel + delta, dist);\n\n vec4 color = fragBorderColor;\n color.a *= borderColorAmt;\n color = mix(color, fragColor, colorAmt);\n color.a *= opacity;\n\n gl_FragColor = color;\n }\n\n}\n"]),s.vert=u(["precision highp float;\n#define GLSLIFY 1\n\nattribute float x, y, xFract, yFract;\nattribute float size, borderSize;\nattribute vec4 colorId, borderColorId;\nattribute float isActive;\n\nuniform vec2 scale, scaleFract, translate, translateFract, paletteSize;\nuniform float pixelRatio;\nuniform sampler2D palette;\n\nconst float maxSize = 100.;\nconst float borderLevel = .5;\n\nvarying vec4 fragColor, fragBorderColor;\nvarying float fragPointSize, fragBorderRadius, fragWidth, fragBorderColorLevel, fragColorLevel;\n\nbool isDirect = (paletteSize.x < 1.);\n\nvec4 getColor(vec4 id) {\n return isDirect ? id / 255. : texture2D(palette,\n vec2(\n (id.x + .5) / paletteSize.x,\n (id.y + .5) / paletteSize.y\n )\n );\n}\n\nvoid main() {\n if (isActive == 0.) return;\n\n vec2 position = vec2(x, y);\n vec2 positionFract = vec2(xFract, yFract);\n\n vec4 color = getColor(colorId);\n vec4 borderColor = getColor(borderColorId);\n\n float size = size * maxSize / 255.;\n float borderSize = borderSize * maxSize / 255.;\n\n gl_PointSize = 2. * size * pixelRatio;\n fragPointSize = size * pixelRatio;\n\n vec2 pos = (position + translate) * scale\n + (positionFract + translateFract) * scale\n + (position + translate) * scaleFract\n + (positionFract + translateFract) * scaleFract;\n\n gl_Position = vec4(pos * 2. - 1., 0, 1);\n\n fragColor = color;\n fragBorderColor = borderColor;\n fragWidth = 1. / gl_PointSize;\n\n fragBorderColorLevel = clamp(borderLevel - borderLevel * borderSize / size, 0., 1.);\n fragColorLevel = clamp(borderLevel + (1. - borderLevel) * borderSize / size, 0., 1.);\n}"]),this.drawMarker=t(s);var l=c({},o);l.frag=u(["precision highp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor, fragBorderColor;\n\nuniform float opacity;\nvarying float fragBorderRadius, fragWidth;\n\nfloat smoothStep(float edge0, float edge1, float x) {\n\tfloat t;\n\tt = clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\n\treturn t * t * (3.0 - 2.0 * t);\n}\n\nvoid main() {\n\tfloat radius, alpha = 1.0, delta = fragWidth;\n\n\tradius = length(2.0 * gl_PointCoord.xy - 1.0);\n\n\tif (radius > 1.0 + delta) {\n\t\tdiscard;\n\t}\n\n\talpha -= smoothstep(1.0 - delta, 1.0 + delta, radius);\n\n\tfloat borderRadius = fragBorderRadius;\n\tfloat ratio = smoothstep(borderRadius - delta, borderRadius + delta, radius);\n\tvec4 color = mix(fragColor, fragBorderColor, ratio);\n\tcolor.a *= alpha * opacity;\n\tgl_FragColor = color;\n}\n"]),l.vert=u(["precision highp float;\n#define GLSLIFY 1\n\nattribute float x, y, xFract, yFract;\nattribute float size, borderSize;\nattribute vec4 colorId, borderColorId;\nattribute float isActive;\n\nuniform vec2 scale, scaleFract, translate, translateFract;\nuniform float pixelRatio;\nuniform sampler2D palette;\nuniform vec2 paletteSize;\n\nconst float maxSize = 100.;\n\nvarying vec4 fragColor, fragBorderColor;\nvarying float fragBorderRadius, fragWidth;\n\nbool isDirect = (paletteSize.x < 1.);\n\nvec4 getColor(vec4 id) {\n return isDirect ? id / 255. : texture2D(palette,\n vec2(\n (id.x + .5) / paletteSize.x,\n (id.y + .5) / paletteSize.y\n )\n );\n}\n\nvoid main() {\n // ignore inactive points\n if (isActive == 0.) return;\n\n vec2 position = vec2(x, y);\n vec2 positionFract = vec2(xFract, yFract);\n\n vec4 color = getColor(colorId);\n vec4 borderColor = getColor(borderColorId);\n\n float size = size * maxSize / 255.;\n float borderSize = borderSize * maxSize / 255.;\n\n gl_PointSize = (size + borderSize) * pixelRatio;\n\n vec2 pos = (position + translate) * scale\n + (positionFract + translateFract) * scale\n + (position + translate) * scaleFract\n + (positionFract + translateFract) * scaleFract;\n\n gl_Position = vec4(pos * 2. - 1., 0, 1);\n\n fragBorderRadius = 1. - 2. * borderSize / (size + borderSize);\n fragColor = color;\n fragBorderColor = borderColor.a == 0. || borderSize == 0. ? vec4(color.rgb, 0.) : borderColor;\n fragWidth = 1. / gl_PointSize;\n}\n"]),d&&(l.frag=l.frag.replace("smoothstep","smoothStep"),s.frag=s.frag.replace("smoothstep","smoothStep")),this.drawCircle=t(l)}y.defaults={color:"black",borderColor:"transparent",borderSize:0,size:12,opacity:1,marker:void 0,viewport:null,range:null,pixelSize:null,count:0,offset:0,bounds:null,positions:[],snap:1e4},y.prototype.render=function(){return arguments.length&&this.update.apply(this,arguments),this.draw(),this},y.prototype.draw=function(){for(var t=this,e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];var a=this.groups;if(1===r.length&&Array.isArray(r[0])&&(null===r[0][0]||Array.isArray(r[0][0]))&&(r=r[0]),this.regl._refresh(),r.length)for(var i=0;i<r.length;i++)this.drawItem(i,r[i]);else a.forEach(function(e,r){t.drawItem(r)});return this},y.prototype.drawItem=function(t,e){var r=this.groups,n=r[t];if("number"==typeof e&&(t=e,n=r[e],e=null),n&&n.count&&n.opacity){n.activation[0]&&this.drawCircle(this.getMarkerDrawOptions(0,n,e));for(var i=[],o=1;o<n.activation.length;o++)n.activation[o]&&(!0===n.activation[o]||n.activation[o].data.length)&&i.push.apply(i,a(this.getMarkerDrawOptions(o,n,e)));i.length&&this.drawMarker(i)}},y.prototype.getMarkerDrawOptions=function(t,e,r){var a=e.range,i=e.tree,o=e.viewport,s=e.activation,l=e.selectionBuffer,u=e.count;this.regl;if(!i)return r?[c({},e,{markerTexture:this.markerTextures[t],activation:s[t],count:r.length,elements:r,offset:0})]:[c({},e,{markerTexture:this.markerTextures[t],activation:s[t],offset:0})];var h=[],f=i.range(a,{lod:!0,px:[(a[2]-a[0])/o.width,(a[3]-a[1])/o.height]});if(r){for(var p=s[t].data,d=new Uint8Array(u),g=0;g<r.length;g++){var v=r[g];d[v]=p?p[v]:1}l.subdata(d)}for(var m=f.length;m--;){var y=n(f[m],2),x=y[0],b=y[1];h.push(c({},e,{markerTexture:this.markerTextures[t],activation:r?l:s[t],offset:x,count:b-x}))}return h},y.prototype.update=function(){for(var t=this,e=arguments.length,r=new Array(e),n=0;n<e;n++)r[n]=arguments[n];if(r.length){1===r.length&&Array.isArray(r[0])&&(r=r[0]);var a=this.groups,i=this.gl,s=this.regl,u=this.maxSize,d=this.maxColors,m=this.palette;this.groups=a=r.map(function(e,r){var n=a[r];if(void 0===e)return n;null===e?e={positions:null}:"function"==typeof e?e={ondraw:e}:"number"==typeof e[0]&&(e={positions:e}),null===(e=h(e,{positions:"positions data points",snap:"snap cluster lod tree",size:"sizes size radius",borderSize:"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline",color:"colors color fill fill-color fillColor",borderColor:"borderColors borderColor stroke stroke-color strokeColor",marker:"markers marker shape",range:"range dataBox databox",viewport:"viewport viewPort viewBox viewbox",opacity:"opacity alpha transparency",bounds:"bound bounds boundaries limits",tooManyColors:"tooManyColors palette paletteMode optimizePalette enablePalette"})).positions&&(e.positions=[]),null!=e.tooManyColors&&(t.tooManyColors=e.tooManyColors),n||(a[r]=n={id:r,scale:null,translate:null,scaleFract:null,translateFract:null,activation:[],selectionBuffer:s.buffer({data:new Uint8Array(0),usage:"stream",type:"uint8"}),sizeBuffer:s.buffer({data:new Uint8Array(0),usage:"dynamic",type:"uint8"}),colorBuffer:s.buffer({data:new Uint8Array(0),usage:"dynamic",type:"uint8"}),positionBuffer:s.buffer({data:new Uint8Array(0),usage:"dynamic",type:"float"}),positionFractBuffer:s.buffer({data:new Uint8Array(0),usage:"dynamic",type:"float"})},e=c({},y.defaults,e)),!e.positions||"marker"in e||(e.marker=n.marker,delete n.marker),!e.marker||"positions"in e||(e.positions=n.positions,delete n.positions);var x=0,b=0;if(f(n,e,[{snap:!0,size:function(t,e){return null==t&&(t=y.defaults.size),x+=t&&t.length?1:0,t},borderSize:function(t,e){return null==t&&(t=y.defaults.borderSize),x+=t&&t.length?1:0,t},opacity:parseFloat,color:function(e,r){return null==e&&(e=y.defaults.color),e=t.updateColor(e),b++,e},borderColor:function(e,r){return null==e&&(e=y.defaults.borderColor),e=t.updateColor(e),b++,e},bounds:function(t,e,r){return"range"in r||(r.range=null),t},positions:function(t,e,r){var n=e.snap,a=e.positionBuffer,i=e.positionFractBuffer,c=e.selectionBuffer;if(t.x||t.y)return t.x.length?e.xAttr={buffer:s.buffer(t.x),offset:0,stride:4,count:t.x.length}:e.xAttr={buffer:t.x.buffer,offset:4*t.x.offset||0,stride:4*(t.x.stride||1),count:t.x.count},t.y.length?e.yAttr={buffer:s.buffer(t.y),offset:0,stride:4,count:t.y.length}:e.yAttr={buffer:t.y.buffer,offset:4*t.y.offset||0,stride:4*(t.y.stride||1),count:t.y.count},e.count=Math.max(e.xAttr.count,e.yAttr.count),t;t=p(t,"float64");var u=e.count=Math.floor(t.length/2),h=e.bounds=u?o(t,2):null;if(r.range||e.range||(delete e.range,r.range=h),r.marker||e.marker||(delete e.marker,r.marker=null),n&&(!0===n||u>n)?e.tree=l(t,{bounds:h}):n&&n.length&&(e.tree=n),e.tree){var f={primitive:"points",usage:"static",data:e.tree,type:"uint32"};e.elements?e.elements(f):e.elements=s.elements(f)}return a({data:g.float(t),usage:"dynamic"}),i({data:g.fract(t),usage:"dynamic"}),c({data:new Uint8Array(u),type:"uint8",usage:"stream"}),t}},{marker:function(e,r,n){var a=r.activation;if(a.forEach(function(t){return t&&t.destroy&&t.destroy()}),a.length=0,e&&"number"!=typeof e[0]){for(var i=[],o=0,l=Math.min(e.length,r.count);o<l;o++){var c=t.addMarker(e[o]);i[c]||(i[c]=new Uint8Array(r.count)),i[c][o]=1}for(var u=0;u<i.length;u++)if(i[u]){var h={data:i[u],type:"uint8",usage:"static"};a[u]?a[u](h):a[u]=s.buffer(h),a[u].data=i[u]}}else{a[t.addMarker(e)]=!0}return e},range:function(t,e,r){var n=e.bounds;if(n)return t||(t=n),e.scale=[1/(t[2]-t[0]),1/(t[3]-t[1])],e.translate=[-t[0],-t[1]],e.scaleFract=g.fract(e.scale),e.translateFract=g.fract(e.translate),t},viewport:function(t){return v(t||[i.drawingBufferWidth,i.drawingBufferHeight])}}]),x){var _=n,w=_.count,k=_.size,T=_.borderSize,M=_.sizeBuffer,A=new Uint8Array(2*w);if(k.length||T.length)for(var S=0;S<w;S++)A[2*S]=Math.round(255*(null==k[S]?k:k[S])/u),A[2*S+1]=Math.round(255*(null==T[S]?T:T[S])/u);M({data:A,usage:"dynamic"})}if(b){var E,L=n,C=L.count,P=L.color,O=L.borderColor,z=L.colorBuffer;if(t.tooManyColors){if(P.length||O.length){E=new Uint8Array(8*C);for(var I=0;I<C;I++){var D=P[I];E[8*I]=m[4*D],E[8*I+1]=m[4*D+1],E[8*I+2]=m[4*D+2],E[8*I+3]=m[4*D+3];var R=O[I];E[8*I+4]=m[4*R],E[8*I+5]=m[4*R+1],E[8*I+6]=m[4*R+2],E[8*I+7]=m[4*R+3]}}}else if(P.length||O.length){E=new Uint8Array(4*C+2);for(var F=0;F<C;F++)null!=P[F]&&(E[4*F]=P[F]%d,E[4*F+1]=Math.floor(P[F]/d)),null!=O[F]&&(E[4*F+2]=O[F]%d,E[4*F+3]=Math.floor(O[F]/d))}z({data:E||new Uint8Array(0),type:"uint8",usage:"dynamic"})}return n})}},y.prototype.addMarker=function(t){var e,r=this.markerTextures,n=this.regl,a=this.markerCache,i=null==t?0:a.indexOf(t);if(i>=0)return i;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)e=t;else{e=new Uint8Array(t.length);for(var o=0,s=t.length;o<s;o++)e[o]=255*t[o]}var l=Math.floor(Math.sqrt(e.length));return i=r.length,a.push(t),r.push(n.texture({channels:1,data:e,radius:l,mag:"linear",min:"linear"})),i},y.prototype.updateColor=function(t){var e=this.paletteIds,r=this.palette,n=this.maxColors;Array.isArray(t)||(t=[t]);var a=[];if("number"==typeof t[0]){var o=[];if(Array.isArray(t))for(var l=0;l<t.length;l+=4)o.push(t.slice(l,l+4));else for(var c=0;c<t.length;c+=4)o.push(t.subarray(c,c+4));t=o}for(var u=0;u<t.length;u++){var h=t[u];h=i(h,"uint8");var f=s(h,!1);if(null==e[f]){var p=r.length;e[f]=Math.floor(p/4),r[p]=h[0],r[p+1]=h[1],r[p+2]=h[2],r[p+3]=h[3]}a[u]=e[f]}return!this.tooManyColors&&r.length>4*n&&(this.tooManyColors=!0),this.updatePalette(r),1===a.length?a[0]:a},y.prototype.updatePalette=function(t){if(!this.tooManyColors){var e=this.maxColors,r=this.paletteTexture,n=Math.ceil(.25*t.length/e);if(n>1)for(var a=.25*(t=t.slice()).length%e;a<n*e;a++)t.push(0,0,0,0);r.height<n&&r.resize(e,n),r.subimage({width:Math.min(.25*t.length,e),height:n,data:t},0,0)}},y.prototype.destroy=function(){return this.groups.forEach(function(t){t.sizeBuffer.destroy(),t.positionBuffer.destroy(),t.positionFractBuffer.destroy(),t.colorBuffer.destroy(),t.activation.forEach(function(t){return t&&t.destroy&&t.destroy()}),t.selectionBuffer.destroy(),t.elements&&t.elements.destroy()}),this.groups.length=0,this.paletteTexture.destroy(),this.markerTextures.forEach(function(t){return t&&t.destroy&&t.destroy()}),this};var x=t("object-assign");e.exports=function(t,e){var r=new m(t,e),n=r.render.bind(r);return x(n,{render:n,update:r.update.bind(r),draw:r.draw.bind(r),destroy:r.destroy.bind(r),regl:r.regl,gl:r.gl,canvas:r.gl.canvas,groups:r.groups,markers:r.markerCache,palette:r.palette}),n}},{"array-bounds":68,"color-id":120,"color-normalize":122,"flatten-vertex-data":230,glslify:410,"is-iexplorer":420,"object-assign":455,"parse-rect":460,"pick-by-alias":466,"point-cluster":470,"to-float32":536,"update-diff":547}],499:[function(t,e,r){"use strict";var n=t("regl-scatter2d"),a=t("pick-by-alias"),i=t("array-bounds"),o=t("raf"),s=t("array-range"),l=t("parse-rect"),c=t("flatten-vertex-data");function u(t,e){if(!(this instanceof u))return new u(t,e);this.traces=[],this.passes={},this.regl=t,this.scatter=n(t),this.canvas=this.scatter.canvas}function h(t,e,r){return(null!=t.id?t.id:t)<<16|(255&e)<<8|255&r}function f(t,e,r){var n,a,i,o,s=t[e],l=t[r];return s.length>2?(s[0],s[2],n=s[1],a=s[3]):s.length?(n=s[0],a=s[1]):(s.x,n=s.y,s.x+s.width,a=s.y+s.height),l.length>2?(i=l[0],o=l[2],l[1],l[3]):l.length?(i=l[0],o=l[1]):(i=l.x,l.y,o=l.x+l.width,l.y+l.height),[i,n,o,a]}function p(t){if("number"==typeof t)return[t,t,t,t];if(2===t.length)return[t[0],t[1],t[0],t[1]];var e=l(t);return[e.x,e.y,e.x+e.width,e.y+e.height]}e.exports=u,u.prototype.render=function(){for(var t,e=this,r=[],n=arguments.length;n--;)r[n]=arguments[n];return r.length&&(t=this).update.apply(t,r),this.regl.attributes.preserveDrawingBuffer?this.draw():(this.dirty?null==this.planned&&(this.planned=o(function(){e.draw(),e.dirty=!0,e.planned=null})):(this.draw(),this.dirty=!0,o(function(){e.dirty=!1})),this)},u.prototype.update=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];if(e.length){for(var n=0;n<e.length;n++)this.updateItem(n,e[n]);this.traces=this.traces.filter(Boolean);for(var a=[],i=0,o=0;o<this.traces.length;o++){for(var s=this.traces[o],l=this.traces[o].passes,c=0;c<l.length;c++)a.push(this.passes[l[c]]);s.passOffset=i,i+=s.passes.length}return(t=this.scatter).update.apply(t,a),this}},u.prototype.updateItem=function(t,e){var r=this.regl;if(null===e)return this.traces[t]=null,this;if(!e)return this;var n,o=a(e,{data:"data items columns rows values dimensions samples x",snap:"snap cluster",size:"sizes size radius",color:"colors color fill fill-color fillColor",opacity:"opacity alpha transparency opaque",borderSize:"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline",borderColor:"borderColors borderColor bordercolor stroke stroke-color strokeColor",marker:"markers marker shape",range:"range ranges databox dataBox",viewport:"viewport viewBox viewbox",domain:"domain domains area areas",padding:"pad padding paddings pads margin margins",transpose:"transpose transposed",diagonal:"diagonal diag showDiagonal",upper:"upper up top upperhalf upperHalf showupperhalf showUpper showUpperHalf",lower:"lower low bottom lowerhalf lowerHalf showlowerhalf showLowerHalf showLower"}),s=this.traces[t]||(this.traces[t]={id:t,buffer:r.buffer({usage:"dynamic",type:"float",data:new Uint8Array}),color:"black",marker:null,size:12,borderColor:"transparent",borderSize:1,viewport:l([r._gl.drawingBufferWidth,r._gl.drawingBufferHeight]),padding:[0,0,0,0],opacity:1,diagonal:!0,upper:!0,lower:!0});if(null!=o.color&&(s.color=o.color),null!=o.size&&(s.size=o.size),null!=o.marker&&(s.marker=o.marker),null!=o.borderColor&&(s.borderColor=o.borderColor),null!=o.borderSize&&(s.borderSize=o.borderSize),null!=o.opacity&&(s.opacity=o.opacity),o.viewport&&(s.viewport=l(o.viewport)),null!=o.diagonal&&(s.diagonal=o.diagonal),null!=o.upper&&(s.upper=o.upper),null!=o.lower&&(s.lower=o.lower),o.data){s.buffer(c(o.data)),s.columns=o.data.length,s.count=o.data[0].length,s.bounds=[];for(var u=0;u<s.columns;u++)s.bounds[u]=i(o.data[u],1)}o.range&&(s.range=o.range,n=s.range&&"number"!=typeof s.range[0]),o.domain&&(s.domain=o.domain);var d=!1;null!=o.padding&&(Array.isArray(o.padding)&&o.padding.length===s.columns&&"number"==typeof o.padding[o.padding.length-1]?(s.padding=o.padding.map(p),d=!0):s.padding=p(o.padding));var g=s.columns,v=s.count,m=s.viewport.width,y=s.viewport.height,x=s.viewport.x,b=s.viewport.y,_=m/g,w=y/g;s.passes=[];for(var k=0;k<g;k++)for(var T=0;T<g;T++)if((s.diagonal||T!==k)&&(s.upper||!(k>T))&&(s.lower||!(k<T))){var M=h(s.id,k,T),A=this.passes[M]||(this.passes[M]={});if(o.data&&(o.transpose?A.positions={x:{buffer:s.buffer,offset:T,count:v,stride:g},y:{buffer:s.buffer,offset:k,count:v,stride:g}}:A.positions={x:{buffer:s.buffer,offset:T*v,count:v},y:{buffer:s.buffer,offset:k*v,count:v}},A.bounds=f(s.bounds,k,T)),o.domain||o.viewport||o.data){var S=d?f(s.padding,k,T):s.padding;if(s.domain){var E=f(s.domain,k,T),L=E[0],C=E[1],P=E[2],O=E[3];A.viewport=[x+L*m+S[0],b+C*y+S[1],x+P*m-S[2],b+O*y-S[3]]}else A.viewport=[x+T*_+_*S[0],b+k*w+w*S[1],x+(T+1)*_-_*S[2],b+(k+1)*w-w*S[3]]}o.color&&(A.color=s.color),o.size&&(A.size=s.size),o.marker&&(A.marker=s.marker),o.borderSize&&(A.borderSize=s.borderSize),o.borderColor&&(A.borderColor=s.borderColor),o.opacity&&(A.opacity=s.opacity),o.range&&(A.range=n?f(s.range,k,T):s.range||A.bounds),s.passes.push(M)}return this},u.prototype.draw=function(){for(var t,e=[],r=arguments.length;r--;)e[r]=arguments[r];if(e.length){for(var n=[],a=0;a<e.length;a++)if("number"==typeof e[a]){var i=this.traces[e[a]],o=i.passes,l=i.passOffset;n.push.apply(n,s(l,l+o.length))}else if(e[a].length){var c=e[a],u=this.traces[a],h=u.passes,f=u.passOffset;h=h.map(function(t,e){n[f+e]=c})}(t=this.scatter).draw.apply(t,n)}else this.scatter.draw();return this},u.prototype.destroy=function(){return this.traces.forEach(function(t){t.buffer&&t.buffer.destroy&&t.buffer.destroy()}),this.traces=null,this.passes=null,this.scatter.destroy(),this}},{"array-bounds":68,"array-range":69,"flatten-vertex-data":230,"parse-rect":460,"pick-by-alias":466,raf:485,"regl-scatter2d":498}],500:[function(t,e,r){var n,a;n=this,a=function(){function t(t,e){this.id=V++,this.type=t,this.data=e}function e(t){return"["+function t(e){if(0===e.length)return[];var r=e.charAt(0),n=e.charAt(e.length-1);if(1<e.length&&r===n&&('"'===r||"'"===r))return['"'+e.substr(1,e.length-2).replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'];if(r=/\[(false|true|null|\d+|'[^']*'|"[^"]*")\]/.exec(e))return t(e.substr(0,r.index)).concat(t(r[1])).concat(t(e.substr(r.index+r[0].length)));if(1===(r=e.split(".")).length)return['"'+e.replace(/\\/g,"\\\\").replace(/"/g,'\\"')+'"'];for(e=[],n=0;n<r.length;++n)e=e.concat(t(r[n]));return e}(t).join("][")+"]"}function r(t){return"string"==typeof t?t.split():t}function n(t){return"string"==typeof t?document.querySelector(t):t}function a(t){var e,a,i,o,s=t||{};t={};var l=[],c=[],u="undefined"==typeof window?1:window.devicePixelRatio,h=!1,f=function(t){},p=function(){};if("string"==typeof s?e=document.querySelector(s):"object"==typeof s&&("string"==typeof s.nodeName&&"function"==typeof s.appendChild&&"function"==typeof s.getBoundingClientRect?e=s:"function"==typeof s.drawArrays||"function"==typeof s.drawElements?i=(o=s).canvas:("gl"in s?o=s.gl:"canvas"in s?i=n(s.canvas):"container"in s&&(a=n(s.container)),"attributes"in s&&(t=s.attributes),"extensions"in s&&(l=r(s.extensions)),"optionalExtensions"in s&&(c=r(s.optionalExtensions)),"onDone"in s&&(f=s.onDone),"profile"in s&&(h=!!s.profile),"pixelRatio"in s&&(u=+s.pixelRatio))),e&&("canvas"===e.nodeName.toLowerCase()?i=e:a=e),!o){if(!i){if(!(e=function(t,e,r){function n(){var e=window.innerWidth,n=window.innerHeight;t!==document.body&&(e=(n=t.getBoundingClientRect()).right-n.left,n=n.bottom-n.top),a.width=r*e,a.height=r*n,j(a.style,{width:e+"px",height:n+"px"})}var a=document.createElement("canvas");return j(a.style,{border:0,margin:0,padding:0,top:0,left:0}),t.appendChild(a),t===document.body&&(a.style.position="absolute",j(t.style,{margin:0,padding:0})),window.addEventListener("resize",n,!1),n(),{canvas:a,onDestroy:function(){window.removeEventListener("resize",n),t.removeChild(a)}}}(a||document.body,0,u)))return null;i=e.canvas,p=e.onDestroy}o=function(t,e){function r(r){try{return t.getContext(r,e)}catch(t){return null}}return r("webgl")||r("experimental-webgl")||r("webgl-experimental")}(i,t)}return o?{gl:o,canvas:i,container:a,extensions:l,optionalExtensions:c,pixelRatio:u,profile:h,onDone:f,onDestroy:p}:(p(),f("webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org"),null)}function i(t,e){for(var r=Array(t),n=0;n<t;++n)r[n]=e(n);return r}function o(t){var e,r;return e=(65535<t)<<4,e|=r=(255<(t>>>=e))<<3,(e|=r=(15<(t>>>=r))<<2)|(r=(3<(t>>>=r))<<1)|t>>>r>>1}function s(){function t(t){t:{for(var e=16;268435456>=e;e*=16)if(t<=e){t=e;break t}t=0}return 0<(e=r[o(t)>>2]).length?e.pop():new ArrayBuffer(t)}function e(t){r[o(t.byteLength)>>2].push(t)}var r=i(8,function(){return[]});return{alloc:t,free:e,allocType:function(e,r){var n=null;switch(e){case 5120:n=new Int8Array(t(r),0,r);break;case 5121:n=new Uint8Array(t(r),0,r);break;case 5122:n=new Int16Array(t(2*r),0,r);break;case 5123:n=new Uint16Array(t(2*r),0,r);break;case 5124:n=new Int32Array(t(4*r),0,r);break;case 5125:n=new Uint32Array(t(4*r),0,r);break;case 5126:n=new Float32Array(t(4*r),0,r);break;default:return null}return n.length!==r?n.subarray(0,r):n},freeType:function(t){e(t.buffer)}}}function l(t){return!!t&&"object"==typeof t&&Array.isArray(t.shape)&&Array.isArray(t.stride)&&"number"==typeof t.offset&&t.shape.length===t.stride.length&&(Array.isArray(t.data)||W(t.data))}function c(t,e,r,n,a,i){for(var o=0;o<e;++o)for(var s=t[o],l=0;l<r;++l)for(var c=s[l],u=0;u<n;++u)a[i++]=c[u]}function u(t){return 0|J[Object.prototype.toString.call(t)]}function h(t,e){for(var r=0;r<e.length;++r)t[r]=e[r]}function f(t,e,r,n,a,i,o){for(var s=0,l=0;l<r;++l)for(var c=0;c<n;++c)t[s++]=e[a*l+i*c+o]}function p(t,e,r,n){function a(e){this.id=c++,this.buffer=t.createBuffer(),this.type=e,this.usage=35044,this.byteLength=0,this.dimension=1,this.dtype=5121,this.persistentData=null,r.profile&&(this.stats={size:0})}function i(e,r,n){e.byteLength=r.byteLength,t.bufferData(e.type,r,n)}function o(t,e,r,n,a,o){if(t.usage=r,Array.isArray(e)){if(t.dtype=n||5126,0<e.length)if(Array.isArray(e[0])){a=tt(e);for(var s=n=1;s<a.length;++s)n*=a[s];t.dimension=n,i(t,e=$(e,a,t.dtype),r),o?t.persistentData=e:G.freeType(e)}else"number"==typeof e[0]?(t.dimension=a,h(a=G.allocType(t.dtype,e.length),e),i(t,a,r),o?t.persistentData=a:G.freeType(a)):W(e[0])&&(t.dimension=e[0].length,t.dtype=n||u(e[0])||5126,i(t,e=$(e,[e.length,e[0].length],t.dtype),r),o?t.persistentData=e:G.freeType(e))}else if(W(e))t.dtype=n||u(e),t.dimension=a,i(t,e,r),o&&(t.persistentData=new Uint8Array(new Uint8Array(e.buffer)));else if(l(e)){a=e.shape;var c=e.stride,p=(s=e.offset,0),d=0,g=0,v=0;1===a.length?(p=a[0],d=1,g=c[0],v=0):2===a.length&&(p=a[0],d=a[1],g=c[0],v=c[1]),t.dtype=n||u(e.data)||5126,t.dimension=d,f(a=G.allocType(t.dtype,p*d),e.data,p,d,g,v,s),i(t,a,r),o?t.persistentData=a:G.freeType(a)}}function s(r){e.bufferCount--;for(var a=0;a<n.state.length;++a){var i=n.state[a];i.buffer===r&&(t.disableVertexAttribArray(a),i.buffer=null)}t.deleteBuffer(r.buffer),r.buffer=null,delete p[r.id]}var c=0,p={};a.prototype.bind=function(){t.bindBuffer(this.type,this.buffer)},a.prototype.destroy=function(){s(this)};var d=[];return r.profile&&(e.getTotalBufferSize=function(){var t=0;return Object.keys(p).forEach(function(e){t+=p[e].stats.size}),t}),{create:function(n,i,c,d){function g(e){var n=35044,a=null,i=0,s=0,c=1;return Array.isArray(e)||W(e)||l(e)?a=e:"number"==typeof e?i=0|e:e&&("data"in e&&(a=e.data),"usage"in e&&(n=Q[e.usage]),"type"in e&&(s=K[e.type]),"dimension"in e&&(c=0|e.dimension),"length"in e&&(i=0|e.length)),v.bind(),a?o(v,a,n,s,c,d):(i&&t.bufferData(v.type,i,n),v.dtype=s||5121,v.usage=n,v.dimension=c,v.byteLength=i),r.profile&&(v.stats.size=v.byteLength*et[v.dtype]),g}e.bufferCount++;var v=new a(i);return p[v.id]=v,c||g(n),g._reglType="buffer",g._buffer=v,g.subdata=function(e,r){var n,a=0|(r||0);if(v.bind(),W(e))t.bufferSubData(v.type,a,e);else if(Array.isArray(e)){if(0<e.length)if("number"==typeof e[0]){var i=G.allocType(v.dtype,e.length);h(i,e),t.bufferSubData(v.type,a,i),G.freeType(i)}else(Array.isArray(e[0])||W(e[0]))&&(n=tt(e),i=$(e,n,v.dtype),t.bufferSubData(v.type,a,i),G.freeType(i))}else if(l(e)){n=e.shape;var o=e.stride,s=i=0,c=0,p=0;1===n.length?(i=n[0],s=1,c=o[0],p=0):2===n.length&&(i=n[0],s=n[1],c=o[0],p=o[1]),n=Array.isArray(e.data)?v.dtype:u(e.data),f(n=G.allocType(n,i*s),e.data,i,s,c,p,e.offset),t.bufferSubData(v.type,a,n),G.freeType(n)}return g},r.profile&&(g.stats=v.stats),g.destroy=function(){s(v)},g},createStream:function(t,e){var r=d.pop();return r||(r=new a(t)),r.bind(),o(r,e,35040,0,1,!1),r},destroyStream:function(t){d.push(t)},clear:function(){X(p).forEach(s),d.forEach(s)},getBuffer:function(t){return t&&t._buffer instanceof a?t._buffer:null},restore:function(){X(p).forEach(function(e){e.buffer=t.createBuffer(),t.bindBuffer(e.type,e.buffer),t.bufferData(e.type,e.persistentData||e.byteLength,e.usage)})},_initBuffer:o}}function d(t,e,r,n){function a(t){this.id=c++,s[this.id]=this,this.buffer=t,this.primType=4,this.type=this.vertCount=0}function i(n,a,i,o,s,c,u){if(n.buffer.bind(),a){var h=u;u||W(a)&&(!l(a)||W(a.data))||(h=e.oes_element_index_uint?5125:5123),r._initBuffer(n.buffer,a,i,h,3)}else t.bufferData(34963,c,i),n.buffer.dtype=h||5121,n.buffer.usage=i,n.buffer.dimension=3,n.buffer.byteLength=c;if(h=u,!u){switch(n.buffer.dtype){case 5121:case 5120:h=5121;break;case 5123:case 5122:h=5123;break;case 5125:case 5124:h=5125}n.buffer.dtype=h}n.type=h,0>(a=s)&&(a=n.buffer.byteLength,5123===h?a>>=1:5125===h&&(a>>=2)),n.vertCount=a,a=o,0>o&&(a=4,1===(o=n.buffer.dimension)&&(a=0),2===o&&(a=1),3===o&&(a=4)),n.primType=a}function o(t){n.elementsCount--,delete s[t.id],t.buffer.destroy(),t.buffer=null}var s={},c=0,u={uint8:5121,uint16:5123};e.oes_element_index_uint&&(u.uint32=5125),a.prototype.bind=function(){this.buffer.bind()};var h=[];return{create:function(t,e){function s(t){if(t)if("number"==typeof t)c(t),h.primType=4,h.vertCount=0|t,h.type=5121;else{var e=null,r=35044,n=-1,a=-1,o=0,f=0;Array.isArray(t)||W(t)||l(t)?e=t:("data"in t&&(e=t.data),"usage"in t&&(r=Q[t.usage]),"primitive"in t&&(n=rt[t.primitive]),"count"in t&&(a=0|t.count),"type"in t&&(f=u[t.type]),"length"in t?o=0|t.length:(o=a,5123===f||5122===f?o*=2:5125!==f&&5124!==f||(o*=4))),i(h,e,r,n,a,o,f)}else c(),h.primType=4,h.vertCount=0,h.type=5121;return s}var c=r.create(null,34963,!0),h=new a(c._buffer);return n.elementsCount++,s(t),s._reglType="elements",s._elements=h,s.subdata=function(t,e){return c.subdata(t,e),s},s.destroy=function(){o(h)},s},createStream:function(t){var e=h.pop();return e||(e=new a(r.create(null,34963,!0,!1)._buffer)),i(e,t,35040,-1,-1,0,0),e},destroyStream:function(t){h.push(t)},getElements:function(t){return"function"==typeof t&&t._elements instanceof a?t._elements:null},clear:function(){X(s).forEach(o)}}}function g(t){for(var e=G.allocType(5123,t.length),r=0;r<t.length;++r)if(isNaN(t[r]))e[r]=65535;else if(1/0===t[r])e[r]=31744;else if(-1/0===t[r])e[r]=64512;else{nt[0]=t[r];var n=(i=at[0])>>>31<<15,a=(i<<1>>>24)-127,i=i>>13&1023;e[r]=-24>a?n:-14>a?n+(i+1024>>-14-a):15<a?n+31744:n+(a+15<<10)+i}return e}function v(t){return Array.isArray(t)||W(t)}function m(t){return"[object "+t+"]"}function y(t){return Array.isArray(t)&&(0===t.length||"number"==typeof t[0])}function x(t){return!(!Array.isArray(t)||0===t.length||!v(t[0]))}function b(t){return Object.prototype.toString.call(t)}function _(t){if(!t)return!1;var e=b(t);return 0<=pt.indexOf(e)||(y(t)||x(t)||l(t))}function w(t,e){36193===t.type?(t.data=g(e),G.freeType(e)):t.data=e}function k(t,e,r,n,a,i){if(t="undefined"!=typeof gt[t]?gt[t]:st[t]*dt[e],i&&(t*=6),a){for(n=0;1<=r;)n+=t*r*r,r/=2;return n}return t*r*n}function T(t,e,r,n,a,i,o){function s(){this.format=this.internalformat=6408,this.type=5121,this.flipY=this.premultiplyAlpha=this.compressed=!1,this.unpackAlignment=1,this.colorSpace=37444,this.channels=this.height=this.width=0}function c(t,e){t.internalformat=e.internalformat,t.format=e.format,t.type=e.type,t.compressed=e.compressed,t.premultiplyAlpha=e.premultiplyAlpha,t.flipY=e.flipY,t.unpackAlignment=e.unpackAlignment,t.colorSpace=e.colorSpace,t.width=e.width,t.height=e.height,t.channels=e.channels}function u(t,e){if("object"==typeof e&&e){"premultiplyAlpha"in e&&(t.premultiplyAlpha=e.premultiplyAlpha),"flipY"in e&&(t.flipY=e.flipY),"alignment"in e&&(t.unpackAlignment=e.alignment),"colorSpace"in e&&(t.colorSpace=q[e.colorSpace]),"type"in e&&(t.type=H[e.type]);var r=t.width,n=t.height,a=t.channels,i=!1;"shape"in e?(r=e.shape[0],n=e.shape[1],3===e.shape.length&&(a=e.shape[2],i=!0)):("radius"in e&&(r=n=e.radius),"width"in e&&(r=e.width),"height"in e&&(n=e.height),"channels"in e&&(a=e.channels,i=!0)),t.width=0|r,t.height=0|n,t.channels=0|a,r=!1,"format"in e&&(r=e.format,n=t.internalformat=Y[r],t.format=pt[n],r in H&&!("type"in e)&&(t.type=H[r]),r in K&&(t.compressed=!0),r=!0),!i&&r?t.channels=st[t.format]:i&&!r&&t.channels!==ot[t.format]&&(t.format=t.internalformat=ot[t.channels])}}function h(e){t.pixelStorei(37440,e.flipY),t.pixelStorei(37441,e.premultiplyAlpha),t.pixelStorei(37443,e.colorSpace),t.pixelStorei(3317,e.unpackAlignment)}function f(){s.call(this),this.yOffset=this.xOffset=0,this.data=null,this.needsFree=!1,this.element=null,this.needsCopy=!1}function p(t,e){var r=null;if(_(e)?r=e:e&&(u(t,e),"x"in e&&(t.xOffset=0|e.x),"y"in e&&(t.yOffset=0|e.y),_(e.data)&&(r=e.data)),e.copy){var n=a.viewportWidth,i=a.viewportHeight;t.width=t.width||n-t.xOffset,t.height=t.height||i-t.yOffset,t.needsCopy=!0}else if(r){if(W(r))t.channels=t.channels||4,t.data=r,"type"in e||5121!==t.type||(t.type=0|J[Object.prototype.toString.call(r)]);else if(y(r)){switch(t.channels=t.channels||4,i=(n=r).length,t.type){case 5121:case 5123:case 5125:case 5126:(i=G.allocType(t.type,i)).set(n),t.data=i;break;case 36193:t.data=g(n)}t.alignment=1,t.needsFree=!0}else if(l(r)){n=r.data,Array.isArray(n)||5121!==t.type||(t.type=0|J[Object.prototype.toString.call(n)]);i=r.shape;var o,s,c,h,f=r.stride;3===i.length?(c=i[2],h=f[2]):h=c=1,o=i[0],s=i[1],i=f[0],f=f[1],t.alignment=1,t.width=o,t.height=s,t.channels=c,t.format=t.internalformat=ot[c],t.needsFree=!0,o=h,r=r.offset,c=t.width,h=t.height,s=t.channels;for(var p=G.allocType(36193===t.type?5126:t.type,c*h*s),d=0,m=0;m<h;++m)for(var k=0;k<c;++k)for(var T=0;T<s;++T)p[d++]=n[i*k+f*m+o*T+r];w(t,p)}else if(b(r)===lt||b(r)===ct)b(r)===lt?t.element=r:t.element=r.canvas,t.width=t.element.width,t.height=t.element.height,t.channels=4;else if(b(r)===ut)t.element=r,t.width=r.width,t.height=r.height,t.channels=4;else if(b(r)===ht)t.element=r,t.width=r.naturalWidth,t.height=r.naturalHeight,t.channels=4;else if(b(r)===ft)t.element=r,t.width=r.videoWidth,t.height=r.videoHeight,t.channels=4;else if(x(r)){for(n=t.width||r[0].length,i=t.height||r.length,f=t.channels,f=v(r[0][0])?f||r[0][0].length:f||1,o=Z.shape(r),c=1,h=0;h<o.length;++h)c*=o[h];c=G.allocType(36193===t.type?5126:t.type,c),Z.flatten(r,o,"",c),w(t,c),t.alignment=1,t.width=n,t.height=i,t.channels=f,t.format=t.internalformat=ot[f],t.needsFree=!0}}else t.width=t.width||1,t.height=t.height||1,t.channels=t.channels||4}function d(e,r,a,i,o){var s=e.element,l=e.data,c=e.internalformat,u=e.format,f=e.type,p=e.width,d=e.height;h(e),s?t.texSubImage2D(r,o,a,i,u,f,s):e.compressed?t.compressedTexSubImage2D(r,o,a,i,c,p,d,l):e.needsCopy?(n(),t.copyTexSubImage2D(r,o,a,i,e.xOffset,e.yOffset,p,d)):t.texSubImage2D(r,o,a,i,p,d,u,f,l)}function m(){return dt.pop()||new f}function T(t){t.needsFree&&G.freeType(t.data),f.call(t),dt.push(t)}function M(){s.call(this),this.genMipmaps=!1,this.mipmapHint=4352,this.mipmask=0,this.images=Array(16)}function A(t,e,r){var n=t.images[0]=m();t.mipmask=1,n.width=t.width=e,n.height=t.height=r,n.channels=t.channels=4}function S(t,e){var r=null;if(_(e))c(r=t.images[0]=m(),t),p(r,e),t.mipmask=1;else if(u(t,e),Array.isArray(e.mipmap))for(var n=e.mipmap,a=0;a<n.length;++a)c(r=t.images[a]=m(),t),r.width>>=a,r.height>>=a,p(r,n[a]),t.mipmask|=1<<a;else c(r=t.images[0]=m(),t),p(r,e),t.mipmask=1;c(t,t.images[0])}function E(e,r){for(var a=e.images,i=0;i<a.length&&a[i];++i){var o=a[i],s=r,l=i,c=o.element,u=o.data,f=o.internalformat,p=o.format,d=o.type,g=o.width,v=o.height,m=o.channels;h(o),c?t.texImage2D(s,l,p,p,d,c):o.compressed?t.compressedTexImage2D(s,l,f,g,v,0,u):o.needsCopy?(n(),t.copyTexImage2D(s,l,p,o.xOffset,o.yOffset,g,v,0)):((o=!u)&&(u=G.zero.allocType(d,g*v*m)),t.texImage2D(s,l,p,g,v,0,p,d,u),o&&u&&G.zero.freeType(u))}}function L(){var t=gt.pop()||new M;s.call(t);for(var e=t.mipmask=0;16>e;++e)t.images[e]=null;return t}function C(t){for(var e=t.images,r=0;r<e.length;++r)e[r]&&T(e[r]),e[r]=null;gt.push(t)}function P(){this.magFilter=this.minFilter=9728,this.wrapT=this.wrapS=33071,this.anisotropic=1,this.genMipmaps=!1,this.mipmapHint=4352}function O(t,e){"min"in e&&(t.minFilter=U[e.min],0<=it.indexOf(t.minFilter)&&!("faces"in e)&&(t.genMipmaps=!0)),"mag"in e&&(t.magFilter=V[e.mag]);var r=t.wrapS,n=t.wrapT;if("wrap"in e){var a=e.wrap;"string"==typeof a?r=n=N[a]:Array.isArray(a)&&(r=N[a[0]],n=N[a[1]])}else"wrapS"in e&&(r=N[e.wrapS]),"wrapT"in e&&(n=N[e.wrapT]);if(t.wrapS=r,t.wrapT=n,"anisotropic"in e&&(t.anisotropic=e.anisotropic),"mipmap"in e){switch(r=!1,typeof e.mipmap){case"string":t.mipmapHint=B[e.mipmap],r=t.genMipmaps=!0;break;case"boolean":r=t.genMipmaps=e.mipmap;break;case"object":t.genMipmaps=!1,r=!0}!r||"min"in e||(t.minFilter=9984)}}function z(r,n){t.texParameteri(n,10241,r.minFilter),t.texParameteri(n,10240,r.magFilter),t.texParameteri(n,10242,r.wrapS),t.texParameteri(n,10243,r.wrapT),e.ext_texture_filter_anisotropic&&t.texParameteri(n,34046,r.anisotropic),r.genMipmaps&&(t.hint(33170,r.mipmapHint),t.generateMipmap(n))}function I(e){s.call(this),this.mipmask=0,this.internalformat=6408,this.id=vt++,this.refCount=1,this.target=e,this.texture=t.createTexture(),this.unit=-1,this.bindCount=0,this.texInfo=new P,o.profile&&(this.stats={size:0})}function D(e){t.activeTexture(33984),t.bindTexture(e.target,e.texture)}function R(){var e=xt[0];e?t.bindTexture(e.target,e.texture):t.bindTexture(3553,null)}function F(e){var r=e.texture,n=e.unit,a=e.target;0<=n&&(t.activeTexture(33984+n),t.bindTexture(a,null),xt[n]=null),t.deleteTexture(r),e.texture=null,e.params=null,e.pixels=null,e.refCount=0,delete mt[e.id],i.textureCount--}var B={"don't care":4352,"dont care":4352,nice:4354,fast:4353},N={repeat:10497,clamp:33071,mirror:33648},V={nearest:9728,linear:9729},U=j({mipmap:9987,"nearest mipmap nearest":9984,"linear mipmap nearest":9985,"nearest mipmap linear":9986,"linear mipmap linear":9987},V),q={none:0,browser:37444},H={uint8:5121,rgba4:32819,rgb565:33635,"rgb5 a1":32820},Y={alpha:6406,luminance:6409,"luminance alpha":6410,rgb:6407,rgba:6408,rgba4:32854,"rgb5 a1":32855,rgb565:36194},K={};e.ext_srgb&&(Y.srgb=35904,Y.srgba=35906),e.oes_texture_float&&(H.float32=H.float=5126),e.oes_texture_half_float&&(H.float16=H["half float"]=36193),e.webgl_depth_texture&&(j(Y,{depth:6402,"depth stencil":34041}),j(H,{uint16:5123,uint32:5125,"depth stencil":34042})),e.webgl_compressed_texture_s3tc&&j(K,{"rgb s3tc dxt1":33776,"rgba s3tc dxt1":33777,"rgba s3tc dxt3":33778,"rgba s3tc dxt5":33779}),e.webgl_compressed_texture_atc&&j(K,{"rgb atc":35986,"rgba atc explicit alpha":35987,"rgba atc interpolated alpha":34798}),e.webgl_compressed_texture_pvrtc&&j(K,{"rgb pvrtc 4bppv1":35840,"rgb pvrtc 2bppv1":35841,"rgba pvrtc 4bppv1":35842,"rgba pvrtc 2bppv1":35843}),e.webgl_compressed_texture_etc1&&(K["rgb etc1"]=36196);var Q=Array.prototype.slice.call(t.getParameter(34467));Object.keys(K).forEach(function(t){var e=K[t];0<=Q.indexOf(e)&&(Y[t]=e)});var $=Object.keys(Y);r.textureFormats=$;var tt=[];Object.keys(Y).forEach(function(t){tt[Y[t]]=t});var et=[];Object.keys(H).forEach(function(t){et[H[t]]=t});var rt=[];Object.keys(V).forEach(function(t){rt[V[t]]=t});var nt=[];Object.keys(U).forEach(function(t){nt[U[t]]=t});var at=[];Object.keys(N).forEach(function(t){at[N[t]]=t});var pt=$.reduce(function(t,e){var r=Y[e];return 6409===r||6406===r||6409===r||6410===r||6402===r||34041===r?t[r]=r:32855===r||0<=e.indexOf("rgba")?t[r]=6408:t[r]=6407,t},{}),dt=[],gt=[],vt=0,mt={},yt=r.maxTextureUnits,xt=Array(yt).map(function(){return null});return j(I.prototype,{bind:function(){this.bindCount+=1;var e=this.unit;if(0>e){for(var r=0;r<yt;++r){var n=xt[r];if(n){if(0<n.bindCount)continue;n.unit=-1}xt[r]=this,e=r;break}o.profile&&i.maxTextureUnits<e+1&&(i.maxTextureUnits=e+1),this.unit=e,t.activeTexture(33984+e),t.bindTexture(this.target,this.texture)}return e},unbind:function(){--this.bindCount},decRef:function(){0>=--this.refCount&&F(this)}}),o.profile&&(i.getTotalTextureSize=function(){var t=0;return Object.keys(mt).forEach(function(e){t+=mt[e].stats.size}),t}),{create2D:function(e,r){function n(t,e){var r=a.texInfo;P.call(r);var i=L();return"number"==typeof t?A(i,0|t,"number"==typeof e?0|e:0|t):t?(O(r,t),S(i,t)):A(i,1,1),r.genMipmaps&&(i.mipmask=(i.width<<1)-1),a.mipmask=i.mipmask,c(a,i),a.internalformat=i.internalformat,n.width=i.width,n.height=i.height,D(a),E(i,3553),z(r,3553),R(),C(i),o.profile&&(a.stats.size=k(a.internalformat,a.type,i.width,i.height,r.genMipmaps,!1)),n.format=tt[a.internalformat],n.type=et[a.type],n.mag=rt[r.magFilter],n.min=nt[r.minFilter],n.wrapS=at[r.wrapS],n.wrapT=at[r.wrapT],n}var a=new I(3553);return mt[a.id]=a,i.textureCount++,n(e,r),n.subimage=function(t,e,r,i){e|=0,r|=0,i|=0;var o=m();return c(o,a),o.width=0,o.height=0,p(o,t),o.width=o.width||(a.width>>i)-e,o.height=o.height||(a.height>>i)-r,D(a),d(o,3553,e,r,i),R(),T(o),n},n.resize=function(e,r){var i=0|e,s=0|r||i;if(i===a.width&&s===a.height)return n;n.width=a.width=i,n.height=a.height=s,D(a);for(var l,c=a.channels,u=a.type,h=0;a.mipmask>>h;++h){var f=i>>h,p=s>>h;if(!f||!p)break;l=G.zero.allocType(u,f*p*c),t.texImage2D(3553,h,a.format,f,p,0,a.format,a.type,l),l&&G.zero.freeType(l)}return R(),o.profile&&(a.stats.size=k(a.internalformat,a.type,i,s,!1,!1)),n},n._reglType="texture2d",n._texture=a,o.profile&&(n.stats=a.stats),n.destroy=function(){a.decRef()},n},createCube:function(e,r,n,a,s,l){function h(t,e,r,n,a,i){var s,l=f.texInfo;for(P.call(l),s=0;6>s;++s)g[s]=L();if("number"!=typeof t&&t){if("object"==typeof t)if(e)S(g[0],t),S(g[1],e),S(g[2],r),S(g[3],n),S(g[4],a),S(g[5],i);else if(O(l,t),u(f,t),"faces"in t)for(t=t.faces,s=0;6>s;++s)c(g[s],f),S(g[s],t[s]);else for(s=0;6>s;++s)S(g[s],t)}else for(t=0|t||1,s=0;6>s;++s)A(g[s],t,t);for(c(f,g[0]),f.mipmask=l.genMipmaps?(g[0].width<<1)-1:g[0].mipmask,f.internalformat=g[0].internalformat,h.width=g[0].width,h.height=g[0].height,D(f),s=0;6>s;++s)E(g[s],34069+s);for(z(l,34067),R(),o.profile&&(f.stats.size=k(f.internalformat,f.type,h.width,h.height,l.genMipmaps,!0)),h.format=tt[f.internalformat],h.type=et[f.type],h.mag=rt[l.magFilter],h.min=nt[l.minFilter],h.wrapS=at[l.wrapS],h.wrapT=at[l.wrapT],s=0;6>s;++s)C(g[s]);return h}var f=new I(34067);mt[f.id]=f,i.cubeCount++;var g=Array(6);return h(e,r,n,a,s,l),h.subimage=function(t,e,r,n,a){r|=0,n|=0,a|=0;var i=m();return c(i,f),i.width=0,i.height=0,p(i,e),i.width=i.width||(f.width>>a)-r,i.height=i.height||(f.height>>a)-n,D(f),d(i,34069+t,r,n,a),R(),T(i),h},h.resize=function(e){if((e|=0)!==f.width){h.width=f.width=e,h.height=f.height=e,D(f);for(var r=0;6>r;++r)for(var n=0;f.mipmask>>n;++n)t.texImage2D(34069+r,n,f.format,e>>n,e>>n,0,f.format,f.type,null);return R(),o.profile&&(f.stats.size=k(f.internalformat,f.type,h.width,h.height,!1,!0)),h}},h._reglType="textureCube",h._texture=f,o.profile&&(h.stats=f.stats),h.destroy=function(){f.decRef()},h},clear:function(){for(var e=0;e<yt;++e)t.activeTexture(33984+e),t.bindTexture(3553,null),xt[e]=null;X(mt).forEach(F),i.cubeCount=0,i.textureCount=0},getTexture:function(t){return null},restore:function(){for(var e=0;e<yt;++e){var r=xt[e];r&&(r.bindCount=0,r.unit=-1,xt[e]=null)}X(mt).forEach(function(e){e.texture=t.createTexture(),t.bindTexture(e.target,e.texture);for(var r=0;32>r;++r)if(0!=(e.mipmask&1<<r))if(3553===e.target)t.texImage2D(3553,r,e.internalformat,e.width>>r,e.height>>r,0,e.internalformat,e.type,null);else for(var n=0;6>n;++n)t.texImage2D(34069+n,r,e.internalformat,e.width>>r,e.height>>r,0,e.internalformat,e.type,null);z(e.texInfo,e.target)})}}}function M(t,e,r,n,a,i){function o(t,e,r){this.target=t,this.texture=e,this.renderbuffer=r;var n=t=0;e?(t=e.width,n=e.height):r&&(t=r.width,n=r.height),this.width=t,this.height=n}function s(t){t&&(t.texture&&t.texture._texture.decRef(),t.renderbuffer&&t.renderbuffer._renderbuffer.decRef())}function l(t,e,r){t&&(t.texture?t.texture._texture.refCount+=1:t.renderbuffer._renderbuffer.refCount+=1)}function c(e,r){r&&(r.texture?t.framebufferTexture2D(36160,e,r.target,r.texture._texture.texture,0):t.framebufferRenderbuffer(36160,e,36161,r.renderbuffer._renderbuffer.renderbuffer))}function u(t){var e=3553,r=null,n=null,a=t;return"object"==typeof t&&(a=t.data,"target"in t&&(e=0|t.target)),"texture2d"===(t=a._reglType)?r=a:"textureCube"===t?r=a:"renderbuffer"===t&&(n=a,e=36161),new o(e,r,n)}function h(t,e,r,i,s){return r?((t=n.create2D({width:t,height:e,format:i,type:s}))._texture.refCount=0,new o(3553,t,null)):((t=a.create({width:t,height:e,format:i}))._renderbuffer.refCount=0,new o(36161,null,t))}function f(t){return t&&(t.texture||t.renderbuffer)}function p(t,e,r){t&&(t.texture?t.texture.resize(e,r):t.renderbuffer&&t.renderbuffer.resize(e,r),t.width=e,t.height=r)}function d(){this.id=k++,T[this.id]=this,this.framebuffer=t.createFramebuffer(),this.height=this.width=0,this.colorAttachments=[],this.depthStencilAttachment=this.stencilAttachment=this.depthAttachment=null}function g(t){t.colorAttachments.forEach(s),s(t.depthAttachment),s(t.stencilAttachment),s(t.depthStencilAttachment)}function v(e){t.deleteFramebuffer(e.framebuffer),e.framebuffer=null,i.framebufferCount--,delete T[e.id]}function m(e){var n;t.bindFramebuffer(36160,e.framebuffer);var a=e.colorAttachments;for(n=0;n<a.length;++n)c(36064+n,a[n]);for(n=a.length;n<r.maxColorAttachments;++n)t.framebufferTexture2D(36160,36064+n,3553,null,0);t.framebufferTexture2D(36160,33306,3553,null,0),t.framebufferTexture2D(36160,36096,3553,null,0),t.framebufferTexture2D(36160,36128,3553,null,0),c(36096,e.depthAttachment),c(36128,e.stencilAttachment),c(33306,e.depthStencilAttachment),t.checkFramebufferStatus(36160),t.isContextLost(),t.bindFramebuffer(36160,x.next?x.next.framebuffer:null),x.cur=x.next,t.getError()}function y(t,e){function r(t,e){var a,i=0,o=0,s=!0,c=!0;a=null;var p=!0,d="rgba",v="uint8",y=1,x=null,w=null,k=null,T=!1;"number"==typeof t?(i=0|t,o=0|e||i):t?("shape"in t?(i=(o=t.shape)[0],o=o[1]):("radius"in t&&(i=o=t.radius),"width"in t&&(i=t.width),"height"in t&&(o=t.height)),("color"in t||"colors"in t)&&(a=t.color||t.colors,Array.isArray(a)),a||("colorCount"in t&&(y=0|t.colorCount),"colorTexture"in t&&(p=!!t.colorTexture,d="rgba4"),"colorType"in t&&(v=t.colorType,!p)&&("half float"===v||"float16"===v?d="rgba16f":"float"!==v&&"float32"!==v||(d="rgba32f")),"colorFormat"in t&&(d=t.colorFormat,0<=b.indexOf(d)?p=!0:0<=_.indexOf(d)&&(p=!1))),("depthTexture"in t||"depthStencilTexture"in t)&&(T=!(!t.depthTexture&&!t.depthStencilTexture)),"depth"in t&&("boolean"==typeof t.depth?s=t.depth:(x=t.depth,c=!1)),"stencil"in t&&("boolean"==typeof t.stencil?c=t.stencil:(w=t.stencil,s=!1)),"depthStencil"in t&&("boolean"==typeof t.depthStencil?s=c=t.depthStencil:(k=t.depthStencil,c=s=!1))):i=o=1;var M=null,A=null,S=null,E=null;if(Array.isArray(a))M=a.map(u);else if(a)M=[u(a)];else for(M=Array(y),a=0;a<y;++a)M[a]=h(i,o,p,d,v);for(i=i||M[0].width,o=o||M[0].height,x?A=u(x):s&&!c&&(A=h(i,o,T,"depth","uint32")),w?S=u(w):c&&!s&&(S=h(i,o,!1,"stencil","uint8")),k?E=u(k):!x&&!w&&c&&s&&(E=h(i,o,T,"depth stencil","depth stencil")),s=null,a=0;a<M.length;++a)l(M[a]),M[a]&&M[a].texture&&(c=yt[M[a].texture._texture.format]*xt[M[a].texture._texture.type],null===s&&(s=c));return l(A),l(S),l(E),g(n),n.width=i,n.height=o,n.colorAttachments=M,n.depthAttachment=A,n.stencilAttachment=S,n.depthStencilAttachment=E,r.color=M.map(f),r.depth=f(A),r.stencil=f(S),r.depthStencil=f(E),r.width=n.width,r.height=n.height,m(n),r}var n=new d;return i.framebufferCount++,r(t,e),j(r,{resize:function(t,e){var a=Math.max(0|t,1),i=Math.max(0|e||a,1);if(a===n.width&&i===n.height)return r;for(var o=n.colorAttachments,s=0;s<o.length;++s)p(o[s],a,i);return p(n.depthAttachment,a,i),p(n.stencilAttachment,a,i),p(n.depthStencilAttachment,a,i),n.width=r.width=a,n.height=r.height=i,m(n),r},_reglType:"framebuffer",_framebuffer:n,destroy:function(){v(n),g(n)},use:function(t){x.setFBO({framebuffer:r},t)}})}var x={cur:null,next:null,dirty:!1,setFBO:null},b=["rgba"],_=["rgba4","rgb565","rgb5 a1"];e.ext_srgb&&_.push("srgba"),e.ext_color_buffer_half_float&&_.push("rgba16f","rgb16f"),e.webgl_color_buffer_float&&_.push("rgba32f");var w=["uint8"];e.oes_texture_half_float&&w.push("half float","float16"),e.oes_texture_float&&w.push("float","float32");var k=0,T={};return j(x,{getFramebuffer:function(t){return"function"==typeof t&&"framebuffer"===t._reglType&&(t=t._framebuffer)instanceof d?t:null},create:y,createCube:function(t){function e(t){var a,i={color:null},o=0,s=null;a="rgba";var l="uint8",c=1;if("number"==typeof t?o=0|t:t?("shape"in t?o=t.shape[0]:("radius"in t&&(o=0|t.radius),"width"in t?o=0|t.width:"height"in t&&(o=0|t.height)),("color"in t||"colors"in t)&&(s=t.color||t.colors,Array.isArray(s)),s||("colorCount"in t&&(c=0|t.colorCount),"colorType"in t&&(l=t.colorType),"colorFormat"in t&&(a=t.colorFormat)),"depth"in t&&(i.depth=t.depth),"stencil"in t&&(i.stencil=t.stencil),"depthStencil"in t&&(i.depthStencil=t.depthStencil)):o=1,s)if(Array.isArray(s))for(t=[],a=0;a<s.length;++a)t[a]=s[a];else t=[s];else for(t=Array(c),s={radius:o,format:a,type:l},a=0;a<c;++a)t[a]=n.createCube(s);for(i.color=Array(t.length),a=0;a<t.length;++a)c=t[a],o=o||c.width,i.color[a]={target:34069,data:t[a]};for(a=0;6>a;++a){for(c=0;c<t.length;++c)i.color[c].target=34069+a;0<a&&(i.depth=r[0].depth,i.stencil=r[0].stencil,i.depthStencil=r[0].depthStencil),r[a]?r[a](i):r[a]=y(i)}return j(e,{width:o,height:o,color:t})}var r=Array(6);return e(t),j(e,{faces:r,resize:function(t){var n=0|t;if(n===e.width)return e;var a=e.color;for(t=0;t<a.length;++t)a[t].resize(n);for(t=0;6>t;++t)r[t].resize(n);return e.width=e.height=n,e},_reglType:"framebufferCube",destroy:function(){r.forEach(function(t){t.destroy()})}})},clear:function(){X(T).forEach(v)},restore:function(){x.cur=null,x.next=null,x.dirty=!0,X(T).forEach(function(e){e.framebuffer=t.createFramebuffer(),m(e)})}})}function A(){this.w=this.z=this.y=this.x=this.state=0,this.buffer=null,this.size=0,this.normalized=!1,this.type=5126,this.divisor=this.stride=this.offset=0}function S(t,e,r,n){function a(t,e,r,n){this.name=t,this.id=e,this.location=r,this.info=n}function i(t,e){for(var r=0;r<t.length;++r)if(t[r].id===e.id)return void(t[r].location=e.location);t.push(e)}function o(r,n,a){if(!(o=(a=35632===r?c:u)[n])){var i=e.str(n),o=t.createShader(r);t.shaderSource(o,i),t.compileShader(o),a[n]=o}return o}function s(t,e){this.id=p++,this.fragId=t,this.vertId=e,this.program=null,this.uniforms=[],this.attributes=[],n.profile&&(this.stats={uniformsCount:0,attributesCount:0})}function l(r,s){var l,c;l=o(35632,r.fragId),c=o(35633,r.vertId);var u=r.program=t.createProgram();t.attachShader(u,l),t.attachShader(u,c),t.linkProgram(u);var h=t.getProgramParameter(u,35718);n.profile&&(r.stats.uniformsCount=h);var f=r.uniforms;for(l=0;l<h;++l)if(c=t.getActiveUniform(u,l))if(1<c.size)for(var p=0;p<c.size;++p){var d=c.name.replace("[0]","["+p+"]");i(f,new a(d,e.id(d),t.getUniformLocation(u,d),c))}else i(f,new a(c.name,e.id(c.name),t.getUniformLocation(u,c.name),c));for(h=t.getProgramParameter(u,35721),n.profile&&(r.stats.attributesCount=h),f=r.attributes,l=0;l<h;++l)(c=t.getActiveAttrib(u,l))&&i(f,new a(c.name,e.id(c.name),t.getAttribLocation(u,c.name),c))}var c={},u={},h={},f=[],p=0;return n.profile&&(r.getMaxUniformsCount=function(){var t=0;return f.forEach(function(e){e.stats.uniformsCount>t&&(t=e.stats.uniformsCount)}),t},r.getMaxAttributesCount=function(){var t=0;return f.forEach(function(e){e.stats.attributesCount>t&&(t=e.stats.attributesCount)}),t}),{clear:function(){var e=t.deleteShader.bind(t);X(c).forEach(e),c={},X(u).forEach(e),u={},f.forEach(function(e){t.deleteProgram(e.program)}),f.length=0,h={},r.shaderCount=0},program:function(t,e,n){var a=h[e];a||(a=h[e]={});var i=a[t];return i||(i=new s(e,t),r.shaderCount++,l(i),a[t]=i,f.push(i)),i},restore:function(){c={},u={};for(var t=0;t<f.length;++t)l(f[t])},shader:o,frag:-1,vert:-1}}function E(t,e,r,n,a,i,o){function s(a){var i;i=null===e.next?5121:e.next.colorAttachments[0].texture._texture.type;var o=0,s=0,l=n.framebufferWidth,c=n.framebufferHeight,u=null;return W(a)?u=a:a&&(o=0|a.x,s=0|a.y,l=0|(a.width||n.framebufferWidth-o),c=0|(a.height||n.framebufferHeight-s),u=a.data||null),r(),a=l*c*4,u||(5121===i?u=new Uint8Array(a):5126===i&&(u=u||new Float32Array(a))),t.pixelStorei(3333,4),t.readPixels(o,s,l,c,6408,i,u),u}return function(t){return t&&"framebuffer"in t?function(t){var r;return e.setFBO({framebuffer:t.framebuffer},function(){r=s(t)}),r}(t):s(t)}}function L(t){return Array.prototype.slice.call(t)}function C(t){return L(t).join("")}function P(){function t(){var t=[],e=[];return j(function(){t.push.apply(t,L(arguments))},{def:function(){var n="v"+r++;return e.push(n),0<arguments.length&&(t.push(n,"="),t.push.apply(t,L(arguments)),t.push(";")),n},toString:function(){return C([0<e.length?"var "+e+";":"",C(t)])}})}function e(){function e(t,e){n(t,e,"=",r.def(t,e),";")}var r=t(),n=t(),a=r.toString,i=n.toString;return j(function(){r.apply(r,L(arguments))},{def:r.def,entry:r,exit:n,save:e,set:function(t,n,a){e(t,n),r(t,n,"=",a,";")},toString:function(){return a()+i()}})}var r=0,n=[],a=[],i=t(),o={};return{global:i,link:function(t){for(var e=0;e<a.length;++e)if(a[e]===t)return n[e];return e="g"+r++,n.push(e),a.push(t),e},block:t,proc:function(t,r){function n(){var t="a"+a.length;return a.push(t),t}var a=[];r=r||0;for(var i=0;i<r;++i)n();var s=(i=e()).toString;return o[t]=j(i,{arg:n,toString:function(){return C(["function(",a.join(),"){",s(),"}"])}})},scope:e,cond:function(){var t=C(arguments),r=e(),n=e(),a=r.toString,i=n.toString;return j(r,{then:function(){return r.apply(r,L(arguments)),this},else:function(){return n.apply(n,L(arguments)),this},toString:function(){var e=i();return e&&(e="else{"+e+"}"),C(["if(",t,"){",a(),"}",e])}})},compile:function(){var t=['"use strict";',i,"return {"];Object.keys(o).forEach(function(e){t.push('"',e,'":',o[e].toString(),",")}),t.push("}");var e=C(t).replace(/;/g,";\n").replace(/}/g,"}\n").replace(/{/g,"{\n");return Function.apply(null,n.concat(e)).apply(null,a)}}}function O(t){return Array.isArray(t)||W(t)||l(t)}function z(t){return t.sort(function(t,e){return"viewport"===t?-1:"viewport"===e?1:t<e?-1:1})}function I(t,e,r,n){this.thisDep=t,this.contextDep=e,this.propDep=r,this.append=n}function D(t){return t&&!(t.thisDep||t.contextDep||t.propDep)}function R(t){return new I(!1,!1,!1,t)}function F(t,e){var r=t.type;return 0===r?new I(!0,1<=(r=t.data.length),2<=r,e):4===r?new I((r=t.data).thisDep,r.contextDep,r.propDep,e):new I(3===r,2===r,1===r,e)}function B(t,e,r,n,a,o,s,l,c,u,h,f,p,d,g){function m(t){return t.replace(".","_")}function y(t,e,r){var n=m(t);nt.push(t),et[n]=tt[n]=!!r,at[n]=e}function x(t,e,r){var n=m(t);nt.push(t),Array.isArray(r)?(tt[n]=r.slice(),et[n]=r.slice()):tt[n]=et[n]=r,it[n]=e}function b(){var t=P(),r=t.link,n=t.global;t.id=lt++,t.batchId="0";var a=r(ot),i=t.shared={props:"a0"};Object.keys(ot).forEach(function(t){i[t]=n.def(a,".",t)});var o=t.next={},s=t.current={};Object.keys(it).forEach(function(t){Array.isArray(tt[t])&&(o[t]=n.def(i.next,".",t),s[t]=n.def(i.current,".",t))});var l=t.constants={};Object.keys(st).forEach(function(t){l[t]=n.def(JSON.stringify(st[t]))}),t.invoke=function(e,n){switch(n.type){case 0:var a=["this",i.context,i.props,t.batchId];return e.def(r(n.data),".call(",a.slice(0,Math.max(n.data.length+1,4)),")");case 1:return e.def(i.props,n.data);case 2:return e.def(i.context,n.data);case 3:return e.def("this",n.data);case 4:return n.data.append(t,e),n.data.ref}},t.attribCache={};var c={};return t.scopeAttrib=function(t){if((t=e.id(t))in c)return c[t];var n=u.scope[t];return n||(n=u.scope[t]=new Z),c[t]=r(n)},t}function _(t,e){var r=t.static,n=t.dynamic;if("framebuffer"in r){var a=r.framebuffer;return a?(a=l.getFramebuffer(a),R(function(t,e){var r=t.link(a),n=t.shared;return e.set(n.framebuffer,".next",r),n=n.context,e.set(n,".framebufferWidth",r+".width"),e.set(n,".framebufferHeight",r+".height"),r})):R(function(t,e){var r=t.shared;return e.set(r.framebuffer,".next","null"),r=r.context,e.set(r,".framebufferWidth",r+".drawingBufferWidth"),e.set(r,".framebufferHeight",r+".drawingBufferHeight"),"null"})}if("framebuffer"in n){var i=n.framebuffer;return F(i,function(t,e){var r=t.invoke(e,i),n=t.shared,a=n.framebuffer;r=e.def(a,".getFramebuffer(",r,")");return e.set(a,".next",r),n=n.context,e.set(n,".framebufferWidth",r+"?"+r+".width:"+n+".drawingBufferWidth"),e.set(n,".framebufferHeight",r+"?"+r+".height:"+n+".drawingBufferHeight"),r})}return null}function w(t){function r(t){if(t in n){var r=e.id(n[t]);return(t=R(function(){return r})).id=r,t}if(t in a){var i=a[t];return F(i,function(t,e){var r=t.invoke(e,i);return e.def(t.shared.strings,".id(",r,")")})}return null}var n=t.static,a=t.dynamic,i=r("frag"),o=r("vert"),s=null;return D(i)&&D(o)?(s=h.program(o.id,i.id),t=R(function(t,e){return t.link(s)})):t=new I(i&&i.thisDep||o&&o.thisDep,i&&i.contextDep||o&&o.contextDep,i&&i.propDep||o&&o.propDep,function(t,e){var r,n,a=t.shared.shader;return r=i?i.append(t,e):e.def(a,".","frag"),n=o?o.append(t,e):e.def(a,".","vert"),e.def(a+".program("+n+","+r+")")}),{frag:i,vert:o,progVar:t,program:s}}function k(t,e){function r(t,e){if(t in n){var r=0|n[t];return R(function(t,n){return e&&(t.OFFSET=r),r})}if(t in a){var o=a[t];return F(o,function(t,r){var n=t.invoke(r,o);return e&&(t.OFFSET=n),n})}return e&&i?R(function(t,e){return t.OFFSET="0",0}):null}var n=t.static,a=t.dynamic,i=function(){if("elements"in n){var t=n.elements;O(t)?t=o.getElements(o.create(t,!0)):t&&(t=o.getElements(t));var e=R(function(e,r){if(t){var n=e.link(t);return e.ELEMENTS=n}return e.ELEMENTS=null});return e.value=t,e}if("elements"in a){var r=a.elements;return F(r,function(t,e){var n=(a=t.shared).isBufferArgs,a=a.elements,i=t.invoke(e,r),o=e.def("null");n=e.def(n,"(",i,")"),i=t.cond(n).then(o,"=",a,".createStream(",i,");").else(o,"=",a,".getElements(",i,");");return e.entry(i),e.exit(t.cond(n).then(a,".destroyStream(",o,");")),t.ELEMENTS=o})}return null}(),s=r("offset",!0);return{elements:i,primitive:function(){if("primitive"in n){var t=n.primitive;return R(function(e,r){return rt[t]})}if("primitive"in a){var e=a.primitive;return F(e,function(t,r){var n=t.constants.primTypes,a=t.invoke(r,e);return r.def(n,"[",a,"]")})}return i?D(i)?i.value?R(function(t,e){return e.def(t.ELEMENTS,".primType")}):R(function(){return 4}):new I(i.thisDep,i.contextDep,i.propDep,function(t,e){var r=t.ELEMENTS;return e.def(r,"?",r,".primType:",4)}):null}(),count:function(){if("count"in n){var t=0|n.count;return R(function(){return t})}if("count"in a){var e=a.count;return F(e,function(t,r){return t.invoke(r,e)})}return i?D(i)?i?s?new I(s.thisDep,s.contextDep,s.propDep,function(t,e){return e.def(t.ELEMENTS,".vertCount-",t.OFFSET)}):R(function(t,e){return e.def(t.ELEMENTS,".vertCount")}):R(function(){return-1}):new I(i.thisDep||s.thisDep,i.contextDep||s.contextDep,i.propDep||s.propDep,function(t,e){var r=t.ELEMENTS;return t.OFFSET?e.def(r,"?",r,".vertCount-",t.OFFSET,":-1"):e.def(r,"?",r,".vertCount:-1")}):null}(),instances:r("instances",!1),offset:s}}function T(t,r){var n=t.static,i=t.dynamic,o={};return Object.keys(n).forEach(function(t){var r=n[t],i=e.id(t),s=new Z;if(O(r))s.state=1,s.buffer=a.getBuffer(a.create(r,34962,!1,!0)),s.type=0;else if(c=a.getBuffer(r))s.state=1,s.buffer=c,s.type=0;else if("constant"in r){var l=r.constant;s.buffer="null",s.state=2,"number"==typeof l?s.x=l:bt.forEach(function(t,e){e<l.length&&(s[t]=l[e])})}else{var c=O(r.buffer)?a.getBuffer(a.create(r.buffer,34962,!1,!0)):a.getBuffer(r.buffer),u=0|r.offset,h=0|r.stride,f=0|r.size,p=!!r.normalized,d=0;"type"in r&&(d=K[r.type]),r=0|r.divisor,s.buffer=c,s.state=1,s.size=f,s.normalized=p,s.type=d||c.dtype,s.offset=u,s.stride=h,s.divisor=r}o[t]=R(function(t,e){var r=t.attribCache;if(i in r)return r[i];var n={isStream:!1};return Object.keys(s).forEach(function(t){n[t]=s[t]}),s.buffer&&(n.buffer=t.link(s.buffer),n.type=n.type||n.buffer+".dtype"),r[i]=n})}),Object.keys(i).forEach(function(t){var e=i[t];o[t]=F(e,function(t,r){function n(t){r(l[t],"=",a,".",t,"|0;")}var a=t.invoke(r,e),i=t.shared,o=i.isBufferArgs,s=i.buffer,l={isStream:r.def(!1)},c=new Z;c.state=1,Object.keys(c).forEach(function(t){l[t]=r.def(""+c[t])});var u=l.buffer,h=l.type;return r("if(",o,"(",a,")){",l.isStream,"=true;",u,"=",s,".createStream(",34962,",",a,");",h,"=",u,".dtype;","}else{",u,"=",s,".getBuffer(",a,");","if(",u,"){",h,"=",u,".dtype;",'}else if("constant" in ',a,"){",l.state,"=",2,";","if(typeof "+a+'.constant === "number"){',l[bt[0]],"=",a,".constant;",bt.slice(1).map(function(t){return l[t]}).join("="),"=0;","}else{",bt.map(function(t,e){return l[t]+"="+a+".constant.length>"+e+"?"+a+".constant["+e+"]:0;"}).join(""),"}}else{","if(",o,"(",a,".buffer)){",u,"=",s,".createStream(",34962,",",a,".buffer);","}else{",u,"=",s,".getBuffer(",a,".buffer);","}",h,'="type" in ',a,"?",i.glTypes,"[",a,".type]:",u,".dtype;",l.normalized,"=!!",a,".normalized;"),n("size"),n("offset"),n("stride"),n("divisor"),r("}}"),r.exit("if(",l.isStream,"){",s,".destroyStream(",u,");","}"),l})}),o}function M(t,e,r,n,a){var o=_(t),s=function(t,e,r){function n(t){if(t in a){var r=a[t];t=!0;var n,o,s=0|r.x,l=0|r.y;return"width"in r?n=0|r.width:t=!1,"height"in r?o=0|r.height:t=!1,new I(!t&&e&&e.thisDep,!t&&e&&e.contextDep,!t&&e&&e.propDep,function(t,e){var a=t.shared.context,i=n;"width"in r||(i=e.def(a,".","framebufferWidth","-",s));var c=o;return"height"in r||(c=e.def(a,".","framebufferHeight","-",l)),[s,l,i,c]})}if(t in i){var c=i[t];return t=F(c,function(t,e){var r=t.invoke(e,c),n=t.shared.context,a=e.def(r,".x|0"),i=e.def(r,".y|0");return[a,i,e.def('"width" in ',r,"?",r,".width|0:","(",n,".","framebufferWidth","-",a,")"),r=e.def('"height" in ',r,"?",r,".height|0:","(",n,".","framebufferHeight","-",i,")")]}),e&&(t.thisDep=t.thisDep||e.thisDep,t.contextDep=t.contextDep||e.contextDep,t.propDep=t.propDep||e.propDep),t}return e?new I(e.thisDep,e.contextDep,e.propDep,function(t,e){var r=t.shared.context;return[0,0,e.def(r,".","framebufferWidth"),e.def(r,".","framebufferHeight")]}):null}var a=t.static,i=t.dynamic;if(t=n("viewport")){var o=t;t=new I(t.thisDep,t.contextDep,t.propDep,function(t,e){var r=o.append(t,e),n=t.shared.context;return e.set(n,".viewportWidth",r[2]),e.set(n,".viewportHeight",r[3]),r})}return{viewport:t,scissor_box:n("scissor.box")}}(t,o),l=k(t),c=function(t,e){var r=t.static,n=t.dynamic,a={};return nt.forEach(function(t){function e(e,i){if(t in r){var s=e(r[t]);a[o]=R(function(){return s})}else if(t in n){var l=n[t];a[o]=F(l,function(t,e){return i(t,e,t.invoke(e,l))})}}var o=m(t);switch(t){case"cull.enable":case"blend.enable":case"dither":case"stencil.enable":case"depth.enable":case"scissor.enable":case"polygonOffset.enable":case"sample.alpha":case"sample.enable":case"depth.mask":return e(function(t){return t},function(t,e,r){return r});case"depth.func":return e(function(t){return kt[t]},function(t,e,r){return e.def(t.constants.compareFuncs,"[",r,"]")});case"depth.range":return e(function(t){return t},function(t,e,r){return[e.def("+",r,"[0]"),e=e.def("+",r,"[1]")]});case"blend.func":return e(function(t){return[wt["srcRGB"in t?t.srcRGB:t.src],wt["dstRGB"in t?t.dstRGB:t.dst],wt["srcAlpha"in t?t.srcAlpha:t.src],wt["dstAlpha"in t?t.dstAlpha:t.dst]]},function(t,e,r){function n(t,n){return e.def('"',t,n,'" in ',r,"?",r,".",t,n,":",r,".",t)}t=t.constants.blendFuncs;var a=n("src","RGB"),i=n("dst","RGB"),o=(a=e.def(t,"[",a,"]"),e.def(t,"[",n("src","Alpha"),"]"));return[a,i=e.def(t,"[",i,"]"),o,t=e.def(t,"[",n("dst","Alpha"),"]")]});case"blend.equation":return e(function(t){return"string"==typeof t?[J[t],J[t]]:"object"==typeof t?[J[t.rgb],J[t.alpha]]:void 0},function(t,e,r){var n=t.constants.blendEquations,a=e.def(),i=e.def();return(t=t.cond("typeof ",r,'==="string"')).then(a,"=",i,"=",n,"[",r,"];"),t.else(a,"=",n,"[",r,".rgb];",i,"=",n,"[",r,".alpha];"),e(t),[a,i]});case"blend.color":return e(function(t){return i(4,function(e){return+t[e]})},function(t,e,r){return i(4,function(t){return e.def("+",r,"[",t,"]")})});case"stencil.mask":return e(function(t){return 0|t},function(t,e,r){return e.def(r,"|0")});case"stencil.func":return e(function(t){return[kt[t.cmp||"keep"],t.ref||0,"mask"in t?t.mask:-1]},function(t,e,r){return[t=e.def('"cmp" in ',r,"?",t.constants.compareFuncs,"[",r,".cmp]",":",7680),e.def(r,".ref|0"),e=e.def('"mask" in ',r,"?",r,".mask|0:-1")]});case"stencil.opFront":case"stencil.opBack":return e(function(e){return["stencil.opBack"===t?1029:1028,Tt[e.fail||"keep"],Tt[e.zfail||"keep"],Tt[e.zpass||"keep"]]},function(e,r,n){function a(t){return r.def('"',t,'" in ',n,"?",i,"[",n,".",t,"]:",7680)}var i=e.constants.stencilOps;return["stencil.opBack"===t?1029:1028,a("fail"),a("zfail"),a("zpass")]});case"polygonOffset.offset":return e(function(t){return[0|t.factor,0|t.units]},function(t,e,r){return[e.def(r,".factor|0"),e=e.def(r,".units|0")]});case"cull.face":return e(function(t){var e=0;return"front"===t?e=1028:"back"===t&&(e=1029),e},function(t,e,r){return e.def(r,'==="front"?',1028,":",1029)});case"lineWidth":return e(function(t){return t},function(t,e,r){return r});case"frontFace":return e(function(t){return Mt[t]},function(t,e,r){return e.def(r+'==="cw"?2304:2305')});case"colorMask":return e(function(t){return t.map(function(t){return!!t})},function(t,e,r){return i(4,function(t){return"!!"+r+"["+t+"]"})});case"sample.coverage":return e(function(t){return["value"in t?t.value:1,!!t.invert]},function(t,e,r){return[e.def('"value" in ',r,"?+",r,".value:1"),e=e.def("!!",r,".invert")]})}}),a}(t),u=w(t),h=s.viewport;return h&&(c.viewport=h),(s=s[h=m("scissor.box")])&&(c[h]=s),(o={framebuffer:o,draw:l,shader:u,state:c,dirty:s=0<Object.keys(c).length}).profile=function(t){var e,r=t.static;if(t=t.dynamic,"profile"in r){var n=!!r.profile;(e=R(function(t,e){return n})).enable=n}else if("profile"in t){var a=t.profile;e=F(a,function(t,e){return t.invoke(e,a)})}return e}(t),o.uniforms=function(t,e){var r=t.static,n=t.dynamic,a={};return Object.keys(r).forEach(function(t){var e,n=r[t];if("number"==typeof n||"boolean"==typeof n)e=R(function(){return n});else if("function"==typeof n){var o=n._reglType;"texture2d"===o||"textureCube"===o?e=R(function(t){return t.link(n)}):"framebuffer"!==o&&"framebufferCube"!==o||(e=R(function(t){return t.link(n.color[0])}))}else v(n)&&(e=R(function(t){return t.global.def("[",i(n.length,function(t){return n[t]}),"]")}));e.value=n,a[t]=e}),Object.keys(n).forEach(function(t){var e=n[t];a[t]=F(e,function(t,r){return t.invoke(r,e)})}),a}(r),o.attributes=T(e),o.context=function(t){var e=t.static,r=t.dynamic,n={};return Object.keys(e).forEach(function(t){var r=e[t];n[t]=R(function(t,e){return"number"==typeof r||"boolean"==typeof r?""+r:t.link(r)})}),Object.keys(r).forEach(function(t){var e=r[t];n[t]=F(e,function(t,r){return t.invoke(r,e)})}),n}(n),o}function A(t,e,r){var n=t.shared.context,a=t.scope();Object.keys(r).forEach(function(i){e.save(n,"."+i),a(n,".",i,"=",r[i].append(t,e),";")}),e(a)}function S(t,e,r,n){var a,i=(s=t.shared).gl,o=s.framebuffer;$&&(a=e.def(s.extensions,".webgl_draw_buffers"));var s=(l=t.constants).drawBuffer,l=l.backBuffer;t=r?r.append(t,e):e.def(o,".next"),n||e("if(",t,"!==",o,".cur){"),e("if(",t,"){",i,".bindFramebuffer(",36160,",",t,".framebuffer);"),$&&e(a,".drawBuffersWEBGL(",s,"[",t,".colorAttachments.length]);"),e("}else{",i,".bindFramebuffer(",36160,",null);"),$&&e(a,".drawBuffersWEBGL(",l,");"),e("}",o,".cur=",t,";"),n||e("}")}function E(t,e,r){var n=t.shared,a=n.gl,o=t.current,s=t.next,l=n.current,c=n.next,u=t.cond(l,".dirty");nt.forEach(function(e){var n,h;if(!((e=m(e))in r.state))if(e in s){n=s[e],h=o[e];var f=i(tt[e].length,function(t){return u.def(n,"[",t,"]")});u(t.cond(f.map(function(t,e){return t+"!=="+h+"["+e+"]"}).join("||")).then(a,".",it[e],"(",f,");",f.map(function(t,e){return h+"["+e+"]="+t}).join(";"),";"))}else n=u.def(c,".",e),f=t.cond(n,"!==",l,".",e),u(f),e in at?f(t.cond(n).then(a,".enable(",at[e],");").else(a,".disable(",at[e],");"),l,".",e,"=",n,";"):f(a,".",it[e],"(",n,");",l,".",e,"=",n,";")}),0===Object.keys(r.state).length&&u(l,".dirty=false;"),e(u)}function L(t,e,r,n){var a=t.shared,i=t.current,o=a.current,s=a.gl;z(Object.keys(r)).forEach(function(a){var l=r[a];if(!n||n(l)){var c=l.append(t,e);if(at[a]){var u=at[a];D(l)?e(s,c?".enable(":".disable(",u,");"):e(t.cond(c).then(s,".enable(",u,");").else(s,".disable(",u,");")),e(o,".",a,"=",c,";")}else if(v(c)){var h=i[a];e(s,".",it[a],"(",c,");",c.map(function(t,e){return h+"["+e+"]="+t}).join(";"),";")}else e(s,".",it[a],"(",c,");",o,".",a,"=",c,";")}})}function C(t,e){Q&&(t.instancing=e.def(t.shared.extensions,".angle_instanced_arrays"))}function B(t,e,r,n,a){function i(){return"undefined"==typeof performance?"Date.now()":"performance.now()"}function o(t){t(c=e.def(),"=",i(),";"),"string"==typeof a?t(f,".count+=",a,";"):t(f,".count++;"),d&&(n?t(u=e.def(),"=",g,".getNumPendingQueries();"):t(g,".beginQuery(",f,");"))}function s(t){t(f,".cpuTime+=",i(),"-",c,";"),d&&(n?t(g,".pushScopeStats(",u,",",g,".getNumPendingQueries(),",f,");"):t(g,".endQuery();"))}function l(t){var r=e.def(p,".profile");e(p,".profile=",t,";"),e.exit(p,".profile=",r,";")}var c,u,h=t.shared,f=t.stats,p=h.current,g=h.timer;if(r=r.profile){if(D(r))return void(r.enable?(o(e),s(e.exit),l("true")):l("false"));l(r=r.append(t,e))}else r=e.def(p,".profile");o(h=t.block()),e("if(",r,"){",h,"}"),s(t=t.block()),e.exit("if(",r,"){",t,"}")}function N(t,e,r,n,a){function i(r,n,a){function i(){e("if(!",u,".buffer){",l,".enableVertexAttribArray(",c,");}");var r,i=a.type;r=a.size?e.def(a.size,"||",n):n,e("if(",u,".type!==",i,"||",u,".size!==",r,"||",p.map(function(t){return u+"."+t+"!=="+a[t]}).join("||"),"){",l,".bindBuffer(",34962,",",h,".buffer);",l,".vertexAttribPointer(",[c,r,i,a.normalized,a.stride,a.offset],");",u,".type=",i,";",u,".size=",r,";",p.map(function(t){return u+"."+t+"="+a[t]+";"}).join(""),"}"),Q&&(i=a.divisor,e("if(",u,".divisor!==",i,"){",t.instancing,".vertexAttribDivisorANGLE(",[c,i],");",u,".divisor=",i,";}"))}function s(){e("if(",u,".buffer){",l,".disableVertexAttribArray(",c,");","}if(",bt.map(function(t,e){return u+"."+t+"!=="+f[e]}).join("||"),"){",l,".vertexAttrib4f(",c,",",f,");",bt.map(function(t,e){return u+"."+t+"="+f[e]+";"}).join(""),"}")}var l=o.gl,c=e.def(r,".location"),u=e.def(o.attributes,"[",c,"]");r=a.state;var h=a.buffer,f=[a.x,a.y,a.z,a.w],p=["buffer","normalized","offset","stride"];1===r?i():2===r?s():(e("if(",r,"===",1,"){"),i(),e("}else{"),s(),e("}"))}var o=t.shared;n.forEach(function(n){var o,s=n.name,l=r.attributes[s];if(l){if(!a(l))return;o=l.append(t,e)}else{if(!a(At))return;var c=t.scopeAttrib(s);o={},Object.keys(new Z).forEach(function(t){o[t]=e.def(c,".",t)})}i(t.link(n),function(t){switch(t){case 35664:case 35667:case 35671:return 2;case 35665:case 35668:case 35672:return 3;case 35666:case 35669:case 35673:return 4;default:return 1}}(n.info.type),o)})}function j(t,r,n,a,o){for(var s,l=t.shared,c=l.gl,u=0;u<a.length;++u){var h,f=(g=a[u]).name,p=g.info.type,d=n.uniforms[f],g=t.link(g)+".location";if(d){if(!o(d))continue;if(D(d)){if(f=d.value,35678===p||35680===p)r(c,".uniform1i(",g,",",(p=t.link(f._texture||f.color[0]._texture))+".bind());"),r.exit(p,".unbind();");else if(35674===p||35675===p||35676===p)d=2,35675===p?d=3:35676===p&&(d=4),r(c,".uniformMatrix",d,"fv(",g,",false,",f=t.global.def("new Float32Array(["+Array.prototype.slice.call(f)+"])"),");");else{switch(p){case 5126:s="1f";break;case 35664:s="2f";break;case 35665:s="3f";break;case 35666:s="4f";break;case 35670:case 5124:s="1i";break;case 35671:case 35667:s="2i";break;case 35672:case 35668:s="3i";break;case 35673:s="4i";break;case 35669:s="4i"}r(c,".uniform",s,"(",g,",",v(f)?Array.prototype.slice.call(f):f,");")}continue}h=d.append(t,r)}else{if(!o(At))continue;h=r.def(l.uniforms,"[",e.id(f),"]")}switch(35678===p?r("if(",h,"&&",h,'._reglType==="framebuffer"){',h,"=",h,".color[0];","}"):35680===p&&r("if(",h,"&&",h,'._reglType==="framebufferCube"){',h,"=",h,".color[0];","}"),f=1,p){case 35678:case 35680:p=r.def(h,"._texture"),r(c,".uniform1i(",g,",",p,".bind());"),r.exit(p,".unbind();");continue;case 5124:case 35670:s="1i";break;case 35667:case 35671:s="2i",f=2;break;case 35668:case 35672:s="3i",f=3;break;case 35669:case 35673:s="4i",f=4;break;case 5126:s="1f";break;case 35664:s="2f",f=2;break;case 35665:s="3f",f=3;break;case 35666:s="4f",f=4;break;case 35674:s="Matrix2fv";break;case 35675:s="Matrix3fv";break;case 35676:s="Matrix4fv"}if(r(c,".uniform",s,"(",g,","),"M"===s.charAt(0)){g=Math.pow(p-35674+2,2);var m=t.global.def("new Float32Array(",g,")");r("false,(Array.isArray(",h,")||",h," instanceof Float32Array)?",h,":(",i(g,function(t){return m+"["+t+"]="+h+"["+t+"]"}),",",m,")")}else r(1<f?i(f,function(t){return h+"["+t+"]"}):h);r(");")}}function V(t,e,r,n){function a(a){var i=f[a];return i?i.contextDep&&n.contextDynamic||i.propDep?i.append(t,r):i.append(t,e):e.def(h,".",a)}function i(){function t(){r(l,".drawElementsInstancedANGLE(",[d,v,m,g+"<<(("+m+"-5121)>>1)",s],");")}function e(){r(l,".drawArraysInstancedANGLE(",[d,g,v,s],");")}p?y?t():(r("if(",p,"){"),t(),r("}else{"),e(),r("}")):e()}function o(){function t(){r(u+".drawElements("+[d,v,m,g+"<<(("+m+"-5121)>>1)"]+");")}function e(){r(u+".drawArrays("+[d,g,v]+");")}p?y?t():(r("if(",p,"){"),t(),r("}else{"),e(),r("}")):e()}var s,l,c=t.shared,u=c.gl,h=c.draw,f=n.draw,p=function(){var a=f.elements,i=e;return a?((a.contextDep&&n.contextDynamic||a.propDep)&&(i=r),a=a.append(t,i)):a=i.def(h,".","elements"),a&&i("if("+a+")"+u+".bindBuffer(34963,"+a+".buffer.buffer);"),a}(),d=a("primitive"),g=a("offset"),v=function(){var a=f.count,i=e;return a?((a.contextDep&&n.contextDynamic||a.propDep)&&(i=r),a=a.append(t,i)):a=i.def(h,".","count"),a}();if("number"==typeof v){if(0===v)return}else r("if(",v,"){"),r.exit("}");Q&&(s=a("instances"),l=t.instancing);var m=p+".type",y=f.elements&&D(f.elements);Q&&("number"!=typeof s||0<=s)?"string"==typeof s?(r("if(",s,">0){"),i(),r("}else if(",s,"<0){"),o(),r("}")):i():o()}function q(t,e,r,n,a){return a=(e=b()).proc("body",a),Q&&(e.instancing=a.def(e.shared.extensions,".angle_instanced_arrays")),t(e,a,r,n),e.compile().body}function H(t,e,r,n){C(t,e),N(t,e,r,n.attributes,function(){return!0}),j(t,e,r,n.uniforms,function(){return!0}),V(t,e,e,r)}function G(t,e,r,n){function a(){return!0}t.batchId="a1",C(t,e),N(t,e,r,n.attributes,a),j(t,e,r,n.uniforms,a),V(t,e,e,r)}function Y(t,e,r,n){function a(t){return t.contextDep&&o||t.propDep}function i(t){return!a(t)}C(t,e);var o=r.contextDep,s=e.def(),l=e.def();t.shared.props=l,t.batchId=s;var c=t.scope(),u=t.scope();e(c.entry,"for(",s,"=0;",s,"<","a1",";++",s,"){",l,"=","a0","[",s,"];",u,"}",c.exit),r.needsContext&&A(t,u,r.context),r.needsFramebuffer&&S(t,u,r.framebuffer),L(t,u,r.state,a),r.profile&&a(r.profile)&&B(t,u,r,!1,!0),n?(N(t,c,r,n.attributes,i),N(t,u,r,n.attributes,a),j(t,c,r,n.uniforms,i),j(t,u,r,n.uniforms,a),V(t,c,u,r)):(e=t.global.def("{}"),n=r.shader.progVar.append(t,u),l=u.def(n,".id"),c=u.def(e,"[",l,"]"),u(t.shared.gl,".useProgram(",n,".program);","if(!",c,"){",c,"=",e,"[",l,"]=",t.link(function(e){return q(G,t,r,e,2)}),"(",n,");}",c,".call(this,a0[",s,"],",s,");"))}function W(t,r){function n(e){var n=r.shader[e];n&&a.set(i.shader,"."+e,n.append(t,a))}var a=t.proc("scope",3);t.batchId="a2";var i=t.shared,o=i.current;A(t,a,r.context),r.framebuffer&&r.framebuffer.append(t,a),z(Object.keys(r.state)).forEach(function(e){var n=r.state[e].append(t,a);v(n)?n.forEach(function(r,n){a.set(t.next[e],"["+n+"]",r)}):a.set(i.next,"."+e,n)}),B(t,a,r,!0,!0),["elements","offset","count","instances","primitive"].forEach(function(e){var n=r.draw[e];n&&a.set(i.draw,"."+e,""+n.append(t,a))}),Object.keys(r.uniforms).forEach(function(n){a.set(i.uniforms,"["+e.id(n)+"]",r.uniforms[n].append(t,a))}),Object.keys(r.attributes).forEach(function(e){var n=r.attributes[e].append(t,a),i=t.scopeAttrib(e);Object.keys(new Z).forEach(function(t){a.set(i,"."+t,n[t])})}),n("vert"),n("frag"),0<Object.keys(r.state).length&&(a(o,".dirty=true;"),a.exit(o,".dirty=true;")),a("a1(",t.shared.context,",a0,",t.batchId,");")}function X(t,e,r){var n=e.static[r];if(n&&function(t){if("object"==typeof t&&!v(t)){for(var e=Object.keys(t),r=0;r<e.length;++r)if(U.isDynamic(t[e[r]]))return!0;return!1}}(n)){var a=t.global,i=Object.keys(n),o=!1,s=!1,l=!1,c=t.global.def("{}");i.forEach(function(e){var r=n[e];if(U.isDynamic(r))"function"==typeof r&&(r=n[e]=U.unbox(r)),e=F(r,null),o=o||e.thisDep,l=l||e.propDep,s=s||e.contextDep;else{switch(a(c,".",e,"="),typeof r){case"number":a(r);break;case"string":a('"',r,'"');break;case"object":Array.isArray(r)&&a("[",r.join(),"]");break;default:a(t.link(r))}a(";")}}),e.dynamic[r]=new U.DynamicVariable(4,{thisDep:o,contextDep:s,propDep:l,ref:c,append:function(t,e){i.forEach(function(r){var a=n[r];U.isDynamic(a)&&(a=t.invoke(e,a),e(c,".",r,"=",a,";"))})}}),delete e.static[r]}}var Z=u.Record,J={add:32774,subtract:32778,"reverse subtract":32779};r.ext_blend_minmax&&(J.min=32775,J.max=32776);var Q=r.angle_instanced_arrays,$=r.webgl_draw_buffers,tt={dirty:!0,profile:g.profile},et={},nt=[],at={},it={};y("dither",3024),y("blend.enable",3042),x("blend.color","blendColor",[0,0,0,0]),x("blend.equation","blendEquationSeparate",[32774,32774]),x("blend.func","blendFuncSeparate",[1,0,1,0]),y("depth.enable",2929,!0),x("depth.func","depthFunc",513),x("depth.range","depthRange",[0,1]),x("depth.mask","depthMask",!0),x("colorMask","colorMask",[!0,!0,!0,!0]),y("cull.enable",2884),x("cull.face","cullFace",1029),x("frontFace","frontFace",2305),x("lineWidth","lineWidth",1),y("polygonOffset.enable",32823),x("polygonOffset.offset","polygonOffset",[0,0]),y("sample.alpha",32926),y("sample.enable",32928),x("sample.coverage","sampleCoverage",[1,!1]),y("stencil.enable",2960),x("stencil.mask","stencilMask",-1),x("stencil.func","stencilFunc",[519,0,-1]),x("stencil.opFront","stencilOpSeparate",[1028,7680,7680,7680]),x("stencil.opBack","stencilOpSeparate",[1029,7680,7680,7680]),y("scissor.enable",3089),x("scissor.box","scissor",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]),x("viewport","viewport",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]);var ot={gl:t,context:p,strings:e,next:et,current:tt,draw:f,elements:o,buffer:a,shader:h,attributes:u.state,uniforms:c,framebuffer:l,extensions:r,timer:d,isBufferArgs:O},st={primTypes:rt,compareFuncs:kt,blendFuncs:wt,blendEquations:J,stencilOps:Tt,glTypes:K,orientationType:Mt};$&&(st.backBuffer=[1029],st.drawBuffer=i(n.maxDrawbuffers,function(t){return 0===t?[0]:i(t,function(t){return 36064+t})}));var lt=0;return{next:et,current:tt,procs:function(){var t=b(),e=t.proc("poll"),r=t.proc("refresh"),a=t.block();e(a),r(a);var o,s=t.shared,l=s.gl,c=s.next,u=s.current;a(u,".dirty=false;"),S(t,e),S(t,r,null,!0),Q&&(o=t.link(Q));for(var h=0;h<n.maxAttributes;++h){var f=r.def(s.attributes,"[",h,"]"),p=t.cond(f,".buffer");p.then(l,".enableVertexAttribArray(",h,");",l,".bindBuffer(",34962,",",f,".buffer.buffer);",l,".vertexAttribPointer(",h,",",f,".size,",f,".type,",f,".normalized,",f,".stride,",f,".offset);").else(l,".disableVertexAttribArray(",h,");",l,".vertexAttrib4f(",h,",",f,".x,",f,".y,",f,".z,",f,".w);",f,".buffer=null;"),r(p),Q&&r(o,".vertexAttribDivisorANGLE(",h,",",f,".divisor);")}return Object.keys(at).forEach(function(n){var i=at[n],o=a.def(c,".",n),s=t.block();s("if(",o,"){",l,".enable(",i,")}else{",l,".disable(",i,")}",u,".",n,"=",o,";"),r(s),e("if(",o,"!==",u,".",n,"){",s,"}")}),Object.keys(it).forEach(function(n){var o,s,h=it[n],f=tt[n],p=t.block();p(l,".",h,"("),v(f)?(h=f.length,o=t.global.def(c,".",n),s=t.global.def(u,".",n),p(i(h,function(t){return o+"["+t+"]"}),");",i(h,function(t){return s+"["+t+"]="+o+"["+t+"];"}).join("")),e("if(",i(h,function(t){return o+"["+t+"]!=="+s+"["+t+"]"}).join("||"),"){",p,"}")):(o=a.def(c,".",n),s=a.def(u,".",n),p(o,");",u,".",n,"=",o,";"),e("if(",o,"!==",s,"){",p,"}")),r(p)}),t.compile()}(),compile:function(t,e,r,n,a){var i=b();return i.stats=i.link(a),Object.keys(e.static).forEach(function(t){X(i,e,t)}),_t.forEach(function(e){X(i,t,e)}),r=M(t,e,r,n),function(t,e){var r=t.proc("draw",1);C(t,r),A(t,r,e.context),S(t,r,e.framebuffer),E(t,r,e),L(t,r,e.state),B(t,r,e,!1,!0);var n=e.shader.progVar.append(t,r);if(r(t.shared.gl,".useProgram(",n,".program);"),e.shader.program)H(t,r,e,e.shader.program);else{var a=t.global.def("{}"),i=r.def(n,".id"),o=r.def(a,"[",i,"]");r(t.cond(o).then(o,".call(this,a0);").else(o,"=",a,"[",i,"]=",t.link(function(r){return q(H,t,e,r,1)}),"(",n,");",o,".call(this,a0);"))}0<Object.keys(e.state).length&&r(t.shared.current,".dirty=true;")}(i,r),W(i,r),function(t,e){function r(t){return t.contextDep&&a||t.propDep}var n=t.proc("batch",2);t.batchId="0",C(t,n);var a=!1,i=!0;Object.keys(e.context).forEach(function(t){a=a||e.context[t].propDep}),a||(A(t,n,e.context),i=!1);var o=!1;if((s=e.framebuffer)?(s.propDep?a=o=!0:s.contextDep&&a&&(o=!0),o||S(t,n,s)):S(t,n,null),e.state.viewport&&e.state.viewport.propDep&&(a=!0),E(t,n,e),L(t,n,e.state,function(t){return!r(t)}),e.profile&&r(e.profile)||B(t,n,e,!1,"a1"),e.contextDep=a,e.needsContext=i,e.needsFramebuffer=o,(i=e.shader.progVar).contextDep&&a||i.propDep)Y(t,n,e,null);else if(i=i.append(t,n),n(t.shared.gl,".useProgram(",i,".program);"),e.shader.program)Y(t,n,e,e.shader.program);else{var s=t.global.def("{}"),l=(o=n.def(i,".id"),n.def(s,"[",o,"]"));n(t.cond(l).then(l,".call(this,a0,a1);").else(l,"=",s,"[",o,"]=",t.link(function(r){return q(Y,t,e,r,2)}),"(",i,");",l,".call(this,a0,a1);"))}0<Object.keys(e.state).length&&n(t.shared.current,".dirty=true;")}(i,r),i.compile()}}}function N(t,e){for(var r=0;r<t.length;++r)if(t[r]===e)return r;return-1}var j=function(t,e){for(var r=Object.keys(e),n=0;n<r.length;++n)t[r[n]]=e[r[n]];return t},V=0,U={DynamicVariable:t,define:function(r,n){return new t(r,e(n+""))},isDynamic:function(e){return"function"==typeof e&&!e._reglType||e instanceof t},unbox:function(e,r){return"function"==typeof e?new t(0,e):e},accessor:e},q={next:"function"==typeof requestAnimationFrame?function(t){return requestAnimationFrame(t)}:function(t){return setTimeout(t,16)},cancel:"function"==typeof cancelAnimationFrame?function(t){return cancelAnimationFrame(t)}:clearTimeout},H="undefined"!=typeof performance&&performance.now?function(){return performance.now()}:function(){return+new Date},G=s();G.zero=s();var Y=function(t,e){var r=1;e.ext_texture_filter_anisotropic&&(r=t.getParameter(34047));var n=1,a=1;e.webgl_draw_buffers&&(n=t.getParameter(34852),a=t.getParameter(36063));var i=!!e.oes_texture_float;if(i){i=t.createTexture(),t.bindTexture(3553,i),t.texImage2D(3553,0,6408,1,1,0,6408,5126,null);var o=t.createFramebuffer();if(t.bindFramebuffer(36160,o),t.framebufferTexture2D(36160,36064,3553,i,0),t.bindTexture(3553,null),36053!==t.checkFramebufferStatus(36160))i=!1;else{t.viewport(0,0,1,1),t.clearColor(1,0,0,1),t.clear(16384);var s=G.allocType(5126,4);t.readPixels(0,0,1,1,6408,5126,s),t.getError()?i=!1:(t.deleteFramebuffer(o),t.deleteTexture(i),i=1===s[0]),G.freeType(s)}}return s=!0,"undefined"!=typeof navigator&&(/MSIE/.test(navigator.userAgent)||/Trident\//.test(navigator.appVersion)||/Edge/.test(navigator.userAgent))||(s=t.createTexture(),o=G.allocType(5121,36),t.activeTexture(33984),t.bindTexture(34067,s),t.texImage2D(34069,0,6408,3,3,0,6408,5121,o),G.freeType(o),t.bindTexture(34067,null),t.deleteTexture(s),s=!t.getError()),{colorBits:[t.getParameter(3410),t.getParameter(3411),t.getParameter(3412),t.getParameter(3413)],depthBits:t.getParameter(3414),stencilBits:t.getParameter(3415),subpixelBits:t.getParameter(3408),extensions:Object.keys(e).filter(function(t){return!!e[t]}),maxAnisotropic:r,maxDrawbuffers:n,maxColorAttachments:a,pointSizeDims:t.getParameter(33901),lineWidthDims:t.getParameter(33902),maxViewportDims:t.getParameter(3386),maxCombinedTextureUnits:t.getParameter(35661),maxCubeMapSize:t.getParameter(34076),maxRenderbufferSize:t.getParameter(34024),maxTextureUnits:t.getParameter(34930),maxTextureSize:t.getParameter(3379),maxAttributes:t.getParameter(34921),maxVertexUniforms:t.getParameter(36347),maxVertexTextureUnits:t.getParameter(35660),maxVaryingVectors:t.getParameter(36348),maxFragmentUniforms:t.getParameter(36349),glsl:t.getParameter(35724),renderer:t.getParameter(7937),vendor:t.getParameter(7936),version:t.getParameter(7938),readFloat:i,npotTextureCube:s}},W=function(t){return t instanceof Uint8Array||t instanceof Uint16Array||t instanceof Uint32Array||t instanceof Int8Array||t instanceof Int16Array||t instanceof Int32Array||t instanceof Float32Array||t instanceof Float64Array||t instanceof Uint8ClampedArray},X=function(t){return Object.keys(t).map(function(e){return t[e]})},Z={shape:function(t){for(var e=[];t.length;t=t[0])e.push(t.length);return e},flatten:function(t,e,r,n){var a=1;if(e.length)for(var i=0;i<e.length;++i)a*=e[i];else a=0;switch(r=n||G.allocType(r,a),e.length){case 0:break;case 1:for(n=e[0],e=0;e<n;++e)r[e]=t[e];break;case 2:for(n=e[0],e=e[1],i=a=0;i<n;++i)for(var o=t[i],s=0;s<e;++s)r[a++]=o[s];break;case 3:c(t,e[0],e[1],e[2],r,0);break;default:!function t(e,r,n,a,i){for(var o=1,s=n+1;s<r.length;++s)o*=r[s];var l=r[n];if(4==r.length-n){var u=r[n+1],h=r[n+2];for(r=r[n+3],s=0;s<l;++s)c(e[s],u,h,r,a,i),i+=o}else for(s=0;s<l;++s)t(e[s],r,n+1,a,i),i+=o}(t,e,0,r,0)}return r}},J={"[object Int8Array]":5120,"[object Int16Array]":5122,"[object Int32Array]":5124,"[object Uint8Array]":5121,"[object Uint8ClampedArray]":5121,"[object Uint16Array]":5123,"[object Uint32Array]":5125,"[object Float32Array]":5126,"[object Float64Array]":5121,"[object ArrayBuffer]":5121},K={int8:5120,int16:5122,int32:5124,uint8:5121,uint16:5123,uint32:5125,float:5126,float32:5126},Q={dynamic:35048,stream:35040,static:35044},$=Z.flatten,tt=Z.shape,et=[];et[5120]=1,et[5122]=2,et[5124]=4,et[5121]=1,et[5123]=2,et[5125]=4,et[5126]=4;var rt={points:0,point:0,lines:1,line:1,triangles:4,triangle:4,"line loop":2,"line strip":3,"triangle strip":5,"triangle fan":6},nt=new Float32Array(1),at=new Uint32Array(nt.buffer),it=[9984,9986,9985,9987],ot=[0,6409,6410,6407,6408],st={};st[6409]=st[6406]=st[6402]=1,st[34041]=st[6410]=2,st[6407]=st[35904]=3,st[6408]=st[35906]=4;var lt=m("HTMLCanvasElement"),ct=m("CanvasRenderingContext2D"),ut=m("ImageBitmap"),ht=m("HTMLImageElement"),ft=m("HTMLVideoElement"),pt=Object.keys(J).concat([lt,ct,ut,ht,ft]),dt=[];dt[5121]=1,dt[5126]=4,dt[36193]=2,dt[5123]=2,dt[5125]=4;var gt=[];gt[32854]=2,gt[32855]=2,gt[36194]=2,gt[34041]=4,gt[33776]=.5,gt[33777]=.5,gt[33778]=1,gt[33779]=1,gt[35986]=.5,gt[35987]=1,gt[34798]=1,gt[35840]=.5,gt[35841]=.25,gt[35842]=.5,gt[35843]=.25,gt[36196]=.5;var vt=[];vt[32854]=2,vt[32855]=2,vt[36194]=2,vt[33189]=2,vt[36168]=1,vt[34041]=4,vt[35907]=4,vt[34836]=16,vt[34842]=8,vt[34843]=6;var mt=function(t,e,r,n,a){function i(t){this.id=c++,this.refCount=1,this.renderbuffer=t,this.format=32854,this.height=this.width=0,a.profile&&(this.stats={size:0})}function o(e){var r=e.renderbuffer;t.bindRenderbuffer(36161,null),t.deleteRenderbuffer(r),e.renderbuffer=null,e.refCount=0,delete u[e.id],n.renderbufferCount--}var s={rgba4:32854,rgb565:36194,"rgb5 a1":32855,depth:33189,stencil:36168,"depth stencil":34041};e.ext_srgb&&(s.srgba=35907),e.ext_color_buffer_half_float&&(s.rgba16f=34842,s.rgb16f=34843),e.webgl_color_buffer_float&&(s.rgba32f=34836);var l=[];Object.keys(s).forEach(function(t){l[s[t]]=t});var c=0,u={};return i.prototype.decRef=function(){0>=--this.refCount&&o(this)},a.profile&&(n.getTotalRenderbufferSize=function(){var t=0;return Object.keys(u).forEach(function(e){t+=u[e].stats.size}),t}),{create:function(e,r){function o(e,r){var n=0,i=0,u=32854;if("object"==typeof e&&e?("shape"in e?(n=0|(i=e.shape)[0],i=0|i[1]):("radius"in e&&(n=i=0|e.radius),"width"in e&&(n=0|e.width),"height"in e&&(i=0|e.height)),"format"in e&&(u=s[e.format])):"number"==typeof e?(n=0|e,i="number"==typeof r?0|r:n):e||(n=i=1),n!==c.width||i!==c.height||u!==c.format)return o.width=c.width=n,o.height=c.height=i,c.format=u,t.bindRenderbuffer(36161,c.renderbuffer),t.renderbufferStorage(36161,u,n,i),a.profile&&(c.stats.size=vt[c.format]*c.width*c.height),o.format=l[c.format],o}var c=new i(t.createRenderbuffer());return u[c.id]=c,n.renderbufferCount++,o(e,r),o.resize=function(e,r){var n=0|e,i=0|r||n;return n===c.width&&i===c.height?o:(o.width=c.width=n,o.height=c.height=i,t.bindRenderbuffer(36161,c.renderbuffer),t.renderbufferStorage(36161,c.format,n,i),a.profile&&(c.stats.size=vt[c.format]*c.width*c.height),o)},o._reglType="renderbuffer",o._renderbuffer=c,a.profile&&(o.stats=c.stats),o.destroy=function(){c.decRef()},o},clear:function(){X(u).forEach(o)},restore:function(){X(u).forEach(function(e){e.renderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,e.renderbuffer),t.renderbufferStorage(36161,e.format,e.width,e.height)}),t.bindRenderbuffer(36161,null)}}},yt=[];yt[6408]=4,yt[6407]=3;var xt=[];xt[5121]=1,xt[5126]=4,xt[36193]=2;var bt=["x","y","z","w"],_t="blend.func blend.equation stencil.func stencil.opFront stencil.opBack sample.coverage viewport scissor.box polygonOffset.offset".split(" "),wt={0:0,1:1,zero:0,one:1,"src color":768,"one minus src color":769,"src alpha":770,"one minus src alpha":771,"dst color":774,"one minus dst color":775,"dst alpha":772,"one minus dst alpha":773,"constant color":32769,"one minus constant color":32770,"constant alpha":32771,"one minus constant alpha":32772,"src alpha saturate":776},kt={never:512,less:513,"<":513,equal:514,"=":514,"==":514,"===":514,lequal:515,"<=":515,greater:516,">":516,notequal:517,"!=":517,"!==":517,gequal:518,">=":518,always:519},Tt={0:0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,"increment wrap":34055,"decrement wrap":34056,invert:5386},Mt={cw:2304,ccw:2305},At=new I(!1,!1,!1,function(){});return function(t){function e(){if(0===Z.length)w&&w.update(),$=null;else{$=q.next(e),h();for(var t=Z.length-1;0<=t;--t){var r=Z[t];r&&r(P,null,0)}v.flush(),w&&w.update()}}function r(){!$&&0<Z.length&&($=q.next(e))}function n(){$&&(q.cancel(e),$=null)}function i(t){t.preventDefault(),n(),J.forEach(function(t){t()})}function o(t){v.getError(),y.restore(),D.restore(),z.restore(),R.restore(),F.restore(),V.restore(),w&&w.restore(),G.procs.refresh(),r(),K.forEach(function(t){t()})}function s(t){function e(t){var e={},r={};return Object.keys(t).forEach(function(n){var a=t[n];U.isDynamic(a)?r[n]=U.unbox(a,n):e[n]=a}),{dynamic:r,static:e}}var r=e(t.context||{}),n=e(t.uniforms||{}),a=e(t.attributes||{}),i=e(function(t){function e(t){if(t in r){var e=r[t];delete r[t],Object.keys(e).forEach(function(n){r[t+"."+n]=e[n]})}}var r=j({},t);return delete r.uniforms,delete r.attributes,delete r.context,"stencil"in r&&r.stencil.op&&(r.stencil.opBack=r.stencil.opFront=r.stencil.op,delete r.stencil.op),e("blend"),e("depth"),e("cull"),e("stencil"),e("polygonOffset"),e("scissor"),e("sample"),r}(t));t={gpuTime:0,cpuTime:0,count:0};var o=(r=G.compile(i,a,n,r,t)).draw,s=r.batch,l=r.scope,c=[];return j(function(t,e){var r;if("function"==typeof t)return l.call(this,null,t,0);if("function"==typeof e)if("number"==typeof t)for(r=0;r<t;++r)l.call(this,null,e,r);else{if(!Array.isArray(t))return l.call(this,t,e,0);for(r=0;r<t.length;++r)l.call(this,t[r],e,r)}else if("number"==typeof t){if(0<t)return s.call(this,function(t){for(;c.length<t;)c.push(null);return c}(0|t),0|t)}else{if(!Array.isArray(t))return o.call(this,t);if(t.length)return s.call(this,t,t.length)}},{stats:t})}function l(t,e){var r=0;G.procs.poll();var n=e.color;n&&(v.clearColor(+n[0]||0,+n[1]||0,+n[2]||0,+n[3]||0),r|=16384),"depth"in e&&(v.clearDepth(+e.depth),r|=256),"stencil"in e&&(v.clearStencil(0|e.stencil),r|=1024),v.clear(r)}function c(t){return Z.push(t),r(),{cancel:function(){var e=N(Z,t);Z[e]=function t(){var e=N(Z,t);Z[e]=Z[Z.length-1],--Z.length,0>=Z.length&&n()}}}}function u(){var t=W.viewport,e=W.scissor_box;t[0]=t[1]=e[0]=e[1]=0,P.viewportWidth=P.framebufferWidth=P.drawingBufferWidth=t[2]=e[2]=v.drawingBufferWidth,P.viewportHeight=P.framebufferHeight=P.drawingBufferHeight=t[3]=e[3]=v.drawingBufferHeight}function h(){P.tick+=1,P.time=g(),u(),G.procs.poll()}function f(){u(),G.procs.refresh(),w&&w.update()}function g(){return(H()-k)/1e3}if(!(t=a(t)))return null;var v=t.gl,m=v.getContextAttributes();v.isContextLost();var y=function(t,e){function r(e){var r;e=e.toLowerCase();try{r=n[e]=t.getExtension(e)}catch(t){}return!!r}for(var n={},a=0;a<e.extensions.length;++a){var i=e.extensions[a];if(!r(i))return e.onDestroy(),e.onDone('"'+i+'" extension is not supported by the current WebGL context, try upgrading your system or a different browser'),null}return e.optionalExtensions.forEach(r),{extensions:n,restore:function(){Object.keys(n).forEach(function(t){if(n[t]&&!r(t))throw Error("(regl): error restoring extension "+t)})}}}(v,t);if(!y)return null;var x=function(){var t={"":0},e=[""];return{id:function(r){var n=t[r];return n||(n=t[r]=e.length,e.push(r),n)},str:function(t){return e[t]}}}(),b={bufferCount:0,elementsCount:0,framebufferCount:0,shaderCount:0,textureCount:0,cubeCount:0,renderbufferCount:0,maxTextureUnits:0},_=y.extensions,w=function(t,e){function r(){this.endQueryIndex=this.startQueryIndex=-1,this.sum=0,this.stats=null}function n(t,e,n){var a=o.pop()||new r;a.startQueryIndex=t,a.endQueryIndex=e,a.sum=0,a.stats=n,s.push(a)}if(!e.ext_disjoint_timer_query)return null;var a=[],i=[],o=[],s=[],l=[],c=[];return{beginQuery:function(t){var r=a.pop()||e.ext_disjoint_timer_query.createQueryEXT();e.ext_disjoint_timer_query.beginQueryEXT(35007,r),i.push(r),n(i.length-1,i.length,t)},endQuery:function(){e.ext_disjoint_timer_query.endQueryEXT(35007)},pushScopeStats:n,update:function(){var t,r;if(0!==(t=i.length)){c.length=Math.max(c.length,t+1),l.length=Math.max(l.length,t+1),l[0]=0;var n=c[0]=0;for(r=t=0;r<i.length;++r){var u=i[r];e.ext_disjoint_timer_query.getQueryObjectEXT(u,34919)?(n+=e.ext_disjoint_timer_query.getQueryObjectEXT(u,34918),a.push(u)):i[t++]=u,l[r+1]=n,c[r+1]=t}for(i.length=t,r=t=0;r<s.length;++r){var h=(n=s[r]).startQueryIndex;u=n.endQueryIndex,n.sum+=l[u]-l[h],h=c[h],(u=c[u])===h?(n.stats.gpuTime+=n.sum/1e6,o.push(n)):(n.startQueryIndex=h,n.endQueryIndex=u,s[t++]=n)}s.length=t}},getNumPendingQueries:function(){return i.length},clear:function(){a.push.apply(a,i);for(var t=0;t<a.length;t++)e.ext_disjoint_timer_query.deleteQueryEXT(a[t]);i.length=0,a.length=0},restore:function(){i.length=0,a.length=0}}}(0,_),k=H(),L=v.drawingBufferWidth,C=v.drawingBufferHeight,P={tick:0,time:0,viewportWidth:L,viewportHeight:C,framebufferWidth:L,framebufferHeight:C,drawingBufferWidth:L,drawingBufferHeight:C,pixelRatio:t.pixelRatio},O=Y(v,_),z=(L=function(t,e,r,n){for(t=r.maxAttributes,e=Array(t),r=0;r<t;++r)e[r]=new A;return{Record:A,scope:{},state:e}}(v,_,O),p(v,b,t,L)),I=d(v,_,z,b),D=S(v,x,b,t),R=T(v,_,O,function(){G.procs.poll()},P,b,t),F=mt(v,_,0,b,t),V=M(v,_,O,R,F,b),G=B(v,x,_,O,z,I,0,V,{},L,D,{elements:null,primitive:4,count:-1,offset:0,instances:-1},P,w,t),W=(x=E(v,V,G.procs.poll,P),G.next),X=v.canvas,Z=[],J=[],K=[],Q=[t.onDestroy],$=null;X&&(X.addEventListener("webglcontextlost",i,!1),X.addEventListener("webglcontextrestored",o,!1));var tt=V.setFBO=s({framebuffer:U.define.call(null,1,"framebuffer")});return f(),m=j(s,{clear:function(t){if("framebuffer"in t)if(t.framebuffer&&"framebufferCube"===t.framebuffer_reglType)for(var e=0;6>e;++e)tt(j({framebuffer:t.framebuffer.faces[e]},t),l);else tt(t,l);else l(0,t)},prop:U.define.bind(null,1),context:U.define.bind(null,2),this:U.define.bind(null,3),draw:s({}),buffer:function(t){return z.create(t,34962,!1,!1)},elements:function(t){return I.create(t,!1)},texture:R.create2D,cube:R.createCube,renderbuffer:F.create,framebuffer:V.create,framebufferCube:V.createCube,attributes:m,frame:c,on:function(t,e){var r;switch(t){case"frame":return c(e);case"lost":r=J;break;case"restore":r=K;break;case"destroy":r=Q}return r.push(e),{cancel:function(){for(var t=0;t<r.length;++t)if(r[t]===e){r[t]=r[r.length-1],r.pop();break}}}},limits:O,hasExtension:function(t){return 0<=O.extensions.indexOf(t.toLowerCase())},read:x,destroy:function(){Z.length=0,n(),X&&(X.removeEventListener("webglcontextlost",i),X.removeEventListener("webglcontextrestored",o)),D.clear(),V.clear(),F.clear(),R.clear(),I.clear(),z.clear(),w&&w.clear(),Q.forEach(function(t){t()})},_gl:v,_refresh:f,poll:function(){h(),w&&w.update()},now:g,stats:b}),t.onDone(null,m),m}},"object"==typeof r&&"undefined"!=typeof e?e.exports=a():n.createREGL=a()},{}],501:[function(t,e,r){"use strict";var n,a="";e.exports=function(t,e){if("string"!=typeof t)throw new TypeError("expected a string");if(1===e)return t;if(2===e)return t+t;var r=t.length*e;if(n!==t||"undefined"==typeof n)n=t,a="";else if(a.length>=r)return a.substr(0,r);for(;r>a.length&&e>1;)1&e&&(a+=t),e>>=1,t+=t;return a=(a+=t).substr(0,r)}},{}],502:[function(t,e,r){(function(t){e.exports=t.performance&&t.performance.now?function(){return performance.now()}:Date.now||function(){return+new Date}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],503:[function(t,e,r){"use strict";e.exports=function(t){for(var e=t.length,r=t[t.length-1],n=e,a=e-2;a>=0;--a){var i=r,o=t[a],s=(r=i+o)-i,l=o-s;l&&(t[--n]=r,r=l)}for(var c=0,a=n;a<e;++a){var i=t[a],o=r,s=(r=i+o)-i,l=o-s;l&&(t[c++]=l)}return t[c++]=r,t.length=c,t}},{}],504:[function(t,e,r){"use strict";var n=t("two-product"),a=t("robust-sum"),i=t("robust-scale"),o=t("robust-compress"),s=6;function l(t,e){for(var r=new Array(t.length-1),n=1;n<t.length;++n)for(var a=r[n-1]=new Array(t.length-1),i=0,o=0;i<t.length;++i)i!==e&&(a[o++]=t[n][i]);return r}function c(t){for(var e=new Array(t),r=0;r<t;++r){e[r]=new Array(t);for(var n=0;n<t;++n)e[r][n]=["m[",r,"][",n,"]"].join("")}return e}function u(t){if(2===t.length)return["sum(prod(",t[0][0],",",t[1][1],"),prod(-",t[0][1],",",t[1][0],"))"].join("");for(var e=[],r=0;r<t.length;++r)e.push(["scale(",u(l(t,r)),",",(n=r,1&n?"-":""),t[0][r],")"].join(""));return function t(e){if(1===e.length)return e[0];if(2===e.length)return["sum(",e[0],",",e[1],")"].join("");var r=e.length>>1;return["sum(",t(e.slice(0,r)),",",t(e.slice(r)),")"].join("")}(e);var n}function h(t){return new Function("sum","scale","prod","compress",["function robustDeterminant",t,"(m){return compress(",u(c(t)),")};return robustDeterminant",t].join(""))(a,i,n,o)}var f=[function(){return[0]},function(t){return[t[0][0]]}];!function(){for(;f.length<s;)f.push(h(f.length));for(var t=[],r=["function robustDeterminant(m){switch(m.length){"],n=0;n<s;++n)t.push("det"+n),r.push("case ",n,":return det",n,"(m);");r.push("}var det=CACHE[m.length];if(!det)det=CACHE[m.length]=gen(m.length);return det(m);}return robustDeterminant"),t.push("CACHE","gen",r.join(""));var a=Function.apply(void 0,t);for(e.exports=a.apply(void 0,f.concat([f,h])),n=0;n<f.length;++n)e.exports[n]=f[n]}()},{"robust-compress":503,"robust-scale":510,"robust-sum":513,"two-product":541}],505:[function(t,e,r){"use strict";var n=t("two-product"),a=t("robust-sum");e.exports=function(t,e){for(var r=n(t[0],e[0]),i=1;i<t.length;++i)r=a(r,n(t[i],e[i]));return r}},{"robust-sum":513,"two-product":541}],506:[function(t,e,r){"use strict";var n=t("two-product"),a=t("robust-sum"),i=t("robust-subtract"),o=t("robust-scale"),s=6;function l(t,e){for(var r=new Array(t.length-1),n=1;n<t.length;++n)for(var a=r[n-1]=new Array(t.length-1),i=0,o=0;i<t.length;++i)i!==e&&(a[o++]=t[n][i]);return r}function c(t){if(1===t.length)return t[0];if(2===t.length)return["sum(",t[0],",",t[1],")"].join("");var e=t.length>>1;return["sum(",c(t.slice(0,e)),",",c(t.slice(e)),")"].join("")}function u(t,e){if("m"===t.charAt(0)){if("w"===e.charAt(0)){var r=t.split("[");return["w",e.substr(1),"m",r[0].substr(1)].join("")}return["prod(",t,",",e,")"].join("")}return u(e,t)}function h(t){if(2===t.length)return[["diff(",u(t[0][0],t[1][1]),",",u(t[1][0],t[0][1]),")"].join("")];for(var e=[],r=0;r<t.length;++r)e.push(["scale(",c(h(l(t,r))),",",(n=r,!0&n?"-":""),t[0][r],")"].join(""));return e;var n}function f(t,e){for(var r=[],n=0;n<e-2;++n)r.push(["prod(m",t,"[",n,"],m",t,"[",n,"])"].join(""));return c(r)}function p(t){for(var e=[],r=[],s=function(t){for(var e=new Array(t),r=0;r<t;++r){e[r]=new Array(t);for(var n=0;n<t;++n)e[r][n]=["m",n,"[",t-r-2,"]"].join("")}return e}(t),u=0;u<t;++u)s[0][u]="1",s[t-1][u]="w"+u;for(u=0;u<t;++u)0==(1&u)?e.push.apply(e,h(l(s,u))):r.push.apply(r,h(l(s,u)));var p=c(e),d=c(r),g="exactInSphere"+t,v=[];for(u=0;u<t;++u)v.push("m"+u);var m=["function ",g,"(",v.join(),"){"];for(u=0;u<t;++u){m.push("var w",u,"=",f(u,t),";");for(var y=0;y<t;++y)y!==u&&m.push("var w",u,"m",y,"=scale(w",u,",m",y,"[0]);")}return m.push("var p=",p,",n=",d,",d=diff(p,n);return d[d.length-1];}return ",g),new Function("sum","diff","prod","scale",m.join(""))(a,i,n,o)}var d=[function(){return 0},function(){return 0},function(){return 0}];function g(t){var e=d[t.length];return e||(e=d[t.length]=p(t.length)),e.apply(void 0,t)}!function(){for(;d.length<=s;)d.push(p(d.length));for(var t=[],r=["slow"],n=0;n<=s;++n)t.push("a"+n),r.push("o"+n);var a=["function testInSphere(",t.join(),"){switch(arguments.length){case 0:case 1:return 0;"];for(n=2;n<=s;++n)a.push("case ",n,":return o",n,"(",t.slice(0,n).join(),");");a.push("}var s=new Array(arguments.length);for(var i=0;i<arguments.length;++i){s[i]=arguments[i]};return slow(s);}return testInSphere"),r.push(a.join(""));var i=Function.apply(void 0,r);for(e.exports=i.apply(void 0,[g].concat(d)),n=0;n<=s;++n)e.exports[n]=d[n]}()},{"robust-scale":510,"robust-subtract":512,"robust-sum":513,"two-product":541}],507:[function(t,e,r){"use strict";var n=t("robust-determinant"),a=6;function i(t){for(var e="robustLinearSolve"+t+"d",r=["function ",e,"(A,b){return ["],a=0;a<t;++a){r.push("det([");for(var i=0;i<t;++i){i>0&&r.push(","),r.push("[");for(var o=0;o<t;++o)o>0&&r.push(","),o===a?r.push("+b[",i,"]"):r.push("+A[",i,"][",o,"]");r.push("]")}r.push("]),")}r.push("det(A)]}return ",e);var s=new Function("det",r.join(""));return s(t<6?n[t]:n)}var o=[function(){return[0]},function(t,e){return[[e[0]],[t[0][0]]]}];!function(){for(;o.length<a;)o.push(i(o.length));for(var t=[],r=["function dispatchLinearSolve(A,b){switch(A.length){"],n=0;n<a;++n)t.push("s"+n),r.push("case ",n,":return s",n,"(A,b);");r.push("}var s=CACHE[A.length];if(!s)s=CACHE[A.length]=g(A.length);return s(A,b)}return dispatchLinearSolve"),t.push("CACHE","g",r.join(""));var s=Function.apply(void 0,t);for(e.exports=s.apply(void 0,o.concat([o,i])),n=0;n<a;++n)e.exports[n]=o[n]}()},{"robust-determinant":504}],508:[function(t,e,r){"use strict";var n=t("two-product"),a=t("robust-sum"),i=t("robust-scale"),o=t("robust-subtract"),s=5;function l(t,e){for(var r=new Array(t.length-1),n=1;n<t.length;++n)for(var a=r[n-1]=new Array(t.length-1),i=0,o=0;i<t.length;++i)i!==e&&(a[o++]=t[n][i]);return r}function c(t){if(1===t.length)return t[0];if(2===t.length)return["sum(",t[0],",",t[1],")"].join("");var e=t.length>>1;return["sum(",c(t.slice(0,e)),",",c(t.slice(e)),")"].join("")}function u(t){if(2===t.length)return[["sum(prod(",t[0][0],",",t[1][1],"),prod(-",t[0][1],",",t[1][0],"))"].join("")];for(var e=[],r=0;r<t.length;++r)e.push(["scale(",c(u(l(t,r))),",",(n=r,1&n?"-":""),t[0][r],")"].join(""));return e;var n}function h(t){for(var e=[],r=[],s=function(t){for(var e=new Array(t),r=0;r<t;++r){e[r]=new Array(t);for(var n=0;n<t;++n)e[r][n]=["m",n,"[",t-r-1,"]"].join("")}return e}(t),h=[],f=0;f<t;++f)0==(1&f)?e.push.apply(e,u(l(s,f))):r.push.apply(r,u(l(s,f))),h.push("m"+f);var p=c(e),d=c(r),g="orientation"+t+"Exact",v=["function ",g,"(",h.join(),"){var p=",p,",n=",d,",d=sub(p,n);return d[d.length-1];};return ",g].join("");return new Function("sum","prod","scale","sub",v)(a,n,i,o)}var f=h(3),p=h(4),d=[function(){return 0},function(){return 0},function(t,e){return e[0]-t[0]},function(t,e,r){var n,a=(t[1]-r[1])*(e[0]-r[0]),i=(t[0]-r[0])*(e[1]-r[1]),o=a-i;if(a>0){if(i<=0)return o;n=a+i}else{if(!(a<0))return o;if(i>=0)return o;n=-(a+i)}var s=3.3306690738754716e-16*n;return o>=s||o<=-s?o:f(t,e,r)},function(t,e,r,n){var a=t[0]-n[0],i=e[0]-n[0],o=r[0]-n[0],s=t[1]-n[1],l=e[1]-n[1],c=r[1]-n[1],u=t[2]-n[2],h=e[2]-n[2],f=r[2]-n[2],d=i*c,g=o*l,v=o*s,m=a*c,y=a*l,x=i*s,b=u*(d-g)+h*(v-m)+f*(y-x),_=7.771561172376103e-16*((Math.abs(d)+Math.abs(g))*Math.abs(u)+(Math.abs(v)+Math.abs(m))*Math.abs(h)+(Math.abs(y)+Math.abs(x))*Math.abs(f));return b>_||-b>_?b:p(t,e,r,n)}];function g(t){var e=d[t.length];return e||(e=d[t.length]=h(t.length)),e.apply(void 0,t)}!function(){for(;d.length<=s;)d.push(h(d.length));for(var t=[],r=["slow"],n=0;n<=s;++n)t.push("a"+n),r.push("o"+n);var a=["function getOrientation(",t.join(),"){switch(arguments.length){case 0:case 1:return 0;"];for(n=2;n<=s;++n)a.push("case ",n,":return o",n,"(",t.slice(0,n).join(),");");a.push("}var s=new Array(arguments.length);for(var i=0;i<arguments.length;++i){s[i]=arguments[i]};return slow(s);}return getOrientation"),r.push(a.join(""));var i=Function.apply(void 0,r);for(e.exports=i.apply(void 0,[g].concat(d)),n=0;n<=s;++n)e.exports[n]=d[n]}()},{"robust-scale":510,"robust-subtract":512,"robust-sum":513,"two-product":541}],509:[function(t,e,r){"use strict";var n=t("robust-sum"),a=t("robust-scale");e.exports=function(t,e){if(1===t.length)return a(e,t[0]);if(1===e.length)return a(t,e[0]);if(0===t.length||0===e.length)return[0];var r=[0];if(t.length<e.length)for(var i=0;i<t.length;++i)r=n(r,a(e,t[i]));else for(var i=0;i<e.length;++i)r=n(r,a(t,e[i]));return r}},{"robust-scale":510,"robust-sum":513}],510:[function(t,e,r){"use strict";var n=t("two-product"),a=t("two-sum");e.exports=function(t,e){var r=t.length;if(1===r){var i=n(t[0],e);return i[0]?i:[i[1]]}var o=new Array(2*r),s=[.1,.1],l=[.1,.1],c=0;n(t[0],e,s),s[0]&&(o[c++]=s[0]);for(var u=1;u<r;++u){n(t[u],e,l);var h=s[1];a(h,l[0],s),s[0]&&(o[c++]=s[0]);var f=l[1],p=s[1],d=f+p,g=d-f,v=p-g;s[1]=d,v&&(o[c++]=v)}s[1]&&(o[c++]=s[1]);0===c&&(o[c++]=0);return o.length=c,o}},{"two-product":541,"two-sum":542}],511:[function(t,e,r){"use strict";e.exports=function(t,e,r,a){var i=n(t,r,a),o=n(e,r,a);if(i>0&&o>0||i<0&&o<0)return!1;var s=n(r,t,e),l=n(a,t,e);if(s>0&&l>0||s<0&&l<0)return!1;if(0===i&&0===o&&0===s&&0===l)return function(t,e,r,n){for(var a=0;a<2;++a){var i=t[a],o=e[a],s=Math.min(i,o),l=Math.max(i,o),c=r[a],u=n[a],h=Math.min(c,u),f=Math.max(c,u);if(f<s||l<h)return!1}return!0}(t,e,r,a);return!0};var n=t("robust-orientation")[3]},{"robust-orientation":508}],512:[function(t,e,r){"use strict";e.exports=function(t,e){var r=0|t.length,n=0|e.length;if(1===r&&1===n)return function(t,e){var r=t+e,n=r-t,a=t-(r-n)+(e-n);if(a)return[a,r];return[r]}(t[0],-e[0]);var a,i,o=new Array(r+n),s=0,l=0,c=0,u=Math.abs,h=t[l],f=u(h),p=-e[c],d=u(p);f<d?(i=h,(l+=1)<r&&(h=t[l],f=u(h))):(i=p,(c+=1)<n&&(p=-e[c],d=u(p)));l<r&&f<d||c>=n?(a=h,(l+=1)<r&&(h=t[l],f=u(h))):(a=p,(c+=1)<n&&(p=-e[c],d=u(p)));var g,v,m=a+i,y=m-a,x=i-y,b=x,_=m;for(;l<r&&c<n;)f<d?(a=h,(l+=1)<r&&(h=t[l],f=u(h))):(a=p,(c+=1)<n&&(p=-e[c],d=u(p))),(x=(i=b)-(y=(m=a+i)-a))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g;for(;l<r;)(x=(i=b)-(y=(m=(a=h)+i)-a))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g,(l+=1)<r&&(h=t[l]);for(;c<n;)(x=(i=b)-(y=(m=(a=p)+i)-a))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g,(c+=1)<n&&(p=-e[c]);b&&(o[s++]=b);_&&(o[s++]=_);s||(o[s++]=0);return o.length=s,o}},{}],513:[function(t,e,r){"use strict";e.exports=function(t,e){var r=0|t.length,n=0|e.length;if(1===r&&1===n)return function(t,e){var r=t+e,n=r-t,a=t-(r-n)+(e-n);if(a)return[a,r];return[r]}(t[0],e[0]);var a,i,o=new Array(r+n),s=0,l=0,c=0,u=Math.abs,h=t[l],f=u(h),p=e[c],d=u(p);f<d?(i=h,(l+=1)<r&&(h=t[l],f=u(h))):(i=p,(c+=1)<n&&(p=e[c],d=u(p)));l<r&&f<d||c>=n?(a=h,(l+=1)<r&&(h=t[l],f=u(h))):(a=p,(c+=1)<n&&(p=e[c],d=u(p)));var g,v,m=a+i,y=m-a,x=i-y,b=x,_=m;for(;l<r&&c<n;)f<d?(a=h,(l+=1)<r&&(h=t[l],f=u(h))):(a=p,(c+=1)<n&&(p=e[c],d=u(p))),(x=(i=b)-(y=(m=a+i)-a))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g;for(;l<r;)(x=(i=b)-(y=(m=(a=h)+i)-a))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g,(l+=1)<r&&(h=t[l]);for(;c<n;)(x=(i=b)-(y=(m=(a=p)+i)-a))&&(o[s++]=x),b=_-((g=_+m)-(v=g-_))+(m-v),_=g,(c+=1)<n&&(p=e[c]);b&&(o[s++]=b);_&&(o[s++]=_);s||(o[s++]=0);return o.length=s,o}},{}],514:[function(t,e,r){"use strict";e.exports=function(t){return t<0?-1:t>0?1:0}},{}],515:[function(t,e,r){"use strict";e.exports=function(t){return a(n(t))};var n=t("boundary-cells"),a=t("reduce-simplicial-complex")},{"boundary-cells":97,"reduce-simplicial-complex":490}],516:[function(t,e,r){"use strict";e.exports=function(t,e,r,s){r=r||0,"undefined"==typeof s&&(s=function(t){for(var e=t.length,r=0,n=0;n<e;++n)r=0|Math.max(r,t[n].length);return r-1}(t));if(0===t.length||s<1)return{cells:[],vertexIds:[],vertexWeights:[]};var l=function(t,e){for(var r=t.length,n=a.mallocUint8(r),i=0;i<r;++i)n[i]=t[i]<e|0;return n}(e,+r),c=function(t,e){for(var r=t.length,o=e*(e+1)/2*r|0,s=a.mallocUint32(2*o),l=0,c=0;c<r;++c)for(var u=t[c],e=u.length,h=0;h<e;++h)for(var f=0;f<h;++f){var p=u[f],d=u[h];s[l++]=0|Math.min(p,d),s[l++]=0|Math.max(p,d)}i(n(s,[l/2|0,2]));for(var g=2,c=2;c<l;c+=2)s[c-2]===s[c]&&s[c-1]===s[c+1]||(s[g++]=s[c],s[g++]=s[c+1]);return n(s,[g/2|0,2])}(t,s),u=function(t,e,r,i){for(var o=t.data,s=t.shape[0],l=a.mallocDouble(s),c=0,u=0;u<s;++u){var h=o[2*u],f=o[2*u+1];if(r[h]!==r[f]){var p=e[h],d=e[f];o[2*c]=h,o[2*c+1]=f,l[c++]=(d-i)/(d-p)}}return t.shape[0]=c,n(l,[c])}(c,e,l,+r),h=function(t,e){var r=a.mallocInt32(2*e),n=t.shape[0],i=t.data;r[0]=0;for(var o=0,s=0;s<n;++s){var l=i[2*s];if(l!==o){for(r[2*o+1]=s;++o<l;)r[2*o]=s,r[2*o+1]=s;r[2*o]=s}}r[2*o+1]=n;for(;++o<e;)r[2*o]=r[2*o+1]=n;return r}(c,0|e.length),f=o(s)(t,c.data,h,l),p=function(t){for(var e=0|t.shape[0],r=t.data,n=new Array(e),a=0;a<e;++a)n[a]=[r[2*a],r[2*a+1]];return n}(c),d=[].slice.call(u.data,0,u.shape[0]);return a.free(l),a.free(c.data),a.free(u.data),a.free(h),{cells:f,vertexIds:p,vertexWeights:d}};var n=t("ndarray"),a=t("typedarray-pool"),i=t("ndarray-sort"),o=t("./lib/codegen")},{"./lib/codegen":517,ndarray:451,"ndarray-sort":449,"typedarray-pool":543}],517:[function(t,e,r){"use strict";e.exports=function(t){var e=i[t];e||(e=i[t]=function(t){var e=0,r=new Array(t+1);r[0]=[[]];for(var i=1;i<=t;++i)for(var o=r[i]=a(i),s=0;s<o.length;++s)e=Math.max(e,o[i].length);var l=["function B(C,E,i,j){","var a=Math.min(i,j)|0,b=Math.max(i,j)|0,l=C[2*a],h=C[2*a+1];","while(l<h){","var m=(l+h)>>1,v=E[2*m+1];","if(v===b){return m}","if(b<v){h=m}else{l=m+1}","}","return l;","};","function getContour",t,"d(F,E,C,S){","var n=F.length,R=[];","for(var i=0;i<n;++i){var c=F[i],l=c.length;"];function c(t){if(!(t.length<=0)){l.push("R.push(");for(var e=0;e<t.length;++e){var r=t[e];e>0&&l.push(","),l.push("[");for(var n=0;n<r.length;++n){var a=r[n];n>0&&l.push(","),l.push("B(C,E,c[",a[0],"],c[",a[1],"])")}l.push("]")}l.push(");")}}for(var i=t+1;i>1;--i){i<t+1&&l.push("else "),l.push("if(l===",i,"){");for(var u=[],s=0;s<i;++s)u.push("(S[c["+s+"]]<<"+s+")");l.push("var M=",u.join("+"),";if(M===0||M===",(1<<i)-1,"){continue}switch(M){");for(var o=r[i-1],s=0;s<o.length;++s)l.push("case ",s,":"),c(o[s]),l.push("break;");l.push("}}")}return l.push("}return R;};return getContour",t,"d"),new Function("pool",l.join(""))(n)}(t));return e};var n=t("typedarray-pool"),a=t("marching-simplex-table"),i={}},{"marching-simplex-table":428,"typedarray-pool":543}],518:[function(t,e,r){"use strict";var n=t("bit-twiddle"),a=t("union-find");function i(t,e){var r=t.length,n=t.length-e.length,a=Math.min;if(n)return n;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:return(s=t[0]+t[1]-e[0]-e[1])||a(t[0],t[1])-a(e[0],e[1]);case 3:var i=t[0]+t[1],o=e[0]+e[1];if(s=i+t[2]-(o+e[2]))return s;var s,l=a(t[0],t[1]),c=a(e[0],e[1]);return(s=a(l,t[2])-a(c,e[2]))||a(l+t[2],i)-a(c+e[2],o);default:var u=t.slice(0);u.sort();var h=e.slice(0);h.sort();for(var f=0;f<r;++f)if(n=u[f]-h[f])return n;return 0}}function o(t,e){return i(t[0],e[0])}function s(t,e){if(e){for(var r=t.length,n=new Array(r),a=0;a<r;++a)n[a]=[t[a],e[a]];n.sort(o);for(a=0;a<r;++a)t[a]=n[a][0],e[a]=n[a][1];return t}return t.sort(i),t}function l(t){if(0===t.length)return[];for(var e=1,r=t.length,n=1;n<r;++n){var a=t[n];if(i(a,t[n-1])){if(n===e){e++;continue}t[e++]=a}}return t.length=e,t}function c(t,e){for(var r=0,n=t.length-1,a=-1;r<=n;){var o=r+n>>1,s=i(t[o],e);s<=0?(0===s&&(a=o),r=o+1):s>0&&(n=o-1)}return a}function u(t,e){for(var r=new Array(t.length),a=0,o=r.length;a<o;++a)r[a]=[];for(var s=[],l=(a=0,e.length);a<l;++a)for(var u=e[a],h=u.length,f=1,p=1<<h;f<p;++f){s.length=n.popCount(f);for(var d=0,g=0;g<h;++g)f&1<<g&&(s[d++]=u[g]);var v=c(t,s);if(!(v<0))for(;r[v++].push(a),!(v>=t.length||0!==i(t[v],s)););}return r}function h(t,e){if(e<0)return[];for(var r=[],a=(1<<e+1)-1,i=0;i<t.length;++i)for(var o=t[i],l=a;l<1<<o.length;l=n.nextCombination(l)){for(var c=new Array(e+1),u=0,h=0;h<o.length;++h)l&1<<h&&(c[u++]=o[h]);r.push(c)}return s(r)}r.dimension=function(t){for(var e=0,r=Math.max,n=0,a=t.length;n<a;++n)e=r(e,t[n].length);return e-1},r.countVertices=function(t){for(var e=-1,r=Math.max,n=0,a=t.length;n<a;++n)for(var i=t[n],o=0,s=i.length;o<s;++o)e=r(e,i[o]);return e+1},r.cloneCells=function(t){for(var e=new Array(t.length),r=0,n=t.length;r<n;++r)e[r]=t[r].slice(0);return e},r.compareCells=i,r.normalize=s,r.unique=l,r.findCell=c,r.incidence=u,r.dual=function(t,e){if(!e)return u(l(h(t,0)),t);for(var r=new Array(e),n=0;n<e;++n)r[n]=[];n=0;for(var a=t.length;n<a;++n)for(var i=t[n],o=0,s=i.length;o<s;++o)r[i[o]].push(n);return r},r.explode=function(t){for(var e=[],r=0,n=t.length;r<n;++r)for(var a=t[r],i=0|a.length,o=1,l=1<<i;o<l;++o){for(var c=[],u=0;u<i;++u)o>>>u&1&&c.push(a[u]);e.push(c)}return s(e)},r.skeleton=h,r.boundary=function(t){for(var e=[],r=0,n=t.length;r<n;++r)for(var a=t[r],i=0,o=a.length;i<o;++i){for(var l=new Array(a.length-1),c=0,u=0;c<o;++c)c!==i&&(l[u++]=a[c]);e.push(l)}return s(e)},r.connectedComponents=function(t,e){return e?function(t,e){for(var r=new a(e),n=0;n<t.length;++n)for(var i=t[n],o=0;o<i.length;++o)for(var s=o+1;s<i.length;++s)r.link(i[o],i[s]);var l=[],c=r.ranks;for(n=0;n<c.length;++n)c[n]=-1;for(n=0;n<t.length;++n){var u=r.find(t[n][0]);c[u]<0?(c[u]=l.length,l.push([t[n].slice(0)])):l[c[u]].push(t[n].slice(0))}return l}(t,e):function(t){for(var e=l(s(h(t,0))),r=new a(e.length),n=0;n<t.length;++n)for(var i=t[n],o=0;o<i.length;++o)for(var u=c(e,[i[o]]),f=o+1;f<i.length;++f)r.link(u,c(e,[i[f]]));var p=[],d=r.ranks;for(n=0;n<d.length;++n)d[n]=-1;for(n=0;n<t.length;++n){var g=r.find(c(e,[t[n][0]]));d[g]<0?(d[g]=p.length,p.push([t[n].slice(0)])):p[d[g]].push(t[n].slice(0))}return p}(t)}},{"bit-twiddle":94,"union-find":544}],519:[function(t,e,r){arguments[4][94][0].apply(r,arguments)},{dup:94}],520:[function(t,e,r){arguments[4][518][0].apply(r,arguments)},{"bit-twiddle":519,dup:518,"union-find":521}],521:[function(t,e,r){"use strict";function n(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}e.exports=n,n.prototype.length=function(){return this.roots.length},n.prototype.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t},n.prototype.find=function(t){for(var e=this.roots;e[t]!==t;){var r=e[t];e[t]=e[r],t=r}return t},n.prototype.link=function(t,e){var r=this.find(t),n=this.find(e);if(r!==n){var a=this.ranks,i=this.roots,o=a[r],s=a[n];o<s?i[r]=n:s<o?i[n]=r:(i[n]=r,++a[r])}}},{}],522:[function(t,e,r){"use strict";e.exports=function(t,e,r){for(var i=e.length,o=t.length,s=new Array(i),l=new Array(i),c=new Array(i),u=new Array(i),h=0;h<i;++h)s[h]=l[h]=-1,c[h]=1/0,u[h]=!1;for(var h=0;h<o;++h){var f=t[h];if(2!==f.length)throw new Error("Input must be a graph");var p=f[1],d=f[0];-1!==l[d]?l[d]=-2:l[d]=p,-1!==s[p]?s[p]=-2:s[p]=d}function g(t){if(u[t])return 1/0;var r,a,i,o,c,h=s[t],f=l[t];return h<0||f<0?1/0:(r=e[t],a=e[h],i=e[f],o=Math.abs(n(r,a,i)),c=Math.sqrt(Math.pow(a[0]-i[0],2)+Math.pow(a[1]-i[1],2)),o/c)}function v(t,e){var r=T[t],n=T[e];T[t]=n,T[e]=r,M[r]=e,M[n]=t}function m(t){return c[T[t]]}function y(t){return 1&t?t-1>>1:(t>>1)-1}function x(t){for(var e=m(t);;){var r=e,n=2*t+1,a=2*(t+1),i=t;if(n<S){var o=m(n);o<r&&(i=n,r=o)}if(a<S){var s=m(a);s<r&&(i=a)}if(i===t)return t;v(t,i),t=i}}function b(t){for(var e=m(t);t>0;){var r=y(t);if(r>=0){var n=m(r);if(e<n){v(t,r),t=r;continue}}return t}}function _(){if(S>0){var t=T[0];return v(0,S-1),S-=1,x(0),t}return-1}function w(t,e){var r=T[t];return c[r]===e?t:(c[r]=-1/0,b(t),_(),c[r]=e,b((S+=1)-1))}function k(t){if(!u[t]){u[t]=!0;var e=s[t],r=l[t];s[r]>=0&&(s[r]=e),l[e]>=0&&(l[e]=r),M[e]>=0&&w(M[e],g(e)),M[r]>=0&&w(M[r],g(r))}}for(var T=[],M=new Array(i),h=0;h<i;++h){var A=c[h]=g(h);A<1/0?(M[h]=T.length,T.push(h)):M[h]=-1}for(var S=T.length,h=S>>1;h>=0;--h)x(h);for(;;){var E=_();if(E<0||c[E]>r)break;k(E)}for(var L=[],h=0;h<i;++h)u[h]||(M[h]=L.length,L.push(e[h].slice()));L.length;function C(t,e){if(t[e]<0)return e;var r=e,n=e;do{var a=t[n];if(!u[n]||a<0||a===n)break;if(a=t[n=a],!u[n]||a<0||a===n)break;n=a,r=t[r]}while(r!==n);for(var i=e;i!==n;i=t[i])t[i]=n;return n}var P=[];return t.forEach(function(t){var e=C(s,t[0]),r=C(l,t[1]);if(e>=0&&r>=0&&e!==r){var n=M[e],a=M[r];n!==a&&P.push([n,a])}}),a.unique(a.normalize(P)),{positions:L,edges:P}};var n=t("robust-orientation"),a=t("simplicial-complex")},{"robust-orientation":508,"simplicial-complex":520}],523:[function(t,e,r){"use strict";e.exports=function(t,e){var r,i,o,s;if(e[0][0]<e[1][0])r=e[0],i=e[1];else{if(!(e[0][0]>e[1][0]))return a(e,t);r=e[1],i=e[0]}if(t[0][0]<t[1][0])o=t[0],s=t[1];else{if(!(t[0][0]>t[1][0]))return-a(t,e);o=t[1],s=t[0]}var l=n(r,i,s),c=n(r,i,o);if(l<0){if(c<=0)return l}else if(l>0){if(c>=0)return l}else if(c)return c;if(l=n(s,o,i),c=n(s,o,r),l<0){if(c<=0)return l}else if(l>0){if(c>=0)return l}else if(c)return c;return i[0]-s[0]};var n=t("robust-orientation");function a(t,e){var r,a,i,o;if(e[0][0]<e[1][0])r=e[0],a=e[1];else{if(!(e[0][0]>e[1][0])){var s=Math.min(t[0][1],t[1][1]),l=Math.max(t[0][1],t[1][1]),c=Math.min(e[0][1],e[1][1]),u=Math.max(e[0][1],e[1][1]);return l<c?l-c:s>u?s-u:l-u}r=e[1],a=e[0]}t[0][1]<t[1][1]?(i=t[0],o=t[1]):(i=t[1],o=t[0]);var h=n(a,r,i);return h||((h=n(a,r,o))||o-a)}},{"robust-orientation":508}],524:[function(t,e,r){"use strict";e.exports=function(t){for(var e=t.length,r=2*e,n=new Array(r),i=0;i<e;++i){var l=t[i],c=l[0][0]<l[1][0];n[2*i]=new h(l[0][0],l,c,i),n[2*i+1]=new h(l[1][0],l,!c,i)}n.sort(function(t,e){var r=t.x-e.x;return r||((r=t.create-e.create)||Math.min(t.segment[0][1],t.segment[1][1])-Math.min(e.segment[0][1],e.segment[1][1]))});for(var f=a(o),p=[],d=[],g=[],i=0;i<r;){for(var v=n[i].x,m=[];i<r;){var y=n[i];if(y.x!==v)break;i+=1,y.segment[0][0]===y.x&&y.segment[1][0]===y.x?y.create&&(y.segment[0][1]<y.segment[1][1]?(m.push(new u(y.segment[0][1],y.index,!0,!0)),m.push(new u(y.segment[1][1],y.index,!1,!1))):(m.push(new u(y.segment[1][1],y.index,!0,!1)),m.push(new u(y.segment[0][1],y.index,!1,!0)))):f=y.create?f.insert(y.segment,y.index):f.remove(y.segment)}p.push(f.root),d.push(v),g.push(m)}return new s(p,d,g)};var n=t("binary-search-bounds"),a=t("functional-red-black-tree"),i=t("robust-orientation"),o=t("./lib/order-segments");function s(t,e,r){this.slabs=t,this.coordinates=e,this.horizontal=r}function l(t,e){return t.y-e}function c(t,e){for(var r=null;t;){var n,a,o=t.key;o[0][0]<o[1][0]?(n=o[0],a=o[1]):(n=o[1],a=o[0]);var s=i(n,a,e);if(s<0)t=t.left;else if(s>0)if(e[0]!==o[1][0])r=t,t=t.right;else{if(l=c(t.right,e))return l;t=t.left}else{if(e[0]!==o[1][0])return t;var l;if(l=c(t.right,e))return l;t=t.left}}return r}function u(t,e,r,n){this.y=t,this.index=e,this.start=r,this.closed=n}function h(t,e,r,n){this.x=t,this.segment=e,this.create=r,this.index=n}s.prototype.castUp=function(t){var e=n.le(this.coordinates,t[0]);if(e<0)return-1;this.slabs[e];var r=c(this.slabs[e],t),a=-1;if(r&&(a=r.value),this.coordinates[e]===t[0]){var s=null;if(r&&(s=r.key),e>0){var u=c(this.slabs[e-1],t);u&&(s?o(u.key,s)>0&&(s=u.key,a=u.value):(a=u.value,s=u.key))}var h=this.horizontal[e];if(h.length>0){var f=n.ge(h,t[1],l);if(f<h.length){var p=h[f];if(t[1]===p.y){if(p.closed)return p.index;for(;f<h.length-1&&h[f+1].y===t[1];)if((p=h[f+=1]).closed)return p.index;if(p.y===t[1]&&!p.start){if((f+=1)>=h.length)return a;p=h[f]}}if(p.start)if(s){var d=i(s[0],s[1],[t[0],p.y]);s[0][0]>s[1][0]&&(d=-d),d>0&&(a=p.index)}else a=p.index;else p.y!==t[1]&&(a=p.index)}}}return a}},{"./lib/order-segments":523,"binary-search-bounds":93,"functional-red-black-tree":233,"robust-orientation":508}],525:[function(t,e,r){"use strict";var n=t("robust-dot-product"),a=t("robust-sum");function i(t,e){var r=a(n(t,e),[e[e.length-1]]);return r[r.length-1]}function o(t,e,r,n){var a=-e/(n-e);a<0?a=0:a>1&&(a=1);for(var i=1-a,o=t.length,s=new Array(o),l=0;l<o;++l)s[l]=a*t[l]+i*r[l];return s}e.exports=function(t,e){for(var r=[],n=[],a=i(t[t.length-1],e),s=t[t.length-1],l=t[0],c=0;c<t.length;++c,s=l){var u=i(l=t[c],e);if(a<0&&u>0||a>0&&u<0){var h=o(s,u,l,a);r.push(h),n.push(h.slice())}u<0?n.push(l.slice()):u>0?r.push(l.slice()):(r.push(l.slice()),n.push(l.slice())),a=u}return{positive:r,negative:n}},e.exports.positive=function(t,e){for(var r=[],n=i(t[t.length-1],e),a=t[t.length-1],s=t[0],l=0;l<t.length;++l,a=s){var c=i(s=t[l],e);(n<0&&c>0||n>0&&c<0)&&r.push(o(a,c,s,n)),c>=0&&r.push(s.slice()),n=c}return r},e.exports.negative=function(t,e){for(var r=[],n=i(t[t.length-1],e),a=t[t.length-1],s=t[0],l=0;l<t.length;++l,a=s){var c=i(s=t[l],e);(n<0&&c>0||n>0&&c<0)&&r.push(o(a,c,s,n)),c<=0&&r.push(s.slice()),n=c}return r}},{"robust-dot-product":505,"robust-sum":513}],526:[function(t,e,r){!function(){"use strict";var t={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function e(r){return function(r,n){var a,i,o,s,l,c,u,h,f,p=1,d=r.length,g="";for(i=0;i<d;i++)if("string"==typeof r[i])g+=r[i];else if("object"==typeof r[i]){if((s=r[i]).keys)for(a=n[p],o=0;o<s.keys.length;o++){if(null==a)throw new Error(e('[sprintf] Cannot access property "%s" of undefined value "%s"',s.keys[o],s.keys[o-1]));a=a[s.keys[o]]}else a=s.param_no?n[s.param_no]:n[p++];if(t.not_type.test(s.type)&&t.not_primitive.test(s.type)&&a instanceof Function&&(a=a()),t.numeric_arg.test(s.type)&&"number"!=typeof a&&isNaN(a))throw new TypeError(e("[sprintf] expecting number but found %T",a));switch(t.number.test(s.type)&&(h=a>=0),s.type){case"b":a=parseInt(a,10).toString(2);break;case"c":a=String.fromCharCode(parseInt(a,10));break;case"d":case"i":a=parseInt(a,10);break;case"j":a=JSON.stringify(a,null,s.width?parseInt(s.width):0);break;case"e":a=s.precision?parseFloat(a).toExponential(s.precision):parseFloat(a).toExponential();break;case"f":a=s.precision?parseFloat(a).toFixed(s.precision):parseFloat(a);break;case"g":a=s.precision?String(Number(a.toPrecision(s.precision))):parseFloat(a);break;case"o":a=(parseInt(a,10)>>>0).toString(8);break;case"s":a=String(a),a=s.precision?a.substring(0,s.precision):a;break;case"t":a=String(!!a),a=s.precision?a.substring(0,s.precision):a;break;case"T":a=Object.prototype.toString.call(a).slice(8,-1).toLowerCase(),a=s.precision?a.substring(0,s.precision):a;break;case"u":a=parseInt(a,10)>>>0;break;case"v":a=a.valueOf(),a=s.precision?a.substring(0,s.precision):a;break;case"x":a=(parseInt(a,10)>>>0).toString(16);break;case"X":a=(parseInt(a,10)>>>0).toString(16).toUpperCase()}t.json.test(s.type)?g+=a:(!t.number.test(s.type)||h&&!s.sign?f="":(f=h?"+":"-",a=a.toString().replace(t.sign,"")),c=s.pad_char?"0"===s.pad_char?"0":s.pad_char.charAt(1):" ",u=s.width-(f+a).length,l=s.width&&u>0?c.repeat(u):"",g+=s.align?f+a+l:"0"===c?f+l+a:l+f+a)}return g}(function(e){if(a[e])return a[e];var r,n=e,i=[],o=0;for(;n;){if(null!==(r=t.text.exec(n)))i.push(r[0]);else if(null!==(r=t.modulo.exec(n)))i.push("%");else{if(null===(r=t.placeholder.exec(n)))throw new SyntaxError("[sprintf] unexpected placeholder");if(r[2]){o|=1;var s=[],l=r[2],c=[];if(null===(c=t.key.exec(l)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(s.push(c[1]);""!==(l=l.substring(c[0].length));)if(null!==(c=t.key_access.exec(l)))s.push(c[1]);else{if(null===(c=t.index_access.exec(l)))throw new SyntaxError("[sprintf] failed to parse named argument key");s.push(c[1])}r[2]=s}else o|=2;if(3===o)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");i.push({placeholder:r[0],param_no:r[1],keys:r[2],sign:r[3],pad_char:r[4],align:r[5],width:r[6],precision:r[7],type:r[8]})}n=n.substring(r[0].length)}return a[e]=i}(r),arguments)}function n(t,r){return e.apply(null,[t].concat(r||[]))}var a=Object.create(null);"undefined"!=typeof r&&(r.sprintf=e,r.vsprintf=n),"undefined"!=typeof window&&(window.sprintf=e,window.vsprintf=n)}()},{}],527:[function(t,e,r){"use strict";var n=t("parenthesis");e.exports=function(t,e,r){if(null==t)throw Error("First argument should be a string");if(null==e)throw Error("Separator should be a string or a RegExp");r?("string"==typeof r||Array.isArray(r))&&(r={ignore:r}):r={},null==r.escape&&(r.escape=!0),null==r.ignore?r.ignore=["[]","()","{}","<>",'""',"''","``","\u201c\u201d","\xab\xbb"]:("string"==typeof r.ignore&&(r.ignore=[r.ignore]),r.ignore=r.ignore.map(function(t){return 1===t.length&&(t+=t),t}));var a=n.parse(t,{flat:!0,brackets:r.ignore}),i=a[0].split(e);if(r.escape){for(var o=[],s=0;s<i.length;s++){var l=i[s],c=i[s+1];"\\"===l[l.length-1]&&"\\"!==l[l.length-2]?(o.push(l+e+c),s++):o.push(l)}i=o}for(s=0;s<i.length;s++)a[0]=i[s],i[s]=n.stringify(a,{flat:!0});return i}},{parenthesis:459}],528:[function(t,e,r){"use strict";e.exports=function(t){for(var e=t.length,r=new Array(e),n=new Array(e),a=new Array(e),i=new Array(e),o=new Array(e),s=new Array(e),l=0;l<e;++l)r[l]=-1,n[l]=0,a[l]=!1,i[l]=0,o[l]=-1,s[l]=[];var c,u=0,h=[],f=[];function p(e){var l=[e],c=[e];for(r[e]=n[e]=u,a[e]=!0,u+=1;c.length>0;){e=c[c.length-1];var p=t[e];if(i[e]<p.length){for(var d=i[e];d<p.length;++d){var g=p[d];if(r[g]<0){r[g]=n[g]=u,a[g]=!0,u+=1,l.push(g),c.push(g);break}a[g]&&(n[e]=0|Math.min(n[e],n[g])),o[g]>=0&&s[e].push(o[g])}i[e]=d}else{if(n[e]===r[e]){for(var v=[],m=[],y=0,d=l.length-1;d>=0;--d){var x=l[d];if(a[x]=!1,v.push(x),m.push(s[x]),y+=s[x].length,o[x]=h.length,x===e){l.length=d;break}}h.push(v);for(var b=new Array(y),d=0;d<m.length;d++)for(var _=0;_<m[d].length;_++)b[--y]=m[d][_];f.push(b)}c.pop()}}}for(var l=0;l<e;++l)r[l]<0&&p(l);for(var l=0;l<f.length;l++){var d=f[l];if(0!==d.length){d.sort(function(t,e){return t-e}),c=[d[0]];for(var g=1;g<d.length;g++)d[g]!==d[g-1]&&c.push(d[g]);f[l]=c}}return{components:h,adjacencyList:f}}},{}],529:[function(t,e,r){"use strict";e.exports=function(t,e){if(t.dimension<=0)return{positions:[],cells:[]};if(1===t.dimension)return function(t,e){for(var r=i(t,e),n=r.length,a=new Array(n),o=new Array(n),s=0;s<n;++s)a[s]=[r[s]],o[s]=[s];return{positions:a,cells:o}}(t,e);var r=t.order.join()+"-"+t.dtype,s=o[r],e=+e||0;s||(s=o[r]=function(t,e){var r=t.length,i=["'use strict';"],o="surfaceNets"+t.join("_")+"d"+e;i.push("var contour=genContour({","order:[",t.join(),"],","scalarArguments: 3,","phase:function phaseFunc(p,a,b,c) { return (p > c)|0 },"),"generic"===e&&i.push("getters:[0],");for(var s=[],l=[],c=0;c<r;++c)s.push("d"+c),l.push("d"+c);for(var c=0;c<1<<r;++c)s.push("v"+c),l.push("v"+c);for(var c=0;c<1<<r;++c)s.push("p"+c),l.push("p"+c);s.push("a","b","c"),l.push("a","c"),i.push("vertex:function vertexFunc(",s.join(),"){");for(var u=[],c=0;c<1<<r;++c)u.push("(p"+c+"<<"+c+")");i.push("var m=(",u.join("+"),")|0;if(m===0||m===",(1<<(1<<r))-1,"){return}");var h=[],f=[];1<<(1<<r)<=128?(i.push("switch(m){"),f=i):i.push("switch(m>>>7){");for(var c=0;c<1<<(1<<r);++c){if(1<<(1<<r)>128&&c%128==0){h.length>0&&f.push("}}");var p="vExtra"+h.length;i.push("case ",c>>>7,":",p,"(m&0x7f,",l.join(),");break;"),f=["function ",p,"(m,",l.join(),"){switch(m){"],h.push(f)}f.push("case ",127&c,":");for(var d=new Array(r),g=new Array(r),v=new Array(r),m=new Array(r),y=0,x=0;x<r;++x)d[x]=[],g[x]=[],v[x]=0,m[x]=0;for(var x=0;x<1<<r;++x)for(var b=0;b<r;++b){var _=x^1<<b;if(!(_>x)&&!(c&1<<_)!=!(c&1<<x)){var w=1;c&1<<_?g[b].push("v"+_+"-v"+x):(g[b].push("v"+x+"-v"+_),w=-w),w<0?(d[b].push("-v"+x+"-v"+_),v[b]+=2):(d[b].push("v"+x+"+v"+_),v[b]-=2),y+=1;for(var k=0;k<r;++k)k!==b&&(_&1<<k?m[k]+=1:m[k]-=1)}}for(var T=[],b=0;b<r;++b)if(0===d[b].length)T.push("d"+b+"-0.5");else{var M="";v[b]<0?M=v[b]+"*c":v[b]>0&&(M="+"+v[b]+"*c");var A=d[b].length/y*.5,S=.5+m[b]/y*.5;T.push("d"+b+"-"+S+"-"+A+"*("+d[b].join("+")+M+")/("+g[b].join("+")+")")}f.push("a.push([",T.join(),"]);","break;")}i.push("}},"),h.length>0&&f.push("}}");for(var E=[],c=0;c<1<<r-1;++c)E.push("v"+c);E.push("c0","c1","p0","p1","a","b","c"),i.push("cell:function cellFunc(",E.join(),"){");var L=a(r-1);i.push("if(p0){b.push(",L.map(function(t){return"["+t.map(function(t){return"v"+t})+"]"}).join(),")}else{b.push(",L.map(function(t){var e=t.slice();return e.reverse(),"["+e.map(function(t){return"v"+t})+"]"}).join(),")}}});function ",o,"(array,level){var verts=[],cells=[];contour(array,verts,cells,level);return {positions:verts,cells:cells};} return ",o,";");for(var c=0;c<h.length;++c)i.push(h[c].join(""));return new Function("genContour",i.join(""))(n)}(t.order,t.dtype));return s(t,e)};var n=t("ndarray-extract-contour"),a=t("triangulate-hypercube"),i=t("zero-crossings");var o={}},{"ndarray-extract-contour":440,"triangulate-hypercube":539,"zero-crossings":572}],530:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var n=function(){return function(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var r=[],n=!0,a=!1,i=void 0;try{for(var o,s=t[Symbol.iterator]();!(n=(o=s.next()).done)&&(r.push(o.value),!e||r.length!==e);n=!0);}catch(t){a=!0,i=t}finally{try{!n&&s.return&&s.return()}finally{if(a)throw i}}return r}(t,e);throw new TypeError("Invalid attempt to destructure non-iterable instance")}}(),a=2*Math.PI,i=function(t,e,r,n,a,i,o){var s=t.x,l=t.y;return{x:n*(s*=e)-a*(l*=r)+i,y:a*s+n*l+o}},o=function(t,e){var r=.551915024494*(e<0?-1:1),n=Math.cos(t),a=Math.sin(t),i=Math.cos(t+e),o=Math.sin(t+e);return[{x:n-a*r,y:a+n*r},{x:i+o*r,y:o-i*r},{x:i,y:o}]},s=function(t,e,r,n){var a=t*n-e*r<0?-1:1,i=(t*r+e*n)/(Math.sqrt(t*t+e*e)*Math.sqrt(t*t+e*e));return i>1&&(i=1),i<-1&&(i=-1),a*Math.acos(i)};r.default=function(t){var e=t.px,r=t.py,l=t.cx,c=t.cy,u=t.rx,h=t.ry,f=t.xAxisRotation,p=void 0===f?0:f,d=t.largeArcFlag,g=void 0===d?0:d,v=t.sweepFlag,m=void 0===v?0:v,y=[];if(0===u||0===h)return[];var x=Math.sin(p*a/360),b=Math.cos(p*a/360),_=b*(e-l)/2+x*(r-c)/2,w=-x*(e-l)/2+b*(r-c)/2;if(0===_&&0===w)return[];u=Math.abs(u),h=Math.abs(h);var k=Math.pow(_,2)/Math.pow(u,2)+Math.pow(w,2)/Math.pow(h,2);k>1&&(u*=Math.sqrt(k),h*=Math.sqrt(k));var T=function(t,e,r,n,i,o,l,c,u,h,f,p){var d=Math.pow(i,2),g=Math.pow(o,2),v=Math.pow(f,2),m=Math.pow(p,2),y=d*g-d*m-g*v;y<0&&(y=0),y/=d*m+g*v;var x=(y=Math.sqrt(y)*(l===c?-1:1))*i/o*p,b=y*-o/i*f,_=h*x-u*b+(t+r)/2,w=u*x+h*b+(e+n)/2,k=(f-x)/i,T=(p-b)/o,M=(-f-x)/i,A=(-p-b)/o,S=s(1,0,k,T),E=s(k,T,M,A);return 0===c&&E>0&&(E-=a),1===c&&E<0&&(E+=a),[_,w,S,E]}(e,r,l,c,u,h,g,m,x,b,_,w),M=n(T,4),A=M[0],S=M[1],E=M[2],L=M[3],C=Math.abs(L)/(a/4);Math.abs(1-C)<1e-7&&(C=1);var P=Math.max(Math.ceil(C),1);L/=P;for(var O=0;O<P;O++)y.push(o(E,L)),E+=L;return y.map(function(t){var e=i(t[0],u,h,b,x,A,S),r=e.x,n=e.y,a=i(t[1],u,h,b,x,A,S),o=a.x,s=a.y,l=i(t[2],u,h,b,x,A,S);return{x1:r,y1:n,x2:o,y2:s,x:l.x,y:l.y}})},e.exports=r.default},{}],531:[function(t,e,r){"use strict";var n=t("parse-svg-path"),a=t("abs-svg-path"),i=t("normalize-svg-path"),o=t("is-svg-path"),s=t("assert");e.exports=function(t){Array.isArray(t)&&1===t.length&&"string"==typeof t[0]&&(t=t[0]);"string"==typeof t&&(s(o(t),"String is not an SVG path."),t=n(t));if(s(Array.isArray(t),"Argument should be a string or an array of path segments."),t=a(t),!(t=i(t)).length)return[0,0,0,0];for(var e=[1/0,1/0,-1/0,-1/0],r=0,l=t.length;r<l;r++)for(var c=t[r].slice(1),u=0;u<c.length;u+=2)c[u+0]<e[0]&&(e[0]=c[u+0]),c[u+1]<e[1]&&(e[1]=c[u+1]),c[u+0]>e[2]&&(e[2]=c[u+0]),c[u+1]>e[3]&&(e[3]=c[u+1]);return e}},{"abs-svg-path":63,assert:70,"is-svg-path":425,"normalize-svg-path":532,"parse-svg-path":461}],532:[function(t,e,r){"use strict";e.exports=function(t){for(var e,r=[],o=0,s=0,l=0,c=0,u=null,h=null,f=0,p=0,d=0,g=t.length;d<g;d++){var v=t[d],m=v[0];switch(m){case"M":l=v[1],c=v[2];break;case"A":var y=n({px:f,py:p,cx:v[6],cy:v[7],rx:v[1],ry:v[2],xAxisRotation:v[3],largeArcFlag:v[4],sweepFlag:v[5]});if(!y.length)continue;for(var x,b=0;b<y.length;b++)x=y[b],v=["C",x.x1,x.y1,x.x2,x.y2,x.x,x.y],b<y.length-1&&r.push(v);break;case"S":var _=f,w=p;"C"!=e&&"S"!=e||(_+=_-o,w+=w-s),v=["C",_,w,v[1],v[2],v[3],v[4]];break;case"T":"Q"==e||"T"==e?(u=2*f-u,h=2*p-h):(u=f,h=p),v=i(f,p,u,h,v[1],v[2]);break;case"Q":u=v[1],h=v[2],v=i(f,p,v[1],v[2],v[3],v[4]);break;case"L":v=a(f,p,v[1],v[2]);break;case"H":v=a(f,p,v[1],p);break;case"V":v=a(f,p,f,v[1]);break;case"Z":v=a(f,p,l,c)}e=m,f=v[v.length-2],p=v[v.length-1],v.length>4?(o=v[v.length-4],s=v[v.length-3]):(o=f,s=p),r.push(v)}return r};var n=t("svg-arc-to-cubic-bezier");function a(t,e,r,n){return["C",t,e,r,n,r,n]}function i(t,e,r,n,a,i){return["C",t/3+2/3*r,e/3+2/3*n,a/3+2/3*r,i/3+2/3*n,a,i]}},{"svg-arc-to-cubic-bezier":530}],533:[function(t,e,r){"use strict";var n,a=t("svg-path-bounds"),i=t("parse-svg-path"),o=t("draw-svg-path"),s=t("is-svg-path"),l=t("bitmap-sdf"),c=document.createElement("canvas"),u=c.getContext("2d");e.exports=function(t,e){if(!s(t))throw Error("Argument should be valid svg path string");e||(e={});var r,h;e.shape?(r=e.shape[0],h=e.shape[1]):(r=c.width=e.w||e.width||200,h=c.height=e.h||e.height||200);var f=Math.min(r,h),p=e.stroke||0,d=e.viewbox||e.viewBox||a(t),g=[r/(d[2]-d[0]),h/(d[3]-d[1])],v=Math.min(g[0]||0,g[1]||0)/2;u.fillStyle="black",u.fillRect(0,0,r,h),u.fillStyle="white",p&&("number"!=typeof p&&(p=1),u.strokeStyle=p>0?"white":"black",u.lineWidth=Math.abs(p));if(u.translate(.5*r,.5*h),u.scale(v,v),function(){if(null!=n)return n;var t=document.createElement("canvas").getContext("2d");if(t.canvas.width=t.canvas.height=1,!window.Path2D)return n=!1;var e=new Path2D("M0,0h1v1h-1v-1Z");t.fillStyle="black",t.fill(e);var r=t.getImageData(0,0,1,1);return n=r&&r.data&&255===r.data[3]}()){var m=new Path2D(t);u.fill(m),p&&u.stroke(m)}else{var y=i(t);o(u,y),u.fill(),p&&u.stroke()}return u.setTransform(1,0,0,1,0,0),l(u,{cutoff:null!=e.cutoff?e.cutoff:.5,radius:null!=e.radius?e.radius:.5*f})}},{"bitmap-sdf":95,"draw-svg-path":170,"is-svg-path":425,"parse-svg-path":461,"svg-path-bounds":531}],534:[function(t,e,r){(function(r){"use strict";e.exports=function t(e,r,a){var a=a||{};var o=i[e];o||(o=i[e]={" ":{data:new Float32Array(0),shape:.2}});var s=o[r];if(!s)if(r.length<=1||!/\d/.test(r))s=o[r]=function(t){for(var e=t.cells,r=t.positions,n=new Float32Array(6*e.length),a=0,i=0,o=0;o<e.length;++o)for(var s=e[o],l=0;l<3;++l){var c=r[s[l]];n[a++]=c[0],n[a++]=c[1]+1.4,i=Math.max(c[0],i)}return{data:n,shape:i}}(n(r,{triangles:!0,font:e,textAlign:a.textAlign||"left",textBaseline:"alphabetic",styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0}}));else{for(var l=r.split(/(\d|\s)/),c=new Array(l.length),u=0,h=0,f=0;f<l.length;++f)c[f]=t(e,l[f]),u+=c[f].data.length,h+=c[f].shape,f>0&&(h+=.02);for(var p=new Float32Array(u),d=0,g=-.5*h,f=0;f<c.length;++f){for(var v=c[f].data,m=0;m<v.length;m+=2)p[d++]=v[m]+g,p[d++]=v[m+1];g+=c[f].shape+.02}s=o[r]={data:p,shape:h}}return s};var n=t("vectorize-text"),a=window||r.global||{},i=a.__TEXT_CACHE||{};a.__TEXT_CACHE={}}).call(this,t("_process"))},{_process:483,"vectorize-text":548}],535:[function(t,e,r){!function(t){var r=/^\s+/,n=/\s+$/,a=0,i=t.round,o=t.min,s=t.max,l=t.random;function c(e,l){if(l=l||{},(e=e||"")instanceof c)return e;if(!(this instanceof c))return new c(e,l);var u=function(e){var a={r:0,g:0,b:0},i=1,l=null,c=null,u=null,h=!1,f=!1;"string"==typeof e&&(e=function(t){t=t.replace(r,"").replace(n,"").toLowerCase();var e,a=!1;if(S[t])t=S[t],a=!0;else if("transparent"==t)return{r:0,g:0,b:0,a:0,format:"name"};if(e=j.rgb.exec(t))return{r:e[1],g:e[2],b:e[3]};if(e=j.rgba.exec(t))return{r:e[1],g:e[2],b:e[3],a:e[4]};if(e=j.hsl.exec(t))return{h:e[1],s:e[2],l:e[3]};if(e=j.hsla.exec(t))return{h:e[1],s:e[2],l:e[3],a:e[4]};if(e=j.hsv.exec(t))return{h:e[1],s:e[2],v:e[3]};if(e=j.hsva.exec(t))return{h:e[1],s:e[2],v:e[3],a:e[4]};if(e=j.hex8.exec(t))return{r:O(e[1]),g:O(e[2]),b:O(e[3]),a:R(e[4]),format:a?"name":"hex8"};if(e=j.hex6.exec(t))return{r:O(e[1]),g:O(e[2]),b:O(e[3]),format:a?"name":"hex"};if(e=j.hex4.exec(t))return{r:O(e[1]+""+e[1]),g:O(e[2]+""+e[2]),b:O(e[3]+""+e[3]),a:R(e[4]+""+e[4]),format:a?"name":"hex8"};if(e=j.hex3.exec(t))return{r:O(e[1]+""+e[1]),g:O(e[2]+""+e[2]),b:O(e[3]+""+e[3]),format:a?"name":"hex"};return!1}(e));"object"==typeof e&&(V(e.r)&&V(e.g)&&V(e.b)?(p=e.r,d=e.g,g=e.b,a={r:255*C(p,255),g:255*C(d,255),b:255*C(g,255)},h=!0,f="%"===String(e.r).substr(-1)?"prgb":"rgb"):V(e.h)&&V(e.s)&&V(e.v)?(l=I(e.s),c=I(e.v),a=function(e,r,n){e=6*C(e,360),r=C(r,100),n=C(n,100);var a=t.floor(e),i=e-a,o=n*(1-r),s=n*(1-i*r),l=n*(1-(1-i)*r),c=a%6;return{r:255*[n,s,o,o,l,n][c],g:255*[l,n,n,s,o,o][c],b:255*[o,o,l,n,n,s][c]}}(e.h,l,c),h=!0,f="hsv"):V(e.h)&&V(e.s)&&V(e.l)&&(l=I(e.s),u=I(e.l),a=function(t,e,r){var n,a,i;function o(t,e,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}if(t=C(t,360),e=C(e,100),r=C(r,100),0===e)n=a=i=r;else{var s=r<.5?r*(1+e):r+e-r*e,l=2*r-s;n=o(l,s,t+1/3),a=o(l,s,t),i=o(l,s,t-1/3)}return{r:255*n,g:255*a,b:255*i}}(e.h,l,u),h=!0,f="hsl"),e.hasOwnProperty("a")&&(i=e.a));var p,d,g;return i=L(i),{ok:h,format:e.format||f,r:o(255,s(a.r,0)),g:o(255,s(a.g,0)),b:o(255,s(a.b,0)),a:i}}(e);this._originalInput=e,this._r=u.r,this._g=u.g,this._b=u.b,this._a=u.a,this._roundA=i(100*this._a)/100,this._format=l.format||u.format,this._gradientType=l.gradientType,this._r<1&&(this._r=i(this._r)),this._g<1&&(this._g=i(this._g)),this._b<1&&(this._b=i(this._b)),this._ok=u.ok,this._tc_id=a++}function u(t,e,r){t=C(t,255),e=C(e,255),r=C(r,255);var n,a,i=s(t,e,r),l=o(t,e,r),c=(i+l)/2;if(i==l)n=a=0;else{var u=i-l;switch(a=c>.5?u/(2-i-l):u/(i+l),i){case t:n=(e-r)/u+(e<r?6:0);break;case e:n=(r-t)/u+2;break;case r:n=(t-e)/u+4}n/=6}return{h:n,s:a,l:c}}function h(t,e,r){t=C(t,255),e=C(e,255),r=C(r,255);var n,a,i=s(t,e,r),l=o(t,e,r),c=i,u=i-l;if(a=0===i?0:u/i,i==l)n=0;else{switch(i){case t:n=(e-r)/u+(e<r?6:0);break;case e:n=(r-t)/u+2;break;case r:n=(t-e)/u+4}n/=6}return{h:n,s:a,v:c}}function f(t,e,r,n){var a=[z(i(t).toString(16)),z(i(e).toString(16)),z(i(r).toString(16))];return n&&a[0].charAt(0)==a[0].charAt(1)&&a[1].charAt(0)==a[1].charAt(1)&&a[2].charAt(0)==a[2].charAt(1)?a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0):a.join("")}function p(t,e,r,n){return[z(D(n)),z(i(t).toString(16)),z(i(e).toString(16)),z(i(r).toString(16))].join("")}function d(t,e){e=0===e?0:e||10;var r=c(t).toHsl();return r.s-=e/100,r.s=P(r.s),c(r)}function g(t,e){e=0===e?0:e||10;var r=c(t).toHsl();return r.s+=e/100,r.s=P(r.s),c(r)}function v(t){return c(t).desaturate(100)}function m(t,e){e=0===e?0:e||10;var r=c(t).toHsl();return r.l+=e/100,r.l=P(r.l),c(r)}function y(t,e){e=0===e?0:e||10;var r=c(t).toRgb();return r.r=s(0,o(255,r.r-i(-e/100*255))),r.g=s(0,o(255,r.g-i(-e/100*255))),r.b=s(0,o(255,r.b-i(-e/100*255))),c(r)}function x(t,e){e=0===e?0:e||10;var r=c(t).toHsl();return r.l-=e/100,r.l=P(r.l),c(r)}function b(t,e){var r=c(t).toHsl(),n=(r.h+e)%360;return r.h=n<0?360+n:n,c(r)}function _(t){var e=c(t).toHsl();return e.h=(e.h+180)%360,c(e)}function w(t){var e=c(t).toHsl(),r=e.h;return[c(t),c({h:(r+120)%360,s:e.s,l:e.l}),c({h:(r+240)%360,s:e.s,l:e.l})]}function k(t){var e=c(t).toHsl(),r=e.h;return[c(t),c({h:(r+90)%360,s:e.s,l:e.l}),c({h:(r+180)%360,s:e.s,l:e.l}),c({h:(r+270)%360,s:e.s,l:e.l})]}function T(t){var e=c(t).toHsl(),r=e.h;return[c(t),c({h:(r+72)%360,s:e.s,l:e.l}),c({h:(r+216)%360,s:e.s,l:e.l})]}function M(t,e,r){e=e||6,r=r||30;var n=c(t).toHsl(),a=360/r,i=[c(t)];for(n.h=(n.h-(a*e>>1)+720)%360;--e;)n.h=(n.h+a)%360,i.push(c(n));return i}function A(t,e){e=e||6;for(var r=c(t).toHsv(),n=r.h,a=r.s,i=r.v,o=[],s=1/e;e--;)o.push(c({h:n,s:a,v:i})),i=(i+s)%1;return o}c.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var e,r,n,a=this.toRgb();return e=a.r/255,r=a.g/255,n=a.b/255,.2126*(e<=.03928?e/12.92:t.pow((e+.055)/1.055,2.4))+.7152*(r<=.03928?r/12.92:t.pow((r+.055)/1.055,2.4))+.0722*(n<=.03928?n/12.92:t.pow((n+.055)/1.055,2.4))},setAlpha:function(t){return this._a=L(t),this._roundA=i(100*this._a)/100,this},toHsv:function(){var t=h(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=h(this._r,this._g,this._b),e=i(360*t.h),r=i(100*t.s),n=i(100*t.v);return 1==this._a?"hsv("+e+", "+r+"%, "+n+"%)":"hsva("+e+", "+r+"%, "+n+"%, "+this._roundA+")"},toHsl:function(){var t=u(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=u(this._r,this._g,this._b),e=i(360*t.h),r=i(100*t.s),n=i(100*t.l);return 1==this._a?"hsl("+e+", "+r+"%, "+n+"%)":"hsla("+e+", "+r+"%, "+n+"%, "+this._roundA+")"},toHex:function(t){return f(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(t){return function(t,e,r,n,a){var o=[z(i(t).toString(16)),z(i(e).toString(16)),z(i(r).toString(16)),z(D(n))];if(a&&o[0].charAt(0)==o[0].charAt(1)&&o[1].charAt(0)==o[1].charAt(1)&&o[2].charAt(0)==o[2].charAt(1)&&o[3].charAt(0)==o[3].charAt(1))return o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0)+o[3].charAt(0);return o.join("")}(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return"#"+this.toHex8(t)},toRgb:function(){return{r:i(this._r),g:i(this._g),b:i(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+i(this._r)+", "+i(this._g)+", "+i(this._b)+")":"rgba("+i(this._r)+", "+i(this._g)+", "+i(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:i(100*C(this._r,255))+"%",g:i(100*C(this._g,255))+"%",b:i(100*C(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+i(100*C(this._r,255))+"%, "+i(100*C(this._g,255))+"%, "+i(100*C(this._b,255))+"%)":"rgba("+i(100*C(this._r,255))+"%, "+i(100*C(this._g,255))+"%, "+i(100*C(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(E[f(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e="#"+p(this._r,this._g,this._b,this._a),r=e,n=this._gradientType?"GradientType = 1, ":"";if(t){var a=c(t);r="#"+p(a._r,a._g,a._b,a._a)}return"progid:DXImageTransform.Microsoft.gradient("+n+"startColorstr="+e+",endColorstr="+r+")"},toString:function(t){var e=!!t;t=t||this._format;var r=!1,n=this._a<1&&this._a>=0;return e||!n||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"hex4"!==t&&"hex8"!==t&&"name"!==t?("rgb"===t&&(r=this.toRgbString()),"prgb"===t&&(r=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(r=this.toHexString()),"hex3"===t&&(r=this.toHexString(!0)),"hex4"===t&&(r=this.toHex8String(!0)),"hex8"===t&&(r=this.toHex8String()),"name"===t&&(r=this.toName()),"hsl"===t&&(r=this.toHslString()),"hsv"===t&&(r=this.toHsvString()),r||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},clone:function(){return c(this.toString())},_applyModification:function(t,e){var r=t.apply(null,[this].concat([].slice.call(e)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(m,arguments)},brighten:function(){return this._applyModification(y,arguments)},darken:function(){return this._applyModification(x,arguments)},desaturate:function(){return this._applyModification(d,arguments)},saturate:function(){return this._applyModification(g,arguments)},greyscale:function(){return this._applyModification(v,arguments)},spin:function(){return this._applyModification(b,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(M,arguments)},complement:function(){return this._applyCombination(_,arguments)},monochromatic:function(){return this._applyCombination(A,arguments)},splitcomplement:function(){return this._applyCombination(T,arguments)},triad:function(){return this._applyCombination(w,arguments)},tetrad:function(){return this._applyCombination(k,arguments)}},c.fromRatio=function(t,e){if("object"==typeof t){var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]="a"===n?t[n]:I(t[n]));t=r}return c(t,e)},c.equals=function(t,e){return!(!t||!e)&&c(t).toRgbString()==c(e).toRgbString()},c.random=function(){return c.fromRatio({r:l(),g:l(),b:l()})},c.mix=function(t,e,r){r=0===r?0:r||50;var n=c(t).toRgb(),a=c(e).toRgb(),i=r/100;return c({r:(a.r-n.r)*i+n.r,g:(a.g-n.g)*i+n.g,b:(a.b-n.b)*i+n.b,a:(a.a-n.a)*i+n.a})},c.readability=function(e,r){var n=c(e),a=c(r);return(t.max(n.getLuminance(),a.getLuminance())+.05)/(t.min(n.getLuminance(),a.getLuminance())+.05)},c.isReadable=function(t,e,r){var n,a,i=c.readability(t,e);switch(a=!1,(n=function(t){var e,r;e=((t=t||{level:"AA",size:"small"}).level||"AA").toUpperCase(),r=(t.size||"small").toLowerCase(),"AA"!==e&&"AAA"!==e&&(e="AA");"small"!==r&&"large"!==r&&(r="small");return{level:e,size:r}}(r)).level+n.size){case"AAsmall":case"AAAlarge":a=i>=4.5;break;case"AAlarge":a=i>=3;break;case"AAAsmall":a=i>=7}return a},c.mostReadable=function(t,e,r){var n,a,i,o,s=null,l=0;a=(r=r||{}).includeFallbackColors,i=r.level,o=r.size;for(var u=0;u<e.length;u++)(n=c.readability(t,e[u]))>l&&(l=n,s=c(e[u]));return c.isReadable(t,s,{level:i,size:o})||!a?s:(r.includeFallbackColors=!1,c.mostReadable(t,["#fff","#000"],r))};var S=c.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},E=c.hexNames=function(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}(S);function L(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function C(e,r){(function(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)})(e)&&(e="100%");var n=function(t){return"string"==typeof t&&-1!=t.indexOf("%")}(e);return e=o(r,s(0,parseFloat(e))),n&&(e=parseInt(e*r,10)/100),t.abs(e-r)<1e-6?1:e%r/parseFloat(r)}function P(t){return o(1,s(0,t))}function O(t){return parseInt(t,16)}function z(t){return 1==t.length?"0"+t:""+t}function I(t){return t<=1&&(t=100*t+"%"),t}function D(e){return t.round(255*parseFloat(e)).toString(16)}function R(t){return O(t)/255}var F,B,N,j=(B="[\\s|\\(]+("+(F="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)")+")[,|\\s]+("+F+")[,|\\s]+("+F+")\\s*\\)?",N="[\\s|\\(]+("+F+")[,|\\s]+("+F+")[,|\\s]+("+F+")[,|\\s]+("+F+")\\s*\\)?",{CSS_UNIT:new RegExp(F),rgb:new RegExp("rgb"+B),rgba:new RegExp("rgba"+N),hsl:new RegExp("hsl"+B),hsla:new RegExp("hsla"+N),hsv:new RegExp("hsv"+B),hsva:new RegExp("hsva"+N),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function V(t){return!!j.CSS_UNIT.exec(t)}"undefined"!=typeof e&&e.exports?e.exports=c:window.tinycolor=c}(Math)},{}],536:[function(t,e,r){"use strict";e.exports=a,e.exports.float32=e.exports.float=a,e.exports.fract32=e.exports.fract=function(t){if(t.length){for(var e=a(t),r=0,n=e.length;r<n;r++)e[r]=t[r]-e[r];return e}return a(t-a(t))};var n=new Float32Array(1);function a(t){if(t.length){if(t instanceof Float32Array)return t;var e=new Float32Array(t);return e.set(t),e}return n[0]=t,n[0]}},{}],537:[function(t,e,r){"use strict";var n=t("parse-unit");e.exports=o;var a=96;function i(t,e){var r=n(getComputedStyle(t).getPropertyValue(e));return r[0]*o(r[1],t)}function o(t,e){switch(e=e||document.body,t=(t||"px").trim().toLowerCase(),e!==window&&e!==document||(e=document.body),t){case"%":return e.clientHeight/100;case"ch":case"ex":return function(t,e){var r=document.createElement("div");r.style["font-size"]="128"+t,e.appendChild(r);var n=i(r,"font-size")/128;return e.removeChild(r),n}(t,e);case"em":return i(e,"font-size");case"rem":return i(document.body,"font-size");case"vw":return window.innerWidth/100;case"vh":return window.innerHeight/100;case"vmin":return Math.min(window.innerWidth,window.innerHeight)/100;case"vmax":return Math.max(window.innerWidth,window.innerHeight)/100;case"in":return a;case"cm":return a/2.54;case"mm":return a/25.4;case"pt":return a/72;case"pc":return a/6}return 1}},{"parse-unit":462}],538:[function(t,e,r){var n;n=this,function(t){"use strict";var e=function(t){return t},r=function(t){if(null==(r=t.transform))return e;var r,n,a,i=r.scale[0],o=r.scale[1],s=r.translate[0],l=r.translate[1];return function(t,e){return e||(n=a=0),t[0]=(n+=t[0])*i+s,t[1]=(a+=t[1])*o+l,t}},n=function(t){var e=t.bbox;function n(t){l[0]=t[0],l[1]=t[1],s(l),l[0]<c&&(c=l[0]),l[0]>h&&(h=l[0]),l[1]<u&&(u=l[1]),l[1]>f&&(f=l[1])}function a(t){switch(t.type){case"GeometryCollection":t.geometries.forEach(a);break;case"Point":n(t.coordinates);break;case"MultiPoint":t.coordinates.forEach(n)}}if(!e){var i,o,s=r(t),l=new Array(2),c=1/0,u=c,h=-c,f=-c;for(o in t.arcs.forEach(function(t){for(var e=-1,r=t.length;++e<r;)i=t[e],l[0]=i[0],l[1]=i[1],s(l,e),l[0]<c&&(c=l[0]),l[0]>h&&(h=l[0]),l[1]<u&&(u=l[1]),l[1]>f&&(f=l[1])}),t.objects)a(t.objects[o]);e=t.bbox=[c,u,h,f]}return e},a=function(t,e){for(var r,n=t.length,a=n-e;a<--n;)r=t[a],t[a++]=t[n],t[n]=r};function i(t,e){var r=e.id,n=e.bbox,a=null==e.properties?{}:e.properties,i=o(t,e);return null==r&&null==n?{type:"Feature",properties:a,geometry:i}:null==n?{type:"Feature",id:r,properties:a,geometry:i}:{type:"Feature",id:r,bbox:n,properties:a,geometry:i}}function o(t,e){var n=r(t),i=t.arcs;function o(t,e){e.length&&e.pop();for(var r=i[t<0?~t:t],o=0,s=r.length;o<s;++o)e.push(n(r[o].slice(),o));t<0&&a(e,s)}function s(t){return n(t.slice())}function l(t){for(var e=[],r=0,n=t.length;r<n;++r)o(t[r],e);return e.length<2&&e.push(e[0].slice()),e}function c(t){for(var e=l(t);e.length<4;)e.push(e[0].slice());return e}function u(t){return t.map(c)}return function t(e){var r,n=e.type;switch(n){case"GeometryCollection":return{type:n,geometries:e.geometries.map(t)};case"Point":r=s(e.coordinates);break;case"MultiPoint":r=e.coordinates.map(s);break;case"LineString":r=l(e.arcs);break;case"MultiLineString":r=e.arcs.map(l);break;case"Polygon":r=u(e.arcs);break;case"MultiPolygon":r=e.arcs.map(u);break;default:return null}return{type:n,coordinates:r}}(e)}var s=function(t,e){var r={},n={},a={},i=[],o=-1;function s(t,e){for(var n in t){var a=t[n];delete e[a.start],delete a.start,delete a.end,a.forEach(function(t){r[t<0?~t:t]=1}),i.push(a)}}return e.forEach(function(r,n){var a,i=t.arcs[r<0?~r:r];i.length<3&&!i[1][0]&&!i[1][1]&&(a=e[++o],e[o]=r,e[n]=a)}),e.forEach(function(e){var r,i,o=function(e){var r,n=t.arcs[e<0?~e:e],a=n[0];t.transform?(r=[0,0],n.forEach(function(t){r[0]+=t[0],r[1]+=t[1]})):r=n[n.length-1];return e<0?[r,a]:[a,r]}(e),s=o[0],l=o[1];if(r=a[s])if(delete a[r.end],r.push(e),r.end=l,i=n[l]){delete n[i.start];var c=i===r?r:r.concat(i);n[c.start=r.start]=a[c.end=i.end]=c}else n[r.start]=a[r.end]=r;else if(r=n[l])if(delete n[r.start],r.unshift(e),r.start=s,i=a[s]){delete a[i.end];var u=i===r?r:i.concat(r);n[u.start=i.start]=a[u.end=r.end]=u}else n[r.start]=a[r.end]=r;else n[(r=[e]).start=s]=a[r.end=l]=r}),s(a,n),s(n,a),e.forEach(function(t){r[t<0?~t:t]||i.push([t])}),i};function l(t,e,r){var n,a,i;if(arguments.length>1)n=function(t,e,r){var n,a=[],i=[];function o(t){var e=t<0?~t:t;(i[e]||(i[e]=[])).push({i:t,g:n})}function s(t){t.forEach(o)}function l(t){t.forEach(s)}return function t(e){switch(n=e,e.type){case"GeometryCollection":e.geometries.forEach(t);break;case"LineString":s(e.arcs);break;case"MultiLineString":case"Polygon":l(e.arcs);break;case"MultiPolygon":e.arcs.forEach(l)}}(e),i.forEach(null==r?function(t){a.push(t[0].i)}:function(t){r(t[0].g,t[t.length-1].g)&&a.push(t[0].i)}),a}(0,e,r);else for(a=0,n=new Array(i=t.arcs.length);a<i;++a)n[a]=a;return{type:"MultiLineString",arcs:s(t,n)}}function c(t,e){var r={},n=[],a=[];function i(t){t.forEach(function(e){e.forEach(function(e){(r[e=e<0?~e:e]||(r[e]=[])).push(t)})}),n.push(t)}function l(e){return function(t){for(var e,r=-1,n=t.length,a=t[n-1],i=0;++r<n;)e=a,a=t[r],i+=e[0]*a[1]-e[1]*a[0];return Math.abs(i)}(o(t,{type:"Polygon",arcs:[e]}).coordinates[0])}return e.forEach(function t(e){switch(e.type){case"GeometryCollection":e.geometries.forEach(t);break;case"Polygon":i(e.arcs);break;case"MultiPolygon":e.arcs.forEach(i)}}),n.forEach(function(t){if(!t._){var e=[],n=[t];for(t._=1,a.push(e);t=n.pop();)e.push(t),t.forEach(function(t){t.forEach(function(t){r[t<0?~t:t].forEach(function(t){t._||(t._=1,n.push(t))})})})}}),n.forEach(function(t){delete t._}),{type:"MultiPolygon",arcs:a.map(function(e){var n,a=[];if(e.forEach(function(t){t.forEach(function(t){t.forEach(function(t){r[t<0?~t:t].length<2&&a.push(t)})})}),(n=(a=s(t,a)).length)>1)for(var i,o,c=1,u=l(a[0]);c<n;++c)(i=l(a[c]))>u&&(o=a[0],a[0]=a[c],a[c]=o,u=i);return a})}}var u=function(t,e){for(var r=0,n=t.length;r<n;){var a=r+n>>>1;t[a]<e?r=a+1:n=a}return r};t.bbox=n,t.feature=function(t,e){return"GeometryCollection"===e.type?{type:"FeatureCollection",features:e.geometries.map(function(e){return i(t,e)})}:i(t,e)},t.mesh=function(t){return o(t,l.apply(this,arguments))},t.meshArcs=l,t.merge=function(t){return o(t,c.apply(this,arguments))},t.mergeArcs=c,t.neighbors=function(t){var e={},r=t.map(function(){return[]});function n(t,r){t.forEach(function(t){t<0&&(t=~t);var n=e[t];n?n.push(r):e[t]=[r]})}function a(t,e){t.forEach(function(t){n(t,e)})}var i={LineString:n,MultiLineString:a,Polygon:a,MultiPolygon:function(t,e){t.forEach(function(t){a(t,e)})}};for(var o in t.forEach(function t(e,r){"GeometryCollection"===e.type?e.geometries.forEach(function(e){t(e,r)}):e.type in i&&i[e.type](e.arcs,r)}),e)for(var s=e[o],l=s.length,c=0;c<l;++c)for(var h=c+1;h<l;++h){var f,p=s[c],d=s[h];(f=r[p])[o=u(f,d)]!==d&&f.splice(o,0,d),(f=r[d])[o=u(f,p)]!==p&&f.splice(o,0,p)}return r},t.quantize=function(t,e){if(!((e=Math.floor(e))>=2))throw new Error("n must be \u22652");if(t.transform)throw new Error("already quantized");var r,a=n(t),i=a[0],o=(a[2]-i)/(e-1)||1,s=a[1],l=(a[3]-s)/(e-1)||1;function c(t){t[0]=Math.round((t[0]-i)/o),t[1]=Math.round((t[1]-s)/l)}function u(t){switch(t.type){case"GeometryCollection":t.geometries.forEach(u);break;case"Point":c(t.coordinates);break;case"MultiPoint":t.coordinates.forEach(c)}}for(r in t.arcs.forEach(function(t){for(var e,r,n,a=1,c=1,u=t.length,h=t[0],f=h[0]=Math.round((h[0]-i)/o),p=h[1]=Math.round((h[1]-s)/l);a<u;++a)h=t[a],r=Math.round((h[0]-i)/o),n=Math.round((h[1]-s)/l),r===f&&n===p||((e=t[c++])[0]=r-f,f=r,e[1]=n-p,p=n);c<2&&((e=t[c++])[0]=0,e[1]=0),t.length=c}),t.objects)u(t.objects[r]);return t.transform={scale:[o,l],translate:[i,s]},t},t.transform=r,t.untransform=function(t){if(null==(r=t.transform))return e;var r,n,a,i=r.scale[0],o=r.scale[1],s=r.translate[0],l=r.translate[1];return function(t,e){e||(n=a=0);var r=Math.round((t[0]-s)/i),c=Math.round((t[1]-l)/o);return t[0]=r-n,n=r,t[1]=c-a,a=c,t}},Object.defineProperty(t,"__esModule",{value:!0})}("object"==typeof r&&"undefined"!=typeof e?r:n.topojson=n.topojson||{})},{}],539:[function(t,e,r){"use strict";e.exports=function(t){if(t<0)return[];if(0===t)return[[0]];for(var e=0|Math.round(i(t+1)),r=[],o=0;o<e;++o){for(var s=n.unrank(t,o),l=[0],c=0,u=0;u<s.length;++u)c+=1<<s[u],l.push(c);a(s)<1&&(l[0]=c,l[t]=0),r.push(l)}return r};var n=t("permutation-rank"),a=t("permutation-parity"),i=t("gamma")},{gamma:234,"permutation-parity":464,"permutation-rank":465}],540:[function(t,e,r){"use strict";e.exports=function(t){var e=(t=t||{}).center||[0,0,0],r=t.up||[0,1,0],n=t.right||h(r),a=t.radius||1,i=t.theta||0,u=t.phi||0;if(e=[].slice.call(e,0,3),r=[].slice.call(r,0,3),s(r,r),n=[].slice.call(n,0,3),s(n,n),"eye"in t){var p=t.eye,d=[p[0]-e[0],p[1]-e[1],p[2]-e[2]];o(n,d,r),c(n[0],n[1],n[2])<1e-6?n=h(r):s(n,n),a=c(d[0],d[1],d[2]);var g=l(r,d)/a,v=l(n,d)/a;u=Math.acos(g),i=Math.acos(v)}return a=Math.log(a),new f(t.zoomMin,t.zoomMax,e,r,n,a,i,u)};var n=t("filtered-vector"),a=t("gl-mat4/invert"),i=t("gl-mat4/rotate"),o=t("gl-vec3/cross"),s=t("gl-vec3/normalize"),l=t("gl-vec3/dot");function c(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function u(t){return Math.min(1,Math.max(-1,t))}function h(t){var e=Math.abs(t[0]),r=Math.abs(t[1]),n=Math.abs(t[2]),a=[0,0,0];e>Math.max(r,n)?a[2]=1:r>Math.max(e,n)?a[0]=1:a[1]=1;for(var i=0,o=0,l=0;l<3;++l)i+=t[l]*t[l],o+=a[l]*t[l];for(l=0;l<3;++l)a[l]-=o/i*t[l];return s(a,a),a}function f(t,e,r,a,i,o,s,l){this.center=n(r),this.up=n(a),this.right=n(i),this.radius=n([o]),this.angle=n([s,l]),this.angle.bounds=[[-1/0,-Math.PI/2],[1/0,Math.PI/2]],this.setDistanceLimits(t,e),this.computedCenter=this.center.curve(0),this.computedUp=this.up.curve(0),this.computedRight=this.right.curve(0),this.computedRadius=this.radius.curve(0),this.computedAngle=this.angle.curve(0),this.computedToward=[0,0,0],this.computedEye=[0,0,0],this.computedMatrix=new Array(16);for(var c=0;c<16;++c)this.computedMatrix[c]=.5;this.recalcMatrix(0)}var p=f.prototype;p.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},p.getDistanceLimits=function(t){var e=this.radius.bounds[0];return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},p.recalcMatrix=function(t){this.center.curve(t),this.up.curve(t),this.right.curve(t),this.radius.curve(t),this.angle.curve(t);for(var e=this.computedUp,r=this.computedRight,n=0,a=0,i=0;i<3;++i)a+=e[i]*r[i],n+=e[i]*e[i];var l=Math.sqrt(n),u=0;for(i=0;i<3;++i)r[i]-=e[i]*a/n,u+=r[i]*r[i],e[i]/=l;var h=Math.sqrt(u);for(i=0;i<3;++i)r[i]/=h;var f=this.computedToward;o(f,e,r),s(f,f);var p=Math.exp(this.computedRadius[0]),d=this.computedAngle[0],g=this.computedAngle[1],v=Math.cos(d),m=Math.sin(d),y=Math.cos(g),x=Math.sin(g),b=this.computedCenter,_=v*y,w=m*y,k=x,T=-v*x,M=-m*x,A=y,S=this.computedEye,E=this.computedMatrix;for(i=0;i<3;++i){var L=_*r[i]+w*f[i]+k*e[i];E[4*i+1]=T*r[i]+M*f[i]+A*e[i],E[4*i+2]=L,E[4*i+3]=0}var C=E[1],P=E[5],O=E[9],z=E[2],I=E[6],D=E[10],R=P*D-O*I,F=O*z-C*D,B=C*I-P*z,N=c(R,F,B);R/=N,F/=N,B/=N,E[0]=R,E[4]=F,E[8]=B;for(i=0;i<3;++i)S[i]=b[i]+E[2+4*i]*p;for(i=0;i<3;++i){u=0;for(var j=0;j<3;++j)u+=E[i+4*j]*S[j];E[12+i]=-u}E[15]=1},p.getMatrix=function(t,e){this.recalcMatrix(t);var r=this.computedMatrix;if(e){for(var n=0;n<16;++n)e[n]=r[n];return e}return r};var d=[0,0,0];p.rotate=function(t,e,r,n){if(this.angle.move(t,e,r),n){this.recalcMatrix(t);var a=this.computedMatrix;d[0]=a[2],d[1]=a[6],d[2]=a[10];for(var o=this.computedUp,s=this.computedRight,l=this.computedToward,c=0;c<3;++c)a[4*c]=o[c],a[4*c+1]=s[c],a[4*c+2]=l[c];i(a,a,n,d);for(c=0;c<3;++c)o[c]=a[4*c],s[c]=a[4*c+1];this.up.set(t,o[0],o[1],o[2]),this.right.set(t,s[0],s[1],s[2])}},p.pan=function(t,e,r,n){e=e||0,r=r||0,n=n||0,this.recalcMatrix(t);var a=this.computedMatrix,i=(Math.exp(this.computedRadius[0]),a[1]),o=a[5],s=a[9],l=c(i,o,s);i/=l,o/=l,s/=l;var u=a[0],h=a[4],f=a[8],p=u*i+h*o+f*s,d=c(u-=i*p,h-=o*p,f-=s*p),g=(u/=d)*e+i*r,v=(h/=d)*e+o*r,m=(f/=d)*e+s*r;this.center.move(t,g,v,m);var y=Math.exp(this.computedRadius[0]);y=Math.max(1e-4,y+n),this.radius.set(t,Math.log(y))},p.translate=function(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},p.setMatrix=function(t,e,r,n){var i=1;"number"==typeof r&&(i=0|r),(i<0||i>3)&&(i=1);var o=(i+2)%3;e||(this.recalcMatrix(t),e=this.computedMatrix);var s=e[i],l=e[i+4],h=e[i+8];if(n){var f=Math.abs(s),p=Math.abs(l),d=Math.abs(h),g=Math.max(f,p,d);f===g?(s=s<0?-1:1,l=h=0):d===g?(h=h<0?-1:1,s=l=0):(l=l<0?-1:1,s=h=0)}else{var v=c(s,l,h);s/=v,l/=v,h/=v}var m,y,x=e[o],b=e[o+4],_=e[o+8],w=x*s+b*l+_*h,k=c(x-=s*w,b-=l*w,_-=h*w),T=l*(_/=k)-h*(b/=k),M=h*(x/=k)-s*_,A=s*b-l*x,S=c(T,M,A);if(T/=S,M/=S,A/=S,this.center.jump(t,H,G,Y),this.radius.idle(t),this.up.jump(t,s,l,h),this.right.jump(t,x,b,_),2===i){var E=e[1],L=e[5],C=e[9],P=E*x+L*b+C*_,O=E*T+L*M+C*A;m=R<0?-Math.PI/2:Math.PI/2,y=Math.atan2(O,P)}else{var z=e[2],I=e[6],D=e[10],R=z*s+I*l+D*h,F=z*x+I*b+D*_,B=z*T+I*M+D*A;m=Math.asin(u(R)),y=Math.atan2(B,F)}this.angle.jump(t,y,m),this.recalcMatrix(t);var N=e[2],j=e[6],V=e[10],U=this.computedMatrix;a(U,e);var q=U[15],H=U[12]/q,G=U[13]/q,Y=U[14]/q,W=Math.exp(this.computedRadius[0]);this.center.jump(t,H-N*W,G-j*W,Y-V*W)},p.lastT=function(){return Math.max(this.center.lastT(),this.up.lastT(),this.right.lastT(),this.radius.lastT(),this.angle.lastT())},p.idle=function(t){this.center.idle(t),this.up.idle(t),this.right.idle(t),this.radius.idle(t),this.angle.idle(t)},p.flush=function(t){this.center.flush(t),this.up.flush(t),this.right.flush(t),this.radius.flush(t),this.angle.flush(t)},p.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},p.lookAt=function(t,e,r,n){this.recalcMatrix(t),e=e||this.computedEye,r=r||this.computedCenter;var a=(n=n||this.computedUp)[0],i=n[1],o=n[2],s=c(a,i,o);if(!(s<1e-6)){a/=s,i/=s,o/=s;var l=e[0]-r[0],h=e[1]-r[1],f=e[2]-r[2],p=c(l,h,f);if(!(p<1e-6)){l/=p,h/=p,f/=p;var d=this.computedRight,g=d[0],v=d[1],m=d[2],y=a*g+i*v+o*m,x=c(g-=y*a,v-=y*i,m-=y*o);if(!(x<.01&&(x=c(g=i*f-o*h,v=o*l-a*f,m=a*h-i*l))<1e-6)){g/=x,v/=x,m/=x,this.up.set(t,a,i,o),this.right.set(t,g,v,m),this.center.set(t,r[0],r[1],r[2]),this.radius.set(t,Math.log(p));var b=i*m-o*v,_=o*g-a*m,w=a*v-i*g,k=c(b,_,w),T=a*l+i*h+o*f,M=g*l+v*h+m*f,A=(b/=k)*l+(_/=k)*h+(w/=k)*f,S=Math.asin(u(T)),E=Math.atan2(A,M),L=this.angle._state,C=L[L.length-1],P=L[L.length-2];C%=2*Math.PI;var O=Math.abs(C+2*Math.PI-E),z=Math.abs(C-E),I=Math.abs(C-2*Math.PI-E);O<z&&(C+=2*Math.PI),I<z&&(C-=2*Math.PI),this.angle.jump(this.angle.lastT(),C,P),this.angle.set(t,E,S)}}}}},{"filtered-vector":229,"gl-mat4/invert":268,"gl-mat4/rotate":273,"gl-vec3/cross":336,"gl-vec3/dot":341,"gl-vec3/normalize":358}],541:[function(t,e,r){"use strict";e.exports=function(t,e,r){var a=t*e,i=n*t,o=i-(i-t),s=t-o,l=n*e,c=l-(l-e),u=e-c,h=s*u-(a-o*c-s*c-o*u);if(r)return r[0]=h,r[1]=a,r;return[h,a]};var n=+(Math.pow(2,27)+1)},{}],542:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n=t+e,a=n-t,i=e-a,o=t-(n-a);if(r)return r[0]=o+i,r[1]=n,r;return[o+i,n]}},{}],543:[function(t,e,r){(function(e,n){"use strict";var a=t("bit-twiddle"),i=t("dup");e.__TYPEDARRAY_POOL||(e.__TYPEDARRAY_POOL={UINT8:i([32,0]),UINT16:i([32,0]),UINT32:i([32,0]),INT8:i([32,0]),INT16:i([32,0]),INT32:i([32,0]),FLOAT:i([32,0]),DOUBLE:i([32,0]),DATA:i([32,0]),UINT8C:i([32,0]),BUFFER:i([32,0])});var o="undefined"!=typeof Uint8ClampedArray,s=e.__TYPEDARRAY_POOL;s.UINT8C||(s.UINT8C=i([32,0])),s.BUFFER||(s.BUFFER=i([32,0]));var l=s.DATA,c=s.BUFFER;function u(t){if(t){var e=t.length||t.byteLength,r=a.log2(e);l[r].push(t)}}function h(t){t=a.nextPow2(t);var e=a.log2(t),r=l[e];return r.length>0?r.pop():new ArrayBuffer(t)}function f(t){return new Uint8Array(h(t),0,t)}function p(t){return new Uint16Array(h(2*t),0,t)}function d(t){return new Uint32Array(h(4*t),0,t)}function g(t){return new Int8Array(h(t),0,t)}function v(t){return new Int16Array(h(2*t),0,t)}function m(t){return new Int32Array(h(4*t),0,t)}function y(t){return new Float32Array(h(4*t),0,t)}function x(t){return new Float64Array(h(8*t),0,t)}function b(t){return o?new Uint8ClampedArray(h(t),0,t):f(t)}function _(t){return new DataView(h(t),0,t)}function w(t){t=a.nextPow2(t);var e=a.log2(t),r=c[e];return r.length>0?r.pop():new n(t)}r.free=function(t){if(n.isBuffer(t))c[a.log2(t.length)].push(t);else{if("[object ArrayBuffer]"!==Object.prototype.toString.call(t)&&(t=t.buffer),!t)return;var e=t.length||t.byteLength,r=0|a.log2(e);l[r].push(t)}},r.freeUint8=r.freeUint16=r.freeUint32=r.freeInt8=r.freeInt16=r.freeInt32=r.freeFloat32=r.freeFloat=r.freeFloat64=r.freeDouble=r.freeUint8Clamped=r.freeDataView=function(t){u(t.buffer)},r.freeArrayBuffer=u,r.freeBuffer=function(t){c[a.log2(t.length)].push(t)},r.malloc=function(t,e){if(void 0===e||"arraybuffer"===e)return h(t);switch(e){case"uint8":return f(t);case"uint16":return p(t);case"uint32":return d(t);case"int8":return g(t);case"int16":return v(t);case"int32":return m(t);case"float":case"float32":return y(t);case"double":case"float64":return x(t);case"uint8_clamped":return b(t);case"buffer":return w(t);case"data":case"dataview":return _(t);default:return null}return null},r.mallocArrayBuffer=h,r.mallocUint8=f,r.mallocUint16=p,r.mallocUint32=d,r.mallocInt8=g,r.mallocInt16=v,r.mallocInt32=m,r.mallocFloat32=r.mallocFloat=y,r.mallocFloat64=r.mallocDouble=x,r.mallocUint8Clamped=b,r.mallocDataView=_,r.mallocBuffer=w,r.clearCache=function(){for(var t=0;t<32;++t)s.UINT8[t].length=0,s.UINT16[t].length=0,s.UINT32[t].length=0,s.INT8[t].length=0,s.INT16[t].length=0,s.INT32[t].length=0,s.FLOAT[t].length=0,s.DOUBLE[t].length=0,s.UINT8C[t].length=0,l[t].length=0,c[t].length=0}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},t("buffer").Buffer)},{"bit-twiddle":94,buffer:107,dup:172}],544:[function(t,e,r){"use strict";function n(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}e.exports=n;var a=n.prototype;Object.defineProperty(a,"length",{get:function(){return this.roots.length}}),a.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t},a.find=function(t){for(var e=t,r=this.roots;r[t]!==t;)t=r[t];for(;r[e]!==t;){var n=r[e];r[e]=t,e=n}return t},a.link=function(t,e){var r=this.find(t),n=this.find(e);if(r!==n){var a=this.ranks,i=this.roots,o=a[r],s=a[n];o<s?i[r]=n:s<o?i[n]=r:(i[n]=r,++a[r])}}},{}],545:[function(t,e,r){"use strict";e.exports=function(t,e,r){return 0===t.length?t:e?(r||t.sort(e),function(t,e){for(var r=1,n=t.length,a=t[0],i=t[0],o=1;o<n;++o)if(i=a,e(a=t[o],i)){if(o===r){r++;continue}t[r++]=a}return t.length=r,t}(t,e)):(r||t.sort(),function(t){for(var e=1,r=t.length,n=t[0],a=t[0],i=1;i<r;++i,a=n)if(a=n,(n=t[i])!==a){if(i===e){e++;continue}t[e++]=n}return t.length=e,t}(t))}},{}],546:[function(t,e,r){var n=/[\'\"]/;e.exports=function(t){return t?(n.test(t.charAt(0))&&(t=t.substr(1)),n.test(t.charAt(t.length-1))&&(t=t.substr(0,t.length-1)),t):""}},{}],547:[function(t,e,r){"use strict";e.exports=function(t,e,r){Array.isArray(r)||(r=[].slice.call(arguments,2));for(var n=0,a=r.length;n<a;n++){var i=r[n];for(var o in i)if((void 0===e[o]||Array.isArray(e[o])||t[o]!==e[o])&&o in e){var s;if(!0===i[o])s=e[o];else{if(!1===i[o])continue;if("function"==typeof i[o]&&void 0===(s=i[o](e[o],t,e)))continue}t[o]=s}}return t}},{}],548:[function(t,e,r){"use strict";e.exports=function(t,e){"object"==typeof e&&null!==e||(e={});return n(t,e.canvas||a,e.context||i,e)};var n=t("./lib/vtext"),a=null,i=null;"undefined"!=typeof document&&((a=document.createElement("canvas")).width=8192,a.height=1024,i=a.getContext("2d"))},{"./lib/vtext":549}],549:[function(t,e,r){e.exports=function(t,e,r,n){var i=64,o=1.25,s={breaklines:!1,bolds:!1,italics:!1,subscripts:!1,superscripts:!1};n&&(n.size&&n.size>0&&(i=n.size),n.lineSpacing&&n.lineSpacing>0&&(o=n.lineSpacing),n.styletags&&n.styletags.breaklines&&(s.breaklines=!!n.styletags.breaklines),n.styletags&&n.styletags.bolds&&(s.bolds=!!n.styletags.bolds),n.styletags&&n.styletags.italics&&(s.italics=!!n.styletags.italics),n.styletags&&n.styletags.subscripts&&(s.subscripts=!!n.styletags.subscripts),n.styletags&&n.styletags.superscripts&&(s.superscripts=!!n.styletags.superscripts));return r.font=[n.fontStyle,n.fontVariant,n.fontWeight,i+"px",n.font].filter(function(t){return t}).join(" "),r.textAlign="start",r.textBaseline="alphabetic",r.direction="ltr",w(function(t,e,r,n,i,o){r=r.replace(/\n/g,""),r=!0===o.breaklines?r.replace(/\<br\>/g,"\n"):r.replace(/\<br\>/g," ");var s="",l=[];for(k=0;k<r.length;++k)l[k]=s;!0===o.bolds&&(l=x(c,u,r,l)),!0===o.italics&&(l=x(h,f,r,l)),!0===o.superscripts&&(l=x(p,g,r,l)),!0===o.subscripts&&(l=x(v,y,r,l));var b=[],_="";for(k=0;k<r.length;++k)null!==l[k]&&(_+=r[k],b.push(l[k]));var w,k,T,M,A,S=_.split("\n"),E=S.length,L=Math.round(i*n),C=n,P=2*n,O=0,z=E*L+P;t.height<z&&(t.height=z),e.fillStyle="#000",e.fillRect(0,0,t.width,t.height),e.fillStyle="#fff";var I=0,D="";function R(){if(""!==D){var t=e.measureText(D).width;e.fillText(D,C+T,P+M),T+=t}}function F(){return Math.round(A)+"px "}function B(t,r){var n=""+e.font;if(!0===o.subscripts){var a=t.indexOf(m),i=r.indexOf(m),s=a>-1?parseInt(t[1+a]):0,l=i>-1?parseInt(r[1+i]):0;s!==l&&(n=n.replace(F(),"?px "),A*=Math.pow(.75,l-s),n=n.replace("?px ",F())),M+=.25*L*(l-s)}if(!0===o.superscripts){var c=t.indexOf(d),h=r.indexOf(d),p=c>-1?parseInt(t[1+c]):0,g=h>-1?parseInt(r[1+h]):0;p!==g&&(n=n.replace(F(),"?px "),A*=Math.pow(.75,g-p),n=n.replace("?px ",F())),M-=.25*L*(g-p)}if(!0===o.bolds){var v=t.indexOf(u)>-1,y=r.indexOf(u)>-1;!v&&y&&(n=x?n.replace("italic ","italic bold "):"bold "+n),v&&!y&&(n=n.replace("bold ",""))}if(!0===o.italics){var x=t.indexOf(f)>-1,b=r.indexOf(f)>-1;!x&&b&&(n="italic "+n),x&&!b&&(n=n.replace("italic ",""))}e.font=n}for(w=0;w<E;++w){var N=S[w]+"\n";for(T=0,M=w*L,A=n,D="",k=0;k<N.length;++k){var j=k+I<b.length?b[k+I]:b[b.length-1];s===j?D+=N[k]:(R(),D=N[k],void 0!==j&&(B(s,j),s=j))}R(),I+=N.length;var V=0|Math.round(T+2*C);O<V&&(O=V)}var U=O,q=P+L*E;return a(e.getImageData(0,0,U,q).data,[q,U,4]).pick(-1,-1,0).transpose(1,0)}(e,r,t,i,o,s),n,i)},e.exports.processPixels=w;var n=t("surface-nets"),a=t("ndarray"),i=t("simplify-planar-graph"),o=t("clean-pslg"),s=t("cdt2d"),l=t("planar-graph-to-polyline"),c="b",u="b|",h="i",f="i|",p="sup",d="+",g="+1",v="sub",m="-",y="-1";function x(t,e,r,n){for(var a="<"+t+">",i="</"+t+">",o=a.length,s=i.length,l=e[0]===d||e[0]===m,c=0,u=-s;c>-1&&-1!==(c=r.indexOf(a,c))&&-1!==(u=r.indexOf(i,c+o))&&!(u<=c);){for(var h=c;h<u+s;++h)if(h<c+o||h>=u)n[h]=null,r=r.substr(0,h)+" "+r.substr(h+1);else if(null!==n[h]){var f=n[h].indexOf(e[0]);-1===f?n[h]+=e:l&&(n[h]=n[h].substr(0,f+1)+(1+parseInt(n[h][f+1]))+n[h].substr(f+2))}var p=c+o,g=r.substr(p,u-p).indexOf(a);c=-1!==g?g:u+s}return n}function b(t,e){var r=n(t,128);return e?i(r.cells,r.positions,.25):{edges:r.cells,positions:r.positions}}function _(t,e,r,n){var a=b(t,n),i=function(t,e,r){for(var n=e.textAlign||"start",a=e.textBaseline||"alphabetic",i=[1<<30,1<<30],o=[0,0],s=t.length,l=0;l<s;++l)for(var c=t[l],u=0;u<2;++u)i[u]=0|Math.min(i[u],c[u]),o[u]=0|Math.max(o[u],c[u]);var h=0;switch(n){case"center":h=-.5*(i[0]+o[0]);break;case"right":case"end":h=-o[0];break;case"left":case"start":h=-i[0];break;default:throw new Error("vectorize-text: Unrecognized textAlign: '"+n+"'")}var f=0;switch(a){case"hanging":case"top":f=-i[1];break;case"middle":f=-.5*(i[1]+o[1]);break;case"alphabetic":case"ideographic":f=-3*r;break;case"bottom":f=-o[1];break;default:throw new Error("vectorize-text: Unrecoginized textBaseline: '"+a+"'")}var p=1/r;return"lineHeight"in e?p*=+e.lineHeight:"width"in e?p=e.width/(o[0]-i[0]):"height"in e&&(p=e.height/(o[1]-i[1])),t.map(function(t){return[p*(t[0]+h),p*(t[1]+f)]})}(a.positions,e,r),c=a.edges,u="ccw"===e.orientation;if(o(i,c),e.polygons||e.polygon||e.polyline){for(var h=l(c,i),f=new Array(h.length),p=0;p<h.length;++p){for(var d=h[p],g=new Array(d.length),v=0;v<d.length;++v){for(var m=d[v],y=new Array(m.length),x=0;x<m.length;++x)y[x]=i[m[x]].slice();u&&y.reverse(),g[v]=y}f[p]=g}return f}return e.triangles||e.triangulate||e.triangle?{cells:s(i,c,{delaunay:!1,exterior:!1,interior:!0}),positions:i}:{edges:c,positions:i}}function w(t,e,r){try{return _(t,e,r,!0)}catch(t){}try{return _(t,e,r,!1)}catch(t){}return e.polygons||e.polyline||e.polygon?[]:e.triangles||e.triangulate||e.triangle?{cells:[],positions:[]}:{edges:[],positions:[]}}},{cdt2d:108,"clean-pslg":118,ndarray:451,"planar-graph-to-polyline":469,"simplify-planar-graph":522,"surface-nets":529}],550:[function(t,e,r){!function(){"use strict";if("undefined"==typeof ses||!ses.ok||ses.ok()){"undefined"!=typeof ses&&(ses.weakMapPermitHostObjects=v);var t=!1;if("function"==typeof WeakMap){var r=WeakMap;if("undefined"!=typeof navigator&&/Firefox/.test(navigator.userAgent));else{var n=new r,a=Object.freeze({});if(n.set(a,1),1===n.get(a))return void(e.exports=WeakMap);t=!0}}Object.prototype.hasOwnProperty;var i=Object.getOwnPropertyNames,o=Object.defineProperty,s=Object.isExtensible,l="weakmap:",c=l+"ident:"+Math.random()+"___";if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues&&"function"==typeof ArrayBuffer&&"function"==typeof Uint8Array){var u=new ArrayBuffer(25),h=new Uint8Array(u);crypto.getRandomValues(h),c=l+"rand:"+Array.prototype.map.call(h,function(t){return(t%36).toString(36)}).join("")+"___"}if(o(Object,"getOwnPropertyNames",{value:function(t){return i(t).filter(m)}}),"getPropertyNames"in Object){var f=Object.getPropertyNames;o(Object,"getPropertyNames",{value:function(t){return f(t).filter(m)}})}!function(){var t=Object.freeze;o(Object,"freeze",{value:function(e){return y(e),t(e)}});var e=Object.seal;o(Object,"seal",{value:function(t){return y(t),e(t)}});var r=Object.preventExtensions;o(Object,"preventExtensions",{value:function(t){return y(t),r(t)}})}();var p=!1,d=0,g=function(){this instanceof g||b();var t=[],e=[],r=d++;return Object.create(g.prototype,{get___:{value:x(function(n,a){var i,o=y(n);return o?r in o?o[r]:a:(i=t.indexOf(n))>=0?e[i]:a})},has___:{value:x(function(e){var n=y(e);return n?r in n:t.indexOf(e)>=0})},set___:{value:x(function(n,a){var i,o=y(n);return o?o[r]=a:(i=t.indexOf(n))>=0?e[i]=a:(i=t.length,e[i]=a,t[i]=n),this})},delete___:{value:x(function(n){var a,i,o=y(n);return o?r in o&&delete o[r]:!((a=t.indexOf(n))<0||(i=t.length-1,t[a]=void 0,e[a]=e[i],t[a]=t[i],t.length=i,e.length=i,0))})}})};g.prototype=Object.create(Object.prototype,{get:{value:function(t,e){return this.get___(t,e)},writable:!0,configurable:!0},has:{value:function(t){return this.has___(t)},writable:!0,configurable:!0},set:{value:function(t,e){return this.set___(t,e)},writable:!0,configurable:!0},delete:{value:function(t){return this.delete___(t)},writable:!0,configurable:!0}}),"function"==typeof r?function(){function n(){this instanceof g||b();var e,n=new r,a=void 0,i=!1;return e=t?function(t,e){return n.set(t,e),n.has(t)||(a||(a=new g),a.set(t,e)),this}:function(t,e){if(i)try{n.set(t,e)}catch(r){a||(a=new g),a.set___(t,e)}else n.set(t,e);return this},Object.create(g.prototype,{get___:{value:x(function(t,e){return a?n.has(t)?n.get(t):a.get___(t,e):n.get(t,e)})},has___:{value:x(function(t){return n.has(t)||!!a&&a.has___(t)})},set___:{value:x(e)},delete___:{value:x(function(t){var e=!!n.delete(t);return a&&a.delete___(t)||e})},permitHostObjects___:{value:x(function(t){if(t!==v)throw new Error("bogus call to permitHostObjects___");i=!0})}})}t&&"undefined"!=typeof Proxy&&(Proxy=void 0),n.prototype=g.prototype,e.exports=n,Object.defineProperty(WeakMap.prototype,"constructor",{value:WeakMap,enumerable:!1,configurable:!0,writable:!0})}():("undefined"!=typeof Proxy&&(Proxy=void 0),e.exports=g)}function v(t){t.permitHostObjects___&&t.permitHostObjects___(v)}function m(t){return!(t.substr(0,l.length)==l&&"___"===t.substr(t.length-3))}function y(t){if(t!==Object(t))throw new TypeError("Not an object: "+t);var e=t[c];if(e&&e.key===t)return e;if(s(t)){e={key:t};try{return o(t,c,{value:e,writable:!1,enumerable:!1,configurable:!1}),e}catch(t){return}}}function x(t){return t.prototype=null,Object.freeze(t)}function b(){p||"undefined"==typeof console||(p=!0,console.warn("WeakMap should be invoked as new WeakMap(), not WeakMap(). This will be an error in the future."))}}()},{}],551:[function(t,e,r){var n=t("./hidden-store.js");e.exports=function(){var t={};return function(e){if(("object"!=typeof e||null===e)&&"function"!=typeof e)throw new Error("Weakmap-shim: Key must be object");var r=e.valueOf(t);return r&&r.identity===t?r:n(e,t)}}},{"./hidden-store.js":552}],552:[function(t,e,r){e.exports=function(t,e){var r={identity:e},n=t.valueOf;return Object.defineProperty(t,"valueOf",{value:function(t){return t!==e?n.apply(this,arguments):r},writable:!0}),r}},{}],553:[function(t,e,r){var n=t("./create-store.js");e.exports=function(){var t=n();return{get:function(e,r){var n=t(e);return n.hasOwnProperty("value")?n.value:r},set:function(e,r){return t(e).value=r,this},has:function(e){return"value"in t(e)},delete:function(e){return delete t(e).value}}}},{"./create-store.js":551}],554:[function(t,e,r){var n=t("get-canvas-context");e.exports=function(t){return n("webgl",t)}},{"get-canvas-context":235}],555:[function(t,e,r){var n=t("../main"),a=t("object-assign"),i=n.instance();function o(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}o.prototype=new n.baseCalendar,a(o.prototype,{name:"Chinese",jdEpoch:1721425.5,hasYearZero:!1,minMonth:0,firstMonth:0,minDay:1,regionalOptions:{"":{name:"Chinese",epochs:["BEC","EC"],monthNumbers:function(t,e){if("string"==typeof t){var r=t.match(l);return r?r[0]:""}var n=this._validateYear(t),a=t.month(),i=""+this.toChineseMonth(n,a);return e&&i.length<2&&(i="0"+i),this.isIntercalaryMonth(n,a)&&(i+="i"),i},monthNames:function(t){if("string"==typeof t){var e=t.match(c);return e?e[0]:""}var r=this._validateYear(t),n=t.month(),a=["\u4e00\u6708","\u4e8c\u6708","\u4e09\u6708","\u56db\u6708","\u4e94\u6708","\u516d\u6708","\u4e03\u6708","\u516b\u6708","\u4e5d\u6708","\u5341\u6708","\u5341\u4e00\u6708","\u5341\u4e8c\u6708"][this.toChineseMonth(r,n)-1];return this.isIntercalaryMonth(r,n)&&(a="\u95f0"+a),a},monthNamesShort:function(t){if("string"==typeof t){var e=t.match(u);return e?e[0]:""}var r=this._validateYear(t),n=t.month(),a=["\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d","\u4e03","\u516b","\u4e5d","\u5341","\u5341\u4e00","\u5341\u4e8c"][this.toChineseMonth(r,n)-1];return this.isIntercalaryMonth(r,n)&&(a="\u95f0"+a),a},parseMonth:function(t,e){t=this._validateYear(t);var r,n=parseInt(e);if(isNaN(n))"\u95f0"===e[0]&&(r=!0,e=e.substring(1)),"\u6708"===e[e.length-1]&&(e=e.substring(0,e.length-1)),n=1+["\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d","\u4e03","\u516b","\u4e5d","\u5341","\u5341\u4e00","\u5341\u4e8c"].indexOf(e);else{var a=e[e.length-1];r="i"===a||"I"===a}return this.toMonthIndex(t,n,r)},dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:1,isRTL:!1}},_validateYear:function(t,e){if(t.year&&(t=t.year()),"number"!=typeof t||t<1888||t>2111)throw e.replace(/\{0\}/,this.local.name);return t},toMonthIndex:function(t,e,r){var a=this.intercalaryMonth(t);if(r&&e!==a||e<1||e>12)throw n.local.invalidMonth.replace(/\{0\}/,this.local.name);return a?!r&&e<=a?e-1:e:e-1},toChineseMonth:function(t,e){t.year&&(e=(t=t.year()).month());var r=this.intercalaryMonth(t);if(e<0||e>(r?12:11))throw n.local.invalidMonth.replace(/\{0\}/,this.local.name);return r?e<r?e+1:e:e+1},intercalaryMonth:function(t){return t=this._validateYear(t),h[t-h[0]]>>13},isIntercalaryMonth:function(t,e){t.year&&(e=(t=t.year()).month());var r=this.intercalaryMonth(t);return!!r&&r===e},leapYear:function(t){return 0!==this.intercalaryMonth(t)},weekOfYear:function(t,e,r){var a,o=this._validateYear(t,n.local.invalidyear),s=f[o-f[0]],l=s>>9&4095,c=s>>5&15,u=31&s;(a=i.newDate(l,c,u)).add(4-(a.dayOfWeek()||7),"d");var h=this.toJD(t,e,r)-a.toJD();return 1+Math.floor(h/7)},monthsInYear:function(t){return this.leapYear(t)?13:12},daysInMonth:function(t,e){t.year&&(e=t.month(),t=t.year()),t=this._validateYear(t);var r=h[t-h[0]];if(e>(r>>13?12:11))throw n.local.invalidMonth.replace(/\{0\}/,this.local.name);return r&1<<12-e?30:29},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var a=this._validate(t,s,r,n.local.invalidDate);t=this._validateYear(a.year()),e=a.month(),r=a.day();var o=this.isIntercalaryMonth(t,e),s=this.toChineseMonth(t,e),l=function(t,e,r,n,a){var i,o,s;if("object"==typeof t)o=t,i=e||{};else{var l="number"==typeof t&&t>=1888&&t<=2111;if(!l)throw new Error("Lunar year outside range 1888-2111");var c="number"==typeof e&&e>=1&&e<=12;if(!c)throw new Error("Lunar month outside range 1 - 12");var u,p="number"==typeof r&&r>=1&&r<=30;if(!p)throw new Error("Lunar day outside range 1 - 30");"object"==typeof n?(u=!1,i=n):(u=!!n,i=a||{}),o={year:t,month:e,day:r,isIntercalary:u}}s=o.day-1;var d,g=h[o.year-h[0]],v=g>>13;d=v?o.month>v?o.month:o.isIntercalary?o.month:o.month-1:o.month-1;for(var m=0;m<d;m++){var y=g&1<<12-m?30:29;s+=y}var x=f[o.year-f[0]],b=new Date(x>>9&4095,(x>>5&15)-1,(31&x)+s);return i.year=b.getFullYear(),i.month=1+b.getMonth(),i.day=b.getDate(),i}(t,s,r,o);return i.toJD(l.year,l.month,l.day)},fromJD:function(t){var e=i.fromJD(t),r=function(t,e,r,n){var a,i;if("object"==typeof t)a=t,i=e||{};else{var o="number"==typeof t&&t>=1888&&t<=2111;if(!o)throw new Error("Solar year outside range 1888-2111");var s="number"==typeof e&&e>=1&&e<=12;if(!s)throw new Error("Solar month outside range 1 - 12");var l="number"==typeof r&&r>=1&&r<=31;if(!l)throw new Error("Solar day outside range 1 - 31");a={year:t,month:e,day:r},i=n||{}}var c=f[a.year-f[0]],u=a.year<<9|a.month<<5|a.day;i.year=u>=c?a.year:a.year-1,c=f[i.year-f[0]];var p,d=new Date(c>>9&4095,(c>>5&15)-1,31&c),g=new Date(a.year,a.month-1,a.day);p=Math.round((g-d)/864e5);var v,m=h[i.year-h[0]];for(v=0;v<13;v++){var y=m&1<<12-v?30:29;if(p<y)break;p-=y}var x=m>>13;!x||v<x?(i.isIntercalary=!1,i.month=1+v):v===x?(i.isIntercalary=!0,i.month=v):(i.isIntercalary=!1,i.month=v);return i.day=1+p,i}(e.year(),e.month(),e.day()),n=this.toMonthIndex(r.year,r.month,r.isIntercalary);return this.newDate(r.year,n,r.day)},fromString:function(t){var e=t.match(s),r=this._validateYear(+e[1]),n=+e[2],a=!!e[3],i=this.toMonthIndex(r,n,a),o=+e[4];return this.newDate(r,i,o)},add:function(t,e,r){var n=t.year(),a=t.month(),i=this.isIntercalaryMonth(n,a),s=this.toChineseMonth(n,a),l=Object.getPrototypeOf(o.prototype).add.call(this,t,e,r);if("y"===r){var c=l.year(),u=l.month(),h=this.isIntercalaryMonth(c,s),f=i&&h?this.toMonthIndex(c,s,!0):this.toMonthIndex(c,s,!1);f!==u&&l.month(f)}return l}});var s=/^\s*(-?\d\d\d\d|\d\d)[-/](\d?\d)([iI]?)[-/](\d?\d)/m,l=/^\d?\d[iI]?/m,c=/^\u95f0?\u5341?[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]?\u6708/m,u=/^\u95f0?\u5341?[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]?/m;n.calendars.chinese=o;var h=[1887,5780,5802,19157,2742,50359,1198,2646,46378,7466,3412,30122,5482,67949,2396,5294,43597,6732,6954,36181,2772,4954,18781,2396,54427,5274,6730,47781,5800,6868,21210,4790,59703,2350,5270,46667,3402,3496,38325,1388,4782,18735,2350,52374,6804,7498,44457,2906,1388,29294,4700,63789,6442,6804,56138,5802,2772,38235,1210,4698,22827,5418,63125,3476,5802,43701,2484,5302,27223,2646,70954,7466,3412,54698,5482,2412,38062,5294,2636,32038,6954,60245,2772,4826,43357,2394,5274,39501,6730,72357,5800,5844,53978,4790,2358,38039,5270,87627,3402,3496,54708,5484,4782,43311,2350,3222,27978,7498,68965,2904,5484,45677,4700,6444,39573,6804,6986,19285,2772,62811,1210,4698,47403,5418,5780,38570,5546,76469,2420,5302,51799,2646,5414,36501,3412,5546,18869,2412,54446,5276,6732,48422,6822,2900,28010,4826,92509,2394,5274,55883,6730,6820,47956,5812,2778,18779,2358,62615,5270,5450,46757,3492,5556,27318,4718,67887,2350,3222,52554,7498,3428,38252,5468,4700,31022,6444,64149,6804,6986,43861,2772,5338,35421,2650,70955,5418,5780,54954,5546,2740,38074,5302,2646,29991,3366,61011,3412,5546,43445,2412,5294,35406,6732,72998,6820,6996,52586,2778,2396,38045,5274,6698,23333,6820,64338,5812,2746,43355,2358,5270,39499,5450,79525,3492,5548],f=[1887,966732,967231,967733,968265,968766,969297,969798,970298,970829,971330,971830,972362,972863,973395,973896,974397,974928,975428,975929,976461,976962,977462,977994,978494,979026,979526,980026,980558,981059,981559,982091,982593,983124,983624,984124,984656,985157,985656,986189,986690,987191,987722,988222,988753,989254,989754,990286,990788,991288,991819,992319,992851,993352,993851,994383,994885,995385,995917,996418,996918,997450,997949,998481,998982,999483,1000014,1000515,1001016,1001548,1002047,1002578,1003080,1003580,1004111,1004613,1005113,1005645,1006146,1006645,1007177,1007678,1008209,1008710,1009211,1009743,1010243,1010743,1011275,1011775,1012306,1012807,1013308,1013840,1014341,1014841,1015373,1015874,1016404,1016905,1017405,1017937,1018438,1018939,1019471,1019972,1020471,1021002,1021503,1022035,1022535,1023036,1023568,1024069,1024568,1025100,1025601,1026102,1026633,1027133,1027666,1028167,1028666,1029198,1029699,1030199,1030730,1031231,1031763,1032264,1032764,1033296,1033797,1034297,1034828,1035329,1035830,1036362,1036861,1037393,1037894,1038394,1038925,1039427,1039927,1040459,1040959,1041491,1041992,1042492,1043023,1043524,1044024,1044556,1045057,1045558,1046090,1046590,1047121,1047622,1048122,1048654,1049154,1049655,1050187,1050689,1051219,1051720,1052220,1052751,1053252,1053752,1054284,1054786,1055285,1055817,1056317,1056849,1057349,1057850,1058382,1058883,1059383,1059915,1060415,1060947,1061447,1061947,1062479,1062981,1063480,1064012,1064514,1065014,1065545,1066045,1066577,1067078,1067578,1068110,1068611,1069112,1069642,1070142,1070674,1071175,1071675,1072207,1072709,1073209,1073740,1074241,1074741,1075273,1075773,1076305,1076807,1077308,1077839,1078340,1078840,1079372,1079871,1080403,1080904]},{"../main":569,"object-assign":455}],556:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Coptic",jdEpoch:1825029.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Coptic",epochs:["BAM","AM"],monthNames:["Thout","Paopi","Hathor","Koiak","Tobi","Meshir","Paremhat","Paremoude","Pashons","Paoni","Epip","Mesori","Pi Kogi Enavot"],monthNamesShort:["Tho","Pao","Hath","Koi","Tob","Mesh","Pat","Pad","Pash","Pao","Epi","Meso","PiK"],dayNames:["Tkyriaka","Pesnau","Pshoment","Peftoou","Ptiou","Psoou","Psabbaton"],dayNamesShort:["Tky","Pes","Psh","Pef","Pti","Pso","Psa"],dayNamesMin:["Tk","Pes","Psh","Pef","Pt","Pso","Psa"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[""].invalidYear),13},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);return(t=a.year())<0&&t++,a.day()+30*(a.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,r=Math.floor((e-Math.floor((e+366)/1461))/365)+1;r<=0&&r--,e=Math.floor(t)+.5-this.newDate(r,1,1).toJD();var n=Math.floor(e/30)+1,a=e-30*(n-1)+1;return this.newDate(r,n,a)}}),n.calendars.coptic=i},{"../main":569,"object-assign":455}],557:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Discworld",jdEpoch:1721425.5,daysPerMonth:[16,32,32,32,32,32,32,32,32,32,32,32,32],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Discworld",epochs:["BUC","UC"],monthNames:["Ick","Offle","February","March","April","May","June","Grune","August","Spune","Sektober","Ember","December"],monthNamesShort:["Ick","Off","Feb","Mar","Apr","May","Jun","Gru","Aug","Spu","Sek","Emb","Dec"],dayNames:["Sunday","Octeday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Oct","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Oc","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:2,isRTL:!1}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),!1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),13},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),400},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/8)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]},daysInWeek:function(){return 8},dayOfWeek:function(t,e,r){return(this._validate(t,e,r,n.local.invalidDate).day()+1)%8},weekDay:function(t,e,r){var n=this.dayOfWeek(t,e,r);return n>=2&&n<=6},extraInfo:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);return{century:o[Math.floor((a.year()-1)/100)+1]||""}},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);return t=a.year()+(a.year()<0?1:0),e=a.month(),(r=a.day())+(e>1?16:0)+(e>2?32*(e-2):0)+400*(t-1)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t+.5)-Math.floor(this.jdEpoch)-1;var e=Math.floor(t/400)+1;t-=400*(e-1),t+=t>15?16:0;var r=Math.floor(t/32)+1,n=t-32*(r-1)+1;return this.newDate(e<=0?e-1:e,r,n)}});var o={20:"Fruitbat",21:"Anchovy"};n.calendars.discworld=i},{"../main":569,"object-assign":455}],558:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Ethiopian",jdEpoch:1724220.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Ethiopian",epochs:["BEE","EE"],monthNames:["Meskerem","Tikemet","Hidar","Tahesas","Tir","Yekatit","Megabit","Miazia","Genbot","Sene","Hamle","Nehase","Pagume"],monthNamesShort:["Mes","Tik","Hid","Tah","Tir","Yek","Meg","Mia","Gen","Sen","Ham","Neh","Pag"],dayNames:["Ehud","Segno","Maksegno","Irob","Hamus","Arb","Kidame"],dayNamesShort:["Ehu","Seg","Mak","Iro","Ham","Arb","Kid"],dayNamesMin:["Eh","Se","Ma","Ir","Ha","Ar","Ki"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[""].invalidYear),13},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);return(t=a.year())<0&&t++,a.day()+30*(a.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,r=Math.floor((e-Math.floor((e+366)/1461))/365)+1;r<=0&&r--,e=Math.floor(t)+.5-this.newDate(r,1,1).toJD();var n=Math.floor(e/30)+1,a=e-30*(n-1)+1;return this.newDate(r,n,a)}}),n.calendars.ethiopian=i},{"../main":569,"object-assign":455}],559:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}function o(t,e){return t-e*Math.floor(t/e)}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Hebrew",jdEpoch:347995.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29,29],hasYearZero:!1,minMonth:1,firstMonth:7,minDay:1,regionalOptions:{"":{name:"Hebrew",epochs:["BAM","AM"],monthNames:["Nisan","Iyar","Sivan","Tammuz","Av","Elul","Tishrei","Cheshvan","Kislev","Tevet","Shevat","Adar","Adar II"],monthNamesShort:["Nis","Iya","Siv","Tam","Av","Elu","Tis","Che","Kis","Tev","She","Ada","Ad2"],dayNames:["Yom Rishon","Yom Sheni","Yom Shlishi","Yom Revi'i","Yom Chamishi","Yom Shishi","Yom Shabbat"],dayNamesShort:["Ris","She","Shl","Rev","Cha","Shi","Sha"],dayNamesMin:["Ri","She","Shl","Re","Ch","Shi","Sha"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return this._leapYear(e.year())},_leapYear:function(t){return o(7*(t=t<0?t+1:t)+1,19)<7},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),this._leapYear(t.year?t.year():t)?13:12},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year(),this.toJD(-1===t?1:t+1,7,1)-this.toJD(t,7,1)},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,n.local.invalidMonth),12===e&&this.leapYear(t)?30:8===e&&5===o(this.daysInYear(t),10)?30:9===e&&3===o(this.daysInYear(t),10)?29:this.daysPerMonth[e-1]},weekDay:function(t,e,r){return 6!==this.dayOfWeek(t,e,r)},extraInfo:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);return{yearType:(this.leapYear(a)?"embolismic":"common")+" "+["deficient","regular","complete"][this.daysInYear(a)%10-3]}},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);t=a.year(),e=a.month(),r=a.day();var i=t<=0?t+1:t,o=this.jdEpoch+this._delay1(i)+this._delay2(i)+r+1;if(e<7){for(var s=7;s<=this.monthsInYear(t);s++)o+=this.daysInMonth(t,s);for(s=1;s<e;s++)o+=this.daysInMonth(t,s)}else for(s=7;s<e;s++)o+=this.daysInMonth(t,s);return o},_delay1:function(t){var e=Math.floor((235*t-234)/19),r=12084+13753*e,n=29*e+Math.floor(r/25920);return o(3*(n+1),7)<3&&n++,n},_delay2:function(t){var e=this._delay1(t-1),r=this._delay1(t);return this._delay1(t+1)-r==356?2:r-e==382?1:0},fromJD:function(t){t=Math.floor(t)+.5;for(var e=Math.floor(98496*(t-this.jdEpoch)/35975351)-1;t>=this.toJD(-1===e?1:e+1,7,1);)e++;for(var r=t<this.toJD(e,1,1)?7:1;t>this.toJD(e,r,this.daysInMonth(e,r));)r++;var n=t-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),n.calendars.hebrew=i},{"../main":569,"object-assign":455}],560:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Islamic",jdEpoch:1948439.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Islamic",epochs:["BH","AH"],monthNames:["Muharram","Safar","Rabi' al-awwal","Rabi' al-thani","Jumada al-awwal","Jumada al-thani","Rajab","Sha'aban","Ramadan","Shawwal","Dhu al-Qi'dah","Dhu al-Hijjah"],monthNamesShort:["Muh","Saf","Rab1","Rab2","Jum1","Jum2","Raj","Sha'","Ram","Shaw","DhuQ","DhuH"],dayNames:["Yawm al-ahad","Yawm al-ithnayn","Yawm ath-thulaathaa'","Yawm al-arbi'aa'","Yawm al-kham\u012bs","Yawm al-jum'a","Yawm as-sabt"],dayNamesShort:["Aha","Ith","Thu","Arb","Kha","Jum","Sab"],dayNamesMin:["Ah","It","Th","Ar","Kh","Ju","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!1}},leapYear:function(t){return(11*this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year()+14)%30<11},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return this.leapYear(t)?355:354},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);return t=a.year(),e=a.month(),t=t<=0?t+1:t,(r=a.day())+Math.ceil(29.5*(e-1))+354*(t-1)+Math.floor((3+11*t)/30)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t)+.5;var e=Math.floor((30*(t-this.jdEpoch)+10646)/10631);e=e<=0?e-1:e;var r=Math.min(12,Math.ceil((t-29-this.toJD(e,1,1))/29.5)+1),n=t-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),n.calendars.islamic=i},{"../main":569,"object-assign":455}],561:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Julian",jdEpoch:1721423.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Julian",epochs:["BC","AD"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"mm/dd/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t=e.year()<0?e.year()+1:e.year())%4==0},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);return t=a.year(),e=a.month(),r=a.day(),t<0&&t++,e<=2&&(t--,e+=12),Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r-1524.5},fromJD:function(t){var e=Math.floor(t+.5)+1524,r=Math.floor((e-122.1)/365.25),n=Math.floor(365.25*r),a=Math.floor((e-n)/30.6001),i=a-Math.floor(a<14?1:13),o=r-Math.floor(i>2?4716:4715),s=e-n-Math.floor(30.6001*a);return o<=0&&o--,this.newDate(o,i,s)}}),n.calendars.julian=i},{"../main":569,"object-assign":455}],562:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}function o(t,e){return t-e*Math.floor(t/e)}function s(t,e){return o(t-1,e)+1}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Mayan",jdEpoch:584282.5,hasYearZero:!0,minMonth:0,firstMonth:0,minDay:0,regionalOptions:{"":{name:"Mayan",epochs:["",""],monthNames:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"],monthNamesShort:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"],dayNames:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],dayNamesShort:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],dayNamesMin:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],digits:null,dateFormat:"YYYY.m.d",firstDay:0,isRTL:!1,haabMonths:["Pop","Uo","Zip","Zotz","Tzec","Xul","Yaxkin","Mol","Chen","Yax","Zac","Ceh","Mac","Kankin","Muan","Pax","Kayab","Cumku","Uayeb"],tzolkinMonths:["Imix","Ik","Akbal","Kan","Chicchan","Cimi","Manik","Lamat","Muluc","Oc","Chuen","Eb","Ben","Ix","Men","Cib","Caban","Etznab","Cauac","Ahau"]}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),!1},formatYear:function(t){t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year();var e=Math.floor(t/400);return t%=400,t+=t<0?400:0,e+"."+Math.floor(t/20)+"."+t%20},forYear:function(t){if((t=t.split(".")).length<3)throw"Invalid Mayan year";for(var e=0,r=0;r<t.length;r++){var n=parseInt(t[r],10);if(Math.abs(n)>19||r>0&&n<0)throw"Invalid Mayan year";e=20*e+n}return e},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),18},weekOfYear:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate),0},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),360},daysInMonth:function(t,e){return this._validate(t,e,this.minDay,n.local.invalidMonth),20},daysInWeek:function(){return 5},dayOfWeek:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate).day()},weekDay:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate),!0},extraInfo:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate).toJD(),i=this._toHaab(a),o=this._toTzolkin(a);return{haabMonthName:this.local.haabMonths[i[0]-1],haabMonth:i[0],haabDay:i[1],tzolkinDayName:this.local.tzolkinMonths[o[0]-1],tzolkinDay:o[0],tzolkinTrecena:o[1]}},_toHaab:function(t){var e=o((t-=this.jdEpoch)+8+340,365);return[Math.floor(e/20)+1,o(e,20)]},_toTzolkin:function(t){return[s((t-=this.jdEpoch)+20,20),s(t+4,13)]},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);return a.day()+20*a.month()+360*a.year()+this.jdEpoch},fromJD:function(t){t=Math.floor(t)+.5-this.jdEpoch;var e=Math.floor(t/360);t%=360,t+=t<0?360:0;var r=Math.floor(t/20),n=t%20;return this.newDate(e,r,n)}}),n.calendars.mayan=i},{"../main":569,"object-assign":455}],563:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}i.prototype=new n.baseCalendar;var o=n.instance("gregorian");a(i.prototype,{name:"Nanakshahi",jdEpoch:2257673.5,daysPerMonth:[31,31,31,31,31,30,30,30,30,30,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Nanakshahi",epochs:["BN","AN"],monthNames:["Chet","Vaisakh","Jeth","Harh","Sawan","Bhadon","Assu","Katak","Maghar","Poh","Magh","Phagun"],monthNamesShort:["Che","Vai","Jet","Har","Saw","Bha","Ass","Kat","Mgr","Poh","Mgh","Pha"],dayNames:["Somvaar","Mangalvar","Budhvaar","Veervaar","Shukarvaar","Sanicharvaar","Etvaar"],dayNamesShort:["Som","Mangal","Budh","Veer","Shukar","Sanichar","Et"],dayNamesMin:["So","Ma","Bu","Ve","Sh","Sa","Et"],digits:null,dateFormat:"dd-mm-yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[""].invalidYear);return o.leapYear(e.year()+(e.year()<1?1:0)+1469)},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(1-(n.dayOfWeek()||7),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidMonth);(t=a.year())<0&&t++;for(var i=a.day(),s=1;s<a.month();s++)i+=this.daysPerMonth[s-1];return i+o.toJD(t+1468,3,13)},fromJD:function(t){t=Math.floor(t+.5);for(var e=Math.floor((t-(this.jdEpoch-1))/366);t>=this.toJD(e+1,1,1);)e++;for(var r=t-Math.floor(this.toJD(e,1,1)+.5)+1,n=1;r>this.daysInMonth(e,n);)r-=this.daysInMonth(e,n),n++;return this.newDate(e,n,r)}}),n.calendars.nanakshahi=i},{"../main":569,"object-assign":455}],564:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Nepali",jdEpoch:1700709.5,daysPerMonth:[31,31,32,32,31,30,30,29,30,29,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,daysPerYear:365,regionalOptions:{"":{name:"Nepali",epochs:["BBS","ABS"],monthNames:["Baisakh","Jestha","Ashadh","Shrawan","Bhadra","Ashwin","Kartik","Mangsir","Paush","Mangh","Falgun","Chaitra"],monthNamesShort:["Bai","Je","As","Shra","Bha","Ash","Kar","Mang","Pau","Ma","Fal","Chai"],dayNames:["Aaitabaar","Sombaar","Manglbaar","Budhabaar","Bihibaar","Shukrabaar","Shanibaar"],dayNamesShort:["Aaita","Som","Mangl","Budha","Bihi","Shukra","Shani"],dayNamesMin:["Aai","So","Man","Bu","Bi","Shu","Sha"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:1,isRTL:!1}},leapYear:function(t){return this.daysInYear(t)!==this.daysPerYear},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){if(t=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year(),"undefined"==typeof this.NEPALI_CALENDAR_DATA[t])return this.daysPerYear;for(var e=0,r=this.minMonth;r<=12;r++)e+=this.NEPALI_CALENDAR_DATA[t][r];return e},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,n.local.invalidMonth),"undefined"==typeof this.NEPALI_CALENDAR_DATA[t]?this.daysPerMonth[e-1]:this.NEPALI_CALENDAR_DATA[t][e]},weekDay:function(t,e,r){return 6!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);t=a.year(),e=a.month(),r=a.day();var i=n.instance(),o=0,s=e,l=t;this._createMissingCalendarData(t);var c=t-(s>9||9===s&&r>=this.NEPALI_CALENDAR_DATA[l][0]?56:57);for(9!==e&&(o=r,s--);9!==s;)s<=0&&(s=12,l--),o+=this.NEPALI_CALENDAR_DATA[l][s],s--;return 9===e?(o+=r-this.NEPALI_CALENDAR_DATA[l][0])<0&&(o+=i.daysInYear(c)):o+=this.NEPALI_CALENDAR_DATA[l][9]-this.NEPALI_CALENDAR_DATA[l][0],i.newDate(c,1,1).add(o,"d").toJD()},fromJD:function(t){var e=n.instance().fromJD(t),r=e.year(),a=e.dayOfYear(),i=r+56;this._createMissingCalendarData(i);for(var o=9,s=this.NEPALI_CALENDAR_DATA[i][0],l=this.NEPALI_CALENDAR_DATA[i][o]-s+1;a>l;)++o>12&&(o=1,i++),l+=this.NEPALI_CALENDAR_DATA[i][o];var c=this.NEPALI_CALENDAR_DATA[i][o]-(l-a);return this.newDate(i,o,c)},_createMissingCalendarData:function(t){var e=this.daysPerMonth.slice(0);e.unshift(17);for(var r=t-1;r<t+2;r++)"undefined"==typeof this.NEPALI_CALENDAR_DATA[r]&&(this.NEPALI_CALENDAR_DATA[r]=e)},NEPALI_CALENDAR_DATA:{1970:[18,31,31,32,31,31,31,30,29,30,29,30,30],1971:[18,31,31,32,31,32,30,30,29,30,29,30,30],1972:[17,31,32,31,32,31,30,30,30,29,29,30,30],1973:[19,30,32,31,32,31,30,30,30,29,30,29,31],1974:[19,31,31,32,30,31,31,30,29,30,29,30,30],1975:[18,31,31,32,32,30,31,30,29,30,29,30,30],1976:[17,31,32,31,32,31,30,30,30,29,29,30,31],1977:[18,31,32,31,32,31,31,29,30,29,30,29,31],1978:[18,31,31,32,31,31,31,30,29,30,29,30,30],1979:[18,31,31,32,32,31,30,30,29,30,29,30,30],1980:[17,31,32,31,32,31,30,30,30,29,29,30,31],1981:[18,31,31,31,32,31,31,29,30,30,29,30,30],1982:[18,31,31,32,31,31,31,30,29,30,29,30,30],1983:[18,31,31,32,32,31,30,30,29,30,29,30,30],1984:[17,31,32,31,32,31,30,30,30,29,29,30,31],1985:[18,31,31,31,32,31,31,29,30,30,29,30,30],1986:[18,31,31,32,31,31,31,30,29,30,29,30,30],1987:[18,31,32,31,32,31,30,30,29,30,29,30,30],1988:[17,31,32,31,32,31,30,30,30,29,29,30,31],1989:[18,31,31,31,32,31,31,30,29,30,29,30,30],1990:[18,31,31,32,31,31,31,30,29,30,29,30,30],1991:[18,31,32,31,32,31,30,30,29,30,29,30,30],1992:[17,31,32,31,32,31,30,30,30,29,30,29,31],1993:[18,31,31,31,32,31,31,30,29,30,29,30,30],1994:[18,31,31,32,31,31,31,30,29,30,29,30,30],1995:[17,31,32,31,32,31,30,30,30,29,29,30,30],1996:[17,31,32,31,32,31,30,30,30,29,30,29,31],1997:[18,31,31,32,31,31,31,30,29,30,29,30,30],1998:[18,31,31,32,31,31,31,30,29,30,29,30,30],1999:[17,31,32,31,32,31,30,30,30,29,29,30,31],2000:[17,30,32,31,32,31,30,30,30,29,30,29,31],2001:[18,31,31,32,31,31,31,30,29,30,29,30,30],2002:[18,31,31,32,32,31,30,30,29,30,29,30,30],2003:[17,31,32,31,32,31,30,30,30,29,29,30,31],2004:[17,30,32,31,32,31,30,30,30,29,30,29,31],2005:[18,31,31,32,31,31,31,30,29,30,29,30,30],2006:[18,31,31,32,32,31,30,30,29,30,29,30,30],2007:[17,31,32,31,32,31,30,30,30,29,29,30,31],2008:[17,31,31,31,32,31,31,29,30,30,29,29,31],2009:[18,31,31,32,31,31,31,30,29,30,29,30,30],2010:[18,31,31,32,32,31,30,30,29,30,29,30,30],2011:[17,31,32,31,32,31,30,30,30,29,29,30,31],2012:[17,31,31,31,32,31,31,29,30,30,29,30,30],2013:[18,31,31,32,31,31,31,30,29,30,29,30,30],2014:[18,31,31,32,32,31,30,30,29,30,29,30,30],2015:[17,31,32,31,32,31,30,30,30,29,29,30,31],2016:[17,31,31,31,32,31,31,29,30,30,29,30,30],2017:[18,31,31,32,31,31,31,30,29,30,29,30,30],2018:[18,31,32,31,32,31,30,30,29,30,29,30,30],2019:[17,31,32,31,32,31,30,30,30,29,30,29,31],2020:[17,31,31,31,32,31,31,30,29,30,29,30,30],2021:[18,31,31,32,31,31,31,30,29,30,29,30,30],2022:[17,31,32,31,32,31,30,30,30,29,29,30,30],2023:[17,31,32,31,32,31,30,30,30,29,30,29,31],2024:[17,31,31,31,32,31,31,30,29,30,29,30,30],2025:[18,31,31,32,31,31,31,30,29,30,29,30,30],2026:[17,31,32,31,32,31,30,30,30,29,29,30,31],2027:[17,30,32,31,32,31,30,30,30,29,30,29,31],2028:[17,31,31,32,31,31,31,30,29,30,29,30,30],2029:[18,31,31,32,31,32,30,30,29,30,29,30,30],2030:[17,31,32,31,32,31,30,30,30,30,30,30,31],2031:[17,31,32,31,32,31,31,31,31,31,31,31,31],2032:[17,32,32,32,32,32,32,32,32,32,32,32,32],2033:[18,31,31,32,32,31,30,30,29,30,29,30,30],2034:[17,31,32,31,32,31,30,30,30,29,29,30,31],2035:[17,30,32,31,32,31,31,29,30,30,29,29,31],2036:[17,31,31,32,31,31,31,30,29,30,29,30,30],2037:[18,31,31,32,32,31,30,30,29,30,29,30,30],2038:[17,31,32,31,32,31,30,30,30,29,29,30,31],2039:[17,31,31,31,32,31,31,29,30,30,29,30,30],2040:[17,31,31,32,31,31,31,30,29,30,29,30,30],2041:[18,31,31,32,32,31,30,30,29,30,29,30,30],2042:[17,31,32,31,32,31,30,30,30,29,29,30,31],2043:[17,31,31,31,32,31,31,29,30,30,29,30,30],2044:[17,31,31,32,31,31,31,30,29,30,29,30,30],2045:[18,31,32,31,32,31,30,30,29,30,29,30,30],2046:[17,31,32,31,32,31,30,30,30,29,29,30,31],2047:[17,31,31,31,32,31,31,30,29,30,29,30,30],2048:[17,31,31,32,31,31,31,30,29,30,29,30,30],2049:[17,31,32,31,32,31,30,30,30,29,29,30,30],2050:[17,31,32,31,32,31,30,30,30,29,30,29,31],2051:[17,31,31,31,32,31,31,30,29,30,29,30,30],2052:[17,31,31,32,31,31,31,30,29,30,29,30,30],2053:[17,31,32,31,32,31,30,30,30,29,29,30,30],2054:[17,31,32,31,32,31,30,30,30,29,30,29,31],2055:[17,31,31,32,31,31,31,30,29,30,30,29,30],2056:[17,31,31,32,31,32,30,30,29,30,29,30,30],2057:[17,31,32,31,32,31,30,30,30,29,29,30,31],2058:[17,30,32,31,32,31,30,30,30,29,30,29,31],2059:[17,31,31,32,31,31,31,30,29,30,29,30,30],2060:[17,31,31,32,32,31,30,30,29,30,29,30,30],2061:[17,31,32,31,32,31,30,30,30,29,29,30,31],2062:[17,30,32,31,32,31,31,29,30,29,30,29,31],2063:[17,31,31,32,31,31,31,30,29,30,29,30,30],2064:[17,31,31,32,32,31,30,30,29,30,29,30,30],2065:[17,31,32,31,32,31,30,30,30,29,29,30,31],2066:[17,31,31,31,32,31,31,29,30,30,29,29,31],2067:[17,31,31,32,31,31,31,30,29,30,29,30,30],2068:[17,31,31,32,32,31,30,30,29,30,29,30,30],2069:[17,31,32,31,32,31,30,30,30,29,29,30,31],2070:[17,31,31,31,32,31,31,29,30,30,29,30,30],2071:[17,31,31,32,31,31,31,30,29,30,29,30,30],2072:[17,31,32,31,32,31,30,30,29,30,29,30,30],2073:[17,31,32,31,32,31,30,30,30,29,29,30,31],2074:[17,31,31,31,32,31,31,30,29,30,29,30,30],2075:[17,31,31,32,31,31,31,30,29,30,29,30,30],2076:[16,31,32,31,32,31,30,30,30,29,29,30,30],2077:[17,31,32,31,32,31,30,30,30,29,30,29,31],2078:[17,31,31,31,32,31,31,30,29,30,29,30,30],2079:[17,31,31,32,31,31,31,30,29,30,29,30,30],2080:[16,31,32,31,32,31,30,30,30,29,29,30,30],2081:[17,31,31,32,32,31,30,30,30,29,30,30,30],2082:[17,31,32,31,32,31,30,30,30,29,30,30,30],2083:[17,31,31,32,31,31,30,30,30,29,30,30,30],2084:[17,31,31,32,31,31,30,30,30,29,30,30,30],2085:[17,31,32,31,32,31,31,30,30,29,30,30,30],2086:[17,31,32,31,32,31,30,30,30,29,30,30,30],2087:[16,31,31,32,31,31,31,30,30,29,30,30,30],2088:[16,30,31,32,32,30,31,30,30,29,30,30,30],2089:[17,31,32,31,32,31,30,30,30,29,30,30,30],2090:[17,31,32,31,32,31,30,30,30,29,30,30,30],2091:[16,31,31,32,31,31,31,30,30,29,30,30,30],2092:[16,31,31,32,32,31,30,30,30,29,30,30,30],2093:[17,31,32,31,32,31,30,30,30,29,30,30,30],2094:[17,31,31,32,31,31,30,30,30,29,30,30,30],2095:[17,31,31,32,31,31,31,30,29,30,30,30,30],2096:[17,30,31,32,32,31,30,30,29,30,29,30,30],2097:[17,31,32,31,32,31,30,30,30,29,30,30,30],2098:[17,31,31,32,31,31,31,29,30,29,30,30,31],2099:[17,31,31,32,31,31,31,30,29,29,30,30,30],2100:[17,31,32,31,32,30,31,30,29,30,29,30,30]}}),n.calendars.nepali=i},{"../main":569,"object-assign":455}],565:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}function o(t,e){return t-e*Math.floor(t/e)}i.prototype=new n.baseCalendar,a(i.prototype,{name:"Persian",jdEpoch:1948320.5,daysPerMonth:[31,31,31,31,31,31,30,30,30,30,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Persian",epochs:["BP","AP"],monthNames:["Farvardin","Ordibehesht","Khordad","Tir","Mordad","Shahrivar","Mehr","Aban","Azar","Day","Bahman","Esfand"],monthNamesShort:["Far","Ord","Kho","Tir","Mor","Sha","Meh","Aba","Aza","Day","Bah","Esf"],dayNames:["Yekshambe","Doshambe","Seshambe","Ch\xe6harshambe","Panjshambe","Jom'e","Shambe"],dayNamesShort:["Yek","Do","Se","Ch\xe6","Panj","Jom","Sha"],dayNamesMin:["Ye","Do","Se","Ch","Pa","Jo","Sh"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return 682*((e.year()-(e.year()>0?474:473))%2820+474+38)%2816<682},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-(n.dayOfWeek()+1)%7,"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);t=a.year(),e=a.month(),r=a.day();var i=t-(t>=0?474:473),s=474+o(i,2820);return r+(e<=7?31*(e-1):30*(e-1)+6)+Math.floor((682*s-110)/2816)+365*(s-1)+1029983*Math.floor(i/2820)+this.jdEpoch-1},fromJD:function(t){var e=(t=Math.floor(t)+.5)-this.toJD(475,1,1),r=Math.floor(e/1029983),n=o(e,1029983),a=2820;if(1029982!==n){var i=Math.floor(n/366),s=o(n,366);a=Math.floor((2134*i+2816*s+2815)/1028522)+i+1}var l=a+2820*r+474;l=l<=0?l-1:l;var c=t-this.toJD(l,1,1)+1,u=c<=186?Math.ceil(c/31):Math.ceil((c-6)/30),h=t-this.toJD(l,u,1)+1;return this.newDate(l,u,h)}}),n.calendars.persian=i,n.calendars.jalali=i},{"../main":569,"object-assign":455}],566:[function(t,e,r){var n=t("../main"),a=t("object-assign"),i=n.instance();function o(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}o.prototype=new n.baseCalendar,a(o.prototype,{name:"Taiwan",jdEpoch:2419402.5,yearsOffset:1911,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Taiwan",epochs:["BROC","ROC"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:1,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t=this._t2gYear(e.year());return i.leapYear(t)},weekOfYear:function(t,e,r){var a=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t=this._t2gYear(a.year());return i.weekOfYear(t,a.month(),a.day())},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);t=this._t2gYear(a.year());return i.toJD(t,a.month(),a.day())},fromJD:function(t){var e=i.fromJD(t),r=this._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)},_g2tYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)}}),n.calendars.taiwan=o},{"../main":569,"object-assign":455}],567:[function(t,e,r){var n=t("../main"),a=t("object-assign"),i=n.instance();function o(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}o.prototype=new n.baseCalendar,a(o.prototype,{name:"Thai",jdEpoch:1523098.5,yearsOffset:543,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Thai",epochs:["BBE","BE"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t=this._t2gYear(e.year());return i.leapYear(t)},weekOfYear:function(t,e,r){var a=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t=this._t2gYear(a.year());return i.weekOfYear(t,a.month(),a.day())},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate);t=this._t2gYear(a.year());return i.toJD(t,a.month(),a.day())},fromJD:function(t){var e=i.fromJD(t),r=this._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)},_g2tYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)}}),n.calendars.thai=o},{"../main":569,"object-assign":455}],568:[function(t,e,r){var n=t("../main"),a=t("object-assign");function i(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}i.prototype=new n.baseCalendar,a(i.prototype,{name:"UmmAlQura",hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Umm al-Qura",epochs:["BH","AH"],monthNames:["Al-Muharram","Safar","Rabi' al-awwal","Rabi' Al-Thani","Jumada Al-Awwal","Jumada Al-Thani","Rajab","Sha'aban","Ramadan","Shawwal","Dhu al-Qi'dah","Dhu al-Hijjah"],monthNamesShort:["Muh","Saf","Rab1","Rab2","Jum1","Jum2","Raj","Sha'","Ram","Shaw","DhuQ","DhuH"],dayNames:["Yawm al-Ahad","Yawm al-Ithnain","Yawm al-Thal\u0101th\u0101\u2019","Yawm al-Arba\u2018\u0101\u2019","Yawm al-Kham\u012bs","Yawm al-Jum\u2018a","Yawm al-Sabt"],dayNamesMin:["Ah","Ith","Th","Ar","Kh","Ju","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!0}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return 355===this.daysInYear(e.year())},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){for(var e=0,r=1;r<=12;r++)e+=this.daysInMonth(t,r);return e},daysInMonth:function(t,e){for(var r=this._validate(t,e,this.minDay,n.local.invalidMonth).toJD()-24e5+.5,a=0,i=0;i<o.length;i++){if(o[i]>r)return o[a]-o[a-1];a++}return 30},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var a=this._validate(t,e,r,n.local.invalidDate),i=12*(a.year()-1)+a.month()-15292;return a.day()+o[i-1]-1+24e5-.5},fromJD:function(t){for(var e=t-24e5+.5,r=0,n=0;n<o.length&&!(o[n]>e);n++)r++;var a=r+15292,i=Math.floor((a-1)/12),s=i+1,l=a-12*i,c=e-o[r-1]+1;return this.newDate(s,l,c)},isValid:function(t,e,r){var a=n.baseCalendar.prototype.isValid.apply(this,arguments);return a&&(a=(t=null!=t.year?t.year:t)>=1276&&t<=1500),a},_validate:function(t,e,r,a){var i=n.baseCalendar.prototype._validate.apply(this,arguments);if(i.year<1276||i.year>1500)throw a.replace(/\{0\}/,this.local.name);return i}}),n.calendars.ummalqura=i;var o=[20,50,79,109,138,168,197,227,256,286,315,345,374,404,433,463,492,522,551,581,611,641,670,700,729,759,788,818,847,877,906,936,965,995,1024,1054,1083,1113,1142,1172,1201,1231,1260,1290,1320,1350,1379,1409,1438,1468,1497,1527,1556,1586,1615,1645,1674,1704,1733,1763,1792,1822,1851,1881,1910,1940,1969,1999,2028,2058,2087,2117,2146,2176,2205,2235,2264,2294,2323,2353,2383,2413,2442,2472,2501,2531,2560,2590,2619,2649,2678,2708,2737,2767,2796,2826,2855,2885,2914,2944,2973,3003,3032,3062,3091,3121,3150,3180,3209,3239,3268,3298,3327,3357,3386,3416,3446,3476,3505,3535,3564,3594,3623,3653,3682,3712,3741,3771,3800,3830,3859,3889,3918,3948,3977,4007,4036,4066,4095,4125,4155,4185,4214,4244,4273,4303,4332,4362,4391,4421,4450,4480,4509,4539,4568,4598,4627,4657,4686,4716,4745,4775,4804,4834,4863,4893,4922,4952,4981,5011,5040,5070,5099,5129,5158,5188,5218,5248,5277,5307,5336,5366,5395,5425,5454,5484,5513,5543,5572,5602,5631,5661,5690,5720,5749,5779,5808,5838,5867,5897,5926,5956,5985,6015,6044,6074,6103,6133,6162,6192,6221,6251,6281,6311,6340,6370,6399,6429,6458,6488,6517,6547,6576,6606,6635,6665,6694,6724,6753,6783,6812,6842,6871,6901,6930,6960,6989,7019,7048,7078,7107,7137,7166,7196,7225,7255,7284,7314,7344,7374,7403,7433,7462,7492,7521,7551,7580,7610,7639,7669,7698,7728,7757,7787,7816,7846,7875,7905,7934,7964,7993,8023,8053,8083,8112,8142,8171,8201,8230,8260,8289,8319,8348,8378,8407,8437,8466,8496,8525,8555,8584,8614,8643,8673,8702,8732,8761,8791,8821,8850,8880,8909,8938,8968,8997,9027,9056,9086,9115,9145,9175,9205,9234,9264,9293,9322,9352,9381,9410,9440,9470,9499,9529,9559,9589,9618,9648,9677,9706,9736,9765,9794,9824,9853,9883,9913,9943,9972,10002,10032,10061,10090,10120,10149,10178,10208,10237,10267,10297,10326,10356,10386,10415,10445,10474,10504,10533,10562,10592,10621,10651,10680,10710,10740,10770,10799,10829,10858,10888,10917,10947,10976,11005,11035,11064,11094,11124,11153,11183,11213,11242,11272,11301,11331,11360,11389,11419,11448,11478,11507,11537,11567,11596,11626,11655,11685,11715,11744,11774,11803,11832,11862,11891,11921,11950,11980,12010,12039,12069,12099,12128,12158,12187,12216,12246,12275,12304,12334,12364,12393,12423,12453,12483,12512,12542,12571,12600,12630,12659,12688,12718,12747,12777,12807,12837,12866,12896,12926,12955,12984,13014,13043,13072,13102,13131,13161,13191,13220,13250,13280,13310,13339,13368,13398,13427,13456,13486,13515,13545,13574,13604,13634,13664,13693,13723,13752,13782,13811,13840,13870,13899,13929,13958,13988,14018,14047,14077,14107,14136,14166,14195,14224,14254,14283,14313,14342,14372,14401,14431,14461,14490,14520,14550,14579,14609,14638,14667,14697,14726,14756,14785,14815,14844,14874,14904,14933,14963,14993,15021,15051,15081,15110,15140,15169,15199,15228,15258,15287,15317,15347,15377,15406,15436,15465,15494,15524,15553,15582,15612,15641,15671,15701,15731,15760,15790,15820,15849,15878,15908,15937,15966,15996,16025,16055,16085,16114,16144,16174,16204,16233,16262,16292,16321,16350,16380,16409,16439,16468,16498,16528,16558,16587,16617,16646,16676,16705,16734,16764,16793,16823,16852,16882,16912,16941,16971,17001,17030,17060,17089,17118,17148,17177,17207,17236,17266,17295,17325,17355,17384,17414,17444,17473,17502,17532,17561,17591,17620,17650,17679,17709,17738,17768,17798,17827,17857,17886,17916,17945,17975,18004,18034,18063,18093,18122,18152,18181,18211,18241,18270,18300,18330,18359,18388,18418,18447,18476,18506,18535,18565,18595,18625,18654,18684,18714,18743,18772,18802,18831,18860,18890,18919,18949,18979,19008,19038,19068,19098,19127,19156,19186,19215,19244,19274,19303,19333,19362,19392,19422,19452,19481,19511,19540,19570,19599,19628,19658,19687,19717,19746,19776,19806,19836,19865,19895,19924,19954,19983,20012,20042,20071,20101,20130,20160,20190,20219,20249,20279,20308,20338,20367,20396,20426,20455,20485,20514,20544,20573,20603,20633,20662,20692,20721,20751,20780,20810,20839,20869,20898,20928,20957,20987,21016,21046,21076,21105,21135,21164,21194,21223,21253,21282,21312,21341,21371,21400,21430,21459,21489,21519,21548,21578,21607,21637,21666,21696,21725,21754,21784,21813,21843,21873,21902,21932,21962,21991,22021,22050,22080,22109,22138,22168,22197,22227,22256,22286,22316,22346,22375,22405,22434,22464,22493,22522,22552,22581,22611,22640,22670,22700,22730,22759,22789,22818,22848,22877,22906,22936,22965,22994,23024,23054,23083,23113,23143,23173,23202,23232,23261,23290,23320,23349,23379,23408,23438,23467,23497,23527,23556,23586,23616,23645,23674,23704,23733,23763,23792,23822,23851,23881,23910,23940,23970,23999,24029,24058,24088,24117,24147,24176,24206,24235,24265,24294,24324,24353,24383,24413,24442,24472,24501,24531,24560,24590,24619,24648,24678,24707,24737,24767,24796,24826,24856,24885,24915,24944,24974,25003,25032,25062,25091,25121,25150,25180,25210,25240,25269,25299,25328,25358,25387,25416,25446,25475,25505,25534,25564,25594,25624,25653,25683,25712,25742,25771,25800,25830,25859,25888,25918,25948,25977,26007,26037,26067,26096,26126,26155,26184,26214,26243,26272,26302,26332,26361,26391,26421,26451,26480,26510,26539,26568,26598,26627,26656,26686,26715,26745,26775,26805,26834,26864,26893,26923,26952,26982,27011,27041,27070,27099,27129,27159,27188,27218,27248,27277,27307,27336,27366,27395,27425,27454,27484,27513,27542,27572,27602,27631,27661,27691,27720,27750,27779,27809,27838,27868,27897,27926,27956,27985,28015,28045,28074,28104,28134,28163,28193,28222,28252,28281,28310,28340,28369,28399,28428,28458,28488,28517,28547,28577,28607,28636,28665,28695,28724,28754,28783,28813,28843,28872,28901,28931,28960,28990,29019,29049,29078,29108,29137,29167,29196,29226,29255,29285,29315,29345,29375,29404,29434,29463,29492,29522,29551,29580,29610,29640,29669,29699,29729,29759,29788,29818,29847,29876,29906,29935,29964,29994,30023,30053,30082,30112,30141,30171,30200,30230,30259,30289,30318,30348,30378,30408,30437,30467,30496,30526,30555,30585,30614,30644,30673,30703,30732,30762,30791,30821,30850,30880,30909,30939,30968,30998,31027,31057,31086,31116,31145,31175,31204,31234,31263,31293,31322,31352,31381,31411,31441,31471,31500,31530,31559,31589,31618,31648,31676,31706,31736,31766,31795,31825,31854,31884,31913,31943,31972,32002,32031,32061,32090,32120,32150,32180,32209,32239,32268,32298,32327,32357,32386,32416,32445,32475,32504,32534,32563,32593,32622,32652,32681,32711,32740,32770,32799,32829,32858,32888,32917,32947,32976,33006,33035,33065,33094,33124,33153,33183,33213,33243,33272,33302,33331,33361,33390,33420,33450,33479,33509,33539,33568,33598,33627,33657,33686,33716,33745,33775,33804,33834,33863,33893,33922,33952,33981,34011,34040,34069,34099,34128,34158,34187,34217,34247,34277,34306,34336,34365,34395,34424,34454,34483,34512,34542,34571,34601,34631,34660,34690,34719,34749,34778,34808,34837,34867,34896,34926,34955,34985,35015,35044,35074,35103,35133,35162,35192,35222,35251,35280,35310,35340,35370,35399,35429,35458,35488,35517,35547,35576,35605,35635,35665,35694,35723,35753,35782,35811,35841,35871,35901,35930,35960,35989,36019,36048,36078,36107,36136,36166,36195,36225,36254,36284,36314,36343,36373,36403,36433,36462,36492,36521,36551,36580,36610,36639,36669,36698,36728,36757,36786,36816,36845,36875,36904,36934,36963,36993,37022,37052,37081,37111,37141,37170,37200,37229,37259,37288,37318,37347,37377,37406,37436,37465,37495,37524,37554,37584,37613,37643,37672,37701,37731,37760,37790,37819,37849,37878,37908,37938,37967,37997,38027,38056,38085,38115,38144,38174,38203,38233,38262,38292,38322,38351,38381,38410,38440,38469,38499,38528,38558,38587,38617,38646,38676,38705,38735,38764,38794,38823,38853,38882,38912,38941,38971,39001,39030,39059,39089,39118,39148,39178,39208,39237,39267,39297,39326,39355,39385,39414,39444,39473,39503,39532,39562,39592,39621,39650,39680,39709,39739,39768,39798,39827,39857,39886,39916,39946,39975,40005,40035,40064,40094,40123,40153,40182,40212,40241,40271,40300,40330,40359,40389,40418,40448,40477,40507,40536,40566,40595,40625,40655,40685,40714,40744,40773,40803,40832,40862,40892,40921,40951,40980,41009,41039,41068,41098,41127,41157,41186,41216,41245,41275,41304,41334,41364,41393,41422,41452,41481,41511,41540,41570,41599,41629,41658,41688,41718,41748,41777,41807,41836,41865,41894,41924,41953,41983,42012,42042,42072,42102,42131,42161,42190,42220,42249,42279,42308,42337,42367,42397,42426,42456,42485,42515,42545,42574,42604,42633,42662,42692,42721,42751,42780,42810,42839,42869,42899,42929,42958,42988,43017,43046,43076,43105,43135,43164,43194,43223,43253,43283,43312,43342,43371,43401,43430,43460,43489,43519,43548,43578,43607,43637,43666,43696,43726,43755,43785,43814,43844,43873,43903,43932,43962,43991,44021,44050,44080,44109,44139,44169,44198,44228,44258,44287,44317,44346,44375,44405,44434,44464,44493,44523,44553,44582,44612,44641,44671,44700,44730,44759,44788,44818,44847,44877,44906,44936,44966,44996,45025,45055,45084,45114,45143,45172,45202,45231,45261,45290,45320,45350,45380,45409,45439,45468,45498,45527,45556,45586,45615,45644,45674,45704,45733,45763,45793,45823,45852,45882,45911,45940,45970,45999,46028,46058,46088,46117,46147,46177,46206,46236,46265,46295,46324,46354,46383,46413,46442,46472,46501,46531,46560,46590,46620,46649,46679,46708,46738,46767,46797,46826,46856,46885,46915,46944,46974,47003,47033,47063,47092,47122,47151,47181,47210,47240,47269,47298,47328,47357,47387,47417,47446,47476,47506,47535,47565,47594,47624,47653,47682,47712,47741,47771,47800,47830,47860,47890,47919,47949,47978,48008,48037,48066,48096,48125,48155,48184,48214,48244,48273,48303,48333,48362,48392,48421,48450,48480,48509,48538,48568,48598,48627,48657,48687,48717,48746,48776,48805,48834,48864,48893,48922,48952,48982,49011,49041,49071,49100,49130,49160,49189,49218,49248,49277,49306,49336,49365,49395,49425,49455,49484,49514,49543,49573,49602,49632,49661,49690,49720,49749,49779,49809,49838,49868,49898,49927,49957,49986,50016,50045,50075,50104,50133,50163,50192,50222,50252,50281,50311,50340,50370,50400,50429,50459,50488,50518,50547,50576,50606,50635,50665,50694,50724,50754,50784,50813,50843,50872,50902,50931,50960,50990,51019,51049,51078,51108,51138,51167,51197,51227,51256,51286,51315,51345,51374,51403,51433,51462,51492,51522,51552,51582,51611,51641,51670,51699,51729,51758,51787,51816,51846,51876,51906,51936,51965,51995,52025,52054,52083,52113,52142,52171,52200,52230,52260,52290,52319,52349,52379,52408,52438,52467,52497,52526,52555,52585,52614,52644,52673,52703,52733,52762,52792,52822,52851,52881,52910,52939,52969,52998,53028,53057,53087,53116,53146,53176,53205,53235,53264,53294,53324,53353,53383,53412,53441,53471,53500,53530,53559,53589,53619,53648,53678,53708,53737,53767,53796,53825,53855,53884,53913,53943,53973,54003,54032,54062,54092,54121,54151,54180,54209,54239,54268,54297,54327,54357,54387,54416,54446,54476,54505,54535,54564,54593,54623,54652,54681,54711,54741,54770,54800,54830,54859,54889,54919,54948,54977,55007,55036,55066,55095,55125,55154,55184,55213,55243,55273,55302,55332,55361,55391,55420,55450,55479,55508,55538,55567,55597,55627,55657,55686,55716,55745,55775,55804,55834,55863,55892,55922,55951,55981,56011,56040,56070,56100,56129,56159,56188,56218,56247,56276,56306,56335,56365,56394,56424,56454,56483,56513,56543,56572,56601,56631,56660,56690,56719,56749,56778,56808,56837,56867,56897,56926,56956,56985,57015,57044,57074,57103,57133,57162,57192,57221,57251,57280,57310,57340,57369,57399,57429,57458,57487,57517,57546,57576,57605,57634,57664,57694,57723,57753,57783,57813,57842,57871,57901,57930,57959,57989,58018,58048,58077,58107,58137,58167,58196,58226,58255,58285,58314,58343,58373,58402,58432,58461,58491,58521,58551,58580,58610,58639,58669,58698,58727,58757,58786,58816,58845,58875,58905,58934,58964,58994,59023,59053,59082,59111,59141,59170,59200,59229,59259,59288,59318,59348,59377,59407,59436,59466,59495,59525,59554,59584,59613,59643,59672,59702,59731,59761,59791,59820,59850,59879,59909,59939,59968,59997,60027,60056,60086,60115,60145,60174,60204,60234,60264,60293,60323,60352,60381,60411,60440,60469,60499,60528,60558,60588,60618,60648,60677,60707,60736,60765,60795,60824,60853,60883,60912,60942,60972,61002,61031,61061,61090,61120,61149,61179,61208,61237,61267,61296,61326,61356,61385,61415,61445,61474,61504,61533,61563,61592,61621,61651,61680,61710,61739,61769,61799,61828,61858,61888,61917,61947,61976,62006,62035,62064,62094,62123,62153,62182,62212,62242,62271,62301,62331,62360,62390,62419,62448,62478,62507,62537,62566,62596,62625,62655,62685,62715,62744,62774,62803,62832,62862,62891,62921,62950,62980,63009,63039,63069,63099,63128,63157,63187,63216,63246,63275,63305,63334,63363,63393,63423,63453,63482,63512,63541,63571,63600,63630,63659,63689,63718,63747,63777,63807,63836,63866,63895,63925,63955,63984,64014,64043,64073,64102,64131,64161,64190,64220,64249,64279,64309,64339,64368,64398,64427,64457,64486,64515,64545,64574,64603,64633,64663,64692,64722,64752,64782,64811,64841,64870,64899,64929,64958,64987,65017,65047,65076,65106,65136,65166,65195,65225,65254,65283,65313,65342,65371,65401,65431,65460,65490,65520,65549,65579,65608,65638,65667,65697,65726,65755,65785,65815,65844,65874,65903,65933,65963,65992,66022,66051,66081,66110,66140,66169,66199,66228,66258,66287,66317,66346,66376,66405,66435,66465,66494,66524,66553,66583,66612,66641,66671,66700,66730,66760,66789,66819,66849,66878,66908,66937,66967,66996,67025,67055,67084,67114,67143,67173,67203,67233,67262,67292,67321,67351,67380,67409,67439,67468,67497,67527,67557,67587,67617,67646,67676,67705,67735,67764,67793,67823,67852,67882,67911,67941,67971,68e3,68030,68060,68089,68119,68148,68177,68207,68236,68266,68295,68325,68354,68384,68414,68443,68473,68502,68532,68561,68591,68620,68650,68679,68708,68738,68768,68797,68827,68857,68886,68916,68946,68975,69004,69034,69063,69092,69122,69152,69181,69211,69240,69270,69300,69330,69359,69388,69418,69447,69476,69506,69535,69565,69595,69624,69654,69684,69713,69743,69772,69802,69831,69861,69890,69919,69949,69978,70008,70038,70067,70097,70126,70156,70186,70215,70245,70274,70303,70333,70362,70392,70421,70451,70481,70510,70540,70570,70599,70629,70658,70687,70717,70746,70776,70805,70835,70864,70894,70924,70954,70983,71013,71042,71071,71101,71130,71159,71189,71218,71248,71278,71308,71337,71367,71397,71426,71455,71485,71514,71543,71573,71602,71632,71662,71691,71721,71751,71781,71810,71839,71869,71898,71927,71957,71986,72016,72046,72075,72105,72135,72164,72194,72223,72253,72282,72311,72341,72370,72400,72429,72459,72489,72518,72548,72577,72607,72637,72666,72695,72725,72754,72784,72813,72843,72872,72902,72931,72961,72991,73020,73050,73080,73109,73139,73168,73197,73227,73256,73286,73315,73345,73375,73404,73434,73464,73493,73523,73552,73581,73611,73640,73669,73699,73729,73758,73788,73818,73848,73877,73907,73936,73965,73995,74024,74053,74083,74113,74142,74172,74202,74231,74261,74291,74320,74349,74379,74408,74437,74467,74497,74526,74556,74586,74615,74645,74675,74704,74733,74763,74792,74822,74851,74881,74910,74940,74969,74999,75029,75058,75088,75117,75147,75176,75206,75235,75264,75294,75323,75353,75383,75412,75442,75472,75501,75531,75560,75590,75619,75648,75678,75707,75737,75766,75796,75826,75856,75885,75915,75944,75974,76003,76032,76062,76091,76121,76150,76180,76210,76239,76269,76299,76328,76358,76387,76416,76446,76475,76505,76534,76564,76593,76623,76653,76682,76712,76741,76771,76801,76830,76859,76889,76918,76948,76977,77007,77036,77066,77096,77125,77155,77185,77214,77243,77273,77302,77332,77361,77390,77420,77450,77479,77509,77539,77569,77598,77627,77657,77686,77715,77745,77774,77804,77833,77863,77893,77923,77952,77982,78011,78041,78070,78099,78129,78158,78188,78217,78247,78277,78307,78336,78366,78395,78425,78454,78483,78513,78542,78572,78601,78631,78661,78690,78720,78750,78779,78808,78838,78867,78897,78926,78956,78985,79015,79044,79074,79104,79133,79163,79192,79222,79251,79281,79310,79340,79369,79399,79428,79458,79487,79517,79546,79576,79606,79635,79665,79695,79724,79753,79783,79812,79841,79871,79900,79930,79960,79990]},{"../main":569,"object-assign":455}],569:[function(t,e,r){var n=t("object-assign");function a(){this.regionalOptions=[],this.regionalOptions[""]={invalidCalendar:"Calendar {0} not found",invalidDate:"Invalid {0} date",invalidMonth:"Invalid {0} month",invalidYear:"Invalid {0} year",differentCalendars:"Cannot mix {0} and {1} dates"},this.local=this.regionalOptions[""],this.calendars={},this._localCals={}}function i(t,e,r,n){if(this._calendar=t,this._year=e,this._month=r,this._day=n,0===this._calendar._validateLevel&&!this._calendar.isValid(this._year,this._month,this._day))throw(c.local.invalidDate||c.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name)}function o(t,e){return"000000".substring(0,e-(t=""+t).length)+t}function s(){this.shortYearCutoff="+10"}function l(t){this.local=this.regionalOptions[t]||this.regionalOptions[""]}n(a.prototype,{instance:function(t,e){t=(t||"gregorian").toLowerCase(),e=e||"";var r=this._localCals[t+"-"+e];if(!r&&this.calendars[t]&&(r=new this.calendars[t](e),this._localCals[t+"-"+e]=r),!r)throw(this.local.invalidCalendar||this.regionalOptions[""].invalidCalendar).replace(/\{0\}/,t);return r},newDate:function(t,e,r,n,a){return(n=(null!=t&&t.year?t.calendar():"string"==typeof n?this.instance(n,a):n)||this.instance()).newDate(t,e,r)},substituteDigits:function(t){return function(e){return(e+"").replace(/[0-9]/g,function(e){return t[e]})}},substituteChineseDigits:function(t,e){return function(r){for(var n="",a=0;r>0;){var i=r%10;n=(0===i?"":t[i]+e[a])+n,a++,r=Math.floor(r/10)}return 0===n.indexOf(t[1]+e[1])&&(n=n.substr(1)),n||t[0]}}}),n(i.prototype,{newDate:function(t,e,r){return this._calendar.newDate(null==t?this:t,e,r)},year:function(t){return 0===arguments.length?this._year:this.set(t,"y")},month:function(t){return 0===arguments.length?this._month:this.set(t,"m")},day:function(t){return 0===arguments.length?this._day:this.set(t,"d")},date:function(t,e,r){if(!this._calendar.isValid(t,e,r))throw(c.local.invalidDate||c.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name);return this._year=t,this._month=e,this._day=r,this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(t,e){return this._calendar.add(this,t,e)},set:function(t,e){return this._calendar.set(this,t,e)},compareTo:function(t){if(this._calendar.name!==t._calendar.name)throw(c.local.differentCalendars||c.regionalOptions[""].differentCalendars).replace(/\{0\}/,this._calendar.local.name).replace(/\{1\}/,t._calendar.local.name);var e=this._year!==t._year?this._year-t._year:this._month!==t._month?this.monthOfYear()-t.monthOfYear():this._day-t._day;return 0===e?0:e<0?-1:1},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(t){return this._calendar.fromJD(t)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(t){return this._calendar.fromJSDate(t)},toString:function(){return(this.year()<0?"-":"")+o(Math.abs(this.year()),4)+"-"+o(this.month(),2)+"-"+o(this.day(),2)}}),n(s.prototype,{_validateLevel:0,newDate:function(t,e,r){return null==t?this.today():(t.year&&(this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[""].invalidDate),r=t.day(),e=t.month(),t=t.year()),new i(this,t,e,r))},today:function(){return this.fromJSDate(new Date)},epoch:function(t){return this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[""].invalidYear).year()<0?this.local.epochs[0]:this.local.epochs[1]},formatYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[""].invalidYear);return(e.year()<0?"-":"")+o(Math.abs(e.year()),4)},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[""].invalidYear),12},monthOfYear:function(t,e){var r=this._validate(t,e,this.minDay,c.local.invalidMonth||c.regionalOptions[""].invalidMonth);return(r.month()+this.monthsInYear(r)-this.firstMonth)%this.monthsInYear(r)+this.minMonth},fromMonthOfYear:function(t,e){var r=(e+this.firstMonth-2*this.minMonth)%this.monthsInYear(t)+this.minMonth;return this._validate(t,r,this.minDay,c.local.invalidMonth||c.regionalOptions[""].invalidMonth),r},daysInYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[""].invalidYear);return this.leapYear(e)?366:365},dayOfYear:function(t,e,r){var n=this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[""].invalidDate);return n.toJD()-this.newDate(n.year(),this.fromMonthOfYear(n.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(t,e,r){var n=this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[""].invalidDate);return(Math.floor(this.toJD(n))+2)%this.daysInWeek()},extraInfo:function(t,e,r){return this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[""].invalidDate),{}},add:function(t,e,r){return this._validate(t,this.minMonth,this.minDay,c.local.invalidDate||c.regionalOptions[""].invalidDate),this._correctAdd(t,this._add(t,e,r),e,r)},_add:function(t,e,r){if(this._validateLevel++,"d"===r||"w"===r){var n=t.toJD()+e*("w"===r?this.daysInWeek():1),a=t.calendar().fromJD(n);return this._validateLevel--,[a.year(),a.month(),a.day()]}try{var i=t.year()+("y"===r?e:0),o=t.monthOfYear()+("m"===r?e:0);a=t.day();"y"===r?(t.month()!==this.fromMonthOfYear(i,o)&&(o=this.newDate(i,t.month(),this.minDay).monthOfYear()),o=Math.min(o,this.monthsInYear(i)),a=Math.min(a,this.daysInMonth(i,this.fromMonthOfYear(i,o)))):"m"===r&&(!function(t){for(;o<t.minMonth;)i--,o+=t.monthsInYear(i);for(var e=t.monthsInYear(i);o>e-1+t.minMonth;)i++,o-=e,e=t.monthsInYear(i)}(this),a=Math.min(a,this.daysInMonth(i,this.fromMonthOfYear(i,o))));var s=[i,this.fromMonthOfYear(i,o),a];return this._validateLevel--,s}catch(t){throw this._validateLevel--,t}},_correctAdd:function(t,e,r,n){if(!(this.hasYearZero||"y"!==n&&"m"!==n||0!==e[0]&&t.year()>0==e[0]>0)){var a={y:[1,1,"y"],m:[1,this.monthsInYear(-1),"m"],w:[this.daysInWeek(),this.daysInYear(-1),"d"],d:[1,this.daysInYear(-1),"d"]}[n],i=r<0?-1:1;e=this._add(t,r*a[0]+i*a[1],a[2])}return t.date(e[0],e[1],e[2])},set:function(t,e,r){this._validate(t,this.minMonth,this.minDay,c.local.invalidDate||c.regionalOptions[""].invalidDate);var n="y"===r?e:t.year(),a="m"===r?e:t.month(),i="d"===r?e:t.day();return"y"!==r&&"m"!==r||(i=Math.min(i,this.daysInMonth(n,a))),t.date(n,a,i)},isValid:function(t,e,r){this._validateLevel++;var n=this.hasYearZero||0!==t;if(n){var a=this.newDate(t,e,this.minDay);n=e>=this.minMonth&&e-this.minMonth<this.monthsInYear(a)&&r>=this.minDay&&r-this.minDay<this.daysInMonth(a)}return this._validateLevel--,n},toJSDate:function(t,e,r){var n=this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[""].invalidDate);return c.instance().fromJD(this.toJD(n)).toJSDate()},fromJSDate:function(t){return this.fromJD(c.instance().fromJSDate(t).toJD())},_validate:function(t,e,r,n){if(t.year){if(0===this._validateLevel&&this.name!==t.calendar().name)throw(c.local.differentCalendars||c.regionalOptions[""].differentCalendars).replace(/\{0\}/,this.local.name).replace(/\{1\}/,t.calendar().local.name);return t}try{if(this._validateLevel++,1===this._validateLevel&&!this.isValid(t,e,r))throw n.replace(/\{0\}/,this.local.name);var a=this.newDate(t,e,r);return this._validateLevel--,a}catch(t){throw this._validateLevel--,t}}}),l.prototype=new s,n(l.prototype,{name:"Gregorian",jdEpoch:1721425.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Gregorian",epochs:["BCE","CE"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"mm/dd/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[""].invalidYear);return(t=e.year()+(e.year()<0?1:0))%4==0&&(t%100!=0||t%400==0)},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,c.local.invalidMonth||c.regionalOptions[""].invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var n=this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[""].invalidDate);t=n.year(),e=n.month(),r=n.day(),t<0&&t++,e<3&&(e+=12,t--);var a=Math.floor(t/100),i=2-a+Math.floor(a/4);return Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r+i-1524.5},fromJD:function(t){var e=Math.floor(t+.5),r=Math.floor((e-1867216.25)/36524.25),n=(r=e+1+r-Math.floor(r/4))+1524,a=Math.floor((n-122.1)/365.25),i=Math.floor(365.25*a),o=Math.floor((n-i)/30.6001),s=n-i-Math.floor(30.6001*o),l=o-(o>13.5?13:1),c=a-(l>2.5?4716:4715);return c<=0&&c--,this.newDate(c,l,s)},toJSDate:function(t,e,r){var n=this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[""].invalidDate),a=new Date(n.year(),n.month()-1,n.day());return a.setHours(0),a.setMinutes(0),a.setSeconds(0),a.setMilliseconds(0),a.setHours(a.getHours()>12?a.getHours()+2:0),a},fromJSDate:function(t){return this.newDate(t.getFullYear(),t.getMonth()+1,t.getDate())}});var c=e.exports=new a;c.cdate=i,c.baseCalendar=s,c.calendars.gregorian=l},{"object-assign":455}],570:[function(t,e,r){var n=t("object-assign"),a=t("./main");n(a.regionalOptions[""],{invalidArguments:"Invalid arguments",invalidFormat:"Cannot format a date from another calendar",missingNumberAt:"Missing number at position {0}",unknownNameAt:"Unknown name at position {0}",unexpectedLiteralAt:"Unexpected literal at position {0}",unexpectedText:"Additional text found at end"}),a.local=a.regionalOptions[""],n(a.cdate.prototype,{formatDate:function(t,e){return"string"!=typeof t&&(e=t,t=""),this._calendar.formatDate(t||"",this,e)}}),n(a.baseCalendar.prototype,{UNIX_EPOCH:a.instance().newDate(1970,1,1).toJD(),SECS_PER_DAY:86400,TICKS_EPOCH:a.instance().jdEpoch,TICKS_PER_DAY:864e9,ATOM:"yyyy-mm-dd",COOKIE:"D, dd M yyyy",FULL:"DD, MM d, yyyy",ISO_8601:"yyyy-mm-dd",JULIAN:"J",RFC_822:"D, d M yy",RFC_850:"DD, dd-M-yy",RFC_1036:"D, d M yy",RFC_1123:"D, d M yyyy",RFC_2822:"D, d M yyyy",RSS:"D, d M yy",TICKS:"!",TIMESTAMP:"@",W3C:"yyyy-mm-dd",formatDate:function(t,e,r){if("string"!=typeof t&&(r=e,e=t,t=""),!e)return"";if(e.calendar()!==this)throw a.local.invalidFormat||a.regionalOptions[""].invalidFormat;t=t||this.local.dateFormat;for(var n,i,o,s,l=(r=r||{}).dayNamesShort||this.local.dayNamesShort,c=r.dayNames||this.local.dayNames,u=r.monthNumbers||this.local.monthNumbers,h=r.monthNamesShort||this.local.monthNamesShort,f=r.monthNames||this.local.monthNames,p=(r.calculateWeek||this.local.calculateWeek,function(e,r){for(var n=1;w+n<t.length&&t.charAt(w+n)===e;)n++;return w+=n-1,Math.floor(n/(r||1))>1}),d=function(t,e,r,n){var a=""+e;if(p(t,n))for(;a.length<r;)a="0"+a;return a},g=this,v=function(t){return"function"==typeof u?u.call(g,t,p("m")):x(d("m",t.month(),2))},m=function(t,e){return e?"function"==typeof f?f.call(g,t):f[t.month()-g.minMonth]:"function"==typeof h?h.call(g,t):h[t.month()-g.minMonth]},y=this.local.digits,x=function(t){return r.localNumbers&&y?y(t):t},b="",_=!1,w=0;w<t.length;w++)if(_)"'"!==t.charAt(w)||p("'")?b+=t.charAt(w):_=!1;else switch(t.charAt(w)){case"d":b+=x(d("d",e.day(),2));break;case"D":b+=(n="D",i=e.dayOfWeek(),o=l,s=c,p(n)?s[i]:o[i]);break;case"o":b+=d("o",e.dayOfYear(),3);break;case"w":b+=d("w",e.weekOfYear(),2);break;case"m":b+=v(e);break;case"M":b+=m(e,p("M"));break;case"y":b+=p("y",2)?e.year():(e.year()%100<10?"0":"")+e.year()%100;break;case"Y":p("Y",2),b+=e.formatYear();break;case"J":b+=e.toJD();break;case"@":b+=(e.toJD()-this.UNIX_EPOCH)*this.SECS_PER_DAY;break;case"!":b+=(e.toJD()-this.TICKS_EPOCH)*this.TICKS_PER_DAY;break;case"'":p("'")?b+="'":_=!0;break;default:b+=t.charAt(w)}return b},parseDate:function(t,e,r){if(null==e)throw a.local.invalidArguments||a.regionalOptions[""].invalidArguments;if(""===(e="object"==typeof e?e.toString():e+""))return null;t=t||this.local.dateFormat;var n=(r=r||{}).shortYearCutoff||this.shortYearCutoff;n="string"!=typeof n?n:this.today().year()%100+parseInt(n,10);for(var i=r.dayNamesShort||this.local.dayNamesShort,o=r.dayNames||this.local.dayNames,s=r.parseMonth||this.local.parseMonth,l=r.monthNumbers||this.local.monthNumbers,c=r.monthNamesShort||this.local.monthNamesShort,u=r.monthNames||this.local.monthNames,h=-1,f=-1,p=-1,d=-1,g=-1,v=!1,m=!1,y=function(e,r){for(var n=1;A+n<t.length&&t.charAt(A+n)===e;)n++;return A+=n-1,Math.floor(n/(r||1))>1},x=function(t,r){var n=y(t,r),i=[2,3,n?4:2,n?4:2,10,11,20]["oyYJ@!".indexOf(t)+1],o=new RegExp("^-?\\d{1,"+i+"}"),s=e.substring(M).match(o);if(!s)throw(a.local.missingNumberAt||a.regionalOptions[""].missingNumberAt).replace(/\{0\}/,M);return M+=s[0].length,parseInt(s[0],10)},b=this,_=function(){if("function"==typeof l){y("m");var t=l.call(b,e.substring(M));return M+=t.length,t}return x("m")},w=function(t,r,n,i){for(var o=y(t,i)?n:r,s=0;s<o.length;s++)if(e.substr(M,o[s].length).toLowerCase()===o[s].toLowerCase())return M+=o[s].length,s+b.minMonth;throw(a.local.unknownNameAt||a.regionalOptions[""].unknownNameAt).replace(/\{0\}/,M)},k=function(){if("function"==typeof u){var t=y("M")?u.call(b,e.substring(M)):c.call(b,e.substring(M));return M+=t.length,t}return w("M",c,u)},T=function(){if(e.charAt(M)!==t.charAt(A))throw(a.local.unexpectedLiteralAt||a.regionalOptions[""].unexpectedLiteralAt).replace(/\{0\}/,M);M++},M=0,A=0;A<t.length;A++)if(m)"'"!==t.charAt(A)||y("'")?T():m=!1;else switch(t.charAt(A)){case"d":d=x("d");break;case"D":w("D",i,o);break;case"o":g=x("o");break;case"w":x("w");break;case"m":p=_();break;case"M":p=k();break;case"y":var S=A;v=!y("y",2),A=S,f=x("y",2);break;case"Y":f=x("Y",2);break;case"J":h=x("J")+.5,"."===e.charAt(M)&&(M++,x("J"));break;case"@":h=x("@")/this.SECS_PER_DAY+this.UNIX_EPOCH;break;case"!":h=x("!")/this.TICKS_PER_DAY+this.TICKS_EPOCH;break;case"*":M=e.length;break;case"'":y("'")?T():m=!0;break;default:T()}if(M<e.length)throw a.local.unexpectedText||a.regionalOptions[""].unexpectedText;if(-1===f?f=this.today().year():f<100&&v&&(f+=-1===n?1900:this.today().year()-this.today().year()%100-(f<=n?0:100)),"string"==typeof p&&(p=s.call(this,f,p)),g>-1){p=1,d=g;for(var E=this.daysInMonth(f,p);d>E;E=this.daysInMonth(f,p))p++,d-=E}return h>-1?this.fromJD(h):this.newDate(f,p,d)},determineDate:function(t,e,r,n,a){r&&"object"!=typeof r&&(a=n,n=r,r=null),"string"!=typeof n&&(a=n,n="");var i=this;return e=e?e.newDate():null,t=null==t?e:"string"==typeof t?function(t){try{return i.parseDate(n,t,a)}catch(t){}for(var e=((t=t.toLowerCase()).match(/^c/)&&r?r.newDate():null)||i.today(),o=/([+-]?[0-9]+)\s*(d|w|m|y)?/g,s=o.exec(t);s;)e.add(parseInt(s[1],10),s[2]||"d"),s=o.exec(t);return e}(t):"number"==typeof t?isNaN(t)||t===1/0||t===-1/0?e:i.today().add(t,"d"):i.newDate(t)}})},{"./main":569,"object-assign":455}],571:[function(t,e,r){e.exports=t("cwise-compiler")({args:["array",{offset:[1],array:0},"scalar","scalar","index"],pre:{body:"{}",args:[],thisVars:[],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},body:{body:"{\n var _inline_1_da = _inline_1_arg0_ - _inline_1_arg3_\n var _inline_1_db = _inline_1_arg1_ - _inline_1_arg3_\n if((_inline_1_da >= 0) !== (_inline_1_db >= 0)) {\n _inline_1_arg2_.push(_inline_1_arg4_[0] + 0.5 + 0.5 * (_inline_1_da + _inline_1_db) / (_inline_1_da - _inline_1_db))\n }\n }",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg3_",lvalue:!1,rvalue:!0,count:2},{name:"_inline_1_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:[],localVars:["_inline_1_da","_inline_1_db"]},funcName:"zeroCrossings"})},{"cwise-compiler":148}],572:[function(t,e,r){"use strict";e.exports=function(t,e){var r=[];return e=+e||0,n(t.hi(t.shape[0]-1),r,e),r};var n=t("./lib/zc-core")},{"./lib/zc-core":571}],573:[function(t,e,r){"use strict";e.exports=[{path:"",backoff:0},{path:"M-2.4,-3V3L0.6,0Z",backoff:.6},{path:"M-3.7,-2.5V2.5L1.3,0Z",backoff:1.3},{path:"M-4.45,-3L-1.65,-0.2V0.2L-4.45,3L1.55,0Z",backoff:1.55},{path:"M-2.2,-2.2L-0.2,-0.2V0.2L-2.2,2.2L-1.4,3L1.6,0L-1.4,-3Z",backoff:1.6},{path:"M-4.4,-2.1L-0.6,-0.2V0.2L-4.4,2.1L-4,3L2,0L-4,-3Z",backoff:2},{path:"M2,0A2,2 0 1,1 0,-2A2,2 0 0,1 2,0Z",backoff:0,noRotate:!0},{path:"M2,2V-2H-2V2Z",backoff:0,noRotate:!0}]},{}],574:[function(t,e,r){"use strict";var n=t("./arrow_paths"),a=t("../../plots/font_attributes"),i=t("../../plots/cartesian/constants"),o=t("../../plot_api/plot_template").templatedArray;e.exports=o("annotation",{visible:{valType:"boolean",dflt:!0,editType:"calc+arraydraw"},text:{valType:"string",editType:"calc+arraydraw"},textangle:{valType:"angle",dflt:0,editType:"calc+arraydraw"},font:a({editType:"calc+arraydraw",colorEditType:"arraydraw"}),width:{valType:"number",min:1,dflt:null,editType:"calc+arraydraw"},height:{valType:"number",min:1,dflt:null,editType:"calc+arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},align:{valType:"enumerated",values:["left","center","right"],dflt:"center",editType:"arraydraw"},valign:{valType:"enumerated",values:["top","middle","bottom"],dflt:"middle",editType:"arraydraw"},bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},bordercolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},borderpad:{valType:"number",min:0,dflt:1,editType:"calc+arraydraw"},borderwidth:{valType:"number",min:0,dflt:1,editType:"calc+arraydraw"},showarrow:{valType:"boolean",dflt:!0,editType:"calc+arraydraw"},arrowcolor:{valType:"color",editType:"arraydraw"},arrowhead:{valType:"integer",min:0,max:n.length,dflt:1,editType:"arraydraw"},startarrowhead:{valType:"integer",min:0,max:n.length,dflt:1,editType:"arraydraw"},arrowside:{valType:"flaglist",flags:["end","start"],extras:["none"],dflt:"end",editType:"arraydraw"},arrowsize:{valType:"number",min:.3,dflt:1,editType:"calc+arraydraw"},startarrowsize:{valType:"number",min:.3,dflt:1,editType:"calc+arraydraw"},arrowwidth:{valType:"number",min:.1,editType:"calc+arraydraw"},standoff:{valType:"number",min:0,dflt:0,editType:"calc+arraydraw"},startstandoff:{valType:"number",min:0,dflt:0,editType:"calc+arraydraw"},ax:{valType:"any",editType:"calc+arraydraw"},ay:{valType:"any",editType:"calc+arraydraw"},axref:{valType:"enumerated",dflt:"pixel",values:["pixel",i.idRegex.x.toString()],editType:"calc"},ayref:{valType:"enumerated",dflt:"pixel",values:["pixel",i.idRegex.y.toString()],editType:"calc"},xref:{valType:"enumerated",values:["paper",i.idRegex.x.toString()],editType:"calc"},x:{valType:"any",editType:"calc+arraydraw"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"auto",editType:"calc+arraydraw"},xshift:{valType:"number",dflt:0,editType:"calc+arraydraw"},yref:{valType:"enumerated",values:["paper",i.idRegex.y.toString()],editType:"calc"},y:{valType:"any",editType:"calc+arraydraw"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"auto",editType:"calc+arraydraw"},yshift:{valType:"number",dflt:0,editType:"calc+arraydraw"},clicktoshow:{valType:"enumerated",values:[!1,"onoff","onout"],dflt:!1,editType:"arraydraw"},xclick:{valType:"any",editType:"arraydraw"},yclick:{valType:"any",editType:"arraydraw"},hovertext:{valType:"string",editType:"arraydraw"},hoverlabel:{bgcolor:{valType:"color",editType:"arraydraw"},bordercolor:{valType:"color",editType:"arraydraw"},font:a({editType:"arraydraw"}),editType:"arraydraw"},captureevents:{valType:"boolean",editType:"arraydraw"},editType:"calc",_deprecated:{ref:{valType:"string",editType:"calc"}}})},{"../../plot_api/plot_template":755,"../../plots/cartesian/constants":771,"../../plots/font_attributes":791,"./arrow_paths":573}],575:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("./draw").draw;function o(t){var e=t._fullLayout;n.filterVisible(e.annotations).forEach(function(e){var r=a.getFromId(t,e.xref),n=a.getFromId(t,e.yref);e._extremes={},r&&s(e,r),n&&s(e,n)})}function s(t,e){var r,n=e._id,i=n.charAt(0),o=t[i],s=t["a"+i],l=t[i+"ref"],c=t["a"+i+"ref"],u=t["_"+i+"padplus"],h=t["_"+i+"padminus"],f={x:1,y:-1}[i]*t[i+"shift"],p=3*t.arrowsize*t.arrowwidth||0,d=p+f,g=p-f,v=3*t.startarrowsize*t.arrowwidth||0,m=v+f,y=v-f;if(c===l){var x=a.findExtremes(e,[e.r2c(o)],{ppadplus:d,ppadminus:g}),b=a.findExtremes(e,[e.r2c(s)],{ppadplus:Math.max(u,m),ppadminus:Math.max(h,y)});r={min:[x.min[0],b.min[0]],max:[x.max[0],b.max[0]]}}else m=s?m+s:m,y=s?y-s:y,r=a.findExtremes(e,[e.r2c(o)],{ppadplus:Math.max(u,d,m),ppadminus:Math.max(h,g,y)});t._extremes[n]=r}e.exports=function(t){var e=t._fullLayout;if(n.filterVisible(e.annotations).length&&t._fullData.length)return n.syncOrAsync([i,o],t)}},{"../../lib":717,"../../plots/cartesian/axes":765,"./draw":580}],576:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../registry"),i=t("../../plot_api/plot_template").arrayEditor;function o(t,e){var r,n,a,i,o,l,c,u=t._fullLayout.annotations,h=[],f=[],p=[],d=(e||[]).length;for(r=0;r<u.length;r++)if(i=(a=u[r]).clicktoshow){for(n=0;n<d;n++)if(l=(o=e[n]).xaxis,c=o.yaxis,l._id===a.xref&&c._id===a.yref&&l.d2r(o.x)===s(a._xclick,l)&&c.d2r(o.y)===s(a._yclick,c)){(a.visible?"onout"===i?f:p:h).push(r);break}n===d&&a.visible&&"onout"===i&&f.push(r)}return{on:h,off:f,explicitOff:p}}function s(t,e){return"log"===e.type?e.l2r(t):e.d2r(t)}e.exports={hasClickToShow:function(t,e){var r=o(t,e);return r.on.length>0||r.explicitOff.length>0},onClick:function(t,e){var r,s,l=o(t,e),c=l.on,u=l.off.concat(l.explicitOff),h={},f=t._fullLayout.annotations;if(!c.length&&!u.length)return;for(r=0;r<c.length;r++)(s=i(t.layout,"annotations",f[c[r]])).modifyItem("visible",!0),n.extendFlat(h,s.getUpdateObj());for(r=0;r<u.length;r++)(s=i(t.layout,"annotations",f[u[r]])).modifyItem("visible",!1),n.extendFlat(h,s.getUpdateObj());return a.call("update",t,{},h)}}},{"../../lib":717,"../../plot_api/plot_template":755,"../../registry":846}],577:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../color");e.exports=function(t,e,r,i){i("opacity");var o=i("bgcolor"),s=i("bordercolor"),l=a.opacity(s);i("borderpad");var c=i("borderwidth"),u=i("showarrow");if(i("text",u?" ":r._dfltTitle.annotation),i("textangle"),n.coerceFont(i,"font",r.font),i("width"),i("align"),i("height")&&i("valign"),u){var h,f,p=i("arrowside");-1!==p.indexOf("end")&&(h=i("arrowhead"),f=i("arrowsize")),-1!==p.indexOf("start")&&(i("startarrowhead",h),i("startarrowsize",f)),i("arrowcolor",l?e.bordercolor:a.defaultLine),i("arrowwidth",2*(l&&c||1)),i("standoff"),i("startstandoff")}var d=i("hovertext"),g=r.hoverlabel||{};if(d){var v=i("hoverlabel.bgcolor",g.bgcolor||(a.opacity(o)?a.rgb(o):a.defaultLine)),m=i("hoverlabel.bordercolor",g.bordercolor||a.contrast(v));n.coerceFont(i,"hoverlabel.font",{family:g.font.family,size:g.font.size,color:g.font.color||m})}i("captureevents",!!d)}},{"../../lib":717,"../color":591}],578:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib/to_log_range");e.exports=function(t,e,r,i){e=e||{};var o="log"===r&&"linear"===e.type,s="linear"===r&&"log"===e.type;if(o||s)for(var l,c,u=t._fullLayout.annotations,h=e._id.charAt(0),f=0;f<u.length;f++)l=u[f],c="annotations["+f+"].",l[h+"ref"]===e._id&&p(h),l["a"+h+"ref"]===e._id&&p("a"+h);function p(t){var r=l[t],s=null;s=o?a(r,e.range):Math.pow(10,r),n(s)||(s=null),i(c+t,s)}}},{"../../lib/to_log_range":743,"fast-isnumeric":228}],579:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../../plots/array_container_defaults"),o=t("./common_defaults"),s=t("./attributes");function l(t,e,r){function i(r,a){return n.coerce(t,e,s,r,a)}var l=i("visible"),c=i("clicktoshow");if(l||c){o(t,e,r,i);for(var u=e.showarrow,h=["x","y"],f=[-10,-30],p={_fullLayout:r},d=0;d<2;d++){var g=h[d],v=a.coerceRef(t,e,p,g,"","paper");if("paper"!==v)a.getFromId(p,v)._annIndices.push(e._index);if(a.coercePosition(e,p,i,v,g,.5),u){var m="a"+g,y=a.coerceRef(t,e,p,m,"pixel");"pixel"!==y&&y!==v&&(y=e[m]="pixel");var x="pixel"===y?f[d]:.4;a.coercePosition(e,p,i,y,m,x)}i(g+"anchor"),i(g+"shift")}if(n.noneOrAll(t,e,["x","y"]),u&&n.noneOrAll(t,e,["ax","ay"]),c){var b=i("xclick"),_=i("yclick");e._xclick=void 0===b?e.x:a.cleanPosition(b,p,e.xref),e._yclick=void 0===_?e.y:a.cleanPosition(_,p,e.yref)}}}e.exports=function(t,e){i(t,e,{name:"annotations",handleItemDefaults:l})}},{"../../lib":717,"../../plots/array_container_defaults":761,"../../plots/cartesian/axes":765,"./attributes":574,"./common_defaults":577}],580:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../plots/plots"),o=t("../../lib"),s=t("../../plots/cartesian/axes"),l=t("../color"),c=t("../drawing"),u=t("../fx"),h=t("../../lib/svg_text_utils"),f=t("../../lib/setcursor"),p=t("../dragelement"),d=t("../../plot_api/plot_template").arrayEditor,g=t("./draw_arrow_head");function v(t,e){var r=t._fullLayout.annotations[e]||{},n=s.getFromId(t,r.xref),a=s.getFromId(t,r.yref);n&&n.setScale(),a&&a.setScale(),m(t,r,e,!1,n,a)}function m(t,e,r,i,s,v){var m,y,x=t._fullLayout,b=t._fullLayout._size,_=t._context.edits;i?(m="annotation-"+i,y=i+".annotations"):(m="annotation",y="annotations");var w=d(t.layout,y,e),k=w.modifyBase,T=w.modifyItem,M=w.getUpdateObj;x._infolayer.selectAll("."+m+'[data-index="'+r+'"]').remove();var A="clip"+x._uid+"_ann"+r;if(e._input&&!1!==e.visible){var S={x:{},y:{}},E=+e.textangle||0,L=x._infolayer.append("g").classed(m,!0).attr("data-index",String(r)).style("opacity",e.opacity),C=L.append("g").classed("annotation-text-g",!0),P=_[e.showarrow?"annotationTail":"annotationPosition"],O=e.captureevents||_.annotationText||P,z=C.append("g").style("pointer-events",O?"all":null).call(f,"pointer").on("click",function(){t._dragging=!1,t.emit("plotly_clickannotation",q(n.event))});e.hovertext&&z.on("mouseover",function(){var r=e.hoverlabel,n=r.font,a=this.getBoundingClientRect(),i=t.getBoundingClientRect();u.loneHover({x0:a.left-i.left,x1:a.right-i.left,y:(a.top+a.bottom)/2-i.top,text:e.hovertext,color:r.bgcolor,borderColor:r.bordercolor,fontFamily:n.family,fontSize:n.size,fontColor:n.color},{container:x._hoverlayer.node(),outerContainer:x._paper.node(),gd:t})}).on("mouseout",function(){u.loneUnhover(x._hoverlayer.node())});var I=e.borderwidth,D=e.borderpad,R=I+D,F=z.append("rect").attr("class","bg").style("stroke-width",I+"px").call(l.stroke,e.bordercolor).call(l.fill,e.bgcolor),B=e.width||e.height,N=x._topclips.selectAll("#"+A).data(B?[0]:[]);N.enter().append("clipPath").classed("annclip",!0).attr("id",A).append("rect"),N.exit().remove();var j=e.font,V=x._meta?o.templateString(e.text,x._meta):e.text,U=z.append("text").classed("annotation-text",!0).text(V);_.annotationText?U.call(h.makeEditable,{delegate:z,gd:t}).call(H).on("edit",function(r){e.text=r,this.call(H),T("text",r),s&&s.autorange&&k(s._name+".autorange",!0),v&&v.autorange&&k(v._name+".autorange",!0),a.call("_guiRelayout",t,M())}):U.call(H)}else n.selectAll("#"+A).remove();function q(t){var n={index:r,annotation:e._input,fullAnnotation:e,event:t};return i&&(n.subplotId=i),n}function H(r){return r.call(c.font,j).attr({"text-anchor":{left:"start",right:"end"}[e.align]||"middle"}),h.convertToTspans(r,t,G),r}function G(){var r=U.selectAll("a");1===r.size()&&r.text()===U.text()&&z.insert("a",":first-child").attr({"xlink:xlink:href":r.attr("xlink:href"),"xlink:xlink:show":r.attr("xlink:show")}).style({cursor:"pointer"}).node().appendChild(F.node());var n=z.select(".annotation-text-math-group"),u=!n.empty(),d=c.bBox((u?n:U).node()),m=d.width,y=d.height,w=e.width||m,O=e.height||y,D=Math.round(w+2*R),j=Math.round(O+2*R);function V(t,e){return"auto"===e&&(e=t<1/3?"left":t>2/3?"right":"center"),{center:0,middle:0,left:.5,bottom:-.5,right:-.5,top:.5}[e]}for(var H=!1,G=["x","y"],Y=0;Y<G.length;Y++){var W,X,Z,J,K,Q=G[Y],$=e[Q+"ref"]||Q,tt=e["a"+Q+"ref"],et={x:s,y:v}[Q],rt=(E+("x"===Q?0:-90))*Math.PI/180,nt=D*Math.cos(rt),at=j*Math.sin(rt),it=Math.abs(nt)+Math.abs(at),ot=e[Q+"anchor"],st=e[Q+"shift"]*("x"===Q?1:-1),lt=S[Q];if(et){var ct=et.r2fraction(e[Q]);(ct<0||ct>1)&&(tt===$?((ct=et.r2fraction(e["a"+Q]))<0||ct>1)&&(H=!0):H=!0),W=et._offset+et.r2p(e[Q]),J=.5}else"x"===Q?(Z=e[Q],W=b.l+b.w*Z):(Z=1-e[Q],W=b.t+b.h*Z),J=e.showarrow?.5:Z;if(e.showarrow){lt.head=W;var ut=e["a"+Q];K=nt*V(.5,e.xanchor)-at*V(.5,e.yanchor),tt===$?(lt.tail=et._offset+et.r2p(ut),X=K):(lt.tail=W+ut,X=K+ut),lt.text=lt.tail+K;var ht=x["x"===Q?"width":"height"];if("paper"===$&&(lt.head=o.constrain(lt.head,1,ht-1)),"pixel"===tt){var ft=-Math.max(lt.tail-3,lt.text),pt=Math.min(lt.tail+3,lt.text)-ht;ft>0?(lt.tail+=ft,lt.text+=ft):pt>0&&(lt.tail-=pt,lt.text-=pt)}lt.tail+=st,lt.head+=st}else X=K=it*V(J,ot),lt.text=W+K;lt.text+=st,K+=st,X+=st,e["_"+Q+"padplus"]=it/2+X,e["_"+Q+"padminus"]=it/2-X,e["_"+Q+"size"]=it,e["_"+Q+"shift"]=K}if(H)z.remove();else{var dt=0,gt=0;if("left"!==e.align&&(dt=(w-m)*("center"===e.align?.5:1)),"top"!==e.valign&&(gt=(O-y)*("middle"===e.valign?.5:1)),u)n.select("svg").attr({x:R+dt-1,y:R+gt}).call(c.setClipUrl,B?A:null,t);else{var vt=R+gt-d.top,mt=R+dt-d.left;U.call(h.positionText,mt,vt).call(c.setClipUrl,B?A:null,t)}N.select("rect").call(c.setRect,R,R,w,O),F.call(c.setRect,I/2,I/2,D-I,j-I),z.call(c.setTranslate,Math.round(S.x.text-D/2),Math.round(S.y.text-j/2)),C.attr({transform:"rotate("+E+","+S.x.text+","+S.y.text+")"});var yt,xt=function(r,n){L.selectAll(".annotation-arrow-g").remove();var u=S.x.head,h=S.y.head,f=S.x.tail+r,d=S.y.tail+n,m=S.x.text+r,y=S.y.text+n,x=o.rotationXYMatrix(E,m,y),w=o.apply2DTransform(x),A=o.apply2DTransform2(x),P=+F.attr("width"),O=+F.attr("height"),I=m-.5*P,D=I+P,R=y-.5*O,B=R+O,N=[[I,R,I,B],[I,B,D,B],[D,B,D,R],[D,R,I,R]].map(A);if(!N.reduce(function(t,e){return t^!!o.segmentsIntersect(u,h,u+1e6,h+1e6,e[0],e[1],e[2],e[3])},!1)){N.forEach(function(t){var e=o.segmentsIntersect(f,d,u,h,t[0],t[1],t[2],t[3]);e&&(f=e.x,d=e.y)});var j=e.arrowwidth,V=e.arrowcolor,U=e.arrowside,q=L.append("g").style({opacity:l.opacity(V)}).classed("annotation-arrow-g",!0),H=q.append("path").attr("d","M"+f+","+d+"L"+u+","+h).style("stroke-width",j+"px").call(l.stroke,l.rgb(V));if(g(H,U,e),_.annotationPosition&&H.node().parentNode&&!i){var G=u,Y=h;if(e.standoff){var W=Math.sqrt(Math.pow(u-f,2)+Math.pow(h-d,2));G+=e.standoff*(f-u)/W,Y+=e.standoff*(d-h)/W}var X,Z,J=q.append("path").classed("annotation-arrow",!0).classed("anndrag",!0).classed("cursor-move",!0).attr({d:"M3,3H-3V-3H3ZM0,0L"+(f-G)+","+(d-Y),transform:"translate("+G+","+Y+")"}).style("stroke-width",j+6+"px").call(l.stroke,"rgba(0,0,0,0)").call(l.fill,"rgba(0,0,0,0)");p.init({element:J.node(),gd:t,prepFn:function(){var t=c.getTranslate(z);X=t.x,Z=t.y,s&&s.autorange&&k(s._name+".autorange",!0),v&&v.autorange&&k(v._name+".autorange",!0)},moveFn:function(t,r){var n=w(X,Z),a=n[0]+t,i=n[1]+r;z.call(c.setTranslate,a,i),T("x",s?s.p2r(s.r2p(e.x)+t):e.x+t/b.w),T("y",v?v.p2r(v.r2p(e.y)+r):e.y-r/b.h),e.axref===e.xref&&T("ax",s.p2r(s.r2p(e.ax)+t)),e.ayref===e.yref&&T("ay",v.p2r(v.r2p(e.ay)+r)),q.attr("transform","translate("+t+","+r+")"),C.attr({transform:"rotate("+E+","+a+","+i+")"})},doneFn:function(){a.call("_guiRelayout",t,M());var e=document.querySelector(".js-notes-box-panel");e&&e.redraw(e.selectedObj)}})}}};if(e.showarrow&&xt(0,0),P)p.init({element:z.node(),gd:t,prepFn:function(){yt=C.attr("transform")},moveFn:function(t,r){var n="pointer";if(e.showarrow)e.axref===e.xref?T("ax",s.p2r(s.r2p(e.ax)+t)):T("ax",e.ax+t),e.ayref===e.yref?T("ay",v.p2r(v.r2p(e.ay)+r)):T("ay",e.ay+r),xt(t,r);else{if(i)return;var a,o;if(s)a=s.p2r(s.r2p(e.x)+t);else{var l=e._xsize/b.w,c=e.x+(e._xshift-e.xshift)/b.w-l/2;a=p.align(c+t/b.w,l,0,1,e.xanchor)}if(v)o=v.p2r(v.r2p(e.y)+r);else{var u=e._ysize/b.h,h=e.y-(e._yshift+e.yshift)/b.h-u/2;o=p.align(h-r/b.h,u,0,1,e.yanchor)}T("x",a),T("y",o),s&&v||(n=p.getCursor(s?.5:a,v?.5:o,e.xanchor,e.yanchor))}C.attr({transform:"translate("+t+","+r+")"+yt}),f(z,n)},clickFn:function(r,n){e.captureevents&&t.emit("plotly_clickannotation",q(n))},doneFn:function(){f(z),a.call("_guiRelayout",t,M());var e=document.querySelector(".js-notes-box-panel");e&&e.redraw(e.selectedObj)}})}}}e.exports={draw:function(t){var e=t._fullLayout;e._infolayer.selectAll(".annotation").remove();for(var r=0;r<e.annotations.length;r++)e.annotations[r].visible&&v(t,r);return i.previousPromises(t)},drawOne:v,drawRaw:m}},{"../../lib":717,"../../lib/setcursor":737,"../../lib/svg_text_utils":741,"../../plot_api/plot_template":755,"../../plots/cartesian/axes":765,"../../plots/plots":826,"../../registry":846,"../color":591,"../dragelement":609,"../drawing":612,"../fx":630,"./draw_arrow_head":581,d3:165}],581:[function(t,e,r){"use strict";var n=t("d3"),a=t("../color"),i=t("./arrow_paths");e.exports=function(t,e,r){var o,s,l,c,u=t.node(),h=i[r.arrowhead||0],f=i[r.startarrowhead||0],p=(r.arrowwidth||1)*(r.arrowsize||1),d=(r.arrowwidth||1)*(r.startarrowsize||1),g=e.indexOf("start")>=0,v=e.indexOf("end")>=0,m=h.backoff*p+r.standoff,y=f.backoff*d+r.startstandoff;if("line"===u.nodeName){o={x:+t.attr("x1"),y:+t.attr("y1")},s={x:+t.attr("x2"),y:+t.attr("y2")};var x=o.x-s.x,b=o.y-s.y;if(c=(l=Math.atan2(b,x))+Math.PI,m&&y&&m+y>Math.sqrt(x*x+b*b))return void P();if(m){if(m*m>x*x+b*b)return void P();var _=m*Math.cos(l),w=m*Math.sin(l);s.x+=_,s.y+=w,t.attr({x2:s.x,y2:s.y})}if(y){if(y*y>x*x+b*b)return void P();var k=y*Math.cos(l),T=y*Math.sin(l);o.x-=k,o.y-=T,t.attr({x1:o.x,y1:o.y})}}else if("path"===u.nodeName){var M=u.getTotalLength(),A="";if(M<m+y)return void P();var S=u.getPointAtLength(0),E=u.getPointAtLength(.1);l=Math.atan2(S.y-E.y,S.x-E.x),o=u.getPointAtLength(Math.min(y,M)),A="0px,"+y+"px,";var L=u.getPointAtLength(M),C=u.getPointAtLength(M-.1);c=Math.atan2(L.y-C.y,L.x-C.x),s=u.getPointAtLength(Math.max(0,M-m)),A+=M-(A?y+m:m)+"px,"+M+"px",t.style("stroke-dasharray",A)}function P(){t.style("stroke-dasharray","0px,100px")}function O(e,i,o,s){e.path&&(e.noRotate&&(o=0),n.select(u.parentNode).append("path").attr({class:t.attr("class"),d:e.path,transform:"translate("+i.x+","+i.y+")"+(o?"rotate("+180*o/Math.PI+")":"")+"scale("+s+")"}).style({fill:a.rgb(r.arrowcolor),"stroke-width":0}))}g&&O(f,o,l,d),v&&O(h,s,c,p)}},{"../color":591,"./arrow_paths":573,d3:165}],582:[function(t,e,r){"use strict";var n=t("./draw"),a=t("./click");e.exports={moduleType:"component",name:"annotations",layoutAttributes:t("./attributes"),supplyLayoutDefaults:t("./defaults"),includeBasePlot:t("../../plots/cartesian/include_components")("annotations"),calcAutorange:t("./calc_autorange"),draw:n.draw,drawOne:n.drawOne,drawRaw:n.drawRaw,hasClickToShow:a.hasClickToShow,onClick:a.onClick,convertCoords:t("./convert_coords")}},{"../../plots/cartesian/include_components":775,"./attributes":574,"./calc_autorange":575,"./click":576,"./convert_coords":578,"./defaults":579,"./draw":580}],583:[function(t,e,r){"use strict";var n=t("../annotations/attributes"),a=t("../../plot_api/edit_types").overrideAll,i=t("../../plot_api/plot_template").templatedArray;e.exports=a(i("annotation",{visible:n.visible,x:{valType:"any"},y:{valType:"any"},z:{valType:"any"},ax:{valType:"number"},ay:{valType:"number"},xanchor:n.xanchor,xshift:n.xshift,yanchor:n.yanchor,yshift:n.yshift,text:n.text,textangle:n.textangle,font:n.font,width:n.width,height:n.height,opacity:n.opacity,align:n.align,valign:n.valign,bgcolor:n.bgcolor,bordercolor:n.bordercolor,borderpad:n.borderpad,borderwidth:n.borderwidth,showarrow:n.showarrow,arrowcolor:n.arrowcolor,arrowhead:n.arrowhead,startarrowhead:n.startarrowhead,arrowside:n.arrowside,arrowsize:n.arrowsize,startarrowsize:n.startarrowsize,arrowwidth:n.arrowwidth,standoff:n.standoff,startstandoff:n.startstandoff,hovertext:n.hovertext,hoverlabel:n.hoverlabel,captureevents:n.captureevents}),"calc","from-root")},{"../../plot_api/edit_types":748,"../../plot_api/plot_template":755,"../annotations/attributes":574}],584:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes");function i(t,e){var r=e.fullSceneLayout.domain,i=e.fullLayout._size,o={pdata:null,type:"linear",autorange:!1,range:[-1/0,1/0]};t._xa={},n.extendFlat(t._xa,o),a.setConvert(t._xa),t._xa._offset=i.l+r.x[0]*i.w,t._xa.l2p=function(){return.5*(1+t._pdata[0]/t._pdata[3])*i.w*(r.x[1]-r.x[0])},t._ya={},n.extendFlat(t._ya,o),a.setConvert(t._ya),t._ya._offset=i.t+(1-r.y[1])*i.h,t._ya.l2p=function(){return.5*(1-t._pdata[1]/t._pdata[3])*i.h*(r.y[1]-r.y[0])}}e.exports=function(t){for(var e=t.fullSceneLayout.annotations,r=0;r<e.length;r++)i(e[r],t);t.fullLayout._infolayer.selectAll(".annotation-"+t.id).remove()}},{"../../lib":717,"../../plots/cartesian/axes":765}],585:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../../plots/array_container_defaults"),o=t("../annotations/common_defaults"),s=t("./attributes");function l(t,e,r,i){function l(r,a){return n.coerce(t,e,s,r,a)}function c(t){var n=t+"axis",i={_fullLayout:{}};return i._fullLayout[n]=r[n],a.coercePosition(e,i,l,t,t,.5)}l("visible")&&(o(t,e,i.fullLayout,l),c("x"),c("y"),c("z"),n.noneOrAll(t,e,["x","y","z"]),e.xref="x",e.yref="y",e.zref="z",l("xanchor"),l("yanchor"),l("xshift"),l("yshift"),e.showarrow&&(e.axref="pixel",e.ayref="pixel",l("ax",-10),l("ay",-30),n.noneOrAll(t,e,["ax","ay"])))}e.exports=function(t,e,r){i(t,e,{name:"annotations",handleItemDefaults:l,fullLayout:r.fullLayout})}},{"../../lib":717,"../../plots/array_container_defaults":761,"../../plots/cartesian/axes":765,"../annotations/common_defaults":577,"./attributes":583}],586:[function(t,e,r){"use strict";var n=t("../annotations/draw").drawRaw,a=t("../../plots/gl3d/project"),i=["x","y","z"];e.exports=function(t){for(var e=t.fullSceneLayout,r=t.dataScale,o=e.annotations,s=0;s<o.length;s++){for(var l=o[s],c=!1,u=0;u<3;u++){var h=i[u],f=l[h],p=e[h+"axis"].r2fraction(f);if(p<0||p>1){c=!0;break}}c?t.fullLayout._infolayer.select(".annotation-"+t.id+'[data-index="'+s+'"]').remove():(l._pdata=a(t.glplot.cameraParams,[e.xaxis.r2l(l.x)*r[0],e.yaxis.r2l(l.y)*r[1],e.zaxis.r2l(l.z)*r[2]]),n(t.graphDiv,l,s,t.id,l._xa,l._ya))}}},{"../../plots/gl3d/project":814,"../annotations/draw":580}],587:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib");e.exports={moduleType:"component",name:"annotations3d",schema:{subplots:{scene:{annotations:t("./attributes")}}},layoutAttributes:t("./attributes"),handleDefaults:t("./defaults"),includeBasePlot:function(t,e){var r=n.subplotsRegistry.gl3d;if(!r)return;for(var i=r.attrRegex,o=Object.keys(t),s=0;s<o.length;s++){var l=o[s];i.test(l)&&(t[l].annotations||[]).length&&(a.pushUnique(e._basePlotModules,r),a.pushUnique(e._subplots.gl3d,l))}},convert:t("./convert"),draw:t("./draw")}},{"../../lib":717,"../../registry":846,"./attributes":583,"./convert":584,"./defaults":585,"./draw":586}],588:[function(t,e,r){"use strict";e.exports=t("world-calendars/dist/main"),t("world-calendars/dist/plus"),t("world-calendars/dist/calendars/chinese"),t("world-calendars/dist/calendars/coptic"),t("world-calendars/dist/calendars/discworld"),t("world-calendars/dist/calendars/ethiopian"),t("world-calendars/dist/calendars/hebrew"),t("world-calendars/dist/calendars/islamic"),t("world-calendars/dist/calendars/julian"),t("world-calendars/dist/calendars/mayan"),t("world-calendars/dist/calendars/nanakshahi"),t("world-calendars/dist/calendars/nepali"),t("world-calendars/dist/calendars/persian"),t("world-calendars/dist/calendars/taiwan"),t("world-calendars/dist/calendars/thai"),t("world-calendars/dist/calendars/ummalqura")},{"world-calendars/dist/calendars/chinese":555,"world-calendars/dist/calendars/coptic":556,"world-calendars/dist/calendars/discworld":557,"world-calendars/dist/calendars/ethiopian":558,"world-calendars/dist/calendars/hebrew":559,"world-calendars/dist/calendars/islamic":560,"world-calendars/dist/calendars/julian":561,"world-calendars/dist/calendars/mayan":562,"world-calendars/dist/calendars/nanakshahi":563,"world-calendars/dist/calendars/nepali":564,"world-calendars/dist/calendars/persian":565,"world-calendars/dist/calendars/taiwan":566,"world-calendars/dist/calendars/thai":567,"world-calendars/dist/calendars/ummalqura":568,"world-calendars/dist/main":569,"world-calendars/dist/plus":570}],589:[function(t,e,r){"use strict";var n=t("./calendars"),a=t("../../lib"),i=t("../../constants/numerical"),o=i.EPOCHJD,s=i.ONEDAY,l={valType:"enumerated",values:Object.keys(n.calendars),editType:"calc",dflt:"gregorian"},c=function(t,e,r,n){var i={};return i[r]=l,a.coerce(t,e,i,r,n)},u="##",h={d:{0:"dd","-":"d"},e:{0:"d","-":"d"},a:{0:"D","-":"D"},A:{0:"DD","-":"DD"},j:{0:"oo","-":"o"},W:{0:"ww","-":"w"},m:{0:"mm","-":"m"},b:{0:"M","-":"M"},B:{0:"MM","-":"MM"},y:{0:"yy","-":"yy"},Y:{0:"yyyy","-":"yyyy"},U:u,w:u,c:{0:"D M d %X yyyy","-":"D M d %X yyyy"},x:{0:"mm/dd/yyyy","-":"mm/dd/yyyy"}};var f={};function p(t){var e=f[t];return e||(e=f[t]=n.instance(t))}function d(t){return a.extendFlat({},l,{description:t})}function g(t){return"Sets the calendar system to use with `"+t+"` date data."}var v={xcalendar:d(g("x"))},m=a.extendFlat({},v,{ycalendar:d(g("y"))}),y=a.extendFlat({},m,{zcalendar:d(g("z"))}),x=d(["Sets the calendar system to use for `range` and `tick0`","if this is a date axis. This does not set the calendar for","interpreting data on this axis, that's specified in the trace","or via the global `layout.calendar`"].join(" "));e.exports={moduleType:"component",name:"calendars",schema:{traces:{scatter:m,bar:m,box:m,heatmap:m,contour:m,histogram:m,histogram2d:m,histogram2dcontour:m,scatter3d:y,surface:y,mesh3d:y,scattergl:m,ohlc:v,candlestick:v},layout:{calendar:d(["Sets the default calendar system to use for interpreting and","displaying dates throughout the plot."].join(" "))},subplots:{xaxis:{calendar:x},yaxis:{calendar:x},scene:{xaxis:{calendar:x},yaxis:{calendar:x},zaxis:{calendar:x}},polar:{radialaxis:{calendar:x}}},transforms:{filter:{valuecalendar:d(["Sets the calendar system to use for `value`, if it is a date."].join(" ")),targetcalendar:d(["Sets the calendar system to use for `target`, if it is an","array of dates. If `target` is a string (eg *x*) we use the","corresponding trace attribute (eg `xcalendar`) if it exists,","even if `targetcalendar` is provided."].join(" "))}}},layoutAttributes:l,handleDefaults:c,handleTraceDefaults:function(t,e,r,n){for(var a=0;a<r.length;a++)c(t,e,r[a]+"calendar",n.calendar)},CANONICAL_SUNDAY:{chinese:"2000-01-02",coptic:"2000-01-03",discworld:"2000-01-03",ethiopian:"2000-01-05",hebrew:"5000-01-01",islamic:"1000-01-02",julian:"2000-01-03",mayan:"5000-01-01",nanakshahi:"1000-01-05",nepali:"2000-01-05",persian:"1000-01-01",jalali:"1000-01-01",taiwan:"1000-01-04",thai:"2000-01-04",ummalqura:"1400-01-06"},CANONICAL_TICK:{chinese:"2000-01-01",coptic:"2000-01-01",discworld:"2000-01-01",ethiopian:"2000-01-01",hebrew:"5000-01-01",islamic:"1000-01-01",julian:"2000-01-01",mayan:"5000-01-01",nanakshahi:"1000-01-01",nepali:"2000-01-01",persian:"1000-01-01",jalali:"1000-01-01",taiwan:"1000-01-01",thai:"2000-01-01",ummalqura:"1400-01-01"},DFLTRANGE:{chinese:["2000-01-01","2001-01-01"],coptic:["1700-01-01","1701-01-01"],discworld:["1800-01-01","1801-01-01"],ethiopian:["2000-01-01","2001-01-01"],hebrew:["5700-01-01","5701-01-01"],islamic:["1400-01-01","1401-01-01"],julian:["2000-01-01","2001-01-01"],mayan:["5200-01-01","5201-01-01"],nanakshahi:["0500-01-01","0501-01-01"],nepali:["2000-01-01","2001-01-01"],persian:["1400-01-01","1401-01-01"],jalali:["1400-01-01","1401-01-01"],taiwan:["0100-01-01","0101-01-01"],thai:["2500-01-01","2501-01-01"],ummalqura:["1400-01-01","1401-01-01"]},getCal:p,worldCalFmt:function(t,e,r){for(var n,a,i,l,c,f=Math.floor((e+.05)/s)+o,d=p(r).fromJD(f),g=0;-1!==(g=t.indexOf("%",g));)"0"===(n=t.charAt(g+1))||"-"===n||"_"===n?(i=3,a=t.charAt(g+2),"_"===n&&(n="-")):(a=n,n="0",i=2),(l=h[a])?(c=l===u?u:d.formatDate(l[n]),t=t.substr(0,g)+c+t.substr(g+i),g+=c.length):g+=i;return t}}},{"../../constants/numerical":693,"../../lib":717,"./calendars":588}],590:[function(t,e,r){"use strict";r.defaults=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],r.defaultLine="#444",r.lightLine="#eee",r.background="#fff",r.borderLine="#BEC8D9",r.lightFraction=1e3/11},{}],591:[function(t,e,r){"use strict";var n=t("tinycolor2"),a=t("fast-isnumeric"),i=e.exports={},o=t("./attributes");i.defaults=o.defaults;var s=i.defaultLine=o.defaultLine;i.lightLine=o.lightLine;var l=i.background=o.background;function c(t){if(a(t)||"string"!=typeof t)return t;var e=t.trim();if("rgb"!==e.substr(0,3))return t;var r=e.match(/^rgba?\s*\(([^()]*)\)$/);if(!r)return t;var n=r[1].trim().split(/\s*[\s,]\s*/),i="a"===e.charAt(3)&&4===n.length;if(!i&&3!==n.length)return t;for(var o=0;o<n.length;o++){if(!n[o].length)return t;if(n[o]=Number(n[o]),!(n[o]>=0))return t;if(3===o)n[o]>1&&(n[o]=1);else if(n[o]>=1)return t}var s=Math.round(255*n[0])+", "+Math.round(255*n[1])+", "+Math.round(255*n[2]);return i?"rgba("+s+", "+n[3]+")":"rgb("+s+")"}i.tinyRGB=function(t){var e=t.toRgb();return"rgb("+Math.round(e.r)+", "+Math.round(e.g)+", "+Math.round(e.b)+")"},i.rgb=function(t){return i.tinyRGB(n(t))},i.opacity=function(t){return t?n(t).getAlpha():0},i.addOpacity=function(t,e){var r=n(t).toRgb();return"rgba("+Math.round(r.r)+", "+Math.round(r.g)+", "+Math.round(r.b)+", "+e+")"},i.combine=function(t,e){var r=n(t).toRgb();if(1===r.a)return n(t).toRgbString();var a=n(e||l).toRgb(),i=1===a.a?a:{r:255*(1-a.a)+a.r*a.a,g:255*(1-a.a)+a.g*a.a,b:255*(1-a.a)+a.b*a.a},o={r:i.r*(1-r.a)+r.r*r.a,g:i.g*(1-r.a)+r.g*r.a,b:i.b*(1-r.a)+r.b*r.a};return n(o).toRgbString()},i.contrast=function(t,e,r){var a=n(t);return 1!==a.getAlpha()&&(a=n(i.combine(t,l))),(a.isDark()?e?a.lighten(e):l:r?a.darken(r):s).toString()},i.stroke=function(t,e){var r=n(e);t.style({stroke:i.tinyRGB(r),"stroke-opacity":r.getAlpha()})},i.fill=function(t,e){var r=n(e);t.style({fill:i.tinyRGB(r),"fill-opacity":r.getAlpha()})},i.clean=function(t){if(t&&"object"==typeof t){var e,r,n,a,o=Object.keys(t);for(e=0;e<o.length;e++)if(a=t[n=o[e]],"color"===n.substr(n.length-5))if(Array.isArray(a))for(r=0;r<a.length;r++)a[r]=c(a[r]);else t[n]=c(a);else if("colorscale"===n.substr(n.length-10)&&Array.isArray(a))for(r=0;r<a.length;r++)Array.isArray(a[r])&&(a[r][1]=c(a[r][1]));else if(Array.isArray(a)){var s=a[0];if(!Array.isArray(s)&&s&&"object"==typeof s)for(r=0;r<a.length;r++)i.clean(a[r])}else a&&"object"==typeof a&&i.clean(a)}}},{"./attributes":590,"fast-isnumeric":228,tinycolor2:535}],592:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/layout_attributes"),a=t("../../plots/font_attributes"),i=t("../../lib/extend").extendFlat,o=t("../../plot_api/edit_types").overrideAll;e.exports=o({thicknessmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"pixels"},thickness:{valType:"number",min:0,dflt:30},lenmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"fraction"},len:{valType:"number",min:0,dflt:1},x:{valType:"number",dflt:1.02,min:-2,max:3},xanchor:{valType:"enumerated",values:["left","center","right"],dflt:"left"},xpad:{valType:"number",min:0,dflt:10},y:{valType:"number",dflt:.5,min:-2,max:3},yanchor:{valType:"enumerated",values:["top","middle","bottom"],dflt:"middle"},ypad:{valType:"number",min:0,dflt:10},outlinecolor:n.linecolor,outlinewidth:n.linewidth,bordercolor:n.linecolor,borderwidth:{valType:"number",min:0,dflt:0},bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)"},tickmode:n.tickmode,nticks:n.nticks,tick0:n.tick0,dtick:n.dtick,tickvals:n.tickvals,ticktext:n.ticktext,ticks:i({},n.ticks,{dflt:""}),ticklen:n.ticklen,tickwidth:n.tickwidth,tickcolor:n.tickcolor,showticklabels:n.showticklabels,tickfont:a({}),tickangle:n.tickangle,tickformat:n.tickformat,tickformatstops:n.tickformatstops,tickprefix:n.tickprefix,showtickprefix:n.showtickprefix,ticksuffix:n.ticksuffix,showticksuffix:n.showticksuffix,separatethousands:n.separatethousands,exponentformat:n.exponentformat,showexponent:n.showexponent,title:{text:{valType:"string"},font:a({}),side:{valType:"enumerated",values:["right","top","bottom"],dflt:"top"}},_deprecated:{title:{valType:"string"},titlefont:a({}),titleside:{valType:"enumerated",values:["right","top","bottom"],dflt:"top"}}},"colorbars","from-root")},{"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/cartesian/layout_attributes":777,"../../plots/font_attributes":791}],593:[function(t,e,r){"use strict";e.exports={cn:{colorbar:"colorbar",cbbg:"cbbg",cbfill:"cbfill",cbfills:"cbfills",cbline:"cbline",cblines:"cblines",cbaxis:"cbaxis",cbtitleunshift:"cbtitleunshift",cbtitle:"cbtitle",cboutline:"cboutline",crisp:"crisp",jsPlaceholder:"js-placeholder"}}},{}],594:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plot_api/plot_template"),i=t("../../plots/cartesian/tick_value_defaults"),o=t("../../plots/cartesian/tick_mark_defaults"),s=t("../../plots/cartesian/tick_label_defaults"),l=t("./attributes");e.exports=function(t,e,r){var c=a.newContainer(e,"colorbar"),u=t.colorbar||{};function h(t,e){return n.coerce(u,c,l,t,e)}var f=h("thicknessmode");h("thickness","fraction"===f?30/(r.width-r.margin.l-r.margin.r):30);var p=h("lenmode");h("len","fraction"===p?1:r.height-r.margin.t-r.margin.b),h("x"),h("xanchor"),h("xpad"),h("y"),h("yanchor"),h("ypad"),n.noneOrAll(u,c,["x","y"]),h("outlinecolor"),h("outlinewidth"),h("bordercolor"),h("borderwidth"),h("bgcolor"),i(u,c,h,"linear");var d={outerTicks:!1,font:r.font};s(u,c,h,"linear",d),o(u,c,h,"linear",d),h("title.text",r._dfltTitle.colorbar),n.coerceFont(h,"title.font",r.font),h("title.side")}},{"../../lib":717,"../../plot_api/plot_template":755,"../../plots/cartesian/tick_label_defaults":784,"../../plots/cartesian/tick_mark_defaults":785,"../../plots/cartesian/tick_value_defaults":786,"./attributes":592}],595:[function(t,e,r){"use strict";var n=t("d3"),a=t("tinycolor2"),i=t("../../plots/plots"),o=t("../../registry"),s=t("../../plots/cartesian/axes"),l=t("../dragelement"),c=t("../../lib"),u=t("../../lib/extend").extendFlat,h=t("../../lib/setcursor"),f=t("../drawing"),p=t("../color"),d=t("../titles"),g=t("../../lib/svg_text_utils"),v=t("../colorscale/helpers").flipScale,m=t("../../plots/cartesian/axis_defaults"),y=t("../../plots/cartesian/position_defaults"),x=t("../../plots/cartesian/layout_attributes"),b=t("../../constants/alignment"),_=b.LINE_SPACING,w=b.FROM_TL,k=b.FROM_BR,T=t("./constants").cn;e.exports={draw:function(t){var e=t._fullLayout._infolayer.selectAll("g."+T.colorbar).data(function(t){var e,r,n,a,i=t._fullLayout,o=t.calcdata,s=[];function l(t){return u(t,{_fillcolor:null,_line:{color:null,width:null,dash:null},_levels:{start:null,end:null,size:null},_filllevels:null,_fillgradient:null,_zrange:null})}function c(){"function"==typeof a.calc?a.calc(t,n,e):(e._fillgradient=r.reversescale?v(r.colorscale):r.colorscale,e._zrange=[r[a.min],r[a.max]])}for(var h=0;h<o.length;h++){var f=o[h],p=(n=f[0].trace)._module.colorbar;if(!0===n.visible&&p)for(var d=Array.isArray(p),g=d?p:[p],m=0;m<g.length;m++){var y=(a=g[m]).container;(r=y?n[y]:n)&&r.showscale&&((e=l(r.colorbar))._id="cb"+n.uid+(d&&y?"-"+y:""),e._traceIndex=n.index,e._propPrefix=(y?y+".":"")+"colorbar.",e._meta=n._meta,c(),s.push(e))}}for(var x in i._colorAxes)if((r=i[x]).showscale){var b=i._colorAxes[x];(e=l(r.colorbar))._id="cb"+x,e._propPrefix=x+".colorbar.",e._meta=i._meta,a={min:"cmin",max:"cmax"},"heatmap"!==b[0]&&(n=b[1],a.calc=n._module.colorbar.calc),c(),s.push(e)}return s}(t),function(t){return t._id});e.enter().append("g").attr("class",function(t){return t._id}).classed(T.colorbar,!0),e.each(function(e){var r=n.select(this);c.ensureSingle(r,"rect",T.cbbg),c.ensureSingle(r,"g",T.cbfills),c.ensureSingle(r,"g",T.cblines),c.ensureSingle(r,"g",T.cbaxis,function(t){t.classed(T.crisp,!0)}),c.ensureSingle(r,"g",T.cbtitleunshift,function(t){t.append("g").classed(T.cbtitle,!0)}),c.ensureSingle(r,"rect",T.cboutline);var v=function(t,e,r){var o=r._fullLayout,l=o._size,h=e._fillcolor,v=e._line,b=e.title,M=b.side,A=e._zrange||n.extent(("function"==typeof h?h:v.color).domain()),S="function"==typeof v.color?v.color:function(){return v.color},E="function"==typeof h?h:function(){return h},L=e._levels,C=function(t,e,r){var n,a,i=e._levels,o=[],s=[],l=i.end+i.size/100,c=i.size,u=1.001*r[0]-.001*r[1],h=1.001*r[1]-.001*r[0];for(a=0;a<1e5&&(n=i.start+a*c,!(c>0?n>=l:n<=l));a++)n>u&&n<h&&o.push(n);if(e._fillgradient)s=[0];else if("function"==typeof e._fillcolor){var f=e._filllevels;if(f)for(l=f.end+f.size/100,c=f.size,a=0;a<1e5&&(n=f.start+a*c,!(c>0?n>=l:n<=l));a++)n>r[0]&&n<r[1]&&s.push(n);else(s=o.map(function(t){return t-i.size/2})).push(s[s.length-1]+i.size)}else e._fillcolor&&"string"==typeof e._fillcolor&&(s=[0]);return i.size<0&&(o.reverse(),s.reverse()),{line:o,fill:s}}(0,e,A),P=C.fill,O=C.line,z=Math.round(e.thickness*("fraction"===e.thicknessmode?l.w:1)),I=z/l.w,D=Math.round(e.len*("fraction"===e.lenmode?l.h:1)),R=D/l.h,F=e.xpad/l.w,B=(e.borderwidth+e.outlinewidth)/2,N=e.ypad/l.h,j=Math.round(e.x*l.w+e.xpad),V=e.x-I*({middle:.5,right:1}[e.xanchor]||0),U=e.y+R*(({top:-.5,bottom:.5}[e.yanchor]||0)-.5),q=Math.round(l.h*(1-U)),H=q-D;e._lenFrac=R,e._thickFrac=I,e._xLeftFrac=V,e._yBottomFrac=U;var G=e._axis=function(t,e,r){var n=t._fullLayout,a={type:"linear",range:r,tickmode:e.tickmode,nticks:e.nticks,tick0:e.tick0,dtick:e.dtick,tickvals:e.tickvals,ticktext:e.ticktext,ticks:e.ticks,ticklen:e.ticklen,tickwidth:e.tickwidth,tickcolor:e.tickcolor,showticklabels:e.showticklabels,tickfont:e.tickfont,tickangle:e.tickangle,tickformat:e.tickformat,exponentformat:e.exponentformat,separatethousands:e.separatethousands,showexponent:e.showexponent,showtickprefix:e.showtickprefix,tickprefix:e.tickprefix,showticksuffix:e.showticksuffix,ticksuffix:e.ticksuffix,title:e.title,showline:!0,anchor:"free",side:"right",position:1},i={type:"linear",_id:"y"+e._id},o={letter:"y",font:n.font,noHover:!0,noTickson:!0,calendar:n.calendar};function s(t,e){return c.coerce(a,i,x,t,e)}return m(a,i,s,o,n),y(a,i,s,o),i}(r,e,A);if(G.position=e.x+F+I,-1!==["top","bottom"].indexOf(M)&&(G.title.side=M,G.titlex=e.x+F,G.titley=U+("top"===b.side?R-N:N)),v.color&&"auto"===e.tickmode){G.tickmode="linear",G.tick0=L.start;var Y=L.size,W=c.constrain((q-H)/50,4,15)+1,X=(A[1]-A[0])/((e.nticks||W)*Y);if(X>1){var Z=Math.pow(10,Math.floor(Math.log(X)/Math.LN10));Y*=Z*c.roundUp(X/Z,[2,5,10]),(Math.abs(L.start)/L.size+1e-6)%1<2e-6&&(G.tick0=0)}G.dtick=Y}G.domain=[U+N,U+R-N],G.setScale(),t.attr("transform","translate("+Math.round(l.l)+","+Math.round(l.t)+")");var J,K=t.select("."+T.cbtitleunshift).attr("transform","translate(-"+Math.round(l.l)+",-"+Math.round(l.t)+")"),Q=t.select("."+T.cbaxis),$=0;function tt(n,a){var i={propContainer:G,propName:e._propPrefix+"title",traceIndex:e._traceIndex,_meta:e._meta,placeholder:o._dfltTitle.colorbar,containerGroup:t.select("."+T.cbtitle)},s="h"===n.charAt(0)?n.substr(1):"h"+n;t.selectAll("."+s+",."+s+"-math-group").remove(),d.draw(r,n,u(i,a||{}))}return c.syncOrAsync([i.previousPromises,function(){if(-1!==["top","bottom"].indexOf(M)){var t,r=l.l+(e.x+F)*l.w,n=G.title.font.size;t="top"===M?(1-(U+R-N))*l.h+l.t+3+.75*n:(1-(U+N))*l.h+l.t-3-.25*n,tt(G._id+"title",{attributes:{x:r,y:t,"text-anchor":"start"}})}},function(){if(-1!==["top","bottom"].indexOf(M)){var i=t.select("."+T.cbtitle),o=i.select("text"),u=[-e.outlinewidth/2,e.outlinewidth/2],h=i.select(".h"+G._id+"title-math-group").node(),p=15.6;if(o.node()&&(p=parseInt(o.node().style.fontSize,10)*_),h?($=f.bBox(h).height)>p&&(u[1]-=($-p)/2):o.node()&&!o.classed(T.jsPlaceholder)&&($=f.bBox(o.node()).height),$){if($+=5,"top"===M)G.domain[1]-=$/l.h,u[1]*=-1;else{G.domain[0]+=$/l.h;var d=g.lineCount(o);u[1]+=(1-d)*p}i.attr("transform","translate("+u+")"),G.setScale()}}t.selectAll("."+T.cbfills+",."+T.cblines).attr("transform","translate(0,"+Math.round(l.h*(1-G.domain[1]))+")"),Q.attr("transform","translate(0,"+Math.round(-l.t)+")");var m=t.select("."+T.cbfills).selectAll("rect."+T.cbfill).data(P);m.enter().append("rect").classed(T.cbfill,!0).style("stroke","none"),m.exit().remove();var y=A.map(G.c2p).map(Math.round).sort(function(t,e){return t-e});m.each(function(t,i){var o=[0===i?A[0]:(P[i]+P[i-1])/2,i===P.length-1?A[1]:(P[i]+P[i+1])/2].map(G.c2p).map(Math.round);o[1]=c.constrain(o[1]+(o[1]>o[0])?1:-1,y[0],y[1]);var s=n.select(this).attr({x:j,width:Math.max(z,2),y:n.min(o),height:Math.max(n.max(o)-n.min(o),2)});if(e._fillgradient)f.gradient(s,r,e._id,"vertical",e._fillgradient,"fill");else{var l=E(t).replace("e-","");s.attr("fill",a(l).toHexString())}});var x=t.select("."+T.cblines).selectAll("path."+T.cbline).data(v.color&&v.width?O:[]);x.enter().append("path").classed(T.cbline,!0),x.exit().remove(),x.each(function(t){n.select(this).attr("d","M"+j+","+(Math.round(G.c2p(t))+v.width/2%1)+"h"+z).call(f.lineGroupStyle,v.width,S(t),v.dash)}),Q.selectAll("g."+G._id+"tick,path").remove();var b=j+z+(e.outlinewidth||0)/2-("outside"===e.ticks?1:0),w=s.calcTicks(G),k=s.makeTransFn(G),L=s.getTickSigns(G)[2];return s.drawTicks(r,G,{vals:"inside"===G.ticks?s.clipEnds(G,w):w,layer:Q,path:s.makeTickPath(G,b,L),transFn:k}),s.drawLabels(r,G,{vals:w,layer:Q,transFn:k,labelFns:s.makeLabelFns(G,b)})},function(){if(-1===["top","bottom"].indexOf(M)){var t=G.title.font.size,e=G._offset+G._length/2,a=l.l+(G.position||0)*l.w+("right"===G.side?10+t*(G.showticklabels?1:.5):-10-t*(G.showticklabels?.5:0));tt("h"+G._id+"title",{avoid:{selection:n.select(r).selectAll("g."+G._id+"tick"),side:M,offsetLeft:l.l,offsetTop:0,maxShift:o.width},attributes:{x:a,y:e,"text-anchor":"middle"},transform:{rotate:"-90",offset:0}})}},i.previousPromises,function(){var n=z+e.outlinewidth/2+f.bBox(Q.node()).width;if((J=K.select("text")).node()&&!J.classed(T.jsPlaceholder)){var a,o=K.select(".h"+G._id+"title-math-group").node();a=o&&-1!==["top","bottom"].indexOf(M)?f.bBox(o).width:f.bBox(K.node()).right-j-l.l,n=Math.max(n,a)}var s=2*e.xpad+n+e.borderwidth+e.outlinewidth/2,c=q-H;t.select("."+T.cbbg).attr({x:j-e.xpad-(e.borderwidth+e.outlinewidth)/2,y:H-B,width:Math.max(s,2),height:Math.max(c+2*B,2)}).call(p.fill,e.bgcolor).call(p.stroke,e.bordercolor).style("stroke-width",e.borderwidth),t.selectAll("."+T.cboutline).attr({x:j,y:H+e.ypad+("top"===M?$:0),width:Math.max(z,2),height:Math.max(c-2*e.ypad-$,2)}).call(p.stroke,e.outlinecolor).style({fill:"none","stroke-width":e.outlinewidth});var u=({center:.5,right:1}[e.xanchor]||0)*s;t.attr("transform","translate("+(l.l-u)+","+l.t+")");var h={},d=w[e.yanchor],g=k[e.yanchor];"pixels"===e.lenmode?(h.y=e.y,h.t=c*d,h.b=c*g):(h.t=h.b=0,h.yt=e.y+e.len*d,h.yb=e.y-e.len*g);var v=w[e.xanchor],m=k[e.xanchor];if("pixels"===e.thicknessmode)h.x=e.x,h.l=s*v,h.r=s*m;else{var y=s-z;h.l=y*v,h.r=y*m,h.xl=e.x-e.thickness*v,h.xr=e.x+e.thickness*m}i.autoMargin(r,e._id,h)}],r)}(r,e,t);v&&v.then&&(t._promises||[]).push(v),t._context.edits.colorbarPosition&&function(t,e,r){var n,a,i,s=r._fullLayout._size;l.init({element:t.node(),gd:r,prepFn:function(){n=t.attr("transform"),h(t)},moveFn:function(r,o){t.attr("transform",n+" translate("+r+","+o+")"),a=l.align(e._xLeftFrac+r/s.w,e._thickFrac,0,1,e.xanchor),i=l.align(e._yBottomFrac-o/s.h,e._lenFrac,0,1,e.yanchor);var c=l.getCursor(a,i,e.xanchor,e.yanchor);h(t,c)},doneFn:function(){if(h(t),void 0!==a&&void 0!==i){var n={};n[e._propPrefix+"x"]=a,n[e._propPrefix+"y"]=i,void 0!==e._traceIndex?o.call("_guiRestyle",r,n,e._traceIndex):o.call("_guiRelayout",r,n)}}})}(r,e,t)}),e.exit().each(function(e){i.autoMargin(t,e._id)}).remove(),e.order()}}},{"../../constants/alignment":686,"../../lib":717,"../../lib/extend":708,"../../lib/setcursor":737,"../../lib/svg_text_utils":741,"../../plots/cartesian/axes":765,"../../plots/cartesian/axis_defaults":767,"../../plots/cartesian/layout_attributes":777,"../../plots/cartesian/position_defaults":780,"../../plots/plots":826,"../../registry":846,"../color":591,"../colorscale/helpers":602,"../dragelement":609,"../drawing":612,"../titles":679,"./constants":593,d3:165,tinycolor2:535}],596:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t){return n.isPlainObject(t.colorbar)}},{"../../lib":717}],597:[function(t,e,r){"use strict";e.exports={moduleType:"component",name:"colorbar",attributes:t("./attributes"),supplyDefaults:t("./defaults"),draw:t("./draw").draw,hasColorbar:t("./has_colorbar")}},{"./attributes":592,"./defaults":594,"./draw":595,"./has_colorbar":596}],598:[function(t,e,r){"use strict";var n=t("../colorbar/attributes"),a=t("../../lib/regex").counter,i=t("./scales.js").scales;Object.keys(i);function o(t){return"`"+t+"`"}e.exports=function(t,e){t=t||"";var r,s=(e=e||{}).cLetter||"c",l=("onlyIfNumerical"in e?e.onlyIfNumerical:Boolean(t),"noScale"in e?e.noScale:"marker.line"===t),c="showScaleDflt"in e?e.showScaleDflt:"z"===s,u="string"==typeof e.colorscaleDflt?i[e.colorscaleDflt]:null,h=e.editTypeOverride||"",f=t?t+".":"";"colorAttr"in e?(r=e.colorAttr,e.colorAttr):o(f+(r={z:"z",c:"color"}[s]));var p=s+"auto",d=s+"min",g=s+"max",v=s+"mid",m=(o(f+p),o(f+d),o(f+g),{});m[d]=m[g]=void 0;var y={};y[p]=!1;var x={};return"color"===r&&(x.color={valType:"color",arrayOk:!0,editType:h||"style"},e.anim&&(x.color.anim=!0)),x[p]={valType:"boolean",dflt:!0,editType:"calc",impliedEdits:m},x[d]={valType:"number",dflt:null,editType:h||"plot",impliedEdits:y},x[g]={valType:"number",dflt:null,editType:h||"plot",impliedEdits:y},x[v]={valType:"number",dflt:null,editType:"calc",impliedEdits:m},x.colorscale={valType:"colorscale",editType:"calc",dflt:u,impliedEdits:{autocolorscale:!1}},x.autocolorscale={valType:"boolean",dflt:!1!==e.autoColorDflt,editType:"calc",impliedEdits:{colorscale:void 0}},x.reversescale={valType:"boolean",dflt:!1,editType:"plot"},l||(x.showscale={valType:"boolean",dflt:c,editType:"calc"},x.colorbar=n),e.noColorAxis||(x.coloraxis={valType:"subplotid",regex:a("coloraxis"),dflt:null,editType:"calc"}),x}},{"../../lib/regex":733,"../colorbar/attributes":592,"./scales.js":606}],599:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("./helpers").extractOpts;e.exports=function(t,e,r){var o,s=t._fullLayout,l=r.vals,c=r.containerStr,u=c?a.nestedProperty(e,c).get():e,h=i(u),f=!1!==h.auto,p=h.min,d=h.max,g=h.mid,v=function(){return a.aggNums(Math.min,null,l)},m=function(){return a.aggNums(Math.max,null,l)};(void 0===p?p=v():f&&(p=u._colorAx&&n(p)?Math.min(p,v()):v()),void 0===d?d=m():f&&(d=u._colorAx&&n(d)?Math.max(d,m()):m()),f&&void 0!==g&&(d-g>g-p?p=g-(d-g):d-g<g-p&&(d=g+(g-p))),p===d&&(p-=.5,d+=.5),h._sync("min",p),h._sync("max",d),h.autocolorscale)&&(o=p*d<0?s.colorscale.diverging:p>=0?s.colorscale.sequential:s.colorscale.sequentialminus,h._sync("colorscale",o))}},{"../../lib":717,"./helpers":602,"fast-isnumeric":228}],600:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./helpers").hasColorscale,i=t("./helpers").extractOpts;e.exports=function(t,e){function r(t,e){var r=t["_"+e];void 0!==r&&(t[e]=r)}function o(t,a){var o=a.container?n.nestedProperty(t,a.container).get():t;if(o)if(o.coloraxis)o._colorAx=e[o.coloraxis];else{var s=i(o),l=s.auto;(l||void 0===s.min)&&r(o,a.min),(l||void 0===s.max)&&r(o,a.max),s.autocolorscale&&r(o,"colorscale")}}for(var s=0;s<t.length;s++){var l=t[s],c=l._module.colorbar;if(c)if(Array.isArray(c))for(var u=0;u<c.length;u++)o(l,c[u]);else o(l,c);a(l,"marker.line")&&o(l,{container:"marker.line",min:"cmin",max:"cmax"})}for(var h in e._colorAxes)o(e[h],{min:"cmin",max:"cmax"})}},{"../../lib":717,"./helpers":602}],601:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../colorbar/has_colorbar"),o=t("../colorbar/defaults"),s=t("./scales").isValid,l=t("../../registry").traceIs;function c(t,e){var r=e.slice(0,e.length-1);return e?a.nestedProperty(t,r).get()||{}:t}e.exports=function t(e,r,u,h,f){var p=f.prefix,d=f.cLetter,g="_module"in r,v=c(e,p),m=c(r,p),y=c(r._template||{},p)||{},x=function(){return delete e.coloraxis,delete r.coloraxis,t(e,r,u,h,f)};if(g){var b=u._colorAxes||{},_=h(p+"coloraxis");if(_){var w=l(r,"contour")&&a.nestedProperty(r,"contours.coloring").get()||"heatmap",k=b[_];return void(k?(k[2].push(x),k[0]!==w&&(k[0]=!1,a.warn(["Ignoring coloraxis:",_,"setting","as it is linked to incompatible colorscales."].join(" ")))):b[_]=[w,r,[x]])}}var T=v[d+"min"],M=v[d+"max"],A=n(T)&&n(M)&&T<M;h(p+d+"auto",!A)?h(p+d+"mid"):(h(p+d+"min"),h(p+d+"max"));var S,E,L=v.colorscale,C=y.colorscale;(void 0!==L&&(S=!s(L)),void 0!==C&&(S=!s(C)),h(p+"autocolorscale",S),h(p+"colorscale"),h(p+"reversescale"),"marker.line."!==p)&&(p&&g&&(E=i(v)),h(p+"showscale",E)&&(p&&y&&(m._template=y),o(v,m,u)))}},{"../../lib":717,"../../registry":846,"../colorbar/defaults":594,"../colorbar/has_colorbar":596,"./scales":606,"fast-isnumeric":228}],602:[function(t,e,r){"use strict";var n=t("d3"),a=t("tinycolor2"),i=t("fast-isnumeric"),o=t("../../lib"),s=t("../color"),l=t("./scales").isValid;var c=["showscale","autocolorscale","colorscale","reversescale","colorbar"],u=["min","max","mid","auto"];function h(t){var e,r,n,a=t._colorAx,i=a||t,o={};for(r=0;r<c.length;r++)o[n=c[r]]=i[n];if(a)for(e="c",r=0;r<u.length;r++)o[n=u[r]]=i["c"+n];else{var s;for(r=0;r<u.length;r++)(s="c"+(n=u[r]))in i?o[n]=i[s]:(s="z"+n)in i&&(o[n]=i[s]);e=s.charAt(0)}return o._sync=function(t,r){var n=-1!==u.indexOf(t)?e+t:t;i[n]=i["_"+n]=r},o}function f(t){for(var e=h(t),r=e.min,n=e.max,a=e.reversescale?p(e.colorscale):e.colorscale,i=a.length,o=new Array(i),s=new Array(i),l=0;l<i;l++){var c=a[l];o[l]=r+c[0]*(n-r),s[l]=c[1]}return{domain:o,range:s}}function p(t){for(var e=t.length,r=new Array(e),n=e-1,a=0;n>=0;n--,a++){var i=t[n];r[a]=[1-i[0],i[1]]}return r}function d(t,e){e=e||{};for(var r=t.domain,o=t.range,l=o.length,c=new Array(l),u=0;u<l;u++){var h=a(o[u]).toRgb();c[u]=[h.r,h.g,h.b,h.a]}var f,p=n.scale.linear().domain(r).range(c).clamp(!0),d=e.noNumericCheck,v=e.returnArray;return(f=d&&v?p:d?function(t){return g(p(t))}:v?function(t){return i(t)?p(t):a(t).isValid()?t:s.defaultLine}:function(t){return i(t)?g(p(t)):a(t).isValid()?t:s.defaultLine}).domain=p.domain,f.range=function(){return o},f}function g(t){var e={r:t[0],g:t[1],b:t[2],a:t[3]};return a(e).toRgbString()}e.exports={hasColorscale:function(t,e,r){var n=e?o.nestedProperty(t,e).get()||{}:t,a=n[r||"color"],s=!1;if(o.isArrayOrTypedArray(a))for(var c=0;c<a.length;c++)if(i(a[c])){s=!0;break}return o.isPlainObject(n)&&(s||!0===n.showscale||i(n.cmin)&&i(n.cmax)||l(n.colorscale)||o.isPlainObject(n.colorbar))},extractOpts:h,extractScale:f,flipScale:p,makeColorScaleFunc:d,makeColorScaleFuncFromTrace:function(t,e){return d(f(t),e)}}},{"../../lib":717,"../color":591,"./scales":606,d3:165,"fast-isnumeric":228,tinycolor2:535}],603:[function(t,e,r){"use strict";var n=t("./scales"),a=t("./helpers");e.exports={moduleType:"component",name:"colorscale",attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyLayoutDefaults:t("./layout_defaults"),handleDefaults:t("./defaults"),crossTraceDefaults:t("./cross_trace_defaults"),calc:t("./calc"),scales:n.scales,defaultScale:n.defaultScale,getScale:n.get,isValidScale:n.isValid,hasColorscale:a.hasColorscale,extractOpts:a.extractOpts,extractScale:a.extractScale,flipScale:a.flipScale,makeColorScaleFunc:a.makeColorScaleFunc,makeColorScaleFuncFromTrace:a.makeColorScaleFuncFromTrace}},{"./attributes":598,"./calc":599,"./cross_trace_defaults":600,"./defaults":601,"./helpers":602,"./layout_attributes":604,"./layout_defaults":605,"./scales":606}],604:[function(t,e,r){"use strict";var n=t("../../lib/extend").extendFlat,a=t("./attributes"),i=t("./scales").scales;e.exports={editType:"calc",colorscale:{editType:"calc",sequential:{valType:"colorscale",dflt:i.Reds,editType:"calc"},sequentialminus:{valType:"colorscale",dflt:i.Blues,editType:"calc"},diverging:{valType:"colorscale",dflt:i.RdBu,editType:"calc"}},coloraxis:n({_isSubplotObj:!0,editType:"calc"},a("",{colorAttr:"corresponding trace color array(s)",noColorAxis:!0,showScaleDflt:!0}))}},{"../../lib/extend":708,"./attributes":598,"./scales":606}],605:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plot_api/plot_template"),i=t("./layout_attributes"),o=t("./defaults");e.exports=function(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r("colorscale.sequential"),r("colorscale.sequentialminus"),r("colorscale.diverging");var s,l,c=e._colorAxes;function u(t,e){return n.coerce(s,l,i.coloraxis,t,e)}for(var h in c){var f=c[h];if(f[0])s=t[h]||{},(l=a.newContainer(e,h,"coloraxis"))._name=h,o(s,l,e,u,{prefix:"",cLetter:"c"});else{for(var p=0;p<f[2].length;p++)f[2][p]();delete e._colorAxes[h]}}}},{"../../lib":717,"../../plot_api/plot_template":755,"./defaults":601,"./layout_attributes":604}],606:[function(t,e,r){"use strict";var n=t("tinycolor2"),a={Greys:[[0,"rgb(0,0,0)"],[1,"rgb(255,255,255)"]],YlGnBu:[[0,"rgb(8,29,88)"],[.125,"rgb(37,52,148)"],[.25,"rgb(34,94,168)"],[.375,"rgb(29,145,192)"],[.5,"rgb(65,182,196)"],[.625,"rgb(127,205,187)"],[.75,"rgb(199,233,180)"],[.875,"rgb(237,248,217)"],[1,"rgb(255,255,217)"]],Greens:[[0,"rgb(0,68,27)"],[.125,"rgb(0,109,44)"],[.25,"rgb(35,139,69)"],[.375,"rgb(65,171,93)"],[.5,"rgb(116,196,118)"],[.625,"rgb(161,217,155)"],[.75,"rgb(199,233,192)"],[.875,"rgb(229,245,224)"],[1,"rgb(247,252,245)"]],YlOrRd:[[0,"rgb(128,0,38)"],[.125,"rgb(189,0,38)"],[.25,"rgb(227,26,28)"],[.375,"rgb(252,78,42)"],[.5,"rgb(253,141,60)"],[.625,"rgb(254,178,76)"],[.75,"rgb(254,217,118)"],[.875,"rgb(255,237,160)"],[1,"rgb(255,255,204)"]],Bluered:[[0,"rgb(0,0,255)"],[1,"rgb(255,0,0)"]],RdBu:[[0,"rgb(5,10,172)"],[.35,"rgb(106,137,247)"],[.5,"rgb(190,190,190)"],[.6,"rgb(220,170,132)"],[.7,"rgb(230,145,90)"],[1,"rgb(178,10,28)"]],Reds:[[0,"rgb(220,220,220)"],[.2,"rgb(245,195,157)"],[.4,"rgb(245,160,105)"],[1,"rgb(178,10,28)"]],Blues:[[0,"rgb(5,10,172)"],[.35,"rgb(40,60,190)"],[.5,"rgb(70,100,245)"],[.6,"rgb(90,120,245)"],[.7,"rgb(106,137,247)"],[1,"rgb(220,220,220)"]],Picnic:[[0,"rgb(0,0,255)"],[.1,"rgb(51,153,255)"],[.2,"rgb(102,204,255)"],[.3,"rgb(153,204,255)"],[.4,"rgb(204,204,255)"],[.5,"rgb(255,255,255)"],[.6,"rgb(255,204,255)"],[.7,"rgb(255,153,255)"],[.8,"rgb(255,102,204)"],[.9,"rgb(255,102,102)"],[1,"rgb(255,0,0)"]],Rainbow:[[0,"rgb(150,0,90)"],[.125,"rgb(0,0,200)"],[.25,"rgb(0,25,255)"],[.375,"rgb(0,152,255)"],[.5,"rgb(44,255,150)"],[.625,"rgb(151,255,0)"],[.75,"rgb(255,234,0)"],[.875,"rgb(255,111,0)"],[1,"rgb(255,0,0)"]],Portland:[[0,"rgb(12,51,131)"],[.25,"rgb(10,136,186)"],[.5,"rgb(242,211,56)"],[.75,"rgb(242,143,56)"],[1,"rgb(217,30,30)"]],Jet:[[0,"rgb(0,0,131)"],[.125,"rgb(0,60,170)"],[.375,"rgb(5,255,255)"],[.625,"rgb(255,255,0)"],[.875,"rgb(250,0,0)"],[1,"rgb(128,0,0)"]],Hot:[[0,"rgb(0,0,0)"],[.3,"rgb(230,0,0)"],[.6,"rgb(255,210,0)"],[1,"rgb(255,255,255)"]],Blackbody:[[0,"rgb(0,0,0)"],[.2,"rgb(230,0,0)"],[.4,"rgb(230,210,0)"],[.7,"rgb(255,255,255)"],[1,"rgb(160,200,255)"]],Earth:[[0,"rgb(0,0,130)"],[.1,"rgb(0,180,180)"],[.2,"rgb(40,210,40)"],[.4,"rgb(230,230,50)"],[.6,"rgb(120,70,20)"],[1,"rgb(255,255,255)"]],Electric:[[0,"rgb(0,0,0)"],[.15,"rgb(30,0,100)"],[.4,"rgb(120,0,100)"],[.6,"rgb(160,90,0)"],[.8,"rgb(230,200,0)"],[1,"rgb(255,250,220)"]],Viridis:[[0,"#440154"],[.06274509803921569,"#48186a"],[.12549019607843137,"#472d7b"],[.18823529411764706,"#424086"],[.25098039215686274,"#3b528b"],[.3137254901960784,"#33638d"],[.3764705882352941,"#2c728e"],[.4392156862745098,"#26828e"],[.5019607843137255,"#21918c"],[.5647058823529412,"#1fa088"],[.6274509803921569,"#28ae80"],[.6901960784313725,"#3fbc73"],[.7529411764705882,"#5ec962"],[.8156862745098039,"#84d44b"],[.8784313725490196,"#addc30"],[.9411764705882353,"#d8e219"],[1,"#fde725"]],Cividis:[[0,"rgb(0,32,76)"],[.058824,"rgb(0,42,102)"],[.117647,"rgb(0,52,110)"],[.176471,"rgb(39,63,108)"],[.235294,"rgb(60,74,107)"],[.294118,"rgb(76,85,107)"],[.352941,"rgb(91,95,109)"],[.411765,"rgb(104,106,112)"],[.470588,"rgb(117,117,117)"],[.529412,"rgb(131,129,120)"],[.588235,"rgb(146,140,120)"],[.647059,"rgb(161,152,118)"],[.705882,"rgb(176,165,114)"],[.764706,"rgb(192,177,109)"],[.823529,"rgb(209,191,102)"],[.882353,"rgb(225,204,92)"],[.941176,"rgb(243,219,79)"],[1,"rgb(255,233,69)"]]},i=a.RdBu;function o(t){var e=0;if(!Array.isArray(t)||t.length<2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!=+t[0][0]||1!=+t[t.length-1][0])return!1;for(var r=0;r<t.length;r++){var a=t[r];if(2!==a.length||+a[0]<e||!n(a[1]).isValid())return!1;e=+a[0]}return!0}e.exports={scales:a,defaultScale:i,get:function(t,e){if(e||(e=i),!t)return e;function r(){try{t=a[t]||JSON.parse(t)}catch(r){t=e}}return"string"==typeof t&&(r(),"string"==typeof t&&r()),o(t)?t:e},isValid:function(t){return void 0!==a[t]||o(t)}}},{tinycolor2:535}],607:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a){var i=(t-r)/(n-r),o=i+e/(n-r),s=(i+o)/2;return"left"===a||"bottom"===a?i:"center"===a||"middle"===a?s:"right"===a||"top"===a?o:i<2/3-s?i:o>4/3-s?o:s}},{}],608:[function(t,e,r){"use strict";var n=t("../../lib"),a=[["sw-resize","s-resize","se-resize"],["w-resize","move","e-resize"],["nw-resize","n-resize","ne-resize"]];e.exports=function(t,e,r,i){return t="left"===r?0:"center"===r?1:"right"===r?2:n.constrain(Math.floor(3*t),0,2),e="bottom"===i?0:"middle"===i?1:"top"===i?2:n.constrain(Math.floor(3*e),0,2),a[e][t]}},{"../../lib":717}],609:[function(t,e,r){"use strict";var n=t("mouse-event-offset"),a=t("has-hover"),i=t("has-passive-events"),o=t("../../lib").removeElement,s=t("../../plots/cartesian/constants"),l=e.exports={};l.align=t("./align"),l.getCursor=t("./cursor");var c=t("./unhover");function u(){var t=document.createElement("div");t.className="dragcover";var e=t.style;return e.position="fixed",e.left=0,e.right=0,e.top=0,e.bottom=0,e.zIndex=999999999,e.background="none",document.body.appendChild(t),t}function h(t){return n(t.changedTouches?t.changedTouches[0]:t,document.body)}l.unhover=c.wrapped,l.unhoverRaw=c.raw,l.init=function(t){var e,r,n,c,f,p,d,g,v=t.gd,m=1,y=v._context.doubleClickDelay,x=t.element;v._mouseDownTime||(v._mouseDownTime=0),x.style.pointerEvents="all",x.onmousedown=_,i?(x._ontouchstart&&x.removeEventListener("touchstart",x._ontouchstart),x._ontouchstart=_,x.addEventListener("touchstart",_,{passive:!1})):x.ontouchstart=_;var b=t.clampFn||function(t,e,r){return Math.abs(t)<r&&(t=0),Math.abs(e)<r&&(e=0),[t,e]};function _(i){v._dragged=!1,v._dragging=!0;var o=h(i);e=o[0],r=o[1],d=i.target,p=i,g=2===i.buttons||i.ctrlKey,"undefined"==typeof i.clientX&&"undefined"==typeof i.clientY&&(i.clientX=e,i.clientY=r),(n=(new Date).getTime())-v._mouseDownTime<y?m+=1:(m=1,v._mouseDownTime=n),t.prepFn&&t.prepFn(i,e,r),a&&!g?(f=u()).style.cursor=window.getComputedStyle(x).cursor:a||(f=document,c=window.getComputedStyle(document.documentElement).cursor,document.documentElement.style.cursor=window.getComputedStyle(x).cursor),document.addEventListener("mouseup",k),document.addEventListener("touchend",k),!1!==t.dragmode&&(i.preventDefault(),document.addEventListener("mousemove",w),document.addEventListener("touchmove",w,{passive:!1}))}function w(n){n.preventDefault();var a=h(n),i=t.minDrag||s.MINDRAG,o=b(a[0]-e,a[1]-r,i),c=o[0],u=o[1];(c||u)&&(v._dragged=!0,l.unhover(v)),v._dragged&&t.moveFn&&!g&&(v._dragdata={element:x,dx:c,dy:u},t.moveFn(c,u))}function k(e){if(delete v._dragdata,!1!==t.dragmode&&(e.preventDefault(),document.removeEventListener("mousemove",w),document.removeEventListener("touchmove",w)),document.removeEventListener("mouseup",k),document.removeEventListener("touchend",k),a?o(f):c&&(f.documentElement.style.cursor=c,c=null),v._dragging){if(v._dragging=!1,(new Date).getTime()-v._mouseDownTime>y&&(m=Math.max(m-1,1)),v._dragged)t.doneFn&&t.doneFn();else if(t.clickFn&&t.clickFn(m,p),!g){var r;try{r=new MouseEvent("click",e)}catch(t){var n=h(e);(r=document.createEvent("MouseEvents")).initMouseEvent("click",e.bubbles,e.cancelable,e.view,e.detail,e.screenX,e.screenY,n[0],n[1],e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget)}d.dispatchEvent(r)}v._dragging=!1,v._dragged=!1}else v._dragged=!1}},l.coverSlip=u},{"../../lib":717,"../../plots/cartesian/constants":771,"./align":607,"./cursor":608,"./unhover":610,"has-hover":411,"has-passive-events":412,"mouse-event-offset":437}],610:[function(t,e,r){"use strict";var n=t("../../lib/events"),a=t("../../lib/throttle"),i=t("../../lib/dom").getGraphDiv,o=t("../fx/constants"),s=e.exports={};s.wrapped=function(t,e,r){(t=i(t))._fullLayout&&a.clear(t._fullLayout._uid+o.HOVERID),s.raw(t,e,r)},s.raw=function(t,e){var r=t._fullLayout,a=t._hoverdata;e||(e={}),e.target&&!1===n.triggerHandler(t,"plotly_beforehover",e)||(r._hoverlayer.selectAll("g").remove(),r._hoverlayer.selectAll("line").remove(),r._hoverlayer.selectAll("circle").remove(),t._hoverdata=void 0,e.target&&a&&t.emit("plotly_unhover",{event:e,points:a}))}},{"../../lib/dom":706,"../../lib/events":707,"../../lib/throttle":742,"../fx/constants":624}],611:[function(t,e,r){"use strict";r.dash={valType:"string",values:["solid","dot","dash","longdash","dashdot","longdashdot"],dflt:"solid",editType:"style"}},{}],612:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("tinycolor2"),o=t("../../registry"),s=t("../color"),l=t("../colorscale"),c=t("../../lib"),u=t("../../lib/svg_text_utils"),h=t("../../constants/xmlns_namespaces"),f=t("../../constants/alignment").LINE_SPACING,p=t("../../constants/interactions").DESELECTDIM,d=t("../../traces/scatter/subtypes"),g=t("../../traces/scatter/make_bubble_size_func"),v=t("../../components/fx/helpers").appendArrayPointValue,m=e.exports={};m.font=function(t,e,r,n){c.isPlainObject(e)&&(n=e.color,r=e.size,e=e.family),e&&t.style("font-family",e),r+1&&t.style("font-size",r+"px"),n&&t.call(s.fill,n)},m.setPosition=function(t,e,r){t.attr("x",e).attr("y",r)},m.setSize=function(t,e,r){t.attr("width",e).attr("height",r)},m.setRect=function(t,e,r,n,a){t.call(m.setPosition,e,r).call(m.setSize,n,a)},m.translatePoint=function(t,e,r,n){var i=r.c2p(t.x),o=n.c2p(t.y);return!!(a(i)&&a(o)&&e.node())&&("text"===e.node().nodeName?e.attr("x",i).attr("y",o):e.attr("transform","translate("+i+","+o+")"),!0)},m.translatePoints=function(t,e,r){t.each(function(t){var a=n.select(this);m.translatePoint(t,a,e,r)})},m.hideOutsideRangePoint=function(t,e,r,n,a,i){e.attr("display",r.isPtWithinRange(t,a)&&n.isPtWithinRange(t,i)?null:"none")},m.hideOutsideRangePoints=function(t,e){if(e._hasClipOnAxisFalse){var r=e.xaxis,a=e.yaxis;t.each(function(e){var i=e[0].trace,s=i.xcalendar,l=i.ycalendar,c=o.traceIs(i,"bar-like")?".bartext":".point,.textpoint";t.selectAll(c).each(function(t){m.hideOutsideRangePoint(t,n.select(this),r,a,s,l)})})}},m.crispRound=function(t,e,r){return e&&a(e)?t._context.staticPlot?e:e<1?1:Math.round(e):r||0},m.singleLineStyle=function(t,e,r,n,a){e.style("fill","none");var i=(((t||[])[0]||{}).trace||{}).line||{},o=r||i.width||0,l=a||i.dash||"";s.stroke(e,n||i.color),m.dashLine(e,l,o)},m.lineGroupStyle=function(t,e,r,a){t.style("fill","none").each(function(t){var i=(((t||[])[0]||{}).trace||{}).line||{},o=e||i.width||0,l=a||i.dash||"";n.select(this).call(s.stroke,r||i.color).call(m.dashLine,l,o)})},m.dashLine=function(t,e,r){r=+r||0,e=m.dashStyle(e,r),t.style({"stroke-dasharray":e,"stroke-width":r+"px"})},m.dashStyle=function(t,e){e=+e||1;var r=Math.max(e,3);return"solid"===t?t="":"dot"===t?t=r+"px,"+r+"px":"dash"===t?t=3*r+"px,"+3*r+"px":"longdash"===t?t=5*r+"px,"+5*r+"px":"dashdot"===t?t=3*r+"px,"+r+"px,"+r+"px,"+r+"px":"longdashdot"===t&&(t=5*r+"px,"+2*r+"px,"+r+"px,"+2*r+"px"),t},m.singleFillStyle=function(t){var e=(((n.select(t.node()).data()[0]||[])[0]||{}).trace||{}).fillcolor;e&&t.call(s.fill,e)},m.fillGroupStyle=function(t){t.style("stroke-width",0).each(function(t){var e=n.select(this);t[0].trace&&e.call(s.fill,t[0].trace.fillcolor)})};var y=t("./symbol_defs");m.symbolNames=[],m.symbolFuncs=[],m.symbolNeedLines={},m.symbolNoDot={},m.symbolNoFill={},m.symbolList=[],Object.keys(y).forEach(function(t){var e=y[t],r=e.n;m.symbolList.push(r,t,r+100,t+"-open"),m.symbolNames[r]=t,m.symbolFuncs[r]=e.f,e.needLine&&(m.symbolNeedLines[r]=!0),e.noDot?m.symbolNoDot[r]=!0:m.symbolList.push(r+200,t+"-dot",r+300,t+"-open-dot"),e.noFill&&(m.symbolNoFill[r]=!0)});var x=m.symbolNames.length,b="M0,0.5L0.5,0L0,-0.5L-0.5,0Z";function _(t,e){var r=t%100;return m.symbolFuncs[r](e)+(t>=200?b:"")}m.symbolNumber=function(t){if("string"==typeof t){var e=0;t.indexOf("-open")>0&&(e=100,t=t.replace("-open","")),t.indexOf("-dot")>0&&(e+=200,t=t.replace("-dot","")),(t=m.symbolNames.indexOf(t))>=0&&(t+=e)}return t%100>=x||t>=400?0:Math.floor(Math.max(t,0))};var w={x1:1,x2:0,y1:0,y2:0},k={x1:0,x2:0,y1:1,y2:0},T=n.format("~.1f"),M={radial:{node:"radialGradient"},radialreversed:{node:"radialGradient",reversed:!0},horizontal:{node:"linearGradient",attrs:w},horizontalreversed:{node:"linearGradient",attrs:w,reversed:!0},vertical:{node:"linearGradient",attrs:k},verticalreversed:{node:"linearGradient",attrs:k,reversed:!0}};m.gradient=function(t,e,r,a,o,l){for(var u=o.length,h=M[a],f=new Array(u),p=0;p<u;p++)h.reversed?f[u-1-p]=[T(100*(1-o[p][0])),o[p][1]]:f[p]=[T(100*o[p][0]),o[p][1]];var d=e._fullLayout,g="g"+d._uid+"-"+r,v=d._defs.select(".gradients").selectAll("#"+g).data([a+f.join(";")],c.identity);v.exit().remove(),v.enter().append(h.node).each(function(){var t=n.select(this);h.attrs&&t.attr(h.attrs),t.attr("id",g);var e=t.selectAll("stop").data(f);e.exit().remove(),e.enter().append("stop"),e.each(function(t){var e=i(t[1]);n.select(this).attr({offset:t[0]+"%","stop-color":s.tinyRGB(e),"stop-opacity":e.getAlpha()})})}),t.style(l,D(g,e)).style(l+"-opacity",null);var m=function(t){return"."+t.attr("class").replace(/\s/g,".")},y=m(n.select(t.node().parentNode))+">"+m(t);d._gradientUrlQueryParts[y]=1},m.initGradients=function(t){var e=t._fullLayout;c.ensureSingle(e._defs,"g","gradients").selectAll("linearGradient,radialGradient").remove(),e._gradientUrlQueryParts={}},m.pointStyle=function(t,e,r){if(t.size()){var a=m.makePointStyleFns(e);t.each(function(t){m.singlePointStyle(t,n.select(this),e,a,r)})}},m.singlePointStyle=function(t,e,r,n,a){var i=r.marker,o=i.line;if(e.style("opacity",n.selectedOpacityFn?n.selectedOpacityFn(t):void 0===t.mo?i.opacity:t.mo),n.ms2mrc){var l;l="various"===t.ms||"various"===i.size?3:n.ms2mrc(t.ms),t.mrc=l,n.selectedSizeFn&&(l=t.mrc=n.selectedSizeFn(t));var u=m.symbolNumber(t.mx||i.symbol)||0;t.om=u%200>=100,e.attr("d",_(u,l))}var h,f,p,d=!1;if(t.so)p=o.outlierwidth,f=o.outliercolor,h=i.outliercolor;else{var g=(o||{}).width;p=(t.mlw+1||g+1||(t.trace?(t.trace.marker.line||{}).width:0)+1)-1||0,f="mlc"in t?t.mlcc=n.lineScale(t.mlc):c.isArrayOrTypedArray(o.color)?s.defaultLine:o.color,c.isArrayOrTypedArray(i.color)&&(h=s.defaultLine,d=!0),h="mc"in t?t.mcc=n.markerScale(t.mc):i.color||"rgba(0,0,0,0)",n.selectedColorFn&&(h=n.selectedColorFn(t))}if(t.om)e.call(s.stroke,h).style({"stroke-width":(p||1)+"px",fill:"none"});else{e.style("stroke-width",(t.isBlank?0:p)+"px");var v=i.gradient,y=t.mgt;if(y?d=!0:y=v&&v.type,Array.isArray(y)&&(y=y[0],M[y]||(y=0)),y&&"none"!==y){var x=t.mgc;x?d=!0:x=v.color;var b=r.uid;d&&(b+="-"+t.i),m.gradient(e,a,b,y,[[0,x],[1,h]],"fill")}else s.fill(e,h);p&&s.stroke(e,f)}},m.makePointStyleFns=function(t){var e={},r=t.marker;return e.markerScale=m.tryColorscale(r,""),e.lineScale=m.tryColorscale(r,"line"),o.traceIs(t,"symbols")&&(e.ms2mrc=d.isBubble(t)?g(t):function(){return(r.size||6)/2}),t.selectedpoints&&c.extendFlat(e,m.makeSelectedPointStyleFns(t)),e},m.makeSelectedPointStyleFns=function(t){var e={},r=t.selected||{},n=t.unselected||{},a=t.marker||{},i=r.marker||{},s=n.marker||{},l=a.opacity,u=i.opacity,h=s.opacity,f=void 0!==u,d=void 0!==h;(c.isArrayOrTypedArray(l)||f||d)&&(e.selectedOpacityFn=function(t){var e=void 0===t.mo?a.opacity:t.mo;return t.selected?f?u:e:d?h:p*e});var g=a.color,v=i.color,m=s.color;(v||m)&&(e.selectedColorFn=function(t){var e=t.mcc||g;return t.selected?v||e:m||e});var y=a.size,x=i.size,b=s.size,_=void 0!==x,w=void 0!==b;return o.traceIs(t,"symbols")&&(_||w)&&(e.selectedSizeFn=function(t){var e=t.mrc||y/2;return t.selected?_?x/2:e:w?b/2:e}),e},m.makeSelectedTextStyleFns=function(t){var e={},r=t.selected||{},n=t.unselected||{},a=t.textfont||{},i=r.textfont||{},o=n.textfont||{},l=a.color,c=i.color,u=o.color;return e.selectedTextColorFn=function(t){var e=t.tc||l;return t.selected?c||e:u||(c?e:s.addOpacity(e,p))},e},m.selectedPointStyle=function(t,e){if(t.size()&&e.selectedpoints){var r=m.makeSelectedPointStyleFns(e),a=e.marker||{},i=[];r.selectedOpacityFn&&i.push(function(t,e){t.style("opacity",r.selectedOpacityFn(e))}),r.selectedColorFn&&i.push(function(t,e){s.fill(t,r.selectedColorFn(e))}),r.selectedSizeFn&&i.push(function(t,e){var n=e.mx||a.symbol||0,i=r.selectedSizeFn(e);t.attr("d",_(m.symbolNumber(n),i)),e.mrc2=i}),i.length&&t.each(function(t){for(var e=n.select(this),r=0;r<i.length;r++)i[r](e,t)})}},m.tryColorscale=function(t,e){var r=e?c.nestedProperty(t,e).get():t;if(r){var n=r.color;if((r.colorscale||r._colorAx)&&c.isArrayOrTypedArray(n))return l.makeColorScaleFuncFromTrace(r)}return c.identity};var A={start:1,end:-1,middle:0,bottom:1,top:-1};function S(t,e,r,a){var i=n.select(t.node().parentNode),o=-1!==e.indexOf("top")?"top":-1!==e.indexOf("bottom")?"bottom":"middle",s=-1!==e.indexOf("left")?"end":-1!==e.indexOf("right")?"start":"middle",l=a?a/.8+1:0,c=(u.lineCount(t)-1)*f+1,h=A[s]*l,p=.75*r+A[o]*l+(A[o]-1)*c*r/2;t.attr("text-anchor",s),i.attr("transform","translate("+h+","+p+")")}function E(t,e){var r=t.ts||e.textfont.size;return a(r)&&r>0?r:0}m.textPointStyle=function(t,e,r){if(t.size()){var a;if(e.selectedpoints){var i=m.makeSelectedTextStyleFns(e);a=i.selectedTextColorFn}var o=e.texttemplate,s=r._fullLayout;t.each(function(t){var i=n.select(this),l=o?c.extractOption(t,e,"txt","texttemplate"):c.extractOption(t,e,"tx","text");if(l||0===l){if(o){var h=e._module.formatLabels?e._module.formatLabels(t,e,s):{},f={};v(f,e,t.i);var p=e._meta||{};l=c.texttemplateString(l,h,s._d3locale,f,t,p)}var d=t.tp||e.textposition,g=E(t,e),y=a?a(t):t.tc||e.textfont.color;i.call(m.font,t.tf||e.textfont.family,g,y).text(l).call(u.convertToTspans,r).call(S,d,g,t.mrc)}else i.remove()})}},m.selectedTextStyle=function(t,e){if(t.size()&&e.selectedpoints){var r=m.makeSelectedTextStyleFns(e);t.each(function(t){var a=n.select(this),i=r.selectedTextColorFn(t),o=t.tp||e.textposition,l=E(t,e);s.fill(a,i),S(a,o,l,t.mrc2||t.mrc)})}};var L=.5;function C(t,e,r,a){var i=t[0]-e[0],o=t[1]-e[1],s=r[0]-e[0],l=r[1]-e[1],c=Math.pow(i*i+o*o,L/2),u=Math.pow(s*s+l*l,L/2),h=(u*u*i-c*c*s)*a,f=(u*u*o-c*c*l)*a,p=3*u*(c+u),d=3*c*(c+u);return[[n.round(e[0]+(p&&h/p),2),n.round(e[1]+(p&&f/p),2)],[n.round(e[0]-(d&&h/d),2),n.round(e[1]-(d&&f/d),2)]]}m.smoothopen=function(t,e){if(t.length<3)return"M"+t.join("L");var r,n="M"+t[0],a=[];for(r=1;r<t.length-1;r++)a.push(C(t[r-1],t[r],t[r+1],e));for(n+="Q"+a[0][0]+" "+t[1],r=2;r<t.length-1;r++)n+="C"+a[r-2][1]+" "+a[r-1][0]+" "+t[r];return n+="Q"+a[t.length-3][1]+" "+t[t.length-1]},m.smoothclosed=function(t,e){if(t.length<3)return"M"+t.join("L")+"Z";var r,n="M"+t[0],a=t.length-1,i=[C(t[a],t[0],t[1],e)];for(r=1;r<a;r++)i.push(C(t[r-1],t[r],t[r+1],e));for(i.push(C(t[a-1],t[a],t[0],e)),r=1;r<=a;r++)n+="C"+i[r-1][1]+" "+i[r][0]+" "+t[r];return n+="C"+i[a][1]+" "+i[0][0]+" "+t[0]+"Z"};var P={hv:function(t,e){return"H"+n.round(e[0],2)+"V"+n.round(e[1],2)},vh:function(t,e){return"V"+n.round(e[1],2)+"H"+n.round(e[0],2)},hvh:function(t,e){return"H"+n.round((t[0]+e[0])/2,2)+"V"+n.round(e[1],2)+"H"+n.round(e[0],2)},vhv:function(t,e){return"V"+n.round((t[1]+e[1])/2,2)+"H"+n.round(e[0],2)+"V"+n.round(e[1],2)}},O=function(t,e){return"L"+n.round(e[0],2)+","+n.round(e[1],2)};m.steps=function(t){var e=P[t]||O;return function(t){for(var r="M"+n.round(t[0][0],2)+","+n.round(t[0][1],2),a=1;a<t.length;a++)r+=e(t[a-1],t[a]);return r}},m.makeTester=function(){var t=c.ensureSingleById(n.select("body"),"svg","js-plotly-tester",function(t){t.attr(h.svgAttrs).style({position:"absolute",left:"-10000px",top:"-10000px",width:"9000px",height:"9000px","z-index":"1"})}),e=c.ensureSingle(t,"path","js-reference-point",function(t){t.attr("d","M0,0H1V1H0Z").style({"stroke-width":0,fill:"black"})});m.tester=t,m.testref=e},m.savedBBoxes={};var z=0;function I(t){var e=t.getAttribute("data-unformatted");if(null!==e)return e+t.getAttribute("data-math")+t.getAttribute("text-anchor")+t.getAttribute("style")}function D(t,e){if(!t)return null;var r=e._context;return"url('"+(r._exportedPlot?"":r._baseUrl||"")+"#"+t+"')"}m.bBox=function(t,e,r){var a,i,o;if(r||(r=I(t)),r){if(a=m.savedBBoxes[r])return c.extendFlat({},a)}else if(1===t.childNodes.length){var s=t.childNodes[0];if(r=I(s)){var l=+s.getAttribute("x")||0,h=+s.getAttribute("y")||0,f=s.getAttribute("transform");if(!f){var p=m.bBox(s,!1,r);return l&&(p.left+=l,p.right+=l),h&&(p.top+=h,p.bottom+=h),p}if(r+="~"+l+"~"+h+"~"+f,a=m.savedBBoxes[r])return c.extendFlat({},a)}}e?i=t:(o=m.tester.node(),i=t.cloneNode(!0),o.appendChild(i)),n.select(i).attr("transform",null).call(u.positionText,0,0);var d=i.getBoundingClientRect(),g=m.testref.node().getBoundingClientRect();e||o.removeChild(i);var v={height:d.height,width:d.width,left:d.left-g.left,top:d.top-g.top,right:d.right-g.left,bottom:d.bottom-g.top};return z>=1e4&&(m.savedBBoxes={},z=0),r&&(m.savedBBoxes[r]=v),z++,c.extendFlat({},v)},m.setClipUrl=function(t,e,r){t.attr("clip-path",D(e,r))},m.getTranslate=function(t){var e=(t[t.attr?"attr":"getAttribute"]("transform")||"").replace(/.*\btranslate\((-?\d*\.?\d*)[^-\d]*(-?\d*\.?\d*)[^\d].*/,function(t,e,r){return[e,r].join(" ")}).split(" ");return{x:+e[0]||0,y:+e[1]||0}},m.setTranslate=function(t,e,r){var n=t.attr?"attr":"getAttribute",a=t.attr?"attr":"setAttribute",i=t[n]("transform")||"";return e=e||0,r=r||0,i=i.replace(/(\btranslate\(.*?\);?)/,"").trim(),i=(i+=" translate("+e+", "+r+")").trim(),t[a]("transform",i),i},m.getScale=function(t){var e=(t[t.attr?"attr":"getAttribute"]("transform")||"").replace(/.*\bscale\((\d*\.?\d*)[^\d]*(\d*\.?\d*)[^\d].*/,function(t,e,r){return[e,r].join(" ")}).split(" ");return{x:+e[0]||1,y:+e[1]||1}},m.setScale=function(t,e,r){var n=t.attr?"attr":"getAttribute",a=t.attr?"attr":"setAttribute",i=t[n]("transform")||"";return e=e||1,r=r||1,i=i.replace(/(\bscale\(.*?\);?)/,"").trim(),i=(i+=" scale("+e+", "+r+")").trim(),t[a]("transform",i),i};var R=/\s*sc.*/;m.setPointGroupScale=function(t,e,r){if(e=e||1,r=r||1,t){var n=1===e&&1===r?"":" scale("+e+","+r+")";t.each(function(){var t=(this.getAttribute("transform")||"").replace(R,"");t=(t+=n).trim(),this.setAttribute("transform",t)})}};var F=/translate\([^)]*\)\s*$/;m.setTextPointsScale=function(t,e,r){t&&t.each(function(){var t,a=n.select(this),i=a.select("text");if(i.node()){var o=parseFloat(i.attr("x")||0),s=parseFloat(i.attr("y")||0),l=(a.attr("transform")||"").match(F);t=1===e&&1===r?[]:["translate("+o+","+s+")","scale("+e+","+r+")","translate("+-o+","+-s+")"],l&&t.push(l),a.attr("transform",t.join(" "))}})}},{"../../components/fx/helpers":626,"../../constants/alignment":686,"../../constants/interactions":692,"../../constants/xmlns_namespaces":694,"../../lib":717,"../../lib/svg_text_utils":741,"../../registry":846,"../../traces/scatter/make_bubble_size_func":1137,"../../traces/scatter/subtypes":1144,"../color":591,"../colorscale":603,"./symbol_defs":613,d3:165,"fast-isnumeric":228,tinycolor2:535}],613:[function(t,e,r){"use strict";var n=t("d3");e.exports={circle:{n:0,f:function(t){var e=n.round(t,2);return"M"+e+",0A"+e+","+e+" 0 1,1 0,-"+e+"A"+e+","+e+" 0 0,1 "+e+",0Z"}},square:{n:1,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"H-"+e+"V-"+e+"H"+e+"Z"}},diamond:{n:2,f:function(t){var e=n.round(1.3*t,2);return"M"+e+",0L0,"+e+"L-"+e+",0L0,-"+e+"Z"}},cross:{n:3,f:function(t){var e=n.round(.4*t,2),r=n.round(1.2*t,2);return"M"+r+","+e+"H"+e+"V"+r+"H-"+e+"V"+e+"H-"+r+"V-"+e+"H-"+e+"V-"+r+"H"+e+"V-"+e+"H"+r+"Z"}},x:{n:4,f:function(t){var e=n.round(.8*t/Math.sqrt(2),2),r="l"+e+","+e,a="l"+e+",-"+e,i="l-"+e+",-"+e,o="l-"+e+","+e;return"M0,"+e+r+a+i+a+i+o+i+o+r+o+r+"Z"}},"triangle-up":{n:5,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return"M-"+e+","+n.round(t/2,2)+"H"+e+"L0,-"+n.round(t,2)+"Z"}},"triangle-down":{n:6,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return"M-"+e+",-"+n.round(t/2,2)+"H"+e+"L0,"+n.round(t,2)+"Z"}},"triangle-left":{n:7,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return"M"+n.round(t/2,2)+",-"+e+"V"+e+"L-"+n.round(t,2)+",0Z"}},"triangle-right":{n:8,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return"M-"+n.round(t/2,2)+",-"+e+"V"+e+"L"+n.round(t,2)+",0Z"}},"triangle-ne":{n:9,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return"M-"+r+",-"+e+"H"+e+"V"+r+"Z"}},"triangle-se":{n:10,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return"M"+e+",-"+r+"V"+e+"H-"+r+"Z"}},"triangle-sw":{n:11,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return"M"+r+","+e+"H-"+e+"V-"+r+"Z"}},"triangle-nw":{n:12,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return"M-"+e+","+r+"V-"+e+"H"+r+"Z"}},pentagon:{n:13,f:function(t){var e=n.round(.951*t,2),r=n.round(.588*t,2),a=n.round(-t,2),i=n.round(-.309*t,2);return"M"+e+","+i+"L"+r+","+n.round(.809*t,2)+"H-"+r+"L-"+e+","+i+"L0,"+a+"Z"}},hexagon:{n:14,f:function(t){var e=n.round(t,2),r=n.round(t/2,2),a=n.round(t*Math.sqrt(3)/2,2);return"M"+a+",-"+r+"V"+r+"L0,"+e+"L-"+a+","+r+"V-"+r+"L0,-"+e+"Z"}},hexagon2:{n:15,f:function(t){var e=n.round(t,2),r=n.round(t/2,2),a=n.round(t*Math.sqrt(3)/2,2);return"M-"+r+","+a+"H"+r+"L"+e+",0L"+r+",-"+a+"H-"+r+"L-"+e+",0Z"}},octagon:{n:16,f:function(t){var e=n.round(.924*t,2),r=n.round(.383*t,2);return"M-"+r+",-"+e+"H"+r+"L"+e+",-"+r+"V"+r+"L"+r+","+e+"H-"+r+"L-"+e+","+r+"V-"+r+"Z"}},star:{n:17,f:function(t){var e=1.4*t,r=n.round(.225*e,2),a=n.round(.951*e,2),i=n.round(.363*e,2),o=n.round(.588*e,2),s=n.round(-e,2),l=n.round(-.309*e,2),c=n.round(.118*e,2),u=n.round(.809*e,2);return"M"+r+","+l+"H"+a+"L"+i+","+c+"L"+o+","+u+"L0,"+n.round(.382*e,2)+"L-"+o+","+u+"L-"+i+","+c+"L-"+a+","+l+"H-"+r+"L0,"+s+"Z"}},hexagram:{n:18,f:function(t){var e=n.round(.66*t,2),r=n.round(.38*t,2),a=n.round(.76*t,2);return"M-"+a+",0l-"+r+",-"+e+"h"+a+"l"+r+",-"+e+"l"+r+","+e+"h"+a+"l-"+r+","+e+"l"+r+","+e+"h-"+a+"l-"+r+","+e+"l-"+r+",-"+e+"h-"+a+"Z"}},"star-triangle-up":{n:19,f:function(t){var e=n.round(t*Math.sqrt(3)*.8,2),r=n.round(.8*t,2),a=n.round(1.6*t,2),i=n.round(4*t,2),o="A "+i+","+i+" 0 0 1 ";return"M-"+e+","+r+o+e+","+r+o+"0,-"+a+o+"-"+e+","+r+"Z"}},"star-triangle-down":{n:20,f:function(t){var e=n.round(t*Math.sqrt(3)*.8,2),r=n.round(.8*t,2),a=n.round(1.6*t,2),i=n.round(4*t,2),o="A "+i+","+i+" 0 0 1 ";return"M"+e+",-"+r+o+"-"+e+",-"+r+o+"0,"+a+o+e+",-"+r+"Z"}},"star-square":{n:21,f:function(t){var e=n.round(1.1*t,2),r=n.round(2*t,2),a="A "+r+","+r+" 0 0 1 ";return"M-"+e+",-"+e+a+"-"+e+","+e+a+e+","+e+a+e+",-"+e+a+"-"+e+",-"+e+"Z"}},"star-diamond":{n:22,f:function(t){var e=n.round(1.4*t,2),r=n.round(1.9*t,2),a="A "+r+","+r+" 0 0 1 ";return"M-"+e+",0"+a+"0,"+e+a+e+",0"+a+"0,-"+e+a+"-"+e+",0Z"}},"diamond-tall":{n:23,f:function(t){var e=n.round(.7*t,2),r=n.round(1.4*t,2);return"M0,"+r+"L"+e+",0L0,-"+r+"L-"+e+",0Z"}},"diamond-wide":{n:24,f:function(t){var e=n.round(1.4*t,2),r=n.round(.7*t,2);return"M0,"+r+"L"+e+",0L0,-"+r+"L-"+e+",0Z"}},hourglass:{n:25,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"H-"+e+"L"+e+",-"+e+"H-"+e+"Z"},noDot:!0},bowtie:{n:26,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"V-"+e+"L-"+e+","+e+"V-"+e+"Z"},noDot:!0},"circle-cross":{n:27,f:function(t){var e=n.round(t,2);return"M0,"+e+"V-"+e+"M"+e+",0H-"+e+"M"+e+",0A"+e+","+e+" 0 1,1 0,-"+e+"A"+e+","+e+" 0 0,1 "+e+",0Z"},needLine:!0,noDot:!0},"circle-x":{n:28,f:function(t){var e=n.round(t,2),r=n.round(t/Math.sqrt(2),2);return"M"+r+","+r+"L-"+r+",-"+r+"M"+r+",-"+r+"L-"+r+","+r+"M"+e+",0A"+e+","+e+" 0 1,1 0,-"+e+"A"+e+","+e+" 0 0,1 "+e+",0Z"},needLine:!0,noDot:!0},"square-cross":{n:29,f:function(t){var e=n.round(t,2);return"M0,"+e+"V-"+e+"M"+e+",0H-"+e+"M"+e+","+e+"H-"+e+"V-"+e+"H"+e+"Z"},needLine:!0,noDot:!0},"square-x":{n:30,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"L-"+e+",-"+e+"M"+e+",-"+e+"L-"+e+","+e+"M"+e+","+e+"H-"+e+"V-"+e+"H"+e+"Z"},needLine:!0,noDot:!0},"diamond-cross":{n:31,f:function(t){var e=n.round(1.3*t,2);return"M"+e+",0L0,"+e+"L-"+e+",0L0,-"+e+"ZM0,-"+e+"V"+e+"M-"+e+",0H"+e},needLine:!0,noDot:!0},"diamond-x":{n:32,f:function(t){var e=n.round(1.3*t,2),r=n.round(.65*t,2);return"M"+e+",0L0,"+e+"L-"+e+",0L0,-"+e+"ZM-"+r+",-"+r+"L"+r+","+r+"M-"+r+","+r+"L"+r+",-"+r},needLine:!0,noDot:!0},"cross-thin":{n:33,f:function(t){var e=n.round(1.4*t,2);return"M0,"+e+"V-"+e+"M"+e+",0H-"+e},needLine:!0,noDot:!0,noFill:!0},"x-thin":{n:34,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"L-"+e+",-"+e+"M"+e+",-"+e+"L-"+e+","+e},needLine:!0,noDot:!0,noFill:!0},asterisk:{n:35,f:function(t){var e=n.round(1.2*t,2),r=n.round(.85*t,2);return"M0,"+e+"V-"+e+"M"+e+",0H-"+e+"M"+r+","+r+"L-"+r+",-"+r+"M"+r+",-"+r+"L-"+r+","+r},needLine:!0,noDot:!0,noFill:!0},hash:{n:36,f:function(t){var e=n.round(t/2,2),r=n.round(t,2);return"M"+e+","+r+"V-"+r+"m-"+r+",0V"+r+"M"+r+","+e+"H-"+r+"m0,-"+r+"H"+r},needLine:!0,noFill:!0},"y-up":{n:37,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),a=n.round(.8*t,2);return"M-"+e+","+a+"L0,0M"+e+","+a+"L0,0M0,-"+r+"L0,0"},needLine:!0,noDot:!0,noFill:!0},"y-down":{n:38,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),a=n.round(.8*t,2);return"M-"+e+",-"+a+"L0,0M"+e+",-"+a+"L0,0M0,"+r+"L0,0"},needLine:!0,noDot:!0,noFill:!0},"y-left":{n:39,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),a=n.round(.8*t,2);return"M"+a+","+e+"L0,0M"+a+",-"+e+"L0,0M-"+r+",0L0,0"},needLine:!0,noDot:!0,noFill:!0},"y-right":{n:40,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),a=n.round(.8*t,2);return"M-"+a+","+e+"L0,0M-"+a+",-"+e+"L0,0M"+r+",0L0,0"},needLine:!0,noDot:!0,noFill:!0},"line-ew":{n:41,f:function(t){var e=n.round(1.4*t,2);return"M"+e+",0H-"+e},needLine:!0,noDot:!0,noFill:!0},"line-ns":{n:42,f:function(t){var e=n.round(1.4*t,2);return"M0,"+e+"V-"+e},needLine:!0,noDot:!0,noFill:!0},"line-ne":{n:43,f:function(t){var e=n.round(t,2);return"M"+e+",-"+e+"L-"+e+","+e},needLine:!0,noDot:!0,noFill:!0},"line-nw":{n:44,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"L-"+e+",-"+e},needLine:!0,noDot:!0,noFill:!0}}},{d3:165}],614:[function(t,e,r){"use strict";e.exports={visible:{valType:"boolean",editType:"calc"},type:{valType:"enumerated",values:["percent","constant","sqrt","data"],editType:"calc"},symmetric:{valType:"boolean",editType:"calc"},array:{valType:"data_array",editType:"calc"},arrayminus:{valType:"data_array",editType:"calc"},value:{valType:"number",min:0,dflt:10,editType:"calc"},valueminus:{valType:"number",min:0,dflt:10,editType:"calc"},traceref:{valType:"integer",min:0,dflt:0,editType:"style"},tracerefminus:{valType:"integer",min:0,dflt:0,editType:"style"},copy_ystyle:{valType:"boolean",editType:"plot"},copy_zstyle:{valType:"boolean",editType:"style"},color:{valType:"color",editType:"style"},thickness:{valType:"number",min:0,dflt:2,editType:"style"},width:{valType:"number",min:0,editType:"plot"},editType:"calc",_deprecated:{opacity:{valType:"number",editType:"style"}}}},{}],615:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../registry"),i=t("../../plots/cartesian/axes"),o=t("../../lib"),s=t("./compute_error");function l(t,e,r,a){var l=e["error_"+a]||{},c=[];if(l.visible&&-1!==["linear","log"].indexOf(r.type)){for(var u=s(l),h=0;h<t.length;h++){var f=t[h],p=f.i;if(void 0===p)p=h;else if(null===p)continue;var d=f[a];if(n(r.c2l(d))){var g=u(d,p);if(n(g[0])&&n(g[1])){var v=f[a+"s"]=d-g[0],m=f[a+"h"]=d+g[1];c.push(v,m)}}}var y=r._id,x=e._extremes[y],b=i.findExtremes(r,c,o.extendFlat({tozero:x.opts.tozero},{padded:!0}));x.min=x.min.concat(b.min),x.max=x.max.concat(b.max)}}e.exports=function(t){for(var e=t.calcdata,r=0;r<e.length;r++){var n=e[r],o=n[0].trace;if(!0===o.visible&&a.traceIs(o,"errorBarsOK")){var s=i.getFromId(t,o.xaxis),c=i.getFromId(t,o.yaxis);l(n,o,s,"x"),l(n,o,c,"y")}}}},{"../../lib":717,"../../plots/cartesian/axes":765,"../../registry":846,"./compute_error":616,"fast-isnumeric":228}],616:[function(t,e,r){"use strict";function n(t,e){return"percent"===t?function(t){return Math.abs(t*e/100)}:"constant"===t?function(){return Math.abs(e)}:"sqrt"===t?function(t){return Math.sqrt(Math.abs(t))}:void 0}e.exports=function(t){var e=t.type,r=t.symmetric;if("data"===e){var a=t.array||[];if(r)return function(t,e){var r=+a[e];return[r,r]};var i=t.arrayminus||[];return function(t,e){var r=+a[e],n=+i[e];return isNaN(r)&&isNaN(n)?[NaN,NaN]:[n||0,r||0]}}var o=n(e,t.value),s=n(e,t.valueminus);return r||void 0===t.valueminus?function(t){var e=o(t);return[e,e]}:function(t){return[s(t),o(t)]}}},{}],617:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../registry"),i=t("../../lib"),o=t("../../plot_api/plot_template"),s=t("./attributes");e.exports=function(t,e,r,l){var c="error_"+l.axis,u=o.newContainer(e,c),h=t[c]||{};function f(t,e){return i.coerce(h,u,s,t,e)}if(!1!==f("visible",void 0!==h.array||void 0!==h.value||"sqrt"===h.type)){var p=f("type","array"in h?"data":"percent"),d=!0;"sqrt"!==p&&(d=f("symmetric",!(("data"===p?"arrayminus":"valueminus")in h))),"data"===p?(f("array"),f("traceref"),d||(f("arrayminus"),f("tracerefminus"))):"percent"!==p&&"constant"!==p||(f("value"),d||f("valueminus"));var g="copy_"+l.inherit+"style";if(l.inherit)(e["error_"+l.inherit]||{}).visible&&f(g,!(h.color||n(h.thickness)||n(h.width)));l.inherit&&u[g]||(f("color",r),f("thickness"),f("width",a.traceIs(e,"gl3d")?0:4))}}},{"../../lib":717,"../../plot_api/plot_template":755,"../../registry":846,"./attributes":614,"fast-isnumeric":228}],618:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plot_api/edit_types").overrideAll,i=t("./attributes"),o={error_x:n.extendFlat({},i),error_y:n.extendFlat({},i)};delete o.error_x.copy_zstyle,delete o.error_y.copy_zstyle,delete o.error_y.copy_ystyle;var s={error_x:n.extendFlat({},i),error_y:n.extendFlat({},i),error_z:n.extendFlat({},i)};delete s.error_x.copy_ystyle,delete s.error_y.copy_ystyle,delete s.error_z.copy_ystyle,delete s.error_z.copy_zstyle,e.exports={moduleType:"component",name:"errorbars",schema:{traces:{scatter:o,bar:o,histogram:o,scatter3d:a(s,"calc","nested"),scattergl:a(o,"calc","nested")}},supplyDefaults:t("./defaults"),calc:t("./calc"),makeComputeError:t("./compute_error"),plot:t("./plot"),style:t("./style"),hoverInfo:function(t,e,r){(e.error_y||{}).visible&&(r.yerr=t.yh-t.y,e.error_y.symmetric||(r.yerrneg=t.y-t.ys));(e.error_x||{}).visible&&(r.xerr=t.xh-t.x,e.error_x.symmetric||(r.xerrneg=t.x-t.xs))}}},{"../../lib":717,"../../plot_api/edit_types":748,"./attributes":614,"./calc":615,"./compute_error":616,"./defaults":617,"./plot":619,"./style":620}],619:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../drawing"),o=t("../../traces/scatter/subtypes");e.exports=function(t,e,r,s){var l=r.xaxis,c=r.yaxis,u=s&&s.duration>0;e.each(function(e){var h,f=e[0].trace,p=f.error_x||{},d=f.error_y||{};f.ids&&(h=function(t){return t.id});var g=o.hasMarkers(f)&&f.marker.maxdisplayed>0;d.visible||p.visible||(e=[]);var v=n.select(this).selectAll("g.errorbar").data(e,h);if(v.exit().remove(),e.length){p.visible||v.selectAll("path.xerror").remove(),d.visible||v.selectAll("path.yerror").remove(),v.style("opacity",1);var m=v.enter().append("g").classed("errorbar",!0);u&&m.style("opacity",0).transition().duration(s.duration).style("opacity",1),i.setClipUrl(v,r.layerClipId,t),v.each(function(t){var e=n.select(this),r=function(t,e,r){var n={x:e.c2p(t.x),y:r.c2p(t.y)};void 0!==t.yh&&(n.yh=r.c2p(t.yh),n.ys=r.c2p(t.ys),a(n.ys)||(n.noYS=!0,n.ys=r.c2p(t.ys,!0)));void 0!==t.xh&&(n.xh=e.c2p(t.xh),n.xs=e.c2p(t.xs),a(n.xs)||(n.noXS=!0,n.xs=e.c2p(t.xs,!0)));return n}(t,l,c);if(!g||t.vis){var i,o=e.select("path.yerror");if(d.visible&&a(r.x)&&a(r.yh)&&a(r.ys)){var h=d.width;i="M"+(r.x-h)+","+r.yh+"h"+2*h+"m-"+h+",0V"+r.ys,r.noYS||(i+="m-"+h+",0h"+2*h),!o.size()?o=e.append("path").style("vector-effect","non-scaling-stroke").classed("yerror",!0):u&&(o=o.transition().duration(s.duration).ease(s.easing)),o.attr("d",i)}else o.remove();var f=e.select("path.xerror");if(p.visible&&a(r.y)&&a(r.xh)&&a(r.xs)){var v=(p.copy_ystyle?d:p).width;i="M"+r.xh+","+(r.y-v)+"v"+2*v+"m0,-"+v+"H"+r.xs,r.noXS||(i+="m0,-"+v+"v"+2*v),!f.size()?f=e.append("path").style("vector-effect","non-scaling-stroke").classed("xerror",!0):u&&(f=f.transition().duration(s.duration).ease(s.easing)),f.attr("d",i)}else f.remove()}})}})}},{"../../traces/scatter/subtypes":1144,"../drawing":612,d3:165,"fast-isnumeric":228}],620:[function(t,e,r){"use strict";var n=t("d3"),a=t("../color");e.exports=function(t){t.each(function(t){var e=t[0].trace,r=e.error_y||{},i=e.error_x||{},o=n.select(this);o.selectAll("path.yerror").style("stroke-width",r.thickness+"px").call(a.stroke,r.color),i.copy_ystyle&&(i=r),o.selectAll("path.xerror").style("stroke-width",i.thickness+"px").call(a.stroke,i.color)})}},{"../color":591,d3:165}],621:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),a=t("./layout_attributes").hoverlabel,i=t("../../lib/extend").extendFlat;e.exports={hoverlabel:{bgcolor:i({},a.bgcolor,{arrayOk:!0}),bordercolor:i({},a.bordercolor,{arrayOk:!0}),font:n({arrayOk:!0,editType:"none"}),align:i({},a.align,{arrayOk:!0}),namelength:i({},a.namelength,{arrayOk:!0}),editType:"none"}}},{"../../lib/extend":708,"../../plots/font_attributes":791,"./layout_attributes":631}],622:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../registry");function i(t,e,r,a){a=a||n.identity,Array.isArray(t)&&(e[0][r]=a(t))}e.exports=function(t){var e=t.calcdata,r=t._fullLayout;function o(t){return function(e){return n.coerceHoverinfo({hoverinfo:e},{_module:t._module},r)}}for(var s=0;s<e.length;s++){var l=e[s],c=l[0].trace;if(!a.traceIs(c,"pie-like")){var u=a.traceIs(c,"2dMap")?i:n.fillArray;u(c.hoverinfo,l,"hi",o(c)),c.hovertemplate&&u(c.hovertemplate,l,"ht"),c.hoverlabel&&(u(c.hoverlabel.bgcolor,l,"hbg"),u(c.hoverlabel.bordercolor,l,"hbc"),u(c.hoverlabel.font.size,l,"hts"),u(c.hoverlabel.font.color,l,"htc"),u(c.hoverlabel.font.family,l,"htf"),u(c.hoverlabel.namelength,l,"hnl"),u(c.hoverlabel.align,l,"hta"))}}}},{"../../lib":717,"../../registry":846}],623:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("./hover").hover;e.exports=function(t,e,r){var i=n.getComponentMethod("annotations","onClick")(t,t._hoverdata);function o(){t.emit("plotly_click",{points:t._hoverdata,event:e})}void 0!==r&&a(t,e,r,!0),t._hoverdata&&e&&e.target&&(i&&i.then?i.then(o):o(),e.stopImmediatePropagation&&e.stopImmediatePropagation())}},{"../../registry":846,"./hover":627}],624:[function(t,e,r){"use strict";e.exports={YANGLE:60,HOVERARROWSIZE:6,HOVERTEXTPAD:3,HOVERFONTSIZE:13,HOVERFONT:"Arial, sans-serif",HOVERMINTIME:50,HOVERID:"-hover"}},{}],625:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("./hoverlabel_defaults");e.exports=function(t,e,r,o){var s=n.extendFlat({},o.hoverlabel);e.hovertemplate&&(s.namelength=-1),i(t,e,function(r,i){return n.coerce(t,e,a,r,i)},s)}},{"../../lib":717,"./attributes":621,"./hoverlabel_defaults":628}],626:[function(t,e,r){"use strict";var n=t("../../lib");r.getSubplot=function(t){return t.subplot||t.xaxis+t.yaxis||t.geo},r.isTraceInSubplots=function(t,e){if("splom"===t.type){for(var n=t.xaxes||[],a=t.yaxes||[],i=0;i<n.length;i++)for(var o=0;o<a.length;o++)if(-1!==e.indexOf(n[i]+a[o]))return!0;return!1}return-1!==e.indexOf(r.getSubplot(t))},r.flat=function(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)r[n]=e;return r},r.p2c=function(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)r[n]=t[n].p2c(e);return r},r.getDistanceFunction=function(t,e,n,a){return"closest"===t?a||r.quadrature(e,n):"x"===t.charAt(0)?e:n},r.getClosest=function(t,e,r){if(!1!==r.index)r.index>=0&&r.index<t.length?r.distance=0:r.index=!1;else for(var n=0;n<t.length;n++){var a=e(t[n]);a<=r.distance&&(r.index=n,r.distance=a)}return r},r.inbox=function(t,e,r){return t*e<0||0===t?r:1/0},r.quadrature=function(t,e){return function(r){var n=t(r),a=e(r);return Math.sqrt(n*n+a*a)}},r.makeEventData=function(t,e,n){var a="index"in t?t.index:t.pointNumber,i={data:e._input,fullData:e,curveNumber:e.index,pointNumber:a};if(e._indexToPoints){var o=e._indexToPoints[a];1===o.length?i.pointIndex=o[0]:i.pointIndices=o}else i.pointIndex=a;return e._module.eventData?i=e._module.eventData(i,t,e,n,a):("xVal"in t?i.x=t.xVal:"x"in t&&(i.x=t.x),"yVal"in t?i.y=t.yVal:"y"in t&&(i.y=t.y),t.xa&&(i.xaxis=t.xa),t.ya&&(i.yaxis=t.ya),void 0!==t.zLabelVal&&(i.z=t.zLabelVal)),r.appendArrayPointValue(i,e,a),i},r.appendArrayPointValue=function(t,e,r){var a=e._arrayAttrs;if(a)for(var s=0;s<a.length;s++){var l=a[s],c=i(l);if(void 0===t[c]){var u=o(n.nestedProperty(e,l).get(),r);void 0!==u&&(t[c]=u)}}},r.appendArrayMultiPointValues=function(t,e,r){var a=e._arrayAttrs;if(a)for(var s=0;s<a.length;s++){var l=a[s],c=i(l);if(void 0===t[c]){for(var u=n.nestedProperty(e,l).get(),h=new Array(r.length),f=0;f<r.length;f++)h[f]=o(u,r[f]);t[c]=h}}};var a={ids:"id",locations:"location",labels:"label",values:"value","marker.colors":"color",parents:"parent"};function i(t){return a[t]||t}function o(t,e){return Array.isArray(e)?Array.isArray(t)&&Array.isArray(t[e[0]])?t[e[0]][e[1]]:void 0:t[e]}var s={x:!0,y:!0},l={"x unified":!0,"y unified":!0};r.isUnifiedHover=function(t){return"string"==typeof t&&!!l[t]},r.isXYhover=function(t){return"string"==typeof t&&!!s[t]}},{"../../lib":717}],627:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("tinycolor2"),o=t("../../lib"),s=t("../../lib/events"),l=t("../../lib/svg_text_utils"),c=t("../../lib/override_cursor"),u=t("../drawing"),h=t("../color"),f=t("../dragelement"),p=t("../../plots/cartesian/axes"),d=t("../../registry"),g=t("./helpers"),v=t("./constants"),m=t("../legend/defaults"),y=t("../legend/draw"),x=v.YANGLE,b=Math.PI*x/180,_=1/Math.sin(b),w=Math.cos(b),k=Math.sin(b),T=v.HOVERARROWSIZE,M=v.HOVERTEXTPAD;function A(t){return[t.trace.index,t.index,t.x0,t.y0,t.name,t.attr,t.xa,t.ya||""].join(",")}r.hover=function(t,e,r,i){t=o.getGraphDiv(t),o.throttle(t._fullLayout._uid+v.HOVERID,v.HOVERMINTIME,function(){!function(t,e,r,i){r||(r="xy");var l=Array.isArray(r)?r:[r],u=t._fullLayout,p=u._plots||[],v=p[r],m=u._has("cartesian");if(v){var y=v.overlays.map(function(t){return t.id});l=l.concat(y)}for(var x=l.length,b=new Array(x),w=new Array(x),k=!1,T=0;T<x;T++){var M=l[T];if(p[M])k=!0,b[T]=p[M].xaxis,w[T]=p[M].yaxis;else{if(!u[M]||!u[M]._subplot)return void o.warn("Unrecognized subplot: "+M);var S=u[M]._subplot;b[T]=S.xaxis,w[T]=S.yaxis}}var L=e.hovermode||u.hovermode;L&&!k&&(L="closest");if(-1===["x","y","closest","x unified","y unified"].indexOf(L)||!t.calcdata||t.querySelector(".zoombox")||t._dragging)return f.unhoverRaw(t,e);var I,D,R,F,B,N,j,V,U,q,H,G,Y,W=-1===u.hoverdistance?1/0:u.hoverdistance,X=-1===u.spikedistance?1/0:u.spikedistance,Z=[],J=[],K={hLinePoint:null,vLinePoint:null},Q=!1;if(Array.isArray(e))for(L="array",R=0;R<e.length;R++)(B=t.calcdata[e[R].curveNumber||0])&&(N=B[0].trace,"skip"!==B[0].trace.hoverinfo&&(J.push(B),"h"===N.orientation&&(Q=!0)));else{for(F=0;F<t.calcdata.length;F++)B=t.calcdata[F],"skip"!==(N=B[0].trace).hoverinfo&&g.isTraceInSubplots(N,l)&&(J.push(B),"h"===N.orientation&&(Q=!0));var $,tt,et=!e.target;if(et)$="xpx"in e?e.xpx:b[0]._length/2,tt="ypx"in e?e.ypx:w[0]._length/2;else{if(!1===s.triggerHandler(t,"plotly_beforehover",e))return;var rt=e.target.getBoundingClientRect();if($=e.clientX-rt.left,tt=e.clientY-rt.top,$<0||$>b[0]._length||tt<0||tt>w[0]._length)return f.unhoverRaw(t,e)}if(e.pointerX=$+b[0]._offset,e.pointerY=tt+w[0]._offset,I="xval"in e?g.flat(l,e.xval):g.p2c(b,$),D="yval"in e?g.flat(l,e.yval):g.p2c(w,tt),!a(I[0])||!a(D[0]))return o.warn("Fx.hover failed",e,t),f.unhoverRaw(t,e)}var nt=1/0;function at(t,r){for(F=0;F<J.length;F++)if((B=J[F])&&B[0]&&B[0].trace&&!0===(N=B[0].trace).visible&&0!==N._length&&-1===["carpet","contourcarpet"].indexOf(N._module.name)){if("splom"===N.type?j=l[V=0]:(j=g.getSubplot(N),V=l.indexOf(j)),U=L,g.isUnifiedHover(U)&&(U=U.charAt(0)),G={cd:B,trace:N,xa:b[V],ya:w[V],maxHoverDistance:W,maxSpikeDistance:X,index:!1,distance:Math.min(nt,W),spikeDistance:1/0,xSpike:void 0,ySpike:void 0,color:h.defaultLine,name:N.name,x0:void 0,x1:void 0,y0:void 0,y1:void 0,xLabelVal:void 0,yLabelVal:void 0,zLabelVal:void 0,text:void 0},u[j]&&(G.subplot=u[j]._subplot),u._splomScenes&&u._splomScenes[N.uid]&&(G.scene=u._splomScenes[N.uid]),Y=Z.length,"array"===U){var n=e[F];"pointNumber"in n?(G.index=n.pointNumber,U="closest"):(U="","xval"in n&&(q=n.xval,U="x"),"yval"in n&&(H=n.yval,U=U?"closest":"y"))}else void 0!==t&&void 0!==r?(q=t,H=r):(q=I[V],H=D[V]);if(0!==W)if(N._module&&N._module.hoverPoints){var i=N._module.hoverPoints(G,q,H,U,u._hoverlayer);if(i)for(var s,c=0;c<i.length;c++)s=i[c],a(s.x0)&&a(s.y0)&&Z.push(P(s,L))}else o.log("Unrecognized trace type in hover:",N);if("closest"===L&&Z.length>Y&&(Z.splice(0,Y),nt=Z[0].distance),m&&0!==X&&0===Z.length){G.distance=X,G.index=!1;var f=N._module.hoverPoints(G,q,H,"closest",u._hoverlayer);if(f&&(f=f.filter(function(t){return t.spikeDistance<=X})),f&&f.length){var p,d=f.filter(function(t){return t.xa.showspikes&&"hovered data"!==t.xa.spikesnap});if(d.length){var v=d[0];a(v.x0)&&a(v.y0)&&(p=ot(v),(!K.vLinePoint||K.vLinePoint.spikeDistance>p.spikeDistance)&&(K.vLinePoint=p))}var y=f.filter(function(t){return t.ya.showspikes&&"hovered data"!==t.ya.spikesnap});if(y.length){var x=y[0];a(x.x0)&&a(x.y0)&&(p=ot(x),(!K.hLinePoint||K.hLinePoint.spikeDistance>p.spikeDistance)&&(K.hLinePoint=p))}}}}}function it(t,e){for(var r,n=null,a=1/0,i=0;i<t.length;i++)(r=t[i].spikeDistance)<=a&&r<=e&&(n=t[i],a=r);return n}function ot(t){return t?{xa:t.xa,ya:t.ya,x:void 0!==t.xSpike?t.xSpike:(t.x0+t.x1)/2,y:void 0!==t.ySpike?t.ySpike:(t.y0+t.y1)/2,distance:t.distance,spikeDistance:t.spikeDistance,curveNumber:t.trace.index,color:t.color,pointNumber:t.index}:null}at();var st={fullLayout:u,container:u._hoverlayer,outerContainer:u._paperdiv,event:e},lt=t._spikepoints,ct={vLinePoint:K.vLinePoint,hLinePoint:K.hLinePoint};if(t._spikepoints=ct,m&&0!==X&&0!==Z.length){var ut=Z.filter(function(t){return t.ya.showspikes}),ht=it(ut,X);K.hLinePoint=ot(ht);var ft=Z.filter(function(t){return t.xa.showspikes}),pt=it(ft,X);K.vLinePoint=ot(pt)}if(0===Z.length){var dt=f.unhoverRaw(t,e);return!m||null===K.hLinePoint&&null===K.vLinePoint||z(lt)&&O(t,K,st),dt}m&&z(lt)&&O(t,K,st);if(Z.sort(function(t,e){return t.distance-e.distance}),g.isXYhover(U)&&0!==Z[0].length&&"splom"!==Z[0].trace.type){var gt=Z[0],vt=gt.cd[gt.index],mt="group"===u.boxmode||"group"===u.violinmode,yt=gt.xVal,xt=gt.xa;"category"===xt.type&&(yt=xt._categoriesMap[yt]),"date"===xt.type&&(yt=xt.d2c(yt)),vt&&vt.t&&vt.t.posLetter===xt._id&&mt&&(yt+=vt.t.dPos);var bt=gt.yVal;"category"===(xt=gt.ya).type&&(bt=xt._categoriesMap[bt]),"date"===xt.type&&(bt=xt.d2c(bt)),vt&&vt.t&&vt.t.posLetter===xt._id&&mt&&(bt+=vt.t.dPos),at(yt,bt);var _t={};Z=Z.filter(function(t){var e=A(t);if(!_t[e])return _t[e]=!0,_t[e]})}var wt=t._hoverdata,kt=[];for(R=0;R<Z.length;R++){var Tt=Z[R],Mt=g.makeEventData(Tt,Tt.trace,Tt.cd);if(!1!==Tt.hovertemplate){var At=!1;Tt.cd[Tt.index]&&Tt.cd[Tt.index].ht&&(At=Tt.cd[Tt.index].ht),Tt.hovertemplate=At||Tt.trace.hovertemplate||!1}Tt.eventData=[Mt],kt.push(Mt)}t._hoverdata=kt;var St="y"===L&&(J.length>1||Z.length>1)||"closest"===L&&Q&&Z.length>1,Et=h.combine(u.plot_bgcolor||h.background,u.paper_bgcolor),Lt={hovermode:L,rotateLabels:St,bgColor:Et,container:u._hoverlayer,outerContainer:u._paperdiv,commonLabelOpts:u.hoverlabel,hoverdistance:u.hoverdistance},Ct=E(Z,Lt,t);g.isUnifiedHover(L)||(!function(t,e,r){var n,a,i,o,s,l,c,u=0,h=1,f=t.size(),p=new Array(f),d=0;function g(t){var e=t[0],r=t[t.length-1];if(a=e.pmin-e.pos-e.dp+e.size,i=r.pos+r.dp+r.size-e.pmax,a>.01){for(s=t.length-1;s>=0;s--)t[s].dp+=a;n=!1}if(!(i<.01)){if(a<-.01){for(s=t.length-1;s>=0;s--)t[s].dp-=i;n=!1}if(n){var c=0;for(o=0;o<t.length;o++)(l=t[o]).pos+l.dp+l.size>e.pmax&&c++;for(o=t.length-1;o>=0&&!(c<=0);o--)(l=t[o]).pos>e.pmax-1&&(l.del=!0,c--);for(o=0;o<t.length&&!(c<=0);o++)if((l=t[o]).pos<e.pmin+1)for(l.del=!0,c--,i=2*l.size,s=t.length-1;s>=0;s--)t[s].dp-=i;for(o=t.length-1;o>=0&&!(c<=0);o--)(l=t[o]).pos+l.dp+l.size>e.pmax&&(l.del=!0,c--)}}}t.each(function(t){var n=t[e],a="x"===n._id.charAt(0),i=n.range;0===d&&i&&i[0]>i[1]!==a&&(h=-1),p[d++]=[{datum:t,traceIndex:t.trace.index,dp:0,pos:t.pos,posref:t.posref,size:t.by*(a?_:1)/2,pmin:0,pmax:a?r.width:r.height}]}),p.sort(function(t,e){return t[0].posref-e[0].posref||h*(e[0].traceIndex-t[0].traceIndex)});for(;!n&&u<=f;){for(u++,n=!0,o=0;o<p.length-1;){var v=p[o],m=p[o+1],y=v[v.length-1],x=m[0];if((a=y.pos+y.dp+y.size-x.pos-x.dp+x.size)>.01&&y.pmin===x.pmin&&y.pmax===x.pmax){for(s=m.length-1;s>=0;s--)m[s].dp+=a;for(v.push.apply(v,m),p.splice(o+1,1),c=0,s=v.length-1;s>=0;s--)c+=v[s].dp;for(i=c/v.length,s=v.length-1;s>=0;s--)v[s].dp-=i;n=!1}else o++}p.forEach(g)}for(o=p.length-1;o>=0;o--){var b=p[o];for(s=b.length-1;s>=0;s--){var w=b[s],k=w.datum;k.offset=w.dp,k.del=w.del}}}(Ct,St?"xa":"ya",u),C(Ct,St));if(e.target&&e.target.tagName){var Pt=d.getComponentMethod("annotations","hasClickToShow")(t,kt);c(n.select(e.target),Pt?"pointer":"")}if(!e.target||i||!function(t,e,r){if(!r||r.length!==t._hoverdata.length)return!0;for(var n=r.length-1;n>=0;n--){var a=r[n],i=t._hoverdata[n];if(a.curveNumber!==i.curveNumber||String(a.pointNumber)!==String(i.pointNumber)||String(a.pointNumbers)!==String(i.pointNumbers))return!0}return!1}(t,0,wt))return;wt&&t.emit("plotly_unhover",{event:e,points:wt});t.emit("plotly_hover",{event:e,points:t._hoverdata,xaxes:b,yaxes:w,xvals:I,yvals:D})}(t,e,r,i)})},r.loneHover=function(t,e){var r=!0;Array.isArray(t)||(r=!1,t=[t]);var a=t.map(function(t){return{color:t.color||h.defaultLine,x0:t.x0||t.x||0,x1:t.x1||t.x||0,y0:t.y0||t.y||0,y1:t.y1||t.y||0,xLabel:t.xLabel,yLabel:t.yLabel,zLabel:t.zLabel,text:t.text,name:t.name,idealAlign:t.idealAlign,borderColor:t.borderColor,fontFamily:t.fontFamily,fontSize:t.fontSize,fontColor:t.fontColor,nameLength:t.nameLength,textAlign:t.textAlign,trace:t.trace||{index:0,hoverinfo:""},xa:{_offset:0},ya:{_offset:0},index:0,hovertemplate:t.hovertemplate||!1,eventData:t.eventData||!1,hovertemplateLabels:t.hovertemplateLabels||!1}}),i=n.select(e.container),o=e.outerContainer?n.select(e.outerContainer):i,s={hovermode:"closest",rotateLabels:!1,bgColor:e.bgColor||h.background,container:i,outerContainer:o},l=E(a,s,e.gd),c=0,u=0;return l.sort(function(t,e){return t.y0-e.y0}).each(function(t,r){var n=t.y0-t.by/2;t.offset=n-5<c?c-n+5:0,c=n+t.by+t.offset,r===e.anchorIndex&&(u=t.offset)}).each(function(t){t.offset-=u}),C(l,s.rotateLabels),r?l:l.node()};var S=/<extra>([\s\S]*)<\/extra>/;function E(t,e,r){var a=r._fullLayout,i=e.hovermode,s=e.rotateLabels,c=e.bgColor,f=e.container,p=e.outerContainer,d=e.commonLabelOpts||{},b=e.fontFamily||v.HOVERFONT,_=e.fontSize||v.HOVERFONTSIZE,w=t[0],k=w.xa,S=w.ya,E="y"===i.charAt(0)?"yLabel":"xLabel",C=w[E],P=(String(C)||"").split(" ")[0],O=p.node().getBoundingClientRect(),z=O.top,I=O.width,D=O.height,R=void 0!==C&&w.distance<=e.hoverdistance&&("x"===i||"y"===i);if(R){var F,B,N=!0;for(F=0;F<t.length;F++)if(N&&void 0===t[F].zLabel&&(N=!1),B=t[F].hoverinfo||t[F].trace.hoverinfo){var j=Array.isArray(B)?B:B.split("+");if(-1===j.indexOf("all")&&-1===j.indexOf(i)){R=!1;break}}N&&(R=!1)}var V=f.selectAll("g.axistext").data(R?[0]:[]);function U(t){return t.filter(function(t){return void 0!==t.zLabelVal||(t[E]||"").split(" ")[0]===P})}if(V.enter().append("g").classed("axistext",!0),V.exit().remove(),V.each(function(){var e=n.select(this),s=o.ensureSingle(e,"path","",function(t){t.style({"stroke-width":"1px"})}),c=o.ensureSingle(e,"text","",function(t){t.attr("data-notex",1)}),f=d.bgcolor||h.defaultLine,p=d.bordercolor||h.contrast(f),g=h.contrast(f),v={family:d.font.family||b,size:d.font.size||_,color:d.font.color||g};s.style({fill:f,stroke:p}),c.text(C).call(u.font,v).call(l.positionText,0,0).call(l.convertToTspans,r),e.attr("transform","");var m,y,x=c.node().getBoundingClientRect();if("x"===i){var A="top"===k.side?"-":"";c.attr("text-anchor","middle").call(l.positionText,0,"top"===k.side?z-x.bottom-T-M:z-x.top+T+M),m=k._offset+(w.x0+w.x1)/2,y=S._offset+("top"===k.side?0:S._length);var E=x.width/2+M;m<E?(m=E,s.attr("d","M-"+(E-T)+",0L-"+(E-2*T)+","+A+T+"H"+(M+x.width/2)+"v"+A+(2*M+x.height)+"H-"+E+"V"+A+T+"Z")):m>a.width-E?(m=a.width-E,s.attr("d","M"+(E-T)+",0L"+E+","+A+T+"v"+A+(2*M+x.height)+"H-"+E+"V"+A+T+"H"+(E-2*T)+"Z")):s.attr("d","M0,0L"+T+","+A+T+"H"+(M+x.width/2)+"v"+A+(2*M+x.height)+"H-"+(M+x.width/2)+"V"+A+T+"H-"+T+"Z")}else{var L,P,O;"right"===S.side?(L="start",P=1,O="",m=k._offset+k._length):(L="end",P=-1,O="-",m=k._offset),y=S._offset+(w.y0+w.y1)/2,c.attr("text-anchor",L),s.attr("d","M0,0L"+O+T+","+T+"V"+(M+x.height/2)+"h"+O+(2*M+x.width)+"V-"+(M+x.height/2)+"H"+O+T+"V-"+T+"Z");var I,D=x.height/2,R=z-x.top-D,F="clip"+a._uid+"commonlabel"+S._id;if(m<x.width+2*M+T){I="M-"+(T+M)+"-"+D+"h-"+(x.width-M)+"V"+D+"h"+(x.width-M)+"Z";var B=x.width-m+M;l.positionText(c,B,R),"end"===L&&c.selectAll("tspan").each(function(){var t=n.select(this),e=u.tester.append("text").text(t.text()).call(u.font,v),r=e.node().getBoundingClientRect();Math.round(r.width)<Math.round(x.width)&&t.attr("x",B-r.width),e.remove()})}else l.positionText(c,P*(M+T),R),I=null;var N=a._topclips.selectAll("#"+F).data(I?[0]:[]);N.enter().append("clipPath").attr("id",F).append("path"),N.exit().remove(),N.select("path").attr("d",I),u.setClipUrl(c,I?F:null,r)}e.attr("transform","translate("+m+","+y+")"),t=U(t)}),g.isUnifiedHover(i)){if(f.selectAll("g.hovertext").remove(),void 0!==C&&w.distance<=e.hoverdistance&&(t=U(t)),0===t.length)return;var q={showlegend:!0,legend:{title:{text:C,font:a.hoverlabel.font},font:a.hoverlabel.font,bgcolor:a.hoverlabel.bgcolor,bordercolor:a.hoverlabel.bordercolor,borderwidth:1,tracegroupgap:7,traceorder:a.legend?a.legend.traceorder:void 0,orientation:"v"}},H={};m(q,H,r._fullData);var G=H.legend;G.entries=[];for(var Y=0;Y<t.length;Y++){var W=L(t[Y],!0,i,a,C),X=W[0],Z=W[1],J=t[Y];J.name=Z,J.text=""!==Z?Z+" : "+X:X;var K=J.cd[J.index];K&&(K.mc&&(J.mc=K.mc),K.mcc&&(J.mc=K.mcc),K.mlc&&(J.mlc=K.mlc),K.mlcc&&(J.mlc=K.mlcc),K.mlw&&(J.mlw=K.mlw),K.mrc&&(J.mrc=K.mrc),K.dir&&(J.dir=K.dir)),J._distinct=!0,G.entries.push([J])}G.entries.sort(function(t,e){return t[0].trace.index-e[0].trace.index}),G.layer=f,y(r,G);var Q=o.mean(t.map(function(t){return(t.y0+t.y1)/2})),$=o.mean(t.map(function(t){return(t.x0+t.x1)/2})),tt=f.select("g.legend"),et=tt.node().getBoundingClientRect();$+=k._offset,Q+=S._offset-et.height/2;var rt=et.width+2*M;!($+rt<=I)&&$-rt>=0?$-=rt:$+=2*M;var nt=et.height+2*M,at=Q+nt>=D;return nt<=D&&(Q<=z?Q=S._offset+2*M:at&&(Q=D-nt)),tt.attr("transform","translate("+$+","+Q+")"),tt}var it=f.selectAll("g.hovertext").data(t,function(t){return A(t)});return it.enter().append("g").classed("hovertext",!0).each(function(){var t=n.select(this);t.append("rect").call(h.fill,h.addOpacity(c,.8)),t.append("text").classed("name",!0),t.append("path").style("stroke-width","1px"),t.append("text").classed("nums",!0).call(u.font,b,_)}),it.exit().remove(),it.each(function(t){var e=n.select(this).attr("transform",""),o=t.bgcolor||t.color,f=h.combine(h.opacity(o)?o:h.defaultLine,c),p=h.combine(h.opacity(t.color)?t.color:h.defaultLine,c),d=t.borderColor||h.contrast(f),g=L(t,R,i,a,C,e),v=g[0],m=g[1],y=e.select("text.nums").call(u.font,t.fontFamily||b,t.fontSize||_,t.fontColor||d).text(v).attr("data-notex",1).call(l.positionText,0,0).call(l.convertToTspans,r),w=e.select("text.name"),k=0,A=0;if(m&&m!==v){w.call(u.font,t.fontFamily||b,t.fontSize||_,p).text(m).attr("data-notex",1).call(l.positionText,0,0).call(l.convertToTspans,r);var S=w.node().getBoundingClientRect();k=S.width+2*M,A=S.height+2*M}else w.remove(),e.select("rect").remove();e.select("path").style({fill:f,stroke:d});var E,P,O=y.node().getBoundingClientRect(),F=t.xa._offset+(t.x0+t.x1)/2,B=t.ya._offset+(t.y0+t.y1)/2,N=Math.abs(t.x1-t.x0),j=Math.abs(t.y1-t.y0),V=O.width+T+M+k;if(t.ty0=z-O.top,t.bx=O.width+2*M,t.by=Math.max(O.height+2*M,A),t.anchor="start",t.txwidth=O.width,t.tx2width=k,t.offset=0,s)t.pos=F,E=B+j/2+V<=D,P=B-j/2-V>=0,"top"!==t.idealAlign&&E||!P?E?(B+=j/2,t.anchor="start"):t.anchor="middle":(B-=j/2,t.anchor="end");else if(t.pos=B,E=F+N/2+V<=I,P=F-N/2-V>=0,"left"!==t.idealAlign&&E||!P)if(E)F+=N/2,t.anchor="start";else{t.anchor="middle";var U=V/2,q=F+U-I,H=F-U;q>0&&(F-=q),H<0&&(F+=-H)}else F-=N/2,t.anchor="end";y.attr("text-anchor",t.anchor),k&&w.attr("text-anchor",t.anchor),e.attr("transform","translate("+F+","+B+")"+(s?"rotate("+x+")":""))}),it}function L(t,e,r,n,a,i){var s="",l="";void 0!==t.nameOverride&&(t.name=t.nameOverride),t.name&&(t.trace._meta&&(t.name=o.templateString(t.name,t.trace._meta)),s=I(t.name,t.nameLength)),void 0!==t.zLabel?(void 0!==t.xLabel&&(l+="x: "+t.xLabel+"<br>"),void 0!==t.yLabel&&(l+="y: "+t.yLabel+"<br>"),"choropleth"!==t.trace.type&&"choroplethmapbox"!==t.trace.type&&(l+=(l?"z: ":"")+t.zLabel)):e&&t[r.charAt(0)+"Label"]===a?l=t[("x"===r.charAt(0)?"y":"x")+"Label"]||"":void 0===t.xLabel?void 0!==t.yLabel&&"scattercarpet"!==t.trace.type&&(l=t.yLabel):l=void 0===t.yLabel?t.xLabel:"("+t.xLabel+", "+t.yLabel+")",!t.text&&0!==t.text||Array.isArray(t.text)||(l+=(l?"<br>":"")+t.text),void 0!==t.extraText&&(l+=(l?"<br>":"")+t.extraText),i&&""===l&&!t.hovertemplate&&(""===s&&i.remove(),l=s);var c=n._d3locale,u=t.hovertemplate||!1,h=t.hovertemplateLabels||t,f=t.eventData[0]||{};return u&&(l=(l=o.hovertemplateString(u,h,c,f,t.trace._meta)).replace(S,function(e,r){return s=I(r,t.nameLength),""})),[l,s]}function C(t,e){t.each(function(t){var r=n.select(this);if(t.del)return r.remove();var a=r.select("text.nums"),i=t.anchor,o="end"===i?-1:1,s={start:1,end:-1,middle:0}[i],c=s*(T+M),h=c+s*(t.txwidth+M),f=0,p=t.offset;"middle"===i&&(c-=t.tx2width/2,h+=t.txwidth/2+M),e&&(p*=-k,f=t.offset*w),r.select("path").attr("d","middle"===i?"M-"+(t.bx/2+t.tx2width/2)+","+(p-t.by/2)+"h"+t.bx+"v"+t.by+"h-"+t.bx+"Z":"M0,0L"+(o*T+f)+","+(T+p)+"v"+(t.by/2-T)+"h"+o*t.bx+"v-"+t.by+"H"+(o*T+f)+"V"+(p-T)+"Z");var d=c+f,g=p+t.ty0-t.by/2+M,v=t.textAlign||"auto";"auto"!==v&&("left"===v&&"start"!==i?(a.attr("text-anchor","start"),d="middle"===i?-t.bx/2-t.tx2width/2+M:-t.bx-M):"right"===v&&"end"!==i&&(a.attr("text-anchor","end"),d="middle"===i?t.bx/2-t.tx2width/2-M:t.bx+M)),a.call(l.positionText,d,g),t.tx2width&&(r.select("text.name").call(l.positionText,h+s*M+f,p+t.ty0-t.by/2+M),r.select("rect").call(u.setRect,h+(s-1)*t.tx2width/2+f,p-t.by/2-1,t.tx2width,t.by+2))})}function P(t,e){var r=t.index,n=t.trace||{},i=t.cd[0],s=t.cd[r]||{};function l(t){return t||a(t)&&0===t}var c=Array.isArray(r)?function(t,e){var a=o.castOption(i,r,t);return l(a)?a:o.extractOption({},n,"",e)}:function(t,e){return o.extractOption(s,n,t,e)};function u(e,r,n){var a=c(r,n);l(a)&&(t[e]=a)}if(u("hoverinfo","hi","hoverinfo"),u("bgcolor","hbg","hoverlabel.bgcolor"),u("borderColor","hbc","hoverlabel.bordercolor"),u("fontFamily","htf","hoverlabel.font.family"),u("fontSize","hts","hoverlabel.font.size"),u("fontColor","htc","hoverlabel.font.color"),u("nameLength","hnl","hoverlabel.namelength"),u("textAlign","hta","hoverlabel.align"),t.posref="y"===e||"closest"===e&&"h"===n.orientation?t.xa._offset+(t.x0+t.x1)/2:t.ya._offset+(t.y0+t.y1)/2,t.x0=o.constrain(t.x0,0,t.xa._length),t.x1=o.constrain(t.x1,0,t.xa._length),t.y0=o.constrain(t.y0,0,t.ya._length),t.y1=o.constrain(t.y1,0,t.ya._length),void 0!==t.xLabelVal&&(t.xLabel="xLabel"in t?t.xLabel:p.hoverLabelText(t.xa,t.xLabelVal),t.xVal=t.xa.c2d(t.xLabelVal)),void 0!==t.yLabelVal&&(t.yLabel="yLabel"in t?t.yLabel:p.hoverLabelText(t.ya,t.yLabelVal),t.yVal=t.ya.c2d(t.yLabelVal)),void 0!==t.zLabelVal&&void 0===t.zLabel&&(t.zLabel=String(t.zLabelVal)),!(isNaN(t.xerr)||"log"===t.xa.type&&t.xerr<=0)){var h=p.tickText(t.xa,t.xa.c2l(t.xerr),"hover").text;void 0!==t.xerrneg?t.xLabel+=" +"+h+" / -"+p.tickText(t.xa,t.xa.c2l(t.xerrneg),"hover").text:t.xLabel+=" \xb1 "+h,"x"===e&&(t.distance+=1)}if(!(isNaN(t.yerr)||"log"===t.ya.type&&t.yerr<=0)){var f=p.tickText(t.ya,t.ya.c2l(t.yerr),"hover").text;void 0!==t.yerrneg?t.yLabel+=" +"+f+" / -"+p.tickText(t.ya,t.ya.c2l(t.yerrneg),"hover").text:t.yLabel+=" \xb1 "+f,"y"===e&&(t.distance+=1)}var d=t.hoverinfo||t.trace.hoverinfo;return d&&"all"!==d&&(-1===(d=Array.isArray(d)?d:d.split("+")).indexOf("x")&&(t.xLabel=void 0),-1===d.indexOf("y")&&(t.yLabel=void 0),-1===d.indexOf("z")&&(t.zLabel=void 0),-1===d.indexOf("text")&&(t.text=void 0),-1===d.indexOf("name")&&(t.name=void 0)),t}function O(t,e,r){var n,a,o=r.container,s=r.fullLayout,l=s._size,c=r.event,f=!!e.hLinePoint,d=!!e.vLinePoint;if(o.selectAll(".spikeline").remove(),d||f){var g=h.combine(s.plot_bgcolor,s.paper_bgcolor);if(f){var v,m,y=e.hLinePoint;n=y&&y.xa,"cursor"===(a=y&&y.ya).spikesnap?(v=c.pointerX,m=c.pointerY):(v=n._offset+y.x,m=a._offset+y.y);var x,b,_=i.readability(y.color,g)<1.5?h.contrast(g):y.color,w=a.spikemode,k=a.spikethickness,T=a.spikecolor||_,M=p.getPxPosition(t,a);if(-1!==w.indexOf("toaxis")||-1!==w.indexOf("across")){if(-1!==w.indexOf("toaxis")&&(x=M,b=v),-1!==w.indexOf("across")){var A=a._counterDomainMin,S=a._counterDomainMax;"free"===a.anchor&&(A=Math.min(A,a.position),S=Math.max(S,a.position)),x=l.l+A*l.w,b=l.l+S*l.w}o.insert("line",":first-child").attr({x1:x,x2:b,y1:m,y2:m,"stroke-width":k,stroke:T,"stroke-dasharray":u.dashStyle(a.spikedash,k)}).classed("spikeline",!0).classed("crisp",!0),o.insert("line",":first-child").attr({x1:x,x2:b,y1:m,y2:m,"stroke-width":k+2,stroke:g}).classed("spikeline",!0).classed("crisp",!0)}-1!==w.indexOf("marker")&&o.insert("circle",":first-child").attr({cx:M+("right"!==a.side?k:-k),cy:m,r:k,fill:T}).classed("spikeline",!0)}if(d){var E,L,C=e.vLinePoint;n=C&&C.xa,a=C&&C.ya,"cursor"===n.spikesnap?(E=c.pointerX,L=c.pointerY):(E=n._offset+C.x,L=a._offset+C.y);var P,O,z=i.readability(C.color,g)<1.5?h.contrast(g):C.color,I=n.spikemode,D=n.spikethickness,R=n.spikecolor||z,F=p.getPxPosition(t,n);if(-1!==I.indexOf("toaxis")||-1!==I.indexOf("across")){if(-1!==I.indexOf("toaxis")&&(P=F,O=L),-1!==I.indexOf("across")){var B=n._counterDomainMin,N=n._counterDomainMax;"free"===n.anchor&&(B=Math.min(B,n.position),N=Math.max(N,n.position)),P=l.t+(1-N)*l.h,O=l.t+(1-B)*l.h}o.insert("line",":first-child").attr({x1:E,x2:E,y1:P,y2:O,"stroke-width":D,stroke:R,"stroke-dasharray":u.dashStyle(n.spikedash,D)}).classed("spikeline",!0).classed("crisp",!0),o.insert("line",":first-child").attr({x1:E,x2:E,y1:P,y2:O,"stroke-width":D+2,stroke:g}).classed("spikeline",!0).classed("crisp",!0)}-1!==I.indexOf("marker")&&o.insert("circle",":first-child").attr({cx:E,cy:F-("top"!==n.side?D:-D),r:D,fill:R}).classed("spikeline",!0)}}}function z(t,e){return!e||(e.vLinePoint!==t._spikepoints.vLinePoint||e.hLinePoint!==t._spikepoints.hLinePoint)}function I(t,e){return l.plainText(t||"",{len:e,allowedTags:["br","sub","sup","b","i","em"]})}},{"../../lib":717,"../../lib/events":707,"../../lib/override_cursor":728,"../../lib/svg_text_utils":741,"../../plots/cartesian/axes":765,"../../registry":846,"../color":591,"../dragelement":609,"../drawing":612,"../legend/defaults":642,"../legend/draw":643,"./constants":624,"./helpers":626,d3:165,"fast-isnumeric":228,tinycolor2:535}],628:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../color"),i=t("./helpers").isUnifiedHover;e.exports=function(t,e,r,o){function s(t){o.font[t]||(o.font[t]=e.legend?e.legend.font[t]:e.font[t])}o=o||{},e&&i(e.hovermode)&&(o.font||(o.font={}),s("size"),s("family"),s("color"),e.legend?(o.bgcolor||(o.bgcolor=a.combine(e.legend.bgcolor,e.paper_bgcolor)),o.bordercolor||(o.bordercolor=e.legend.bordercolor)):o.bgcolor||(o.bgcolor=e.paper_bgcolor)),r("hoverlabel.bgcolor",o.bgcolor),r("hoverlabel.bordercolor",o.bordercolor),r("hoverlabel.namelength",o.namelength),n.coerceFont(r,"hoverlabel.font",o.font),r("hoverlabel.align",o.align)}},{"../../lib":717,"../color":591,"./helpers":626}],629:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e,r){function i(r,i){return void 0!==e[r]?e[r]:n.coerce(t,e,a,r,i)}var o,s=i("clickmode");return e._has("cartesian")?s.indexOf("select")>-1?o="closest":(e._isHoriz=function(t,e){for(var r=e._scatterStackOpts||{},n=0;n<t.length;n++){var a=t[n],i=a.xaxis+a.yaxis,o=r[i]||{},s=o[a.stackgroup]||{};if("h"!==a.orientation&&"h"!==s.orientation)return!1}return!0}(r,e),o=e._isHoriz?"y":"x"):o="closest",i("hovermode",o)}},{"../../lib":717,"./layout_attributes":631}],630:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../dragelement"),o=t("./helpers"),s=t("./layout_attributes"),l=t("./hover");e.exports={moduleType:"component",name:"fx",constants:t("./constants"),schema:{layout:s},attributes:t("./attributes"),layoutAttributes:s,supplyLayoutGlobalDefaults:t("./layout_global_defaults"),supplyDefaults:t("./defaults"),supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc"),getDistanceFunction:o.getDistanceFunction,getClosest:o.getClosest,inbox:o.inbox,quadrature:o.quadrature,appendArrayPointValue:o.appendArrayPointValue,castHoverOption:function(t,e,r){return a.castOption(t,e,"hoverlabel."+r)},castHoverinfo:function(t,e,r){return a.castOption(t,r,"hoverinfo",function(r){return a.coerceHoverinfo({hoverinfo:r},{_module:t._module},e)})},hover:l.hover,unhover:i.unhover,loneHover:l.loneHover,loneUnhover:function(t){var e=a.isD3Selection(t)?t:n.select(t);e.selectAll("g.hovertext").remove(),e.selectAll(".spikeline").remove()},click:t("./click")}},{"../../lib":717,"../dragelement":609,"./attributes":621,"./calc":622,"./click":623,"./constants":624,"./defaults":625,"./helpers":626,"./hover":627,"./layout_attributes":631,"./layout_defaults":632,"./layout_global_defaults":633,d3:165}],631:[function(t,e,r){"use strict";var n=t("./constants"),a=t("../../plots/font_attributes")({editType:"none"});a.family.dflt=n.HOVERFONT,a.size.dflt=n.HOVERFONTSIZE,e.exports={clickmode:{valType:"flaglist",flags:["event","select"],dflt:"event",editType:"plot",extras:["none"]},dragmode:{valType:"enumerated",values:["zoom","pan","select","lasso","orbit","turntable",!1],dflt:"zoom",editType:"modebar"},hovermode:{valType:"enumerated",values:["x","y","closest",!1,"x unified","y unified"],editType:"modebar"},hoverdistance:{valType:"integer",min:-1,dflt:20,editType:"none"},spikedistance:{valType:"integer",min:-1,dflt:20,editType:"none"},hoverlabel:{bgcolor:{valType:"color",editType:"none"},bordercolor:{valType:"color",editType:"none"},font:a,align:{valType:"enumerated",values:["left","right","auto"],dflt:"auto",editType:"none"},namelength:{valType:"integer",min:-1,dflt:15,editType:"none"},editType:"none"},selectdirection:{valType:"enumerated",values:["h","v","d","any"],dflt:"any",editType:"none"}}},{"../../plots/font_attributes":791,"./constants":624}],632:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./helpers").isUnifiedHover,i=t("./layout_attributes"),o=t("./hovermode_defaults"),s=t("./hoverlabel_defaults");e.exports=function(t,e,r){function l(r,a){return n.coerce(t,e,i,r,a)}var c=o(t,e,r);c&&(l("hoverdistance"),l("spikedistance",a(c)?-1:void 0)),"select"===l("dragmode")&&l("selectdirection");var u=e._has("mapbox"),h=e._has("geo"),f=e._basePlotModules.length;"zoom"===e.dragmode&&((u||h)&&1===f||u&&h&&2===f)&&(e.dragmode="pan"),s(t,e,l)}},{"../../lib":717,"./helpers":626,"./hoverlabel_defaults":628,"./hovermode_defaults":629,"./layout_attributes":631}],633:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./hoverlabel_defaults"),i=t("./layout_attributes");e.exports=function(t,e){a(t,e,function(r,a){return n.coerce(t,e,i,r,a)})}},{"../../lib":717,"./hoverlabel_defaults":628,"./layout_attributes":631}],634:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../lib/regex").counter,i=t("../../plots/domain").attributes,o=t("../../plots/cartesian/constants").idRegex,s=t("../../plot_api/plot_template"),l={rows:{valType:"integer",min:1,editType:"plot"},roworder:{valType:"enumerated",values:["top to bottom","bottom to top"],dflt:"top to bottom",editType:"plot"},columns:{valType:"integer",min:1,editType:"plot"},subplots:{valType:"info_array",freeLength:!0,dimensions:2,items:{valType:"enumerated",values:[a("xy").toString(),""],editType:"plot"},editType:"plot"},xaxes:{valType:"info_array",freeLength:!0,items:{valType:"enumerated",values:[o.x.toString(),""],editType:"plot"},editType:"plot"},yaxes:{valType:"info_array",freeLength:!0,items:{valType:"enumerated",values:[o.y.toString(),""],editType:"plot"},editType:"plot"},pattern:{valType:"enumerated",values:["independent","coupled"],dflt:"coupled",editType:"plot"},xgap:{valType:"number",min:0,max:1,editType:"plot"},ygap:{valType:"number",min:0,max:1,editType:"plot"},domain:i({name:"grid",editType:"plot",noGridCell:!0},{}),xside:{valType:"enumerated",values:["bottom","bottom plot","top plot","top"],dflt:"bottom plot",editType:"plot"},yside:{valType:"enumerated",values:["left","left plot","right plot","right"],dflt:"left plot",editType:"plot"},editType:"plot"};function c(t,e,r){var n=e[r+"axes"],a=Object.keys((t._splomAxes||{})[r]||{});return Array.isArray(n)?n:a.length?a:void 0}function u(t,e,r,n,a,i){var o=e(t+"gap",r),s=e("domain."+t);e(t+"side",n);for(var l=new Array(a),c=s[0],u=(s[1]-c)/(a-o),h=u*(1-o),f=0;f<a;f++){var p=c+u*f;l[i?a-1-f:f]=[p,p+h]}return l}function h(t,e,r,n,a){var i,o=new Array(r);function s(t,r){-1!==e.indexOf(r)&&void 0===n[r]?(o[t]=r,n[r]=t):o[t]=""}if(Array.isArray(t))for(i=0;i<r;i++)s(i,t[i]);else for(s(0,a),i=1;i<r;i++)s(i,a+(i+1));return o}e.exports={moduleType:"component",name:"grid",schema:{layout:{grid:l}},layoutAttributes:l,sizeDefaults:function(t,e){var r=t.grid||{},a=c(e,r,"x"),i=c(e,r,"y");if(t.grid||a||i){var o,h,f=Array.isArray(r.subplots)&&Array.isArray(r.subplots[0]),p=Array.isArray(a),d=Array.isArray(i),g=p&&a!==r.xaxes&&d&&i!==r.yaxes;f?(o=r.subplots.length,h=r.subplots[0].length):(d&&(o=i.length),p&&(h=a.length));var v=s.newContainer(e,"grid"),m=T("rows",o),y=T("columns",h);if(m*y>1){f||p||d||"independent"===T("pattern")&&(f=!0),v._hasSubplotGrid=f;var x,b,_="top to bottom"===T("roworder"),w=f?.2:.1,k=f?.3:.1;g&&e._splomGridDflt&&(x=e._splomGridDflt.xside,b=e._splomGridDflt.yside),v._domains={x:u("x",T,w,x,y),y:u("y",T,k,b,m,_)}}else delete e.grid}function T(t,e){return n.coerce(r,v,l,t,e)}},contentDefaults:function(t,e){var r=e.grid;if(r&&r._domains){var n,a,i,o,s,l,u,f=t.grid||{},p=e._subplots,d=r._hasSubplotGrid,g=r.rows,v=r.columns,m="independent"===r.pattern,y=r._axisMap={};if(d){var x=f.subplots||[];l=r.subplots=new Array(g);var b=1;for(n=0;n<g;n++){var _=l[n]=new Array(v),w=x[n]||[];for(a=0;a<v;a++)if(m?(s=1===b?"xy":"x"+b+"y"+b,b++):s=w[a],_[a]="",-1!==p.cartesian.indexOf(s)){if(u=s.indexOf("y"),i=s.slice(0,u),o=s.slice(u),void 0!==y[i]&&y[i]!==a||void 0!==y[o]&&y[o]!==n)continue;_[a]=s,y[i]=a,y[o]=n}}}else{var k=c(e,f,"x"),T=c(e,f,"y");r.xaxes=h(k,p.xaxis,v,y,"x"),r.yaxes=h(T,p.yaxis,g,y,"y")}var M=r._anchors={},A="top to bottom"===r.roworder;for(var S in y){var E,L,C,P=S.charAt(0),O=r[P+"side"];if(O.length<8)M[S]="free";else if("x"===P){if("t"===O.charAt(0)===A?(E=0,L=1,C=g):(E=g-1,L=-1,C=-1),d){var z=y[S];for(n=E;n!==C;n+=L)if((s=l[n][z])&&(u=s.indexOf("y"),s.slice(0,u)===S)){M[S]=s.slice(u);break}}else for(n=E;n!==C;n+=L)if(o=r.yaxes[n],-1!==p.cartesian.indexOf(S+o)){M[S]=o;break}}else if("l"===O.charAt(0)?(E=0,L=1,C=v):(E=v-1,L=-1,C=-1),d){var I=y[S];for(n=E;n!==C;n+=L)if((s=l[I][n])&&(u=s.indexOf("y"),s.slice(u)===S)){M[S]=s.slice(0,u);break}}else for(n=E;n!==C;n+=L)if(i=r.xaxes[n],-1!==p.cartesian.indexOf(i+S)){M[S]=i;break}}}}}},{"../../lib":717,"../../lib/regex":733,"../../plot_api/plot_template":755,"../../plots/cartesian/constants":771,"../../plots/domain":790}],635:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/constants"),a=t("../../plot_api/plot_template").templatedArray;e.exports=a("image",{visible:{valType:"boolean",dflt:!0,editType:"arraydraw"},source:{valType:"string",editType:"arraydraw"},layer:{valType:"enumerated",values:["below","above"],dflt:"above",editType:"arraydraw"},sizex:{valType:"number",dflt:0,editType:"arraydraw"},sizey:{valType:"number",dflt:0,editType:"arraydraw"},sizing:{valType:"enumerated",values:["fill","contain","stretch"],dflt:"contain",editType:"arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},x:{valType:"any",dflt:0,editType:"arraydraw"},y:{valType:"any",dflt:0,editType:"arraydraw"},xanchor:{valType:"enumerated",values:["left","center","right"],dflt:"left",editType:"arraydraw"},yanchor:{valType:"enumerated",values:["top","middle","bottom"],dflt:"top",editType:"arraydraw"},xref:{valType:"enumerated",values:["paper",n.idRegex.x.toString()],dflt:"paper",editType:"arraydraw"},yref:{valType:"enumerated",values:["paper",n.idRegex.y.toString()],dflt:"paper",editType:"arraydraw"},editType:"arraydraw"})},{"../../plot_api/plot_template":755,"../../plots/cartesian/constants":771}],636:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib/to_log_range");e.exports=function(t,e,r,i){e=e||{};var o="log"===r&&"linear"===e.type,s="linear"===r&&"log"===e.type;if(o||s)for(var l,c,u=t._fullLayout.images,h=e._id.charAt(0),f=0;f<u.length;f++)if(c="images["+f+"].",(l=u[f])[h+"ref"]===e._id){var p=l[h],d=l["size"+h],g=null,v=null;if(o){g=a(p,e.range);var m=d/Math.pow(10,g)/2;v=2*Math.log(m+Math.sqrt(1+m*m))/Math.LN10}else v=(g=Math.pow(10,p))*(Math.pow(10,d/2)-Math.pow(10,-d/2));n(g)?n(v)||(v=null):(g=null,v=null),i(c+h,g),i(c+"size"+h,v)}}},{"../../lib/to_log_range":743,"fast-isnumeric":228}],637:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../../plots/array_container_defaults"),o=t("./attributes");function s(t,e,r){function i(r,a){return n.coerce(t,e,o,r,a)}var s=i("source");if(!i("visible",!!s))return e;i("layer"),i("xanchor"),i("yanchor"),i("sizex"),i("sizey"),i("sizing"),i("opacity");for(var l={_fullLayout:r},c=["x","y"],u=0;u<2;u++){var h=c[u],f=a.coerceRef(t,e,l,h,"paper");if("paper"!==f)a.getFromId(l,f)._imgIndices.push(e._index);a.coercePosition(e,l,i,f,h,0)}return e}e.exports=function(t,e){i(t,e,{name:"images",handleItemDefaults:s})}},{"../../lib":717,"../../plots/array_container_defaults":761,"../../plots/cartesian/axes":765,"./attributes":635}],638:[function(t,e,r){"use strict";var n=t("d3"),a=t("../drawing"),i=t("../../plots/cartesian/axes"),o=t("../../constants/xmlns_namespaces");e.exports=function(t){var e,r,s=t._fullLayout,l=[],c={},u=[];for(r=0;r<s.images.length;r++){var h=s.images[r];if(h.visible)if("below"===h.layer&&"paper"!==h.xref&&"paper"!==h.yref){e=h.xref+h.yref;var f=s._plots[e];if(!f){u.push(h);continue}f.mainplot&&(e=f.mainplot.id),c[e]||(c[e]=[]),c[e].push(h)}else"above"===h.layer?l.push(h):u.push(h)}var p={x:{left:{sizing:"xMin",offset:0},center:{sizing:"xMid",offset:-.5},right:{sizing:"xMax",offset:-1}},y:{top:{sizing:"YMin",offset:0},middle:{sizing:"YMid",offset:-.5},bottom:{sizing:"YMax",offset:-1}}};function d(e){var r=n.select(this);if(this._imgSrc!==e.source)if(r.attr("xmlns",o.svg),e.source&&"data:"===e.source.slice(0,5))r.attr("xlink:href",e.source),this._imgSrc=e.source;else{var a=new Promise(function(t){var n=new Image;function a(){r.remove(),t()}this.img=n,n.setAttribute("crossOrigin","anonymous"),n.onerror=a,n.onload=function(){var e=document.createElement("canvas");e.width=this.width,e.height=this.height,e.getContext("2d").drawImage(this,0,0);var n=e.toDataURL("image/png");r.attr("xlink:href",n),t()},r.on("error",a),n.src=e.source,this._imgSrc=e.source}.bind(this));t._promises.push(a)}}function g(e){var r=n.select(this),o=i.getFromId(t,e.xref),l=i.getFromId(t,e.yref),c=s._size,u=o?Math.abs(o.l2p(e.sizex)-o.l2p(0)):e.sizex*c.w,h=l?Math.abs(l.l2p(e.sizey)-l.l2p(0)):e.sizey*c.h,f=u*p.x[e.xanchor].offset,d=h*p.y[e.yanchor].offset,g=p.x[e.xanchor].sizing+p.y[e.yanchor].sizing,v=(o?o.r2p(e.x)+o._offset:e.x*c.w+c.l)+f,m=(l?l.r2p(e.y)+l._offset:c.h-e.y*c.h+c.t)+d;switch(e.sizing){case"fill":g+=" slice";break;case"stretch":g="none"}r.attr({x:v,y:m,width:u,height:h,preserveAspectRatio:g,opacity:e.opacity});var y=(o?o._id:"")+(l?l._id:"");a.setClipUrl(r,y?"clip"+s._uid+y:null,t)}var v=s._imageLowerLayer.selectAll("image").data(u),m=s._imageUpperLayer.selectAll("image").data(l);v.enter().append("image"),m.enter().append("image"),v.exit().remove(),m.exit().remove(),v.each(function(t){d.bind(this)(t),g.bind(this)(t)}),m.each(function(t){d.bind(this)(t),g.bind(this)(t)});var y=Object.keys(s._plots);for(r=0;r<y.length;r++){e=y[r];var x=s._plots[e];if(x.imagelayer){var b=x.imagelayer.selectAll("image").data(c[e]||[]);b.enter().append("image"),b.exit().remove(),b.each(function(t){d.bind(this)(t),g.bind(this)(t)})}}}},{"../../constants/xmlns_namespaces":694,"../../plots/cartesian/axes":765,"../drawing":612,d3:165}],639:[function(t,e,r){"use strict";e.exports={moduleType:"component",name:"images",layoutAttributes:t("./attributes"),supplyLayoutDefaults:t("./defaults"),includeBasePlot:t("../../plots/cartesian/include_components")("images"),draw:t("./draw"),convertCoords:t("./convert_coords")}},{"../../plots/cartesian/include_components":775,"./attributes":635,"./convert_coords":636,"./defaults":637,"./draw":638}],640:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),a=t("../color/attributes");e.exports={bgcolor:{valType:"color",editType:"legend"},bordercolor:{valType:"color",dflt:a.defaultLine,editType:"legend"},borderwidth:{valType:"number",min:0,dflt:0,editType:"legend"},font:n({editType:"legend"}),orientation:{valType:"enumerated",values:["v","h"],dflt:"v",editType:"legend"},traceorder:{valType:"flaglist",flags:["reversed","grouped"],extras:["normal"],editType:"legend"},tracegroupgap:{valType:"number",min:0,dflt:10,editType:"legend"},itemsizing:{valType:"enumerated",values:["trace","constant"],dflt:"trace",editType:"legend"},itemclick:{valType:"enumerated",values:["toggle","toggleothers",!1],dflt:"toggle",editType:"legend"},itemdoubleclick:{valType:"enumerated",values:["toggle","toggleothers",!1],dflt:"toggleothers",editType:"legend"},x:{valType:"number",min:-2,max:3,editType:"legend"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left",editType:"legend"},y:{valType:"number",min:-2,max:3,editType:"legend"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],editType:"legend"},uirevision:{valType:"any",editType:"none"},valign:{valType:"enumerated",values:["top","middle","bottom"],dflt:"middle",editType:"legend"},title:{text:{valType:"string",dflt:"",editType:"legend"},font:n({editType:"legend"}),side:{valType:"enumerated",values:["top","left","top left"],editType:"legend"},editType:"legend"},editType:"legend"}},{"../../plots/font_attributes":791,"../color/attributes":590}],641:[function(t,e,r){"use strict";e.exports={scrollBarWidth:6,scrollBarMinHeight:20,scrollBarColor:"#808BA4",scrollBarMargin:4,scrollBarEnterAttrs:{rx:20,ry:3,width:0,height:0},titlePad:2,textGap:40,itemGap:5}},{}],642:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("../../plot_api/plot_template"),o=t("./attributes"),s=t("../../plots/layout_attributes"),l=t("./helpers");e.exports=function(t,e,r){for(var c=t.legend||{},u=0,h=!1,f="normal",p=0;p<r.length;p++){var d=r[p];d.visible&&((d.showlegend||d._dfltShowLegend&&!(d._module&&d._module.attributes&&d._module.attributes.showlegend&&!1===d._module.attributes.showlegend.dflt))&&(u++,d.showlegend&&(h=!0,(n.traceIs(d,"pie-like")||!0===d._input.showlegend)&&u++)),(n.traceIs(d,"bar")&&"stack"===e.barmode||-1!==["tonextx","tonexty"].indexOf(d.fill))&&(f=l.isGrouped({traceorder:f})?"grouped+reversed":"reversed"),void 0!==d.legendgroup&&""!==d.legendgroup&&(f=l.isReversed({traceorder:f})?"reversed+grouped":"grouped"))}var g=a.coerce(t,e,s,"showlegend",h&&u>1);if(!1!==g||c.uirevision){var v=i.newContainer(e,"legend");if(_("uirevision",e.uirevision),!1!==g){_("bgcolor",e.paper_bgcolor),_("bordercolor"),_("borderwidth"),a.coerceFont(_,"font",e.font);var m,y,x,b=_("orientation");"h"===b?(m=0,n.getComponentMethod("rangeslider","isVisible")(t.xaxis)?(y=1.1,x="bottom"):(y=-.1,x="top")):(m=1.02,y=1,x="auto"),_("traceorder",f),l.isGrouped(e.legend)&&_("tracegroupgap"),_("itemsizing"),_("itemclick"),_("itemdoubleclick"),_("x",m),_("xanchor"),_("y",y),_("yanchor",x),_("valign"),a.noneOrAll(c,v,["x","y"]),_("title.text")&&(_("title.side","h"===b?"left":"top"),a.coerceFont(_,"title.font",e.font))}}function _(t,e){return a.coerce(c,v,o,t,e)}}},{"../../lib":717,"../../plot_api/plot_template":755,"../../plots/layout_attributes":817,"../../registry":846,"./attributes":640,"./helpers":646}],643:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../plots/plots"),o=t("../../registry"),s=t("../../lib/events"),l=t("../dragelement"),c=t("../drawing"),u=t("../color"),h=t("../../lib/svg_text_utils"),f=t("./handle_click"),p=t("./constants"),d=t("../../constants/alignment"),g=d.LINE_SPACING,v=d.FROM_TL,m=d.FROM_BR,y=t("./get_legend_data"),x=t("./style"),b=t("./helpers");function _(t,e,r,n,a){var i=r.data()[0][0].trace,l={event:a,node:r.node(),curveNumber:i.index,expandedIndex:i._expandedIndex,data:t.data,layout:t.layout,frames:t._transitionData._frames,config:t._context,fullData:t._fullData,fullLayout:t._fullLayout};if(i._group&&(l.group=i._group),o.traceIs(i,"pie-like")&&(l.label=r.datum()[0].label),!1!==s.triggerHandler(t,"plotly_legendclick",l))if(1===n)e._clickTimeout=setTimeout(function(){f(r,t,n)},t._context.doubleClickDelay);else if(2===n){e._clickTimeout&&clearTimeout(e._clickTimeout),t._legendMouseDownTime=0,!1!==s.triggerHandler(t,"plotly_legenddoubleclick",l)&&f(r,t,n)}}function w(t,e,r){var n,i=t.data()[0][0],s=i.trace,l=o.traceIs(s,"pie-like"),u=s.index,f=r._main&&e._context.edits.legendText&&!l,d=r._maxNameLength;r.entries?n=i.text:(n=l?i.label:s.name,s._meta&&(n=a.templateString(n,s._meta)));var g=a.ensureSingle(t,"text","legendtext");g.attr("text-anchor","start").classed("user-select-none",!0).call(c.font,r.font).text(f?k(n,d):n),h.positionText(g,p.textGap,0),f?g.call(h.makeEditable,{gd:e,text:n}).call(M,t,e,r).on("edit",function(n){this.text(k(n,d)).call(M,t,e,r);var s=i.trace._fullInput||{},l={};if(o.hasTransform(s,"groupby")){var c=o.getTransformIndices(s,"groupby"),h=c[c.length-1],f=a.keyedContainer(s,"transforms["+h+"].styles","target","value.name");f.set(i.trace._group,n),l=f.constructUpdate()}else l.name=n;return o.call("_guiRestyle",e,l,u)}):M(g,t,e,r)}function k(t,e){var r=Math.max(4,e);if(t&&t.trim().length>=r/2)return t;for(var n=r-(t=t||"").length;n>0;n--)t+=" ";return t}function T(t,e){var r,i=e._context.doubleClickDelay,o=1,s=a.ensureSingle(t,"rect","legendtoggle",function(t){t.style("cursor","pointer").attr("pointer-events","all").call(u.fill,"rgba(0,0,0,0)")});s.on("mousedown",function(){(r=(new Date).getTime())-e._legendMouseDownTime<i?o+=1:(o=1,e._legendMouseDownTime=r)}),s.on("mouseup",function(){if(!e._dragged&&!e._editing){var r=e._fullLayout.legend;(new Date).getTime()-e._legendMouseDownTime>i&&(o=Math.max(o-1,1)),_(e,r,t,o,n.event)}})}function M(t,e,r,n){n._main||t.attr("data-notex",!0),h.convertToTspans(t,r,function(){!function(t,e,r){var n=t.data()[0][0];if(r._main&&n&&!n.trace.showlegend)return void t.remove();var a=t.select("g[class*=math-group]"),i=a.node();r||(r=e._fullLayout.legend);var o,s,l=r.borderwidth,u=(n?r:r.title).font.size*g;if(i){var f=c.bBox(i);o=f.height,s=f.width,n?c.setTranslate(a,0,.25*o):c.setTranslate(a,l,.75*o+l)}else{var d=t.select(n?".legendtext":".legendtitletext"),v=h.lineCount(d),m=d.node();o=u*v,s=m?c.bBox(m).width:0;var y=u*((v-1)/2-.3);n?h.positionText(d,p.textGap,-y):h.positionText(d,p.titlePad+l,u+l)}n?(n.lineHeight=u,n.height=Math.max(o,16)+3,n.width=s):(r._titleWidth=s,r._titleHeight=o)}(e,r,n)})}function A(t){return a.isRightAnchor(t)?"right":a.isCenterAnchor(t)?"center":"left"}function S(t){return a.isBottomAnchor(t)?"bottom":a.isMiddleAnchor(t)?"middle":"top"}e.exports=function(t,e){var r,s=t._fullLayout,h="legend"+s._uid;if(e?(r=e.layer,h+="-hover"):((e=s.legend||{})._main=!0,r=s._infolayer),r){var f;if(t._legendMouseDownTime||(t._legendMouseDownTime=0),e._main){if(!t.calcdata)return;f=s.showlegend&&y(t.calcdata,e)}else{if(!e.entries)return;f=y(e.entries,e)}var d=s.hiddenlabels||[];if(e._main&&(!s.showlegend||!f.length))return r.selectAll(".legend").remove(),s._topdefs.select("#"+h).remove(),i.autoMargin(t,"legend");var g=a.ensureSingle(r,"g","legend",function(t){e._main&&t.attr("pointer-events","all")}),k=a.ensureSingleById(s._topdefs,"clipPath",h,function(t){t.append("rect")}),E=a.ensureSingle(g,"rect","bg",function(t){t.attr("shape-rendering","crispEdges")});E.call(u.stroke,e.bordercolor).call(u.fill,e.bgcolor).style("stroke-width",e.borderwidth+"px");var L=a.ensureSingle(g,"g","scrollbox"),C=e.title;if(e._titleWidth=0,e._titleHeight=0,C.text){var P=a.ensureSingle(L,"text","legendtitletext");P.attr("text-anchor","start").classed("user-select-none",!0).call(c.font,C.font).text(C.text),M(P,L,t,e)}var O=a.ensureSingle(g,"rect","scrollbar",function(t){t.attr(p.scrollBarEnterAttrs).call(u.fill,p.scrollBarColor)}),z=L.selectAll("g.groups").data(f);z.enter().append("g").attr("class","groups"),z.exit().remove();var I=z.selectAll("g.traces").data(a.identity);I.enter().append("g").attr("class","traces"),I.exit().remove(),I.style("opacity",function(t){var e=t[0].trace;return o.traceIs(e,"pie-like")?-1!==d.indexOf(t[0].label)?.5:1:"legendonly"===e.visible?.5:1}).each(function(){n.select(this).call(w,t,e)}).call(x,t,e).each(function(){e._main&&n.select(this).call(T,t)}),a.syncOrAsync([i.previousPromises,function(){return function(t,e,r,a){var i=t._fullLayout;a||(a=i.legend);var o=i._size,s=b.isVertical(a),l=b.isGrouped(a),u=a.borderwidth,h=2*u,f=p.textGap,d=p.itemGap,g=2*(u+d),v=S(a),m=a.y<0||0===a.y&&"top"===v,y=a.y>1||1===a.y&&"bottom"===v;a._maxHeight=Math.max(m||y?i.height/2:o.h,30);var x=0;a._width=0,a._height=0;var _=function(t){var e=0,r=0,n=t.title.side;n&&(-1!==n.indexOf("left")&&(e=t._titleWidth),-1!==n.indexOf("top")&&(r=t._titleHeight));return[e,r]}(a);if(s)r.each(function(t){var e=t[0].height;c.setTranslate(this,u+_[0],u+_[1]+a._height+e/2+d),a._height+=e,a._width=Math.max(a._width,t[0].width)}),x=f+a._width,a._width+=d+f+h,a._height+=g,l&&(e.each(function(t,e){c.setTranslate(this,0,e*a.tracegroupgap)}),a._height+=(a._lgroupsLength-1)*a.tracegroupgap);else{var w=A(a),k=a.x<0||0===a.x&&"right"===w,T=a.x>1||1===a.x&&"left"===w,M=y||m,E=i.width/2;a._maxWidth=Math.max(k?M&&"left"===w?o.l+o.w:E:T?M&&"right"===w?o.r+o.w:E:o.w,2*f);var L=0,C=0;r.each(function(t){var e=t[0].width+f;L=Math.max(L,e),C+=e}),x=null;var P=0;if(l){var O=0,z=0,I=0;e.each(function(){var t=0,e=0;n.select(this).selectAll("g.traces").each(function(r){var n=r[0].height;c.setTranslate(this,_[0],_[1]+u+d+n/2+e),e+=n,t=Math.max(t,f+r[0].width)}),O=Math.max(O,e);var r=t+d;r+u+z>a._maxWidth&&(P=Math.max(P,z),z=0,I+=O+a.tracegroupgap,O=e),c.setTranslate(this,z,I),z+=r}),a._width=Math.max(P,z)+u,a._height=I+O+g}else{var D=r.size(),R=C+h+(D-1)*d<a._maxWidth,F=0,B=0,N=0,j=0;r.each(function(t){var e=t[0].height,r=f+t[0].width,n=(R?r:L)+d;n+u+B>a._maxWidth&&(P=Math.max(P,j),B=0,N+=F,a._height+=F,F=0),c.setTranslate(this,_[0]+u+B,_[1]+u+N+e/2+d),j=B+r+d,B+=n,F=Math.max(F,e)}),R?(a._width=B+h,a._height=F+g):(a._width=Math.max(P,j)+h,a._height+=F+g)}}a._width=Math.ceil(Math.max(a._width+_[0],a._titleWidth+2*(u+p.titlePad))),a._height=Math.ceil(Math.max(a._height+_[1],a._titleHeight+2*(u+p.itemGap))),a._effHeight=Math.min(a._height,a._maxHeight);var V=t._context.edits,U=V.legendText||V.legendPosition;r.each(function(t){var e=n.select(this).select(".legendtoggle"),r=t[0].height,a=U?f:x||f+t[0].width;s||(a+=d/2),c.setRect(e,0,-r/2,a,r)})}(t,z,I,e)},function(){if(!e._main||!function(t){var e=t._fullLayout.legend,r=A(e),n=S(e);return i.autoMargin(t,"legend",{x:e.x,y:e.y,l:e._width*v[r],r:e._width*m[r],b:e._effHeight*m[n],t:e._effHeight*v[n]})}(t)){var u,f,d,y,x=s._size,b=e.borderwidth,w=x.l+x.w*e.x-v[A(e)]*e._width,T=x.t+x.h*(1-e.y)-v[S(e)]*e._effHeight;if(e._main&&s.margin.autoexpand){var M=w,C=T;w=a.constrain(w,0,s.width-e._width),T=a.constrain(T,0,s.height-e._effHeight),w!==M&&a.log("Constrain legend.x to make legend fit inside graph"),T!==C&&a.log("Constrain legend.y to make legend fit inside graph")}if(e._main&&c.setTranslate(g,w,T),O.on(".drag",null),g.on("wheel",null),!e._main||e._height<=e._maxHeight||t._context.staticPlot){var P=e._effHeight;e._main||(P=e._height),E.attr({width:e._width-b,height:P-b,x:b/2,y:b/2}),c.setTranslate(L,0,0),k.select("rect").attr({width:e._width-2*b,height:P-2*b,x:b,y:b}),c.setClipUrl(L,h,t),c.setRect(O,0,0,0,0),delete e._scrollY}else{var z,I,D,R=Math.max(p.scrollBarMinHeight,e._effHeight*e._effHeight/e._height),F=e._effHeight-R-2*p.scrollBarMargin,B=e._height-e._effHeight,N=F/B,j=Math.min(e._scrollY||0,B);E.attr({width:e._width-2*b+p.scrollBarWidth+p.scrollBarMargin,height:e._effHeight-b,x:b/2,y:b/2}),k.select("rect").attr({width:e._width-2*b+p.scrollBarWidth+p.scrollBarMargin,height:e._effHeight-2*b,x:b,y:b+j}),c.setClipUrl(L,h,t),q(j,R,N),g.on("wheel",function(){q(j=a.constrain(e._scrollY+n.event.deltaY/F*B,0,B),R,N),0!==j&&j!==B&&n.event.preventDefault()});var V=n.behavior.drag().on("dragstart",function(){var t=n.event.sourceEvent;z="touchstart"===t.type?t.changedTouches[0].clientY:t.clientY,D=j}).on("drag",function(){var t=n.event.sourceEvent;2===t.buttons||t.ctrlKey||(I="touchmove"===t.type?t.changedTouches[0].clientY:t.clientY,q(j=function(t,e,r){var n=(r-e)/N+t;return a.constrain(n,0,B)}(D,z,I),R,N))});O.call(V);var U=n.behavior.drag().on("dragstart",function(){var t=n.event.sourceEvent;"touchstart"===t.type&&(z=t.changedTouches[0].clientY,D=j)}).on("drag",function(){var t=n.event.sourceEvent;"touchmove"===t.type&&(I=t.changedTouches[0].clientY,q(j=function(t,e,r){var n=(e-r)/N+t;return a.constrain(n,0,B)}(D,z,I),R,N))});L.call(U)}if(t._context.edits.legendPosition)g.classed("cursor-move",!0),l.init({element:g.node(),gd:t,prepFn:function(){var t=c.getTranslate(g);d=t.x,y=t.y},moveFn:function(t,r){var n=d+t,a=y+r;c.setTranslate(g,n,a),u=l.align(n,0,x.l,x.l+x.w,e.xanchor),f=l.align(a,0,x.t+x.h,x.t,e.yanchor)},doneFn:function(){void 0!==u&&void 0!==f&&o.call("_guiRelayout",t,{"legend.x":u,"legend.y":f})},clickFn:function(e,n){var a=r.selectAll("g.traces").filter(function(){var t=this.getBoundingClientRect();return n.clientX>=t.left&&n.clientX<=t.right&&n.clientY>=t.top&&n.clientY<=t.bottom});a.size()>0&&_(t,g,a,e,n)}})}function q(r,n,a){e._scrollY=t._fullLayout.legend._scrollY=r,c.setTranslate(L,0,-r),c.setRect(O,e._width,p.scrollBarMargin+r*a,p.scrollBarWidth,n),k.select("rect").attr("y",b+r)}}],t)}}},{"../../constants/alignment":686,"../../lib":717,"../../lib/events":707,"../../lib/svg_text_utils":741,"../../plots/plots":826,"../../registry":846,"../color":591,"../dragelement":609,"../drawing":612,"./constants":641,"./get_legend_data":644,"./handle_click":645,"./helpers":646,"./style":648,d3:165}],644:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("./helpers");e.exports=function(t,e){var r,i,o={},s=[],l=!1,c={},u=0,h=0,f=e._main;function p(t,r){if(""!==t&&a.isGrouped(e))-1===s.indexOf(t)?(s.push(t),l=!0,o[t]=[[r]]):o[t].push([r]);else{var n="~~i"+u;s.push(n),o[n]=[[r]],u++}}for(r=0;r<t.length;r++){var d=t[r],g=d[0],v=g.trace,m=v.legendgroup;if(!f||v.visible&&v.showlegend)if(n.traceIs(v,"pie-like"))for(c[m]||(c[m]={}),i=0;i<d.length;i++){var y=d[i].label;c[m][y]||(p(m,{label:y,color:d[i].color,i:d[i].i,trace:v,pts:d[i].pts}),c[m][y]=!0,h=Math.max(h,(y||"").length))}else p(m,g),h=Math.max(h,(v.name||"").length)}if(!s.length)return[];var x,b,_=s.length;if(l&&a.isGrouped(e))for(b=new Array(_),r=0;r<_;r++)x=o[s[r]],b[r]=a.isReversed(e)?x.reverse():x;else{for(b=[new Array(_)],r=0;r<_;r++)x=o[s[r]][0],b[0][a.isReversed(e)?_-r-1:r]=x;_=1}return e._lgroupsLength=_,e._maxNameLength=h,b}},{"../../registry":846,"./helpers":646}],645:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../registry"),i=!0;e.exports=function(t,e,r){var o=e._fullLayout;if(!e._dragged&&!e._editing){var s,l=o.legend.itemclick,c=o.legend.itemdoubleclick;if(1===r&&"toggle"===l&&"toggleothers"===c&&i&&e.data&&e._context.showTips?(n.notifier(n._(e,"Double-click on legend to isolate one trace"),"long"),i=!1):i=!1,1===r?s=l:2===r&&(s=c),s){var u,h,f,p,d,g=o.hiddenlabels?o.hiddenlabels.slice():[],v=t.data()[0][0],m=e._fullData,y=v.trace,x=y.legendgroup,b={},_=[],w=[],k=[];if(a.traceIs(y,"pie-like")){var T=v.label,M=g.indexOf(T);"toggle"===s?-1===M?g.push(T):g.splice(M,1):"toggleothers"===s&&(g=[],e.calcdata[0].forEach(function(t){T!==t.label&&g.push(t.label)}),e._fullLayout.hiddenlabels&&e._fullLayout.hiddenlabels.length===g.length&&-1===M&&(g=[])),a.call("_guiRelayout",e,"hiddenlabels",g)}else{var A,S=x&&x.length,E=[];if(S)for(u=0;u<m.length;u++)(A=m[u]).visible&&A.legendgroup===x&&E.push(u);if("toggle"===s){var L;switch(y.visible){case!0:L="legendonly";break;case!1:L=!1;break;case"legendonly":L=!0}if(S)for(u=0;u<m.length;u++)!1!==m[u].visible&&m[u].legendgroup===x&&B(m[u],L);else B(y,L)}else if("toggleothers"===s){var C,P,O,z,I=!0;for(u=0;u<m.length;u++)if(C=m[u]===y,O=!0!==m[u].showlegend,!(C||O||(P=S&&m[u].legendgroup===x)||!0!==m[u].visible||a.traceIs(m[u],"notLegendIsolatable"))){I=!1;break}for(u=0;u<m.length;u++)if(!1!==m[u].visible&&!a.traceIs(m[u],"notLegendIsolatable"))switch(y.visible){case"legendonly":B(m[u],!0);break;case!0:z=!!I||"legendonly",C=m[u]===y,O=!0!==m[u].showlegend&&!m[u].legendgroup,P=C||S&&m[u].legendgroup===x,B(m[u],!(!P&&!O)||z)}}for(u=0;u<w.length;u++)if(f=w[u]){var D=f.constructUpdate(),R=Object.keys(D);for(h=0;h<R.length;h++)p=R[h],(b[p]=b[p]||[])[k[u]]=D[p]}for(d=Object.keys(b),u=0;u<d.length;u++)for(p=d[u],h=0;h<_.length;h++)b[p].hasOwnProperty(h)||(b[p][h]=void 0);a.call("_guiRestyle",e,b,_)}}}function F(t,e,r){var n=_.indexOf(t),a=b[e];return a||(a=b[e]=[]),-1===_.indexOf(t)&&(_.push(t),n=_.length-1),a[n]=r,n}function B(t,e){var r=t._fullInput;if(a.hasTransform(r,"groupby")){var i=w[r.index];if(!i){var o=a.getTransformIndices(r,"groupby"),s=o[o.length-1];i=n.keyedContainer(r,"transforms["+s+"].styles","target","value.visible"),w[r.index]=i}var l=i.get(t._group);void 0===l&&(l=!0),!1!==l&&i.set(t._group,e),k[r.index]=F(r.index,"visible",!1!==r.visible)}else{var c=!1!==r.visible&&e;F(r.index,"visible",c)}}}},{"../../lib":717,"../../registry":846}],646:[function(t,e,r){"use strict";r.isGrouped=function(t){return-1!==(t.traceorder||"").indexOf("grouped")},r.isVertical=function(t){return"h"!==t.orientation},r.isReversed=function(t){return-1!==(t.traceorder||"").indexOf("reversed")}},{}],647:[function(t,e,r){"use strict";e.exports={moduleType:"component",name:"legend",layoutAttributes:t("./attributes"),supplyLayoutDefaults:t("./defaults"),draw:t("./draw"),style:t("./style")}},{"./attributes":640,"./defaults":642,"./draw":643,"./style":648}],648:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../lib"),o=t("../drawing"),s=t("../color"),l=t("../colorscale/helpers").extractOpts,c=t("../../traces/scatter/subtypes"),u=t("../../traces/pie/style_one"),h=t("../../traces/pie/helpers").castOption,f=12,p=5,d=2,g=10,v=5;function m(t,e){return(e?"radial":"horizontal")+(t?"":"reversed")}e.exports=function(t,e,r){var y=e._fullLayout;r||(r=y.legend);var x="constant"===r.itemsizing,b=function(t,e,r,n){var a;if(t+1)a=t;else{if(!(e&&e.width>0))return 0;a=e.width}return x?n:Math.min(a,r)};function _(t,e,r){var i=t[0].trace,o=i.marker||{},l=o.line||{},c=r?i.visible&&i.type===r:a.traceIs(i,"bar"),u=n.select(e).select("g.legendpoints").selectAll("path.legend"+r).data(c?[t]:[]);u.enter().append("path").classed("legend"+r,!0).attr("d","M6,6H-6V-6H6Z").attr("transform","translate(20,0)"),u.exit().remove(),u.each(function(t){var e=n.select(this),r=t[0],a=b(r.mlw,o.line,v,d);e.style("stroke-width",a+"px").call(s.fill,r.mc||o.color),a&&s.stroke(e,r.mlc||l.color)})}function w(t,e,r){var o=t[0],s=o.trace,l=r?s.visible&&s.type===r:a.traceIs(s,r),c=n.select(e).select("g.legendpoints").selectAll("path.legend"+r).data(l?[t]:[]);if(c.enter().append("path").classed("legend"+r,!0).attr("d","M6,6H-6V-6H6Z").attr("transform","translate(20,0)"),c.exit().remove(),c.size()){var f=(s.marker||{}).line,p=b(h(f.width,o.pts),f,v,d),g=i.minExtend(s,{marker:{line:{width:p}}});g.marker.line.color=f.color;var m=i.minExtend(o,{trace:g});u(c,m,g)}}t.each(function(t){var e=n.select(this),a=i.ensureSingle(e,"g","layers");a.style("opacity",t[0].trace.opacity);var o=r.valign,s=t[0].lineHeight,l=t[0].height;if("middle"!==o&&s&&l){var c={top:1,bottom:-1}[o]*(.5*(s-l+3));a.attr("transform","translate(0,"+c+")")}else a.attr("transform",null);a.selectAll("g.legendfill").data([t]).enter().append("g").classed("legendfill",!0),a.selectAll("g.legendlines").data([t]).enter().append("g").classed("legendlines",!0);var u=a.selectAll("g.legendsymbols").data([t]);u.enter().append("g").classed("legendsymbols",!0),u.selectAll("g.legendpoints").data([t]).enter().append("g").classed("legendpoints",!0)}).each(function(t){var r,a=t[0].trace,c=[];if(a.visible)switch(a.type){case"histogram2d":case"heatmap":c=[["M-15,-2V4H15V-2Z"]],r=!0;break;case"choropleth":case"choroplethmapbox":c=[["M-6,-6V6H6V-6Z"]],r=!0;break;case"densitymapbox":c=[["M-6,0 a6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0"]],r="radial";break;case"cone":c=[["M-6,2 A2,2 0 0,0 -6,6 V6L6,4Z"],["M-6,-6 A2,2 0 0,0 -6,-2 L6,-4Z"],["M-6,-2 A2,2 0 0,0 -6,2 L6,0Z"]],r=!1;break;case"streamtube":c=[["M-6,2 A2,2 0 0,0 -6,6 H6 A2,2 0 0,1 6,2 Z"],["M-6,-6 A2,2 0 0,0 -6,-2 H6 A2,2 0 0,1 6,-6 Z"],["M-6,-2 A2,2 0 0,0 -6,2 H6 A2,2 0 0,1 6,-2 Z"]],r=!1;break;case"surface":c=[["M-6,-6 A2,3 0 0,0 -6,0 H6 A2,3 0 0,1 6,-6 Z"],["M-6,1 A2,3 0 0,1 -6,6 H6 A2,3 0 0,0 6,0 Z"]],r=!0;break;case"mesh3d":c=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6H6L0,6Z"]],r=!1;break;case"volume":c=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6H6L0,6Z"]],r=!0;break;case"isosurface":c=[["M-6,6H0L-6,-6Z"],["M6,6H0L6,-6Z"],["M-6,-6 A12,24 0 0,0 6,-6 L0,6Z"]],r=!1}var u=n.select(this).select("g.legendpoints").selectAll("path.legend3dandfriends").data(c);u.enter().append("path").classed("legend3dandfriends",!0).attr("transform","translate(20,0)").style("stroke-miterlimit",1),u.exit().remove(),u.each(function(t,c){var u,h=n.select(this),f=l(a),p=f.colorscale,d=f.reversescale;if(p){if(!r){var g=p.length;u=0===c?p[d?g-1:0][1]:1===c?p[d?0:g-1][1]:p[Math.floor((g-1)/2)][1]}}else{var v=a.vertexcolor||a.facecolor||a.color;u=i.isArrayOrTypedArray(v)?v[c]||v[0]:v}h.attr("d",t[0]),u?h.call(s.fill,u):h.call(function(t){if(t.size()){var n="legendfill-"+a.uid;o.gradient(t,e,n,m(d,"radial"===r),p,"fill")}})})}).each(function(t){var e=t[0].trace,r="waterfall"===e.type;if(t[0]._distinct&&r){var a=t[0].trace[t[0].dir].marker;return t[0].mc=a.color,t[0].mlw=a.line.width,t[0].mlc=a.line.color,_(t,this,"waterfall")}var i=[];e.visible&&r&&(i=t[0].hasTotals?[["increasing","M-6,-6V6H0Z"],["totals","M6,6H0L-6,-6H-0Z"],["decreasing","M6,6V-6H0Z"]]:[["increasing","M-6,-6V6H6Z"],["decreasing","M6,6V-6H-6Z"]]);var o=n.select(this).select("g.legendpoints").selectAll("path.legendwaterfall").data(i);o.enter().append("path").classed("legendwaterfall",!0).attr("transform","translate(20,0)").style("stroke-miterlimit",1),o.exit().remove(),o.each(function(t){var r=n.select(this),a=e[t[0]].marker,i=b(void 0,a.line,v,d);r.attr("d",t[1]).style("stroke-width",i+"px").call(s.fill,a.color),i&&r.call(s.stroke,a.line.color)})}).each(function(t){_(t,this,"funnel")}).each(function(t){_(t,this)}).each(function(t){var r=t[0].trace,l=n.select(this).select("g.legendpoints").selectAll("path.legendbox").data(r.visible&&a.traceIs(r,"box-violin")?[t]:[]);l.enter().append("path").classed("legendbox",!0).attr("d","M6,6H-6V-6H6Z").attr("transform","translate(20,0)"),l.exit().remove(),l.each(function(){var t=n.select(this);if("all"!==r.boxpoints&&"all"!==r.points||0!==s.opacity(r.fillcolor)||0!==s.opacity((r.line||{}).color)){var a=b(void 0,r.line,v,d);t.style("stroke-width",a+"px").call(s.fill,r.fillcolor),a&&s.stroke(t,r.line.color)}else{var c=i.minExtend(r,{marker:{size:x?f:i.constrain(r.marker.size,2,16),sizeref:1,sizemin:1,sizemode:"diameter"}});l.call(o.pointStyle,c,e)}})}).each(function(t){w(t,this,"funnelarea")}).each(function(t){w(t,this,"pie")}).each(function(t){var r,a,s=t[0],u=s.trace,h=u.visible&&u.fill&&"none"!==u.fill,f=c.hasLines(u),d=u.contours,v=!1,y=!1,x=l(u),_=x.colorscale,w=x.reversescale;if(d){var k=d.coloring;"lines"===k?v=!0:f="none"===k||"heatmap"===k||d.showlines,"constraint"===d.type?h="="!==d._operation:"fill"!==k&&"heatmap"!==k||(y=!0)}var T=c.hasMarkers(u)||c.hasText(u),M=h||y,A=f||v,S=T||!M?"M5,0":A?"M5,-2":"M5,-3",E=n.select(this),L=E.select(".legendfill").selectAll("path").data(h||y?[t]:[]);if(L.enter().append("path").classed("js-fill",!0),L.exit().remove(),L.attr("d",S+"h30v6h-30z").call(h?o.fillGroupStyle:function(t){if(t.size()){var r="legendfill-"+u.uid;o.gradient(t,e,r,m(w),_,"fill")}}),f||v){var C=b(void 0,u.line,g,p);a=i.minExtend(u,{line:{width:C}}),r=[i.minExtend(s,{trace:a})]}var P=E.select(".legendlines").selectAll("path").data(f||v?[r]:[]);P.enter().append("path").classed("js-line",!0),P.exit().remove(),P.attr("d",S+(v?"l30,0.0001":"h30")).call(f?o.lineGroupStyle:function(t){if(t.size()){var r="legendline-"+u.uid;o.lineGroupStyle(t),o.gradient(t,e,r,m(w),_,"stroke")}})}).each(function(t){var r,a,s=t[0],l=s.trace,u=c.hasMarkers(l),h=c.hasText(l),g=c.hasLines(l);function v(t,e,r,n){var a=i.nestedProperty(l,t).get(),o=i.isArrayOrTypedArray(a)&&e?e(a):a;if(x&&o&&void 0!==n&&(o=n),r){if(o<r[0])return r[0];if(o>r[1])return r[1]}return o}function m(t){return s._distinct&&s.index&&t[s.index]?t[s.index]:t[0]}if(u||h||g){var y={},b={};if(u){y.mc=v("marker.color",m),y.mx=v("marker.symbol",m),y.mo=v("marker.opacity",i.mean,[.2,1]),y.mlc=v("marker.line.color",m),y.mlw=v("marker.line.width",i.mean,[0,5],d),b.marker={sizeref:1,sizemin:1,sizemode:"diameter"};var _=v("marker.size",i.mean,[2,16],f);y.ms=_,b.marker.size=_}g&&(b.line={width:v("line.width",m,[0,10],p)}),h&&(y.tx="Aa",y.tp=v("textposition",m),y.ts=10,y.tc=v("textfont.color",m),y.tf=v("textfont.family",m)),r=[i.minExtend(s,y)],(a=i.minExtend(l,b)).selectedpoints=null,a.texttemplate=null}var w=n.select(this).select("g.legendpoints"),k=w.selectAll("path.scatterpts").data(u?r:[]);k.enter().insert("path",":first-child").classed("scatterpts",!0).attr("transform","translate(20,0)"),k.exit().remove(),k.call(o.pointStyle,a,e),u&&(r[0].mrc=3);var T=w.selectAll("g.pointtext").data(h?r:[]);T.enter().append("g").classed("pointtext",!0).append("text").attr("transform","translate(20,0)"),T.exit().remove(),T.selectAll("text").call(o.textPointStyle,a,e)}).each(function(t){var e=t[0].trace,r=n.select(this).select("g.legendpoints").selectAll("path.legendcandle").data(e.visible&&"candlestick"===e.type?[t,t]:[]);r.enter().append("path").classed("legendcandle",!0).attr("d",function(t,e){return e?"M-15,0H-8M-8,6V-6H8Z":"M15,0H8M8,-6V6H-8Z"}).attr("transform","translate(20,0)").style("stroke-miterlimit",1),r.exit().remove(),r.each(function(t,r){var a=n.select(this),i=e[r?"increasing":"decreasing"],o=b(void 0,i.line,v,d);a.style("stroke-width",o+"px").call(s.fill,i.fillcolor),o&&s.stroke(a,i.line.color)})}).each(function(t){var e=t[0].trace,r=n.select(this).select("g.legendpoints").selectAll("path.legendohlc").data(e.visible&&"ohlc"===e.type?[t,t]:[]);r.enter().append("path").classed("legendohlc",!0).attr("d",function(t,e){return e?"M-15,0H0M-8,-6V0":"M15,0H0M8,6V0"}).attr("transform","translate(20,0)").style("stroke-miterlimit",1),r.exit().remove(),r.each(function(t,r){var a=n.select(this),i=e[r?"increasing":"decreasing"],l=b(void 0,i.line,v,d);a.style("fill","none").call(o.dashLine,i.line.dash,l),l&&s.stroke(a,i.line.color)})})}},{"../../lib":717,"../../registry":846,"../../traces/pie/helpers":1099,"../../traces/pie/style_one":1105,"../../traces/scatter/subtypes":1144,"../color":591,"../colorscale/helpers":602,"../drawing":612,d3:165}],649:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../plots/plots"),i=t("../../plots/cartesian/axis_ids"),o=t("../../lib"),s=t("../../fonts/ploticon"),l=o._,c=e.exports={};function u(t,e){var r,a,o=e.currentTarget,s=o.getAttribute("data-attr"),l=o.getAttribute("data-val")||!0,c=t._fullLayout,u={},h=i.list(t,null,!0),f=c._cartesianSpikesEnabled;if("zoom"===s){var p,d="in"===l?.5:2,g=(1+d)/2,v=(1-d)/2;for(a=0;a<h.length;a++)if(!(r=h[a]).fixedrange)if(p=r._name,"auto"===l)u[p+".autorange"]=!0;else if("reset"===l){if(void 0===r._rangeInitial)u[p+".autorange"]=!0;else{var m=r._rangeInitial.slice();u[p+".range[0]"]=m[0],u[p+".range[1]"]=m[1]}void 0!==r._showSpikeInitial&&(u[p+".showspikes"]=r._showSpikeInitial,"on"!==f||r._showSpikeInitial||(f="off"))}else{var y=[r.r2l(r.range[0]),r.r2l(r.range[1])],x=[g*y[0]+v*y[1],g*y[1]+v*y[0]];u[p+".range[0]"]=r.l2r(x[0]),u[p+".range[1]"]=r.l2r(x[1])}}else"hovermode"!==s||"x"!==l&&"y"!==l||(l=c._isHoriz?"y":"x",o.setAttribute("data-val",l)),u[s]=l;c._cartesianSpikesEnabled=f,n.call("_guiRelayout",t,u)}function h(t,e){for(var r=e.currentTarget,a=r.getAttribute("data-attr"),i=r.getAttribute("data-val")||!0,o=t._fullLayout._subplots.gl3d||[],s={},l=a.split("."),c=0;c<o.length;c++)s[o[c]+"."+l[1]]=i;var u="pan"===i?i:"zoom";s.dragmode=u,n.call("_guiRelayout",t,s)}function f(t,e){for(var r=e.currentTarget.getAttribute("data-attr"),a=t._fullLayout,i=a._subplots.gl3d||[],o={},s=0;s<i.length;s++){var l,c=i[s],u=c+".camera",h=c+".aspectratio",f=c+".aspectmode",p=a[c]._scene;"resetLastSave"===r?(o[u+".up"]=p.viewInitial.up,o[u+".eye"]=p.viewInitial.eye,o[u+".center"]=p.viewInitial.center,l=!0):"resetDefault"===r&&(o[u+".up"]=null,o[u+".eye"]=null,o[u+".center"]=null,l=!0),l&&(o[h+".x"]=p.viewInitial.aspectratio.x,o[h+".y"]=p.viewInitial.aspectratio.y,o[h+".z"]=p.viewInitial.aspectratio.z,o[f]=p.viewInitial.aspectmode)}n.call("_guiRelayout",t,o)}function p(t,e){var r=e.currentTarget,n=r._previousVal,a=t._fullLayout,i=a._subplots.gl3d||[],o=["xaxis","yaxis","zaxis"],s={},l={};if(n)l=n,r._previousVal=null;else{for(var c=0;c<i.length;c++){var u=i[c],h=a[u],f=u+".hovermode";s[f]=h.hovermode,l[f]=!1;for(var p=0;p<3;p++){var d=o[p],g=u+"."+d+".showspikes";l[g]=!1,s[g]=h[d].showspikes}}r._previousVal=s}return l}function d(t,e){for(var r=e.currentTarget,a=r.getAttribute("data-attr"),i=r.getAttribute("data-val")||!0,o=t._fullLayout,s=o._subplots.geo||[],l=0;l<s.length;l++){var c=s[l],u=o[c];if("zoom"===a){var h=u.projection.scale,f="in"===i?2*h:.5*h;n.call("_guiRelayout",t,c+".projection.scale",f)}}"reset"===a&&y(t,"geo")}function g(t){var e=t._fullLayout;return!e.hovermode&&(e._has("cartesian")?e._isHoriz?"y":"x":"closest")}function v(t){var e=g(t);n.call("_guiRelayout",t,"hovermode",e)}function m(t,e){for(var r=e.currentTarget.getAttribute("data-val"),a=t._fullLayout,i=a._subplots.mapbox||[],o={},s=0;s<i.length;s++){var l=i[s],c=a[l].zoom,u="in"===r?1.05*c:c/1.05;o[l+".zoom"]=u}n.call("_guiRelayout",t,o)}function y(t,e){for(var r=t._fullLayout,a=r._subplots[e]||[],i={},o=0;o<a.length;o++)for(var s=a[o],l=r[s]._subplot.viewInitial,c=Object.keys(l),u=0;u<c.length;u++){var h=c[u];i[s+"."+h]=l[h]}n.call("_guiRelayout",t,i)}c.toImage={name:"toImage",title:function(t){var e=(t._context.toImageButtonOptions||{}).format||"png";return l(t,"png"===e?"Download plot as a png":"Download plot")},icon:s.camera,click:function(t){var e=t._context.toImageButtonOptions,r={format:e.format||"png"};o.notifier(l(t,"Taking snapshot - this may take a few seconds"),"long"),"svg"!==r.format&&o.isIE()&&(o.notifier(l(t,"IE only supports svg. Changing format to svg."),"long"),r.format="svg"),["filename","width","height","scale"].forEach(function(t){t in e&&(r[t]=e[t])}),n.call("downloadImage",t,r).then(function(e){o.notifier(l(t,"Snapshot succeeded")+" - "+e,"long")}).catch(function(){o.notifier(l(t,"Sorry, there was a problem downloading your snapshot!"),"long")})}},c.sendDataToCloud={name:"sendDataToCloud",title:function(t){return l(t,"Edit in Chart Studio")},icon:s.disk,click:function(t){a.sendDataToCloud(t)}},c.editInChartStudio={name:"editInChartStudio",title:function(t){return l(t,"Edit in Chart Studio")},icon:s.pencil,click:function(t){a.sendDataToCloud(t)}},c.zoom2d={name:"zoom2d",title:function(t){return l(t,"Zoom")},attr:"dragmode",val:"zoom",icon:s.zoombox,click:u},c.pan2d={name:"pan2d",title:function(t){return l(t,"Pan")},attr:"dragmode",val:"pan",icon:s.pan,click:u},c.select2d={name:"select2d",title:function(t){return l(t,"Box Select")},attr:"dragmode",val:"select",icon:s.selectbox,click:u},c.lasso2d={name:"lasso2d",title:function(t){return l(t,"Lasso Select")},attr:"dragmode",val:"lasso",icon:s.lasso,click:u},c.zoomIn2d={name:"zoomIn2d",title:function(t){return l(t,"Zoom in")},attr:"zoom",val:"in",icon:s.zoom_plus,click:u},c.zoomOut2d={name:"zoomOut2d",title:function(t){return l(t,"Zoom out")},attr:"zoom",val:"out",icon:s.zoom_minus,click:u},c.autoScale2d={name:"autoScale2d",title:function(t){return l(t,"Autoscale")},attr:"zoom",val:"auto",icon:s.autoscale,click:u},c.resetScale2d={name:"resetScale2d",title:function(t){return l(t,"Reset axes")},attr:"zoom",val:"reset",icon:s.home,click:u},c.hoverClosestCartesian={name:"hoverClosestCartesian",title:function(t){return l(t,"Show closest data on hover")},attr:"hovermode",val:"closest",icon:s.tooltip_basic,gravity:"ne",click:u},c.hoverCompareCartesian={name:"hoverCompareCartesian",title:function(t){return l(t,"Compare data on hover")},attr:"hovermode",val:function(t){return t._fullLayout._isHoriz?"y":"x"},icon:s.tooltip_compare,gravity:"ne",click:u},c.zoom3d={name:"zoom3d",title:function(t){return l(t,"Zoom")},attr:"scene.dragmode",val:"zoom",icon:s.zoombox,click:h},c.pan3d={name:"pan3d",title:function(t){return l(t,"Pan")},attr:"scene.dragmode",val:"pan",icon:s.pan,click:h},c.orbitRotation={name:"orbitRotation",title:function(t){return l(t,"Orbital rotation")},attr:"scene.dragmode",val:"orbit",icon:s["3d_rotate"],click:h},c.tableRotation={name:"tableRotation",title:function(t){return l(t,"Turntable rotation")},attr:"scene.dragmode",val:"turntable",icon:s["z-axis"],click:h},c.resetCameraDefault3d={name:"resetCameraDefault3d",title:function(t){return l(t,"Reset camera to default")},attr:"resetDefault",icon:s.home,click:f},c.resetCameraLastSave3d={name:"resetCameraLastSave3d",title:function(t){return l(t,"Reset camera to last save")},attr:"resetLastSave",icon:s.movie,click:f},c.hoverClosest3d={name:"hoverClosest3d",title:function(t){return l(t,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:s.tooltip_basic,gravity:"ne",click:function(t,e){var r=p(t,e);n.call("_guiRelayout",t,r)}},c.zoomInGeo={name:"zoomInGeo",title:function(t){return l(t,"Zoom in")},attr:"zoom",val:"in",icon:s.zoom_plus,click:d},c.zoomOutGeo={name:"zoomOutGeo",title:function(t){return l(t,"Zoom out")},attr:"zoom",val:"out",icon:s.zoom_minus,click:d},c.resetGeo={name:"resetGeo",title:function(t){return l(t,"Reset")},attr:"reset",val:null,icon:s.autoscale,click:d},c.hoverClosestGeo={name:"hoverClosestGeo",title:function(t){return l(t,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:s.tooltip_basic,gravity:"ne",click:v},c.hoverClosestGl2d={name:"hoverClosestGl2d",title:function(t){return l(t,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:s.tooltip_basic,gravity:"ne",click:v},c.hoverClosestPie={name:"hoverClosestPie",title:function(t){return l(t,"Toggle show closest data on hover")},attr:"hovermode",val:"closest",icon:s.tooltip_basic,gravity:"ne",click:v},c.resetViewSankey={name:"resetSankeyGroup",title:function(t){return l(t,"Reset view")},icon:s.home,click:function(t){for(var e={"node.groups":[],"node.x":[],"node.y":[]},r=0;r<t._fullData.length;r++){var a=t._fullData[r]._viewInitial;e["node.groups"].push(a.node.groups.slice()),e["node.x"].push(a.node.x.slice()),e["node.y"].push(a.node.y.slice())}n.call("restyle",t,e)}},c.toggleHover={name:"toggleHover",title:function(t){return l(t,"Toggle show closest data on hover")},attr:"hovermode",val:null,toggle:!0,icon:s.tooltip_basic,gravity:"ne",click:function(t,e){var r=p(t,e);r.hovermode=g(t),n.call("_guiRelayout",t,r)}},c.resetViews={name:"resetViews",title:function(t){return l(t,"Reset views")},icon:s.home,click:function(t,e){var r=e.currentTarget;r.setAttribute("data-attr","zoom"),r.setAttribute("data-val","reset"),u(t,e),r.setAttribute("data-attr","resetLastSave"),f(t,e),y(t,"geo"),y(t,"mapbox")}},c.toggleSpikelines={name:"toggleSpikelines",title:function(t){return l(t,"Toggle Spike Lines")},icon:s.spikeline,attr:"_cartesianSpikesEnabled",val:"on",click:function(t){var e=t._fullLayout,r=e._cartesianSpikesEnabled;e._cartesianSpikesEnabled="on"===r?"off":"on",n.call("_guiRelayout",t,function(t){for(var e="on"===t._fullLayout._cartesianSpikesEnabled,r=i.list(t,null,!0),n={},a=0;a<r.length;a++){var o=r[a];n[o._name+".showspikes"]=!!e||o._showSpikeInitial}return n}(t))}},c.resetViewMapbox={name:"resetViewMapbox",title:function(t){return l(t,"Reset view")},attr:"reset",icon:s.home,click:function(t){y(t,"mapbox")}},c.zoomInMapbox={name:"zoomInMapbox",title:function(t){return l(t,"Zoom in")},attr:"zoom",val:"in",icon:s.zoom_plus,click:m},c.zoomOutMapbox={name:"zoomOutMapbox",title:function(t){return l(t,"Zoom out")},attr:"zoom",val:"out",icon:s.zoom_minus,click:m}},{"../../fonts/ploticon":697,"../../lib":717,"../../plots/cartesian/axis_ids":768,"../../plots/plots":826,"../../registry":846}],650:[function(t,e,r){"use strict";r.manage=t("./manage")},{"./manage":651}],651:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axis_ids"),a=t("../../traces/scatter/subtypes"),i=t("../../registry"),o=t("../fx/helpers").isUnifiedHover,s=t("./modebar"),l=t("./buttons");e.exports=function(t){var e=t._fullLayout,r=t._context,c=e._modeBar;if(r.displayModeBar||r.watermark){if(!Array.isArray(r.modeBarButtonsToRemove))throw new Error(["*modeBarButtonsToRemove* configuration options","must be an array."].join(" "));if(!Array.isArray(r.modeBarButtonsToAdd))throw new Error(["*modeBarButtonsToAdd* configuration options","must be an array."].join(" "));var u,h=r.modeBarButtons;u=Array.isArray(h)&&h.length?function(t){for(var e=0;e<t.length;e++)for(var r=t[e],n=0;n<r.length;n++){var a=r[n];if("string"==typeof a){if(void 0===l[a])throw new Error(["*modeBarButtons* configuration options","invalid button name"].join(" "));t[e][n]=l[a]}}return t}(h):!r.displayModeBar&&r.watermark?[]:function(t){var e=t._fullLayout,r=t._fullData,s=t._context,c=s.modeBarButtonsToRemove,u=s.modeBarButtonsToAdd,h=e._has("cartesian"),f=e._has("gl3d"),p=e._has("geo"),d=e._has("pie"),g=e._has("funnelarea"),v=e._has("gl2d"),m=e._has("ternary"),y=e._has("mapbox"),x=e._has("polar"),b=e._has("sankey"),_=function(t){for(var e=n.list({_fullLayout:t},null,!0),r=0;r<e.length;r++)if(!e[r].fixedrange)return!1;return!0}(e),w=o(e.hovermode),k=[];function T(t){if(t.length){for(var e=[],r=0;r<t.length;r++){var n=t[r];-1===c.indexOf(n)&&e.push(l[n])}k.push(e)}}var M=["toImage"];s.showEditInChartStudio?M.push("editInChartStudio"):s.showSendToCloud&&M.push("sendDataToCloud");T(M);var A=[],S=[],E=[],L=[];(h||v||d||g||m)+p+f+y+x>1?(S=["toggleHover"],E=["resetViews"]):p?(A=["zoomInGeo","zoomOutGeo"],S=["hoverClosestGeo"],E=["resetGeo"]):f?(S=["hoverClosest3d"],E=["resetCameraDefault3d","resetCameraLastSave3d"]):y?(A=["zoomInMapbox","zoomOutMapbox"],S=["toggleHover"],E=["resetViewMapbox"]):v?S=["hoverClosestGl2d"]:d?S=["hoverClosestPie"]:b?(S=["hoverClosestCartesian","hoverCompareCartesian"],E=["resetViewSankey"]):S=["toggleHover"];h&&(S=["toggleSpikelines","hoverClosestCartesian","hoverCompareCartesian"]);(function(t){for(var e=0;e<t.length;e++)if(!i.traceIs(t[e],"noHover"))return!1;return!0}(r)||w)&&(S=[]);!h&&!v||_||(A=["zoomIn2d","zoomOut2d","autoScale2d"],"resetViews"!==E[0]&&(E=["resetScale2d"]));f?L=["zoom3d","pan3d","orbitRotation","tableRotation"]:(h||v)&&!_||m?L=["zoom2d","pan2d"]:y||p?L=["pan2d"]:x&&(L=["zoom2d"]);(function(t){for(var e=!1,r=0;r<t.length&&!e;r++){var n=t[r];n._module&&n._module.selectPoints&&(i.traceIs(n,"scatter-like")?(a.hasMarkers(n)||a.hasText(n))&&(e=!0):i.traceIs(n,"box-violin")&&"all"!==n.boxpoints&&"all"!==n.points||(e=!0))}return e})(r)&&L.push("select2d","lasso2d");return T(L),T(A.concat(E)),T(S),function(t,e){if(e.length)if(Array.isArray(e[0]))for(var r=0;r<e.length;r++)t.push(e[r]);else t.push(e);return t}(k,u)}(t),c?c.update(t,u):e._modeBar=s(t,u)}else c&&(c.destroy(),delete e._modeBar)}},{"../../plots/cartesian/axis_ids":768,"../../registry":846,"../../traces/scatter/subtypes":1144,"../fx/helpers":626,"./buttons":649,"./modebar":652}],652:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../../lib"),o=t("../../fonts/ploticon"),s=new DOMParser;function l(t){this.container=t.container,this.element=document.createElement("div"),this.update(t.graphInfo,t.buttons),this.container.appendChild(this.element)}var c=l.prototype;c.update=function(t,e){this.graphInfo=t;var r=this.graphInfo._context,n=this.graphInfo._fullLayout,a="modebar-"+n._uid;this.element.setAttribute("id",a),this._uid=a,this.element.className="modebar","hover"===r.displayModeBar&&(this.element.className+=" modebar--hover ease-bg"),"v"===n.modebar.orientation&&(this.element.className+=" vertical",e=e.reverse());var o=n.modebar,s="hover"===r.displayModeBar?".js-plotly-plot .plotly:hover ":"";i.deleteRelatedStyleRule(a),i.addRelatedStyleRule(a,s+"#"+a+" .modebar-group","background-color: "+o.bgcolor),i.addRelatedStyleRule(a,"#"+a+" .modebar-btn .icon path","fill: "+o.color),i.addRelatedStyleRule(a,"#"+a+" .modebar-btn:hover .icon path","fill: "+o.activecolor),i.addRelatedStyleRule(a,"#"+a+" .modebar-btn.active .icon path","fill: "+o.activecolor);var l=!this.hasButtons(e),c=this.hasLogo!==r.displaylogo,u=this.locale!==r.locale;if(this.locale=r.locale,(l||c||u)&&(this.removeAllButtons(),this.updateButtons(e),r.watermark||r.displaylogo)){var h=this.getLogo();r.watermark&&(h.className=h.className+" watermark"),"v"===n.modebar.orientation?this.element.insertBefore(h,this.element.childNodes[0]):this.element.appendChild(h),this.hasLogo=!0}this.updateActiveButton()},c.updateButtons=function(t){var e=this;this.buttons=t,this.buttonElements=[],this.buttonsNames=[],this.buttons.forEach(function(t){var r=e.createGroup();t.forEach(function(t){var n=t.name;if(!n)throw new Error("must provide button 'name' in button config");if(-1!==e.buttonsNames.indexOf(n))throw new Error("button name '"+n+"' is taken");e.buttonsNames.push(n);var a=e.createButton(t);e.buttonElements.push(a),r.appendChild(a)}),e.element.appendChild(r)})},c.createGroup=function(){var t=document.createElement("div");return t.className="modebar-group",t},c.createButton=function(t){var e=this,r=document.createElement("a");r.setAttribute("rel","tooltip"),r.className="modebar-btn";var a=t.title;void 0===a?a=t.name:"function"==typeof a&&(a=a(this.graphInfo)),(a||0===a)&&r.setAttribute("data-title",a),void 0!==t.attr&&r.setAttribute("data-attr",t.attr);var i=t.val;if(void 0!==i&&("function"==typeof i&&(i=i(this.graphInfo)),r.setAttribute("data-val",i)),"function"!=typeof t.click)throw new Error("must provide button 'click' function in button config");r.addEventListener("click",function(r){t.click(e.graphInfo,r),e.updateActiveButton(r.currentTarget)}),r.setAttribute("data-toggle",t.toggle||!1),t.toggle&&n.select(r).classed("active",!0);var s=t.icon;return"function"==typeof s?r.appendChild(s()):r.appendChild(this.createIcon(s||o.question)),r.setAttribute("data-gravity",t.gravity||"n"),r},c.createIcon=function(t){var e,r=a(t.height)?Number(t.height):t.ascent-t.descent,n="http://www.w3.org/2000/svg";if(t.path){(e=document.createElementNS(n,"svg")).setAttribute("viewBox",[0,0,t.width,r].join(" ")),e.setAttribute("class","icon");var i=document.createElementNS(n,"path");i.setAttribute("d",t.path),t.transform?i.setAttribute("transform",t.transform):void 0!==t.ascent&&i.setAttribute("transform","matrix(1 0 0 -1 0 "+t.ascent+")"),e.appendChild(i)}t.svg&&(e=s.parseFromString(t.svg,"application/xml").childNodes[0]);return e.setAttribute("height","1em"),e.setAttribute("width","1em"),e},c.updateActiveButton=function(t){var e=this.graphInfo._fullLayout,r=void 0!==t?t.getAttribute("data-attr"):null;this.buttonElements.forEach(function(t){var a=t.getAttribute("data-val")||!0,o=t.getAttribute("data-attr"),s="true"===t.getAttribute("data-toggle"),l=n.select(t);if(s)o===r&&l.classed("active",!l.classed("active"));else{var c=null===o?o:i.nestedProperty(e,o).get();l.classed("active",c===a)}})},c.hasButtons=function(t){var e=this.buttons;if(!e)return!1;if(t.length!==e.length)return!1;for(var r=0;r<t.length;++r){if(t[r].length!==e[r].length)return!1;for(var n=0;n<t[r].length;n++)if(t[r][n].name!==e[r][n].name)return!1}return!0},c.getLogo=function(){var t=this.createGroup(),e=document.createElement("a");return e.href="https://plotly.com/",e.target="_blank",e.setAttribute("data-title",i._(this.graphInfo,"Produced with Plotly")),e.className="modebar-btn plotlyjsicon modebar-btn--logo",e.appendChild(this.createIcon(o.newplotlylogo)),t.appendChild(e),t},c.removeAllButtons=function(){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.hasLogo=!1},c.destroy=function(){i.removeElement(this.container.querySelector(".modebar")),i.deleteRelatedStyleRule(this._uid)},e.exports=function(t,e){var r=t._fullLayout,a=new l({graphInfo:t,container:r._modebardiv.node(),buttons:e});return r._privateplot&&n.select(a.element).append("span").classed("badge-private float--left",!0).text("PRIVATE"),a}},{"../../fonts/ploticon":697,"../../lib":717,d3:165,"fast-isnumeric":228}],653:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),a=t("../color/attributes"),i=(0,t("../../plot_api/plot_template").templatedArray)("button",{visible:{valType:"boolean",dflt:!0,editType:"plot"},step:{valType:"enumerated",values:["month","year","day","hour","minute","second","all"],dflt:"month",editType:"plot"},stepmode:{valType:"enumerated",values:["backward","todate"],dflt:"backward",editType:"plot"},count:{valType:"number",min:0,dflt:1,editType:"plot"},label:{valType:"string",editType:"plot"},editType:"plot"});e.exports={visible:{valType:"boolean",editType:"plot"},buttons:i,x:{valType:"number",min:-2,max:3,editType:"plot"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left",editType:"plot"},y:{valType:"number",min:-2,max:3,editType:"plot"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"bottom",editType:"plot"},font:n({editType:"plot"}),bgcolor:{valType:"color",dflt:a.lightLine,editType:"plot"},activecolor:{valType:"color",editType:"plot"},bordercolor:{valType:"color",dflt:a.defaultLine,editType:"plot"},borderwidth:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"plot"}},{"../../plot_api/plot_template":755,"../../plots/font_attributes":791,"../color/attributes":590}],654:[function(t,e,r){"use strict";e.exports={yPad:.02,minButtonWidth:30,rx:3,ry:3,lightAmount:25,darkAmount:10}},{}],655:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../color"),i=t("../../plot_api/plot_template"),o=t("../../plots/array_container_defaults"),s=t("./attributes"),l=t("./constants");function c(t,e,r,a){var i=a.calendar;function o(r,a){return n.coerce(t,e,s.buttons,r,a)}if(o("visible")){var l=o("step");"all"!==l&&(!i||"gregorian"===i||"month"!==l&&"year"!==l?o("stepmode"):e.stepmode="backward",o("count")),o("label")}}e.exports=function(t,e,r,u,h){var f=t.rangeselector||{},p=i.newContainer(e,"rangeselector");function d(t,e){return n.coerce(f,p,s,t,e)}if(d("visible",o(f,p,{name:"buttons",handleItemDefaults:c,calendar:h}).length>0)){var g=function(t,e,r){for(var n=r.filter(function(r){return e[r].anchor===t._id}),a=0,i=0;i<n.length;i++){var o=e[n[i]].domain;o&&(a=Math.max(o[1],a))}return[t.domain[0],a+l.yPad]}(e,r,u);d("x",g[0]),d("y",g[1]),n.noneOrAll(t,e,["x","y"]),d("xanchor"),d("yanchor"),n.coerceFont(d,"font",r.font);var v=d("bgcolor");d("activecolor",a.contrast(v,l.lightAmount,l.darkAmount)),d("bordercolor"),d("borderwidth")}}},{"../../lib":717,"../../plot_api/plot_template":755,"../../plots/array_container_defaults":761,"../color":591,"./attributes":653,"./constants":654}],656:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../plots/plots"),o=t("../color"),s=t("../drawing"),l=t("../../lib"),c=t("../../lib/svg_text_utils"),u=t("../../plots/cartesian/axis_ids"),h=t("../../constants/alignment"),f=h.LINE_SPACING,p=h.FROM_TL,d=h.FROM_BR,g=t("./constants"),v=t("./get_update_object");function m(t){return t._id}function y(t,e,r){var n=l.ensureSingle(t,"rect","selector-rect",function(t){t.attr("shape-rendering","crispEdges")});n.attr({rx:g.rx,ry:g.ry}),n.call(o.stroke,e.bordercolor).call(o.fill,function(t,e){return e._isActive||e._isHovered?t.activecolor:t.bgcolor}(e,r)).style("stroke-width",e.borderwidth+"px")}function x(t,e,r,n){l.ensureSingle(t,"text","selector-text",function(t){t.classed("user-select-none",!0).attr("text-anchor","middle")}).call(s.font,e.font).text(function(t,e){if(t.label)return e?l.templateString(t.label,e):t.label;return"all"===t.step?"all":t.count+t.step.charAt(0)}(r,n._fullLayout._meta)).call(function(t){c.convertToTspans(t,n)})}e.exports=function(t){var e=t._fullLayout._infolayer.selectAll(".rangeselector").data(function(t){for(var e=u.list(t,"x",!0),r=[],n=0;n<e.length;n++){var a=e[n];a.rangeselector&&a.rangeselector.visible&&r.push(a)}return r}(t),m);e.enter().append("g").classed("rangeselector",!0),e.exit().remove(),e.style({cursor:"pointer","pointer-events":"all"}),e.each(function(e){var r=n.select(this),o=e,u=o.rangeselector,h=r.selectAll("g.button").data(l.filterVisible(u.buttons));h.enter().append("g").classed("button",!0),h.exit().remove(),h.each(function(e){var r=n.select(this),i=v(o,e);e._isActive=function(t,e,r){if("all"===e.step)return!0===t.autorange;var n=Object.keys(r);return t.range[0]===r[n[0]]&&t.range[1]===r[n[1]]}(o,e,i),r.call(y,u,e),r.call(x,u,e,t),r.on("click",function(){t._dragged||a.call("_guiRelayout",t,i)}),r.on("mouseover",function(){e._isHovered=!0,r.call(y,u,e)}),r.on("mouseout",function(){e._isHovered=!1,r.call(y,u,e)})}),function(t,e,r,a,o){var u=0,h=0,v=r.borderwidth;e.each(function(){var t=n.select(this),e=t.select(".selector-text"),a=r.font.size*f,i=Math.max(a*c.lineCount(e),16)+3;h=Math.max(h,i)}),e.each(function(){var t=n.select(this),e=t.select(".selector-rect"),a=t.select(".selector-text"),i=a.node()&&s.bBox(a.node()).width,o=r.font.size*f,l=c.lineCount(a),p=Math.max(i+10,g.minButtonWidth);t.attr("transform","translate("+(v+u)+","+v+")"),e.attr({x:0,y:0,width:p,height:h}),c.positionText(a,p/2,h/2-(l-1)*o/2+3),u+=p+5});var m=t._fullLayout._size,y=m.l+m.w*r.x,x=m.t+m.h*(1-r.y),b="left";l.isRightAnchor(r)&&(y-=u,b="right");l.isCenterAnchor(r)&&(y-=u/2,b="center");var _="top";l.isBottomAnchor(r)&&(x-=h,_="bottom");l.isMiddleAnchor(r)&&(x-=h/2,_="middle");u=Math.ceil(u),h=Math.ceil(h),y=Math.round(y),x=Math.round(x),i.autoMargin(t,a+"-range-selector",{x:r.x,y:r.y,l:u*p[b],r:u*d[b],b:h*d[_],t:h*p[_]}),o.attr("transform","translate("+y+","+x+")")}(t,h,u,o._name,r)})}},{"../../constants/alignment":686,"../../lib":717,"../../lib/svg_text_utils":741,"../../plots/cartesian/axis_ids":768,"../../plots/plots":826,"../../registry":846,"../color":591,"../drawing":612,"./constants":654,"./get_update_object":657,d3:165}],657:[function(t,e,r){"use strict";var n=t("d3");e.exports=function(t,e){var r=t._name,a={};if("all"===e.step)a[r+".autorange"]=!0;else{var i=function(t,e){var r,a=t.range,i=new Date(t.r2l(a[1])),o=e.step,s=e.count;switch(e.stepmode){case"backward":r=t.l2r(+n.time[o].utc.offset(i,-s));break;case"todate":var l=n.time[o].utc.offset(i,-s);r=t.l2r(+n.time[o].utc.ceil(l))}var c=a[1];return[r,c]}(t,e);a[r+".range[0]"]=i[0],a[r+".range[1]"]=i[1]}return a}},{d3:165}],658:[function(t,e,r){"use strict";e.exports={moduleType:"component",name:"rangeselector",schema:{subplots:{xaxis:{rangeselector:t("./attributes")}}},layoutAttributes:t("./attributes"),handleDefaults:t("./defaults"),draw:t("./draw")}},{"./attributes":653,"./defaults":655,"./draw":656}],659:[function(t,e,r){"use strict";var n=t("../color/attributes");e.exports={bgcolor:{valType:"color",dflt:n.background,editType:"plot"},bordercolor:{valType:"color",dflt:n.defaultLine,editType:"plot"},borderwidth:{valType:"integer",dflt:0,min:0,editType:"plot"},autorange:{valType:"boolean",dflt:!0,editType:"calc",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},range:{valType:"info_array",items:[{valType:"any",editType:"calc",impliedEdits:{"^autorange":!1}},{valType:"any",editType:"calc",impliedEdits:{"^autorange":!1}}],editType:"calc",impliedEdits:{autorange:!1}},thickness:{valType:"number",dflt:.15,min:0,max:1,editType:"plot"},visible:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc"}},{"../color/attributes":590}],660:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axis_ids").list,a=t("../../plots/cartesian/autorange").getAutoRange,i=t("./constants");e.exports=function(t){for(var e=n(t,"x",!0),r=0;r<e.length;r++){var o=e[r],s=o[i.name];s&&s.visible&&s.autorange&&(s._input.autorange=!0,s._input.range=s.range=a(t,o))}}},{"../../plots/cartesian/autorange":764,"../../plots/cartesian/axis_ids":768,"./constants":661}],661:[function(t,e,r){"use strict";e.exports={name:"rangeslider",containerClassName:"rangeslider-container",bgClassName:"rangeslider-bg",rangePlotClassName:"rangeslider-rangeplot",maskMinClassName:"rangeslider-mask-min",maskMaxClassName:"rangeslider-mask-max",slideBoxClassName:"rangeslider-slidebox",grabberMinClassName:"rangeslider-grabber-min",grabAreaMinClassName:"rangeslider-grabarea-min",handleMinClassName:"rangeslider-handle-min",grabberMaxClassName:"rangeslider-grabber-max",grabAreaMaxClassName:"rangeslider-grabarea-max",handleMaxClassName:"rangeslider-handle-max",maskMinOppAxisClassName:"rangeslider-mask-min-opp-axis",maskMaxOppAxisClassName:"rangeslider-mask-max-opp-axis",maskColor:"rgba(0,0,0,0.4)",maskOppAxisColor:"rgba(0,0,0,0.2)",slideBoxFill:"transparent",slideBoxCursor:"ew-resize",grabAreaFill:"transparent",grabAreaCursor:"col-resize",grabAreaWidth:10,handleWidth:4,handleRadius:1,handleStrokeWidth:1,extraPad:15}},{}],662:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plot_api/plot_template"),i=t("../../plots/cartesian/axis_ids"),o=t("./attributes"),s=t("./oppaxis_attributes");e.exports=function(t,e,r){var l=t[r],c=e[r];if(l.rangeslider||e._requestRangeslider[c._id]){n.isPlainObject(l.rangeslider)||(l.rangeslider={});var u,h,f=l.rangeslider,p=a.newContainer(c,"rangeslider");if(_("visible")){_("bgcolor",e.plot_bgcolor),_("bordercolor"),_("borderwidth"),_("thickness"),_("autorange",!c.isValidRange(f.range)),_("range");var d=e._subplots;if(d)for(var g=d.cartesian.filter(function(t){return t.substr(0,t.indexOf("y"))===i.name2id(r)}).map(function(t){return t.substr(t.indexOf("y"),t.length)}),v=n.simpleMap(g,i.id2name),m=0;m<v.length;m++){var y=v[m];u=f[y]||{},h=a.newContainer(p,y,"yaxis");var x,b=e[y];u.range&&b.isValidRange(u.range)&&(x="fixed"),"match"!==w("rangemode",x)&&w("range",b.range.slice())}p._input=f}}function _(t,e){return n.coerce(f,p,o,t,e)}function w(t,e){return n.coerce(u,h,s,t,e)}}},{"../../lib":717,"../../plot_api/plot_template":755,"../../plots/cartesian/axis_ids":768,"./attributes":659,"./oppaxis_attributes":666}],663:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../plots/plots"),o=t("../../lib"),s=t("../drawing"),l=t("../color"),c=t("../titles"),u=t("../../plots/cartesian"),h=t("../../plots/cartesian/axis_ids"),f=t("../dragelement"),p=t("../../lib/setcursor"),d=t("./constants");function g(t,e,r,n){var a=o.ensureSingle(t,"rect",d.bgClassName,function(t){t.attr({x:0,y:0,"shape-rendering":"crispEdges"})}),i=n.borderwidth%2==0?n.borderwidth:n.borderwidth-1,l=-n._offsetShift,c=s.crispRound(e,n.borderwidth);a.attr({width:n._width+i,height:n._height+i,transform:"translate("+l+","+l+")",fill:n.bgcolor,stroke:n.bordercolor,"stroke-width":c})}function v(t,e,r,n){var a=e._fullLayout;o.ensureSingleById(a._topdefs,"clipPath",n._clipId,function(t){t.append("rect").attr({x:0,y:0})}).select("rect").attr({width:n._width,height:n._height})}function m(t,e,r,a){var l,c=e.calcdata,f=t.selectAll("g."+d.rangePlotClassName).data(r._subplotsWith,o.identity);f.enter().append("g").attr("class",function(t){return d.rangePlotClassName+" "+t}).call(s.setClipUrl,a._clipId,e),f.order(),f.exit().remove(),f.each(function(t,o){var s=n.select(this),f=0===o,p=h.getFromId(e,t,"y"),d=p._name,g=a[d],v={data:[],layout:{xaxis:{type:r.type,domain:[0,1],range:a.range.slice(),calendar:r.calendar},width:a._width,height:a._height,margin:{t:0,b:0,l:0,r:0}},_context:e._context};r.rangebreaks&&(v.layout.xaxis.rangebreaks=r.rangebreaks),v.layout[d]={type:p.type,domain:[0,1],range:"match"!==g.rangemode?g.range.slice():p.range.slice(),calendar:p.calendar},p.rangebreaks&&(v.layout[d].rangebreaks=p.rangebreaks),i.supplyDefaults(v);var m=v._fullLayout.xaxis,y=v._fullLayout[d];m.clearCalc(),m.setScale(),y.clearCalc(),y.setScale();var x={id:t,plotgroup:s,xaxis:m,yaxis:y,isRangePlot:!0};f?l=x:(x.mainplot="xy",x.mainplotinfo=l),u.rangePlot(e,x,function(t,e){for(var r=[],n=0;n<t.length;n++){var a=t[n],i=a[0].trace;i.xaxis+i.yaxis===e&&r.push(a)}return r}(c,t))})}function y(t,e,r,n,a){(o.ensureSingle(t,"rect",d.maskMinClassName,function(t){t.attr({x:0,y:0,"shape-rendering":"crispEdges"})}).attr("height",n._height).call(l.fill,d.maskColor),o.ensureSingle(t,"rect",d.maskMaxClassName,function(t){t.attr({y:0,"shape-rendering":"crispEdges"})}).attr("height",n._height).call(l.fill,d.maskColor),"match"!==a.rangemode)&&(o.ensureSingle(t,"rect",d.maskMinOppAxisClassName,function(t){t.attr({y:0,"shape-rendering":"crispEdges"})}).attr("width",n._width).call(l.fill,d.maskOppAxisColor),o.ensureSingle(t,"rect",d.maskMaxOppAxisClassName,function(t){t.attr({y:0,"shape-rendering":"crispEdges"})}).attr("width",n._width).style("border-top",d.maskOppBorder).call(l.fill,d.maskOppAxisColor))}function x(t,e,r,n){e._context.staticPlot||o.ensureSingle(t,"rect",d.slideBoxClassName,function(t){t.attr({y:0,cursor:d.slideBoxCursor,"shape-rendering":"crispEdges"})}).attr({height:n._height,fill:d.slideBoxFill})}function b(t,e,r,n){var a=o.ensureSingle(t,"g",d.grabberMinClassName),i=o.ensureSingle(t,"g",d.grabberMaxClassName),s={x:0,width:d.handleWidth,rx:d.handleRadius,fill:l.background,stroke:l.defaultLine,"stroke-width":d.handleStrokeWidth,"shape-rendering":"crispEdges"},c={y:Math.round(n._height/4),height:Math.round(n._height/2)};if(o.ensureSingle(a,"rect",d.handleMinClassName,function(t){t.attr(s)}).attr(c),o.ensureSingle(i,"rect",d.handleMaxClassName,function(t){t.attr(s)}).attr(c),!e._context.staticPlot){var u={width:d.grabAreaWidth,x:0,y:0,fill:d.grabAreaFill,cursor:d.grabAreaCursor};o.ensureSingle(a,"rect",d.grabAreaMinClassName,function(t){t.attr(u)}).attr("height",n._height),o.ensureSingle(i,"rect",d.grabAreaMaxClassName,function(t){t.attr(u)}).attr("height",n._height)}}e.exports=function(t){for(var e=t._fullLayout,r=e._rangeSliderData,i=0;i<r.length;i++){var s=r[i][d.name];s._clipId=s._id+"-"+e._uid}var l=e._infolayer.selectAll("g."+d.containerClassName).data(r,function(t){return t._name});l.exit().each(function(t){var r=t[d.name];e._topdefs.select("#"+r._clipId).remove()}).remove(),0!==r.length&&(l.enter().append("g").classed(d.containerClassName,!0).attr("pointer-events","all"),l.each(function(r){var i=n.select(this),s=r[d.name],l=e[h.id2name(r.anchor)],u=s[h.id2name(r.anchor)];if(s.range){var _,w=o.simpleMap(s.range,r.r2l),k=o.simpleMap(r.range,r.r2l);_=k[0]<k[1]?[Math.min(w[0],k[0]),Math.max(w[1],k[1])]:[Math.max(w[0],k[0]),Math.min(w[1],k[1])],s.range=s._input.range=o.simpleMap(_,r.l2r)}r.cleanRange("rangeslider.range");var T=e._size,M=r.domain;s._width=T.w*(M[1]-M[0]);var A=Math.round(T.l+T.w*M[0]),S=Math.round(T.t+T.h*(1-r._counterDomainMin)+("bottom"===r.side?r._depth:0)+s._offsetShift+d.extraPad);i.attr("transform","translate("+A+","+S+")"),s._rl=o.simpleMap(s.range,r.r2l);var E=s._rl[0],L=s._rl[1],C=L-E;if(s.p2d=function(t){return t/s._width*C+E},s.d2p=function(t){return(t-E)/C*s._width},r.rangebreaks){var P=r.locateBreaks(E,L);if(P.length){var O,z,I=0;for(O=0;O<P.length;O++)I+=(z=P[O]).max-z.min;var D=s._width/(L-E-I),R=[-D*E];for(O=0;O<P.length;O++)z=P[O],R.push(R[R.length-1]-D*(z.max-z.min));for(s.d2p=function(t){for(var e=R[0],r=0;r<P.length;r++){var n=P[r];if(t>=n.max)e=R[r+1];else if(t<n.min)break}return e+D*t},O=0;O<P.length;O++)(z=P[O]).pmin=s.d2p(z.min),z.pmax=s.d2p(z.max);s.p2d=function(t){for(var e=R[0],r=0;r<P.length;r++){var n=P[r];if(t>=n.pmax)e=R[r+1];else if(t<n.pmin)break}return(t-e)/D}}}if("match"!==u.rangemode){var F=l.r2l(u.range[0]),B=l.r2l(u.range[1])-F;s.d2pOppAxis=function(t){return(t-F)/B*s._height}}i.call(g,t,r,s).call(v,t,r,s).call(m,t,r,s).call(y,t,r,s,u).call(x,t,r,s).call(b,t,r,s),function(t,e,r,i){var s=t.select("rect."+d.slideBoxClassName).node(),l=t.select("rect."+d.grabAreaMinClassName).node(),c=t.select("rect."+d.grabAreaMaxClassName).node();t.on("mousedown",function(){var u=n.event,h=u.target,d=u.clientX,g=d-t.node().getBoundingClientRect().left,v=i.d2p(r._rl[0]),m=i.d2p(r._rl[1]),y=f.coverSlip();function x(t){var u,f,x,b=+t.clientX-d;switch(h){case s:x="ew-resize",u=v+b,f=m+b;break;case l:x="col-resize",u=v+b,f=m;break;case c:x="col-resize",u=v,f=m+b;break;default:x="ew-resize",u=g,f=g+b}if(f<u){var _=f;f=u,u=_}i._pixelMin=u,i._pixelMax=f,p(n.select(y),x),function(t,e,r,n){function i(t){return r.l2r(o.constrain(t,n._rl[0],n._rl[1]))}var s=i(n.p2d(n._pixelMin)),l=i(n.p2d(n._pixelMax));window.requestAnimationFrame(function(){a.call("_guiRelayout",e,r._name+".range",[s,l])})}(0,e,r,i)}y.addEventListener("mousemove",x),y.addEventListener("mouseup",function t(){y.removeEventListener("mousemove",x);y.removeEventListener("mouseup",t);o.removeElement(y)})})}(i,t,r,s),function(t,e,r,n,a,i){var s=d.handleWidth/2;function l(t){return o.constrain(t,0,n._width)}function c(t){return o.constrain(t,0,n._height)}function u(t){return o.constrain(t,-s,n._width+s)}var h=l(n.d2p(r._rl[0])),f=l(n.d2p(r._rl[1]));if(t.select("rect."+d.slideBoxClassName).attr("x",h).attr("width",f-h),t.select("rect."+d.maskMinClassName).attr("width",h),t.select("rect."+d.maskMaxClassName).attr("x",f).attr("width",n._width-f),"match"!==i.rangemode){var p=n._height-c(n.d2pOppAxis(a._rl[1])),g=n._height-c(n.d2pOppAxis(a._rl[0]));t.select("rect."+d.maskMinOppAxisClassName).attr("x",h).attr("height",p).attr("width",f-h),t.select("rect."+d.maskMaxOppAxisClassName).attr("x",h).attr("y",g).attr("height",n._height-g).attr("width",f-h),t.select("rect."+d.slideBoxClassName).attr("y",p).attr("height",g-p)}var v=Math.round(u(h-s))-.5,m=Math.round(u(f-s))+.5;t.select("g."+d.grabberMinClassName).attr("transform","translate("+v+",0.5)"),t.select("g."+d.grabberMaxClassName).attr("transform","translate("+m+",0.5)")}(i,0,r,s,l,u),"bottom"===r.side&&c.draw(t,r._id+"title",{propContainer:r,propName:r._name+".title",placeholder:e._dfltTitle.x,attributes:{x:r._offset+r._length/2,y:S+s._height+s._offsetShift+10+1.5*r.title.font.size,"text-anchor":"middle"}})}))}},{"../../lib":717,"../../lib/setcursor":737,"../../plots/cartesian":776,"../../plots/cartesian/axis_ids":768,"../../plots/plots":826,"../../registry":846,"../color":591,"../dragelement":609,"../drawing":612,"../titles":679,"./constants":661,d3:165}],664:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axis_ids"),a=t("../../lib/svg_text_utils"),i=t("./constants"),o=t("../../constants/alignment").LINE_SPACING,s=i.name;function l(t){var e=t&&t[s];return e&&e.visible}r.isVisible=l,r.makeData=function(t){var e=n.list({_fullLayout:t},"x",!0),r=t.margin,a=[];if(!t._has("gl2d"))for(var i=0;i<e.length;i++){var o=e[i];if(l(o)){a.push(o);var c=o[s];c._id=s+o._id,c._height=(t.height-r.b-r.t)*c.thickness,c._offsetShift=Math.floor(c.borderwidth/2)}}t._rangeSliderData=a},r.autoMarginOpts=function(t,e){var r=t._fullLayout,n=e[s],l=e._id.charAt(0),c=0,u=0;"bottom"===e.side&&(c=e._depth,e.title.text!==r._dfltTitle[l]&&(u=1.5*e.title.font.size+10+n._offsetShift,u+=(e.title.text.match(a.BR_TAG_ALL)||[]).length*e.title.font.size*o));return{x:0,y:e._counterDomainMin,l:0,r:0,t:0,b:n._height+c+Math.max(r.margin.b,u),pad:i.extraPad+2*n._offsetShift}}},{"../../constants/alignment":686,"../../lib/svg_text_utils":741,"../../plots/cartesian/axis_ids":768,"./constants":661}],665:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("./oppaxis_attributes"),o=t("./helpers");e.exports={moduleType:"component",name:"rangeslider",schema:{subplots:{xaxis:{rangeslider:n.extendFlat({},a,{yaxis:i})}}},layoutAttributes:t("./attributes"),handleDefaults:t("./defaults"),calcAutorange:t("./calc_autorange"),draw:t("./draw"),isVisible:o.isVisible,makeData:o.makeData,autoMarginOpts:o.autoMarginOpts}},{"../../lib":717,"./attributes":659,"./calc_autorange":660,"./defaults":662,"./draw":663,"./helpers":664,"./oppaxis_attributes":666}],666:[function(t,e,r){"use strict";e.exports={_isSubplotObj:!0,rangemode:{valType:"enumerated",values:["auto","fixed","match"],dflt:"match",editType:"calc"},range:{valType:"info_array",items:[{valType:"any",editType:"plot"},{valType:"any",editType:"plot"}],editType:"plot"},editType:"calc"}},{}],667:[function(t,e,r){"use strict";var n=t("../annotations/attributes"),a=t("../../traces/scatter/attributes").line,i=t("../drawing/attributes").dash,o=t("../../lib/extend").extendFlat,s=t("../../plot_api/plot_template").templatedArray;e.exports=s("shape",{visible:{valType:"boolean",dflt:!0,editType:"calc+arraydraw"},type:{valType:"enumerated",values:["circle","rect","path","line"],editType:"calc+arraydraw"},layer:{valType:"enumerated",values:["below","above"],dflt:"above",editType:"arraydraw"},xref:o({},n.xref,{}),xsizemode:{valType:"enumerated",values:["scaled","pixel"],dflt:"scaled",editType:"calc+arraydraw"},xanchor:{valType:"any",editType:"calc+arraydraw"},x0:{valType:"any",editType:"calc+arraydraw"},x1:{valType:"any",editType:"calc+arraydraw"},yref:o({},n.yref,{}),ysizemode:{valType:"enumerated",values:["scaled","pixel"],dflt:"scaled",editType:"calc+arraydraw"},yanchor:{valType:"any",editType:"calc+arraydraw"},y0:{valType:"any",editType:"calc+arraydraw"},y1:{valType:"any",editType:"calc+arraydraw"},path:{valType:"string",editType:"calc+arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},line:{color:o({},a.color,{editType:"arraydraw"}),width:o({},a.width,{editType:"calc+arraydraw"}),dash:o({},i,{editType:"arraydraw"}),editType:"calc+arraydraw"},fillcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},editType:"arraydraw"})},{"../../lib/extend":708,"../../plot_api/plot_template":755,"../../traces/scatter/attributes":1120,"../annotations/attributes":574,"../drawing/attributes":611}],668:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("./constants"),o=t("./helpers");function s(t){return c(t.line.width,t.xsizemode,t.x0,t.x1,t.path,!1)}function l(t){return c(t.line.width,t.ysizemode,t.y0,t.y1,t.path,!0)}function c(t,e,r,a,s,l){var c=t/2,u=l;if("pixel"===e){var h=s?o.extractPathCoords(s,l?i.paramIsY:i.paramIsX):[r,a],f=n.aggNums(Math.max,null,h),p=n.aggNums(Math.min,null,h),d=p<0?Math.abs(p)+c:c,g=f>0?f+c:c;return{ppad:c,ppadplus:u?d:g,ppadminus:u?g:d}}return{ppad:c}}function u(t,e,r,n,a){var s="category"===t.type||"multicategory"===t.type?t.r2c:t.d2c;if(void 0!==e)return[s(e),s(r)];if(n){var l,c,u,h,f=1/0,p=-1/0,d=n.match(i.segmentRE);for("date"===t.type&&(s=o.decodeDate(s)),l=0;l<d.length;l++)void 0!==(c=a[d[l].charAt(0)].drawn)&&(!(u=d[l].substr(1).match(i.paramRE))||u.length<c||((h=s(u[c]))<f&&(f=h),h>p&&(p=h)));return p>=f?[f,p]:void 0}}e.exports=function(t){var e=t._fullLayout,r=n.filterVisible(e.shapes);if(r.length&&t._fullData.length)for(var o=0;o<r.length;o++){var c,h,f=r[o];if(f._extremes={},"paper"!==f.xref){var p="pixel"===f.xsizemode?f.xanchor:f.x0,d="pixel"===f.xsizemode?f.xanchor:f.x1;(h=u(c=a.getFromId(t,f.xref),p,d,f.path,i.paramIsX))&&(f._extremes[c._id]=a.findExtremes(c,h,s(f)))}if("paper"!==f.yref){var g="pixel"===f.ysizemode?f.yanchor:f.y0,v="pixel"===f.ysizemode?f.yanchor:f.y1;(h=u(c=a.getFromId(t,f.yref),g,v,f.path,i.paramIsY))&&(f._extremes[c._id]=a.findExtremes(c,h,l(f)))}}}},{"../../lib":717,"../../plots/cartesian/axes":765,"./constants":669,"./helpers":672}],669:[function(t,e,r){"use strict";e.exports={segmentRE:/[MLHVQCTSZ][^MLHVQCTSZ]*/g,paramRE:/[^\s,]+/g,paramIsX:{M:{0:!0,drawn:0},L:{0:!0,drawn:0},H:{0:!0,drawn:0},V:{},Q:{0:!0,2:!0,drawn:2},C:{0:!0,2:!0,4:!0,drawn:4},T:{0:!0,drawn:0},S:{0:!0,2:!0,drawn:2},Z:{}},paramIsY:{M:{1:!0,drawn:1},L:{1:!0,drawn:1},H:{},V:{0:!0,drawn:0},Q:{1:!0,3:!0,drawn:3},C:{1:!0,3:!0,5:!0,drawn:5},T:{1:!0,drawn:1},S:{1:!0,3:!0,drawn:5},Z:{}},numParams:{M:2,L:2,H:1,V:1,Q:4,C:6,T:2,S:4,Z:0}}},{}],670:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../../plots/array_container_defaults"),o=t("./attributes"),s=t("./helpers");function l(t,e,r){function i(r,a){return n.coerce(t,e,o,r,a)}if(i("visible")){i("layer"),i("opacity"),i("fillcolor"),i("line.color"),i("line.width"),i("line.dash");for(var l=i("type",t.path?"path":"rect"),c=i("xsizemode"),u=i("ysizemode"),h=["x","y"],f=0;f<2;f++){var p,d,g,v=h[f],m=v+"anchor",y="x"===v?c:u,x={_fullLayout:r},b=a.coerceRef(t,e,x,v,"","paper");if("paper"!==b?((p=a.getFromId(x,b))._shapeIndices.push(e._index),g=s.rangeToShapePosition(p),d=s.shapePositionToRange(p)):d=g=n.identity,"path"!==l){var _=v+"0",w=v+"1",k=t[_],T=t[w];t[_]=d(t[_],!0),t[w]=d(t[w],!0),"pixel"===y?(i(_,0),i(w,10)):(a.coercePosition(e,x,i,b,_,.25),a.coercePosition(e,x,i,b,w,.75)),e[_]=g(e[_]),e[w]=g(e[w]),t[_]=k,t[w]=T}if("pixel"===y){var M=t[m];t[m]=d(t[m],!0),a.coercePosition(e,x,i,b,m,.25),e[m]=g(e[m]),t[m]=M}}"path"===l?i("path"):n.noneOrAll(t,e,["x0","x1","y0","y1"])}}e.exports=function(t,e){i(t,e,{name:"shapes",handleItemDefaults:l})}},{"../../lib":717,"../../plots/array_container_defaults":761,"../../plots/cartesian/axes":765,"./attributes":667,"./helpers":672}],671:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("../../plots/cartesian/axes"),o=t("../color"),s=t("../drawing"),l=t("../../plot_api/plot_template").arrayEditor,c=t("../dragelement"),u=t("../../lib/setcursor"),h=t("./constants"),f=t("./helpers");function p(t,e){t._fullLayout._paperdiv.selectAll('.shapelayer [data-index="'+e+'"]').remove();var r=t._fullLayout.shapes[e]||{};if(r._input&&!1!==r.visible)if("below"!==r.layer)m(t._fullLayout._shapeUpperLayer);else if("paper"===r.xref||"paper"===r.yref)m(t._fullLayout._shapeLowerLayer);else{var p=t._fullLayout._plots[r.xref+r.yref];if(p)m((p.mainplotinfo||p).shapelayer);else m(t._fullLayout._shapeLowerLayer)}function m(p){var m={"data-index":e,"fill-rule":"evenodd",d:g(t,r)},y=r.line.width?r.line.color:"rgba(0,0,0,0)",x=p.append("path").attr(m).style("opacity",r.opacity).call(o.stroke,y).call(o.fill,r.fillcolor).call(s.dashLine,r.line.dash,r.line.width);d(x,t,r),t._context.edits.shapePosition&&function(t,e,r,o,p){var m,y,x,b,_,w,k,T,M,A,S,E,L,C,P,O,z=10,I=10,D="pixel"===r.xsizemode,R="pixel"===r.ysizemode,F="line"===r.type,B="path"===r.type,N=l(t.layout,"shapes",r),j=N.modifyItem,V=i.getFromId(t,r.xref),U=i.getFromId(t,r.yref),q=f.getDataToPixel(t,V),H=f.getDataToPixel(t,U,!0),G=f.getPixelToData(t,V),Y=f.getPixelToData(t,U,!0),W=F?function(){var t=Math.max(r.line.width,10),n=p.append("g").attr("data-index",o);n.append("path").attr("d",e.attr("d")).style({cursor:"move","stroke-width":t,"stroke-opacity":"0"});var a={"fill-opacity":"0"},i=t/2>10?t/2:10;return n.append("circle").attr({"data-line-point":"start-point",cx:D?q(r.xanchor)+r.x0:q(r.x0),cy:R?H(r.yanchor)-r.y0:H(r.y0),r:i}).style(a).classed("cursor-grab",!0),n.append("circle").attr({"data-line-point":"end-point",cx:D?q(r.xanchor)+r.x1:q(r.x1),cy:R?H(r.yanchor)-r.y1:H(r.y1),r:i}).style(a).classed("cursor-grab",!0),n}():e,X={element:W.node(),gd:t,prepFn:function(n){D&&(_=q(r.xanchor));R&&(w=H(r.yanchor));"path"===r.type?P=r.path:(m=D?r.x0:q(r.x0),y=R?r.y0:H(r.y0),x=D?r.x1:q(r.x1),b=R?r.y1:H(r.y1));m<x?(M=m,L="x0",A=x,C="x1"):(M=x,L="x1",A=m,C="x0");!R&&y<b||R&&y>b?(k=y,S="y0",T=b,E="y1"):(k=b,S="y1",T=y,E="y0");Z(n),Q(p,r),function(t,e,r){var n=e.xref,a=e.yref,o=i.getFromId(r,n),l=i.getFromId(r,a),c="";"paper"===n||o.autorange||(c+=n);"paper"===a||l.autorange||(c+=a);s.setClipUrl(t,c?"clip"+r._fullLayout._uid+c:null,r)}(e,r,t),X.moveFn="move"===O?J:K},doneFn:function(){u(e),$(p),d(e,t,r),n.call("_guiRelayout",t,N.getUpdateObj())},clickFn:function(){$(p)}};function Z(t){if(F)O="path"===t.target.tagName?"move":"start-point"===t.target.attributes["data-line-point"].value?"resize-over-start-point":"resize-over-end-point";else{var r=X.element.getBoundingClientRect(),n=r.right-r.left,a=r.bottom-r.top,i=t.clientX-r.left,o=t.clientY-r.top,s=!B&&n>z&&a>I&&!t.shiftKey?c.getCursor(i/n,1-o/a):"move";u(e,s),O=s.split("-")[0]}}function J(n,a){if("path"===r.type){var i=function(t){return t},o=i,s=i;D?j("xanchor",r.xanchor=G(_+n)):(o=function(t){return G(q(t)+n)},V&&"date"===V.type&&(o=f.encodeDate(o))),R?j("yanchor",r.yanchor=Y(w+a)):(s=function(t){return Y(H(t)+a)},U&&"date"===U.type&&(s=f.encodeDate(s))),j("path",r.path=v(P,o,s))}else D?j("xanchor",r.xanchor=G(_+n)):(j("x0",r.x0=G(m+n)),j("x1",r.x1=G(x+n))),R?j("yanchor",r.yanchor=Y(w+a)):(j("y0",r.y0=Y(y+a)),j("y1",r.y1=Y(b+a)));e.attr("d",g(t,r)),Q(p,r)}function K(n,a){if(B){var i=function(t){return t},o=i,s=i;D?j("xanchor",r.xanchor=G(_+n)):(o=function(t){return G(q(t)+n)},V&&"date"===V.type&&(o=f.encodeDate(o))),R?j("yanchor",r.yanchor=Y(w+a)):(s=function(t){return Y(H(t)+a)},U&&"date"===U.type&&(s=f.encodeDate(s))),j("path",r.path=v(P,o,s))}else if(F){if("resize-over-start-point"===O){var l=m+n,c=R?y-a:y+a;j("x0",r.x0=D?l:G(l)),j("y0",r.y0=R?c:Y(c))}else if("resize-over-end-point"===O){var u=x+n,h=R?b-a:b+a;j("x1",r.x1=D?u:G(u)),j("y1",r.y1=R?h:Y(h))}}else{var d=~O.indexOf("n")?k+a:k,N=~O.indexOf("s")?T+a:T,W=~O.indexOf("w")?M+n:M,X=~O.indexOf("e")?A+n:A;~O.indexOf("n")&&R&&(d=k-a),~O.indexOf("s")&&R&&(N=T-a),(!R&&N-d>I||R&&d-N>I)&&(j(S,r[S]=R?d:Y(d)),j(E,r[E]=R?N:Y(N))),X-W>z&&(j(L,r[L]=D?W:G(W)),j(C,r[C]=D?X:G(X)))}e.attr("d",g(t,r)),Q(p,r)}function Q(t,e){(D||R)&&function(){var r="path"!==e.type,n=t.selectAll(".visual-cue").data([0]);n.enter().append("path").attr({fill:"#fff","fill-rule":"evenodd",stroke:"#000","stroke-width":1}).classed("visual-cue",!0);var i=q(D?e.xanchor:a.midRange(r?[e.x0,e.x1]:f.extractPathCoords(e.path,h.paramIsX))),o=H(R?e.yanchor:a.midRange(r?[e.y0,e.y1]:f.extractPathCoords(e.path,h.paramIsY)));if(i=f.roundPositionForSharpStrokeRendering(i,1),o=f.roundPositionForSharpStrokeRendering(o,1),D&&R){var s="M"+(i-1-1)+","+(o-1-1)+"h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z";n.attr("d",s)}else if(D){var l="M"+(i-1-1)+","+(o-9-1)+"v18 h2 v-18 Z";n.attr("d",l)}else{var c="M"+(i-9-1)+","+(o-1-1)+"h18 v2 h-18 Z";n.attr("d",c)}}()}function $(t){t.selectAll(".visual-cue").remove()}c.init(X),W.node().onmousemove=Z}(t,x,r,e,p)}}function d(t,e,r){var n=(r.xref+r.yref).replace(/paper/g,"");s.setClipUrl(t,n?"clip"+e._fullLayout._uid+n:null,e)}function g(t,e){var r,n,o,s,l,c,u,p,d=e.type,g=i.getFromId(t,e.xref),v=i.getFromId(t,e.yref),m=t._fullLayout._size;if(g?(r=f.shapePositionToRange(g),n=function(t){return g._offset+g.r2p(r(t,!0))}):n=function(t){return m.l+m.w*t},v?(o=f.shapePositionToRange(v),s=function(t){return v._offset+v.r2p(o(t,!0))}):s=function(t){return m.t+m.h*(1-t)},"path"===d)return g&&"date"===g.type&&(n=f.decodeDate(n)),v&&"date"===v.type&&(s=f.decodeDate(s)),function(t,e,r){var n=t.path,i=t.xsizemode,o=t.ysizemode,s=t.xanchor,l=t.yanchor;return n.replace(h.segmentRE,function(t){var n=0,c=t.charAt(0),u=h.paramIsX[c],f=h.paramIsY[c],p=h.numParams[c],d=t.substr(1).replace(h.paramRE,function(t){return u[n]?t="pixel"===i?e(s)+Number(t):e(t):f[n]&&(t="pixel"===o?r(l)-Number(t):r(t)),++n>p&&(t="X"),t});return n>p&&(d=d.replace(/[\s,]*X.*/,""),a.log("Ignoring extra params in segment "+t)),c+d})}(e,n,s);if("pixel"===e.xsizemode){var y=n(e.xanchor);l=y+e.x0,c=y+e.x1}else l=n(e.x0),c=n(e.x1);if("pixel"===e.ysizemode){var x=s(e.yanchor);u=x-e.y0,p=x-e.y1}else u=s(e.y0),p=s(e.y1);if("line"===d)return"M"+l+","+u+"L"+c+","+p;if("rect"===d)return"M"+l+","+u+"H"+c+"V"+p+"H"+l+"Z";var b=(l+c)/2,_=(u+p)/2,w=Math.abs(b-l),k=Math.abs(_-u),T="A"+w+","+k,M=b+w+","+_;return"M"+M+T+" 0 1,1 "+(b+","+(_-k))+T+" 0 0,1 "+M+"Z"}function v(t,e,r){return t.replace(h.segmentRE,function(t){var n=0,a=t.charAt(0),i=h.paramIsX[a],o=h.paramIsY[a],s=h.numParams[a];return a+t.substr(1).replace(h.paramRE,function(t){return n>=s?t:(i[n]?t=e(t):o[n]&&(t=r(t)),n++,t)})})}e.exports={draw:function(t){var e=t._fullLayout;for(var r in e._shapeUpperLayer.selectAll("path").remove(),e._shapeLowerLayer.selectAll("path").remove(),e._plots){var n=e._plots[r].shapelayer;n&&n.selectAll("path").remove()}for(var a=0;a<e.shapes.length;a++)e.shapes[a].visible&&p(t,a)},drawOne:p}},{"../../lib":717,"../../lib/setcursor":737,"../../plot_api/plot_template":755,"../../plots/cartesian/axes":765,"../../registry":846,"../color":591,"../dragelement":609,"../drawing":612,"./constants":669,"./helpers":672}],672:[function(t,e,r){"use strict";var n=t("./constants"),a=t("../../lib");r.rangeToShapePosition=function(t){return"log"===t.type?t.r2d:function(t){return t}},r.shapePositionToRange=function(t){return"log"===t.type?t.d2r:function(t){return t}},r.decodeDate=function(t){return function(e){return e.replace&&(e=e.replace("_"," ")),t(e)}},r.encodeDate=function(t){return function(e){return t(e).replace(" ","_")}},r.extractPathCoords=function(t,e){var r=[];return t.match(n.segmentRE).forEach(function(t){var i=e[t.charAt(0)].drawn;if(void 0!==i){var o=t.substr(1).match(n.paramRE);!o||o.length<i||r.push(a.cleanNumber(o[i]))}}),r},r.getDataToPixel=function(t,e,n){var a,i=t._fullLayout._size;if(e){var o=r.shapePositionToRange(e);a=function(t){return e._offset+e.r2p(o(t,!0))},"date"===e.type&&(a=r.decodeDate(a))}else a=n?function(t){return i.t+i.h*(1-t)}:function(t){return i.l+i.w*t};return a},r.getPixelToData=function(t,e,n){var a,i=t._fullLayout._size;if(e){var o=r.rangeToShapePosition(e);a=function(t){return o(e.p2r(t-e._offset))}}else a=n?function(t){return 1-(t-i.t)/i.h}:function(t){return(t-i.l)/i.w};return a},r.roundPositionForSharpStrokeRendering=function(t,e){var r=1===Math.round(e%2),n=Math.round(t);return r?n+.5:n}},{"../../lib":717,"./constants":669}],673:[function(t,e,r){"use strict";var n=t("./draw");e.exports={moduleType:"component",name:"shapes",layoutAttributes:t("./attributes"),supplyLayoutDefaults:t("./defaults"),includeBasePlot:t("../../plots/cartesian/include_components")("shapes"),calcAutorange:t("./calc_autorange"),draw:n.draw,drawOne:n.drawOne}},{"../../plots/cartesian/include_components":775,"./attributes":667,"./calc_autorange":668,"./defaults":670,"./draw":671}],674:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),a=t("../../plots/pad_attributes"),i=t("../../lib/extend").extendDeepAll,o=t("../../plot_api/edit_types").overrideAll,s=t("../../plots/animation_attributes"),l=t("../../plot_api/plot_template").templatedArray,c=t("./constants"),u=l("step",{visible:{valType:"boolean",dflt:!0},method:{valType:"enumerated",values:["restyle","relayout","animate","update","skip"],dflt:"restyle"},args:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},label:{valType:"string"},value:{valType:"string"},execute:{valType:"boolean",dflt:!0}});e.exports=o(l("slider",{visible:{valType:"boolean",dflt:!0},active:{valType:"number",min:0,dflt:0},steps:u,lenmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"fraction"},len:{valType:"number",min:0,dflt:1},x:{valType:"number",min:-2,max:3,dflt:0},pad:i(a({editType:"arraydraw"}),{},{t:{dflt:20}}),xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left"},y:{valType:"number",min:-2,max:3,dflt:0},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"top"},transition:{duration:{valType:"number",min:0,dflt:150},easing:{valType:"enumerated",values:s.transition.easing.values,dflt:"cubic-in-out"}},currentvalue:{visible:{valType:"boolean",dflt:!0},xanchor:{valType:"enumerated",values:["left","center","right"],dflt:"left"},offset:{valType:"number",dflt:10},prefix:{valType:"string"},suffix:{valType:"string"},font:n({})},font:n({}),activebgcolor:{valType:"color",dflt:c.gripBgActiveColor},bgcolor:{valType:"color",dflt:c.railBgColor},bordercolor:{valType:"color",dflt:c.railBorderColor},borderwidth:{valType:"number",min:0,dflt:c.railBorderWidth},ticklen:{valType:"number",min:0,dflt:c.tickLength},tickcolor:{valType:"color",dflt:c.tickColor},tickwidth:{valType:"number",min:0,dflt:1},minorticklen:{valType:"number",min:0,dflt:c.minorTickLength}}),"arraydraw","from-root")},{"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plot_api/plot_template":755,"../../plots/animation_attributes":760,"../../plots/font_attributes":791,"../../plots/pad_attributes":825,"./constants":675}],675:[function(t,e,r){"use strict";e.exports={name:"sliders",containerClassName:"slider-container",groupClassName:"slider-group",inputAreaClass:"slider-input-area",railRectClass:"slider-rail-rect",railTouchRectClass:"slider-rail-touch-rect",gripRectClass:"slider-grip-rect",tickRectClass:"slider-tick-rect",inputProxyClass:"slider-input-proxy",labelsClass:"slider-labels",labelGroupClass:"slider-label-group",labelClass:"slider-label",currentValueClass:"slider-current-value",railHeight:5,menuIndexAttrName:"slider-active-index",autoMarginIdRoot:"slider-",minWidth:30,minHeight:30,textPadX:40,arrowOffsetX:4,railRadius:2,railWidth:5,railBorder:4,railBorderWidth:1,railBorderColor:"#bec8d9",railBgColor:"#f8fafc",railInset:8,stepInset:10,gripRadius:10,gripWidth:20,gripHeight:20,gripBorder:20,gripBorderWidth:1,gripBorderColor:"#bec8d9",gripBgColor:"#f6f8fa",gripBgActiveColor:"#dbdde0",labelPadding:8,labelOffset:0,tickWidth:1,tickColor:"#333",tickOffset:25,tickLength:7,minorTickOffset:25,minorTickColor:"#333",minorTickLength:4,currentValuePadding:8,currentValueInset:0}},{}],676:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/array_container_defaults"),i=t("./attributes"),o=t("./constants").name,s=i.steps;function l(t,e,r){function o(r,a){return n.coerce(t,e,i,r,a)}for(var s=a(t,e,{name:"steps",handleItemDefaults:c}),l=0,u=0;u<s.length;u++)s[u].visible&&l++;if(l<2?e.visible=!1:o("visible")){e._stepCount=l;var h=e._visibleSteps=n.filterVisible(s);(s[o("active")]||{}).visible||(e.active=h[0]._index),o("x"),o("y"),n.noneOrAll(t,e,["x","y"]),o("xanchor"),o("yanchor"),o("len"),o("lenmode"),o("pad.t"),o("pad.r"),o("pad.b"),o("pad.l"),n.coerceFont(o,"font",r.font),o("currentvalue.visible")&&(o("currentvalue.xanchor"),o("currentvalue.prefix"),o("currentvalue.suffix"),o("currentvalue.offset"),n.coerceFont(o,"currentvalue.font",e.font)),o("transition.duration"),o("transition.easing"),o("bgcolor"),o("activebgcolor"),o("bordercolor"),o("borderwidth"),o("ticklen"),o("tickwidth"),o("tickcolor"),o("minorticklen")}}function c(t,e){function r(r,a){return n.coerce(t,e,s,r,a)}if("skip"===t.method||Array.isArray(t.args)?r("visible"):e.visible=!1){r("method"),r("args");var a=r("label","step-"+e._index);r("value",a),r("execute")}}e.exports=function(t,e){a(t,e,{name:o,handleItemDefaults:l})}},{"../../lib":717,"../../plots/array_container_defaults":761,"./attributes":674,"./constants":675}],677:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../plots/plots"),i=t("../color"),o=t("../drawing"),s=t("../../lib"),l=t("../../lib/svg_text_utils"),c=t("../../plot_api/plot_template").arrayEditor,u=t("./constants"),h=t("../../constants/alignment"),f=h.LINE_SPACING,p=h.FROM_TL,d=h.FROM_BR;function g(t){return u.autoMarginIdRoot+t._index}function v(t){return t._index}function m(t,e){var r=o.tester.selectAll("g."+u.labelGroupClass).data(e._visibleSteps);r.enter().append("g").classed(u.labelGroupClass,!0);var i=0,c=0;r.each(function(t){var r=b(n.select(this),{step:t},e).node();if(r){var a=o.bBox(r);c=Math.max(c,a.height),i=Math.max(i,a.width)}}),r.remove();var h=e._dims={};h.inputAreaWidth=Math.max(u.railWidth,u.gripHeight);var f=t._fullLayout._size;h.lx=f.l+f.w*e.x,h.ly=f.t+f.h*(1-e.y),"fraction"===e.lenmode?h.outerLength=Math.round(f.w*e.len):h.outerLength=e.len,h.inputAreaStart=0,h.inputAreaLength=Math.round(h.outerLength-e.pad.l-e.pad.r);var v=(h.inputAreaLength-2*u.stepInset)/(e._stepCount-1),m=i+u.labelPadding;if(h.labelStride=Math.max(1,Math.ceil(m/v)),h.labelHeight=c,h.currentValueMaxWidth=0,h.currentValueHeight=0,h.currentValueTotalHeight=0,h.currentValueMaxLines=1,e.currentvalue.visible){var x=o.tester.append("g");r.each(function(t){var r=y(x,e,t.label),n=r.node()&&o.bBox(r.node())||{width:0,height:0},a=l.lineCount(r);h.currentValueMaxWidth=Math.max(h.currentValueMaxWidth,Math.ceil(n.width)),h.currentValueHeight=Math.max(h.currentValueHeight,Math.ceil(n.height)),h.currentValueMaxLines=Math.max(h.currentValueMaxLines,a)}),h.currentValueTotalHeight=h.currentValueHeight+e.currentvalue.offset,x.remove()}h.height=h.currentValueTotalHeight+u.tickOffset+e.ticklen+u.labelOffset+h.labelHeight+e.pad.t+e.pad.b;var _="left";s.isRightAnchor(e)&&(h.lx-=h.outerLength,_="right"),s.isCenterAnchor(e)&&(h.lx-=h.outerLength/2,_="center");var w="top";s.isBottomAnchor(e)&&(h.ly-=h.height,w="bottom"),s.isMiddleAnchor(e)&&(h.ly-=h.height/2,w="middle"),h.outerLength=Math.ceil(h.outerLength),h.height=Math.ceil(h.height),h.lx=Math.round(h.lx),h.ly=Math.round(h.ly);var k={y:e.y,b:h.height*d[w],t:h.height*p[w]};"fraction"===e.lenmode?(k.l=0,k.xl=e.x-e.len*p[_],k.r=0,k.xr=e.x+e.len*d[_]):(k.x=e.x,k.l=h.outerLength*p[_],k.r=h.outerLength*d[_]),a.autoMargin(t,g(e),k)}function y(t,e,r){if(e.currentvalue.visible){var n,a,i=e._dims;switch(e.currentvalue.xanchor){case"right":n=i.inputAreaLength-u.currentValueInset-i.currentValueMaxWidth,a="left";break;case"center":n=.5*i.inputAreaLength,a="middle";break;default:n=u.currentValueInset,a="left"}var c=s.ensureSingle(t,"text",u.labelClass,function(t){t.classed("user-select-none",!0).attr({"text-anchor":a,"data-notex":1})}),h=e.currentvalue.prefix?e.currentvalue.prefix:"";if("string"==typeof r)h+=r;else{var p=e.steps[e.active].label,d=e._gd._fullLayout._meta;d&&(p=s.templateString(p,d)),h+=p}e.currentvalue.suffix&&(h+=e.currentvalue.suffix),c.call(o.font,e.currentvalue.font).text(h).call(l.convertToTspans,e._gd);var g=l.lineCount(c),v=(i.currentValueMaxLines+1-g)*e.currentvalue.font.size*f;return l.positionText(c,n,v),c}}function x(t,e,r){s.ensureSingle(t,"rect",u.gripRectClass,function(n){n.call(T,e,t,r).style("pointer-events","all")}).attr({width:u.gripWidth,height:u.gripHeight,rx:u.gripRadius,ry:u.gripRadius}).call(i.stroke,r.bordercolor).call(i.fill,r.bgcolor).style("stroke-width",r.borderwidth+"px")}function b(t,e,r){var n=s.ensureSingle(t,"text",u.labelClass,function(t){t.classed("user-select-none",!0).attr({"text-anchor":"middle","data-notex":1})}),a=e.step.label,i=r._gd._fullLayout._meta;return i&&(a=s.templateString(a,i)),n.call(o.font,r.font).text(a).call(l.convertToTspans,r._gd),n}function _(t,e){var r=s.ensureSingle(t,"g",u.labelsClass),a=e._dims,i=r.selectAll("g."+u.labelGroupClass).data(a.labelSteps);i.enter().append("g").classed(u.labelGroupClass,!0),i.exit().remove(),i.each(function(t){var r=n.select(this);r.call(b,t,e),o.setTranslate(r,S(e,t.fraction),u.tickOffset+e.ticklen+e.font.size*f+u.labelOffset+a.currentValueTotalHeight)})}function w(t,e,r,n,a){var i=Math.round(n*(r._stepCount-1)),o=r._visibleSteps[i]._index;o!==r.active&&k(t,e,r,o,!0,a)}function k(t,e,r,n,i,o){var s=r.active;r.active=n,c(t.layout,u.name,r).applyUpdate("active",n);var l=r.steps[r.active];e.call(A,r,o),e.call(y,r),t.emit("plotly_sliderchange",{slider:r,step:r.steps[r.active],interaction:i,previousActive:s}),l&&l.method&&i&&(e._nextMethod?(e._nextMethod.step=l,e._nextMethod.doCallback=i,e._nextMethod.doTransition=o):(e._nextMethod={step:l,doCallback:i,doTransition:o},e._nextMethodRaf=window.requestAnimationFrame(function(){var r=e._nextMethod.step;r.method&&(r.execute&&a.executeAPICommand(t,r.method,r.args),e._nextMethod=null,e._nextMethodRaf=null)})))}function T(t,e,r){var a=r.node(),o=n.select(e);function s(){return r.data()[0]}t.on("mousedown",function(){var t=s();e.emit("plotly_sliderstart",{slider:t});var l=r.select("."+u.gripRectClass);n.event.stopPropagation(),n.event.preventDefault(),l.call(i.fill,t.activebgcolor);var c=E(t,n.mouse(a)[0]);w(e,r,t,c,!0),t._dragging=!0,o.on("mousemove",function(){var t=s(),i=E(t,n.mouse(a)[0]);w(e,r,t,i,!1)}),o.on("mouseup",function(){var t=s();t._dragging=!1,l.call(i.fill,t.bgcolor),o.on("mouseup",null),o.on("mousemove",null),e.emit("plotly_sliderend",{slider:t,step:t.steps[t.active]})})})}function M(t,e){var r=t.selectAll("rect."+u.tickRectClass).data(e._visibleSteps),a=e._dims;r.enter().append("rect").classed(u.tickRectClass,!0),r.exit().remove(),r.attr({width:e.tickwidth+"px","shape-rendering":"crispEdges"}),r.each(function(t,r){var s=r%a.labelStride==0,l=n.select(this);l.attr({height:s?e.ticklen:e.minorticklen}).call(i.fill,e.tickcolor),o.setTranslate(l,S(e,r/(e._stepCount-1))-.5*e.tickwidth,(s?u.tickOffset:u.minorTickOffset)+a.currentValueTotalHeight)})}function A(t,e,r){for(var n=t.select("rect."+u.gripRectClass),a=0,i=0;i<e._stepCount;i++)if(e._visibleSteps[i]._index===e.active){a=i;break}var o=S(e,a/(e._stepCount-1));if(!e._invokingCommand){var s=n;r&&e.transition.duration>0&&(s=s.transition().duration(e.transition.duration).ease(e.transition.easing)),s.attr("transform","translate("+(o-.5*u.gripWidth)+","+e._dims.currentValueTotalHeight+")")}}function S(t,e){var r=t._dims;return r.inputAreaStart+u.stepInset+(r.inputAreaLength-2*u.stepInset)*Math.min(1,Math.max(0,e))}function E(t,e){var r=t._dims;return Math.min(1,Math.max(0,(e-u.stepInset-r.inputAreaStart)/(r.inputAreaLength-2*u.stepInset-2*r.inputAreaStart)))}function L(t,e,r){var n=r._dims,a=s.ensureSingle(t,"rect",u.railTouchRectClass,function(n){n.call(T,e,t,r).style("pointer-events","all")});a.attr({width:n.inputAreaLength,height:Math.max(n.inputAreaWidth,u.tickOffset+r.ticklen+n.labelHeight)}).call(i.fill,r.bgcolor).attr("opacity",0),o.setTranslate(a,0,n.currentValueTotalHeight)}function C(t,e){var r=e._dims,n=r.inputAreaLength-2*u.railInset,a=s.ensureSingle(t,"rect",u.railRectClass);a.attr({width:n,height:u.railWidth,rx:u.railRadius,ry:u.railRadius,"shape-rendering":"crispEdges"}).call(i.stroke,e.bordercolor).call(i.fill,e.bgcolor).style("stroke-width",e.borderwidth+"px"),o.setTranslate(a,u.railInset,.5*(r.inputAreaWidth-u.railWidth)+r.currentValueTotalHeight)}e.exports=function(t){var e=t._fullLayout,r=function(t,e){for(var r=t[u.name],n=[],a=0;a<r.length;a++){var i=r[a];i.visible&&(i._gd=e,n.push(i))}return n}(e,t),i=e._infolayer.selectAll("g."+u.containerClassName).data(r.length>0?[0]:[]);function s(e){e._commandObserver&&(e._commandObserver.remove(),delete e._commandObserver),a.autoMargin(t,g(e))}if(i.enter().append("g").classed(u.containerClassName,!0).style("cursor","ew-resize"),i.exit().each(function(){n.select(this).selectAll("g."+u.groupClassName).each(s)}).remove(),0!==r.length){var l=i.selectAll("g."+u.groupClassName).data(r,v);l.enter().append("g").classed(u.groupClassName,!0),l.exit().each(s).remove();for(var c=0;c<r.length;c++){var h=r[c];m(t,h)}l.each(function(e){var r=n.select(this);!function(t){var e=t._dims;e.labelSteps=[];for(var r=t._stepCount,n=0;n<r;n+=e.labelStride)e.labelSteps.push({fraction:n/(r-1),step:t._visibleSteps[n]})}(e),a.manageCommandObserver(t,e,e._visibleSteps,function(e){var n=r.data()[0];n.active!==e.index&&(n._dragging||k(t,r,n,e.index,!1,!0))}),function(t,e,r){(r.steps[r.active]||{}).visible||(r.active=r._visibleSteps[0]._index);e.call(y,r).call(C,r).call(_,r).call(M,r).call(L,t,r).call(x,t,r);var n=r._dims;o.setTranslate(e,n.lx+r.pad.l,n.ly+r.pad.t),e.call(A,r,!1),e.call(y,r)}(t,n.select(this),e)})}}},{"../../constants/alignment":686,"../../lib":717,"../../lib/svg_text_utils":741,"../../plot_api/plot_template":755,"../../plots/plots":826,"../color":591,"../drawing":612,"./constants":675,d3:165}],678:[function(t,e,r){"use strict";var n=t("./constants");e.exports={moduleType:"component",name:n.name,layoutAttributes:t("./attributes"),supplyLayoutDefaults:t("./defaults"),draw:t("./draw")}},{"./attributes":674,"./constants":675,"./defaults":676,"./draw":677}],679:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../../plots/plots"),o=t("../../registry"),s=t("../../lib"),l=t("../drawing"),c=t("../color"),u=t("../../lib/svg_text_utils"),h=t("../../constants/interactions"),f=t("../../constants/alignment").OPPOSITE_SIDE,p=/ [XY][0-9]* /;e.exports={draw:function(t,e,r){var d,g=r.propContainer,v=r.propName,m=r.placeholder,y=r.traceIndex,x=r.avoid||{},b=r.attributes,_=r.transform,w=r.containerGroup,k=t._fullLayout,T=1,M=!1,A=g.title,S=(A&&A.text?A.text:"").trim(),E=A&&A.font?A.font:{},L=E.family,C=E.size,P=E.color;"title.text"===v?d="titleText":-1!==v.indexOf("axis")?d="axisTitleText":v.indexOf(!0)&&(d="colorbarTitleText");var O=t._context.edits[d];""===S?T=0:S.replace(p," % ")===m.replace(p," % ")&&(T=.2,M=!0,O||(S="")),r._meta?S=s.templateString(S,r._meta):k._meta&&(S=s.templateString(S,k._meta));var z=S||O;w||(w=s.ensureSingle(k._infolayer,"g","g-"+e));var I=w.selectAll("text").data(z?[0]:[]);if(I.enter().append("text"),I.text(S).attr("class",e),I.exit().remove(),!z)return w;function D(t){s.syncOrAsync([R,F],t)}function R(e){var r;return _?(r="",_.rotate&&(r+="rotate("+[_.rotate,b.x,b.y]+")"),_.offset&&(r+="translate(0, "+_.offset+")")):r=null,e.attr("transform",r),e.style({"font-family":L,"font-size":n.round(C,2)+"px",fill:c.rgb(P),opacity:T*c.opacity(P),"font-weight":i.fontWeight}).attr(b).call(u.convertToTspans,t),i.previousPromises(t)}function F(t){var e=n.select(t.node().parentNode);if(x&&x.selection&&x.side&&S){e.attr("transform",null);var r=f[x.side],i="left"===x.side||"top"===x.side?-1:1,o=a(x.pad)?x.pad:2,c=l.bBox(e.node()),u={left:0,top:0,right:k.width,bottom:k.height},h=x.maxShift||i*(u[x.side]-c[x.side]),p=0;if(h<0)p=h;else{var d=x.offsetLeft||0,g=x.offsetTop||0;c.left-=d,c.right-=d,c.top-=g,c.bottom-=g,x.selection.each(function(){var t=l.bBox(this);s.bBoxIntersect(c,t,o)&&(p=Math.max(p,i*(t[x.side]-c[r])+o))}),p=Math.min(h,p)}if(p>0||h<0){var v={left:[-p,0],right:[p,0],top:[0,-p],bottom:[0,p]}[x.side];e.attr("transform","translate("+v+")")}}}return I.call(D),O&&(S?I.on(".opacity",null):(T=0,M=!0,I.text(m).on("mouseover.opacity",function(){n.select(this).transition().duration(h.SHOW_PLACEHOLDER).style("opacity",1)}).on("mouseout.opacity",function(){n.select(this).transition().duration(h.HIDE_PLACEHOLDER).style("opacity",0)})),I.call(u.makeEditable,{gd:t}).on("edit",function(e){void 0!==y?o.call("_guiRestyle",t,v,e,y):o.call("_guiRelayout",t,v,e)}).on("cancel",function(){this.text(this.attr("data-unformatted")).call(D)}).on("input",function(t){this.text(t||" ").call(u.positionText,b.x,b.y)})),I.classed("js-placeholder",M),w}}},{"../../constants/alignment":686,"../../constants/interactions":692,"../../lib":717,"../../lib/svg_text_utils":741,"../../plots/plots":826,"../../registry":846,"../color":591,"../drawing":612,d3:165,"fast-isnumeric":228}],680:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),a=t("../color/attributes"),i=t("../../lib/extend").extendFlat,o=t("../../plot_api/edit_types").overrideAll,s=t("../../plots/pad_attributes"),l=t("../../plot_api/plot_template").templatedArray,c=l("button",{visible:{valType:"boolean"},method:{valType:"enumerated",values:["restyle","relayout","animate","update","skip"],dflt:"restyle"},args:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},args2:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},label:{valType:"string",dflt:""},execute:{valType:"boolean",dflt:!0}});e.exports=o(l("updatemenu",{_arrayAttrRegexps:[/^updatemenus\[(0|[1-9][0-9]+)\]\.buttons/],visible:{valType:"boolean"},type:{valType:"enumerated",values:["dropdown","buttons"],dflt:"dropdown"},direction:{valType:"enumerated",values:["left","right","up","down"],dflt:"down"},active:{valType:"integer",min:-1,dflt:0},showactive:{valType:"boolean",dflt:!0},buttons:c,x:{valType:"number",min:-2,max:3,dflt:-.05},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"right"},y:{valType:"number",min:-2,max:3,dflt:1},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"top"},pad:i(s({editType:"arraydraw"}),{}),font:n({}),bgcolor:{valType:"color"},bordercolor:{valType:"color",dflt:a.borderLine},borderwidth:{valType:"number",min:0,dflt:1,editType:"arraydraw"}}),"arraydraw","from-root")},{"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plot_api/plot_template":755,"../../plots/font_attributes":791,"../../plots/pad_attributes":825,"../color/attributes":590}],681:[function(t,e,r){"use strict";e.exports={name:"updatemenus",containerClassName:"updatemenu-container",headerGroupClassName:"updatemenu-header-group",headerClassName:"updatemenu-header",headerArrowClassName:"updatemenu-header-arrow",dropdownButtonGroupClassName:"updatemenu-dropdown-button-group",dropdownButtonClassName:"updatemenu-dropdown-button",buttonClassName:"updatemenu-button",itemRectClassName:"updatemenu-item-rect",itemTextClassName:"updatemenu-item-text",menuIndexAttrName:"updatemenu-active-index",autoMarginIdRoot:"updatemenu-",blankHeaderOpts:{label:" "},minWidth:30,minHeight:30,textPadX:24,arrowPadX:16,rx:2,ry:2,textOffsetX:12,textOffsetY:3,arrowOffsetX:4,gapButtonHeader:5,gapButton:2,activeColor:"#F4FAFF",hoverColor:"#F4FAFF",arrowSymbol:{left:"\u25c4",right:"\u25ba",up:"\u25b2",down:"\u25bc"}}},{}],682:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/array_container_defaults"),i=t("./attributes"),o=t("./constants").name,s=i.buttons;function l(t,e,r){function o(r,a){return n.coerce(t,e,i,r,a)}o("visible",a(t,e,{name:"buttons",handleItemDefaults:c}).length>0)&&(o("active"),o("direction"),o("type"),o("showactive"),o("x"),o("y"),n.noneOrAll(t,e,["x","y"]),o("xanchor"),o("yanchor"),o("pad.t"),o("pad.r"),o("pad.b"),o("pad.l"),n.coerceFont(o,"font",r.font),o("bgcolor",r.paper_bgcolor),o("bordercolor"),o("borderwidth"))}function c(t,e){function r(r,a){return n.coerce(t,e,s,r,a)}r("visible","skip"===t.method||Array.isArray(t.args))&&(r("method"),r("args"),r("args2"),r("label"),r("execute"))}e.exports=function(t,e){a(t,e,{name:o,handleItemDefaults:l})}},{"../../lib":717,"../../plots/array_container_defaults":761,"./attributes":680,"./constants":681}],683:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../plots/plots"),i=t("../color"),o=t("../drawing"),s=t("../../lib"),l=t("../../lib/svg_text_utils"),c=t("../../plot_api/plot_template").arrayEditor,u=t("../../constants/alignment").LINE_SPACING,h=t("./constants"),f=t("./scrollbox");function p(t){return t._index}function d(t,e){return+t.attr(h.menuIndexAttrName)===e._index}function g(t,e,r,n,a,i,o,s){e.active=o,c(t.layout,h.name,e).applyUpdate("active",o),"buttons"===e.type?m(t,n,null,null,e):"dropdown"===e.type&&(a.attr(h.menuIndexAttrName,"-1"),v(t,n,a,i,e),s||m(t,n,a,i,e))}function v(t,e,r,n,a){var i=s.ensureSingle(e,"g",h.headerClassName,function(t){t.style("pointer-events","all")}),l=a._dims,c=a.active,u=a.buttons[c]||h.blankHeaderOpts,f={y:a.pad.t,yPad:0,x:a.pad.l,xPad:0,index:0},p={width:l.headerWidth,height:l.headerHeight};i.call(y,a,u,t).call(A,a,f,p),s.ensureSingle(e,"text",h.headerArrowClassName,function(t){t.classed("user-select-none",!0).attr("text-anchor","end").call(o.font,a.font).text(h.arrowSymbol[a.direction])}).attr({x:l.headerWidth-h.arrowOffsetX+a.pad.l,y:l.headerHeight/2+h.textOffsetY+a.pad.t}),i.on("click",function(){r.call(S,String(d(r,a)?-1:a._index)),m(t,e,r,n,a)}),i.on("mouseover",function(){i.call(w)}),i.on("mouseout",function(){i.call(k,a)}),o.setTranslate(e,l.lx,l.ly)}function m(t,e,r,i,o){r||(r=e).attr("pointer-events","all");var l=function(t){return-1==+t.attr(h.menuIndexAttrName)}(r)&&"buttons"!==o.type?[]:o.buttons,c="dropdown"===o.type?h.dropdownButtonClassName:h.buttonClassName,u=r.selectAll("g."+c).data(s.filterVisible(l)),f=u.enter().append("g").classed(c,!0),p=u.exit();"dropdown"===o.type?(f.attr("opacity","0").transition().attr("opacity","1"),p.transition().attr("opacity","0").remove()):p.remove();var d=0,v=0,m=o._dims,x=-1!==["up","down"].indexOf(o.direction);"dropdown"===o.type&&(x?v=m.headerHeight+h.gapButtonHeader:d=m.headerWidth+h.gapButtonHeader),"dropdown"===o.type&&"up"===o.direction&&(v=-h.gapButtonHeader+h.gapButton-m.openHeight),"dropdown"===o.type&&"left"===o.direction&&(d=-h.gapButtonHeader+h.gapButton-m.openWidth);var b={x:m.lx+d+o.pad.l,y:m.ly+v+o.pad.t,yPad:h.gapButton,xPad:h.gapButton,index:0},T={l:b.x+o.borderwidth,t:b.y+o.borderwidth};u.each(function(s,l){var c=n.select(this);c.call(y,o,s,t).call(A,o,b),c.on("click",function(){n.event.defaultPrevented||(s.execute&&(s.args2&&o.active===l?(g(t,o,0,e,r,i,-1),a.executeAPICommand(t,s.method,s.args2)):(g(t,o,0,e,r,i,l),a.executeAPICommand(t,s.method,s.args))),t.emit("plotly_buttonclicked",{menu:o,button:s,active:o.active}))}),c.on("mouseover",function(){c.call(w)}),c.on("mouseout",function(){c.call(k,o),u.call(_,o)})}),u.call(_,o),x?(T.w=Math.max(m.openWidth,m.headerWidth),T.h=b.y-T.t):(T.w=b.x-T.l,T.h=Math.max(m.openHeight,m.headerHeight)),T.direction=o.direction,i&&(u.size()?function(t,e,r,n,a,i){var o,s,l,c=a.direction,u="up"===c||"down"===c,f=a._dims,p=a.active;if(u)for(s=0,l=0;l<p;l++)s+=f.heights[l]+h.gapButton;else for(o=0,l=0;l<p;l++)o+=f.widths[l]+h.gapButton;n.enable(i,o,s),n.hbar&&n.hbar.attr("opacity","0").transition().attr("opacity","1");n.vbar&&n.vbar.attr("opacity","0").transition().attr("opacity","1")}(0,0,0,i,o,T):function(t){var e=!!t.hbar,r=!!t.vbar;e&&t.hbar.transition().attr("opacity","0").each("end",function(){e=!1,r||t.disable()});r&&t.vbar.transition().attr("opacity","0").each("end",function(){r=!1,e||t.disable()})}(i))}function y(t,e,r,n){t.call(x,e).call(b,e,r,n)}function x(t,e){s.ensureSingle(t,"rect",h.itemRectClassName,function(t){t.attr({rx:h.rx,ry:h.ry,"shape-rendering":"crispEdges"})}).call(i.stroke,e.bordercolor).call(i.fill,e.bgcolor).style("stroke-width",e.borderwidth+"px")}function b(t,e,r,n){var a=s.ensureSingle(t,"text",h.itemTextClassName,function(t){t.classed("user-select-none",!0).attr({"text-anchor":"start","data-notex":1})}),i=r.label,c=n._fullLayout._meta;c&&(i=s.templateString(i,c)),a.call(o.font,e.font).text(i).call(l.convertToTspans,n)}function _(t,e){var r=e.active;t.each(function(t,a){var o=n.select(this);a===r&&e.showactive&&o.select("rect."+h.itemRectClassName).call(i.fill,h.activeColor)})}function w(t){t.select("rect."+h.itemRectClassName).call(i.fill,h.hoverColor)}function k(t,e){t.select("rect."+h.itemRectClassName).call(i.fill,e.bgcolor)}function T(t,e){var r=e._dims={width1:0,height1:0,heights:[],widths:[],totalWidth:0,totalHeight:0,openWidth:0,openHeight:0,lx:0,ly:0},i=o.tester.selectAll("g."+h.dropdownButtonClassName).data(s.filterVisible(e.buttons));i.enter().append("g").classed(h.dropdownButtonClassName,!0);var c=-1!==["up","down"].indexOf(e.direction);i.each(function(a,i){var s=n.select(this);s.call(y,e,a,t);var f=s.select("."+h.itemTextClassName),p=f.node()&&o.bBox(f.node()).width,d=Math.max(p+h.textPadX,h.minWidth),g=e.font.size*u,v=l.lineCount(f),m=Math.max(g*v,h.minHeight)+h.textOffsetY;m=Math.ceil(m),d=Math.ceil(d),r.widths[i]=d,r.heights[i]=m,r.height1=Math.max(r.height1,m),r.width1=Math.max(r.width1,d),c?(r.totalWidth=Math.max(r.totalWidth,d),r.openWidth=r.totalWidth,r.totalHeight+=m+h.gapButton,r.openHeight+=m+h.gapButton):(r.totalWidth+=d+h.gapButton,r.openWidth+=d+h.gapButton,r.totalHeight=Math.max(r.totalHeight,m),r.openHeight=r.totalHeight)}),c?r.totalHeight-=h.gapButton:r.totalWidth-=h.gapButton,r.headerWidth=r.width1+h.arrowPadX,r.headerHeight=r.height1,"dropdown"===e.type&&(c?(r.width1+=h.arrowPadX,r.totalHeight=r.height1):r.totalWidth=r.width1,r.totalWidth+=h.arrowPadX),i.remove();var f=r.totalWidth+e.pad.l+e.pad.r,p=r.totalHeight+e.pad.t+e.pad.b,d=t._fullLayout._size;r.lx=d.l+d.w*e.x,r.ly=d.t+d.h*(1-e.y);var g="left";s.isRightAnchor(e)&&(r.lx-=f,g="right"),s.isCenterAnchor(e)&&(r.lx-=f/2,g="center");var v="top";s.isBottomAnchor(e)&&(r.ly-=p,v="bottom"),s.isMiddleAnchor(e)&&(r.ly-=p/2,v="middle"),r.totalWidth=Math.ceil(r.totalWidth),r.totalHeight=Math.ceil(r.totalHeight),r.lx=Math.round(r.lx),r.ly=Math.round(r.ly),a.autoMargin(t,M(e),{x:e.x,y:e.y,l:f*({right:1,center:.5}[g]||0),r:f*({left:1,center:.5}[g]||0),b:p*({top:1,middle:.5}[v]||0),t:p*({bottom:1,middle:.5}[v]||0)})}function M(t){return h.autoMarginIdRoot+t._index}function A(t,e,r,n){n=n||{};var a=t.select("."+h.itemRectClassName),i=t.select("."+h.itemTextClassName),s=e.borderwidth,c=r.index,f=e._dims;o.setTranslate(t,s+r.x,s+r.y);var p=-1!==["up","down"].indexOf(e.direction),d=n.height||(p?f.heights[c]:f.height1);a.attr({x:0,y:0,width:n.width||(p?f.width1:f.widths[c]),height:d});var g=e.font.size*u,v=(l.lineCount(i)-1)*g/2;l.positionText(i,h.textOffsetX,d/2-v+h.textOffsetY),p?r.y+=f.heights[c]+r.yPad:r.x+=f.widths[c]+r.xPad,r.index++}function S(t,e){t.attr(h.menuIndexAttrName,e||"-1").selectAll("g."+h.dropdownButtonClassName).remove()}e.exports=function(t){var e=t._fullLayout,r=s.filterVisible(e[h.name]);function i(e){a.autoMargin(t,M(e))}var o=e._menulayer.selectAll("g."+h.containerClassName).data(r.length>0?[0]:[]);if(o.enter().append("g").classed(h.containerClassName,!0).style("cursor","pointer"),o.exit().each(function(){n.select(this).selectAll("g."+h.headerGroupClassName).each(i)}).remove(),0!==r.length){var l=o.selectAll("g."+h.headerGroupClassName).data(r,p);l.enter().append("g").classed(h.headerGroupClassName,!0);for(var c=s.ensureSingle(o,"g",h.dropdownButtonGroupClassName,function(t){t.style("pointer-events","all")}),u=0;u<r.length;u++){var y=r[u];T(t,y)}var x="updatemenus"+e._uid,b=new f(t,c,x);l.enter().size()&&(c.node().parentNode.appendChild(c.node()),c.call(S)),l.exit().each(function(t){c.call(S),i(t)}).remove(),l.each(function(e){var r=n.select(this),i="dropdown"===e.type?c:null;a.manageCommandObserver(t,e,e.buttons,function(n){g(t,e,e.buttons[n.index],r,i,b,n.index,!0)}),"dropdown"===e.type?(v(t,r,c,b,e),d(c,e)&&m(t,r,c,b,e)):m(t,r,null,null,e)})}}},{"../../constants/alignment":686,"../../lib":717,"../../lib/svg_text_utils":741,"../../plot_api/plot_template":755,"../../plots/plots":826,"../color":591,"../drawing":612,"./constants":681,"./scrollbox":685,d3:165}],684:[function(t,e,r){arguments[4][678][0].apply(r,arguments)},{"./attributes":680,"./constants":681,"./defaults":682,"./draw":683,dup:678}],685:[function(t,e,r){"use strict";e.exports=s;var n=t("d3"),a=t("../color"),i=t("../drawing"),o=t("../../lib");function s(t,e,r){this.gd=t,this.container=e,this.id=r,this.position=null,this.translateX=null,this.translateY=null,this.hbar=null,this.vbar=null,this.bg=this.container.selectAll("rect.scrollbox-bg").data([0]),this.bg.exit().on(".drag",null).on("wheel",null).remove(),this.bg.enter().append("rect").classed("scrollbox-bg",!0).style("pointer-events","all").attr({opacity:0,x:0,y:0,width:0,height:0})}s.barWidth=2,s.barLength=20,s.barRadius=2,s.barPad=1,s.barColor="#808BA4",s.prototype.enable=function(t,e,r){var o=this.gd._fullLayout,l=o.width,c=o.height;this.position=t;var u,h,f,p,d=this.position.l,g=this.position.w,v=this.position.t,m=this.position.h,y=this.position.direction,x="down"===y,b="left"===y,_="up"===y,w=g,k=m;x||b||"right"===y||_||(this.position.direction="down",x=!0),x||_?(h=(u=d)+w,x?(f=v,k=(p=Math.min(f+k,c))-f):k=(p=v+k)-(f=Math.max(p-k,0))):(p=(f=v)+k,b?w=(h=d+w)-(u=Math.max(h-w,0)):(u=d,w=(h=Math.min(u+w,l))-u)),this._box={l:u,t:f,w:w,h:k};var T=g>w,M=s.barLength+2*s.barPad,A=s.barWidth+2*s.barPad,S=d,E=v+m;E+A>c&&(E=c-A);var L=this.container.selectAll("rect.scrollbar-horizontal").data(T?[0]:[]);L.exit().on(".drag",null).remove(),L.enter().append("rect").classed("scrollbar-horizontal",!0).call(a.fill,s.barColor),T?(this.hbar=L.attr({rx:s.barRadius,ry:s.barRadius,x:S,y:E,width:M,height:A}),this._hbarXMin=S+M/2,this._hbarTranslateMax=w-M):(delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax);var C=m>k,P=s.barWidth+2*s.barPad,O=s.barLength+2*s.barPad,z=d+g,I=v;z+P>l&&(z=l-P);var D=this.container.selectAll("rect.scrollbar-vertical").data(C?[0]:[]);D.exit().on(".drag",null).remove(),D.enter().append("rect").classed("scrollbar-vertical",!0).call(a.fill,s.barColor),C?(this.vbar=D.attr({rx:s.barRadius,ry:s.barRadius,x:z,y:I,width:P,height:O}),this._vbarYMin=I+O/2,this._vbarTranslateMax=k-O):(delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax);var R=this.id,F=u-.5,B=C?h+P+.5:h+.5,N=f-.5,j=T?p+A+.5:p+.5,V=o._topdefs.selectAll("#"+R).data(T||C?[0]:[]);if(V.exit().remove(),V.enter().append("clipPath").attr("id",R).append("rect"),T||C?(this._clipRect=V.select("rect").attr({x:Math.floor(F),y:Math.floor(N),width:Math.ceil(B)-Math.floor(F),height:Math.ceil(j)-Math.floor(N)}),this.container.call(i.setClipUrl,R,this.gd),this.bg.attr({x:d,y:v,width:g,height:m})):(this.bg.attr({width:0,height:0}),this.container.on("wheel",null).on(".drag",null).call(i.setClipUrl,null),delete this._clipRect),T||C){var U=n.behavior.drag().on("dragstart",function(){n.event.sourceEvent.preventDefault()}).on("drag",this._onBoxDrag.bind(this));this.container.on("wheel",null).on("wheel",this._onBoxWheel.bind(this)).on(".drag",null).call(U);var q=n.behavior.drag().on("dragstart",function(){n.event.sourceEvent.preventDefault(),n.event.sourceEvent.stopPropagation()}).on("drag",this._onBarDrag.bind(this));T&&this.hbar.on(".drag",null).call(q),C&&this.vbar.on(".drag",null).call(q)}this.setTranslate(e,r)},s.prototype.disable=function(){(this.hbar||this.vbar)&&(this.bg.attr({width:0,height:0}),this.container.on("wheel",null).on(".drag",null).call(i.setClipUrl,null),delete this._clipRect),this.hbar&&(this.hbar.on(".drag",null),this.hbar.remove(),delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax),this.vbar&&(this.vbar.on(".drag",null),this.vbar.remove(),delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax)},s.prototype._onBoxDrag=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t-=n.event.dx),this.vbar&&(e-=n.event.dy),this.setTranslate(t,e)},s.prototype._onBoxWheel=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t+=n.event.deltaY),this.vbar&&(e+=n.event.deltaY),this.setTranslate(t,e)},s.prototype._onBarDrag=function(){var t=this.translateX,e=this.translateY;if(this.hbar){var r=t+this._hbarXMin,a=r+this._hbarTranslateMax;t=(o.constrain(n.event.x,r,a)-r)/(a-r)*(this.position.w-this._box.w)}if(this.vbar){var i=e+this._vbarYMin,s=i+this._vbarTranslateMax;e=(o.constrain(n.event.y,i,s)-i)/(s-i)*(this.position.h-this._box.h)}this.setTranslate(t,e)},s.prototype.setTranslate=function(t,e){var r=this.position.w-this._box.w,n=this.position.h-this._box.h;if(t=o.constrain(t||0,0,r),e=o.constrain(e||0,0,n),this.translateX=t,this.translateY=e,this.container.call(i.setTranslate,this._box.l-this.position.l-t,this._box.t-this.position.t-e),this._clipRect&&this._clipRect.attr({x:Math.floor(this.position.l+t-.5),y:Math.floor(this.position.t+e-.5)}),this.hbar){var a=t/r;this.hbar.call(i.setTranslate,t+a*this._hbarTranslateMax,e)}if(this.vbar){var s=e/n;this.vbar.call(i.setTranslate,t,e+s*this._vbarTranslateMax)}}},{"../../lib":717,"../color":591,"../drawing":612,d3:165}],686:[function(t,e,r){"use strict";e.exports={FROM_BL:{left:0,center:.5,right:1,bottom:0,middle:.5,top:1},FROM_TL:{left:0,center:.5,right:1,bottom:1,middle:.5,top:0},FROM_BR:{left:1,center:.5,right:0,bottom:0,middle:.5,top:1},LINE_SPACING:1.3,CAP_SHIFT:.7,MID_SHIFT:.35,OPPOSITE_SIDE:{left:"right",right:"left",top:"bottom",bottom:"top"}}},{}],687:[function(t,e,r){"use strict";e.exports={INCREASING:{COLOR:"#3D9970",SYMBOL:"\u25b2"},DECREASING:{COLOR:"#FF4136",SYMBOL:"\u25bc"}}},{}],688:[function(t,e,r){"use strict";e.exports={FORMAT_LINK:"https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format",DATE_FORMAT_LINK:"https://github.com/d3/d3-3.x-api-reference/blob/master/Time-Formatting.md#format"}},{}],689:[function(t,e,r){"use strict";e.exports={COMPARISON_OPS:["=","!=","<",">=",">","<="],COMPARISON_OPS2:["=","<",">=",">","<="],INTERVAL_OPS:["[]","()","[)","(]","][",")(","](",")["],SET_OPS:["{}","}{"],CONSTRAINT_REDUCTION:{"=":"=","<":"<","<=":"<",">":">",">=":">","[]":"[]","()":"[]","[)":"[]","(]":"[]","][":"][",")(":"][","](":"][",")[":"]["}}},{}],690:[function(t,e,r){"use strict";e.exports={solid:[[],0],dot:[[.5,1],200],dash:[[.5,1],50],longdash:[[.5,1],10],dashdot:[[.5,.625,.875,1],50],longdashdot:[[.5,.7,.8,1],10]}},{}],691:[function(t,e,r){"use strict";e.exports={circle:"\u25cf","circle-open":"\u25cb",square:"\u25a0","square-open":"\u25a1",diamond:"\u25c6","diamond-open":"\u25c7",cross:"+",x:"\u274c"}},{}],692:[function(t,e,r){"use strict";e.exports={SHOW_PLACEHOLDER:100,HIDE_PLACEHOLDER:1e3,DESELECTDIM:.2}},{}],693:[function(t,e,r){"use strict";e.exports={BADNUM:void 0,FP_SAFE:Number.MAX_VALUE/1e4,ONEAVGYEAR:315576e5,ONEAVGMONTH:26298e5,ONEDAY:864e5,ONEHOUR:36e5,ONEMIN:6e4,ONESEC:1e3,EPOCHJD:2440587.5,ALMOST_EQUAL:1-1e-6,LOG_CLIP:10,MINUS_SIGN:"\u2212"}},{}],694:[function(t,e,r){"use strict";r.xmlns="http://www.w3.org/2000/xmlns/",r.svg="http://www.w3.org/2000/svg",r.xlink="http://www.w3.org/1999/xlink",r.svgAttrs={xmlns:r.svg,"xmlns:xlink":r.xlink}},{}],695:[function(t,e,r){"use strict";r.version=t("./version").version,t("es6-promise").polyfill(),t("../build/plotcss"),t("./fonts/mathjax_config")();for(var n=t("./registry"),a=r.register=n.register,i=t("./plot_api"),o=Object.keys(i),s=0;s<o.length;s++){var l=o[s];"_"!==l.charAt(0)&&(r[l]=i[l]),a({moduleType:"apiMethod",name:l,fn:i[l]})}a(t("./traces/scatter")),a([t("./components/legend"),t("./components/fx"),t("./components/annotations"),t("./components/annotations3d"),t("./components/shapes"),t("./components/images"),t("./components/updatemenus"),t("./components/sliders"),t("./components/rangeslider"),t("./components/rangeselector"),t("./components/grid"),t("./components/errorbars"),t("./components/colorscale"),t("./components/colorbar")]),a([t("./locale-en"),t("./locale-en-us")]),window.PlotlyLocales&&Array.isArray(window.PlotlyLocales)&&(a(window.PlotlyLocales),delete window.PlotlyLocales),r.Icons=t("./fonts/ploticon"),r.Plots=t("./plots/plots"),r.Fx=t("./components/fx"),r.Snapshot=t("./snapshot"),r.PlotSchema=t("./plot_api/plot_schema"),r.Queue=t("./lib/queue"),r.d3=t("d3")},{"../build/plotcss":1,"./components/annotations":582,"./components/annotations3d":587,"./components/colorbar":597,"./components/colorscale":603,"./components/errorbars":618,"./components/fx":630,"./components/grid":634,"./components/images":639,"./components/legend":647,"./components/rangeselector":658,"./components/rangeslider":665,"./components/shapes":673,"./components/sliders":678,"./components/updatemenus":684,"./fonts/mathjax_config":696,"./fonts/ploticon":697,"./lib/queue":732,"./locale-en":746,"./locale-en-us":745,"./plot_api":750,"./plot_api/plot_schema":754,"./plots/plots":826,"./registry":846,"./snapshot":851,"./traces/scatter":1132,"./version":1302,d3:165,"es6-promise":221}],696:[function(t,e,r){"use strict";e.exports=function(){"undefined"!=typeof MathJax&&("local"!==(window.PlotlyConfig||{}).MathJaxConfig&&(MathJax.Hub.Config({messageStyle:"none",skipStartupTypeset:!0,displayAlign:"left",tex2jax:{inlineMath:[["$","$"],["\\(","\\)"]]}}),MathJax.Hub.Configured()))}},{}],697:[function(t,e,r){"use strict";e.exports={undo:{width:857.1,height:1e3,path:"m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z",transform:"matrix(1 0 0 -1 0 850)"},home:{width:928.6,height:1e3,path:"m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z",transform:"matrix(1 0 0 -1 0 850)"},"camera-retro":{width:1e3,height:1e3,path:"m518 386q0 8-5 13t-13 5q-37 0-63-27t-26-63q0-8 5-13t13-5 12 5 5 13q0 23 16 38t38 16q8 0 13 5t5 13z m125-73q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m-572-320h858v71h-858v-71z m643 320q0 89-62 152t-152 62-151-62-63-152 63-151 151-63 152 63 62 151z m-571 358h214v72h-214v-72z m-72-107h858v143h-462l-36-71h-360v-72z m929 143v-714q0-30-21-51t-50-21h-858q-29 0-50 21t-21 51v714q0 30 21 51t50 21h858q29 0 50-21t21-51z",transform:"matrix(1 0 0 -1 0 850)"},zoombox:{width:1e3,height:1e3,path:"m1000-25l-250 251c40 63 63 138 63 218 0 224-182 406-407 406-224 0-406-182-406-406s183-406 407-406c80 0 155 22 218 62l250-250 125 125z m-812 250l0 438 437 0 0-438-437 0z m62 375l313 0 0-312-313 0 0 312z",transform:"matrix(1 0 0 -1 0 850)"},pan:{width:1e3,height:1e3,path:"m1000 350l-187 188 0-125-250 0 0 250 125 0-188 187-187-187 125 0 0-250-250 0 0 125-188-188 186-187 0 125 252 0 0-250-125 0 187-188 188 188-125 0 0 250 250 0 0-126 187 188z",transform:"matrix(1 0 0 -1 0 850)"},zoom_plus:{width:875,height:1e3,path:"m1 787l0-875 875 0 0 875-875 0z m687-500l-187 0 0-187-125 0 0 187-188 0 0 125 188 0 0 187 125 0 0-187 187 0 0-125z",transform:"matrix(1 0 0 -1 0 850)"},zoom_minus:{width:875,height:1e3,path:"m0 788l0-876 875 0 0 876-875 0z m688-500l-500 0 0 125 500 0 0-125z",transform:"matrix(1 0 0 -1 0 850)"},autoscale:{width:1e3,height:1e3,path:"m250 850l-187 0-63 0 0-62 0-188 63 0 0 188 187 0 0 62z m688 0l-188 0 0-62 188 0 0-188 62 0 0 188 0 62-62 0z m-875-938l0 188-63 0 0-188 0-62 63 0 187 0 0 62-187 0z m875 188l0-188-188 0 0-62 188 0 62 0 0 62 0 188-62 0z m-125 188l-1 0-93-94-156 156 156 156 92-93 2 0 0 250-250 0 0-2 93-92-156-156-156 156 94 92 0 2-250 0 0-250 0 0 93 93 157-156-157-156-93 94 0 0 0-250 250 0 0 0-94 93 156 157 156-157-93-93 0 0 250 0 0 250z",transform:"matrix(1 0 0 -1 0 850)"},tooltip_basic:{width:1500,height:1e3,path:"m375 725l0 0-375-375 375-374 0-1 1125 0 0 750-1125 0z",transform:"matrix(1 0 0 -1 0 850)"},tooltip_compare:{width:1125,height:1e3,path:"m187 786l0 2-187-188 188-187 0 0 937 0 0 373-938 0z m0-499l0 1-187-188 188-188 0 0 937 0 0 376-938-1z",transform:"matrix(1 0 0 -1 0 850)"},plotlylogo:{width:1542,height:1e3,path:"m0-10h182v-140h-182v140z m228 146h183v-286h-183v286z m225 714h182v-1000h-182v1000z m225-285h182v-715h-182v715z m225 142h183v-857h-183v857z m231-428h182v-429h-182v429z m225-291h183v-138h-183v138z",transform:"matrix(1 0 0 -1 0 850)"},"z-axis":{width:1e3,height:1e3,path:"m833 5l-17 108v41l-130-65 130-66c0 0 0 38 0 39 0-1 36-14 39-25 4-15-6-22-16-30-15-12-39-16-56-20-90-22-187-23-279-23-261 0-341 34-353 59 3 60 228 110 228 110-140-8-351-35-351-116 0-120 293-142 474-142 155 0 477 22 477 142 0 50-74 79-163 96z m-374 94c-58-5-99-21-99-40 0-24 65-43 144-43 79 0 143 19 143 43 0 19-42 34-98 40v216h87l-132 135-133-135h88v-216z m167 515h-136v1c16 16 31 34 46 52l84 109v54h-230v-71h124v-1c-16-17-28-32-44-51l-89-114v-51h245v72z",transform:"matrix(1 0 0 -1 0 850)"},"3d_rotate":{width:1e3,height:1e3,path:"m922 660c-5 4-9 7-14 11-359 263-580-31-580-31l-102 28 58-400c0 1 1 1 2 2 118 108 351 249 351 249s-62 27-100 42c88 83 222 183 347 122 16-8 30-17 44-27-2 1-4 2-6 4z m36-329c0 0 64 229-88 296-62 27-124 14-175-11 157-78 225-208 249-266 8-19 11-31 11-31 2 5 6 15 11 32-5-13-8-20-8-20z m-775-239c70-31 117-50 198-32-121 80-199 346-199 346l-96-15-58-12c0 0 55-226 155-287z m603 133l-317-139c0 0 4-4 19-14 7-5 24-15 24-15s-177-147-389 4c235-287 536-112 536-112l31-22 100 299-4-1z m-298-153c6-4 14-9 24-15 0 0-17 10-24 15z",transform:"matrix(1 0 0 -1 0 850)"},camera:{width:1e3,height:1e3,path:"m500 450c-83 0-150-67-150-150 0-83 67-150 150-150 83 0 150 67 150 150 0 83-67 150-150 150z m400 150h-120c-16 0-34 13-39 29l-31 93c-6 15-23 28-40 28h-340c-16 0-34-13-39-28l-31-94c-6-15-23-28-40-28h-120c-55 0-100-45-100-100v-450c0-55 45-100 100-100h800c55 0 100 45 100 100v450c0 55-45 100-100 100z m-400-550c-138 0-250 112-250 250 0 138 112 250 250 250 138 0 250-112 250-250 0-138-112-250-250-250z m365 380c-19 0-35 16-35 35 0 19 16 35 35 35 19 0 35-16 35-35 0-19-16-35-35-35z",transform:"matrix(1 0 0 -1 0 850)"},movie:{width:1e3,height:1e3,path:"m938 413l-188-125c0 37-17 71-44 94 64 38 107 107 107 187 0 121-98 219-219 219-121 0-219-98-219-219 0-61 25-117 66-156h-115c30 33 49 76 49 125 0 103-84 187-187 187s-188-84-188-187c0-57 26-107 65-141-38-22-65-62-65-109v-250c0-70 56-126 125-126h500c69 0 125 56 125 126l188-126c34 0 62 28 62 63v375c0 35-28 63-62 63z m-750 0c-69 0-125 56-125 125s56 125 125 125 125-56 125-125-56-125-125-125z m406-1c-87 0-157 70-157 157 0 86 70 156 157 156s156-70 156-156-70-157-156-157z",transform:"matrix(1 0 0 -1 0 850)"},question:{width:857.1,height:1e3,path:"m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z",transform:"matrix(1 0 0 -1 0 850)"},disk:{width:857.1,height:1e3,path:"m214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-8 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z",transform:"matrix(1 0 0 -1 0 850)"},lasso:{width:1031,height:1e3,path:"m1018 538c-36 207-290 336-568 286-277-48-473-256-436-463 10-57 36-108 76-151-13-66 11-137 68-183 34-28 75-41 114-42l-55-70 0 0c-2-1-3-2-4-3-10-14-8-34 5-45 14-11 34-8 45 4 1 1 2 3 2 5l0 0 113 140c16 11 31 24 45 40 4 3 6 7 8 11 48-3 100 0 151 9 278 48 473 255 436 462z m-624-379c-80 14-149 48-197 96 42 42 109 47 156 9 33-26 47-66 41-105z m-187-74c-19 16-33 37-39 60 50-32 109-55 174-68-42-25-95-24-135 8z m360 75c-34-7-69-9-102-8 8 62-16 128-68 170-73 59-175 54-244-5-9 20-16 40-20 61-28 159 121 317 333 354s407-60 434-217c28-159-121-318-333-355z",transform:"matrix(1 0 0 -1 0 850)"},selectbox:{width:1e3,height:1e3,path:"m0 850l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-285l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z",transform:"matrix(1 0 0 -1 0 850)"},spikeline:{width:1e3,height:1e3,path:"M512 409c0-57-46-104-103-104-57 0-104 47-104 104 0 57 47 103 104 103 57 0 103-46 103-103z m-327-39l92 0 0 92-92 0z m-185 0l92 0 0 92-92 0z m370-186l92 0 0 93-92 0z m0-184l92 0 0 92-92 0z",transform:"matrix(1.5 0 0 -1.5 0 850)"},pencil:{width:1792,height:1792,path:"M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z",transform:"matrix(1 0 0 1 0 1)"},newplotlylogo:{name:"newplotlylogo",svg:"<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 132 132'><defs><style>.cls-1 {fill: #3f4f75;} .cls-2 {fill: #80cfbe;} .cls-3 {fill: #fff;}</style></defs><title>plotly-logomark</title><g id='symbol'><rect class='cls-1' width='132' height='132' rx='6' ry='6'/><circle class='cls-2' cx='78' cy='54' r='6'/><circle class='cls-2' cx='102' cy='30' r='6'/><circle class='cls-2' cx='78' cy='30' r='6'/><circle class='cls-2' cx='54' cy='30' r='6'/><circle class='cls-2' cx='30' cy='30' r='6'/><circle class='cls-2' cx='30' cy='54' r='6'/><path class='cls-3' d='M30,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,30,72Z'/><path class='cls-3' d='M78,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,78,72Z'/><path class='cls-3' d='M54,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,54,48Z'/><path class='cls-3' d='M102,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,102,48Z'/></g></svg>"}}},{}],698:[function(t,e,r){"use strict";r.isLeftAnchor=function(t){return"left"===t.xanchor||"auto"===t.xanchor&&t.x<=1/3},r.isCenterAnchor=function(t){return"center"===t.xanchor||"auto"===t.xanchor&&t.x>1/3&&t.x<2/3},r.isRightAnchor=function(t){return"right"===t.xanchor||"auto"===t.xanchor&&t.x>=2/3},r.isTopAnchor=function(t){return"top"===t.yanchor||"auto"===t.yanchor&&t.y>=2/3},r.isMiddleAnchor=function(t){return"middle"===t.yanchor||"auto"===t.yanchor&&t.y>1/3&&t.y<2/3},r.isBottomAnchor=function(t){return"bottom"===t.yanchor||"auto"===t.yanchor&&t.y<=1/3}},{}],699:[function(t,e,r){"use strict";var n=t("./mod"),a=n.mod,i=n.modHalf,o=Math.PI,s=2*o;function l(t){return Math.abs(t[1]-t[0])>s-1e-14}function c(t,e){return i(e-t,s)}function u(t,e){if(l(e))return!0;var r,n;e[0]<e[1]?(r=e[0],n=e[1]):(r=e[1],n=e[0]),(r=a(r,s))>(n=a(n,s))&&(n+=s);var i=a(t,s),o=i+s;return i>=r&&i<=n||o>=r&&o<=n}function h(t,e,r,n,a,i,c){a=a||0,i=i||0;var u,h,f,p,d,g=l([r,n]);function v(t,e){return[t*Math.cos(e)+a,i-t*Math.sin(e)]}g?(u=0,h=o,f=s):r<n?(u=r,f=n):(u=n,f=r),t<e?(p=t,d=e):(p=e,d=t);var m,y=Math.abs(f-u)<=o?0:1;function x(t,e,r){return"A"+[t,t]+" "+[0,y,r]+" "+v(t,e)}return g?m=null===p?"M"+v(d,u)+x(d,h,0)+x(d,f,0)+"Z":"M"+v(p,u)+x(p,h,0)+x(p,f,0)+"ZM"+v(d,u)+x(d,h,1)+x(d,f,1)+"Z":null===p?(m="M"+v(d,u)+x(d,f,0),c&&(m+="L0,0Z")):m="M"+v(p,u)+"L"+v(d,u)+x(d,f,0)+"L"+v(p,f)+x(p,u,1)+"Z",m}e.exports={deg2rad:function(t){return t/180*o},rad2deg:function(t){return t/o*180},angleDelta:c,angleDist:function(t,e){return Math.abs(c(t,e))},isFullCircle:l,isAngleInsideSector:u,isPtInsideSector:function(t,e,r,n){return!!u(e,n)&&(r[0]<r[1]?(a=r[0],i=r[1]):(a=r[1],i=r[0]),t>=a&&t<=i);var a,i},pathArc:function(t,e,r,n,a){return h(null,t,e,r,n,a,0)},pathSector:function(t,e,r,n,a){return h(null,t,e,r,n,a,1)},pathAnnulus:function(t,e,r,n,a,i){return h(t,e,r,n,a,i,1)}}},{"./mod":724}],700:[function(t,e,r){"use strict";var n=Array.isArray,a="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer:{isView:function(){return!1}},i="undefined"==typeof DataView?function(){}:DataView;function o(t){return a.isView(t)&&!(t instanceof i)}function s(t){return n(t)||o(t)}function l(t,e,r){if(s(t)){if(s(t[0])){for(var n=r,a=0;a<t.length;a++)n=e(n,t[a].length);return n}return t.length}return 0}r.isTypedArray=o,r.isArrayOrTypedArray=s,r.isArray1D=function(t){return!s(t[0])},r.ensureArray=function(t,e){return n(t)||(t=[]),t.length=e,t},r.concat=function(){var t,e,r,a,i,o,s,l,c=[],u=!0,h=0;for(r=0;r<arguments.length;r++)(o=(a=arguments[r]).length)&&(e?c.push(a):(e=a,i=o),n(a)?t=!1:(u=!1,h?t!==a.constructor&&(t=!1):t=a.constructor),h+=o);if(!h)return[];if(!c.length)return e;if(u)return e.concat.apply(e,c);if(t){for((s=new t(h)).set(e),r=0;r<c.length;r++)a=c[r],s.set(a,i),i+=a.length;return s}for(s=new Array(h),l=0;l<e.length;l++)s[l]=e[l];for(r=0;r<c.length;r++){for(a=c[r],l=0;l<a.length;l++)s[i+l]=a[l];i+=l}return s},r.maxRowLength=function(t){return l(t,Math.max,0)},r.minRowLength=function(t){return l(t,Math.min,1/0)}},{}],701:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../constants/numerical").BADNUM,i=/^['"%,$#\s']+|[, ]|['"%,$#\s']+$/g;e.exports=function(t){return"string"==typeof t&&(t=t.replace(i,"")),n(t)?Number(t):a}},{"../constants/numerical":693,"fast-isnumeric":228}],702:[function(t,e,r){"use strict";e.exports=function(t){var e=t._fullLayout;e._glcanvas&&e._glcanvas.size()&&e._glcanvas.each(function(t){t.regl&&t.regl.clear({color:!0,depth:!0})})}},{}],703:[function(t,e,r){"use strict";e.exports=function(t){t._responsiveChartHandler&&(window.removeEventListener("resize",t._responsiveChartHandler),delete t._responsiveChartHandler)}},{}],704:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("tinycolor2"),i=t("../plots/attributes"),o=t("../components/colorscale/scales"),s=t("../constants/interactions").DESELECTDIM,l=t("./nested_property"),c=t("./regex").counter,u=t("./mod").modHalf,h=t("./array").isArrayOrTypedArray;function f(t,e){var n=r.valObjectMeta[e.valType];if(e.arrayOk&&h(t))return!0;if(n.validateFunction)return n.validateFunction(t,e);var a={},i=a,o={set:function(t){i=t}};return n.coerceFunction(t,o,a,e),i!==a}r.valObjectMeta={data_array:{coerceFunction:function(t,e,r){h(t)?e.set(t):void 0!==r&&e.set(r)}},enumerated:{coerceFunction:function(t,e,r,n){n.coerceNumber&&(t=+t),-1===n.values.indexOf(t)?e.set(r):e.set(t)},validateFunction:function(t,e){e.coerceNumber&&(t=+t);for(var r=e.values,n=0;n<r.length;n++){var a=String(r[n]);if("/"===a.charAt(0)&&"/"===a.charAt(a.length-1)){if(new RegExp(a.substr(1,a.length-2)).test(t))return!0}else if(t===r[n])return!0}return!1}},boolean:{coerceFunction:function(t,e,r){!0===t||!1===t?e.set(t):e.set(r)}},number:{coerceFunction:function(t,e,r,a){!n(t)||void 0!==a.min&&t<a.min||void 0!==a.max&&t>a.max?e.set(r):e.set(+t)}},integer:{coerceFunction:function(t,e,r,a){t%1||!n(t)||void 0!==a.min&&t<a.min||void 0!==a.max&&t>a.max?e.set(r):e.set(+t)}},string:{coerceFunction:function(t,e,r,n){if("string"!=typeof t){var a="number"==typeof t;!0!==n.strict&&a?e.set(String(t)):e.set(r)}else n.noBlank&&!t?e.set(r):e.set(t)}},color:{coerceFunction:function(t,e,r){a(t).isValid()?e.set(t):e.set(r)}},colorlist:{coerceFunction:function(t,e,r){Array.isArray(t)&&t.length&&t.every(function(t){return a(t).isValid()})?e.set(t):e.set(r)}},colorscale:{coerceFunction:function(t,e,r){e.set(o.get(t,r))}},angle:{coerceFunction:function(t,e,r){"auto"===t?e.set("auto"):n(t)?e.set(u(+t,360)):e.set(r)}},subplotid:{coerceFunction:function(t,e,r,n){var a=n.regex||c(r);"string"==typeof t&&a.test(t)?e.set(t):e.set(r)},validateFunction:function(t,e){var r=e.dflt;return t===r||"string"==typeof t&&!!c(r).test(t)}},flaglist:{coerceFunction:function(t,e,r,n){if("string"==typeof t)if(-1===(n.extras||[]).indexOf(t)){for(var a=t.split("+"),i=0;i<a.length;){var o=a[i];-1===n.flags.indexOf(o)||a.indexOf(o)<i?a.splice(i,1):i++}a.length?e.set(a.join("+")):e.set(r)}else e.set(t);else e.set(r)}},any:{coerceFunction:function(t,e,r){void 0===t?e.set(r):e.set(t)}},info_array:{coerceFunction:function(t,e,n,a){function i(t,e,n){var a,i={set:function(t){a=t}};return void 0===n&&(n=e.dflt),r.valObjectMeta[e.valType].coerceFunction(t,i,n,e),a}var o=2===a.dimensions||"1-2"===a.dimensions&&Array.isArray(t)&&Array.isArray(t[0]);if(Array.isArray(t)){var s,l,c,u,h,f,p=a.items,d=[],g=Array.isArray(p),v=g&&o&&Array.isArray(p[0]),m=o&&g&&!v,y=g&&!m?p.length:t.length;if(n=Array.isArray(n)?n:[],o)for(s=0;s<y;s++)for(d[s]=[],c=Array.isArray(t[s])?t[s]:[],h=m?p.length:g?p[s].length:c.length,l=0;l<h;l++)u=m?p[l]:g?p[s][l]:p,void 0!==(f=i(c[l],u,(n[s]||[])[l]))&&(d[s][l]=f);else for(s=0;s<y;s++)void 0!==(f=i(t[s],g?p[s]:p,n[s]))&&(d[s]=f);e.set(d)}else e.set(n)},validateFunction:function(t,e){if(!Array.isArray(t))return!1;var r=e.items,n=Array.isArray(r),a=2===e.dimensions;if(!e.freeLength&&t.length!==r.length)return!1;for(var i=0;i<t.length;i++)if(a){if(!Array.isArray(t[i])||!e.freeLength&&t[i].length!==r[i].length)return!1;for(var o=0;o<t[i].length;o++)if(!f(t[i][o],n?r[i][o]:r))return!1}else if(!f(t[i],n?r[i]:r))return!1;return!0}}},r.coerce=function(t,e,n,a,i){var o=l(n,a).get(),s=l(t,a),c=l(e,a),u=s.get(),p=e._template;if(void 0===u&&p&&(u=l(p,a).get(),p=0),void 0===i&&(i=o.dflt),o.arrayOk&&h(u))return c.set(u),u;var d=r.valObjectMeta[o.valType].coerceFunction;d(u,c,i,o);var g=c.get();return p&&g===i&&!f(u,o)&&(d(u=l(p,a).get(),c,i,o),g=c.get()),g},r.coerce2=function(t,e,n,a,i){var o=l(t,a),s=r.coerce(t,e,n,a,i),c=o.get();return null!=c&&s},r.coerceFont=function(t,e,r){var n={};return r=r||{},n.family=t(e+".family",r.family),n.size=t(e+".size",r.size),n.color=t(e+".color",r.color),n},r.coerceHoverinfo=function(t,e,n){var a,o=e._module.attributes,s=o.hoverinfo?o:i,l=s.hoverinfo;if(1===n._dataLength){var c="all"===l.dflt?l.flags.slice():l.dflt.split("+");c.splice(c.indexOf("name"),1),a=c.join("+")}return r.coerce(t,e,s,"hoverinfo",a)},r.coerceSelectionMarkerOpacity=function(t,e){if(t.marker){var r,n,a=t.marker.opacity;if(void 0!==a)h(a)||t.selected||t.unselected||(r=a,n=s*a),e("selected.marker.opacity",r),e("unselected.marker.opacity",n)}},r.validate=f},{"../components/colorscale/scales":606,"../constants/interactions":692,"../plots/attributes":762,"./array":700,"./mod":724,"./nested_property":725,"./regex":733,"fast-isnumeric":228,tinycolor2:535}],705:[function(t,e,r){"use strict";var n,a,i=t("d3"),o=t("fast-isnumeric"),s=t("./loggers"),l=t("./mod").mod,c=t("../constants/numerical"),u=c.BADNUM,h=c.ONEDAY,f=c.ONEHOUR,p=c.ONEMIN,d=c.ONESEC,g=c.EPOCHJD,v=t("../registry"),m=i.time.format.utc,y=/^\s*(-?\d\d\d\d|\d\d)(-(\d?\d)(-(\d?\d)([ Tt]([01]?\d|2[0-3])(:([0-5]\d)(:([0-5]\d(\.\d+)?))?(Z|z|[+\-]\d\d:?\d\d)?)?)?)?)?\s*$/m,x=/^\s*(-?\d\d\d\d|\d\d)(-(\d?\di?)(-(\d?\d)([ Tt]([01]?\d|2[0-3])(:([0-5]\d)(:([0-5]\d(\.\d+)?))?(Z|z|[+\-]\d\d:?\d\d)?)?)?)?)?\s*$/m,b=(new Date).getFullYear()-70;function _(t){return t&&v.componentsRegistry.calendars&&"string"==typeof t&&"gregorian"!==t}function w(t,e){return String(t+Math.pow(10,e)).substr(1)}r.dateTick0=function(t,e){return _(t)?e?v.getComponentMethod("calendars","CANONICAL_SUNDAY")[t]:v.getComponentMethod("calendars","CANONICAL_TICK")[t]:e?"2000-01-02":"2000-01-01"},r.dfltRange=function(t){return _(t)?v.getComponentMethod("calendars","DFLTRANGE")[t]:["2000-01-01","2001-01-01"]},r.isJSDate=function(t){return"object"==typeof t&&null!==t&&"function"==typeof t.getTime},r.dateTime2ms=function(t,e){if(r.isJSDate(t)){var i=t.getTimezoneOffset()*p,o=(t.getUTCMinutes()-t.getMinutes())*p+(t.getUTCSeconds()-t.getSeconds())*d+(t.getUTCMilliseconds()-t.getMilliseconds());if(o){var s=3*p;i=i-s/2+l(o-i+s/2,s)}return(t=Number(t)-i)>=n&&t<=a?t:u}if("string"!=typeof t&&"number"!=typeof t)return u;t=String(t);var c=_(e),m=t.charAt(0);!c||"G"!==m&&"g"!==m||(t=t.substr(1),e="");var w=c&&"chinese"===e.substr(0,7),k=t.match(w?x:y);if(!k)return u;var T=k[1],M=k[3]||"1",A=Number(k[5]||1),S=Number(k[7]||0),E=Number(k[9]||0),L=Number(k[11]||0);if(c){if(2===T.length)return u;var C;T=Number(T);try{var P=v.getComponentMethod("calendars","getCal")(e);if(w){var O="i"===M.charAt(M.length-1);M=parseInt(M,10),C=P.newDate(T,P.toMonthIndex(T,M,O),A)}else C=P.newDate(T,Number(M),A)}catch(t){return u}return C?(C.toJD()-g)*h+S*f+E*p+L*d:u}T=2===T.length?(Number(T)+2e3-b)%100+b:Number(T),M-=1;var z=new Date(Date.UTC(2e3,M,A,S,E));return z.setUTCFullYear(T),z.getUTCMonth()!==M?u:z.getUTCDate()!==A?u:z.getTime()+L*d},n=r.MIN_MS=r.dateTime2ms("-9999"),a=r.MAX_MS=r.dateTime2ms("9999-12-31 23:59:59.9999"),r.isDateTime=function(t,e){return r.dateTime2ms(t,e)!==u};var k=90*h,T=3*f,M=5*p;function A(t,e,r,n,a){if((e||r||n||a)&&(t+=" "+w(e,2)+":"+w(r,2),(n||a)&&(t+=":"+w(n,2),a))){for(var i=4;a%10==0;)i-=1,a/=10;t+="."+w(a,i)}return t}r.ms2DateTime=function(t,e,r){if("number"!=typeof t||!(t>=n&&t<=a))return u;e||(e=0);var i,o,s,c,y,x,b=Math.floor(10*l(t+.05,1)),w=Math.round(t-b/10);if(_(r)){var S=Math.floor(w/h)+g,E=Math.floor(l(t,h));try{i=v.getComponentMethod("calendars","getCal")(r).fromJD(S).formatDate("yyyy-mm-dd")}catch(t){i=m("G%Y-%m-%d")(new Date(w))}if("-"===i.charAt(0))for(;i.length<11;)i="-0"+i.substr(1);else for(;i.length<10;)i="0"+i;o=e<k?Math.floor(E/f):0,s=e<k?Math.floor(E%f/p):0,c=e<T?Math.floor(E%p/d):0,y=e<M?E%d*10+b:0}else x=new Date(w),i=m("%Y-%m-%d")(x),o=e<k?x.getUTCHours():0,s=e<k?x.getUTCMinutes():0,c=e<T?x.getUTCSeconds():0,y=e<M?10*x.getUTCMilliseconds()+b:0;return A(i,o,s,c,y)},r.ms2DateTimeLocal=function(t){if(!(t>=n+h&&t<=a-h))return u;var e=Math.floor(10*l(t+.05,1)),r=new Date(Math.round(t-e/10));return A(i.time.format("%Y-%m-%d")(r),r.getHours(),r.getMinutes(),r.getSeconds(),10*r.getUTCMilliseconds()+e)},r.cleanDate=function(t,e,n){if(t===u)return e;if(r.isJSDate(t)||"number"==typeof t&&isFinite(t)){if(_(n))return s.error("JS Dates and milliseconds are incompatible with world calendars",t),e;if(!(t=r.ms2DateTimeLocal(+t))&&void 0!==e)return e}else if(!r.isDateTime(t,n))return s.error("unrecognized date",t),e;return t};var S=/%\d?f/g;function E(t,e,r,n){t=t.replace(S,function(t){var r=Math.min(+t.charAt(1)||6,6);return(e/1e3%1+2).toFixed(r).substr(2).replace(/0+$/,"")||"0"});var a=new Date(Math.floor(e+.05));if(_(n))try{t=v.getComponentMethod("calendars","worldCalFmt")(t,e,n)}catch(t){return"Invalid"}return r(t)(a)}var L=[59,59.9,59.99,59.999,59.9999];r.formatDate=function(t,e,r,n,a,i){if(a=_(a)&&a,!e)if("y"===r)e=i.year;else if("m"===r)e=i.month;else{if("d"!==r)return function(t,e){var r=l(t+.05,h),n=w(Math.floor(r/f),2)+":"+w(l(Math.floor(r/p),60),2);if("M"!==e){o(e)||(e=0);var a=(100+Math.min(l(t/d,60),L[e])).toFixed(e).substr(1);e>0&&(a=a.replace(/0+$/,"").replace(/[\.]$/,"")),n+=":"+a}return n}(t,r)+"\n"+E(i.dayMonthYear,t,n,a);e=i.dayMonth+"\n"+i.year}return E(e,t,n,a)};var C=3*h;r.incrementMonth=function(t,e,r){r=_(r)&&r;var n=l(t,h);if(t=Math.round(t-n),r)try{var a=Math.round(t/h)+g,i=v.getComponentMethod("calendars","getCal")(r),o=i.fromJD(a);return e%12?i.add(o,e,"m"):i.add(o,e/12,"y"),(o.toJD()-g)*h+n}catch(e){s.error("invalid ms "+t+" in calendar "+r)}var c=new Date(t+C);return c.setUTCMonth(c.getUTCMonth()+e)+n-C},r.findExactDates=function(t,e){for(var r,n,a=0,i=0,s=0,l=0,c=_(e)&&v.getComponentMethod("calendars","getCal")(e),u=0;u<t.length;u++)if(n=t[u],o(n)){if(!(n%h))if(c)try{1===(r=c.fromJD(n/h+g)).day()?1===r.month()?a++:i++:s++}catch(t){}else 1===(r=new Date(n)).getUTCDate()?0===r.getUTCMonth()?a++:i++:s++}else l++;s+=i+=a;var f=t.length-l;return{exactYears:a/f,exactMonths:i/f,exactDays:s/f}}},{"../constants/numerical":693,"../registry":846,"./loggers":721,"./mod":724,d3:165,"fast-isnumeric":228}],706:[function(t,e,r){"use strict";var n=t("d3"),a=t("./loggers");function i(t){var e=t&&t.parentNode;e&&e.removeChild(t)}function o(t,e,r){var n="plotly.js-style-"+t,i=document.getElementById(n);i||((i=document.createElement("style")).setAttribute("id",n),i.appendChild(document.createTextNode("")),document.head.appendChild(i));var o=i.sheet;o.insertRule?o.insertRule(e+"{"+r+"}",0):o.addRule?o.addRule(e,r,0):a.warn("addStyleRule failed")}e.exports={getGraphDiv:function(t){var e;if("string"==typeof t){if(null===(e=document.getElementById(t)))throw new Error("No DOM element with id '"+t+"' exists on the page.");return e}if(null==t)throw new Error("DOM element provided is null or undefined");return t},isPlotDiv:function(t){var e=n.select(t);return e.node()instanceof HTMLElement&&e.size()&&e.classed("js-plotly-plot")},removeElement:i,addStyleRule:function(t,e){o("global",t,e)},addRelatedStyleRule:o,deleteRelatedStyleRule:function(t){var e="plotly.js-style-"+t,r=document.getElementById(e);r&&i(r)}}},{"./loggers":721,d3:165}],707:[function(t,e,r){"use strict";var n=t("events").EventEmitter,a={init:function(t){if(t._ev instanceof n)return t;var e=new n,r=new n;return t._ev=e,t._internalEv=r,t.on=e.on.bind(e),t.once=e.once.bind(e),t.removeListener=e.removeListener.bind(e),t.removeAllListeners=e.removeAllListeners.bind(e),t._internalOn=r.on.bind(r),t._internalOnce=r.once.bind(r),t._removeInternalListener=r.removeListener.bind(r),t._removeAllInternalListeners=r.removeAllListeners.bind(r),t.emit=function(n,a){"undefined"!=typeof jQuery&&jQuery(t).trigger(n,a),e.emit(n,a),r.emit(n,a)},t},triggerHandler:function(t,e,r){var n,a;"undefined"!=typeof jQuery&&(n=jQuery(t).triggerHandler(e,r));var i=t._ev;if(!i)return n;var o,s=i._events[e];if(!s)return n;function l(t){return t.listener?(i.removeListener(e,t.listener),t.fired?void 0:(t.fired=!0,t.listener.apply(i,[r]))):t.apply(i,[r])}for(s=Array.isArray(s)?s:[s],o=0;o<s.length-1;o++)l(s[o]);return a=l(s[o]),void 0!==n?n:a},purge:function(t){return delete t._ev,delete t.on,delete t.once,delete t.removeListener,delete t.removeAllListeners,delete t.emit,delete t._ev,delete t._internalEv,delete t._internalOn,delete t._internalOnce,delete t._removeInternalListener,delete t._removeAllInternalListeners,t}};e.exports=a},{events:106}],708:[function(t,e,r){"use strict";var n=t("./is_plain_object.js"),a=Array.isArray;function i(t,e,r,o){var s,l,c,u,h,f,p=t[0],d=t.length;if(2===d&&a(p)&&a(t[1])&&0===p.length){if(function(t,e){var r,n;for(r=0;r<t.length;r++){if(null!==(n=t[r])&&"object"==typeof n)return!1;void 0!==n&&(e[r]=n)}return!0}(t[1],p))return p;p.splice(0,p.length)}for(var g=1;g<d;g++)for(l in s=t[g])c=p[l],u=s[l],o&&a(u)?p[l]=u:e&&u&&(n(u)||(h=a(u)))?(h?(h=!1,f=c&&a(c)?c:[]):f=c&&n(c)?c:{},p[l]=i([f,u],e,r,o)):("undefined"!=typeof u||r)&&(p[l]=u);return p}r.extendFlat=function(){return i(arguments,!1,!1,!1)},r.extendDeep=function(){return i(arguments,!0,!1,!1)},r.extendDeepAll=function(){return i(arguments,!0,!0,!1)},r.extendDeepNoArrays=function(){return i(arguments,!0,!1,!0)}},{"./is_plain_object.js":718}],709:[function(t,e,r){"use strict";e.exports=function(t){for(var e={},r=[],n=0,a=0;a<t.length;a++){var i=t[a];1!==e[i]&&(e[i]=1,r[n++]=i)}return r}},{}],710:[function(t,e,r){"use strict";function n(t){return!0===t.visible}function a(t){var e=t[0].trace;return!0===e.visible&&0!==e._length}e.exports=function(t){for(var e,r=(e=t,Array.isArray(e)&&Array.isArray(e[0])&&e[0][0]&&e[0][0].trace?a:n),i=[],o=0;o<t.length;o++){var s=t[o];r(s)&&i.push(s)}return i}},{}],711:[function(t,e,r){"use strict";var n=t("d3"),a=t("country-regex"),i=t("@turf/area"),o=t("@turf/centroid"),s=t("@turf/bbox"),l=t("./identity"),c=t("./loggers"),u=t("./is_plain_object"),h=t("./nested_property"),f=t("./polygon"),p=Object.keys(a),d={"ISO-3":l,"USA-states":l,"country names":function(t){for(var e=0;e<p.length;e++){var r=p[e],n=new RegExp(a[r]);if(n.test(t.trim().toLowerCase()))return r}return c.log("Unrecognized country name: "+t+"."),!1}};function g(t){var e=t.geojson,r=window.PlotlyGeoAssets||{},n="string"==typeof e?r[e]:e;return u(n)?n:(c.error("Oops ... something went wrong when fetching "+e),!1)}e.exports={locationToFeature:function(t,e,r){if(!e||"string"!=typeof e)return!1;var n,a,i,o=d[t](e);if(o){if("USA-states"===t)for(n=[],i=0;i<r.length;i++)(a=r[i]).properties&&a.properties.gu&&"USA"===a.properties.gu&&n.push(a);else n=r;for(i=0;i<n.length;i++)if((a=n[i]).id===o)return a;c.log(["Location with id",o,"does not have a matching topojson feature at this resolution."].join(" "))}return!1},feature2polygons:function(t){var e,r,n,a,i=t.geometry,o=i.coordinates,s=t.id,l=[];function c(t){for(var e=0;e<t.length-1;e++)if(t[e][0]>0&&t[e+1][0]<0)return e;return null}switch(e="RUS"===s||"FJI"===s?function(t){var e;if(null===c(t))e=t;else for(e=new Array(t.length),a=0;a<t.length;a++)e[a]=[t[a][0]<0?t[a][0]+360:t[a][0],t[a][1]];l.push(f.tester(e))}:"ATA"===s?function(t){var e=c(t);if(null===e)return l.push(f.tester(t));var r=new Array(t.length+1),n=0;for(a=0;a<t.length;a++)a>e?r[n++]=[t[a][0]+360,t[a][1]]:a===e?(r[n++]=t[a],r[n++]=[t[a][0],-90]):r[n++]=t[a];var i=f.tester(r);i.pts.pop(),l.push(i)}:function(t){l.push(f.tester(t))},i.type){case"MultiPolygon":for(r=0;r<o.length;r++)for(n=0;n<o[r].length;n++)e(o[r][n]);break;case"Polygon":for(r=0;r<o.length;r++)e(o[r])}return l},getTraceGeojson:g,extractTraceFeature:function(t){var e=t[0].trace,r=g(e);if(!r)return!1;var n,a={},s=[];for(n=0;n<e._length;n++){var l=t[n];(l.loc||0===l.loc)&&(a[l.loc]=l)}function u(t){var r=h(t,e.featureidkey||"id").get(),n=a[r];if(n){var l=t.geometry;if("Polygon"===l.type||"MultiPolygon"===l.type){var u={type:"Feature",id:r,geometry:l,properties:{}};u.properties.ct=function(t){var e,r=t.geometry;if("MultiPolygon"===r.type)for(var n=r.coordinates,a=0,s=0;s<n.length;s++){var l={type:"Polygon",coordinates:n[s]},c=i.default(l);c>a&&(a=c,e=l)}else e=r;return o.default(e).geometry.coordinates}(u),n.fIn=t,n.fOut=u,s.push(u)}else c.log(["Location",n.loc,"does not have a valid GeoJSON geometry.","Traces with locationmode *geojson-id* only support","*Polygon* and *MultiPolygon* geometries."].join(" "))}delete a[r]}switch(r.type){case"FeatureCollection":var f=r.features;for(n=0;n<f.length;n++)u(f[n]);break;case"Feature":u(r);break;default:return c.warn(["Invalid GeoJSON type",(r.type||"none")+".","Traces with locationmode *geojson-id* only support","*FeatureCollection* and *Feature* types."].join(" ")),!1}for(var p in a)c.log(["Location *"+p+"*","does not have a matching feature with id-key","*"+e.featureidkey+"*."].join(" "));return s},fetchTraceGeoData:function(t){var e=window.PlotlyGeoAssets||{},r=[];function a(t){return new Promise(function(r,a){n.json(t,function(n,i){if(n){delete e[t];var o=404===n.status?'GeoJSON at URL "'+t+'" does not exist.':"Unexpected error while fetching from "+t;return a(new Error(o))}return e[t]=i,r(i)})})}function i(t){return new Promise(function(r,n){var a=0,i=setInterval(function(){return e[t]&&"pending"!==e[t]?(clearInterval(i),r(e[t])):a>100?(clearInterval(i),n("Unexpected error while fetching from "+t)):void a++},50)})}for(var o=0;o<t.length;o++){var s=t[o][0].trace.geojson;"string"==typeof s&&(e[s]?"pending"===e[s]&&r.push(i(s)):(e[s]="pending",r.push(a(s))))}return r},computeBbox:function(t){return s.default(t)}}},{"./identity":716,"./is_plain_object":718,"./loggers":721,"./nested_property":725,"./polygon":729,"@turf/area":57,"@turf/bbox":58,"@turf/centroid":59,"country-regex":136,d3:165}],712:[function(t,e,r){"use strict";var n=t("../constants/numerical").BADNUM;r.calcTraceToLineCoords=function(t){for(var e=t[0].trace.connectgaps,r=[],a=[],i=0;i<t.length;i++){var o=t[i].lonlat;o[0]!==n?a.push(o):!e&&a.length>0&&(r.push(a),a=[])}return a.length>0&&r.push(a),r},r.makeLine=function(t){return 1===t.length?{type:"LineString",coordinates:t[0]}:{type:"MultiLineString",coordinates:t}},r.makePolygon=function(t){if(1===t.length)return{type:"Polygon",coordinates:t};for(var e=new Array(t.length),r=0;r<t.length;r++)e[r]=[t[r]];return{type:"MultiPolygon",coordinates:e}},r.makeBlank=function(){return{type:"Point",coordinates:[]}}},{"../constants/numerical":693}],713:[function(t,e,r){"use strict";var n,a,i,o=t("./mod").mod;function s(t,e,r,n,a,i,o,s){var l=r-t,c=a-t,u=o-a,h=n-e,f=i-e,p=s-i,d=l*p-u*h;if(0===d)return null;var g=(c*p-u*f)/d,v=(c*h-l*f)/d;return v<0||v>1||g<0||g>1?null:{x:t+l*g,y:e+h*g}}function l(t,e,r,n,a){var i=n*t+a*e;if(i<0)return n*n+a*a;if(i>r){var o=n-t,s=a-e;return o*o+s*s}var l=n*e-a*t;return l*l/r}r.segmentsIntersect=s,r.segmentDistance=function(t,e,r,n,a,i,o,c){if(s(t,e,r,n,a,i,o,c))return 0;var u=r-t,h=n-e,f=o-a,p=c-i,d=u*u+h*h,g=f*f+p*p,v=Math.min(l(u,h,d,a-t,i-e),l(u,h,d,o-t,c-e),l(f,p,g,t-a,e-i),l(f,p,g,r-a,n-i));return Math.sqrt(v)},r.getTextLocation=function(t,e,r,s){if(t===a&&s===i||(n={},a=t,i=s),n[r])return n[r];var l=t.getPointAtLength(o(r-s/2,e)),c=t.getPointAtLength(o(r+s/2,e)),u=Math.atan((c.y-l.y)/(c.x-l.x)),h=t.getPointAtLength(o(r,e)),f={x:(4*h.x+l.x+c.x)/6,y:(4*h.y+l.y+c.y)/6,theta:u};return n[r]=f,f},r.clearLocationCache=function(){a=null},r.getVisibleSegment=function(t,e,r){var n,a,i=e.left,o=e.right,s=e.top,l=e.bottom,c=0,u=t.getTotalLength(),h=u;function f(e){var r=t.getPointAtLength(e);0===e?n=r:e===u&&(a=r);var c=r.x<i?i-r.x:r.x>o?r.x-o:0,h=r.y<s?s-r.y:r.y>l?r.y-l:0;return Math.sqrt(c*c+h*h)}for(var p=f(c);p;){if((c+=p+r)>h)return;p=f(c)}for(p=f(h);p;){if(c>(h-=p+r))return;p=f(h)}return{min:c,max:h,len:h-c,total:u,isClosed:0===c&&h===u&&Math.abs(n.x-a.x)<.1&&Math.abs(n.y-a.y)<.1}},r.findPointOnPath=function(t,e,r,n){for(var a,i,o,s=(n=n||{}).pathLength||t.getTotalLength(),l=n.tolerance||.001,c=n.iterationLimit||30,u=t.getPointAtLength(0)[r]>t.getPointAtLength(s)[r]?-1:1,h=0,f=0,p=s;h<c;){if(a=(f+p)/2,o=(i=t.getPointAtLength(a))[r]-e,Math.abs(o)<l)return i;u*o>0?p=a:f=a,h++}return i}},{"./mod":724}],714:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("tinycolor2"),i=t("color-normalize"),o=t("../components/colorscale"),s=t("../components/color/attributes").defaultLine,l=t("./array").isArrayOrTypedArray,c=i(s),u=1;function h(t,e){var r=t;return r[3]*=e,r}function f(t){if(n(t))return c;var e=i(t);return e.length?e:c}function p(t){return n(t)?t:u}e.exports={formatColor:function(t,e,r){var n,a,s,d,g,v=t.color,m=l(v),y=l(e),x=o.extractOpts(t),b=[];if(n=void 0!==x.colorscale?o.makeColorScaleFuncFromTrace(t):f,a=m?function(t,e){return void 0===t[e]?c:i(n(t[e]))}:f,s=y?function(t,e){return void 0===t[e]?u:p(t[e])}:p,m||y)for(var _=0;_<r;_++)d=a(v,_),g=s(e,_),b[_]=h(d,g);else b=h(i(v),e);return b},parseColorScale:function(t,e){void 0===e&&(e=1);var r=o.extractOpts(t);return(r.reversescale?o.flipScale(r.colorscale):r.colorscale).map(function(t){var r=t[0],n=a(t[1]).toRgb();return{index:r,rgb:[n.r,n.g,n.b,e]}})}}},{"../components/color/attributes":590,"../components/colorscale":603,"./array":700,"color-normalize":122,"fast-isnumeric":228,tinycolor2:535}],715:[function(t,e,r){"use strict";var n=t("./identity");function a(t){return[t]}e.exports={keyFun:function(t){return t.key},repeat:a,descend:n,wrap:a,unwrap:function(t){return t[0]}}},{"./identity":716}],716:[function(t,e,r){"use strict";e.exports=function(t){return t}},{}],717:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../constants/numerical"),o=i.FP_SAFE,s=i.BADNUM,l=e.exports={};l.nestedProperty=t("./nested_property"),l.keyedContainer=t("./keyed_container"),l.relativeAttr=t("./relative_attr"),l.isPlainObject=t("./is_plain_object"),l.toLogRange=t("./to_log_range"),l.relinkPrivateKeys=t("./relink_private");var c=t("./array");l.isTypedArray=c.isTypedArray,l.isArrayOrTypedArray=c.isArrayOrTypedArray,l.isArray1D=c.isArray1D,l.ensureArray=c.ensureArray,l.concat=c.concat,l.maxRowLength=c.maxRowLength,l.minRowLength=c.minRowLength;var u=t("./mod");l.mod=u.mod,l.modHalf=u.modHalf;var h=t("./coerce");l.valObjectMeta=h.valObjectMeta,l.coerce=h.coerce,l.coerce2=h.coerce2,l.coerceFont=h.coerceFont,l.coerceHoverinfo=h.coerceHoverinfo,l.coerceSelectionMarkerOpacity=h.coerceSelectionMarkerOpacity,l.validate=h.validate;var f=t("./dates");l.dateTime2ms=f.dateTime2ms,l.isDateTime=f.isDateTime,l.ms2DateTime=f.ms2DateTime,l.ms2DateTimeLocal=f.ms2DateTimeLocal,l.cleanDate=f.cleanDate,l.isJSDate=f.isJSDate,l.formatDate=f.formatDate,l.incrementMonth=f.incrementMonth,l.dateTick0=f.dateTick0,l.dfltRange=f.dfltRange,l.findExactDates=f.findExactDates,l.MIN_MS=f.MIN_MS,l.MAX_MS=f.MAX_MS;var p=t("./search");l.findBin=p.findBin,l.sorterAsc=p.sorterAsc,l.sorterDes=p.sorterDes,l.distinctVals=p.distinctVals,l.roundUp=p.roundUp,l.sort=p.sort,l.findIndexOfMin=p.findIndexOfMin;var d=t("./stats");l.aggNums=d.aggNums,l.len=d.len,l.mean=d.mean,l.median=d.median,l.midRange=d.midRange,l.variance=d.variance,l.stdev=d.stdev,l.interp=d.interp;var g=t("./matrix");l.init2dArray=g.init2dArray,l.transposeRagged=g.transposeRagged,l.dot=g.dot,l.translationMatrix=g.translationMatrix,l.rotationMatrix=g.rotationMatrix,l.rotationXYMatrix=g.rotationXYMatrix,l.apply2DTransform=g.apply2DTransform,l.apply2DTransform2=g.apply2DTransform2;var v=t("./angles");l.deg2rad=v.deg2rad,l.rad2deg=v.rad2deg,l.angleDelta=v.angleDelta,l.angleDist=v.angleDist,l.isFullCircle=v.isFullCircle,l.isAngleInsideSector=v.isAngleInsideSector,l.isPtInsideSector=v.isPtInsideSector,l.pathArc=v.pathArc,l.pathSector=v.pathSector,l.pathAnnulus=v.pathAnnulus;var m=t("./anchor_utils");l.isLeftAnchor=m.isLeftAnchor,l.isCenterAnchor=m.isCenterAnchor,l.isRightAnchor=m.isRightAnchor,l.isTopAnchor=m.isTopAnchor,l.isMiddleAnchor=m.isMiddleAnchor,l.isBottomAnchor=m.isBottomAnchor;var y=t("./geometry2d");l.segmentsIntersect=y.segmentsIntersect,l.segmentDistance=y.segmentDistance,l.getTextLocation=y.getTextLocation,l.clearLocationCache=y.clearLocationCache,l.getVisibleSegment=y.getVisibleSegment,l.findPointOnPath=y.findPointOnPath;var x=t("./extend");l.extendFlat=x.extendFlat,l.extendDeep=x.extendDeep,l.extendDeepAll=x.extendDeepAll,l.extendDeepNoArrays=x.extendDeepNoArrays;var b=t("./loggers");l.log=b.log,l.warn=b.warn,l.error=b.error;var _=t("./regex");l.counterRegex=_.counter;var w=t("./throttle");l.throttle=w.throttle,l.throttleDone=w.done,l.clearThrottle=w.clear;var k=t("./dom");function T(t){var e={};for(var r in t)for(var n=t[r],a=0;a<n.length;a++)e[n[a]]=+r;return e}l.getGraphDiv=k.getGraphDiv,l.isPlotDiv=k.isPlotDiv,l.removeElement=k.removeElement,l.addStyleRule=k.addStyleRule,l.addRelatedStyleRule=k.addRelatedStyleRule,l.deleteRelatedStyleRule=k.deleteRelatedStyleRule,l.clearResponsive=t("./clear_responsive"),l.makeTraceGroups=t("./make_trace_groups"),l._=t("./localize"),l.notifier=t("./notifier"),l.filterUnique=t("./filter_unique"),l.filterVisible=t("./filter_visible"),l.pushUnique=t("./push_unique"),l.cleanNumber=t("./clean_number"),l.ensureNumber=function(t){return a(t)?(t=Number(t))<-o||t>o?s:a(t)?Number(t):s:s},l.isIndex=function(t,e){return!(void 0!==e&&t>=e)&&(a(t)&&t>=0&&t%1==0)},l.noop=t("./noop"),l.identity=t("./identity"),l.repeat=function(t,e){for(var r=new Array(e),n=0;n<e;n++)r[n]=t;return r},l.swapAttrs=function(t,e,r,n){r||(r="x"),n||(n="y");for(var a=0;a<e.length;a++){var i=e[a],o=l.nestedProperty(t,i.replace("?",r)),s=l.nestedProperty(t,i.replace("?",n)),c=o.get();o.set(s.get()),s.set(c)}},l.raiseToTop=function(t){t.parentNode.appendChild(t)},l.cancelTransition=function(t){return t.transition().duration(0)},l.constrain=function(t,e,r){return e>r?Math.max(r,Math.min(e,t)):Math.max(e,Math.min(r,t))},l.bBoxIntersect=function(t,e,r){return r=r||0,t.left<=e.right+r&&e.left<=t.right+r&&t.top<=e.bottom+r&&e.top<=t.bottom+r},l.simpleMap=function(t,e,r,n){for(var a=t.length,i=new Array(a),o=0;o<a;o++)i[o]=e(t[o],r,n);return i},l.randstr=function t(e,r,n,a){if(n||(n=16),void 0===r&&(r=24),r<=0)return"0";var i,o,s=Math.log(Math.pow(2,r))/Math.log(n),c="";for(i=2;s===1/0;i*=2)s=Math.log(Math.pow(2,r/i))/Math.log(n)*i;var u=s-Math.floor(s);for(i=0;i<Math.floor(s);i++)c=Math.floor(Math.random()*n).toString(n)+c;u&&(o=Math.pow(n,u),c=Math.floor(Math.random()*o).toString(n)+c);var h=parseInt(c,n);return e&&e[c]||h!==1/0&&h>=Math.pow(2,r)?a>10?(l.warn("randstr failed uniqueness"),c):t(e,r,n,(a||0)+1):c},l.OptionControl=function(t,e){t||(t={}),e||(e="opt");var r={optionList:[],_newoption:function(n){n[e]=t,r[n.name]=n,r.optionList.push(n)}};return r["_"+e]=t,r},l.smooth=function(t,e){if((e=Math.round(e)||0)<2)return t;var r,n,a,i,o=t.length,s=2*o,l=2*e-1,c=new Array(l),u=new Array(o);for(r=0;r<l;r++)c[r]=(1-Math.cos(Math.PI*(r+1)/e))/(2*e);for(r=0;r<o;r++){for(i=0,n=0;n<l;n++)(a=r+n+1-e)<-o?a-=s*Math.round(a/s):a>=s&&(a-=s*Math.floor(a/s)),a<0?a=-1-a:a>=o&&(a=s-1-a),i+=t[a]*c[n];u[r]=i}return u},l.syncOrAsync=function(t,e,r){var n;function a(){return l.syncOrAsync(t,e,r)}for(;t.length;)if((n=(0,t.splice(0,1)[0])(e))&&n.then)return n.then(a).then(void 0,l.promiseError);return r&&r(e)},l.stripTrailingSlash=function(t){return"/"===t.substr(-1)?t.substr(0,t.length-1):t},l.noneOrAll=function(t,e,r){if(t){var n,a=!1,i=!0;for(n=0;n<r.length;n++)null!=t[r[n]]?a=!0:i=!1;if(a&&!i)for(n=0;n<r.length;n++)t[r[n]]=e[r[n]]}},l.mergeArray=function(t,e,r,n){var a="function"==typeof n;if(l.isArrayOrTypedArray(t))for(var i=Math.min(t.length,e.length),o=0;o<i;o++){var s=t[o];e[o][r]=a?n(s):s}},l.mergeArrayCastPositive=function(t,e,r){return l.mergeArray(t,e,r,function(t){var e=+t;return isFinite(e)&&e>0?e:0})},l.fillArray=function(t,e,r,n){if(n=n||l.identity,l.isArrayOrTypedArray(t))for(var a=0;a<e.length;a++)e[a][r]=n(t[a])},l.castOption=function(t,e,r,n){n=n||l.identity;var a=l.nestedProperty(t,r).get();return l.isArrayOrTypedArray(a)?Array.isArray(e)&&l.isArrayOrTypedArray(a[e[0]])?n(a[e[0]][e[1]]):n(a[e]):a},l.extractOption=function(t,e,r,n){if(r in t)return t[r];var a=l.nestedProperty(e,n).get();return Array.isArray(a)?void 0:a},l.tagSelected=function(t,e,r){var n,a,i=e.selectedpoints,o=e._indexToPoints;o&&(n=T(o));for(var s=0;s<i.length;s++){var c=i[s];if(l.isIndex(c)||l.isArrayOrTypedArray(c)&&l.isIndex(c[0])&&l.isIndex(c[1])){var u=n?n[c]:c,h=r?r[u]:u;void 0!==(a=h)&&a<t.length&&(t[h].selected=1)}}},l.selIndices2selPoints=function(t){var e=t.selectedpoints,r=t._indexToPoints;if(r){for(var n=T(r),a=[],i=0;i<e.length;i++){var o=e[i];if(l.isIndex(o)){var s=n[o];l.isIndex(s)&&a.push(s)}}return a}return e},l.getTargetArray=function(t,e){var r=e.target;if("string"==typeof r&&r){var n=l.nestedProperty(t,r).get();return!!Array.isArray(n)&&n}return!!Array.isArray(r)&&r},l.minExtend=function(t,e){var r={};"object"!=typeof e&&(e={});var n,a,i,o=Object.keys(t);for(n=0;n<o.length;n++)i=t[a=o[n]],"_"!==a.charAt(0)&&"function"!=typeof i&&("module"===a?r[a]=i:Array.isArray(i)?r[a]="colorscale"===a?i.slice():i.slice(0,3):l.isTypedArray(i)?r[a]=i.subarray(0,3):r[a]=i&&"object"==typeof i?l.minExtend(t[a],e[a]):i);for(o=Object.keys(e),n=0;n<o.length;n++)"object"==typeof(i=e[a=o[n]])&&a in r&&"object"==typeof r[a]||(r[a]=i);return r},l.titleCase=function(t){return t.charAt(0).toUpperCase()+t.substr(1)},l.containsAny=function(t,e){for(var r=0;r<e.length;r++)if(-1!==t.indexOf(e[r]))return!0;return!1},l.isIE=function(){return"undefined"!=typeof window.navigator.msSaveBlob};var M=/MSIE [1-9]\./;l.isIE9orBelow=function(){return l.isIE()&&M.test(window.navigator.userAgent)};var A=/Version\/[\d\.]+.*Safari/;l.isSafari=function(){return A.test(window.navigator.userAgent)},l.isD3Selection=function(t){return t&&"function"==typeof t.classed},l.ensureSingle=function(t,e,r,n){var a=t.select(e+(r?"."+r:""));if(a.size())return a;var i=t.append(e);return r&&i.classed(r,!0),n&&i.call(n),i},l.ensureSingleById=function(t,e,r,n){var a=t.select(e+"#"+r);if(a.size())return a;var i=t.append(e).attr("id",r);return n&&i.call(n),i},l.objectFromPath=function(t,e){for(var r,n=t.split("."),a=r={},i=0;i<n.length;i++){var o=n[i],s=null,l=n[i].match(/(.*)\[([0-9]+)\]/);l?(o=l[1],s=l[2],r=r[o]=[],i===n.length-1?r[s]=e:r[s]={},r=r[s]):(i===n.length-1?r[o]=e:r[o]={},r=r[o])}return a};var S=/^([^\[\.]+)\.(.+)?/,E=/^([^\.]+)\[([0-9]+)\](\.)?(.+)?/;l.expandObjectPaths=function(t){var e,r,n,a,i,o,s;if("object"==typeof t&&!Array.isArray(t))for(r in t)t.hasOwnProperty(r)&&((e=r.match(S))?(a=t[r],n=e[1],delete t[r],t[n]=l.extendDeepNoArrays(t[n]||{},l.objectFromPath(r,l.expandObjectPaths(a))[n])):(e=r.match(E))?(a=t[r],n=e[1],i=parseInt(e[2]),delete t[r],t[n]=t[n]||[],"."===e[3]?(s=e[4],o=t[n][i]=t[n][i]||{},l.extendDeepNoArrays(o,l.objectFromPath(s,l.expandObjectPaths(a)))):t[n][i]=l.expandObjectPaths(a)):t[r]=l.expandObjectPaths(t[r]));return t},l.numSeparate=function(t,e,r){if(r||(r=!1),"string"!=typeof e||0===e.length)throw new Error("Separator string required for formatting!");"number"==typeof t&&(t=String(t));var n=/(\d+)(\d{3})/,a=e.charAt(0),i=e.charAt(1),o=t.split("."),s=o[0],l=o.length>1?a+o[1]:"";if(i&&(o.length>1||s.length>4||r))for(;n.test(s);)s=s.replace(n,"$1"+i+"$2");return s+l},l.TEMPLATE_STRING_REGEX=/%{([^\s%{}:]*)([:|\|][^}]*)?}/g;var L=/^\w*$/;l.templateString=function(t,e){var r={};return t.replace(l.TEMPLATE_STRING_REGEX,function(t,n){var a;return L.test(n)?a=e[n]:(r[n]=r[n]||l.nestedProperty(e,n).get,a=r[n]()),l.isValidTextValue(a)?a:""})};var C={max:10,count:0,name:"hovertemplate"};l.hovertemplateString=function(){return z.apply(C,arguments)};var P={max:10,count:0,name:"texttemplate"};l.texttemplateString=function(){return z.apply(P,arguments)};var O=/^[:|\|]/;function z(t,e,r){var a=this,i=arguments;e||(e={});var o={};return t.replace(l.TEMPLATE_STRING_REGEX,function(t,s,c){var u,h,f,p;for(f=3;f<i.length;f++)if(u=i[f]){if(u.hasOwnProperty(s)){h=u[s];break}if(L.test(s)||(h=o[s]||l.nestedProperty(u,s).get())&&(o[s]=h),void 0!==h)break}if(void 0===h&&a)return a.count<a.max&&(l.warn("Variable '"+s+"' in "+a.name+" could not be found!"),h=t),a.count===a.max&&l.warn("Too many "+a.name+" warnings - additional warnings will be suppressed"),a.count++,t;if(c){if(":"===c[0]&&(h=(p=r?r.numberFormat:n.format)(c.replace(O,""))(h)),"|"===c[0]){p=r?r.timeFormat.utc:n.time.format.utc;var d=l.dateTime2ms(h);h=l.formatDate(d,c.replace(O,""),!1,p)}}else e.hasOwnProperty(s+"Label")&&(h=e[s+"Label"]);return h})}l.subplotSort=function(t,e){for(var r=Math.min(t.length,e.length)+1,n=0,a=0,i=0;i<r;i++){var o=t.charCodeAt(i)||0,s=e.charCodeAt(i)||0,l=o>=48&&o<=57,c=s>=48&&s<=57;if(l&&(n=10*n+o-48),c&&(a=10*a+s-48),!l||!c){if(n!==a)return n-a;if(o!==s)return o-s}}return a-n};var I=2e9;l.seedPseudoRandom=function(){I=2e9},l.pseudoRandom=function(){var t=I;return I=(69069*I+1)%4294967296,Math.abs(I-t)<429496729?l.pseudoRandom():I/4294967296},l.fillText=function(t,e,r){var n=Array.isArray(r)?function(t){r.push(t)}:function(t){r.text=t},a=l.extractOption(t,e,"htx","hovertext");if(l.isValidTextValue(a))return n(a);var i=l.extractOption(t,e,"tx","text");return l.isValidTextValue(i)?n(i):void 0},l.isValidTextValue=function(t){return t||0===t},l.formatPercent=function(t,e){e=e||0;for(var r=(Math.round(100*t*Math.pow(10,e))*Math.pow(.1,e)).toFixed(e)+"%",n=0;n<e;n++)-1!==r.indexOf(".")&&(r=(r=r.replace("0%","%")).replace(".%","%"));return r},l.isHidden=function(t){var e=window.getComputedStyle(t).display;return!e||"none"===e},l.getTextTransform=function(t){var e=t.noCenter,r=t.textX,n=t.textY,a=t.targetX,i=t.targetY,o=t.anchorX||0,s=t.anchorY||0,l=t.rotate,c=t.scale;return c?c>1&&(c=1):c=0,"translate("+(a-c*(r+o))+","+(i-c*(n+s))+")"+(c<1?"scale("+c+")":"")+(l?"rotate("+l+(e?"":" "+r+" "+n)+")":"")},l.ensureUniformFontSize=function(t,e){var r=l.extendFlat({},e);return r.size=Math.max(e.size,t._fullLayout.uniformtext.minsize||0),r}},{"../constants/numerical":693,"./anchor_utils":698,"./angles":699,"./array":700,"./clean_number":701,"./clear_responsive":703,"./coerce":704,"./dates":705,"./dom":706,"./extend":708,"./filter_unique":709,"./filter_visible":710,"./geometry2d":713,"./identity":716,"./is_plain_object":718,"./keyed_container":719,"./localize":720,"./loggers":721,"./make_trace_groups":722,"./matrix":723,"./mod":724,"./nested_property":725,"./noop":726,"./notifier":727,"./push_unique":731,"./regex":733,"./relative_attr":734,"./relink_private":735,"./search":736,"./stats":739,"./throttle":742,"./to_log_range":743,d3:165,"fast-isnumeric":228}],718:[function(t,e,r){"use strict";e.exports=function(t){return window&&window.process&&window.process.versions?"[object Object]"===Object.prototype.toString.call(t):"[object Object]"===Object.prototype.toString.call(t)&&Object.getPrototypeOf(t)===Object.prototype}},{}],719:[function(t,e,r){"use strict";var n=t("./nested_property"),a=/^\w*$/;e.exports=function(t,e,r,i){var o,s,l;r=r||"name",i=i||"value";var c={};e&&e.length?(l=n(t,e),s=l.get()):s=t,e=e||"";var u={};if(s)for(o=0;o<s.length;o++)u[s[o][r]]=o;var h=a.test(i),f={set:function(t,e){var a=null===e?4:0;if(!s){if(!l||4===a)return;s=[],l.set(s)}var o=u[t];if(void 0===o){if(4===a)return;a|=3,o=s.length,u[t]=o}else e!==(h?s[o][i]:n(s[o],i).get())&&(a|=2);var p=s[o]=s[o]||{};return p[r]=t,h?p[i]=e:n(p,i).set(e),null!==e&&(a&=-5),c[o]=c[o]|a,f},get:function(t){if(s){var e=u[t];return void 0===e?void 0:h?s[e][i]:n(s[e],i).get()}},rename:function(t,e){var n=u[t];return void 0===n?f:(c[n]=1|c[n],u[e]=n,delete u[t],s[n][r]=e,f)},remove:function(t){var e=u[t];if(void 0===e)return f;var a=s[e];if(Object.keys(a).length>2)return c[e]=2|c[e],f.set(t,null);if(h){for(o=e;o<s.length;o++)c[o]=3|c[o];for(o=e;o<s.length;o++)u[s[o][r]]--;s.splice(e,1),delete u[t]}else n(a,i).set(null),c[e]=6|c[e];return f},constructUpdate:function(){for(var t,a,o={},l=Object.keys(c),u=0;u<l.length;u++)a=l[u],t=e+"["+a+"]",s[a]?(1&c[a]&&(o[t+"."+r]=s[a][r]),2&c[a]&&(o[t+"."+i]=h?4&c[a]?null:s[a][i]:4&c[a]?null:n(s[a],i).get())):o[t]=null;return o}};return f}},{"./nested_property":725}],720:[function(t,e,r){"use strict";var n=t("../registry");e.exports=function(t,e){for(var r=t._context.locale,a=0;a<2;a++){for(var i=t._context.locales,o=0;o<2;o++){var s=(i[r]||{}).dictionary;if(s){var l=s[e];if(l)return l}i=n.localeRegistry}var c=r.split("-")[0];if(c===r)break;r=c}return e}},{"../registry":846}],721:[function(t,e,r){"use strict";var n=t("../plot_api/plot_config").dfltConfig,a=t("./notifier"),i=e.exports={};function o(t,e){if(t&&t.apply)try{return void t.apply(console,e)}catch(t){}for(var r=0;r<e.length;r++)try{t(e[r])}catch(t){console.log(e[r])}}i.log=function(){var t;if(n.logging>1){var e=["LOG:"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);o(console.trace||console.log,e)}if(n.notifyOnLogging>1){var r=[];for(t=0;t<arguments.length;t++)r.push(arguments[t]);a(r.join("<br>"),"long")}},i.warn=function(){var t;if(n.logging>0){var e=["WARN:"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);o(console.trace||console.log,e)}if(n.notifyOnLogging>0){var r=[];for(t=0;t<arguments.length;t++)r.push(arguments[t]);a(r.join("<br>"),"stick")}},i.error=function(){var t;if(n.logging>0){var e=["ERROR:"];for(t=0;t<arguments.length;t++)e.push(arguments[t]);o(console.error,e)}if(n.notifyOnLogging>0){var r=[];for(t=0;t<arguments.length;t++)r.push(arguments[t]);a(r.join("<br>"),"stick")}}},{"../plot_api/plot_config":753,"./notifier":727}],722:[function(t,e,r){"use strict";var n=t("d3");e.exports=function(t,e,r){var a=t.selectAll("g."+r.replace(/\s/g,".")).data(e,function(t){return t[0].trace.uid});a.exit().remove(),a.enter().append("g").attr("class",r),a.order();var i=t.classed("rangeplot")?"nodeRangePlot3":"node3";return a.each(function(t){t[0][i]=n.select(this)}),a}},{d3:165}],723:[function(t,e,r){"use strict";r.init2dArray=function(t,e){for(var r=new Array(t),n=0;n<t;n++)r[n]=new Array(e);return r},r.transposeRagged=function(t){var e,r,n=0,a=t.length;for(e=0;e<a;e++)n=Math.max(n,t[e].length);var i=new Array(n);for(e=0;e<n;e++)for(i[e]=new Array(a),r=0;r<a;r++)i[e][r]=t[r][e];return i},r.dot=function(t,e){if(!t.length||!e.length||t.length!==e.length)return null;var n,a,i=t.length;if(t[0].length)for(n=new Array(i),a=0;a<i;a++)n[a]=r.dot(t[a],e);else if(e[0].length){var o=r.transposeRagged(e);for(n=new Array(o.length),a=0;a<o.length;a++)n[a]=r.dot(t,o[a])}else for(n=0,a=0;a<i;a++)n+=t[a]*e[a];return n},r.translationMatrix=function(t,e){return[[1,0,t],[0,1,e],[0,0,1]]},r.rotationMatrix=function(t){var e=t*Math.PI/180;return[[Math.cos(e),-Math.sin(e),0],[Math.sin(e),Math.cos(e),0],[0,0,1]]},r.rotationXYMatrix=function(t,e,n){return r.dot(r.dot(r.translationMatrix(e,n),r.rotationMatrix(t)),r.translationMatrix(-e,-n))},r.apply2DTransform=function(t){return function(){var e=arguments;3===e.length&&(e=e[0]);var n=1===arguments.length?e[0]:[e[0],e[1]];return r.dot(t,[n[0],n[1],1]).slice(0,2)}},r.apply2DTransform2=function(t){var e=r.apply2DTransform(t);return function(t){return e(t.slice(0,2)).concat(e(t.slice(2,4)))}}},{}],724:[function(t,e,r){"use strict";e.exports={mod:function(t,e){var r=t%e;return r<0?r+e:r},modHalf:function(t,e){return Math.abs(t)>e/2?t-Math.round(t/e)*e:t}}},{}],725:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("./array").isArrayOrTypedArray;function i(t,e){return function(){var r,n,o,s,l,c=t;for(s=0;s<e.length-1;s++){if(-1===(r=e[s])){for(n=!0,o=[],l=0;l<c.length;l++)o[l]=i(c[l],e.slice(s+1))(),o[l]!==o[0]&&(n=!1);return n?o[0]:o}if("number"==typeof r&&!a(c))return;if("object"!=typeof(c=c[r])||null===c)return}if("object"==typeof c&&null!==c&&null!==(o=c[e[s]]))return o}}e.exports=function(t,e){if(n(e))e=String(e);else if("string"!=typeof e||"[-1]"===e.substr(e.length-4))throw"bad property string";for(var r,a,o,s=0,c=e.split(".");s<c.length;){if(r=String(c[s]).match(/^([^\[\]]*)((\[\-?[0-9]*\])+)$/)){if(r[1])c[s]=r[1];else{if(0!==s)throw"bad property string";c.splice(0,1)}for(a=r[2].substr(1,r[2].length-2).split("]["),o=0;o<a.length;o++)s++,c.splice(s,0,Number(a[o]))}s++}return"object"!=typeof t?function(t,e,r){return{set:function(){throw"bad container"},get:function(){},astr:e,parts:r,obj:t}}(t,e,c):{set:l(t,c,e),get:i(t,c),astr:e,parts:c,obj:t}};var o=/(^|\.)args\[/;function s(t,e){return void 0===t||null===t&&!e.match(o)}function l(t,e,r){return function(n){var i,o,l=t,f="",p=[[t,f]],d=s(n,r);for(o=0;o<e.length-1;o++){if("number"==typeof(i=e[o])&&!a(l))throw"array index but container is not an array";if(-1===i){if(d=!u(l,e.slice(o+1),n,r))break;return}if(!h(l,i,e[o+1],d))break;if("object"!=typeof(l=l[i])||null===l)throw"container is not an object";f=c(f,i),p.push([l,f])}if(d){if(o===e.length-1&&(delete l[e[o]],Array.isArray(l)&&+e[o]==l.length-1))for(;l.length&&void 0===l[l.length-1];)l.pop()}else l[e[o]]=n}}function c(t,e){var r=e;return n(e)?r="["+e+"]":t&&(r="."+e),t+r}function u(t,e,r,n){var i,o=a(r),c=!0,u=r,f=n.replace("-1",0),p=!o&&s(r,f),d=e[0];for(i=0;i<t.length;i++)f=n.replace("-1",i),o&&(p=s(u=r[i%r.length],f)),p&&(c=!1),h(t,i,d,p)&&l(t[i],e,n.replace("-1",i))(u);return c}function h(t,e,r,n){if(void 0===t[e]){if(n)return!1;t[e]="number"==typeof r?[]:{}}return!0}},{"./array":700,"fast-isnumeric":228}],726:[function(t,e,r){"use strict";e.exports=function(){}},{}],727:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=[];e.exports=function(t,e){if(-1===i.indexOf(t)){i.push(t);var r=1e3;a(e)?r=e:"long"===e&&(r=3e3);var o=n.select("body").selectAll(".plotly-notifier").data([0]);o.enter().append("div").classed("plotly-notifier",!0),o.selectAll(".notifier-note").data(i).enter().append("div").classed("notifier-note",!0).style("opacity",0).each(function(t){var a=n.select(this);a.append("button").classed("notifier-close",!0).html("&times;").on("click",function(){a.transition().call(s)});for(var i=a.append("p"),o=t.split(/<br\s*\/?>/g),l=0;l<o.length;l++)l&&i.append("br"),i.append("span").text(o[l]);"stick"===e?a.transition().duration(350).style("opacity",1):a.transition().duration(700).style("opacity",1).transition().delay(r).call(s)})}function s(t){t.duration(700).style("opacity",0).each("end",function(t){var e=i.indexOf(t);-1!==e&&i.splice(e,1),n.select(this).remove()})}}},{d3:165,"fast-isnumeric":228}],728:[function(t,e,r){"use strict";var n=t("./setcursor"),a="data-savedcursor";e.exports=function(t,e){var r=t.attr(a);if(e){if(!r){for(var i=(t.attr("class")||"").split(" "),o=0;o<i.length;o++){var s=i[o];0===s.indexOf("cursor-")&&t.attr(a,s.substr(7)).classed(s,!1)}t.attr(a)||t.attr(a,"!!")}n(t,e)}else r&&(t.attr(a,null),"!!"===r?n(t):n(t,r))}},{"./setcursor":737}],729:[function(t,e,r){"use strict";var n=t("./matrix").dot,a=t("../constants/numerical").BADNUM,i=e.exports={};i.tester=function(t){var e,r=t.slice(),n=r[0][0],i=n,o=r[0][1],s=o;for(r.push(r[0]),e=1;e<r.length;e++)n=Math.min(n,r[e][0]),i=Math.max(i,r[e][0]),o=Math.min(o,r[e][1]),s=Math.max(s,r[e][1]);var l,c=!1;5===r.length&&(r[0][0]===r[1][0]?r[2][0]===r[3][0]&&r[0][1]===r[3][1]&&r[1][1]===r[2][1]&&(c=!0,l=function(t){return t[0]===r[0][0]}):r[0][1]===r[1][1]&&r[2][1]===r[3][1]&&r[0][0]===r[3][0]&&r[1][0]===r[2][0]&&(c=!0,l=function(t){return t[1]===r[0][1]}));var u=!0,h=r[0];for(e=1;e<r.length;e++)if(h[0]!==r[e][0]||h[1]!==r[e][1]){u=!1;break}return{xmin:n,xmax:i,ymin:o,ymax:s,pts:r,contains:c?function(t,e){var r=t[0],c=t[1];return!(r===a||r<n||r>i||c===a||c<o||c>s||e&&l(t))}:function(t,e){var l=t[0],c=t[1];if(l===a||l<n||l>i||c===a||c<o||c>s)return!1;var u,h,f,p,d,g=r.length,v=r[0][0],m=r[0][1],y=0;for(u=1;u<g;u++)if(h=v,f=m,v=r[u][0],m=r[u][1],!(l<(p=Math.min(h,v))||l>Math.max(h,v)||c>Math.max(f,m)))if(c<Math.min(f,m))l!==p&&y++;else{if(c===(d=v===h?c:f+(l-h)*(m-f)/(v-h)))return 1!==u||!e;c<=d&&l!==p&&y++}return y%2==1},isRect:c,degenerate:u}},i.isSegmentBent=function(t,e,r,a){var i,o,s,l=t[e],c=[t[r][0]-l[0],t[r][1]-l[1]],u=n(c,c),h=Math.sqrt(u),f=[-c[1]/h,c[0]/h];for(i=e+1;i<r;i++)if(o=[t[i][0]-l[0],t[i][1]-l[1]],(s=n(o,c))<0||s>u||Math.abs(n(o,f))>a)return!0;return!1},i.filter=function(t,e){var r=[t[0]],n=0,a=0;function o(o){t.push(o);var s=r.length,l=n;r.splice(a+1);for(var c=l+1;c<t.length;c++)(c===t.length-1||i.isSegmentBent(t,l,c+1,e))&&(r.push(t[c]),r.length<s-2&&(n=c,a=r.length-1),l=c)}t.length>1&&o(t.pop());return{addPt:o,raw:t,filtered:r}}},{"../constants/numerical":693,"./matrix":723}],730:[function(t,e,r){(function(r){"use strict";var n=t("./show_no_webgl_msg"),a=t("regl");e.exports=function(t,e){var i=t._fullLayout,o=!0;return i._glcanvas.each(function(n){if(!n.regl&&(!n.pick||i._has("parcoords"))){try{n.regl=a({canvas:this,attributes:{antialias:!n.pick,preserveDrawingBuffer:!0},pixelRatio:t._context.plotGlPixelRatio||r.devicePixelRatio,extensions:e||[]})}catch(t){o=!1}o&&this.addEventListener("webglcontextlost",function(e){t&&t.emit&&t.emit("plotly_webglcontextlost",{event:e,layer:n.key})},!1)}}),o||n({container:i._glcontainer.node()}),o}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./show_no_webgl_msg":738,regl:500}],731:[function(t,e,r){"use strict";e.exports=function(t,e){if(e instanceof RegExp){for(var r=e.toString(),n=0;n<t.length;n++)if(t[n]instanceof RegExp&&t[n].toString()===r)return t;t.push(e)}else!e&&0!==e||-1!==t.indexOf(e)||t.push(e);return t}},{}],732:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../plot_api/plot_config").dfltConfig;var i={add:function(t,e,r,n,i){var o,s;t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},s=t.undoQueue.index,t.autoplay?t.undoQueue.inSequence||(t.autoplay=!1):(!t.undoQueue.sequence||t.undoQueue.beginSequence?(o={undo:{calls:[],args:[]},redo:{calls:[],args:[]}},t.undoQueue.queue.splice(s,t.undoQueue.queue.length-s,o),t.undoQueue.index+=1):o=t.undoQueue.queue[s-1],t.undoQueue.beginSequence=!1,o&&(o.undo.calls.unshift(e),o.undo.args.unshift(r),o.redo.calls.push(n),o.redo.args.push(i)),t.undoQueue.queue.length>a.queueLength&&(t.undoQueue.queue.shift(),t.undoQueue.index--))},startSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!0,t.undoQueue.beginSequence=!0},stopSequence:function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!1,t.undoQueue.beginSequence=!1},undo:function(t){var e,r;if(t.framework&&t.framework.isPolar)t.framework.undo();else if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index<=0)){for(t.undoQueue.index--,e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r<e.undo.calls.length;r++)i.plotDo(t,e.undo.calls[r],e.undo.args[r]);t.undoQueue.inSequence=!1,t.autoplay=!1}},redo:function(t){var e,r;if(t.framework&&t.framework.isPolar)t.framework.redo();else if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index>=t.undoQueue.queue.length)){for(e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r<e.redo.calls.length;r++)i.plotDo(t,e.redo.calls[r],e.redo.args[r]);t.undoQueue.inSequence=!1,t.autoplay=!1,t.undoQueue.index++}}};i.plotDo=function(t,e,r){t.autoplay=!0,r=function(t,e){for(var r,a=[],i=0;i<e.length;i++)r=e[i],a[i]=r===t?r:"object"==typeof r?Array.isArray(r)?n.extendDeep([],r):n.extendDeepAll({},r):r;return a}(t,r),e.apply(null,r)},e.exports=i},{"../lib":717,"../plot_api/plot_config":753}],733:[function(t,e,r){"use strict";r.counter=function(t,e,r,n){var a=(e||"")+(r?"":"$"),i=!1===n?"":"^";return"xy"===t?new RegExp(i+"x([2-9]|[1-9][0-9]+)?y([2-9]|[1-9][0-9]+)?"+a):new RegExp(i+t+"([2-9]|[1-9][0-9]+)?"+a)}},{}],734:[function(t,e,r){"use strict";var n=/^(.*)(\.[^\.\[\]]+|\[\d\])$/,a=/^[^\.\[\]]+$/;e.exports=function(t,e){for(;e;){var r=t.match(n);if(r)t=r[1];else{if(!t.match(a))throw new Error("bad relativeAttr call:"+[t,e]);t=""}if("^"!==e.charAt(0))break;e=e.slice(1)}return t&&"["!==e.charAt(0)?t+"."+e:t+e}},{}],735:[function(t,e,r){"use strict";var n=t("./array").isArrayOrTypedArray,a=t("./is_plain_object");e.exports=function t(e,r){for(var i in r){var o=r[i],s=e[i];if(s!==o)if("_"===i.charAt(0)||"function"==typeof o){if(i in e)continue;e[i]=o}else if(n(o)&&n(s)&&a(o[0])){if("customdata"===i||"ids"===i)continue;for(var l=Math.min(o.length,s.length),c=0;c<l;c++)s[c]!==o[c]&&a(o[c])&&a(s[c])&&t(s[c],o[c])}else a(o)&&a(s)&&(t(s,o),Object.keys(s).length||delete e[i])}}},{"./array":700,"./is_plain_object":718}],736:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("./loggers"),i=t("./identity");function o(t,e){return t<e}function s(t,e){return t<=e}function l(t,e){return t>e}function c(t,e){return t>=e}r.findBin=function(t,e,r){if(n(e.start))return r?Math.ceil((t-e.start)/e.size-1e-9)-1:Math.floor((t-e.start)/e.size+1e-9);var i,u,h=0,f=e.length,p=0,d=f>1?(e[f-1]-e[0])/(f-1):1;for(u=d>=0?r?o:s:r?c:l,t+=1e-9*d*(r?-1:1)*(d>=0?1:-1);h<f&&p++<100;)u(e[i=Math.floor((h+f)/2)],t)?h=i+1:f=i;return p>90&&a.log("Long binary search..."),h-1},r.sorterAsc=function(t,e){return t-e},r.sorterDes=function(t,e){return e-t},r.distinctVals=function(t){var e=t.slice();e.sort(r.sorterAsc);for(var n=e.length-1,a=e[n]-e[0]||1,i=a/(n||1)/1e4,o=[e[0]],s=0;s<n;s++)e[s+1]>e[s]+i&&(a=Math.min(a,e[s+1]-e[s]),o.push(e[s+1]));return{vals:o,minDiff:a}},r.roundUp=function(t,e,r){for(var n,a=0,i=e.length-1,o=0,s=r?0:1,l=r?1:0,c=r?Math.ceil:Math.floor;a<i&&o++<100;)e[n=c((a+i)/2)]<=t?a=n+s:i=n-l;return e[a]},r.sort=function(t,e){for(var r=0,n=0,a=1;a<t.length;a++){var i=e(t[a],t[a-1]);if(i<0?r=1:i>0&&(n=1),r&&n)return t.sort(e)}return n?t:t.reverse()},r.findIndexOfMin=function(t,e){e=e||i;for(var r,n=1/0,a=0;a<t.length;a++){var o=e(t[a]);o<n&&(n=o,r=a)}return r}},{"./identity":716,"./loggers":721,"fast-isnumeric":228}],737:[function(t,e,r){"use strict";e.exports=function(t,e){(t.attr("class")||"").split(" ").forEach(function(e){0===e.indexOf("cursor-")&&t.classed(e,!1)}),e&&t.classed("cursor-"+e,!0)}},{}],738:[function(t,e,r){"use strict";var n=t("../components/color"),a=function(){};e.exports=function(t){for(var e in t)"function"==typeof t[e]&&(t[e]=a);t.destroy=function(){t.container.parentNode.removeChild(t.container)};var r=document.createElement("div");r.className="no-webgl",r.style.cursor="pointer",r.style.fontSize="24px",r.style.color=n.defaults[0],r.style.position="absolute",r.style.left=r.style.top="0px",r.style.width=r.style.height="100%",r.style["background-color"]=n.lightLine,r.style["z-index"]=30;var i=document.createElement("p");return i.textContent="WebGL is not supported by your browser - visit https://get.webgl.org for more info",i.style.position="relative",i.style.top="50%",i.style.left="50%",i.style.height="30%",i.style.width="50%",i.style.margin="-15% 0 0 -25%",r.appendChild(i),t.container.appendChild(r),t.container.style.background="#FFFFFF",t.container.onclick=function(){window.open("https://get.webgl.org")},!1}},{"../components/color":591}],739:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("./array").isArrayOrTypedArray;r.aggNums=function(t,e,i,o){var s,l;if((!o||o>i.length)&&(o=i.length),n(e)||(e=!1),a(i[0])){for(l=new Array(o),s=0;s<o;s++)l[s]=r.aggNums(t,e,i[s]);i=l}for(s=0;s<o;s++)n(e)?n(i[s])&&(e=t(+e,+i[s])):e=i[s];return e},r.len=function(t){return r.aggNums(function(t){return t+1},0,t)},r.mean=function(t,e){return e||(e=r.len(t)),r.aggNums(function(t,e){return t+e},0,t)/e},r.midRange=function(t){if(void 0!==t&&0!==t.length)return(r.aggNums(Math.max,null,t)+r.aggNums(Math.min,null,t))/2},r.variance=function(t,e,a){return e||(e=r.len(t)),n(a)||(a=r.mean(t,e)),r.aggNums(function(t,e){return t+Math.pow(e-a,2)},0,t)/e},r.stdev=function(t,e,n){return Math.sqrt(r.variance(t,e,n))},r.median=function(t){var e=t.slice().sort();return r.interp(e,.5)},r.interp=function(t,e){if(!n(e))throw"n should be a finite number";if((e=e*t.length-.5)<0)return t[0];if(e>t.length-1)return t[t.length-1];var r=e%1;return r*t[Math.ceil(e)]+(1-r)*t[Math.floor(e)]}},{"./array":700,"fast-isnumeric":228}],740:[function(t,e,r){"use strict";var n=t("color-normalize");e.exports=function(t){return t?n(t):[0,0,0,1]}},{"color-normalize":122}],741:[function(t,e,r){"use strict";var n=t("d3"),a=t("../lib"),i=t("../constants/xmlns_namespaces"),o=t("../constants/alignment").LINE_SPACING;function s(t,e){return t.node().getBoundingClientRect()[e]}var l=/([^$]*)([$]+[^$]*[$]+)([^$]*)/;r.convertToTspans=function(t,e,A){var S=t.text(),L=!t.attr("data-notex")&&"undefined"!=typeof MathJax&&S.match(l),C=n.select(t.node().parentNode);if(!C.empty()){var P=t.attr("class")?t.attr("class").split(" ")[0]:"text";return P+="-math",C.selectAll("svg."+P).remove(),C.selectAll("g."+P+"-group").remove(),t.style("display",null).attr({"data-unformatted":S,"data-math":"N"}),L?(e&&e._promises||[]).push(new Promise(function(e){t.style("display","none");var r=parseInt(t.node().style.fontSize,10),i={fontSize:r};!function(t,e,r){var i,o,s,l;MathJax.Hub.Queue(function(){return o=a.extendDeepAll({},MathJax.Hub.config),s=MathJax.Hub.processSectionDelay,void 0!==MathJax.Hub.processSectionDelay&&(MathJax.Hub.processSectionDelay=0),MathJax.Hub.Config({messageStyle:"none",tex2jax:{inlineMath:[["$","$"],["\\(","\\)"]]},displayAlign:"left"})},function(){if("SVG"!==(i=MathJax.Hub.config.menuSettings.renderer))return MathJax.Hub.setRenderer("SVG")},function(){var r="math-output-"+a.randstr({},64);return l=n.select("body").append("div").attr({id:r}).style({visibility:"hidden",position:"absolute"}).style({"font-size":e.fontSize+"px"}).text(t.replace(c,"\\lt ").replace(u,"\\gt ")),MathJax.Hub.Typeset(l.node())},function(){var e=n.select("body").select("#MathJax_SVG_glyphs");if(l.select(".MathJax_SVG").empty()||!l.select("svg").node())a.log("There was an error in the tex syntax.",t),r();else{var o=l.select("svg").node().getBoundingClientRect();r(l.select(".MathJax_SVG"),e,o)}if(l.remove(),"SVG"!==i)return MathJax.Hub.setRenderer(i)},function(){return void 0!==s&&(MathJax.Hub.processSectionDelay=s),MathJax.Hub.Config(o)})}(L[2],i,function(n,a,i){C.selectAll("svg."+P).remove(),C.selectAll("g."+P+"-group").remove();var o=n&&n.select("svg");if(!o||!o.node())return O(),void e();var l=C.append("g").classed(P+"-group",!0).attr({"pointer-events":"none","data-unformatted":S,"data-math":"Y"});l.node().appendChild(o.node()),a&&a.node()&&o.node().insertBefore(a.node().cloneNode(!0),o.node().firstChild),o.attr({class:P,height:i.height,preserveAspectRatio:"xMinYMin meet"}).style({overflow:"visible","pointer-events":"none"});var c=t.node().style.fill||"black",u=o.select("g");u.attr({fill:c,stroke:c});var h=s(u,"width"),f=s(u,"height"),p=+t.attr("x")-h*{start:0,middle:.5,end:1}[t.attr("text-anchor")||"start"],d=-(r||s(t,"height"))/4;"y"===P[0]?(l.attr({transform:"rotate("+[-90,+t.attr("x"),+t.attr("y")]+") translate("+[-h/2,d-f/2]+")"}),o.attr({x:+t.attr("x"),y:+t.attr("y")})):"l"===P[0]?o.attr({x:t.attr("x"),y:d-f/2}):"a"===P[0]&&0!==P.indexOf("atitle")?o.attr({x:0,y:d}):o.attr({x:p,y:+t.attr("y")+d-f/2}),A&&A.call(t,l),e(l)})})):O(),t}function O(){C.empty()||(P=t.attr("class")+"-math",C.select("svg."+P).remove()),t.text("").style("white-space","pre"),function(t,e){e=e.replace(v," ");var r,s=!1,l=[],c=-1;function u(){c++;var e=document.createElementNS(i.svg,"tspan");n.select(e).attr({class:"line",dy:c*o+"em"}),t.appendChild(e),r=e;var a=l;if(l=[{node:e}],a.length>1)for(var s=1;s<a.length;s++)A(a[s])}function A(t){var e,a=t.type,o={};if("a"===a){e="a";var s=t.target,c=t.href,u=t.popup;c&&(o={"xlink:xlink:show":"_blank"===s||"_"!==s.charAt(0)?"new":"replace",target:s,"xlink:xlink:href":c},u&&(o.onclick='window.open(this.href.baseVal,this.target.baseVal,"'+u+'");return false;'))}else e="tspan";t.style&&(o.style=t.style);var h=document.createElementNS(i.svg,e);if("sup"===a||"sub"===a){S(r,d),r.appendChild(h);var g=document.createElementNS(i.svg,"tspan");S(g,d),n.select(g).attr("dy",p[a]),o.dy=f[a],r.appendChild(h),r.appendChild(g)}else r.appendChild(h);n.select(h).attr(o),r=t.node=h,l.push(t)}function S(t,e){t.appendChild(document.createTextNode(e))}function L(t){if(1!==l.length){var n=l.pop();t!==n.type&&a.log("Start tag <"+n.type+"> doesnt match end tag <"+t+">. Pretending it did match.",e),r=l[l.length-1].node}else a.log("Ignoring unexpected end tag </"+t+">.",e)}x.test(e)?u():(r=t,l=[{node:t}]);for(var C=e.split(m),P=0;P<C.length;P++){var O=C[P],z=O.match(y),I=z&&z[2].toLowerCase(),D=h[I];if("br"===I)u();else if(void 0===D)S(r,E(O));else if(z[1])L(I);else{var R=z[4],F={type:I},B=T(R,b);if(B?(B=B.replace(M,"$1 fill:"),D&&(B+=";"+D)):D&&(B=D),B&&(F.style=B),"a"===I){s=!0;var N=T(R,_);if(N){var j=document.createElement("a");j.href=N,-1!==g.indexOf(j.protocol)&&(F.href=encodeURI(decodeURI(N)),F.target=T(R,w)||"_blank",F.popup=T(R,k))}}A(F)}}return s}(t.node(),S)&&t.style("pointer-events","all"),r.positionText(t),A&&A.call(t)}};var c=/(<|&lt;|&#60;)/g,u=/(>|&gt;|&#62;)/g;var h={sup:"font-size:70%",sub:"font-size:70%",b:"font-weight:bold",i:"font-style:italic",a:"cursor:pointer",span:"",em:"font-style:italic;font-weight:bold"},f={sub:"0.3em",sup:"-0.6em"},p={sub:"-0.21em",sup:"0.42em"},d="\u200b",g=["http:","https:","mailto:","",void 0,":"],v=r.NEWLINES=/(\r\n?|\n)/g,m=/(<[^<>]*>)/,y=/<(\/?)([^ >]*)(\s+(.*))?>/i,x=/<br(\s+.*)?>/i;r.BR_TAG_ALL=/<br(\s+.*)?>/gi;var b=/(^|[\s"'])style\s*=\s*("([^"]*);?"|'([^']*);?')/i,_=/(^|[\s"'])href\s*=\s*("([^"]*)"|'([^']*)')/i,w=/(^|[\s"'])target\s*=\s*("([^"\s]*)"|'([^'\s]*)')/i,k=/(^|[\s"'])popup\s*=\s*("([\w=,]*)"|'([\w=,]*)')/i;function T(t,e){if(!t)return null;var r=t.match(e),n=r&&(r[3]||r[4]);return n&&E(n)}var M=/(^|;)\s*color:/;r.plainText=function(t,e){for(var r=void 0!==(e=e||{}).len&&-1!==e.len?e.len:1/0,n=void 0!==e.allowedTags?e.allowedTags:["br"],a="...".length,i=t.split(m),o=[],s="",l=0,c=0;c<i.length;c++){var u=i[c],h=u.match(y),f=h&&h[2].toLowerCase();if(f)-1!==n.indexOf(f)&&(o.push(u),s=f);else{var p=u.length;if(l+p<r)o.push(u),l+=p;else if(l<r){var d=r-l;s&&("br"!==s||d<=a||p<=a)&&o.pop(),r>a?o.push(u.substr(0,d-a)+"..."):o.push(u.substr(0,d));break}s=""}}return o.join("")};var A={mu:"\u03bc",amp:"&",lt:"<",gt:">",nbsp:"\xa0",times:"\xd7",plusmn:"\xb1",deg:"\xb0"},S=/&(#\d+|#x[\da-fA-F]+|[a-z]+);/g;function E(t){return t.replace(S,function(t,e){return("#"===e.charAt(0)?function(t){if(t>1114111)return;var e=String.fromCodePoint;if(e)return e(t);var r=String.fromCharCode;return t<=65535?r(t):r(55232+(t>>10),t%1024+56320)}("x"===e.charAt(1)?parseInt(e.substr(2),16):parseInt(e.substr(1),10)):A[e])||t})}function L(t,e,r){var n,a,i,o=r.horizontalAlign,s=r.verticalAlign||"top",l=t.node().getBoundingClientRect(),c=e.node().getBoundingClientRect();return a="bottom"===s?function(){return l.bottom-n.height}:"middle"===s?function(){return l.top+(l.height-n.height)/2}:function(){return l.top},i="right"===o?function(){return l.right-n.width}:"center"===o?function(){return l.left+(l.width-n.width)/2}:function(){return l.left},function(){return n=this.node().getBoundingClientRect(),this.style({top:a()-c.top+"px",left:i()-c.left+"px","z-index":1e3}),this}}r.convertEntities=E,r.lineCount=function(t){return t.selectAll("tspan.line").size()||1},r.positionText=function(t,e,r){return t.each(function(){var t=n.select(this);function a(e,r){return void 0===r?null===(r=t.attr(e))&&(t.attr(e,0),r=0):t.attr(e,r),r}var i=a("x",e),o=a("y",r);"text"===this.nodeName&&t.selectAll("tspan.line").attr({x:i,y:o})})},r.makeEditable=function(t,e){var r=e.gd,a=e.delegate,i=n.dispatch("edit","input","cancel"),o=a||t;if(t.style({"pointer-events":a?"none":"all"}),1!==t.size())throw new Error("boo");function s(){!function(){var a=n.select(r).select(".svg-container"),o=a.append("div"),s=t.node().style,c=parseFloat(s.fontSize||12),u=e.text;void 0===u&&(u=t.attr("data-unformatted"));o.classed("plugin-editable editable",!0).style({position:"absolute","font-family":s.fontFamily||"Arial","font-size":c,color:e.fill||s.fill||"black",opacity:1,"background-color":e.background||"transparent",outline:"#ffffff33 1px solid",margin:[-c/8+1,0,0,-1].join("px ")+"px",padding:"0","box-sizing":"border-box"}).attr({contenteditable:!0}).text(u).call(L(t,a,e)).on("blur",function(){r._editing=!1,t.text(this.textContent).style({opacity:1});var e,a=n.select(this).attr("class");(e=a?"."+a.split(" ")[0]+"-math-group":"[class*=-math-group]")&&n.select(t.node().parentNode).select(e).style({opacity:0});var o=this.textContent;n.select(this).transition().duration(0).remove(),n.select(document).on("mouseup",null),i.edit.call(t,o)}).on("focus",function(){var t=this;r._editing=!0,n.select(document).on("mouseup",function(){if(n.event.target===t)return!1;document.activeElement===o.node()&&o.node().blur()})}).on("keyup",function(){27===n.event.which?(r._editing=!1,t.style({opacity:1}),n.select(this).style({opacity:0}).on("blur",function(){return!1}).transition().remove(),i.cancel.call(t,this.textContent)):(i.input.call(t,this.textContent),n.select(this).call(L(t,a,e)))}).on("keydown",function(){13===n.event.which&&this.blur()}).call(l)}(),t.style({opacity:0});var a,s=o.attr("class");(a=s?"."+s.split(" ")[0]+"-math-group":"[class*=-math-group]")&&n.select(t.node().parentNode).select(a).style({opacity:0})}function l(t){var e=t.node(),r=document.createRange();r.selectNodeContents(e);var n=window.getSelection();n.removeAllRanges(),n.addRange(r),e.focus()}return e.immediate?s():o.on("click",s),n.rebind(t,i,"on")}},{"../constants/alignment":686,"../constants/xmlns_namespaces":694,"../lib":717,d3:165}],742:[function(t,e,r){"use strict";var n={};function a(t){t&&null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}r.throttle=function(t,e,r){var i=n[t],o=Date.now();if(!i){for(var s in n)n[s].ts<o-6e4&&delete n[s];i=n[t]={ts:0,timer:null}}function l(){r(),i.ts=Date.now(),i.onDone&&(i.onDone(),i.onDone=null)}a(i),o>i.ts+e?l():i.timer=setTimeout(function(){l(),i.timer=null},e)},r.done=function(t){var e=n[t];return e&&e.timer?new Promise(function(t){var r=e.onDone;e.onDone=function(){r&&r(),t(),e.onDone=null}}):Promise.resolve()},r.clear=function(t){if(t)a(n[t]),delete n[t];else for(var e in n)r.clear(e)}},{}],743:[function(t,e,r){"use strict";var n=t("fast-isnumeric");e.exports=function(t,e){if(t>0)return Math.log(t)/Math.LN10;var r=Math.log(Math.min(e[0],e[1]))/Math.LN10;return n(r)||(r=Math.log(Math.max(e[0],e[1]))/Math.LN10-6),r}},{"fast-isnumeric":228}],744:[function(t,e,r){"use strict";var n=e.exports={},a=t("../plots/geo/constants").locationmodeToLayer,i=t("topojson-client").feature;n.getTopojsonName=function(t){return[t.scope.replace(/ /g,"-"),"_",t.resolution.toString(),"m"].join("")},n.getTopojsonPath=function(t,e){return t+e+".json"},n.getTopojsonFeatures=function(t,e){var r=a[t.locationmode],n=e.objects[r];return i(e,n).features}},{"../plots/geo/constants":793,"topojson-client":538}],745:[function(t,e,r){"use strict";e.exports={moduleType:"locale",name:"en-US",dictionary:{"Click to enter Colorscale title":"Click to enter Colorscale title"},format:{date:"%m/%d/%Y"}}},{}],746:[function(t,e,r){"use strict";e.exports={moduleType:"locale",name:"en",dictionary:{"Click to enter Colorscale title":"Click to enter Colourscale title"},format:{days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],periods:["AM","PM"],dateTime:"%a %b %e %X %Y",date:"%d/%m/%Y",time:"%H:%M:%S",decimal:".",thousands:",",grouping:[3],currency:["$",""],year:"%Y",month:"%b %Y",dayMonth:"%b %-d",dayMonthYear:"%b %-d, %Y"}}},{}],747:[function(t,e,r){"use strict";var n=t("../registry");e.exports=function(t){for(var e,r,a=n.layoutArrayContainers,i=n.layoutArrayRegexes,o=t.split("[")[0],s=0;s<i.length;s++)if((r=t.match(i[s]))&&0===r.index){e=r[0];break}if(e||(e=a[a.indexOf(o)]),!e)return!1;var l=t.substr(e.length);return l?!!(r=l.match(/^\[(0|[1-9][0-9]*)\](\.(.+))?$/))&&{array:e,index:Number(r[1]),property:r[3]||""}:{array:e,index:"",property:""}}},{"../registry":846}],748:[function(t,e,r){"use strict";var n=t("../lib"),a=n.extendFlat,i=n.isPlainObject,o={valType:"flaglist",extras:["none"],flags:["calc","clearAxisTypes","plot","style","markerSize","colorbars"]},s={valType:"flaglist",extras:["none"],flags:["calc","plot","legend","ticks","axrange","layoutstyle","modebar","camera","arraydraw","colorbars"]},l=o.flags.slice().concat(["fullReplot"]),c=s.flags.slice().concat("layoutReplot");function u(t){for(var e={},r=0;r<t.length;r++)e[t[r]]=!1;return e}function h(t,e,r){var n=a({},t);for(var o in n){var s=n[o];i(s)&&(n[o]=f(s,e,r,o))}return"from-root"===r&&(n.editType=e),n}function f(t,e,r,n){if(t.valType){var i=a({},t);if(i.editType=e,Array.isArray(t.items)){i.items=new Array(t.items.length);for(var o=0;o<t.items.length;o++)i.items[o]=f(t.items[o],e,"from-root")}return i}return h(t,e,"_"===n.charAt(0)?"nested":"from-root")}e.exports={traces:o,layout:s,traceFlags:function(){return u(l)},layoutFlags:function(){return u(c)},update:function(t,e){var r=e.editType;if(r&&"none"!==r)for(var n=r.split("+"),a=0;a<n.length;a++)t[n[a]]=!0},overrideAll:h}},{"../lib":717}],749:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("gl-mat4/fromQuat"),i=t("../registry"),o=t("../lib"),s=t("../plots/plots"),l=t("../plots/cartesian/axis_ids"),c=t("../components/color"),u=l.cleanId,h=l.getFromTrace,f=i.traceIs;function p(t,e){var r=t[e],n=e.charAt(0);r&&"paper"!==r&&(t[e]=u(r,n))}function d(t){function e(e,r){var n=t[e],a=t.title&&t.title[r];n&&!a&&(t.title||(t.title={}),t.title[r]=t[e],delete t[e])}t&&("string"!=typeof t.title&&"number"!=typeof t.title||(t.title={text:t.title}),e("titlefont","font"),e("titleposition","position"),e("titleside","side"),e("titleoffset","offset"))}function g(t){if(!o.isPlainObject(t))return!1;var e=t.name;return delete t.name,delete t.showlegend,("string"==typeof e||"number"==typeof e)&&String(e)}function v(t,e,r,n){if(r&&!n)return t;if(n&&!r)return e;if(!t.trim())return e;if(!e.trim())return t;var a,i=Math.min(t.length,e.length);for(a=0;a<i&&t.charAt(a)===e.charAt(a);a++);return t.substr(0,a).trim()}function m(t){var e="middle",r="center";return"string"==typeof t&&(-1!==t.indexOf("top")?e="top":-1!==t.indexOf("bottom")&&(e="bottom"),-1!==t.indexOf("left")?r="left":-1!==t.indexOf("right")&&(r="right")),e+" "+r}function y(t,e){return e in t&&"object"==typeof t[e]&&0===Object.keys(t[e]).length}r.clearPromiseQueue=function(t){Array.isArray(t._promises)&&t._promises.length>0&&o.log("Clearing previous rejected promises from queue."),t._promises=[]},r.cleanLayout=function(t){var e,n;t||(t={}),t.xaxis1&&(t.xaxis||(t.xaxis=t.xaxis1),delete t.xaxis1),t.yaxis1&&(t.yaxis||(t.yaxis=t.yaxis1),delete t.yaxis1),t.scene1&&(t.scene||(t.scene=t.scene1),delete t.scene1);var i=(s.subplotsRegistry.cartesian||{}).attrRegex,l=(s.subplotsRegistry.polar||{}).attrRegex,h=(s.subplotsRegistry.ternary||{}).attrRegex,f=(s.subplotsRegistry.gl3d||{}).attrRegex,g=Object.keys(t);for(e=0;e<g.length;e++){var v=g[e];if(i&&i.test(v)){var m=t[v];m.anchor&&"free"!==m.anchor&&(m.anchor=u(m.anchor)),m.overlaying&&(m.overlaying=u(m.overlaying)),m.type||(m.isdate?m.type="date":m.islog?m.type="log":!1===m.isdate&&!1===m.islog&&(m.type="linear")),"withzero"!==m.autorange&&"tozero"!==m.autorange||(m.autorange=!0,m.rangemode="tozero"),delete m.islog,delete m.isdate,delete m.categories,y(m,"domain")&&delete m.domain,void 0!==m.autotick&&(void 0===m.tickmode&&(m.tickmode=m.autotick?"auto":"linear"),delete m.autotick),d(m)}else if(l&&l.test(v)){d(t[v].radialaxis)}else if(h&&h.test(v)){var x=t[v];d(x.aaxis),d(x.baxis),d(x.caxis)}else if(f&&f.test(v)){var b=t[v],_=b.cameraposition;if(Array.isArray(_)&&4===_[0].length){var w=_[0],k=_[1],T=_[2],M=a([],w),A=[];for(n=0;n<3;++n)A[n]=k[n]+T*M[2+4*n];b.camera={eye:{x:A[0],y:A[1],z:A[2]},center:{x:k[0],y:k[1],z:k[2]},up:{x:0,y:0,z:1}},delete b.cameraposition}d(b.xaxis),d(b.yaxis),d(b.zaxis)}}var S=Array.isArray(t.annotations)?t.annotations.length:0;for(e=0;e<S;e++){var E=t.annotations[e];o.isPlainObject(E)&&(E.ref&&("paper"===E.ref?(E.xref="paper",E.yref="paper"):"data"===E.ref&&(E.xref="x",E.yref="y"),delete E.ref),p(E,"xref"),p(E,"yref"))}var L=Array.isArray(t.shapes)?t.shapes.length:0;for(e=0;e<L;e++){var C=t.shapes[e];o.isPlainObject(C)&&(p(C,"xref"),p(C,"yref"))}var P=t.legend;return P&&(P.x>3?(P.x=1.02,P.xanchor="left"):P.x<-2&&(P.x=-.02,P.xanchor="right"),P.y>3?(P.y=1.02,P.yanchor="bottom"):P.y<-2&&(P.y=-.02,P.yanchor="top")),d(t),"rotate"===t.dragmode&&(t.dragmode="orbit"),c.clean(t),t.template&&t.template.layout&&r.cleanLayout(t.template.layout),t},r.cleanData=function(t){for(var e=0;e<t.length;e++){var n,a=t[e];if("histogramy"===a.type&&"xbins"in a&&!("ybins"in a)&&(a.ybins=a.xbins,delete a.xbins),a.error_y&&"opacity"in a.error_y){var l=c.defaults,h=a.error_y.color||(f(a,"bar")?c.defaultLine:l[e%l.length]);a.error_y.color=c.addOpacity(c.rgb(h),c.opacity(h)*a.error_y.opacity),delete a.error_y.opacity}if("bardir"in a&&("h"!==a.bardir||!f(a,"bar")&&"histogram"!==a.type.substr(0,9)||(a.orientation="h",r.swapXYData(a)),delete a.bardir),"histogramy"===a.type&&r.swapXYData(a),"histogramx"!==a.type&&"histogramy"!==a.type||(a.type="histogram"),"scl"in a&&!("colorscale"in a)&&(a.colorscale=a.scl,delete a.scl),"reversescl"in a&&!("reversescale"in a)&&(a.reversescale=a.reversescl,delete a.reversescl),a.xaxis&&(a.xaxis=u(a.xaxis,"x")),a.yaxis&&(a.yaxis=u(a.yaxis,"y")),f(a,"gl3d")&&a.scene&&(a.scene=s.subplotsRegistry.gl3d.cleanId(a.scene)),!f(a,"pie-like")&&!f(a,"bar-like"))if(Array.isArray(a.textposition))for(n=0;n<a.textposition.length;n++)a.textposition[n]=m(a.textposition[n]);else a.textposition&&(a.textposition=m(a.textposition));var p=i.getModule(a);if(p&&p.colorbar){var x=p.colorbar.container,b=x?a[x]:a;b&&b.colorscale&&("YIGnBu"===b.colorscale&&(b.colorscale="YlGnBu"),"YIOrRd"===b.colorscale&&(b.colorscale="YlOrRd"))}if("surface"===a.type&&o.isPlainObject(a.contours)){var _=["x","y","z"];for(n=0;n<_.length;n++){var w=a.contours[_[n]];o.isPlainObject(w)&&(w.highlightColor&&(w.highlightcolor=w.highlightColor,delete w.highlightColor),w.highlightWidth&&(w.highlightwidth=w.highlightWidth,delete w.highlightWidth))}}if("candlestick"===a.type||"ohlc"===a.type){var k=!1!==(a.increasing||{}).showlegend,T=!1!==(a.decreasing||{}).showlegend,M=g(a.increasing),A=g(a.decreasing);if(!1!==M&&!1!==A){var S=v(M,A,k,T);S&&(a.name=S)}else!M&&!A||a.name||(a.name=M||A)}if(Array.isArray(a.transforms)){var E=a.transforms;for(n=0;n<E.length;n++){var L=E[n];if(o.isPlainObject(L))switch(L.type){case"filter":L.filtersrc&&(L.target=L.filtersrc,delete L.filtersrc),L.calendar&&(L.valuecalendar||(L.valuecalendar=L.calendar),delete L.calendar);break;case"groupby":if(L.styles=L.styles||L.style,L.styles&&!Array.isArray(L.styles)){var C=L.styles,P=Object.keys(C);L.styles=[];for(var O=0;O<P.length;O++)L.styles.push({target:P[O],value:C[P[O]]})}}}}y(a,"line")&&delete a.line,"marker"in a&&(y(a.marker,"line")&&delete a.marker.line,y(a,"marker")&&delete a.marker),c.clean(a),a.autobinx&&(delete a.autobinx,delete a.xbins),a.autobiny&&(delete a.autobiny,delete a.ybins),d(a),a.colorbar&&d(a.colorbar),a.marker&&a.marker.colorbar&&d(a.marker.colorbar),a.line&&a.line.colorbar&&d(a.line.colorbar),a.aaxis&&d(a.aaxis),a.baxis&&d(a.baxis)}},r.swapXYData=function(t){var e;if(o.swapAttrs(t,["?","?0","d?","?bins","nbins?","autobin?","?src","error_?"]),Array.isArray(t.z)&&Array.isArray(t.z[0])&&(t.transpose?delete t.transpose:t.transpose=!0),t.error_x&&t.error_y){var r=t.error_y,n="copy_ystyle"in r?r.copy_ystyle:!(r.color||r.thickness||r.width);o.swapAttrs(t,["error_?.copy_ystyle"]),n&&o.swapAttrs(t,["error_?.color","error_?.thickness","error_?.width"])}if("string"==typeof t.hoverinfo){var a=t.hoverinfo.split("+");for(e=0;e<a.length;e++)"x"===a[e]?a[e]="y":"y"===a[e]&&(a[e]="x");t.hoverinfo=a.join("+")}},r.coerceTraceIndices=function(t,e){if(n(e))return[e];if(!Array.isArray(e)||!e.length)return t.data.map(function(t,e){return e});if(Array.isArray(e)){for(var r=[],a=0;a<e.length;a++)o.isIndex(e[a],t.data.length)?r.push(e[a]):o.warn("trace index (",e[a],") is not a number or is out of bounds");return r}return e},r.manageArrayContainers=function(t,e,r){var a=t.obj,i=t.parts,s=i.length,l=i[s-1],c=n(l);if(c&&null===e){var u=i.slice(0,s-1).join(".");o.nestedProperty(a,u).get().splice(l,1)}else c&&void 0===t.get()?(void 0===t.get()&&(r[t.astr]=null),t.set(e)):t.set(e)};var x=/(\.[^\[\]\.]+|\[[^\[\]\.]+\])$/;function b(t){var e=t.search(x);if(e>0)return t.substr(0,e)}r.hasParent=function(t,e){for(var r=b(e);r;){if(r in t)return!0;r=b(r)}return!1};var _=["x","y","z"];r.clearAxisTypes=function(t,e,r){for(var n=0;n<e.length;n++)for(var a=t._fullData[n],i=0;i<3;i++){var s=h(t,a,_[i]);if(s&&"log"!==s.type){var l=s._name,c=s._id.substr(1);if("scene"===c.substr(0,5)){if(void 0!==r[c])continue;l=c+"."+l}var u=l+".type";void 0===r[l]&&void 0===r[u]&&o.nestedProperty(t.layout,u).set(null)}}}},{"../components/color":591,"../lib":717,"../plots/cartesian/axis_ids":768,"../plots/plots":826,"../registry":846,"fast-isnumeric":228,"gl-mat4/fromQuat":265}],750:[function(t,e,r){"use strict";var n=t("./plot_api");r.plot=n.plot,r.newPlot=n.newPlot,r.restyle=n.restyle,r.relayout=n.relayout,r.redraw=n.redraw,r.update=n.update,r._guiRestyle=n._guiRestyle,r._guiRelayout=n._guiRelayout,r._guiUpdate=n._guiUpdate,r._storeDirectGUIEdit=n._storeDirectGUIEdit,r.react=n.react,r.extendTraces=n.extendTraces,r.prependTraces=n.prependTraces,r.addTraces=n.addTraces,r.deleteTraces=n.deleteTraces,r.moveTraces=n.moveTraces,r.purge=n.purge,r.addFrames=n.addFrames,r.deleteFrames=n.deleteFrames,r.animate=n.animate,r.setPlotConfig=n.setPlotConfig,r.toImage=t("./to_image"),r.validate=t("./validate"),r.downloadImage=t("../snapshot/download");var a=t("./template_api");r.makeTemplate=a.makeTemplate,r.validateTemplate=a.validateTemplate},{"../snapshot/download":848,"./plot_api":752,"./template_api":757,"./to_image":758,"./validate":759}],751:[function(t,e,r){"use strict";var n=t("../lib/is_plain_object"),a=t("../lib/noop"),i=t("../lib/loggers"),o=t("../lib/search").sorterAsc,s=t("../registry");r.containerArrayMatch=t("./container_array_match");var l=r.isAddVal=function(t){return"add"===t||n(t)},c=r.isRemoveVal=function(t){return null===t||"remove"===t};r.applyContainerArrayChanges=function(t,e,r,n,u){var h=e.astr,f=s.getComponentMethod(h,"supplyLayoutDefaults"),p=s.getComponentMethod(h,"draw"),d=s.getComponentMethod(h,"drawOne"),g=n.replot||n.recalc||f===a||p===a,v=t.layout,m=t._fullLayout;if(r[""]){Object.keys(r).length>1&&i.warn("Full array edits are incompatible with other edits",h);var y=r[""][""];if(c(y))e.set(null);else{if(!Array.isArray(y))return i.warn("Unrecognized full array edit value",h,y),!0;e.set(y)}return!g&&(f(v,m),p(t),!0)}var x,b,_,w,k,T,M,A,S=Object.keys(r).map(Number).sort(o),E=e.get(),L=E||[],C=u(m,h).get(),P=[],O=-1,z=L.length;for(x=0;x<S.length;x++)if(w=r[_=S[x]],k=Object.keys(w),T=w[""],M=l(T),_<0||_>L.length-(M?0:1))i.warn("index out of range",h,_);else if(void 0!==T)k.length>1&&i.warn("Insertion & removal are incompatible with edits to the same index.",h,_),c(T)?P.push(_):M?("add"===T&&(T={}),L.splice(_,0,T),C&&C.splice(_,0,{})):i.warn("Unrecognized full object edit value",h,_,T),-1===O&&(O=_);else for(b=0;b<k.length;b++)A=h+"["+_+"].",u(L[_],k[b],A).set(w[k[b]]);for(x=P.length-1;x>=0;x--)L.splice(P[x],1),C&&C.splice(P[x],1);if(L.length?E||e.set(L):e.set(null),g)return!1;if(f(v,m),d!==a){var I;if(-1===O)I=S;else{for(z=Math.max(L.length,z),I=[],x=0;x<S.length&&!((_=S[x])>=O);x++)I.push(_);for(x=O;x<z;x++)I.push(x)}for(x=0;x<I.length;x++)d(t,I[x])}else p(t);return!0}},{"../lib/is_plain_object":718,"../lib/loggers":721,"../lib/noop":726,"../lib/search":736,"../registry":846,"./container_array_match":747}],752:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("has-hover"),o=t("../lib"),s=o.nestedProperty,l=t("../lib/events"),c=t("../lib/queue"),u=t("../registry"),h=t("./plot_schema"),f=t("../plots/plots"),p=t("../plots/polar/legacy"),d=t("../plots/cartesian/axes"),g=t("../components/drawing"),v=t("../components/color"),m=t("../plots/cartesian/graph_interact").initInteractions,y=t("../constants/xmlns_namespaces"),x=t("../lib/svg_text_utils"),b=t("../plots/cartesian/select").clearSelect,_=t("./plot_config").dfltConfig,w=t("./manage_arrays"),k=t("./helpers"),T=t("./subroutines"),M=t("./edit_types"),A=t("../plots/cartesian/constants").AX_NAME_PATTERN,S=0,E=5;function L(t){var e=t._fullLayout;e._redrawFromAutoMarginCount?e._redrawFromAutoMarginCount--:t.emit("plotly_afterplot")}function C(t,e){try{t._fullLayout._paper.style("background",e)}catch(t){o.error(t)}}function P(t,e){C(t,v.combine(e,"white"))}function O(t,e){if(!t._context){t._context=o.extendDeep({},_);var r=n.select("base");t._context._baseUrl=r.size()&&r.attr("href")?window.location.href.split("#")[0]:""}var a,s,l,c=t._context;if(e){for(s=Object.keys(e),a=0;a<s.length;a++)"editable"!==(l=s[a])&&"edits"!==l&&l in c&&("setBackground"===l&&"opaque"===e[l]?c[l]=P:c[l]=e[l]);e.plot3dPixelRatio&&!c.plotGlPixelRatio&&(c.plotGlPixelRatio=c.plot3dPixelRatio);var u=e.editable;if(void 0!==u)for(c.editable=u,s=Object.keys(c.edits),a=0;a<s.length;a++)c.edits[s[a]]=u;if(e.edits)for(s=Object.keys(e.edits),a=0;a<s.length;a++)(l=s[a])in c.edits&&(c.edits[l]=e.edits[l]);c._exportedPlot=e._exportedPlot}c.staticPlot&&(c.editable=!1,c.edits={},c.autosizable=!1,c.scrollZoom=!1,c.doubleClick=!1,c.showTips=!1,c.showLink=!1,c.displayModeBar=!1),"hover"!==c.displayModeBar||i||(c.displayModeBar=!0),"transparent"!==c.setBackground&&"function"==typeof c.setBackground||(c.setBackground=C),c._hasZeroHeight=c._hasZeroHeight||0===t.clientHeight,c._hasZeroWidth=c._hasZeroWidth||0===t.clientWidth;var h=c.scrollZoom,f=c._scrollZoom={};if(!0===h)f.cartesian=1,f.gl3d=1,f.geo=1,f.mapbox=1;else if("string"==typeof h){var p=h.split("+");for(a=0;a<p.length;a++)f[p[a]]=1}else!1!==h&&(f.gl3d=1,f.geo=1,f.mapbox=1)}function z(t,e){var r,n,a=e+1,i=[];for(r=0;r<t.length;r++)(n=t[r])<0?i.push(a+n):i.push(n);return i}function I(t,e,r){var n,a;for(n=0;n<e.length;n++){if((a=e[n])!==parseInt(a,10))throw new Error("all values in "+r+" must be integers");if(a>=t.data.length||a<-t.data.length)throw new Error(r+" must be valid indices for gd.data.");if(e.indexOf(a,n+1)>-1||a>=0&&e.indexOf(-t.data.length+a)>-1||a<0&&e.indexOf(t.data.length+a)>-1)throw new Error("each index in "+r+" must be unique.")}}function D(t,e,r){if(!Array.isArray(t.data))throw new Error("gd.data must be an array.");if("undefined"==typeof e)throw new Error("currentIndices is a required argument.");if(Array.isArray(e)||(e=[e]),I(t,e,"currentIndices"),"undefined"==typeof r||Array.isArray(r)||(r=[r]),"undefined"!=typeof r&&I(t,r,"newIndices"),"undefined"!=typeof r&&e.length!==r.length)throw new Error("current and new indices must be of equal length.")}function R(t,e,r,n,i){!function(t,e,r,n){var a=o.isPlainObject(n);if(!Array.isArray(t.data))throw new Error("gd.data must be an array");if(!o.isPlainObject(e))throw new Error("update must be a key:value object");if("undefined"==typeof r)throw new Error("indices must be an integer or array of integers");for(var i in I(t,r,"indices"),e){if(!Array.isArray(e[i])||e[i].length!==r.length)throw new Error("attribute "+i+" must be an array of length equal to indices array length");if(a&&(!(i in n)||!Array.isArray(n[i])||n[i].length!==e[i].length))throw new Error("when maxPoints is set as a key:value object it must contain a 1:1 corrispondence with the keys and number of traces in the update object")}}(t,e,r,n);for(var l=function(t,e,r,n){var i,l,c,u,h,f=o.isPlainObject(n),p=[];for(var d in Array.isArray(r)||(r=[r]),r=z(r,t.data.length-1),e)for(var g=0;g<r.length;g++){if(i=t.data[r[g]],l=(c=s(i,d)).get(),u=e[d][g],!o.isArrayOrTypedArray(u))throw new Error("attribute: "+d+" index: "+g+" must be an array");if(!o.isArrayOrTypedArray(l))throw new Error("cannot extend missing or non-array attribute: "+d);if(l.constructor!==u.constructor)throw new Error("cannot extend array with an array of a different type: "+d);h=f?n[d][g]:n,a(h)||(h=-1),p.push({prop:c,target:l,insert:u,maxp:Math.floor(h)})}return p}(t,e,r,n),c={},u={},h=0;h<l.length;h++){var f=l[h].prop,p=l[h].maxp,d=i(l[h].target,l[h].insert,p);f.set(d[0]),Array.isArray(c[f.astr])||(c[f.astr]=[]),c[f.astr].push(d[1]),Array.isArray(u[f.astr])||(u[f.astr]=[]),u[f.astr].push(l[h].target.length)}return{update:c,maxPoints:u}}function F(t,e){var r=new t.constructor(t.length+e.length);return r.set(t),r.set(e,t.length),r}function B(t,e,n,a){t=o.getGraphDiv(t),k.clearPromiseQueue(t);var i={};if("string"==typeof e)i[e]=n;else{if(!o.isPlainObject(e))return o.warn("Restyle fail.",e,n,a),Promise.reject();i=o.extendFlat({},e),void 0===a&&(a=n)}Object.keys(i).length&&(t.changed=!0);var s=k.coerceTraceIndices(t,a),l=U(t,i,s),u=l.flags;u.calc&&(t.calcdata=void 0),u.clearAxisTypes&&k.clearAxisTypes(t,s,{});var h=[];u.fullReplot?h.push(r.plot):(h.push(f.previousPromises),f.supplyDefaults(t),u.markerSize&&(f.doCalcdata(t),Y(h)),u.style&&h.push(T.doTraceStyle),u.colorbars&&h.push(T.doColorBars),h.push(L)),h.push(f.rehover,f.redrag),c.add(t,B,[t,l.undoit,l.traces],B,[t,l.redoit,l.traces]);var p=o.syncOrAsync(h,t);return p&&p.then||(p=Promise.resolve()),p.then(function(){return t.emit("plotly_restyle",l.eventData),t})}function N(t){return void 0===t?null:t}function j(t,e){return e?function(e,r,n){var a=s(e,r),i=a.set;return a.set=function(e){V((n||"")+r,a.get(),e,t),i(e)},a}:s}function V(t,e,r,n){if(Array.isArray(e)||Array.isArray(r))for(var a=Array.isArray(e)?e:[],i=Array.isArray(r)?r:[],s=Math.max(a.length,i.length),l=0;l<s;l++)V(t+"["+l+"]",a[l],i[l],n);else if(o.isPlainObject(e)||o.isPlainObject(r)){var c=o.isPlainObject(e)?e:{},u=o.isPlainObject(r)?r:{},h=o.extendFlat({},c,u);for(var f in h)V(t+"."+f,c[f],u[f],n)}else void 0===n[t]&&(n[t]=N(e))}function U(t,e,r){var n,a=t._fullLayout,i=t._fullData,l=t.data,c=a._guiEditing,p=j(a._preGUI,c),g=o.extendDeepAll({},e);q(e);var v,m=M.traceFlags(),y={},x={};function b(){return r.map(function(){})}function _(t){var e=d.id2name(t);-1===v.indexOf(e)&&v.push(e)}function w(t){return"LAYOUT"+t+".autorange"}function T(t){return"LAYOUT"+t+".range"}function A(t){for(var e=t;e<i.length;e++)if(i[e]._input===l[t])return i[e]}function S(n,i,o){if(Array.isArray(n))n.forEach(function(t){S(t,i,o)});else if(!(n in e||k.hasParent(e,n))){var s;if("LAYOUT"===n.substr(0,6))s=p(t.layout,n.replace("LAYOUT",""));else{var u=r[o];s=j(a._tracePreGUI[A(u)._fullInput.uid],c)(l[u],n)}n in x||(x[n]=b()),void 0===x[n][o]&&(x[n][o]=N(s.get())),void 0!==i&&s.set(i)}}function E(t){return function(e){return i[e][t]}}function L(t){return function(e,n){return!1===e?i[r[n]][t]:null}}for(var C in e){if(k.hasParent(e,C))throw new Error("cannot set "+C+" and a parent attribute simultaneously");var P,O,z,I,D,R,F=e[C];if("autobinx"!==C&&"autobiny"!==C||(C=C.charAt(C.length-1)+"bins",F=Array.isArray(F)?F.map(L(C)):!1===F?r.map(E(C)):null),y[C]=F,"LAYOUT"!==C.substr(0,6)){for(x[C]=b(),n=0;n<r.length;n++){if(P=l[r[n]],O=A(r[n]),I=(z=j(a._tracePreGUI[O._fullInput.uid],c)(P,C)).get(),void 0!==(D=Array.isArray(F)?F[n%F.length]:F)){var B=z.parts[z.parts.length-1],V=C.substr(0,C.length-B.length-1),U=V?V+".":"",H=V?s(O,V).get():O;if((R=h.getTraceValObject(O,z.parts))&&R.impliedEdits&&null!==D)for(var G in R.impliedEdits)S(o.relativeAttr(C,G),R.impliedEdits[G],n);else if("thicknessmode"!==B&&"lenmode"!==B||I===D||"fraction"!==D&&"pixels"!==D||!H){if("type"===C&&("pie"===D!=("pie"===I)||"funnelarea"===D!=("funnelarea"===I))){var Y="x",W="y";"bar"!==D&&"bar"!==I||"h"!==P.orientation||(Y="y",W="x"),o.swapAttrs(P,["?","?src"],"labels",Y),o.swapAttrs(P,["d?","?0"],"label",Y),o.swapAttrs(P,["?","?src"],"values",W),"pie"===I||"funnelarea"===I?(s(P,"marker.color").set(s(P,"marker.colors").get()),a._pielayer.selectAll("g.trace").remove()):u.traceIs(P,"cartesian")&&s(P,"marker.colors").set(s(P,"marker.color").get())}}else{var X=a._size,Z=H.orient,J="top"===Z||"bottom"===Z;if("thicknessmode"===B){var K=J?X.h:X.w;S(U+"thickness",H.thickness*("fraction"===D?1/K:K),n)}else{var Q=J?X.w:X.h;S(U+"len",H.len*("fraction"===D?1/Q:Q),n)}}x[C][n]=N(I);if(-1!==["swapxy","swapxyaxes","orientation","orientationaxes"].indexOf(C)){if("orientation"===C){z.set(D);var $=P.x&&!P.y?"h":"v";if((z.get()||$)===O.orientation)continue}else"orientationaxes"===C&&(P.orientation={v:"h",h:"v"}[O.orientation]);k.swapXYData(P),m.calc=m.clearAxisTypes=!0}else-1!==f.dataArrayContainers.indexOf(z.parts[0])?(k.manageArrayContainers(z,D,x),m.calc=!0):(R?R.arrayOk&&!u.traceIs(O,"regl")&&(o.isArrayOrTypedArray(D)||o.isArrayOrTypedArray(I))?m.calc=!0:M.update(m,R):m.calc=!0,z.set(D))}}if(-1!==["swapxyaxes","orientationaxes"].indexOf(C)&&d.swap(t,r),"orientationaxes"===C){var tt=s(t.layout,"hovermode");"x"===tt.get()?tt.set("y"):"y"===tt.get()?tt.set("x"):"x unified"===tt.get()?tt.set("y unified"):"y unified"===tt.get()&&tt.set("x unified")}if(-1!==["orientation","type"].indexOf(C)){for(v=[],n=0;n<r.length;n++){var et=l[r[n]];u.traceIs(et,"cartesian")&&(_(et.xaxis||"x"),_(et.yaxis||"y"))}S(v.map(w),!0,0),S(v.map(T),[0,1],0)}}else z=p(t.layout,C.replace("LAYOUT","")),x[C]=[N(z.get())],z.set(Array.isArray(F)?F[0]:F),m.calc=!0}return(m.calc||m.plot)&&(m.fullReplot=!0),{flags:m,undoit:x,redoit:y,traces:r,eventData:o.extendDeepNoArrays([],[g,r])}}function q(t){var e,r,n,a=o.counterRegex("axis",".title",!1,!1),i=/colorbar\.title$/,s=Object.keys(t);for(e=0;e<s.length;e++)r=s[e],n=t[r],"title"!==r&&!a.test(r)&&!i.test(r)||"string"!=typeof n&&"number"!=typeof n?r.indexOf("titlefont")>-1?l(r,r.replace("titlefont","title.font")):r.indexOf("titleposition")>-1?l(r,r.replace("titleposition","title.position")):r.indexOf("titleside")>-1?l(r,r.replace("titleside","title.side")):r.indexOf("titleoffset")>-1&&l(r,r.replace("titleoffset","title.offset")):l(r,r.replace("title","title.text"));function l(e,r){t[r]=t[e],delete t[e]}}function H(t,e,r){if(t=o.getGraphDiv(t),k.clearPromiseQueue(t),t.framework&&t.framework.isPolar)return Promise.resolve(t);var n={};if("string"==typeof e)n[e]=r;else{if(!o.isPlainObject(e))return o.warn("Relayout fail.",e,r),Promise.reject();n=o.extendFlat({},e)}Object.keys(n).length&&(t.changed=!0);var a=J(t,n),i=a.flags;i.calc&&(t.calcdata=void 0);var s=[f.previousPromises];i.layoutReplot?s.push(T.layoutReplot):Object.keys(n).length&&(G(t,i,a)||f.supplyDefaults(t),i.legend&&s.push(T.doLegend),i.layoutstyle&&s.push(T.layoutStyles),i.axrange&&Y(s,a.rangesAltered),i.ticks&&s.push(T.doTicksRelayout),i.modebar&&s.push(T.doModeBar),i.camera&&s.push(T.doCamera),i.colorbars&&s.push(T.doColorBars),s.push(L)),s.push(f.rehover,f.redrag),c.add(t,H,[t,a.undoit],H,[t,a.redoit]);var l=o.syncOrAsync(s,t);return l&&l.then||(l=Promise.resolve(t)),l.then(function(){return t.emit("plotly_relayout",a.eventData),t})}function G(t,e,r){var n=t._fullLayout;if(!e.axrange)return!1;for(var a in e)if("axrange"!==a&&e[a])return!1;for(var i in r.rangesAltered){var o=d.id2name(i),s=t.layout[o],l=n[o];if(l.autorange=s.autorange,l.range=s.range.slice(),l.cleanRange(),l._matchGroup)for(var c in l._matchGroup)if(c!==i){var u=n[d.id2name(c)];u.autorange=l.autorange,u.range=l.range.slice(),u._input.range=l.range.slice()}}return!0}function Y(t,e){var r=e?function(t){var r=[],n=!0;for(var a in e){var i=d.getFromId(t,a);if(r.push(a),i._matchGroup)for(var o in i._matchGroup)e[o]||r.push(o);i.automargin&&(n=!1)}return d.draw(t,r,{skipTitle:n})}:function(t){return d.draw(t,"redraw")};t.push(b,T.doAutoRangeAndConstraints,r,T.drawData,T.finalDraw)}var W=/^[xyz]axis[0-9]*\.range(\[[0|1]\])?$/,X=/^[xyz]axis[0-9]*\.autorange$/,Z=/^[xyz]axis[0-9]*\.domain(\[[0|1]\])?$/;function J(t,e){var r,n,a,i=t.layout,l=t._fullLayout,c=l._guiEditing,f=j(l._preGUI,c),p=Object.keys(e),g=d.list(t),v=o.extendDeepAll({},e),m={};for(q(e),p=Object.keys(e),n=0;n<p.length;n++)if(0===p[n].indexOf("allaxes")){for(a=0;a<g.length;a++){var y=g[a]._id.substr(1),x=-1!==y.indexOf("scene")?y+".":"",b=p[n].replace("allaxes",x+g[a]._name);e[b]||(e[b]=e[p[n]])}delete e[p[n]]}var _=M.layoutFlags(),T={},S={};function E(t,r){if(Array.isArray(t))t.forEach(function(t){E(t,r)});else if(!(t in e||k.hasParent(e,t))){var n=f(i,t);t in S||(S[t]=N(n.get())),void 0!==r&&n.set(r)}}var L,C={};function P(t){var e=d.name2id(t.split(".")[0]);return C[e]=1,e}for(var O in e){if(k.hasParent(e,O))throw new Error("cannot set "+O+" and a parent attribute simultaneously");for(var z=f(i,O),I=e[O],D=z.parts.length-1;D>0&&"string"!=typeof z.parts[D];)D--;var R=z.parts[D],F=z.parts[D-1]+"."+R,B=z.parts.slice(0,D).join("."),V=s(t.layout,B).get(),U=s(l,B).get(),H=z.get();if(void 0!==I){T[O]=I,S[O]="reverse"===R?I:N(H);var G=h.getLayoutValObject(l,z.parts);if(G&&G.impliedEdits&&null!==I)for(var Y in G.impliedEdits)E(o.relativeAttr(O,Y),G.impliedEdits[Y]);if(-1!==["width","height"].indexOf(O))if(I){E("autosize",null);var J="height"===O?"width":"height";E(J,l[J])}else l[O]=t._initialAutoSize[O];else if("autosize"===O)E("width",I?null:l.width),E("height",I?null:l.height);else if(F.match(W))P(F),s(l,B+"._inputRange").set(null);else if(F.match(X)){P(F),s(l,B+"._inputRange").set(null);var Q=s(l,B).get();Q._inputDomain&&(Q._input.domain=Q._inputDomain.slice())}else F.match(Z)&&s(l,B+"._inputDomain").set(null);if("type"===R){var $=V,tt="linear"===U.type&&"log"===I,et="log"===U.type&&"linear"===I;if(tt||et){if($&&$.range)if(U.autorange)tt&&($.range=$.range[1]>$.range[0]?[1,2]:[2,1]);else{var rt=$.range[0],nt=$.range[1];tt?(rt<=0&&nt<=0&&E(B+".autorange",!0),rt<=0?rt=nt/1e6:nt<=0&&(nt=rt/1e6),E(B+".range[0]",Math.log(rt)/Math.LN10),E(B+".range[1]",Math.log(nt)/Math.LN10)):(E(B+".range[0]",Math.pow(10,rt)),E(B+".range[1]",Math.pow(10,nt)))}else E(B+".autorange",!0);Array.isArray(l._subplots.polar)&&l._subplots.polar.length&&l[z.parts[0]]&&"radialaxis"===z.parts[1]&&delete l[z.parts[0]]._subplot.viewInitial["radialaxis.range"],u.getComponentMethod("annotations","convertCoords")(t,U,I,E),u.getComponentMethod("images","convertCoords")(t,U,I,E)}else E(B+".autorange",!0),E(B+".range",null);s(l,B+"._inputRange").set(null)}else if(R.match(A)){var at=s(l,O).get(),it=(I||{}).type;it&&"-"!==it||(it="linear"),u.getComponentMethod("annotations","convertCoords")(t,at,it,E),u.getComponentMethod("images","convertCoords")(t,at,it,E)}var ot=w.containerArrayMatch(O);if(ot){r=ot.array,n=ot.index;var st=ot.property,lt=G||{editType:"calc"};""!==n&&""===st&&(w.isAddVal(I)?S[O]=null:w.isRemoveVal(I)?S[O]=(s(i,r).get()||[])[n]:o.warn("unrecognized full object value",e)),M.update(_,lt),m[r]||(m[r]={});var ct=m[r][n];ct||(ct=m[r][n]={}),ct[st]=I,delete e[O]}else"reverse"===R?(V.range?V.range.reverse():(E(B+".autorange",!0),V.range=[1,0]),U.autorange?_.calc=!0:_.plot=!0):(l._has("scatter-like")&&l._has("regl")&&"dragmode"===O&&("lasso"===I||"select"===I)&&"lasso"!==H&&"select"!==H?_.plot=!0:l._has("gl2d")?_.plot=!0:G?M.update(_,G):_.calc=!0,z.set(I))}}for(r in m){w.applyContainerArrayChanges(t,f(i,r),m[r],_,f)||(_.plot=!0)}var ut=l._axisConstraintGroups||[];for(L in C)for(n=0;n<ut.length;n++){var ht=ut[n];if(ht[L])for(var ft in _.calc=!0,ht)C[ft]||(d.getFromId(t,ft)._constraintShrinkable=!0)}return(K(t)||e.height||e.width)&&(_.plot=!0),(_.plot||_.calc)&&(_.layoutReplot=!0),{flags:_,rangesAltered:C,undoit:S,redoit:T,eventData:v}}function K(t){var e=t._fullLayout,r=e.width,n=e.height;return t.layout.autosize&&f.plotAutoSize(t,t.layout,e),e.width!==r||e.height!==n}function Q(t,e,n,a){if(t=o.getGraphDiv(t),k.clearPromiseQueue(t),t.framework&&t.framework.isPolar)return Promise.resolve(t);o.isPlainObject(e)||(e={}),o.isPlainObject(n)||(n={}),Object.keys(e).length&&(t.changed=!0),Object.keys(n).length&&(t.changed=!0);var i=k.coerceTraceIndices(t,a),s=U(t,o.extendFlat({},e),i),l=s.flags,u=J(t,o.extendFlat({},n)),h=u.flags;(l.calc||h.calc)&&(t.calcdata=void 0),l.clearAxisTypes&&k.clearAxisTypes(t,i,n);var p=[];h.layoutReplot?p.push(T.layoutReplot):l.fullReplot?p.push(r.plot):(p.push(f.previousPromises),G(t,h,u)||f.supplyDefaults(t),l.style&&p.push(T.doTraceStyle),(l.colorbars||h.colorbars)&&p.push(T.doColorBars),h.legend&&p.push(T.doLegend),h.layoutstyle&&p.push(T.layoutStyles),h.axrange&&Y(p,u.rangesAltered),h.ticks&&p.push(T.doTicksRelayout),h.modebar&&p.push(T.doModeBar),h.camera&&p.push(T.doCamera),p.push(L)),p.push(f.rehover,f.redrag),c.add(t,Q,[t,s.undoit,u.undoit,s.traces],Q,[t,s.redoit,u.redoit,s.traces]);var d=o.syncOrAsync(p,t);return d&&d.then||(d=Promise.resolve(t)),d.then(function(){return t.emit("plotly_update",{data:s.eventData,layout:u.eventData}),t})}function $(t){return function(e){e._fullLayout._guiEditing=!0;var r=t.apply(null,arguments);return e._fullLayout._guiEditing=!1,r}}var tt=[{pattern:/^hiddenlabels/,attr:"legend.uirevision"},{pattern:/^((x|y)axis\d*)\.((auto)?range|title\.text)/},{pattern:/axis\d*\.showspikes$/,attr:"modebar.uirevision"},{pattern:/(hover|drag)mode$/,attr:"modebar.uirevision"},{pattern:/^(scene\d*)\.camera/},{pattern:/^(geo\d*)\.(projection|center|fitbounds)/},{pattern:/^(ternary\d*\.[abc]axis)\.(min|title\.text)$/},{pattern:/^(polar\d*\.radialaxis)\.((auto)?range|angle|title\.text)/},{pattern:/^(polar\d*\.angularaxis)\.rotation/},{pattern:/^(mapbox\d*)\.(center|zoom|bearing|pitch)/},{pattern:/^legend\.(x|y)$/,attr:"editrevision"},{pattern:/^(shapes|annotations)/,attr:"editrevision"},{pattern:/^title\.text$/,attr:"editrevision"}],et=[{pattern:/^selectedpoints$/,attr:"selectionrevision"},{pattern:/(^|value\.)visible$/,attr:"legend.uirevision"},{pattern:/^dimensions\[\d+\]\.constraintrange/},{pattern:/^node\.(x|y|groups)/},{pattern:/^level$/},{pattern:/(^|value\.)name$/},{pattern:/colorbar\.title\.text$/},{pattern:/colorbar\.(x|y)$/,attr:"editrevision"}];function rt(t,e){for(var r=0;r<e.length;r++){var n=e[r],a=t.match(n.pattern);if(a)return{head:a[1],attr:n.attr}}}function nt(t,e){var r=s(e,t).get();if(void 0!==r)return r;var n=t.split(".");for(n.pop();n.length>1;)if(n.pop(),void 0!==(r=s(e,n.join(".")+".uirevision").get()))return r;return e.uirevision}function at(t,e){for(var r=0;r<e.length;r++)if(e[r]._fullInput.uid===t)return r;return-1}function it(t,e,r){for(var n=0;n<e.length;n++)if(e[n].uid===t)return n;return!e[r]||e[r].uid?-1:r}function ot(t,e){var r=o.isPlainObject(t),n=Array.isArray(t);return r||n?(r&&o.isPlainObject(e)||n&&Array.isArray(e))&&JSON.stringify(t)===JSON.stringify(e):t===e}function st(t,e,r,n){var a,i,l,c=n.getValObject,u=n.flags,h=n.immutable,f=n.inArray,p=n.arrayIndex;function d(){var t=a.editType;f&&-1!==t.indexOf("arraydraw")?o.pushUnique(u.arrays[f],p):(M.update(u,a),"none"!==t&&u.nChanges++,n.transition&&a.anim&&u.nChangesAnim++,(W.test(l)||X.test(l))&&(u.rangesAltered[r[0]]=1),Z.test(l)&&s(e,"_inputDomain").set(null),"datarevision"===i&&(u.newDataRevision=1))}function g(t){return"data_array"===t.valType||t.arrayOk}for(i in t){if(u.calc&&!n.transition)return;var v=t[i],m=e[i],y=r.concat(i);if(l=y.join("."),"_"!==i.charAt(0)&&"function"!=typeof v&&v!==m){if(("tick0"===i||"dtick"===i)&&"geo"!==r[0]){var x=e.tickmode;if("auto"===x||"array"===x||!x)continue}if(("range"!==i||!e.autorange)&&("zmin"!==i&&"zmax"!==i||"contourcarpet"!==e.type)&&(a=c(y))&&(!a._compareAsJSON||JSON.stringify(v)!==JSON.stringify(m))){var b,_=a.valType,w=g(a),k=Array.isArray(v),T=Array.isArray(m);if(k&&T){var A="_input_"+i,S=t[A],E=e[A];if(Array.isArray(S)&&S===E)continue}if(void 0===m)w&&k?u.calc=!0:d();else if(a._isLinkedToArray){var L=[],C=!1;f||(u.arrays[i]=L);var P=Math.min(v.length,m.length),O=Math.max(v.length,m.length);if(P!==O){if("arraydraw"!==a.editType){d();continue}C=!0}for(b=0;b<P;b++)st(v[b],m[b],y.concat(b),o.extendFlat({inArray:i,arrayIndex:b},n));if(C)for(b=P;b<O;b++)L.push(b)}else!_&&o.isPlainObject(v)?st(v,m,y,n):w?k&&T?(h&&(u.calc=!0),(h||n.newDataRevision)&&d()):k!==T?u.calc=!0:d():k&&T&&v.length===m.length&&String(v)===String(m)||d()}}}for(i in e)if(!(i in t||"_"===i.charAt(0)||"function"==typeof e[i])){if(g(a=c(r.concat(i)))&&Array.isArray(e[i]))return void(u.calc=!0);d()}}function lt(t){var e=n.select(t),r=t._fullLayout;if(r._container=e.selectAll(".plot-container").data([0]),r._container.enter().insert("div",":first-child").classed("plot-container",!0).classed("plotly",!0),r._paperdiv=r._container.selectAll(".svg-container").data([0]),r._paperdiv.enter().append("div").classed("svg-container",!0).style("position","relative"),r._glcontainer=r._paperdiv.selectAll(".gl-container").data([{}]),r._glcontainer.enter().append("div").classed("gl-container",!0),r._paperdiv.selectAll(".main-svg").remove(),r._paperdiv.select(".modebar-container").remove(),r._paper=r._paperdiv.insert("svg",":first-child").classed("main-svg",!0),r._toppaper=r._paperdiv.append("svg").classed("main-svg",!0),r._modebardiv=r._paperdiv.append("div"),r._hoverpaper=r._paperdiv.append("svg").classed("main-svg",!0),!r._uid){var a={};n.selectAll("defs").each(function(){this.id&&(a[this.id.split("-")[1]]=1)}),r._uid=o.randstr(a)}r._paperdiv.selectAll(".main-svg").attr(y.svgAttrs),r._defs=r._paper.append("defs").attr("id","defs-"+r._uid),r._clips=r._defs.append("g").classed("clips",!0),r._topdefs=r._toppaper.append("defs").attr("id","topdefs-"+r._uid),r._topclips=r._topdefs.append("g").classed("clips",!0),r._bgLayer=r._paper.append("g").classed("bglayer",!0),r._draggers=r._paper.append("g").classed("draglayer",!0);var i=r._paper.append("g").classed("layer-below",!0);r._imageLowerLayer=i.append("g").classed("imagelayer",!0),r._shapeLowerLayer=i.append("g").classed("shapelayer",!0),r._cartesianlayer=r._paper.append("g").classed("cartesianlayer",!0),r._polarlayer=r._paper.append("g").classed("polarlayer",!0),r._ternarylayer=r._paper.append("g").classed("ternarylayer",!0),r._geolayer=r._paper.append("g").classed("geolayer",!0),r._funnelarealayer=r._paper.append("g").classed("funnelarealayer",!0),r._pielayer=r._paper.append("g").classed("pielayer",!0),r._treemaplayer=r._paper.append("g").classed("treemaplayer",!0),r._sunburstlayer=r._paper.append("g").classed("sunburstlayer",!0),r._indicatorlayer=r._toppaper.append("g").classed("indicatorlayer",!0),r._glimages=r._paper.append("g").classed("glimages",!0);var s=r._toppaper.append("g").classed("layer-above",!0);r._imageUpperLayer=s.append("g").classed("imagelayer",!0),r._shapeUpperLayer=s.append("g").classed("shapelayer",!0),r._infolayer=r._toppaper.append("g").classed("infolayer",!0),r._menulayer=r._toppaper.append("g").classed("menulayer",!0),r._zoomlayer=r._toppaper.append("g").classed("zoomlayer",!0),r._hoverlayer=r._hoverpaper.append("g").classed("hoverlayer",!0),r._modebardiv.classed("modebar-container",!0).style("position","absolute").style("top","0px").style("right","0px"),t.emit("plotly_framework")}r.animate=function(t,e,r){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error("This element is not a Plotly plot: "+t+". It's likely that you've failed to create a plot before animating it. For more details, see https://plotly.com/javascript/animations/");var n=t._transitionData;n._frameQueue||(n._frameQueue=[]);var a=(r=f.supplyAnimationDefaults(r)).transition,i=r.frame;function s(t){return Array.isArray(a)?t>=a.length?a[0]:a[t]:a}function l(t){return Array.isArray(i)?t>=i.length?i[0]:i[t]:i}function c(t,e){var r=0;return function(){if(t&&++r===e)return t()}}return void 0===n._frameWaitingCnt&&(n._frameWaitingCnt=0),new Promise(function(i,u){function h(){n._currentFrame&&n._currentFrame.onComplete&&n._currentFrame.onComplete();var e=n._currentFrame=n._frameQueue.shift();if(e){var r=e.name?e.name.toString():null;t._fullLayout._currentFrame=r,n._lastFrameAt=Date.now(),n._timeToNext=e.frameOpts.duration,f.transition(t,e.frame.data,e.frame.layout,k.coerceTraceIndices(t,e.frame.traces),e.frameOpts,e.transitionOpts).then(function(){e.onComplete&&e.onComplete()}),t.emit("plotly_animatingframe",{name:r,frame:e.frame,animation:{frame:e.frameOpts,transition:e.transitionOpts}})}else t.emit("plotly_animated"),window.cancelAnimationFrame(n._animationRaf),n._animationRaf=null}function p(){t.emit("plotly_animating"),n._lastFrameAt=-1/0,n._timeToNext=0,n._runningTransitions=0,n._currentFrame=null;var e=function(){n._animationRaf=window.requestAnimationFrame(e),Date.now()-n._lastFrameAt>n._timeToNext&&h()};e()}var d,g,v=0;function m(t){return Array.isArray(a)?v>=a.length?t.transitionOpts=a[v]:t.transitionOpts=a[0]:t.transitionOpts=a,v++,t}var y=[],x=null==e,b=Array.isArray(e);if(x||b||!o.isPlainObject(e)){if(x||-1!==["string","number"].indexOf(typeof e))for(d=0;d<n._frames.length;d++)(g=n._frames[d])&&(x||String(g.group)===String(e))&&y.push({type:"byname",name:String(g.name),data:m({name:g.name})});else if(b)for(d=0;d<e.length;d++){var _=e[d];-1!==["number","string"].indexOf(typeof _)?(_=String(_),y.push({type:"byname",name:_,data:m({name:_})})):o.isPlainObject(_)&&y.push({type:"object",data:m(o.extendFlat({},_))})}}else y.push({type:"object",data:m(o.extendFlat({},e))});for(d=0;d<y.length;d++)if("byname"===(g=y[d]).type&&!n._frameHash[g.data.name])return o.warn('animate failure: frame not found: "'+g.data.name+'"'),void u();-1!==["next","immediate"].indexOf(r.mode)&&function(){if(0!==n._frameQueue.length){for(;n._frameQueue.length;){var e=n._frameQueue.pop();e.onInterrupt&&e.onInterrupt()}t.emit("plotly_animationinterrupted",[])}}(),"reverse"===r.direction&&y.reverse();var w=t._fullLayout._currentFrame;if(w&&r.fromcurrent){var T=-1;for(d=0;d<y.length;d++)if("byname"===(g=y[d]).type&&g.name===w){T=d;break}if(T>0&&T<y.length-1){var M=[];for(d=0;d<y.length;d++)g=y[d],("byname"!==y[d].type||d>T)&&M.push(g);y=M}}y.length>0?function(e){if(0!==e.length){for(var a=0;a<e.length;a++){var o;o="byname"===e[a].type?f.computeFrame(t,e[a].name):e[a].data;var h=l(a),d=s(a);d.duration=Math.min(d.duration,h.duration);var g={frame:o,name:e[a].name,frameOpts:h,transitionOpts:d};a===e.length-1&&(g.onComplete=c(i,2),g.onInterrupt=u),n._frameQueue.push(g)}"immediate"===r.mode&&(n._lastFrameAt=-1/0),n._animationRaf||p()}}(y):(t.emit("plotly_animated"),i())})},r.addFrames=function(t,e,r){if(t=o.getGraphDiv(t),null==e)return Promise.resolve();if(!o.isPlotDiv(t))throw new Error("This element is not a Plotly plot: "+t+". It's likely that you've failed to create a plot before adding frames. For more details, see https://plotly.com/javascript/animations/");var n,a,i,s,l=t._transitionData._frames,u=t._transitionData._frameHash;if(!Array.isArray(e))throw new Error("addFrames failure: frameList must be an Array of frame definitions"+e);var h=l.length+2*e.length,p=[],d={};for(n=e.length-1;n>=0;n--)if(o.isPlainObject(e[n])){var g=e[n].name,v=(u[g]||d[g]||{}).name,m=e[n].name,y=u[v]||d[v];v&&m&&"number"==typeof m&&y&&S<E&&(S++,o.warn('addFrames: overwriting frame "'+(u[v]||d[v]).name+'" with a frame whose name of type "number" also equates to "'+v+'". This is valid but may potentially lead to unexpected behavior since all plotly.js frame names are stored internally as strings.'),S===E&&o.warn("addFrames: This API call has yielded too many of these warnings. For the rest of this call, further warnings about numeric frame names will be suppressed.")),d[g]={name:g},p.push({frame:f.supplyFrameDefaults(e[n]),index:r&&void 0!==r[n]&&null!==r[n]?r[n]:h+n})}p.sort(function(t,e){return t.index>e.index?-1:t.index<e.index?1:0});var x=[],b=[],_=l.length;for(n=p.length-1;n>=0;n--){if("number"==typeof(a=p[n].frame).name&&o.warn("Warning: addFrames accepts frames with numeric names, but the numbers areimplicitly cast to strings"),!a.name)for(;u[a.name="frame "+t._transitionData._counter++];);if(u[a.name]){for(i=0;i<l.length&&(l[i]||{}).name!==a.name;i++);x.push({type:"replace",index:i,value:a}),b.unshift({type:"replace",index:i,value:l[i]})}else s=Math.max(0,Math.min(p[n].index,_)),x.push({type:"insert",index:s,value:a}),b.unshift({type:"delete",index:s}),_++}var w=f.modifyFrames,k=f.modifyFrames,T=[t,b],M=[t,x];return c&&c.add(t,w,T,k,M),f.modifyFrames(t,x)},r.deleteFrames=function(t,e){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error("This element is not a Plotly plot: "+t);var r,n,a=t._transitionData._frames,i=[],s=[];if(!e)for(e=[],r=0;r<a.length;r++)e.push(r);for((e=e.slice()).sort(),r=e.length-1;r>=0;r--)n=e[r],i.push({type:"delete",index:n}),s.unshift({type:"insert",index:n,value:a[n]});var l=f.modifyFrames,u=f.modifyFrames,h=[t,s],p=[t,i];return c&&c.add(t,l,h,u,p),f.modifyFrames(t,i)},r.addTraces=function t(e,n,a){e=o.getGraphDiv(e);var i,s,l=[],u=r.deleteTraces,h=t,f=[e,l],p=[e,n];for(function(t,e,r){var n,a;if(!Array.isArray(t.data))throw new Error("gd.data must be an array.");if("undefined"==typeof e)throw new Error("traces must be defined.");for(Array.isArray(e)||(e=[e]),n=0;n<e.length;n++)if("object"!=typeof(a=e[n])||Array.isArray(a)||null===a)throw new Error("all values in traces array must be non-array objects");if("undefined"==typeof r||Array.isArray(r)||(r=[r]),"undefined"!=typeof r&&r.length!==e.length)throw new Error("if indices is specified, traces.length must equal indices.length")}(e,n,a),Array.isArray(n)||(n=[n]),n=n.map(function(t){return o.extendFlat({},t)}),k.cleanData(n),i=0;i<n.length;i++)e.data.push(n[i]);for(i=0;i<n.length;i++)l.push(-n.length+i);if("undefined"==typeof a)return s=r.redraw(e),c.add(e,u,f,h,p),s;Array.isArray(a)||(a=[a]);try{D(e,l,a)}catch(t){throw e.data.splice(e.data.length-n.length,n.length),t}return c.startSequence(e),c.add(e,u,f,h,p),s=r.moveTraces(e,l,a),c.stopSequence(e),s},r.deleteTraces=function t(e,n){e=o.getGraphDiv(e);var a,i,s=[],l=r.addTraces,u=t,h=[e,s,n],f=[e,n];if("undefined"==typeof n)throw new Error("indices must be an integer or array of integers.");for(Array.isArray(n)||(n=[n]),I(e,n,"indices"),(n=z(n,e.data.length-1)).sort(o.sorterDes),a=0;a<n.length;a+=1)i=e.data.splice(n[a],1)[0],s.push(i);var p=r.redraw(e);return c.add(e,l,h,u,f),p},r.extendTraces=function t(e,n,a,i){var s=R(e=o.getGraphDiv(e),n,a,i,function(t,e,r){var n,a;if(o.isTypedArray(t))if(r<0){var i=new t.constructor(0),s=F(t,e);r<0?(n=s,a=i):(n=i,a=s)}else if(n=new t.constructor(r),a=new t.constructor(t.length+e.length-r),r===e.length)n.set(e),a.set(t);else if(r<e.length){var l=e.length-r;n.set(e.subarray(l)),a.set(t),a.set(e.subarray(0,l),t.length)}else{var c=r-e.length,u=t.length-c;n.set(t.subarray(u)),n.set(e,c),a.set(t.subarray(0,u))}else n=t.concat(e),a=r>=0&&r<n.length?n.splice(0,n.length-r):[];return[n,a]}),l=r.redraw(e),u=[e,s.update,a,s.maxPoints];return c.add(e,r.prependTraces,u,t,arguments),l},r.moveTraces=function t(e,n,a){var i,s=[],l=[],u=t,h=t,f=[e=o.getGraphDiv(e),a,n],p=[e,n,a];if(D(e,n,a),n=Array.isArray(n)?n:[n],"undefined"==typeof a)for(a=[],i=0;i<n.length;i++)a.push(-n.length+i);for(a=Array.isArray(a)?a:[a],n=z(n,e.data.length-1),a=z(a,e.data.length-1),i=0;i<e.data.length;i++)-1===n.indexOf(i)&&s.push(e.data[i]);for(i=0;i<n.length;i++)l.push({newIndex:a[i],trace:e.data[n[i]]});for(l.sort(function(t,e){return t.newIndex-e.newIndex}),i=0;i<l.length;i+=1)s.splice(l[i].newIndex,0,l[i].trace);e.data=s;var d=r.redraw(e);return c.add(e,u,f,h,p),d},r.prependTraces=function t(e,n,a,i){var s=R(e=o.getGraphDiv(e),n,a,i,function(t,e,r){var n,a;if(o.isTypedArray(t))if(r<=0){var i=new t.constructor(0),s=F(e,t);r<0?(n=s,a=i):(n=i,a=s)}else if(n=new t.constructor(r),a=new t.constructor(t.length+e.length-r),r===e.length)n.set(e),a.set(t);else if(r<e.length){var l=e.length-r;n.set(e.subarray(0,l)),a.set(e.subarray(l)),a.set(t,l)}else{var c=r-e.length;n.set(e),n.set(t.subarray(0,c),e.length),a.set(t.subarray(c))}else n=e.concat(t),a=r>=0&&r<n.length?n.splice(r,n.length):[];return[n,a]}),l=r.redraw(e),u=[e,s.update,a,s.maxPoints];return c.add(e,r.extendTraces,u,t,arguments),l},r.newPlot=function(t,e,n,a){return t=o.getGraphDiv(t),f.cleanPlot([],{},t._fullData||[],t._fullLayout||{}),f.purge(t),r.plot(t,e,n,a)},r.plot=function(t,e,a,i){var s;if(t=o.getGraphDiv(t),l.init(t),o.isPlainObject(e)){var c=e;e=c.data,a=c.layout,i=c.config,s=c.frames}if(!1===l.triggerHandler(t,"plotly_beforeplot",[e,a,i]))return Promise.reject();e||a||o.isPlotDiv(t)||o.warn("Calling Plotly.plot as if redrawing but this container doesn't yet have a plot.",t),O(t,i),a||(a={}),n.select(t).classed("js-plotly-plot",!0),g.makeTester(),Array.isArray(t._promises)||(t._promises=[]);var h=0===(t.data||[]).length&&Array.isArray(e);Array.isArray(e)&&(k.cleanData(e),h?t.data=e:t.data.push.apply(t.data,e),t.empty=!1),t.layout&&!h||(t.layout=k.cleanLayout(a)),f.supplyDefaults(t);var v=t._fullLayout,y=v._has("cartesian");if(!v._has("polar")&&e&&e[0]&&e[0].r)return o.log("Legacy polar charts are deprecated!"),function(t,e,r){var a=n.select(t).selectAll(".plot-container").data([0]);a.enter().insert("div",":first-child").classed("plot-container plotly",!0);var i=a.selectAll(".svg-container").data([0]);i.enter().append("div").classed("svg-container",!0).style("position","relative"),i.html(""),e&&(t.data=e),r&&(t.layout=r),p.manager.fillLayout(t),i.style({width:t._fullLayout.width+"px",height:t._fullLayout.height+"px"}),t.framework=p.manager.framework(t),t.framework({data:t.data,layout:t.layout},i.node()),t.framework.setUndoPoint();var s=t.framework.svg(),l=1,c=t._fullLayout.title?t._fullLayout.title.text:"";""!==c&&c||(l=0);var u=function(){this.call(x.convertToTspans,t)},h=s.select(".title-group text").call(u);if(t._context.edits.titleText){var d=o._(t,"Click to enter Plot title");c&&c!==d||(l=.2,h.attr({"data-unformatted":d}).text(d).style({opacity:l}).on("mouseover.opacity",function(){n.select(this).transition().duration(100).style("opacity",1)}).on("mouseout.opacity",function(){n.select(this).transition().duration(1e3).style("opacity",0)}));var g=function(){this.call(x.makeEditable,{gd:t}).on("edit",function(e){t.framework({layout:{title:{text:e}}}),this.text(e).call(u),this.call(g)}).on("cancel",function(){var t=this.attr("data-unformatted");this.text(t).call(u)})};h.call(g)}return t._context.setBackground(t,t._fullLayout.paper_bgcolor),f.addLinks(t),Promise.resolve()}(t,e,a);v._replotting=!0,h&&lt(t),t.framework!==lt&&(t.framework=lt,lt(t)),g.initGradients(t),h&&d.saveShowSpikeInitial(t);var b=!t.calcdata||t.calcdata.length!==(t._fullData||[]).length;b&&f.doCalcdata(t);for(var _=0;_<t.calcdata.length;_++)t.calcdata[_][0].trace=t._fullData[_];t._context.responsive?t._responsiveChartHandler||(t._responsiveChartHandler=function(){o.isHidden(t)||f.resize(t)},window.addEventListener("resize",t._responsiveChartHandler)):o.clearResponsive(t);var w=o.extendFlat({},v._size),M=0;function A(){if(f.clearAutoMarginIds(t),T.drawMarginPushers(t),d.allowAutoMargin(t),v._has("pie"))for(var e=t._fullData,r=0;r<e.length;r++){var n=e[r];"pie"===n.type&&n.automargin&&f.allowAutoMargin(t,"pie."+n.uid+".automargin")}return f.doAutoMargin(t),f.previousPromises(t)}function S(){t._transitioning||(T.doAutoRangeAndConstraints(t),h&&d.saveRangeInitial(t),u.getComponentMethod("rangeslider","calcAutorange")(t))}var E=[f.previousPromises,function(){if(s)return r.addFrames(t,s)},function e(){for(var r=v._basePlotModules,n=0;n<r.length;n++)r[n].drawFramework&&r[n].drawFramework(t);if(!v._glcanvas&&v._has("gl")&&(v._glcanvas=v._glcontainer.selectAll(".gl-canvas").data([{key:"contextLayer",context:!0,pick:!1},{key:"focusLayer",context:!1,pick:!1},{key:"pickLayer",context:!1,pick:!0}],function(t){return t.key}),v._glcanvas.enter().append("canvas").attr("class",function(t){return"gl-canvas gl-canvas-"+t.key.replace("Layer","")}).style({position:"absolute",top:0,left:0,overflow:"visible","pointer-events":"none"})),v._glcanvas){v._glcanvas.attr("width",v.width).attr("height",v.height);var a=v._glcanvas.data()[0].regl;if(a&&(Math.floor(v.width)!==a._gl.drawingBufferWidth||Math.floor(v.height)!==a._gl.drawingBufferHeight)){var i="WebGL context buffer and canvas dimensions do not match due to browser/WebGL bug.";if(!M)return o.log(i+" Clearing graph and plotting again."),f.cleanPlot([],{},t._fullData,v),f.supplyDefaults(t),v=t._fullLayout,f.doCalcdata(t),M++,e();o.error(i)}}return"h"===v.modebar.orientation?v._modebardiv.style("height",null).style("width","100%"):v._modebardiv.style("width",null).style("height",v.height+"px"),f.previousPromises(t)},A,function(){if(f.didMarginChange(w,v._size))return o.syncOrAsync([A,T.layoutStyles],t)}];y&&E.push(function(){if(b)return o.syncOrAsync([u.getComponentMethod("shapes","calcAutorange"),u.getComponentMethod("annotations","calcAutorange"),S],t);S()}),E.push(T.layoutStyles),y&&E.push(function(){return d.draw(t,h?"":"redraw")}),E.push(T.drawData,T.finalDraw,m,f.addLinks,f.rehover,f.redrag,f.doAutoMargin,f.previousPromises);var C=o.syncOrAsync(E,t);return C&&C.then||(C=Promise.resolve()),C.then(function(){return L(t),t})},r.purge=function(t){var e=(t=o.getGraphDiv(t))._fullLayout||{},r=t._fullData||[];return f.cleanPlot([],{},r,e),f.purge(t),l.purge(t),e._container&&e._container.remove(),delete t._context,t},r.react=function(t,e,n,a){var i,l;t=o.getGraphDiv(t),k.clearPromiseQueue(t);var c=t._fullData,p=t._fullLayout;if(o.isPlotDiv(t)&&c&&p){if(o.isPlainObject(e)){var d=e;e=d.data,n=d.layout,a=d.config,i=d.frames}var g=!1;if(a){var v=o.extendDeep({},t._context);t._context=void 0,O(t,a),g=function t(e,r){var n;for(n in e)if("_"!==n.charAt(0)){var a=e[n],i=r[n];if(a!==i)if(o.isPlainObject(a)&&o.isPlainObject(i)){if(t(a,i))return!0}else{if(!Array.isArray(a)||!Array.isArray(i))return!0;if(a.length!==i.length)return!0;for(var s=0;s<a.length;s++)if(a[s]!==i[s]){if(!o.isPlainObject(a[s])||!o.isPlainObject(i[s]))return!0;if(t(a[s],i[s]))return!0}}}}(v,t._context)}t.data=e||[],k.cleanData(t.data),t.layout=n||{},k.cleanLayout(t.layout),function(t,e,r,n){var a,i,l,c,u,h,f,p,d=n._preGUI,g=[],v={};for(a in d){if(u=rt(a,tt)){if(i=u.attr||u.head+".uirevision",(c=(l=s(n,i).get())&&nt(i,e))&&c===l&&(null===(h=d[a])&&(h=void 0),ot(p=(f=s(e,a)).get(),h))){void 0===p&&"autorange"===a.substr(a.length-9)&&g.push(a.substr(0,a.length-10)),f.set(N(s(n,a).get()));continue}}else o.warn("unrecognized GUI edit: "+a);delete d[a],"range["===a.substr(a.length-8,6)&&(v[a.substr(0,a.length-9)]=1)}for(var m=0;m<g.length;m++){var y=g[m];if(v[y]){var x=s(e,y).get();x&&delete x.autorange}}var b=n._tracePreGUI;for(var _ in b){var w,k=b[_],T=null;for(a in k){if(!T){var M=at(_,r);if(M<0){delete b[_];break}var A=it(_,t,(w=r[M]._fullInput).index);if(A<0){delete b[_];break}T=t[A]}if(u=rt(a,et)){if(u.attr?c=(l=s(n,u.attr).get())&&nt(u.attr,e):(l=w.uirevision,void 0===(c=T.uirevision)&&(c=e.uirevision)),c&&c===l&&(null===(h=k[a])&&(h=void 0),ot(p=(f=s(T,a)).get(),h))){f.set(N(s(w,a).get()));continue}}else o.warn("unrecognized GUI edit: "+a+" in trace uid "+_);delete k[a]}}}(t.data,t.layout,c,p),f.supplyDefaults(t,{skipUpdateCalc:!0});var m=t._fullData,y=t._fullLayout,x=void 0===y.datarevision,b=y.transition,_=function(t,e,r,n,a){var i=M.layoutFlags();return i.arrays={},i.rangesAltered={},i.nChanges=0,i.nChangesAnim=0,st(e,r,[],{getValObject:function(t){return h.getLayoutValObject(r,t)},flags:i,immutable:n,transition:a,gd:t}),(i.plot||i.calc)&&(i.layoutReplot=!0),a&&i.nChanges&&i.nChangesAnim&&(i.anim=i.nChanges===i.nChangesAnim?"all":"some"),i}(t,p,y,x,b),w=_.newDataRevision,A=function(t,e,r,n,a,i){var o=e.length===r.length;if(!a&&!o)return{fullReplot:!0,calc:!0};var s,l,c=M.traceFlags();c.arrays={},c.nChanges=0,c.nChangesAnim=0;var u={getValObject:function(t){var e=h.getTraceValObject(l,t);return!l._module.animatable&&e.anim&&(e.anim=!1),e},flags:c,immutable:n,transition:a,newDataRevision:i,gd:t},p={};for(s=0;s<e.length;s++)if(r[s]){if(l=r[s]._fullInput,f.hasMakesDataTransform(l)&&(l=r[s]),p[l.uid])continue;p[l.uid]=1,st(e[s]._fullInput,l,[],u)}return(c.calc||c.plot)&&(c.fullReplot=!0),a&&c.nChanges&&c.nChangesAnim&&(c.anim=c.nChanges===c.nChangesAnim&&o?"all":"some"),c}(t,c,m,x,b,w);K(t)&&(_.layoutReplot=!0),A.calc||_.calc?t.calcdata=void 0:f.supplyDefaultsUpdateCalc(t.calcdata,m);var S=[];if(i&&(t._transitionData={},f.createTransitionData(t),S.push(function(){return r.addFrames(t,i)})),y.transition&&!g&&(A.anim||_.anim))f.doCalcdata(t),T.doAutoRangeAndConstraints(t),S.push(function(){return f.transitionFromReact(t,A,_,p)});else if(A.fullReplot||_.layoutReplot||g)t._fullLayout._skipDefaults=!0,S.push(r.plot);else{for(var E in _.arrays){var C=_.arrays[E];if(C.length){var P=u.getComponentMethod(E,"drawOne");if(P!==o.noop)for(var z=0;z<C.length;z++)P(t,C[z]);else{var I=u.getComponentMethod(E,"draw");if(I===o.noop)throw new Error("cannot draw components: "+E);I(t)}}}S.push(f.previousPromises),A.style&&S.push(T.doTraceStyle),(A.colorbars||_.colorbars)&&S.push(T.doColorBars),_.legend&&S.push(T.doLegend),_.layoutstyle&&S.push(T.layoutStyles),_.axrange&&Y(S),_.ticks&&S.push(T.doTicksRelayout),_.modebar&&S.push(T.doModeBar),_.camera&&S.push(T.doCamera),S.push(L)}S.push(f.rehover,f.redrag),(l=o.syncOrAsync(S,t))&&l.then||(l=Promise.resolve(t))}else l=r.newPlot(t,e,n,a);return l.then(function(){return t.emit("plotly_react",{data:e,layout:n}),t})},r.redraw=function(t){if(t=o.getGraphDiv(t),!o.isPlotDiv(t))throw new Error("This element is not a Plotly plot: "+t);return k.cleanData(t.data),k.cleanLayout(t.layout),t.calcdata=void 0,r.plot(t).then(function(){return t.emit("plotly_redraw"),t})},r.relayout=H,r.restyle=B,r.setPlotConfig=function(t){return o.extendFlat(_,t)},r.update=Q,r._guiRelayout=$(H),r._guiRestyle=$(B),r._guiUpdate=$(Q),r._storeDirectGUIEdit=function(t,e,r){for(var n in r)V(n,s(t,n).get(),r[n],e)}},{"../components/color":591,"../components/drawing":612,"../constants/xmlns_namespaces":694,"../lib":717,"../lib/events":707,"../lib/queue":732,"../lib/svg_text_utils":741,"../plots/cartesian/axes":765,"../plots/cartesian/constants":771,"../plots/cartesian/graph_interact":774,"../plots/cartesian/select":782,"../plots/plots":826,"../plots/polar/legacy":834,"../registry":846,"./edit_types":748,"./helpers":749,"./manage_arrays":751,"./plot_config":753,"./plot_schema":754,"./subroutines":756,d3:165,"fast-isnumeric":228,"has-hover":411}],753:[function(t,e,r){"use strict";var n={staticPlot:{valType:"boolean",dflt:!1},plotlyServerURL:{valType:"string",dflt:""},editable:{valType:"boolean",dflt:!1},edits:{annotationPosition:{valType:"boolean",dflt:!1},annotationTail:{valType:"boolean",dflt:!1},annotationText:{valType:"boolean",dflt:!1},axisTitleText:{valType:"boolean",dflt:!1},colorbarPosition:{valType:"boolean",dflt:!1},colorbarTitleText:{valType:"boolean",dflt:!1},legendPosition:{valType:"boolean",dflt:!1},legendText:{valType:"boolean",dflt:!1},shapePosition:{valType:"boolean",dflt:!1},titleText:{valType:"boolean",dflt:!1}},autosizable:{valType:"boolean",dflt:!1},responsive:{valType:"boolean",dflt:!1},fillFrame:{valType:"boolean",dflt:!1},frameMargins:{valType:"number",dflt:0,min:0,max:.5},scrollZoom:{valType:"flaglist",flags:["cartesian","gl3d","geo","mapbox"],extras:[!0,!1],dflt:"gl3d+geo+mapbox"},doubleClick:{valType:"enumerated",values:[!1,"reset","autosize","reset+autosize"],dflt:"reset+autosize"},doubleClickDelay:{valType:"number",dflt:300,min:0},showAxisDragHandles:{valType:"boolean",dflt:!0},showAxisRangeEntryBoxes:{valType:"boolean",dflt:!0},showTips:{valType:"boolean",dflt:!0},showLink:{valType:"boolean",dflt:!1},linkText:{valType:"string",dflt:"Edit chart",noBlank:!0},sendData:{valType:"boolean",dflt:!0},showSources:{valType:"any",dflt:!1},displayModeBar:{valType:"enumerated",values:["hover",!0,!1],dflt:"hover"},showSendToCloud:{valType:"boolean",dflt:!1},showEditInChartStudio:{valType:"boolean",dflt:!1},modeBarButtonsToRemove:{valType:"any",dflt:[]},modeBarButtonsToAdd:{valType:"any",dflt:[]},modeBarButtons:{valType:"any",dflt:!1},toImageButtonOptions:{valType:"any",dflt:{}},displaylogo:{valType:"boolean",dflt:!0},watermark:{valType:"boolean",dflt:!1},plotGlPixelRatio:{valType:"number",dflt:2,min:1,max:4},setBackground:{valType:"any",dflt:"transparent"},topojsonURL:{valType:"string",noBlank:!0,dflt:"https://cdn.plot.ly/"},mapboxAccessToken:{valType:"string",dflt:null},logging:{valType:"integer",min:0,max:2,dflt:1},notifyOnLogging:{valType:"integer",min:0,max:2,dflt:0},queueLength:{valType:"integer",min:0,dflt:0},globalTransforms:{valType:"any",dflt:[]},locale:{valType:"string",dflt:"en-US"},locales:{valType:"any",dflt:{}}},a={};!function t(e,r){for(var n in e){var a=e[n];a.valType?r[n]=a.dflt:(r[n]||(r[n]={}),t(a,r[n]))}}(n,a),e.exports={configAttributes:n,dfltConfig:a}},{}],754:[function(t,e,r){"use strict";var n=t("../registry"),a=t("../lib"),i=t("../plots/attributes"),o=t("../plots/layout_attributes"),s=t("../plots/frame_attributes"),l=t("../plots/animation_attributes"),c=t("./plot_config").configAttributes,u=t("../plots/polar/legacy/area_attributes"),h=t("../plots/polar/legacy/axis_attributes"),f=t("./edit_types"),p=a.extendFlat,d=a.extendDeepAll,g=a.isPlainObject,v=a.isArrayOrTypedArray,m=a.nestedProperty,y=a.valObjectMeta,x="_isSubplotObj",b="_isLinkedToArray",_=[x,b,"_arrayAttrRegexps","_deprecated"];function w(t,e,r){if(!t)return!1;if(t._isLinkedToArray)if(k(e[r]))r++;else if(r<e.length)return!1;for(;r<e.length;r++){var n=t[e[r]];if(!g(n))break;if(t=n,r===e.length-1)break;if(t._isLinkedToArray){if(!k(e[++r]))return!1}else if("info_array"===t.valType){var a=e[++r];if(!k(a))return!1;var i=t.items;if(Array.isArray(i)){if(a>=i.length)return!1;if(2===t.dimensions){if(r++,e.length===r)return t;var o=e[r];if(!k(o))return!1;t=i[a][o]}else t=i[a]}else t=i}}return t}function k(t){return t===Math.round(t)&&t>=0}function T(){var t,e,r={};for(t in d(r,o),n.subplotsRegistry){if((e=n.subplotsRegistry[t]).layoutAttributes)if(Array.isArray(e.attr))for(var a=0;a<e.attr.length;a++)S(r,e,e.attr[a]);else S(r,e,"subplot"===e.attr?e.name:e.attr)}for(t in r=function(t){return p(t,{radialaxis:h.radialaxis,angularaxis:h.angularaxis}),p(t,h.layout),t}(r),n.componentsRegistry){var i=(e=n.componentsRegistry[t]).schema;if(i&&(i.subplots||i.layout)){var s=i.subplots;if(s&&s.xaxis&&!s.yaxis)for(var l in s.xaxis)delete r.yaxis[l]}else"colorscale"===e.name?d(r,e.layoutAttributes):e.layoutAttributes&&E(r,e.layoutAttributes,e.name)}return{layoutAttributes:A(r)}}function M(){var t={frames:d({},s)};return A(t),t.frames}function A(t){return function(t){r.crawl(t,function(t,e,n){r.isValObject(t)?"data_array"===t.valType?(t.role="data",n[e+"src"]={valType:"string",editType:"none"}):!0===t.arrayOk&&(n[e+"src"]={valType:"string",editType:"none"}):g(t)&&(t.role="object")})}(t),function(t){r.crawl(t,function(t,e,r){if(!t)return;var n=t[b];if(!n)return;delete t[b],r[e]={items:{}},r[e].items[n]=t,r[e].role="object"})}(t),function(t){!function t(e){for(var r in e)if(g(e[r]))t(e[r]);else if(Array.isArray(e[r]))for(var n=0;n<e[r].length;n++)t(e[r][n]);else e[r]instanceof RegExp&&(e[r]=e[r].toString())}(t)}(t),t}function S(t,e,r){var n=m(t,r),a=d({},e.layoutAttributes);a[x]=!0,n.set(a)}function E(t,e,r){var n=m(t,r);n.set(d(n.get()||{},e))}r.IS_SUBPLOT_OBJ=x,r.IS_LINKED_TO_ARRAY=b,r.DEPRECATED="_deprecated",r.UNDERSCORE_ATTRS=_,r.get=function(){var t={};n.allTypes.concat("area").forEach(function(e){t[e]=function(t){var e,a;"area"===t?(e={attributes:u},a={}):(e=n.modules[t]._module,a=e.basePlotModule);var o={type:null},s=d({},i),l=d({},e.attributes);r.crawl(l,function(t,e,r,n,a){m(s,a).set(void 0),void 0===t&&m(l,a).set(void 0)}),d(o,s),n.traceIs(t,"noOpacity")&&delete o.opacity;n.traceIs(t,"showLegend")||(delete o.showlegend,delete o.legendgroup);n.traceIs(t,"noHover")&&(delete o.hoverinfo,delete o.hoverlabel);e.selectPoints||delete o.selectedpoints;d(o,l),a.attributes&&d(o,a.attributes);o.type=t;var c={meta:e.meta||{},categories:e.categories||{},animatable:Boolean(e.animatable),type:t,attributes:A(o)};if(e.layoutAttributes){var h={};d(h,e.layoutAttributes),c.layoutAttributes=A(h)}e.animatable||r.crawl(c,function(t){r.isValObject(t)&&"anim"in t&&delete t.anim});return c}(e)});var e={};return Object.keys(n.transformsRegistry).forEach(function(t){e[t]=function(t){var e=n.transformsRegistry[t],r=d({},e.attributes);return Object.keys(n.componentsRegistry).forEach(function(e){var a=n.componentsRegistry[e];a.schema&&a.schema.transforms&&a.schema.transforms[t]&&Object.keys(a.schema.transforms[t]).forEach(function(e){E(r,a.schema.transforms[t][e],e)})}),{attributes:A(r)}}(t)}),{defs:{valObjects:y,metaKeys:_.concat(["description","role","editType","impliedEdits"]),editType:{traces:f.traces,layout:f.layout},impliedEdits:{}},traces:t,layout:T(),transforms:e,frames:M(),animation:A(l),config:A(c)}},r.crawl=function(t,e,n,a){var i=n||0;a=a||"",Object.keys(t).forEach(function(n){var o=t[n];if(-1===_.indexOf(n)){var s=(a?a+".":"")+n;e(o,n,t,i,s),r.isValObject(o)||g(o)&&"impliedEdits"!==n&&r.crawl(o,e,i+1,s)}})},r.isValObject=function(t){return t&&void 0!==t.valType},r.findArrayAttributes=function(t){var e,n,a=[],o=[],s=[];function l(t,r,i,l){o=o.slice(0,l).concat([r]),s=s.slice(0,l).concat([t&&t._isLinkedToArray]),t&&("data_array"===t.valType||!0===t.arrayOk)&&!("colorbar"===o[l-1]&&("ticktext"===r||"tickvals"===r))&&function t(e,r,i){var l=e[o[r]];var c=i+o[r];if(r===o.length-1)v(l)&&a.push(n+c);else if(s[r]){if(Array.isArray(l))for(var u=0;u<l.length;u++)g(l[u])&&t(l[u],r+1,c+"["+u+"].")}else g(l)&&t(l,r+1,c+".")}(e,0,"")}e=t,n="",r.crawl(i,l),t._module&&t._module.attributes&&r.crawl(t._module.attributes,l);var c=t.transforms;if(c)for(var u=0;u<c.length;u++){var h=c[u],f=h._module;f&&(n="transforms["+u+"].",e=h,r.crawl(f.attributes,l))}return a},r.getTraceValObject=function(t,e){var r,a,o=e[0],s=1;if("transforms"===o){if(1===e.length)return i.transforms;var l=t.transforms;if(!Array.isArray(l)||!l.length)return!1;var c=e[1];if(!k(c)||c>=l.length)return!1;a=(r=(n.transformsRegistry[l[c].type]||{}).attributes)&&r[e[2]],s=3}else if("area"===t.type)a=u[o];else{var h=t._module;if(h||(h=(n.modules[t.type||i.type.dflt]||{})._module),!h)return!1;if(!(a=(r=h.attributes)&&r[o])){var f=h.basePlotModule;f&&f.attributes&&(a=f.attributes[o])}a||(a=i[o])}return w(a,e,s)},r.getLayoutValObject=function(t,e){return w(function(t,e){var r,a,i,s,l=t._basePlotModules;if(l){var c;for(r=0;r<l.length;r++){if((i=l[r]).attrRegex&&i.attrRegex.test(e)){if(i.layoutAttrOverrides)return i.layoutAttrOverrides;!c&&i.layoutAttributes&&(c=i.layoutAttributes)}var u=i.baseLayoutAttrOverrides;if(u&&e in u)return u[e]}if(c)return c}var f=t._modules;if(f)for(r=0;r<f.length;r++)if((s=f[r].layoutAttributes)&&e in s)return s[e];for(a in n.componentsRegistry){if("colorscale"===(i=n.componentsRegistry[a]).name&&0===e.indexOf("coloraxis"))return i.layoutAttributes[e];if(!i.schema&&e===i.name)return i.layoutAttributes}if(e in o)return o[e];if("radialaxis"===e||"angularaxis"===e)return h[e];return h.layout[e]||!1}(t,e[0]),e,1)}},{"../lib":717,"../plots/animation_attributes":760,"../plots/attributes":762,"../plots/frame_attributes":792,"../plots/layout_attributes":817,"../plots/polar/legacy/area_attributes":832,"../plots/polar/legacy/axis_attributes":833,"../registry":846,"./edit_types":748,"./plot_config":753}],755:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../plots/attributes"),i="templateitemname",o={name:{valType:"string",editType:"none"}};function s(t){return t&&"string"==typeof t}function l(t){var e=t.length-1;return"s"!==t.charAt(e)&&n.warn("bad argument to arrayDefaultKey: "+t),t.substr(0,t.length-1)+"defaults"}o[i]={valType:"string",editType:"calc"},r.templatedArray=function(t,e){return e._isLinkedToArray=t,e.name=o.name,e[i]=o[i],e},r.traceTemplater=function(t){var e,r,i={};for(e in t)r=t[e],Array.isArray(r)&&r.length&&(i[e]=0);return{newTrace:function(o){var s={type:e=n.coerce(o,{},a,"type"),_template:null};if(e in i){r=t[e];var l=i[e]%r.length;i[e]++,s._template=r[l]}return s}}},r.newContainer=function(t,e,r){var a=t._template,i=a&&(a[e]||r&&a[r]);return n.isPlainObject(i)||(i=null),t[e]={_template:i}},r.arrayTemplater=function(t,e,r){var n=t._template,a=n&&n[l(e)],o=n&&n[e];Array.isArray(o)&&o.length||(o=[]);var c={};return{newItem:function(t){var e={name:t.name,_input:t},n=e[i]=t[i];if(!s(n))return e._template=a,e;for(var l=0;l<o.length;l++){var u=o[l];if(u.name===n)return c[n]=1,e._template=u,e}return e[r]=t[r]||!1,e._template=!1,e},defaultItems:function(){for(var t=[],e=0;e<o.length;e++){var r=o[e],n=r.name;if(s(n)&&!c[n]){var a={_template:r,name:n,_input:{_templateitemname:n}};a[i]=r[i],t.push(a),c[n]=1}}return t}}},r.arrayDefaultKey=l,r.arrayEditor=function(t,e,r){var a=(n.nestedProperty(t,e).get()||[]).length,o=r._index,s=o>=a&&(r._input||{})._templateitemname;s&&(o=a);var l,c=e+"["+o+"]";function u(){l={},s&&(l[c]={},l[c][i]=s)}function h(t,e){s?n.nestedProperty(l[c],t).set(e):l[c+"."+t]=e}function f(){var t=l;return u(),t}return u(),{modifyBase:function(t,e){l[t]=e},modifyItem:h,getUpdateObj:f,applyUpdate:function(e,r){e&&h(e,r);var a=f();for(var i in a)n.nestedProperty(t,i).set(a[i])}}}},{"../lib":717,"../plots/attributes":762}],756:[function(t,e,r){"use strict";var n=t("d3"),a=t("../registry"),i=t("../plots/plots"),o=t("../lib"),s=t("../lib/clear_gl_canvases"),l=t("../components/color"),c=t("../components/drawing"),u=t("../components/titles"),h=t("../components/modebar"),f=t("../plots/cartesian/axes"),p=t("../constants/alignment"),d=t("../plots/cartesian/constraints"),g=d.enforce,v=d.clean,m=t("../plots/cartesian/autorange").doAutoRange,y="start",x="middle",b="end";function _(t,e,r){for(var n=0;n<r.length;n++){var a=r[n][0],i=r[n][1];if(!(a[0]>=t[1]||a[1]<=t[0])&&(i[0]<e[1]&&i[1]>e[0]))return!0}return!1}function w(t){var e,a,s,u,d,g,v=t._fullLayout,m=v._size,y=m.p,x=f.list(t,"",!0);if(v._paperdiv.style({width:t._context.responsive&&v.autosize&&!t._context._hasZeroWidth&&!t.layout.width?"100%":v.width+"px",height:t._context.responsive&&v.autosize&&!t._context._hasZeroHeight&&!t.layout.height?"100%":v.height+"px"}).selectAll(".main-svg").call(c.setSize,v.width,v.height),t._context.setBackground(t,v.paper_bgcolor),r.drawMainTitle(t),h.manage(t),!v._has("cartesian"))return i.previousPromises(t);function b(t,e,r){var n=t._lw/2;return"x"===t._id.charAt(0)?e?"top"===r?e._offset-y-n:e._offset+e._length+y+n:m.t+m.h*(1-(t.position||0))+n%1:e?"right"===r?e._offset+e._length+y+n:e._offset-y-n:m.l+m.w*(t.position||0)+n%1}for(e=0;e<x.length;e++){var w=(u=x[e])._anchorAxis;u._linepositions={},u._lw=c.crispRound(t,u.linewidth,1),u._mainLinePosition=b(u,w,u.side),u._mainMirrorPosition=u.mirror&&w?b(u,w,p.OPPOSITE_SIDE[u.side]):null}var T=[],A=[],S=[],E=1===l.opacity(v.paper_bgcolor)&&1===l.opacity(v.plot_bgcolor)&&v.paper_bgcolor===v.plot_bgcolor;for(a in v._plots)if((s=v._plots[a]).mainplot)s.bg&&s.bg.remove(),s.bg=void 0;else{var L=s.xaxis.domain,C=s.yaxis.domain,P=s.plotgroup;if(_(L,C,S)){var O=P.node(),z=s.bg=o.ensureSingle(P,"rect","bg");O.insertBefore(z.node(),O.childNodes[0]),A.push(a)}else P.select("rect.bg").remove(),S.push([L,C]),E||(T.push(a),A.push(a))}var I,D,R,F,B,N,j,V,U,q,H,G,Y,W=v._bgLayer.selectAll(".bg").data(T);for(W.enter().append("rect").classed("bg",!0),W.exit().remove(),W.each(function(t){v._plots[t].bg=n.select(this)}),e=0;e<A.length;e++)s=v._plots[A[e]],d=s.xaxis,g=s.yaxis,s.bg&&s.bg.call(c.setRect,d._offset-y,g._offset-y,d._length+2*y,g._length+2*y).call(l.fill,v.plot_bgcolor).style("stroke-width",0);if(!v._hasOnlyLargeSploms)for(a in v._plots){s=v._plots[a],d=s.xaxis,g=s.yaxis;var X,Z,J=s.clipId="clip"+v._uid+a+"plot",K=o.ensureSingleById(v._clips,"clipPath",J,function(t){t.classed("plotclip",!0).append("rect")});s.clipRect=K.select("rect").attr({width:d._length,height:g._length}),c.setTranslate(s.plot,d._offset,g._offset),s._hasClipOnAxisFalse?(X=null,Z=J):(X=J,Z=null),c.setClipUrl(s.plot,X,t),s.layerClipId=Z}function Q(t){return"M"+I+","+t+"H"+D}function $(t){return"M"+d._offset+","+t+"h"+d._length}function tt(t){return"M"+t+","+V+"V"+j}function et(t){return"M"+t+","+g._offset+"v"+g._length}function rt(t,e,r){if(!t.showline||a!==t._mainSubplot)return"";if(!t._anchorAxis)return r(t._mainLinePosition);var n=e(t._mainLinePosition);return t.mirror&&(n+=e(t._mainMirrorPosition)),n}for(a in v._plots){s=v._plots[a],d=s.xaxis,g=s.yaxis;var nt="M0,0";k(d,a)&&(B=M(d,"left",g,x),I=d._offset-(B?y+B:0),N=M(d,"right",g,x),D=d._offset+d._length+(N?y+N:0),R=b(d,g,"bottom"),F=b(d,g,"top"),!(Y=!d._anchorAxis||a!==d._mainSubplot)||"allticks"!==d.mirror&&"all"!==d.mirror||(d._linepositions[a]=[R,F]),nt=rt(d,Q,$),Y&&d.showline&&("all"===d.mirror||"allticks"===d.mirror)&&(nt+=Q(R)+Q(F)),s.xlines.style("stroke-width",d._lw+"px").call(l.stroke,d.showline?d.linecolor:"rgba(0,0,0,0)")),s.xlines.attr("d",nt);var at="M0,0";k(g,a)&&(H=M(g,"bottom",d,x),j=g._offset+g._length+(H?y:0),G=M(g,"top",d,x),V=g._offset-(G?y:0),U=b(g,d,"left"),q=b(g,d,"right"),!(Y=!g._anchorAxis||a!==g._mainSubplot)||"allticks"!==g.mirror&&"all"!==g.mirror||(g._linepositions[a]=[U,q]),at=rt(g,tt,et),Y&&g.showline&&("all"===g.mirror||"allticks"===g.mirror)&&(at+=tt(U)+tt(q)),s.ylines.style("stroke-width",g._lw+"px").call(l.stroke,g.showline?g.linecolor:"rgba(0,0,0,0)")),s.ylines.attr("d",at)}return f.makeClipPaths(t),i.previousPromises(t)}function k(t,e){return(t.ticks||t.showline)&&(e===t._mainSubplot||"all"===t.mirror||"allticks"===t.mirror)}function T(t,e,r){if(!r.showline||!r._lw)return!1;if("all"===r.mirror||"allticks"===r.mirror)return!0;var n=r._anchorAxis;if(!n)return!1;var a=p.FROM_BL[e];return r.side===e?n.domain[a]===t.domain[a]:r.mirror&&n.domain[1-a]===t.domain[1-a]}function M(t,e,r,n){if(T(t,e,r))return r._lw;for(var a=0;a<n.length;a++){var i=n[a];if(i._mainAxis===r._mainAxis&&T(t,e,i))return i._lw}return 0}function A(t,e){var r=t.title,n=t._size,a=0;switch(e===y?a=r.pad.l:e===b&&(a=-r.pad.r),r.xref){case"paper":return n.l+n.w*r.x+a;case"container":default:return t.width*r.x+a}}function S(t,e){var r=t.title,n=t._size,a=0;if("0em"!==e&&e?e===p.CAP_SHIFT+"em"&&(a=r.pad.t):a=-r.pad.b,"auto"===r.y)return n.t/2;switch(r.yref){case"paper":return n.t+n.h-n.h*r.y+a;case"container":default:return t.height-t.height*r.y+a}}r.layoutStyles=function(t){return o.syncOrAsync([i.doAutoMargin,w],t)},r.drawMainTitle=function(t){var e=t._fullLayout,r=function(t){var e=t.title,r=x;o.isRightAnchor(e)?r=b:o.isLeftAnchor(e)&&(r=y);return r}(e),n=function(t){var e=t.title,r="0em";o.isTopAnchor(e)?r=p.CAP_SHIFT+"em":o.isMiddleAnchor(e)&&(r=p.MID_SHIFT+"em");return r}(e);u.draw(t,"gtitle",{propContainer:e,propName:"title.text",placeholder:e._dfltTitle.plot,attributes:{x:A(e,r),y:S(e,n),"text-anchor":r,dy:n}})},r.doTraceStyle=function(t){var e,n=t.calcdata,o=[];for(e=0;e<n.length;e++){var l=n[e],c=l[0]||{},u=c.trace||{},h=u._module||{},f=h.arraysToCalcdata;f&&f(l,u);var p=h.editStyle;p&&o.push({fn:p,cd0:c})}if(o.length){for(e=0;e<o.length;e++){var d=o[e];d.fn(t,d.cd0)}s(t),r.redrawReglTraces(t)}return i.style(t),a.getComponentMethod("legend","draw")(t),i.previousPromises(t)},r.doColorBars=function(t){return a.getComponentMethod("colorbar","draw")(t),i.previousPromises(t)},r.layoutReplot=function(t){var e=t.layout;return t.layout=void 0,a.call("plot",t,"",e)},r.doLegend=function(t){return a.getComponentMethod("legend","draw")(t),i.previousPromises(t)},r.doTicksRelayout=function(t){return f.draw(t,"redraw"),t._fullLayout._hasOnlyLargeSploms&&(a.subplotsRegistry.splom.updateGrid(t),s(t),r.redrawReglTraces(t)),r.drawMainTitle(t),i.previousPromises(t)},r.doModeBar=function(t){var e=t._fullLayout;h.manage(t);for(var r=0;r<e._basePlotModules.length;r++){var n=e._basePlotModules[r].updateFx;n&&n(t)}return i.previousPromises(t)},r.doCamera=function(t){for(var e=t._fullLayout,r=e._subplots.gl3d,n=0;n<r.length;n++){var a=e[r[n]];a._scene.setViewport(a)}},r.drawData=function(t){var e=t._fullLayout;s(t);for(var n=e._basePlotModules,o=0;o<n.length;o++)n[o].plot(t);return r.redrawReglTraces(t),i.style(t),a.getComponentMethod("shapes","draw")(t),a.getComponentMethod("annotations","draw")(t),a.getComponentMethod("images","draw")(t),e._replotting=!1,i.previousPromises(t)},r.redrawReglTraces=function(t){var e=t._fullLayout;if(e._has("regl")){var r,n,a=t._fullData,i=[],s=[];for(e._hasOnlyLargeSploms&&e._splomGrid.draw(),r=0;r<a.length;r++){var l=a[r];!0===l.visible&&0!==l._length&&("splom"===l.type?e._splomScenes[l.uid].draw():"scattergl"===l.type?o.pushUnique(i,l.xaxis+l.yaxis):"scatterpolargl"===l.type&&o.pushUnique(s,l.subplot))}for(r=0;r<i.length;r++)(n=e._plots[i[r]])._scene&&n._scene.draw();for(r=0;r<s.length;r++)(n=e[s[r]]._subplot)._scene&&n._scene.draw()}},r.doAutoRangeAndConstraints=function(t){for(var e,r,n=t._fullLayout,a=f.list(t,"",!0),i=n._axisMatchGroups||[],s={},l=0;l<a.length;l++)e=a[l],v(t,e),m(t,e),s[e._id]=1;g(t);t:for(var c=0;c<i.length;c++){var u,h=i[c],p=null;for(u in h)if(s[(e=f.getFromId(t,u))._id]){if(!1===e.autorange)continue t;r=o.simpleMap(e.range,e.r2l),p?p[0]<p[1]?(p[0]=Math.min(p[0],r[0]),p[1]=Math.max(p[1],r[1])):(p[0]=Math.max(p[0],r[0]),p[1]=Math.min(p[1],r[1])):p=r}for(u in h)(e=f.getFromId(t,u)).range=o.simpleMap(p,e.l2r),e._input.range=e.range.slice(),e.setScale()}},r.finalDraw=function(t){a.getComponentMethod("rangeslider","draw")(t),a.getComponentMethod("rangeselector","draw")(t)},r.drawMarginPushers=function(t){a.getComponentMethod("legend","draw")(t),a.getComponentMethod("rangeselector","draw")(t),a.getComponentMethod("sliders","draw")(t),a.getComponentMethod("updatemenus","draw")(t),a.getComponentMethod("colorbar","draw")(t)}},{"../components/color":591,"../components/drawing":612,"../components/modebar":650,"../components/titles":679,"../constants/alignment":686,"../lib":717,"../lib/clear_gl_canvases":702,"../plots/cartesian/autorange":764,"../plots/cartesian/axes":765,"../plots/cartesian/constraints":772,"../plots/plots":826,"../registry":846,d3:165}],757:[function(t,e,r){"use strict";var n=t("../lib"),a=n.isPlainObject,i=t("./plot_schema"),o=t("../plots/plots"),s=t("../plots/attributes"),l=t("./plot_template"),c=t("./plot_config").dfltConfig;function u(t,e){t=n.extendDeep({},t);var r,i,o=Object.keys(t).sort();function s(e,r,n){if(a(r)&&a(e))u(e,r);else if(Array.isArray(r)&&Array.isArray(e)){var o=l.arrayTemplater({_template:t},n);for(i=0;i<r.length;i++){var s=r[i],c=o.newItem(s)._template;c&&u(c,s)}var h=o.defaultItems();for(i=0;i<h.length;i++)r.push(h[i]._template);for(i=0;i<r.length;i++)delete r[i].templateitemname}}for(r=0;r<o.length;r++){var c=o[r],f=t[c];if(c in e?s(f,e[c],c):e[c]=f,h(c)===c)for(var p in e){var d=h(p);p===d||d!==c||p in t||s(f,e[p],c)}}}function h(t){return t.replace(/[0-9]+$/,"")}function f(t,e,r,i,o){var s=o&&r(o);for(var c in t){var u=t[c],d=p(t,c,i),g=p(t,c,o),v=r(g);if(!v){var m=h(c);m!==c&&(v=r(g=p(t,m,o)))}if((!s||s!==v)&&!(!v||v._noTemplating||"data_array"===v.valType||v.arrayOk&&Array.isArray(u)))if(!v.valType&&a(u))f(u,e,r,d,g);else if(v._isLinkedToArray&&Array.isArray(u))for(var y=!1,x=0,b={},_=0;_<u.length;_++){var w=u[_];if(a(w)){var k=w.name;if(k)b[k]||(f(w,e,r,p(u,x,d),p(u,x,g)),x++,b[k]=1);else if(!y){var T=p(t,l.arrayDefaultKey(c),i),M=p(u,x,d);f(w,e,r,M,p(u,x,g));var A=n.nestedProperty(e,M);n.nestedProperty(e,T).set(A.get()),A.set(null),y=!0}}}else{n.nestedProperty(e,d).set(u)}}}function p(t,e,r){return r?Array.isArray(t)?r+"["+e+"]":r+"."+e:e}function d(t){for(var e=0;e<t.length;e++)if(a(t[e]))return!0}function g(t){var e;switch(t.code){case"data":e="The template has no key data.";break;case"layout":e="The template has no key layout.";break;case"missing":e=t.path?"There are no templates for item "+t.path+" with name "+t.templateitemname:"There are no templates for trace "+t.index+", of type "+t.traceType+".";break;case"unused":e=t.path?"The template item at "+t.path+" was not used in constructing the plot.":t.dataCount?"Some of the templates of type "+t.traceType+" were not used. The template has "+t.templateCount+" traces, the data only has "+t.dataCount+" of this type.":"The template has "+t.templateCount+" traces of type "+t.traceType+" but there are none in the data.";break;case"reused":e="Some of the templates of type "+t.traceType+" were used more than once. The template has "+t.templateCount+" traces, the data has "+t.dataCount+" of this type."}return t.msg=e,t}r.makeTemplate=function(t){t=n.isPlainObject(t)?t:n.getGraphDiv(t),t=n.extendDeep({_context:c},{data:t.data,layout:t.layout}),o.supplyDefaults(t);var e=t.data||[],r=t.layout||{};r._basePlotModules=t._fullLayout._basePlotModules,r._modules=t._fullLayout._modules;var l={data:{},layout:{}};e.forEach(function(t){var e={};f(t,e,function(t,e){return i.getTraceValObject(t,n.nestedProperty({},e).parts)}.bind(null,t));var r=n.coerce(t,{},s,"type"),a=l.data[r];a||(a=l.data[r]=[]),a.push(e)}),f(r,l.layout,function(t,e){return i.getLayoutValObject(t,n.nestedProperty({},e).parts)}.bind(null,r)),delete l.layout.template;var h=r.template;if(a(h)){var p,d,g,v,m,y,x=h.layout;a(x)&&u(x,l.layout);var b=h.data;if(a(b)){for(d in l.data)if(g=b[d],Array.isArray(g)){for(y=(m=l.data[d]).length,v=g.length,p=0;p<y;p++)u(g[p%v],m[p]);for(p=y;p<v;p++)m.push(n.extendDeep({},g[p]))}for(d in b)d in l.data||(l.data[d]=n.extendDeep([],b[d]))}}return l},r.validateTemplate=function(t,e){var r=n.extendDeep({},{_context:c,data:t.data,layout:t.layout}),i=r.layout||{};a(e)||(e=i.template||{});var s=e.layout,l=e.data,u=[];r.layout=i,r.layout.template=e,o.supplyDefaults(r);var f=r._fullLayout,v=r._fullData,m={};if(a(s)?(!function t(e,r){for(var n in e)if("_"!==n.charAt(0)&&a(e[n])){var i,o=h(n),s=[];for(i=0;i<r.length;i++)s.push(p(e,n,r[i])),o!==n&&s.push(p(e,o,r[i]));for(i=0;i<s.length;i++)m[s[i]]=1;t(e[n],s)}}(f,["layout"]),function t(e,r){for(var n in e)if(-1===n.indexOf("defaults")&&a(e[n])){var i=p(e,n,r);m[i]?t(e[n],i):u.push({code:"unused",path:i})}}(s,"layout")):u.push({code:"layout"}),a(l)){for(var y,x={},b=0;b<v.length;b++){var _=v[b];x[y=_.type]=(x[y]||0)+1,_._fullInput._template||u.push({code:"missing",index:_._fullInput.index,traceType:y})}for(y in l){var w=l[y].length,k=x[y]||0;w>k?u.push({code:"unused",traceType:y,templateCount:w,dataCount:k}):k>w&&u.push({code:"reused",traceType:y,templateCount:w,dataCount:k})}}else u.push({code:"data"});if(function t(e,r){for(var n in e)if("_"!==n.charAt(0)){var i=e[n],o=p(e,n,r);a(i)?(Array.isArray(e)&&!1===i._template&&i.templateitemname&&u.push({code:"missing",path:o,templateitemname:i.templateitemname}),t(i,o)):Array.isArray(i)&&d(i)&&t(i,o)}}({data:v,layout:f},""),u.length)return u.map(g)}},{"../lib":717,"../plots/attributes":762,"../plots/plots":826,"./plot_config":753,"./plot_schema":754,"./plot_template":755}],758:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("./plot_api"),i=t("../plots/plots"),o=t("../lib"),s=t("../snapshot/helpers"),l=t("../snapshot/tosvg"),c=t("../snapshot/svgtoimg"),u=t("../version").version,h={format:{valType:"enumerated",values:["png","jpeg","webp","svg","full-json"],dflt:"png"},width:{valType:"number",min:1},height:{valType:"number",min:1},scale:{valType:"number",min:0,dflt:1},setBackground:{valType:"any",dflt:!1},imageDataOnly:{valType:"boolean",dflt:!1}};e.exports=function(t,e){var r,f,p,d;function g(t){return!(t in e)||o.validate(e[t],h[t])}if(e=e||{},o.isPlainObject(t)?(r=t.data||[],f=t.layout||{},p=t.config||{},d={}):(t=o.getGraphDiv(t),r=o.extendDeep([],t.data),f=o.extendDeep({},t.layout),p=t._context,d=t._fullLayout||{}),!g("width")&&null!==e.width||!g("height")&&null!==e.height)throw new Error("Height and width should be pixel values.");if(!g("format"))throw new Error("Image format is not jpeg, png, svg or webp.");var v={};function m(t,r){return o.coerce(e,v,h,t,r)}var y=m("format"),x=m("width"),b=m("height"),_=m("scale"),w=m("setBackground"),k=m("imageDataOnly"),T=document.createElement("div");T.style.position="absolute",T.style.left="-5000px",document.body.appendChild(T);var M=o.extendFlat({},f);x?M.width=x:null===e.width&&n(d.width)&&(M.width=d.width),b?M.height=b:null===e.height&&n(d.height)&&(M.height=d.height);var A=o.extendFlat({},p,{_exportedPlot:!0,staticPlot:!0,setBackground:w}),S=s.getRedrawFunc(T);function E(){return new Promise(function(t){setTimeout(t,s.getDelay(T._fullLayout))})}function L(){return new Promise(function(t,e){var r=l(T,y,_),n=T._fullLayout.width,h=T._fullLayout.height;function f(){a.purge(T),document.body.removeChild(T)}if("full-json"===y){var p=i.graphJson(T,!1,"keepdata","object",!0,!0);return p.version=u,p=JSON.stringify(p),f(),t(k?p:s.encodeJSON(p))}if(f(),"svg"===y)return t(k?r:s.encodeSVG(r));var d=document.createElement("canvas");d.id=o.randstr(),c({format:y,width:n,height:h,scale:_,canvas:d,svg:r,promise:!0}).then(t).catch(e)})}return new Promise(function(t,e){a.plot(T,r,M,A).then(S).then(E).then(L).then(function(e){t(function(t){return k?t.replace(s.IMAGE_URL_PREFIX,""):t}(e))}).catch(function(t){e(t)})})}},{"../lib":717,"../plots/plots":826,"../snapshot/helpers":850,"../snapshot/svgtoimg":852,"../snapshot/tosvg":854,"../version":1302,"./plot_api":752,"fast-isnumeric":228}],759:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../plots/plots"),i=t("./plot_schema"),o=t("./plot_config").dfltConfig,s=n.isPlainObject,l=Array.isArray,c=n.isArrayOrTypedArray;function u(t,e,r,a,i,o){o=o||[];for(var h=Object.keys(t),f=0;f<h.length;f++){var v=h[f];if("transforms"!==v){var m=o.slice();m.push(v);var y=t[v],x=e[v],b=g(r,v),_=(b||{}).valType,w="info_array"===_,k="colorscale"===_,T=(b||{}).items;if(d(r,v))if(s(y)&&s(x)&&"any"!==_)u(y,x,b,a,i,m);else if(w&&l(y)){y.length>x.length&&a.push(p("unused",i,m.concat(x.length)));var M,A,S,E,L,C=x.length,P=Array.isArray(T);if(P&&(C=Math.min(C,T.length)),2===b.dimensions)for(A=0;A<C;A++)if(l(y[A])){y[A].length>x[A].length&&a.push(p("unused",i,m.concat(A,x[A].length)));var O=x[A].length;for(M=0;M<(P?Math.min(O,T[A].length):O);M++)S=P?T[A][M]:T,E=y[A][M],L=x[A][M],n.validate(E,S)?L!==E&&L!==+E&&a.push(p("dynamic",i,m.concat(A,M),E,L)):a.push(p("value",i,m.concat(A,M),E))}else a.push(p("array",i,m.concat(A),y[A]));else for(A=0;A<C;A++)S=P?T[A]:T,E=y[A],L=x[A],n.validate(E,S)?L!==E&&L!==+E&&a.push(p("dynamic",i,m.concat(A),E,L)):a.push(p("value",i,m.concat(A),E))}else if(b.items&&!w&&l(y)){var z,I,D=T[Object.keys(T)[0]],R=[];for(z=0;z<x.length;z++){var F=x[z]._index||z;if((I=m.slice()).push(F),s(y[F])&&s(x[z])){R.push(F);var B=y[F],N=x[z];s(B)&&!1!==B.visible&&!1===N.visible?a.push(p("invisible",i,I)):u(B,N,D,a,i,I)}}for(z=0;z<y.length;z++)(I=m.slice()).push(z),s(y[z])?-1===R.indexOf(z)&&a.push(p("unused",i,I)):a.push(p("object",i,I,y[z]))}else!s(y)&&s(x)?a.push(p("object",i,m,y)):c(y)||!c(x)||w||k?v in e?n.validate(y,b)?"enumerated"===b.valType&&(b.coerceNumber&&y!==+x||y!==x)&&a.push(p("dynamic",i,m,y,x)):a.push(p("value",i,m,y)):a.push(p("unused",i,m,y)):a.push(p("array",i,m,y));else a.push(p("schema",i,m))}}return a}e.exports=function(t,e){var r,c,h=i.get(),f=[],d={_context:n.extendFlat({},o)};l(t)?(d.data=n.extendDeep([],t),r=t):(d.data=[],r=[],f.push(p("array","data"))),s(e)?(d.layout=n.extendDeep({},e),c=e):(d.layout={},c={},arguments.length>1&&f.push(p("object","layout"))),a.supplyDefaults(d);for(var g=d._fullData,v=r.length,m=0;m<v;m++){var y=r[m],x=["data",m];if(s(y)){var b=g[m],_=b.type,w=h.traces[_].attributes;w.type={valType:"enumerated",values:[_]},!1===b.visible&&!1!==y.visible&&f.push(p("invisible",x)),u(y,b,w,f,x);var k=y.transforms,T=b.transforms;if(k){l(k)||f.push(p("array",x,["transforms"])),x.push("transforms");for(var M=0;M<k.length;M++){var A=["transforms",M],S=k[M].type;if(s(k[M])){var E=h.transforms[S]?h.transforms[S].attributes:{};E.type={valType:"enumerated",values:Object.keys(h.transforms)},u(k[M],T[M],E,f,x,A)}else f.push(p("object",x,A))}}}else f.push(p("object",x))}return u(c,d._fullLayout,function(t,e){for(var r=t.layout.layoutAttributes,a=0;a<e.length;a++){var i=e[a],o=t.traces[i.type],s=o.layoutAttributes;s&&(i.subplot?n.extendFlat(r[o.attributes.subplot.dflt],s):n.extendFlat(r,s))}return r}(h,g),f,"layout"),0===f.length?void 0:f};var h={object:function(t,e){return("layout"===t&&""===e?"The layout argument":"data"===t[0]&&""===e?"Trace "+t[1]+" in the data argument":f(t)+"key "+e)+" must be linked to an object container"},array:function(t,e){return("data"===t?"The data argument":f(t)+"key "+e)+" must be linked to an array container"},schema:function(t,e){return f(t)+"key "+e+" is not part of the schema"},unused:function(t,e,r){var n=s(r)?"container":"key";return f(t)+n+" "+e+" did not get coerced"},dynamic:function(t,e,r,n){return[f(t)+"key",e,"(set to '"+r+"')","got reset to","'"+n+"'","during defaults."].join(" ")},invisible:function(t,e){return(e?f(t)+"item "+e:"Trace "+t[1])+" got defaulted to be not visible"},value:function(t,e,r){return[f(t)+"key "+e,"is set to an invalid value ("+r+")"].join(" ")}};function f(t){return l(t)?"In data trace "+t[1]+", ":"In "+t+", "}function p(t,e,r,a,i){var o,s;r=r||"",l(e)?(o=e[0],s=e[1]):(o=e,s=null);var c=function(t){if(!l(t))return String(t);for(var e="",r=0;r<t.length;r++){var n=t[r];"number"==typeof n?e=e.substr(0,e.length-1)+"["+n+"]":e+=n,r<t.length-1&&(e+=".")}return e}(r),u=h[t](e,c,a,i);return n.log(u),{code:t,container:o,trace:s,path:r,astr:c,msg:u}}function d(t,e){var r=m(e),n=r.keyMinusId,a=r.id;return!!(n in t&&t[n]._isSubplotObj&&a)||e in t}function g(t,e){return e in t?t[e]:t[m(e).keyMinusId]}var v=n.counterRegex("([a-z]+)");function m(t){var e=t.match(v);return{keyMinusId:e&&e[1],id:e&&e[2]}}},{"../lib":717,"../plots/plots":826,"./plot_config":753,"./plot_schema":754}],760:[function(t,e,r){"use strict";e.exports={mode:{valType:"enumerated",dflt:"afterall",values:["immediate","next","afterall"]},direction:{valType:"enumerated",values:["forward","reverse"],dflt:"forward"},fromcurrent:{valType:"boolean",dflt:!1},frame:{duration:{valType:"number",min:0,dflt:500},redraw:{valType:"boolean",dflt:!0}},transition:{duration:{valType:"number",min:0,dflt:500,editType:"none"},easing:{valType:"enumerated",dflt:"cubic-in-out",values:["linear","quad","cubic","sin","exp","circle","elastic","back","bounce","linear-in","quad-in","cubic-in","sin-in","exp-in","circle-in","elastic-in","back-in","bounce-in","linear-out","quad-out","cubic-out","sin-out","exp-out","circle-out","elastic-out","back-out","bounce-out","linear-in-out","quad-in-out","cubic-in-out","sin-in-out","exp-in-out","circle-in-out","elastic-in-out","back-in-out","bounce-in-out"],editType:"none"},ordering:{valType:"enumerated",values:["layout first","traces first"],dflt:"layout first",editType:"none"}}}},{}],761:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../plot_api/plot_template");e.exports=function(t,e,r){var i,o,s=r.name,l=r.inclusionAttr||"visible",c=e[s],u=n.isArrayOrTypedArray(t[s])?t[s]:[],h=e[s]=[],f=a.arrayTemplater(e,s,l);for(i=0;i<u.length;i++){var p=u[i];n.isPlainObject(p)?o=f.newItem(p):(o=f.newItem({}))[l]=!1,o._index=i,!1!==o[l]&&r.handleItemDefaults(p,o,e,r),h.push(o)}var d=f.defaultItems();for(i=0;i<d.length;i++)(o=d[i])._index=h.length,r.handleItemDefaults({},o,e,r,{}),h.push(o);if(n.isArrayOrTypedArray(c)){var g=Math.min(c.length,h.length);for(i=0;i<g;i++)n.relinkPrivateKeys(h[i],c[i])}return h}},{"../lib":717,"../plot_api/plot_template":755}],762:[function(t,e,r){"use strict";var n=t("../components/fx/attributes");e.exports={type:{valType:"enumerated",values:[],dflt:"scatter",editType:"calc+clearAxisTypes",_noTemplating:!0},visible:{valType:"enumerated",values:[!0,!1,"legendonly"],dflt:!0,editType:"calc"},showlegend:{valType:"boolean",dflt:!0,editType:"style"},legendgroup:{valType:"string",dflt:"",editType:"style"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"style"},name:{valType:"string",editType:"style"},uid:{valType:"string",editType:"plot",anim:!0},ids:{valType:"data_array",editType:"calc",anim:!0},customdata:{valType:"data_array",editType:"calc"},meta:{valType:"any",arrayOk:!0,editType:"plot"},selectedpoints:{valType:"any",editType:"calc"},hoverinfo:{valType:"flaglist",flags:["x","y","z","text","name"],extras:["all","none","skip"],arrayOk:!0,dflt:"all",editType:"none"},hoverlabel:n.hoverlabel,stream:{token:{valType:"string",noBlank:!0,strict:!0,editType:"calc"},maxpoints:{valType:"number",min:0,max:1e4,dflt:500,editType:"calc"},editType:"calc"},transforms:{_isLinkedToArray:"transform",editType:"calc"},uirevision:{valType:"any",editType:"none"}}},{"../components/fx/attributes":621}],763:[function(t,e,r){"use strict";e.exports={xaxis:{valType:"subplotid",dflt:"x",editType:"calc+clearAxisTypes"},yaxis:{valType:"subplotid",dflt:"y",editType:"calc+clearAxisTypes"}}},{}],764:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../constants/numerical").FP_SAFE,o=t("../../registry");function s(t,e){var r,n,i=[],o=l(e),s=c(t,e),u=s.min,h=s.max;if(0===u.length||0===h.length)return a.simpleMap(e.range,e.r2l);var f=u[0].val,p=h[0].val;for(r=1;r<u.length&&f===p;r++)f=Math.min(f,u[r].val);for(r=1;r<h.length&&f===p;r++)p=Math.max(p,h[r].val);var d=!1;if(e.range){var g=a.simpleMap(e.range,e.r2l);d=g[1]<g[0]}"reversed"===e.autorange&&(d=!0,e.autorange=!0);var v,m,y,x,b,_,w=e.rangemode,k="tozero"===w,T="nonnegative"===w,M=e._length,A=M/10,S=function(t,r){var n=0;if(e.rangebreaks)for(var a=e.locateBreaks(t,r),i=0;i<a.length;i++){var o=a[i];n+=o.max-o.min}return n},E=0;for(r=0;r<u.length;r++)for(v=u[r],n=0;n<h.length;n++)(_=(m=h[n]).val-v.val-S(v.val,m.val))>0&&((b=M-o(v)-o(m))>A?_/b>E&&(y=v,x=m,E=_/b):_/M>E&&(y={val:v.val,pad:0},x={val:m.val,pad:0},E=_/M));if(f===p){var L=f-1,C=f+1;if(k)if(0===f)i=[0,1];else{var P=(f>0?h:u).reduce(function(t,e){return Math.max(t,o(e))},0),O=f/(1-Math.min(.5,P/M));i=f>0?[0,O]:[O,0]}else i=T?[Math.max(0,L),Math.max(1,C)]:[L,C]}else k?(y.val>=0&&(y={val:0,pad:0}),x.val<=0&&(x={val:0,pad:0})):T&&(y.val-E*o(y)<0&&(y={val:0,pad:0}),x.val<=0&&(x={val:1,pad:0})),E=(x.val-y.val-S(v.val,m.val))/(M-o(y)-o(x)),i=[y.val-E*o(y),x.val+E*o(x)];return d&&i.reverse(),a.simpleMap(i,e.l2r||Number)}function l(t){var e=t._length/20;return"domain"===t.constrain&&t._inputDomain&&(e*=(t._inputDomain[1]-t._inputDomain[0])/(t.domain[1]-t.domain[0])),function(t){return t.pad+(t.extrapad?e:0)}}function c(t,e){var r,n,a,i=e._id,o=t._fullData,s=t._fullLayout,l=[],c=[];function f(t,e){for(r=0;r<e.length;r++){var o=t[e[r]],s=(o._extremes||{})[i];if(!0===o.visible&&s){for(n=0;n<s.min.length;n++)a=s.min[n],u(l,a.val,a.pad,{extrapad:a.extrapad});for(n=0;n<s.max.length;n++)a=s.max[n],h(c,a.val,a.pad,{extrapad:a.extrapad})}}}return f(o,e._traceIndices),f(s.annotations||[],e._annIndices||[]),f(s.shapes||[],e._shapeIndices||[]),{min:l,max:c}}function u(t,e,r,n){f(t,e,r,n,d)}function h(t,e,r,n){f(t,e,r,n,g)}function f(t,e,r,n,a){for(var i=n.tozero,o=n.extrapad,s=!0,l=0;l<t.length&&s;l++){var c=t[l];if(a(c.val,e)&&c.pad>=r&&(c.extrapad||!o)){s=!1;break}a(e,c.val)&&c.pad<=r&&(o||!c.extrapad)&&(t.splice(l,1),l--)}if(s){var u=i&&0===e;t.push({val:e,pad:u?0:r,extrapad:!u&&o})}}function p(t){return n(t)&&Math.abs(t)<i}function d(t,e){return t<=e}function g(t,e){return t>=e}e.exports={getAutoRange:s,makePadFn:l,doAutoRange:function(t,e){if(e.setScale(),e.autorange){e.range=s(t,e),e._r=e.range.slice(),e._rl=a.simpleMap(e._r,e.r2l);var r=e._input,n={};n[e._attr+".range"]=e.range,n[e._attr+".autorange"]=e.autorange,o.call("_storeDirectGUIEdit",t.layout,t._fullLayout._preGUI,n),r.range=e.range.slice(),r.autorange=e.autorange}var i=e._anchorAxis;if(i&&i.rangeslider){var l=i.rangeslider[e._name];l&&"auto"===l.rangemode&&(l.range=s(t,e)),i._input.rangeslider[e._name]=a.extendFlat({},l)}},findExtremes:function(t,e,r){r||(r={});t._m||t.setScale();var a,o,s,l,c,f,d,g,v,m=[],y=[],x=e.length,b=r.padded||!1,_=r.tozero&&("linear"===t.type||"-"===t.type),w="log"===t.type,k=!1,T=r.vpadLinearized||!1;function M(t){if(Array.isArray(t))return k=!0,function(e){return Math.max(Number(t[e]||0),0)};var e=Math.max(Number(t||0),0);return function(){return e}}var A=M((t._m>0?r.ppadplus:r.ppadminus)||r.ppad||0),S=M((t._m>0?r.ppadminus:r.ppadplus)||r.ppad||0),E=M(r.vpadplus||r.vpad),L=M(r.vpadminus||r.vpad);if(!k){if(g=1/0,v=-1/0,w)for(a=0;a<x;a++)(o=e[a])<g&&o>0&&(g=o),o>v&&o<i&&(v=o);else for(a=0;a<x;a++)(o=e[a])<g&&o>-i&&(g=o),o>v&&o<i&&(v=o);e=[g,v],x=2}var C={tozero:_,extrapad:b};function P(r){s=e[r],n(s)&&(f=A(r),d=S(r),T?(l=t.c2l(s)-L(r),c=t.c2l(s)+E(r)):(g=s-L(r),v=s+E(r),w&&g<v/10&&(g=v/10),l=t.c2l(g),c=t.c2l(v)),_&&(l=Math.min(0,l),c=Math.max(0,c)),p(l)&&u(m,l,d,C),p(c)&&h(y,c,f,C))}var O=Math.min(6,x);for(a=0;a<O;a++)P(a);for(a=x-1;a>=O;a--)P(a);return{min:m,max:y,opts:r}},concatExtremes:c}},{"../../constants/numerical":693,"../../lib":717,"../../registry":846,"fast-isnumeric":228}],765:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../../plots/plots"),o=t("../../registry"),s=t("../../lib"),l=t("../../lib/svg_text_utils"),c=t("../../components/titles"),u=t("../../components/color"),h=t("../../components/drawing"),f=t("./layout_attributes"),p=t("./clean_ticks"),d=t("../../constants/numerical"),g=d.ONEAVGYEAR,v=d.ONEAVGMONTH,m=d.ONEDAY,y=d.ONEHOUR,x=d.ONEMIN,b=d.ONESEC,_=d.MINUS_SIGN,w=d.BADNUM,k=t("../../constants/alignment"),T=k.MID_SHIFT,M=k.CAP_SHIFT,A=k.LINE_SPACING,S=k.OPPOSITE_SIDE,E=e.exports={};E.setConvert=t("./set_convert");var L=t("./axis_autotype"),C=t("./axis_ids");E.id2name=C.id2name,E.name2id=C.name2id,E.cleanId=C.cleanId,E.list=C.list,E.listIds=C.listIds,E.getFromId=C.getFromId,E.getFromTrace=C.getFromTrace;var P=t("./autorange");E.getAutoRange=P.getAutoRange,E.findExtremes=P.findExtremes,E.coerceRef=function(t,e,r,n,a,i){var o=n.charAt(n.length-1),l=r._fullLayout._subplots[o+"axis"],c=n+"ref",u={};return a||(a=l[0]||i),i||(i=a),u[c]={valType:"enumerated",values:l.concat(i?[i]:[]),dflt:a},s.coerce(t,e,u,c)},E.coercePosition=function(t,e,r,n,a,i){var o,l;if("paper"===n||"pixel"===n)o=s.ensureNumber,l=r(a,i);else{var c=E.getFromId(e,n);l=r(a,i=c.fraction2r(i)),o=c.cleanPos}t[a]=o(l)},E.cleanPosition=function(t,e,r){return("paper"===r||"pixel"===r?s.ensureNumber:E.getFromId(e,r).cleanPos)(t)},E.redrawComponents=function(t,e){e=e||E.listIds(t);var r=t._fullLayout;function n(n,a,i,s){for(var l=o.getComponentMethod(n,a),c={},u=0;u<e.length;u++)for(var h=r[E.id2name(e[u])][i],f=0;f<h.length;f++){var p=h[f];if(!c[p]&&(l(t,p),c[p]=1,s))return}}n("annotations","drawOne","_annIndices"),n("shapes","drawOne","_shapeIndices"),n("images","draw","_imgIndices",!0)};var O=E.getDataConversions=function(t,e,r,n){var a,i="x"===r||"y"===r||"z"===r?r:n;if(Array.isArray(i)){if(a={type:L(n),_categories:[]},E.setConvert(a),"category"===a.type)for(var o=0;o<n.length;o++)a.d2c(n[o])}else a=E.getFromTrace(t,e,i);return a?{d2c:a.d2c,c2d:a.c2d}:"ids"===i?{d2c:I,c2d:I}:{d2c:z,c2d:z}};function z(t){return+t}function I(t){return String(t)}E.getDataToCoordFunc=function(t,e,r,n){return O(t,e,r,n).d2c},E.counterLetter=function(t){var e=t.charAt(0);return"x"===e?"y":"y"===e?"x":void 0},E.minDtick=function(t,e,r,n){-1===["log","category","multicategory"].indexOf(t.type)&&n?void 0===t._minDtick?(t._minDtick=e,t._forceTick0=r):t._minDtick&&((t._minDtick/e+1e-6)%1<2e-6&&((r-t._forceTick0)/e%1+1.000001)%1<2e-6?(t._minDtick=e,t._forceTick0=r):((e/t._minDtick+1e-6)%1>2e-6||((r-t._forceTick0)/t._minDtick%1+1.000001)%1>2e-6)&&(t._minDtick=0)):t._minDtick=0},E.saveRangeInitial=function(t,e){for(var r=E.list(t,"",!0),n=!1,a=0;a<r.length;a++){var i=r[a],o=void 0===i._rangeInitial,s=o||!(i.range[0]===i._rangeInitial[0]&&i.range[1]===i._rangeInitial[1]);(o&&!1===i.autorange||e&&s)&&(i._rangeInitial=i.range.slice(),n=!0)}return n},E.saveShowSpikeInitial=function(t,e){for(var r=E.list(t,"",!0),n=!1,a="on",i=0;i<r.length;i++){var o=r[i],s=void 0===o._showSpikeInitial,l=s||!(o.showspikes===o._showspikes);(s||e&&l)&&(o._showSpikeInitial=o.showspikes,n=!0),"on"!==a||o.showspikes||(a="off")}return t._fullLayout._cartesianSpikesEnabled=a,n},E.autoBin=function(t,e,r,n,i,o){var l,c=s.aggNums(Math.min,null,t),u=s.aggNums(Math.max,null,t);if("category"===e.type||"multicategory"===e.type)return{start:c-.5,end:u+.5,size:Math.max(1,Math.round(o)||1),_dataSpan:u-c};if(i||(i=e.calendar),l="log"===e.type?{type:"linear",range:[c,u]}:{type:e.type,range:s.simpleMap([c,u],e.c2r,0,i),calendar:i},E.setConvert(l),o=o&&p.dtick(o,l.type))l.dtick=o,l.tick0=p.tick0(void 0,l.type,i);else{var h;if(r)h=(u-c)/r;else{var f=s.distinctVals(t),d=Math.pow(10,Math.floor(Math.log(f.minDiff)/Math.LN10)),g=d*s.roundUp(f.minDiff/d,[.9,1.9,4.9,9.9],!0);h=Math.max(g,2*s.stdev(t)/Math.pow(t.length,n?.25:.4)),a(h)||(h=1)}E.autoTicks(l,h)}var v,y=l.dtick,x=E.tickIncrement(E.tickFirst(l),y,"reverse",i);if("number"==typeof y)v=(x=function(t,e,r,n,i){var o=0,s=0,l=0,c=0;function u(e){return(1+100*(e-t)/r.dtick)%100<2}for(var h=0;h<e.length;h++)e[h]%1==0?l++:a(e[h])||c++,u(e[h])&&o++,u(e[h]+r.dtick/2)&&s++;var f=e.length-c;if(l===f&&"date"!==r.type)r.dtick<1?t=n-.5*r.dtick:(t-=.5)+r.dtick<n&&(t+=r.dtick);else if(s<.1*f&&(o>.3*f||u(n)||u(i))){var p=r.dtick/2;t+=t+p<n?p:-p}return t}(x,t,l,c,u))+(1+Math.floor((u-x)/y))*y;else for("M"===l.dtick.charAt(0)&&(x=function(t,e,r,n,a){var i=s.findExactDates(e,a);if(i.exactDays>.8){var o=Number(r.substr(1));i.exactYears>.8&&o%12==0?t=E.tickIncrement(t,"M6","reverse")+1.5*m:i.exactMonths>.8?t=E.tickIncrement(t,"M1","reverse")+15.5*m:t-=m/2;var l=E.tickIncrement(t,r);if(l<=n)return l}return t}(x,t,y,c,i)),v=x,0;v<=u;)v=E.tickIncrement(v,y,!1,i),0;return{start:e.c2r(x,0,i),end:e.c2r(v,0,i),size:y,_dataSpan:u-c}},E.prepTicks=function(t){var e=s.simpleMap(t.range,t.r2l);if("auto"===t.tickmode||!t.dtick){var r,n=t.nticks;n||("category"===t.type||"multicategory"===t.type?(r=t.tickfont?1.2*(t.tickfont.size||12):15,n=t._length/r):(r="y"===t._id.charAt(0)?40:80,n=s.constrain(t._length/r,4,9)+1),"radialaxis"===t._name&&(n*=2)),"array"===t.tickmode&&(n*=100),t._roughDTick=(Math.abs(e[1]-e[0])-(t._lBreaks||0))/n,E.autoTicks(t,t._roughDTick),t._minDtick>0&&t.dtick<2*t._minDtick&&(t.dtick=t._minDtick,t.tick0=t.l2r(t._forceTick0))}t.tick0||(t.tick0="date"===t.type?"2000-01-01":0),"date"===t.type&&t.dtick<.1&&(t.dtick=.1),q(t)},E.calcTicks=function(t){E.prepTicks(t);var e=s.simpleMap(t.range,t.r2l);if("array"===t.tickmode)return function(t){var e=t.tickvals,r=t.ticktext,n=new Array(e.length),a=s.simpleMap(t.range,t.r2l),i=1.0001*a[0]-1e-4*a[1],o=1.0001*a[1]-1e-4*a[0],l=Math.min(i,o),c=Math.max(i,o),u=0;Array.isArray(r)||(r=[]);var h="category"===t.type?t.d2l_noadd:t.d2l;"log"===t.type&&"L"!==String(t.dtick).charAt(0)&&(t.dtick="L"+Math.pow(10,Math.floor(Math.min(t.range[0],t.range[1]))-1));for(var f=0;f<e.length;f++){var p=h(e[f]);p>l&&p<c&&(void 0===r[f]?n[u]=E.tickText(t,p):n[u]=H(t,p,String(r[f])),u++)}u<e.length&&n.splice(u,e.length-u);t.rangebreaks&&(n=n.filter(function(e){return t.maskBreaks(e.x)!==w}));return n}(t);t._tmin=E.tickFirst(t);var r=1.0001*e[0]-1e-4*e[1],n=1.0001*e[1]-1e-4*e[0],i=e[1]<e[0];if(t._tmin<r!==i)return[];"category"!==t.type&&"multicategory"!==t.type||(n=i?Math.max(-.5,n):Math.min(t._categories.length-.5,n));var o,l="log"===t.type&&!(a(t.dtick)||"L"===t.dtick.charAt(0));if(function(){var e=null,r=Math.max(1e3,t._length||0);o=[];for(var a=t._tmin;(i?a>=n:a<=n)&&!(o.length>r||a===e);a=E.tickIncrement(a,t.dtick,i,t.calendar)){e=a;var s=!1;l&&a!==(0|a)&&(s=!0),o.push({minor:s,value:a})}}(),t.rangebreaks){if("auto"===t.tickmode)for(var c=0;c<o.length;c++){var u=o[c].value;if(t.maskBreaks(u)===w)for(var h=0;h<t._rangebreaks.length;h++){var f=t._rangebreaks[h];if(u>=f.min&&u<f.max){o[c].value=f.max;break}}}var p=o.length;if(p>2){for(var d,g=2*(t.tickfont?t.tickfont.size:12),v=[],m=i?1:-1,y=i?p-1:0,x=i?0:p-1;m*x<=m*y;x+=m){var b=t.c2p(o[x].value);(void 0===d||Math.abs(b-d)>g)&&(d=b,v.push(o[x]))}o=v.reverse()}}ot(t)&&360===Math.abs(e[1]-e[0])&&o.pop(),t._tmax=(o[o.length-1]||{}).value,t._prevDateHead="",t._inCalcTicks=!0;for(var _=new Array(o.length),k=0;k<o.length;k++){var T=o[k].minor,M=o[k].value;_[k]=E.tickText(t,M,!1,T)}return t._inCalcTicks=!1,_};var D=[2,5,10],R=[1,2,3,6,12],F=[1,2,5,10,15,30],B=[1,2,3,7,14],N=[-.046,0,.301,.477,.602,.699,.778,.845,.903,.954,1],j=[-.301,0,.301,.699,1],V=[15,30,45,90,180];function U(t,e,r){return e*s.roundUp(t/e,r)}function q(t){var e=t.dtick;if(t._tickexponent=0,a(e)||"string"==typeof e||(e=1),"category"!==t.type&&"multicategory"!==t.type||(t._tickround=null),"date"===t.type){var r=t.r2l(t.tick0),n=t.l2r(r).replace(/(^-|i)/g,""),i=n.length;if("M"===String(e).charAt(0))i>10||"01-01"!==n.substr(5)?t._tickround="d":t._tickround=+e.substr(1)%12==0?"y":"m";else if(e>=m&&i<=10||e>=15*m)t._tickround="d";else if(e>=x&&i<=16||e>=y)t._tickround="M";else if(e>=b&&i<=19||e>=x)t._tickround="S";else{var o=t.l2r(r+e).replace(/^-/,"").length;t._tickround=Math.max(i,o)-20,t._tickround<0&&(t._tickround=4)}}else if(a(e)||"L"===e.charAt(0)){var s=t.range.map(t.r2d||Number);a(e)||(e=Number(e.substr(1))),t._tickround=2-Math.floor(Math.log(e)/Math.LN10+.01);var l=Math.max(Math.abs(s[0]),Math.abs(s[1])),c=Math.floor(Math.log(l)/Math.LN10+.01);Math.abs(c)>3&&(Y(t.exponentformat)&&!W(c)?t._tickexponent=3*Math.round((c-1)/3):t._tickexponent=c)}else t._tickround=null}function H(t,e,r){var n=t.tickfont||{};return{x:e,dx:0,dy:0,text:r||"",fontSize:n.size,font:n.family,fontColor:n.color}}E.autoTicks=function(t,e){var r;function n(t){return Math.pow(t,Math.floor(Math.log(e)/Math.LN10))}if("date"===t.type){t.tick0=s.dateTick0(t.calendar);var i=2*e;i>g?(e/=g,r=n(10),t.dtick="M"+12*U(e,r,D)):i>v?(e/=v,t.dtick="M"+U(e,1,R)):i>m?(t.dtick=U(e,m,t._hasDayOfWeekBreaks?[1,7,14]:B),t.tick0=s.dateTick0(t.calendar,!0)):i>y?t.dtick=U(e,y,R):i>x?t.dtick=U(e,x,F):i>b?t.dtick=U(e,b,F):(r=n(10),t.dtick=U(e,r,D))}else if("log"===t.type){t.tick0=0;var o=s.simpleMap(t.range,t.r2l);if(e>.7)t.dtick=Math.ceil(e);else if(Math.abs(o[1]-o[0])<1){var l=1.5*Math.abs((o[1]-o[0])/e);e=Math.abs(Math.pow(10,o[1])-Math.pow(10,o[0]))/l,r=n(10),t.dtick="L"+U(e,r,D)}else t.dtick=e>.3?"D2":"D1"}else"category"===t.type||"multicategory"===t.type?(t.tick0=0,t.dtick=Math.ceil(Math.max(e,1))):ot(t)?(t.tick0=0,r=1,t.dtick=U(e,r,V)):(t.tick0=0,r=n(10),t.dtick=U(e,r,D));if(0===t.dtick&&(t.dtick=1),!a(t.dtick)&&"string"!=typeof t.dtick){var c=t.dtick;throw t.dtick=1,"ax.dtick error: "+String(c)}},E.tickIncrement=function(t,e,r,i){var o=r?-1:1;if(a(e))return t+o*e;var l=e.charAt(0),c=o*Number(e.substr(1));if("M"===l)return s.incrementMonth(t,c,i);if("L"===l)return Math.log(Math.pow(10,t)+c)/Math.LN10;if("D"===l){var u="D2"===e?j:N,h=t+.01*o,f=s.roundUp(s.mod(h,1),u,r);return Math.floor(h)+Math.log(n.round(Math.pow(10,f),1))/Math.LN10}throw"unrecognized dtick "+String(e)},E.tickFirst=function(t){var e=t.r2l||Number,r=s.simpleMap(t.range,e),i=r[1]<r[0],o=i?Math.floor:Math.ceil,l=1.0001*r[0]-1e-4*r[1],c=t.dtick,u=e(t.tick0);if(a(c)){var h=o((l-u)/c)*c+u;return"category"!==t.type&&"multicategory"!==t.type||(h=s.constrain(h,0,t._categories.length-1)),h}var f=c.charAt(0),p=Number(c.substr(1));if("M"===f){for(var d,g,v,m=0,y=u;m<10;){if(((d=E.tickIncrement(y,c,i,t.calendar))-l)*(y-l)<=0)return i?Math.min(y,d):Math.max(y,d);g=(l-(y+d)/2)/(d-y),v=f+(Math.abs(Math.round(g))||1)*p,y=E.tickIncrement(y,v,g<0?!i:i,t.calendar),m++}return s.error("tickFirst did not converge",t),y}if("L"===f)return Math.log(o((Math.pow(10,l)-u)/p)*p+u)/Math.LN10;if("D"===f){var x="D2"===c?j:N,b=s.roundUp(s.mod(l,1),x,i);return Math.floor(l)+Math.log(n.round(Math.pow(10,b),1))/Math.LN10}throw"unrecognized dtick "+String(c)},E.tickText=function(t,e,r,n){var i,o=H(t,e),l="array"===t.tickmode,c=r||l,u=t.type,h="category"===u?t.d2l_noadd:t.d2l;if(l&&Array.isArray(t.ticktext)){var f=s.simpleMap(t.range,t.r2l),p=(Math.abs(f[1]-f[0])-(t._lBreaks||0))/1e4;for(i=0;i<t.ticktext.length&&!(Math.abs(e-h(t.tickvals[i]))<p);i++);if(i<t.ticktext.length)return o.text=String(t.ticktext[i]),o}function d(n){if(void 0===n)return!0;if(r)return"none"===n;var a={first:t._tmin,last:t._tmax}[n];return"all"!==n&&e!==a}var g=r?"never":"none"!==t.exponentformat&&d(t.showexponent)?"hide":"";if("date"===u?function(t,e,r,n){var i=t._tickround,o=r&&t.hoverformat||E.getTickFormat(t);n&&(i=a(i)?4:{y:"m",m:"d",d:"M",M:"S",S:4}[i]);var l,c=s.formatDate(e.x,o,i,t._dateFormat,t.calendar,t._extraFormat),u=c.indexOf("\n");-1!==u&&(l=c.substr(u+1),c=c.substr(0,u));n&&("00:00:00"===c||"00:00"===c?(c=l,l=""):8===c.length&&(c=c.replace(/:00$/,"")));l&&(r?"d"===i?c+=", "+l:c=l+(c?", "+c:""):t._inCalcTicks&&l===t._prevDateHead||(c+="<br>"+l,t._prevDateHead=l));e.text=c}(t,o,r,c):"log"===u?function(t,e,r,n,i){var o=t.dtick,l=e.x,c=t.tickformat,u="string"==typeof o&&o.charAt(0);"never"===i&&(i="");n&&"L"!==u&&(o="L3",u="L");if(c||"L"===u)e.text=X(Math.pow(10,l),t,i,n);else if(a(o)||"D"===u&&s.mod(l+.01,1)<.1){var h=Math.round(l),f=Math.abs(h),p=t.exponentformat;"power"===p||Y(p)&&W(h)?(e.text=0===h?1:1===h?"10":"10<sup>"+(h>1?"":_)+f+"</sup>",e.fontSize*=1.25):("e"===p||"E"===p)&&f>2?e.text="1"+p+(h>0?"+":_)+f:(e.text=X(Math.pow(10,l),t,"","fakehover"),"D1"===o&&"y"===t._id.charAt(0)&&(e.dy-=e.fontSize/6))}else{if("D"!==u)throw"unrecognized dtick "+String(o);e.text=String(Math.round(Math.pow(10,s.mod(l,1)))),e.fontSize*=.75}if("D1"===t.dtick){var d=String(e.text).charAt(0);"0"!==d&&"1"!==d||("y"===t._id.charAt(0)?e.dx-=e.fontSize/4:(e.dy+=e.fontSize/2,e.dx+=(t.range[1]>t.range[0]?1:-1)*e.fontSize*(l<0?.5:.25)))}}(t,o,0,c,g):"category"===u?function(t,e){var r=t._categories[Math.round(e.x)];void 0===r&&(r="");e.text=String(r)}(t,o):"multicategory"===u?function(t,e,r){var n=Math.round(e.x),a=t._categories[n]||[],i=void 0===a[1]?"":String(a[1]),o=void 0===a[0]?"":String(a[0]);r?e.text=o+" - "+i:(e.text=i,e.text2=o)}(t,o,r):ot(t)?function(t,e,r,n,a){if("radians"!==t.thetaunit||r)e.text=X(e.x,t,a,n);else{var i=e.x/180;if(0===i)e.text="0";else{var o=function(t){function e(t,e){return Math.abs(t-e)<=1e-6}var r=function(t){var r=1;for(;!e(Math.round(t*r)/r,t);)r*=10;return r}(t),n=t*r,a=Math.abs(function t(r,n){return e(n,0)?r:t(n,r%n)}(n,r));return[Math.round(n/a),Math.round(r/a)]}(i);if(o[1]>=100)e.text=X(s.deg2rad(e.x),t,a,n);else{var l=e.x<0;1===o[1]?1===o[0]?e.text="\u03c0":e.text=o[0]+"\u03c0":e.text=["<sup>",o[0],"</sup>","\u2044","<sub>",o[1],"</sub>","\u03c0"].join(""),l&&(e.text=_+e.text)}}}}(t,o,r,c,g):function(t,e,r,n,a){"never"===a?a="":"all"===t.showexponent&&Math.abs(e.x/t.dtick)<1e-6&&(a="hide");e.text=X(e.x,t,a,n)}(t,o,0,c,g),n||(t.tickprefix&&!d(t.showtickprefix)&&(o.text=t.tickprefix+o.text),t.ticksuffix&&!d(t.showticksuffix)&&(o.text+=t.ticksuffix)),"boundaries"===t.tickson||t.showdividers){var v=function(e){var r=t.l2p(e);return r>=0&&r<=t._length?e:null};o.xbnd=[v(o.x-.5),v(o.x+t.dtick-.5)]}return o},E.hoverLabelText=function(t,e,r){if(r!==w&&r!==e)return E.hoverLabelText(t,e)+" - "+E.hoverLabelText(t,r);var n="log"===t.type&&e<=0,a=E.tickText(t,t.c2l(n?-e:e),"hover").text;return n?0===e?"0":_+a:a};var G=["f","p","n","\u03bc","m","","k","M","G","T"];function Y(t){return"SI"===t||"B"===t}function W(t){return t>14||t<-15}function X(t,e,r,n){var i=t<0,o=e._tickround,l=r||e.exponentformat||"B",c=e._tickexponent,u=E.getTickFormat(e),h=e.separatethousands;if(n){var f={exponentformat:l,dtick:"none"===e.showexponent?e.dtick:a(t)&&Math.abs(t)||1,range:"none"===e.showexponent?e.range.map(e.r2d):[0,t||1]};q(f),o=(Number(f._tickround)||0)+4,c=f._tickexponent,e.hoverformat&&(u=e.hoverformat)}if(u)return e._numFormat(u)(t).replace(/-/g,_);var p,d=Math.pow(10,-o)/2;if("none"===l&&(c=0),(t=Math.abs(t))<d)t="0",i=!1;else{if(t+=d,c&&(t*=Math.pow(10,-c),o+=c),0===o)t=String(Math.floor(t));else if(o<0){t=(t=String(Math.round(t))).substr(0,t.length+o);for(var g=o;g<0;g++)t+="0"}else{var v=(t=String(t)).indexOf(".")+1;v&&(t=t.substr(0,v+o).replace(/\.?0+$/,""))}t=s.numSeparate(t,e._separators,h)}c&&"hide"!==l&&(Y(l)&&W(c)&&(l="power"),p=c<0?_+-c:"power"!==l?"+"+c:String(c),"e"===l||"E"===l?t+=l+p:"power"===l?t+="\xd710<sup>"+p+"</sup>":"B"===l&&9===c?t+="B":Y(l)&&(t+=G[c/3+5]));return i?_+t:t}function Z(t,e){for(var r=[],n={},a=0;a<e.length;a++){var i=e[a];n[i.text2]?n[i.text2].push(i.x):n[i.text2]=[i.x]}for(var o in n)r.push(H(t,s.interp(n[o],.5),o));return r}function J(t){return[t.text,t.x,t.axInfo,t.font,t.fontSize,t.fontColor].join("_")}function K(t){var e=t.title.font.size,r=(t.title.text.match(l.BR_TAG_ALL)||[]).length;return t.title.hasOwnProperty("standoff")?r?e*(M+r*A):e*M:r?e*(r+1)*A:e}function Q(t,e){var r=t.l2p(e);return r>1&&r<t._length-1}function $(t){var e=n.select(t),r=e.select(".text-math-group");return r.empty()?e.select("text"):r}function tt(t){return t._id+".automargin"}function et(t){return tt(t)+".mirror"}function rt(t){return t._id+".rangeslider"}function nt(t,e){for(var r=0;r<e.length;r++)-1===t.indexOf(e[r])&&t.push(e[r])}function at(t,e,r){var n,a,i=[],o=[],l=t.layout;for(n=0;n<e.length;n++)i.push(E.getFromId(t,e[n]));for(n=0;n<r.length;n++)o.push(E.getFromId(t,r[n]));var c=Object.keys(f),u=["anchor","domain","overlaying","position","side","tickangle","editType"],h=["linear","log"];for(n=0;n<c.length;n++){var p=c[n],d=i[0][p],g=o[0][p],v=!0,m=!1,y=!1;if("_"!==p.charAt(0)&&"function"!=typeof d&&-1===u.indexOf(p)){for(a=1;a<i.length&&v;a++){var x=i[a][p];"type"===p&&-1!==h.indexOf(d)&&-1!==h.indexOf(x)&&d!==x?m=!0:x!==d&&(v=!1)}for(a=1;a<o.length&&v;a++){var b=o[a][p];"type"===p&&-1!==h.indexOf(g)&&-1!==h.indexOf(b)&&g!==b?y=!0:o[a][p]!==g&&(v=!1)}v&&(m&&(l[i[0]._name].type="linear"),y&&(l[o[0]._name].type="linear"),it(l,p,i,o,t._fullLayout._dfltTitle))}}for(n=0;n<t._fullLayout.annotations.length;n++){var _=t._fullLayout.annotations[n];-1!==e.indexOf(_.xref)&&-1!==r.indexOf(_.yref)&&s.swapAttrs(l.annotations[n],["?"])}}function it(t,e,r,n,a){var i,o=s.nestedProperty,l=o(t[r[0]._name],e).get(),c=o(t[n[0]._name],e).get();for("title"===e&&(l&&l.text===a.x&&(l.text=a.y),c&&c.text===a.y&&(c.text=a.x)),i=0;i<r.length;i++)o(t,r[i]._name+"."+e).set(c);for(i=0;i<n.length;i++)o(t,n[i]._name+"."+e).set(l)}function ot(t){return"angularaxis"===t._id}E.getTickFormat=function(t){var e,r,n,a,i,o,s,l;function c(t){return"string"!=typeof t?t:Number(t.replace("M",""))*v}function u(t,e){var r=["L","D"];if(typeof t==typeof e){if("number"==typeof t)return t-e;var n=r.indexOf(t.charAt(0)),a=r.indexOf(e.charAt(0));return n===a?Number(t.replace(/(L|D)/g,""))-Number(e.replace(/(L|D)/g,"")):n-a}return"number"==typeof t?1:-1}function h(t,e){var r=null===e[0],n=null===e[1],a=u(t,e[0])>=0,i=u(t,e[1])<=0;return(r||a)&&(n||i)}if(t.tickformatstops&&t.tickformatstops.length>0)switch(t.type){case"date":case"linear":for(e=0;e<t.tickformatstops.length;e++)if((n=t.tickformatstops[e]).enabled&&(a=t.dtick,i=n.dtickrange,o=void 0,s=void 0,l=void 0,o=c||function(t){return t},s=i[0],l=i[1],(!s&&"number"!=typeof s||o(s)<=o(a))&&(!l&&"number"!=typeof l||o(l)>=o(a)))){r=n;break}break;case"log":for(e=0;e<t.tickformatstops.length;e++)if((n=t.tickformatstops[e]).enabled&&h(t.dtick,n.dtickrange)){r=n;break}}return r?r.value:t.tickformat},E.getSubplots=function(t,e){var r=t._fullLayout._subplots,n=r.cartesian.concat(r.gl2d||[]),a=e?E.findSubplotsWithAxis(n,e):n;return a.sort(function(t,e){var r=t.substr(1).split("y"),n=e.substr(1).split("y");return r[0]===n[0]?+r[1]-+n[1]:+r[0]-+n[0]}),a},E.findSubplotsWithAxis=function(t,e){for(var r=new RegExp("x"===e._id.charAt(0)?"^"+e._id+"y":e._id+"$"),n=[],a=0;a<t.length;a++){var i=t[a];r.test(i)&&n.push(i)}return n},E.makeClipPaths=function(t){var e=t._fullLayout;if(!e._hasOnlyLargeSploms){var r,a,i={_offset:0,_length:e.width,_id:""},o={_offset:0,_length:e.height,_id:""},s=E.list(t,"x",!0),l=E.list(t,"y",!0),c=[];for(r=0;r<s.length;r++)for(c.push({x:s[r],y:o}),a=0;a<l.length;a++)0===r&&c.push({x:i,y:l[a]}),c.push({x:s[r],y:l[a]});var u=e._clips.selectAll(".axesclip").data(c,function(t){return t.x._id+t.y._id});u.enter().append("clipPath").classed("axesclip",!0).attr("id",function(t){return"clip"+e._uid+t.x._id+t.y._id}).append("rect"),u.exit().remove(),u.each(function(t){n.select(this).select("rect").attr({x:t.x._offset||0,y:t.y._offset||0,width:t.x._length||1,height:t.y._length||1})})}},E.draw=function(t,e,r){var n=t._fullLayout;"redraw"===e&&n._paper.selectAll("g.subplot").each(function(t){var e=t[0],r=n._plots[e],a=r.xaxis,i=r.yaxis;r.xaxislayer.selectAll("."+a._id+"tick").remove(),r.yaxislayer.selectAll("."+i._id+"tick").remove(),r.xaxislayer.selectAll("."+a._id+"tick2").remove(),r.yaxislayer.selectAll("."+i._id+"tick2").remove(),r.xaxislayer.selectAll("."+a._id+"divider").remove(),r.yaxislayer.selectAll("."+i._id+"divider").remove(),r.gridlayer&&r.gridlayer.selectAll("path").remove(),r.zerolinelayer&&r.zerolinelayer.selectAll("path").remove(),n._infolayer.select(".g-"+a._id+"title").remove(),n._infolayer.select(".g-"+i._id+"title").remove()});var a=e&&"redraw"!==e?e:E.listIds(t);return s.syncOrAsync(a.map(function(e){return function(){if(e){var n=E.getFromId(t,e),a=E.drawOne(t,n,r);return n._r=n.range.slice(),n._rl=s.simpleMap(n._r,n.r2l),a}}}))},E.drawOne=function(t,e,r){var n,a,l;r=r||{},e.setScale();var f=t._fullLayout,p=e._id,d=p.charAt(0),g=E.counterLetter(p),v=f._plots[e._mainSubplot];if(v){var m=v[d+"axislayer"],y=e._mainLinePosition,x=e._mainMirrorPosition,b=e._vals=E.calcTicks(e),_=[e.mirror,y,x].join("_");for(n=0;n<b.length;n++)b[n].axInfo=_;e._selections={},e._tickAngles&&(e._prevTickAngles=e._tickAngles),e._tickAngles={},e._depth=null;var w={};if(e.visible){var k,T,M=E.makeTransFn(e);if("boundaries"===e.tickson){var L=function(t,e){var r,n=[],a=function(t,e){var r=t.xbnd[e];null!==r&&n.push(s.extendFlat({},t,{x:r}))};if(e.length){for(r=0;r<e.length;r++)a(e[r],0);a(e[r-1],1)}return n}(0,b);T=E.clipEnds(e,L),k="inside"===e.ticks?T:L}else T=E.clipEnds(e,b),k="inside"===e.ticks?T:b;var C=e._gridVals=T,P=function(t,e){var r,n,a=[],i=function(t,e){var r=t.xbnd[e];null!==r&&a.push(s.extendFlat({},t,{x:r}))};if(t.showdividers&&e.length){for(r=0;r<e.length;r++){var o=e[r];o.text2!==n&&i(o,0),n=o.text2}i(e[r-1],1)}return a}(e,b);if(!f._hasOnlyLargeSploms){var O=e._subplotsWith,z={};for(n=0;n<O.length;n++){a=O[n];var I=(l=f._plots[a])[g+"axis"],D=I._mainAxis._id;if(!z[D]){z[D]=1;var R="x"===d?"M0,"+I._offset+"v"+I._length:"M"+I._offset+",0h"+I._length;E.drawGrid(t,e,{vals:C,counterAxis:I,layer:l.gridlayer.select("."+p),path:R,transFn:M}),E.drawZeroLine(t,e,{counterAxis:I,layer:l.zerolinelayer,path:R,transFn:M})}}}var F=E.getTickSigns(e),B=[];if(e.ticks){var N,j,V,U=E.makeTickPath(e,y,F[2]);if(e._anchorAxis&&e.mirror&&!0!==e.mirror?(N=E.makeTickPath(e,x,F[3]),j=U+N):(N="",j=U),e.showdividers&&"outside"===e.ticks&&"boundaries"===e.tickson){var q={};for(n=0;n<P.length;n++)q[P[n].x]=1;V=function(t){return q[t.x]?N:j}}else V=j;E.drawTicks(t,e,{vals:k,layer:m,path:V,transFn:M}),"allticks"===e.mirror&&(B=Object.keys(e._linepositions||{}))}for(n=0;n<B.length;n++){a=B[n],l=f._plots[a];var H=e._linepositions[a]||[],G=E.makeTickPath(e,H[0],F[0])+E.makeTickPath(e,H[1],F[1]);E.drawTicks(t,e,{vals:k,layer:l[d+"axislayer"],path:G,transFn:M})}var Y=[];if(Y.push(function(){return E.drawLabels(t,e,{vals:b,layer:m,transFn:M,labelFns:E.makeLabelFns(e,y)})}),"multicategory"===e.type){var W={x:2,y:10}[d];Y.push(function(){var r={x:"height",y:"width"}[d],n=Q()[r]+W+(e._tickAngles[p+"tick"]?e.tickfont.size*A:0);return E.drawLabels(t,e,{vals:Z(e,b),layer:m,cls:p+"tick2",repositionOnUpdate:!0,secondary:!0,transFn:M,labelFns:E.makeLabelFns(e,y+n*F[4])})}),Y.push(function(){return e._depth=F[4]*(Q("tick2")[e.side]-y),function(t,e,r){var n=e._id+"divider",a=r.vals,i=r.layer.selectAll("path."+n).data(a,J);i.exit().remove(),i.enter().insert("path",":first-child").classed(n,1).classed("crisp",1).call(u.stroke,e.dividercolor).style("stroke-width",h.crispRound(t,e.dividerwidth,1)+"px"),i.attr("transform",r.transFn).attr("d",r.path)}(t,e,{vals:P,layer:m,path:E.makeTickPath(e,y,F[4],e._depth),transFn:M})})}else e.title.hasOwnProperty("standoff")&&Y.push(function(){e._depth=F[4]*(Q()[e.side]-y)});var X=o.getComponentMethod("rangeslider","isVisible")(e);return Y.push(function(){var r,n,a,s,l=e.side.charAt(0),c=S[e.side].charAt(0),u=E.getPxPosition(t,e),h="outside"===e.ticks?e.ticklen:0;if((e.automargin||X)&&("multicategory"===e.type?r=Q("tick2"):(r=Q(),"x"===d&&"b"===l&&(e._depth=Math.max(r.width>0?r.bottom-u:0,h)))),e.automargin){n={x:0,y:0,r:0,l:0,t:0,b:0};var p=[0,1];if("x"===d){if("b"===l?n[l]=e._depth:(n[l]=e._depth=Math.max(r.width>0?u-r.top:0,h),p.reverse()),r.width>0){var v=r.right-(e._offset+e._length);v>0&&(n.xr=1,n.r=v);var m=e._offset-r.left;m>0&&(n.xl=0,n.l=m)}}else if("l"===l?n[l]=e._depth=Math.max(r.height>0?u-r.left:0,h):(n[l]=e._depth=Math.max(r.height>0?r.right-u:0,h),p.reverse()),r.height>0){var y=r.bottom-(e._offset+e._length);y>0&&(n.yb=0,n.b=y);var x=e._offset-r.top;x>0&&(n.yt=1,n.t=x)}n[g]="free"===e.anchor?e.position:e._anchorAxis.domain[p[0]],e.title.text!==f._dfltTitle[d]&&(n[l]+=K(e)+(e.title.standoff||0)),e.mirror&&"free"!==e.anchor&&((a={x:0,y:0,r:0,l:0,t:0,b:0})[c]=e.linewidth,e.mirror&&!0!==e.mirror&&(a[c]+=h),!0===e.mirror||"ticks"===e.mirror?a[g]=e._anchorAxis.domain[p[1]]:"all"!==e.mirror&&"allticks"!==e.mirror||(a[g]=[e._counterDomainMin,e._counterDomainMax][p[1]]))}X&&(s=o.getComponentMethod("rangeslider","autoMarginOpts")(t,e)),i.autoMargin(t,tt(e),n),i.autoMargin(t,et(e),a),i.autoMargin(t,rt(e),s)}),r.skipTitle||X&&"bottom"===e.side||Y.push(function(){return function(t,e){var r,n=t._fullLayout,a=e._id,i=a.charAt(0),o=e.title.font.size;if(e.title.hasOwnProperty("standoff"))r=e._depth+e.title.standoff+K(e);else{if("multicategory"===e.type)r=e._depth;else{r=10+1.5*o+(e.linewidth?e.linewidth-1:0)}r+="x"===i?"top"===e.side?o*(e.showticklabels?1:0):o*(e.showticklabels?1.5:.5):"right"===e.side?o*(e.showticklabels?1:.5):o*(e.showticklabels?.5:0)}var s,l,u,f,p=E.getPxPosition(t,e);"x"===i?(l=e._offset+e._length/2,u="top"===e.side?p-r:p+r):(u=e._offset+e._length/2,l="right"===e.side?p+r:p-r,s={rotate:"-90",offset:0});if("multicategory"!==e.type){var d=e._selections[e._id+"tick"];if(f={selection:d,side:e.side},d&&d.node()&&d.node().parentNode){var g=h.getTranslate(d.node().parentNode);f.offsetLeft=g.x,f.offsetTop=g.y}e.title.hasOwnProperty("standoff")&&(f.pad=0)}return c.draw(t,a+"title",{propContainer:e,propName:e._name+".title.text",placeholder:n._dfltTitle[i],avoid:f,transform:s,attributes:{x:l,y:u,"text-anchor":"middle"}})}(t,e)}),s.syncOrAsync(Y)}}function Q(t){var r=p+(t||"tick");return w[r]||(w[r]=function(t,e){var r,n,a,i;t._selections[e].size()?(r=1/0,n=-1/0,a=1/0,i=-1/0,t._selections[e].each(function(){var t=$(this),e=h.bBox(t.node().parentNode);r=Math.min(r,e.top),n=Math.max(n,e.bottom),a=Math.min(a,e.left),i=Math.max(i,e.right)})):(r=0,n=0,a=0,i=0);return{top:r,bottom:n,left:a,right:i,height:n-r,width:i-a}}(e,r)),w[r]}},E.getTickSigns=function(t){var e=t._id.charAt(0),r={x:"top",y:"right"}[e],n=t.side===r?1:-1,a=[-1,1,n,-n];return"inside"!==t.ticks==("x"===e)&&(a=a.map(function(t){return-t})),t.side&&a.push({l:-1,t:-1,r:1,b:1}[t.side.charAt(0)]),a},E.makeTransFn=function(t){var e=t._id.charAt(0),r=t._offset;return"x"===e?function(e){return"translate("+(r+t.l2p(e.x))+",0)"}:function(e){return"translate(0,"+(r+t.l2p(e.x))+")"}},E.makeTickPath=function(t,e,r,n){n=void 0!==n?n:t.ticklen;var a=t._id.charAt(0),i=(t.linewidth||1)/2;return"x"===a?"M0,"+(e+i*r)+"v"+n*r:"M"+(e+i*r)+",0h"+n*r},E.makeLabelFns=function(t,e,r){var n=t._id.charAt(0),i="boundaries"!==t.tickson&&"outside"===t.ticks,o=0,l=0;if(i&&(o+=t.ticklen),r&&"outside"===t.ticks){var c=s.deg2rad(r);o=t.ticklen*Math.cos(c)+1,l=t.ticklen*Math.sin(c)}t.showticklabels&&(i||t.showline)&&(o+=.2*t.tickfont.size);var u,h,f,p,d={labelStandoff:o+=(t.linewidth||1)/2,labelShift:l};return"x"===n?(p="bottom"===t.side?1:-1,u=l*p,h=e+o*p,f="bottom"===t.side?1:-.2,d.xFn=function(t){return t.dx+u},d.yFn=function(t){return t.dy+h+t.fontSize*f},d.anchorFn=function(t,e){return a(e)&&0!==e&&180!==e?e*p<0?"end":"start":"middle"},d.heightFn=function(e,r,n){return r<-60||r>60?-.5*n:"top"===t.side?-n:0}):"y"===n&&(p="right"===t.side?1:-1,u=o,h=-l*p,f=90===Math.abs(t.tickangle)?.5:0,d.xFn=function(t){return t.dx+e+(u+t.fontSize*f)*p},d.yFn=function(t){return t.dy+h+t.fontSize*T},d.anchorFn=function(e,r){return a(r)&&90===Math.abs(r)?"middle":"right"===t.side?"start":"end"},d.heightFn=function(e,r,n){return(r*="left"===t.side?1:-1)<-30?-n:r<30?-.5*n:0}),d},E.drawTicks=function(t,e,r){r=r||{};var n=e._id+"tick",a=r.layer.selectAll("path."+n).data(e.ticks?r.vals:[],J);a.exit().remove(),a.enter().append("path").classed(n,1).classed("ticks",1).classed("crisp",!1!==r.crisp).call(u.stroke,e.tickcolor).style("stroke-width",h.crispRound(t,e.tickwidth,1)+"px").attr("d",r.path),a.attr("transform",r.transFn)},E.drawGrid=function(t,e,r){r=r||{};var n=e._id+"grid",a=r.vals,i=r.counterAxis;if(!1===e.showgrid)a=[];else if(i&&E.shouldShowZeroLine(t,e,i))for(var o="array"===e.tickmode,s=0;s<a.length;s++){var l=a[s].x;if(o?!l:Math.abs(l)<e.dtick/100){if(a=a.slice(0,s).concat(a.slice(s+1)),!o)break;s--}}var c=r.layer.selectAll("path."+n).data(a,J);c.exit().remove(),c.enter().append("path").classed(n,1).classed("crisp",!1!==r.crisp),e._gw=h.crispRound(t,e.gridwidth,1),c.attr("transform",r.transFn).attr("d",r.path).call(u.stroke,e.gridcolor||"#ddd").style("stroke-width",e._gw+"px"),"function"==typeof r.path&&c.attr("d",r.path)},E.drawZeroLine=function(t,e,r){r=r||r;var n=e._id+"zl",a=E.shouldShowZeroLine(t,e,r.counterAxis),i=r.layer.selectAll("path."+n).data(a?[{x:0,id:e._id}]:[]);i.exit().remove(),i.enter().append("path").classed(n,1).classed("zl",1).classed("crisp",!1!==r.crisp).each(function(){r.layer.selectAll("path").sort(function(t,e){return C.idSort(t.id,e.id)})}),i.attr("transform",r.transFn).attr("d",r.path).call(u.stroke,e.zerolinecolor||u.defaultLine).style("stroke-width",h.crispRound(t,e.zerolinewidth,e._gw||1)+"px")},E.drawLabels=function(t,e,r){r=r||{};var i=t._fullLayout,o=e._id,c=o.charAt(0),u=r.cls||o+"tick",f=r.vals,p=r.labelFns,d=r.secondary?0:e.tickangle,g=(e._prevTickAngles||{})[u],v=r.layer.selectAll("g."+u).data(e.showticklabels?f:[],J),m=[];function y(t,e){t.each(function(t){var i=n.select(this),o=i.select(".text-math-group"),s=p.anchorFn(t,e),c=r.transFn.call(i.node(),t)+(a(e)&&0!=+e?" rotate("+e+","+p.xFn(t)+","+(p.yFn(t)-t.fontSize/2)+")":""),u=l.lineCount(i),f=A*t.fontSize,d=p.heightFn(t,a(e)?+e:0,(u-1)*f);if(d&&(c+=" translate(0, "+d+")"),o.empty())i.select("text").attr({transform:c,"text-anchor":s});else{var g=h.bBox(o.node()).width*{end:-.5,start:.5}[s];o.attr("transform",c+(g?"translate("+g+",0)":""))}})}v.enter().append("g").classed(u,1).append("text").attr("text-anchor","middle").each(function(e){var r=n.select(this),a=t._promises.length;r.call(l.positionText,p.xFn(e),p.yFn(e)).call(h.font,e.font,e.fontSize,e.fontColor).text(e.text).call(l.convertToTspans,t),t._promises[a]?m.push(t._promises.pop().then(function(){y(r,d)})):y(r,d)}),v.exit().remove(),r.repositionOnUpdate&&v.each(function(t){n.select(this).select("text").call(l.positionText,p.xFn(t),p.yFn(t))}),y(v,g+1?g:d);var x=null;e._selections&&(e._selections[u]=v);var b=[function(){return m.length&&Promise.all(m)}];e.automargin&&i._redrawFromAutoMarginCount&&90===g?(x=90,b.push(function(){y(v,g)})):b.push(function(){if(y(v,d),f.length&&"x"===c&&!a(d)&&("log"!==e.type||"D"!==String(e.dtick).charAt(0))){x=0;var t,n=0,i=[];if(v.each(function(t){n=Math.max(n,t.fontSize);var r=e.l2p(t.x),a=$(this),o=h.bBox(a.node());i.push({top:0,bottom:10,height:10,left:r-o.width/2,right:r+o.width/2+2,width:o.width+2})}),"boundaries"!==e.tickson&&!e.showdividers||r.secondary){var o=f.length,l=Math.abs((f[o-1].x-f[0].x)*e._m)/(o-1)<2.5*n||"multicategory"===e.type;for(t=0;t<i.length-1;t++)if(s.bBoxIntersect(i[t],i[t+1])){x=l?90:30;break}}else{var u=2;for(e.ticks&&(u+=e.tickwidth/2),t=0;t<i.length;t++){var p=f[t].xbnd,g=i[t];if(null!==p[0]&&g.left-e.l2p(p[0])<u||null!==p[1]&&e.l2p(p[1])-g.right<u){x=90;break}}}x&&y(v,x)}}),e._tickAngles&&b.push(function(){e._tickAngles[u]=null===x?a(d)?d:0:x});var _=s.syncOrAsync(b);return _&&_.then&&t._promises.push(_),_},E.getPxPosition=function(t,e){var r,n=t._fullLayout._size,a=e._id.charAt(0),i=e.side;return"free"!==e.anchor?r=e._anchorAxis:"x"===a?r={_offset:n.t+(1-(e.position||0))*n.h,_length:0}:"y"===a&&(r={_offset:n.l+(e.position||0)*n.w,_length:0}),"top"===i||"left"===i?r._offset:"bottom"===i||"right"===i?r._offset+r._length:void 0},E.shouldShowZeroLine=function(t,e,r){var n=s.simpleMap(e.range,e.r2l);return n[0]*n[1]<=0&&e.zeroline&&("linear"===e.type||"-"===e.type)&&!(e.rangebreaks&&e.maskBreaks(0)===w)&&(Q(e,0)||!function(t,e,r,n){var a=r._mainAxis;if(!a)return;var i=t._fullLayout,o=e._id.charAt(0),s=E.counterLetter(e._id),l=e._offset+(Math.abs(n[0])<Math.abs(n[1])==("x"===o)?0:e._length);function c(t){if(!t.showline||!t.linewidth)return!1;var r=Math.max((t.linewidth+e.zerolinewidth)/2,1);function n(t){return"number"==typeof t&&Math.abs(t-l)<r}if(n(t._mainLinePosition)||n(t._mainMirrorPosition))return!0;var a=t._linepositions||{};for(var i in a)if(n(a[i][0])||n(a[i][1]))return!0}var u=i._plots[r._mainSubplot];if(!(u.mainplotinfo||u).overlays.length)return c(r);for(var h=E.list(t,s),f=0;f<h.length;f++){var p=h[f];if(p._mainAxis===a&&c(p))return!0}}(t,e,r,n)||function(t,e){for(var r=t._fullData,n=e._mainSubplot,a=e._id.charAt(0),i=0;i<r.length;i++){var s=r[i];if(!0===s.visible&&s.xaxis+s.yaxis===n){if(o.traceIs(s,"bar-like")&&s.orientation==={x:"h",y:"v"}[a])return!0;if(s.fill&&s.fill.charAt(s.fill.length-1)===a)return!0}}return!1}(t,e))},E.clipEnds=function(t,e){return e.filter(function(e){return Q(t,e.x)})},E.allowAutoMargin=function(t){for(var e=E.list(t,"",!0),r=0;r<e.length;r++){var n=e[r];n.automargin&&(i.allowAutoMargin(t,tt(n)),n.mirror&&i.allowAutoMargin(t,et(n))),o.getComponentMethod("rangeslider","isVisible")(n)&&i.allowAutoMargin(t,rt(n))}},E.swap=function(t,e){for(var r=function(t,e){var r,n,a=[];for(r=0;r<e.length;r++){var i=[],o=t._fullData[e[r]].xaxis,s=t._fullData[e[r]].yaxis;if(o&&s){for(n=0;n<a.length;n++)-1===a[n].x.indexOf(o)&&-1===a[n].y.indexOf(s)||i.push(n);if(i.length){var l,c=a[i[0]];if(i.length>1)for(n=1;n<i.length;n++)l=a[i[n]],nt(c.x,l.x),nt(c.y,l.y);nt(c.x,[o]),nt(c.y,[s])}else a.push({x:[o],y:[s]})}}return a}(t,e),n=0;n<r.length;n++)at(t,r[n].x,r[n].y)}},{"../../components/color":591,"../../components/drawing":612,"../../components/titles":679,"../../constants/alignment":686,"../../constants/numerical":693,"../../lib":717,"../../lib/svg_text_utils":741,"../../plots/plots":826,"../../registry":846,"./autorange":764,"./axis_autotype":766,"./axis_ids":768,"./clean_ticks":770,"./layout_attributes":777,"./set_convert":783,d3:165,"fast-isnumeric":228}],766:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../constants/numerical").BADNUM;e.exports=function(t,e,r){return!(r=r||{}).noMultiCategory&&(o=t,a.isArrayOrTypedArray(o[0])&&a.isArrayOrTypedArray(o[1]))?"multicategory":function(t,e){for(var r=Math.max(1,(t.length-1)/1e3),i=0,o=0,s={},l=0;l<t.length;l+=r){var c=t[Math.round(l)],u=String(c);s[u]||(s[u]=1,a.isDateTime(c,e)&&(i+=1),n(c)&&(o+=1))}return i>2*o}(t,e)?"date":function(t){for(var e=Math.max(1,(t.length-1)/1e3),r=0,n=0,o={},s=0;s<t.length;s+=e){var l=t[Math.round(s)],c=String(l);o[c]||(o[c]=1,"boolean"==typeof l?n++:a.cleanNumber(l)!==i?r++:"string"==typeof l&&n++)}return n>2*r}(t)?"category":function(t){if(!t)return!1;for(var e=0;e<t.length;e++)if(n(t[e]))return!0;return!1}(t)?"linear":"-";var o}},{"../../constants/numerical":693,"../../lib":717,"fast-isnumeric":228}],767:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../registry"),i=t("../../lib"),o=t("../array_container_defaults"),s=t("./layout_attributes"),l=t("./tick_value_defaults"),c=t("./tick_mark_defaults"),u=t("./tick_label_defaults"),h=t("./category_order_defaults"),f=t("./line_grid_defaults"),p=t("./set_convert"),d=t("./constants").WEEKDAY_PATTERN,g=t("./constants").HOUR_PATTERN;function v(t,e,r){function a(r,n){return i.coerce(t,e,s.rangebreaks,r,n)}if(a("enabled")){var o=a("bounds");if(o&&o.length>=2){var l,c,u="";if(2===o.length)for(l=0;l<2;l++)if(c=y(o[l])){u=d;break}var h=a("pattern",u);if(h===d)for(l=0;l<2;l++)(c=y(o[l]))&&(e.bounds[l]=o[l]=c-1);if(h)for(l=0;l<2;l++)switch(c=o[l],h){case d:if(!n(c))return void(e.enabled=!1);if((c=+c)!==Math.floor(c)||c<0||c>=7)return void(e.enabled=!1);e.bounds[l]=o[l]=c;break;case g:if(!n(c))return void(e.enabled=!1);if((c=+c)<0||c>24)return void(e.enabled=!1);e.bounds[l]=o[l]=c}if(!1===r.autorange){var f=r.range;if(f[0]<f[1]){if(o[0]<f[0]&&o[1]>f[1])return void(e.enabled=!1)}else if(o[0]>f[0]&&o[1]<f[1])return void(e.enabled=!1)}}else{var p=a("values");if(!p||!p.length)return void(e.enabled=!1);a("dvalue")}}}e.exports=function(t,e,r,n,g){var m=n.letter,y=n.font||{},x=n.splomStash||{},b=r("visible",!n.visibleDflt),_=e._template||{},w=e.type||_.type||"-";"date"===w&&a.getComponentMethod("calendars","handleDefaults")(t,e,"calendar",n.calendar);p(e,g);var k=!e.isValidRange(t.range);k&&n.reverseDflt&&(k="reversed"),!r("autorange",k)||"linear"!==w&&"-"!==w||r("rangemode"),r("range"),e.cleanRange(),h(t,e,r,n),"category"===w||n.noHover||r("hoverformat");var T=r("color"),M=T!==s.color.dflt?T:y.color,A=x.label||g._dfltTitle[m];if(u(t,e,r,w,n,{pass:1}),!b)return e;r("title.text",A),i.coerceFont(r,"title.font",{family:y.family,size:Math.round(1.2*y.size),color:M}),l(t,e,r,w),u(t,e,r,w,n,{pass:2}),c(t,e,r,n),f(t,e,r,{dfltColor:T,bgColor:n.bgColor,showGrid:n.showGrid,attributes:s}),(e.showline||e.ticks)&&r("mirror"),n.automargin&&r("automargin");var S,E="multicategory"===w;n.noTickson||"category"!==w&&!E||!e.ticks&&!e.showgrid||(E&&(S="boundaries"),r("tickson",S));E&&(r("showdividers")&&(r("dividercolor"),r("dividerwidth")));if("date"===w)if(o(t,e,{name:"rangebreaks",inclusionAttr:"enabled",handleItemDefaults:v}),e.rangebreaks.length){for(var L=0;L<e.rangebreaks.length;L++)if(e.rangebreaks[L].pattern===d){e._hasDayOfWeekBreaks=!0;break}if(p(e,g),g._has("scattergl")||g._has("splom"))for(var C=0;C<n.data.length;C++){var P=n.data[C];"scattergl"!==P.type&&"splom"!==P.type||(P.visible=!1,i.warn(P.type+" traces do not work on axes with rangebreaks. Setting trace "+P.index+" to `visible: false`."))}}else delete e.rangebreaks;return e};var m={sun:1,mon:2,tue:3,wed:4,thu:5,fri:6,sat:7};function y(t){if("string"==typeof t)return m[t.substr(0,3).toLowerCase()]}},{"../../lib":717,"../../registry":846,"../array_container_defaults":761,"./category_order_defaults":769,"./constants":771,"./layout_attributes":777,"./line_grid_defaults":779,"./set_convert":783,"./tick_label_defaults":784,"./tick_mark_defaults":785,"./tick_value_defaults":786,"fast-isnumeric":228}],768:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("./constants");r.id2name=function(t){if("string"==typeof t&&t.match(a.AX_ID_PATTERN)){var e=t.substr(1);return"1"===e&&(e=""),t.charAt(0)+"axis"+e}},r.name2id=function(t){if(t.match(a.AX_NAME_PATTERN)){var e=t.substr(5);return"1"===e&&(e=""),t.charAt(0)+e}},r.cleanId=function(t,e){if(t.match(a.AX_ID_PATTERN)&&(!e||t.charAt(0)===e)){var r=t.substr(1).replace(/^0+/,"");return"1"===r&&(r=""),t.charAt(0)+r}},r.list=function(t,e,n){var a=t._fullLayout;if(!a)return[];var i,o=r.listIds(t,e),s=new Array(o.length);for(i=0;i<o.length;i++){var l=o[i];s[i]=a[l.charAt(0)+"axis"+l.substr(1)]}if(!n){var c=a._subplots.gl3d||[];for(i=0;i<c.length;i++){var u=a[c[i]];e?s.push(u[e+"axis"]):s.push(u.xaxis,u.yaxis,u.zaxis)}}return s},r.listIds=function(t,e){var r=t._fullLayout;if(!r)return[];var n=r._subplots;return e?n[e+"axis"]:n.xaxis.concat(n.yaxis)},r.getFromId=function(t,e,n){var a=t._fullLayout;return"x"===n?e=e.replace(/y[0-9]*/,""):"y"===n&&(e=e.replace(/x[0-9]*/,"")),a[r.id2name(e)]},r.getFromTrace=function(t,e,a){var i=t._fullLayout,o=null;if(n.traceIs(e,"gl3d")){var s=e.scene;"scene"===s.substr(0,5)&&(o=i[s][a+"axis"])}else o=r.getFromId(t,e[a+"axis"]||a);return o},r.idSort=function(t,e){var r=t.charAt(0),n=e.charAt(0);return r!==n?r>n?1:-1:+(t.substr(1)||1)-+(e.substr(1)||1)},r.getAxisGroup=function(t,e){for(var r=t._axisMatchGroups,n=0;n<r.length;n++){if(r[n][e])return"g"+n}return e}},{"../../registry":846,"./constants":771}],769:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){if("category"===e.type){var a,i=t.categoryarray,o=Array.isArray(i)&&i.length>0;o&&(a="array");var s,l=r("categoryorder",a);"array"===l&&(s=r("categoryarray")),o||"array"!==l||(l=e.categoryorder="trace"),"trace"===l?e._initialCategories=[]:"array"===l?e._initialCategories=s.slice():(s=function(t,e){var r,n,a,i=e.dataAttr||t._id.charAt(0),o={};if(e.axData)r=e.axData;else for(r=[],n=0;n<e.data.length;n++){var s=e.data[n];s[i+"axis"]===t._id&&r.push(s)}for(n=0;n<r.length;n++){var l=r[n][i];for(a=0;a<l.length;a++){var c=l[a];null!=c&&(o[c]=1)}}return Object.keys(o)}(e,n).sort(),"category ascending"===l?e._initialCategories=s:"category descending"===l&&(e._initialCategories=s.reverse()))}}},{}],770:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../constants/numerical").ONEDAY;r.dtick=function(t,e){var r="log"===e,a="date"===e,o="category"===e,s=a?i:1;if(!t)return s;if(n(t))return(t=Number(t))<=0?s:o?Math.max(1,Math.round(t)):a?Math.max(.1,t):t;if("string"!=typeof t||!a&&!r)return s;var l=t.charAt(0),c=t.substr(1);return(c=n(c)?Number(c):0)<=0||!(a&&"M"===l&&c===Math.round(c)||r&&"L"===l||r&&"D"===l&&(1===c||2===c))?s:t},r.tick0=function(t,e,r,i){return"date"===e?a.cleanDate(t,a.dateTick0(r)):"D1"!==i&&"D2"!==i?n(t)?Number(t):0:void 0}},{"../../constants/numerical":693,"../../lib":717,"fast-isnumeric":228}],771:[function(t,e,r){"use strict";var n=t("../../lib/regex").counter;e.exports={idRegex:{x:n("x"),y:n("y")},attrRegex:n("[xy]axis"),xAxisMatch:n("xaxis"),yAxisMatch:n("yaxis"),AX_ID_PATTERN:/^[xyz][0-9]*$/,AX_NAME_PATTERN:/^[xyz]axis[0-9]*$/,SUBPLOT_PATTERN:/^x([0-9]*)y([0-9]*)$/,HOUR_PATTERN:"hour",WEEKDAY_PATTERN:"day of week",MINDRAG:8,MINSELECT:12,MINZOOM:20,DRAGGERSIZE:20,BENDPX:1.5,REDRAWDELAY:50,SELECTDELAY:100,SELECTID:"-select",DFLTRANGEX:[-1,6],DFLTRANGEY:[-1,4],traceLayerClasses:["imagelayer","heatmaplayer","contourcarpetlayer","contourlayer","funnellayer","waterfalllayer","barlayer","carpetlayer","violinlayer","boxlayer","ohlclayer","scattercarpetlayer","scatterlayer"],clipOnAxisFalseQuery:[".scatterlayer",".barlayer",".funnellayer",".waterfalllayer"],layerValue2layerClass:{"above traces":"above","below traces":"below"}}},{"../../lib/regex":733}],772:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./axis_ids").id2name,i=t("./scale_zoom"),o=t("./autorange").makePadFn,s=t("./autorange").concatExtremes,l=t("../../constants/numerical").ALMOST_EQUAL,c=t("../../constants/alignment").FROM_BL;function u(t,e,r,n,i){var o,s,l,c,u="range"!==i,h=n[a(e)].type,f=[];for(s=0;s<r.length;s++)if((l=r[s])!==e&&(c=n[a(l)]).type===h)if(c.fixedrange){if(u&&c.anchor){n[a(c.anchor)].fixedrange&&f.push(l)}}else f.push(l);for(o=0;o<t.length;o++)if(t[o][e]){var p=t[o],d=[];for(s=0;s<f.length;s++)p[l=f[s]]||d.push(l);return{linkableAxes:d,thisGroup:p}}return{linkableAxes:f,thisGroup:null}}function h(t,e,r,n,a){var i,o,s,l,c;null===e?((e={})[r]=1,c=t.length,t.push(e)):c=t.indexOf(e);var u=Object.keys(e);for(i=0;i<t.length;i++)if(s=t[i],i!==c&&s[n]){var h=s[n];for(o=0;o<u.length;o++)s[l=u[o]]=h*a*e[l];return void t.splice(c,1)}if(1!==a)for(o=0;o<u.length;o++)e[u[o]]*=a;e[n]=1}function f(t,e){var r=t._inputDomain,n=c[t.constraintoward],a=r[0]+(r[1]-r[0])*n;t.domain=t._input.domain=[a+(r[0]-a)/e,a+(r[1]-a)/e],t.setScale()}r.handleConstraintDefaults=function(t,e,r,a){var i,o,s,l,c=a.allAxisIds,f=a.layoutOut,p=a.scaleanchorDflt,d=a.constrainDflt,g=f._axisConstraintGroups,v=f._axisMatchGroups,m=e._id,y=m.charAt(0),x=((f._splomAxes||{})[y]||{})[m]||{},b=e._id,_=b.charAt(0),w=r("constrain",d);if(n.coerce(t,e,{constraintoward:{valType:"enumerated",values:"x"===_?["left","center","right"]:["bottom","middle","top"],dflt:"x"===_?"center":"middle"}},"constraintoward"),!t.matches&&!x.matches||e.fixedrange||(o=u(v,b,c,f),i=n.coerce(t,e,{matches:{valType:"enumerated",values:o.linkableAxes||[],dflt:x.matches}},"matches")),i||e.fixedrange&&"domain"!==w||!t.scaleanchor&&!p||(l=u(g,b,c,f,w),s=n.coerce(t,e,{scaleanchor:{valType:"enumerated",values:l.linkableAxes||[]}},"scaleanchor",p)),i?(delete e.constrain,h(v,o.thisGroup,b,i,1)):-1!==c.indexOf(t.matches)&&n.warn("ignored "+e._name+'.matches: "'+t.matches+'" to avoid either an infinite loop or because the target axis has fixed range.'),s){var k=r("scaleratio");k||(k=e.scaleratio=1),h(g,l.thisGroup,b,s,k)}else-1!==c.indexOf(t.scaleanchor)&&n.warn("ignored "+e._name+'.scaleanchor: "'+t.scaleanchor+'" to avoid either an infinite loop and possibly inconsistent scaleratios, or because the target axis has fixed range or this axis declares a *matches* constraint.')},r.enforce=function(t){var e,r,n,c,u,h,p,d=t._fullLayout,g=d._axisConstraintGroups||[];for(e=0;e<g.length;e++){var v=g[e],m=Object.keys(v),y=1/0,x=0,b=1/0,_={},w={},k=!1;for(r=0;r<m.length;r++)w[n=m[r]]=c=d[a(n)],c._inputDomain?c.domain=c._inputDomain.slice():c._inputDomain=c.domain.slice(),c._inputRange||(c._inputRange=c.range.slice()),c.setScale(),_[n]=u=Math.abs(c._m)/v[n],y=Math.min(y,u),"domain"!==c.constrain&&c._constraintShrinkable||(b=Math.min(b,u)),delete c._constraintShrinkable,x=Math.max(x,u),"domain"===c.constrain&&(k=!0);if(!(y>l*x)||k)for(r=0;r<m.length;r++)if(u=_[n=m[r]],h=(c=w[n]).constrain,u!==b||"domain"===h)if(p=u/b,"range"===h)i(c,p);else{var T=c._inputDomain,M=(c.domain[1]-c.domain[0])/(T[1]-T[0]),A=(c.r2l(c.range[1])-c.r2l(c.range[0]))/(c.r2l(c._inputRange[1])-c.r2l(c._inputRange[0]));if((p/=M)*A<1){c.domain=c._input.domain=T.slice(),i(c,p);continue}if(A<1&&(c.range=c._input.range=c._inputRange.slice(),p*=A),c.autorange){var S=c.r2l(c.range[0]),E=c.r2l(c.range[1]),L=(S+E)/2,C=L,P=L,O=Math.abs(E-L),z=L-O*p*1.0001,I=L+O*p*1.0001,D=o(c);f(c,p);var R,F,B=Math.abs(c._m),N=s(t,c),j=N.min,V=N.max;for(F=0;F<j.length;F++)(R=j[F].val-D(j[F])/B)>z&&R<C&&(C=R);for(F=0;F<V.length;F++)(R=V[F].val+D(V[F])/B)<I&&R>P&&(P=R);p/=(P-C)/(2*O),C=c.l2r(C),P=c.l2r(P),c.range=c._input.range=S<E?[C,P]:[P,C]}f(c,p)}}},r.clean=function(t,e){if(e._inputDomain){for(var r=!1,n=e._id,a=t._fullLayout._axisConstraintGroups,i=0;i<a.length;i++)if(a[i][n]){r=!0;break}r&&"domain"===e.constrain||(e._input.domain=e.domain=e._inputDomain,delete e._inputDomain)}}},{"../../constants/alignment":686,"../../constants/numerical":693,"../../lib":717,"./autorange":764,"./axis_ids":768,"./scale_zoom":781}],773:[function(t,e,r){"use strict";var n=t("d3"),a=t("tinycolor2"),i=t("has-passive-events"),o=t("../../registry"),s=t("../../lib"),l=t("../../lib/svg_text_utils"),c=t("../../components/color"),u=t("../../components/drawing"),h=t("../../components/fx"),f=t("./axes"),p=t("../../lib/setcursor"),d=t("../../components/dragelement"),g=t("../../constants/alignment").FROM_TL,v=t("../../lib/clear_gl_canvases"),m=t("../../plot_api/subroutines").redrawReglTraces,y=t("../plots"),x=t("./axis_ids").getFromId,b=t("./select").prepSelect,_=t("./select").clearSelect,w=t("./select").selectOnClick,k=t("./scale_zoom"),T=t("./constants"),M=T.MINDRAG,A=T.MINZOOM,S=!0;function E(t,e,r,n){var a=s.ensureSingle(t.draglayer,e,r,function(e){e.classed("drag",!0).style({fill:"transparent","stroke-width":0}).attr("data-subplot",t.id)});return a.call(p,n),a.node()}function L(t,e,r,a,i,o,s){var l=E(t,"rect",e,r);return n.select(l).call(u.setRect,a,i,o,s),l}function C(t,e){for(var r=0;r<t.length;r++)if(!t[r].fixedrange)return e;return""}function P(t,e,r,n,a){for(var i=0;i<t.length;i++){var o=t[i];if(!o.fixedrange)if(o.rangebreaks){var s="y"===o._id.charAt(0),l=s?1-e:e,c=s?1-r:r;n[o._name+".range[0]"]=o.l2r(o.p2l(l*o._length)),n[o._name+".range[1]"]=o.l2r(o.p2l(c*o._length))}else{var u=o._rl[0],h=o._rl[1]-u;n[o._name+".range[0]"]=o.l2r(u+h*e),n[o._name+".range[1]"]=o.l2r(u+h*r)}}if(a&&a.length){var f=(e+(1-r))/2;P(a,f,1-f,n,[])}}function O(t,e){for(var r=0;r<t.length;r++){var n=t[r];if(!n.fixedrange)if(n.rangebreaks){var a=n._length,i=(n.p2l(0+e)-n.p2l(0)+(n.p2l(a+e)-n.p2l(a)))/2;n.range=[n.l2r(n._rl[0]-i),n.l2r(n._rl[1]-i)]}else n.range=[n.l2r(n._rl[0]-e/n._m),n.l2r(n._rl[1]-e/n._m)]}}function z(t){return 1-(t>=0?Math.min(t,.9):1/(1/Math.max(t,-.3)+3.222))}function I(t,e,r,n,a){return t.append("path").attr("class","zoombox").style({fill:e>.2?"rgba(0,0,0,0)":"rgba(255,255,255,0)","stroke-width":0}).attr("transform","translate("+r+", "+n+")").attr("d",a+"Z")}function D(t,e,r){return t.append("path").attr("class","zoombox-corners").style({fill:c.background,stroke:c.defaultLine,"stroke-width":1,opacity:0}).attr("transform","translate("+e+", "+r+")").attr("d","M0,0Z")}function R(t,e,r,n,a,i){t.attr("d",n+"M"+r.l+","+r.t+"v"+r.h+"h"+r.w+"v-"+r.h+"h-"+r.w+"Z"),F(t,e,a,i)}function F(t,e,r,n){r||(t.transition().style("fill",n>.2?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.3)").duration(200),e.transition().style("opacity",1).duration(200))}function B(t){n.select(t).selectAll(".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners").remove()}function N(t){S&&t.data&&t._context.showTips&&(s.notifier(s._(t,"Double-click to zoom back out"),"long"),S=!1)}function j(t){return"lasso"===t||"select"===t}function V(t){var e=Math.floor(Math.min(t.b-t.t,t.r-t.l,A)/2);return"M"+(t.l-3.5)+","+(t.t-.5+e)+"h3v"+-e+"h"+e+"v-3h-"+(e+3)+"ZM"+(t.r+3.5)+","+(t.t-.5+e)+"h-3v"+-e+"h"+-e+"v-3h"+(e+3)+"ZM"+(t.r+3.5)+","+(t.b+.5-e)+"h-3v"+e+"h"+-e+"v3h"+(e+3)+"ZM"+(t.l-3.5)+","+(t.b+.5-e)+"h3v"+e+"h"+e+"v3h-"+(e+3)+"Z"}function U(t,e,r,n){for(var a,i,o,l,c=!1,u={},h={},f=0;f<e.length;f++){var p=e[f];for(a in r)if(p[a]){for(o in p)("x"===o.charAt(0)?r:n)[o]||(u[o]=a);for(i in n)p[i]&&(c=!0)}for(i in n)if(p[i])for(l in p)("x"===l.charAt(0)?r:n)[l]||(h[l]=i)}c&&(s.extendFlat(u,h),h={});var d={},g=[];for(o in u){var v=x(t,o);g.push(v),d[v._id]=v}var m={},y=[];for(l in h){var b=x(t,l);y.push(b),m[b._id]=b}return{xaHash:d,yaHash:m,xaxes:g,yaxes:y,xLinks:u,yLinks:h,isSubplotConstrained:c}}function q(t,e){if(i){var r=void 0!==t.onwheel?"wheel":"mousewheel";t._onwheel&&t.removeEventListener(r,t._onwheel),t._onwheel=e,t.addEventListener(r,e,{passive:!1})}else void 0!==t.onwheel?t.onwheel=e:void 0!==t.onmousewheel&&(t.onmousewheel=e)}function H(t){var e=[];for(var r in t)e.push(t[r]);return e}e.exports={makeDragBox:function(t,e,r,i,c,p,S,E){var F,G,Y,W,X,Z,J,K,Q,$,tt,et,rt,nt,at,it,ot,st,lt,ct,ut,ht=t._fullLayout._zoomlayer,ft=S+E==="nsew",pt=1===(S+E).length;function dt(){if(F=e.xaxis,G=e.yaxis,Q=F._length,$=G._length,J=F._offset,K=G._offset,(Y={})[F._id]=F,(W={})[G._id]=G,S&&E)for(var r=e.overlays,n=0;n<r.length;n++){var a=r[n].xaxis;Y[a._id]=a;var i=r[n].yaxis;W[i._id]=i}X=H(Y),Z=H(W),rt=C(X,E),nt=C(Z,S),at=!nt&&!rt,tt=U(t,t._fullLayout._axisConstraintGroups,Y,W),et=U(t,t._fullLayout._axisMatchGroups,Y,W),it=E||tt.isSubplotConstrained||et.isSubplotConstrained,ot=S||tt.isSubplotConstrained||et.isSubplotConstrained;var o=t._fullLayout;st=o._has("scattergl"),lt=o._has("splom"),ct=o._has("svg")}dt();var gt=function(t,e,r){return t?"nsew"===t?r?"":"pan"===e?"move":"crosshair":t.toLowerCase()+"-resize":"pointer"}(nt+rt,t._fullLayout.dragmode,ft),vt=L(e,S+E+"drag",gt,r,i,c,p);if(at&&!ft)return vt.onmousedown=null,vt.style.pointerEvents="none",vt;var mt,yt,xt,bt,_t,wt,kt,Tt,Mt,At,St={element:vt,gd:t,plotinfo:e};function Et(){St.plotinfo.selection=!1,_(t)}function Lt(r,a){var i=t._fullLayout.clickmode;if(B(t),2!==r||pt||function(){if(!t._transitioningWithDuration){var e=t._context.doubleClick,r=[];rt&&(r=r.concat(X)),nt&&(r=r.concat(Z)),et.xaxes&&(r=r.concat(et.xaxes)),et.yaxes&&(r=r.concat(et.yaxes));var n,a,i,s={};if("reset+autosize"===e)for(e="autosize",a=0;a<r.length;a++)if((n=r[a])._rangeInitial&&(n.range[0]!==n._rangeInitial[0]||n.range[1]!==n._rangeInitial[1])||!n._rangeInitial&&!n.autorange){e="reset";break}if("autosize"===e)for(a=0;a<r.length;a++)(n=r[a]).fixedrange||(s[n._name+".autorange"]=!0);else if("reset"===e)for((rt||tt.isSubplotConstrained)&&(r=r.concat(tt.xaxes)),nt&&!tt.isSubplotConstrained&&(r=r.concat(tt.yaxes)),tt.isSubplotConstrained&&(rt?nt||(r=r.concat(Z)):r=r.concat(X)),a=0;a<r.length;a++)(n=r[a]).fixedrange||(n._rangeInitial?(i=n._rangeInitial,s[n._name+".range[0]"]=i[0],s[n._name+".range[1]"]=i[1]):s[n._name+".autorange"]=!0);t.emit("plotly_doubleclick",null),o.call("_guiRelayout",t,s)}}(),ft)i.indexOf("select")>-1&&w(a,t,X,Z,e.id,St),i.indexOf("event")>-1&&h.click(t,a,e.id);else if(1===r&&pt){var s=S?G:F,c="s"===S||"w"===E?0:1,u=s._name+".range["+c+"]",f=function(t,e){var r,a=t.range[e],i=Math.abs(a-t.range[1-e]);return"date"===t.type?a:"log"===t.type?(r=Math.ceil(Math.max(0,-Math.log(i)/Math.LN10))+3,n.format("."+r+"g")(Math.pow(10,a))):(r=Math.floor(Math.log(Math.abs(a))/Math.LN10)-Math.floor(Math.log(i)/Math.LN10)+4,n.format("."+String(r)+"g")(a))}(s,c),p="left",d="middle";if(s.fixedrange)return;S?(d="n"===S?"top":"bottom","right"===s.side&&(p="right")):"e"===E&&(p="right"),t._context.showAxisRangeEntryBoxes&&n.select(vt).call(l.makeEditable,{gd:t,immediate:!0,background:t._fullLayout.paper_bgcolor,text:String(f),fill:s.tickfont?s.tickfont.color:"#444",horizontalAlign:p,verticalAlign:d}).on("edit",function(e){var r=s.d2r(e);void 0!==r&&o.call("_guiRelayout",t,u,r)})}}function Ct(e,r){if(t._transitioningWithDuration)return!1;var n=Math.max(0,Math.min(Q,e+mt)),a=Math.max(0,Math.min($,r+yt)),i=Math.abs(n-mt),o=Math.abs(a-yt);function s(){kt="",xt.r=xt.l,xt.t=xt.b,Mt.attr("d","M0,0Z")}if(xt.l=Math.min(mt,n),xt.r=Math.max(mt,n),xt.t=Math.min(yt,a),xt.b=Math.max(yt,a),tt.isSubplotConstrained)i>A||o>A?(kt="xy",i/Q>o/$?(o=i*$/Q,yt>a?xt.t=yt-o:xt.b=yt+o):(i=o*Q/$,mt>n?xt.l=mt-i:xt.r=mt+i),Mt.attr("d",V(xt))):s();else if(et.isSubplotConstrained)if(i>A||o>A){kt="xy";var l=Math.min(xt.l/Q,($-xt.b)/$),c=Math.max(xt.r/Q,($-xt.t)/$);xt.l=l*Q,xt.r=c*Q,xt.b=(1-l)*$,xt.t=(1-c)*$,Mt.attr("d",V(xt))}else s();else!nt||o<Math.min(Math.max(.6*i,M),A)?i<M||!rt?s():(xt.t=0,xt.b=$,kt="x",Mt.attr("d",function(t,e){return"M"+(t.l-.5)+","+(e-A-.5)+"h-3v"+(2*A+1)+"h3ZM"+(t.r+.5)+","+(e-A-.5)+"h3v"+(2*A+1)+"h-3Z"}(xt,yt))):!rt||i<Math.min(.6*o,A)?(xt.l=0,xt.r=Q,kt="y",Mt.attr("d",function(t,e){return"M"+(e-A-.5)+","+(t.t-.5)+"v-3h"+(2*A+1)+"v3ZM"+(e-A-.5)+","+(t.b+.5)+"v3h"+(2*A+1)+"v-3Z"}(xt,mt))):(kt="xy",Mt.attr("d",V(xt)));xt.w=xt.r-xt.l,xt.h=xt.b-xt.t,kt&&(At=!0),t._dragged=At,R(Tt,Mt,xt,_t,wt,bt),Pt(),t.emit("plotly_relayouting",ut),wt=!0}function Pt(){ut={},"xy"!==kt&&"x"!==kt||(P(X,xt.l/Q,xt.r/Q,ut,tt.xaxes),Bt("x",ut)),"xy"!==kt&&"y"!==kt||(P(Z,($-xt.b)/$,($-xt.t)/$,ut,tt.yaxes),Bt("y",ut))}function Ot(){Pt(),B(t),jt(),N(t)}St.prepFn=function(e,r,n){var i=St.dragmode,o=t._fullLayout.dragmode;o!==i&&(St.dragmode=o),dt(),at||(ft?e.shiftKey?"pan"===o?o="zoom":j(o)||(o="pan"):e.ctrlKey&&(o="pan"):o="pan"),St.minDrag="lasso"===o?1:void 0,j(o)?(St.xaxes=X,St.yaxes=Z,b(e,r,n,St,o)):(St.clickFn=Lt,j(i)&&Et(),at||("zoom"===o?(St.moveFn=Ct,St.doneFn=Ot,St.minDrag=1,function(e,r,n){var i=vt.getBoundingClientRect();mt=r-i.left,yt=n-i.top,xt={l:mt,r:mt,w:0,t:yt,b:yt,h:0},bt=t._hmpixcount?t._hmlumcount/t._hmpixcount:a(t._fullLayout.plot_bgcolor).getLuminance(),wt=!1,kt="xy",At=!1,Tt=I(ht,bt,J,K,_t="M0,0H"+Q+"V"+$+"H0V0"),Mt=D(ht,J,K)}(0,r,n)):"pan"===o&&(St.moveFn=Ft,St.doneFn=jt))),t._fullLayout._redrag=function(){var e=t._dragdata;e&&e.element===vt&&(j(t._fullLayout.dragmode)||(dt(),Vt([0,0,Q,$]),St.moveFn(e.dx,e.dy)))}},d.init(St);var zt=[0,0,Q,$],It=null,Dt=T.REDRAWDELAY,Rt=e.mainplot?t._fullLayout._plots[e.mainplot]:e;function Ft(e,r){if(!t._transitioningWithDuration){if(t._fullLayout._replotting=!0,"ew"===rt||"ns"===nt)return rt&&(O(X,e),Bt("x")),nt&&(O(Z,r),Bt("y")),Vt([rt?-e:0,nt?-r:0,Q,$]),Nt(),void t.emit("plotly_relayouting",ut);if(tt.isSubplotConstrained&&rt&&nt){var n="w"===rt==("n"===nt)?1:-1,a=(e/Q+n*r/$)/2;e=a*Q,r=n*a*$}"w"===rt?e=l(X,0,e):"e"===rt?e=l(X,1,-e):rt||(e=0),"n"===nt?r=l(Z,1,r):"s"===nt?r=l(Z,0,-r):nt||(r=0);var i="w"===rt?e:0,o="n"===nt?r:0;if(tt.isSubplotConstrained){var s;if(!rt&&1===nt.length){for(s=0;s<X.length;s++)X[s].range=X[s]._r.slice(),k(X[s],1-r/$);i=(e=r*Q/$)/2}if(!nt&&1===rt.length){for(s=0;s<Z.length;s++)Z[s].range=Z[s]._r.slice(),k(Z[s],1-e/Q);o=(r=e*$/Q)/2}}Bt("x"),Bt("y"),Vt([i,o,Q-e,$-r]),Nt(),t.emit("plotly_relayouting",ut)}function l(t,e,r){for(var n,a,i=1-e,o=0;o<t.length;o++){var s=t[o];if(!s.fixedrange){n=s,a=s._rl[i]+(s._rl[e]-s._rl[i])/z(r/s._length);var l=s.l2r(a);!1!==l&&void 0!==l&&(s.range[e]=l)}}return n._length*(n._rl[e]-a)/(n._rl[e]-n._rl[i])}}function Bt(t,e){for(var r=et.isSubplotConstrained?{x:Z,y:X}[t]:et[t+"axes"],n=et.isSubplotConstrained?{x:X,y:Z}[t]:[],a=0;a<r.length;a++){var i=r[a],o=i._id,s=et.xLinks[o]||et.yLinks[o],l=n[0]||Y[s]||W[s];l&&(e?(e[i._name+".range[0]"]=e[l._name+".range[0]"],e[i._name+".range[1]"]=e[l._name+".range[1]"]):i.range=l.range.slice())}}function Nt(){var e,r=[];function n(t){for(e=0;e<t.length;e++)t[e].fixedrange||r.push(t[e]._id)}for(it&&(n(X),n(tt.xaxes),n(et.xaxes)),ot&&(n(Z),n(tt.yaxes),n(et.yaxes)),ut={},e=0;e<r.length;e++){var a=r[e],i=x(t,a);f.drawOne(t,i,{skipTitle:!0}),ut[i._name+".range[0]"]=i.range[0],ut[i._name+".range[1]"]=i.range[1]}f.redrawComponents(t,r)}function jt(){Vt([0,0,Q,$]),s.syncOrAsync([y.previousPromises,function(){t._fullLayout._replotting=!1,o.call("_guiRelayout",t,ut)}],t)}function Vt(e){var r,n,a,i,l=t._fullLayout,c=l._plots,h=l._subplots.cartesian;if(lt&&o.subplotsRegistry.splom.drag(t),st)for(r=0;r<h.length;r++)if(a=(n=c[h[r]]).xaxis,i=n.yaxis,n._scene){var f=s.simpleMap(a.range,a.r2l),p=s.simpleMap(i.range,i.r2l);n._scene.update({range:[f[0],p[0],f[1],p[1]]})}if((lt||st)&&(v(t),m(t)),ct){var d=e[2]/F._length,g=e[3]/G._length;for(r=0;r<h.length;r++){a=(n=c[h[r]]).xaxis,i=n.yaxis;var y,x,b,_,w=it&&!a.fixedrange&&Y[a._id],k=ot&&!i.fixedrange&&W[i._id];if(w?(y=d,b=E?e[0]:Ht(a,y)):et.xaHash[a._id]?(y=d,b=e[0]*a._length/F._length):et.yaHash[a._id]?(y=g,b="ns"===nt?-e[1]*a._length/G._length:Ht(a,y,{n:"top",s:"bottom"}[nt])):b=qt(a,y=Ut(a,d,g)),k?(x=g,_=S?e[1]:Ht(i,x)):et.yaHash[i._id]?(x=g,_=e[1]*i._length/G._length):et.xaHash[i._id]?(x=d,_="ew"===rt?-e[0]*i._length/F._length:Ht(i,x,{e:"right",w:"left"}[rt])):_=qt(i,x=Ut(i,d,g)),y||x){y||(y=1),x||(x=1);var T=a._offset-b/y,M=i._offset-_/x;n.clipRect.call(u.setTranslate,b,_).call(u.setScale,y,x),n.plot.call(u.setTranslate,T,M).call(u.setScale,1/y,1/x),y===n.xScaleFactor&&x===n.yScaleFactor||(u.setPointGroupScale(n.zoomScalePts,y,x),u.setTextPointsScale(n.zoomScaleTxt,y,x)),u.hideOutsideRangePoints(n.clipOnAxisFalseTraces,n),n.xScaleFactor=y,n.yScaleFactor=x}}}}function Ut(t,e,r){return t.fixedrange?0:it&&tt.xaHash[t._id]?e:ot&&(tt.isSubplotConstrained?tt.xaHash:tt.yaHash)[t._id]?r:0}function qt(t,e){return e?(t.range=t._r.slice(),k(t,e),Ht(t,e)):0}function Ht(t,e,r){return t._length*(1-e)*g[r||t.constraintoward||"middle"]}return S.length*E.length!=1&&q(vt,function(e){if(t._context._scrollZoom.cartesian||t._fullLayout._enablescrollzoom){if(Et(),t._transitioningWithDuration)return e.preventDefault(),void e.stopPropagation();dt(),clearTimeout(It);var r=-e.deltaY;if(isFinite(r)||(r=e.wheelDelta/10),isFinite(r)){var n,a=Math.exp(-Math.min(Math.max(r,-20),20)/200),i=Rt.draglayer.select(".nsewdrag").node().getBoundingClientRect(),o=(e.clientX-i.left)/i.width,l=(i.bottom-e.clientY)/i.height;if(it){for(E||(o=.5),n=0;n<X.length;n++)c(X[n],o,a);Bt("x"),zt[2]*=a,zt[0]+=zt[2]*o*(1/a-1)}if(ot){for(S||(l=.5),n=0;n<Z.length;n++)c(Z[n],l,a);Bt("y"),zt[3]*=a,zt[1]+=zt[3]*(1-l)*(1/a-1)}Vt(zt),Nt(),t.emit("plotly_relayouting",ut),It=setTimeout(function(){zt=[0,0,Q,$],jt()},Dt),e.preventDefault()}else s.log("Did not find wheel motion attributes: ",e)}function c(t,e,r){if(!t.fixedrange){var n=s.simpleMap(t.range,t.r2l),a=n[0]+(n[1]-n[0])*e;t.range=n.map(function(e){return t.l2r(a+(e-a)*r)})}}}),vt},makeDragger:E,makeRectDragger:L,makeZoombox:I,makeCorners:D,updateZoombox:R,xyCorners:V,transitionZoombox:F,removeZoombox:B,showDoubleClickNotifier:N,attachWheelEventHandler:q}},{"../../components/color":591,"../../components/dragelement":609,"../../components/drawing":612,"../../components/fx":630,"../../constants/alignment":686,"../../lib":717,"../../lib/clear_gl_canvases":702,"../../lib/setcursor":737,"../../lib/svg_text_utils":741,"../../plot_api/subroutines":756,"../../registry":846,"../plots":826,"./axes":765,"./axis_ids":768,"./constants":771,"./scale_zoom":781,"./select":782,d3:165,"has-passive-events":412,tinycolor2:535}],774:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/fx"),i=t("../../components/dragelement"),o=t("../../lib/setcursor"),s=t("./dragbox").makeDragBox,l=t("./constants").DRAGGERSIZE;r.initInteractions=function(t){var e=t._fullLayout;if(t._context.staticPlot)n.select(t).selectAll(".drag").remove();else if(e._has("cartesian")||e._has("splom")){Object.keys(e._plots||{}).sort(function(t,r){if((e._plots[t].mainplot&&!0)===(e._plots[r].mainplot&&!0)){var n=t.split("y"),a=r.split("y");return n[0]===a[0]?Number(n[1]||1)-Number(a[1]||1):Number(n[0]||1)-Number(a[0]||1)}return e._plots[t].mainplot?1:-1}).forEach(function(r){var n=e._plots[r],o=n.xaxis,c=n.yaxis;if(!n.mainplot){var u=s(t,n,o._offset,c._offset,o._length,c._length,"ns","ew");u.onmousemove=function(e){t._fullLayout._rehover=function(){t._fullLayout._hoversubplot===r&&t._fullLayout._plots[r]&&a.hover(t,e,r)},a.hover(t,e,r),t._fullLayout._lasthover=u,t._fullLayout._hoversubplot=r},u.onmouseout=function(e){t._dragging||(t._fullLayout._hoversubplot=null,i.unhover(t,e))},t._context.showAxisDragHandles&&(s(t,n,o._offset-l,c._offset-l,l,l,"n","w"),s(t,n,o._offset+o._length,c._offset-l,l,l,"n","e"),s(t,n,o._offset-l,c._offset+c._length,l,l,"s","w"),s(t,n,o._offset+o._length,c._offset+c._length,l,l,"s","e"))}if(t._context.showAxisDragHandles){if(r===o._mainSubplot){var h=o._mainLinePosition;"top"===o.side&&(h-=l),s(t,n,o._offset+.1*o._length,h,.8*o._length,l,"","ew"),s(t,n,o._offset,h,.1*o._length,l,"","w"),s(t,n,o._offset+.9*o._length,h,.1*o._length,l,"","e")}if(r===c._mainSubplot){var f=c._mainLinePosition;"right"!==c.side&&(f-=l),s(t,n,f,c._offset+.1*c._length,l,.8*c._length,"ns",""),s(t,n,f,c._offset+.9*c._length,l,.1*c._length,"s",""),s(t,n,f,c._offset,l,.1*c._length,"n","")}}});var o=e._hoverlayer.node();o.onmousemove=function(r){r.target=t._fullLayout._lasthover,a.hover(t,r,e._hoversubplot)},o.onclick=function(e){e.target=t._fullLayout._lasthover,a.click(t,e)},o.onmousedown=function(e){t._fullLayout._lasthover.onmousedown(e)},r.updateFx(t)}},r.updateFx=function(t){var e=t._fullLayout,r="pan"===e.dragmode?"move":"crosshair";o(e._draggers,r)}},{"../../components/dragelement":609,"../../components/fx":630,"../../lib/setcursor":737,"./constants":771,"./dragbox":773,d3:165}],775:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib");e.exports=function(t){return function(e,r){var i=e[t];if(Array.isArray(i))for(var o=n.subplotsRegistry.cartesian,s=o.idRegex,l=r._subplots,c=l.xaxis,u=l.yaxis,h=l.cartesian,f=r._has("cartesian")||r._has("gl2d"),p=0;p<i.length;p++){var d=i[p];if(a.isPlainObject(d)){var g=d.xref,v=d.yref,m=s.x.test(g),y=s.y.test(v);if(m||y){f||a.pushUnique(r._basePlotModules,o);var x=!1;m&&-1===c.indexOf(g)&&(c.push(g),x=!0),y&&-1===u.indexOf(v)&&(u.push(v),x=!0),x&&m&&y&&h.push(g+v)}}}}}},{"../../lib":717,"../../registry":846}],776:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../lib"),o=t("../plots"),s=t("../../components/drawing"),l=t("../get_data").getModuleCalcData,c=t("./axis_ids"),u=t("./constants"),h=t("../../constants/xmlns_namespaces"),f=i.ensureSingle;function p(t,e,r){return i.ensureSingle(t,e,r,function(t){t.datum(r)})}function d(t,e,r,i,o){for(var c,h,f,p=u.traceLayerClasses,d=t._fullLayout,g=d._modules,v=[],m=[],y=0;y<g.length;y++){var x=(c=g[y]).name,b=a.modules[x].categories;if(b.svg){var _=c.layerName||x+"layer",w=c.plot;f=(h=l(r,w))[0],r=h[1],f.length&&v.push({i:p.indexOf(_),className:_,plotMethod:w,cdModule:f}),b.zoomScale&&m.push("."+_)}}v.sort(function(t,e){return t.i-e.i});var k=e.plot.selectAll("g.mlayer").data(v,function(t){return t.className});if(k.enter().append("g").attr("class",function(t){return t.className}).classed("mlayer",!0).classed("rangeplot",e.isRangePlot),k.exit().remove(),k.order(),k.each(function(r){var a=n.select(this),l=r.className;r.plotMethod(t,e,r.cdModule,a,i,o),-1===u.clipOnAxisFalseQuery.indexOf("."+l)&&s.setClipUrl(a,e.layerClipId,t)}),d._has("scattergl")&&(c=a.getModule("scattergl"),f=l(r,c)[0],c.plot(t,e,f)),!t._context.staticPlot&&(e._hasClipOnAxisFalse&&(e.clipOnAxisFalseTraces=e.plot.selectAll(u.clipOnAxisFalseQuery.join(",")).selectAll(".trace")),m.length)){var T=e.plot.selectAll(m.join(",")).selectAll(".trace");e.zoomScalePts=T.selectAll("path.point"),e.zoomScaleTxt=T.selectAll(".textpoint")}}function g(t,e){var r=e.plotgroup,n=e.id,a=u.layerValue2layerClass[e.xaxis.layer],i=u.layerValue2layerClass[e.yaxis.layer],o=t._fullLayout._hasOnlyLargeSploms;if(e.mainplot){var s=e.mainplotinfo,l=s.plotgroup,h=n+"-x",d=n+"-y";e.gridlayer=s.gridlayer,e.zerolinelayer=s.zerolinelayer,f(s.overlinesBelow,"path",h),f(s.overlinesBelow,"path",d),f(s.overaxesBelow,"g",h),f(s.overaxesBelow,"g",d),e.plot=f(s.overplot,"g",n),f(s.overlinesAbove,"path",h),f(s.overlinesAbove,"path",d),f(s.overaxesAbove,"g",h),f(s.overaxesAbove,"g",d),e.xlines=l.select(".overlines-"+a).select("."+h),e.ylines=l.select(".overlines-"+i).select("."+d),e.xaxislayer=l.select(".overaxes-"+a).select("."+h),e.yaxislayer=l.select(".overaxes-"+i).select("."+d)}else if(o)e.xlines=f(r,"path","xlines-above"),e.ylines=f(r,"path","ylines-above"),e.xaxislayer=f(r,"g","xaxislayer-above"),e.yaxislayer=f(r,"g","yaxislayer-above");else{var g=f(r,"g","layer-subplot");e.shapelayer=f(g,"g","shapelayer"),e.imagelayer=f(g,"g","imagelayer"),e.gridlayer=f(r,"g","gridlayer"),e.zerolinelayer=f(r,"g","zerolinelayer"),f(r,"path","xlines-below"),f(r,"path","ylines-below"),e.overlinesBelow=f(r,"g","overlines-below"),f(r,"g","xaxislayer-below"),f(r,"g","yaxislayer-below"),e.overaxesBelow=f(r,"g","overaxes-below"),e.plot=f(r,"g","plot"),e.overplot=f(r,"g","overplot"),e.xlines=f(r,"path","xlines-above"),e.ylines=f(r,"path","ylines-above"),e.overlinesAbove=f(r,"g","overlines-above"),f(r,"g","xaxislayer-above"),f(r,"g","yaxislayer-above"),e.overaxesAbove=f(r,"g","overaxes-above"),e.xlines=r.select(".xlines-"+a),e.ylines=r.select(".ylines-"+i),e.xaxislayer=r.select(".xaxislayer-"+a),e.yaxislayer=r.select(".yaxislayer-"+i)}o||(p(e.gridlayer,"g",e.xaxis._id),p(e.gridlayer,"g",e.yaxis._id),e.gridlayer.selectAll("g").map(function(t){return t[0]}).sort(c.idSort)),e.xlines.style("fill","none").classed("crisp",!0),e.ylines.style("fill","none").classed("crisp",!0)}function v(t,e){if(t){var r={};for(var a in t.each(function(t){var a=t[0];n.select(this).remove(),m(a,e),r[a]=!0}),e._plots)for(var i=e._plots[a].overlays||[],o=0;o<i.length;o++){var s=i[o];r[s.id]&&s.plot.selectAll(".trace").remove()}}}function m(t,e){e._draggers.selectAll("g."+t).remove(),e._defs.select("#clip"+e._uid+t+"plot").remove()}r.name="cartesian",r.attr=["xaxis","yaxis"],r.idRoot=["x","y"],r.idRegex=u.idRegex,r.attrRegex=u.attrRegex,r.attributes=t("./attributes"),r.layoutAttributes=t("./layout_attributes"),r.supplyLayoutDefaults=t("./layout_defaults"),r.transitionAxes=t("./transition_axes"),r.finalizeSubplots=function(t,e){var r,n,a,o=e._subplots,s=o.xaxis,l=o.yaxis,h=o.cartesian,f=h.concat(o.gl2d||[]),p={},d={};for(r=0;r<f.length;r++){var g=f[r].split("y");p[g[0]]=1,d["y"+g[1]]=1}for(r=0;r<s.length;r++)p[n=s[r]]||(a=(t[c.id2name(n)]||{}).anchor,u.idRegex.y.test(a)||(a="y"),h.push(n+a),f.push(n+a),d[a]||(d[a]=1,i.pushUnique(l,a)));for(r=0;r<l.length;r++)d[a=l[r]]||(n=(t[c.id2name(a)]||{}).anchor,u.idRegex.x.test(n)||(n="x"),h.push(n+a),f.push(n+a),p[n]||(p[n]=1,i.pushUnique(s,n)));if(!f.length){for(var v in n="",a="",t){if(u.attrRegex.test(v))"x"===v.charAt(0)?(!n||+v.substr(5)<+n.substr(5))&&(n=v):(!a||+v.substr(5)<+a.substr(5))&&(a=v)}n=n?c.name2id(n):"x",a=a?c.name2id(a):"y",s.push(n),l.push(a),h.push(n+a)}},r.plot=function(t,e,r,n){var a,i=t._fullLayout,o=i._subplots.cartesian,s=t.calcdata;if(!Array.isArray(e))for(e=[],a=0;a<s.length;a++)e.push(a);for(a=0;a<o.length;a++){for(var l,c=o[a],u=i._plots[c],h=[],f=0;f<s.length;f++){var p=s[f],g=p[0].trace;g.xaxis+g.yaxis===c&&((-1!==e.indexOf(g.index)||g.carpet)&&(l&&l[0].trace.xaxis+l[0].trace.yaxis===c&&-1!==["tonextx","tonexty","tonext"].indexOf(g.fill)&&-1===h.indexOf(l)&&h.push(l),h.push(p)),l=p)}d(t,u,h,r,n)}},r.clean=function(t,e,r,n){var a,i,o,s=n._plots||{},l=e._plots||{},u=n._subplots||{};if(n._hasOnlyLargeSploms&&!e._hasOnlyLargeSploms)for(o in s)(a=s[o]).plotgroup&&a.plotgroup.remove();var h=n._has&&n._has("gl"),f=e._has&&e._has("gl");if(h&&!f)for(o in s)(a=s[o])._scene&&a._scene.destroy();if(u.xaxis&&u.yaxis){var p=c.listIds({_fullLayout:n});for(i=0;i<p.length;i++){var d=p[i];e[c.id2name(d)]||n._infolayer.selectAll(".g-"+d+"title").remove()}}var g=n._has&&n._has("cartesian"),y=e._has&&e._has("cartesian");if(g&&!y)v(n._cartesianlayer.selectAll(".subplot"),n),n._defs.selectAll(".axesclip").remove(),delete n._axisConstraintGroups;else if(u.cartesian)for(i=0;i<u.cartesian.length;i++){var x=u.cartesian[i];if(!l[x]){var b="."+x+",."+x+"-x,."+x+"-y";n._cartesianlayer.selectAll(b).remove(),m(x,n)}}},r.drawFramework=function(t){var e=t._fullLayout,r=function(t){var e,r,n,a,i,o,s=t._fullLayout,l=s._subplots.cartesian,c=l.length,u=[],h=[];for(e=0;e<c;e++){n=l[e],a=s._plots[n],i=a.xaxis,o=a.yaxis;var f=i._mainAxis,p=o._mainAxis,d=f._id+p._id,g=s._plots[d];a.overlays=[],d!==n&&g?(a.mainplot=d,a.mainplotinfo=g,h.push(n)):(a.mainplot=void 0,a.mainPlotinfo=void 0,u.push(n))}for(e=0;e<h.length;e++)n=h[e],(a=s._plots[n]).mainplotinfo.overlays.push(a);var v=u.concat(h),m=new Array(c);for(e=0;e<c;e++){n=v[e],a=s._plots[n],i=a.xaxis,o=a.yaxis;var y=[n,i.layer,o.layer,i.overlaying||"",o.overlaying||""];for(r=0;r<a.overlays.length;r++)y.push(a.overlays[r].id);m[e]=y}return m}(t),a=e._cartesianlayer.selectAll(".subplot").data(r,String);a.enter().append("g").attr("class",function(t){return"subplot "+t[0]}),a.order(),a.exit().call(v,e),a.each(function(r){var a=r[0],i=e._plots[a];i.plotgroup=n.select(this),g(t,i),i.draglayer=f(e._draggers,"g",a)})},r.rangePlot=function(t,e,r){g(t,e),d(t,e,r),o.style(t)},r.toSVG=function(t){var e=t._fullLayout._glimages,r=n.select(t).selectAll(".svg-container");r.filter(function(t,e){return e===r.size()-1}).selectAll(".gl-canvas-context, .gl-canvas-focus").each(function(){var t=this.toDataURL("image/png");e.append("svg:image").attr({xmlns:h.svg,"xlink:href":t,preserveAspectRatio:"none",x:0,y:0,width:this.width,height:this.height})})},r.updateFx=t("./graph_interact").updateFx},{"../../components/drawing":612,"../../constants/xmlns_namespaces":694,"../../lib":717,"../../registry":846,"../get_data":800,"../plots":826,"./attributes":763,"./axis_ids":768,"./constants":771,"./graph_interact":774,"./layout_attributes":777,"./layout_defaults":778,"./transition_axes":787,d3:165}],777:[function(t,e,r){"use strict";var n=t("../font_attributes"),a=t("../../components/color/attributes"),i=t("../../components/drawing/attributes").dash,o=t("../../lib/extend").extendFlat,s=t("../../plot_api/plot_template").templatedArray,l=(t("../../constants/docs").FORMAT_LINK,t("../../constants/docs").DATE_FORMAT_LINK,t("../../constants/numerical").ONEDAY),c=t("./constants"),u=c.HOUR_PATTERN,h=c.WEEKDAY_PATTERN;e.exports={visible:{valType:"boolean",editType:"plot"},color:{valType:"color",dflt:a.defaultLine,editType:"ticks"},title:{text:{valType:"string",editType:"ticks"},font:n({editType:"ticks"}),standoff:{valType:"number",min:0,editType:"ticks"},editType:"ticks"},type:{valType:"enumerated",values:["-","linear","log","date","category","multicategory"],dflt:"-",editType:"calc",_noTemplating:!0},autorange:{valType:"enumerated",values:[!0,!1,"reversed"],dflt:!0,editType:"axrange",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},rangemode:{valType:"enumerated",values:["normal","tozero","nonnegative"],dflt:"normal",editType:"plot"},range:{valType:"info_array",items:[{valType:"any",editType:"axrange",impliedEdits:{"^autorange":!1},anim:!0},{valType:"any",editType:"axrange",impliedEdits:{"^autorange":!1},anim:!0}],editType:"axrange",impliedEdits:{autorange:!1},anim:!0},fixedrange:{valType:"boolean",dflt:!1,editType:"calc"},scaleanchor:{valType:"enumerated",values:[c.idRegex.x.toString(),c.idRegex.y.toString()],editType:"plot"},scaleratio:{valType:"number",min:0,dflt:1,editType:"plot"},constrain:{valType:"enumerated",values:["range","domain"],dflt:"range",editType:"plot"},constraintoward:{valType:"enumerated",values:["left","center","right","top","middle","bottom"],editType:"plot"},matches:{valType:"enumerated",values:[c.idRegex.x.toString(),c.idRegex.y.toString()],editType:"calc"},rangebreaks:s("rangebreak",{enabled:{valType:"boolean",dflt:!0,editType:"calc"},bounds:{valType:"info_array",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}],editType:"calc"},pattern:{valType:"enumerated",values:[h,u,""],editType:"calc"},values:{valType:"info_array",freeLength:!0,editType:"calc",items:{valType:"any",editType:"calc"}},dvalue:{valType:"number",editType:"calc",min:0,dflt:l},editType:"calc"}),tickmode:{valType:"enumerated",values:["auto","linear","array"],editType:"ticks",impliedEdits:{tick0:void 0,dtick:void 0}},nticks:{valType:"integer",min:0,dflt:0,editType:"ticks"},tick0:{valType:"any",editType:"ticks",impliedEdits:{tickmode:"linear"}},dtick:{valType:"any",editType:"ticks",impliedEdits:{tickmode:"linear"}},tickvals:{valType:"data_array",editType:"ticks"},ticktext:{valType:"data_array",editType:"ticks"},ticks:{valType:"enumerated",values:["outside","inside",""],editType:"ticks"},tickson:{valType:"enumerated",values:["labels","boundaries"],dflt:"labels",editType:"ticks"},mirror:{valType:"enumerated",values:[!0,"ticks",!1,"all","allticks"],dflt:!1,editType:"ticks+layoutstyle"},ticklen:{valType:"number",min:0,dflt:5,editType:"ticks"},tickwidth:{valType:"number",min:0,dflt:1,editType:"ticks"},tickcolor:{valType:"color",dflt:a.defaultLine,editType:"ticks"},showticklabels:{valType:"boolean",dflt:!0,editType:"ticks"},automargin:{valType:"boolean",dflt:!1,editType:"ticks"},showspikes:{valType:"boolean",dflt:!1,editType:"modebar"},spikecolor:{valType:"color",dflt:null,editType:"none"},spikethickness:{valType:"number",dflt:3,editType:"none"},spikedash:o({},i,{dflt:"dash",editType:"none"}),spikemode:{valType:"flaglist",flags:["toaxis","across","marker"],dflt:"toaxis",editType:"none"},spikesnap:{valType:"enumerated",values:["data","cursor","hovered data"],dflt:"data",editType:"none"},tickfont:n({editType:"ticks"}),tickangle:{valType:"angle",dflt:"auto",editType:"ticks"},tickprefix:{valType:"string",dflt:"",editType:"ticks"},showtickprefix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},ticksuffix:{valType:"string",dflt:"",editType:"ticks"},showticksuffix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},showexponent:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},exponentformat:{valType:"enumerated",values:["none","e","E","power","SI","B"],dflt:"B",editType:"ticks"},separatethousands:{valType:"boolean",dflt:!1,editType:"ticks"},tickformat:{valType:"string",dflt:"",editType:"ticks"},tickformatstops:s("tickformatstop",{enabled:{valType:"boolean",dflt:!0,editType:"ticks"},dtickrange:{valType:"info_array",items:[{valType:"any",editType:"ticks"},{valType:"any",editType:"ticks"}],editType:"ticks"},value:{valType:"string",dflt:"",editType:"ticks"},editType:"ticks"}),hoverformat:{valType:"string",dflt:"",editType:"none"},showline:{valType:"boolean",dflt:!1,editType:"ticks+layoutstyle"},linecolor:{valType:"color",dflt:a.defaultLine,editType:"layoutstyle"},linewidth:{valType:"number",min:0,dflt:1,editType:"ticks+layoutstyle"},showgrid:{valType:"boolean",editType:"ticks"},gridcolor:{valType:"color",dflt:a.lightLine,editType:"ticks"},gridwidth:{valType:"number",min:0,dflt:1,editType:"ticks"},zeroline:{valType:"boolean",editType:"ticks"},zerolinecolor:{valType:"color",dflt:a.defaultLine,editType:"ticks"},zerolinewidth:{valType:"number",dflt:1,editType:"ticks"},showdividers:{valType:"boolean",dflt:!0,editType:"ticks"},dividercolor:{valType:"color",dflt:a.defaultLine,editType:"ticks"},dividerwidth:{valType:"number",dflt:1,editType:"ticks"},anchor:{valType:"enumerated",values:["free",c.idRegex.x.toString(),c.idRegex.y.toString()],editType:"plot"},side:{valType:"enumerated",values:["top","bottom","left","right"],editType:"plot"},overlaying:{valType:"enumerated",values:["free",c.idRegex.x.toString(),c.idRegex.y.toString()],editType:"plot"},layer:{valType:"enumerated",values:["above traces","below traces"],dflt:"above traces",editType:"plot"},domain:{valType:"info_array",items:[{valType:"number",min:0,max:1,editType:"plot"},{valType:"number",min:0,max:1,editType:"plot"}],dflt:[0,1],editType:"plot"},position:{valType:"number",min:0,max:1,dflt:0,editType:"plot"},categoryorder:{valType:"enumerated",values:["trace","category ascending","category descending","array","total ascending","total descending","min ascending","min descending","max ascending","max descending","sum ascending","sum descending","mean ascending","mean descending","median ascending","median descending"],dflt:"trace",editType:"calc"},categoryarray:{valType:"data_array",editType:"calc"},uirevision:{valType:"any",editType:"none"},editType:"calc",_deprecated:{autotick:{valType:"boolean",editType:"ticks"},title:{valType:"string",editType:"ticks"},titlefont:n({editType:"ticks"})}}},{"../../components/color/attributes":590,"../../components/drawing/attributes":611,"../../constants/docs":688,"../../constants/numerical":693,"../../lib/extend":708,"../../plot_api/plot_template":755,"../font_attributes":791,"./constants":771}],778:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/color"),i=t("../../components/fx/helpers").isUnifiedHover,o=t("../../components/fx/hovermode_defaults"),s=t("../../plot_api/plot_template"),l=t("../layout_attributes"),c=t("./layout_attributes"),u=t("./type_defaults"),h=t("./axis_defaults"),f=t("./constraints").handleConstraintDefaults,p=t("./position_defaults"),d=t("./axis_ids"),g=d.id2name,v=d.name2id,m=t("./constants").AX_ID_PATTERN,y=t("../../registry"),x=y.traceIs,b=y.getComponentMethod;function _(t,e,r){Array.isArray(t[e])?t[e].push(r):t[e]=[r]}e.exports=function(t,e,r){var d,y,w={},k={},T={},M={},A={},S={},E={},L={},C={},P={};for(d=0;d<r.length;d++){var O=r[d];if(x(O,"cartesian")||x(O,"gl2d")){var z,I;if(O.xaxis)z=g(O.xaxis),_(w,z,O);else if(O.xaxes)for(y=0;y<O.xaxes.length;y++)_(w,g(O.xaxes[y]),O);if(O.yaxis)I=g(O.yaxis),_(w,I,O);else if(O.yaxes)for(y=0;y<O.yaxes.length;y++)_(w,g(O.yaxes[y]),O);if("funnel"===O.type?"h"===O.orientation?(z&&(k[z]=!0),I&&(E[I]=!0)):I&&(T[I]=!0):"image"===O.type?(I&&(L[I]=!0),z&&(L[z]=!0)):(I&&(A[I]=!0,S[I]=!0),x(O,"carpet")&&("carpet"!==O.type||O._cheater)||z&&(M[z]=!0)),"carpet"===O.type&&O._cheater&&z&&(k[z]=!0),x(O,"2dMap")&&(C[z]=!0,C[I]=!0),x(O,"oriented"))P["h"===O.orientation?I:z]=!0}}var D=e._subplots,R=D.xaxis,F=D.yaxis,B=n.simpleMap(R,g),N=n.simpleMap(F,g),j=B.concat(N),V=a.background;R.length&&F.length&&(V=n.coerce(t,e,l,"plot_bgcolor"));var U,q,H,G,Y,W=a.combine(V,e.paper_bgcolor);function X(){var t=w[U]||[];Y._traceIndices=t.map(function(t){return t._expandedIndex}),Y._annIndices=[],Y._shapeIndices=[],Y._imgIndices=[],Y._subplotsWith=[],Y._counterAxes=[],Y._name=Y._attr=U,Y._id=q}function Z(t,e){return n.coerce(G,Y,c,t,e)}function J(t,e){return n.coerce2(G,Y,c,t,e)}function K(t){return"x"===t?F:R}function Q(e,r){for(var n="x"===e?B:N,a=[],i=0;i<n.length;i++){var o=n[i];o===r||(t[o]||{}).overlaying||a.push(v(o))}return a}var $={x:K("x"),y:K("y")},tt=$.x.concat($.y),et={},rt=[];function nt(){var t=G.matches;m.test(t)&&-1===tt.indexOf(t)&&(et[t]=G.type,rt=Object.keys(et))}var at=o(t,e,r),it=i(at);for(d=0;d<j.length;d++){U=j[d],q=v(U),H=U.charAt(0),n.isPlainObject(t[U])||(t[U]={}),G=t[U],Y=s.newContainer(e,U,H+"axis"),X();var ot="x"===H&&!M[U]&&k[U]||"y"===H&&!A[U]&&T[U],st="y"===H&&(!S[U]&&E[U]||L[U]),lt={letter:H,font:e.font,outerTicks:C[U],showGrid:!P[U],data:w[U]||[],bgColor:W,calendar:e.calendar,automargin:!0,visibleDflt:ot,reverseDflt:st,splomStash:((e._splomAxes||{})[H]||{})[q]};Z("uirevision",e.uirevision),u(G,Y,Z,lt),h(G,Y,Z,lt,e);var ct=it&&H===at.charAt(0),ut=J("spikecolor",it?Y.color:void 0),ht=J("spikethickness",it?1.5:void 0),ft=J("spikedash",it?"dot":void 0),pt=J("spikemode",it?"across":void 0),dt=J("spikesnap",it?"hovered data":void 0);Z("showspikes",!!(ct||ut||ht||ft||pt||dt))||(delete Y.spikecolor,delete Y.spikethickness,delete Y.spikedash,delete Y.spikemode,delete Y.spikesnap),p(G,Y,Z,{letter:H,counterAxes:$[H],overlayableAxes:Q(H,U),grid:e.grid}),Z("title.standoff"),nt(),Y._input=G}for(d=0;d<rt.length;){q=rt[d++],H=(U=g(q)).charAt(0),n.isPlainObject(t[U])||(t[U]={}),G=t[U],Y=s.newContainer(e,U,H+"axis"),X();var gt={letter:H,font:e.font,outerTicks:C[U],showGrid:!P[U],data:[],bgColor:W,calendar:e.calendar,automargin:!0,visibleDflt:!1,reverseDflt:!1,splomStash:((e._splomAxes||{})[H]||{})[q]};Z("uirevision",e.uirevision),Y.type=et[q]||"linear",h(G,Y,Z,gt,e),p(G,Y,Z,{letter:H,counterAxes:$[H],overlayableAxes:Q(H,U),grid:e.grid}),Z("fixedrange"),nt(),Y._input=G}var vt=b("rangeslider","handleDefaults"),mt=b("rangeselector","handleDefaults");for(d=0;d<B.length;d++)U=B[d],G=t[U],Y=e[U],vt(t,e,U),"date"===Y.type&&mt(G,Y,e,N,Y.calendar),Z("fixedrange");for(d=0;d<N.length;d++){U=N[d],G=t[U],Y=e[U];var yt=e[g(Y.anchor)];Z("fixedrange",b("rangeslider","isVisible")(yt))}var xt=e._axisConstraintGroups=[],bt=e._axisMatchGroups=[],_t=tt.concat(rt),wt=j.concat(n.simpleMap(rt,g));for(d=0;d<wt.length;d++){var kt,Tt;H=(U=wt[d]).charAt(0),G=t[U],Y=e[U],kt="y"===H&&!G.hasOwnProperty("scaleanchor")&&L[U]?Y.anchor:void 0,Tt=!G.hasOwnProperty("constrain")&&L[U]?"domain":void 0,f(G,Y,Z,{allAxisIds:_t,layoutOut:e,scaleanchorDflt:kt,constrainDflt:Tt})}for(d=0;d<bt.length;d++){var Mt=bt[d],At=null,St=null;for(q in Mt)(Y=e[g(q)]).matches||(At=Y.range,St=Y.autorange);if(null===At||null===St)for(q in Mt){At=(Y=e[g(q)]).range,St=Y.autorange;break}for(q in Mt)(Y=e[g(q)]).matches&&(Y.range=At.slice(),Y.autorange=St),Y._matchGroup=Mt;if(xt.length)for(q in Mt)for(y=0;y<xt.length;y++){var Et=xt[y];for(var Lt in Et)q===Lt&&(n.warn("Axis "+Lt+" is set with both a *scaleanchor* and *matches* constraint; ignoring the scale constraint."),delete Et[Lt],Object.keys(Et).length<2&&xt.splice(y,1))}}}},{"../../components/color":591,"../../components/fx/helpers":626,"../../components/fx/hovermode_defaults":629,"../../lib":717,"../../plot_api/plot_template":755,"../../registry":846,"../layout_attributes":817,"./axis_defaults":767,"./axis_ids":768,"./constants":771,"./constraints":772,"./layout_attributes":777,"./position_defaults":780,"./type_defaults":788}],779:[function(t,e,r){"use strict";var n=t("tinycolor2").mix,a=t("../../components/color/attributes").lightFraction,i=t("../../lib");e.exports=function(t,e,r,o){var s=(o=o||{}).dfltColor;function l(r,n){return i.coerce2(t,e,o.attributes,r,n)}var c=l("linecolor",s),u=l("linewidth");r("showline",o.showLine||!!c||!!u)||(delete e.linecolor,delete e.linewidth);var h=l("gridcolor",n(s,o.bgColor,o.blend||a).toRgbString()),f=l("gridwidth");if(r("showgrid",o.showGrid||!!h||!!f)||(delete e.gridcolor,delete e.gridwidth),!o.noZeroLine){var p=l("zerolinecolor",s),d=l("zerolinewidth");r("zeroline",o.showGrid||!!p||!!d)||(delete e.zerolinecolor,delete e.zerolinewidth)}}},{"../../components/color/attributes":590,"../../lib":717,tinycolor2:535}],780:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib");e.exports=function(t,e,r,i){var o,s,l,c,u=i.counterAxes||[],h=i.overlayableAxes||[],f=i.letter,p=i.grid;p&&(s=p._domains[f][p._axisMap[e._id]],o=p._anchors[e._id],s&&(l=p[f+"side"].split(" ")[0],c=p.domain[f]["right"===l||"top"===l?1:0])),s=s||[0,1],o=o||(n(t.position)?"free":u[0]||"free"),l=l||("x"===f?"bottom":"left"),c=c||0,"free"===a.coerce(t,e,{anchor:{valType:"enumerated",values:["free"].concat(u),dflt:o}},"anchor")&&r("position",c),a.coerce(t,e,{side:{valType:"enumerated",values:"x"===f?["bottom","top"]:["left","right"],dflt:l}},"side");var d=!1;if(h.length&&(d=a.coerce(t,e,{overlaying:{valType:"enumerated",values:[!1].concat(h),dflt:!1}},"overlaying")),!d){var g=r("domain",s);g[0]>g[1]-1/4096&&(e.domain=s),a.noneOrAll(t.domain,e.domain,s)}return r("layer"),e}},{"../../lib":717,"fast-isnumeric":228}],781:[function(t,e,r){"use strict";var n=t("../../constants/alignment").FROM_BL;e.exports=function(t,e,r){void 0===r&&(r=n[t.constraintoward||"center"]);var a=[t.r2l(t.range[0]),t.r2l(t.range[1])],i=a[0]+(a[1]-a[0])*r;t.range=t._input.range=[t.l2r(i+(a[0]-i)*e),t.l2r(i+(a[1]-i)*e)]}},{"../../constants/alignment":686}],782:[function(t,e,r){"use strict";var n=t("polybooljs"),a=t("../../registry"),i=t("../../components/color"),o=t("../../components/fx"),s=t("../../lib"),l=t("../../lib/polygon"),c=t("../../lib/throttle"),u=t("../../components/fx/helpers").makeEventData,h=t("./axis_ids").getFromId,f=t("../../lib/clear_gl_canvases"),p=t("../../plot_api/subroutines").redrawReglTraces,d=t("./constants"),g=d.MINSELECT,v=l.filter,m=l.tester;function y(t){return t._id}function x(t,e,r,n,a,i,o){var s,l,c,u,h,f,p,d,g,v=e._hoverdata,m=e._fullLayout.clickmode.indexOf("event")>-1,y=[];if(function(t){return t&&Array.isArray(t)&&!0!==t[0].hoverOnBox}(v)){k(t,e,i);var x=function(t,e){var r,n,a=t[0],i=-1,o=[];for(n=0;n<e.length;n++)if(r=e[n],a.fullData._expandedIndex===r.cd[0].trace._expandedIndex){if(!0===a.hoverOnBox)break;void 0!==a.pointNumber?i=a.pointNumber:void 0!==a.binNumber&&(i=a.binNumber,o=a.pointNumbers);break}return{pointNumber:i,pointNumbers:o,searchInfo:r}}(v,s=M(e,r,n,a));if(x.pointNumbers.length>0?function(t,e){var r,n,a,i=[];for(a=0;a<t.length;a++)(r=t[a]).cd[0].trace.selectedpoints&&r.cd[0].trace.selectedpoints.length>0&&i.push(r);if(1===i.length&&i[0]===e.searchInfo&&(n=e.searchInfo.cd[0].trace).selectedpoints.length===e.pointNumbers.length){for(a=0;a<e.pointNumbers.length;a++)if(n.selectedpoints.indexOf(e.pointNumbers[a])<0)return!1;return!0}return!1}(s,x):function(t){var e,r,n,a=0;for(n=0;n<t.length;n++)if(e=t[n],(r=e.cd[0].trace).selectedpoints){if(r.selectedpoints.length>1)return!1;if((a+=r.selectedpoints.length)>1)return!1}return 1===a}(s)&&(f=S(x))){for(o&&o.remove(),g=0;g<s.length;g++)(l=s[g])._module.selectPoints(l,!1);E(e,s),T(i),m&&e.emit("plotly_deselect",null)}else{for(p=t.shiftKey&&(void 0!==f?f:S(x)),c=function(t,e,r){return{pointNumber:t,searchInfo:e,subtract:r}}(x.pointNumber,x.searchInfo,p),u=w(i.selectionDefs.concat([c])),g=0;g<s.length;g++)if(h=L(s[g]._module.selectPoints(s[g],u),s[g]),y.length)for(var b=0;b<h.length;b++)y.push(h[b]);else y=h;E(e,s,d={points:y}),c&&i&&i.selectionDefs.push(c),o&&A(i.mergedPolygons,o),m&&e.emit("plotly_selected",d)}}}function b(t){return"pointNumber"in t&&"searchInfo"in t}function _(t){return{xmin:0,xmax:0,ymin:0,ymax:0,pts:[],contains:function(e,r,n,a){var i=t.searchInfo.cd[0].trace._expandedIndex;return a.cd[0].trace._expandedIndex===i&&n===t.pointNumber},isRect:!1,degenerate:!1,subtract:t.subtract}}function w(t){for(var e=[],r=b(t[0])?0:t[0][0][0],n=r,a=b(t[0])?0:t[0][0][1],i=a,o=0;o<t.length;o++)if(b(t[o]))e.push(_(t[o]));else{var s=l.tester(t[o]);s.subtract=t[o].subtract,e.push(s),r=Math.min(r,s.xmin),n=Math.max(n,s.xmax),a=Math.min(a,s.ymin),i=Math.max(i,s.ymax)}return{xmin:r,xmax:n,ymin:a,ymax:i,pts:[],contains:function(t,r,n,a){for(var i=!1,o=0;o<e.length;o++)e[o].contains(t,r,n,a)&&(i=!1===e[o].subtract);return i},isRect:!1,degenerate:!1}}function k(t,e,r){var n=e._fullLayout,a=r.plotinfo,i=n._lastSelectedSubplot&&n._lastSelectedSubplot===a.id,o=t.shiftKey||t.altKey;i&&o&&a.selection&&a.selection.selectionDefs&&!r.selectionDefs?(r.selectionDefs=a.selection.selectionDefs,r.mergedPolygons=a.selection.mergedPolygons):o&&a.selection||T(r),i||(C(e),n._lastSelectedSubplot=a.id)}function T(t){var e=t.plotinfo;e.selection={},e.selection.selectionDefs=t.selectionDefs=[],e.selection.mergedPolygons=t.mergedPolygons=[]}function M(t,e,r,n){var a,i,o,s=[],l=e.map(y),c=r.map(y);for(o=0;o<t.calcdata.length;o++)if(!0===(i=(a=t.calcdata[o])[0].trace).visible&&i._module&&i._module.selectPoints)if(!n||i.subplot!==n&&i.geo!==n)if("splom"===i.type&&i._xaxes[l[0]]&&i._yaxes[c[0]]){var u=p(i._module,a,e[0],r[0]);u.scene=t._fullLayout._splomScenes[i.uid],s.push(u)}else if("sankey"===i.type){var f=p(i._module,a,e[0],r[0]);s.push(f)}else{if(-1===l.indexOf(i.xaxis))continue;if(-1===c.indexOf(i.yaxis))continue;s.push(p(i._module,a,h(t,i.xaxis),h(t,i.yaxis)))}else s.push(p(i._module,a,e[0],r[0]));return s;function p(t,e,r,n){return{_module:t,cd:e,xaxis:r,yaxis:n}}}function A(t,e){var r,n,a=[];for(r=0;r<t.length;r++){var i=t[r];a.push(i.join("L")+"L"+i[0])}n=t.length>0?"M"+a.join("M")+"Z":"M0,0Z",e.attr("d",n)}function S(t){var e=t.searchInfo.cd[0].trace,r=t.pointNumber,n=t.pointNumbers,a=n.length>0?n[0]:r;return!!e.selectedpoints&&e.selectedpoints.indexOf(a)>-1}function E(t,e,r){var n,i,o,s;for(n=0;n<e.length;n++){var l=e[n].cd[0].trace._fullInput,c=t._fullLayout._tracePreGUI[l.uid]||{};void 0===c.selectedpoints&&(c.selectedpoints=l._input.selectedpoints||null)}if(r){var u=r.points||[];for(n=0;n<e.length;n++)(s=e[n].cd[0].trace)._input.selectedpoints=s._fullInput.selectedpoints=[],s._fullInput!==s&&(s.selectedpoints=[]);for(n=0;n<u.length;n++){var h=u[n],d=h.data,g=h.fullData;h.pointIndices?([].push.apply(d.selectedpoints,h.pointIndices),s._fullInput!==s&&[].push.apply(g.selectedpoints,h.pointIndices)):(d.selectedpoints.push(h.pointIndex),s._fullInput!==s&&g.selectedpoints.push(h.pointIndex))}}else for(n=0;n<e.length;n++)delete(s=e[n].cd[0].trace).selectedpoints,delete s._input.selectedpoints,s._fullInput!==s&&delete s._fullInput.selectedpoints;var v=!1;for(n=0;n<e.length;n++){s=(o=(i=e[n]).cd)[0].trace,a.traceIs(s,"regl")&&(v=!0);var m=i._module,y=m.styleOnSelect||m.style;y&&(y(t,o,o[0].node3),o[0].nodeRangePlot3&&y(t,o,o[0].nodeRangePlot3))}v&&(f(t),p(t))}function L(t,e){if(Array.isArray(t))for(var r=e.cd,n=e.cd[0].trace,a=0;a<t.length;a++)t[a]=u(t[a],n,r);return t}function C(t){var e=(t._fullLayout||{})._zoomlayer;e&&e.selectAll(".select-outline").remove()}e.exports={prepSelect:function(t,e,r,a,l){var u,h,f,p,y,b,_,S=a.gd,C=S._fullLayout,P=C._zoomlayer,O=a.element.getBoundingClientRect(),z=a.plotinfo,I=z.xaxis._offset,D=z.yaxis._offset,R=e-O.left,F=r-O.top,B=R,N=F,j="M"+R+","+F,V=a.xaxes[0]._length,U=a.yaxes[0]._length,q=a.xaxes.concat(a.yaxes),H=t.altKey;k(t,S,a),"lasso"===l&&(u=v([[R,F]],d.BENDPX));var G=P.selectAll("path.select-outline-"+z.id).data([1,2]);G.enter().append("path").attr("class",function(t){return"select-outline select-outline-"+t+" select-outline-"+z.id}).attr("transform","translate("+I+", "+D+")").attr("d",j+"Z");var Y,W=P.append("path").attr("class","zoombox-corners").style({fill:i.background,stroke:i.defaultLine,"stroke-width":1}).attr("transform","translate("+I+", "+D+")").attr("d","M0,0Z"),X=C._uid+d.SELECTID,Z=[],J=M(S,a.xaxes,a.yaxes,a.subplot);function K(t,e){return"log"===t.type?t.p2d(e):t.p2r(e)}function Q(t){var e="y"===t._id.charAt(0)?1:0;return function(r){return K(t,r[e])}}function $(t,e){return t-e}Y=z.fillRangeItems?z.fillRangeItems:"select"===l?function(t,e){var r=t.range={};for(y=0;y<q.length;y++){var n=q[y],a=n._id.charAt(0);r[n._id]=[K(n,e[a+"min"]),K(n,e[a+"max"])].sort($)}}:function(t,e,r){var n=t.lassoPoints={};for(y=0;y<q.length;y++){var a=q[y];n[a._id]=r.filtered.map(Q(a))}},a.moveFn=function(t,e){B=Math.max(0,Math.min(V,t+R)),N=Math.max(0,Math.min(U,e+F));var r=Math.abs(B-R),i=Math.abs(N-F);if("select"===l){var o=C.selectdirection;"h"===(o="any"===C.selectdirection?i<Math.min(.6*r,g)?"h":r<Math.min(.6*i,g)?"v":"d":C.selectdirection)?((p=[[R,0],[R,U],[B,U],[B,0]]).xmin=Math.min(R,B),p.xmax=Math.max(R,B),p.ymin=Math.min(0,U),p.ymax=Math.max(0,U),W.attr("d","M"+p.xmin+","+(F-g)+"h-4v"+2*g+"h4ZM"+(p.xmax-1)+","+(F-g)+"h4v"+2*g+"h-4Z")):"v"===o?((p=[[0,F],[0,N],[V,N],[V,F]]).xmin=Math.min(0,V),p.xmax=Math.max(0,V),p.ymin=Math.min(F,N),p.ymax=Math.max(F,N),W.attr("d","M"+(R-g)+","+p.ymin+"v-4h"+2*g+"v4ZM"+(R-g)+","+(p.ymax-1)+"v4h"+2*g+"v-4Z")):"d"===o&&((p=[[R,F],[R,N],[B,N],[B,F]]).xmin=Math.min(R,B),p.xmax=Math.max(R,B),p.ymin=Math.min(F,N),p.ymax=Math.max(F,N),W.attr("d","M0,0Z"))}else"lasso"===l&&(u.addPt([B,N]),p=u.filtered);a.selectionDefs&&a.selectionDefs.length?(f=function(t,e,r){return r?n.difference({regions:t,inverted:!1},{regions:[e],inverted:!1}).regions:n.union({regions:t,inverted:!1},{regions:[e],inverted:!1}).regions}(a.mergedPolygons,p,H),p.subtract=H,h=w(a.selectionDefs.concat([p]))):(f=[p],h=m(p)),A(f,G),c.throttle(X,d.SELECTDELAY,function(){var t;Z=[];var e,r=[];for(y=0;y<J.length;y++)if(e=(b=J[y])._module.selectPoints(b,h),r.push(e),t=L(e,b),Z.length)for(var n=0;n<t.length;n++)Z.push(t[n]);else Z=t;E(S,J,_={points:Z}),Y(_,p,u),a.gd.emit("plotly_selecting",_)})},a.clickFn=function(t,e){var r=C.clickmode;W.remove(),c.done(X).then(function(){if(c.clear(X),2===t){for(G.remove(),y=0;y<J.length;y++)(b=J[y])._module.selectPoints(b,!1);E(S,J),T(a),S.emit("plotly_deselect",null)}else r.indexOf("select")>-1&&x(e,S,a.xaxes,a.yaxes,a.subplot,a,G),"event"===r&&S.emit("plotly_selected",void 0);o.click(S,e)}).catch(s.error)},a.doneFn=function(){W.remove(),c.done(X).then(function(){c.clear(X),a.gd.emit("plotly_selected",_),p&&a.selectionDefs&&(p.subtract=H,a.selectionDefs.push(p),a.mergedPolygons.length=0,[].push.apply(a.mergedPolygons,f)),a.doneFnCompleted&&a.doneFnCompleted(Z)}).catch(s.error)}},clearSelect:C,selectOnClick:x}},{"../../components/color":591,"../../components/fx":630,"../../components/fx/helpers":626,"../../lib":717,"../../lib/clear_gl_canvases":702,"../../lib/polygon":729,"../../lib/throttle":742,"../../plot_api/subroutines":756,"../../registry":846,"./axis_ids":768,"./constants":771,polybooljs:474}],783:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../../lib"),o=i.cleanNumber,s=i.ms2DateTime,l=i.dateTime2ms,c=i.ensureNumber,u=i.isArrayOrTypedArray,h=t("../../constants/numerical"),f=h.FP_SAFE,p=h.BADNUM,d=h.LOG_CLIP,g=h.ONEDAY,v=h.ONEHOUR,m=h.ONEMIN,y=h.ONESEC,x=t("./axis_ids"),b=t("./constants"),_=b.HOUR_PATTERN,w=b.WEEKDAY_PATTERN;function k(t){return Math.pow(10,t)}function T(t){return null!=t}e.exports=function(t,e){e=e||{};var r=t._id||"x",h=r.charAt(0);function M(e,r){if(e>0)return Math.log(e)/Math.LN10;if(e<=0&&r&&t.range&&2===t.range.length){var n=t.range[0],a=t.range[1];return.5*(n+a-2*d*Math.abs(n-a))}return p}function A(e,r,n){var o=l(e,n||t.calendar);if(o===p){if(!a(e))return p;e=+e;var s=Math.floor(10*i.mod(e+.05,1)),c=Math.round(e-s/10);o=l(new Date(c))+s/10}return o}function S(e,r,n){return s(e,r,n||t.calendar)}function E(e){return t._categories[Math.round(e)]}function L(e){if(T(e)){if(void 0===t._categoriesMap&&(t._categoriesMap={}),void 0!==t._categoriesMap[e])return t._categoriesMap[e];t._categories.push("number"==typeof e?String(e):e);var r=t._categories.length-1;return t._categoriesMap[e]=r,r}return p}function C(e){if(t._categoriesMap)return t._categoriesMap[e]}function P(t){var e=C(t);return void 0!==e?e:a(t)?+t:void 0}function O(t,e,r){return n.round(r+e*t,2)}function z(t,e,r){return(t-r)/e}var I=function(e){return a(e)?O(e,t._m,t._b):p},D=function(e){return z(e,t._m,t._b)};if(t.rangebreaks){var R="y"===h;I=function(e){if(!a(e))return p;var r=t._rangebreaks.length;if(!r)return O(e,t._m,t._b);var n=R;t.range[0]>t.range[1]&&(n=!n);for(var i=n?-1:1,o=i*e,s=0,l=0;l<r;l++){var c=i*t._rangebreaks[l].min,u=i*t._rangebreaks[l].max;if(o<c)break;if(!(o>u)){s=o<(c+u)/2?l:l+1;break}s=l+1}var h=t._B[s]||0;return isFinite(h)?O(e,t._m2,h):0},D=function(e){var r=t._rangebreaks.length;if(!r)return z(e,t._m,t._b);for(var n=0,a=0;a<r&&!(e<t._rangebreaks[a].pmin);a++)e>t._rangebreaks[a].pmax&&(n=a+1);return z(e,t._m2,t._B[n])}}t.c2l="log"===t.type?M:c,t.l2c="log"===t.type?k:c,t.l2p=I,t.p2l=D,t.c2p="log"===t.type?function(t,e){return I(M(t,e))}:I,t.p2c="log"===t.type?function(t){return k(D(t))}:D,-1!==["linear","-"].indexOf(t.type)?(t.d2r=t.r2d=t.d2c=t.r2c=t.d2l=t.r2l=o,t.c2d=t.c2r=t.l2d=t.l2r=c,t.d2p=t.r2p=function(e){return t.l2p(o(e))},t.p2d=t.p2r=D,t.cleanPos=c):"log"===t.type?(t.d2r=t.d2l=function(t,e){return M(o(t),e)},t.r2d=t.r2c=function(t){return k(o(t))},t.d2c=t.r2l=o,t.c2d=t.l2r=c,t.c2r=M,t.l2d=k,t.d2p=function(e,r){return t.l2p(t.d2r(e,r))},t.p2d=function(t){return k(D(t))},t.r2p=function(e){return t.l2p(o(e))},t.p2r=D,t.cleanPos=c):"date"===t.type?(t.d2r=t.r2d=i.identity,t.d2c=t.r2c=t.d2l=t.r2l=A,t.c2d=t.c2r=t.l2d=t.l2r=S,t.d2p=t.r2p=function(e,r,n){return t.l2p(A(e,0,n))},t.p2d=t.p2r=function(t,e,r){return S(D(t),e,r)},t.cleanPos=function(e){return i.cleanDate(e,p,t.calendar)}):"category"===t.type?(t.d2c=t.d2l=L,t.r2d=t.c2d=t.l2d=E,t.d2r=t.d2l_noadd=P,t.r2c=function(e){var r=P(e);return void 0!==r?r:t.fraction2r(.5)},t.l2r=t.c2r=c,t.r2l=P,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return E(D(t))},t.r2p=t.d2p,t.p2r=D,t.cleanPos=function(t){return"string"==typeof t&&""!==t?t:c(t)}):"multicategory"===t.type&&(t.r2d=t.c2d=t.l2d=E,t.d2r=t.d2l_noadd=P,t.r2c=function(e){var r=P(e);return void 0!==r?r:t.fraction2r(.5)},t.r2c_just_indices=C,t.l2r=t.c2r=c,t.r2l=P,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return E(D(t))},t.r2p=t.d2p,t.p2r=D,t.cleanPos=function(t){return Array.isArray(t)||"string"==typeof t&&""!==t?t:c(t)},t.setupMultiCategory=function(n){var a,o,s=t._traceIndices,l=e._axisMatchGroups;if(l&&l.length&&0===t._categories.length)for(a=0;a<l.length;a++){var c=l[a];if(c[r])for(var f in c)if(f!==r){var p=e[x.id2name(f)];s=s.concat(p._traceIndices)}}var d=[[0,{}],[0,{}]],g=[];for(a=0;a<s.length;a++){var v=n[s[a]];if(h in v){var m=v[h],y=v._length||i.minRowLength(m);if(u(m[0])&&u(m[1]))for(o=0;o<y;o++){var b=m[0][o],_=m[1][o];T(b)&&T(_)&&(g.push([b,_]),b in d[0][1]||(d[0][1][b]=d[0][0]++),_ in d[1][1]||(d[1][1][_]=d[1][0]++))}}}for(g.sort(function(t,e){var r=d[0][1],n=r[t[0]]-r[e[0]];if(n)return n;var a=d[1][1];return a[t[1]]-a[e[1]]}),a=0;a<g.length;a++)L(g[a])}),t.fraction2r=function(e){var r=t.r2l(t.range[0]),n=t.r2l(t.range[1]);return t.l2r(r+e*(n-r))},t.r2fraction=function(e){var r=t.r2l(t.range[0]),n=t.r2l(t.range[1]);return(t.r2l(e)-r)/(n-r)},t.cleanRange=function(e,r){r||(r={}),e||(e="range");var n,o,s=i.nestedProperty(t,e).get();if(o=(o="date"===t.type?i.dfltRange(t.calendar):"y"===h?b.DFLTRANGEY:r.dfltRange||b.DFLTRANGEX).slice(),"tozero"!==t.rangemode&&"nonnegative"!==t.rangemode||(o[0]=0),s&&2===s.length)for("date"!==t.type||t.autorange||(s[0]=i.cleanDate(s[0],p,t.calendar),s[1]=i.cleanDate(s[1],p,t.calendar)),n=0;n<2;n++)if("date"===t.type){if(!i.isDateTime(s[n],t.calendar)){t[e]=o;break}if(t.r2l(s[0])===t.r2l(s[1])){var l=i.constrain(t.r2l(s[0]),i.MIN_MS+1e3,i.MAX_MS-1e3);s[0]=t.l2r(l-1e3),s[1]=t.l2r(l+1e3);break}}else{if(!a(s[n])){if(!a(s[1-n])){t[e]=o;break}s[n]=s[1-n]*(n?10:.1)}if(s[n]<-f?s[n]=-f:s[n]>f&&(s[n]=f),s[0]===s[1]){var c=Math.max(1,Math.abs(1e-6*s[0]));s[0]-=c,s[1]+=c}}else i.nestedProperty(t,e).set(o)},t.setScale=function(r){var n=e._size;if(t.overlaying){var a=x.getFromId({_fullLayout:e},t.overlaying);t.domain=a.domain}var i=r&&t._r?"_r":"range",o=t.calendar;t.cleanRange(i);var s,l,c=t.r2l(t[i][0],o),u=t.r2l(t[i][1],o),f="y"===h;if((f?(t._offset=n.t+(1-t.domain[1])*n.h,t._length=n.h*(t.domain[1]-t.domain[0]),t._m=t._length/(c-u),t._b=-t._m*u):(t._offset=n.l+t.domain[0]*n.w,t._length=n.w*(t.domain[1]-t.domain[0]),t._m=t._length/(u-c),t._b=-t._m*c),t._rangebreaks=[],t._lBreaks=0,t._m2=0,t._B=[],t.rangebreaks)&&(t._rangebreaks=t.locateBreaks(Math.min(c,u),Math.max(c,u)),t._rangebreaks.length)){for(s=0;s<t._rangebreaks.length;s++)l=t._rangebreaks[s],t._lBreaks+=Math.abs(l.max-l.min);var p=f;c>u&&(p=!p),p&&t._rangebreaks.reverse();var d=p?-1:1;for(t._m2=d*t._length/(Math.abs(u-c)-t._lBreaks),t._B.push(-t._m2*(f?u:c)),s=0;s<t._rangebreaks.length;s++)l=t._rangebreaks[s],t._B.push(t._B[t._B.length-1]-d*t._m2*(l.max-l.min));for(s=0;s<t._rangebreaks.length;s++)(l=t._rangebreaks[s]).pmin=I(l.min),l.pmax=I(l.max)}if(!isFinite(t._m)||!isFinite(t._b)||t._length<0)throw e._replotting=!1,new Error("Something went wrong with axis scaling")},t.maskBreaks=function(e){for(var r,n,a,s,l,c=t.rangebreaks||[],u=0;u<c.length;u++){var h=c[u];if(h.enabled)if(h.bounds){var f=h.pattern;switch(n=(r=i.simpleMap(h.bounds,f?o:t.d2c))[0],a=r[1],f){case w:s=(l=new Date(e)).getUTCDay(),n>a&&(a+=7,s<n&&(s+=7));break;case _:s=(l=new Date(e)).getUTCHours()+(l.getUTCMinutes()/60+l.getUTCSeconds()/3600+l.getUTCMilliseconds()/36e5),n>a&&(a+=24,s<n&&(s+=24));break;case"":s=e}if(s>=n&&s<a)return p}else for(var d=i.simpleMap(h.values,t.d2c).sort(i.sorterAsc),g=0;g<d.length;g++)if(a=(n=d[g])+h.dvalue,e>=n&&e<a)return p}return e},t.locateBreaks=function(e,r){var n,a,s,l,c=[];if(!t.rangebreaks)return c;var u=t.rangebreaks.slice().sort(function(t,e){return t.pattern===w&&e.pattern===_?-1:e.pattern===w&&t.pattern===_?1:0}),h=function(t,n){if((t=i.constrain(t,e,r))!==(n=i.constrain(n,e,r))){for(var a=!0,o=0;o<c.length;o++){var s=c[o];t>s.max||n<s.min||(t<s.min&&(s.min=t),n>s.max&&(s.max=n),a=!1)}a&&c.push({min:t,max:n})}};for(n=0;n<u.length;n++){var f=u[n];if(f.enabled)if(f.bounds){var p=e,d=r;f.pattern&&(p=Math.floor(p)),s=(a=i.simpleMap(f.bounds,f.pattern?o:t.r2l))[0],l=a[1];var x,b,k=new Date(p);switch(f.pattern){case w:b=7*g,x=(l-s+(l<s?7:0))*g,p+=s*g-(k.getUTCDay()*g+k.getUTCHours()*v+k.getUTCMinutes()*m+k.getUTCSeconds()*y+k.getUTCMilliseconds());break;case _:b=g,x=(l-s+(l<s?24:0))*v,p+=s*v-(k.getUTCHours()*v+k.getUTCMinutes()*m+k.getUTCSeconds()*y+k.getUTCMilliseconds());break;default:p=Math.min(a[0],a[1]),x=b=(d=Math.max(a[0],a[1]))-p}for(var T=p;T<d;T+=b)h(T,T+x)}else for(var M=i.simpleMap(f.values,t.d2c),A=0;A<M.length;A++)h(s=M[A],l=s+f.dvalue)}return c.sort(function(t,e){return t.min-e.min}),c},t.makeCalcdata=function(e,r){var n,a,o,s,l=t.type,c="date"===l&&e[r+"calendar"];if(r in e){if(n=e[r],s=e._length||i.minRowLength(n),i.isTypedArray(n)&&("linear"===l||"log"===l)){if(s===n.length)return n;if(n.subarray)return n.subarray(0,s)}if("multicategory"===l)return function(t,e){for(var r=new Array(e),n=0;n<e;n++){var a=(t[0]||[])[n],i=(t[1]||[])[n];r[n]=C([a,i])}return r}(n,s);for(a=new Array(s),o=0;o<s;o++)a[o]=t.d2c(n[o],0,c)}else{var u=r+"0"in e?t.d2c(e[r+"0"],0,c):0,h=e["d"+r]?Number(e["d"+r]):1;for(n=e[{x:"y",y:"x"}[r]],s=e._length||n.length,a=new Array(s),o=0;o<s;o++)a[o]=u+o*h}if(t.rangebreaks)for(o=0;o<s;o++)a[o]=t.maskBreaks(a[o]);return a},t.isValidRange=function(e){return Array.isArray(e)&&2===e.length&&a(t.r2l(e[0]))&&a(t.r2l(e[1]))},t.isPtWithinRange=function(e,r){var n=t.c2l(e[h],null,r),a=t.r2l(t.range[0]),i=t.r2l(t.range[1]);return a<i?a<=n&&n<=i:i<=n&&n<=a},t.clearCalc=function(){var n=function(){t._categories=[],t._categoriesMap={}},a=e._axisMatchGroups;if(a&&a.length){for(var i=!1,o=0;o<a.length;o++){var s=a[o];if(s[r]){i=!0;var l=null,c=null;for(var u in s){var h=e[x.id2name(u)];if(h._categories){l=h._categories,c=h._categoriesMap;break}}l&&c?(t._categories=l,t._categoriesMap=c):n();break}}i||n()}else n();if(t._initialCategories)for(var f=0;f<t._initialCategories.length;f++)L(t._initialCategories[f])},t.sortByInitialCategories=function(){var n=[];if(t._categories=[],t._categoriesMap={},t._initialCategories)for(var a=0;a<t._initialCategories.length;a++)L(t._initialCategories[a]);n=n.concat(t._traceIndices);var i=t._matchGroup;for(var o in i)if(r!==o){var s=e[x.id2name(o)];s._categories=t._categories,s._categoriesMap=t._categoriesMap,n=n.concat(s._traceIndices)}return n};var F=e._d3locale;"date"===t.type&&(t._dateFormat=F?F.timeFormat.utc:n.time.format.utc,t._extraFormat=e._extraFormat),t._separators=e.separators,t._numFormat=F?F.numberFormat:n.format,delete t._minDtick,delete t._forceTick0}},{"../../constants/numerical":693,"../../lib":717,"./axis_ids":768,"./constants":771,d3:165,"fast-isnumeric":228}],784:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes"),i=t("../array_container_defaults");function o(t){var e=["showexponent","showtickprefix","showticksuffix"].filter(function(e){return void 0!==t[e]});if(e.every(function(r){return t[r]===t[e[0]]})||1===e.length)return t[e[0]]}function s(t,e){function r(r,i){return n.coerce(t,e,a.tickformatstops,r,i)}r("enabled")&&(r("dtickrange"),r("value"))}e.exports=function(t,e,r,l,c,u){u&&1!==u.pass||function(t,e,r,n,a){var i=o(t);r("tickprefix")&&r("showtickprefix",i);r("ticksuffix",a.tickSuffixDflt)&&r("showticksuffix",i)}(t,0,r,0,c),u&&2!==u.pass||function(t,e,r,l,c){var u=o(t);r("tickprefix")&&r("showtickprefix",u);r("ticksuffix",c.tickSuffixDflt)&&r("showticksuffix",u);if(r("showticklabels")){var h=c.font||{},f=e.color,p=f&&f!==a.color.dflt?f:h.color;if(n.coerceFont(r,"tickfont",{family:h.family,size:h.size,color:p}),r("tickangle"),"category"!==l){var d=r("tickformat");i(t,e,{name:"tickformatstops",inclusionAttr:"enabled",handleItemDefaults:s}),e.tickformatstops.length||delete e.tickformatstops,d||"date"===l||(r("showexponent",u),r("exponentformat"),r("separatethousands"))}}}(t,e,r,l,c)}},{"../../lib":717,"../array_container_defaults":761,"./layout_attributes":777}],785:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e,r,i){var o=n.coerce2(t,e,a,"ticklen"),s=n.coerce2(t,e,a,"tickwidth"),l=n.coerce2(t,e,a,"tickcolor",e.color);r("ticks",i.outerTicks||o||s||l?"outside":"")||(delete e.ticklen,delete e.tickwidth,delete e.tickcolor)}},{"../../lib":717,"./layout_attributes":777}],786:[function(t,e,r){"use strict";var n=t("./clean_ticks");e.exports=function(t,e,r,a){function i(r){var n=t[r];return void 0!==n?n:(e._template||{})[r]}var o,s=i("tick0"),l=i("dtick"),c=i("tickvals");"array"!==i("tickmode")||"log"!==a&&"date"!==a?o=r("tickmode",Array.isArray(c)?"array":l?"linear":"auto"):o=e.tickmode="auto";if("auto"===o)r("nticks");else if("linear"===o){var u=e.dtick=n.dtick(l,a);e.tick0=n.tick0(s,a,e.calendar,u)}else if("multicategory"!==a){void 0===r("tickvals")?e.tickmode="auto":r("ticktext")}}},{"./clean_ticks":770}],787:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../lib"),o=t("../../components/drawing"),s=t("./axes");e.exports=function(t,e,r,l){var c=t._fullLayout;if(0!==e.length){var u,h,f,p;l&&(u=l());var d=n.ease(r.easing);return t._transitionData._interruptCallbacks.push(function(){return window.cancelAnimationFrame(p),p=null,function(){for(var r={},n=0;n<e.length;n++){var i=e[n],o=i.plotinfo.xaxis,s=i.plotinfo.yaxis;i.xr0&&(r[o._name+".range"]=i.xr0.slice()),i.yr0&&(r[s._name+".range"]=i.yr0.slice())}return a.call("relayout",t,r).then(function(){for(var t=0;t<e.length;t++)g(e[t].plotinfo)})}()}),h=Date.now(),p=window.requestAnimationFrame(function n(){f=Date.now();for(var i=Math.min(1,(f-h)/r.duration),o=d(i),s=0;s<e.length;s++)v(e[s],o);f-h>r.duration?(function(){for(var r={},n=0;n<e.length;n++){var i=e[n],o=i.plotinfo.xaxis,s=i.plotinfo.yaxis;i.xr1&&(r[o._name+".range"]=i.xr1.slice()),i.yr1&&(r[s._name+".range"]=i.yr1.slice())}u&&u(),a.call("relayout",t,r).then(function(){for(var t=0;t<e.length;t++)g(e[t].plotinfo)})}(),p=window.cancelAnimationFrame(n)):p=window.requestAnimationFrame(n)}),Promise.resolve()}function g(t){var e=t.xaxis,r=t.yaxis;c._defs.select("#"+t.clipId+"> rect").call(o.setTranslate,0,0).call(o.setScale,1,1),t.plot.call(o.setTranslate,e._offset,r._offset).call(o.setScale,1,1);var n=t.plot.selectAll(".scatterlayer .trace");n.selectAll(".point").call(o.setPointGroupScale,1,1),n.selectAll(".textpoint").call(o.setTextPointsScale,1,1),n.call(o.hideOutsideRangePoints,t)}function v(e,r){var n=e.plotinfo,a=n.xaxis,l=n.yaxis,c=a._length,u=l._length,h=!!e.xr1,f=!!e.yr1,p=[];if(h){var d=i.simpleMap(e.xr0,a.r2l),g=i.simpleMap(e.xr1,a.r2l),v=d[1]-d[0],m=g[1]-g[0];p[0]=(d[0]*(1-r)+r*g[0]-d[0])/(d[1]-d[0])*c,p[2]=c*(1-r+r*m/v),a.range[0]=a.l2r(d[0]*(1-r)+r*g[0]),a.range[1]=a.l2r(d[1]*(1-r)+r*g[1])}else p[0]=0,p[2]=c;if(f){var y=i.simpleMap(e.yr0,l.r2l),x=i.simpleMap(e.yr1,l.r2l),b=y[1]-y[0],_=x[1]-x[0];p[1]=(y[1]*(1-r)+r*x[1]-y[1])/(y[0]-y[1])*u,p[3]=u*(1-r+r*_/b),l.range[0]=a.l2r(y[0]*(1-r)+r*x[0]),l.range[1]=l.l2r(y[1]*(1-r)+r*x[1])}else p[1]=0,p[3]=u;s.drawOne(t,a,{skipTitle:!0}),s.drawOne(t,l,{skipTitle:!0}),s.redrawComponents(t,[a._id,l._id]);var w=h?c/p[2]:1,k=f?u/p[3]:1,T=h?p[0]:0,M=f?p[1]:0,A=h?p[0]/p[2]*c:0,S=f?p[1]/p[3]*u:0,E=a._offset-A,L=l._offset-S;n.clipRect.call(o.setTranslate,T,M).call(o.setScale,1/w,1/k),n.plot.call(o.setTranslate,E,L).call(o.setScale,w,k),o.setPointGroupScale(n.zoomScalePts,1/w,1/k),o.setTextPointsScale(n.zoomScaleTxt,1/w,1/k)}s.redrawComponents(t)}},{"../../components/drawing":612,"../../lib":717,"../../registry":846,"./axes":765,d3:165}],788:[function(t,e,r){"use strict";var n=t("../../registry").traceIs,a=t("./axis_autotype");function i(t){return{v:"x",h:"y"}[t.orientation||"v"]}function o(t,e){var r=i(t),a=n(t,"box-violin"),o=n(t._fullInput||{},"candlestick");return a&&!o&&e===r&&void 0===t[r]&&void 0===t[r+"0"]}e.exports=function(t,e,r,s){"-"===r("type",(s.splomStash||{}).type)&&(!function(t,e){if("-"!==t.type)return;var r,s=t._id,l=s.charAt(0);-1!==s.indexOf("scene")&&(s=l);var c=function(t,e,r){for(var n=0;n<t.length;n++){var a=t[n];if("splom"===a.type&&a._length>0&&(a["_"+r+"axes"]||{})[e])return a;if((a[r+"axis"]||r)===e){if(o(a,r))return a;if((a[r]||[]).length||a[r+"0"])return a}}}(e,s,l);if(!c)return;if("histogram"===c.type&&l==={v:"y",h:"x"}[c.orientation||"v"])return void(t.type="linear");var u=l+"calendar",h=c[u],f={noMultiCategory:!n(c,"cartesian")||n(c,"noMultiCategory")};"box"===c.type&&c._hasPreCompStats&&l==={h:"x",v:"y"}[c.orientation||"v"]&&(f.noMultiCategory=!0);if(o(c,l)){var p=i(c),d=[];for(r=0;r<e.length;r++){var g=e[r];n(g,"box-violin")&&(g[l+"axis"]||l)===s&&(void 0!==g[p]?d.push(g[p][0]):void 0!==g.name?d.push(g.name):d.push("text"),g[u]!==h&&(h=void 0))}t.type=a(d,h,f)}else if("splom"===c.type){var v=c.dimensions,m=v[c._axesDim[s]];m.visible&&(t.type=a(m.values,h,f))}else t.type=a(c[l]||[c[l+"0"]],h,f)}(e,s.data),"-"===e.type?e.type="linear":t.type=e.type)}},{"../../registry":846,"./axis_autotype":766}],789:[function(t,e,r){"use strict";var n=t("../registry"),a=t("../lib");function i(t,e,r){var n,i,o,s=!1;if("data"===e.type)n=t._fullData[null!==e.traces?e.traces[0]:0];else{if("layout"!==e.type)return!1;n=t._fullLayout}return i=a.nestedProperty(n,e.prop).get(),(o=r[e.type]=r[e.type]||{}).hasOwnProperty(e.prop)&&o[e.prop]!==i&&(s=!0),o[e.prop]=i,{changed:s,value:i}}function o(t,e){var r=[],n=e[0],i={};if("string"==typeof n)i[n]=e[1];else{if(!a.isPlainObject(n))return r;i=n}return l(i,function(t,e,n){r.push({type:"layout",prop:t,value:n})},"",0),r}function s(t,e){var r,n,i,o,s=[];if(n=e[0],i=e[1],r=e[2],o={},"string"==typeof n)o[n]=i;else{if(!a.isPlainObject(n))return s;o=n,void 0===r&&(r=i)}return void 0===r&&(r=null),l(o,function(e,n,a){var i,o;if(Array.isArray(a)){o=a.slice();var l=Math.min(o.length,t.data.length);r&&(l=Math.min(l,r.length)),i=[];for(var c=0;c<l;c++)i[c]=r?r[c]:c}else o=a,i=r?r.slice():null;if(null===i)Array.isArray(o)&&(o=o[0]);else if(Array.isArray(i)){if(!Array.isArray(o)){var u=o;o=[];for(var h=0;h<i.length;h++)o[h]=u}o.length=Math.min(i.length,o.length)}s.push({type:"data",prop:e,traces:i,value:o})},"",0),s}function l(t,e,r,n){Object.keys(t).forEach(function(i){var o=t[i];if("_"!==i[0]){var s=r+(n>0?".":"")+i;a.isPlainObject(o)?l(o,e,s,n+1):e(s,i,o)}})}r.manageCommandObserver=function(t,e,n,o){var s={},l=!0;e&&e._commandObserver&&(s=e._commandObserver),s.cache||(s.cache={}),s.lookupTable={};var c=r.hasSimpleAPICommandBindings(t,n,s.lookupTable);if(e&&e._commandObserver){if(c)return s;if(e._commandObserver.remove)return e._commandObserver.remove(),e._commandObserver=null,s}if(c){i(t,c,s.cache),s.check=function(){if(l){var e=i(t,c,s.cache);return e.changed&&o&&void 0!==s.lookupTable[e.value]&&(s.disable(),Promise.resolve(o({value:e.value,type:c.type,prop:c.prop,traces:c.traces,index:s.lookupTable[e.value]})).then(s.enable,s.enable)),e.changed}};for(var u=["plotly_relayout","plotly_redraw","plotly_restyle","plotly_update","plotly_animatingframe","plotly_afterplot"],h=0;h<u.length;h++)t._internalOn(u[h],s.check);s.remove=function(){for(var e=0;e<u.length;e++)t._removeInternalListener(u[e],s.check)}}else a.log("Unable to automatically bind plot updates to API command"),s.lookupTable={},s.remove=function(){};return s.disable=function(){l=!1},s.enable=function(){l=!0},e&&(e._commandObserver=s),s},r.hasSimpleAPICommandBindings=function(t,e,n){var a,i,o=e.length;for(a=0;a<o;a++){var s,l=e[a],c=l.method,u=l.args;if(Array.isArray(u)||(u=[]),!c)return!1;var h=r.computeAPICommandBindings(t,c,u);if(1!==h.length)return!1;if(i){if((s=h[0]).type!==i.type)return!1;if(s.prop!==i.prop)return!1;if(Array.isArray(i.traces)){if(!Array.isArray(s.traces))return!1;s.traces.sort();for(var f=0;f<i.traces.length;f++)if(i.traces[f]!==s.traces[f])return!1}else if(s.prop!==i.prop)return!1}else i=h[0],Array.isArray(i.traces)&&i.traces.sort();var p=(s=h[0]).value;if(Array.isArray(p)){if(1!==p.length)return!1;p=p[0]}n&&(n[p]=a)}return i},r.executeAPICommand=function(t,e,r){if("skip"===e)return Promise.resolve();var i=n.apiMethodRegistry[e],o=[t];Array.isArray(r)||(r=[]);for(var s=0;s<r.length;s++)o.push(r[s]);return i.apply(null,o).catch(function(t){return a.warn("API call to Plotly."+e+" rejected.",t),Promise.reject(t)})},r.computeAPICommandBindings=function(t,e,r){var n;switch(Array.isArray(r)||(r=[]),e){case"restyle":n=s(t,r);break;case"relayout":n=o(t,r);break;case"update":n=s(t,[r[0],r[2]]).concat(o(t,[r[1]]));break;case"animate":n=function(t,e){return Array.isArray(e[0])&&1===e[0].length&&-1!==["string","number"].indexOf(typeof e[0][0])?[{type:"layout",prop:"_currentFrame",value:e[0][0].toString()}]:[]}(0,r);break;default:n=[]}return n}},{"../lib":717,"../registry":846}],790:[function(t,e,r){"use strict";var n=t("../lib/extend").extendFlat;r.attributes=function(t,e){e=e||{};var r={valType:"info_array",editType:(t=t||{}).editType,items:[{valType:"number",min:0,max:1,editType:t.editType},{valType:"number",min:0,max:1,editType:t.editType}],dflt:[0,1]},a=(t.name&&t.name,t.trace,e.description&&e.description,{x:n({},r,{}),y:n({},r,{}),editType:t.editType});return t.noGridCell||(a.row={valType:"integer",min:0,dflt:0,editType:t.editType},a.column={valType:"integer",min:0,dflt:0,editType:t.editType}),a},r.defaults=function(t,e,r,n){var a=n&&n.x||[0,1],i=n&&n.y||[0,1],o=e.grid;if(o){var s=r("domain.column");void 0!==s&&(s<o.columns?a=o._domains.x[s]:delete t.domain.column);var l=r("domain.row");void 0!==l&&(l<o.rows?i=o._domains.y[l]:delete t.domain.row)}var c=r("domain.x",a),u=r("domain.y",i);c[0]<c[1]||(t.domain.x=a.slice()),u[0]<u[1]||(t.domain.y=i.slice())}},{"../lib/extend":708}],791:[function(t,e,r){"use strict";e.exports=function(t){var e=t.editType,r=t.colorEditType;void 0===r&&(r=e);var n={family:{valType:"string",noBlank:!0,strict:!0,editType:e},size:{valType:"number",min:1,editType:e},color:{valType:"color",editType:r},editType:e};return t.arrayOk&&(n.family.arrayOk=!0,n.size.arrayOk=!0,n.color.arrayOk=!0),n}},{}],792:[function(t,e,r){"use strict";e.exports={_isLinkedToArray:"frames_entry",group:{valType:"string"},name:{valType:"string"},traces:{valType:"any"},baseframe:{valType:"string"},data:{valType:"any"},layout:{valType:"any"}}},{}],793:[function(t,e,r){"use strict";r.projNames={equirectangular:"equirectangular",mercator:"mercator",orthographic:"orthographic","natural earth":"naturalEarth",kavrayskiy7:"kavrayskiy7",miller:"miller",robinson:"robinson",eckert4:"eckert4","azimuthal equal area":"azimuthalEqualArea","azimuthal equidistant":"azimuthalEquidistant","conic equal area":"conicEqualArea","conic conformal":"conicConformal","conic equidistant":"conicEquidistant",gnomonic:"gnomonic",stereographic:"stereographic",mollweide:"mollweide",hammer:"hammer","transverse mercator":"transverseMercator","albers usa":"albersUsa","winkel tripel":"winkel3",aitoff:"aitoff",sinusoidal:"sinusoidal"},r.axesNames=["lonaxis","lataxis"],r.lonaxisSpan={orthographic:180,"azimuthal equal area":360,"azimuthal equidistant":360,"conic conformal":180,gnomonic:160,stereographic:180,"transverse mercator":180,"*":360},r.lataxisSpan={"conic conformal":150,stereographic:179.5,"*":180},r.scopeDefaults={world:{lonaxisRange:[-180,180],lataxisRange:[-90,90],projType:"equirectangular",projRotate:[0,0,0]},usa:{lonaxisRange:[-180,-50],lataxisRange:[15,80],projType:"albers usa"},europe:{lonaxisRange:[-30,60],lataxisRange:[30,85],projType:"conic conformal",projRotate:[15,0,0],projParallels:[0,60]},asia:{lonaxisRange:[22,160],lataxisRange:[-15,55],projType:"mercator",projRotate:[0,0,0]},africa:{lonaxisRange:[-30,60],lataxisRange:[-40,40],projType:"mercator",projRotate:[0,0,0]},"north america":{lonaxisRange:[-180,-45],lataxisRange:[5,85],projType:"conic conformal",projRotate:[-100,0,0],projParallels:[29.5,45.5]},"south america":{lonaxisRange:[-100,-30],lataxisRange:[-60,15],projType:"mercator",projRotate:[0,0,0]}},r.clipPad=.001,r.precision=.1,r.landColor="#F0DC82",r.waterColor="#3399FF",r.locationmodeToLayer={"ISO-3":"countries","USA-states":"subunits","country names":"countries"},r.sphereSVG={type:"Sphere"},r.fillLayers={ocean:1,land:1,lakes:1},r.lineLayers={subunits:1,countries:1,coastlines:1,rivers:1,frame:1},r.layers=["bg","ocean","land","lakes","subunits","countries","coastlines","rivers","lataxis","lonaxis","frame","backplot","frontplot"],r.layersForChoropleth=["bg","ocean","land","subunits","countries","coastlines","lataxis","lonaxis","frame","backplot","rivers","lakes","frontplot"],r.layerNameToAdjective={ocean:"ocean",land:"land",lakes:"lake",subunits:"subunit",countries:"country",coastlines:"coastline",rivers:"river",frame:"frame"}},{}],794:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../lib"),o=t("../../components/color"),s=t("../../components/drawing"),l=t("../../components/fx"),c=t("../plots"),u=t("../cartesian/axes"),h=t("../cartesian/autorange").getAutoRange,f=t("../../components/dragelement"),p=t("../cartesian/select").prepSelect,d=t("../cartesian/select").selectOnClick,g=t("./zoom"),v=t("./constants"),m=t("../../lib/geo_location_utils"),y=t("../../lib/topojson_utils"),x=t("topojson-client").feature;function b(t){this.id=t.id,this.graphDiv=t.graphDiv,this.container=t.container,this.topojsonURL=t.topojsonURL,this.isStatic=t.staticPlot,this.topojsonName=null,this.topojson=null,this.projection=null,this.scope=null,this.viewInitial=null,this.fitScale=null,this.bounds=null,this.midPt=null,this.hasChoropleth=!1,this.traceHash={},this.layers={},this.basePaths={},this.dataPaths={},this.dataPoints={},this.clipDef=null,this.clipRect=null,this.bgRect=null,this.makeFramework()}t("./projections")(n);var _=b.prototype;function w(t,e){var r=v.clipPad,n=t[0]+r,a=t[1]-r,i=e[0]+r,o=e[1]-r;n>0&&a<0&&(a+=360);var s=(a-n)/4;return{type:"Polygon",coordinates:[[[n,i],[n,o],[n+s,o],[n+2*s,o],[n+3*s,o],[a,o],[a,i],[a-s,i],[a-2*s,i],[a-3*s,i],[n,i]]]}}e.exports=function(t){return new b(t)},_.plot=function(t,e,r){var n=this,a=e[this.id],i=[],o=!1;for(var s in v.layerNameToAdjective)if("frame"!==s&&a["show"+s]){o=!0;break}for(var l=0;l<t.length;l++)if(t[0][0].trace.locationmode){o=!0;break}if(o){var c=y.getTopojsonName(a);null!==n.topojson&&c===n.topojsonName||(n.topojsonName=c,void 0===PlotlyGeoAssets.topojson[n.topojsonName]&&i.push(n.fetchTopojson()))}i=i.concat(m.fetchTraceGeoData(t)),r.push(new Promise(function(r,a){Promise.all(i).then(function(){n.topojson=PlotlyGeoAssets.topojson[n.topojsonName],n.update(t,e),r()}).catch(a)}))},_.fetchTopojson=function(){var t=this,e=y.getTopojsonPath(t.topojsonURL,t.topojsonName);return new Promise(function(r,a){n.json(e,function(n,i){if(n)return 404===n.status?a(new Error(["plotly.js could not find topojson file at",e,".","Make sure the *topojsonURL* plot config option","is set properly."].join(" "))):a(new Error(["unexpected error while fetching topojson file at",e].join(" ")));PlotlyGeoAssets.topojson[t.topojsonName]=i,r()})})},_.update=function(t,e){var r=e[this.id];this.hasChoropleth=!1;for(var n=0;n<t.length;n++){var a=t[n],i=a[0].trace;"choropleth"===i.type&&(this.hasChoropleth=!0),!0===i.visible&&i._length>0&&i._module.calcGeoJSON(a,e)}if(!this.updateProjection(t,e)){this.viewInitial&&this.scope===r.scope||this.saveViewInitial(r),this.scope=r.scope,this.updateBaseLayers(e,r),this.updateDims(e,r),this.updateFx(e,r),c.generalUpdatePerTraceModule(this.graphDiv,this,t,r);var o=this.layers.frontplot.select(".scatterlayer");this.dataPoints.point=o.selectAll(".point"),this.dataPoints.text=o.selectAll("text"),this.dataPaths.line=o.selectAll(".js-line");var s=this.layers.backplot.select(".choroplethlayer");this.dataPaths.choropleth=s.selectAll("path"),this.render()}},_.updateProjection=function(t,e){var r=this.graphDiv,o=e[this.id],s=e._size,l=o.domain,c=o.projection,u=o.lonaxis,f=o.lataxis,p=u._ax,d=f._ax,g=this.projection=function(t){for(var e=t.projection.type,r=n.geo[v.projNames[e]](),a=t._isClipped?v.lonaxisSpan[e]/2:null,i=["center","rotate","parallels","clipExtent"],o=function(t){return t?r:[]},s=0;s<i.length;s++){var l=i[s];"function"!=typeof r[l]&&(r[l]=o)}r.isLonLatOverEdges=function(t){if(null===r(t))return!0;if(a){var e=r.rotate();return n.geo.distance(t,[-e[0],-e[1]])>a*Math.PI/180}return!1},r.getPath=function(){return n.geo.path().projection(r)},r.getBounds=function(t){return r.getPath().bounds(t)},r.fitExtent=function(t,e){var n=t[1][0]-t[0][0],a=t[1][1]-t[0][1],i=r.clipExtent&&r.clipExtent();r.scale(150).translate([0,0]),i&&r.clipExtent(null);var o=r.getBounds(e),s=Math.min(n/(o[1][0]-o[0][0]),a/(o[1][1]-o[0][1])),l=+t[0][0]+(n-s*(o[1][0]+o[0][0]))/2,c=+t[0][1]+(a-s*(o[1][1]+o[0][1]))/2;return i&&r.clipExtent(i),r.scale(150*s).translate([l,c])},r.precision(v.precision),a&&r.clipAngle(a-v.clipPad);return r}(o),m=[[s.l+s.w*l.x[0],s.t+s.h*(1-l.y[1])],[s.l+s.w*l.x[1],s.t+s.h*(1-l.y[0])]],y=o.center||{},x=c.rotation||{},b=u.range||[],_=f.range||[];if(o.fitbounds){p._length=m[1][0]-m[0][0],d._length=m[1][1]-m[0][1],p.range=h(r,p),d.range=h(r,d);var k=(p.range[0]+p.range[1])/2,T=(d.range[0]+d.range[1])/2;if(o._isScoped)y={lon:k,lat:T};else if(o._isClipped){y={lon:k,lat:T},x={lon:k,lat:T,roll:x.roll};var M=c.type,A=v.lonaxisSpan[M]/2||180,S=v.lataxisSpan[M]/2||180;b=[k-A,k+A],_=[T-S,T+S]}else y={lon:k,lat:T},x={lon:k,lat:x.lat,roll:x.roll}}g.center([y.lon-x.lon,y.lat-x.lat]).rotate([-x.lon,-x.lat,x.roll]).parallels(c.parallels);var E=w(b,_);g.fitExtent(m,E);var L=this.bounds=g.getBounds(E),C=this.fitScale=g.scale(),P=g.translate();if(!isFinite(L[0][0])||!isFinite(L[0][1])||!isFinite(L[1][0])||!isFinite(L[1][1])||isNaN(P[0])||isNaN(P[0])){for(var O=["fitbounds","projection.rotation","center","lonaxis.range","lataxis.range"],z="Invalid geo settings, relayout'ing to default view.",I={},D=0;D<O.length;D++)I[this.id+"."+O[D]]=null;return this.viewInitial=null,i.warn(z),r._promises.push(a.call("relayout",r,I)),z}if(o.fitbounds){var R=g.getBounds(w(p.range,d.range)),F=Math.min((L[1][0]-L[0][0])/(R[1][0]-R[0][0]),(L[1][1]-L[0][1])/(R[1][1]-R[0][1]));isFinite(F)?g.scale(F*C):i.warn("Something went wrong during"+this.id+"fitbounds computations.")}else g.scale(c.scale*C);var B=this.midPt=[(L[0][0]+L[1][0])/2,(L[0][1]+L[1][1])/2];if(g.translate([P[0]+(B[0]-P[0]),P[1]+(B[1]-P[1])]).clipExtent(L),o._isAlbersUsa){var N=g([y.lon,y.lat]),j=g.translate();g.translate([j[0]-(N[0]-j[0]),j[1]-(N[1]-j[1])])}},_.updateBaseLayers=function(t,e){var r=this,a=r.topojson,i=r.layers,l=r.basePaths;function c(t){return"lonaxis"===t||"lataxis"===t}function h(t){return Boolean(v.lineLayers[t])}function f(t){return Boolean(v.fillLayers[t])}var p=(this.hasChoropleth?v.layersForChoropleth:v.layers).filter(function(t){return h(t)||f(t)?e["show"+t]:!c(t)||e[t].showgrid}),d=r.framework.selectAll(".layer").data(p,String);d.exit().each(function(t){delete i[t],delete l[t],n.select(this).remove()}),d.enter().append("g").attr("class",function(t){return"layer "+t}).each(function(t){var e=i[t]=n.select(this);"bg"===t?r.bgRect=e.append("rect").style("pointer-events","all"):c(t)?l[t]=e.append("path").style("fill","none"):"backplot"===t?e.append("g").classed("choroplethlayer",!0):"frontplot"===t?e.append("g").classed("scatterlayer",!0):h(t)?l[t]=e.append("path").style("fill","none").style("stroke-miterlimit",2):f(t)&&(l[t]=e.append("path").style("stroke","none"))}),d.order(),d.each(function(r){var n=l[r],i=v.layerNameToAdjective[r];"frame"===r?n.datum(v.sphereSVG):h(r)||f(r)?n.datum(x(a,a.objects[r])):c(r)&&n.datum(function(t,e,r){var n,a,i,o=e[t],s=v.scopeDefaults[e.scope];"lonaxis"===t?(n=s.lonaxisRange,a=s.lataxisRange,i=function(t,e){return[t,e]}):"lataxis"===t&&(n=s.lataxisRange,a=s.lonaxisRange,i=function(t,e){return[e,t]});var l={type:"linear",range:[n[0],n[1]-1e-6],tick0:o.tick0,dtick:o.dtick};u.setConvert(l,r);var c=u.calcTicks(l);e.isScoped||"lonaxis"!==t||c.pop();for(var h=c.length,f=new Array(h),p=0;p<h;p++)for(var d=c[p].x,g=f[p]=[],m=a[0];m<a[1]+2.5;m+=2.5)g.push(i(d,m));return{type:"MultiLineString",coordinates:f}}(r,e,t)).call(o.stroke,e[r].gridcolor).call(s.dashLine,"",e[r].gridwidth),h(r)?n.call(o.stroke,e[i+"color"]).call(s.dashLine,"",e[i+"width"]):f(r)&&n.call(o.fill,e[i+"color"])})},_.updateDims=function(t,e){var r=this.bounds,n=(e.framewidth||0)/2,a=r[0][0]-n,i=r[0][1]-n,l=r[1][0]-a+n,c=r[1][1]-i+n;s.setRect(this.clipRect,a,i,l,c),this.bgRect.call(s.setRect,a,i,l,c).call(o.fill,e.bgcolor),this.xaxis._offset=a,this.xaxis._length=l,this.yaxis._offset=i,this.yaxis._length=c},_.updateFx=function(t,e){var r=this,i=r.graphDiv,o=r.bgRect,s=t.dragmode,c=t.clickmode;if(!r.isStatic){var u;"select"===s?u=function(t,e){(t.range={})[r.id]=[v([e.xmin,e.ymin]),v([e.xmax,e.ymax])]}:"lasso"===s&&(u=function(t,e,n){(t.lassoPoints={})[r.id]=n.filtered.map(v)});var h={element:r.bgRect.node(),gd:i,plotinfo:{id:r.id,xaxis:r.xaxis,yaxis:r.yaxis,fillRangeItems:u},xaxes:[r.xaxis],yaxes:[r.yaxis],subplot:r.id,clickFn:function(e){2===e&&t._zoomlayer.selectAll(".select-outline").remove()}};"pan"===s?(o.node().onmousedown=null,o.call(g(r,e)),o.on("dblclick.zoom",function(){var t=r.viewInitial,e={};for(var n in t)e[r.id+"."+n]=t[n];a.call("_guiRelayout",i,e),i.emit("plotly_doubleclick",null)}),i._context._scrollZoom.geo||o.on("wheel.zoom",null)):"select"!==s&&"lasso"!==s||(o.on(".zoom",null),h.prepFn=function(t,e,r){p(t,e,r,h,s)},f.init(h)),o.on("mousemove",function(){var t=r.projection.invert(n.mouse(this));if(!t||isNaN(t[0])||isNaN(t[1]))return f.unhover(i,n.event);r.xaxis.p2c=function(){return t[0]},r.yaxis.p2c=function(){return t[1]},l.hover(i,n.event,r.id)}),o.on("mouseout",function(){i._dragging||f.unhover(i,n.event)}),o.on("click",function(){"select"!==s&&"lasso"!==s&&(c.indexOf("select")>-1&&d(n.event,i,[r.xaxis],[r.yaxis],r.id,h),c.indexOf("event")>-1&&l.click(i,n.event))})}function v(t){return r.projection.invert([t[0]+r.xaxis._offset,t[1]+r.yaxis._offset])}},_.makeFramework=function(){var t=this,e=t.graphDiv,r=e._fullLayout,a="clip"+r._uid+t.id;t.clipDef=r._clips.append("clipPath").attr("id",a),t.clipRect=t.clipDef.append("rect"),t.framework=n.select(t.container).append("g").attr("class","geo "+t.id).call(s.setClipUrl,a,e),t.project=function(e){var r=t.projection(e);return r?[r[0]-t.xaxis._offset,r[1]-t.yaxis._offset]:[null,null]},t.xaxis={_id:"x",c2p:function(e){return t.project(e)[0]}},t.yaxis={_id:"y",c2p:function(e){return t.project(e)[1]}},t.mockAxis={type:"linear",showexponent:"all",exponentformat:"B"},u.setConvert(t.mockAxis,r)},_.saveViewInitial=function(t){var e,r=t.center||{},n=t.projection,a=n.rotation||{};this.viewInitial={fitbounds:t.fitbounds,"projection.scale":n.scale},e=t._isScoped?{"center.lon":r.lon,"center.lat":r.lat}:t._isClipped?{"projection.rotation.lon":a.lon,"projection.rotation.lat":a.lat}:{"center.lon":r.lon,"center.lat":r.lat,"projection.rotation.lon":a.lon},i.extendFlat(this.viewInitial,e)},_.render=function(){var t,e=this.projection,r=e.getPath();function n(t){var r=e(t.lonlat);return r?"translate("+r[0]+","+r[1]+")":null}function a(t){return e.isLonLatOverEdges(t.lonlat)?"none":null}for(t in this.basePaths)this.basePaths[t].attr("d",r);for(t in this.dataPaths)this.dataPaths[t].attr("d",function(t){return r(t.geojson)});for(t in this.dataPoints)this.dataPoints[t].attr("display",a).attr("transform",n)}},{"../../components/color":591,"../../components/dragelement":609,"../../components/drawing":612,"../../components/fx":630,"../../lib":717,"../../lib/geo_location_utils":711,"../../lib/topojson_utils":744,"../../registry":846,"../cartesian/autorange":764,"../cartesian/axes":765,"../cartesian/select":782,"../plots":826,"./constants":793,"./projections":798,"./zoom":799,d3:165,"topojson-client":538}],795:[function(t,e,r){"use strict";var n=t("../../plots/get_data").getSubplotCalcData,a=t("../../lib").counterRegex,i=t("./geo"),o="geo",s=a(o),l={};l[o]={valType:"subplotid",dflt:o,editType:"calc"},e.exports={attr:o,name:o,idRoot:o,idRegex:s,attrRegex:s,attributes:l,layoutAttributes:t("./layout_attributes"),supplyLayoutDefaults:t("./layout_defaults"),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,a=e._subplots[o],s=0;s<a.length;s++){var l=a[s],c=n(r,o,l),u=e[l]._subplot;u||(u=i({id:l,graphDiv:t,container:e._geolayer.node(),topojsonURL:t._context.topojsonURL,staticPlot:t._context.staticPlot}),e[l]._subplot=u),u.plot(c,e,t._promises)}},updateFx:function(t){for(var e=t._fullLayout,r=e._subplots[o],n=0;n<r.length;n++){var a=e[r[n]];a._subplot.updateFx(e,a)}},clean:function(t,e,r,n){for(var a=n._subplots[o]||[],i=0;i<a.length;i++){var s=a[i],l=n[s]._subplot;!e[s]&&l&&(l.framework.remove(),l.clipDef.remove())}}}},{"../../lib":717,"../../plots/get_data":800,"./geo":794,"./layout_attributes":796,"./layout_defaults":797}],796:[function(t,e,r){"use strict";var n=t("../../components/color/attributes"),a=t("../domain").attributes,i=t("./constants"),o=t("../../plot_api/edit_types").overrideAll,s={range:{valType:"info_array",items:[{valType:"number"},{valType:"number"}]},showgrid:{valType:"boolean",dflt:!1},tick0:{valType:"number",dflt:0},dtick:{valType:"number"},gridcolor:{valType:"color",dflt:n.lightLine},gridwidth:{valType:"number",min:0,dflt:1}};(e.exports=o({domain:a({name:"geo"},{}),fitbounds:{valType:"enumerated",values:[!1,"locations","geojson"],dflt:!1,editType:"plot"},resolution:{valType:"enumerated",values:[110,50],dflt:110,coerceNumber:!0},scope:{valType:"enumerated",values:Object.keys(i.scopeDefaults),dflt:"world"},projection:{type:{valType:"enumerated",values:Object.keys(i.projNames)},rotation:{lon:{valType:"number"},lat:{valType:"number"},roll:{valType:"number"}},parallels:{valType:"info_array",items:[{valType:"number"},{valType:"number"}]},scale:{valType:"number",min:0,dflt:1}},center:{lon:{valType:"number"},lat:{valType:"number"}},visible:{valType:"boolean",dflt:!0},showcoastlines:{valType:"boolean"},coastlinecolor:{valType:"color",dflt:n.defaultLine},coastlinewidth:{valType:"number",min:0,dflt:1},showland:{valType:"boolean",dflt:!1},landcolor:{valType:"color",dflt:i.landColor},showocean:{valType:"boolean",dflt:!1},oceancolor:{valType:"color",dflt:i.waterColor},showlakes:{valType:"boolean",dflt:!1},lakecolor:{valType:"color",dflt:i.waterColor},showrivers:{valType:"boolean",dflt:!1},rivercolor:{valType:"color",dflt:i.waterColor},riverwidth:{valType:"number",min:0,dflt:1},showcountries:{valType:"boolean"},countrycolor:{valType:"color",dflt:n.defaultLine},countrywidth:{valType:"number",min:0,dflt:1},showsubunits:{valType:"boolean"},subunitcolor:{valType:"color",dflt:n.defaultLine},subunitwidth:{valType:"number",min:0,dflt:1},showframe:{valType:"boolean"},framecolor:{valType:"color",dflt:n.defaultLine},framewidth:{valType:"number",min:0,dflt:1},bgcolor:{valType:"color",dflt:n.background},lonaxis:s,lataxis:s},"plot","from-root")).uirevision={valType:"any",editType:"none"}},{"../../components/color/attributes":590,"../../plot_api/edit_types":748,"../domain":790,"./constants":793}],797:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../subplot_defaults"),i=t("../get_data").getSubplotData,o=t("./constants"),s=t("./layout_attributes"),l=o.axesNames;function c(t,e,r,a){var s=i(a.fullData,"geo",a.id).map(function(t){return t._expandedIndex}),c=r("resolution"),u=r("scope"),h=o.scopeDefaults[u],f=r("projection.type",h.projType),p=e._isAlbersUsa="albers usa"===f;p&&(u=e.scope="usa");var d=e._isScoped="world"!==u,g=e._isConic=-1!==f.indexOf("conic"),v=e._isClipped=!!o.lonaxisSpan[f];if(!1===t.visible){var m=n.extendDeep({},e._template);m.showcoastlines=!1,m.showcountries=!1,m.showframe=!1,m.showlakes=!1,m.showland=!1,m.showocean=!1,m.showrivers=!1,m.showsubunits=!1,m.lonaxis&&(m.lonaxis.showgrid=!1),m.lataxis&&(m.lataxis.showgrid=!1),e._template=m}for(var y=r("visible"),x=0;x<l.length;x++){var b,_=l[x],w=[30,10][x];if(d)b=h[_+"Range"];else{var k=o[_+"Span"],T=(k[f]||k["*"])/2,M=r("projection.rotation."+_.substr(0,3),h.projRotate[x]);b=[M-T,M+T]}var A=r(_+".range",b);r(_+".tick0"),r(_+".dtick",w),r(_+".showgrid",!!y&&void 0)&&(r(_+".gridcolor"),r(_+".gridwidth")),e[_]._ax={type:"linear",_id:_.slice(0,3),_traceIndices:s,setScale:n.identity,c2l:n.identity,r2l:n.identity,autorange:!0,range:A.slice(),_m:1,_input:{}}}var S=e.lonaxis.range,E=e.lataxis.range,L=S[0],C=S[1];L>0&&C<0&&(C+=360);var P,O,z,I=(L+C)/2;if(!p){var D=d?h.projRotate:[I,0,0];P=r("projection.rotation.lon",D[0]),r("projection.rotation.lat",D[1]),r("projection.rotation.roll",D[2]),r("showcoastlines",!d&&y)&&(r("coastlinecolor"),r("coastlinewidth")),r("showocean",!!y&&void 0)&&r("oceancolor")}(p?(O=-96.6,z=38.7):(O=d?I:P,z=(E[0]+E[1])/2),r("center.lon",O),r("center.lat",z),g)&&r("projection.parallels",h.projParallels||[0,60]);r("projection.scale"),r("showland",!!y&&void 0)&&r("landcolor"),r("showlakes",!!y&&void 0)&&r("lakecolor"),r("showrivers",!!y&&void 0)&&(r("rivercolor"),r("riverwidth")),r("showcountries",d&&"usa"!==u&&y)&&(r("countrycolor"),r("countrywidth")),("usa"===u||"north america"===u&&50===c)&&(r("showsubunits",y),r("subunitcolor"),r("subunitwidth")),d||r("showframe",y)&&(r("framecolor"),r("framewidth")),r("bgcolor"),r("fitbounds")&&(delete e.projection.scale,d?(delete e.center.lon,delete e.center.lat):v?(delete e.center.lon,delete e.center.lat,delete e.projection.rotation.lon,delete e.projection.rotation.lat,delete e.lonaxis.range,delete e.lataxis.range):(delete e.center.lon,delete e.center.lat,delete e.projection.rotation.lon))}e.exports=function(t,e,r){a(t,e,r,{type:"geo",attributes:s,handleDefaults:c,fullData:r,partition:"y"})}},{"../../lib":717,"../get_data":800,"../subplot_defaults":840,"./constants":793,"./layout_attributes":796}],798:[function(t,e,r){"use strict";e.exports=function(t){function e(t,e){return{type:"Feature",id:t.id,properties:t.properties,geometry:r(t.geometry,e)}}function r(e,n){if(!e)return null;if("GeometryCollection"===e.type)return{type:"GeometryCollection",geometries:object.geometries.map(function(t){return r(t,n)})};if(!c.hasOwnProperty(e.type))return null;var a=c[e.type];return t.geo.stream(e,n(a)),a.result()}t.geo.project=function(t,e){var a=e.stream;if(!a)throw new Error("not yet supported");return(t&&n.hasOwnProperty(t.type)?n[t.type]:r)(t,a)};var n={Feature:e,FeatureCollection:function(t,r){return{type:"FeatureCollection",features:t.features.map(function(t){return e(t,r)})}}},a=[],i=[],o={point:function(t,e){a.push([t,e])},result:function(){var t=a.length?a.length<2?{type:"Point",coordinates:a[0]}:{type:"MultiPoint",coordinates:a}:null;return a=[],t}},s={lineStart:u,point:function(t,e){a.push([t,e])},lineEnd:function(){a.length&&(i.push(a),a=[])},result:function(){var t=i.length?i.length<2?{type:"LineString",coordinates:i[0]}:{type:"MultiLineString",coordinates:i}:null;return i=[],t}},l={polygonStart:u,lineStart:u,point:function(t,e){a.push([t,e])},lineEnd:function(){var t=a.length;if(t){do{a.push(a[0].slice())}while(++t<4);i.push(a),a=[]}},polygonEnd:u,result:function(){if(!i.length)return null;var t=[],e=[];return i.forEach(function(r){!function(t){if((e=t.length)<4)return!1;for(var e,r=0,n=t[e-1][1]*t[0][0]-t[e-1][0]*t[0][1];++r<e;)n+=t[r-1][1]*t[r][0]-t[r-1][0]*t[r][1];return n<=0}(r)?e.push(r):t.push([r])}),e.forEach(function(e){var r=e[0];t.some(function(t){if(function(t,e){for(var r=e[0],n=e[1],a=!1,i=0,o=t.length,s=o-1;i<o;s=i++){var l=t[i],c=l[0],u=l[1],h=t[s],f=h[0],p=h[1];u>n^p>n&&r<(f-c)*(n-u)/(p-u)+c&&(a=!a)}return a}(t[0],r))return t.push(e),!0})||t.push([e])}),i=[],t.length?t.length>1?{type:"MultiPolygon",coordinates:t}:{type:"Polygon",coordinates:t[0]}:null}},c={Point:o,MultiPoint:o,LineString:s,MultiLineString:s,Polygon:l,MultiPolygon:l,Sphere:l};function u(){}var h=1e-6,f=h*h,p=Math.PI,d=p/2,g=(Math.sqrt(p),p/180),v=180/p;function m(t){return t>1?d:t<-1?-d:Math.asin(t)}function y(t){return t>1?0:t<-1?p:Math.acos(t)}var x=t.geo.projection,b=t.geo.projectionMutator;function _(t,e){var r=(2+d)*Math.sin(e);e/=2;for(var n=0,a=1/0;n<10&&Math.abs(a)>h;n++){var i=Math.cos(e);e-=a=(e+Math.sin(e)*(i+2)-r)/(2*i*(1+i))}return[2/Math.sqrt(p*(4+p))*t*(1+Math.cos(e)),2*Math.sqrt(p/(4+p))*Math.sin(e)]}t.geo.interrupt=function(e){var r,n=[[[[-p,0],[0,d],[p,0]]],[[[-p,0],[0,-d],[p,0]]]];function a(t,r){for(var a=r<0?-1:1,i=n[+(r<0)],o=0,s=i.length-1;o<s&&t>i[o][2][0];++o);var l=e(t-i[o][1][0],r);return l[0]+=e(i[o][1][0],a*r>a*i[o][0][1]?i[o][0][1]:r)[0],l}e.invert&&(a.invert=function(t,i){for(var o=r[+(i<0)],s=n[+(i<0)],c=0,u=o.length;c<u;++c){var h=o[c];if(h[0][0]<=t&&t<h[1][0]&&h[0][1]<=i&&i<h[1][1]){var f=e.invert(t-e(s[c][1][0],0)[0],i);return f[0]+=s[c][1][0],l(a(f[0],f[1]),[t,i])?f:null}}});var i=t.geo.projection(a),o=i.stream;function s(t,e){for(var r,n,a,i=-1,o=t.length,s=t[0],l=[];++i<o;){n=((r=t[i])[0]-s[0])/e,a=(r[1]-s[1])/e;for(var c=0;c<e;++c)l.push([s[0]+c*n,s[1]+c*a]);s=r}return l.push(r),l}function l(t,e){return Math.abs(t[0]-e[0])<h&&Math.abs(t[1]-e[1])<h}return i.stream=function(e){var r=i.rotate(),a=o(e),l=(i.rotate([0,0]),o(e));return i.rotate(r),a.sphere=function(){t.geo.stream(function(){for(var e=1e-6,r=[],a=0,i=n[0].length;a<i;++a){var o=n[0][a],l=180*o[0][0]/p,c=180*o[0][1]/p,u=180*o[1][1]/p,h=180*o[2][0]/p,f=180*o[2][1]/p;r.push(s([[l+e,c+e],[l+e,u-e],[h-e,u-e],[h-e,f+e]],30))}for(var a=n[1].length-1;a>=0;--a){var o=n[1][a],l=180*o[0][0]/p,c=180*o[0][1]/p,u=180*o[1][1]/p,h=180*o[2][0]/p,f=180*o[2][1]/p;r.push(s([[h-e,f-e],[h-e,u+e],[l+e,u+e],[l+e,c-e]],30))}return{type:"Polygon",coordinates:[t.merge(r)]}}(),l)},a},i.lobes=function(t){return arguments.length?(n=t.map(function(t){return t.map(function(t){return[[t[0][0]*p/180,t[0][1]*p/180],[t[1][0]*p/180,t[1][1]*p/180],[t[2][0]*p/180,t[2][1]*p/180]]})}),r=n.map(function(t){return t.map(function(t){var r,n=e(t[0][0],t[0][1])[0],a=e(t[2][0],t[2][1])[0],i=e(t[1][0],t[0][1])[1],o=e(t[1][0],t[1][1])[1];return i>o&&(r=i,i=o,o=r),[[n,i],[a,o]]})}),i):n.map(function(t){return t.map(function(t){return[[180*t[0][0]/p,180*t[0][1]/p],[180*t[1][0]/p,180*t[1][1]/p],[180*t[2][0]/p,180*t[2][1]/p]]})})},i},_.invert=function(t,e){var r=.5*e*Math.sqrt((4+p)/p),n=m(r),a=Math.cos(n);return[t/(2/Math.sqrt(p*(4+p))*(1+a)),m((n+r*(a+2))/(2+d))]},(t.geo.eckert4=function(){return x(_)}).raw=_;var w=t.geo.azimuthalEqualArea.raw;function k(t,e){if(arguments.length<2&&(e=t),1===e)return w;if(e===1/0)return T;function r(r,n){var a=w(r/e,n);return a[0]*=t,a}return r.invert=function(r,n){var a=w.invert(r/t,n);return a[0]*=e,a},r}function T(t,e){return[t*Math.cos(e)/Math.cos(e/=2),2*Math.sin(e)]}function M(t,e){return[3*t/(2*p)*Math.sqrt(p*p/3-e*e),e]}function A(t,e){return[t,1.25*Math.log(Math.tan(p/4+.4*e))]}function S(t){return function(e){var r,n=t*Math.sin(e),a=30;do{e-=r=(e+Math.sin(e)-n)/(1+Math.cos(e))}while(Math.abs(r)>h&&--a>0);return e/2}}T.invert=function(t,e){var r=2*m(e/2);return[t*Math.cos(r/2)/Math.cos(r),r]},(t.geo.hammer=function(){var t=2,e=b(k),r=e(t);return r.coefficient=function(r){return arguments.length?e(t=+r):t},r}).raw=k,M.invert=function(t,e){return[2/3*p*t/Math.sqrt(p*p/3-e*e),e]},(t.geo.kavrayskiy7=function(){return x(M)}).raw=M,A.invert=function(t,e){return[t,2.5*Math.atan(Math.exp(.8*e))-.625*p]},(t.geo.miller=function(){return x(A)}).raw=A,S(p);var E=function(t,e,r){var n=S(r);function a(r,a){return[t*r*Math.cos(a=n(a)),e*Math.sin(a)]}return a.invert=function(n,a){var i=m(a/e);return[n/(t*Math.cos(i)),m((2*i+Math.sin(2*i))/r)]},a}(Math.SQRT2/d,Math.SQRT2,p);function L(t,e){var r=e*e,n=r*r;return[t*(.8707-.131979*r+n*(n*(.003971*r-.001529*n)-.013791)),e*(1.007226+r*(.015085+n*(.028874*r-.044475-.005916*n)))]}(t.geo.mollweide=function(){return x(E)}).raw=E,L.invert=function(t,e){var r,n=e,a=25;do{var i=n*n,o=i*i;n-=r=(n*(1.007226+i*(.015085+o*(.028874*i-.044475-.005916*o)))-e)/(1.007226+i*(.045255+o*(.259866*i-.311325-.005916*11*o)))}while(Math.abs(r)>h&&--a>0);return[t/(.8707+(i=n*n)*(i*(i*i*i*(.003971-.001529*i)-.013791)-.131979)),n]},(t.geo.naturalEarth=function(){return x(L)}).raw=L;var C=[[.9986,-.062],[1,0],[.9986,.062],[.9954,.124],[.99,.186],[.9822,.248],[.973,.31],[.96,.372],[.9427,.434],[.9216,.4958],[.8962,.5571],[.8679,.6176],[.835,.6769],[.7986,.7346],[.7597,.7903],[.7186,.8435],[.6732,.8936],[.6213,.9394],[.5722,.9761],[.5322,1]];function P(t,e){var r,n=Math.min(18,36*Math.abs(e)/p),a=Math.floor(n),i=n-a,o=(r=C[a])[0],s=r[1],l=(r=C[++a])[0],c=r[1],u=(r=C[Math.min(19,++a)])[0],h=r[1];return[t*(l+i*(u-o)/2+i*i*(u-2*l+o)/2),(e>0?d:-d)*(c+i*(h-s)/2+i*i*(h-2*c+s)/2)]}function O(t,e){return[t*Math.cos(e),e]}function z(t,e){var r,n=Math.cos(e),a=(r=y(n*Math.cos(t/=2)))?r/Math.sin(r):1;return[2*n*Math.sin(t)*a,Math.sin(e)*a]}function I(t,e){var r=z(t,e);return[(r[0]+t/d)/2,(r[1]+e)/2]}C.forEach(function(t){t[1]*=1.0144}),P.invert=function(t,e){var r=e/d,n=90*r,a=Math.min(18,Math.abs(n/5)),i=Math.max(0,Math.floor(a));do{var o=C[i][1],s=C[i+1][1],l=C[Math.min(19,i+2)][1],c=l-o,u=l-2*s+o,h=2*(Math.abs(r)-s)/c,p=u/c,m=h*(1-p*h*(1-2*p*h));if(m>=0||1===i){n=(e>=0?5:-5)*(m+a);var y,x=50;do{m=(a=Math.min(18,Math.abs(n)/5))-(i=Math.floor(a)),o=C[i][1],s=C[i+1][1],l=C[Math.min(19,i+2)][1],n-=(y=(e>=0?d:-d)*(s+m*(l-o)/2+m*m*(l-2*s+o)/2)-e)*v}while(Math.abs(y)>f&&--x>0);break}}while(--i>=0);var b=C[i][0],_=C[i+1][0],w=C[Math.min(19,i+2)][0];return[t/(_+m*(w-b)/2+m*m*(w-2*_+b)/2),n*g]},(t.geo.robinson=function(){return x(P)}).raw=P,O.invert=function(t,e){return[t/Math.cos(e),e]},(t.geo.sinusoidal=function(){return x(O)}).raw=O,z.invert=function(t,e){if(!(t*t+4*e*e>p*p+h)){var r=t,n=e,a=25;do{var i,o=Math.sin(r),s=Math.sin(r/2),l=Math.cos(r/2),c=Math.sin(n),u=Math.cos(n),f=Math.sin(2*n),d=c*c,g=u*u,v=s*s,m=1-g*l*l,x=m?y(u*l)*Math.sqrt(i=1/m):i=0,b=2*x*u*s-t,_=x*c-e,w=i*(g*v+x*u*l*d),k=i*(.5*o*f-2*x*c*s),T=.25*i*(f*s-x*c*g*o),M=i*(d*l+x*v*u),A=k*T-M*w;if(!A)break;var S=(_*k-b*M)/A,E=(b*T-_*w)/A;r-=S,n-=E}while((Math.abs(S)>h||Math.abs(E)>h)&&--a>0);return[r,n]}},(t.geo.aitoff=function(){return x(z)}).raw=z,I.invert=function(t,e){var r=t,n=e,a=25;do{var i,o=Math.cos(n),s=Math.sin(n),l=Math.sin(2*n),c=s*s,u=o*o,f=Math.sin(r),p=Math.cos(r/2),g=Math.sin(r/2),v=g*g,m=1-u*p*p,x=m?y(o*p)*Math.sqrt(i=1/m):i=0,b=.5*(2*x*o*g+r/d)-t,_=.5*(x*s+n)-e,w=.5*i*(u*v+x*o*p*c)+.5/d,k=i*(f*l/4-x*s*g),T=.125*i*(l*g-x*s*u*f),M=.5*i*(c*p+x*v*o)+.5,A=k*T-M*w,S=(_*k-b*M)/A,E=(b*T-_*w)/A;r-=S,n-=E}while((Math.abs(S)>h||Math.abs(E)>h)&&--a>0);return[r,n]},(t.geo.winkel3=function(){return x(I)}).raw=I}},{}],799:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../registry"),o=Math.PI/180,s=180/Math.PI,l={cursor:"pointer"},c={cursor:"auto"};function u(t,e){return n.behavior.zoom().translate(e.translate()).scale(e.scale())}function h(t,e,r){var n=t.id,o=t.graphDiv,s=o.layout,l=s[n],c=o._fullLayout,u=c[n],h={},f={};function p(t,e){h[n+"."+t]=a.nestedProperty(l,t).get(),i.call("_storeDirectGUIEdit",s,c._preGUI,h);var r=a.nestedProperty(u,t);r.get()!==e&&(r.set(e),a.nestedProperty(l,t).set(e),f[n+"."+t]=e)}r(p),p("projection.scale",e.scale()/t.fitScale),p("fitbounds",!1),o.emit("plotly_relayout",f)}function f(t,e){var r=u(0,e);function a(r){var n=e.invert(t.midPt);r("center.lon",n[0]),r("center.lat",n[1])}return r.on("zoomstart",function(){n.select(this).style(l)}).on("zoom",function(){e.scale(n.event.scale).translate(n.event.translate),t.render();var r=e.invert(t.midPt);t.graphDiv.emit("plotly_relayouting",{"geo.projection.scale":e.scale()/t.fitScale,"geo.center.lon":r[0],"geo.center.lat":r[1]})}).on("zoomend",function(){n.select(this).style(c),h(t,e,a)}),r}function p(t,e){var r,a,i,o,s,f,p,d,g,v=u(0,e),m=2;function y(t){return e.invert(t)}function x(r){var n=e.rotate(),a=e.invert(t.midPt);r("projection.rotation.lon",-n[0]),r("center.lon",a[0]),r("center.lat",a[1])}return v.on("zoomstart",function(){n.select(this).style(l),r=n.mouse(this),a=e.rotate(),i=e.translate(),o=a,s=y(r)}).on("zoom",function(){if(f=n.mouse(this),function(t){var r=y(t);if(!r)return!0;var n=e(r);return Math.abs(n[0]-t[0])>m||Math.abs(n[1]-t[1])>m}(r))return v.scale(e.scale()),void v.translate(e.translate());e.scale(n.event.scale),e.translate([i[0],n.event.translate[1]]),s?y(f)&&(d=y(f),p=[o[0]+(d[0]-s[0]),a[1],a[2]],e.rotate(p),o=p):s=y(r=f),g=!0,t.render();var l=e.rotate(),c=e.invert(t.midPt);t.graphDiv.emit("plotly_relayouting",{"geo.projection.scale":e.scale()/t.fitScale,"geo.center.lon":c[0],"geo.center.lat":c[1],"geo.projection.rotation.lon":-l[0]})}).on("zoomend",function(){n.select(this).style(c),g&&h(t,e,x)}),v}function d(t,e){var r,a={r:e.rotate(),k:e.scale()},i=u(0,e),f=function(t){var e=0,r=arguments.length,a=[];for(;++e<r;)a.push(arguments[e]);var i=n.dispatch.apply(null,a);return i.of=function(e,r){return function(a){var o;try{o=a.sourceEvent=n.event,a.target=t,n.event=a,i[a.type].apply(e,r)}finally{n.event=o}}},i}(i,"zoomstart","zoom","zoomend"),p=0,d=i.on;function m(t){var r=e.rotate();t("projection.rotation.lon",-r[0]),t("projection.rotation.lat",-r[1])}return i.on("zoomstart",function(){n.select(this).style(l);var t,c,u,h,m,b,_,w,k,T,M,A=n.mouse(this),S=e.rotate(),E=S,L=e.translate(),C=(c=.5*(t=S)[0]*o,u=.5*t[1]*o,h=.5*t[2]*o,m=Math.sin(c),b=Math.cos(c),_=Math.sin(u),w=Math.cos(u),k=Math.sin(h),T=Math.cos(h),[b*w*T+m*_*k,m*w*T-b*_*k,b*_*T+m*w*k,b*w*k-m*_*T]);r=g(e,A),d.call(i,"zoom",function(){var t,i,o,l,c,u,h,p,d,m,b=n.mouse(this);if(e.scale(a.k=n.event.scale),r){if(g(e,b)){e.rotate(S).translate(L);var _=g(e,b),w=function(t,e){if(!t||!e)return;var r=function(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}(t,e),n=Math.sqrt(x(r,r)),a=.5*Math.acos(Math.max(-1,Math.min(1,x(t,e)))),i=Math.sin(a)/n;return n&&[Math.cos(a),r[2]*i,-r[1]*i,r[0]*i]}(r,_),k=function(t){return[Math.atan2(2*(t[0]*t[1]+t[2]*t[3]),1-2*(t[1]*t[1]+t[2]*t[2]))*s,Math.asin(Math.max(-1,Math.min(1,2*(t[0]*t[2]-t[3]*t[1]))))*s,Math.atan2(2*(t[0]*t[3]+t[1]*t[2]),1-2*(t[2]*t[2]+t[3]*t[3]))*s]}((i=w,o=(t=C)[0],l=t[1],c=t[2],u=t[3],h=i[0],p=i[1],d=i[2],m=i[3],[o*h-l*p-c*d-u*m,o*p+l*h+c*m-u*d,o*d-l*m+c*h+u*p,o*m+l*d-c*p+u*h])),T=a.r=function(t,e,r){var n=y(e,2,t[0]);n=y(n,1,t[1]),n=y(n,0,t[2]-r[2]);var a,i,o=e[0],l=e[1],c=e[2],u=n[0],h=n[1],f=n[2],p=Math.atan2(l,o)*s,d=Math.sqrt(o*o+l*l);Math.abs(h)>d?(i=(h>0?90:-90)-p,a=0):(i=Math.asin(h/d)*s-p,a=Math.sqrt(d*d-h*h));var g=180-i-2*p,m=(Math.atan2(f,u)-Math.atan2(c,a))*s,x=(Math.atan2(f,u)-Math.atan2(c,-a))*s,b=v(r[0],r[1],i,m),_=v(r[0],r[1],g,x);return b<=_?[i,m,r[2]]:[g,x,r[2]]}(k,r,E);isFinite(T[0])&&isFinite(T[1])&&isFinite(T[2])||(T=E),e.rotate(T),E=T}}else r=g(e,A=b);f.of(this,arguments)({type:"zoom"})}),M=f.of(this,arguments),p++||M({type:"zoomstart"})}).on("zoomend",function(){var r;n.select(this).style(c),d.call(i,"zoom",null),r=f.of(this,arguments),--p||r({type:"zoomend"}),h(t,e,m)}).on("zoom.redraw",function(){t.render();var r=e.rotate();t.graphDiv.emit("plotly_relayouting",{"geo.projection.scale":e.scale()/t.fitScale,"geo.projection.rotation.lon":-r[0],"geo.projection.rotation.lat":-r[1]})}),n.rebind(i,f,"on")}function g(t,e){var r=t.invert(e);return r&&isFinite(r[0])&&isFinite(r[1])&&function(t){var e=t[0]*o,r=t[1]*o,n=Math.cos(r);return[n*Math.cos(e),n*Math.sin(e),Math.sin(r)]}(r)}function v(t,e,r,n){var a=m(r-t),i=m(n-e);return Math.sqrt(a*a+i*i)}function m(t){return(t%360+540)%360-180}function y(t,e,r){var n=r*o,a=t.slice(),i=0===e?1:0,s=2===e?1:2,l=Math.cos(n),c=Math.sin(n);return a[i]=t[i]*l-t[s]*c,a[s]=t[s]*l+t[i]*c,a}function x(t,e){for(var r=0,n=0,a=t.length;n<a;++n)r+=t[n]*e[n];return r}e.exports=function(t,e){var r=t.projection;return(e._isScoped?f:e._isClipped?d:p)(t,r)}},{"../../lib":717,"../../registry":846,d3:165}],800:[function(t,e,r){"use strict";var n=t("../registry"),a=t("./cartesian/constants").SUBPLOT_PATTERN;r.getSubplotCalcData=function(t,e,r){var a=n.subplotsRegistry[e];if(!a)return[];for(var i=a.attr,o=[],s=0;s<t.length;s++){var l=t[s];l[0].trace[i]===r&&o.push(l)}return o},r.getModuleCalcData=function(t,e){var r,a=[],i=[];if(!(r="string"==typeof e?n.getModule(e).plot:"function"==typeof e?e:e.plot))return[a,t];for(var o=0;o<t.length;o++){var s=t[o],l=s[0].trace;!0===l.visible&&0!==l._length&&(l._module.plot===r?a.push(s):i.push(s))}return[a,i]},r.getSubplotData=function(t,e,r){if(!n.subplotsRegistry[e])return[];var i,o,s,l=n.subplotsRegistry[e].attr,c=[];if("gl2d"===e){var u=r.match(a);o="x"+u[1],s="y"+u[2]}for(var h=0;h<t.length;h++)i=t[h],"gl2d"===e&&n.traceIs(i,"gl2d")?i[l[0]]===o&&i[l[1]]===s&&c.push(i):i[l]===r&&c.push(i);return c}},{"../registry":846,"./cartesian/constants":771}],801:[function(t,e,r){"use strict";var n=t("mouse-change"),a=t("mouse-wheel"),i=t("mouse-event-offset"),o=t("../cartesian/constants"),s=t("has-passive-events");function l(t,e){this.element=t,this.plot=e,this.mouseListener=null,this.wheelListener=null,this.lastInputTime=Date.now(),this.lastPos=[0,0],this.boxEnabled=!1,this.boxInited=!1,this.boxStart=[0,0],this.boxEnd=[0,0],this.dragStart=[0,0]}e.exports=function(t){var e=t.mouseContainer,r=t.glplot,c=new l(e,r);function u(){t.xaxis.autorange=!1,t.yaxis.autorange=!1}function h(e,n,a){var i,s,l=t.calcDataBox(),h=r.viewBox,f=c.lastPos[0],p=c.lastPos[1],d=o.MINDRAG*r.pixelRatio,g=o.MINZOOM*r.pixelRatio;function v(e,r,n){var a=Math.min(r,n),i=Math.max(r,n);a!==i?(l[e]=a,l[e+2]=i,c.dataBox=l,t.setRanges(l)):(t.selectBox.selectBox=[0,0,1,1],t.glplot.setDirty())}switch(n*=r.pixelRatio,a*=r.pixelRatio,a=h[3]-h[1]-a,t.fullLayout.dragmode){case"zoom":if(e){var m=n/(h[2]-h[0])*(l[2]-l[0])+l[0],y=a/(h[3]-h[1])*(l[3]-l[1])+l[1];c.boxInited||(c.boxStart[0]=m,c.boxStart[1]=y,c.dragStart[0]=n,c.dragStart[1]=a),c.boxEnd[0]=m,c.boxEnd[1]=y,c.boxInited=!0,c.boxEnabled||c.boxStart[0]===c.boxEnd[0]&&c.boxStart[1]===c.boxEnd[1]||(c.boxEnabled=!0);var x=Math.abs(c.dragStart[0]-n)<g,b=Math.abs(c.dragStart[1]-a)<g;if(!function(){for(var e=t.graphDiv._fullLayout._axisConstraintGroups,r=t.xaxis._id,n=t.yaxis._id,a=0;a<e.length;a++)if(-1!==e[a][r]){if(-1!==e[a][n])return!0;break}return!1}()||x&&b)x&&(c.boxEnd[0]=c.boxStart[0]),b&&(c.boxEnd[1]=c.boxStart[1]);else{i=c.boxEnd[0]-c.boxStart[0],s=c.boxEnd[1]-c.boxStart[1];var _=(l[3]-l[1])/(l[2]-l[0]);Math.abs(i*_)>Math.abs(s)?(c.boxEnd[1]=c.boxStart[1]+Math.abs(i)*_*(s>=0?1:-1),c.boxEnd[1]<l[1]?(c.boxEnd[1]=l[1],c.boxEnd[0]=c.boxStart[0]+(l[1]-c.boxStart[1])/Math.abs(_)):c.boxEnd[1]>l[3]&&(c.boxEnd[1]=l[3],c.boxEnd[0]=c.boxStart[0]+(l[3]-c.boxStart[1])/Math.abs(_))):(c.boxEnd[0]=c.boxStart[0]+Math.abs(s)/_*(i>=0?1:-1),c.boxEnd[0]<l[0]?(c.boxEnd[0]=l[0],c.boxEnd[1]=c.boxStart[1]+(l[0]-c.boxStart[0])*Math.abs(_)):c.boxEnd[0]>l[2]&&(c.boxEnd[0]=l[2],c.boxEnd[1]=c.boxStart[1]+(l[2]-c.boxStart[0])*Math.abs(_)))}}else c.boxEnabled?(i=c.boxStart[0]!==c.boxEnd[0],s=c.boxStart[1]!==c.boxEnd[1],i||s?(i&&(v(0,c.boxStart[0],c.boxEnd[0]),t.xaxis.autorange=!1),s&&(v(1,c.boxStart[1],c.boxEnd[1]),t.yaxis.autorange=!1),t.relayoutCallback()):t.glplot.setDirty(),c.boxEnabled=!1,c.boxInited=!1):c.boxInited&&(c.boxInited=!1);break;case"pan":c.boxEnabled=!1,c.boxInited=!1,e?(c.panning||(c.dragStart[0]=n,c.dragStart[1]=a),Math.abs(c.dragStart[0]-n)<d&&(n=c.dragStart[0]),Math.abs(c.dragStart[1]-a)<d&&(a=c.dragStart[1]),i=(f-n)*(l[2]-l[0])/(r.viewBox[2]-r.viewBox[0]),s=(p-a)*(l[3]-l[1])/(r.viewBox[3]-r.viewBox[1]),l[0]+=i,l[2]+=i,l[1]+=s,l[3]+=s,t.setRanges(l),c.panning=!0,c.lastInputTime=Date.now(),u(),t.cameraChanged(),t.handleAnnotations()):c.panning&&(c.panning=!1,t.relayoutCallback())}c.lastPos[0]=n,c.lastPos[1]=a}return c.mouseListener=n(e,h),e.addEventListener("touchstart",function(t){var r=i(t.changedTouches[0],e);h(0,r[0],r[1]),h(1,r[0],r[1]),t.preventDefault()},!!s&&{passive:!1}),e.addEventListener("touchmove",function(t){t.preventDefault();var r=i(t.changedTouches[0],e);h(1,r[0],r[1]),t.preventDefault()},!!s&&{passive:!1}),e.addEventListener("touchend",function(t){h(0,c.lastPos[0],c.lastPos[1]),t.preventDefault()},!!s&&{passive:!1}),c.wheelListener=a(e,function(e,n){if(!t.scrollZoom)return!1;var a=t.calcDataBox(),i=r.viewBox,o=c.lastPos[0],s=c.lastPos[1],l=Math.exp(5*n/(i[3]-i[1])),h=o/(i[2]-i[0])*(a[2]-a[0])+a[0],f=s/(i[3]-i[1])*(a[3]-a[1])+a[1];return a[0]=(a[0]-h)*l+h,a[2]=(a[2]-h)*l+h,a[1]=(a[1]-f)*l+f,a[3]=(a[3]-f)*l+f,t.setRanges(a),c.lastInputTime=Date.now(),u(),t.cameraChanged(),t.handleAnnotations(),t.relayoutCallback(),!0},!0),c}},{"../cartesian/constants":771,"has-passive-events":412,"mouse-change":436,"mouse-event-offset":437,"mouse-wheel":439}],802:[function(t,e,r){"use strict";var n=t("../cartesian/axes"),a=t("../../lib/str2rgbarray");function i(t){this.scene=t,this.gl=t.gl,this.pixelRatio=t.pixelRatio,this.screenBox=[0,0,1,1],this.viewBox=[0,0,1,1],this.dataBox=[-1,-1,1,1],this.borderLineEnable=[!1,!1,!1,!1],this.borderLineWidth=[1,1,1,1],this.borderLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.ticks=[[],[]],this.tickEnable=[!0,!0,!1,!1],this.tickPad=[15,15,15,15],this.tickAngle=[0,0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickMarkLength=[0,0,0,0],this.tickMarkWidth=[0,0,0,0],this.tickMarkColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labels=["x","y"],this.labelEnable=[!0,!0,!1,!1],this.labelAngle=[0,Math.PI/2,0,3*Math.PI/2],this.labelPad=[15,15,15,15],this.labelSize=[12,12],this.labelFont=["sans-serif","sans-serif"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.title="",this.titleEnable=!0,this.titleCenter=[0,0,0,0],this.titleAngle=0,this.titleColor=[0,0,0,1],this.titleFont="sans-serif",this.titleSize=18,this.gridLineEnable=[!0,!0],this.gridLineColor=[[0,0,0,.5],[0,0,0,.5]],this.gridLineWidth=[1,1],this.zeroLineEnable=[!0,!0],this.zeroLineWidth=[1,1],this.zeroLineColor=[[0,0,0,1],[0,0,0,1]],this.borderColor=[0,0,0,0],this.backgroundColor=[0,0,0,0],this.static=this.scene.staticPlot}var o=i.prototype,s=["xaxis","yaxis"];o.merge=function(t){var e,r,n,i,o,l,c,u,h,f,p;for(this.titleEnable=!1,this.backgroundColor=a(t.plot_bgcolor),f=0;f<2;++f){var d=(e=s[f]).charAt(0);for(n=(r=t[this.scene[e]._name]).title.text===this.scene.fullLayout._dfltTitle[d]?"":r.title.text,p=0;p<=2;p+=2)this.labelEnable[f+p]=!1,this.labels[f+p]=n,this.labelColor[f+p]=a(r.title.font.color),this.labelFont[f+p]=r.title.font.family,this.labelSize[f+p]=r.title.font.size,this.labelPad[f+p]=this.getLabelPad(e,r),this.tickEnable[f+p]=!1,this.tickColor[f+p]=a((r.tickfont||{}).color),this.tickAngle[f+p]="auto"===r.tickangle?0:Math.PI*-r.tickangle/180,this.tickPad[f+p]=this.getTickPad(r),this.tickMarkLength[f+p]=0,this.tickMarkWidth[f+p]=r.tickwidth||0,this.tickMarkColor[f+p]=a(r.tickcolor),this.borderLineEnable[f+p]=!1,this.borderLineColor[f+p]=a(r.linecolor),this.borderLineWidth[f+p]=r.linewidth||0;c=this.hasSharedAxis(r),o=this.hasAxisInDfltPos(e,r)&&!c,l=this.hasAxisInAltrPos(e,r)&&!c,i=r.mirror||!1,u=c?-1!==String(i).indexOf("all"):!!i,h=c?"allticks"===i:-1!==String(i).indexOf("ticks"),o?this.labelEnable[f]=!0:l&&(this.labelEnable[f+2]=!0),o?this.tickEnable[f]=r.showticklabels:l&&(this.tickEnable[f+2]=r.showticklabels),(o||u)&&(this.borderLineEnable[f]=r.showline),(l||u)&&(this.borderLineEnable[f+2]=r.showline),(o||h)&&(this.tickMarkLength[f]=this.getTickMarkLength(r)),(l||h)&&(this.tickMarkLength[f+2]=this.getTickMarkLength(r)),this.gridLineEnable[f]=r.showgrid,this.gridLineColor[f]=a(r.gridcolor),this.gridLineWidth[f]=r.gridwidth,this.zeroLineEnable[f]=r.zeroline,this.zeroLineColor[f]=a(r.zerolinecolor),this.zeroLineWidth[f]=r.zerolinewidth}},o.hasSharedAxis=function(t){var e=this.scene,r=e.fullLayout._subplots.gl2d;return 0!==n.findSubplotsWithAxis(r,t).indexOf(e.id)},o.hasAxisInDfltPos=function(t,e){var r=e.side;return"xaxis"===t?"bottom"===r:"yaxis"===t?"left"===r:void 0},o.hasAxisInAltrPos=function(t,e){var r=e.side;return"xaxis"===t?"top"===r:"yaxis"===t?"right"===r:void 0},o.getLabelPad=function(t,e){var r=e.title.font.size,n=e.showticklabels;return"xaxis"===t?"top"===e.side?r*(1.5+(n?1:0))-10:r*(1.5+(n?.5:0))-10:"yaxis"===t?"right"===e.side?10+r*(1.5+(n?1:.5)):10+r*(1.5+(n?.5:0)):void 0},o.getTickPad=function(t){return"outside"===t.ticks?10+t.ticklen:15},o.getTickMarkLength=function(t){if(!t.ticks)return 0;var e=t.ticklen;return"inside"===t.ticks?-e:e},e.exports=function(t){return new i(t)}},{"../../lib/str2rgbarray":740,"../cartesian/axes":765}],803:[function(t,e,r){"use strict";var n=t("../../plot_api/edit_types").overrideAll,a=t("./scene2d"),i=t("../layout_attributes"),o=t("../../constants/xmlns_namespaces"),s=t("../cartesian/constants"),l=t("../cartesian"),c=t("../../components/fx/layout_attributes"),u=t("../get_data").getSubplotData;r.name="gl2d",r.attr=["xaxis","yaxis"],r.idRoot=["x","y"],r.idRegex=s.idRegex,r.attrRegex=s.attrRegex,r.attributes=t("../cartesian/attributes"),r.supplyLayoutDefaults=function(t,e,r){e._has("cartesian")||l.supplyLayoutDefaults(t,e,r)},r.layoutAttrOverrides=n(l.layoutAttributes,"plot","from-root"),r.baseLayoutAttrOverrides=n({plot_bgcolor:i.plot_bgcolor,hoverlabel:c.hoverlabel},"plot","nested"),r.plot=function(t){for(var e=t._fullLayout,r=t._fullData,n=e._subplots.gl2d,i=0;i<n.length;i++){var o=n[i],s=e._plots[o],l=u(r,"gl2d",o),c=s._scene2d;void 0===c&&(c=new a({id:o,graphDiv:t,container:t.querySelector(".gl-container"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio},e),s._scene2d=c),c.plot(l,t.calcdata,e,t.layout)}},r.clean=function(t,e,r,n){for(var a=n._subplots.gl2d||[],i=0;i<a.length;i++){var o=a[i],s=n._plots[o];if(s._scene2d)0===u(t,"gl2d",o).length&&(s._scene2d.destroy(),delete n._plots[o])}l.clean.apply(this,arguments)},r.drawFramework=function(t){t._context.staticPlot||l.drawFramework(t)},r.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots.gl2d,n=0;n<r.length;n++){var a=e._plots[r[n]]._scene2d,i=a.toImage("png");e._glimages.append("svg:image").attr({xmlns:o.svg,"xlink:href":i,x:0,y:0,width:"100%",height:"100%",preserveAspectRatio:"none"}),a.destroy()}},r.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots.gl2d,n=0;n<r.length;n++){e._plots[r[n]]._scene2d.updateFx(e.dragmode)}}},{"../../components/fx/layout_attributes":631,"../../constants/xmlns_namespaces":694,"../../plot_api/edit_types":748,"../cartesian":776,"../cartesian/attributes":763,"../cartesian/constants":771,"../get_data":800,"../layout_attributes":817,"./scene2d":804}],804:[function(t,e,r){"use strict";var n,a,i=t("../../registry"),o=t("../../plots/cartesian/axes"),s=t("../../components/fx"),l=t("gl-plot2d"),c=t("gl-spikes2d"),u=t("gl-select-box"),h=t("webgl-context"),f=t("./convert"),p=t("./camera"),d=t("../../lib/show_no_webgl_msg"),g=t("../cartesian/constraints"),v=g.enforce,m=g.clean,y=t("../cartesian/autorange").doAutoRange,x=["xaxis","yaxis"],b=t("../cartesian/constants").SUBPLOT_PATTERN;function _(t,e){this.container=t.container,this.graphDiv=t.graphDiv,this.pixelRatio=t.plotGlPixelRatio||window.devicePixelRatio,this.id=t.id,this.staticPlot=!!t.staticPlot,this.scrollZoom=this.graphDiv._context._scrollZoom.cartesian,this.fullData=null,this.updateRefs(e),this.makeFramework(),this.stopped||(this.glplotOptions=f(this),this.glplotOptions.merge(e),this.glplot=l(this.glplotOptions),this.camera=p(this),this.traces={},this.spikes=c(this.glplot),this.selectBox=u(this.glplot,{innerFill:!1,outerFill:!0}),this.lastButtonState=0,this.pickResult=null,this.isMouseOver=!0,this.stopped=!1,this.redraw=this.draw.bind(this),this.redraw())}e.exports=_;var w=_.prototype;w.makeFramework=function(){if(this.staticPlot){if(!(a||(n=document.createElement("canvas"),a=h({canvas:n,preserveDrawingBuffer:!1,premultipliedAlpha:!0,antialias:!0}))))throw new Error("Error creating static canvas/context for image server");this.canvas=n,this.gl=a}else{var t=this.container.querySelector(".gl-canvas-focus"),e=h({canvas:t,preserveDrawingBuffer:!0,premultipliedAlpha:!0});if(!e)return d(this),void(this.stopped=!0);this.canvas=t,this.gl=e}var r=this.canvas;r.style.width="100%",r.style.height="100%",r.style.position="absolute",r.style.top="0px",r.style.left="0px",r.style["pointer-events"]="none",this.updateSize(r),r.className+=" user-select-none";var i=this.svgContainer=document.createElementNS("http://www.w3.org/2000/svg","svg");i.style.position="absolute",i.style.top=i.style.left="0px",i.style.width=i.style.height="100%",i.style["z-index"]=20,i.style["pointer-events"]="none";var o=this.mouseContainer=document.createElement("div");o.style.position="absolute",o.style["pointer-events"]="auto",this.pickCanvas=this.container.querySelector(".gl-canvas-pick");var s=this.container;s.appendChild(i),s.appendChild(o);var l=this;o.addEventListener("mouseout",function(){l.isMouseOver=!1,l.unhover()}),o.addEventListener("mouseover",function(){l.isMouseOver=!0})},w.toImage=function(t){t||(t="png"),this.stopped=!0,this.staticPlot&&this.container.appendChild(n),this.updateSize(this.canvas);var e=this.glplot.gl,r=e.drawingBufferWidth,a=e.drawingBufferHeight;e.clearColor(1,1,1,0),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT),this.glplot.setDirty(),this.glplot.draw(),e.bindFramebuffer(e.FRAMEBUFFER,null);var i=new Uint8Array(r*a*4);e.readPixels(0,0,r,a,e.RGBA,e.UNSIGNED_BYTE,i);for(var o=0,s=a-1;o<s;++o,--s)for(var l=0;l<r;++l)for(var c=0;c<4;++c){var u=i[4*(r*o+l)+c];i[4*(r*o+l)+c]=i[4*(r*s+l)+c],i[4*(r*s+l)+c]=u}var h=document.createElement("canvas");h.width=r,h.height=a;var f,p=h.getContext("2d"),d=p.createImageData(r,a);switch(d.data.set(i),p.putImageData(d,0,0),t){case"jpeg":f=h.toDataURL("image/jpeg");break;case"webp":f=h.toDataURL("image/webp");break;default:f=h.toDataURL("image/png")}return this.staticPlot&&this.container.removeChild(n),f},w.updateSize=function(t){t||(t=this.canvas);var e=this.pixelRatio,r=this.fullLayout,n=r.width,a=r.height,i=0|Math.ceil(e*n),o=0|Math.ceil(e*a);return t.width===i&&t.height===o||(t.width=i,t.height=o),t},w.computeTickMarks=function(){this.xaxis.setScale(),this.yaxis.setScale();for(var t=[o.calcTicks(this.xaxis),o.calcTicks(this.yaxis)],e=0;e<2;++e)for(var r=0;r<t[e].length;++r)t[e][r].text=t[e][r].text+"";return t},w.updateRefs=function(t){this.fullLayout=t;var e=this.id.match(b),r="xaxis"+e[1],n="yaxis"+e[2];this.xaxis=this.fullLayout[r],this.yaxis=this.fullLayout[n]},w.relayoutCallback=function(){var t=this.graphDiv,e=this.xaxis,r=this.yaxis,n=t.layout,a={},o=a[e._name+".range"]=e.range.slice(),s=a[r._name+".range"]=r.range.slice();a[e._name+".autorange"]=e.autorange,a[r._name+".autorange"]=r.autorange,i.call("_storeDirectGUIEdit",t.layout,t._fullLayout._preGUI,a);var l=n[e._name];l.range=o,l.autorange=e.autorange;var c=n[r._name];c.range=s,c.autorange=r.autorange,a.lastInputTime=this.camera.lastInputTime,t.emit("plotly_relayout",a)},w.cameraChanged=function(){var t=this.camera;this.glplot.setDataBox(this.calcDataBox());var e=this.computeTickMarks();(function(t,e){for(var r=0;r<2;++r){var n=t[r],a=e[r];if(n.length!==a.length)return!0;for(var i=0;i<n.length;++i)if(n[i].x!==a[i].x)return!0}return!1})(e,this.glplotOptions.ticks)&&(this.glplotOptions.ticks=e,this.glplotOptions.dataBox=t.dataBox,this.glplot.update(this.glplotOptions),this.handleAnnotations())},w.handleAnnotations=function(){for(var t=this.graphDiv,e=this.fullLayout.annotations,r=0;r<e.length;r++){var n=e[r];n.xref===this.xaxis._id&&n.yref===this.yaxis._id&&i.getComponentMethod("annotations","drawOne")(t,r)}},w.destroy=function(){if(this.glplot){var t=this.traces;t&&Object.keys(t).map(function(e){t[e].dispose(),delete t[e]}),this.glplot.dispose(),this.container.removeChild(this.svgContainer),this.container.removeChild(this.mouseContainer),this.fullData=null,this.glplot=null,this.stopped=!0,this.camera.mouseListener.enabled=!1,this.mouseContainer.removeEventListener("wheel",this.camera.wheelListener),this.camera=null}},w.plot=function(t,e,r){var n=this.glplot;this.updateRefs(r),this.xaxis.clearCalc(),this.yaxis.clearCalc(),this.updateTraces(t,e),this.updateFx(r.dragmode);var a=r.width,i=r.height;this.updateSize(this.canvas);var o=this.glplotOptions;o.merge(r),o.screenBox=[0,0,a,i];var s={_fullLayout:{_axisConstraintGroups:this.graphDiv._fullLayout._axisConstraintGroups,xaxis:this.xaxis,yaxis:this.yaxis}};m(s,this.xaxis),m(s,this.yaxis);var l,c,u=r._size,h=this.xaxis.domain,f=this.yaxis.domain;for(o.viewBox=[u.l+h[0]*u.w,u.b+f[0]*u.h,a-u.r-(1-h[1])*u.w,i-u.t-(1-f[1])*u.h],this.mouseContainer.style.width=u.w*(h[1]-h[0])+"px",this.mouseContainer.style.height=u.h*(f[1]-f[0])+"px",this.mouseContainer.height=u.h*(f[1]-f[0]),this.mouseContainer.style.left=u.l+h[0]*u.w+"px",this.mouseContainer.style.top=u.t+(1-f[1])*u.h+"px",c=0;c<2;++c)(l=this[x[c]])._length=o.viewBox[c+2]-o.viewBox[c],y(this.graphDiv,l),l.setScale();v(s),o.ticks=this.computeTickMarks(),o.dataBox=this.calcDataBox(),o.merge(r),n.update(o),this.glplot.draw()},w.calcDataBox=function(){var t=this.xaxis,e=this.yaxis,r=t.range,n=e.range,a=t.r2l,i=e.r2l;return[a(r[0]),i(n[0]),a(r[1]),i(n[1])]},w.setRanges=function(t){var e=this.xaxis,r=this.yaxis,n=e.l2r,a=r.l2r;e.range=[n(t[0]),n(t[2])],r.range=[a(t[1]),a(t[3])]},w.updateTraces=function(t,e){var r,n,a,i=Object.keys(this.traces);this.fullData=t;t:for(r=0;r<i.length;r++){var o=i[r],s=this.traces[o];for(n=0;n<t.length;n++)if((a=t[n]).uid===o&&a.type===s.type)continue t;s.dispose(),delete this.traces[o]}for(r=0;r<t.length;r++){a=t[r];var l=e[r],c=this.traces[a.uid];c?c.update(a,l):(c=a._module.plot(this,a,l),this.traces[a.uid]=c)}this.glplot.objects.sort(function(t,e){return t._trace.index-e._trace.index})},w.updateFx=function(t){"lasso"===t||"select"===t?(this.pickCanvas.style["pointer-events"]="none",this.mouseContainer.style["pointer-events"]="none"):(this.pickCanvas.style["pointer-events"]="auto",this.mouseContainer.style["pointer-events"]="auto"),this.mouseContainer.style.cursor="pan"===t?"move":"zoom"===t?"crosshair":null},w.emitPointAction=function(t,e){for(var r,n=t.trace.uid,a=t.pointIndex,i=0;i<this.fullData.length;i++)this.fullData[i].uid===n&&(r=this.fullData[i]);var o={x:t.traceCoord[0],y:t.traceCoord[1],curveNumber:r.index,pointNumber:a,data:r._input,fullData:this.fullData,xaxis:this.xaxis,yaxis:this.yaxis};s.appendArrayPointValue(o,r,a),this.graphDiv.emit(e,{points:[o]})},w.draw=function(){if(!this.stopped){requestAnimationFrame(this.redraw);var t=this.glplot,e=this.camera,r=e.mouseListener,n=1===this.lastButtonState&&0===r.buttons,a=this.fullLayout;this.lastButtonState=r.buttons,this.cameraChanged();var i,o=r.x*t.pixelRatio,l=this.canvas.height-t.pixelRatio*r.y;if(e.boxEnabled&&"zoom"===a.dragmode){this.selectBox.enabled=!0;for(var c=this.selectBox.selectBox=[Math.min(e.boxStart[0],e.boxEnd[0]),Math.min(e.boxStart[1],e.boxEnd[1]),Math.max(e.boxStart[0],e.boxEnd[0]),Math.max(e.boxStart[1],e.boxEnd[1])],u=0;u<2;u++)e.boxStart[u]===e.boxEnd[u]&&(c[u]=t.dataBox[u],c[u+2]=t.dataBox[u+2]);t.setDirty()}else if(!e.panning&&this.isMouseOver){this.selectBox.enabled=!1;var h=a._size,f=this.xaxis.domain,p=this.yaxis.domain,d=(i=t.pick(o/t.pixelRatio+h.l+f[0]*h.w,l/t.pixelRatio-(h.t+(1-p[1])*h.h)))&&i.object._trace.handlePick(i);if(d&&n&&this.emitPointAction(d,"plotly_click"),i&&"skip"!==i.object._trace.hoverinfo&&a.hovermode&&d&&(!this.lastPickResult||this.lastPickResult.traceUid!==d.trace.uid||this.lastPickResult.dataCoord[0]!==d.dataCoord[0]||this.lastPickResult.dataCoord[1]!==d.dataCoord[1])){var g=d;this.lastPickResult={traceUid:d.trace?d.trace.uid:null,dataCoord:d.dataCoord.slice()},this.spikes.update({center:i.dataCoord}),g.screenCoord=[((t.viewBox[2]-t.viewBox[0])*(i.dataCoord[0]-t.dataBox[0])/(t.dataBox[2]-t.dataBox[0])+t.viewBox[0])/t.pixelRatio,(this.canvas.height-(t.viewBox[3]-t.viewBox[1])*(i.dataCoord[1]-t.dataBox[1])/(t.dataBox[3]-t.dataBox[1])-t.viewBox[1])/t.pixelRatio],this.emitPointAction(d,"plotly_hover");var v=this.fullData[g.trace.index]||{},m=g.pointIndex,y=s.castHoverinfo(v,a,m);if(y&&"all"!==y){var x=y.split("+");-1===x.indexOf("x")&&(g.traceCoord[0]=void 0),-1===x.indexOf("y")&&(g.traceCoord[1]=void 0),-1===x.indexOf("z")&&(g.traceCoord[2]=void 0),-1===x.indexOf("text")&&(g.textLabel=void 0),-1===x.indexOf("name")&&(g.name=void 0)}s.loneHover({x:g.screenCoord[0],y:g.screenCoord[1],xLabel:this.hoverFormatter("xaxis",g.traceCoord[0]),yLabel:this.hoverFormatter("yaxis",g.traceCoord[1]),zLabel:g.traceCoord[2],text:g.textLabel,name:g.name,color:s.castHoverOption(v,m,"bgcolor")||g.color,borderColor:s.castHoverOption(v,m,"bordercolor"),fontFamily:s.castHoverOption(v,m,"font.family"),fontSize:s.castHoverOption(v,m,"font.size"),fontColor:s.castHoverOption(v,m,"font.color"),nameLength:s.castHoverOption(v,m,"namelength"),textAlign:s.castHoverOption(v,m,"align")},{container:this.svgContainer,gd:this.graphDiv})}}i||this.unhover(),t.draw()}},w.unhover=function(){this.lastPickResult&&(this.spikes.update({}),this.lastPickResult=null,this.graphDiv.emit("plotly_unhover"),s.loneUnhover(this.svgContainer))},w.hoverFormatter=function(t,e){if(void 0!==e){var r=this[t];return o.tickText(r,r.c2l(e),"hover").text}}},{"../../components/fx":630,"../../lib/show_no_webgl_msg":738,"../../plots/cartesian/axes":765,"../../registry":846,"../cartesian/autorange":764,"../cartesian/constants":771,"../cartesian/constraints":772,"./camera":801,"./convert":802,"gl-plot2d":290,"gl-select-box":302,"gl-spikes2d":311,"webgl-context":554}],805:[function(t,e,r){"use strict";var n=t("../../plot_api/edit_types").overrideAll,a=t("../../components/fx/layout_attributes"),i=t("./scene"),o=t("../get_data").getSubplotData,s=t("../../lib"),l=t("../../constants/xmlns_namespaces");r.name="gl3d",r.attr="scene",r.idRoot="scene",r.idRegex=r.attrRegex=s.counterRegex("scene"),r.attributes=t("./layout/attributes"),r.layoutAttributes=t("./layout/layout_attributes"),r.baseLayoutAttrOverrides=n({hoverlabel:a.hoverlabel},"plot","nested"),r.supplyLayoutDefaults=t("./layout/defaults"),r.plot=function(t){for(var e=t._fullLayout,r=t._fullData,n=e._subplots.gl3d,a=0;a<n.length;a++){var s=n[a],l=o(r,"gl3d",s),c=e[s],u=c.camera,h=c._scene;h||(h=new i({id:s,graphDiv:t,container:t.querySelector(".gl-container"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio,camera:u},e),c._scene=h),h.viewInitial||(h.viewInitial={up:{x:u.up.x,y:u.up.y,z:u.up.z},eye:{x:u.eye.x,y:u.eye.y,z:u.eye.z},center:{x:u.center.x,y:u.center.y,z:u.center.z}}),h.plot(l,e,t.layout)}},r.clean=function(t,e,r,n){for(var a=n._subplots.gl3d||[],i=0;i<a.length;i++){var o=a[i];!e[o]&&n[o]._scene&&(n[o]._scene.destroy(),n._infolayer&&n._infolayer.selectAll(".annotation-"+o).remove())}},r.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots.gl3d,n=e._size,a=0;a<r.length;a++){var i=e[r[a]],o=i.domain,s=i._scene,c=s.toImage("png");e._glimages.append("svg:image").attr({xmlns:l.svg,"xlink:href":c,x:n.l+n.w*o.x[0],y:n.t+n.h*(1-o.y[1]),width:n.w*(o.x[1]-o.x[0]),height:n.h*(o.y[1]-o.y[0]),preserveAspectRatio:"none"}),s.destroy()}},r.cleanId=function(t){if(t.match(/^scene[0-9]*$/)){var e=t.substr(5);return"1"===e&&(e=""),"scene"+e}},r.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots.gl3d,n=0;n<r.length;n++){e[r[n]]._scene.updateFx(e.dragmode,e.hovermode)}}},{"../../components/fx/layout_attributes":631,"../../constants/xmlns_namespaces":694,"../../lib":717,"../../plot_api/edit_types":748,"../get_data":800,"./layout/attributes":806,"./layout/defaults":810,"./layout/layout_attributes":811,"./scene":815}],806:[function(t,e,r){"use strict";e.exports={scene:{valType:"subplotid",dflt:"scene",editType:"calc+clearAxisTypes"}}},{}],807:[function(t,e,r){"use strict";var n=t("../../../components/color"),a=t("../../cartesian/layout_attributes"),i=t("../../../lib/extend").extendFlat,o=t("../../../plot_api/edit_types").overrideAll;e.exports=o({visible:a.visible,showspikes:{valType:"boolean",dflt:!0},spikesides:{valType:"boolean",dflt:!0},spikethickness:{valType:"number",min:0,dflt:2},spikecolor:{valType:"color",dflt:n.defaultLine},showbackground:{valType:"boolean",dflt:!1},backgroundcolor:{valType:"color",dflt:"rgba(204, 204, 204, 0.5)"},showaxeslabels:{valType:"boolean",dflt:!0},color:a.color,categoryorder:a.categoryorder,categoryarray:a.categoryarray,title:{text:a.title.text,font:a.title.font},type:i({},a.type,{values:["-","linear","log","date","category"]}),autorange:a.autorange,rangemode:a.rangemode,range:i({},a.range,{items:[{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}}],anim:!1}),tickmode:a.tickmode,nticks:a.nticks,tick0:a.tick0,dtick:a.dtick,tickvals:a.tickvals,ticktext:a.ticktext,ticks:a.ticks,mirror:a.mirror,ticklen:a.ticklen,tickwidth:a.tickwidth,tickcolor:a.tickcolor,showticklabels:a.showticklabels,tickfont:a.tickfont,tickangle:a.tickangle,tickprefix:a.tickprefix,showtickprefix:a.showtickprefix,ticksuffix:a.ticksuffix,showticksuffix:a.showticksuffix,showexponent:a.showexponent,exponentformat:a.exponentformat,separatethousands:a.separatethousands,tickformat:a.tickformat,tickformatstops:a.tickformatstops,hoverformat:a.hoverformat,showline:a.showline,linecolor:a.linecolor,linewidth:a.linewidth,showgrid:a.showgrid,gridcolor:i({},a.gridcolor,{dflt:"rgb(204, 204, 204)"}),gridwidth:a.gridwidth,zeroline:a.zeroline,zerolinecolor:a.zerolinecolor,zerolinewidth:a.zerolinewidth,_deprecated:{title:a._deprecated.title,titlefont:a._deprecated.titlefont}},"plot","from-root")},{"../../../components/color":591,"../../../lib/extend":708,"../../../plot_api/edit_types":748,"../../cartesian/layout_attributes":777}],808:[function(t,e,r){"use strict";var n=t("tinycolor2").mix,a=t("../../../lib"),i=t("../../../plot_api/plot_template"),o=t("./axis_attributes"),s=t("../../cartesian/type_defaults"),l=t("../../cartesian/axis_defaults"),c=["xaxis","yaxis","zaxis"];e.exports=function(t,e,r){var u,h;function f(t,e){return a.coerce(u,h,o,t,e)}for(var p=0;p<c.length;p++){var d=c[p];u=t[d]||{},(h=i.newContainer(e,d))._id=d[0]+r.scene,h._name=d,s(u,h,f,r),l(u,h,f,{font:r.font,letter:d[0],data:r.data,showGrid:!0,noTickson:!0,bgColor:r.bgColor,calendar:r.calendar},r.fullLayout),f("gridcolor",n(h.color,r.bgColor,13600/187).toRgbString()),f("title.text",d[0]),h.setScale=a.noop,f("showspikes")&&(f("spikesides"),f("spikethickness"),f("spikecolor",h.color)),f("showaxeslabels"),f("showbackground")&&f("backgroundcolor")}}},{"../../../lib":717,"../../../plot_api/plot_template":755,"../../cartesian/axis_defaults":767,"../../cartesian/type_defaults":788,"./axis_attributes":807,tinycolor2:535}],809:[function(t,e,r){"use strict";var n=t("../../../lib/str2rgbarray"),a=t("../../../lib"),i=["xaxis","yaxis","zaxis"];function o(){this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.tickEnable=[!0,!0,!0],this.tickFont=["sans-serif","sans-serif","sans-serif"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[18,18,18],this.labels=["x","y","z"],this.labelEnable=[!0,!0,!0],this.labelFont=["Open Sans","Open Sans","Open Sans"],this.labelSize=[20,20,20],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[30,30,30],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[10,10,10],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!0,!0,!0],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._defaultTickPad=this.tickPad.slice(),this._defaultLabelPad=this.labelPad.slice(),this._defaultLineTickLength=this.lineTickLength.slice()}o.prototype.merge=function(t,e){for(var r=0;r<3;++r){var o=e[i[r]];o.visible?(this.labels[r]=t._meta?a.templateString(o.title.text,t._meta):o.title.text,"font"in o.title&&(o.title.font.color&&(this.labelColor[r]=n(o.title.font.color)),o.title.font.family&&(this.labelFont[r]=o.title.font.family),o.title.font.size&&(this.labelSize[r]=o.title.font.size)),"showline"in o&&(this.lineEnable[r]=o.showline),"linecolor"in o&&(this.lineColor[r]=n(o.linecolor)),"linewidth"in o&&(this.lineWidth[r]=o.linewidth),"showgrid"in o&&(this.gridEnable[r]=o.showgrid),"gridcolor"in o&&(this.gridColor[r]=n(o.gridcolor)),"gridwidth"in o&&(this.gridWidth[r]=o.gridwidth),"log"===o.type?this.zeroEnable[r]=!1:"zeroline"in o&&(this.zeroEnable[r]=o.zeroline),"zerolinecolor"in o&&(this.zeroLineColor[r]=n(o.zerolinecolor)),"zerolinewidth"in o&&(this.zeroLineWidth[r]=o.zerolinewidth),"ticks"in o&&o.ticks?this.lineTickEnable[r]=!0:this.lineTickEnable[r]=!1,"ticklen"in o&&(this.lineTickLength[r]=this._defaultLineTickLength[r]=o.ticklen),"tickcolor"in o&&(this.lineTickColor[r]=n(o.tickcolor)),"tickwidth"in o&&(this.lineTickWidth[r]=o.tickwidth),"tickangle"in o&&(this.tickAngle[r]="auto"===o.tickangle?-3600:Math.PI*-o.tickangle/180),"showticklabels"in o&&(this.tickEnable[r]=o.showticklabels),"tickfont"in o&&(o.tickfont.color&&(this.tickColor[r]=n(o.tickfont.color)),o.tickfont.family&&(this.tickFont[r]=o.tickfont.family),o.tickfont.size&&(this.tickSize[r]=o.tickfont.size)),"mirror"in o?-1!==["ticks","all","allticks"].indexOf(o.mirror)?(this.lineTickMirror[r]=!0,this.lineMirror[r]=!0):!0===o.mirror?(this.lineTickMirror[r]=!1,this.lineMirror[r]=!0):(this.lineTickMirror[r]=!1,this.lineMirror[r]=!1):this.lineMirror[r]=!1,"showbackground"in o&&!1!==o.showbackground?(this.backgroundEnable[r]=!0,this.backgroundColor[r]=n(o.backgroundcolor)):this.backgroundEnable[r]=!1):(this.tickEnable[r]=!1,this.labelEnable[r]=!1,this.lineEnable[r]=!1,this.lineTickEnable[r]=!1,this.gridEnable[r]=!1,this.zeroEnable[r]=!1,this.backgroundEnable[r]=!1)}},e.exports=function(t,e){var r=new o;return r.merge(t,e),r}},{"../../../lib":717,"../../../lib/str2rgbarray":740}],810:[function(t,e,r){"use strict";var n=t("../../../lib"),a=t("../../../components/color"),i=t("../../../registry"),o=t("../../subplot_defaults"),s=t("./axis_defaults"),l=t("./layout_attributes"),c=t("../../get_data").getSubplotData,u="gl3d";function h(t,e,r,n){for(var o=r("bgcolor"),l=a.combine(o,n.paper_bgcolor),h=["up","center","eye"],f=0;f<h.length;f++)r("camera."+h[f]+".x"),r("camera."+h[f]+".y"),r("camera."+h[f]+".z");r("camera.projection.type");var p=!!r("aspectratio.x")&&!!r("aspectratio.y")&&!!r("aspectratio.z"),d=r("aspectmode",p?"manual":"auto");p||(t.aspectratio=e.aspectratio={x:1,y:1,z:1},"manual"===d&&(e.aspectmode="auto"),t.aspectmode=e.aspectmode);var g=c(n.fullData,u,n.id);s(t,e,{font:n.font,scene:n.id,data:g,bgColor:l,calendar:n.calendar,fullLayout:n.fullLayout}),i.getComponentMethod("annotations3d","handleDefaults")(t,e,n);var v=n.getDfltFromLayout("dragmode");if(!1!==v&&!v)if(v="orbit",t.camera&&t.camera.up){var m=t.camera.up.x,y=t.camera.up.y,x=t.camera.up.z;0!==x&&(m&&y&&x?x/Math.sqrt(m*m+y*y+x*x)>.999&&(v="turntable"):v="turntable")}else v="turntable";r("dragmode",v),r("hovermode",n.getDfltFromLayout("hovermode"))}e.exports=function(t,e,r){var a=e._basePlotModules.length>1;o(t,e,r,{type:u,attributes:l,handleDefaults:h,fullLayout:e,font:e.font,fullData:r,getDfltFromLayout:function(e){if(!a)return n.validate(t[e],l[e])?t[e]:void 0},paper_bgcolor:e.paper_bgcolor,calendar:e.calendar})}},{"../../../components/color":591,"../../../lib":717,"../../../registry":846,"../../get_data":800,"../../subplot_defaults":840,"./axis_defaults":808,"./layout_attributes":811}],811:[function(t,e,r){"use strict";var n=t("./axis_attributes"),a=t("../../domain").attributes,i=t("../../../lib/extend").extendFlat,o=t("../../../lib").counterRegex;function s(t,e,r){return{x:{valType:"number",dflt:t,editType:"camera"},y:{valType:"number",dflt:e,editType:"camera"},z:{valType:"number",dflt:r,editType:"camera"},editType:"camera"}}e.exports={_arrayAttrRegexps:[o("scene",".annotations",!0)],bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"plot"},camera:{up:i(s(0,0,1),{}),center:i(s(0,0,0),{}),eye:i(s(1.25,1.25,1.25),{}),projection:{type:{valType:"enumerated",values:["perspective","orthographic"],dflt:"perspective",editType:"calc"},editType:"calc"},editType:"camera"},domain:a({name:"scene",editType:"plot"}),aspectmode:{valType:"enumerated",values:["auto","cube","data","manual"],dflt:"auto",editType:"plot",impliedEdits:{"aspectratio.x":void 0,"aspectratio.y":void 0,"aspectratio.z":void 0}},aspectratio:{x:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},y:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},z:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},editType:"plot",impliedEdits:{aspectmode:"manual"}},xaxis:n,yaxis:n,zaxis:n,dragmode:{valType:"enumerated",values:["orbit","turntable","zoom","pan",!1],editType:"plot"},hovermode:{valType:"enumerated",values:["closest",!1],dflt:"closest",editType:"modebar"},uirevision:{valType:"any",editType:"none"},editType:"plot",_deprecated:{cameraposition:{valType:"info_array",editType:"camera"}}}},{"../../../lib":717,"../../../lib/extend":708,"../../domain":790,"./axis_attributes":807}],812:[function(t,e,r){"use strict";var n=t("../../../lib/str2rgbarray"),a=["xaxis","yaxis","zaxis"];function i(){this.enabled=[!0,!0,!0],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.drawSides=[!0,!0,!0],this.lineWidth=[1,1,1]}i.prototype.merge=function(t){for(var e=0;e<3;++e){var r=t[a[e]];r.visible?(this.enabled[e]=r.showspikes,this.colors[e]=n(r.spikecolor),this.drawSides[e]=r.spikesides,this.lineWidth[e]=r.spikethickness):(this.enabled[e]=!1,this.drawSides[e]=!1)}},e.exports=function(t){var e=new i;return e.merge(t),e}},{"../../../lib/str2rgbarray":740}],813:[function(t,e,r){"use strict";e.exports=function(t){for(var e=t.axesOptions,r=t.glplot.axesPixels,s=t.fullSceneLayout,l=[[],[],[]],c=0;c<3;++c){var u=s[i[c]];if(u._length=(r[c].hi-r[c].lo)*r[c].pixelsPerDataUnit/t.dataScale[c],Math.abs(u._length)===1/0||isNaN(u._length))l[c]=[];else{u._input_range=u.range.slice(),u.range[0]=r[c].lo/t.dataScale[c],u.range[1]=r[c].hi/t.dataScale[c],u._m=1/(t.dataScale[c]*r[c].pixelsPerDataUnit),u.range[0]===u.range[1]&&(u.range[0]-=1,u.range[1]+=1);var h=u.tickmode;if("auto"===u.tickmode){u.tickmode="linear";var f=u.nticks||a.constrain(u._length/40,4,9);n.autoTicks(u,Math.abs(u.range[1]-u.range[0])/f)}for(var p=n.calcTicks(u),d=0;d<p.length;++d)p[d].x=p[d].x*t.dataScale[c],"date"===u.type&&(p[d].text=p[d].text.replace(/\<br\>/g," "));l[c]=p,u.tickmode=h}}e.ticks=l;for(var c=0;c<3;++c){o[c]=.5*(t.glplot.bounds[0][c]+t.glplot.bounds[1][c]);for(var d=0;d<2;++d)e.bounds[d][c]=t.glplot.bounds[d][c]}t.contourLevels=function(t){for(var e=new Array(3),r=0;r<3;++r){for(var n=t[r],a=new Array(n.length),i=0;i<n.length;++i)a[i]=n[i].x;e[r]=a}return e}(l)};var n=t("../../cartesian/axes"),a=t("../../../lib"),i=["xaxis","yaxis","zaxis"],o=[0,0,0]},{"../../../lib":717,"../../cartesian/axes":765}],814:[function(t,e,r){"use strict";function n(t,e){var r,n,a=[0,0,0,0];for(r=0;r<4;++r)for(n=0;n<4;++n)a[n]+=t[4*r+n]*e[r];return a}e.exports=function(t,e){return n(t.projection,n(t.view,n(t.model,[e[0],e[1],e[2],1])))}},{}],815:[function(t,e,r){"use strict";var n,a,i=t("gl-plot3d"),o=i.createCamera,s=i.createScene,l=t("webgl-context"),c=t("has-passive-events"),u=t("../../registry"),h=t("../../lib"),f=t("../../plots/cartesian/axes"),p=t("../../components/fx"),d=t("../../lib/str2rgbarray"),g=t("../../lib/show_no_webgl_msg"),v=t("./project"),m=t("./layout/convert"),y=t("./layout/spikes"),x=t("./layout/tick_marks"),b=t("is-mobile")({tablet:!0,featureDetect:!0});function _(t,e){var r=document.createElement("div"),n=t.container;this.graphDiv=t.graphDiv;var a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.style.position="absolute",a.style.top=a.style.left="0px",a.style.width=a.style.height="100%",a.style["z-index"]=20,a.style["pointer-events"]="none",r.appendChild(a),this.svgContainer=a,r.id=t.id,r.style.position="absolute",r.style.top=r.style.left="0px",r.style.width=r.style.height="100%",n.appendChild(r),this.fullLayout=e,this.id=t.id||"scene",this.fullSceneLayout=e[this.id],this.plotArgs=[[],{},{}],this.axesOptions=m(e,e[this.id]),this.spikeOptions=y(e[this.id]),this.container=r,this.staticMode=!!t.staticPlot,this.pixelRatio=this.pixelRatio||t.plotGlPixelRatio||2,this.dataScale=[1,1,1],this.contourLevels=[[],[],[]],this.convertAnnotations=u.getComponentMethod("annotations3d","convert"),this.drawAnnotations=u.getComponentMethod("annotations3d","draw"),this.initializeGLPlot()}var w=_.prototype;w.prepareOptions=function(){var t={canvas:this.canvas,gl:this.gl,glOptions:{preserveDrawingBuffer:b,premultipliedAlpha:!0,antialias:!0},container:this.container,axes:this.axesOptions,spikes:this.spikeOptions,pickRadius:10,snapToData:!0,autoScale:!0,autoBounds:!1,cameraObject:this.camera,pixelRatio:this.pixelRatio};if(this.staticMode){if(!(a||(n=document.createElement("canvas"),a=l({canvas:n,preserveDrawingBuffer:!0,premultipliedAlpha:!0,antialias:!0}))))throw new Error("error creating static canvas/context for image server");t.gl=a,t.canvas=n}return t},w.tryCreatePlot=function(){var t=this.prepareOptions(),e=!0;try{this.glplot=s(t)}catch(r){if(this.staticMode)e=!1;else try{h.warn(["webgl setup failed possibly due to",b?"disabling":"enabling","preserveDrawingBuffer config.","The device may not be supported by is-mobile module!","Inverting preserveDrawingBuffer option in second attempt to create webgl scene."].join(" ")),b=t.glOptions.preserveDrawingBuffer=!t.glOptions.preserveDrawingBuffer,this.glplot=s(t)}catch(t){e=!1}}return e},w.initializeGLCamera=function(){var t=this.fullSceneLayout.camera,e="orthographic"===t.projection.type;this.camera=o(this.container,{center:[t.center.x,t.center.y,t.center.z],eye:[t.eye.x,t.eye.y,t.eye.z],up:[t.up.x,t.up.y,t.up.z],_ortho:e,zoomMin:.01,zoomMax:100,mode:"orbit"})},w.initializeGLPlot=function(){var t=this;if(t.initializeGLCamera(),!t.tryCreatePlot())return g(t);t.traces={},t.make4thDimension();var e=t.graphDiv,r=e.layout,n=function(){var e={};return t.isCameraChanged(r)&&(e[t.id+".camera"]=t.getCamera()),t.isAspectChanged(r)&&(e[t.id+".aspectratio"]=t.glplot.getAspectratio(),"manual"!==r[t.id].aspectmode&&(t.fullSceneLayout.aspectmode=r[t.id].aspectmode=e[t.id+".aspectmode"]="manual")),e},a=function(t){if(!1!==t.fullSceneLayout.dragmode){var e=n();t.saveLayout(r),t.graphDiv.emit("plotly_relayout",e)}};return t.glplot.canvas.addEventListener("mouseup",function(){a(t)}),t.glplot.canvas.addEventListener("wheel",function(r){if(e._context._scrollZoom.gl3d){if(t.camera._ortho){var n=r.deltaX>r.deltaY?1.1:1/1.1,i=t.glplot.getAspectratio();t.glplot.setAspectratio({x:n*i.x,y:n*i.y,z:n*i.z})}a(t)}},!!c&&{passive:!1}),t.glplot.canvas.addEventListener("mousemove",function(){if(!1!==t.fullSceneLayout.dragmode&&0!==t.camera.mouseListener.buttons){var e=n();t.graphDiv.emit("plotly_relayouting",e)}}),t.staticMode||t.glplot.canvas.addEventListener("webglcontextlost",function(r){e&&e.emit&&e.emit("plotly_webglcontextlost",{event:r,layer:t.id})},!1),t.glplot.oncontextloss=function(){t.recoverContext()},t.glplot.onrender=function(){t.render()},!0},w.render=function(){var t,e=this,r=e.graphDiv,n=e.svgContainer,a=e.container.getBoundingClientRect(),i=a.width,o=a.height;n.setAttributeNS(null,"viewBox","0 0 "+i+" "+o),n.setAttributeNS(null,"width",i),n.setAttributeNS(null,"height",o),x(e),e.glplot.axes.update(e.axesOptions);for(var s,l=Object.keys(e.traces),c=null,u=e.glplot.selection,d=0;d<l.length;++d)"skip"!==(t=e.traces[l[d]]).data.hoverinfo&&t.handlePick(u)&&(c=t),t.setContourLevels&&t.setContourLevels();function g(t,r){var n=e.fullSceneLayout[t];return f.tickText(n,n.d2l(r),"hover").text}if(null!==c){var m=v(e.glplot.cameraParams,u.dataCoordinate);t=c.data;var y,b=r._fullData[t.index],_=u.index,w={xLabel:g("xaxis",u.traceCoordinate[0]),yLabel:g("yaxis",u.traceCoordinate[1]),zLabel:g("zaxis",u.traceCoordinate[2])},k=p.castHoverinfo(b,e.fullLayout,_),T=(k||"").split("+"),M=k&&"all"===k;b.hovertemplate||M||(-1===T.indexOf("x")&&(w.xLabel=void 0),-1===T.indexOf("y")&&(w.yLabel=void 0),-1===T.indexOf("z")&&(w.zLabel=void 0),-1===T.indexOf("text")&&(u.textLabel=void 0),-1===T.indexOf("name")&&(c.name=void 0));var A=[];"cone"===t.type||"streamtube"===t.type?(w.uLabel=g("xaxis",u.traceCoordinate[3]),(M||-1!==T.indexOf("u"))&&A.push("u: "+w.uLabel),w.vLabel=g("yaxis",u.traceCoordinate[4]),(M||-1!==T.indexOf("v"))&&A.push("v: "+w.vLabel),w.wLabel=g("zaxis",u.traceCoordinate[5]),(M||-1!==T.indexOf("w"))&&A.push("w: "+w.wLabel),w.normLabel=u.traceCoordinate[6].toPrecision(3),(M||-1!==T.indexOf("norm"))&&A.push("norm: "+w.normLabel),"streamtube"===t.type&&(w.divergenceLabel=u.traceCoordinate[7].toPrecision(3),(M||-1!==T.indexOf("divergence"))&&A.push("divergence: "+w.divergenceLabel)),u.textLabel&&A.push(u.textLabel),y=A.join("<br>")):"isosurface"===t.type||"volume"===t.type?(w.valueLabel=f.tickText(e._mockAxis,e._mockAxis.d2l(u.traceCoordinate[3]),"hover").text,A.push("value: "+w.valueLabel),u.textLabel&&A.push(u.textLabel),y=A.join("<br>")):y=u.textLabel;var S={x:u.traceCoordinate[0],y:u.traceCoordinate[1],z:u.traceCoordinate[2],data:b._input,fullData:b,curveNumber:b.index,pointNumber:_};p.appendArrayPointValue(S,b,_),t._module.eventData&&(S=b._module.eventData(S,u,b,{},_));var E={points:[S]};e.fullSceneLayout.hovermode&&p.loneHover({trace:b,x:(.5+.5*m[0]/m[3])*i,y:(.5-.5*m[1]/m[3])*o,xLabel:w.xLabel,yLabel:w.yLabel,zLabel:w.zLabel,text:y,name:c.name,color:p.castHoverOption(b,_,"bgcolor")||c.color,borderColor:p.castHoverOption(b,_,"bordercolor"),fontFamily:p.castHoverOption(b,_,"font.family"),fontSize:p.castHoverOption(b,_,"font.size"),fontColor:p.castHoverOption(b,_,"font.color"),nameLength:p.castHoverOption(b,_,"namelength"),textAlign:p.castHoverOption(b,_,"align"),hovertemplate:h.castOption(b,_,"hovertemplate"),hovertemplateLabels:h.extendFlat({},S,w),eventData:[S]},{container:n,gd:r}),u.buttons&&u.distance<5?r.emit("plotly_click",E):r.emit("plotly_hover",E),s=E}else p.loneUnhover(n),r.emit("plotly_unhover",s);e.drawAnnotations(e)},w.recoverContext=function(){var t=this;t.glplot.dispose();var e=function(){t.glplot.gl.isContextLost()?requestAnimationFrame(e):t.initializeGLPlot()?t.plot.apply(t,t.plotArgs):h.error("Catastrophic and unrecoverable WebGL error. Context lost.")};requestAnimationFrame(e)};var k=["xaxis","yaxis","zaxis"];function T(t,e,r){for(var n=t.fullSceneLayout,a=0;a<3;a++){var i=k[a],o=i.charAt(0),s=n[i],l=e[o],c=e[o+"calendar"],u=e["_"+o+"length"];if(h.isArrayOrTypedArray(l))for(var f,p=0;p<(u||l.length);p++)if(h.isArrayOrTypedArray(l[p]))for(var d=0;d<l[p].length;++d)f=s.d2l(l[p][d],0,c),!isNaN(f)&&isFinite(f)&&(r[0][a]=Math.min(r[0][a],f),r[1][a]=Math.max(r[1][a],f));else f=s.d2l(l[p],0,c),!isNaN(f)&&isFinite(f)&&(r[0][a]=Math.min(r[0][a],f),r[1][a]=Math.max(r[1][a],f));else r[0][a]=Math.min(r[0][a],0),r[1][a]=Math.max(r[1][a],u-1)}}w.plot=function(t,e,r){if(this.plotArgs=[t,e,r],!this.glplot.contextLost){var n,a,i,o,s,l,c=e[this.id],u=r[this.id];this.fullLayout=e,this.fullSceneLayout=c,this.axesOptions.merge(e,c),this.spikeOptions.merge(c),this.setViewport(c),this.updateFx(c.dragmode,c.hovermode),this.camera.enableWheel=this.graphDiv._context._scrollZoom.gl3d,this.glplot.setClearColor(d(c.bgcolor)),this.setConvert(s),t?Array.isArray(t)||(t=[t]):t=[];var h=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(i=0;i<t.length;++i)!0===(n=t[i]).visible&&0!==n._length&&T(this,n,h);!function(t,e){for(var r=t.fullSceneLayout,n=r.annotations||[],a=0;a<3;a++)for(var i=k[a],o=i.charAt(0),s=r[i],l=0;l<n.length;l++){var c=n[l];if(c.visible){var u=s.r2l(c[o]);!isNaN(u)&&isFinite(u)&&(e[0][a]=Math.min(e[0][a],u),e[1][a]=Math.max(e[1][a],u))}}}(this,h);var f=[1,1,1];for(o=0;o<3;++o)h[1][o]===h[0][o]?f[o]=1:f[o]=1/(h[1][o]-h[0][o]);for(this.dataScale=f,this.convertAnnotations(this),i=0;i<t.length;++i)!0===(n=t[i]).visible&&0!==n._length&&((a=this.traces[n.uid])?a.data.type===n.type?a.update(n):(a.dispose(),a=n._module.plot(this,n),this.traces[n.uid]=a):(a=n._module.plot(this,n),this.traces[n.uid]=a),a.name=n.name);var p=Object.keys(this.traces);t:for(i=0;i<p.length;++i){for(o=0;o<t.length;++o)if(t[o].uid===p[i]&&!0===t[o].visible&&0!==t[o]._length)continue t;(a=this.traces[p[i]]).dispose(),delete this.traces[p[i]]}this.glplot.objects.sort(function(t,e){return t._trace.data.index-e._trace.data.index});var g,v=[[0,0,0],[0,0,0]],m=[],y={};for(i=0;i<3;++i){if((l=(s=c[k[i]]).type)in y?(y[l].acc*=f[i],y[l].count+=1):y[l]={acc:f[i],count:1},s.autorange){v[0][i]=1/0,v[1][i]=-1/0;var x=this.glplot.objects,b=this.fullSceneLayout.annotations||[],_=s._name.charAt(0);for(o=0;o<x.length;o++){var w=x[o],M=w.bounds,A=w._trace.data._pad||0;"ErrorBars"===w.constructor.name&&s._lowerLogErrorBound?v[0][i]=Math.min(v[0][i],s._lowerLogErrorBound):v[0][i]=Math.min(v[0][i],M[0][i]/f[i]-A),v[1][i]=Math.max(v[1][i],M[1][i]/f[i]+A)}for(o=0;o<b.length;o++){var S=b[o];if(S.visible){var E=s.r2l(S[_]);v[0][i]=Math.min(v[0][i],E),v[1][i]=Math.max(v[1][i],E)}}if("rangemode"in s&&"tozero"===s.rangemode&&(v[0][i]=Math.min(v[0][i],0),v[1][i]=Math.max(v[1][i],0)),v[0][i]>v[1][i])v[0][i]=-1,v[1][i]=1;else{var L=v[1][i]-v[0][i];v[0][i]-=L/32,v[1][i]+=L/32}if("reversed"===s.autorange){var C=v[0][i];v[0][i]=v[1][i],v[1][i]=C}}else{var P=s.range;v[0][i]=s.r2l(P[0]),v[1][i]=s.r2l(P[1])}v[0][i]===v[1][i]&&(v[0][i]-=1,v[1][i]+=1),m[i]=v[1][i]-v[0][i],this.glplot.setBounds(i,{min:v[0][i]*f[i],max:v[1][i]*f[i]})}var O=c.aspectmode;if("cube"===O)g=[1,1,1];else if("manual"===O){var z=c.aspectratio;g=[z.x,z.y,z.z]}else{if("auto"!==O&&"data"!==O)throw new Error("scene.js aspectRatio was not one of the enumerated types");var I=[1,1,1];for(i=0;i<3;++i){var D=y[l=(s=c[k[i]]).type];I[i]=Math.pow(D.acc,1/D.count)/f[i]}g="data"===O?I:Math.max.apply(null,I)/Math.min.apply(null,I)<=4?I:[1,1,1]}c.aspectratio.x=u.aspectratio.x=g[0],c.aspectratio.y=u.aspectratio.y=g[1],c.aspectratio.z=u.aspectratio.z=g[2],this.glplot.setAspectratio(c.aspectratio),this.viewInitial.aspectratio||(this.viewInitial.aspectratio={x:c.aspectratio.x,y:c.aspectratio.y,z:c.aspectratio.z}),this.viewInitial.aspectmode||(this.viewInitial.aspectmode=c.aspectmode);var R=c.domain||null,F=e._size||null;if(R&&F){var B=this.container.style;B.position="absolute",B.left=F.l+R.x[0]*F.w+"px",B.top=F.t+(1-R.y[1])*F.h+"px",B.width=F.w*(R.x[1]-R.x[0])+"px",B.height=F.h*(R.y[1]-R.y[0])+"px"}this.glplot.redraw()}},w.destroy=function(){this.glplot&&(this.camera.mouseListener.enabled=!1,this.container.removeEventListener("wheel",this.camera.wheelListener),this.camera=null,this.glplot.dispose(),this.container.parentNode.removeChild(this.container),this.glplot=null)},w.getCamera=function(){var t;return this.camera.view.recalcMatrix(this.camera.view.lastT()),{up:{x:(t=this.camera).up[0],y:t.up[1],z:t.up[2]},center:{x:t.center[0],y:t.center[1],z:t.center[2]},eye:{x:t.eye[0],y:t.eye[1],z:t.eye[2]},projection:{type:!0===t._ortho?"orthographic":"perspective"}}},w.setViewport=function(t){var e,r=t.camera;this.camera.lookAt.apply(this,[[(e=r).eye.x,e.eye.y,e.eye.z],[e.center.x,e.center.y,e.center.z],[e.up.x,e.up.y,e.up.z]]),this.glplot.setAspectratio(t.aspectratio),"orthographic"===r.projection.type!==this.camera._ortho&&(this.glplot.redraw(),this.glplot.clearRGBA(),this.glplot.dispose(),this.initializeGLPlot())},w.isCameraChanged=function(t){var e=this.getCamera(),r=h.nestedProperty(t,this.id+".camera").get();function n(t,e,r,n){var a=["up","center","eye"],i=["x","y","z"];return e[a[r]]&&t[a[r]][i[n]]===e[a[r]][i[n]]}var a=!1;if(void 0===r)a=!0;else{for(var i=0;i<3;i++)for(var o=0;o<3;o++)if(!n(e,r,i,o)){a=!0;break}(!r.projection||e.projection&&e.projection.type!==r.projection.type)&&(a=!0)}return a},w.isAspectChanged=function(t){var e=this.glplot.getAspectratio(),r=h.nestedProperty(t,this.id+".aspectratio").get();return void 0===r||r.x!==e.x||r.y!==e.y||r.z!==e.z},w.saveLayout=function(t){var e,r,n,a,i,o,s=this.fullLayout,l=this.isCameraChanged(t),c=this.isAspectChanged(t),f=l||c;if(f){var p={};if(l&&(e=this.getCamera(),n=(r=h.nestedProperty(t,this.id+".camera")).get(),p[this.id+".camera"]=n),c&&(a=this.glplot.getAspectratio(),o=(i=h.nestedProperty(t,this.id+".aspectratio")).get(),p[this.id+".aspectratio"]=o),u.call("_storeDirectGUIEdit",t,s._preGUI,p),l)r.set(e),h.nestedProperty(s,this.id+".camera").set(e);if(c)i.set(a),h.nestedProperty(s,this.id+".aspectratio").set(a),this.glplot.redraw()}return f},w.updateFx=function(t,e){var r=this.camera;if(r)if("orbit"===t)r.mode="orbit",r.keyBindingMode="rotate";else if("turntable"===t){r.up=[0,0,1],r.mode="turntable",r.keyBindingMode="rotate";var n=this.graphDiv,a=n._fullLayout,i=this.fullSceneLayout.camera,o=i.up.x,s=i.up.y,l=i.up.z;if(l/Math.sqrt(o*o+s*s+l*l)<.999){var c=this.id+".camera.up",f={x:0,y:0,z:1},p={};p[c]=f;var d=n.layout;u.call("_storeDirectGUIEdit",d,a._preGUI,p),i.up=f,h.nestedProperty(d,c).set(f)}}else r.keyBindingMode=t;this.fullSceneLayout.hovermode=e},w.toImage=function(t){t||(t="png"),this.staticMode&&this.container.appendChild(n),this.glplot.redraw();var e=this.glplot.gl,r=e.drawingBufferWidth,a=e.drawingBufferHeight;e.bindFramebuffer(e.FRAMEBUFFER,null);var i=new Uint8Array(r*a*4);e.readPixels(0,0,r,a,e.RGBA,e.UNSIGNED_BYTE,i),function(t,e,r){for(var n=0,a=r-1;n<a;++n,--a)for(var i=0;i<e;++i)for(var o=0;o<4;++o){var s=4*(e*n+i)+o,l=4*(e*a+i)+o,c=t[s];t[s]=t[l],t[l]=c}}(i,r,a),function(t,e,r){for(var n=0;n<r;++n)for(var a=0;a<e;++a){var i=4*(e*n+a),o=t[i+3];if(o>0)for(var s=255/o,l=0;l<3;++l)t[i+l]=Math.min(s*t[i+l],255)}}(i,r,a);var o=document.createElement("canvas");o.width=r,o.height=a;var s,l=o.getContext("2d"),c=l.createImageData(r,a);switch(c.data.set(i),l.putImageData(c,0,0),t){case"jpeg":s=o.toDataURL("image/jpeg");break;case"webp":s=o.toDataURL("image/webp");break;default:s=o.toDataURL("image/png")}return this.staticMode&&this.container.removeChild(n),s},w.setConvert=function(){for(var t=0;t<3;t++){var e=this.fullSceneLayout[k[t]];f.setConvert(e,this.fullLayout),e.setScale=h.noop}},w.make4thDimension=function(){var t=this.graphDiv._fullLayout;this._mockAxis={type:"linear",showexponent:"all",exponentformat:"B"},f.setConvert(this._mockAxis,t)},e.exports=_},{"../../components/fx":630,"../../lib":717,"../../lib/show_no_webgl_msg":738,"../../lib/str2rgbarray":740,"../../plots/cartesian/axes":765,"../../registry":846,"./layout/convert":809,"./layout/spikes":812,"./layout/tick_marks":813,"./project":814,"gl-plot3d":293,"has-passive-events":412,"is-mobile":421,"webgl-context":554}],816:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){n=n||t.length;for(var a=new Array(n),i=0;i<n;i++)a[i]=[t[i],e[i],r[i]];return a}},{}],817:[function(t,e,r){"use strict";var n=t("./font_attributes"),a=t("./animation_attributes"),i=t("../components/color/attributes"),o=t("./pad_attributes"),s=t("../lib/extend").extendFlat,l=n({editType:"calc"});l.family.dflt='"Open Sans", verdana, arial, sans-serif',l.size.dflt=12,l.color.dflt=i.defaultLine,e.exports={font:l,title:{text:{valType:"string",editType:"layoutstyle"},font:n({editType:"layoutstyle"}),xref:{valType:"enumerated",dflt:"container",values:["container","paper"],editType:"layoutstyle"},yref:{valType:"enumerated",dflt:"container",values:["container","paper"],editType:"layoutstyle"},x:{valType:"number",min:0,max:1,dflt:.5,editType:"layoutstyle"},y:{valType:"number",min:0,max:1,dflt:"auto",editType:"layoutstyle"},xanchor:{valType:"enumerated",dflt:"auto",values:["auto","left","center","right"],editType:"layoutstyle"},yanchor:{valType:"enumerated",dflt:"auto",values:["auto","top","middle","bottom"],editType:"layoutstyle"},pad:s(o({editType:"layoutstyle"}),{}),editType:"layoutstyle"},uniformtext:{mode:{valType:"enumerated",values:[!1,"hide","show"],dflt:!1,editType:"plot"},minsize:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"plot"},autosize:{valType:"boolean",dflt:!1,editType:"none"},width:{valType:"number",min:10,dflt:700,editType:"plot"},height:{valType:"number",min:10,dflt:450,editType:"plot"},margin:{l:{valType:"number",min:0,dflt:80,editType:"plot"},r:{valType:"number",min:0,dflt:80,editType:"plot"},t:{valType:"number",min:0,dflt:100,editType:"plot"},b:{valType:"number",min:0,dflt:80,editType:"plot"},pad:{valType:"number",min:0,dflt:0,editType:"plot"},autoexpand:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},paper_bgcolor:{valType:"color",dflt:i.background,editType:"plot"},plot_bgcolor:{valType:"color",dflt:i.background,editType:"layoutstyle"},separators:{valType:"string",editType:"plot"},hidesources:{valType:"boolean",dflt:!1,editType:"plot"},showlegend:{valType:"boolean",editType:"legend"},colorway:{valType:"colorlist",dflt:i.defaults,editType:"calc"},datarevision:{valType:"any",editType:"calc"},uirevision:{valType:"any",editType:"none"},editrevision:{valType:"any",editType:"none"},selectionrevision:{valType:"any",editType:"none"},template:{valType:"any",editType:"calc"},modebar:{orientation:{valType:"enumerated",values:["v","h"],dflt:"h",editType:"modebar"},bgcolor:{valType:"color",editType:"modebar"},color:{valType:"color",editType:"modebar"},activecolor:{valType:"color",editType:"modebar"},uirevision:{valType:"any",editType:"none"},editType:"modebar"},meta:{valType:"any",arrayOk:!0,editType:"plot"},transition:s({},a.transition,{editType:"none"}),_deprecated:{title:{valType:"string",editType:"layoutstyle"},titlefont:n({editType:"layoutstyle"})}}},{"../components/color/attributes":590,"../lib/extend":708,"./animation_attributes":760,"./font_attributes":791,"./pad_attributes":825}],818:[function(t,e,r){"use strict";var n={"open-street-map":{id:"osm",version:8,sources:{"plotly-osm-tiles":{type:"raster",attribution:'<a href="http://www.openstreetmap.org/about/" target="_blank">\xa9 OpenStreetMap</a>',tiles:["https://a.tile.openstreetmap.org/{z}/{x}/{y}.png","https://b.tile.openstreetmap.org/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-osm-tiles",type:"raster",source:"plotly-osm-tiles",minzoom:0,maxzoom:22}]},"white-bg":{id:"white-bg",version:8,sources:{},layers:[{id:"white-bg",type:"background",paint:{"background-color":"#FFFFFF"},minzoom:0,maxzoom:22}]},"carto-positron":{id:"carto-positron",version:8,sources:{"plotly-carto-positron":{type:"raster",attribution:'<a href="https://carto.com/" target="_blank">\xa9 CARTO</a>',tiles:["https://cartodb-basemaps-c.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-carto-positron",type:"raster",source:"plotly-carto-positron",minzoom:0,maxzoom:22}]},"carto-darkmatter":{id:"carto-darkmatter",version:8,sources:{"plotly-carto-darkmatter":{type:"raster",attribution:'<a href="https://carto.com/" target="_blank">\xa9 CARTO</a>',tiles:["https://cartodb-basemaps-c.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-carto-darkmatter",type:"raster",source:"plotly-carto-darkmatter",minzoom:0,maxzoom:22}]},"stamen-terrain":{id:"stamen-terrain",version:8,sources:{"plotly-stamen-terrain":{type:"raster",attribution:'Map tiles by <a href="http://stamen.com">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> | Data by <a href="http://openstreetmap.org">OpenStreetMap</a>, under <a href="http://www.openstreetmap.org/copyright">ODbL</a>.',tiles:["https://stamen-tiles.a.ssl.fastly.net/terrain/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-stamen-terrain",type:"raster",source:"plotly-stamen-terrain",minzoom:0,maxzoom:22}]},"stamen-toner":{id:"stamen-toner",version:8,sources:{"plotly-stamen-toner":{type:"raster",attribution:'Map tiles by <a href="http://stamen.com">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> | Data by <a href="http://openstreetmap.org">OpenStreetMap</a>, under <a href="http://www.openstreetmap.org/copyright">ODbL</a>.',tiles:["https://stamen-tiles.a.ssl.fastly.net/toner/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-stamen-toner",type:"raster",source:"plotly-stamen-toner",minzoom:0,maxzoom:22}]},"stamen-watercolor":{id:"stamen-watercolor",version:8,sources:{"plotly-stamen-watercolor":{type:"raster",attribution:'Map tiles by <a href="http://stamen.com">Stamen Design</a>, under <a href="http://creativecommons.org/licenses/by/3.0">CC BY 3.0</a> | Data by <a href="http://openstreetmap.org">OpenStreetMap</a>, under <a href="http://creativecommons.org/licenses/by-sa/3.0">CC BY SA</a>.',tiles:["https://stamen-tiles.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.png"],tileSize:256}},layers:[{id:"plotly-stamen-watercolor",type:"raster",source:"plotly-stamen-watercolor",minzoom:0,maxzoom:22}]}},a=Object.keys(n);e.exports={requiredVersion:"1.3.2",styleUrlPrefix:"mapbox://styles/mapbox/",styleUrlSuffix:"v9",styleValuesMapbox:["basic","streets","outdoors","light","dark","satellite","satellite-streets"],styleValueDflt:"basic",stylesNonMapbox:n,styleValuesNonMapbox:a,traceLayerPrefix:"plotly-trace-layer-",layoutLayerPrefix:"plotly-layout-layer-",wrongVersionErrorMsg:["Your custom plotly.js bundle is not using the correct mapbox-gl version","Please install mapbox-gl@1.3.2."].join("\n"),noAccessTokenErrorMsg:["Missing Mapbox access token.","Mapbox trace type require a Mapbox access token to be registered.","For example:"," Plotly.plot(gd, data, layout, { mapboxAccessToken: 'my-access-token' });","More info here: https://www.mapbox.com/help/define-access-token/"].join("\n"),missingStyleErrorMsg:["No valid mapbox style found, please set `mapbox.style` to one of:",a.join(", "),"or register a Mapbox access token to use a Mapbox-served style."].join("\n"),multipleTokensErrorMsg:["Set multiple mapbox access token across different mapbox subplot,","using first token found as mapbox-gl does not allow multipleaccess tokens on the same page."].join("\n"),mapOnErrorMsg:"Mapbox error.",mapboxLogo:{path0:"m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z",path1:"M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z",path2:"M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z",polygon:"11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34"},styleRules:{map:"overflow:hidden;position:relative;","missing-css":"display:none;",canary:"background-color:salmon;","ctrl-bottom-left":"position: absolute; pointer-events: none; z-index: 2; bottom: 0; left: 0;","ctrl-bottom-right":"position: absolute; pointer-events: none; z-index: 2; right: 0; bottom: 0;",ctrl:"clear: both; pointer-events: auto; transform: translate(0, 0);","ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner":"display: none;","ctrl-attrib.mapboxgl-compact:hover .mapboxgl-ctrl-attrib-inner":"display: block; margin-top:2px","ctrl-attrib.mapboxgl-compact:hover":"padding: 2px 24px 2px 4px; visibility: visible; margin-top: 6px;","ctrl-attrib.mapboxgl-compact::after":'content: ""; cursor: pointer; position: absolute; background-image: url(\'data:image/svg+xml;charset=utf-8,%3Csvg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"%3E %3Cpath fill="%23333333" fill-rule="evenodd" d="M4,10a6,6 0 1,0 12,0a6,6 0 1,0 -12,0 M9,7a1,1 0 1,0 2,0a1,1 0 1,0 -2,0 M9,10a1,1 0 1,1 2,0l0,3a1,1 0 1,1 -2,0"/%3E %3C/svg%3E\'); background-color: rgba(255, 255, 255, 0.5); width: 24px; height: 24px; box-sizing: border-box; border-radius: 12px;',"ctrl-attrib.mapboxgl-compact":"min-height: 20px; padding: 0; margin: 10px; position: relative; background-color: #fff; border-radius: 3px 12px 12px 3px;","ctrl-bottom-right > .mapboxgl-ctrl-attrib.mapboxgl-compact::after":"bottom: 0; right: 0","ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact::after":"bottom: 0; left: 0","ctrl-bottom-left .mapboxgl-ctrl":"margin: 0 0 10px 10px; float: left;","ctrl-bottom-right .mapboxgl-ctrl":"margin: 0 10px 10px 0; float: right;","ctrl-attrib":"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px","ctrl-attrib a":"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px","ctrl-attrib a:hover":"color: inherit; text-decoration: underline;","ctrl-attrib .mapbox-improve-map":"font-weight: bold; margin-left: 2px;","attrib-empty":"display: none;","ctrl-logo":'display:block; width: 21px; height: 21px; background-image: url(\'data:image/svg+xml;charset=utf-8,%3C?xml version="1.0" encoding="utf-8"?%3E %3Csvg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 21 21" style="enable-background:new 0 0 21 21;" xml:space="preserve"%3E%3Cg transform="translate(0,0.01)"%3E%3Cpath d="m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z" style="opacity:0.9;fill:%23ffffff;enable-background:new" class="st0"/%3E%3Cpath d="M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z" style="opacity:0.35;enable-background:new" class="st1"/%3E%3Cpath d="M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z" style="opacity:0.35;enable-background:new" class="st1"/%3E%3Cpolygon points="11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34 " style="opacity:0.9;fill:%23ffffff;enable-background:new" class="st0"/%3E%3C/g%3E%3C/svg%3E\')'}}},{}],819:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){var r=t.split(" "),a=r[0],i=r[1],o=n.isArrayOrTypedArray(e)?n.mean(e):e,s=.5+o/100,l=1.5+o/100,c=["",""],u=[0,0];switch(a){case"top":c[0]="top",u[1]=-l;break;case"bottom":c[0]="bottom",u[1]=l}switch(i){case"left":c[1]="right",u[0]=-s;break;case"right":c[1]="left",u[0]=s}return{anchor:c[0]&&c[1]?c.join("-"):c[0]?c[0]:c[1]?c[1]:"center",offset:u}}},{"../../lib":717}],820:[function(t,e,r){"use strict";var n=t("mapbox-gl"),a=t("../../lib"),i=t("../../plots/get_data").getSubplotCalcData,o=t("../../constants/xmlns_namespaces"),s=t("d3"),l=t("../../components/drawing"),c=t("../../lib/svg_text_utils"),u=t("./mapbox"),h=r.constants=t("./constants");function f(t){return"string"==typeof t&&(-1!==h.styleValuesMapbox.indexOf(t)||0===t.indexOf("mapbox://"))}r.name="mapbox",r.attr="subplot",r.idRoot="mapbox",r.idRegex=r.attrRegex=a.counterRegex("mapbox"),r.attributes={subplot:{valType:"subplotid",dflt:"mapbox",editType:"calc"}},r.layoutAttributes=t("./layout_attributes"),r.supplyLayoutDefaults=t("./layout_defaults"),r.plot=function(t){var e=t._fullLayout,r=t.calcdata,o=e._subplots.mapbox;if(n.version!==h.requiredVersion)throw new Error(h.wrongVersionErrorMsg);var s=function(t,e){var r=t._fullLayout;if(""===t._context.mapboxAccessToken)return"";for(var n=[],i=[],o=!1,s=!1,l=0;l<e.length;l++){var c=r[e[l]],u=c.accesstoken;f(c.style)&&(u?a.pushUnique(n,u):(f(c._input.style)&&(a.error("Uses Mapbox map style, but did not set an access token."),o=!0),s=!0)),u&&a.pushUnique(i,u)}if(s){var p=o?h.noAccessTokenErrorMsg:h.missingStyleErrorMsg;throw a.error(p),new Error(p)}return n.length?(n.length>1&&a.warn(h.multipleTokensErrorMsg),n[0]):(i.length&&a.log(["Listed mapbox access token(s)",i.join(","),"but did not use a Mapbox map style, ignoring token(s)."].join(" ")),"")}(t,o);n.accessToken=s;for(var l=0;l<o.length;l++){var c=o[l],p=i(r,"mapbox",c),d=e[c],g=d._subplot;g||(g=new u(t,c),e[c]._subplot=g),g.viewInitial||(g.viewInitial={center:a.extendFlat({},d.center),zoom:d.zoom,bearing:d.bearing,pitch:d.pitch}),g.plot(p,e,t._promises)}},r.clean=function(t,e,r,n){for(var a=n._subplots.mapbox||[],i=0;i<a.length;i++){var o=a[i];!e[o]&&n[o]._subplot&&n[o]._subplot.destroy()}},r.toSVG=function(t){for(var e=t._fullLayout,r=e._subplots.mapbox,n=e._size,a=0;a<r.length;a++){var i=e[r[a]],u=i.domain,f=i._subplot.toImage("png");e._glimages.append("svg:image").attr({xmlns:o.svg,"xlink:href":f,x:n.l+n.w*u.x[0],y:n.t+n.h*(1-u.y[1]),width:n.w*(u.x[1]-u.x[0]),height:n.h*(u.y[1]-u.y[0]),preserveAspectRatio:"none"});var p=s.select(i._subplot.div);if(!(null===p.select(".mapboxgl-ctrl-logo").node().offsetParent)){var d=e._glimages.append("g");d.attr("transform","translate("+(n.l+n.w*u.x[0]+10)+", "+(n.t+n.h*(1-u.y[0])-31)+")"),d.append("path").attr("d",h.mapboxLogo.path0).style({opacity:.9,fill:"#ffffff","enable-background":"new"}),d.append("path").attr("d",h.mapboxLogo.path1).style("opacity",.35).style("enable-background","new"),d.append("path").attr("d",h.mapboxLogo.path2).style("opacity",.35).style("enable-background","new"),d.append("polygon").attr("points",h.mapboxLogo.polygon).style({opacity:.9,fill:"#ffffff","enable-background":"new"})}var g=p.select(".mapboxgl-ctrl-attrib").text().replace("Improve this map",""),v=e._glimages.append("g"),m=v.append("text");m.text(g).classed("static-attribution",!0).attr({"font-size":12,"font-family":"Arial",color:"rgba(0, 0, 0, 0.75)","text-anchor":"end","data-unformatted":g});var y=l.bBox(m.node()),x=n.w*(u.x[1]-u.x[0]);if(y.width>x/2){var b=g.split("|").join("<br>");m.text(b).attr("data-unformatted",b).call(c.convertToTspans,t),y=l.bBox(m.node())}m.attr("transform","translate(-3, "+(8-y.height)+")"),v.insert("rect",".static-attribution").attr({x:-y.width-6,y:-y.height-3,width:y.width+6,height:y.height+3,fill:"rgba(255, 255, 255, 0.75)"});var _=1;y.width+6>x&&(_=x/(y.width+6));var w=[n.l+n.w*u.x[1],n.t+n.h*(1-u.y[0])];v.attr("transform","translate("+w[0]+","+w[1]+") scale("+_+")")}},r.updateFx=function(t){for(var e=t._fullLayout,r=e._subplots.mapbox,n=0;n<r.length;n++){e[r[n]]._subplot.updateFx(e)}}},{"../../components/drawing":612,"../../constants/xmlns_namespaces":694,"../../lib":717,"../../lib/svg_text_utils":741,"../../plots/get_data":800,"./constants":818,"./layout_attributes":822,"./layout_defaults":823,"./mapbox":824,d3:165,"mapbox-gl":427}],821:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./convert_text_opts"),i=t("./constants");function o(t,e){this.subplot=t,this.uid=t.uid+"-"+e,this.index=e,this.idSource="source-"+this.uid,this.idLayer=i.layoutLayerPrefix+this.uid,this.sourceType=null,this.source=null,this.layerType=null,this.below=null,this.visible=!1}var s=o.prototype;function l(t){if(!t.visible)return!1;var e=t.source;if(Array.isArray(e)&&e.length>0){for(var r=0;r<e.length;r++)if("string"!=typeof e[r]||0===e[r].length)return!1;return!0}return n.isPlainObject(e)||"string"==typeof e&&e.length>0}function c(t){var e={},r={};switch(t.type){case"circle":n.extendFlat(r,{"circle-radius":t.circle.radius,"circle-color":t.color,"circle-opacity":t.opacity});break;case"line":n.extendFlat(r,{"line-width":t.line.width,"line-color":t.color,"line-opacity":t.opacity,"line-dasharray":t.line.dash});break;case"fill":n.extendFlat(r,{"fill-color":t.color,"fill-outline-color":t.fill.outlinecolor,"fill-opacity":t.opacity});break;case"symbol":var i=t.symbol,o=a(i.textposition,i.iconsize);n.extendFlat(e,{"icon-image":i.icon+"-15","icon-size":i.iconsize/10,"text-field":i.text,"text-size":i.textfont.size,"text-anchor":o.anchor,"text-offset":o.offset,"symbol-placement":i.placement}),n.extendFlat(r,{"icon-color":t.color,"text-color":i.textfont.color,"text-opacity":t.opacity});break;case"raster":n.extendFlat(r,{"raster-fade-duration":0,"raster-opacity":t.opacity})}return{layout:e,paint:r}}s.update=function(t){this.visible?this.needsNewImage(t)?this.updateImage(t):this.needsNewSource(t)?(this.removeLayer(),this.updateSource(t),this.updateLayer(t)):this.needsNewLayer(t)?this.updateLayer(t):this.updateStyle(t):(this.updateSource(t),this.updateLayer(t)),this.visible=l(t)},s.needsNewImage=function(t){return this.subplot.map.getSource(this.idSource)&&"image"===this.sourceType&&"image"===t.sourcetype&&(this.source!==t.source||JSON.stringify(this.coordinates)!==JSON.stringify(t.coordinates))},s.needsNewSource=function(t){return this.sourceType!==t.sourcetype||this.source!==t.source||this.layerType!==t.type},s.needsNewLayer=function(t){return this.layerType!==t.type||this.below!==this.subplot.belowLookup["layout-"+this.index]},s.updateImage=function(t){this.subplot.map.getSource(this.idSource).updateImage({url:t.source,coordinates:t.coordinates})},s.updateSource=function(t){var e=this.subplot.map;if(e.getSource(this.idSource)&&e.removeSource(this.idSource),this.sourceType=t.sourcetype,this.source=t.source,l(t)){var r=function(t){var e,r=t.sourcetype,n=t.source,a={type:r};"geojson"===r?e="data":"vector"===r?e="string"==typeof n?"url":"tiles":"raster"===r?(e="tiles",a.tileSize=256):"image"===r&&(e="url",a.coordinates=t.coordinates);a[e]=n,t.sourceattribution&&(a.attribution=t.sourceattribution);return a}(t);e.addSource(this.idSource,r)}},s.updateLayer=function(t){var e,r=this.subplot,n=c(t),a=this.subplot.belowLookup["layout-"+this.index];if("traces"===a)for(var o=r.getMapLayers(),s=0;s<o.length;s++){var u=o[s].id;if("string"==typeof u&&0===u.indexOf(i.traceLayerPrefix)){e=u;break}}else e=a;this.removeLayer(),l(t)&&r.addLayer({id:this.idLayer,source:this.idSource,"source-layer":t.sourcelayer||"",type:t.type,minzoom:t.minzoom,maxzoom:t.maxzoom,layout:n.layout,paint:n.paint},e),this.layerType=t.type,this.below=a},s.updateStyle=function(t){if(l(t)){var e=c(t);this.subplot.setOptions(this.idLayer,"setLayoutProperty",e.layout),this.subplot.setOptions(this.idLayer,"setPaintProperty",e.paint)}},s.removeLayer=function(){var t=this.subplot.map;t.getLayer(this.idLayer)&&t.removeLayer(this.idLayer)},s.dispose=function(){var t=this.subplot.map;t.getLayer(this.idLayer)&&t.removeLayer(this.idLayer),t.getSource(this.idSource)&&t.removeSource(this.idSource)},e.exports=function(t,e,r){var n=new o(t,e);return n.update(r),n}},{"../../lib":717,"./constants":818,"./convert_text_opts":819}],822:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/color").defaultLine,i=t("../domain").attributes,o=t("../font_attributes"),s=t("../../traces/scatter/attributes").textposition,l=t("../../plot_api/edit_types").overrideAll,c=t("../../plot_api/plot_template").templatedArray,u=t("./constants"),h=o({});h.family.dflt="Open Sans Regular, Arial Unicode MS Regular",(e.exports=l({_arrayAttrRegexps:[n.counterRegex("mapbox",".layers",!0)],domain:i({name:"mapbox"}),accesstoken:{valType:"string",noBlank:!0,strict:!0},style:{valType:"any",values:u.styleValuesMapbox.concat(u.styleValuesNonMapbox),dflt:u.styleValueDflt},center:{lon:{valType:"number",dflt:0},lat:{valType:"number",dflt:0}},zoom:{valType:"number",dflt:1},bearing:{valType:"number",dflt:0},pitch:{valType:"number",dflt:0},layers:c("layer",{visible:{valType:"boolean",dflt:!0},sourcetype:{valType:"enumerated",values:["geojson","vector","raster","image"],dflt:"geojson"},source:{valType:"any"},sourcelayer:{valType:"string",dflt:""},sourceattribution:{valType:"string"},type:{valType:"enumerated",values:["circle","line","fill","symbol","raster"],dflt:"circle"},coordinates:{valType:"any"},below:{valType:"string"},color:{valType:"color",dflt:a},opacity:{valType:"number",min:0,max:1,dflt:1},minzoom:{valType:"number",min:0,max:24,dflt:0},maxzoom:{valType:"number",min:0,max:24,dflt:24},circle:{radius:{valType:"number",dflt:15}},line:{width:{valType:"number",dflt:2},dash:{valType:"data_array"}},fill:{outlinecolor:{valType:"color",dflt:a}},symbol:{icon:{valType:"string",dflt:"marker"},iconsize:{valType:"number",dflt:10},text:{valType:"string",dflt:""},placement:{valType:"enumerated",values:["point","line","line-center"],dflt:"point"},textfont:h,textposition:n.extendFlat({},s,{arrayOk:!1})}})},"plot","from-root")).uirevision={valType:"any",editType:"none"}},{"../../components/color":591,"../../lib":717,"../../plot_api/edit_types":748,"../../plot_api/plot_template":755,"../../traces/scatter/attributes":1120,"../domain":790,"../font_attributes":791,"./constants":818}],823:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../subplot_defaults"),i=t("../array_container_defaults"),o=t("./layout_attributes");function s(t,e,r,n){r("accesstoken",n.accessToken),r("style"),r("center.lon"),r("center.lat"),r("zoom"),r("bearing"),r("pitch"),i(t,e,{name:"layers",handleItemDefaults:l}),e._input=t}function l(t,e){function r(r,a){return n.coerce(t,e,o.layers,r,a)}if(r("visible")){var a,i=r("sourcetype"),s="raster"===i||"image"===i;r("source"),r("sourceattribution"),"vector"===i&&r("sourcelayer"),"image"===i&&r("coordinates"),s&&(a="raster");var l=r("type",a);s&&"raster"!==l&&(l=e.type="raster",n.log("Source types *raster* and *image* must drawn *raster* layer type.")),r("below"),r("color"),r("opacity"),r("minzoom"),r("maxzoom"),"circle"===l&&r("circle.radius"),"line"===l&&(r("line.width"),r("line.dash")),"fill"===l&&r("fill.outlinecolor"),"symbol"===l&&(r("symbol.icon"),r("symbol.iconsize"),r("symbol.text"),n.coerceFont(r,"symbol.textfont"),r("symbol.textposition"),r("symbol.placement"))}}e.exports=function(t,e,r){a(t,e,r,{type:"mapbox",attributes:o,handleDefaults:s,partition:"y",accessToken:e._mapboxAccessToken})}},{"../../lib":717,"../array_container_defaults":761,"../subplot_defaults":840,"./layout_attributes":822}],824:[function(t,e,r){"use strict";var n=t("mapbox-gl"),a=t("../../components/fx"),i=t("../../lib"),o=t("../../lib/geo_location_utils"),s=t("../../registry"),l=t("../cartesian/axes"),c=t("../../components/dragelement"),u=t("../cartesian/select").prepSelect,h=t("../cartesian/select").selectOnClick,f=t("./constants"),p=t("./layers");function d(t,e){this.id=e,this.gd=t;var r=t._fullLayout,n=t._context;this.container=r._glcontainer.node(),this.isStatic=n.staticPlot,this.uid=r._uid+"-"+this.id,this.div=null,this.xaxis=null,this.yaxis=null,this.createFramework(r),this.map=null,this.accessToken=null,this.styleObj=null,this.traceHash={},this.layerList=[],this.belowLookup={},this.dragging=!1,this.wheeling=!1}var g=d.prototype;g.plot=function(t,e,r){var n,a=this,i=e[a.id];a.map&&i.accesstoken!==a.accessToken&&(a.map.remove(),a.map=null,a.styleObj=null,a.traceHash=[],a.layerList={}),n=a.map?new Promise(function(r,n){a.updateMap(t,e,r,n)}):new Promise(function(r,n){a.createMap(t,e,r,n)}),r.push(n)},g.createMap=function(t,e,r,a){var i=this,s=e[i.id],l=i.styleObj=m(s.style);i.accessToken=s.accesstoken;var c=i.map=new n.Map({container:i.div,style:l.style,center:x(s.center),zoom:s.zoom,bearing:s.bearing,pitch:s.pitch,interactive:!i.isStatic,preserveDrawingBuffer:i.isStatic,doubleClickZoom:!1,boxZoom:!1,attributionControl:!1}).addControl(new n.AttributionControl({compact:!0}));c._canvas.style.left="0px",c._canvas.style.top="0px",i.rejectOnError(a),i.isStatic||i.initFx(t,e);var u=[];u.push(new Promise(function(t){c.once("load",t)})),u=u.concat(o.fetchTraceGeoData(t)),Promise.all(u).then(function(){i.fillBelowLookup(t,e),i.updateData(t),i.updateLayout(e),i.resolveOnRender(r)}).catch(a)},g.updateMap=function(t,e,r,n){var a=this,i=a.map,s=e[this.id];a.rejectOnError(n);var l=[],c=m(s.style);a.styleObj.id!==c.id&&(a.styleObj=c,i.setStyle(c.style),a.traceHash={},l.push(new Promise(function(t){i.once("styledata",t)}))),l=l.concat(o.fetchTraceGeoData(t)),Promise.all(l).then(function(){a.fillBelowLookup(t,e),a.updateData(t),a.updateLayout(e),a.resolveOnRender(r)}).catch(n)},g.fillBelowLookup=function(t,e){var r,n,a=e[this.id].layers,i=this.belowLookup={},o=!1;for(r=0;r<t.length;r++){var s=t[r][0].trace,l=s._module;"string"==typeof s.below?n=s.below:l.getBelow&&(n=l.getBelow(s,this)),""===n&&(o=!0),i["trace-"+s.uid]=n||""}for(r=0;r<a.length;r++){var c=a[r];n="string"==typeof c.below?c.below:o?"traces":"",i["layout-"+r]=n}var u,h,f={};for(u in i)f[n=i[u]]?f[n].push(u):f[n]=[u];for(n in f){var p=f[n];if(p.length>1)for(r=0;r<p.length;r++)0===(u=p[r]).indexOf("trace-")?(h=u.split("trace-")[1],this.traceHash[h]&&(this.traceHash[h].below=null)):0===u.indexOf("layout-")&&(h=u.split("layout-")[1],this.layerList[h]&&(this.layerList[h].below=null))}};var v={choroplethmapbox:0,densitymapbox:1,scattermapbox:2};function m(t){var e={};return i.isPlainObject(t)?(e.id=t.id,e.style=t):"string"==typeof t?(e.id=t,-1!==f.styleValuesMapbox.indexOf(t)?e.style=y(t):f.stylesNonMapbox[t]?e.style=f.stylesNonMapbox[t]:e.style=t):(e.id=f.styleValueDflt,e.style=y(f.styleValueDflt)),e.transition={duration:0,delay:0},e}function y(t){return f.styleUrlPrefix+t+"-"+f.styleUrlSuffix}function x(t){return[t.lon,t.lat]}g.updateData=function(t){var e,r,n,a,i=this.traceHash,o=t.slice().sort(function(t,e){return v[t[0].trace.type]-v[e[0].trace.type]});for(n=0;n<o.length;n++){var s=o[n],l=!1;(e=i[(r=s[0].trace).uid])&&(e.type===r.type?(e.update(s),l=!0):e.dispose()),!l&&r._module&&(i[r.uid]=r._module.plot(this,s))}var c=Object.keys(i);t:for(n=0;n<c.length;n++){var u=c[n];for(a=0;a<t.length;a++)if(u===(r=t[a][0].trace).uid)continue t;(e=i[u]).dispose(),delete i[u]}},g.updateLayout=function(t){var e=this.map,r=t[this.id];this.dragging||this.wheeling||(e.setCenter(x(r.center)),e.setZoom(r.zoom),e.setBearing(r.bearing),e.setPitch(r.pitch)),this.updateLayers(t),this.updateFramework(t),this.updateFx(t),this.map.resize(),this.gd._context._scrollZoom.mapbox?e.scrollZoom.enable():e.scrollZoom.disable()},g.resolveOnRender=function(t){var e=this.map;e.on("render",function r(){e.loaded()&&(e.off("render",r),setTimeout(t,10))})},g.rejectOnError=function(t){var e=this.map;function r(){t(new Error(f.mapOnErrorMsg))}e.once("error",r),e.once("style.error",r),e.once("source.error",r),e.once("tile.error",r),e.once("layer.error",r)},g.createFramework=function(t){var e=this,r=e.div=document.createElement("div");r.id=e.uid,r.style.position="absolute",e.container.appendChild(r),e.xaxis={_id:"x",c2p:function(t){return e.project(t).x}},e.yaxis={_id:"y",c2p:function(t){return e.project(t).y}},e.updateFramework(t),e.mockAxis={type:"linear",showexponent:"all",exponentformat:"B"},l.setConvert(e.mockAxis,t)},g.initFx=function(t,e){var r=this,n=r.gd,i=r.map;function o(){a.loneUnhover(e._hoverlayer)}function l(){var t=r.getView();n.emit("plotly_relayouting",r.getViewEditsWithDerived(t))}i.on("moveend",function(t){if(r.map){var e=n._fullLayout;if(t.originalEvent||r.wheeling){var a=e[r.id];s.call("_storeDirectGUIEdit",n.layout,e._preGUI,r.getViewEdits(a));var i=r.getView();a._input.center=a.center=i.center,a._input.zoom=a.zoom=i.zoom,a._input.bearing=a.bearing=i.bearing,a._input.pitch=a.pitch=i.pitch,n.emit("plotly_relayout",r.getViewEditsWithDerived(i))}t.originalEvent&&"mouseup"===t.originalEvent.type?r.dragging=!1:r.wheeling&&(r.wheeling=!1),e._rehover&&e._rehover()}}),i.on("wheel",function(){r.wheeling=!0}),i.on("mousemove",function(t){var e=r.div.getBoundingClientRect();t.clientX=t.point.x+e.left,t.clientY=t.point.y+e.top,t.target.getBoundingClientRect=function(){return e},r.xaxis.p2c=function(){return t.lngLat.lng},r.yaxis.p2c=function(){return t.lngLat.lat},n._fullLayout._rehover=function(){n._fullLayout._hoversubplot===r.id&&n._fullLayout[r.id]&&a.hover(n,t,r.id)},a.hover(n,t,r.id),n._fullLayout._hoversubplot=r.id}),i.on("dragstart",function(){r.dragging=!0,o()}),i.on("zoomstart",o),i.on("mouseout",function(){n._fullLayout._hoversubplot=null}),i.on("drag",l),i.on("zoom",l),i.on("dblclick",function(){var t=n._fullLayout[r.id];s.call("_storeDirectGUIEdit",n.layout,n._fullLayout._preGUI,r.getViewEdits(t));var e=r.viewInitial;i.setCenter(x(e.center)),i.setZoom(e.zoom),i.setBearing(e.bearing),i.setPitch(e.pitch);var a=r.getView();t._input.center=t.center=a.center,t._input.zoom=t.zoom=a.zoom,t._input.bearing=t.bearing=a.bearing,t._input.pitch=t.pitch=a.pitch,n.emit("plotly_doubleclick",null),n.emit("plotly_relayout",r.getViewEditsWithDerived(a))}),r.clearSelect=function(){n._fullLayout._zoomlayer.selectAll(".select-outline").remove()},r.onClickInPanFn=function(t){return function(e){var i=n._fullLayout.clickmode;i.indexOf("select")>-1&&h(e.originalEvent,n,[r.xaxis],[r.yaxis],r.id,t),i.indexOf("event")>-1&&a.click(n,e.originalEvent)}}},g.updateFx=function(t){var e=this,r=e.map,n=e.gd;if(!e.isStatic){var a,o=t.dragmode;a="select"===o?function(t,r){(t.range={})[e.id]=[l([r.xmin,r.ymin]),l([r.xmax,r.ymax])]}:function(t,r,n){(t.lassoPoints={})[e.id]=n.filtered.map(l)};var s=e.dragOptions;e.dragOptions=i.extendDeep(s||{},{element:e.div,gd:n,plotinfo:{id:e.id,xaxis:e.xaxis,yaxis:e.yaxis,fillRangeItems:a},xaxes:[e.xaxis],yaxes:[e.yaxis],subplot:e.id}),r.off("click",e.onClickInPanHandler),"select"===o||"lasso"===o?(r.dragPan.disable(),r.on("zoomstart",e.clearSelect),e.dragOptions.prepFn=function(t,r,n){u(t,r,n,e.dragOptions,o)},c.init(e.dragOptions)):(r.dragPan.enable(),r.off("zoomstart",e.clearSelect),e.div.onmousedown=null,e.onClickInPanHandler=e.onClickInPanFn(e.dragOptions),r.on("click",e.onClickInPanHandler))}function l(t){var r=e.map.unproject(t);return[r.lng,r.lat]}},g.updateFramework=function(t){var e=t[this.id].domain,r=t._size,n=this.div.style;n.width=r.w*(e.x[1]-e.x[0])+"px",n.height=r.h*(e.y[1]-e.y[0])+"px",n.left=r.l+e.x[0]*r.w+"px",n.top=r.t+(1-e.y[1])*r.h+"px",this.xaxis._offset=r.l+e.x[0]*r.w,this.xaxis._length=r.w*(e.x[1]-e.x[0]),this.yaxis._offset=r.t+(1-e.y[1])*r.h,this.yaxis._length=r.h*(e.y[1]-e.y[0])},g.updateLayers=function(t){var e,r=t[this.id].layers,n=this.layerList;if(r.length!==n.length){for(e=0;e<n.length;e++)n[e].dispose();for(n=this.layerList=[],e=0;e<r.length;e++)n.push(p(this,e,r[e]))}else for(e=0;e<r.length;e++)n[e].update(r[e])},g.destroy=function(){this.map&&(this.map.remove(),this.map=null,this.container.removeChild(this.div))},g.toImage=function(){return this.map.stop(),this.map.getCanvas().toDataURL()},g.setOptions=function(t,e,r){for(var n in r)this.map[e](t,n,r[n])},g.getMapLayers=function(){return this.map.getStyle().layers},g.addLayer=function(t,e){var r=this.map;if("string"==typeof e){if(""===e)return void r.addLayer(t,e);for(var n=this.getMapLayers(),a=0;a<n.length;a++)if(e===n[a].id)return void r.addLayer(t,e);i.warn(["Trying to add layer with *below* value",e,"referencing a layer that does not exist","or that does not yet exist."].join(" "))}r.addLayer(t)},g.project=function(t){return this.map.project(new n.LngLat(t[0],t[1]))},g.getView=function(){var t=this.map,e=t.getCenter(),r={lon:e.lng,lat:e.lat},n=t.getCanvas(),a=n.width,i=n.height;return{center:r,zoom:t.getZoom(),bearing:t.getBearing(),pitch:t.getPitch(),_derived:{coordinates:[t.unproject([0,0]).toArray(),t.unproject([a,0]).toArray(),t.unproject([a,i]).toArray(),t.unproject([0,i]).toArray()]}}},g.getViewEdits=function(t){for(var e=this.id,r=["center","zoom","bearing","pitch"],n={},a=0;a<r.length;a++){var i=r[a];n[e+"."+i]=t[i]}return n},g.getViewEditsWithDerived=function(t){var e=this.id,r=this.getViewEdits(t);return r[e+"._derived"]=t._derived,r},e.exports=d},{"../../components/dragelement":609,"../../components/fx":630,"../../lib":717,"../../lib/geo_location_utils":711,"../../registry":846,"../cartesian/axes":765,"../cartesian/select":782,"./constants":818,"./layers":821,"mapbox-gl":427}],825:[function(t,e,r){"use strict";e.exports=function(t){var e=t.editType;return{t:{valType:"number",dflt:0,editType:e},r:{valType:"number",dflt:0,editType:e},b:{valType:"number",dflt:0,editType:e},l:{valType:"number",dflt:0,editType:e},editType:e}}},{}],826:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../registry"),o=t("../plot_api/plot_schema"),s=t("../plot_api/plot_template"),l=t("../lib"),c=t("../components/color"),u=t("../constants/numerical").BADNUM,h=t("./cartesian/axis_ids"),f=t("./animation_attributes"),p=t("./frame_attributes"),d=t("../plots/get_data").getModuleCalcData,g=l.relinkPrivateKeys,v=l._,m=e.exports={};l.extendFlat(m,i),m.attributes=t("./attributes"),m.attributes.type.values=m.allTypes,m.fontAttrs=t("./font_attributes"),m.layoutAttributes=t("./layout_attributes"),m.fontWeight="normal";var y=m.transformsRegistry,x=t("./command");m.executeAPICommand=x.executeAPICommand,m.computeAPICommandBindings=x.computeAPICommandBindings,m.manageCommandObserver=x.manageCommandObserver,m.hasSimpleAPICommandBindings=x.hasSimpleAPICommandBindings,m.redrawText=function(t){var e=(t=l.getGraphDiv(t))._fullLayout||{};if(!(!(e._has&&e._has("polar"))&&t.data&&t.data[0]&&t.data[0].r))return new Promise(function(e){setTimeout(function(){i.getComponentMethod("annotations","draw")(t),i.getComponentMethod("legend","draw")(t),i.getComponentMethod("colorbar","draw")(t),e(m.previousPromises(t))},300)})},m.resize=function(t){var e;t=l.getGraphDiv(t);var r=new Promise(function(r,n){t&&!l.isHidden(t)||n(new Error("Resize must be passed a displayed plot div element.")),t._redrawTimer&&clearTimeout(t._redrawTimer),t._resolveResize&&(e=t._resolveResize),t._resolveResize=r,t._redrawTimer=setTimeout(function(){if(!t.layout||t.layout.width&&t.layout.height||l.isHidden(t))r(t);else{delete t.layout.width,delete t.layout.height;var e=t.changed;t.autoplay=!0,i.call("relayout",t,{autosize:!0}).then(function(){t.changed=e,t._resolveResize===r&&(delete t._resolveResize,r(t))})}},100)});return e&&e(r),r},m.previousPromises=function(t){if((t._promises||[]).length)return Promise.all(t._promises).then(function(){t._promises=[]})},m.addLinks=function(t){if(t._context.showLink||t._context.showSources){var e=t._fullLayout,r=l.ensureSingle(e._paper,"text","js-plot-link-container",function(t){t.style({"font-family":'"Open Sans", Arial, sans-serif',"font-size":"12px",fill:c.defaultLine,"pointer-events":"all"}).each(function(){var t=n.select(this);t.append("tspan").classed("js-link-to-tool",!0),t.append("tspan").classed("js-link-spacer",!0),t.append("tspan").classed("js-sourcelinks",!0)})}),a=r.node(),i={y:e._paper.attr("height")-9};document.body.contains(a)&&a.getComputedTextLength()>=e.width-20?(i["text-anchor"]="start",i.x=5):(i["text-anchor"]="end",i.x=e._paper.attr("width")-7),r.attr(i);var o=r.select(".js-link-to-tool"),s=r.select(".js-link-spacer"),u=r.select(".js-sourcelinks");t._context.showSources&&t._context.showSources(t),t._context.showLink&&function(t,e){e.text("");var r=e.append("a").attr({"xlink:xlink:href":"#",class:"link--impt link--embedview","font-weight":"bold"}).text(t._context.linkText+" "+String.fromCharCode(187));if(t._context.sendData)r.on("click",function(){m.sendDataToCloud(t)});else{var n=window.location.pathname.split("/"),a=window.location.search;r.attr({"xlink:xlink:show":"new","xlink:xlink:href":"/"+n[2].split(".")[0]+"/"+n[1]+a})}}(t,o),s.text(o.text()&&u.text()?" - ":"")}},m.sendDataToCloud=function(t){var e=(window.PLOTLYENV||{}).BASE_URL||t._context.plotlyServerURL;if(e){t.emit("plotly_beforeexport");var r=n.select(t).append("div").attr("id","hiddenform").style("display","none"),a=r.append("form").attr({action:e+"/external",method:"post",target:"_blank"});return a.append("input").attr({type:"text",name:"data"}).node().value=m.graphJson(t,!1,"keepdata"),a.node().submit(),r.remove(),t.emit("plotly_afterexport"),!1}};var b=["days","shortDays","months","shortMonths","periods","dateTime","date","time","decimal","thousands","grouping","currency"],_=["year","month","dayMonth","dayMonthYear"];function w(t,e){var r=t._context.locale,n=!1,a={};function o(t){for(var r=!0,i=0;i<e.length;i++){var o=e[i];a[o]||(t[o]?a[o]=t[o]:r=!1)}r&&(n=!0)}for(var s=0;s<2;s++){for(var l=t._context.locales,c=0;c<2;c++){var u=(l[r]||{}).format;if(u&&(o(u),n))break;l=i.localeRegistry}var h=r.split("-")[0];if(n||h===r)break;r=h}return n||o(i.localeRegistry.en.format),a}function k(t,e){var r={_fullLayout:e},n="x"===t._id.charAt(0),a=t._mainAxis._anchorAxis,i="",o="",s="";if(a&&(s=a._mainAxis._id,i=n?t._id+s:s+t._id),!i||!e._plots[i]){i="";for(var l=t._counterAxes,c=0;c<l.length;c++){var u=l[c],f=n?t._id+u:u+t._id;o||(o=f);var p=h.getFromId(r,u);if(s&&p.overlaying===s){i=f;break}}}return i||o}function T(t){var e=t.transforms;if(Array.isArray(e)&&e.length)for(var r=0;r<e.length;r++){var n=e[r],a=n._module||y[n.type];if(a&&a.makesData)return!0}return!1}function M(t,e,r,n){for(var a=t.transforms,i=[t],o=0;o<a.length;o++){var s=a[o],l=y[s.type];l&&l.transform&&(i=l.transform(i,{transform:s,fullTrace:t,fullData:e,layout:r,fullLayout:n,transformIndex:o}))}return i}function A(t){var e=t.margin;if(!t._size){var r=t._size={l:Math.round(e.l),r:Math.round(e.r),t:Math.round(e.t),b:Math.round(e.b),p:Math.round(e.pad)};r.w=Math.round(t.width)-r.l-r.r,r.h=Math.round(t.height)-r.t-r.b}t._pushmargin||(t._pushmargin={}),t._pushmarginIds||(t._pushmarginIds={})}m.supplyDefaults=function(t,e){var r=e&&e.skipUpdateCalc,a=t._fullLayout||{};if(a._skipDefaults)delete a._skipDefaults;else{var o,s=t._fullLayout={},c=t.layout||{},u=t._fullData||[],h=t._fullData=[],f=t.data||[],p=t.calcdata||[],d=t._context||{};t._transitionData||m.createTransitionData(t),s._dfltTitle={plot:v(t,"Click to enter Plot title"),x:v(t,"Click to enter X axis title"),y:v(t,"Click to enter Y axis title"),colorbar:v(t,"Click to enter Colorscale title"),annotation:v(t,"new text")},s._traceWord=v(t,"trace");var y=w(t,b);if(s._mapboxAccessToken=d.mapboxAccessToken,a._initialAutoSizeIsDone){var x=a.width,k=a.height;m.supplyLayoutGlobalDefaults(c,s,y),c.width||(s.width=x),c.height||(s.height=k),m.sanitizeMargins(s)}else{m.supplyLayoutGlobalDefaults(c,s,y);var T=!c.width||!c.height,M=s.autosize,S=d.autosizable;T&&(M||S)?m.plotAutoSize(t,c,s):T&&m.sanitizeMargins(s),!M&&T&&(c.width=s.width,c.height=s.height)}s._d3locale=function(t,e){return t.decimal=e.charAt(0),t.thousands=e.charAt(1),n.locale(t)}(y,s.separators),s._extraFormat=w(t,_),s._initialAutoSizeIsDone=!0,s._dataLength=f.length,s._modules=[],s._visibleModules=[],s._basePlotModules=[];var E=s._subplots=function(){var t,e,r=i.collectableSubplotTypes,n={};if(!r){r=[];var a=i.subplotsRegistry;for(var o in a){var s=a[o],c=s.attr;if(c&&(r.push(o),Array.isArray(c)))for(e=0;e<c.length;e++)l.pushUnique(r,c[e])}}for(t=0;t<r.length;t++)n[r[t]]=[];return n}(),L=s._splomAxes={x:{},y:{}},C=s._splomSubplots={};s._splomGridDflt={},s._scatterStackOpts={},s._firstScatter={},s._alignmentOpts={},s._colorAxes={},s._requestRangeslider={},s._traceUids=function(t,e){var r,n,a=e.length,i=[];for(r=0;r<t.length;r++){var o=t[r]._fullInput;o!==n&&i.push(o),n=o}var s=i.length,c=new Array(a),u={};function h(t,e){c[e]=t,u[t]=1}function f(t,e){if(t&&"string"==typeof t&&!u[t])return h(t,e),!0}for(r=0;r<a;r++){var p=e[r].uid;"number"==typeof p&&(p=String(p)),f(p,r)||(r<s&&f(i[r].uid,r)||h(l.randstr(u),r))}return c}(u,f),s._globalTransforms=(t._context||{}).globalTransforms,m.supplyDataDefaults(f,h,c,s);var P=Object.keys(L.x),O=Object.keys(L.y);if(P.length>1&&O.length>1){for(i.getComponentMethod("grid","sizeDefaults")(c,s),o=0;o<P.length;o++)l.pushUnique(E.xaxis,P[o]);for(o=0;o<O.length;o++)l.pushUnique(E.yaxis,O[o]);for(var z in C)l.pushUnique(E.cartesian,z)}if(s._has=m._hasPlotType.bind(s),u.length===h.length)for(o=0;o<h.length;o++)g(h[o],u[o]);m.supplyLayoutModuleDefaults(c,s,h,t._transitionData);var I=s._visibleModules,D=[];for(o=0;o<I.length;o++){var R=I[o].crossTraceDefaults;R&&l.pushUnique(D,R)}for(o=0;o<D.length;o++)D[o](h,s);s._hasOnlyLargeSploms=1===s._basePlotModules.length&&"splom"===s._basePlotModules[0].name&&P.length>15&&O.length>15&&0===s.shapes.length&&0===s.images.length,s._hasCartesian=s._has("cartesian"),s._hasGeo=s._has("geo"),s._hasGL3D=s._has("gl3d"),s._hasGL2D=s._has("gl2d"),s._hasTernary=s._has("ternary"),s._hasPie=s._has("pie"),m.linkSubplots(h,s,u,a),m.cleanPlot(h,s,u,a),a._zoomlayer&&!t._dragging&&a._zoomlayer.selectAll(".select-outline").remove(),function(t,e){var r,n=[];e.meta&&(r=e._meta={meta:e.meta,layout:{meta:e.meta}});for(var a=0;a<t.length;a++){var i=t[a];i.meta?n[i.index]=i._meta={meta:i.meta}:e.meta&&(i._meta={meta:e.meta}),e.meta&&(i._meta.layout={meta:e.meta})}n.length&&(r||(r=e._meta={}),r.data=n)}(h,s),g(s,a),i.getComponentMethod("colorscale","crossTraceDefaults")(h,s),s._preGUI||(s._preGUI={}),s._tracePreGUI||(s._tracePreGUI={});var F,B=s._tracePreGUI,N={};for(F in B)N[F]="old";for(o=0;o<h.length;o++)N[F=h[o]._fullInput.uid]||(B[F]={}),N[F]="new";for(F in N)"old"===N[F]&&delete B[F];A(s),i.getComponentMethod("rangeslider","makeData")(s),r||p.length!==h.length||m.supplyDefaultsUpdateCalc(p,h)}},m.supplyDefaultsUpdateCalc=function(t,e){for(var r=0;r<e.length;r++){var n=e[r],a=(t[r]||[])[0];if(a&&a.trace){var i=a.trace;if(i._hasCalcTransform){var o,s,c,u=i._arrayAttrs;for(o=0;o<u.length;o++)s=u[o],c=l.nestedProperty(i,s).get().slice(),l.nestedProperty(n,s).set(c)}a.trace=n}}},m.createTransitionData=function(t){t._transitionData||(t._transitionData={}),t._transitionData._frames||(t._transitionData._frames=[]),t._transitionData._frameHash||(t._transitionData._frameHash={}),t._transitionData._counter||(t._transitionData._counter=0),t._transitionData._interruptCallbacks||(t._transitionData._interruptCallbacks=[])},m._hasPlotType=function(t){var e,r=this._basePlotModules||[];for(e=0;e<r.length;e++)if(r[e].name===t)return!0;var n=this._modules||[];for(e=0;e<n.length;e++){var a=n[e].name;if(a===t)return!0;var o=i.modules[a];if(o&&o.categories[t])return!0}return!1},m.cleanPlot=function(t,e,r,n){var a,i,o=n._basePlotModules||[];for(a=0;a<o.length;a++){var s=o[a];s.clean&&s.clean(t,e,r,n)}var l=n._has&&n._has("gl"),c=e._has&&e._has("gl");l&&!c&&void 0!==n._glcontainer&&(n._glcontainer.selectAll(".gl-canvas").remove(),n._glcontainer.selectAll(".no-webgl").remove(),n._glcanvas=null);var u=!!n._infolayer;t:for(a=0;a<r.length;a++){var h=r[a].uid;for(i=0;i<t.length;i++){if(h===t[i].uid)continue t}u&&n._infolayer.select(".cb"+h).remove()}},m.linkSubplots=function(t,e,r,n){var a,o,s=n._plots||{},c=e._plots={},u=e._subplots,f={_fullData:t,_fullLayout:e},p=u.cartesian.concat(u.gl2d||[]);for(a=0;a<p.length;a++){var d,g=p[a],v=s[g],m=h.getFromId(f,g,"x"),y=h.getFromId(f,g,"y");for(v?d=c[g]=v:(d=c[g]={}).id=g,m._counterAxes.push(y._id),y._counterAxes.push(m._id),m._subplotsWith.push(g),y._subplotsWith.push(g),d.xaxis=m,d.yaxis=y,d._hasClipOnAxisFalse=!1,o=0;o<t.length;o++){var x=t[o];if(x.xaxis===d.xaxis._id&&x.yaxis===d.yaxis._id&&!1===x.cliponaxis){d._hasClipOnAxisFalse=!0;break}}}var b,_=h.list(f,null,!0);for(a=0;a<_.length;a++){var w=null;(b=_[a]).overlaying&&(w=h.getFromId(f,b.overlaying))&&w.overlaying&&(b.overlaying=!1,w=null),b._mainAxis=w||b,w&&(b.domain=w.domain.slice()),b._anchorAxis="free"===b.anchor?null:h.getFromId(f,b.anchor)}for(a=0;a<_.length;a++)if((b=_[a])._counterAxes.sort(h.idSort),b._subplotsWith.sort(l.subplotSort),b._mainSubplot=k(b,e),b._counterAxes.length&&(b.spikemode&&-1!==b.spikemode.indexOf("across")||b.automargin&&b.mirror&&"free"!==b.anchor||i.getComponentMethod("rangeslider","isVisible")(b))){var T=1,M=0;for(o=0;o<b._counterAxes.length;o++){var A=h.getFromId(f,b._counterAxes[o]);T=Math.min(T,A.domain[0]),M=Math.max(M,A.domain[1])}T<M&&(b._counterDomainMin=T,b._counterDomainMax=M)}},m.clearExpandedTraceDefaultColors=function(t){var e,r,n;for(r=[],(e=t._module._colorAttrs)||(t._module._colorAttrs=e=[],o.crawl(t._module.attributes,function(t,n,a,i){r[i]=n,r.length=i+1,"color"===t.valType&&void 0===t.dflt&&e.push(r.join("."))})),n=0;n<e.length;n++){l.nestedProperty(t,"_input."+e[n]).get()||l.nestedProperty(t,e[n]).set(null)}},m.supplyDataDefaults=function(t,e,r,n){var a,o,c,u=n._modules,h=n._visibleModules,f=n._basePlotModules,p=0,d=0;function v(t){e.push(t);var r=t._module;r&&(l.pushUnique(u,r),!0===t.visible&&l.pushUnique(h,r),l.pushUnique(f,t._module.basePlotModule),p++,!1!==t._input.visible&&d++)}n._transformModules=[];var y={},x=[],b=(r.template||{}).data||{},_=s.traceTemplater(b);for(a=0;a<t.length;a++){if(c=t[a],(o=_.newTrace(c)).uid=n._traceUids[a],m.supplyTraceDefaults(c,o,d,n,a),o.index=a,o._input=c,o._expandedIndex=p,o.transforms&&o.transforms.length)for(var w=!1!==c.visible&&!1===o.visible,k=M(o,e,r,n),T=0;T<k.length;T++){var A=k[T],S={_template:o._template,type:o.type,uid:o.uid+T};w&&!1===A.visible&&delete A.visible,m.supplyTraceDefaults(A,S,p,n,a),g(S,A),S.index=a,S._input=c,S._fullInput=o,S._expandedIndex=p,S._expandedInput=A,v(S)}else o._fullInput=o,o._expandedInput=o,v(o);i.traceIs(o,"carpetAxis")&&(y[o.carpet]=o),i.traceIs(o,"carpetDependent")&&x.push(a)}for(a=0;a<x.length;a++)if((o=e[x[a]]).visible){var E=y[o.carpet];o._carpet=E,E&&E.visible?(o.xaxis=E.xaxis,o.yaxis=E.yaxis):o.visible=!1}},m.supplyAnimationDefaults=function(t){var e;t=t||{};var r={};function n(e,n){return l.coerce(t||{},r,f,e,n)}if(n("mode"),n("direction"),n("fromcurrent"),Array.isArray(t.frame))for(r.frame=[],e=0;e<t.frame.length;e++)r.frame[e]=m.supplyAnimationFrameDefaults(t.frame[e]||{});else r.frame=m.supplyAnimationFrameDefaults(t.frame||{});if(Array.isArray(t.transition))for(r.transition=[],e=0;e<t.transition.length;e++)r.transition[e]=m.supplyAnimationTransitionDefaults(t.transition[e]||{});else r.transition=m.supplyAnimationTransitionDefaults(t.transition||{});return r},m.supplyAnimationFrameDefaults=function(t){var e={};function r(r,n){return l.coerce(t||{},e,f.frame,r,n)}return r("duration"),r("redraw"),e},m.supplyAnimationTransitionDefaults=function(t){var e={};function r(r,n){return l.coerce(t||{},e,f.transition,r,n)}return r("duration"),r("easing"),e},m.supplyFrameDefaults=function(t){var e={};function r(r,n){return l.coerce(t,e,p,r,n)}return r("group"),r("name"),r("traces"),r("baseframe"),r("data"),r("layout"),e},m.supplyTraceDefaults=function(t,e,r,n,a){var o,s=n.colorway||c.defaults,u=s[r%s.length];function h(r,n){return l.coerce(t,e,m.attributes,r,n)}var f=h("visible");h("type"),h("name",n._traceWord+" "+a),h("uirevision",n.uirevision);var p=m.getModule(e);if(e._module=p,p){var d=p.basePlotModule,g=d.attr,v=d.attributes;if(g&&v){var y=n._subplots,x="";if(f||"gl2d"!==d.name){if(Array.isArray(g))for(o=0;o<g.length;o++){var b=g[o],_=l.coerce(t,e,v,b);y[b]&&l.pushUnique(y[b],_),x+=_}else x=l.coerce(t,e,v,g);y[d.name]&&l.pushUnique(y[d.name],x)}}}return f&&(h("customdata"),h("ids"),h("meta"),i.traceIs(e,"showLegend")?(l.coerce(t,e,p.attributes.showlegend?p.attributes:m.attributes,"showlegend"),h("legendgroup"),e._dfltShowLegend=!0):e._dfltShowLegend=!1,p&&p.supplyDefaults(t,e,u,n),i.traceIs(e,"noOpacity")||h("opacity"),i.traceIs(e,"notLegendIsolatable")&&(e.visible=!!e.visible),i.traceIs(e,"noHover")||(e.hovertemplate||l.coerceHoverinfo(t,e,n),"parcats"!==e.type&&i.getComponentMethod("fx","supplyDefaults")(t,e,u,n)),p&&p.selectPoints&&h("selectedpoints"),m.supplyTransformDefaults(t,e,n)),e},m.hasMakesDataTransform=T,m.supplyTransformDefaults=function(t,e,r){if(e._length||T(t)){var n=r._globalTransforms||[],a=r._transformModules||[];if(Array.isArray(t.transforms)||0!==n.length)for(var i=t.transforms||[],o=n.concat(i),s=e.transforms=[],c=0;c<o.length;c++){var u,h=o[c],f=h.type,p=y[f],d=!(h._module&&h._module===p),g=p&&"function"==typeof p.transform;p||l.warn("Unrecognized transform type "+f+"."),p&&p.supplyDefaults&&(d||g)?((u=p.supplyDefaults(h,e,r,t)).type=f,u._module=p,l.pushUnique(a,p)):u=l.extendFlat({},h),s.push(u)}}},m.supplyLayoutGlobalDefaults=function(t,e,r){function n(r,n){return l.coerce(t,e,m.layoutAttributes,r,n)}var a=t.template;l.isPlainObject(a)&&(e.template=a,e._template=a.layout,e._dataTemplate=a.data);var o=l.coerceFont(n,"font");n("title.text",e._dfltTitle.plot),l.coerceFont(n,"title.font",{family:o.family,size:Math.round(1.4*o.size),color:o.color}),n("title.xref"),n("title.yref"),n("title.x"),n("title.y"),n("title.xanchor"),n("title.yanchor"),n("title.pad.t"),n("title.pad.r"),n("title.pad.b"),n("title.pad.l"),n("uniformtext.mode")&&n("uniformtext.minsize"),n("autosize",!(t.width&&t.height)),n("width"),n("height"),n("margin.l"),n("margin.r"),n("margin.t"),n("margin.b"),n("margin.pad"),n("margin.autoexpand"),t.width&&t.height&&m.sanitizeMargins(e),i.getComponentMethod("grid","sizeDefaults")(t,e),n("paper_bgcolor"),n("separators",r.decimal+r.thousands),n("hidesources"),n("colorway"),n("datarevision");var s=n("uirevision");n("editrevision",s),n("selectionrevision",s),n("modebar.orientation"),n("modebar.bgcolor",c.addOpacity(e.paper_bgcolor,.5));var u=c.contrast(c.rgb(e.modebar.bgcolor));n("modebar.color",c.addOpacity(u,.3)),n("modebar.activecolor",c.addOpacity(u,.7)),n("modebar.uirevision",s),n("meta"),l.isPlainObject(t.transition)&&(n("transition.duration"),n("transition.easing"),n("transition.ordering")),i.getComponentMethod("calendars","handleDefaults")(t,e,"calendar"),i.getComponentMethod("fx","supplyLayoutGlobalDefaults")(t,e,n)},m.plotAutoSize=function(t,e,r){var n,i,o=t._context||{},s=o.frameMargins,c=l.isPlotDiv(t);if(c&&t.emit("plotly_autosize"),o.fillFrame)n=window.innerWidth,i=window.innerHeight,document.body.style.overflow="hidden";else{var u=c?window.getComputedStyle(t):{};if(n=parseFloat(u.width)||parseFloat(u.maxWidth)||r.width,i=parseFloat(u.height)||parseFloat(u.maxHeight)||r.height,a(s)&&s>0){var h=1-2*s;n=Math.round(h*n),i=Math.round(h*i)}}var f=m.layoutAttributes.width.min,p=m.layoutAttributes.height.min;n<f&&(n=f),i<p&&(i=p);var d=!e.width&&Math.abs(r.width-n)>1,g=!e.height&&Math.abs(r.height-i)>1;(g||d)&&(d&&(r.width=n),g&&(r.height=i)),t._initialAutoSize||(t._initialAutoSize={width:n,height:i}),m.sanitizeMargins(r)},m.supplyLayoutModuleDefaults=function(t,e,r,n){var a,o,s,c=i.componentsRegistry,u=e._basePlotModules,h=i.subplotsRegistry.cartesian;for(a in c)(s=c[a]).includeBasePlot&&s.includeBasePlot(t,e);for(var f in u.length||u.push(h),e._has("cartesian")&&(i.getComponentMethod("grid","contentDefaults")(t,e),h.finalizeSubplots(t,e)),e._subplots)e._subplots[f].sort(l.subplotSort);for(o=0;o<u.length;o++)(s=u[o]).supplyLayoutDefaults&&s.supplyLayoutDefaults(t,e,r);var p=e._modules;for(o=0;o<p.length;o++)(s=p[o]).supplyLayoutDefaults&&s.supplyLayoutDefaults(t,e,r);var d=e._transformModules;for(o=0;o<d.length;o++)(s=d[o]).supplyLayoutDefaults&&s.supplyLayoutDefaults(t,e,r,n);for(a in c)(s=c[a]).supplyLayoutDefaults&&s.supplyLayoutDefaults(t,e,r)},m.purge=function(t){var e=t._fullLayout||{};void 0!==e._glcontainer&&(e._glcontainer.selectAll(".gl-canvas").remove(),e._glcontainer.remove(),e._glcanvas=null),e._modeBar&&e._modeBar.destroy(),t._transitionData&&(t._transitionData._interruptCallbacks&&(t._transitionData._interruptCallbacks.length=0),t._transitionData._animationRaf&&window.cancelAnimationFrame(t._transitionData._animationRaf)),l.clearThrottle(),l.clearResponsive(t),delete t.data,delete t.layout,delete t._fullData,delete t._fullLayout,delete t.calcdata,delete t.framework,delete t.empty,delete t.fid,delete t.undoqueue,delete t.undonum,delete t.autoplay,delete t.changed,delete t._promises,delete t._redrawTimer,delete t._hmlumcount,delete t._hmpixcount,delete t._transitionData,delete t._transitioning,delete t._initialAutoSize,delete t._transitioningWithDuration,delete t._dragging,delete t._dragged,delete t._dragdata,delete t._hoverdata,delete t._snapshotInProgress,delete t._editing,delete t._mouseDownTime,delete t._legendMouseDownTime,t.removeAllListeners&&t.removeAllListeners()},m.style=function(t){var e,r=t._fullLayout._visibleModules,n=[];for(e=0;e<r.length;e++){var a=r[e];a.style&&l.pushUnique(n,a.style)}for(e=0;e<n.length;e++)n[e](t)},m.sanitizeMargins=function(t){if(t&&t.margin){var e,r=t.width,n=t.height,a=t.margin,i=r-(a.l+a.r),o=n-(a.t+a.b);i<0&&(e=(r-1)/(a.l+a.r),a.l=Math.floor(e*a.l),a.r=Math.floor(e*a.r)),o<0&&(e=(n-1)/(a.t+a.b),a.t=Math.floor(e*a.t),a.b=Math.floor(e*a.b))}},m.clearAutoMarginIds=function(t){t._fullLayout._pushmarginIds={}},m.allowAutoMargin=function(t,e){t._fullLayout._pushmarginIds[e]=1},m.autoMargin=function(t,e,r){var n=t._fullLayout,a=n._pushmargin,i=n._pushmarginIds;if(!1!==n.margin.autoexpand){if(r){var o=r.pad;if(void 0===o){var s=n.margin;o=Math.min(12,s.l,s.r,s.t,s.b)}r.l+r.r>.5*n.width&&(l.log("Margin push",e,"is too big in x, dropping"),r.l=r.r=0),r.b+r.t>.5*n.height&&(l.log("Margin push",e,"is too big in y, dropping"),r.b=r.t=0);var c=void 0!==r.xl?r.xl:r.x,u=void 0!==r.xr?r.xr:r.x,h=void 0!==r.yt?r.yt:r.y,f=void 0!==r.yb?r.yb:r.y;a[e]={l:{val:c,size:r.l+o},r:{val:u,size:r.r+o},b:{val:f,size:r.b+o},t:{val:h,size:r.t+o}},i[e]=1}else delete a[e],delete i[e];if(!n._replotting)return m.doAutoMargin(t)}},m.doAutoMargin=function(t){var e=t._fullLayout;e._size||(e._size={}),A(e);var r=e._size,n=e.margin,o=l.extendFlat({},r),s=n.l,c=n.r,u=n.t,h=n.b,f=e.width,p=e.height,d=e._pushmargin,g=e._pushmarginIds;if(!1!==e.margin.autoexpand){for(var v in d)g[v]||delete d[v];for(var y in d.base={l:{val:0,size:s},r:{val:1,size:c},t:{val:1,size:u},b:{val:0,size:h}},d){var x=d[y].l||{},b=d[y].b||{},_=x.val,w=x.size,k=b.val,T=b.size;for(var M in d){if(a(w)&&d[M].r){var S=d[M].r.val,E=d[M].r.size;if(S>_){var L=(w*S+(E-f)*_)/(S-_),C=(E*(1-_)+(w-f)*(1-S))/(S-_);L>=0&&C>=0&&f-(L+C)>0&&L+C>s+c&&(s=L,c=C)}}if(a(T)&&d[M].t){var P=d[M].t.val,O=d[M].t.size;if(P>k){var z=(T*P+(O-p)*k)/(P-k),I=(O*(1-k)+(T-p)*(1-P))/(P-k);z>=0&&I>=0&&p-(I+z)>0&&z+I>h+u&&(h=z,u=I)}}}}}if(r.l=Math.round(s),r.r=Math.round(c),r.t=Math.round(u),r.b=Math.round(h),r.p=Math.round(n.pad),r.w=Math.round(f)-r.l-r.r,r.h=Math.round(p)-r.t-r.b,!e._replotting&&m.didMarginChange(o,r)){"_redrawFromAutoMarginCount"in e?e._redrawFromAutoMarginCount++:e._redrawFromAutoMarginCount=1;var D=3*(1+Object.keys(g).length);if(e._redrawFromAutoMarginCount<D)return i.call("plot",t);l.warn("Too many auto-margin redraws.")}};var S=["l","r","t","b","p","w","h"];function E(t,e,r){var n=!1;var a=[m.previousPromises,function(){if(t._transitionData)return t._transitioning=!1,function(t){var e=Promise.resolve();if(!t)return e;for(;t.length;)e=e.then(t.shift());return e}(t._transitionData._interruptCallbacks)},r.prepareFn,m.rehover,function(){return t.emit("plotly_transitioning",[]),new Promise(function(a){t._transitioning=!0,e.duration>0&&(t._transitioningWithDuration=!0),t._transitionData._interruptCallbacks.push(function(){n=!0}),r.redraw&&t._transitionData._interruptCallbacks.push(function(){return i.call("redraw",t)}),t._transitionData._interruptCallbacks.push(function(){t.emit("plotly_transitioninterrupted",[])});var o=0,s=0;function l(){return o++,function(){var e;s++,n||s!==o||(e=a,t._transitionData&&(function(t){if(t)for(;t.length;)t.shift()}(t._transitionData._interruptCallbacks),Promise.resolve().then(function(){if(r.redraw)return i.call("redraw",t)}).then(function(){t._transitioning=!1,t._transitioningWithDuration=!1,t.emit("plotly_transitioned",[])}).then(e)))}}r.runFn(l),setTimeout(l())})}],o=l.syncOrAsync(a,t);return o&&o.then||(o=Promise.resolve()),o.then(function(){return t})}m.didMarginChange=function(t,e){for(var r=0;r<S.length;r++){var n=S[r],i=t[n],o=e[n];if(!a(i)||Math.abs(o-i)>1)return!0}return!1},m.graphJson=function(t,e,r,n,a,i){(a&&e&&!t._fullData||a&&!e&&!t._fullLayout)&&m.supplyDefaults(t);var o=a?t._fullData:t.data,s=a?t._fullLayout:t.layout,c=(t._transitionData||{})._frames;function u(t,e){if("function"==typeof t)return e?"_function_":null;if(l.isPlainObject(t)){var n,a={};return Object.keys(t).sort().forEach(function(i){if(-1===["_","["].indexOf(i.charAt(0)))if("function"!=typeof t[i]){if("keepdata"===r){if("src"===i.substr(i.length-3))return}else if("keepstream"===r){if("string"==typeof(n=t[i+"src"])&&n.indexOf(":")>0&&!l.isPlainObject(t.stream))return}else if("keepall"!==r&&"string"==typeof(n=t[i+"src"])&&n.indexOf(":")>0)return;a[i]=u(t[i],e)}else e&&(a[i]="_function")}),a}return Array.isArray(t)?t.map(function(t){return u(t,e)}):l.isTypedArray(t)?l.simpleMap(t,l.identity):l.isJSDate(t)?l.ms2DateTimeLocal(+t):t}var h={data:(o||[]).map(function(t){var r=u(t);return e&&delete r.fit,r})};return e||(h.layout=u(s)),t.framework&&t.framework.isPolar&&(h=t.framework.getConfig()),c&&(h.frames=u(c)),i&&(h.config=u(t._context,!0)),"object"===n?h:JSON.stringify(h)},m.modifyFrames=function(t,e){var r,n,a,i=t._transitionData._frames,o=t._transitionData._frameHash;for(r=0;r<e.length;r++)switch((n=e[r]).type){case"replace":a=n.value;var s=(i[n.index]||{}).name,l=a.name;i[n.index]=o[l]=a,l!==s&&(delete o[s],o[l]=a);break;case"insert":o[(a=n.value).name]=a,i.splice(n.index,0,a);break;case"delete":delete o[(a=i[n.index]).name],i.splice(n.index,1)}return Promise.resolve()},m.computeFrame=function(t,e){var r,n,a,i,o=t._transitionData._frameHash;if(!e)throw new Error("computeFrame must be given a string frame name");var s=o[e.toString()];if(!s)return!1;for(var l=[s],c=[s.name];s.baseframe&&(s=o[s.baseframe.toString()])&&-1===c.indexOf(s.name);)l.push(s),c.push(s.name);for(var u={};s=l.pop();)if(s.layout&&(u.layout=m.extendLayout(u.layout,s.layout)),s.data){if(u.data||(u.data=[]),!(n=s.traces))for(n=[],r=0;r<s.data.length;r++)n[r]=r;for(u.traces||(u.traces=[]),r=0;r<s.data.length;r++)null!=(a=n[r])&&(-1===(i=u.traces.indexOf(a))&&(i=u.data.length,u.traces[i]=a),u.data[i]=m.extendTrace(u.data[i],s.data[r]))}return u},m.recomputeFrameHash=function(t){for(var e=t._transitionData._frameHash={},r=t._transitionData._frames,n=0;n<r.length;n++){var a=r[n];a&&a.name&&(e[a.name]=a)}},m.extendObjectWithContainers=function(t,e,r){var n,a,i,o,s,c,u,h=l.extendDeepNoArrays({},e||{}),f=l.expandObjectPaths(h),p={};if(r&&r.length)for(i=0;i<r.length;i++)void 0===(a=(n=l.nestedProperty(f,r[i])).get())?l.nestedProperty(p,r[i]).set(null):(n.set(null),l.nestedProperty(p,r[i]).set(a));if(t=l.extendDeepNoArrays(t||{},f),r&&r.length)for(i=0;i<r.length;i++)if(c=l.nestedProperty(p,r[i]).get()){for(u=(s=l.nestedProperty(t,r[i])).get(),Array.isArray(u)||(u=[],s.set(u)),o=0;o<c.length;o++){var d=c[o];u[o]=null===d?null:m.extendObjectWithContainers(u[o],d)}s.set(u)}return t},m.dataArrayContainers=["transforms","dimensions"],m.layoutArrayContainers=i.layoutArrayContainers,m.extendTrace=function(t,e){return m.extendObjectWithContainers(t,e,m.dataArrayContainers)},m.extendLayout=function(t,e){return m.extendObjectWithContainers(t,e,m.layoutArrayContainers)},m.transition=function(t,e,r,n,a,i){var o={redraw:a.redraw},s={},c=[];return o.prepareFn=function(){for(var a=Array.isArray(e)?e.length:0,i=n.slice(0,a),o=0;o<i.length;o++){var u=i[o],h=t._fullData[u]._module;if(h){if(h.animatable){var f=h.basePlotModule.name;s[f]||(s[f]=[]),s[f].push(u)}t.data[i[o]]=m.extendTrace(t.data[i[o]],e[o])}}var p=l.expandObjectPaths(l.extendDeepNoArrays({},r)),d=/^[xy]axis[0-9]*$/;for(var g in p)d.test(g)&&delete p[g].range;m.extendLayout(t.layout,p),delete t.calcdata,m.supplyDefaults(t),m.doCalcdata(t);var v=l.expandObjectPaths(r);if(v){var y=t._fullLayout._plots;for(var x in y){var b=y[x],_=b.xaxis,w=b.yaxis,k=_.range.slice(),T=w.range.slice(),M=null,A=null,S=null,E=null;Array.isArray(v[_._name+".range"])?M=v[_._name+".range"].slice():Array.isArray((v[_._name]||{}).range)&&(M=v[_._name].range.slice()),Array.isArray(v[w._name+".range"])?A=v[w._name+".range"].slice():Array.isArray((v[w._name]||{}).range)&&(A=v[w._name].range.slice()),k&&M&&(_.r2l(k[0])!==_.r2l(M[0])||_.r2l(k[1])!==_.r2l(M[1]))&&(S={xr0:k,xr1:M}),T&&A&&(w.r2l(T[0])!==w.r2l(A[0])||w.r2l(T[1])!==w.r2l(A[1]))&&(E={yr0:T,yr1:A}),(S||E)&&c.push(l.extendFlat({plotinfo:b},S,E))}}return Promise.resolve()},o.runFn=function(e){var n,a,o=t._fullLayout._basePlotModules,u=c.length;if(r)for(a=0;a<o.length;a++)o[a].transitionAxes&&o[a].transitionAxes(t,c,i,e);for(var h in u?((n=l.extendFlat({},i)).duration=0,delete s.cartesian):n=i,s){var f=s[h];t._fullData[f[0]]._module.basePlotModule.plot(t,f,n,e)}},E(t,i,o)},m.transitionFromReact=function(t,e,r,n){var a=t._fullLayout,i=a.transition,o={},s=[];return o.prepareFn=function(){var t=a._plots;for(var i in o.redraw=!1,"some"===e.anim&&(o.redraw=!0),"some"===r.anim&&(o.redraw=!0),t){var c=t[i],u=c.xaxis,h=c.yaxis,f=n[u._name].range.slice(),p=n[h._name].range.slice(),d=u.range.slice(),g=h.range.slice();u.setScale(),h.setScale();var v=null,m=null;u.r2l(f[0])===u.r2l(d[0])&&u.r2l(f[1])===u.r2l(d[1])||(v={xr0:f,xr1:d}),h.r2l(p[0])===h.r2l(g[0])&&h.r2l(p[1])===h.r2l(g[1])||(m={yr0:p,yr1:g}),(v||m)&&s.push(l.extendFlat({plotinfo:c},v,m))}return Promise.resolve()},o.runFn=function(r){for(var n,a,o,c=t._fullData,u=t._fullLayout._basePlotModules,h=[],f=0;f<c.length;f++)h.push(f);function p(){for(var e=0;e<u.length;e++)u[e].transitionAxes&&u[e].transitionAxes(t,s,n,r)}function d(){for(var e=0;e<u.length;e++)u[e].plot(t,o,a,r)}s.length&&e.anim?"traces first"===i.ordering?(n=l.extendFlat({},i,{duration:0}),o=h,a=i,setTimeout(p,i.duration),d()):(n=i,o=null,a=l.extendFlat({},i,{duration:0}),setTimeout(d,n.duration),p()):s.length?(n=i,p()):e.anim&&(o=h,a=i,d())},E(t,i,o)},m.doCalcdata=function(t,e){var r,n,a,s,c=h.list(t),f=t._fullData,p=t._fullLayout,d=new Array(f.length),g=(t.calcdata||[]).slice();for(t.calcdata=d,p._numBoxes=0,p._numViolins=0,p._violinScaleGroupStats={},t._hmpixcount=0,t._hmlumcount=0,p._piecolormap={},p._sunburstcolormap={},p._treemapcolormap={},p._funnelareacolormap={},a=0;a<f.length;a++)Array.isArray(e)&&-1===e.indexOf(a)&&(d[a]=g[a]);for(a=0;a<f.length;a++)(r=f[a])._arrayAttrs=o.findArrayAttributes(r),r._extremes={};var v=p._subplots.polar||[];for(a=0;a<v.length;a++)c.push(p[v[a]].radialaxis,p[v[a]].angularaxis);for(var m in p._colorAxes){var x=p[m];!1!==x.cauto&&(delete x.cmin,delete x.cmax)}var b=!1;function _(e){if(r=f[e],n=r._module,!0===r.visible&&r.transforms){if(n&&n.calc){var a=n.calc(t,r);a[0]&&a[0].t&&a[0].t._scene&&delete a[0].t._scene.dirty}for(s=0;s<r.transforms.length;s++){var i=r.transforms[s];(n=y[i.type])&&n.calcTransform&&(r._hasCalcTransform=!0,b=!0,n.calcTransform(t,r,i))}}}function w(e,a){if(r=f[e],!!(n=r._module).isContainer===a){var i=[];if(!0===r.visible&&0!==r._length){delete r._indexToPoints;var o=r.transforms||[];for(s=o.length-1;s>=0;s--)if(o[s].enabled){r._indexToPoints=o[s]._indexToPoints;break}n&&n.calc&&(i=n.calc(t,r))}Array.isArray(i)&&i[0]||(i=[{x:u,y:u}]),i[0].t||(i[0].t={}),i[0].trace=r,d[e]=i}}for(C(c,f,p),a=0;a<f.length;a++)w(a,!0);for(a=0;a<f.length;a++)_(a);for(b&&C(c,f,p),a=0;a<f.length;a++)w(a,!0);for(a=0;a<f.length;a++)w(a,!1);P(t);var k=function(t,e){var r,n,a,o,s,c=[];function u(t,r,n){var a=r._id.charAt(0);if("histogram2dcontour"===t){var i=r._counterAxes[0],o=h.getFromId(e,i),s="x"===a||"x"===i&&"category"===o.type,l="y"===a||"y"===i&&"category"===o.type;return function(t,e){return 0===t||0===e?-1:s&&t===n[e].length-1?-1:l&&e===n.length-1?-1:("y"===a?e:t)-1}}return function(t,e){return"y"===a?e:t}}var f={min:function(t){return l.aggNums(Math.min,null,t)},max:function(t){return l.aggNums(Math.max,null,t)},sum:function(t){return l.aggNums(function(t,e){return t+e},null,t)},total:function(t){return l.aggNums(function(t,e){return t+e},null,t)},mean:function(t){return l.mean(t)},median:function(t){return l.median(t)}};for(r=0;r<t.length;r++){var p=t[r];if("category"===p.type){var d=p.categoryorder.match(L);if(d){var g=d[1],v=d[2],m=[];for(n=0;n<p._categories.length;n++)m.push([p._categories[n],[]]);for(n=0;n<p._traceIndices.length;n++){var y=p._traceIndices[n],x=e._fullData[y],b=p._id.charAt(0);if(!0===x.visible){var _=x.type;i.traceIs(x,"histogram")&&(delete x._xautoBinFinished,delete x._yautoBinFinished);var w=e.calcdata[y];for(a=0;a<w.length;a++){var k,T,M,A=w[a];if("splom"===_){var S=x._axesDim[p._id];if("y"===b){var E=x._diag[S][0];E&&(p=e._fullLayout[h.id2name(E)])}var C=A.trace.dimensions[S].values;for(o=0;o<C.length;o++)for(k=C[o],T=p._categoriesMap[k],s=0;s<A.trace.dimensions.length;s++)if(s!==S){var P=A.trace.dimensions[s];m[T][1].push(P.values[o])}}else if("scattergl"===_){for(o=0;o<A.t.x.length;o++)"x"===b&&(k=A.t.x[o],T=k,M=A.t.y[o]),"y"===b&&(k=A.t.y[o],T=k,M=A.t.x[o]),m[T][1].push(M);A.t&&A.t._scene&&delete A.t._scene.dirty}else if(A.hasOwnProperty("z")){M=A.z;var O=u(x.type,p,M);for(o=0;o<M.length;o++)for(s=0;s<M[o].length;s++)(T=O(s,o))+1&&m[T][1].push(M[o][s])}else for("x"===b?(k=A.p+1?A.p:A.x,M=A.s||A.v||A.y):"y"===b&&(k=A.p+1?A.p:A.y,M=A.s||A.v||A.x),Array.isArray(M)||(M=[M]),o=0;o<M.length;o++)m[k][1].push(M[o])}}}p._categoriesValue=m;var z=[];for(n=0;n<m.length;n++)z.push([m[n][0],f[g](m[n][1])]);z.sort(function(t,e){return t[1]-e[1]}),p._categoriesAggregatedValue=z,p._initialCategories=z.map(function(t){return t[0]}),"descending"===v&&p._initialCategories.reverse(),c=c.concat(p.sortByInitialCategories())}}}return c}(c,t);if(k.length){for(p._numBoxes=0,p._numViolins=0,a=0;a<k.length;a++)w(k[a],!0);for(a=0;a<k.length;a++)w(k[a],!1);P(t)}i.getComponentMethod("fx","calc")(t),i.getComponentMethod("errorbars","calc")(t)};var L=/(total|sum|min|max|mean|median) (ascending|descending)/;function C(t,e,r){var n,a,i,o={};for(n=0;n<t.length;n++)i=(a=t[n])._id,a.clearCalc(),"multicategory"===a.type&&a.setupMultiCategory(e),o[a._id]=1;var s=r._axisMatchGroups||[];for(n=0;n<s.length;n++)for(i in s[n])o[i]||(a=r[h.id2name(i)]).clearCalc()}function P(t){var e,r,n,a=t._fullLayout,i=a._visibleModules,o={};for(r=0;r<i.length;r++){var s=i[r],c=s.crossTraceCalc;if(c){var u=s.basePlotModule.name;o[u]?l.pushUnique(o[u],c):o[u]=[c]}}for(n in o){var h=o[n],f=a._subplots[n];if(Array.isArray(f))for(e=0;e<f.length;e++){var p=f[e],d="cartesian"===n?a._plots[p]:a[p];for(r=0;r<h.length;r++)h[r](t,d,p)}else for(r=0;r<h.length;r++)h[r](t)}}m.rehover=function(t){t._fullLayout._rehover&&t._fullLayout._rehover()},m.redrag=function(t){t._fullLayout._redrag&&t._fullLayout._redrag()},m.generalUpdatePerTraceModule=function(t,e,r,n){var a,i=e.traceHash,o={};for(a=0;a<r.length;a++){var s=r[a],c=s[0].trace;c.visible&&(o[c.type]=o[c.type]||[],o[c.type].push(s))}for(var u in i)if(!o[u]){var h=i[u][0];h[0].trace.visible=!1,o[u]=[h]}for(var f in o){var p=o[f];p[0][0].trace._module.plot(t,e,l.filterVisible(p),n)}e.traceHash=o},m.plotBasePlot=function(t,e,r,n,a){var o=i.getModule(t),s=d(e.calcdata,o)[0];o.plot(e,s,n,a)},m.cleanBasePlot=function(t,e,r,n,a){var i=a._has&&a._has(t),o=r._has&&r._has(t);i&&!o&&a["_"+t+"layer"].selectAll("g.trace").remove()}},{"../components/color":591,"../constants/numerical":693,"../lib":717,"../plot_api/plot_schema":754,"../plot_api/plot_template":755,"../plots/get_data":800,"../registry":846,"./animation_attributes":760,"./attributes":762,"./cartesian/axis_ids":768,"./command":789,"./font_attributes":791,"./frame_attributes":792,"./layout_attributes":817,d3:165,"fast-isnumeric":228}],827:[function(t,e,r){"use strict";e.exports={attr:"subplot",name:"polar",axisNames:["angularaxis","radialaxis"],axisName2dataArray:{angularaxis:"theta",radialaxis:"r"},layerNames:["draglayer","plotbg","backplot","angular-grid","radial-grid","frontplot","angular-line","radial-line","angular-axis","radial-axis"],radialDragBoxSize:50,angularDragBoxSize:30,cornerLen:25,cornerHalfWidth:2,MINDRAG:8,MINZOOM:20,OFFEDGE:20}},{}],828:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../lib/polygon").tester,i=n.findIndexOfMin,o=n.isAngleInsideSector,s=n.angleDelta,l=n.angleDist;function c(t,e,r,n){var a,i,o=n[0],s=n[1],l=h(Math.sin(e)-Math.sin(t)),c=h(Math.cos(e)-Math.cos(t)),u=Math.tan(r),f=h(1/u),p=l/c,d=s-p*o;return f?l&&c?i=u*(a=d/(u-p)):c?(a=s*f,i=s):(a=o,i=o*u):l&&c?(a=0,i=d):c?(a=0,i=s):a=i=NaN,[a,i]}function u(t,e,r,a){return n.isFullCircle([e,r])?function(t,e){var r,n=e.length,a=new Array(n+1);for(r=0;r<n;r++){var i=e[r];a[r]=[t*Math.cos(i),t*Math.sin(i)]}return a[r]=a[0].slice(),a}(t,a):function(t,e,r,a){var s,u,h=a.length,f=[];function p(e){return[t*Math.cos(e),t*Math.sin(e)]}function d(t,e,r){return c(t,e,r,p(t))}function g(t){return n.mod(t,h)}function v(t){return o(t,[e,r])}var m=i(a,function(t){return v(t)?l(t,e):1/0}),y=d(a[m],a[g(m-1)],e);for(f.push(y),s=m,u=0;u<h;s++,u++){var x=a[g(s)];if(!v(x))break;f.push(p(x))}var b=i(a,function(t){return v(t)?l(t,r):1/0}),_=d(a[b],a[g(b+1)],r);return f.push(_),f.push([0,0]),f.push(f[0].slice()),f}(t,e,r,a)}function h(t){return Math.abs(t)>1e-10?t:0}function f(t,e,r){e=e||0,r=r||0;for(var n=t.length,a=new Array(n),i=0;i<n;i++){var o=t[i];a[i]=[e+o[0],r-o[1]]}return a}e.exports={isPtInsidePolygon:function(t,e,r,n,i){if(!o(e,n))return!1;var s,l;r[0]<r[1]?(s=r[0],l=r[1]):(s=r[1],l=r[0]);var c=a(u(s,n[0],n[1],i)),h=a(u(l,n[0],n[1],i)),f=[t*Math.cos(e),t*Math.sin(e)];return h.contains(f)&&!c.contains(f)},findPolygonOffset:function(t,e,r,n){for(var a=1/0,i=1/0,o=u(t,e,r,n),s=0;s<o.length;s++){var l=o[s];a=Math.min(a,l[0]),i=Math.min(i,-l[1])}return[a,i]},findEnclosingVertexAngles:function(t,e){var r=i(e,function(e){var r=s(e,t);return r>0?r:1/0}),a=n.mod(r+1,e.length);return[e[r],e[a]]},findIntersectionXY:c,findXYatLength:function(t,e,r,n){var a=-e*r,i=e*e+1,o=2*(e*a-r),s=a*a+r*r-t*t,l=Math.sqrt(o*o-4*i*s),c=(-o+l)/(2*i),u=(-o-l)/(2*i);return[[c,e*c+a+n],[u,e*u+a+n]]},clampTiny:h,pathPolygon:function(t,e,r,n,a,i){return"M"+f(u(t,e,r,n),a,i).join("L")},pathPolygonAnnulus:function(t,e,r,n,a,i,o){var s,l;t<e?(s=t,l=e):(s=e,l=t);var c=f(u(s,r,n,a),i,o);return"M"+f(u(l,r,n,a),i,o).reverse().join("L")+"M"+c.join("L")}}},{"../../lib":717,"../../lib/polygon":729}],829:[function(t,e,r){"use strict";var n=t("../get_data").getSubplotCalcData,a=t("../../lib").counterRegex,i=t("./polar"),o=t("./constants"),s=o.attr,l=o.name,c=a(l),u={};u[s]={valType:"subplotid",dflt:l,editType:"calc"},e.exports={attr:s,name:l,idRoot:l,idRegex:c,attrRegex:c,attributes:u,layoutAttributes:t("./layout_attributes"),supplyLayoutDefaults:t("./layout_defaults"),plot:function(t){for(var e=t._fullLayout,r=t.calcdata,a=e._subplots[l],o=0;o<a.length;o++){var s=a[o],c=n(r,l,s),u=e[s]._subplot;u||(u=i(t,s),e[s]._subplot=u),u.plot(c,e,t._promises)}},clean:function(t,e,r,n){for(var a=n._subplots[l]||[],i=n._has&&n._has("gl"),o=e._has&&e._has("gl"),s=i&&!o,c=0;c<a.length;c++){var u=a[c],h=n[u]._subplot;if(!e[u]&&h)for(var f in h.framework.remove(),h.layers["radial-axis-title"].remove(),h.clipPaths)h.clipPaths[f].remove();s&&h._scene&&(h._scene.destroy(),h._scene=null)}},toSVG:t("../cartesian").toSVG}},{"../../lib":717,"../cartesian":776,"../get_data":800,"./constants":827,"./layout_attributes":830,"./layout_defaults":831,"./polar":838}],830:[function(t,e,r){"use strict";var n=t("../../components/color/attributes"),a=t("../cartesian/layout_attributes"),i=t("../domain").attributes,o=t("../../lib").extendFlat,s=t("../../plot_api/edit_types").overrideAll,l=s({color:a.color,showline:o({},a.showline,{dflt:!0}),linecolor:a.linecolor,linewidth:a.linewidth,showgrid:o({},a.showgrid,{dflt:!0}),gridcolor:a.gridcolor,gridwidth:a.gridwidth},"plot","from-root"),c=s({tickmode:a.tickmode,nticks:a.nticks,tick0:a.tick0,dtick:a.dtick,tickvals:a.tickvals,ticktext:a.ticktext,ticks:a.ticks,ticklen:a.ticklen,tickwidth:a.tickwidth,tickcolor:a.tickcolor,showticklabels:a.showticklabels,showtickprefix:a.showtickprefix,tickprefix:a.tickprefix,showticksuffix:a.showticksuffix,ticksuffix:a.ticksuffix,showexponent:a.showexponent,exponentformat:a.exponentformat,separatethousands:a.separatethousands,tickfont:a.tickfont,tickangle:a.tickangle,tickformat:a.tickformat,tickformatstops:a.tickformatstops,layer:a.layer},"plot","from-root"),u={visible:o({},a.visible,{dflt:!0}),type:o({},a.type,{values:["-","linear","log","date","category"]}),autorange:o({},a.autorange,{editType:"plot"}),rangemode:{valType:"enumerated",values:["tozero","nonnegative","normal"],dflt:"tozero",editType:"calc"},range:o({},a.range,{items:[{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}}],editType:"plot"}),categoryorder:a.categoryorder,categoryarray:a.categoryarray,angle:{valType:"angle",editType:"plot"},side:{valType:"enumerated",values:["clockwise","counterclockwise"],dflt:"clockwise",editType:"plot"},title:{text:o({},a.title.text,{editType:"plot",dflt:""}),font:o({},a.title.font,{editType:"plot"}),editType:"plot"},hoverformat:a.hoverformat,uirevision:{valType:"any",editType:"none"},editType:"calc",_deprecated:{title:a._deprecated.title,titlefont:a._deprecated.titlefont}};o(u,l,c);var h={visible:o({},a.visible,{dflt:!0}),type:{valType:"enumerated",values:["-","linear","category"],dflt:"-",editType:"calc",_noTemplating:!0},categoryorder:a.categoryorder,categoryarray:a.categoryarray,thetaunit:{valType:"enumerated",values:["radians","degrees"],dflt:"degrees",editType:"calc"},period:{valType:"number",editType:"calc",min:0},direction:{valType:"enumerated",values:["counterclockwise","clockwise"],dflt:"counterclockwise",editType:"calc"},rotation:{valType:"angle",editType:"calc"},hoverformat:a.hoverformat,uirevision:{valType:"any",editType:"none"},editType:"calc"};o(h,l,c),e.exports={domain:i({name:"polar",editType:"plot"}),sector:{valType:"info_array",items:[{valType:"number",editType:"plot"},{valType:"number",editType:"plot"}],dflt:[0,360],editType:"plot"},hole:{valType:"number",min:0,max:1,dflt:0,editType:"plot"},bgcolor:{valType:"color",editType:"plot",dflt:n.background},radialaxis:u,angularaxis:h,gridshape:{valType:"enumerated",values:["circular","linear"],dflt:"circular",editType:"plot"},uirevision:{valType:"any",editType:"none"},editType:"calc"}},{"../../components/color/attributes":590,"../../lib":717,"../../plot_api/edit_types":748,"../cartesian/layout_attributes":777,"../domain":790}],831:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/color"),i=t("../../plot_api/plot_template"),o=t("../subplot_defaults"),s=t("../get_data").getSubplotData,l=t("../cartesian/tick_value_defaults"),c=t("../cartesian/tick_mark_defaults"),u=t("../cartesian/tick_label_defaults"),h=t("../cartesian/category_order_defaults"),f=t("../cartesian/line_grid_defaults"),p=t("../cartesian/axis_autotype"),d=t("./layout_attributes"),g=t("./set_convert"),v=t("./constants"),m=v.axisNames;function y(t,e,r,o){var p=r("bgcolor");o.bgColor=a.combine(p,o.paper_bgcolor);var y=r("sector");r("hole");var b,_=s(o.fullData,v.name,o.id),w=o.layoutOut;function k(t,e){return r(b+"."+t,e)}for(var T=0;T<m.length;T++){b=m[T],n.isPlainObject(t[b])||(t[b]={});var M=t[b],A=i.newContainer(e,b);A._id=A._name=b,A._attr=o.id+"."+b,A._traceIndices=_.map(function(t){return t._expandedIndex});var S=v.axisName2dataArray[b],E=x(M,A,k,_,S);h(M,A,k,{axData:_,dataAttr:S});var L,C,P=k("visible");switch(g(A,e,w),k("uirevision",e.uirevision),P&&(C=(L=k("color"))===M.color?L:o.font.color),A._m=1,b){case"radialaxis":var O=k("autorange",!A.isValidRange(M.range));M.autorange=O,!O||"linear"!==E&&"-"!==E||k("rangemode"),"reversed"===O&&(A._m=-1),k("range"),A.cleanRange("range",{dfltRange:[0,1]}),P&&(k("side"),k("angle",y[0]),k("title.text"),n.coerceFont(k,"title.font",{family:o.font.family,size:Math.round(1.2*o.font.size),color:C}));break;case"angularaxis":if("date"===E){n.log("Polar plots do not support date angular axes yet.");for(var z=0;z<_.length;z++)_[z].visible=!1;E=M.type=A.type="linear"}k("linear"===E?"thetaunit":"period");var I=k("direction");k("rotation",{counterclockwise:0,clockwise:90}[I])}if(P)l(M,A,k,A.type),u(M,A,k,A.type,{tickSuffixDflt:"degrees"===A.thetaunit?"\xb0":void 0}),c(M,A,k,{outerTicks:!0}),k("showticklabels")&&(n.coerceFont(k,"tickfont",{family:o.font.family,size:o.font.size,color:C}),k("tickangle"),k("tickformat")),f(M,A,k,{dfltColor:L,bgColor:o.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:d[b]}),k("layer");"category"!==E&&k("hoverformat"),A._input=M}"category"===e.angularaxis.type&&r("gridshape")}function x(t,e,r,n,a){if("-"===r("type")){for(var i,o=0;o<n.length;o++)if(n[o].visible){i=n[o];break}i&&i[a]&&(e.type=p(i[a],"gregorian")),"-"===e.type?e.type="linear":t.type=e.type}return e.type}e.exports=function(t,e,r){o(t,e,r,{type:v.name,attributes:d,handleDefaults:y,font:e.font,paper_bgcolor:e.paper_bgcolor,fullData:r,layoutOut:e})}},{"../../components/color":591,"../../lib":717,"../../plot_api/plot_template":755,"../cartesian/axis_autotype":766,"../cartesian/category_order_defaults":769,"../cartesian/line_grid_defaults":779,"../cartesian/tick_label_defaults":784,"../cartesian/tick_mark_defaults":785,"../cartesian/tick_value_defaults":786,"../get_data":800,"../subplot_defaults":840,"./constants":827,"./layout_attributes":830,"./set_convert":839}],832:[function(t,e,r){"use strict";var n=t("../../../traces/scatter/attributes"),a=n.marker,i=t("../../../lib/extend").extendFlat;["Area traces are deprecated!","Please switch to the *barpolar* trace type."].join(" ");e.exports={r:i({},n.r,{}),t:i({},n.t,{}),marker:{color:i({},a.color,{}),size:i({},a.size,{}),symbol:i({},a.symbol,{}),opacity:i({},a.opacity,{}),editType:"calc"}}},{"../../../lib/extend":708,"../../../traces/scatter/attributes":1120}],833:[function(t,e,r){"use strict";var n=t("../../cartesian/layout_attributes"),a=t("../../../lib/extend").extendFlat,i=t("../../../plot_api/edit_types").overrideAll,o=["Legacy polar charts are deprecated!","Please switch to *polar* subplots."].join(" "),s=a({},n.domain,{});function l(t,e){return a({},e,{showline:{valType:"boolean"},showticklabels:{valType:"boolean"},tickorientation:{valType:"enumerated",values:["horizontal","vertical"]},ticklen:{valType:"number",min:0},tickcolor:{valType:"color"},ticksuffix:{valType:"string"},endpadding:{valType:"number",description:o},visible:{valType:"boolean"}})}e.exports=i({radialaxis:l(0,{range:{valType:"info_array",items:[{valType:"number"},{valType:"number"}]},domain:s,orientation:{valType:"number"}}),angularaxis:l(0,{range:{valType:"info_array",items:[{valType:"number",dflt:0},{valType:"number",dflt:360}]},domain:s}),layout:{direction:{valType:"enumerated",values:["clockwise","counterclockwise"]},orientation:{valType:"angle"}}},"plot","nested")},{"../../../lib/extend":708,"../../../plot_api/edit_types":748,"../../cartesian/layout_attributes":777}],834:[function(t,e,r){"use strict";(e.exports=t("./micropolar")).manager=t("./micropolar_manager")},{"./micropolar":835,"./micropolar_manager":836}],835:[function(t,e,r){var n=t("d3"),a=t("../../../lib").extendDeepAll,i=t("../../../constants/alignment").MID_SHIFT,o=e.exports={version:"0.2.2"};o.Axis=function(){var t,e,r,s,l={data:[],layout:{}},c={},u={},h=n.dispatch("hover"),f={};return f.render=function(c){return function(c){e=c||e;var h=l.data,f=l.layout;("string"==typeof e||e.nodeName)&&(e=n.select(e)),e.datum(h).each(function(e,l){var c=e.slice();u={data:o.util.cloneJson(c),layout:o.util.cloneJson(f)};var h=0;c.forEach(function(t,e){t.color||(t.color=f.defaultColorRange[h],h=(h+1)%f.defaultColorRange.length),t.strokeColor||(t.strokeColor="LinePlot"===t.geometry?t.color:n.rgb(t.color).darker().toString()),u.data[e].color=t.color,u.data[e].strokeColor=t.strokeColor,u.data[e].strokeDash=t.strokeDash,u.data[e].strokeSize=t.strokeSize});var p=c.filter(function(t,e){var r=t.visible;return"undefined"==typeof r||!0===r}),d=!1,g=p.map(function(t,e){return d=d||"undefined"!=typeof t.groupId,t});if(d){var v=n.nest().key(function(t,e){return"undefined"!=typeof t.groupId?t.groupId:"unstacked"}).entries(g),m=[],y=v.map(function(t,e){if("unstacked"===t.key)return t.values;var r=t.values[0].r.map(function(t,e){return 0});return t.values.forEach(function(t,e,n){t.yStack=[r],m.push(r),r=o.util.sumArrays(t.r,r)}),t.values});p=n.merge(y)}p.forEach(function(t,e){t.t=Array.isArray(t.t[0])?t.t:[t.t],t.r=Array.isArray(t.r[0])?t.r:[t.r]});var x=Math.min(f.width-f.margin.left-f.margin.right,f.height-f.margin.top-f.margin.bottom)/2;x=Math.max(10,x);var b,_=[f.margin.left+x,f.margin.top+x];b=d?[0,n.max(o.util.sumArrays(o.util.arrayLast(p).r[0],o.util.arrayLast(m)))]:n.extent(o.util.flattenArray(p.map(function(t,e){return t.r}))),f.radialAxis.domain!=o.DATAEXTENT&&(b[0]=0),r=n.scale.linear().domain(f.radialAxis.domain!=o.DATAEXTENT&&f.radialAxis.domain?f.radialAxis.domain:b).range([0,x]),u.layout.radialAxis.domain=r.domain();var w,k=o.util.flattenArray(p.map(function(t,e){return t.t})),T="string"==typeof k[0];T&&(k=o.util.deduplicate(k),w=k.slice(),k=n.range(k.length),p=p.map(function(t,e){var r=t;return t.t=[k],d&&(r.yStack=t.yStack),r}));var M=p.filter(function(t,e){return"LinePlot"===t.geometry||"DotPlot"===t.geometry}).length===p.length,A=null===f.needsEndSpacing?T||!M:f.needsEndSpacing,S=f.angularAxis.domain&&f.angularAxis.domain!=o.DATAEXTENT&&!T&&f.angularAxis.domain[0]>=0?f.angularAxis.domain:n.extent(k),E=Math.abs(k[1]-k[0]);M&&!T&&(E=0);var L=S.slice();A&&T&&(L[1]+=E);var C=f.angularAxis.ticksCount||4;C>8&&(C=C/(C/8)+C%8),f.angularAxis.ticksStep&&(C=(L[1]-L[0])/C);var P=f.angularAxis.ticksStep||(L[1]-L[0])/(C*(f.minorTicks+1));w&&(P=Math.max(Math.round(P),1)),L[2]||(L[2]=P);var O=n.range.apply(this,L);if(O=O.map(function(t,e){return parseFloat(t.toPrecision(12))}),s=n.scale.linear().domain(L.slice(0,2)).range("clockwise"===f.direction?[0,360]:[360,0]),u.layout.angularAxis.domain=s.domain(),u.layout.angularAxis.endPadding=A?E:0,"undefined"==typeof(t=n.select(this).select("svg.chart-root"))||t.empty()){var z=(new DOMParser).parseFromString("<svg xmlns='http://www.w3.org/2000/svg' class='chart-root'>' + '<g class='outer-group'>' + '<g class='chart-group'>' + '<circle class='background-circle'></circle>' + '<g class='geometry-group'></g>' + '<g class='radial axis-group'>' + '<circle class='outside-circle'></circle>' + '</g>' + '<g class='angular axis-group'></g>' + '<g class='guides-group'><line></line><circle r='0'></circle></g>' + '</g>' + '<g class='legend-group'></g>' + '<g class='tooltips-group'></g>' + '<g class='title-group'><text></text></g>' + '</g>' + '</svg>","application/xml"),I=this.appendChild(this.ownerDocument.importNode(z.documentElement,!0));t=n.select(I)}t.select(".guides-group").style({"pointer-events":"none"}),t.select(".angular.axis-group").style({"pointer-events":"none"}),t.select(".radial.axis-group").style({"pointer-events":"none"});var D,R=t.select(".chart-group"),F={fill:"none",stroke:f.tickColor},B={"font-size":f.font.size,"font-family":f.font.family,fill:f.font.color,"text-shadow":["-1px 0px","1px -1px","-1px 1px","1px 1px"].map(function(t,e){return" "+t+" 0 "+f.font.outlineColor}).join(",")};if(f.showLegend){D=t.select(".legend-group").attr({transform:"translate("+[x,f.margin.top]+")"}).style({display:"block"});var N=p.map(function(t,e){var r=o.util.cloneJson(t);return r.symbol="DotPlot"===t.geometry?t.dotType||"circle":"LinePlot"!=t.geometry?"square":"line",r.visibleInLegend="undefined"==typeof t.visibleInLegend||t.visibleInLegend,r.color="LinePlot"===t.geometry?t.strokeColor:t.color,r});o.Legend().config({data:p.map(function(t,e){return t.name||"Element"+e}),legendConfig:a({},o.Legend.defaultConfig().legendConfig,{container:D,elements:N,reverseOrder:f.legend.reverseOrder})})();var j=D.node().getBBox();x=Math.min(f.width-j.width-f.margin.left-f.margin.right,f.height-f.margin.top-f.margin.bottom)/2,x=Math.max(10,x),_=[f.margin.left+x,f.margin.top+x],r.range([0,x]),u.layout.radialAxis.domain=r.domain(),D.attr("transform","translate("+[_[0]+x,_[1]-x]+")")}else D=t.select(".legend-group").style({display:"none"});t.attr({width:f.width,height:f.height}).style({opacity:f.opacity}),R.attr("transform","translate("+_+")").style({cursor:"crosshair"});var V=[(f.width-(f.margin.left+f.margin.right+2*x+(j?j.width:0)))/2,(f.height-(f.margin.top+f.margin.bottom+2*x))/2];if(V[0]=Math.max(0,V[0]),V[1]=Math.max(0,V[1]),t.select(".outer-group").attr("transform","translate("+V+")"),f.title&&f.title.text){var U=t.select("g.title-group text").style(B).text(f.title.text),q=U.node().getBBox();U.attr({x:_[0]-q.width/2,y:_[1]-x-20})}var H=t.select(".radial.axis-group");if(f.radialAxis.gridLinesVisible){var G=H.selectAll("circle.grid-circle").data(r.ticks(5));G.enter().append("circle").attr({class:"grid-circle"}).style(F),G.attr("r",r),G.exit().remove()}H.select("circle.outside-circle").attr({r:x}).style(F);var Y=t.select("circle.background-circle").attr({r:x}).style({fill:f.backgroundColor,stroke:f.stroke});function W(t,e){return s(t)%360+f.orientation}if(f.radialAxis.visible){var X=n.svg.axis().scale(r).ticks(5).tickSize(5);H.call(X).attr({transform:"rotate("+f.radialAxis.orientation+")"}),H.selectAll(".domain").style(F),H.selectAll("g>text").text(function(t,e){return this.textContent+f.radialAxis.ticksSuffix}).style(B).style({"text-anchor":"start"}).attr({x:0,y:0,dx:0,dy:0,transform:function(t,e){return"horizontal"===f.radialAxis.tickOrientation?"rotate("+-f.radialAxis.orientation+") translate("+[0,B["font-size"]]+")":"translate("+[0,B["font-size"]]+")"}}),H.selectAll("g>line").style({stroke:"black"})}var Z=t.select(".angular.axis-group").selectAll("g.angular-tick").data(O),J=Z.enter().append("g").classed("angular-tick",!0);Z.attr({transform:function(t,e){return"rotate("+W(t)+")"}}).style({display:f.angularAxis.visible?"block":"none"}),Z.exit().remove(),J.append("line").classed("grid-line",!0).classed("major",function(t,e){return e%(f.minorTicks+1)==0}).classed("minor",function(t,e){return!(e%(f.minorTicks+1)==0)}).style(F),J.selectAll(".minor").style({stroke:f.minorTickColor}),Z.select("line.grid-line").attr({x1:f.tickLength?x-f.tickLength:0,x2:x}).style({display:f.angularAxis.gridLinesVisible?"block":"none"}),J.append("text").classed("axis-text",!0).style(B);var K=Z.select("text.axis-text").attr({x:x+f.labelOffset,dy:i+"em",transform:function(t,e){var r=W(t),n=x+f.labelOffset,a=f.angularAxis.tickOrientation;return"horizontal"==a?"rotate("+-r+" "+n+" 0)":"radial"==a?r<270&&r>90?"rotate(180 "+n+" 0)":null:"rotate("+(r<=180&&r>0?-90:90)+" "+n+" 0)"}}).style({"text-anchor":"middle",display:f.angularAxis.labelsVisible?"block":"none"}).text(function(t,e){return e%(f.minorTicks+1)!=0?"":w?w[t]+f.angularAxis.ticksSuffix:t+f.angularAxis.ticksSuffix}).style(B);f.angularAxis.rewriteTicks&&K.text(function(t,e){return e%(f.minorTicks+1)!=0?"":f.angularAxis.rewriteTicks(this.textContent,e)});var Q=n.max(R.selectAll(".angular-tick text")[0].map(function(t,e){return t.getCTM().e+t.getBBox().width}));D.attr({transform:"translate("+[x+Q,f.margin.top]+")"});var $=t.select("g.geometry-group").selectAll("g").size()>0,tt=t.select("g.geometry-group").selectAll("g.geometry").data(p);if(tt.enter().append("g").attr({class:function(t,e){return"geometry geometry"+e}}),tt.exit().remove(),p[0]||$){var et=[];p.forEach(function(t,e){var n={};n.radialScale=r,n.angularScale=s,n.container=tt.filter(function(t,r){return r==e}),n.geometry=t.geometry,n.orientation=f.orientation,n.direction=f.direction,n.index=e,et.push({data:t,geometryConfig:n})});var rt=n.nest().key(function(t,e){return"undefined"!=typeof t.data.groupId||"unstacked"}).entries(et),nt=[];rt.forEach(function(t,e){"unstacked"===t.key?nt=nt.concat(t.values.map(function(t,e){return[t]})):nt.push(t.values)}),nt.forEach(function(t,e){var r;r=Array.isArray(t)?t[0].geometryConfig.geometry:t.geometryConfig.geometry;var n=t.map(function(t,e){return a(o[r].defaultConfig(),t)});o[r]().config(n)()})}var at,it,ot=t.select(".guides-group"),st=t.select(".tooltips-group"),lt=o.tooltipPanel().config({container:st,fontSize:8})(),ct=o.tooltipPanel().config({container:st,fontSize:8})(),ut=o.tooltipPanel().config({container:st,hasTick:!0})();if(!T){var ht=ot.select("line").attr({x1:0,y1:0,y2:0}).style({stroke:"grey","pointer-events":"none"});R.on("mousemove.angular-guide",function(t,e){var r=o.util.getMousePos(Y).angle;ht.attr({x2:-x,transform:"rotate("+r+")"}).style({opacity:.5});var n=(r+180+360-f.orientation)%360;at=s.invert(n);var a=o.util.convertToCartesian(x+12,r+180);lt.text(o.util.round(at)).move([a[0]+_[0],a[1]+_[1]])}).on("mouseout.angular-guide",function(t,e){ot.select("line").style({opacity:0})})}var ft=ot.select("circle").style({stroke:"grey",fill:"none"});R.on("mousemove.radial-guide",function(t,e){var n=o.util.getMousePos(Y).radius;ft.attr({r:n}).style({opacity:.5}),it=r.invert(o.util.getMousePos(Y).radius);var a=o.util.convertToCartesian(n,f.radialAxis.orientation);ct.text(o.util.round(it)).move([a[0]+_[0],a[1]+_[1]])}).on("mouseout.radial-guide",function(t,e){ft.style({opacity:0}),ut.hide(),lt.hide(),ct.hide()}),t.selectAll(".geometry-group .mark").on("mouseover.tooltip",function(e,r){var a=n.select(this),i=this.style.fill,s="black",l=this.style.opacity||1;if(a.attr({"data-opacity":l}),i&&"none"!==i){a.attr({"data-fill":i}),s=n.hsl(i).darker().toString(),a.style({fill:s,opacity:1});var c={t:o.util.round(e[0]),r:o.util.round(e[1])};T&&(c.t=w[e[0]]);var u="t: "+c.t+", r: "+c.r,h=this.getBoundingClientRect(),f=t.node().getBoundingClientRect(),p=[h.left+h.width/2-V[0]-f.left,h.top+h.height/2-V[1]-f.top];ut.config({color:s}).text(u),ut.move(p)}else i=this.style.stroke||"black",a.attr({"data-stroke":i}),s=n.hsl(i).darker().toString(),a.style({stroke:s,opacity:1})}).on("mousemove.tooltip",function(t,e){if(0!=n.event.which)return!1;n.select(this).attr("data-fill")&&ut.show()}).on("mouseout.tooltip",function(t,e){ut.hide();var r=n.select(this),a=r.attr("data-fill");a?r.style({fill:a,opacity:r.attr("data-opacity")}):r.style({stroke:r.attr("data-stroke"),opacity:r.attr("data-opacity")})})})}(c),this},f.config=function(t){if(!arguments.length)return l;var e=o.util.cloneJson(t);return e.data.forEach(function(t,e){l.data[e]||(l.data[e]={}),a(l.data[e],o.Axis.defaultConfig().data[0]),a(l.data[e],t)}),a(l.layout,o.Axis.defaultConfig().layout),a(l.layout,e.layout),this},f.getLiveConfig=function(){return u},f.getinputConfig=function(){return c},f.radialScale=function(t){return r},f.angularScale=function(t){return s},f.svg=function(){return t},n.rebind(f,h,"on"),f},o.Axis.defaultConfig=function(t,e){return{data:[{t:[1,2,3,4],r:[10,11,12,13],name:"Line1",geometry:"LinePlot",color:null,strokeDash:"solid",strokeColor:null,strokeSize:"1",visibleInLegend:!0,opacity:1}],layout:{defaultColorRange:n.scale.category10().range(),title:null,height:450,width:500,margin:{top:40,right:40,bottom:40,left:40},font:{size:12,color:"gray",outlineColor:"white",family:"Tahoma, sans-serif"},direction:"clockwise",orientation:0,labelOffset:10,radialAxis:{domain:null,orientation:-45,ticksSuffix:"",visible:!0,gridLinesVisible:!0,tickOrientation:"horizontal",rewriteTicks:null},angularAxis:{domain:[0,360],ticksSuffix:"",visible:!0,gridLinesVisible:!0,labelsVisible:!0,tickOrientation:"horizontal",rewriteTicks:null,ticksCount:null,ticksStep:null},minorTicks:0,tickLength:null,tickColor:"silver",minorTickColor:"#eee",backgroundColor:"none",needsEndSpacing:null,showLegend:!0,legend:{reverseOrder:!1},opacity:1}}},o.util={},o.DATAEXTENT="dataExtent",o.AREA="AreaChart",o.LINE="LinePlot",o.DOT="DotPlot",o.BAR="BarChart",o.util._override=function(t,e){for(var r in t)r in e&&(e[r]=t[r])},o.util._extend=function(t,e){for(var r in t)e[r]=t[r]},o.util._rndSnd=function(){return 2*Math.random()-1+(2*Math.random()-1)+(2*Math.random()-1)},o.util.dataFromEquation2=function(t,e){var r=e||6;return n.range(0,360+r,r).map(function(e,r){var n=e*Math.PI/180;return[e,t(n)]})},o.util.dataFromEquation=function(t,e,r){var a=e||6,i=[],o=[];n.range(0,360+a,a).forEach(function(e,r){var n=e*Math.PI/180,a=t(n);i.push(e),o.push(a)});var s={t:i,r:o};return r&&(s.name=r),s},o.util.ensureArray=function(t,e){if("undefined"==typeof t)return null;var r=[].concat(t);return n.range(e).map(function(t,e){return r[e]||r[0]})},o.util.fillArrays=function(t,e,r){return e.forEach(function(e,n){t[e]=o.util.ensureArray(t[e],r)}),t},o.util.cloneJson=function(t){return JSON.parse(JSON.stringify(t))},o.util.validateKeys=function(t,e){"string"==typeof e&&(e=e.split("."));var r=e.shift();return t[r]&&(!e.length||objHasKeys(t[r],e))},o.util.sumArrays=function(t,e){return n.zip(t,e).map(function(t,e){return n.sum(t)})},o.util.arrayLast=function(t){return t[t.length-1]},o.util.arrayEqual=function(t,e){for(var r=Math.max(t.length,e.length,1);r-- >=0&&t[r]===e[r];);return-2===r},o.util.flattenArray=function(t){for(var e=[];!o.util.arrayEqual(e,t);)e=t,t=[].concat.apply([],t);return t},o.util.deduplicate=function(t){return t.filter(function(t,e,r){return r.indexOf(t)==e})},o.util.convertToCartesian=function(t,e){var r=e*Math.PI/180;return[t*Math.cos(r),t*Math.sin(r)]},o.util.round=function(t,e){var r=e||2,n=Math.pow(10,r);return Math.round(t*n)/n},o.util.getMousePos=function(t){var e=n.mouse(t.node()),r=e[0],a=e[1],i={};return i.x=r,i.y=a,i.pos=e,i.angle=180*(Math.atan2(a,r)+Math.PI)/Math.PI,i.radius=Math.sqrt(r*r+a*a),i},o.util.duplicatesCount=function(t){for(var e,r={},n={},a=0,i=t.length;a<i;a++)(e=t[a])in r?(r[e]++,n[e]=r[e]):r[e]=1;return n},o.util.duplicates=function(t){return Object.keys(o.util.duplicatesCount(t))},o.util.translator=function(t,e,r,n){if(n){var a=r.slice();r=e,e=a}var i=e.reduce(function(t,e){if("undefined"!=typeof t)return t[e]},t);"undefined"!=typeof i&&(e.reduce(function(t,r,n){if("undefined"!=typeof t)return n===e.length-1&&delete t[r],t[r]},t),r.reduce(function(t,e,n){return"undefined"==typeof t[e]&&(t[e]={}),n===r.length-1&&(t[e]=i),t[e]},t))},o.PolyChart=function(){var t=[o.PolyChart.defaultConfig()],e=n.dispatch("hover"),r={solid:"none",dash:[5,2],dot:[2,5]};function i(){var e=t[0].geometryConfig,a=e.container;"string"==typeof a&&(a=n.select(a)),a.datum(t).each(function(t,a){var i=!!t[0].data.yStack,o=t.map(function(t,e){return i?n.zip(t.data.t[0],t.data.r[0],t.data.yStack[0]):n.zip(t.data.t[0],t.data.r[0])}),s=e.angularScale,l=e.radialScale.domain()[0],c={bar:function(r,a,i){var o=t[i].data,l=e.radialScale(r[1])-e.radialScale(0),c=e.radialScale(r[2]||0),u=o.barWidth;n.select(this).attr({class:"mark bar",d:"M"+[[l+c,-u/2],[l+c,u/2],[c,u/2],[c,-u/2]].join("L")+"Z",transform:function(t,r){return"rotate("+(e.orientation+s(t[0]))+")"}})}};c.dot=function(r,a,i){var o=r[2]?[r[0],r[1]+r[2]]:r,s=n.svg.symbol().size(t[i].data.dotSize).type(t[i].data.dotType)(r,a);n.select(this).attr({class:"mark dot",d:s,transform:function(t,r){var n,a,i,s=(n=function(t,r){var n=e.radialScale(t[1]),a=(e.angularScale(t[0])+e.orientation)*Math.PI/180;return{r:n,t:a}}(o),a=n.r*Math.cos(n.t),i=n.r*Math.sin(n.t),{x:a,y:i});return"translate("+[s.x,s.y]+")"}})};var u=n.svg.line.radial().interpolate(t[0].data.lineInterpolation).radius(function(t){return e.radialScale(t[1])}).angle(function(t){return e.angularScale(t[0])*Math.PI/180});c.line=function(r,a,i){var s=r[2]?o[i].map(function(t,e){return[t[0],t[1]+t[2]]}):o[i];if(n.select(this).each(c.dot).style({opacity:function(e,r){return+t[i].data.dotVisible},fill:d.stroke(r,a,i)}).attr({class:"mark dot"}),!(a>0)){var l=n.select(this.parentNode).selectAll("path.line").data([0]);l.enter().insert("path"),l.attr({class:"line",d:u(s),transform:function(t,r){return"rotate("+(e.orientation+90)+")"},"pointer-events":"none"}).style({fill:function(t,e){return d.fill(r,a,i)},"fill-opacity":0,stroke:function(t,e){return d.stroke(r,a,i)},"stroke-width":function(t,e){return d["stroke-width"](r,a,i)},"stroke-dasharray":function(t,e){return d["stroke-dasharray"](r,a,i)},opacity:function(t,e){return d.opacity(r,a,i)},display:function(t,e){return d.display(r,a,i)}})}};var h=e.angularScale.range(),f=Math.abs(h[1]-h[0])/o[0].length*Math.PI/180,p=n.svg.arc().startAngle(function(t){return-f/2}).endAngle(function(t){return f/2}).innerRadius(function(t){return e.radialScale(l+(t[2]||0))}).outerRadius(function(t){return e.radialScale(l+(t[2]||0))+e.radialScale(t[1])});c.arc=function(t,r,a){n.select(this).attr({class:"mark arc",d:p,transform:function(t,r){return"rotate("+(e.orientation+s(t[0])+90)+")"}})};var d={fill:function(e,r,n){return t[n].data.color},stroke:function(e,r,n){return t[n].data.strokeColor},"stroke-width":function(e,r,n){return t[n].data.strokeSize+"px"},"stroke-dasharray":function(e,n,a){return r[t[a].data.strokeDash]},opacity:function(e,r,n){return t[n].data.opacity},display:function(e,r,n){return"undefined"==typeof t[n].data.visible||t[n].data.visible?"block":"none"}},g=n.select(this).selectAll("g.layer").data(o);g.enter().append("g").attr({class:"layer"});var v=g.selectAll("path.mark").data(function(t,e){return t});v.enter().append("path").attr({class:"mark"}),v.style(d).each(c[e.geometryType]),v.exit().remove(),g.exit().remove()})}return i.config=function(e){return arguments.length?(e.forEach(function(e,r){t[r]||(t[r]={}),a(t[r],o.PolyChart.defaultConfig()),a(t[r],e)}),this):t},i.getColorScale=function(){},n.rebind(i,e,"on"),i},o.PolyChart.defaultConfig=function(){return{data:{name:"geom1",t:[[1,2,3,4]],r:[[1,2,3,4]],dotType:"circle",dotSize:64,dotVisible:!1,barWidth:20,color:"#ffa500",strokeSize:1,strokeColor:"silver",strokeDash:"solid",opacity:1,index:0,visible:!0,visibleInLegend:!0},geometryConfig:{geometry:"LinePlot",geometryType:"arc",direction:"clockwise",orientation:0,container:"body",radialScale:null,angularScale:null,colorScale:n.scale.category20()}}},o.BarChart=function(){return o.PolyChart()},o.BarChart.defaultConfig=function(){return{geometryConfig:{geometryType:"bar"}}},o.AreaChart=function(){return o.PolyChart()},o.AreaChart.defaultConfig=function(){return{geometryConfig:{geometryType:"arc"}}},o.DotPlot=function(){return o.PolyChart()},o.DotPlot.defaultConfig=function(){return{geometryConfig:{geometryType:"dot",dotType:"circle"}}},o.LinePlot=function(){return o.PolyChart()},o.LinePlot.defaultConfig=function(){return{geometryConfig:{geometryType:"line"}}},o.Legend=function(){var t=o.Legend.defaultConfig(),e=n.dispatch("hover");function r(){var e=t.legendConfig,i=t.data.map(function(t,r){return[].concat(t).map(function(t,n){var i=a({},e.elements[r]);return i.name=t,i.color=[].concat(e.elements[r].color)[n],i})}),o=n.merge(i);o=o.filter(function(t,r){return e.elements[r]&&(e.elements[r].visibleInLegend||"undefined"==typeof e.elements[r].visibleInLegend)}),e.reverseOrder&&(o=o.reverse());var s=e.container;("string"==typeof s||s.nodeName)&&(s=n.select(s));var l=o.map(function(t,e){return t.color}),c=e.fontSize,u=null==e.isContinuous?"number"==typeof o[0]:e.isContinuous,h=u?e.height:c*o.length,f=s.classed("legend-group",!0).selectAll("svg").data([0]),p=f.enter().append("svg").attr({width:300,height:h+c,xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",version:"1.1"});p.append("g").classed("legend-axis",!0),p.append("g").classed("legend-marks",!0);var d=n.range(o.length),g=n.scale[u?"linear":"ordinal"]().domain(d).range(l),v=n.scale[u?"linear":"ordinal"]().domain(d)[u?"range":"rangePoints"]([0,h]);if(u){var m=f.select(".legend-marks").append("defs").append("linearGradient").attr({id:"grad1",x1:"0%",y1:"0%",x2:"0%",y2:"100%"}).selectAll("stop").data(l);m.enter().append("stop"),m.attr({offset:function(t,e){return e/(l.length-1)*100+"%"}}).style({"stop-color":function(t,e){return t}}),f.append("rect").classed("legend-mark",!0).attr({height:e.height,width:e.colorBandWidth,fill:"url(#grad1)"})}else{var y=f.select(".legend-marks").selectAll("path.legend-mark").data(o);y.enter().append("path").classed("legend-mark",!0),y.attr({transform:function(t,e){return"translate("+[c/2,v(e)+c/2]+")"},d:function(t,e){var r,a,i,o=t.symbol;return i=3*(a=c),"line"===(r=o)?"M"+[[-a/2,-a/12],[a/2,-a/12],[a/2,a/12],[-a/2,a/12]]+"Z":-1!=n.svg.symbolTypes.indexOf(r)?n.svg.symbol().type(r).size(i)():n.svg.symbol().type("square").size(i)()},fill:function(t,e){return g(e)}}),y.exit().remove()}var x=n.svg.axis().scale(v).orient("right"),b=f.select("g.legend-axis").attr({transform:"translate("+[u?e.colorBandWidth:c,c/2]+")"}).call(x);return b.selectAll(".domain").style({fill:"none",stroke:"none"}),b.selectAll("line").style({fill:"none",stroke:u?e.textColor:"none"}),b.selectAll("text").style({fill:e.textColor,"font-size":e.fontSize}).text(function(t,e){return o[e].name}),r}return r.config=function(e){return arguments.length?(a(t,e),this):t},n.rebind(r,e,"on"),r},o.Legend.defaultConfig=function(t,e){return{data:["a","b","c"],legendConfig:{elements:[{symbol:"line",color:"red"},{symbol:"square",color:"yellow"},{symbol:"diamond",color:"limegreen"}],height:150,colorBandWidth:30,fontSize:12,container:"body",isContinuous:null,textColor:"grey",reverseOrder:!1}}},o.tooltipPanel=function(){var t,e,r,i={container:null,hasTick:!1,fontSize:12,color:"white",padding:5},s="tooltip-"+o.tooltipPanel.uid++,l=10,c=function(){var n=(t=i.container.selectAll("g."+s).data([0])).enter().append("g").classed(s,!0).style({"pointer-events":"none",display:"none"});return r=n.append("path").style({fill:"white","fill-opacity":.9}).attr({d:"M0 0"}),e=n.append("text").attr({dx:i.padding+l,dy:.3*+i.fontSize}),c};return c.text=function(a){var o=n.hsl(i.color).l,s=o>=.5?"#aaa":"white",u=o>=.5?"black":"white",h=a||"";e.style({fill:u,"font-size":i.fontSize+"px"}).text(h);var f=i.padding,p=e.node().getBBox(),d={fill:i.color,stroke:s,"stroke-width":"2px"},g=p.width+2*f+l,v=p.height+2*f;return r.attr({d:"M"+[[l,-v/2],[l,-v/4],[i.hasTick?0:l,0],[l,v/4],[l,v/2],[g,v/2],[g,-v/2]].join("L")+"Z"}).style(d),t.attr({transform:"translate("+[l,-v/2+2*f]+")"}),t.style({display:"block"}),c},c.move=function(e){if(t)return t.attr({transform:"translate("+[e[0],e[1]]+")"}).style({display:"block"}),c},c.hide=function(){if(t)return t.style({display:"none"}),c},c.show=function(){if(t)return t.style({display:"block"}),c},c.config=function(t){return a(i,t),c},c},o.tooltipPanel.uid=1,o.adapter={},o.adapter.plotly=function(){var t={convert:function(t,e){var r={};if(t.data&&(r.data=t.data.map(function(t,r){var n=a({},t);return[[n,["marker","color"],["color"]],[n,["marker","opacity"],["opacity"]],[n,["marker","line","color"],["strokeColor"]],[n,["marker","line","dash"],["strokeDash"]],[n,["marker","line","width"],["strokeSize"]],[n,["marker","symbol"],["dotType"]],[n,["marker","size"],["dotSize"]],[n,["marker","barWidth"],["barWidth"]],[n,["line","interpolation"],["lineInterpolation"]],[n,["showlegend"],["visibleInLegend"]]].forEach(function(t,r){o.util.translator.apply(null,t.concat(e))}),e||delete n.marker,e&&delete n.groupId,e?("LinePlot"===n.geometry?(n.type="scatter",!0===n.dotVisible?(delete n.dotVisible,n.mode="lines+markers"):n.mode="lines"):"DotPlot"===n.geometry?(n.type="scatter",n.mode="markers"):"AreaChart"===n.geometry?n.type="area":"BarChart"===n.geometry&&(n.type="bar"),delete n.geometry):("scatter"===n.type?"lines"===n.mode?n.geometry="LinePlot":"markers"===n.mode?n.geometry="DotPlot":"lines+markers"===n.mode&&(n.geometry="LinePlot",n.dotVisible=!0):"area"===n.type?n.geometry="AreaChart":"bar"===n.type&&(n.geometry="BarChart"),delete n.mode,delete n.type),n}),!e&&t.layout&&"stack"===t.layout.barmode)){var i=o.util.duplicates(r.data.map(function(t,e){return t.geometry}));r.data.forEach(function(t,e){var n=i.indexOf(t.geometry);-1!=n&&(r.data[e].groupId=n)})}if(t.layout){var s=a({},t.layout);if([[s,["plot_bgcolor"],["backgroundColor"]],[s,["showlegend"],["showLegend"]],[s,["radialaxis"],["radialAxis"]],[s,["angularaxis"],["angularAxis"]],[s.angularaxis,["showline"],["gridLinesVisible"]],[s.angularaxis,["showticklabels"],["labelsVisible"]],[s.angularaxis,["nticks"],["ticksCount"]],[s.angularaxis,["tickorientation"],["tickOrientation"]],[s.angularaxis,["ticksuffix"],["ticksSuffix"]],[s.angularaxis,["range"],["domain"]],[s.angularaxis,["endpadding"],["endPadding"]],[s.radialaxis,["showline"],["gridLinesVisible"]],[s.radialaxis,["tickorientation"],["tickOrientation"]],[s.radialaxis,["ticksuffix"],["ticksSuffix"]],[s.radialaxis,["range"],["domain"]],[s.angularAxis,["showline"],["gridLinesVisible"]],[s.angularAxis,["showticklabels"],["labelsVisible"]],[s.angularAxis,["nticks"],["ticksCount"]],[s.angularAxis,["tickorientation"],["tickOrientation"]],[s.angularAxis,["ticksuffix"],["ticksSuffix"]],[s.angularAxis,["range"],["domain"]],[s.angularAxis,["endpadding"],["endPadding"]],[s.radialAxis,["showline"],["gridLinesVisible"]],[s.radialAxis,["tickorientation"],["tickOrientation"]],[s.radialAxis,["ticksuffix"],["ticksSuffix"]],[s.radialAxis,["range"],["domain"]],[s.font,["outlinecolor"],["outlineColor"]],[s.legend,["traceorder"],["reverseOrder"]],[s,["labeloffset"],["labelOffset"]],[s,["defaultcolorrange"],["defaultColorRange"]]].forEach(function(t,r){o.util.translator.apply(null,t.concat(e))}),e?("undefined"!=typeof s.tickLength&&(s.angularaxis.ticklen=s.tickLength,delete s.tickLength),s.tickColor&&(s.angularaxis.tickcolor=s.tickColor,delete s.tickColor)):(s.angularAxis&&"undefined"!=typeof s.angularAxis.ticklen&&(s.tickLength=s.angularAxis.ticklen),s.angularAxis&&"undefined"!=typeof s.angularAxis.tickcolor&&(s.tickColor=s.angularAxis.tickcolor)),s.legend&&"boolean"!=typeof s.legend.reverseOrder&&(s.legend.reverseOrder="normal"!=s.legend.reverseOrder),s.legend&&"boolean"==typeof s.legend.traceorder&&(s.legend.traceorder=s.legend.traceorder?"reversed":"normal",delete s.legend.reverseOrder),s.margin&&"undefined"!=typeof s.margin.t){var l=["t","r","b","l","pad"],c=["top","right","bottom","left","pad"],u={};n.entries(s.margin).forEach(function(t,e){u[c[l.indexOf(t.key)]]=t.value}),s.margin=u}e&&(delete s.needsEndSpacing,delete s.minorTickColor,delete s.minorTicks,delete s.angularaxis.ticksCount,delete s.angularaxis.ticksCount,delete s.angularaxis.ticksStep,delete s.angularaxis.rewriteTicks,delete s.angularaxis.nticks,delete s.radialaxis.ticksCount,delete s.radialaxis.ticksCount,delete s.radialaxis.ticksStep,delete s.radialaxis.rewriteTicks,delete s.radialaxis.nticks),r.layout=s}return r}};return t}},{"../../../constants/alignment":686,"../../../lib":717,d3:165}],836:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../../lib"),i=t("../../../components/color"),o=t("./micropolar"),s=t("./undo_manager"),l=a.extendDeepAll,c=e.exports={};c.framework=function(t){var e,r,a,i,u,h=new s;function f(r,s){return s&&(u=s),n.select(n.select(u).node().parentNode).selectAll(".svg-container>*:not(.chart-root)").remove(),e=e?l(e,r):r,a||(a=o.Axis()),i=o.adapter.plotly().convert(e),a.config(i).render(u),t.data=e.data,t.layout=e.layout,c.fillLayout(t),e}return f.isPolar=!0,f.svg=function(){return a.svg()},f.getConfig=function(){return e},f.getLiveConfig=function(){return o.adapter.plotly().convert(a.getLiveConfig(),!0)},f.getLiveScales=function(){return{t:a.angularScale(),r:a.radialScale()}},f.setUndoPoint=function(){var t,n,a=this,i=o.util.cloneJson(e);t=i,n=r,h.add({undo:function(){n&&a(n)},redo:function(){a(t)}}),r=o.util.cloneJson(i)},f.undo=function(){h.undo()},f.redo=function(){h.redo()},f},c.fillLayout=function(t){var e=n.select(t).selectAll(".plot-container"),r=e.selectAll(".svg-container"),a=t.framework&&t.framework.svg&&t.framework.svg(),o={width:800,height:600,paper_bgcolor:i.background,_container:e,_paperdiv:r,_paper:a};t._fullLayout=l(o,t.layout)}},{"../../../components/color":591,"../../../lib":717,"./micropolar":835,"./undo_manager":837,d3:165}],837:[function(t,e,r){"use strict";e.exports=function(){var t,e=[],r=-1,n=!1;function a(t,e){return t?(n=!0,t[e](),n=!1,this):this}return{add:function(t){return n?this:(e.splice(r+1,e.length-r),e.push(t),r=e.length-1,this)},setCallback:function(e){t=e},undo:function(){var n=e[r];return n?(a(n,"undo"),r-=1,t&&t(n.undo),this):this},redo:function(){var n=e[r+1];return n?(a(n,"redo"),r+=1,t&&t(n.redo),this):this},clear:function(){e=[],r=-1},hasUndo:function(){return-1!==r},hasRedo:function(){return r<e.length-1},getCommands:function(){return e},getPreviousCommand:function(){return e[r-1]},getIndex:function(){return r}}}},{}],838:[function(t,e,r){"use strict";var n=t("d3"),a=t("tinycolor2"),i=t("../../registry"),o=t("../../lib"),s=t("../../components/color"),l=t("../../components/drawing"),c=t("../plots"),u=t("../../plots/cartesian/axes"),h=t("../cartesian/set_convert"),f=t("./set_convert"),p=t("../cartesian/autorange").doAutoRange,d=t("../cartesian/dragbox"),g=t("../../components/dragelement"),v=t("../../components/fx"),m=t("../../components/titles"),y=t("../cartesian/select").prepSelect,x=t("../cartesian/select").selectOnClick,b=t("../cartesian/select").clearSelect,_=t("../../lib/setcursor"),w=t("../../lib/clear_gl_canvases"),k=t("../../plot_api/subroutines").redrawReglTraces,T=t("../../constants/alignment").MID_SHIFT,M=t("./constants"),A=t("./helpers"),S=o._,E=o.mod,L=o.deg2rad,C=o.rad2deg;function P(t,e){this.id=e,this.gd=t,this._hasClipOnAxisFalse=null,this.vangles=null,this.radialAxisAngle=null,this.traceHash={},this.layers={},this.clipPaths={},this.clipIds={},this.viewInitial={};var r=t._fullLayout,n="clip"+r._uid+e;this.clipIds.forTraces=n+"-for-traces",this.clipPaths.forTraces=r._clips.append("clipPath").attr("id",this.clipIds.forTraces),this.clipPaths.forTraces.append("path"),this.framework=r._polarlayer.append("g").attr("class",e),this.radialTickLayout=null,this.angularTickLayout=null}var O=P.prototype;function z(t){var e=t.ticks+String(t.ticklen)+String(t.showticklabels);return"side"in t&&(e+=t.side),e}function I(t,e){return e[o.findIndexOfMin(e,function(e){return o.angleDist(t,e)})]}function D(t,e,r){return e?(t.attr("display",null),t.attr(r)):t&&t.attr("display","none"),t}function R(t,e){return"translate("+t+","+e+")"}function F(t){return"rotate("+t+")"}e.exports=function(t,e){return new P(t,e)},O.plot=function(t,e){var r=e[this.id];this._hasClipOnAxisFalse=!1;for(var n=0;n<t.length;n++){if(!1===t[n][0].trace.cliponaxis){this._hasClipOnAxisFalse=!0;break}}this.updateLayers(e,r),this.updateLayout(e,r),c.generalUpdatePerTraceModule(this.gd,this,t,r),this.updateFx(e,r)},O.updateLayers=function(t,e){var r=this.layers,a=e.radialaxis,i=e.angularaxis,o=M.layerNames,s=o.indexOf("frontplot"),l=o.slice(0,s),c="below traces"===i.layer,u="below traces"===a.layer;c&&l.push("angular-line"),u&&l.push("radial-line"),c&&l.push("angular-axis"),u&&l.push("radial-axis"),l.push("frontplot"),c||l.push("angular-line"),u||l.push("radial-line"),c||l.push("angular-axis"),u||l.push("radial-axis");var h=this.framework.selectAll(".polarsublayer").data(l,String);h.enter().append("g").attr("class",function(t){return"polarsublayer "+t}).each(function(t){var e=r[t]=n.select(this);switch(t){case"frontplot":e.append("g").classed("barlayer",!0),e.append("g").classed("scatterlayer",!0);break;case"backplot":e.append("g").classed("maplayer",!0);break;case"plotbg":r.bg=e.append("path");break;case"radial-grid":case"angular-grid":e.style("fill","none");break;case"radial-line":e.append("line").style("fill","none");break;case"angular-line":e.append("path").style("fill","none")}}),h.order()},O.updateLayout=function(t,e){var r=this.layers,n=t._size,a=e.radialaxis,i=e.angularaxis,o=e.domain.x,c=e.domain.y;this.xOffset=n.l+n.w*o[0],this.yOffset=n.t+n.h*(1-c[1]);var u=this.xLength=n.w*(o[1]-o[0]),h=this.yLength=n.h*(c[1]-c[0]),f=e.sector;this.sectorInRad=f.map(L);var p,d,g,v,m,y=this.sectorBBox=function(t){var e,r,n,a,i=t[0],o=t[1]-i,s=E(i,360),l=s+o,c=Math.cos(L(s)),u=Math.sin(L(s)),h=Math.cos(L(l)),f=Math.sin(L(l));a=s<=90&&l>=90||s>90&&l>=450?1:u<=0&&f<=0?0:Math.max(u,f);e=s<=180&&l>=180||s>180&&l>=540?-1:c>=0&&h>=0?0:Math.min(c,h);r=s<=270&&l>=270||s>270&&l>=630?-1:u>=0&&f>=0?0:Math.min(u,f);n=l>=360?1:c<=0&&h<=0?0:Math.max(c,h);return[e,r,n,a]}(f),x=y[2]-y[0],b=y[3]-y[1],_=h/u,w=Math.abs(b/x);_>w?(p=u,m=(h-(d=u*w))/n.h/2,g=[o[0],o[1]],v=[c[0]+m,c[1]-m]):(d=h,m=(u-(p=h/w))/n.w/2,g=[o[0]+m,o[1]-m],v=[c[0],c[1]]),this.xLength2=p,this.yLength2=d,this.xDomain2=g,this.yDomain2=v;var k=this.xOffset2=n.l+n.w*g[0],T=this.yOffset2=n.t+n.h*(1-v[1]),M=this.radius=p/x,A=this.innerRadius=e.hole*M,S=this.cx=k-M*y[0],C=this.cy=T+M*y[3],P=this.cxx=S-k,O=this.cyy=C-T;this.radialAxis=this.mockAxis(t,e,a,{_id:"x",side:{counterclockwise:"top",clockwise:"bottom"}[a.side],domain:[A/n.w,M/n.w]}),this.angularAxis=this.mockAxis(t,e,i,{side:"right",domain:[0,Math.PI],autorange:!1}),this.doAutoRange(t,e),this.updateAngularAxis(t,e),this.updateRadialAxis(t,e),this.updateRadialAxisTitle(t,e),this.xaxis=this.mockCartesianAxis(t,e,{_id:"x",domain:g}),this.yaxis=this.mockCartesianAxis(t,e,{_id:"y",domain:v});var z=this.pathSubplot();this.clipPaths.forTraces.select("path").attr("d",z).attr("transform",R(P,O)),r.frontplot.attr("transform",R(k,T)).call(l.setClipUrl,this._hasClipOnAxisFalse?null:this.clipIds.forTraces,this.gd),r.bg.attr("d",z).attr("transform",R(S,C)).call(s.fill,e.bgcolor)},O.mockAxis=function(t,e,r,n){var a=o.extendFlat({},r,n);return f(a,e,t),a},O.mockCartesianAxis=function(t,e,r){var n=this,a=r._id,i=o.extendFlat({type:"linear"},r);h(i,t);var s={x:[0,2],y:[1,3]};return i.setRange=function(){var t=n.sectorBBox,r=s[a],o=n.radialAxis._rl,l=(o[1]-o[0])/(1-e.hole);i.range=[t[r[0]]*l,t[r[1]]*l]},i.isPtWithinRange="x"===a?function(t){return n.isPtInside(t)}:function(){return!0},i.setRange(),i.setScale(),i},O.doAutoRange=function(t,e){var r=this.gd,n=this.radialAxis,a=e.radialaxis;n.setScale(),p(r,n);var i=n.range;a.range=i.slice(),a._input.range=i.slice(),n._rl=[n.r2l(i[0],null,"gregorian"),n.r2l(i[1],null,"gregorian")]},O.updateRadialAxis=function(t,e){var r=this,n=r.gd,a=r.layers,i=r.radius,l=r.innerRadius,c=r.cx,h=r.cy,f=e.radialaxis,p=E(e.sector[0],360),d=r.radialAxis,g=l<i;r.fillViewInitialKey("radialaxis.angle",f.angle),r.fillViewInitialKey("radialaxis.range",d.range.slice()),d.setGeometry(),"auto"===d.tickangle&&p>90&&p<=270&&(d.tickangle=180);var v=function(t){return"translate("+(d.l2p(t.x)+l)+",0)"},m=z(f);if(r.radialTickLayout!==m&&(a["radial-axis"].selectAll(".xtick").remove(),r.radialTickLayout=m),g){d.setScale();var y=u.calcTicks(d),x=u.clipEnds(d,y),b=u.getTickSigns(d)[2];u.drawTicks(n,d,{vals:y,layer:a["radial-axis"],path:u.makeTickPath(d,0,b),transFn:v,crisp:!1}),u.drawGrid(n,d,{vals:x,layer:a["radial-grid"],path:function(t){return r.pathArc(d.r2p(t.x)+l)},transFn:o.noop,crisp:!1}),u.drawLabels(n,d,{vals:y,layer:a["radial-axis"],transFn:v,labelFns:u.makeLabelFns(d,0)})}var _=r.radialAxisAngle=r.vangles?C(I(L(f.angle),r.vangles)):f.angle,w=R(c,h),k=w+F(-_);D(a["radial-axis"],g&&(f.showticklabels||f.ticks),{transform:k}),D(a["radial-grid"],g&&f.showgrid,{transform:w}),D(a["radial-line"].select("line"),g&&f.showline,{x1:l,y1:0,x2:i,y2:0,transform:k}).attr("stroke-width",f.linewidth).call(s.stroke,f.linecolor)},O.updateRadialAxisTitle=function(t,e,r){var n=this.gd,a=this.radius,i=this.cx,o=this.cy,s=e.radialaxis,c=this.id+"title",u=void 0!==r?r:this.radialAxisAngle,h=L(u),f=Math.cos(h),p=Math.sin(h),d=0;if(s.title){var g=l.bBox(this.layers["radial-axis"].node()).height,v=s.title.font.size;d="counterclockwise"===s.side?-g-.4*v:g+.8*v}this.layers["radial-axis-title"]=m.draw(n,c,{propContainer:s,propName:this.id+".radialaxis.title",placeholder:S(n,"Click to enter radial axis title"),attributes:{x:i+a/2*f+d*p,y:o-a/2*p+d*f,"text-anchor":"middle"},transform:{rotate:-u}})},O.updateAngularAxis=function(t,e){var r=this,n=r.gd,a=r.layers,i=r.radius,l=r.innerRadius,c=r.cx,h=r.cy,f=e.angularaxis,p=r.angularAxis;r.fillViewInitialKey("angularaxis.rotation",f.rotation),p.setGeometry(),p.setScale();var d=function(t){return p.t2g(t.x)};"linear"===p.type&&"radians"===p.thetaunit&&(p.tick0=C(p.tick0),p.dtick=C(p.dtick));var g=function(t){return R(c+i*Math.cos(t),h-i*Math.sin(t))},v=u.makeLabelFns(p,0).labelStandoff,m={xFn:function(t){var e=d(t);return Math.cos(e)*v},yFn:function(t){var e=d(t),r=Math.sin(e)>0?.2:1;return-Math.sin(e)*(v+t.fontSize*r)+Math.abs(Math.cos(e))*(t.fontSize*T)},anchorFn:function(t){var e=d(t),r=Math.cos(e);return Math.abs(r)<.1?"middle":r>0?"start":"end"},heightFn:function(t,e,r){var n=d(t);return-.5*(1+Math.sin(n))*r}},y=z(f);r.angularTickLayout!==y&&(a["angular-axis"].selectAll("."+p._id+"tick").remove(),r.angularTickLayout=y);var x,b=u.calcTicks(p);if("linear"===e.gridshape?(x=b.map(d),o.angleDelta(x[0],x[1])<0&&(x=x.slice().reverse())):x=null,r.vangles=x,"category"===p.type&&(b=b.filter(function(t){return o.isAngleInsideSector(d(t),r.sectorInRad)})),p.visible){var _="inside"===p.ticks?-1:1,w=(p.linewidth||1)/2;u.drawTicks(n,p,{vals:b,layer:a["angular-axis"],path:"M"+_*w+",0h"+_*p.ticklen,transFn:function(t){var e=d(t);return g(e)+F(-C(e))},crisp:!1}),u.drawGrid(n,p,{vals:b,layer:a["angular-grid"],path:function(t){var e=d(t),r=Math.cos(e),n=Math.sin(e);return"M"+[c+l*r,h-l*n]+"L"+[c+i*r,h-i*n]},transFn:o.noop,crisp:!1}),u.drawLabels(n,p,{vals:b,layer:a["angular-axis"],repositionOnUpdate:!0,transFn:function(t){return g(d(t))},labelFns:m})}D(a["angular-line"].select("path"),f.showline,{d:r.pathSubplot(),transform:R(c,h)}).attr("stroke-width",f.linewidth).call(s.stroke,f.linecolor)},O.updateFx=function(t,e){this.gd._context.staticPlot||(this.updateAngularDrag(t),this.updateRadialDrag(t,e,0),this.updateRadialDrag(t,e,1),this.updateMainDrag(t))},O.updateMainDrag=function(t){var e=this,r=e.gd,o=e.layers,s=t._zoomlayer,l=M.MINZOOM,c=M.OFFEDGE,u=e.radius,h=e.innerRadius,f=e.cx,p=e.cy,m=e.cxx,_=e.cyy,w=e.sectorInRad,k=e.vangles,T=e.radialAxis,S=A.clampTiny,E=A.findXYatLength,L=A.findEnclosingVertexAngles,C=M.cornerHalfWidth,P=M.cornerLen/2,O=d.makeDragger(o,"path","maindrag","crosshair");n.select(O).attr("d",e.pathSubplot()).attr("transform",R(f,p));var z,I,D,F,B,N,j,V,U,q={element:O,gd:r,subplot:e.id,plotinfo:{id:e.id,xaxis:e.xaxis,yaxis:e.yaxis},xaxes:[e.xaxis],yaxes:[e.yaxis]};function H(t,e){return Math.sqrt(t*t+e*e)}function G(t,e){return H(t-m,e-_)}function Y(t,e){return Math.atan2(_-e,t-m)}function W(t,e){return[t*Math.cos(e),t*Math.sin(-e)]}function X(t,r){if(0===t)return e.pathSector(2*C);var n=P/t,a=r-n,i=r+n,o=Math.max(0,Math.min(t,u)),s=o-C,l=o+C;return"M"+W(s,a)+"A"+[s,s]+" 0,0,0 "+W(s,i)+"L"+W(l,i)+"A"+[l,l]+" 0,0,1 "+W(l,a)+"Z"}function Z(t,r,n){if(0===t)return e.pathSector(2*C);var a,i,o=W(t,r),s=W(t,n),l=S((o[0]+s[0])/2),c=S((o[1]+s[1])/2);if(l&&c){var u=c/l,h=-1/u,f=E(C,u,l,c);a=E(P,h,f[0][0],f[0][1]),i=E(P,h,f[1][0],f[1][1])}else{var p,d;c?(p=P,d=C):(p=C,d=P),a=[[l-p,c-d],[l+p,c-d]],i=[[l-p,c+d],[l+p,c+d]]}return"M"+a.join("L")+"L"+i.reverse().join("L")+"Z"}function J(t,e){return e=Math.max(Math.min(e,u),h),t<c?t=0:u-t<c?t=u:e<c?e=0:u-e<c&&(e=u),Math.abs(e-t)>l?(t<e?(D=t,F=e):(D=e,F=t),!0):(D=null,F=null,!1)}function K(t,e){t=t||B,e=e||"M0,0Z",V.attr("d",t),U.attr("d",e),d.transitionZoombox(V,U,N,j),N=!0;var n={};rt(n),r.emit("plotly_relayouting",n)}function Q(t,r){var n,a,i=z+t,o=I+r,s=G(z,I),l=Math.min(G(i,o),u),c=Y(z,I);J(s,l)&&(n=B+e.pathSector(F),D&&(n+=e.pathSector(D)),a=X(D,c)+X(F,c)),K(n,a)}function $(t,e,r,n){var a=A.findIntersectionXY(r,n,r,[t-m,_-e]);return H(a[0],a[1])}function tt(t,r){var n,a,i=z+t,o=I+r,s=Y(z,I),l=Y(i,o),c=L(s,k),h=L(l,k);J($(z,I,c[0],c[1]),Math.min($(i,o,h[0],h[1]),u))&&(n=B+e.pathSector(F),D&&(n+=e.pathSector(D)),a=[Z(D,c[0],c[1]),Z(F,c[0],c[1])].join(" ")),K(n,a)}function et(){if(d.removeZoombox(r),null!==D&&null!==F){var t={};rt(t),d.showDoubleClickNotifier(r),i.call("_guiRelayout",r,t)}}function rt(t){var r=T._rl,n=(r[1]-r[0])/(1-h/u)/u,a=[r[0]+(D-h)*n,r[0]+(F-h)*n];t[e.id+".radialaxis.range"]=a}function nt(t,n){var a=r._fullLayout.clickmode;if(d.removeZoombox(r),2===t){var o={};for(var s in e.viewInitial)o[e.id+"."+s]=e.viewInitial[s];r.emit("plotly_doubleclick",null),i.call("_guiRelayout",r,o)}a.indexOf("select")>-1&&1===t&&x(n,r,[e.xaxis],[e.yaxis],e.id,q),a.indexOf("event")>-1&&v.click(r,n,e.id)}q.prepFn=function(t,n,i){var o=r._fullLayout.dragmode,l=O.getBoundingClientRect();if(z=n-l.left,I=i-l.top,k){var c=A.findPolygonOffset(u,w[0],w[1],k);z+=m+c[0],I+=_+c[1]}switch(o){case"zoom":q.moveFn=k?tt:Q,q.clickFn=nt,q.doneFn=et,function(){D=null,F=null,B=e.pathSubplot(),N=!1;var t=r._fullLayout[e.id];j=a(t.bgcolor).getLuminance(),(V=d.makeZoombox(s,j,f,p,B)).attr("fill-rule","evenodd"),U=d.makeCorners(s,f,p),b(r)}();break;case"select":case"lasso":y(t,n,i,q,o)}},O.onmousemove=function(t){v.hover(r,t,e.id),r._fullLayout._lasthover=O,r._fullLayout._hoversubplot=e.id},O.onmouseout=function(t){r._dragging||g.unhover(r,t)},g.init(q)},O.updateRadialDrag=function(t,e,r){var a=this,s=a.gd,l=a.layers,c=a.radius,u=a.innerRadius,h=a.cx,f=a.cy,p=a.radialAxis,v=M.radialDragBoxSize,m=v/2;if(p.visible){var y,x,_,T=L(a.radialAxisAngle),A=p._rl,S=A[0],E=A[1],P=A[r],O=.75*(A[1]-A[0])/(1-e.hole)/c;r?(y=h+(c+m)*Math.cos(T),x=f-(c+m)*Math.sin(T),_="radialdrag"):(y=h+(u-m)*Math.cos(T),x=f-(u-m)*Math.sin(T),_="radialdrag-inner");var z,B,N,j=d.makeRectDragger(l,_,"crosshair",-m,-m,v,v),V={element:j,gd:s};D(n.select(j),p.visible&&u<c,{transform:R(y,x)}),V.prepFn=function(){z=null,B=null,N=null,V.moveFn=U,V.doneFn=q,b(s)},V.clampFn=function(t,e){return Math.sqrt(t*t+e*e)<M.MINDRAG&&(t=0,e=0),[t,e]},g.init(V)}function U(t,e){if(z)z(t,e);else{var n=[t,-e],i=[Math.cos(T),Math.sin(T)],l=Math.abs(o.dot(n,i)/Math.sqrt(o.dot(n,n)));isNaN(l)||(z=l<.5?H:G)}var c={};!function(t){null!==B?t[a.id+".radialaxis.angle"]=B:null!==N&&(t[a.id+".radialaxis.range["+r+"]"]=N)}(c),s.emit("plotly_relayouting",c)}function q(){null!==B?i.call("_guiRelayout",s,a.id+".radialaxis.angle",B):null!==N&&i.call("_guiRelayout",s,a.id+".radialaxis.range["+r+"]",N)}function H(t,e){if(0!==r){var n=y+t,i=x+e;B=Math.atan2(f-i,n-h),a.vangles&&(B=I(B,a.vangles)),B=C(B);var o=R(h,f)+F(-B);l["radial-axis"].attr("transform",o),l["radial-line"].select("line").attr("transform",o);var s=a.gd._fullLayout,c=s[a.id];a.updateRadialAxisTitle(s,c,B)}}function G(t,e){var n=o.dot([t,-e],[Math.cos(T),Math.sin(T)]);if(N=P-O*n,O>0==(r?N>S:N<E)){var l=s._fullLayout,c=l[a.id];p.range[r]=N,p._rl[r]=N,a.updateRadialAxis(l,c),a.xaxis.setRange(),a.xaxis.setScale(),a.yaxis.setRange(),a.yaxis.setScale();var u=!1;for(var h in a.traceHash){var f=a.traceHash[h],d=o.filterVisible(f);f[0][0].trace._module.plot(s,a,d,c),i.traceIs(h,"gl")&&d.length&&(u=!0)}u&&(w(s),k(s))}else N=null}},O.updateAngularDrag=function(t){var e=this,r=e.gd,a=e.layers,s=e.radius,c=e.angularAxis,u=e.cx,h=e.cy,f=e.cxx,p=e.cyy,v=M.angularDragBoxSize,m=d.makeDragger(a,"path","angulardrag","move"),y={element:m,gd:r};function x(t,e){return Math.atan2(p+v-e,t-f-v)}n.select(m).attr("d",e.pathAnnulus(s,s+v)).attr("transform",R(u,h)).call(_,"move");var T,A,S,E,L,P,O=a.frontplot.select(".scatterlayer").selectAll(".trace"),z=O.selectAll(".point"),I=O.selectAll(".textpoint");function D(t,s){var d=e.gd._fullLayout,g=d[e.id],v=x(T+t,A+s),m=C(v-P);if(E=S+m,a.frontplot.attr("transform",R(e.xOffset2,e.yOffset2)+F([-m,f,p])),e.vangles){L=e.radialAxisAngle+m;var y=R(u,h)+F(-m),b=R(u,h)+F(-L);a.bg.attr("transform",y),a["radial-grid"].attr("transform",y),a["radial-axis"].attr("transform",b),a["radial-line"].select("line").attr("transform",b),e.updateRadialAxisTitle(d,g,L)}else e.clipPaths.forTraces.select("path").attr("transform",R(f,p)+F(m));z.each(function(){var t=n.select(this),e=l.getTranslate(t);t.attr("transform",R(e.x,e.y)+F([m]))}),I.each(function(){var t=n.select(this),e=t.select("text"),r=l.getTranslate(t);t.attr("transform",F([m,e.attr("x"),e.attr("y")])+R(r.x,r.y))}),c.rotation=o.modHalf(E,360),e.updateAngularAxis(d,g),e._hasClipOnAxisFalse&&!o.isFullCircle(e.sectorInRad)&&O.call(l.hideOutsideRangePoints,e);var _=!1;for(var M in e.traceHash)if(i.traceIs(M,"gl")){var D=e.traceHash[M],N=o.filterVisible(D);D[0][0].trace._module.plot(r,e,N,g),N.length&&(_=!0)}_&&(w(r),k(r));var j={};B(j),r.emit("plotly_relayouting",j)}function B(t){t[e.id+".angularaxis.rotation"]=E,e.vangles&&(t[e.id+".radialaxis.angle"]=L)}function N(){I.select("text").attr("transform",null);var t={};B(t),i.call("_guiRelayout",r,t)}y.prepFn=function(n,a,i){var o=t[e.id];S=o.angularaxis.rotation;var s=m.getBoundingClientRect();T=a-s.left,A=i-s.top,P=x(T,A),y.moveFn=D,y.doneFn=N,b(r)},e.vangles&&!o.isFullCircle(e.sectorInRad)&&(y.prepFn=o.noop,_(n.select(m),null)),g.init(y)},O.isPtInside=function(t){var e=this.sectorInRad,r=this.vangles,n=this.angularAxis.c2g(t.theta),a=this.radialAxis,i=a.c2l(t.r),s=a._rl;return(r?A.isPtInsidePolygon:o.isPtInsideSector)(i,n,s,e,r)},O.pathArc=function(t){var e=this.sectorInRad,r=this.vangles;return(r?A.pathPolygon:o.pathArc)(t,e[0],e[1],r)},O.pathSector=function(t){var e=this.sectorInRad,r=this.vangles;return(r?A.pathPolygon:o.pathSector)(t,e[0],e[1],r)},O.pathAnnulus=function(t,e){var r=this.sectorInRad,n=this.vangles;return(n?A.pathPolygonAnnulus:o.pathAnnulus)(t,e,r[0],r[1],n)},O.pathSubplot=function(){var t=this.innerRadius,e=this.radius;return t?this.pathAnnulus(t,e):this.pathSector(e)},O.fillViewInitialKey=function(t,e){t in this.viewInitial||(this.viewInitial[t]=e)}},{"../../components/color":591,"../../components/dragelement":609,"../../components/drawing":612,"../../components/fx":630,"../../components/titles":679,"../../constants/alignment":686,"../../lib":717,"../../lib/clear_gl_canvases":702,"../../lib/setcursor":737,"../../plot_api/subroutines":756,"../../plots/cartesian/axes":765,"../../registry":846,"../cartesian/autorange":764,"../cartesian/dragbox":773,"../cartesian/select":782,"../cartesian/set_convert":783,"../plots":826,"./constants":827,"./helpers":828,"./set_convert":839,d3:165,tinycolor2:535}],839:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../cartesian/set_convert"),i=n.deg2rad,o=n.rad2deg;e.exports=function(t,e,r){switch(a(t,r),t._id){case"x":case"radialaxis":!function(t,e){var r=e._subplot;t.setGeometry=function(){var e=t._rl[0],n=t._rl[1],a=r.innerRadius,i=(r.radius-a)/(n-e),o=a/i,s=e>n?function(t){return t<=0}:function(t){return t>=0};t.c2g=function(r){var n=t.c2l(r)-e;return(s(n)?n:0)+o},t.g2c=function(r){return t.l2c(r+e-o)},t.g2p=function(t){return t*i},t.c2p=function(e){return t.g2p(t.c2g(e))}}}(t,e);break;case"angularaxis":!function(t,e){var r=t.type;if("linear"===r){var a=t.d2c,s=t.c2d;t.d2c=function(t,e){return function(t,e){return"degrees"===e?i(t):t}(a(t),e)},t.c2d=function(t,e){return s(function(t,e){return"degrees"===e?o(t):t}(t,e))}}t.makeCalcdata=function(e,a){var i,o,s=e[a],l=e._length,c=function(r){return t.d2c(r,e.thetaunit)};if(s){if(n.isTypedArray(s)&&"linear"===r){if(l===s.length)return s;if(s.subarray)return s.subarray(0,l)}for(i=new Array(l),o=0;o<l;o++)i[o]=c(s[o])}else{var u=a+"0",h="d"+a,f=u in e?c(e[u]):0,p=e[h]?c(e[h]):(t.period||2*Math.PI)/l;for(i=new Array(l),o=0;o<l;o++)i[o]=f+o*p}return i},t.setGeometry=function(){var a,s,l,c,u=e.sector,h=u.map(i),f={clockwise:-1,counterclockwise:1}[t.direction],p=i(t.rotation),d=function(t){return f*t+p},g=function(t){return(t-p)/f};switch(r){case"linear":s=a=n.identity,c=i,l=o,t.range=n.isFullCircle(h)?[u[0],u[0]+360]:h.map(g).map(o);break;case"category":var v=t._categories.length,m=t.period?Math.max(t.period,v):v;0===m&&(m=1),s=c=function(t){return 2*t*Math.PI/m},a=l=function(t){return t*m/Math.PI/2},t.range=[0,m]}t.c2g=function(t){return d(s(t))},t.g2c=function(t){return a(g(t))},t.t2g=function(t){return d(c(t))},t.g2t=function(t){return l(g(t))}}}(t,e)}}},{"../../lib":717,"../cartesian/set_convert":783}],840:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../plot_api/plot_template"),i=t("./domain").defaults;e.exports=function(t,e,r,o){var s,l,c=o.type,u=o.attributes,h=o.handleDefaults,f=o.partition||"x",p=e._subplots[c],d=p.length,g=d&&p[0].replace(/\d+$/,"");function v(t,e){return n.coerce(s,l,u,t,e)}for(var m=0;m<d;m++){var y=p[m];s=t[y]?t[y]:t[y]={},l=a.newContainer(e,y,g),v("uirevision",e.uirevision);var x={};x[f]=[m/d,(m+1)/d],i(l,e,v,x),o.id=y,h(s,l,v,o)}}},{"../lib":717,"../plot_api/plot_template":755,"./domain":790}],841:[function(t,e,r){"use strict";['Variables are inserted using %{variable}, for example "y: %{y}".','Numbers are formatted using d3-format\'s syntax %{variable:d3-format}, for example "Price: %{y:$.2f}".',t("../constants/docs").FORMAT_LINK,"for details on the formatting syntax.",'Dates are formatted using d3-time-format\'s syntax %{variable|d3-time-format}, for example "Day: %{2019-01-01|%A}".',t("../constants/docs").DATE_FORMAT_LINK,"for details on the date formatting syntax."].join(" ");function n(t){var e=t.description?" "+t.description:"",r=t.keys||[];if(r.length>0){for(var n=[],a=0;a<r.length;a++)n[a]="`"+r[a]+"`";e+="Finally, the template string has access to ",e=1===r.length?"variable "+n[0]:"variables "+n.slice(0,-1).join(", ")+" and "+n.slice(-1)+"."}return e}r.hovertemplateAttrs=function(t,e){t=t||{};n(e=e||{});var r={valType:"string",dflt:"",editType:t.editType||"none"};return!1!==t.arrayOk&&(r.arrayOk=!0),r},r.texttemplateAttrs=function(t,e){t=t||{};n(e=e||{});var r={valType:"string",dflt:"",editType:t.editType||"calc"};return!1!==t.arrayOk&&(r.arrayOk=!0),r}},{"../constants/docs":688}],842:[function(t,e,r){"use strict";var n=t("./ternary"),a=t("../../plots/get_data").getSubplotCalcData,i=t("../../lib").counterRegex;r.name="ternary";var o=r.attr="subplot";r.idRoot="ternary",r.idRegex=r.attrRegex=i("ternary"),(r.attributes={})[o]={valType:"subplotid",dflt:"ternary",editType:"calc"},r.layoutAttributes=t("./layout_attributes"),r.supplyLayoutDefaults=t("./layout_defaults"),r.plot=function(t){for(var e=t._fullLayout,r=t.calcdata,i=e._subplots.ternary,o=0;o<i.length;o++){var s=i[o],l=a(r,"ternary",s),c=e[s]._subplot;c||(c=new n({id:s,graphDiv:t,container:e._ternarylayer.node()},e),e[s]._subplot=c),c.plot(l,e,t._promises)}},r.clean=function(t,e,r,n){for(var a=n._subplots.ternary||[],i=0;i<a.length;i++){var o=a[i],s=n[o]._subplot;!e[o]&&s&&(s.plotContainer.remove(),s.clipDef.remove(),s.clipDefRelative.remove(),s.layers["a-title"].remove(),s.layers["b-title"].remove(),s.layers["c-title"].remove())}}},{"../../lib":717,"../../plots/get_data":800,"./layout_attributes":843,"./layout_defaults":844,"./ternary":845}],843:[function(t,e,r){"use strict";var n=t("../../components/color/attributes"),a=t("../domain").attributes,i=t("../cartesian/layout_attributes"),o=t("../../plot_api/edit_types").overrideAll,s=t("../../lib/extend").extendFlat,l={title:{text:i.title.text,font:i.title.font},color:i.color,tickmode:i.tickmode,nticks:s({},i.nticks,{dflt:6,min:1}),tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,showticklabels:i.showticklabels,showtickprefix:i.showtickprefix,tickprefix:i.tickprefix,showticksuffix:i.showticksuffix,ticksuffix:i.ticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,separatethousands:i.separatethousands,tickfont:i.tickfont,tickangle:i.tickangle,tickformat:i.tickformat,tickformatstops:i.tickformatstops,hoverformat:i.hoverformat,showline:s({},i.showline,{dflt:!0}),linecolor:i.linecolor,linewidth:i.linewidth,showgrid:s({},i.showgrid,{dflt:!0}),gridcolor:i.gridcolor,gridwidth:i.gridwidth,layer:i.layer,min:{valType:"number",dflt:0,min:0},_deprecated:{title:i._deprecated.title,titlefont:i._deprecated.titlefont}},c=e.exports=o({domain:a({name:"ternary"}),bgcolor:{valType:"color",dflt:n.background},sum:{valType:"number",dflt:1,min:0},aaxis:l,baxis:l,caxis:l},"plot","from-root");c.uirevision={valType:"any",editType:"none"},c.aaxis.uirevision=c.baxis.uirevision=c.caxis.uirevision={valType:"any",editType:"none"}},{"../../components/color/attributes":590,"../../lib/extend":708,"../../plot_api/edit_types":748,"../cartesian/layout_attributes":777,"../domain":790}],844:[function(t,e,r){"use strict";var n=t("../../components/color"),a=t("../../plot_api/plot_template"),i=t("../../lib"),o=t("../subplot_defaults"),s=t("../cartesian/tick_label_defaults"),l=t("../cartesian/tick_mark_defaults"),c=t("../cartesian/tick_value_defaults"),u=t("../cartesian/line_grid_defaults"),h=t("./layout_attributes"),f=["aaxis","baxis","caxis"];function p(t,e,r,i){var o,s,l,c=r("bgcolor"),u=r("sum");i.bgColor=n.combine(c,i.paper_bgcolor);for(var h=0;h<f.length;h++)s=t[o=f[h]]||{},(l=a.newContainer(e,o))._name=o,d(s,l,i,e);var p=e.aaxis,g=e.baxis,v=e.caxis;p.min+g.min+v.min>=u&&(p.min=0,g.min=0,v.min=0,t.aaxis&&delete t.aaxis.min,t.baxis&&delete t.baxis.min,t.caxis&&delete t.caxis.min)}function d(t,e,r,n){var a=h[e._name];function o(r,n){return i.coerce(t,e,a,r,n)}o("uirevision",n.uirevision),e.type="linear";var f=o("color"),p=f!==a.color.dflt?f:r.font.color,d=e._name.charAt(0).toUpperCase(),g="Component "+d,v=o("title.text",g);e._hovertitle=v===g?v:d,i.coerceFont(o,"title.font",{family:r.font.family,size:Math.round(1.2*r.font.size),color:p}),o("min"),c(t,e,o,"linear"),s(t,e,o,"linear",{}),l(t,e,o,{outerTicks:!0}),o("showticklabels")&&(i.coerceFont(o,"tickfont",{family:r.font.family,size:r.font.size,color:p}),o("tickangle"),o("tickformat")),u(t,e,o,{dfltColor:f,bgColor:r.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:a}),o("hoverformat"),o("layer")}e.exports=function(t,e,r){o(t,e,r,{type:"ternary",attributes:h,handleDefaults:p,font:e.font,paper_bgcolor:e.paper_bgcolor})}},{"../../components/color":591,"../../lib":717,"../../plot_api/plot_template":755,"../cartesian/line_grid_defaults":779,"../cartesian/tick_label_defaults":784,"../cartesian/tick_mark_defaults":785,"../cartesian/tick_value_defaults":786,"../subplot_defaults":840,"./layout_attributes":843}],845:[function(t,e,r){"use strict";var n=t("d3"),a=t("tinycolor2"),i=t("../../registry"),o=t("../../lib"),s=o._,l=t("../../components/color"),c=t("../../components/drawing"),u=t("../cartesian/set_convert"),h=t("../../lib/extend").extendFlat,f=t("../plots"),p=t("../cartesian/axes"),d=t("../../components/dragelement"),g=t("../../components/fx"),v=t("../../components/titles"),m=t("../cartesian/select").prepSelect,y=t("../cartesian/select").selectOnClick,x=t("../cartesian/select").clearSelect,b=t("../cartesian/constants");function _(t,e){this.id=t.id,this.graphDiv=t.graphDiv,this.init(e),this.makeFramework(e),this.aTickLayout=null,this.bTickLayout=null,this.cTickLayout=null}e.exports=_;var w=_.prototype;w.init=function(t){this.container=t._ternarylayer,this.defs=t._defs,this.layoutId=t._uid,this.traceHash={},this.layers={}},w.plot=function(t,e){var r=e[this.id],n=e._size;this._hasClipOnAxisFalse=!1;for(var a=0;a<t.length;a++){if(!1===t[a][0].trace.cliponaxis){this._hasClipOnAxisFalse=!0;break}}this.updateLayers(r),this.adjustLayout(r,n),f.generalUpdatePerTraceModule(this.graphDiv,this,t,r),this.layers.plotbg.select("path").call(l.fill,r.bgcolor)},w.makeFramework=function(t){var e=this.graphDiv,r=t[this.id],n=this.clipId="clip"+this.layoutId+this.id,a=this.clipIdRelative="clip-relative"+this.layoutId+this.id;this.clipDef=o.ensureSingleById(t._clips,"clipPath",n,function(t){t.append("path").attr("d","M0,0Z")}),this.clipDefRelative=o.ensureSingleById(t._clips,"clipPath",a,function(t){t.append("path").attr("d","M0,0Z")}),this.plotContainer=o.ensureSingle(this.container,"g",this.id),this.updateLayers(r),c.setClipUrl(this.layers.backplot,n,e),c.setClipUrl(this.layers.grids,n,e)},w.updateLayers=function(t){var e=this.layers,r=["draglayer","plotbg","backplot","grids"];"below traces"===t.aaxis.layer&&r.push("aaxis","aline"),"below traces"===t.baxis.layer&&r.push("baxis","bline"),"below traces"===t.caxis.layer&&r.push("caxis","cline"),r.push("frontplot"),"above traces"===t.aaxis.layer&&r.push("aaxis","aline"),"above traces"===t.baxis.layer&&r.push("baxis","bline"),"above traces"===t.caxis.layer&&r.push("caxis","cline");var a=this.plotContainer.selectAll("g.toplevel").data(r,String),i=["agrid","bgrid","cgrid"];a.enter().append("g").attr("class",function(t){return"toplevel "+t}).each(function(t){var r=n.select(this);e[t]=r,"frontplot"===t?r.append("g").classed("scatterlayer",!0):"backplot"===t?r.append("g").classed("maplayer",!0):"plotbg"===t?r.append("path").attr("d","M0,0Z"):"aline"===t||"bline"===t||"cline"===t?r.append("path"):"grids"===t&&i.forEach(function(t){e[t]=r.append("g").classed("grid "+t,!0)})}),a.order()};var k=Math.sqrt(4/3);w.adjustLayout=function(t,e){var r,n,a,i,o,s,f=this,p=t.domain,d=(p.x[0]+p.x[1])/2,g=(p.y[0]+p.y[1])/2,v=p.x[1]-p.x[0],m=p.y[1]-p.y[0],y=v*e.w,x=m*e.h,b=t.sum,_=t.aaxis.min,w=t.baxis.min,T=t.caxis.min;y>k*x?a=(i=x)*k:i=(a=y)/k,o=v*a/y,s=m*i/x,r=e.l+e.w*d-a/2,n=e.t+e.h*(1-g)-i/2,f.x0=r,f.y0=n,f.w=a,f.h=i,f.sum=b,f.xaxis={type:"linear",range:[_+2*T-b,b-_-2*w],domain:[d-o/2,d+o/2],_id:"x"},u(f.xaxis,f.graphDiv._fullLayout),f.xaxis.setScale(),f.xaxis.isPtWithinRange=function(t){return t.a>=f.aaxis.range[0]&&t.a<=f.aaxis.range[1]&&t.b>=f.baxis.range[1]&&t.b<=f.baxis.range[0]&&t.c>=f.caxis.range[1]&&t.c<=f.caxis.range[0]},f.yaxis={type:"linear",range:[_,b-w-T],domain:[g-s/2,g+s/2],_id:"y"},u(f.yaxis,f.graphDiv._fullLayout),f.yaxis.setScale(),f.yaxis.isPtWithinRange=function(){return!0};var M=f.yaxis.domain[0],A=f.aaxis=h({},t.aaxis,{range:[_,b-w-T],side:"left",tickangle:(+t.aaxis.tickangle||0)-30,domain:[M,M+s*k],anchor:"free",position:0,_id:"y",_length:a});u(A,f.graphDiv._fullLayout),A.setScale();var S=f.baxis=h({},t.baxis,{range:[b-_-T,w],side:"bottom",domain:f.xaxis.domain,anchor:"free",position:0,_id:"x",_length:a});u(S,f.graphDiv._fullLayout),S.setScale();var E=f.caxis=h({},t.caxis,{range:[b-_-w,T],side:"right",tickangle:(+t.caxis.tickangle||0)+30,domain:[M,M+s*k],anchor:"free",position:0,_id:"y",_length:a});u(E,f.graphDiv._fullLayout),E.setScale();var L="M"+r+","+(n+i)+"h"+a+"l-"+a/2+",-"+i+"Z";f.clipDef.select("path").attr("d",L),f.layers.plotbg.select("path").attr("d",L);var C="M0,"+i+"h"+a+"l-"+a/2+",-"+i+"Z";f.clipDefRelative.select("path").attr("d",C);var P="translate("+r+","+n+")";f.plotContainer.selectAll(".scatterlayer,.maplayer").attr("transform",P),f.clipDefRelative.select("path").attr("transform",null);var O="translate("+(r-S._offset)+","+(n+i)+")";f.layers.baxis.attr("transform",O),f.layers.bgrid.attr("transform",O);var z="translate("+(r+a/2)+","+n+")rotate(30)translate(0,"+-A._offset+")";f.layers.aaxis.attr("transform",z),f.layers.agrid.attr("transform",z);var I="translate("+(r+a/2)+","+n+")rotate(-30)translate(0,"+-E._offset+")";f.layers.caxis.attr("transform",I),f.layers.cgrid.attr("transform",I),f.drawAxes(!0),f.layers.aline.select("path").attr("d",A.showline?"M"+r+","+(n+i)+"l"+a/2+",-"+i:"M0,0").call(l.stroke,A.linecolor||"#000").style("stroke-width",(A.linewidth||0)+"px"),f.layers.bline.select("path").attr("d",S.showline?"M"+r+","+(n+i)+"h"+a:"M0,0").call(l.stroke,S.linecolor||"#000").style("stroke-width",(S.linewidth||0)+"px"),f.layers.cline.select("path").attr("d",E.showline?"M"+(r+a/2)+","+n+"l"+a/2+","+i:"M0,0").call(l.stroke,E.linecolor||"#000").style("stroke-width",(E.linewidth||0)+"px"),f.graphDiv._context.staticPlot||f.initInteractions(),c.setClipUrl(f.layers.frontplot,f._hasClipOnAxisFalse?null:f.clipId,f.graphDiv)},w.drawAxes=function(t){var e=this.graphDiv,r=this.id.substr(7)+"title",n=this.layers,a=this.aaxis,i=this.baxis,o=this.caxis;if(this.drawAx(a),this.drawAx(i),this.drawAx(o),t){var l=Math.max(a.showticklabels?a.tickfont.size/2:0,(o.showticklabels?.75*o.tickfont.size:0)+("outside"===o.ticks?.87*o.ticklen:0)),c=(i.showticklabels?i.tickfont.size:0)+("outside"===i.ticks?i.ticklen:0)+3;n["a-title"]=v.draw(e,"a"+r,{propContainer:a,propName:this.id+".aaxis.title",placeholder:s(e,"Click to enter Component A title"),attributes:{x:this.x0+this.w/2,y:this.y0-a.title.font.size/3-l,"text-anchor":"middle"}}),n["b-title"]=v.draw(e,"b"+r,{propContainer:i,propName:this.id+".baxis.title",placeholder:s(e,"Click to enter Component B title"),attributes:{x:this.x0-c,y:this.y0+this.h+.83*i.title.font.size+c,"text-anchor":"middle"}}),n["c-title"]=v.draw(e,"c"+r,{propContainer:o,propName:this.id+".caxis.title",placeholder:s(e,"Click to enter Component C title"),attributes:{x:this.x0+this.w+c,y:this.y0+this.h+.83*o.title.font.size+c,"text-anchor":"middle"}})}},w.drawAx=function(t){var e,r=this.graphDiv,n=t._name,a=n.charAt(0),i=t._id,s=this.layers[n],l=a+"tickLayout",c=(e=t).ticks+String(e.ticklen)+String(e.showticklabels);this[l]!==c&&(s.selectAll("."+i+"tick").remove(),this[l]=c),t.setScale();var u=p.calcTicks(t),h=p.clipEnds(t,u),f=p.makeTransFn(t),d=p.getTickSigns(t)[2],g=o.deg2rad(30),v=d*(t.linewidth||1)/2,m=d*t.ticklen,y=this.w,x=this.h,b="b"===a?"M0,"+v+"l"+Math.sin(g)*m+","+Math.cos(g)*m:"M"+v+",0l"+Math.cos(g)*m+","+-Math.sin(g)*m,_={a:"M0,0l"+x+",-"+y/2,b:"M0,0l-"+y/2+",-"+x,c:"M0,0l-"+x+","+y/2}[a];p.drawTicks(r,t,{vals:"inside"===t.ticks?h:u,layer:s,path:b,transFn:f,crisp:!1}),p.drawGrid(r,t,{vals:h,layer:this.layers[a+"grid"],path:_,transFn:f,crisp:!1}),p.drawLabels(r,t,{vals:u,layer:s,transFn:f,labelFns:p.makeLabelFns(t,0,30)})};var T=b.MINZOOM/2+.87,M="m-0.87,.5h"+T+"v3h-"+(T+5.2)+"l"+(T/2+2.6)+",-"+(.87*T+4.5)+"l2.6,1.5l-"+T/2+","+.87*T+"Z",A="m0.87,.5h-"+T+"v3h"+(T+5.2)+"l-"+(T/2+2.6)+",-"+(.87*T+4.5)+"l-2.6,1.5l"+T/2+","+.87*T+"Z",S="m0,1l"+T/2+","+.87*T+"l2.6,-1.5l-"+(T/2+2.6)+",-"+(.87*T+4.5)+"l-"+(T/2+2.6)+","+(.87*T+4.5)+"l2.6,1.5l"+T/2+",-"+.87*T+"Z",E="m0.5,0.5h5v-2h-5v-5h-2v5h-5v2h5v5h2Z",L=!0;function C(t){n.select(t).selectAll(".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners").remove()}w.initInteractions=function(){var t,e,r,n,u,h,f,p,v,_,w=this,T=w.layers.plotbg.select("path").node(),P=w.graphDiv,O=P._fullLayout._zoomlayer,z={element:T,gd:P,plotinfo:{id:w.id,xaxis:w.xaxis,yaxis:w.yaxis},subplot:w.id,prepFn:function(i,o,s){z.xaxes=[w.xaxis],z.yaxes=[w.yaxis];var c=P._fullLayout.dragmode;z.minDrag="lasso"===c?1:void 0,"zoom"===c?(z.moveFn=N,z.clickFn=D,z.doneFn=j,function(i,o,s){var c=T.getBoundingClientRect();t=o-c.left,e=s-c.top,r={a:w.aaxis.range[0],b:w.baxis.range[1],c:w.caxis.range[1]},u=r,n=w.aaxis.range[1]-r.a,h=a(w.graphDiv._fullLayout[w.id].bgcolor).getLuminance(),f="M0,"+w.h+"L"+w.w/2+", 0L"+w.w+","+w.h+"Z",p=!1,v=O.append("path").attr("class","zoombox").attr("transform","translate("+w.x0+", "+w.y0+")").style({fill:h>.2?"rgba(0,0,0,0)":"rgba(255,255,255,0)","stroke-width":0}).attr("d",f),_=O.append("path").attr("class","zoombox-corners").attr("transform","translate("+w.x0+", "+w.y0+")").style({fill:l.background,stroke:l.defaultLine,"stroke-width":1,opacity:0}).attr("d","M0,0Z"),x(P)}(0,o,s)):"pan"===c?(z.moveFn=V,z.clickFn=D,z.doneFn=U,r={a:w.aaxis.range[0],b:w.baxis.range[1],c:w.caxis.range[1]},u=r,x(P)):"select"!==c&&"lasso"!==c||m(i,o,s,z,c)}};function I(t){var e={};return e[w.id+".aaxis.min"]=t.a,e[w.id+".baxis.min"]=t.b,e[w.id+".caxis.min"]=t.c,e}function D(t,e){var r=P._fullLayout.clickmode;C(P),2===t&&(P.emit("plotly_doubleclick",null),i.call("_guiRelayout",P,I({a:0,b:0,c:0}))),r.indexOf("select")>-1&&1===t&&y(e,P,[w.xaxis],[w.yaxis],w.id,z),r.indexOf("event")>-1&&g.click(P,e,w.id)}function R(t,e){return 1-e/w.h}function F(t,e){return 1-(t+(w.h-e)/Math.sqrt(3))/w.w}function B(t,e){return(t-(w.h-e)/Math.sqrt(3))/w.w}function N(a,i){var o=t+a,s=e+i,l=Math.max(0,Math.min(1,R(0,e),R(0,s))),c=Math.max(0,Math.min(1,F(t,e),F(o,s))),d=Math.max(0,Math.min(1,B(t,e),B(o,s))),g=(l/2+d)*w.w,m=(1-l/2-c)*w.w,y=(g+m)/2,x=m-g,T=(1-l)*w.h,L=T-x/k;x<b.MINZOOM?(u=r,v.attr("d",f),_.attr("d","M0,0Z")):(u={a:r.a+l*n,b:r.b+c*n,c:r.c+d*n},v.attr("d",f+"M"+g+","+T+"H"+m+"L"+y+","+L+"L"+g+","+T+"Z"),_.attr("d","M"+t+","+e+E+"M"+g+","+T+M+"M"+m+","+T+A+"M"+y+","+L+S)),p||(v.transition().style("fill",h>.2?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.3)").duration(200),_.transition().style("opacity",1).duration(200),p=!0),P.emit("plotly_relayouting",I(u))}function j(){C(P),u!==r&&(i.call("_guiRelayout",P,I(u)),L&&P.data&&P._context.showTips&&(o.notifier(s(P,"Double-click to zoom back out"),"long"),L=!1))}function V(t,e){var n=t/w.xaxis._m,a=e/w.yaxis._m,i=[(u={a:r.a-a,b:r.b+(n+a)/2,c:r.c-(n-a)/2}).a,u.b,u.c].sort(),o=i.indexOf(u.a),s=i.indexOf(u.b),l=i.indexOf(u.c);i[0]<0&&(i[1]+i[0]/2<0?(i[2]+=i[0]+i[1],i[0]=i[1]=0):(i[2]+=i[0]/2,i[1]+=i[0]/2,i[0]=0),u={a:i[o],b:i[s],c:i[l]},e=(r.a-u.a)*w.yaxis._m,t=(r.c-u.c-r.b+u.b)*w.xaxis._m);var h="translate("+(w.x0+t)+","+(w.y0+e)+")";w.plotContainer.selectAll(".scatterlayer,.maplayer").attr("transform",h);var f="translate("+-t+","+-e+")";w.clipDefRelative.select("path").attr("transform",f),w.aaxis.range=[u.a,w.sum-u.b-u.c],w.baxis.range=[w.sum-u.a-u.c,u.b],w.caxis.range=[w.sum-u.a-u.b,u.c],w.drawAxes(!1),w._hasClipOnAxisFalse&&w.plotContainer.select(".scatterlayer").selectAll(".trace").call(c.hideOutsideRangePoints,w),P.emit("plotly_relayouting",I(u))}function U(){i.call("_guiRelayout",P,I(u))}T.onmousemove=function(t){g.hover(P,t,w.id),P._fullLayout._lasthover=T,P._fullLayout._hoversubplot=w.id},T.onmouseout=function(t){P._dragging||d.unhover(P,t)},d.init(z)}},{"../../components/color":591,"../../components/dragelement":609,"../../components/drawing":612,"../../components/fx":630,"../../components/titles":679,"../../lib":717,"../../lib/extend":708,"../../registry":846,"../cartesian/axes":765,"../cartesian/constants":771,"../cartesian/select":782,"../cartesian/set_convert":783,"../plots":826,d3:165,tinycolor2:535}],846:[function(t,e,r){"use strict";var n=t("./lib/loggers"),a=t("./lib/noop"),i=t("./lib/push_unique"),o=t("./lib/is_plain_object"),s=t("./lib/dom").addStyleRule,l=t("./lib/extend"),c=t("./plots/attributes"),u=t("./plots/layout_attributes"),h=l.extendFlat,f=l.extendDeepAll;function p(t){var e=t.name,a=t.categories,i=t.meta;if(r.modules[e])n.log("Type "+e+" already registered");else{r.subplotsRegistry[t.basePlotModule.name]||function(t){var e=t.name;if(r.subplotsRegistry[e])return void n.log("Plot type "+e+" already registered.");for(var a in m(t),r.subplotsRegistry[e]=t,r.componentsRegistry)b(a,t.name)}(t.basePlotModule);for(var o={},l=0;l<a.length;l++)o[a[l]]=!0,r.allCategories[a[l]]=!0;for(var c in r.modules[e]={_module:t,categories:o},i&&Object.keys(i).length&&(r.modules[e].meta=i),r.allTypes.push(e),r.componentsRegistry)y(c,e);t.layoutAttributes&&h(r.traceLayoutAttributes,t.layoutAttributes);var u=t.basePlotModule,f=u.name;if("mapbox"===f){var p=u.constants.styleRules;for(var d in p)s(".js-plotly-plot .plotly .mapboxgl-"+d,p[d])}"geo"!==f&&"mapbox"!==f||void 0===typeof window||void 0!==window.PlotlyGeoAssets||(window.PlotlyGeoAssets={topojson:{}})}}function d(t){if("string"!=typeof t.name)throw new Error("Component module *name* must be a string.");var e=t.name;for(var n in r.componentsRegistry[e]=t,t.layoutAttributes&&(t.layoutAttributes._isLinkedToArray&&i(r.layoutArrayContainers,e),m(t)),r.modules)y(e,n);for(var a in r.subplotsRegistry)b(e,a);for(var o in r.transformsRegistry)x(e,o);t.schema&&t.schema.layout&&f(u,t.schema.layout)}function g(t){if("string"!=typeof t.name)throw new Error("Transform module *name* must be a string.");var e="Transform module "+t.name,a="function"==typeof t.transform,i="function"==typeof t.calcTransform;if(!a&&!i)throw new Error(e+" is missing a *transform* or *calcTransform* method.");for(var s in a&&i&&n.log([e+" has both a *transform* and *calcTransform* methods.","Please note that all *transform* methods are executed","before all *calcTransform* methods."].join(" ")),o(t.attributes)||n.log(e+" registered without an *attributes* object."),"function"!=typeof t.supplyDefaults&&n.log(e+" registered without a *supplyDefaults* method."),r.transformsRegistry[t.name]=t,r.componentsRegistry)x(s,t.name)}function v(t){var e=t.name,n=e.split("-")[0],a=t.dictionary,i=t.format,o=a&&Object.keys(a).length,s=i&&Object.keys(i).length,l=r.localeRegistry,c=l[e];if(c||(l[e]=c={}),n!==e){var u=l[n];u||(l[n]=u={}),o&&u.dictionary===c.dictionary&&(u.dictionary=a),s&&u.format===c.format&&(u.format=i)}o&&(c.dictionary=a),s&&(c.format=i)}function m(t){if(t.layoutAttributes){var e=t.layoutAttributes._arrayAttrRegexps;if(e)for(var n=0;n<e.length;n++)i(r.layoutArrayRegexes,e[n])}}function y(t,e){var n=r.componentsRegistry[t].schema;if(n&&n.traces){var a=n.traces[e];a&&f(r.modules[e]._module.attributes,a)}}function x(t,e){var n=r.componentsRegistry[t].schema;if(n&&n.transforms){var a=n.transforms[e];a&&f(r.transformsRegistry[e].attributes,a)}}function b(t,e){var n=r.componentsRegistry[t].schema;if(n&&n.subplots){var a=r.subplotsRegistry[e],i=a.layoutAttributes,o="subplot"===a.attr?a.name:a.attr;Array.isArray(o)&&(o=o[0]);var s=n.subplots[o];i&&s&&f(i,s)}}function _(t){return"object"==typeof t&&(t=t.type),t}r.modules={},r.allCategories={},r.allTypes=[],r.subplotsRegistry={},r.transformsRegistry={},r.componentsRegistry={},r.layoutArrayContainers=[],r.layoutArrayRegexes=[],r.traceLayoutAttributes={},r.localeRegistry={},r.apiMethodRegistry={},r.collectableSubplotTypes=null,r.register=function(t){if(r.collectableSubplotTypes=null,!t)throw new Error("No argument passed to Plotly.register.");t&&!Array.isArray(t)&&(t=[t]);for(var e=0;e<t.length;e++){var n=t[e];if(!n)throw new Error("Invalid module was attempted to be registered!");switch(n.moduleType){case"trace":p(n);break;case"transform":g(n);break;case"component":d(n);break;case"locale":v(n);break;case"apiMethod":var a=n.name;r.apiMethodRegistry[a]=n.fn;break;default:throw new Error("Invalid module was attempted to be registered!")}}},r.getModule=function(t){var e=r.modules[_(t)];return!!e&&e._module},r.traceIs=function(t,e){if("various"===(t=_(t)))return!1;var a=r.modules[t];return a||(t&&"area"!==t&&n.log("Unrecognized trace type "+t+"."),a=r.modules[c.type.dflt]),!!a.categories[e]},r.getTransformIndices=function(t,e){for(var r=[],n=t.transforms||[],a=0;a<n.length;a++)n[a].type===e&&r.push(a);return r},r.hasTransform=function(t,e){for(var r=t.transforms||[],n=0;n<r.length;n++)if(r[n].type===e)return!0;return!1},r.getComponentMethod=function(t,e){var n=r.componentsRegistry[t];return n&&n[e]||a},r.call=function(){var t=arguments[0],e=[].slice.call(arguments,1);return r.apiMethodRegistry[t].apply(null,e)}},{"./lib/dom":706,"./lib/extend":708,"./lib/is_plain_object":718,"./lib/loggers":721,"./lib/noop":726,"./lib/push_unique":731,"./plots/attributes":762,"./plots/layout_attributes":817}],847:[function(t,e,r){"use strict";var n=t("../registry"),a=t("../lib"),i=a.extendFlat,o=a.extendDeep;function s(t){var e;switch(t){case"themes__thumb":e={autosize:!0,width:150,height:150,title:{text:""},showlegend:!1,margin:{l:5,r:5,t:5,b:5,pad:0},annotations:[]};break;case"thumbnail":e={title:{text:""},hidesources:!0,showlegend:!1,borderwidth:0,bordercolor:"",margin:{l:1,r:1,t:1,b:1,pad:0},annotations:[]};break;default:e={}}return e}e.exports=function(t,e){var r;t.framework&&t.framework.isPolar&&(t=t.framework.getConfig());var a,l=t.data,c=t.layout,u=o([],l),h=o({},c,s(e.tileClass)),f=t._context||{};if(e.width&&(h.width=e.width),e.height&&(h.height=e.height),"thumbnail"===e.tileClass||"themes__thumb"===e.tileClass){h.annotations=[];var p=Object.keys(h);for(r=0;r<p.length;r++)a=p[r],["xaxis","yaxis","zaxis"].indexOf(a.slice(0,5))>-1&&(h[p[r]].title={text:""});for(r=0;r<u.length;r++){var d=u[r];d.showscale=!1,d.marker&&(d.marker.showscale=!1),n.traceIs(d,"pie-like")&&(d.textposition="none")}}if(Array.isArray(e.annotations))for(r=0;r<e.annotations.length;r++)h.annotations.push(e.annotations[r]);var g=Object.keys(h).filter(function(t){return t.match(/^scene\d*$/)});if(g.length){var v={};for("thumbnail"===e.tileClass&&(v={title:{text:""},showaxeslabels:!1,showticklabels:!1,linetickenable:!1}),r=0;r<g.length;r++){var m=h[g[r]];m.xaxis||(m.xaxis={}),m.yaxis||(m.yaxis={}),m.zaxis||(m.zaxis={}),i(m.xaxis,v),i(m.yaxis,v),i(m.zaxis,v),m._scene=null}}var y=document.createElement("div");e.tileClass&&(y.className=e.tileClass);var x={gd:y,td:y,layout:h,data:u,config:{staticPlot:void 0===e.staticPlot||e.staticPlot,plotGlPixelRatio:void 0===e.plotGlPixelRatio?2:e.plotGlPixelRatio,displaylogo:e.displaylogo||!1,showLink:e.showLink||!1,showTips:e.showTips||!1,mapboxAccessToken:f.mapboxAccessToken}};return"transparent"!==e.setBackground&&(x.config.setBackground=e.setBackground||"opaque"),x.gd.defaultLayout=s(e.tileClass),x}},{"../lib":717,"../registry":846}],848:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../plot_api/to_image"),i=t("./filesaver"),o=t("./helpers");e.exports=function(t,e){var r;return n.isPlainObject(t)||(r=n.getGraphDiv(t)),(e=e||{}).format=e.format||"png",e.imageDataOnly=!0,new Promise(function(s,l){r&&r._snapshotInProgress&&l(new Error("Snapshotting already in progress.")),n.isIE()&&"svg"!==e.format&&l(new Error(o.MSG_IE_BAD_FORMAT)),r&&(r._snapshotInProgress=!0);var c=a(t,e),u=e.filename||t.fn||"newplot";u+="."+e.format.replace("-","."),c.then(function(t){return r&&(r._snapshotInProgress=!1),i(t,u,e.format)}).then(function(t){s(t)}).catch(function(t){r&&(r._snapshotInProgress=!1),l(t)})})}},{"../lib":717,"../plot_api/to_image":758,"./filesaver":849,"./helpers":850}],849:[function(t,e,r){"use strict";var n=t("../lib"),a=t("./helpers");e.exports=function(t,e,r){var i=document.createElement("a"),o="download"in i;return new Promise(function(s,l){var c,u;if(n.isIE9orBelow()&&l(new Error("IE < 10 unsupported")),n.isSafari()){var h="svg"===r?",":";base64,";return a.octetStream(h+encodeURIComponent(t)),s(e)}return n.isIE()?(c=a.createBlob(t,"svg"),window.navigator.msSaveBlob(c,e),c=null,s(e)):o?(c=a.createBlob(t,r),u=a.createObjectURL(c),i.href=u,i.download=e,document.body.appendChild(i),i.click(),document.body.removeChild(i),a.revokeObjectURL(u),c=null,s(e)):void l(new Error("download error"))})}},{"../lib":717,"./helpers":850}],850:[function(t,e,r){"use strict";var n=t("../registry");r.getDelay=function(t){return t._has&&(t._has("gl3d")||t._has("gl2d")||t._has("mapbox"))?500:0},r.getRedrawFunc=function(t){return function(){var e=t._fullLayout||{};!(e._has&&e._has("polar"))&&t.data&&t.data[0]&&t.data[0].r||n.getComponentMethod("colorbar","draw")(t)}},r.encodeSVG=function(t){return"data:image/svg+xml,"+encodeURIComponent(t)},r.encodeJSON=function(t){return"data:application/json,"+encodeURIComponent(t)};var a=window.URL||window.webkitURL;r.createObjectURL=function(t){return a.createObjectURL(t)},r.revokeObjectURL=function(t){return a.revokeObjectURL(t)},r.createBlob=function(t,e){if("svg"===e)return new window.Blob([t],{type:"image/svg+xml;charset=utf-8"});if("full-json"===e)return new window.Blob([t],{type:"application/json;charset=utf-8"});var r=function(t){for(var e=t.length,r=new ArrayBuffer(e),n=new Uint8Array(r),a=0;a<e;a++)n[a]=t.charCodeAt(a);return r}(window.atob(t));return new window.Blob([r],{type:"image/"+e})},r.octetStream=function(t){document.location.href="data:application/octet-stream"+t},r.IMAGE_URL_PREFIX=/^data:image\/\w+;base64,/,r.MSG_IE_BAD_FORMAT="Sorry IE does not support downloading from canvas. Try {format:'svg'} instead."},{"../registry":846}],851:[function(t,e,r){"use strict";var n=t("./helpers"),a={getDelay:n.getDelay,getRedrawFunc:n.getRedrawFunc,clone:t("./cloneplot"),toSVG:t("./tosvg"),svgToImg:t("./svgtoimg"),toImage:t("./toimage"),downloadImage:t("./download")};e.exports=a},{"./cloneplot":847,"./download":848,"./helpers":850,"./svgtoimg":852,"./toimage":853,"./tosvg":854}],852:[function(t,e,r){"use strict";var n=t("../lib"),a=t("events").EventEmitter,i=t("./helpers");e.exports=function(t){var e=t.emitter||new a,r=new Promise(function(a,o){var s=window.Image,l=t.svg,c=t.format||"png";if(n.isIE()&&"svg"!==c){var u=new Error(i.MSG_IE_BAD_FORMAT);return o(u),t.promise?r:e.emit("error",u)}var h,f,p=t.canvas,d=t.scale||1,g=t.width||300,v=t.height||150,m=d*g,y=d*v,x=p.getContext("2d"),b=new s;"svg"===c||n.isIE9orBelow()||n.isSafari()?f=i.encodeSVG(l):(h=i.createBlob(l,"svg"),f=i.createObjectURL(h)),p.width=m,p.height=y,b.onload=function(){var r;switch(h=null,i.revokeObjectURL(f),"svg"!==c&&x.drawImage(b,0,0,m,y),c){case"jpeg":r=p.toDataURL("image/jpeg");break;case"png":r=p.toDataURL("image/png");break;case"webp":r=p.toDataURL("image/webp");break;case"svg":r=f;break;default:var n="Image format is not jpeg, png, svg or webp.";if(o(new Error(n)),!t.promise)return e.emit("error",n)}a(r),t.promise||e.emit("success",r)},b.onerror=function(r){if(h=null,i.revokeObjectURL(f),o(r),!t.promise)return e.emit("error",r)},b.src=f});return t.promise?r:e}},{"../lib":717,"./helpers":850,events:106}],853:[function(t,e,r){"use strict";var n=t("events").EventEmitter,a=t("../registry"),i=t("../lib"),o=t("./helpers"),s=t("./cloneplot"),l=t("./tosvg"),c=t("./svgtoimg");e.exports=function(t,e){var r=new n,u=s(t,{format:"png"}),h=u.gd;h.style.position="absolute",h.style.left="-5000px",document.body.appendChild(h);var f=o.getRedrawFunc(h);return a.call("plot",h,u.data,u.layout,u.config).then(f).then(function(){var t=o.getDelay(h._fullLayout);setTimeout(function(){var t=l(h),n=document.createElement("canvas");n.id=i.randstr(),(r=c({format:e.format,width:h._fullLayout.width,height:h._fullLayout.height,canvas:n,emitter:r,svg:t})).clean=function(){h&&document.body.removeChild(h)}},t)}).catch(function(t){r.emit("error",t)}),r}},{"../lib":717,"../registry":846,"./cloneplot":847,"./helpers":850,"./svgtoimg":852,"./tosvg":854,events:106}],854:[function(t,e,r){"use strict";var n=t("d3"),a=t("../lib"),i=t("../components/drawing"),o=t("../components/color"),s=t("../constants/xmlns_namespaces"),l=/"/g,c=new RegExp('("TOBESTRIPPED)|(TOBESTRIPPED")',"g");e.exports=function(t,e,r){var u,h=t._fullLayout,f=h._paper,p=h._toppaper,d=h.width,g=h.height;f.insert("rect",":first-child").call(i.setRect,0,0,d,g).call(o.fill,h.paper_bgcolor);var v=h._basePlotModules||[];for(u=0;u<v.length;u++){var m=v[u];m.toSVG&&m.toSVG(t)}if(p){var y=p.node().childNodes,x=Array.prototype.slice.call(y);for(u=0;u<x.length;u++){var b=x[u];b.childNodes.length&&f.node().appendChild(b)}}if(h._draggers&&h._draggers.remove(),f.node().style.background="",f.selectAll("text").attr({"data-unformatted":null,"data-math":null}).each(function(){var t=n.select(this);if("hidden"!==this.style.visibility&&"none"!==this.style.display){t.style({visibility:null,display:null});var e=this.style.fontFamily;e&&-1!==e.indexOf('"')&&t.style("font-family",e.replace(l,"TOBESTRIPPED"))}else t.remove()}),h._gradientUrlQueryParts){var _=[];for(var w in h._gradientUrlQueryParts)_.push(w);_.length&&f.selectAll(_.join(",")).each(function(){var t=n.select(this),e=this.style.fill;e&&-1!==e.indexOf("url(")&&t.style("fill",e.replace(l,"TOBESTRIPPED"));var r=this.style.stroke;r&&-1!==r.indexOf("url(")&&t.style("stroke",r.replace(l,"TOBESTRIPPED"))})}"pdf"!==e&&"eps"!==e||f.selectAll("#MathJax_SVG_glyphs path").attr("stroke-width",0),f.node().setAttributeNS(s.xmlns,"xmlns",s.svg),f.node().setAttributeNS(s.xmlns,"xmlns:xlink",s.xlink),"svg"===e&&r&&(f.attr("width",r*d),f.attr("height",r*g),f.attr("viewBox","0 0 "+d+" "+g));var k=(new window.XMLSerializer).serializeToString(f.node());return k=function(t){var e=n.select("body").append("div").style({display:"none"}).html(""),r=t.replace(/(&[^;]*;)/gi,function(t){return"&lt;"===t?"&#60;":"&rt;"===t?"&#62;":-1!==t.indexOf("<")||-1!==t.indexOf(">")?"":e.html(t).text()});return e.remove(),r}(k),k=(k=k.replace(/&(?!\w+;|\#[0-9]+;| \#x[0-9A-F]+;)/g,"&amp;")).replace(c,"'"),a.isIE()&&(k=(k=(k=k.replace(/"/gi,"'")).replace(/(\('#)([^']*)('\))/gi,'("#$2")')).replace(/(\\')/gi,'"')),k}},{"../components/color":591,"../components/drawing":612,"../constants/xmlns_namespaces":694,"../lib":717,d3:165}],855:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,"tx"),n.mergeArray(e.hovertext,t,"htx");var a=e.marker;if(a){n.mergeArray(a.opacity,t,"mo",!0),n.mergeArray(a.color,t,"mc");var i=a.line;i&&(n.mergeArray(i.color,t,"mlc"),n.mergeArrayCastPositive(i.width,t,"mlw"))}}},{"../../lib":717}],856:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../../plots/template_attributes").texttemplateAttrs,o=t("../../components/colorscale/attributes"),s=t("../../plots/font_attributes"),l=t("./constants"),c=t("../../lib/extend").extendFlat,u=s({editType:"calc",arrayOk:!0,colorEditType:"style"}),h=c({},n.marker.line.width,{dflt:0}),f=c({width:h,editType:"calc"},o("marker.line")),p=c({line:f,editType:"calc"},o("marker"),{opacity:{valType:"number",arrayOk:!0,dflt:1,min:0,max:1,editType:"style"}});e.exports={x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,text:n.text,texttemplate:i({editType:"plot"},{keys:l.eventDataKeys}),hovertext:n.hovertext,hovertemplate:a({},{keys:l.eventDataKeys}),textposition:{valType:"enumerated",values:["inside","outside","auto","none"],dflt:"none",arrayOk:!0,editType:"calc"},insidetextanchor:{valType:"enumerated",values:["end","middle","start"],dflt:"end",editType:"plot"},textangle:{valType:"angle",dflt:"auto",editType:"plot"},textfont:c({},u,{}),insidetextfont:c({},u,{}),outsidetextfont:c({},u,{}),constraintext:{valType:"enumerated",values:["inside","outside","both","none"],dflt:"both",editType:"calc"},cliponaxis:c({},n.cliponaxis,{}),orientation:{valType:"enumerated",values:["v","h"],editType:"calc+clearAxisTypes"},base:{valType:"any",dflt:null,arrayOk:!0,editType:"calc"},offset:{valType:"number",dflt:null,arrayOk:!0,editType:"calc"},width:{valType:"number",dflt:null,min:0,arrayOk:!0,editType:"calc"},marker:p,offsetgroup:{valType:"string",dflt:"",editType:"calc"},alignmentgroup:{valType:"string",dflt:"",editType:"calc"},selected:{marker:{opacity:n.selected.marker.opacity,color:n.selected.marker.color,editType:"style"},textfont:n.selected.textfont,editType:"style"},unselected:{marker:{opacity:n.unselected.marker.opacity,color:n.unselected.marker.color,editType:"style"},textfont:n.unselected.textfont,editType:"style"},r:n.r,t:n.t,_deprecated:{bardir:{valType:"enumerated",editType:"calc",values:["v","h"]}}}},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/font_attributes":791,"../../plots/template_attributes":841,"../scatter/attributes":1120,"./constants":858}],857:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../components/colorscale/helpers").hasColorscale,i=t("../../components/colorscale/calc"),o=t("./arrays_to_calcdata"),s=t("../scatter/calc_selection");e.exports=function(t,e){var r,l,c=n.getFromId(t,e.xaxis||"x"),u=n.getFromId(t,e.yaxis||"y");"h"===e.orientation?(r=c.makeCalcdata(e,"x"),l=u.makeCalcdata(e,"y")):(r=u.makeCalcdata(e,"y"),l=c.makeCalcdata(e,"x"));for(var h=Math.min(l.length,r.length),f=new Array(h),p=0;p<h;p++)f[p]={p:l[p],s:r[p]},e.ids&&(f[p].id=String(e.ids[p]));return a(e,"marker")&&i(t,e,{vals:e.marker.color,containerStr:"marker",cLetter:"c"}),a(e,"marker.line")&&i(t,e,{vals:e.marker.line.color,containerStr:"marker.line",cLetter:"c"}),o(f,e),s(f,e),f}},{"../../components/colorscale/calc":599,"../../components/colorscale/helpers":602,"../../plots/cartesian/axes":765,"../scatter/calc_selection":1122,"./arrays_to_calcdata":855}],858:[function(t,e,r){"use strict";e.exports={TEXTPAD:3,eventDataKeys:["value","label"]}},{}],859:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib").isArrayOrTypedArray,i=t("../../constants/numerical").BADNUM,o=t("../../registry"),s=t("../../plots/cartesian/axes"),l=t("../../plots/cartesian/axis_ids").getAxisGroup,c=t("./sieve.js");function u(t,e,r,o,u){if(o.length){var b,_,w,k;switch(function(t,e){var r,i;for(r=0;r<e.length;r++){var o,s=e[r],l=s[0].trace,c="funnel"===l.type?l._base:l.base,u="h"===l.orientation?l.xcalendar:l.ycalendar,h="category"===t.type||"multicategory"===t.type?function(){return null}:t.d2c;if(a(c)){for(i=0;i<Math.min(c.length,s.length);i++)o=h(c[i],0,u),n(o)?(s[i].b=+o,s[i].hasB=1):s[i].b=0;for(;i<s.length;i++)s[i].b=0}else{o=h(c,0,u);var f=n(o);for(o=f?o:0,i=0;i<s.length;i++)s[i].b=o,f&&(s[i].hasB=1)}}}(r,o),u.mode){case"overlay":h(e,r,o,u);break;case"group":for(b=[],_=[],w=0;w<o.length;w++)void 0===(k=o[w])[0].trace.offset?_.push(k):b.push(k);_.length&&function(t,e,r,n,a){var o=new c(n,{sepNegVal:!1,overlapNoMerge:!a.norm});(function(t,e,r,n){for(var a=t._fullLayout,i=r.positions,o=r.distinctPositions,s=r.minDiff,c=r.traces,u=c.length,h=i.length!==o.length,f=s*(1-n.gap),v=l(a,e._id)+c[0][0].trace.orientation,m=a._alignmentOpts[v]||{},y=0;y<u;y++){var x,b,_=c[y],w=_[0].trace,k=m[w.alignmentgroup]||{},T=Object.keys(k.offsetGroups||{}).length,M=(x=T?f/T:h?f/u:f)*(1-(n.groupgap||0));b=T?((2*w._offsetIndex+1-T)*x-M)/2:h?((2*y+1-u)*x-M)/2:-M/2;var A=_[0].t;A.barwidth=M,A.poffset=b,A.bargroupwidth=f,A.bardelta=s}r.binWidth=c[0][0].t.barwidth/100,p(r),d(e,r),g(e,r,h)})(t,e,o,a),function(t){for(var e=t.traces,r=0;r<e.length;r++){var n=e[r],a=n[0].trace;if(void 0===a.base)for(var o=new c([n],{sepNegVal:!0,overlapNoMerge:!0}),s=0;s<n.length;s++){var l=n[s];if(l.p!==i){var u=o.put(l.p,l.b+l.s);u&&(l.b=u)}}}}(o),a.norm?(m(o),y(r,o,a)):v(r,o)}(t,e,r,_,u),b.length&&h(e,r,b,u);break;case"stack":case"relative":for(b=[],_=[],w=0;w<o.length;w++)void 0===(k=o[w])[0].trace.base?_.push(k):b.push(k);_.length&&function(t,e,r,n,a){var o=new c(n,{sepNegVal:"relative"===a.mode,overlapNoMerge:!(a.norm||"stack"===a.mode||"relative"===a.mode)});f(e,o,a),function(t,e,r){var n,a,o,l,c,u,h=x(t),f=e.traces;for(l=0;l<f.length;l++)if(n=f[l],"funnel"===(a=n[0].trace).type)for(c=0;c<n.length;c++)(u=n[c]).s!==i&&e.put(u.p,-.5*u.s);for(l=0;l<f.length;l++){n=f[l],a=n[0].trace,o="funnel"===a.type;var p=[];for(c=0;c<n.length;c++)if((u=n[c]).s!==i){var d;d=o?u.s:u.s+u.b;var g=e.put(u.p,d),v=g+d;u.b=g,u[h]=v,r.norm||(p.push(v),u.hasB&&p.push(g))}r.norm||(a._extremes[t._id]=s.findExtremes(t,p,{tozero:!0,padded:!0}))}}(r,o,a);for(var l=0;l<n.length;l++)for(var u=n[l],h=0;h<u.length;h++){var p=u[h];if(p.s!==i){var d=p.b+p.s===o.get(p.p,p.s);d&&(p._outmost=!0)}}a.norm&&y(r,o,a)}(0,e,r,_,u),b.length&&h(e,r,b,u)}!function(t,e){var r,a,i,o=x(e),s={},l=1/0,c=-1/0;for(r=0;r<t.length;r++)for(i=t[r],a=0;a<i.length;a++){var u=i[a].p;n(u)&&(l=Math.min(l,u),c=Math.max(c,u))}var h=1e4/(c-l),f=s.round=function(t){return String(Math.round(h*(t-l)))};for(r=0;r<t.length;r++){(i=t[r])[0].t.extents=s;var p=i[0].t.poffset,d=Array.isArray(p);for(a=0;a<i.length;a++){var g=i[a],v=g[o]-g.w/2;if(n(v)){var m=g[o]+g.w/2,y=f(g.p);s[y]?s[y]=[Math.min(v,s[y][0]),Math.max(m,s[y][1])]:s[y]=[v,m]}g.p0=g.p+(d?p[a]:p),g.p1=g.p0+g.w,g.s0=g.b,g.s1=g.s0+g.s}}}(o,e)}}function h(t,e,r,n){for(var a=0;a<r.length;a++){var i=r[a],o=new c([i],{sepNegVal:!1,overlapNoMerge:!n.norm});f(t,o,n),n.norm?(m(o),y(e,o,n)):v(e,o)}}function f(t,e,r){for(var n=e.minDiff,a=e.traces,i=n*(1-r.gap),o=i*(1-(r.groupgap||0)),s=-o/2,l=0;l<a.length;l++){var c=a[l][0].t;c.barwidth=o,c.poffset=s,c.bargroupwidth=i,c.bardelta=n}e.binWidth=a[0][0].t.barwidth/100,p(e),d(t,e),g(t,e)}function p(t){var e,r,i=t.traces;for(e=0;e<i.length;e++){var o,s=i[e],l=s[0],c=l.trace,u=l.t,h=c._offset||c.offset,f=u.poffset;if(a(h)){for(o=Array.prototype.slice.call(h,0,s.length),r=0;r<o.length;r++)n(o[r])||(o[r]=f);for(r=o.length;r<s.length;r++)o.push(f);u.poffset=o}else void 0!==h&&(u.poffset=h);var p=c._width||c.width,d=u.barwidth;if(a(p)){var g=Array.prototype.slice.call(p,0,s.length);for(r=0;r<g.length;r++)n(g[r])||(g[r]=d);for(r=g.length;r<s.length;r++)g.push(d);if(u.barwidth=g,void 0===h){for(o=[],r=0;r<s.length;r++)o.push(f+(d-g[r])/2);u.poffset=o}}else void 0!==p&&(u.barwidth=p,void 0===h&&(u.poffset=f+(d-p)/2))}}function d(t,e){for(var r=e.traces,n=x(t),a=0;a<r.length;a++)for(var i=r[a],o=i[0].t,s=o.poffset,l=Array.isArray(s),c=o.barwidth,u=Array.isArray(c),h=0;h<i.length;h++){var f=i[h],p=f.w=u?c[h]:c;f[n]=f.p+(l?s[h]:s)+p/2}}function g(t,e,r){var n=e.traces,a=e.minDiff/2;s.minDtick(t,e.minDiff,e.distinctPositions[0],r);for(var i=0;i<n.length;i++){var o,l,c,u,h=n[i],f=h[0],p=f.trace,d=[];for(u=0;u<h.length;u++)l=(o=h[u]).p-a,c=o.p+a,d.push(l,c);if(p.width||p.offset){var g=f.t,v=g.poffset,m=g.barwidth,y=Array.isArray(v),x=Array.isArray(m);for(u=0;u<h.length;u++){o=h[u];var b=y?v[u]:v,_=x?m[u]:m;c=(l=o.p+b)+_,d.push(l,c)}}p._extremes[t._id]=s.findExtremes(t,d,{padded:!1})}}function v(t,e){for(var r=e.traces,n=x(t),a=0;a<r.length;a++){for(var i=r[a],o=i[0].trace,l=[],c=!0,u=0;u<i.length;u++){var h=i[u],f=h.b,p=f+h.s;h[n]=p,l.push(p),h.hasB&&l.push(f),h.hasB&&h.b>0&&h.s>0||(c=!1)}o._extremes[t._id]=s.findExtremes(t,l,{tozero:!c,padded:!0})}}function m(t){for(var e=t.traces,r=0;r<e.length;r++)for(var n=e[r],a=0;a<n.length;a++){var o=n[a];o.s!==i&&t.put(o.p,o.b+o.s)}}function y(t,e,r){var a=e.traces,o=x(t),l="fraction"===r.norm?1:100,c=l/1e9,u=t.l2c(t.c2l(0)),h="stack"===r.mode?l:u;function f(e){return n(t.c2l(e))&&(e<u-c||e>h+c||!n(u))}for(var p=0;p<a.length;p++){for(var d=a[p],g=d[0].trace,v=[],m=!0,y=!1,b=0;b<d.length;b++){var _=d[b];if(_.s!==i){var w=Math.abs(l/e.get(_.p,_.s));_.b*=w,_.s*=w;var k=_.b,T=k+_.s;_[o]=T,v.push(T),y=y||f(T),_.hasB&&(v.push(k),y=y||f(k)),_.hasB&&_.b>0&&_.s>0||(m=!1)}}g._extremes[t._id]=s.findExtremes(t,v,{tozero:!m,padded:y})}}function x(t){return t._id.charAt(0)}e.exports={crossTraceCalc:function(t,e){for(var r=e.xaxis,n=e.yaxis,a=t._fullLayout,i=t._fullData,s=t.calcdata,l=[],c=[],h=0;h<i.length;h++){var f=i[h];if(!0===f.visible&&o.traceIs(f,"bar")&&f.xaxis===r._id&&f.yaxis===n._id&&("h"===f.orientation?l.push(s[h]):c.push(s[h]),f._computePh))for(var p=t.calcdata[h],d=0;d<p.length;d++)"function"==typeof p[d].ph0&&(p[d].ph0=p[d].ph0()),"function"==typeof p[d].ph1&&(p[d].ph1=p[d].ph1())}var g={mode:a.barmode,norm:a.barnorm,gap:a.bargap,groupgap:a.bargroupgap};u(t,r,n,c,g),u(t,n,r,l,g)},setGroupPositions:u}},{"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/axes":765,"../../plots/cartesian/axis_ids":768,"../../registry":846,"./sieve.js":869,"fast-isnumeric":228}],860:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/color"),i=t("../../registry"),o=t("../scatter/xy_defaults"),s=t("./style_defaults"),l=t("../../plots/cartesian/axis_ids").getAxisGroup,c=t("./attributes"),u=n.coerceFont;function h(t,e,r,n){var a=e.orientation,i=e[{v:"x",h:"y"}[a]+"axis"],o=l(r,i)+a,s=r._alignmentOpts||{},c=n("alignmentgroup"),u=s[o];u||(u=s[o]={});var h=u[c];h?h.traces.push(e):h=u[c]={traces:[e],alignmentIndex:Object.keys(u).length,offsetGroups:{}};var f=n("offsetgroup"),p=h.offsetGroups,d=p[f];f&&(d||(d=p[f]={offsetIndex:Object.keys(p).length}),e._offsetIndex=d.offsetIndex)}function f(t,e,r,a,i,o){var s=!(!1===(o=o||{}).moduleHasSelected),l=!(!1===o.moduleHasUnselected),c=!(!1===o.moduleHasConstrain),h=!(!1===o.moduleHasCliponaxis),f=!(!1===o.moduleHasTextangle),p=!(!1===o.moduleHasInsideanchor),d=!!o.hasPathbar,g=Array.isArray(i)||"auto"===i,v=g||"inside"===i,m=g||"outside"===i;if(v||m){var y=u(a,"textfont",r.font),x=n.extendFlat({},y),b=!(t.textfont&&t.textfont.color);if(b&&delete x.color,u(a,"insidetextfont",x),d){var _=n.extendFlat({},y);b&&delete _.color,u(a,"pathbar.textfont",_)}m&&u(a,"outsidetextfont",y),s&&a("selected.textfont.color"),l&&a("unselected.textfont.color"),c&&a("constraintext"),h&&a("cliponaxis"),f&&a("textangle"),a("texttemplate")}v&&p&&a("insidetextanchor")}e.exports={supplyDefaults:function(t,e,r,l){function u(r,a){return n.coerce(t,e,c,r,a)}if(o(t,e,l,u)){u("orientation",e.x&&!e.y?"h":"v"),u("base"),u("offset"),u("width"),u("text"),u("hovertext"),u("hovertemplate");var h=u("textposition");f(t,0,l,u,h,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),s(t,e,u,r,l);var p=(e.marker.line||{}).color,d=i.getComponentMethod("errorbars","supplyDefaults");d(t,e,p||a.defaultLine,{axis:"y"}),d(t,e,p||a.defaultLine,{axis:"x",inherit:"y"}),n.coerceSelectionMarkerOpacity(e,u)}else e.visible=!1},crossTraceDefaults:function(t,e){var r;function a(t){return n.coerce(r._input,r,c,t)}if("group"===e.barmode)for(var i=0;i<t.length;i++)"bar"===(r=t[i]).type&&(r._input,h(0,r,e,a))},handleGroupingDefaults:h,handleText:f}},{"../../components/color":591,"../../lib":717,"../../plots/cartesian/axis_ids":768,"../../registry":846,"../scatter/xy_defaults":1146,"./attributes":856,"./style_defaults":871}],861:[function(t,e,r){"use strict";e.exports=function(t,e,r){return t.x="xVal"in e?e.xVal:e.x,t.y="yVal"in e?e.yVal:e.y,e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),"h"===r.orientation?(t.label=t.y,t.value=t.x):(t.label=t.x,t.value=t.y),t}},{}],862:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("tinycolor2"),i=t("../../lib").isArrayOrTypedArray;r.coerceString=function(t,e,r){if("string"==typeof e){if(e||!t.noBlank)return e}else if(("number"==typeof e||!0===e)&&!t.strict)return String(e);return void 0!==r?r:t.dflt},r.coerceNumber=function(t,e,r){if(n(e)){e=+e;var a=t.min,i=t.max;if(!(void 0!==a&&e<a||void 0!==i&&e>i))return e}return void 0!==r?r:t.dflt},r.coerceColor=function(t,e,r){return a(e).isValid()?e:void 0!==r?r:t.dflt},r.coerceEnumerated=function(t,e,r){return t.coerceNumber&&(e=+e),-1!==t.values.indexOf(e)?e:void 0!==r?r:t.dflt},r.getValue=function(t,e){var r;return Array.isArray(t)?e<t.length&&(r=t[e]):r=t,r},r.getLineWidth=function(t,e){return 0<e.mlw?e.mlw:i(t.marker.line.width)?0:t.marker.line.width}},{"../../lib":717,"fast-isnumeric":228,tinycolor2:535}],863:[function(t,e,r){"use strict";var n=t("../../components/fx"),a=t("../../registry"),i=t("../../components/color"),o=t("../../lib").fillText,s=t("./helpers").getLineWidth,l=t("../../plots/cartesian/axes").hoverLabelText,c=t("../../constants/numerical").BADNUM;function u(t,e,r,a){var i,s,u,h,f,p,d,g=t.cd,v=g[0].trace,m=g[0].t,y="closest"===a,x="waterfall"===v.type,b=t.maxHoverDistance;function _(t){return t[u]-t.w/2}function w(t){return t[u]+t.w/2}var k=y?_:function(t){return Math.min(_(t),t.p-m.bardelta/2)},T=y?w:function(t){return Math.max(w(t),t.p+m.bardelta/2)};function M(t,e){return n.inbox(t-i,e-i,b+Math.min(1,Math.abs(e-t)/d)-1)}function A(t){return M(k(t),T(t))}function S(t){var e=s,r=t.b,a=t[h];if(x){var i=Math.abs(t.rawS)||0;e>0?a+=i:e<0&&(a-=i)}return n.inbox(r-e,a-e,b+(a-e)/(a-r)-1)}"h"===v.orientation?(i=r,s=e,u="y",h="x",f=S,p=A):(i=e,s=r,u="x",h="y",p=S,f=A);var E=t[u+"a"],L=t[h+"a"];d=Math.abs(E.r2c(E.range[1])-E.r2c(E.range[0]));var C=n.getDistanceFunction(a,f,p,function(t){return(f(t)+p(t))/2});if(n.getClosest(g,C,t),!1!==t.index&&g[t.index].p!==c){y||(k=function(t){return Math.min(_(t),t.p-m.bargroupwidth/2)},T=function(t){return Math.max(w(t),t.p+m.bargroupwidth/2)});var P=g[t.index],O=v.base?P.b+P.s:P.s;t[h+"0"]=t[h+"1"]=L.c2p(P[h],!0),t[h+"LabelVal"]=O;var z=m.extents[m.extents.round(P.p)];return t[u+"0"]=E.c2p(y?k(P):z[0],!0),t[u+"1"]=E.c2p(y?T(P):z[1],!0),t[u+"LabelVal"]=P.p,t.labelLabel=l(E,t[u+"LabelVal"]),t.valueLabel=l(L,t[h+"LabelVal"]),t.spikeDistance=(S(P)+function(t){return M(_(t),w(t))}(P))/2-b,t[u+"Spike"]=E.c2p(P.p,!0),o(P,v,t),t.hovertemplate=v.hovertemplate,t}}function h(t,e){var r=e.mcc||t.marker.color,n=e.mlcc||t.marker.line.color,a=s(t,e);return i.opacity(r)?r:i.opacity(n)&&a?n:void 0}e.exports={hoverPoints:function(t,e,r,n){var i=u(t,e,r,n);if(i){var o=i.cd,s=o[0].trace,l=o[i.index];return i.color=h(s,l),a.getComponentMethod("errorbars","hoverInfo")(l,s,i),[i]}},hoverOnBars:u,getTraceColor:h}},{"../../components/color":591,"../../components/fx":630,"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/axes":765,"../../registry":846,"./helpers":862}],864:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults").supplyDefaults,crossTraceDefaults:t("./defaults").crossTraceDefaults,supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc"),crossTraceCalc:t("./cross_trace_calc").crossTraceCalc,colorbar:t("../scatter/marker_colorbar"),arraysToCalcdata:t("./arrays_to_calcdata"),plot:t("./plot").plot,style:t("./style").style,styleOnSelect:t("./style").styleOnSelect,hoverPoints:t("./hover").hoverPoints,eventData:t("./event_data"),selectPoints:t("./select"),moduleType:"trace",name:"bar",basePlotModule:t("../../plots/cartesian"),categories:["bar-like","cartesian","svg","bar","oriented","errorBarsOK","showLegend","zoomScale"],animatable:!0,meta:{}}},{"../../plots/cartesian":776,"../scatter/marker_colorbar":1138,"./arrays_to_calcdata":855,"./attributes":856,"./calc":857,"./cross_trace_calc":859,"./defaults":860,"./event_data":861,"./hover":863,"./layout_attributes":865,"./layout_defaults":866,"./plot":867,"./select":868,"./style":870}],865:[function(t,e,r){"use strict";e.exports={barmode:{valType:"enumerated",values:["stack","group","overlay","relative"],dflt:"group",editType:"calc"},barnorm:{valType:"enumerated",values:["","fraction","percent"],dflt:"",editType:"calc"},bargap:{valType:"number",min:0,max:1,editType:"calc"},bargroupgap:{valType:"number",min:0,max:1,dflt:0,editType:"calc"}}},{}],866:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../plots/cartesian/axes"),i=t("../../lib"),o=t("./layout_attributes");e.exports=function(t,e,r){function s(r,n){return i.coerce(t,e,o,r,n)}for(var l=!1,c=!1,u=!1,h={},f=s("barmode"),p=0;p<r.length;p++){var d=r[p];if(n.traceIs(d,"bar")&&d.visible){if(l=!0,"group"===f){var g=d.xaxis+d.yaxis;h[g]&&(u=!0),h[g]=!0}if(d.visible&&"histogram"===d.type)"category"!==a.getFromId({_fullLayout:e},d["v"===d.orientation?"xaxis":"yaxis"]).type&&(c=!0)}}l?("overlay"!==f&&s("barnorm"),s("bargap",c&&!u?0:.2),s("bargroupgap")):delete e.barmode}},{"../../lib":717,"../../plots/cartesian/axes":765,"../../registry":846,"./layout_attributes":865}],867:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../../lib"),o=t("../../lib/svg_text_utils"),s=t("../../components/color"),l=t("../../components/drawing"),c=t("../../registry"),u=t("../../plots/cartesian/axes").tickText,h=t("./uniform_text"),f=h.recordMinTextSize,p=h.clearMinTextSize,d=t("./style"),g=t("./helpers"),v=t("./constants"),m=t("./attributes"),y=m.text,x=m.textposition,b=t("../../components/fx/helpers").appendArrayPointValue,_=v.TEXTPAD;function w(t){return t.id}function k(t){if(t.ids)return w}function T(t,e){return t<e?1:-1}function M(t,e,r,n){var a;return!e.uniformtext.mode&&A(r)?(n&&(a=n()),t.transition().duration(r.duration).ease(r.easing).each("end",function(){a&&a()}).each("interrupt",function(){a&&a()})):t}function A(t){return t&&t.duration>0}function S(t){return"auto"===t?0:t}function E(t,e){var r=Math.PI/180*e,n=Math.abs(Math.sin(r)),a=Math.abs(Math.cos(r));return{x:t.width*a+t.height*n,y:t.width*n+t.height*a}}function L(t,e,r,n,a,i){var o=!!i.isHorizontal,s=!!i.constrained,l=i.angle||0,c=i.anchor||"end",u="end"===c,h="start"===c,f=((i.leftToRight||0)+1)/2,p=1-f,d=a.width,g=a.height,v=Math.abs(e-t),m=Math.abs(n-r),y=v>2*_&&m>2*_?_:0;v-=2*y,m-=2*y;var x=S(l);"auto"!==l||d<=v&&g<=m||!(d>v||g>m)||(d>m||g>v)&&d<g==v<m||(x+=90);var b=E(a,x),w=1;s&&(w=Math.min(1,v/b.x,m/b.y));var k=a.left*p+a.right*f,M=(a.top+a.bottom)/2,A=(t+_)*p+(e-_)*f,L=(r+n)/2,C=0,P=0;if(h||u){var O=(o?b.x:b.y)/2,z=o?T(t,e):T(r,n);o?h?(A=t+z*y,C=-z*O):(A=e-z*y,C=z*O):h?(L=r+z*y,P=-z*O):(L=n-z*y,P=z*O)}return{textX:k,textY:M,targetX:A,targetY:L,anchorX:C,anchorY:P,scale:w,rotate:x}}e.exports={plot:function(t,e,r,h,v,m){var w=e.xaxis,C=e.yaxis,P=t._fullLayout;v||(v={mode:P.barmode,norm:P.barmode,gap:P.bargap,groupgap:P.bargroupgap},p("bar",P));var O=i.makeTraceGroups(h,r,"trace bars").each(function(r){var c=n.select(this),h=r[0].trace,p="waterfall"===h.type,O="funnel"===h.type,z="bar"===h.type||O,I=0;p&&h.connector.visible&&"between"===h.connector.mode&&(I=h.connector.line.width/2);var D="h"===h.orientation,R=A(v),F=i.ensureSingle(c,"g","points"),B=k(h),N=F.selectAll("g.point").data(i.identity,B);N.enter().append("g").classed("point",!0),N.exit().remove(),N.each(function(c,p){var k,A,O=n.select(this),F=function(t,e,r,n){var a=[],i=[],o=n?e:r,s=n?r:e;return a[0]=o.c2p(t.s0,!0),i[0]=s.c2p(t.p0,!0),a[1]=o.c2p(t.s1,!0),i[1]=s.c2p(t.p1,!0),n?[a,i]:[i,a]}(c,w,C,D),B=F[0][0],N=F[0][1],j=F[1][0],V=F[1][1],U=0==(D?N-B:V-j);if(U&&z&&g.getLineWidth(h,c)&&(U=!1),U||(U=!(a(B)&&a(N)&&a(j)&&a(V))),c.isBlank=U,U&&(D?N=B:V=j),I&&!U&&(D?(B-=T(B,N)*I,N+=T(B,N)*I):(j-=T(j,V)*I,V+=T(j,V)*I)),"waterfall"===h.type){if(!U){var q=h[c.dir].marker;k=q.line.width,A=q.color}}else k=g.getLineWidth(h,c),A=c.mc||h.marker.color;function H(t){var e=n.round(k/2%1,2);return 0===v.gap&&0===v.groupgap?n.round(Math.round(t)-e,2):t}if(!t._context.staticPlot){var G=s.opacity(A)<1||k>.01?H:function(t,e,r){return r&&t===e?t:Math.abs(t-e)>=2?H(t):t>e?Math.ceil(t):Math.floor(t)};B=G(B,N,D),N=G(N,B,D),j=G(j,V,!D),V=G(V,j,!D)}var Y=M(i.ensureSingle(O,"path"),P,v,m);if(Y.style("vector-effect","non-scaling-stroke").attr("d",isNaN((N-B)*(V-j))?"M0,0Z":"M"+B+","+j+"V"+V+"H"+N+"V"+j+"Z").call(l.setClipUrl,e.layerClipId,t),!P.uniformtext.mode&&R){var W=l.makePointStyleFns(h);l.singlePointStyle(c,Y,h,W,t)}!function(t,e,r,n,a,s,c,h,p,v,m){var w,k=e.xaxis,A=e.yaxis,C=t._fullLayout;function P(e,r,n){var a=i.ensureSingle(e,"text").text(r).attr({class:"bartext bartext-"+w,"text-anchor":"middle","data-notex":1}).call(l.font,n).call(o.convertToTspans,t);return a}var O=n[0].trace,z="h"===O.orientation,I=function(t,e,r,n,a){var o,s=e[0].trace;return o=s.texttemplate?function(t,e,r,n,a){var o=e[0].trace,s=i.castOption(o,r,"texttemplate");if(!s)return"";var l,c,h,f,p="waterfall"===o.type,d="funnel"===o.type;function g(t){return u(f,+t,!0).text}"h"===o.orientation?(l="y",c=a,h="x",f=n):(l="x",c=n,h="y",f=a);var v,m=e[r],y={};y.label=m.p,y.labelLabel=y[l+"Label"]=(v=m.p,u(c,v,!0).text);var x=i.castOption(o,m.i,"text");(0===x||x)&&(y.text=x),y.value=m.s,y.valueLabel=y[h+"Label"]=g(m.s);var _={};b(_,o,m.i),p&&(y.delta=+m.rawS||m.s,y.deltaLabel=g(y.delta),y.final=m.v,y.finalLabel=g(y.final),y.initial=y.final-y.delta,y.initialLabel=g(y.initial)),d&&(y.value=m.s,y.valueLabel=g(y.value),y.percentInitial=m.begR,y.percentInitialLabel=i.formatPercent(m.begR),y.percentPrevious=m.difR,y.percentPreviousLabel=i.formatPercent(m.difR),y.percentTotal=m.sumR,y.percenTotalLabel=i.formatPercent(m.sumR));var w=i.castOption(o,m.i,"customdata");return w&&(y.customdata=w),i.texttemplateString(s,y,t._d3locale,_,y,o._meta||{})}(t,e,r,n,a):s.textinfo?function(t,e,r,n){var a=t[0].trace,o="h"===a.orientation,s="waterfall"===a.type,l="funnel"===a.type;function c(t){var e=o?r:n;return u(e,+t,!0).text}var h,f,p=a.textinfo,d=t[e],g=p.split("+"),v=[],m=function(t){return-1!==g.indexOf(t)};if(m("label")&&v.push((f=t[e].p,u(o?n:r,f,!0).text)),m("text")&&(0===(h=i.castOption(a,d.i,"text"))||h)&&v.push(h),s){var y=+d.rawS||d.s,x=d.v,b=x-y;m("initial")&&v.push(c(b)),m("delta")&&v.push(c(y)),m("final")&&v.push(c(x))}if(l){m("value")&&v.push(c(d.s));var _=0;m("percent initial")&&_++,m("percent previous")&&_++,m("percent total")&&_++;var w=_>1;m("percent initial")&&(h=i.formatPercent(d.begR),w&&(h+=" of initial"),v.push(h)),m("percent previous")&&(h=i.formatPercent(d.difR),w&&(h+=" of previous"),v.push(h)),m("percent total")&&(h=i.formatPercent(d.sumR),w&&(h+=" of total"),v.push(h))}return v.join("<br>")}(e,r,n,a):g.getValue(s.text,r),g.coerceString(y,o)}(C,n,a,k,A);w=function(t,e){var r=g.getValue(t.textposition,e);return g.coerceEnumerated(x,r)}(O,a);var D="stack"===v.mode||"relative"===v.mode,R=n[a],F=!D||R._outmost;if(I&&"none"!==w&&(!R.isBlank&&s!==c&&h!==p||"auto"!==w&&"inside"!==w)){var B=C.font,N=d.getBarColor(n[a],O),j=d.getInsideTextFont(O,a,B,N),V=d.getOutsideTextFont(O,a,B),U=r.datum();z?"log"===k.type&&U.s0<=0&&(s=k.range[0]<k.range[1]?0:k._length):"log"===A.type&&U.s0<=0&&(h=A.range[0]<A.range[1]?A._length:0);var q,H,G,Y,W,X=Math.abs(c-s)-2*_,Z=Math.abs(p-h)-2*_;if("outside"===w&&(F||R.hasB||(w="inside")),"auto"===w)if(F){w="inside",W=i.ensureUniformFontSize(t,j),q=P(r,I,W),H=l.bBox(q.node()),G=H.width,Y=H.height;var J=G>0&&Y>0,K=G<=X&&Y<=Z,Q=G<=Z&&Y<=X,$=z?X>=G*(Z/Y):Z>=Y*(X/G);J&&(K||Q||$)?w="inside":(w="outside",q.remove(),q=null)}else w="inside";if(!q){W=i.ensureUniformFontSize(t,"outside"===w?V:j);var tt=(q=P(r,I,W)).attr("transform");if(q.attr("transform",""),H=l.bBox(q.node()),G=H.width,Y=H.height,q.attr("transform",tt),G<=0||Y<=0)return void q.remove()}var et,rt,nt=O.textangle;"outside"===w?(rt="both"===O.constraintext||"outside"===O.constraintext,et=function(t,e,r,n,a,i){var o,s=!!i.isHorizontal,l=!!i.constrained,c=i.angle||0,u=a.width,h=a.height,f=Math.abs(e-t),p=Math.abs(n-r);o=s?p>2*_?_:0:f>2*_?_:0;var d=1;l&&(d=s?Math.min(1,p/h):Math.min(1,f/u));var g=S(c),v=E(a,g),m=(s?v.x:v.y)/2,y=(a.left+a.right)/2,x=(a.top+a.bottom)/2,b=(t+e)/2,w=(r+n)/2,k=0,M=0,A=s?T(e,t):T(r,n);return s?(b=e-A*o,k=A*m):(w=n+A*o,M=-A*m),{textX:y,textY:x,targetX:b,targetY:w,anchorX:k,anchorY:M,scale:d,rotate:g}}(s,c,h,p,H,{isHorizontal:z,constrained:rt,angle:nt})):(rt="both"===O.constraintext||"inside"===O.constraintext,et=L(s,c,h,p,H,{isHorizontal:z,constrained:rt,angle:nt,anchor:O.insidetextanchor})),et.fontSize=W.size,f(O.type,et,C),R.transform=et,M(q,C,v,m).attr("transform",i.getTextTransform(et))}else r.select("text").remove()}(t,e,O,r,p,B,N,j,V,v,m),e.layerClipId&&l.hideOutsideRangePoint(c,O.select("text"),w,C,h.xcalendar,h.ycalendar)});var j=!1===h.cliponaxis;l.setClipUrl(c,j?null:e.layerClipId,t)});c.getComponentMethod("errorbars","plot")(t,O,e,v)},toMoveInsideBar:L}},{"../../components/color":591,"../../components/drawing":612,"../../components/fx/helpers":626,"../../lib":717,"../../lib/svg_text_utils":741,"../../plots/cartesian/axes":765,"../../registry":846,"./attributes":856,"./constants":858,"./helpers":862,"./style":870,"./uniform_text":872,d3:165,"fast-isnumeric":228}],868:[function(t,e,r){"use strict";function n(t,e,r,n,a){var i=e.c2p(n?t.s0:t.p0,!0),o=e.c2p(n?t.s1:t.p1,!0),s=r.c2p(n?t.p0:t.s0,!0),l=r.c2p(n?t.p1:t.s1,!0);return a?[(i+o)/2,(s+l)/2]:n?[o,(s+l)/2]:[(i+o)/2,l]}e.exports=function(t,e){var r,a=t.cd,i=t.xaxis,o=t.yaxis,s=a[0].trace,l="funnel"===s.type,c="h"===s.orientation,u=[];if(!1===e)for(r=0;r<a.length;r++)a[r].selected=0;else for(r=0;r<a.length;r++){var h=a[r],f="ct"in h?h.ct:n(h,i,o,c,l);e.contains(f,!1,r,t)?(u.push({pointNumber:r,x:i.c2d(h.x),y:o.c2d(h.y)}),h.selected=1):h.selected=0}return u}},{}],869:[function(t,e,r){"use strict";e.exports=i;var n=t("../../lib").distinctVals,a=t("../../constants/numerical").BADNUM;function i(t,e){this.traces=t,this.sepNegVal=e.sepNegVal,this.overlapNoMerge=e.overlapNoMerge;for(var r=1/0,i=[],o=0;o<t.length;o++){for(var s=t[o],l=0;l<s.length;l++){var c=s[l];c.p!==a&&i.push(c.p)}s[0]&&s[0].width1&&(r=Math.min(s[0].width1,r))}this.positions=i;var u=n(i);this.distinctPositions=u.vals,1===u.vals.length&&r!==1/0?this.minDiff=r:this.minDiff=Math.min(u.minDiff,r),this.binWidth=this.minDiff,this.bins={}}i.prototype.put=function(t,e){var r=this.getLabel(t,e),n=this.bins[r]||0;return this.bins[r]=n+e,n},i.prototype.get=function(t,e){var r=this.getLabel(t,e);return this.bins[r]||0},i.prototype.getLabel=function(t,e){return(e<0&&this.sepNegVal?"v":"^")+(this.overlapNoMerge?t:Math.round(t/this.binWidth))}},{"../../constants/numerical":693,"../../lib":717}],870:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/color"),i=t("../../components/drawing"),o=t("../../lib"),s=t("../../registry"),l=t("./uniform_text").resizeText,c=t("./attributes"),u=c.textfont,h=c.insidetextfont,f=c.outsidetextfont,p=t("./helpers");function d(t,e,r){i.pointStyle(t.selectAll("path"),e,r),g(t,e,r)}function g(t,e,r){t.selectAll("text").each(function(t){var a=n.select(this),s=o.ensureUniformFontSize(r,v(a,t,e,r));i.font(a,s)})}function v(t,e,r,n){var a=n._fullLayout.font,i=r.textfont;if(t.classed("bartext-inside")){var o=_(e,r);i=y(r,e.i,a,o)}else t.classed("bartext-outside")&&(i=x(r,e.i,a));return i}function m(t,e,r){return b(u,t.textfont,e,r)}function y(t,e,r,n){var i=m(t,e,r);return(void 0===t._input.textfont||void 0===t._input.textfont.color||Array.isArray(t.textfont.color)&&void 0===t.textfont.color[e])&&(i={color:a.contrast(n),family:i.family,size:i.size}),b(h,t.insidetextfont,e,i)}function x(t,e,r){var n=m(t,e,r);return b(f,t.outsidetextfont,e,n)}function b(t,e,r,n){e=e||{};var a=p.getValue(e.family,r),i=p.getValue(e.size,r),o=p.getValue(e.color,r);return{family:p.coerceString(t.family,a,n.family),size:p.coerceNumber(t.size,i,n.size),color:p.coerceColor(t.color,o,n.color)}}function _(t,e){return"waterfall"===e.type?e[t.dir].marker.color:t.mc||e.marker.color}e.exports={style:function(t){var e=n.select(t).selectAll("g.barlayer").selectAll("g.trace");l(t,e,"bar");var r=e.size(),a=t._fullLayout;e.style("opacity",function(t){return t[0].trace.opacity}).each(function(t){("stack"===a.barmode&&r>1||0===a.bargap&&0===a.bargroupgap&&!t[0].trace.marker.line.width)&&n.select(this).attr("shape-rendering","crispEdges")}),e.selectAll("g.points").each(function(e){d(n.select(this),e[0].trace,t)}),s.getComponentMethod("errorbars","style")(e)},styleTextPoints:g,styleOnSelect:function(t,e,r){var a=e[0].trace;a.selectedpoints?function(t,e,r){i.selectedPointStyle(t.selectAll("path"),e),function(t,e,r){t.each(function(t){var a,s=n.select(this);if(t.selected){a=o.ensureUniformFontSize(r,v(s,t,e,r));var l=e.selected.textfont&&e.selected.textfont.color;l&&(a.color=l),i.font(s,a)}else i.selectedTextStyle(s,e)})}(t.selectAll("text"),e,r)}(r,a,t):(d(r,a,t),s.getComponentMethod("errorbars","style")(r))},getInsideTextFont:y,getOutsideTextFont:x,getBarColor:_,resizeText:l}},{"../../components/color":591,"../../components/drawing":612,"../../lib":717,"../../registry":846,"./attributes":856,"./helpers":862,"./uniform_text":872,d3:165}],871:[function(t,e,r){"use strict";var n=t("../../components/color"),a=t("../../components/colorscale/helpers").hasColorscale,i=t("../../components/colorscale/defaults");e.exports=function(t,e,r,o,s){r("marker.color",o),a(t,"marker")&&i(t,e,s,r,{prefix:"marker.",cLetter:"c"}),r("marker.line.color",n.defaultLine),a(t,"marker.line")&&i(t,e,s,r,{prefix:"marker.line.",cLetter:"c"}),r("marker.line.width"),r("marker.opacity"),r("selected.marker.color"),r("unselected.marker.color")}},{"../../components/color":591,"../../components/colorscale/defaults":601,"../../components/colorscale/helpers":602}],872:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib");function i(t){return"_"+t+"Text_minsize"}e.exports={recordMinTextSize:function(t,e,r){if(r.uniformtext.mode){var n=i(t),a=r.uniformtext.minsize,o=e.scale*e.fontSize;e.hide=o<a,r[n]=r[n]||1/0,e.hide||(r[n]=Math.min(r[n],Math.max(o,a)))}},clearMinTextSize:function(t,e){e[i(t)]=void 0},resizeText:function(t,e,r){var i=t._fullLayout,o=i["_"+r+"Text_minsize"];if(o){var s,l="hide"===i.uniformtext.mode;switch(r){case"funnelarea":case"pie":case"sunburst":s="g.slice";break;case"treemap":s="g.slice, g.pathbar";break;default:s="g.points > g.point"}e.selectAll(s).each(function(t){var e=t.transform;e&&(e.scale=l&&e.hide?0:o/e.fontSize,n.select(this).select("text").attr("transform",a.getTextTransform(e)))})}}}},{"../../lib":717,d3:165}],873:[function(t,e,r){"use strict";var n=t("../../plots/template_attributes").hovertemplateAttrs,a=t("../../lib/extend").extendFlat,i=t("../scatterpolar/attributes"),o=t("../bar/attributes");e.exports={r:i.r,theta:i.theta,r0:i.r0,dr:i.dr,theta0:i.theta0,dtheta:i.dtheta,thetaunit:i.thetaunit,base:a({},o.base,{}),offset:a({},o.offset,{}),width:a({},o.width,{}),text:a({},o.text,{}),hovertext:a({},o.hovertext,{}),marker:o.marker,hoverinfo:i.hoverinfo,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},{"../../lib/extend":708,"../../plots/template_attributes":841,"../bar/attributes":856,"../scatterpolar/attributes":1193}],874:[function(t,e,r){"use strict";var n=t("../../components/colorscale/helpers").hasColorscale,a=t("../../components/colorscale/calc"),i=t("../bar/arrays_to_calcdata"),o=t("../bar/cross_trace_calc").setGroupPositions,s=t("../scatter/calc_selection"),l=t("../../registry").traceIs,c=t("../../lib").extendFlat;e.exports={calc:function(t,e){for(var r=t._fullLayout,o=e.subplot,l=r[o].radialaxis,c=r[o].angularaxis,u=l.makeCalcdata(e,"r"),h=c.makeCalcdata(e,"theta"),f=e._length,p=new Array(f),d=u,g=h,v=0;v<f;v++)p[v]={p:g[v],s:d[v]};function m(t){var r=e[t];void 0!==r&&(e["_"+t]=Array.isArray(r)?c.makeCalcdata(e,t):c.d2c(r,e.thetaunit))}return"linear"===c.type&&(m("width"),m("offset")),n(e,"marker")&&a(t,e,{vals:e.marker.color,containerStr:"marker",cLetter:"c"}),n(e,"marker.line")&&a(t,e,{vals:e.marker.line.color,containerStr:"marker.line",cLetter:"c"}),i(p,e),s(p,e),p},crossTraceCalc:function(t,e,r){for(var n=t.calcdata,a=[],i=0;i<n.length;i++){var s=n[i],u=s[0].trace;!0===u.visible&&l(u,"bar")&&u.subplot===r&&a.push(s)}var h=c({},e.radialaxis,{_id:"x"}),f=e.angularaxis;o(t,f,h,a,{mode:e.barmode,norm:e.barnorm,gap:e.bargap,groupgap:e.bargroupgap})}}},{"../../components/colorscale/calc":599,"../../components/colorscale/helpers":602,"../../lib":717,"../../registry":846,"../bar/arrays_to_calcdata":855,"../bar/cross_trace_calc":859,"../scatter/calc_selection":1122}],875:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatterpolar/defaults").handleRThetaDefaults,i=t("../bar/style_defaults"),o=t("./attributes");e.exports=function(t,e,r,s){function l(r,a){return n.coerce(t,e,o,r,a)}a(t,e,s,l)?(l("thetaunit"),l("base"),l("offset"),l("width"),l("text"),l("hovertext"),l("hovertemplate"),i(t,e,l,r,s),n.coerceSelectionMarkerOpacity(e,l)):e.visible=!1}},{"../../lib":717,"../bar/style_defaults":871,"../scatterpolar/defaults":1195,"./attributes":873}],876:[function(t,e,r){"use strict";var n=t("../../components/fx"),a=t("../../lib"),i=t("../bar/hover").getTraceColor,o=a.fillText,s=t("../scatterpolar/hover").makeHoverPointText,l=t("../../plots/polar/helpers").isPtInsidePolygon;e.exports=function(t,e,r){var c=t.cd,u=c[0].trace,h=t.subplot,f=h.radialAxis,p=h.angularAxis,d=h.vangles,g=d?l:a.isPtInsideSector,v=t.maxHoverDistance,m=p._period||2*Math.PI,y=Math.abs(f.g2p(Math.sqrt(e*e+r*r))),x=Math.atan2(r,e);f.range[0]>f.range[1]&&(x+=Math.PI);if(n.getClosest(c,function(t){return g(y,x,[t.rp0,t.rp1],[t.thetag0,t.thetag1],d)?v+Math.min(1,Math.abs(t.thetag1-t.thetag0)/m)-1+(t.rp1-y)/(t.rp1-t.rp0)-1:1/0},t),!1!==t.index){var b=c[t.index];t.x0=t.x1=b.ct[0],t.y0=t.y1=b.ct[1];var _=a.extendFlat({},b,{r:b.s,theta:b.p});return o(b,u,t),s(_,u,h,t),t.hovertemplate=u.hovertemplate,t.color=i(u,b),t.xLabelVal=t.yLabelVal=void 0,b.s<0&&(t.idealAlign="left"),[t]}}},{"../../components/fx":630,"../../lib":717,"../../plots/polar/helpers":828,"../bar/hover":863,"../scatterpolar/hover":1197}],877:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"barpolar",basePlotModule:t("../../plots/polar"),categories:["polar","bar","showLegend"],attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults"),supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc").calc,crossTraceCalc:t("./calc").crossTraceCalc,plot:t("./plot"),colorbar:t("../scatter/marker_colorbar"),formatLabels:t("../scatterpolar/format_labels"),style:t("../bar/style").style,styleOnSelect:t("../bar/style").styleOnSelect,hoverPoints:t("./hover"),selectPoints:t("../bar/select"),meta:{}}},{"../../plots/polar":829,"../bar/select":868,"../bar/style":870,"../scatter/marker_colorbar":1138,"../scatterpolar/format_labels":1196,"./attributes":873,"./calc":874,"./defaults":875,"./hover":876,"./layout_attributes":878,"./layout_defaults":879,"./plot":880}],878:[function(t,e,r){"use strict";e.exports={barmode:{valType:"enumerated",values:["stack","overlay"],dflt:"stack",editType:"calc"},bargap:{valType:"number",dflt:.1,min:0,max:1,editType:"calc"}}},{}],879:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e,r){var i,o={};function s(r,o){return n.coerce(t[i]||{},e[i],a,r,o)}for(var l=0;l<r.length;l++){var c=r[l];"barpolar"===c.type&&!0===c.visible&&(o[i=c.subplot]||(s("barmode"),s("bargap"),o[i]=1))}}},{"../../lib":717,"./layout_attributes":878}],880:[function(t,e,r){"use strict";var n=t("d3"),a=t("fast-isnumeric"),i=t("../../lib"),o=t("../../components/drawing"),s=t("../../plots/polar/helpers");e.exports=function(t,e,r){var l=e.xaxis,c=e.yaxis,u=e.radialAxis,h=e.angularAxis,f=function(t){var e=t.cxx,r=t.cyy;if(t.vangles)return function(n,a,o,l){var c,u;i.angleDelta(o,l)>0?(c=o,u=l):(c=l,u=o);var h=s.findEnclosingVertexAngles(c,t.vangles)[0],f=s.findEnclosingVertexAngles(u,t.vangles)[1],p=[h,(c+u)/2,f];return s.pathPolygonAnnulus(n,a,c,u,p,e,r)};return function(t,n,a,o){return i.pathAnnulus(t,n,a,o,e,r)}}(e),p=e.layers.frontplot.select("g.barlayer");i.makeTraceGroups(p,r,"trace bars").each(function(){var r=n.select(this),s=i.ensureSingle(r,"g","points").selectAll("g.point").data(i.identity);s.enter().append("g").style("vector-effect","non-scaling-stroke").style("stroke-miterlimit",2).classed("point",!0),s.exit().remove(),s.each(function(t){var e,r=n.select(this),o=t.rp0=u.c2p(t.s0),s=t.rp1=u.c2p(t.s1),p=t.thetag0=h.c2g(t.p0),d=t.thetag1=h.c2g(t.p1);if(a(o)&&a(s)&&a(p)&&a(d)&&o!==s&&p!==d){var g=u.c2g(t.s1),v=(p+d)/2;t.ct=[l.c2p(g*Math.cos(v)),c.c2p(g*Math.sin(v))],e=f(o,s,p,d)}else e="M0,0Z";i.ensureSingle(r,"path").attr("d",e)}),o.setClipUrl(r,e._hasClipOnAxisFalse?e.clipIds.forTraces:null,t)})}},{"../../components/drawing":612,"../../lib":717,"../../plots/polar/helpers":828,d3:165,"fast-isnumeric":228}],881:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),a=t("../bar/attributes"),i=t("../../components/color/attributes"),o=t("../../plots/template_attributes").hovertemplateAttrs,s=t("../../lib/extend").extendFlat,l=n.marker,c=l.line;e.exports={y:{valType:"data_array",editType:"calc+clearAxisTypes"},x:{valType:"data_array",editType:"calc+clearAxisTypes"},x0:{valType:"any",editType:"calc+clearAxisTypes"},y0:{valType:"any",editType:"calc+clearAxisTypes"},dx:{valType:"number",editType:"calc"},dy:{valType:"number",editType:"calc"},name:{valType:"string",editType:"calc+clearAxisTypes"},q1:{valType:"data_array",editType:"calc+clearAxisTypes"},median:{valType:"data_array",editType:"calc+clearAxisTypes"},q3:{valType:"data_array",editType:"calc+clearAxisTypes"},lowerfence:{valType:"data_array",editType:"calc"},upperfence:{valType:"data_array",editType:"calc"},notched:{valType:"boolean",editType:"calc"},notchwidth:{valType:"number",min:0,max:.5,dflt:.25,editType:"calc"},notchspan:{valType:"data_array",editType:"calc"},boxpoints:{valType:"enumerated",values:["all","outliers","suspectedoutliers",!1],editType:"calc"},jitter:{valType:"number",min:0,max:1,editType:"calc"},pointpos:{valType:"number",min:-2,max:2,editType:"calc"},boxmean:{valType:"enumerated",values:[!0,"sd",!1],editType:"calc"},mean:{valType:"data_array",editType:"calc"},sd:{valType:"data_array",editType:"calc"},orientation:{valType:"enumerated",values:["v","h"],editType:"calc+clearAxisTypes"},quartilemethod:{valType:"enumerated",values:["linear","exclusive","inclusive"],dflt:"linear",editType:"calc"},width:{valType:"number",min:0,dflt:0,editType:"calc"},marker:{outliercolor:{valType:"color",dflt:"rgba(0, 0, 0, 0)",editType:"style"},symbol:s({},l.symbol,{arrayOk:!1,editType:"plot"}),opacity:s({},l.opacity,{arrayOk:!1,dflt:1,editType:"style"}),size:s({},l.size,{arrayOk:!1,editType:"calc"}),color:s({},l.color,{arrayOk:!1,editType:"style"}),line:{color:s({},c.color,{arrayOk:!1,dflt:i.defaultLine,editType:"style"}),width:s({},c.width,{arrayOk:!1,dflt:0,editType:"style"}),outliercolor:{valType:"color",editType:"style"},outlierwidth:{valType:"number",min:0,dflt:1,editType:"style"},editType:"style"},editType:"plot"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,dflt:2,editType:"style"},editType:"plot"},fillcolor:n.fillcolor,whiskerwidth:{valType:"number",min:0,max:1,dflt:.5,editType:"calc"},offsetgroup:a.offsetgroup,alignmentgroup:a.alignmentgroup,selected:{marker:n.selected.marker,editType:"style"},unselected:{marker:n.unselected.marker,editType:"style"},text:s({},n.text,{}),hovertext:s({},n.hovertext,{}),hovertemplate:o({}),hoveron:{valType:"flaglist",flags:["boxes","points"],dflt:"boxes+points",editType:"style"}}},{"../../components/color/attributes":590,"../../lib/extend":708,"../../plots/template_attributes":841,"../bar/attributes":856,"../scatter/attributes":1120}],882:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../plots/cartesian/axes"),i=t("../../lib"),o=t("../../constants/numerical").BADNUM,s=i._;e.exports=function(t,e){var r,l,m,y,x,b,_=t._fullLayout,w=a.getFromId(t,e.xaxis||"x"),k=a.getFromId(t,e.yaxis||"y"),T=[],M="violin"===e.type?"_numViolins":"_numBoxes";"h"===e.orientation?(m=w,y="x",x=k,b="y"):(m=k,y="y",x=w,b="x");var A,S,E,L,C,P,O=function(t,e,r,a){var o,s=e+"0"in t,l="d"+e in t;if(e in t||s&&l)return r.makeCalcdata(t,e);o=s?t[e+"0"]:"name"in t&&("category"===r.type||n(t.name)&&-1!==["linear","log"].indexOf(r.type)||i.isDateTime(t.name)&&"date"===r.type)?t.name:a;for(var c="multicategory"===r.type?r.r2c_just_indices(o):r.d2c(o,0,t[e+"calendar"]),u=t._length,h=new Array(u),f=0;f<u;f++)h[f]=c;return h}(e,b,x,_[M]),z=i.distinctVals(O),I=z.vals,D=z.minDiff/2,R="all"===(e.boxpoints||e.points)?i.identity:function(t){return t.v<A.lf||t.v>A.uf};if(e._hasPreCompStats){var F=e[y],B=function(t){return m.d2c((e[t]||[])[r])},N=1/0,j=-1/0;for(r=0;r<e._length;r++){var V=O[r];if(n(V)){if((A={}).pos=A[b]=V,A.q1=B("q1"),A.med=B("median"),A.q3=B("q3"),S=[],F&&i.isArrayOrTypedArray(F[r]))for(l=0;l<F[r].length;l++)(P=m.d2c(F[r][l]))!==o&&(c(C={v:P,i:[r,l]},e,[r,l]),S.push(C));if(A.pts=S.sort(u),L=(E=A[y]=S.map(h)).length,A.med!==o&&A.q1!==o&&A.q3!==o&&A.med>=A.q1&&A.q3>=A.med){var U=B("lowerfence");A.lf=U!==o&&U<=A.q1?U:f(A,E,L);var q=B("upperfence");A.uf=q!==o&&q>=A.q3?q:p(A,E,L);var H=B("mean");A.mean=H!==o?H:L?i.mean(E,L):(A.q1+A.q3)/2;var G=B("sd");A.sd=H!==o&&G>=0?G:L?i.stdev(E,L,A.mean):A.q3-A.q1,A.lo=d(A),A.uo=g(A);var Y=B("notchspan");Y=Y!==o&&Y>0?Y:v(A,L),A.ln=A.med-Y,A.un=A.med+Y;var W=A.lf,X=A.uf;e.boxpoints&&E.length&&(W=Math.min(W,E[0]),X=Math.max(X,E[L-1])),e.notched&&(W=Math.min(W,A.ln),X=Math.max(X,A.un)),A.min=W,A.max=X}else{var Z;i.warn(["Invalid input - make sure that q1 <= median <= q3","q1 = "+A.q1,"median = "+A.med,"q3 = "+A.q3].join("\n")),Z=A.med!==o?A.med:A.q1!==o?A.q3!==o?(A.q1+A.q3)/2:A.q1:A.q3!==o?A.q3:0,A.med=Z,A.q1=A.q3=Z,A.lf=A.uf=Z,A.mean=A.sd=Z,A.ln=A.un=Z,A.min=A.max=Z}N=Math.min(N,A.min),j=Math.max(j,A.max),A.pts2=S.filter(R),T.push(A)}}e._extremes[m._id]=a.findExtremes(m,[N,j],{padded:!0})}else{var J=m.makeCalcdata(e,y),K=function(t,e){for(var r=t.length,n=new Array(r+1),a=0;a<r;a++)n[a]=t[a]-e;return n[r]=t[r-1]+e,n}(I,D),Q=I.length,$=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=[];return e}(Q);for(r=0;r<e._length;r++)if(P=J[r],n(P)){var tt=i.findBin(O[r],K);tt>=0&&tt<Q&&(c(C={v:P,i:r},e,r),$[tt].push(C))}var et=1/0,rt=-1/0,nt=e.quartilemethod,at="exclusive"===nt,it="inclusive"===nt;for(r=0;r<Q;r++)if($[r].length>0){var ot,st;if((A={}).pos=A[b]=I[r],S=A.pts=$[r].sort(u),L=(E=A[y]=S.map(h)).length,A.min=E[0],A.max=E[L-1],A.mean=i.mean(E,L),A.sd=i.stdev(E,L,A.mean),A.med=i.interp(E,.5),L%2&&(at||it))at?(ot=E.slice(0,L/2),st=E.slice(L/2+1)):it&&(ot=E.slice(0,L/2+1),st=E.slice(L/2)),A.q1=i.interp(ot,.5),A.q3=i.interp(st,.5);else A.q1=i.interp(E,.25),A.q3=i.interp(E,.75);A.lf=f(A,E,L),A.uf=p(A,E,L),A.lo=d(A),A.uo=g(A);var lt=v(A,L);A.ln=A.med-lt,A.un=A.med+lt,et=Math.min(et,A.ln),rt=Math.max(rt,A.un),A.pts2=S.filter(R),T.push(A)}e._extremes[m._id]=a.findExtremes(m,e.notched?J.concat([et,rt]):J,{padded:!0})}return function(t,e){if(i.isArrayOrTypedArray(e.selectedpoints))for(var r=0;r<t.length;r++){for(var n=t[r].pts||[],a={},o=0;o<n.length;o++)a[n[o].i]=o;i.tagSelected(n,e,a)}}(T,e),T.length>0?(T[0].t={num:_[M],dPos:D,posLetter:b,valLetter:y,labels:{med:s(t,"median:"),min:s(t,"min:"),q1:s(t,"q1:"),q3:s(t,"q3:"),max:s(t,"max:"),mean:"sd"===e.boxmean?s(t,"mean \xb1 \u03c3:"):s(t,"mean:"),lf:s(t,"lower fence:"),uf:s(t,"upper fence:")}},_[M]++,T):[{t:{empty:!0}}]};var l={text:"tx",hovertext:"htx"};function c(t,e,r){for(var n in l)i.isArrayOrTypedArray(e[n])&&(Array.isArray(r)?i.isArrayOrTypedArray(e[n][r[0]])&&(t[l[n]]=e[n][r[0]][r[1]]):t[l[n]]=e[n][r])}function u(t,e){return t.v-e.v}function h(t){return t.v}function f(t,e,r){return 0===r?t.q1:Math.min(t.q1,e[Math.min(i.findBin(2.5*t.q1-1.5*t.q3,e,!0)+1,r-1)])}function p(t,e,r){return 0===r?t.q3:Math.max(t.q3,e[Math.max(i.findBin(2.5*t.q3-1.5*t.q1,e),0)])}function d(t){return 4*t.q1-3*t.q3}function g(t){return 4*t.q3-3*t.q1}function v(t,e){return 0===e?0:1.57*(t.q3-t.q1)/Math.sqrt(e)}},{"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/axes":765,"fast-isnumeric":228}],883:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../lib"),i=t("../../plots/cartesian/axis_ids").getAxisGroup,o=["v","h"];function s(t,e,r,o){var s,l,c,u=e.calcdata,h=e._fullLayout,f=o._id,p=f.charAt(0),d=[],g=0;for(s=0;s<r.length;s++)for(c=u[r[s]],l=0;l<c.length;l++)d.push(o.c2l(c[l].pos,!0)),g+=(c[l].pts2||[]).length;if(d.length){var v=a.distinctVals(d),m=v.minDiff/2;n.minDtick(o,v.minDiff,v.vals[0],!0);var y=h["violin"===t?"_numViolins":"_numBoxes"],x="group"===h[t+"mode"]&&y>1,b=1-h[t+"gap"],_=1-h[t+"groupgap"];for(s=0;s<r.length;s++){var w,k,T,M,A,S,E=(c=u[r[s]])[0].trace,L=c[0].t,C=E.width,P=E.side;if(C)w=k=M=C/2,T=0;else if(w=m,x){var O=i(h,o._id)+E.orientation,z=(h._alignmentOpts[O]||{})[E.alignmentgroup]||{},I=Object.keys(z.offsetGroups||{}).length,D=I||y;k=w*b*_/D,T=2*w*(((I?E._offsetIndex:L.num)+.5)/D-.5)*b,M=w*b/D}else k=w*b*_,T=0,M=w;L.dPos=w,L.bPos=T,L.bdPos=k,L.wHover=M;var R,F,B,N,j,V,U=T+k,q=Boolean(C);if("positive"===P?(A=w*(C?1:.5),R=U,S=R=T):"negative"===P?(A=R=T,S=w*(C?1:.5),F=U):(A=S=w,R=F=U),(E.boxpoints||E.points)&&g>0){var H=E.pointpos,G=E.jitter,Y=E.marker.size/2,W=0;H+G>=0&&((W=U*(H+G))>A?(q=!0,j=Y,B=W):W>R&&(j=Y,B=A)),W<=A&&(B=A);var X=0;H-G<=0&&((X=-U*(H-G))>S?(q=!0,V=Y,N=X):X>F&&(V=Y,N=S)),X<=S&&(N=S)}else B=A,N=S;var Z=new Array(c.length);for(l=0;l<c.length;l++)Z[l]=c[l].pos;E._extremes[f]=n.findExtremes(o,Z,{padded:q,vpadminus:N,vpadplus:B,vpadLinearized:!0,ppadminus:{x:V,y:j}[p],ppadplus:{x:j,y:V}[p]})}}}e.exports={crossTraceCalc:function(t,e){for(var r=t.calcdata,n=e.xaxis,a=e.yaxis,i=0;i<o.length;i++){for(var l=o[i],c="h"===l?a:n,u=[],h=0;h<r.length;h++){var f=r[h],p=f[0].t,d=f[0].trace;!0!==d.visible||"box"!==d.type&&"candlestick"!==d.type||p.empty||(d.orientation||"v")!==l||d.xaxis!==n._id||d.yaxis!==a._id||u.push(h)}s("box",t,u,c)}},setPositionOffset:s}},{"../../lib":717,"../../plots/cartesian/axes":765,"../../plots/cartesian/axis_ids":768}],884:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../registry"),i=t("../../components/color"),o=t("../bar/defaults").handleGroupingDefaults,s=t("../../plots/cartesian/axis_autotype"),l=t("./attributes");function c(t,e,r,i){function o(t){var e=0;return t&&t.length&&(e+=1,n.isArrayOrTypedArray(t[0])&&t[0].length&&(e+=1)),e}function c(e){return n.validate(t[e],l[e])}var u,h=r("y"),f=r("x");if("box"===e.type){var p=r("q1"),d=r("median"),g=r("q3");e._hasPreCompStats=p&&p.length&&d&&d.length&&g&&g.length,u=Math.min(n.minRowLength(p),n.minRowLength(d),n.minRowLength(g))}var v,m,y=o(h),x=o(f),b=y&&n.minRowLength(h),_=x&&n.minRowLength(f);if(e._hasPreCompStats)switch(String(x)+String(y)){case"00":var w=c("x0")||c("dx");v=(c("y0")||c("dy"))&&!w?"h":"v",m=u;break;case"10":v="v",m=Math.min(u,_);break;case"20":v="h",m=Math.min(u,f.length);break;case"01":v="h",m=Math.min(u,b);break;case"02":v="v",m=Math.min(u,h.length);break;case"12":v="v",m=Math.min(u,_,h.length);break;case"21":v="h",m=Math.min(u,f.length,b);break;case"11":m=0;break;case"22":var k,T=!1;for(k=0;k<f.length;k++)if("category"===s(f[k])){T=!0;break}if(T)v="v",m=Math.min(u,_,h.length);else{for(k=0;k<h.length;k++)if("category"===s(h[k])){T=!0;break}T?(v="h",m=Math.min(u,f.length,b)):(v="v",m=Math.min(u,_,h.length))}}else y>0?(v="v",m=x>0?Math.min(_,b):Math.min(b)):x>0?(v="h",m=Math.min(_)):m=0;if(m){e._length=m;var M=r("orientation",v);e._hasPreCompStats?"v"===M&&0===x?(r("x0",0),r("dx",1)):"h"===M&&0===y&&(r("y0",0),r("dy",1)):"v"===M&&0===x?r("x0"):"h"===M&&0===y&&r("y0"),a.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y"],i)}else e.visible=!1}function u(t,e,r,a){var i=a.prefix,o=n.coerce2(t,e,l,"marker.outliercolor"),s=r("marker.line.outliercolor"),c="outliers";e._hasPreCompStats?c="all":(o||s)&&(c="suspectedoutliers");var u=r(i+"points",c);u?(r("jitter","all"===u?.3:0),r("pointpos","all"===u?-1.5:0),r("marker.symbol"),r("marker.opacity"),r("marker.size"),r("marker.color",e.line.color),r("marker.line.color"),r("marker.line.width"),"suspectedoutliers"===u&&(r("marker.line.outliercolor",e.marker.color),r("marker.line.outlierwidth")),r("selected.marker.color"),r("unselected.marker.color"),r("selected.marker.size"),r("unselected.marker.size"),r("text"),r("hovertext")):delete e.marker;var h=r("hoveron");"all"!==h&&-1===h.indexOf("points")||r("hovertemplate"),n.coerceSelectionMarkerOpacity(e,r)}e.exports={supplyDefaults:function(t,e,r,a){function o(r,a){return n.coerce(t,e,l,r,a)}if(c(t,e,o,a),!1!==e.visible){var s=e._hasPreCompStats;s&&(o("lowerfence"),o("upperfence")),o("line.color",(t.marker||{}).color||r),o("line.width"),o("fillcolor",i.addOpacity(e.line.color,.5));var h=!1;if(s){var f=o("mean"),p=o("sd");f&&f.length&&(h=!0,p&&p.length&&(h="sd"))}o("boxmean",h),o("whiskerwidth"),o("width"),o("quartilemethod");var d=!1;if(s){var g=o("notchspan");g&&g.length&&(d=!0)}else n.validate(t.notchwidth,l.notchwidth)&&(d=!0);o("notched",d)&&o("notchwidth"),u(t,e,o,{prefix:"box"})}},crossTraceDefaults:function(t,e){var r,a;function i(t){return n.coerce(a._input,a,l,t)}for(var s=0;s<t.length;s++){var c=(a=t[s]).type;"box"!==c&&"violin"!==c||(r=a._input,"group"===e[c+"mode"]&&o(r,a,e,i))}},handleSampleDefaults:c,handlePointsDefaults:u}},{"../../components/color":591,"../../lib":717,"../../plots/cartesian/axis_autotype":766,"../../registry":846,"../bar/defaults":860,"./attributes":881}],885:[function(t,e,r){"use strict";e.exports=function(t,e){return e.hoverOnBox&&(t.hoverOnBox=e.hoverOnBox),"xVal"in e&&(t.x=e.xVal),"yVal"in e&&(t.y=e.yVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},{}],886:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../lib"),i=t("../../components/fx"),o=t("../../components/color"),s=a.fillText;function l(t,e,r,s){var l,c,u,h,f,p,d,g,v,m,y,x,b,_,w=t.cd,k=t.xa,T=t.ya,M=w[0].trace,A=w[0].t,S="violin"===M.type,E=[],L=A.bdPos,C=A.wHover,P=function(t){return u.c2l(t.pos)+A.bPos-u.c2l(p)};S&&"both"!==M.side?("positive"===M.side&&(v=function(t){var e=P(t);return i.inbox(e,e+C,m)},x=L,b=0),"negative"===M.side&&(v=function(t){var e=P(t);return i.inbox(e-C,e,m)},x=0,b=L)):(v=function(t){var e=P(t);return i.inbox(e-C,e+C,m)},x=b=L),_=S?function(t){return i.inbox(t.span[0]-f,t.span[1]-f,m)}:function(t){return i.inbox(t.min-f,t.max-f,m)},"h"===M.orientation?(f=e,p=r,d=_,g=v,l="y",u=T,c="x",h=k):(f=r,p=e,d=v,g=_,l="x",u=k,c="y",h=T);var O=Math.min(1,L/Math.abs(u.r2c(u.range[1])-u.r2c(u.range[0])));function z(t){return(d(t)+g(t))/2}m=t.maxHoverDistance-O,y=t.maxSpikeDistance-O;var I=i.getDistanceFunction(s,d,g,z);if(i.getClosest(w,I,t),!1===t.index)return[];var D=w[t.index],R=M.line.color,F=(M.marker||{}).color;o.opacity(R)&&M.line.width?t.color=R:o.opacity(F)&&M.boxpoints?t.color=F:t.color=M.fillcolor,t[l+"0"]=u.c2p(D.pos+A.bPos-b,!0),t[l+"1"]=u.c2p(D.pos+A.bPos+x,!0),t[l+"LabelVal"]=D.pos;var B=l+"Spike";t.spikeDistance=z(D)*y/m,t[B]=u.c2p(D.pos,!0);var N={},j=["med","q1","q3","min","max"];(M.boxmean||(M.meanline||{}).visible)&&j.push("mean"),(M.boxpoints||M.points)&&j.push("lf","uf");for(var V=0;V<j.length;V++){var U=j[V];if(U in D&&!(D[U]in N)){N[D[U]]=!0;var q=D[U],H=h.c2p(q,!0),G=a.extendFlat({},t);G.attr=U,G[c+"0"]=G[c+"1"]=H,G[c+"LabelVal"]=q,G[c+"Label"]=(A.labels?A.labels[U]+" ":"")+n.hoverLabelText(h,q),G.hoverOnBox=!0,"mean"===U&&"sd"in D&&"sd"===M.boxmean&&(G[c+"err"]=D.sd),t.name="",t.spikeDistance=void 0,t[B]=void 0,G.hovertemplate=!1,E.push(G)}}return E}function c(t,e,r){for(var n,o,l,c=t.cd,u=t.xa,h=t.ya,f=c[0].trace,p=u.c2p(e),d=h.c2p(r),g=i.quadrature(function(t){var e=Math.max(3,t.mrc||0);return Math.max(Math.abs(u.c2p(t.x)-p)-e,1-3/e)},function(t){var e=Math.max(3,t.mrc||0);return Math.max(Math.abs(h.c2p(t.y)-d)-e,1-3/e)}),v=!1,m=0;m<c.length;m++){o=c[m];for(var y=0;y<(o.pts||[]).length;y++){var x=g(l=o.pts[y]);x<=t.distance&&(t.distance=x,v=[m,y])}}if(!v)return!1;l=(o=c[v[0]]).pts[v[1]];var b,_=u.c2p(l.x,!0),w=h.c2p(l.y,!0),k=l.mrc||1;return n=a.extendFlat({},t,{index:l.i,color:(f.marker||{}).color,name:f.name,x0:_-k,x1:_+k,y0:w-k,y1:w+k,spikeDistance:t.distance,hovertemplate:f.hovertemplate}),"h"===f.orientation?(b=h,n.xLabelVal=l.x,n.yLabelVal=o.pos):(b=u,n.xLabelVal=o.pos,n.yLabelVal=l.y),n[b._id.charAt(0)+"Spike"]=b.c2p(o.pos,!0),s(l,f,n),n}e.exports={hoverPoints:function(t,e,r,n){var a,i=t.cd[0].trace.hoveron,o=[];return-1!==i.indexOf("boxes")&&(o=o.concat(l(t,e,r,n))),-1!==i.indexOf("points")&&(a=c(t,e,r)),"closest"===n?a?[a]:o:a?(o.push(a),o):o},hoverOnBoxes:l,hoverOnPoints:c}},{"../../components/color":591,"../../components/fx":630,"../../lib":717,"../../plots/cartesian/axes":765}],887:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults").supplyDefaults,crossTraceDefaults:t("./defaults").crossTraceDefaults,supplyLayoutDefaults:t("./layout_defaults").supplyLayoutDefaults,calc:t("./calc"),crossTraceCalc:t("./cross_trace_calc").crossTraceCalc,plot:t("./plot").plot,style:t("./style").style,styleOnSelect:t("./style").styleOnSelect,hoverPoints:t("./hover").hoverPoints,eventData:t("./event_data"),selectPoints:t("./select"),moduleType:"trace",name:"box",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","symbols","oriented","box-violin","showLegend","boxLayout","zoomScale"],meta:{}}},{"../../plots/cartesian":776,"./attributes":881,"./calc":882,"./cross_trace_calc":883,"./defaults":884,"./event_data":885,"./hover":886,"./layout_attributes":888,"./layout_defaults":889,"./plot":890,"./select":891,"./style":892}],888:[function(t,e,r){"use strict";e.exports={boxmode:{valType:"enumerated",values:["group","overlay"],dflt:"overlay",editType:"calc"},boxgap:{valType:"number",min:0,max:1,dflt:.3,editType:"calc"},boxgroupgap:{valType:"number",min:0,max:1,dflt:.3,editType:"calc"}}},{}],889:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("./layout_attributes");function o(t,e,r,a,i){for(var o=i+"Layout",s=!1,l=0;l<r.length;l++){var c=r[l];if(n.traceIs(c,o)){s=!0;break}}s&&(a(i+"mode"),a(i+"gap"),a(i+"groupgap"))}e.exports={supplyLayoutDefaults:function(t,e,r){o(0,0,r,function(r,n){return a.coerce(t,e,i,r,n)},"box")},_supply:o}},{"../../lib":717,"../../registry":846,"./layout_attributes":888}],890:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../components/drawing"),o=5,s=.01;function l(t,e,r,i){var o,s,l=e.pos,c=e.val,u=i.bPos,h=i.wdPos||0,f=i.bPosPxOffset||0,p=r.whiskerwidth||0,d=r.notched||!1,g=d?1-2*r.notchwidth:1;Array.isArray(i.bdPos)?(o=i.bdPos[0],s=i.bdPos[1]):(o=i.bdPos,s=i.bdPos);var v=t.selectAll("path.box").data("violin"!==r.type||r.box.visible?a.identity:[]);v.enter().append("path").style("vector-effect","non-scaling-stroke").attr("class","box"),v.exit().remove(),v.each(function(t){if(t.empty)return"M0,0Z";var e=l.c2l(t.pos+u,!0),i=l.l2p(e)+f,v=l.l2p(e-o)+f,m=l.l2p(e+s)+f,y=l.l2p(e-h)+f,x=l.l2p(e+h)+f,b=l.l2p(e-o*g)+f,_=l.l2p(e+s*g)+f,w=c.c2p(t.q1,!0),k=c.c2p(t.q3,!0),T=a.constrain(c.c2p(t.med,!0),Math.min(w,k)+1,Math.max(w,k)-1),M=void 0===t.lf||!1===r.boxpoints,A=c.c2p(M?t.min:t.lf,!0),S=c.c2p(M?t.max:t.uf,!0),E=c.c2p(t.ln,!0),L=c.c2p(t.un,!0);"h"===r.orientation?n.select(this).attr("d","M"+T+","+b+"V"+_+"M"+w+","+v+"V"+m+(d?"H"+E+"L"+T+","+_+"L"+L+","+m:"")+"H"+k+"V"+v+(d?"H"+L+"L"+T+","+b+"L"+E+","+v:"")+"ZM"+w+","+i+"H"+A+"M"+k+","+i+"H"+S+(0===p?"":"M"+A+","+y+"V"+x+"M"+S+","+y+"V"+x)):n.select(this).attr("d","M"+b+","+T+"H"+_+"M"+v+","+w+"H"+m+(d?"V"+E+"L"+_+","+T+"L"+m+","+L:"")+"V"+k+"H"+v+(d?"V"+L+"L"+b+","+T+"L"+v+","+E:"")+"ZM"+i+","+w+"V"+A+"M"+i+","+k+"V"+S+(0===p?"":"M"+y+","+A+"H"+x+"M"+y+","+S+"H"+x))})}function c(t,e,r,n){var l=e.x,c=e.y,u=n.bdPos,h=n.bPos,f=r.boxpoints||r.points;a.seedPseudoRandom();var p=t.selectAll("g.points").data(f?function(t){return t.forEach(function(t){t.t=n,t.trace=r}),t}:[]);p.enter().append("g").attr("class","points"),p.exit().remove();var d=p.selectAll("path").data(function(t){var e,n,i=t.pts2,l=Math.max((t.max-t.min)/10,t.q3-t.q1),c=1e-9*l,p=l*s,d=[],g=0;if(r.jitter){if(0===l)for(g=1,d=new Array(i.length),e=0;e<i.length;e++)d[e]=1;else for(e=0;e<i.length;e++){var v=Math.max(0,e-o),m=i[v].v,y=Math.min(i.length-1,e+o),x=i[y].v;"all"!==f&&(i[e].v<t.lf?x=Math.min(x,t.lf):m=Math.max(m,t.uf));var b=Math.sqrt(p*(y-v)/(x-m+c))||0;b=a.constrain(Math.abs(b),0,1),d.push(b),g=Math.max(b,g)}n=2*r.jitter/(g||1)}for(e=0;e<i.length;e++){var _=i[e],w=_.v,k=r.jitter?n*d[e]*(a.pseudoRandom()-.5):0,T=t.pos+h+u*(r.pointpos+k);"h"===r.orientation?(_.y=T,_.x=w):(_.x=T,_.y=w),"suspectedoutliers"===f&&w<t.uo&&w>t.lo&&(_.so=!0)}return i});d.enter().append("path").classed("point",!0),d.exit().remove(),d.call(i.translatePoints,l,c)}function u(t,e,r,i){var o,s,l=e.pos,c=e.val,u=i.bPos,h=i.bPosPxOffset||0,f=r.boxmean||(r.meanline||{}).visible;Array.isArray(i.bdPos)?(o=i.bdPos[0],s=i.bdPos[1]):(o=i.bdPos,s=i.bdPos);var p=t.selectAll("path.mean").data("box"===r.type&&r.boxmean||"violin"===r.type&&r.box.visible&&r.meanline.visible?a.identity:[]);p.enter().append("path").attr("class","mean").style({fill:"none","vector-effect":"non-scaling-stroke"}),p.exit().remove(),p.each(function(t){var e=l.c2l(t.pos+u,!0),a=l.l2p(e)+h,i=l.l2p(e-o)+h,p=l.l2p(e+s)+h,d=c.c2p(t.mean,!0),g=c.c2p(t.mean-t.sd,!0),v=c.c2p(t.mean+t.sd,!0);"h"===r.orientation?n.select(this).attr("d","M"+d+","+i+"V"+p+("sd"===f?"m0,0L"+g+","+a+"L"+d+","+i+"L"+v+","+a+"Z":"")):n.select(this).attr("d","M"+i+","+d+"H"+p+("sd"===f?"m0,0L"+a+","+g+"L"+i+","+d+"L"+a+","+v+"Z":""))})}e.exports={plot:function(t,e,r,i){var o=e.xaxis,s=e.yaxis;a.makeTraceGroups(i,r,"trace boxes").each(function(t){var e,r,a=n.select(this),i=t[0],h=i.t,f=i.trace;h.wdPos=h.bdPos*f.whiskerwidth,!0!==f.visible||h.empty?a.remove():("h"===f.orientation?(e=s,r=o):(e=o,r=s),l(a,{pos:e,val:r},f,h),c(a,{x:o,y:s},f,h),u(a,{pos:e,val:r},f,h))})},plotBoxAndWhiskers:l,plotPoints:c,plotBoxMean:u}},{"../../components/drawing":612,"../../lib":717,d3:165}],891:[function(t,e,r){"use strict";e.exports=function(t,e){var r,n,a=t.cd,i=t.xaxis,o=t.yaxis,s=[];if(!1===e)for(r=0;r<a.length;r++)for(n=0;n<(a[r].pts||[]).length;n++)a[r].pts[n].selected=0;else for(r=0;r<a.length;r++)for(n=0;n<(a[r].pts||[]).length;n++){var l=a[r].pts[n],c=i.c2p(l.x),u=o.c2p(l.y);e.contains([c,u],null,l.i,t)?(s.push({pointNumber:l.i,x:i.c2d(l.x),y:o.c2d(l.y)}),l.selected=1):l.selected=0}return s}},{}],892:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/color"),i=t("../../components/drawing");e.exports={style:function(t,e,r){var o=r||n.select(t).selectAll("g.trace.boxes");o.style("opacity",function(t){return t[0].trace.opacity}),o.each(function(e){var r=n.select(this),o=e[0].trace,s=o.line.width;function l(t,e,r,n){t.style("stroke-width",e+"px").call(a.stroke,r).call(a.fill,n)}var c=r.selectAll("path.box");if("candlestick"===o.type)c.each(function(t){if(!t.empty){var e=n.select(this),r=o[t.dir];l(e,r.line.width,r.line.color,r.fillcolor),e.style("opacity",o.selectedpoints&&!t.selected?.3:1)}});else{l(c,s,o.line.color,o.fillcolor),r.selectAll("path.mean").style({"stroke-width":s,"stroke-dasharray":2*s+"px,"+s+"px"}).call(a.stroke,o.line.color);var u=r.selectAll("path.point");i.pointStyle(u,o,t)}})},styleOnSelect:function(t,e,r){var n=e[0].trace,a=r.selectAll("path.point");n.selectedpoints?i.selectedPointStyle(a,n):i.pointStyle(a,n,t)}}},{"../../components/color":591,"../../components/drawing":612,d3:165}],893:[function(t,e,r){"use strict";var n=t("../../lib").extendFlat,a=t("../ohlc/attributes"),i=t("../box/attributes");function o(t){return{line:{color:n({},i.line.color,{dflt:t}),width:i.line.width,editType:"style"},fillcolor:i.fillcolor,editType:"style"}}e.exports={x:a.x,open:a.open,high:a.high,low:a.low,close:a.close,line:{width:n({},i.line.width,{}),editType:"style"},increasing:o(a.increasing.line.color.dflt),decreasing:o(a.decreasing.line.color.dflt),text:a.text,hovertext:a.hovertext,whiskerwidth:n({},i.whiskerwidth,{dflt:0}),hoverlabel:a.hoverlabel}},{"../../lib":717,"../box/attributes":881,"../ohlc/attributes":1066}],894:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../ohlc/calc").calcCommon;function o(t,e,r,n){return{min:r,q1:Math.min(t,n),med:n,q3:Math.max(t,n),max:e}}e.exports=function(t,e){var r=t._fullLayout,s=a.getFromId(t,e.xaxis),l=a.getFromId(t,e.yaxis),c=s.makeCalcdata(e,"x"),u=i(t,e,c,l,o);return u.length?(n.extendFlat(u[0].t,{num:r._numBoxes,dPos:n.distinctVals(c).minDiff/2,posLetter:"x",valLetter:"y"}),r._numBoxes++,u):[{t:{empty:!0}}]}},{"../../lib":717,"../../plots/cartesian/axes":765,"../ohlc/calc":1067}],895:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/color"),i=t("../ohlc/ohlc_defaults"),o=t("./attributes");function s(t,e,r,n){var i=r(n+".line.color");r(n+".line.width",e.line.width),r(n+".fillcolor",a.addOpacity(i,.5))}e.exports=function(t,e,r,a){function l(r,a){return n.coerce(t,e,o,r,a)}i(t,e,l,a)?(l("line.width"),s(t,e,l,"increasing"),s(t,e,l,"decreasing"),l("text"),l("hovertext"),l("whiskerwidth"),a._requestRangeslider[e.xaxis]=!0):e.visible=!1}},{"../../components/color":591,"../../lib":717,"../ohlc/ohlc_defaults":1071,"./attributes":893}],896:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"candlestick",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","showLegend","candlestick","boxLayout"],meta:{},attributes:t("./attributes"),layoutAttributes:t("../box/layout_attributes"),supplyLayoutDefaults:t("../box/layout_defaults").supplyLayoutDefaults,crossTraceCalc:t("../box/cross_trace_calc").crossTraceCalc,supplyDefaults:t("./defaults"),calc:t("./calc"),plot:t("../box/plot").plot,layerName:"boxlayer",style:t("../box/style").style,hoverPoints:t("../ohlc/hover").hoverPoints,selectPoints:t("../ohlc/select")}},{"../../plots/cartesian":776,"../box/cross_trace_calc":883,"../box/layout_attributes":888,"../box/layout_defaults":889,"../box/plot":890,"../box/style":892,"../ohlc/hover":1069,"../ohlc/select":1073,"./attributes":893,"./calc":894,"./defaults":895}],897:[function(t,e,r){"use strict";var n=t("./axis_defaults"),a=t("../../plot_api/plot_template");e.exports=function(t,e,r,i,o){i("a")||(i("da"),i("a0")),i("b")||(i("db"),i("b0")),function(t,e,r,i){["aaxis","baxis"].forEach(function(o){var s=o.charAt(0),l=t[o]||{},c=a.newContainer(e,o),u={tickfont:"x",id:s+"axis",letter:s,font:e.font,name:o,data:t[s],calendar:e.calendar,dfltColor:i,bgColor:r.paper_bgcolor,fullLayout:r};n(l,c,u),c._categories=c._categories||[],t[o]||"-"===l.type||(t[o]={type:l.type})})}(t,e,r,o)}},{"../../plot_api/plot_template":755,"./axis_defaults":902}],898:[function(t,e,r){"use strict";var n=t("../../lib").isArrayOrTypedArray;e.exports=function(t){return function t(e,r){if(!n(e)||r>=10)return null;var a=1/0;var i=-1/0;var o=e.length;for(var s=0;s<o;s++){var l=e[s];if(n(l)){var c=t(l,r+1);c&&(a=Math.min(c[0],a),i=Math.max(c[1],i))}else a=Math.min(l,a),i=Math.max(l,i)}return[a,i]}(t,0)}},{"../../lib":717}],899:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),a=t("./axis_attributes"),i=t("../../components/color/attributes"),o=n({editType:"calc"});o.family.dflt='"Open Sans", verdana, arial, sans-serif',o.size.dflt=12,o.color.dflt=i.defaultLine,e.exports={carpet:{valType:"string",editType:"calc"},x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},a:{valType:"data_array",editType:"calc"},a0:{valType:"number",dflt:0,editType:"calc"},da:{valType:"number",dflt:1,editType:"calc"},b:{valType:"data_array",editType:"calc"},b0:{valType:"number",dflt:0,editType:"calc"},db:{valType:"number",dflt:1,editType:"calc"},cheaterslope:{valType:"number",dflt:1,editType:"calc"},aaxis:a,baxis:a,font:o,color:{valType:"color",dflt:i.defaultLine,editType:"plot"},transforms:void 0}},{"../../components/color/attributes":590,"../../plots/font_attributes":791,"./axis_attributes":901}],900:[function(t,e,r){"use strict";var n=t("../../lib").isArrayOrTypedArray;e.exports=function(t,e,r,a){var i,o,s,l,c,u,h,f,p,d,g,v,m,y=n(r)?"a":"b",x=("a"===y?t.aaxis:t.baxis).smoothing,b="a"===y?t.a2i:t.b2j,_="a"===y?r:a,w="a"===y?a:r,k="a"===y?e.a.length:e.b.length,T="a"===y?e.b.length:e.a.length,M=Math.floor("a"===y?t.b2j(w):t.a2i(w)),A="a"===y?function(e){return t.evalxy([],e,M)}:function(e){return t.evalxy([],M,e)};x&&(s=Math.max(0,Math.min(T-2,M)),l=M-s,o="a"===y?function(e,r){return t.dxydi([],e,s,r,l)}:function(e,r){return t.dxydj([],s,e,l,r)});var S=b(_[0]),E=b(_[1]),L=S<E?1:-1,C=1e-8*(E-S),P=L>0?Math.floor:Math.ceil,O=L>0?Math.ceil:Math.floor,z=L>0?Math.min:Math.max,I=L>0?Math.max:Math.min,D=P(S+C),R=O(E-C),F=[[h=A(S)]];for(i=D;i*L<R*L;i+=L)c=[],g=I(S,i),m=(v=z(E,i+L))-g,u=Math.max(0,Math.min(k-2,Math.floor(.5*(g+v)))),f=A(v),x&&(p=o(u,g-u),d=o(u,v-u),c.push([h[0]+p[0]/3*m,h[1]+p[1]/3*m]),c.push([f[0]-d[0]/3*m,f[1]-d[1]/3*m])),c.push(f),F.push(c),h=f;return F}},{"../../lib":717}],901:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),a=t("../../components/color/attributes"),i=t("../../plots/cartesian/layout_attributes"),o=t("../../plot_api/edit_types").overrideAll;t("../../constants/docs").FORMAT_LINK,t("../../constants/docs").TIME_FORMAT_LINK;e.exports={color:{valType:"color",editType:"calc"},smoothing:{valType:"number",dflt:1,min:0,max:1.3,editType:"calc"},title:{text:{valType:"string",dflt:"",editType:"calc"},font:n({editType:"calc"}),offset:{valType:"number",dflt:10,editType:"calc"},editType:"calc"},type:{valType:"enumerated",values:["-","linear","date","category"],dflt:"-",editType:"calc"},autorange:{valType:"enumerated",values:[!0,!1,"reversed"],dflt:!0,editType:"calc"},rangemode:{valType:"enumerated",values:["normal","tozero","nonnegative"],dflt:"normal",editType:"calc"},range:{valType:"info_array",editType:"calc",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}]},fixedrange:{valType:"boolean",dflt:!1,editType:"calc"},cheatertype:{valType:"enumerated",values:["index","value"],dflt:"value",editType:"calc"},tickmode:{valType:"enumerated",values:["linear","array"],dflt:"array",editType:"calc"},nticks:{valType:"integer",min:0,dflt:0,editType:"calc"},tickvals:{valType:"data_array",editType:"calc"},ticktext:{valType:"data_array",editType:"calc"},showticklabels:{valType:"enumerated",values:["start","end","both","none"],dflt:"start",editType:"calc"},tickfont:n({editType:"calc"}),tickangle:{valType:"angle",dflt:"auto",editType:"calc"},tickprefix:{valType:"string",dflt:"",editType:"calc"},showtickprefix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"calc"},ticksuffix:{valType:"string",dflt:"",editType:"calc"},showticksuffix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"calc"},showexponent:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"calc"},exponentformat:{valType:"enumerated",values:["none","e","E","power","SI","B"],dflt:"B",editType:"calc"},separatethousands:{valType:"boolean",dflt:!1,editType:"calc"},tickformat:{valType:"string",dflt:"",editType:"calc"},tickformatstops:o(i.tickformatstops,"calc","from-root"),categoryorder:{valType:"enumerated",values:["trace","category ascending","category descending","array"],dflt:"trace",editType:"calc"},categoryarray:{valType:"data_array",editType:"calc"},labelpadding:{valType:"integer",dflt:10,editType:"calc"},labelprefix:{valType:"string",editType:"calc"},labelsuffix:{valType:"string",dflt:"",editType:"calc"},showline:{valType:"boolean",dflt:!1,editType:"calc"},linecolor:{valType:"color",dflt:a.defaultLine,editType:"calc"},linewidth:{valType:"number",min:0,dflt:1,editType:"calc"},gridcolor:{valType:"color",editType:"calc"},gridwidth:{valType:"number",min:0,dflt:1,editType:"calc"},showgrid:{valType:"boolean",dflt:!0,editType:"calc"},minorgridcount:{valType:"integer",min:0,dflt:0,editType:"calc"},minorgridwidth:{valType:"number",min:0,dflt:1,editType:"calc"},minorgridcolor:{valType:"color",dflt:a.lightLine,editType:"calc"},startline:{valType:"boolean",editType:"calc"},startlinecolor:{valType:"color",editType:"calc"},startlinewidth:{valType:"number",dflt:1,editType:"calc"},endline:{valType:"boolean",editType:"calc"},endlinewidth:{valType:"number",dflt:1,editType:"calc"},endlinecolor:{valType:"color",editType:"calc"},tick0:{valType:"number",min:0,dflt:0,editType:"calc"},dtick:{valType:"number",min:0,dflt:1,editType:"calc"},arraytick0:{valType:"integer",min:0,dflt:0,editType:"calc"},arraydtick:{valType:"integer",min:1,dflt:1,editType:"calc"},_deprecated:{title:{valType:"string",editType:"calc"},titlefont:n({editType:"calc"}),titleoffset:{valType:"number",dflt:10,editType:"calc"}},editType:"calc"}},{"../../components/color/attributes":590,"../../constants/docs":688,"../../plot_api/edit_types":748,"../../plots/cartesian/layout_attributes":777,"../../plots/font_attributes":791}],902:[function(t,e,r){"use strict";var n=t("./attributes"),a=t("../../components/color").addOpacity,i=t("../../registry"),o=t("../../lib"),s=t("../../plots/cartesian/tick_value_defaults"),l=t("../../plots/cartesian/tick_label_defaults"),c=t("../../plots/cartesian/category_order_defaults"),u=t("../../plots/cartesian/set_convert"),h=t("../../plots/cartesian/axis_autotype");e.exports=function(t,e,r){var f=r.letter,p=r.font||{},d=n[f+"axis"];function g(r,n){return o.coerce(t,e,d,r,n)}function v(r,n){return o.coerce2(t,e,d,r,n)}r.name&&(e._name=r.name,e._id=r.name);var m=g("type");("-"===m&&(r.data&&function(t,e){if("-"!==t.type)return;var r=t._id.charAt(0),n=t[r+"calendar"];t.type=h(e,n)}(e,r.data),"-"===e.type?e.type="linear":m=t.type=e.type),g("smoothing"),g("cheatertype"),g("showticklabels"),g("labelprefix",f+" = "),g("labelsuffix"),g("showtickprefix"),g("showticksuffix"),g("separatethousands"),g("tickformat"),g("exponentformat"),g("showexponent"),g("categoryorder"),g("tickmode"),g("tickvals"),g("ticktext"),g("tick0"),g("dtick"),"array"===e.tickmode&&(g("arraytick0"),g("arraydtick")),g("labelpadding"),e._hovertitle=f,"date"===m)&&i.getComponentMethod("calendars","handleDefaults")(t,e,"calendar",r.calendar);u(e,r.fullLayout),e.c2p=o.identity;var y=g("color",r.dfltColor),x=y===t.color?y:p.color;g("title.text")&&(o.coerceFont(g,"title.font",{family:p.family,size:Math.round(1.2*p.size),color:x}),g("title.offset")),g("tickangle"),g("autorange",!e.isValidRange(t.range))&&g("rangemode"),g("range"),e.cleanRange(),g("fixedrange"),s(t,e,g,m),l(t,e,g,m,r),c(t,e,g,{data:r.data,dataAttr:f});var b=v("gridcolor",a(y,.3)),_=v("gridwidth"),w=g("showgrid");w||(delete e.gridcolor,delete e.gridwidth);var k=v("startlinecolor",y),T=v("startlinewidth",_);g("startline",e.showgrid||!!k||!!T)||(delete e.startlinecolor,delete e.startlinewidth);var M=v("endlinecolor",y),A=v("endlinewidth",_);return g("endline",e.showgrid||!!M||!!A)||(delete e.endlinecolor,delete e.endlinewidth),w?(g("minorgridcount"),g("minorgridwidth",_),g("minorgridcolor",a(b,.06)),e.minorgridcount||(delete e.minorgridwidth,delete e.minorgridcolor)):(delete e.gridcolor,delete e.gridWidth),"none"===e.showticklabels&&(delete e.tickfont,delete e.tickangle,delete e.showexponent,delete e.exponentformat,delete e.tickformat,delete e.showticksuffix,delete e.showtickprefix),e.showticksuffix||delete e.ticksuffix,e.showtickprefix||delete e.tickprefix,g("tickmode"),e}},{"../../components/color":591,"../../lib":717,"../../plots/cartesian/axis_autotype":766,"../../plots/cartesian/category_order_defaults":769,"../../plots/cartesian/set_convert":783,"../../plots/cartesian/tick_label_defaults":784,"../../plots/cartesian/tick_value_defaults":786,"../../registry":846,"./attributes":899}],903:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../lib").isArray1D,i=t("./cheater_basis"),o=t("./array_minmax"),s=t("./calc_gridlines"),l=t("./calc_labels"),c=t("./calc_clippath"),u=t("../heatmap/clean_2d_array"),h=t("./smooth_fill_2d_array"),f=t("../heatmap/convert_column_xyz"),p=t("./set_convert");e.exports=function(t,e){var r=n.getFromId(t,e.xaxis),d=n.getFromId(t,e.yaxis),g=e.aaxis,v=e.baxis,m=e.x,y=e.y,x=[];m&&a(m)&&x.push("x"),y&&a(y)&&x.push("y"),x.length&&f(e,g,v,"a","b",x);var b=e._a=e._a||e.a,_=e._b=e._b||e.b;m=e._x||e.x,y=e._y||e.y;var w={};if(e._cheater){var k="index"===g.cheatertype?b.length:b,T="index"===v.cheatertype?_.length:_;m=i(k,T,e.cheaterslope)}e._x=m=u(m),e._y=y=u(y),h(m,b,_),h(y,b,_),p(e),e.setScale();var M=o(m),A=o(y),S=.5*(M[1]-M[0]),E=.5*(M[1]+M[0]),L=.5*(A[1]-A[0]),C=.5*(A[1]+A[0]);return M=[E-1.3*S,E+1.3*S],A=[C-1.3*L,C+1.3*L],e._extremes[r._id]=n.findExtremes(r,M,{padded:!0}),e._extremes[d._id]=n.findExtremes(d,A,{padded:!0}),s(e,"a","b"),s(e,"b","a"),l(e,g),l(e,v),w.clipsegments=c(e._xctrl,e._yctrl,g,v),w.x=m,w.y=y,w.a=b,w.b=_,[w]}},{"../../lib":717,"../../plots/cartesian/axes":765,"../heatmap/clean_2d_array":1002,"../heatmap/convert_column_xyz":1004,"./array_minmax":898,"./calc_clippath":904,"./calc_gridlines":905,"./calc_labels":906,"./cheater_basis":908,"./set_convert":921,"./smooth_fill_2d_array":922}],904:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){var a,i,o,s=[],l=!!r.smoothing,c=!!n.smoothing,u=t[0].length-1,h=t.length-1;for(a=0,i=[],o=[];a<=u;a++)i[a]=t[0][a],o[a]=e[0][a];for(s.push({x:i,y:o,bicubic:l}),a=0,i=[],o=[];a<=h;a++)i[a]=t[a][u],o[a]=e[a][u];for(s.push({x:i,y:o,bicubic:c}),a=u,i=[],o=[];a>=0;a--)i[u-a]=t[h][a],o[u-a]=e[h][a];for(s.push({x:i,y:o,bicubic:l}),a=h,i=[],o=[];a>=0;a--)i[h-a]=t[a][0],o[h-a]=e[a][0];return s.push({x:i,y:o,bicubic:c}),s}},{}],905:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../lib/extend").extendFlat;e.exports=function(t,e,r){var i,o,s,l,c,u,h,f,p,d,g,v,m,y,x=t["_"+e],b=t[e+"axis"],_=b._gridlines=[],w=b._minorgridlines=[],k=b._boundarylines=[],T=t["_"+r],M=t[r+"axis"];"array"===b.tickmode&&(b.tickvals=x.slice());var A=t._xctrl,S=t._yctrl,E=A[0].length,L=A.length,C=t._a.length,P=t._b.length;n.prepTicks(b),"array"===b.tickmode&&delete b.tickvals;var O=b.smoothing?3:1;function z(n){var a,i,o,s,l,c,u,h,p,d,g,v,m=[],y=[],x={};if("b"===e)for(i=t.b2j(n),o=Math.floor(Math.max(0,Math.min(P-2,i))),s=i-o,x.length=P,x.crossLength=C,x.xy=function(e){return t.evalxy([],e,i)},x.dxy=function(e,r){return t.dxydi([],e,o,r,s)},a=0;a<C;a++)c=Math.min(C-2,a),u=a-c,h=t.evalxy([],a,i),M.smoothing&&a>0&&(p=t.dxydi([],a-1,o,0,s),m.push(l[0]+p[0]/3),y.push(l[1]+p[1]/3),d=t.dxydi([],a-1,o,1,s),m.push(h[0]-d[0]/3),y.push(h[1]-d[1]/3)),m.push(h[0]),y.push(h[1]),l=h;else for(a=t.a2i(n),c=Math.floor(Math.max(0,Math.min(C-2,a))),u=a-c,x.length=C,x.crossLength=P,x.xy=function(e){return t.evalxy([],a,e)},x.dxy=function(e,r){return t.dxydj([],c,e,u,r)},i=0;i<P;i++)o=Math.min(P-2,i),s=i-o,h=t.evalxy([],a,i),M.smoothing&&i>0&&(g=t.dxydj([],c,i-1,u,0),m.push(l[0]+g[0]/3),y.push(l[1]+g[1]/3),v=t.dxydj([],c,i-1,u,1),m.push(h[0]-v[0]/3),y.push(h[1]-v[1]/3)),m.push(h[0]),y.push(h[1]),l=h;return x.axisLetter=e,x.axis=b,x.crossAxis=M,x.value=n,x.constvar=r,x.index=f,x.x=m,x.y=y,x.smoothing=M.smoothing,x}function I(n){var a,i,o,s,l,c=[],u=[],h={};if(h.length=x.length,h.crossLength=T.length,"b"===e)for(o=Math.max(0,Math.min(P-2,n)),l=Math.min(1,Math.max(0,n-o)),h.xy=function(e){return t.evalxy([],e,n)},h.dxy=function(e,r){return t.dxydi([],e,o,r,l)},a=0;a<E;a++)c[a]=A[n*O][a],u[a]=S[n*O][a];else for(i=Math.max(0,Math.min(C-2,n)),s=Math.min(1,Math.max(0,n-i)),h.xy=function(e){return t.evalxy([],n,e)},h.dxy=function(e,r){return t.dxydj([],i,e,s,r)},a=0;a<L;a++)c[a]=A[a][n*O],u[a]=S[a][n*O];return h.axisLetter=e,h.axis=b,h.crossAxis=M,h.value=x[n],h.constvar=r,h.index=n,h.x=c,h.y=u,h.smoothing=M.smoothing,h}if("array"===b.tickmode){for(l=5e-15,u=(c=[Math.floor((x.length-1-b.arraytick0)/b.arraydtick*(1+l)),Math.ceil(-b.arraytick0/b.arraydtick/(1+l))].sort(function(t,e){return t-e}))[0]-1,h=c[1]+1,f=u;f<h;f++)(o=b.arraytick0+b.arraydtick*f)<0||o>x.length-1||_.push(a(I(o),{color:b.gridcolor,width:b.gridwidth}));for(f=u;f<h;f++)if(s=b.arraytick0+b.arraydtick*f,g=Math.min(s+b.arraydtick,x.length-1),!(s<0||s>x.length-1||g<0||g>x.length-1))for(v=x[s],m=x[g],i=0;i<b.minorgridcount;i++)(y=g-s)<=0||(d=v+(m-v)*(i+1)/(b.minorgridcount+1)*(b.arraydtick/y))<x[0]||d>x[x.length-1]||w.push(a(z(d),{color:b.minorgridcolor,width:b.minorgridwidth}));b.startline&&k.push(a(I(0),{color:b.startlinecolor,width:b.startlinewidth})),b.endline&&k.push(a(I(x.length-1),{color:b.endlinecolor,width:b.endlinewidth}))}else{for(l=5e-15,u=(c=[Math.floor((x[x.length-1]-b.tick0)/b.dtick*(1+l)),Math.ceil((x[0]-b.tick0)/b.dtick/(1+l))].sort(function(t,e){return t-e}))[0],h=c[1],f=u;f<=h;f++)p=b.tick0+b.dtick*f,_.push(a(z(p),{color:b.gridcolor,width:b.gridwidth}));for(f=u-1;f<h+1;f++)for(p=b.tick0+b.dtick*f,i=0;i<b.minorgridcount;i++)(d=p+b.dtick*(i+1)/(b.minorgridcount+1))<x[0]||d>x[x.length-1]||w.push(a(z(d),{color:b.minorgridcolor,width:b.minorgridwidth}));b.startline&&k.push(a(z(x[0]),{color:b.startlinecolor,width:b.startlinewidth})),b.endline&&k.push(a(z(x[x.length-1]),{color:b.endlinecolor,width:b.endlinewidth}))}}},{"../../lib/extend":708,"../../plots/cartesian/axes":765}],906:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../lib/extend").extendFlat;e.exports=function(t,e){var r,i,o,s=e._labels=[],l=e._gridlines;for(r=0;r<l.length;r++)o=l[r],-1!==["start","both"].indexOf(e.showticklabels)&&(i=n.tickText(e,o.value),a(i,{prefix:void 0,suffix:void 0,endAnchor:!0,xy:o.xy(0),dxy:o.dxy(0,0),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0===r,isLast:r===l.length-1}),s.push(i)),-1!==["end","both"].indexOf(e.showticklabels)&&(i=n.tickText(e,o.value),a(i,{endAnchor:!1,xy:o.xy(o.crossLength-1),dxy:o.dxy(o.crossLength-2,1),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0===r,isLast:r===l.length-1}),s.push(i))}},{"../../lib/extend":708,"../../plots/cartesian/axes":765}],907:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){var a=t[0]-e[0],i=t[1]-e[1],o=r[0]-e[0],s=r[1]-e[1],l=Math.pow(a*a+i*i,.25),c=Math.pow(o*o+s*s,.25),u=(c*c*a-l*l*o)*n,h=(c*c*i-l*l*s)*n,f=c*(l+c)*3,p=l*(l+c)*3;return[[e[0]+(f&&u/f),e[1]+(f&&h/f)],[e[0]-(p&&u/p),e[1]-(p&&h/p)]]}},{}],908:[function(t,e,r){"use strict";var n=t("../../lib").isArrayOrTypedArray;e.exports=function(t,e,r){var a,i,o,s,l,c,u=[],h=n(t)?t.length:t,f=n(e)?e.length:e,p=n(t)?t:null,d=n(e)?e:null;p&&(o=(p.length-1)/(p[p.length-1]-p[0])/(h-1)),d&&(s=(d.length-1)/(d[d.length-1]-d[0])/(f-1));var g=1/0,v=-1/0;for(i=0;i<f;i++)for(u[i]=[],l=d?(d[i]-d[0])*s:i/(f-1),a=0;a<h;a++)c=(p?(p[a]-p[0])*o:a/(h-1))-l*r,g=Math.min(c,g),v=Math.max(c,v),u[i][a]=c;var m=1/(v-g),y=-g*m;for(i=0;i<f;i++)for(a=0;a<h;a++)u[i][a]=m*u[i][a]+y;return u}},{"../../lib":717}],909:[function(t,e,r){"use strict";var n=t("./catmull_rom"),a=t("../../lib").ensureArray;function i(t,e,r){var n=-.5*r[0]+1.5*e[0],a=-.5*r[1]+1.5*e[1];return[(2*n+t[0])/3,(2*a+t[1])/3]}e.exports=function(t,e,r,o,s,l){var c,u,h,f,p,d,g,v,m,y,x=r[0].length,b=r.length,_=s?3*x-2:x,w=l?3*b-2:b;for(t=a(t,w),e=a(e,w),h=0;h<w;h++)t[h]=a(t[h],_),e[h]=a(e[h],_);for(u=0,f=0;u<b;u++,f+=l?3:1)for(p=t[f],d=e[f],g=r[u],v=o[u],c=0,h=0;c<x;c++,h+=s?3:1)p[h]=g[c],d[h]=v[c];if(s)for(u=0,f=0;u<b;u++,f+=l?3:1){for(c=1,h=3;c<x-1;c++,h+=3)m=n([r[u][c-1],o[u][c-1]],[r[u][c],o[u][c]],[r[u][c+1],o[u][c+1]],s),t[f][h-1]=m[0][0],e[f][h-1]=m[0][1],t[f][h+1]=m[1][0],e[f][h+1]=m[1][1];y=i([t[f][0],e[f][0]],[t[f][2],e[f][2]],[t[f][3],e[f][3]]),t[f][1]=y[0],e[f][1]=y[1],y=i([t[f][_-1],e[f][_-1]],[t[f][_-3],e[f][_-3]],[t[f][_-4],e[f][_-4]]),t[f][_-2]=y[0],e[f][_-2]=y[1]}if(l)for(h=0;h<_;h++){for(f=3;f<w-3;f+=3)m=n([t[f-3][h],e[f-3][h]],[t[f][h],e[f][h]],[t[f+3][h],e[f+3][h]],l),t[f-1][h]=m[0][0],e[f-1][h]=m[0][1],t[f+1][h]=m[1][0],e[f+1][h]=m[1][1];y=i([t[0][h],e[0][h]],[t[2][h],e[2][h]],[t[3][h],e[3][h]]),t[1][h]=y[0],e[1][h]=y[1],y=i([t[w-1][h],e[w-1][h]],[t[w-3][h],e[w-3][h]],[t[w-4][h],e[w-4][h]]),t[w-2][h]=y[0],e[w-2][h]=y[1]}if(s&&l)for(f=1;f<w;f+=(f+1)%3==0?2:1){for(h=3;h<_-3;h+=3)m=n([t[f][h-3],e[f][h-3]],[t[f][h],e[f][h]],[t[f][h+3],e[f][h+3]],s),t[f][h-1]=.5*(t[f][h-1]+m[0][0]),e[f][h-1]=.5*(e[f][h-1]+m[0][1]),t[f][h+1]=.5*(t[f][h+1]+m[1][0]),e[f][h+1]=.5*(e[f][h+1]+m[1][1]);y=i([t[f][0],e[f][0]],[t[f][2],e[f][2]],[t[f][3],e[f][3]]),t[f][1]=.5*(t[f][1]+y[0]),e[f][1]=.5*(e[f][1]+y[1]),y=i([t[f][_-1],e[f][_-1]],[t[f][_-3],e[f][_-3]],[t[f][_-4],e[f][_-4]]),t[f][_-2]=.5*(t[f][_-2]+y[0]),e[f][_-2]=.5*(e[f][_-2]+y[1])}return[t,e]}},{"../../lib":717,"./catmull_rom":907}],910:[function(t,e,r){"use strict";e.exports={RELATIVE_CULL_TOLERANCE:1e-6}},{}],911:[function(t,e,r){"use strict";e.exports=function(t,e,r){return e&&r?function(e,r,n,a,i){var o,s,l,c,u,h;e||(e=[]),r*=3,n*=3;var f=a*a,p=1-a,d=p*p,g=p*a*2,v=-3*d,m=3*(d-g),y=3*(g-f),x=3*f,b=i*i,_=b*i,w=1-i,k=w*w,T=k*w;for(h=0;h<t.length;h++)o=v*(u=t[h])[n][r]+m*u[n][r+1]+y*u[n][r+2]+x*u[n][r+3],s=v*u[n+1][r]+m*u[n+1][r+1]+y*u[n+1][r+2]+x*u[n+1][r+3],l=v*u[n+2][r]+m*u[n+2][r+1]+y*u[n+2][r+2]+x*u[n+2][r+3],c=v*u[n+3][r]+m*u[n+3][r+1]+y*u[n+3][r+2]+x*u[n+3][r+3],e[h]=T*o+3*(k*i*s+w*b*l)+_*c;return e}:e?function(e,r,n,a,i){var o,s,l,c;e||(e=[]),r*=3;var u=a*a,h=1-a,f=h*h,p=h*a*2,d=-3*f,g=3*(f-p),v=3*(p-u),m=3*u,y=1-i;for(l=0;l<t.length;l++)o=d*(c=t[l])[n][r]+g*c[n][r+1]+v*c[n][r+2]+m*c[n][r+3],s=d*c[n+1][r]+g*c[n+1][r+1]+v*c[n+1][r+2]+m*c[n+1][r+3],e[l]=y*o+i*s;return e}:r?function(e,r,n,a,i){var o,s,l,c,u,h;e||(e=[]),n*=3;var f=i*i,p=f*i,d=1-i,g=d*d,v=g*d;for(u=0;u<t.length;u++)o=(h=t[u])[n][r+1]-h[n][r],s=h[n+1][r+1]-h[n+1][r],l=h[n+2][r+1]-h[n+2][r],c=h[n+3][r+1]-h[n+3][r],e[u]=v*o+3*(g*i*s+d*f*l)+p*c;return e}:function(e,r,n,a,i){var o,s,l,c;e||(e=[]);var u=1-i;for(l=0;l<t.length;l++)o=(c=t[l])[n][r+1]-c[n][r],s=c[n+1][r+1]-c[n+1][r],e[l]=u*o+i*s;return e}}},{}],912:[function(t,e,r){"use strict";e.exports=function(t,e,r){return e&&r?function(e,r,n,a,i){var o,s,l,c,u,h;e||(e=[]),r*=3,n*=3;var f=a*a,p=f*a,d=1-a,g=d*d,v=g*d,m=i*i,y=1-i,x=y*y,b=y*i*2,_=-3*x,w=3*(x-b),k=3*(b-m),T=3*m;for(h=0;h<t.length;h++)o=_*(u=t[h])[n][r]+w*u[n+1][r]+k*u[n+2][r]+T*u[n+3][r],s=_*u[n][r+1]+w*u[n+1][r+1]+k*u[n+2][r+1]+T*u[n+3][r+1],l=_*u[n][r+2]+w*u[n+1][r+2]+k*u[n+2][r+2]+T*u[n+3][r+2],c=_*u[n][r+3]+w*u[n+1][r+3]+k*u[n+2][r+3]+T*u[n+3][r+3],e[h]=v*o+3*(g*a*s+d*f*l)+p*c;return e}:e?function(e,r,n,a,i){var o,s,l,c,u,h;e||(e=[]),r*=3;var f=i*i,p=f*i,d=1-i,g=d*d,v=g*d;for(u=0;u<t.length;u++)o=(h=t[u])[n+1][r]-h[n][r],s=h[n+1][r+1]-h[n][r+1],l=h[n+1][r+2]-h[n][r+2],c=h[n+1][r+3]-h[n][r+3],e[u]=v*o+3*(g*i*s+d*f*l)+p*c;return e}:r?function(e,r,n,a,i){var o,s,l,c;e||(e=[]),n*=3;var u=1-a,h=i*i,f=1-i,p=f*f,d=f*i*2,g=-3*p,v=3*(p-d),m=3*(d-h),y=3*h;for(l=0;l<t.length;l++)o=g*(c=t[l])[n][r]+v*c[n+1][r]+m*c[n+2][r]+y*c[n+3][r],s=g*c[n][r+1]+v*c[n+1][r+1]+m*c[n+2][r+1]+y*c[n+3][r+1],e[l]=u*o+a*s;return e}:function(e,r,n,a,i){var o,s,l,c;e||(e=[]);var u=1-a;for(l=0;l<t.length;l++)o=(c=t[l])[n+1][r]-c[n][r],s=c[n+1][r+1]-c[n][r+1],e[l]=u*o+a*s;return e}}},{}],913:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a){var i=e-2,o=r-2;return n&&a?function(e,r,n){var a,s,l,c,u,h;e||(e=[]);var f=Math.max(0,Math.min(Math.floor(r),i)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-f)),g=Math.max(0,Math.min(1,n-p));f*=3,p*=3;var v=d*d,m=v*d,y=1-d,x=y*y,b=x*y,_=g*g,w=_*g,k=1-g,T=k*k,M=T*k;for(h=0;h<t.length;h++)a=b*(u=t[h])[p][f]+3*(x*d*u[p][f+1]+y*v*u[p][f+2])+m*u[p][f+3],s=b*u[p+1][f]+3*(x*d*u[p+1][f+1]+y*v*u[p+1][f+2])+m*u[p+1][f+3],l=b*u[p+2][f]+3*(x*d*u[p+2][f+1]+y*v*u[p+2][f+2])+m*u[p+2][f+3],c=b*u[p+3][f]+3*(x*d*u[p+3][f+1]+y*v*u[p+3][f+2])+m*u[p+3][f+3],e[h]=M*a+3*(T*g*s+k*_*l)+w*c;return e}:n?function(e,r,n){e||(e=[]);var a,s,l,c,u,h,f=Math.max(0,Math.min(Math.floor(r),i)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-f)),g=Math.max(0,Math.min(1,n-p));f*=3;var v=d*d,m=v*d,y=1-d,x=y*y,b=x*y,_=1-g;for(u=0;u<t.length;u++)a=_*(h=t[u])[p][f]+g*h[p+1][f],s=_*h[p][f+1]+g*h[p+1][f+1],l=_*h[p][f+2]+g*h[p+1][f+1],c=_*h[p][f+3]+g*h[p+1][f+1],e[u]=b*a+3*(x*d*s+y*v*l)+m*c;return e}:a?function(e,r,n){e||(e=[]);var a,s,l,c,u,h,f=Math.max(0,Math.min(Math.floor(r),i)),p=Math.max(0,Math.min(Math.floor(n),o)),d=Math.max(0,Math.min(1,r-f)),g=Math.max(0,Math.min(1,n-p));p*=3;var v=g*g,m=v*g,y=1-g,x=y*y,b=x*y,_=1-d;for(u=0;u<t.length;u++)a=_*(h=t[u])[p][f]+d*h[p][f+1],s=_*h[p+1][f]+d*h[p+1][f+1],l=_*h[p+2][f]+d*h[p+2][f+1],c=_*h[p+3][f]+d*h[p+3][f+1],e[u]=b*a+3*(x*g*s+y*v*l)+m*c;return e}:function(e,r,n){e||(e=[]);var a,s,l,c,u=Math.max(0,Math.min(Math.floor(r),i)),h=Math.max(0,Math.min(Math.floor(n),o)),f=Math.max(0,Math.min(1,r-u)),p=Math.max(0,Math.min(1,n-h)),d=1-p,g=1-f;for(l=0;l<t.length;l++)a=g*(c=t[l])[h][u]+f*c[h][u+1],s=g*c[h+1][u]+f*c[h+1][u+1],e[l]=d*a+p*s;return e}}},{}],914:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./xy_defaults"),i=t("./ab_defaults"),o=t("./attributes"),s=t("../../components/color/attributes");e.exports=function(t,e,r,l){function c(r,a){return n.coerce(t,e,o,r,a)}e._clipPathId="clip"+e.uid+"carpet";var u=c("color",s.defaultLine);(n.coerceFont(c,"font"),c("carpet"),i(t,e,l,c,u),e.a&&e.b)?(e.a.length<3&&(e.aaxis.smoothing=0),e.b.length<3&&(e.baxis.smoothing=0),a(t,e,c)||(e.visible=!1),e._cheater&&c("cheaterslope")):e.visible=!1}},{"../../components/color/attributes":590,"../../lib":717,"./ab_defaults":897,"./attributes":899,"./xy_defaults":923}],915:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),plot:t("./plot"),calc:t("./calc"),animatable:!0,isContainer:!0,moduleType:"trace",name:"carpet",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","carpet","carpetAxis","notLegendIsolatable","noMultiCategory","noHover","noSortingByValue"],meta:{}}},{"../../plots/cartesian":776,"./attributes":899,"./calc":903,"./defaults":914,"./plot":920}],916:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r,n=t._fullData.length,a=0;a<n;a++){var i=t._fullData[a];if(i.index!==e.index&&("carpet"===i.type&&(r||(r=i),i.carpet===e.carpet)))return i}return r}},{}],917:[function(t,e,r){"use strict";e.exports=function(t,e,r){if(0===t.length)return"";var n,a=[],i=r?3:1;for(n=0;n<t.length;n+=i)a.push(t[n]+","+e[n]),r&&n<t.length-i&&(a.push("C"),a.push([t[n+1]+","+e[n+1],t[n+2]+","+e[n+2]+" "].join(" ")));return a.join(r?"":"L")}},{}],918:[function(t,e,r){"use strict";var n=t("../../lib").isArrayOrTypedArray;e.exports=function(t,e,r){var a;for(n(t)?t.length>e.length&&(t=t.slice(0,e.length)):t=[],a=0;a<e.length;a++)t[a]=r(e[a]);return t}},{"../../lib":717}],919:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a,i){var o=a[0]*t.dpdx(e),s=a[1]*t.dpdy(r),l=1,c=1;if(i){var u=Math.sqrt(a[0]*a[0]+a[1]*a[1]),h=Math.sqrt(i[0]*i[0]+i[1]*i[1]),f=(a[0]*i[0]+a[1]*i[1])/u/h;c=Math.max(0,f)}var p=180*Math.atan2(s,o)/Math.PI;return p<-90?(p+=180,l=-l):p>90&&(p-=180,l=-l),{angle:p,flip:l,p:t.c2p(n,e,r),offsetMultplier:c}}},{}],920:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/drawing"),i=t("./map_1d_array"),o=t("./makepath"),s=t("./orient_text"),l=t("../../lib/svg_text_utils"),c=t("../../lib"),u=t("../../constants/alignment");function h(t,e,r,a,s,l){var c="const-"+s+"-lines",u=r.selectAll("."+c).data(l);u.enter().append("path").classed(c,!0).style("vector-effect","non-scaling-stroke"),u.each(function(r){var a=r,s=a.x,l=a.y,c=i([],s,t.c2p),u=i([],l,e.c2p),h="M"+o(c,u,a.smoothing);n.select(this).attr("d",h).style("stroke-width",a.width).style("stroke",a.color).style("fill","none")}),u.exit().remove()}function f(t,e,r,i,o,c,u,h){var f=c.selectAll("text."+h).data(u);f.enter().append("text").classed(h,!0);var p=0,d={};return f.each(function(o,c){var u;if("auto"===o.axis.tickangle)u=s(i,e,r,o.xy,o.dxy);else{var h=(o.axis.tickangle+180)*Math.PI/180;u=s(i,e,r,o.xy,[Math.cos(h),Math.sin(h)])}c||(d={angle:u.angle,flip:u.flip});var f=(o.endAnchor?-1:1)*u.flip,g=n.select(this).attr({"text-anchor":f>0?"start":"end","data-notex":1}).call(a.font,o.font).text(o.text).call(l.convertToTspans,t),v=a.bBox(this);g.attr("transform","translate("+u.p[0]+","+u.p[1]+") rotate("+u.angle+")translate("+o.axis.labelpadding*f+","+.3*v.height+")"),p=Math.max(p,v.width+o.axis.labelpadding)}),f.exit().remove(),d.maxExtent=p,d}e.exports=function(t,e,r,a){var l=e.xaxis,u=e.yaxis,p=t._fullLayout._clips;c.makeTraceGroups(a,r,"trace").each(function(e){var r=n.select(this),a=e[0],d=a.trace,v=d.aaxis,m=d.baxis,y=c.ensureSingle(r,"g","minorlayer"),x=c.ensureSingle(r,"g","majorlayer"),b=c.ensureSingle(r,"g","boundarylayer"),_=c.ensureSingle(r,"g","labellayer");r.style("opacity",d.opacity),h(l,u,x,v,"a",v._gridlines),h(l,u,x,m,"b",m._gridlines),h(l,u,y,v,"a",v._minorgridlines),h(l,u,y,m,"b",m._minorgridlines),h(l,u,b,v,"a-boundary",v._boundarylines),h(l,u,b,m,"b-boundary",m._boundarylines);var w=f(t,l,u,d,a,_,v._labels,"a-label"),k=f(t,l,u,d,a,_,m._labels,"b-label");!function(t,e,r,n,a,i,o,l){var u,h,f,p,d=c.aggNums(Math.min,null,r.a),v=c.aggNums(Math.max,null,r.a),m=c.aggNums(Math.min,null,r.b),y=c.aggNums(Math.max,null,r.b);u=.5*(d+v),h=m,f=r.ab2xy(u,h,!0),p=r.dxyda_rough(u,h),void 0===o.angle&&c.extendFlat(o,s(r,a,i,f,r.dxydb_rough(u,h)));g(t,e,r,n,f,p,r.aaxis,a,i,o,"a-title"),u=d,h=.5*(m+y),f=r.ab2xy(u,h,!0),p=r.dxydb_rough(u,h),void 0===l.angle&&c.extendFlat(l,s(r,a,i,f,r.dxyda_rough(u,h)));g(t,e,r,n,f,p,r.baxis,a,i,l,"b-title")}(t,_,d,a,l,u,w,k),function(t,e,r,n,a){var s,l,u,h,f=r.select("#"+t._clipPathId);f.size()||(f=r.append("clipPath").classed("carpetclip",!0));var p=c.ensureSingle(f,"path","carpetboundary"),d=e.clipsegments,g=[];for(h=0;h<d.length;h++)s=d[h],l=i([],s.x,n.c2p),u=i([],s.y,a.c2p),g.push(o(l,u,s.bicubic));var v="M"+g.join("L")+"Z";f.attr("id",t._clipPathId),p.attr("d",v)}(d,a,p,l,u)})};var p=u.LINE_SPACING,d=(1-u.MID_SHIFT)/p+1;function g(t,e,r,i,o,c,u,h,f,g,v){var m=[];u.title.text&&m.push(u.title.text);var y=e.selectAll("text."+v).data(m),x=g.maxExtent;y.enter().append("text").classed(v,!0),y.each(function(){var e=s(r,h,f,o,c);-1===["start","both"].indexOf(u.showticklabels)&&(x=0);var i=u.title.font.size;x+=i+u.title.offset;var v=(g.angle+(g.flip<0?180:0)-e.angle+450)%360,m=v>90&&v<270,y=n.select(this);y.text(u.title.text).call(l.convertToTspans,t),m&&(x=(-l.lineCount(y)+d)*p*i-x),y.attr("transform","translate("+e.p[0]+","+e.p[1]+") rotate("+e.angle+") translate(0,"+x+")").classed("user-select-none",!0).attr("text-anchor","middle").call(a.font,u.title.font)}),y.exit().remove()}},{"../../components/drawing":612,"../../constants/alignment":686,"../../lib":717,"../../lib/svg_text_utils":741,"./makepath":917,"./map_1d_array":918,"./orient_text":919,d3:165}],921:[function(t,e,r){"use strict";var n=t("./constants"),a=t("../../lib/search").findBin,i=t("./compute_control_points"),o=t("./create_spline_evaluator"),s=t("./create_i_derivative_evaluator"),l=t("./create_j_derivative_evaluator");e.exports=function(t){var e=t._a,r=t._b,c=e.length,u=r.length,h=t.aaxis,f=t.baxis,p=e[0],d=e[c-1],g=r[0],v=r[u-1],m=e[e.length-1]-e[0],y=r[r.length-1]-r[0],x=m*n.RELATIVE_CULL_TOLERANCE,b=y*n.RELATIVE_CULL_TOLERANCE;p-=x,d+=x,g-=b,v+=b,t.isVisible=function(t,e){return t>p&&t<d&&e>g&&e<v},t.isOccluded=function(t,e){return t<p||t>d||e<g||e>v},t.setScale=function(){var e=t._x,r=t._y,n=i(t._xctrl,t._yctrl,e,r,h.smoothing,f.smoothing);t._xctrl=n[0],t._yctrl=n[1],t.evalxy=o([t._xctrl,t._yctrl],c,u,h.smoothing,f.smoothing),t.dxydi=s([t._xctrl,t._yctrl],h.smoothing,f.smoothing),t.dxydj=l([t._xctrl,t._yctrl],h.smoothing,f.smoothing)},t.i2a=function(t){var r=Math.max(0,Math.floor(t[0]),c-2),n=t[0]-r;return(1-n)*e[r]+n*e[r+1]},t.j2b=function(t){var e=Math.max(0,Math.floor(t[1]),c-2),n=t[1]-e;return(1-n)*r[e]+n*r[e+1]},t.ij2ab=function(e){return[t.i2a(e[0]),t.j2b(e[1])]},t.a2i=function(t){var r=Math.max(0,Math.min(a(t,e),c-2)),n=e[r],i=e[r+1];return Math.max(0,Math.min(c-1,r+(t-n)/(i-n)))},t.b2j=function(t){var e=Math.max(0,Math.min(a(t,r),u-2)),n=r[e],i=r[e+1];return Math.max(0,Math.min(u-1,e+(t-n)/(i-n)))},t.ab2ij=function(e){return[t.a2i(e[0]),t.b2j(e[1])]},t.i2c=function(e,r){return t.evalxy([],e,r)},t.ab2xy=function(n,a,i){if(!i&&(n<e[0]||n>e[c-1]|a<r[0]||a>r[u-1]))return[!1,!1];var o=t.a2i(n),s=t.b2j(a),l=t.evalxy([],o,s);if(i){var h,f,p,d,g=0,v=0,m=[];n<e[0]?(h=0,f=0,g=(n-e[0])/(e[1]-e[0])):n>e[c-1]?(h=c-2,f=1,g=(n-e[c-1])/(e[c-1]-e[c-2])):f=o-(h=Math.max(0,Math.min(c-2,Math.floor(o)))),a<r[0]?(p=0,d=0,v=(a-r[0])/(r[1]-r[0])):a>r[u-1]?(p=u-2,d=1,v=(a-r[u-1])/(r[u-1]-r[u-2])):d=s-(p=Math.max(0,Math.min(u-2,Math.floor(s)))),g&&(t.dxydi(m,h,p,f,d),l[0]+=m[0]*g,l[1]+=m[1]*g),v&&(t.dxydj(m,h,p,f,d),l[0]+=m[0]*v,l[1]+=m[1]*v)}return l},t.c2p=function(t,e,r){return[e.c2p(t[0]),r.c2p(t[1])]},t.p2x=function(t,e,r){return[e.p2c(t[0]),r.p2c(t[1])]},t.dadi=function(t){var r=Math.max(0,Math.min(e.length-2,t));return e[r+1]-e[r]},t.dbdj=function(t){var e=Math.max(0,Math.min(r.length-2,t));return r[e+1]-r[e]},t.dxyda=function(e,r,n,a){var i=t.dxydi(null,e,r,n,a),o=t.dadi(e,n);return[i[0]/o,i[1]/o]},t.dxydb=function(e,r,n,a){var i=t.dxydj(null,e,r,n,a),o=t.dbdj(r,a);return[i[0]/o,i[1]/o]},t.dxyda_rough=function(e,r,n){var a=m*(n||.1),i=t.ab2xy(e+a,r,!0),o=t.ab2xy(e-a,r,!0);return[.5*(i[0]-o[0])/a,.5*(i[1]-o[1])/a]},t.dxydb_rough=function(e,r,n){var a=y*(n||.1),i=t.ab2xy(e,r+a,!0),o=t.ab2xy(e,r-a,!0);return[.5*(i[0]-o[0])/a,.5*(i[1]-o[1])/a]},t.dpdx=function(t){return t._m},t.dpdy=function(t){return t._m}}},{"../../lib/search":736,"./compute_control_points":909,"./constants":910,"./create_i_derivative_evaluator":911,"./create_j_derivative_evaluator":912,"./create_spline_evaluator":913}],922:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e,r){var a,i,o,s=[],l=[],c=t[0].length,u=t.length;function h(e,r){var n,a=0,i=0;return e>0&&void 0!==(n=t[r][e-1])&&(i++,a+=n),e<c-1&&void 0!==(n=t[r][e+1])&&(i++,a+=n),r>0&&void 0!==(n=t[r-1][e])&&(i++,a+=n),r<u-1&&void 0!==(n=t[r+1][e])&&(i++,a+=n),a/Math.max(1,i)}var f,p,d,g,v,m,y,x,b,_,w,k=0;for(a=0;a<c;a++)for(i=0;i<u;i++)void 0===t[i][a]&&(s.push(a),l.push(i),t[i][a]=h(a,i)),k=Math.max(k,Math.abs(t[i][a]));if(!s.length)return t;var T=0,M=0,A=s.length;do{for(T=0,o=0;o<A;o++){a=s[o],i=l[o];var S,E,L,C,P,O,z=0,I=0;0===a?(L=e[P=Math.min(c-1,2)],C=e[1],S=t[i][P],I+=(E=t[i][1])+(E-S)*(e[0]-C)/(C-L),z++):a===c-1&&(L=e[P=Math.max(0,c-3)],C=e[c-2],S=t[i][P],I+=(E=t[i][c-2])+(E-S)*(e[c-1]-C)/(C-L),z++),(0===a||a===c-1)&&i>0&&i<u-1&&(f=r[i+1]-r[i],I+=((p=r[i]-r[i-1])*t[i+1][a]+f*t[i-1][a])/(p+f),z++),0===i?(L=r[O=Math.min(u-1,2)],C=r[1],S=t[O][a],I+=(E=t[1][a])+(E-S)*(r[0]-C)/(C-L),z++):i===u-1&&(L=r[O=Math.max(0,u-3)],C=r[u-2],S=t[O][a],I+=(E=t[u-2][a])+(E-S)*(r[u-1]-C)/(C-L),z++),(0===i||i===u-1)&&a>0&&a<c-1&&(f=e[a+1]-e[a],I+=((p=e[a]-e[a-1])*t[i][a+1]+f*t[i][a-1])/(p+f),z++),z?I/=z:(d=e[a+1]-e[a],g=e[a]-e[a-1],x=(v=r[i+1]-r[i])*(m=r[i]-r[i-1])*(v+m),I=((y=d*g*(d+g))*(m*t[i+1][a]+v*t[i-1][a])+x*(g*t[i][a+1]+d*t[i][a-1]))/(x*(g+d)+y*(m+v))),T+=(_=(b=I-t[i][a])/k)*_,w=z?0:.85,t[i][a]+=b*(1+w)}T=Math.sqrt(T)}while(M++<100&&T>1e-5);return n.log("Smoother converged to",T,"after",M,"iterations"),t}},{"../../lib":717}],923:[function(t,e,r){"use strict";var n=t("../../lib").isArray1D;e.exports=function(t,e,r){var a=r("x"),i=a&&a.length,o=r("y"),s=o&&o.length;if(!i&&!s)return!1;if(e._cheater=!a,i&&!n(a)||s&&!n(o))e._length=null;else{var l=i?a.length:1/0;s&&(l=Math.min(l,o.length)),e.a&&e.a.length&&(l=Math.min(l,e.a.length)),e.b&&e.b.length&&(l=Math.min(l,e.b.length)),e._length=l}return!0}},{"../../lib":717}],924:[function(t,e,r){"use strict";var n=t("../../plots/template_attributes").hovertemplateAttrs,a=t("../scattergeo/attributes"),i=t("../../components/colorscale/attributes"),o=t("../../plots/attributes"),s=t("../../components/color/attributes").defaultLine,l=t("../../lib/extend").extendFlat,c=a.marker.line;e.exports=l({locations:{valType:"data_array",editType:"calc"},locationmode:a.locationmode,z:{valType:"data_array",editType:"calc"},geojson:l({},a.geojson,{}),featureidkey:a.featureidkey,text:l({},a.text,{}),hovertext:l({},a.hovertext,{}),marker:{line:{color:l({},c.color,{dflt:s}),width:l({},c.width,{dflt:1}),editType:"calc"},opacity:{valType:"number",arrayOk:!0,min:0,max:1,dflt:1,editType:"style"},editType:"calc"},selected:{marker:{opacity:a.selected.marker.opacity,editType:"plot"},editType:"plot"},unselected:{marker:{opacity:a.unselected.marker.opacity,editType:"plot"},editType:"plot"},hoverinfo:l({},o.hoverinfo,{editType:"calc",flags:["location","z","text","name"]}),hovertemplate:n(),showlegend:l({},o.showlegend,{dflt:!1})},i("",{cLetter:"z",editTypeOverride:"calc"}))},{"../../components/color/attributes":590,"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../scattergeo/attributes":1161}],925:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../constants/numerical").BADNUM,i=t("../../components/colorscale/calc"),o=t("../scatter/arrays_to_calcdata"),s=t("../scatter/calc_selection");function l(t){return t&&"string"==typeof t}e.exports=function(t,e){var r,c=e._length,u=new Array(c);r=e.geojson?function(t){return l(t)||n(t)}:l;for(var h=0;h<c;h++){var f=u[h]={},p=e.locations[h],d=e.z[h];r(p)&&n(d)?(f.loc=p,f.z=d):(f.loc=null,f.z=a),f.index=h}return o(u,e),i(t,e,{vals:e.z,containerStr:"",cLetter:"z"}),s(u,e),u}},{"../../components/colorscale/calc":599,"../../constants/numerical":693,"../scatter/arrays_to_calcdata":1119,"../scatter/calc_selection":1122,"fast-isnumeric":228}],926:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/colorscale/defaults"),i=t("./attributes");e.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}var l=s("locations"),c=s("z");if(l&&l.length&&n.isArrayOrTypedArray(c)&&c.length){e._length=Math.min(l.length,c.length);var u,h=s("geojson");("string"==typeof h&&""!==h||n.isPlainObject(h))&&(u="geojson-id"),"geojson-id"===s("locationmode",u)&&s("featureidkey"),s("text"),s("hovertext"),s("hovertemplate"),s("marker.line.width")&&s("marker.line.color"),s("marker.opacity"),a(t,e,o,s,{prefix:"",cLetter:"z"}),n.coerceSelectionMarkerOpacity(e,s)}else e.visible=!1}},{"../../components/colorscale/defaults":601,"../../lib":717,"./attributes":924}],927:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a){t.location=e.location,t.z=e.z;var i=n[a];return i.fIn&&i.fIn.properties&&(t.properties=i.fIn.properties),t.ct=i.ct,t}},{}],928:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("./attributes"),i=t("../../lib").fillText;e.exports=function(t,e,r){var o,s,l,c,u=t.cd,h=u[0].trace,f=t.subplot;for(s=0;s<u.length;s++)if(c=!1,(o=u[s])._polygons){for(l=0;l<o._polygons.length;l++)o._polygons[l].contains([e,r])&&(c=!c),o._polygons[l].contains([e+360,r])&&(c=!c);if(c)break}if(c&&o)return t.x0=t.x1=t.xa.c2p(o.ct),t.y0=t.y1=t.ya.c2p(o.ct),t.index=o.index,t.location=o.loc,t.z=o.z,t.zLabel=n.tickText(f.mockAxis,f.mockAxis.c2l(o.z),"hover").text,t.hovertemplate=o.hovertemplate,function(t,e,r){if(e.hovertemplate)return;var n=r.hi||e.hoverinfo,o=String(r.loc),s="all"===n?a.hoverinfo.flags:n.split("+"),l=-1!==s.indexOf("name"),c=-1!==s.indexOf("location"),u=-1!==s.indexOf("z"),h=-1!==s.indexOf("text"),f=[];!l&&c?t.nameOverride=o:(l&&(t.nameOverride=e.name),c&&f.push(o));u&&f.push(t.zLabel);h&&i(r,e,f);t.extraText=f.join("<br>")}(t,h,o,f.mockAxis),[t]}},{"../../lib":717,"../../plots/cartesian/axes":765,"./attributes":924}],929:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../heatmap/colorbar"),calc:t("./calc"),calcGeoJSON:t("./plot").calcGeoJSON,plot:t("./plot").plot,style:t("./style").style,styleOnSelect:t("./style").styleOnSelect,hoverPoints:t("./hover"),eventData:t("./event_data"),selectPoints:t("./select"),moduleType:"trace",name:"choropleth",basePlotModule:t("../../plots/geo"),categories:["geo","noOpacity","showLegend"],meta:{}}},{"../../plots/geo":795,"../heatmap/colorbar":1003,"./attributes":924,"./calc":925,"./defaults":926,"./event_data":927,"./hover":928,"./plot":930,"./select":931,"./style":932}],930:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../lib/geo_location_utils"),o=t("../../lib/topojson_utils").getTopojsonFeatures,s=t("../../plots/cartesian/autorange").findExtremes,l=t("./style").style;e.exports={calcGeoJSON:function(t,e){for(var r=t[0].trace,n=e[r.geo],a=n._subplot,l=r.locationmode,c=r._length,u="geojson-id"===l?i.extractTraceFeature(t):o(r,a.topojson),h=[],f=[],p=0;p<c;p++){var d=t[p],g="geojson-id"===l?d.fOut:i.locationToFeature(l,d.loc,u);if(g){d.geojson=g,d.ct=g.properties.ct,d._polygons=i.feature2polygons(g);var v=i.computeBbox(g);h.push(v[0],v[2]),f.push(v[1],v[3])}else d.geojson=null}if("geojson"===n.fitbounds&&"geojson-id"===l){var m=i.computeBbox(i.getTraceGeojson(r));h=[m[0],m[2]],f=[m[1],m[3]]}var y={padded:!0};r._extremes.lon=s(n.lonaxis._ax,h,y),r._extremes.lat=s(n.lataxis._ax,f,y)},plot:function(t,e,r){var i=e.layers.backplot.select(".choroplethlayer");a.makeTraceGroups(i,r,"trace choropleth").each(function(e){var r=n.select(this).selectAll("path.choroplethlocation").data(a.identity);r.enter().append("path").classed("choroplethlocation",!0),r.exit().remove(),l(t,e)})}}},{"../../lib":717,"../../lib/geo_location_utils":711,"../../lib/topojson_utils":744,"../../plots/cartesian/autorange":764,"./style":932,d3:165}],931:[function(t,e,r){"use strict";e.exports=function(t,e){var r,n,a,i,o,s=t.cd,l=t.xaxis,c=t.yaxis,u=[];if(!1===e)for(r=0;r<s.length;r++)s[r].selected=0;else for(r=0;r<s.length;r++)(a=(n=s[r]).ct)&&(i=l.c2p(a),o=c.c2p(a),e.contains([i,o],null,r,t)?(u.push({pointNumber:r,lon:a[0],lat:a[1]}),n.selected=1):n.selected=0);return u}},{}],932:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/color"),i=t("../../components/drawing"),o=t("../../components/colorscale");function s(t,e){var r=e[0].trace,s=e[0].node3.selectAll(".choroplethlocation"),l=r.marker||{},c=l.line||{},u=o.makeColorScaleFuncFromTrace(r);s.each(function(t){n.select(this).attr("fill",u(t.z)).call(a.stroke,t.mlc||c.color).call(i.dashLine,"",t.mlw||c.width||0).style("opacity",l.opacity)}),i.selectedPointStyle(s,r,t)}e.exports={style:function(t,e){e&&s(t,e)},styleOnSelect:function(t,e){var r=e[0].node3,n=e[0].trace;n.selectedpoints?i.selectedPointStyle(r.selectAll(".choroplethlocation"),n,t):s(t,e)}}},{"../../components/color":591,"../../components/colorscale":603,"../../components/drawing":612,d3:165}],933:[function(t,e,r){"use strict";var n=t("../choropleth/attributes"),a=t("../../components/colorscale/attributes"),i=t("../../plots/template_attributes").hovertemplateAttrs,o=t("../../plots/attributes"),s=t("../../lib/extend").extendFlat;e.exports=s({locations:{valType:"data_array",editType:"calc"},z:{valType:"data_array",editType:"calc"},geojson:{valType:"any",editType:"calc"},featureidkey:s({},n.featureidkey,{}),below:{valType:"string",editType:"plot"},text:n.text,hovertext:n.hovertext,marker:{line:{color:s({},n.marker.line.color,{editType:"plot"}),width:s({},n.marker.line.width,{editType:"plot"}),editType:"calc"},opacity:s({},n.marker.opacity,{editType:"plot"}),editType:"calc"},selected:{marker:{opacity:s({},n.selected.marker.opacity,{editType:"plot"}),editType:"plot"},editType:"plot"},unselected:{marker:{opacity:s({},n.unselected.marker.opacity,{editType:"plot"}),editType:"plot"},editType:"plot"},hoverinfo:n.hoverinfo,hovertemplate:i({},{keys:["properties"]}),showlegend:s({},o.showlegend,{dflt:!1})},a("",{cLetter:"z",editTypeOverride:"calc"}))},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../choropleth/attributes":924}],934:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../components/colorscale"),o=t("../../components/drawing"),s=t("../../lib/geojson_utils").makeBlank,l=t("../../lib/geo_location_utils");function c(t){var e,r=t[0].trace,n=r._opts;if(r.selectedpoints){for(var i=o.makeSelectedPointStyleFns(r),s=0;s<t.length;s++){var l=t[s];l.fOut&&(l.fOut.properties.mo2=i.selectedOpacityFn(l))}e={type:"identity",property:"mo2"}}else e=a.isArrayOrTypedArray(r.marker.opacity)?{type:"identity",property:"mo"}:r.marker.opacity;return a.extendFlat(n.fill.paint,{"fill-opacity":e}),a.extendFlat(n.line.paint,{"line-opacity":e}),n}e.exports={convert:function(t){var e=t[0].trace,r=!0===e.visible&&0!==e._length,o={layout:{visibility:"none"},paint:{}},u={layout:{visibility:"none"},paint:{}},h=e._opts={fill:o,line:u,geojson:s()};if(!r)return h;var f=l.extractTraceFeature(t);if(!f)return h;var p,d,g,v=i.makeColorScaleFuncFromTrace(e),m=e.marker,y=m.line||{};a.isArrayOrTypedArray(m.opacity)&&(p=function(t){var e=t.mo;return n(e)?+a.constrain(e,0,1):0}),a.isArrayOrTypedArray(y.color)&&(d=function(t){return t.mlc}),a.isArrayOrTypedArray(y.width)&&(g=function(t){return t.mlw});for(var x=0;x<t.length;x++){var b=t[x],_=b.fOut;if(_){var w=_.properties;w.fc=v(b.z),p&&(w.mo=p(b)),d&&(w.mlc=d(b)),g&&(w.mlw=g(b)),b.ct=w.ct,b._polygons=l.feature2polygons(_)}}var k=p?{type:"identity",property:"mo"}:m.opacity;return a.extendFlat(o.paint,{"fill-color":{type:"identity",property:"fc"},"fill-opacity":k}),a.extendFlat(u.paint,{"line-color":d?{type:"identity",property:"mlc"}:y.color,"line-width":g?{type:"identity",property:"mlw"}:y.width,"line-opacity":k}),o.layout.visibility="visible",u.layout.visibility="visible",h.geojson={type:"FeatureCollection",features:f},c(t),h},convertOnSelect:c}},{"../../components/colorscale":603,"../../components/drawing":612,"../../lib":717,"../../lib/geo_location_utils":711,"../../lib/geojson_utils":712,"fast-isnumeric":228}],935:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/colorscale/defaults"),i=t("./attributes");e.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}var l=s("locations"),c=s("z"),u=s("geojson");n.isArrayOrTypedArray(l)&&l.length&&n.isArrayOrTypedArray(c)&&c.length&&("string"==typeof u&&""!==u||n.isPlainObject(u))?(s("featureidkey"),e._length=Math.min(l.length,c.length),s("below"),s("text"),s("hovertext"),s("hovertemplate"),s("marker.line.width")&&s("marker.line.color"),s("marker.opacity"),a(t,e,o,s,{prefix:"",cLetter:"z"}),n.coerceSelectionMarkerOpacity(e,s)):e.visible=!1}},{"../../components/colorscale/defaults":601,"../../lib":717,"./attributes":933}],936:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../heatmap/colorbar"),calc:t("../choropleth/calc"),plot:t("./plot"),hoverPoints:t("../choropleth/hover"),eventData:t("../choropleth/event_data"),selectPoints:t("../choropleth/select"),styleOnSelect:function(t,e){e&&e[0].trace._glTrace.updateOnSelect(e)},getBelow:function(t,e){for(var r=e.getMapLayers(),n=r.length-2;n>=0;n--){var a=r[n].id;if("string"==typeof a&&0===a.indexOf("water"))for(var i=n+1;i<r.length;i++)if("string"==typeof(a=r[i].id)&&-1===a.indexOf("plotly-"))return a}},moduleType:"trace",name:"choroplethmapbox",basePlotModule:t("../../plots/mapbox"),categories:["mapbox","gl","noOpacity","showLegend"],meta:{hr_name:"choropleth_mapbox"}}},{"../../plots/mapbox":820,"../choropleth/calc":925,"../choropleth/event_data":927,"../choropleth/hover":928,"../choropleth/select":931,"../heatmap/colorbar":1003,"./attributes":933,"./defaults":935,"./plot":937}],937:[function(t,e,r){"use strict";var n=t("./convert").convert,a=t("./convert").convertOnSelect,i=t("../../plots/mapbox/constants").traceLayerPrefix;function o(t,e){this.type="choroplethmapbox",this.subplot=t,this.uid=e,this.sourceId="source-"+e,this.layerList=[["fill",i+e+"-fill"],["line",i+e+"-line"]],this.below=null}var s=o.prototype;s.update=function(t){this._update(n(t))},s.updateOnSelect=function(t){this._update(a(t))},s._update=function(t){var e=this.subplot,r=this.layerList,n=e.belowLookup["trace-"+this.uid];e.map.getSource(this.sourceId).setData(t.geojson),n!==this.below&&(this._removeLayers(),this._addLayers(t,n),this.below=n);for(var a=0;a<r.length;a++){var i=r[a],o=i[0],s=i[1],l=t[o];e.setOptions(s,"setLayoutProperty",l.layout),"visible"===l.layout.visibility&&e.setOptions(s,"setPaintProperty",l.paint)}},s._addLayers=function(t,e){for(var r=this.subplot,n=this.layerList,a=this.sourceId,i=0;i<n.length;i++){var o=n[i],s=o[0],l=t[s];r.addLayer({type:s,id:o[1],source:a,layout:l.layout,paint:l.paint},e)}},s._removeLayers=function(){for(var t=this.subplot.map,e=this.layerList,r=e.length-1;r>=0;r--)t.removeLayer(e[r][1])},s.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},e.exports=function(t,e){var r=e[0].trace,a=new o(t,r.uid),i=a.sourceId,s=n(e),l=a.below=t.belowLookup["trace-"+r.uid];return t.map.addSource(i,{type:"geojson",data:s.geojson}),a._addLayers(s,l),e[0].trace._glTrace=a,a}},{"../../plots/mapbox/constants":818,"./convert":934}],938:[function(t,e,r){"use strict";var n=t("../../components/colorscale/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../mesh3d/attributes"),o=t("../../plots/attributes"),s=t("../../lib/extend").extendFlat,l={x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},z:{valType:"data_array",editType:"calc+clearAxisTypes"},u:{valType:"data_array",editType:"calc"},v:{valType:"data_array",editType:"calc"},w:{valType:"data_array",editType:"calc"},sizemode:{valType:"enumerated",values:["scaled","absolute"],editType:"calc",dflt:"scaled"},sizeref:{valType:"number",editType:"calc",min:0},anchor:{valType:"enumerated",editType:"calc",values:["tip","tail","cm","center"],dflt:"cm"},text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertemplate:a({editType:"calc"},{keys:["norm"]}),showlegend:s({},o.showlegend,{dflt:!1})};s(l,n("",{colorAttr:"u/v/w norm",showScaleDflt:!0,editTypeOverride:"calc"}));["opacity","lightposition","lighting"].forEach(function(t){l[t]=i[t]}),l.hoverinfo=s({},o.hoverinfo,{editType:"calc",flags:["x","y","z","u","v","w","norm","text","name"],dflt:"x+y+z+norm+text+name"}),l.transforms=void 0,e.exports=l},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../mesh3d/attributes":1061}],939:[function(t,e,r){"use strict";var n=t("../../components/colorscale/calc");e.exports=function(t,e){for(var r=e.u,a=e.v,i=e.w,o=Math.min(e.x.length,e.y.length,e.z.length,r.length,a.length,i.length),s=-1/0,l=1/0,c=0;c<o;c++){var u=r[c],h=a[c],f=i[c],p=Math.sqrt(u*u+h*h+f*f);s=Math.max(s,p),l=Math.min(l,p)}e._len=o,e._normMax=s,n(t,e,{vals:[l,s],containerStr:"",cLetter:"c"})}},{"../../components/colorscale/calc":599}],940:[function(t,e,r){"use strict";var n=t("gl-cone3d"),a=t("gl-cone3d").createConeMesh,i=t("../../lib").simpleMap,o=t("../../lib/gl_format_color").parseColorScale,s=t("../../components/colorscale").extractOpts,l=t("../../plots/gl3d/zip3");function c(t,e){this.scene=t,this.uid=e,this.mesh=null,this.data=null}var u=c.prototype;u.handlePick=function(t){if(t.object===this.mesh){var e=t.index=t.data.index,r=this.data.x[e],n=this.data.y[e],a=this.data.z[e],i=this.data.u[e],o=this.data.v[e],s=this.data.w[e];t.traceCoordinate=[r,n,a,i,o,s,Math.sqrt(i*i+o*o+s*s)];var l=this.data.hovertext||this.data.text;return Array.isArray(l)&&void 0!==l[e]?t.textLabel=l[e]:l&&(t.textLabel=l),!0}};var h={xaxis:0,yaxis:1,zaxis:2},f={tip:1,tail:0,cm:.25,center:.5},p={tip:1,tail:1,cm:.75,center:.5};function d(t,e){var r=t.fullSceneLayout,a=t.dataScale,c={};function u(t,e){var n=r[e],o=a[h[e]];return i(t,function(t){return n.d2l(t)*o})}c.vectors=l(u(e.u,"xaxis"),u(e.v,"yaxis"),u(e.w,"zaxis"),e._len),c.positions=l(u(e.x,"xaxis"),u(e.y,"yaxis"),u(e.z,"zaxis"),e._len);var d=s(e);c.colormap=o(e),c.vertexIntensityBounds=[d.min/e._normMax,d.max/e._normMax],c.coneOffset=f[e.anchor],"scaled"===e.sizemode?c.coneSize=e.sizeref||.5:c.coneSize=e.sizeref&&e._normMax?e.sizeref/e._normMax:.5;var g=n(c),v=e.lightposition;return g.lightPosition=[v.x,v.y,v.z],g.ambient=e.lighting.ambient,g.diffuse=e.lighting.diffuse,g.specular=e.lighting.specular,g.roughness=e.lighting.roughness,g.fresnel=e.lighting.fresnel,g.opacity=e.opacity,e._pad=p[e.anchor]*g.vectorScale*g.coneScale*e._normMax,g}u.update=function(t){this.data=t;var e=d(this.scene,t);this.mesh.update(e)},u.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var r=t.glplot.gl,n=d(t,e),i=a(r,n),o=new c(t,e.uid);return o.mesh=i,o.data=e,i._trace=o,t.glplot.add(i),o}},{"../../components/colorscale":603,"../../lib":717,"../../lib/gl_format_color":714,"../../plots/gl3d/zip3":816,"gl-cone3d":245}],941:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/colorscale/defaults"),i=t("./attributes");e.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}var l=s("u"),c=s("v"),u=s("w"),h=s("x"),f=s("y"),p=s("z");l&&l.length&&c&&c.length&&u&&u.length&&h&&h.length&&f&&f.length&&p&&p.length?(s("sizeref"),s("sizemode"),s("anchor"),s("lighting.ambient"),s("lighting.diffuse"),s("lighting.specular"),s("lighting.roughness"),s("lighting.fresnel"),s("lightposition.x"),s("lightposition.y"),s("lightposition.z"),a(t,e,o,s,{prefix:"",cLetter:"c"}),s("text"),s("hovertext"),s("hovertemplate"),e._length=null):e.visible=!1}},{"../../components/colorscale/defaults":601,"../../lib":717,"./attributes":938}],942:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"cone",basePlotModule:t("../../plots/gl3d"),categories:["gl3d","showLegend"],attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:{min:"cmin",max:"cmax"},calc:t("./calc"),plot:t("./convert"),eventData:function(t,e){return t.norm=e.traceCoordinate[6],t},meta:{}}},{"../../plots/gl3d":805,"./attributes":938,"./calc":939,"./convert":940,"./defaults":941}],943:[function(t,e,r){"use strict";var n=t("../heatmap/attributes"),a=t("../scatter/attributes"),i=t("../../components/colorscale/attributes"),o=t("../../components/drawing/attributes").dash,s=t("../../plots/font_attributes"),l=t("../../lib/extend").extendFlat,c=t("../../constants/filter_ops"),u=c.COMPARISON_OPS2,h=c.INTERVAL_OPS,f=(t("../../constants/docs").FORMAT_LINK,a.line);e.exports=l({z:n.z,x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,text:n.text,hovertext:n.hovertext,transpose:n.transpose,xtype:n.xtype,ytype:n.ytype,zhoverformat:n.zhoverformat,hovertemplate:n.hovertemplate,hoverongaps:n.hoverongaps,connectgaps:l({},n.connectgaps,{}),fillcolor:{valType:"color",editType:"calc"},autocontour:{valType:"boolean",dflt:!0,editType:"calc",impliedEdits:{"contours.start":void 0,"contours.end":void 0,"contours.size":void 0}},ncontours:{valType:"integer",dflt:15,min:1,editType:"calc"},contours:{type:{valType:"enumerated",values:["levels","constraint"],dflt:"levels",editType:"calc"},start:{valType:"number",dflt:null,editType:"plot",impliedEdits:{"^autocontour":!1}},end:{valType:"number",dflt:null,editType:"plot",impliedEdits:{"^autocontour":!1}},size:{valType:"number",dflt:null,min:0,editType:"plot",impliedEdits:{"^autocontour":!1}},coloring:{valType:"enumerated",values:["fill","heatmap","lines","none"],dflt:"fill",editType:"calc"},showlines:{valType:"boolean",dflt:!0,editType:"plot"},showlabels:{valType:"boolean",dflt:!1,editType:"plot"},labelfont:s({editType:"plot",colorEditType:"style"}),labelformat:{valType:"string",dflt:"",editType:"plot"},operation:{valType:"enumerated",values:[].concat(u).concat(h),dflt:"=",editType:"calc"},value:{valType:"any",dflt:0,editType:"calc"},editType:"calc",impliedEdits:{autocontour:!1}},line:{color:l({},f.color,{editType:"style+colorbars"}),width:{valType:"number",min:0,editType:"style+colorbars"},dash:o,smoothing:l({},f.smoothing,{}),editType:"plot"}},i("",{cLetter:"z",autoColorDflt:!1,editTypeOverride:"calc"}))},{"../../components/colorscale/attributes":598,"../../components/drawing/attributes":611,"../../constants/docs":688,"../../constants/filter_ops":689,"../../lib/extend":708,"../../plots/font_attributes":791,"../heatmap/attributes":1e3,"../scatter/attributes":1120}],944:[function(t,e,r){"use strict";var n=t("../../components/colorscale"),a=t("../heatmap/calc"),i=t("./set_contours"),o=t("./end_plus");e.exports=function(t,e){var r=a(t,e),s=r[0].z;i(e,s);var l,c=e.contours,u=n.extractOpts(e);if("heatmap"===c.coloring&&u.auto&&!1===e.autocontour){var h=c.start,f=o(c),p=c.size||1,d=Math.floor((f-h)/p)+1;isFinite(p)||(p=1,d=1);var g=h-p/2;l=[g,g+d*p]}else l=s;return n.calc(t,e,{vals:l,cLetter:"z"}),r}},{"../../components/colorscale":603,"../heatmap/calc":1001,"./end_plus":954,"./set_contours":962}],945:[function(t,e,r){"use strict";e.exports=function(t,e){var r,n=t[0],a=n.z;switch(e.type){case"levels":var i=Math.min(a[0][0],a[0][1]);for(r=0;r<t.length;r++){var o=t[r];o.prefixBoundary=!o.edgepaths.length&&(i>o.level||o.starts.length&&i===o.level)}break;case"constraint":if(n.prefixBoundary=!1,n.edgepaths.length)return;var s=n.x.length,l=n.y.length,c=-1/0,u=1/0;for(r=0;r<l;r++)u=Math.min(u,a[r][0]),u=Math.min(u,a[r][s-1]),c=Math.max(c,a[r][0]),c=Math.max(c,a[r][s-1]);for(r=1;r<s-1;r++)u=Math.min(u,a[0][r]),u=Math.min(u,a[l-1][r]),c=Math.max(c,a[0][r]),c=Math.max(c,a[l-1][r]);var h,f,p=e.value;switch(e._operation){case">":p>c&&(n.prefixBoundary=!0);break;case"<":(p<u||n.starts.length&&p===u)&&(n.prefixBoundary=!0);break;case"[]":h=Math.min(p[0],p[1]),((f=Math.max(p[0],p[1]))<u||h>c||n.starts.length&&f===u)&&(n.prefixBoundary=!0);break;case"][":h=Math.min(p[0],p[1]),f=Math.max(p[0],p[1]),h<u&&f>c&&(n.prefixBoundary=!0)}}}},{}],946:[function(t,e,r){"use strict";var n=t("../../components/colorscale"),a=t("./make_color_map"),i=t("./end_plus");e.exports={min:"zmin",max:"zmax",calc:function(t,e,r){var o=e.contours,s=e.line,l=o.size||1,c=o.coloring,u=a(e,{isColorbar:!0});if("heatmap"===c){var h=n.extractOpts(e);r._fillgradient=h.reversescale?n.flipScale(h.colorscale):h.colorscale,r._zrange=[h.min,h.max]}else"fill"===c&&(r._fillcolor=u);r._line={color:"lines"===c?u:s.color,width:!1!==o.showlines?s.width:0,dash:s.dash},r._levels={start:o.start,end:i(o),size:l}}}},{"../../components/colorscale":603,"./end_plus":954,"./make_color_map":959}],947:[function(t,e,r){"use strict";e.exports={BOTTOMSTART:[1,9,13,104,713],TOPSTART:[4,6,7,104,713],LEFTSTART:[8,12,14,208,1114],RIGHTSTART:[2,3,11,208,1114],NEWDELTA:[null,[-1,0],[0,-1],[-1,0],[1,0],null,[0,-1],[-1,0],[0,1],[0,1],null,[0,1],[1,0],[1,0],[0,-1]],CHOOSESADDLE:{104:[4,1],208:[2,8],713:[7,13],1114:[11,14]},SADDLEREMAINDER:{1:4,2:8,4:1,7:13,8:2,11:14,13:7,14:11},LABELDISTANCE:2,LABELINCREASE:10,LABELMIN:3,LABELMAX:10,LABELOPTIMIZER:{EDGECOST:1,ANGLECOST:1,NEIGHBORCOST:5,SAMELEVELFACTOR:10,SAMELEVELDISTANCE:5,MAXCOST:100,INITIALSEARCHPOINTS:10,ITERATIONS:5}}},{}],948:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("./label_defaults"),i=t("../../components/color"),o=i.addOpacity,s=i.opacity,l=t("../../constants/filter_ops"),c=l.CONSTRAINT_REDUCTION,u=l.COMPARISON_OPS2;e.exports=function(t,e,r,i,l,h){var f,p,d,g=e.contours,v=r("contours.operation");(g._operation=c[v],function(t,e){var r;-1===u.indexOf(e.operation)?(t("contours.value",[0,1]),Array.isArray(e.value)?e.value.length>2?e.value=e.value.slice(2):0===e.length?e.value=[0,1]:e.length<2?(r=parseFloat(e.value[0]),e.value=[r,r+1]):e.value=[parseFloat(e.value[0]),parseFloat(e.value[1])]:n(e.value)&&(r=parseFloat(e.value),e.value=[r,r+1])):(t("contours.value",0),n(e.value)||(Array.isArray(e.value)?e.value=parseFloat(e.value[0]):e.value=0))}(r,g),"="===v?f=g.showlines=!0:(f=r("contours.showlines"),d=r("fillcolor",o((t.line||{}).color||l,.5))),f)&&(p=r("line.color",d&&s(d)?o(e.fillcolor,1):l),r("line.width",2),r("line.dash"));r("line.smoothing"),a(r,i,p,h)}},{"../../components/color":591,"../../constants/filter_ops":689,"./label_defaults":958,"fast-isnumeric":228}],949:[function(t,e,r){"use strict";var n=t("../../constants/filter_ops"),a=t("fast-isnumeric");function i(t,e){var r,i=Array.isArray(e);function o(t){return a(t)?+t:null}return-1!==n.COMPARISON_OPS2.indexOf(t)?r=o(i?e[0]:e):-1!==n.INTERVAL_OPS.indexOf(t)?r=i?[o(e[0]),o(e[1])]:[o(e),o(e)]:-1!==n.SET_OPS.indexOf(t)&&(r=i?e.map(o):[o(e)]),r}function o(t){return function(e){e=i(t,e);var r=Math.min(e[0],e[1]),n=Math.max(e[0],e[1]);return{start:r,end:n,size:n-r}}}function s(t){return function(e){return{start:e=i(t,e),end:1/0,size:1/0}}}e.exports={"[]":o("[]"),"][":o("]["),">":s(">"),"<":s("<"),"=":s("=")}},{"../../constants/filter_ops":689,"fast-isnumeric":228}],950:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){var a=n("contours.start"),i=n("contours.end"),o=!1===a||!1===i,s=r("contours.size");!(o?e.autocontour=!0:r("autocontour",!1))&&s||r("ncontours")}},{}],951:[function(t,e,r){"use strict";var n=t("../../lib");function a(t){return n.extendFlat({},t,{edgepaths:n.extendDeep([],t.edgepaths),paths:n.extendDeep([],t.paths),starts:n.extendDeep([],t.starts)})}e.exports=function(t,e){var r,i,o,s=function(t){return t.reverse()},l=function(t){return t};switch(e){case"=":case"<":return t;case">":for(1!==t.length&&n.warn("Contour data invalid for the specified inequality operation."),i=t[0],r=0;r<i.edgepaths.length;r++)i.edgepaths[r]=s(i.edgepaths[r]);for(r=0;r<i.paths.length;r++)i.paths[r]=s(i.paths[r]);for(r=0;r<i.starts.length;r++)i.starts[r]=s(i.starts[r]);return t;case"][":var c=s;s=l,l=c;case"[]":for(2!==t.length&&n.warn("Contour data invalid for the specified inequality range operation."),i=a(t[0]),o=a(t[1]),r=0;r<i.edgepaths.length;r++)i.edgepaths[r]=s(i.edgepaths[r]);for(r=0;r<i.paths.length;r++)i.paths[r]=s(i.paths[r]);for(r=0;r<i.starts.length;r++)i.starts[r]=s(i.starts[r]);for(;o.edgepaths.length;)i.edgepaths.push(l(o.edgepaths.shift()));for(;o.paths.length;)i.paths.push(l(o.paths.shift()));for(;o.starts.length;)i.starts.push(l(o.starts.shift()));return[i]}}},{"../../lib":717}],952:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../heatmap/xyz_defaults"),i=t("./constraint_defaults"),o=t("./contours_defaults"),s=t("./style_defaults"),l=t("./attributes");e.exports=function(t,e,r,c){function u(r,a){return n.coerce(t,e,l,r,a)}if(a(t,e,u,c)){u("text"),u("hovertext"),u("hovertemplate"),u("hoverongaps");var h="constraint"===u("contours.type");u("connectgaps",n.isArray1D(e.z)),h?i(t,e,u,c,r):(o(t,e,u,function(r){return n.coerce2(t,e,l,r)}),s(t,e,u,c))}else e.visible=!1}},{"../../lib":717,"../heatmap/xyz_defaults":1014,"./attributes":943,"./constraint_defaults":948,"./contours_defaults":950,"./style_defaults":964}],953:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./constraint_mapping"),i=t("./end_plus");e.exports=function(t,e,r){for(var o="constraint"===t.type?a[t._operation](t.value):t,s=o.size,l=[],c=i(o),u=r.trace._carpetTrace,h=u?{xaxis:u.aaxis,yaxis:u.baxis,x:r.a,y:r.b}:{xaxis:e.xaxis,yaxis:e.yaxis,x:r.x,y:r.y},f=o.start;f<c;f+=s)if(l.push(n.extendFlat({level:f,crossings:{},starts:[],edgepaths:[],paths:[],z:r.z,smoothing:r.trace.line.smoothing},h)),l.length>1e3){n.warn("Too many contours, clipping at 1000",t);break}return l}},{"../../lib":717,"./constraint_mapping":949,"./end_plus":954}],954:[function(t,e,r){"use strict";e.exports=function(t){return t.end+t.size/1e6}},{}],955:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./constants");function i(t,e,r,n){return Math.abs(t[0]-e[0])<r&&Math.abs(t[1]-e[1])<n}function o(t,e,r,o,l){var c,u=e.join(","),h=t.crossings[u],f=function(t,e,r){var n=0,i=0;t>20&&e?208===t||1114===t?n=0===r[0]?1:-1:i=0===r[1]?1:-1:-1!==a.BOTTOMSTART.indexOf(t)?i=1:-1!==a.LEFTSTART.indexOf(t)?n=1:-1!==a.TOPSTART.indexOf(t)?i=-1:n=-1;return[n,i]}(h,r,e),p=[s(t,e,[-f[0],-f[1]])],d=t.z.length,g=t.z[0].length,v=e.slice(),m=f.slice();for(c=0;c<1e4;c++){if(h>20?(h=a.CHOOSESADDLE[h][(f[0]||f[1])<0?0:1],t.crossings[u]=a.SADDLEREMAINDER[h]):delete t.crossings[u],!(f=a.NEWDELTA[h])){n.log("Found bad marching index:",h,e,t.level);break}p.push(s(t,e,f)),e[0]+=f[0],e[1]+=f[1],u=e.join(","),i(p[p.length-1],p[p.length-2],o,l)&&p.pop();var y=f[0]&&(e[0]<0||e[0]>g-2)||f[1]&&(e[1]<0||e[1]>d-2);if(e[0]===v[0]&&e[1]===v[1]&&f[0]===m[0]&&f[1]===m[1]||r&&y)break;h=t.crossings[u]}1e4===c&&n.log("Infinite loop in contour?");var x,b,_,w,k,T,M,A,S,E,L,C,P,O,z,I=i(p[0],p[p.length-1],o,l),D=0,R=.2*t.smoothing,F=[],B=0;for(c=1;c<p.length;c++)C=p[c],P=p[c-1],O=void 0,z=void 0,O=C[2]-P[2],z=C[3]-P[3],D+=M=Math.sqrt(O*O+z*z),F.push(M);var N=D/F.length*R;function j(t){return p[t%p.length]}for(c=p.length-2;c>=B;c--)if((x=F[c])<N){for(_=0,b=c-1;b>=B&&x+F[b]<N;b--)x+=F[b];if(I&&c===p.length-2)for(_=0;_<b&&x+F[_]<N;_++)x+=F[_];k=c-b+_+1,T=Math.floor((c+b+_+2)/2),w=I||c!==p.length-2?I||-1!==b?k%2?j(T):[(j(T)[0]+j(T+1)[0])/2,(j(T)[1]+j(T+1)[1])/2]:p[0]:p[p.length-1],p.splice(b+1,c-b+1,w),c=b+1,_&&(B=_),I&&(c===p.length-2?p[_]=p[p.length-1]:0===c&&(p[p.length-1]=p[0]))}for(p.splice(0,B),c=0;c<p.length;c++)p[c].length=2;if(!(p.length<2))if(I)p.pop(),t.paths.push(p);else{r||n.log("Unclosed interior contour?",t.level,v.join(","),p.join("L"));var V=!1;for(A=0;A<t.edgepaths.length;A++)if(E=t.edgepaths[A],!V&&i(E[0],p[p.length-1],o,l)){p.pop(),V=!0;var U=!1;for(S=0;S<t.edgepaths.length;S++)if(i((L=t.edgepaths[S])[L.length-1],p[0],o,l)){U=!0,p.shift(),t.edgepaths.splice(A,1),S===A?t.paths.push(p.concat(L)):(S>A&&S--,t.edgepaths[S]=L.concat(p,E));break}U||(t.edgepaths[A]=p.concat(E))}for(A=0;A<t.edgepaths.length&&!V;A++)i((E=t.edgepaths[A])[E.length-1],p[0],o,l)&&(p.shift(),t.edgepaths[A]=E.concat(p),V=!0);V||t.edgepaths.push(p)}}function s(t,e,r){var n=e[0]+Math.max(r[0],0),a=e[1]+Math.max(r[1],0),i=t.z[a][n],o=t.xaxis,s=t.yaxis;if(r[1]){var l=(t.level-i)/(t.z[a][n+1]-i);return[o.c2p((1-l)*t.x[n]+l*t.x[n+1],!0),s.c2p(t.y[a],!0),n+l,a]}var c=(t.level-i)/(t.z[a+1][n]-i);return[o.c2p(t.x[n],!0),s.c2p((1-c)*t.y[a]+c*t.y[a+1],!0),n,a+c]}e.exports=function(t,e,r){var a,i,s,l;for(e=e||.01,r=r||.01,i=0;i<t.length;i++){for(s=t[i],l=0;l<s.starts.length;l++)o(s,s.starts[l],"edge",e,r);for(a=0;Object.keys(s.crossings).length&&a<1e4;)a++,o(s,Object.keys(s.crossings)[0].split(",").map(Number),void 0,e,r);1e4===a&&n.log("Infinite loop in contour?")}}},{"../../lib":717,"./constants":947}],956:[function(t,e,r){"use strict";var n=t("../../components/color"),a=t("../heatmap/hover");e.exports=function(t,e,r,i,o){var s=a(t,e,r,i,o,!0);return s&&s.forEach(function(t){var e=t.trace;"constraint"===e.contours.type&&(e.fillcolor&&n.opacity(e.fillcolor)?t.color=n.addOpacity(e.fillcolor,1):e.contours.showlines&&n.opacity(e.line.color)&&(t.color=n.addOpacity(e.line.color,1)))}),s}},{"../../components/color":591,"../heatmap/hover":1007}],957:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc"),plot:t("./plot").plot,style:t("./style"),colorbar:t("./colorbar"),hoverPoints:t("./hover"),moduleType:"trace",name:"contour",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","2dMap","contour","showLegend"],meta:{}}},{"../../plots/cartesian":776,"./attributes":943,"./calc":944,"./colorbar":946,"./defaults":952,"./hover":956,"./plot":961,"./style":963}],958:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e,r,a){if(a||(a={}),t("contours.showlabels")){var i=e.font;n.coerceFont(t,"contours.labelfont",{family:i.family,size:i.size,color:r}),t("contours.labelformat")}!1!==a.hasHover&&t("zhoverformat")}},{"../../lib":717}],959:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/colorscale"),i=t("./end_plus");e.exports=function(t){var e=t.contours,r=e.start,o=i(e),s=e.size||1,l=Math.floor((o-r)/s)+1,c="lines"===e.coloring?0:1,u=a.extractOpts(t);isFinite(s)||(s=1,l=1);var h,f,p=u.reversescale?a.flipScale(u.colorscale):u.colorscale,d=p.length,g=new Array(d),v=new Array(d);if("heatmap"===e.coloring){var m=u.min,y=u.max;for(f=0;f<d;f++)h=p[f],g[f]=h[0]*(y-m)+m,v[f]=h[1];var x=n.extent([m,y,e.start,e.start+s*(l-1)]),b=x[m<y?0:1],_=x[m<y?1:0];b!==m&&(g.splice(0,0,b),v.splice(0,0,v[0])),_!==y&&(g.push(_),v.push(v[v.length-1]))}else for(f=0;f<d;f++)h=p[f],g[f]=(h[0]*(l+c-1)-c/2)*s+r,v[f]=h[1];return a.makeColorScaleFunc({domain:g,range:v},{noNumericCheck:!0})}},{"../../components/colorscale":603,"./end_plus":954,d3:165}],960:[function(t,e,r){"use strict";var n=t("./constants");function a(t,e){var r=(e[0][0]>t?0:1)+(e[0][1]>t?0:2)+(e[1][1]>t?0:4)+(e[1][0]>t?0:8);return 5===r||10===r?t>(e[0][0]+e[0][1]+e[1][0]+e[1][1])/4?5===r?713:1114:5===r?104:208:15===r?0:r}e.exports=function(t){var e,r,i,o,s,l,c,u,h,f=t[0].z,p=f.length,d=f[0].length,g=2===p||2===d;for(r=0;r<p-1;r++)for(o=[],0===r&&(o=o.concat(n.BOTTOMSTART)),r===p-2&&(o=o.concat(n.TOPSTART)),e=0;e<d-1;e++)for(i=o.slice(),0===e&&(i=i.concat(n.LEFTSTART)),e===d-2&&(i=i.concat(n.RIGHTSTART)),s=e+","+r,l=[[f[r][e],f[r][e+1]],[f[r+1][e],f[r+1][e+1]]],h=0;h<t.length;h++)(c=a((u=t[h]).level,l))&&(u.crossings[s]=c,-1!==i.indexOf(c)&&(u.starts.push([e,r]),g&&-1!==i.indexOf(c,i.indexOf(c)+1)&&u.starts.push([e,r])))}},{"./constants":947}],961:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../components/drawing"),o=t("../../components/colorscale"),s=t("../../lib/svg_text_utils"),l=t("../../plots/cartesian/axes"),c=t("../../plots/cartesian/set_convert"),u=t("../heatmap/plot"),h=t("./make_crossings"),f=t("./find_all_paths"),p=t("./empty_pathinfo"),d=t("./convert_to_constraints"),g=t("./close_boundaries"),v=t("./constants"),m=v.LABELOPTIMIZER;function y(t,e){var r,n,o,s,l,c,u,h="",f=0,p=t.edgepaths.map(function(t,e){return e}),d=!0;function g(t){return Math.abs(t[1]-e[2][1])<.01}function v(t){return Math.abs(t[0]-e[0][0])<.01}function m(t){return Math.abs(t[0]-e[2][0])<.01}for(;p.length;){for(c=i.smoothopen(t.edgepaths[f],t.smoothing),h+=d?c:c.replace(/^M/,"L"),p.splice(p.indexOf(f),1),r=t.edgepaths[f][t.edgepaths[f].length-1],s=-1,o=0;o<4;o++){if(!r){a.log("Missing end?",f,t);break}for(u=r,Math.abs(u[1]-e[0][1])<.01&&!m(r)?n=e[1]:v(r)?n=e[0]:g(r)?n=e[3]:m(r)&&(n=e[2]),l=0;l<t.edgepaths.length;l++){var y=t.edgepaths[l][0];Math.abs(r[0]-n[0])<.01?Math.abs(r[0]-y[0])<.01&&(y[1]-r[1])*(n[1]-y[1])>=0&&(n=y,s=l):Math.abs(r[1]-n[1])<.01?Math.abs(r[1]-y[1])<.01&&(y[0]-r[0])*(n[0]-y[0])>=0&&(n=y,s=l):a.log("endpt to newendpt is not vert. or horz.",r,n,y)}if(r=n,s>=0)break;h+="L"+n}if(s===t.edgepaths.length){a.log("unclosed perimeter path");break}f=s,(d=-1===p.indexOf(f))&&(f=p[0],h+="Z")}for(f=0;f<t.paths.length;f++)h+=i.smoothclosed(t.paths[f],t.smoothing);return h}function x(t,e,r,n){var i=e.width/2,o=e.height/2,s=t.x,l=t.y,c=t.theta,u=Math.cos(c)*i,h=Math.sin(c)*i,f=(s>n.center?n.right-s:s-n.left)/(u+Math.abs(Math.sin(c)*o)),p=(l>n.middle?n.bottom-l:l-n.top)/(Math.abs(h)+Math.cos(c)*o);if(f<1||p<1)return 1/0;var d=m.EDGECOST*(1/(f-1)+1/(p-1));d+=m.ANGLECOST*c*c;for(var g=s-u,v=l-h,y=s+u,x=l+h,b=0;b<r.length;b++){var _=r[b],w=Math.cos(_.theta)*_.width/2,k=Math.sin(_.theta)*_.width/2,T=2*a.segmentDistance(g,v,y,x,_.x-w,_.y-k,_.x+w,_.y+k)/(e.height+_.height),M=_.level===e.level,A=M?m.SAMELEVELDISTANCE:1;if(T<=A)return 1/0;d+=m.NEIGHBORCOST*(M?m.SAMELEVELFACTOR:1)/(T-A)}return d}function b(t){var e,r,n=t.trace._emptypoints,a=[],i=t.z.length,o=t.z[0].length,s=[];for(e=0;e<o;e++)s.push(1);for(e=0;e<i;e++)a.push(s.slice());for(e=0;e<n.length;e++)a[(r=n[e])[0]][r[1]]=0;return t.zmask=a,a}r.plot=function(t,e,o,s){var l=e.xaxis,c=e.yaxis;a.makeTraceGroups(s,o,"contour").each(function(o){var s=n.select(this),m=o[0],x=m.trace,_=m.x,w=m.y,k=x.contours,T=p(k,e,m),M=a.ensureSingle(s,"g","heatmapcoloring"),A=[];"heatmap"===k.coloring&&(A=[o]),u(t,e,A,M),h(T),f(T);var S=l.c2p(_[0],!0),E=l.c2p(_[_.length-1],!0),L=c.c2p(w[0],!0),C=c.c2p(w[w.length-1],!0),P=[[S,C],[E,C],[E,L],[S,L]],O=T;"constraint"===k.type&&(O=d(T,k._operation)),function(t,e,r){var n=a.ensureSingle(t,"g","contourbg").selectAll("path").data("fill"===r.coloring?[0]:[]);n.enter().append("path"),n.exit().remove(),n.attr("d","M"+e.join("L")+"Z").style("stroke","none")}(s,P,k),function(t,e,r,i){var o="fill"===i.coloring||"constraint"===i.type&&"="!==i._operation,s="M"+r.join("L")+"Z";o&&g(e,i);var l=a.ensureSingle(t,"g","contourfill").selectAll("path").data(o?e:[]);l.enter().append("path"),l.exit().remove(),l.each(function(t){var e=(t.prefixBoundary?s:"")+y(t,r);e?n.select(this).attr("d",e).style("stroke","none"):n.select(this).remove()})}(s,O,P,k),function(t,e,o,s,l){var c=a.ensureSingle(t,"g","contourlines"),u=!1!==l.showlines,h=l.showlabels,f=u&&h,p=r.createLines(c,u||h,e),d=r.createLineClip(c,f,o,s.trace.uid),g=t.selectAll("g.contourlabels").data(h?[0]:[]);if(g.exit().remove(),g.enter().append("g").classed("contourlabels",!0),h){var m=[],y=[];a.clearLocationCache();var x=r.labelFormatter(o,s),b=i.tester.append("text").attr("data-notex",1).call(i.font,l.labelfont),_=e[0].xaxis,w=e[0].yaxis,k=_._length,T=w._length,M=_.range,A=w.range,S=a.aggNums(Math.min,null,s.x),E=a.aggNums(Math.max,null,s.x),L=a.aggNums(Math.min,null,s.y),C=a.aggNums(Math.max,null,s.y),P=Math.max(_.c2p(S,!0),0),O=Math.min(_.c2p(E,!0),k),z=Math.max(w.c2p(C,!0),0),I=Math.min(w.c2p(L,!0),T),D={};M[0]<M[1]?(D.left=P,D.right=O):(D.left=O,D.right=P),A[0]<A[1]?(D.top=z,D.bottom=I):(D.top=I,D.bottom=z),D.middle=(D.top+D.bottom)/2,D.center=(D.left+D.right)/2,m.push([[D.left,D.top],[D.right,D.top],[D.right,D.bottom],[D.left,D.bottom]]);var R=Math.sqrt(k*k+T*T),F=v.LABELDISTANCE*R/Math.max(1,e.length/v.LABELINCREASE);p.each(function(t){var e=r.calcTextOpts(t.level,x,b,o);n.select(this).selectAll("path").each(function(){var t=a.getVisibleSegment(this,D,e.height/2);if(t&&!(t.len<(e.width+e.height)*v.LABELMIN))for(var n=Math.min(Math.ceil(t.len/F),v.LABELMAX),i=0;i<n;i++){var o=r.findBestTextLocation(this,t,e,y,D);if(!o)break;r.addLabelData(o,e,y,m)}})}),b.remove(),r.drawLabels(g,y,o,d,f?m:null)}h&&!u&&p.remove()}(s,T,t,m,k),function(t,e,r,n,o){var s=n.trace,l=r._fullLayout._clips,c="clip"+s.uid,u=l.selectAll("#"+c).data(s.connectgaps?[]:[0]);if(u.enter().append("clipPath").classed("contourclip",!0).attr("id",c),u.exit().remove(),!1===s.connectgaps){var p={level:.9,crossings:{},starts:[],edgepaths:[],paths:[],xaxis:e.xaxis,yaxis:e.yaxis,x:n.x,y:n.y,z:b(n),smoothing:0};h([p]),f([p]),g([p],{type:"levels"});var d=a.ensureSingle(u,"path","");d.attr("d",(p.prefixBoundary?"M"+o.join("L")+"Z":"")+y(p,o))}else c=null;i.setClipUrl(t,c,r)}(s,e,t,m,P)})},r.createLines=function(t,e,r){var n=r[0].smoothing,a=t.selectAll("g.contourlevel").data(e?r:[]);if(a.exit().remove(),a.enter().append("g").classed("contourlevel",!0),e){var o=a.selectAll("path.openline").data(function(t){return t.pedgepaths||t.edgepaths});o.exit().remove(),o.enter().append("path").classed("openline",!0),o.attr("d",function(t){return i.smoothopen(t,n)}).style("stroke-miterlimit",1).style("vector-effect","non-scaling-stroke");var s=a.selectAll("path.closedline").data(function(t){return t.ppaths||t.paths});s.exit().remove(),s.enter().append("path").classed("closedline",!0),s.attr("d",function(t){return i.smoothclosed(t,n)}).style("stroke-miterlimit",1).style("vector-effect","non-scaling-stroke")}return a},r.createLineClip=function(t,e,r,n){var a=e?"clipline"+n:null,o=r._fullLayout._clips.selectAll("#"+a).data(e?[0]:[]);return o.exit().remove(),o.enter().append("clipPath").classed("contourlineclip",!0).attr("id",a),i.setClipUrl(t,a,r),o},r.labelFormatter=function(t,e){var r=t._fullLayout,n=e.trace,a=n.contours,i={type:"linear",_id:"ycontour",showexponent:"all",exponentformat:"B"};if(a.labelformat)i.tickformat=a.labelformat,c(i,r);else{var s=o.extractOpts(n);if(s&&s.colorbar&&s.colorbar._axis)i=s.colorbar._axis;else{if("constraint"===a.type){var u=a.value;Array.isArray(u)?i.range=[u[0],u[u.length-1]]:i.range=[u,u]}else i.range=[a.start,a.end],i.nticks=(a.end-a.start)/a.size;i.range[0]===i.range[1]&&(i.range[1]+=i.range[0]||1),i.nticks||(i.nticks=1e3),c(i,r),l.prepTicks(i),i._tmin=null,i._tmax=null}}return function(t){return l.tickText(i,t).text}},r.calcTextOpts=function(t,e,r,n){var a=e(t);r.text(a).call(s.convertToTspans,n);var o=r.node(),l=i.bBox(o,!0);return{text:a,width:l.width,height:l.height,fontSize:+o.style["font-size"].replace("px",""),level:t,dy:(l.top+l.bottom)/2}},r.findBestTextLocation=function(t,e,r,n,i){var o,s,l,c,u,h=r.width;e.isClosed?(s=e.len/m.INITIALSEARCHPOINTS,o=e.min+s/2,l=e.max):(s=(e.len-h)/(m.INITIALSEARCHPOINTS+1),o=e.min+s+h/2,l=e.max-(s+h)/2);for(var f=1/0,p=0;p<m.ITERATIONS;p++){for(var d=o;d<l;d+=s){var g=a.getTextLocation(t,e.total,d,h),v=x(g,r,n,i);v<f&&(f=v,u=g,c=d)}if(f>2*m.MAXCOST)break;p&&(s/=2),l=(o=c-s/2)+1.5*s}if(f<=m.MAXCOST)return u},r.addLabelData=function(t,e,r,n){var a=e.fontSize,i=e.width+a/3,o=Math.max(0,e.height-a/3),s=t.x,l=t.y,c=t.theta,u=Math.sin(c),h=Math.cos(c),f=function(t,e){return[s+t*h-e*u,l+t*u+e*h]},p=[f(-i/2,-o/2),f(-i/2,o/2),f(i/2,o/2),f(i/2,-o/2)];r.push({text:e.text,x:s,y:l,dy:e.dy,theta:c,level:e.level,width:i,height:o}),n.push(p)},r.drawLabels=function(t,e,r,i,o){var l=t.selectAll("text").data(e,function(t){return t.text+","+t.x+","+t.y+","+t.theta});if(l.exit().remove(),l.enter().append("text").attr({"data-notex":1,"text-anchor":"middle"}).each(function(t){var e=t.x+Math.sin(t.theta)*t.dy,a=t.y-Math.cos(t.theta)*t.dy;n.select(this).text(t.text).attr({x:e,y:a,transform:"rotate("+180*t.theta/Math.PI+" "+e+" "+a+")"}).call(s.convertToTspans,r)}),o){for(var c="",u=0;u<o.length;u++)c+="M"+o[u].join("L")+"Z";a.ensureSingle(i,"path","").attr("d",c)}}},{"../../components/colorscale":603,"../../components/drawing":612,"../../lib":717,"../../lib/svg_text_utils":741,"../../plots/cartesian/axes":765,"../../plots/cartesian/set_convert":783,"../heatmap/plot":1011,"./close_boundaries":945,"./constants":947,"./convert_to_constraints":951,"./empty_pathinfo":953,"./find_all_paths":955,"./make_crossings":960,d3:165}],962:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../lib");function i(t,e,r){var a={type:"linear",range:[t,e]};return n.autoTicks(a,(e-t)/(r||15)),a}e.exports=function(t,e){var r=t.contours;if(t.autocontour){var o=t.zmin,s=t.zmax;(t.zauto||void 0===o)&&(o=a.aggNums(Math.min,null,e)),(t.zauto||void 0===s)&&(s=a.aggNums(Math.max,null,e));var l=i(o,s,t.ncontours);r.size=l.dtick,r.start=n.tickFirst(l),l.range.reverse(),r.end=n.tickFirst(l),r.start===o&&(r.start+=r.size),r.end===s&&(r.end-=r.size),r.start>r.end&&(r.start=r.end=(r.start+r.end)/2),t._input.contours||(t._input.contours={}),a.extendFlat(t._input.contours,{start:r.start,end:r.end,size:r.size}),t._input.autocontour=!0}else if("constraint"!==r.type){var c,u=r.start,h=r.end,f=t._input.contours;if(u>h&&(r.start=f.start=h,h=r.end=f.end=u,u=r.start),!(r.size>0))c=u===h?1:i(u,h,t.ncontours).dtick,f.size=r.size=c}}},{"../../lib":717,"../../plots/cartesian/axes":765}],963:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/drawing"),i=t("../heatmap/style"),o=t("./make_color_map");e.exports=function(t){var e=n.select(t).selectAll("g.contour");e.style("opacity",function(t){return t[0].trace.opacity}),e.each(function(t){var e=n.select(this),r=t[0].trace,i=r.contours,s=r.line,l=i.size||1,c=i.start,u="constraint"===i.type,h=!u&&"lines"===i.coloring,f=!u&&"fill"===i.coloring,p=h||f?o(r):null;e.selectAll("g.contourlevel").each(function(t){n.select(this).selectAll("path").call(a.lineGroupStyle,s.width,h?p(t.level):s.color,s.dash)});var d=i.labelfont;if(e.selectAll("g.contourlabels text").each(function(t){a.font(n.select(this),{family:d.family,size:d.size,color:d.color||(h?p(t.level):s.color)})}),u)e.selectAll("g.contourfill path").style("fill",r.fillcolor);else if(f){var g;e.selectAll("g.contourfill path").style("fill",function(t){return void 0===g&&(g=t.level),p(t.level+.5*l)}),void 0===g&&(g=c),e.selectAll("g.contourbg path").style("fill",p(g-.5*l))}}),i(t)}},{"../../components/drawing":612,"../heatmap/style":1012,"./make_color_map":959,d3:165}],964:[function(t,e,r){"use strict";var n=t("../../components/colorscale/defaults"),a=t("./label_defaults");e.exports=function(t,e,r,i,o){var s,l=r("contours.coloring"),c="";"fill"===l&&(s=r("contours.showlines")),!1!==s&&("lines"!==l&&(c=r("line.color","#000")),r("line.width",.5),r("line.dash")),"none"!==l&&(!0!==t.showlegend&&(e.showlegend=!1),e._dfltShowLegend=!1,n(t,e,i,r,{prefix:"",cLetter:"z"})),r("line.smoothing"),a(r,i,c,o)}},{"../../components/colorscale/defaults":601,"./label_defaults":958}],965:[function(t,e,r){"use strict";var n=t("../heatmap/attributes"),a=t("../contour/attributes"),i=t("../../components/colorscale/attributes"),o=t("../../lib/extend").extendFlat,s=a.contours;e.exports=o({carpet:{valType:"string",editType:"calc"},z:n.z,a:n.x,a0:n.x0,da:n.dx,b:n.y,b0:n.y0,db:n.dy,text:n.text,hovertext:n.hovertext,transpose:n.transpose,atype:n.xtype,btype:n.ytype,fillcolor:a.fillcolor,autocontour:a.autocontour,ncontours:a.ncontours,contours:{type:s.type,start:s.start,end:s.end,size:s.size,coloring:{valType:"enumerated",values:["fill","lines","none"],dflt:"fill",editType:"calc"},showlines:s.showlines,showlabels:s.showlabels,labelfont:s.labelfont,labelformat:s.labelformat,operation:s.operation,value:s.value,editType:"calc",impliedEdits:{autocontour:!1}},line:{color:a.line.color,width:a.line.width,dash:a.line.dash,smoothing:a.line.smoothing,editType:"plot"},transforms:void 0},i("",{cLetter:"z",autoColorDflt:!1}))},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../contour/attributes":943,"../heatmap/attributes":1e3}],966:[function(t,e,r){"use strict";var n=t("../../components/colorscale/calc"),a=t("../../lib"),i=t("../heatmap/convert_column_xyz"),o=t("../heatmap/clean_2d_array"),s=t("../heatmap/interp2d"),l=t("../heatmap/find_empties"),c=t("../heatmap/make_bound_array"),u=t("./defaults"),h=t("../carpet/lookup_carpetid"),f=t("../contour/set_contours");e.exports=function(t,e){var r=e._carpetTrace=h(t,e);if(r&&r.visible&&"legendonly"!==r.visible){if(!e.a||!e.b){var p=t.data[r.index],d=t.data[e.index];d.a||(d.a=p.a),d.b||(d.b=p.b),u(d,e,e._defaultColor,t._fullLayout)}var g=function(t,e){var r,u,h,f,p,d,g,v=e._carpetTrace,m=v.aaxis,y=v.baxis;m._minDtick=0,y._minDtick=0,a.isArray1D(e.z)&&i(e,m,y,"a","b",["z"]);r=e._a=e._a||e.a,f=e._b=e._b||e.b,r=r?m.makeCalcdata(e,"_a"):[],f=f?y.makeCalcdata(e,"_b"):[],u=e.a0||0,h=e.da||1,p=e.b0||0,d=e.db||1,g=e._z=o(e._z||e.z,e.transpose),e._emptypoints=l(g),s(g,e._emptypoints);var x=a.maxRowLength(g),b="scaled"===e.xtype?"":r,_=c(e,b,u,h,x,m),w="scaled"===e.ytype?"":f,k=c(e,w,p,d,g.length,y),T={a:_,b:k,z:g};"levels"===e.contours.type&&"none"!==e.contours.coloring&&n(t,e,{vals:g,containerStr:"",cLetter:"z"});return[T]}(t,e);return f(e,e._z),g}}},{"../../components/colorscale/calc":599,"../../lib":717,"../carpet/lookup_carpetid":916,"../contour/set_contours":962,"../heatmap/clean_2d_array":1002,"../heatmap/convert_column_xyz":1004,"../heatmap/find_empties":1006,"../heatmap/interp2d":1009,"../heatmap/make_bound_array":1010,"./defaults":967}],967:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../heatmap/xyz_defaults"),i=t("./attributes"),o=t("../contour/constraint_defaults"),s=t("../contour/contours_defaults"),l=t("../contour/style_defaults");e.exports=function(t,e,r,c){function u(r,a){return n.coerce(t,e,i,r,a)}if(u("carpet"),t.a&&t.b){if(!a(t,e,u,c,"a","b"))return void(e.visible=!1);u("text"),"constraint"===u("contours.type")?o(t,e,u,c,r,{hasHover:!1}):(s(t,e,u,function(r){return n.coerce2(t,e,i,r)}),l(t,e,u,c,{hasHover:!1}))}else e._defaultColor=r,e._length=null}},{"../../lib":717,"../contour/constraint_defaults":948,"../contour/contours_defaults":950,"../contour/style_defaults":964,"../heatmap/xyz_defaults":1014,"./attributes":965}],968:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../contour/colorbar"),calc:t("./calc"),plot:t("./plot"),style:t("../contour/style"),moduleType:"trace",name:"contourcarpet",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","carpet","contour","symbols","showLegend","hasLines","carpetDependent","noHover","noSortingByValue"],meta:{}}},{"../../plots/cartesian":776,"../contour/colorbar":946,"../contour/style":963,"./attributes":965,"./calc":966,"./defaults":967,"./plot":969}],969:[function(t,e,r){"use strict";var n=t("d3"),a=t("../carpet/map_1d_array"),i=t("../carpet/makepath"),o=t("../../components/drawing"),s=t("../../lib"),l=t("../contour/make_crossings"),c=t("../contour/find_all_paths"),u=t("../contour/plot"),h=t("../contour/constants"),f=t("../contour/convert_to_constraints"),p=t("../contour/empty_pathinfo"),d=t("../contour/close_boundaries"),g=t("../carpet/lookup_carpetid"),v=t("../carpet/axis_aligned_line");function m(t,e,r){var n=t.getPointAtLength(e),a=t.getPointAtLength(r),i=a.x-n.x,o=a.y-n.y,s=Math.sqrt(i*i+o*o);return[i/s,o/s]}function y(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]);return[t[0]/e,t[1]/e]}function x(t,e){var r=Math.abs(t[0]*e[0]+t[1]*e[1]);return Math.sqrt(1-r*r)/r}e.exports=function(t,e,r,b){var _=e.xaxis,w=e.yaxis;s.makeTraceGroups(b,r,"contour").each(function(r){var b=n.select(this),k=r[0],T=k.trace,M=T._carpetTrace=g(t,T),A=t.calcdata[M.index][0];if(M.visible&&"legendonly"!==M.visible){var S=k.a,E=k.b,L=T.contours,C=p(L,e,k),P="constraint"===L.type,O=L._operation,z=P?"="===O?"lines":"fill":L.coloring,I=[[S[0],E[E.length-1]],[S[S.length-1],E[E.length-1]],[S[S.length-1],E[0]],[S[0],E[0]]];l(C);var D=1e-8*(S[S.length-1]-S[0]),R=1e-8*(E[E.length-1]-E[0]);c(C,D,R);var F,B,N,j,V=C;"constraint"===L.type&&(V=f(C,O)),function(t,e){var r,n,a,i,o,s,l,c,u;for(r=0;r<t.length;r++){for(i=t[r],o=i.pedgepaths=[],s=i.ppaths=[],n=0;n<i.edgepaths.length;n++){for(u=i.edgepaths[n],l=[],a=0;a<u.length;a++)l[a]=e(u[a]);o.push(l)}for(n=0;n<i.paths.length;n++){for(u=i.paths[n],c=[],a=0;a<u.length;a++)c[a]=e(u[a]);s.push(c)}}}(C,H);var U=[];for(j=A.clipsegments.length-1;j>=0;j--)F=A.clipsegments[j],B=a([],F.x,_.c2p),N=a([],F.y,w.c2p),B.reverse(),N.reverse(),U.push(i(B,N,F.bicubic));var q="M"+U.join("L")+"Z";!function(t,e,r,n,o,l){var c,u,h,f,p=s.ensureSingle(t,"g","contourbg").selectAll("path").data("fill"!==l||o?[]:[0]);p.enter().append("path"),p.exit().remove();var d=[];for(f=0;f<e.length;f++)c=e[f],u=a([],c.x,r.c2p),h=a([],c.y,n.c2p),d.push(i(u,h,c.bicubic));p.attr("d","M"+d.join("L")+"Z").style("stroke","none")}(b,A.clipsegments,_,w,P,z),function(t,e,r,a,i,l,c,u,h,f,p){var g="fill"===f;g&&d(i,t.contours);var m=s.ensureSingle(e,"g","contourfill").selectAll("path").data(g?i:[]);m.enter().append("path"),m.exit().remove(),m.each(function(t){var e=(t.prefixBoundary?p:"")+function(t,e,r,n,a,i,l,c){var u,h,f,p,d,g,m,y="",x=e.edgepaths.map(function(t,e){return e}),b=!0,_=1e-4*Math.abs(r[0][0]-r[2][0]),w=1e-4*Math.abs(r[0][1]-r[2][1]);function k(t){return Math.abs(t[1]-r[0][1])<w}function T(t){return Math.abs(t[1]-r[2][1])<w}function M(t){return Math.abs(t[0]-r[0][0])<_}function A(t){return Math.abs(t[0]-r[2][0])<_}function S(t,e){var r,n,o,s,u="";for(k(t)&&!A(t)||T(t)&&!M(t)?(s=a.aaxis,o=v(a,i,[t[0],e[0]],.5*(t[1]+e[1]))):(s=a.baxis,o=v(a,i,.5*(t[0]+e[0]),[t[1],e[1]])),r=1;r<o.length;r++)for(u+=s.smoothing?"C":"L",n=0;n<o[r].length;n++){var h=o[r][n];u+=[l.c2p(h[0]),c.c2p(h[1])]+" "}return u}u=0,h=null;for(;x.length;){var E=e.edgepaths[u][0];for(h&&(y+=S(h,E)),m=o.smoothopen(e.edgepaths[u].map(n),e.smoothing),y+=b?m:m.replace(/^M/,"L"),x.splice(x.indexOf(u),1),h=e.edgepaths[u][e.edgepaths[u].length-1],d=-1,p=0;p<4;p++){if(!h){s.log("Missing end?",u,e);break}for(k(h)&&!A(h)?f=r[1]:M(h)?f=r[0]:T(h)?f=r[3]:A(h)&&(f=r[2]),g=0;g<e.edgepaths.length;g++){var L=e.edgepaths[g][0];Math.abs(h[0]-f[0])<_?Math.abs(h[0]-L[0])<_&&(L[1]-h[1])*(f[1]-L[1])>=0&&(f=L,d=g):Math.abs(h[1]-f[1])<w?Math.abs(h[1]-L[1])<w&&(L[0]-h[0])*(f[0]-L[0])>=0&&(f=L,d=g):s.log("endpt to newendpt is not vert. or horz.",h,f,L)}if(d>=0)break;y+=S(h,f),h=f}if(d===e.edgepaths.length){s.log("unclosed perimeter path");break}u=d,(b=-1===x.indexOf(u))&&(u=x[0],y+=S(h,f)+"Z",h=null)}for(u=0;u<e.paths.length;u++)y+=o.smoothclosed(e.paths[u].map(n),e.smoothing);return y}(0,t,l,c,u,h,r,a);e?n.select(this).attr("d",e).style("stroke","none"):n.select(this).remove()})}(T,b,_,w,V,I,H,M,A,z,q),function(t,e,r,a,i,l,c){var f=s.ensureSingle(t,"g","contourlines"),p=!1!==i.showlines,d=i.showlabels,g=p&&d,v=u.createLines(f,p||d,e),b=u.createLineClip(f,g,r,a.trace.uid),_=t.selectAll("g.contourlabels").data(d?[0]:[]);if(_.exit().remove(),_.enter().append("g").classed("contourlabels",!0),d){var w=l.xaxis,k=l.yaxis,T=w._length,M=k._length,A=[[[0,0],[T,0],[T,M],[0,M]]],S=[];s.clearLocationCache();var E=u.labelFormatter(r,a),L=o.tester.append("text").attr("data-notex",1).call(o.font,i.labelfont),C={left:0,right:T,center:T/2,top:0,bottom:M,middle:M/2},P=Math.sqrt(T*T+M*M),O=h.LABELDISTANCE*P/Math.max(1,e.length/h.LABELINCREASE);v.each(function(t){var e=u.calcTextOpts(t.level,E,L,r);n.select(this).selectAll("path").each(function(r){var n=s.getVisibleSegment(this,C,e.height/2);if(n&&(function(t,e,r,n,a,i){for(var o,s=0;s<r.pedgepaths.length;s++)e===r.pedgepaths[s]&&(o=r.edgepaths[s]);if(!o)return;var l=a.a[0],c=a.a[a.a.length-1],u=a.b[0],h=a.b[a.b.length-1];function f(t,e){var r,n=0;return(Math.abs(t[0]-l)<.1||Math.abs(t[0]-c)<.1)&&(r=y(a.dxydb_rough(t[0],t[1],.1)),n=Math.max(n,i*x(e,r)/2)),(Math.abs(t[1]-u)<.1||Math.abs(t[1]-h)<.1)&&(r=y(a.dxyda_rough(t[0],t[1],.1)),n=Math.max(n,i*x(e,r)/2)),n}var p=m(t,0,1),d=m(t,n.total,n.total-1),g=f(o[0],p),v=n.total-f(o[o.length-1],d);n.min<g&&(n.min=g);n.max>v&&(n.max=v);n.len=n.max-n.min}(this,r,t,n,c,e.height),!(n.len<(e.width+e.height)*h.LABELMIN)))for(var a=Math.min(Math.ceil(n.len/O),h.LABELMAX),i=0;i<a;i++){var o=u.findBestTextLocation(this,n,e,S,C);if(!o)break;u.addLabelData(o,e,S,A)}})}),L.remove(),u.drawLabels(_,S,r,b,g?A:null)}d&&!p&&v.remove()}(b,C,t,k,L,e,M),o.setClipUrl(b,M._clipPathId,t)}function H(t){var e=M.ab2xy(t[0],t[1],!0);return[_.c2p(e[0]),w.c2p(e[1])]}})}},{"../../components/drawing":612,"../../lib":717,"../carpet/axis_aligned_line":900,"../carpet/lookup_carpetid":916,"../carpet/makepath":917,"../carpet/map_1d_array":918,"../contour/close_boundaries":945,"../contour/constants":947,"../contour/convert_to_constraints":951,"../contour/empty_pathinfo":953,"../contour/find_all_paths":955,"../contour/make_crossings":960,"../contour/plot":961,d3:165}],970:[function(t,e,r){"use strict";var n=t("../../components/colorscale/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../../plots/attributes"),o=t("../scattermapbox/attributes"),s=t("../../lib/extend").extendFlat;e.exports=s({lon:o.lon,lat:o.lat,z:{valType:"data_array",editType:"calc"},radius:{valType:"number",editType:"plot",arrayOk:!0,min:1,dflt:30},below:{valType:"string",editType:"plot"},text:o.text,hovertext:o.hovertext,hoverinfo:s({},i.hoverinfo,{flags:["lon","lat","z","text","name"]}),hovertemplate:a(),showlegend:s({},i.showlegend,{dflt:!1})},n("",{cLetter:"z",editTypeOverride:"calc"}))},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../scattermapbox/attributes":1184}],971:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib").isArrayOrTypedArray,i=t("../../constants/numerical").BADNUM,o=t("../../components/colorscale/calc"),s=t("../../lib")._;e.exports=function(t,e){for(var r=e._length,l=new Array(r),c=e.z,u=a(c)&&c.length,h=0;h<r;h++){var f=l[h]={},p=e.lon[h],d=e.lat[h];if(f.lonlat=n(p)&&n(d)?[+p,+d]:[i,i],u){var g=c[h];f.z=n(g)?g:i}}return o(t,e,{vals:u?c:[0,1],containerStr:"",cLetter:"z"}),r&&(l[0].t={labels:{lat:s(t,"lat:")+" ",lon:s(t,"lon:")+" "}}),l}},{"../../components/colorscale/calc":599,"../../constants/numerical":693,"../../lib":717,"fast-isnumeric":228}],972:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../components/color"),o=t("../../components/colorscale"),s=t("../../constants/numerical").BADNUM,l=t("../../lib/geojson_utils").makeBlank;e.exports=function(t){var e=t[0].trace,r=!0===e.visible&&0!==e._length,c=e._opts={heatmap:{layout:{visibility:"none"},paint:{}},geojson:l()};if(!r)return c;var u,h=[],f=e.z,p=e.radius,d=a.isArrayOrTypedArray(f)&&f.length,g=a.isArrayOrTypedArray(p);for(u=0;u<t.length;u++){var v=t[u],m=v.lonlat;if(m[0]!==s){var y={};if(d){var x=v.z;y.z=x!==s?x:0}g&&(y.r=n(p[u])&&p[u]>0?+p[u]:0),h.push({type:"Feature",geometry:{type:"Point",coordinates:m},properties:y})}}var b=o.extractOpts(e),_=b.reversescale?o.flipScale(b.colorscale):b.colorscale,w=_[0][1],k=["interpolate",["linear"],["heatmap-density"],0,i.opacity(w)<1?w:i.addOpacity(w,0)];for(u=1;u<_.length;u++)k.push(_[u][0],_[u][1]);var T=["interpolate",["linear"],["get","z"],b.min,0,b.max,1];return a.extendFlat(c.heatmap.paint,{"heatmap-weight":d?T:1/(b.max-b.min),"heatmap-color":k,"heatmap-radius":g?{type:"identity",property:"r"}:e.radius,"heatmap-opacity":e.opacity}),c.geojson={type:"FeatureCollection",features:h},c.heatmap.layout.visibility="visible",c}},{"../../components/color":591,"../../components/colorscale":603,"../../constants/numerical":693,"../../lib":717,"../../lib/geojson_utils":712,"fast-isnumeric":228}],973:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/colorscale/defaults"),i=t("./attributes");e.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}var l=s("lon")||[],c=s("lat")||[],u=Math.min(l.length,c.length);u?(e._length=u,s("z"),s("radius"),s("below"),s("text"),s("hovertext"),s("hovertemplate"),a(t,e,o,s,{prefix:"",cLetter:"z"})):e.visible=!1}},{"../../components/colorscale/defaults":601,"../../lib":717,"./attributes":970}],974:[function(t,e,r){"use strict";e.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t.z=e.z,t}},{}],975:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../scattermapbox/hover");e.exports=function(t,e,r){var o=i(t,e,r);if(o){var s=o[0],l=s.cd,c=l[0].trace,u=l[s.index];if(delete s.color,"z"in u){var h=s.subplot.mockAxis;s.z=u.z,s.zLabel=a.tickText(h,h.c2l(u.z),"hover").text}return s.extraText=function(t,e,r){if(t.hovertemplate)return;var a=(e.hi||t.hoverinfo).split("+"),i=-1!==a.indexOf("all"),o=-1!==a.indexOf("lon"),s=-1!==a.indexOf("lat"),l=e.lonlat,c=[];function u(t){return t+"\xb0"}i||o&&s?c.push("("+u(l[0])+", "+u(l[1])+")"):o?c.push(r.lon+u(l[0])):s&&c.push(r.lat+u(l[1]));(i||-1!==a.indexOf("text"))&&n.fillText(e,t,c);return c.join("<br>")}(c,u,l[0].t.labels),[s]}}},{"../../lib":717,"../../plots/cartesian/axes":765,"../scattermapbox/hover":1189}],976:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../heatmap/colorbar"),formatLabels:t("../scattermapbox/format_labels"),calc:t("./calc"),plot:t("./plot"),hoverPoints:t("./hover"),eventData:t("./event_data"),getBelow:function(t,e){for(var r=e.getMapLayers(),n=0;n<r.length;n++){var a=r[n],i=a.id;if("symbol"===a.type&&"string"==typeof i&&-1===i.indexOf("plotly-"))return i}},moduleType:"trace",name:"densitymapbox",basePlotModule:t("../../plots/mapbox"),categories:["mapbox","gl","showLegend"],meta:{hr_name:"density_mapbox"}}},{"../../plots/mapbox":820,"../heatmap/colorbar":1003,"../scattermapbox/format_labels":1188,"./attributes":970,"./calc":971,"./defaults":973,"./event_data":974,"./hover":975,"./plot":977}],977:[function(t,e,r){"use strict";var n=t("./convert"),a=t("../../plots/mapbox/constants").traceLayerPrefix;function i(t,e){this.type="densitymapbox",this.subplot=t,this.uid=e,this.sourceId="source-"+e,this.layerList=[["heatmap",a+e+"-heatmap"]],this.below=null}var o=i.prototype;o.update=function(t){var e=this.subplot,r=this.layerList,a=n(t),i=e.belowLookup["trace-"+this.uid];e.map.getSource(this.sourceId).setData(a.geojson),i!==this.below&&(this._removeLayers(),this._addLayers(a,i),this.below=i);for(var o=0;o<r.length;o++){var s=r[o],l=s[0],c=s[1],u=a[l];e.setOptions(c,"setLayoutProperty",u.layout),"visible"===u.layout.visibility&&e.setOptions(c,"setPaintProperty",u.paint)}},o._addLayers=function(t,e){for(var r=this.subplot,n=this.layerList,a=this.sourceId,i=0;i<n.length;i++){var o=n[i],s=o[0],l=t[s];r.addLayer({type:s,id:o[1],source:a,layout:l.layout,paint:l.paint},e)}},o._removeLayers=function(){for(var t=this.subplot.map,e=this.layerList,r=e.length-1;r>=0;r--)t.removeLayer(e[r][1])},o.dispose=function(){var t=this.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},e.exports=function(t,e){var r=e[0].trace,a=new i(t,r.uid),o=a.sourceId,s=n(e),l=a.below=t.belowLookup["trace-"+r.uid];return t.map.addSource(o,{type:"geojson",data:s.geojson}),a._addLayers(s,l),a}},{"../../plots/mapbox/constants":818,"./convert":972}],978:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,"tx"),n.mergeArray(e.hovertext,t,"htx");var a=e.marker;if(a){n.mergeArray(a.opacity,t,"mo"),n.mergeArray(a.color,t,"mc");var i=a.line;i&&(n.mergeArray(i.color,t,"mlc"),n.mergeArrayCastPositive(i.width,t,"mlw"))}}},{"../../lib":717}],979:[function(t,e,r){"use strict";var n=t("../bar/attributes"),a=t("../scatter/attributes").line,i=t("../../plots/attributes"),o=t("../../plots/template_attributes").hovertemplateAttrs,s=t("../../plots/template_attributes").texttemplateAttrs,l=t("./constants"),c=t("../../lib/extend").extendFlat,u=t("../../components/color");e.exports={x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,hovertext:n.hovertext,hovertemplate:o({},{keys:l.eventDataKeys}),hoverinfo:c({},i.hoverinfo,{flags:["name","x","y","text","percent initial","percent previous","percent total"]}),textinfo:{valType:"flaglist",flags:["label","text","percent initial","percent previous","percent total","value"],extras:["none"],editType:"plot",arrayOk:!1},texttemplate:s({editType:"plot"},{keys:l.eventDataKeys.concat(["label","value"])}),text:n.text,textposition:c({},n.textposition,{dflt:"auto"}),insidetextanchor:c({},n.insidetextanchor,{dflt:"middle"}),textangle:c({},n.textangle,{dflt:0}),textfont:n.textfont,insidetextfont:n.insidetextfont,outsidetextfont:n.outsidetextfont,constraintext:n.constraintext,cliponaxis:n.cliponaxis,orientation:c({},n.orientation,{}),offset:c({},n.offset,{arrayOk:!1}),width:c({},n.width,{arrayOk:!1}),marker:n.marker,connector:{fillcolor:{valType:"color",editType:"style"},line:{color:c({},a.color,{dflt:u.defaultLine}),width:c({},a.width,{dflt:0,editType:"plot"}),dash:a.dash,editType:"style"},visible:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup}},{"../../components/color":591,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../bar/attributes":856,"../scatter/attributes":1120,"./constants":981}],980:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("./arrays_to_calcdata"),i=t("../scatter/calc_selection"),o=t("../../constants/numerical").BADNUM;function s(t){return t===o?0:t}e.exports=function(t,e){var r,l,c,u,h=n.getFromId(t,e.xaxis||"x"),f=n.getFromId(t,e.yaxis||"y");"h"===e.orientation?(r=h.makeCalcdata(e,"x"),l=f.makeCalcdata(e,"y")):(r=f.makeCalcdata(e,"y"),l=h.makeCalcdata(e,"x"));var p,d=Math.min(l.length,r.length),g=new Array(d);for(e._base=[],c=0;c<d;c++){r[c]<0&&(r[c]=o);var v=!1;r[c]!==o&&c+1<d&&r[c+1]!==o&&(v=!0),u=g[c]={p:l[c],s:r[c],cNext:v},e._base[c]=-.5*u.s,e.ids&&(u.id=String(e.ids[c])),0===c&&(g[0].vTotal=0),g[0].vTotal+=s(u.s),u.begR=s(u.s)/s(g[0].s)}for(c=0;c<d;c++)(u=g[c]).s!==o&&(u.sumR=u.s/g[0].vTotal,u.difR=void 0!==p?u.s/p:1,p=u.s);return a(g,e),i(g,e),g}},{"../../constants/numerical":693,"../../plots/cartesian/axes":765,"../scatter/calc_selection":1122,"./arrays_to_calcdata":978}],981:[function(t,e,r){"use strict";e.exports={eventDataKeys:["percentInitial","percentPrevious","percentTotal"]}},{}],982:[function(t,e,r){"use strict";var n=t("../bar/cross_trace_calc").setGroupPositions;e.exports=function(t,e){var r,a,i=t._fullLayout,o=t._fullData,s=t.calcdata,l=e.xaxis,c=e.yaxis,u=[],h=[],f=[];for(a=0;a<o.length;a++){var p=o[a],d="h"===p.orientation;!0===p.visible&&p.xaxis===l._id&&p.yaxis===c._id&&"funnel"===p.type&&(r=s[a],d?f.push(r):h.push(r),u.push(r))}var g={mode:i.funnelmode,norm:i.funnelnorm,gap:i.funnelgap,groupgap:i.funnelgroupgap};for(n(t,l,c,h,g),n(t,c,l,f,g),a=0;a<u.length;a++){r=u[a];for(var v=0;v<r.length;v++)v+1<r.length&&(r[v].nextP0=r[v+1].p0,r[v].nextS0=r[v+1].s0,r[v].nextP1=r[v+1].p1,r[v].nextS1=r[v+1].s1)}}},{"../bar/cross_trace_calc":859}],983:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../bar/defaults").handleGroupingDefaults,i=t("../bar/defaults").handleText,o=t("../scatter/xy_defaults"),s=t("./attributes"),l=t("../../components/color");e.exports={supplyDefaults:function(t,e,r,a){function c(r,a){return n.coerce(t,e,s,r,a)}if(o(t,e,a,c)){c("orientation",e.y&&!e.x?"v":"h"),c("offset"),c("width");var u=c("text");c("hovertext"),c("hovertemplate");var h=c("textposition");i(t,e,a,c,h,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),"none"===e.textposition||e.texttemplate||c("textinfo",Array.isArray(u)?"text+value":"value");var f=c("marker.color",r);c("marker.line.color",l.defaultLine),c("marker.line.width"),c("connector.visible")&&(c("connector.fillcolor",function(t){var e=n.isArrayOrTypedArray(t)?"#000":t;return l.addOpacity(e,.5*l.opacity(e))}(f)),c("connector.line.width")&&(c("connector.line.color"),c("connector.line.dash")))}else e.visible=!1},crossTraceDefaults:function(t,e){var r,i;function o(t){return n.coerce(i._input,i,s,t)}if("group"===e.funnelmode)for(var l=0;l<t.length;l++)r=(i=t[l])._input,a(r,i,e,o)}}},{"../../components/color":591,"../../lib":717,"../bar/defaults":860,"../scatter/xy_defaults":1146,"./attributes":979}],984:[function(t,e,r){"use strict";e.exports=function(t,e){return t.x="xVal"in e?e.xVal:e.x,t.y="yVal"in e?e.yVal:e.y,"percentInitial"in e&&(t.percentInitial=e.percentInitial),"percentPrevious"in e&&(t.percentPrevious=e.percentPrevious),"percentTotal"in e&&(t.percentTotal=e.percentTotal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},{}],985:[function(t,e,r){"use strict";var n=t("../../components/color").opacity,a=t("../bar/hover").hoverOnBars,i=t("../../lib").formatPercent;e.exports=function(t,e,r,o){var s=a(t,e,r,o);if(s){var l=s.cd,c=l[0].trace,u="h"===c.orientation,h=l[s.index];s[(u?"x":"y")+"LabelVal"]=h.s,s.percentInitial=h.begR,s.percentInitialLabel=i(h.begR,1),s.percentPrevious=h.difR,s.percentPreviousLabel=i(h.difR,1),s.percentTotal=h.sumR,s.percentTotalLabel=i(h.sumR,1);var f=h.hi||c.hoverinfo,p=[];if(f&&"none"!==f&&"skip"!==f){var d="all"===f,g=f.split("+"),v=function(t){return d||-1!==g.indexOf(t)};v("percent initial")&&p.push(s.percentInitialLabel+" of initial"),v("percent previous")&&p.push(s.percentPreviousLabel+" of previous"),v("percent total")&&p.push(s.percentTotalLabel+" of total")}return s.extraText=p.join("<br>"),s.color=function(t,e){var r=t.marker,a=e.mc||r.color,i=e.mlc||r.line.color,o=e.mlw||r.line.width;if(n(a))return a;if(n(i)&&o)return i}(c,h),[s]}}},{"../../components/color":591,"../../lib":717,"../bar/hover":863}],986:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults").supplyDefaults,crossTraceDefaults:t("./defaults").crossTraceDefaults,supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc"),crossTraceCalc:t("./cross_trace_calc"),plot:t("./plot"),style:t("./style").style,hoverPoints:t("./hover"),eventData:t("./event_data"),selectPoints:t("../bar/select"),moduleType:"trace",name:"funnel",basePlotModule:t("../../plots/cartesian"),categories:["bar-like","cartesian","svg","oriented","showLegend","zoomScale"],meta:{}}},{"../../plots/cartesian":776,"../bar/select":868,"./attributes":979,"./calc":980,"./cross_trace_calc":982,"./defaults":983,"./event_data":984,"./hover":985,"./layout_attributes":987,"./layout_defaults":988,"./plot":989,"./style":990}],987:[function(t,e,r){"use strict";e.exports={funnelmode:{valType:"enumerated",values:["stack","group","overlay"],dflt:"stack",editType:"calc"},funnelgap:{valType:"number",min:0,max:1,editType:"calc"},funnelgroupgap:{valType:"number",min:0,max:1,dflt:0,editType:"calc"}}},{}],988:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e,r){var i=!1;function o(r,i){return n.coerce(t,e,a,r,i)}for(var s=0;s<r.length;s++){var l=r[s];if(l.visible&&"funnel"===l.type){i=!0;break}}i&&(o("funnelmode"),o("funnelgap",.2),o("funnelgroupgap"))}},{"../../lib":717,"./layout_attributes":987}],989:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../components/drawing"),o=t("../../constants/numerical").BADNUM,s=t("../bar/plot"),l=t("../bar/uniform_text").clearMinTextSize;function c(t,e,r,n){var a=[],i=[],o=n?e:r,s=n?r:e;return a[0]=o.c2p(t.s0,!0),i[0]=s.c2p(t.p0,!0),a[1]=o.c2p(t.s1,!0),i[1]=s.c2p(t.p1,!0),a[2]=o.c2p(t.nextS0,!0),i[2]=s.c2p(t.nextP0,!0),a[3]=o.c2p(t.nextS1,!0),i[3]=s.c2p(t.nextP1,!0),n?[a,i]:[i,a]}e.exports=function(t,e,r,u){var h=t._fullLayout;l("funnel",h),function(t,e,r,s){var l=e.xaxis,u=e.yaxis;a.makeTraceGroups(s,r,"trace bars").each(function(r){var s=n.select(this),h=r[0].trace,f=a.ensureSingle(s,"g","regions");if(h.connector&&h.connector.visible){var p="h"===h.orientation,d=f.selectAll("g.region").data(a.identity);d.enter().append("g").classed("region",!0),d.exit().remove();var g=d.size();d.each(function(r,s){if(s===g-1||r.cNext){var h=c(r,l,u,p),f=h[0],d=h[1],v="";f[0]!==o&&d[0]!==o&&f[1]!==o&&d[1]!==o&&f[2]!==o&&d[2]!==o&&f[3]!==o&&d[3]!==o&&(v+=p?"M"+f[0]+","+d[1]+"L"+f[2]+","+d[2]+"H"+f[3]+"L"+f[1]+","+d[1]+"Z":"M"+f[1]+","+d[1]+"L"+f[2]+","+d[3]+"V"+d[2]+"L"+f[1]+","+d[0]+"Z"),""===v&&(v="M0,0Z"),a.ensureSingle(n.select(this),"path").attr("d",v).call(i.setClipUrl,e.layerClipId,t)}})}else f.remove()})}(t,e,r,u),function(t,e,r,o){var s=e.xaxis,l=e.yaxis;a.makeTraceGroups(o,r,"trace bars").each(function(r){var o=n.select(this),u=r[0].trace,h=a.ensureSingle(o,"g","lines");if(u.connector&&u.connector.visible&&u.connector.line.width){var f="h"===u.orientation,p=h.selectAll("g.line").data(a.identity);p.enter().append("g").classed("line",!0),p.exit().remove();var d=p.size();p.each(function(r,o){if(o===d-1||r.cNext){var u=c(r,s,l,f),h=u[0],p=u[1],g="";void 0!==h[3]&&void 0!==p[3]&&(f?(g+="M"+h[0]+","+p[1]+"L"+h[2]+","+p[2],g+="M"+h[1]+","+p[1]+"L"+h[3]+","+p[2]):(g+="M"+h[1]+","+p[1]+"L"+h[2]+","+p[3],g+="M"+h[1]+","+p[0]+"L"+h[2]+","+p[2])),""===g&&(g="M0,0Z"),a.ensureSingle(n.select(this),"path").attr("d",g).call(i.setClipUrl,e.layerClipId,t)}})}else h.remove()})}(t,e,r,u),s.plot(t,e,r,u,{mode:h.funnelmode,norm:h.funnelmode,gap:h.funnelgap,groupgap:h.funnelgroupgap})}},{"../../components/drawing":612,"../../constants/numerical":693,"../../lib":717,"../bar/plot":867,"../bar/uniform_text":872,d3:165}],990:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/drawing"),i=t("../../components/color"),o=t("../../constants/interactions").DESELECTDIM,s=t("../bar/style"),l=t("../bar/uniform_text").resizeText,c=s.styleTextPoints;e.exports={style:function(t,e,r){var s=r||n.select(t).selectAll("g.funnellayer").selectAll("g.trace");l(t,s,"funnel"),s.style("opacity",function(t){return t[0].trace.opacity}),s.each(function(e){var r=n.select(this),s=e[0].trace;r.selectAll(".point > path").each(function(t){if(!t.isBlank){var e=s.marker;n.select(this).call(i.fill,t.mc||e.color).call(i.stroke,t.mlc||e.line.color).call(a.dashLine,e.line.dash,t.mlw||e.line.width).style("opacity",s.selectedpoints&&!t.selected?o:1)}}),c(r,s,t),r.selectAll(".regions").each(function(){n.select(this).selectAll("path").style("stroke-width",0).call(i.fill,s.connector.fillcolor)}),r.selectAll(".lines").each(function(){var t=s.connector.line;a.lineGroupStyle(n.select(this).selectAll("path"),t.width,t.color,t.dash)})})}}},{"../../components/color":591,"../../components/drawing":612,"../../constants/interactions":692,"../bar/style":870,"../bar/uniform_text":872,d3:165}],991:[function(t,e,r){"use strict";var n=t("../pie/attributes"),a=t("../../plots/attributes"),i=t("../../plots/domain").attributes,o=t("../../plots/template_attributes").hovertemplateAttrs,s=t("../../plots/template_attributes").texttemplateAttrs,l=t("../../lib/extend").extendFlat;e.exports={labels:n.labels,label0:n.label0,dlabel:n.dlabel,values:n.values,marker:{colors:n.marker.colors,line:{color:l({},n.marker.line.color,{dflt:null}),width:l({},n.marker.line.width,{dflt:1}),editType:"calc"},editType:"calc"},text:n.text,hovertext:n.hovertext,scalegroup:l({},n.scalegroup,{}),textinfo:l({},n.textinfo,{flags:["label","text","value","percent"]}),texttemplate:s({editType:"plot"},{keys:["label","color","value","text","percent"]}),hoverinfo:l({},a.hoverinfo,{flags:["label","text","value","percent","name"]}),hovertemplate:o({},{keys:["label","color","value","text","percent"]}),textposition:l({},n.textposition,{values:["inside","none"],dflt:"inside"}),textfont:n.textfont,insidetextfont:n.insidetextfont,title:{text:n.title.text,font:n.title.font,position:l({},n.title.position,{values:["top left","top center","top right"],dflt:"top center"}),editType:"plot"},domain:i({name:"funnelarea",trace:!0,editType:"calc"}),aspectratio:{valType:"number",min:0,dflt:1,editType:"plot"},baseratio:{valType:"number",min:0,max:1,dflt:.333,editType:"plot"}}},{"../../lib/extend":708,"../../plots/attributes":762,"../../plots/domain":790,"../../plots/template_attributes":841,"../pie/attributes":1094}],992:[function(t,e,r){"use strict";var n=t("../../plots/plots");r.name="funnelarea",r.plot=function(t,e,a,i){n.plotBasePlot(r.name,t,e,a,i)},r.clean=function(t,e,a,i){n.cleanBasePlot(r.name,t,e,a,i)}},{"../../plots/plots":826}],993:[function(t,e,r){"use strict";var n=t("../pie/calc");e.exports={calc:function(t,e){return n.calc(t,e)},crossTraceCalc:function(t){n.crossTraceCalc(t,{type:"funnelarea"})}}},{"../pie/calc":1096}],994:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("../../plots/domain").defaults,o=t("../bar/defaults").handleText,s=t("../pie/defaults").handleLabelsAndValues;e.exports=function(t,e,r,l){function c(r,i){return n.coerce(t,e,a,r,i)}var u=c("labels"),h=c("values"),f=s(u,h),p=f.len;if(e._hasLabels=f.hasLabels,e._hasValues=f.hasValues,!e._hasLabels&&e._hasValues&&(c("label0"),c("dlabel")),p){e._length=p,c("marker.line.width")&&c("marker.line.color",l.paper_bgcolor),c("marker.colors"),c("scalegroup");var d,g=c("text"),v=c("texttemplate");if(v||(d=c("textinfo",Array.isArray(g)?"text+percent":"percent")),c("hovertext"),c("hovertemplate"),v||d&&"none"!==d){var m=c("textposition");o(t,e,l,c,m,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1})}i(e,l,c),c("title.text")&&(c("title.position"),n.coerceFont(c,"title.font",l.font)),c("aspectratio"),c("baseratio")}else e.visible=!1}},{"../../lib":717,"../../plots/domain":790,"../bar/defaults":860,"../pie/defaults":1097,"./attributes":991}],995:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"funnelarea",basePlotModule:t("./base_plot"),categories:["pie-like","funnelarea","showLegend"],attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults"),supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc").calc,crossTraceCalc:t("./calc").crossTraceCalc,plot:t("./plot"),style:t("./style"),styleOne:t("../pie/style_one"),meta:{}}},{"../pie/style_one":1105,"./attributes":991,"./base_plot":992,"./calc":993,"./defaults":994,"./layout_attributes":996,"./layout_defaults":997,"./plot":998,"./style":999}],996:[function(t,e,r){"use strict";var n=t("../pie/layout_attributes").hiddenlabels;e.exports={hiddenlabels:n,funnelareacolorway:{valType:"colorlist",editType:"calc"},extendfunnelareacolors:{valType:"boolean",dflt:!0,editType:"calc"}}},{"../pie/layout_attributes":1101}],997:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e){function r(r,i){return n.coerce(t,e,a,r,i)}r("hiddenlabels"),r("funnelareacolorway",e.colorway),r("extendfunnelareacolors")}},{"../../lib":717,"./layout_attributes":996}],998:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/drawing"),i=t("../../lib"),o=t("../../lib/svg_text_utils"),s=t("../bar/plot").toMoveInsideBar,l=t("../bar/uniform_text"),c=l.recordMinTextSize,u=l.clearMinTextSize,h=t("../pie/helpers"),f=t("../pie/plot"),p=f.attachFxHandlers,d=f.determineInsideTextFont,g=f.layoutAreas,v=f.prerenderTitles,m=f.positionTitleOutside,y=f.formatSliceLabel;function x(t,e){return"l"+(e[0]-t[0])+","+(e[1]-t[1])}e.exports=function(t,e){var r=t._fullLayout;u("funnelarea",r),v(e,t),g(e,r._size),i.makeTraceGroups(r._funnelarealayer,e,"trace").each(function(e){var l=n.select(this),u=e[0],f=u.trace;!function(t){if(!t.length)return;var e=t[0],r=e.trace,n=r.aspectratio,a=r.baseratio;a>.999&&(a=.999);var i,o=Math.pow(a,2),s=e.vTotal,l=s,c=s*o/(1-o)/s;function u(){var t,e={x:t=Math.sqrt(c),y:-t};return[e.x,e.y]}var h,f,p=[];for(p.push(u()),h=t.length-1;h>-1;h--)if(!(f=t[h]).hidden){var d=f.v/l;c+=d,p.push(u())}var g=1/0,v=-1/0;for(h=0;h<p.length;h++)i=p[h],g=Math.min(g,i[1]),v=Math.max(v,i[1]);for(h=0;h<p.length;h++)p[h][1]-=(v+g)/2;var m=p[p.length-1][0],y=e.r,x=(v-g)/2,b=y/m,_=y/x*n;for(e.r=_*x,h=0;h<p.length;h++)p[h][0]*=b,p[h][1]*=_;var w=[-(i=p[0])[0],i[1]],k=[i[0],i[1]],T=0;for(h=t.length-1;h>-1;h--)if(!(f=t[h]).hidden){var M=p[T+=1][0],A=p[T][1];f.TL=[-M,A],f.TR=[M,A],f.BL=w,f.BR=k,f.pxmid=(S=f.TR,E=f.BR,[.5*(S[0]+E[0]),.5*(S[1]+E[1])]),w=f.TL,k=f.TR}var S,E}(e),l.each(function(){var l=n.select(this).selectAll("g.slice").data(e);l.enter().append("g").classed("slice",!0),l.exit().remove(),l.each(function(l,g){if(l.hidden)n.select(this).selectAll("path,g").remove();else{l.pointNumber=l.i,l.curveNumber=f.index;var v=u.cx,m=u.cy,b=n.select(this),_=b.selectAll("path.surface").data([l]);_.enter().append("path").classed("surface",!0).style({"pointer-events":"all"}),b.call(p,t,e);var w="M"+(v+l.TR[0])+","+(m+l.TR[1])+x(l.TR,l.BR)+x(l.BR,l.BL)+x(l.BL,l.TL)+"Z";_.attr("d",w),y(t,l,u);var k=h.castOption(f.textposition,l.pts),T=b.selectAll("g.slicetext").data(l.text&&"none"!==k?[0]:[]);T.enter().append("g").classed("slicetext",!0),T.exit().remove(),T.each(function(){var u=i.ensureSingle(n.select(this),"text","",function(t){t.attr("data-notex",1)}),h=i.ensureUniformFontSize(t,d(f,l,r.font));u.text(l.text).attr({class:"slicetext",transform:"","text-anchor":"middle"}).call(a.font,h).call(o.convertToTspans,t);var p,y,x,b=a.bBox(u.node()),_=Math.min(l.BL[1],l.BR[1])+m,w=Math.max(l.TL[1],l.TR[1])+m;y=Math.max(l.TL[0],l.BL[0])+v,x=Math.min(l.TR[0],l.BR[0])+v,(p=s(y,x,_,w,b,{isHorizontal:!0,constrained:!0,angle:0,anchor:"middle"})).fontSize=h.size,c(f.type,p,r),e[g].transform=p,u.attr("transform",i.getTextTransform(p))})}});var g=n.select(this).selectAll("g.titletext").data(f.title.text?[0]:[]);g.enter().append("g").classed("titletext",!0),g.exit().remove(),g.each(function(){var e=i.ensureSingle(n.select(this),"text","",function(t){t.attr("data-notex",1)}),s=f.title.text;f._meta&&(s=i.templateString(s,f._meta)),e.text(s).attr({class:"titletext",transform:"","text-anchor":"middle"}).call(a.font,f.title.font).call(o.convertToTspans,t);var l=m(u,r._size);e.attr("transform","translate("+l.x+","+l.y+")"+(l.scale<1?"scale("+l.scale+")":"")+"translate("+l.tx+","+l.ty+")")})})})}},{"../../components/drawing":612,"../../lib":717,"../../lib/svg_text_utils":741,"../bar/plot":867,"../bar/uniform_text":872,"../pie/helpers":1099,"../pie/plot":1103,d3:165}],999:[function(t,e,r){"use strict";var n=t("d3"),a=t("../pie/style_one"),i=t("../bar/uniform_text").resizeText;e.exports=function(t){var e=t._fullLayout._funnelarealayer.selectAll(".trace");i(t,e,"funnelarea"),e.each(function(t){var e=t[0].trace,r=n.select(this);r.style({opacity:e.opacity}),r.selectAll("path.surface").each(function(t){n.select(this).call(a,t,e)})})}},{"../bar/uniform_text":872,"../pie/style_one":1105,d3:165}],1000:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),a=t("../../plots/attributes"),i=t("../../plots/template_attributes").hovertemplateAttrs,o=t("../../components/colorscale/attributes"),s=(t("../../constants/docs").FORMAT_LINK,t("../../lib/extend").extendFlat);e.exports=s({z:{valType:"data_array",editType:"calc"},x:s({},n.x,{impliedEdits:{xtype:"array"}}),x0:s({},n.x0,{impliedEdits:{xtype:"scaled"}}),dx:s({},n.dx,{impliedEdits:{xtype:"scaled"}}),y:s({},n.y,{impliedEdits:{ytype:"array"}}),y0:s({},n.y0,{impliedEdits:{ytype:"scaled"}}),dy:s({},n.dy,{impliedEdits:{ytype:"scaled"}}),text:{valType:"data_array",editType:"calc"},hovertext:{valType:"data_array",editType:"calc"},transpose:{valType:"boolean",dflt:!1,editType:"calc"},xtype:{valType:"enumerated",values:["array","scaled"],editType:"calc+clearAxisTypes"},ytype:{valType:"enumerated",values:["array","scaled"],editType:"calc+clearAxisTypes"},zsmooth:{valType:"enumerated",values:["fast","best",!1],dflt:!1,editType:"calc"},hoverongaps:{valType:"boolean",dflt:!0,editType:"none"},connectgaps:{valType:"boolean",editType:"calc"},xgap:{valType:"number",dflt:0,min:0,editType:"plot"},ygap:{valType:"number",dflt:0,min:0,editType:"plot"},zhoverformat:{valType:"string",dflt:"",editType:"none"},hovertemplate:i(),showlegend:s({},a.showlegend,{dflt:!1})},{transforms:void 0},o("",{cLetter:"z",autoColorDflt:!1}))},{"../../components/colorscale/attributes":598,"../../constants/docs":688,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../scatter/attributes":1120}],1001:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("../../plots/cartesian/axes"),o=t("../histogram2d/calc"),s=t("../../components/colorscale/calc"),l=t("./convert_column_xyz"),c=t("./clean_2d_array"),u=t("./interp2d"),h=t("./find_empties"),f=t("./make_bound_array");e.exports=function(t,e){var r,p,d,g,v,m,y,x,b,_=i.getFromId(t,e.xaxis||"x"),w=i.getFromId(t,e.yaxis||"y"),k=n.traceIs(e,"contour"),T=n.traceIs(e,"histogram"),M=n.traceIs(e,"gl2d"),A=k?"best":e.zsmooth;if(_._minDtick=0,w._minDtick=0,T)r=(b=o(t,e)).x,p=b.x0,d=b.dx,g=b.y,v=b.y0,m=b.dy,y=b.z;else{var S=e.z;a.isArray1D(S)?(l(e,_,w,"x","y",["z"]),r=e._x,g=e._y,S=e._z):(r=e._x=e.x?_.makeCalcdata(e,"x"):[],g=e._y=e.y?w.makeCalcdata(e,"y"):[]),p=e.x0,d=e.dx,v=e.y0,m=e.dy,y=c(S,e,_,w),(k||e.connectgaps)&&(e._emptypoints=h(y),u(y,e._emptypoints))}function E(t){A=e._input.zsmooth=e.zsmooth=!1,a.warn('cannot use zsmooth: "fast": '+t)}if("fast"===A)if("log"===_.type||"log"===w.type)E("log axis found");else if(!T){if(r.length){var L=(r[r.length-1]-r[0])/(r.length-1),C=Math.abs(L/100);for(x=0;x<r.length-1;x++)if(Math.abs(r[x+1]-r[x]-L)>C){E("x scale is not linear");break}}if(g.length&&"fast"===A){var P=(g[g.length-1]-g[0])/(g.length-1),O=Math.abs(P/100);for(x=0;x<g.length-1;x++)if(Math.abs(g[x+1]-g[x]-P)>O){E("y scale is not linear");break}}}var z=a.maxRowLength(y),I="scaled"===e.xtype?"":r,D=f(e,I,p,d,z,_),R="scaled"===e.ytype?"":g,F=f(e,R,v,m,y.length,w);M||(e._extremes[_._id]=i.findExtremes(_,D),e._extremes[w._id]=i.findExtremes(w,F));var B={x:D,y:F,z:y,text:e._text||e.text,hovertext:e._hovertext||e.hovertext};if(I&&I.length===D.length-1&&(B.xCenter=I),R&&R.length===F.length-1&&(B.yCenter=R),T&&(B.xRanges=b.xRanges,B.yRanges=b.yRanges,B.pts=b.pts),k||s(t,e,{vals:y,cLetter:"z"}),k&&e.contours&&"heatmap"===e.contours.coloring){var N={type:"contour"===e.type?"heatmap":"histogram2d",xcalendar:e.xcalendar,ycalendar:e.ycalendar};B.xfill=f(N,I,p,d,z,_),B.yfill=f(N,R,v,m,y.length,w)}return[B]}},{"../../components/colorscale/calc":599,"../../lib":717,"../../plots/cartesian/axes":765,"../../registry":846,"../histogram2d/calc":1032,"./clean_2d_array":1002,"./convert_column_xyz":1004,"./find_empties":1006,"./interp2d":1009,"./make_bound_array":1010}],1002:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../constants/numerical").BADNUM;e.exports=function(t,e,r,o){var s,l,c,u,h,f;function p(t){if(n(t))return+t}if(e&&e.transpose){for(s=0,h=0;h<t.length;h++)s=Math.max(s,t[h].length);if(0===s)return!1;c=function(t){return t.length},u=function(t,e,r){return(t[r]||[])[e]}}else s=t.length,c=function(t,e){return t[e].length},u=function(t,e,r){return(t[e]||[])[r]};var d=function(t,e,r){return e===i||r===i?i:u(t,e,r)};function g(t){if(e&&"carpet"!==e.type&&"contourcarpet"!==e.type&&t&&"category"===t.type&&e["_"+t._id.charAt(0)].length){var r=t._id.charAt(0),n={},o=e["_"+r+"CategoryMap"]||e[r];for(h=0;h<o.length;h++)n[o[h]]=h;return function(e){var r=n[t._categories[e]];return r+1?r:i}}return a.identity}var v=g(r),m=g(o);o&&"category"===o.type&&(s=o._categories.length);var y=new Array(s);for(h=0;h<s;h++)for(l=r&&"category"===r.type?r._categories.length:c(t,h),y[h]=new Array(l),f=0;f<l;f++)y[h][f]=p(d(t,m(h),v(f)));return y}},{"../../constants/numerical":693,"../../lib":717,"fast-isnumeric":228}],1003:[function(t,e,r){"use strict";e.exports={min:"zmin",max:"zmax"}},{}],1004:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../constants/numerical").BADNUM;e.exports=function(t,e,r,i,o,s){var l,c,u,h,f=t._length,p=e.makeCalcdata(t,i),d=r.makeCalcdata(t,o),g=t.text,v=void 0!==g&&n.isArray1D(g),m=t.hovertext,y=void 0!==m&&n.isArray1D(m),x=n.distinctVals(p),b=x.vals,_=n.distinctVals(d),w=_.vals,k=[];for(l=0;l<s.length;l++)k[l]=n.init2dArray(w.length,b.length);v&&(u=n.init2dArray(w.length,b.length)),y&&(h=n.init2dArray(w.length,b.length));var T=n.init2dArray(w.length,b.length);for(l=0;l<f;l++)if(p[l]!==a&&d[l]!==a){var M=n.findBin(p[l]+x.minDiff/2,b),A=n.findBin(d[l]+_.minDiff/2,w);for(c=0;c<s.length;c++){var S=t[s[c]];k[c][A][M]=S[l],T[A][M]=l}v&&(u[A][M]=g[l]),y&&(h[A][M]=m[l])}for(t["_"+i]=b,t["_"+o]=w,c=0;c<s.length;c++)t["_"+s[c]]=k[c];v&&(t._text=u),y&&(t._hovertext=h),e&&"category"===e.type&&(t["_"+i+"CategoryMap"]=b.map(function(t){return e._categories[t]})),r&&"category"===r.type&&(t["_"+o+"CategoryMap"]=w.map(function(t){return r._categories[t]})),t._after2before=T}},{"../../constants/numerical":693,"../../lib":717}],1005:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./xyz_defaults"),i=t("./style_defaults"),o=t("../../components/colorscale/defaults"),s=t("./attributes");e.exports=function(t,e,r,l){function c(r,a){return n.coerce(t,e,s,r,a)}a(t,e,c,l)?(c("text"),c("hovertext"),c("hovertemplate"),i(t,e,c,l),c("hoverongaps"),c("connectgaps",n.isArray1D(e.z)&&!1!==e.zsmooth),o(t,e,l,c,{prefix:"",cLetter:"z"})):e.visible=!1}},{"../../components/colorscale/defaults":601,"../../lib":717,"./attributes":1e3,"./style_defaults":1013,"./xyz_defaults":1014}],1006:[function(t,e,r){"use strict";var n=t("../../lib").maxRowLength;e.exports=function(t){var e,r,a,i,o,s,l,c,u=[],h={},f=[],p=t[0],d=[],g=[0,0,0],v=n(t);for(r=0;r<t.length;r++)for(e=d,d=p,p=t[r+1]||[],a=0;a<v;a++)void 0===d[a]&&((s=(void 0!==d[a-1]?1:0)+(void 0!==d[a+1]?1:0)+(void 0!==e[a]?1:0)+(void 0!==p[a]?1:0))?(0===r&&s++,0===a&&s++,r===t.length-1&&s++,a===d.length-1&&s++,s<4&&(h[[r,a]]=[r,a,s]),u.push([r,a,s])):f.push([r,a]));for(;f.length;){for(l={},c=!1,o=f.length-1;o>=0;o--)(s=((h[[(r=(i=f[o])[0])-1,a=i[1]]]||g)[2]+(h[[r+1,a]]||g)[2]+(h[[r,a-1]]||g)[2]+(h[[r,a+1]]||g)[2])/20)&&(l[i]=[r,a,s],f.splice(o,1),c=!0);if(!c)throw"findEmpties iterated with no new neighbors";for(i in l)h[i]=l[i],u.push(l[i])}return u.sort(function(t,e){return e[2]-t[2]})}},{"../../lib":717}],1007:[function(t,e,r){"use strict";var n=t("../../components/fx"),a=t("../../lib"),i=t("../../plots/cartesian/axes"),o=t("../../components/colorscale").extractOpts;e.exports=function(t,e,r,s,l,c){var u,h,f,p,d=t.cd[0],g=d.trace,v=t.xa,m=t.ya,y=d.x,x=d.y,b=d.z,_=d.xCenter,w=d.yCenter,k=d.zmask,T=g.zhoverformat,M=y,A=x;if(!1!==t.index){try{f=Math.round(t.index[1]),p=Math.round(t.index[0])}catch(e){return void a.error("Error hovering on heatmap, pointNumber must be [row,col], found:",t.index)}if(f<0||f>=b[0].length||p<0||p>b.length)return}else{if(n.inbox(e-y[0],e-y[y.length-1],0)>0||n.inbox(r-x[0],r-x[x.length-1],0)>0)return;if(c){var S;for(M=[2*y[0]-y[1]],S=1;S<y.length;S++)M.push((y[S]+y[S-1])/2);for(M.push([2*y[y.length-1]-y[y.length-2]]),A=[2*x[0]-x[1]],S=1;S<x.length;S++)A.push((x[S]+x[S-1])/2);A.push([2*x[x.length-1]-x[x.length-2]])}f=Math.max(0,Math.min(M.length-2,a.findBin(e,M))),p=Math.max(0,Math.min(A.length-2,a.findBin(r,A)))}var E=v.c2p(y[f]),L=v.c2p(y[f+1]),C=m.c2p(x[p]),P=m.c2p(x[p+1]);c?(L=E,u=y[f],P=C,h=x[p]):(u=_?_[f]:(y[f]+y[f+1])/2,h=w?w[p]:(x[p]+x[p+1])/2,v&&"category"===v.type&&(u=y[f]),m&&"category"===m.type&&(h=x[p]),g.zsmooth&&(E=L=v.c2p(u),C=P=m.c2p(h)));var O=b[p][f];if(k&&!k[p][f]&&(O=void 0),void 0!==O||g.hoverongaps){var z;Array.isArray(d.hovertext)&&Array.isArray(d.hovertext[p])?z=d.hovertext[p][f]:Array.isArray(d.text)&&Array.isArray(d.text[p])&&(z=d.text[p][f]);var I=o(g),D={type:"linear",range:[I.min,I.max],hoverformat:T,_separators:v._separators,_numFormat:v._numFormat},R=i.tickText(D,O,"hover").text;return[a.extendFlat(t,{index:g._after2before?g._after2before[p][f]:[p,f],distance:t.maxHoverDistance,spikeDistance:t.maxSpikeDistance,x0:E,x1:L,y0:C,y1:P,xLabelVal:u,yLabelVal:h,zLabelVal:O,zLabel:R,text:z})]}}},{"../../components/colorscale":603,"../../components/fx":630,"../../lib":717,"../../plots/cartesian/axes":765}],1008:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc"),plot:t("./plot"),colorbar:t("./colorbar"),style:t("./style"),hoverPoints:t("./hover"),moduleType:"trace",name:"heatmap",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","2dMap","showLegend"],meta:{}}},{"../../plots/cartesian":776,"./attributes":1e3,"./calc":1001,"./colorbar":1003,"./defaults":1005,"./hover":1007,"./plot":1011,"./style":1012}],1009:[function(t,e,r){"use strict";var n=t("../../lib"),a=[[-1,0],[1,0],[0,-1],[0,1]];function i(t){return.5-.25*Math.min(1,.5*t)}function o(t,e,r){var n,i,o,s,l,c,u,h,f,p,d,g,v,m=0;for(s=0;s<e.length;s++){for(i=(n=e[s])[0],o=n[1],d=t[i][o],p=0,f=0,l=0;l<4;l++)(u=t[i+(c=a[l])[0]])&&void 0!==(h=u[o+c[1]])&&(0===p?g=v=h:(g=Math.min(g,h),v=Math.max(v,h)),f++,p+=h);if(0===f)throw"iterateInterp2d order is wrong: no defined neighbors";t[i][o]=p/f,void 0===d?f<4&&(m=1):(t[i][o]=(1+r)*t[i][o]-r*d,v>g&&(m=Math.max(m,Math.abs(t[i][o]-d)/(v-g))))}return m}e.exports=function(t,e){var r,a=1;for(o(t,e),r=0;r<e.length&&!(e[r][2]<4);r++);for(e=e.slice(r),r=0;r<100&&a>.01;r++)a=o(t,e,i(a));return a>.01&&n.log("interp2d didn't converge quickly",a),t}},{"../../lib":717}],1010:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib").isArrayOrTypedArray;e.exports=function(t,e,r,i,o,s){var l,c,u,h=[],f=n.traceIs(t,"contour"),p=n.traceIs(t,"histogram"),d=n.traceIs(t,"gl2d");if(a(e)&&e.length>1&&!p&&"category"!==s.type){var g=e.length;if(!(g<=o))return f?e.slice(0,o):e.slice(0,o+1);if(f||d)h=e.slice(0,o);else if(1===o)h=[e[0]-.5,e[0]+.5];else{for(h=[1.5*e[0]-.5*e[1]],u=1;u<g;u++)h.push(.5*(e[u-1]+e[u]));h.push(1.5*e[g-1]-.5*e[g-2])}if(g<o){var v=h[h.length-1],m=v-h[h.length-2];for(u=g;u<o;u++)v+=m,h.push(v)}}else{var y=t[s._id.charAt(0)+"calendar"];if(p)l=s.r2c(r,0,y);else if(a(e)&&1===e.length)l=e[0];else if(void 0===r)l=0;else{l=("log"===s.type?s.d2c:s.r2c)(r,0,y)}for(c=i||1,u=f||d?0:-.5;u<o;u++)h.push(l+c*u)}return h}},{"../../lib":717,"../../registry":846}],1011:[function(t,e,r){"use strict";var n=t("d3"),a=t("tinycolor2"),i=t("../../registry"),o=t("../../lib"),s=t("../../components/colorscale").makeColorScaleFuncFromTrace,l=t("../../constants/xmlns_namespaces");function c(t,e){var r=e.length-2,n=o.constrain(o.findBin(t,e),0,r),a=e[n],i=e[n+1],s=o.constrain(n+(t-a)/(i-a)-.5,0,r),l=Math.round(s),c=Math.abs(s-l);return s&&s!==r&&c?{bin0:l,frac:c,bin1:Math.round(l+c/(s-l))}:{bin0:l,bin1:l,frac:0}}function u(t,e){var r=e.length-1,n=o.constrain(o.findBin(t,e),0,r),a=e[n],i=(t-a)/(e[n+1]-a)||0;return i<=0?{bin0:n,bin1:n,frac:0}:i<.5?{bin0:n,bin1:n+1,frac:i}:{bin0:n+1,bin1:n,frac:1-i}}function h(t,e,r){t[e]=r[0],t[e+1]=r[1],t[e+2]=r[2],t[e+3]=Math.round(255*r[3])}e.exports=function(t,e,r,f){var p=e.xaxis,d=e.yaxis;o.makeTraceGroups(f,r,"hm").each(function(e){var r,f,g,v,m,y,x=n.select(this),b=e[0],_=b.trace,w=b.z,k=b.x,T=b.y,M=b.xCenter,A=b.yCenter,S=i.traceIs(_,"contour"),E=S?"best":_.zsmooth,L=w.length,C=o.maxRowLength(w),P=!1,O=!1;for(y=0;void 0===r&&y<k.length-1;)r=p.c2p(k[y]),y++;for(y=k.length-1;void 0===f&&y>0;)f=p.c2p(k[y]),y--;for(f<r&&(g=f,f=r,r=g,P=!0),y=0;void 0===v&&y<T.length-1;)v=d.c2p(T[y]),y++;for(y=T.length-1;void 0===m&&y>0;)m=d.c2p(T[y]),y--;if(m<v&&(g=v,v=m,m=g,O=!0),S&&(M=k,A=T,k=b.xfill,T=b.yfill),"fast"!==E){var z="best"===E?0:.5;r=Math.max(-z*p._length,r),f=Math.min((1+z)*p._length,f),v=Math.max(-z*d._length,v),m=Math.min((1+z)*d._length,m)}var I=Math.round(f-r),D=Math.round(m-v);if(I<=0||D<=0){x.selectAll("image").data([]).exit().remove()}else{var R,F;"fast"===E?(R=C,F=L):(R=I,F=D);var B=document.createElement("canvas");B.width=R,B.height=F;var N,j,V=B.getContext("2d"),U=s(_,{noNumericCheck:!0,returnArray:!0});"fast"===E?(N=P?function(t){return C-1-t}:o.identity,j=O?function(t){return L-1-t}:o.identity):(N=function(t){return o.constrain(Math.round(p.c2p(k[t])-r),0,I)},j=function(t){return o.constrain(Math.round(d.c2p(T[t])-v),0,D)});var q,H,G,Y,W,X=j(0),Z=[X,X],J=P?0:1,K=O?0:1,Q=0,$=0,tt=0,et=0;if(E){var rt,nt=0;try{rt=new Uint8Array(I*D*4)}catch(t){rt=new Array(I*D*4)}if("best"===E){var at,it,ot,st=M||k,lt=A||T,ct=new Array(st.length),ut=new Array(lt.length),ht=new Array(I),ft=M?u:c,pt=A?u:c;for(y=0;y<st.length;y++)ct[y]=Math.round(p.c2p(st[y])-r);for(y=0;y<lt.length;y++)ut[y]=Math.round(d.c2p(lt[y])-v);for(y=0;y<I;y++)ht[y]=ft(y,ct);for(H=0;H<D;H++)for(it=w[(at=pt(H,ut)).bin0],ot=w[at.bin1],y=0;y<I;y++,nt+=4)h(rt,nt,W=Tt(it,ot,ht[y],at))}else for(H=0;H<L;H++)for(Y=w[H],Z=j(H),y=0;y<I;y++)W=kt(Y[y],1),h(rt,nt=4*(Z*I+N(y)),W);var dt=V.createImageData(I,D);try{dt.data.set(rt)}catch(t){var gt=dt.data,vt=gt.length;for(H=0;H<vt;H++)gt[H]=rt[H]}V.putImageData(dt,0,0)}else{var mt=_.xgap,yt=_.ygap,xt=Math.floor(mt/2),bt=Math.floor(yt/2);for(H=0;H<L;H++)if(Y=w[H],Z.reverse(),Z[K]=j(H+1),Z[0]!==Z[1]&&void 0!==Z[0]&&void 0!==Z[1])for(q=[G=N(0),G],y=0;y<C;y++)q.reverse(),q[J]=N(y+1),q[0]!==q[1]&&void 0!==q[0]&&void 0!==q[1]&&(W=kt(Y[y],(q[1]-q[0])*(Z[1]-Z[0])),V.fillStyle="rgba("+W.join(",")+")",V.fillRect(q[0]+xt,Z[0]+bt,q[1]-q[0]-mt,Z[1]-Z[0]-yt))}$=Math.round($/Q),tt=Math.round(tt/Q),et=Math.round(et/Q);var _t=a("rgb("+$+","+tt+","+et+")");t._hmpixcount=(t._hmpixcount||0)+Q,t._hmlumcount=(t._hmlumcount||0)+Q*_t.getLuminance();var wt=x.selectAll("image").data(e);wt.enter().append("svg:image").attr({xmlns:l.svg,preserveAspectRatio:"none"}),wt.attr({height:D,width:I,x:r,y:v,"xlink:href":B.toDataURL("image/png")})}function kt(t,e){if(void 0!==t){var r=U(t);return r[0]=Math.round(r[0]),r[1]=Math.round(r[1]),r[2]=Math.round(r[2]),Q+=e,$+=r[0]*e,tt+=r[1]*e,et+=r[2]*e,r}return[0,0,0,0]}function Tt(t,e,r,n){var a=t[r.bin0];if(void 0===a)return kt(void 0,1);var i,o=t[r.bin1],s=e[r.bin0],l=e[r.bin1],c=o-a||0,u=s-a||0;return i=void 0===o?void 0===l?0:void 0===s?2*(l-a):2*(2*l-s-a)/3:void 0===l?void 0===s?0:2*(2*a-o-s)/3:void 0===s?2*(2*l-o-a)/3:l+a-o-s,kt(a+r.frac*c+n.frac*(u+r.frac*i))}})}},{"../../components/colorscale":603,"../../constants/xmlns_namespaces":694,"../../lib":717,"../../registry":846,d3:165,tinycolor2:535}],1012:[function(t,e,r){"use strict";var n=t("d3");e.exports=function(t){n.select(t).selectAll(".hm image").style("opacity",function(t){return t.trace.opacity})}},{d3:165}],1013:[function(t,e,r){"use strict";e.exports=function(t,e,r){!1===r("zsmooth")&&(r("xgap"),r("ygap")),r("zhoverformat")}},{}],1014:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../registry");function o(t,e){var r=e(t);return"scaled"===(r?e(t+"type","array"):"scaled")&&(e(t+"0"),e("d"+t)),r}e.exports=function(t,e,r,s,l,c){var u,h,f=r("z");if(l=l||"x",c=c||"y",void 0===f||!f.length)return 0;if(a.isArray1D(t.z)){u=r(l),h=r(c);var p=a.minRowLength(u),d=a.minRowLength(h);if(0===p||0===d)return 0;e._length=Math.min(p,d,f.length)}else{if(u=o(l,r),h=o(c,r),!function(t){for(var e,r=!0,i=!1,o=!1,s=0;s<t.length;s++){if(e=t[s],!a.isArrayOrTypedArray(e)){r=!1;break}e.length>0&&(i=!0);for(var l=0;l<e.length;l++)if(n(e[l])){o=!0;break}}return r&&i&&o}(f))return 0;r("transpose"),e._length=null}return i.getComponentMethod("calendars","handleTraceDefaults")(t,e,[l,c],s),!0}},{"../../lib":717,"../../registry":846,"fast-isnumeric":228}],1015:[function(t,e,r){"use strict";for(var n=t("../heatmap/attributes"),a=t("../../components/colorscale/attributes"),i=t("../../lib/extend").extendFlat,o=t("../../plot_api/edit_types").overrideAll,s=["z","x","x0","dx","y","y0","dy","text","transpose","xtype","ytype"],l={},c=0;c<s.length;c++){var u=s[c];l[u]=n[u]}i(l,a("",{cLetter:"z",autoColorDflt:!1})),e.exports=o(l,"calc","nested")},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plot_api/edit_types":748,"../heatmap/attributes":1e3}],1016:[function(t,e,r){"use strict";var n=t("gl-heatmap2d"),a=t("../../plots/cartesian/axes"),i=t("../../lib/str2rgbarray");function o(t,e){this.scene=t,this.uid=e,this.type="heatmapgl",this.name="",this.hoverinfo="all",this.xData=[],this.yData=[],this.zData=[],this.textLabels=[],this.idToIndex=[],this.bounds=[0,0,0,0],this.options={z:[],x:[],y:[],shape:[0,0],colorLevels:[0],colorValues:[0,0,0,1]},this.heatmap=n(t.glplot,this.options),this.heatmap._trace=this}var s=o.prototype;s.handlePick=function(t){var e=this.options,r=e.shape,n=t.pointId,a=n%r[0],i=Math.floor(n/r[0]),o=n;return{trace:this,dataCoord:t.dataCoord,traceCoord:[e.x[a],e.y[i],e.z[o]],textLabel:this.textLabels[n],name:this.name,pointIndex:[i,a],hoverinfo:this.hoverinfo}},s.update=function(t,e){var r=e[0];this.index=t.index,this.name=t.name,this.hoverinfo=t.hoverinfo;var n=r.z;this.options.z=[].concat.apply([],n);var o=n[0].length,s=n.length;this.options.shape=[o,s],this.options.x=r.x,this.options.y=r.y;var l=function(t){for(var e=t.colorscale,r=t.zmin,n=t.zmax,a=e.length,o=new Array(a),s=new Array(4*a),l=0;l<a;l++){var c=e[l],u=i(c[1]);o[l]=r+c[0]*(n-r);for(var h=0;h<4;h++)s[4*l+h]=u[h]}return{colorLevels:o,colorValues:s}}(t);this.options.colorLevels=l.colorLevels,this.options.colorValues=l.colorValues,this.textLabels=[].concat.apply([],t.text),this.heatmap.update(this.options);var c=this.scene.xaxis,u=this.scene.yaxis;t._extremes[c._id]=a.findExtremes(c,r.x),t._extremes[u._id]=a.findExtremes(u,r.y)},s.dispose=function(){this.heatmap.dispose()},e.exports=function(t,e,r){var n=new o(t,e.uid);return n.update(e,r),n}},{"../../lib/str2rgbarray":740,"../../plots/cartesian/axes":765,"gl-heatmap2d":254}],1017:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("../heatmap/defaults"),colorbar:t("../heatmap/colorbar"),calc:t("../heatmap/calc"),plot:t("./convert"),moduleType:"trace",name:"heatmapgl",basePlotModule:t("../../plots/gl2d"),categories:["gl","gl2d","2dMap"],meta:{}}},{"../../plots/gl2d":803,"../heatmap/calc":1001,"../heatmap/colorbar":1003,"../heatmap/defaults":1005,"./attributes":1015,"./convert":1016}],1018:[function(t,e,r){"use strict";var n=t("../bar/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("./bin_attributes"),o=t("./constants"),s=t("../../lib/extend").extendFlat;e.exports={x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},text:s({},n.text,{}),hovertext:s({},n.hovertext,{}),orientation:n.orientation,histfunc:{valType:"enumerated",values:["count","sum","avg","min","max"],dflt:"count",editType:"calc"},histnorm:{valType:"enumerated",values:["","percent","probability","density","probability density"],dflt:"",editType:"calc"},cumulative:{enabled:{valType:"boolean",dflt:!1,editType:"calc"},direction:{valType:"enumerated",values:["increasing","decreasing"],dflt:"increasing",editType:"calc"},currentbin:{valType:"enumerated",values:["include","exclude","half"],dflt:"include",editType:"calc"},editType:"calc"},nbinsx:{valType:"integer",min:0,dflt:0,editType:"calc"},xbins:i("x",!0),nbinsy:{valType:"integer",min:0,dflt:0,editType:"calc"},ybins:i("y",!0),autobinx:{valType:"boolean",dflt:null,editType:"calc"},autobiny:{valType:"boolean",dflt:null,editType:"calc"},bingroup:{valType:"string",dflt:"",editType:"calc"},hovertemplate:a({},{keys:o.eventDataKeys}),marker:n.marker,offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:n.selected,unselected:n.unselected,_deprecated:{bardir:n._deprecated.bardir}}},{"../../lib/extend":708,"../../plots/template_attributes":841,"../bar/attributes":856,"./bin_attributes":1020,"./constants":1024}],1019:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r=t.length,n=0,a=0;a<r;a++)e[a]?(t[a]/=e[a],n+=t[a]):t[a]=null;return n}},{}],1020:[function(t,e,r){"use strict";e.exports=function(t,e){return{start:{valType:"any",editType:"calc"},end:{valType:"any",editType:"calc"},size:{valType:"any",editType:"calc"},editType:"calc"}}},{}],1021:[function(t,e,r){"use strict";var n=t("fast-isnumeric");e.exports={count:function(t,e,r){return r[t]++,1},sum:function(t,e,r,a){var i=a[e];return n(i)?(i=Number(i),r[t]+=i,i):0},avg:function(t,e,r,a,i){var o=a[e];return n(o)&&(o=Number(o),r[t]+=o,i[t]++),0},min:function(t,e,r,a){var i=a[e];if(n(i)){if(i=Number(i),!n(r[t]))return r[t]=i,i;if(r[t]>i){var o=i-r[t];return r[t]=i,o}}return 0},max:function(t,e,r,a){var i=a[e];if(n(i)){if(i=Number(i),!n(r[t]))return r[t]=i,i;if(r[t]<i){var o=i-r[t];return r[t]=i,o}}return 0}}},{"fast-isnumeric":228}],1022:[function(t,e,r){"use strict";var n=t("../../constants/numerical"),a=n.ONEAVGYEAR,i=n.ONEAVGMONTH,o=n.ONEDAY,s=n.ONEHOUR,l=n.ONEMIN,c=n.ONESEC,u=t("../../plots/cartesian/axes").tickIncrement;function h(t,e,r,n){if(t*e<=0)return 1/0;for(var a=Math.abs(e-t),i="date"===r.type,o=f(a,i),s=0;s<10;s++){var l=f(80*o,i);if(o===l)break;if(!p(l,t,e,i,r,n))break;o=l}return o}function f(t,e){return e&&t>c?t>o?t>1.1*a?a:t>1.1*i?i:o:t>s?s:t>l?l:c:Math.pow(10,Math.floor(Math.log(t)/Math.LN10))}function p(t,e,r,n,i,s){if(n&&t>o){var l=d(e,i,s),c=d(r,i,s),u=t===a?0:1;return l[u]!==c[u]}return Math.floor(r/t)-Math.floor(e/t)>.1}function d(t,e,r){var n=e.c2d(t,a,r).split("-");return""===n[0]&&(n.unshift(),n[0]="-"+n[0]),n}e.exports=function(t,e,r,n,i){var s,l,c=-1.1*e,f=-.1*e,p=t-f,d=r[0],g=r[1],v=Math.min(h(d+f,d+p,n,i),h(g+f,g+p,n,i)),m=Math.min(h(d+c,d+f,n,i),h(g+c,g+f,n,i));if(v>m&&m<Math.abs(g-d)/4e3?(s=v,l=!1):(s=Math.min(v,m),l=!0),"date"===n.type&&s>o){var y=s===a?1:6,x=s===a?"M12":"M1";return function(e,r){var o=n.c2d(e,a,i),s=o.indexOf("-",y);s>0&&(o=o.substr(0,s));var c=n.d2c(o,0,i);if(c<e){var h=u(c,x,!1,i);(c+h)/2<e+t&&(c=h)}return r&&l?u(c,x,!0,i):c}}return function(e,r){var n=s*Math.round(e/s);return n+s/10<e&&n+.9*s<e+t&&(n+=s),r&&l&&(n-=s),n}}},{"../../constants/numerical":693,"../../plots/cartesian/axes":765}],1023:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../registry"),o=t("../../plots/cartesian/axes"),s=t("../bar/arrays_to_calcdata"),l=t("./bin_functions"),c=t("./norm_functions"),u=t("./average"),h=t("./bin_label_vals");function f(t,e,r,s,l){var c,u,h,p,d,g,v,m=s+"bins",y=t._fullLayout,x=e["_"+s+"bingroup"],b=y._histogramBinOpts[x],_="overlay"===y.barmode,w=function(t){return r.r2c(t,0,p)},k=function(t){return r.c2r(t,0,p)},T="date"===r.type?function(t){return t||0===t?a.cleanDate(t,null,p):null}:function(t){return n(t)?Number(t):null};function M(t,e,r){e[t+"Found"]?(e[t]=T(e[t]),null===e[t]&&(e[t]=r[t])):(g[t]=e[t]=r[t],a.nestedProperty(u[0],m+"."+t).set(r[t]))}if(e["_"+s+"autoBinFinished"])delete e["_"+s+"autoBinFinished"];else{u=b.traces;var A=[],S=!0,E=!1,L=!1;for(c=0;c<u.length;c++)if((h=u[c]).visible){var C=b.dirs[c];d=h["_"+C+"pos0"]=r.makeCalcdata(h,C),A=a.concat(A,d),delete h["_"+s+"autoBinFinished"],!0===e.visible&&(S?S=!1:(delete h._autoBin,h["_"+s+"autoBinFinished"]=1),i.traceIs(h,"2dMap")&&(E=!0),"histogram2dcontour"===h.type&&(L=!0))}p=u[0][s+"calendar"];var P=o.autoBin(A,r,b.nbins,E,p,b.sizeFound&&b.size),O=u[0]._autoBin={};if(g=O[b.dirs[0]]={},L&&(b.size||(P.start=k(o.tickIncrement(w(P.start),P.size,!0,p))),void 0===b.end&&(P.end=k(o.tickIncrement(w(P.end),P.size,!1,p)))),_&&!i.traceIs(e,"2dMap")&&0===P._dataSpan&&"category"!==r.type&&"multicategory"!==r.type){if(l)return[P,d,!0];P=function(t,e,r,n,i){var o,s,l,c=t._fullLayout,u=function(t,e){for(var r=e.xaxis,n=e.yaxis,a=e.orientation,i=[],o=t._fullData,s=0;s<o.length;s++){var l=o[s];"histogram"===l.type&&!0===l.visible&&l.orientation===a&&l.xaxis===r&&l.yaxis===n&&i.push(l)}return i}(t,e),h=!1,p=1/0,d=[e];for(o=0;o<u.length;o++)if((s=u[o])===e)h=!0;else if(h){var g=f(t,s,r,n,!0),v=g[0],m=g[2];s["_"+n+"autoBinFinished"]=1,s["_"+n+"pos0"]=g[1],m?d.push(s):p=Math.min(p,v.size)}else l=c._histogramBinOpts[s["_"+n+"bingroup"]],p=Math.min(p,l.size||s[i].size);var y=new Array(d.length);for(o=0;o<d.length;o++)for(var x=d[o]["_"+n+"pos0"],b=0;b<x.length;b++)if(void 0!==x[b]){y[o]=x[b];break}isFinite(p)||(p=a.distinctVals(y).minDiff);for(o=0;o<d.length;o++){var _=(s=d[o])[n+"calendar"],w={start:r.c2r(y[o]-p/2,0,_),end:r.c2r(y[o]+p/2,0,_),size:p};s._input[i]=s[i]=w,(l=c._histogramBinOpts[s["_"+n+"bingroup"]])&&a.extendFlat(l,w)}return e[i]}(t,e,r,s,m)}(v=h.cumulative||{}).enabled&&"include"!==v.currentbin&&("decreasing"===v.direction?P.start=k(o.tickIncrement(w(P.start),P.size,!0,p)):P.end=k(o.tickIncrement(w(P.end),P.size,!1,p))),b.size=P.size,b.sizeFound||(g.size=P.size,a.nestedProperty(u[0],m+".size").set(P.size)),M("start",b,P),M("end",b,P)}d=e["_"+s+"pos0"],delete e["_"+s+"pos0"];var z=e._input[m]||{},I=a.extendFlat({},b),D=b.start,R=r.r2l(z.start),F=void 0!==R;if((b.startFound||F)&&R!==r.r2l(D)){var B=F?R:a.aggNums(Math.min,null,d),N={type:"category"===r.type||"multicategory"===r.type?"linear":r.type,r2l:r.r2l,dtick:b.size,tick0:D,calendar:p,range:[B,o.tickIncrement(B,b.size,!1,p)].map(r.l2r)},j=o.tickFirst(N);j>r.r2l(B)&&(j=o.tickIncrement(j,b.size,!0,p)),I.start=r.l2r(j),F||a.nestedProperty(e,m+".start").set(I.start)}var V=b.end,U=r.r2l(z.end),q=void 0!==U;if((b.endFound||q)&&U!==r.r2l(V)){var H=q?U:a.aggNums(Math.max,null,d);I.end=r.l2r(H),q||a.nestedProperty(e,m+".start").set(I.end)}var G="autobin"+s;return!1===e._input[G]&&(e._input[m]=a.extendFlat({},e[m]||{}),delete e._input[G],delete e[G]),[I,d]}e.exports={calc:function(t,e){var r,i,p,d,g=[],v=[],m=o.getFromId(t,"h"===e.orientation?e.yaxis:e.xaxis),y="h"===e.orientation?"y":"x",x={x:"y",y:"x"}[y],b=e[y+"calendar"],_=e.cumulative,w=f(t,e,m,y),k=w[0],T=w[1],M="string"==typeof k.size,A=[],S=M?A:k,E=[],L=[],C=[],P=0,O=e.histnorm,z=e.histfunc,I=-1!==O.indexOf("density");_.enabled&&I&&(O=O.replace(/ ?density$/,""),I=!1);var D,R="max"===z||"min"===z?null:0,F=l.count,B=c[O],N=!1,j=function(t){return m.r2c(t,0,b)};for(a.isArrayOrTypedArray(e[x])&&"count"!==z&&(D=e[x],N="avg"===z,F=l[z]),r=j(k.start),p=j(k.end)+(r-o.tickIncrement(r,k.size,!1,b))/1e6;r<p&&g.length<1e6&&(i=o.tickIncrement(r,k.size,!1,b),g.push((r+i)/2),v.push(R),C.push([]),A.push(r),I&&E.push(1/(i-r)),N&&L.push(0),!(i<=r));)r=i;A.push(r),M||"date"!==m.type||(S={start:j(S.start),end:j(S.end),size:S.size}),t._fullLayout._roundFnOpts||(t._fullLayout._roundFnOpts={});var V=e["_"+y+"bingroup"],U={leftGap:1/0,rightGap:1/0};V&&(t._fullLayout._roundFnOpts[V]||(t._fullLayout._roundFnOpts[V]=U),U=t._fullLayout._roundFnOpts[V]);var q,H=v.length,G=!0,Y=U.leftGap,W=U.rightGap,X={};for(r=0;r<T.length;r++){var Z=T[r];(d=a.findBin(Z,S))>=0&&d<H&&(P+=F(d,r,v,D,L),G&&C[d].length&&Z!==T[C[d][0]]&&(G=!1),C[d].push(r),X[r]=d,Y=Math.min(Y,Z-A[d]),W=Math.min(W,A[d+1]-Z))}U.leftGap=Y,U.rightGap=W,G||(q=function(e,r){return function(){var n=t._fullLayout._roundFnOpts[V];return h(n.leftGap,n.rightGap,A,m,b)(e,r)}}),N&&(P=u(v,L)),B&&B(v,P,E),_.enabled&&function(t,e,r){var n,a,i;function o(e){i=t[e],t[e]/=2}function s(e){a=t[e],t[e]=i+a/2,i+=a}if("half"===r)if("increasing"===e)for(o(0),n=1;n<t.length;n++)s(n);else for(o(t.length-1),n=t.length-2;n>=0;n--)s(n);else if("increasing"===e){for(n=1;n<t.length;n++)t[n]+=t[n-1];"exclude"===r&&(t.unshift(0),t.pop())}else{for(n=t.length-2;n>=0;n--)t[n]+=t[n+1];"exclude"===r&&(t.push(0),t.shift())}}(v,_.direction,_.currentbin);var J=Math.min(g.length,v.length),K=[],Q=0,$=J-1;for(r=0;r<J;r++)if(v[r]){Q=r;break}for(r=J-1;r>=Q;r--)if(v[r]){$=r;break}for(r=Q;r<=$;r++)if(n(g[r])&&n(v[r])){var tt={p:g[r],s:v[r],b:0};_.enabled||(tt.pts=C[r],G?tt.ph0=tt.ph1=C[r].length?T[C[r][0]]:g[r]:(e._computePh=!0,tt.ph0=q(A[r]),tt.ph1=q(A[r+1],!0))),K.push(tt)}return 1===K.length&&(K[0].width1=o.tickIncrement(K[0].p,k.size,!1,b)-K[0].p),s(K,e),a.isArrayOrTypedArray(e.selectedpoints)&&a.tagSelected(K,e,X),K},calcAllAutoBins:f}},{"../../lib":717,"../../plots/cartesian/axes":765,"../../registry":846,"../bar/arrays_to_calcdata":855,"./average":1019,"./bin_functions":1021,"./bin_label_vals":1022,"./norm_functions":1030,"fast-isnumeric":228}],1024:[function(t,e,r){"use strict";e.exports={eventDataKeys:["binNumber"]}},{}],1025:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axis_ids"),i=t("../../registry").traceIs,o=t("../bar/defaults").handleGroupingDefaults,s=n.nestedProperty,l=a.getAxisGroup,c=[{aStr:{x:"xbins.start",y:"ybins.start"},name:"start"},{aStr:{x:"xbins.end",y:"ybins.end"},name:"end"},{aStr:{x:"xbins.size",y:"ybins.size"},name:"size"},{aStr:{x:"nbinsx",y:"nbinsy"},name:"nbins"}],u=["x","y"];e.exports=function(t,e){var r,h,f,p,d,g,v,m=e._histogramBinOpts={},y=[],x={},b=[];function _(t,e){return n.coerce(r._input,r,r._module.attributes,t,e)}function w(t){return"v"===t.orientation?"x":"y"}function k(t,r,i){var o=t.uid+"__"+i;r||(r=o);var s=function(t,r){return a.getFromTrace({_fullLayout:e},t,r).type}(t,i),l=t[i+"calendar"]||"",c=m[r],u=!0;c&&(s===c.axType&&l===c.calendar?(u=!1,c.traces.push(t),c.dirs.push(i)):(r=o,s!==c.axType&&n.warn(["Attempted to group the bins of trace",t.index,"set on a","type:"+s,"axis","with bins on","type:"+c.axType,"axis."].join(" ")),l!==c.calendar&&n.warn(["Attempted to group the bins of trace",t.index,"set with a",l,"calendar","with bins",c.calendar?"on a "+c.calendar+" calendar":"w/o a set calendar"].join(" ")))),u&&(m[r]={traces:[t],dirs:[i],axType:s,calendar:t[i+"calendar"]||""}),t["_"+i+"bingroup"]=r}for(d=0;d<t.length;d++)r=t[d],i(r,"histogram")&&(y.push(r),delete r._xautoBinFinished,delete r._yautoBinFinished,i(r,"2dMap")||o(r._input,r,e,_));var T=e._alignmentOpts||{};for(d=0;d<y.length;d++){if(r=y[d],f="",!i(r,"2dMap")){if(p=w(r),"group"===e.barmode&&r.alignmentgroup){var M=r[p+"axis"],A=l(e,M)+r.orientation;(T[A]||{})[r.alignmentgroup]&&(f=A)}f||"overlay"===e.barmode||(f=l(e,r.xaxis)+l(e,r.yaxis)+w(r))}f?(x[f]||(x[f]=[]),x[f].push(r)):b.push(r)}for(f in x)if(1!==(h=x[f]).length){var S=!1;for(d=0;d<h.length;d++){r=h[d],S=_("bingroup");break}for(f=S||f,d=0;d<h.length;d++){var E=(r=h[d])._input.bingroup;E&&E!==f&&n.warn(["Trace",r.index,"must match","within bingroup",f+".","Ignoring its bingroup:",E,"setting."].join(" ")),r.bingroup=f,k(r,f,w(r))}}else b.push(h[0]);for(d=0;d<b.length;d++){r=b[d];var L=_("bingroup");if(i(r,"2dMap"))for(v=0;v<2;v++){var C=_((p=u[v])+"bingroup",L?L+"__"+p:null);k(r,C,p)}else k(r,L,w(r))}for(f in m){var P=m[f];for(h=P.traces,g=0;g<c.length;g++){var O,z,I=c[g],D=I.name;if("nbins"!==D||!P.sizeFound){for(d=0;d<h.length;d++){if(r=h[d],p=P.dirs[d],O=I.aStr[p],void 0!==s(r._input,O).get()){P[D]=_(O),P[D+"Found"]=!0;break}(z=(r._autoBin||{})[p]||{})[D]&&s(r,O).set(z[D])}if("start"===D||"end"===D)for(;d<h.length;d++)(r=h[d])["_"+p+"bingroup"]&&_(O,(z=(r._autoBin||{})[p]||{})[D]);"nbins"!==D||P.sizeFound||P.nbinsFound||(r=h[0],P[D]=_(O))}}}}},{"../../lib":717,"../../plots/cartesian/axis_ids":768,"../../registry":846,"../bar/defaults":860}],1026:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("../../components/color"),o=t("../bar/style_defaults"),s=t("./attributes");e.exports=function(t,e,r,l){function c(r,n){return a.coerce(t,e,s,r,n)}var u=c("x"),h=c("y");c("cumulative.enabled")&&(c("cumulative.direction"),c("cumulative.currentbin")),c("text"),c("hovertext"),c("hovertemplate");var f=c("orientation",h&&!u?"h":"v"),p="v"===f?"x":"y",d="v"===f?"y":"x",g=u&&h?Math.min(a.minRowLength(u)&&a.minRowLength(h)):a.minRowLength(e[p]||[]);if(g){e._length=g,n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y"],l),e[d]&&c("histfunc"),c("histnorm"),c("autobin"+p),o(t,e,c,r,l),a.coerceSelectionMarkerOpacity(e,c);var v=(e.marker.line||{}).color,m=n.getComponentMethod("errorbars","supplyDefaults");m(t,e,v||i.defaultLine,{axis:"y"}),m(t,e,v||i.defaultLine,{axis:"x",inherit:"y"})}else e.visible=!1}},{"../../components/color":591,"../../lib":717,"../../registry":846,"../bar/style_defaults":871,"./attributes":1018}],1027:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a){if(t.x="xVal"in e?e.xVal:e.x,t.y="yVal"in e?e.yVal:e.y,"zLabelVal"in e&&(t.z=e.zLabelVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),!(r.cumulative||{}).enabled){var i,o=Array.isArray(a)?n[0].pts[a[0]][a[1]]:n[a].pts;if(t.pointNumbers=o,t.binNumber=t.pointNumber,delete t.pointNumber,delete t.pointIndex,r._indexToPoints){i=[];for(var s=0;s<o.length;s++)i=i.concat(r._indexToPoints[o[s]])}else i=o;t.pointIndices=i}return t}},{}],1028:[function(t,e,r){"use strict";var n=t("../bar/hover").hoverPoints,a=t("../../plots/cartesian/axes").hoverLabelText;e.exports=function(t,e,r,i){var o=n(t,e,r,i);if(o){var s=(t=o[0]).cd[t.index],l=t.cd[0].trace;if(!l.cumulative.enabled){var c="h"===l.orientation?"y":"x";t[c+"Label"]=a(t[c+"a"],s.ph0,s.ph1)}return o}}},{"../../plots/cartesian/axes":765,"../bar/hover":863}],1029:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),layoutAttributes:t("../bar/layout_attributes"),supplyDefaults:t("./defaults"),crossTraceDefaults:t("./cross_trace_defaults"),supplyLayoutDefaults:t("../bar/layout_defaults"),calc:t("./calc").calc,crossTraceCalc:t("../bar/cross_trace_calc").crossTraceCalc,plot:t("../bar/plot").plot,layerName:"barlayer",style:t("../bar/style").style,styleOnSelect:t("../bar/style").styleOnSelect,colorbar:t("../scatter/marker_colorbar"),hoverPoints:t("./hover"),selectPoints:t("../bar/select"),eventData:t("./event_data"),moduleType:"trace",name:"histogram",basePlotModule:t("../../plots/cartesian"),categories:["bar-like","cartesian","svg","bar","histogram","oriented","errorBarsOK","showLegend"],meta:{}}},{"../../plots/cartesian":776,"../bar/cross_trace_calc":859,"../bar/layout_attributes":865,"../bar/layout_defaults":866,"../bar/plot":867,"../bar/select":868,"../bar/style":870,"../scatter/marker_colorbar":1138,"./attributes":1018,"./calc":1023,"./cross_trace_defaults":1025,"./defaults":1026,"./event_data":1027,"./hover":1028}],1030:[function(t,e,r){"use strict";e.exports={percent:function(t,e){for(var r=t.length,n=100/e,a=0;a<r;a++)t[a]*=n},probability:function(t,e){for(var r=t.length,n=0;n<r;n++)t[n]/=e},density:function(t,e,r,n){var a=t.length;n=n||1;for(var i=0;i<a;i++)t[i]*=r[i]*n},"probability density":function(t,e,r,n){var a=t.length;n&&(e/=n);for(var i=0;i<a;i++)t[i]*=r[i]/e}}},{}],1031:[function(t,e,r){"use strict";var n=t("../histogram/attributes"),a=t("../histogram/bin_attributes"),i=t("../heatmap/attributes"),o=t("../../plots/attributes"),s=t("../../plots/template_attributes").hovertemplateAttrs,l=t("../../components/colorscale/attributes"),c=t("../../lib/extend").extendFlat;e.exports=c({x:n.x,y:n.y,z:{valType:"data_array",editType:"calc"},marker:{color:{valType:"data_array",editType:"calc"},editType:"calc"},histnorm:n.histnorm,histfunc:n.histfunc,nbinsx:n.nbinsx,xbins:a("x"),nbinsy:n.nbinsy,ybins:a("y"),autobinx:n.autobinx,autobiny:n.autobiny,bingroup:c({},n.bingroup,{}),xbingroup:c({},n.bingroup,{}),ybingroup:c({},n.bingroup,{}),xgap:i.xgap,ygap:i.ygap,zsmooth:i.zsmooth,zhoverformat:i.zhoverformat,hovertemplate:s({},{keys:"z"}),showlegend:c({},o.showlegend,{dflt:!1})},l("",{cLetter:"z",autoColorDflt:!1}))},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../heatmap/attributes":1e3,"../histogram/attributes":1018,"../histogram/bin_attributes":1020}],1032:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../histogram/bin_functions"),o=t("../histogram/norm_functions"),s=t("../histogram/average"),l=t("../histogram/bin_label_vals"),c=t("../histogram/calc").calcAllAutoBins;function u(t,e,r,n){var a,i=new Array(t);if(n)for(a=0;a<t;a++)i[a]=1/(e[a+1]-e[a]);else{var o=1/r;for(a=0;a<t;a++)i[a]=o}return i}function h(t,e){return{start:t(e.start),end:t(e.end),size:e.size}}function f(t,e,r,n,a,i){var o,s=t.length-1,c=new Array(s),u=l(r,n,t,a,i);for(o=0;o<s;o++){var h=(e||[])[o];c[o]=void 0===h?[u(t[o]),u(t[o+1],!0)]:[h,h]}return c}e.exports=function(t,e){var r,l,p,d,g=a.getFromId(t,e.xaxis),v=a.getFromId(t,e.yaxis),m=e.xcalendar,y=e.ycalendar,x=function(t){return g.r2c(t,0,m)},b=function(t){return v.r2c(t,0,y)},_=c(t,e,g,"x"),w=_[0],k=_[1],T=c(t,e,v,"y"),M=T[0],A=T[1],S=e._length;k.length>S&&k.splice(S,k.length-S),A.length>S&&A.splice(S,A.length-S);var E=[],L=[],C=[],P="string"==typeof w.size,O="string"==typeof M.size,z=[],I=[],D=P?z:w,R=O?I:M,F=0,B=[],N=[],j=e.histnorm,V=e.histfunc,U=-1!==j.indexOf("density"),q="max"===V||"min"===V?null:0,H=i.count,G=o[j],Y=!1,W=[],X=[],Z="z"in e?e.z:"marker"in e&&Array.isArray(e.marker.color)?e.marker.color:"";Z&&"count"!==V&&(Y="avg"===V,H=i[V]);var J=w.size,K=x(w.start),Q=x(w.end)+(K-a.tickIncrement(K,J,!1,m))/1e6;for(r=K;r<Q;r=a.tickIncrement(r,J,!1,m))L.push(q),z.push(r),Y&&C.push(0);z.push(r);var $,tt=L.length,et=(r-K)/tt,rt=($=K+et/2,g.c2r($,0,m)),nt=M.size,at=b(M.start),it=b(M.end)+(at-a.tickIncrement(at,nt,!1,y))/1e6;for(r=at;r<it;r=a.tickIncrement(r,nt,!1,y)){E.push(L.slice()),I.push(r);var ot=new Array(tt);for(l=0;l<tt;l++)ot[l]=[];N.push(ot),Y&&B.push(C.slice())}I.push(r);var st=E.length,lt=(r-at)/st,ct=function(t){return v.c2r(t,0,y)}(at+lt/2);U&&(W=u(L.length,D,et,P),X=u(E.length,R,lt,O)),P||"date"!==g.type||(D=h(x,D)),O||"date"!==v.type||(R=h(b,R));var ut=!0,ht=!0,ft=new Array(tt),pt=new Array(st),dt=1/0,gt=1/0,vt=1/0,mt=1/0;for(r=0;r<S;r++){var yt=k[r],xt=A[r];p=n.findBin(yt,D),d=n.findBin(xt,R),p>=0&&p<tt&&d>=0&&d<st&&(F+=H(p,r,E[d],Z,B[d]),N[d][p].push(r),ut&&(void 0===ft[p]?ft[p]=yt:ft[p]!==yt&&(ut=!1)),ht&&(void 0===pt[d]?pt[d]=xt:pt[d]!==xt&&(ht=!1)),dt=Math.min(dt,yt-z[p]),gt=Math.min(gt,z[p+1]-yt),vt=Math.min(vt,xt-I[d]),mt=Math.min(mt,I[d+1]-xt))}if(Y)for(d=0;d<st;d++)F+=s(E[d],B[d]);if(G)for(d=0;d<st;d++)G(E[d],F,W,X[d]);return{x:k,xRanges:f(z,ut&&ft,dt,gt,g,m),x0:rt,dx:et,y:A,yRanges:f(I,ht&&pt,vt,mt,v,y),y0:ct,dy:lt,z:E,pts:N}}},{"../../lib":717,"../../plots/cartesian/axes":765,"../histogram/average":1019,"../histogram/bin_functions":1021,"../histogram/bin_label_vals":1022,"../histogram/calc":1023,"../histogram/norm_functions":1030}],1033:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./sample_defaults"),i=t("../heatmap/style_defaults"),o=t("../../components/colorscale/defaults"),s=t("./attributes");e.exports=function(t,e,r,l){function c(r,a){return n.coerce(t,e,s,r,a)}a(t,e,c,l),!1!==e.visible&&(i(t,e,c,l),o(t,e,l,c,{prefix:"",cLetter:"z"}),c("hovertemplate"))}},{"../../components/colorscale/defaults":601,"../../lib":717,"../heatmap/style_defaults":1013,"./attributes":1031,"./sample_defaults":1036}],1034:[function(t,e,r){"use strict";var n=t("../heatmap/hover"),a=t("../../plots/cartesian/axes").hoverLabelText;e.exports=function(t,e,r,i,o,s){var l=n(t,e,r,i,o,s);if(l){var c=(t=l[0]).index,u=c[0],h=c[1],f=t.cd[0],p=f.xRanges[h],d=f.yRanges[u];return t.xLabel=a(t.xa,p[0],p[1]),t.yLabel=a(t.ya,d[0],d[1]),l}}},{"../../plots/cartesian/axes":765,"../heatmap/hover":1007}],1035:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),crossTraceDefaults:t("../histogram/cross_trace_defaults"),calc:t("../heatmap/calc"),plot:t("../heatmap/plot"),layerName:"heatmaplayer",colorbar:t("../heatmap/colorbar"),style:t("../heatmap/style"),hoverPoints:t("./hover"),eventData:t("../histogram/event_data"),moduleType:"trace",name:"histogram2d",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","2dMap","histogram","showLegend"],meta:{}}},{"../../plots/cartesian":776,"../heatmap/calc":1001,"../heatmap/colorbar":1003,"../heatmap/plot":1011,"../heatmap/style":1012,"../histogram/cross_trace_defaults":1025,"../histogram/event_data":1027,"./attributes":1031,"./defaults":1033,"./hover":1034}],1036:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib");e.exports=function(t,e,r,i){var o=r("x"),s=r("y"),l=a.minRowLength(o),c=a.minRowLength(s);l&&c?(e._length=Math.min(l,c),n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y"],i),(r("z")||r("marker.color"))&&r("histfunc"),r("histnorm"),r("autobinx"),r("autobiny")):e.visible=!1}},{"../../lib":717,"../../registry":846}],1037:[function(t,e,r){"use strict";var n=t("../histogram2d/attributes"),a=t("../contour/attributes"),i=t("../../components/colorscale/attributes"),o=t("../../lib/extend").extendFlat;e.exports=o({x:n.x,y:n.y,z:n.z,marker:n.marker,histnorm:n.histnorm,histfunc:n.histfunc,nbinsx:n.nbinsx,xbins:n.xbins,nbinsy:n.nbinsy,ybins:n.ybins,autobinx:n.autobinx,autobiny:n.autobiny,bingroup:n.bingroup,xbingroup:n.xbingroup,ybingroup:n.ybingroup,autocontour:a.autocontour,ncontours:a.ncontours,contours:a.contours,line:{color:a.line.color,width:o({},a.line.width,{dflt:.5}),dash:a.line.dash,smoothing:a.line.smoothing,editType:"plot"},zhoverformat:n.zhoverformat,hovertemplate:n.hovertemplate},i("",{cLetter:"z",editTypeOverride:"calc"}))},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../contour/attributes":943,"../histogram2d/attributes":1031}],1038:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../histogram2d/sample_defaults"),i=t("../contour/contours_defaults"),o=t("../contour/style_defaults"),s=t("./attributes");e.exports=function(t,e,r,l){function c(r,a){return n.coerce(t,e,s,r,a)}a(t,e,c,l),!1!==e.visible&&(i(t,e,c,function(r){return n.coerce2(t,e,s,r)}),o(t,e,c,l),c("hovertemplate"))}},{"../../lib":717,"../contour/contours_defaults":950,"../contour/style_defaults":964,"../histogram2d/sample_defaults":1036,"./attributes":1037}],1039:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),crossTraceDefaults:t("../histogram/cross_trace_defaults"),calc:t("../contour/calc"),plot:t("../contour/plot").plot,layerName:"contourlayer",style:t("../contour/style"),colorbar:t("../contour/colorbar"),hoverPoints:t("../contour/hover"),moduleType:"trace",name:"histogram2dcontour",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","2dMap","contour","histogram","showLegend"],meta:{}}},{"../../plots/cartesian":776,"../contour/calc":944,"../contour/colorbar":946,"../contour/hover":956,"../contour/plot":961,"../contour/style":963,"../histogram/cross_trace_defaults":1025,"./attributes":1037,"./defaults":1038}],1040:[function(t,e,r){"use strict";for(var n=t("../../plots/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../../lib/extend").extendFlat,o=t("./constants").colormodel,s=["rgb","rgba","hsl","hsla"],l=[],c=[],u=0;u<s.length;u++)l.push("For the `"+s[u]+"` colormodel, it is ["+o[s[u]].min.join(", ")+"]."),c.push("For the `"+s[u]+"` colormodel, it is ["+o[s[u]].max.join(", ")+"].");e.exports=i({z:{valType:"data_array",editType:"calc"},colormodel:{valType:"enumerated",values:s,dflt:"rgb",editType:"calc"},zmin:{valType:"info_array",items:[{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"}],editType:"calc"},zmax:{valType:"info_array",items:[{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"},{valType:"number",editType:"calc"}],editType:"calc"},x0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes"},y0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes"},dx:{valType:"number",dflt:1,editType:"calc"},dy:{valType:"number",dflt:1,editType:"calc"},text:{valType:"data_array",editType:"plot"},hovertext:{valType:"data_array",editType:"plot"},hoverinfo:i({},n.hoverinfo,{flags:["x","y","z","color","name","text"],dflt:"x+y+z+text+name"}),hovertemplate:a({},{keys:["z","color","colormodel"]}),transforms:void 0})},{"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"./constants":1042}],1041:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./constants"),i=t("fast-isnumeric"),o=t("../../plots/cartesian/axes"),s=t("../../lib").maxRowLength;function l(t,e,r,a){return function(i){return n.constrain((i-t)*e,r,a)}}function c(t,e){return function(r){return n.constrain(r,t,e)}}e.exports=function(t,e){var r,n=o.getFromId(t,e.xaxis||"x"),u=o.getFromId(t,e.yaxis||"y"),h=n.d2c(e.x0)-e.dx/2,f=u.d2c(e.y0)-e.dy/2,p=e.z.length,d=s(e.z),g=[h,h+d*e.dx],v=[f,f+p*e.dy];if(n&&"log"===n.type)for(r=0;r<d;r++)g.push(h+r*e.dx);if(u&&"log"===u.type)for(r=0;r<p;r++)v.push(f+r*e.dy);return e._extremes[n._id]=o.findExtremes(n,g),e._extremes[u._id]=o.findExtremes(u,v),e._scaler=function(t){var e=t.colormodel,r=e.length,n=a.colormodel[e];t._sArray=[];for(var o=0;o<r;o++)n.min[o]!==t.zmin[o]||n.max[o]!==t.zmax[o]?t._sArray.push(l(t.zmin[o],(n.max[o]-n.min[o])/(t.zmax[o]-t.zmin[o]),n.min[o],n.max[o])):t._sArray.push(c(n.min[o],n.max[o]));return function(e){for(var n=e.slice(0,r),a=0;a<r;a++){var o=n[a];if(!i(o))return!1;n[a]=t._sArray[a](o)}return n}}(e),[{x0:h,y0:f,z:e.z,w:d,h:p}]}},{"../../lib":717,"../../plots/cartesian/axes":765,"./constants":1042,"fast-isnumeric":228}],1042:[function(t,e,r){"use strict";e.exports={colormodel:{rgb:{min:[0,0,0],max:[255,255,255],fmt:function(t){return t.slice(0,3)},suffix:["","",""]},rgba:{min:[0,0,0,0],max:[255,255,255,1],fmt:function(t){return t.slice(0,4)},suffix:["","","",""]},hsl:{min:[0,0,0],max:[360,100,100],fmt:function(t){var e=t.slice(0,3);return e[1]=e[1]+"%",e[2]=e[2]+"%",e},suffix:["\xb0","%","%"]},hsla:{min:[0,0,0,0],max:[360,100,100,1],fmt:function(t){var e=t.slice(0,4);return e[1]=e[1]+"%",e[2]=e[2]+"%",e},suffix:["\xb0","%","%",""]}}}},{}],1043:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("./constants");e.exports=function(t,e){function r(r,i){return n.coerce(t,e,a,r,i)}var o=r("z");if(void 0!==o&&o.length&&o[0]&&o[0].length){r("x0"),r("y0"),r("dx"),r("dy");var s=r("colormodel");r("zmin",i.colormodel[s].min),r("zmax",i.colormodel[s].max),r("text"),r("hovertext"),r("hovertemplate"),e._length=null}else e.visible=!1}},{"../../lib":717,"./attributes":1040,"./constants":1042}],1044:[function(t,e,r){"use strict";e.exports=function(t,e){return"xVal"in e&&(t.x=e.xVal),"yVal"in e&&(t.y=e.yVal),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t.color=e.color,t.colormodel=e.trace.colormodel,t}},{}],1045:[function(t,e,r){"use strict";var n=t("../../components/fx"),a=t("../../lib"),i=t("./constants");e.exports=function(t,e,r){var o=t.cd[0],s=o.trace,l=t.xa,c=t.ya;if(!(n.inbox(e-o.x0,e-(o.x0+o.w*s.dx),0)>0||n.inbox(r-o.y0,r-(o.y0+o.h*s.dy),0)>0)){var u=Math.floor((e-o.x0)/s.dx),h=Math.floor(Math.abs(r-o.y0)/s.dy);if(o.z[h][u]){var f,p=o.hi||s.hoverinfo;if(p){var d=p.split("+");-1!==d.indexOf("all")&&(d=["color"]),-1!==d.indexOf("color")&&(f=!0)}var g,v=s.colormodel,m=v.length,y=s._scaler(o.z[h][u]),x=i.colormodel[v].suffix,b=[];(s.hovertemplate||f)&&(b.push("["+[y[0]+x[0],y[1]+x[1],y[2]+x[2]].join(", ")),4===m&&b.push(", "+y[3]+x[3]),b.push("]"),b=b.join(""),t.extraText=v.toUpperCase()+": "+b),Array.isArray(s.hovertext)&&Array.isArray(s.hovertext[h])?g=s.hovertext[h][u]:Array.isArray(s.text)&&Array.isArray(s.text[h])&&(g=s.text[h][u]);var _=c.c2p(o.y0+(h+.5)*s.dy),w=o.x0+(u+.5)*s.dx,k=o.y0+(h+.5)*s.dy,T="["+o.z[h][u].slice(0,s.colormodel.length).join(", ")+"]";return[a.extendFlat(t,{index:[h,u],x0:l.c2p(o.x0+u*s.dx),x1:l.c2p(o.x0+(u+1)*s.dx),y0:_,y1:_,color:y,xVal:w,xLabelVal:w,yVal:k,yLabelVal:k,zLabelVal:T,text:g,hovertemplateLabels:{zLabel:T,colorLabel:b,"color[0]Label":y[0]+x[0],"color[1]Label":y[1]+x[1],"color[2]Label":y[2]+x[2],"color[3]Label":y[3]+x[3]}})]}}}},{"../../components/fx":630,"../../lib":717,"./constants":1042}],1046:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc"),plot:t("./plot"),style:t("./style"),hoverPoints:t("./hover"),eventData:t("./event_data"),moduleType:"trace",name:"image",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","2dMap","noSortingByValue"],animatable:!1,meta:{}}},{"../../plots/cartesian":776,"./attributes":1040,"./calc":1041,"./defaults":1043,"./event_data":1044,"./hover":1045,"./plot":1047,"./style":1048}],1047:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../constants/xmlns_namespaces"),o=t("./constants");e.exports=function(t,e,r,s){var l=e.xaxis,c=e.yaxis;a.makeTraceGroups(s,r,"im").each(function(t){var e,r,s,u,h,f,p=n.select(this),d=t[0],g=d.trace,v=d.z,m=d.x0,y=d.y0,x=d.w,b=d.h,_=g.dx,w=g.dy;for(f=0;void 0===e&&f<x;)e=l.c2p(m+f*_),f++;for(f=x;void 0===r&&f>0;)r=l.c2p(m+f*_),f--;for(f=0;void 0===u&&f<b;)u=c.c2p(y+f*w),f++;for(f=b;void 0===h&&f>0;)h=c.c2p(y+f*w),f--;r<e&&(s=r,r=e,e=s),h<u&&(s=u,u=h,h=s);e=Math.max(-.5*l._length,e),r=Math.min(1.5*l._length,r),u=Math.max(-.5*c._length,u),h=Math.min(1.5*c._length,h);var k=Math.round(r-e),T=Math.round(h-u);if(k<=0||T<=0){p.selectAll("image").data([]).exit().remove()}else{var M=document.createElement("canvas");M.width=k,M.height=T;var A,S=M.getContext("2d"),E=function(t){return a.constrain(Math.round(l.c2p(m+t*_)-e),0,k)},L=function(t){return a.constrain(Math.round(c.c2p(y+t*w)-u),0,T)},C=o.colormodel[g.colormodel].fmt;for(f=0;f<d.w;f++){var P=E(f),O=E(f+1);if(O!==P&&!isNaN(O)&&!isNaN(P))for(var z=0;z<d.h;z++){var I=L(z),D=L(z+1);D===I||isNaN(D)||isNaN(I)||!v[z][f]||(A=g._scaler(v[z][f]),S.fillStyle=A?g.colormodel+"("+C(A).join(",")+")":"rgba(0,0,0,0)",S.fillRect(P,I,O-P,D-I))}}var R=p.selectAll("image").data(t);R.enter().append("svg:image").attr({xmlns:i.svg,preserveAspectRatio:"none"}),R.attr({height:T,width:k,x:e,y:u,"xlink:href":M.toDataURL("image/png")})}})}},{"../../constants/xmlns_namespaces":694,"../../lib":717,"./constants":1042,d3:165}],1048:[function(t,e,r){"use strict";var n=t("d3");e.exports=function(t){n.select(t).selectAll(".im image").style("opacity",function(t){return t.trace.opacity})}},{d3:165}],1049:[function(t,e,r){"use strict";var n=t("../../lib/extend").extendFlat,a=t("../../lib/extend").extendDeep,i=t("../../plot_api/edit_types").overrideAll,o=t("../../plots/font_attributes"),s=t("../../components/color/attributes"),l=t("../../plots/domain").attributes,c=t("../../plots/cartesian/layout_attributes"),u=t("../../plot_api/plot_template").templatedArray,h=t("../../constants/delta.js"),f=(t("../../constants/docs").FORMAT_LINK,o({editType:"plot",colorEditType:"plot"})),p={color:{valType:"color",editType:"plot"},line:{color:{valType:"color",dflt:s.defaultLine,editType:"plot"},width:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"calc"},thickness:{valType:"number",min:0,max:1,dflt:1,editType:"plot"},editType:"calc"},d={valType:"info_array",items:[{valType:"number",editType:"plot"},{valType:"number",editType:"plot"}],editType:"plot"},g=u("step",a({},p,{range:d}));e.exports={mode:{valType:"flaglist",editType:"calc",flags:["number","delta","gauge"],dflt:"number"},value:{valType:"number",editType:"calc",anim:!0},align:{valType:"enumerated",values:["left","center","right"],editType:"plot"},domain:l({name:"indicator",trace:!0,editType:"calc"}),title:{text:{valType:"string",editType:"plot"},align:{valType:"enumerated",values:["left","center","right"],editType:"plot"},font:n({},f,{}),editType:"plot"},number:{valueformat:{valType:"string",dflt:"",editType:"plot"},font:n({},f,{}),prefix:{valType:"string",dflt:"",editType:"plot"},suffix:{valType:"string",dflt:"",editType:"plot"},editType:"plot"},delta:{reference:{valType:"number",editType:"calc"},position:{valType:"enumerated",values:["top","bottom","left","right"],dflt:"bottom",editType:"plot"},relative:{valType:"boolean",editType:"plot",dflt:!1},valueformat:{valType:"string",editType:"plot"},increasing:{symbol:{valType:"string",dflt:h.INCREASING.SYMBOL,editType:"plot"},color:{valType:"color",dflt:h.INCREASING.COLOR,editType:"plot"},editType:"plot"},decreasing:{symbol:{valType:"string",dflt:h.DECREASING.SYMBOL,editType:"plot"},color:{valType:"color",dflt:h.DECREASING.COLOR,editType:"plot"},editType:"plot"},font:n({},f,{}),editType:"calc"},gauge:{shape:{valType:"enumerated",editType:"plot",dflt:"angular",values:["angular","bullet"]},bar:a({},p,{color:{dflt:"green"}}),bgcolor:{valType:"color",editType:"plot"},bordercolor:{valType:"color",dflt:s.defaultLine,editType:"plot"},borderwidth:{valType:"number",min:0,dflt:1,editType:"plot"},axis:i({range:d,visible:n({},c.visible,{dflt:!0}),tickmode:c.tickmode,nticks:c.nticks,tick0:c.tick0,dtick:c.dtick,tickvals:c.tickvals,ticktext:c.ticktext,ticks:n({},c.ticks,{dflt:"outside"}),ticklen:c.ticklen,tickwidth:c.tickwidth,tickcolor:c.tickcolor,showticklabels:c.showticklabels,tickfont:o({}),tickangle:c.tickangle,tickformat:c.tickformat,tickformatstops:c.tickformatstops,tickprefix:c.tickprefix,showtickprefix:c.showtickprefix,ticksuffix:c.ticksuffix,showticksuffix:c.showticksuffix,separatethousands:c.separatethousands,exponentformat:c.exponentformat,showexponent:c.showexponent,editType:"plot"},"plot"),steps:g,threshold:{line:{color:n({},p.line.color,{}),width:n({},p.line.width,{dflt:1}),editType:"plot"},thickness:n({},p.thickness,{dflt:.85}),value:{valType:"number",editType:"calc",dflt:!1},editType:"plot"},editType:"plot"}}},{"../../components/color/attributes":590,"../../constants/delta.js":687,"../../constants/docs":688,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plot_api/plot_template":755,"../../plots/cartesian/layout_attributes":777,"../../plots/domain":790,"../../plots/font_attributes":791}],1050:[function(t,e,r){"use strict";var n=t("../../plots/plots");r.name="indicator",r.plot=function(t,e,a,i){n.plotBasePlot(r.name,t,e,a,i)},r.clean=function(t,e,a,i){n.cleanBasePlot(r.name,t,e,a,i)}},{"../../plots/plots":826}],1051:[function(t,e,r){"use strict";e.exports={calc:function(t,e){var r=[],n=e.value;"number"!=typeof e._lastValue&&(e._lastValue=e.value);var a=e._lastValue,i=a;return e._hasDelta&&"number"==typeof e.delta.reference&&(i=e.delta.reference),r[0]={y:n,lastY:a,delta:n-i,relativeDelta:(n-i)/i},r}}},{}],1052:[function(t,e,r){"use strict";e.exports={defaultNumberFontSize:80,bulletNumberDomainSize:.25,bulletPadding:.025,innerRadius:.75,valueThickness:.5,titlePadding:5,horizontalPadding:10}},{}],1053:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("../../plots/domain").defaults,o=t("../../plot_api/plot_template"),s=t("../../plots/array_container_defaults"),l=t("./constants.js"),c=t("../../plots/cartesian/tick_value_defaults"),u=t("../../plots/cartesian/tick_mark_defaults"),h=t("../../plots/cartesian/tick_label_defaults");function f(t,e){function r(r,i){return n.coerce(t,e,a.gauge.steps,r,i)}r("color"),r("line.color"),r("line.width"),r("range"),r("thickness")}e.exports={supplyDefaults:function(t,e,r,p){function d(r,i){return n.coerce(t,e,a,r,i)}i(e,p,d),d("mode"),e._hasNumber=-1!==e.mode.indexOf("number"),e._hasDelta=-1!==e.mode.indexOf("delta"),e._hasGauge=-1!==e.mode.indexOf("gauge");var g=d("value");e._range=[0,"number"==typeof g?1.5*g:1];var v,m,y,x,b,_,w=new Array(2);function k(t,e){return n.coerce(y,x,a.gauge,t,e)}function T(t,e){return n.coerce(b,_,a.gauge.axis,t,e)}if(e._hasNumber&&(d("number.valueformat"),d("number.font.color",p.font.color),d("number.font.family",p.font.family),d("number.font.size"),void 0===e.number.font.size&&(e.number.font.size=l.defaultNumberFontSize,w[0]=!0),d("number.prefix"),d("number.suffix"),v=e.number.font.size),e._hasDelta&&(d("delta.font.color",p.font.color),d("delta.font.family",p.font.family),d("delta.font.size"),void 0===e.delta.font.size&&(e.delta.font.size=(e._hasNumber?.5:1)*(v||l.defaultNumberFontSize),w[1]=!0),d("delta.reference",e.value),d("delta.relative"),d("delta.valueformat",e.delta.relative?"2%":""),d("delta.increasing.symbol"),d("delta.increasing.color"),d("delta.decreasing.symbol"),d("delta.decreasing.color"),d("delta.position"),m=e.delta.font.size),e._scaleNumbers=(!e._hasNumber||w[0])&&(!e._hasDelta||w[1])||!1,d("title.font.color",p.font.color),d("title.font.family",p.font.family),d("title.font.size",.25*(v||m||l.defaultNumberFontSize)),d("title.text"),e._hasGauge){(y=t.gauge)||(y={}),x=o.newContainer(e,"gauge"),k("shape"),(e._isBullet="bullet"===e.gauge.shape)||d("title.align","center"),(e._isAngular="angular"===e.gauge.shape)||d("align","center"),k("bgcolor",p.paper_bgcolor),k("borderwidth"),k("bordercolor"),k("bar.color"),k("bar.line.color"),k("bar.line.width"),k("bar.thickness",l.valueThickness*("bullet"===e.gauge.shape?.5:1)),s(y,x,{name:"steps",handleItemDefaults:f}),k("threshold.value"),k("threshold.thickness"),k("threshold.line.width"),k("threshold.line.color"),b={},y&&(b=y.axis||{}),_=o.newContainer(x,"axis"),T("visible"),e._range=T("range",e._range);var M={outerTicks:!0};c(b,_,T,"linear"),h(b,_,T,"linear",M),u(b,_,T,M)}else d("title.align","center"),d("align","center"),e._isAngular=e._isBullet=!1;e._length=null}}},{"../../lib":717,"../../plot_api/plot_template":755,"../../plots/array_container_defaults":761,"../../plots/cartesian/tick_label_defaults":784,"../../plots/cartesian/tick_mark_defaults":785,"../../plots/cartesian/tick_value_defaults":786,"../../plots/domain":790,"./attributes":1049,"./constants.js":1052}],1054:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"indicator",basePlotModule:t("./base_plot"),categories:["svg","noOpacity","noHover"],animatable:!0,attributes:t("./attributes"),supplyDefaults:t("./defaults").supplyDefaults,calc:t("./calc").calc,plot:t("./plot"),meta:{}}},{"./attributes":1049,"./base_plot":1050,"./calc":1051,"./defaults":1053,"./plot":1055}],1055:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=a.rad2deg,o=t("../../constants/alignment").MID_SHIFT,s=t("../../components/drawing"),l=t("./constants"),c=t("../../lib/svg_text_utils"),u=t("../../plots/cartesian/axes"),h=t("../../plots/cartesian/axis_defaults"),f=t("../../plots/cartesian/position_defaults"),p=t("../../plots/cartesian/layout_attributes"),d=t("../../components/color"),g={left:"start",center:"middle",right:"end"},v={left:0,center:.5,right:1},m=/[yzafpn\xb5mkMGTPEZY]/;function y(t){return t&&t.duration>0}function x(t){t.each(function(t){d.stroke(n.select(this),t.line.color)}).each(function(t){d.fill(n.select(this),t.color)}).style("stroke-width",function(t){return t.line.width})}function b(t,e,r){var n=t._fullLayout,i=a.extendFlat({type:"linear",ticks:"outside",range:r,showline:!0},e),o={type:"linear",_id:"x"+e._id},s={letter:"x",font:n.font,noHover:!0,noTickson:!0};function l(t,e){return a.coerce(i,o,p,t,e)}return h(i,o,l,s,n),f(i,o,l,s),o}function _(t,e){return"translate("+t+","+e+")"}function w(t,e,r){return[Math.min(e/t.width,r/t.height),t,e+"x"+r]}function k(t,e,r,a){var i=document.createElementNS("http://www.w3.org/2000/svg","text"),o=n.select(i);return o.text(t).attr("x",0).attr("y",0).attr("text-anchor",r).attr("data-unformatted",t).call(c.convertToTspans,a).call(s.font,e),s.bBox(o.node())}function T(t,e,r,n,i,o){var s="_cache"+e;t[s]&&t[s].key===i||(t[s]={key:i,value:r});var l=a.aggNums(o,null,[t[s].value,n],2);return t[s].value=l,l}e.exports=function(t,e,r,h){var f,p=t._fullLayout;y(r)&&h&&(f=h()),a.makeTraceGroups(p._indicatorlayer,e,"trace").each(function(e){var h,M,A,S,E,L=e[0].trace,C=n.select(this),P=L._hasGauge,O=L._isAngular,z=L._isBullet,I=L.domain,D={w:p._size.w*(I.x[1]-I.x[0]),h:p._size.h*(I.y[1]-I.y[0]),l:p._size.l+p._size.w*I.x[0],r:p._size.r+p._size.w*(1-I.x[1]),t:p._size.t+p._size.h*(1-I.y[1]),b:p._size.b+p._size.h*I.y[0]},R=D.l+D.w/2,F=D.t+D.h/2,B=Math.min(D.w/2,D.h),N=l.innerRadius*B,j=L.align||"center";if(M=F,P){if(O&&(h=R,M=F+B/2,A=function(t){return e=t,r=.9*N,n=Math.sqrt(e.width/2*(e.width/2)+e.height*e.height),[r/n,e,r];var e,r,n}),z){var V=l.bulletPadding,U=1-l.bulletNumberDomainSize+V;h=D.l+(U+(1-U)*v[j])*D.w,A=function(t){return w(t,(l.bulletNumberDomainSize-V)*D.w,D.h)}}}else h=D.l+v[j]*D.w,A=function(t){return w(t,D.w,D.h)};!function(t,e,r,i){var o,l,h,f=r[0].trace,p=i.numbersX,x=i.numbersY,w=f.align||"center",M=g[w],A=i.transitionOpts,S=i.onComplete,E=a.ensureSingle(e,"g","numbers"),L=[];f._hasNumber&&L.push("number");f._hasDelta&&(L.push("delta"),"left"===f.delta.position&&L.reverse());var C=E.selectAll("text").data(L);function P(e,r,n,a){if(!e.match("s")||n>=0==a>=0||r(n).slice(-1).match(m)||r(a).slice(-1).match(m))return r;var i=e.slice().replace("s","f").replace(/\d+/,function(t){return parseInt(t)-1}),o=b(t,{tickformat:i});return function(t){return Math.abs(t)<1?u.tickText(o,t).text:r(t)}}C.enter().append("text"),C.attr("text-anchor",function(){return M}).attr("class",function(t){return t}).attr("x",null).attr("y",null).attr("dx",null).attr("dy",null),C.exit().remove();var O,z=f.mode+f.align;f._hasDelta&&(O=function(){var e=b(t,{tickformat:f.delta.valueformat},f._range);e.setScale(),u.prepTicks(e);var a=function(t){return u.tickText(e,t).text},i=function(t){var e=f.delta.relative?t.relativeDelta:t.delta;return e},o=function(t,e){return 0===t||"number"!=typeof t||isNaN(t)?"-":(t>0?f.delta.increasing.symbol:f.delta.decreasing.symbol)+e(t)},h=function(t){return t.delta>=0?f.delta.increasing.color:f.delta.decreasing.color};void 0===f._deltaLastValue&&(f._deltaLastValue=i(r[0]));var p=E.select("text.delta");function g(){p.text(o(i(r[0]),a)).call(d.fill,h(r[0])).call(c.convertToTspans,t)}p.call(s.font,f.delta.font).call(d.fill,h({delta:f._deltaLastValue})),y(A)?p.transition().duration(A.duration).ease(A.easing).tween("text",function(){var t=n.select(this),e=i(r[0]),s=f._deltaLastValue,l=P(f.delta.valueformat,a,s,e),c=n.interpolateNumber(s,e);return f._deltaLastValue=e,function(e){t.text(o(c(e),l)),t.call(d.fill,h({delta:c(e)}))}}).each("end",function(){g(),S&&S()}).each("interrupt",function(){g(),S&&S()}):g();return l=k(o(i(r[0]),a),f.delta.font,M,t),p}(),z+=f.delta.position+f.delta.font.size+f.delta.font.family+f.delta.valueformat,z+=f.delta.increasing.symbol+f.delta.decreasing.symbol,h=l);f._hasNumber&&(!function(){var e=b(t,{tickformat:f.number.valueformat},f._range);e.setScale(),u.prepTicks(e);var a=function(t){return u.tickText(e,t).text},i=f.number.suffix,l=f.number.prefix,h=E.select("text.number");function p(){var e="number"==typeof r[0].y?l+a(r[0].y)+i:"-";h.text(e).call(s.font,f.number.font).call(c.convertToTspans,t)}y(A)?h.transition().duration(A.duration).ease(A.easing).each("end",function(){p(),S&&S()}).each("interrupt",function(){p(),S&&S()}).attrTween("text",function(){var t=n.select(this),e=n.interpolateNumber(r[0].lastY,r[0].y);f._lastValue=r[0].y;var o=P(f.number.valueformat,a,r[0].lastY,r[0].y);return function(r){t.text(l+o(e(r))+i)}}):p();o=k(l+a(r[0].y)+i,f.number.font,M,t)}(),z+=f.number.font.size+f.number.font.family+f.number.valueformat+f.number.suffix+f.number.prefix,h=o);if(f._hasDelta&&f._hasNumber){var I,D,R=[(o.left+o.right)/2,(o.top+o.bottom)/2],F=[(l.left+l.right)/2,(l.top+l.bottom)/2],B=.75*f.delta.font.size;"left"===f.delta.position&&(I=T(f,"deltaPos",0,-1*(o.width*v[f.align]+l.width*(1-v[f.align])+B),z,Math.min),D=R[1]-F[1],h={width:o.width+l.width+B,height:Math.max(o.height,l.height),left:l.left+I,right:o.right,top:Math.min(o.top,l.top+D),bottom:Math.max(o.bottom,l.bottom+D)}),"right"===f.delta.position&&(I=T(f,"deltaPos",0,o.width*(1-v[f.align])+l.width*v[f.align]+B,z,Math.max),D=R[1]-F[1],h={width:o.width+l.width+B,height:Math.max(o.height,l.height),left:o.left,right:l.right+I,top:Math.min(o.top,l.top+D),bottom:Math.max(o.bottom,l.bottom+D)}),"bottom"===f.delta.position&&(I=null,D=l.height,h={width:Math.max(o.width,l.width),height:o.height+l.height,left:Math.min(o.left,l.left),right:Math.max(o.right,l.right),top:o.bottom-o.height,bottom:o.bottom+l.height}),"top"===f.delta.position&&(I=null,D=o.top,h={width:Math.max(o.width,l.width),height:o.height+l.height,left:Math.min(o.left,l.left),right:Math.max(o.right,l.right),top:o.bottom-o.height-l.height,bottom:o.bottom}),O.attr({dx:I,dy:D})}(f._hasNumber||f._hasDelta)&&E.attr("transform",function(){var t=i.numbersScaler(h);z+=t[2];var e,r=T(f,"numbersScale",1,t[0],z,Math.min);f._scaleNumbers||(r=1),e=f._isAngular?x-r*h.bottom:x-r*(h.top+h.bottom)/2,f._numbersTop=r*h.top+e;var n=h[w];"center"===w&&(n=(h.left+h.right)/2);var a=p-r*n;return _(a=T(f,"numbersTranslate",0,a,z,Math.max),e)+" scale("+r+")"})}(t,C,e,{numbersX:h,numbersY:M,numbersScaler:A,transitionOpts:r,onComplete:f}),P&&(S={range:L.gauge.axis.range,color:L.gauge.bgcolor,line:{color:L.gauge.bordercolor,width:0},thickness:1},E={range:L.gauge.axis.range,color:"rgba(0, 0, 0, 0)",line:{color:L.gauge.bordercolor,width:L.gauge.borderwidth},thickness:1});var q=C.selectAll("g.angular").data(O?e:[]);q.exit().remove();var H=C.selectAll("g.angularaxis").data(O?e:[]);H.exit().remove(),O&&function(t,e,r,a){var s,l,c,h,f=r[0].trace,p=a.size,d=a.radius,g=a.innerRadius,v=a.gaugeBg,m=a.gaugeOutline,w=[p.l+p.w/2,p.t+p.h/2+d/2],k=a.gauge,T=a.layer,M=a.transitionOpts,A=a.onComplete,S=Math.PI/2;function E(t){var e=f.gauge.axis.range[0],r=f.gauge.axis.range[1],n=(t-e)/(r-e)*Math.PI-S;return n<-S?-S:n>S?S:n}function L(t){return n.svg.arc().innerRadius((g+d)/2-t/2*(d-g)).outerRadius((g+d)/2+t/2*(d-g)).startAngle(-S)}function C(t){t.attr("d",function(t){return L(t.thickness).startAngle(E(t.range[0])).endAngle(E(t.range[1]))()})}k.enter().append("g").classed("angular",!0),k.attr("transform",_(w[0],w[1])),T.enter().append("g").classed("angularaxis",!0).classed("crisp",!0),T.selectAll("g.xangularaxistick,path,text").remove(),(s=b(t,f.gauge.axis)).type="linear",s.range=f.gauge.axis.range,s._id="xangularaxis",s.setScale();var P=function(t){return(s.range[0]-t.x)/(s.range[1]-s.range[0])*Math.PI+Math.PI},O={},z=u.makeLabelFns(s,0).labelStandoff;O.xFn=function(t){var e=P(t);return Math.cos(e)*z},O.yFn=function(t){var e=P(t),r=Math.sin(e)>0?.2:1;return-Math.sin(e)*(z+t.fontSize*r)+Math.abs(Math.cos(e))*(t.fontSize*o)},O.anchorFn=function(t){var e=P(t),r=Math.cos(e);return Math.abs(r)<.1?"middle":r>0?"start":"end"},O.heightFn=function(t,e,r){var n=P(t);return-.5*(1+Math.sin(n))*r};var I=function(t){return _(w[0]+d*Math.cos(t),w[1]-d*Math.sin(t))};c=function(t){return I(P(t))};if(l=u.calcTicks(s),h=u.getTickSigns(s)[2],s.visible){h="inside"===s.ticks?-1:1;var D=(s.linewidth||1)/2;u.drawTicks(t,s,{vals:l,layer:T,path:"M"+h*D+",0h"+h*s.ticklen,transFn:function(t){var e=P(t);return I(e)+"rotate("+-i(e)+")"}}),u.drawLabels(t,s,{vals:l,layer:T,transFn:c,labelFns:O})}var R=[v].concat(f.gauge.steps),F=k.selectAll("g.bg-arc").data(R);F.enter().append("g").classed("bg-arc",!0).append("path"),F.select("path").call(C).call(x),F.exit().remove();var B=L(f.gauge.bar.thickness),N=k.selectAll("g.value-arc").data([f.gauge.bar]);N.enter().append("g").classed("value-arc",!0).append("path");var j=N.select("path");y(M)?(j.transition().duration(M.duration).ease(M.easing).each("end",function(){A&&A()}).each("interrupt",function(){A&&A()}).attrTween("d",(V=B,U=E(r[0].lastY),q=E(r[0].y),function(){var t=n.interpolate(U,q);return function(e){return V.endAngle(t(e))()}})),f._lastValue=r[0].y):j.attr("d","number"==typeof r[0].y?B.endAngle(E(r[0].y)):"M0,0Z");var V,U,q;j.call(x),N.exit().remove(),R=[];var H=f.gauge.threshold.value;H&&R.push({range:[H,H],color:f.gauge.threshold.color,line:{color:f.gauge.threshold.line.color,width:f.gauge.threshold.line.width},thickness:f.gauge.threshold.thickness});var G=k.selectAll("g.threshold-arc").data(R);G.enter().append("g").classed("threshold-arc",!0).append("path"),G.select("path").call(C).call(x),G.exit().remove();var Y=k.selectAll("g.gauge-outline").data([m]);Y.enter().append("g").classed("gauge-outline",!0).append("path"),Y.select("path").call(C).call(x),Y.exit().remove()}(t,0,e,{radius:B,innerRadius:N,gauge:q,layer:H,size:D,gaugeBg:S,gaugeOutline:E,transitionOpts:r,onComplete:f});var G=C.selectAll("g.bullet").data(z?e:[]);G.exit().remove();var Y=C.selectAll("g.bulletaxis").data(z?e:[]);Y.exit().remove(),z&&function(t,e,r,n){var a,i,o,s,c,h=r[0].trace,f=n.gauge,p=n.layer,g=n.gaugeBg,v=n.gaugeOutline,m=n.size,_=h.domain,w=n.transitionOpts,k=n.onComplete;f.enter().append("g").classed("bullet",!0),f.attr("transform","translate("+m.l+", "+m.t+")"),p.enter().append("g").classed("bulletaxis",!0).classed("crisp",!0),p.selectAll("g.xbulletaxistick,path,text").remove();var T=m.h,M=h.gauge.bar.thickness*T,A=_.x[0],S=_.x[0]+(_.x[1]-_.x[0])*(h._hasNumber||h._hasDelta?1-l.bulletNumberDomainSize:1);(a=b(t,h.gauge.axis))._id="xbulletaxis",a.domain=[A,S],a.setScale(),i=u.calcTicks(a),o=u.makeTransFn(a),s=u.getTickSigns(a)[2],c=m.t+m.h,a.visible&&(u.drawTicks(t,a,{vals:"inside"===a.ticks?u.clipEnds(a,i):i,layer:p,path:u.makeTickPath(a,c,s),transFn:o}),u.drawLabels(t,a,{vals:i,layer:p,transFn:o,labelFns:u.makeLabelFns(a,c)}));function E(t){t.attr("width",function(t){return Math.max(0,a.c2p(t.range[1])-a.c2p(t.range[0]))}).attr("x",function(t){return a.c2p(t.range[0])}).attr("y",function(t){return.5*(1-t.thickness)*T}).attr("height",function(t){return t.thickness*T})}var L=[g].concat(h.gauge.steps),C=f.selectAll("g.bg-bullet").data(L);C.enter().append("g").classed("bg-bullet",!0).append("rect"),C.select("rect").call(E).call(x),C.exit().remove();var P=f.selectAll("g.value-bullet").data([h.gauge.bar]);P.enter().append("g").classed("value-bullet",!0).append("rect"),P.select("rect").attr("height",M).attr("y",(T-M)/2).call(x),y(w)?P.select("rect").transition().duration(w.duration).ease(w.easing).each("end",function(){k&&k()}).each("interrupt",function(){k&&k()}).attr("width",Math.max(0,a.c2p(Math.min(h.gauge.axis.range[1],r[0].y)))):P.select("rect").attr("width","number"==typeof r[0].y?Math.max(0,a.c2p(Math.min(h.gauge.axis.range[1],r[0].y))):0);P.exit().remove();var O=r.filter(function(){return h.gauge.threshold.value}),z=f.selectAll("g.threshold-bullet").data(O);z.enter().append("g").classed("threshold-bullet",!0).append("line"),z.select("line").attr("x1",a.c2p(h.gauge.threshold.value)).attr("x2",a.c2p(h.gauge.threshold.value)).attr("y1",(1-h.gauge.threshold.thickness)/2*T).attr("y2",(1-(1-h.gauge.threshold.thickness)/2)*T).call(d.stroke,h.gauge.threshold.line.color).style("stroke-width",h.gauge.threshold.line.width),z.exit().remove();var I=f.selectAll("g.gauge-outline").data([v]);I.enter().append("g").classed("gauge-outline",!0).append("rect"),I.select("rect").call(E).call(x),I.exit().remove()}(t,0,e,{gauge:G,layer:Y,size:D,gaugeBg:S,gaugeOutline:E,transitionOpts:r,onComplete:f});var W=C.selectAll("text.title").data(e);W.exit().remove(),W.enter().append("text").classed("title",!0),W.attr("text-anchor",function(){return z?g.right:g[L.title.align]}).text(L.title.text).call(s.font,L.title.font).call(c.convertToTspans,t),W.attr("transform",function(){var t,e=D.l+D.w*v[L.title.align],r=l.titlePadding,n=s.bBox(W.node());if(P){if(O)if(L.gauge.axis.visible)t=s.bBox(H.node()).top-r-n.bottom;else t=D.t+D.h/2-B/2-n.bottom-r;z&&(t=M-(n.top+n.bottom)/2,e=D.l-l.bulletPadding*D.w)}else t=L._numbersTop-r-n.bottom;return _(e,t)})})}},{"../../components/color":591,"../../components/drawing":612,"../../constants/alignment":686,"../../lib":717,"../../lib/svg_text_utils":741,"../../plots/cartesian/axes":765,"../../plots/cartesian/axis_defaults":767,"../../plots/cartesian/layout_attributes":777,"../../plots/cartesian/position_defaults":780,"./constants":1052,d3:165}],1056:[function(t,e,r){"use strict";var n=t("../../components/colorscale/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../mesh3d/attributes"),o=t("../../plots/attributes"),s=t("../../lib/extend").extendFlat,l=t("../../plot_api/edit_types").overrideAll;var c=e.exports=l(s({x:{valType:"data_array"},y:{valType:"data_array"},z:{valType:"data_array"},value:{valType:"data_array"},isomin:{valType:"number"},isomax:{valType:"number"},surface:{show:{valType:"boolean",dflt:!0},count:{valType:"integer",dflt:2,min:1},fill:{valType:"number",min:0,max:1,dflt:1},pattern:{valType:"flaglist",flags:["A","B","C","D","E"],extras:["all","odd","even"],dflt:"all"}},spaceframe:{show:{valType:"boolean",dflt:!1},fill:{valType:"number",min:0,max:1,dflt:.15}},slices:{x:{show:{valType:"boolean",dflt:!1},locations:{valType:"data_array",dflt:[]},fill:{valType:"number",min:0,max:1,dflt:1}},y:{show:{valType:"boolean",dflt:!1},locations:{valType:"data_array",dflt:[]},fill:{valType:"number",min:0,max:1,dflt:1}},z:{show:{valType:"boolean",dflt:!1},locations:{valType:"data_array",dflt:[]},fill:{valType:"number",min:0,max:1,dflt:1}}},caps:{x:{show:{valType:"boolean",dflt:!0},fill:{valType:"number",min:0,max:1,dflt:1}},y:{show:{valType:"boolean",dflt:!0},fill:{valType:"number",min:0,max:1,dflt:1}},z:{show:{valType:"boolean",dflt:!0},fill:{valType:"number",min:0,max:1,dflt:1}}},text:{valType:"string",dflt:"",arrayOk:!0},hovertext:{valType:"string",dflt:"",arrayOk:!0},hovertemplate:a(),showlegend:s({},o.showlegend,{dflt:!1})},n("",{colorAttr:"`value`",showScaleDflt:!0,editTypeOverride:"calc"}),{opacity:i.opacity,lightposition:i.lightposition,lighting:i.lighting,flatshading:i.flatshading,contour:i.contour,hoverinfo:s({},o.hoverinfo)}),"calc","nested");c.flatshading.dflt=!0,c.lighting.facenormalsepsilon.dflt=0,c.x.editType=c.y.editType=c.z.editType=c.value.editType="calc+clearAxisTypes",c.transforms=void 0},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/attributes":762,"../../plots/template_attributes":841,"../mesh3d/attributes":1061}],1057:[function(t,e,r){"use strict";var n=t("../../components/colorscale/calc"),a=t("../streamtube/calc").processGrid,i=t("../streamtube/calc").filter;e.exports=function(t,e){e._len=Math.min(e.x.length,e.y.length,e.z.length,e.value.length),e._x=i(e.x,e._len),e._y=i(e.y,e._len),e._z=i(e.z,e._len),e._value=i(e.value,e._len);var r=a(e);e._gridFill=r.fill,e._Xs=r.Xs,e._Ys=r.Ys,e._Zs=r.Zs,e._len=r.len;for(var o=1/0,s=-1/0,l=0;l<e._len;l++){var c=e._value[l];o=Math.min(o,c),s=Math.max(s,c)}e._minValues=o,e._maxValues=s,e._vMin=void 0===e.isomin||null===e.isomin?o:e.isomin,e._vMax=void 0===e.isomax||null===e.isomin?s:e.isomax,n(t,e,{vals:[e._vMin,e._vMax],containerStr:"",cLetter:"c"})}},{"../../components/colorscale/calc":599,"../streamtube/calc":1227}],1058:[function(t,e,r){"use strict";var n=t("gl-mesh3d"),a=t("../../lib/gl_format_color").parseColorScale,i=t("../../lib/str2rgbarray"),o=t("../../components/colorscale").extractOpts,s=t("../../plots/gl3d/zip3"),l=function(t,e){for(var r=e.length-1;r>0;r--){var n=Math.min(e[r],e[r-1]),a=Math.max(e[r],e[r-1]);if(a>n&&n<t&&t<=a)return{id:r,distRatio:(a-t)/(a-n)}}return{id:0,distRatio:0}};function c(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name="",this.data=null,this.showContour=!1}var u=c.prototype;u.handlePick=function(t){if(t.object===this.mesh){var e=t.data.index,r=this.data._meshX[e],n=this.data._meshY[e],a=this.data._meshZ[e],i=this.data._Ys.length,o=this.data._Zs.length,s=l(r,this.data._Xs).id,c=l(n,this.data._Ys).id,u=l(a,this.data._Zs).id,h=t.index=u+o*c+o*i*s;t.traceCoordinate=[this.data._meshX[h],this.data._meshY[h],this.data._meshZ[h],this.data._value[h]];var f=this.data.hovertext||this.data.text;return Array.isArray(f)&&void 0!==f[h]?t.textLabel=f[h]:f&&(t.textLabel=f),!0}},u.update=function(t){var e=this.scene,r=e.fullSceneLayout;function n(t,e,r,n){return e.map(function(e){return t.d2l(e,0,n)*r})}this.data=f(t);var l={positions:s(n(r.xaxis,t._meshX,e.dataScale[0],t.xcalendar),n(r.yaxis,t._meshY,e.dataScale[1],t.ycalendar),n(r.zaxis,t._meshZ,e.dataScale[2],t.zcalendar)),cells:s(t._meshI,t._meshJ,t._meshK),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:i(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading},c=o(t);l.vertexIntensity=t._meshIntensity,l.vertexIntensityBounds=[c.min,c.max],l.colormap=a(t),this.mesh.update(l)},u.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()};var h=["xyz","xzy","yxz","yzx","zxy","zyx"];function f(t){t._meshI=[],t._meshJ=[],t._meshK=[];var e,r,n,a,i,o,s,c=t.surface.show,u=t.spaceframe.show,f=t.surface.fill,p=t.spaceframe.fill,d=!1,g=!1,v=0,m=t._Xs,y=t._Ys,x=t._Zs,b=m.length,_=y.length,w=x.length,k=h.indexOf(t._gridFill.replace(/-/g,"").replace(/\+/g,"")),T=function(t,e,r){switch(k){case 5:return r+w*e+w*_*t;case 4:return r+w*t+w*b*e;case 3:return e+_*r+_*w*t;case 2:return e+_*t+_*b*r;case 1:return t+b*r+b*w*e;default:return t+b*e+b*_*r}},M=t._minValues,A=t._maxValues,S=t._vMin,E=t._vMax;function L(t,e,s){for(var l=o.length,c=r;c<l;c++)if(t===n[c]&&e===a[c]&&s===i[c])return c;return-1}function C(){r=e}function P(){n=[],a=[],i=[],o=[],e=0,C()}function O(t,r,s,l){return n.push(t),a.push(r),i.push(s),o.push(l),++e-1}function z(t,e,r){for(var n=[],a=0;a<t.length;a++)n[a]=t[a]*(1-r)+r*e[a];return n}function I(t){s=t}function D(t,e){return"all"===t||null===t||t.indexOf(e)>-1}function R(t,e){return null===t?e:t}function F(e,r,n){C();var a,i,o,l=[r],c=[n];if(s>=1)l=[r],c=[n];else if(s>0){var u=function(t,e){var r=t[0],n=t[1],a=t[2],i=function(t,e,r){for(var n=[],a=0;a<t.length;a++)n[a]=(t[a]+e[a]+r[a])/3;return n}(r,n,a),o=Math.sqrt(1-s),l=z(i,r,o),c=z(i,n,o),u=z(i,a,o),h=e[0],f=e[1],p=e[2];return{xyzv:[[r,n,c],[c,l,r],[n,a,u],[u,c,n],[a,r,l],[l,u,a]],abc:[[h,f,-1],[-1,-1,h],[f,p,-1],[-1,-1,f],[p,h,-1],[-1,-1,p]]}}(r,n);l=u.xyzv,c=u.abc}for(var h=0;h<l.length;h++){r=l[h],n=c[h];for(var f=[],p=0;p<3;p++){var d=r[p][0],g=r[p][1],m=r[p][2],y=r[p][3],x=n[p]>-1?n[p]:L(d,g,m);f[p]=x>-1?x:O(d,g,m,R(e,y))}a=f[0],i=f[1],o=f[2],t._meshI.push(a),t._meshJ.push(i),t._meshK.push(o),++v}}function B(t,e,r,n){var a=t[3];a<r&&(a=r),a>n&&(a=n);for(var i=(t[3]-a)/(t[3]-e[3]+1e-9),o=[],s=0;s<4;s++)o[s]=(1-i)*t[s]+i*e[s];return o}function N(t,e,r){return t>=e&&t<=r}function j(t){var e=.001*(E-S);return t>=S-e&&t<=E+e}function V(e){for(var r=[],n=0;n<4;n++){var a=e[n];r.push([t._x[a],t._y[a],t._z[a],t._value[a]])}return r}var U=3;function q(t,e,r,n,a,i){i||(i=1),r=[-1,-1,-1];var o=!1,s=[N(e[0][3],n,a),N(e[1][3],n,a),N(e[2][3],n,a)];if(!s[0]&&!s[1]&&!s[2])return!1;var l=function(t,e,r){return j(e[0][3])&&j(e[1][3])&&j(e[2][3])?(F(t,e,r),!0):i<U&&q(t,e,r,S,E,++i)};if(s[0]&&s[1]&&s[2])return l(t,e,r)||o;var c=!1;return[[0,1,2],[2,0,1],[1,2,0]].forEach(function(i){if(s[i[0]]&&s[i[1]]&&!s[i[2]]){var u=e[i[0]],h=e[i[1]],f=e[i[2]],p=B(f,u,n,a),d=B(f,h,n,a);o=l(t,[d,p,u],[-1,-1,r[i[0]]])||o,o=l(t,[u,h,d],[r[i[0]],r[i[1]],-1])||o,c=!0}}),c?o:([[0,1,2],[1,2,0],[2,0,1]].forEach(function(i){if(s[i[0]]&&!s[i[1]]&&!s[i[2]]){var u=e[i[0]],h=e[i[1]],f=e[i[2]],p=B(h,u,n,a),d=B(f,u,n,a);o=l(t,[d,p,u],[-1,-1,r[i[0]]])||o,c=!0}}),o)}function H(t,e,r,n){var a=!1,i=V(e),o=[N(i[0][3],r,n),N(i[1][3],r,n),N(i[2][3],r,n),N(i[3][3],r,n)];if(!(o[0]||o[1]||o[2]||o[3]))return a;if(o[0]&&o[1]&&o[2]&&o[3])return g&&(a=function(t,e,r){var n=function(n,a,i){F(t,[e[n],e[a],e[i]],[r[n],r[a],r[i]])};n(0,1,2),n(3,0,1),n(2,3,0),n(1,2,3)}(t,i,e)||a),a;var s=!1;return[[0,1,2,3],[3,0,1,2],[2,3,0,1],[1,2,3,0]].forEach(function(l){if(o[l[0]]&&o[l[1]]&&o[l[2]]&&!o[l[3]]){var c=i[l[0]],u=i[l[1]],h=i[l[2]],f=i[l[3]];if(g)a=F(t,[c,u,h],[e[l[0]],e[l[1]],e[l[2]]])||a;else{var p=B(f,c,r,n),d=B(f,u,r,n),v=B(f,h,r,n);a=F(null,[p,d,v],[-1,-1,-1])||a}s=!0}}),s?a:([[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2],[0,2,3,1],[1,3,2,0]].forEach(function(l){if(o[l[0]]&&o[l[1]]&&!o[l[2]]&&!o[l[3]]){var c=i[l[0]],u=i[l[1]],h=i[l[2]],f=i[l[3]],p=B(h,c,r,n),d=B(h,u,r,n),v=B(f,u,r,n),m=B(f,c,r,n);g?(a=F(t,[c,m,p],[e[l[0]],-1,-1])||a,a=F(t,[u,d,v],[e[l[1]],-1,-1])||a):a=function(t,e,r){var n=function(n,a,i){F(t,[e[n],e[a],e[i]],[r[n],r[a],r[i]])};n(0,1,2),n(2,3,0)}(null,[p,d,v,m],[-1,-1,-1,-1])||a,s=!0}}),s?a:([[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2]].forEach(function(l){if(o[l[0]]&&!o[l[1]]&&!o[l[2]]&&!o[l[3]]){var c=i[l[0]],u=i[l[1]],h=i[l[2]],f=i[l[3]],p=B(u,c,r,n),d=B(h,c,r,n),v=B(f,c,r,n);g?(a=F(t,[c,p,d],[e[l[0]],-1,-1])||a,a=F(t,[c,d,v],[e[l[0]],-1,-1])||a,a=F(t,[c,v,p],[e[l[0]],-1,-1])||a):a=F(null,[p,d,v],[-1,-1,-1])||a,s=!0}}),a))}function G(t,e,r,n,a,i,o,s,l,c,u){var h=!1;return d&&(D(t,"A")&&(h=H(null,[e,r,n,i],c,u)||h),D(t,"B")&&(h=H(null,[r,n,a,l],c,u)||h),D(t,"C")&&(h=H(null,[r,i,o,l],c,u)||h),D(t,"D")&&(h=H(null,[n,i,s,l],c,u)||h),D(t,"E")&&(h=H(null,[r,n,i,l],c,u)||h)),g&&(h=H(t,[r,n,i,l],c,u)||h),h}function Y(t,e,r,n,a,i,o,s){return[!0===s[0]||q(t,V([e,r,n]),[e,r,n],i,o),!0===s[1]||q(t,V([n,a,e]),[n,a,e],i,o)]}function W(t,e,r,n,a,i,o,s,l){return s?Y(t,e,r,a,n,i,o,l):Y(t,r,a,n,e,i,o,l)}function X(t,e,r,n,a,i,o){var s,l,c,u,h=!1,f=function(){h=q(t,[s,l,c],[-1,-1,-1],a,i)||h,h=q(t,[c,u,s],[-1,-1,-1],a,i)||h},p=o[0],d=o[1],g=o[2];return p&&(s=z(V([T(e,r-0,n-0)])[0],V([T(e-1,r-0,n-0)])[0],p),l=z(V([T(e,r-0,n-1)])[0],V([T(e-1,r-0,n-1)])[0],p),c=z(V([T(e,r-1,n-1)])[0],V([T(e-1,r-1,n-1)])[0],p),u=z(V([T(e,r-1,n-0)])[0],V([T(e-1,r-1,n-0)])[0],p),f()),d&&(s=z(V([T(e-0,r,n-0)])[0],V([T(e-0,r-1,n-0)])[0],d),l=z(V([T(e-0,r,n-1)])[0],V([T(e-0,r-1,n-1)])[0],d),c=z(V([T(e-1,r,n-1)])[0],V([T(e-1,r-1,n-1)])[0],d),u=z(V([T(e-1,r,n-0)])[0],V([T(e-1,r-1,n-0)])[0],d),f()),g&&(s=z(V([T(e-0,r-0,n)])[0],V([T(e-0,r-0,n-1)])[0],g),l=z(V([T(e-0,r-1,n)])[0],V([T(e-0,r-1,n-1)])[0],g),c=z(V([T(e-1,r-1,n)])[0],V([T(e-1,r-1,n-1)])[0],g),u=z(V([T(e-1,r-0,n)])[0],V([T(e-1,r-0,n-1)])[0],g),f()),h}function Z(t,e,r,n,a,i,o,s,l,c,u,h){var f=t;return h?(d&&"even"===t&&(f=null),G(f,e,r,n,a,i,o,s,l,c,u)):(d&&"odd"===t&&(f=null),G(f,l,s,o,i,a,n,r,e,c,u))}function J(t,e,r,n,a){for(var i=[],o=0,s=0;s<e.length;s++)for(var l=e[s],c=1;c<w;c++)for(var u=1;u<_;u++)i.push(W(t,T(l,u-1,c-1),T(l,u-1,c),T(l,u,c-1),T(l,u,c),r,n,(l+u+c)%2,a&&a[o]?a[o]:[])),o++;return i}function K(t,e,r,n,a){for(var i=[],o=0,s=0;s<e.length;s++)for(var l=e[s],c=1;c<b;c++)for(var u=1;u<w;u++)i.push(W(t,T(c-1,l,u-1),T(c,l,u-1),T(c-1,l,u),T(c,l,u),r,n,(c+l+u)%2,a&&a[o]?a[o]:[])),o++;return i}function Q(t,e,r,n,a){for(var i=[],o=0,s=0;s<e.length;s++)for(var l=e[s],c=1;c<_;c++)for(var u=1;u<b;u++)i.push(W(t,T(u-1,c-1,l),T(u-1,c,l),T(u,c-1,l),T(u,c,l),r,n,(u+c+l)%2,a&&a[o]?a[o]:[])),o++;return i}function $(t,e,r){for(var n=1;n<w;n++)for(var a=1;a<_;a++)for(var i=1;i<b;i++)Z(t,T(i-1,a-1,n-1),T(i-1,a-1,n),T(i-1,a,n-1),T(i-1,a,n),T(i,a-1,n-1),T(i,a-1,n),T(i,a,n-1),T(i,a,n),e,r,(i+a+n)%2)}function tt(t,e,r){d=!0,$(t,e,r),d=!1}function et(t,e,r,n,a,i){for(var o=[],s=0,l=0;l<e.length;l++)for(var c=e[l],u=1;u<w;u++)for(var h=1;h<_;h++)o.push(X(t,c,h,u,r,n,a[l],i&&i[s]&&i[s])),s++;return o}function rt(t,e,r,n,a,i){for(var o=[],s=0,l=0;l<e.length;l++)for(var c=e[l],u=1;u<b;u++)for(var h=1;h<w;h++)o.push(X(t,u,c,h,r,n,a[l],i&&i[s]&&i[s])),s++;return o}function nt(t,e,r,n,a,i){for(var o=[],s=0,l=0;l<e.length;l++)for(var c=e[l],u=1;u<_;u++)for(var h=1;h<b;h++)o.push(X(t,h,u,c,r,n,a[l],i&&i[s]&&i[s])),s++;return o}function at(t,e){for(var r=[],n=t;n<e;n++)r.push(n);return r}return function(){if(P(),function(){for(var e=0;e<b;e++)for(var r=0;r<_;r++)for(var n=0;n<w;n++){var a=T(e,r,n);O(t._x[a],t._y[a],t._z[a],t._value[a])}}(),u&&p&&(I(p),g=!0,$(null,S,E),g=!1),c&&f){I(f);for(var e=t.surface.pattern,r=t.surface.count,s=0;s<r;s++){var h=1===r?.5:s/(r-1),d=(1-h)*S+h*E,k=Math.abs(d-M)>Math.abs(d-A)?[M,d]:[d,A];tt(e,k[0],k[1])}}var L=[[Math.min(S,A),Math.max(S,A)],[Math.min(M,E),Math.max(M,E)]];["x","y","z"].forEach(function(e){for(var r=[],n=0;n<L.length;n++){var a=0,i=L[n][0],o=L[n][1],s=t.slices[e];if(s.show&&s.fill){I(s.fill);var c=[],u=[],h=[];if(s.locations.length)for(var f=0;f<s.locations.length;f++){var p=l(s.locations[f],"x"===e?m:"y"===e?y:x);0===p.distRatio?c.push(p.id):p.id>0&&(u.push(p.id),"x"===e?h.push([p.distRatio,0,0]):"y"===e?h.push([0,p.distRatio,0]):h.push([0,0,p.distRatio]))}else c=at(1,"x"===e?b-1:"y"===e?_-1:w-1);u.length>0&&(r[a]="x"===e?et(null,u,i,o,h,r[a]):"y"===e?rt(null,u,i,o,h,r[a]):nt(null,u,i,o,h,r[a]),a++),c.length>0&&(r[a]="x"===e?J(null,c,i,o,r[a]):"y"===e?K(null,c,i,o,r[a]):Q(null,c,i,o,r[a]),a++)}var d=t.caps[e];d.show&&d.fill&&(I(d.fill),r[a]="x"===e?J(null,[0,b-1],i,o,r[a]):"y"===e?K(null,[0,_-1],i,o,r[a]):Q(null,[0,w-1],i,o,r[a]),a++)}}),0===v&&P(),t._meshX=n,t._meshY=a,t._meshZ=i,t._meshIntensity=o,t._Xs=m,t._Ys=y,t._Zs=x}(),t}e.exports={findNearestOnAxis:l,generateIsoMeshes:f,createIsosurfaceTrace:function(t,e){var r=t.glplot.gl,a=n({gl:r}),i=new c(t,a,e.uid);return a._trace=i,i.update(e),t.glplot.add(a),i}}},{"../../components/colorscale":603,"../../lib/gl_format_color":714,"../../lib/str2rgbarray":740,"../../plots/gl3d/zip3":816,"gl-mesh3d":283}],1059:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../registry"),i=t("./attributes"),o=t("../../components/colorscale/defaults");function s(t,e,r,n,i){var s=i("isomin"),l=i("isomax");null!=l&&null!=s&&s>l&&(e.isomin=null,e.isomax=null);var c=i("x"),u=i("y"),h=i("z"),f=i("value");c&&c.length&&u&&u.length&&h&&h.length&&f&&f.length?(a.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y","z"],n),["x","y","z"].forEach(function(t){var e="caps."+t;i(e+".show")&&i(e+".fill");var r="slices."+t;i(r+".show")&&(i(r+".fill"),i(r+".locations"))}),i("spaceframe.show")&&i("spaceframe.fill"),i("surface.show")&&(i("surface.count"),i("surface.fill"),i("surface.pattern")),i("contour.show")&&(i("contour.color"),i("contour.width")),["text","hovertext","hovertemplate","lighting.ambient","lighting.diffuse","lighting.specular","lighting.roughness","lighting.fresnel","lighting.vertexnormalsepsilon","lighting.facenormalsepsilon","lightposition.x","lightposition.y","lightposition.z","flatshading","opacity"].forEach(function(t){i(t)}),o(t,e,n,i,{prefix:"",cLetter:"c"}),e._length=null):e.visible=!1}e.exports={supplyDefaults:function(t,e,r,a){s(t,e,0,a,function(r,a){return n.coerce(t,e,i,r,a)})},supplyIsoDefaults:s}},{"../../components/colorscale/defaults":601,"../../lib":717,"../../registry":846,"./attributes":1056}],1060:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults").supplyDefaults,calc:t("./calc"),colorbar:{min:"cmin",max:"cmax"},plot:t("./convert").createIsosurfaceTrace,moduleType:"trace",name:"isosurface",basePlotModule:t("../../plots/gl3d"),categories:["gl3d","showLegend"],meta:{}}},{"../../plots/gl3d":805,"./attributes":1056,"./calc":1057,"./convert":1058,"./defaults":1059}],1061:[function(t,e,r){"use strict";var n=t("../../components/colorscale/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../surface/attributes"),o=t("../../plots/attributes"),s=t("../../lib/extend").extendFlat;e.exports=s({x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},z:{valType:"data_array",editType:"calc+clearAxisTypes"},i:{valType:"data_array",editType:"calc"},j:{valType:"data_array",editType:"calc"},k:{valType:"data_array",editType:"calc"},text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertemplate:a({editType:"calc"}),delaunayaxis:{valType:"enumerated",values:["x","y","z"],dflt:"z",editType:"calc"},alphahull:{valType:"number",dflt:-1,editType:"calc"},intensity:{valType:"data_array",editType:"calc"},intensitymode:{valType:"enumerated",values:["vertex","cell"],dflt:"vertex",editType:"calc"},color:{valType:"color",editType:"calc"},vertexcolor:{valType:"data_array",editType:"calc"},facecolor:{valType:"data_array",editType:"calc"},transforms:void 0},n("",{colorAttr:"`intensity`",showScaleDflt:!0,editTypeOverride:"calc"}),{opacity:i.opacity,flatshading:{valType:"boolean",dflt:!1,editType:"calc"},contour:{show:s({},i.contours.x.show,{}),color:i.contours.x.color,width:i.contours.x.width,editType:"calc"},lightposition:{x:s({},i.lightposition.x,{dflt:1e5}),y:s({},i.lightposition.y,{dflt:1e5}),z:s({},i.lightposition.z,{dflt:0}),editType:"calc"},lighting:s({vertexnormalsepsilon:{valType:"number",min:0,max:1,dflt:1e-12,editType:"calc"},facenormalsepsilon:{valType:"number",min:0,max:1,dflt:1e-6,editType:"calc"},editType:"calc"},i.lighting),hoverinfo:s({},o.hoverinfo,{editType:"calc"}),showlegend:s({},o.showlegend,{dflt:!1})})},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../surface/attributes":1243}],1062:[function(t,e,r){"use strict";var n=t("../../components/colorscale/calc");e.exports=function(t,e){e.intensity&&n(t,e,{vals:e.intensity,containerStr:"",cLetter:"c"})}},{"../../components/colorscale/calc":599}],1063:[function(t,e,r){"use strict";var n=t("gl-mesh3d"),a=t("delaunay-triangulate"),i=t("alpha-shape"),o=t("convex-hull"),s=t("../../lib/gl_format_color").parseColorScale,l=t("../../lib/str2rgbarray"),c=t("../../components/colorscale").extractOpts,u=t("../../plots/gl3d/zip3");function h(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name="",this.color="#fff",this.data=null,this.showContour=!1}var f=h.prototype;function p(t){for(var e=[],r=t.length,n=0;n<r;n++)e[n]=l(t[n]);return e}function d(t,e,r,n){for(var a=[],i=e.length,o=0;o<i;o++)a[o]=t.d2l(e[o],0,n)*r;return a}function g(t){for(var e=[],r=t.length,n=0;n<r;n++)e[n]=Math.round(t[n]);return e}function v(t,e){for(var r=t.length,n=0;n<r;n++)if(t[n]<=-.5||t[n]>=e-.5)return!1;return!0}f.handlePick=function(t){if(t.object===this.mesh){var e=t.index=t.data.index;t.data._cellCenter?t.traceCoordinate=t.data.dataCoordinate:t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e]];var r=this.data.hovertext||this.data.text;return Array.isArray(r)&&void 0!==r[e]?t.textLabel=r[e]:r&&(t.textLabel=r),!0}},f.update=function(t){var e=this.scene,r=e.fullSceneLayout;this.data=t;var n,h=t.x.length,f=u(d(r.xaxis,t.x,e.dataScale[0],t.xcalendar),d(r.yaxis,t.y,e.dataScale[1],t.ycalendar),d(r.zaxis,t.z,e.dataScale[2],t.zcalendar));if(t.i&&t.j&&t.k){if(t.i.length!==t.j.length||t.j.length!==t.k.length||!v(t.i,h)||!v(t.j,h)||!v(t.k,h))return;n=u(g(t.i),g(t.j),g(t.k))}else n=0===t.alphahull?o(f):t.alphahull>0?i(t.alphahull,f):function(t,e){for(var r=["x","y","z"].indexOf(t),n=[],i=e.length,o=0;o<i;o++)n[o]=[e[o][(r+1)%3],e[o][(r+2)%3]];return a(n)}(t.delaunayaxis,f);var m={positions:f,cells:n,lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:l(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading};if(t.intensity){var y=c(t);this.color="#fff";var x=t.intensitymode;m[x+"Intensity"]=t.intensity,m[x+"IntensityBounds"]=[y.min,y.max],m.colormap=s(t)}else t.vertexcolor?(this.color=t.vertexcolor[0],m.vertexColors=p(t.vertexcolor)):t.facecolor?(this.color=t.facecolor[0],m.cellColors=p(t.facecolor)):(this.color=t.color,m.meshColor=l(t.color));this.mesh.update(m)},f.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var r=t.glplot.gl,a=n({gl:r}),i=new h(t,a,e.uid);return a._trace=i,i.update(e),t.glplot.add(a),i}},{"../../components/colorscale":603,"../../lib/gl_format_color":714,"../../lib/str2rgbarray":740,"../../plots/gl3d/zip3":816,"alpha-shape":67,"convex-hull":132,"delaunay-triangulate":167,"gl-mesh3d":283}],1064:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("../../components/colorscale/defaults"),o=t("./attributes");e.exports=function(t,e,r,s){function l(r,n){return a.coerce(t,e,o,r,n)}function c(t){var e=t.map(function(t){var e=l(t);return e&&a.isArrayOrTypedArray(e)?e:null});return e.every(function(t){return t&&t.length===e[0].length})&&e}c(["x","y","z"])?(c(["i","j","k"]),(!e.i||e.j&&e.k)&&(!e.j||e.k&&e.i)&&(!e.k||e.i&&e.j)?(n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y","z"],s),["lighting.ambient","lighting.diffuse","lighting.specular","lighting.roughness","lighting.fresnel","lighting.vertexnormalsepsilon","lighting.facenormalsepsilon","lightposition.x","lightposition.y","lightposition.z","flatshading","alphahull","delaunayaxis","opacity"].forEach(function(t){l(t)}),l("contour.show")&&(l("contour.color"),l("contour.width")),"intensity"in t?(l("intensity"),l("intensitymode"),i(t,e,s,l,{prefix:"",cLetter:"c"})):(e.showscale=!1,"facecolor"in t?l("facecolor"):"vertexcolor"in t?l("vertexcolor"):l("color",r)),l("text"),l("hovertext"),l("hovertemplate"),e._length=null):e.visible=!1):e.visible=!1}},{"../../components/colorscale/defaults":601,"../../lib":717,"../../registry":846,"./attributes":1061}],1065:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc"),colorbar:{min:"cmin",max:"cmax"},plot:t("./convert"),moduleType:"trace",name:"mesh3d",basePlotModule:t("../../plots/gl3d"),categories:["gl3d","showLegend"],meta:{}}},{"../../plots/gl3d":805,"./attributes":1061,"./calc":1062,"./convert":1063,"./defaults":1064}],1066:[function(t,e,r){"use strict";var n=t("../../lib").extendFlat,a=t("../scatter/attributes"),i=t("../../components/drawing/attributes").dash,o=t("../../components/fx/attributes"),s=t("../../constants/delta.js"),l=s.INCREASING.COLOR,c=s.DECREASING.COLOR,u=a.line;function h(t){return{line:{color:n({},u.color,{dflt:t}),width:u.width,dash:i,editType:"style"},editType:"style"}}e.exports={x:{valType:"data_array",editType:"calc+clearAxisTypes"},open:{valType:"data_array",editType:"calc"},high:{valType:"data_array",editType:"calc"},low:{valType:"data_array",editType:"calc"},close:{valType:"data_array",editType:"calc"},line:{width:n({},u.width,{}),dash:n({},i,{}),editType:"style"},increasing:h(l),decreasing:h(c),text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},tickwidth:{valType:"number",min:0,max:.5,dflt:.3,editType:"calc"},hoverlabel:n({},o.hoverlabel,{split:{valType:"boolean",dflt:!1,editType:"style"}})}},{"../../components/drawing/attributes":611,"../../components/fx/attributes":621,"../../constants/delta.js":687,"../../lib":717,"../scatter/attributes":1120}],1067:[function(t,e,r){"use strict";var n=t("../../lib"),a=n._,i=t("../../plots/cartesian/axes"),o=t("../../constants/numerical").BADNUM;function s(t,e,r,n){return{o:t,h:e,l:r,c:n}}function l(t,e,r,s,l){for(var c=s.makeCalcdata(e,"open"),u=s.makeCalcdata(e,"high"),h=s.makeCalcdata(e,"low"),f=s.makeCalcdata(e,"close"),p=Array.isArray(e.text),d=Array.isArray(e.hovertext),g=!0,v=null,m=[],y=0;y<r.length;y++){var x=r[y],b=c[y],_=u[y],w=h[y],k=f[y];if(x!==o&&b!==o&&_!==o&&w!==o&&k!==o){k===b?null!==v&&k!==v&&(g=k>v):g=k>b,v=k;var T=l(b,_,w,k);T.pos=x,T.yc=(b+k)/2,T.i=y,T.dir=g?"increasing":"decreasing",T.x=T.pos,T.y=[w,_],p&&(T.tx=e.text[y]),d&&(T.htx=e.hovertext[y]),m.push(T)}else m.push({pos:x,empty:!0})}return e._extremes[s._id]=i.findExtremes(s,n.concat(h,u),{padded:!0}),m.length&&(m[0].t={labels:{open:a(t,"open:")+" ",high:a(t,"high:")+" ",low:a(t,"low:")+" ",close:a(t,"close:")+" "}}),m}e.exports={calc:function(t,e){var r=i.getFromId(t,e.xaxis),a=i.getFromId(t,e.yaxis),o=function(t,e,r){var a=r._minDiff;if(!a){var i,o=t._fullData,s=[];for(a=1/0,i=0;i<o.length;i++){var l=o[i];if("ohlc"===l.type&&!0===l.visible&&l.xaxis===e._id){s.push(l);var c=e.makeCalcdata(l,"x");l._xcalc=c;var u=n.distinctVals(c).minDiff;u&&isFinite(u)&&(a=Math.min(a,u))}}for(a===1/0&&(a=1),i=0;i<s.length;i++)s[i]._minDiff=a}return a*r.tickwidth}(t,r,e),c=e._minDiff;e._minDiff=null;var u=e._xcalc;e._xcalc=null;var h=l(t,e,u,a,s);return e._extremes[r._id]=i.findExtremes(r,u,{vpad:c/2}),h.length?(n.extendFlat(h[0].t,{wHover:c/2,tickLen:o}),h):[{t:{empty:!0}}]},calcCommon:l}},{"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/axes":765}],1068:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./ohlc_defaults"),i=t("./attributes");function o(t,e,r,n){r(n+".line.color"),r(n+".line.width",e.line.width),r(n+".line.dash",e.line.dash)}e.exports=function(t,e,r,s){function l(r,a){return n.coerce(t,e,i,r,a)}a(t,e,l,s)?(l("line.width"),l("line.dash"),o(t,e,l,"increasing"),o(t,e,l,"decreasing"),l("text"),l("hovertext"),l("tickwidth"),s._requestRangeslider[e.xaxis]=!0):e.visible=!1}},{"../../lib":717,"./attributes":1066,"./ohlc_defaults":1071}],1069:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../lib"),i=t("../../components/fx"),o=t("../../components/color"),s=t("../../lib").fillText,l=t("../../constants/delta.js"),c={increasing:l.INCREASING.SYMBOL,decreasing:l.DECREASING.SYMBOL};function u(t,e,r,n){var a,s,l=t.cd,c=t.xa,u=l[0].trace,h=l[0].t,f=u.type,p="ohlc"===f?"l":"min",d="ohlc"===f?"h":"max",g=h.bPos||0,v=function(t){return t.pos+g-e},m=h.bdPos||h.tickLen,y=h.wHover,x=Math.min(1,m/Math.abs(c.r2c(c.range[1])-c.r2c(c.range[0])));function b(t){var e=v(t);return i.inbox(e-y,e+y,a)}function _(t){var e=t[p],n=t[d];return e===n||i.inbox(e-r,n-r,a)}function w(t){return(b(t)+_(t))/2}a=t.maxHoverDistance-x,s=t.maxSpikeDistance-x;var k=i.getDistanceFunction(n,b,_,w);if(i.getClosest(l,k,t),!1===t.index)return null;var T=l[t.index];if(T.empty)return null;var M=u[T.dir],A=M.line.color;return o.opacity(A)&&M.line.width?t.color=A:t.color=M.fillcolor,t.x0=c.c2p(T.pos+g-m,!0),t.x1=c.c2p(T.pos+g+m,!0),t.xLabelVal=T.pos,t.spikeDistance=w(T)*s/a,t.xSpike=c.c2p(T.pos,!0),t}function h(t,e,r,i){var o=t.cd,s=t.ya,l=o[0].trace,c=o[0].t,h=[],f=u(t,e,r,i);if(!f)return[];var p=o[f.index].hi||l.hoverinfo,d=p.split("+");if(!("all"===p||-1!==d.indexOf("y")))return[];for(var g=["high","open","close","low"],v={},m=0;m<g.length;m++){var y,x=g[m],b=l[x][f.index],_=s.c2p(b,!0);b in v?(y=v[b]).yLabel+="<br>"+c.labels[x]+n.hoverLabelText(s,b):((y=a.extendFlat({},f)).y0=y.y1=_,y.yLabelVal=b,y.yLabel=c.labels[x]+n.hoverLabelText(s,b),y.name="",h.push(y),v[b]=y)}return h}function f(t,e,r,a){var i=t.cd,o=t.ya,l=i[0].trace,h=i[0].t,f=u(t,e,r,a);if(!f)return[];var p=i[f.index],d=f.index=p.i,g=p.dir;function v(t){return h.labels[t]+n.hoverLabelText(o,l[t][d])}var m=p.hi||l.hoverinfo,y=m.split("+"),x="all"===m,b=x||-1!==y.indexOf("y"),_=x||-1!==y.indexOf("text"),w=b?[v("open"),v("high"),v("low"),v("close")+" "+c[g]]:[];return _&&s(p,l,w),f.extraText=w.join("<br>"),f.y0=f.y1=o.c2p(p.yc,!0),[f]}e.exports={hoverPoints:function(t,e,r,n){return t.cd[0].trace.hoverlabel.split?h(t,e,r,n):f(t,e,r,n)},hoverSplit:h,hoverOnPoints:f}},{"../../components/color":591,"../../components/fx":630,"../../constants/delta.js":687,"../../lib":717,"../../plots/cartesian/axes":765}],1070:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"ohlc",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","showLegend"],meta:{},attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc").calc,plot:t("./plot"),style:t("./style"),hoverPoints:t("./hover").hoverPoints,selectPoints:t("./select")}},{"../../plots/cartesian":776,"./attributes":1066,"./calc":1067,"./defaults":1068,"./hover":1069,"./plot":1072,"./select":1073,"./style":1074}],1071:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib");e.exports=function(t,e,r,i){var o=r("x"),s=r("open"),l=r("high"),c=r("low"),u=r("close");if(r("hoverlabel.split"),n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x"],i),s&&l&&c&&u){var h=Math.min(s.length,l.length,c.length,u.length);return o&&(h=Math.min(h,a.minRowLength(o))),e._length=h,h}}},{"../../lib":717,"../../registry":846}],1072:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib");e.exports=function(t,e,r,i){var o=e.xaxis,s=e.yaxis;a.makeTraceGroups(i,r,"trace ohlc").each(function(t){var e=n.select(this),r=t[0],i=r.t;if(!0!==r.trace.visible||i.empty)e.remove();else{var l=i.tickLen,c=e.selectAll("path").data(a.identity);c.enter().append("path"),c.exit().remove(),c.attr("d",function(t){if(t.empty)return"M0,0Z";var e=o.c2p(t.pos,!0),r=o.c2p(t.pos-l,!0),n=o.c2p(t.pos+l,!0);return"M"+r+","+s.c2p(t.o,!0)+"H"+e+"M"+e+","+s.c2p(t.h,!0)+"V"+s.c2p(t.l,!0)+"M"+n+","+s.c2p(t.c,!0)+"H"+e})}})}},{"../../lib":717,d3:165}],1073:[function(t,e,r){"use strict";e.exports=function(t,e){var r,n=t.cd,a=t.xaxis,i=t.yaxis,o=[],s=n[0].t.bPos||0;if(!1===e)for(r=0;r<n.length;r++)n[r].selected=0;else for(r=0;r<n.length;r++){var l=n[r];e.contains([a.c2p(l.pos+s),i.c2p(l.yc)],null,l.i,t)?(o.push({pointNumber:l.i,x:a.c2d(l.pos),y:i.c2d(l.yc)}),l.selected=1):l.selected=0}return o}},{}],1074:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/drawing"),i=t("../../components/color");e.exports=function(t,e,r){var o=r||n.select(t).selectAll("g.ohlclayer").selectAll("g.trace");o.style("opacity",function(t){return t[0].trace.opacity}),o.each(function(t){var e=t[0].trace;n.select(this).selectAll("path").each(function(t){if(!t.empty){var r=e[t.dir].line;n.select(this).style("fill","none").call(i.stroke,r.color).call(a.dashLine,r.dash,r.width).style("opacity",e.selectedpoints&&!t.selected?.3:1)}})})}},{"../../components/color":591,"../../components/drawing":612,d3:165}],1075:[function(t,e,r){"use strict";var n=t("../../lib/extend").extendFlat,a=t("../../plots/attributes"),i=t("../../plots/font_attributes"),o=t("../../components/colorscale/attributes"),s=t("../../plots/template_attributes").hovertemplateAttrs,l=t("../../plots/domain").attributes,c=n({editType:"calc"},o("line",{editTypeOverride:"calc"}),{shape:{valType:"enumerated",values:["linear","hspline"],dflt:"linear",editType:"plot"},hovertemplate:s({editType:"plot",arrayOk:!1},{keys:["count","probability"]})});e.exports={domain:l({name:"parcats",trace:!0,editType:"calc"}),hoverinfo:n({},a.hoverinfo,{flags:["count","probability"],editType:"plot",arrayOk:!1}),hoveron:{valType:"enumerated",values:["category","color","dimension"],dflt:"category",editType:"plot"},hovertemplate:s({editType:"plot",arrayOk:!1},{keys:["count","probability","category","categorycount","colorcount","bandcolorcount"]}),arrangement:{valType:"enumerated",values:["perpendicular","freeform","fixed"],dflt:"perpendicular",editType:"plot"},bundlecolors:{valType:"boolean",dflt:!0,editType:"plot"},sortpaths:{valType:"enumerated",values:["forward","backward"],dflt:"forward",editType:"plot"},labelfont:i({editType:"calc"}),tickfont:i({editType:"calc"}),dimensions:{_isLinkedToArray:"dimension",label:{valType:"string",editType:"calc"},categoryorder:{valType:"enumerated",values:["trace","category ascending","category descending","array"],dflt:"trace",editType:"calc"},categoryarray:{valType:"data_array",editType:"calc"},ticktext:{valType:"data_array",editType:"calc"},values:{valType:"data_array",dflt:[],editType:"calc"},displayindex:{valType:"integer",editType:"calc"},editType:"calc",visible:{valType:"boolean",dflt:!0,editType:"calc"}},line:c,counts:{valType:"number",min:0,dflt:1,arrayOk:!0,editType:"calc"},customdata:void 0,hoverlabel:void 0,ids:void 0,legendgroup:void 0,opacity:void 0,selectedpoints:void 0,showlegend:void 0}},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/domain":790,"../../plots/font_attributes":791,"../../plots/template_attributes":841}],1076:[function(t,e,r){"use strict";var n=t("../../plots/get_data").getModuleCalcData,a=t("./plot");r.name="parcats",r.plot=function(t,e,r,i){var o=n(t.calcdata,"parcats");if(o.length){var s=o[0];a(t,s,r,i)}},r.clean=function(t,e,r,n){var a=n._has&&n._has("parcats"),i=e._has&&e._has("parcats");a&&!i&&n._paperdiv.selectAll(".parcats").remove()}},{"../../plots/get_data":800,"./plot":1081}],1077:[function(t,e,r){"use strict";var n=t("../../lib/gup").wrap,a=t("../../components/colorscale/helpers").hasColorscale,i=t("../../components/colorscale/calc"),o=t("../../lib/filter_unique.js"),s=t("../../components/drawing"),l=t("../../lib");function c(t,e,r){t.valueInds.push(e),t.count+=r}function u(t,e,r){return{categoryInds:t,color:e,rawColor:r,valueInds:[],count:0}}function h(t,e,r){t.valueInds.push(e),t.count+=r}e.exports=function(t,e){var r=l.filterVisible(e.dimensions);if(0===r.length)return[];var f,p,d,g=r.map(function(t){var e;return"trace"===t.categoryorder?e=null:"array"===t.categoryorder?e=t.categoryarray:(e=o(t.values).sort(),"category descending"===t.categoryorder&&(e=e.reverse())),function(t,e){e=null==e?[]:e.map(function(t){return t});var r={},n={},a=[];e.forEach(function(t,e){r[t]=0,n[t]=e});for(var i=0;i<t.length;i++){var o,s=t[i];void 0===r[s]?(r[s]=1,o=e.push(s)-1,n[s]=o):(r[s]++,o=n[s]),a.push(o)}var l=e.map(function(t){return r[t]});return{uniqueValues:e,uniqueCounts:l,inds:a}}(t.values,e)});f=l.isArrayOrTypedArray(e.counts)?e.counts:[e.counts],function(t){var e;if(function(t){for(var e=new Array(t.length),r=0;r<t.length;r++){if(t[r]<0||t[r]>=t.length)return!1;if(void 0!==e[t[r]])return!1;e[t[r]]=!0}return!0}(t.map(function(t){return t.displayindex})))for(e=0;e<t.length;e++)t[e]._displayindex=t[e].displayindex;else for(e=0;e<t.length;e++)t[e]._displayindex=e}(r),r.forEach(function(t,e){!function(t,e){t._categoryarray=e.uniqueValues,null===t.ticktext||void 0===t.ticktext?t._ticktext=[]:t._ticktext=t.ticktext.slice();for(var r=t._ticktext.length;r<e.uniqueValues.length;r++)t._ticktext.push(e.uniqueValues[r])}(t,g[e])});var v,m=e.line;m?(a(e,"line")&&i(t,e,{vals:e.line.color,containerStr:"line",cLetter:"c"}),v=s.tryColorscale(m)):v=l.identity;var y,x,b,_,w,k=r[0].values.length,T={},M=g.map(function(t){return t.inds});for(d=0,y=0;y<k;y++){var A=[];for(x=0;x<M.length;x++)A.push(M[x][y]);p=f[y%f.length],d+=p;var S=(b=y,_=void 0,w=void 0,l.isArrayOrTypedArray(m.color)?w=_=m.color[b%m.color.length]:_=m.color,{color:v(_),rawColor:w}),E=A+"-"+S.rawColor;void 0===T[E]&&(T[E]=u(A,S.color,S.rawColor)),h(T[E],y,p)}var L,C=r.map(function(t,e){return r=e,n=t._index,a=t._displayindex,i=t.label,{dimensionInd:r,containerInd:n,displayInd:a,dimensionLabel:i,count:d,categories:[],dragX:null};var r,n,a,i});for(y=0;y<k;y++)for(p=f[y%f.length],x=0;x<C.length;x++){var P=C[x].containerInd,O=g[x].inds[y],z=C[x].categories;if(void 0===z[O]){var I=e.dimensions[P]._categoryarray[O],D=e.dimensions[P]._ticktext[O];z[O]={dimensionInd:x,categoryInd:L=O,categoryValue:I,displayInd:L,categoryLabel:D,valueInds:[],count:0,dragY:null}}c(z[O],y,p)}return n(function(t,e,r){var n=t.map(function(t){return t.categories.length}).reduce(function(t,e){return Math.max(t,e)});return{dimensions:t,paths:e,trace:void 0,maxCats:n,count:r}}(C,T,d))}},{"../../components/colorscale/calc":599,"../../components/colorscale/helpers":602,"../../components/drawing":612,"../../lib":717,"../../lib/filter_unique.js":709,"../../lib/gup":715}],1078:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/colorscale/helpers").hasColorscale,i=t("../../components/colorscale/defaults"),o=t("../../plots/domain").defaults,s=t("../../plots/array_container_defaults"),l=t("./attributes"),c=t("../parcoords/merge_length");function u(t,e){function r(r,a){return n.coerce(t,e,l.dimensions,r,a)}var a=r("values"),i=r("visible");if(a&&a.length||(i=e.visible=!1),i){r("label"),r("displayindex",e._index);var o,s=t.categoryarray,c=Array.isArray(s)&&s.length>0;c&&(o="array");var u=r("categoryorder",o);"array"===u?(r("categoryarray"),r("ticktext")):(delete t.categoryarray,delete t.ticktext),c||"array"!==u||(e.categoryorder="trace")}}e.exports=function(t,e,r,h){function f(r,a){return n.coerce(t,e,l,r,a)}var p=s(t,e,{name:"dimensions",handleItemDefaults:u}),d=function(t,e,r,o,s){s("line.shape"),s("line.hovertemplate");var l=s("line.color",o.colorway[0]);if(a(t,"line")&&n.isArrayOrTypedArray(l)){if(l.length)return s("line.colorscale"),i(t,e,o,s,{prefix:"line.",cLetter:"c"}),l.length;e.line.color=r}return 1/0}(t,e,r,h,f);o(e,h,f),Array.isArray(p)&&p.length||(e.visible=!1),c(e,p,"values",d),f("hoveron"),f("hovertemplate"),f("arrangement"),f("bundlecolors"),f("sortpaths"),f("counts");var g={family:h.font.family,size:Math.round(h.font.size),color:h.font.color};n.coerceFont(f,"labelfont",g);var v={family:h.font.family,size:Math.round(h.font.size/1.2),color:h.font.color};n.coerceFont(f,"tickfont",v)}},{"../../components/colorscale/defaults":601,"../../components/colorscale/helpers":602,"../../lib":717,"../../plots/array_container_defaults":761,"../../plots/domain":790,"../parcoords/merge_length":1091,"./attributes":1075}],1079:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc"),plot:t("./plot"),colorbar:{container:"line",min:"cmin",max:"cmax"},moduleType:"trace",name:"parcats",basePlotModule:t("./base_plot"),categories:["noOpacity"],meta:{}}},{"./attributes":1075,"./base_plot":1076,"./calc":1077,"./defaults":1078,"./plot":1081}],1080:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../plot_api/plot_api"),i=t("../../components/fx"),o=t("../../lib"),s=t("../../components/drawing"),l=t("tinycolor2"),c=t("../../lib/svg_text_utils");function u(t,e,r,a){var i=t.map(function(t,e,r){var n,a=r[0],i=e.margin||{l:80,r:80,t:100,b:80},o=a.trace,s=o.domain,l=e.width,c=e.height,u=Math.floor(l*(s.x[1]-s.x[0])),h=Math.floor(c*(s.y[1]-s.y[0])),f=s.x[0]*l+i.l,p=e.height-s.y[1]*e.height+i.t,d=o.line.shape;n="all"===o.hoverinfo?["count","probability"]:(o.hoverinfo||"").split("+");var g={trace:o,key:o.uid,model:a,x:f,y:p,width:u,height:h,hoveron:o.hoveron,hoverinfoItems:n,arrangement:o.arrangement,bundlecolors:o.bundlecolors,sortpaths:o.sortpaths,labelfont:o.labelfont,categorylabelfont:o.tickfont,pathShape:d,dragDimension:null,margin:i,paths:[],dimensions:[],graphDiv:t,traceSelection:null,pathSelection:null,dimensionSelection:null};a.dimensions&&(F(g),R(g));return g}.bind(0,e,r)),l=a.selectAll("g.parcatslayer").data([null]);l.enter().append("g").attr("class","parcatslayer").style("pointer-events","all");var u=l.selectAll("g.trace.parcats").data(i,h),v=u.enter().append("g").attr("class","trace parcats");u.attr("transform",function(t){return"translate("+t.x+", "+t.y+")"}),v.append("g").attr("class","paths");var m=u.select("g.paths").selectAll("path.path").data(function(t){return t.paths},h);m.attr("fill",function(t){return t.model.color});var b=m.enter().append("path").attr("class","path").attr("stroke-opacity",0).attr("fill",function(t){return t.model.color}).attr("fill-opacity",0);x(b),m.attr("d",function(t){return t.svgD}),b.empty()||m.sort(p),m.exit().remove(),m.on("mouseover",d).on("mouseout",g).on("click",y),v.append("g").attr("class","dimensions");var k=u.select("g.dimensions").selectAll("g.dimension").data(function(t){return t.dimensions},h);k.enter().append("g").attr("class","dimension"),k.attr("transform",function(t){return"translate("+t.x+", 0)"}),k.exit().remove();var T=k.selectAll("g.category").data(function(t){return t.categories},h),M=T.enter().append("g").attr("class","category");T.attr("transform",function(t){return"translate(0, "+t.y+")"}),M.append("rect").attr("class","catrect").attr("pointer-events","none"),T.select("rect.catrect").attr("fill","none").attr("width",function(t){return t.width}).attr("height",function(t){return t.height}),_(M);var A=T.selectAll("rect.bandrect").data(function(t){return t.bands},h);A.each(function(){o.raiseToTop(this)}),A.attr("fill",function(t){return t.color});var O=A.enter().append("rect").attr("class","bandrect").attr("stroke-opacity",0).attr("fill",function(t){return t.color}).attr("fill-opacity",0);A.attr("fill",function(t){return t.color}).attr("width",function(t){return t.width}).attr("height",function(t){return t.height}).attr("y",function(t){return t.y}).attr("cursor",function(t){return"fixed"===t.parcatsViewModel.arrangement?"default":"perpendicular"===t.parcatsViewModel.arrangement?"ns-resize":"move"}),w(O),A.exit().remove(),M.append("text").attr("class","catlabel").attr("pointer-events","none");var z=e._fullLayout.paper_bgcolor;T.select("text.catlabel").attr("text-anchor",function(t){return f(t)?"start":"end"}).attr("alignment-baseline","middle").style("text-shadow",z+" -1px 1px 2px, "+z+" 1px 1px 2px, "+z+" 1px -1px 2px, "+z+" -1px -1px 2px").style("fill","rgb(0, 0, 0)").attr("x",function(t){return f(t)?t.width+5:-5}).attr("y",function(t){return t.height/2}).text(function(t){return t.model.categoryLabel}).each(function(t){s.font(n.select(this),t.parcatsViewModel.categorylabelfont),c.convertToTspans(n.select(this),e)}),M.append("text").attr("class","dimlabel"),T.select("text.dimlabel").attr("text-anchor","middle").attr("alignment-baseline","baseline").attr("cursor",function(t){return"fixed"===t.parcatsViewModel.arrangement?"default":"ew-resize"}).attr("x",function(t){return t.width/2}).attr("y",-5).text(function(t,e){return 0===e?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null}).each(function(t){s.font(n.select(this),t.parcatsViewModel.labelfont)}),T.selectAll("rect.bandrect").on("mouseover",S).on("mouseout",E),T.exit().remove(),k.call(n.behavior.drag().origin(function(t){return{x:t.x,y:0}}).on("dragstart",L).on("drag",C).on("dragend",P)),u.each(function(t){t.traceSelection=n.select(this),t.pathSelection=n.select(this).selectAll("g.paths").selectAll("path.path"),t.dimensionSelection=n.select(this).selectAll("g.dimensions").selectAll("g.dimension")}),u.exit().remove()}function h(t){return t.key}function f(t){var e=t.parcatsViewModel.dimensions.length,r=t.parcatsViewModel.dimensions[e-1].model.dimensionInd;return t.model.dimensionInd===r}function p(t,e){return t.model.rawColor>e.model.rawColor?1:t.model.rawColor<e.model.rawColor?-1:0}function d(t){if(!t.parcatsViewModel.dragDimension&&-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip")){o.raiseToTop(this),b(n.select(this));var e=v(t),r=m(t);if(t.parcatsViewModel.graphDiv.emit("plotly_hover",{points:e,event:n.event,constraints:r}),-1===t.parcatsViewModel.hoverinfoItems.indexOf("none")){var a,s,c,u=n.mouse(this)[0],h=t.parcatsViewModel.graphDiv,f=t.parcatsViewModel.trace,p=h._fullLayout,d=p._paperdiv.node().getBoundingClientRect(),g=t.parcatsViewModel.graphDiv.getBoundingClientRect();for(c=0;c<t.leftXs.length-1;c++)if(t.leftXs[c]+t.dimWidths[c]-2<=u&&u<=t.leftXs[c+1]+2){var y=t.parcatsViewModel.dimensions[c],x=t.parcatsViewModel.dimensions[c+1];a=(y.x+y.width+x.x)/2,s=(t.topYs[c]+t.topYs[c+1]+t.height)/2;break}var _=t.parcatsViewModel.x+a,w=t.parcatsViewModel.y+s,k=l.mostReadable(t.model.color,["black","white"]),T=t.model.count,M=T/t.parcatsViewModel.model.count,A={countLabel:T,probabilityLabel:M.toFixed(3)},S=[];-1!==t.parcatsViewModel.hoverinfoItems.indexOf("count")&&S.push(["Count:",A.countLabel].join(" ")),-1!==t.parcatsViewModel.hoverinfoItems.indexOf("probability")&&S.push(["P:",A.probabilityLabel].join(" "));var E=S.join("<br>"),L=n.mouse(h)[0];i.loneHover({trace:f,x:_-d.left+g.left,y:w-d.top+g.top,text:E,color:t.model.color,borderColor:"black",fontFamily:'Monaco, "Courier New", monospace',fontSize:10,fontColor:k,idealAlign:L<_?"right":"left",hovertemplate:(f.line||{}).hovertemplate,hovertemplateLabels:A,eventData:[{data:f._input,fullData:f,count:T,probability:M}]},{container:p._hoverlayer.node(),outerContainer:p._paper.node(),gd:h})}}}function g(t){if(!t.parcatsViewModel.dragDimension&&(x(n.select(this)),i.loneUnhover(t.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()),t.parcatsViewModel.pathSelection.sort(p),-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip"))){var e=v(t),r=m(t);t.parcatsViewModel.graphDiv.emit("plotly_unhover",{points:e,event:n.event,constraints:r})}}function v(t){for(var e=[],r=O(t.parcatsViewModel),n=0;n<t.model.valueInds.length;n++){var a=t.model.valueInds[n];e.push({curveNumber:r,pointNumber:a})}return e}function m(t){for(var e={},r=t.parcatsViewModel.model.dimensions,n=0;n<r.length;n++){var a=r[n],i=a.categories[t.model.categoryInds[n]];e[a.containerInd]=i.categoryValue}return void 0!==t.model.rawColor&&(e.color=t.model.rawColor),e}function y(t){if(-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip")){var e=v(t),r=m(t);t.parcatsViewModel.graphDiv.emit("plotly_click",{points:e,event:n.event,constraints:r})}}function x(t){t.attr("fill",function(t){return t.model.color}).attr("fill-opacity",.6).attr("stroke","lightgray").attr("stroke-width",.2).attr("stroke-opacity",1)}function b(t){t.attr("fill-opacity",.8).attr("stroke",function(t){return l.mostReadable(t.model.color,["black","white"])}).attr("stroke-width",.3)}function _(t){t.select("rect.catrect").attr("stroke","black").attr("stroke-width",1).attr("stroke-opacity",1)}function w(t){t.attr("stroke","black").attr("stroke-width",.2).attr("stroke-opacity",1).attr("fill-opacity",1)}function k(t){var e=t.parcatsViewModel.pathSelection,r=t.categoryViewModel.model.dimensionInd,n=t.categoryViewModel.model.categoryInd;return e.filter(function(e){return e.model.categoryInds[r]===n&&e.model.color===t.color})}function T(t,e,r){var a=n.select(t).datum(),i=a.categoryViewModel.model,o=a.parcatsViewModel.graphDiv,s=n.select(t.parentNode).selectAll("rect.bandrect"),l=[];s.each(function(t){k(t).each(function(t){Array.prototype.push.apply(l,v(t))})});var c={};c[i.dimensionInd]=i.categoryValue,o.emit(e,{points:l,event:r,constraints:c})}function M(t,e,r){var a=n.select(t).datum(),i=a.categoryViewModel.model,o=a.parcatsViewModel.graphDiv,s=k(a),l=[];s.each(function(t){Array.prototype.push.apply(l,v(t))});var c={};c[i.dimensionInd]=i.categoryValue,void 0!==a.rawColor&&(c.color=a.rawColor),o.emit(e,{points:l,event:r,constraints:c})}function A(t,e){var r,a,i=n.select(e.parentNode).select("rect.catrect"),o=i.node().getBoundingClientRect(),s=i.datum(),l=s.parcatsViewModel,c=l.model.dimensions[s.model.dimensionInd],u=l.trace,h=o.top+o.height/2;l.dimensions.length>1&&c.displayInd===l.dimensions.length-1?(r=o.left,a="left"):(r=o.left+o.width,a="right");var f=s.model.count,p=s.model.categoryLabel,d=f/s.parcatsViewModel.model.count,g={countLabel:f,categoryLabel:p,probabilityLabel:d.toFixed(3)},v=[];-1!==s.parcatsViewModel.hoverinfoItems.indexOf("count")&&v.push(["Count:",g.countLabel].join(" ")),-1!==s.parcatsViewModel.hoverinfoItems.indexOf("probability")&&v.push(["P("+g.categoryLabel+"):",g.probabilityLabel].join(" "));var m=v.join("<br>");return{trace:u,x:r-t.left,y:h-t.top,text:m,color:"lightgray",borderColor:"black",fontFamily:'Monaco, "Courier New", monospace',fontSize:12,fontColor:"black",idealAlign:a,hovertemplate:u.hovertemplate,hovertemplateLabels:g,eventData:[{data:u._input,fullData:u,count:f,category:p,probability:d}]}}function S(t){if(!t.parcatsViewModel.dragDimension&&-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip")){if(n.mouse(this)[1]<-1)return;var e,r=t.parcatsViewModel.graphDiv,a=r._fullLayout,s=a._paperdiv.node().getBoundingClientRect(),c=t.parcatsViewModel.hoveron;if("color"===c?(!function(t){var e=n.select(t).datum(),r=k(e);b(r),r.each(function(){o.raiseToTop(this)}),n.select(t.parentNode).selectAll("rect.bandrect").filter(function(t){return t.color===e.color}).each(function(){o.raiseToTop(this),n.select(this).attr("stroke","black").attr("stroke-width",1.5)})}(this),M(this,"plotly_hover",n.event)):(!function(t){n.select(t.parentNode).selectAll("rect.bandrect").each(function(t){var e=k(t);b(e),e.each(function(){o.raiseToTop(this)})}),n.select(t.parentNode).select("rect.catrect").attr("stroke","black").attr("stroke-width",2.5)}(this),T(this,"plotly_hover",n.event)),-1===t.parcatsViewModel.hoverinfoItems.indexOf("none"))"category"===c?e=A(s,this):"color"===c?e=function(t,e){var r,a,i=e.getBoundingClientRect(),o=n.select(e).datum(),s=o.categoryViewModel,c=s.parcatsViewModel,u=c.model.dimensions[s.model.dimensionInd],h=c.trace,f=i.y+i.height/2;c.dimensions.length>1&&u.displayInd===c.dimensions.length-1?(r=i.left,a="left"):(r=i.left+i.width,a="right");var p=s.model.categoryLabel,d=o.parcatsViewModel.model.count,g=0;o.categoryViewModel.bands.forEach(function(t){t.color===o.color&&(g+=t.count)});var v=s.model.count,m=0;c.pathSelection.each(function(t){t.model.color===o.color&&(m+=t.model.count)});var y=g/d,x=g/m,b=g/v,_={countLabel:d,categoryLabel:p,probabilityLabel:y.toFixed(3)},w=[];-1!==s.parcatsViewModel.hoverinfoItems.indexOf("count")&&w.push(["Count:",_.countLabel].join(" ")),-1!==s.parcatsViewModel.hoverinfoItems.indexOf("probability")&&(w.push("P(color \u2229 "+p+"): "+_.probabilityLabel),w.push("P("+p+" | color): "+x.toFixed(3)),w.push("P(color | "+p+"): "+b.toFixed(3)));var k=w.join("<br>"),T=l.mostReadable(o.color,["black","white"]);return{trace:h,x:r-t.left,y:f-t.top,text:k,color:o.color,borderColor:"black",fontFamily:'Monaco, "Courier New", monospace',fontColor:T,fontSize:10,idealAlign:a,hovertemplate:h.hovertemplate,hovertemplateLabels:_,eventData:[{data:h._input,fullData:h,category:p,count:d,probability:y,categorycount:v,colorcount:m,bandcolorcount:g}]}}(s,this):"dimension"===c&&(e=function(t,e){var r=[];return n.select(e.parentNode.parentNode).selectAll("g.category").select("rect.catrect").each(function(){r.push(A(t,this))}),r}(s,this)),e&&i.loneHover(e,{container:a._hoverlayer.node(),outerContainer:a._paper.node(),gd:r})}}function E(t){var e=t.parcatsViewModel;if(!e.dragDimension&&(x(e.pathSelection),_(e.dimensionSelection.selectAll("g.category")),w(e.dimensionSelection.selectAll("g.category").selectAll("rect.bandrect")),i.loneUnhover(e.graphDiv._fullLayout._hoverlayer.node()),e.pathSelection.sort(p),-1===e.hoverinfoItems.indexOf("skip"))){"color"===t.parcatsViewModel.hoveron?M(this,"plotly_unhover",n.event):T(this,"plotly_unhover",n.event)}}function L(t){"fixed"!==t.parcatsViewModel.arrangement&&(t.dragDimensionDisplayInd=t.model.displayInd,t.initialDragDimensionDisplayInds=t.parcatsViewModel.model.dimensions.map(function(t){return t.displayInd}),t.dragHasMoved=!1,t.dragCategoryDisplayInd=null,n.select(this).selectAll("g.category").select("rect.catrect").each(function(e){var r=n.mouse(this)[0],a=n.mouse(this)[1];-2<=r&&r<=e.width+2&&-2<=a&&a<=e.height+2&&(t.dragCategoryDisplayInd=e.model.displayInd,t.initialDragCategoryDisplayInds=t.model.categories.map(function(t){return t.displayInd}),e.model.dragY=e.y,o.raiseToTop(this.parentNode),n.select(this.parentNode).selectAll("rect.bandrect").each(function(e){e.y<a&&a<=e.y+e.height&&(t.potentialClickBand=this)}))}),t.parcatsViewModel.dragDimension=t,i.loneUnhover(t.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()))}function C(t){if("fixed"!==t.parcatsViewModel.arrangement&&(t.dragHasMoved=!0,null!==t.dragDimensionDisplayInd)){var e=t.dragDimensionDisplayInd,r=e-1,a=e+1,i=t.parcatsViewModel.dimensions[e];if(null!==t.dragCategoryDisplayInd){var o=i.categories[t.dragCategoryDisplayInd];o.model.dragY+=n.event.dy;var s=o.model.dragY,l=o.model.displayInd,c=i.categories,u=c[l-1],h=c[l+1];void 0!==u&&s<u.y+u.height/2&&(o.model.displayInd=u.model.displayInd,u.model.displayInd=l),void 0!==h&&s+o.height>h.y+h.height/2&&(o.model.displayInd=h.model.displayInd,h.model.displayInd=l),t.dragCategoryDisplayInd=o.model.displayInd}if(null===t.dragCategoryDisplayInd||"freeform"===t.parcatsViewModel.arrangement){i.model.dragX=n.event.x;var f=t.parcatsViewModel.dimensions[r],p=t.parcatsViewModel.dimensions[a];void 0!==f&&i.model.dragX<f.x+f.width&&(i.model.displayInd=f.model.displayInd,f.model.displayInd=e),void 0!==p&&i.model.dragX+i.width>p.x&&(i.model.displayInd=p.model.displayInd,p.model.displayInd=t.dragDimensionDisplayInd),t.dragDimensionDisplayInd=i.model.displayInd}F(t.parcatsViewModel),R(t.parcatsViewModel),I(t.parcatsViewModel),z(t.parcatsViewModel)}}function P(t){if("fixed"!==t.parcatsViewModel.arrangement&&null!==t.dragDimensionDisplayInd){n.select(this).selectAll("text").attr("font-weight","normal");var e={},r=O(t.parcatsViewModel),i=t.parcatsViewModel.model.dimensions.map(function(t){return t.displayInd}),o=t.initialDragDimensionDisplayInds.some(function(t,e){return t!==i[e]});o&&i.forEach(function(r,n){var a=t.parcatsViewModel.model.dimensions[n].containerInd;e["dimensions["+a+"].displayindex"]=r});var s=!1;if(null!==t.dragCategoryDisplayInd){var l=t.model.categories.map(function(t){return t.displayInd});if(s=t.initialDragCategoryDisplayInds.some(function(t,e){return t!==l[e]})){var c=t.model.categories.slice().sort(function(t,e){return t.displayInd-e.displayInd}),u=c.map(function(t){return t.categoryValue}),h=c.map(function(t){return t.categoryLabel});e["dimensions["+t.model.containerInd+"].categoryarray"]=[u],e["dimensions["+t.model.containerInd+"].ticktext"]=[h],e["dimensions["+t.model.containerInd+"].categoryorder"]="array"}}if(-1===t.parcatsViewModel.hoverinfoItems.indexOf("skip")&&!t.dragHasMoved&&t.potentialClickBand&&("color"===t.parcatsViewModel.hoveron?M(t.potentialClickBand,"plotly_click",n.event.sourceEvent):T(t.potentialClickBand,"plotly_click",n.event.sourceEvent)),t.model.dragX=null,null!==t.dragCategoryDisplayInd)t.parcatsViewModel.dimensions[t.dragDimensionDisplayInd].categories[t.dragCategoryDisplayInd].model.dragY=null,t.dragCategoryDisplayInd=null;t.dragDimensionDisplayInd=null,t.parcatsViewModel.dragDimension=null,t.dragHasMoved=null,t.potentialClickBand=null,F(t.parcatsViewModel),R(t.parcatsViewModel),n.transition().duration(300).ease("cubic-in-out").each(function(){I(t.parcatsViewModel,!0),z(t.parcatsViewModel,!0)}).each("end",function(){(o||s)&&a.restyle(t.parcatsViewModel.graphDiv,e,[r])})}}function O(t){for(var e,r=t.graphDiv._fullData,n=0;n<r.length;n++)if(t.key===r[n].uid){e=n;break}return e}function z(t,e){var r;void 0===e&&(e=!1),t.pathSelection.data(function(t){return t.paths},h),(r=t.pathSelection,e?r.transition():r).attr("d",function(t){return t.svgD})}function I(t,e){function r(t){return e?t.transition():t}void 0===e&&(e=!1),t.dimensionSelection.data(function(t){return t.dimensions},h);var a=t.dimensionSelection.selectAll("g.category").data(function(t){return t.categories},h);r(t.dimensionSelection).attr("transform",function(t){return"translate("+t.x+", 0)"}),r(a).attr("transform",function(t){return"translate(0, "+t.y+")"}),a.select(".dimlabel").text(function(t,e){return 0===e?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null}),a.select(".catlabel").attr("text-anchor",function(t){return f(t)?"start":"end"}).attr("x",function(t){return f(t)?t.width+5:-5}).each(function(t){var e,r;f(t)?(e=t.width+5,r="start"):(e=-5,r="end"),n.select(this).selectAll("tspan").attr("x",e).attr("text-anchor",r)});var i=a.selectAll("rect.bandrect").data(function(t){return t.bands},h),s=i.enter().append("rect").attr("class","bandrect").attr("cursor","move").attr("stroke-opacity",0).attr("fill",function(t){return t.color}).attr("fill-opacity",0);i.attr("fill",function(t){return t.color}).attr("width",function(t){return t.width}).attr("height",function(t){return t.height}).attr("y",function(t){return t.y}),w(s),i.each(function(){o.raiseToTop(this)}),i.exit().remove()}function D(t,e,r,a,i){var o,s,l=[],c=[];for(s=0;s<r.length-1;s++)o=n.interpolateNumber(r[s]+t[s],t[s+1]),l.push(o(i)),c.push(o(1-i));var u="M "+t[0]+","+e[0];for(u+="l"+r[0]+",0 ",s=1;s<r.length;s++)u+="C"+l[s-1]+","+e[s-1]+" "+c[s-1]+","+e[s]+" "+t[s]+","+e[s],u+="l"+r[s]+",0 ";for(u+="l0,"+a+" ",u+="l -"+r[r.length-1]+",0 ",s=r.length-2;s>=0;s--)u+="C"+c[s]+","+(e[s+1]+a)+" "+l[s]+","+(e[s]+a)+" "+(t[s]+r[s])+","+(e[s]+a),u+="l-"+r[s]+",0 ";return u+="Z"}function R(t){var e=t.dimensions,r=t.model,n=e.map(function(t){return t.categories.map(function(t){return t.y})}),a=t.model.dimensions.map(function(t){return t.categories.map(function(t){return t.displayInd})}),i=t.model.dimensions.map(function(t){return t.displayInd}),o=t.dimensions.map(function(t){return t.model.dimensionInd}),s=e.map(function(t){return t.x}),l=e.map(function(t){return t.width}),c=[];for(var u in r.paths)r.paths.hasOwnProperty(u)&&c.push(r.paths[u]);function h(t){var e=t.categoryInds.map(function(t,e){return a[e][t]});return o.map(function(t){return e[t]})}c.sort(function(e,r){var n=h(e),a=h(r);return"backward"===t.sortpaths&&(n.reverse(),a.reverse()),n.push(e.valueInds[0]),a.push(r.valueInds[0]),t.bundlecolors&&(n.unshift(e.rawColor),a.unshift(r.rawColor)),n<a?-1:n>a?1:0});for(var f=new Array(c.length),p=e[0].model.count,d=e[0].categories.map(function(t){return t.height}).reduce(function(t,e){return t+e}),g=0;g<c.length;g++){var v,m=c[g];v=p>0?d*(m.count/p):0;for(var y,x=new Array(n.length),b=0;b<m.categoryInds.length;b++){var _=m.categoryInds[b],w=a[b][_],k=i[b];x[k]=n[k][w],n[k][w]+=v;var T=t.dimensions[k].categories[w],M=T.bands.length,A=T.bands[M-1];if(void 0===A||m.rawColor!==A.rawColor){var S=void 0===A?0:A.y+A.height;T.bands.push({key:S,color:m.color,rawColor:m.rawColor,height:v,width:T.width,count:m.count,y:S,categoryViewModel:T,parcatsViewModel:t})}else{var E=T.bands[M-1];E.height+=v,E.count+=m.count}}y="hspline"===t.pathShape?D(s,x,l,v,.5):D(s,x,l,v,0),f[g]={key:m.valueInds[0],model:m,height:v,leftXs:s,topYs:x,dimWidths:l,svgD:y,parcatsViewModel:t}}t.paths=f}function F(t){var e=t.model.dimensions.map(function(t){return{displayInd:t.displayInd,dimensionInd:t.dimensionInd}});e.sort(function(t,e){return t.displayInd-e.displayInd});var r=[];for(var n in e){var a=e[n].dimensionInd,i=t.model.dimensions[a];r.push(B(t,i))}t.dimensions=r}function B(t,e){var r,n=t.model.dimensions.length,a=e.displayInd;r=40+(n>1?(t.width-80-16)/(n-1):0)*a;var i,o,s,l,c,u=[],h=t.model.maxCats,f=e.categories.length,p=e.count,d=t.height-8*(h-1),g=8*(h-f)/2,v=e.categories.map(function(t){return{displayInd:t.displayInd,categoryInd:t.categoryInd}});for(v.sort(function(t,e){return t.displayInd-e.displayInd}),c=0;c<f;c++)l=v[c].categoryInd,o=e.categories[l],i=p>0?o.count/p*d:0,s={key:o.valueInds[0],model:o,width:16,height:i,y:null!==o.dragY?o.dragY:g,bands:[],parcatsViewModel:t},g=g+i+8,u.push(s);return{key:e.dimensionInd,x:null!==e.dragX?e.dragX:r,y:0,width:16,model:e,categories:u,parcatsViewModel:t,dragCategoryDisplayInd:null,dragDimensionDisplayInd:null,initialDragDimensionDisplayInds:null,initialDragCategoryDisplayInds:null,dragHasMoved:null,potentialClickBand:null}}e.exports=function(t,e,r,n){u(r,t,n,e)}},{"../../components/drawing":612,"../../components/fx":630,"../../lib":717,"../../lib/svg_text_utils":741,"../../plot_api/plot_api":752,d3:165,tinycolor2:535}],1081:[function(t,e,r){"use strict";var n=t("./parcats");e.exports=function(t,e,r,a){var i=t._fullLayout,o=i._paper,s=i._size;n(t,o,e,{width:s.w,height:s.h,margin:{t:s.t,r:s.r,b:s.b,l:s.l}},r,a)}},{"./parcats":1080}],1082:[function(t,e,r){"use strict";var n=t("../../components/colorscale/attributes"),a=t("../../plots/cartesian/layout_attributes"),i=t("../../plots/font_attributes"),o=t("../../plots/domain").attributes,s=t("../../lib/extend").extendFlat,l=t("../../plot_api/plot_template").templatedArray;e.exports={domain:o({name:"parcoords",trace:!0,editType:"plot"}),labelangle:{valType:"angle",dflt:0,editType:"plot"},labelside:{valType:"enumerated",values:["top","bottom"],dflt:"top",editType:"plot"},labelfont:i({editType:"plot"}),tickfont:i({editType:"plot"}),rangefont:i({editType:"plot"}),dimensions:l("dimension",{label:{valType:"string",editType:"plot"},tickvals:s({},a.tickvals,{editType:"plot"}),ticktext:s({},a.ticktext,{editType:"plot"}),tickformat:s({},a.tickformat,{editType:"plot"}),visible:{valType:"boolean",dflt:!0,editType:"plot"},range:{valType:"info_array",items:[{valType:"number",editType:"plot"},{valType:"number",editType:"plot"}],editType:"plot"},constraintrange:{valType:"info_array",freeLength:!0,dimensions:"1-2",items:[{valType:"number",editType:"plot"},{valType:"number",editType:"plot"}],editType:"plot"},multiselect:{valType:"boolean",dflt:!0,editType:"plot"},values:{valType:"data_array",editType:"calc"},editType:"calc"}),line:s({editType:"calc"},n("line",{colorscaleDflt:"Viridis",autoColorDflt:!1,editTypeOverride:"calc"}))}},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plot_api/plot_template":755,"../../plots/cartesian/layout_attributes":777,"../../plots/domain":790,"../../plots/font_attributes":791}],1083:[function(t,e,r){"use strict";var n=t("./constants"),a=t("d3"),i=t("../../lib/gup").keyFun,o=t("../../lib/gup").repeat,s=t("../../lib").sorterAsc,l=n.bar.snapRatio;function c(t,e){return t*(1-l)+e*l}var u=n.bar.snapClose;function h(t,e){return t*(1-u)+e*u}function f(t,e,r,n){if(function(t,e){for(var r=0;r<e.length;r++)if(t>=e[r][0]&&t<=e[r][1])return!0;return!1}(r,n))return r;var a=t?-1:1,i=0,o=e.length-1;if(a<0){var s=i;i=o,o=s}for(var l=e[i],u=l,f=i;a*f<a*o;f+=a){var p=f+a,d=e[p];if(a*r<a*h(l,d))return c(l,u);if(a*r<a*d||p===o)return c(d,l);u=l,l=d}}function p(t){t.attr("x",-n.bar.captureWidth/2).attr("width",n.bar.captureWidth)}function d(t){t.attr("visibility","visible").style("visibility","visible").attr("fill","yellow").attr("opacity",0)}function g(t){if(!t.brush.filterSpecified)return"0,"+t.height;for(var e,r,n,a=v(t.brush.filter.getConsolidated(),t.height),i=[0],o=a.length?a[0][0]:null,s=0;s<a.length;s++)r=(e=a[s])[1]-e[0],i.push(o),i.push(r),(n=s+1)<a.length&&(o=a[n][0]-e[1]);return i.push(t.height),i}function v(t,e){return t.map(function(t){return t.map(function(t){return Math.max(0,t*e)}).sort(s)})}function m(){a.select(document.body).style("cursor",null)}function y(t){t.attr("stroke-dasharray",g)}function x(t,e){var r=a.select(t).selectAll(".highlight, .highlight-shadow");y(e?r.transition().duration(n.bar.snapDuration).each("end",e):r)}function b(t,e){var r,a=t.brush,i=NaN,o={};if(a.filterSpecified){var s=t.height,l=a.filter.getConsolidated(),c=v(l,s),u=NaN,h=NaN,f=NaN;for(r=0;r<=c.length;r++){var p=c[r];if(p&&p[0]<=e&&e<=p[1]){u=r;break}if(h=r?r-1:NaN,p&&p[0]>e){f=r;break}}if(i=u,isNaN(i)&&(i=isNaN(h)||isNaN(f)?isNaN(h)?f:h:e-c[h][1]<c[f][0]-e?h:f),!isNaN(i)){var d=c[i],g=function(t,e){var r=n.bar.handleHeight;if(!(e>t[1]+r||e<t[0]-r))return e>=.9*t[1]+.1*t[0]?"n":e<=.9*t[0]+.1*t[1]?"s":"ns"}(d,e);g&&(o.interval=l[i],o.intervalPix=d,o.region=g)}}if(t.ordinal&&!o.region){var m=t.unitTickvals,y=t.unitToPaddedPx.invert(e);for(r=0;r<m.length;r++){var x=[.25*m[Math.max(r-1,0)]+.75*m[r],.25*m[Math.min(r+1,m.length-1)]+.75*m[r]];if(y>=x[0]&&y<=x[1]){o.clickableOrdinalRange=x;break}}}return o}function _(t,e){a.event.sourceEvent.stopPropagation();var r=e.height-a.mouse(t)[1]-2*n.verticalPadding,i=e.brush.svgBrush;i.wasDragged=!0,i._dragging=!0,i.grabbingBar?i.newExtent=[r-i.grabPoint,r+i.barLength-i.grabPoint].map(e.unitToPaddedPx.invert):i.newExtent=[i.startExtent,e.unitToPaddedPx.invert(r)].sort(s),e.brush.filterSpecified=!0,i.extent=i.stayingIntervals.concat([i.newExtent]),i.brushCallback(e),x(t.parentNode)}function w(t,e){var r=b(e,e.height-a.mouse(t)[1]-2*n.verticalPadding),i="crosshair";r.clickableOrdinalRange?i="pointer":r.region&&(i=r.region+"-resize"),a.select(document.body).style("cursor",i)}function k(t){t.on("mousemove",function(t){a.event.preventDefault(),t.parent.inBrushDrag||w(this,t)}).on("mouseleave",function(t){t.parent.inBrushDrag||m()}).call(a.behavior.drag().on("dragstart",function(t){!function(t,e){a.event.sourceEvent.stopPropagation();var r=e.height-a.mouse(t)[1]-2*n.verticalPadding,i=e.unitToPaddedPx.invert(r),o=e.brush,s=b(e,r),l=s.interval,c=o.svgBrush;if(c.wasDragged=!1,c.grabbingBar="ns"===s.region,c.grabbingBar){var u=l.map(e.unitToPaddedPx);c.grabPoint=r-u[0]-n.verticalPadding,c.barLength=u[1]-u[0]}c.clickableOrdinalRange=s.clickableOrdinalRange,c.stayingIntervals=e.multiselect&&o.filterSpecified?o.filter.getConsolidated():[],l&&(c.stayingIntervals=c.stayingIntervals.filter(function(t){return t[0]!==l[0]&&t[1]!==l[1]})),c.startExtent=s.region?l["s"===s.region?1:0]:i,e.parent.inBrushDrag=!0,c.brushStartCallback()}(this,t)}).on("drag",function(t){_(this,t)}).on("dragend",function(t){!function(t,e){var r=e.brush,n=r.filter,i=r.svgBrush;i._dragging||(w(t,e),_(t,e),e.brush.svgBrush.wasDragged=!1),i._dragging=!1,a.event.sourceEvent.stopPropagation();var o=i.grabbingBar;if(i.grabbingBar=!1,i.grabLocation=void 0,e.parent.inBrushDrag=!1,m(),!i.wasDragged)return i.wasDragged=void 0,i.clickableOrdinalRange?r.filterSpecified&&e.multiselect?i.extent.push(i.clickableOrdinalRange):(i.extent=[i.clickableOrdinalRange],r.filterSpecified=!0):o?(i.extent=i.stayingIntervals,0===i.extent.length&&M(r)):M(r),i.brushCallback(e),x(t.parentNode),void i.brushEndCallback(r.filterSpecified?n.getConsolidated():[]);var s=function(){n.set(n.getConsolidated())};if(e.ordinal){var l=e.unitTickvals;l[l.length-1]<l[0]&&l.reverse(),i.newExtent=[f(0,l,i.newExtent[0],i.stayingIntervals),f(1,l,i.newExtent[1],i.stayingIntervals)];var c=i.newExtent[1]>i.newExtent[0];i.extent=i.stayingIntervals.concat(c?[i.newExtent]:[]),i.extent.length||M(r),i.brushCallback(e),c?x(t.parentNode,s):(s(),x(t.parentNode))}else s();i.brushEndCallback(r.filterSpecified?n.getConsolidated():[])}(this,t)}))}function T(t,e){return t[0]-e[0]}function M(t){t.filterSpecified=!1,t.svgBrush.extent=[[-1/0,1/0]]}function A(t){for(var e,r=t.slice(),n=[],a=r.shift();a;){for(e=a.slice();(a=r.shift())&&a[0]<=e[1];)e[1]=Math.max(e[1],a[1]);n.push(e)}return n}e.exports={makeBrush:function(t,e,r,n,a,i){var o,l=function(){var t,e,r=[];return{set:function(n){1===(r=n.map(function(t){return t.slice().sort(s)}).sort(T)).length&&r[0][0]===-1/0&&r[0][1]===1/0&&(r=[[0,-1]]),t=A(r),e=r.reduce(function(t,e){return[Math.min(t[0],e[0]),Math.max(t[1],e[1])]},[1/0,-1/0])},get:function(){return r.slice()},getConsolidated:function(){return t},getBounds:function(){return e}}}();return l.set(r),{filter:l,filterSpecified:e,svgBrush:{extent:[],brushStartCallback:n,brushCallback:(o=a,function(t){var e=t.brush,r=function(t){return t.svgBrush.extent.map(function(t){return t.slice()})}(e).slice();e.filter.set(r),o()}),brushEndCallback:i}}},ensureAxisBrush:function(t){var e=t.selectAll("."+n.cn.axisBrush).data(o,i);e.enter().append("g").classed(n.cn.axisBrush,!0),function(t){var e=t.selectAll(".background").data(o);e.enter().append("rect").classed("background",!0).call(p).call(d).style("pointer-events","auto").attr("transform","translate(0 "+n.verticalPadding+")"),e.call(k).attr("height",function(t){return t.height-n.verticalPadding});var r=t.selectAll(".highlight-shadow").data(o);r.enter().append("line").classed("highlight-shadow",!0).attr("x",-n.bar.width/2).attr("stroke-width",n.bar.width+n.bar.strokeWidth).attr("stroke",n.bar.strokeColor).attr("opacity",n.bar.strokeOpacity).attr("stroke-linecap","butt"),r.attr("y1",function(t){return t.height}).call(y);var a=t.selectAll(".highlight").data(o);a.enter().append("line").classed("highlight",!0).attr("x",-n.bar.width/2).attr("stroke-width",n.bar.width-n.bar.strokeWidth).attr("stroke",n.bar.fillColor).attr("opacity",n.bar.fillOpacity).attr("stroke-linecap","butt"),a.attr("y1",function(t){return t.height}).call(y)}(e)},cleanRanges:function(t,e){if(Array.isArray(t[0])?(t=t.map(function(t){return t.sort(s)}),t=e.multiselect?A(t.sort(T)):[t[0]]):t=[t.sort(s)],e.tickvals){var r=e.tickvals.slice().sort(s);if(!(t=t.map(function(t){var e=[f(0,r,t[0],[]),f(1,r,t[1],[])];if(e[1]>e[0])return e}).filter(function(t){return t})).length)return}return t.length>1?t:t[0]}}},{"../../lib":717,"../../lib/gup":715,"./constants":1086,d3:165}],1084:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../plots/get_data").getModuleCalcData,i=t("./plot"),o=t("../../constants/xmlns_namespaces");r.name="parcoords",r.plot=function(t){var e=a(t.calcdata,"parcoords")[0];e.length&&i(t,e)},r.clean=function(t,e,r,n){var a=n._has&&n._has("parcoords"),i=e._has&&e._has("parcoords");a&&!i&&(n._paperdiv.selectAll(".parcoords").remove(),n._glimages.selectAll("*").remove())},r.toSVG=function(t){var e=t._fullLayout._glimages,r=n.select(t).selectAll(".svg-container");r.filter(function(t,e){return e===r.size()-1}).selectAll(".gl-canvas-context, .gl-canvas-focus").each(function(){var t=this.toDataURL("image/png");e.append("svg:image").attr({xmlns:o.svg,"xlink:href":t,preserveAspectRatio:"none",x:0,y:0,width:this.width,height:this.height})}),window.setTimeout(function(){n.selectAll("#filterBarPattern").attr("id","filterBarPattern")},60)}},{"../../constants/xmlns_namespaces":694,"../../plots/get_data":800,"./plot":1093,d3:165}],1085:[function(t,e,r){"use strict";var n=t("../../lib").isArrayOrTypedArray,a=t("../../components/colorscale"),i=t("../../lib/gup").wrap;e.exports=function(t,e){var r,o;return a.hasColorscale(e,"line")&&n(e.line.color)?(r=e.line.color,o=a.extractOpts(e.line).colorscale,a.calc(t,e,{vals:r,containerStr:"line",cLetter:"c"})):(r=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=.5;return e}(e._length),o=[[0,e.line.color],[1,e.line.color]]),i({lineColor:r,cscale:o})}},{"../../components/colorscale":603,"../../lib":717,"../../lib/gup":715}],1086:[function(t,e,r){"use strict";e.exports={maxDimensionCount:60,overdrag:45,verticalPadding:2,tickDistance:50,canvasPixelRatio:1,blockLineCount:5e3,layers:["contextLineLayer","focusLineLayer","pickLineLayer"],axisTitleOffset:28,axisExtentOffset:10,deselectedLineColor:"#777",bar:{width:4,captureWidth:10,fillColor:"magenta",fillOpacity:1,snapDuration:150,snapRatio:.25,snapClose:.01,strokeColor:"white",strokeOpacity:1,strokeWidth:1,handleHeight:8,handleOpacity:1,handleOverlap:0},cn:{axisExtentText:"axis-extent-text",parcoordsLineLayers:"parcoords-line-layers",parcoordsLineLayer:"parcoords-lines",parcoords:"parcoords",parcoordsControlView:"parcoords-control-view",yAxis:"y-axis",axisOverlays:"axis-overlays",axis:"axis",axisHeading:"axis-heading",axisTitle:"axis-title",axisExtent:"axis-extent",axisExtentTop:"axis-extent-top",axisExtentTopText:"axis-extent-top-text",axisExtentBottom:"axis-extent-bottom",axisExtentBottomText:"axis-extent-bottom-text",axisBrush:"axis-brush"},id:{filterBarPattern:"filter-bar-pattern"}}},{}],1087:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/colorscale/helpers").hasColorscale,i=t("../../components/colorscale/defaults"),o=t("../../plots/domain").defaults,s=t("../../plots/array_container_defaults"),l=t("../../plots/cartesian/axes"),c=t("./attributes"),u=t("./axisbrush"),h=t("./constants").maxDimensionCount,f=t("./merge_length");function p(t,e,r,a){function i(r,a){return n.coerce(t,e,c.dimensions,r,a)}var o=i("values"),s=i("visible");if(o&&o.length||(s=e.visible=!1),s){i("label"),i("tickvals"),i("ticktext"),i("tickformat");var h=i("range");e._ax={_id:"y",type:"linear",showexponent:"all",exponentformat:"B",range:h},l.setConvert(e._ax,a.layout),i("multiselect");var f=i("constraintrange");f&&(e.constraintrange=u.cleanRanges(f,e))}}e.exports=function(t,e,r,l){function u(r,a){return n.coerce(t,e,c,r,a)}var d=t.dimensions;Array.isArray(d)&&d.length>h&&(n.log("parcoords traces support up to "+h+" dimensions at the moment"),d.splice(h));var g=s(t,e,{name:"dimensions",layout:l,handleItemDefaults:p}),v=function(t,e,r,o,s){var l=s("line.color",r);if(a(t,"line")&&n.isArrayOrTypedArray(l)){if(l.length)return s("line.colorscale"),i(t,e,o,s,{prefix:"line.",cLetter:"c"}),l.length;e.line.color=r}return 1/0}(t,e,r,l,u);o(e,l,u),Array.isArray(g)&&g.length||(e.visible=!1),f(e,g,"values",v);var m={family:l.font.family,size:Math.round(l.font.size/1.2),color:l.font.color};n.coerceFont(u,"labelfont",m),n.coerceFont(u,"tickfont",m),n.coerceFont(u,"rangefont",m),u("labelangle"),u("labelside")}},{"../../components/colorscale/defaults":601,"../../components/colorscale/helpers":602,"../../lib":717,"../../plots/array_container_defaults":761,"../../plots/cartesian/axes":765,"../../plots/domain":790,"./attributes":1082,"./axisbrush":1083,"./constants":1086,"./merge_length":1091}],1088:[function(t,e,r){"use strict";var n=t("../../lib").isTypedArray;r.convertTypedArray=function(t){return n(t)?Array.prototype.slice.call(t):t},r.isOrdinal=function(t){return!!t.tickvals},r.isVisible=function(t){return t.visible||!("visible"in t)}},{"../../lib":717}],1089:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc"),plot:t("./plot"),colorbar:{container:"line",min:"cmin",max:"cmax"},moduleType:"trace",name:"parcoords",basePlotModule:t("./base_plot"),categories:["gl","regl","noOpacity","noHover"],meta:{}}},{"./attributes":1082,"./base_plot":1084,"./calc":1085,"./defaults":1087,"./plot":1093}],1090:[function(t,e,r){"use strict";var n=t("glslify"),a=n(["precision highp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor;\n\nattribute vec4 p01_04, p05_08, p09_12, p13_16,\n p17_20, p21_24, p25_28, p29_32,\n p33_36, p37_40, p41_44, p45_48,\n p49_52, p53_56, p57_60, colors;\n\nuniform mat4 dim0A, dim1A, dim0B, dim1B, dim0C, dim1C, dim0D, dim1D,\n loA, hiA, loB, hiB, loC, hiC, loD, hiD;\n\nuniform vec2 resolution, viewBoxPos, viewBoxSize;\nuniform sampler2D mask, palette;\nuniform float maskHeight;\nuniform float drwLayer; // 0: context, 1: focus, 2: pick\nuniform vec4 contextColor;\n\nbool isPick = (drwLayer > 1.5);\nbool isContext = (drwLayer < 0.5);\n\nconst vec4 ZEROS = vec4(0.0, 0.0, 0.0, 0.0);\nconst vec4 UNITS = vec4(1.0, 1.0, 1.0, 1.0);\n\nfloat val(mat4 p, mat4 v) {\n return dot(matrixCompMult(p, v) * UNITS, UNITS);\n}\n\nfloat axisY(float ratio, mat4 A, mat4 B, mat4 C, mat4 D) {\n float y1 = val(A, dim0A) + val(B, dim0B) + val(C, dim0C) + val(D, dim0D);\n float y2 = val(A, dim1A) + val(B, dim1B) + val(C, dim1C) + val(D, dim1D);\n return y1 * (1.0 - ratio) + y2 * ratio;\n}\n\nint iMod(int a, int b) {\n return a - b * (a / b);\n}\n\nbool fOutside(float p, float lo, float hi) {\n return (lo < hi) && (lo > p || p > hi);\n}\n\nbool vOutside(vec4 p, vec4 lo, vec4 hi) {\n return (\n fOutside(p[0], lo[0], hi[0]) ||\n fOutside(p[1], lo[1], hi[1]) ||\n fOutside(p[2], lo[2], hi[2]) ||\n fOutside(p[3], lo[3], hi[3])\n );\n}\n\nbool mOutside(mat4 p, mat4 lo, mat4 hi) {\n return (\n vOutside(p[0], lo[0], hi[0]) ||\n vOutside(p[1], lo[1], hi[1]) ||\n vOutside(p[2], lo[2], hi[2]) ||\n vOutside(p[3], lo[3], hi[3])\n );\n}\n\nbool outsideBoundingBox(mat4 A, mat4 B, mat4 C, mat4 D) {\n return mOutside(A, loA, hiA) ||\n mOutside(B, loB, hiB) ||\n mOutside(C, loC, hiC) ||\n mOutside(D, loD, hiD);\n}\n\nbool outsideRasterMask(mat4 A, mat4 B, mat4 C, mat4 D) {\n mat4 pnts[4];\n pnts[0] = A;\n pnts[1] = B;\n pnts[2] = C;\n pnts[3] = D;\n\n for(int i = 0; i < 4; ++i) {\n for(int j = 0; j < 4; ++j) {\n for(int k = 0; k < 4; ++k) {\n if(0 == iMod(\n int(255.0 * texture2D(mask,\n vec2(\n (float(i * 2 + j / 2) + 0.5) / 8.0,\n (pnts[i][j][k] * (maskHeight - 1.0) + 1.0) / maskHeight\n ))[3]\n ) / int(pow(2.0, float(iMod(j * 4 + k, 8)))),\n 2\n )) return true;\n }\n }\n }\n return false;\n}\n\nvec4 position(bool isContext, float v, mat4 A, mat4 B, mat4 C, mat4 D) {\n float x = 0.5 * sign(v) + 0.5;\n float y = axisY(x, A, B, C, D);\n float z = 1.0 - abs(v);\n\n z += isContext ? 0.0 : 2.0 * float(\n outsideBoundingBox(A, B, C, D) ||\n outsideRasterMask(A, B, C, D)\n );\n\n return vec4(\n 2.0 * (vec2(x, y) * viewBoxSize + viewBoxPos) / resolution - 1.0,\n z,\n 1.0\n );\n}\n\nvoid main() {\n mat4 A = mat4(p01_04, p05_08, p09_12, p13_16);\n mat4 B = mat4(p17_20, p21_24, p25_28, p29_32);\n mat4 C = mat4(p33_36, p37_40, p41_44, p45_48);\n mat4 D = mat4(p49_52, p53_56, p57_60, ZEROS);\n\n float v = colors[3];\n\n gl_Position = position(isContext, v, A, B, C, D);\n\n fragColor =\n isContext ? vec4(contextColor) :\n isPick ? vec4(colors.rgb, 1.0) : texture2D(palette, vec2(abs(v), 0.5));\n}\n"]),i=n(["precision highp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor;\n\nvoid main() {\n gl_FragColor = fragColor;\n}\n"]),o=t("./constants").maxDimensionCount,s=t("../../lib"),l=1e-6,c=2048,u=new Uint8Array(4),h=new Uint8Array(4),f={shape:[256,1],format:"rgba",type:"uint8",mag:"nearest",min:"nearest"};function p(t,e,r,n,a){var i=t._gl;i.enable(i.SCISSOR_TEST),i.scissor(e,r,n,a),t.clear({color:[0,0,0,0],depth:1})}function d(t,e,r,n,a,i){var o=i.key;r.drawCompleted||(!function(t){t.read({x:0,y:0,width:1,height:1,data:u})}(t),r.drawCompleted=!0),function s(l){var c=Math.min(n,a-l*n);0===l&&(window.cancelAnimationFrame(r.currentRafs[o]),delete r.currentRafs[o],p(t,i.scissorX,i.scissorY,i.scissorWidth,i.viewBoxSize[1])),r.clearOnly||(i.count=2*c,i.offset=2*l*n,e(i),l*n+c<a&&(r.currentRafs[o]=window.requestAnimationFrame(function(){s(l+1)})),r.drawCompleted=!1)}(0)}function g(t,e){for(var r=new Array(256),n=0;n<256;n++)r[n]=t(n/255).concat(e);return r}function v(t,e){return(t>>>8*e)%256/255}function m(t,e,r){for(var n=new Array(8*e),a=0,i=0;i<e;i++)for(var o=0;o<2;o++)for(var s=0;s<4;s++){var l=4*t+s,c=r[64*i+l];63===l&&0===o&&(c*=-1),n[a++]=c}return n}function y(t){var e="0"+t;return e.substr(e.length-2)}function x(t){return t<o?"p"+y(t+1)+"_"+y(t+4):"colors"}function b(t,e,r,n,a,i,o,l,c,u,h,f,p){for(var d=[[],[]],g=0;g<64;g++)d[0][g]=g===a?1:0,d[1][g]=g===i?1:0;var v=t.lines.canvasOverdrag,m=t.domain,y=t.canvasWidth,x=t.canvasHeight,b=t.deselectedLines.color;return s.extendFlat({key:h,resolution:[y,x],viewBoxPos:[o+v,l],viewBoxSize:[c,u],i0:a,i1:i,dim0A:d[0].slice(0,16),dim0B:d[0].slice(16,32),dim0C:d[0].slice(32,48),dim0D:d[0].slice(48,64),dim1A:d[1].slice(0,16),dim1B:d[1].slice(16,32),dim1C:d[1].slice(32,48),dim1D:d[1].slice(48,64),drwLayer:f,contextColor:[b[0]/255,b[1]/255,b[2]/255,b[3]<1?b[3]:Math.max(1/255,Math.pow(1/t.lines.color.length,1/3))],scissorX:(n===e?0:o+v)+(t.pad.l-v)+t.layoutWidth*m.x[0],scissorWidth:(n===r?y-o+v:c+.5)+(n===e?o+v:0),scissorY:l+t.pad.b+t.layoutHeight*m.y[0],scissorHeight:u,viewportX:t.pad.l-v+t.layoutWidth*m.x[0],viewportY:t.pad.b+t.layoutHeight*m.y[0],viewportWidth:y,viewportHeight:x},p)}function _(t){var e=c-1,r=Math.max(0,Math.floor(t[0]*e),0),n=Math.min(e,Math.ceil(t[1]*e),e);return[Math.min(r,n),Math.max(r,n)]}e.exports=function(t,e){var r,n,u,y,w,k=e.context,T=e.pick,M=e.regl,A={currentRafs:{},drawCompleted:!0,clearOnly:!1},S=function(t){for(var e={},r=0;r<=o;r+=4)e[x(r)]=t.buffer({usage:"dynamic",type:"float",data:new Uint8Array(0)});return e}(M),E=M.texture(f),L=[];P(e);var C=M({profile:!1,blend:{enable:k,func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:1,dstAlpha:1},equation:{rgb:"add",alpha:"add"},color:[0,0,0,0]},depth:{enable:!k,mask:!0,func:"less",range:[0,1]},cull:{enable:!0,face:"back"},scissor:{enable:!0,box:{x:M.prop("scissorX"),y:M.prop("scissorY"),width:M.prop("scissorWidth"),height:M.prop("scissorHeight")}},viewport:{x:M.prop("viewportX"),y:M.prop("viewportY"),width:M.prop("viewportWidth"),height:M.prop("viewportHeight")},dither:!1,vert:a,frag:i,primitive:"lines",lineWidth:1,attributes:S,uniforms:{resolution:M.prop("resolution"),viewBoxPos:M.prop("viewBoxPos"),viewBoxSize:M.prop("viewBoxSize"),dim0A:M.prop("dim0A"),dim1A:M.prop("dim1A"),dim0B:M.prop("dim0B"),dim1B:M.prop("dim1B"),dim0C:M.prop("dim0C"),dim1C:M.prop("dim1C"),dim0D:M.prop("dim0D"),dim1D:M.prop("dim1D"),loA:M.prop("loA"),hiA:M.prop("hiA"),loB:M.prop("loB"),hiB:M.prop("hiB"),loC:M.prop("loC"),hiC:M.prop("hiC"),loD:M.prop("loD"),hiD:M.prop("hiD"),palette:E,contextColor:M.prop("contextColor"),mask:M.prop("maskTexture"),drwLayer:M.prop("drwLayer"),maskHeight:M.prop("maskHeight")},offset:M.prop("offset"),count:M.prop("count")});function P(t){r=t.model,n=t.viewModel,u=n.dimensions.slice(),y=u[0]?u[0].values.length:0;var e=r.lines,a=T?e.color.map(function(t,r){return r/e.color.length}):e.color,i=function(t,e,r){for(var n,a=new Array(t*(o+4)),i=0,s=0;s<t;s++){for(var c=0;c<o;c++)a[i++]=c<e.length?e[c].paddedUnitValues[s]:.5;a[i++]=v(s,2),a[i++]=v(s,1),a[i++]=v(s,0),a[i++]=(n=r[s],Math.max(l,Math.min(1-l,n)))}return a}(y,u,a);!function(t,e,r){for(var n=0;n<=o;n+=4)t[x(n)](m(n/4,e,r))}(S,y,i),k||T||(E=M.texture(s.extendFlat({data:g(r.unitToColor,255)},f)))}return{render:function(t,e,n){var a,i,o,s=t.length,l=1/0,h=-1/0;for(a=0;a<s;a++)t[a].dim0.canvasX<l&&(l=t[a].dim0.canvasX,i=a),t[a].dim1.canvasX>h&&(h=t[a].dim1.canvasX,o=a);0===s&&p(M,0,0,r.canvasWidth,r.canvasHeight);var f=function(t){var e,r,n,a=[[],[]];for(n=0;n<64;n++){var i=!t&&n<u.length?u[n].brush.filter.getBounds():[-1/0,1/0];a[0][n]=i[0],a[1][n]=i[1]}var o=8*c,s=new Array(o);for(e=0;e<o;e++)s[e]=255;if(!t)for(e=0;e<u.length;e++){var l=e%8,h=(e-l)/8,f=Math.pow(2,l),p=u[e].brush.filter.get();if(!(p.length<2)){var d=_(p[0])[1];for(r=1;r<p.length;r++){var g=_(p[r]);for(n=d+1;n<g[0];n++)s[8*n+h]&=~f;d=Math.max(d,g[1])}}}var v={shape:[8,c],format:"alpha",type:"uint8",mag:"nearest",min:"nearest",data:s};return w?w(v):w=M.texture(v),{maskTexture:w,maskHeight:c,loA:a[0].slice(0,16),loB:a[0].slice(16,32),loC:a[0].slice(32,48),loD:a[0].slice(48,64),hiA:a[1].slice(0,16),hiB:a[1].slice(16,32),hiC:a[1].slice(32,48),hiD:a[1].slice(48,64)}}(k);for(a=0;a<s;a++){var g=t[a],v=g.dim0.crossfilterDimensionIndex,m=g.dim1.crossfilterDimensionIndex,x=g.canvasX,S=g.canvasY,E=x+g.panelSizeX;if(e||!L[v]||L[v][0]!==x||L[v][1]!==E){L[v]=[x,E];var P=b(r,i,o,a,v,m,x,S,g.panelSizeX,g.panelSizeY,g.dim0.crossfilterDimensionIndex,k?0:T?2:1,f);A.clearOnly=n;var O=e?r.lines.blockLineCount:y;d(M,C,A,O,y,P)}}},readPixel:function(t,e){return M.read({x:t,y:e,width:1,height:1,data:h}),h},readPixels:function(t,e,r,n){var a=new Uint8Array(4*r*n);return M.read({x:t,y:e,width:r,height:n,data:a}),a},destroy:function(){for(var e in t.style["pointer-events"]="none",E.destroy(),w&&w.destroy(),S)S[e].destroy()},update:P}}},{"../../lib":717,"./constants":1086,glslify:410}],1091:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){var a,i;for(n||(n=1/0),a=0;a<e.length;a++)(i=e[a]).visible&&(n=Math.min(n,i[r].length));for(n===1/0&&(n=0),t._length=n,a=0;a<e.length;a++)(i=e[a]).visible&&(i._length=n);return n}},{}],1092:[function(t,e,r){"use strict";var n=t("d3"),a=t("color-rgba"),i=t("../../plots/cartesian/axes"),o=t("../../lib"),s=t("../../lib/svg_text_utils"),l=t("../../components/drawing"),c=t("../../components/colorscale"),u=t("../../lib/gup"),h=u.keyFun,f=u.repeat,p=u.unwrap,d=t("./helpers"),g=t("./constants"),v=t("./axisbrush"),m=t("./lines");function y(t,e,r){return o.aggNums(t,null,e,r)}function x(t,e){return _(y(Math.min,t,e),y(Math.max,t,e))}function b(t){var e=t.range;return e?_(e[0],e[1]):x(t.values,t._length)}function _(t,e){return!isNaN(t)&&isFinite(t)||(t=0),!isNaN(e)&&isFinite(e)||(e=0),t===e&&(0===t?(t-=1,e+=1):(t*=.9,e*=1.1)),[t,e]}function w(t,e,r,a,i){var o,s,l=b(r);return a?n.scale.ordinal().domain(a.map((o=n.format(r.tickformat),s=i,s?function(t,e){var r=s[e];return null==r?o(t):r}:o))).range(a.map(function(r){var n=(r-l[0])/(l[1]-l[0]);return t-e+n*(2*e-t)})):n.scale.linear().domain(l).range([t-e,e])}function k(t){if(t.tickvals){var e=b(t);return n.scale.ordinal().domain(t.tickvals).range(t.tickvals.map(function(t){return(t-e[0])/(e[1]-e[0])}))}}function T(t){var e=t.map(function(t){return t[0]}),r=t.map(function(t){var e=a(t[1]);return n.rgb("rgb("+e[0]+","+e[1]+","+e[2]+")")}),i="rgb".split("").map(function(t){return n.scale.linear().clamp(!0).domain(e).range(r.map((a=t,function(t){return t[a]})));var a});return function(t){return i.map(function(e){return e(t)})}}function M(t){return t.dimensions.some(function(t){return t.brush.filterSpecified})}function A(t,e,r){var a=r.width,i=r.height,s=r.dimensions,l=r.canvasPixelRatio,c=function(t){return a*t/Math.max(1,r.colCount-1)},u=g.verticalPadding/i,h=function(t,e){return n.scale.linear().range([e,t-e])}(i,g.verticalPadding),f={key:r.key,xScale:c,model:r,inBrushDrag:!1},p={};return f.dimensions=s.filter(d.isVisible).map(function(a,s){var m=function(t,e){return n.scale.linear().domain(b(t)).range([e,1-e])}(a,u),y=p[a.label];p[a.label]=(y||0)+1;var x=a.label+(y?"__"+y:""),_=a.constraintrange,T=_&&_.length;T&&!Array.isArray(_[0])&&(_=[_]);var A=T?_.map(function(t){return t.map(m)}):[[-1/0,1/0]],S=a.values;S.length>a._length&&(S=S.slice(0,a._length));var E,L=a.tickvals;function C(t,e){return{val:t,text:E[e]}}function P(t,e){return t.val-e.val}if(Array.isArray(L)&&L.length){E=a.ticktext,Array.isArray(E)&&E.length?E.length>L.length?E=E.slice(0,L.length):L.length>E.length&&(L=L.slice(0,E.length)):E=L.map(n.format(a.tickformat));for(var O=1;O<L.length;O++)if(L[O]<L[O-1]){for(var z=L.map(C).sort(P),I=0;I<L.length;I++)L[I]=z[I].val,E[I]=z[I].text;break}}else L=void 0;return S=d.convertTypedArray(S),{key:x,label:a.label,tickFormat:a.tickformat,tickvals:L,ticktext:E,ordinal:d.isOrdinal(a),multiselect:a.multiselect,xIndex:s,crossfilterDimensionIndex:s,visibleIndex:a._index,height:i,values:S,paddedUnitValues:S.map(m),unitTickvals:L&&L.map(m),xScale:c,x:c(s),canvasX:c(s)*l,unitToPaddedPx:h,domainScale:w(i,g.verticalPadding,a,L,E),ordinalScale:k(a),parent:f,model:r,brush:v.makeBrush(t,T,A,function(){t.linePickActive(!1)},function(){var e=f;e.focusLayer&&e.focusLayer.render(e.panels,!0);var r=M(e);!t.contextShown()&&r?(e.contextLayer&&e.contextLayer.render(e.panels,!0),t.contextShown(!0)):t.contextShown()&&!r&&(e.contextLayer&&e.contextLayer.render(e.panels,!0,!0),t.contextShown(!1))},function(r){if(f.focusLayer.render(f.panels,!0),f.pickLayer&&f.pickLayer.render(f.panels,!0),t.linePickActive(!0),e&&e.filterChanged){var n=m.invert,i=r.map(function(t){return t.map(n).sort(o.sorterAsc)}).sort(function(t,e){return t[0]-e[0]});e.filterChanged(f.key,a._index,i)}})}}),f}function S(t){t.classed(g.cn.axisExtentText,!0).attr("text-anchor","middle").style("cursor","default").style("user-select","none")}function E(t,e){var r="top"===e?1:-1,n=t*Math.PI/180;return{dir:r,dx:Math.sin(n),dy:Math.cos(n),degrees:t}}function L(t,e){for(var r=e.panels||(e.panels=[]),n=t.data(),a=0;a<n.length-1;a++){var i=r[a]||(r[a]={}),o=n[a],s=n[a+1];i.dim0=o,i.dim1=s,i.canvasX=o.canvasX,i.panelSizeX=s.canvasX-o.canvasX,i.panelSizeY=e.model.canvasHeight,i.y=0,i.canvasY=0}}function C(t,e){return i.tickText(t._ax,e,!1).text}function P(t,e){if(t.ordinal)return"";var r=t.domainScale.domain(),n=r[e?r.length-1:0];return C(t.model.dimensions[t.visibleIndex],n)}e.exports=function(t,e,r,u){var y=t._fullLayout,w=y._toppaper,k=y._glcontainer;!function(t){for(var e=0;e<t.length;e++)for(var r=0;r<t[e].length;r++)for(var n=t[e][r].trace,a=n.dimensions,o=0;o<a.length;o++){var s=a[o].values,l=a[o]._ax;l&&(l.range?l.range=_(l.range[0],l.range[1]):l.range=x(s,n._length),l.dtick||(l.dtick=.01*(Math.abs(l.range[1]-l.range[0])||1)),l.tickformat=a[o].tickformat,i.calcTicks(l),l.cleanRange())}}(e);var O,z,I=(O=!0,z=!1,{linePickActive:function(t){return arguments.length?O=!!t:O},contextShown:function(t){return arguments.length?z=!!t:z}}),D=e.filter(function(t){return p(t).trace.visible}).map(function(t,e,r){var i=p(e),s=i.trace,l=d.convertTypedArray(i.lineColor),u=s.line,h={color:a(g.deselectedLineColor)},f=c.extractOpts(u),v=f.reversescale?c.flipScale(i.cscale):i.cscale,m=s.domain,y=s.dimensions,x=t.width,_=s.labelangle,w=s.labelside,k=s.labelfont,M=s.tickfont,A=s.rangefont,S=o.extendDeepNoArrays({},u,{color:l.map(n.scale.linear().domain(b({values:l,range:[f.min,f.max],_length:s._length}))),blockLineCount:g.blockLineCount,canvasOverdrag:g.overdrag*g.canvasPixelRatio}),E=Math.floor(x*(m.x[1]-m.x[0])),L=Math.floor(t.height*(m.y[1]-m.y[0])),C=t.margin||{l:80,r:80,t:100,b:80},P=E,O=L;return{key:r,colCount:y.filter(d.isVisible).length,dimensions:y,tickDistance:g.tickDistance,unitToColor:T(v),lines:S,deselectedLines:h,labelAngle:_,labelSide:w,labelFont:k,tickFont:M,rangeFont:A,layoutWidth:x,layoutHeight:t.height,domain:m,translateX:m.x[0]*x,translateY:t.height-m.y[1]*t.height,pad:C,canvasWidth:P*g.canvasPixelRatio+2*S.canvasOverdrag,canvasHeight:O*g.canvasPixelRatio,width:P,height:O,canvasPixelRatio:g.canvasPixelRatio}}.bind(0,r)).map(A.bind(0,I,u));k.each(function(t,e){return o.extendFlat(t,D[e])});var R=k.selectAll(".gl-canvas").each(function(t){t.viewModel=D[0],t.model=t.viewModel?t.viewModel.model:null}),F=null;R.filter(function(t){return t.pick}).style("pointer-events","auto").on("mousemove",function(t){if(I.linePickActive()&&t.lineLayer&&u&&u.hover){var e=n.event,r=this.width,a=this.height,i=n.mouse(this),o=i[0],s=i[1];if(o<0||s<0||o>=r||s>=a)return;var l=t.lineLayer.readPixel(o,a-1-s),c=0!==l[3],h=c?l[2]+256*(l[1]+256*l[0]):null,f={x:o,y:s,clientX:e.clientX,clientY:e.clientY,dataIndex:t.model.key,curveNumber:h};h!==F&&(c?u.hover(f):u.unhover&&u.unhover(f),F=h)}}),R.style("opacity",function(t){return t.pick?0:1}),w.style("background","rgba(255, 255, 255, 0)");var B=w.selectAll("."+g.cn.parcoords).data(D,h);B.exit().remove(),B.enter().append("g").classed(g.cn.parcoords,!0).style("shape-rendering","crispEdges").style("pointer-events","none"),B.attr("transform",function(t){return"translate("+t.model.translateX+","+t.model.translateY+")"});var N=B.selectAll("."+g.cn.parcoordsControlView).data(f,h);N.enter().append("g").classed(g.cn.parcoordsControlView,!0),N.attr("transform",function(t){return"translate("+t.model.pad.l+","+t.model.pad.t+")"});var j=N.selectAll("."+g.cn.yAxis).data(function(t){return t.dimensions},h);j.enter().append("g").classed(g.cn.yAxis,!0),N.each(function(t){L(j,t)}),R.each(function(t){if(t.viewModel){!t.lineLayer||u?t.lineLayer=m(this,t):t.lineLayer.update(t),(t.key||0===t.key)&&(t.viewModel[t.key]=t.lineLayer);var e=!t.context||u;t.lineLayer.render(t.viewModel.panels,e)}}),j.attr("transform",function(t){return"translate("+t.xScale(t.xIndex)+", 0)"}),j.call(n.behavior.drag().origin(function(t){return t}).on("drag",function(t){var e=t.parent;I.linePickActive(!1),t.x=Math.max(-g.overdrag,Math.min(t.model.width+g.overdrag,n.event.x)),t.canvasX=t.x*t.model.canvasPixelRatio,j.sort(function(t,e){return t.x-e.x}).each(function(e,r){e.xIndex=r,e.x=t===e?e.x:e.xScale(e.xIndex),e.canvasX=e.x*e.model.canvasPixelRatio}),L(j,e),j.filter(function(e){return 0!==Math.abs(t.xIndex-e.xIndex)}).attr("transform",function(t){return"translate("+t.xScale(t.xIndex)+", 0)"}),n.select(this).attr("transform","translate("+t.x+", 0)"),j.each(function(r,n,a){a===t.parent.key&&(e.dimensions[n]=r)}),e.contextLayer&&e.contextLayer.render(e.panels,!1,!M(e)),e.focusLayer.render&&e.focusLayer.render(e.panels)}).on("dragend",function(t){var e=t.parent;t.x=t.xScale(t.xIndex),t.canvasX=t.x*t.model.canvasPixelRatio,L(j,e),n.select(this).attr("transform",function(t){return"translate("+t.x+", 0)"}),e.contextLayer&&e.contextLayer.render(e.panels,!1,!M(e)),e.focusLayer&&e.focusLayer.render(e.panels),e.pickLayer&&e.pickLayer.render(e.panels,!0),I.linePickActive(!0),u&&u.axesMoved&&u.axesMoved(e.key,e.dimensions.map(function(t){return t.crossfilterDimensionIndex}))})),j.exit().remove();var V=j.selectAll("."+g.cn.axisOverlays).data(f,h);V.enter().append("g").classed(g.cn.axisOverlays,!0),V.selectAll("."+g.cn.axis).remove();var U=V.selectAll("."+g.cn.axis).data(f,h);U.enter().append("g").classed(g.cn.axis,!0),U.each(function(t){var e=t.model.height/t.model.tickDistance,r=t.domainScale,a=r.domain();n.select(this).call(n.svg.axis().orient("left").tickSize(4).outerTickSize(2).ticks(e,t.tickFormat).tickValues(t.ordinal?a:null).tickFormat(function(e){return d.isOrdinal(t)?e:C(t.model.dimensions[t.visibleIndex],e)}).scale(r)),l.font(U.selectAll("text"),t.model.tickFont)}),U.selectAll(".domain, .tick>line").attr("fill","none").attr("stroke","black").attr("stroke-opacity",.25).attr("stroke-width","1px"),U.selectAll("text").style("text-shadow","1px 1px 1px #fff, -1px -1px 1px #fff, 1px -1px 1px #fff, -1px 1px 1px #fff").style("cursor","default").style("user-select","none");var q=V.selectAll("."+g.cn.axisHeading).data(f,h);q.enter().append("g").classed(g.cn.axisHeading,!0);var H=q.selectAll("."+g.cn.axisTitle).data(f,h);H.enter().append("text").classed(g.cn.axisTitle,!0).attr("text-anchor","middle").style("cursor","ew-resize").style("user-select","none").style("pointer-events","auto"),H.text(function(t){return t.label}).each(function(e){var r=n.select(this);l.font(r,e.model.labelFont),s.convertToTspans(r,t)}).attr("transform",function(t){var e=E(t.model.labelAngle,t.model.labelSide),r=g.axisTitleOffset;return(e.dir>0?"":"translate(0,"+(2*r+t.model.height)+")")+"rotate("+e.degrees+")translate("+-r*e.dx+","+-r*e.dy+")"}).attr("text-anchor",function(t){var e=E(t.model.labelAngle,t.model.labelSide);return 2*Math.abs(e.dx)>Math.abs(e.dy)?e.dir*e.dx<0?"start":"end":"middle"});var G=V.selectAll("."+g.cn.axisExtent).data(f,h);G.enter().append("g").classed(g.cn.axisExtent,!0);var Y=G.selectAll("."+g.cn.axisExtentTop).data(f,h);Y.enter().append("g").classed(g.cn.axisExtentTop,!0),Y.attr("transform","translate(0,"+-g.axisExtentOffset+")");var W=Y.selectAll("."+g.cn.axisExtentTopText).data(f,h);W.enter().append("text").classed(g.cn.axisExtentTopText,!0).call(S),W.text(function(t){return P(t,!0)}).each(function(t){l.font(n.select(this),t.model.rangeFont)});var X=G.selectAll("."+g.cn.axisExtentBottom).data(f,h);X.enter().append("g").classed(g.cn.axisExtentBottom,!0),X.attr("transform",function(t){return"translate(0,"+(t.model.height+g.axisExtentOffset)+")"});var Z=X.selectAll("."+g.cn.axisExtentBottomText).data(f,h);Z.enter().append("text").classed(g.cn.axisExtentBottomText,!0).attr("dy","0.75em").call(S),Z.text(function(t){return P(t,!1)}).each(function(t){l.font(n.select(this),t.model.rangeFont)}),v.ensureAxisBrush(V)}},{"../../components/colorscale":603,"../../components/drawing":612,"../../lib":717,"../../lib/gup":715,"../../lib/svg_text_utils":741,"../../plots/cartesian/axes":765,"./axisbrush":1083,"./constants":1086,"./helpers":1088,"./lines":1090,"color-rgba":124,d3:165}],1093:[function(t,e,r){"use strict";var n=t("./parcoords"),a=t("../../lib/prepare_regl"),i=t("./helpers").isVisible;function o(t,e,r){var n=e.indexOf(r),a=t.indexOf(n);return-1===a&&(a+=e.length),a}e.exports=function(t,e){var r=t._fullLayout;if(a(t)){var s={},l={},c={},u={},h=r._size;e.forEach(function(e,r){var n=e[0].trace;c[r]=n.index;var a=u[r]=n._fullInput.index;s[r]=t.data[a].dimensions,l[r]=t.data[a].dimensions.slice()});n(t,e,{width:h.w,height:h.h,margin:{t:h.t,r:h.r,b:h.b,l:h.l}},{filterChanged:function(e,n,a){var i=l[e][n],o=a.map(function(t){return t.slice()}),s="dimensions["+n+"].constraintrange",h=r._tracePreGUI[t._fullData[c[e]]._fullInput.uid];if(void 0===h[s]){var f=i.constraintrange;h[s]=f||null}var p=t._fullData[c[e]].dimensions[n];o.length?(1===o.length&&(o=o[0]),i.constraintrange=o,p.constraintrange=o.slice(),o=[o]):(delete i.constraintrange,delete p.constraintrange,o=null);var d={};d[s]=o,t.emit("plotly_restyle",[d,[u[e]]])},hover:function(e){t.emit("plotly_hover",e)},unhover:function(e){t.emit("plotly_unhover",e)},axesMoved:function(e,r){var n=function(t,e){return function(r,n){return o(t,e,r)-o(t,e,n)}}(r,l[e].filter(i));s[e].sort(n),l[e].filter(function(t){return!i(t)}).sort(function(t){return l[e].indexOf(t)}).forEach(function(t){s[e].splice(s[e].indexOf(t),1),s[e].splice(l[e].indexOf(t),0,t)}),t.emit("plotly_restyle",[{dimensions:[s[e]]},[u[e]]])}})}}},{"../../lib/prepare_regl":730,"./helpers":1088,"./parcoords":1092}],1094:[function(t,e,r){"use strict";var n=t("../../plots/attributes"),a=t("../../plots/domain").attributes,i=t("../../plots/font_attributes"),o=t("../../components/color/attributes"),s=t("../../plots/template_attributes").hovertemplateAttrs,l=t("../../plots/template_attributes").texttemplateAttrs,c=t("../../lib/extend").extendFlat,u=i({editType:"plot",arrayOk:!0,colorEditType:"plot"});e.exports={labels:{valType:"data_array",editType:"calc"},label0:{valType:"number",dflt:0,editType:"calc"},dlabel:{valType:"number",dflt:1,editType:"calc"},values:{valType:"data_array",editType:"calc"},marker:{colors:{valType:"data_array",editType:"calc"},line:{color:{valType:"color",dflt:o.defaultLine,arrayOk:!0,editType:"style"},width:{valType:"number",min:0,dflt:0,arrayOk:!0,editType:"style"},editType:"calc"},editType:"calc"},text:{valType:"data_array",editType:"plot"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"style"},scalegroup:{valType:"string",dflt:"",editType:"calc"},textinfo:{valType:"flaglist",flags:["label","text","value","percent"],extras:["none"],editType:"calc"},hoverinfo:c({},n.hoverinfo,{flags:["label","text","value","percent","name"]}),hovertemplate:s({},{keys:["label","color","value","percent","text"]}),texttemplate:l({editType:"plot"},{keys:["label","color","value","percent","text"]}),textposition:{valType:"enumerated",values:["inside","outside","auto","none"],dflt:"auto",arrayOk:!0,editType:"plot"},textfont:c({},u,{}),insidetextorientation:{valType:"enumerated",values:["horizontal","radial","tangential","auto"],dflt:"auto",editType:"plot"},insidetextfont:c({},u,{}),outsidetextfont:c({},u,{}),automargin:{valType:"boolean",dflt:!1,editType:"plot"},title:{text:{valType:"string",dflt:"",editType:"plot"},font:c({},u,{}),position:{valType:"enumerated",values:["top left","top center","top right","middle center","bottom left","bottom center","bottom right"],editType:"plot"},editType:"plot"},domain:a({name:"pie",trace:!0,editType:"calc"}),hole:{valType:"number",min:0,max:1,dflt:0,editType:"calc"},sort:{valType:"boolean",dflt:!0,editType:"calc"},direction:{valType:"enumerated",values:["clockwise","counterclockwise"],dflt:"counterclockwise",editType:"calc"},rotation:{valType:"number",min:-360,max:360,dflt:0,editType:"calc"},pull:{valType:"number",min:0,max:1,dflt:0,arrayOk:!0,editType:"calc"},_deprecated:{title:{valType:"string",dflt:"",editType:"calc"},titlefont:c({},u,{}),titleposition:{valType:"enumerated",values:["top left","top center","top right","middle center","bottom left","bottom center","bottom right"],editType:"calc"}}}},{"../../components/color/attributes":590,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/domain":790,"../../plots/font_attributes":791,"../../plots/template_attributes":841}],1095:[function(t,e,r){"use strict";var n=t("../../plots/plots");r.name="pie",r.plot=function(t,e,a,i){n.plotBasePlot(r.name,t,e,a,i)},r.clean=function(t,e,a,i){n.cleanBasePlot(r.name,t,e,a,i)}},{"../../plots/plots":826}],1096:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("tinycolor2"),i=t("../../components/color"),o={};function s(t){return function(e,r){return!!e&&(!!(e=a(e)).isValid()&&(e=i.addOpacity(e,e.getAlpha()),t[r]||(t[r]=e),e))}}function l(t,e){var r,n=JSON.stringify(t),i=e[n];if(!i){for(i=t.slice(),r=0;r<t.length;r++)i.push(a(t[r]).lighten(20).toHexString());for(r=0;r<t.length;r++)i.push(a(t[r]).darken(20).toHexString());e[n]=i}return i}e.exports={calc:function(t,e){var r,a,i=[],o=t._fullLayout,l=o.hiddenlabels||[],c=e.labels,u=e.marker.colors||[],h=e.values,f=e._length,p=e._hasValues&&f;if(e.dlabel)for(c=new Array(f),r=0;r<f;r++)c[r]=String(e.label0+r*e.dlabel);var d={},g=s(o["_"+e.type+"colormap"]),v=0,m=!1;for(r=0;r<f;r++){var y,x,b;if(p){if(y=h[r],!n(y))continue;if((y=+y)<0)continue}else y=1;void 0!==(x=c[r])&&""!==x||(x=r);var _=d[x=String(x)];void 0===_?(d[x]=i.length,(b=-1!==l.indexOf(x))||(v+=y),i.push({v:y,label:x,color:g(u[r],x),i:r,pts:[r],hidden:b})):(m=!0,(a=i[_]).v+=y,a.pts.push(r),a.hidden||(v+=y),!1===a.color&&u[r]&&(a.color=g(u[r],x)))}return("funnelarea"===e.type?m:e.sort)&&i.sort(function(t,e){return e.v-t.v}),i[0]&&(i[0].vTotal=v),i},crossTraceCalc:function(t,e){var r=(e||{}).type;r||(r="pie");var n=t._fullLayout,a=t.calcdata,i=n[r+"colorway"],s=n["_"+r+"colormap"];n["extend"+r+"colors"]&&(i=l(i,o));for(var c=0,u=0;u<a.length;u++){var h=a[u];if(h[0].trace.type===r)for(var f=0;f<h.length;f++){var p=h[f];!1===p.color&&(s[p.label]?p.color=s[p.label]:(s[p.label]=p.color=i[c%i.length],c++))}}},makePullColorFn:s,generateExtendedColors:l}},{"../../components/color":591,"fast-isnumeric":228,tinycolor2:535}],1097:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("./attributes"),o=t("../../plots/domain").defaults,s=t("../bar/defaults").handleText;function l(t,e){var r=Array.isArray(t),i=a.isArrayOrTypedArray(e),o=Math.min(r?t.length:1/0,i?e.length:1/0);if(isFinite(o)||(o=0),o&&i){for(var s,l=0;l<o;l++){var c=e[l];if(n(c)&&c>0){s=!0;break}}s||(o=0)}return{hasLabels:r,hasValues:i,len:o}}e.exports={handleLabelsAndValues:l,supplyDefaults:function(t,e,r,n){function c(r,n){return a.coerce(t,e,i,r,n)}var u=l(c("labels"),c("values")),h=u.len;if(e._hasLabels=u.hasLabels,e._hasValues=u.hasValues,!e._hasLabels&&e._hasValues&&(c("label0"),c("dlabel")),h){e._length=h,c("marker.line.width")&&c("marker.line.color"),c("marker.colors"),c("scalegroup");var f,p=c("text"),d=c("texttemplate");if(d||(f=c("textinfo",Array.isArray(p)?"text+percent":"percent")),c("hovertext"),c("hovertemplate"),d||f&&"none"!==f){var g=c("textposition");s(t,e,n,c,g,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),(Array.isArray(g)||"auto"===g||"outside"===g)&&c("automargin"),("inside"===g||"auto"===g||Array.isArray(g))&&c("insidetextorientation")}o(e,n,c);var v=c("hole");if(c("title.text")){var m=c("title.position",v?"middle center":"top center");v||"middle center"!==m||(e.title.position="top center"),a.coerceFont(c,"title.font",n.font)}c("sort"),c("direction"),c("rotation"),c("pull")}else e.visible=!1}}},{"../../lib":717,"../../plots/domain":790,"../bar/defaults":860,"./attributes":1094,"fast-isnumeric":228}],1098:[function(t,e,r){"use strict";var n=t("../../components/fx/helpers").appendArrayMultiPointValues;e.exports=function(t,e){var r={curveNumber:e.index,pointNumbers:t.pts,data:e._input,fullData:e,label:t.label,color:t.color,value:t.v,percent:t.percent,text:t.text,v:t.v};return 1===t.pts.length&&(r.pointNumber=r.i=t.pts[0]),n(r,e,t.pts),"funnelarea"===e.type&&(delete r.v,delete r.i),r}},{"../../components/fx/helpers":626}],1099:[function(t,e,r){"use strict";var n=t("../../lib");r.formatPiePercent=function(t,e){var r=(100*t).toPrecision(3);return-1!==r.lastIndexOf(".")&&(r=r.replace(/[.]?0+$/,"")),n.numSeparate(r,e)+"%"},r.formatPieValue=function(t,e){var r=t.toPrecision(10);return-1!==r.lastIndexOf(".")&&(r=r.replace(/[.]?0+$/,"")),n.numSeparate(r,e)},r.getFirstFilled=function(t,e){if(Array.isArray(t))for(var r=0;r<e.length;r++){var n=t[e[r]];if(n||0===n||""===n)return n}},r.castOption=function(t,e){return Array.isArray(t)?r.getFirstFilled(t,e):t||void 0}},{"../../lib":717}],1100:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults").supplyDefaults,supplyLayoutDefaults:t("./layout_defaults"),layoutAttributes:t("./layout_attributes"),calc:t("./calc").calc,crossTraceCalc:t("./calc").crossTraceCalc,plot:t("./plot").plot,style:t("./style"),styleOne:t("./style_one"),moduleType:"trace",name:"pie",basePlotModule:t("./base_plot"),categories:["pie-like","pie","showLegend"],meta:{}}},{"./attributes":1094,"./base_plot":1095,"./calc":1096,"./defaults":1097,"./layout_attributes":1101,"./layout_defaults":1102,"./plot":1103,"./style":1104,"./style_one":1105}],1101:[function(t,e,r){"use strict";e.exports={hiddenlabels:{valType:"data_array",editType:"calc"},piecolorway:{valType:"colorlist",editType:"calc"},extendpiecolors:{valType:"boolean",dflt:!0,editType:"calc"}}},{}],1102:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e){function r(r,i){return n.coerce(t,e,a,r,i)}r("hiddenlabels"),r("piecolorway",e.colorway),r("extendpiecolors")}},{"../../lib":717,"./layout_attributes":1101}],1103:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../plots/plots"),i=t("../../components/fx"),o=t("../../components/color"),s=t("../../components/drawing"),l=t("../../lib"),c=t("../../lib/svg_text_utils"),u=t("../bar/uniform_text"),h=u.recordMinTextSize,f=u.clearMinTextSize,p=t("../bar/constants").TEXTPAD,d=t("./helpers"),g=t("./event_data"),v=t("../../lib").isValidTextValue;function m(t,e,r){var a=r[0],o=a.trace,s=a.cx,c=a.cy;"_hasHoverLabel"in o||(o._hasHoverLabel=!1),"_hasHoverEvent"in o||(o._hasHoverEvent=!1),t.on("mouseover",function(t){var r=e._fullLayout,u=e._fullData[o.index];if(!e._dragging&&!1!==r.hovermode){var h=u.hoverinfo;if(Array.isArray(h)&&(h=i.castHoverinfo({hoverinfo:[d.castOption(h,t.pts)],_module:o._module},r,0)),"all"===h&&(h="label+text+value+percent+name"),u.hovertemplate||"none"!==h&&"skip"!==h&&h){var f=t.rInscribed||0,p=s+t.pxmid[0]*(1-f),v=c+t.pxmid[1]*(1-f),m=r.separators,y=[];if(h&&-1!==h.indexOf("label")&&y.push(t.label),t.text=d.castOption(u.hovertext||u.text,t.pts),h&&-1!==h.indexOf("text")){var x=t.text;l.isValidTextValue(x)&&y.push(x)}t.value=t.v,t.valueLabel=d.formatPieValue(t.v,m),h&&-1!==h.indexOf("value")&&y.push(t.valueLabel),t.percent=t.v/a.vTotal,t.percentLabel=d.formatPiePercent(t.percent,m),h&&-1!==h.indexOf("percent")&&y.push(t.percentLabel);var b=u.hoverlabel,_=b.font;i.loneHover({trace:o,x0:p-f*a.r,x1:p+f*a.r,y:v,text:y.join("<br>"),name:u.hovertemplate||-1!==h.indexOf("name")?u.name:void 0,idealAlign:t.pxmid[0]<0?"left":"right",color:d.castOption(b.bgcolor,t.pts)||t.color,borderColor:d.castOption(b.bordercolor,t.pts),fontFamily:d.castOption(_.family,t.pts),fontSize:d.castOption(_.size,t.pts),fontColor:d.castOption(_.color,t.pts),nameLength:d.castOption(b.namelength,t.pts),textAlign:d.castOption(b.align,t.pts),hovertemplate:d.castOption(u.hovertemplate,t.pts),hovertemplateLabels:t,eventData:[g(t,u)]},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:e}),o._hasHoverLabel=!0}o._hasHoverEvent=!0,e.emit("plotly_hover",{points:[g(t,u)],event:n.event})}}),t.on("mouseout",function(t){var r=e._fullLayout,a=e._fullData[o.index],s=n.select(this).datum();o._hasHoverEvent&&(t.originalEvent=n.event,e.emit("plotly_unhover",{points:[g(s,a)],event:n.event}),o._hasHoverEvent=!1),o._hasHoverLabel&&(i.loneUnhover(r._hoverlayer.node()),o._hasHoverLabel=!1)}),t.on("click",function(t){var r=e._fullLayout,a=e._fullData[o.index];e._dragging||!1===r.hovermode||(e._hoverdata=[g(t,a)],i.click(e,n.event))})}function y(t,e,r){var n=d.castOption(t.insidetextfont.color,e.pts);!n&&t._input.textfont&&(n=d.castOption(t._input.textfont.color,e.pts));var a=d.castOption(t.insidetextfont.family,e.pts)||d.castOption(t.textfont.family,e.pts)||r.family,i=d.castOption(t.insidetextfont.size,e.pts)||d.castOption(t.textfont.size,e.pts)||r.size;return{color:n||o.contrast(e.color),family:a,size:i}}function x(t,e){for(var r,n,a=0;a<t.length;a++)if((n=(r=t[a][0]).trace).title.text){var i=n.title.text;n._meta&&(i=l.templateString(i,n._meta));var o=s.tester.append("text").attr("data-notex",1).text(i).call(s.font,n.title.font).call(c.convertToTspans,e),u=s.bBox(o.node(),!0);r.titleBox={width:u.width,height:u.height},o.remove()}}function b(t,e,r){var n=r.r||e.rpx1,a=e.rInscribed;if(e.startangle===e.stopangle)return{rCenter:1-a,scale:0,rotate:0,textPosAngle:0};var i,o=e.ring,s=1===o&&Math.abs(e.startangle-e.stopangle)===2*Math.PI,l=e.halfangle,c=e.midangle,u=r.trace.insidetextorientation,h="horizontal"===u,f="tangential"===u,p="radial"===u,d="auto"===u,g=[];if(!d){var v,m=function(r,a){if(function(t,e){var r=t.startangle,n=t.stopangle;return r>e&&e>n||r<e&&e<n}(e,r)){var s=Math.abs(r-e.startangle),l=Math.abs(r-e.stopangle),c=s<l?s:l;(i="tan"===a?w(t,n,o,c,0):_(t,n,o,c,Math.PI/2)).textPosAngle=r,g.push(i)}};if(h||f){for(v=4;v>=-4;v-=2)m(Math.PI*v,"tan");for(v=4;v>=-4;v-=2)m(Math.PI*(v+1),"tan")}if(h||p){for(v=4;v>=-4;v-=2)m(Math.PI*(v+1.5),"rad");for(v=4;v>=-4;v-=2)m(Math.PI*(v+.5),"rad")}}if(s||d||h){var y=Math.sqrt(t.width*t.width+t.height*t.height);if((i={scale:a*n*2/y,rCenter:1-a,rotate:0}).textPosAngle=(e.startangle+e.stopangle)/2,i.scale>=1)return i;g.push(i)}(d||p)&&((i=_(t,n,o,l,c)).textPosAngle=(e.startangle+e.stopangle)/2,g.push(i)),(d||f)&&((i=w(t,n,o,l,c)).textPosAngle=(e.startangle+e.stopangle)/2,g.push(i));for(var x=0,b=0,k=0;k<g.length;k++){var T=g[k].scale;if(b<T&&(b=T,x=k),!d&&b>=1)break}return g[x]}function _(t,e,r,n,a){e=Math.max(0,e-2*p);var i=t.width/t.height,o=M(i,n,e,r);return{scale:2*o/t.height,rCenter:k(i,o/e),rotate:T(a)}}function w(t,e,r,n,a){e=Math.max(0,e-2*p);var i=t.height/t.width,o=M(i,n,e,r);return{scale:2*o/t.width,rCenter:k(i,o/e),rotate:T(a+Math.PI/2)}}function k(t,e){return Math.cos(e)-t*e}function T(t){return(180/Math.PI*t+720)%180-90}function M(t,e,r,n){var a=t+1/(2*Math.tan(e));return r*Math.min(1/(Math.sqrt(a*a+.5)+a),n/(Math.sqrt(t*t+n/2)+t))}function A(t,e){return t.v!==e.vTotal||e.trace.hole?Math.min(1/(1+1/Math.sin(t.halfangle)),t.ring/2):1}function S(t,e){var r=e.pxmid[0],n=e.pxmid[1],a=t.width/2,i=t.height/2;return r<0&&(a*=-1),n<0&&(i*=-1),{scale:1,rCenter:1,rotate:0,x:a+Math.abs(i)*(a>0?1:-1)/2,y:i/(1+r*r/(n*n)),outside:!0}}function E(t,e){var r,n,a,i=t.trace,o={x:t.cx,y:t.cy},s={tx:0,ty:0};s.ty+=i.title.font.size,a=C(i),-1!==i.title.position.indexOf("top")?(o.y-=(1+a)*t.r,s.ty-=t.titleBox.height):-1!==i.title.position.indexOf("bottom")&&(o.y+=(1+a)*t.r);var l,c,u=(l=t.r,c=t.trace.aspectratio,l/(void 0===c?1:c)),h=e.w*(i.domain.x[1]-i.domain.x[0])/2;return-1!==i.title.position.indexOf("left")?(h+=u,o.x-=(1+a)*u,s.tx+=t.titleBox.width/2):-1!==i.title.position.indexOf("center")?h*=2:-1!==i.title.position.indexOf("right")&&(h+=u,o.x+=(1+a)*u,s.tx-=t.titleBox.width/2),r=h/t.titleBox.width,n=L(t,e)/t.titleBox.height,{x:o.x,y:o.y,scale:Math.min(r,n),tx:s.tx,ty:s.ty}}function L(t,e){var r=t.trace,n=e.h*(r.domain.y[1]-r.domain.y[0]);return Math.min(t.titleBox.height,n/2)}function C(t){var e,r=t.pull;if(!r)return 0;if(Array.isArray(r))for(r=0,e=0;e<t.pull.length;e++)t.pull[e]>r&&(r=t.pull[e]);return r}function P(t,e){for(var r=[],n=0;n<t.length;n++){var a=t[n][0],i=a.trace,o=i.domain,s=e.w*(o.x[1]-o.x[0]),l=e.h*(o.y[1]-o.y[0]);i.title.text&&"middle center"!==i.title.position&&(l-=L(a,e));var c=s/2,u=l/2;"funnelarea"!==i.type||i.scalegroup||(u/=i.aspectratio),a.r=Math.min(c,u)/(1+C(i)),a.cx=e.l+e.w*(i.domain.x[1]+i.domain.x[0])/2,a.cy=e.t+e.h*(1-i.domain.y[0])-l/2,i.title.text&&-1!==i.title.position.indexOf("bottom")&&(a.cy-=L(a,e)),i.scalegroup&&-1===r.indexOf(i.scalegroup)&&r.push(i.scalegroup)}!function(t,e){for(var r,n,a,i=0;i<e.length;i++){var o=1/0,s=e[i];for(n=0;n<t.length;n++)if(r=t[n][0],(a=r.trace).scalegroup===s){var l;if("pie"===a.type)l=r.r*r.r;else if("funnelarea"===a.type){var c,u;a.aspectratio>1?(c=r.r,u=c/a.aspectratio):(u=r.r,c=u*a.aspectratio),c*=(1+a.baseratio)/2,l=c*u}o=Math.min(o,l/r.vTotal)}for(n=0;n<t.length;n++)if(r=t[n][0],(a=r.trace).scalegroup===s){var h=o*r.vTotal;"funnelarea"===a.type&&(h/=(1+a.baseratio)/2,h/=a.aspectratio),r.r=Math.sqrt(h)}}}(t,r)}function O(t,e){return[t*Math.sin(e),-t*Math.cos(e)]}function z(t,e,r){var n=t._fullLayout,a=r.trace,i=a.texttemplate,o=a.textinfo;if(!i&&o&&"none"!==o){var s,c=o.split("+"),u=function(t){return-1!==c.indexOf(t)},h=u("label"),f=u("text"),p=u("value"),g=u("percent"),m=n.separators;if(s=h?[e.label]:[],f){var y=d.getFirstFilled(a.text,e.pts);v(y)&&s.push(y)}p&&s.push(d.formatPieValue(e.v,m)),g&&s.push(d.formatPiePercent(e.v/r.vTotal,m)),e.text=s.join("<br>")}if(i){var x=l.castOption(a,e.i,"texttemplate");if(x){var b=function(t){return{label:t.label,value:t.v,valueLabel:d.formatPieValue(t.v,n.separators),percent:t.v/r.vTotal,percentLabel:d.formatPiePercent(t.v/r.vTotal,n.separators),color:t.color,text:t.text,customdata:l.castOption(a,t.i,"customdata")}}(e),_=d.getFirstFilled(a.text,e.pts);(v(_)||""===_)&&(b.text=_),e.text=l.texttemplateString(x,b,t._fullLayout._d3locale,b,a._meta||{})}else e.text=""}}function I(t,e){var r=t.rotate*Math.PI/180,n=Math.cos(r),a=Math.sin(r),i=(e.left+e.right)/2,o=(e.top+e.bottom)/2;t.textX=i*n-o*a,t.textY=i*a+o*n,t.noCenter=!0}e.exports={plot:function(t,e){var r=t._fullLayout,i=r._size;f("pie",r),x(e,t),P(e,i);var u=l.makeTraceGroups(r._pielayer,e,"trace").each(function(e){var u=n.select(this),f=e[0],p=f.trace;!function(t){var e,r,n,a=t[0],i=a.r,o=a.trace,s=o.rotation*Math.PI/180,l=2*Math.PI/a.vTotal,c="px0",u="px1";if("counterclockwise"===o.direction){for(e=0;e<t.length&&t[e].hidden;e++);if(e===t.length)return;s+=l*t[e].v,l*=-1,c="px1",u="px0"}for(n=O(i,s),e=0;e<t.length;e++)(r=t[e]).hidden||(r[c]=n,r.startangle=s,s+=l*r.v/2,r.pxmid=O(i,s),r.midangle=s,s+=l*r.v/2,n=O(i,s),r.stopangle=s,r[u]=n,r.largeArc=r.v>a.vTotal/2?1:0,r.halfangle=Math.PI*Math.min(r.v/a.vTotal,.5),r.ring=1-o.hole,r.rInscribed=A(r,a))}(e),u.attr("stroke-linejoin","round"),u.each(function(){var g=n.select(this).selectAll("g.slice").data(e);g.enter().append("g").classed("slice",!0),g.exit().remove();var v=[[[],[]],[[],[]]],x=!1;g.each(function(a,i){if(a.hidden)n.select(this).selectAll("path,g").remove();else{a.pointNumber=a.i,a.curveNumber=p.index,v[a.pxmid[1]<0?0:1][a.pxmid[0]<0?0:1].push(a);var o=f.cx,u=f.cy,g=n.select(this),_=g.selectAll("path.surface").data([a]);if(_.enter().append("path").classed("surface",!0).style({"pointer-events":"all"}),g.call(m,t,e),p.pull){var w=+d.castOption(p.pull,a.pts)||0;w>0&&(o+=w*a.pxmid[0],u+=w*a.pxmid[1])}a.cxFinal=o,a.cyFinal=u;var k=p.hole;if(a.v===f.vTotal){var T="M"+(o+a.px0[0])+","+(u+a.px0[1])+C(a.px0,a.pxmid,!0,1)+C(a.pxmid,a.px0,!0,1)+"Z";k?_.attr("d","M"+(o+k*a.px0[0])+","+(u+k*a.px0[1])+C(a.px0,a.pxmid,!1,k)+C(a.pxmid,a.px0,!1,k)+"Z"+T):_.attr("d",T)}else{var M=C(a.px0,a.px1,!0,1);if(k){var A=1-k;_.attr("d","M"+(o+k*a.px1[0])+","+(u+k*a.px1[1])+C(a.px1,a.px0,!1,k)+"l"+A*a.px0[0]+","+A*a.px0[1]+M+"Z")}else _.attr("d","M"+o+","+u+"l"+a.px0[0]+","+a.px0[1]+M+"Z")}z(t,a,f);var E=d.castOption(p.textposition,a.pts),L=g.selectAll("g.slicetext").data(a.text&&"none"!==E?[0]:[]);L.enter().append("g").classed("slicetext",!0),L.exit().remove(),L.each(function(){var g=l.ensureSingle(n.select(this),"text","",function(t){t.attr("data-notex",1)}),v=l.ensureUniformFontSize(t,"outside"===E?function(t,e,r){var n=d.castOption(t.outsidetextfont.color,e.pts)||d.castOption(t.textfont.color,e.pts)||r.color,a=d.castOption(t.outsidetextfont.family,e.pts)||d.castOption(t.textfont.family,e.pts)||r.family,i=d.castOption(t.outsidetextfont.size,e.pts)||d.castOption(t.textfont.size,e.pts)||r.size;return{color:n,family:a,size:i}}(p,a,r.font):y(p,a,r.font));g.text(a.text).attr({class:"slicetext",transform:"","text-anchor":"middle"}).call(s.font,v).call(c.convertToTspans,t);var m,_=s.bBox(g.node());if("outside"===E)m=S(_,a);else if(m=b(_,a,f),"auto"===E&&m.scale<1){var w=l.ensureUniformFontSize(t,p.outsidetextfont);g.call(s.font,w),m=S(_=s.bBox(g.node()),a)}var k=m.textPosAngle,T=void 0===k?a.pxmid:O(f.r,k);if(m.targetX=o+T[0]*m.rCenter+(m.x||0),m.targetY=u+T[1]*m.rCenter+(m.y||0),I(m,_),m.outside){var M=m.targetY;a.yLabelMin=M-_.height/2,a.yLabelMid=M,a.yLabelMax=M+_.height/2,a.labelExtraX=0,a.labelExtraY=0,x=!0}m.fontSize=v.size,h(p.type,m,r),e[i].transform=m,g.attr("transform",l.getTextTransform(m))})}function C(t,e,r,n){var i=n*(e[0]-t[0]),o=n*(e[1]-t[1]);return"a"+n*f.r+","+n*f.r+" 0 "+a.largeArc+(r?" 1 ":" 0 ")+i+","+o}});var _=n.select(this).selectAll("g.titletext").data(p.title.text?[0]:[]);if(_.enter().append("g").classed("titletext",!0),_.exit().remove(),_.each(function(){var e,r=l.ensureSingle(n.select(this),"text","",function(t){t.attr("data-notex",1)}),a=p.title.text;p._meta&&(a=l.templateString(a,p._meta)),r.text(a).attr({class:"titletext",transform:"","text-anchor":"middle"}).call(s.font,p.title.font).call(c.convertToTspans,t),e="middle center"===p.title.position?function(t){var e=Math.sqrt(t.titleBox.width*t.titleBox.width+t.titleBox.height*t.titleBox.height);return{x:t.cx,y:t.cy,scale:t.trace.hole*t.r*2/e,tx:0,ty:-t.titleBox.height/2+t.trace.title.font.size}}(f):E(f,i),r.attr("transform","translate("+e.x+","+e.y+")"+(e.scale<1?"scale("+e.scale+")":"")+"translate("+e.tx+","+e.ty+")")}),x&&function(t,e){var r,n,a,i,o,s,l,c,u,h,f,p,g;function v(t,e){return t.pxmid[1]-e.pxmid[1]}function m(t,e){return e.pxmid[1]-t.pxmid[1]}function y(t,r){r||(r={});var a,c,u,f,p,g,v=r.labelExtraY+(n?r.yLabelMax:r.yLabelMin),m=n?t.yLabelMin:t.yLabelMax,y=n?t.yLabelMax:t.yLabelMin,x=t.cyFinal+o(t.px0[1],t.px1[1]),b=v-m;if(b*l>0&&(t.labelExtraY=b),Array.isArray(e.pull))for(c=0;c<h.length;c++)(u=h[c])===t||(d.castOption(e.pull,t.pts)||0)>=(d.castOption(e.pull,u.pts)||0)||((t.pxmid[1]-u.pxmid[1])*l>0?(f=u.cyFinal+o(u.px0[1],u.px1[1]),(b=f-m-t.labelExtraY)*l>0&&(t.labelExtraY+=b)):(y+t.labelExtraY-x)*l>0&&(a=3*s*Math.abs(c-h.indexOf(t)),p=u.cxFinal+i(u.px0[0],u.px1[0]),(g=p+a-(t.cxFinal+t.pxmid[0])-t.labelExtraX)*s>0&&(t.labelExtraX+=g)))}for(n=0;n<2;n++)for(a=n?v:m,o=n?Math.max:Math.min,l=n?1:-1,r=0;r<2;r++){for(i=r?Math.max:Math.min,s=r?1:-1,(c=t[n][r]).sort(a),u=t[1-n][r],h=u.concat(c),p=[],f=0;f<c.length;f++)void 0!==c[f].yLabelMid&&p.push(c[f]);for(g=!1,f=0;n&&f<u.length;f++)if(void 0!==u[f].yLabelMid){g=u[f];break}for(f=0;f<p.length;f++){var x=f&&p[f-1];g&&!f&&(x=g),y(p[f],x)}}}(v,p),function(t,e){t.each(function(t){var r=n.select(this);if(t.labelExtraX||t.labelExtraY){var a=r.select("g.slicetext text");t.transform.targetX+=t.labelExtraX,t.transform.targetY+=t.labelExtraY,a.attr("transform",l.getTextTransform(t.transform));var i=t.cxFinal+t.pxmid[0],s=t.cyFinal+t.pxmid[1],c="M"+i+","+s,u=(t.yLabelMax-t.yLabelMin)*(t.pxmid[0]<0?-1:1)/4;if(t.labelExtraX){var h=t.labelExtraX*t.pxmid[1]/t.pxmid[0],f=t.yLabelMid+t.labelExtraY-(t.cyFinal+t.pxmid[1]);Math.abs(h)>Math.abs(f)?c+="l"+f*t.pxmid[0]/t.pxmid[1]+","+f+"H"+(i+t.labelExtraX+u):c+="l"+t.labelExtraX+","+h+"v"+(f-h)+"h"+u}else c+="V"+(t.yLabelMid+t.labelExtraY)+"h"+u;l.ensureSingle(r,"path","textline").call(o.stroke,e.outsidetextfont.color).attr({"stroke-width":Math.min(2,e.outsidetextfont.size/8),d:c,fill:"none"})}else r.select("path.textline").remove()})}(g,p),x&&p.automargin){var w=s.bBox(u.node()),k=p.domain,T=i.w*(k.x[1]-k.x[0]),M=i.h*(k.y[1]-k.y[0]),A=(.5*T-f.r)/i.w,L=(.5*M-f.r)/i.h;a.autoMargin(t,"pie."+p.uid+".automargin",{xl:k.x[0]-A,xr:k.x[1]+A,yb:k.y[0]-L,yt:k.y[1]+L,l:Math.max(f.cx-f.r-w.left,0),r:Math.max(w.right-(f.cx+f.r),0),b:Math.max(w.bottom-(f.cy+f.r),0),t:Math.max(f.cy-f.r-w.top,0),pad:5})}})});setTimeout(function(){u.selectAll("tspan").each(function(){var t=n.select(this);t.attr("dy")&&t.attr("dy",t.attr("dy"))})},0)},formatSliceLabel:z,transformInsideText:b,determineInsideTextFont:y,positionTitleOutside:E,prerenderTitles:x,layoutAreas:P,attachFxHandlers:m,computeTransform:I}},{"../../components/color":591,"../../components/drawing":612,"../../components/fx":630,"../../lib":717,"../../lib/svg_text_utils":741,"../../plots/plots":826,"../bar/constants":858,"../bar/uniform_text":872,"./event_data":1098,"./helpers":1099,d3:165}],1104:[function(t,e,r){"use strict";var n=t("d3"),a=t("./style_one"),i=t("../bar/uniform_text").resizeText;e.exports=function(t){var e=t._fullLayout._pielayer.selectAll(".trace");i(t,e,"pie"),e.each(function(t){var e=t[0].trace,r=n.select(this);r.style({opacity:e.opacity}),r.selectAll("path.surface").each(function(t){n.select(this).call(a,t,e)})})}},{"../bar/uniform_text":872,"./style_one":1105,d3:165}],1105:[function(t,e,r){"use strict";var n=t("../../components/color"),a=t("./helpers").castOption;e.exports=function(t,e,r){var i=r.marker.line,o=a(i.color,e.pts)||n.defaultLine,s=a(i.width,e.pts)||0;t.style("stroke-width",s).call(n.fill,e.color).call(n.stroke,o)}},{"../../components/color":591,"./helpers":1099}],1106:[function(t,e,r){"use strict";var n=t("../scatter/attributes");e.exports={x:n.x,y:n.y,xy:{valType:"data_array",editType:"calc"},indices:{valType:"data_array",editType:"calc"},xbounds:{valType:"data_array",editType:"calc"},ybounds:{valType:"data_array",editType:"calc"},text:n.text,marker:{color:{valType:"color",arrayOk:!1,editType:"calc"},opacity:{valType:"number",min:0,max:1,dflt:1,arrayOk:!1,editType:"calc"},blend:{valType:"boolean",dflt:null,editType:"calc"},sizemin:{valType:"number",min:.1,max:2,dflt:.5,editType:"calc"},sizemax:{valType:"number",min:.1,dflt:20,editType:"calc"},border:{color:{valType:"color",arrayOk:!1,editType:"calc"},arearatio:{valType:"number",min:0,max:1,dflt:0,editType:"calc"},editType:"calc"},editType:"calc"},transforms:void 0}},{"../scatter/attributes":1120}],1107:[function(t,e,r){"use strict";var n=t("gl-pointcloud2d"),a=t("../../lib/str2rgbarray"),i=t("../../plots/cartesian/autorange").findExtremes,o=t("../scatter/get_trace_color");function s(t,e){this.scene=t,this.uid=e,this.type="pointcloud",this.pickXData=[],this.pickYData=[],this.xData=[],this.yData=[],this.textLabels=[],this.color="rgb(0, 0, 0)",this.name="",this.hoverinfo="all",this.idToIndex=new Int32Array(0),this.bounds=[0,0,0,0],this.pointcloudOptions={positions:new Float32Array(0),idToIndex:this.idToIndex,sizemin:.5,sizemax:12,color:[0,0,0,1],areaRatio:1,borderColor:[0,0,0,1]},this.pointcloud=n(t.glplot,this.pointcloudOptions),this.pointcloud._trace=this}var l=s.prototype;l.handlePick=function(t){var e=this.idToIndex[t.pointId];return{trace:this,dataCoord:t.dataCoord,traceCoord:this.pickXYData?[this.pickXYData[2*e],this.pickXYData[2*e+1]]:[this.pickXData[e],this.pickYData[e]],textLabel:Array.isArray(this.textLabels)?this.textLabels[e]:this.textLabels,color:this.color,name:this.name,pointIndex:e,hoverinfo:this.hoverinfo}},l.update=function(t){this.index=t.index,this.textLabels=t.text,this.name=t.name,this.hoverinfo=t.hoverinfo,this.bounds=[1/0,1/0,-1/0,-1/0],this.updateFast(t),this.color=o(t,{})},l.updateFast=function(t){var e,r,n,o,s,l,c=this.xData=this.pickXData=t.x,u=this.yData=this.pickYData=t.y,h=this.pickXYData=t.xy,f=t.xbounds&&t.ybounds,p=t.indices,d=this.bounds;if(h){if(n=h,e=h.length>>>1,f)d[0]=t.xbounds[0],d[2]=t.xbounds[1],d[1]=t.ybounds[0],d[3]=t.ybounds[1];else for(l=0;l<e;l++)o=n[2*l],s=n[2*l+1],o<d[0]&&(d[0]=o),o>d[2]&&(d[2]=o),s<d[1]&&(d[1]=s),s>d[3]&&(d[3]=s);if(p)r=p;else for(r=new Int32Array(e),l=0;l<e;l++)r[l]=l}else for(e=c.length,n=new Float32Array(2*e),r=new Int32Array(e),l=0;l<e;l++)o=c[l],s=u[l],r[l]=l,n[2*l]=o,n[2*l+1]=s,o<d[0]&&(d[0]=o),o>d[2]&&(d[2]=o),s<d[1]&&(d[1]=s),s>d[3]&&(d[3]=s);this.idToIndex=r,this.pointcloudOptions.idToIndex=r,this.pointcloudOptions.positions=n;var g=a(t.marker.color),v=a(t.marker.border.color),m=t.opacity*t.marker.opacity;g[3]*=m,this.pointcloudOptions.color=g;var y=t.marker.blend;if(null===y){y=c.length<100||u.length<100}this.pointcloudOptions.blend=y,v[3]*=m,this.pointcloudOptions.borderColor=v;var x=t.marker.sizemin,b=Math.max(t.marker.sizemax,t.marker.sizemin);this.pointcloudOptions.sizeMin=x,this.pointcloudOptions.sizeMax=b,this.pointcloudOptions.areaRatio=t.marker.border.arearatio,this.pointcloud.update(this.pointcloudOptions);var _=this.scene.xaxis,w=this.scene.yaxis,k=b/2||.5;t._extremes[_._id]=i(_,[d[0],d[2]],{ppad:k}),t._extremes[w._id]=i(w,[d[1],d[3]],{ppad:k})},l.dispose=function(){this.pointcloud.dispose()},e.exports=function(t,e){var r=new s(t,e.uid);return r.update(e),r}},{"../../lib/str2rgbarray":740,"../../plots/cartesian/autorange":764,"../scatter/get_trace_color":1130,"gl-pointcloud2d":295}],1108:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes");e.exports=function(t,e,r){function i(r,i){return n.coerce(t,e,a,r,i)}i("x"),i("y"),i("xbounds"),i("ybounds"),t.xy&&t.xy instanceof Float32Array&&(e.xy=t.xy),t.indices&&t.indices instanceof Int32Array&&(e.indices=t.indices),i("text"),i("marker.color",r),i("marker.opacity"),i("marker.blend"),i("marker.sizemin"),i("marker.sizemax"),i("marker.border.color",r),i("marker.border.arearatio"),e._length=null}},{"../../lib":717,"./attributes":1106}],1109:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("../scatter3d/calc"),plot:t("./convert"),moduleType:"trace",name:"pointcloud",basePlotModule:t("../../plots/gl2d"),categories:["gl","gl2d","showLegend"],meta:{}}},{"../../plots/gl2d":803,"../scatter3d/calc":1148,"./attributes":1106,"./convert":1107,"./defaults":1108}],1110:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),a=t("../../plots/attributes"),i=t("../../components/color/attributes"),o=t("../../components/fx/attributes"),s=t("../../plots/domain").attributes,l=t("../../plots/template_attributes").hovertemplateAttrs,c=t("../../components/colorscale/attributes"),u=t("../../plot_api/plot_template").templatedArray,h=t("../../lib/extend").extendFlat,f=t("../../plot_api/edit_types").overrideAll;t("../../constants/docs").FORMAT_LINK;(e.exports=f({hoverinfo:h({},a.hoverinfo,{flags:[],arrayOk:!1}),hoverlabel:o.hoverlabel,domain:s({name:"sankey",trace:!0}),orientation:{valType:"enumerated",values:["v","h"],dflt:"h"},valueformat:{valType:"string",dflt:".3s"},valuesuffix:{valType:"string",dflt:""},arrangement:{valType:"enumerated",values:["snap","perpendicular","freeform","fixed"],dflt:"snap"},textfont:n({}),customdata:void 0,node:{label:{valType:"data_array",dflt:[]},groups:{valType:"info_array",impliedEdits:{x:[],y:[]},dimensions:2,freeLength:!0,dflt:[],items:{valType:"number",editType:"calc"}},x:{valType:"data_array",dflt:[]},y:{valType:"data_array",dflt:[]},color:{valType:"color",arrayOk:!0},customdata:{valType:"data_array",editType:"calc"},line:{color:{valType:"color",dflt:i.defaultLine,arrayOk:!0},width:{valType:"number",min:0,dflt:.5,arrayOk:!0}},pad:{valType:"number",arrayOk:!1,min:0,dflt:20},thickness:{valType:"number",arrayOk:!1,min:1,dflt:20},hoverinfo:{valType:"enumerated",values:["all","none","skip"],dflt:"all"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:["value","label"]})},link:{label:{valType:"data_array",dflt:[]},color:{valType:"color",arrayOk:!0},customdata:{valType:"data_array",editType:"calc"},line:{color:{valType:"color",dflt:i.defaultLine,arrayOk:!0},width:{valType:"number",min:0,dflt:0,arrayOk:!0}},source:{valType:"data_array",dflt:[]},target:{valType:"data_array",dflt:[]},value:{valType:"data_array",dflt:[]},hoverinfo:{valType:"enumerated",values:["all","none","skip"],dflt:"all"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:["value","label"]}),colorscales:u("concentrationscales",{editType:"calc",label:{valType:"string",editType:"calc",dflt:""},cmax:{valType:"number",editType:"calc",dflt:1},cmin:{valType:"number",editType:"calc",dflt:0},colorscale:h(c().colorscale,{dflt:[[0,"white"],[1,"black"]]})})}},"calc","nested")).transforms=void 0},{"../../components/color/attributes":590,"../../components/colorscale/attributes":598,"../../components/fx/attributes":621,"../../constants/docs":688,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plot_api/plot_template":755,"../../plots/attributes":762,"../../plots/domain":790,"../../plots/font_attributes":791,"../../plots/template_attributes":841}],1111:[function(t,e,r){"use strict";var n=t("../../plot_api/edit_types").overrideAll,a=t("../../plots/get_data").getModuleCalcData,i=t("./plot"),o=t("../../components/fx/layout_attributes"),s=t("../../lib/setcursor"),l=t("../../components/dragelement"),c=t("../../plots/cartesian/select").prepSelect,u=t("../../lib"),h=t("../../registry");function f(t,e){var r=t._fullData[e],n=t._fullLayout,a=n.dragmode,i="pan"===n.dragmode?"move":"crosshair",o=r._bgRect;if("pan"!==a&&"zoom"!==a){s(o,i);var f={_id:"x",c2p:u.identity,_offset:r._sankey.translateX,_length:r._sankey.width},p={_id:"y",c2p:u.identity,_offset:r._sankey.translateY,_length:r._sankey.height},d={gd:t,element:o.node(),plotinfo:{id:e,xaxis:f,yaxis:p,fillRangeItems:u.noop},subplot:e,xaxes:[f],yaxes:[p],doneFnCompleted:function(r){var n,a=t._fullData[e],i=a.node.groups.slice(),o=[];function s(t){for(var e=a._sankey.graph.nodes,r=0;r<e.length;r++)if(e[r].pointNumber===t)return e[r]}for(var l=0;l<r.length;l++){var c=s(r[l].pointNumber);if(c)if(c.group){for(var u=0;u<c.childrenNodes.length;u++)o.push(c.childrenNodes[u].pointNumber);i[c.pointNumber-a.node._count]=!1}else o.push(c.pointNumber)}n=i.filter(Boolean).concat([o]),h.call("_guiRestyle",t,{"node.groups":[n]},e)},prepFn:function(t,e,r){c(t,e,r,d,a)}};l.init(d)}}r.name="sankey",r.baseLayoutAttrOverrides=n({hoverlabel:o.hoverlabel},"plot","nested"),r.plot=function(t){var e=a(t.calcdata,"sankey")[0];i(t,e),r.updateFx(t)},r.clean=function(t,e,r,n){var a=n._has&&n._has("sankey"),i=e._has&&e._has("sankey");a&&!i&&(n._paperdiv.selectAll(".sankey").remove(),n._paperdiv.selectAll(".bgsankey").remove())},r.updateFx=function(t){for(var e=0;e<t._fullData.length;e++)f(t,e)}},{"../../components/dragelement":609,"../../components/fx/layout_attributes":631,"../../lib":717,"../../lib/setcursor":737,"../../plot_api/edit_types":748,"../../plots/cartesian/select":782,"../../plots/get_data":800,"../../registry":846,"./plot":1116}],1112:[function(t,e,r){"use strict";var n=t("strongly-connected-components"),a=t("../../lib"),i=t("../../lib/gup").wrap,o=a.isArrayOrTypedArray,s=a.isIndex,l=t("../../components/colorscale");function c(t){var e,r=t.node,i=t.link,c=[],u=o(i.color),h=o(i.customdata),f={},p={},d=i.colorscales.length;for(e=0;e<d;e++){var g=i.colorscales[e],v=l.extractScale(g,{cLetter:"c"}),m=l.makeColorScaleFunc(v);p[g.label]=m}var y=0;for(e=0;e<i.value.length;e++)i.source[e]>y&&(y=i.source[e]),i.target[e]>y&&(y=i.target[e]);var x,b=y+1;t.node._count=b;var _=t.node.groups,w={};for(e=0;e<_.length;e++){var k=_[e];for(x=0;x<k.length;x++){var T=k[x],M=b+e;w.hasOwnProperty(T)?a.warn("Node "+T+" is already part of a group."):w[T]=M}}var A={source:[],target:[]};for(e=0;e<i.value.length;e++){var S=i.value[e],E=i.source[e],L=i.target[e];if(S>0&&s(E,b)&&s(L,b)&&(!w.hasOwnProperty(E)||!w.hasOwnProperty(L)||w[E]!==w[L])){w.hasOwnProperty(L)&&(L=w[L]),w.hasOwnProperty(E)&&(E=w[E]),L=+L,f[E=+E]=f[L]=!0;var C="";i.label&&i.label[e]&&(C=i.label[e]);var P=null;C&&p.hasOwnProperty(C)&&(P=p[C]),c.push({pointNumber:e,label:C,color:u?i.color[e]:i.color,customdata:h?i.customdata[e]:i.customdata,concentrationscale:P,source:E,target:L,value:+S}),A.source.push(E),A.target.push(L)}}var O=b+_.length,z=o(r.color),I=o(r.customdata),D=[];for(e=0;e<O;e++)if(f[e]){var R=r.label[e];D.push({group:e>b-1,childrenNodes:[],pointNumber:e,label:R,color:z?r.color[e]:r.color,customdata:I?r.customdata[e]:r.customdata})}var F=!1;return function(t,e,r){for(var i=a.init2dArray(t,0),o=0;o<Math.min(e.length,r.length);o++)if(a.isIndex(e[o],t)&&a.isIndex(r[o],t)){if(e[o]===r[o])return!0;i[e[o]].push(r[o])}return n(i).components.some(function(t){return t.length>1})}(O,A.source,A.target)&&(F=!0),{circular:F,links:c,nodes:D,groups:_,groupLookup:w}}e.exports=function(t,e){var r=c(e);return i({circular:r.circular,_nodes:r.nodes,_links:r.links,_groups:r.groups,_groupLookup:r.groupLookup})}},{"../../components/colorscale":603,"../../lib":717,"../../lib/gup":715,"strongly-connected-components":528}],1113:[function(t,e,r){"use strict";e.exports={nodeTextOffsetHorizontal:4,nodeTextOffsetVertical:3,nodePadAcross:10,sankeyIterations:50,forceIterations:5,forceTicksPerFrame:10,duration:500,ease:"linear",cn:{sankey:"sankey",sankeyLinks:"sankey-links",sankeyLink:"sankey-link",sankeyNodeSet:"sankey-node-set",sankeyNode:"sankey-node",nodeRect:"node-rect",nodeCapture:"node-capture",nodeCentered:"node-entered",nodeLabelGuide:"node-label-guide",nodeLabel:"node-label",nodeLabelTextPath:"node-label-text-path"}}},{}],1114:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("../../components/color"),o=t("tinycolor2"),s=t("../../plots/domain").defaults,l=t("../../components/fx/hoverlabel_defaults"),c=t("../../plot_api/plot_template"),u=t("../../plots/array_container_defaults");function h(t,e){function r(r,i){return n.coerce(t,e,a.link.colorscales,r,i)}r("label"),r("cmin"),r("cmax"),r("colorscale")}e.exports=function(t,e,r,f){function p(r,i){return n.coerce(t,e,a,r,i)}var d=n.extendDeep(f.hoverlabel,t.hoverlabel),g=t.node,v=c.newContainer(e,"node");function m(t,e){return n.coerce(g,v,a.node,t,e)}m("label"),m("groups"),m("x"),m("y"),m("pad"),m("thickness"),m("line.color"),m("line.width"),m("hoverinfo",t.hoverinfo),l(g,v,m,d),m("hovertemplate");var y=f.colorway;m("color",v.label.map(function(t,e){return i.addOpacity(function(t){return y[t%y.length]}(e),.8)})),m("customdata");var x=t.link||{},b=c.newContainer(e,"link");function _(t,e){return n.coerce(x,b,a.link,t,e)}_("label"),_("source"),_("target"),_("value"),_("line.color"),_("line.width"),_("hoverinfo",t.hoverinfo),l(x,b,_,d),_("hovertemplate");var w,k=o(f.paper_bgcolor).getLuminance()<.333?"rgba(255, 255, 255, 0.6)":"rgba(0, 0, 0, 0.2)";_("color",n.repeat(k,b.value.length)),_("customdata"),u(x,b,{name:"colorscales",handleItemDefaults:h}),s(e,f,p),p("orientation"),p("valueformat"),p("valuesuffix"),v.x.length&&v.y.length&&(w="freeform"),p("arrangement",w),n.coerceFont(p,"textfont",n.extendFlat({},f.font)),e._length=null}},{"../../components/color":591,"../../components/fx/hoverlabel_defaults":628,"../../lib":717,"../../plot_api/plot_template":755,"../../plots/array_container_defaults":761,"../../plots/domain":790,"./attributes":1110,tinycolor2:535}],1115:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc"),plot:t("./plot"),moduleType:"trace",name:"sankey",basePlotModule:t("./base_plot"),selectPoints:t("./select.js"),categories:["noOpacity"],meta:{}}},{"./attributes":1110,"./base_plot":1111,"./calc":1112,"./defaults":1114,"./plot":1116,"./select.js":1118}],1116:[function(t,e,r){"use strict";var n=t("d3"),a=t("./render"),i=t("../../components/fx"),o=t("../../components/color"),s=t("../../lib"),l=t("./constants").cn,c=s._;function u(t){return""!==t}function h(t,e){return t.filter(function(t){return t.key===e.traceId})}function f(t,e){n.select(t).select("path").style("fill-opacity",e),n.select(t).select("rect").style("fill-opacity",e)}function p(t){n.select(t).select("text.name").style("fill","black")}function d(t){return function(e){return-1!==t.node.sourceLinks.indexOf(e.link)||-1!==t.node.targetLinks.indexOf(e.link)}}function g(t){return function(e){return-1!==e.node.sourceLinks.indexOf(t.link)||-1!==e.node.targetLinks.indexOf(t.link)}}function v(t,e,r){e&&r&&h(r,e).selectAll("."+l.sankeyLink).filter(d(e)).call(y.bind(0,e,r,!1))}function m(t,e,r){e&&r&&h(r,e).selectAll("."+l.sankeyLink).filter(d(e)).call(x.bind(0,e,r,!1))}function y(t,e,r,n){var a=n.datum().link.label;n.style("fill-opacity",function(t){if(!t.link.concentrationscale)return.4}),a&&h(e,t).selectAll("."+l.sankeyLink).filter(function(t){return t.link.label===a}).style("fill-opacity",function(t){if(!t.link.concentrationscale)return.4}),r&&h(e,t).selectAll("."+l.sankeyNode).filter(g(t)).call(v)}function x(t,e,r,n){var a=n.datum().link.label;n.style("fill-opacity",function(t){return t.tinyColorAlpha}),a&&h(e,t).selectAll("."+l.sankeyLink).filter(function(t){return t.link.label===a}).style("fill-opacity",function(t){return t.tinyColorAlpha}),r&&h(e,t).selectAll(l.sankeyNode).filter(g(t)).call(m)}function b(t,e){var r=t.hoverlabel||{},n=s.nestedProperty(r,e).get();return!Array.isArray(n)&&n}e.exports=function(t,e){for(var r=t._fullLayout,s=r._paper,h=r._size,d=0;d<t._fullData.length;d++)if(t._fullData[d].visible&&t._fullData[d].type===l.sankey&&!t._fullData[d]._viewInitial){var g=t._fullData[d].node;t._fullData[d]._viewInitial={node:{groups:g.groups.slice(),x:g.x.slice(),y:g.y.slice()}}}var _=c(t,"source:")+" ",w=c(t,"target:")+" ",k=c(t,"concentration:")+" ",T=c(t,"incoming flow count:")+" ",M=c(t,"outgoing flow count:")+" ";a(t,s,e,{width:h.w,height:h.h,margin:{t:h.t,r:h.r,b:h.b,l:h.l}},{linkEvents:{hover:function(e,r,a){!1!==t._fullLayout.hovermode&&(n.select(e).call(y.bind(0,r,a,!0)),"skip"!==r.link.trace.link.hoverinfo&&(r.link.fullData=r.link.trace,t.emit("plotly_hover",{event:n.event,points:[r.link]})))},follow:function(e,a){if(!1!==t._fullLayout.hovermode){var s=a.link.trace.link;if("none"!==s.hoverinfo&&"skip"!==s.hoverinfo){for(var l=[],c=0,h=0;h<a.flow.links.length;h++){var d=a.flow.links[h];if("closest"!==t._fullLayout.hovermode||a.link.pointNumber===d.pointNumber){a.link.pointNumber===d.pointNumber&&(c=h),d.fullData=d.trace,s=a.link.trace.link;var g=m(d),v={valueLabel:n.format(a.valueFormat)(d.value)+a.valueSuffix};l.push({x:g[0],y:g[1],name:v.valueLabel,text:[d.label||"",_+d.source.label,w+d.target.label,d.concentrationscale?k+n.format("%0.2f")(d.flow.labelConcentration):""].filter(u).join("<br>"),color:b(s,"bgcolor")||o.addOpacity(d.color,1),borderColor:b(s,"bordercolor"),fontFamily:b(s,"font.family"),fontSize:b(s,"font.size"),fontColor:b(s,"font.color"),nameLength:b(s,"namelength"),textAlign:b(s,"align"),idealAlign:n.event.x<g[0]?"right":"left",hovertemplate:s.hovertemplate,hovertemplateLabels:v,eventData:[d]})}}i.loneHover(l,{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t,anchorIndex:c}).each(function(){a.link.concentrationscale||f(this,.65),p(this)})}}function m(t){var e,r;t.circular?(e=(t.circularPathData.leftInnerExtent+t.circularPathData.rightInnerExtent)/2,r=t.circularPathData.verticalFullExtent):(e=(t.source.x1+t.target.x0)/2,r=(t.y0+t.y1)/2);var n=[e,r];return"v"===t.trace.orientation&&n.reverse(),n[0]+=a.parent.translateX,n[1]+=a.parent.translateY,n}},unhover:function(e,a,o){!1!==t._fullLayout.hovermode&&(n.select(e).call(x.bind(0,a,o,!0)),"skip"!==a.link.trace.link.hoverinfo&&(a.link.fullData=a.link.trace,t.emit("plotly_unhover",{event:n.event,points:[a.link]})),i.loneUnhover(r._hoverlayer.node()))},select:function(e,r){var a=r.link;a.originalEvent=n.event,t._hoverdata=[a],i.click(t,{target:!0})}},nodeEvents:{hover:function(e,r,a){!1!==t._fullLayout.hovermode&&(n.select(e).call(v,r,a),"skip"!==r.node.trace.node.hoverinfo&&(r.node.fullData=r.node.trace,t.emit("plotly_hover",{event:n.event,points:[r.node]})))},follow:function(e,a){if(!1!==t._fullLayout.hovermode){var o=a.node.trace.node;if("none"!==o.hoverinfo&&"skip"!==o.hoverinfo){var s=n.select(e).select("."+l.nodeRect),c=t._fullLayout._paperdiv.node().getBoundingClientRect(),h=s.node().getBoundingClientRect(),d=h.left-2-c.left,g=h.right+2-c.left,v=h.top+h.height/4-c.top,m={valueLabel:n.format(a.valueFormat)(a.node.value)+a.valueSuffix};a.node.fullData=a.node.trace;var y=i.loneHover({x0:d,x1:g,y:v,name:n.format(a.valueFormat)(a.node.value)+a.valueSuffix,text:[a.node.label,T+a.node.targetLinks.length,M+a.node.sourceLinks.length].filter(u).join("<br>"),color:b(o,"bgcolor")||a.tinyColorHue,borderColor:b(o,"bordercolor"),fontFamily:b(o,"font.family"),fontSize:b(o,"font.size"),fontColor:b(o,"font.color"),nameLength:b(o,"namelength"),textAlign:b(o,"align"),idealAlign:"left",hovertemplate:o.hovertemplate,hovertemplateLabels:m,eventData:[a.node]},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t});f(y,.85),p(y)}}},unhover:function(e,a,o){!1!==t._fullLayout.hovermode&&(n.select(e).call(m,a,o),"skip"!==a.node.trace.node.hoverinfo&&(a.node.fullData=a.node.trace,t.emit("plotly_unhover",{event:n.event,points:[a.node]})),i.loneUnhover(r._hoverlayer.node()))},select:function(e,r,a){var o=r.node;o.originalEvent=n.event,t._hoverdata=[o],n.select(e).call(m,r,a),i.click(t,{target:!0})}}})}},{"../../components/color":591,"../../components/fx":630,"../../lib":717,"./constants":1113,"./render":1117,d3:165}],1117:[function(t,e,r){"use strict";var n=t("./constants"),a=t("d3"),i=t("tinycolor2"),o=t("../../components/color"),s=t("../../components/drawing"),l=t("@plotly/d3-sankey"),c=t("@plotly/d3-sankey-circular"),u=t("d3-force"),h=t("../../lib"),f=t("../../lib/gup"),p=f.keyFun,d=f.repeat,g=f.unwrap,v=t("d3-interpolate").interpolateNumber,m=t("../../registry");function y(){var t=.5;return function(e){if(e.link.circular)return r=e.link,n=r.width/2,a=r.circularPathData,"top"===r.circularLinkType?"M "+a.targetX+" "+(a.targetY+n)+" L"+a.rightInnerExtent+" "+(a.targetY+n)+"A"+(a.rightLargeArcRadius+n)+" "+(a.rightSmallArcRadius+n)+" 0 0 1 "+(a.rightFullExtent-n)+" "+(a.targetY-a.rightSmallArcRadius)+"L"+(a.rightFullExtent-n)+" "+a.verticalRightInnerExtent+"A"+(a.rightLargeArcRadius+n)+" "+(a.rightLargeArcRadius+n)+" 0 0 1 "+a.rightInnerExtent+" "+(a.verticalFullExtent-n)+"L"+a.leftInnerExtent+" "+(a.verticalFullExtent-n)+"A"+(a.leftLargeArcRadius+n)+" "+(a.leftLargeArcRadius+n)+" 0 0 1 "+(a.leftFullExtent+n)+" "+a.verticalLeftInnerExtent+"L"+(a.leftFullExtent+n)+" "+(a.sourceY-a.leftSmallArcRadius)+"A"+(a.leftLargeArcRadius+n)+" "+(a.leftSmallArcRadius+n)+" 0 0 1 "+a.leftInnerExtent+" "+(a.sourceY+n)+"L"+a.sourceX+" "+(a.sourceY+n)+"L"+a.sourceX+" "+(a.sourceY-n)+"L"+a.leftInnerExtent+" "+(a.sourceY-n)+"A"+(a.leftLargeArcRadius-n)+" "+(a.leftSmallArcRadius-n)+" 0 0 0 "+(a.leftFullExtent-n)+" "+(a.sourceY-a.leftSmallArcRadius)+"L"+(a.leftFullExtent-n)+" "+a.verticalLeftInnerExtent+"A"+(a.leftLargeArcRadius-n)+" "+(a.leftLargeArcRadius-n)+" 0 0 0 "+a.leftInnerExtent+" "+(a.verticalFullExtent+n)+"L"+a.rightInnerExtent+" "+(a.verticalFullExtent+n)+"A"+(a.rightLargeArcRadius-n)+" "+(a.rightLargeArcRadius-n)+" 0 0 0 "+(a.rightFullExtent+n)+" "+a.verticalRightInnerExtent+"L"+(a.rightFullExtent+n)+" "+(a.targetY-a.rightSmallArcRadius)+"A"+(a.rightLargeArcRadius-n)+" "+(a.rightSmallArcRadius-n)+" 0 0 0 "+a.rightInnerExtent+" "+(a.targetY-n)+"L"+a.targetX+" "+(a.targetY-n)+"Z":"M "+a.targetX+" "+(a.targetY-n)+" L"+a.rightInnerExtent+" "+(a.targetY-n)+"A"+(a.rightLargeArcRadius+n)+" "+(a.rightSmallArcRadius+n)+" 0 0 0 "+(a.rightFullExtent-n)+" "+(a.targetY+a.rightSmallArcRadius)+"L"+(a.rightFullExtent-n)+" "+a.verticalRightInnerExtent+"A"+(a.rightLargeArcRadius+n)+" "+(a.rightLargeArcRadius+n)+" 0 0 0 "+a.rightInnerExtent+" "+(a.verticalFullExtent+n)+"L"+a.leftInnerExtent+" "+(a.verticalFullExtent+n)+"A"+(a.leftLargeArcRadius+n)+" "+(a.leftLargeArcRadius+n)+" 0 0 0 "+(a.leftFullExtent+n)+" "+a.verticalLeftInnerExtent+"L"+(a.leftFullExtent+n)+" "+(a.sourceY+a.leftSmallArcRadius)+"A"+(a.leftLargeArcRadius+n)+" "+(a.leftSmallArcRadius+n)+" 0 0 0 "+a.leftInnerExtent+" "+(a.sourceY-n)+"L"+a.sourceX+" "+(a.sourceY-n)+"L"+a.sourceX+" "+(a.sourceY+n)+"L"+a.leftInnerExtent+" "+(a.sourceY+n)+"A"+(a.leftLargeArcRadius-n)+" "+(a.leftSmallArcRadius-n)+" 0 0 1 "+(a.leftFullExtent-n)+" "+(a.sourceY+a.leftSmallArcRadius)+"L"+(a.leftFullExtent-n)+" "+a.verticalLeftInnerExtent+"A"+(a.leftLargeArcRadius-n)+" "+(a.leftLargeArcRadius-n)+" 0 0 1 "+a.leftInnerExtent+" "+(a.verticalFullExtent-n)+"L"+a.rightInnerExtent+" "+(a.verticalFullExtent-n)+"A"+(a.rightLargeArcRadius-n)+" "+(a.rightLargeArcRadius-n)+" 0 0 1 "+(a.rightFullExtent+n)+" "+a.verticalRightInnerExtent+"L"+(a.rightFullExtent+n)+" "+(a.targetY+a.rightSmallArcRadius)+"A"+(a.rightLargeArcRadius-n)+" "+(a.rightSmallArcRadius-n)+" 0 0 1 "+a.rightInnerExtent+" "+(a.targetY+n)+"L"+a.targetX+" "+(a.targetY+n)+"Z";var r,n,a,i=e.link.source.x1,o=e.link.target.x0,s=v(i,o),l=s(t),c=s(1-t),u=e.link.y0-e.link.width/2,h=e.link.y0+e.link.width/2,f=e.link.y1-e.link.width/2,p=e.link.y1+e.link.width/2;return"M"+i+","+u+"C"+l+","+u+" "+c+","+f+" "+o+","+f+"L"+o+","+p+"C"+c+","+p+" "+l+","+h+" "+i+","+h+"Z"}}function x(t){t.attr("transform",function(t){return"translate("+t.node.x0.toFixed(3)+", "+t.node.y0.toFixed(3)+")"})}function b(t){t.call(x)}function _(t,e){t.call(b),e.attr("d",y())}function w(t){t.attr("width",function(t){return t.node.x1-t.node.x0}).attr("height",function(t){return t.visibleHeight})}function k(t){return t.link.width>1||t.linkLineWidth>0}function T(t){return"translate("+t.translateX+","+t.translateY+")"+(t.horizontal?"matrix(1 0 0 1 0 0)":"matrix(0 1 1 0 0 0)")}function M(t){return"translate("+(t.horizontal?0:t.labelY)+" "+(t.horizontal?t.labelY:0)+")"}function A(t){return a.svg.line()([[t.horizontal?t.left?-t.sizeAcross:t.visibleWidth+n.nodeTextOffsetHorizontal:n.nodeTextOffsetHorizontal,0],[t.horizontal?t.left?-n.nodeTextOffsetHorizontal:t.sizeAcross:t.visibleHeight-n.nodeTextOffsetHorizontal,0]])}function S(t){return t.horizontal?"matrix(1 0 0 1 0 0)":"matrix(0 1 1 0 0 0)"}function E(t){return t.horizontal?"scale(1 1)":"scale(-1 1)"}function L(t){return t.darkBackground&&!t.horizontal?"rgb(255,255,255)":"rgb(0,0,0)"}function C(t){return t.horizontal&&t.left?"100%":"0%"}function P(t,e,r){t.on(".basic",null).on("mouseover.basic",function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.hover(this,t,e),t.interactionState.hovered=[this,t])}).on("mousemove.basic",function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.follow(this,t),t.interactionState.hovered=[this,t])}).on("mouseout.basic",function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.unhover(this,t,e),t.interactionState.hovered=!1)}).on("click.basic",function(t){t.interactionState.hovered&&(r.unhover(this,t,e),t.interactionState.hovered=!1),t.interactionState.dragInProgress||t.partOfGroup||r.select(this,t,e)})}function O(t,e,r,i){var o=a.behavior.drag().origin(function(t){return{x:t.node.x0+t.visibleWidth/2,y:t.node.y0+t.visibleHeight/2}}).on("dragstart",function(a){if("fixed"!==a.arrangement&&(h.ensureSingle(i._fullLayout._infolayer,"g","dragcover",function(t){i._fullLayout._dragCover=t}),h.raiseToTop(this),a.interactionState.dragInProgress=a.node,I(a.node),a.interactionState.hovered&&(r.nodeEvents.unhover.apply(0,a.interactionState.hovered),a.interactionState.hovered=!1),"snap"===a.arrangement)){var o=a.traceId+"|"+a.key;a.forceLayouts[o]?a.forceLayouts[o].alpha(1):function(t,e,r,a){!function(t){for(var e=0;e<t.length;e++)t[e].y=(t[e].y0+t[e].y1)/2,t[e].x=(t[e].x0+t[e].x1)/2}(r.graph.nodes);var i=r.graph.nodes.filter(function(t){return t.originalX===r.node.originalX}).filter(function(t){return!t.partOfGroup});r.forceLayouts[e]=u.forceSimulation(i).alphaDecay(0).force("collide",u.forceCollide().radius(function(t){return t.dy/2+r.nodePad/2}).strength(1).iterations(n.forceIterations)).force("constrain",function(t,e,r,a){return function(){for(var t=0,i=0;i<r.length;i++){var o=r[i];o===a.interactionState.dragInProgress?(o.x=o.lastDraggedX,o.y=o.lastDraggedY):(o.vx=(o.originalX-o.x)/n.forceTicksPerFrame,o.y=Math.min(a.size-o.dy/2,Math.max(o.dy/2,o.y))),t=Math.max(t,Math.abs(o.vx),Math.abs(o.vy))}!a.interactionState.dragInProgress&&t<.1&&a.forceLayouts[e].alpha()>0&&a.forceLayouts[e].alpha(0)}}(0,e,i,r)).stop()}(0,o,a),function(t,e,r,a,i){window.requestAnimationFrame(function o(){var s;for(s=0;s<n.forceTicksPerFrame;s++)r.forceLayouts[a].tick();var l=r.graph.nodes;if(function(t){for(var e=0;e<t.length;e++)t[e].y0=t[e].y-t[e].dy/2,t[e].y1=t[e].y0+t[e].dy,t[e].x0=t[e].x-t[e].dx/2,t[e].x1=t[e].x0+t[e].dx}(l),r.sankey.update(r.graph),_(t.filter(D(r)),e),r.forceLayouts[a].alpha()>0)window.requestAnimationFrame(o);else{var c=r.node.originalX;r.node.x0=c-r.visibleWidth/2,r.node.x1=c+r.visibleWidth/2,z(r,i)}})}(t,e,a,o,i)}}).on("drag",function(r){if("fixed"!==r.arrangement){var n=a.event.x,i=a.event.y;"snap"===r.arrangement?(r.node.x0=n-r.visibleWidth/2,r.node.x1=n+r.visibleWidth/2,r.node.y0=i-r.visibleHeight/2,r.node.y1=i+r.visibleHeight/2):("freeform"===r.arrangement&&(r.node.x0=n-r.visibleWidth/2,r.node.x1=n+r.visibleWidth/2),i=Math.max(0,Math.min(r.size-r.visibleHeight/2,i)),r.node.y0=i-r.visibleHeight/2,r.node.y1=i+r.visibleHeight/2),I(r.node),"snap"!==r.arrangement&&(r.sankey.update(r.graph),_(t.filter(D(r)),e))}}).on("dragend",function(t){if("fixed"!==t.arrangement){t.interactionState.dragInProgress=!1;for(var e=0;e<t.node.childrenNodes.length;e++)t.node.childrenNodes[e].x=t.node.x,t.node.childrenNodes[e].y=t.node.y;"snap"!==t.arrangement&&z(t,i)}});t.on(".drag",null).call(o)}function z(t,e){for(var r=[],n=[],a=0;a<t.graph.nodes.length;a++){var i=(t.graph.nodes[a].x0+t.graph.nodes[a].x1)/2,o=(t.graph.nodes[a].y0+t.graph.nodes[a].y1)/2;r.push(i/t.figure.width),n.push(o/t.figure.height)}m.call("_guiRestyle",e,{"node.x":[r],"node.y":[n]},t.trace.index).then(function(){e._fullLayout._dragCover&&e._fullLayout._dragCover.remove()})}function I(t){t.lastDraggedX=t.x0+t.dx/2,t.lastDraggedY=t.y0+t.dy/2}function D(t){return function(e){return e.node.originalX===t.node.originalX}}e.exports=function(t,e,r,u,f){var v=!1;h.ensureSingle(t._fullLayout._infolayer,"g","first-render",function(){v=!0});var m=t._fullLayout._dragCover,b=r.filter(function(t){return g(t).trace.visible}).map(function(t,e,r){var a,o=g(e),s=o.trace,u=s.domain,f="h"===s.orientation,p=s.node.pad,d=s.node.thickness,v=t.width*(u.x[1]-u.x[0]),m=t.height*(u.y[1]-u.y[0]),y=o._nodes,x=o._links,b=o.circular;(a=b?c.sankeyCircular().circularLinkGap(0):l.sankey()).iterations(n.sankeyIterations).size(f?[v,m]:[m,v]).nodeWidth(d).nodePadding(p).nodeId(function(t){return t.pointNumber}).nodes(y).links(x);var _,w,k,T=a();for(var M in a.nodePadding()<p&&h.warn("node.pad was reduced to ",a.nodePadding()," to fit within the figure."),o._groupLookup){var A,S=parseInt(o._groupLookup[M]);for(_=0;_<T.nodes.length;_++)if(T.nodes[_].pointNumber===S){A=T.nodes[_];break}if(A){var E={pointNumber:parseInt(M),x0:A.x0,x1:A.x1,y0:A.y0,y1:A.y1,partOfGroup:!0,sourceLinks:[],targetLinks:[]};T.nodes.unshift(E),A.childrenNodes.unshift(E)}}if(function(){for(_=0;_<T.nodes.length;_++){var t,e,r=T.nodes[_],n={};for(w=0;w<r.targetLinks.length;w++)t=(e=r.targetLinks[w]).source.pointNumber+":"+e.target.pointNumber,n.hasOwnProperty(t)||(n[t]=[]),n[t].push(e);var a=Object.keys(n);for(w=0;w<a.length;w++){var o=n[t=a[w]],s=0,l={};for(k=0;k<o.length;k++)l[(e=o[k]).label]||(l[e.label]=0),l[e.label]+=e.value,s+=e.value;for(k=0;k<o.length;k++)(e=o[k]).flow={value:s,labelConcentration:l[e.label]/s,concentration:e.value/s,links:o},e.concentrationscale&&(e.color=i(e.concentrationscale(e.flow.labelConcentration)))}var c=0;for(w=0;w<r.sourceLinks.length;w++)c+=r.sourceLinks[w].value;for(w=0;w<r.sourceLinks.length;w++)(e=r.sourceLinks[w]).concentrationOut=e.value/c;var u=0;for(w=0;w<r.targetLinks.length;w++)u+=r.targetLinks[w].value;for(w=0;w<r.targetLinks.length;w++)(e=r.targetLinks[w]).concenrationIn=e.value/u}}(),s.node.x.length&&s.node.y.length){for(_=0;_<Math.min(s.node.x.length,s.node.y.length,T.nodes.length);_++)if(s.node.x[_]&&s.node.y[_]){var L=[s.node.x[_]*v,s.node.y[_]*m];T.nodes[_].x0=L[0]-d/2,T.nodes[_].x1=L[0]+d/2;var C=T.nodes[_].y1-T.nodes[_].y0;T.nodes[_].y0=L[1]-C/2,T.nodes[_].y1=L[1]+C/2}"snap"===s.arrangement&&function(t){t.forEach(function(t){var e,r,n,a=0,i=t.length;for(t.sort(function(t,e){return t.y0-e.y0}),n=0;n<i;++n)(e=t[n]).y0>=a||(r=a-e.y0)>1e-6&&(e.y0+=r,e.y1+=r),a=e.y1+p})}(function(t){var e,r,n=t.map(function(t,e){return{x0:t.x0,index:e}}).sort(function(t,e){return t.x0-e.x0}),a=[],i=-1,o=-1/0;for(_=0;_<n.length;_++){var s=t[n[_].index];s.x0>o+d&&(i+=1,e=s.x0),o=s.x0,a[i]||(a[i]=[]),a[i].push(s),r=e-s.x0,s.x0+=r,s.x1+=r}return a}(y=T.nodes)),a.update(T)}return{circular:b,key:r,trace:s,guid:h.randstr(),horizontal:f,width:v,height:m,nodePad:s.node.pad,nodeLineColor:s.node.line.color,nodeLineWidth:s.node.line.width,linkLineColor:s.link.line.color,linkLineWidth:s.link.line.width,valueFormat:s.valueformat,valueSuffix:s.valuesuffix,textFont:s.textfont,translateX:u.x[0]*t.width+t.margin.l,translateY:t.height-u.y[1]*t.height+t.margin.t,dragParallel:f?m:v,dragPerpendicular:f?v:m,arrangement:s.arrangement,sankey:a,graph:T,forceLayouts:{},interactionState:{dragInProgress:!1,hovered:!1}}}.bind(null,u)),_=e.selectAll("."+n.cn.sankey).data(b,p);_.exit().remove(),_.enter().append("g").classed(n.cn.sankey,!0).style("box-sizing","content-box").style("position","absolute").style("left",0).style("shape-rendering","geometricPrecision").style("pointer-events","auto").attr("transform",T),_.each(function(e,r){t._fullData[r]._sankey=e;var n="bgsankey-"+e.trace.uid+"-"+r;h.ensureSingle(t._fullLayout._draggers,"rect",n),t._fullData[r]._bgRect=a.select("."+n),t._fullData[r]._bgRect.style("pointer-events","all").attr("width",e.width).attr("height",e.height).attr("x",e.translateX).attr("y",e.translateY).classed("bgsankey",!0).style({fill:"transparent","stroke-width":0})}),_.transition().ease(n.ease).duration(n.duration).attr("transform",T);var z=_.selectAll("."+n.cn.sankeyLinks).data(d,p);z.enter().append("g").classed(n.cn.sankeyLinks,!0).style("fill","none");var I=z.selectAll("."+n.cn.sankeyLink).data(function(t){return t.graph.links.filter(function(t){return t.value}).map(function(t,e,r){var n=i(e.color),a=e.source.label+"|"+e.target.label+"__"+r;return e.trace=t.trace,e.curveNumber=t.trace.index,{circular:t.circular,key:a,traceId:t.key,pointNumber:e.pointNumber,link:e,tinyColorHue:o.tinyRGB(n),tinyColorAlpha:n.getAlpha(),linkPath:y,linkLineColor:t.linkLineColor,linkLineWidth:t.linkLineWidth,valueFormat:t.valueFormat,valueSuffix:t.valueSuffix,sankey:t.sankey,parent:t,interactionState:t.interactionState,flow:e.flow}}.bind(null,t))},p);I.enter().append("path").classed(n.cn.sankeyLink,!0).call(P,_,f.linkEvents),I.style("stroke",function(t){return k(t)?o.tinyRGB(i(t.linkLineColor)):t.tinyColorHue}).style("stroke-opacity",function(t){return k(t)?o.opacity(t.linkLineColor):t.tinyColorAlpha}).style("fill",function(t){return t.tinyColorHue}).style("fill-opacity",function(t){return t.tinyColorAlpha}).style("stroke-width",function(t){return k(t)?t.linkLineWidth:1}).attr("d",y()),I.style("opacity",function(){return t._context.staticPlot||v||m?1:0}).transition().ease(n.ease).duration(n.duration).style("opacity",1),I.exit().transition().ease(n.ease).duration(n.duration).style("opacity",0).remove();var D=_.selectAll("."+n.cn.sankeyNodeSet).data(d,p);D.enter().append("g").classed(n.cn.sankeyNodeSet,!0),D.style("cursor",function(t){switch(t.arrangement){case"fixed":return"default";case"perpendicular":return"ns-resize";default:return"move"}});var R=D.selectAll("."+n.cn.sankeyNode).data(function(t){var e=t.graph.nodes;return function(t){var e,r=[];for(e=0;e<t.length;e++)t[e].originalX=(t[e].x0+t[e].x1)/2,t[e].originalY=(t[e].y0+t[e].y1)/2,-1===r.indexOf(t[e].originalX)&&r.push(t[e].originalX);for(r.sort(function(t,e){return t-e}),e=0;e<t.length;e++)t[e].originalLayerIndex=r.indexOf(t[e].originalX),t[e].originalLayer=t[e].originalLayerIndex/(r.length-1)}(e),e.map(function(t,e){var r=i(e.color),a=n.nodePadAcross,s=t.nodePad/2;e.dx=e.x1-e.x0,e.dy=e.y1-e.y0;var l=e.dx,c=Math.max(.5,e.dy),u="node_"+e.pointNumber;return e.group&&(u=h.randstr()),e.trace=t.trace,e.curveNumber=t.trace.index,{index:e.pointNumber,key:u,partOfGroup:e.partOfGroup||!1,group:e.group,traceId:t.key,trace:t.trace,node:e,nodePad:t.nodePad,nodeLineColor:t.nodeLineColor,nodeLineWidth:t.nodeLineWidth,textFont:t.textFont,size:t.horizontal?t.height:t.width,visibleWidth:Math.ceil(l),visibleHeight:c,zoneX:-a,zoneY:-s,zoneWidth:l+2*a,zoneHeight:c+2*s,labelY:t.horizontal?e.dy/2+1:e.dx/2+1,left:1===e.originalLayer,sizeAcross:t.width,forceLayouts:t.forceLayouts,horizontal:t.horizontal,darkBackground:r.getBrightness()<=128,tinyColorHue:o.tinyRGB(r),tinyColorAlpha:r.getAlpha(),valueFormat:t.valueFormat,valueSuffix:t.valueSuffix,sankey:t.sankey,graph:t.graph,arrangement:t.arrangement,uniqueNodeLabelPathId:[t.guid,t.key,u].join("_"),interactionState:t.interactionState,figure:t}}.bind(null,t))},p);R.enter().append("g").classed(n.cn.sankeyNode,!0).call(x).style("opacity",function(e){return!t._context.staticPlot&&!v||e.partOfGroup?0:1}),R.call(P,_,f.nodeEvents).call(O,I,f,t),R.transition().ease(n.ease).duration(n.duration).call(x).style("opacity",function(t){return t.partOfGroup?0:1}),R.exit().transition().ease(n.ease).duration(n.duration).style("opacity",0).remove();var F=R.selectAll("."+n.cn.nodeRect).data(d);F.enter().append("rect").classed(n.cn.nodeRect,!0).call(w),F.style("stroke-width",function(t){return t.nodeLineWidth}).style("stroke",function(t){return o.tinyRGB(i(t.nodeLineColor))}).style("stroke-opacity",function(t){return o.opacity(t.nodeLineColor)}).style("fill",function(t){return t.tinyColorHue}).style("fill-opacity",function(t){return t.tinyColorAlpha}),F.transition().ease(n.ease).duration(n.duration).call(w);var B=R.selectAll("."+n.cn.nodeCapture).data(d);B.enter().append("rect").classed(n.cn.nodeCapture,!0).style("fill-opacity",0),B.attr("x",function(t){return t.zoneX}).attr("y",function(t){return t.zoneY}).attr("width",function(t){return t.zoneWidth}).attr("height",function(t){return t.zoneHeight});var N=R.selectAll("."+n.cn.nodeCentered).data(d);N.enter().append("g").classed(n.cn.nodeCentered,!0).attr("transform",M),N.transition().ease(n.ease).duration(n.duration).attr("transform",M);var j=N.selectAll("."+n.cn.nodeLabelGuide).data(d);j.enter().append("path").classed(n.cn.nodeLabelGuide,!0).attr("id",function(t){return t.uniqueNodeLabelPathId}).attr("d",A).attr("transform",S),j.transition().ease(n.ease).duration(n.duration).attr("d",A).attr("transform",S);var V=N.selectAll("."+n.cn.nodeLabel).data(d);V.enter().append("text").classed(n.cn.nodeLabel,!0).attr("transform",E).style("user-select","none").style("cursor","default").style("fill","black"),V.style("text-shadow",function(t){return t.horizontal?"-1px 1px 1px #fff, 1px 1px 1px #fff, 1px -1px 1px #fff, -1px -1px 1px #fff":"none"}).each(function(t){s.font(V,t.textFont)}),V.transition().ease(n.ease).duration(n.duration).attr("transform",E);var U=V.selectAll("."+n.cn.nodeLabelTextPath).data(d);U.enter().append("textPath").classed(n.cn.nodeLabelTextPath,!0).attr("alignment-baseline","middle").attr("xlink:href",function(t){return"#"+t.uniqueNodeLabelPathId}).attr("startOffset",C).style("fill",L),U.text(function(t){return t.horizontal||t.node.dy>5?t.node.label:""}).attr("text-anchor",function(t){return t.horizontal&&t.left?"end":"start"}),U.transition().ease(n.ease).duration(n.duration).attr("startOffset",C).style("fill",L)}},{"../../components/color":591,"../../components/drawing":612,"../../lib":717,"../../lib/gup":715,"../../registry":846,"./constants":1113,"@plotly/d3-sankey":56,"@plotly/d3-sankey-circular":55,d3:165,"d3-force":158,"d3-interpolate":160,tinycolor2:535}],1118:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r=[],n=t.cd[0].trace,a=n._sankey.graph.nodes,i=0;i<a.length;i++){var o=a[i];if(!o.partOfGroup){var s=[(o.x0+o.x1)/2,(o.y0+o.y1)/2];"v"===n.orientation&&s.reverse(),e&&e.contains(s,!1,i,t)&&r.push({pointNumber:o.pointNumber})}}return r}},{}],1119:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,"tx"),n.mergeArray(e.texttemplate,t,"txt"),n.mergeArray(e.hovertext,t,"htx"),n.mergeArray(e.customdata,t,"data"),n.mergeArray(e.textposition,t,"tp"),e.textfont&&(n.mergeArrayCastPositive(e.textfont.size,t,"ts"),n.mergeArray(e.textfont.color,t,"tc"),n.mergeArray(e.textfont.family,t,"tf"));var a=e.marker;if(a){n.mergeArrayCastPositive(a.size,t,"ms"),n.mergeArrayCastPositive(a.opacity,t,"mo"),n.mergeArray(a.symbol,t,"mx"),n.mergeArray(a.color,t,"mc");var i=a.line;a.line&&(n.mergeArray(i.color,t,"mlc"),n.mergeArrayCastPositive(i.width,t,"mlw"));var o=a.gradient;o&&"none"!==o.type&&(n.mergeArray(o.type,t,"mgt"),n.mergeArray(o.color,t,"mgc"))}}},{"../../lib":717}],1120:[function(t,e,r){"use strict";var n=t("../../plots/template_attributes").texttemplateAttrs,a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../../components/colorscale/attributes"),o=t("../../plots/font_attributes"),s=t("../../components/drawing/attributes").dash,l=t("../../components/drawing"),c=t("./constants"),u=t("../../lib/extend").extendFlat;e.exports={x:{valType:"data_array",editType:"calc+clearAxisTypes",anim:!0},x0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes",anim:!0},dx:{valType:"number",dflt:1,editType:"calc",anim:!0},y:{valType:"data_array",editType:"calc+clearAxisTypes",anim:!0},y0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes",anim:!0},dy:{valType:"number",dflt:1,editType:"calc",anim:!0},stackgroup:{valType:"string",dflt:"",editType:"calc"},orientation:{valType:"enumerated",values:["v","h"],editType:"calc"},groupnorm:{valType:"enumerated",values:["","fraction","percent"],dflt:"",editType:"calc"},stackgaps:{valType:"enumerated",values:["infer zero","interpolate"],dflt:"infer zero",editType:"calc"},text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},texttemplate:n({},{}),hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"style"},mode:{valType:"flaglist",flags:["lines","markers","text"],extras:["none"],editType:"calc"},hoveron:{valType:"flaglist",flags:["points","fills"],editType:"style"},hovertemplate:a({},{keys:c.eventDataKeys}),line:{color:{valType:"color",editType:"style",anim:!0},width:{valType:"number",min:0,dflt:2,editType:"style",anim:!0},shape:{valType:"enumerated",values:["linear","spline","hv","vh","hvh","vhv"],dflt:"linear",editType:"plot"},smoothing:{valType:"number",min:0,max:1.3,dflt:1,editType:"plot"},dash:u({},s,{editType:"style"}),simplify:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},connectgaps:{valType:"boolean",dflt:!1,editType:"calc"},cliponaxis:{valType:"boolean",dflt:!0,editType:"plot"},fill:{valType:"enumerated",values:["none","tozeroy","tozerox","tonexty","tonextx","toself","tonext"],editType:"calc"},fillcolor:{valType:"color",editType:"style",anim:!0},marker:u({symbol:{valType:"enumerated",values:l.symbolList,dflt:"circle",arrayOk:!0,editType:"style"},opacity:{valType:"number",min:0,max:1,arrayOk:!0,editType:"style",anim:!0},size:{valType:"number",min:0,dflt:6,arrayOk:!0,editType:"calc",anim:!0},maxdisplayed:{valType:"number",min:0,dflt:0,editType:"plot"},sizeref:{valType:"number",dflt:1,editType:"calc"},sizemin:{valType:"number",min:0,dflt:0,editType:"calc"},sizemode:{valType:"enumerated",values:["diameter","area"],dflt:"diameter",editType:"calc"},line:u({width:{valType:"number",min:0,arrayOk:!0,editType:"style",anim:!0},editType:"calc"},i("marker.line",{anim:!0})),gradient:{type:{valType:"enumerated",values:["radial","horizontal","vertical","none"],arrayOk:!0,dflt:"none",editType:"calc"},color:{valType:"color",arrayOk:!0,editType:"calc"},editType:"calc"},editType:"calc"},i("marker",{anim:!0})),selected:{marker:{opacity:{valType:"number",min:0,max:1,editType:"style"},color:{valType:"color",editType:"style"},size:{valType:"number",min:0,editType:"style"},editType:"style"},textfont:{color:{valType:"color",editType:"style"},editType:"style"},editType:"style"},unselected:{marker:{opacity:{valType:"number",min:0,max:1,editType:"style"},color:{valType:"color",editType:"style"},size:{valType:"number",min:0,editType:"style"},editType:"style"},textfont:{color:{valType:"color",editType:"style"},editType:"style"},editType:"style"},textposition:{valType:"enumerated",values:["top left","top center","top right","middle left","middle center","middle right","bottom left","bottom center","bottom right"],dflt:"middle center",arrayOk:!0,editType:"calc"},textfont:o({editType:"calc",colorEditType:"style",arrayOk:!0}),r:{valType:"data_array",editType:"calc"},t:{valType:"data_array",editType:"calc"}}},{"../../components/colorscale/attributes":598,"../../components/drawing":612,"../../components/drawing/attributes":611,"../../lib/extend":708,"../../plots/font_attributes":791,"../../plots/template_attributes":841,"./constants":1124}],1121:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../plots/cartesian/axes"),o=t("../../constants/numerical").BADNUM,s=t("./subtypes"),l=t("./colorscale_calc"),c=t("./arrays_to_calcdata"),u=t("./calc_selection");function h(t,e,r,n,a,o,l){var c=e._length,u=t._fullLayout,h=r._id,f=n._id,p=u._firstScatter[d(e)]===e.uid,v=(g(e,u,r,n)||{}).orientation,m=e.fill;r._minDtick=0,n._minDtick=0;var y={padded:!0},x={padded:!0};l&&(y.ppad=x.ppad=l);var b=c<2||a[0]!==a[c-1]||o[0]!==o[c-1];b&&("tozerox"===m||"tonextx"===m&&(p||"h"===v))?y.tozero=!0:(e.error_y||{}).visible||"tonexty"!==m&&"tozeroy"!==m&&(s.hasMarkers(e)||s.hasText(e))||(y.padded=!1,y.ppad=0),b&&("tozeroy"===m||"tonexty"===m&&(p||"v"===v))?x.tozero=!0:"tonextx"!==m&&"tozerox"!==m||(x.padded=!1),h&&(e._extremes[h]=i.findExtremes(r,a,y)),f&&(e._extremes[f]=i.findExtremes(n,o,x))}function f(t,e){if(s.hasMarkers(t)){var r,n=t.marker,o=1.6*(t.marker.sizeref||1);if(r="area"===t.marker.sizemode?function(t){return Math.max(Math.sqrt((t||0)/o),3)}:function(t){return Math.max((t||0)/o,3)},a.isArrayOrTypedArray(n.size)){var l={type:"linear"};i.setConvert(l);for(var c=l.makeCalcdata(t.marker,"size"),u=new Array(e),h=0;h<e;h++)u[h]=r(c[h]);return u}return r(n.size)}}function p(t,e){var r=d(e),n=t._firstScatter;n[r]||(n[r]=e.uid)}function d(t){var e=t.stackgroup;return t.xaxis+t.yaxis+t.type+(e?"-"+e:"")}function g(t,e,r,n){var a=t.stackgroup;if(a){var i=e._scatterStackOpts[r._id+n._id][a],o="v"===i.orientation?n:r;return"linear"===o.type||"log"===o.type?i:void 0}}e.exports={calc:function(t,e){var r,s,d,v,m,y,x=t._fullLayout,b=i.getFromId(t,e.xaxis||"x"),_=i.getFromId(t,e.yaxis||"y"),w=b.makeCalcdata(e,"x"),k=_.makeCalcdata(e,"y"),T=e._length,M=new Array(T),A=e.ids,S=g(e,x,b,_),E=!1;p(x,e);var L,C="x",P="y";for(S?(a.pushUnique(S.traceIndices,e._expandedIndex),(r="v"===S.orientation)?(P="s",L="x"):(C="s",L="y"),m="interpolate"===S.stackgaps):h(t,e,b,_,w,k,f(e,T)),s=0;s<T;s++){var O=M[s]={},z=n(w[s]),I=n(k[s]);z&&I?(O[C]=w[s],O[P]=k[s]):S&&(r?z:I)?(O[L]=r?w[s]:k[s],O.gap=!0,m?(O.s=o,E=!0):O.s=0):O[C]=O[P]=o,A&&(O.id=String(A[s]))}if(c(M,e),l(t,e),u(M,e),S){for(s=0;s<M.length;)M[s][L]===o?M.splice(s,1):s++;if(a.sort(M,function(t,e){return t[L]-e[L]||t.i-e.i}),E){for(s=0;s<M.length-1&&M[s].gap;)s++;for((y=M[s].s)||(y=M[s].s=0),d=0;d<s;d++)M[d].s=y;for(v=M.length-1;v>s&&M[v].gap;)v--;for(y=M[v].s,d=M.length-1;d>v;d--)M[d].s=y;for(;s<v;)if(M[++s].gap){for(d=s+1;M[d].gap;)d++;for(var D=M[s-1][L],R=M[s-1].s,F=(M[d].s-R)/(M[d][L]-D);s<d;)M[s].s=R+(M[s][L]-D)*F,s++}}}return M},calcMarkerSize:f,calcAxisExpansion:h,setFirstScatter:p,getStackOpts:g}},{"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/axes":765,"./arrays_to_calcdata":1119,"./calc_selection":1122,"./colorscale_calc":1123,"./subtypes":1144,"fast-isnumeric":228}],1122:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){n.isArrayOrTypedArray(e.selectedpoints)&&n.tagSelected(t,e)}},{"../../lib":717}],1123:[function(t,e,r){"use strict";var n=t("../../components/colorscale/helpers").hasColorscale,a=t("../../components/colorscale/calc"),i=t("./subtypes");e.exports=function(t,e){i.hasLines(e)&&n(e,"line")&&a(t,e,{vals:e.line.color,containerStr:"line",cLetter:"c"}),i.hasMarkers(e)&&(n(e,"marker")&&a(t,e,{vals:e.marker.color,containerStr:"marker",cLetter:"c"}),n(e,"marker.line")&&a(t,e,{vals:e.marker.line.color,containerStr:"marker.line",cLetter:"c"}))}},{"../../components/colorscale/calc":599,"../../components/colorscale/helpers":602,"./subtypes":1144}],1124:[function(t,e,r){"use strict";e.exports={PTS_LINESONLY:20,minTolerance:.2,toleranceGrowth:10,maxScreensAway:20,eventDataKeys:[]}},{}],1125:[function(t,e,r){"use strict";var n=t("./calc");function a(t,e,r,n,a,i,o){a[n]=!0;var s={i:null,gap:!0,s:0};if(s[o]=r,t.splice(e,0,s),e&&r===t[e-1][o]){var l=t[e-1];s.s=l.s,s.i=l.i,s.gap=l.gap}else i&&(s.s=function(t,e,r,n){var a=t[e-1],i=t[e+1];return i?a?a.s+(i.s-a.s)*(r-a[n])/(i[n]-a[n]):i.s:a.s}(t,e,r,o));e||(t[0].t=t[1].t,t[0].trace=t[1].trace,delete t[1].t,delete t[1].trace)}e.exports=function(t,e){var r=e.xaxis,i=e.yaxis,o=r._id+i._id,s=t._fullLayout._scatterStackOpts[o];if(s){var l,c,u,h,f,p,d,g,v,m,y,x,b,_,w,k=t.calcdata;for(var T in s){var M=(m=s[T]).traceIndices;if(M.length){for(y="interpolate"===m.stackgaps,x=m.groupnorm,"v"===m.orientation?(b="x",_="y"):(b="y",_="x"),w=new Array(M.length),l=0;l<w.length;l++)w[l]=!1;p=k[M[0]];var A=new Array(p.length);for(l=0;l<p.length;l++)A[l]=p[l][b];for(l=1;l<M.length;l++){for(f=k[M[l]],c=u=0;c<f.length;c++){for(d=f[c][b];d>A[u]&&u<A.length;u++)a(f,c,A[u],l,w,y,b),c++;if(d!==A[u]){for(h=0;h<l;h++)a(k[M[h]],u,d,h,w,y,b);A.splice(u,0,d)}u++}for(;u<A.length;u++)a(f,c,A[u],l,w,y,b),c++}var S=A.length;for(c=0;c<p.length;c++){for(g=p[c][_]=p[c].s,l=1;l<M.length;l++)(f=k[M[l]])[0].trace._rawLength=f[0].trace._length,f[0].trace._length=S,g+=f[c].s,f[c][_]=g;if(x)for(v=("fraction"===x?g:g/100)||1,l=0;l<M.length;l++){var E=k[M[l]][c];E[_]/=v,E.sNorm=E.s/v}}for(l=0;l<M.length;l++){var L=(f=k[M[l]])[0].trace,C=n.calcMarkerSize(L,L._rawLength),P=Array.isArray(C);if(C&&w[l]||P){var O=C;for(C=new Array(S),c=0;c<S;c++)C[c]=f[c].gap?0:P?O[f[c].i]:O}var z=new Array(S),I=new Array(S);for(c=0;c<S;c++)z[c]=f[c].x,I[c]=f[c].y;n.calcAxisExpansion(t,L,r,i,z,I,C),f[0].t.orientation=m.orientation}}}}}},{"./calc":1121}],1126:[function(t,e,r){"use strict";e.exports=function(t){for(var e=0;e<t.length;e++){var r=t[e];if("scatter"===r.type){var n=r.fill;if("none"!==n&&"toself"!==n&&(r.opacity=void 0,"tonexty"===n||"tonextx"===n))for(var a=e-1;a>=0;a--){var i=t[a];if("scatter"===i.type&&i.xaxis===r.xaxis&&i.yaxis===r.yaxis){i.opacity=void 0;break}}}}}},{}],1127:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../registry"),i=t("./attributes"),o=t("./constants"),s=t("./subtypes"),l=t("./xy_defaults"),c=t("./stack_defaults"),u=t("./marker_defaults"),h=t("./line_defaults"),f=t("./line_shape_defaults"),p=t("./text_defaults"),d=t("./fillcolor_defaults");e.exports=function(t,e,r,g){function v(r,a){return n.coerce(t,e,i,r,a)}var m=l(t,e,g,v);if(m||(e.visible=!1),e.visible){var y=c(t,e,g,v),x=!y&&m<o.PTS_LINESONLY?"lines+markers":"lines";v("text"),v("hovertext"),v("mode",x),s.hasLines(e)&&(h(t,e,r,g,v),f(t,e,v),v("connectgaps"),v("line.simplify")),s.hasMarkers(e)&&u(t,e,r,g,v,{gradient:!0}),s.hasText(e)&&(v("texttemplate"),p(t,e,g,v));var b=[];(s.hasMarkers(e)||s.hasText(e))&&(v("cliponaxis"),v("marker.maxdisplayed"),b.push("points")),v("fill",y?y.fillDflt:"none"),"none"!==e.fill&&(d(t,e,r,v),s.hasLines(e)||f(t,e,v));var _=(e.line||{}).color,w=(e.marker||{}).color;"tonext"!==e.fill&&"toself"!==e.fill||b.push("fills"),v("hoveron",b.join("+")||"points"),"fills"!==e.hoveron&&v("hovertemplate");var k=a.getComponentMethod("errorbars","supplyDefaults");k(t,e,_||w||r,{axis:"y"}),k(t,e,_||w||r,{axis:"x",inherit:"y"}),n.coerceSelectionMarkerOpacity(e,v)}}},{"../../lib":717,"../../registry":846,"./attributes":1120,"./constants":1124,"./fillcolor_defaults":1128,"./line_defaults":1133,"./line_shape_defaults":1135,"./marker_defaults":1139,"./stack_defaults":1142,"./subtypes":1144,"./text_defaults":1145,"./xy_defaults":1146}],1128:[function(t,e,r){"use strict";var n=t("../../components/color"),a=t("../../lib").isArrayOrTypedArray;e.exports=function(t,e,r,i){var o=!1;if(e.marker){var s=e.marker.color,l=(e.marker.line||{}).color;s&&!a(s)?o=s:l&&!a(l)&&(o=l)}i("fillcolor",n.addOpacity((e.line||{}).color||o||r,.5))}},{"../../components/color":591,"../../lib":717}],1129:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes");e.exports=function(t,e,r){var a={},i={_fullLayout:r},o=n.getFromTrace(i,e,"x"),s=n.getFromTrace(i,e,"y");return a.xLabel=n.tickText(o,t.x,!0).text,a.yLabel=n.tickText(s,t.y,!0).text,a}},{"../../plots/cartesian/axes":765}],1130:[function(t,e,r){"use strict";var n=t("../../components/color"),a=t("./subtypes");e.exports=function(t,e){var r,i;if("lines"===t.mode)return(r=t.line.color)&&n.opacity(r)?r:t.fillcolor;if("none"===t.mode)return t.fill?t.fillcolor:"";var o=e.mcc||(t.marker||{}).color,s=e.mlcc||((t.marker||{}).line||{}).color;return(i=o&&n.opacity(o)?o:s&&n.opacity(s)&&(e.mlw||((t.marker||{}).line||{}).width)?s:"")?n.opacity(i)<.3?n.addOpacity(i,.3):i:(r=(t.line||{}).color)&&n.opacity(r)&&a.hasLines(t)&&t.line.width?r:t.fillcolor}},{"../../components/color":591,"./subtypes":1144}],1131:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/fx"),i=t("../../registry"),o=t("./get_trace_color"),s=t("../../components/color"),l=n.fillText;e.exports=function(t,e,r,c){var u=t.cd,h=u[0].trace,f=t.xa,p=t.ya,d=f.c2p(e),g=p.c2p(r),v=[d,g],m=h.hoveron||"",y=-1!==h.mode.indexOf("markers")?3:.5;if(-1!==m.indexOf("points")){var x=function(t){var e=Math.max(y,t.mrc||0),r=f.c2p(t.x)-d,n=p.c2p(t.y)-g;return Math.max(Math.sqrt(r*r+n*n)-e,1-y/e)},b=a.getDistanceFunction(c,function(t){var e=Math.max(3,t.mrc||0),r=1-1/e,n=Math.abs(f.c2p(t.x)-d);return n<e?r*n/e:n-e+r},function(t){var e=Math.max(3,t.mrc||0),r=1-1/e,n=Math.abs(p.c2p(t.y)-g);return n<e?r*n/e:n-e+r},x);if(a.getClosest(u,b,t),!1!==t.index){var _=u[t.index],w=f.c2p(_.x,!0),k=p.c2p(_.y,!0),T=_.mrc||1;t.index=_.i;var M=u[0].t.orientation,A=M&&(_.sNorm||_.s),S="h"===M?A:_.x,E="v"===M?A:_.y;return n.extendFlat(t,{color:o(h,_),x0:w-T,x1:w+T,xLabelVal:S,y0:k-T,y1:k+T,yLabelVal:E,spikeDistance:x(_),hovertemplate:h.hovertemplate}),l(_,h,t),i.getComponentMethod("errorbars","hoverInfo")(_,h,t),[t]}}if(-1!==m.indexOf("fills")&&h._polygons){var L,C,P,O,z,I,D,R,F,B=h._polygons,N=[],j=!1,V=1/0,U=-1/0,q=1/0,H=-1/0;for(L=0;L<B.length;L++)(P=B[L]).contains(v)&&(j=!j,N.push(P),q=Math.min(q,P.ymin),H=Math.max(H,P.ymax));if(j){var G=((q=Math.max(q,0))+(H=Math.min(H,p._length)))/2;for(L=0;L<N.length;L++)for(O=N[L].pts,C=1;C<O.length;C++)(R=O[C-1][1])>G!=(F=O[C][1])>=G&&(I=O[C-1][0],D=O[C][0],F-R&&(z=I+(D-I)*(G-R)/(F-R),V=Math.min(V,z),U=Math.max(U,z)));V=Math.max(V,0),U=Math.min(U,f._length);var Y=s.defaultLine;return s.opacity(h.fillcolor)?Y=h.fillcolor:s.opacity((h.line||{}).color)&&(Y=h.line.color),n.extendFlat(t,{distance:t.maxHoverDistance,x0:V,x1:U,y0:G,y1:G,color:Y,hovertemplate:!1}),delete t.index,h.text&&!Array.isArray(h.text)?t.text=String(h.text):t.text=h.name,[t]}}}},{"../../components/color":591,"../../components/fx":630,"../../lib":717,"../../registry":846,"./get_trace_color":1130}],1132:[function(t,e,r){"use strict";var n=t("./subtypes");e.exports={hasLines:n.hasLines,hasMarkers:n.hasMarkers,hasText:n.hasText,isBubble:n.isBubble,attributes:t("./attributes"),supplyDefaults:t("./defaults"),crossTraceDefaults:t("./cross_trace_defaults"),calc:t("./calc").calc,crossTraceCalc:t("./cross_trace_calc"),arraysToCalcdata:t("./arrays_to_calcdata"),plot:t("./plot"),colorbar:t("./marker_colorbar"),formatLabels:t("./format_labels"),style:t("./style").style,styleOnSelect:t("./style").styleOnSelect,hoverPoints:t("./hover"),selectPoints:t("./select"),animatable:!0,moduleType:"trace",name:"scatter",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","symbols","errorBarsOK","showLegend","scatter-like","zoomScale"],meta:{}}},{"../../plots/cartesian":776,"./arrays_to_calcdata":1119,"./attributes":1120,"./calc":1121,"./cross_trace_calc":1125,"./cross_trace_defaults":1126,"./defaults":1127,"./format_labels":1129,"./hover":1131,"./marker_colorbar":1138,"./plot":1140,"./select":1141,"./style":1143,"./subtypes":1144}],1133:[function(t,e,r){"use strict";var n=t("../../lib").isArrayOrTypedArray,a=t("../../components/colorscale/helpers").hasColorscale,i=t("../../components/colorscale/defaults");e.exports=function(t,e,r,o,s,l){var c=(t.marker||{}).color;(s("line.color",r),a(t,"line"))?i(t,e,o,s,{prefix:"line.",cLetter:"c"}):s("line.color",!n(c)&&c||r);s("line.width"),(l||{}).noDash||s("line.dash")}},{"../../components/colorscale/defaults":601,"../../components/colorscale/helpers":602,"../../lib":717}],1134:[function(t,e,r){"use strict";var n=t("../../constants/numerical"),a=n.BADNUM,i=n.LOG_CLIP,o=i+.5,s=i-.5,l=t("../../lib"),c=l.segmentsIntersect,u=l.constrain,h=t("./constants");e.exports=function(t,e){var r,n,i,f,p,d,g,v,m,y,x,b,_,w,k,T,M,A,S=e.xaxis,E=e.yaxis,L="log"===S.type,C="log"===E.type,P=S._length,O=E._length,z=e.connectGaps,I=e.baseTolerance,D=e.shape,R="linear"===D,F=e.fill&&"none"!==e.fill,B=[],N=h.minTolerance,j=t.length,V=new Array(j),U=0;function q(r){var n=t[r];if(!n)return!1;var i=e.linearized?S.l2p(n.x):S.c2p(n.x),l=e.linearized?E.l2p(n.y):E.c2p(n.y);if(i===a){if(L&&(i=S.c2p(n.x,!0)),i===a)return!1;C&&l===a&&(i*=Math.abs(S._m*O*(S._m>0?o:s)/(E._m*P*(E._m>0?o:s)))),i*=1e3}if(l===a){if(C&&(l=E.c2p(n.y,!0)),l===a)return!1;l*=1e3}return[i,l]}function H(t,e,r,n){var a=r-t,i=n-e,o=.5-t,s=.5-e,l=a*a+i*i,c=a*o+i*s;if(c>0&&c<l){var u=o*i-s*a;if(u*u<l)return!0}}function G(t,e){var r=t[0]/P,n=t[1]/O,a=Math.max(0,-r,r-1,-n,n-1);return a&&void 0!==M&&H(r,n,M,A)&&(a=0),a&&e&&H(r,n,e[0]/P,e[1]/O)&&(a=0),(1+h.toleranceGrowth*a)*I}function Y(t,e){var r=t[0]-e[0],n=t[1]-e[1];return Math.sqrt(r*r+n*n)}var W,X,Z,J,K,Q,$,tt=h.maxScreensAway,et=-P*tt,rt=P*(1+tt),nt=-O*tt,at=O*(1+tt),it=[[et,nt,rt,nt],[rt,nt,rt,at],[rt,at,et,at],[et,at,et,nt]];function ot(t){if(t[0]<et||t[0]>rt||t[1]<nt||t[1]>at)return[u(t[0],et,rt),u(t[1],nt,at)]}function st(t,e){return t[0]===e[0]&&(t[0]===et||t[0]===rt)||(t[1]===e[1]&&(t[1]===nt||t[1]===at)||void 0)}function lt(t,e,r){return function(n,a){var i=ot(n),o=ot(a),s=[];if(i&&o&&st(i,o))return s;i&&s.push(i),o&&s.push(o);var c=2*l.constrain((n[t]+a[t])/2,e,r)-((i||n)[t]+(o||a)[t]);c&&((i&&o?c>0==i[t]>o[t]?i:o:i||o)[t]+=c);return s}}function ct(t){var e=t[0],r=t[1],n=e===V[U-1][0],a=r===V[U-1][1];if(!n||!a)if(U>1){var i=e===V[U-2][0],o=r===V[U-2][1];n&&(e===et||e===rt)&&i?o?U--:V[U-1]=t:a&&(r===nt||r===at)&&o?i?U--:V[U-1]=t:V[U++]=t}else V[U++]=t}function ut(t){V[U-1][0]!==t[0]&&V[U-1][1]!==t[1]&&ct([Z,J]),ct(t),K=null,Z=J=0}function ht(t){if(M=t[0]/P,A=t[1]/O,W=t[0]<et?et:t[0]>rt?rt:0,X=t[1]<nt?nt:t[1]>at?at:0,W||X){if(U)if(K){var e=$(K,t);e.length>1&&(ut(e[0]),V[U++]=e[1])}else Q=$(V[U-1],t)[0],V[U++]=Q;else V[U++]=[W||t[0],X||t[1]];var r=V[U-1];W&&X&&(r[0]!==W||r[1]!==X)?(K&&(Z!==W&&J!==X?ct(Z&&J?(n=K,i=(a=t)[0]-n[0],o=(a[1]-n[1])/i,(n[1]*a[0]-a[1]*n[0])/i>0?[o>0?et:rt,at]:[o>0?rt:et,nt]):[Z||W,J||X]):Z&&J&&ct([Z,J])),ct([W,X])):Z-W&&J-X&&ct([W||Z,X||J]),K=t,Z=W,J=X}else K&&ut($(K,t)[0]),V[U++]=t;var n,a,i,o}for("linear"===D||"spline"===D?$=function(t,e){for(var r=[],n=0,a=0;a<4;a++){var i=it[a],o=c(t[0],t[1],e[0],e[1],i[0],i[1],i[2],i[3]);o&&(!n||Math.abs(o.x-r[0][0])>1||Math.abs(o.y-r[0][1])>1)&&(o=[o.x,o.y],n&&Y(o,t)<Y(r[0],t)?r.unshift(o):r.push(o),n++)}return r}:"hv"===D||"vh"===D?$=function(t,e){var r=[],n=ot(t),a=ot(e);return n&&a&&st(n,a)?r:(n&&r.push(n),a&&r.push(a),r)}:"hvh"===D?$=lt(0,et,rt):"vhv"===D&&($=lt(1,nt,at)),r=0;r<j;r++)if(n=q(r)){for(U=0,K=null,ht(n),r++;r<j;r++){if(!(f=q(r))){if(z)continue;break}if(R&&e.simplify){var ft=q(r+1);if(y=Y(f,n),F&&(0===U||U===j-1)||!(y<G(f,ft)*N)){for(v=[(f[0]-n[0])/y,(f[1]-n[1])/y],p=n,x=y,b=w=k=0,g=!1,i=f,r++;r<t.length;r++){if(d=ft,ft=q(r+1),!d){if(z)continue;break}if(T=(m=[d[0]-n[0],d[1]-n[1]])[0]*v[1]-m[1]*v[0],w=Math.min(w,T),(k=Math.max(k,T))-w>G(d,ft))break;i=d,(_=m[0]*v[0]+m[1]*v[1])>x?(x=_,f=d,g=!1):_<b&&(b=_,p=d,g=!0)}if(g?(ht(f),i!==p&&ht(p)):(p!==n&&ht(p),i!==f&&ht(f)),ht(i),r>=t.length||!d)break;ht(d),n=d}}else ht(f)}K&&ct([Z||K[0],J||K[1]]),B.push(V.slice(0,U))}return B}},{"../../constants/numerical":693,"../../lib":717,"./constants":1124}],1135:[function(t,e,r){"use strict";e.exports=function(t,e,r){"spline"===r("line.shape")&&r("line.smoothing")}},{}],1136:[function(t,e,r){"use strict";var n={tonextx:1,tonexty:1,tonext:1};e.exports=function(t,e,r){var a,i,o,s,l,c={},u=!1,h=-1,f=0,p=-1;for(i=0;i<r.length;i++)(o=(a=r[i][0].trace).stackgroup||"")?o in c?l=c[o]:(l=c[o]=f,f++):a.fill in n&&p>=0?l=p:(l=p=f,f++),l<h&&(u=!0),a._groupIndex=h=l;var d=r.slice();u&&d.sort(function(t,e){var r=t[0].trace,n=e[0].trace;return r._groupIndex-n._groupIndex||r.index-n.index});var g={};for(i=0;i<d.length;i++)o=(a=d[i][0].trace).stackgroup||"",!0===a.visible?(a._nexttrace=null,a.fill in n&&(s=g[o],a._prevtrace=s||null,s&&(s._nexttrace=a)),a._ownfill=a.fill&&("tozero"===a.fill.substr(0,6)||"toself"===a.fill||"to"===a.fill.substr(0,2)&&!a._prevtrace),g[o]=a):a._prevtrace=a._nexttrace=a._ownfill=null;return d}},{}],1137:[function(t,e,r){"use strict";var n=t("fast-isnumeric");e.exports=function(t){var e=t.marker,r=e.sizeref||1,a=e.sizemin||0,i="area"===e.sizemode?function(t){return Math.sqrt(t/r)}:function(t){return t/r};return function(t){var e=i(t/2);return n(e)&&e>0?Math.max(e,a):0}}},{"fast-isnumeric":228}],1138:[function(t,e,r){"use strict";e.exports={container:"marker",min:"cmin",max:"cmax"}},{}],1139:[function(t,e,r){"use strict";var n=t("../../components/color"),a=t("../../components/colorscale/helpers").hasColorscale,i=t("../../components/colorscale/defaults"),o=t("./subtypes");e.exports=function(t,e,r,s,l,c){var u=o.isBubble(t),h=(t.line||{}).color;(c=c||{},h&&(r=h),l("marker.symbol"),l("marker.opacity",u?.7:1),l("marker.size"),l("marker.color",r),a(t,"marker")&&i(t,e,s,l,{prefix:"marker.",cLetter:"c"}),c.noSelect||(l("selected.marker.color"),l("unselected.marker.color"),l("selected.marker.size"),l("unselected.marker.size")),c.noLine||(l("marker.line.color",h&&!Array.isArray(h)&&e.marker.color!==h?h:u?n.background:n.defaultLine),a(t,"marker.line")&&i(t,e,s,l,{prefix:"marker.line.",cLetter:"c"}),l("marker.line.width",u?1:0)),u&&(l("marker.sizeref"),l("marker.sizemin"),l("marker.sizemode")),c.gradient)&&("none"!==l("marker.gradient.type")&&l("marker.gradient.color"))}},{"../../components/color":591,"../../components/colorscale/defaults":601,"../../components/colorscale/helpers":602,"./subtypes":1144}],1140:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../lib"),o=i.ensureSingle,s=i.identity,l=t("../../components/drawing"),c=t("./subtypes"),u=t("./line_points"),h=t("./link_traces"),f=t("../../lib/polygon").tester;function p(t,e,r,h,p,d,g){var v;!function(t,e,r,a,o){var s=r.xaxis,l=r.yaxis,u=n.extent(i.simpleMap(s.range,s.r2c)),h=n.extent(i.simpleMap(l.range,l.r2c)),f=a[0].trace;if(!c.hasMarkers(f))return;var p=f.marker.maxdisplayed;if(0===p)return;var d=a.filter(function(t){return t.x>=u[0]&&t.x<=u[1]&&t.y>=h[0]&&t.y<=h[1]}),g=Math.ceil(d.length/p),v=0;o.forEach(function(t,r){var n=t[0].trace;c.hasMarkers(n)&&n.marker.maxdisplayed>0&&r<e&&v++});var m=Math.round(v*g/3+Math.floor(v/3)*g/7.1);a.forEach(function(t){delete t.vis}),d.forEach(function(t,e){0===Math.round((e+m)%g)&&(t.vis=!0)})}(0,e,r,h,p);var m=!!g&&g.duration>0;function y(t){return m?t.transition():t}var x=r.xaxis,b=r.yaxis,_=h[0].trace,w=_.line,k=n.select(d),T=o(k,"g","errorbars"),M=o(k,"g","lines"),A=o(k,"g","points"),S=o(k,"g","text");if(a.getComponentMethod("errorbars","plot")(t,T,r,g),!0===_.visible){var E,L;y(k).style("opacity",_.opacity);var C=_.fill.charAt(_.fill.length-1);"x"!==C&&"y"!==C&&(C=""),h[0][r.isRangePlot?"nodeRangePlot3":"node3"]=k;var P,O,z="",I=[],D=_._prevtrace;D&&(z=D._prevRevpath||"",L=D._nextFill,I=D._polygons);var R,F,B,N,j,V,U,q="",H="",G=[],Y=i.noop;if(E=_._ownFill,c.hasLines(_)||"none"!==_.fill){for(L&&L.datum(h),-1!==["hv","vh","hvh","vhv"].indexOf(w.shape)?(R=l.steps(w.shape),F=l.steps(w.shape.split("").reverse().join(""))):R=F="spline"===w.shape?function(t){var e=t[t.length-1];return t.length>1&&t[0][0]===e[0]&&t[0][1]===e[1]?l.smoothclosed(t.slice(1),w.smoothing):l.smoothopen(t,w.smoothing)}:function(t){return"M"+t.join("L")},B=function(t){return F(t.reverse())},G=u(h,{xaxis:x,yaxis:b,connectGaps:_.connectgaps,baseTolerance:Math.max(w.width||1,3)/4,shape:w.shape,simplify:w.simplify,fill:_.fill}),U=_._polygons=new Array(G.length),v=0;v<G.length;v++)_._polygons[v]=f(G[v]);G.length&&(N=G[0][0],V=(j=G[G.length-1])[j.length-1]),Y=function(t){return function(e){if(P=R(e),O=B(e),q?C?(q+="L"+P.substr(1),H=O+"L"+H.substr(1)):(q+="Z"+P,H=O+"Z"+H):(q=P,H=O),c.hasLines(_)&&e.length>1){var r=n.select(this);if(r.datum(h),t)y(r.style("opacity",0).attr("d",P).call(l.lineGroupStyle)).style("opacity",1);else{var a=y(r);a.attr("d",P),l.singleLineStyle(h,a)}}}}}var W=M.selectAll(".js-line").data(G);y(W.exit()).style("opacity",0).remove(),W.each(Y(!1)),W.enter().append("path").classed("js-line",!0).style("vector-effect","non-scaling-stroke").call(l.lineGroupStyle).each(Y(!0)),l.setClipUrl(W,r.layerClipId,t),G.length?(E?(E.datum(h),N&&V&&(C?("y"===C?N[1]=V[1]=b.c2p(0,!0):"x"===C&&(N[0]=V[0]=x.c2p(0,!0)),y(E).attr("d","M"+V+"L"+N+"L"+q.substr(1)).call(l.singleFillStyle)):y(E).attr("d",q+"Z").call(l.singleFillStyle))):L&&("tonext"===_.fill.substr(0,6)&&q&&z?("tonext"===_.fill?y(L).attr("d",q+"Z"+z+"Z").call(l.singleFillStyle):y(L).attr("d",q+"L"+z.substr(1)+"Z").call(l.singleFillStyle),_._polygons=_._polygons.concat(I)):(Z(L),_._polygons=null)),_._prevRevpath=H,_._prevPolygons=U):(E?Z(E):L&&Z(L),_._polygons=_._prevRevpath=_._prevPolygons=null),A.datum(h),S.datum(h),function(e,a,i){var o,u=i[0].trace,h=c.hasMarkers(u),f=c.hasText(u),p=tt(u),d=et,g=et;if(h||f){var v=s,_=u.stackgroup,w=_&&"infer zero"===t._fullLayout._scatterStackOpts[x._id+b._id][_].stackgaps;u.marker.maxdisplayed||u._needsCull?v=w?K:J:_&&!w&&(v=Q),h&&(d=v),f&&(g=v)}var k,T=(o=e.selectAll("path.point").data(d,p)).enter().append("path").classed("point",!0);m&&T.call(l.pointStyle,u,t).call(l.translatePoints,x,b).style("opacity",0).transition().style("opacity",1),o.order(),h&&(k=l.makePointStyleFns(u)),o.each(function(e){var a=n.select(this),i=y(a);l.translatePoint(e,i,x,b)?(l.singlePointStyle(e,i,u,k,t),r.layerClipId&&l.hideOutsideRangePoint(e,i,x,b,u.xcalendar,u.ycalendar),u.customdata&&a.classed("plotly-customdata",null!==e.data&&void 0!==e.data)):i.remove()}),m?o.exit().transition().style("opacity",0).remove():o.exit().remove(),(o=a.selectAll("g").data(g,p)).enter().append("g").classed("textpoint",!0).append("text"),o.order(),o.each(function(t){var e=n.select(this),a=y(e.select("text"));l.translatePoint(t,a,x,b)?r.layerClipId&&l.hideOutsideRangePoint(t,e,x,b,u.xcalendar,u.ycalendar):e.remove()}),o.selectAll("text").call(l.textPointStyle,u,t).each(function(t){var e=x.c2p(t.x),r=b.c2p(t.y);n.select(this).selectAll("tspan.line").each(function(){y(n.select(this)).attr({x:e,y:r})})}),o.exit().remove()}(A,S,h);var X=!1===_.cliponaxis?null:r.layerClipId;l.setClipUrl(A,X,t),l.setClipUrl(S,X,t)}function Z(t){y(t).attr("d","M0,0Z")}function J(t){return t.filter(function(t){return!t.gap&&t.vis})}function K(t){return t.filter(function(t){return t.vis})}function Q(t){return t.filter(function(t){return!t.gap})}function $(t){return t.id}function tt(t){if(t.ids)return $}function et(){return!1}}e.exports=function(t,e,r,a,i,c){var u,f,d=!i,g=!!i&&i.duration>0,v=h(t,e,r);((u=a.selectAll("g.trace").data(v,function(t){return t[0].trace.uid})).enter().append("g").attr("class",function(t){return"trace scatter trace"+t[0].trace.uid}).style("stroke-miterlimit",2),u.order(),function(t,e,r){e.each(function(e){var a=o(n.select(this),"g","fills");l.setClipUrl(a,r.layerClipId,t);var i=e[0].trace,c=[];i._ownfill&&c.push("_ownFill"),i._nexttrace&&c.push("_nextFill");var u=a.selectAll("g").data(c,s);u.enter().append("g"),u.exit().each(function(t){i[t]=null}).remove(),u.order().each(function(t){i[t]=o(n.select(this),"path","js-fill")})})}(t,u,e),g)?(c&&(f=c()),n.transition().duration(i.duration).ease(i.easing).each("end",function(){f&&f()}).each("interrupt",function(){f&&f()}).each(function(){a.selectAll("g.trace").each(function(r,n){p(t,n,e,r,v,this,i)})})):u.each(function(r,n){p(t,n,e,r,v,this,i)});d&&u.exit().remove(),a.selectAll("path:not([d])").remove()}},{"../../components/drawing":612,"../../lib":717,"../../lib/polygon":729,"../../registry":846,"./line_points":1134,"./link_traces":1136,"./subtypes":1144,d3:165}],1141:[function(t,e,r){"use strict";var n=t("./subtypes");e.exports=function(t,e){var r,a,i,o,s=t.cd,l=t.xaxis,c=t.yaxis,u=[],h=s[0].trace;if(!n.hasMarkers(h)&&!n.hasText(h))return[];if(!1===e)for(r=0;r<s.length;r++)s[r].selected=0;else for(r=0;r<s.length;r++)a=s[r],i=l.c2p(a.x),o=c.c2p(a.y),null!==a.i&&e.contains([i,o],!1,r,t)?(u.push({pointNumber:a.i,x:l.c2d(a.x),y:c.c2d(a.y)}),a.selected=1):a.selected=0;return u}},{"./subtypes":1144}],1142:[function(t,e,r){"use strict";var n=["orientation","groupnorm","stackgaps"];e.exports=function(t,e,r,a){var i=r._scatterStackOpts,o=a("stackgroup");if(o){var s=e.xaxis+e.yaxis,l=i[s];l||(l=i[s]={});var c=l[o],u=!1;c?c.traces.push(e):(c=l[o]={traceIndices:[],traces:[e]},u=!0);for(var h={orientation:e.x&&!e.y?"h":"v"},f=0;f<n.length;f++){var p=n[f],d=p+"Found";if(!c[d]){var g=void 0!==t[p],v="orientation"===p;if((g||u)&&(c[p]=a(p,h[p]),v&&(c.fillDflt="h"===c[p]?"tonextx":"tonexty"),g&&(c[d]=!0,!u&&(delete c.traces[0][p],v))))for(var m=0;m<c.traces.length-1;m++){var y=c.traces[m];y._input.fill!==y.fill&&(y.fill=c.fillDflt)}}}return c}}},{}],1143:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/drawing"),i=t("../../registry");function o(t,e,r){a.pointStyle(t.selectAll("path.point"),e,r)}function s(t,e,r){a.textPointStyle(t.selectAll("text"),e,r)}e.exports={style:function(t){var e=n.select(t).selectAll("g.trace.scatter");e.style("opacity",function(t){return t[0].trace.opacity}),e.selectAll("g.points").each(function(e){o(n.select(this),e.trace||e[0].trace,t)}),e.selectAll("g.text").each(function(e){s(n.select(this),e.trace||e[0].trace,t)}),e.selectAll("g.trace path.js-line").call(a.lineGroupStyle),e.selectAll("g.trace path.js-fill").call(a.fillGroupStyle),i.getComponentMethod("errorbars","style")(e)},stylePoints:o,styleText:s,styleOnSelect:function(t,e,r){var n=e[0].trace;n.selectedpoints?(a.selectedPointStyle(r.selectAll("path.point"),n),a.selectedTextStyle(r.selectAll("text"),n)):(o(r,n,t),s(r,n,t))}}},{"../../components/drawing":612,"../../registry":846,d3:165}],1144:[function(t,e,r){"use strict";var n=t("../../lib");e.exports={hasLines:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf("lines")},hasMarkers:function(t){return t.visible&&(t.mode&&-1!==t.mode.indexOf("markers")||"splom"===t.type)},hasText:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf("text")},isBubble:function(t){return n.isPlainObject(t.marker)&&n.isArrayOrTypedArray(t.marker.size)}}},{"../../lib":717}],1145:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e,r,a,i){i=i||{},a("textposition"),n.coerceFont(a,"textfont",r.font),i.noSelect||(a("selected.textfont.color"),a("unselected.textfont.color"))}},{"../../lib":717}],1146:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../registry");e.exports=function(t,e,r,i){var o,s=i("x"),l=i("y");if(a.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y"],r),s){var c=n.minRowLength(s);l?o=Math.min(c,n.minRowLength(l)):(o=c,i("y0"),i("dy"))}else{if(!l)return 0;o=n.minRowLength(l),i("x0"),i("dx")}return e._length=o,o}},{"../../lib":717,"../../registry":846}],1147:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),a=t("../../components/colorscale/attributes"),i=t("../../plots/template_attributes").hovertemplateAttrs,o=t("../../plots/template_attributes").texttemplateAttrs,s=t("../../plots/attributes"),l=t("../../constants/gl3d_dashes"),c=t("../../constants/gl3d_markers"),u=t("../../lib/extend").extendFlat,h=t("../../plot_api/edit_types").overrideAll,f=n.line,p=n.marker,d=p.line,g=u({width:f.width,dash:{valType:"enumerated",values:Object.keys(l),dflt:"solid"}},a("line"));var v=e.exports=h({x:n.x,y:n.y,z:{valType:"data_array"},text:u({},n.text,{}),texttemplate:o({},{}),hovertext:u({},n.hovertext,{}),hovertemplate:i(),mode:u({},n.mode,{dflt:"lines+markers"}),surfaceaxis:{valType:"enumerated",values:[-1,0,1,2],dflt:-1},surfacecolor:{valType:"color"},projection:{x:{show:{valType:"boolean",dflt:!1},opacity:{valType:"number",min:0,max:1,dflt:1},scale:{valType:"number",min:0,max:10,dflt:2/3}},y:{show:{valType:"boolean",dflt:!1},opacity:{valType:"number",min:0,max:1,dflt:1},scale:{valType:"number",min:0,max:10,dflt:2/3}},z:{show:{valType:"boolean",dflt:!1},opacity:{valType:"number",min:0,max:1,dflt:1},scale:{valType:"number",min:0,max:10,dflt:2/3}}},connectgaps:n.connectgaps,line:g,marker:u({symbol:{valType:"enumerated",values:Object.keys(c),dflt:"circle",arrayOk:!0},size:u({},p.size,{dflt:8}),sizeref:p.sizeref,sizemin:p.sizemin,sizemode:p.sizemode,opacity:u({},p.opacity,{arrayOk:!1}),colorbar:p.colorbar,line:u({width:u({},d.width,{arrayOk:!1})},a("marker.line"))},a("marker")),textposition:u({},n.textposition,{dflt:"top center"}),textfont:{color:n.textfont.color,size:n.textfont.size,family:u({},n.textfont.family,{arrayOk:!1})},hoverinfo:u({},s.hoverinfo)},"calc","nested");v.x.editType=v.y.editType=v.z.editType="calc+clearAxisTypes"},{"../../components/colorscale/attributes":598,"../../constants/gl3d_dashes":690,"../../constants/gl3d_markers":691,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/attributes":762,"../../plots/template_attributes":841,"../scatter/attributes":1120}],1148:[function(t,e,r){"use strict";var n=t("../scatter/arrays_to_calcdata"),a=t("../scatter/colorscale_calc");e.exports=function(t,e){var r=[{x:!1,y:!1,trace:e,t:{}}];return n(r,e),a(t,e),r}},{"../scatter/arrays_to_calcdata":1119,"../scatter/colorscale_calc":1123}],1149:[function(t,e,r){"use strict";var n=t("../../registry");function a(t,e,r,a){if(!e||!e.visible)return null;for(var i=n.getComponentMethod("errorbars","makeComputeError")(e),o=new Array(t.length),s=0;s<t.length;s++){var l=i(+t[s],s);if("log"===a.type){var c=a.c2l(t[s]),u=t[s]-l[0],h=t[s]+l[1];if(o[s]=[(a.c2l(u,!0)-c)*r,(a.c2l(h,!0)-c)*r],u>0){var f=a.c2l(u);a._lowerLogErrorBound||(a._lowerLogErrorBound=f),a._lowerErrorBound=Math.min(a._lowerLogErrorBound,f)}}else o[s]=[-l[0]*r,l[1]*r]}return o}e.exports=function(t,e,r){var n=[a(t.x,t.error_x,e[0],r.xaxis),a(t.y,t.error_y,e[1],r.yaxis),a(t.z,t.error_z,e[2],r.zaxis)],i=function(t){for(var e=0;e<t.length;e++)if(t[e])return t[e].length;return 0}(n);if(0===i)return null;for(var o=new Array(i),s=0;s<i;s++){for(var l=[[0,0,0],[0,0,0]],c=0;c<3;c++)if(n[c])for(var u=0;u<2;u++)l[u][c]=n[c][s][u];o[s]=l}return o}},{"../../registry":846}],1150:[function(t,e,r){"use strict";var n=t("gl-line3d"),a=t("gl-scatter3d"),i=t("gl-error3d"),o=t("gl-mesh3d"),s=t("delaunay-triangulate"),l=t("../../lib"),c=t("../../lib/str2rgbarray"),u=t("../../lib/gl_format_color").formatColor,h=t("../scatter/make_bubble_size_func"),f=t("../../constants/gl3d_dashes"),p=t("../../constants/gl3d_markers"),d=t("../../plots/cartesian/axes"),g=t("../../components/fx/helpers").appendArrayPointValue,v=t("./calc_errors");function m(t,e){this.scene=t,this.uid=e,this.linePlot=null,this.scatterPlot=null,this.errorBars=null,this.textMarkers=null,this.delaunayMesh=null,this.color=null,this.mode="",this.dataPoints=[],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.textLabels=null,this.data=null}var y=m.prototype;function x(t){return null==t?0:t.indexOf("left")>-1?-1:t.indexOf("right")>-1?1:0}function b(t){return null==t?0:t.indexOf("top")>-1?-1:t.indexOf("bottom")>-1?1:0}function _(t,e){return e(4*t)}function w(t){return p[t]}function k(t,e,r,n,a){var i=null;if(l.isArrayOrTypedArray(t)){i=[];for(var o=0;o<e;o++)void 0===t[o]?i[o]=n:i[o]=r(t[o],a)}else i=r(t,l.identity);return i}function T(t,e){var r,n,a,i,o,s,f=[],p=t.fullSceneLayout,m=t.dataScale,y=p.xaxis,T=p.yaxis,M=p.zaxis,A=e.marker,S=e.line,E=e.x||[],L=e.y||[],C=e.z||[],P=E.length,O=e.xcalendar,z=e.ycalendar,I=e.zcalendar;for(o=0;o<P;o++)r=y.d2l(E[o],0,O)*m[0],n=T.d2l(L[o],0,z)*m[1],a=M.d2l(C[o],0,I)*m[2],f[o]=[r,n,a];if(Array.isArray(e.text))s=e.text;else if(void 0!==e.text)for(s=new Array(P),o=0;o<P;o++)s[o]=e.text;function D(t,e){var r=p[t];return d.tickText(r,r.d2l(e),!0).text}var R=e.texttemplate;if(R){var F=t.fullLayout._d3locale,B=Array.isArray(R),N=B?Math.min(R.length,P):P,j=B?function(t){return R[t]}:function(){return R};for(s=new Array(N),o=0;o<N;o++){var V={x:E[o],y:L[o],z:C[o]},U={xLabel:D("xaxis",E[o]),yLabel:D("yaxis",L[o]),zLabel:D("zaxis",C[o])},q={};g(q,e,o);var H=e._meta||{};s[o]=l.texttemplateString(j(o),U,F,q,V,H)}}if(i={position:f,mode:e.mode,text:s},"line"in e&&(i.lineColor=u(S,1,P),i.lineWidth=S.width,i.lineDashes=S.dash),"marker"in e){var G=h(e);i.scatterColor=u(A,1,P),i.scatterSize=k(A.size,P,_,20,G),i.scatterMarker=k(A.symbol,P,w,"\u25cf"),i.scatterLineWidth=A.line.width,i.scatterLineColor=u(A.line,1,P),i.scatterAngle=0}"textposition"in e&&(i.textOffset=function(t){var e=[0,0];if(Array.isArray(t))for(var r=0;r<t.length;r++)e[r]=[0,0],t[r]&&(e[r][0]=x(t[r]),e[r][1]=b(t[r]));else e[0]=x(t),e[1]=b(t);return e}(e.textposition),i.textColor=u(e.textfont,1,P),i.textSize=k(e.textfont.size,P,l.identity,12),i.textFont=e.textfont.family,i.textAngle=0);var Y=["x","y","z"];for(i.project=[!1,!1,!1],i.projectScale=[1,1,1],i.projectOpacity=[1,1,1],o=0;o<3;++o){var W=e.projection[Y[o]];(i.project[o]=W.show)&&(i.projectOpacity[o]=W.opacity,i.projectScale[o]=W.scale)}i.errorBounds=v(e,m,p);var X=function(t){for(var e=[0,0,0],r=[[0,0,0],[0,0,0],[0,0,0]],n=[1,1,1],a=0;a<3;a++){var i=t[a];i&&!1!==i.copy_zstyle&&!1!==t[2].visible&&(i=t[2]),i&&i.visible&&(e[a]=i.width/2,r[a]=c(i.color),n[a]=i.thickness)}return{capSize:e,color:r,lineWidth:n}}([e.error_x,e.error_y,e.error_z]);return i.errorColor=X.color,i.errorLineWidth=X.lineWidth,i.errorCapSize=X.capSize,i.delaunayAxis=e.surfaceaxis,i.delaunayColor=c(e.surfacecolor),i}function M(t){if(Array.isArray(t)){var e=t[0];return Array.isArray(e)&&(t=e),"rgb("+t.slice(0,3).map(function(t){return Math.round(255*t)})+")"}return null}y.handlePick=function(t){if(t.object&&(t.object===this.linePlot||t.object===this.delaunayMesh||t.object===this.textMarkers||t.object===this.scatterPlot)){var e=t.index=t.data.index;return t.object.highlight&&t.object.highlight(null),this.scatterPlot&&(t.object=this.scatterPlot,this.scatterPlot.highlight(t.data)),t.textLabel="",this.textLabels&&(Array.isArray(this.textLabels)?(this.textLabels[e]||0===this.textLabels[e])&&(t.textLabel=this.textLabels[e]):t.textLabel=this.textLabels),t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e]],!0}},y.update=function(t){var e,r,l,c,u=this.scene.glplot.gl,h=f.solid;this.data=t;var p=T(this.scene,t);"mode"in p&&(this.mode=p.mode),"lineDashes"in p&&p.lineDashes in f&&(h=f[p.lineDashes]),this.color=M(p.scatterColor)||M(p.lineColor),this.dataPoints=p.position,e={gl:this.scene.glplot.gl,position:p.position,color:p.lineColor,lineWidth:p.lineWidth||1,dashes:h[0],dashScale:h[1],opacity:t.opacity,connectGaps:t.connectgaps},-1!==this.mode.indexOf("lines")?this.linePlot?this.linePlot.update(e):(this.linePlot=n(e),this.linePlot._trace=this,this.scene.glplot.add(this.linePlot)):this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose(),this.linePlot=null);var d=t.opacity;if(t.marker&&t.marker.opacity&&(d*=t.marker.opacity),r={gl:this.scene.glplot.gl,position:p.position,color:p.scatterColor,size:p.scatterSize,glyph:p.scatterMarker,opacity:d,orthographic:!0,lineWidth:p.scatterLineWidth,lineColor:p.scatterLineColor,project:p.project,projectScale:p.projectScale,projectOpacity:p.projectOpacity},-1!==this.mode.indexOf("markers")?this.scatterPlot?this.scatterPlot.update(r):(this.scatterPlot=a(r),this.scatterPlot._trace=this,this.scatterPlot.highlightScale=1,this.scene.glplot.add(this.scatterPlot)):this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose(),this.scatterPlot=null),c={gl:this.scene.glplot.gl,position:p.position,glyph:p.text,color:p.textColor,size:p.textSize,angle:p.textAngle,alignment:p.textOffset,font:p.textFont,orthographic:!0,lineWidth:0,project:!1,opacity:t.opacity},this.textLabels=t.hovertext||t.text,-1!==this.mode.indexOf("text")?this.textMarkers?this.textMarkers.update(c):(this.textMarkers=a(c),this.textMarkers._trace=this,this.textMarkers.highlightScale=1,this.scene.glplot.add(this.textMarkers)):this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose(),this.textMarkers=null),l={gl:this.scene.glplot.gl,position:p.position,color:p.errorColor,error:p.errorBounds,lineWidth:p.errorLineWidth,capSize:p.errorCapSize,opacity:t.opacity},this.errorBars?p.errorBounds?this.errorBars.update(l):(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose(),this.errorBars=null):p.errorBounds&&(this.errorBars=i(l),this.errorBars._trace=this,this.scene.glplot.add(this.errorBars)),p.delaunayAxis>=0){var g=function(t,e,r){var n,a=(r+1)%3,i=(r+2)%3,o=[],l=[];for(n=0;n<t.length;++n){var c=t[n];!isNaN(c[a])&&isFinite(c[a])&&!isNaN(c[i])&&isFinite(c[i])&&(o.push([c[a],c[i]]),l.push(n))}var u=s(o);for(n=0;n<u.length;++n)for(var h=u[n],f=0;f<h.length;++f)h[f]=l[h[f]];return{positions:t,cells:u,meshColor:e}}(p.position,p.delaunayColor,p.delaunayAxis);g.opacity=t.opacity,this.delaunayMesh?this.delaunayMesh.update(g):(g.gl=u,this.delaunayMesh=o(g),this.delaunayMesh._trace=this,this.scene.glplot.add(this.delaunayMesh))}else this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose(),this.delaunayMesh=null)},y.dispose=function(){this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose()),this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose()),this.errorBars&&(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose()),this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose()),this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose())},e.exports=function(t,e){var r=new m(t,e.uid);return r.update(e),r}},{"../../components/fx/helpers":626,"../../constants/gl3d_dashes":690,"../../constants/gl3d_markers":691,"../../lib":717,"../../lib/gl_format_color":714,"../../lib/str2rgbarray":740,"../../plots/cartesian/axes":765,"../scatter/make_bubble_size_func":1137,"./calc_errors":1149,"delaunay-triangulate":167,"gl-error3d":250,"gl-line3d":258,"gl-mesh3d":283,"gl-scatter3d":300}],1151:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("../scatter/subtypes"),o=t("../scatter/marker_defaults"),s=t("../scatter/line_defaults"),l=t("../scatter/text_defaults"),c=t("./attributes");e.exports=function(t,e,r,u){function h(r,n){return a.coerce(t,e,c,r,n)}if(function(t,e,r,a){var i=0,o=r("x"),s=r("y"),l=r("z");n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y","z"],a),o&&s&&l&&(i=Math.min(o.length,s.length,l.length),e._length=e._xlength=e._ylength=e._zlength=i);return i}(t,e,h,u)){h("text"),h("hovertext"),h("hovertemplate"),h("mode"),i.hasLines(e)&&(h("connectgaps"),s(t,e,r,u,h)),i.hasMarkers(e)&&o(t,e,r,u,h,{noSelect:!0}),i.hasText(e)&&(h("texttemplate"),l(t,e,u,h,{noSelect:!0}));var f=(e.line||{}).color,p=(e.marker||{}).color;h("surfaceaxis")>=0&&h("surfacecolor",f||p);for(var d=["x","y","z"],g=0;g<3;++g){var v="projection."+d[g];h(v+".show")&&(h(v+".opacity"),h(v+".scale"))}var m=n.getComponentMethod("errorbars","supplyDefaults");m(t,e,f||p||r,{axis:"z"}),m(t,e,f||p||r,{axis:"y",inherit:"z"}),m(t,e,f||p||r,{axis:"x",inherit:"z"})}else e.visible=!1}},{"../../lib":717,"../../registry":846,"../scatter/line_defaults":1133,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scatter/text_defaults":1145,"./attributes":1147}],1152:[function(t,e,r){"use strict";e.exports={plot:t("./convert"),attributes:t("./attributes"),markerSymbols:t("../../constants/gl3d_markers"),supplyDefaults:t("./defaults"),colorbar:[{container:"marker",min:"cmin",max:"cmax"},{container:"line",min:"cmin",max:"cmax"}],calc:t("./calc"),moduleType:"trace",name:"scatter3d",basePlotModule:t("../../plots/gl3d"),categories:["gl3d","symbols","showLegend","scatter-like"],meta:{}}},{"../../constants/gl3d_markers":691,"../../plots/gl3d":805,"./attributes":1147,"./calc":1148,"./convert":1150,"./defaults":1151}],1153:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),a=t("../../plots/attributes"),i=t("../../plots/template_attributes").hovertemplateAttrs,o=t("../../plots/template_attributes").texttemplateAttrs,s=t("../../components/colorscale/attributes"),l=t("../../lib/extend").extendFlat,c=n.marker,u=n.line,h=c.line;e.exports={carpet:{valType:"string",editType:"calc"},a:{valType:"data_array",editType:"calc"},b:{valType:"data_array",editType:"calc"},mode:l({},n.mode,{dflt:"markers"}),text:l({},n.text,{}),texttemplate:o({editType:"plot"},{keys:["a","b","text"]}),hovertext:l({},n.hovertext,{}),line:{color:u.color,width:u.width,dash:u.dash,shape:l({},u.shape,{values:["linear","spline"]}),smoothing:u.smoothing,editType:"calc"},connectgaps:n.connectgaps,fill:l({},n.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:n.fillcolor,marker:l({symbol:c.symbol,opacity:c.opacity,maxdisplayed:c.maxdisplayed,size:c.size,sizeref:c.sizeref,sizemin:c.sizemin,sizemode:c.sizemode,line:l({width:h.width,editType:"calc"},s("marker.line")),gradient:c.gradient,editType:"calc"},s("marker")),textfont:n.textfont,textposition:n.textposition,selected:n.selected,unselected:n.unselected,hoverinfo:l({},a.hoverinfo,{flags:["a","b","text","name"]}),hoveron:n.hoveron,hovertemplate:i()}},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../scatter/attributes":1120}],1154:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../scatter/colorscale_calc"),i=t("../scatter/arrays_to_calcdata"),o=t("../scatter/calc_selection"),s=t("../scatter/calc").calcMarkerSize,l=t("../carpet/lookup_carpetid");e.exports=function(t,e){var r=e._carpetTrace=l(t,e);if(r&&r.visible&&"legendonly"!==r.visible){var c;e.xaxis=r.xaxis,e.yaxis=r.yaxis;var u,h,f=e._length,p=new Array(f),d=!1;for(c=0;c<f;c++)if(u=e.a[c],h=e.b[c],n(u)&&n(h)){var g=r.ab2xy(+u,+h,!0),v=r.isVisible(+u,+h);v||(d=!0),p[c]={x:g[0],y:g[1],a:u,b:h,vis:v}}else p[c]={x:!1,y:!1};return e._needsCull=d,p[0].carpet=r,p[0].trace=e,s(e,f),a(t,e),i(p,e),o(p,e),p}}},{"../carpet/lookup_carpetid":916,"../scatter/arrays_to_calcdata":1119,"../scatter/calc":1121,"../scatter/calc_selection":1122,"../scatter/colorscale_calc":1123,"fast-isnumeric":228}],1155:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/constants"),i=t("../scatter/subtypes"),o=t("../scatter/marker_defaults"),s=t("../scatter/line_defaults"),l=t("../scatter/line_shape_defaults"),c=t("../scatter/text_defaults"),u=t("../scatter/fillcolor_defaults"),h=t("./attributes");e.exports=function(t,e,r,f){function p(r,a){return n.coerce(t,e,h,r,a)}p("carpet"),e.xaxis="x",e.yaxis="y";var d=p("a"),g=p("b"),v=Math.min(d.length,g.length);if(v){e._length=v,p("text"),p("texttemplate"),p("hovertext"),p("mode",v<a.PTS_LINESONLY?"lines+markers":"lines"),i.hasLines(e)&&(s(t,e,r,f,p),l(t,e,p),p("connectgaps")),i.hasMarkers(e)&&o(t,e,r,f,p,{gradient:!0}),i.hasText(e)&&c(t,e,f,p);var m=[];(i.hasMarkers(e)||i.hasText(e))&&(p("marker.maxdisplayed"),m.push("points")),p("fill"),"none"!==e.fill&&(u(t,e,r,p),i.hasLines(e)||l(t,e,p)),"tonext"!==e.fill&&"toself"!==e.fill||m.push("fills"),"fills"!==p("hoveron",m.join("+")||"points")&&p("hovertemplate"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible=!1}},{"../../lib":717,"../scatter/constants":1124,"../scatter/fillcolor_defaults":1128,"../scatter/line_defaults":1133,"../scatter/line_shape_defaults":1135,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scatter/text_defaults":1145,"./attributes":1153}],1156:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a){var i=n[a];return t.a=i.a,t.b=i.b,t.y=i.y,t}},{}],1157:[function(t,e,r){"use strict";e.exports=function(t,e){var r={},n=e._carpet,a=n.ab2ij([t.a,t.b]),i=Math.floor(a[0]),o=a[0]-i,s=Math.floor(a[1]),l=a[1]-s,c=n.evalxy([],i,s,o,l);return r.yLabel=c[1].toFixed(3),r}},{}],1158:[function(t,e,r){"use strict";var n=t("../scatter/hover"),a=t("../../lib").fillText;e.exports=function(t,e,r,i){var o=n(t,e,r,i);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index){var l=1-s.y0/t.ya._length,c=t.xa._length,u=c*l/2,h=c-u;return s.x0=Math.max(Math.min(s.x0,h),u),s.x1=Math.max(Math.min(s.x1,h),u),o}var f=s.cd[s.index];s.a=f.a,s.b=f.b,s.xLabelVal=void 0,s.yLabelVal=void 0;var p=s.trace,d=p._carpet,g=p._module.formatLabels(f,p);s.yLabel=g.yLabel,delete s.text;var v=[];if(!p.hovertemplate){var m=(f.hi||p.hoverinfo).split("+");-1!==m.indexOf("all")&&(m=["a","b","text"]),-1!==m.indexOf("a")&&y(d.aaxis,f.a),-1!==m.indexOf("b")&&y(d.baxis,f.b),v.push("y: "+s.yLabel),-1!==m.indexOf("text")&&a(f,p,v),s.extraText=v.join("<br>")}return o}function y(t,e){var r;r=t.labelprefix&&t.labelprefix.length>0?t.labelprefix.replace(/ = $/,""):t._hovertitle,v.push(r+": "+e.toFixed(3)+t.labelsuffix)}}},{"../../lib":717,"../scatter/hover":1131}],1159:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../scatter/marker_colorbar"),formatLabels:t("./format_labels"),calc:t("./calc"),plot:t("./plot"),style:t("../scatter/style").style,styleOnSelect:t("../scatter/style").styleOnSelect,hoverPoints:t("./hover"),selectPoints:t("../scatter/select"),eventData:t("./event_data"),moduleType:"trace",name:"scattercarpet",basePlotModule:t("../../plots/cartesian"),categories:["svg","carpet","symbols","showLegend","carpetDependent","zoomScale"],meta:{}}},{"../../plots/cartesian":776,"../scatter/marker_colorbar":1138,"../scatter/select":1141,"../scatter/style":1143,"./attributes":1153,"./calc":1154,"./defaults":1155,"./event_data":1156,"./format_labels":1157,"./hover":1158,"./plot":1160}],1160:[function(t,e,r){"use strict";var n=t("../scatter/plot"),a=t("../../plots/cartesian/axes"),i=t("../../components/drawing");e.exports=function(t,e,r,o){var s,l,c,u=r[0][0].carpet,h={xaxis:a.getFromId(t,u.xaxis||"x"),yaxis:a.getFromId(t,u.yaxis||"y"),plot:e.plot};for(n(t,h,r,o),s=0;s<r.length;s++)l=r[s][0].trace,c=o.selectAll("g.trace"+l.uid+" .js-line"),i.setClipUrl(c,r[s][0].carpet._clipPathId,t)}},{"../../components/drawing":612,"../../plots/cartesian/axes":765,"../scatter/plot":1140}],1161:[function(t,e,r){"use strict";var n=t("../../plots/template_attributes").hovertemplateAttrs,a=t("../../plots/template_attributes").texttemplateAttrs,i=t("../scatter/attributes"),o=t("../../plots/attributes"),s=t("../../components/colorscale/attributes"),l=t("../../components/drawing/attributes").dash,c=t("../../lib/extend").extendFlat,u=t("../../plot_api/edit_types").overrideAll,h=i.marker,f=i.line,p=h.line;e.exports=u({lon:{valType:"data_array"},lat:{valType:"data_array"},locations:{valType:"data_array"},locationmode:{valType:"enumerated",values:["ISO-3","USA-states","country names","geojson-id"],dflt:"ISO-3"},geojson:{valType:"any",editType:"calc"},featureidkey:{valType:"string",editType:"calc",dflt:"id"},mode:c({},i.mode,{dflt:"markers"}),text:c({},i.text,{}),texttemplate:a({editType:"plot"},{keys:["lat","lon","location","text"]}),hovertext:c({},i.hovertext,{}),textfont:i.textfont,textposition:i.textposition,line:{color:f.color,width:f.width,dash:l},connectgaps:i.connectgaps,marker:c({symbol:h.symbol,opacity:h.opacity,size:h.size,sizeref:h.sizeref,sizemin:h.sizemin,sizemode:h.sizemode,colorbar:h.colorbar,line:c({width:p.width},s("marker.line")),gradient:h.gradient},s("marker")),fill:{valType:"enumerated",values:["none","toself"],dflt:"none"},fillcolor:i.fillcolor,selected:i.selected,unselected:i.unselected,hoverinfo:c({},o.hoverinfo,{flags:["lon","lat","location","text","name"]}),hovertemplate:n()},"calc","nested")},{"../../components/colorscale/attributes":598,"../../components/drawing/attributes":611,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/attributes":762,"../../plots/template_attributes":841,"../scatter/attributes":1120}],1162:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../constants/numerical").BADNUM,i=t("../scatter/colorscale_calc"),o=t("../scatter/arrays_to_calcdata"),s=t("../scatter/calc_selection"),l=t("../../lib")._;function c(t){return t&&"string"==typeof t}e.exports=function(t,e){var r,u=Array.isArray(e.locations),h=u?e.locations.length:e._length,f=new Array(h);r=e.geojson?function(t){return c(t)||n(t)}:c;for(var p=0;p<h;p++){var d=f[p]={};if(u){var g=e.locations[p];d.loc=r(g)?g:null}else{var v=e.lon[p],m=e.lat[p];n(v)&&n(m)?d.lonlat=[+v,+m]:d.lonlat=[a,a]}}return o(f,e),i(t,e),s(f,e),h&&(f[0].t={labels:{lat:l(t,"lat:")+" ",lon:l(t,"lon:")+" "}}),f}},{"../../constants/numerical":693,"../../lib":717,"../scatter/arrays_to_calcdata":1119,"../scatter/calc_selection":1122,"../scatter/colorscale_calc":1123,"fast-isnumeric":228}],1163:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/subtypes"),i=t("../scatter/marker_defaults"),o=t("../scatter/line_defaults"),s=t("../scatter/text_defaults"),l=t("../scatter/fillcolor_defaults"),c=t("./attributes");e.exports=function(t,e,r,u){function h(r,a){return n.coerce(t,e,c,r,a)}var f,p=h("locations");if(p&&p.length){var d,g=h("geojson");("string"==typeof g&&""!==g||n.isPlainObject(g))&&(d="geojson-id"),"geojson-id"===h("locationmode",d)&&h("featureidkey"),f=p.length}else{var v=h("lon")||[],m=h("lat")||[];f=Math.min(v.length,m.length)}f?(e._length=f,h("text"),h("hovertext"),h("hovertemplate"),h("mode"),a.hasLines(e)&&(o(t,e,r,u,h),h("connectgaps")),a.hasMarkers(e)&&i(t,e,r,u,h,{gradient:!0}),a.hasText(e)&&(h("texttemplate"),s(t,e,u,h)),h("fill"),"none"!==e.fill&&l(t,e,r,h),n.coerceSelectionMarkerOpacity(e,h)):e.visible=!1}},{"../../lib":717,"../scatter/fillcolor_defaults":1128,"../scatter/line_defaults":1133,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scatter/text_defaults":1145,"./attributes":1161}],1164:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a){t.lon=e.lon,t.lat=e.lat,t.location=e.loc?e.loc:null;var i=n[a];return i.fIn&&i.fIn.properties&&(t.properties=i.fIn.properties),t}},{}],1165:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes");e.exports=function(t,e,r){var a={},i=r[e.geo]._subplot.mockAxis,o=t.lonlat;return a.lonLabel=n.tickText(i,i.c2l(o[0]),!0).text,a.latLabel=n.tickText(i,i.c2l(o[1]),!0).text,a}},{"../../plots/cartesian/axes":765}],1166:[function(t,e,r){"use strict";var n=t("../../components/fx"),a=t("../../constants/numerical").BADNUM,i=t("../scatter/get_trace_color"),o=t("../../lib").fillText,s=t("./attributes");e.exports=function(t,e,r){var l=t.cd,c=l[0].trace,u=t.xa,h=t.ya,f=t.subplot,p=f.projection.isLonLatOverEdges,d=f.project;if(n.getClosest(l,function(t){var n=t.lonlat;if(n[0]===a)return 1/0;if(p(n))return 1/0;var i=d(n),o=d([e,r]),s=Math.abs(i[0]-o[0]),l=Math.abs(i[1]-o[1]),c=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(s*s+l*l)-c,1-3/c)},t),!1!==t.index){var g=l[t.index],v=g.lonlat,m=[u.c2p(v),h.c2p(v)],y=g.mrc||1;t.x0=m[0]-y,t.x1=m[0]+y,t.y0=m[1]-y,t.y1=m[1]+y,t.loc=g.loc,t.lon=v[0],t.lat=v[1];var x={};x[c.geo]={_subplot:f};var b=c._module.formatLabels(g,c,x);return t.lonLabel=b.lonLabel,t.latLabel=b.latLabel,t.color=i(c,g),t.extraText=function(t,e,r,n){if(t.hovertemplate)return;var a=e.hi||t.hoverinfo,i="all"===a?s.hoverinfo.flags:a.split("+"),l=-1!==i.indexOf("location")&&Array.isArray(t.locations),c=-1!==i.indexOf("lon"),u=-1!==i.indexOf("lat"),h=-1!==i.indexOf("text"),f=[];function p(t){return t+"\xb0"}l?f.push(e.loc):c&&u?f.push("("+p(r.lonLabel)+", "+p(r.latLabel)+")"):c?f.push(n.lon+p(r.lonLabel)):u&&f.push(n.lat+p(r.latLabel));h&&o(e,t,f);return f.join("<br>")}(c,g,t,l[0].t.labels),t.hovertemplate=c.hovertemplate,[t]}}},{"../../components/fx":630,"../../constants/numerical":693,"../../lib":717,"../scatter/get_trace_color":1130,"./attributes":1161}],1167:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../scatter/marker_colorbar"),formatLabels:t("./format_labels"),calc:t("./calc"),calcGeoJSON:t("./plot").calcGeoJSON,plot:t("./plot").plot,style:t("./style"),styleOnSelect:t("../scatter/style").styleOnSelect,hoverPoints:t("./hover"),eventData:t("./event_data"),selectPoints:t("./select"),moduleType:"trace",name:"scattergeo",basePlotModule:t("../../plots/geo"),categories:["geo","symbols","showLegend","scatter-like"],meta:{}}},{"../../plots/geo":795,"../scatter/marker_colorbar":1138,"../scatter/style":1143,"./attributes":1161,"./calc":1162,"./defaults":1163,"./event_data":1164,"./format_labels":1165,"./hover":1166,"./plot":1168,"./select":1169,"./style":1170}],1168:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../lib/topojson_utils").getTopojsonFeatures,o=t("../../lib/geojson_utils"),s=t("../../lib/geo_location_utils"),l=t("../../plots/cartesian/autorange").findExtremes,c=t("../../constants/numerical").BADNUM,u=t("../scatter/calc").calcMarkerSize,h=t("../scatter/subtypes"),f=t("./style");e.exports={calcGeoJSON:function(t,e){var r,n,a=t[0].trace,o=e[a.geo],h=o._subplot,f=a._length;if(Array.isArray(a.locations)){var p=a.locationmode,d="geojson-id"===p?s.extractTraceFeature(t):i(a,h.topojson);for(r=0;r<f;r++){n=t[r];var g="geojson-id"===p?n.fOut:s.locationToFeature(p,n.loc,d);n.lonlat=g?g.properties.ct:[c,c]}}var v,m,y={padded:!0};if("geojson"===o.fitbounds&&"geojson-id"===a.locationmode){var x=s.computeBbox(s.getTraceGeojson(a));v=[x[0],x[2]],m=[x[1],x[3]]}else{for(v=new Array(f),m=new Array(f),r=0;r<f;r++)n=t[r],v[r]=n.lonlat[0],m[r]=n.lonlat[1];y.ppad=u(a,f)}a._extremes.lon=l(o.lonaxis._ax,v,y),a._extremes.lat=l(o.lataxis._ax,m,y)},plot:function(t,e,r){var i=e.layers.frontplot.select(".scatterlayer"),s=a.makeTraceGroups(i,r,"trace scattergeo");function l(t,e){t.lonlat[0]===c&&n.select(e).remove()}s.selectAll("*").remove(),s.each(function(e){var r=n.select(this),i=e[0].trace;if(h.hasLines(i)||"none"!==i.fill){var s=o.calcTraceToLineCoords(e),c="none"!==i.fill?o.makePolygon(s):o.makeLine(s);r.selectAll("path.js-line").data([{geojson:c,trace:i}]).enter().append("path").classed("js-line",!0).style("stroke-miterlimit",2)}h.hasMarkers(i)&&r.selectAll("path.point").data(a.identity).enter().append("path").classed("point",!0).each(function(t){l(t,this)}),h.hasText(i)&&r.selectAll("g").data(a.identity).enter().append("g").append("text").each(function(t){l(t,this)}),f(t,e)})}}},{"../../constants/numerical":693,"../../lib":717,"../../lib/geo_location_utils":711,"../../lib/geojson_utils":712,"../../lib/topojson_utils":744,"../../plots/cartesian/autorange":764,"../scatter/calc":1121,"../scatter/subtypes":1144,"./style":1170,d3:165}],1169:[function(t,e,r){"use strict";var n=t("../scatter/subtypes"),a=t("../../constants/numerical").BADNUM;e.exports=function(t,e){var r,i,o,s,l,c=t.cd,u=t.xaxis,h=t.yaxis,f=[],p=c[0].trace;if(!n.hasMarkers(p)&&!n.hasText(p))return[];if(!1===e)for(l=0;l<c.length;l++)c[l].selected=0;else for(l=0;l<c.length;l++)(i=(r=c[l]).lonlat)[0]!==a&&(o=u.c2p(i),s=h.c2p(i),e.contains([o,s],null,l,t)?(f.push({pointNumber:l,lon:i[0],lat:i[1]}),r.selected=1):r.selected=0);return f}},{"../../constants/numerical":693,"../scatter/subtypes":1144}],1170:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/drawing"),i=t("../../components/color"),o=t("../scatter/style"),s=o.stylePoints,l=o.styleText;e.exports=function(t,e){e&&function(t,e){var r=e[0].trace,o=e[0].node3;o.style("opacity",e[0].trace.opacity),s(o,r,t),l(o,r,t),o.selectAll("path.js-line").style("fill","none").each(function(t){var e=n.select(this),r=t.trace,o=r.line||{};e.call(i.stroke,o.color).call(a.dashLine,o.dash||"",o.width||0),"none"!==r.fill&&e.call(i.fill,r.fillcolor)})}(t,e)}},{"../../components/color":591,"../../components/drawing":612,"../scatter/style":1143,d3:165}],1171:[function(t,e,r){"use strict";var n=t("../../plots/attributes"),a=t("../scatter/attributes"),i=t("../../components/colorscale/attributes"),o=t("../../lib/extend").extendFlat,s=t("../../plot_api/edit_types").overrideAll,l=t("./constants").DASHES,c=a.line,u=a.marker,h=u.line,f=e.exports=s({x:a.x,x0:a.x0,dx:a.dx,y:a.y,y0:a.y0,dy:a.dy,text:a.text,hovertext:a.hovertext,textposition:a.textposition,textfont:a.textfont,mode:{valType:"flaglist",flags:["lines","markers","text"],extras:["none"]},line:{color:c.color,width:c.width,shape:{valType:"enumerated",values:["linear","hv","vh","hvh","vhv"],dflt:"linear",editType:"plot"},dash:{valType:"enumerated",values:Object.keys(l),dflt:"solid"}},marker:o({},i("marker"),{symbol:u.symbol,size:u.size,sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,opacity:u.opacity,colorbar:u.colorbar,line:o({},i("marker.line"),{width:h.width})}),connectgaps:a.connectgaps,fill:o({},a.fill,{dflt:"none"}),fillcolor:a.fillcolor,selected:{marker:a.selected.marker,textfont:a.selected.textfont},unselected:{marker:a.unselected.marker,textfont:a.unselected.textfont},opacity:n.opacity},"calc","nested");f.x.editType=f.y.editType=f.x0.editType=f.y0.editType="calc+clearAxisTypes",f.hovertemplate=a.hovertemplate,f.texttemplate=a.texttemplate},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/attributes":762,"../scatter/attributes":1120,"./constants":1173}],1172:[function(t,e,r){"use strict";var n=t("point-cluster"),a=t("../../lib"),i=t("../../plots/cartesian/axis_ids"),o=t("../../plots/cartesian/autorange").findExtremes,s=t("../scatter/calc"),l=s.calcMarkerSize,c=s.calcAxisExpansion,u=s.setFirstScatter,h=t("../scatter/colorscale_calc"),f=t("./convert"),p=t("./scene_update"),d=t("../../constants/numerical").BADNUM,g=t("./constants").TOO_MANY_POINTS;function v(t,e,r){var n=t._extremes[e._id],a=o(e,r._bnds,{padded:!0});n.min=n.min.concat(a.min),n.max=n.max.concat(a.max)}e.exports=function(t,e){var r,o,s,m=t._fullLayout,y=i.getFromId(t,e.xaxis),x=i.getFromId(t,e.yaxis),b=m._plots[e.xaxis+e.yaxis],_=e._length,w=_>=g,k=2*_,T={},M=e._x=y.makeCalcdata(e,"x"),A=e._y=x.makeCalcdata(e,"y"),S=new Array(k);for(r=0;r<_;r++)o=M[r],s=A[r],S[2*r]=o===d?NaN:o,S[2*r+1]=s===d?NaN:s;if("log"===y.type)for(r=0;r<k;r+=2)S[r]=y.c2l(S[r]);if("log"===x.type)for(r=1;r<k;r+=2)S[r]=x.c2l(S[r]);if(w&&"log"!==y.type&&"log"!==x.type)T.tree=n(S);else{var E=T.ids=new Array(_);for(r=0;r<_;r++)E[r]=r}h(t,e);var L,C=function(t,e,r,n,i,o){var s=f.style(t,r);s.marker&&(s.marker.positions=n);s.line&&n.length>1&&a.extendFlat(s.line,f.linePositions(t,r,n));if(s.errorX||s.errorY){var l=f.errorBarPositions(t,r,n,i,o);s.errorX&&a.extendFlat(s.errorX,l.x),s.errorY&&a.extendFlat(s.errorY,l.y)}s.text&&(a.extendFlat(s.text,{positions:n},f.textPosition(t,r,s.text,s.marker)),a.extendFlat(s.textSel,{positions:n},f.textPosition(t,r,s.text,s.markerSel)),a.extendFlat(s.textUnsel,{positions:n},f.textPosition(t,r,s.text,s.markerUnsel)));return s}(t,0,e,S,M,A),P=p(t,b);return u(m,e),w?C.marker&&(L=2*(C.marker.sizeAvg||Math.max(C.marker.size,3))):L=l(e,_),c(t,e,y,x,M,A,L),C.errorX&&v(e,y,C.errorX),C.errorY&&v(e,x,C.errorY),C.fill&&!P.fill2d&&(P.fill2d=!0),C.marker&&!P.scatter2d&&(P.scatter2d=!0),C.line&&!P.line2d&&(P.line2d=!0),!C.errorX&&!C.errorY||P.error2d||(P.error2d=!0),C.text&&!P.glText&&(P.glText=!0),C.marker&&(C.marker.snap=_),P.lineOptions.push(C.line),P.errorXOptions.push(C.errorX),P.errorYOptions.push(C.errorY),P.fillOptions.push(C.fill),P.markerOptions.push(C.marker),P.markerSelectedOptions.push(C.markerSel),P.markerUnselectedOptions.push(C.markerUnsel),P.textOptions.push(C.text),P.textSelectedOptions.push(C.textSel),P.textUnselectedOptions.push(C.textUnsel),P.selectBatch.push([]),P.unselectBatch.push([]),T._scene=P,T.index=P.count,T.x=M,T.y=A,T.positions=S,P.count++,[{x:!1,y:!1,t:T,trace:e}]}},{"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/autorange":764,"../../plots/cartesian/axis_ids":768,"../scatter/calc":1121,"../scatter/colorscale_calc":1123,"./constants":1173,"./convert":1174,"./scene_update":1182,"point-cluster":470}],1173:[function(t,e,r){"use strict";e.exports={TOO_MANY_POINTS:1e5,SYMBOL_SDF_SIZE:200,SYMBOL_SIZE:20,SYMBOL_STROKE:1,DOT_RE:/-dot/,OPEN_RE:/-open/,DASHES:{solid:[1],dot:[1,1],dash:[4,1],longdash:[8,1],dashdot:[4,1,1,1],longdashdot:[8,1,1,1]}}},{}],1174:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("svg-path-sdf"),i=t("color-normalize"),o=t("../../registry"),s=t("../../lib"),l=t("../../components/drawing"),c=t("../../plots/cartesian/axis_ids"),u=t("../../lib/gl_format_color").formatColor,h=t("../scatter/subtypes"),f=t("../scatter/make_bubble_size_func"),p=t("./helpers"),d=t("./constants"),g=t("../../constants/interactions").DESELECTDIM,v={start:1,left:1,end:-1,right:-1,middle:0,center:0,bottom:1,top:-1},m=t("../../components/fx/helpers").appendArrayPointValue;function y(t,e){var r,a=t._fullLayout,i=e._length,o=e.textfont,l=e.textposition,c=Array.isArray(l)?l:[l],u=o.color,h=o.size,f=o.family,p={},d=e.texttemplate;if(d){p.text=[];var g=a._d3locale,v=Array.isArray(d),y=v?Math.min(d.length,i):i,x=v?function(t){return d[t]}:function(){return d};for(r=0;r<y;r++){var b={i:r},_=e._module.formatLabels(b,e,a),w={};m(w,e,r);var k=e._meta||{};p.text.push(s.texttemplateString(x(r),_,g,w,b,k))}}else Array.isArray(e.text)&&e.text.length<i?p.text=e.text.slice():p.text=e.text;if(Array.isArray(p.text))for(r=p.text.length;r<i;r++)p.text[r]="";for(p.opacity=e.opacity,p.font={},p.align=[],p.baseline=[],r=0;r<c.length;r++){var T=c[r].split(/\s+/);switch(T[1]){case"left":p.align.push("right");break;case"right":p.align.push("left");break;default:p.align.push(T[1])}switch(T[0]){case"top":p.baseline.push("bottom");break;case"bottom":p.baseline.push("top");break;default:p.baseline.push(T[0])}}if(Array.isArray(u))for(p.color=new Array(i),r=0;r<i;r++)p.color[r]=u[r];else p.color=u;if(s.isArrayOrTypedArray(h)||Array.isArray(f))for(p.font=new Array(i),r=0;r<i;r++){var M=p.font[r]={};M.size=s.isTypedArray(h)?h[r]:Array.isArray(h)?n(h[r])?h[r]:0:h,M.family=Array.isArray(f)?f[r]:f}else p.font={size:h,family:f};return p}function x(t){var e,r,n=t._length,a=t.marker,o={},l=s.isArrayOrTypedArray(a.symbol),c=s.isArrayOrTypedArray(a.color),h=s.isArrayOrTypedArray(a.line.color),d=s.isArrayOrTypedArray(a.opacity),g=s.isArrayOrTypedArray(a.size),v=s.isArrayOrTypedArray(a.line.width);if(l||(r=p.isOpenSymbol(a.symbol)),l||c||h||d){o.colors=new Array(n),o.borderColors=new Array(n);var m=u(a,a.opacity,n),y=u(a.line,a.opacity,n);if(!Array.isArray(y[0])){var x=y;for(y=Array(n),e=0;e<n;e++)y[e]=x}if(!Array.isArray(m[0])){var b=m;for(m=Array(n),e=0;e<n;e++)m[e]=b}for(o.colors=m,o.borderColors=y,e=0;e<n;e++){if(l){var _=a.symbol[e];r=p.isOpenSymbol(_)}r&&(y[e]=m[e].slice(),m[e]=m[e].slice(),m[e][3]=0)}o.opacity=t.opacity}else r?(o.color=i(a.color,"uint8"),o.color[3]=0,o.borderColor=i(a.color,"uint8")):(o.color=i(a.color,"uint8"),o.borderColor=i(a.line.color,"uint8")),o.opacity=t.opacity*a.opacity;if(l)for(o.markers=new Array(n),e=0;e<n;e++)o.markers[e]=E(a.symbol[e]);else o.marker=E(a.symbol);var w,k=f(t);if(g||v){var T,M=o.sizes=new Array(n),A=o.borderSizes=new Array(n),S=0;if(g){for(e=0;e<n;e++)M[e]=k(a.size[e]),S+=M[e];T=S/n}else for(w=k(a.size),e=0;e<n;e++)M[e]=w;if(v)for(e=0;e<n;e++)A[e]=a.line.width[e]/2;else for(w=a.line.width/2,e=0;e<n;e++)A[e]=w;o.sizeAvg=T}else o.size=k(a&&a.size||10),o.borderSizes=k(a.line.width);return o}function b(t,e){var r=t.marker,n={};return e?(e.marker&&e.marker.symbol?n=x(s.extendFlat({},r,e.marker)):e.marker&&(e.marker.size&&(n.size=e.marker.size/2),e.marker.color&&(n.colors=e.marker.color),void 0!==e.marker.opacity&&(n.opacity=e.marker.opacity)),n):n}function _(t,e,r){var n={};if(!r)return n;if(r.textfont){var a={opacity:1,text:e.text,texttemplate:e.texttemplate,textposition:e.textposition,textfont:s.extendFlat({},e.textfont)};r.textfont&&s.extendFlat(a.textfont,r.textfont),n=y(t,a)}return n}function w(t,e){var r={capSize:2*e.width,lineWidth:e.thickness,color:e.color};return e.copy_ystyle&&(r=t.error_y),r}var k=d.SYMBOL_SDF_SIZE,T=d.SYMBOL_SIZE,M=d.SYMBOL_STROKE,A={},S=l.symbolFuncs[0](.05*T);function E(t){if("circle"===t)return null;var e,r,n=l.symbolNumber(t),i=l.symbolFuncs[n%100],o=!!l.symbolNoDot[n%100],s=!!l.symbolNoFill[n%100],c=p.isDotSymbol(t);return A[t]?A[t]:(e=c&&!o?i(1.1*T)+S:i(T),r=a(e,{w:k,h:k,viewBox:[-T,-T,T,T],stroke:s?M:-M}),A[t]=r,r||null)}e.exports={style:function(t,e){var r,n={marker:void 0,markerSel:void 0,markerUnsel:void 0,line:void 0,fill:void 0,errorX:void 0,errorY:void 0,text:void 0,textSel:void 0,textUnsel:void 0};if(!0!==e.visible)return n;if(h.hasText(e)&&(n.text=y(t,e),n.textSel=_(t,e,e.selected),n.textUnsel=_(t,e,e.unselected)),h.hasMarkers(e)&&(n.marker=x(e),n.markerSel=b(e,e.selected),n.markerUnsel=b(e,e.unselected),!e.unselected&&s.isArrayOrTypedArray(e.marker.opacity))){var a=e.marker.opacity;for(n.markerUnsel.opacity=new Array(a.length),r=0;r<a.length;r++)n.markerUnsel.opacity[r]=g*a[r]}if(h.hasLines(e)){n.line={overlay:!0,thickness:e.line.width,color:e.line.color,opacity:e.opacity};var i=(d.DASHES[e.line.dash]||[1]).slice();for(r=0;r<i.length;++r)i[r]*=e.line.width;n.line.dashes=i}return e.error_x&&e.error_x.visible&&(n.errorX=w(e,e.error_x)),e.error_y&&e.error_y.visible&&(n.errorY=w(e,e.error_y)),e.fill&&"none"!==e.fill&&(n.fill={closed:!0,fill:e.fillcolor,thickness:0}),n},markerStyle:x,markerSelection:b,linePositions:function(t,e,r){var n,a,i=r.length,o=i/2;if(h.hasLines(e)&&o)if("hv"===e.line.shape){for(n=[],a=0;a<o-1;a++)isNaN(r[2*a])||isNaN(r[2*a+1])?n.push(NaN,NaN,NaN,NaN):(n.push(r[2*a],r[2*a+1]),isNaN(r[2*a+2])||isNaN(r[2*a+3])?n.push(NaN,NaN):n.push(r[2*a+2],r[2*a+1]));n.push(r[i-2],r[i-1])}else if("hvh"===e.line.shape){for(n=[],a=0;a<o-1;a++)if(isNaN(r[2*a])||isNaN(r[2*a+1])||isNaN(r[2*a+2])||isNaN(r[2*a+3]))isNaN(r[2*a])||isNaN(r[2*a+1])?n.push(NaN,NaN):n.push(r[2*a],r[2*a+1]),n.push(NaN,NaN);else{var s=(r[2*a]+r[2*a+2])/2;n.push(r[2*a],r[2*a+1],s,r[2*a+1],s,r[2*a+3])}n.push(r[i-2],r[i-1])}else if("vhv"===e.line.shape){for(n=[],a=0;a<o-1;a++)if(isNaN(r[2*a])||isNaN(r[2*a+1])||isNaN(r[2*a+2])||isNaN(r[2*a+3]))isNaN(r[2*a])||isNaN(r[2*a+1])?n.push(NaN,NaN):n.push(r[2*a],r[2*a+1]),n.push(NaN,NaN);else{var l=(r[2*a+1]+r[2*a+3])/2;n.push(r[2*a],r[2*a+1],r[2*a],l,r[2*a+2],l)}n.push(r[i-2],r[i-1])}else if("vh"===e.line.shape){for(n=[],a=0;a<o-1;a++)isNaN(r[2*a])||isNaN(r[2*a+1])?n.push(NaN,NaN,NaN,NaN):(n.push(r[2*a],r[2*a+1]),isNaN(r[2*a+2])||isNaN(r[2*a+3])?n.push(NaN,NaN):n.push(r[2*a],r[2*a+3]));n.push(r[i-2],r[i-1])}else n=r;var c=!1;for(a=0;a<n.length;a++)if(isNaN(n[a])){c=!0;break}var u=c||n.length>d.TOO_MANY_POINTS?"rect":h.hasMarkers(e)?"rect":"round";if(c&&e.connectgaps){var f=n[0],p=n[1];for(a=0;a<n.length;a+=2)isNaN(n[a])||isNaN(n[a+1])?(n[a]=f,n[a+1]=p):(f=n[a],p=n[a+1])}return{join:u,positions:n}},errorBarPositions:function(t,e,r,a,i){var s=o.getComponentMethod("errorbars","makeComputeError"),l=c.getFromId(t,e.xaxis),u=c.getFromId(t,e.yaxis),h=r.length/2,f={};function p(t,a){var i=a._id.charAt(0),o=e["error_"+i];if(o&&o.visible&&("linear"===a.type||"log"===a.type)){for(var l=s(o),c={x:0,y:1}[i],u={x:[0,1,2,3],y:[2,3,0,1]}[i],p=new Float64Array(4*h),d=1/0,g=-1/0,v=0,m=0;v<h;v++,m+=4){var y=t[v];if(n(y)){var x=r[2*v+c],b=l(y,v),_=b[0],w=b[1];if(n(_)&&n(w)){var k=y-_,T=y+w;p[m+u[0]]=x-a.c2l(k),p[m+u[1]]=a.c2l(T)-x,p[m+u[2]]=0,p[m+u[3]]=0,d=Math.min(d,y-_),g=Math.max(g,y+w)}}}f[i]={positions:r,errors:p,_bnds:[d,g]}}}return p(a,l),p(i,u),f},textPosition:function(t,e,r,n){var a,i=e._length,o={};if(h.hasMarkers(e)){var s=r.font,l=r.align,c=r.baseline;for(o.offset=new Array(i),a=0;a<i;a++){var u=n.sizes?n.sizes[a]:n.size,f=Array.isArray(s)?s[a].size:s.size,p=Array.isArray(l)?l.length>1?l[a]:l[0]:l,d=Array.isArray(c)?c.length>1?c[a]:c[0]:c,g=v[p],m=v[d],y=u?u/.8+1:0,x=-m*y-.5*m;o.offset[a]=[g*y/f,x/f]}}return o}}},{"../../components/drawing":612,"../../components/fx/helpers":626,"../../constants/interactions":692,"../../lib":717,"../../lib/gl_format_color":714,"../../plots/cartesian/axis_ids":768,"../../registry":846,"../scatter/make_bubble_size_func":1137,"../scatter/subtypes":1144,"./constants":1173,"./helpers":1178,"color-normalize":122,"fast-isnumeric":228,"svg-path-sdf":533}],1175:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../registry"),i=t("./helpers"),o=t("./attributes"),s=t("../scatter/constants"),l=t("../scatter/subtypes"),c=t("../scatter/xy_defaults"),u=t("../scatter/marker_defaults"),h=t("../scatter/line_defaults"),f=t("../scatter/fillcolor_defaults"),p=t("../scatter/text_defaults");e.exports=function(t,e,r,d){function g(r,a){return n.coerce(t,e,o,r,a)}var v=!!t.marker&&i.isOpenSymbol(t.marker.symbol),m=l.isBubble(t),y=c(t,e,d,g);if(y){var x=y<s.PTS_LINESONLY?"lines+markers":"lines";g("text"),g("hovertext"),g("hovertemplate"),g("mode",x),l.hasLines(e)&&(g("connectgaps"),h(t,e,r,d,g),g("line.shape")),l.hasMarkers(e)&&(u(t,e,r,d,g),g("marker.line.width",v||m?1:0)),l.hasText(e)&&(g("texttemplate"),p(t,e,d,g));var b=(e.line||{}).color,_=(e.marker||{}).color;g("fill"),"none"!==e.fill&&f(t,e,r,g);var w=a.getComponentMethod("errorbars","supplyDefaults");w(t,e,b||_||r,{axis:"y"}),w(t,e,b||_||r,{axis:"x",inherit:"y"}),n.coerceSelectionMarkerOpacity(e,g)}else e.visible=!1}},{"../../lib":717,"../../registry":846,"../scatter/constants":1124,"../scatter/fillcolor_defaults":1128,"../scatter/line_defaults":1133,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scatter/text_defaults":1145,"../scatter/xy_defaults":1146,"./attributes":1171,"./helpers":1178}],1176:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/color"),i=t("../../constants/interactions").DESELECTDIM;e.exports={styleTextSelection:function(t){var e,r,o=t[0],s=o.trace,l=o.t,c=l._scene,u=l.index,h=c.selectBatch[u],f=c.unselectBatch[u],p=c.textOptions[u],d=c.textSelectedOptions[u]||{},g=c.textUnselectedOptions[u]||{},v=n.extendFlat({},p);if(h.length||f.length){var m=d.color,y=g.color,x=p.color,b=Array.isArray(x);for(v.color=new Array(s._length),e=0;e<h.length;e++)r=h[e],v.color[r]=m||(b?x[r]:x);for(e=0;e<f.length;e++){r=f[e];var _=b?x[r]:x;v.color[r]=y||(m?_:a.addOpacity(_,i))}}c.glText[u].update(v)}}},{"../../components/color":591,"../../constants/interactions":692,"../../lib":717}],1177:[function(t,e,r){"use strict";var n=t("../scatter/format_labels");e.exports=function(t,e,r){var a=t.i;return"x"in t||(t.x=e._x[a]),"y"in t||(t.y=e._y[a]),n(t,e,r)}},{"../scatter/format_labels":1129}],1178:[function(t,e,r){"use strict";var n=t("./constants");r.isOpenSymbol=function(t){return"string"==typeof t?n.OPEN_RE.test(t):t%200>100},r.isDotSymbol=function(t){return"string"==typeof t?n.DOT_RE.test(t):t>200}},{"./constants":1173}],1179:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("../scatter/get_trace_color");function o(t,e,r,o){var s=t.xa,l=t.ya,c=t.distance,u=t.dxy,h=t.index,f={pointNumber:h,x:e[h],y:r[h]};f.tx=Array.isArray(o.text)?o.text[h]:o.text,f.htx=Array.isArray(o.hovertext)?o.hovertext[h]:o.hovertext,f.data=Array.isArray(o.customdata)?o.customdata[h]:o.customdata,f.tp=Array.isArray(o.textposition)?o.textposition[h]:o.textposition;var p=o.textfont;p&&(f.ts=a.isArrayOrTypedArray(p.size)?p.size[h]:p.size,f.tc=Array.isArray(p.color)?p.color[h]:p.color,f.tf=Array.isArray(p.family)?p.family[h]:p.family);var d=o.marker;d&&(f.ms=a.isArrayOrTypedArray(d.size)?d.size[h]:d.size,f.mo=a.isArrayOrTypedArray(d.opacity)?d.opacity[h]:d.opacity,f.mx=a.isArrayOrTypedArray(d.symbol)?d.symbol[h]:d.symbol,f.mc=a.isArrayOrTypedArray(d.color)?d.color[h]:d.color);var g=d&&d.line;g&&(f.mlc=Array.isArray(g.color)?g.color[h]:g.color,f.mlw=a.isArrayOrTypedArray(g.width)?g.width[h]:g.width);var v=d&&d.gradient;v&&"none"!==v.type&&(f.mgt=Array.isArray(v.type)?v.type[h]:v.type,f.mgc=Array.isArray(v.color)?v.color[h]:v.color);var m=s.c2p(f.x,!0),y=l.c2p(f.y,!0),x=f.mrc||1,b=o.hoverlabel;b&&(f.hbg=Array.isArray(b.bgcolor)?b.bgcolor[h]:b.bgcolor,f.hbc=Array.isArray(b.bordercolor)?b.bordercolor[h]:b.bordercolor,f.hts=a.isArrayOrTypedArray(b.font.size)?b.font.size[h]:b.font.size,f.htc=Array.isArray(b.font.color)?b.font.color[h]:b.font.color,f.htf=Array.isArray(b.font.family)?b.font.family[h]:b.font.family,f.hnl=a.isArrayOrTypedArray(b.namelength)?b.namelength[h]:b.namelength);var _=o.hoverinfo;_&&(f.hi=Array.isArray(_)?_[h]:_);var w=o.hovertemplate;w&&(f.ht=Array.isArray(w)?w[h]:w);var k={};k[t.index]=f;var T=a.extendFlat({},t,{color:i(o,f),x0:m-x,x1:m+x,xLabelVal:f.x,y0:y-x,y1:y+x,yLabelVal:f.y,cd:k,distance:c,spikeDistance:u,hovertemplate:f.ht});return f.htx?T.text=f.htx:f.tx?T.text=f.tx:o.text&&(T.text=o.text),a.fillText(f,o,T),n.getComponentMethod("errorbars","hoverInfo")(f,o,T),T}e.exports={hoverPoints:function(t,e,r,n){var a,i,s,l,c,u,h,f,p,d=t.cd,g=d[0].t,v=d[0].trace,m=t.xa,y=t.ya,x=g.x,b=g.y,_=m.c2p(e),w=y.c2p(r),k=t.distance;if(g.tree){var T=m.p2c(_-k),M=m.p2c(_+k),A=y.p2c(w-k),S=y.p2c(w+k);a="x"===n?g.tree.range(Math.min(T,M),Math.min(y._rl[0],y._rl[1]),Math.max(T,M),Math.max(y._rl[0],y._rl[1])):g.tree.range(Math.min(T,M),Math.min(A,S),Math.max(T,M),Math.max(A,S))}else a=g.ids;var E=k;if("x"===n)for(c=0;c<a.length;c++)s=x[a[c]],(u=Math.abs(m.c2p(s)-_))<E&&(E=u,h=y.c2p(b[a[c]])-w,p=Math.sqrt(u*u+h*h),i=a[c]);else for(c=a.length-1;c>-1;c--)s=x[a[c]],l=b[a[c]],u=m.c2p(s)-_,h=y.c2p(l)-w,(f=Math.sqrt(u*u+h*h))<E&&(E=p=f,i=a[c]);return t.index=i,t.distance=E,t.dxy=p,void 0===i?[t]:[o(t,x,b,v)]},calcHover:o}},{"../../lib":717,"../../registry":846,"../scatter/get_trace_color":1130}],1180:[function(t,e,r){"use strict";var n=t("./hover");e.exports={moduleType:"trace",name:"scattergl",basePlotModule:t("../../plots/cartesian"),categories:["gl","regl","cartesian","symbols","errorBarsOK","showLegend","scatter-like"],attributes:t("./attributes"),supplyDefaults:t("./defaults"),crossTraceDefaults:t("../scatter/cross_trace_defaults"),colorbar:t("../scatter/marker_colorbar"),formatLabels:t("./format_labels"),calc:t("./calc"),plot:t("./plot"),hoverPoints:n.hoverPoints,selectPoints:t("./select"),meta:{}}},{"../../plots/cartesian":776,"../scatter/cross_trace_defaults":1126,"../scatter/marker_colorbar":1138,"./attributes":1171,"./calc":1172,"./defaults":1175,"./format_labels":1177,"./hover":1179,"./plot":1181,"./select":1183}],1181:[function(t,e,r){"use strict";var n=t("regl-scatter2d"),a=t("regl-line2d"),i=t("regl-error2d"),o=t("gl-text"),s=t("../../lib"),l=t("../../lib/prepare_regl"),c=t("../scatter/subtypes"),u=t("../scatter/link_traces"),h=t("./edit_style").styleTextSelection;function f(t,e,r){var n=t._size,a=t.width,i=t.height;return[n.l+e.domain[0]*n.w,n.b+r.domain[0]*n.h,a-n.r-(1-e.domain[1])*n.w,i-n.t-(1-r.domain[1])*n.h]}e.exports=function(t,e,r){if(r.length){var p,d,g=t._fullLayout,v=e._scene,m=e.xaxis,y=e.yaxis;if(v)if(l(t,["ANGLE_instanced_arrays","OES_element_index_uint"])){var x=v.count,b=g._glcanvas.data()[0].regl;if(u(t,e,r),v.dirty){if(!0===v.error2d&&(v.error2d=i(b)),!0===v.line2d&&(v.line2d=a(b)),!0===v.scatter2d&&(v.scatter2d=n(b)),!0===v.fill2d&&(v.fill2d=a(b)),!0===v.glText)for(v.glText=new Array(x),p=0;p<x;p++)v.glText[p]=new o(b);if(v.glText){if(x>v.glText.length){var _=x-v.glText.length;for(p=0;p<_;p++)v.glText.push(new o(b))}else if(x<v.glText.length){var w=v.glText.length-x;v.glText.splice(x,w).forEach(function(t){t.destroy()})}for(p=0;p<x;p++)v.glText[p].update(v.textOptions[p])}if(v.line2d&&(v.line2d.update(v.lineOptions),v.lineOptions=v.lineOptions.map(function(t){if(t&&t.positions){for(var e=t.positions,r=0;r<e.length&&(isNaN(e[r])||isNaN(e[r+1]));)r+=2;for(var n=e.length-2;n>r&&(isNaN(e[n])||isNaN(e[n+1]));)n-=2;t.positions=e.slice(r,n+2)}return t}),v.line2d.update(v.lineOptions)),v.error2d){var k=(v.errorXOptions||[]).concat(v.errorYOptions||[]);v.error2d.update(k)}v.scatter2d&&v.scatter2d.update(v.markerOptions),v.fillOrder=s.repeat(null,x),v.fill2d&&(v.fillOptions=v.fillOptions.map(function(t,e){var n=r[e];if(t&&n&&n[0]&&n[0].trace){var a,i,o=n[0],s=o.trace,l=o.t,c=v.lineOptions[e],u=[];s._ownfill&&u.push(e),s._nexttrace&&u.push(e+1),u.length&&(v.fillOrder[e]=u);var h,f,p=[],d=c&&c.positions||l.positions;if("tozeroy"===s.fill){for(h=0;h<d.length&&isNaN(d[h+1]);)h+=2;for(f=d.length-2;f>h&&isNaN(d[f+1]);)f-=2;0!==d[h+1]&&(p=[d[h],0]),p=p.concat(d.slice(h,f+2)),0!==d[f+1]&&(p=p.concat([d[f],0]))}else if("tozerox"===s.fill){for(h=0;h<d.length&&isNaN(d[h]);)h+=2;for(f=d.length-2;f>h&&isNaN(d[f]);)f-=2;0!==d[h]&&(p=[0,d[h+1]]),p=p.concat(d.slice(h,f+2)),0!==d[f]&&(p=p.concat([0,d[f+1]]))}else if("toself"===s.fill||"tonext"===s.fill){for(p=[],a=0,i=0;i<d.length;i+=2)(isNaN(d[i])||isNaN(d[i+1]))&&((p=p.concat(d.slice(a,i))).push(d[a],d[a+1]),a=i+2);p=p.concat(d.slice(a)),a&&p.push(d[a],d[a+1])}else{var g=s._nexttrace;if(g){var m=v.lineOptions[e+1];if(m){var y=m.positions;if("tonexty"===s.fill){for(p=d.slice(),e=Math.floor(y.length/2);e--;){var x=y[2*e],b=y[2*e+1];isNaN(x)||isNaN(b)||p.push(x,b)}t.fill=g.fillcolor}}}}if(s._prevtrace&&"tonext"===s._prevtrace.fill){var _=v.lineOptions[e-1].positions,w=p.length/2,k=[a=w];for(i=0;i<_.length;i+=2)(isNaN(_[i])||isNaN(_[i+1]))&&(k.push(i/2+w+1),a=i+2);p=p.concat(_),t.hole=k}return t.fillmode=s.fill,t.opacity=s.opacity,t.positions=p,t}}),v.fill2d.update(v.fillOptions))}var T=g.dragmode,M="lasso"===T||"select"===T,A=g.clickmode.indexOf("select")>-1;for(p=0;p<x;p++){var S=r[p][0],E=S.trace,L=S.t,C=L.index,P=E._length,O=L.x,z=L.y;if(E.selectedpoints||M||A){if(M||(M=!0),E.selectedpoints){var I=v.selectBatch[C]=s.selIndices2selPoints(E),D={};for(d=0;d<I.length;d++)D[I[d]]=1;var R=[];for(d=0;d<P;d++)D[d]||R.push(d);v.unselectBatch[C]=R}var F=L.xpx=new Array(P),B=L.ypx=new Array(P);for(d=0;d<P;d++)F[d]=m.c2p(O[d]),B[d]=y.c2p(z[d])}else L.xpx=L.ypx=null}if(M){if(v.select2d||(v.select2d=n(g._glcanvas.data()[1].regl)),v.scatter2d){var N=new Array(x);for(p=0;p<x;p++)N[p]=v.selectBatch[p].length||v.unselectBatch[p].length?v.markerUnselectedOptions[p]:{};v.scatter2d.update(N)}v.select2d&&(v.select2d.update(v.markerOptions),v.select2d.update(v.markerSelectedOptions)),v.glText&&r.forEach(function(t){var e=((t||[])[0]||{}).trace||{};c.hasText(e)&&h(t)})}else v.scatter2d&&v.scatter2d.update(v.markerOptions);var j={viewport:f(g,m,y),range:[(m._rl||m.range)[0],(y._rl||y.range)[0],(m._rl||m.range)[1],(y._rl||y.range)[1]]},V=s.repeat(j,v.count);v.fill2d&&v.fill2d.update(V),v.line2d&&v.line2d.update(V),v.error2d&&v.error2d.update(V.concat(V)),v.scatter2d&&v.scatter2d.update(V),v.select2d&&v.select2d.update(V),v.glText&&v.glText.forEach(function(t){t.update(j)})}else v.init()}}},{"../../lib":717,"../../lib/prepare_regl":730,"../scatter/link_traces":1136,"../scatter/subtypes":1144,"./edit_style":1176,"gl-text":319,"regl-error2d":491,"regl-line2d":492,"regl-scatter2d":498}],1182:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){var r=e._scene,a={count:0,dirty:!0,lineOptions:[],fillOptions:[],markerOptions:[],markerSelectedOptions:[],markerUnselectedOptions:[],errorXOptions:[],errorYOptions:[],textOptions:[],textSelectedOptions:[],textUnselectedOptions:[],selectBatch:[],unselectBatch:[]},i={fill2d:!1,scatter2d:!1,error2d:!1,line2d:!1,glText:!1,select2d:!1};return e._scene||((r=e._scene={}).init=function(){n.extendFlat(r,i,a)},r.init(),r.update=function(t){var e=n.repeat(t,r.count);if(r.fill2d&&r.fill2d.update(e),r.scatter2d&&r.scatter2d.update(e),r.line2d&&r.line2d.update(e),r.error2d&&r.error2d.update(e.concat(e)),r.select2d&&r.select2d.update(e),r.glText)for(var a=0;a<r.count;a++)r.glText[a].update(t)},r.draw=function(){for(var t=r.count,e=r.fill2d,a=r.error2d,i=r.line2d,o=r.scatter2d,s=r.glText,l=r.select2d,c=r.selectBatch,u=r.unselectBatch,h=0;h<t;h++){if(e&&r.fillOrder[h]&&e.draw(r.fillOrder[h]),i&&r.lineOptions[h]&&i.draw(h),a&&(r.errorXOptions[h]&&a.draw(h),r.errorYOptions[h]&&a.draw(h+t)),o&&r.markerOptions[h])if(u[h].length){var f=n.repeat([],r.count);f[h]=u[h],o.draw(f)}else c[h].length||o.draw(h);s[h]&&r.textOptions[h]&&s[h].render()}l&&l.draw(c),r.dirty=!1},r.destroy=function(){r.fill2d&&r.fill2d.destroy&&r.fill2d.destroy(),r.scatter2d&&r.scatter2d.destroy&&r.scatter2d.destroy(),r.error2d&&r.error2d.destroy&&r.error2d.destroy(),r.line2d&&r.line2d.destroy&&r.line2d.destroy(),r.select2d&&r.select2d.destroy&&r.select2d.destroy(),r.glText&&r.glText.forEach(function(t){t.destroy&&t.destroy()}),r.lineOptions=null,r.fillOptions=null,r.markerOptions=null,r.markerSelectedOptions=null,r.markerUnselectedOptions=null,r.errorXOptions=null,r.errorYOptions=null,r.textOptions=null,r.textSelectedOptions=null,r.textUnselectedOptions=null,r.selectBatch=null,r.unselectBatch=null,e._scene=null}),r.dirty||n.extendFlat(r,a),r}},{"../../lib":717}],1183:[function(t,e,r){"use strict";var n=t("../scatter/subtypes"),a=t("./edit_style").styleTextSelection;e.exports=function(t,e){var r=t.cd,i=[],o=r[0].trace,s=r[0].t,l=o._length,c=s.x,u=s.y,h=s._scene,f=s.index;if(!h)return i;var p=n.hasText(o),d=n.hasMarkers(o),g=!d&&!p;if(!0!==o.visible||g)return i;var v=[],m=[];if(!1!==e&&!e.degenerate)for(var y=0;y<l;y++)e.contains([s.xpx[y],s.ypx[y]],!1,y,t)?(v.push(y),i.push({pointNumber:y,x:c[y],y:u[y]})):m.push(y);if(d){var x=h.scatter2d;if(v.length||m.length){if(!h.selectBatch[f].length&&!h.unselectBatch[f].length){var b=new Array(h.count);b[f]=h.markerUnselectedOptions[f],x.update.apply(x,b)}}else{var _=new Array(h.count);_[f]=h.markerOptions[f],x.update.apply(x,_)}}return h.selectBatch[f]=v,h.unselectBatch[f]=m,p&&a(r),i}},{"../scatter/subtypes":1144,"./edit_style":1176}],1184:[function(t,e,r){"use strict";var n=t("../../plots/template_attributes").hovertemplateAttrs,a=t("../../plots/template_attributes").texttemplateAttrs,i=t("../scattergeo/attributes"),o=t("../scatter/attributes"),s=t("../../plots/mapbox/layout_attributes"),l=t("../../plots/attributes"),c=t("../../components/colorscale/attributes"),u=t("../../lib/extend").extendFlat,h=t("../../plot_api/edit_types").overrideAll,f=i.line,p=i.marker;e.exports=h({lon:i.lon,lat:i.lat,mode:u({},o.mode,{dflt:"markers"}),text:u({},o.text,{}),texttemplate:a({editType:"plot"},{keys:["lat","lon","text"]}),hovertext:u({},o.hovertext,{}),line:{color:f.color,width:f.width},connectgaps:o.connectgaps,marker:u({symbol:{valType:"string",dflt:"circle",arrayOk:!0},opacity:p.opacity,size:p.size,sizeref:p.sizeref,sizemin:p.sizemin,sizemode:p.sizemode},c("marker")),fill:i.fill,fillcolor:o.fillcolor,textfont:s.layers.symbol.textfont,textposition:s.layers.symbol.textposition,below:{valType:"string"},selected:{marker:o.selected.marker},unselected:{marker:o.unselected.marker},hoverinfo:u({},l.hoverinfo,{flags:["lon","lat","text","name"]}),hovertemplate:n()},"calc","nested")},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/attributes":762,"../../plots/mapbox/layout_attributes":822,"../../plots/template_attributes":841,"../scatter/attributes":1120,"../scattergeo/attributes":1161}],1185:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../lib"),i=t("../../constants/numerical").BADNUM,o=t("../../lib/geojson_utils"),s=t("../../components/colorscale"),l=t("../../components/drawing"),c=t("../scatter/make_bubble_size_func"),u=t("../scatter/subtypes"),h=t("../../plots/mapbox/convert_text_opts"),f=t("../../components/fx/helpers").appendArrayPointValue,p=t("../../lib/svg_text_utils").NEWLINES,d=t("../../lib/svg_text_utils").BR_TAG_ALL;function g(){return{geojson:o.makeBlank(),layout:{visibility:"none"},paint:{}}}function v(t){return a.isArrayOrTypedArray(t)?function(t){return t}:t?function(){return t}:m}function m(){return""}function y(t){return t[0]===i}e.exports=function(t,e){var r,i=e[0].trace,x=!0===i.visible&&0!==i._length,b="none"!==i.fill,_=u.hasLines(i),w=u.hasMarkers(i),k=u.hasText(i),T=w&&"circle"===i.marker.symbol,M=w&&"circle"!==i.marker.symbol,A=g(),S=g(),E=g(),L=g(),C={fill:A,line:S,circle:E,symbol:L};if(!x)return C;if((b||_)&&(r=o.calcTraceToLineCoords(e)),b&&(A.geojson=o.makePolygon(r),A.layout.visibility="visible",a.extendFlat(A.paint,{"fill-color":i.fillcolor})),_&&(S.geojson=o.makeLine(r),S.layout.visibility="visible",a.extendFlat(S.paint,{"line-width":i.line.width,"line-color":i.line.color,"line-opacity":i.opacity})),T){var P=function(t){var e,r,i,o,u=t[0].trace,h=u.marker,f=u.selectedpoints,p=a.isArrayOrTypedArray(h.color),d=a.isArrayOrTypedArray(h.size),g=a.isArrayOrTypedArray(h.opacity);function v(t){return u.opacity*t}p&&(r=s.hasColorscale(u,"marker")?s.makeColorScaleFuncFromTrace(h):a.identity);d&&(i=c(u));g&&(o=function(t){var e=n(t)?+a.constrain(t,0,1):0;return v(e)});var m,x=[];for(e=0;e<t.length;e++){var b=t[e],_=b.lonlat;if(!y(_)){var w={};r&&(w.mcc=b.mcc=r(b.mc)),i&&(w.mrc=b.mrc=i(b.ms)),o&&(w.mo=o(b.mo)),f&&(w.selected=b.selected||0),x.push({type:"Feature",geometry:{type:"Point",coordinates:_},properties:w})}}if(f)for(m=l.makeSelectedPointStyleFns(u),e=0;e<x.length;e++){var k=x[e].properties;m.selectedOpacityFn&&(k.mo=v(m.selectedOpacityFn(k))),m.selectedColorFn&&(k.mcc=m.selectedColorFn(k)),m.selectedSizeFn&&(k.mrc=m.selectedSizeFn(k))}return{geojson:{type:"FeatureCollection",features:x},mcc:p||m&&m.selectedColorFn?{type:"identity",property:"mcc"}:h.color,mrc:d||m&&m.selectedSizeFn?{type:"identity",property:"mrc"}:(T=h.size,T/2),mo:g||m&&m.selectedOpacityFn?{type:"identity",property:"mo"}:v(h.opacity)};var T}(e);E.geojson=P.geojson,E.layout.visibility="visible",a.extendFlat(E.paint,{"circle-color":P.mcc,"circle-radius":P.mrc,"circle-opacity":P.mo})}if((M||k)&&(L.geojson=function(t,e){for(var r=e._fullLayout,n=t[0].trace,i=(n.marker||{}).symbol,o="circle"!==i?v(i):m,s=u.hasText(n)?v(n.text):m,l=[],c=0;c<t.length;c++){var h=t[c];if(!y(h.lonlat)){var g,x=n.texttemplate;if(x){var b=Array.isArray(x)?x[c]||"":x,_=n._module.formatLabels(h,n,r),w={};f(w,n,h.i);var k=n._meta||{};g=a.texttemplateString(b,_,r._d3locale,w,h,k)}else g=s(h.tx);g&&(g=g.replace(p,"").replace(d,"\n")),l.push({type:"Feature",geometry:{type:"Point",coordinates:h.lonlat},properties:{symbol:o(h.mx),text:g}})}}return{type:"FeatureCollection",features:l}}(e,t),a.extendFlat(L.layout,{visibility:"visible","icon-image":"{symbol}-15","text-field":"{text}"}),M&&(a.extendFlat(L.layout,{"icon-size":i.marker.size/10}),a.extendFlat(L.paint,{"icon-opacity":i.opacity*i.marker.opacity,"icon-color":i.marker.color})),k)){var O=(i.marker||{}).size,z=h(i.textposition,O);a.extendFlat(L.layout,{"text-size":i.textfont.size,"text-anchor":z.anchor,"text-offset":z.offset}),a.extendFlat(L.paint,{"text-color":i.textfont.color,"text-opacity":i.opacity})}return C}},{"../../components/colorscale":603,"../../components/drawing":612,"../../components/fx/helpers":626,"../../constants/numerical":693,"../../lib":717,"../../lib/geojson_utils":712,"../../lib/svg_text_utils":741,"../../plots/mapbox/convert_text_opts":819,"../scatter/make_bubble_size_func":1137,"../scatter/subtypes":1144,"fast-isnumeric":228}],1186:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/subtypes"),i=t("../scatter/marker_defaults"),o=t("../scatter/line_defaults"),s=t("../scatter/text_defaults"),l=t("../scatter/fillcolor_defaults"),c=t("./attributes");e.exports=function(t,e,r,u){function h(r,a){return n.coerce(t,e,c,r,a)}if(function(t,e,r){var n=r("lon")||[],a=r("lat")||[],i=Math.min(n.length,a.length);return e._length=i,i}(0,e,h)){if(h("text"),h("texttemplate"),h("hovertext"),h("hovertemplate"),h("mode"),h("below"),a.hasLines(e)&&(o(t,e,r,u,h,{noDash:!0}),h("connectgaps")),a.hasMarkers(e)){i(t,e,r,u,h,{noLine:!0});var f=e.marker;"circle"!==f.symbol&&(n.isArrayOrTypedArray(f.size)&&(f.size=f.size[0]),n.isArrayOrTypedArray(f.color)&&(f.color=f.color[0]))}a.hasText(e)&&s(t,e,u,h,{noSelect:!0}),h("fill"),"none"!==e.fill&&l(t,e,r,h),n.coerceSelectionMarkerOpacity(e,h)}else e.visible=!1}},{"../../lib":717,"../scatter/fillcolor_defaults":1128,"../scatter/line_defaults":1133,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scatter/text_defaults":1145,"./attributes":1184}],1187:[function(t,e,r){"use strict";e.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t}},{}],1188:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes");e.exports=function(t,e,r){var a={},i=r[e.subplot]._subplot.mockAxis,o=t.lonlat;return a.lonLabel=n.tickText(i,i.c2l(o[0]),!0).text,a.latLabel=n.tickText(i,i.c2l(o[1]),!0).text,a}},{"../../plots/cartesian/axes":765}],1189:[function(t,e,r){"use strict";var n=t("../../components/fx"),a=t("../../lib"),i=t("../scatter/get_trace_color"),o=a.fillText,s=t("../../constants/numerical").BADNUM;e.exports=function(t,e,r){var l=t.cd,c=l[0].trace,u=t.xa,h=t.ya,f=t.subplot,p=360*(e>=0?Math.floor((e+180)/360):Math.ceil((e-180)/360)),d=e-p;if(n.getClosest(l,function(t){var e=t.lonlat;if(e[0]===s)return 1/0;var n=a.modHalf(e[0],360),i=e[1],o=f.project([n,i]),l=o.x-u.c2p([d,i]),c=o.y-h.c2p([n,r]),p=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(l*l+c*c)-p,1-3/p)},t),!1!==t.index){var g=l[t.index],v=g.lonlat,m=[a.modHalf(v[0],360)+p,v[1]],y=u.c2p(m),x=h.c2p(m),b=g.mrc||1;t.x0=y-b,t.x1=y+b,t.y0=x-b,t.y1=x+b;var _={};_[c.subplot]={_subplot:f};var w=c._module.formatLabels(g,c,_);return t.lonLabel=w.lonLabel,t.latLabel=w.latLabel,t.color=i(c,g),t.extraText=function(t,e,r){if(t.hovertemplate)return;var n=(e.hi||t.hoverinfo).split("+"),a=-1!==n.indexOf("all"),i=-1!==n.indexOf("lon"),s=-1!==n.indexOf("lat"),l=e.lonlat,c=[];function u(t){return t+"\xb0"}a||i&&s?c.push("("+u(l[0])+", "+u(l[1])+")"):i?c.push(r.lon+u(l[0])):s&&c.push(r.lat+u(l[1]));(a||-1!==n.indexOf("text"))&&o(e,t,c);return c.join("<br>")}(c,g,l[0].t.labels),t.hovertemplate=c.hovertemplate,[t]}}},{"../../components/fx":630,"../../constants/numerical":693,"../../lib":717,"../scatter/get_trace_color":1130}],1190:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../scatter/marker_colorbar"),formatLabels:t("./format_labels"),calc:t("../scattergeo/calc"),plot:t("./plot"),hoverPoints:t("./hover"),eventData:t("./event_data"),selectPoints:t("./select"),styleOnSelect:function(t,e){e&&e[0].trace._glTrace.update(e)},moduleType:"trace",name:"scattermapbox",basePlotModule:t("../../plots/mapbox"),categories:["mapbox","gl","symbols","showLegend","scatter-like"],meta:{}}},{"../../plots/mapbox":820,"../scatter/marker_colorbar":1138,"../scattergeo/calc":1162,"./attributes":1184,"./defaults":1186,"./event_data":1187,"./format_labels":1188,"./hover":1189,"./plot":1191,"./select":1192}],1191:[function(t,e,r){"use strict";var n=t("./convert"),a=t("../../plots/mapbox/constants").traceLayerPrefix,i=["fill","line","circle","symbol"];function o(t,e){this.type="scattermapbox",this.subplot=t,this.uid=e,this.sourceIds={fill:"source-"+e+"-fill",line:"source-"+e+"-line",circle:"source-"+e+"-circle",symbol:"source-"+e+"-symbol"},this.layerIds={fill:a+e+"-fill",line:a+e+"-line",circle:a+e+"-circle",symbol:a+e+"-symbol"},this.below=null}var s=o.prototype;s.addSource=function(t,e){this.subplot.map.addSource(this.sourceIds[t],{type:"geojson",data:e.geojson})},s.setSourceData=function(t,e){this.subplot.map.getSource(this.sourceIds[t]).setData(e.geojson)},s.addLayer=function(t,e,r){this.subplot.addLayer({type:t,id:this.layerIds[t],source:this.sourceIds[t],layout:e.layout,paint:e.paint},r)},s.update=function(t){var e,r,a,o=this.subplot,s=o.map,l=n(o.gd,t),c=o.belowLookup["trace-"+this.uid];if(c!==this.below){for(e=i.length-1;e>=0;e--)r=i[e],s.removeLayer(this.layerIds[r]);for(e=0;e<i.length;e++)a=l[r=i[e]],this.addLayer(r,a,c);this.below=c}for(e=0;e<i.length;e++)a=l[r=i[e]],o.setOptions(this.layerIds[r],"setLayoutProperty",a.layout),"visible"===a.layout.visibility&&(this.setSourceData(r,a),o.setOptions(this.layerIds[r],"setPaintProperty",a.paint));t[0].trace._glTrace=this},s.dispose=function(){for(var t=this.subplot.map,e=i.length-1;e>=0;e--){var r=i[e];t.removeLayer(this.layerIds[r]),t.removeSource(this.sourceIds[r])}},e.exports=function(t,e){for(var r=e[0].trace,a=new o(t,r.uid),s=n(t.gd,e),l=a.below=t.belowLookup["trace-"+r.uid],c=0;c<i.length;c++){var u=i[c],h=s[u];a.addSource(u,h),a.addLayer(u,h,l)}return e[0].trace._glTrace=a,a}},{"../../plots/mapbox/constants":818,"./convert":1185}],1192:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/subtypes"),i=t("../../constants/numerical").BADNUM;e.exports=function(t,e){var r,o=t.cd,s=t.xaxis,l=t.yaxis,c=[],u=o[0].trace;if(!a.hasMarkers(u))return[];if(!1===e)for(r=0;r<o.length;r++)o[r].selected=0;else for(r=0;r<o.length;r++){var h=o[r],f=h.lonlat;if(f[0]!==i){var p=[n.modHalf(f[0],360),f[1]],d=[s.c2p(p),l.c2p(p)];e.contains(d,null,r,t)?(c.push({pointNumber:r,lon:f[0],lat:f[1]}),h.selected=1):h.selected=0}}return c}},{"../../constants/numerical":693,"../../lib":717,"../scatter/subtypes":1144}],1193:[function(t,e,r){"use strict";var n=t("../../plots/template_attributes").hovertemplateAttrs,a=t("../../plots/template_attributes").texttemplateAttrs,i=t("../../lib/extend").extendFlat,o=t("../scatter/attributes"),s=t("../../plots/attributes"),l=o.line;e.exports={mode:o.mode,r:{valType:"data_array",editType:"calc+clearAxisTypes"},theta:{valType:"data_array",editType:"calc+clearAxisTypes"},r0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes"},dr:{valType:"number",dflt:1,editType:"calc"},theta0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes"},dtheta:{valType:"number",editType:"calc"},thetaunit:{valType:"enumerated",values:["radians","degrees","gradians"],dflt:"degrees",editType:"calc+clearAxisTypes"},text:o.text,texttemplate:a({editType:"plot"},{keys:["r","theta","text"]}),hovertext:o.hovertext,line:{color:l.color,width:l.width,dash:l.dash,shape:i({},l.shape,{values:["linear","spline"]}),smoothing:l.smoothing,editType:"calc"},connectgaps:o.connectgaps,marker:o.marker,cliponaxis:i({},o.cliponaxis,{dflt:!1}),textposition:o.textposition,textfont:o.textfont,fill:i({},o.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:o.fillcolor,hoverinfo:i({},s.hoverinfo,{flags:["r","theta","text","name"]}),hoveron:o.hoveron,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},{"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../scatter/attributes":1120}],1194:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../../constants/numerical").BADNUM,i=t("../../plots/cartesian/axes"),o=t("../scatter/colorscale_calc"),s=t("../scatter/arrays_to_calcdata"),l=t("../scatter/calc_selection"),c=t("../scatter/calc").calcMarkerSize;e.exports=function(t,e){for(var r=t._fullLayout,u=e.subplot,h=r[u].radialaxis,f=r[u].angularaxis,p=h.makeCalcdata(e,"r"),d=f.makeCalcdata(e,"theta"),g=e._length,v=new Array(g),m=0;m<g;m++){var y=p[m],x=d[m],b=v[m]={};n(y)&&n(x)?(b.r=y,b.theta=x):b.r=a}var _=c(e,g);return e._extremes.x=i.findExtremes(h,p,{ppad:_}),o(t,e),s(v,e),l(v,e),v}},{"../../constants/numerical":693,"../../plots/cartesian/axes":765,"../scatter/arrays_to_calcdata":1119,"../scatter/calc":1121,"../scatter/calc_selection":1122,"../scatter/colorscale_calc":1123,"fast-isnumeric":228}],1195:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/subtypes"),i=t("../scatter/marker_defaults"),o=t("../scatter/line_defaults"),s=t("../scatter/line_shape_defaults"),l=t("../scatter/text_defaults"),c=t("../scatter/fillcolor_defaults"),u=t("../scatter/constants").PTS_LINESONLY,h=t("./attributes");function f(t,e,r,n){var a,i=n("r"),o=n("theta");if(i)o?a=Math.min(i.length,o.length):(a=i.length,n("theta0"),n("dtheta"));else{if(!o)return 0;a=e.theta.length,n("r0"),n("dr")}return e._length=a,a}e.exports={handleRThetaDefaults:f,supplyDefaults:function(t,e,r,p){function d(r,a){return n.coerce(t,e,h,r,a)}var g=f(0,e,0,d);if(g){d("thetaunit"),d("mode",g<u?"lines+markers":"lines"),d("text"),d("hovertext"),"fills"!==e.hoveron&&d("hovertemplate"),a.hasLines(e)&&(o(t,e,r,p,d),s(t,e,d),d("connectgaps")),a.hasMarkers(e)&&i(t,e,r,p,d,{gradient:!0}),a.hasText(e)&&(d("texttemplate"),l(t,e,p,d));var v=[];(a.hasMarkers(e)||a.hasText(e))&&(d("cliponaxis"),d("marker.maxdisplayed"),v.push("points")),d("fill"),"none"!==e.fill&&(c(t,e,r,d),a.hasLines(e)||s(t,e,d)),"tonext"!==e.fill&&"toself"!==e.fill||v.push("fills"),d("hoveron",v.join("+")||"points"),n.coerceSelectionMarkerOpacity(e,d)}else e.visible=!1}}},{"../../lib":717,"../scatter/constants":1124,"../scatter/fillcolor_defaults":1128,"../scatter/line_defaults":1133,"../scatter/line_shape_defaults":1135,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scatter/text_defaults":1145,"./attributes":1193}],1196:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes");e.exports=function(t,e,r){var i,o,s={},l=r[e.subplot]._subplot;l?(i=l.radialAxis,o=l.angularAxis):(i=(l=r[e.subplot]).radialaxis,o=l.angularaxis);var c=i.c2l(t.r);s.rLabel=a.tickText(i,c,!0).text;var u="degrees"===o.thetaunit?n.rad2deg(t.theta):t.theta;return s.thetaLabel=a.tickText(o,u,!0).text,s}},{"../../lib":717,"../../plots/cartesian/axes":765}],1197:[function(t,e,r){"use strict";var n=t("../scatter/hover");function a(t,e,r,n){var a=r.radialAxis,i=r.angularAxis;a._hovertitle="r",i._hovertitle="\u03b8";var o={};o[e.subplot]={_subplot:r};var s=e._module.formatLabels(t,e,o);n.rLabel=s.rLabel,n.thetaLabel=s.thetaLabel;var l=t.hi||e.hoverinfo,c=[];function u(t,e){c.push(t._hovertitle+": "+e)}if(!e.hovertemplate){var h=l.split("+");-1!==h.indexOf("all")&&(h=["r","theta","text"]),-1!==h.indexOf("r")&&u(a,n.rLabel),-1!==h.indexOf("theta")&&u(i,n.thetaLabel),-1!==h.indexOf("text")&&n.text&&(c.push(n.text),delete n.text),n.extraText=c.join("<br>")}}e.exports={hoverPoints:function(t,e,r,i){var o=n(t,e,r,i);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index)return o;var l=t.subplot,c=s.cd[s.index],u=s.trace;if(l.isPtInside(c))return s.xLabelVal=void 0,s.yLabelVal=void 0,a(c,u,l,s),s.hovertemplate=u.hovertemplate,o}},makeHoverPointText:a}},{"../scatter/hover":1131}],1198:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"scatterpolar",basePlotModule:t("../../plots/polar"),categories:["polar","symbols","showLegend","scatter-like"],attributes:t("./attributes"),supplyDefaults:t("./defaults").supplyDefaults,colorbar:t("../scatter/marker_colorbar"),formatLabels:t("./format_labels"),calc:t("./calc"),plot:t("./plot"),style:t("../scatter/style").style,styleOnSelect:t("../scatter/style").styleOnSelect,hoverPoints:t("./hover").hoverPoints,selectPoints:t("../scatter/select"),meta:{}}},{"../../plots/polar":829,"../scatter/marker_colorbar":1138,"../scatter/select":1141,"../scatter/style":1143,"./attributes":1193,"./calc":1194,"./defaults":1195,"./format_labels":1196,"./hover":1197,"./plot":1199}],1199:[function(t,e,r){"use strict";var n=t("../scatter/plot"),a=t("../../constants/numerical").BADNUM;e.exports=function(t,e,r){for(var i=e.layers.frontplot.select("g.scatterlayer"),o={xaxis:e.xaxis,yaxis:e.yaxis,plot:e.framework,layerClipId:e._hasClipOnAxisFalse?e.clipIds.forTraces:null},s=e.radialAxis,l=e.angularAxis,c=0;c<r.length;c++)for(var u=r[c],h=0;h<u.length;h++){var f=u[h],p=f.r;if(p===a)f.x=f.y=a;else{var d=s.c2g(p),g=l.c2g(f.theta);f.x=d*Math.cos(g),f.y=d*Math.sin(g)}}n(t,o,r,i)}},{"../../constants/numerical":693,"../scatter/plot":1140}],1200:[function(t,e,r){"use strict";var n=t("../scatterpolar/attributes"),a=t("../scattergl/attributes"),i=t("../../plots/template_attributes").texttemplateAttrs;e.exports={mode:n.mode,r:n.r,theta:n.theta,r0:n.r0,dr:n.dr,theta0:n.theta0,dtheta:n.dtheta,thetaunit:n.thetaunit,text:n.text,texttemplate:i({editType:"plot"},{keys:["r","theta","text"]}),hovertext:n.hovertext,hovertemplate:n.hovertemplate,line:a.line,connectgaps:a.connectgaps,marker:a.marker,fill:a.fill,fillcolor:a.fillcolor,textposition:a.textposition,textfont:a.textfont,hoverinfo:n.hoverinfo,selected:n.selected,unselected:n.unselected}},{"../../plots/template_attributes":841,"../scattergl/attributes":1171,"../scatterpolar/attributes":1193}],1201:[function(t,e,r){"use strict";var n=t("../scatter/colorscale_calc"),a=t("../scatter/calc").calcMarkerSize,i=t("../scattergl/convert"),o=t("../../plots/cartesian/axes"),s=t("../scattergl/constants").TOO_MANY_POINTS;e.exports=function(t,e){var r=t._fullLayout,l=e.subplot,c=r[l].radialaxis,u=r[l].angularaxis,h=e._r=c.makeCalcdata(e,"r"),f=e._theta=u.makeCalcdata(e,"theta"),p=e._length,d={};p<h.length&&(h=h.slice(0,p)),p<f.length&&(f=f.slice(0,p)),d.r=h,d.theta=f,n(t,e);var g,v=d.opts=i.style(t,e);return p<s?g=a(e,p):v.marker&&(g=2*(v.marker.sizeAvg||Math.max(v.marker.size,3))),e._extremes.x=o.findExtremes(c,h,{ppad:g}),[{x:!1,y:!1,t:d,trace:e}]}},{"../../plots/cartesian/axes":765,"../scatter/calc":1121,"../scatter/colorscale_calc":1123,"../scattergl/constants":1173,"../scattergl/convert":1174}],1202:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/subtypes"),i=t("../scatterpolar/defaults").handleRThetaDefaults,o=t("../scatter/marker_defaults"),s=t("../scatter/line_defaults"),l=t("../scatter/text_defaults"),c=t("../scatter/fillcolor_defaults"),u=t("../scatter/constants").PTS_LINESONLY,h=t("./attributes");e.exports=function(t,e,r,f){function p(r,a){return n.coerce(t,e,h,r,a)}var d=i(t,e,f,p);d?(p("thetaunit"),p("mode",d<u?"lines+markers":"lines"),p("text"),p("hovertext"),"fills"!==e.hoveron&&p("hovertemplate"),a.hasLines(e)&&(s(t,e,r,f,p),p("connectgaps")),a.hasMarkers(e)&&o(t,e,r,f,p),a.hasText(e)&&(p("texttemplate"),l(t,e,f,p)),p("fill"),"none"!==e.fill&&c(t,e,r,p),n.coerceSelectionMarkerOpacity(e,p)):e.visible=!1}},{"../../lib":717,"../scatter/constants":1124,"../scatter/fillcolor_defaults":1128,"../scatter/line_defaults":1133,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scatter/text_defaults":1145,"../scatterpolar/defaults":1195,"./attributes":1200}],1203:[function(t,e,r){"use strict";var n=t("../scatterpolar/format_labels");e.exports=function(t,e,r){var a=t.i;return"r"in t||(t.r=e._r[a]),"theta"in t||(t.theta=e._theta[a]),n(t,e,r)}},{"../scatterpolar/format_labels":1196}],1204:[function(t,e,r){"use strict";var n=t("../scattergl/hover"),a=t("../scatterpolar/hover").makeHoverPointText;e.exports={hoverPoints:function(t,e,r,i){var o=t.cd[0].t,s=o.r,l=o.theta,c=n.hoverPoints(t,e,r,i);if(c&&!1!==c[0].index){var u=c[0];if(void 0===u.index)return c;var h=t.subplot,f=u.cd[u.index],p=u.trace;if(f.r=s[u.index],f.theta=l[u.index],h.isPtInside(f))return u.xLabelVal=void 0,u.yLabelVal=void 0,a(f,p,h,u),c}}}},{"../scattergl/hover":1179,"../scatterpolar/hover":1197}],1205:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"scatterpolargl",basePlotModule:t("../../plots/polar"),categories:["gl","regl","polar","symbols","showLegend","scatter-like"],attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../scatter/marker_colorbar"),formatLabels:t("./format_labels"),calc:t("./calc"),plot:t("./plot"),hoverPoints:t("./hover").hoverPoints,selectPoints:t("../scattergl/select"),meta:{}}},{"../../plots/polar":829,"../scatter/marker_colorbar":1138,"../scattergl/select":1183,"./attributes":1200,"./calc":1201,"./defaults":1202,"./format_labels":1203,"./hover":1204,"./plot":1206}],1206:[function(t,e,r){"use strict";var n=t("point-cluster"),a=t("fast-isnumeric"),i=t("../scattergl/plot"),o=t("../scattergl/scene_update"),s=t("../scattergl/convert"),l=t("../../lib"),c=t("../scattergl/constants").TOO_MANY_POINTS;e.exports=function(t,e,r){if(r.length){var u=e.radialAxis,h=e.angularAxis,f=o(t,e);return r.forEach(function(r){if(r&&r[0]&&r[0].trace){var i,o=r[0],p=o.trace,d=o.t,g=p._length,v=d.r,m=d.theta,y=d.opts,x=v.slice(),b=m.slice();for(i=0;i<v.length;i++)e.isPtInside({r:v[i],theta:m[i]})||(x[i]=NaN,b[i]=NaN);var _=new Array(2*g),w=Array(g),k=Array(g);for(i=0;i<g;i++){var T,M,A=x[i];if(a(A)){var S=u.c2g(A),E=h.c2g(b[i],p.thetaunit);T=S*Math.cos(E),M=S*Math.sin(E)}else T=M=NaN;w[i]=_[2*i]=T,k[i]=_[2*i+1]=M}d.tree=n(_),y.marker&&g>=c&&(y.marker.cluster=d.tree),y.marker&&(y.markerSel.positions=y.markerUnsel.positions=y.marker.positions=_),y.line&&_.length>1&&l.extendFlat(y.line,s.linePositions(t,p,_)),y.text&&(l.extendFlat(y.text,{positions:_},s.textPosition(t,p,y.text,y.marker)),l.extendFlat(y.textSel,{positions:_},s.textPosition(t,p,y.text,y.markerSel)),l.extendFlat(y.textUnsel,{positions:_},s.textPosition(t,p,y.text,y.markerUnsel))),y.fill&&!f.fill2d&&(f.fill2d=!0),y.marker&&!f.scatter2d&&(f.scatter2d=!0),y.line&&!f.line2d&&(f.line2d=!0),y.text&&!f.glText&&(f.glText=!0),f.lineOptions.push(y.line),f.fillOptions.push(y.fill),f.markerOptions.push(y.marker),f.markerSelectedOptions.push(y.markerSel),f.markerUnselectedOptions.push(y.markerUnsel),f.textOptions.push(y.text),f.textSelectedOptions.push(y.textSel),f.textUnselectedOptions.push(y.textUnsel),f.selectBatch.push([]),f.unselectBatch.push([]),d.x=w,d.y=k,d.rawx=w,d.rawy=k,d.r=v,d.theta=m,d.positions=_,d._scene=f,d.index=f.count,f.count++}}),i(t,e,r)}}},{"../../lib":717,"../scattergl/constants":1173,"../scattergl/convert":1174,"../scattergl/plot":1181,"../scattergl/scene_update":1182,"fast-isnumeric":228,"point-cluster":470}],1207:[function(t,e,r){"use strict";var n=t("../../plots/template_attributes").hovertemplateAttrs,a=t("../../plots/template_attributes").texttemplateAttrs,i=t("../scatter/attributes"),o=t("../../plots/attributes"),s=t("../../components/colorscale/attributes"),l=t("../../components/drawing/attributes").dash,c=t("../../lib/extend").extendFlat,u=i.marker,h=i.line,f=u.line;e.exports={a:{valType:"data_array",editType:"calc"},b:{valType:"data_array",editType:"calc"},c:{valType:"data_array",editType:"calc"},sum:{valType:"number",dflt:0,min:0,editType:"calc"},mode:c({},i.mode,{dflt:"markers"}),text:c({},i.text,{}),texttemplate:a({editType:"plot"},{keys:["a","b","c","text"]}),hovertext:c({},i.hovertext,{}),line:{color:h.color,width:h.width,dash:l,shape:c({},h.shape,{values:["linear","spline"]}),smoothing:h.smoothing,editType:"calc"},connectgaps:i.connectgaps,cliponaxis:i.cliponaxis,fill:c({},i.fill,{values:["none","toself","tonext"],dflt:"none"}),fillcolor:i.fillcolor,marker:c({symbol:u.symbol,opacity:u.opacity,maxdisplayed:u.maxdisplayed,size:u.size,sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,line:c({width:f.width,editType:"calc"},s("marker.line")),gradient:u.gradient,editType:"calc"},s("marker")),textfont:i.textfont,textposition:i.textposition,selected:i.selected,unselected:i.unselected,hoverinfo:c({},o.hoverinfo,{flags:["a","b","c","text","name"]}),hoveron:i.hoveron,hovertemplate:n()}},{"../../components/colorscale/attributes":598,"../../components/drawing/attributes":611,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../scatter/attributes":1120}],1208:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),a=t("../scatter/colorscale_calc"),i=t("../scatter/arrays_to_calcdata"),o=t("../scatter/calc_selection"),s=t("../scatter/calc").calcMarkerSize,l=["a","b","c"],c={a:["b","c"],b:["a","c"],c:["a","b"]};e.exports=function(t,e){var r,u,h,f,p,d,g=t._fullLayout[e.subplot].sum,v=e.sum||g,m={a:e.a,b:e.b,c:e.c};for(r=0;r<l.length;r++)if(!m[h=l[r]]){for(p=m[c[h][0]],d=m[c[h][1]],f=new Array(p.length),u=0;u<p.length;u++)f[u]=v-p[u]-d[u];m[h]=f}var y,x,b,_,w,k,T=e._length,M=new Array(T);for(r=0;r<T;r++)y=m.a[r],x=m.b[r],b=m.c[r],n(y)&&n(x)&&n(b)?(1!==(_=g/((y=+y)+(x=+x)+(b=+b)))&&(y*=_,x*=_,b*=_),k=y,w=b-x,M[r]={x:w,y:k,a:y,b:x,c:b}):M[r]={x:!1,y:!1};return s(e,T),a(t,e),i(M,e),o(M,e),M}},{"../scatter/arrays_to_calcdata":1119,"../scatter/calc":1121,"../scatter/calc_selection":1122,"../scatter/colorscale_calc":1123,"fast-isnumeric":228}],1209:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/constants"),i=t("../scatter/subtypes"),o=t("../scatter/marker_defaults"),s=t("../scatter/line_defaults"),l=t("../scatter/line_shape_defaults"),c=t("../scatter/text_defaults"),u=t("../scatter/fillcolor_defaults"),h=t("./attributes");e.exports=function(t,e,r,f){function p(r,a){return n.coerce(t,e,h,r,a)}var d,g=p("a"),v=p("b"),m=p("c");if(g?(d=g.length,v?(d=Math.min(d,v.length),m&&(d=Math.min(d,m.length))):d=m?Math.min(d,m.length):0):v&&m&&(d=Math.min(v.length,m.length)),d){e._length=d,p("sum"),p("text"),p("hovertext"),"fills"!==e.hoveron&&p("hovertemplate"),p("mode",d<a.PTS_LINESONLY?"lines+markers":"lines"),i.hasLines(e)&&(s(t,e,r,f,p),l(t,e,p),p("connectgaps")),i.hasMarkers(e)&&o(t,e,r,f,p,{gradient:!0}),i.hasText(e)&&(p("texttemplate"),c(t,e,f,p));var y=[];(i.hasMarkers(e)||i.hasText(e))&&(p("cliponaxis"),p("marker.maxdisplayed"),y.push("points")),p("fill"),"none"!==e.fill&&(u(t,e,r,p),i.hasLines(e)||l(t,e,p)),"tonext"!==e.fill&&"toself"!==e.fill||y.push("fills"),p("hoveron",y.join("+")||"points"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible=!1}},{"../../lib":717,"../scatter/constants":1124,"../scatter/fillcolor_defaults":1128,"../scatter/line_defaults":1133,"../scatter/line_shape_defaults":1135,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scatter/text_defaults":1145,"./attributes":1207}],1210:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,a){if(e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),n[a]){var i=n[a];t.a=i.a,t.b=i.b,t.c=i.c}else t.a=e.a,t.b=e.b,t.c=e.c;return t}},{}],1211:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes");e.exports=function(t,e,r){var a={},i=r[e.subplot]._subplot;return a.aLabel=n.tickText(i.aaxis,t.a,!0).text,a.bLabel=n.tickText(i.baxis,t.b,!0).text,a.cLabel=n.tickText(i.caxis,t.c,!0).text,a}},{"../../plots/cartesian/axes":765}],1212:[function(t,e,r){"use strict";var n=t("../scatter/hover");e.exports=function(t,e,r,a){var i=n(t,e,r,a);if(i&&!1!==i[0].index){var o=i[0];if(void 0===o.index){var s=1-o.y0/t.ya._length,l=t.xa._length,c=l*s/2,u=l-c;return o.x0=Math.max(Math.min(o.x0,u),c),o.x1=Math.max(Math.min(o.x1,u),c),i}var h=o.cd[o.index],f=o.trace,p=o.subplot;o.a=h.a,o.b=h.b,o.c=h.c,o.xLabelVal=void 0,o.yLabelVal=void 0;var d={};d[f.subplot]={_subplot:p};var g=f._module.formatLabels(h,f,d);o.aLabel=g.aLabel,o.bLabel=g.bLabel,o.cLabel=g.cLabel;var v=h.hi||f.hoverinfo,m=[];if(!f.hovertemplate){var y=v.split("+");-1!==y.indexOf("all")&&(y=["a","b","c"]),-1!==y.indexOf("a")&&x(p.aaxis,o.aLabel),-1!==y.indexOf("b")&&x(p.baxis,o.bLabel),-1!==y.indexOf("c")&&x(p.caxis,o.cLabel)}return o.extraText=m.join("<br>"),o.hovertemplate=f.hovertemplate,i}function x(t,e){m.push(t._hovertitle+": "+e)}}},{"../scatter/hover":1131}],1213:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../scatter/marker_colorbar"),formatLabels:t("./format_labels"),calc:t("./calc"),plot:t("./plot"),style:t("../scatter/style").style,styleOnSelect:t("../scatter/style").styleOnSelect,hoverPoints:t("./hover"),selectPoints:t("../scatter/select"),eventData:t("./event_data"),moduleType:"trace",name:"scatterternary",basePlotModule:t("../../plots/ternary"),categories:["ternary","symbols","showLegend","scatter-like"],meta:{}}},{"../../plots/ternary":842,"../scatter/marker_colorbar":1138,"../scatter/select":1141,"../scatter/style":1143,"./attributes":1207,"./calc":1208,"./defaults":1209,"./event_data":1210,"./format_labels":1211,"./hover":1212,"./plot":1214}],1214:[function(t,e,r){"use strict";var n=t("../scatter/plot");e.exports=function(t,e,r){var a=e.plotContainer;a.select(".scatterlayer").selectAll("*").remove();var i={xaxis:e.xaxis,yaxis:e.yaxis,plot:a,layerClipId:e._hasClipOnAxisFalse?e.clipIdRelative:null},o=e.layers.frontplot.select("g.scatterlayer");n(t,i,r,o)}},{"../scatter/plot":1140}],1215:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),a=t("../../components/colorscale/attributes"),i=t("../../plots/template_attributes").hovertemplateAttrs,o=t("../scattergl/attributes"),s=t("../../plots/cartesian/constants").idRegex,l=t("../../plot_api/plot_template").templatedArray,c=t("../../lib/extend").extendFlat,u=n.marker,h=u.line,f=c(a("marker.line",{editTypeOverride:"calc"}),{width:c({},h.width,{editType:"calc"}),editType:"calc"}),p=c(a("marker"),{symbol:u.symbol,size:c({},u.size,{editType:"markerSize"}),sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,opacity:u.opacity,colorbar:u.colorbar,line:f,editType:"calc"});function d(t){return{valType:"info_array",freeLength:!0,editType:"calc",items:{valType:"subplotid",regex:s[t],editType:"plot"}}}p.color.editType=p.cmin.editType=p.cmax.editType="style",e.exports={dimensions:l("dimension",{visible:{valType:"boolean",dflt:!0,editType:"calc"},label:{valType:"string",editType:"calc"},values:{valType:"data_array",editType:"calc+clearAxisTypes"},axis:{type:{valType:"enumerated",values:["linear","log","date","category"],editType:"calc+clearAxisTypes"},matches:{valType:"boolean",dflt:!1,editType:"calc"},editType:"calc+clearAxisTypes"},editType:"calc+clearAxisTypes"}),text:c({},o.text,{}),hovertext:c({},o.hovertext,{}),hovertemplate:i(),marker:p,xaxes:d("x"),yaxes:d("y"),diagonal:{visible:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc"},showupperhalf:{valType:"boolean",dflt:!0,editType:"calc"},showlowerhalf:{valType:"boolean",dflt:!0,editType:"calc"},selected:{marker:o.selected.marker,editType:"calc"},unselected:{marker:o.unselected.marker,editType:"calc"},opacity:o.opacity}},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plot_api/plot_template":755,"../../plots/cartesian/constants":771,"../../plots/template_attributes":841,"../scatter/attributes":1120,"../scattergl/attributes":1171}],1216:[function(t,e,r){"use strict";var n=t("regl-line2d"),a=t("../../registry"),i=t("../../lib/prepare_regl"),o=t("../../plots/get_data").getModuleCalcData,s=t("../../plots/cartesian"),l=t("../../plots/cartesian/axis_ids").getFromId,c=t("../../plots/cartesian/axes").shouldShowZeroLine,u="splom";function h(t,e,r){for(var n=r.matrixOptions.data.length,a=e._visibleDims,i=r.viewOpts.ranges=new Array(n),o=0;o<a.length;o++){var s=a[o],c=i[o]=new Array(4),u=l(t,e._diag[s][0]);u&&(c[0]=u.r2l(u.range[0]),c[2]=u.r2l(u.range[1]));var h=l(t,e._diag[s][1]);h&&(c[1]=h.r2l(h.range[0]),c[3]=h.r2l(h.range[1]))}r.selectBatch.length||r.unselectBatch.length?r.matrix.update({ranges:i},{ranges:i}):r.matrix.update({ranges:i})}function f(t){var e=t._fullLayout,r=e._glcanvas.data()[0].regl,a=e._splomGrid;a||(a=e._splomGrid=n(r)),a.update(function(t){var e,r=t._fullLayout,n=r._size,a=[0,0,r.width,r.height],i={};function o(t,e,r,n,o,s){var l=e[t+"color"],c=e[t+"width"],u=String(l+c);u in i?i[u].data.push(NaN,NaN,r,n,o,s):i[u]={data:[r,n,o,s],join:"rect",thickness:c,color:l,viewport:a,range:a,overlay:!1}}for(e in r._splomSubplots){var s,l,u=r._plots[e],h=u.xaxis,f=u.yaxis,p=h._gridVals,d=f._gridVals,g=n.b+f.domain[0]*n.h,v=-f._m,m=-v*f.r2l(f.range[0],f.calendar);if(h.showgrid)for(e=0;e<p.length;e++)s=h._offset+h.l2p(p[e].x),o("grid",h,s,g,s,g+f._length);if(f.showgrid)for(e=0;e<d.length;e++)l=g+m+v*d[e].x,o("grid",f,h._offset,l,h._offset+h._length,l);c(t,h,f)&&(s=h._offset+h.l2p(0),o("zeroline",h,s,g,s,g+f._length)),c(t,f,h)&&(l=g+m+0,o("zeroline",f,h._offset,l,h._offset+h._length,l))}var y=[];for(e in i)y.push(i[e]);return y}(t))}e.exports={name:u,attr:s.attr,attrRegex:s.attrRegex,layoutAttributes:s.layoutAttributes,supplyLayoutDefaults:s.supplyLayoutDefaults,drawFramework:s.drawFramework,plot:function(t){var e=t._fullLayout,r=a.getModule(u),n=o(t.calcdata,r)[0];i(t,["ANGLE_instanced_arrays","OES_element_index_uint"])&&(e._hasOnlyLargeSploms&&f(t),r.plot(t,{},n))},drag:function(t){var e=t.calcdata,r=t._fullLayout;r._hasOnlyLargeSploms&&f(t);for(var n=0;n<e.length;n++){var a=e[n][0].trace,i=r._splomScenes[a.uid];"splom"===a.type&&i&&i.matrix&&h(t,a,i)}},updateGrid:f,clean:function(t,e,r,n){var a,i={};if(n._splomScenes){for(a=0;a<t.length;a++){var o=t[a];"splom"===o.type&&(i[o.uid]=1)}for(a=0;a<r.length;a++){var l=r[a];if(!i[l.uid]){var c=n._splomScenes[l.uid];c&&c.destroy&&c.destroy(),n._splomScenes[l.uid]=null,delete n._splomScenes[l.uid]}}}0===Object.keys(n._splomScenes||{}).length&&delete n._splomScenes,n._splomGrid&&!e._hasOnlyLargeSploms&&n._hasOnlyLargeSploms&&(n._splomGrid.destroy(),n._splomGrid=null,delete n._splomGrid),s.clean(t,e,r,n)},updateFx:s.updateFx,toSVG:s.toSVG}},{"../../lib/prepare_regl":730,"../../plots/cartesian":776,"../../plots/cartesian/axes":765,"../../plots/cartesian/axis_ids":768,"../../plots/get_data":800,"../../registry":846,"regl-line2d":492}],1217:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axis_ids"),i=t("../scatter/calc").calcMarkerSize,o=t("../scatter/calc").calcAxisExpansion,s=t("../scatter/colorscale_calc"),l=t("../scattergl/convert").markerSelection,c=t("../scattergl/convert").markerStyle,u=t("./scene_update"),h=t("../../constants/numerical").BADNUM,f=t("../scattergl/constants").TOO_MANY_POINTS;e.exports=function(t,e){var r,p,d,g,v,m,y=e.dimensions,x=e._length,b={},_=b.cdata=[],w=b.data=[],k=e._visibleDims=[];function T(t,r){for(var a=t.makeCalcdata({v:r.values,vcalendar:e.calendar},"v"),i=0;i<a.length;i++)a[i]=a[i]===h?NaN:a[i];_.push(a),w.push("log"===t.type?n.simpleMap(a,t.c2l):a)}for(r=0;r<y.length;r++)if((d=y[r]).visible){if(g=a.getFromId(t,e._diag[r][0]),v=a.getFromId(t,e._diag[r][1]),g&&v&&g.type!==v.type){n.log("Skipping splom dimension "+r+" with conflicting axis types");continue}g?(T(g,d),v&&"category"===v.type&&(v._categories=g._categories.slice())):T(v,d),k.push(r)}for(s(t,e),n.extendFlat(b,c(e)),m=_.length*x>f?2*(b.sizeAvg||Math.max(b.size,3)):i(e,x),p=0;p<k.length;p++)d=y[r=k[p]],g=a.getFromId(t,e._diag[r][0])||{},v=a.getFromId(t,e._diag[r][1])||{},o(t,e,g,v,_[p],_[p],m);var M=u(t,e);return M.matrix||(M.matrix=!0),M.matrixOptions=b,M.selectedOptions=l(e,e.selected),M.unselectedOptions=l(e,e.unselected),[{x:!1,y:!1,t:{},trace:e}]}},{"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/axis_ids":768,"../scatter/calc":1121,"../scatter/colorscale_calc":1123,"../scattergl/constants":1173,"../scattergl/convert":1174,"./scene_update":1224}],1218:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/array_container_defaults"),i=t("./attributes"),o=t("../scatter/subtypes"),s=t("../scatter/marker_defaults"),l=t("../parcoords/merge_length"),c=t("../scattergl/helpers").isOpenSymbol;function u(t,e){function r(r,a){return n.coerce(t,e,i.dimensions,r,a)}r("label");var a=r("values");a&&a.length?r("visible"):e.visible=!1,r("axis.type"),r("axis.matches")}e.exports=function(t,e,r,h){function f(r,a){return n.coerce(t,e,i,r,a)}var p=a(t,e,{name:"dimensions",handleItemDefaults:u}),d=f("diagonal.visible"),g=f("showupperhalf"),v=f("showlowerhalf");if(l(e,p,"values")&&(d||g||v)){f("text"),f("hovertext"),f("hovertemplate"),s(t,e,r,h,f);var m=c(e.marker.symbol),y=o.isBubble(e);f("marker.line.width",m||y?1:0),function(t,e,r,n){var a,i,o=e.dimensions,s=o.length,l=e.showupperhalf,c=e.showlowerhalf,u=e.diagonal.visible,h=new Array(s),f=new Array(s);for(a=0;a<s;a++){var p=a?a+1:"";h[a]="x"+p,f[a]="y"+p}var d=n("xaxes",h),g=n("yaxes",f),v=e._diag=new Array(s);e._xaxes={},e._yaxes={};var m=[],y=[];function x(t,n,a,i){if(t){var o=t.charAt(0),s=r._splomAxes[o];if(e["_"+o+"axes"][t]=1,i.push(t),!(t in s)){var l=s[t]={};a&&(l.label=a.label||"",a.visible&&a.axis&&(a.axis.type&&(l.type=a.axis.type),a.axis.matches&&(l.matches=n)))}}}var b=!u&&!c,_=!u&&!l;for(e._axesDim={},a=0;a<s;a++){var w=o[a],k=0===a,T=a===s-1,M=k&&b||T&&_?void 0:d[a],A=k&&_||T&&b?void 0:g[a];x(M,A,w,m),x(A,M,w,y),v[a]=[M,A],e._axesDim[M]=a,e._axesDim[A]=a}for(a=0;a<m.length;a++)for(i=0;i<y.length;i++){var S=m[a]+y[i];a>i&&l?r._splomSubplots[S]=1:a<i&&c?r._splomSubplots[S]=1:a!==i||!u&&c&&l||(r._splomSubplots[S]=1)}(!c||!u&&l&&c)&&(r._splomGridDflt.xside="bottom",r._splomGridDflt.yside="left")}(0,e,h,f),n.coerceSelectionMarkerOpacity(e,f)}else e.visible=!1}},{"../../lib":717,"../../plots/array_container_defaults":761,"../parcoords/merge_length":1091,"../scatter/marker_defaults":1139,"../scatter/subtypes":1144,"../scattergl/helpers":1178,"./attributes":1215}],1219:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/colorscale_calc"),i=t("../scattergl/convert").markerStyle;e.exports=function(t,e){var r=e.trace,o=t._fullLayout._splomScenes[r.uid];if(o){a(t,r),n.extendFlat(o.matrixOptions,i(r));var s=n.extendFlat({},o.matrixOptions,o.viewOpts);o.matrix.update(s,null)}}},{"../../lib":717,"../scatter/colorscale_calc":1123,"../scattergl/convert":1174}],1220:[function(t,e,r){"use strict";r.getDimIndex=function(t,e){for(var r=e._id,n={x:0,y:1}[r.charAt(0)],a=t._visibleDims,i=0;i<a.length;i++){var o=a[i];if(t._diag[o][n]===r)return i}return!1}},{}],1221:[function(t,e,r){"use strict";var n=t("./helpers"),a=t("../scattergl/hover").calcHover;e.exports={hoverPoints:function(t,e,r){var i=t.cd[0].trace,o=t.scene.matrixOptions.cdata,s=t.xa,l=t.ya,c=s.c2p(e),u=l.c2p(r),h=t.distance,f=n.getDimIndex(i,s),p=n.getDimIndex(i,l);if(!1===f||!1===p)return[t];for(var d,g,v=o[f],m=o[p],y=h,x=0;x<v.length;x++){var b=v[x],_=m[x],w=s.c2p(b)-c,k=l.c2p(_)-u,T=Math.sqrt(w*w+k*k);T<y&&(y=g=T,d=x)}return t.index=d,t.distance=y,t.dxy=g,void 0===d?[t]:[a(t,v,m,i)]}}},{"../scattergl/hover":1179,"./helpers":1220}],1222:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../components/grid");e.exports={moduleType:"trace",name:"splom",basePlotModule:t("./base_plot"),categories:["gl","regl","cartesian","symbols","showLegend","scatter-like"],attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:t("../scatter/marker_colorbar"),calc:t("./calc"),plot:t("./plot"),hoverPoints:t("./hover").hoverPoints,selectPoints:t("./select"),editStyle:t("./edit_style"),meta:{}},n.register(a)},{"../../components/grid":634,"../../registry":846,"../scatter/marker_colorbar":1138,"./attributes":1215,"./base_plot":1216,"./calc":1217,"./defaults":1218,"./edit_style":1219,"./hover":1221,"./plot":1223,"./select":1225}],1223:[function(t,e,r){"use strict";var n=t("regl-splom"),a=t("../../lib"),i=t("../../plots/cartesian/axis_ids");function o(t,e){var r,o,s,l,c,u=t._fullLayout,h=u._size,f=e.trace,p=e.t,d=u._splomScenes[f.uid],g=d.matrixOptions,v=g.cdata,m=u._glcanvas.data()[0].regl,y=u.dragmode;if(0!==v.length){g.lower=f.showupperhalf,g.upper=f.showlowerhalf,g.diagonal=f.diagonal.visible;var x=f._visibleDims,b=v.length,_=d.viewOpts={};for(_.ranges=new Array(b),_.domains=new Array(b),c=0;c<x.length;c++){s=x[c];var w=_.ranges[c]=new Array(4),k=_.domains[c]=new Array(4);(r=i.getFromId(t,f._diag[s][0]))&&(w[0]=r._rl[0],w[2]=r._rl[1],k[0]=r.domain[0],k[2]=r.domain[1]),(o=i.getFromId(t,f._diag[s][1]))&&(w[1]=o._rl[0],w[3]=o._rl[1],k[1]=o.domain[0],k[3]=o.domain[1])}_.viewport=[h.l,h.b,h.w+h.l,h.h+h.b],!0===d.matrix&&(d.matrix=n(m));var T=u.clickmode.indexOf("select")>-1,M=!0;if("lasso"===y||"select"===y||!!f.selectedpoints||T){var A=f._length;if(f.selectedpoints){d.selectBatch=f.selectedpoints;var S=f.selectedpoints,E={};for(s=0;s<S.length;s++)E[S[s]]=!0;var L=[];for(s=0;s<A;s++)E[s]||L.push(s);d.unselectBatch=L}var C=p.xpx=new Array(b),P=p.ypx=new Array(b);for(c=0;c<x.length;c++){if(s=x[c],r=i.getFromId(t,f._diag[s][0]))for(C[c]=new Array(A),l=0;l<A;l++)C[c][l]=r.c2p(v[c][l]);if(o=i.getFromId(t,f._diag[s][1]))for(P[c]=new Array(A),l=0;l<A;l++)P[c][l]=o.c2p(v[c][l])}if(d.selectBatch.length||d.unselectBatch.length){var O=a.extendFlat({},g,d.unselectedOptions,_),z=a.extendFlat({},g,d.selectedOptions,_);d.matrix.update(O,z),M=!1}}else p.xpx=p.ypx=null;if(M){var I=a.extendFlat({},g,_);d.matrix.update(I,null)}}}e.exports=function(t,e,r){if(r.length)for(var n=0;n<r.length;n++)o(t,r[n][0])}},{"../../lib":717,"../../plots/cartesian/axis_ids":768,"regl-splom":499}],1224:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){var r=t._fullLayout,a=e.uid,i=r._splomScenes;i||(i=r._splomScenes={});var o={dirty:!0,selectBatch:[],unselectBatch:[]},s=i[e.uid];return s||((s=i[a]=n.extendFlat({},o,{matrix:!1,selectBatch:[],unselectBatch:[]})).draw=function(){s.matrix&&s.matrix.draw&&(s.selectBatch.length||s.unselectBatch.length?s.matrix.draw(s.unselectBatch,s.selectBatch):s.matrix.draw()),s.dirty=!1},s.destroy=function(){s.matrix&&s.matrix.destroy&&s.matrix.destroy(),s.matrixOptions=null,s.selectBatch=null,s.unselectBatch=null,s=null}),s.dirty||n.extendFlat(s,o),s}},{"../../lib":717}],1225:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../scatter/subtypes"),i=t("./helpers");e.exports=function(t,e){var r=t.cd,o=r[0].trace,s=r[0].t,l=t.scene,c=l.matrixOptions.cdata,u=t.xaxis,h=t.yaxis,f=[];if(!l)return f;var p=!a.hasMarkers(o)&&!a.hasText(o);if(!0!==o.visible||p)return f;var d=i.getDimIndex(o,u),g=i.getDimIndex(o,h);if(!1===d||!1===g)return f;var v=s.xpx[d],m=s.ypx[g],y=c[d],x=c[g],b=[],_=[];if(!1!==e&&!e.degenerate)for(var w=0;w<y.length;w++)e.contains([v[w],m[w]],null,w,t)?(b.push(w),f.push({pointNumber:w,x:y[w],y:x[w]})):_.push(w);var k=l.matrixOptions;return b.length||_.length?l.selectBatch.length||l.unselectBatch.length||l.matrix.update(l.unselectedOptions,n.extendFlat({},k,l.selectedOptions,l.viewOpts)):l.matrix.update(k,null),l.selectBatch=b,l.unselectBatch=_,f}},{"../../lib":717,"../scatter/subtypes":1144,"./helpers":1220}],1226:[function(t,e,r){"use strict";var n=t("../../components/colorscale/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../mesh3d/attributes"),o=t("../../plots/attributes"),s=t("../../lib/extend").extendFlat,l={x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},z:{valType:"data_array",editType:"calc+clearAxisTypes"},u:{valType:"data_array",editType:"calc"},v:{valType:"data_array",editType:"calc"},w:{valType:"data_array",editType:"calc"},starts:{x:{valType:"data_array",editType:"calc"},y:{valType:"data_array",editType:"calc"},z:{valType:"data_array",editType:"calc"},editType:"calc"},maxdisplayed:{valType:"integer",min:0,dflt:1e3,editType:"calc"},sizeref:{valType:"number",editType:"calc",min:0,dflt:1},text:{valType:"string",dflt:"",editType:"calc"},hovertext:{valType:"string",dflt:"",editType:"calc"},hovertemplate:a({editType:"calc"},{keys:["tubex","tubey","tubez","tubeu","tubev","tubew","norm","divergence"]}),showlegend:s({},o.showlegend,{dflt:!1})};s(l,n("",{colorAttr:"u/v/w norm",showScaleDflt:!0,editTypeOverride:"calc"}));["opacity","lightposition","lighting"].forEach(function(t){l[t]=i[t]}),l.hoverinfo=s({},o.hoverinfo,{editType:"calc",flags:["x","y","z","u","v","w","norm","divergence","text","name"],dflt:"x+y+z+norm+text+name"}),l.transforms=void 0,e.exports=l},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../mesh3d/attributes":1061}],1227:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/colorscale/calc");function i(t){var e,r,a,i,s,l,c,u,h,f,p,d,g=t._x,v=t._y,m=t._z,y=t._len,x=-1/0,b=1/0,_=-1/0,w=1/0,k=-1/0,T=1/0,M="";for(y&&(c=g[0],h=v[0],p=m[0]),y>1&&(u=g[y-1],f=v[y-1],d=m[y-1]),e=0;e<y;e++)x=Math.max(x,g[e]),b=Math.min(b,g[e]),_=Math.max(_,v[e]),w=Math.min(w,v[e]),k=Math.max(k,m[e]),T=Math.min(T,m[e]),i||g[e]===c||(i=!0,M+="x"),s||v[e]===h||(s=!0,M+="y"),l||m[e]===p||(l=!0,M+="z");i||(M+="x"),s||(M+="y"),l||(M+="z");var A=o(t._x),S=o(t._y),E=o(t._z);M=(M=(M=M.replace("x",(c>u?"-":"+")+"x")).replace("y",(h>f?"-":"+")+"y")).replace("z",(p>d?"-":"+")+"z");var L=function(){y=0,A=[],S=[],E=[]};(!y||y<A.length*S.length*E.length)&&L();var C=function(t){return"x"===t?g:"y"===t?v:m},P=function(t){return"x"===t?A:"y"===t?S:E},O=function(t){return t[y-1]<t[0]?-1:1},z=C(M[1]),I=C(M[3]),D=C(M[5]),R=P(M[1]).length,F=P(M[3]).length,B=P(M[5]).length,N=!1,j=function(t,e,r){return R*(F*t+e)+r},V=O(C(M[1])),U=O(C(M[3])),q=O(C(M[5]));for(e=0;e<B-1;e++){for(r=0;r<F-1;r++){for(a=0;a<R-1;a++){var H=j(e,r,a),G=j(e,r,a+1),Y=j(e,r+1,a),W=j(e+1,r,a);if(z[H]*V<z[G]*V&&I[H]*U<I[Y]*U&&D[H]*q<D[W]*q||(N=!0),N)break}if(N)break}if(N)break}return N&&(n.warn("Encountered arbitrary coordinates! Unable to input data grid."),L()),{xMin:b,yMin:w,zMin:T,xMax:x,yMax:_,zMax:k,Xs:A,Ys:S,Zs:E,len:y,fill:M}}function o(t){return n.distinctVals(t).vals}function s(t,e){if(void 0===e&&(e=t.length),n.isTypedArray(t))return t.subarray(0,e);for(var r=[],a=0;a<e;a++)r[a]=+t[a];return r}e.exports={calc:function(t,e){e._len=Math.min(e.u.length,e.v.length,e.w.length,e.x.length,e.y.length,e.z.length),e._u=s(e.u,e._len),e._v=s(e.v,e._len),e._w=s(e.w,e._len),e._x=s(e.x,e._len),e._y=s(e.y,e._len),e._z=s(e.z,e._len);var r=i(e);e._gridFill=r.fill,e._Xs=r.Xs,e._Ys=r.Ys,e._Zs=r.Zs,e._len=r.len;var n,o,l,c=0;e.starts&&(n=s(e.starts.x||[]),o=s(e.starts.y||[]),l=s(e.starts.z||[]),c=Math.min(n.length,o.length,l.length)),e._startsX=n||[],e._startsY=o||[],e._startsZ=l||[];var u,h=0,f=1/0;for(u=0;u<e._len;u++){var p=e._u[u],d=e._v[u],g=e._w[u],v=Math.sqrt(p*p+d*d+g*g);h=Math.max(h,v),f=Math.min(f,v)}for(a(t,e,{vals:[f,h],containerStr:"",cLetter:"c"}),u=0;u<c;u++){var m=n[u];r.xMax=Math.max(r.xMax,m),r.xMin=Math.min(r.xMin,m);var y=o[u];r.yMax=Math.max(r.yMax,y),r.yMin=Math.min(r.yMin,y);var x=l[u];r.zMax=Math.max(r.zMax,x),r.zMin=Math.min(r.zMin,x)}e._slen=c,e._normMax=h,e._xbnds=[r.xMin,r.xMax],e._ybnds=[r.yMin,r.yMax],e._zbnds=[r.zMin,r.zMax]},filter:s,processGrid:i}},{"../../components/colorscale/calc":599,"../../lib":717}],1228:[function(t,e,r){"use strict";var n=t("gl-streamtube3d"),a=n.createTubeMesh,i=t("../../lib"),o=t("../../lib/gl_format_color").parseColorScale,s=t("../../components/colorscale").extractOpts,l=t("../../plots/gl3d/zip3"),c={xaxis:0,yaxis:1,zaxis:2};function u(t,e){this.scene=t,this.uid=e,this.mesh=null,this.data=null}var h=u.prototype;function f(t){var e=t.length;return e>2?t.slice(1,e-1):2===e?[(t[0]+t[1])/2]:t}function p(t){var e=t.length;return 1===e?[.5,.5]:[t[1]-t[0],t[e-1]-t[e-2]]}function d(t,e){var r=t.fullSceneLayout,a=t.dataScale,u=e._len,h={};function d(t,e){var n=r[e],o=a[c[e]];return i.simpleMap(t,function(t){return n.d2l(t)*o})}if(h.vectors=l(d(e._u,"xaxis"),d(e._v,"yaxis"),d(e._w,"zaxis"),u),!u)return{positions:[],cells:[]};var g=d(e._Xs,"xaxis"),v=d(e._Ys,"yaxis"),m=d(e._Zs,"zaxis");if(h.meshgrid=[g,v,m],h.gridFill=e._gridFill,e._slen)h.startingPositions=l(d(e._startsX,"xaxis"),d(e._startsY,"yaxis"),d(e._startsZ,"zaxis"));else{for(var y=v[0],x=f(g),b=f(m),_=new Array(x.length*b.length),w=0,k=0;k<x.length;k++)for(var T=0;T<b.length;T++)_[w++]=[x[k],y,b[T]];h.startingPositions=_}h.colormap=o(e),h.tubeSize=e.sizeref,h.maxLength=e.maxdisplayed;var M=d(e._xbnds,"xaxis"),A=d(e._ybnds,"yaxis"),S=d(e._zbnds,"zaxis"),E=p(g),L=p(v),C=p(m),P=[[M[0]-E[0],A[0]-L[0],S[0]-C[0]],[M[1]+E[1],A[1]+L[1],S[1]+C[1]]],O=n(h,P),z=s(e);O.vertexIntensityBounds=[z.min/e._normMax,z.max/e._normMax];var I=e.lightposition;return O.lightPosition=[I.x,I.y,I.z],O.ambient=e.lighting.ambient,O.diffuse=e.lighting.diffuse,O.specular=e.lighting.specular,O.roughness=e.lighting.roughness,O.fresnel=e.lighting.fresnel,O.opacity=e.opacity,e._pad=O.tubeScale*e.sizeref*2,O}h.handlePick=function(t){var e=this.scene.fullSceneLayout,r=this.scene.dataScale;function n(t,n){var a=e[n],i=r[c[n]];return a.l2c(t)/i}if(t.object===this.mesh){var a=t.data.position,i=t.data.velocity;return t.traceCoordinate=[n(a[0],"xaxis"),n(a[1],"yaxis"),n(a[2],"zaxis"),n(i[0],"xaxis"),n(i[1],"yaxis"),n(i[2],"zaxis"),t.data.intensity*this.data._normMax,t.data.divergence],t.textLabel=this.data.hovertext||this.data.text,!0}},h.update=function(t){this.data=t;var e=d(this.scene,t);this.mesh.update(e)},h.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var r=t.glplot.gl,n=d(t,e),i=a(r,n),o=new u(t,e.uid);return o.mesh=i,o.data=e,i._trace=o,t.glplot.add(i),o}},{"../../components/colorscale":603,"../../lib":717,"../../lib/gl_format_color":714,"../../plots/gl3d/zip3":816,"gl-streamtube3d":315}],1229:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/colorscale/defaults"),i=t("./attributes");e.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}var l=s("u"),c=s("v"),u=s("w"),h=s("x"),f=s("y"),p=s("z");l&&l.length&&c&&c.length&&u&&u.length&&h&&h.length&&f&&f.length&&p&&p.length?(s("starts.x"),s("starts.y"),s("starts.z"),s("maxdisplayed"),s("sizeref"),s("lighting.ambient"),s("lighting.diffuse"),s("lighting.specular"),s("lighting.roughness"),s("lighting.fresnel"),s("lightposition.x"),s("lightposition.y"),s("lightposition.z"),a(t,e,o,s,{prefix:"",cLetter:"c"}),s("text"),s("hovertext"),s("hovertemplate"),e._length=null):e.visible=!1}},{"../../components/colorscale/defaults":601,"../../lib":717,"./attributes":1226}],1230:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"streamtube",basePlotModule:t("../../plots/gl3d"),categories:["gl3d","showLegend"],attributes:t("./attributes"),supplyDefaults:t("./defaults"),colorbar:{min:"cmin",max:"cmax"},calc:t("./calc").calc,plot:t("./convert"),eventData:function(t,e){return t.tubex=t.x,t.tubey=t.y,t.tubez=t.z,t.tubeu=e.traceCoordinate[3],t.tubev=e.traceCoordinate[4],t.tubew=e.traceCoordinate[5],t.norm=e.traceCoordinate[6],t.divergence=e.traceCoordinate[7],delete t.x,delete t.y,delete t.z,t},meta:{}}},{"../../plots/gl3d":805,"./attributes":1226,"./calc":1227,"./convert":1228,"./defaults":1229}],1231:[function(t,e,r){"use strict";var n=t("../../plots/attributes"),a=t("../../plots/template_attributes").hovertemplateAttrs,i=t("../../plots/template_attributes").texttemplateAttrs,o=t("../../components/colorscale/attributes"),s=t("../../plots/domain").attributes,l=t("../pie/attributes"),c=t("./constants"),u=t("../../lib/extend").extendFlat;e.exports={labels:{valType:"data_array",editType:"calc"},parents:{valType:"data_array",editType:"calc"},values:{valType:"data_array",editType:"calc"},branchvalues:{valType:"enumerated",values:["remainder","total"],dflt:"remainder",editType:"calc"},count:{valType:"flaglist",flags:["branches","leaves"],dflt:"leaves",editType:"calc"},level:{valType:"any",editType:"plot",anim:!0},maxdepth:{valType:"integer",editType:"plot",dflt:-1},marker:u({colors:{valType:"data_array",editType:"calc"},line:{color:u({},l.marker.line.color,{dflt:null}),width:u({},l.marker.line.width,{dflt:1}),editType:"calc"},editType:"calc"},o("marker",{colorAttr:"colors",anim:!1})),leaf:{opacity:{valType:"number",editType:"style",min:0,max:1},editType:"plot"},text:l.text,textinfo:{valType:"flaglist",flags:["label","text","value","current path","percent root","percent entry","percent parent"],extras:["none"],editType:"plot"},texttemplate:i({editType:"plot"},{keys:c.eventDataKeys.concat(["label","value"])}),hovertext:l.hovertext,hoverinfo:u({},n.hoverinfo,{flags:["label","text","value","name","current path","percent root","percent entry","percent parent"],dflt:"label+text+value+name"}),hovertemplate:a({},{keys:c.eventDataKeys}),textfont:l.textfont,insidetextorientation:l.insidetextorientation,insidetextfont:l.insidetextfont,outsidetextfont:u({},l.outsidetextfont,{}),domain:s({name:"sunburst",trace:!0,editType:"calc"})}},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/domain":790,"../../plots/template_attributes":841,"../pie/attributes":1094,"./constants":1234}],1232:[function(t,e,r){"use strict";var n=t("../../plots/plots");r.name="sunburst",r.plot=function(t,e,a,i){n.plotBasePlot(r.name,t,e,a,i)},r.clean=function(t,e,a,i){n.cleanBasePlot(r.name,t,e,a,i)}},{"../../plots/plots":826}],1233:[function(t,e,r){"use strict";var n=t("d3-hierarchy"),a=t("fast-isnumeric"),i=t("../../lib"),o=t("../../components/colorscale").makeColorScaleFuncFromTrace,s=t("../pie/calc").makePullColorFn,l=t("../pie/calc").generateExtendedColors,c=t("../../components/colorscale").calc,u=t("../../constants/numerical").ALMOST_EQUAL,h={},f={};r.calc=function(t,e){var r,l,h,f,p,d,g=t._fullLayout,v=e.ids,m=i.isArrayOrTypedArray(v),y=e.labels,x=e.parents,b=e.values,_=i.isArrayOrTypedArray(b),w=[],k={},T={},M=function(t){return t||"number"==typeof t},A=function(t){return!_||a(b[t])&&b[t]>=0};m?(r=Math.min(v.length,x.length),l=function(t){return M(v[t])&&A(t)},h=function(t){return String(v[t])}):(r=Math.min(y.length,x.length),l=function(t){return M(y[t])&&A(t)},h=function(t){return String(y[t])}),_&&(r=Math.min(r,b.length));for(var S=0;S<r;S++)if(l(S)){var E=h(S),L=M(x[S])?String(x[S]):"",C={i:S,id:E,pid:L,label:M(y[S])?String(y[S]):""};_&&(C.v=+b[S]),w.push(C),p=E,k[f=L]?k[f].push(p):k[f]=[p],T[p]=1}if(k[""]){if(k[""].length>1){for(var P=i.randstr(),O=0;O<w.length;O++)""===w[O].pid&&(w[O].pid=P);w.unshift({hasMultipleRoots:!0,id:P,pid:"",label:""})}}else{var z,I=[];for(z in k)T[z]||I.push(z);if(1!==I.length)return i.warn("Multiple implied roots, cannot build "+e.type+" hierarchy.");z=I[0],w.unshift({hasImpliedRoot:!0,id:z,pid:"",label:z})}try{d=n.stratify().id(function(t){return t.id}).parentId(function(t){return t.pid})(w)}catch(t){return i.warn("Failed to build "+e.type+" hierarchy. Error: "+t.message)}var D=n.hierarchy(d),R=!1;if(_)switch(e.branchvalues){case"remainder":D.sum(function(t){return t.data.v});break;case"total":D.each(function(t){var e=t.data.data,r=e.v;if(t.children){var n=t.children.reduce(function(t,e){return t+e.data.data.v},0);if((e.hasImpliedRoot||e.hasMultipleRoots)&&(r=n),r<n*u)return R=!0,i.warn(["Total value for node",t.data.data.id,"is smaller than the sum of its children.","\nparent value =",r,"\nchildren sum =",n].join(" "))}t.value=r})}else!function t(e,r,n){var a=0;var i=e.children;if(i){for(var o=i.length,s=0;s<o;s++)a+=t(i[s],r,n);n.branches&&a++}else n.leaves&&a++;e.value=e.data.data.value=a;r._values||(r._values=[]);r._values[e.data.data.i]=a;return a}(D,e,{branches:-1!==e.count.indexOf("branches"),leaves:-1!==e.count.indexOf("leaves")});if(!R){var F,B;D.sort(function(t,e){return e.value-t.value});var N=e.marker.colors||[],j=!!N.length;return e._hasColorscale?(j||(N=_?e.values:e._values),c(t,e,{vals:N,containerStr:"marker",cLetter:"c"}),B=o(e.marker)):F=s(g["_"+e.type+"colormap"]),D.each(function(t){var r=t.data.data;r.color=e._hasColorscale?B(N[r.i]):F(N[r.i],r.id)}),w[0].hierarchy=D,w}},r._runCrossTraceCalc=function(t,e){var r=e._fullLayout,n=e.calcdata,a=r[t+"colorway"],i=r["_"+t+"colormap"];r["extend"+t+"colors"]&&(a=l(a,"treemap"===t?f:h));var o=0;function s(t){var e=t.data.data,r=e.id;!1===e.color&&(i[r]?e.color=i[r]:t.parent?t.parent.parent?e.color=t.parent.data.data.color:(i[r]=e.color=a[o%a.length],o++):e.color="rgba(0,0,0,0)")}for(var c=0;c<n.length;c++){var u=n[c][0];u.trace.type===t&&u.hierarchy&&u.hierarchy.each(s)}},r.crossTraceCalc=function(t){return r._runCrossTraceCalc("sunburst",t)}},{"../../components/colorscale":603,"../../constants/numerical":693,"../../lib":717,"../pie/calc":1096,"d3-hierarchy":159,"fast-isnumeric":228}],1234:[function(t,e,r){"use strict";e.exports={CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:"linear",eventDataKeys:["currentPath","root","entry","percentRoot","percentEntry","percentParent"]}},{}],1235:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("../../plots/domain").defaults,o=t("../bar/defaults").handleText,s=t("../../components/colorscale"),l=s.hasColorscale,c=s.handleDefaults;e.exports=function(t,e,r,s){function u(r,i){return n.coerce(t,e,a,r,i)}var h=u("labels"),f=u("parents");if(h&&h.length&&f&&f.length){var p=u("values");p&&p.length?u("branchvalues"):u("count"),u("level"),u("maxdepth"),u("marker.line.width")&&u("marker.line.color",s.paper_bgcolor),u("marker.colors");var d=e._hasColorscale=l(t,"marker","colors")||(t.marker||{}).coloraxis;d&&c(t,e,s,u,{prefix:"marker.",cLetter:"c"}),u("leaf.opacity",d?1:.7);var g=u("text");u("texttemplate"),e.texttemplate||u("textinfo",Array.isArray(g)?"text+label":"label"),u("hovertext"),u("hovertemplate");o(t,e,s,u,"auto",{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),u("insidetextorientation"),i(e,s,u),e._length=null}else e.visible=!1}},{"../../components/colorscale":603,"../../lib":717,"../../plots/domain":790,"../bar/defaults":860,"./attributes":1231}],1236:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../registry"),i=t("../../components/fx/helpers").appendArrayPointValue,o=t("../../components/fx"),s=t("../../lib"),l=t("../../lib/events"),c=t("./helpers"),u=t("../pie/helpers").formatPieValue;function h(t,e,r){for(var n=t.data.data,a={curveNumber:e.index,pointNumber:n.i,data:e._input,fullData:e},o=0;o<r.length;o++){var s=r[o];s in t&&(a[s]=t[s])}return"parentString"in t&&!c.isHierarchyRoot(t)&&(a.parent=t.parentString),i(a,e,n.i),a}e.exports=function(t,e,r,i,f){var p=i[0],d=p.trace,g=p.hierarchy,v="sunburst"===d.type,m="treemap"===d.type;"_hasHoverLabel"in d||(d._hasHoverLabel=!1),"_hasHoverEvent"in d||(d._hasHoverEvent=!1);t.on("mouseover",function(a){var i=r._fullLayout;if(!r._dragging&&!1!==i.hovermode){var l=r._fullData[d.index],y=a.data.data,x=y.i,b=c.isHierarchyRoot(a),_=c.getParent(g,a),w=c.getValue(a),k=function(t){return s.castOption(l,x,t)},T=k("hovertemplate"),M=o.castHoverinfo(l,i,x),A=i.separators;if(T||M&&"none"!==M&&"skip"!==M){var S,E;v&&(S=p.cx+a.pxmid[0]*(1-a.rInscribed),E=p.cy+a.pxmid[1]*(1-a.rInscribed)),m&&(S=a._hoverX,E=a._hoverY);var L,C={},P=[],O=[],z=function(t){return-1!==P.indexOf(t)};M&&(P="all"===M?l._module.attributes.hoverinfo.flags:M.split("+")),C.label=y.label,z("label")&&C.label&&O.push(C.label),y.hasOwnProperty("v")&&(C.value=y.v,C.valueLabel=u(C.value,A),z("value")&&O.push(C.valueLabel)),C.currentPath=a.currentPath=c.getPath(a.data),z("current path")&&!b&&O.push(C.currentPath);var I=[],D=function(){-1===I.indexOf(L)&&(O.push(L),I.push(L))};C.percentParent=a.percentParent=w/c.getValue(_),C.parent=a.parentString=c.getPtLabel(_),z("percent parent")&&(L=c.formatPercent(C.percentParent,A)+" of "+C.parent,D()),C.percentEntry=a.percentEntry=w/c.getValue(e),C.entry=a.entry=c.getPtLabel(e),!z("percent entry")||b||a.onPathbar||(L=c.formatPercent(C.percentEntry,A)+" of "+C.entry,D()),C.percentRoot=a.percentRoot=w/c.getValue(g),C.root=a.root=c.getPtLabel(g),z("percent root")&&!b&&(L=c.formatPercent(C.percentRoot,A)+" of "+C.root,D()),C.text=k("hovertext")||k("text"),z("text")&&(L=C.text,s.isValidTextValue(L)&&O.push(L));var R={trace:l,y:E,text:O.join("<br>"),name:T||z("name")?l.name:void 0,color:k("hoverlabel.bgcolor")||y.color,borderColor:k("hoverlabel.bordercolor"),fontFamily:k("hoverlabel.font.family"),fontSize:k("hoverlabel.font.size"),fontColor:k("hoverlabel.font.color"),nameLength:k("hoverlabel.namelength"),textAlign:k("hoverlabel.align"),hovertemplate:T,hovertemplateLabels:C,eventData:[h(a,l,f.eventDataKeys)]};v&&(R.x0=S-a.rInscribed*a.rpx1,R.x1=S+a.rInscribed*a.rpx1,R.idealAlign=a.pxmid[0]<0?"left":"right"),m&&(R.x=S,R.idealAlign=S<0?"left":"right"),o.loneHover(R,{container:i._hoverlayer.node(),outerContainer:i._paper.node(),gd:r}),d._hasHoverLabel=!0}if(m){var F=t.select("path.surface");f.styleOne(F,a,l,{hovered:!0})}d._hasHoverEvent=!0,r.emit("plotly_hover",{points:[h(a,l,f.eventDataKeys)],event:n.event})}}),t.on("mouseout",function(e){var a=r._fullLayout,i=r._fullData[d.index],s=n.select(this).datum();if(d._hasHoverEvent&&(e.originalEvent=n.event,r.emit("plotly_unhover",{points:[h(s,i,f.eventDataKeys)],event:n.event}),d._hasHoverEvent=!1),d._hasHoverLabel&&(o.loneUnhover(a._hoverlayer.node()),d._hasHoverLabel=!1),m){var l=t.select("path.surface");f.styleOne(l,s,i,{hovered:!1})}}),t.on("click",function(t){var e=r._fullLayout,i=r._fullData[d.index],s=v&&(c.isHierarchyRoot(t)||c.isLeaf(t)),u=c.getPtId(t),p=c.isEntry(t)?c.findEntryWithChild(g,u):c.findEntryWithLevel(g,u),m=c.getPtId(p),y={points:[h(t,i,f.eventDataKeys)],event:n.event};s||(y.nextLevel=m);var x=l.triggerHandler(r,"plotly_"+d.type+"click",y);if(!1!==x&&e.hovermode&&(r._hoverdata=[h(t,i,f.eventDataKeys)],o.click(r,n.event)),!s&&!1!==x&&!r._dragging&&!r._transitioning){a.call("_storeDirectGUIEdit",i,e._tracePreGUI[i.uid],{level:i.level});var b={data:[{level:m}],traces:[d.index]},_={frame:{redraw:!1,duration:f.transitionTime},transition:{duration:f.transitionTime,easing:f.transitionEasing},mode:"immediate",fromcurrent:!0};o.loneUnhover(e._hoverlayer.node()),a.call("animate",r,b,_)}})}},{"../../components/fx":630,"../../components/fx/helpers":626,"../../lib":717,"../../lib/events":707,"../../registry":846,"../pie/helpers":1099,"./helpers":1237,d3:165}],1237:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/color"),i=t("../../lib/setcursor"),o=t("../pie/helpers");function s(t){return t.data.data.pid}r.findEntryWithLevel=function(t,e){var n;return e&&t.eachAfter(function(t){if(r.getPtId(t)===e)return n=t.copy()}),n||t},r.findEntryWithChild=function(t,e){var n;return t.eachAfter(function(t){for(var a=t.children||[],i=0;i<a.length;i++){var o=a[i];if(r.getPtId(o)===e)return n=t.copy()}}),n||t},r.isEntry=function(t){return!t.parent},r.isLeaf=function(t){return!t.children},r.getPtId=function(t){return t.data.data.id},r.getPtLabel=function(t){return t.data.data.label},r.getValue=function(t){return t.value},r.isHierarchyRoot=function(t){return""===s(t)},r.setSliceCursor=function(t,e,n){var a=n.isTransitioning;if(!a){var o=t.datum();a=n.hideOnRoot&&r.isHierarchyRoot(o)||n.hideOnLeaves&&r.isLeaf(o)}i(t,a?null:"pointer")},r.getInsideTextFontKey=function(t,e,r,a,i){var o=(i||{}).onPathbar?"pathbar.textfont":"insidetextfont",s=r.data.data.i;return n.castOption(e,s,o+"."+t)||n.castOption(e,s,"textfont."+t)||a.size},r.getOutsideTextFontKey=function(t,e,r,a){var i=r.data.data.i;return n.castOption(e,i,"outsidetextfont."+t)||n.castOption(e,i,"textfont."+t)||a.size},r.isOutsideText=function(t,e){return!t._hasColorscale&&r.isHierarchyRoot(e)},r.determineTextFont=function(t,e,i,o){return r.isOutsideText(t,e)?function(t,e,n){return{color:r.getOutsideTextFontKey("color",t,e,n),family:r.getOutsideTextFontKey("family",t,e,n),size:r.getOutsideTextFontKey("size",t,e,n)}}(t,e,i):function(t,e,i,o){var s=(o||{}).onPathbar,l=e.data.data,c=l.i,u=n.castOption(t,c,(s?"pathbar.textfont":"insidetextfont")+".color");return!u&&t._input.textfont&&(u=n.castOption(t._input,c,"textfont.color")),{color:u||a.contrast(l.color),family:r.getInsideTextFontKey("family",t,e,i,o),size:r.getInsideTextFontKey("size",t,e,i,o)}}(t,e,i,o)},r.hasTransition=function(t){return!!(t&&t.duration>0)},r.getMaxDepth=function(t){return t.maxdepth>=0?t.maxdepth:1/0},r.isHeader=function(t,e){return!(r.isLeaf(t)||t.depth===e._maxDepth-1)},r.getParent=function(t,e){return r.findEntryWithLevel(t,s(e))},r.listPath=function(t,e){var n=t.parent;if(!n)return[];var a=e?[n.data[e]]:[n];return r.listPath(n,e).concat(a)},r.getPath=function(t){return r.listPath(t,"label").join("/")+"/"},r.formatValue=o.formatPieValue,r.formatPercent=function(t,e){var r=n.formatPercent(t,0);return"0%"===r&&(r=o.formatPiePercent(t,e)),r}},{"../../components/color":591,"../../lib":717,"../../lib/setcursor":737,"../pie/helpers":1099}],1238:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"sunburst",basePlotModule:t("./base_plot"),categories:[],animatable:!0,attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults"),supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc").calc,crossTraceCalc:t("./calc").crossTraceCalc,plot:t("./plot").plot,style:t("./style").style,colorbar:t("../scatter/marker_colorbar"),meta:{}}},{"../scatter/marker_colorbar":1138,"./attributes":1231,"./base_plot":1232,"./calc":1233,"./defaults":1235,"./layout_attributes":1239,"./layout_defaults":1240,"./plot":1241,"./style":1242}],1239:[function(t,e,r){"use strict";e.exports={sunburstcolorway:{valType:"colorlist",editType:"calc"},extendsunburstcolors:{valType:"boolean",dflt:!0,editType:"calc"}}},{}],1240:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e){function r(r,i){return n.coerce(t,e,a,r,i)}r("sunburstcolorway",e.colorway),r("extendsunburstcolors")}},{"../../lib":717,"./layout_attributes":1239}],1241:[function(t,e,r){"use strict";var n=t("d3"),a=t("d3-hierarchy"),i=t("../../components/drawing"),o=t("../../lib"),s=t("../../lib/svg_text_utils"),l=t("../bar/uniform_text"),c=l.recordMinTextSize,u=l.clearMinTextSize,h=t("../pie/plot"),f=h.computeTransform,p=h.transformInsideText,d=t("./style").styleOne,g=t("../bar/style").resizeText,v=t("./fx"),m=t("./constants"),y=t("./helpers");function x(t,e,l,u){var h=t._fullLayout,g=!h.uniformtext.mode&&y.hasTransition(u),x=n.select(l).selectAll("g.slice"),_=e[0],w=_.trace,k=_.hierarchy,T=y.findEntryWithLevel(k,w.level),M=y.getMaxDepth(w),A=h._size,S=w.domain,E=A.w*(S.x[1]-S.x[0]),L=A.h*(S.y[1]-S.y[0]),C=.5*Math.min(E,L),P=_.cx=A.l+A.w*(S.x[1]+S.x[0])/2,O=_.cy=A.t+A.h*(1-S.y[0])-L/2;if(!T)return x.remove();var z=null,I={};g&&x.each(function(t){I[y.getPtId(t)]={rpx0:t.rpx0,rpx1:t.rpx1,x0:t.x0,x1:t.x1,transform:t.transform},!z&&y.isEntry(t)&&(z=t)});var D=function(t){return a.partition().size([2*Math.PI,t.height+1])(t)}(T).descendants(),R=T.height+1,F=0,B=M;_.hasMultipleRoots&&y.isHierarchyRoot(T)&&(D=D.slice(1),R-=1,F=1,B+=1),D=D.filter(function(t){return t.y1<=B});var N=Math.min(R,M),j=function(t){return(t-F)/N*C},V=function(t,e){return[t*Math.cos(e),-t*Math.sin(e)]},U=function(t){return o.pathAnnulus(t.rpx0,t.rpx1,t.x0,t.x1,P,O)},q=function(t){return P+b(t)[0]*(t.transform.rCenter||0)+(t.transform.x||0)},H=function(t){return O+b(t)[1]*(t.transform.rCenter||0)+(t.transform.y||0)};(x=x.data(D,y.getPtId)).enter().append("g").classed("slice",!0),g?x.exit().transition().each(function(){var t=n.select(this);t.select("path.surface").transition().attrTween("d",function(t){var e=function(t){var e,r=y.getPtId(t),a=I[r],i=I[y.getPtId(T)];if(i){var o=t.x1>i.x1?2*Math.PI:0;e=t.rpx1<i.rpx1?{rpx0:0,rpx1:0}:{x0:o,x1:o}}else{var s,l=y.getPtId(t.parent);x.each(function(t){if(y.getPtId(t)===l)return s=t});var c,u=s.children;u.forEach(function(t,e){if(y.getPtId(t)===r)return c=e});var h=u.length,f=n.interpolate(s.x0,s.x1);e={rpx0:C,rpx1:C,x0:f(c/h),x1:f((c+1)/h)}}return n.interpolate(a,e)}(t);return function(t){return U(e(t))}}),t.select("g.slicetext").attr("opacity",0)}).remove():x.exit().remove(),x.order();var G=null;if(g&&z){var Y=y.getPtId(z);x.each(function(t){null===G&&y.getPtId(t)===Y&&(G=t.x1)})}var W=x;function X(t){var e=t.parent,r=I[y.getPtId(e)],a={};if(r){var i=e.children,o=i.indexOf(t),s=i.length,l=n.interpolate(r.x0,r.x1);a.x0=l(o/s),a.x1=l(o/s)}else a.x0=a.x1=0;return a}g&&(W=W.transition().each("end",function(){var e=n.select(this);y.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!0,isTransitioning:!1})})),W.each(function(a){var l=n.select(this),u=o.ensureSingle(l,"path","surface",function(t){t.style("pointer-events","all")});a.rpx0=j(a.y0),a.rpx1=j(a.y1),a.xmid=(a.x0+a.x1)/2,a.pxmid=V(a.rpx1,a.xmid),a.midangle=-(a.xmid-Math.PI/2),a.startangle=-(a.x0-Math.PI/2),a.stopangle=-(a.x1-Math.PI/2),a.halfangle=.5*Math.min(o.angleDelta(a.x0,a.x1)||Math.PI,Math.PI),a.ring=1-a.rpx0/a.rpx1,a.rInscribed=function(t){return 0===t.rpx0&&o.isFullCircle([t.x0,t.x1])?1:Math.max(0,Math.min(1/(1+1/Math.sin(t.halfangle)),t.ring/2))}(a),g?u.transition().attrTween("d",function(t){var e=function(t){var e,r=I[y.getPtId(t)],a={x0:t.x0,x1:t.x1,rpx0:t.rpx0,rpx1:t.rpx1};if(r)e=r;else if(z)if(t.parent)if(G){var i=t.x1>G?2*Math.PI:0;e={x0:i,x1:i}}else e={rpx0:C,rpx1:C},o.extendFlat(e,X(t));else e={rpx0:0,rpx1:0};else e={x0:0,x1:0};return n.interpolate(e,a)}(t);return function(t){return U(e(t))}}):u.attr("d",U),l.call(v,T,t,e,{eventDataKeys:m.eventDataKeys,transitionTime:m.CLICK_TRANSITION_TIME,transitionEasing:m.CLICK_TRANSITION_EASING}).call(y.setSliceCursor,t,{hideOnRoot:!0,hideOnLeaves:!0,isTransitioning:t._transitioning}),u.call(d,a,w);var x=o.ensureSingle(l,"g","slicetext"),b=o.ensureSingle(x,"text","",function(t){t.attr("data-notex",1)}),k=o.ensureUniformFontSize(t,y.determineTextFont(w,a,h.font));b.text(r.formatSliceLabel(a,T,w,e,h)).classed("slicetext",!0).attr("text-anchor","middle").call(i.font,k).call(s.convertToTspans,t);var M=i.bBox(b.node());a.transform=p(M,a,_),a.transform.targetX=q(a),a.transform.targetY=H(a);var A=function(t,e){var r=t.transform;return f(r,e),r.fontSize=k.size,c(w.type,r,h),o.getTextTransform(r)};g?b.transition().attrTween("transform",function(t){var e=function(t){var e,r=I[y.getPtId(t)],a=t.transform;if(r)e=r;else if(e={rpx1:t.rpx1,transform:{textPosAngle:a.textPosAngle,scale:0,rotate:a.rotate,rCenter:a.rCenter,x:a.x,y:a.y}},z)if(t.parent)if(G){var i=t.x1>G?2*Math.PI:0;e.x0=e.x1=i}else o.extendFlat(e,X(t));else e.x0=e.x1=0;else e.x0=e.x1=0;var s=n.interpolate(e.transform.textPosAngle,t.transform.textPosAngle),l=n.interpolate(e.rpx1,t.rpx1),u=n.interpolate(e.x0,t.x0),f=n.interpolate(e.x1,t.x1),p=n.interpolate(e.transform.scale,a.scale),d=n.interpolate(e.transform.rotate,a.rotate),g=0===a.rCenter?3:0===e.transform.rCenter?1/3:1,v=n.interpolate(e.transform.rCenter,a.rCenter);return function(t){var e=l(t),r=u(t),n=f(t),i=function(t){return v(Math.pow(t,g))}(t),o=V(e,(r+n)/2),m=s(t),y={pxmid:o,rpx1:e,transform:{textPosAngle:m,rCenter:i,x:a.x,y:a.y}};return c(w.type,a,h),{transform:{targetX:q(y),targetY:H(y),scale:p(t),rotate:d(t),rCenter:i}}}}(t);return function(t){return A(e(t),M)}}):b.attr("transform",A(a,M))})}function b(t){return e=t.rpx1,r=t.transform.textPosAngle,[e*Math.sin(r),-e*Math.cos(r)];var e,r}r.plot=function(t,e,r,a){var i,o,s=t._fullLayout,l=s._sunburstlayer,c=!r,h=!s.uniformtext.mode&&y.hasTransition(r);(u("sunburst",s),(i=l.selectAll("g.trace.sunburst").data(e,function(t){return t[0].trace.uid})).enter().append("g").classed("trace",!0).classed("sunburst",!0).attr("stroke-linejoin","round"),i.order(),h)?(a&&(o=a()),n.transition().duration(r.duration).ease(r.easing).each("end",function(){o&&o()}).each("interrupt",function(){o&&o()}).each(function(){l.selectAll("g.trace").each(function(e){x(t,e,this,r)})})):(i.each(function(e){x(t,e,this,r)}),s.uniformtext.mode&&g(t,s._sunburstlayer.selectAll(".trace"),"sunburst"));c&&i.exit().remove()},r.formatSliceLabel=function(t,e,r,n,a){var i=r.texttemplate,s=r.textinfo;if(!(i||s&&"none"!==s))return"";var l=a.separators,c=n[0],u=t.data.data,h=c.hierarchy,f=y.isHierarchyRoot(t),p=y.getParent(h,t),d=y.getValue(t);if(!i){var g,v=s.split("+"),m=function(t){return-1!==v.indexOf(t)},x=[];if(m("label")&&u.label&&x.push(u.label),u.hasOwnProperty("v")&&m("value")&&x.push(y.formatValue(u.v,l)),!f){m("current path")&&x.push(y.getPath(t.data));var b=0;m("percent parent")&&b++,m("percent entry")&&b++,m("percent root")&&b++;var _=b>1;if(b){var w,k=function(t){g=y.formatPercent(w,l),_&&(g+=" of "+t),x.push(g)};m("percent parent")&&!f&&(w=d/y.getValue(p),k("parent")),m("percent entry")&&(w=d/y.getValue(e),k("entry")),m("percent root")&&(w=d/y.getValue(h),k("root"))}}return m("text")&&(g=o.castOption(r,u.i,"text"),o.isValidTextValue(g)&&x.push(g)),x.join("<br>")}var T=o.castOption(r,u.i,"texttemplate");if(!T)return"";var M={};u.label&&(M.label=u.label),u.hasOwnProperty("v")&&(M.value=u.v,M.valueLabel=y.formatValue(u.v,l)),M.currentPath=y.getPath(t.data),f||(M.percentParent=d/y.getValue(p),M.percentParentLabel=y.formatPercent(M.percentParent,l),M.parent=y.getPtLabel(p)),M.percentEntry=d/y.getValue(e),M.percentEntryLabel=y.formatPercent(M.percentEntry,l),M.entry=y.getPtLabel(e),M.percentRoot=d/y.getValue(h),M.percentRootLabel=y.formatPercent(M.percentRoot,l),M.root=y.getPtLabel(h),u.hasOwnProperty("color")&&(M.color=u.color);var A=o.castOption(r,u.i,"text");return(o.isValidTextValue(A)||""===A)&&(M.text=A),M.customdata=o.castOption(r,u.i,"customdata"),o.texttemplateString(T,M,a._d3locale,M,r._meta||{})}},{"../../components/drawing":612,"../../lib":717,"../../lib/svg_text_utils":741,"../bar/style":870,"../bar/uniform_text":872,"../pie/plot":1103,"./constants":1234,"./fx":1236,"./helpers":1237,"./style":1242,d3:165,"d3-hierarchy":159}],1242:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/color"),i=t("../../lib"),o=t("../bar/uniform_text").resizeText;function s(t,e,r){var n=e.data.data,o=!e.children,s=n.i,l=i.castOption(r,s,"marker.line.color")||a.defaultLine,c=i.castOption(r,s,"marker.line.width")||0;t.style("stroke-width",c).call(a.fill,n.color).call(a.stroke,l).style("opacity",o?r.leaf.opacity:null)}e.exports={style:function(t){var e=t._fullLayout._sunburstlayer.selectAll(".trace");o(t,e,"sunburst"),e.each(function(t){var e=n.select(this),r=t[0].trace;e.style("opacity",r.opacity),e.selectAll("path.surface").each(function(t){n.select(this).call(s,t,r)})})},styleOne:s}},{"../../components/color":591,"../../lib":717,"../bar/uniform_text":872,d3:165}],1243:[function(t,e,r){"use strict";var n=t("../../components/color"),a=t("../../components/colorscale/attributes"),i=t("../../plots/template_attributes").hovertemplateAttrs,o=t("../../plots/attributes"),s=t("../../lib/extend").extendFlat,l=t("../../plot_api/edit_types").overrideAll;function c(t){return{show:{valType:"boolean",dflt:!1},start:{valType:"number",dflt:null,editType:"plot"},end:{valType:"number",dflt:null,editType:"plot"},size:{valType:"number",dflt:null,min:0,editType:"plot"},project:{x:{valType:"boolean",dflt:!1},y:{valType:"boolean",dflt:!1},z:{valType:"boolean",dflt:!1}},color:{valType:"color",dflt:n.defaultLine},usecolormap:{valType:"boolean",dflt:!1},width:{valType:"number",min:1,max:16,dflt:2},highlight:{valType:"boolean",dflt:!0},highlightcolor:{valType:"color",dflt:n.defaultLine},highlightwidth:{valType:"number",min:1,max:16,dflt:2}}}var u=e.exports=l(s({z:{valType:"data_array"},x:{valType:"data_array"},y:{valType:"data_array"},text:{valType:"string",dflt:"",arrayOk:!0},hovertext:{valType:"string",dflt:"",arrayOk:!0},hovertemplate:i(),connectgaps:{valType:"boolean",dflt:!1,editType:"calc"},surfacecolor:{valType:"data_array"}},a("",{colorAttr:"z or surfacecolor",showScaleDflt:!0,autoColorDflt:!1,editTypeOverride:"calc"}),{contours:{x:c(),y:c(),z:c()},hidesurface:{valType:"boolean",dflt:!1},lightposition:{x:{valType:"number",min:-1e5,max:1e5,dflt:10},y:{valType:"number",min:-1e5,max:1e5,dflt:1e4},z:{valType:"number",min:-1e5,max:1e5,dflt:0}},lighting:{ambient:{valType:"number",min:0,max:1,dflt:.8},diffuse:{valType:"number",min:0,max:1,dflt:.8},specular:{valType:"number",min:0,max:2,dflt:.05},roughness:{valType:"number",min:0,max:1,dflt:.5},fresnel:{valType:"number",min:0,max:5,dflt:.2}},opacity:{valType:"number",min:0,max:1,dflt:1},opacityscale:{valType:"any",editType:"calc"},_deprecated:{zauto:s({},a.zauto,{}),zmin:s({},a.zmin,{}),zmax:s({},a.zmax,{})},hoverinfo:s({},o.hoverinfo),showlegend:s({},o.showlegend,{dflt:!1})}),"calc","nested");u.x.editType=u.y.editType=u.z.editType="calc+clearAxisTypes",u.transforms=void 0},{"../../components/color":591,"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/attributes":762,"../../plots/template_attributes":841}],1244:[function(t,e,r){"use strict";var n=t("../../components/colorscale/calc");e.exports=function(t,e){e.surfacecolor?n(t,e,{vals:e.surfacecolor,containerStr:"",cLetter:"c"}):n(t,e,{vals:e.z,containerStr:"",cLetter:"c"})}},{"../../components/colorscale/calc":599}],1245:[function(t,e,r){"use strict";var n=t("gl-surface3d"),a=t("ndarray"),i=t("ndarray-homography"),o=t("ndarray-fill"),s=t("../../lib").isArrayOrTypedArray,l=t("../../lib/gl_format_color").parseColorScale,c=t("../../lib/str2rgbarray"),u=t("../../components/colorscale").extractOpts,h=t("../heatmap/interp2d"),f=t("../heatmap/find_empties");function p(t,e,r){this.scene=t,this.uid=r,this.surface=e,this.data=null,this.showContour=[!1,!1,!1],this.contourStart=[null,null,null],this.contourEnd=[null,null,null],this.contourSize=[0,0,0],this.minValues=[1/0,1/0,1/0],this.maxValues=[-1/0,-1/0,-1/0],this.dataScaleX=1,this.dataScaleY=1,this.refineData=!0,this.objectOffset=[0,0,0]}var d=p.prototype;d.getXat=function(t,e,r,n){var a=s(this.data.x)?s(this.data.x[0])?this.data.x[e][t]:this.data.x[t]:t;return void 0===r?a:n.d2l(a,0,r)},d.getYat=function(t,e,r,n){var a=s(this.data.y)?s(this.data.y[0])?this.data.y[e][t]:this.data.y[e]:e;return void 0===r?a:n.d2l(a,0,r)},d.getZat=function(t,e,r,n){var a=this.data.z[e][t];return null===a&&this.data.connectgaps&&this.data._interpolatedZ&&(a=this.data._interpolatedZ[e][t]),void 0===r?a:n.d2l(a,0,r)},d.handlePick=function(t){if(t.object===this.surface){var e=(t.data.index[0]-1)/this.dataScaleX-1,r=(t.data.index[1]-1)/this.dataScaleY-1,n=Math.max(Math.min(Math.round(e),this.data.z[0].length-1),0),a=Math.max(Math.min(Math.round(r),this.data._ylength-1),0);t.index=[n,a],t.traceCoordinate=[this.getXat(n,a),this.getYat(n,a),this.getZat(n,a)],t.dataCoordinate=[this.getXat(n,a,this.data.xcalendar,this.scene.fullSceneLayout.xaxis),this.getYat(n,a,this.data.ycalendar,this.scene.fullSceneLayout.yaxis),this.getZat(n,a,this.data.zcalendar,this.scene.fullSceneLayout.zaxis)];for(var i=0;i<3;i++){var o=t.dataCoordinate[i];null!=o&&(t.dataCoordinate[i]*=this.scene.dataScale[i])}var s=this.data.hovertext||this.data.text;return Array.isArray(s)&&s[a]&&void 0!==s[a][n]?t.textLabel=s[a][n]:t.textLabel=s||"",t.data.dataCoordinate=t.dataCoordinate.slice(),this.surface.highlight(t.data),this.scene.glplot.spikes.position=t.dataCoordinate,!0}};var g=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999];function v(t,e){if(t<e)return 0;for(var r=0;0===Math.floor(t%e);)t/=e,r++;return r}function m(t){for(var e=[],r=0;r<g.length;r++){var n=g[r];e.push(v(t,n))}return e}function y(t){for(var e=m(t),r=t,n=0;n<g.length;n++)if(e[n]>0){r=g[n];break}return r}function x(t,e){if(!(t<1||e<1)){for(var r=m(t),n=m(e),a=1,i=0;i<g.length;i++)a*=Math.pow(g[i],Math.max(r[i],n[i]));return a}}d.calcXnums=function(t){var e,r=[];for(e=1;e<t;e++){var n=this.getXat(e-1,0),a=this.getXat(e,0);r[e-1]=a!==n&&null!=n&&null!=a?Math.abs(a-n):0}var i=0;for(e=1;e<t;e++)i+=r[e-1];for(e=1;e<t;e++)0===r[e-1]?r[e-1]=1:r[e-1]=Math.round(i/r[e-1]);return r},d.calcYnums=function(t){var e,r=[];for(e=1;e<t;e++){var n=this.getYat(0,e-1),a=this.getYat(0,e);r[e-1]=a!==n&&null!=n&&null!=a?Math.abs(a-n):0}var i=0;for(e=1;e<t;e++)i+=r[e-1];for(e=1;e<t;e++)0===r[e-1]?r[e-1]=1:r[e-1]=Math.round(i/r[e-1]);return r};var b=[1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260],_=b[9],w=b[13];function k(t,e){for(var r=!1,n=0;n<t.length;n++)if(e===t[n]){r=!0;break}!1===r&&t.push(e)}d.estimateScale=function(t,e){for(var r=1+function(t){if(0!==t.length){for(var e=1,r=0;r<t.length;r++)e=x(e,t[r]);return e}}(0===e?this.calcXnums(t):this.calcYnums(t));r<_;)r*=2;for(;r>w;)r--,r/=y(r),++r<_&&(r=w);var n=Math.round(r/t);return n>1?n:1},d.refineCoords=function(t){for(var e=this.dataScaleX,r=this.dataScaleY,n=t[0].shape[0],o=t[0].shape[1],s=0|Math.floor(t[0].shape[0]*e+1),l=0|Math.floor(t[0].shape[1]*r+1),c=1+n+1,u=1+o+1,h=a(new Float32Array(c*u),[c,u]),f=0;f<t.length;++f){this.surface.padField(h,t[f]);var p=a(new Float32Array(s*l),[s,l]);i(p,h,[e,0,0,0,r,0,0,0,1]),t[f]=p}},d.setContourLevels=function(){var t,e,r,n=[[],[],[]],a=[!1,!1,!1],i=!1;for(t=0;t<3;++t)if(this.showContour[t]&&(i=!0,this.contourSize[t]>0&&null!==this.contourStart[t]&&null!==this.contourEnd[t]&&this.contourEnd[t]>this.contourStart[t]))for(a[t]=!0,e=this.contourStart[t];e<this.contourEnd[t];e+=this.contourSize[t])r=e*this.scene.dataScale[t],k(n[t],r);if(i){var o=[[],[],[]];for(t=0;t<3;++t)this.showContour[t]&&(o[t]=a[t]?n[t]:this.scene.contourLevels[t]);this.surface.update({levels:o})}},d.update=function(t){var e,r,n,i,s=this.scene,p=s.fullSceneLayout,d=this.surface,g=t.opacity,v=l(t,g),m=s.dataScale,y=t.z[0].length,x=t._ylength,b=s.contourLevels;this.data=t;var _=[];for(e=0;e<3;e++)for(_[e]=[],r=0;r<y;r++)_[e][r]=[];for(r=0;r<y;r++)for(n=0;n<x;n++)_[0][r][n]=this.getXat(r,n,t.xcalendar,p.xaxis),_[1][r][n]=this.getYat(r,n,t.ycalendar,p.yaxis),_[2][r][n]=this.getZat(r,n,t.zcalendar,p.zaxis);if(t.connectgaps)for(t._emptypoints=f(_[2]),h(_[2],t._emptypoints),t._interpolatedZ=[],r=0;r<y;r++)for(t._interpolatedZ[r]=[],n=0;n<x;n++)t._interpolatedZ[r][n]=_[2][r][n];for(e=0;e<3;e++)for(r=0;r<y;r++)for(n=0;n<x;n++)null==(i=_[e][r][n])?_[e][r][n]=NaN:i=_[e][r][n]*=m[e];for(e=0;e<3;e++)for(r=0;r<y;r++)for(n=0;n<x;n++)null!=(i=_[e][r][n])&&(this.minValues[e]>i&&(this.minValues[e]=i),this.maxValues[e]<i&&(this.maxValues[e]=i));for(e=0;e<3;e++)this.objectOffset[e]=.5*(this.minValues[e]+this.maxValues[e]);for(e=0;e<3;e++)for(r=0;r<y;r++)for(n=0;n<x;n++)null!=(i=_[e][r][n])&&(_[e][r][n]-=this.objectOffset[e]);var k=[a(new Float32Array(y*x),[y,x]),a(new Float32Array(y*x),[y,x]),a(new Float32Array(y*x),[y,x])];o(k[0],function(t,e){return _[0][t][e]}),o(k[1],function(t,e){return _[1][t][e]}),o(k[2],function(t,e){return _[2][t][e]}),_=[];var T={colormap:v,levels:[[],[],[]],showContour:[!0,!0,!0],showSurface:!t.hidesurface,contourProject:[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],contourWidth:[1,1,1],contourColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],contourTint:[1,1,1],dynamicColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],dynamicWidth:[1,1,1],dynamicTint:[1,1,1],opacityscale:t.opacityscale,opacity:t.opacity},M=u(t);if(T.intensityBounds=[M.min,M.max],t.surfacecolor){var A=a(new Float32Array(y*x),[y,x]);o(A,function(e,r){return t.surfacecolor[r][e]}),k.push(A)}else T.intensityBounds[0]*=m[2],T.intensityBounds[1]*=m[2];(w<k[0].shape[0]||w<k[0].shape[1])&&(this.refineData=!1),!0===this.refineData&&(this.dataScaleX=this.estimateScale(k[0].shape[0],0),this.dataScaleY=this.estimateScale(k[0].shape[1],1),1===this.dataScaleX&&1===this.dataScaleY||this.refineCoords(k)),t.surfacecolor&&(T.intensity=k.pop());var S=[!0,!0,!0],E=["x","y","z"];for(e=0;e<3;++e){var L=t.contours[E[e]];S[e]=L.highlight,T.showContour[e]=L.show||L.highlight,T.showContour[e]&&(T.contourProject[e]=[L.project.x,L.project.y,L.project.z],L.show?(this.showContour[e]=!0,T.levels[e]=b[e],d.highlightColor[e]=T.contourColor[e]=c(L.color),L.usecolormap?d.highlightTint[e]=T.contourTint[e]=0:d.highlightTint[e]=T.contourTint[e]=1,T.contourWidth[e]=L.width,this.contourStart[e]=L.start,this.contourEnd[e]=L.end,this.contourSize[e]=L.size):(this.showContour[e]=!1,this.contourStart[e]=null,this.contourEnd[e]=null,this.contourSize[e]=0),L.highlight&&(T.dynamicColor[e]=c(L.highlightcolor),T.dynamicWidth[e]=L.highlightwidth))}(function(t){var e=t[0].rgb,r=t[t.length-1].rgb;return e[0]===r[0]&&e[1]===r[1]&&e[2]===r[2]&&e[3]===r[3]})(v)&&(T.vertexColor=!0),T.objectOffset=this.objectOffset,T.coords=k,d.update(T),d.visible=t.visible,d.enableDynamic=S,d.enableHighlight=S,d.snapToData=!0,"lighting"in t&&(d.ambientLight=t.lighting.ambient,d.diffuseLight=t.lighting.diffuse,d.specularLight=t.lighting.specular,d.roughness=t.lighting.roughness,d.fresnel=t.lighting.fresnel),"lightposition"in t&&(d.lightPosition=[t.lightposition.x,t.lightposition.y,t.lightposition.z]),g&&g<1&&(d.supportsTransparency=!0)},d.dispose=function(){this.scene.glplot.remove(this.surface),this.surface.dispose()},e.exports=function(t,e){var r=t.glplot.gl,a=n({gl:r}),i=new p(t,a,e.uid);return a._trace=i,i.update(e),t.glplot.add(a),i}},{"../../components/colorscale":603,"../../lib":717,"../../lib/gl_format_color":714,"../../lib/str2rgbarray":740,"../heatmap/find_empties":1006,"../heatmap/interp2d":1009,"gl-surface3d":318,ndarray:451,"ndarray-fill":441,"ndarray-homography":443}],1246:[function(t,e,r){"use strict";var n=t("../../registry"),a=t("../../lib"),i=t("../../components/colorscale/defaults"),o=t("./attributes"),s=.1;function l(t,e,r,n){var a=n("opacityscale");"max"===a?e.opacityscale=[[0,s],[1,1]]:"min"===a?e.opacityscale=[[0,1],[1,s]]:"extremes"===a?e.opacityscale=function(t,e){for(var r=[],n=0;n<32;n++){var a=n/31,i=e+(1-e)*(1-Math.pow(Math.sin(t*a*Math.PI),2));r.push([a,Math.max(1,Math.min(0,i))])}return r}(1,s):function(t){var e=0;if(!Array.isArray(t)||t.length<2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!=+t[0][0]||1!=+t[t.length-1][0])return!1;for(var r=0;r<t.length;r++){var n=t[r];if(2!==n.length||+n[0]<e)return!1;e=+n[0]}return!0}(a)||(e.opacityscale=void 0)}function c(t,e,r){e in t&&!(r in t)&&(t[r]=t[e])}e.exports={supplyDefaults:function(t,e,r,s){var u,h;function f(r,n){return a.coerce(t,e,o,r,n)}var p=f("x"),d=f("y"),g=f("z");if(!g||!g.length||p&&p.length<1||d&&d.length<1)e.visible=!1;else{e._xlength=Array.isArray(p)&&a.isArrayOrTypedArray(p[0])?g.length:g[0].length,e._ylength=g.length,n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y","z"],s),f("text"),f("hovertext"),f("hovertemplate"),["lighting.ambient","lighting.diffuse","lighting.specular","lighting.roughness","lighting.fresnel","lightposition.x","lightposition.y","lightposition.z","hidesurface","connectgaps","opacity"].forEach(function(t){f(t)});var v=f("surfacecolor"),m=["x","y","z"];for(u=0;u<3;++u){var y="contours."+m[u],x=f(y+".show"),b=f(y+".highlight");if(x||b)for(h=0;h<3;++h)f(y+".project."+m[h]);x&&(f(y+".color"),f(y+".width"),f(y+".usecolormap")),b&&(f(y+".highlightcolor"),f(y+".highlightwidth")),f(y+".start"),f(y+".end"),f(y+".size")}v||(c(t,"zmin","cmin"),c(t,"zmax","cmax"),c(t,"zauto","cauto")),i(t,e,s,f,{prefix:"",cLetter:"c"}),l(0,e,0,f),e._length=null}},opacityscaleDefaults:l}},{"../../components/colorscale/defaults":601,"../../lib":717,"../../registry":846,"./attributes":1243}],1247:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults").supplyDefaults,colorbar:{min:"cmin",max:"cmax"},calc:t("./calc"),plot:t("./convert"),moduleType:"trace",name:"surface",basePlotModule:t("../../plots/gl3d"),categories:["gl3d","2dMap","showLegend"],meta:{}}},{"../../plots/gl3d":805,"./attributes":1243,"./calc":1244,"./convert":1245,"./defaults":1246}],1248:[function(t,e,r){"use strict";var n=t("../../components/annotations/attributes"),a=t("../../lib/extend").extendFlat,i=t("../../plot_api/edit_types").overrideAll,o=t("../../plots/font_attributes"),s=t("../../plots/domain").attributes;t("../../constants/docs").FORMAT_LINK;(e.exports=i({domain:s({name:"table",trace:!0}),columnwidth:{valType:"number",arrayOk:!0,dflt:null},columnorder:{valType:"data_array"},header:{values:{valType:"data_array",dflt:[]},format:{valType:"data_array",dflt:[]},prefix:{valType:"string",arrayOk:!0,dflt:null},suffix:{valType:"string",arrayOk:!0,dflt:null},height:{valType:"number",dflt:28},align:a({},n.align,{arrayOk:!0}),line:{width:{valType:"number",arrayOk:!0,dflt:1},color:{valType:"color",arrayOk:!0,dflt:"grey"}},fill:{color:{valType:"color",arrayOk:!0,dflt:"white"}},font:a({},o({arrayOk:!0}))},cells:{values:{valType:"data_array",dflt:[]},format:{valType:"data_array",dflt:[]},prefix:{valType:"string",arrayOk:!0,dflt:null},suffix:{valType:"string",arrayOk:!0,dflt:null},height:{valType:"number",dflt:20},align:a({},n.align,{arrayOk:!0}),line:{width:{valType:"number",arrayOk:!0,dflt:1},color:{valType:"color",arrayOk:!0,dflt:"grey"}},fill:{color:{valType:"color",arrayOk:!0,dflt:"white"}},font:a({},o({arrayOk:!0}))}},"calc","from-root")).transforms=void 0},{"../../components/annotations/attributes":574,"../../constants/docs":688,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/domain":790,"../../plots/font_attributes":791}],1249:[function(t,e,r){"use strict";var n=t("../../plots/get_data").getModuleCalcData,a=t("./plot");r.name="table",r.plot=function(t){var e=n(t.calcdata,"table")[0];e.length&&a(t,e)},r.clean=function(t,e,r,n){var a=n._has&&n._has("table"),i=e._has&&e._has("table");a&&!i&&n._paperdiv.selectAll(".table").remove()}},{"../../plots/get_data":800,"./plot":1256}],1250:[function(t,e,r){"use strict";var n=t("../../lib/gup").wrap;e.exports=function(){return n({})}},{"../../lib/gup":715}],1251:[function(t,e,r){"use strict";e.exports={cellPad:8,columnExtentOffset:10,columnTitleOffset:28,emptyHeaderHeight:16,latexCheck:/^\$.*\$$/,goldenRatio:1.618,lineBreaker:"<br>",maxDimensionCount:60,overdrag:45,releaseTransitionDuration:120,releaseTransitionEase:"cubic-out",scrollbarCaptureWidth:18,scrollbarHideDelay:1e3,scrollbarHideDuration:1e3,scrollbarOffset:5,scrollbarWidth:8,transitionDuration:100,transitionEase:"cubic-out",uplift:5,wrapSpacer:" ",wrapSplitCharacter:" ",cn:{table:"table",tableControlView:"table-control-view",scrollBackground:"scroll-background",yColumn:"y-column",columnBlock:"column-block",scrollAreaClip:"scroll-area-clip",scrollAreaClipRect:"scroll-area-clip-rect",columnBoundary:"column-boundary",columnBoundaryClippath:"column-boundary-clippath",columnBoundaryRect:"column-boundary-rect",columnCells:"column-cells",columnCell:"column-cell",cellRect:"cell-rect",cellText:"cell-text",cellTextHolder:"cell-text-holder",scrollbarKit:"scrollbar-kit",scrollbar:"scrollbar",scrollbarSlider:"scrollbar-slider",scrollbarGlyph:"scrollbar-glyph",scrollbarCaptureZone:"scrollbar-capture-zone"}}},{}],1252:[function(t,e,r){"use strict";var n=t("./constants"),a=t("../../lib/extend").extendFlat,i=t("fast-isnumeric");function o(t){if(Array.isArray(t)){for(var e=0,r=0;r<t.length;r++)e=Math.max(e,o(t[r]));return e}return t}function s(t,e){return t+e}function l(t){var e,r=t.slice(),n=1/0,a=0;for(e=0;e<r.length;e++)Array.isArray(r[e])||(r[e]=[r[e]]),n=Math.min(n,r[e].length),a=Math.max(a,r[e].length);if(n!==a)for(e=0;e<r.length;e++){var i=a-r[e].length;i&&(r[e]=r[e].concat(c(i)))}return r}function c(t){for(var e=new Array(t),r=0;r<t;r++)e[r]="";return e}function u(t){return t.calcdata.columns.reduce(function(e,r){return r.xIndex<t.xIndex?e+r.columnWidth:e},0)}function h(t,e){return Object.keys(t).map(function(r){return a({},t[r],{auxiliaryBlocks:e})})}function f(t,e){for(var r,n={},a=0,i=0,o={firstRowIndex:null,lastRowIndex:null,rows:[]},s=0,l=0,c=0;c<t.length;c++)r=t[c],o.rows.push({rowIndex:c,rowHeight:r}),((i+=r)>=e||c===t.length-1)&&(n[a]=o,o.key=l++,o.firstRowIndex=s,o.lastRowIndex=c,o={firstRowIndex:null,lastRowIndex:null,rows:[]},a+=i,s=c+1,i=0);return n}e.exports=function(t,e){var r=l(e.cells.values),p=function(t){return t.slice(e.header.values.length,t.length)},d=l(e.header.values);d.length&&!d[0].length&&(d[0]=[""],d=l(d));var g=d.concat(p(r).map(function(){return c((d[0]||[""]).length)})),v=e.domain,m=Math.floor(t._fullLayout._size.w*(v.x[1]-v.x[0])),y=Math.floor(t._fullLayout._size.h*(v.y[1]-v.y[0])),x=e.header.values.length?g[0].map(function(){return e.header.height}):[n.emptyHeaderHeight],b=r.length?r[0].map(function(){return e.cells.height}):[],_=x.reduce(s,0),w=f(b,y-_+n.uplift),k=h(f(x,_),[]),T=h(w,k),M={},A=e._fullInput.columnorder.concat(p(r.map(function(t,e){return e}))),S=g.map(function(t,r){var n=Array.isArray(e.columnwidth)?e.columnwidth[Math.min(r,e.columnwidth.length-1)]:e.columnwidth;return i(n)?Number(n):1}),E=S.reduce(s,0);S=S.map(function(t){return t/E*m});var L=Math.max(o(e.header.line.width),o(e.cells.line.width)),C={key:e.uid+t._context.staticPlot,translateX:v.x[0]*t._fullLayout._size.w,translateY:t._fullLayout._size.h*(1-v.y[1]),size:t._fullLayout._size,width:m,maxLineWidth:L,height:y,columnOrder:A,groupHeight:y,rowBlocks:T,headerRowBlocks:k,scrollY:0,cells:a({},e.cells,{values:r}),headerCells:a({},e.header,{values:g}),gdColumns:g.map(function(t){return t[0]}),gdColumnsOriginalOrder:g.map(function(t){return t[0]}),prevPages:[0,0],scrollbarState:{scrollbarScrollInProgress:!1},columns:g.map(function(t,e){var r=M[t];return M[t]=(r||0)+1,{key:t+"__"+M[t],label:t,specIndex:e,xIndex:A[e],xScale:u,x:void 0,calcdata:void 0,columnWidth:S[e]}})};return C.columns.forEach(function(t){t.calcdata=C,t.x=u(t)}),C}},{"../../lib/extend":708,"./constants":1251,"fast-isnumeric":228}],1253:[function(t,e,r){"use strict";var n=t("../../lib/extend").extendFlat;r.splitToPanels=function(t){var e=[0,0],r=n({},t,{key:"header",type:"header",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!0,values:t.calcdata.headerCells.values[t.specIndex],rowBlocks:t.calcdata.headerRowBlocks,calcdata:n({},t.calcdata,{cells:t.calcdata.headerCells})});return[n({},t,{key:"cells1",type:"cells",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),n({},t,{key:"cells2",type:"cells",page:1,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),r]},r.splitToCells=function(t){var e=function(t){var e=t.rowBlocks[t.page],r=e?e.rows[0].rowIndex:0,n=e?r+e.rows.length:0;return[r,n]}(t);return(t.values||[]).slice(e[0],e[1]).map(function(r,n){return{keyWithinBlock:n+("string"==typeof r&&r.match(/[<$&> ]/)?"_keybuster_"+Math.random():""),key:e[0]+n,column:t,calcdata:t.calcdata,page:t.page,rowBlocks:t.rowBlocks,value:r}})}},{"../../lib/extend":708}],1254:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("../../plots/domain").defaults;e.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}i(e,o,s),s("columnwidth"),s("header.values"),s("header.format"),s("header.align"),s("header.prefix"),s("header.suffix"),s("header.height"),s("header.line.width"),s("header.line.color"),s("header.fill.color"),n.coerceFont(s,"header.font",n.extendFlat({},o.font)),function(t,e){for(var r=t.columnorder||[],n=t.header.values.length,a=r.slice(0,n),i=a.slice().sort(function(t,e){return t-e}),o=a.map(function(t){return i.indexOf(t)}),s=o.length;s<n;s++)o.push(s);e("columnorder",o)}(e,s),s("cells.values"),s("cells.format"),s("cells.align"),s("cells.prefix"),s("cells.suffix"),s("cells.height"),s("cells.line.width"),s("cells.line.color"),s("cells.fill.color"),n.coerceFont(s,"cells.font",n.extendFlat({},o.font)),e._length=null}},{"../../lib":717,"../../plots/domain":790,"./attributes":1248}],1255:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("./calc"),plot:t("./plot"),moduleType:"trace",name:"table",basePlotModule:t("./base_plot"),categories:["noOpacity"],meta:{}}},{"./attributes":1248,"./base_plot":1249,"./calc":1250,"./defaults":1254,"./plot":1256}],1256:[function(t,e,r){"use strict";var n=t("./constants"),a=t("d3"),i=t("../../lib/gup"),o=t("../../components/drawing"),s=t("../../lib/svg_text_utils"),l=t("../../lib").raiseToTop,c=t("../../lib").cancelTransition,u=t("./data_preparation_helper"),h=t("./data_split_helpers"),f=t("../../components/color");function p(t){return Math.ceil(t.calcdata.maxLineWidth/2)}function d(t,e){return"clip"+t._fullLayout._uid+"_scrollAreaBottomClip_"+e.key}function g(t,e){return"clip"+t._fullLayout._uid+"_columnBoundaryClippath_"+e.calcdata.key+"_"+e.specIndex}function v(t){return[].concat.apply([],t.map(function(t){return t})).map(function(t){return t.__data__})}function m(t,e,r){var o=t.selectAll("."+n.cn.scrollbarKit).data(i.repeat,i.keyFun);o.enter().append("g").classed(n.cn.scrollbarKit,!0).style("shape-rendering","geometricPrecision"),o.each(function(t){var e=t.scrollbarState;e.totalHeight=function(t){var e=t.rowBlocks;return z(e,e.length-1)+(e.length?I(e[e.length-1],1/0):1)}(t),e.scrollableAreaHeight=t.groupHeight-M(t),e.currentlyVisibleHeight=Math.min(e.totalHeight,e.scrollableAreaHeight),e.ratio=e.currentlyVisibleHeight/e.totalHeight,e.barLength=Math.max(e.ratio*e.currentlyVisibleHeight,n.goldenRatio*n.scrollbarWidth),e.barWiggleRoom=e.currentlyVisibleHeight-e.barLength,e.wiggleRoom=Math.max(0,e.totalHeight-e.scrollableAreaHeight),e.topY=0===e.barWiggleRoom?0:t.scrollY/e.wiggleRoom*e.barWiggleRoom,e.bottomY=e.topY+e.barLength,e.dragMultiplier=e.wiggleRoom/e.barWiggleRoom}).attr("transform",function(t){return"translate("+(t.width+n.scrollbarWidth/2+n.scrollbarOffset)+" "+M(t)+")"});var s=o.selectAll("."+n.cn.scrollbar).data(i.repeat,i.keyFun);s.enter().append("g").classed(n.cn.scrollbar,!0);var l=s.selectAll("."+n.cn.scrollbarSlider).data(i.repeat,i.keyFun);l.enter().append("g").classed(n.cn.scrollbarSlider,!0),l.attr("transform",function(t){return"translate(0 "+(t.scrollbarState.topY||0)+")"});var c=l.selectAll("."+n.cn.scrollbarGlyph).data(i.repeat,i.keyFun);c.enter().append("line").classed(n.cn.scrollbarGlyph,!0).attr("stroke","black").attr("stroke-width",n.scrollbarWidth).attr("stroke-linecap","round").attr("y1",n.scrollbarWidth/2),c.attr("y2",function(t){return t.scrollbarState.barLength-n.scrollbarWidth/2}).attr("stroke-opacity",function(t){return t.columnDragInProgress||!t.scrollbarState.barWiggleRoom||r?0:.4}),c.transition().delay(0).duration(0),c.transition().delay(n.scrollbarHideDelay).duration(n.scrollbarHideDuration).attr("stroke-opacity",0);var u=s.selectAll("."+n.cn.scrollbarCaptureZone).data(i.repeat,i.keyFun);u.enter().append("line").classed(n.cn.scrollbarCaptureZone,!0).attr("stroke","white").attr("stroke-opacity",.01).attr("stroke-width",n.scrollbarCaptureWidth).attr("stroke-linecap","butt").attr("y1",0).on("mousedown",function(r){var n=a.event.y,i=this.getBoundingClientRect(),o=r.scrollbarState,s=n-i.top,l=a.scale.linear().domain([0,o.scrollableAreaHeight]).range([0,o.totalHeight]).clamp(!0);o.topY<=s&&s<=o.bottomY||S(e,t,null,l(s-o.barLength/2))(r)}).call(a.behavior.drag().origin(function(t){return a.event.stopPropagation(),t.scrollbarState.scrollbarScrollInProgress=!0,t}).on("drag",S(e,t)).on("dragend",function(){})),u.attr("y2",function(t){return t.scrollbarState.scrollableAreaHeight}),e._context.staticPlot&&(c.remove(),u.remove())}function y(t,e,r,s){var l=function(t){var e=t.selectAll("."+n.cn.columnCell).data(h.splitToCells,function(t){return t.keyWithinBlock});return e.enter().append("g").classed(n.cn.columnCell,!0),e.exit().remove(),e}(function(t){var e=t.selectAll("."+n.cn.columnCells).data(i.repeat,i.keyFun);return e.enter().append("g").classed(n.cn.columnCells,!0),e.exit().remove(),e}(r));!function(t){t.each(function(t,e){var r=t.calcdata.cells.font,n=t.column.specIndex,a={size:_(r.size,n,e),color:_(r.color,n,e),family:_(r.family,n,e)};t.rowNumber=t.key,t.align=_(t.calcdata.cells.align,n,e),t.cellBorderWidth=_(t.calcdata.cells.line.width,n,e),t.font=a})}(l),function(t){t.attr("width",function(t){return t.column.columnWidth}).attr("stroke-width",function(t){return t.cellBorderWidth}).each(function(t){var e=a.select(this);f.stroke(e,_(t.calcdata.cells.line.color,t.column.specIndex,t.rowNumber)),f.fill(e,_(t.calcdata.cells.fill.color,t.column.specIndex,t.rowNumber))})}(function(t){var e=t.selectAll("."+n.cn.cellRect).data(i.repeat,function(t){return t.keyWithinBlock});return e.enter().append("rect").classed(n.cn.cellRect,!0),e}(l));var c=function(t){var e=t.selectAll("."+n.cn.cellText).data(i.repeat,function(t){return t.keyWithinBlock});return e.enter().append("text").classed(n.cn.cellText,!0).style("cursor",function(){return"auto"}).on("mousedown",function(){a.event.stopPropagation()}),e}(function(t){var e=t.selectAll("."+n.cn.cellTextHolder).data(i.repeat,function(t){return t.keyWithinBlock});return e.enter().append("g").classed(n.cn.cellTextHolder,!0).style("shape-rendering","geometricPrecision"),e}(l));!function(t){t.each(function(t){o.font(a.select(this),t.font)})}(c),x(c,e,s,t),O(l)}function x(t,e,r,i){t.text(function(t){var e=t.column.specIndex,r=t.rowNumber,i=t.value,o="string"==typeof i,s=o&&i.match(/<br>/i),l=!o||s;t.mayHaveMarkup=o&&i.match(/[<&>]/);var c,u="string"==typeof(c=i)&&c.match(n.latexCheck);t.latex=u;var h,f,p=u?"":_(t.calcdata.cells.prefix,e,r)||"",d=u?"":_(t.calcdata.cells.suffix,e,r)||"",g=u?null:_(t.calcdata.cells.format,e,r)||null,v=p+(g?a.format(g)(t.value):t.value)+d;if(t.wrappingNeeded=!t.wrapped&&!l&&!u&&(h=b(v)),t.cellHeightMayIncrease=s||u||t.mayHaveMarkup||(void 0===h?b(v):h),t.needsConvertToTspans=t.mayHaveMarkup||t.wrappingNeeded||t.latex,t.wrappingNeeded){var m=(" "===n.wrapSplitCharacter?v.replace(/<a href=/gi,"<a_href="):v).split(n.wrapSplitCharacter),y=" "===n.wrapSplitCharacter?m.map(function(t){return t.replace(/<a_href=/gi,"<a href=")}):m;t.fragments=y.map(function(t){return{text:t,width:null}}),t.fragments.push({fragment:n.wrapSpacer,width:null}),f=y.join(n.lineBreaker)+n.lineBreaker+n.wrapSpacer}else delete t.fragments,f=v;return f}).attr("dy",function(t){return t.needsConvertToTspans?0:"0.75em"}).each(function(t){var o=a.select(this),l=t.wrappingNeeded?L:C;t.needsConvertToTspans?s.convertToTspans(o,i,l(r,this,e,i,t)):a.select(this.parentNode).attr("transform",function(t){return"translate("+P(t)+" "+n.cellPad+")"}).attr("text-anchor",function(t){return{left:"start",center:"middle",right:"end"}[t.align]})})}function b(t){return-1!==t.indexOf(n.wrapSplitCharacter)}function _(t,e,r){if(Array.isArray(t)){var n=t[Math.min(e,t.length-1)];return Array.isArray(n)?n[Math.min(r,n.length-1)]:n}return t}function w(t,e,r){t.transition().ease(n.releaseTransitionEase).duration(n.releaseTransitionDuration).attr("transform","translate("+e.x+" "+r+")")}function k(t){return"cells"===t.type}function T(t){return"header"===t.type}function M(t){return(t.rowBlocks.length?t.rowBlocks[0].auxiliaryBlocks:[]).reduce(function(t,e){return t+I(e,1/0)},0)}function A(t,e,r){var n=v(e)[0];if(void 0!==n){var a=n.rowBlocks,i=n.calcdata,o=z(a,a.length),s=n.calcdata.groupHeight-M(n),l=i.scrollY=Math.max(0,Math.min(o-s,i.scrollY)),c=function(t,e,r){for(var n=[],a=0,i=0;i<t.length;i++){for(var o=t[i],s=o.rows,l=0,c=0;c<s.length;c++)l+=s[c].rowHeight;o.allRowsHeight=l,e<a+l&&e+r>a&&n.push(i),a+=l}return n}(a,l,s);1===c.length&&(c[0]===a.length-1?c.unshift(c[0]-1):c.push(c[0]+1)),c[0]%2&&c.reverse(),e.each(function(t,e){t.page=c[e],t.scrollY=l}),e.attr("transform",function(t){return"translate(0 "+(z(t.rowBlocks,t.page)-t.scrollY)+")"}),t&&(E(t,r,e,c,n.prevPages,n,0),E(t,r,e,c,n.prevPages,n,1),m(r,t))}}function S(t,e,r,i){return function(o){var s=o.calcdata?o.calcdata:o,l=e.filter(function(t){return s.key===t.key}),c=r||s.scrollbarState.dragMultiplier,u=s.scrollY;s.scrollY=void 0===i?s.scrollY+c*a.event.dy:i;var h=l.selectAll("."+n.cn.yColumn).selectAll("."+n.cn.columnBlock).filter(k);return A(t,h,l),s.scrollY===u}}function E(t,e,r,n,a,i,o){n[o]!==a[o]&&(clearTimeout(i.currentRepaint[o]),i.currentRepaint[o]=setTimeout(function(){var i=r.filter(function(t,e){return e===o&&n[e]!==a[e]});y(t,e,i,r),a[o]=n[o]}))}function L(t,e,r,i){return function(){var o=a.select(e.parentNode);o.each(function(t){var e=t.fragments;o.selectAll("tspan.line").each(function(t,r){e[r].width=this.getComputedTextLength()});var r,a,i=e[e.length-1].width,s=e.slice(0,-1),l=[],c=0,u=t.column.columnWidth-2*n.cellPad;for(t.value="";s.length;)c+(a=(r=s.shift()).width+i)>u&&(t.value+=l.join(n.wrapSpacer)+n.lineBreaker,l=[],c=0),l.push(r.text),c+=a;c&&(t.value+=l.join(n.wrapSpacer)),t.wrapped=!0}),o.selectAll("tspan.line").remove(),x(o.select("."+n.cn.cellText),r,t,i),a.select(e.parentNode.parentNode).call(O)}}function C(t,e,r,i,o){return function(){if(!o.settledY){var s=a.select(e.parentNode),l=R(o),c=o.key-l.firstRowIndex,u=l.rows[c].rowHeight,h=o.cellHeightMayIncrease?e.parentNode.getBoundingClientRect().height+2*n.cellPad:u,f=Math.max(h,u);f-l.rows[c].rowHeight&&(l.rows[c].rowHeight=f,t.selectAll("."+n.cn.columnCell).call(O),A(null,t.filter(k),0),m(r,i,!0)),s.attr("transform",function(){var t=this.parentNode.getBoundingClientRect(),e=a.select(this.parentNode).select("."+n.cn.cellRect).node().getBoundingClientRect(),r=this.transform.baseVal.consolidate(),i=e.top-t.top+(r?r.matrix.f:n.cellPad);return"translate("+P(o,a.select(this.parentNode).select("."+n.cn.cellTextHolder).node().getBoundingClientRect().width)+" "+i+")"}),o.settledY=!0}}}function P(t,e){switch(t.align){case"left":return n.cellPad;case"right":return t.column.columnWidth-(e||0)-n.cellPad;case"center":return(t.column.columnWidth-(e||0))/2;default:return n.cellPad}}function O(t){t.attr("transform",function(t){var e=t.rowBlocks[0].auxiliaryBlocks.reduce(function(t,e){return t+I(e,1/0)},0);return"translate(0 "+(I(R(t),t.key)+e)+")"}).selectAll("."+n.cn.cellRect).attr("height",function(t){return(e=R(t),r=t.key,e.rows[r-e.firstRowIndex]).rowHeight;var e,r})}function z(t,e){for(var r=0,n=e-1;n>=0;n--)r+=D(t[n]);return r}function I(t,e){for(var r=0,n=0;n<t.rows.length&&t.rows[n].rowIndex<e;n++)r+=t.rows[n].rowHeight;return r}function D(t){var e=t.allRowsHeight;if(void 0!==e)return e;for(var r=0,n=0;n<t.rows.length;n++)r+=t.rows[n].rowHeight;return t.allRowsHeight=r,r}function R(t){return t.rowBlocks[t.page]}e.exports=function(t,e){var r=!t._context.staticPlot,s=t._fullLayout._paper.selectAll("."+n.cn.table).data(e.map(function(e){var r=i.unwrap(e).trace;return u(t,r)}),i.keyFun);s.exit().remove(),s.enter().append("g").classed(n.cn.table,!0).attr("overflow","visible").style("box-sizing","content-box").style("position","absolute").style("left",0).style("overflow","visible").style("shape-rendering","crispEdges").style("pointer-events","all"),s.attr("width",function(t){return t.width+t.size.l+t.size.r}).attr("height",function(t){return t.height+t.size.t+t.size.b}).attr("transform",function(t){return"translate("+t.translateX+","+t.translateY+")"});var f=s.selectAll("."+n.cn.tableControlView).data(i.repeat,i.keyFun),x=f.enter().append("g").classed(n.cn.tableControlView,!0).style("box-sizing","content-box");r&&x.on("mousemove",function(e){f.filter(function(t){return e===t}).call(m,t)}).on("mousewheel",function(e){if(!e.scrollbarState.wheeling){e.scrollbarState.wheeling=!0;var r=e.scrollY+a.event.deltaY;S(t,f,null,r)(e)||(a.event.stopPropagation(),a.event.preventDefault()),e.scrollbarState.wheeling=!1}}).call(m,t,!0),f.attr("transform",function(t){return"translate("+t.size.l+" "+t.size.t+")"});var b=f.selectAll("."+n.cn.scrollBackground).data(i.repeat,i.keyFun);b.enter().append("rect").classed(n.cn.scrollBackground,!0).attr("fill","none"),b.attr("width",function(t){return t.width}).attr("height",function(t){return t.height}),f.each(function(e){o.setClipUrl(a.select(this),d(t,e),t)});var _=f.selectAll("."+n.cn.yColumn).data(function(t){return t.columns},i.keyFun);_.enter().append("g").classed(n.cn.yColumn,!0),_.exit().remove(),_.attr("transform",function(t){return"translate("+t.x+" 0)"}),r&&_.call(a.behavior.drag().origin(function(e){return w(a.select(this),e,-n.uplift),l(this),e.calcdata.columnDragInProgress=!0,m(f.filter(function(t){return e.calcdata.key===t.key}),t),e}).on("drag",function(t){var e=a.select(this),r=function(e){return(t===e?a.event.x:e.x)+e.columnWidth/2};t.x=Math.max(-n.overdrag,Math.min(t.calcdata.width+n.overdrag-t.columnWidth,a.event.x)),v(_).filter(function(e){return e.calcdata.key===t.calcdata.key}).sort(function(t,e){return r(t)-r(e)}).forEach(function(e,r){e.xIndex=r,e.x=t===e?e.x:e.xScale(e)}),_.filter(function(e){return t!==e}).transition().ease(n.transitionEase).duration(n.transitionDuration).attr("transform",function(t){return"translate("+t.x+" 0)"}),e.call(c).attr("transform","translate("+t.x+" -"+n.uplift+" )")}).on("dragend",function(e){var r=a.select(this),n=e.calcdata;e.x=e.xScale(e),e.calcdata.columnDragInProgress=!1,w(r,e,0),function(t,e,r){var n=e.gdColumnsOriginalOrder;e.gdColumns.sort(function(t,e){return r[n.indexOf(t)]-r[n.indexOf(e)]}),e.columnorder=r,t.emit("plotly_restyle")}(t,n,n.columns.map(function(t){return t.xIndex}))})),_.each(function(e){o.setClipUrl(a.select(this),g(t,e),t)});var M=_.selectAll("."+n.cn.columnBlock).data(h.splitToPanels,i.keyFun);M.enter().append("g").classed(n.cn.columnBlock,!0).attr("id",function(t){return t.key}),M.style("cursor",function(t){return t.dragHandle?"ew-resize":t.calcdata.scrollbarState.barWiggleRoom?"ns-resize":"default"});var E=M.filter(T),L=M.filter(k);r&&L.call(a.behavior.drag().origin(function(t){return a.event.stopPropagation(),t}).on("drag",S(t,f,-1)).on("dragend",function(){})),y(t,f,E,M),y(t,f,L,M);var C=f.selectAll("."+n.cn.scrollAreaClip).data(i.repeat,i.keyFun);C.enter().append("clipPath").classed(n.cn.scrollAreaClip,!0).attr("id",function(e){return d(t,e)});var P=C.selectAll("."+n.cn.scrollAreaClipRect).data(i.repeat,i.keyFun);P.enter().append("rect").classed(n.cn.scrollAreaClipRect,!0).attr("x",-n.overdrag).attr("y",-n.uplift).attr("fill","none"),P.attr("width",function(t){return t.width+2*n.overdrag}).attr("height",function(t){return t.height+n.uplift}),_.selectAll("."+n.cn.columnBoundary).data(i.repeat,i.keyFun).enter().append("g").classed(n.cn.columnBoundary,!0);var O=_.selectAll("."+n.cn.columnBoundaryClippath).data(i.repeat,i.keyFun);O.enter().append("clipPath").classed(n.cn.columnBoundaryClippath,!0),O.attr("id",function(e){return g(t,e)});var z=O.selectAll("."+n.cn.columnBoundaryRect).data(i.repeat,i.keyFun);z.enter().append("rect").classed(n.cn.columnBoundaryRect,!0).attr("fill","none"),z.attr("width",function(t){return t.columnWidth+2*p(t)}).attr("height",function(t){return t.calcdata.height+2*p(t)+n.uplift}).attr("x",function(t){return-p(t)}).attr("y",function(t){return-p(t)}),A(null,L,f)}},{"../../components/color":591,"../../components/drawing":612,"../../lib":717,"../../lib/gup":715,"../../lib/svg_text_utils":741,"./constants":1251,"./data_preparation_helper":1252,"./data_split_helpers":1253,d3:165}],1257:[function(t,e,r){"use strict";var n=t("../../plots/template_attributes").hovertemplateAttrs,a=t("../../plots/template_attributes").texttemplateAttrs,i=t("../../components/colorscale/attributes"),o=t("../../plots/domain").attributes,s=t("../pie/attributes"),l=t("../sunburst/attributes"),c=t("./constants"),u=t("../../lib/extend").extendFlat;e.exports={labels:l.labels,parents:l.parents,values:l.values,branchvalues:l.branchvalues,count:l.count,level:l.level,maxdepth:l.maxdepth,tiling:{packing:{valType:"enumerated",values:["squarify","binary","dice","slice","slice-dice","dice-slice"],dflt:"squarify",editType:"plot"},squarifyratio:{valType:"number",min:1,dflt:1,editType:"plot"},flip:{valType:"flaglist",flags:["x","y"],dflt:"",editType:"plot"},pad:{valType:"number",min:0,dflt:3,editType:"plot"},editType:"calc"},marker:u({pad:{t:{valType:"number",min:0,editType:"plot"},l:{valType:"number",min:0,editType:"plot"},r:{valType:"number",min:0,editType:"plot"},b:{valType:"number",min:0,editType:"plot"},editType:"calc"},colors:l.marker.colors,depthfade:{valType:"enumerated",values:[!0,!1,"reversed"],editType:"style"},line:l.marker.line,editType:"calc"},i("marker",{colorAttr:"colors",anim:!1})),pathbar:{visible:{valType:"boolean",dflt:!0,editType:"plot"},side:{valType:"enumerated",values:["top","bottom"],dflt:"top",editType:"plot"},edgeshape:{valType:"enumerated",values:[">","<","|","/","\\"],dflt:">",editType:"plot"},thickness:{valType:"number",min:12,editType:"plot"},textfont:u({},s.textfont,{}),editType:"calc"},text:s.text,textinfo:l.textinfo,texttemplate:a({editType:"plot"},{keys:c.eventDataKeys.concat(["label","value"])}),hovertext:s.hovertext,hoverinfo:l.hoverinfo,hovertemplate:n({},{keys:c.eventDataKeys}),textfont:s.textfont,insidetextfont:s.insidetextfont,outsidetextfont:u({},s.outsidetextfont,{}),textposition:{valType:"enumerated",values:["top left","top center","top right","middle left","middle center","middle right","bottom left","bottom center","bottom right"],dflt:"top left",editType:"plot"},domain:o({name:"treemap",trace:!0,editType:"calc"})}},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plots/domain":790,"../../plots/template_attributes":841,"../pie/attributes":1094,"../sunburst/attributes":1231,"./constants":1260}],1258:[function(t,e,r){"use strict";var n=t("../../plots/plots");r.name="treemap",r.plot=function(t,e,a,i){n.plotBasePlot(r.name,t,e,a,i)},r.clean=function(t,e,a,i){n.cleanBasePlot(r.name,t,e,a,i)}},{"../../plots/plots":826}],1259:[function(t,e,r){"use strict";var n=t("../sunburst/calc");r.calc=function(t,e){return n.calc(t,e)},r.crossTraceCalc=function(t){return n._runCrossTraceCalc("treemap",t)}},{"../sunburst/calc":1233}],1260:[function(t,e,r){"use strict";e.exports={CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:"poly",eventDataKeys:["currentPath","root","entry","percentRoot","percentEntry","percentParent"],gapWithPathbar:1}},{}],1261:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("../../components/color"),o=t("../../plots/domain").defaults,s=t("../bar/defaults").handleText,l=t("../bar/constants").TEXTPAD,c=t("../../components/colorscale"),u=c.hasColorscale,h=c.handleDefaults;e.exports=function(t,e,r,c){function f(r,i){return n.coerce(t,e,a,r,i)}var p=f("labels"),d=f("parents");if(p&&p.length&&d&&d.length){var g=f("values");g&&g.length?f("branchvalues"):f("count"),f("level"),f("maxdepth"),"squarify"===f("tiling.packing")&&f("tiling.squarifyratio"),f("tiling.flip"),f("tiling.pad");var v=f("text");f("texttemplate"),e.texttemplate||f("textinfo",Array.isArray(v)?"text+label":"label"),f("hovertext"),f("hovertemplate");var m=f("pathbar.visible");s(t,e,c,f,"auto",{hasPathbar:m,moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),f("textposition");var y=-1!==e.textposition.indexOf("bottom");f("marker.line.width")&&f("marker.line.color",c.paper_bgcolor);var x=f("marker.colors"),b=e._hasColorscale=u(t,"marker","colors")||(t.marker||{}).coloraxis;b?h(t,e,c,f,{prefix:"marker.",cLetter:"c"}):f("marker.depthfade",!(x||[]).length);var _=2*e.textfont.size;f("marker.pad.t",y?_/4:_),f("marker.pad.l",_/4),f("marker.pad.r",_/4),f("marker.pad.b",y?_:_/4),b&&h(t,e,c,f,{prefix:"marker.",cLetter:"c"}),e._hovered={marker:{line:{width:2,color:i.contrast(c.paper_bgcolor)}}},m&&(f("pathbar.thickness",e.pathbar.textfont.size+2*l),f("pathbar.side"),f("pathbar.edgeshape")),o(e,c,f),e._length=null}else e.visible=!1}},{"../../components/color":591,"../../components/colorscale":603,"../../lib":717,"../../plots/domain":790,"../bar/constants":858,"../bar/defaults":860,"./attributes":1257}],1262:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../components/drawing"),o=t("../../lib/svg_text_utils"),s=t("./partition"),l=t("./style").styleOne,c=t("./constants"),u=t("../sunburst/helpers"),h=t("../sunburst/fx");e.exports=function(t,e,r,f,p){var d=p.barDifY,g=p.width,v=p.height,m=p.viewX,y=p.viewY,x=p.pathSlice,b=p.toMoveInsideSlice,_=p.strTransform,w=p.hasTransition,k=p.handleSlicesExit,T=p.makeUpdateSliceInterpolator,M=p.makeUpdateTextInterpolator,A={},S=t._fullLayout,E=e[0],L=E.trace,C=E.hierarchy,P=g/L._entryDepth,O=u.listPath(r.data,"id"),z=s(C.copy(),[g,v],{packing:"dice",pad:{inner:0,top:0,left:0,right:0,bottom:0}}).descendants();(z=z.filter(function(t){var e=O.indexOf(t.data.id);return-1!==e&&(t.x0=P*e,t.x1=P*(e+1),t.y0=d,t.y1=d+v,t.onPathbar=!0,!0)})).reverse(),(f=f.data(z,u.getPtId)).enter().append("g").classed("pathbar",!0),k(f,!0,A,[g,v],x),f.order();var I=f;w&&(I=I.transition().each("end",function(){var e=n.select(this);u.setSliceCursor(e,t,{hideOnRoot:!1,hideOnLeaves:!1,isTransitioning:!1})})),I.each(function(s){s._hoverX=m(s.x1-Math.min(g,v)/2),s._hoverY=y(s.y1-v/2);var f=n.select(this),p=a.ensureSingle(f,"path","surface",function(t){t.style("pointer-events","all")});w?p.transition().attrTween("d",function(t){var e=T(t,!0,A,[g,v]);return function(t){return x(e(t))}}):p.attr("d",x),f.call(h,r,t,e,{styleOne:l,eventDataKeys:c.eventDataKeys,transitionTime:c.CLICK_TRANSITION_TIME,transitionEasing:c.CLICK_TRANSITION_EASING}).call(u.setSliceCursor,t,{hideOnRoot:!1,hideOnLeaves:!1,isTransitioning:t._transitioning}),p.call(l,s,L,{hovered:!1}),s._text=(u.getPtLabel(s)||"").split("<br>").join(" ")||"";var d=a.ensureSingle(f,"g","slicetext"),k=a.ensureSingle(d,"text","",function(t){t.attr("data-notex",1)}),E=a.ensureUniformFontSize(t,u.determineTextFont(L,s,S.font,{onPathbar:!0}));k.text(s._text||" ").classed("slicetext",!0).attr("text-anchor","start").call(i.font,E).call(o.convertToTspans,t),s.textBB=i.bBox(k.node()),s.transform=b(s,{fontSize:E.size,onPathbar:!0}),s.transform.fontSize=E.size,w?k.transition().attrTween("transform",function(t){var e=M(t,!0,A,[g,v]);return function(t){return _(e(t))}}):k.attr("transform",_(s))})}},{"../../components/drawing":612,"../../lib":717,"../../lib/svg_text_utils":741,"../sunburst/fx":1236,"../sunburst/helpers":1237,"./constants":1260,"./partition":1267,"./style":1269,d3:165}],1263:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../components/drawing"),o=t("../../lib/svg_text_utils"),s=t("./partition"),l=t("./style").styleOne,c=t("./constants"),u=t("../sunburst/helpers"),h=t("../sunburst/fx"),f=t("../sunburst/plot").formatSliceLabel;e.exports=function(t,e,r,p,d){var g=d.width,v=d.height,m=d.viewX,y=d.viewY,x=d.pathSlice,b=d.toMoveInsideSlice,_=d.strTransform,w=d.hasTransition,k=d.handleSlicesExit,T=d.makeUpdateSliceInterpolator,M=d.makeUpdateTextInterpolator,A=d.prevEntry,S=t._fullLayout,E=e[0].trace,L=-1!==E.textposition.indexOf("left"),C=-1!==E.textposition.indexOf("right"),P=-1!==E.textposition.indexOf("bottom"),O=!P&&!E.marker.pad.t||P&&!E.marker.pad.b,z=s(r,[g,v],{packing:E.tiling.packing,squarifyratio:E.tiling.squarifyratio,flipX:E.tiling.flip.indexOf("x")>-1,flipY:E.tiling.flip.indexOf("y")>-1,pad:{inner:E.tiling.pad,top:E.marker.pad.t,left:E.marker.pad.l,right:E.marker.pad.r,bottom:E.marker.pad.b}}).descendants(),I=1/0,D=-1/0;z.forEach(function(t){var e=t.depth;e>=E._maxDepth?(t.x0=t.x1=(t.x0+t.x1)/2,t.y0=t.y1=(t.y0+t.y1)/2):(I=Math.min(I,e),D=Math.max(D,e))}),p=p.data(z,u.getPtId),E._maxVisibleLayers=isFinite(D)?D-I+1:0,p.enter().append("g").classed("slice",!0),k(p,!1,{},[g,v],x),p.order();var R=null;if(w&&A){var F=u.getPtId(A);p.each(function(t){null===R&&u.getPtId(t)===F&&(R={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})})}var B=function(){return R||{x0:0,x1:g,y0:0,y1:v}},N=p;return w&&(N=N.transition().each("end",function(){var e=n.select(this);u.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!1,isTransitioning:!1})})),N.each(function(s){var p=u.isHeader(s,E);s._hoverX=m(s.x1-E.marker.pad.r),s._hoverY=y(P?s.y1-E.marker.pad.b/2:s.y0+E.marker.pad.t/2);var d=n.select(this),k=a.ensureSingle(d,"path","surface",function(t){t.style("pointer-events","all")});w?k.transition().attrTween("d",function(t){var e=T(t,!1,B(),[g,v]);return function(t){return x(e(t))}}):k.attr("d",x),d.call(h,r,t,e,{styleOne:l,eventDataKeys:c.eventDataKeys,transitionTime:c.CLICK_TRANSITION_TIME,transitionEasing:c.CLICK_TRANSITION_EASING}).call(u.setSliceCursor,t,{isTransitioning:t._transitioning}),k.call(l,s,E,{hovered:!1}),s.x0===s.x1||s.y0===s.y1?s._text="":s._text=p?O?"":u.getPtLabel(s)||"":f(s,r,E,e,S)||"";var A=a.ensureSingle(d,"g","slicetext"),z=a.ensureSingle(A,"text","",function(t){t.attr("data-notex",1)}),I=a.ensureUniformFontSize(t,u.determineTextFont(E,s,S.font));z.text(s._text||" ").classed("slicetext",!0).attr("text-anchor",C?"end":L||p?"start":"middle").call(i.font,I).call(o.convertToTspans,t),s.textBB=i.bBox(z.node()),s.transform=b(s,{fontSize:I.size,isHeader:p}),s.transform.fontSize=I.size,w?z.transition().attrTween("transform",function(t){var e=M(t,!1,B(),[g,v]);return function(t){return _(e(t))}}):z.attr("transform",_(s))}),R}},{"../../components/drawing":612,"../../lib":717,"../../lib/svg_text_utils":741,"../sunburst/fx":1236,"../sunburst/helpers":1237,"../sunburst/plot":1241,"./constants":1260,"./partition":1267,"./style":1269,d3:165}],1264:[function(t,e,r){"use strict";e.exports={moduleType:"trace",name:"treemap",basePlotModule:t("./base_plot"),categories:[],animatable:!0,attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults"),supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc").calc,crossTraceCalc:t("./calc").crossTraceCalc,plot:t("./plot"),style:t("./style").style,colorbar:t("../scatter/marker_colorbar"),meta:{}}},{"../scatter/marker_colorbar":1138,"./attributes":1257,"./base_plot":1258,"./calc":1259,"./defaults":1261,"./layout_attributes":1265,"./layout_defaults":1266,"./plot":1268,"./style":1269}],1265:[function(t,e,r){"use strict";e.exports={treemapcolorway:{valType:"colorlist",editType:"calc"},extendtreemapcolors:{valType:"boolean",dflt:!0,editType:"calc"}}},{}],1266:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e){function r(r,i){return n.coerce(t,e,a,r,i)}r("treemapcolorway",e.colorway),r("extendtreemapcolors")}},{"../../lib":717,"./layout_attributes":1265}],1267:[function(t,e,r){"use strict";var n=t("d3-hierarchy");e.exports=function(t,e,r){var a,i=r.flipX,o=r.flipY,s="dice-slice"===r.packing,l=r.pad[o?"bottom":"top"],c=r.pad[i?"right":"left"],u=r.pad[i?"left":"right"],h=r.pad[o?"top":"bottom"];s&&(a=c,c=l,l=a,a=u,u=h,h=a);var f=n.treemap().tile(function(t,e){switch(t){case"squarify":return n.treemapSquarify.ratio(e);case"binary":return n.treemapBinary;case"dice":return n.treemapDice;case"slice":return n.treemapSlice;default:return n.treemapSliceDice}}(r.packing,r.squarifyratio)).paddingInner(r.pad.inner).paddingLeft(c).paddingRight(u).paddingTop(l).paddingBottom(h).size(s?[e[1],e[0]]:e)(t);return(s||i||o)&&function t(e,r,n){var a;n.swapXY&&(a=e.x0,e.x0=e.y0,e.y0=a,a=e.x1,e.x1=e.y1,e.y1=a);n.flipX&&(a=e.x0,e.x0=r[0]-e.x1,e.x1=r[0]-a);n.flipY&&(a=e.y0,e.y0=r[1]-e.y1,e.y1=r[1]-a);var i=e.children;if(i)for(var o=0;o<i.length;o++)t(i[o],r,n)}(f,e,{swapXY:s,flipX:i,flipY:o}),f}},{"d3-hierarchy":159}],1268:[function(t,e,r){"use strict";var n=t("d3"),a=t("../sunburst/helpers"),i=t("../../lib"),o=t("../bar/constants").TEXTPAD,s=t("../bar/plot").toMoveInsideBar,l=t("../bar/uniform_text"),c=l.recordMinTextSize,u=l.clearMinTextSize,h=t("../bar/style").resizeText,f=t("./constants"),p=t("./draw_descendants"),d=t("./draw_ancestors");function g(t){return a.isHierarchyRoot(t)?"":a.getPtId(t)}function v(t,e,r,l){var u=t._fullLayout,h=e[0],v=h.trace,m=h.hierarchy,y=a.findEntryWithLevel(m,v.level),x=n.select(r),b=x.selectAll("g.pathbar"),_=x.selectAll("g.slice");if(!y)return b.remove(),void _.remove();var w=a.isHierarchyRoot(y),k=!u.uniformtext.mode&&a.hasTransition(l),T=a.getMaxDepth(v),M=u._size,A=v.domain,S=M.w*(A.x[1]-A.x[0]),E=M.h*(A.y[1]-A.y[0]),L=S,C=v.pathbar.thickness,P=v.marker.line.width+f.gapWithPathbar,O=v.pathbar.visible?v.pathbar.side.indexOf("bottom")>-1?E+P:-(C+P):0,z={x0:L,x1:L,y0:O,y1:O+C},I=function(t,e,r){var n=v.tiling.pad,a=function(t){return t-n<=e.x0},i=function(t){return t+n>=e.x1},o=function(t){return t-n<=e.y0},s=function(t){return t+n>=e.y1};return{x0:a(t.x0-n)?0:i(t.x0-n)?r[0]:t.x0,x1:a(t.x1+n)?0:i(t.x1+n)?r[0]:t.x1,y0:o(t.y0-n)?0:s(t.y0-n)?r[1]:t.y0,y1:o(t.y1+n)?0:s(t.y1+n)?r[1]:t.y1}},D=null,R={},F={},B=null,N=function(t,e){return e?R[g(t)]:F[g(t)]},j=function(t,e,r,n){if(e)return R[g(m)]||z;var a=F[v.level]||r;return function(t){return t.data.depth-y.data.depth<T}(t)?I(t,a,n):{}};h.hasMultipleRoots&&w&&T++,v._maxDepth=T,v._backgroundColor=u.paper_bgcolor,v._entryDepth=y.data.depth,v._atRootLevel=w;var V=-S/2+M.l+M.w*(A.x[1]+A.x[0])/2,U=-E/2+M.t+M.h*(1-(A.y[1]+A.y[0])/2),q=function(t){return V+t},H=function(t){return U+t},G=H(0),Y=q(0),W=function(t){return Y+t},X=function(t){return G+t};function Z(t,e){return t+","+e}var J=W(0),K=function(t){t.x=Math.max(J,t.x)},Q=v.pathbar.edgeshape,$=function(t,e){var r=t.x0,n=t.x1,a=t.y0,i=t.y1,l=t.textBB,h=function(t){return-1!==v.textposition.indexOf(t)},f=h("bottom"),p=h("top")||e.isHeader&&!f?"start":f?"end":"middle",d=h("right"),g=h("left")||e.onPathbar?-1:d?1:0,m=v.marker.pad;if(e.isHeader){if((r+=m.l-o)>=(n-=m.r-o)){var y=(r+n)/2;r=y,n=y}var x;f?a<(x=i-m.b)&&x<i&&(a=x):a<(x=a+m.t)&&x<i&&(i=x)}var b=s(r,n,a,i,l,{isHorizontal:!1,constrained:!0,angle:0,anchor:p,leftToRight:g});return b.fontSize=e.fontSize,b.targetX=q(b.targetX),b.targetY=H(b.targetY),isNaN(b.targetX)||isNaN(b.targetY)?{}:(r!==n&&a!==i&&c(v.type,b,u),{scale:b.scale,rotate:b.rotate,textX:b.textX,textY:b.textY,anchorX:b.anchorX,anchorY:b.anchorY,targetX:b.targetX,targetY:b.targetY})},tt=function(t,e){for(var r,n=0,a=t;!r&&n<T;)n++,(a=a.parent)?r=N(a,e):n=T;return r||{}},et=function(t,e,r,a){var o,s=N(t,e);if(s)o=s;else if(e)o=z;else if(D)if(t.parent){var l=B||r;l&&!e?o=I(t,l,a):(o={},i.extendFlat(o,tt(t,e)))}else o=t;else o={};return n.interpolate(o,{x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})},rt=function(t,e,r,o){var s=N(t,e),l={},h=j(t,e,r,o);i.extendFlat(l,{transform:$({x0:h.x0,x1:h.x1,y0:h.y0,y1:h.y1,textBB:t.textBB,_text:t._text},{isHeader:a.isHeader(t,v)})}),s?l=s:t.parent&&i.extendFlat(l,tt(t,e));var f=t.transform;return t.x0!==t.x1&&t.y0!==t.y1&&c(v.type,f,u),n.interpolate(l,{transform:{scale:f.scale,rotate:f.rotate,textX:f.textX,textY:f.textY,anchorX:f.anchorX,anchorY:f.anchorY,targetX:f.targetX,targetY:f.targetY}})},nt=function(t,e,r,a,i){var o=a[0],s=a[1];k?t.exit().transition().each(function(){var t=n.select(this);t.select("path.surface").transition().attrTween("d",function(t){var r=function(t,e,r,a){var i,o=N(t,e);if(e)i=z;else{var s=N(y,e);i=s?I(t,s,a):{}}return n.interpolate(o,i)}(t,e,0,[o,s]);return function(t){return i(r(t))}}),t.select("g.slicetext").attr("opacity",0)}).remove():t.exit().remove()},at=function(t){var e=t.transform;return t.x0!==t.x1&&t.y0!==t.y1&&c(v.type,e,u),i.getTextTransform({textX:e.textX,textY:e.textY,anchorX:e.anchorX,anchorY:e.anchorY,targetX:e.targetX,targetY:e.targetY,scale:e.scale,rotate:e.rotate})};k&&(b.each(function(t){R[g(t)]={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1},t.transform&&(R[g(t)].transform={textX:t.transform.textX,textY:t.transform.textY,anchorX:t.transform.anchorX,anchorY:t.transform.anchorY,targetX:t.transform.targetX,targetY:t.transform.targetY,scale:t.transform.scale,rotate:t.transform.rotate})}),_.each(function(t){F[g(t)]={x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1},t.transform&&(F[g(t)].transform={textX:t.transform.textX,textY:t.transform.textY,anchorX:t.transform.anchorX,anchorY:t.transform.anchorY,targetX:t.transform.targetX,targetY:t.transform.targetY,scale:t.transform.scale,rotate:t.transform.rotate}),!D&&a.isEntry(t)&&(D=t)})),B=p(t,e,y,_,{width:S,height:E,viewX:q,viewY:H,pathSlice:function(t){var e=q(t.x0),r=q(t.x1),n=H(t.y0),a=H(t.y1),i=r-e,o=a-n;if(!i||!o)return"";return"M"+Z(e,n+0)+"L"+Z(r-0,n)+"L"+Z(r,a-0)+"L"+Z(e+0,a)+"Z"},toMoveInsideSlice:$,prevEntry:D,makeUpdateSliceInterpolator:et,makeUpdateTextInterpolator:rt,handleSlicesExit:nt,hasTransition:k,strTransform:at}),v.pathbar.visible?d(t,e,y,b,{barDifY:O,width:L,height:C,viewX:W,viewY:X,pathSlice:function(t){var e=W(Math.max(Math.min(t.x0,t.x0),0)),r=W(Math.min(Math.max(t.x1,t.x1),L)),n=X(t.y0),a=X(t.y1),i=C/2,o={},s={};o.x=e,s.x=r,o.y=s.y=(n+a)/2;var l={x:e,y:n},c={x:r,y:n},u={x:r,y:a},h={x:e,y:a};return">"===Q?(l.x-=i,c.x-=i,u.x-=i,h.x-=i):"/"===Q?(u.x-=i,h.x-=i,o.x-=i/2,s.x-=i/2):"\\"===Q?(l.x-=i,c.x-=i,o.x-=i/2,s.x-=i/2):"<"===Q&&(o.x-=i,s.x-=i),K(l),K(h),K(o),K(c),K(u),K(s),"M"+Z(l.x,l.y)+"L"+Z(c.x,c.y)+"L"+Z(s.x,s.y)+"L"+Z(u.x,u.y)+"L"+Z(h.x,h.y)+"L"+Z(o.x,o.y)+"Z"},toMoveInsideSlice:$,makeUpdateSliceInterpolator:et,makeUpdateTextInterpolator:rt,handleSlicesExit:nt,hasTransition:k,strTransform:at}):b.remove()}e.exports=function(t,e,r,i){var o,s,l=t._fullLayout,c=l._treemaplayer,f=!r;(u("treemap",l),(o=c.selectAll("g.trace.treemap").data(e,function(t){return t[0].trace.uid})).enter().append("g").classed("trace",!0).classed("treemap",!0),o.order(),!l.uniformtext.mode&&a.hasTransition(r))?(i&&(s=i()),n.transition().duration(r.duration).ease(r.easing).each("end",function(){s&&s()}).each("interrupt",function(){s&&s()}).each(function(){c.selectAll("g.trace").each(function(e){v(t,e,this,r)})})):(o.each(function(e){v(t,e,this,r)}),l.uniformtext.mode&&h(t,l._treemaplayer.selectAll(".trace"),"treemap"));f&&o.exit().remove()}},{"../../lib":717,"../bar/constants":858,"../bar/plot":867,"../bar/style":870,"../bar/uniform_text":872,"../sunburst/helpers":1237,"./constants":1260,"./draw_ancestors":1262,"./draw_descendants":1263,d3:165}],1269:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/color"),i=t("../../lib"),o=t("../sunburst/helpers"),s=t("../bar/uniform_text").resizeText;function l(t,e,r,n){var s,l,c=(n||{}).hovered,u=e.data.data,h=u.i,f=u.color,p=o.isHierarchyRoot(e),d=1;if(c)s=r._hovered.marker.line.color,l=r._hovered.marker.line.width;else if(p&&"rgba(0,0,0,0)"===f)d=0,s="rgba(0,0,0,0)",l=0;else if(s=i.castOption(r,h,"marker.line.color")||a.defaultLine,l=i.castOption(r,h,"marker.line.width")||0,!r._hasColorscale&&!e.onPathbar){var g=r.marker.depthfade;if(g){var v,m=a.combine(a.addOpacity(r._backgroundColor,.75),f);if(!0===g){var y=o.getMaxDepth(r);v=isFinite(y)?o.isLeaf(e)?0:r._maxVisibleLayers-(e.data.depth-r._entryDepth):e.data.height+1}else v=e.data.depth-r._entryDepth,r._atRootLevel||v++;if(v>0)for(var x=0;x<v;x++){var b=.5*x/v;f=a.combine(a.addOpacity(m,b),f)}}}t.style("stroke-width",l).call(a.fill,f).call(a.stroke,s).style("opacity",d)}e.exports={style:function(t){var e=t._fullLayout._treemaplayer.selectAll(".trace");s(t,e,"treemap"),e.each(function(t){var e=n.select(this),r=t[0].trace;e.style("opacity",r.opacity),e.selectAll("path.surface").each(function(t){n.select(this).call(l,t,r,{hovered:!1})})})},styleOne:l}},{"../../components/color":591,"../../lib":717,"../bar/uniform_text":872,"../sunburst/helpers":1237,d3:165}],1270:[function(t,e,r){"use strict";var n=t("../box/attributes"),a=t("../../lib/extend").extendFlat;e.exports={y:n.y,x:n.x,x0:n.x0,y0:n.y0,name:a({},n.name,{}),orientation:a({},n.orientation,{}),bandwidth:{valType:"number",min:0,editType:"calc"},scalegroup:{valType:"string",dflt:"",editType:"calc"},scalemode:{valType:"enumerated",values:["width","count"],dflt:"width",editType:"calc"},spanmode:{valType:"enumerated",values:["soft","hard","manual"],dflt:"soft",editType:"calc"},span:{valType:"info_array",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}],editType:"calc"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,dflt:2,editType:"style"},editType:"plot"},fillcolor:n.fillcolor,points:a({},n.boxpoints,{}),jitter:a({},n.jitter,{}),pointpos:a({},n.pointpos,{}),width:a({},n.width,{}),marker:n.marker,text:n.text,hovertext:n.hovertext,hovertemplate:n.hovertemplate,box:{visible:{valType:"boolean",dflt:!1,editType:"plot"},width:{valType:"number",min:0,max:1,dflt:.25,editType:"plot"},fillcolor:{valType:"color",editType:"style"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,editType:"style"},editType:"style"},editType:"plot"},meanline:{visible:{valType:"boolean",dflt:!1,editType:"plot"},color:{valType:"color",editType:"style"},width:{valType:"number",min:0,editType:"style"},editType:"plot"},side:{valType:"enumerated",values:["both","positive","negative"],dflt:"both",editType:"calc"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:n.selected,unselected:n.unselected,hoveron:{valType:"flaglist",flags:["violins","points","kde"],dflt:"violins+points+kde",extras:["all"],editType:"style"}}},{"../../lib/extend":708,"../box/attributes":881}],1271:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../box/calc"),o=t("./helpers"),s=t("../../constants/numerical").BADNUM;function l(t,e,r){var a=e.max-e.min;if(!a)return t.bandwidth?t.bandwidth:0;if(t.bandwidth)return Math.max(t.bandwidth,a/1e4);var i=r.length,o=n.stdev(r,i-1,e.mean);return Math.max(function(t,e,r){return 1.059*Math.min(e,r/1.349)*Math.pow(t,-.2)}(i,o,e.q3-e.q1),a/100)}function c(t,e,r,n){var i,o=t.spanmode,l=t.span||[],c=[e.min,e.max],u=[e.min-2*n,e.max+2*n];function h(n){var a=l[n],i="multicategory"===r.type?r.r2c(a):r.d2c(a,0,t[e.valLetter+"calendar"]);return i===s?u[n]:i}var f={type:"linear",range:i="soft"===o?u:"hard"===o?c:[h(0),h(1)]};return a.setConvert(f),f.cleanRange(),i}e.exports=function(t,e){var r=i(t,e);if(r[0].t.empty)return r;for(var s=t._fullLayout,u=a.getFromId(t,e["h"===e.orientation?"xaxis":"yaxis"]),h=1/0,f=-1/0,p=0,d=0,g=0;g<r.length;g++){var v=r[g],m=v.pts.map(o.extractVal),y=v.bandwidth=l(e,v,m),x=v.span=c(e,v,u,y);if(v.min===v.max&&0===y)x=v.span=[v.min,v.max],v.density=[{v:1,t:x[0]}],v.bandwidth=y,p=Math.max(p,1);else{var b=x[1]-x[0],_=Math.ceil(b/(y/3)),w=b/_;if(!isFinite(w)||!isFinite(_))return n.error("Something went wrong with computing the violin span"),r[0].t.empty=!0,r;var k=o.makeKDE(v,e,m);v.density=new Array(_);for(var T=0,M=x[0];M<x[1]+w/2;T++,M+=w){var A=k(M);v.density[T]={v:A,t:M},p=Math.max(p,A)}}d=Math.max(d,m.length),h=Math.min(h,x[0]),f=Math.max(f,x[1])}var S=a.findExtremes(u,[h,f],{padded:!0});if(e._extremes[u._id]=S,e.width)r[0].t.maxKDE=p;else{var E=s._violinScaleGroupStats,L=e.scalegroup,C=E[L];C?(C.maxKDE=Math.max(C.maxKDE,p),C.maxCount=Math.max(C.maxCount,d)):E[L]={maxKDE:p,maxCount:d}}return r[0].t.labels.kde=n._(t,"kde:"),r}},{"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/axes":765,"../box/calc":882,"./helpers":1274}],1272:[function(t,e,r){"use strict";var n=t("../box/cross_trace_calc").setPositionOffset,a=["v","h"];e.exports=function(t,e){for(var r=t.calcdata,i=e.xaxis,o=e.yaxis,s=0;s<a.length;s++){for(var l=a[s],c="h"===l?o:i,u=[],h=0;h<r.length;h++){var f=r[h],p=f[0].t,d=f[0].trace;!0!==d.visible||"violin"!==d.type||p.empty||d.orientation!==l||d.xaxis!==i._id||d.yaxis!==o._id||u.push(h)}n("violin",t,u,c)}}},{"../box/cross_trace_calc":883}],1273:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../components/color"),i=t("../box/defaults"),o=t("./attributes");e.exports=function(t,e,r,s){function l(r,a){return n.coerce(t,e,o,r,a)}function c(r,a){return n.coerce2(t,e,o,r,a)}if(i.handleSampleDefaults(t,e,l,s),!1!==e.visible){l("bandwidth"),l("side"),l("width")||(l("scalegroup",e.name),l("scalemode"));var u,h=l("span");Array.isArray(h)&&(u="manual"),l("spanmode",u);var f=l("line.color",(t.marker||{}).color||r),p=l("line.width"),d=l("fillcolor",a.addOpacity(e.line.color,.5));i.handlePointsDefaults(t,e,l,{prefix:""});var g=c("box.width"),v=c("box.fillcolor",d),m=c("box.line.color",f),y=c("box.line.width",p);l("box.visible",Boolean(g||v||m||y))||(e.box={visible:!1});var x=c("meanline.color",f),b=c("meanline.width",p);l("meanline.visible",Boolean(x||b))||(e.meanline={visible:!1})}}},{"../../components/color":591,"../../lib":717,"../box/defaults":884,"./attributes":1270}],1274:[function(t,e,r){"use strict";var n=t("../../lib"),a=function(t){return 1/Math.sqrt(2*Math.PI)*Math.exp(-.5*t*t)};r.makeKDE=function(t,e,r){var n=r.length,i=a,o=t.bandwidth,s=1/(n*o);return function(t){for(var e=0,a=0;a<n;a++)e+=i((t-r[a])/o);return s*e}},r.getPositionOnKdePath=function(t,e,r){var a,i;"h"===e.orientation?(a="y",i="x"):(a="x",i="y");var o=n.findPointOnPath(t.path,r,i,{pathLength:t.pathLength}),s=t.posCenterPx,l=o[a];return[l,"both"===e.side?2*s-l:s]},r.getKdeValue=function(t,e,n){var a=t.pts.map(r.extractVal);return r.makeKDE(t,e,a)(n)/t.posDensityScale},r.extractVal=function(t){return t.v}},{"../../lib":717}],1275:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../../plots/cartesian/axes"),i=t("../box/hover"),o=t("./helpers");e.exports=function(t,e,r,s,l){var c,u,h=t.cd,f=h[0].trace,p=f.hoveron,d=-1!==p.indexOf("violins"),g=-1!==p.indexOf("kde"),v=[];if(d||g){var m=i.hoverOnBoxes(t,e,r,s);if(g&&m.length>0){var y,x,b,_,w,k=t.xa,T=t.ya;"h"===f.orientation?(w=e,y="y",b=T,x="x",_=k):(w=r,y="x",b=k,x="y",_=T);var M=h[t.index];if(w>=M.span[0]&&w<=M.span[1]){var A=n.extendFlat({},t),S=_.c2p(w,!0),E=o.getKdeValue(M,f,w),L=o.getPositionOnKdePath(M,f,S),C=b._offset,P=b._length;A[y+"0"]=L[0],A[y+"1"]=L[1],A[x+"0"]=A[x+"1"]=S,A[x+"Label"]=x+": "+a.hoverLabelText(_,w)+", "+h[0].t.labels.kde+" "+E.toFixed(3),A.spikeDistance=m[0].spikeDistance;var O=y+"Spike";A[O]=m[0][O],m[0].spikeDistance=void 0,m[0][O]=void 0,A.hovertemplate=!1,v.push(A),(u={stroke:t.color})[y+"1"]=n.constrain(C+L[0],C,C+P),u[y+"2"]=n.constrain(C+L[1],C,C+P),u[x+"1"]=u[x+"2"]=_._offset+S}}d&&(v=v.concat(m))}-1!==p.indexOf("points")&&(c=i.hoverOnPoints(t,e,r));var z=l.selectAll(".violinline-"+f.uid).data(u?[0]:[]);return z.enter().append("line").classed("violinline-"+f.uid,!0).attr("stroke-width",1.5),z.exit().remove(),z.attr(u),"closest"===s?c?[c]:v:c?(v.push(c),v):v}},{"../../lib":717,"../../plots/cartesian/axes":765,"../box/hover":886,"./helpers":1274}],1276:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults"),crossTraceDefaults:t("../box/defaults").crossTraceDefaults,supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc"),crossTraceCalc:t("./cross_trace_calc"),plot:t("./plot"),style:t("./style"),styleOnSelect:t("../scatter/style").styleOnSelect,hoverPoints:t("./hover"),selectPoints:t("../box/select"),moduleType:"trace",name:"violin",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","svg","symbols","oriented","box-violin","showLegend","violinLayout","zoomScale"],meta:{}}},{"../../plots/cartesian":776,"../box/defaults":884,"../box/select":891,"../scatter/style":1143,"./attributes":1270,"./calc":1271,"./cross_trace_calc":1272,"./defaults":1273,"./hover":1275,"./layout_attributes":1277,"./layout_defaults":1278,"./plot":1279,"./style":1280}],1277:[function(t,e,r){"use strict";var n=t("../box/layout_attributes"),a=t("../../lib").extendFlat;e.exports={violinmode:a({},n.boxmode,{}),violingap:a({},n.boxgap,{}),violingroupgap:a({},n.boxgroupgap,{})}},{"../../lib":717,"../box/layout_attributes":888}],1278:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes"),i=t("../box/layout_defaults");e.exports=function(t,e,r){i._supply(t,e,r,function(r,i){return n.coerce(t,e,a,r,i)},"violin")}},{"../../lib":717,"../box/layout_defaults":889,"./layout_attributes":1277}],1279:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../components/drawing"),o=t("../box/plot"),s=t("../scatter/line_points"),l=t("./helpers");e.exports=function(t,e,r,c){var u=t._fullLayout,h=e.xaxis,f=e.yaxis;function p(t){var e=s(t,{xaxis:h,yaxis:f,connectGaps:!0,baseTolerance:.75,shape:"spline",simplify:!0,linearized:!0});return i.smoothopen(e[0],1)}a.makeTraceGroups(c,r,"trace violins").each(function(t){var r=n.select(this),i=t[0],s=i.t,c=i.trace;if(!0!==c.visible||s.empty)r.remove();else{var d=s.bPos,g=s.bdPos,v=e[s.valLetter+"axis"],m=e[s.posLetter+"axis"],y="both"===c.side,x=y||"positive"===c.side,b=y||"negative"===c.side,_=r.selectAll("path.violin").data(a.identity);_.enter().append("path").style("vector-effect","non-scaling-stroke").attr("class","violin"),_.exit().remove(),_.each(function(t){var e,r,a,i,o,l,h,f,_=n.select(this),w=t.density,k=w.length,T=m.c2l(t.pos+d,!0),M=m.l2p(T);if(c.width)e=s.maxKDE/g;else{var A=u._violinScaleGroupStats[c.scalegroup];e="count"===c.scalemode?A.maxKDE/g*(A.maxCount/t.pts.length):A.maxKDE/g}if(x){for(h=new Array(k),o=0;o<k;o++)(f=h[o]={})[s.posLetter]=T+w[o].v/e,f[s.valLetter]=v.c2l(w[o].t,!0);r=p(h)}if(b){for(h=new Array(k),l=0,o=k-1;l<k;l++,o--)(f=h[l]={})[s.posLetter]=T-w[o].v/e,f[s.valLetter]=v.c2l(w[o].t,!0);a=p(h)}if(y)i=r+"L"+a.substr(1)+"Z";else{var S=[M,v.c2p(w[0].t)],E=[M,v.c2p(w[k-1].t)];"h"===c.orientation&&(S.reverse(),E.reverse()),i=x?"M"+S+"L"+r.substr(1)+"L"+E:"M"+E+"L"+a.substr(1)+"L"+S}_.attr("d",i),t.posCenterPx=M,t.posDensityScale=e*g,t.path=_.node(),t.pathLength=t.path.getTotalLength()/(y?2:1)});var w,k,T,M=c.box,A=M.width,S=(M.line||{}).width;y?(w=g*A,k=0):x?(w=[0,g*A/2],k=S*{x:1,y:-1}[s.posLetter]):(w=[g*A/2,0],k=S*{x:-1,y:1}[s.posLetter]),o.plotBoxAndWhiskers(r,{pos:m,val:v},c,{bPos:d,bdPos:w,bPosPxOffset:k}),o.plotBoxMean(r,{pos:m,val:v},c,{bPos:d,bdPos:w,bPosPxOffset:k}),!c.box.visible&&c.meanline.visible&&(T=a.identity);var E=r.selectAll("path.meanline").data(T||[]);E.enter().append("path").attr("class","meanline").style("fill","none").style("vector-effect","non-scaling-stroke"),E.exit().remove(),E.each(function(t){var e=v.c2p(t.mean,!0),r=l.getPositionOnKdePath(t,c,e);n.select(this).attr("d","h"===c.orientation?"M"+e+","+r[0]+"V"+r[1]:"M"+r[0]+","+e+"H"+r[1])}),o.plotPoints(r,{x:h,y:f},c,s)}})}},{"../../components/drawing":612,"../../lib":717,"../box/plot":890,"../scatter/line_points":1134,"./helpers":1274,d3:165}],1280:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/color"),i=t("../scatter/style").stylePoints;e.exports=function(t){var e=n.select(t).selectAll("g.trace.violins");e.style("opacity",function(t){return t[0].trace.opacity}),e.each(function(e){var r=e[0].trace,o=n.select(this),s=r.box||{},l=s.line||{},c=r.meanline||{},u=c.width;o.selectAll("path.violin").style("stroke-width",r.line.width+"px").call(a.stroke,r.line.color).call(a.fill,r.fillcolor),o.selectAll("path.box").style("stroke-width",l.width+"px").call(a.stroke,l.color).call(a.fill,s.fillcolor);var h={"stroke-width":u+"px","stroke-dasharray":2*u+"px,"+u+"px"};o.selectAll("path.mean").style(h).call(a.stroke,c.color),o.selectAll("path.meanline").style(h).call(a.stroke,c.color),i(o,r,t)})}},{"../../components/color":591,"../scatter/style":1143,d3:165}],1281:[function(t,e,r){"use strict";var n=t("../../components/colorscale/attributes"),a=t("../isosurface/attributes"),i=t("../surface/attributes"),o=t("../../plots/attributes"),s=t("../../lib/extend").extendFlat,l=t("../../plot_api/edit_types").overrideAll,c=e.exports=l(s({x:a.x,y:a.y,z:a.z,value:a.value,isomin:a.isomin,isomax:a.isomax,surface:a.surface,spaceframe:{show:{valType:"boolean",dflt:!1},fill:{valType:"number",min:0,max:1,dflt:1}},slices:a.slices,caps:a.caps,text:a.text,hovertext:a.hovertext,hovertemplate:a.hovertemplate},n("",{colorAttr:"`value`",showScaleDflt:!0,editTypeOverride:"calc"}),{colorbar:a.colorbar,opacity:a.opacity,opacityscale:i.opacityscale,lightposition:a.lightposition,lighting:a.lighting,flatshading:a.flatshading,contour:a.contour,hoverinfo:s({},o.hoverinfo),showlegend:s({},o.showlegend,{dflt:!1})}),"calc","nested");c.x.editType=c.y.editType=c.z.editType=c.value.editType="calc+clearAxisTypes",c.transforms=void 0},{"../../components/colorscale/attributes":598,"../../lib/extend":708,"../../plot_api/edit_types":748,"../../plots/attributes":762,"../isosurface/attributes":1056,"../surface/attributes":1243}],1282:[function(t,e,r){"use strict";var n=t("gl-mesh3d"),a=t("../../lib/gl_format_color").parseColorScale,i=t("../../lib/str2rgbarray"),o=t("../../components/colorscale").extractOpts,s=t("../../plots/gl3d/zip3"),l=t("../isosurface/convert").findNearestOnAxis,c=t("../isosurface/convert").generateIsoMeshes;function u(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name="",this.data=null,this.showContour=!1}var h=u.prototype;h.handlePick=function(t){if(t.object===this.mesh){var e=t.data.index,r=this.data._meshX[e],n=this.data._meshY[e],a=this.data._meshZ[e],i=this.data._Ys.length,o=this.data._Zs.length,s=l(r,this.data._Xs).id,c=l(n,this.data._Ys).id,u=l(a,this.data._Zs).id,h=t.index=u+o*c+o*i*s;t.traceCoordinate=[this.data._meshX[h],this.data._meshY[h],this.data._meshZ[h],this.data._value[h]];var f=this.data.hovertext||this.data.text;return Array.isArray(f)&&void 0!==f[h]?t.textLabel=f[h]:f&&(t.textLabel=f),!0}},h.update=function(t){var e=this.scene,r=e.fullSceneLayout;function n(t,e,r,n){return e.map(function(e){return t.d2l(e,0,n)*r})}this.data=c(t);var l={positions:s(n(r.xaxis,t._meshX,e.dataScale[0],t.xcalendar),n(r.yaxis,t._meshY,e.dataScale[1],t.ycalendar),n(r.zaxis,t._meshZ,e.dataScale[2],t.zcalendar)),cells:s(t._meshI,t._meshJ,t._meshK),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,opacityscale:t.opacityscale,contourEnable:t.contour.show,contourColor:i(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading},u=o(t);l.vertexIntensity=t._meshIntensity,l.vertexIntensityBounds=[u.min,u.max],l.colormap=a(t),this.mesh.update(l)},h.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=function(t,e){var r=t.glplot.gl,a=n({gl:r}),i=new u(t,a,e.uid);return a._trace=i,i.update(e),t.glplot.add(a),i}},{"../../components/colorscale":603,"../../lib/gl_format_color":714,"../../lib/str2rgbarray":740,"../../plots/gl3d/zip3":816,"../isosurface/convert":1058,"gl-mesh3d":283}],1283:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./attributes"),i=t("../isosurface/defaults").supplyIsoDefaults,o=t("../surface/defaults").opacityscaleDefaults;e.exports=function(t,e,r,s){function l(r,i){return n.coerce(t,e,a,r,i)}i(t,e,r,s,l),o(t,e,s,l)}},{"../../lib":717,"../isosurface/defaults":1059,"../surface/defaults":1246,"./attributes":1281}],1284:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),supplyDefaults:t("./defaults"),calc:t("../isosurface/calc"),colorbar:{min:"cmin",max:"cmax"},plot:t("./convert"),moduleType:"trace",name:"volume",basePlotModule:t("../../plots/gl3d"),categories:["gl3d","showLegend"],meta:{}}},{"../../plots/gl3d":805,"../isosurface/calc":1057,"./attributes":1281,"./convert":1282,"./defaults":1283}],1285:[function(t,e,r){"use strict";var n=t("../bar/attributes"),a=t("../scatter/attributes").line,i=t("../../plots/attributes"),o=t("../../plots/template_attributes").hovertemplateAttrs,s=t("../../plots/template_attributes").texttemplateAttrs,l=t("./constants"),c=t("../../lib/extend").extendFlat,u=t("../../components/color");function h(t){return{marker:{color:c({},n.marker.color,{arrayOk:!1,editType:"style"}),line:{color:c({},n.marker.line.color,{arrayOk:!1,editType:"style"}),width:c({},n.marker.line.width,{arrayOk:!1,editType:"style"}),editType:"style"},editType:"style"},editType:"style"}}e.exports={measure:{valType:"data_array",dflt:[],editType:"calc"},base:{valType:"number",dflt:null,arrayOk:!1,editType:"calc"},x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,hovertext:n.hovertext,hovertemplate:o({},{keys:l.eventDataKeys}),hoverinfo:c({},i.hoverinfo,{flags:["name","x","y","text","initial","delta","final"]}),textinfo:{valType:"flaglist",flags:["label","text","initial","delta","final"],extras:["none"],editType:"plot",arrayOk:!1},texttemplate:s({editType:"plot"},{keys:l.eventDataKeys.concat(["label"])}),text:n.text,textposition:n.textposition,insidetextanchor:n.insidetextanchor,textangle:n.textangle,textfont:n.textfont,insidetextfont:n.insidetextfont,outsidetextfont:n.outsidetextfont,constraintext:n.constraintext,cliponaxis:n.cliponaxis,orientation:n.orientation,offset:n.offset,width:n.width,increasing:h(),decreasing:h(),totals:h(),connector:{line:{color:c({},a.color,{dflt:u.defaultLine}),width:c({},a.width,{editType:"plot"}),dash:a.dash,editType:"plot"},mode:{valType:"enumerated",values:["spanning","between"],dflt:"between",editType:"plot"},visible:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup}},{"../../components/color":591,"../../lib/extend":708,"../../plots/attributes":762,"../../plots/template_attributes":841,"../bar/attributes":856,"../scatter/attributes":1120,"./constants":1287}],1286:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),a=t("../../lib").mergeArray,i=t("../scatter/calc_selection"),o=t("../../constants/numerical").BADNUM;function s(t){return"a"===t||"absolute"===t}function l(t){return"t"===t||"total"===t}e.exports=function(t,e){var r,c,u=n.getFromId(t,e.xaxis||"x"),h=n.getFromId(t,e.yaxis||"y");"h"===e.orientation?(r=u.makeCalcdata(e,"x"),c=h.makeCalcdata(e,"y")):(r=h.makeCalcdata(e,"y"),c=u.makeCalcdata(e,"x"));for(var f,p=Math.min(c.length,r.length),d=new Array(p),g=0,v=!1,m=0;m<p;m++){var y=r[m]||0,x=!1;(r[m]!==o||l(e.measure[m])||s(e.measure[m]))&&m+1<p&&(r[m+1]!==o||l(e.measure[m+1])||s(e.measure[m+1]))&&(x=!0);var b=d[m]={i:m,p:c[m],s:y,rawS:y,cNext:x};s(e.measure[m])?(g=b.s,b.isSum=!0,b.dir="totals",b.s=g):l(e.measure[m])?(b.isSum=!0,b.dir="totals",b.s=g):(b.isSum=!1,b.dir=b.rawS<0?"decreasing":"increasing",f=b.s,b.s=g+f,g+=f),"totals"===b.dir&&(v=!0),e.ids&&(b.id=String(e.ids[m])),b.v=(e.base||0)+g}return d.length&&(d[0].hasTotals=v),a(e.text,d,"tx"),a(e.hovertext,d,"htx"),i(d,e),d}},{"../../constants/numerical":693,"../../lib":717,"../../plots/cartesian/axes":765,"../scatter/calc_selection":1122}],1287:[function(t,e,r){"use strict";e.exports={eventDataKeys:["initial","delta","final"]}},{}],1288:[function(t,e,r){"use strict";var n=t("../bar/cross_trace_calc").setGroupPositions;e.exports=function(t,e){var r,a,i=t._fullLayout,o=t._fullData,s=t.calcdata,l=e.xaxis,c=e.yaxis,u=[],h=[],f=[];for(a=0;a<o.length;a++){var p=o[a];!0===p.visible&&p.xaxis===l._id&&p.yaxis===c._id&&"waterfall"===p.type&&(r=s[a],"h"===p.orientation?f.push(r):h.push(r),u.push(r))}var d={mode:i.waterfallmode,norm:i.waterfallnorm,gap:i.waterfallgap,groupgap:i.waterfallgroupgap};for(n(t,l,c,h,d),n(t,c,l,f,d),a=0;a<u.length;a++){r=u[a];for(var g=0;g<r.length;g++){var v=r[g];!1===v.isSum&&(v.s0+=0===g?0:r[g-1].s),g+1<r.length&&(r[g].nextP0=r[g+1].p0,r[g].nextS0=r[g+1].s0)}}}},{"../bar/cross_trace_calc":859}],1289:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("../bar/defaults").handleGroupingDefaults,i=t("../bar/defaults").handleText,o=t("../scatter/xy_defaults"),s=t("./attributes"),l=t("../../components/color"),c=t("../../constants/delta.js"),u=c.INCREASING.COLOR,h=c.DECREASING.COLOR,f="#4499FF";function p(t,e,r){t(e+".marker.color",r),t(e+".marker.line.color",l.defaultLine),t(e+".marker.line.width")}e.exports={supplyDefaults:function(t,e,r,a){function l(r,a){return n.coerce(t,e,s,r,a)}if(o(t,e,a,l)){l("measure"),l("orientation",e.x&&!e.y?"h":"v"),l("base"),l("offset"),l("width"),l("text"),l("hovertext"),l("hovertemplate");var c=l("textposition");i(t,e,a,l,c,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),"none"!==e.textposition&&(l("texttemplate"),e.texttemplate||l("textinfo")),p(l,"increasing",u),p(l,"decreasing",h),p(l,"totals",f),l("connector.visible")&&(l("connector.mode"),l("connector.line.width")&&(l("connector.line.color"),l("connector.line.dash")))}else e.visible=!1},crossTraceDefaults:function(t,e){var r,i;function o(t){return n.coerce(i._input,i,s,t)}if("group"===e.waterfallmode)for(var l=0;l<t.length;l++)r=(i=t[l])._input,a(r,i,e,o)}}},{"../../components/color":591,"../../constants/delta.js":687,"../../lib":717,"../bar/defaults":860,"../scatter/xy_defaults":1146,"./attributes":1285}],1290:[function(t,e,r){"use strict";e.exports=function(t,e){return t.x="xVal"in e?e.xVal:e.x,t.y="yVal"in e?e.yVal:e.y,"initial"in e&&(t.initial=e.initial),"delta"in e&&(t.delta=e.delta),"final"in e&&(t.final=e.final),e.xa&&(t.xaxis=e.xa),e.ya&&(t.yaxis=e.ya),t}},{}],1291:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes").hoverLabelText,a=t("../../components/color").opacity,i=t("../bar/hover").hoverOnBars,o=t("../../constants/delta.js"),s=o.INCREASING.SYMBOL,l=o.DECREASING.SYMBOL;e.exports=function(t,e,r,o){var c=i(t,e,r,o);if(c){var u=c.cd,h=u[0].trace,f="h"===h.orientation,p=f?t.xa:t.ya,d=u[c.index],g=d.isSum?d.b+d.s:d.rawS;if(!d.isSum){c.initial=d.b+d.s-g,c.delta=g,c.final=c.initial+c.delta;var v=w(Math.abs(c.delta));c.deltaLabel=g<0?"("+v+")":v,c.finalLabel=w(c.final),c.initialLabel=w(c.initial)}var m=d.hi||h.hoverinfo,y=[];if(m&&"none"!==m&&"skip"!==m){var x="all"===m,b=m.split("+"),_=function(t){return x||-1!==b.indexOf(t)};d.isSum||(!_("final")||_(f?"x":"y")||y.push(c.finalLabel),_("delta")&&(g<0?y.push(c.deltaLabel+" "+l):y.push(c.deltaLabel+" "+s)),_("initial")&&y.push("Initial: "+c.initialLabel))}return y.length&&(c.extraText=y.join("<br>")),c.color=function(t,e){var r=t[e.dir].marker,n=r.color,i=r.line.color,o=r.line.width;if(a(n))return n;if(a(i)&&o)return i}(h,d),[c]}function w(t){return n(p,t)}}},{"../../components/color":591,"../../constants/delta.js":687,"../../plots/cartesian/axes":765,"../bar/hover":863}],1292:[function(t,e,r){"use strict";e.exports={attributes:t("./attributes"),layoutAttributes:t("./layout_attributes"),supplyDefaults:t("./defaults").supplyDefaults,crossTraceDefaults:t("./defaults").crossTraceDefaults,supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc"),crossTraceCalc:t("./cross_trace_calc"),plot:t("./plot"),style:t("./style").style,hoverPoints:t("./hover"),eventData:t("./event_data"),selectPoints:t("../bar/select"),moduleType:"trace",name:"waterfall",basePlotModule:t("../../plots/cartesian"),categories:["bar-like","cartesian","svg","oriented","showLegend","zoomScale"],meta:{}}},{"../../plots/cartesian":776,"../bar/select":868,"./attributes":1285,"./calc":1286,"./cross_trace_calc":1288,"./defaults":1289,"./event_data":1290,"./hover":1291,"./layout_attributes":1293,"./layout_defaults":1294,"./plot":1295,"./style":1296}],1293:[function(t,e,r){"use strict";e.exports={waterfallmode:{valType:"enumerated",values:["group","overlay"],dflt:"group",editType:"calc"},waterfallgap:{valType:"number",min:0,max:1,editType:"calc"},waterfallgroupgap:{valType:"number",min:0,max:1,dflt:0,editType:"calc"}}},{}],1294:[function(t,e,r){"use strict";var n=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e,r){var i=!1;function o(r,i){return n.coerce(t,e,a,r,i)}for(var s=0;s<r.length;s++){var l=r[s];if(l.visible&&"waterfall"===l.type){i=!0;break}}i&&(o("waterfallmode"),o("waterfallgap",.2),o("waterfallgroupgap"))}},{"../../lib":717,"./layout_attributes":1293}],1295:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../lib"),i=t("../../components/drawing"),o=t("../../constants/numerical").BADNUM,s=t("../bar/plot"),l=t("../bar/uniform_text").clearMinTextSize;e.exports=function(t,e,r,c){var u=t._fullLayout;l("waterfall",u),s.plot(t,e,r,c,{mode:u.waterfallmode,norm:u.waterfallmode,gap:u.waterfallgap,groupgap:u.waterfallgroupgap}),function(t,e,r,s){var l=e.xaxis,c=e.yaxis;a.makeTraceGroups(s,r,"trace bars").each(function(r){var s=n.select(this),u=r[0].trace,h=a.ensureSingle(s,"g","lines");if(u.connector&&u.connector.visible){var f="h"===u.orientation,p=u.connector.mode,d=h.selectAll("g.line").data(a.identity);d.enter().append("g").classed("line",!0),d.exit().remove();var g=d.size();d.each(function(r,s){if(s===g-1||r.cNext){var u=function(t,e,r,n){var a=[],i=[],o=n?e:r,s=n?r:e;return a[0]=o.c2p(t.s0,!0),i[0]=s.c2p(t.p0,!0),a[1]=o.c2p(t.s1,!0),i[1]=s.c2p(t.p1,!0),a[2]=o.c2p(t.nextS0,!0),i[2]=s.c2p(t.nextP0,!0),n?[a,i]:[i,a]}(r,l,c,f),h=u[0],d=u[1],v="";h[0]!==o&&d[0]!==o&&h[1]!==o&&d[1]!==o&&("spanning"===p&&!r.isSum&&s>0&&(v+=f?"M"+h[0]+","+d[1]+"V"+d[0]:"M"+h[1]+","+d[0]+"H"+h[0]),"between"!==p&&(r.isSum||s<g-1)&&(v+=f?"M"+h[1]+","+d[0]+"V"+d[1]:"M"+h[0]+","+d[1]+"H"+h[1]),h[2]!==o&&d[2]!==o&&(v+=f?"M"+h[1]+","+d[1]+"V"+d[2]:"M"+h[1]+","+d[1]+"H"+h[2])),""===v&&(v="M0,0Z"),a.ensureSingle(n.select(this),"path").attr("d",v).call(i.setClipUrl,e.layerClipId,t)}})}else h.remove()})}(t,e,r,c)}},{"../../components/drawing":612,"../../constants/numerical":693,"../../lib":717,"../bar/plot":867,"../bar/uniform_text":872,d3:165}],1296:[function(t,e,r){"use strict";var n=t("d3"),a=t("../../components/drawing"),i=t("../../components/color"),o=t("../../constants/interactions").DESELECTDIM,s=t("../bar/style"),l=t("../bar/uniform_text").resizeText,c=s.styleTextPoints;e.exports={style:function(t,e,r){var s=r||n.select(t).selectAll("g.waterfalllayer").selectAll("g.trace");l(t,s,"waterfall"),s.style("opacity",function(t){return t[0].trace.opacity}),s.each(function(e){var r=n.select(this),s=e[0].trace;r.selectAll(".point > path").each(function(t){if(!t.isBlank){var e=s[t.dir].marker;n.select(this).call(i.fill,e.color).call(i.stroke,e.line.color).call(a.dashLine,e.line.dash,e.line.width).style("opacity",s.selectedpoints&&!t.selected?o:1)}}),c(r,s,t),r.selectAll(".lines").each(function(){var t=s.connector.line;a.lineGroupStyle(n.select(this).selectAll("path"),t.width,t.color,t.dash)})})}}},{"../../components/color":591,"../../components/drawing":612,"../../constants/interactions":692,"../bar/style":870,"../bar/uniform_text":872,d3:165}],1297:[function(t,e,r){"use strict";var n=t("../plots/cartesian/axes"),a=t("../lib"),i=t("../plot_api/plot_schema"),o=t("./helpers").pointsAccessorFunction,s=t("../constants/numerical").BADNUM;r.moduleType="transform",r.name="aggregate";var l=r.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},groups:{valType:"string",strict:!0,noBlank:!0,arrayOk:!0,dflt:"x",editType:"calc"},aggregations:{_isLinkedToArray:"aggregation",target:{valType:"string",editType:"calc"},func:{valType:"enumerated",values:["count","sum","avg","median","mode","rms","stddev","min","max","first","last","change","range"],dflt:"first",editType:"calc"},funcmode:{valType:"enumerated",values:["sample","population"],dflt:"sample",editType:"calc"},enabled:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc"},editType:"calc"},c=l.aggregations;function u(t,e,r,i){if(i.enabled){for(var o=i.target,l=a.nestedProperty(e,o),c=l.get(),u=function(t,e){var r=t.func,n=e.d2c,a=e.c2d;switch(r){case"count":return h;case"first":return f;case"last":return p;case"sum":return function(t,e){for(var r=0,i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&(r+=o)}return a(r)};case"avg":return function(t,e){for(var r=0,i=0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r+=l,i++)}return i?a(r/i):s};case"min":return function(t,e){for(var r=1/0,i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&(r=Math.min(r,o))}return r===1/0?s:a(r)};case"max":return function(t,e){for(var r=-1/0,i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&(r=Math.max(r,o))}return r===-1/0?s:a(r)};case"range":return function(t,e){for(var r=1/0,i=-1/0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r=Math.min(r,l),i=Math.max(i,l))}return i===-1/0||r===1/0?s:a(i-r)};case"change":return function(t,e){var r=n(t[e[0]]),i=n(t[e[e.length-1]]);return r===s||i===s?s:a(i-r)};case"median":return function(t,e){for(var r=[],i=0;i<e.length;i++){var o=n(t[e[i]]);o!==s&&r.push(o)}if(!r.length)return s;r.sort();var l=(r.length-1)/2;return a((r[Math.floor(l)]+r[Math.ceil(l)])/2)};case"mode":return function(t,e){for(var r={},i=0,o=s,l=0;l<e.length;l++){var c=n(t[e[l]]);if(c!==s){var u=r[c]=(r[c]||0)+1;u>i&&(i=u,o=c)}}return i?a(o):s};case"rms":return function(t,e){for(var r=0,i=0,o=0;o<e.length;o++){var l=n(t[e[o]]);l!==s&&(r+=l*l,i++)}return i?a(Math.sqrt(r/i)):s};case"stddev":return function(e,r){var a,i=0,o=0,l=1,c=s;for(a=0;a<r.length&&c===s;a++)c=n(e[r[a]]);if(c===s)return s;for(;a<r.length;a++){var u=n(e[r[a]]);if(u!==s){var h=u-c;i+=h,o+=h*h,l++}}var f="sample"===t.funcmode?l-1:l;return f?Math.sqrt((o-i*i/l)/f):0}}}(i,n.getDataConversions(t,e,o,c)),d=new Array(r.length),g=0;g<r.length;g++)d[g]=u(c,r[g]);l.set(d),"count"===i.func&&a.pushUnique(e._arrayAttrs,o)}}function h(t,e){return e.length}function f(t,e){return t[e[0]]}function p(t,e){return t[e[e.length-1]]}r.supplyDefaults=function(t,e){var r,n={};function o(e,r){return a.coerce(t,n,l,e,r)}if(!o("enabled"))return n;var s=i.findArrayAttributes(e),u={};for(r=0;r<s.length;r++)u[s[r]]=1;var h=o("groups");if(!Array.isArray(h)){if(!u[h])return n.enabled=!1,n;u[h]=0}var f,p=t.aggregations||[],d=n.aggregations=new Array(p.length);function g(t,e){return a.coerce(p[r],f,c,t,e)}for(r=0;r<p.length;r++){f={_index:r};var v=g("target"),m=g("func");g("enabled")&&v&&(u[v]||"count"===m&&void 0===u[v])?("stddev"===m&&g("funcmode"),u[v]=0,d[r]=f):d[r]={enabled:!1,_index:r}}for(r=0;r<s.length;r++)u[s[r]]&&d.push({target:s[r],func:c.func.dflt,enabled:!0,_index:-1});return n},r.calcTransform=function(t,e,r){if(r.enabled){var n=r.groups,i=a.getTargetArray(e,{target:n});if(i){var s,l,c,h,f={},p={},d=[],g=o(e.transforms,r),v=i.length;for(e._length&&(v=Math.min(v,e._length)),s=0;s<v;s++)void 0===(c=f[l=i[s]])?(f[l]=d.length,h=[s],d.push(h),p[f[l]]=g(s)):(d[c].push(s),p[f[l]]=(p[f[l]]||[]).concat(g(s)));r._indexToPoints=p;var m=r.aggregations;for(s=0;s<m.length;s++)u(t,e,d,m[s]);"string"==typeof n&&u(t,e,d,{target:n,func:"first",enabled:!0}),e._length=d.length}}}},{"../constants/numerical":693,"../lib":717,"../plot_api/plot_schema":754,"../plots/cartesian/axes":765,"./helpers":1300}],1298:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../registry"),i=t("../plots/cartesian/axes"),o=t("./helpers").pointsAccessorFunction,s=t("../constants/filter_ops"),l=s.COMPARISON_OPS,c=s.INTERVAL_OPS,u=s.SET_OPS;r.moduleType="transform",r.name="filter",r.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},target:{valType:"string",strict:!0,noBlank:!0,arrayOk:!0,dflt:"x",editType:"calc"},operation:{valType:"enumerated",values:[].concat(l).concat(c).concat(u),dflt:"=",editType:"calc"},value:{valType:"any",dflt:0,editType:"calc"},preservegaps:{valType:"boolean",dflt:!1,editType:"calc"},editType:"calc"},r.supplyDefaults=function(t){var e={};function i(a,i){return n.coerce(t,e,r.attributes,a,i)}if(i("enabled")){var o=i("target");if(n.isArrayOrTypedArray(o)&&0===o.length)return e.enabled=!1,e;i("preservegaps"),i("operation"),i("value");var s=a.getComponentMethod("calendars","handleDefaults");s(t,e,"valuecalendar",null),s(t,e,"targetcalendar",null)}return e},r.calcTransform=function(t,e,r){if(r.enabled){var a=n.getTargetArray(e,r);if(a){var s=r.target,h=a.length;e._length&&(h=Math.min(h,e._length));var f=r.targetcalendar,p=e._arrayAttrs,d=r.preservegaps;if("string"==typeof s){var g=n.nestedProperty(e,s+"calendar").get();g&&(f=g)}var v,m,y=function(t,e,r){var n=t.operation,a=t.value,i=Array.isArray(a);function o(t){return-1!==t.indexOf(n)}var s,h=function(r){return e(r,0,t.valuecalendar)},f=function(t){return e(t,0,r)};o(l)?s=h(i?a[0]:a):o(c)?s=i?[h(a[0]),h(a[1])]:[h(a),h(a)]:o(u)&&(s=i?a.map(h):[h(a)]);switch(n){case"=":return function(t){return f(t)===s};case"!=":return function(t){return f(t)!==s};case"<":return function(t){return f(t)<s};case"<=":return function(t){return f(t)<=s};case">":return function(t){return f(t)>s};case">=":return function(t){return f(t)>=s};case"[]":return function(t){var e=f(t);return e>=s[0]&&e<=s[1]};case"()":return function(t){var e=f(t);return e>s[0]&&e<s[1]};case"[)":return function(t){var e=f(t);return e>=s[0]&&e<s[1]};case"(]":return function(t){var e=f(t);return e>s[0]&&e<=s[1]};case"][":return function(t){var e=f(t);return e<=s[0]||e>=s[1]};case")(":return function(t){var e=f(t);return e<s[0]||e>s[1]};case"](":return function(t){var e=f(t);return e<=s[0]||e>s[1]};case")[":return function(t){var e=f(t);return e<s[0]||e>=s[1]};case"{}":return function(t){return-1!==s.indexOf(f(t))};case"}{":return function(t){return-1===s.indexOf(f(t))}}}(r,i.getDataToCoordFunc(t,e,s,a),f),x={},b={},_=0;d?(v=function(t){x[t.astr]=n.extendDeep([],t.get()),t.set(new Array(h))},m=function(t,e){var r=x[t.astr][e];t.get()[e]=r}):(v=function(t){x[t.astr]=n.extendDeep([],t.get()),t.set([])},m=function(t,e){var r=x[t.astr][e];t.get().push(r)}),T(v);for(var w=o(e.transforms,r),k=0;k<h;k++){y(a[k])?(T(m,k),b[_++]=w(k)):d&&_++}r._indexToPoints=b,e._length=_}}function T(t,r){for(var a=0;a<p.length;a++){t(n.nestedProperty(e,p[a]),r)}}}},{"../constants/filter_ops":689,"../lib":717,"../plots/cartesian/axes":765,"../registry":846,"./helpers":1300}],1299:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../plot_api/plot_schema"),i=t("../plots/plots"),o=t("./helpers").pointsAccessorFunction;function s(t,e){var r,s,l,c,u,h,f,p,d,g,v=e.transform,m=e.transformIndex,y=t.transforms[m].groups,x=o(t.transforms,v);if(!n.isArrayOrTypedArray(y)||0===y.length)return[t];var b=n.filterUnique(y),_=new Array(b.length),w=y.length,k=a.findArrayAttributes(t),T=v.styles||[],M={};for(r=0;r<T.length;r++)M[T[r].target]=T[r].value;v.styles&&(g=n.keyedContainer(v,"styles","target","value.name"));var A={},S={};for(r=0;r<b.length;r++){A[h=b[r]]=r,S[h]=0,(f=_[r]=n.extendDeepNoArrays({},t))._group=h,f.transforms[m]._indexToPoints={};var E=null;for(g&&(E=g.get(h)),f.name=E||""===E?E:n.templateString(v.nameformat,{trace:t.name,group:h}),p=f.transforms,f.transforms=[],s=0;s<p.length;s++)f.transforms[s]=n.extendDeepNoArrays({},p[s]);for(s=0;s<k.length;s++)n.nestedProperty(f,k[s]).set([])}for(l=0;l<k.length;l++){for(c=k[l],s=0,d=[];s<b.length;s++)d[s]=n.nestedProperty(_[s],c).get();for(u=n.nestedProperty(t,c).get(),s=0;s<w;s++)d[A[y[s]]].push(u[s])}for(s=0;s<w;s++){(f=_[A[y[s]]]).transforms[m]._indexToPoints[S[y[s]]]=x(s),S[y[s]]++}for(r=0;r<b.length;r++)h=b[r],f=_[r],i.clearExpandedTraceDefaultColors(f),f=n.extendDeepNoArrays(f,M[h]||{});return _}r.moduleType="transform",r.name="groupby",r.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},groups:{valType:"data_array",dflt:[],editType:"calc"},nameformat:{valType:"string",editType:"calc"},styles:{_isLinkedToArray:"style",target:{valType:"string",editType:"calc"},value:{valType:"any",dflt:{},editType:"calc",_compareAsJSON:!0},editType:"calc"},editType:"calc"},r.supplyDefaults=function(t,e,a){var i,o={};function s(e,a){return n.coerce(t,o,r.attributes,e,a)}if(!s("enabled"))return o;s("groups"),s("nameformat",a._dataLength>1?"%{group} (%{trace})":"%{group}");var l=t.styles,c=o.styles=[];if(l)for(i=0;i<l.length;i++){var u=c[i]={};n.coerce(l[i],c[i],r.attributes.styles,"target");var h=n.coerce(l[i],c[i],r.attributes.styles,"value");n.isPlainObject(h)?u.value=n.extendDeep({},h):h&&delete u.value}return o},r.transform=function(t,e){var r,n,a,i=[];for(n=0;n<t.length;n++)for(r=s(t[n],e),a=0;a<r.length;a++)i.push(r[a]);return i}},{"../lib":717,"../plot_api/plot_schema":754,"../plots/plots":826,"./helpers":1300}],1300:[function(t,e,r){"use strict";r.pointsAccessorFunction=function(t,e){for(var r,n,a=0;a<t.length&&(r=t[a])!==e;a++)r._indexToPoints&&!1!==r.enabled&&(n=r._indexToPoints);return n?function(t){return n[t]}:function(t){return[t]}}},{}],1301:[function(t,e,r){"use strict";var n=t("../lib"),a=t("../plots/cartesian/axes"),i=t("./helpers").pointsAccessorFunction;r.moduleType="transform",r.name="sort",r.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},target:{valType:"string",strict:!0,noBlank:!0,arrayOk:!0,dflt:"x",editType:"calc"},order:{valType:"enumerated",values:["ascending","descending"],dflt:"ascending",editType:"calc"},editType:"calc"},r.supplyDefaults=function(t){var e={};function a(a,i){return n.coerce(t,e,r.attributes,a,i)}return a("enabled")&&(a("target"),a("order")),e},r.calcTransform=function(t,e,r){if(r.enabled){var o=n.getTargetArray(e,r);if(o){var s=r.target,l=o.length;e._length&&(l=Math.min(l,e._length));var c,u,h=e._arrayAttrs,f=function(t,e,r,n){var a,i=new Array(n),o=new Array(n);for(a=0;a<n;a++)i[a]={v:e[a],i:a};for(i.sort(function(t,e){switch(t.order){case"ascending":return function(t,r){return e(t.v)-e(r.v)};case"descending":return function(t,r){return e(r.v)-e(t.v)}}}(t,r)),a=0;a<n;a++)o[a]=i[a].i;return o}(r,o,a.getDataToCoordFunc(t,e,s,o),l),p=i(e.transforms,r),d={};for(c=0;c<h.length;c++){var g=n.nestedProperty(e,h[c]),v=g.get(),m=new Array(l);for(u=0;u<l;u++)m[u]=v[f[u]];g.set(m)}for(u=0;u<l;u++)d[u]=p(f[u]);r._indexToPoints=d,e._length=l}}}},{"../lib":717,"../plots/cartesian/axes":765,"./helpers":1300}],1302:[function(t,e,r){"use strict";r.version="1.53.0"},{}]},{},[26])(26)}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/js_external/typeahead.bundle.js b/wqflask/wqflask/static/new/js_external/typeahead.bundle.js
new file mode 100644
index 00000000..bb0c8aed
--- /dev/null
+++ b/wqflask/wqflask/static/new/js_external/typeahead.bundle.js
@@ -0,0 +1,2451 @@
+/*!
+ * typeahead.js 0.11.1
+ * https://github.com/twitter/typeahead.js
+ * Copyright 2013-2015 Twitter, Inc. and other contributors; Licensed MIT
+ */
+
+(function(root, factory) {
+ if (typeof define === "function" && define.amd) {
+ define("bloodhound", [ "jquery" ], function(a0) {
+ return root["Bloodhound"] = factory(a0);
+ });
+ } else if (typeof exports === "object") {
+ module.exports = factory(require("jquery"));
+ } else {
+ root["Bloodhound"] = factory(jQuery);
+ }
+})(this, function($) {
+ var _ = function() {
+ "use strict";
+ return {
+ isMsie: function() {
+ return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false;
+ },
+ isBlankString: function(str) {
+ return !str || /^\s*$/.test(str);
+ },
+ escapeRegExChars: function(str) {
+ return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
+ },
+ isString: function(obj) {
+ return typeof obj === "string";
+ },
+ isNumber: function(obj) {
+ return typeof obj === "number";
+ },
+ isArray: $.isArray,
+ isFunction: $.isFunction,
+ isObject: $.isPlainObject,
+ isUndefined: function(obj) {
+ return typeof obj === "undefined";
+ },
+ isElement: function(obj) {
+ return !!(obj && obj.nodeType === 1);
+ },
+ isJQuery: function(obj) {
+ return obj instanceof $;
+ },
+ toStr: function toStr(s) {
+ return _.isUndefined(s) || s === null ? "" : s + "";
+ },
+ bind: $.proxy,
+ each: function(collection, cb) {
+ $.each(collection, reverseArgs);
+ function reverseArgs(index, value) {
+ return cb(value, index);
+ }
+ },
+ map: $.map,
+ filter: $.grep,
+ every: function(obj, test) {
+ var result = true;
+ if (!obj) {
+ return result;
+ }
+ $.each(obj, function(key, val) {
+ if (!(result = test.call(null, val, key, obj))) {
+ return false;
+ }
+ });
+ return !!result;
+ },
+ some: function(obj, test) {
+ var result = false;
+ if (!obj) {
+ return result;
+ }
+ $.each(obj, function(key, val) {
+ if (result = test.call(null, val, key, obj)) {
+ return false;
+ }
+ });
+ return !!result;
+ },
+ mixin: $.extend,
+ identity: function(x) {
+ return x;
+ },
+ clone: function(obj) {
+ return $.extend(true, {}, obj);
+ },
+ getIdGenerator: function() {
+ var counter = 0;
+ return function() {
+ return counter++;
+ };
+ },
+ templatify: function templatify(obj) {
+ return $.isFunction(obj) ? obj : template;
+ function template() {
+ return String(obj);
+ }
+ },
+ defer: function(fn) {
+ setTimeout(fn, 0);
+ },
+ debounce: function(func, wait, immediate) {
+ var timeout, result;
+ return function() {
+ var context = this, args = arguments, later, callNow;
+ later = function() {
+ timeout = null;
+ if (!immediate) {
+ result = func.apply(context, args);
+ }
+ };
+ callNow = immediate && !timeout;
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ if (callNow) {
+ result = func.apply(context, args);
+ }
+ return result;
+ };
+ },
+ throttle: function(func, wait) {
+ var context, args, timeout, result, previous, later;
+ previous = 0;
+ later = function() {
+ previous = new Date();
+ timeout = null;
+ result = func.apply(context, args);
+ };
+ return function() {
+ var now = new Date(), remaining = wait - (now - previous);
+ context = this;
+ args = arguments;
+ if (remaining <= 0) {
+ clearTimeout(timeout);
+ timeout = null;
+ previous = now;
+ result = func.apply(context, args);
+ } else if (!timeout) {
+ timeout = setTimeout(later, remaining);
+ }
+ return result;
+ };
+ },
+ stringify: function(val) {
+ return _.isString(val) ? val : JSON.stringify(val);
+ },
+ noop: function() {}
+ };
+ }();
+ var VERSION = "0.11.1";
+ var tokenizers = function() {
+ "use strict";
+ return {
+ nonword: nonword,
+ whitespace: whitespace,
+ obj: {
+ nonword: getObjTokenizer(nonword),
+ whitespace: getObjTokenizer(whitespace)
+ }
+ };
+ function whitespace(str) {
+ str = _.toStr(str);
+ return str ? str.split(/\s+/) : [];
+ }
+ function nonword(str) {
+ str = _.toStr(str);
+ return str ? str.split(/\W+/) : [];
+ }
+ function getObjTokenizer(tokenizer) {
+ return function setKey(keys) {
+ keys = _.isArray(keys) ? keys : [].slice.call(arguments, 0);
+ return function tokenize(o) {
+ var tokens = [];
+ _.each(keys, function(k) {
+ tokens = tokens.concat(tokenizer(_.toStr(o[k])));
+ });
+ return tokens;
+ };
+ };
+ }
+ }();
+ var LruCache = function() {
+ "use strict";
+ function LruCache(maxSize) {
+ this.maxSize = _.isNumber(maxSize) ? maxSize : 100;
+ this.reset();
+ if (this.maxSize <= 0) {
+ this.set = this.get = $.noop;
+ }
+ }
+ _.mixin(LruCache.prototype, {
+ set: function set(key, val) {
+ var tailItem = this.list.tail, node;
+ if (this.size >= this.maxSize) {
+ this.list.remove(tailItem);
+ delete this.hash[tailItem.key];
+ this.size--;
+ }
+ if (node = this.hash[key]) {
+ node.val = val;
+ this.list.moveToFront(node);
+ } else {
+ node = new Node(key, val);
+ this.list.add(node);
+ this.hash[key] = node;
+ this.size++;
+ }
+ },
+ get: function get(key) {
+ var node = this.hash[key];
+ if (node) {
+ this.list.moveToFront(node);
+ return node.val;
+ }
+ },
+ reset: function reset() {
+ this.size = 0;
+ this.hash = {};
+ this.list = new List();
+ }
+ });
+ function List() {
+ this.head = this.tail = null;
+ }
+ _.mixin(List.prototype, {
+ add: function add(node) {
+ if (this.head) {
+ node.next = this.head;
+ this.head.prev = node;
+ }
+ this.head = node;
+ this.tail = this.tail || node;
+ },
+ remove: function remove(node) {
+ node.prev ? node.prev.next = node.next : this.head = node.next;
+ node.next ? node.next.prev = node.prev : this.tail = node.prev;
+ },
+ moveToFront: function(node) {
+ this.remove(node);
+ this.add(node);
+ }
+ });
+ function Node(key, val) {
+ this.key = key;
+ this.val = val;
+ this.prev = this.next = null;
+ }
+ return LruCache;
+ }();
+ var PersistentStorage = function() {
+ "use strict";
+ var LOCAL_STORAGE;
+ try {
+ LOCAL_STORAGE = window.localStorage;
+ LOCAL_STORAGE.setItem("~~~", "!");
+ LOCAL_STORAGE.removeItem("~~~");
+ } catch (err) {
+ LOCAL_STORAGE = null;
+ }
+ function PersistentStorage(namespace, override) {
+ this.prefix = [ "__", namespace, "__" ].join("");
+ this.ttlKey = "__ttl__";
+ this.keyMatcher = new RegExp("^" + _.escapeRegExChars(this.prefix));
+ this.ls = override || LOCAL_STORAGE;
+ !this.ls && this._noop();
+ }
+ _.mixin(PersistentStorage.prototype, {
+ _prefix: function(key) {
+ return this.prefix + key;
+ },
+ _ttlKey: function(key) {
+ return this._prefix(key) + this.ttlKey;
+ },
+ _noop: function() {
+ this.get = this.set = this.remove = this.clear = this.isExpired = _.noop;
+ },
+ _safeSet: function(key, val) {
+ try {
+ this.ls.setItem(key, val);
+ } catch (err) {
+ if (err.name === "QuotaExceededError") {
+ this.clear();
+ this._noop();
+ }
+ }
+ },
+ get: function(key) {
+ if (this.isExpired(key)) {
+ this.remove(key);
+ }
+ return decode(this.ls.getItem(this._prefix(key)));
+ },
+ set: function(key, val, ttl) {
+ if (_.isNumber(ttl)) {
+ this._safeSet(this._ttlKey(key), encode(now() + ttl));
+ } else {
+ this.ls.removeItem(this._ttlKey(key));
+ }
+ return this._safeSet(this._prefix(key), encode(val));
+ },
+ remove: function(key) {
+ this.ls.removeItem(this._ttlKey(key));
+ this.ls.removeItem(this._prefix(key));
+ return this;
+ },
+ clear: function() {
+ var i, keys = gatherMatchingKeys(this.keyMatcher);
+ for (i = keys.length; i--; ) {
+ this.remove(keys[i]);
+ }
+ return this;
+ },
+ isExpired: function(key) {
+ var ttl = decode(this.ls.getItem(this._ttlKey(key)));
+ return _.isNumber(ttl) && now() > ttl ? true : false;
+ }
+ });
+ return PersistentStorage;
+ function now() {
+ return new Date().getTime();
+ }
+ function encode(val) {
+ return JSON.stringify(_.isUndefined(val) ? null : val);
+ }
+ function decode(val) {
+ return $.parseJSON(val);
+ }
+ function gatherMatchingKeys(keyMatcher) {
+ var i, key, keys = [], len = LOCAL_STORAGE.length;
+ for (i = 0; i < len; i++) {
+ if ((key = LOCAL_STORAGE.key(i)).match(keyMatcher)) {
+ keys.push(key.replace(keyMatcher, ""));
+ }
+ }
+ return keys;
+ }
+ }();
+ var Transport = function() {
+ "use strict";
+ var pendingRequestsCount = 0, pendingRequests = {}, maxPendingRequests = 6, sharedCache = new LruCache(10);
+ function Transport(o) {
+ o = o || {};
+ this.cancelled = false;
+ this.lastReq = null;
+ this._send = o.transport;
+ this._get = o.limiter ? o.limiter(this._get) : this._get;
+ this._cache = o.cache === false ? new LruCache(0) : sharedCache;
+ }
+ Transport.setMaxPendingRequests = function setMaxPendingRequests(num) {
+ maxPendingRequests = num;
+ };
+ Transport.resetCache = function resetCache() {
+ sharedCache.reset();
+ };
+ _.mixin(Transport.prototype, {
+ _fingerprint: function fingerprint(o) {
+ o = o || {};
+ return o.url + o.type + $.param(o.data || {});
+ },
+ _get: function(o, cb) {
+ var that = this, fingerprint, jqXhr;
+ fingerprint = this._fingerprint(o);
+ if (this.cancelled || fingerprint !== this.lastReq) {
+ return;
+ }
+ if (jqXhr = pendingRequests[fingerprint]) {
+ jqXhr.done(done).fail(fail);
+ } else if (pendingRequestsCount < maxPendingRequests) {
+ pendingRequestsCount++;
+ pendingRequests[fingerprint] = this._send(o).done(done).fail(fail).always(always);
+ } else {
+ this.onDeckRequestArgs = [].slice.call(arguments, 0);
+ }
+ function done(resp) {
+ cb(null, resp);
+ that._cache.set(fingerprint, resp);
+ }
+ function fail() {
+ cb(true);
+ }
+ function always() {
+ pendingRequestsCount--;
+ delete pendingRequests[fingerprint];
+ if (that.onDeckRequestArgs) {
+ that._get.apply(that, that.onDeckRequestArgs);
+ that.onDeckRequestArgs = null;
+ }
+ }
+ },
+ get: function(o, cb) {
+ var resp, fingerprint;
+ cb = cb || $.noop;
+ o = _.isString(o) ? {
+ url: o
+ } : o || {};
+ fingerprint = this._fingerprint(o);
+ this.cancelled = false;
+ this.lastReq = fingerprint;
+ if (resp = this._cache.get(fingerprint)) {
+ cb(null, resp);
+ } else {
+ this._get(o, cb);
+ }
+ },
+ cancel: function() {
+ this.cancelled = true;
+ }
+ });
+ return Transport;
+ }();
+ var SearchIndex = window.SearchIndex = function() {
+ "use strict";
+ var CHILDREN = "c", IDS = "i";
+ function SearchIndex(o) {
+ o = o || {};
+ if (!o.datumTokenizer || !o.queryTokenizer) {
+ $.error("datumTokenizer and queryTokenizer are both required");
+ }
+ this.identify = o.identify || _.stringify;
+ this.datumTokenizer = o.datumTokenizer;
+ this.queryTokenizer = o.queryTokenizer;
+ this.reset();
+ }
+ _.mixin(SearchIndex.prototype, {
+ bootstrap: function bootstrap(o) {
+ this.datums = o.datums;
+ this.trie = o.trie;
+ },
+ add: function(data) {
+ var that = this;
+ data = _.isArray(data) ? data : [ data ];
+ _.each(data, function(datum) {
+ var id, tokens;
+ that.datums[id = that.identify(datum)] = datum;
+ tokens = normalizeTokens(that.datumTokenizer(datum));
+ _.each(tokens, function(token) {
+ var node, chars, ch;
+ node = that.trie;
+ chars = token.split("");
+ while (ch = chars.shift()) {
+ node = node[CHILDREN][ch] || (node[CHILDREN][ch] = newNode());
+ node[IDS].push(id);
+ }
+ });
+ });
+ },
+ get: function get(ids) {
+ var that = this;
+ return _.map(ids, function(id) {
+ return that.datums[id];
+ });
+ },
+ search: function search(query) {
+ var that = this, tokens, matches;
+ tokens = normalizeTokens(this.queryTokenizer(query));
+ _.each(tokens, function(token) {
+ var node, chars, ch, ids;
+ if (matches && matches.length === 0) {
+ return false;
+ }
+ node = that.trie;
+ chars = token.split("");
+ while (node && (ch = chars.shift())) {
+ node = node[CHILDREN][ch];
+ }
+ if (node && chars.length === 0) {
+ ids = node[IDS].slice(0);
+ matches = matches ? getIntersection(matches, ids) : ids;
+ } else {
+ matches = [];
+ return false;
+ }
+ });
+ return matches ? _.map(unique(matches), function(id) {
+ return that.datums[id];
+ }) : [];
+ },
+ all: function all() {
+ var values = [];
+ for (var key in this.datums) {
+ values.push(this.datums[key]);
+ }
+ return values;
+ },
+ reset: function reset() {
+ this.datums = {};
+ this.trie = newNode();
+ },
+ serialize: function serialize() {
+ return {
+ datums: this.datums,
+ trie: this.trie
+ };
+ }
+ });
+ return SearchIndex;
+ function normalizeTokens(tokens) {
+ tokens = _.filter(tokens, function(token) {
+ return !!token;
+ });
+ tokens = _.map(tokens, function(token) {
+ return token.toLowerCase();
+ });
+ return tokens;
+ }
+ function newNode() {
+ var node = {};
+ node[IDS] = [];
+ node[CHILDREN] = {};
+ return node;
+ }
+ function unique(array) {
+ var seen = {}, uniques = [];
+ for (var i = 0, len = array.length; i < len; i++) {
+ if (!seen[array[i]]) {
+ seen[array[i]] = true;
+ uniques.push(array[i]);
+ }
+ }
+ return uniques;
+ }
+ function getIntersection(arrayA, arrayB) {
+ var ai = 0, bi = 0, intersection = [];
+ arrayA = arrayA.sort();
+ arrayB = arrayB.sort();
+ var lenArrayA = arrayA.length, lenArrayB = arrayB.length;
+ while (ai < lenArrayA && bi < lenArrayB) {
+ if (arrayA[ai] < arrayB[bi]) {
+ ai++;
+ } else if (arrayA[ai] > arrayB[bi]) {
+ bi++;
+ } else {
+ intersection.push(arrayA[ai]);
+ ai++;
+ bi++;
+ }
+ }
+ return intersection;
+ }
+ }();
+ var Prefetch = function() {
+ "use strict";
+ var keys;
+ keys = {
+ data: "data",
+ protocol: "protocol",
+ thumbprint: "thumbprint"
+ };
+ function Prefetch(o) {
+ this.url = o.url;
+ this.ttl = o.ttl;
+ this.cache = o.cache;
+ this.prepare = o.prepare;
+ this.transform = o.transform;
+ this.transport = o.transport;
+ this.thumbprint = o.thumbprint;
+ this.storage = new PersistentStorage(o.cacheKey);
+ }
+ _.mixin(Prefetch.prototype, {
+ _settings: function settings() {
+ return {
+ url: this.url,
+ type: "GET",
+ dataType: "json"
+ };
+ },
+ store: function store(data) {
+ if (!this.cache) {
+ return;
+ }
+ this.storage.set(keys.data, data, this.ttl);
+ this.storage.set(keys.protocol, location.protocol, this.ttl);
+ this.storage.set(keys.thumbprint, this.thumbprint, this.ttl);
+ },
+ fromCache: function fromCache() {
+ var stored = {}, isExpired;
+ if (!this.cache) {
+ return null;
+ }
+ stored.data = this.storage.get(keys.data);
+ stored.protocol = this.storage.get(keys.protocol);
+ stored.thumbprint = this.storage.get(keys.thumbprint);
+ isExpired = stored.thumbprint !== this.thumbprint || stored.protocol !== location.protocol;
+ return stored.data && !isExpired ? stored.data : null;
+ },
+ fromNetwork: function(cb) {
+ var that = this, settings;
+ if (!cb) {
+ return;
+ }
+ settings = this.prepare(this._settings());
+ this.transport(settings).fail(onError).done(onResponse);
+ function onError() {
+ cb(true);
+ }
+ function onResponse(resp) {
+ cb(null, that.transform(resp));
+ }
+ },
+ clear: function clear() {
+ this.storage.clear();
+ return this;
+ }
+ });
+ return Prefetch;
+ }();
+ var Remote = function() {
+ "use strict";
+ function Remote(o) {
+ this.url = o.url;
+ this.prepare = o.prepare;
+ this.transform = o.transform;
+ this.transport = new Transport({
+ cache: o.cache,
+ limiter: o.limiter,
+ transport: o.transport
+ });
+ }
+ _.mixin(Remote.prototype, {
+ _settings: function settings() {
+ return {
+ url: this.url,
+ type: "GET",
+ dataType: "json"
+ };
+ },
+ get: function get(query, cb) {
+ var that = this, settings;
+ if (!cb) {
+ return;
+ }
+ query = query || "";
+ settings = this.prepare(query, this._settings());
+ return this.transport.get(settings, onResponse);
+ function onResponse(err, resp) {
+ err ? cb([]) : cb(that.transform(resp));
+ }
+ },
+ cancelLastRequest: function cancelLastRequest() {
+ this.transport.cancel();
+ }
+ });
+ return Remote;
+ }();
+ var oParser = function() {
+ "use strict";
+ return function parse(o) {
+ var defaults, sorter;
+ defaults = {
+ initialize: true,
+ identify: _.stringify,
+ datumTokenizer: null,
+ queryTokenizer: null,
+ sufficient: 5,
+ sorter: null,
+ local: [],
+ prefetch: null,
+ remote: null
+ };
+ o = _.mixin(defaults, o || {});
+ !o.datumTokenizer && $.error("datumTokenizer is required");
+ !o.queryTokenizer && $.error("queryTokenizer is required");
+ sorter = o.sorter;
+ o.sorter = sorter ? function(x) {
+ return x.sort(sorter);
+ } : _.identity;
+ o.local = _.isFunction(o.local) ? o.local() : o.local;
+ o.prefetch = parsePrefetch(o.prefetch);
+ o.remote = parseRemote(o.remote);
+ return o;
+ };
+ function parsePrefetch(o) {
+ var defaults;
+ if (!o) {
+ return null;
+ }
+ defaults = {
+ url: null,
+ ttl: 24 * 60 * 60 * 1e3,
+ cache: true,
+ cacheKey: null,
+ thumbprint: "",
+ prepare: _.identity,
+ transform: _.identity,
+ transport: null
+ };
+ o = _.isString(o) ? {
+ url: o
+ } : o;
+ o = _.mixin(defaults, o);
+ !o.url && $.error("prefetch requires url to be set");
+ o.transform = o.filter || o.transform;
+ o.cacheKey = o.cacheKey || o.url;
+ o.thumbprint = VERSION + o.thumbprint;
+ o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax;
+ return o;
+ }
+ function parseRemote(o) {
+ var defaults;
+ if (!o) {
+ return;
+ }
+ defaults = {
+ url: null,
+ cache: true,
+ prepare: null,
+ replace: null,
+ wildcard: null,
+ limiter: null,
+ rateLimitBy: "debounce",
+ rateLimitWait: 300,
+ transform: _.identity,
+ transport: null
+ };
+ o = _.isString(o) ? {
+ url: o
+ } : o;
+ o = _.mixin(defaults, o);
+ !o.url && $.error("remote requires url to be set");
+ o.transform = o.filter || o.transform;
+ o.prepare = toRemotePrepare(o);
+ o.limiter = toLimiter(o);
+ o.transport = o.transport ? callbackToDeferred(o.transport) : $.ajax;
+ delete o.replace;
+ delete o.wildcard;
+ delete o.rateLimitBy;
+ delete o.rateLimitWait;
+ return o;
+ }
+ function toRemotePrepare(o) {
+ var prepare, replace, wildcard;
+ prepare = o.prepare;
+ replace = o.replace;
+ wildcard = o.wildcard;
+ if (prepare) {
+ return prepare;
+ }
+ if (replace) {
+ prepare = prepareByReplace;
+ } else if (o.wildcard) {
+ prepare = prepareByWildcard;
+ } else {
+ prepare = idenityPrepare;
+ }
+ return prepare;
+ function prepareByReplace(query, settings) {
+ settings.url = replace(settings.url, query);
+ return settings;
+ }
+ function prepareByWildcard(query, settings) {
+ settings.url = settings.url.replace(wildcard, encodeURIComponent(query));
+ return settings;
+ }
+ function idenityPrepare(query, settings) {
+ return settings;
+ }
+ }
+ function toLimiter(o) {
+ var limiter, method, wait;
+ limiter = o.limiter;
+ method = o.rateLimitBy;
+ wait = o.rateLimitWait;
+ if (!limiter) {
+ limiter = /^throttle$/i.test(method) ? throttle(wait) : debounce(wait);
+ }
+ return limiter;
+ function debounce(wait) {
+ return function debounce(fn) {
+ return _.debounce(fn, wait);
+ };
+ }
+ function throttle(wait) {
+ return function throttle(fn) {
+ return _.throttle(fn, wait);
+ };
+ }
+ }
+ function callbackToDeferred(fn) {
+ return function wrapper(o) {
+ var deferred = $.Deferred();
+ fn(o, onSuccess, onError);
+ return deferred;
+ function onSuccess(resp) {
+ _.defer(function() {
+ deferred.resolve(resp);
+ });
+ }
+ function onError(err) {
+ _.defer(function() {
+ deferred.reject(err);
+ });
+ }
+ };
+ }
+ }();
+ var Bloodhound = function() {
+ "use strict";
+ var old;
+ old = window && window.Bloodhound;
+ function Bloodhound(o) {
+ o = oParser(o);
+ this.sorter = o.sorter;
+ this.identify = o.identify;
+ this.sufficient = o.sufficient;
+ this.local = o.local;
+ this.remote = o.remote ? new Remote(o.remote) : null;
+ this.prefetch = o.prefetch ? new Prefetch(o.prefetch) : null;
+ this.index = new SearchIndex({
+ identify: this.identify,
+ datumTokenizer: o.datumTokenizer,
+ queryTokenizer: o.queryTokenizer
+ });
+ o.initialize !== false && this.initialize();
+ }
+ Bloodhound.noConflict = function noConflict() {
+ window && (window.Bloodhound = old);
+ return Bloodhound;
+ };
+ Bloodhound.tokenizers = tokenizers;
+ _.mixin(Bloodhound.prototype, {
+ __ttAdapter: function ttAdapter() {
+ var that = this;
+ return this.remote ? withAsync : withoutAsync;
+ function withAsync(query, sync, async) {
+ return that.search(query, sync, async);
+ }
+ function withoutAsync(query, sync) {
+ return that.search(query, sync);
+ }
+ },
+ _loadPrefetch: function loadPrefetch() {
+ var that = this, deferred, serialized;
+ deferred = $.Deferred();
+ if (!this.prefetch) {
+ deferred.resolve();
+ } else if (serialized = this.prefetch.fromCache()) {
+ this.index.bootstrap(serialized);
+ deferred.resolve();
+ } else {
+ this.prefetch.fromNetwork(done);
+ }
+ return deferred.promise();
+ function done(err, data) {
+ if (err) {
+ return deferred.reject();
+ }
+ that.add(data);
+ that.prefetch.store(that.index.serialize());
+ deferred.resolve();
+ }
+ },
+ _initialize: function initialize() {
+ var that = this, deferred;
+ this.clear();
+ (this.initPromise = this._loadPrefetch()).done(addLocalToIndex);
+ return this.initPromise;
+ function addLocalToIndex() {
+ that.add(that.local);
+ }
+ },
+ initialize: function initialize(force) {
+ return !this.initPromise || force ? this._initialize() : this.initPromise;
+ },
+ add: function add(data) {
+ this.index.add(data);
+ return this;
+ },
+ get: function get(ids) {
+ ids = _.isArray(ids) ? ids : [].slice.call(arguments);
+ return this.index.get(ids);
+ },
+ search: function search(query, sync, async) {
+ var that = this, local;
+ local = this.sorter(this.index.search(query));
+ sync(this.remote ? local.slice() : local);
+ if (this.remote && local.length < this.sufficient) {
+ this.remote.get(query, processRemote);
+ } else if (this.remote) {
+ this.remote.cancelLastRequest();
+ }
+ return this;
+ function processRemote(remote) {
+ var nonDuplicates = [];
+ _.each(remote, function(r) {
+ !_.some(local, function(l) {
+ return that.identify(r) === that.identify(l);
+ }) && nonDuplicates.push(r);
+ });
+ async && async(nonDuplicates);
+ }
+ },
+ all: function all() {
+ return this.index.all();
+ },
+ clear: function clear() {
+ this.index.reset();
+ return this;
+ },
+ clearPrefetchCache: function clearPrefetchCache() {
+ this.prefetch && this.prefetch.clear();
+ return this;
+ },
+ clearRemoteCache: function clearRemoteCache() {
+ Transport.resetCache();
+ return this;
+ },
+ ttAdapter: function ttAdapter() {
+ return this.__ttAdapter();
+ }
+ });
+ return Bloodhound;
+ }();
+ return Bloodhound;
+});
+
+(function(root, factory) {
+ if (typeof define === "function" && define.amd) {
+ define("typeahead.js", [ "jquery" ], function(a0) {
+ return factory(a0);
+ });
+ } else if (typeof exports === "object") {
+ module.exports = factory(require("jquery"));
+ } else {
+ factory(jQuery);
+ }
+})(this, function($) {
+ var _ = function() {
+ "use strict";
+ return {
+ isMsie: function() {
+ return /(msie|trident)/i.test(navigator.userAgent) ? navigator.userAgent.match(/(msie |rv:)(\d+(.\d+)?)/i)[2] : false;
+ },
+ isBlankString: function(str) {
+ return !str || /^\s*$/.test(str);
+ },
+ escapeRegExChars: function(str) {
+ return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
+ },
+ isString: function(obj) {
+ return typeof obj === "string";
+ },
+ isNumber: function(obj) {
+ return typeof obj === "number";
+ },
+ isArray: $.isArray,
+ isFunction: $.isFunction,
+ isObject: $.isPlainObject,
+ isUndefined: function(obj) {
+ return typeof obj === "undefined";
+ },
+ isElement: function(obj) {
+ return !!(obj && obj.nodeType === 1);
+ },
+ isJQuery: function(obj) {
+ return obj instanceof $;
+ },
+ toStr: function toStr(s) {
+ return _.isUndefined(s) || s === null ? "" : s + "";
+ },
+ bind: $.proxy,
+ each: function(collection, cb) {
+ $.each(collection, reverseArgs);
+ function reverseArgs(index, value) {
+ return cb(value, index);
+ }
+ },
+ map: $.map,
+ filter: $.grep,
+ every: function(obj, test) {
+ var result = true;
+ if (!obj) {
+ return result;
+ }
+ $.each(obj, function(key, val) {
+ if (!(result = test.call(null, val, key, obj))) {
+ return false;
+ }
+ });
+ return !!result;
+ },
+ some: function(obj, test) {
+ var result = false;
+ if (!obj) {
+ return result;
+ }
+ $.each(obj, function(key, val) {
+ if (result = test.call(null, val, key, obj)) {
+ return false;
+ }
+ });
+ return !!result;
+ },
+ mixin: $.extend,
+ identity: function(x) {
+ return x;
+ },
+ clone: function(obj) {
+ return $.extend(true, {}, obj);
+ },
+ getIdGenerator: function() {
+ var counter = 0;
+ return function() {
+ return counter++;
+ };
+ },
+ templatify: function templatify(obj) {
+ return $.isFunction(obj) ? obj : template;
+ function template() {
+ return String(obj);
+ }
+ },
+ defer: function(fn) {
+ setTimeout(fn, 0);
+ },
+ debounce: function(func, wait, immediate) {
+ var timeout, result;
+ return function() {
+ var context = this, args = arguments, later, callNow;
+ later = function() {
+ timeout = null;
+ if (!immediate) {
+ result = func.apply(context, args);
+ }
+ };
+ callNow = immediate && !timeout;
+ clearTimeout(timeout);
+ timeout = setTimeout(later, wait);
+ if (callNow) {
+ result = func.apply(context, args);
+ }
+ return result;
+ };
+ },
+ throttle: function(func, wait) {
+ var context, args, timeout, result, previous, later;
+ previous = 0;
+ later = function() {
+ previous = new Date();
+ timeout = null;
+ result = func.apply(context, args);
+ };
+ return function() {
+ var now = new Date(), remaining = wait - (now - previous);
+ context = this;
+ args = arguments;
+ if (remaining <= 0) {
+ clearTimeout(timeout);
+ timeout = null;
+ previous = now;
+ result = func.apply(context, args);
+ } else if (!timeout) {
+ timeout = setTimeout(later, remaining);
+ }
+ return result;
+ };
+ },
+ stringify: function(val) {
+ return _.isString(val) ? val : JSON.stringify(val);
+ },
+ noop: function() {}
+ };
+ }();
+ var WWW = function() {
+ "use strict";
+ var defaultClassNames = {
+ wrapper: "twitter-typeahead",
+ input: "tt-input",
+ hint: "tt-hint",
+ menu: "tt-menu",
+ dataset: "tt-dataset",
+ suggestion: "tt-suggestion",
+ selectable: "tt-selectable",
+ empty: "tt-empty",
+ open: "tt-open",
+ cursor: "tt-cursor",
+ highlight: "tt-highlight"
+ };
+ return build;
+ function build(o) {
+ var www, classes;
+ classes = _.mixin({}, defaultClassNames, o);
+ www = {
+ css: buildCss(),
+ classes: classes,
+ html: buildHtml(classes),
+ selectors: buildSelectors(classes)
+ };
+ return {
+ css: www.css,
+ html: www.html,
+ classes: www.classes,
+ selectors: www.selectors,
+ mixin: function(o) {
+ _.mixin(o, www);
+ }
+ };
+ }
+ function buildHtml(c) {
+ return {
+ wrapper: '<span class="' + c.wrapper + '"></span>',
+ menu: '<div class="' + c.menu + '"></div>'
+ };
+ }
+ function buildSelectors(classes) {
+ var selectors = {};
+ _.each(classes, function(v, k) {
+ selectors[k] = "." + v;
+ });
+ return selectors;
+ }
+ function buildCss() {
+ var css = {
+ wrapper: {
+ position: "relative",
+ display: "inline-block"
+ },
+ hint: {
+ position: "absolute",
+ top: "0",
+ left: "0",
+ borderColor: "transparent",
+ boxShadow: "none",
+ opacity: "1"
+ },
+ input: {
+ position: "relative",
+ verticalAlign: "top",
+ backgroundColor: "transparent"
+ },
+ inputWithNoHint: {
+ position: "relative",
+ verticalAlign: "top"
+ },
+ menu: {
+ position: "absolute",
+ top: "100%",
+ left: "0",
+ zIndex: "100",
+ display: "none"
+ },
+ ltr: {
+ left: "0",
+ right: "auto"
+ },
+ rtl: {
+ left: "auto",
+ right: " 0"
+ }
+ };
+ if (_.isMsie()) {
+ _.mixin(css.input, {
+ backgroundImage: "url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)"
+ });
+ }
+ return css;
+ }
+ }();
+ var EventBus = function() {
+ "use strict";
+ var namespace, deprecationMap;
+ namespace = "typeahead:";
+ deprecationMap = {
+ render: "rendered",
+ cursorchange: "cursorchanged",
+ select: "selected",
+ autocomplete: "autocompleted"
+ };
+ function EventBus(o) {
+ if (!o || !o.el) {
+ $.error("EventBus initialized without el");
+ }
+ this.$el = $(o.el);
+ }
+ _.mixin(EventBus.prototype, {
+ _trigger: function(type, args) {
+ var $e;
+ $e = $.Event(namespace + type);
+ (args = args || []).unshift($e);
+ this.$el.trigger.apply(this.$el, args);
+ return $e;
+ },
+ before: function(type) {
+ var args, $e;
+ args = [].slice.call(arguments, 1);
+ $e = this._trigger("before" + type, args);
+ return $e.isDefaultPrevented();
+ },
+ trigger: function(type) {
+ var deprecatedType;
+ this._trigger(type, [].slice.call(arguments, 1));
+ if (deprecatedType = deprecationMap[type]) {
+ this._trigger(deprecatedType, [].slice.call(arguments, 1));
+ }
+ }
+ });
+ return EventBus;
+ }();
+ var EventEmitter = function() {
+ "use strict";
+ var splitter = /\s+/, nextTick = getNextTick();
+ return {
+ onSync: onSync,
+ onAsync: onAsync,
+ off: off,
+ trigger: trigger
+ };
+ function on(method, types, cb, context) {
+ var type;
+ if (!cb) {
+ return this;
+ }
+ types = types.split(splitter);
+ cb = context ? bindContext(cb, context) : cb;
+ this._callbacks = this._callbacks || {};
+ while (type = types.shift()) {
+ this._callbacks[type] = this._callbacks[type] || {
+ sync: [],
+ async: []
+ };
+ this._callbacks[type][method].push(cb);
+ }
+ return this;
+ }
+ function onAsync(types, cb, context) {
+ return on.call(this, "async", types, cb, context);
+ }
+ function onSync(types, cb, context) {
+ return on.call(this, "sync", types, cb, context);
+ }
+ function off(types) {
+ var type;
+ if (!this._callbacks) {
+ return this;
+ }
+ types = types.split(splitter);
+ while (type = types.shift()) {
+ delete this._callbacks[type];
+ }
+ return this;
+ }
+ function trigger(types) {
+ var type, callbacks, args, syncFlush, asyncFlush;
+ if (!this._callbacks) {
+ return this;
+ }
+ types = types.split(splitter);
+ args = [].slice.call(arguments, 1);
+ while ((type = types.shift()) && (callbacks = this._callbacks[type])) {
+ syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args));
+ asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args));
+ syncFlush() && nextTick(asyncFlush);
+ }
+ return this;
+ }
+ function getFlush(callbacks, context, args) {
+ return flush;
+ function flush() {
+ var cancelled;
+ for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {
+ cancelled = callbacks[i].apply(context, args) === false;
+ }
+ return !cancelled;
+ }
+ }
+ function getNextTick() {
+ var nextTickFn;
+ if (window.setImmediate) {
+ nextTickFn = function nextTickSetImmediate(fn) {
+ setImmediate(function() {
+ fn();
+ });
+ };
+ } else {
+ nextTickFn = function nextTickSetTimeout(fn) {
+ setTimeout(function() {
+ fn();
+ }, 0);
+ };
+ }
+ return nextTickFn;
+ }
+ function bindContext(fn, context) {
+ return fn.bind ? fn.bind(context) : function() {
+ fn.apply(context, [].slice.call(arguments, 0));
+ };
+ }
+ }();
+ var highlight = function(doc) {
+ "use strict";
+ var defaults = {
+ node: null,
+ pattern: null,
+ tagName: "strong",
+ className: null,
+ wordsOnly: false,
+ caseSensitive: false
+ };
+ return function hightlight(o) {
+ var regex;
+ o = _.mixin({}, defaults, o);
+ if (!o.node || !o.pattern) {
+ return;
+ }
+ o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ];
+ regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly);
+ traverse(o.node, hightlightTextNode);
+ function hightlightTextNode(textNode) {
+ var match, patternNode, wrapperNode;
+ if (match = regex.exec(textNode.data)) {
+ wrapperNode = doc.createElement(o.tagName);
+ o.className && (wrapperNode.className = o.className);
+ patternNode = textNode.splitText(match.index);
+ patternNode.splitText(match[0].length);
+ wrapperNode.appendChild(patternNode.cloneNode(true));
+ textNode.parentNode.replaceChild(wrapperNode, patternNode);
+ }
+ return !!match;
+ }
+ function traverse(el, hightlightTextNode) {
+ var childNode, TEXT_NODE_TYPE = 3;
+ for (var i = 0; i < el.childNodes.length; i++) {
+ childNode = el.childNodes[i];
+ if (childNode.nodeType === TEXT_NODE_TYPE) {
+ i += hightlightTextNode(childNode) ? 1 : 0;
+ } else {
+ traverse(childNode, hightlightTextNode);
+ }
+ }
+ }
+ };
+ function getRegex(patterns, caseSensitive, wordsOnly) {
+ var escapedPatterns = [], regexStr;
+ for (var i = 0, len = patterns.length; i < len; i++) {
+ escapedPatterns.push(_.escapeRegExChars(patterns[i]));
+ }
+ regexStr = wordsOnly ? "\\b(" + escapedPatterns.join("|") + ")\\b" : "(" + escapedPatterns.join("|") + ")";
+ return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, "i");
+ }
+ }(window.document);
+ var Input = function() {
+ "use strict";
+ var specialKeyCodeMap;
+ specialKeyCodeMap = {
+ 9: "tab",
+ 27: "esc",
+ 37: "left",
+ 39: "right",
+ 13: "enter",
+ 38: "up",
+ 40: "down"
+ };
+ function Input(o, www) {
+ o = o || {};
+ if (!o.input) {
+ $.error("input is missing");
+ }
+ www.mixin(this);
+ this.$hint = $(o.hint);
+ this.$input = $(o.input);
+ this.query = this.$input.val();
+ this.queryWhenFocused = this.hasFocus() ? this.query : null;
+ this.$overflowHelper = buildOverflowHelper(this.$input);
+ this._checkLanguageDirection();
+ if (this.$hint.length === 0) {
+ this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;
+ }
+ }
+ Input.normalizeQuery = function(str) {
+ return _.toStr(str).replace(/^\s*/g, "").replace(/\s{2,}/g, " ");
+ };
+ _.mixin(Input.prototype, EventEmitter, {
+ _onBlur: function onBlur() {
+ this.resetInputValue();
+ this.trigger("blurred");
+ },
+ _onFocus: function onFocus() {
+ this.queryWhenFocused = this.query;
+ this.trigger("focused");
+ },
+ _onKeydown: function onKeydown($e) {
+ var keyName = specialKeyCodeMap[$e.which || $e.keyCode];
+ this._managePreventDefault(keyName, $e);
+ if (keyName && this._shouldTrigger(keyName, $e)) {
+ this.trigger(keyName + "Keyed", $e);
+ }
+ },
+ _onInput: function onInput() {
+ this._setQuery(this.getInputValue());
+ this.clearHintIfInvalid();
+ this._checkLanguageDirection();
+ },
+ _managePreventDefault: function managePreventDefault(keyName, $e) {
+ var preventDefault;
+ switch (keyName) {
+ case "up":
+ case "down":
+ preventDefault = !withModifier($e);
+ break;
+
+ default:
+ preventDefault = false;
+ }
+ preventDefault && $e.preventDefault();
+ },
+ _shouldTrigger: function shouldTrigger(keyName, $e) {
+ var trigger;
+ switch (keyName) {
+ case "tab":
+ trigger = !withModifier($e);
+ break;
+
+ default:
+ trigger = true;
+ }
+ return trigger;
+ },
+ _checkLanguageDirection: function checkLanguageDirection() {
+ var dir = (this.$input.css("direction") || "ltr").toLowerCase();
+ if (this.dir !== dir) {
+ this.dir = dir;
+ this.$hint.attr("dir", dir);
+ this.trigger("langDirChanged", dir);
+ }
+ },
+ _setQuery: function setQuery(val, silent) {
+ var areEquivalent, hasDifferentWhitespace;
+ areEquivalent = areQueriesEquivalent(val, this.query);
+ hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false;
+ this.query = val;
+ if (!silent && !areEquivalent) {
+ this.trigger("queryChanged", this.query);
+ } else if (!silent && hasDifferentWhitespace) {
+ this.trigger("whitespaceChanged", this.query);
+ }
+ },
+ bind: function() {
+ var that = this, onBlur, onFocus, onKeydown, onInput;
+ onBlur = _.bind(this._onBlur, this);
+ onFocus = _.bind(this._onFocus, this);
+ onKeydown = _.bind(this._onKeydown, this);
+ onInput = _.bind(this._onInput, this);
+ this.$input.on("blur.tt", onBlur).on("focus.tt", onFocus).on("keydown.tt", onKeydown);
+ if (!_.isMsie() || _.isMsie() > 9) {
+ this.$input.on("input.tt", onInput);
+ } else {
+ this.$input.on("keydown.tt keypress.tt cut.tt paste.tt", function($e) {
+ if (specialKeyCodeMap[$e.which || $e.keyCode]) {
+ return;
+ }
+ _.defer(_.bind(that._onInput, that, $e));
+ });
+ }
+ return this;
+ },
+ focus: function focus() {
+ this.$input.focus();
+ },
+ blur: function blur() {
+ this.$input.blur();
+ },
+ getLangDir: function getLangDir() {
+ return this.dir;
+ },
+ getQuery: function getQuery() {
+ return this.query || "";
+ },
+ setQuery: function setQuery(val, silent) {
+ this.setInputValue(val);
+ this._setQuery(val, silent);
+ },
+ hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() {
+ return this.query !== this.queryWhenFocused;
+ },
+ getInputValue: function getInputValue() {
+ return this.$input.val();
+ },
+ setInputValue: function setInputValue(value) {
+ this.$input.val(value);
+ this.clearHintIfInvalid();
+ this._checkLanguageDirection();
+ },
+ resetInputValue: function resetInputValue() {
+ this.setInputValue(this.query);
+ },
+ getHint: function getHint() {
+ return this.$hint.val();
+ },
+ setHint: function setHint(value) {
+ this.$hint.val(value);
+ },
+ clearHint: function clearHint() {
+ this.setHint("");
+ },
+ clearHintIfInvalid: function clearHintIfInvalid() {
+ var val, hint, valIsPrefixOfHint, isValid;
+ val = this.getInputValue();
+ hint = this.getHint();
+ valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;
+ isValid = val !== "" && valIsPrefixOfHint && !this.hasOverflow();
+ !isValid && this.clearHint();
+ },
+ hasFocus: function hasFocus() {
+ return this.$input.is(":focus");
+ },
+ hasOverflow: function hasOverflow() {
+ var constraint = this.$input.width() - 2;
+ this.$overflowHelper.text(this.getInputValue());
+ return this.$overflowHelper.width() >= constraint;
+ },
+ isCursorAtEnd: function() {
+ var valueLength, selectionStart, range;
+ valueLength = this.$input.val().length;
+ selectionStart = this.$input[0].selectionStart;
+ if (_.isNumber(selectionStart)) {
+ return selectionStart === valueLength;
+ } else if (document.selection) {
+ range = document.selection.createRange();
+ range.moveStart("character", -valueLength);
+ return valueLength === range.text.length;
+ }
+ return true;
+ },
+ destroy: function destroy() {
+ this.$hint.off(".tt");
+ this.$input.off(".tt");
+ this.$overflowHelper.remove();
+ this.$hint = this.$input = this.$overflowHelper = $("<div>");
+ }
+ });
+ return Input;
+ function buildOverflowHelper($input) {
+ return $('<pre aria-hidden="true"></pre>').css({
+ position: "absolute",
+ visibility: "hidden",
+ whiteSpace: "pre",
+ fontFamily: $input.css("font-family"),
+ fontSize: $input.css("font-size"),
+ fontStyle: $input.css("font-style"),
+ fontVariant: $input.css("font-variant"),
+ fontWeight: $input.css("font-weight"),
+ wordSpacing: $input.css("word-spacing"),
+ letterSpacing: $input.css("letter-spacing"),
+ textIndent: $input.css("text-indent"),
+ textRendering: $input.css("text-rendering"),
+ textTransform: $input.css("text-transform")
+ }).insertAfter($input);
+ }
+ function areQueriesEquivalent(a, b) {
+ return Input.normalizeQuery(a) === Input.normalizeQuery(b);
+ }
+ function withModifier($e) {
+ return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;
+ }
+ }();
+ var Dataset = function() {
+ "use strict";
+ var keys, nameGenerator;
+ keys = {
+ val: "tt-selectable-display",
+ obj: "tt-selectable-object"
+ };
+ nameGenerator = _.getIdGenerator();
+ function Dataset(o, www) {
+ o = o || {};
+ o.templates = o.templates || {};
+ o.templates.notFound = o.templates.notFound || o.templates.empty;
+ if (!o.source) {
+ $.error("missing source");
+ }
+ if (!o.node) {
+ $.error("missing node");
+ }
+ if (o.name && !isValidName(o.name)) {
+ $.error("invalid dataset name: " + o.name);
+ }
+ www.mixin(this);
+ this.highlight = !!o.highlight;
+ this.name = o.name || nameGenerator();
+ this.limit = o.limit || 5;
+ this.displayFn = getDisplayFn(o.display || o.displayKey);
+ this.templates = getTemplates(o.templates, this.displayFn);
+ this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source;
+ this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async;
+ this._resetLastSuggestion();
+ this.$el = $(o.node).addClass(this.classes.dataset).addClass(this.classes.dataset + "-" + this.name);
+ }
+ Dataset.extractData = function extractData(el) {
+ var $el = $(el);
+ if ($el.data(keys.obj)) {
+ return {
+ val: $el.data(keys.val) || "",
+ obj: $el.data(keys.obj) || null
+ };
+ }
+ return null;
+ };
+ _.mixin(Dataset.prototype, EventEmitter, {
+ _overwrite: function overwrite(query, suggestions) {
+ suggestions = suggestions || [];
+ if (suggestions.length) {
+ this._renderSuggestions(query, suggestions);
+ } else if (this.async && this.templates.pending) {
+ this._renderPending(query);
+ } else if (!this.async && this.templates.notFound) {
+ this._renderNotFound(query);
+ } else {
+ this._empty();
+ }
+ this.trigger("rendered", this.name, suggestions, false);
+ },
+ _append: function append(query, suggestions) {
+ suggestions = suggestions || [];
+ if (suggestions.length && this.$lastSuggestion.length) {
+ this._appendSuggestions(query, suggestions);
+ } else if (suggestions.length) {
+ this._renderSuggestions(query, suggestions);
+ } else if (!this.$lastSuggestion.length && this.templates.notFound) {
+ this._renderNotFound(query);
+ }
+ this.trigger("rendered", this.name, suggestions, true);
+ },
+ _renderSuggestions: function renderSuggestions(query, suggestions) {
+ var $fragment;
+ $fragment = this._getSuggestionsFragment(query, suggestions);
+ this.$lastSuggestion = $fragment.children().last();
+ this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions));
+ },
+ _appendSuggestions: function appendSuggestions(query, suggestions) {
+ var $fragment, $lastSuggestion;
+ $fragment = this._getSuggestionsFragment(query, suggestions);
+ $lastSuggestion = $fragment.children().last();
+ this.$lastSuggestion.after($fragment);
+ this.$lastSuggestion = $lastSuggestion;
+ },
+ _renderPending: function renderPending(query) {
+ var template = this.templates.pending;
+ this._resetLastSuggestion();
+ template && this.$el.html(template({
+ query: query,
+ dataset: this.name
+ }));
+ },
+ _renderNotFound: function renderNotFound(query) {
+ var template = this.templates.notFound;
+ this._resetLastSuggestion();
+ template && this.$el.html(template({
+ query: query,
+ dataset: this.name
+ }));
+ },
+ _empty: function empty() {
+ this.$el.empty();
+ this._resetLastSuggestion();
+ },
+ _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) {
+ var that = this, fragment;
+ fragment = document.createDocumentFragment();
+ _.each(suggestions, function getSuggestionNode(suggestion) {
+ var $el, context;
+ context = that._injectQuery(query, suggestion);
+ $el = $(that.templates.suggestion(context)).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + " " + that.classes.selectable);
+ fragment.appendChild($el[0]);
+ });
+ this.highlight && highlight({
+ className: this.classes.highlight,
+ node: fragment,
+ pattern: query
+ });
+ return $(fragment);
+ },
+ _getFooter: function getFooter(query, suggestions) {
+ return this.templates.footer ? this.templates.footer({
+ query: query,
+ suggestions: suggestions,
+ dataset: this.name
+ }) : null;
+ },
+ _getHeader: function getHeader(query, suggestions) {
+ return this.templates.header ? this.templates.header({
+ query: query,
+ suggestions: suggestions,
+ dataset: this.name
+ }) : null;
+ },
+ _resetLastSuggestion: function resetLastSuggestion() {
+ this.$lastSuggestion = $();
+ },
+ _injectQuery: function injectQuery(query, obj) {
+ return _.isObject(obj) ? _.mixin({
+ _query: query
+ }, obj) : obj;
+ },
+ update: function update(query) {
+ var that = this, canceled = false, syncCalled = false, rendered = 0;
+ this.cancel();
+ this.cancel = function cancel() {
+ canceled = true;
+ that.cancel = $.noop;
+ that.async && that.trigger("asyncCanceled", query);
+ };
+ this.source(query, sync, async);
+ !syncCalled && sync([]);
+ function sync(suggestions) {
+ if (syncCalled) {
+ return;
+ }
+ syncCalled = true;
+ suggestions = (suggestions || []).slice(0, that.limit);
+ rendered = suggestions.length;
+ that._overwrite(query, suggestions);
+ if (rendered < that.limit && that.async) {
+ that.trigger("asyncRequested", query);
+ }
+ }
+ function async(suggestions) {
+ suggestions = suggestions || [];
+ if (!canceled && rendered < that.limit) {
+ that.cancel = $.noop;
+ rendered += suggestions.length;
+ that._append(query, suggestions.slice(0, that.limit - rendered));
+ that.async && that.trigger("asyncReceived", query);
+ }
+ }
+ },
+ cancel: $.noop,
+ clear: function clear() {
+ this._empty();
+ this.cancel();
+ this.trigger("cleared");
+ },
+ isEmpty: function isEmpty() {
+ return this.$el.is(":empty");
+ },
+ destroy: function destroy() {
+ this.$el = $("<div>");
+ }
+ });
+ return Dataset;
+ function getDisplayFn(display) {
+ display = display || _.stringify;
+ return _.isFunction(display) ? display : displayFn;
+ function displayFn(obj) {
+ return obj[display];
+ }
+ }
+ function getTemplates(templates, displayFn) {
+ return {
+ notFound: templates.notFound && _.templatify(templates.notFound),
+ pending: templates.pending && _.templatify(templates.pending),
+ header: templates.header && _.templatify(templates.header),
+ footer: templates.footer && _.templatify(templates.footer),
+ suggestion: templates.suggestion || suggestionTemplate
+ };
+ function suggestionTemplate(context) {
+ return $("<div>").text(displayFn(context));
+ }
+ }
+ function isValidName(str) {
+ return /^[_a-zA-Z0-9-]+$/.test(str);
+ }
+ }();
+ var Menu = function() {
+ "use strict";
+ function Menu(o, www) {
+ var that = this;
+ o = o || {};
+ if (!o.node) {
+ $.error("node is required");
+ }
+ www.mixin(this);
+ this.$node = $(o.node);
+ this.query = null;
+ this.datasets = _.map(o.datasets, initializeDataset);
+ function initializeDataset(oDataset) {
+ var node = that.$node.find(oDataset.node).first();
+ oDataset.node = node.length ? node : $("<div>").appendTo(that.$node);
+ return new Dataset(oDataset, www);
+ }
+ }
+ _.mixin(Menu.prototype, EventEmitter, {
+ _onSelectableClick: function onSelectableClick($e) {
+ this.trigger("selectableClicked", $($e.currentTarget));
+ },
+ _onRendered: function onRendered(type, dataset, suggestions, async) {
+ this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());
+ this.trigger("datasetRendered", dataset, suggestions, async);
+ },
+ _onCleared: function onCleared() {
+ this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());
+ this.trigger("datasetCleared");
+ },
+ _propagate: function propagate() {
+ this.trigger.apply(this, arguments);
+ },
+ _allDatasetsEmpty: function allDatasetsEmpty() {
+ return _.every(this.datasets, isDatasetEmpty);
+ function isDatasetEmpty(dataset) {
+ return dataset.isEmpty();
+ }
+ },
+ _getSelectables: function getSelectables() {
+ return this.$node.find(this.selectors.selectable);
+ },
+ _removeCursor: function _removeCursor() {
+ var $selectable = this.getActiveSelectable();
+ $selectable && $selectable.removeClass(this.classes.cursor);
+ },
+ _ensureVisible: function ensureVisible($el) {
+ var elTop, elBottom, nodeScrollTop, nodeHeight;
+ elTop = $el.position().top;
+ elBottom = elTop + $el.outerHeight(true);
+ nodeScrollTop = this.$node.scrollTop();
+ nodeHeight = this.$node.height() + parseInt(this.$node.css("paddingTop"), 10) + parseInt(this.$node.css("paddingBottom"), 10);
+ if (elTop < 0) {
+ this.$node.scrollTop(nodeScrollTop + elTop);
+ } else if (nodeHeight < elBottom) {
+ this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight));
+ }
+ },
+ bind: function() {
+ var that = this, onSelectableClick;
+ onSelectableClick = _.bind(this._onSelectableClick, this);
+ this.$node.on("click.tt", this.selectors.selectable, onSelectableClick);
+ _.each(this.datasets, function(dataset) {
+ dataset.onSync("asyncRequested", that._propagate, that).onSync("asyncCanceled", that._propagate, that).onSync("asyncReceived", that._propagate, that).onSync("rendered", that._onRendered, that).onSync("cleared", that._onCleared, that);
+ });
+ return this;
+ },
+ isOpen: function isOpen() {
+ return this.$node.hasClass(this.classes.open);
+ },
+ open: function open() {
+ this.$node.addClass(this.classes.open);
+ },
+ close: function close() {
+ this.$node.removeClass(this.classes.open);
+ this._removeCursor();
+ },
+ setLanguageDirection: function setLanguageDirection(dir) {
+ this.$node.attr("dir", dir);
+ },
+ selectableRelativeToCursor: function selectableRelativeToCursor(delta) {
+ var $selectables, $oldCursor, oldIndex, newIndex;
+ $oldCursor = this.getActiveSelectable();
+ $selectables = this._getSelectables();
+ oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1;
+ newIndex = oldIndex + delta;
+ newIndex = (newIndex + 1) % ($selectables.length + 1) - 1;
+ newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex;
+ return newIndex === -1 ? null : $selectables.eq(newIndex);
+ },
+ setCursor: function setCursor($selectable) {
+ this._removeCursor();
+ if ($selectable = $selectable && $selectable.first()) {
+ $selectable.addClass(this.classes.cursor);
+ this._ensureVisible($selectable);
+ }
+ },
+ getSelectableData: function getSelectableData($el) {
+ return $el && $el.length ? Dataset.extractData($el) : null;
+ },
+ getActiveSelectable: function getActiveSelectable() {
+ var $selectable = this._getSelectables().filter(this.selectors.cursor).first();
+ return $selectable.length ? $selectable : null;
+ },
+ getTopSelectable: function getTopSelectable() {
+ var $selectable = this._getSelectables().first();
+ return $selectable.length ? $selectable : null;
+ },
+ update: function update(query) {
+ var isValidUpdate = query !== this.query;
+ if (isValidUpdate) {
+ this.query = query;
+ _.each(this.datasets, updateDataset);
+ }
+ return isValidUpdate;
+ function updateDataset(dataset) {
+ dataset.update(query);
+ }
+ },
+ empty: function empty() {
+ _.each(this.datasets, clearDataset);
+ this.query = null;
+ this.$node.addClass(this.classes.empty);
+ function clearDataset(dataset) {
+ dataset.clear();
+ }
+ },
+ destroy: function destroy() {
+ this.$node.off(".tt");
+ this.$node = $("<div>");
+ _.each(this.datasets, destroyDataset);
+ function destroyDataset(dataset) {
+ dataset.destroy();
+ }
+ }
+ });
+ return Menu;
+ }();
+ var DefaultMenu = function() {
+ "use strict";
+ var s = Menu.prototype;
+ function DefaultMenu() {
+ Menu.apply(this, [].slice.call(arguments, 0));
+ }
+ _.mixin(DefaultMenu.prototype, Menu.prototype, {
+ open: function open() {
+ !this._allDatasetsEmpty() && this._show();
+ return s.open.apply(this, [].slice.call(arguments, 0));
+ },
+ close: function close() {
+ this._hide();
+ return s.close.apply(this, [].slice.call(arguments, 0));
+ },
+ _onRendered: function onRendered() {
+ if (this._allDatasetsEmpty()) {
+ this._hide();
+ } else {
+ this.isOpen() && this._show();
+ }
+ return s._onRendered.apply(this, [].slice.call(arguments, 0));
+ },
+ _onCleared: function onCleared() {
+ if (this._allDatasetsEmpty()) {
+ this._hide();
+ } else {
+ this.isOpen() && this._show();
+ }
+ return s._onCleared.apply(this, [].slice.call(arguments, 0));
+ },
+ setLanguageDirection: function setLanguageDirection(dir) {
+ this.$node.css(dir === "ltr" ? this.css.ltr : this.css.rtl);
+ return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0));
+ },
+ _hide: function hide() {
+ this.$node.hide();
+ },
+ _show: function show() {
+ this.$node.css("display", "block");
+ }
+ });
+ return DefaultMenu;
+ }();
+ var Typeahead = function() {
+ "use strict";
+ function Typeahead(o, www) {
+ var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged;
+ o = o || {};
+ if (!o.input) {
+ $.error("missing input");
+ }
+ if (!o.menu) {
+ $.error("missing menu");
+ }
+ if (!o.eventBus) {
+ $.error("missing event bus");
+ }
+ www.mixin(this);
+ this.eventBus = o.eventBus;
+ this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;
+ this.input = o.input;
+ this.menu = o.menu;
+ this.enabled = true;
+ this.active = false;
+ this.input.hasFocus() && this.activate();
+ this.dir = this.input.getLangDir();
+ this._hacks();
+ this.menu.bind().onSync("selectableClicked", this._onSelectableClicked, this).onSync("asyncRequested", this._onAsyncRequested, this).onSync("asyncCanceled", this._onAsyncCanceled, this).onSync("asyncReceived", this._onAsyncReceived, this).onSync("datasetRendered", this._onDatasetRendered, this).onSync("datasetCleared", this._onDatasetCleared, this);
+ onFocused = c(this, "activate", "open", "_onFocused");
+ onBlurred = c(this, "deactivate", "_onBlurred");
+ onEnterKeyed = c(this, "isActive", "isOpen", "_onEnterKeyed");
+ onTabKeyed = c(this, "isActive", "isOpen", "_onTabKeyed");
+ onEscKeyed = c(this, "isActive", "_onEscKeyed");
+ onUpKeyed = c(this, "isActive", "open", "_onUpKeyed");
+ onDownKeyed = c(this, "isActive", "open", "_onDownKeyed");
+ onLeftKeyed = c(this, "isActive", "isOpen", "_onLeftKeyed");
+ onRightKeyed = c(this, "isActive", "isOpen", "_onRightKeyed");
+ onQueryChanged = c(this, "_openIfActive", "_onQueryChanged");
+ onWhitespaceChanged = c(this, "_openIfActive", "_onWhitespaceChanged");
+ this.input.bind().onSync("focused", onFocused, this).onSync("blurred", onBlurred, this).onSync("enterKeyed", onEnterKeyed, this).onSync("tabKeyed", onTabKeyed, this).onSync("escKeyed", onEscKeyed, this).onSync("upKeyed", onUpKeyed, this).onSync("downKeyed", onDownKeyed, this).onSync("leftKeyed", onLeftKeyed, this).onSync("rightKeyed", onRightKeyed, this).onSync("queryChanged", onQueryChanged, this).onSync("whitespaceChanged", onWhitespaceChanged, this).onSync("langDirChanged", this._onLangDirChanged, this);
+ }
+ _.mixin(Typeahead.prototype, {
+ _hacks: function hacks() {
+ var $input, $menu;
+ $input = this.input.$input || $("<div>");
+ $menu = this.menu.$node || $("<div>");
+ $input.on("blur.tt", function($e) {
+ var active, isActive, hasActive;
+ active = document.activeElement;
+ isActive = $menu.is(active);
+ hasActive = $menu.has(active).length > 0;
+ if (_.isMsie() && (isActive || hasActive)) {
+ $e.preventDefault();
+ $e.stopImmediatePropagation();
+ _.defer(function() {
+ $input.focus();
+ });
+ }
+ });
+ $menu.on("mousedown.tt", function($e) {
+ $e.preventDefault();
+ });
+ },
+ _onSelectableClicked: function onSelectableClicked(type, $el) {
+ this.select($el);
+ },
+ _onDatasetCleared: function onDatasetCleared() {
+ this._updateHint();
+ },
+ _onDatasetRendered: function onDatasetRendered(type, dataset, suggestions, async) {
+ this._updateHint();
+ this.eventBus.trigger("render", suggestions, async, dataset);
+ },
+ _onAsyncRequested: function onAsyncRequested(type, dataset, query) {
+ this.eventBus.trigger("asyncrequest", query, dataset);
+ },
+ _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {
+ this.eventBus.trigger("asynccancel", query, dataset);
+ },
+ _onAsyncReceived: function onAsyncReceived(type, dataset, query) {
+ this.eventBus.trigger("asyncreceive", query, dataset);
+ },
+ _onFocused: function onFocused() {
+ this._minLengthMet() && this.menu.update(this.input.getQuery());
+ },
+ _onBlurred: function onBlurred() {
+ if (this.input.hasQueryChangedSinceLastFocus()) {
+ this.eventBus.trigger("change", this.input.getQuery());
+ }
+ },
+ _onEnterKeyed: function onEnterKeyed(type, $e) {
+ var $selectable;
+ if ($selectable = this.menu.getActiveSelectable()) {
+ this.select($selectable) && $e.preventDefault();
+ }
+ },
+ _onTabKeyed: function onTabKeyed(type, $e) {
+ var $selectable;
+ if ($selectable = this.menu.getActiveSelectable()) {
+ this.select($selectable) && $e.preventDefault();
+ } else if ($selectable = this.menu.getTopSelectable()) {
+ this.autocomplete($selectable) && $e.preventDefault();
+ }
+ },
+ _onEscKeyed: function onEscKeyed() {
+ this.close();
+ },
+ _onUpKeyed: function onUpKeyed() {
+ this.moveCursor(-1);
+ },
+ _onDownKeyed: function onDownKeyed() {
+ this.moveCursor(+1);
+ },
+ _onLeftKeyed: function onLeftKeyed() {
+ if (this.dir === "rtl" && this.input.isCursorAtEnd()) {
+ this.autocomplete(this.menu.getTopSelectable());
+ }
+ },
+ _onRightKeyed: function onRightKeyed() {
+ if (this.dir === "ltr" && this.input.isCursorAtEnd()) {
+ this.autocomplete(this.menu.getTopSelectable());
+ }
+ },
+ _onQueryChanged: function onQueryChanged(e, query) {
+ this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();
+ },
+ _onWhitespaceChanged: function onWhitespaceChanged() {
+ this._updateHint();
+ },
+ _onLangDirChanged: function onLangDirChanged(e, dir) {
+ if (this.dir !== dir) {
+ this.dir = dir;
+ this.menu.setLanguageDirection(dir);
+ }
+ },
+ _openIfActive: function openIfActive() {
+ this.isActive() && this.open();
+ },
+ _minLengthMet: function minLengthMet(query) {
+ query = _.isString(query) ? query : this.input.getQuery() || "";
+ return query.length >= this.minLength;
+ },
+ _updateHint: function updateHint() {
+ var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;
+ $selectable = this.menu.getTopSelectable();
+ data = this.menu.getSelectableData($selectable);
+ val = this.input.getInputValue();
+ if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {
+ query = Input.normalizeQuery(val);
+ escapedQuery = _.escapeRegExChars(query);
+ frontMatchRegEx = new RegExp("^(?:" + escapedQuery + ")(.+$)", "i");
+ match = frontMatchRegEx.exec(data.val);
+ match && this.input.setHint(val + match[1]);
+ } else {
+ this.input.clearHint();
+ }
+ },
+ isEnabled: function isEnabled() {
+ return this.enabled;
+ },
+ enable: function enable() {
+ this.enabled = true;
+ },
+ disable: function disable() {
+ this.enabled = false;
+ },
+ isActive: function isActive() {
+ return this.active;
+ },
+ activate: function activate() {
+ if (this.isActive()) {
+ return true;
+ } else if (!this.isEnabled() || this.eventBus.before("active")) {
+ return false;
+ } else {
+ this.active = true;
+ this.eventBus.trigger("active");
+ return true;
+ }
+ },
+ deactivate: function deactivate() {
+ if (!this.isActive()) {
+ return true;
+ } else if (this.eventBus.before("idle")) {
+ return false;
+ } else {
+ this.active = false;
+ this.close();
+ this.eventBus.trigger("idle");
+ return true;
+ }
+ },
+ isOpen: function isOpen() {
+ return this.menu.isOpen();
+ },
+ open: function open() {
+ if (!this.isOpen() && !this.eventBus.before("open")) {
+ this.menu.open();
+ this._updateHint();
+ this.eventBus.trigger("open");
+ }
+ return this.isOpen();
+ },
+ close: function close() {
+ if (this.isOpen() && !this.eventBus.before("close")) {
+ this.menu.close();
+ this.input.clearHint();
+ this.input.resetInputValue();
+ this.eventBus.trigger("close");
+ }
+ return !this.isOpen();
+ },
+ setVal: function setVal(val) {
+ this.input.setQuery(_.toStr(val));
+ },
+ getVal: function getVal() {
+ return this.input.getQuery();
+ },
+ select: function select($selectable) {
+ var data = this.menu.getSelectableData($selectable);
+ if (data && !this.eventBus.before("select", data.obj)) {
+ this.input.setQuery(data.val, true);
+ this.eventBus.trigger("select", data.obj);
+ this.close();
+ return true;
+ }
+ return false;
+ },
+ autocomplete: function autocomplete($selectable) {
+ var query, data, isValid;
+ query = this.input.getQuery();
+ data = this.menu.getSelectableData($selectable);
+ isValid = data && query !== data.val;
+ if (isValid && !this.eventBus.before("autocomplete", data.obj)) {
+ this.input.setQuery(data.val);
+ this.eventBus.trigger("autocomplete", data.obj);
+ return true;
+ }
+ return false;
+ },
+ moveCursor: function moveCursor(delta) {
+ var query, $candidate, data, payload, cancelMove;
+ query = this.input.getQuery();
+ $candidate = this.menu.selectableRelativeToCursor(delta);
+ data = this.menu.getSelectableData($candidate);
+ payload = data ? data.obj : null;
+ cancelMove = this._minLengthMet() && this.menu.update(query);
+ if (!cancelMove && !this.eventBus.before("cursorchange", payload)) {
+ this.menu.setCursor($candidate);
+ if (data) {
+ this.input.setInputValue(data.val);
+ } else {
+ this.input.resetInputValue();
+ this._updateHint();
+ }
+ this.eventBus.trigger("cursorchange", payload);
+ return true;
+ }
+ return false;
+ },
+ destroy: function destroy() {
+ this.input.destroy();
+ this.menu.destroy();
+ }
+ });
+ return Typeahead;
+ function c(ctx) {
+ var methods = [].slice.call(arguments, 1);
+ return function() {
+ var args = [].slice.call(arguments);
+ _.each(methods, function(method) {
+ return ctx[method].apply(ctx, args);
+ });
+ };
+ }
+ }();
+ (function() {
+ "use strict";
+ var old, keys, methods;
+ old = $.fn.typeahead;
+ keys = {
+ www: "tt-www",
+ attrs: "tt-attrs",
+ typeahead: "tt-typeahead"
+ };
+ methods = {
+ initialize: function initialize(o, datasets) {
+ var www;
+ datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);
+ o = o || {};
+ www = WWW(o.classNames);
+ return this.each(attach);
+ function attach() {
+ var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, typeahead, MenuConstructor;
+ _.each(datasets, function(d) {
+ d.highlight = !!o.highlight;
+ });
+ $input = $(this);
+ $wrapper = $(www.html.wrapper);
+ $hint = $elOrNull(o.hint);
+ $menu = $elOrNull(o.menu);
+ defaultHint = o.hint !== false && !$hint;
+ defaultMenu = o.menu !== false && !$menu;
+ defaultHint && ($hint = buildHintFromInput($input, www));
+ defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));
+ $hint && $hint.val("");
+ $input = prepInput($input, www);
+ if (defaultHint || defaultMenu) {
+ $wrapper.css(www.css.wrapper);
+ $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint);
+ $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);
+ }
+ MenuConstructor = defaultMenu ? DefaultMenu : Menu;
+ eventBus = new EventBus({
+ el: $input
+ });
+ input = new Input({
+ hint: $hint,
+ input: $input
+ }, www);
+ menu = new MenuConstructor({
+ node: $menu,
+ datasets: datasets
+ }, www);
+ typeahead = new Typeahead({
+ input: input,
+ menu: menu,
+ eventBus: eventBus,
+ minLength: o.minLength
+ }, www);
+ $input.data(keys.www, www);
+ $input.data(keys.typeahead, typeahead);
+ }
+ },
+ isEnabled: function isEnabled() {
+ var enabled;
+ ttEach(this.first(), function(t) {
+ enabled = t.isEnabled();
+ });
+ return enabled;
+ },
+ enable: function enable() {
+ ttEach(this, function(t) {
+ t.enable();
+ });
+ return this;
+ },
+ disable: function disable() {
+ ttEach(this, function(t) {
+ t.disable();
+ });
+ return this;
+ },
+ isActive: function isActive() {
+ var active;
+ ttEach(this.first(), function(t) {
+ active = t.isActive();
+ });
+ return active;
+ },
+ activate: function activate() {
+ ttEach(this, function(t) {
+ t.activate();
+ });
+ return this;
+ },
+ deactivate: function deactivate() {
+ ttEach(this, function(t) {
+ t.deactivate();
+ });
+ return this;
+ },
+ isOpen: function isOpen() {
+ var open;
+ ttEach(this.first(), function(t) {
+ open = t.isOpen();
+ });
+ return open;
+ },
+ open: function open() {
+ ttEach(this, function(t) {
+ t.open();
+ });
+ return this;
+ },
+ close: function close() {
+ ttEach(this, function(t) {
+ t.close();
+ });
+ return this;
+ },
+ select: function select(el) {
+ var success = false, $el = $(el);
+ ttEach(this.first(), function(t) {
+ success = t.select($el);
+ });
+ return success;
+ },
+ autocomplete: function autocomplete(el) {
+ var success = false, $el = $(el);
+ ttEach(this.first(), function(t) {
+ success = t.autocomplete($el);
+ });
+ return success;
+ },
+ moveCursor: function moveCursoe(delta) {
+ var success = false;
+ ttEach(this.first(), function(t) {
+ success = t.moveCursor(delta);
+ });
+ return success;
+ },
+ val: function val(newVal) {
+ var query;
+ if (!arguments.length) {
+ ttEach(this.first(), function(t) {
+ query = t.getVal();
+ });
+ return query;
+ } else {
+ ttEach(this, function(t) {
+ t.setVal(newVal);
+ });
+ return this;
+ }
+ },
+ destroy: function destroy() {
+ ttEach(this, function(typeahead, $input) {
+ revert($input);
+ typeahead.destroy();
+ });
+ return this;
+ }
+ };
+ $.fn.typeahead = function(method) {
+ if (methods[method]) {
+ return methods[method].apply(this, [].slice.call(arguments, 1));
+ } else {
+ return methods.initialize.apply(this, arguments);
+ }
+ };
+ $.fn.typeahead.noConflict = function noConflict() {
+ $.fn.typeahead = old;
+ return this;
+ };
+ function ttEach($els, fn) {
+ $els.each(function() {
+ var $input = $(this), typeahead;
+ (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);
+ });
+ }
+ function buildHintFromInput($input, www) {
+ return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop("readonly", true).removeAttr("id name placeholder required").attr({
+ autocomplete: "off",
+ spellcheck: "false",
+ tabindex: -1
+ });
+ }
+ function prepInput($input, www) {
+ $input.data(keys.attrs, {
+ dir: $input.attr("dir"),
+ autocomplete: $input.attr("autocomplete"),
+ spellcheck: $input.attr("spellcheck"),
+ style: $input.attr("style")
+ });
+ $input.addClass(www.classes.input).attr({
+ autocomplete: "off",
+ spellcheck: false
+ });
+ try {
+ !$input.attr("dir") && $input.attr("dir", "auto");
+ } catch (e) {}
+ return $input;
+ }
+ function getBackgroundStyles($el) {
+ return {
+ backgroundAttachment: $el.css("background-attachment"),
+ backgroundClip: $el.css("background-clip"),
+ backgroundColor: $el.css("background-color"),
+ backgroundImage: $el.css("background-image"),
+ backgroundOrigin: $el.css("background-origin"),
+ backgroundPosition: $el.css("background-position"),
+ backgroundRepeat: $el.css("background-repeat"),
+ backgroundSize: $el.css("background-size")
+ };
+ }
+ function revert($input) {
+ var www, $wrapper;
+ www = $input.data(keys.www);
+ $wrapper = $input.parent().filter(www.selectors.wrapper);
+ _.each($input.data(keys.attrs), function(val, key) {
+ _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);
+ });
+ $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);
+ if ($wrapper.length) {
+ $input.detach().insertAfter($wrapper);
+ $wrapper.remove();
+ }
+ }
+ function $elOrNull(obj) {
+ var isValid, $el;
+ isValid = _.isJQuery(obj) || _.isElement(obj);
+ $el = isValid ? $(obj).first() : [];
+ return $el.length ? $el : null;
+ }
+ })();
+}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables.css b/wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables.css
index 40e58ac8..f376d15e 100644
--- a/wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables.css
+++ b/wqflask/wqflask/static/new/packages/DataTables/css/jquery.dataTables.css
@@ -14,6 +14,9 @@ table.dataTable {
* Body styles
*/
}
+td.highlight {
+ background-color: whitesmoke !important;
+}
table.dataTable thead th,
table.dataTable tfoot th {
font-weight: bold;
@@ -25,8 +28,8 @@ table.dataTable thead td {
background-color: #ffffff;
border-collapse: collapse;
border-bottom: #cccccc 2px solid;
- padding: 0;
- //padding: 10px 18px 10px 0px;
+ //padding: 0;
+ padding: 10px 18px 4px 10px;
//border-bottom: 1px solid #111;
}
table.dataTable thead th:active,
@@ -39,8 +42,9 @@ table.dataTable tfoot td {
color: #000000;
background-color: #ffffff;
border-collapse: collapse;
- padding: 0;
- //padding: 10px 18px 6px 18px;
+ border-top: #cccccc 2px solid;
+ //padding: 0;
+ padding: 10px 18px 6px 18px;
//border-top: 1px solid #111;
}
table.dataTable thead .sorting,
@@ -76,12 +80,12 @@ table.dataTable tbody tr {
background-color: #ffffff;
}
table.dataTable tbody tr.selected {
- background-color: #ffff99;
+ background-color: #ffee99;
}
table.dataTable tbody th,
table.dataTable tbody td {
font: 12px Arial, Sans-serif;
- padding: 4px 16px 4px 0px;
+ padding: 8px 20px 6px 10px;
}
table.dataTable.row-border tbody th, table.dataTable.row-border tbody td, table.dataTable.display tbody th, table.dataTable.display tbody td {
border-top: 1px solid #ddd;
@@ -107,13 +111,13 @@ table.dataTable.stripe tbody tr.odd, table.dataTable.display tbody tr.odd {
background-color: #f9f9f9;
}
table.dataTable.stripe tbody tr.odd.selected, table.dataTable.display tbody tr.odd.selected {
- background-color: #abb9d3;
+ background-color: #FFEE99;
}
table.dataTable.hover tbody tr:hover, table.dataTable.display tbody tr:hover {
background-color: whitesmoke;
}
table.dataTable.hover tbody tr:hover.selected, table.dataTable.display tbody tr:hover.selected {
- background-color: #a9b7d1;
+ background-color: #FFEE99;
}
table.dataTable.order-column tbody tr > .sorting_1,
table.dataTable.order-column tbody tr > .sorting_2,
@@ -139,7 +143,7 @@ table.dataTable.display tbody tr.odd > .sorting_3, table.dataTable.order-column.
background-color: whitesmoke;
}
table.dataTable.display tbody tr.odd.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_1 {
- background-color: #a6b3cd;
+ background-color: #ffe047;
}
table.dataTable.display tbody tr.odd.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.odd.selected > .sorting_2 {
background-color: #a7b5ce;
@@ -157,7 +161,7 @@ table.dataTable.display tbody tr.even > .sorting_3, table.dataTable.order-column
background-color: #fdfdfd;
}
table.dataTable.display tbody tr.even.selected > .sorting_1, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_1 {
- background-color: #acbad4;
+ background-color: #ffe047;
}
table.dataTable.display tbody tr.even.selected > .sorting_2, table.dataTable.order-column.stripe tbody tr.even.selected > .sorting_2 {
background-color: #adbbd6;
@@ -175,7 +179,7 @@ table.dataTable.display tbody tr:hover > .sorting_3, table.dataTable.order-colum
background-color: #eeeeee;
}
table.dataTable.display tbody tr:hover.selected > .sorting_1, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_1 {
- background-color: #a1aec7;
+ background-color: #ffe047;
}
table.dataTable.display tbody tr:hover.selected > .sorting_2, table.dataTable.order-column.hover tbody tr:hover.selected > .sorting_2 {
background-color: #a2afc8;
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/Gruntfile.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/Gruntfile.js
deleted file mode 100644
index f6e42d02..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/Gruntfile.js
+++ /dev/null
@@ -1,186 +0,0 @@
-/*jshint node:true*/
-module.exports = function(grunt) {
-
-"use strict";
-
-var banner,
- umdStart,
- umdMiddle,
- umdEnd,
- umdStandardDefine,
- umdAdditionalDefine,
- umdLocalizationDefine;
-
-banner = "/*!\n" +
- " * jQuery Validation Plugin v<%= pkg.version %>\n" +
- " *\n" +
- " * <%= pkg.homepage %>\n" +
- " *\n" +
- " * Copyright (c) <%= grunt.template.today('yyyy') %> <%= pkg.author.name %>\n" +
- " * Released under the <%= _.pluck(pkg.licenses, 'type').join(', ') %> license\n" +
- " */\n";
-
-// define UMD wrapper variables
-
-umdStart = "(function( factory ) {\n" +
- "\tif ( typeof define === \"function\" && define.amd ) {\n";
-
-umdMiddle = "\t} else {\n" +
- "\t\tfactory( jQuery );\n" +
- "\t}\n" +
- "}(function( $ ) {\n\n";
-
-umdEnd = "\n}));";
-
-umdStandardDefine = "\t\tdefine( [\"jquery\"], factory );\n";
-umdAdditionalDefine = "\t\tdefine( [\"jquery\", \"./jquery.validate\"], factory );\n";
-umdLocalizationDefine = "\t\tdefine( [\"jquery\", \"../jquery.validate\"], factory );\n";
-
-grunt.initConfig({
- pkg: grunt.file.readJSON("package.json"),
- concat: {
- // used to copy to dist folder
- dist: {
- options: {
- banner: banner +
- umdStart +
- umdStandardDefine +
- umdMiddle,
- footer: umdEnd
- },
- files: {
- "dist/jquery.validate.js": [ "src/core.js", "src/*.js" ]
- }
- },
- extra: {
- options: {
- banner: banner +
- umdStart +
- umdAdditionalDefine +
- umdMiddle,
- footer: umdEnd
- },
- files: {
- "dist/additional-methods.js": [ "src/additional/additional.js", "src/additional/*.js" ]
- }
- }
- },
- uglify: {
- options: {
- preserveComments: false,
- banner: "/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - " +
- "<%= grunt.template.today('m/d/yyyy') %>\n" +
- " * <%= pkg.homepage %>\n" +
- " * Copyright (c) <%= grunt.template.today('yyyy') %> <%= pkg.author.name %>;" +
- " Licensed <%= _.pluck(pkg.licenses, 'type').join(', ') %> */\n"
- },
- dist: {
- files: {
- "dist/additional-methods.min.js": "dist/additional-methods.js",
- "dist/jquery.validate.min.js": "dist/jquery.validate.js"
- }
- },
- all: {
- expand: true,
- cwd: "dist/localization",
- src: "**/*.js",
- dest: "dist/localization",
- ext: ".min.js"
- }
- },
- compress: {
- dist: {
- options: {
- mode: "zip",
- level: 1,
- archive: "dist/<%= pkg.name %>-<%= pkg.version %>.zip",
- pretty: true
- },
- src: [
- "changelog.txt",
- "demo/**/*.*",
- "dist/**/*.js",
- "Gruntfile.js",
- "lib/**/*.*",
- "package.json",
- "README.md",
- "src/**/*.*",
- "test/**/*.*"
- ]
- }
- },
- qunit: {
- files: "test/index.html"
- },
- jshint: {
- options: {
- jshintrc: true
- },
- core: {
- src: "src/**/*.js"
- },
- test: {
- src: "test/*.js"
- },
- grunt: {
- src: "Gruntfile.js"
- }
- },
- watch: {
- options: {
- atBegin: true
- },
- src: {
- files: "<%= jshint.core.src %>",
- tasks: [
- "concat"
- ]
- }
- },
- jscs: {
- all: [ "<%= jshint.core.src %>", "<%= jshint.test.src %>", "<%= jshint.grunt.src %>" ]
- },
- copy: {
- dist: {
- options: {
- // append UMD wrapper
- process: function( content ) {
- return umdStart + umdLocalizationDefine + umdMiddle + content + umdEnd;
- }
- },
- src: "src/localization/*",
- dest: "dist/localization",
- expand: true,
- flatten: true,
- filter: "isFile"
- }
- },
- replace: {
- dist: {
- src: "dist/**/*.min.js",
- overwrite: true,
- replacements: [
- {
- from: "./jquery.validate",
- to: "./jquery.validate.min"
- }
- ]
- }
- }
-});
-
-grunt.loadNpmTasks("grunt-contrib-jshint");
-grunt.loadNpmTasks("grunt-contrib-qunit");
-grunt.loadNpmTasks("grunt-contrib-uglify");
-grunt.loadNpmTasks("grunt-contrib-concat");
-grunt.loadNpmTasks("grunt-contrib-compress");
-grunt.loadNpmTasks("grunt-contrib-watch");
-grunt.loadNpmTasks("grunt-jscs");
-grunt.loadNpmTasks("grunt-contrib-copy");
-grunt.loadNpmTasks("grunt-text-replace");
-
-grunt.registerTask("default", [ "concat", "copy", "jscs", "jshint", "qunit" ]);
-grunt.registerTask("release", [ "default", "uglify", "replace", "compress" ]);
-grunt.registerTask("start", [ "concat", "watch" ]);
-
-};
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/README.md b/wqflask/wqflask/static/new/packages/ValidationPlugin/README.md
deleted file mode 100644
index 4b9a33e8..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/README.md
+++ /dev/null
@@ -1,65 +0,0 @@
-[jQuery Validation Plugin](http://jqueryvalidation.org/) - Form validation made easy
-================================
-
-[![Build Status](https://secure.travis-ci.org/jzaefferer/jquery-validation.png)](http://travis-ci.org/jzaefferer/jquery-validation)
-[![devDependency Status](https://david-dm.org/jzaefferer/jquery-validation/dev-status.png?theme=shields.io)](https://david-dm.org/jzaefferer/jquery-validation#info=devDependencies)
-
-The jQuery Validation Plugin provides drop-in validation for your existing forms, while making all kinds of customizations to fit your application really easy.
-
-## [Help the project](http://pledgie.com/campaigns/18159)
-
-[![Help the project](http://www.pledgie.com/campaigns/18159.png?skin_name=chrome)](http://pledgie.com/campaigns/18159)
-
-This project is looking for help! [You can donate to the ongoing pledgie campaign](http://pledgie.com/campaigns/18159)
-and help spread the word. If you've used the plugin, or plan to use, consider a donation - any amount will help.
-
-You can find the plan for how to spend the money on the [pledgie page](http://pledgie.com/campaigns/18159).
-
-## Getting Started
-
-### Downloading the prebuilt files
-
-Prebuilt files can be downloaded from http://jqueryvalidation.org/
-
-### Downloading the latest changes
-
-The unreleased development files can be obtained by:
-
- 1. [Downloading](https://github.com/jzaefferer/jquery-validation/archive/master.zip) or Forking this repository
- 2. [Setup the build](CONTRIBUTING.md#build-setup)
- 3. Run `grunt` to create the built files in the "dist" directory
-
-### Including it on your page
-
-Include jQuery and the plugin on a page. Then select a form to validate and call the `validate` method.
-
-```html
-<form>
- <input required>
-</form>
-<script src="jquery.js"></script>
-<script src="jquery.validate.js"></script>
-<script>
-$("form").validate();
-</script>
-```
-
-Alternatively include jQuery and the plugin via requirejs in your module.
-
-```js
-define(["jquery", "jquery.validate"], function( $ ) {
- $("form").validate();
-});
-```
-
-For more information on how to setup a rules and customizations, [check the documentation](http://jqueryvalidation.org/documentation/).
-
-## Reporting issues and contributing code
-
-See the [Contributing Guidelines](CONTRIBUTING.md) for details.
-
-**IMPORTANT NOTE ABOUT EMAIL VALIDATION**. As of version 1.12.0 this plugin is using the same regular expression that the [HTML5 specification suggests for browsers to use](https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address). We will follow their lead and use the same check. If you think the specification is wrong, please report the issue to them. If you have different requirements, consider [using a custom method](http://jqueryvalidation.org/jQuery.validator.addMethod/).
-
-## License
-Copyright &copy; Jörn Zaefferer<br>
-Licensed under the MIT license.
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/ajaxSubmit-integration-demo.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/ajaxSubmit-integration-demo.html
deleted file mode 100644
index 207f9adf..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/ajaxSubmit-integration-demo.html
+++ /dev/null
@@ -1,90 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>Test for jQuery validate() plugin</title>
- <link rel="stylesheet" media="screen" href="css/screen.css">
- <style>
- .warning {
- color: red;
- }
- </style>
- <script src="../lib/jquery.js"></script>
- <script src="../lib/jquery.mockjax.js"></script>
- <script src="../lib/jquery.form.js"></script>
- <script src="../dist/jquery.validate.js"></script>
- <script>
- jQuery(function() {
- $.mockjax({
- url: "login.action",
- response: function(settings) {
- var user = settings.data.match(/user=(.+?)($|&)/)[1],
- password = settings.data.match(/password=(.+?)($|&)/)[1];
- if (password !== "foobar") {
- this.responseText = "Your password is wrong (must be foobar).";
- return;
- }
- this.responseText = "Hi " + user + ", welcome back.";
- },
- responseStatus: 200,
- responseTime: 500
- });
-
- // show a simple loading indicator
- var loader = jQuery('<div id="loader"><img src="images/loading.gif" alt="loading..."></div>')
- .css({
- position: "relative",
- top: "1em",
- left: "25em",
- display: "inline"
- })
- .appendTo("body")
- .hide();
- jQuery().ajaxStart(function() {
- loader.show();
- }).ajaxStop(function() {
- loader.hide();
- }).ajaxError(function(a, b, e) {
- throw e;
- });
-
- var v = jQuery("#form").validate({
- submitHandler: function(form) {
- jQuery(form).ajaxSubmit({
- target: "#result"
- });
- }
- });
-
- jQuery("#reset").click(function() {
- v.resetForm();
- });
- });
- </script>
-</head>
-<body>
-<h1 id="banner"><a href="http://jqueryvalidation.org/">jQuery Validation Plugin</a> Demo</h1>
-<div id="main">
- <form method="post" class="cmxform" id="form" action="login.action">
- <fieldset>
- <legend>Login Form (Enter "foobar" as password)</legend>
- <p>
- <label for="user">Username</label>
- <input id="user" name="user" title="Please enter your username (at least 3 characters)" class="required" minlength="3">
- </p>
- <p>
- <label for="pass">Password</label>
- <input type="password" name="password" id="password" class="required" minlength "5">
- </p>
- <p>
- <input class="submit" type="submit" value="Login">
- </p>
- </fieldset>
- </form>
- <div id="result" class="warning">Please login!</div>
- <br>
- <button id="reset">Programmatically reset above form!</button>
- <a href="index.html">Back to main page</a>
-</div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/captcha.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/captcha.js
deleted file mode 100644
index f3429c2a..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/captcha.js
+++ /dev/null
@@ -1,27 +0,0 @@
-$(function(){
- $("body").on("click", "#refreshimg", function(){
- $.post("newsession.php");
- $("#captchaimage").load("image_req.php");
- return false;
- });
-
- $("#captchaform").validate({
- rules: {
- captcha: {
- required: true,
- remote: "process.php"
- }
- },
- messages: {
- captcha: "Correct captcha is required. Click the captcha to generate a new one"
- },
- submitHandler: function() {
- alert("Correct captcha!");
- },
- success: function(label) {
- label.addClass("valid").text("Valid captcha!")
- },
- onkeyup: false
- });
-
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/fonts/Anorexia.ttf b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/fonts/Anorexia.ttf
deleted file mode 100644
index 453eeb00..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/fonts/Anorexia.ttf
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/image_req.php b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/image_req.php
deleted file mode 100644
index 574171bb..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/image_req.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<?php
-
-// Echo the image - timestamp appended to prevent caching
-echo '<a href="index.php" id="refreshimg" title="Click to refresh image"><img src="images/image.php?' . time() . '" width="132" height="46" alt="Captcha image"></a>';
-
-?>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/images/button.png b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/images/button.png
deleted file mode 100644
index 7ef79de5..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/images/button.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/images/image.php b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/images/image.php
deleted file mode 100644
index e3bfb481..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/images/image.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-
-// Begin the session
-session_start();
-
-// If the session is not present, set the variable to an error message
-if(!isset($_SESSION['captcha_id']))
- $str = 'ERROR!';
-// Else if it is present, set the variable to the session contents
-else
- $str = $_SESSION['captcha_id'];
-
-// Set the content type
-header('Content-Type: image/png');
-header('Cache-Control: no-cache');
-
-// Create an image from button.png
-$image = imagecreatefrompng('button.png');
-
-// Set the font colour
-$colour = imagecolorallocate($image, 183, 178, 152);
-
-// Set the font
-$font = '../fonts/Anorexia.ttf';
-
-// Set a random integer for the rotation between -15 and 15 degrees
-$rotate = rand(-15, 15);
-
-// Create an image using our original image and adding the detail
-imagettftext($image, 14, $rotate, 18, 30, $colour, $font, $str);
-
-// Output the image as a png
-imagepng($image);
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/index.php b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/index.php
deleted file mode 100644
index cbbe40d5..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/index.php
+++ /dev/null
@@ -1,77 +0,0 @@
-<?php
-
-// Make the page validate
-ini_set('session.use_trans_sid', '0');
-
-// Include the random string file
-require 'rand.php';
-
-// Begin the session
-session_start();
-
-// Set the session contents
-$_SESSION['captcha_id'] = $str;
-
-?>
-<!doctype html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>AJAX CAPTCHA</title>
- <script src="../../lib/jquery.js"></script>
- <script src="../../dist/jquery.validate.js"></script>
- <script src="captcha.js"></script>
- <link rel="stylesheet" href="style.css">
- <style>
- img {
- border: 1px solid #eee;
- }
- p#statusgreen {
- font-size: 1.2em;
- background-color: #fff;
- color: #0a0;
- }
- p#statusred {
- font-size: 1.2em;
- background-color: #fff;
- color: #a00;
- }
- fieldset label {
- display: block;
- }
- fieldset div#captchaimage {
- float: left;
- margin-right: 15px;
- }
- fieldset input#captcha {
- width: 25%;
- border: 1px solid #ddd;
- padding: 2px;
- }
- fieldset input#submit {
- display: block;
- margin: 2% 0% 0% 0%;
- }
- #captcha.success {
- border: 1px solid #49c24f;
- background: #bcffbf;
- }
- #captcha.error {
- border: 1px solid #c24949;
- background: #ffbcbc;
- }
- </style>
-</head>
-<body>
-<h1><acronym title="Asynchronous JavaScript And XML">AJAX</acronym> <acronym title="Completely Automated Public Turing test to tell Computers and Humans Apart">CAPTCHA</acronym></h1>
-<form id="captchaform" action="">
- <fieldset>
- <div id="captchaimage"><a href="<?php echo htmlEntities($_SERVER['PHP_SELF'], ENT_QUOTES); ?>" id="refreshimg" title="Click to refresh image"><img src="images/image.php?<?php echo time(); ?>" width="132" height="46" alt="Captcha image"></a></div>
- <label for="captcha">Enter the characters as seen on the image above (case insensitive):</label>
- <input type="text" maxlength="6" name="captcha" id="captcha">
- <input type="submit" name="submit" id="submit" value="Check">
- </fieldset>
-</form>
-<p>If you can&#39;t decipher the text on the image, click it to dynamically generate a new one.</p>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/newsession.php b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/newsession.php
deleted file mode 100644
index 36ff45e2..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/newsession.php
+++ /dev/null
@@ -1,12 +0,0 @@
-<?php
-
-// Include the random string file
-require 'rand.php';
-
-// Begin a new session
-session_start();
-
-// Set the session contents
-$_SESSION['captcha_id'] = $str;
-
-?> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/process.php b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/process.php
deleted file mode 100644
index 24fe3a8b..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/process.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-
-// Begin the session
-session_start();
-
-// To avoid case conflicts, make the input uppercase and check against the session value
-// If it's correct, echo '1' as a string
-if(strtoupper($_GET['captcha']) == $_SESSION['captcha_id'])
- echo 'true';
-// Else echo '0' as a string
-else
- echo 'false';
-
-?> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/rand.php b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/rand.php
deleted file mode 100644
index 88b595e7..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/rand.php
+++ /dev/null
@@ -1,11 +0,0 @@
-<?php
-
-// Create a random string, leaving out 'o' to avoid confusion with '0'
-$char = strtoupper(substr(str_shuffle('abcdefghjkmnpqrstuvwxyz'), 0, 4));
-
-// Concatenate the random string onto the random numbers
-// The font 'Anorexia' doesn't have a character for '8', so the numbers will only go up to 7
-// '0' is left out to avoid confusion with 'O'
-$str = rand(1, 7) . rand(1, 7) . $char;
-
-?> \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/style.css b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/style.css
deleted file mode 100644
index c0bbe5f9..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/captcha/style.css
+++ /dev/null
@@ -1,140 +0,0 @@
-body {
- margin: 3% 5%;
- padding: 0;
- background-color: #fff;
- color: #333;
- font: 0.9em/1.3 Helvetica, Arial, Verdana, Sans-serif;
-}
-
-a:link, a:visited {
- background-color: #fff;
- color: #333;
- text-decoration: underline;
-}
-
-a:hover, a:focus, a:active {
- background-color: #ffb;
- color: #454545;
- text-decoration: underline;
-}
-
-h1 {
- margin: 2% 0%;
- padding: 1%;
- border-bottom: 1px solid #ddd;
- background-color: #f8f8f8;
- color: #666;
- font: normal 1.5em Helvetica, Arial, Verdana, Sans-serif;
-}
-
-h2 {
- margin: 2% 0%;
- padding: 1%;
- border-bottom: 1px solid #ddd;
- background-color: #f8f8f8;
- color: #666;
- font: normal 1.3em Helvetica, Arial, Verdana, Sans-serif;
-}
-
-h3 {
- margin: 2% 0%;
- padding: 1%;
- border-bottom: 1px solid #ddd;
- background-color: #f8f8f8;
- color: #666;
- font: normal 1.2em Helvetica, Arial, Verdana, Sans-serif;
-}
-
-table {
- margin: 0;
- padding: 0;
- width: 100%;
-}
-
-table th {
- border: 1px solid #ddd;
- font-weight: bold;
- text-align: left;
- padding: 1%;
-}
-
-table td {
- border: 1px solid #ddd;
- padding: 1%;
-}
-
-dl, dt, dd {
- margin: 0;
- padding: 0;
-}
-
-form {
- margin: 0;
- padding: 0;
-}
-
-fieldset {
- border: 1px solid #ddd;
- margin: 0% 0% 2% 0%;
- padding: 2%;
-}
-
-fieldset legend {
- margin: 0;
- padding: 0 4px;
- background-color: inherit;
- color: #333;
-}
-
-code {
- font: 1em "Courier New", Courier, Monospace;
-}
-
-pre code {
- font: 1.1em "Courier New", Courier, Monospace;
- border-bottom: 1px solid #eee;
-}
-
-img {
- border: 1px solid #eee;
-}
-
-p#statusgreen {
- font-size: 1.2em;
- background-color: #fff;
- color: #0a0;
-}
-
-p#statusred {
- font-size: 1.2em;
- background-color: #fff;
- color: #a00;
-}
-
-fieldset label {
- display: block;
-}
-
-fieldset label.error {
- color: red;
-}
-
-fieldset label.valid {
- color: green;
-}
-
-fieldset div#captchaimage {
- float: left;
- margin-right: 15px;
-}
-
-fieldset input#captcha {
- width: 25%;
- border: 1px solid #ddd;
- padding: 2px;
-}
-
-fieldset input#submit {
- display: block;
- margin: 2% 0% 0% 0%;
-} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/cmxform.css b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/cmxform.css
deleted file mode 100644
index 120f5a47..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/cmxform.css
+++ /dev/null
@@ -1,46 +0,0 @@
-/**********************************
-
-Name: cmxform Styles
-
-***********************************/
-form.cmxform {
- width: 370px;
- font-size: 1.0em;
- color: #333;
-}
-
-form.cmxform legend {
- padding-left: 0;
-}
-
-form.cmxform legend, form.cmxform label {
- color: #333;
-}
-
-form.cmxform fieldset {
- border: none;
- border-top: 1px solid #C9DCA6;
- background: url(../images/cmxform-fieldset.gif) left bottom repeat-x;
- background-color: #F8FDEF;
-}
-
-form.cmxform fieldset fieldset {
- background: none;
-}
-
-form.cmxform fieldset p, form.cmxform fieldset fieldset {
- padding: 5px 10px 7px;
- background: url(../images/cmxform-divider.gif) left bottom repeat-x;
-}
-
-form.cmxform label.error, label.error {
- /* remove the next line when you have trouble in IE6 with labels in list */
- color: red;
- font-style: italic
-}
-div.error { display: none; }
-input { border: 1px solid black; }
-input.checkbox { border: none }
-input:focus { border: 1px dotted black; }
-input.error { border: 1px dotted red; }
-form.cmxform .gray * { color: gray; } \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/cmxformTemplate.css b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/cmxformTemplate.css
deleted file mode 100644
index ac52f71b..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/cmxformTemplate.css
+++ /dev/null
@@ -1,55 +0,0 @@
-/**********************************
-
-Use: cmxform template
-
-***********************************/
-form.cmxform fieldset {
- margin-bottom: 10px;
-}
-
-form.cmxform legend {
- padding: 0 2px;
- font-weight: bold;
- _margin: 0 -7px; /* IE Win */
-}
-
-form.cmxform label {
- display: inline-block;
- line-height: 1.8;
- vertical-align: top;
- cursor: hand;
-}
-
-form.cmxform fieldset p {
- list-style: none;
- padding: 5px;
- margin: 0;
-}
-
-form.cmxform fieldset fieldset {
- border: none;
- margin: 3px 0 0;
-}
-
-form.cmxform fieldset fieldset legend {
- padding: 0 0 5px;
- font-weight: normal;
-}
-
-form.cmxform fieldset fieldset label {
- display: block;
- width: auto;
-}
-
-form.cmxform label { width: 100px; } /* Width of labels */
-form.cmxform fieldset fieldset label { margin-left: 103px; } /* Width plus 3 (html space) */
-form.cmxform label.error {
- margin-left: 103px;
- width: 220px;
-}
-
-form.cmxform input.submit {
- margin-left: 103px;
-}
-
-/*\*//*/ form.cmxform legend { display: inline-block; } /* IE Mac legend fix */ \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/core.css b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/core.css
deleted file mode 100644
index 84494e87..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/core.css
+++ /dev/null
@@ -1,21 +0,0 @@
-body, div { font-family: 'lucida grande', helvetica, verdana, arial, sans-serif }
-body { margin: 0; padding: 0; font-size: small; color: #333 }
-h1, h2 { font-family: 'trebuchet ms', verdana, arial; padding: 10px; margin: 0 }
-h1 { font-size: large }
-#main { padding: 1em; }
-#banner { padding: 15px; background-color: #06b; color: white; font-size: large; border-bottom: 1px solid #ccc;
- background: url(../images/bg.gif) repeat-x; text-align: center }
-#banner a { color: white; }
-
-p { margin: 10px 0; }
-
-li { margin-left: 10px; }
-
-h3 { margin: 1em 0 0; }
-
-h1 { font-size: 2em; }
-h2 { font-size: 1.8em; }
-h3 { font-size: 1.6em; }
-h4 { font-size: 1.4em; }
-h5 { font-size: 1.2em; }
-
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/reset.css b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/reset.css
deleted file mode 100644
index 5c376b37..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/reset.css
+++ /dev/null
@@ -1,61 +0,0 @@
-/**********************************
-
-Use: Reset Styles for all browsers
-
-***********************************/
-
-body, p, blockquote {
- margin: 0;
- padding: 0;
-}
-
-a img, iframe { border: none; }
-
-/* Headers
-------------------------------*/
-
-h1, h2, h3, h4, h5, h6 {
- margin: 0;
- padding: 0;
- font-size: 100%;
-}
-
-/* Lists
-------------------------------*/
-
-ul, ol, dl, li, dt, dd {
- margin: 0;
- padding: 0;
-}
-
-/* Links
-------------------------------*/
-
-a, a:link {}
-a:visited {}
-a:hover {}
-a:active {}
-
-/* Forms
-------------------------------*/
-
-form, fieldset {
- margin: 0;
- padding: 0;
-}
-
-fieldset { border: 1px solid #000; }
-
-legend {
- padding: 0;
- color: #000;
-}
-
-input, textarea, select {
- margin: 0;
- padding: 1px;
- font-size: 100%;
- font-family: inherit;
-}
-
-select { padding: 0; } \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/screen.css b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/screen.css
deleted file mode 100644
index 840f572b..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/css/screen.css
+++ /dev/null
@@ -1,11 +0,0 @@
-/**********************************
-
-Use: Main Screen Import
-
-***********************************/
-
-@import "reset.css";
-@import "core.css";
-
-@import "cmxformTemplate.css";
-@import "cmxform.css"; \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/custom-messages-data-demo.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/custom-messages-data-demo.html
deleted file mode 100644
index 461f21e8..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/custom-messages-data-demo.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>jQuery validation plug-in - comment form example</title>
- <link rel="stylesheet" media="screen" href="css/screen.css">
- <script src="../lib/jquery.js"></script>
- <script src="../dist/jquery.validate.js"></script>
- <script>
- $(document).ready(function() {
- $("#commentForm").validate();
- $("#commentForm2").validate({
- messages: {
- email: {
- required: 'Enter this!'
- }
- }
- });
- });
- </script>
- <style>
- form {
- width: 500px;
- }
- form label {
- width: 250px;
- }
- form label.error, form input.submit {
- margin-left: 253px;
- }
- </style>
-</head>
-<body>
-<h1 id="banner"><a href="http://jqueryvalidation.org/">jQuery Validation Plugin</a> Demo</h1>
-<div id="main">
- <p>Take a look at the source to see how messages can be customized with metadata.</p>
- <!-- Custom rules and messages via data- attributes -->
- <form class="cmxform" id="commentForm" method="post" action="">
- <fieldset>
- <legend>Please enter your email address</legend>
- <p>
- <label for="cemail">E-Mail *</label>
- <input id="cemail" name="email" data-rule-required="true" data-rule-email="true" data-msg-required="Please enter your email address" data-msg-email="Please enter a valid email address">
- </p>
- <p>
- <input class="submit" type="submit" value="Submit">
- </p>
- </fieldset>
- </form>
- <!-- Custom message for "required" in metadata is overridden by a validate option -->
- <form class="cmxform" id="commentForm2" method="post" action="">
- <fieldset>
- <legend>Please enter your email address</legend>
- <p>
- <label for="cemail">E-Mail *</label>
- <input id="cemail" name="email" data-rule-required="true" data-rule-email="true" data-msg-email="Please enter a valid email address">
- </p>
- <p>
- <input class="submit" type="submit" value="Submit">
- </p>
- </fieldset>
- </form>
- <a href="index.html">Back to main page</a>
-</div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/custom-methods-demo.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/custom-methods-demo.html
deleted file mode 100644
index 5b3ef14d..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/custom-methods-demo.html
+++ /dev/null
@@ -1,118 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>Test for jQuery validate() plugin</title>
- <link rel="stylesheet" media="screen" href="css/screen.css">
- <script src="../lib/jquery.js"></script>
- <script src="../dist/jquery.validate.js"></script>
- <script>
- // extend the current rules with new groovy ones
-
- // this one requires the text "buga", we define a default message, too
- $.validator.addMethod("buga", function(value) {
- return value == "buga";
- }, 'Please enter "buga"!');
-
- // this one requires the value to be the same as the first parameter
- $.validator.methods.equal = function(value, element, param) {
- return value == param;
- };
-
- $().ready(function() {
- var validator = $("#texttests").bind("invalid-form.validate", function() {
- $("#summary").html("Your form contains " + validator.numberOfInvalids() + " errors, see details below.");
- }).validate({
- debug: true,
- errorElement: "em",
- errorContainer: $("#warning, #summary"),
- errorPlacement: function(error, element) {
- error.appendTo(element.parent("td").next("td"));
- },
- success: function(label) {
- label.text("ok!").addClass("success");
- },
- rules: {
- number: {
- required: true,
- minlength: 3,
- maxlength: 15,
- number: true
- },
- secret: "buga",
- math: {
- equal: 11
- }
- }
- });
-
- });
- </script>
- <style>
- form.cmxform {
- width: 50em;
- }
- em.error {
- background:url("images/unchecked.gif") no-repeat 0px 0px;
- padding-left: 16px;
- }
- em.success {
- background:url("images/checked.gif") no-repeat 0px 0px;
- padding-left: 16px;
- }
- form.cmxform label.error {
- margin-left: auto;
- width: 250px;
- }
- em.error {
- color: black;
- }
- #warning {
- display: none;
- }
- </style>
-</head>
-<body>
-<h1 id="banner"><a href="http://jqueryvalidation.org/">jQuery Validation Plugin</a> Demo</h1>
-<div id="main">
- <form class="cmxform" id="texttests" method="get" action="foo.html">
- <h2 id="summary"></h2>
- <fieldset>
- <legend>Example with custom methods and heavily customized error display</legend>
- <table>
- <tr>
- <td>
- <label for="number">textarea</label>
- </td>
- <td>
- <input id="number" name="number" title="Please enter a number with at least 3 and max 15 characters!">
- </td>
- <td></td>
- </tr>
- <tr>
- <td>
- <label for="secret">Secret</label>
- </td>
- <td>
- <input name="secret" id="secret">
- </td>
- <td></td>
- </tr>
- <tr>
- <td>
- <label for="math">7 + 4 =</label>
- </td>
- <td>
- <input id="math" name="math" title="Please enter the correct result!">
- </td>
- <td></td>
- </tr>
- </table>
- <input class="submit" type="submit" value="Submit">
- </fieldset>
- </form>
- <h3 id="warning">Your form contains tons of errors! Please try again.</h3>
- <p><a href="index.html">Back to main page</a></p>
-</div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/dynamic-totals.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/dynamic-totals.html
deleted file mode 100644
index fe04dc6a..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/dynamic-totals.html
+++ /dev/null
@@ -1,142 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>jQuery validation plug-in - dynamic forms demo</title>
- <link rel="stylesheet" media="screen" href="css/screen.css">
- <script src="../lib/jquery.js"></script>
- <script src="../dist/jquery.validate.js"></script>
- <script>
- // only for demo purposes
- $.validator.setDefaults({
- submitHandler: function() {
- alert("submitted!");
- }
- });
- $.validator.messages.max = jQuery.validator.format("Your totals mustn't exceed {0}!");
-
- $.validator.addMethod("quantity", function(value, element) {
- return !this.optional(element) && !this.optional($(element).parent().prev().children("select")[0]);
- }, "Please select both the item and its amount.");
-
- $().ready(function() {
- $("#orderform").validate({
- errorPlacement: function(error, element) {
- error.appendTo(element.parent().next());
- },
- highlight: function(element, errorClass) {
- $(element).addClass(errorClass).parent().prev().children("select").addClass(errorClass);
- }
- });
-
- var template = jQuery.validator.format($.trim($("#template").val()));
-
- function addRow() {
- $(template(i++)).appendTo("#orderitems tbody");
- }
-
- var i = 1;
- // start with one row
- addRow();
- // add more rows on click
- $("#add").click(addRow);
-
- // check keyup on quantity inputs to update totals field
- $("#orderform").validateDelegate("input.quantity", "keyup", function(event) {
- var totals = 0;
- $("#orderitems input.quantity").each(function() {
- totals += +this.value;
- });
- $("#totals").attr("value", totals).valid();
- });
-
- });
- </script>
- <style>
- form.cmxform {
- width: 50em;
- }
- em.error {
- background:url("images/unchecked.gif") no-repeat 0px 0px;
- padding-left: 16px;
- }
- em.success {
- background:url("images/checked.gif") no-repeat 0px 0px;
- padding-left: 16px;
- }
- form.cmxform label.error {
- margin-left: auto;
- width: 250px;
- }
- form.cmxform input.submit {
- margin-left: 0;
- }
- em.error {
- color: black;
- }
- #warning {
- display: none;
- }
- select.error {
- border: 1px dotted red;
- }
- </style>
-</head>
-<body>
-<h1 id="banner"><a href="http://jqueryvalidation.org/">jQuery Validation Plugin</a> Demo</h1>
-<div id="main">
- <textarea style="display:none" id="template">
- <tr>
- <td>
- <label>{0}. Item</label>
- </td>
- <td class='type'>
- <select name="item-type-{0}">
- <option value="">Select...</option>
- <option value="0">Learning jQuery</option>
- <option value="1">jQuery Reference Guide</option>
- <option value="2">jQuery Cookbook</option>
- <option vlaue="3">jQuery In Action</option>
- <option value="4">jQuery For Designers</option>
- </select>
- </td>
- <td class='quantity'>
- <input size='4' class="quantity" min="1" id="item-quantity-{0}" name="item-quantity-{0}">
- </td>
- <td class='quantity-error'></td>
- </tr>
- </textarea>
- <form id="orderform" class="cmxform" method="get" action="foo.html">
- <h2 id="summary"></h2>
- <fieldset>
- <legend>Example with custom methods and heavily customized error display</legend>
- <table id="orderitems">
- <tbody>
- </tbody>
- <tfoot>
- <tr>
- <td colspan="2">
- <label>Totals (max 25)</label>
- </td>
- <td class="totals">
- <input id="totals" name="totals" value="0" max="25" readonly="readonly" size='4'>
- </td>
- <td class="totals-error"></td>
- </tr>
- <tr>
- <td colspan="2">&nbsp;</td>
- <td>
- <input class="submit" type="submit" value="Submit">
- </td>
- </tr>
- </tfoot>
- </table>
- </fieldset>
- </form>
- <button id="add">Add another input to the form</button>
- <h1 id="warning">Your form contains tons of errors! Please try again.</h1>
- <p><a href="index.html">Back to main page</a>
- </p>
-</div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/errorcontainer-demo.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/errorcontainer-demo.html
deleted file mode 100644
index 23f50771..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/errorcontainer-demo.html
+++ /dev/null
@@ -1,152 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>Test for jQuery validate() plugin</title>
- <link rel="stylesheet" media="screen" href="css/screen.css">
- <script src="../lib/jquery.js"></script>
- <script src="../dist/jquery.validate.js"></script>
- <style>
- .cmxform fieldset p.error label {
- color: red;
- }
- div.container {
- background-color: #eee;
- border: 1px solid red;
- margin: 5px;
- padding: 5px;
- }
- div.container ol li {
- list-style-type: disc;
- margin-left: 20px;
- }
- div.container {
- display: none
- }
- .container label.error {
- display: inline;
- }
- form.cmxform {
- width: 30em;
- }
- form.cmxform label.error {
- display: block;
- margin-left: 1em;
- width: auto;
- }
- </style>
- <script>
- // only for demo purposes
- $.validator.setDefaults({
- submitHandler: function() {
- alert("submitted! (skipping validation for cancel button)");
- }
- });
-
- $().ready(function() {
- $("#form1").validate({
- errorLabelContainer: $("#form1 div.error")
- });
-
- var container = $('div.container');
- // validate the form when it is submitted
- var validator = $("#form2").validate({
- errorContainer: container,
- errorLabelContainer: $("ol", container),
- wrapper: 'li'
- });
-
- $(".cancel").click(function() {
- validator.resetForm();
- });
- });
- </script>
-</head>
-
-<body>
- <h1 id="banner"><a href="http://jqueryvalidation.org/">jQuery Validation Plugin</a> Demo</h1>
- <div id="main">
- <form method="get" class="cmxform" id="form1" action="">
- <fieldset>
- <legend>Login Form</legend>
- <p>
- <label>Username</label>
- <input name="user" title="Please enter your username (at least 3 characters)" required minlength="3">
- </p>
- <p>
- <label>Password</label>
- <input type="password" maxlength="12" name="password" title="Please enter your password, between 5 and 12 characters" required minlength="5">
- </p>
- <div class="error">
- </div>
- <p>
- <input class="submit" type="submit" value="Login">
- </p>
- </fieldset>
- </form>
- <!-- our error container -->
- <div class="container">
- <h4>There are serious errors in your form submission, please see below for details.</h4>
- <ol>
- <li>
- <label for="email" class="error">Please enter your email address</label>
- </li>
- <li>
- <label for="phone" class="error">Please enter your phone <b>number</b> (between 2 and 8 characters)</label>
- </li>
- <li>
- <label for="address" class="error">Please enter your address (at least 3 characters)</label>
- </li>
- <li>
- <label for="avatar" class="error">Please select an image (png, jpg, jpeg, gif)</label>
- </li>
- <li>
- <label for="cv" class="error">Please select a document (doc, docx, txt, pdf)</label>
- </li>
- </ol>
- </div>
- <form class="cmxform" id="form2" method="get" action="">
- <fieldset>
- <legend>Validating a complete form</legend>
- <p>
- <label for="email">Email</label>
- <input id="email" name="email" required type="email">
- </p>
- <p>
- <label for="agree">Favorite Color</label>
- <select id="color" name="color" title="Please select your favorite color!" required>
- <option></option>
- <option>Red</option>
- <option>Blue</option>
- <option>Yellow</option>
- </select>
- </p>
- <p>
- <label for="phone">Phone</label>
- <input id="phone" name="phone" required type="number" rangelength="[2,8]">
- </p>
- <p>
- <label for="address">Address</label>
- <input id="address" name="address" required minlength="3">
- </p>
- <p>
- <label for="avatar">Avatar</label>
- <input type="file" id="avatar" name="avatar" required>
- </p>
- <p>
- <label for="agree">Please agree to our policy</label>
- <input type="checkbox" class="checkbox" id="agree" title="Please agree to our policy!" name="agree" required>
- </p>
- <p>
- <input class="submit" type="submit" value="Submit">
- <input class="cancel" type="submit" value="Cancel">
- </p>
- </fieldset>
- </form>
- <div class="container">
- <h4>There are serious errors in your form submission, please see details above the form!</h4>
- </div>
- <a href="index.html">Back to main page</a>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/errors-within-labels.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/errors-within-labels.html
deleted file mode 100644
index 7c28a1af..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/errors-within-labels.html
+++ /dev/null
@@ -1,91 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-<meta charset="utf-8">
-<title>Test for jQuery validate() plugin</title>
-
-<link rel="stylesheet" media="screen" href="css/screen.css">
-
-<script src="../lib/jquery.js"></script>
-<script src="../dist/jquery.validate.js"></script>
-
-<style>
-.cmxform fieldset p label span.error { color: red; }
-form.cmxform { width: 30em; }
-form.cmxform label {
- width: auto;
- display: block;
- float: none;
-}
-</style>
-
-<script>
-// only for demo purposes
-$.validator.setDefaults({
- submitHandler: function() {
- alert("submitted!");
- }
-});
-
-$().ready(function() {
- // validate the form when it is submitted
- var validator = $("#form1").validate({
- errorPlacement: function(error, element) {
- // Append error within linked label
- $( element )
- .closest( "form" )
- .find( "label[for='" + element.attr( "id" ) + "']" )
- .append( error );
- },
- errorElement: "span",
- messages: {
- user: {
- required: " (required)",
- minlength: " (must be at least 3 characters)"
- },
- password: {
- required: " (required)",
- minlength: " (must be between 5 and 12 characters)",
- maxlength: " (must be between 5 and 12 characters)"
- }
- }
- });
-
- $(".cancel").click(function() {
- validator.resetForm();
- });
-});
-</script>
-
-</head>
-<body>
-
-<h1 id="banner"><a href="http://jqueryvalidation.org/">jQuery Validation Plugin</a> Demo</h1>
-<div id="main">
-
- <p>Errors use spans placed within existing label element</p>
-
- <form method="get" class="cmxform" id="form1" action="">
- <fieldset>
- <legend>Login Form</legend>
- <p>
- <label for="user">Username</label>
- <input id="user" name="user" required minlength="3">
- </p>
- <p>
- <label for="password">Password</label>
- <input id="password" type="password" maxlength="12" name="password" required minlength="5">
- </p>
- <p>
- <input class="submit" type="submit" value="Login">
- </p>
- </fieldset>
- </form>
-
- <a href="index.html">Back to main page</a>
-
-</div>
-
-
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/file_input.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/file_input.html
deleted file mode 100644
index f92814da..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/file_input.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>jQuery validation plug-in - comment form example</title>
- <link rel="stylesheet" href="css/screen.css">
- <link rel="stylesheet" href="css/cmxform.css">
- <script src="../lib/jquery.js"></script>
- <script src="../dist/jquery.validate.js"></script>
- <script src="../dist/additional-methods.js"></script>
- <script>
- $(document).ready(function() {
- $("#fileForm").validate();
- });
- </script>
-</head>
-<body>
-<form class="cmxform" id="fileForm" method="post" action="">
- <fieldset>
- <legend>Select the indicated type of files?</legend>
- <p>
- <label for="file1">Select a plain text file (e.g. *.txt)</label>
- <input type="file" id="file1" name="file1" class="required" accept="text/plain">
- </p>
- <p>
- <label for="file2">Select any image file</label>
- <input type="file" id="file2" name="file2" class="required" accept="image/*">
- </p>
- <p>
- <label for="file3">Select either a PDF or a EPS file</label>
- <input type="file" id="file3" name="file3" class="required" accept="image/x-eps,application/pdf">
- </p>
- <p>
- <label for="file4">Select any audio or image file</label>
- <input type="file" id="file4" name="file4" class="required" accept="image/*,audio/*">
- </p>
- <p>
- <label for="file5">Select one or more plain text files (e.g. *.txt)</label>
- <input type="file" id="file5" name="file5" class="required" multiple accept="text/plain">
- </p>
- <p>
- <input class="submit" type="submit" value="Submit">
- </p>
- </fieldset>
-</form>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/bg.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/bg.gif
deleted file mode 100644
index 846add07..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/bg.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/checked.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/checked.gif
deleted file mode 100644
index 5e33a78d..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/checked.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/cmxform-divider.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/cmxform-divider.gif
deleted file mode 100644
index 718a977c..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/cmxform-divider.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/cmxform-fieldset.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/cmxform-fieldset.gif
deleted file mode 100644
index 9c48ea4b..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/cmxform-fieldset.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/loading.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/loading.gif
deleted file mode 100644
index 93c46a6c..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/loading.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/unchecked.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/unchecked.gif
deleted file mode 100644
index 06ecaba1..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/images/unchecked.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/index.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/index.html
deleted file mode 100644
index e03a81a2..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/index.html
+++ /dev/null
@@ -1,244 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>jQuery validation plug-in - main demo</title>
- <link rel="stylesheet" href="css/screen.css">
- <script src="../lib/jquery.js"></script>
- <script src="../dist/jquery.validate.js"></script>
- <script>
- $.validator.setDefaults({
- submitHandler: function() {
- alert("submitted!");
- }
- });
-
- $().ready(function() {
- // validate the comment form when it is submitted
- $("#commentForm").validate();
-
- // validate signup form on keyup and submit
- $("#signupForm").validate({
- rules: {
- firstname: "required",
- lastname: "required",
- username: {
- required: true,
- minlength: 2
- },
- password: {
- required: true,
- minlength: 5
- },
- confirm_password: {
- required: true,
- minlength: 5,
- equalTo: "#password"
- },
- email: {
- required: true,
- email: true
- },
- topic: {
- required: "#newsletter:checked",
- minlength: 2
- },
- agree: "required"
- },
- messages: {
- firstname: "Please enter your firstname",
- lastname: "Please enter your lastname",
- username: {
- required: "Please enter a username",
- minlength: "Your username must consist of at least 2 characters"
- },
- password: {
- required: "Please provide a password",
- minlength: "Your password must be at least 5 characters long"
- },
- confirm_password: {
- required: "Please provide a password",
- minlength: "Your password must be at least 5 characters long",
- equalTo: "Please enter the same password as above"
- },
- email: "Please enter a valid email address",
- agree: "Please accept our policy",
- topic: "Please select at least 2 topics"
- }
- });
-
- // propose username by combining first- and lastname
- $("#username").focus(function() {
- var firstname = $("#firstname").val();
- var lastname = $("#lastname").val();
- if (firstname && lastname && !this.value) {
- this.value = firstname + "." + lastname;
- }
- });
-
- //code to hide topic selection, disable for demo
- var newsletter = $("#newsletter");
- // newsletter topics are optional, hide at first
- var inital = newsletter.is(":checked");
- var topics = $("#newsletter_topics")[inital ? "removeClass" : "addClass"]("gray");
- var topicInputs = topics.find("input").attr("disabled", !inital);
- // show when newsletter is checked
- newsletter.click(function() {
- topics[this.checked ? "removeClass" : "addClass"]("gray");
- topicInputs.attr("disabled", !this.checked);
- });
- });
- </script>
- <style>
- #commentForm {
- width: 500px;
- }
- #commentForm label {
- width: 250px;
- }
- #commentForm label.error, #commentForm input.submit {
- margin-left: 253px;
- }
- #signupForm {
- width: 670px;
- }
- #signupForm label.error {
- margin-left: 10px;
- width: auto;
- display: inline;
- }
- #newsletter_topics label.error {
- display: none;
- margin-left: 103px;
- }
- </style>
-</head>
-<body>
-<h1 id="banner"><a href="http://jqueryvalidation.org/">jQuery Validation Plugin</a> Demo</h1>
-<div id="main">
- <p>Default submitHandler is set to display an alert into of submitting the form</p>
- <form class="cmxform" id="commentForm" method="get" action="">
- <fieldset>
- <legend>Please provide your name, email address (won't be published) and a comment</legend>
- <p>
- <label for="cname">Name (required, at least 2 characters)</label>
- <input id="cname" name="name" minlength="2" type="text" required>
- </p>
- <p>
- <label for="cemail">E-Mail (required)</label>
- <input id="cemail" type="email" name="email" required>
- </p>
- <p>
- <label for="curl">URL (optional)</label>
- <input id="curl" type="url" name="url">
- </p>
- <p>
- <label for="ccomment">Your comment (required)</label>
- <textarea id="ccomment" name="comment" required></textarea>
- </p>
- <p>
- <input class="submit" type="submit" value="Submit">
- </p>
- </fieldset>
- </form>
- <form class="cmxform" id="signupForm" method="get" action="">
- <fieldset>
- <legend>Validating a complete form</legend>
- <p>
- <label for="firstname">Firstname</label>
- <input id="firstname" name="firstname" type="text">
- </p>
- <p>
- <label for="lastname">Lastname</label>
- <input id="lastname" name="lastname" type="text">
- </p>
- <p>
- <label for="username">Username</label>
- <input id="username" name="username" type="text">
- </p>
- <p>
- <label for="password">Password</label>
- <input id="password" name="password" type="password">
- </p>
- <p>
- <label for="confirm_password">Confirm password</label>
- <input id="confirm_password" name="confirm_password" type="password">
- </p>
- <p>
- <label for="email">Email</label>
- <input id="email" name="email" type="email">
- </p>
- <p>
- <label for="agree">Please agree to our policy</label>
- <input type="checkbox" class="checkbox" id="agree" name="agree">
- </p>
- <p>
- <label for="newsletter">I'd like to receive the newsletter</label>
- <input type="checkbox" class="checkbox" id="newsletter" name="newsletter">
- </p>
- <fieldset id="newsletter_topics">
- <legend>Topics (select at least two) - note: would be hidden when newsletter isn't selected, but is visible here for the demo</legend>
- <label for="topic_marketflash">
- <input type="checkbox" id="topic_marketflash" value="marketflash" name="topic">Marketflash
- </label>
- <label for="topic_fuzz">
- <input type="checkbox" id="topic_fuzz" value="fuzz" name="topic">Latest fuzz
- </label>
- <label for="topic_digester">
- <input type="checkbox" id="topic_digester" value="digester" name="topic">Mailing list digester
- </label>
- <label for="topic" class="error">Please select at least two topics you'd like to receive.</label>
- </fieldset>
- <p>
- <input class="submit" type="submit" value="Submit">
- </p>
- </fieldset>
- </form>
- <h3>Synthetic examples</h3>
- <ul>
- <li><a href="errorcontainer-demo.html">Error message containers in action</a>
- </li>
- <li><a href="custom-messages-data-demo.html">Custom Messages as Element Data</a>
- </li>
- <li><a href="radio-checkbox-select-demo.html">Radio and checkbox buttons and selects</a>
- </li>
- <li><a href="ajaxSubmit-integration-demo.html">Integration with Form Plugin (AJAX submit)</a>
- </li>
- <li><a href="custom-methods-demo.html">Custom methods and message display.</a>
- </li>
- <li><a href="dynamic-totals.html">Dynamic forms</a>
- </li>
- <li><a href="themerollered.html">Forms styled with jQuery UI Themeroller</a>
- </li>
- <li><a href="tinymce/">TinyMCE3 Demo</a>
- </li>
- <li><a href="tinymce4/">TinyMCE4 Demo</a>
- </li>
- <li><a href="file_input.html">File inputs</a>
- </li>
- <li><a href="jquerymobile.html">jQuery Mobile Form Validation</a>
- </li>
- <li><a href="errors-within-labels.html">Displaying Errors within Field Labels</a>
- </li>
- <li><a href="requirejs/index.html">Loading via RequireJS</a>
- </li>
- </ul>
- <h3>Real-world examples</h3>
- <ul>
- <li><a href="milk/">Remember The Milk signup form</a>
- </li>
- <li><a href="marketo/">Marketo signup form</a>
- </li>
- <li><a href="multipart/">Buy and Sell a House multipart form</a>
- </li>
- <li><a href="captcha/">Remote captcha validation</a>
- </li>
- </ul>
- <h3>Testsuite</h3>
- <ul>
- <li><a href="../test/">Validation Testsuite</a>
- </li>
- </ul>
-</div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/jquerymobile.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/jquerymobile.html
deleted file mode 100644
index 44e77ec4..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/jquerymobile.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
- <title>My Page</title>
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.css">
- <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
- <script src="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js"></script>
- <script src="../dist/jquery.validate.js"></script>
- <style>
- label.error {
- color: red;
- font-size: 16px;
- font-weight: normal;
- line-height: 1.4;
- margin-top: 0.5em;
- width: 100%;
- float: none;
- }
- @media screen and (orientation: portrait) {
- label.error {
- margin-left: 0;
- display: block;
- }
- }
- @media screen and (orientation: landscape) {
- label.error {
- display: inline-block;
- margin-left: 22%;
- }
- }
- em {
- color: red;
- font-weight: bold;
- padding-right: .25em;
- }
- </style>
-</head>
-<body>
-<div id="page1" data-role="page">
- <div data-role="header">
- <h1>Welcome</h1>
- </div>
- <div data-role="content">
- <form method="GET">
- <div data-role="fieldcontain">
- <label for="email">Email:</label>
- <input type="email" name="email" id="email">
- </div>
- <div data-role="fieldcontain">
- <label for="password">Password:</label>
- <input type="password" name="password" id="password">
- </div>
- <input data-role="submit" type="submit" value="Login">
- </form>
- </div>
-</div>
-<script>
-$( "#page1" ).on( "pageinit", function() {
- $( "form" ).validate({
- rules: {
- email: {
- required: true
- },
- password: {
- required: true
- }
- },
- errorPlacement: function( error, element ) {
- error.insertAfter( element.parent() );
- }
- });
-});
-</script>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/bg.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/bg.gif
deleted file mode 100644
index 12662a47..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/bg.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/header1.jpg b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/header1.jpg
deleted file mode 100644
index 70986716..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/header1.jpg
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/page.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/page.gif
deleted file mode 100644
index 1717731b..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/page.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/required_star.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/required_star.gif
deleted file mode 100644
index e4c16ebf..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/images/required_star.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/index.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/index.html
deleted file mode 100644
index 013a71ec..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/index.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>Login Form with Email Password Link</title>
- <link rel="stylesheet" media="screen" href="screen.css">
- <script src="../../lib/jquery.js"></script>
- <script src="../../dist/jquery.validate.js"></script>
- <script>
- $(function() {
- // highlight
- var elements = $("input[type!='submit'], textarea, select");
- elements.focus(function() {
- $(this).parents('li').addClass('highlight');
- });
- elements.blur(function() {
- $(this).parents('li').removeClass('highlight');
- });
-
- $("#forgotpassword").click(function() {
- $("#password").removeClass("required");
- $("#login").submit();
- $("#password").addClass("required");
- return false;
- });
-
- $("#login").validate()
- });
- </script>
-</head>
-<body>
-<div id="page">
- <div id="header">
- <h1>Login</h1>
- </div>
- <div id="content">
- <p id="status"></p>
- <form action="" method="get" id="login">
- <fieldset>
- <legend>User details</legend>
- <ul>
- <li>
- <label for="email">
- <span class="required">Email address</span>
- </label>
- <input id="email" name="email" class="text required email" type="text">
- <label for="email" class="error">This must be a valid email address</label>
- </li>
- <li>
- <label for="password">
- <span class="required">Password</span>
- </label>
- <input name="password" type="password" class="text required" id="password" minlength="4" maxlength="20">
- </li>
- <li>
- <label class="centered info"><a id="forgotpassword" href="#">Email my password...</a>
- </label>
- </li>
- </ul>
- </fieldset>
- <fieldset class="submit">
- <input type="submit" class="button" value="Login...">
- </fieldset>
- <div class="clear"></div>
- </form>
- </div>
-</div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/screen.css b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/screen.css
deleted file mode 100644
index e023a533..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/login/screen.css
+++ /dev/null
@@ -1,457 +0,0 @@
-/*******************************************************************************
-********************************************************************************
-**
-* - GENERAL
-*
-* - PAGE CONTAINERS
-*
-* - HEADER
-*
-* - CONTENT
-**
-********************************************************************************
- ******************************************************************************/
-
-
-
-
-/* GENERAL ------------------------------------------------------------------ */
-
- html
- {
- height: 100%;
- }
-
- /* Zero default margin & padding around common elements */
- body, dd, dl, dt, form, h1, h2, h3, h4, h5, h6, ul, ol, li, p
- {
- margin: 0;
- border: none;
- padding: 0;
- }
-
- body
- {
- height: 100%;
- background-color: #333333;
- background-image: url(images/bg.gif);
- background-position: 0% 0;
- color: #000000;
- line-height: 1.5;
- font-family: Arial, Helvetica, sans-serif;
- font-size: 62.5%;
- text-align: center;
- overflow:auto;
- }
-
- a:link
- {
- color: #003399;
- }
-
- a:visited
- {
- color: #B266B2;
- }
-
- a:hover
- {
- text-decoration: none;
- }
-
-
-
-
- /* PAGE CONTAINERS ---------------------------------------------------------- */
-
- #page
- {
- width: 636px;
- w\idth: 600px;
- min-height: 100%;
- margin: 17px auto;
- padding: 0 18px;
- background-image: url(images/page.gif);
- background-repeat: repeat-y;
- text-align: left;
- }
-
- * html #page
- {
- height: 100%;
- }
-
-
-
-
- /* HEADER ------------------------------------------------------------------- */
-
- #header
- {
- height: 90px;
- background-color: #B2DD32;
- background-image: url(images/header1.jpg);
- background-repeat: repeat-x;
- }
-
- h1
- {
- padding: 0 35px;
- font-size: 2.2em;
- font-weight: normal;
- line-height: 82px;
- }
-
-
-
-
- /* CONTENT ------------------------------------------------------------------ */
-
- #content
- {
- padding: 0 25px;
- }
-
- p
- {
- font-size:1.1em;
- margin-top: 1.5em;
- }
-
- form
- {
- margin-top: 1.5em;
- }
-
-
-
- /*** MASTER FORM WIDTHS - CUSTOMIZE THIS TO CHANGE THE FORM LAYOUT ***/
-
- /*
- form width: 550px
- left column: 190px / 180px + 10px padding
- mid column: 200px
- right column: 160px
- */
-
- form{
- width:550px !important;
- }
-
- fieldset.submit
- {
- padding-left: 190px !important;
- }
-
- form label{
- padding:0px 10px;
- width: 160px;
- }
-
- form label.error,
- form input.submit
- {
- margin-left:180px !important;
- }
-
- form fieldset fieldset label.error
- {
- margin-left:0px !important;
- width:200px !important;
- }
-
-
- form .centered{
- margin-left:180px !important;
- width:200px !important;
- }
-
- form .text,
- form .button,
- form .group,
- form .control,
- form .submit,
- form textarea,
- form select
- {
- width: 200px !important;
- }
-
-
-
-
-/*** FIELDSETS AND LEGENDS ***/
-
- form{
- width:550px;
- margin-bottom:25px;
- clear:both;
- }
-
- form fieldset
- {
- margin: 0 0 1.5em 0;
- padding: 0 0 10px 0px;
-
- border: 1px solid #BFBAB0;
-
- background-color: #F2EFE9;
- background-image: url(images/fieldset_gradient.jpg);
- background-repeat: repeat-x;
-
- background-color: #fff;
- background-image: url(images/fieldset-gradient-02.jpg);
- background-position:bottom;
-
- float: left;
- clear: both;
- width: 100%;
-
- }
-
- form fieldset.submit
- {
- padding: 0px 10px 10px 190px;
- border-style: none;
-
- background-color: transparent;
- background-image: none;
-
- float: none;
- width: auto;
-
- }
-
- form legend
- {
- color: #000000;
-
- font-size:1.3em;
- font-weight: bold;
- font-variant:small-caps;
-
- margin-left: 1em;
- padding:0px 5px;
- }
-
- form fieldset p{
- margin:10px 0px 0px 10px;
- }
-
-/*** FORM BLOCKS ***/
-
- form ul
- {
- padding:5px 10px;
- list-style: none;
- }
-
- form li
- {
- width: 100%;
-
- padding:5px 0px 10px 0;
- border-top:1px dotted #ccc;
-
- display:block;
- float: left;
- clear: left;
- }
-
- form li:first-child
- {
- border:none;
- }
-
-
-/*** FORM BLOCK ELEMENTS ***/
-
- form label
- {
- padding:0px 10px;
- width: 160px;
- float: left;
- }
-
- form .error{
- color: #c00;
- }
-
- form label.error
- {
- color: #c00;
-
- font-size: 100%;
- font-weight: bold;
- font-variant:small-caps;
-
- width:308px;
- display: none;
-
- margin:8px 0px 0px 180px;
- padding:3px 0px 0px 5px;
- border-top:1px dotted #ccc;
-
- clear:both;
- }
-
- form label.info{
- font-size: 100%;
- font-weight: bold;
- font-variant:small-caps;
-
- margin:8px 0px 0px 180px;
- padding:3px 0px 0px 5px;
- }
-
- form fieldset fieldset,
- form .group
- {
- width:200px;
-
- margin: 0;
- border:none;
-
- background:none;
-
- float:left;
- clear: none;
-
- }
-
- form fieldset fieldset label
- {
- width:auto !important;
- white-space:nowrap;
- padding:0px;
- margin:0px;
- display:block;
- clear:both;
- }
-
- form label label.error{
- margin-left:0px;
- }
-
- form label.centered{
- padding:0px 0px;
- width:200px !important;
- }
-
- /* see also the error class at the foot of the page */
-
- form fieldset fieldset label.spaced
- {
- margin-bottom:3px;
- }
-
-/*** FORM ELEMENT COLUMNS ***/
-
- .col-1,
- fieldset fieldset.col-1 label
- {
- width:100%;
- }
-
- .col-2,
- fieldset fieldset.col-2 label
- {
- width:50%;
- }
-
- .col-3,
- fieldset fieldset.col-3 label
- {
- width:33%;
- }
-
- .col-4,
- fieldset fieldset.col-4 label
- {
- width:25%;
- }
-
-
-
-
-/*** FORM ELEMENTS ***/
-
- form input.submit{
- margin:10px 0px 10px 180px;
- padding:0px 2px;
- }
-
- form input, textarea, select,
- form label
- {
- font-size:1.1em;
- line-height:1.6em;
- }
-
- form input, textarea, select
- {
- font-family: Verdana, Arial, Helvetica, sans-serif;
- }
-
- form .input[type="text"],
- form textarea
- {
- padding:1px;
- }
-
- form .input[type="radio"],
- form .input[type="checkbox"]
- {
- margin:0px;
- padding:0px;
- position:relative;
- top:3px;
- }
-
-/*** SUPPORTING CLASSES ***/
-
- form label.required{
- background-image:url(images/required_star.gif);
- background-position:right;
- background-repeat:no-repeat;
- }
-
- form span.required{
- padding-right:15px;
- }
-
- form .clean
- {
- border:none;
- }
-
- form .info{
- padding-top:0.5em;
- font-size:80%;
- line-height:100%;
- color:#aaa;
- }
-
- form .indent{
- padding:2px 20px;
- width:auto !important;
- white-space:nowrap;
- padding-left: 25px !important;
- }
-
- form label.disabled{
- color:#aaa;
- }
-
- form .highlight{
- background-color:#e2e2e2;
- }
-
- .off{
- display:none !important;
- }
-
- .clear{
- clear:both;
- }
- \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/backRequiredGray.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/backRequiredGray.gif
deleted file mode 100644
index 61d29adf..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/backRequiredGray.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/back_green-fade.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/back_green-fade.gif
deleted file mode 100644
index 30774527..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/back_green-fade.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/back_nav_blue.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/back_nav_blue.gif
deleted file mode 100644
index 3d3da3a8..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/back_nav_blue.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/blank.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/blank.gif
deleted file mode 100644
index 3b042d8b..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/blank.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/button-submit.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/button-submit.gif
deleted file mode 100644
index 54d291cd..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/button-submit.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/favicon.ico b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/favicon.ico
deleted file mode 100644
index 0f57c530..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/help.png b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/help.png
deleted file mode 100644
index 73817ffb..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/help.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/left-nav-callout-long.png b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/left-nav-callout-long.png
deleted file mode 100644
index c5b8fad7..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/left-nav-callout-long.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/login-sprite.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/login-sprite.gif
deleted file mode 100644
index 799b1960..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/login-sprite.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/logo_marketo.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/logo_marketo.gif
deleted file mode 100644
index 62663bca..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/logo_marketo.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/sf.png b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/sf.png
deleted file mode 100644
index 962bf2a5..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/sf.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/step1-24.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/step1-24.gif
deleted file mode 100644
index 9ddf1e36..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/step1-24.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/step2-24.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/step2-24.gif
deleted file mode 100644
index bada27f1..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/step2-24.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/step3-24.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/step3-24.gif
deleted file mode 100644
index 8a45393f..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/step3-24.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/tab-sprite.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/tab-sprite.gif
deleted file mode 100644
index 048b9b00..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/tab-sprite.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/tab_green.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/tab_green.gif
deleted file mode 100644
index ef1c0847..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/tab_green.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/time.png b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/time.png
deleted file mode 100644
index 911da3f1..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/time.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/toggle.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/toggle.gif
deleted file mode 100644
index ad1bf0fa..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/toggle.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/warning.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/warning.gif
deleted file mode 100644
index 60da04c2..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/images/warning.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/index.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/index.html
deleted file mode 100644
index ad7af92e..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/index.html
+++ /dev/null
@@ -1,292 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>Subscription Signup | Marketo</title>
- <script src="../../lib/jquery.js"></script>
- <script src="../../lib/jquery.mockjax.js"></script>
- <script src="../../dist/jquery.validate.js"></script>
- <script src="jquery.maskedinput.js"></script>
- <script src="mktSignup.js"></script>
- <link rel="stylesheet" href="stylesheet.css">
-</head>
-<body>
-<!-- start page wrapper -->
-<div id="letterbox">
- <!-- start header container -->
- <div id="header-background">
- <div class="nav-global-container">
- <div class="login">
- <a href="#">
- <span></span>Customer Login</a>
- </div>
- <div class="logo">
- <a href="#">
- <img src="images/logo_marketo.gif" width="168" height="73" alt="Marketo">
- </a>
- </div>
- <div class="nav-global">
- <ul>
- <li>
- <a href="#" class="nav-g01">
- <span></span>Home</a>
- </li>
- <li>
- <a href="#" class="nav-g02">
- <span></span>Products</a>
- </li>
- <li>
- <a href="#" class="nav-g04">
- <span></span>B2B Marketing Resources</a>
- </li>
- <li>
- <a href="#" class="nav-g05">
- <span></span>About Marketo</a>
- </li>
- </ul>
- </div>
- </div>
- </div>
- <!-- end header container -->
- <div class="line-grey-tier"></div>
- <!-- start page container 2 div-->
- <div id="page-container" class="resize">
- <div id="page-content-inner" class="resize">
- <!-- start col-main -->
- <div id="col-main" class="resize" style="">
- <!-- start main content -->
- <div class="main-content resize">
- <div class="action-container" style="display:none;"></div>
- <h1>Step 1 of 2</h1>
- <p>
- </p>
- <br clear="all">
- <div>
- <form id="profileForm" type="actionForm" action="step2.htm" method="get">
- <div class="error" style="display:none;">
- <img src="images/warning.gif" alt="Warning!" width="24" height="24" style="float:left; margin: -5px 10px 0px 0px;">
- <span></span>.
- <br clear="all">
- </div>
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="label">
- <label for="co_name">Company Name:</label>
- </td>
- <td class="field">
- <input id="co_name" class="required" maxlength="40" name="co_name" size="20" type="text" tabindex="1" value="">
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="co_url">Company URL:</label>
- </td>
- <td class="field">
- <input id="co_url" class="required defaultInvalid url" maxlength="40" name="co_url" style="width:163px" type="text" tabindex="2" value="http://">
- </td>
- </tr>
- <tr>
- <td>
- <td>
- </tr>
- <tr>
- <td class="label">
- <label for="first_name">First Name:</label>
- </td>
- <td class="field">
- <input id="first_name" class="required" maxlength="40" name="first_name" size="20" type="text" tabindex="3" value="">
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="last_name">Last Name:</label>
- </td>
- <td class="field">
- <input id="last_name" class="required" maxlength="40" name="last_name" size="20" type="text" tabindex="4" value="">
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="address1">Company Address:</label>
- </td>
- <td class="field">
- <input maxlength="40" class="required" name="address1" size="20" type="text" tabindex="5" value="">
- </td>
- </tr>
- <tr>
- <td class="label"></td>
- <td class="field">
- <input maxlength="40" name="address2" size="20" type="text" tabindex="6" value="">
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="city">City:</label>
- </td>
- <td class="field">
- <input maxlength="40" class="required" name="city" size="20" type="text" tabindex="7" value="">
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="state">State:</label>
- </td>
- <td class="field">
- <select id="state" class="required" name="state" style="margin-left: 4px;" tabindex="8">
- <option value="">Choose State:</option>
- <option value="AL">Alabama</option>
- <option value="AK">Alaska</option>
- <option value="AZ">Arizona</option>
- <option value="AR">Arkansas</option>
- <option value="CA">California</option>
- <option value="CO">Colorado</option>
- <option value="CT">Connecticut</option>
- <option value="DE">Delaware</option>
- <option value="FL">Florida</option>
- <option value="GA">Georgia</option>
- <option value="HI">Hawaii</option>
- <option value="ID">Idaho</option>
- <option value="IL">Illinois</option>
- <option value="IN">Indiana</option>
- <option value="IA">Iowa</option>
- <option value="KS">Kansas</option>
- <option value="KY">Kentucky</option>
- <option value="LA">Louisiana</option>
- <option value="ME">Maine</option>
- <option value="MD">Maryland</option>
- <option value="MA">Massachusetts</option>
- <option value="MI">Michigan</option>
- <option value="MN">Minnesota</option>
- <option value="MS">Mississippi</option>
- <option value="MO">Missouri</option>
- <option value="MT">Montana</option>
- <option value="NE">Nebraska</option>
- <option value="NV">Nevada</option>
- <option value="NH">New Hampshire</option>
- <option value="NJ">New Jersey</option>
- <option value="NM">New Mexico</option>
- <option value="NY">New York</option>
- <option value="NC">North Carolina</option>
- <option value="ND">North Dakota</option>
- <option value="OH">Ohio</option>
- <option value="OK">Oklahoma</option>
- <option value="OR">Oregon</option>
- <option value="PA">Pennsylvania</option>
- <option value="RI">Rhode Island</option>
- <option value="SC">South Carolina</option>
- <option value="SD">South Dakota</option>
- <option value="TN">Tennessee</option>
- <option value="TX">Texas</option>
- <option value="UT">Utah</option>
- <option value="VT">Vermont</option>
- <option value="VA">Virginia</option>
- <option value="WA">Washington</option>
- <option value="WV">West Virginia</option>
- <option value="WI">Wisconsin</option>
- <option value="WY">Wyoming</option>
- </select>
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="zip">Zip:</label>
- </td>
- <td class="field">
- <input maxlength="10" name="zip" style="width: 100px" type="text" class="required zipcode" tabindex="9" value="">
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="phone">Phone:</label>
- </td>
- <td class="field">
- <input id="phone" maxlength="14" name="phone" type="text" class="required phone" tabindex="10" value="">
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <h2 style="border-bottom: 1px solid #CCCCCC;">Login Information</h2>
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="email">Email:</label>
- </td>
- <td class="field">
- <input id="email" class="required email" remote="emails.action" maxlength="40" name="email" size="20" type="text" tabindex="11" value="">
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="password1">Password:</label>
- </td>
- <td class="field">
- <input id="password1" class="required password" maxlength="40" name="password1" size="20" type="password" tabindex="12" value="">
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="password2">Retype Password:</label>
- </td>
- <td class="field">
- <input id="password2" class="required" equalTo="#password1" maxlength="40" name="password2" size="20" type="password" tabindex="13" value="">
- <div class="formError"></div>
- </td>
- </tr>
- <tr>
- <td></td>
- <td>
- <div class="buttonSubmit">
- <span></span>
- <input class="formButton" type="submit" value="Next" style="width: 140px" tabindex="14">
- </div>
- </td>
- </tr>
- </table>
- <br>
- <br>
- </form>
- <br clear="all">
- </div>
- </div>
- <!-- end main content -->
- <br>
- </div>
- <!-- end col-main -->
- <!-- start left col -->
- <div id="col-left" class="nav-left-back empty resize" style="position: absolute; min-height: 450px;">
- <div class="col-left-header-tab" style="position: absolute;">Signup</div>
- <div class="nav-left"></div>
- <div class="left-nav-callout png" style="top: 15px; margin-bottom: 100px;">
- <img src="images/left-nav-callout-long.png" class="png" alt="">
- <h6>Sign Up Process</h6>
- <a style="background-image: url(images/step1-24.gif); font-weight: normal; text-decoration: none; cursor: default;">Sign up with a valid credit card.</a>
- <a style="background-image: url(images/step2-24.gif); font-weight: normal; text-decoration: none; cursor: default;">Connect to your Google AdWords account. You will need your AdWords Customer ID.</a>
- <a style="background-image: url(images/step3-24.gif); font-weight: normal; text-decoration: none; cursor: default;">Start your 30 day trial. No payments until trial ends.</a>
- </div>
- <div class="footerAddress">
- <b>Marketo Inc.</b>
- <br>1710 S. Amphlett Blvd.
- <br>San Mateo, CA 94402 USA
- <br>
- </div>
- <br clear="all">
- </div>
- <!-- end left col -->
- </div>
- </div>
- <!-- end page container 2 divs-->
- <div id="footer-container" align="center">
- <div class="footer">
- <ul>
- <li><a href="..">Home</a>
- </li>
- <li class="line-off"><a href="step2.htm">Second step</a>
- </li>
- </ul>
- </div>
- </div>
- <!-- end page wrapper -->
-</div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/jquery.maskedinput.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/jquery.maskedinput.js
deleted file mode 100644
index cd54339a..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/jquery.maskedinput.js
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
- Masked Input plugin for jQuery
- Copyright (c) 2007-2013 Josh Bush (digitalbush.com)
- Licensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license)
- Version: 1.3.1
-*/
-(function($) {
- function getPasteEvent() {
- var el = document.createElement('input'),
- name = 'onpaste';
- el.setAttribute(name, '');
- return (typeof el[name] === 'function')?'paste':'input';
-}
-
-var pasteEventName = getPasteEvent() + ".mask",
- ua = navigator.userAgent,
- iPhone = /iphone/i.test(ua),
- android=/android/i.test(ua),
- caretTimeoutId;
-
-$.mask = {
- //Predefined character definitions
- definitions: {
- '9': "[0-9]",
- 'a': "[A-Za-z]",
- '*': "[A-Za-z0-9]"
- },
- dataName: "rawMaskFn",
- placeholder: '_',
-};
-
-$.fn.extend({
- //Helper Function for Caret positioning
- caret: function(begin, end) {
- var range;
-
- if (this.length === 0 || this.is(":hidden")) {
- return;
- }
-
- if (typeof begin == 'number') {
- end = (typeof end === 'number') ? end : begin;
- return this.each(function() {
- if (this.setSelectionRange) {
- this.setSelectionRange(begin, end);
- } else if (this.createTextRange) {
- range = this.createTextRange();
- range.collapse(true);
- range.moveEnd('character', end);
- range.moveStart('character', begin);
- range.select();
- }
- });
- } else {
- if (this[0].setSelectionRange) {
- begin = this[0].selectionStart;
- end = this[0].selectionEnd;
- } else if (document.selection && document.selection.createRange) {
- range = document.selection.createRange();
- begin = 0 - range.duplicate().moveStart('character', -100000);
- end = begin + range.text.length;
- }
- return { begin: begin, end: end };
- }
- },
- unmask: function() {
- return this.trigger("unmask");
- },
- mask: function(mask, settings) {
- var input,
- defs,
- tests,
- partialPosition,
- firstNonMaskPos,
- len;
-
- if (!mask && this.length > 0) {
- input = $(this[0]);
- return input.data($.mask.dataName)();
- }
- settings = $.extend({
- placeholder: $.mask.placeholder, // Load default placeholder
- completed: null
- }, settings);
-
-
- defs = $.mask.definitions;
- tests = [];
- partialPosition = len = mask.length;
- firstNonMaskPos = null;
-
- $.each(mask.split(""), function(i, c) {
- if (c == '?') {
- len--;
- partialPosition = i;
- } else if (defs[c]) {
- tests.push(new RegExp(defs[c]));
- if (firstNonMaskPos === null) {
- firstNonMaskPos = tests.length - 1;
- }
- } else {
- tests.push(null);
- }
- });
-
- return this.trigger("unmask").each(function() {
- var input = $(this),
- buffer = $.map(
- mask.split(""),
- function(c, i) {
- if (c != '?') {
- return defs[c] ? settings.placeholder : c;
- }
- }),
- focusText = input.val();
-
- function seekNext(pos) {
- while (++pos < len && !tests[pos]);
- return pos;
- }
-
- function seekPrev(pos) {
- while (--pos >= 0 && !tests[pos]);
- return pos;
- }
-
- function shiftL(begin,end) {
- var i,
- j;
-
- if (begin<0) {
- return;
- }
-
- for (i = begin, j = seekNext(end); i < len; i++) {
- if (tests[i]) {
- if (j < len && tests[i].test(buffer[j])) {
- buffer[i] = buffer[j];
- buffer[j] = settings.placeholder;
- } else {
- break;
- }
-
- j = seekNext(j);
- }
- }
- writeBuffer();
- input.caret(Math.max(firstNonMaskPos, begin));
- }
-
- function shiftR(pos) {
- var i,
- c,
- j,
- t;
-
- for (i = pos, c = settings.placeholder; i < len; i++) {
- if (tests[i]) {
- j = seekNext(i);
- t = buffer[i];
- buffer[i] = c;
- if (j < len && tests[j].test(t)) {
- c = t;
- } else {
- break;
- }
- }
- }
- }
-
- function keydownEvent(e) {
- var k = e.which,
- pos,
- begin,
- end;
-
- //backspace, delete, and escape get special treatment
- if (k === 8 || k === 46 || (iPhone && k === 127)) {
- pos = input.caret();
- begin = pos.begin;
- end = pos.end;
-
- if (end - begin === 0) {
- begin=k!==46?seekPrev(begin):(end=seekNext(begin-1));
- end=k===46?seekNext(end):end;
- }
- clearBuffer(begin, end);
- shiftL(begin, end - 1);
-
- e.preventDefault();
- } else if (k == 27) {//escape
- input.val(focusText);
- input.caret(0, checkVal());
- e.preventDefault();
- }
- }
-
- function keypressEvent(e) {
- var k = e.which,
- pos = input.caret(),
- p,
- c,
- next;
-
- if (e.ctrlKey || e.altKey || e.metaKey || k < 32) {//Ignore
- return;
- } else if (k) {
- if (pos.end - pos.begin !== 0){
- clearBuffer(pos.begin, pos.end);
- shiftL(pos.begin, pos.end-1);
- }
-
- p = seekNext(pos.begin - 1);
- if (p < len) {
- c = String.fromCharCode(k);
- if (tests[p].test(c)) {
- shiftR(p);
-
- buffer[p] = c;
- writeBuffer();
- next = seekNext(p);
-
- if(android){
- setTimeout($.proxy($.fn.caret,input,next),0);
- }else{
- input.caret(next);
- }
-
- if (settings.completed && next >= len) {
- settings.completed.call(input);
- }
- }
- }
- e.preventDefault();
- }
- }
-
- function clearBuffer(start, end) {
- var i;
- for (i = start; i < end && i < len; i++) {
- if (tests[i]) {
- buffer[i] = settings.placeholder;
- }
- }
- }
-
- function writeBuffer() { input.val(buffer.join('')); }
-
- function checkVal(allow) {
- //try to place characters where they belong
- var test = input.val(),
- lastMatch = -1,
- i,
- c;
-
- for (i = 0, pos = 0; i < len; i++) {
- if (tests[i]) {
- buffer[i] = settings.placeholder;
- while (pos++ < test.length) {
- c = test.charAt(pos - 1);
- if (tests[i].test(c)) {
- buffer[i] = c;
- lastMatch = i;
- break;
- }
- }
- if (pos > test.length) {
- break;
- }
- } else if (buffer[i] === test.charAt(pos) && i !== partialPosition) {
- pos++;
- lastMatch = i;
- }
- }
- if (allow) {
- writeBuffer();
- } else if (lastMatch + 1 < partialPosition) {
- input.val("");
- clearBuffer(0, len);
- } else {
- writeBuffer();
- input.val(input.val().substring(0, lastMatch + 1));
- }
- return (partialPosition ? i : firstNonMaskPos);
- }
-
- input.data($.mask.dataName,function(){
- return $.map(buffer, function(c, i) {
- return tests[i]&&c!=settings.placeholder ? c : null;
- }).join('');
- });
-
- if (!input.attr("readonly"))
- input
- .one("unmask", function() {
- input
- .unbind(".mask")
- .removeData($.mask.dataName);
- })
- .bind("focus.mask", function() {
- clearTimeout(caretTimeoutId);
- var pos,
- moveCaret;
-
- focusText = input.val();
- pos = checkVal();
-
- caretTimeoutId = setTimeout(function(){
- writeBuffer();
- if (pos == mask.length) {
- input.caret(0, pos);
- } else {
- input.caret(pos);
- }
- }, 10);
- })
- .bind("blur.mask", function() {
- checkVal();
- if (input.val() != focusText)
- input.change();
- })
- .bind("keydown.mask", keydownEvent)
- .bind("keypress.mask", keypressEvent)
- .bind(pasteEventName, function() {
- setTimeout(function() {
- var pos=checkVal(true);
- input.caret(pos);
- if (settings.completed && pos == input.val().length)
- settings.completed.call(input);
- }, 0);
- });
- checkVal(); //Perform initial check for existing values
- });
- }
-});
-
-
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/mktSignup.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/mktSignup.js
deleted file mode 100644
index 3b95146e..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/mktSignup.js
+++ /dev/null
@@ -1,133 +0,0 @@
-$(document).ready(function(){
- $.mockjax({
- url: "emails.action",
- response: function(settings) {
- var email = settings.data.email,
- emails = ["glen@marketo.com", "george@bush.gov", "me@god.com", "aboutface@cooper.com", "steam@valve.com", "bill@gates.com"];
- this.responseText = "true";
- if ( $.inArray( email, emails ) !== -1 ) {
- this.responseText = "false";
- }
- },
- responseTime: 500
- });
-
- jQuery.validator.addMethod("password", function( value, element ) {
- var result = this.optional(element) || value.length >= 6 && /\d/.test(value) && /[a-z]/i.test(value);
- if (!result) {
- element.value = "";
- var validator = this;
- setTimeout(function() {
- validator.blockFocusCleanup = true;
- element.focus();
- validator.blockFocusCleanup = false;
- }, 1);
- }
- return result;
- }, "Your password must be at least 6 characters long and contain at least one number and one character.");
-
- // a custom method making the default value for companyurl ("http://") invalid, without displaying the "invalid url" message
- jQuery.validator.addMethod("defaultInvalid", function(value, element) {
- return value != element.defaultValue;
- }, "");
-
- jQuery.validator.addMethod("billingRequired", function(value, element) {
- if ($("#bill_to_co").is(":checked"))
- return $(element).parents(".subTable").length;
- return !this.optional(element);
- }, "");
-
- jQuery.validator.messages.required = "";
- $("form").validate({
- invalidHandler: function(e, validator) {
- var errors = validator.numberOfInvalids();
- if (errors) {
- var message = errors == 1
- ? 'You missed 1 field. It has been highlighted below'
- : 'You missed ' + errors + ' fields. They have been highlighted below';
- $("div.error span").html(message);
- $("div.error").show();
- } else {
- $("div.error").hide();
- }
- },
- onkeyup: false,
- submitHandler: function() {
- $("div.error").hide();
- alert("submit! use link below to go to the other step");
- },
- messages: {
- password2: {
- required: " ",
- equalTo: "Please enter the same password as above"
- },
- email: {
- required: " ",
- email: "Please enter a valid email address, example: you@yourdomain.com",
- remote: jQuery.validator.format("{0} is already taken, please enter a different address.")
- }
- },
- debug:true
- });
-
- $(".resize").vjustify();
- $("div.buttonSubmit").hoverClass("buttonSubmitHover");
-
- $("input.phone").mask("(999) 999-9999");
- $("input.zipcode").mask("99999");
- var creditcard = $("#creditcard").mask("9999 9999 9999 9999");
-
- $("#cc_type").change(
- function() {
- switch ($(this).val()){
- case 'amex':
- creditcard.unmask().mask("9999 999999 99999");
- break;
- default:
- creditcard.unmask().mask("9999 9999 9999 9999");
- break;
- }
- }
- );
-
- // toggle optional billing address
- var subTableDiv = $("div.subTableDiv");
- var toggleCheck = $("input.toggleCheck");
- toggleCheck.is(":checked")
- ? subTableDiv.hide()
- : subTableDiv.show();
- $("input.toggleCheck").click(function() {
- if (this.checked == true) {
- subTableDiv.slideUp("medium");
- $("form").valid();
- } else {
- subTableDiv.slideDown("medium");
- }
- });
-
-
-});
-
-$.fn.vjustify = function() {
- var maxHeight=0;
- $(".resize").css("height","auto");
- this.each(function(){
- if (this.offsetHeight > maxHeight) {
- maxHeight = this.offsetHeight;
- }
- });
- this.each(function(){
- $(this).height(maxHeight);
- if (this.offsetHeight > maxHeight) {
- $(this).height((maxHeight-(this.offsetHeight-maxHeight)));
- }
- });
-};
-
-$.fn.hoverClass = function(classname) {
- return this.hover(function() {
- $(this).addClass(classname);
- }, function() {
- $(this).removeClass(classname);
- });
-}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/step2.htm b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/step2.htm
deleted file mode 100644
index c8b1a7df..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/step2.htm
+++ /dev/null
@@ -1,326 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>Subscription Signup | Marketo</title>
- <script src="../../lib/jquery.js"></script>
- <script src="../../lib/jquery.mockjax.js"></script>
- <script src="../../dist/jquery.validate.js"></script>
- <script src="jquery.maskedinput.js"></script>
- <script src="mktSignup.js"></script>
- <link rel="stylesheet" href="stylesheet.css">
-</head>
-<body>
-<!-- start page wrapper -->
-<div id="letterbox">
- <!-- start header container -->
- <div id="header-background">
- <div class="nav-global-container">
- <div class="login">
- <a href="#">
- <span></span>Customer Login</a>
- </div>
- <div class="logo">
- <a href="#">
- <img src="images/logo_marketo.gif" width="168" height="73" alt="Marketo">
- </a>
- </div>
- <div class="nav-global">
- <ul>
- <li>
- <a href="#" class="nav-g01">
- <span></span>Home</a>
- </li>
- <li>
- <a href="#" class="nav-g02">
- <span></span>Products</a>
- </li>
- <li>
- <a href="#" class="nav-g04">
- <span></span>B2B Marketing Resources</a>
- </li>
- <li>
- <a href="#" class="nav-g05">
- <span></span>About Marketo</a>
- </li>
- </ul>
- </div>
- </div>
- </div>
- <!-- end header container -->
- <div class="line-grey-tier"></div>
- <!-- start page container 2 div-->
- <div id="page-container" class="resize">
- <div id="page-content-inner" class="resize">
- <!-- start col-main -->
- <div id="col-main" class="resize" style="">
- <!-- start main content -->
- <div class="main-content resize">
- <div class="action-container" style="display:none;"></div>
- <h1>Step 2 of 2</h1>
- <h2>Billing Information</h2>
- <br clear="all">
- <div>
- <form id="billingForm" action="" method="get">
- <div class="error" style="display:none;">
- <img src="images/warning.gif" alt="Warning!" width="24" height="24" style="float:left; margin: -5px 10px 0px 0px; ">
- <span></span>.
- <br clear="all">
- </div>
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="label" style="vertical-align: top; padding-top: 8px;">Billing Address:</td>
- <td class="field" style="font-weight: normal">
- <div class="billingAddressControl">
- <input type="checkbox" id="bill_to_co" name="bill_to_co" class="toggleCheck" checked="checked" style="width: auto;" tabindex="1">
- <label for="bill_to_co" style="cursor:pointer">Same as Company Address</label>
- </div>
- </td>
- </tr>
- <tr class="subTable">
- <td colspan="2">
- <div style="background-color: #EEEEEE; border: 1px solid #CCCCCC; padding: 10px;" class="subTableDiv">
- <table cellpadding="0" cellspacing="0" border="0">
- <tr>
- <td class="label">
- <label for="bill_first_name">First Name:</label>
- </td>
- <td class="field">
- <input maxlength="40" class="billingRequired" name="bill_first_name" size="20" type="text" tabindex="2" value="">
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="bill_last_name">Last Name:</label>
- </td>
- <td class="field">
- <input maxlength="40" class="billingRequired" name="bill_last_name" size="20" type="text" tabindex="3" value="">
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="bill_email">Email:</label>
- </td>
- <td class="field">
- <input maxlength="40" class="billingRequired email" remote="emails.action" name="email" size="20" type="text" tabindex="4" value="">
- <div class="formError"></div>
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="bill_address1">Address:</label>
- </td>
- <td class="field">
- <input maxlength="40" class="billingRequired" name="bill_address1" size="20" type="text" tabindex="5" value="">
- </td>
- </tr>
- <tr>
- <td class="label"></td>
- <td class="field">
- <input maxlength="40" name="bill_address2" size="20" type="text" tabindex="6" value="">
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="bill_city">City:</label>
- </td>
- <td class="field">
- <input maxlength="40" class="billingRequired" name="bill_city" size="20" type="text" tabindex="7" value="">
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="bill_state">State:</label>
- </td>
- <td class="field">
- <select id="bill_state" class="billingRequired" name="bill_state" style="margin-left: 4px;" tabindex="8">
- <option value="">Choose State</option>
- <option value="AL">Alabama</option>
- <option value="AK">Alaska</option>
- <option value="AZ">Arizona</option>
- <option value="AR">Arkansas</option>
- <option value="CA">California</option>
- <option value="CO">Colorado</option>
- <option value="CT">Connecticut</option>
- <option value="DE">Delaware</option>
- <option value="FL">Florida</option>
- <option value="GA">Georgia</option>
- <option value="HI">Hawaii</option>
- <option value="ID">Idaho</option>
- <option value="IL">Illinois</option>
- <option value="IN">Indiana</option>
- <option value="IA">Iowa</option>
- <option value="KS">Kansas</option>
- <option value="KY">Kentucky</option>
- <option value="LA">Louisiana</option>
- <option value="ME">Maine</option>
- <option value="MD">Maryland</option>
- <option value="MA">Massachusetts</option>
- <option value="MI">Michigan</option>
- <option value="MN">Minnesota</option>
- <option value="MS">Mississippi</option>
- <option value="MO">Missouri</option>
- <option value="MT">Montana</option>
- <option value="NE">Nebraska</option>
- <option value="NV">Nevada</option>
- <option value="NH">New Hampshire</option>
- <option value="NJ">New Jersey</option>
- <option value="NM">New Mexico</option>
- <option value="NY">New York</option>
- <option value="NC">North Carolina</option>
- <option value="ND">North Dakota</option>
- <option value="OH">Ohio</option>
- <option value="OK">Oklahoma</option>
- <option value="OR">Oregon</option>
- <option value="PA">Pennsylvania</option>
- <option value="RI">Rhode Island</option>
- <option value="SC">South Carolina</option>
- <option value="SD">South Dakota</option>
- <option value="TN">Tennessee</option>
- <option value="TX">Texas</option>
- <option value="UT">Utah</option>
- <option value="VT">Vermont</option>
- <option value="VA">Virginia</option>
- <option value="WA">Washington</option>
- <option value="WV">West Virginia</option>
- <option value="WI">Wisconsin</option>
- <option value="WY">Wyoming</option>
- </select>
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="bill_zip">Zip:</label>
- </td>
- <td class="field">
- <input maxlength="10" class="billingRequired zipcode" name="bill_zip" style="width: 100px" type="text" class="zipcode" tabindex="9" value="">
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="bill_phone">Phone:</label>
- </td>
- <td class="field">
- <input maxlength="14" class="billingRequired phone" name="bill_phone" style="width: 100px" type="text" class="phone" tabindex="10" value="">
- </td>
- </tr>
- </table>
- </div>
- </td>
- </tr>
- <tr>
- <td class="label">Credit Card Type:</td>
- <td class="field">
- <select id="cc_type" class="required" name="cc_type" class="creditCardType" tabindex="11">
- <option value="">Choose Credit Card</option>
- <option value="amex">American Express</option>
- <option value="discover">Discover</option>
- <option value="mastercard">MasterCard</option>
- <option value="visa">Visa</option>
- </select>
- </td>
- </tr>
- <tr>
- <td class="label">Expiration:</td>
- <td class="field">
- <select id="cc_exp_month" name="cc_exp_month" title="ExpirationMonth" tabindex="12">
- <option value="01">01 - Jan</option>
- <option value="02">02 - Feb</option>
- <option value="03">03 - Mar</option>
- <option value="04">04 - Apr</option>
- <option value="05">05 - May</option>
- <option value="06">06 - Jun</option>
- <option value="07">07 - Jul</option>
- <option value="08">08 - Aug</option>
- <option value="09">09 - Sep</option>
- <option value="10">10 - Oct</option>
- <option value="11">11 - Nov</option>
- <option value="12">12 - Dec</option>
- </select>
- <select id="cc_exp_year" name="cc_exp_year" title="ExpirationYear" tabindex="13">
- <option value="2007">2007</option>
- <option value="2008" selected="selected">2008</option>
- <option value="2009">2009</option>
- <option value="2010">2010</option>
- <option value="2011">2011</option>
- <option value="2012">2012</option>
- <option value="2013">2013</option>
- <option value="2014">2014</option>
- <option value="2015">2015</option>
- <option value="2016">2016</option>
- </select>
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="credit_card">Credit Card Number:</label>
- </td>
- <td class="field">
- <input maxlength="40" id="creditcard" class="required" name="credit_card" size="20" type="text" tabindex="14">
- </td>
- </tr>
- <tr>
- <td class="label">
- <label for="cc_cvv">Security Code:</label>
- </td>
- <td class="field">
- <input id="ccNumber" class="required" maxlength="4" name="cc_cvv" style="width: 30px;" type="text" style="vertical-align: top;" tabindex="16" value="">
- </td>
- </tr>
- <tr>
- <td></td>
- <td>
- <div class="buttonSubmit">
- <span></span>
- <input class="formButton" type="submit" value="Finish" style="width: 180px">
- </div>
- <br clear="all">
- </td>
- </tr>
- </table>
- </form>
- <br clear="all">
- </div>
- </div>
- <!-- end main content -->
- <br>
- </div>
- <!-- end col-main -->
- <!-- start left col -->
- <div id="col-left" class="nav-left-back empty resize" style="position: absolute; min-height: 450px;">
- <div class="col-left-header-tab" style="position: absolute;">Signup</div>
- <div class="nav-left">
- </div>
- <div class="left-nav-callout png" style="top: 15px; margin-bottom: 100px;">
- <img src="images/left-nav-callout-long.png" class="png" alt="">
- <h6>Sign Up Process</h6>
- <a style="background-image: url(images/step1-24.gif); font-weight: normal; text-decoration: none; cursor: default;">Sign up with a valid credit card.</a>
- <a style="background-image: url(images/step2-24.gif); font-weight: normal; text-decoration: none; cursor: default;">Connect to your Google AdWords account. You will need your AdWords Customer ID.</a>
- <a target="_blank" style="background-image: url(images/step3-24.gif); font-weight: normal; text-decoration: none; cursor: default;">Start your 30 day trial. No payments until trial ends.</a>
- </div>
- <div class="footerAddress">
- <b>Marketo Inc.</b>
- <br>1710 S. Amphlett Blvd.
- <br>San Mateo, CA 94402 USA
- <br>
- </div>
- <br clear="all">
- </div>
- <!-- end left col -->
- </div>
- </div>
- <!-- end page container 2 divs-->
- <div id="footer-container" align="center">
- <div class="footer">
- <ul>
- <li><a href="..">Home</a>
- </li>
- <li class="line-off"><a href=".">Back to first step</a>
- </li>
- </ul>
- </div>
- </div>
- <!-- end page wrapper -->
-</div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/stylesheet.css b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/stylesheet.css
deleted file mode 100644
index cdee65f9..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/marketo/stylesheet.css
+++ /dev/null
@@ -1,1179 +0,0 @@
-:-moz-any-link :focus {
- outline: none;
-}
-
-:focus {
- -moz-outline-style: none;
- outline: none;
-}
-
-body {
- font-size: 80%;
- margin: 0;
- padding: 0;
- font-family: tahoma, geneva, sans-serif;
- background-color: #000000;
-}
-
-a {
- color: #0653AB;
- outline: 0px;
- text-decoration: none;
-}
-
-a:hover {
- outline: 0px;
- text-decoration: underline;
-}
-
-img {
- border: 0px;
-}
-
-/* s1.0 - Page Containers */
-#letterbox {
- margin: 10px auto;
- width: 883px;
- background-color: #364158;
- border: 8px solid #D4D4D4;
- padding: 1px 1px 10px 1px;
-}
-
-#header-background {
- background: url(images/back_nav_blue.gif) repeat-x;
- margin: 0px auto;
- padding: 0px;
- height: 73px;
- width: 883px;
- border-top: 4px solid #CCEAFE;
- border-bottom: 4px solid #D4D4D4;
-}
-
-#page-container {
- width: 866px;
- margin: 0px auto;
- margin-top: 33px; /* pad from top menu to actions buts*/
- margin-bottom: -11px;
- padding-top: 8px;
- padding-bottom: 8px;
- background-color: #D4D4D4; /* light grey*/
- border-right: 1px solid #464646;
-}
-
-#page-content-inner {
- width: 849px;
- margin: 0px auto;
- border-top: 1px solid #9F9FA0;
- border-left: 1px solid #A2A09A;
- background-color: #F4F1E9;
- position: relative;
-}
-
-#page-content-inner #col-left {
- width: 210px;
- float: left;
- background-color: #F4F1E9;
-}
-
-#page-content-inner #col-main {
- width: 639px;
- background-color: #ffffff;
- position: absolute;
- right: 0px;
- top: 0px;
-}
-
-#footer-container {
- width: 866px;
- position: relative;
- left: 8px;
- padding: 2px 0px 10px 0px;
- background-color: #D4D4D4; /* light grey*/
-}
-
-/* s2.0 - Global navigation bar */
-.nav-global-container {
- width: 880px;
- margin: 0px auto;
- position: relative;
-}
-
-* html .nav-global-container { /* ie6 fix*/
- margin-bottom: -6px;
-}
-
-.login {
- position: absolute;
- right: 20px;
- text-align: center;
-}
-
-.login a,.login a span {
- display: block;
- height: 18px;
- font-size: 11px;
- background: url(images/login-sprite.gif) right -5px no-repeat;
- text-decoration: none;
- font-weight: bold;
- padding: 5px 10px 5px 10px;
- position: relative;
-}
-
-.login a:hover {
- color: #000000;
- text-decoration: underline;
-}
-
-div.login a span {
- background-position: left -105px;
- width: 4px;
- position: absolute;
- top: 0px;
- left: 0px;
- padding: 5px 0px 5px 0px;;
-}
-
-div.login a:hover span {
-
-}
-
-.logo {
- float: left;
- margin: 0px 0px -5px 0px; /* neg marging for ie6 */
-}
-
-.logo img {
- border: 0px;
- margin-left: -1px;
-}
-
-.nav-global {
- float: left;
- width: 645px;
- margin: 40px 0px 0px 40px;
- background-color: transparent;
-}
-
-.nav-global ul {
- margin: 0px;
- padding: 0px;
- list-style: none;
-}
-
-.nav-global li {
- float: left;
- white-space: nowrap;
-}
-
-div.nav-global li a,div.nav-global li a span {
- background-image: url(images/tab-sprite.gif);
- background-position: right 100px;
- background-repeat: no-repeat;
- height: 32px;
- color: #666666;
- text-decoration: none;
- font: bold 16px 'trebuchet ms';
- margin-right: 15px;
- display: block;
- position: relative;
- padding: 7px 15px 0px 15px;
-}
-
-div.nav-global li a:hover {
- background-position: right 0px;
- color: #333333;
-}
-
-div.nav-global li a:hover span {
- background-position: left -100px;
- display: block !important;
-}
-
-div.nav-global li a span {
- background-position: left 150px;
- width: 4px;
- position: absolute;
- left: 0px;
- top: 0px;
- padding: 7px 0px 0px 0px;
-}
-
-body.safari div.nav-global li a span {
- display: none;
-}
-
-div.nav-global li a.on,div.nav-global li a.on:hover {
- background-position: right -55px;
- color: #FFFFFF;
-}
-
-div.nav-global li a.on span,div.nav-global li a.on:hover span {
- background-position: left -155px;
- display: block !important;
-}
-
-div.action-container {
- position: relative;
- top: -45px;
- cursor: pointer;
-}
-
-div.action-icon-container {
- position: absolute;
- top: -17px;
- left: -17px;
- z-index: 10;
- width: 100px;
- height: 100px;
- overflow: hidden;
-}
-
-div.action-icon {
- border: 0px;
- position: absolute;
- top: -0px;
- left: 0px;
-}
-
-div.action-button-container {
- height: 106px;
- width: 180px;
- overflow: hidden;
- position: absolute;
- top: 0px;
- left: 0px;
- z-index: 5;
-}
-
-img.action-icon {
- border: 0px;
- position: absolute;
- top: 0px;
- left: 0px;
- z-index: 0
-}
-
-div.action-text {
- z-index: 20;
- color: #FFFFFF;
- position: absolute;
- left: 40px;
- top: 12px;
- font: 14px tahoma, geneva;
- padding-top: 30px;
-}
-
-div.bigbuttons {
- top: -20px;
-}
-
-div.action-header {
- z-index: 21;
- position: absolute;
- left: 40px;
- top: 10px;
-}
-
-div.action-header b {
- font: bold 17px tahoma, geneva;
- display: block;
- margin-bottom: 10px;
- color: #0b2c89;
- position: absolute;
- top: 0px;
- left: 0px;
- width: 130px;
-}
-
-div.action-header b.shadow {
- top: 1px;
- left: 1px;
- color: #d5d5d5;
-}
-
-img.action-button {
- position: relative;
-}
-
-div.hover img.action-button {
- top: -131px;
-}
-
-div.on img.action-button {
- top: -261px;
-}
-
-/* s3.0 - top of content Action Buttons */
-.action-buttons {
- width: 100%; /* ie6 requires */
-}
-
-.action-buttons ul {
- position: relative;
- padding: 0px;
-}
-
-.action-buttons li {
- position: relative; /* ie6 fix */
- float: left;
- list-style: none;
- text-align: center;
- line-height: 16px;
- margin: -61px 0px 0px 0px;
-}
-
-.action-home li {
- margin: -49px 0px 0px 0px;
-}
-
-.action-buttons a {
- display: block;
- height: 110px;
- width: 175px;
- padding: 14px 0px 0px 25px;
- text-decoration: none;
- font-size: 12px;
- font-weight: bold;
- color: #ffffff;
-}
-
-.action-buttons li span {
- color: #053880;
- line-height: 47px;
- font-size: 17px;
-}
-
-div.action-bottom {
- margin: 15px 0px 10px 0px;
- float: left;
-}
-
-div.action-bottom a {
- height: 61px;
- width: 178px;
- border: 0px;
- background: url(images/action-bottom.gif) no-repeat 0px 0px;
- color: #0b2c89;
- float: left;
- position: relative;
- font: bold 17px tahoma, geneva;
- text-decoration: none;
- margin-right: 10px;
-}
-
-div.action-bottom a span {
- position: absolute;
- top: 15px;
- left: 40px;
-}
-
-div.action-bottom a span.shadow {
- top: 16px;
- left: 41px;
- color: #d4d4d4;
-}
-
-.line-grey {
- background: url(images/line-grey.gif) 0 0 repeat-x;
- height: 2px;
- margin: 8px 25px 20px 0;
-}
-
-/* s4.0 - Home Hero Area */
-.hero-background {
- position: relative;
- width: 880px;
- background: url(images/back_home-hero.jpg) 10px 0px no-repeat;
- height: 211px;
- margin: -20px 0px 45px 0px;
-}
-
-.hero-text {
- float: right;
- width: 626px;
- margin-top: 26px;
-}
-
-.hero-text a { /* Sign Up Now Button */
- padding: 5px 32px 0px 0px;
- float: right;
-}
-
-.hero-text h1 {
- font-size: 2.3em;
- line-height: 1.2em;
- color: #333333;
- font-family: Trebuchet MS;
- margin: 12px 0px 10px 10px;
-}
-
-.hero-text h2 {
- margin: 0px;
- font-weight: normal;
- font-size: 1.35em;
- margin: 5px 0px 13px 10px
-}
-
-/* s4.1 - Home Left Header tab */
-.col-left-header-tab {
- position: relative; /* ie6 fix */
- background: url(images/tab_green.gif) 0 0 no-repeat;
- height: 30px;
- width: 166px;
- text-align: center;
- color: #ffffff;
- font: 20px 'trebuchet ms';
- padding-top: 2px;
- margin-top: -41px;
- margin-left: 20px;
- line-height: 29px;
- margin-bottom: 8px;
- display: block;
-}
-
-.col-left-header-tab a {
- color: #FFFFFF;
-}
-
-.callout-green {
- background: url(images/back_green-fade.gif) 0 0 repeat-x;
- font-size: 1.2em;
- padding: 10px 15px 20px 13px;
- color: #303B52;
- line-height: 1.4em;
-}
-
-/* s4.2 - Home Left Quote */
-.callout-tan {
- color: #666666;
-}
-
-.callout-tan h1 {
- background: #F4F1E9 url(images/back_tan-fade.gif) 0 0 repeat-y;
- font-size: 1.1em;
- text-align: center;
- margin: 0px;
- padding: 11px 5px 11px 2px;
- color: #333333;
-}
-
-.callout-tan p {
- margin: 0px;
- margin-top: 5px;
- line-height: 1.4em;
- padding: 5px 10px 7px 13px;
-}
-
-.callout-tan p img {
- float: left;
- margin: 5px 10px 5px 0px;
-}
-
-.callout-tan div {
- text-align: left;
- padding: 5px 10px 7px 0px;
- font-weight: bold;
-}
-
-/* s4.3 - purple home boxes */
-.box-purple {
- background: #C6C8E3 url(images/back_home-icons.png) 0px 0px repeat-x;
- border-left: 1px solid #ffffff;
- color: #333333;
- width: 581px;
- padding: 10px 15px 20px 15px;
-}
-
-div.box-purple a {
-
-}
-
-.box-purple h1 {
- font-size: 1.5em;
- margin: 10px 0px -15px 0px;
-}
-
-.box-purple li {
- margin: 0px 0px 0px -23px;
- line-height: 1.6em;
- font-size: 1em;
-}
-
-.box-purple div {
- padding: 0px 0px 0px 110px;
-}
-
-.icon-text01 {
- background-image: url(images/icon_search-engine-market.png);
- background-repeat: no-repeat;
-}
-
-* html .icon-text01 {
- width: 460px; /* must have a width or heigh tag for ie6*/
- background-image: none;
- filter: progid : DXImageTransform . Microsoft .
- AlphaImageLoader(src = "images/icon_search-engine-market.png",
- sizingMethod = "crop");
-}
-
-.icon-text02 {
- background: url(images/icon_landing-pages.png) 0 0 no-repeat;
-}
-
-* html .icon-text02 {
- width: 460px; /* must have a width or heigh tag for ie6*/
- background-image: none;
- filter: progid : DXImageTransform . Microsoft .
- AlphaImageLoader(src = "images/icon_landing-pages.png", sizingMethod =
- "crop");
-}
-
-.icon-text03 {
- background: url(images/icon_salesforce.png) 0 0 no-repeat;
-}
-
-* html .icon-text03 {
- width: 460px; /* must have a width or heigh tag for ie6*/
- background-image: none;
- filter: progid : DXImageTransform . Microsoft .
- AlphaImageLoader(src = "images/icon_salesforce.png", sizingMethod =
- "crop");
-}
-
-/* s4.4 - news home boxes */
-.callout-news {
- color: #555555;
- float: left;
- width: 49%;
- margin: 10px 1px 0px 0px;
- padding-bottom: 20px;
- text-align: left;
-}
-
-.line-news-r {
- border-right: 1px solid #D4D4D4;
-}
-
-.callout-news h1 {
- background-color: #EEEEEE;
- font-size: 1.2em;
- margin: 0px;
- padding: 11px 5px 11px 15px;
- color: #333333;
-}
-
-.callout-news p {
- margin: 10px 0px 0px 10px;
- padding: 0px 10px 7px 20px;
- background: url(images/news.gif) no-repeat left 1px;
-}
-
-.callout-news p a {
-
-}
-
-.callout-news ul {
- list-style-type: none;
- padding: 0;
- margin: 10px 0 0 10px;
-}
-
-.callout-news li {
- background: url(images/icon_news.gif) no-repeat left 2px;
- padding: 0px 5px 5px 20px;
-}
-
-.callout-news li a {
- display: block;
- margin-bottom: 5px;
-}
-
-.callout-news div {
- text-align: right;
-}
-
-#scrollup {
- position: relative;
- overflow: hidden;
- height: 440px;
- width: 200px
-}
-
-.headline {
- position: absolute;
- top: 600px;
- left: 5px;
- height: 585px;
- width: 190px;
- font: normal 12px tahoma, geneva !important;
-}
-
-div.more {
- margin: 5px 0px 0px 0px;
- padding: 0px 10px 0px 0px;
- letter-spacing: inherit;
-}
-
-div.more a {
- background: transparent url(images/arrow_r-blue.gif) no-repeat right 2px
- ;
- font-weight: bold;
- padding: 0px 20px 0px 0px;
- font-weight: bold;
- text-decoration: none;
-}
-
-div.more a:hover {
- text-decoration: underline;
-}
-
-/* sX.0 - Left Nav */
-.nav-left-back {
- background: url(images/back_nav_side.gif) 0 0 repeat-x;
-}
-
-div.empty {
- background: #F1F0E5 url(images/back_green-fade.gif) 0 0 repeat-x;
-}
-
-div.empty div.callout-green {
-
-}
-
-.nav-left {
- padding-top: 12px;
- /*background: url(images/logo_marketo_square.gif) 0 0 no-repeat;*/
- width: 210px;
-}
-
-.nav-left ul {
- margin: 0px;
- padding: 0px;
- list-style: none;
-}
-
-.nav-left li a {
- display: block;
- height: 24px;
- text-decoration: none;
- font-size: 12px;
- font-weight: bold;
- color: #ffffff;
- border-top: 1px solid #B3D38D;
- border-bottom: 1px solid #7CA84E;
- border-left: 1px solid #97B973;
- padding: 6px 0px 0px 20px;
-}
-
-.nav-left a:hover,.nav-left a.active:hover,#nav-left-sub a:hover {
- color: #4C6F28;
- background-color: #F4F1E9;
-}
-
-.nav-left a.open {
- background-image: url(images/arrow_d-green.gif);
- background-repeat: no-repeat;
- background-position: 6px 11px;
-}
-
-.nav-left-header-tab {
- position: relative; /* ie6 fix */
- background: url(images/tab_green.gif) 0 0 no-repeat;
- height: 32px;
- width: 166px;
- text-align: center;
- color: #ffffff;
- margin: -41px 0px 0px 22px;
- line-height: 22px;
- margin-bottom: 8px;
- display: block;
-}
-
-div.empty div.nav-left-header-tab {
- background: url(images/tab_green2.gif) 0 0 no-repeat;
-}
-
-.nav-left a.active {
- /* background: url(images/arrow_d-green.gif) 5px 10px no-repeat; */
- display: block;
- height: 24px;
- text-decoration: none;
- font-size: 12px;
- font-weight: bold;
- background-color: #F4F1E9;
- color: #4C6F28;
- border-top: 1px solid #D1E5BB;
- border-bottom: 1px solid #B0CB95;
- border-left: 1px solid #DADADA;
- padding: 6px 0px 0px 20px;
-}
-
-#nav-left-sub a {
- display: block;
- height: 24px;
- text-decoration: none;
- font-size: 12px;
- font-weight: bold;
- background-color: #D6E8C4;
- color: #4C6F28;
- border-top: 1px solid #D6E8C4;
- border-bottom: 1px solid #B0CB95;
- border-left: 1px solid #97B973;
- border-right: 1px solid #8DBE5A;
- padding: 6px 0px 0px 30px;
-}
-
-* html #nav-left-sub { /* ie6 fix */
- margin-top: -1px;
-}
-
-*+html #nav-left-sub { /* ie7 fix */
- margin-top: -1px;
-}
-
-#nav-left-sub a.active-page {
- display: block;
- height: 24px;
- text-decoration: none;
- font-size: 12px;
- font-weight: bold;
- background-color: #ffffff;
- color: #666666;
- border-top: 0px solid #7CA84E;
- border-bottom: 1px solid #B0CB95;
- border-left: 1px solid #97B973;
- border-right: 0px solid #8DBE5A;
- padding: 6px 0px 0px 30px;
- cursor: default; /* turns off hand icon for link */
-}
-
-/* sX.0 - Main Content */
-.main-content {
- color: #666666;
- position: absolute;
- right: 20px;
- padding-top: 20px;
- width: 585px;
- padding-bottom: 20px;
-}
-
-div.main-content div.main-content {
-
-}
-
-.main-content h1 {
- color: #5890D1;
- font-size: 1.9em;
- font-family: Trebuchet MS;
- border-bottom: 1px solid #cccccc;
- margin: 0px 10px 0px 0px;
-}
-
-.main-content h2 {
- color: #666666;
- font-size: 1.3em;
- font-weight: normal;
- margin: 10px 10px 5px 0px;
-}
-
-.main-content p {
- margin: 10px 10px 10px 0px;
- line-height: 1.55em;
-}
-
-/* sX.1 - Main Content Sub Styles */
-.sub-grey {
- border-top: 1px solid #D4D4D4;
- border-bottom: 1px solid #D4D4D4;
- background-color: #F4F4F4;
- margin: 10px 10px 0px 0px;
- padding: 0px 10px 20px 15px;
-}
-
-.sub-white {
- margin: 10px 10px 0px 0px;
- padding: 0px 10px 20px 15px;
-}
-
-img.screen-grab-r {
- margin-right: -8px;
- text-align: right;
- padding: 0px 0px 0px 10px;
-}
-
-div.main-content a.screenshot {
- float: right;
- padding: 10px 10px 0px 0px
-}
-
-.content-foot {
- border-top: 1px solid #D4D4D4;
- font-size: .9em;
- line-height: 1.45em;
- margin: 10px 20px 0px 0px;
- padding: 10px 10px 30px 0px;
-}
-
-div.main-content ul {
- position: relative;
- left: -25px;
-}
-
-div.main-content li {
- margin-bottom: 5px;
- list-style-type: disc
-}
-
-div.main-content li a {
- color: #6A6CB0;
-}
-
-/* sX.0 - Footer */
-div.footer {
- color: #666666;
- font-size: .85em;
- font-weight: normal;
- height: 18px;
- margin: 0px auto;
- font-family: Tahoma, Geneva, sans-serif;
- margin-top: 10px;
-}
-
-.footer ul {
- list-style-type: none;
-}
-
-.footer li {
- float: left;
- border-right: 1px solid #666666;
- padding: 0px 7px 0px 7px;
- margin-top: 3px;
-}
-
-.footer a {
- color: #666666;
- text-decoration: none;
-}
-
-.footer a:hover {
- color: #0653AB;
- text-decoration: none;
-}
-
-.footer li.line-off {
- border-right: 0px solid #ffffff;
-}
-
-div.footer strong {
- font-weight: normal;
-}
-
-/* sX.0 - General Colors */
-.line-grey,.line-grey-tier {
- border-top: 1px solid #A3A3A2;
-}
-
-.line-grey-tier {
- padding-bottom: 25px;
-}
-
-.bottom {
- height: 10px;
-}
-
-div.p10bottom {
- padding-bottom: 10px;
-}
-
-.clear {
- clear: both;
-}
-
-table.grid {
- background: #EEEEEE;
-}
-
-table.grid th {
- background-color: #F4F4F4;
-}
-
-table.grid td {
- background-color: #FFFFFF;
-}
-
-div.buttonSubmit {
- position: relative;
-}
-
-div.buttonSubmit input,div.buttonSubmit span {
- height: 36px;
- position: relative;
- background-image: url(images/button-submit.gif);
- background-repeat: no-repeat;
- background-position: right 0px;
- float: left;
- color: #FFFFFF;
- font-weight: bold;
- padding: 0px 15px 2px 15px;
- margin: 20px 0px 20px 0px;
- border: 0px;
- cursor: pointer;
- z-index: 5;
-}
-
-div.buttonSubmit input {
- width: auto;
-}
-
-div.buttonSubmit span {
- width: 4px;
- position: absolute;
- left: 0px;
- top: 0px;
- background-position: left -36px;
- padding: 0px 0px 0px 0px;
- z-index: 10;
-}
-
-body.safari div.buttonSubmit span {
- display: none
-}
-
-div.buttonSubmitHover input {
- background-position: right -72px;
-}
-
-div.buttonSubmitHover span {
- background-position: left -108px;
-}
-
-a.demoLink {
- padding: 1px 10px 0px 17px;
- height: 24px;
- background: url(images/bullet_triangle_blue.gif) no-repeat 0px 4px;
- display: block;
- float: left;
-}
-
-div.callout-tan a {
- background: none;
- color: #0653AB;
- margin: auto;
- display: block;
-}
-
-div.callout-tan a:hover {
- background: none;
- color: #0653AB;
-}
-
-label.error {
- display: block;
- color: red;
- font-style: italic;
- font-weight: normal;
-}
-
-input.error {
- border: 2px solid red;
-}
-
-p.demoBlock {
- border-bottom: 1px solid #DDDDDD;
- padding-bottom: 10px;
-}
-
-div.left-nav-callout {
- height: 200px;
- width: 190px;
- top: 55px;
- left: 5px;
- position: relative;
- padding-left: 9px;
- padding-top: 13px;
-}
-
-div.left-nav-callout img.png {
- position: absolute;
- z-index: 0;
- top: 0px;
- left: 0px;
-}
-
-div.left-nav-callout h6 {
- font: bold 14px tahoma, geneva;
- color: #333333;
- height: 36px;
- padding-left: 5px;
- margin: 0px;
- position: relative;
- z-index: 10;
-}
-
-div.left-nav-callout a {
- background: url(images/monitor24.gif) no-repeat 0px center;
- padding: 5px 0px 5px 30px;
- display: block;
- font: bold 12px tahoma, geneva;
- color: #336699;
- margin-bottom: 5px;
- position: relative;
- z-index: 10;
- width: 140px;
-}
-
-form table td {
- padding: 5px;
-}
-
-form table input {
- width: 200px;
- padding: 3px;
- margin: 0px;
-}
-
-textarea {
- width: 400px
-}
-
-td.label {
- width: 150px;
-}
-
-tr.required td.label {
- font-weight: bold;
- background: url(/images/forms/backRequiredGray.gif) no-repeat right
- center;
-}
-
-div.subTableDiv {
- width: 500px;
-}
-
-div.subTableDiv td.label {
- width: 135px;
-}
-
-ul#homeBlog li div.description {
- display: none;
-}
-
-td.field input.error, td.field select.error, tr.errorRow td.field input,tr.errorRow td.field select {
- border: 2px solid red;
- background-color: #FFFFD5;
- margin: 0px;
- color: red;
-}
-
-tr td.field div.formError {
- display: none;
- color: #FF0000;
-}
-
-tr.errorRow td.field div.formError {
- display: block;
- font-weight: normal;
-}
-
-div.error {
- color: red;
-}
-
-div.error a {
- color: #336699;
- font-size: 12px;
- text-decoration: underline
-}
-
-div.tooltip {
- position: absolute;
- left: 30px;
- bottom: 0px;
- display: none; /* in case javascript is disabled */
- width: 170px;
- background-color: #F4F1E9;
- z-index: 100;
- padding: 10px;
- border: 1px solid #CCCCCC;
-}
-
-div.offerbox {
- width: 125px;
- float: left;
- position: relative;
-}
-
-div.offerbox h3 {
- font: bold 17px tahoma, geneva;
- color: #333333;
- height: 55px;
- margin: 0px auto;
- text-align: center;
-}
-
-div.offerbox h4 {
- height: 100px;
- font: normal 13px tahoma, geneva;
- margin: 0px;
-}
-
-div.offerbox h5 {
- font: bold 14px tahoma, geneva;
- margin: 0px;
- height: 55px;
-}
-
-div.offerbox h5 small {
- float: left;
- font-weight: normal;
- font-size: 10px;
-}
-
-div.offerbox div.learnmore {
- padding-left: 25px;
-}
-
-div#marketoEditions {
- background: url(images/buynowBack.gif) no-repeat;
- width: 584px;
- height: 376px;
- float: left;
- position: relative;
- margin-bottom: 10px;
-}
-
-div.offerHeader {
- background: #0D8BBD;
- position: absolute;
- top: 20px;
- width: 266px;
- height: 34px;
- border: 1px solid #e1e4e2;
-}
-
-div.offerHeader span {
- font: 20px 'trebuchet ms';
- color: #FFFFFF;
- position: absolute;
- left: 0px;
- top: 0px;
-}
-
-div.offerHeader span.shadow {
- font: 20px 'trebuchet ms';
- color: #333333;
- position: absolute;
-}
-
-div.offerbox div.buttonSubmit {
- margin: 5px 0px 0px 10px;
-}
-
-div.footerAddress {
- position: absolute;
- bottom: 30px;
- left: 20px;
- color: #666666;
- font-size: 11px;
- display: none;
-}
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/bg.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/bg.gif
deleted file mode 100644
index 2c7c3587..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/bg.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/index.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/index.html
deleted file mode 100644
index d2f57d03..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/index.html
+++ /dev/null
@@ -1,250 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>Remember The Milk signup form - jQuery Validate plugin demo - with friendly permission from the RTM team</title>
- <link rel="stylesheet" href="milk.css">
- <script src="../../lib/jquery.js"></script>
- <script src="../../lib/jquery.mockjax.js"></script>
- <script src="../../dist/jquery.validate.js"></script>
- <script>
- $(document).ready(function() {
- $.mockjax({
- url: "emails.action",
- response: function(settings) {
- var email = settings.data.email,
- emails = ["glen@marketo.com", "george@bush.gov", "me@god.com", "aboutface@cooper.com", "steam@valve.com", "bill@gates.com"];
- this.responseText = "true";
- if ($.inArray(email, emails) !== -1) {
- this.responseText = "false";
- }
- },
- responseTime: 500
- });
-
- $.mockjax({
- url: "users.action",
- response: function(settings) {
- var user = settings.data.username,
- users = ["asdf", "Peter", "Peter2", "George"];
- this.responseText = "true";
- if ($.inArray(user, users) !== -1) {
- this.responseText = "false";
- }
- },
- responseTime: 500
- });
-
- // validate signup form on keyup and submit
- var validator = $("#signupform").validate({
- rules: {
- firstname: "required",
- lastname: "required",
- username: {
- required: true,
- minlength: 2,
- remote: "users.action"
- },
- password: {
- required: true,
- minlength: 5
- },
- password_confirm: {
- required: true,
- minlength: 5,
- equalTo: "#password"
- },
- email: {
- required: true,
- email: true,
- remote: "emails.action"
- },
- dateformat: "required",
- terms: "required"
- },
- messages: {
- firstname: "Enter your firstname",
- lastname: "Enter your lastname",
- username: {
- required: "Enter a username",
- minlength: jQuery.validator.format("Enter at least {0} characters"),
- remote: jQuery.validator.format("{0} is already in use")
- },
- password: {
- required: "Provide a password",
- minlength: jQuery.validator.format("Enter at least {0} characters")
- },
- password_confirm: {
- required: "Repeat your password",
- minlength: jQuery.validator.format("Enter at least {0} characters"),
- equalTo: "Enter the same password as above"
- },
- email: {
- required: "Please enter a valid email address",
- minlength: "Please enter a valid email address",
- remote: jQuery.validator.format("{0} is already in use")
- },
- dateformat: "Choose your preferred dateformat",
- terms: " "
- },
- // the errorPlacement has to take the table layout into account
- errorPlacement: function(error, element) {
- if (element.is(":radio"))
- error.appendTo(element.parent().next().next());
- else if (element.is(":checkbox"))
- error.appendTo(element.next());
- else
- error.appendTo(element.parent().next());
- },
- // specifying a submitHandler prevents the default submit, good for the demo
- submitHandler: function() {
- alert("submitted!");
- },
- // set this class to error-labels to indicate valid fields
- success: function(label) {
- // set &nbsp; as text for IE
- label.html("&nbsp;").addClass("checked");
- },
- highlight: function(element, errorClass) {
- $(element).parent().next().find("." + errorClass).removeClass("checked");
- }
- });
-
- // propose username by combining first- and lastname
- $("#username").focus(function() {
- var firstname = $("#firstname").val();
- var lastname = $("#lastname").val();
- if (firstname && lastname && !this.value) {
- this.value = (firstname + "." + lastname).toLowerCase();
- }
- });
- });
- </script>
-</head>
-<body>
-<h1 id="banner"><a href="http://jqueryvalidation.org/">jQuery Validation Plugin</a> Demo</h1>
-<div id="main">
- <div id="content">
- <div id="header">
- <div id="headerlogo">
- <img src="milk.png" alt="Remember The Milk">
- </div>
- </div>
- <div style="clear: both;">
- <div></div>
- </div>
- <div class="content">
- <div id="signupbox">
- <div id="signuptab">
- <ul>
- <li id="signupcurrent"><a href=" ">Signup</a>
- </li>
- </ul>
- </div>
- <div id="signupwrap">
- <form id="signupform" autocomplete="off" method="get" action="">
- <table>
- <tr>
- <td class="label">
- <label id="lfirstname" for="firstname">First Name</label>
- </td>
- <td class="field">
- <input id="firstname" name="firstname" type="text" value="" maxlength="100">
- </td>
- <td class="status"></td>
- </tr>
- <tr>
- <td class="label">
- <label id="llastname" for="lastname">Last Name</label>
- </td>
- <td class="field">
- <input id="lastname" name="lastname" type="text" value="" maxlength="100">
- </td>
- <td class="status"></td>
- </tr>
- <tr>
- <td class="label">
- <label id="lusername" for="username">Username</label>
- </td>
- <td class="field">
- <input id="username" name="username" type="text" value="" maxlength="50">
- </td>
- <td class="status"></td>
- </tr>
- <tr>
- <td class="label">
- <label id="lpassword" for="password">Password</label>
- </td>
- <td class="field">
- <input id="password" name="password" type="password" maxlength="50" value="">
- </td>
- <td class="status"></td>
- </tr>
- <tr>
- <td class="label">
- <label id="lpassword_confirm" for="password_confirm">Confirm Password</label>
- </td>
- <td class="field">
- <input id="password_confirm" name="password_confirm" type="password" maxlength="50" value="">
- </td>
- <td class="status"></td>
- </tr>
- <tr>
- <td class="label">
- <label id="lemail" for="email">Email Address</label>
- </td>
- <td class="field">
- <input id="email" name="email" type="text" value="" maxlength="150">
- </td>
- <td class="status"></td>
- </tr>
- <tr>
- <td class="label">
- <label>Which Looks Right</label>
- </td>
- <td class="field" colspan="2" style="vertical-align: top; padding-top: 2px;">
- <table>
- <tbody>
- <tr>
- <td style="padding-right: 5px;">
- <input id="dateformat_eu" name="dateformat" type="radio" value="0">
- <label id="ldateformat_eu" for="dateformat_eu">14/02/07</label>
- </td>
- <td style="padding-left: 5px;">
- <input id="dateformat_am" name="dateformat" type="radio" value="1">
- <label id="ldateformat_am" for="dateformat_am">02/14/07</label>
- </td>
- <td>
- </td>
- </tr>
- </tbody>
- </table>
- </td>
- </tr>
- <tr>
- <td class="label">&nbsp;</td>
- <td class="field" colspan="2">
- <div id="termswrap">
- <input id="terms" type="checkbox" name="terms">
- <label id="lterms" for="terms">I have read and accept the Terms of Use.</label>
- </div>
- <!-- /termswrap -->
- </td>
- </tr>
- <tr>
- <td class="label">
- <label id="lsignupsubmit" for="signupsubmit">Signup</label>
- </td>
- <td class="field" colspan="2">
- <input id="signupsubmit" name="signup" type="submit" value="Signup">
- </td>
- </tr>
- </table>
- </form>
- </div>
- </div>
- </div>
- </div>
-</div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/left_white.png b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/left_white.png
deleted file mode 100644
index b889960c..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/left_white.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/milk.css b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/milk.css
deleted file mode 100644
index d5f128bf..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/milk.css
+++ /dev/null
@@ -1,236 +0,0 @@
-/* GENERAL ELEMENTS */
-
-* { margin: 0; padding: 0; }
-
-body, input, select, textarea { font-family: verdana, arial, helvetica, sans-serif; font-size: 11px; }
-body { color: #333; background-color: #fff; text-align: center; }
-
-a:link { color:#0060BF; text-decoration: underline; }
-a:visited { color:#0060BF; text-decoration: underline; }
-a:active { color:#0060BF; text-decoration: underline; }
-a:hover { color:#000000; text-decoration: underline; }
-
-h1, h2, h3, h4, h5, h6 { font-family: "Lucida Grande", "Lucida Sans Unicode", geneva, verdana, arial, helvetica, sans-serif; font-weight: bold; color: #666; }
-h1 { font-size: 1.8em; margin: 0em 0em 0.6em 0em; color: #EC5800; }
-h2 { font-size: 1.5em; margin: 1.2em 0em 0.4em 0em; }
-h3 { font-size: 1.4em; margin: 1.2em 0em 0.4em 0em; color: #EC5800; }
-h4 { font-size: 1.2em; margin: 1.2em 0em 0.4em 0em; }
-h5 { font-size: 1.0em; margin: 1.2em 0em 0.4em 0em; }
-h6 { font-size: 0.8em; margin: 1.2em 0em 0.4em 0em; }
-
-img { border: 0px; }
-
-p { font-size: 1.0em; line-height: 1.3em; margin: 1.2em 0em 1.2em 0em; }
-li > p { margin-top: 0.2em; }
-pre { font-family: monospace; font-size: 1.0em; }
-strong, b { font-weight: bold; }
-
-/* PAGE ELEMENTS */
-
-/* Content */
-
-#content { margin: 0em auto; width: 765px; padding: 10px 0 10px 0; text-align: left; /* Win IE5 */ }
-.content { margin-left: 4.5em; margin-right: 4.5em; }
-.content ol, .content ul, .content li { font-size: 1.0em; line-height: 1.3em; margin: 0.2em 0 0.1em 1.5em; }
-.content ol.terms li { margin-bottom: 1em; }
-
-/* Header */
-
-#header { padding-bottom: 10em; }
-#headerlogo { float: left; }
-#headerlogo img { width: 188px; height: 83px; }
-#headernav { float: right; }
-
-label { font-weight: bold; }
-#reminders label { font-weight: normal; }
-
-table.tabbedtable { padding-left: 3em; }
-table.tabbedtable td { padding-bottom: 5px; }
-table.tabbedtable label { text-align: right; padding-right: 9px; }
-.hiddenlabel { visibility: hidden; }
-.largelink { border: 1px solid #cacaca; padding: 10px; background-color: #E8EEF7; font-size: 1.2em; font-weight: bold; }
-.largelinkwrap { padding-top: 10px; padding-bottom: 10px; }
-
-
-
-#signuptab {
- float:left;
- width:100%;
- background:#fff url("bg.gif") repeat-x bottom;
- font-size: 1.0em;
- line-height: normal;
-}
-#signuptab ul {
- margin:0;
- padding: 0px 10px 0px 10px;
- list-style:none;
-}
-#signuptab li {
- float:left;
- background:url("left_white.png") no-repeat left top;
- margin:0;
- padding:0 3px 0 9px;
- border-bottom:1px solid #CACACA;
-}
-#signuptab a {
- float:left;
- display:block;
- width:.1em;
- background:url("right_white.png") no-repeat right top;
- padding:2px 15px 0px 6px;
- text-decoration:none;
- font-weight:bold;
- color:#fff;
- white-space: nowrap;
-}
-#signuptab > ul a {width:auto;}
-/* Commented Backslash Hack hides rule from IE5-Mac \*/
-#signuptab a {float:none;}
-/* End IE5-Mac hack */
-#signuptab a:hover {
- color:#333;
-}
-#signuptab #signupcurrent {
- background-position:0 -150px;
- border-width:0;
-}
-#signuptab #signupcurrent a {
- background-position:100% -150px;
- padding-bottom:1px;
- color:#000;
-}
-#signuptab li:hover, #signuptab li:hover a {
- background-position:0% -150px;
- color:#000;
-}
-#signuptab li:hover a {
- background-position:100% -150px;
-}
-
-/* Signup box */
-
-#signupbox {
- width: 100%;
- text-align: center;
- margin: 0em auto;
-}
-
-#signupwrap {
- border: 1px solid #CACACA;
- border-top: 0;
- text-align: left;
- padding: 35px 10px 20px 30px;
- clear: both;
-}
-
-/* Unsupported browsers */
-
-.orange_rbcontent { padding: 0.4em; }
-.orange_rbroundbox { width: 100%; }
-
-#unsupported {
- font-weight: bold;
- text-align: left;
-}
-
-/*#content {
- padding-top: 15px;
-}*/
-
-/* Signup form */
-
-#signupform table {
- border-spacing: 0px;
- border-collapse: collapse;
- empty-cells: show;
-}
-
-#signupform .label {
- padding-top: 2px;
- padding-right: 8px;
- vertical-align: top;
- text-align: right;
- width: 125px;
- white-space: nowrap;
-}
-
-#signupform .field {
- padding-bottom: 10px;
- white-space: nowrap;
-}
-
-#signupform .status {
- padding-top: 2px;
- padding-left: 8px;
- vertical-align: top;
- width: 246px;
- white-space: nowrap;
-}
-
-#signupform .textfield {
- width: 150px;
-}
-
-#signupform label.error {
- background:url("../images/unchecked.gif") no-repeat 0px 0px;
- padding-left: 16px;
- padding-bottom: 2px;
- font-weight: bold;
- color: #EA5200;
-}
-
-#signupform label.checked {
- background:url("../images/checked.gif") no-repeat 0px 0px;
-}
-
-#signupform .success_msg {
- font-weight: bold;
- color: #0060BF;
- margin-left: 19px;
-}
-
-#signupform #dateformatStatus, #signupform #termsStatus {
- margin-left: 6px;
-}
-
-#signupform #dateformat_eu {
- vertical-align: middle;
-}
-
-#signupform #ldateformat_eu {
- font-weight: normal;
- vertical-align: middle;
-}
-
-#signupform #dateformat_am {
- vertical-align: middle;
-}
-
-#signupform #ldateformat_am {
- font-weight: normal;
- vertical-align: middle;
-}
-
-#signupform #termswrap {
- float: left;
-}
-
-#signupform #terms {
- vertical-align: middle;
- float: left;
- display: block;
- margin-right: 5px;
-}
-
-#signupform #lterms {
- font-weight: normal;
- vertical-align: middle;
- float: left;
- display: block;
- width: 350px;
- white-space: normal;
-}
-
-#signupform #lsignupsubmit {
- visibility: hidden;
-} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/milk.png b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/milk.png
deleted file mode 100644
index b5e71515..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/milk.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/right_white.png b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/right_white.png
deleted file mode 100644
index 393bbe2b..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/milk/right_white.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/multipart/index.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/multipart/index.html
deleted file mode 100644
index b6988d3e..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/multipart/index.html
+++ /dev/null
@@ -1,468 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>jQuery accordion form with validation</title>
- <script src="../../lib/jquery.js"></script>
- <script src="../../dist/jquery.validate.js"></script>
- <script src="../marketo/jquery.maskedinput.js"></script>
- <script src="http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"></script>
- <script>
- $(document).ready(function() {
- $("#recordClientPhone").mask("(999) 999-9999");
- $("#recordClientPhoneAlt").mask("(999) 999-9999");
- $("#recordClientZip").mask("99999");
- $("#recordPropertyZip").mask("99999");
- $("#recordPurchaseZip").mask("99999");
-
- // add * to required field labels
- $('label.required').append('&nbsp;<strong>*</strong>&nbsp;');
-
- // accordion functions
- var accordion = $("#stepForm").accordion();
- var current = 0;
-
- $.validator.addMethod("pageRequired", function(value, element) {
- var $element = $(element)
-
- function match(index) {
- return current == index && $(element).parents("#sf" + (index + 1)).length;
- }
- if (match(0) || match(1) || match(2)) {
- return !this.optional(element);
- }
- return "dependency-mismatch";
- }, $.validator.messages.required)
-
- var v = $("#cmaForm").validate({
- errorClass: "warning",
- onkeyup: false,
- onfocusout: false,
- submitHandler: function() {
- alert("Submitted, thanks!");
- }
- });
-
- // back buttons do not need to run validation
- $("#sf2 .prevbutton").click(function() {
- accordion.accordion("option", "active", 0);
- current = 0;
- });
- $("#sf3 .prevbutton").click(function() {
- accordion.accordion("option", "active", 1);
- current = 1;
- });
- // these buttons all run the validation, overridden by specific targets above
- $(".open2").click(function() {
- if (v.form()) {
- accordion.accordion("option", "active", 2);
- current = 2;
- }
- });
- $(".open1").click(function() {
- if (v.form()) {
- accordion.accordion("option", "active", 1);
- current = 1;
- }
- });
- $(".open0").click(function() {
- if (v.form()) {
- accordion.accordion("option", "active", 0);
- current = 0;
- }
- });
- });
- </script>
- <link rel="stylesheet" media="screen" href="style.css">
-</head>
-<body>
-<div id="wrap">
- <div id="main">
- <h1 class="top bottom">
- <span>Help me</span>Buy and Sell a House</h1>
- <h2>This form is quick &amp; easy to complete - in only 3 steps!</h2>
- <form name="cmaForm" id="cmaForm" method="post">
- <input type="hidden" name="recordRequestPrimaryServiceID" id="recordRequestPrimaryServiceID" value="100">
- <input type="hidden" name="recordClientServices" id="recordClientServices" value="1,3">
- <ul id="stepForm" class="ui-accordion-container">
- <li id="sf1">
- <a href='#' class="ui-accordion-link"></a>
- <div>
- <fieldset>
- <legend>Step 1 of 3</legend>
- <div class="requiredNotice">*Required Field</div>
- <h3 class="stepHeader">Tell us about the property you're buying</h3>
- <label for="recordPurchaseMetRealtor" class="input required">Are you currently working with a
- <br>real estate agent?</label>&nbsp;&nbsp;No:
- <input name="recordPurchaseMetRealtor" type="radio" checked="checked" class="inputclass" value="0">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Yes:
- <input name="recordPurchaseMetRealtor" type="radio" class="inputclass pageRequired" value="1" title="Please choose Yes or No">
- <div class="formspacer"></div>
- <label for="recordPurchaseTimeFrameID" class="input required">When would you like to move?</label>
- <select name="recordPurchaseTimeFrameID" id="recordPurchaseTimeFrameID" class="inputclass pageRequired" title="Select a Time Frame">
- <option value="">-Select-</option>
- <option value="1">Less than 3 months</option>
- <option value="2">3-6 months</option>
- <option value="3">6-9 months</option>
- <option value="4">9-12 months</option>
- <option value="5">Over 12 months</option>
- </select>
- <br>
- <label for="recordPurchasePriceRangeID" class="input required">Purchase price range:</label>
- <select name="recordPurchasePriceRangeID" id="recordPurchasePriceRangeID" class="inputclass pageRequired" title="Select a Price Range">
- <option value="">-Select-</option>
- <option value="1"></option>
- <option value="2">$75,000 - $100,000</option>
- <option value="3">$100,000 - $125,000</option>
- <option value="4">$125,000 - $150,000</option>
- <option value="5">$150,000 - $200,000</option>
- <option value="6">$200,000 - $250,000</option>
- <option value="7">$250,000 - $300,000</option>
- <option value="8">$300,000 - $350,000</option>
- <option value="9">$350,000 - $400,000</option>
- <option value="10">$400,000 - $500,000</option>
- <option value="11">$500,000 - $700,000</option>
- <option value="12">$700,000 - $900,000</option>
- <option value="13">> $900,000</option>
- </select>
- <br>
- <label for="recordPurchaseState" class="input required">State:</label>
- <select name="recordPurchaseState" id="recordPurchaseState" class="inputclass pageRequired" title="Select a State">
- <option value="">-Select-</option>
- <option value="AL">Alabama</option>
- <option value="AK">Alaska</option>
- <option value="AZ">Arizona</option>
- <option value="AR">Arkansas</option>
- <option value="CA">California</option>
- <option value="CO">Colorado</option>
- <option value="CT">Connecticut</option>
- <option value="DE">Delaware</option>
- <option value="DC">Dist of Columbia</option>
- <option value="FL">Florida</option>
- <option value="GA">Georgia</option>
- <option value="HI">Hawaii</option>
- <option value="ID">Idaho</option>
- <option value="IL">Illinois</option>
- <option value="IN">Indiana</option>
- <option value="IA">Iowa</option>
- <option value="KS">Kansas</option>
- <option value="KY">Kentucky</option>
- <option value="LA">Louisiana</option>
- <option value="ME">Maine</option>
- <option value="MD">Maryland</option>
- <option value="MA">Massachusetts</option>
- <option value="MI">Michigan</option>
- <option value="MN">Minnesota</option>
- <option value="MS">Mississippi</option>
- <option value="MO">Missouri</option>
- <option value="MT">Montana</option>
- <option value="NE">Nebraska</option>
- <option value="NV">Nevada</option>
- <option value="NH">New Hampshire</option>
- <option value="NJ">New Jersey</option>
- <option value="NM">New Mexico</option>
- <option value="NY">New York</option>
- <option value="NC">North Carolina</option>
- <option value="ND">North Dakota</option>
- <option value="OH">Ohio</option>
- <option value="OK">Oklahoma</option>
- <option value="OR">Oregon</option>
- <option value="PA" selected="selected">Pennsylvania</option>
- <option value="RI">Rhode Island</option>
- <option value="SC">South Carolina</option>
- <option value="SD">South Dakota</option>
- <option value="TN">Tennessee</option>
- <option value="TX">Texas</option>
- <option value="UT">Utah</option>
- <option value="VT">Vermont</option>
- <option value="VA">Virginia</option>
- <option value="WA">Washington</option>
- <option value="WV">West Virginia</option>
- <option value="WI">Wisconsin</option>
- <option value="WY">Wyoming</option>
- </select>
- <br>
- <label for="recordPurchasePropertyTypeID" class="input">Desired property type:</label>
- <select name="recordPurchasePropertyTypeID" id="recordPurchasePropertyTypeID" class="inputclass" title="Select a Property Type">
- <option value="">-Select-</option>
- <option value="1">Single Family Detached</option>
- <option value="2">Condo</option>
- <option value="3">Townhouse</option>
- <option value="4">Rental</option>
- <option value="5">Multi-Family</option>
- <option value="6">Vacation Home</option>
- <option value="7">Other</option>
- </select>
- <br>
- <div class="buttonWrapper">
- <input name="formNext1" type="button" class="open1 nextbutton" value="Next" alt="Next" title="Next">
- </div>
- </fieldset>
- </div>
- </li>
- <li id="sf2">
- <a href='#' class="ui-accordion-link">
- </a>
- <div>
- <fieldset>
- <legend>Step 2 of 3</legend>
- <div class="requiredNotice">*Required Field</div>
- <h3 class="stepHeader">Tell us about the property you're selling</h3>
- <label for="recordClientTimeFrameID" class="input required">When would you like to sell?</label>
- <select name="recordClientTimeFrameID" id="recordClientTimeFrameID" class="inputclass pageRequired" title="Select a Time Frame">
- <option value="">-Select-</option>
- <option value="1">Less than 3 months</option>
- <option value="2">3-6 months</option>
- <option value="3">6-9 months</option>
- <option value="4">9-12 months</option>
- <option value="5">Over 12 months</option>
- </select>
- <br>
- <label for="recordClientHomeTypeID" class="input required">Type of property you are selling:</label>
- <select name="recordClientHomeTypeID" id="recordClientHomeTypeID" class="inputclass pageRequired" title="Select a Property Type">
- <option value="">-Select-</option>
- <option value="1">Single Family Detached</option>
- <option value="2">Condo</option>
- <option value="3">Townhouse</option>
- <option value="4">Rental</option>
- <option value="5">Multi-Family</option>
- <option value="6">Vacation Home</option>
- <option value="7">Other</option>
- </select>
- <br>
- <label for="recordPropertyAddress1" class="input required">Property Street Address:</label>
- <input name="recordPropertyAddress1" id="recordPropertyAddress1" class="inputclass pageRequired" title="Street Address is required" maxlength="254" onblur="recordClientAddress1.value = this.value">
- <br>
- <label for="recordPropertyAddress2" class="input">Address (2):</label>
- <input name="recordPropertyAddress2" id="recordPropertyAddress2" class="inputclass" maxlength="254" onblur="recordClientAddress2.value = this.value">
- <br>
- <label for="recordPropertyCity" class="input required">City:</label>
- <input name="recordPropertyCity" id="recordPropertyCity" class="inputclass pageRequired" title="City is required" maxlength="254" onblur="recordClientCity.value = this.value">
- <br>
- <label for="recordPropertyState" class="input required">State:</label>
- <select name="recordPropertyState" id="recordPropertyState" class="inputclass pageRequired" title="Select a State" onchange="recordClientState.value = this.value">
- <option value="">-Select-</option>
- <option value="AL">Alabama</option>
- <option value="AK">Alaska</option>
- <option value="AZ">Arizona</option>
- <option value="AR">Arkansas</option>
- <option value="CA">California</option>
- <option value="CO">Colorado</option>
- <option value="CT">Connecticut</option>
- <option value="DE">Delaware</option>
- <option value="DC">Dist of Columbia</option>
- <option value="FL">Florida</option>
- <option value="GA">Georgia</option>
- <option value="HI">Hawaii</option>
- <option value="ID">Idaho</option>
- <option value="IL">Illinois</option>
- <option value="IN">Indiana</option>
- <option value="IA">Iowa</option>
- <option value="KS">Kansas</option>
- <option value="KY">Kentucky</option>
- <option value="LA">Louisiana</option>
- <option value="ME">Maine</option>
- <option value="MD">Maryland</option>
- <option value="MA">Massachusetts</option>
- <option value="MI">Michigan</option>
- <option value="MN">Minnesota</option>
- <option value="MS">Mississippi</option>
- <option value="MO">Missouri</option>
- <option value="MT">Montana</option>
- <option value="NE">Nebraska</option>
- <option value="NV">Nevada</option>
- <option value="NH">New Hampshire</option>
- <option value="NJ">New Jersey</option>
- <option value="NM">New Mexico</option>
- <option value="NY">New York</option>
- <option value="NC">North Carolina</option>
- <option value="ND">North Dakota</option>
- <option value="OH">Ohio</option>
- <option value="OK">Oklahoma</option>
- <option value="OR">Oregon</option>
- <option value="PA" selected="selected">Pennsylvania</option>
- <option value="RI">Rhode Island</option>
- <option value="SC">South Carolina</option>
- <option value="SD">South Dakota</option>
- <option value="TN">Tennessee</option>
- <option value="TX">Texas</option>
- <option value="UT">Utah</option>
- <option value="VT">Vermont</option>
- <option value="VA">Virginia</option>
- <option value="WA">Washington</option>
- <option value="WV">West Virginia</option>
- <option value="WI">Wisconsin</option>
- <option value="WY">Wyoming</option>
- </select>
- <br>
- <label for="recordPropertyZip" class="input required">Zip:</label>
- <input name="recordPropertyZip" id="recordPropertyZip" class="inputclass pageRequired" title="Zip Code is required" maxlength="254" onblur="recordClientZip.value = this.value">
- <br>
- <label for="recordClientPropertyValueID" class="input required">Estimated Market Value:</label>
- <select name="recordClientPropertyValueID" id="recordClientPropertyValueID" class="inputclass pageRequired" title="Select a Price Range">
- <option value="">-Select-</option>
- <option value="1">Less Than $75K</option>
- <option value="2">$75-$100K</option>
- <option value="3">$100-$125K</option>
- <option value="4">$125-$150K</option>
- <option value="5">$150-$200K</option>
- <option value="6">$200-$250K</option>
- <option value="7">$250-$300K</option>
- <option value="8">$300-$350K</option>
- <option value="9">$350-$400K</option>
- <option value="10">$400-$500K</option>
- <option value="11">$500-$700K</option>
- <option value="12">$700-$900K</option>
- <option value="13">Over $900K</option>
- </select>
- <br>
- <label for="recordPropertyBedroomsID" class="input">Bedrooms:</label>
- <select name="recordPropertyBedroomsID" id="recordPropertyBedroomsID" class="inputclass">
- <option value="">-Select-</option>
- <option value="1">1</option>
- <option value="2">2</option>
- <option value="3">3</option>
- <option value="4">4</option>
- <option value="5">5+</option>
- </select>
- <br>
- <label for="recordPropertyBathroomsId" class="input">Bathrooms:</label>
- <select name="recordPropertyBathroomsId" id="recordPropertyBathroomsId" class="inputclass">
- <option value="">-Select-</option>
- <option value="1">1</option>
- <option value="2">1.5</option>
- <option value="3">2</option>
- <option value="4">2.5</option>
- <option value="5">3</option>
- <option value="6">3.5</option>
- <option value="7">4+</option>
- </select>
- <br>
- <label for="recordPropertyAgeId" class="input">Approx. Age of Home:</label>
- <select name="recordPropertyAgeId" id="recordPropertyAgeId" class="inputclass">
- <option value="">-Select-</option>
- <option value="1">Less Than 1 year</option>
- <option value="2">1-5 years</option>
- <option value="3">6-10 years</option>
- <option value="4">11-15 years</option>
- <option value="5">More than 15 years</option>
- </select>
- <br>
- <label for="recordPropertySqFt" class="input">Approx. Square Footage:</label>
- <input name="recordPropertySqFt" id="recordPropertySqFt" class="inputclass" maxlength="254">
- <br>
- <div class="buttonWrapper">
- <input name="formBack0" type="button" class="open0 prevbutton" value="Back" alt="Back" title="Back">
- <input name="formNext2" type="button" class="open2 nextbutton" value="Next" alt="Next" title="Next">
- </div>
- </fieldset>
- </div>
- </li>
- <li id="sf3">
- <a href='#' class="ui-accordion-link">
- </a>
- <div>
- <fieldset>
- <legend>Step 3 of 3</legend>
- <div class="requiredNotice">*Required Field</div>
- <h3 class="stepHeader">Tell us about yourself</h3>
- <label for="recordClientNameFirst" class="input required">First Name:</label>
- <input name="recordClientNameFirst" id="recordClientNameFirst" class="inputclass pageRequired" title="First Name is required" maxlength="254">
- <br>
- <label for="recordClientNameLast" class="input required">Last Name:</label>
- <input name="recordClientNameLast" id="recordClientNameLast" class="inputclass pageRequired" maxlength="254" title="Last Name is required">
- <br>
- <label for="recordClientAddress1" class="input required">Current Address:</label>
- <input name="recordClientAddress1" id="recordClientAddress1" class="inputclass pageRequired" maxlength="254" title="Address is required">
- <br>
- <label for="recordClientAddress2" class="input">Address (2):</label>
- <input name="recordClientAddress2" id="recordClientAddress2" class="inputclass" maxlength="254">
- <br>
- <label for="recordClientCity" class="input required">City:</label>
- <input name="recordClientCity" id="recordClientCity" class="inputclass pageRequired" maxlength="254" title="City is required">
- <br>
- <label for="recordClientState" class="input required">State:</label>
- <select name="recordClientState" id="recordClientState" class="inputclass pageRequired" title="Select a State">
- <option value="">-Select-</option>
- <option value="AL">Alabama</option>
- <option value="AK">Alaska</option>
- <option value="AZ">Arizona</option>
- <option value="AR">Arkansas</option>
- <option value="CA">California</option>
- <option value="CO">Colorado</option>
- <option value="CT">Connecticut</option>
- <option value="DE">Delaware</option>
- <option value="DC">Dist of Columbia</option>
- <option value="FL">Florida</option>
- <option value="GA">Georgia</option>
- <option value="HI">Hawaii</option>
- <option value="ID">Idaho</option>
- <option value="IL">Illinois</option>
- <option value="IN">Indiana</option>
- <option value="IA">Iowa</option>
- <option value="KS">Kansas</option>
- <option value="KY">Kentucky</option>
- <option value="LA">Louisiana</option>
- <option value="ME">Maine</option>
- <option value="MD">Maryland</option>
- <option value="MA">Massachusetts</option>
- <option value="MI">Michigan</option>
- <option value="MN">Minnesota</option>
- <option value="MS">Mississippi</option>
- <option value="MO">Missouri</option>
- <option value="MT">Montana</option>
- <option value="NE">Nebraska</option>
- <option value="NV">Nevada</option>
- <option value="NH">New Hampshire</option>
- <option value="NJ">New Jersey</option>
- <option value="NM">New Mexico</option>
- <option value="NY">New York</option>
- <option value="NC">North Carolina</option>
- <option value="ND">North Dakota</option>
- <option value="OH">Ohio</option>
- <option value="OK">Oklahoma</option>
- <option value="OR">Oregon</option>
- <option value="PA" selected="selected">Pennsylvania</option>
- <option value="RI">Rhode Island</option>
- <option value="SC">South Carolina</option>
- <option value="SD">South Dakota</option>
- <option value="TN">Tennessee</option>
- <option value="TX">Texas</option>
- <option value="UT">Utah</option>
- <option value="VT">Vermont</option>
- <option value="VA">Virginia</option>
- <option value="WA">Washington</option>
- <option value="WV">West Virginia</option>
- <option value="WI">Wisconsin</option>
- <option value="WY">Wyoming</option>
- </select>
- <br>
- <label for="recordClientZip" class="input required">Zip:</label>
- <input name="recordClientZip" id="recordClientZip" class="inputclass pageRequired" maxlength="12" title="Zip Code is required">
- <br>
- <label for="recordClientPhone" class="input required">Phone Number:</label>
- <input name="recordClientPhone" id="recordClientPhone" class="inputclass pageRequired" maxlength="254" title="Phone Number is required">
- <br>
- <label for="recordClientPhoneAlt" class="input">Alternate Number:</label>
- <input name="recordClientPhoneAlt" id="recordClientPhoneAlt" class="inputclass" maxlength="254">
- <br>
- <label for="recordClientEmail" class="input required">Email Address:</label>
- <input name="recordClientEmail" id="recordClientEmail" class="inputclass pageRequired email" maxlength="254" title="Email address is required">
- <br>
- <label for="recordClientEmail1" class="input required">Confirm Email:</label>
- <input name="recordClientEmail1" id="recordClientEmail1" class="inputclass pageRequired" equalTo: "'#recordClientEmail" maxlength="254" title="Please confirm your email address">
- <br>
- <br>
- <p class="formDisclaimer">This is a sample form, no information is sent anywhere.</p>
- <div class="buttonWrapper">
- <input name="formBack1" type="button" class="open1 prevbutton" value="Back" alt="Back" title="Back">
- <input name="submit" type="submit" id="submit" value="Submit" class="submitbutton" alt="Submit" title="Submit">
- </div>
- </fieldset>
- </div>
- </li>
- </ul>
- </form>
- </div>
-</div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/multipart/style.css b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/multipart/style.css
deleted file mode 100644
index fbf08c24..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/multipart/style.css
+++ /dev/null
@@ -1,705 +0,0 @@
-/********************************************
- AUTHOR: Erwin Aligam
- WEBSITE: http://www.styleshout.com/
- TEMPLATE NAME: Techmania 1.0
- TEMPLATE CODE: S-0003
- VERSION: 1.1
- *******************************************/
- /********************************************
- HTML ELEMENTS
-********************************************/ /* Top elements */
- /** { margin:0; padding: 0; }*/
-body {
- background-color: #000;
- color: #555;
- font: 78%/ 1.6 Verdana, 'Trebuchet MS', arial, sans-serif;
- text-align: center;
- margin: 15px 0;
-}
-
-/* links */
-a {
- color: #213540;
- background: inherit;
- text-decoration: none;
-}
-
-a:hover {
- color: #3e4255;
- text-decoration: underline;
- background: inherit;
-}
-
-/* headers */
-h1,h2,h3 {
- font-family: 'Trebuchet MS', Arial, sans-serif;
- font-weight: bold;
-}
-
-h1 {
- font-size: 1.5em;
- margin: 10px 15px;
-}
-
-h2 {
- font-size: 1.3em;
- text-transform: uppercase;
- color: #339900;
- margin: 10px 15px;
-}
-
-h3 {
- font-size: 1.1em;
- color: #333;
- margin: 16px 0 0 18px;
-}
-
-h1,h2,h3 {
- padding: 0;
-}
-
-p {
- line-height: 1.4em;
- padding: 0 15px;
-}
-
-p.error {
- color: #CC0033;
-}
-
-ul,ol {
- margin: 10px 6px;
- padding: 0 15px;
- color: #006699;
-}
-
-ul span,ol span {
- color: #666666;
-}
-
-/* images */
-img {
- border: 2px solid #CCC;
-}
-
-img.float-right {
- margin: 5px 0px 10px 10px;
-}
-
-img.float-left {
- margin: 5px 10px 10px 0px;
-}
-
-code {
- margin: 5px 0;
- padding: 10px;
- text-align: left;
- display: block;
- overflow: auto;
- font: 500 1em/ 1.5em 'Lucida Console', 'courier new', monospace;
- /* white-space: pre; */
- background: #FAFAFA;
- border: 1px solid #EAEAEA;
- border-left: 5px solid #72A545;
-}
-
-acronym {
- cursor: help;
- border-bottom: 1px solid #777;
-}
-
-blockquote {
- margin: 15px;
- padding: 0 0 0 32px;
- background: #FAFAFA url(quote.gif) no-repeat 5px 10px !important;
- background-position: 8px 10px;
- border: 1px solid #EAEAEA;
- border-left: 5px solid #72A545;
- font-weight: bold;
-}
-
-/* form elements */
-fieldset {
- margin: 12px 12px 18px;
- padding-left: 6px;
- border: 1px solid #004080;
- color: #006699;
-}
-
-fieldset fieldset {
- border: 1px solid #9ea190;
- margin: 17px 14px;
-}
-
-form {
- margin: 10px 15px;
- padding: 0;
-}
-
-label {
- font-weight: bold;
- margin: 5px 3px 0 0;
- width: 160px;
- text-align: right;
- float: left;
-}
-
-legend {
- font-size: 1.2em;
- padding: 0 12px;
- font-weight: 900;
- background-color: #F9F9F9;
-}
-
-fieldset fieldset legend {
- font-size: 1em;
- color: #1a2129;
- padding: 0 18px;
- margin-left: 75px;
-}
-
-input {
- padding: 3px;
- margin: 4px 0;
- border: 1px solid #CFCED3;
- font: normal 1em Verdana, sans-serif;
- color: #777;
-}
-
-textarea {
- width: 400px;
- padding: 4px;
- font: normal 1em Verdana, sans-serif;
- border: 1px solid #eee;
- height: 100px;
- display: block;
- color: #777;
-}
-
-input.button {
- margin: 0;
- font: bold 12px Arial, Sans-serif;
- border: 1px solid #EAEAEA;
- padding: 3px 4px;
- background: #CCC url(buttonbg.gif) repeat-x left bottom;
- color: #333; /* color: #339900; */
- cursor: pointer;
-}
-
-input.submitbutton {
- background-color: #006699;
- color: #FFF;
- background-image: none;
- font-weight: 900;
- border: 1px solid #EAEAEA;
- margin: 0 0 0 200px;
-}
-
-/* search */
-#sidebar #search {
- background: #f2f2f2;
- margin: 0 15px;
- padding: 5px 0;
-}
-
-#sidebar #search img {
- vertical-align: bottom;
-}
-
-#sidebar #search .textbox {
- background: #FFF url(input.png) no-repeat top left;
- border: 1px solid #EAEAEA;
- font-size: 11px;
- padding: 3px;
- width: 110px;
-}
-
-#sidebar #search input.searchbutton {
- margin: 0;
- font: bold 100% Arial, Sans-serif;
- border: 1px solid #CCC;
- background: #CCC url(buttonbg.gif) repeat-x left bottom;
- padding: 1px;
- height: 25px;
- color: #333;
- width: 55px;
-}
-
-/*****************************
- LAYOUT
-******************************/
-#wrap {
- margin: 0 auto;
- padding: 0;
- text-align: left;
- background-color: #FFF;
- width: 790px;
-}
-
-#content-wrap {
- clear: both;
- margin: 0;
- padding: 0;
- width: 790px;
-}
-
-/* header */
-#header {
- position: relative;
- clear: left;
- width: 790px;
- height: 137px;
- margin: 0;
- padding: 0;
- background: #000 url(headerbg.jpg) no-repeat left bottom;
-}
-
-#header h1#logo-text {
- float: right;
- margin: 39px 58px 0 0;
- padding: 0;
- font: bolder 3.2em 'Trebuchet MS', Arial, Sans-serif;
- letter-spacing: -2px;
- color: #FFF;
- text-transform: none;
- /* change the values of top and right to adjust the position of the logo*/
- top: 35px;
- right: 30px;
-}
-
-#header h2#slogan {
- float: right;
- margin: 0 38px 0 0;
- padding: 0;
- font: bold 1.5em 'Trebuchet MS', Arial, Sans-serif;
- text-transform: none;
- letter-spacing: 1px;
- color: #FFF;
- clear: both;
- text-align: right;
-}
-
-#header h1#logo-text span {
- color: #CFCED3;
-}
-
-/* menu tabs */
-#header #header-tabs {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 25px;
- background: #000;
- font: bold 1.1em Verdana, Tahoma, 'Trebuchet MS', Sans-serif;
-}
-
-#header-tabs ul {
- margin: 0;
- padding: 2px 0px 0px 0px;
- list-style: none;
-}
-
-#header-tabs li {
- display: inline;
- margin: 0;
- padding: 0;
-}
-
-#header-tabs a {
- float: left;
- background: url(tableft.gif) no-repeat left top;
- margin: 0;
- padding: 0 0 0 4px;
- text-decoration: none;
-}
-
-#header-tabs a span {
- float: left;
- display: block;
- background: url(tabright.gif) no-repeat right top;
- padding: 7px 15px 4px 8px;
- color: #CCC;
-}
-
-/* Commented Backslash Hack hides rule from IE5-Mac \*/
-#header-tabs a span {
- float: none;
-}
-
-/* End IE5-Mac hack */
-#header-tabs a:hover span {
- color: #FFF;
-}
-
-#header-tabs a:hover {
- background-position: 0% -42px;
-}
-
-#header-tabs a:hover span {
- background-position: 100% -42px;
-}
-
-#header-tabs #current a {
- background-position: 0% -42px;
-}
-
-#header-tabs #current a span {
- background-position: 100% -42px;
- color: #FFF;
-}
-
-/* main content */
-#main {
- width: 748px;
- margin: 0;
- padding: 8px 16px;
- background-color: #F9F9F9;
- border-left: 5px solid #000;
- border-right: 5px solid #000;
-}
-
-#main h1 {
- padding: 8px 0 3px 25px;
- text-transform: none;
- border-bottom: 2px solid #f2f2f2;
- color: #339900;
-}
-
-/* sidebar */
-#sidebar { /* float: right;
- width: 245px;
- margin: 0 0 10px 0; padding: 0;
- background-color: inherit; */
- display: none;
-}
-
-#sidebar h1 {
- padding: 8px 0px 3px 25px;
- background: url(square_arrow.gif) no-repeat 0% .7em;
- text-transform: none;
- color: #339900;
-}
-
-#sidebar ul.sidemenu {
- list-style: none;
- margin: 10px 15px;
- padding: 0;
-}
-
-#sidebar ul.sidemenu li {
- margin-bottom: 1px;
- border: 1px solid #f2f2f2;
-}
-
-#sidebar ul.sidemenu a {
- display: block;
- font-weight: bold;
- color: #333;
- text-decoration: none;
- padding: 2px 5px 2px 10px;
- background: #f2f2f2;
- border-left: 5px solid #CCC;
- min-height: 18px;
-}
-
-* html body #sidebar ul.sidemenu a {
- height: 18px;
-}
-
-#sidebar ul.sidemenu a:hover {
- padding: 2px 5px 2px 10px;
- background: #f2f2f2;
- color: #339900;
- border-left: 5px solid #72A545;
-}
-
-/* footer */
-#footer {
- clear: both;
- height: 40px;
- color: #CCC;
- background: #000;
- margin: 0;
- font-size: 92%;
-}
-
-#footer a {
- text-decoration: none;
- font-weight: bold;
- color: #FFF;
-}
-
-#footer #footer-left {
- width: 68%;
- float: left;
- text-align: left;
- margin: 0;
- padding: 10px;
-}
-
-#footer #footer-right {
- width: 25%;
- float: right;
- text-align: right;
- margin: 0;
- padding: 10px;
-}
-
-/* alignment classes */
-.float-left {
- float: left;
-}
-
-.float-right {
- float: right;
-}
-
-.align-left {
- text-align: left;
-}
-
-.align-right {
- text-align: right;
-}
-
-/* additional classes */
-.clear {
- clear: both;
-}
-
-.hide {
- display: none;
-}
-
-.gray {
- color: #CCC;
-}
-
-.comments {
- color: #333;
- background: #FFF;
- text-align: right;
- border-top: 1px dashed #EFF0F1;
- border-bottom: 1px dashed #EFF0F1;
- padding: 5px 0;
- margin-top: 20px;
-}
-
-html {
- min-height: 100.1%;
-}
-
-/* ------ one ------------*/
-body .mainText {
- font-family: Arial, Helvetica, sans-serif;
- font-size: 12px;
-}
-
-#demoText h1,.mainText h1 {
- font-size: 130%;
- color: #0099FF;
- text-decoration: none;
- font-family: Arial, Helvetica, sans-serif;
- margin: 5px 4px 5px 24px;
- background: none;
- padding: 0;
- border: none;
- text-transform: capitalize;
-}
-
-.mainText h2 {
- font-size: 110%;
- color: #000033;
- font-family: Arial, Helvetica, sans-serif;
- text-decoration: none;
- background: none;
- margin: 4px 32px 6px 22px;
- text-transform: capitalize;
-}
-
-.mainText h3 {
- font-size: 120%;
- font-weight: 900;
- margin: 14px 0 0 0;
- text-align: center;
- color: #000033;
-}
-
-.mainText table {
- width: 95%;
- border: 1px solid #0099FF;
- border-collapse: collapse;
- margin: 18px 7px;
-}
-
-.mainText table td {
- background-color: #99CCFF;
- color: #000033;
- padding: 4px;
-}
-
-.mainText table th {
- background-color: #000033;
- color: #99CCFF;
- padding: 4px;
-}
-
-.mainText .linkPar a {
- color: #000033;
- text-decoration: underline;
-}
-
-.mainText .linkPar a:hover {
- color: #660033;
- text-decoration: none;
- font-weight: 900;
-}
-
-.pusher {
- cursor: pointer;
- padding: 3px 10px 3px 22px;
- font-weight: 900;
- font-size: 14px;
-}
-
-/* ------------- form specific styles are here -------------- */
-fieldset {
- margin: 0;
- border: 1px solid #C3DE00;
- padding: 10px;
- /*border:none;
-padding:0;*/
- color: #7563A5;
-}
-
-legend {
- background-color: #FFFFFF;
- text-align: center;
- color: #097981;
- padding: 0 12px;
-}
-
-label {
- text-align: right;
- width: 298px;
- border-right: 1px dotted #099;
- padding-right: 5px;
- margin: 0 0 8px 0;
- float: left;
- clear: left;
- display: block;
- color: #7563A5;
-}
-
-label.checkbox,label.textarea {
- border: none;
-}
-
-label.lgfield {
- border: none;
- text-align: center;
- clear: both;
- float: none;
- width: 100%;
-}
-
-fieldset input,fieldset select,fieldset textarea {
- margin-left: 10px;
- margin-bottom: 8px;
-}
-
-select.longfield {
- margin: 0 0 0 115px;
-}
-
-input [type="radio"],input [type="checkbox"] {
- margin: 2px 0 0 4px;
-}
-
-textarea {
- width: 250px;
- float: left;
-}
-
-/*Get Help Form Styles*/
-p.formDisclaimer {
- text-align: center;
- margin: 32px 24px 12px 0;
- font-style: italic;
-}
-
-div.buttonWrapper {
- margin: 28px 0 14px 0;
- clear: both;
- text-align: center;
-}
-
-.formspacer {
- height: 1em;
- clear: both;
-}
-
-.hideField {
- display: none;
-}
-
-.pushOpen {
- height: 18em;
-}
-
-/* ----- error message for field validation ----- */
-#stepForm label.warning {
- text-align: left;
- width: auto;
- padding: 0;
- margin: 0 0 0 10px;
- float: none;
- clear: none;
- display: inline;
- color: #CC3366;
- font-size: 10px;
- border: none;
- border-top: 1px dotted #CC3366;
-}
-
-div.requiredNotice {
- width: 140px;
- float: right;
- margin: 0 24px 0 0;
- padding: 0;
-}
-
-h3.stepHeader {
- text-align: left;
- font-size: 16px;
- font-weight: bold;
- margin: 0 0 24px 24px;
- color: #676cac;
-}
-
-ul#stepForm,ul#stepForm li {
- margin: 0;
- padding: 0;
-}
-
-ul#stepForm li {
- list-style: none;
-}
-
-/* Form Buttons */
-input.submitbutton,.nextbutton,.prevbutton {
- width: 100px;
- height: 40px;
- background-color: #663399;
- padding: 4px;
- border: 1px solid #339933;
- cursor: pointer;
- text-align: center;
- color: #FFFFFF;
- margin: 7px;
-}
-
-input.submitbutton {
- background-color: #006699;
-} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/radio-checkbox-select-demo.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/radio-checkbox-select-demo.html
deleted file mode 100644
index 74e0e61b..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/radio-checkbox-select-demo.html
+++ /dev/null
@@ -1,132 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>Test for jQuery validate() plugin</title>
- <link rel="stylesheet" media="screen" href="css/screen.css">
- <script src="../lib/jquery.js"></script>
- <script src="../dist/jquery.validate.js"></script>
- <script>
- // only for demo purposes
- $.validator.setDefaults({
- submitHandler: function() {
- alert("submitted!");
- }
- });
-
- $(document).ready(function() {
- $("#form1").validate();
- $("#selecttest").validate();
- });
- </script>
- <style>
- .block {
- display: block;
- }
- form.cmxform label.error {
- display: none;
- }
- </style>
-</head>
-<body>
-<h1 id="banner"><a href="http://jqueryvalidation.org/">jQuery Validation Plugin</a> Demo</h1>
-<div id="main">
- <form class="cmxform" id="form1" method="get" action="">
- <fieldset>
- <legend>Validating a form with a radio and checkbox buttons</legend>
- <fieldset>
- <legend>Gender</legend>
- <label for="gender_male">
- <input type="radio" id="gender_male" value="m" name="gender" required>Male
- </label>
- <label for="gender_female">
- <input type="radio" id="gender_female" value="f" name="gender">Female
- </label>
- <label for="gender" class="error">Please select your gender</label>
- </fieldset>
- <fieldset>
- <legend>Family</legend>
- <label for="family_single">
- <input type="radio" id="family_single" value="s" name="family" required>Single
- </label>
- <label for="family_married">
- <input type="radio" id="family_married" value="m" name="family">Married
- </label>
- <label for="family_other">
- <input type="radio" id="family_other" value="o" name="family">Other
- </label>
- <label for="family" class="error">Please select your family status.</label>
- </fieldset>
- <p>
- <label for="agree">Please agree to our policy</label>
- <input type="checkbox" class="checkbox" id="agree" name="agree" required>
- <br>
- <label for="agree" class="error block">Please agree to our policy!</label>
- </p>
- <fieldset>
- <legend>Spam</legend>
- <label for="spam_email">
- <input type="checkbox" class="checkbox" id="spam_email" value="email" name="spam[]" required minlength="2">Spam via E-Mail
- </label>
- <label for="spam_phone">
- <input type="checkbox" class="checkbox" id="spam_phone" value="phone" name="spam[]">Spam via Phone
- </label>
- <label for="spam_mail">
- <input type="checkbox" class="checkbox" id="spam_mail" value="mail" name="spam[]">Spam via Mail
- </label>
- <label for="spam[]" class="error">Please select at least two types of spam.</label>
- </fieldset>
- <p>
- <input class="submit" type="submit" value="Submit">
- </p>
- </fieldset>
- </form>
- <form id="selecttest">
- <h2>Some tests with selects</h2>
- <p>
- <label for="jungle">Please select a jungle noun</label>
- <br>
- <select id="jungle" name="jungle" title="Please select something!" required>
- <option value=""></option>
- <option value="1">Buga</option>
- <option value="2">Baga</option>
- <option value="3">Oi</option>
- </select>
- </p>
- <p>
- <label for="fruit">Please select at least two fruits</label>
- <br>
- <select id="fruit" name="fruit" title="Please select at least two fruits" required minlength="2" multiple="multiple">
- <option value="b">Banana</option>
- <option value="a">Apple</option>
- <option value="p">Peach</option>
- <option value="t">Turtle</option>
- </select>
- </p>
- <p>
- <label for="vegetables">Please select no more than two vergetables</label>
- <br>
- <select id="vegetables" name="vegetables" title="Please select no more than two vergetables" required maxlength="2" multiple="multiple">
- <option value="p">Potato</option>
- <option value="t">Tomato</option>
- <option value="s">Salad</option>
- </select>
- </p>
- <p>
- <label for="cars">Please select at least two cars, but no more than three</label>
- <br>
- <select id="cars" name="cars" title="Please select at least two cars, but no more than three" required rangelength="[2,3]" multiple="multiple">
- <option value="m_sl">Mercedes SL</option>
- <option value="o_c">Opel Corsa</option>
- <option value="vw_p">VW Polo</option>
- <option value="t_s">Titanic Skoda</option>
- </select>
- </p>
- <p>
- <input type="submit" value="Validate Selecttests">
- </p>
- </form>
- <a href="index.html">Back to main page</a>
-</div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/requirejs/app.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/requirejs/app.js
deleted file mode 100644
index b3641273..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/requirejs/app.js
+++ /dev/null
@@ -1,9 +0,0 @@
-require(["jquery", "../../dist/jquery.validate"], function($) {
-
- $.validator.setDefaults({
- submitHandler: function() { alert("submitted!"); }
- });
-
- // validate the comment form when it is submitted
- $("#commentForm").validate();
-}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/requirejs/index.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/requirejs/index.html
deleted file mode 100644
index 04f61fcf..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/requirejs/index.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="utf-8">
- <title>jQuery validation plug-in - requirejs demo</title>
-
- <link rel="stylesheet" href="../css/screen.css">
-
- <style type="text/css">
- #commentForm { width: 500px; }
- #commentForm label { width: 250px; }
- #commentForm label.error, #commentForm input.submit { margin-left: 253px; }
- </style>
-</head>
-<body>
-
- <h1 id="banner"><a href="http://jqueryvalidation.org/">jQuery Validation Plugin</a> Demo</h1>
- <div id="main">
-
- <p>Default submitHandler is set to display an alert into of submitting the form</p>
- <form class="cmxform" id="commentForm" method="get" action="">
- <fieldset>
- <legend>Please provide your name, email address (won't be published) and a comment</legend>
- <p>
- <label for="cname">Name (required, at least 2 characters)</label>
- <input id="cname" name="name" minlength="2" type="text" required>
- </p>
- <p>
- <label for="cemail">E-Mail (required)</label>
- <input id="cemail" type="email" name="email" required>
- </p>
- <p>
- <label for="curl">URL (optional)</label>
- <input id="curl" type="url" name="url">
- </p>
- <p>
- <label for="ccomment">Your comment (required)</label>
- <textarea id="ccomment" name="comment" required></textarea>
- </p>
- <p>
- <input class="submit" type="submit" value="Submit">
- </p>
- </fieldset>
- </form>
-
- <script>
- var require = {
- paths: {
- "jquery": "../../lib/jquery-1.11.1"
- }
- };
- </script>
- <script src="../../lib/require.js" data-main="app.js"></script>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/site-demos.css b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/site-demos.css
deleted file mode 100644
index 21b90f65..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/site-demos.css
+++ /dev/null
@@ -1,16 +0,0 @@
-#field { margin-left: .5em; float: left; }
-#field, label { float: left; font-family: Arial, Helvetica, sans-serif; font-size: small; }
-br { clear: both; }
-input { border: 1px solid black; margin-bottom: .5em; }
-input.error { border: 1px solid red; }
-label.error {
- background: url('images/unchecked.gif') no-repeat;
- padding-left: 16px;
- margin-left: .3em;
-}
-label.valid {
- background: url('images/checked.gif') no-repeat;
- display: block;
- width: 16px;
- height: 16px;
-} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/themerollered.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/themerollered.html
deleted file mode 100644
index 450c5c77..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/themerollered.html
+++ /dev/null
@@ -1,235 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta charset="utf-8">
- <title>jQuery validation plug-in - ThemeRolldered demo</title>
- <link rel="stylesheet" media="screen" href="http://code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.min.css">
- <style>
- body {
- font-size: 62.5%;
- }
- label {
- display: inline-block;
- width: 100px;
- }
- legend {
- padding: 0.5em;
- }
- fieldset fieldset label {
- display: block;
- }
- #commentForm {
- width: 500px;
- }
- #commentForm label {
- width: 250px;
- }
- #commentForm label.error, #commentForm button.submit {
- margin-left: 253px;
- }
- #signupForm {
- width: 670px;
- }
- #signupForm label.error {
- margin-left: 10px;
- width: auto;
- display: inline;
- }
- #newsletter_topics label.error {
- display: none;
- margin-left: 103px;
- }
- </style>
-</head>
-<body>
-<form class="cmxform" id="commentForm" method="get" action="">
- <fieldset class="ui-widget ui-widget-content ui-corner-all">
- <legend class="ui-widget ui-widget-header ui-corner-all">Please provide your name, email address (won't be published) and a comment</legend>
- <p>
- <label for="cname">Name (required, at least 2 characters)</label>
- <input id="cname" name="name" class="ui-widget-content" minlength="2" required type="text">
- <p>
- <label for="cemail">E-Mail (required)</label>
- <input id="cemail" name="email" class="ui-widget-content" type="email" required>
- </p>
- <p>
- <label for="curl">URL (optional)</label>
- <input id="curl" name="url" class="ui-widget-content" value="" type="url">
- </p>
- <p>
- <label for="ccomment">Your comment (required)</label>
- <textarea id="ccomment" name="comment" class="ui-widget-content" required></textarea>
- </p>
- <p>
- <button class="submit" type="submit">Submit</button>
- </p>
- </fieldset>
-</form>
-<form class="cmxform" id="signupForm" method="get" action="">
- <fieldset class="ui-widget ui-widget-content ui-corner-all">
- <legend class="ui-widget ui-widget-header ui-corner-all">Validating a complete form</legend>
- <p>
- <label for="firstname">Firstname</label>
- <input id="firstname" name="firstname" type="text">
- </p>
- <p>
- <label for="lastname">Lastname</label>
- <input id="lastname" name="lastname" type="text">
- </p>
- <p>
- <label for="username">Username</label>
- <input id="username" name="username" type="text">
- </p>
- <p>
- <label for="password">Password</label>
- <input id="password" name="password" type="password">
- </p>
- <p>
- <label for="confirm_password">Confirm password</label>
- <input id="confirm_password" name="confirm_password" type="password">
- </p>
- <p>
- <label for="email">Email</label>
- <input id="email" name="email" type="email">
- </p>
- <p>
- <label for="agree">Please agree to our policy</label>
- <input type="checkbox" class="checkbox" id="agree" name="agree">
- </p>
- <p>
- <label for="newsletter">I'd like to receive the newsletter</label>
- <input type="checkbox" class="checkbox" id="newsletter" name="newsletter">
- </p>
- <fieldset id="newsletter_topics" class="ui-widget-content ui-corner-all">
- <legend class="ui-widget-header ui-corner-all">Topics (select at least two) - note: would be hidden when newsletter isn't selected, but is visible here for the demo</legend>
- <label for="topic_marketflash">
- <input type="checkbox" id="topic_marketflash" value="marketflash" name="topic">Marketflash
- </label>
- <label for="topic_fuzz">
- <input type="checkbox" id="topic_fuzz" value="fuzz" name="topic">Latest fuzz
- </label>
- <label for="topic_digester">
- <input type="checkbox" id="topic_digester" value="digester" name="topic">Mailing list digester
- </label>
- <label for="topic" class="error">Please select at least two topics you'd like to receive.</label>
- </fieldset>
- <p>
- <button class="submit" type="submit">Submit</button>
- </p>
- </fieldset>
-</form>
-<script src="../lib/jquery.js"></script>
-<script src="../dist/jquery.validate.js"></script>
-<script src="http://code.jquery.com/ui/1.10.4/jquery-ui.min.js"></script>
-<script>
-$.validator.setDefaults({
- submitHandler: function() {
- alert("submitted!");
- },
- showErrors: function(map, list) {
- // there's probably a way to simplify this
- var focussed = document.activeElement;
- if (focussed && $(focussed).is("input, textarea")) {
- $(this.currentForm).tooltip("close", {
- currentTarget: focussed
- }, true)
- }
- this.currentElements.removeAttr("title").removeClass("ui-state-highlight");
- $.each(list, function(index, error) {
- $(error.element).attr("title", error.message).addClass("ui-state-highlight");
- });
- if (focussed && $(focussed).is("input, textarea")) {
- $(this.currentForm).tooltip("open", {
- target: focussed
- });
- }
- }
-});
-
-(function() {
- // use custom tooltip; disable animations for now to work around lack of refresh method on tooltip
- $("#commentForm, #signupForm").tooltip({
- show: false,
- hide: false
- });
-
- // validate the comment form when it is submitted
- $("#commentForm").validate();
-
- // validate signup form on keyup and submit
- $("#signupForm").validate({
- rules: {
- firstname: "required",
- lastname: "required",
- username: {
- required: true,
- minlength: 2
- },
- password: {
- required: true,
- minlength: 5
- },
- confirm_password: {
- required: true,
- minlength: 5,
- equalTo: "#password"
- },
- email: {
- required: true,
- email: true
- },
- topic: {
- required: "#newsletter:checked",
- minlength: 2
- },
- agree: "required"
- },
- messages: {
- firstname: "Please enter your firstname",
- lastname: "Please enter your lastname",
- username: {
- required: "Please enter a username",
- minlength: "Your username must consist of at least 2 characters"
- },
- password: {
- required: "Please provide a password",
- minlength: "Your password must be at least 5 characters long"
- },
- confirm_password: {
- required: "Please provide a password",
- minlength: "Your password must be at least 5 characters long",
- equalTo: "Please enter the same password as above"
- },
- email: "Please enter a valid email address",
- agree: "Please accept our policy"
- }
- });
-
- // propose username by combining first- and lastname
- $("#username").focus(function() {
- var firstname = $("#firstname").val();
- var lastname = $("#lastname").val();
- if (firstname && lastname && !this.value) {
- this.value = firstname + "." + lastname;
- }
- });
-
- //code to hide topic selection, disable for demo
- var newsletter = $("#newsletter");
- // newsletter topics are optional, hide at first
- var inital = newsletter.is(":checked");
- var topics = $("#newsletter_topics")[inital ? "removeClass" : "addClass"]("gray");
- var topicInputs = topics.find("input").attr("disabled", !inital);
- // show when newsletter is checked
- newsletter.click(function() {
- topics[this.checked ? "removeClass" : "addClass"]("gray");
- topicInputs.attr("disabled", !this.checked);
- });
-
- $("#signupForm input:not(:submit)").addClass("ui-widget-content");
-
- $(":submit").button();
-})();
-</script>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/index.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/index.html
deleted file mode 100644
index 7d354126..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/index.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>jQuery Validation plugin: integration with TinyMCE</title>
- <script src="../../lib/jquery.js"></script>
- <script src="../../dist/jquery.validate.js"></script>
- <script src="tiny_mce.js"></script>
- <script>
- tinyMCE.init({
- mode: "textareas",
- theme: "simple",
- // update validation status on change
- onchange_callback: function(editor) {
- tinyMCE.triggerSave();
- $("#" + editor.id).valid();
- }
- });
- $(function() {
- var validator = $("#myform").submit(function() {
- // update underlying textarea before submit validation
- tinyMCE.triggerSave();
- }).validate({
- ignore: "",
- rules: {
- title: "required",
- content: "required"
- },
- errorPlacement: function(label, element) {
- // position error label after generated textarea
- if (element.is("textarea")) {
- label.insertAfter(element.next());
- } else {
- label.insertAfter(element)
- }
- }
- });
- validator.focusInvalid = function() {
- // put focus on tinymce on submit validation
- if (this.settings.focusInvalid) {
- try {
- var toFocus = $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []);
- if (toFocus.is("textarea")) {
- tinyMCE.get(toFocus.attr("id")).focus();
- } else {
- toFocus.filter(":visible").focus();
- }
- } catch (e) {
- // ignore IE throwing errors when focusing hidden elements
- }
- }
- }
- })
- </script>
- <!-- /TinyMCE -->
-</head>
-<body>
-<form id="myform" action="">
- <h3>TinyMCE and Validation Plugin integration example</h3>
- <label>Some other field</label>
- <input name="title">
- <br>
- <label>Some richt text</label>
- <textarea id="content" name="content" rows="15" cols="80" style="width: 80%"></textarea>
- <br>
- <input type="submit" name="save" value="Submit">
-</form>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/editor_template.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/editor_template.js
deleted file mode 100644
index d19fb53f..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/editor_template.js
+++ /dev/null
@@ -1 +0,0 @@
-(function(){var DOM=tinymce.DOM;tinymce.ThemeManager.requireLangPack('simple');tinymce.create('tinymce.themes.SimpleTheme',{init:function(ed,url){var t=this,states=['Bold','Italic','Underline','Strikethrough','InsertUnorderedList','InsertOrderedList'],s=ed.settings;t.editor=ed;ed.onInit.add(function(){ed.onNodeChange.add(function(ed,cm){tinymce.each(states,function(c){cm.get(c.toLowerCase()).setActive(ed.queryCommandState(c));});});ed.dom.loadCSS(url+"/skins/"+s.skin+"/content.css");});DOM.loadCSS((s.editor_css?ed.documentBaseURI.toAbsolute(s.editor_css):'')||url+"/skins/"+s.skin+"/ui.css");},renderUI:function(o){var t=this,n=o.targetNode,ic,tb,ed=t.editor,cf=ed.controlManager,sc;n=DOM.insertAfter(DOM.create('span',{id:ed.id+'_container','class':'mceEditor '+ed.settings.skin+'SimpleSkin'}),n);n=sc=DOM.add(n,'table',{cellPadding:0,cellSpacing:0,'class':'mceLayout'});n=tb=DOM.add(n,'tbody');n=DOM.add(tb,'tr');n=ic=DOM.add(DOM.add(n,'td'),'div',{'class':'mceIframeContainer'});n=DOM.add(DOM.add(tb,'tr',{'class':'last'}),'td',{'class':'mceToolbar mceLast',align:'center'});tb=t.toolbar=cf.createToolbar("tools1");tb.add(cf.createButton('bold',{title:'simple.bold_desc',cmd:'Bold'}));tb.add(cf.createButton('italic',{title:'simple.italic_desc',cmd:'Italic'}));tb.add(cf.createButton('underline',{title:'simple.underline_desc',cmd:'Underline'}));tb.add(cf.createButton('strikethrough',{title:'simple.striketrough_desc',cmd:'Strikethrough'}));tb.add(cf.createSeparator());tb.add(cf.createButton('undo',{title:'simple.undo_desc',cmd:'Undo'}));tb.add(cf.createButton('redo',{title:'simple.redo_desc',cmd:'Redo'}));tb.add(cf.createSeparator());tb.add(cf.createButton('cleanup',{title:'simple.cleanup_desc',cmd:'mceCleanup'}));tb.add(cf.createSeparator());tb.add(cf.createButton('insertunorderedlist',{title:'simple.bullist_desc',cmd:'InsertUnorderedList'}));tb.add(cf.createButton('insertorderedlist',{title:'simple.numlist_desc',cmd:'InsertOrderedList'}));tb.renderTo(n);return{iframeContainer:ic,editorContainer:ed.id+'_container',sizeContainer:sc,deltaHeight:-20};},getInfo:function(){return{longname:'Simple theme',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',version:tinymce.majorVersion+"."+tinymce.minorVersion}}});tinymce.ThemeManager.add('simple',tinymce.themes.SimpleTheme);})(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/img/icons.gif b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/img/icons.gif
deleted file mode 100644
index 16af141f..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/img/icons.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/langs/en.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/langs/en.js
deleted file mode 100644
index 6f095311..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/langs/en.js
+++ /dev/null
@@ -1,11 +0,0 @@
-tinyMCE.addI18n('en.simple',{
-bold_desc:"Bold (Ctrl+B)",
-italic_desc:"Italic (Ctrl+I)",
-underline_desc:"Underline (Ctrl+U)",
-striketrough_desc:"Strikethrough",
-bullist_desc:"Unordered list",
-numlist_desc:"Ordered list",
-undo_desc:"Undo (Ctrl+Z)",
-redo_desc:"Redo (Ctrl+Y)",
-cleanup_desc:"Cleanup messy code"
-}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/skins/default/ui.css b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/skins/default/ui.css
deleted file mode 100644
index 32feae62..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/themes/simple/skins/default/ui.css
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Reset */
-.defaultSimpleSkin table, .defaultSimpleSkin tbody, .defaultSimpleSkin a, .defaultSimpleSkin img, .defaultSimpleSkin tr, .defaultSimpleSkin div, .defaultSimpleSkin td, .defaultSimpleSkin iframe, .defaultSimpleSkin span, .defaultSimpleSkin * {border:0; margin:0; padding:0; background:transparent; white-space:nowrap; text-decoration:none; font-weight:normal; cursor:default; color:#000}
-
-/* Containers */
-.defaultSimpleSkin {position:relative}
-.defaultSimpleSkin table.mceLayout {background:#F0F0EE; border:1px solid #CCC;}
-.defaultSimpleSkin iframe {display:block; background:#FFF; border-bottom:1px solid #CCC;}
-.defaultSimpleSkin .mceToolbar {height:24px;}
-
-/* Layout */
-.defaultSimpleSkin span.mceIcon, .defaultSimpleSkin img.mceIcon {display:block; width:20px; height:20px}
-.defaultSimpleSkin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px}
-
-/* Button */
-.defaultSimpleSkin .mceButton {display:block; border:1px solid #F0F0EE; width:20px; height:20px}
-.defaultSimpleSkin a.mceButtonEnabled:hover {border:1px solid #0A246A; background-color:#B2BBD0}
-.defaultSimpleSkin a.mceButtonActive {border:1px solid #0A246A; background-color:#C2CBE0}
-.defaultSimpleSkin .mceButtonDisabled span {opacity:0.3; -ms-filter:'alpha(opacity=30)'; filter:alpha(opacity=30)}
-
-/* Separator */
-.defaultSimpleSkin .mceSeparator {display:block; background:url(../../img/icons.gif) -180px 0; width:2px; height:20px; margin:0 2px 0 4px}
-
-/* Theme */
-.defaultSimpleSkin span.mce_bold {background-position:0 0}
-.defaultSimpleSkin span.mce_italic {background-position:-60px 0}
-.defaultSimpleSkin span.mce_underline {background-position:-140px 0}
-.defaultSimpleSkin span.mce_strikethrough {background-position:-120px 0}
-.defaultSimpleSkin span.mce_undo {background-position:-160px 0}
-.defaultSimpleSkin span.mce_redo {background-position:-100px 0}
-.defaultSimpleSkin span.mce_cleanup {background-position:-40px 0}
-.defaultSimpleSkin span.mce_insertunorderedlist {background-position:-20px 0}
-.defaultSimpleSkin span.mce_insertorderedlist {background-position:-80px 0}
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/tiny_mce.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/tiny_mce.js
deleted file mode 100644
index 55aba6e3..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce/tiny_mce.js
+++ /dev/null
@@ -1 +0,0 @@
-var tinymce={majorVersion:'3',minorVersion:'2.1.1',releaseDate:'2008-11-27',_init:function(){var t=this,d=document,w=window,na=navigator,ua=na.userAgent,i,nl,n,base,p,v;t.isOpera=w.opera&&opera.buildNumber;t.isWebKit=/WebKit/.test(ua);t.isOldWebKit=t.isWebKit&&!w.getSelection().getRangeAt;t.isIE=!t.isWebKit&&!t.isOpera&&(/MSIE/gi).test(ua)&&(/Explorer/gi).test(na.appName);t.isIE6=t.isIE&&/MSIE [56]/.test(ua);t.isGecko=!t.isWebKit&&/Gecko/.test(ua);t.isMac=ua.indexOf('Mac')!=-1;t.isAir=/adobeair/i.test(ua);if(w.tinyMCEPreInit){t.suffix=tinyMCEPreInit.suffix;t.baseURL=tinyMCEPreInit.base;t.query=tinyMCEPreInit.query;return;}t.suffix='';nl=d.getElementsByTagName('base');for(i=0;i<nl.length;i++){if(v=nl[i].href){if(/^https?:\/\/[^\/]+$/.test(v))v+='/';base=v?v.match(/.*\//)[0]:'';}}function getBase(n){if(n.src&&/tiny_mce(|_dev|_src|_gzip|_jquery|_prototype).js/.test(n.src)){if(/_(src|dev)\.js/g.test(n.src))t.suffix='_src';if((p=n.src.indexOf('?'))!=-1)t.query=n.src.substring(p+1);t.baseURL=n.src.substring(0,n.src.lastIndexOf('/'));if(base&&t.baseURL.indexOf('://')==-1)t.baseURL=base+t.baseURL;return t.baseURL;}return null;};nl=d.getElementsByTagName('script');for(i=0;i<nl.length;i++){if(getBase(nl[i]))return;}n=d.getElementsByTagName('head')[0];if(n){nl=n.getElementsByTagName('script');for(i=0;i<nl.length;i++){if(getBase(nl[i]))return;}}return;},is:function(o,t){var n=typeof(o);if(!t)return n!='undefined';if(t=='array'&&(o instanceof Array))return true;return n==t;},each:function(o,cb,s){var n,l;if(!o)return 0;s=s||o;if(typeof(o.length)!='undefined'){for(n=0,l=o.length;n<l;n++){if(cb.call(s,o[n],n,o)===false)return 0;}}else{for(n in o){if(o.hasOwnProperty(n)){if(cb.call(s,o[n],n,o)===false)return 0;}}}return 1;},map:function(a,f){var o=[];tinymce.each(a,function(v){o.push(f(v));});return o;},grep:function(a,f){var o=[];tinymce.each(a,function(v){if(!f||f(v))o.push(v);});return o;},inArray:function(a,v){var i,l;if(a){for(i=0,l=a.length;i<l;i++){if(a[i]===v)return i;}}return-1;},extend:function(o,e){var i,a=arguments;for(i=1;i<a.length;i++){e=a[i];tinymce.each(e,function(v,n){if(typeof(v)!=='undefined')o[n]=v;});}return o;},trim:function(s){return(s?''+s:'').replace(/^\s*|\s*$/g,'');},create:function(s,p){var t=this,sp,ns,cn,scn,c,de=0;s=/^((static) )?([\w.]+)(:([\w.]+))?/.exec(s);cn=s[3].match(/(^|\.)(\w+)$/i)[2];ns=t.createNS(s[3].replace(/\.\w+$/,''));if(ns[cn])return;if(s[2]=='static'){ns[cn]=p;if(this.onCreate)this.onCreate(s[2],s[3],ns[cn]);return;}if(!p[cn]){p[cn]=function(){};de=1;}ns[cn]=p[cn];t.extend(ns[cn].prototype,p);if(s[5]){sp=t.resolve(s[5]).prototype;scn=s[5].match(/\.(\w+)$/i)[1];c=ns[cn];if(de){ns[cn]=function(){return sp[scn].apply(this,arguments);};}else{ns[cn]=function(){this.parent=sp[scn];return c.apply(this,arguments);};}ns[cn].prototype[cn]=ns[cn];t.each(sp,function(f,n){ns[cn].prototype[n]=sp[n];});t.each(p,function(f,n){if(sp[n]){ns[cn].prototype[n]=function(){this.parent=sp[n];return f.apply(this,arguments);};}else{if(n!=cn)ns[cn].prototype[n]=f;}});}t.each(p['static'],function(f,n){ns[cn][n]=f;});if(this.onCreate)this.onCreate(s[2],s[3],ns[cn].prototype);},walk:function(o,f,n,s){s=s||this;if(o){if(n)o=o[n];tinymce.each(o,function(o,i){if(f.call(s,o,i,n)===false)return false;tinymce.walk(o,f,n,s);});}},createNS:function(n,o){var i,v;o=o||window;n=n.split('.');for(i=0;i<n.length;i++){v=n[i];if(!o[v])o[v]={};o=o[v];}return o;},resolve:function(n,o){var i,l;o=o||window;n=n.split('.');for(i=0,l=n.length;i<l;i++){o=o[n[i]];if(!o)break;}return o;},addUnload:function(f,s){var t=this,w=window;f={func:f,scope:s||this};if(!t.unloads){function unload(){var li=t.unloads,o,n;if(li){for(n in li){o=li[n];if(o&&o.func)o.func.call(o.scope,1);}if(w.detachEvent){w.detachEvent('onbeforeunload',fakeUnload);w.detachEvent('onunload',unload);}else if(w.removeEventListener)w.removeEventListener('unload',unload,false);t.unloads=o=li=w=unload=null;if(window.CollectGarbage)window.CollectGarbage();}};function fakeUnload(){var d=document;if(d.readyState=='interactive'){function stop(){d.detachEvent('onstop',stop);unload();d=null;};d.attachEvent('onstop',stop);window.setTimeout(function(){d.detachEvent('onstop',stop);},0);}};if(w.attachEvent){w.attachEvent('onunload',unload);w.attachEvent('onbeforeunload',fakeUnload);}else if(w.addEventListener)w.addEventListener('unload',unload,false);t.unloads=[f];}else t.unloads.push(f);return f;},removeUnload:function(f){var u=this.unloads,r=null;tinymce.each(u,function(o,i){if(o&&o.func==f){u.splice(i,1);r=f;return false;}});return r;},explode:function(s,d){return s?tinymce.map(s.split(d||','),tinymce.trim):s;},_addVer:function(u){var v;if(!this.query)return u;v=(u.indexOf('?')==-1?'?':'&')+this.query;if(u.indexOf('#')==-1)return u+v;return u.replace('#',v+'#');}};window.tinymce=tinymce;tinymce._init();tinymce.create('tinymce.util.Dispatcher',{scope:null,listeners:null,Dispatcher:function(s){this.scope=s||this;this.listeners=[];},add:function(cb,s){this.listeners.push({cb:cb,scope:s||this.scope});return cb;},addToTop:function(cb,s){this.listeners.unshift({cb:cb,scope:s||this.scope});return cb;},remove:function(cb){var l=this.listeners,o=null;tinymce.each(l,function(c,i){if(cb==c.cb){o=cb;l.splice(i,1);return false;}});return o;},dispatch:function(){var s,a=arguments,i,li=this.listeners,c;for(i=0;i<li.length;i++){c=li[i];s=c.cb.apply(c.scope,a);if(s===false)break;}return s;}});(function(){var each=tinymce.each;tinymce.create('tinymce.util.URI',{URI:function(u,s){var t=this,o,a,b;s=t.settings=s||{};if(/^(mailto|news|javascript|about):/i.test(u)||/^\s*#/.test(u)){t.source=u;return;}if(u.indexOf('/')===0&&u.indexOf('//')!==0)u=(s.base_uri?s.base_uri.protocol||'http':'http')+'://mce_host'+u;if(u.indexOf(':/')===-1&&u.indexOf('//')!==0)u=(s.base_uri.protocol||'http')+'://mce_host'+t.toAbsPath(s.base_uri.path,u);u=u.replace(/@@/g,'(mce_at)');u=/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(u);each(["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],function(v,i){var s=u[i];if(s)s=s.replace(/\(mce_at\)/g,'@@');t[v]=s;});if(b=s.base_uri){if(!t.protocol)t.protocol=b.protocol;if(!t.userInfo)t.userInfo=b.userInfo;if(!t.port&&t.host=='mce_host')t.port=b.port;if(!t.host||t.host=='mce_host')t.host=b.host;t.source='';}},setPath:function(p){var t=this;p=/^(.*?)\/?(\w+)?$/.exec(p);t.path=p[0];t.directory=p[1];t.file=p[2];t.source='';t.getURI();},toRelative:function(u){var t=this,o;if(u==="./")return u;u=new tinymce.util.URI(u,{base_uri:t});if((u.host!='mce_host'&&t.host!=u.host&&u.host)||t.port!=u.port||t.protocol!=u.protocol)return u.getURI();o=t.toRelPath(t.path,u.path);if(u.query)o+='?'+u.query;if(u.anchor)o+='#'+u.anchor;return o;},toAbsolute:function(u,nh){var u=new tinymce.util.URI(u,{base_uri:this});return u.getURI(this.host==u.host?nh:0);},toRelPath:function(base,path){var items,bp=0,out='',i,l;base=base.substring(0,base.lastIndexOf('/'));base=base.split('/');items=path.split('/');if(base.length>=items.length){for(i=0,l=base.length;i<l;i++){if(i>=items.length||base[i]!=items[i]){bp=i+1;break;}}}if(base.length<items.length){for(i=0,l=items.length;i<l;i++){if(i>=base.length||base[i]!=items[i]){bp=i+1;break;}}}if(bp==1)return path;for(i=0,l=base.length-(bp-1);i<l;i++)out+="../";for(i=bp-1,l=items.length;i<l;i++){if(i!=bp-1)out+="/"+items[i];else out+=items[i];}return out;},toAbsPath:function(base,path){var i,nb=0,o=[];base=base.split('/');path=path.split('/');each(base,function(k){if(k)o.push(k);});base=o;for(i=path.length-1,o=[];i>=0;i--){if(path[i].length==0||path[i]==".")continue;if(path[i]=='..'){nb++;continue;}if(nb>0){nb--;continue;}o.push(path[i]);}i=base.length-nb;if(i<=0)return'/'+o.reverse().join('/');return'/'+base.slice(0,i).join('/')+'/'+o.reverse().join('/');},getURI:function(nh){var s,t=this;if(!t.source||nh){s='';if(!nh){if(t.protocol)s+=t.protocol+'://';if(t.userInfo)s+=t.userInfo+'@';if(t.host)s+=t.host;if(t.port)s+=':'+t.port;}if(t.path)s+=t.path;if(t.query)s+='?'+t.query;if(t.anchor)s+='#'+t.anchor;t.source=s;}return t.source;}});})();(function(){var each=tinymce.each;tinymce.create('static tinymce.util.Cookie',{getHash:function(n){var v=this.get(n),h;if(v){each(v.split('&'),function(v){v=v.split('=');h=h||{};h[unescape(v[0])]=unescape(v[1]);});}return h;},setHash:function(n,v,e,p,d,s){var o='';each(v,function(v,k){o+=(!o?'':'&')+escape(k)+'='+escape(v);});this.set(n,o,e,p,d,s);},get:function(n){var c=document.cookie,e,p=n+"=",b;if(!c)return;b=c.indexOf("; "+p);if(b==-1){b=c.indexOf(p);if(b!=0)return null;}else b+=2;e=c.indexOf(";",b);if(e==-1)e=c.length;return unescape(c.substring(b+p.length,e));},set:function(n,v,e,p,d,s){document.cookie=n+"="+escape(v)+((e)?"; expires="+e.toGMTString():"")+((p)?"; path="+escape(p):"")+((d)?"; domain="+d:"")+((s)?"; secure":"");},remove:function(n,p){var d=new Date();d.setTime(d.getTime()-1000);this.set(n,'',d,p,d);}});})();tinymce.create('static tinymce.util.JSON',{serialize:function(o){var i,v,s=tinymce.util.JSON.serialize,t;if(o==null)return'null';t=typeof o;if(t=='string'){v='\bb\tt\nn\ff\rr\""\'\'\\\\';return'"'+o.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g,function(a,b){i=v.indexOf(b);if(i+1)return'\\'+v.charAt(i+1);a=b.charCodeAt().toString(16);return'\\u'+'0000'.substring(a.length)+a;})+'"';}if(t=='object'){if(o instanceof Array){for(i=0,v='[';i<o.length;i++)v+=(i>0?',':'')+s(o[i]);return v+']';}v='{';for(i in o)v+=typeof o[i]!='function'?(v.length>1?',"':'"')+i+'":'+s(o[i]):'';return v+'}';}return''+o;},parse:function(s){try{return eval('('+s+')');}catch(ex){}}});tinymce.create('static tinymce.util.XHR',{send:function(o){var x,t,w=window,c=0;o.scope=o.scope||this;o.success_scope=o.success_scope||o.scope;o.error_scope=o.error_scope||o.scope;o.async=o.async===false?false:true;o.data=o.data||'';function get(s){x=0;try{x=new ActiveXObject(s);}catch(ex){}return x;};x=w.XMLHttpRequest?new XMLHttpRequest():get('Microsoft.XMLHTTP')||get('Msxml2.XMLHTTP');if(x){if(x.overrideMimeType)x.overrideMimeType(o.content_type);x.open(o.type||(o.data?'POST':'GET'),o.url,o.async);if(o.content_type)x.setRequestHeader('Content-Type',o.content_type);x.send(o.data);function ready(){if(!o.async||x.readyState==4||c++>10000){if(o.success&&c<10000&&x.status==200)o.success.call(o.success_scope,''+x.responseText,x,o);else if(o.error)o.error.call(o.error_scope,c>10000?'TIMED_OUT':'GENERAL',x,o);x=null;}else w.setTimeout(ready,10);};if(!o.async)return ready();t=w.setTimeout(ready,10);}}});(function(){var extend=tinymce.extend,JSON=tinymce.util.JSON,XHR=tinymce.util.XHR;tinymce.create('tinymce.util.JSONRequest',{JSONRequest:function(s){this.settings=extend({},s);this.count=0;},send:function(o){var ecb=o.error,scb=o.success;o=extend(this.settings,o);o.success=function(c,x){c=JSON.parse(c);if(typeof(c)=='undefined'){c={error:'JSON Parse error.'};}if(c.error)ecb.call(o.error_scope||o.scope,c.error,x);else scb.call(o.success_scope||o.scope,c.result);};o.error=function(ty,x){ecb.call(o.error_scope||o.scope,ty,x);};o.data=JSON.serialize({id:o.id||'c'+(this.count++),method:o.method,params:o.params});o.content_type='application/json';XHR.send(o);},'static':{sendRPC:function(o){return new tinymce.util.JSONRequest().send(o);}}});}());(function(){var each=tinymce.each,is=tinymce.is;var isWebKit=tinymce.isWebKit,isIE=tinymce.isIE;tinymce.create('tinymce.dom.DOMUtils',{doc:null,root:null,files:null,listeners:{},pixelStyles:/^(top|left|bottom|right|width|height|borderWidth)$/,cache:{},idPattern:/^#[\w]+$/,elmPattern:/^[\w_*]+$/,elmClassPattern:/^([\w_]*)\.([\w_]+)$/,props:{"for":"htmlFor","class":"className",className:"className",checked:"checked",disabled:"disabled",maxlength:"maxLength",readonly:"readOnly",selected:"selected",value:"value",id:"id",name:"name",type:"type"},DOMUtils:function(d,s){var t=this;t.doc=d;t.win=window;t.files={};t.cssFlicker=false;t.counter=0;t.boxModel=!tinymce.isIE||d.compatMode=="CSS1Compat";t.stdMode=d.documentMode===8;this.settings=s=tinymce.extend({keep_values:false,hex_colors:1,process_html:1},s);if(tinymce.isIE6){try{d.execCommand('BackgroundImageCache',false,true);}catch(e){t.cssFlicker=true;}}tinymce.addUnload(t.destroy,t);},getRoot:function(){var t=this,s=t.settings;return(s&&t.get(s.root_element))||t.doc.body;},getViewPort:function(w){var d,b;w=!w?this.win:w;d=w.document;b=this.boxModel?d.documentElement:d.body;return{x:w.pageXOffset||b.scrollLeft,y:w.pageYOffset||b.scrollTop,w:w.innerWidth||b.clientWidth,h:w.innerHeight||b.clientHeight};},getRect:function(e){var p,t=this,sr;e=t.get(e);p=t.getPos(e);sr=t.getSize(e);return{x:p.x,y:p.y,w:sr.w,h:sr.h};},getSize:function(e){var t=this,w,h;e=t.get(e);w=t.getStyle(e,'width');h=t.getStyle(e,'height');if(w.indexOf('px')===-1)w=0;if(h.indexOf('px')===-1)h=0;return{w:parseInt(w)||e.offsetWidth||e.clientWidth,h:parseInt(h)||e.offsetHeight||e.clientHeight};},getParent:function(n,f,r){var na,se=this.settings;n=this.get(n);if(se.strict_root)r=r||this.getRoot();if(is(f,'string')){na=f.toUpperCase();f=function(n){var s=false;if(n.nodeType==1&&na==='*'){s=true;return false;}each(na.split(','),function(v){if(n.nodeType==1&&((se.strict&&n.nodeName.toUpperCase()==v)||n.nodeName.toUpperCase()==v)){s=true;return false;}});return s;};}while(n){if(n==r)return null;if(f(n))return n;n=n.parentNode;}return null;},get:function(e){var n;if(e&&this.doc&&typeof(e)=='string'){n=e;e=this.doc.getElementById(e);if(e&&e.id!==n)return this.doc.getElementsByName(n)[1];}return e;},select:function(pa,s){var t=this,cs,c,pl,o=[],x,i,l,n,xp;s=t.get(s)||t.doc;if(s.querySelectorAll){if(s!=t.doc){i=s.id;s.id='_mc_tmp';pa='#_mc_tmp '+pa;}l=tinymce.grep(s.querySelectorAll(pa));s.id=i;return l;}if(!t.selectorRe)t.selectorRe=/^([\w\\*]+)?(?:#([\w\\]+))?(?:\.([\w\\\.]+))?(?:\[\@([\w\\]+)([\^\$\*!]?=)([\w\\]+)\])?(?:\:([\w\\]+))?/i;;if(tinymce.isAir){each(tinymce.explode(pa),function(v){if(!(xp=t.cache[v])){xp='';each(v.split(' '),function(v){v=t.selectorRe.exec(v);xp+=v[1]?'//'+v[1]:'//*';if(v[2])xp+="[@id='"+v[2]+"']";if(v[3]){each(v[3].split('.'),function(n){xp+="[@class = '"+n+"' or contains(concat(' ', @class, ' '), ' "+n+" ')]";});}});t.cache[v]=xp;}xp=t.doc.evaluate(xp,s,null,4,null);while(n=xp.iterateNext())o.push(n);});return o;}if(t.settings.strict){function get(s,n){return s.getElementsByTagName(n.toLowerCase());};}else{function get(s,n){return s.getElementsByTagName(n);};}if(t.elmPattern.test(pa)){x=get(s,pa);for(i=0,l=x.length;i<l;i++)o.push(x[i]);return o;}if(t.elmClassPattern.test(pa)){pl=t.elmClassPattern.exec(pa);x=get(s,pl[1]||'*');c=' '+pl[2]+' ';for(i=0,l=x.length;i<l;i++){n=x[i];if(n.className&&(' '+n.className+' ').indexOf(c)!==-1)o.push(n);}return o;}function collect(n){if(!n.mce_save){n.mce_save=1;o.push(n);}};function collectIE(n){if(!n.getAttribute('mce_save')){n.setAttribute('mce_save','1');o.push(n);}};function find(n,f,r){var i,l,nl=get(r,n);for(i=0,l=nl.length;i<l;i++)f(nl[i]);};each(pa.split(','),function(v,i){v=tinymce.trim(v);if(t.elmPattern.test(v)){each(get(s,v),function(n){collect(n);});return;}if(t.elmClassPattern.test(v)){x=t.elmClassPattern.exec(v);each(get(s,x[1]),function(n){if(t.hasClass(n,x[2]))collect(n);});return;}if(!(cs=t.cache[pa])){cs='x=(function(cf, s) {';pl=v.split(' ');each(pl,function(v){var p=t.selectorRe.exec(v);p[1]=p[1]||'*';cs+='find("'+p[1]+'", function(n) {';if(p[2])cs+='if (n.id !== "'+p[2]+'") return;';if(p[3]){cs+='var c = " " + n.className + " ";';cs+='if (';c='';each(p[3].split('.'),function(v){if(v)c+=(c?'||':'')+'c.indexOf(" '+v+' ") === -1';});cs+=c+') return;';}});cs+='cf(n);';for(i=pl.length-1;i>=0;i--)cs+='}, '+(i?'n':'s')+');';cs+='})';t.cache[pa]=cs=eval(cs);}cs(isIE?collectIE:collect,s);});each(o,function(n){if(isIE)n.removeAttribute('mce_save');else delete n.mce_save;});return o;},add:function(p,n,a,h,c){var t=this;return this.run(p,function(p){var e,k;e=is(n,'string')?t.doc.createElement(n):n;t.setAttribs(e,a);if(h){if(h.nodeType)e.appendChild(h);else t.setHTML(e,h);}return!c?p.appendChild(e):e;});},create:function(n,a,h){return this.add(this.doc.createElement(n),n,a,h,1);},createHTML:function(n,a,h){var o='',t=this,k;o+='<'+n;for(k in a){if(a.hasOwnProperty(k))o+=' '+k+'="'+t.encode(a[k])+'"';}if(tinymce.is(h))return o+'>'+h+'</'+n+'>';return o+' />';},remove:function(n,k){return this.run(n,function(n){var p,g;p=n.parentNode;if(!p)return null;if(k){each(n.childNodes,function(c){p.insertBefore(c.cloneNode(true),n);});}return p.removeChild(n);});},setStyle:function(n,na,v){var t=this;return t.run(n,function(e){var s,i;s=e.style;na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase();});if(t.pixelStyles.test(na)&&(tinymce.is(v,'number')||/^[\-0-9\.]+$/.test(v)))v+='px';switch(na){case'opacity':if(isIE){s.filter=v===''?'':"alpha(opacity="+(v*100)+")";if(!n.currentStyle||!n.currentStyle.hasLayout)s.display='inline-block';}s[na]=s['-moz-opacity']=s['-khtml-opacity']=v||'';break;case'float':isIE?s.styleFloat=v:s.cssFloat=v;break;default:s[na]=v||'';}if(t.settings.update_styles)t.setAttrib(e,'mce_style');});},getStyle:function(n,na,c){n=this.get(n);if(!n)return false;if(this.doc.defaultView&&c){na=na.replace(/[A-Z]/g,function(a){return'-'+a;});try{return this.doc.defaultView.getComputedStyle(n,null).getPropertyValue(na);}catch(ex){return null;}}na=na.replace(/-(\D)/g,function(a,b){return b.toUpperCase();});if(na=='float')na=isIE?'styleFloat':'cssFloat';if(n.currentStyle&&c)return n.currentStyle[na];return n.style[na];},setStyles:function(e,o){var t=this,s=t.settings,ol;ol=s.update_styles;s.update_styles=0;each(o,function(v,n){t.setStyle(e,n,v);});s.update_styles=ol;if(s.update_styles)t.setAttrib(e,s.cssText);},setAttrib:function(e,n,v){var t=this;if(!e||!n)return;if(t.settings.strict)n=n.toLowerCase();return this.run(e,function(e){var s=t.settings;switch(n){case"style":if(!is(v,'string')){each(v,function(v,n){t.setStyle(e,n,v);});return;}if(s.keep_values){if(v&&!t._isRes(v))e.setAttribute('mce_style',v,2);else e.removeAttribute('mce_style',2);}e.style.cssText=v;break;case"class":e.className=v||'';break;case"src":case"href":if(s.keep_values){if(s.url_converter)v=s.url_converter.call(s.url_converter_scope||t,v,n,e);t.setAttrib(e,'mce_'+n,v,2);}break;case"shape":e.setAttribute('mce_style',v);break;}if(is(v)&&v!==null&&v.length!==0)e.setAttribute(n,''+v,2);else e.removeAttribute(n,2);});},setAttribs:function(e,o){var t=this;return this.run(e,function(e){each(o,function(v,n){t.setAttrib(e,n,v);});});},getAttrib:function(e,n,dv){var v,t=this;e=t.get(e);if(!e||e.nodeType!==1)return false;if(!is(dv))dv='';if(/^(src|href|style|coords|shape)$/.test(n)){v=e.getAttribute("mce_"+n);if(v)return v;}if(isIE&&t.props[n]){v=e[t.props[n]];v=v&&v.nodeValue?v.nodeValue:v;}if(!v)v=e.getAttribute(n,2);if(n==='style'){v=v||e.style.cssText;if(v){v=t.serializeStyle(t.parseStyle(v));if(t.settings.keep_values&&!t._isRes(v))e.setAttribute('mce_style',v);}}if(isWebKit&&n==="class"&&v)v=v.replace(/(apple|webkit)\-[a-z\-]+/gi,'');if(isIE){switch(n){case'rowspan':case'colspan':if(v===1)v='';break;case'size':if(v==='+0'||v===20)v='';break;case'width':case'height':case'vspace':case'checked':case'disabled':case'readonly':if(v===0)v='';break;case'hspace':if(v===-1)v='';break;case'maxlength':case'tabindex':if(v===32768||v===2147483647||v==='32768')v='';break;case'compact':case'noshade':case'nowrap':if(v===65535)return n;return dv;case'shape':v=v.toLowerCase();break;default:if(n.indexOf('on')===0&&v)v=(''+v).replace(/^function\s+anonymous\(\)\s+\{\s+(.*)\s+\}$/,'$1');}}return(v!==undefined&&v!==null&&v!=='')?''+v:dv;},getPos:function(n){var t=this,x=0,y=0,e,d=t.doc,r;n=t.get(n);if(n&&isIE){n=n.getBoundingClientRect();e=t.boxModel?d.documentElement:d.body;x=t.getStyle(t.select('html')[0],'borderWidth');x=(x=='medium'||t.boxModel&&!t.isIE6)&&2||x;n.top+=t.win.self!=t.win.top?2:0;return{x:n.left+e.scrollLeft-x,y:n.top+e.scrollTop-x};}r=n;while(r){x+=r.offsetLeft||0;y+=r.offsetTop||0;r=r.offsetParent;}r=n;while(r){if(!/^table-row|inline.*/i.test(t.getStyle(r,"display",1))){x-=r.scrollLeft||0;y-=r.scrollTop||0;}r=r.parentNode;if(r==d.body)break;}return{x:x,y:y};},parseStyle:function(st){var t=this,s=t.settings,o={};if(!st)return o;function compress(p,s,ot){var t,r,b,l;t=o[p+'-top'+s];if(!t)return;r=o[p+'-right'+s];if(t!=r)return;b=o[p+'-bottom'+s];if(r!=b)return;l=o[p+'-left'+s];if(b!=l)return;o[ot]=l;delete o[p+'-top'+s];delete o[p+'-right'+s];delete o[p+'-bottom'+s];delete o[p+'-left'+s];};function compress2(ta,a,b,c){var t;t=o[a];if(!t)return;t=o[b];if(!t)return;t=o[c];if(!t)return;o[ta]=o[a]+' '+o[b]+' '+o[c];delete o[a];delete o[b];delete o[c];};st=st.replace(/&(#?[a-z0-9]+);/g,'&$1_MCE_SEMI_');each(st.split(';'),function(v){var sv,ur=[];if(v){v=v.replace(/_MCE_SEMI_/g,';');v=v.replace(/url\([^\)]+\)/g,function(v){ur.push(v);return'url('+ur.length+')';});v=v.split(':');sv=tinymce.trim(v[1]);sv=sv.replace(/url\(([^\)]+)\)/g,function(a,b){return ur[parseInt(b)-1];});sv=sv.replace(/rgb\([^\)]+\)/g,function(v){return t.toHex(v);});if(s.url_converter){sv=sv.replace(/url\([\'\"]?([^\)\'\"]+)[\'\"]?\)/g,function(x,c){return'url('+s.url_converter.call(s.url_converter_scope||t,t.decode(c),'style',null)+')';});}o[tinymce.trim(v[0]).toLowerCase()]=sv;}});compress("border","","border");compress("border","-width","border-width");compress("border","-color","border-color");compress("border","-style","border-style");compress("padding","","padding");compress("margin","","margin");compress2('border','border-width','border-style','border-color');if(isIE){if(o.border=='medium none')o.border='';}return o;},serializeStyle:function(o){var s='';each(o,function(v,k){if(k&&v){if(tinymce.isGecko&&k.indexOf('-moz-')===0)return;switch(k){case'color':case'background-color':v=v.toLowerCase();break;}s+=(s?' ':'')+k+': '+v+';';}});return s;},loadCSS:function(u){var t=this,d=t.doc;if(!u)u='';each(u.split(','),function(u){if(t.files[u])return;t.files[u]=true;t.add(t.select('head')[0],'link',{rel:'stylesheet',href:tinymce._addVer(u)});});},addClass:function(e,c){return this.run(e,function(e){var o;if(!c)return 0;if(this.hasClass(e,c))return e.className;o=this.removeClass(e,c);return e.className=(o!=''?(o+' '):'')+c;});},removeClass:function(e,c){var t=this,re;return t.run(e,function(e){var v;if(t.hasClass(e,c)){if(!re)re=new RegExp("(^|\\s+)"+c+"(\\s+|$)","g");v=e.className.replace(re,' ');return e.className=tinymce.trim(v!=' '?v:'');}return e.className;});},hasClass:function(n,c){n=this.get(n);if(!n||!c)return false;return(' '+n.className+' ').indexOf(' '+c+' ')!==-1;},show:function(e){return this.setStyle(e,'display','block');},hide:function(e){return this.setStyle(e,'display','none');},isHidden:function(e){e=this.get(e);return!e||e.style.display=='none'||this.getStyle(e,'display')=='none';},uniqueId:function(p){return(!p?'mce_':p)+(this.counter++);},setHTML:function(e,h){var t=this;return this.run(e,function(e){var x,i,nl,n,p,x;h=t.processHTML(h);if(isIE){function set(){try{e.innerHTML='<br />'+h;e.removeChild(e.firstChild);}catch(ex){while(e.firstChild)e.firstChild.removeNode();x=t.create('div');x.innerHTML='<br />'+h;each(x.childNodes,function(n,i){if(i)e.appendChild(n);});}};if(t.settings.fix_ie_paragraphs)h=h.replace(/<p><\/p>|<p([^>]+)><\/p>|<p[^\/+]\/>/gi,'<p$1 mce_keep="true">&nbsp;</p>');set();if(t.settings.fix_ie_paragraphs){nl=e.getElementsByTagName("p");for(i=nl.length-1,x=0;i>=0;i--){n=nl[i];if(!n.hasChildNodes()){if(!n.mce_keep){x=1;break;}n.removeAttribute('mce_keep');}}}if(x){h=h.replace(/<p ([^>]+)>|<p>/g,'<div $1 mce_tmp="1">');h=h.replace(/<\/p>/g,'</div>');set();if(t.settings.fix_ie_paragraphs){nl=e.getElementsByTagName("DIV");for(i=nl.length-1;i>=0;i--){n=nl[i];if(n.mce_tmp){p=t.doc.createElement('p');n.cloneNode(false).outerHTML.replace(/([a-z0-9\-_]+)=/gi,function(a,b){var v;if(b!=='mce_tmp'){v=n.getAttribute(b);if(!v&&b==='class')v=n.className;p.setAttribute(b,v);}});for(x=0;x<n.childNodes.length;x++)p.appendChild(n.childNodes[x].cloneNode(true));n.swapNode(p);}}}}}else e.innerHTML=h;return h;});},processHTML:function(h){var t=this,s=t.settings;if(!s.process_html)return h;if(tinymce.isGecko){h=h.replace(/<(\/?)strong>|<strong( [^>]+)>/gi,'<$1b$2>');h=h.replace(/<(\/?)em>|<em( [^>]+)>/gi,'<$1i$2>');}else if(isIE){h=h.replace(/&apos;/g,'&#39;');h=h.replace(/\s+(disabled|checked|readonly|selected)\s*=\s*[\"\']?(false|0)[\"\']?/gi,'');}h=h.replace(/<a( )([^>]+)\/>|<a\/>/gi,'<a$1$2></a>');if(s.keep_values){if(/<script|style/.test(h)){function trim(s){s=s.replace(/(<!--\[CDATA\[|\]\]-->)/g,'\n');s=s.replace(/^[\r\n]*|[\r\n]*$/g,'');s=s.replace(/^\s*(\/\/\s*<!--|\/\/\s*<!\[CDATA\[|<!--|<!\[CDATA\[)[\r\n]*/g,'');s=s.replace(/\s*(\/\/\s*\]\]>|\/\/\s*-->|\]\]>|-->|\]\]-->)\s*$/g,'');return s;};h=h.replace(/<script([^>]+|)>([\s\S]*?)<\/script>/g,function(v,a,b){b=trim(b);if(!a)a=' type="text/javascript"';if(b)b='<!--\n'+b+'\n// -->';return'<mce:script'+a+'>'+b+'</mce:script>';});h=h.replace(/<style([^>]+|)>([\s\S]*?)<\/style>/g,function(v,a,b){b=trim(b);return'<mce:style'+a+'><!--\n'+b+'\n--></mce:style><style'+a+' mce_bogus="1">'+b+'</style>';});}h=h.replace(/<!\[CDATA\[([\s\S]+)\]\]>/g,'<!--[CDATA[$1]]-->');h=h.replace(/<([\w:]+) [^>]*(src|href|style|shape|coords)[^>]*>/gi,function(a,n){function handle(m,b,c){var u=c;if(a.indexOf('mce_'+b)!=-1)return m;if(b=='style'){if(t._isRes(c))return m;if(s.hex_colors){u=u.replace(/rgb\([^\)]+\)/g,function(v){return t.toHex(v);});}if(s.url_converter){u=u.replace(/url\([\'\"]?([^\)\'\"]+)\)/g,function(x,c){return'url('+t.encode(s.url_converter.call(s.url_converter_scope||t,t.decode(c),b,n))+')';});}}else if(b!='coords'&&b!='shape'){if(s.url_converter)u=t.encode(s.url_converter.call(s.url_converter_scope||t,t.decode(c),b,n));}return' '+b+'="'+c+'" mce_'+b+'="'+u+'"';};a=a.replace(/ (src|href|style|coords|shape)=[\"]([^\"]+)[\"]/gi,handle);a=a.replace(/ (src|href|style|coords|shape)=[\']([^\']+)[\']/gi,handle);return a.replace(/ (src|href|style|coords|shape)=([^\s\"\'>]+)/gi,handle);});}return h;},getOuterHTML:function(e){var d;e=this.get(e);if(!e)return null;if(isIE)return e.outerHTML;d=(e.ownerDocument||this.doc).createElement("body");d.appendChild(e.cloneNode(true));return d.innerHTML;},setOuterHTML:function(e,h,d){var t=this;return this.run(e,function(e){var n,tp;e=t.get(e);d=d||e.ownerDocument||t.doc;if(isIE&&e.nodeType==1)e.outerHTML=h;else{tp=d.createElement("body");tp.innerHTML=h;n=tp.lastChild;while(n){t.insertAfter(n.cloneNode(true),e);n=n.previousSibling;}t.remove(e);}});},decode:function(s){var e,n,v;if(/&[^;]+;/.test(s)){e=this.doc.createElement("div");e.innerHTML=s;n=e.firstChild;v='';if(n){do{v+=n.nodeValue;}while(n.nextSibling);}return v||s;}return s;},encode:function(s){return s?(''+s).replace(/[<>&\"]/g,function(c,b){switch(c){case'&':return'&amp;';case'"':return'&quot;';case'<':return'&lt;';case'>':return'&gt;';}return c;}):s;},insertAfter:function(n,r){var t=this;r=t.get(r);return this.run(n,function(n){var p,ns;p=r.parentNode;ns=r.nextSibling;if(ns)p.insertBefore(n,ns);else p.appendChild(n);return n;});},isBlock:function(n){if(n.nodeType&&n.nodeType!==1)return false;n=n.nodeName||n;return/^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(n);},replace:function(n,o,k){if(is(o,'array'))n=n.cloneNode(true);return this.run(o,function(o){if(k){each(o.childNodes,function(c){n.appendChild(c.cloneNode(true));});}return o.parentNode.replaceChild(n,o);});},toHex:function(s){var c=/^\s*rgb\s*?\(\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?,\s*?([0-9]+)\s*?\)\s*$/i.exec(s);function hex(s){s=parseInt(s).toString(16);return s.length>1?s:'0'+s;};if(c){s='#'+hex(c[1])+hex(c[2])+hex(c[3]);return s;}return s;},getClasses:function(){var t=this,cl=[],i,lo={},f=t.settings.class_filter,ov;if(t.classes)return t.classes;function addClasses(s){each(s.imports,function(r){addClasses(r);});each(s.cssRules||s.rules,function(r){switch(r.type||1){case 1:if(r.selectorText){each(r.selectorText.split(','),function(v){v=v.replace(/^\s*|\s*$|^\s\./g,"");if(/\.mce/.test(v)||!/\.[\w\-]+$/.test(v))return;ov=v;v=v.replace(/.*\.([a-z0-9_\-]+).*/i,'$1');if(f&&!(v=f(v,ov)))return;if(!lo[v]){cl.push({'class':v});lo[v]=1;}});}break;case 3:addClasses(r.styleSheet);break;}});};try{each(t.doc.styleSheets,addClasses);}catch(ex){}if(cl.length>0)t.classes=cl;return cl;},run:function(e,f,s){var t=this,o;if(t.doc&&typeof(e)==='string')e=t.get(e);if(!e)return false;s=s||this;if(!e.nodeType&&(e.length||e.length===0)){o=[];each(e,function(e,i){if(e){if(typeof(e)=='string')e=t.doc.getElementById(e);o.push(f.call(s,e,i));}});return o;}return f.call(s,e);},getAttribs:function(n){var o;n=this.get(n);if(!n)return[];if(isIE){o=[];if(n.nodeName=='OBJECT')return n.attributes;n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi,function(a,b){o.push({specified:1,nodeName:b});});return o;}return n.attributes;},destroy:function(s){var t=this;t.win=t.doc=t.root=null;if(!s)tinymce.removeUnload(t.destroy);},_isRes:function(c){return/^(top|left|bottom|right|width|height)/i.test(c)||/;\s*(top|left|bottom|right|width|height)/i.test(c);}});tinymce.DOM=new tinymce.dom.DOMUtils(document,{process_html:0});})();(function(){var each=tinymce.each,DOM=tinymce.DOM,isIE=tinymce.isIE,isWebKit=tinymce.isWebKit,Event;tinymce.create('static tinymce.dom.Event',{inits:[],events:[],add:function(o,n,f,s){var cb,t=this,el=t.events,r;if(o&&o instanceof Array){r=[];each(o,function(o){o=DOM.get(o);r.push(t.add(o,n,f,s));});return r;}o=DOM.get(o);if(!o)return;cb=function(e){e=e||window.event;if(e&&!e.target&&isIE)e.target=e.srcElement;if(!s)return f(e);return f.call(s,e);};if(n=='unload'){tinymce.unloads.unshift({func:cb});return cb;}if(n=='init'){if(t.domLoaded)cb();else t.inits.push(cb);return cb;}el.push({obj:o,name:n,func:f,cfunc:cb,scope:s});t._add(o,n,cb);return f;},remove:function(o,n,f){var t=this,a=t.events,s=false,r;if(o&&o instanceof Array){r=[];each(o,function(o){o=DOM.get(o);r.push(t.remove(o,n,f));});return r;}o=DOM.get(o);each(a,function(e,i){if(e.obj==o&&e.name==n&&(!f||(e.func==f||e.cfunc==f))){a.splice(i,1);t._remove(o,n,e.cfunc);s=true;return false;}});return s;},clear:function(o){var t=this,a=t.events,i,e;if(o){o=DOM.get(o);for(i=a.length-1;i>=0;i--){e=a[i];if(e.obj===o){t._remove(e.obj,e.name,e.cfunc);e.obj=e.cfunc=null;a.splice(i,1);}}}},cancel:function(e){if(!e)return false;this.stop(e);return this.prevent(e);},stop:function(e){if(e.stopPropagation)e.stopPropagation();else e.cancelBubble=true;return false;},prevent:function(e){if(e.preventDefault)e.preventDefault();else e.returnValue=false;return false;},_unload:function(){var t=Event;each(t.events,function(e,i){t._remove(e.obj,e.name,e.cfunc);e.obj=e.cfunc=null;});t.events=[];t=null;},_add:function(o,n,f){if(o.attachEvent)o.attachEvent('on'+n,f);else if(o.addEventListener)o.addEventListener(n,f,false);else o['on'+n]=f;},_remove:function(o,n,f){if(o){try{if(o.detachEvent)o.detachEvent('on'+n,f);else if(o.removeEventListener)o.removeEventListener(n,f,false);else o['on'+n]=null;}catch(ex){}}},_pageInit:function(){var e=Event;if(e.domLoaded)return;e._remove(window,'DOMContentLoaded',e._pageInit);e.domLoaded=true;each(e.inits,function(c){c();});e.inits=[];},_wait:function(){var t;if(window.tinyMCE_GZ&&tinyMCE_GZ.loaded){Event.domLoaded=1;return;}if(isIE&&document.location.protocol!='https:'){document.write('<script id=__ie_onload defer src=\'javascript:""\';><\/script>');DOM.get("__ie_onload").onreadystatechange=function(){if(this.readyState=="complete"){Event._pageInit();DOM.get("__ie_onload").onreadystatechange=null;}};}else{Event._add(window,'DOMContentLoaded',Event._pageInit,Event);if(isIE||isWebKit){t=setInterval(function(){if(/loaded|complete/.test(document.readyState)){clearInterval(t);Event._pageInit();}},10);}}}});Event=tinymce.dom.Event;Event._wait();tinymce.addUnload(Event._unload);})();(function(){var each=tinymce.each;tinymce.create('tinymce.dom.Element',{Element:function(id,s){var t=this,dom,el;s=s||{};t.id=id;t.dom=dom=s.dom||tinymce.DOM;t.settings=s;if(!tinymce.isIE)el=t.dom.get(t.id);each(['getPos','getRect','getParent','add','setStyle','getStyle','setStyles','setAttrib','setAttribs','getAttrib','addClass','removeClass','hasClass','getOuterHTML','setOuterHTML','remove','show','hide','isHidden','setHTML','get'],function(k){t[k]=function(){var a=arguments,o;if(tinymce.isOpera){a=[id];each(arguments,function(v){a.push(v);});}else Array.prototype.unshift.call(a,el||id);o=dom[k].apply(dom,a);t.update(k);return o;};});},on:function(n,f,s){return tinymce.dom.Event.add(this.id,n,f,s);},getXY:function(){return{x:parseInt(this.getStyle('left')),y:parseInt(this.getStyle('top'))};},getSize:function(){var n=this.dom.get(this.id);return{w:parseInt(this.getStyle('width')||n.clientWidth),h:parseInt(this.getStyle('height')||n.clientHeight)};},moveTo:function(x,y){this.setStyles({left:x,top:y});},moveBy:function(x,y){var p=this.getXY();this.moveTo(p.x+x,p.y+y);},resizeTo:function(w,h){this.setStyles({width:w,height:h});},resizeBy:function(w,h){var s=this.getSize();this.resizeTo(s.w+w,s.h+h);},update:function(k){var t=this,b,dom=t.dom;if(tinymce.isIE6&&t.settings.blocker){k=k||'';if(k.indexOf('get')===0||k.indexOf('has')===0||k.indexOf('is')===0)return;if(k=='remove'){dom.remove(t.blocker);return;}if(!t.blocker){t.blocker=dom.uniqueId();b=dom.add(t.settings.container||dom.getRoot(),'iframe',{id:t.blocker,style:'position:absolute;',frameBorder:0,src:'javascript:""'});dom.setStyle(b,'opacity',0);}else b=dom.get(t.blocker);dom.setStyle(b,'left',t.getStyle('left',1));dom.setStyle(b,'top',t.getStyle('top',1));dom.setStyle(b,'width',t.getStyle('width',1));dom.setStyle(b,'height',t.getStyle('height',1));dom.setStyle(b,'display',t.getStyle('display',1));dom.setStyle(b,'zIndex',parseInt(t.getStyle('zIndex',1)||0)-1);}}});})();(function(){function trimNl(s){return s.replace(/[\n\r]+/g,'');};var is=tinymce.is,isIE=tinymce.isIE,each=tinymce.each;tinymce.create('tinymce.dom.Selection',{Selection:function(dom,win,serializer){var t=this;t.dom=dom;t.win=win;t.serializer=serializer;each(['onBeforeSetContent','onBeforeGetContent','onSetContent','onGetContent'],function(e){t[e]=new tinymce.util.Dispatcher(t);});tinymce.addUnload(t.destroy,t);},getContent:function(s){var t=this,r=t.getRng(),e=t.dom.create("body"),se=t.getSel(),wb,wa,n;s=s||{};wb=wa='';s.get=true;s.format=s.format||'html';t.onBeforeGetContent.dispatch(t,s);if(s.format=='text')return t.isCollapsed()?'':(r.text||(se.toString?se.toString():''));if(r.cloneContents){n=r.cloneContents();if(n)e.appendChild(n);}else if(is(r.item)||is(r.htmlText))e.innerHTML=r.item?r.item(0).outerHTML:r.htmlText;else e.innerHTML=r.toString();if(/^\s/.test(e.innerHTML))wb=' ';if(/\s+$/.test(e.innerHTML))wa=' ';s.getInner=true;s.content=t.isCollapsed()?'':wb+t.serializer.serialize(e,s)+wa;t.onGetContent.dispatch(t,s);return s.content;},setContent:function(h,s){var t=this,r=t.getRng(),c,d=t.win.document;s=s||{format:'html'};s.set=true;h=s.content=t.dom.processHTML(h);t.onBeforeSetContent.dispatch(t,s);h=s.content;if(r.insertNode){h+='<span id="__caret">_</span>';r.deleteContents();r.insertNode(t.getRng().createContextualFragment(h));c=t.dom.get('__caret');r=d.createRange();r.setStartBefore(c);r.setEndAfter(c);t.setRng(r);d.execCommand('Delete',false,null);t.dom.remove('__caret');}else{if(r.item){d.execCommand('Delete',false,null);r=t.getRng();}r.pasteHTML(h);}t.onSetContent.dispatch(t,s);},getStart:function(){var t=this,r=t.getRng(),e;if(isIE){if(r.item)return r.item(0);r=r.duplicate();r.collapse(1);e=r.parentElement();if(e&&e.nodeName=='BODY')return e.firstChild;return e;}else{e=r.startContainer;if(e.nodeName=='BODY')return e.firstChild;return t.dom.getParent(e,function(n){return n.nodeType==1;});}},getEnd:function(){var t=this,r=t.getRng(),e;if(isIE){if(r.item)return r.item(0);r=r.duplicate();r.collapse(0);e=r.parentElement();if(e&&e.nodeName=='BODY')return e.lastChild;return e;}else{e=r.endContainer;if(e.nodeName=='BODY')return e.lastChild;return t.dom.getParent(e,function(n){return n.nodeType==1;});}},getBookmark:function(si){var t=this,r=t.getRng(),tr,sx,sy,vp=t.dom.getViewPort(t.win),e,sp,bp,le,c=-0xFFFFFF,s,ro=t.dom.getRoot(),wb=0,wa=0,nv;sx=vp.x;sy=vp.y;if(si=='simple')return{rng:r,scrollX:sx,scrollY:sy};if(isIE){if(r.item){e=r.item(0);each(t.dom.select(e.nodeName),function(n,i){if(e==n){sp=i;return false;}});return{tag:e.nodeName,index:sp,scrollX:sx,scrollY:sy};}tr=t.dom.doc.body.createTextRange();tr.moveToElementText(ro);tr.collapse(true);bp=Math.abs(tr.move('character',c));tr=r.duplicate();tr.collapse(true);sp=Math.abs(tr.move('character',c));tr=r.duplicate();tr.collapse(false);le=Math.abs(tr.move('character',c))-sp;return{start:sp-bp,length:le,scrollX:sx,scrollY:sy};}e=t.getNode();s=t.getSel();if(!s)return null;if(e&&e.nodeName=='IMG'){return{scrollX:sx,scrollY:sy};}function getPos(r,sn,en){var w=t.dom.doc.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={};while((n=w.nextNode())!=null){if(n==sn)d.start=p;if(n==en){d.end=p;return d;}p+=trimNl(n.nodeValue||'').length;}return null;};if(s.anchorNode==s.focusNode&&s.anchorOffset==s.focusOffset){e=getPos(ro,s.anchorNode,s.focusNode);if(!e)return{scrollX:sx,scrollY:sy};trimNl(s.anchorNode.nodeValue||'').replace(/^\s+/,function(a){wb=a.length;});return{start:Math.max(e.start+s.anchorOffset-wb,0),end:Math.max(e.end+s.focusOffset-wb,0),scrollX:sx,scrollY:sy,beg:s.anchorOffset-wb==0};}else{e=getPos(ro,r.startContainer,r.endContainer);if(!e)return{scrollX:sx,scrollY:sy};return{start:Math.max(e.start+r.startOffset-wb,0),end:Math.max(e.end+r.endOffset-wa,0),scrollX:sx,scrollY:sy,beg:r.startOffset-wb==0};}},moveToBookmark:function(b){var t=this,r=t.getRng(),s=t.getSel(),ro=t.dom.getRoot(),sd,nvl,nv;function getPos(r,sp,ep){var w=t.dom.doc.createTreeWalker(r,NodeFilter.SHOW_TEXT,null,false),n,p=0,d={},o,v,wa,wb;while((n=w.nextNode())!=null){wa=wb=0;nv=n.nodeValue||'';nvl=trimNl(nv).length;p+=nvl;if(p>=sp&&!d.startNode){o=sp-(p-nvl);if(b.beg&&o>=nvl)continue;d.startNode=n;d.startOffset=o+wb;}if(p>=ep){d.endNode=n;d.endOffset=ep-(p-nvl)+wb;return d;}}return null;};if(!b)return false;t.win.scrollTo(b.scrollX,b.scrollY);if(isIE){if(r=b.rng){try{r.select();}catch(ex){}return true;}t.win.focus();if(b.tag){r=ro.createControlRange();each(t.dom.select(b.tag),function(n,i){if(i==b.index)r.addElement(n);});}else{try{if(b.start<0)return true;r=s.createRange();r.moveToElementText(ro);r.collapse(true);r.moveStart('character',b.start);r.moveEnd('character',b.length);}catch(ex2){return true;}}try{r.select();}catch(ex){}return true;}if(!s)return false;if(b.rng){s.removeAllRanges();s.addRange(b.rng);}else{if(is(b.start)&&is(b.end)){try{sd=getPos(ro,b.start,b.end);if(sd){r=t.dom.doc.createRange();r.setStart(sd.startNode,sd.startOffset);r.setEnd(sd.endNode,sd.endOffset);s.removeAllRanges();s.addRange(r);}if(!tinymce.isOpera)t.win.focus();}catch(ex){}}}},select:function(n,c){var t=this,r=t.getRng(),s=t.getSel(),b,fn,ln,d=t.win.document;function first(n){return n?d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false).nextNode():null;};function last(n){var c,o,w;if(!n)return null;w=d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false);while(c=w.nextNode())o=c;return o;};if(isIE){try{b=d.body;if(/^(IMG|TABLE)$/.test(n.nodeName)){r=b.createControlRange();r.addElement(n);}else{r=b.createTextRange();r.moveToElementText(n);}r.select();}catch(ex){}}else{if(c){fn=first(n);ln=last(n);if(fn&&ln){r=d.createRange();r.setStart(fn,0);r.setEnd(ln,ln.nodeValue.length);}else r.selectNode(n);}else r.selectNode(n);t.setRng(r);}return n;},isCollapsed:function(){var t=this,r=t.getRng(),s=t.getSel();if(!r||r.item)return false;return!s||r.boundingWidth==0||r.collapsed;},collapse:function(b){var t=this,r=t.getRng(),n;if(r.item){n=r.item(0);r=this.win.document.body.createTextRange();r.moveToElementText(n);}r.collapse(!!b);t.setRng(r);},getSel:function(){var t=this,w=this.win;return w.getSelection?w.getSelection():w.document.selection;},getRng:function(){var t=this,s=t.getSel(),r;try{if(s)r=s.rangeCount>0?s.getRangeAt(0):(s.createRange?s.createRange():t.win.document.createRange());}catch(ex){}if(!r)r=isIE?t.win.document.body.createTextRange():t.win.document.createRange();return r;},setRng:function(r){var s;if(!isIE){s=this.getSel();if(s){s.removeAllRanges();s.addRange(r);}}else{try{r.select();}catch(ex){}}},setNode:function(n){var t=this;t.setContent(t.dom.getOuterHTML(n));return n;},getNode:function(){var t=this,r=t.getRng(),s=t.getSel(),e;if(!isIE){if(!r)return t.dom.getRoot();e=r.commonAncestorContainer;if(!r.collapsed){if(tinymce.isWebKit&&s.anchorNode&&s.anchorNode.nodeType==1)return s.anchorNode.childNodes[s.anchorOffset];if(r.startContainer==r.endContainer){if(r.startOffset-r.endOffset<2){if(r.startContainer.hasChildNodes())e=r.startContainer.childNodes[r.startOffset];}}}return t.dom.getParent(e,function(n){return n.nodeType==1;});}return r.item?r.item(0):r.parentElement();},destroy:function(s){var t=this;t.win=null;if(!s)tinymce.removeUnload(t.destroy);}});})();(function(){tinymce.create('tinymce.dom.XMLWriter',{node:null,XMLWriter:function(s){function getXML(){var i=document.implementation;if(!i||!i.createDocument){try{return new ActiveXObject('MSXML2.DOMDocument');}catch(ex){}try{return new ActiveXObject('Microsoft.XmlDom');}catch(ex){}}else return i.createDocument('','',null);};this.doc=getXML();this.valid=tinymce.isOpera||tinymce.isWebKit;this.reset();},reset:function(){var t=this,d=t.doc;if(d.firstChild)d.removeChild(d.firstChild);t.node=d.appendChild(d.createElement("html"));},writeStartElement:function(n){var t=this;t.node=t.node.appendChild(t.doc.createElement(n));},writeAttribute:function(n,v){if(this.valid)v=v.replace(/>/g,'%MCGT%');this.node.setAttribute(n,v);},writeEndElement:function(){this.node=this.node.parentNode;},writeFullEndElement:function(){var t=this,n=t.node;n.appendChild(t.doc.createTextNode(""));t.node=n.parentNode;},writeText:function(v){if(this.valid)v=v.replace(/>/g,'%MCGT%');this.node.appendChild(this.doc.createTextNode(v));},writeCDATA:function(v){this.node.appendChild(this.doc.createCDATA(v));},writeComment:function(v){if(tinymce.isIE)v=v.replace(/^\-|\-$/g,' ');this.node.appendChild(this.doc.createComment(v.replace(/\-\-/g,' ')));},getContent:function(){var h;h=this.doc.xml||new XMLSerializer().serializeToString(this.doc);h=h.replace(/<\?[^?]+\?>|<html>|<\/html>|<html\/>|<!DOCTYPE[^>]+>/g,'');h=h.replace(/ ?\/>/g,' />');if(this.valid)h=h.replace(/\%MCGT%/g,'&gt;');return h;}});})();(function(){tinymce.create('tinymce.dom.StringWriter',{str:null,tags:null,count:0,settings:null,indent:null,StringWriter:function(s){this.settings=tinymce.extend({indent_char:' ',indentation:1},s);this.reset();},reset:function(){this.indent='';this.str="";this.tags=[];this.count=0;},writeStartElement:function(n){this._writeAttributesEnd();this.writeRaw('<'+n);this.tags.push(n);this.inAttr=true;this.count++;this.elementCount=this.count;},writeAttribute:function(n,v){var t=this;t.writeRaw(" "+t.encode(n)+'="'+t.encode(v)+'"');},writeEndElement:function(){var n;if(this.tags.length>0){n=this.tags.pop();if(this._writeAttributesEnd(1))this.writeRaw('</'+n+'>');if(this.settings.indentation>0)this.writeRaw('\n');}},writeFullEndElement:function(){if(this.tags.length>0){this._writeAttributesEnd();this.writeRaw('</'+this.tags.pop()+'>');if(this.settings.indentation>0)this.writeRaw('\n');}},writeText:function(v){this._writeAttributesEnd();this.writeRaw(this.encode(v));this.count++;},writeCDATA:function(v){this._writeAttributesEnd();this.writeRaw('<![CDATA['+v+']]>');this.count++;},writeComment:function(v){this._writeAttributesEnd();this.writeRaw('<!-- '+v+'-->');this.count++;},writeRaw:function(v){this.str+=v;},encode:function(s){return s.replace(/[<>&"]/g,function(v){switch(v){case'<':return'&lt;';case'>':return'&gt;';case'&':return'&amp;';case'"':return'&quot;';}return v;});},getContent:function(){return this.str;},_writeAttributesEnd:function(s){if(!this.inAttr)return;this.inAttr=false;if(s&&this.elementCount==this.count){this.writeRaw(' />');return false;}this.writeRaw('>');return true;}});})();(function(){var extend=tinymce.extend,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher,isIE=tinymce.isIE,isGecko=tinymce.isGecko;function getIEAtts(n){var o=[];if(n.nodeName=='OBJECT')return n.attributes;n.cloneNode(false).outerHTML.replace(/([a-z0-9\:\-_]+)=/gi,function(a,b){o.push({specified:1,nodeName:b});});return o;};function wildcardToRE(s){return s.replace(/([?+*])/g,'.$1');};tinymce.create('tinymce.dom.Serializer',{Serializer:function(s){var t=this;t.key=0;t.onPreProcess=new Dispatcher(t);t.onPostProcess=new Dispatcher(t);if(tinymce.relaxedDomain&&tinymce.isGecko){t.writer=new tinymce.dom.StringWriter();}else{try{t.writer=new tinymce.dom.XMLWriter();}catch(ex){t.writer=new tinymce.dom.StringWriter();}}t.settings=s=extend({dom:tinymce.DOM,valid_nodes:0,node_filter:0,attr_filter:0,invalid_attrs:/^(mce_|_moz_)/,closed:/(br|hr|input|meta|img|link|param)/,entity_encoding:'named',entities:'160,nbsp,161,iexcl,162,cent,163,pound,164,curren,165,yen,166,brvbar,167,sect,168,uml,169,copy,170,ordf,171,laquo,172,not,173,shy,174,reg,175,macr,176,deg,177,plusmn,178,sup2,179,sup3,180,acute,181,micro,182,para,183,middot,184,cedil,185,sup1,186,ordm,187,raquo,188,frac14,189,frac12,190,frac34,191,iquest,192,Agrave,193,Aacute,194,Acirc,195,Atilde,196,Auml,197,Aring,198,AElig,199,Ccedil,200,Egrave,201,Eacute,202,Ecirc,203,Euml,204,Igrave,205,Iacute,206,Icirc,207,Iuml,208,ETH,209,Ntilde,210,Ograve,211,Oacute,212,Ocirc,213,Otilde,214,Ouml,215,times,216,Oslash,217,Ugrave,218,Uacute,219,Ucirc,220,Uuml,221,Yacute,222,THORN,223,szlig,224,agrave,225,aacute,226,acirc,227,atilde,228,auml,229,aring,230,aelig,231,ccedil,232,egrave,233,eacute,234,ecirc,235,euml,236,igrave,237,iacute,238,icirc,239,iuml,240,eth,241,ntilde,242,ograve,243,oacute,244,ocirc,245,otilde,246,ouml,247,divide,248,oslash,249,ugrave,250,uacute,251,ucirc,252,uuml,253,yacute,254,thorn,255,yuml,402,fnof,913,Alpha,914,Beta,915,Gamma,916,Delta,917,Epsilon,918,Zeta,919,Eta,920,Theta,921,Iota,922,Kappa,923,Lambda,924,Mu,925,Nu,926,Xi,927,Omicron,928,Pi,929,Rho,931,Sigma,932,Tau,933,Upsilon,934,Phi,935,Chi,936,Psi,937,Omega,945,alpha,946,beta,947,gamma,948,delta,949,epsilon,950,zeta,951,eta,952,theta,953,iota,954,kappa,955,lambda,956,mu,957,nu,958,xi,959,omicron,960,pi,961,rho,962,sigmaf,963,sigma,964,tau,965,upsilon,966,phi,967,chi,968,psi,969,omega,977,thetasym,978,upsih,982,piv,8226,bull,8230,hellip,8242,prime,8243,Prime,8254,oline,8260,frasl,8472,weierp,8465,image,8476,real,8482,trade,8501,alefsym,8592,larr,8593,uarr,8594,rarr,8595,darr,8596,harr,8629,crarr,8656,lArr,8657,uArr,8658,rArr,8659,dArr,8660,hArr,8704,forall,8706,part,8707,exist,8709,empty,8711,nabla,8712,isin,8713,notin,8715,ni,8719,prod,8721,sum,8722,minus,8727,lowast,8730,radic,8733,prop,8734,infin,8736,ang,8743,and,8744,or,8745,cap,8746,cup,8747,int,8756,there4,8764,sim,8773,cong,8776,asymp,8800,ne,8801,equiv,8804,le,8805,ge,8834,sub,8835,sup,8836,nsub,8838,sube,8839,supe,8853,oplus,8855,otimes,8869,perp,8901,sdot,8968,lceil,8969,rceil,8970,lfloor,8971,rfloor,9001,lang,9002,rang,9674,loz,9824,spades,9827,clubs,9829,hearts,9830,diams,338,OElig,339,oelig,352,Scaron,353,scaron,376,Yuml,710,circ,732,tilde,8194,ensp,8195,emsp,8201,thinsp,8204,zwnj,8205,zwj,8206,lrm,8207,rlm,8211,ndash,8212,mdash,8216,lsquo,8217,rsquo,8218,sbquo,8220,ldquo,8221,rdquo,8222,bdquo,8224,dagger,8225,Dagger,8240,permil,8249,lsaquo,8250,rsaquo,8364,euro',bool_attrs:/(checked|disabled|readonly|selected|nowrap)/,valid_elements:'*[*]',extended_valid_elements:0,valid_child_elements:0,invalid_elements:0,fix_table_elements:0,fix_list_elements:true,fix_content_duplication:true,convert_fonts_to_spans:false,font_size_classes:0,font_size_style_values:0,apply_source_formatting:0,indent_mode:'simple',indent_char:'\t',indent_levels:1,remove_linebreaks:1,remove_redundant_brs:1,element_format:'xhtml'},s);t.dom=s.dom;if(s.remove_redundant_brs){t.onPostProcess.add(function(se,o){o.content=o.content.replace(/<br \/>(\s*<\/li>)/g,'$1');});}if(s.element_format=='html'){t.onPostProcess.add(function(se,o){o.content=o.content.replace(/<([^>]+) \/>/g,'<$1>');});}if(s.fix_list_elements){t.onPreProcess.add(function(se,o){var nl,x,a=['ol','ul'],i,n,p,r=/^(OL|UL)$/,np;function prevNode(e,n){var a=n.split(','),i;while((e=e.previousSibling)!=null){for(i=0;i<a.length;i++){if(e.nodeName==a[i])return e;}}return null;};for(x=0;x<a.length;x++){nl=t.dom.select(a[x],o.node);for(i=0;i<nl.length;i++){n=nl[i];p=n.parentNode;if(r.test(p.nodeName)){np=prevNode(n,'LI');if(!np){np=t.dom.create('li');np.innerHTML='&nbsp;';np.appendChild(n);p.insertBefore(np,p.firstChild);}else np.appendChild(n);}}}});}if(s.fix_table_elements){t.onPreProcess.add(function(se,o){each(t.dom.select('table',o.node),function(e){var pa=t.dom.getParent(e,'H1,H2,H3,H4,H5,H6,P'),pa2,n,tm,pl=[],i,ns;if(pa){pa2=pa.cloneNode(false);pl.push(e);for(n=e;n=n.parentNode;){pl.push(n);if(n==pa)break;}tm=pa2;for(i=pl.length-1;i>=0;i--){if(i==pl.length-1){while(ns=pl[i-1].nextSibling)tm.appendChild(ns.parentNode.removeChild(ns));}else{n=pl[i].cloneNode(false);if(i!=0){while(ns=pl[i-1].nextSibling)n.appendChild(ns.parentNode.removeChild(ns));}tm=tm.appendChild(n);}}e=t.dom.insertAfter(e.parentNode.removeChild(e),pa);t.dom.insertAfter(e,pa);t.dom.insertAfter(pa2,e);}});});}},setEntities:function(s){var t=this,a,i,l={},re='',v;if(t.entityLookup)return;a=s.split(',');for(i=0;i<a.length;i+=2){v=a[i];if(v==34||v==38||v==60||v==62)continue;l[String.fromCharCode(a[i])]=a[i+1];v=parseInt(a[i]).toString(16);re+='\\u'+'0000'.substring(v.length)+v;}if(!re){t.settings.entity_encoding='raw';return;}t.entitiesRE=new RegExp('['+re+']','g');t.entityLookup=l;},setValidChildRules:function(s){this.childRules=null;this.addValidChildRules(s);},addValidChildRules:function(s){var t=this,inst,intr,bloc;if(!s)return;inst='A|BR|SPAN|BDO|MAP|OBJECT|IMG|TT|I|B|BIG|SMALL|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|#text|#comment';intr='A|BR|SPAN|BDO|OBJECT|APPLET|IMG|MAP|IFRAME|TT|I|B|U|S|STRIKE|BIG|SMALL|FONT|BASEFONT|EM|STRONG|DFN|CODE|Q|SAMP|KBD|VAR|CITE|ABBR|ACRONYM|SUB|SUP|INPUT|SELECT|TEXTAREA|LABEL|BUTTON|#text|#comment';bloc='H[1-6]|P|DIV|ADDRESS|PRE|FORM|TABLE|LI|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|FORM|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP';each(s.split(','),function(s){var p=s.split(/\[|\]/),re;s='';each(p[1].split('|'),function(v){if(s)s+='|';switch(v){case'%itrans':v=intr;break;case'%itrans_na':v=intr.substring(2);break;case'%istrict':v=inst;break;case'%istrict_na':v=inst.substring(2);break;case'%btrans':v=bloc;break;case'%bstrict':v=bloc;break;}s+=v;});re=new RegExp('^('+s.toLowerCase()+')$','i');each(p[0].split('/'),function(s){t.childRules=t.childRules||{};t.childRules[s]=re;});});s='';each(t.childRules,function(v,k){if(s)s+='|';s+=k;});t.parentElementsRE=new RegExp('^('+s.toLowerCase()+')$','i');},setRules:function(s){var t=this;t._setup();t.rules={};t.wildRules=[];t.validElements={};return t.addRules(s);},addRules:function(s){var t=this,dr;if(!s)return;t._setup();each(s.split(','),function(s){var p=s.split(/\[|\]/),tn=p[0].split('/'),ra,at,wat,va=[];if(dr)at=tinymce.extend([],dr.attribs);if(p.length>1){each(p[1].split('|'),function(s){var ar={},i;at=at||[];s=s.replace(/::/g,'~');s=/^([!\-])?([\w*.?~_\-]+|)([=:<])?(.+)?$/.exec(s);s[2]=s[2].replace(/~/g,':');if(s[1]=='!'){ra=ra||[];ra.push(s[2]);}if(s[1]=='-'){for(i=0;i<at.length;i++){if(at[i].name==s[2]){at.splice(i,1);return;}}}switch(s[3]){case'=':ar.defaultVal=s[4]||'';break;case':':ar.forcedVal=s[4];break;case'<':ar.validVals=s[4].split('?');break;}if(/[*.?]/.test(s[2])){wat=wat||[];ar.nameRE=new RegExp('^'+wildcardToRE(s[2])+'$');wat.push(ar);}else{ar.name=s[2];at.push(ar);}va.push(s[2]);});}each(tn,function(s,i){var pr=s.charAt(0),x=1,ru={};if(dr){if(dr.noEmpty)ru.noEmpty=dr.noEmpty;if(dr.fullEnd)ru.fullEnd=dr.fullEnd;if(dr.padd)ru.padd=dr.padd;}switch(pr){case'-':ru.noEmpty=true;break;case'+':ru.fullEnd=true;break;case'#':ru.padd=true;break;default:x=0;}tn[i]=s=s.substring(x);t.validElements[s]=1;if(/[*.?]/.test(tn[0])){ru.nameRE=new RegExp('^'+wildcardToRE(tn[0])+'$');t.wildRules=t.wildRules||{};t.wildRules.push(ru);}else{ru.name=tn[0];if(tn[0]=='@')dr=ru;t.rules[s]=ru;}ru.attribs=at;if(ra)ru.requiredAttribs=ra;if(wat){s='';each(va,function(v){if(s)s+='|';s+='('+wildcardToRE(v)+')';});ru.validAttribsRE=new RegExp('^'+s.toLowerCase()+'$');ru.wildAttribs=wat;}});});s='';each(t.validElements,function(v,k){if(s)s+='|';if(k!='@')s+=k;});t.validElementsRE=new RegExp('^('+wildcardToRE(s.toLowerCase())+')$');},findRule:function(n){var t=this,rl=t.rules,i,r;t._setup();r=rl[n];if(r)return r;rl=t.wildRules;for(i=0;i<rl.length;i++){if(rl[i].nameRE.test(n))return rl[i];}return null;},findAttribRule:function(ru,n){var i,wa=ru.wildAttribs;for(i=0;i<wa.length;i++){if(wa[i].nameRE.test(n))return wa[i];}return null;},serialize:function(n,o){var h,t=this;t._setup();o=o||{};o.format=o.format||'html';t.processObj=o;n=n.cloneNode(true);t.key=''+(parseInt(t.key)+1);if(!o.no_events){o.node=n;t.onPreProcess.dispatch(t,o);}t.writer.reset();t._serializeNode(n,o.getInner);o.content=t.writer.getContent();if(!o.no_events)t.onPostProcess.dispatch(t,o);t._postProcess(o);o.node=null;return tinymce.trim(o.content);},_postProcess:function(o){var t=this,s=t.settings,h=o.content,sc=[],p;if(o.format=='html'){p=t._protect({content:h,patterns:[{pattern:/(<script[^>]*>)(.*?)(<\/script>)/g},{pattern:/(<style[^>]*>)(.*?)(<\/style>)/g},{pattern:/(<pre[^>]*>)(.*?)(<\/pre>)/g,encode:1},{pattern:/(<!--\[CDATA\[)(.*?)(\]\]-->)/g}]});h=p.content;if(s.entity_encoding!=='raw')h=t._encode(h);if(!o.set){h=h.replace(/<p>\s+<\/p>|<p([^>]+)>\s+<\/p>/g,s.entity_encoding=='numeric'?'<p$1>&#160;</p>':'<p$1>&nbsp;</p>');if(s.remove_linebreaks){h=h.replace(/\r?\n|\r/g,' ');h=h.replace(/(<[^>]+>)\s+/g,'$1 ');h=h.replace(/\s+(<\/[^>]+>)/g,' $1');h=h.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object) ([^>]+)>\s+/g,'<$1 $2>');h=h.replace(/<(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>\s+/g,'<$1>');h=h.replace(/\s+<\/(p|h[1-6]|blockquote|hr|div|table|tbody|tr|td|body|head|html|title|meta|style|pre|script|link|object)>/g,'</$1>');}if(s.apply_source_formatting&&s.indent_mode=='simple'){h=h.replace(/<(\/?)(ul|hr|table|meta|link|tbody|tr|object|body|head|html|map)(|[^>]+)>\s*/g,'\n<$1$2$3>\n');h=h.replace(/\s*<(p|h[1-6]|blockquote|div|title|style|pre|script|td|li|area)(|[^>]+)>/g,'\n<$1$2>');h=h.replace(/<\/(p|h[1-6]|blockquote|div|title|style|pre|script|td|li)>\s*/g,'</$1>\n');h=h.replace(/\n\n/g,'\n');}}h=t._unprotect(h,p);h=h.replace(/<!--\[CDATA\[([\s\S]+)\]\]-->/g,'<![CDATA[$1]]>');if(s.entity_encoding=='raw')h=h.replace(/<p>&nbsp;<\/p>|<p([^>]+)>&nbsp;<\/p>/g,'<p$1>\u00a0</p>');}o.content=h;},_serializeNode:function(n,inn){var t=this,s=t.settings,w=t.writer,hc,el,cn,i,l,a,at,no,v,nn,ru,ar,iv;if(!s.node_filter||s.node_filter(n)){switch(n.nodeType){case 1:if(n.hasAttribute?n.hasAttribute('mce_bogus'):n.getAttribute('mce_bogus'))return;iv=false;hc=n.hasChildNodes();nn=n.getAttribute('mce_name')||n.nodeName.toLowerCase();if(isIE){if(n.scopeName!=='HTML'&&n.scopeName!=='html')nn=n.scopeName+':'+nn;}if(nn.indexOf('mce:')===0)nn=nn.substring(4);if(!t.validElementsRE.test(nn)||(t.invalidElementsRE&&t.invalidElementsRE.test(nn))||inn){iv=true;break;}if(isIE){if(s.fix_content_duplication){if(n.mce_serialized==t.key)return;n.mce_serialized=t.key;}if(nn.charAt(0)=='/')nn=nn.substring(1);}else if(isGecko){if(n.nodeName==='BR'&&n.getAttribute('type')=='_moz')return;}if(t.childRules){if(t.parentElementsRE.test(t.elementName)){if(!t.childRules[t.elementName].test(nn)){iv=true;break;}}t.elementName=nn;}ru=t.findRule(nn);nn=ru.name||nn;if((!hc&&ru.noEmpty)||(isIE&&!nn)){iv=true;break;}if(ru.requiredAttribs){a=ru.requiredAttribs;for(i=a.length-1;i>=0;i--){if(this.dom.getAttrib(n,a[i])!=='')break;}if(i==-1){iv=true;break;}}w.writeStartElement(nn);if(ru.attribs){for(i=0,at=ru.attribs,l=at.length;i<l;i++){a=at[i];v=t._getAttrib(n,a);if(v!==null)w.writeAttribute(a.name,v);}}if(ru.validAttribsRE){at=isIE?getIEAtts(n):n.attributes;for(i=at.length-1;i>-1;i--){no=at[i];if(no.specified){a=no.nodeName.toLowerCase();if(s.invalid_attrs.test(a)||!ru.validAttribsRE.test(a))continue;ar=t.findAttribRule(ru,a);v=t._getAttrib(n,ar,a);if(v!==null)w.writeAttribute(a,v);}}}if(ru.padd){if(hc&&(cn=n.firstChild)&&cn.nodeType===1&&n.childNodes.length===1){if(cn.hasAttribute?cn.hasAttribute('mce_bogus'):cn.getAttribute('mce_bogus'))w.writeText('\u00a0');}else if(!hc)w.writeText('\u00a0');}break;case 3:if(t.childRules&&t.parentElementsRE.test(t.elementName)){if(!t.childRules[t.elementName].test(n.nodeName))return;}return w.writeText(n.nodeValue);case 4:return w.writeCDATA(n.nodeValue);case 8:return w.writeComment(n.nodeValue);}}else if(n.nodeType==1)hc=n.hasChildNodes();if(hc){cn=n.firstChild;while(cn){t._serializeNode(cn);t.elementName=nn;cn=cn.nextSibling;}}if(!iv){if(hc||!s.closed.test(nn))w.writeFullEndElement();else w.writeEndElement();}},_protect:function(o){var t=this;o.items=o.items||[];function enc(s){return s.replace(/[\r\n\\]/g,function(c){if(c==='\n')return'\\n';else if(c==='\\')return'\\\\';return'\\r';});};function dec(s){return s.replace(/\\[\\rn]/g,function(c){if(c==='\\n')return'\n';else if(c==='\\\\')return'\\';return'\r';});};each(o.patterns,function(p){o.content=dec(enc(o.content).replace(p.pattern,function(x,a,b,c){b=dec(b);if(p.encode)b=t._encode(b);o.items.push(b);return a+'<!--mce:'+(o.items.length-1)+'-->'+c;}));});return o;},_unprotect:function(h,o){h=h.replace(/\<!--mce:([0-9]+)--\>/g,function(a,b){return o.items[parseInt(b)];});o.items=[];return h;},_encode:function(h){var t=this,s=t.settings,l;if(s.entity_encoding!=='raw'){if(s.entity_encoding.indexOf('named')!=-1){t.setEntities(s.entities);l=t.entityLookup;h=h.replace(t.entitiesRE,function(a){var v;if(v=l[a])a='&'+v+';';return a;});}if(s.entity_encoding.indexOf('numeric')!=-1){h=h.replace(/[\u007E-\uFFFF]/g,function(a){return'&#'+a.charCodeAt(0)+';';});}}return h;},_setup:function(){var t=this,s=this.settings;if(t.done)return;t.done=1;t.setRules(s.valid_elements);t.addRules(s.extended_valid_elements);t.addValidChildRules(s.valid_child_elements);if(s.invalid_elements)t.invalidElementsRE=new RegExp('^('+wildcardToRE(s.invalid_elements.replace(/,/g,'|').toLowerCase())+')$');if(s.attrib_value_filter)t.attribValueFilter=s.attribValueFilter;},_getAttrib:function(n,a,na){var i,v;na=na||a.name;if(a.forcedVal&&(v=a.forcedVal)){if(v==='{$uid}')return this.dom.uniqueId();return v;}v=this.dom.getAttrib(n,na);if(this.settings.bool_attrs.test(na)&&v){v=(''+v).toLowerCase();if(v==='false'||v==='0')return null;v=na;}switch(na){case'rowspan':case'colspan':if(v=='1')v='';break;}if(this.attribValueFilter)v=this.attribValueFilter(na,v,n);if(a.validVals){for(i=a.validVals.length-1;i>=0;i--){if(v==a.validVals[i])break;}if(i==-1)return null;}if(v===''&&typeof(a.defaultVal)!='undefined'){v=a.defaultVal;if(v==='{$uid}')return this.dom.uniqueId();return v;}else{if(na=='class'&&this.processObj.get)v=v.replace(/\s?mceItem\w+\s?/g,'');}if(v==='')return null;return v;}});})();(function(){var each=tinymce.each,Event=tinymce.dom.Event;tinymce.create('tinymce.dom.ScriptLoader',{ScriptLoader:function(s){this.settings=s||{};this.queue=[];this.lookup={};},isDone:function(u){return this.lookup[u]?this.lookup[u].state==2:0;},markDone:function(u){this.lookup[u]={state:2,url:u};},add:function(u,cb,s,pr){var t=this,lo=t.lookup,o;if(o=lo[u]){if(cb&&o.state==2)cb.call(s||this);return o;}o={state:0,url:u,func:cb,scope:s||this};if(pr)t.queue.unshift(o);else t.queue.push(o);lo[u]=o;return o;},load:function(u,cb,s){var t=this,o;if(o=t.lookup[u]){if(cb&&o.state==2)cb.call(s||t);return o;}function loadScript(u){if(Event.domLoaded||t.settings.strict_mode){tinymce.util.XHR.send({url:tinymce._addVer(u),error:t.settings.error,async:false,success:function(co){t.eval(co);}});}else document.write('<script type="text/javascript" src="'+tinymce._addVer(u)+'"></script>');};if(!tinymce.is(u,'string')){each(u,function(u){loadScript(u);});if(cb)cb.call(s||t);}else{loadScript(u);if(cb)cb.call(s||t);}},loadQueue:function(cb,s){var t=this;if(!t.queueLoading){t.queueLoading=1;t.queueCallbacks=[];t.loadScripts(t.queue,function(){t.queueLoading=0;if(cb)cb.call(s||t);each(t.queueCallbacks,function(o){o.func.call(o.scope);});});}else if(cb)t.queueCallbacks.push({func:cb,scope:s||t});},eval:function(co){var w=window;if(!w.execScript){try{eval.call(w,co);}catch(ex){eval(co,w);}}else w.execScript(co);},loadScripts:function(sc,cb,s){var t=this,lo=t.lookup;function done(o){o.state=2;if(o.func)o.func.call(o.scope||t);};function allDone(){var l;l=sc.length;each(sc,function(o){o=lo[o.url];if(o.state===2){done(o);l--;}else load(o);});if(l===0&&cb){cb.call(s||t);cb=0;}};function load(o){if(o.state>0)return;o.state=1;tinymce.dom.ScriptLoader.loadScript(o.url,function(){done(o);allDone();});};each(sc,function(o){var u=o.url;if(!lo[u]){lo[u]=o;t.queue.push(o);}else o=lo[u];if(o.state>0)return;if(!Event.domLoaded&&!t.settings.strict_mode){var ix,ol='';if(cb||o.func){o.state=1;ix=tinymce.dom.ScriptLoader._addOnLoad(function(){done(o);allDone();});if(tinymce.isIE)ol=' onreadystatechange="';else ol=' onload="';ol+='tinymce.dom.ScriptLoader._onLoad(this,\''+u+'\','+ix+');"';}document.write('<script type="text/javascript" src="'+tinymce._addVer(u)+'"'+ol+'></script>');if(!o.func)done(o);}else load(o);});allDone();},'static':{_addOnLoad:function(f){var t=this;t._funcs=t._funcs||[];t._funcs.push(f);return t._funcs.length-1;},_onLoad:function(e,u,ix){if(!tinymce.isIE||e.readyState=='complete')this._funcs[ix].call(this);},loadScript:function(u,cb){var id=tinymce.DOM.uniqueId(),e;function done(){Event.clear(id);tinymce.DOM.remove(id);if(cb){cb.call(document,u);cb=0;}};if(tinymce.isIE){tinymce.util.XHR.send({url:tinymce._addVer(u),async:false,success:function(co){window.execScript(co);done();}});}else{e=tinymce.DOM.create('script',{id:id,type:'text/javascript',src:tinymce._addVer(u)});Event.add(e,'load',done);(document.getElementsByTagName('head')[0]||document.body).appendChild(e);}}}});tinymce.ScriptLoader=new tinymce.dom.ScriptLoader();})();(function(){var DOM=tinymce.DOM,is=tinymce.is;tinymce.create('tinymce.ui.Control',{Control:function(id,s){this.id=id;this.settings=s=s||{};this.rendered=false;this.onRender=new tinymce.util.Dispatcher(this);this.classPrefix='';this.scope=s.scope||this;this.disabled=0;this.active=0;},setDisabled:function(s){var e;if(s!=this.disabled){e=DOM.get(this.id);if(e&&this.settings.unavailable_prefix){if(s){this.prevTitle=e.title;e.title=this.settings.unavailable_prefix+": "+e.title;}else e.title=this.prevTitle;}this.setState('Disabled',s);this.setState('Enabled',!s);this.disabled=s;}},isDisabled:function(){return this.disabled;},setActive:function(s){if(s!=this.active){this.setState('Active',s);this.active=s;}},isActive:function(){return this.active;},setState:function(c,s){var n=DOM.get(this.id);c=this.classPrefix+c;if(s)DOM.addClass(n,c);else DOM.removeClass(n,c);},isRendered:function(){return this.rendered;},renderHTML:function(){},renderTo:function(n){DOM.setHTML(n,this.renderHTML());},postRender:function(){var t=this,b;if(is(t.disabled)){b=t.disabled;t.disabled=-1;t.setDisabled(b);}if(is(t.active)){b=t.active;t.active=-1;t.setActive(b);}},remove:function(){DOM.remove(this.id);this.destroy();},destroy:function(){tinymce.dom.Event.clear(this.id);}});})();tinymce.create('tinymce.ui.Container:tinymce.ui.Control',{Container:function(id,s){this.parent(id,s);this.controls=[];this.lookup={};},add:function(c){this.lookup[c.id]=c;this.controls.push(c);return c;},get:function(n){return this.lookup[n];}});tinymce.create('tinymce.ui.Separator:tinymce.ui.Control',{Separator:function(id,s){this.parent(id,s);this.classPrefix='mceSeparator';},renderHTML:function(){return tinymce.DOM.createHTML('span',{'class':this.classPrefix});}});(function(){var is=tinymce.is,DOM=tinymce.DOM,each=tinymce.each,walk=tinymce.walk;tinymce.create('tinymce.ui.MenuItem:tinymce.ui.Control',{MenuItem:function(id,s){this.parent(id,s);this.classPrefix='mceMenuItem';},setSelected:function(s){this.setState('Selected',s);this.selected=s;},isSelected:function(){return this.selected;},postRender:function(){var t=this;t.parent();if(is(t.selected))t.setSelected(t.selected);}});})();(function(){var is=tinymce.is,DOM=tinymce.DOM,each=tinymce.each,walk=tinymce.walk;tinymce.create('tinymce.ui.Menu:tinymce.ui.MenuItem',{Menu:function(id,s){var t=this;t.parent(id,s);t.items={};t.collapsed=false;t.menuCount=0;t.onAddItem=new tinymce.util.Dispatcher(this);},expand:function(d){var t=this;if(d){walk(t,function(o){if(o.expand)o.expand();},'items',t);}t.collapsed=false;},collapse:function(d){var t=this;if(d){walk(t,function(o){if(o.collapse)o.collapse();},'items',t);}t.collapsed=true;},isCollapsed:function(){return this.collapsed;},add:function(o){if(!o.settings)o=new tinymce.ui.MenuItem(o.id||DOM.uniqueId(),o);this.onAddItem.dispatch(this,o);return this.items[o.id]=o;},addSeparator:function(){return this.add({separator:true});},addMenu:function(o){if(!o.collapse)o=this.createMenu(o);this.menuCount++;return this.add(o);},hasMenus:function(){return this.menuCount!==0;},remove:function(o){delete this.items[o.id];},removeAll:function(){var t=this;walk(t,function(o){if(o.removeAll)o.removeAll();else o.remove();o.destroy();},'items',t);t.items={};},createMenu:function(o){var m=new tinymce.ui.Menu(o.id||DOM.uniqueId(),o);m.onAddItem.add(this.onAddItem.dispatch,this.onAddItem);return m;}});})();(function(){var is=tinymce.is,DOM=tinymce.DOM,each=tinymce.each,Event=tinymce.dom.Event,Element=tinymce.dom.Element;tinymce.create('tinymce.ui.DropMenu:tinymce.ui.Menu',{DropMenu:function(id,s){s=s||{};s.container=s.container||DOM.doc.body;s.offset_x=s.offset_x||0;s.offset_y=s.offset_y||0;s.vp_offset_x=s.vp_offset_x||0;s.vp_offset_y=s.vp_offset_y||0;if(is(s.icons)&&!s.icons)s['class']+=' mceNoIcons';this.parent(id,s);this.onShowMenu=new tinymce.util.Dispatcher(this);this.onHideMenu=new tinymce.util.Dispatcher(this);this.classPrefix='mceMenu';},createMenu:function(s){var t=this,cs=t.settings,m;s.container=s.container||cs.container;s.parent=t;s.constrain=s.constrain||cs.constrain;s['class']=s['class']||cs['class'];s.vp_offset_x=s.vp_offset_x||cs.vp_offset_x;s.vp_offset_y=s.vp_offset_y||cs.vp_offset_y;m=new tinymce.ui.DropMenu(s.id||DOM.uniqueId(),s);m.onAddItem.add(t.onAddItem.dispatch,t.onAddItem);return m;},update:function(){var t=this,s=t.settings,tb=DOM.get('menu_'+t.id+'_tbl'),co=DOM.get('menu_'+t.id+'_co'),tw,th;tw=s.max_width?Math.min(tb.clientWidth,s.max_width):tb.clientWidth;th=s.max_height?Math.min(tb.clientHeight,s.max_height):tb.clientHeight;if(!DOM.boxModel)t.element.setStyles({width:tw+2,height:th+2});else t.element.setStyles({width:tw,height:th});if(s.max_width)DOM.setStyle(co,'width',tw);if(s.max_height){DOM.setStyle(co,'height',th);if(tb.clientHeight<s.max_height)DOM.setStyle(co,'overflow','hidden');}},showMenu:function(x,y,px){var t=this,s=t.settings,co,vp=DOM.getViewPort(),w,h,mx,my,ot=2,dm,tb,cp=t.classPrefix;t.collapse(1);if(t.isMenuVisible)return;if(!t.rendered){co=DOM.add(t.settings.container,t.renderNode());each(t.items,function(o){o.postRender();});t.element=new Element('menu_'+t.id,{blocker:1,container:s.container});}else co=DOM.get('menu_'+t.id);if(!tinymce.isOpera)DOM.setStyles(co,{left:-0xFFFF,top:-0xFFFF});DOM.show(co);t.update();x+=s.offset_x||0;y+=s.offset_y||0;vp.w-=4;vp.h-=4;if(s.constrain){w=co.clientWidth-ot;h=co.clientHeight-ot;mx=vp.x+vp.w;my=vp.y+vp.h;if((x+s.vp_offset_x+w)>mx)x=px?px-w:Math.max(0,(mx-s.vp_offset_x)-w);if((y+s.vp_offset_y+h)>my)y=Math.max(0,(my-s.vp_offset_y)-h);}DOM.setStyles(co,{left:x,top:y});t.element.update();t.isMenuVisible=1;t.mouseClickFunc=Event.add(co,'click',function(e){var m;e=e.target;if(e&&(e=DOM.getParent(e,'TR'))&&!DOM.hasClass(e,cp+'ItemSub')){m=t.items[e.id];if(m.isDisabled())return;dm=t;while(dm){if(dm.hideMenu)dm.hideMenu();dm=dm.settings.parent;}if(m.settings.onclick)m.settings.onclick(e);return Event.cancel(e);}});if(t.hasMenus()){t.mouseOverFunc=Event.add(co,'mouseover',function(e){var m,r,mi;e=e.target;if(e&&(e=DOM.getParent(e,'TR'))){m=t.items[e.id];if(t.lastMenu)t.lastMenu.collapse(1);if(m.isDisabled())return;if(e&&DOM.hasClass(e,cp+'ItemSub')){r=DOM.getRect(e);m.showMenu((r.x+r.w-ot),r.y-ot,r.x);t.lastMenu=m;DOM.addClass(DOM.get(m.id).firstChild,cp+'ItemActive');}}});}t.onShowMenu.dispatch(t);if(s.keyboard_focus){Event.add(co,'keydown',t._keyHandler,t);DOM.select('a','menu_'+t.id)[0].focus();t._focusIdx=0;}},hideMenu:function(c){var t=this,co=DOM.get('menu_'+t.id),e;if(!t.isMenuVisible)return;Event.remove(co,'mouseover',t.mouseOverFunc);Event.remove(co,'click',t.mouseClickFunc);Event.remove(co,'keydown',t._keyHandler);DOM.hide(co);t.isMenuVisible=0;if(!c)t.collapse(1);if(t.element)t.element.hide();if(e=DOM.get(t.id))DOM.removeClass(e.firstChild,t.classPrefix+'ItemActive');t.onHideMenu.dispatch(t);},add:function(o){var t=this,co;o=t.parent(o);if(t.isRendered&&(co=DOM.get('menu_'+t.id)))t._add(DOM.select('tbody',co)[0],o);return o;},collapse:function(d){this.parent(d);this.hideMenu(1);},remove:function(o){DOM.remove(o.id);this.destroy();return this.parent(o);},destroy:function(){var t=this,co=DOM.get('menu_'+t.id);Event.remove(co,'mouseover',t.mouseOverFunc);Event.remove(co,'click',t.mouseClickFunc);if(t.element)t.element.remove();DOM.remove(co);},renderNode:function(){var t=this,s=t.settings,n,tb,co,w;w=DOM.create('div',{id:'menu_'+t.id,'class':s['class'],'style':'position:absolute;left:0;top:0;z-index:200000'});co=DOM.add(w,'div',{id:'menu_'+t.id+'_co','class':t.classPrefix+(s['class']?' '+s['class']:'')});t.element=new Element('menu_'+t.id,{blocker:1,container:s.container});if(s.menu_line)DOM.add(co,'span',{'class':t.classPrefix+'Line'});n=DOM.add(co,'table',{id:'menu_'+t.id+'_tbl',border:0,cellPadding:0,cellSpacing:0});tb=DOM.add(n,'tbody');each(t.items,function(o){t._add(tb,o);});t.rendered=true;return w;},_keyHandler:function(e){var t=this,kc=e.keyCode;function focus(d){var i=t._focusIdx+d,e=DOM.select('a','menu_'+t.id)[i];if(e){t._focusIdx=i;e.focus();}};switch(kc){case 38:focus(-1);return;case 40:focus(1);return;case 13:return;case 27:return this.hideMenu();}},_add:function(tb,o){var n,s=o.settings,a,ro,it,cp=this.classPrefix,ic;if(s.separator){ro=DOM.add(tb,'tr',{id:o.id,'class':cp+'ItemSeparator'});DOM.add(ro,'td',{'class':cp+'ItemSeparator'});if(n=ro.previousSibling)DOM.addClass(n,'mceLast');return;}n=ro=DOM.add(tb,'tr',{id:o.id,'class':cp+'Item '+cp+'ItemEnabled'});n=it=DOM.add(n,'td');n=a=DOM.add(n,'a',{href:'javascript:;',onclick:"return false;",onmousedown:'return false;'});DOM.addClass(it,s['class']);ic=DOM.add(n,'span',{'class':'mceIcon'+(s.icon?' mce_'+s.icon:'')});if(s.icon_src)DOM.add(ic,'img',{src:s.icon_src});n=DOM.add(n,s.element||'span',{'class':'mceText',title:o.settings.title},o.settings.title);if(o.settings.style)DOM.setAttrib(n,'style',o.settings.style);if(tb.childNodes.length==1)DOM.addClass(ro,'mceFirst');if((n=ro.previousSibling)&&DOM.hasClass(n,cp+'ItemSeparator'))DOM.addClass(ro,'mceFirst');if(o.collapse)DOM.addClass(ro,cp+'ItemSub');if(n=ro.previousSibling)DOM.removeClass(n,'mceLast');DOM.addClass(ro,'mceLast');}});})();(function(){var DOM=tinymce.DOM;tinymce.create('tinymce.ui.Button:tinymce.ui.Control',{Button:function(id,s){this.parent(id,s);this.classPrefix='mceButton';},renderHTML:function(){var cp=this.classPrefix,s=this.settings,h,l;l=DOM.encode(s.label||'');h='<a id="'+this.id+'" href="javascript:;" class="'+cp+' '+cp+'Enabled '+s['class']+(l?' '+cp+'Labeled':'')+'" onmousedown="return false;" onclick="return false;" title="'+DOM.encode(s.title)+'">';if(s.image)h+='<img class="mceIcon" src="'+s.image+'" />'+l+'</a>';else h+='<span class="mceIcon '+s['class']+'"></span>'+(l?'<span class="'+cp+'Label">'+l+'</span>':'')+'</a>';return h;},postRender:function(){var t=this,s=t.settings;tinymce.dom.Event.add(t.id,'click',function(e){if(!t.isDisabled())return s.onclick.call(s.scope,e);});}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher;tinymce.create('tinymce.ui.ListBox:tinymce.ui.Control',{ListBox:function(id,s){var t=this;t.parent(id,s);t.items=[];t.onChange=new Dispatcher(t);t.onPostRender=new Dispatcher(t);t.onAdd=new Dispatcher(t);t.onRenderMenu=new tinymce.util.Dispatcher(this);t.classPrefix='mceListBox';},select:function(va){var t=this,fv,f;if(va==undefined)return t.selectByIndex(-1);if(va&&va.call)f=va;else{f=function(v){return v==va;};}if(va!=t.selectedValue){each(t.items,function(o,i){if(f(o.value)){fv=1;t.selectByIndex(i);return false;}});if(!fv)t.selectByIndex(-1);}},selectByIndex:function(idx){var t=this,e,o;if(idx!=t.selectedIndex){e=DOM.get(t.id+'_text');o=t.items[idx];if(o){t.selectedValue=o.value;t.selectedIndex=idx;DOM.setHTML(e,DOM.encode(o.title));DOM.removeClass(e,'mceTitle');}else{DOM.setHTML(e,DOM.encode(t.settings.title));DOM.addClass(e,'mceTitle');t.selectedValue=t.selectedIndex=null;}e=0;}else t.selectedValue=t.selectedIndex=null;},add:function(n,v,o){var t=this;o=o||{};o=tinymce.extend(o,{title:n,value:v});t.items.push(o);t.onAdd.dispatch(t,o);},getLength:function(){return this.items.length;},renderHTML:function(){var h='',t=this,s=t.settings,cp=t.classPrefix;h='<table id="'+t.id+'" cellpadding="0" cellspacing="0" class="'+cp+' '+cp+'Enabled'+(s['class']?(' '+s['class']):'')+'"><tbody><tr>';h+='<td>'+DOM.createHTML('a',{id:t.id+'_text',href:'javascript:;','class':'mceText',onclick:"return false;",onmousedown:'return false;'},DOM.encode(t.settings.title))+'</td>';h+='<td>'+DOM.createHTML('a',{id:t.id+'_open',tabindex:-1,href:'javascript:;','class':'mceOpen',onclick:"return false;",onmousedown:'return false;'},'<span></span>')+'</td>';h+='</tr></tbody></table>';return h;},showMenu:function(){var t=this,p1,p2,e=DOM.get(this.id),m;if(t.isDisabled()||t.items.length==0)return;if(t.menu&&t.menu.isMenuVisible)return t.hideMenu();if(!t.isMenuRendered){t.renderMenu();t.isMenuRendered=true;}p1=DOM.getPos(this.settings.menu_container);p2=DOM.getPos(e);m=t.menu;m.settings.offset_x=p2.x;m.settings.offset_y=p2.y;m.settings.keyboard_focus=!tinymce.isOpera;if(t.oldID)m.items[t.oldID].setSelected(0);each(t.items,function(o){if(o.value===t.selectedValue){m.items[o.id].setSelected(1);t.oldID=o.id;}});m.showMenu(0,e.clientHeight);Event.add(DOM.doc,'mousedown',t.hideMenu,t);DOM.addClass(t.id,t.classPrefix+'Selected');},hideMenu:function(e){var t=this;if(e&&e.type=="mousedown"&&(e.target.id==t.id+'_text'||e.target.id==t.id+'_open'))return;if(!e||!DOM.getParent(e.target,function(n){return DOM.hasClass(n,'mceMenu');})){DOM.removeClass(t.id,t.classPrefix+'Selected');Event.remove(DOM.doc,'mousedown',t.hideMenu,t);if(t.menu)t.menu.hideMenu();}},renderMenu:function(){var t=this,m;m=t.settings.control_manager.createDropMenu(t.id+'_menu',{menu_line:1,'class':t.classPrefix+'Menu mceNoIcons',max_width:150,max_height:150});m.onHideMenu.add(t.hideMenu,t);m.add({title:t.settings.title,'class':'mceMenuItemTitle',onclick:function(){if(t.settings.onselect('')!==false)t.select('');}});each(t.items,function(o){o.id=DOM.uniqueId();o.onclick=function(){if(t.settings.onselect(o.value)!==false)t.select(o.value);};m.add(o);});t.onRenderMenu.dispatch(t,m);t.menu=m;},postRender:function(){var t=this,cp=t.classPrefix;Event.add(t.id,'click',t.showMenu,t);Event.add(t.id+'_text','focus',function(e){if(!t._focused){t.keyDownHandler=Event.add(t.id+'_text','keydown',function(e){var idx=-1,v,kc=e.keyCode;each(t.items,function(v,i){if(t.selectedValue==v.value)idx=i;});if(kc==38)v=t.items[idx-1];else if(kc==40)v=t.items[idx+1];else if(kc==13){v=t.selectedValue;t.selectedValue=null;t.settings.onselect(v);return Event.cancel(e);}if(v){t.hideMenu();t.select(v.value);}});}t._focused=1;});Event.add(t.id+'_text','blur',function(){Event.remove(t.id+'_text','keydown',t.keyDownHandler);t._focused=0;});if(tinymce.isIE6||!DOM.boxModel){Event.add(t.id,'mouseover',function(){if(!DOM.hasClass(t.id,cp+'Disabled'))DOM.addClass(t.id,cp+'Hover');});Event.add(t.id,'mouseout',function(){if(!DOM.hasClass(t.id,cp+'Disabled'))DOM.removeClass(t.id,cp+'Hover');});}t.onPostRender.dispatch(t,DOM.get(t.id));},destroy:function(){this.parent();Event.clear(this.id+'_text');}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,Dispatcher=tinymce.util.Dispatcher;tinymce.create('tinymce.ui.NativeListBox:tinymce.ui.ListBox',{NativeListBox:function(id,s){this.parent(id,s);this.classPrefix='mceNativeListBox';},setDisabled:function(s){DOM.get(this.id).disabled=s;},isDisabled:function(){return DOM.get(this.id).disabled;},select:function(va){var t=this,fv,f;if(va==undefined)return t.selectByIndex(-1);if(va&&va.call)f=va;else{f=function(v){return v==va;};}if(va!=t.selectedValue){each(t.items,function(o,i){if(f(o.value)){fv=1;t.selectByIndex(i);return false;}});if(!fv)t.selectByIndex(-1);}},selectByIndex:function(idx){DOM.get(this.id).selectedIndex=idx+1;this.selectedValue=this.items[idx]?this.items[idx].value:null;},add:function(n,v,a){var o,t=this;a=a||{};a.value=v;if(t.isRendered())DOM.add(DOM.get(this.id),'option',a,n);o={title:n,value:v,attribs:a};t.items.push(o);t.onAdd.dispatch(t,o);},getLength:function(){return DOM.get(this.id).options.length-1;},renderHTML:function(){var h,t=this;h=DOM.createHTML('option',{value:''},'-- '+t.settings.title+' --');each(t.items,function(it){h+=DOM.createHTML('option',{value:it.value},it.title);});h=DOM.createHTML('select',{id:t.id,'class':'mceNativeListBox'},h);return h;},postRender:function(){var t=this,ch;t.rendered=true;function onChange(e){var v=t.items[e.target.selectedIndex-1];if(v&&(v=v.value)){t.onChange.dispatch(t,v);if(t.settings.onselect)t.settings.onselect(v);}};Event.add(t.id,'change',onChange);Event.add(t.id,'keydown',function(e){var bf;Event.remove(t.id,'change',ch);bf=Event.add(t.id,'blur',function(){Event.add(t.id,'change',onChange);Event.remove(t.id,'blur',bf);});if(e.keyCode==13||e.keyCode==32){onChange(e);return Event.cancel(e);}});t.onPostRender.dispatch(t,DOM.get(t.id));}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each;tinymce.create('tinymce.ui.MenuButton:tinymce.ui.Button',{MenuButton:function(id,s){this.parent(id,s);this.onRenderMenu=new tinymce.util.Dispatcher(this);s.menu_container=s.menu_container||DOM.doc.body;},showMenu:function(){var t=this,p1,p2,e=DOM.get(t.id),m;if(t.isDisabled())return;if(!t.isMenuRendered){t.renderMenu();t.isMenuRendered=true;}if(t.isMenuVisible)return t.hideMenu();p1=DOM.getPos(t.settings.menu_container);p2=DOM.getPos(e);m=t.menu;m.settings.offset_x=p2.x;m.settings.offset_y=p2.y;m.settings.vp_offset_x=p2.x;m.settings.vp_offset_y=p2.y;m.settings.keyboard_focus=t._focused;m.showMenu(0,e.clientHeight);Event.add(DOM.doc,'mousedown',t.hideMenu,t);t.setState('Selected',1);t.isMenuVisible=1;},renderMenu:function(){var t=this,m;m=t.settings.control_manager.createDropMenu(t.id+'_menu',{menu_line:1,'class':this.classPrefix+'Menu',icons:t.settings.icons});m.onHideMenu.add(t.hideMenu,t);t.onRenderMenu.dispatch(t,m);t.menu=m;},hideMenu:function(e){var t=this;if(e&&e.type=="mousedown"&&DOM.getParent(e.target,function(e){return e.id===t.id||e.id===t.id+'_open';}))return;if(!e||!DOM.getParent(e.target,function(n){return DOM.hasClass(n,'mceMenu');})){t.setState('Selected',0);Event.remove(DOM.doc,'mousedown',t.hideMenu,t);if(t.menu)t.menu.hideMenu();}t.isMenuVisible=0;},postRender:function(){var t=this,s=t.settings;Event.add(t.id,'click',function(){if(!t.isDisabled()){if(s.onclick)s.onclick(t.value);t.showMenu();}});}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each;tinymce.create('tinymce.ui.SplitButton:tinymce.ui.MenuButton',{SplitButton:function(id,s){this.parent(id,s);this.classPrefix='mceSplitButton';},renderHTML:function(){var h,t=this,s=t.settings,h1;h='<tbody><tr>';if(s.image)h1=DOM.createHTML('img ',{src:s.image,'class':'mceAction '+s['class']});else h1=DOM.createHTML('span',{'class':'mceAction '+s['class']},'');h+='<td>'+DOM.createHTML('a',{id:t.id+'_action',href:'javascript:;','class':'mceAction '+s['class'],onclick:"return false;",onmousedown:'return false;',title:s.title},h1)+'</td>';h1=DOM.createHTML('span',{'class':'mceOpen '+s['class']});h+='<td>'+DOM.createHTML('a',{id:t.id+'_open',href:'javascript:;','class':'mceOpen '+s['class'],onclick:"return false;",onmousedown:'return false;',title:s.title},h1)+'</td>';h+='</tr></tbody>';return DOM.createHTML('table',{id:t.id,'class':'mceSplitButton mceSplitButtonEnabled '+s['class'],cellpadding:'0',cellspacing:'0',onmousedown:'return false;',title:s.title},h);},postRender:function(){var t=this,s=t.settings;if(s.onclick){Event.add(t.id+'_action','click',function(){if(!t.isDisabled())s.onclick(t.value);});}Event.add(t.id+'_open','click',t.showMenu,t);Event.add(t.id+'_open','focus',function(){t._focused=1;});Event.add(t.id+'_open','blur',function(){t._focused=0;});if(tinymce.isIE6||!DOM.boxModel){Event.add(t.id,'mouseover',function(){if(!DOM.hasClass(t.id,'mceSplitButtonDisabled'))DOM.addClass(t.id,'mceSplitButtonHover');});Event.add(t.id,'mouseout',function(){if(!DOM.hasClass(t.id,'mceSplitButtonDisabled'))DOM.removeClass(t.id,'mceSplitButtonHover');});}},destroy:function(){this.parent();Event.clear(this.id+'_action');Event.clear(this.id+'_open');}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,is=tinymce.is,each=tinymce.each;tinymce.create('tinymce.ui.ColorSplitButton:tinymce.ui.SplitButton',{ColorSplitButton:function(id,s){var t=this;t.parent(id,s);t.settings=s=tinymce.extend({colors:'000000,993300,333300,003300,003366,000080,333399,333333,800000,FF6600,808000,008000,008080,0000FF,666699,808080,FF0000,FF9900,99CC00,339966,33CCCC,3366FF,800080,999999,FF00FF,FFCC00,FFFF00,00FF00,00FFFF,00CCFF,993366,C0C0C0,FF99CC,FFCC99,FFFF99,CCFFCC,CCFFFF,99CCFF,CC99FF,FFFFFF',grid_width:8,default_color:'#888888'},t.settings);t.onShowMenu=new tinymce.util.Dispatcher(t);t.onHideMenu=new tinymce.util.Dispatcher(t);t.value=s.default_color;},showMenu:function(){var t=this,r,p,e,p2;if(t.isDisabled())return;if(!t.isMenuRendered){t.renderMenu();t.isMenuRendered=true;}if(t.isMenuVisible)return t.hideMenu();e=DOM.get(t.id);DOM.show(t.id+'_menu');DOM.addClass(e,'mceSplitButtonSelected');p2=DOM.getPos(e);DOM.setStyles(t.id+'_menu',{left:p2.x,top:p2.y+e.clientHeight,zIndex:200000});e=0;Event.add(DOM.doc,'mousedown',t.hideMenu,t);if(t._focused){t._keyHandler=Event.add(t.id+'_menu','keydown',function(e){if(e.keyCode==27)t.hideMenu();});DOM.select('a',t.id+'_menu')[0].focus();}t.onShowMenu.dispatch(t);t.isMenuVisible=1;},hideMenu:function(e){var t=this;if(e&&e.type=="mousedown"&&DOM.getParent(e.target,function(e){return e.id===t.id+'_open';}))return;if(!e||!DOM.getParent(e.target,function(n){return DOM.hasClass(n,'mceSplitButtonMenu');})){DOM.removeClass(t.id,'mceSplitButtonSelected');Event.remove(DOM.doc,'mousedown',t.hideMenu,t);Event.remove(t.id+'_menu','keydown',t._keyHandler);DOM.hide(t.id+'_menu');}t.onHideMenu.dispatch(t);t.isMenuVisible=0;},renderMenu:function(){var t=this,m,i=0,s=t.settings,n,tb,tr,w;w=DOM.add(s.menu_container,'div',{id:t.id+'_menu','class':s['menu_class']+' '+s['class'],style:'position:absolute;left:0;top:-1000px;'});m=DOM.add(w,'div',{'class':s['class']+' mceSplitButtonMenu'});DOM.add(m,'span',{'class':'mceMenuLine'});n=DOM.add(m,'table',{'class':'mceColorSplitMenu'});tb=DOM.add(n,'tbody');i=0;each(is(s.colors,'array')?s.colors:s.colors.split(','),function(c){c=c.replace(/^#/,'');if(!i--){tr=DOM.add(tb,'tr');i=s.grid_width-1;}n=DOM.add(tr,'td');n=DOM.add(n,'a',{href:'javascript:;',style:{backgroundColor:'#'+c},mce_color:'#'+c});});if(s.more_colors_func){n=DOM.add(tb,'tr');n=DOM.add(n,'td',{colspan:s.grid_width,'class':'mceMoreColors'});n=DOM.add(n,'a',{id:t.id+'_more',href:'javascript:;',onclick:'return false;','class':'mceMoreColors'},s.more_colors_title);Event.add(n,'click',function(e){s.more_colors_func.call(s.more_colors_scope||this);return Event.cancel(e);});}DOM.addClass(m,'mceColorSplitMenu');Event.add(t.id+'_menu','click',function(e){var c;e=e.target;if(e.nodeName=='A'&&(c=e.getAttribute('mce_color')))t.setColor(c);return Event.cancel(e);});return w;},setColor:function(c){var t=this;DOM.setStyle(t.id+'_preview','backgroundColor',c);t.value=c;t.hideMenu();t.settings.onselect(c);},postRender:function(){var t=this,id=t.id;t.parent();DOM.add(id+'_action','div',{id:id+'_preview','class':'mceColorPreview'});DOM.setStyle(t.id+'_preview','backgroundColor',t.value);},destroy:function(){this.parent();Event.clear(this.id+'_menu');Event.clear(this.id+'_more');DOM.remove(this.id+'_menu');}});})();tinymce.create('tinymce.ui.Toolbar:tinymce.ui.Container',{renderHTML:function(){var t=this,h='',c,co,dom=tinymce.DOM,s=t.settings,i,pr,nx,cl;cl=t.controls;for(i=0;i<cl.length;i++){co=cl[i];pr=cl[i-1];nx=cl[i+1];if(i===0){c='mceToolbarStart';if(co.Button)c+=' mceToolbarStartButton';else if(co.SplitButton)c+=' mceToolbarStartSplitButton';else if(co.ListBox)c+=' mceToolbarStartListBox';h+=dom.createHTML('td',{'class':c},dom.createHTML('span',null,'<!-- IE -->'));}if(pr&&co.ListBox){if(pr.Button||pr.SplitButton)h+=dom.createHTML('td',{'class':'mceToolbarEnd'},dom.createHTML('span',null,'<!-- IE -->'));}if(dom.stdMode)h+='<td style="position: relative">'+co.renderHTML()+'</td>';else h+='<td>'+co.renderHTML()+'</td>';if(nx&&co.ListBox){if(nx.Button||nx.SplitButton)h+=dom.createHTML('td',{'class':'mceToolbarStart'},dom.createHTML('span',null,'<!-- IE -->'));}}c='mceToolbarEnd';if(co.Button)c+=' mceToolbarEndButton';else if(co.SplitButton)c+=' mceToolbarEndSplitButton';else if(co.ListBox)c+=' mceToolbarEndListBox';h+=dom.createHTML('td',{'class':c},dom.createHTML('span',null,'<!-- IE -->'));return dom.createHTML('table',{id:t.id,'class':'mceToolbar'+(s['class']?' '+s['class']:''),cellpadding:'0',cellspacing:'0',align:t.settings.align||''},'<tbody><tr>'+h+'</tr></tbody>');}});(function(){var Dispatcher=tinymce.util.Dispatcher,each=tinymce.each;tinymce.create('tinymce.AddOnManager',{items:[],urls:{},lookup:{},onAdd:new Dispatcher(this),get:function(n){return this.lookup[n];},requireLangPack:function(n){var u,s=tinymce.EditorManager.settings;if(s&&s.language){u=this.urls[n]+'/langs/'+s.language+'.js';if(!tinymce.dom.Event.domLoaded&&!s.strict_mode)tinymce.ScriptLoader.load(u);else tinymce.ScriptLoader.add(u);}},add:function(id,o){this.items.push(o);this.lookup[id]=o;this.onAdd.dispatch(this,id,o);return o;},load:function(n,u,cb,s){var t=this;if(t.urls[n])return;if(u.indexOf('/')!=0&&u.indexOf('://')==-1)u=tinymce.baseURL+'/'+u;t.urls[n]=u.substring(0,u.lastIndexOf('/'));tinymce.ScriptLoader.add(u,cb,s);}});tinymce.PluginManager=new tinymce.AddOnManager();tinymce.ThemeManager=new tinymce.AddOnManager();}());(function(){var each=tinymce.each,extend=tinymce.extend,DOM=tinymce.DOM,Event=tinymce.dom.Event,ThemeManager=tinymce.ThemeManager,PluginManager=tinymce.PluginManager,explode=tinymce.explode;tinymce.create('static tinymce.EditorManager',{editors:{},i18n:{},activeEditor:null,preInit:function(){var t=this,lo=window.location;tinymce.documentBaseURL=lo.href.replace(/[\?#].*$/,'').replace(/[\/\\][^\/]+$/,'');if(!/[\/\\]$/.test(tinymce.documentBaseURL))tinymce.documentBaseURL+='/';tinymce.baseURL=new tinymce.util.URI(tinymce.documentBaseURL).toAbsolute(tinymce.baseURL);tinymce.EditorManager.baseURI=new tinymce.util.URI(tinymce.baseURL);if(document.domain&&lo.hostname!=document.domain)tinymce.relaxedDomain=document.domain;if(!tinymce.relaxedDomain&&tinymce.EditorManager.baseURI.host!=lo.hostname&&lo.hostname)document.domain=tinymce.relaxedDomain=lo.hostname.replace(/.*\.(.+\..+)$/,'$1');t.onBeforeUnload=new tinymce.util.Dispatcher(t);Event.add(window,'beforeunload',function(e){t.onBeforeUnload.dispatch(t,e);});},init:function(s){var t=this,pl,sl=tinymce.ScriptLoader,c,e,el=[],ed;function execCallback(se,n,s){var f=se[n];if(!f)return;if(tinymce.is(f,'string')){s=f.replace(/\.\w+$/,'');s=s?tinymce.resolve(s):0;f=tinymce.resolve(f);}return f.apply(s||this,Array.prototype.slice.call(arguments,2));};s=extend({theme:"simple",language:"en",strict_loading_mode:document.contentType=='application/xhtml+xml'},s);t.settings=s;if(!Event.domLoaded&&!s.strict_loading_mode){if(s.language)sl.add(tinymce.baseURL+'/langs/'+s.language+'.js');if(s.theme&&s.theme.charAt(0)!='-'&&!ThemeManager.urls[s.theme])ThemeManager.load(s.theme,'themes/'+s.theme+'/editor_template'+tinymce.suffix+'.js');if(s.plugins){pl=explode(s.plugins);if(tinymce.inArray(pl,'compat2x')!=-1)PluginManager.load('compat2x','plugins/compat2x/editor_plugin'+tinymce.suffix+'.js');each(pl,function(v){if(v&&v.charAt(0)!='-'&&!PluginManager.urls[v]){if(!tinymce.isWebKit&&v=='safari')return;PluginManager.load(v,'plugins/'+v+'/editor_plugin'+tinymce.suffix+'.js');}});}sl.loadQueue();}Event.add(document,'init',function(){var l,co;execCallback(s,'onpageload');if(s.browsers){l=false;each(explode(s.browsers),function(v){switch(v){case'ie':case'msie':if(tinymce.isIE)l=true;break;case'gecko':if(tinymce.isGecko)l=true;break;case'safari':case'webkit':if(tinymce.isWebKit)l=true;break;case'opera':if(tinymce.isOpera)l=true;break;}});if(!l)return;}switch(s.mode){case"exact":l=s.elements||'';if(l.length>0){each(explode(l),function(v){if(DOM.get(v)){ed=new tinymce.Editor(v,s);el.push(ed);ed.render(1);}else{c=0;each(document.forms,function(f){each(f.elements,function(e){if(e.name===v){v='mce_editor_'+c;DOM.setAttrib(e,'id',v);ed=new tinymce.Editor(v,s);el.push(ed);ed.render(1);}});});}});}break;case"textareas":case"specific_textareas":function hasClass(n,c){return c.constructor===RegExp?c.test(n.className):DOM.hasClass(n,c);};each(DOM.select('textarea'),function(v){if(s.editor_deselector&&hasClass(v,s.editor_deselector))return;if(!s.editor_selector||hasClass(v,s.editor_selector)){e=DOM.get(v.name);if(!v.id&&!e)v.id=v.name;if(!v.id||t.get(v.id))v.id=DOM.uniqueId();ed=new tinymce.Editor(v.id,s);el.push(ed);ed.render(1);}});break;}if(s.oninit){l=co=0;each(el,function(ed){co++;if(!ed.initialized){ed.onInit.add(function(){l++;if(l==co)execCallback(s,'oninit');});}else l++;if(l==co)execCallback(s,'oninit');});}});},get:function(id){return this.editors[id];},getInstanceById:function(id){return this.get(id);},add:function(e){this.editors[e.id]=e;this._setActive(e);return e;},remove:function(e){var t=this;if(!t.editors[e.id])return null;delete t.editors[e.id];if(t.activeEditor==e){each(t.editors,function(e){t._setActive(e);return false;});}e.destroy();return e;},execCommand:function(c,u,v){var t=this,ed=t.get(v),w;switch(c){case"mceFocus":ed.focus();return true;case"mceAddEditor":case"mceAddControl":if(!t.get(v))new tinymce.Editor(v,t.settings).render();return true;case"mceAddFrameControl":w=v.window;w.tinyMCE=tinyMCE;w.tinymce=tinymce;tinymce.DOM.doc=w.document;tinymce.DOM.win=w;ed=new tinymce.Editor(v.element_id,v);ed.render();if(tinymce.isIE){function clr(){ed.destroy();w.detachEvent('onunload',clr);w=w.tinyMCE=w.tinymce=null;};w.attachEvent('onunload',clr);}v.page_window=null;return true;case"mceRemoveEditor":case"mceRemoveControl":if(ed)ed.remove();return true;case'mceToggleEditor':if(!ed){t.execCommand('mceAddControl',0,v);return true;}if(ed.isHidden())ed.show();else ed.hide();return true;}if(t.activeEditor)return t.activeEditor.execCommand(c,u,v);return false;},execInstanceCommand:function(id,c,u,v){var ed=this.get(id);if(ed)return ed.execCommand(c,u,v);return false;},triggerSave:function(){each(this.editors,function(e){e.save();});},addI18n:function(p,o){var lo,i18n=this.i18n;if(!tinymce.is(p,'string')){each(p,function(o,lc){each(o,function(o,g){each(o,function(o,k){if(g==='common')i18n[lc+'.'+k]=o;else i18n[lc+'.'+g+'.'+k]=o;});});});}else{each(o,function(o,k){i18n[p+'.'+k]=o;});}},_setActive:function(e){this.selectedInstance=this.activeEditor=e;}});tinymce.EditorManager.preInit();})();var tinyMCE=window.tinyMCE=tinymce.EditorManager;(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,extend=tinymce.extend,Dispatcher=tinymce.util.Dispatcher;var each=tinymce.each,isGecko=tinymce.isGecko,isIE=tinymce.isIE,isWebKit=tinymce.isWebKit;var is=tinymce.is,ThemeManager=tinymce.ThemeManager,PluginManager=tinymce.PluginManager,EditorManager=tinymce.EditorManager;var inArray=tinymce.inArray,grep=tinymce.grep,explode=tinymce.explode;tinymce.create('tinymce.Editor',{Editor:function(id,s){var t=this;t.id=t.editorId=id;t.execCommands={};t.queryStateCommands={};t.queryValueCommands={};t.plugins={};each(['onPreInit','onBeforeRenderUI','onPostRender','onInit','onRemove','onActivate','onDeactivate','onClick','onEvent','onMouseUp','onMouseDown','onDblClick','onKeyDown','onKeyUp','onKeyPress','onContextMenu','onSubmit','onReset','onPaste','onPreProcess','onPostProcess','onBeforeSetContent','onBeforeGetContent','onSetContent','onGetContent','onLoadContent','onSaveContent','onNodeChange','onChange','onBeforeExecCommand','onExecCommand','onUndo','onRedo','onVisualAid','onSetProgressState'],function(e){t[e]=new Dispatcher(t);});t.settings=s=extend({id:id,language:'en',docs_language:'en',theme:'simple',skin:'default',delta_width:0,delta_height:0,popup_css:'',plugins:'',document_base_url:tinymce.documentBaseURL,add_form_submit_trigger:1,submit_patch:1,add_unload_trigger:1,convert_urls:1,relative_urls:1,remove_script_host:1,table_inline_editing:0,object_resizing:1,cleanup:1,accessibility_focus:1,custom_shortcuts:1,custom_undo_redo_keyboard_shortcuts:1,custom_undo_redo_restore_selection:1,custom_undo_redo:1,doctype:'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',visual_table_class:'mceItemTable',visual:1,inline_styles:true,convert_fonts_to_spans:true,font_size_style_values:'xx-small,x-small,small,medium,large,x-large,xx-large',apply_source_formatting:1,directionality:'ltr',forced_root_block:'p',valid_elements:'@[id|class|style|title|dir<ltr?rtl|lang|xml::lang|onclick|ondblclick|onmousedown|onmouseup|onmouseover|onmousemove|onmouseout|onkeypress|onkeydown|onkeyup],a[rel|rev|charset|hreflang|tabindex|accesskey|type|name|href|target|title|class|onfocus|onblur],strong/b,em/i,strike,u,#p[align],-ol[type|compact],-ul[type|compact],-li,br,img[longdesc|usemap|src|border|alt=|title|hspace|vspace|width|height|align],-sub,-sup,-blockquote[cite],-table[border=0|cellspacing|cellpadding|width|frame|rules|height|align|summary|bgcolor|background|bordercolor],-tr[rowspan|width|height|align|valign|bgcolor|background|bordercolor],tbody,thead,tfoot,#td[colspan|rowspan|width|height|align|valign|bgcolor|background|bordercolor|scope],#th[colspan|rowspan|width|height|align|valign|scope],caption,-div,-span,-code,-pre,address,-h1,-h2,-h3,-h4,-h5,-h6,hr[size|noshade],-font[face|size|color],dd,dl,dt,cite,abbr,acronym,del[datetime|cite],ins[datetime|cite],object[classid|width|height|codebase|*],param[name|value],embed[type|width|height|src|*],script[src|type],map[name],area[shape|coords|href|alt|target],bdo,button,col[align|char|charoff|span|valign|width],colgroup[align|char|charoff|span|valign|width],dfn,fieldset,form[action|accept|accept-charset|enctype|method],input[accept|alt|checked|disabled|maxlength|name|readonly|size|src|type|value|tabindex|accesskey],kbd,label[for],legend,noscript,optgroup[label|disabled],option[disabled|label|selected|value],q[cite],samp,select[disabled|multiple|name|size],small,textarea[cols|rows|disabled|name|readonly],tt,var,big',hidden_input:1,padd_empty_editor:1,render_ui:1,init_theme:1,force_p_newlines:1,indentation:'30px',keep_styles:1},s);t.documentBaseURI=new tinymce.util.URI(s.document_base_url||tinymce.documentBaseURL,{base_uri:tinyMCE.baseURI});t.baseURI=EditorManager.baseURI;t.execCallback('setup',t);},render:function(nst){var t=this,s=t.settings,id=t.id,sl=tinymce.ScriptLoader;if(!Event.domLoaded){Event.add(document,'init',function(){t.render();});return;}if(!nst){s.strict_loading_mode=1;tinyMCE.settings=s;}if(!t.getElement())return;if(s.strict_loading_mode){sl.settings.strict_mode=s.strict_loading_mode;tinymce.DOM.settings.strict=1;}if(!/TEXTAREA|INPUT/i.test(t.getElement().nodeName)&&s.hidden_input&&DOM.getParent(id,'form'))DOM.insertAfter(DOM.create('input',{type:'hidden',name:id}),id);t.windowManager=new tinymce.WindowManager(t);if(s.encoding=='xml'){t.onGetContent.add(function(ed,o){if(o.save)o.content=DOM.encode(o.content);});}if(s.add_form_submit_trigger){t.onSubmit.addToTop(function(){if(t.initialized){t.save();t.isNotDirty=1;}});}if(s.add_unload_trigger&&!s.ask){t._beforeUnload=tinyMCE.onBeforeUnload.add(function(){if(t.initialized&&!t.destroyed&&!t.isHidden())t.save({format:'raw',no_events:true});});}tinymce.addUnload(t.destroy,t);if(s.submit_patch){t.onBeforeRenderUI.add(function(){var n=t.getElement().form;if(!n)return;if(n._mceOldSubmit)return;if(!n.submit.nodeType&&!n.submit.length){t.formElement=n;n._mceOldSubmit=n.submit;n.submit=function(){EditorManager.triggerSave();t.isNotDirty=1;return this._mceOldSubmit(this);};}n=null;});}function loadScripts(){if(s.language)sl.add(tinymce.baseURL+'/langs/'+s.language+'.js');if(s.theme.charAt(0)!='-'&&!ThemeManager.urls[s.theme])ThemeManager.load(s.theme,'themes/'+s.theme+'/editor_template'+tinymce.suffix+'.js');each(explode(s.plugins),function(p){if(p&&p.charAt(0)!='-'&&!PluginManager.urls[p]){if(!isWebKit&&p=='safari')return;PluginManager.load(p,'plugins/'+p+'/editor_plugin'+tinymce.suffix+'.js');}});sl.loadQueue(function(){if(s.ask){function ask(){window.setTimeout(function(){Event.remove(t.id,'focus',ask);t.windowManager.confirm(t.getLang('edit_confirm'),function(s){if(s)t.init();});},0);};Event.add(t.id,'focus',ask);return;}if(!t.removed)t.init();});};if(s.plugins.indexOf('compat2x')!=-1){PluginManager.load('compat2x','plugins/compat2x/editor_plugin'+tinymce.suffix+'.js');sl.loadQueue(loadScripts);}else loadScripts();},init:function(){var n,t=this,s=t.settings,w,h,e=t.getElement(),o,ti,u,bi,bc,re;EditorManager.add(t);s.theme=s.theme.replace(/-/,'');o=ThemeManager.get(s.theme);t.theme=new o();if(t.theme.init&&s.init_theme)t.theme.init(t,ThemeManager.urls[s.theme]||tinymce.documentBaseURL.replace(/\/$/,''));each(explode(s.plugins.replace(/\-/g,'')),function(p){var c=PluginManager.get(p),u=PluginManager.urls[p]||tinymce.documentBaseURL.replace(/\/$/,''),po;if(c){po=new c(t,u);t.plugins[p]=po;if(po.init)po.init(t,u);}});if(s.popup_css!==false){if(s.popup_css)s.popup_css=t.documentBaseURI.toAbsolute(s.popup_css);else s.popup_css=t.baseURI.toAbsolute("themes/"+s.theme+"/skins/"+s.skin+"/dialog.css");}if(s.popup_css_add)s.popup_css+=','+t.documentBaseURI.toAbsolute(s.popup_css_add);t.controlManager=new tinymce.ControlManager(t);t.undoManager=new tinymce.UndoManager(t);t.undoManager.onAdd.add(function(um,l){if(!l.initial)return t.onChange.dispatch(t,l,um);});t.undoManager.onUndo.add(function(um,l){return t.onUndo.dispatch(t,l,um);});t.undoManager.onRedo.add(function(um,l){return t.onRedo.dispatch(t,l,um);});if(s.custom_undo_redo){t.onExecCommand.add(function(ed,cmd,ui,val,a){if(cmd!='Undo'&&cmd!='Redo'&&cmd!='mceRepaint'&&(!a||!a.skip_undo))t.undoManager.add();});}t.onExecCommand.add(function(ed,c){if(!/^(FontName|FontSize)$/.test(c))t.nodeChanged();});if(isGecko){function repaint(a,o){if(!o||!o.initial)t.execCommand('mceRepaint');};t.onUndo.add(repaint);t.onRedo.add(repaint);t.onSetContent.add(repaint);}t.onBeforeRenderUI.dispatch(t,t.controlManager);if(s.render_ui){w=s.width||e.style.width||e.offsetWidth;h=s.height||e.style.height||e.offsetHeight;t.orgDisplay=e.style.display;re=/^[0-9\.]+(|px)$/i;if(re.test(''+w))w=Math.max(parseInt(w)+(o.deltaWidth||0),100);if(re.test(''+h))h=Math.max(parseInt(h)+(o.deltaHeight||0),100);o=t.theme.renderUI({targetNode:e,width:w,height:h,deltaWidth:s.delta_width,deltaHeight:s.delta_height});t.editorContainer=o.editorContainer;}DOM.setStyles(o.sizeContainer||o.editorContainer,{width:w,height:h});h=(o.iframeHeight||h)+(typeof(h)=='number'?(o.deltaHeight||0):'');if(h<100)h=100;t.iframeHTML=s.doctype+'<html><head xmlns="http://www.w3.org/1999/xhtml"><base href="'+t.documentBaseURI.getURI()+'" />';t.iframeHTML+='<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />';if(tinymce.relaxedDomain)t.iframeHTML+='<script type="text/javascript">document.domain = "'+tinymce.relaxedDomain+'";</script>';bi=s.body_id||'tinymce';if(bi.indexOf('=')!=-1){bi=t.getParam('body_id','','hash');bi=bi[t.id]||bi;}bc=s.body_class||'';if(bc.indexOf('=')!=-1){bc=t.getParam('body_class','','hash');bc=bc[t.id]||'';}t.iframeHTML+='</head><body id="'+bi+'" class="mceContentBody '+bc+'"></body></html>';if(tinymce.relaxedDomain){if(isIE||(tinymce.isOpera&&parseFloat(opera.version())>=9.5))u='javascript:(function(){document.open();document.domain="'+document.domain+'";var ed = window.parent.tinyMCE.get("'+t.id+'");document.write(ed.iframeHTML);document.close();ed.setupIframe();})()';else if(tinymce.isOpera)u='javascript:(function(){document.open();document.domain="'+document.domain+'";document.close();ed.setupIframe();})()';}n=DOM.add(o.iframeContainer,'iframe',{id:t.id+"_ifr",src:u||'javascript:""',frameBorder:'0',style:{width:'100%',height:h}});t.contentAreaContainer=o.iframeContainer;DOM.get(o.editorContainer).style.display=t.orgDisplay;DOM.get(t.id).style.display='none';if(tinymce.isOldWebKit){Event.add(n,'load',t.setupIframe,t);n.src=tinymce.baseURL+'/plugins/safari/blank.htm';}else{if(!isIE||!tinymce.relaxedDomain)t.setupIframe();e=n=o=null;}},setupIframe:function(){var t=this,s=t.settings,e=DOM.get(t.id),d=t.getDoc(),h,b;if(!isIE||!tinymce.relaxedDomain){d.open();d.write(t.iframeHTML);d.close();}if(!isIE){try{if(!s.readonly)d.designMode='On';}catch(ex){}}if(isIE){b=t.getBody();DOM.hide(b);if(!s.readonly)b.contentEditable=true;DOM.show(b);}t.dom=new tinymce.DOM.DOMUtils(t.getDoc(),{keep_values:true,url_converter:t.convertURL,url_converter_scope:t,hex_colors:s.force_hex_style_colors,class_filter:s.class_filter,update_styles:1,fix_ie_paragraphs:1});t.serializer=new tinymce.dom.Serializer({entity_encoding:s.entity_encoding,entities:s.entities,valid_elements:s.verify_html===false?'*[*]':s.valid_elements,extended_valid_elements:s.extended_valid_elements,valid_child_elements:s.valid_child_elements,invalid_elements:s.invalid_elements,fix_table_elements:s.fix_table_elements,fix_list_elements:s.fix_list_elements,fix_content_duplication:s.fix_content_duplication,convert_fonts_to_spans:s.convert_fonts_to_spans,font_size_classes:s.font_size_classes,font_size_style_values:s.font_size_style_values,apply_source_formatting:s.apply_source_formatting,remove_linebreaks:s.remove_linebreaks,element_format:s.element_format,dom:t.dom});t.selection=new tinymce.dom.Selection(t.dom,t.getWin(),t.serializer);t.forceBlocks=new tinymce.ForceBlocks(t,{forced_root_block:s.forced_root_block});t.editorCommands=new tinymce.EditorCommands(t);t.serializer.onPreProcess.add(function(se,o){return t.onPreProcess.dispatch(t,o,se);});t.serializer.onPostProcess.add(function(se,o){return t.onPostProcess.dispatch(t,o,se);});t.onPreInit.dispatch(t);if(!s.gecko_spellcheck)t.getBody().spellcheck=0;if(!s.readonly)t._addEvents();t.controlManager.onPostRender.dispatch(t,t.controlManager);t.onPostRender.dispatch(t);if(s.directionality)t.getBody().dir=s.directionality;if(s.nowrap)t.getBody().style.whiteSpace="nowrap";if(s.auto_resize)t.onNodeChange.add(t.resizeToContent,t);if(s.custom_elements){function handleCustom(ed,o){each(explode(s.custom_elements),function(v){var n;if(v.indexOf('~')===0){v=v.substring(1);n='span';}else n='div';o.content=o.content.replace(new RegExp('<('+v+')([^>]*)>','g'),'<'+n+' mce_name="$1"$2>');o.content=o.content.replace(new RegExp('</('+v+')>','g'),'</'+n+'>');});};t.onBeforeSetContent.add(handleCustom);t.onPostProcess.add(function(ed,o){if(o.set)handleCustom(ed,o)});}if(s.handle_node_change_callback){t.onNodeChange.add(function(ed,cm,n){t.execCallback('handle_node_change_callback',t.id,n,-1,-1,true,t.selection.isCollapsed());});}if(s.save_callback){t.onSaveContent.add(function(ed,o){var h=t.execCallback('save_callback',t.id,o.content,t.getBody());if(h)o.content=h;});}if(s.onchange_callback){t.onChange.add(function(ed,l){t.execCallback('onchange_callback',t,l);});}if(s.convert_newlines_to_brs){t.onBeforeSetContent.add(function(ed,o){if(o.initial)o.content=o.content.replace(/\r?\n/g,'<br />');});}if(s.fix_nesting&&isIE){t.onBeforeSetContent.add(function(ed,o){o.content=t._fixNesting(o.content);});}if(s.preformatted){t.onPostProcess.add(function(ed,o){o.content=o.content.replace(/^\s*<pre.*?>/,'');o.content=o.content.replace(/<\/pre>\s*$/,'');if(o.set)o.content='<pre class="mceItemHidden">'+o.content+'</pre>';});}if(s.verify_css_classes){t.serializer.attribValueFilter=function(n,v){var s,cl;if(n=='class'){if(!t.classesRE){cl=t.dom.getClasses();if(cl.length>0){s='';each(cl,function(o){s+=(s?'|':'')+o['class'];});t.classesRE=new RegExp('('+s+')','gi');}}return!t.classesRE||/(\bmceItem\w+\b|\bmceTemp\w+\b)/g.test(v)||t.classesRE.test(v)?v:'';}return v;};}if(s.convert_fonts_to_spans)t._convertFonts();if(s.inline_styles)t._convertInlineElements();if(s.cleanup_callback){t.onBeforeSetContent.add(function(ed,o){o.content=t.execCallback('cleanup_callback','insert_to_editor',o.content,o);});t.onPreProcess.add(function(ed,o){if(o.set)t.execCallback('cleanup_callback','insert_to_editor_dom',o.node,o);if(o.get)t.execCallback('cleanup_callback','get_from_editor_dom',o.node,o);});t.onPostProcess.add(function(ed,o){if(o.set)o.content=t.execCallback('cleanup_callback','insert_to_editor',o.content,o);if(o.get)o.content=t.execCallback('cleanup_callback','get_from_editor',o.content,o);});}if(s.save_callback){t.onGetContent.add(function(ed,o){if(o.save)o.content=t.execCallback('save_callback',t.id,o.content,t.getBody());});}if(s.handle_event_callback){t.onEvent.add(function(ed,e,o){if(t.execCallback('handle_event_callback',e,ed,o)===false)Event.cancel(e);});}t.onSetContent.add(function(){t.addVisual(t.getBody());});if(s.padd_empty_editor){t.onPostProcess.add(function(ed,o){o.content=o.content.replace(/^(<p[^>]*>(&nbsp;|&#160;|\s|\u00a0|)<\/p>[\r\n]*|<br \/>[\r\n]*)$/,'');});}if(isGecko&&!s.readonly){try{d.designMode='Off';d.designMode='On';}catch(ex){}}setTimeout(function(){if(t.removed)return;t.load({initial:true,format:(s.cleanup_on_startup?'html':'raw')});t.startContent=t.getContent({format:'raw'});t.undoManager.add({initial:true});t.initialized=true;t.onInit.dispatch(t);t.execCallback('setupcontent_callback',t.id,t.getBody(),t.getDoc());t.execCallback('init_instance_callback',t);t.focus(true);t.nodeChanged({initial:1});if(s.content_css){tinymce.each(explode(s.content_css),function(u){t.dom.loadCSS(t.documentBaseURI.toAbsolute(u));});}if(s.auto_focus){setTimeout(function(){var ed=EditorManager.get(s.auto_focus);ed.selection.select(ed.getBody(),1);ed.selection.collapse(1);ed.getWin().focus();},100);}},1);e=null;},focus:function(sf){var oed,t=this,ce=t.settings.content_editable;if(!sf){if(!ce&&(!isIE||t.selection.getNode().ownerDocument!=t.getDoc()))t.getWin().focus();}if(EditorManager.activeEditor!=t){if((oed=EditorManager.activeEditor)!=null)oed.onDeactivate.dispatch(oed,t);t.onActivate.dispatch(t,oed);}EditorManager._setActive(t);},execCallback:function(n){var t=this,f=t.settings[n],s;if(!f)return;if(t.callbackLookup&&(s=t.callbackLookup[n])){f=s.func;s=s.scope;}if(is(f,'string')){s=f.replace(/\.\w+$/,'');s=s?tinymce.resolve(s):0;f=tinymce.resolve(f);t.callbackLookup=t.callbackLookup||{};t.callbackLookup[n]={func:f,scope:s};}return f.apply(s||t,Array.prototype.slice.call(arguments,1));},translate:function(s){var c=this.settings.language||'en',i18n=EditorManager.i18n;if(!s)return'';return i18n[c+'.'+s]||s.replace(/{\#([^}]+)\}/g,function(a,b){return i18n[c+'.'+b]||'{#'+b+'}';});},getLang:function(n,dv){return EditorManager.i18n[(this.settings.language||'en')+'.'+n]||(is(dv)?dv:'{#'+n+'}');},getParam:function(n,dv,ty){var tr=tinymce.trim,v=is(this.settings[n])?this.settings[n]:dv,o;if(ty==='hash'){o={};if(is(v,'string')){each(v.indexOf('=')>0?v.split(/[;,](?![^=;,]*(?:[;,]|$))/):v.split(','),function(v){v=v.split('=');if(v.length>1)o[tr(v[0])]=tr(v[1]);else o[tr(v[0])]=tr(v);});}else o=v;return o;}return v;},nodeChanged:function(o){var t=this,s=t.selection,n=s.getNode()||t.getBody();if(t.initialized){t.onNodeChange.dispatch(t,o?o.controlManager||t.controlManager:t.controlManager,isIE&&n.ownerDocument!=t.getDoc()?t.getBody():n,s.isCollapsed(),o);}},addButton:function(n,s){var t=this;t.buttons=t.buttons||{};t.buttons[n]=s;},addCommand:function(n,f,s){this.execCommands[n]={func:f,scope:s||this};},addQueryStateHandler:function(n,f,s){this.queryStateCommands[n]={func:f,scope:s||this};},addQueryValueHandler:function(n,f,s){this.queryValueCommands[n]={func:f,scope:s||this};},addShortcut:function(pa,desc,cmd_func,sc){var t=this,c;if(!t.settings.custom_shortcuts)return false;t.shortcuts=t.shortcuts||{};if(is(cmd_func,'string')){c=cmd_func;cmd_func=function(){t.execCommand(c,false,null);};}if(is(cmd_func,'object')){c=cmd_func;cmd_func=function(){t.execCommand(c[0],c[1],c[2]);};}each(explode(pa),function(pa){var o={func:cmd_func,scope:sc||this,desc:desc,alt:false,ctrl:false,shift:false};each(explode(pa,'+'),function(v){switch(v){case'alt':case'ctrl':case'shift':o[v]=true;break;default:o.charCode=v.charCodeAt(0);o.keyCode=v.toUpperCase().charCodeAt(0);}});t.shortcuts[(o.ctrl?'ctrl':'')+','+(o.alt?'alt':'')+','+(o.shift?'shift':'')+','+o.keyCode]=o;});return true;},execCommand:function(cmd,ui,val,a){var t=this,s=0,o,st;if(!/^(mceAddUndoLevel|mceEndUndoLevel|mceBeginUndoLevel|mceRepaint|SelectAll)$/.test(cmd)&&(!a||!a.skip_focus))t.focus();o={};t.onBeforeExecCommand.dispatch(t,cmd,ui,val,o);if(o.terminate)return false;if(t.execCallback('execcommand_callback',t.id,t.selection.getNode(),cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}if(o=t.execCommands[cmd]){st=o.func.call(o.scope,ui,val);if(st!==true){t.onExecCommand.dispatch(t,cmd,ui,val,a);return st;}}each(t.plugins,function(p){if(p.execCommand&&p.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);s=1;return false;}});if(s)return true;if(t.theme.execCommand&&t.theme.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}if(t.editorCommands.execCommand(cmd,ui,val)){t.onExecCommand.dispatch(t,cmd,ui,val,a);return true;}t.getDoc().execCommand(cmd,ui,val);t.onExecCommand.dispatch(t,cmd,ui,val,a);},queryCommandState:function(c){var t=this,o,s;if(t._isHidden())return;if(o=t.queryStateCommands[c]){s=o.func.call(o.scope);if(s!==true)return s;}o=t.editorCommands.queryCommandState(c);if(o!==-1)return o;try{return this.getDoc().queryCommandState(c);}catch(ex){}},queryCommandValue:function(c){var t=this,o,s;if(t._isHidden())return;if(o=t.queryValueCommands[c]){s=o.func.call(o.scope);if(s!==true)return s;}o=t.editorCommands.queryCommandValue(c);if(is(o))return o;try{return this.getDoc().queryCommandValue(c);}catch(ex){}},show:function(){var t=this;DOM.show(t.getContainer());DOM.hide(t.id);t.load();},hide:function(){var t=this,d=t.getDoc();if(isIE&&d)d.execCommand('SelectAll');t.save();DOM.hide(t.getContainer());DOM.setStyle(t.id,'display',t.orgDisplay);},isHidden:function(){return!DOM.isHidden(this.id);},setProgressState:function(b,ti,o){this.onSetProgressState.dispatch(this,b,ti,o);return b;},resizeToContent:function(){var t=this;DOM.setStyle(t.id+"_ifr",'height',t.getBody().scrollHeight);},load:function(o){var t=this,e=t.getElement(),h;if(e){o=o||{};o.load=true;h=t.setContent(is(e.value)?e.value:e.innerHTML,o);o.element=e;if(!o.no_events)t.onLoadContent.dispatch(t,o);o.element=e=null;return h;}},save:function(o){var t=this,e=t.getElement(),h,f;if(!e||!t.initialized)return;o=o||{};o.save=true;if(!o.no_events){t.undoManager.typing=0;t.undoManager.add();}o.element=e;h=o.content=t.getContent(o);if(!o.no_events)t.onSaveContent.dispatch(t,o);h=o.content;if(!/TEXTAREA|INPUT/i.test(e.nodeName)){e.innerHTML=h;if(f=DOM.getParent(t.id,'form')){each(f.elements,function(e){if(e.name==t.id){e.value=h;return false;}});}}else e.value=h;o.element=e=null;return h;},setContent:function(h,o){var t=this;o=o||{};o.format=o.format||'html';o.set=true;o.content=h;if(!o.no_events)t.onBeforeSetContent.dispatch(t,o);if(!tinymce.isIE&&(h.length===0||/^\s+$/.test(h))){o.content=t.dom.setHTML(t.getBody(),'<br mce_bogus="1" />');o.format='raw';}o.content=t.dom.setHTML(t.getBody(),tinymce.trim(o.content));if(o.format!='raw'&&t.settings.cleanup){o.getInner=true;o.content=t.dom.setHTML(t.getBody(),t.serializer.serialize(t.getBody(),o));}if(!o.no_events)t.onSetContent.dispatch(t,o);return o.content;},getContent:function(o){var t=this,h;o=o||{};o.format=o.format||'html';o.get=true;if(!o.no_events)t.onBeforeGetContent.dispatch(t,o);if(o.format!='raw'&&t.settings.cleanup){o.getInner=true;h=t.serializer.serialize(t.getBody(),o);}else h=t.getBody().innerHTML;h=h.replace(/^\s*|\s*$/g,'');o.content=h;if(!o.no_events)t.onGetContent.dispatch(t,o);return o.content;},isDirty:function(){var t=this;return tinymce.trim(t.startContent)!=tinymce.trim(t.getContent({format:'raw',no_events:1}))&&!t.isNotDirty;},getContainer:function(){var t=this;if(!t.container)t.container=DOM.get(t.editorContainer||t.id+'_parent');return t.container;},getContentAreaContainer:function(){return this.contentAreaContainer;},getElement:function(){return DOM.get(this.settings.content_element||this.id);},getWin:function(){var t=this,e;if(!t.contentWindow){e=DOM.get(t.id+"_ifr");if(e)t.contentWindow=e.contentWindow;}return t.contentWindow;},getDoc:function(){var t=this,w;if(!t.contentDocument){w=t.getWin();if(w)t.contentDocument=w.document;}return t.contentDocument;},getBody:function(){return this.bodyElement||this.getDoc().body;},convertURL:function(u,n,e){var t=this,s=t.settings;if(s.urlconverter_callback)return t.execCallback('urlconverter_callback',u,e,true,n);if(!s.convert_urls||(e&&e.nodeName=='LINK')||u.indexOf('file:')===0)return u;if(s.relative_urls)return t.documentBaseURI.toRelative(u);u=t.documentBaseURI.toAbsolute(u,s.remove_script_host);return u;},addVisual:function(e){var t=this,s=t.settings;e=e||t.getBody();if(!is(t.hasVisual))t.hasVisual=s.visual;each(t.dom.select('table,a',e),function(e){var v;switch(e.nodeName){case'TABLE':v=t.dom.getAttrib(e,'border');if(!v||v=='0'){if(t.hasVisual)t.dom.addClass(e,s.visual_table_class);else t.dom.removeClass(e,s.visual_table_class);}return;case'A':v=t.dom.getAttrib(e,'name');if(v){if(t.hasVisual)t.dom.addClass(e,'mceItemAnchor');else t.dom.removeClass(e,'mceItemAnchor');}return;}});t.onVisualAid.dispatch(t,e,t.hasVisual);},remove:function(){var t=this,e=t.getContainer();t.removed=1;t.hide();t.execCallback('remove_instance_callback',t);t.onRemove.dispatch(t);t.onExecCommand.listeners=[];EditorManager.remove(t);DOM.remove(e);},destroy:function(s){var t=this;if(t.destroyed)return;if(!s){tinymce.removeUnload(t.destroy);tinyMCE.onBeforeUnload.remove(t._beforeUnload);if(t.theme.destroy)t.theme.destroy();t.controlManager.destroy();t.selection.destroy();t.dom.destroy();if(!t.settings.content_editable){Event.clear(t.getWin());Event.clear(t.getDoc());}Event.clear(t.getBody());Event.clear(t.formElement);}if(t.formElement){t.formElement.submit=t.formElement._mceOldSubmit;t.formElement._mceOldSubmit=null;}t.contentAreaContainer=t.formElement=t.container=t.settings.content_element=t.bodyElement=t.contentDocument=t.contentWindow=null;if(t.selection)t.selection=t.selection.win=t.selection.dom=t.selection.dom.doc=null;t.destroyed=1;},_addEvents:function(){var t=this,i,s=t.settings,lo={mouseup:'onMouseUp',mousedown:'onMouseDown',click:'onClick',keyup:'onKeyUp',keydown:'onKeyDown',keypress:'onKeyPress',submit:'onSubmit',reset:'onReset',contextmenu:'onContextMenu',dblclick:'onDblClick',paste:'onPaste'};function eventHandler(e,o){var ty=e.type;if(t.removed)return;if(t.onEvent.dispatch(t,e,o)!==false){t[lo[e.fakeType||e.type]].dispatch(t,e,o);}};each(lo,function(v,k){switch(k){case'contextmenu':if(tinymce.isOpera){Event.add(t.getBody(),'mousedown',function(e){if(e.ctrlKey){e.fakeType='contextmenu';eventHandler(e);}});}else Event.add(t.getBody(),k,eventHandler);break;case'paste':Event.add(t.getBody(),k,function(e){var tx,h,el,r;if(e.clipboardData)tx=e.clipboardData.getData('text/plain');else if(tinymce.isIE)tx=t.getWin().clipboardData.getData('Text');eventHandler(e,{text:tx,html:h});});break;case'submit':case'reset':Event.add(t.getElement().form||DOM.getParent(t.id,'form'),k,eventHandler);break;default:Event.add(s.content_editable?t.getBody():t.getDoc(),k,eventHandler);}});Event.add(s.content_editable?t.getBody():(isGecko?t.getDoc():t.getWin()),'focus',function(e){t.focus(true);});if(tinymce.isGecko){Event.add(t.getDoc(),'DOMNodeInserted',function(e){var v;e=e.target;if(e.nodeType===1&&e.nodeName==='IMG'&&(v=e.getAttribute('mce_src')))e.src=t.documentBaseURI.toAbsolute(v);});}if(isGecko){function setOpts(){var t=this,d=t.getDoc(),s=t.settings;if(isGecko&&!s.readonly){if(t._isHidden()){try{if(!s.content_editable)d.designMode='On';}catch(ex){}}try{d.execCommand("styleWithCSS",0,false);}catch(ex){if(!t._isHidden())try{d.execCommand("useCSS",0,true);}catch(ex){}}if(!s.table_inline_editing)try{d.execCommand('enableInlineTableEditing',false,false);}catch(ex){}if(!s.object_resizing)try{d.execCommand('enableObjectResizing',false,false);}catch(ex){}}};t.onBeforeExecCommand.add(setOpts);t.onMouseDown.add(setOpts);}t.onMouseUp.add(t.nodeChanged);t.onClick.add(t.nodeChanged);t.onKeyUp.add(function(ed,e){var c=e.keyCode;if((c>=33&&c<=36)||(c>=37&&c<=40)||c==13||c==45||c==46||c==8||(tinymce.isMac&&(c==91||c==93))||e.ctrlKey)t.nodeChanged();});t.onReset.add(function(){t.setContent(t.startContent,{format:'raw'});});if(t.getParam('tab_focus')){function tabCancel(ed,e){if(e.keyCode===9)return Event.cancel(e);};function tabHandler(ed,e){var x,i,f,el,v;function find(d){f=DOM.getParent(ed.id,'form');el=f.elements;if(f){each(el,function(e,i){if(e.id==ed.id){x=i;return false;}});if(d>0){for(i=x+1;i<el.length;i++){if(el[i].type!='hidden')return el[i];}}else{for(i=x-1;i>=0;i--){if(el[i].type!='hidden')return el[i];}}}return null;};if(e.keyCode===9){v=explode(ed.getParam('tab_focus'));if(v.length==1){v[1]=v[0];v[0]=':prev';}if(e.shiftKey){if(v[0]==':prev')el=find(-1);else el=DOM.get(v[0]);}else{if(v[1]==':next')el=find(1);else el=DOM.get(v[1]);}if(el){if(ed=EditorManager.get(el.id||el.name))ed.focus();else window.setTimeout(function(){window.focus();el.focus();},10);return Event.cancel(e);}}};t.onKeyUp.add(tabCancel);if(isGecko){t.onKeyPress.add(tabHandler);t.onKeyDown.add(tabCancel);}else t.onKeyDown.add(tabHandler);}if(s.custom_shortcuts){if(s.custom_undo_redo_keyboard_shortcuts){t.addShortcut('ctrl+z',t.getLang('undo_desc'),'Undo');t.addShortcut('ctrl+y',t.getLang('redo_desc'),'Redo');}if(isGecko){t.addShortcut('ctrl+b',t.getLang('bold_desc'),'Bold');t.addShortcut('ctrl+i',t.getLang('italic_desc'),'Italic');t.addShortcut('ctrl+u',t.getLang('underline_desc'),'Underline');}for(i=1;i<=6;i++)t.addShortcut('ctrl+'+i,'',['FormatBlock',false,'<h'+i+'>']);t.addShortcut('ctrl+7','',['FormatBlock',false,'<p>']);t.addShortcut('ctrl+8','',['FormatBlock',false,'<div>']);t.addShortcut('ctrl+9','',['FormatBlock',false,'<address>']);function find(e){var v=null;if(!e.altKey&&!e.ctrlKey&&!e.metaKey)return v;each(t.shortcuts,function(o){if(tinymce.isMac&&o.ctrl!=e.metaKey)return;else if(!tinymce.isMac&&o.ctrl!=e.ctrlKey)return;if(o.alt!=e.altKey)return;if(o.shift!=e.shiftKey)return;if(e.keyCode==o.keyCode||(e.charCode&&e.charCode==o.charCode)){v=o;return false;}});return v;};t.onKeyUp.add(function(ed,e){var o=find(e);if(o)return Event.cancel(e);});t.onKeyPress.add(function(ed,e){var o=find(e);if(o)return Event.cancel(e);});t.onKeyDown.add(function(ed,e){var o=find(e);if(o){o.func.call(o.scope);return Event.cancel(e);}});}if(tinymce.isIE){Event.add(t.getDoc(),'controlselect',function(e){var re=t.resizeInfo,cb;e=e.target;if(e.nodeName!=='IMG')return;if(re)Event.remove(re.node,re.ev,re.cb);if(!t.dom.hasClass(e,'mceItemNoResize')){ev='resizeend';cb=Event.add(e,ev,function(e){var v;e=e.target;if(v=t.dom.getStyle(e,'width')){t.dom.setAttrib(e,'width',v.replace(/[^0-9%]+/g,''));t.dom.setStyle(e,'width','');}if(v=t.dom.getStyle(e,'height')){t.dom.setAttrib(e,'height',v.replace(/[^0-9%]+/g,''));t.dom.setStyle(e,'height','');}});}else{ev='resizestart';cb=Event.add(e,'resizestart',Event.cancel,Event);}re=t.resizeInfo={node:e,ev:ev,cb:cb};});t.onKeyDown.add(function(ed,e){switch(e.keyCode){case 8:if(t.selection.getRng().item){t.selection.getRng().item(0).removeNode();return Event.cancel(e);}}});}if(tinymce.isOpera){t.onClick.add(function(ed,e){Event.prevent(e);});}if(s.custom_undo_redo){function addUndo(){t.undoManager.typing=0;t.undoManager.add();};if(tinymce.isIE){Event.add(t.getWin(),'blur',function(e){var n;if(t.selection){n=t.selection.getNode();if(!t.removed&&n.ownerDocument&&n.ownerDocument!=t.getDoc())addUndo();}});}else{Event.add(t.getDoc(),'blur',function(){if(t.selection&&!t.removed)addUndo();});}t.onMouseDown.add(addUndo);t.onKeyUp.add(function(ed,e){if((e.keyCode>=33&&e.keyCode<=36)||(e.keyCode>=37&&e.keyCode<=40)||e.keyCode==13||e.keyCode==45||e.ctrlKey){t.undoManager.typing=0;t.undoManager.add();}});t.onKeyDown.add(function(ed,e){if((e.keyCode>=33&&e.keyCode<=36)||(e.keyCode>=37&&e.keyCode<=40)||e.keyCode==13||e.keyCode==45){if(t.undoManager.typing){t.undoManager.add();t.undoManager.typing=0;}return;}if(!t.undoManager.typing){t.undoManager.add();t.undoManager.typing=1;}});}},_convertInlineElements:function(){var t=this,s=t.settings,dom=t.dom,v,e,na,st,sp;function convert(ed,o){if(!s.inline_styles)return;if(o.get){each(t.dom.select('table,u,strike',o.node),function(n){switch(n.nodeName){case'TABLE':if(v=dom.getAttrib(n,'height')){dom.setStyle(n,'height',v);dom.setAttrib(n,'height','');}break;case'U':case'STRIKE':n.style.textDecoration=n.nodeName=='U'?'underline':'line-through';dom.setAttrib(n,'mce_style','');dom.setAttrib(n,'mce_name','span');break;}});}else if(o.set){each(t.dom.select('table,span',o.node).reverse(),function(n){if(n.nodeName=='TABLE'){if(v=dom.getStyle(n,'height'))dom.setAttrib(n,'height',v.replace(/[^0-9%]+/g,''));}else{if(n.style.textDecoration=='underline')na='u';else if(n.style.textDecoration=='line-through')na='strike';else na='';if(na){n.style.textDecoration='';dom.setAttrib(n,'mce_style','');e=dom.create(na,{style:dom.getAttrib(n,'style')});dom.replace(e,n,1);}}});}};t.onPreProcess.add(convert);if(!s.cleanup_on_startup){t.onSetContent.add(function(ed,o){if(o.initial)convert(t,{node:t.getBody(),set:1});});}},_convertFonts:function(){var t=this,s=t.settings,dom=t.dom,fz,fzn,sl,cl;if(!s.inline_styles)return;fz=[8,10,12,14,18,24,36];fzn=['xx-small','x-small','small','medium','large','x-large','xx-large'];if(sl=s.font_size_style_values)sl=explode(sl);if(cl=s.font_size_classes)cl=explode(cl);function process(no){var n,sp,nl,x;if(!s.inline_styles)return;nl=t.dom.select('font',no);for(x=nl.length-1;x>=0;x--){n=nl[x];sp=dom.create('span',{style:dom.getAttrib(n,'style'),'class':dom.getAttrib(n,'class')});dom.setStyles(sp,{fontFamily:dom.getAttrib(n,'face'),color:dom.getAttrib(n,'color'),backgroundColor:n.style.backgroundColor});if(n.size){if(sl)dom.setStyle(sp,'fontSize',sl[parseInt(n.size)-1]);else dom.setAttrib(sp,'class',cl[parseInt(n.size)-1]);}dom.setAttrib(sp,'mce_style','');dom.replace(sp,n,1);}};t.onPreProcess.add(function(ed,o){if(o.get)process(o.node);});t.onSetContent.add(function(ed,o){if(o.initial)process(o.node);});},_isHidden:function(){var s;if(!isGecko)return 0;s=this.selection.getSel();return(!s||!s.rangeCount||s.rangeCount==0);},_fixNesting:function(s){var d=[],i;s=s.replace(/<(\/)?([^\s>]+)[^>]*?>/g,function(a,b,c){var e;if(b==='/'){if(!d.length)return'';if(c!==d[d.length-1].tag){for(i=d.length-1;i>=0;i--){if(d[i].tag===c){d[i].close=1;break;}}return'';}else{d.pop();if(d.length&&d[d.length-1].close){a=a+'</'+d[d.length-1].tag+'>';d.pop();}}}else{if(/^(br|hr|input|meta|img|link|param)$/i.test(c))return a;if(/\/>$/.test(a))return a;d.push({tag:c});}return a;});for(i=d.length-1;i>=0;i--)s+='</'+d[i].tag+'>';return s;}});})();(function(){var each=tinymce.each,isIE=tinymce.isIE,isGecko=tinymce.isGecko,isOpera=tinymce.isOpera,isWebKit=tinymce.isWebKit;function isBlock(n){return/^(H[1-6]|HR|P|DIV|ADDRESS|PRE|FORM|TABLE|OL|UL|TD|CAPTION|BLOCKQUOTE|CENTER|DL|DT|DD|DIR|FIELDSET|NOSCRIPT|NOFRAMES|MENU|ISINDEX|SAMP)$/.test(n.nodeName);};tinymce.create('tinymce.EditorCommands',{EditorCommands:function(ed){this.editor=ed;},execCommand:function(cmd,ui,val){var t=this,ed=t.editor,f;switch(cmd){case'Cut':case'Copy':case'Paste':try{ed.getDoc().execCommand(cmd,ui,val);}catch(ex){if(isGecko){ed.windowManager.confirm(ed.getLang('clipboard_msg'),function(s){if(s)window.open('http://www.mozilla.org/editor/midasdemo/securityprefs.html','mceExternal');});}else ed.windowManager.alert(ed.getLang('clipboard_no_support'));}return true;case'mceResetDesignMode':case'mceBeginUndoLevel':return true;case'unlink':t.UnLink();return true;case'JustifyLeft':case'JustifyCenter':case'JustifyRight':case'JustifyFull':t.mceJustify(cmd,cmd.substring(7).toLowerCase());return true;case'mceEndUndoLevel':case'mceAddUndoLevel':ed.undoManager.add();return true;default:f=this[cmd];if(f){f.call(this,ui,val);return true;}}return false;},Indent:function(){var ed=this.editor,d=ed.dom,s=ed.selection,e,iv,iu;iv=ed.settings.indentation;iu=/[a-z%]+$/i.exec(iv);iv=parseInt(iv);if(ed.settings.inline_styles&&(!this.queryStateInsertUnorderedList()&&!this.queryStateInsertOrderedList())){each(this._getSelectedBlocks(),function(e){d.setStyle(e,'paddingLeft',(parseInt(e.style.paddingLeft||0)+iv)+iu);});return;}ed.getDoc().execCommand('Indent',false,null);if(isIE){d.getParent(s.getNode(),function(n){if(n.nodeName=='BLOCKQUOTE'){n.dir=n.style.cssText='';}});}},Outdent:function(){var ed=this.editor,d=ed.dom,s=ed.selection,e,v,iv,iu;iv=ed.settings.indentation;iu=/[a-z%]+$/i.exec(iv);iv=parseInt(iv);if(ed.settings.inline_styles&&(!this.queryStateInsertUnorderedList()&&!this.queryStateInsertOrderedList())){each(this._getSelectedBlocks(),function(e){v=Math.max(0,parseInt(e.style.paddingLeft||0)-iv);d.setStyle(e,'paddingLeft',v?v+iu:'');});return;}ed.getDoc().execCommand('Outdent',false,null);},mceSetAttribute:function(u,v){var ed=this.editor,d=ed.dom,e;if(e=d.getParent(ed.selection.getNode(),d.isBlock))d.setAttrib(e,v.name,v.value);},mceSetContent:function(u,v){this.editor.setContent(v);},mceToggleVisualAid:function(){var ed=this.editor;ed.hasVisual=!ed.hasVisual;ed.addVisual();},mceReplaceContent:function(u,v){var s=this.editor.selection;s.setContent(v.replace(/\{\$selection\}/g,s.getContent({format:'text'})));},mceInsertLink:function(u,v){var ed=this.editor,s=ed.selection,e=ed.dom.getParent(s.getNode(),'A');if(tinymce.is(v,'string'))v={href:v};function set(e){each(v,function(v,k){ed.dom.setAttrib(e,k,v);});};if(!e){ed.execCommand('CreateLink',false,'javascript:mctmp(0);');each(ed.dom.select('a'),function(e){if(e.href=='javascript:mctmp(0);')set(e);});}else{if(v.href)set(e);else ed.dom.remove(e,1);}},UnLink:function(){var ed=this.editor,s=ed.selection;if(s.isCollapsed())s.select(s.getNode());ed.getDoc().execCommand('unlink',false,null);s.collapse(0);},FontName:function(u,v){var t=this,ed=t.editor,s=ed.selection,e;if(!v){if(s.isCollapsed())s.select(s.getNode());t.RemoveFormat();}else{if(ed.settings.convert_fonts_to_spans)t._applyInlineStyle('span',{style:{fontFamily:v}});else ed.getDoc().execCommand('FontName',false,v);}},FontSize:function(u,v){var ed=this.editor,s=ed.settings,fc,fs;if(s.convert_fonts_to_spans&&v>=1&&v<=7){fs=tinymce.explode(s.font_size_style_values);fc=tinymce.explode(s.font_size_classes);if(fc)v=fc[v-1]||v;else v=fs[v-1]||v;}if(v>=1&&v<=7)ed.getDoc().execCommand('FontSize',false,v);else this._applyInlineStyle('span',{style:{fontSize:v}});},queryCommandValue:function(c){var f=this['queryValue'+c];if(f)return f.call(this,c);return false;},queryCommandState:function(cmd){var f;switch(cmd){case'JustifyLeft':case'JustifyCenter':case'JustifyRight':case'JustifyFull':return this.queryStateJustify(cmd,cmd.substring(7).toLowerCase());default:if(f=this['queryState'+cmd])return f.call(this,cmd);}return-1;},_queryState:function(c){try{return this.editor.getDoc().queryCommandState(c);}catch(ex){}},_queryVal:function(c){try{return this.editor.getDoc().queryCommandValue(c);}catch(ex){}},queryValueFontSize:function(){var ed=this.editor,v=0,p;if(p=ed.dom.getParent(ed.selection.getNode(),'SPAN'))v=p.style.fontSize;if(!v&&(isOpera||isWebKit)){if(p=ed.dom.getParent(ed.selection.getNode(),'FONT'))v=p.size;return v;}return v||this._queryVal('FontSize');},queryValueFontName:function(){var ed=this.editor,v=0,p;if(p=ed.dom.getParent(ed.selection.getNode(),'FONT'))v=p.face;if(p=ed.dom.getParent(ed.selection.getNode(),'SPAN'))v=p.style.fontFamily.replace(/, /g,',').replace(/[\'\"]/g,'').toLowerCase();if(!v)v=this._queryVal('FontName');return v;},mceJustify:function(c,v){var ed=this.editor,se=ed.selection,n=se.getNode(),nn=n.nodeName,bl,nb,dom=ed.dom,rm;if(ed.settings.inline_styles&&this.queryStateJustify(c,v))rm=1;bl=dom.getParent(n,ed.dom.isBlock);if(nn=='IMG'){if(v=='full')return;if(rm){if(v=='center')dom.setStyle(bl||n.parentNode,'textAlign','');dom.setStyle(n,'float','');this.mceRepaint();return;}if(v=='center'){if(bl&&/^(TD|TH)$/.test(bl.nodeName))bl=0;if(!bl||bl.childNodes.length>1){nb=dom.create('p');nb.appendChild(n.cloneNode(false));if(bl)dom.insertAfter(nb,bl);else dom.insertAfter(nb,n);dom.remove(n);n=nb.firstChild;bl=nb;}dom.setStyle(bl,'textAlign',v);dom.setStyle(n,'float','');}else{dom.setStyle(n,'float',v);dom.setStyle(bl||n.parentNode,'textAlign','');}this.mceRepaint();return;}if(ed.settings.inline_styles&&ed.settings.forced_root_block){if(rm)v='';each(this._getSelectedBlocks(dom.getParent(se.getStart(),dom.isBlock),dom.getParent(se.getEnd(),dom.isBlock)),function(e){dom.setAttrib(e,'align','');dom.setStyle(e,'textAlign',v=='full'?'justify':v);});return;}else if(!rm)ed.getDoc().execCommand(c,false,null);if(ed.settings.inline_styles){if(rm){dom.getParent(ed.selection.getNode(),function(n){if(n.style&&n.style.textAlign)dom.setStyle(n,'textAlign','');});return;}each(dom.select('*'),function(n){var v=n.align;if(v){if(v=='full')v='justify';dom.setStyle(n,'textAlign',v);dom.setAttrib(n,'align','');}});}},mceSetCSSClass:function(u,v){this.mceSetStyleInfo(0,{command:'setattrib',name:'class',value:v});},getSelectedElement:function(){var t=this,ed=t.editor,dom=ed.dom,se=ed.selection,r=se.getRng(),r1,r2,sc,ec,so,eo,e,sp,ep,re;if(se.isCollapsed()||r.item)return se.getNode();re=ed.settings.merge_styles_invalid_parents;if(tinymce.is(re,'string'))re=new RegExp(re,'i');if(isIE){r1=r.duplicate();r1.collapse(true);sc=r1.parentElement();r2=r.duplicate();r2.collapse(false);ec=r2.parentElement();if(sc!=ec){r1.move('character',1);sc=r1.parentElement();}if(sc==ec){r1=r.duplicate();r1.moveToElementText(sc);if(r1.compareEndPoints('StartToStart',r)==0&&r1.compareEndPoints('EndToEnd',r)==0)return re&&re.test(sc.nodeName)?null:sc;}}else{function getParent(n){return dom.getParent(n,function(n){return n.nodeType==1;});};sc=r.startContainer;ec=r.endContainer;so=r.startOffset;eo=r.endOffset;if(!r.collapsed){if(sc==ec){if(so-eo<2){if(sc.hasChildNodes()){sp=sc.childNodes[so];return re&&re.test(sp.nodeName)?null:sp;}}}}if(sc.nodeType!=3||ec.nodeType!=3)return null;if(so==0){sp=getParent(sc);if(sp&&sp.firstChild!=sc)sp=null;}if(so==sc.nodeValue.length){e=sc.nextSibling;if(e&&e.nodeType==1)sp=sc.nextSibling;}if(eo==0){e=ec.previousSibling;if(e&&e.nodeType==1)ep=e;}if(eo==ec.nodeValue.length){ep=getParent(ec);if(ep&&ep.lastChild!=ec)ep=null;}if(sp==ep)return re&&sp&&re.test(sp.nodeName)?null:sp;}return null;},InsertHorizontalRule:function(){if(isGecko||isIE)this.editor.selection.setContent('<hr />');else this.editor.getDoc().execCommand('InsertHorizontalRule',false,'');},RemoveFormat:function(){var t=this,ed=t.editor,s=ed.selection,b;if(isWebKit)s.setContent(s.getContent({format:'raw'}).replace(/(<(span|b|i|strong|em|strike) [^>]+>|<(span|b|i|strong|em|strike)>|<\/(span|b|i|strong|em|strike)>|)/g,''),{format:'raw'});else ed.getDoc().execCommand('RemoveFormat',false,null);t.mceSetStyleInfo(0,{command:'removeformat'});ed.addVisual();},mceSetStyleInfo:function(u,v){var t=this,ed=t.editor,d=ed.getDoc(),dom=ed.dom,e,b,s=ed.selection,nn=v.wrapper||'span',b=s.getBookmark(),re;function set(n,e){if(n.nodeType==1){switch(v.command){case'setattrib':return dom.setAttrib(n,v.name,v.value);case'setstyle':return dom.setStyle(n,v.name,v.value);case'removeformat':return dom.setAttrib(n,'class','');}}};re=ed.settings.merge_styles_invalid_parents;if(tinymce.is(re,'string'))re=new RegExp(re,'i');if((e=t.getSelectedElement())&&!ed.settings.force_span_wrappers)set(e,1);else{d.execCommand('FontName',false,'__');each(isWebKit?dom.select('span'):dom.select('font'),function(n){var sp,e;if(dom.getAttrib(n,'face')=='__'||n.style.fontFamily==='__'){sp=dom.create(nn,{mce_new:'1'});set(sp);each(n.childNodes,function(n){sp.appendChild(n.cloneNode(true));});dom.replace(sp,n);}});}each(dom.select(nn).reverse(),function(n){var p=n.parentNode;if(!dom.getAttrib(n,'mce_new')){p=dom.getParent(n,function(n){return n.nodeType==1&&dom.getAttrib(n,'mce_new');});if(p)dom.remove(n,1);}});each(dom.select(nn).reverse(),function(n){var p=n.parentNode;if(!p||!dom.getAttrib(n,'mce_new'))return;if(ed.settings.force_span_wrappers&&p.nodeName!='SPAN')return;if(p.nodeName==nn.toUpperCase()&&p.childNodes.length==1)return dom.remove(p,1);if(n.nodeType==1&&(!re||!re.test(p.nodeName))&&p.childNodes.length==1){set(p);dom.setAttrib(n,'class','');}});each(dom.select(nn).reverse(),function(n){if(dom.getAttrib(n,'mce_new')||(dom.getAttribs(n).length<=1&&n.className==='')){if(!dom.getAttrib(n,'class')&&!dom.getAttrib(n,'style'))return dom.remove(n,1);dom.setAttrib(n,'mce_new','');}});s.moveToBookmark(b);},queryStateJustify:function(c,v){var ed=this.editor,n=ed.selection.getNode(),dom=ed.dom;if(n&&n.nodeName=='IMG'){if(dom.getStyle(n,'float')==v)return 1;return n.parentNode.style.textAlign==v;}n=dom.getParent(ed.selection.getStart(),function(n){return n.nodeType==1&&n.style.textAlign;});if(v=='full')v='justify';if(ed.settings.inline_styles)return(n&&n.style.textAlign==v);return this._queryState(c);},ForeColor:function(ui,v){var ed=this.editor;if(ed.settings.convert_fonts_to_spans){this._applyInlineStyle('span',{style:{color:v}});return;}else ed.getDoc().execCommand('ForeColor',false,v);},HiliteColor:function(ui,val){var t=this,ed=t.editor,d=ed.getDoc();if(ed.settings.convert_fonts_to_spans){this._applyInlineStyle('span',{style:{backgroundColor:val}});return;}function set(s){if(!isGecko)return;try{d.execCommand("styleWithCSS",0,s);}catch(ex){d.execCommand("useCSS",0,!s);}};if(isGecko||isOpera){set(true);d.execCommand('hilitecolor',false,val);set(false);}else d.execCommand('BackColor',false,val);},Undo:function(){var ed=this.editor;if(ed.settings.custom_undo_redo){ed.undoManager.undo();ed.nodeChanged();}else ed.getDoc().execCommand('Undo',false,null);},Redo:function(){var ed=this.editor;if(ed.settings.custom_undo_redo){ed.undoManager.redo();ed.nodeChanged();}else ed.getDoc().execCommand('Redo',false,null);},FormatBlock:function(ui,val){var t=this,ed=t.editor,s=ed.selection,dom=ed.dom,bl,nb,b;function isBlock(n){return/^(P|DIV|H[1-6]|ADDRESS|BLOCKQUOTE|PRE)$/.test(n.nodeName);};bl=dom.getParent(s.getNode(),function(n){return isBlock(n);});if(bl){if((isIE&&isBlock(bl.parentNode))||bl.nodeName=='DIV'){nb=ed.dom.create(val);each(dom.getAttribs(bl),function(v){dom.setAttrib(nb,v.nodeName,dom.getAttrib(bl,v.nodeName));});b=s.getBookmark();dom.replace(nb,bl,1);s.moveToBookmark(b);ed.nodeChanged();return;}}val=ed.settings.forced_root_block?(val||'<p>'):val;if(val.indexOf('<')==-1)val='<'+val+'>';if(tinymce.isGecko)val=val.replace(/<(div|blockquote|code|dt|dd|dl|samp)>/gi,'$1');ed.getDoc().execCommand('FormatBlock',false,val);},mceCleanup:function(){var ed=this.editor,s=ed.selection,b=s.getBookmark();ed.setContent(ed.getContent());s.moveToBookmark(b);},mceRemoveNode:function(ui,val){var ed=this.editor,s=ed.selection,b,n=val||s.getNode();if(n==ed.getBody())return;b=s.getBookmark();ed.dom.remove(n,1);s.moveToBookmark(b);ed.nodeChanged();},mceSelectNodeDepth:function(ui,val){var ed=this.editor,s=ed.selection,c=0;ed.dom.getParent(s.getNode(),function(n){if(n.nodeType==1&&c++==val){s.select(n);ed.nodeChanged();return false;}},ed.getBody());},mceSelectNode:function(u,v){this.editor.selection.select(v);},mceInsertContent:function(ui,val){this.editor.selection.setContent(val);},mceInsertRawHTML:function(ui,val){var ed=this.editor;ed.selection.setContent('tiny_mce_marker');ed.setContent(ed.getContent().replace(/tiny_mce_marker/g,val));},mceRepaint:function(){var s,b,e=this.editor;if(tinymce.isGecko){try{s=e.selection;b=s.getBookmark(true);if(s.getSel())s.getSel().selectAllChildren(e.getBody());s.collapse(true);s.moveToBookmark(b);}catch(ex){}}},queryStateUnderline:function(){var ed=this.editor,n=ed.selection.getNode();if(n&&n.nodeName=='A')return false;return this._queryState('Underline');},queryStateOutdent:function(){var ed=this.editor,n;if(ed.settings.inline_styles){if((n=ed.dom.getParent(ed.selection.getStart(),ed.dom.isBlock))&&parseInt(n.style.paddingLeft)>0)return true;if((n=ed.dom.getParent(ed.selection.getEnd(),ed.dom.isBlock))&&parseInt(n.style.paddingLeft)>0)return true;}return this.queryStateInsertUnorderedList()||this.queryStateInsertOrderedList()||(!ed.settings.inline_styles&&!!ed.dom.getParent(ed.selection.getNode(),'BLOCKQUOTE'));},queryStateInsertUnorderedList:function(){return this.editor.dom.getParent(this.editor.selection.getNode(),'UL');},queryStateInsertOrderedList:function(){return this.editor.dom.getParent(this.editor.selection.getNode(),'OL');},queryStatemceBlockQuote:function(){return!!this.editor.dom.getParent(this.editor.selection.getStart(),function(n){return n.nodeName==='BLOCKQUOTE';});},mceBlockQuote:function(){var t=this,ed=t.editor,s=ed.selection,dom=ed.dom,sb,eb,n,bm,bq,r,bq2,i,nl;function getBQ(e){return dom.getParent(e,function(n){return n.nodeName==='BLOCKQUOTE';});};sb=dom.getParent(s.getStart(),isBlock);eb=dom.getParent(s.getEnd(),isBlock);if(bq=getBQ(sb)){if(sb!=eb||sb.childNodes.length>1||(sb.childNodes.length==1&&sb.firstChild.nodeName!='BR'))bm=s.getBookmark();if(getBQ(eb)){bq2=bq.cloneNode(false);while(n=eb.nextSibling)bq2.appendChild(n.parentNode.removeChild(n));}if(bq2)dom.insertAfter(bq2,bq);nl=t._getSelectedBlocks(sb,eb);for(i=nl.length-1;i>=0;i--){dom.insertAfter(nl[i],bq);}if(/^\s*$/.test(bq.innerHTML))dom.remove(bq,1);if(bq2&&/^\s*$/.test(bq2.innerHTML))dom.remove(bq2,1);if(!bm){if(!isIE){r=ed.getDoc().createRange();r.setStart(sb,0);r.setEnd(sb,0);s.setRng(r);}else{s.select(sb);s.collapse(0);if(dom.getParent(s.getStart(),isBlock)!=sb){r=s.getRng();r.move('character',-1);r.select();}}}else t.editor.selection.moveToBookmark(bm);return;}if(isIE&&!sb&&!eb){t.editor.getDoc().execCommand('Indent');n=getBQ(s.getNode());n.style.margin=n.dir='';return;}if(!sb||!eb)return;if(sb!=eb||sb.childNodes.length>1||(sb.childNodes.length==1&&sb.firstChild.nodeName!='BR'))bm=s.getBookmark();each(t._getSelectedBlocks(getBQ(s.getStart()),getBQ(s.getEnd())),function(e){if(e.nodeName=='BLOCKQUOTE'&&!bq){bq=e;return;}if(!bq){bq=dom.create('blockquote');e.parentNode.insertBefore(bq,e);}if(e.nodeName=='BLOCKQUOTE'&&bq){n=e.firstChild;while(n){bq.appendChild(n.cloneNode(true));n=n.nextSibling;}dom.remove(e);return;}bq.appendChild(dom.remove(e));});if(!bm){if(!isIE){r=ed.getDoc().createRange();r.setStart(sb,0);r.setEnd(sb,0);s.setRng(r);}else{s.select(sb);s.collapse(1);}}else s.moveToBookmark(bm);},_applyInlineStyle:function(na,at,op){var t=this,ed=t.editor,dom=ed.dom,bm,lo={},kh;na=na.toUpperCase();if(op&&op.check_classes&&at['class'])op.check_classes.push(at['class']);function replaceFonts(){var bm;each(dom.select(tinymce.isWebKit&&!tinymce.isAir?'span':'font'),function(n){if(n.style.fontFamily=='mceinline'||n.face=='mceinline'){if(!bm)bm=ed.selection.getBookmark();at._mce_new='1';dom.replace(dom.create(na,at),n,1);}});each(dom.select(na),function(n){if(n.getAttribute('_mce_new')){function removeStyle(n){if(n.nodeType==1){each(at.style,function(v,k){dom.setStyle(n,k,'');});if(at['class']&&n.className&&op){each(op.check_classes,function(c){if(dom.hasClass(n,c))dom.removeClass(n,c);});}}};each(dom.select(na,n),removeStyle);if(n.parentNode&&n.parentNode.nodeType==1&&n.parentNode.childNodes.length==1)removeStyle(n.parentNode);dom.getParent(n.parentNode,function(pn){if(pn.nodeType==1){if(at.style){each(at.style,function(v,k){var sv;if(!lo[k]&&(sv=dom.getStyle(pn,k))){if(sv===v)dom.setStyle(n,k,'');lo[k]=1;}});}if(at['class']&&pn.className&&op){each(op.check_classes,function(c){if(dom.hasClass(pn,c))dom.removeClass(n,c);});}}return false;});n.removeAttribute('_mce_new');}});each(dom.select(na).reverse(),function(n){var c=0;each(dom.getAttribs(n),function(an){if(an.nodeName.substring(0,1)!='_'&&dom.getAttrib(n,an.nodeName)!=''){c++;}});if(c==0)dom.remove(n,1);});ed.selection.moveToBookmark(bm);return!!bm;};ed.focus();ed.getDoc().execCommand('FontName',false,'mceinline');replaceFonts();if(kh=t._applyInlineStyle.keyhandler){ed.onKeyUp.remove(kh);ed.onKeyPress.remove(kh);ed.onKeyDown.remove(kh);ed.onSetContent.remove(t._applyInlineStyle.chandler);}if(ed.selection.isCollapsed()){t._pendingStyles=tinymce.extend(t._pendingStyles||{},at.style);t._applyInlineStyle.chandler=ed.onSetContent.add(function(){delete t._pendingStyles;});t._applyInlineStyle.keyhandler=kh=function(e){if(t._pendingStyles){at.style=t._pendingStyles;delete t._pendingStyles;}if(replaceFonts()){ed.onKeyDown.remove(t._applyInlineStyle.keyhandler);ed.onKeyPress.remove(t._applyInlineStyle.keyhandler);}if(e.type=='keyup')ed.onKeyUp.remove(t._applyInlineStyle.keyhandler);};ed.onKeyDown.add(kh);ed.onKeyPress.add(kh);ed.onKeyUp.add(kh);}else t._pendingStyles=0;},_getSelectedBlocks:function(st,en){var ed=this.editor,dom=ed.dom,s=ed.selection,sb,eb,n,bl=[];sb=dom.getParent(st||s.getStart(),isBlock);eb=dom.getParent(en||s.getEnd(),isBlock);if(sb)bl.push(sb);if(sb&&eb&&sb!=eb){n=sb;while((n=n.nextSibling)&&n!=eb){if(isBlock(n))bl.push(n);}}if(eb&&sb!=eb)bl.push(eb);return bl;}});})();tinymce.create('tinymce.UndoManager',{index:0,data:null,typing:0,UndoManager:function(ed){var t=this,Dispatcher=tinymce.util.Dispatcher;t.editor=ed;t.data=[];t.onAdd=new Dispatcher(this);t.onUndo=new Dispatcher(this);t.onRedo=new Dispatcher(this);},add:function(l){var t=this,i,ed=t.editor,b,s=ed.settings,la;l=l||{};l.content=l.content||ed.getContent({format:'raw',no_events:1});l.content=l.content.replace(/^\s*|\s*$/g,'');la=t.data[t.index>0&&(t.index==0||t.index==t.data.length)?t.index-1:t.index];if(!l.initial&&la&&l.content==la.content)return null;if(s.custom_undo_redo_levels){if(t.data.length>s.custom_undo_redo_levels){for(i=0;i<t.data.length-1;i++)t.data[i]=t.data[i+1];t.data.length--;t.index=t.data.length;}}if(s.custom_undo_redo_restore_selection&&!l.initial)l.bookmark=b=l.bookmark||ed.selection.getBookmark();if(t.index<t.data.length)t.index++;if(t.data.length===0&&!l.initial)return null;t.data.length=t.index+1;t.data[t.index++]=l;if(l.initial)t.index=0;if(t.data.length==2&&t.data[0].initial)t.data[0].bookmark=b;t.onAdd.dispatch(t,l);ed.isNotDirty=0;return l;},undo:function(){var t=this,ed=t.editor,l=l,i;if(t.typing){t.add();t.typing=0;}if(t.index>0){if(t.index==t.data.length&&t.index>1){i=t.index;t.typing=0;if(!t.add())t.index=i;--t.index;}l=t.data[--t.index];ed.setContent(l.content,{format:'raw'});ed.selection.moveToBookmark(l.bookmark);t.onUndo.dispatch(t,l);}return l;},redo:function(){var t=this,ed=t.editor,l=null;if(t.index<t.data.length-1){l=t.data[++t.index];ed.setContent(l.content,{format:'raw'});ed.selection.moveToBookmark(l.bookmark);t.onRedo.dispatch(t,l);}return l;},clear:function(){var t=this;t.data=[];t.index=0;t.typing=0;t.add({initial:true});},hasUndo:function(){return this.index!=0||this.typing;},hasRedo:function(){return this.index<this.data.length-1;}});(function(){var Event,isIE,isGecko,isOpera,each,extend;Event=tinymce.dom.Event;isIE=tinymce.isIE;isGecko=tinymce.isGecko;isOpera=tinymce.isOpera;each=tinymce.each;extend=tinymce.extend;tinymce.create('tinymce.ForceBlocks',{ForceBlocks:function(ed){var t=this,s=ed.settings,elm;t.editor=ed;t.dom=ed.dom;elm=(s.forced_root_block||'p').toLowerCase();s.element=elm.toUpperCase();ed.onPreInit.add(t.setup,t);t.reOpera=new RegExp('(\\u00a0|&#160;|&nbsp;)<\/'+elm+'>','gi');t.rePadd=new RegExp('<p( )([^>]+)><\\\/p>|<p( )([^>]+)\\\/>|<p( )([^>]+)>\\s+<\\\/p>|<p><\\\/p>|<p\\\/>|<p>\\s+<\\\/p>'.replace(/p/g,elm),'gi');t.reNbsp2BR1=new RegExp('<p( )([^>]+)>[\\s\\u00a0]+<\\\/p>|<p>[\\s\\u00a0]+<\\\/p>'.replace(/p/g,elm),'gi');t.reNbsp2BR2=new RegExp('<p( )([^>]+)>(&nbsp;|&#160;)<\\\/p>|<p>(&nbsp;|&#160;)<\\\/p>'.replace(/p/g,elm),'gi');t.reBR2Nbsp=new RegExp('<p( )([^>]+)>\\s*<br \\\/>\\s*<\\\/p>|<p>\\s*<br \\\/>\\s*<\\\/p>'.replace(/p/g,elm),'gi');t.reTrailBr=new RegExp('\\s*<br \\/>\\s*<\\\/p>'.replace(/p/g,elm),'gi');function padd(ed,o){if(isOpera)o.content=o.content.replace(t.reOpera,'</'+elm+'>');o.content=o.content.replace(t.rePadd,'<'+elm+'$1$2$3$4$5$6>\u00a0</'+elm+'>');if(!isIE&&!isOpera&&o.set){o.content=o.content.replace(t.reNbsp2BR1,'<'+elm+'$1$2><br /></'+elm+'>');o.content=o.content.replace(t.reNbsp2BR2,'<'+elm+'$1$2><br /></'+elm+'>');}else{o.content=o.content.replace(t.reBR2Nbsp,'<'+elm+'$1$2>\u00a0</'+elm+'>');o.content=o.content.replace(t.reTrailBr,'</'+elm+'>');}};ed.onBeforeSetContent.add(padd);ed.onPostProcess.add(padd);if(s.forced_root_block){ed.onInit.add(t.forceRoots,t);ed.onSetContent.add(t.forceRoots,t);ed.onBeforeGetContent.add(t.forceRoots,t);}},setup:function(){var t=this,ed=t.editor,s=ed.settings;if(s.forced_root_block){ed.onKeyUp.add(t.forceRoots,t);ed.onPreProcess.add(t.forceRoots,t);}if(s.force_br_newlines){if(isIE){ed.onKeyPress.add(function(ed,e){var n,s=ed.selection;if(e.keyCode==13&&s.getNode().nodeName!='LI'){s.setContent('<br id="__" /> ',{format:'raw'});n=ed.dom.get('__');n.removeAttribute('id');s.select(n);s.collapse();return Event.cancel(e);}});}return;}if(!isIE&&s.force_p_newlines){ed.onKeyPress.add(function(ed,e){if(e.keyCode==13&&!e.shiftKey){if(!t.insertPara(e))Event.cancel(e);}});if(isGecko){ed.onKeyDown.add(function(ed,e){if((e.keyCode==8||e.keyCode==46)&&!e.shiftKey)t.backspaceDelete(e,e.keyCode==8);});}}function ren(rn,na){var ne=ed.dom.create(na);each(rn.attributes,function(a){if(a.specified&&a.nodeValue)ne.setAttribute(a.nodeName.toLowerCase(),a.nodeValue);});each(rn.childNodes,function(n){ne.appendChild(n.cloneNode(true));});rn.parentNode.replaceChild(ne,rn);return ne;};if(isIE&&s.element!='P'){ed.onKeyPress.add(function(ed,e){t.lastElm=ed.selection.getNode().nodeName;});ed.onKeyUp.add(function(ed,e){var bl,sel=ed.selection,n=sel.getNode(),b=ed.getBody();if(b.childNodes.length===1&&n.nodeName=='P'){n=ren(n,s.element);sel.select(n);sel.collapse();ed.nodeChanged();}else if(e.keyCode==13&&!e.shiftKey&&t.lastElm!='P'){bl=ed.dom.getParent(n,'P');if(bl){ren(bl,s.element);ed.nodeChanged();}}});}},find:function(n,t,s){var ed=this.editor,w=ed.getDoc().createTreeWalker(n,4,null,false),c=-1;while(n=w.nextNode()){c++;if(t==0&&n==s)return c;if(t==1&&c==s)return n;}return-1;},forceRoots:function(ed,e){var t=this,ed=t.editor,b=ed.getBody(),d=ed.getDoc(),se=ed.selection,s=se.getSel(),r=se.getRng(),si=-2,ei,so,eo,tr,c=-0xFFFFFF;var nx,bl,bp,sp,le,nl=b.childNodes,i,n,eid;for(i=nl.length-1;i>=0;i--){nx=nl[i];if(nx.nodeType==3||(!t.dom.isBlock(nx)&&nx.nodeType!=8)){if(!bl){if(nx.nodeType!=3||/[^\s]/g.test(nx.nodeValue)){if(si==-2&&r){if(!isIE){if(r.startContainer.nodeType==1&&(n=r.startContainer.childNodes[r.startOffset])&&n.nodeType==1){eid=n.getAttribute("id");n.setAttribute("id","__mce");}else{if(ed.dom.getParent(r.startContainer,function(e){return e===b;})){so=r.startOffset;eo=r.endOffset;si=t.find(b,0,r.startContainer);ei=t.find(b,0,r.endContainer);}}}else{tr=d.body.createTextRange();tr.moveToElementText(b);tr.collapse(1);bp=tr.move('character',c)*-1;tr=r.duplicate();tr.collapse(1);sp=tr.move('character',c)*-1;tr=r.duplicate();tr.collapse(0);le=(tr.move('character',c)*-1)-sp;si=sp-bp;ei=le;}}bl=ed.dom.create(ed.settings.forced_root_block);bl.appendChild(nx.cloneNode(1));nx.parentNode.replaceChild(bl,nx);}}else{if(bl.hasChildNodes())bl.insertBefore(nx,bl.firstChild);else bl.appendChild(nx);}}else bl=null;}if(si!=-2){if(!isIE){bl=b.getElementsByTagName(ed.settings.element)[0];r=d.createRange();if(si!=-1)r.setStart(t.find(b,1,si),so);else r.setStart(bl,0);if(ei!=-1)r.setEnd(t.find(b,1,ei),eo);else r.setEnd(bl,0);if(s){s.removeAllRanges();s.addRange(r);}}else{try{r=s.createRange();r.moveToElementText(b);r.collapse(1);r.moveStart('character',si);r.moveEnd('character',ei);r.select();}catch(ex){}}}else if(!isIE&&(n=ed.dom.get('__mce'))){if(eid)n.setAttribute('id',eid);else n.removeAttribute('id');r=d.createRange();r.setStartBefore(n);r.setEndBefore(n);se.setRng(r);}},getParentBlock:function(n){var d=this.dom;return d.getParent(n,d.isBlock);},insertPara:function(e){var t=this,ed=t.editor,dom=ed.dom,d=ed.getDoc(),se=ed.settings,s=ed.selection.getSel(),r=s.getRangeAt(0),b=d.body;var rb,ra,dir,sn,so,en,eo,sb,eb,bn,bef,aft,sc,ec,n,vp=dom.getViewPort(ed.getWin()),y,ch,car;function isEmpty(n){n=n.innerHTML;n=n.replace(/<(img|hr|table)/gi,'-');n=n.replace(/<[^>]+>/g,'');return n.replace(/[ \t\r\n]+/g,'')=='';};rb=d.createRange();rb.setStart(s.anchorNode,s.anchorOffset);rb.collapse(true);ra=d.createRange();ra.setStart(s.focusNode,s.focusOffset);ra.collapse(true);dir=rb.compareBoundaryPoints(rb.START_TO_END,ra)<0;sn=dir?s.anchorNode:s.focusNode;so=dir?s.anchorOffset:s.focusOffset;en=dir?s.focusNode:s.anchorNode;eo=dir?s.focusOffset:s.anchorOffset;if(sn===en&&/^(TD|TH)$/.test(sn.nodeName)){dom.remove(sn.firstChild);ed.dom.add(sn,se.element,null,'<br />');aft=ed.dom.add(sn,se.element,null,'<br />');r=d.createRange();r.selectNodeContents(aft);r.collapse(1);ed.selection.setRng(r);return false;}if(sn==b&&en==b&&b.firstChild&&ed.dom.isBlock(b.firstChild)){sn=en=sn.firstChild;so=eo=0;rb=d.createRange();rb.setStart(sn,0);ra=d.createRange();ra.setStart(en,0);}sn=sn.nodeName=="HTML"?d.body:sn;sn=sn.nodeName=="BODY"?sn.firstChild:sn;en=en.nodeName=="HTML"?d.body:en;en=en.nodeName=="BODY"?en.firstChild:en;sb=t.getParentBlock(sn);eb=t.getParentBlock(en);bn=sb?sb.nodeName:se.element;if(t.dom.getParent(sb,function(n){return/OL|UL|PRE/.test(n.nodeName);}))return true;if(sb&&(sb.nodeName=='CAPTION'||/absolute|relative|static/gi.test(sb.style.position))){bn=se.element;sb=null;}if(eb&&(eb.nodeName=='CAPTION'||/absolute|relative|static/gi.test(eb.style.position))){bn=se.element;eb=null;}if(/(TD|TABLE|TH|CAPTION)/.test(bn)||(sb&&bn=="DIV"&&/left|right/gi.test(sb.style.cssFloat))){bn=se.element;sb=eb=null;}bef=(sb&&sb.nodeName==bn)?sb.cloneNode(0):ed.dom.create(bn);aft=(eb&&eb.nodeName==bn)?eb.cloneNode(0):ed.dom.create(bn);aft.removeAttribute('id');if(/^(H[1-6])$/.test(bn)&&sn.nodeValue&&so==sn.nodeValue.length)aft=ed.dom.create(se.element);n=sc=sn;do{if(n==b||n.nodeType==9||t.dom.isBlock(n)||/(TD|TABLE|TH|CAPTION)/.test(n.nodeName))break;sc=n;}while((n=n.previousSibling?n.previousSibling:n.parentNode));n=ec=en;do{if(n==b||n.nodeType==9||t.dom.isBlock(n)||/(TD|TABLE|TH|CAPTION)/.test(n.nodeName))break;ec=n;}while((n=n.nextSibling?n.nextSibling:n.parentNode));if(sc.nodeName==bn)rb.setStart(sc,0);else rb.setStartBefore(sc);rb.setEnd(sn,so);bef.appendChild(rb.cloneContents()||d.createTextNode(''));try{ra.setEndAfter(ec);}catch(ex){}ra.setStart(en,eo);aft.appendChild(ra.cloneContents()||d.createTextNode(''));r=d.createRange();if(!sc.previousSibling&&sc.parentNode.nodeName==bn){r.setStartBefore(sc.parentNode);}else{if(rb.startContainer.nodeName==bn&&rb.startOffset==0)r.setStartBefore(rb.startContainer);else r.setStart(rb.startContainer,rb.startOffset);}if(!ec.nextSibling&&ec.parentNode.nodeName==bn)r.setEndAfter(ec.parentNode);else r.setEnd(ra.endContainer,ra.endOffset);r.deleteContents();if(isOpera)ed.getWin().scrollTo(0,vp.y);if(bef.firstChild&&bef.firstChild.nodeName==bn)bef.innerHTML=bef.firstChild.innerHTML;if(aft.firstChild&&aft.firstChild.nodeName==bn)aft.innerHTML=aft.firstChild.innerHTML;if(isEmpty(bef))bef.innerHTML='<br />';function appendStyles(e,en){var nl=[],nn,n,i;e.innerHTML='';if(se.keep_styles){n=en;do{if(/^(SPAN|STRONG|B|EM|I|FONT|STRIKE|U)$/.test(n.nodeName)){nn=n.cloneNode(false);dom.setAttrib(nn,'id','');nl.push(nn);}}while(n=n.parentNode);}if(nl.length>0){for(i=nl.length-1,nn=e;i>=0;i--)nn=nn.appendChild(nl[i]);nl[0].innerHTML=isOpera?'&nbsp;':'<br />';return nl[0];}else e.innerHTML=isOpera?'&nbsp;':'<br />';};if(isEmpty(aft))car=appendStyles(aft,en);if(isOpera&&parseFloat(opera.version())<9.5){r.insertNode(bef);r.insertNode(aft);}else{r.insertNode(aft);r.insertNode(bef);}aft.normalize();bef.normalize();function first(n){return d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false).nextNode()||n;};r=d.createRange();r.selectNodeContents(isGecko?first(car||aft):car||aft);r.collapse(1);s.removeAllRanges();s.addRange(r);y=ed.dom.getPos(aft).y;ch=aft.clientHeight;if(y<vp.y||y+ch>vp.y+vp.h){ed.getWin().scrollTo(0,y<vp.y?y:y-vp.h+25);}return false;},backspaceDelete:function(e,bs){var t=this,ed=t.editor,b=ed.getBody(),n,se=ed.selection,r=se.getRng(),sc=r.startContainer,n,w,tn;if(sc&&ed.dom.isBlock(sc)&&!/^(TD|TH)$/.test(sc.nodeName)&&bs){if(sc.childNodes.length==0||(sc.childNodes.length==1&&sc.firstChild.nodeName=='BR')){n=sc;while((n=n.previousSibling)&&!ed.dom.isBlock(n));if(n){if(sc!=b.firstChild){w=ed.dom.doc.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false);while(tn=w.nextNode())n=tn;r=ed.getDoc().createRange();r.setStart(n,n.nodeValue?n.nodeValue.length:0);r.setEnd(n,n.nodeValue?n.nodeValue.length:0);se.setRng(r);ed.dom.remove(sc);}return Event.cancel(e);}}}function handler(e){var pr;e=e.target;if(e&&e.parentNode&&e.nodeName=='BR'&&(n=t.getParentBlock(e))){pr=e.previousSibling;Event.remove(b,'DOMNodeInserted',handler);if(pr&&pr.nodeType==3&&/\s+$/.test(pr.nodeValue))return;if(e.previousSibling||e.nextSibling)ed.dom.remove(e);}};Event._add(b,'DOMNodeInserted',handler);window.setTimeout(function(){Event._remove(b,'DOMNodeInserted',handler);},1);}});})();(function(){var DOM=tinymce.DOM,Event=tinymce.dom.Event,each=tinymce.each,extend=tinymce.extend;tinymce.create('tinymce.ControlManager',{ControlManager:function(ed,s){var t=this,i;s=s||{};t.editor=ed;t.controls={};t.onAdd=new tinymce.util.Dispatcher(t);t.onPostRender=new tinymce.util.Dispatcher(t);t.prefix=s.prefix||ed.id+'_';t._cls={};t.onPostRender.add(function(){each(t.controls,function(c){c.postRender();});});},get:function(id){return this.controls[this.prefix+id]||this.controls[id];},setActive:function(id,s){var c=null;if(c=this.get(id))c.setActive(s);return c;},setDisabled:function(id,s){var c=null;if(c=this.get(id))c.setDisabled(s);return c;},add:function(c){var t=this;if(c){t.controls[c.id]=c;t.onAdd.dispatch(c,t);}return c;},createControl:function(n){var c,t=this,ed=t.editor;each(ed.plugins,function(p){if(p.createControl){c=p.createControl(n,t);if(c)return false;}});switch(n){case"|":case"separator":return t.createSeparator();}if(!c&&ed.buttons&&(c=ed.buttons[n]))return t.createButton(n,c);return t.add(c);},createDropMenu:function(id,s,cc){var t=this,ed=t.editor,c,bm,v,cls;s=extend({'class':'mceDropDown',constrain:ed.settings.constrain_menus},s);s['class']=s['class']+' '+ed.getParam('skin')+'Skin';if(v=ed.getParam('skin_variant'))s['class']+=' '+ed.getParam('skin')+'Skin'+v.substring(0,1).toUpperCase()+v.substring(1);id=t.prefix+id;cls=cc||t._cls.dropmenu||tinymce.ui.DropMenu;c=t.controls[id]=new cls(id,s);c.onAddItem.add(function(c,o){var s=o.settings;s.title=ed.getLang(s.title,s.title);if(!s.onclick){s.onclick=function(v){ed.execCommand(s.cmd,s.ui||false,s.value);};}});ed.onRemove.add(function(){c.destroy();});if(tinymce.isIE){c.onShowMenu.add(function(){bm=ed.selection.getBookmark(1);});c.onHideMenu.add(function(){if(bm)ed.selection.moveToBookmark(bm);});}return t.add(c);},createListBox:function(id,s,cc){var t=this,ed=t.editor,cmd,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onselect){s.onselect=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}s=extend({title:s.title,'class':'mce_'+id,scope:s.scope,control_manager:t},s);id=t.prefix+id;if(ed.settings.use_native_selects)c=new tinymce.ui.NativeListBox(id,s);else{cls=cc||t._cls.listbox||tinymce.ui.ListBox;c=new cls(id,s);}t.controls[id]=c;if(tinymce.isWebKit){c.onPostRender.add(function(c,n){Event.add(n,'mousedown',function(){ed.bookmark=ed.selection.getBookmark('simple');});Event.add(n,'focus',function(){ed.selection.moveToBookmark(ed.bookmark);ed.bookmark=null;});});}if(c.hideMenu)ed.onMouseDown.add(c.hideMenu,c);return t.add(c);},createButton:function(id,s,cc){var t=this,ed=t.editor,o,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.label=ed.translate(s.label);s.scope=s.scope||ed;if(!s.onclick&&!s.menu_button){s.onclick=function(){ed.execCommand(s.cmd,s.ui||false,s.value);};}s=extend({title:s.title,'class':'mce_'+id,unavailable_prefix:ed.getLang('unavailable',''),scope:s.scope,control_manager:t},s);id=t.prefix+id;if(s.menu_button){cls=cc||t._cls.menubutton||tinymce.ui.MenuButton;c=new cls(id,s);ed.onMouseDown.add(c.hideMenu,c);}else{cls=t._cls.button||tinymce.ui.Button;c=new cls(id,s);}return t.add(c);},createMenuButton:function(id,s,cc){s=s||{};s.menu_button=1;return this.createButton(id,s,cc);},createSplitButton:function(id,s,cc){var t=this,ed=t.editor,cmd,c,cls;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onclick){s.onclick=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}if(!s.onselect){s.onselect=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}s=extend({title:s.title,'class':'mce_'+id,scope:s.scope,control_manager:t},s);id=t.prefix+id;cls=cc||t._cls.splitbutton||tinymce.ui.SplitButton;c=t.add(new cls(id,s));ed.onMouseDown.add(c.hideMenu,c);return c;},createColorSplitButton:function(id,s,cc){var t=this,ed=t.editor,cmd,c,cls,bm;if(t.get(id))return null;s.title=ed.translate(s.title);s.scope=s.scope||ed;if(!s.onclick){s.onclick=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}if(!s.onselect){s.onselect=function(v){ed.execCommand(s.cmd,s.ui||false,v||s.value);};}s=extend({title:s.title,'class':'mce_'+id,'menu_class':ed.getParam('skin')+'Skin',scope:s.scope,more_colors_title:ed.getLang('more_colors')},s);id=t.prefix+id;cls=cc||t._cls.colorsplitbutton||tinymce.ui.ColorSplitButton;c=new cls(id,s);ed.onMouseDown.add(c.hideMenu,c);ed.onRemove.add(function(){c.destroy();});if(tinymce.isIE){c.onShowMenu.add(function(){bm=ed.selection.getBookmark(1);});c.onHideMenu.add(function(){if(bm){ed.selection.moveToBookmark(bm);bm=0;}});}return t.add(c);},createToolbar:function(id,s,cc){var c,t=this,cls;id=t.prefix+id;cls=cc||t._cls.toolbar||tinymce.ui.Toolbar;c=new cls(id,s);if(t.get(id))return null;return t.add(c);},createSeparator:function(cc){var cls=cc||this._cls.separator||tinymce.ui.Separator;return new cls();},setControlType:function(n,c){return this._cls[n.toLowerCase()]=c;},destroy:function(){each(this.controls,function(c){c.destroy();});this.controls=null;}});})();(function(){var Dispatcher=tinymce.util.Dispatcher,each=tinymce.each,isIE=tinymce.isIE,isOpera=tinymce.isOpera;tinymce.create('tinymce.WindowManager',{WindowManager:function(ed){var t=this;t.editor=ed;t.onOpen=new Dispatcher(t);t.onClose=new Dispatcher(t);t.params={};t.features={};},open:function(s,p){var t=this,f='',x,y,mo=t.editor.settings.dialog_type=='modal',w,sw,sh,vp=tinymce.DOM.getViewPort(),u;s=s||{};p=p||{};sw=isOpera?vp.w:screen.width;sh=isOpera?vp.h:screen.height;s.name=s.name||'mc_'+new Date().getTime();s.width=parseInt(s.width||320);s.height=parseInt(s.height||240);s.resizable=true;s.left=s.left||parseInt(sw/ 2.0) - (s.width /2.0);s.top=s.top||parseInt(sh/ 2.0) - (s.height /2.0);p.inline=false;p.mce_width=s.width;p.mce_height=s.height;p.mce_auto_focus=s.auto_focus;if(mo){if(isIE){s.center=true;s.help=false;s.dialogWidth=s.width+'px';s.dialogHeight=s.height+'px';s.scroll=s.scrollbars||false;}}each(s,function(v,k){if(tinymce.is(v,'boolean'))v=v?'yes':'no';if(!/^(name|url)$/.test(k)){if(isIE&&mo)f+=(f?';':'')+k+':'+v;else f+=(f?',':'')+k+'='+v;}});t.features=s;t.params=p;t.onOpen.dispatch(t,s,p);u=s.url||s.file;if(tinymce.relaxedDomain)u+=(u.indexOf('?')==-1?'?':'&')+'mce_rdomain='+tinymce.relaxedDomain;u=tinymce._addVer(u);try{if(isIE&&mo){w=1;window.showModalDialog(u,window,f);}else w=window.open(u,s.name,f);}catch(ex){}if(!w)alert(t.editor.getLang('popup_blocked'));},close:function(w){w.close();this.onClose.dispatch(this);},createInstance:function(cl,a,b,c,d,e){var f=tinymce.resolve(cl);return new f(a,b,c,d,e);},confirm:function(t,cb,s,w){w=w||window;cb.call(s||this,w.confirm(this._decode(this.editor.getLang(t,t))));},alert:function(tx,cb,s,w){var t=this;w=w||window;w.alert(t._decode(t.editor.getLang(tx,tx)));if(cb)cb.call(s||t);},_decode:function(s){return tinymce.DOM.decode(s).replace(/\\n/g,'\n');}});}()); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce4/index.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce4/index.html
deleted file mode 100644
index e6e8551f..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/demo/tinymce4/index.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!doctype html>
-<html lang="en">
-<head>
- <meta charset="utf-8">
- <title>jQuery Validation plugin: integration with TinyMCE</title>
- <script src="../../lib/jquery.js"></script>
- <script src="../../dist/jquery.validate.js"></script>
- <script src="//tinymce.cachefly.net/4.1/tinymce.min.js"></script>
- <script>
- tinymce.init({
- mode: "textareas",
-
- setup: function(editor) {
- editor.on('change', function(e) {
- tinymce.triggerSave();
- $("#" + editor.id).valid();
- });
- }
-
- });
- $(function() {
- var validator = $("#myform").submit(function() {
- // update underlying textarea before submit validation
- tinyMCE.triggerSave();
- }).validate({
- ignore: "",
- rules: {
- title: "required",
- content: "required"
- },
- errorPlacement: function(label, element) {
- // position error label after generated textarea
- if (element.is("textarea")) {
- label.insertAfter(element.next());
- } else {
- label.insertAfter(element)
- }
- }
- });
- validator.focusInvalid = function() {
- // put focus on tinymce on submit validation
- if (this.settings.focusInvalid) {
- try {
- var toFocus = $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []);
- if (toFocus.is("textarea")) {
- tinyMCE.get(toFocus.attr("id")).focus();
- } else {
- toFocus.filter(":visible").focus();
- }
- } catch (e) {
- // ignore IE throwing errors when focusing hidden elements
- }
- }
- }
- })
- </script>
- <!-- /TinyMCE -->
-</head>
-<body>
-<form id="myform" action="">
- <h3>TinyMCE4 and Validation Plugin integration example</h3>
- <label>Some other field</label>
- <input name="title">
- <br>
- <label>Some richt text</label>
- <textarea id="content" name="content" rows="15" cols="80" style="width: 80%"></textarea>
- <br>
- <input type="submit" name="save" value="Submit">
-</form>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery-1.11.1.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery-1.11.1.js
deleted file mode 100644
index d4b67f7e..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery-1.11.1.js
+++ /dev/null
@@ -1,10308 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.11.1
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-05-01T17:42Z
- */
-
-(function( global, factory ) {
-
- if ( typeof module === "object" && typeof module.exports === "object" ) {
- // For CommonJS and CommonJS-like environments where a proper window is present,
- // execute the factory and get jQuery
- // For environments that do not inherently posses a window with a document
- // (such as Node.js), expose a jQuery-making factory as module.exports
- // This accentuates the need for the creation of a real window
- // e.g. var jQuery = require("jquery")(window);
- // See ticket #14549 for more info
- module.exports = global.document ?
- factory( global, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return factory( w );
- };
- } else {
- factory( global );
- }
-
-// Pass this if window is not defined yet
-}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Can't do this because several apps including ASP.NET trace
-// the stack via arguments.caller.callee and Firefox dies if
-// you try to trace through "use strict" call chains. (#13335)
-// Support: Firefox 18+
-//
-
-var deletedIds = [];
-
-var slice = deletedIds.slice;
-
-var concat = deletedIds.concat;
-
-var push = deletedIds.push;
-
-var indexOf = deletedIds.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var support = {};
-
-
-
-var
- version = "1.11.1",
-
- // Define a local copy of jQuery
- jQuery = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- // Need init if jQuery is called (just allow error to be thrown if not included)
- return new jQuery.fn.init( selector, context );
- },
-
- // Support: Android<4.1, IE<9
- // Make sure we trim BOM and NBSP
- rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
- // Matches dashed string for camelizing
- rmsPrefix = /^-ms-/,
- rdashAlpha = /-([\da-z])/gi,
-
- // Used by jQuery.camelCase as callback to replace()
- fcamelCase = function( all, letter ) {
- return letter.toUpperCase();
- };
-
-jQuery.fn = jQuery.prototype = {
- // The current version of jQuery being used
- jquery: version,
-
- constructor: jQuery,
-
- // Start with an empty selector
- selector: "",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- toArray: function() {
- return slice.call( this );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num != null ?
-
- // Return just the one element from the set
- ( num < 0 ? this[ num + this.length ] : this[ num ] ) :
-
- // Return all the elements in a clean array
- slice.call( this );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems ) {
-
- // Build a new jQuery matched element set
- var ret = jQuery.merge( this.constructor(), elems );
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
- ret.context = this.context;
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- // (You can seed the arguments with an array of args, but this is
- // only used internally.)
- each: function( callback, args ) {
- return jQuery.each( this, callback, args );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function( elem, i ) {
- return callback.call( elem, i, elem );
- }));
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ) );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- eq: function( i ) {
- var len = this.length,
- j = +i + ( i < 0 ? len : 0 );
- return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
- },
-
- end: function() {
- return this.prevObject || this.constructor(null);
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: deletedIds.sort,
- splice: deletedIds.splice
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
- var src, copyIsArray, copy, name, options, clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
-
- // skip the boolean and the target
- target = arguments[ i ] || {};
- i++;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
- target = {};
- }
-
- // extend jQuery itself if only one argument is passed
- if ( i === length ) {
- target = this;
- i--;
- }
-
- for ( ; i < length; i++ ) {
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null ) {
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray(src) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject(src) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend({
- // Unique for each copy of jQuery on the page
- expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
-
- // Assume jQuery is ready without the ready module
- isReady: true,
-
- error: function( msg ) {
- throw new Error( msg );
- },
-
- noop: function() {},
-
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return jQuery.type(obj) === "function";
- },
-
- isArray: Array.isArray || function( obj ) {
- return jQuery.type(obj) === "array";
- },
-
- isWindow: function( obj ) {
- /* jshint eqeqeq: false */
- return obj != null && obj == obj.window;
- },
-
- isNumeric: function( obj ) {
- // parseFloat NaNs numeric-cast false positives (null|true|false|"")
- // ...but misinterprets leading-number strings, particularly hex literals ("0x...")
- // subtraction forces infinities to NaN
- return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0;
- },
-
- isEmptyObject: function( obj ) {
- var name;
- for ( name in obj ) {
- return false;
- }
- return true;
- },
-
- isPlainObject: function( obj ) {
- var key;
-
- // Must be an Object.
- // Because of IE, we also have to check the presence of the constructor property.
- // Make sure that DOM nodes and window objects don't pass through, as well
- if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- try {
- // Not own constructor property must be Object
- if ( obj.constructor &&
- !hasOwn.call(obj, "constructor") &&
- !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
- return false;
- }
- } catch ( e ) {
- // IE8,9 Will throw exceptions on certain host objects #9897
- return false;
- }
-
- // Support: IE<9
- // Handle iteration over inherited properties before own properties.
- if ( support.ownLast ) {
- for ( key in obj ) {
- return hasOwn.call( obj, key );
- }
- }
-
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own.
- for ( key in obj ) {}
-
- return key === undefined || hasOwn.call( obj, key );
- },
-
- type: function( obj ) {
- if ( obj == null ) {
- return obj + "";
- }
- return typeof obj === "object" || typeof obj === "function" ?
- class2type[ toString.call(obj) ] || "object" :
- typeof obj;
- },
-
- // Evaluates a script in a global context
- // Workarounds based on findings by Jim Driscoll
- // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
- globalEval: function( data ) {
- if ( data && jQuery.trim( data ) ) {
- // We use execScript on Internet Explorer
- // We use an anonymous function so that context is window
- // rather than jQuery in Firefox
- ( window.execScript || function( data ) {
- window[ "eval" ].call( window, data );
- } )( data );
- }
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Microsoft forgot to hump their vendor prefix (#9572)
- camelCase: function( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
- },
-
- // args is for internal usage only
- each: function( obj, callback, args ) {
- var value,
- i = 0,
- length = obj.length,
- isArray = isArraylike( obj );
-
- if ( args ) {
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback.apply( obj[ i ], args );
-
- if ( value === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- value = callback.apply( obj[ i ], args );
-
- if ( value === false ) {
- break;
- }
- }
- }
-
- // A special, fast, case for the most common use of each
- } else {
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback.call( obj[ i ], i, obj[ i ] );
-
- if ( value === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- value = callback.call( obj[ i ], i, obj[ i ] );
-
- if ( value === false ) {
- break;
- }
- }
- }
- }
-
- return obj;
- },
-
- // Support: Android<4.1, IE<9
- trim: function( text ) {
- return text == null ?
- "" :
- ( text + "" ).replace( rtrim, "" );
- },
-
- // results is for internal usage only
- makeArray: function( arr, results ) {
- var ret = results || [];
-
- if ( arr != null ) {
- if ( isArraylike( Object(arr) ) ) {
- jQuery.merge( ret,
- typeof arr === "string" ?
- [ arr ] : arr
- );
- } else {
- push.call( ret, arr );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, arr, i ) {
- var len;
-
- if ( arr ) {
- if ( indexOf ) {
- return indexOf.call( arr, elem, i );
- }
-
- len = arr.length;
- i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
- for ( ; i < len; i++ ) {
- // Skip accessing in sparse arrays
- if ( i in arr && arr[ i ] === elem ) {
- return i;
- }
- }
- }
-
- return -1;
- },
-
- merge: function( first, second ) {
- var len = +second.length,
- j = 0,
- i = first.length;
-
- while ( j < len ) {
- first[ i++ ] = second[ j++ ];
- }
-
- // Support: IE<9
- // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
- if ( len !== len ) {
- while ( second[j] !== undefined ) {
- first[ i++ ] = second[ j++ ];
- }
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, invert ) {
- var callbackInverse,
- matches = [],
- i = 0,
- length = elems.length,
- callbackExpect = !invert;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( ; i < length; i++ ) {
- callbackInverse = !callback( elems[ i ], i );
- if ( callbackInverse !== callbackExpect ) {
- matches.push( elems[ i ] );
- }
- }
-
- return matches;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var value,
- i = 0,
- length = elems.length,
- isArray = isArraylike( elems ),
- ret = [];
-
- // Go through the array, translating each of the items to their new values
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( i in elems ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret.push( value );
- }
- }
- }
-
- // Flatten any nested arrays
- return concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- var args, proxy, tmp;
-
- if ( typeof context === "string" ) {
- tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- args = slice.call( arguments, 2 );
- proxy = function() {
- return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
- return proxy;
- },
-
- now: function() {
- return +( new Date() );
- },
-
- // jQuery.support is not used in Core but other projects attach their
- // properties to it so it needs to exist.
- support: support
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-function isArraylike( obj ) {
- var length = obj.length,
- type = jQuery.type( obj );
-
- if ( type === "function" || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- if ( obj.nodeType === 1 && length ) {
- return true;
- }
-
- return type === "array" || length === 0 ||
- typeof length === "number" && length > 0 && ( length - 1 ) in obj;
-}
-var Sizzle =
-/*!
- * Sizzle CSS Selector Engine v1.10.19
- * http://sizzlejs.com/
- *
- * Copyright 2013 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2014-04-18
- */
-(function( window ) {
-
-var i,
- support,
- Expr,
- getText,
- isXML,
- tokenize,
- compile,
- select,
- outermostContext,
- sortInput,
- hasDuplicate,
-
- // Local document vars
- setDocument,
- document,
- docElem,
- documentIsHTML,
- rbuggyQSA,
- rbuggyMatches,
- matches,
- contains,
-
- // Instance-specific data
- expando = "sizzle" + -(new Date()),
- preferredDoc = window.document,
- dirruns = 0,
- done = 0,
- classCache = createCache(),
- tokenCache = createCache(),
- compilerCache = createCache(),
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- }
- return 0;
- },
-
- // General-purpose constants
- strundefined = typeof undefined,
- MAX_NEGATIVE = 1 << 31,
-
- // Instance methods
- hasOwn = ({}).hasOwnProperty,
- arr = [],
- pop = arr.pop,
- push_native = arr.push,
- push = arr.push,
- slice = arr.slice,
- // Use a stripped-down indexOf if we can't use a native one
- indexOf = arr.indexOf || function( elem ) {
- var i = 0,
- len = this.length;
- for ( ; i < len; i++ ) {
- if ( this[i] === elem ) {
- return i;
- }
- }
- return -1;
- },
-
- booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
- // Regular expressions
-
- // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
- whitespace = "[\\x20\\t\\r\\n\\f]",
- // http://www.w3.org/TR/css3-syntax/#characters
- characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
-
- // Loosely modeled on CSS identifier characters
- // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
- // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
- identifier = characterEncoding.replace( "w", "w#" ),
-
- // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
- attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace +
- // Operator (capture 2)
- "*([*^$|!~]?=)" + whitespace +
- // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
- "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
- "*\\]",
-
- pseudos = ":(" + characterEncoding + ")(?:\\((" +
- // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
- // 1. quoted (capture 3; capture 4 or capture 5)
- "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
- // 2. simple (capture 6)
- "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
- // 3. anything else (capture 2)
- ".*" +
- ")\\)|)",
-
- // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
- rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
- rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
-
- rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
-
- rpseudo = new RegExp( pseudos ),
- ridentifier = new RegExp( "^" + identifier + "$" ),
-
- matchExpr = {
- "ID": new RegExp( "^#(" + characterEncoding + ")" ),
- "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
- "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
- "ATTR": new RegExp( "^" + attributes ),
- "PSEUDO": new RegExp( "^" + pseudos ),
- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
- "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
- "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
- "bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
- // For use in libraries implementing .is()
- // We use this for POS matching in `select`
- "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
- whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
- },
-
- rinputs = /^(?:input|select|textarea|button)$/i,
- rheader = /^h\d$/i,
-
- rnative = /^[^{]+\{\s*\[native \w/,
-
- // Easily-parseable/retrievable ID or TAG or CLASS selectors
- rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
- rsibling = /[+~]/,
- rescape = /'|\\/g,
-
- // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
- runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
- funescape = function( _, escaped, escapedWhitespace ) {
- var high = "0x" + escaped - 0x10000;
- // NaN means non-codepoint
- // Support: Firefox<24
- // Workaround erroneous numeric interpretation of +"0x"
- return high !== high || escapedWhitespace ?
- escaped :
- high < 0 ?
- // BMP codepoint
- String.fromCharCode( high + 0x10000 ) :
- // Supplemental Plane codepoint (surrogate pair)
- String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
- };
-
-// Optimize for push.apply( _, NodeList )
-try {
- push.apply(
- (arr = slice.call( preferredDoc.childNodes )),
- preferredDoc.childNodes
- );
- // Support: Android<4.0
- // Detect silently failing push.apply
- arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
- push = { apply: arr.length ?
-
- // Leverage slice if possible
- function( target, els ) {
- push_native.apply( target, slice.call(els) );
- } :
-
- // Support: IE<9
- // Otherwise append directly
- function( target, els ) {
- var j = target.length,
- i = 0;
- // Can't trust NodeList.length
- while ( (target[j++] = els[i++]) ) {}
- target.length = j - 1;
- }
- };
-}
-
-function Sizzle( selector, context, results, seed ) {
- var match, elem, m, nodeType,
- // QSA vars
- i, groups, old, nid, newContext, newSelector;
-
- if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
- setDocument( context );
- }
-
- context = context || document;
- results = results || [];
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
- return [];
- }
-
- if ( documentIsHTML && !seed ) {
-
- // Shortcuts
- if ( (match = rquickExpr.exec( selector )) ) {
- // Speed-up: Sizzle("#ID")
- if ( (m = match[1]) ) {
- if ( nodeType === 9 ) {
- elem = context.getElementById( m );
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document (jQuery #6963)
- if ( elem && elem.parentNode ) {
- // Handle the case where IE, Opera, and Webkit return items
- // by name instead of ID
- if ( elem.id === m ) {
- results.push( elem );
- return results;
- }
- } else {
- return results;
- }
- } else {
- // Context is not a document
- if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
- contains( context, elem ) && elem.id === m ) {
- results.push( elem );
- return results;
- }
- }
-
- // Speed-up: Sizzle("TAG")
- } else if ( match[2] ) {
- push.apply( results, context.getElementsByTagName( selector ) );
- return results;
-
- // Speed-up: Sizzle(".CLASS")
- } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) {
- push.apply( results, context.getElementsByClassName( m ) );
- return results;
- }
- }
-
- // QSA path
- if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
- nid = old = expando;
- newContext = context;
- newSelector = nodeType === 9 && selector;
-
- // qSA works strangely on Element-rooted queries
- // We can work around this by specifying an extra ID on the root
- // and working up from there (Thanks to Andrew Dupont for the technique)
- // IE 8 doesn't work on object elements
- if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- groups = tokenize( selector );
-
- if ( (old = context.getAttribute("id")) ) {
- nid = old.replace( rescape, "\\$&" );
- } else {
- context.setAttribute( "id", nid );
- }
- nid = "[id='" + nid + "'] ";
-
- i = groups.length;
- while ( i-- ) {
- groups[i] = nid + toSelector( groups[i] );
- }
- newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context;
- newSelector = groups.join(",");
- }
-
- if ( newSelector ) {
- try {
- push.apply( results,
- newContext.querySelectorAll( newSelector )
- );
- return results;
- } catch(qsaError) {
- } finally {
- if ( !old ) {
- context.removeAttribute("id");
- }
- }
- }
- }
- }
-
- // All others
- return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
- * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- * deleting the oldest entry
- */
-function createCache() {
- var keys = [];
-
- function cache( key, value ) {
- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
- if ( keys.push( key + " " ) > Expr.cacheLength ) {
- // Only keep the most recent entries
- delete cache[ keys.shift() ];
- }
- return (cache[ key + " " ] = value);
- }
- return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
- fn[ expando ] = true;
- return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
- */
-function assert( fn ) {
- var div = document.createElement("div");
-
- try {
- return !!fn( div );
- } catch (e) {
- return false;
- } finally {
- // Remove from its parent by default
- if ( div.parentNode ) {
- div.parentNode.removeChild( div );
- }
- // release memory in IE
- div = null;
- }
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
-function addHandle( attrs, handler ) {
- var arr = attrs.split("|"),
- i = attrs.length;
-
- while ( i-- ) {
- Expr.attrHandle[ arr[i] ] = handler;
- }
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
-function siblingCheck( a, b ) {
- var cur = b && a,
- diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
- ( ~b.sourceIndex || MAX_NEGATIVE ) -
- ( ~a.sourceIndex || MAX_NEGATIVE );
-
- // Use IE sourceIndex if available on both nodes
- if ( diff ) {
- return diff;
- }
-
- // Check if b follows a
- if ( cur ) {
- while ( (cur = cur.nextSibling) ) {
- if ( cur === b ) {
- return -1;
- }
- }
- }
-
- return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && elem.type === type;
- };
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
- return markFunction(function( argument ) {
- argument = +argument;
- return markFunction(function( seed, matches ) {
- var j,
- matchIndexes = fn( [], seed.length, argument ),
- i = matchIndexes.length;
-
- // Match elements found at the specified indexes
- while ( i-- ) {
- if ( seed[ (j = matchIndexes[i]) ] ) {
- seed[j] = !(matches[j] = seed[j]);
- }
- }
- });
- });
-}
-
-/**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
-function testContext( context ) {
- return context && typeof context.getElementsByTagName !== strundefined && context;
-}
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
-isXML = Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = elem && (elem.ownerDocument || elem).documentElement;
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
- var hasCompare,
- doc = node ? node.ownerDocument || node : preferredDoc,
- parent = doc.defaultView;
-
- // If no document and documentElement is available, return
- if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
- return document;
- }
-
- // Set our document
- document = doc;
- docElem = doc.documentElement;
-
- // Support tests
- documentIsHTML = !isXML( doc );
-
- // Support: IE>8
- // If iframe document is assigned to "document" variable and if iframe has been reloaded,
- // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936
- // IE6-8 do not support the defaultView property so parent will be undefined
- if ( parent && parent !== parent.top ) {
- // IE11 does not have attachEvent, so all must suffer
- if ( parent.addEventListener ) {
- parent.addEventListener( "unload", function() {
- setDocument();
- }, false );
- } else if ( parent.attachEvent ) {
- parent.attachEvent( "onunload", function() {
- setDocument();
- });
- }
- }
-
- /* Attributes
- ---------------------------------------------------------------------- */
-
- // Support: IE<8
- // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans)
- support.attributes = assert(function( div ) {
- div.className = "i";
- return !div.getAttribute("className");
- });
-
- /* getElement(s)By*
- ---------------------------------------------------------------------- */
-
- // Check if getElementsByTagName("*") returns only elements
- support.getElementsByTagName = assert(function( div ) {
- div.appendChild( doc.createComment("") );
- return !div.getElementsByTagName("*").length;
- });
-
- // Check if getElementsByClassName can be trusted
- support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) {
- div.innerHTML = "<div class='a'></div><div class='a i'></div>";
-
- // Support: Safari<4
- // Catch class over-caching
- div.firstChild.className = "i";
- // Support: Opera<10
- // Catch gEBCN failure to find non-leading classes
- return div.getElementsByClassName("i").length === 2;
- });
-
- // Support: IE<10
- // Check if getElementById returns elements by name
- // The broken getElementById methods don't pick up programatically-set names,
- // so use a roundabout getElementsByName test
- support.getById = assert(function( div ) {
- docElem.appendChild( div ).id = expando;
- return !doc.getElementsByName || !doc.getElementsByName( expando ).length;
- });
-
- // ID find and filter
- if ( support.getById ) {
- Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== strundefined && documentIsHTML ) {
- var m = context.getElementById( id );
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- return m && m.parentNode ? [ m ] : [];
- }
- };
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- return elem.getAttribute("id") === attrId;
- };
- };
- } else {
- // Support: IE6/7
- // getElementById is not reliable as a find shortcut
- delete Expr.find["ID"];
-
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
- return node && node.value === attrId;
- };
- };
- }
-
- // Tag
- Expr.find["TAG"] = support.getElementsByTagName ?
- function( tag, context ) {
- if ( typeof context.getElementsByTagName !== strundefined ) {
- return context.getElementsByTagName( tag );
- }
- } :
- function( tag, context ) {
- var elem,
- tmp = [],
- i = 0,
- results = context.getElementsByTagName( tag );
-
- // Filter out possible comments
- if ( tag === "*" ) {
- while ( (elem = results[i++]) ) {
- if ( elem.nodeType === 1 ) {
- tmp.push( elem );
- }
- }
-
- return tmp;
- }
- return results;
- };
-
- // Class
- Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
- if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) {
- return context.getElementsByClassName( className );
- }
- };
-
- /* QSA/matchesSelector
- ---------------------------------------------------------------------- */
-
- // QSA and matchesSelector support
-
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
- rbuggyMatches = [];
-
- // qSa(:focus) reports false when true (Chrome 21)
- // We allow this because of a bug in IE8/9 that throws an error
- // whenever `document.activeElement` is accessed on an iframe
- // So, we allow :focus to pass through QSA all the time to avoid the IE error
- // See http://bugs.jquery.com/ticket/13378
- rbuggyQSA = [];
-
- if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) {
- // Build QSA regex
- // Regex strategy adopted from Diego Perini
- assert(function( div ) {
- // Select is set to empty string on purpose
- // This is to test IE's treatment of not explicitly
- // setting a boolean content attribute,
- // since its presence should be enough
- // http://bugs.jquery.com/ticket/12359
- div.innerHTML = "<select msallowclip=''><option selected=''></option></select>";
-
- // Support: IE8, Opera 11-12.16
- // Nothing should be selected when empty strings follow ^= or $= or *=
- // The test attribute must be unknown in Opera but "safe" for WinRT
- // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
- if ( div.querySelectorAll("[msallowclip^='']").length ) {
- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
- }
-
- // Support: IE8
- // Boolean attributes and "value" are not treated correctly
- if ( !div.querySelectorAll("[selected]").length ) {
- rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
- }
-
- // Webkit/Opera - :checked should return selected option elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- // IE8 throws error here and will not see later tests
- if ( !div.querySelectorAll(":checked").length ) {
- rbuggyQSA.push(":checked");
- }
- });
-
- assert(function( div ) {
- // Support: Windows 8 Native Apps
- // The type and name attributes are restricted during .innerHTML assignment
- var input = doc.createElement("input");
- input.setAttribute( "type", "hidden" );
- div.appendChild( input ).setAttribute( "name", "D" );
-
- // Support: IE8
- // Enforce case-sensitivity of name attribute
- if ( div.querySelectorAll("[name=d]").length ) {
- rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
- }
-
- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
- // IE8 throws error here and will not see later tests
- if ( !div.querySelectorAll(":enabled").length ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- // Opera 10-11 does not throw on post-comma invalid pseudos
- div.querySelectorAll("*,:x");
- rbuggyQSA.push(",.*:");
- });
- }
-
- if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
- docElem.webkitMatchesSelector ||
- docElem.mozMatchesSelector ||
- docElem.oMatchesSelector ||
- docElem.msMatchesSelector) )) ) {
-
- assert(function( div ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9)
- support.disconnectedMatch = matches.call( div, "div" );
-
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( div, "[s!='']:x" );
- rbuggyMatches.push( "!=", pseudos );
- });
- }
-
- rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
- rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
- /* Contains
- ---------------------------------------------------------------------- */
- hasCompare = rnative.test( docElem.compareDocumentPosition );
-
- // Element contains another
- // Purposefully does not implement inclusive descendent
- // As in, an element does not contain itself
- contains = hasCompare || rnative.test( docElem.contains ) ?
- function( a, b ) {
- var adown = a.nodeType === 9 ? a.documentElement : a,
- bup = b && b.parentNode;
- return a === bup || !!( bup && bup.nodeType === 1 && (
- adown.contains ?
- adown.contains( bup ) :
- a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
- ));
- } :
- function( a, b ) {
- if ( b ) {
- while ( (b = b.parentNode) ) {
- if ( b === a ) {
- return true;
- }
- }
- }
- return false;
- };
-
- /* Sorting
- ---------------------------------------------------------------------- */
-
- // Document order sorting
- sortOrder = hasCompare ?
- function( a, b ) {
-
- // Flag for duplicate removal
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- // Sort on method existence if only one input has compareDocumentPosition
- var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
- if ( compare ) {
- return compare;
- }
-
- // Calculate position if both inputs belong to the same document
- compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
- a.compareDocumentPosition( b ) :
-
- // Otherwise we know they are disconnected
- 1;
-
- // Disconnected nodes
- if ( compare & 1 ||
- (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
- // Choose the first element that is related to our preferred document
- if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
- return -1;
- }
- if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
- return 1;
- }
-
- // Maintain original order
- return sortInput ?
- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
- 0;
- }
-
- return compare & 4 ? -1 : 1;
- } :
- function( a, b ) {
- // Exit early if the nodes are identical
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- var cur,
- i = 0,
- aup = a.parentNode,
- bup = b.parentNode,
- ap = [ a ],
- bp = [ b ];
-
- // Parentless nodes are either documents or disconnected
- if ( !aup || !bup ) {
- return a === doc ? -1 :
- b === doc ? 1 :
- aup ? -1 :
- bup ? 1 :
- sortInput ?
- ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :
- 0;
-
- // If the nodes are siblings, we can do a quick check
- } else if ( aup === bup ) {
- return siblingCheck( a, b );
- }
-
- // Otherwise we need full lists of their ancestors for comparison
- cur = a;
- while ( (cur = cur.parentNode) ) {
- ap.unshift( cur );
- }
- cur = b;
- while ( (cur = cur.parentNode) ) {
- bp.unshift( cur );
- }
-
- // Walk down the tree looking for a discrepancy
- while ( ap[i] === bp[i] ) {
- i++;
- }
-
- return i ?
- // Do a sibling check if the nodes have a common ancestor
- siblingCheck( ap[i], bp[i] ) :
-
- // Otherwise nodes in our document sort first
- ap[i] === preferredDoc ? -1 :
- bp[i] === preferredDoc ? 1 :
- 0;
- };
-
- return doc;
-};
-
-Sizzle.matches = function( expr, elements ) {
- return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- // Make sure that attribute selectors are quoted
- expr = expr.replace( rattributeQuotes, "='$1']" );
-
- if ( support.matchesSelector && documentIsHTML &&
- ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
- ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {
-
- try {
- var ret = matches.call( elem, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || support.disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9
- elem.document && elem.document.nodeType !== 11 ) {
- return ret;
- }
- } catch(e) {}
- }
-
- return Sizzle( expr, document, null, [ elem ] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
- // Set document vars if needed
- if ( ( context.ownerDocument || context ) !== document ) {
- setDocument( context );
- }
- return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- var fn = Expr.attrHandle[ name.toLowerCase() ],
- // Don't get fooled by Object.prototype properties (jQuery #13807)
- val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
- fn( elem, name, !documentIsHTML ) :
- undefined;
-
- return val !== undefined ?
- val :
- support.attributes || !documentIsHTML ?
- elem.getAttribute( name ) :
- (val = elem.getAttributeNode(name)) && val.specified ?
- val.value :
- null;
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
- var elem,
- duplicates = [],
- j = 0,
- i = 0;
-
- // Unless we *know* we can detect duplicates, assume their presence
- hasDuplicate = !support.detectDuplicates;
- sortInput = !support.sortStable && results.slice( 0 );
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- while ( (elem = results[i++]) ) {
- if ( elem === results[ i ] ) {
- j = duplicates.push( i );
- }
- }
- while ( j-- ) {
- results.splice( duplicates[ j ], 1 );
- }
- }
-
- // Clear input after sorting to release objects
- // See https://github.com/jquery/sizzle/pull/225
- sortInput = null;
-
- return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
- var node,
- ret = "",
- i = 0,
- nodeType = elem.nodeType;
-
- if ( !nodeType ) {
- // If no nodeType, this is expected to be an array
- while ( (node = elem[i++]) ) {
- // Do not traverse comment nodes
- ret += getText( node );
- }
- } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
- // Use textContent for elements
- // innerText usage removed for consistency of new lines (jQuery #11153)
- if ( typeof elem.textContent === "string" ) {
- return elem.textContent;
- } else {
- // Traverse its children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
- // Do not include comment or processing instruction nodes
-
- return ret;
-};
-
-Expr = Sizzle.selectors = {
-
- // Can be adjusted by the user
- cacheLength: 50,
-
- createPseudo: markFunction,
-
- match: matchExpr,
-
- attrHandle: {},
-
- find: {},
-
- relative: {
- ">": { dir: "parentNode", first: true },
- " ": { dir: "parentNode" },
- "+": { dir: "previousSibling", first: true },
- "~": { dir: "previousSibling" }
- },
-
- preFilter: {
- "ATTR": function( match ) {
- match[1] = match[1].replace( runescape, funescape );
-
- // Move the given value to match[3] whether quoted or unquoted
- match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
-
- if ( match[2] === "~=" ) {
- match[3] = " " + match[3] + " ";
- }
-
- return match.slice( 0, 4 );
- },
-
- "CHILD": function( match ) {
- /* matches from matchExpr["CHILD"]
- 1 type (only|nth|...)
- 2 what (child|of-type)
- 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
- 4 xn-component of xn+y argument ([+-]?\d*n|)
- 5 sign of xn-component
- 6 x of xn-component
- 7 sign of y-component
- 8 y of y-component
- */
- match[1] = match[1].toLowerCase();
-
- if ( match[1].slice( 0, 3 ) === "nth" ) {
- // nth-* requires argument
- if ( !match[3] ) {
- Sizzle.error( match[0] );
- }
-
- // numeric x and y parameters for Expr.filter.CHILD
- // remember that false/true cast respectively to 0/1
- match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
- match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
- // other types prohibit arguments
- } else if ( match[3] ) {
- Sizzle.error( match[0] );
- }
-
- return match;
- },
-
- "PSEUDO": function( match ) {
- var excess,
- unquoted = !match[6] && match[2];
-
- if ( matchExpr["CHILD"].test( match[0] ) ) {
- return null;
- }
-
- // Accept quoted arguments as-is
- if ( match[3] ) {
- match[2] = match[4] || match[5] || "";
-
- // Strip excess characters from unquoted arguments
- } else if ( unquoted && rpseudo.test( unquoted ) &&
- // Get excess from tokenize (recursively)
- (excess = tokenize( unquoted, true )) &&
- // advance to the next closing parenthesis
- (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
- // excess is a negative index
- match[0] = match[0].slice( 0, excess );
- match[2] = unquoted.slice( 0, excess );
- }
-
- // Return only captures needed by the pseudo filter method (type and argument)
- return match.slice( 0, 3 );
- }
- },
-
- filter: {
-
- "TAG": function( nodeNameSelector ) {
- var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
- return nodeNameSelector === "*" ?
- function() { return true; } :
- function( elem ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
- };
- },
-
- "CLASS": function( className ) {
- var pattern = classCache[ className + " " ];
-
- return pattern ||
- (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
- classCache( className, function( elem ) {
- return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" );
- });
- },
-
- "ATTR": function( name, operator, check ) {
- return function( elem ) {
- var result = Sizzle.attr( elem, name );
-
- if ( result == null ) {
- return operator === "!=";
- }
- if ( !operator ) {
- return true;
- }
-
- result += "";
-
- return operator === "=" ? result === check :
- operator === "!=" ? result !== check :
- operator === "^=" ? check && result.indexOf( check ) === 0 :
- operator === "*=" ? check && result.indexOf( check ) > -1 :
- operator === "$=" ? check && result.slice( -check.length ) === check :
- operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
- operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
- false;
- };
- },
-
- "CHILD": function( type, what, argument, first, last ) {
- var simple = type.slice( 0, 3 ) !== "nth",
- forward = type.slice( -4 ) !== "last",
- ofType = what === "of-type";
-
- return first === 1 && last === 0 ?
-
- // Shortcut for :nth-*(n)
- function( elem ) {
- return !!elem.parentNode;
- } :
-
- function( elem, context, xml ) {
- var cache, outerCache, node, diff, nodeIndex, start,
- dir = simple !== forward ? "nextSibling" : "previousSibling",
- parent = elem.parentNode,
- name = ofType && elem.nodeName.toLowerCase(),
- useCache = !xml && !ofType;
-
- if ( parent ) {
-
- // :(first|last|only)-(child|of-type)
- if ( simple ) {
- while ( dir ) {
- node = elem;
- while ( (node = node[ dir ]) ) {
- if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
- return false;
- }
- }
- // Reverse direction for :only-* (if we haven't yet done so)
- start = dir = type === "only" && !start && "nextSibling";
- }
- return true;
- }
-
- start = [ forward ? parent.firstChild : parent.lastChild ];
-
- // non-xml :nth-child(...) stores cache data on `parent`
- if ( forward && useCache ) {
- // Seek `elem` from a previously-cached index
- outerCache = parent[ expando ] || (parent[ expando ] = {});
- cache = outerCache[ type ] || [];
- nodeIndex = cache[0] === dirruns && cache[1];
- diff = cache[0] === dirruns && cache[2];
- node = nodeIndex && parent.childNodes[ nodeIndex ];
-
- while ( (node = ++nodeIndex && node && node[ dir ] ||
-
- // Fallback to seeking `elem` from the start
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- // When found, cache indexes on `parent` and break
- if ( node.nodeType === 1 && ++diff && node === elem ) {
- outerCache[ type ] = [ dirruns, nodeIndex, diff ];
- break;
- }
- }
-
- // Use previously-cached element index if available
- } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
- diff = cache[1];
-
- // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
- } else {
- // Use the same loop as above to seek `elem` from the start
- while ( (node = ++nodeIndex && node && node[ dir ] ||
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
- // Cache the index of each encountered element
- if ( useCache ) {
- (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
- }
-
- if ( node === elem ) {
- break;
- }
- }
- }
- }
-
- // Incorporate the offset, then check against cycle size
- diff -= last;
- return diff === first || ( diff % first === 0 && diff / first >= 0 );
- }
- };
- },
-
- "PSEUDO": function( pseudo, argument ) {
- // pseudo-class names are case-insensitive
- // http://www.w3.org/TR/selectors/#pseudo-classes
- // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
- // Remember that setFilters inherits from pseudos
- var args,
- fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
- Sizzle.error( "unsupported pseudo: " + pseudo );
-
- // The user may use createPseudo to indicate that
- // arguments are needed to create the filter function
- // just as Sizzle does
- if ( fn[ expando ] ) {
- return fn( argument );
- }
-
- // But maintain support for old signatures
- if ( fn.length > 1 ) {
- args = [ pseudo, pseudo, "", argument ];
- return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
- markFunction(function( seed, matches ) {
- var idx,
- matched = fn( seed, argument ),
- i = matched.length;
- while ( i-- ) {
- idx = indexOf.call( seed, matched[i] );
- seed[ idx ] = !( matches[ idx ] = matched[i] );
- }
- }) :
- function( elem ) {
- return fn( elem, 0, args );
- };
- }
-
- return fn;
- }
- },
-
- pseudos: {
- // Potentially complex pseudos
- "not": markFunction(function( selector ) {
- // Trim the selector passed to compile
- // to avoid treating leading and trailing
- // spaces as combinators
- var input = [],
- results = [],
- matcher = compile( selector.replace( rtrim, "$1" ) );
-
- return matcher[ expando ] ?
- markFunction(function( seed, matches, context, xml ) {
- var elem,
- unmatched = matcher( seed, null, xml, [] ),
- i = seed.length;
-
- // Match elements unmatched by `matcher`
- while ( i-- ) {
- if ( (elem = unmatched[i]) ) {
- seed[i] = !(matches[i] = elem);
- }
- }
- }) :
- function( elem, context, xml ) {
- input[0] = elem;
- matcher( input, null, xml, results );
- return !results.pop();
- };
- }),
-
- "has": markFunction(function( selector ) {
- return function( elem ) {
- return Sizzle( selector, elem ).length > 0;
- };
- }),
-
- "contains": markFunction(function( text ) {
- return function( elem ) {
- return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
- };
- }),
-
- // "Whether an element is represented by a :lang() selector
- // is based solely on the element's language value
- // being equal to the identifier C,
- // or beginning with the identifier C immediately followed by "-".
- // The matching of C against the element's language value is performed case-insensitively.
- // The identifier C does not have to be a valid language name."
- // http://www.w3.org/TR/selectors/#lang-pseudo
- "lang": markFunction( function( lang ) {
- // lang value must be a valid identifier
- if ( !ridentifier.test(lang || "") ) {
- Sizzle.error( "unsupported lang: " + lang );
- }
- lang = lang.replace( runescape, funescape ).toLowerCase();
- return function( elem ) {
- var elemLang;
- do {
- if ( (elemLang = documentIsHTML ?
- elem.lang :
- elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
-
- elemLang = elemLang.toLowerCase();
- return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
- }
- } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
- return false;
- };
- }),
-
- // Miscellaneous
- "target": function( elem ) {
- var hash = window.location && window.location.hash;
- return hash && hash.slice( 1 ) === elem.id;
- },
-
- "root": function( elem ) {
- return elem === docElem;
- },
-
- "focus": function( elem ) {
- return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
- },
-
- // Boolean properties
- "enabled": function( elem ) {
- return elem.disabled === false;
- },
-
- "disabled": function( elem ) {
- return elem.disabled === true;
- },
-
- "checked": function( elem ) {
- // In CSS3, :checked should return both checked and selected elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- var nodeName = elem.nodeName.toLowerCase();
- return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
- },
-
- "selected": function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- // Contents
- "empty": function( elem ) {
- // http://www.w3.org/TR/selectors/#empty-pseudo
- // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
- // but not by others (comment: 8; processing instruction: 7; etc.)
- // nodeType < 6 works because attributes (2) do not appear as children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- if ( elem.nodeType < 6 ) {
- return false;
- }
- }
- return true;
- },
-
- "parent": function( elem ) {
- return !Expr.pseudos["empty"]( elem );
- },
-
- // Element/input types
- "header": function( elem ) {
- return rheader.test( elem.nodeName );
- },
-
- "input": function( elem ) {
- return rinputs.test( elem.nodeName );
- },
-
- "button": function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === "button" || name === "button";
- },
-
- "text": function( elem ) {
- var attr;
- return elem.nodeName.toLowerCase() === "input" &&
- elem.type === "text" &&
-
- // Support: IE<8
- // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
- ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
- },
-
- // Position-in-collection
- "first": createPositionalPseudo(function() {
- return [ 0 ];
- }),
-
- "last": createPositionalPseudo(function( matchIndexes, length ) {
- return [ length - 1 ];
- }),
-
- "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
- return [ argument < 0 ? argument + length : argument ];
- }),
-
- "even": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 0;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "odd": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 1;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; --i >= 0; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; ++i < length; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- })
- }
-};
-
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
- Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
- Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
- var matched, match, tokens, type,
- soFar, groups, preFilters,
- cached = tokenCache[ selector + " " ];
-
- if ( cached ) {
- return parseOnly ? 0 : cached.slice( 0 );
- }
-
- soFar = selector;
- groups = [];
- preFilters = Expr.preFilter;
-
- while ( soFar ) {
-
- // Comma and first run
- if ( !matched || (match = rcomma.exec( soFar )) ) {
- if ( match ) {
- // Don't consume trailing commas as valid
- soFar = soFar.slice( match[0].length ) || soFar;
- }
- groups.push( (tokens = []) );
- }
-
- matched = false;
-
- // Combinators
- if ( (match = rcombinators.exec( soFar )) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- // Cast descendant combinators to space
- type: match[0].replace( rtrim, " " )
- });
- soFar = soFar.slice( matched.length );
- }
-
- // Filters
- for ( type in Expr.filter ) {
- if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
- (match = preFilters[ type ]( match ))) ) {
- matched = match.shift();
- tokens.push({
- value: matched,
- type: type,
- matches: match
- });
- soFar = soFar.slice( matched.length );
- }
- }
-
- if ( !matched ) {
- break;
- }
- }
-
- // Return the length of the invalid excess
- // if we're just parsing
- // Otherwise, throw an error or return tokens
- return parseOnly ?
- soFar.length :
- soFar ?
- Sizzle.error( selector ) :
- // Cache the tokens
- tokenCache( selector, groups ).slice( 0 );
-};
-
-function toSelector( tokens ) {
- var i = 0,
- len = tokens.length,
- selector = "";
- for ( ; i < len; i++ ) {
- selector += tokens[i].value;
- }
- return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
- var dir = combinator.dir,
- checkNonElements = base && dir === "parentNode",
- doneName = done++;
-
- return combinator.first ?
- // Check against closest ancestor/preceding element
- function( elem, context, xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- return matcher( elem, context, xml );
- }
- }
- } :
-
- // Check against all ancestor/preceding elements
- function( elem, context, xml ) {
- var oldCache, outerCache,
- newCache = [ dirruns, doneName ];
-
- // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
- if ( xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- if ( matcher( elem, context, xml ) ) {
- return true;
- }
- }
- }
- } else {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- outerCache = elem[ expando ] || (elem[ expando ] = {});
- if ( (oldCache = outerCache[ dir ]) &&
- oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
-
- // Assign to newCache so results back-propagate to previous elements
- return (newCache[ 2 ] = oldCache[ 2 ]);
- } else {
- // Reuse newcache so results back-propagate to previous elements
- outerCache[ dir ] = newCache;
-
- // A match means we're done; a fail means we have to keep checking
- if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
- return true;
- }
- }
- }
- }
- }
- };
-}
-
-function elementMatcher( matchers ) {
- return matchers.length > 1 ?
- function( elem, context, xml ) {
- var i = matchers.length;
- while ( i-- ) {
- if ( !matchers[i]( elem, context, xml ) ) {
- return false;
- }
- }
- return true;
- } :
- matchers[0];
-}
-
-function multipleContexts( selector, contexts, results ) {
- var i = 0,
- len = contexts.length;
- for ( ; i < len; i++ ) {
- Sizzle( selector, contexts[i], results );
- }
- return results;
-}
-
-function condense( unmatched, map, filter, context, xml ) {
- var elem,
- newUnmatched = [],
- i = 0,
- len = unmatched.length,
- mapped = map != null;
-
- for ( ; i < len; i++ ) {
- if ( (elem = unmatched[i]) ) {
- if ( !filter || filter( elem, context, xml ) ) {
- newUnmatched.push( elem );
- if ( mapped ) {
- map.push( i );
- }
- }
- }
- }
-
- return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
- if ( postFilter && !postFilter[ expando ] ) {
- postFilter = setMatcher( postFilter );
- }
- if ( postFinder && !postFinder[ expando ] ) {
- postFinder = setMatcher( postFinder, postSelector );
- }
- return markFunction(function( seed, results, context, xml ) {
- var temp, i, elem,
- preMap = [],
- postMap = [],
- preexisting = results.length,
-
- // Get initial elements from seed or context
- elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
- // Prefilter to get matcher input, preserving a map for seed-results synchronization
- matcherIn = preFilter && ( seed || !selector ) ?
- condense( elems, preMap, preFilter, context, xml ) :
- elems,
-
- matcherOut = matcher ?
- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
- // ...intermediate processing is necessary
- [] :
-
- // ...otherwise use results directly
- results :
- matcherIn;
-
- // Find primary matches
- if ( matcher ) {
- matcher( matcherIn, matcherOut, context, xml );
- }
-
- // Apply postFilter
- if ( postFilter ) {
- temp = condense( matcherOut, postMap );
- postFilter( temp, [], context, xml );
-
- // Un-match failing elements by moving them back to matcherIn
- i = temp.length;
- while ( i-- ) {
- if ( (elem = temp[i]) ) {
- matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
- }
- }
- }
-
- if ( seed ) {
- if ( postFinder || preFilter ) {
- if ( postFinder ) {
- // Get the final matcherOut by condensing this intermediate into postFinder contexts
- temp = [];
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) ) {
- // Restore matcherIn since elem is not yet a final match
- temp.push( (matcherIn[i] = elem) );
- }
- }
- postFinder( null, (matcherOut = []), temp, xml );
- }
-
- // Move matched elements from seed to results to keep them synchronized
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) &&
- (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
-
- seed[temp] = !(results[temp] = elem);
- }
- }
- }
-
- // Add elements to results, through postFinder if defined
- } else {
- matcherOut = condense(
- matcherOut === results ?
- matcherOut.splice( preexisting, matcherOut.length ) :
- matcherOut
- );
- if ( postFinder ) {
- postFinder( null, results, matcherOut, xml );
- } else {
- push.apply( results, matcherOut );
- }
- }
- });
-}
-
-function matcherFromTokens( tokens ) {
- var checkContext, matcher, j,
- len = tokens.length,
- leadingRelative = Expr.relative[ tokens[0].type ],
- implicitRelative = leadingRelative || Expr.relative[" "],
- i = leadingRelative ? 1 : 0,
-
- // The foundational matcher ensures that elements are reachable from top-level context(s)
- matchContext = addCombinator( function( elem ) {
- return elem === checkContext;
- }, implicitRelative, true ),
- matchAnyContext = addCombinator( function( elem ) {
- return indexOf.call( checkContext, elem ) > -1;
- }, implicitRelative, true ),
- matchers = [ function( elem, context, xml ) {
- return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
- (checkContext = context).nodeType ?
- matchContext( elem, context, xml ) :
- matchAnyContext( elem, context, xml ) );
- } ];
-
- for ( ; i < len; i++ ) {
- if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
- matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
- } else {
- matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
- // Return special upon seeing a positional matcher
- if ( matcher[ expando ] ) {
- // Find the next relative operator (if any) for proper handling
- j = ++i;
- for ( ; j < len; j++ ) {
- if ( Expr.relative[ tokens[j].type ] ) {
- break;
- }
- }
- return setMatcher(
- i > 1 && elementMatcher( matchers ),
- i > 1 && toSelector(
- // If the preceding token was a descendant combinator, insert an implicit any-element `*`
- tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
- ).replace( rtrim, "$1" ),
- matcher,
- i < j && matcherFromTokens( tokens.slice( i, j ) ),
- j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
- j < len && toSelector( tokens )
- );
- }
- matchers.push( matcher );
- }
- }
-
- return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
- var bySet = setMatchers.length > 0,
- byElement = elementMatchers.length > 0,
- superMatcher = function( seed, context, xml, results, outermost ) {
- var elem, j, matcher,
- matchedCount = 0,
- i = "0",
- unmatched = seed && [],
- setMatched = [],
- contextBackup = outermostContext,
- // We must always have either seed elements or outermost context
- elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
- // Use integer dirruns iff this is the outermost matcher
- dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
- len = elems.length;
-
- if ( outermost ) {
- outermostContext = context !== document && context;
- }
-
- // Add elements passing elementMatchers directly to results
- // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
- // Support: IE<9, Safari
- // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
- for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
- if ( byElement && elem ) {
- j = 0;
- while ( (matcher = elementMatchers[j++]) ) {
- if ( matcher( elem, context, xml ) ) {
- results.push( elem );
- break;
- }
- }
- if ( outermost ) {
- dirruns = dirrunsUnique;
- }
- }
-
- // Track unmatched elements for set filters
- if ( bySet ) {
- // They will have gone through all possible matchers
- if ( (elem = !matcher && elem) ) {
- matchedCount--;
- }
-
- // Lengthen the array for every element, matched or not
- if ( seed ) {
- unmatched.push( elem );
- }
- }
- }
-
- // Apply set filters to unmatched elements
- matchedCount += i;
- if ( bySet && i !== matchedCount ) {
- j = 0;
- while ( (matcher = setMatchers[j++]) ) {
- matcher( unmatched, setMatched, context, xml );
- }
-
- if ( seed ) {
- // Reintegrate element matches to eliminate the need for sorting
- if ( matchedCount > 0 ) {
- while ( i-- ) {
- if ( !(unmatched[i] || setMatched[i]) ) {
- setMatched[i] = pop.call( results );
- }
- }
- }
-
- // Discard index placeholder values to get only actual matches
- setMatched = condense( setMatched );
- }
-
- // Add matches to results
- push.apply( results, setMatched );
-
- // Seedless set matches succeeding multiple successful matchers stipulate sorting
- if ( outermost && !seed && setMatched.length > 0 &&
- ( matchedCount + setMatchers.length ) > 1 ) {
-
- Sizzle.uniqueSort( results );
- }
- }
-
- // Override manipulation of globals by nested matchers
- if ( outermost ) {
- dirruns = dirrunsUnique;
- outermostContext = contextBackup;
- }
-
- return unmatched;
- };
-
- return bySet ?
- markFunction( superMatcher ) :
- superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
- var i,
- setMatchers = [],
- elementMatchers = [],
- cached = compilerCache[ selector + " " ];
-
- if ( !cached ) {
- // Generate a function of recursive functions that can be used to check each element
- if ( !match ) {
- match = tokenize( selector );
- }
- i = match.length;
- while ( i-- ) {
- cached = matcherFromTokens( match[i] );
- if ( cached[ expando ] ) {
- setMatchers.push( cached );
- } else {
- elementMatchers.push( cached );
- }
- }
-
- // Cache the compiled function
- cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-
- // Save selector and tokenization
- cached.selector = selector;
- }
- return cached;
-};
-
-/**
- * A low-level selection function that works with Sizzle's compiled
- * selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- * selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
-select = Sizzle.select = function( selector, context, results, seed ) {
- var i, tokens, token, type, find,
- compiled = typeof selector === "function" && selector,
- match = !seed && tokenize( (selector = compiled.selector || selector) );
-
- results = results || [];
-
- // Try to minimize operations if there is no seed and only one group
- if ( match.length === 1 ) {
-
- // Take a shortcut and set the context if the root selector is an ID
- tokens = match[0] = match[0].slice( 0 );
- if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
- support.getById && context.nodeType === 9 && documentIsHTML &&
- Expr.relative[ tokens[1].type ] ) {
-
- context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
- if ( !context ) {
- return results;
-
- // Precompiled matchers will still verify ancestry, so step up a level
- } else if ( compiled ) {
- context = context.parentNode;
- }
-
- selector = selector.slice( tokens.shift().value.length );
- }
-
- // Fetch a seed set for right-to-left matching
- i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
- while ( i-- ) {
- token = tokens[i];
-
- // Abort if we hit a combinator
- if ( Expr.relative[ (type = token.type) ] ) {
- break;
- }
- if ( (find = Expr.find[ type ]) ) {
- // Search, expanding context for leading sibling combinators
- if ( (seed = find(
- token.matches[0].replace( runescape, funescape ),
- rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
- )) ) {
-
- // If seed is empty or no tokens remain, we can return early
- tokens.splice( i, 1 );
- selector = seed.length && toSelector( tokens );
- if ( !selector ) {
- push.apply( results, seed );
- return results;
- }
-
- break;
- }
- }
- }
- }
-
- // Compile and execute a filtering function if one is not provided
- // Provide `match` to avoid retokenization if we modified the selector above
- ( compiled || compile( selector, match ) )(
- seed,
- context,
- !documentIsHTML,
- results,
- rsibling.test( selector ) && testContext( context.parentNode ) || context
- );
- return results;
-};
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Support: Chrome<14
-// Always assume duplicates if they aren't passed to the comparison function
-support.detectDuplicates = !!hasDuplicate;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-// Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( div1 ) {
- // Should return 1, but returns 4 (following)
- return div1.compareDocumentPosition( document.createElement("div") ) & 1;
-});
-
-// Support: IE<8
-// Prevent attribute/property "interpolation"
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( div ) {
- div.innerHTML = "<a href='#'></a>";
- return div.firstChild.getAttribute("href") === "#" ;
-}) ) {
- addHandle( "type|href|height|width", function( elem, name, isXML ) {
- if ( !isXML ) {
- return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
- }
- });
-}
-
-// Support: IE<9
-// Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( div ) {
- div.innerHTML = "<input/>";
- div.firstChild.setAttribute( "value", "" );
- return div.firstChild.getAttribute( "value" ) === "";
-}) ) {
- addHandle( "value", function( elem, name, isXML ) {
- if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
- return elem.defaultValue;
- }
- });
-}
-
-// Support: IE<9
-// Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( div ) {
- return div.getAttribute("disabled") == null;
-}) ) {
- addHandle( booleans, function( elem, name, isXML ) {
- var val;
- if ( !isXML ) {
- return elem[ name ] === true ? name.toLowerCase() :
- (val = elem.getAttributeNode( name )) && val.specified ?
- val.value :
- null;
- }
- });
-}
-
-return Sizzle;
-
-})( window );
-
-
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.pseudos;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-
-var rneedsContext = jQuery.expr.match.needsContext;
-
-var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/);
-
-
-
-var risSimple = /^.[^:#\[\.,]*$/;
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep( elements, function( elem, i ) {
- /* jshint -W018 */
- return !!qualifier.call( elem, i, elem ) !== not;
- });
-
- }
-
- if ( qualifier.nodeType ) {
- return jQuery.grep( elements, function( elem ) {
- return ( elem === qualifier ) !== not;
- });
-
- }
-
- if ( typeof qualifier === "string" ) {
- if ( risSimple.test( qualifier ) ) {
- return jQuery.filter( qualifier, elements, not );
- }
-
- qualifier = jQuery.filter( qualifier, elements );
- }
-
- return jQuery.grep( elements, function( elem ) {
- return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not;
- });
-}
-
-jQuery.filter = function( expr, elems, not ) {
- var elem = elems[ 0 ];
-
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 && elem.nodeType === 1 ?
- jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
- jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
- return elem.nodeType === 1;
- }));
-};
-
-jQuery.fn.extend({
- find: function( selector ) {
- var i,
- ret = [],
- self = this,
- len = self.length;
-
- if ( typeof selector !== "string" ) {
- return this.pushStack( jQuery( selector ).filter(function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- }) );
- }
-
- for ( i = 0; i < len; i++ ) {
- jQuery.find( selector, self[ i ], ret );
- }
-
- // Needed because $( selector, context ) becomes $( context ).find( selector )
- ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
- ret.selector = this.selector ? this.selector + " " + selector : selector;
- return ret;
- },
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector || [], false) );
- },
- not: function( selector ) {
- return this.pushStack( winnow(this, selector || [], true) );
- },
- is: function( selector ) {
- return !!winnow(
- this,
-
- // If this is a positional/relative selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- typeof selector === "string" && rneedsContext.test( selector ) ?
- jQuery( selector ) :
- selector || [],
- false
- ).length;
- }
-});
-
-
-// Initialize a jQuery object
-
-
-// A central reference to the root jQuery(document)
-var rootjQuery,
-
- // Use the correct document accordingly with window argument (sandbox)
- document = window.document,
-
- // A simple way to check for HTML strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- // Strict HTML recognition (#11290: must start with <)
- rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
-
- init = jQuery.fn.init = function( selector, context ) {
- var match, elem;
-
- // HANDLE: $(""), $(null), $(undefined), $(false)
- if ( !selector ) {
- return this;
- }
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = rquickExpr.exec( selector );
- }
-
- // Match html or make sure no context is specified for #id
- if ( match && (match[1] || !context) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[1] ) {
- context = context instanceof jQuery ? context[0] : context;
-
- // scripts is true for back-compat
- // Intentionally let the error be thrown if parseHTML is not present
- jQuery.merge( this, jQuery.parseHTML(
- match[1],
- context && context.nodeType ? context.ownerDocument || context : document,
- true
- ) );
-
- // HANDLE: $(html, props)
- if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
- for ( match in context ) {
- // Properties of context are called as methods if possible
- if ( jQuery.isFunction( this[ match ] ) ) {
- this[ match ]( context[ match ] );
-
- // ...and otherwise set as attributes
- } else {
- this.attr( match, context[ match ] );
- }
- }
- }
-
- return this;
-
- // HANDLE: $(#id)
- } else {
- elem = document.getElementById( match[2] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id !== match[2] ) {
- return rootjQuery.find( selector );
- }
-
- // Otherwise, we inject the element directly into the jQuery object
- this.length = 1;
- this[0] = elem;
- }
-
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return ( context || rootjQuery ).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(DOMElement)
- } else if ( selector.nodeType ) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return typeof rootjQuery.ready !== "undefined" ?
- rootjQuery.ready( selector ) :
- // Execute immediately if ready is not present
- selector( jQuery );
- }
-
- if ( selector.selector !== undefined ) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray( selector, this );
- };
-
-// Give the init function the jQuery prototype for later instantiation
-init.prototype = jQuery.fn;
-
-// Initialize central reference
-rootjQuery = jQuery( document );
-
-
-var rparentsprev = /^(?:parents|prev(?:Until|All))/,
- // methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.extend({
- dir: function( elem, dir, until ) {
- var matched = [],
- cur = elem[ dir ];
-
- while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
- if ( cur.nodeType === 1 ) {
- matched.push( cur );
- }
- cur = cur[dir];
- }
- return matched;
- },
-
- sibling: function( n, elem ) {
- var r = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- r.push( n );
- }
- }
-
- return r;
- }
-});
-
-jQuery.fn.extend({
- has: function( target ) {
- var i,
- targets = jQuery( target, this ),
- len = targets.length;
-
- return this.filter(function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
-
- closest: function( selectors, context ) {
- var cur,
- i = 0,
- l = this.length,
- matched = [],
- pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
- jQuery( selectors, context || this.context ) :
- 0;
-
- for ( ; i < l; i++ ) {
- for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) {
- // Always skip document fragments
- if ( cur.nodeType < 11 && (pos ?
- pos.index(cur) > -1 :
-
- // Don't pass non-elements to Sizzle
- cur.nodeType === 1 &&
- jQuery.find.matchesSelector(cur, selectors)) ) {
-
- matched.push( cur );
- break;
- }
- }
- }
-
- return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched );
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
- }
-
- // index in selector
- if ( typeof elem === "string" ) {
- return jQuery.inArray( this[0], jQuery( elem ) );
- }
-
- // Locate the position of the desired element
- return jQuery.inArray(
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[0] : elem, this );
- },
-
- add: function( selector, context ) {
- return this.pushStack(
- jQuery.unique(
- jQuery.merge( this.get(), jQuery( selector, context ) )
- )
- );
- },
-
- addBack: function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter(selector)
- );
- }
-});
-
-function sibling( cur, dir ) {
- do {
- cur = cur[ dir ];
- } while ( cur && cur.nodeType !== 1 );
-
- return cur;
-}
-
-jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return jQuery.dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return sibling( elem, "nextSibling" );
- },
- prev: function( elem ) {
- return sibling( elem, "previousSibling" );
- },
- nextAll: function( elem ) {
- return jQuery.dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return jQuery.dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
- },
- children: function( elem ) {
- return jQuery.sibling( elem.firstChild );
- },
- contents: function( elem ) {
- return jQuery.nodeName( elem, "iframe" ) ?
- elem.contentDocument || elem.contentWindow.document :
- jQuery.merge( [], elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until );
-
- if ( name.slice( -5 ) !== "Until" ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- ret = jQuery.filter( selector, ret );
- }
-
- if ( this.length > 1 ) {
- // Remove duplicates
- if ( !guaranteedUnique[ name ] ) {
- ret = jQuery.unique( ret );
- }
-
- // Reverse order for parents* and prev-derivatives
- if ( rparentsprev.test( name ) ) {
- ret = ret.reverse();
- }
- }
-
- return this.pushStack( ret );
- };
-});
-var rnotwhite = (/\S+/g);
-
-
-
-// String to Object options format cache
-var optionsCache = {};
-
-// Convert String-formatted options into Object-formatted ones and store in cache
-function createOptions( options ) {
- var object = optionsCache[ options ] = {};
- jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
- object[ flag ] = true;
- });
- return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- * options: an optional list of space-separated options that will change how
- * the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
- // Convert options from String-formatted to Object-formatted if needed
- // (we check in cache first)
- options = typeof options === "string" ?
- ( optionsCache[ options ] || createOptions( options ) ) :
- jQuery.extend( {}, options );
-
- var // Flag to know if list is currently firing
- firing,
- // Last fire value (for non-forgettable lists)
- memory,
- // Flag to know if list was already fired
- fired,
- // End of the loop when firing
- firingLength,
- // Index of currently firing callback (modified by remove if needed)
- firingIndex,
- // First callback to fire (used internally by add and fireWith)
- firingStart,
- // Actual callback list
- list = [],
- // Stack of fire calls for repeatable lists
- stack = !options.once && [],
- // Fire callbacks
- fire = function( data ) {
- memory = options.memory && data;
- fired = true;
- firingIndex = firingStart || 0;
- firingStart = 0;
- firingLength = list.length;
- firing = true;
- for ( ; list && firingIndex < firingLength; firingIndex++ ) {
- if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
- memory = false; // To prevent further calls using add
- break;
- }
- }
- firing = false;
- if ( list ) {
- if ( stack ) {
- if ( stack.length ) {
- fire( stack.shift() );
- }
- } else if ( memory ) {
- list = [];
- } else {
- self.disable();
- }
- }
- },
- // Actual Callbacks object
- self = {
- // Add a callback or a collection of callbacks to the list
- add: function() {
- if ( list ) {
- // First, we save the current length
- var start = list.length;
- (function add( args ) {
- jQuery.each( args, function( _, arg ) {
- var type = jQuery.type( arg );
- if ( type === "function" ) {
- if ( !options.unique || !self.has( arg ) ) {
- list.push( arg );
- }
- } else if ( arg && arg.length && type !== "string" ) {
- // Inspect recursively
- add( arg );
- }
- });
- })( arguments );
- // Do we need to add the callbacks to the
- // current firing batch?
- if ( firing ) {
- firingLength = list.length;
- // With memory, if we're not firing then
- // we should call right away
- } else if ( memory ) {
- firingStart = start;
- fire( memory );
- }
- }
- return this;
- },
- // Remove a callback from the list
- remove: function() {
- if ( list ) {
- jQuery.each( arguments, function( _, arg ) {
- var index;
- while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
- list.splice( index, 1 );
- // Handle firing indexes
- if ( firing ) {
- if ( index <= firingLength ) {
- firingLength--;
- }
- if ( index <= firingIndex ) {
- firingIndex--;
- }
- }
- }
- });
- }
- return this;
- },
- // Check if a given callback is in the list.
- // If no argument is given, return whether or not list has callbacks attached.
- has: function( fn ) {
- return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
- },
- // Remove all callbacks from the list
- empty: function() {
- list = [];
- firingLength = 0;
- return this;
- },
- // Have the list do nothing anymore
- disable: function() {
- list = stack = memory = undefined;
- return this;
- },
- // Is it disabled?
- disabled: function() {
- return !list;
- },
- // Lock the list in its current state
- lock: function() {
- stack = undefined;
- if ( !memory ) {
- self.disable();
- }
- return this;
- },
- // Is it locked?
- locked: function() {
- return !stack;
- },
- // Call all callbacks with the given context and arguments
- fireWith: function( context, args ) {
- if ( list && ( !fired || stack ) ) {
- args = args || [];
- args = [ context, args.slice ? args.slice() : args ];
- if ( firing ) {
- stack.push( args );
- } else {
- fire( args );
- }
- }
- return this;
- },
- // Call all the callbacks with the given arguments
- fire: function() {
- self.fireWith( this, arguments );
- return this;
- },
- // To know if the callbacks have already been called at least once
- fired: function() {
- return !!fired;
- }
- };
-
- return self;
-};
-
-
-jQuery.extend({
-
- Deferred: function( func ) {
- var tuples = [
- // action, add listener, listener list, final state
- [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
- [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
- [ "notify", "progress", jQuery.Callbacks("memory") ]
- ],
- state = "pending",
- promise = {
- state: function() {
- return state;
- },
- always: function() {
- deferred.done( arguments ).fail( arguments );
- return this;
- },
- then: function( /* fnDone, fnFail, fnProgress */ ) {
- var fns = arguments;
- return jQuery.Deferred(function( newDefer ) {
- jQuery.each( tuples, function( i, tuple ) {
- var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
- // deferred[ done | fail | progress ] for forwarding actions to newDefer
- deferred[ tuple[1] ](function() {
- var returned = fn && fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise()
- .done( newDefer.resolve )
- .fail( newDefer.reject )
- .progress( newDefer.notify );
- } else {
- newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
- }
- });
- });
- fns = null;
- }).promise();
- },
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- return obj != null ? jQuery.extend( obj, promise ) : promise;
- }
- },
- deferred = {};
-
- // Keep pipe for back-compat
- promise.pipe = promise.then;
-
- // Add list-specific methods
- jQuery.each( tuples, function( i, tuple ) {
- var list = tuple[ 2 ],
- stateString = tuple[ 3 ];
-
- // promise[ done | fail | progress ] = list.add
- promise[ tuple[1] ] = list.add;
-
- // Handle state
- if ( stateString ) {
- list.add(function() {
- // state = [ resolved | rejected ]
- state = stateString;
-
- // [ reject_list | resolve_list ].disable; progress_list.lock
- }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
- }
-
- // deferred[ resolve | reject | notify ]
- deferred[ tuple[0] ] = function() {
- deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
- return this;
- };
- deferred[ tuple[0] + "With" ] = list.fireWith;
- });
-
- // Make the deferred a promise
- promise.promise( deferred );
-
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
-
- // All done!
- return deferred;
- },
-
- // Deferred helper
- when: function( subordinate /* , ..., subordinateN */ ) {
- var i = 0,
- resolveValues = slice.call( arguments ),
- length = resolveValues.length,
-
- // the count of uncompleted subordinates
- remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
-
- // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
- deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
-
- // Update function for both resolve and progress values
- updateFunc = function( i, contexts, values ) {
- return function( value ) {
- contexts[ i ] = this;
- values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
- if ( values === progressValues ) {
- deferred.notifyWith( contexts, values );
-
- } else if ( !(--remaining) ) {
- deferred.resolveWith( contexts, values );
- }
- };
- },
-
- progressValues, progressContexts, resolveContexts;
-
- // add listeners to Deferred subordinates; treat others as resolved
- if ( length > 1 ) {
- progressValues = new Array( length );
- progressContexts = new Array( length );
- resolveContexts = new Array( length );
- for ( ; i < length; i++ ) {
- if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
- resolveValues[ i ].promise()
- .done( updateFunc( i, resolveContexts, resolveValues ) )
- .fail( deferred.reject )
- .progress( updateFunc( i, progressContexts, progressValues ) );
- } else {
- --remaining;
- }
- }
- }
-
- // if we're not waiting on anything, resolve the master
- if ( !remaining ) {
- deferred.resolveWith( resolveContexts, resolveValues );
- }
-
- return deferred.promise();
- }
-});
-
-
-// The deferred used on DOM ready
-var readyList;
-
-jQuery.fn.ready = function( fn ) {
- // Add the callback
- jQuery.ready.promise().done( fn );
-
- return this;
-};
-
-jQuery.extend({
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
-
- // Abort if there are pending holds or we're already ready
- if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
- return;
- }
-
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( !document.body ) {
- return setTimeout( jQuery.ready );
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ jQuery ] );
-
- // Trigger any bound ready events
- if ( jQuery.fn.triggerHandler ) {
- jQuery( document ).triggerHandler( "ready" );
- jQuery( document ).off( "ready" );
- }
- }
-});
-
-/**
- * Clean-up method for dom ready events
- */
-function detach() {
- if ( document.addEventListener ) {
- document.removeEventListener( "DOMContentLoaded", completed, false );
- window.removeEventListener( "load", completed, false );
-
- } else {
- document.detachEvent( "onreadystatechange", completed );
- window.detachEvent( "onload", completed );
- }
-}
-
-/**
- * The ready event handler and self cleanup method
- */
-function completed() {
- // readyState === "complete" is good enough for us to call the dom ready in oldIE
- if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
- detach();
- jQuery.ready();
- }
-}
-
-jQuery.ready.promise = function( obj ) {
- if ( !readyList ) {
-
- readyList = jQuery.Deferred();
-
- // Catch cases where $(document).ready() is called after the browser event has already occurred.
- // we once tried to use readyState "interactive" here, but it caused issues like the one
- // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
- if ( document.readyState === "complete" ) {
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- setTimeout( jQuery.ready );
-
- // Standards-based browsers support DOMContentLoaded
- } else if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", completed, false );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", completed, false );
-
- // If IE event model is used
- } else {
- // Ensure firing before onload, maybe late but safe also for iframes
- document.attachEvent( "onreadystatechange", completed );
-
- // A fallback to window.onload, that will always work
- window.attachEvent( "onload", completed );
-
- // If IE and not a frame
- // continually check to see if the document is ready
- var top = false;
-
- try {
- top = window.frameElement == null && document.documentElement;
- } catch(e) {}
-
- if ( top && top.doScroll ) {
- (function doScrollCheck() {
- if ( !jQuery.isReady ) {
-
- try {
- // Use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- top.doScroll("left");
- } catch(e) {
- return setTimeout( doScrollCheck, 50 );
- }
-
- // detach all dom ready events
- detach();
-
- // and execute any waiting functions
- jQuery.ready();
- }
- })();
- }
- }
- }
- return readyList.promise( obj );
-};
-
-
-var strundefined = typeof undefined;
-
-
-
-// Support: IE<9
-// Iteration over object's inherited properties before its own
-var i;
-for ( i in jQuery( support ) ) {
- break;
-}
-support.ownLast = i !== "0";
-
-// Note: most support tests are defined in their respective modules.
-// false until the test is run
-support.inlineBlockNeedsLayout = false;
-
-// Execute ASAP in case we need to set body.style.zoom
-jQuery(function() {
- // Minified: var a,b,c,d
- var val, div, body, container;
-
- body = document.getElementsByTagName( "body" )[ 0 ];
- if ( !body || !body.style ) {
- // Return for frameset docs that don't have a body
- return;
- }
-
- // Setup
- div = document.createElement( "div" );
- container = document.createElement( "div" );
- container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
- body.appendChild( container ).appendChild( div );
-
- if ( typeof div.style.zoom !== strundefined ) {
- // Support: IE<8
- // Check if natively block-level elements act like inline-block
- // elements when setting their display to 'inline' and giving
- // them layout
- div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
-
- support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
- if ( val ) {
- // Prevent IE 6 from affecting layout for positioned elements #11048
- // Prevent IE from shrinking the body in IE 7 mode #12869
- // Support: IE<8
- body.style.zoom = 1;
- }
- }
-
- body.removeChild( container );
-});
-
-
-
-
-(function() {
- var div = document.createElement( "div" );
-
- // Execute the test only if not already executed in another module.
- if (support.deleteExpando == null) {
- // Support: IE<9
- support.deleteExpando = true;
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
- }
-
- // Null elements to avoid leaks in IE.
- div = null;
-})();
-
-
-/**
- * Determines whether an object can have data
- */
-jQuery.acceptData = function( elem ) {
- var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ],
- nodeType = +elem.nodeType || 1;
-
- // Do not set data on non-element DOM nodes because it will not be cleared (#8335).
- return nodeType !== 1 && nodeType !== 9 ?
- false :
-
- // Nodes accept data unless otherwise specified; rejection can be conditional
- !noData || noData !== true && elem.getAttribute("classid") === noData;
-};
-
-
-var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
- rmultiDash = /([A-Z])/g;
-
-function dataAttr( elem, key, data ) {
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
-
- var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = data === "true" ? true :
- data === "false" ? false :
- data === "null" ? null :
- // Only convert to a number if it doesn't change the string
- +data + "" === data ? +data :
- rbrace.test( data ) ? jQuery.parseJSON( data ) :
- data;
- } catch( e ) {}
-
- // Make sure we set the data so it isn't changed later
- jQuery.data( elem, key, data );
-
- } else {
- data = undefined;
- }
- }
-
- return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
- var name;
- for ( name in obj ) {
-
- // if the public data object is empty, the private is still empty
- if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
- continue;
- }
- if ( name !== "toJSON" ) {
- return false;
- }
- }
-
- return true;
-}
-
-function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var ret, thisCache,
- internalKey = jQuery.expando,
-
- // We have to handle DOM nodes and JS objects differently because IE6-7
- // can't GC object references properly across the DOM-JS boundary
- isNode = elem.nodeType,
-
- // Only DOM nodes need the global jQuery cache; JS object data is
- // attached directly to the object so GC can occur automatically
- cache = isNode ? jQuery.cache : elem,
-
- // Only defining an ID for JS objects if its cache already exists allows
- // the code to shortcut on the same path as a DOM node with no cache
- id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
-
- // Avoid doing any more work than we need to when trying to get data on an
- // object that has no data at all
- if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) {
- return;
- }
-
- if ( !id ) {
- // Only DOM nodes need a new unique ID for each element since their data
- // ends up in the global cache
- if ( isNode ) {
- id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
- } else {
- id = internalKey;
- }
- }
-
- if ( !cache[ id ] ) {
- // Avoid exposing jQuery metadata on plain JS objects when the object
- // is serialized using JSON.stringify
- cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
- }
-
- // An object can be passed to jQuery.data instead of a key/value pair; this gets
- // shallow copied over onto the existing cache
- if ( typeof name === "object" || typeof name === "function" ) {
- if ( pvt ) {
- cache[ id ] = jQuery.extend( cache[ id ], name );
- } else {
- cache[ id ].data = jQuery.extend( cache[ id ].data, name );
- }
- }
-
- thisCache = cache[ id ];
-
- // jQuery data() is stored in a separate object inside the object's internal data
- // cache in order to avoid key collisions between internal data and user-defined
- // data.
- if ( !pvt ) {
- if ( !thisCache.data ) {
- thisCache.data = {};
- }
-
- thisCache = thisCache.data;
- }
-
- if ( data !== undefined ) {
- thisCache[ jQuery.camelCase( name ) ] = data;
- }
-
- // Check for both converted-to-camel and non-converted data property names
- // If a data property was specified
- if ( typeof name === "string" ) {
-
- // First Try to find as-is property data
- ret = thisCache[ name ];
-
- // Test for null|undefined property data
- if ( ret == null ) {
-
- // Try to find the camelCased property
- ret = thisCache[ jQuery.camelCase( name ) ];
- }
- } else {
- ret = thisCache;
- }
-
- return ret;
-}
-
-function internalRemoveData( elem, name, pvt ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var thisCache, i,
- isNode = elem.nodeType,
-
- // See jQuery.data for more information
- cache = isNode ? jQuery.cache : elem,
- id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
- // If there is already no cache entry for this object, there is no
- // purpose in continuing
- if ( !cache[ id ] ) {
- return;
- }
-
- if ( name ) {
-
- thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
- if ( thisCache ) {
-
- // Support array or space separated string names for data keys
- if ( !jQuery.isArray( name ) ) {
-
- // try the string as a key before any manipulation
- if ( name in thisCache ) {
- name = [ name ];
- } else {
-
- // split the camel cased version by spaces unless a key with the spaces exists
- name = jQuery.camelCase( name );
- if ( name in thisCache ) {
- name = [ name ];
- } else {
- name = name.split(" ");
- }
- }
- } else {
- // If "name" is an array of keys...
- // When data is initially created, via ("key", "val") signature,
- // keys will be converted to camelCase.
- // Since there is no way to tell _how_ a key was added, remove
- // both plain key and camelCase key. #12786
- // This will only penalize the array argument path.
- name = name.concat( jQuery.map( name, jQuery.camelCase ) );
- }
-
- i = name.length;
- while ( i-- ) {
- delete thisCache[ name[i] ];
- }
-
- // If there is no data left in the cache, we want to continue
- // and let the cache object itself get destroyed
- if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) {
- return;
- }
- }
- }
-
- // See jQuery.data for more information
- if ( !pvt ) {
- delete cache[ id ].data;
-
- // Don't destroy the parent cache unless the internal data object
- // had been the only thing left in it
- if ( !isEmptyDataObject( cache[ id ] ) ) {
- return;
- }
- }
-
- // Destroy the cache
- if ( isNode ) {
- jQuery.cleanData( [ elem ], true );
-
- // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
- /* jshint eqeqeq: false */
- } else if ( support.deleteExpando || cache != cache.window ) {
- /* jshint eqeqeq: true */
- delete cache[ id ];
-
- // When all else fails, null
- } else {
- cache[ id ] = null;
- }
-}
-
-jQuery.extend({
- cache: {},
-
- // The following elements (space-suffixed to avoid Object.prototype collisions)
- // throw uncatchable exceptions if you attempt to set expando properties
- noData: {
- "applet ": true,
- "embed ": true,
- // ...but Flash objects (which have this classid) *can* handle expandos
- "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
- },
-
- hasData: function( elem ) {
- elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
- return !!elem && !isEmptyDataObject( elem );
- },
-
- data: function( elem, name, data ) {
- return internalData( elem, name, data );
- },
-
- removeData: function( elem, name ) {
- return internalRemoveData( elem, name );
- },
-
- // For internal use only.
- _data: function( elem, name, data ) {
- return internalData( elem, name, data, true );
- },
-
- _removeData: function( elem, name ) {
- return internalRemoveData( elem, name, true );
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ) {
- var i, name, data,
- elem = this[0],
- attrs = elem && elem.attributes;
-
- // Special expections of .data basically thwart jQuery.access,
- // so implement the relevant behavior ourselves
-
- // Gets all values
- if ( key === undefined ) {
- if ( this.length ) {
- data = jQuery.data( elem );
-
- if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
- i = attrs.length;
- while ( i-- ) {
-
- // Support: IE11+
- // The attrs elements can be null (#14894)
- if ( attrs[ i ] ) {
- name = attrs[ i ].name;
- if ( name.indexOf( "data-" ) === 0 ) {
- name = jQuery.camelCase( name.slice(5) );
- dataAttr( elem, name, data[ name ] );
- }
- }
- }
- jQuery._data( elem, "parsedAttrs", true );
- }
- }
-
- return data;
- }
-
- // Sets multiple values
- if ( typeof key === "object" ) {
- return this.each(function() {
- jQuery.data( this, key );
- });
- }
-
- return arguments.length > 1 ?
-
- // Sets one value
- this.each(function() {
- jQuery.data( this, key, value );
- }) :
-
- // Gets one value
- // Try to fetch any internally stored data first
- elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
- },
-
- removeData: function( key ) {
- return this.each(function() {
- jQuery.removeData( this, key );
- });
- }
-});
-
-
-jQuery.extend({
- queue: function( elem, type, data ) {
- var queue;
-
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- queue = jQuery._data( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !queue || jQuery.isArray(data) ) {
- queue = jQuery._data( elem, type, jQuery.makeArray(data) );
- } else {
- queue.push( data );
- }
- }
- return queue || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- startLength = queue.length,
- fn = queue.shift(),
- hooks = jQuery._queueHooks( elem, type ),
- next = function() {
- jQuery.dequeue( elem, type );
- };
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- startLength--;
- }
-
- if ( fn ) {
-
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- // clear up the last queue stop function
- delete hooks.stop;
- fn.call( elem, next, hooks );
- }
-
- if ( !startLength && hooks ) {
- hooks.empty.fire();
- }
- },
-
- // not intended for public consumption - generates a queueHooks object, or returns the current one
- _queueHooks: function( elem, type ) {
- var key = type + "queueHooks";
- return jQuery._data( elem, key ) || jQuery._data( elem, key, {
- empty: jQuery.Callbacks("once memory").add(function() {
- jQuery._removeData( elem, type + "queue" );
- jQuery._removeData( elem, key );
- })
- });
- }
-});
-
-jQuery.fn.extend({
- queue: function( type, data ) {
- var setter = 2;
-
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- setter--;
- }
-
- if ( arguments.length < setter ) {
- return jQuery.queue( this[0], type );
- }
-
- return data === undefined ?
- this :
- this.each(function() {
- var queue = jQuery.queue( this, type, data );
-
- // ensure a hooks for this queue
- jQuery._queueHooks( this, type );
-
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, obj ) {
- var tmp,
- count = 1,
- defer = jQuery.Deferred(),
- elements = this,
- i = this.length,
- resolve = function() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- };
-
- if ( typeof type !== "string" ) {
- obj = type;
- type = undefined;
- }
- type = type || "fx";
-
- while ( i-- ) {
- tmp = jQuery._data( elements[ i ], type + "queueHooks" );
- if ( tmp && tmp.empty ) {
- count++;
- tmp.empty.add( resolve );
- }
- }
- resolve();
- return defer.promise( obj );
- }
-});
-var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source;
-
-var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
-
-var isHidden = function( elem, el ) {
- // isHidden might be called from jQuery#filter function;
- // in that case, element will be second argument
- elem = el || elem;
- return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
- };
-
-
-
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
- var i = 0,
- length = elems.length,
- bulk = key == null;
-
- // Sets many values
- if ( jQuery.type( key ) === "object" ) {
- chainable = true;
- for ( i in key ) {
- jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
- }
-
- // Sets one value
- } else if ( value !== undefined ) {
- chainable = true;
-
- if ( !jQuery.isFunction( value ) ) {
- raw = true;
- }
-
- if ( bulk ) {
- // Bulk operations run against the entire set
- if ( raw ) {
- fn.call( elems, value );
- fn = null;
-
- // ...except when executing function values
- } else {
- bulk = fn;
- fn = function( elem, key, value ) {
- return bulk.call( jQuery( elem ), value );
- };
- }
- }
-
- if ( fn ) {
- for ( ; i < length; i++ ) {
- fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
- }
- }
- }
-
- return chainable ?
- elems :
-
- // Gets
- bulk ?
- fn.call( elems ) :
- length ? fn( elems[0], key ) : emptyGet;
-};
-var rcheckableType = (/^(?:checkbox|radio)$/i);
-
-
-
-(function() {
- // Minified: var a,b,c
- var input = document.createElement( "input" ),
- div = document.createElement( "div" ),
- fragment = document.createDocumentFragment();
-
- // Setup
- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-
- // IE strips leading whitespace when .innerHTML is used
- support.leadingWhitespace = div.firstChild.nodeType === 3;
-
- // Make sure that tbody elements aren't automatically inserted
- // IE will insert them into empty tables
- support.tbody = !div.getElementsByTagName( "tbody" ).length;
-
- // Make sure that link elements get serialized correctly by innerHTML
- // This requires a wrapper element in IE
- support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
-
- // Makes sure cloning an html5 element does not cause problems
- // Where outerHTML is undefined, this still works
- support.html5Clone =
- document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>";
-
- // Check if a disconnected checkbox will retain its checked
- // value of true after appended to the DOM (IE6/7)
- input.type = "checkbox";
- input.checked = true;
- fragment.appendChild( input );
- support.appendChecked = input.checked;
-
- // Make sure textarea (and checkbox) defaultValue is properly cloned
- // Support: IE6-IE11+
- div.innerHTML = "<textarea>x</textarea>";
- support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-
- // #11217 - WebKit loses check when the name is after the checked attribute
- fragment.appendChild( div );
- div.innerHTML = "<input type='radio' checked='checked' name='t'/>";
-
- // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
- // old WebKit doesn't clone checked state correctly in fragments
- support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- // Support: IE<9
- // Opera does not clone events (and typeof div.attachEvent === undefined).
- // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
- support.noCloneEvent = true;
- if ( div.attachEvent ) {
- div.attachEvent( "onclick", function() {
- support.noCloneEvent = false;
- });
-
- div.cloneNode( true ).click();
- }
-
- // Execute the test only if not already executed in another module.
- if (support.deleteExpando == null) {
- // Support: IE<9
- support.deleteExpando = true;
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
- }
-})();
-
-
-(function() {
- var i, eventName,
- div = document.createElement( "div" );
-
- // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event)
- for ( i in { submit: true, change: true, focusin: true }) {
- eventName = "on" + i;
-
- if ( !(support[ i + "Bubbles" ] = eventName in window) ) {
- // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
- div.setAttribute( eventName, "t" );
- support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false;
- }
- }
-
- // Null elements to avoid leaks in IE.
- div = null;
-})();
-
-
-var rformElems = /^(?:input|select|textarea)$/i,
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/,
- rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
- rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
-
-function returnTrue() {
- return true;
-}
-
-function returnFalse() {
- return false;
-}
-
-function safeActiveElement() {
- try {
- return document.activeElement;
- } catch ( err ) { }
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
- global: {},
-
- add: function( elem, types, handler, data, selector ) {
- var tmp, events, t, handleObjIn,
- special, eventHandle, handleObj,
- handlers, type, namespaces, origType,
- elemData = jQuery._data( elem );
-
- // Don't attach events to noData or text/comment nodes (but allow plain objects)
- if ( !elemData ) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- selector = handleObjIn.selector;
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- if ( !(events = elemData.events) ) {
- events = elemData.events = {};
- }
- if ( !(eventHandle = elemData.handle) ) {
- eventHandle = elemData.handle = function( e ) {
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ?
- jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
- undefined;
- };
- // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
- eventHandle.elem = elem;
- }
-
- // Handle multiple events separated by a space
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[t] ) || [];
- type = origType = tmp[1];
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
- // There *must* be a type, no attaching namespace-only handlers
- if ( !type ) {
- continue;
- }
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[ type ] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[ type ] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend({
- type: type,
- origType: origType,
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
- namespace: namespaces.join(".")
- }, handleObjIn );
-
- // Init the event handler queue if we're the first
- if ( !(handlers = events[ type ]) ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener/attachEvent if the special events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
- // Bind the global event handler to the element
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
-
- } else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- // Nullify elem to prevent memory leaks in IE
- elem = null;
- },
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, selector, mappedTypes ) {
- var j, handleObj, tmp,
- origCount, t, events,
- special, handlers, type,
- namespaces, origType,
- elemData = jQuery.hasData( elem ) && jQuery._data( elem );
-
- if ( !elemData || !(events = elemData.events) ) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = ( types || "" ).match( rnotwhite ) || [ "" ];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[t] ) || [];
- type = origType = tmp[1];
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
- // Unbind all events (on this namespace, if provided) for the element
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
- type = ( selector ? special.delegateType : special.bindType ) || type;
- handlers = events[ type ] || [];
- tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
-
- // Remove matching events
- origCount = j = handlers.length;
- while ( j-- ) {
- handleObj = handlers[ j ];
-
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !tmp || tmp.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
- handlers.splice( j, 1 );
-
- if ( handleObj.selector ) {
- handlers.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if ( origCount && !handlers.length ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- delete elemData.handle;
-
- // removeData also checks for emptiness and clears the expando if empty
- // so use it instead of delete
- jQuery._removeData( elem, "events" );
- }
- },
-
- trigger: function( event, data, elem, onlyHandlers ) {
- var handle, ontype, cur,
- bubbleType, special, tmp, i,
- eventPath = [ elem || document ],
- type = hasOwn.call( event, "type" ) ? event.type : event,
- namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
-
- cur = tmp = elem = elem || document;
-
- // Don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
-
- if ( type.indexOf(".") >= 0 ) {
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split(".");
- type = namespaces.shift();
- namespaces.sort();
- }
- ontype = type.indexOf(":") < 0 && "on" + type;
-
- // Caller can pass in a jQuery.Event object, Object, or just an event type string
- event = event[ jQuery.expando ] ?
- event :
- new jQuery.Event( type, typeof event === "object" && event );
-
- // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
- event.isTrigger = onlyHandlers ? 2 : 3;
- event.namespace = namespaces.join(".");
- event.namespace_re = event.namespace ?
- new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
- null;
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data == null ?
- [ event ] :
- jQuery.makeArray( data, [ event ] );
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[ type ] || {};
- if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
- bubbleType = special.delegateType || type;
- if ( !rfocusMorph.test( bubbleType + type ) ) {
- cur = cur.parentNode;
- }
- for ( ; cur; cur = cur.parentNode ) {
- eventPath.push( cur );
- tmp = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( tmp === (elem.ownerDocument || document) ) {
- eventPath.push( tmp.defaultView || tmp.parentWindow || window );
- }
- }
-
- // Fire handlers on the event path
- i = 0;
- while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
-
- event.type = i > 1 ?
- bubbleType :
- special.bindType || type;
-
- // jQuery handler
- handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
- if ( handle ) {
- handle.apply( cur, data );
- }
-
- // Native handler
- handle = ontype && cur[ ontype ];
- if ( handle && handle.apply && jQuery.acceptData( cur ) ) {
- event.result = handle.apply( cur, data );
- if ( event.result === false ) {
- event.preventDefault();
- }
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
- if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) &&
- jQuery.acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name name as the event.
- // Can't use an .isFunction() check here because IE6/7 fails that test.
- // Don't do default actions on window, that's where global variables be (#6170)
- if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- tmp = elem[ ontype ];
-
- if ( tmp ) {
- elem[ ontype ] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
- try {
- elem[ type ]();
- } catch ( e ) {
- // IE<9 dies on focus/blur to hidden element (#1486,#12518)
- // only reproducible on winXP IE8 native, not IE9 in IE8 mode
- }
- jQuery.event.triggered = undefined;
-
- if ( tmp ) {
- elem[ ontype ] = tmp;
- }
- }
- }
- }
-
- return event.result;
- },
-
- dispatch: function( event ) {
-
- // Make a writable jQuery.Event from the native event object
- event = jQuery.event.fix( event );
-
- var i, ret, handleObj, matched, j,
- handlerQueue = [],
- args = slice.call( arguments ),
- handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
- special = jQuery.event.special[ event.type ] || {};
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[0] = event;
- event.delegateTarget = this;
-
- // Call the preDispatch hook for the mapped type, and let it bail if desired
- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
- return;
- }
-
- // Determine handlers
- handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
- // Run delegates first; they may want to stop propagation beneath us
- i = 0;
- while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
- event.currentTarget = matched.elem;
-
- j = 0;
- while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
-
- // Triggered event must either 1) have no namespace, or
- // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
- if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
-
- event.handleObj = handleObj;
- event.data = handleObj.data;
-
- ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
- .apply( matched.elem, args );
-
- if ( ret !== undefined ) {
- if ( (event.result = ret) === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- // Call the postDispatch hook for the mapped type
- if ( special.postDispatch ) {
- special.postDispatch.call( this, event );
- }
-
- return event.result;
- },
-
- handlers: function( event, handlers ) {
- var sel, handleObj, matches, i,
- handlerQueue = [],
- delegateCount = handlers.delegateCount,
- cur = event.target;
-
- // Find delegate handlers
- // Black-hole SVG <use> instance trees (#13180)
- // Avoid non-left-click bubbling in Firefox (#3861)
- if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
-
- /* jshint eqeqeq: false */
- for ( ; cur != this; cur = cur.parentNode || this ) {
- /* jshint eqeqeq: true */
-
- // Don't check non-elements (#13208)
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
- if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
- matches = [];
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
-
- // Don't conflict with Object.prototype properties (#13203)
- sel = handleObj.selector + " ";
-
- if ( matches[ sel ] === undefined ) {
- matches[ sel ] = handleObj.needsContext ?
- jQuery( sel, this ).index( cur ) >= 0 :
- jQuery.find( sel, this, null, [ cur ] ).length;
- }
- if ( matches[ sel ] ) {
- matches.push( handleObj );
- }
- }
- if ( matches.length ) {
- handlerQueue.push({ elem: cur, handlers: matches });
- }
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- if ( delegateCount < handlers.length ) {
- handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
- }
-
- return handlerQueue;
- },
-
- fix: function( event ) {
- if ( event[ jQuery.expando ] ) {
- return event;
- }
-
- // Create a writable copy of the event object and normalize some properties
- var i, prop, copy,
- type = event.type,
- originalEvent = event,
- fixHook = this.fixHooks[ type ];
-
- if ( !fixHook ) {
- this.fixHooks[ type ] = fixHook =
- rmouseEvent.test( type ) ? this.mouseHooks :
- rkeyEvent.test( type ) ? this.keyHooks :
- {};
- }
- copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
- event = new jQuery.Event( originalEvent );
-
- i = copy.length;
- while ( i-- ) {
- prop = copy[ i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Support: IE<9
- // Fix target property (#1925)
- if ( !event.target ) {
- event.target = originalEvent.srcElement || document;
- }
-
- // Support: Chrome 23+, Safari?
- // Target should not be a text node (#504, #13143)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- // Support: IE<9
- // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
- event.metaKey = !!event.metaKey;
-
- return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
- },
-
- // Includes some event props shared by KeyEvent and MouseEvent
- props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
- fixHooks: {},
-
- keyHooks: {
- props: "char charCode key keyCode".split(" "),
- filter: function( event, original ) {
-
- // Add which for key events
- if ( event.which == null ) {
- event.which = original.charCode != null ? original.charCode : original.keyCode;
- }
-
- return event;
- }
- },
-
- mouseHooks: {
- props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
- filter: function( event, original ) {
- var body, eventDoc, doc,
- button = original.button,
- fromElement = original.fromElement;
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && original.clientX != null ) {
- eventDoc = event.target.ownerDocument || document;
- doc = eventDoc.documentElement;
- body = eventDoc.body;
-
- event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
- event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
- }
-
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && fromElement ) {
- event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if ( !event.which && button !== undefined ) {
- event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
- }
-
- return event;
- }
- },
-
- special: {
- load: {
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
- focus: {
- // Fire native event if possible so blur/focus sequence is correct
- trigger: function() {
- if ( this !== safeActiveElement() && this.focus ) {
- try {
- this.focus();
- return false;
- } catch ( e ) {
- // Support: IE<9
- // If we error on focus to hidden element (#1486, #12518),
- // let .trigger() run the handlers
- }
- }
- },
- delegateType: "focusin"
- },
- blur: {
- trigger: function() {
- if ( this === safeActiveElement() && this.blur ) {
- this.blur();
- return false;
- }
- },
- delegateType: "focusout"
- },
- click: {
- // For checkbox, fire native event so checked state will be right
- trigger: function() {
- if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
- this.click();
- return false;
- }
- },
-
- // For cross-browser consistency, don't fire native .click() on links
- _default: function( event ) {
- return jQuery.nodeName( event.target, "a" );
- }
- },
-
- beforeunload: {
- postDispatch: function( event ) {
-
- // Support: Firefox 20+
- // Firefox doesn't alert if the returnValue field is not set.
- if ( event.result !== undefined && event.originalEvent ) {
- event.originalEvent.returnValue = event.result;
- }
- }
- }
- },
-
- simulate: function( type, elem, event, bubble ) {
- // Piggyback on a donor event to simulate a different one.
- // Fake originalEvent to avoid donor's stopPropagation, but if the
- // simulated event prevents default then we do the same on the donor.
- var e = jQuery.extend(
- new jQuery.Event(),
- event,
- {
- type: type,
- isSimulated: true,
- originalEvent: {}
- }
- );
- if ( bubble ) {
- jQuery.event.trigger( e, null, elem );
- } else {
- jQuery.event.dispatch.call( elem, e );
- }
- if ( e.isDefaultPrevented() ) {
- event.preventDefault();
- }
- }
-};
-
-jQuery.removeEvent = document.removeEventListener ?
- function( elem, type, handle ) {
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle, false );
- }
- } :
- function( elem, type, handle ) {
- var name = "on" + type;
-
- if ( elem.detachEvent ) {
-
- // #8545, #7054, preventing memory leaks for custom events in IE6-8
- // detachEvent needed property on element, by name of that event, to properly expose it to GC
- if ( typeof elem[ name ] === strundefined ) {
- elem[ name ] = null;
- }
-
- elem.detachEvent( name, handle );
- }
- };
-
-jQuery.Event = function( src, props ) {
- // Allow instantiation without the 'new' keyword
- if ( !(this instanceof jQuery.Event) ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = src.defaultPrevented ||
- src.defaultPrevented === undefined &&
- // Support: IE < 9, Android < 4.0
- src.returnValue === false ?
- returnTrue :
- returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse,
-
- preventDefault: function() {
- var e = this.originalEvent;
-
- this.isDefaultPrevented = returnTrue;
- if ( !e ) {
- return;
- }
-
- // If preventDefault exists, run it on the original event
- if ( e.preventDefault ) {
- e.preventDefault();
-
- // Support: IE
- // Otherwise set the returnValue property of the original event to false
- } else {
- e.returnValue = false;
- }
- },
- stopPropagation: function() {
- var e = this.originalEvent;
-
- this.isPropagationStopped = returnTrue;
- if ( !e ) {
- return;
- }
- // If stopPropagation exists, run it on the original event
- if ( e.stopPropagation ) {
- e.stopPropagation();
- }
-
- // Support: IE
- // Set the cancelBubble property of the original event to true
- e.cancelBubble = true;
- },
- stopImmediatePropagation: function() {
- var e = this.originalEvent;
-
- this.isImmediatePropagationStopped = returnTrue;
-
- if ( e && e.stopImmediatePropagation ) {
- e.stopImmediatePropagation();
- }
-
- this.stopPropagation();
- }
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout",
- pointerenter: "pointerover",
- pointerleave: "pointerout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function( event ) {
- var ret,
- target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj;
-
- // For mousenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply( this, arguments );
- event.type = fix;
- }
- return ret;
- }
- };
-});
-
-// IE submit delegation
-if ( !support.submitBubbles ) {
-
- jQuery.event.special.submit = {
- setup: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Lazy-add a submit handler when a descendant form may potentially be submitted
- jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
- // Node name check avoids a VML-related crash in IE (#9807)
- var elem = e.target,
- form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
- if ( form && !jQuery._data( form, "submitBubbles" ) ) {
- jQuery.event.add( form, "submit._submit", function( event ) {
- event._submit_bubble = true;
- });
- jQuery._data( form, "submitBubbles", true );
- }
- });
- // return undefined since we don't need an event listener
- },
-
- postDispatch: function( event ) {
- // If form was submitted by the user, bubble the event up the tree
- if ( event._submit_bubble ) {
- delete event._submit_bubble;
- if ( this.parentNode && !event.isTrigger ) {
- jQuery.event.simulate( "submit", this.parentNode, event, true );
- }
- }
- },
-
- teardown: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
- jQuery.event.remove( this, "._submit" );
- }
- };
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !support.changeBubbles ) {
-
- jQuery.event.special.change = {
-
- setup: function() {
-
- if ( rformElems.test( this.nodeName ) ) {
- // IE doesn't fire change on a check/radio until blur; trigger it on click
- // after a propertychange. Eat the blur-change in special.change.handle.
- // This still fires onchange a second time for check/radio after blur.
- if ( this.type === "checkbox" || this.type === "radio" ) {
- jQuery.event.add( this, "propertychange._change", function( event ) {
- if ( event.originalEvent.propertyName === "checked" ) {
- this._just_changed = true;
- }
- });
- jQuery.event.add( this, "click._change", function( event ) {
- if ( this._just_changed && !event.isTrigger ) {
- this._just_changed = false;
- }
- // Allow triggered, simulated change events (#11500)
- jQuery.event.simulate( "change", this, event, true );
- });
- }
- return false;
- }
- // Delegated event; lazy-add a change handler on descendant inputs
- jQuery.event.add( this, "beforeactivate._change", function( e ) {
- var elem = e.target;
-
- if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
- jQuery.event.add( elem, "change._change", function( event ) {
- if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
- jQuery.event.simulate( "change", this.parentNode, event, true );
- }
- });
- jQuery._data( elem, "changeBubbles", true );
- }
- });
- },
-
- handle: function( event ) {
- var elem = event.target;
-
- // Swallow native change events from checkbox/radio, we already triggered them above
- if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
- return event.handleObj.handler.apply( this, arguments );
- }
- },
-
- teardown: function() {
- jQuery.event.remove( this, "._change" );
-
- return !rformElems.test( this.nodeName );
- }
- };
-}
-
-// Create "bubbling" focus and blur events
-if ( !support.focusinBubbles ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler on the document while someone wants focusin/focusout
- var handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
- };
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- var doc = this.ownerDocument || this,
- attaches = jQuery._data( doc, fix );
-
- if ( !attaches ) {
- doc.addEventListener( orig, handler, true );
- }
- jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
- },
- teardown: function() {
- var doc = this.ownerDocument || this,
- attaches = jQuery._data( doc, fix ) - 1;
-
- if ( !attaches ) {
- doc.removeEventListener( orig, handler, true );
- jQuery._removeData( doc, fix );
- } else {
- jQuery._data( doc, fix, attaches );
- }
- }
- };
- });
-}
-
-jQuery.fn.extend({
-
- on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
- var type, origFn;
-
- // Types can be a map of types/handlers
- if ( typeof types === "object" ) {
- // ( types-Object, selector, data )
- if ( typeof selector !== "string" ) {
- // ( types-Object, data )
- data = data || selector;
- selector = undefined;
- }
- for ( type in types ) {
- this.on( type, selector, data, types[ type ], one );
- }
- return this;
- }
-
- if ( data == null && fn == null ) {
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return this;
- }
-
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
- // Can use an empty set, since event contains the info
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return this.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- });
- },
- one: function( types, selector, data, fn ) {
- return this.on( types, selector, data, fn, 1 );
- },
- off: function( types, selector, fn ) {
- var handleObj, type;
- if ( types && types.preventDefault && types.handleObj ) {
- // ( event ) dispatched jQuery.Event
- handleObj = types.handleObj;
- jQuery( types.delegateTarget ).off(
- handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
- handleObj.selector,
- handleObj.handler
- );
- return this;
- }
- if ( typeof types === "object" ) {
- // ( types-object [, selector] )
- for ( type in types ) {
- this.off( type, selector, types[ type ] );
- }
- return this;
- }
- if ( selector === false || typeof selector === "function" ) {
- // ( types [, fn] )
- fn = selector;
- selector = undefined;
- }
- if ( fn === false ) {
- fn = returnFalse;
- }
- return this.each(function() {
- jQuery.event.remove( this, types, fn, selector );
- });
- },
-
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
- triggerHandler: function( type, data ) {
- var elem = this[0];
- if ( elem ) {
- return jQuery.event.trigger( type, data, elem, true );
- }
- }
-});
-
-
-function createSafeFragment( document ) {
- var list = nodeNames.split( "|" ),
- safeFrag = document.createDocumentFragment();
-
- if ( safeFrag.createElement ) {
- while ( list.length ) {
- safeFrag.createElement(
- list.pop()
- );
- }
- }
- return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
- "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
- rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
- rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
- rleadingWhitespace = /^\s+/,
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
- rtagName = /<([\w:]+)/,
- rtbody = /<tbody/i,
- rhtml = /<|&#?\w+;/,
- rnoInnerhtml = /<(?:script|style|link)/i,
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptType = /^$|\/(?:java|ecma)script/i,
- rscriptTypeMasked = /^true\/(.*)/,
- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
-
- // We have to close these tags to support XHTML (#13200)
- wrapMap = {
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
- legend: [ 1, "<fieldset>", "</fieldset>" ],
- area: [ 1, "<map>", "</map>" ],
- param: [ 1, "<object>", "</object>" ],
- thead: [ 1, "<table>", "</table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
- // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
- // unless wrapped in a div with non-breaking characters in front of it.
- _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ]
- },
- safeFragment = createSafeFragment( document ),
- fragmentDiv = safeFragment.appendChild( document.createElement("div") );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-function getAll( context, tag ) {
- var elems, elem,
- i = 0,
- found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) :
- typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) :
- undefined;
-
- if ( !found ) {
- for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
- if ( !tag || jQuery.nodeName( elem, tag ) ) {
- found.push( elem );
- } else {
- jQuery.merge( found, getAll( elem, tag ) );
- }
- }
- }
-
- return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
- jQuery.merge( [ context ], found ) :
- found;
-}
-
-// Used in buildFragment, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
- if ( rcheckableType.test( elem.type ) ) {
- elem.defaultChecked = elem.checked;
- }
-}
-
-// Support: IE<8
-// Manipulating tables requires a tbody
-function manipulationTarget( elem, content ) {
- return jQuery.nodeName( elem, "table" ) &&
- jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
-
- elem.getElementsByTagName("tbody")[0] ||
- elem.appendChild( elem.ownerDocument.createElement("tbody") ) :
- elem;
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
- elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type;
- return elem;
-}
-function restoreScript( elem ) {
- var match = rscriptTypeMasked.exec( elem.type );
- if ( match ) {
- elem.type = match[1];
- } else {
- elem.removeAttribute("type");
- }
- return elem;
-}
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
- var elem,
- i = 0;
- for ( ; (elem = elems[i]) != null; i++ ) {
- jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
- }
-}
-
-function cloneCopyEvent( src, dest ) {
-
- if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
- return;
- }
-
- var type, i, l,
- oldData = jQuery._data( src ),
- curData = jQuery._data( dest, oldData ),
- events = oldData.events;
-
- if ( events ) {
- delete curData.handle;
- curData.events = {};
-
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type, events[ type ][ i ] );
- }
- }
- }
-
- // make the cloned public data object a copy from the original
- if ( curData.data ) {
- curData.data = jQuery.extend( {}, curData.data );
- }
-}
-
-function fixCloneNodeIssues( src, dest ) {
- var nodeName, e, data;
-
- // We do not need to do anything for non-Elements
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- nodeName = dest.nodeName.toLowerCase();
-
- // IE6-8 copies events bound via attachEvent when using cloneNode.
- if ( !support.noCloneEvent && dest[ jQuery.expando ] ) {
- data = jQuery._data( dest );
-
- for ( e in data.events ) {
- jQuery.removeEvent( dest, e, data.handle );
- }
-
- // Event data gets referenced instead of copied if the expando gets copied too
- dest.removeAttribute( jQuery.expando );
- }
-
- // IE blanks contents when cloning scripts, and tries to evaluate newly-set text
- if ( nodeName === "script" && dest.text !== src.text ) {
- disableScript( dest ).text = src.text;
- restoreScript( dest );
-
- // IE6-10 improperly clones children of object elements using classid.
- // IE10 throws NoModificationAllowedError if parent is null, #12132.
- } else if ( nodeName === "object" ) {
- if ( dest.parentNode ) {
- dest.outerHTML = src.outerHTML;
- }
-
- // This path appears unavoidable for IE9. When cloning an object
- // element in IE9, the outerHTML strategy above is not sufficient.
- // If the src has innerHTML and the destination does not,
- // copy the src.innerHTML into the dest.innerHTML. #10324
- if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
- dest.innerHTML = src.innerHTML;
- }
-
- } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
- // IE6-8 fails to persist the checked state of a cloned checkbox
- // or radio button. Worse, IE6-7 fail to give the cloned element
- // a checked appearance if the defaultChecked value isn't also set
-
- dest.defaultChecked = dest.checked = src.checked;
-
- // IE6-7 get confused and end up setting the value of a cloned
- // checkbox/radio button to an empty string instead of "on"
- if ( dest.value !== src.value ) {
- dest.value = src.value;
- }
-
- // IE6-8 fails to return the selected option to the default selected
- // state when cloning options
- } else if ( nodeName === "option" ) {
- dest.defaultSelected = dest.selected = src.defaultSelected;
-
- // IE6-8 fails to set the defaultValue to the correct value when
- // cloning other types of input fields
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
-}
-
-jQuery.extend({
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var destElements, node, clone, i, srcElements,
- inPage = jQuery.contains( elem.ownerDocument, elem );
-
- if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
- clone = elem.cloneNode( true );
-
- // IE<=8 does not properly clone detached, unknown element nodes
- } else {
- fragmentDiv.innerHTML = elem.outerHTML;
- fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
- }
-
- if ( (!support.noCloneEvent || !support.noCloneChecked) &&
- (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-
- // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
- destElements = getAll( clone );
- srcElements = getAll( elem );
-
- // Fix all IE cloning issues
- for ( i = 0; (node = srcElements[i]) != null; ++i ) {
- // Ensure that the destination node is not null; Fixes #9587
- if ( destElements[i] ) {
- fixCloneNodeIssues( node, destElements[i] );
- }
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- if ( deepDataAndEvents ) {
- srcElements = srcElements || getAll( elem );
- destElements = destElements || getAll( clone );
-
- for ( i = 0; (node = srcElements[i]) != null; i++ ) {
- cloneCopyEvent( node, destElements[i] );
- }
- } else {
- cloneCopyEvent( elem, clone );
- }
- }
-
- // Preserve script evaluation history
- destElements = getAll( clone, "script" );
- if ( destElements.length > 0 ) {
- setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
- }
-
- destElements = srcElements = node = null;
-
- // Return the cloned set
- return clone;
- },
-
- buildFragment: function( elems, context, scripts, selection ) {
- var j, elem, contains,
- tmp, tag, tbody, wrap,
- l = elems.length,
-
- // Ensure a safe fragment
- safe = createSafeFragment( context ),
-
- nodes = [],
- i = 0;
-
- for ( ; i < l; i++ ) {
- elem = elems[ i ];
-
- if ( elem || elem === 0 ) {
-
- // Add nodes directly
- if ( jQuery.type( elem ) === "object" ) {
- jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
- // Convert non-html into a text node
- } else if ( !rhtml.test( elem ) ) {
- nodes.push( context.createTextNode( elem ) );
-
- // Convert html into DOM nodes
- } else {
- tmp = tmp || safe.appendChild( context.createElement("div") );
-
- // Deserialize a standard representation
- tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase();
- wrap = wrapMap[ tag ] || wrapMap._default;
-
- tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
-
- // Descend through wrappers to the right content
- j = wrap[0];
- while ( j-- ) {
- tmp = tmp.lastChild;
- }
-
- // Manually add leading whitespace removed by IE
- if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
- nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
- }
-
- // Remove IE's autoinserted <tbody> from table fragments
- if ( !support.tbody ) {
-
- // String was a <table>, *may* have spurious <tbody>
- elem = tag === "table" && !rtbody.test( elem ) ?
- tmp.firstChild :
-
- // String was a bare <thead> or <tfoot>
- wrap[1] === "<table>" && !rtbody.test( elem ) ?
- tmp :
- 0;
-
- j = elem && elem.childNodes.length;
- while ( j-- ) {
- if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
- elem.removeChild( tbody );
- }
- }
- }
-
- jQuery.merge( nodes, tmp.childNodes );
-
- // Fix #12392 for WebKit and IE > 9
- tmp.textContent = "";
-
- // Fix #12392 for oldIE
- while ( tmp.firstChild ) {
- tmp.removeChild( tmp.firstChild );
- }
-
- // Remember the top-level container for proper cleanup
- tmp = safe.lastChild;
- }
- }
- }
-
- // Fix #11356: Clear elements from fragment
- if ( tmp ) {
- safe.removeChild( tmp );
- }
-
- // Reset defaultChecked for any radios and checkboxes
- // about to be appended to the DOM in IE 6/7 (#8060)
- if ( !support.appendChecked ) {
- jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
- }
-
- i = 0;
- while ( (elem = nodes[ i++ ]) ) {
-
- // #4087 - If origin and destination elements are the same, and this is
- // that element, do not do anything
- if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
- continue;
- }
-
- contains = jQuery.contains( elem.ownerDocument, elem );
-
- // Append to fragment
- tmp = getAll( safe.appendChild( elem ), "script" );
-
- // Preserve script evaluation history
- if ( contains ) {
- setGlobalEval( tmp );
- }
-
- // Capture executables
- if ( scripts ) {
- j = 0;
- while ( (elem = tmp[ j++ ]) ) {
- if ( rscriptType.test( elem.type || "" ) ) {
- scripts.push( elem );
- }
- }
- }
- }
-
- tmp = null;
-
- return safe;
- },
-
- cleanData: function( elems, /* internal */ acceptData ) {
- var elem, type, id, data,
- i = 0,
- internalKey = jQuery.expando,
- cache = jQuery.cache,
- deleteExpando = support.deleteExpando,
- special = jQuery.event.special;
-
- for ( ; (elem = elems[i]) != null; i++ ) {
- if ( acceptData || jQuery.acceptData( elem ) ) {
-
- id = elem[ internalKey ];
- data = id && cache[ id ];
-
- if ( data ) {
- if ( data.events ) {
- for ( type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
- }
-
- // Remove cache only if it was not already removed by jQuery.event.remove
- if ( cache[ id ] ) {
-
- delete cache[ id ];
-
- // IE does not allow us to delete expando properties from nodes,
- // nor does it have a removeAttribute function on Document nodes;
- // we must handle all of these cases
- if ( deleteExpando ) {
- delete elem[ internalKey ];
-
- } else if ( typeof elem.removeAttribute !== strundefined ) {
- elem.removeAttribute( internalKey );
-
- } else {
- elem[ internalKey ] = null;
- }
-
- deletedIds.push( id );
- }
- }
- }
- }
- }
-});
-
-jQuery.fn.extend({
- text: function( value ) {
- return access( this, function( value ) {
- return value === undefined ?
- jQuery.text( this ) :
- this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
- }, null, value, arguments.length );
- },
-
- append: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.appendChild( elem );
- }
- });
- },
-
- prepend: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- var target = manipulationTarget( this, elem );
- target.insertBefore( elem, target.firstChild );
- }
- });
- },
-
- before: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this );
- }
- });
- },
-
- after: function() {
- return this.domManip( arguments, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- }
- });
- },
-
- remove: function( selector, keepData /* Internal Use Only */ ) {
- var elem,
- elems = selector ? jQuery.filter( selector, this ) : this,
- i = 0;
-
- for ( ; (elem = elems[i]) != null; i++ ) {
-
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem ) );
- }
-
- if ( elem.parentNode ) {
- if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
- setGlobalEval( getAll( elem, "script" ) );
- }
- elem.parentNode.removeChild( elem );
- }
- }
-
- return this;
- },
-
- empty: function() {
- var elem,
- i = 0;
-
- for ( ; (elem = this[i]) != null; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- }
-
- // Remove any remaining nodes
- while ( elem.firstChild ) {
- elem.removeChild( elem.firstChild );
- }
-
- // If this is a select, ensure that it displays empty (#12336)
- // Support: IE<9
- if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
- elem.options.length = 0;
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map(function() {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- });
- },
-
- html: function( value ) {
- return access( this, function( value ) {
- var elem = this[ 0 ] || {},
- i = 0,
- l = this.length;
-
- if ( value === undefined ) {
- return elem.nodeType === 1 ?
- elem.innerHTML.replace( rinlinejQuery, "" ) :
- undefined;
- }
-
- // See if we can take a shortcut and just use innerHTML
- if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
- ( support.htmlSerialize || !rnoshimcache.test( value ) ) &&
- ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
- !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) {
-
- value = value.replace( rxhtmlTag, "<$1></$2>" );
-
- try {
- for (; i < l; i++ ) {
- // Remove element nodes and prevent memory leaks
- elem = this[i] || {};
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- elem.innerHTML = value;
- }
- }
-
- elem = 0;
-
- // If using innerHTML throws an exception, use the fallback method
- } catch(e) {}
- }
-
- if ( elem ) {
- this.empty().append( value );
- }
- }, null, value, arguments.length );
- },
-
- replaceWith: function() {
- var arg = arguments[ 0 ];
-
- // Make the changes, replacing each context element with the new content
- this.domManip( arguments, function( elem ) {
- arg = this.parentNode;
-
- jQuery.cleanData( getAll( this ) );
-
- if ( arg ) {
- arg.replaceChild( elem, this );
- }
- });
-
- // Force removal if there was no new content (e.g., from empty arguments)
- return arg && (arg.length || arg.nodeType) ? this : this.remove();
- },
-
- detach: function( selector ) {
- return this.remove( selector, true );
- },
-
- domManip: function( args, callback ) {
-
- // Flatten any nested arrays
- args = concat.apply( [], args );
-
- var first, node, hasScripts,
- scripts, doc, fragment,
- i = 0,
- l = this.length,
- set = this,
- iNoClone = l - 1,
- value = args[0],
- isFunction = jQuery.isFunction( value );
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( isFunction ||
- ( l > 1 && typeof value === "string" &&
- !support.checkClone && rchecked.test( value ) ) ) {
- return this.each(function( index ) {
- var self = set.eq( index );
- if ( isFunction ) {
- args[0] = value.call( this, index, self.html() );
- }
- self.domManip( args, callback );
- });
- }
-
- if ( l ) {
- fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
- first = fragment.firstChild;
-
- if ( fragment.childNodes.length === 1 ) {
- fragment = first;
- }
-
- if ( first ) {
- scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
- hasScripts = scripts.length;
-
- // Use the original fragment for the last item instead of the first because it can end up
- // being emptied incorrectly in certain situations (#8070).
- for ( ; i < l; i++ ) {
- node = fragment;
-
- if ( i !== iNoClone ) {
- node = jQuery.clone( node, true, true );
-
- // Keep references to cloned scripts for later restoration
- if ( hasScripts ) {
- jQuery.merge( scripts, getAll( node, "script" ) );
- }
- }
-
- callback.call( this[i], node, i );
- }
-
- if ( hasScripts ) {
- doc = scripts[ scripts.length - 1 ].ownerDocument;
-
- // Reenable scripts
- jQuery.map( scripts, restoreScript );
-
- // Evaluate executable scripts on first document insertion
- for ( i = 0; i < hasScripts; i++ ) {
- node = scripts[ i ];
- if ( rscriptType.test( node.type || "" ) &&
- !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
-
- if ( node.src ) {
- // Optional AJAX dependency, but won't run scripts if not present
- if ( jQuery._evalUrl ) {
- jQuery._evalUrl( node.src );
- }
- } else {
- jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
- }
- }
- }
- }
-
- // Fix #11809: Avoid leaking memory
- fragment = first = null;
- }
- }
-
- return this;
- }
-});
-
-jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var elems,
- i = 0,
- ret = [],
- insert = jQuery( selector ),
- last = insert.length - 1;
-
- for ( ; i <= last; i++ ) {
- elems = i === last ? this : this.clone(true);
- jQuery( insert[i] )[ original ]( elems );
-
- // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
- push.apply( ret, elems.get() );
- }
-
- return this.pushStack( ret );
- };
-});
-
-
-var iframe,
- elemdisplay = {};
-
-/**
- * Retrieve the actual display of a element
- * @param {String} name nodeName of the element
- * @param {Object} doc Document object
- */
-// Called only from within defaultDisplay
-function actualDisplay( name, doc ) {
- var style,
- elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
-
- // getDefaultComputedStyle might be reliably used only on attached element
- display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ?
-
- // Use of this method is a temporary fix (more like optmization) until something better comes along,
- // since it was removed from specification and supported only in FF
- style.display : jQuery.css( elem[ 0 ], "display" );
-
- // We don't have any data stored on the element,
- // so use "detach" method as fast way to get rid of the element
- elem.detach();
-
- return display;
-}
-
-/**
- * Try to determine the default display value of an element
- * @param {String} nodeName
- */
-function defaultDisplay( nodeName ) {
- var doc = document,
- display = elemdisplay[ nodeName ];
-
- if ( !display ) {
- display = actualDisplay( nodeName, doc );
-
- // If the simple way fails, read from inside an iframe
- if ( display === "none" || !display ) {
-
- // Use the already-created iframe if possible
- iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement );
-
- // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
- doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;
-
- // Support: IE
- doc.write();
- doc.close();
-
- display = actualDisplay( nodeName, doc );
- iframe.detach();
- }
-
- // Store the correct default display
- elemdisplay[ nodeName ] = display;
- }
-
- return display;
-}
-
-
-(function() {
- var shrinkWrapBlocksVal;
-
- support.shrinkWrapBlocks = function() {
- if ( shrinkWrapBlocksVal != null ) {
- return shrinkWrapBlocksVal;
- }
-
- // Will be changed later if needed.
- shrinkWrapBlocksVal = false;
-
- // Minified: var b,c,d
- var div, body, container;
-
- body = document.getElementsByTagName( "body" )[ 0 ];
- if ( !body || !body.style ) {
- // Test fired too early or in an unsupported environment, exit.
- return;
- }
-
- // Setup
- div = document.createElement( "div" );
- container = document.createElement( "div" );
- container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
- body.appendChild( container ).appendChild( div );
-
- // Support: IE6
- // Check if elements with layout shrink-wrap their children
- if ( typeof div.style.zoom !== strundefined ) {
- // Reset CSS: box-sizing; display; margin; border
- div.style.cssText =
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
- "box-sizing:content-box;display:block;margin:0;border:0;" +
- "padding:1px;width:1px;zoom:1";
- div.appendChild( document.createElement( "div" ) ).style.width = "5px";
- shrinkWrapBlocksVal = div.offsetWidth !== 3;
- }
-
- body.removeChild( container );
-
- return shrinkWrapBlocksVal;
- };
-
-})();
-var rmargin = (/^margin/);
-
-var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
-
-
-
-var getStyles, curCSS,
- rposition = /^(top|right|bottom|left)$/;
-
-if ( window.getComputedStyle ) {
- getStyles = function( elem ) {
- return elem.ownerDocument.defaultView.getComputedStyle( elem, null );
- };
-
- curCSS = function( elem, name, computed ) {
- var width, minWidth, maxWidth, ret,
- style = elem.style;
-
- computed = computed || getStyles( elem );
-
- // getPropertyValue is only needed for .css('filter') in IE9, see #12537
- ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
-
- if ( computed ) {
-
- if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
- ret = jQuery.style( elem, name );
- }
-
- // A tribute to the "awesome hack by Dean Edwards"
- // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
- // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
- // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
- if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
-
- // Remember the original values
- width = style.width;
- minWidth = style.minWidth;
- maxWidth = style.maxWidth;
-
- // Put in the new values to get a computed value out
- style.minWidth = style.maxWidth = style.width = ret;
- ret = computed.width;
-
- // Revert the changed values
- style.width = width;
- style.minWidth = minWidth;
- style.maxWidth = maxWidth;
- }
- }
-
- // Support: IE
- // IE returns zIndex value as an integer.
- return ret === undefined ?
- ret :
- ret + "";
- };
-} else if ( document.documentElement.currentStyle ) {
- getStyles = function( elem ) {
- return elem.currentStyle;
- };
-
- curCSS = function( elem, name, computed ) {
- var left, rs, rsLeft, ret,
- style = elem.style;
-
- computed = computed || getStyles( elem );
- ret = computed ? computed[ name ] : undefined;
-
- // Avoid setting ret to empty string here
- // so we don't default to auto
- if ( ret == null && style && style[ name ] ) {
- ret = style[ name ];
- }
-
- // From the awesome hack by Dean Edwards
- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
- // If we're not dealing with a regular pixel number
- // but a number that has a weird ending, we need to convert it to pixels
- // but not position css attributes, as those are proportional to the parent element instead
- // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
- if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
-
- // Remember the original values
- left = style.left;
- rs = elem.runtimeStyle;
- rsLeft = rs && rs.left;
-
- // Put in the new values to get a computed value out
- if ( rsLeft ) {
- rs.left = elem.currentStyle.left;
- }
- style.left = name === "fontSize" ? "1em" : ret;
- ret = style.pixelLeft + "px";
-
- // Revert the changed values
- style.left = left;
- if ( rsLeft ) {
- rs.left = rsLeft;
- }
- }
-
- // Support: IE
- // IE returns zIndex value as an integer.
- return ret === undefined ?
- ret :
- ret + "" || "auto";
- };
-}
-
-
-
-
-function addGetHookIf( conditionFn, hookFn ) {
- // Define the hook, we'll check on the first run if it's really needed.
- return {
- get: function() {
- var condition = conditionFn();
-
- if ( condition == null ) {
- // The test was not ready at this point; screw the hook this time
- // but check again when needed next time.
- return;
- }
-
- if ( condition ) {
- // Hook not needed (or it's not possible to use it due to missing dependency),
- // remove it.
- // Since there are no other hooks for marginRight, remove the whole object.
- delete this.get;
- return;
- }
-
- // Hook needed; redefine it so that the support test is not executed again.
-
- return (this.get = hookFn).apply( this, arguments );
- }
- };
-}
-
-
-(function() {
- // Minified: var b,c,d,e,f,g, h,i
- var div, style, a, pixelPositionVal, boxSizingReliableVal,
- reliableHiddenOffsetsVal, reliableMarginRightVal;
-
- // Setup
- div = document.createElement( "div" );
- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
- a = div.getElementsByTagName( "a" )[ 0 ];
- style = a && a.style;
-
- // Finish early in limited (non-browser) environments
- if ( !style ) {
- return;
- }
-
- style.cssText = "float:left;opacity:.5";
-
- // Support: IE<9
- // Make sure that element opacity exists (as opposed to filter)
- support.opacity = style.opacity === "0.5";
-
- // Verify style float existence
- // (IE uses styleFloat instead of cssFloat)
- support.cssFloat = !!style.cssFloat;
-
- div.style.backgroundClip = "content-box";
- div.cloneNode( true ).style.backgroundClip = "";
- support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- support.boxSizing = style.boxSizing === "" || style.MozBoxSizing === "" ||
- style.WebkitBoxSizing === "";
-
- jQuery.extend(support, {
- reliableHiddenOffsets: function() {
- if ( reliableHiddenOffsetsVal == null ) {
- computeStyleTests();
- }
- return reliableHiddenOffsetsVal;
- },
-
- boxSizingReliable: function() {
- if ( boxSizingReliableVal == null ) {
- computeStyleTests();
- }
- return boxSizingReliableVal;
- },
-
- pixelPosition: function() {
- if ( pixelPositionVal == null ) {
- computeStyleTests();
- }
- return pixelPositionVal;
- },
-
- // Support: Android 2.3
- reliableMarginRight: function() {
- if ( reliableMarginRightVal == null ) {
- computeStyleTests();
- }
- return reliableMarginRightVal;
- }
- });
-
- function computeStyleTests() {
- // Minified: var b,c,d,j
- var div, body, container, contents;
-
- body = document.getElementsByTagName( "body" )[ 0 ];
- if ( !body || !body.style ) {
- // Test fired too early or in an unsupported environment, exit.
- return;
- }
-
- // Setup
- div = document.createElement( "div" );
- container = document.createElement( "div" );
- container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
- body.appendChild( container ).appendChild( div );
-
- div.style.cssText =
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" +
- "box-sizing:border-box;display:block;margin-top:1%;top:1%;" +
- "border:1px;padding:1px;width:4px;position:absolute";
-
- // Support: IE<9
- // Assume reasonable values in the absence of getComputedStyle
- pixelPositionVal = boxSizingReliableVal = false;
- reliableMarginRightVal = true;
-
- // Check for getComputedStyle so that this code is not run in IE<9.
- if ( window.getComputedStyle ) {
- pixelPositionVal = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
- boxSizingReliableVal =
- ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
-
- // Support: Android 2.3
- // Div with explicit width and no margin-right incorrectly
- // gets computed margin-right based on width of container (#3333)
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- contents = div.appendChild( document.createElement( "div" ) );
-
- // Reset CSS: box-sizing; display; margin; border; padding
- contents.style.cssText = div.style.cssText =
- // Support: Firefox<29, Android 2.3
- // Vendor-prefix box-sizing
- "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
- "box-sizing:content-box;display:block;margin:0;border:0;padding:0";
- contents.style.marginRight = contents.style.width = "0";
- div.style.width = "1px";
-
- reliableMarginRightVal =
- !parseFloat( ( window.getComputedStyle( contents, null ) || {} ).marginRight );
- }
-
- // Support: IE8
- // Check if table cells still have offsetWidth/Height when they are set
- // to display:none and there are still other visible table cells in a
- // table row; if so, offsetWidth/Height are not reliable for use when
- // determining if an element has been hidden directly using
- // display:none (it is still safe to use offsets if a parent element is
- // hidden; don safety goggles and see bug #4512 for more information).
- div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
- contents = div.getElementsByTagName( "td" );
- contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none";
- reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
- if ( reliableHiddenOffsetsVal ) {
- contents[ 0 ].style.display = "";
- contents[ 1 ].style.display = "none";
- reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
- }
-
- body.removeChild( container );
- }
-
-})();
-
-
-// A method for quickly swapping in/out CSS properties to get correct calculations.
-jQuery.swap = function( elem, options, callback, args ) {
- var ret, name,
- old = {};
-
- // Remember the old values, and insert the new ones
- for ( name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- ret = callback.apply( elem, args || [] );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
-
- return ret;
-};
-
-
-var
- ralpha = /alpha\([^)]*\)/i,
- ropacity = /opacity\s*=\s*([^)]*)/,
-
- // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
- // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
- rdisplayswap = /^(none|table(?!-c[ea]).+)/,
- rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
- rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ),
-
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssNormalTransform = {
- letterSpacing: "0",
- fontWeight: "400"
- },
-
- cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
-
-
-// return a css property mapped to a potentially vendor prefixed property
-function vendorPropName( style, name ) {
-
- // shortcut for names that are not vendor prefixed
- if ( name in style ) {
- return name;
- }
-
- // check for vendor prefixed names
- var capName = name.charAt(0).toUpperCase() + name.slice(1),
- origName = name,
- i = cssPrefixes.length;
-
- while ( i-- ) {
- name = cssPrefixes[ i ] + capName;
- if ( name in style ) {
- return name;
- }
- }
-
- return origName;
-}
-
-function showHide( elements, show ) {
- var display, elem, hidden,
- values = [],
- index = 0,
- length = elements.length;
-
- for ( ; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
-
- values[ index ] = jQuery._data( elem, "olddisplay" );
- display = elem.style.display;
- if ( show ) {
- // Reset the inline display of this element to learn if it is
- // being hidden by cascaded rules or not
- if ( !values[ index ] && display === "none" ) {
- elem.style.display = "";
- }
-
- // Set elements which have been overridden with display: none
- // in a stylesheet to whatever the default browser style is
- // for such an element
- if ( elem.style.display === "" && isHidden( elem ) ) {
- values[ index ] = jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
- }
- } else {
- hidden = isHidden( elem );
-
- if ( display && display !== "none" || !hidden ) {
- jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
- }
- }
- }
-
- // Set the display of most of the elements in a second loop
- // to avoid the constant reflow
- for ( index = 0; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
- if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
- elem.style.display = show ? values[ index ] || "" : "none";
- }
- }
-
- return elements;
-}
-
-function setPositiveNumber( elem, value, subtract ) {
- var matches = rnumsplit.exec( value );
- return matches ?
- // Guard against undefined "subtract", e.g., when used as in cssHooks
- Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
- value;
-}
-
-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
- var i = extra === ( isBorderBox ? "border" : "content" ) ?
- // If we already have the right measurement, avoid augmentation
- 4 :
- // Otherwise initialize for horizontal or vertical properties
- name === "width" ? 1 : 0,
-
- val = 0;
-
- for ( ; i < 4; i += 2 ) {
- // both box models exclude margin, so add it if we want it
- if ( extra === "margin" ) {
- val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
- }
-
- if ( isBorderBox ) {
- // border-box includes padding, so remove it if we want content
- if ( extra === "content" ) {
- val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
- }
-
- // at this point, extra isn't border nor margin, so remove border
- if ( extra !== "margin" ) {
- val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- } else {
- // at this point, extra isn't content, so add padding
- val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
- // at this point, extra isn't content nor padding, so add border
- if ( extra !== "padding" ) {
- val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- }
- }
-
- return val;
-}
-
-function getWidthOrHeight( elem, name, extra ) {
-
- // Start with offset property, which is equivalent to the border-box value
- var valueIsBorderBox = true,
- val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
- styles = getStyles( elem ),
- isBorderBox = support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
- // some non-html elements return undefined for offsetWidth, so check for null/undefined
- // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
- // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
- if ( val <= 0 || val == null ) {
- // Fall back to computed then uncomputed css if necessary
- val = curCSS( elem, name, styles );
- if ( val < 0 || val == null ) {
- val = elem.style[ name ];
- }
-
- // Computed unit is not pixels. Stop here and return.
- if ( rnumnonpx.test(val) ) {
- return val;
- }
-
- // we need the check for style in case a browser which returns unreliable values
- // for getComputedStyle silently falls back to the reliable elem.style
- valueIsBorderBox = isBorderBox && ( support.boxSizingReliable() || val === elem.style[ name ] );
-
- // Normalize "", auto, and prepare for extra
- val = parseFloat( val ) || 0;
- }
-
- // use the active box-sizing model to add/subtract irrelevant styles
- return ( val +
- augmentWidthOrHeight(
- elem,
- name,
- extra || ( isBorderBox ? "border" : "content" ),
- valueIsBorderBox,
- styles
- )
- ) + "px";
-}
-
-jQuery.extend({
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity" );
- return ret === "" ? "1" : ret;
- }
- }
- }
- },
-
- // Don't automatically add "px" to these possibly-unitless properties
- cssNumber: {
- "columnCount": true,
- "fillOpacity": true,
- "flexGrow": true,
- "flexShrink": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "order": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- // normalize float css property
- "float": support.cssFloat ? "cssFloat" : "styleFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, hooks,
- origName = jQuery.camelCase( name ),
- style = elem.style;
-
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
-
- // gets hook for the prefixed version
- // followed by the unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // convert relative number strings (+= or -=) to relative numbers. #7345
- if ( type === "string" && (ret = rrelNum.exec( value )) ) {
- value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that null and NaN values aren't set. See: #7116
- if ( value == null || value !== value ) {
- return;
- }
-
- // If a number was passed in, add 'px' to the (except for certain CSS properties)
- if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
- value += "px";
- }
-
- // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
- // but it would mean to define eight (for every problematic property) identical functions
- if ( !support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
- style[ name ] = "inherit";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
-
- // Support: IE
- // Swallow errors from 'invalid' CSS values (#5509)
- try {
- style[ name ] = value;
- } catch(e) {}
- }
-
- } else {
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra, styles ) {
- var num, val, hooks,
- origName = jQuery.camelCase( name );
-
- // Make sure that we're working with the right name
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
-
- // gets hook for the prefixed version
- // followed by the unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks ) {
- val = hooks.get( elem, true, extra );
- }
-
- // Otherwise, if a way to get the computed value exists, use that
- if ( val === undefined ) {
- val = curCSS( elem, name, styles );
- }
-
- //convert "normal" to computed value
- if ( val === "normal" && name in cssNormalTransform ) {
- val = cssNormalTransform[ name ];
- }
-
- // Return, converting to number if forced or a qualifier was provided and val looks numeric
- if ( extra === "" || extra ) {
- num = parseFloat( val );
- return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
- }
- return val;
- }
-});
-
-jQuery.each([ "height", "width" ], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- if ( computed ) {
- // certain elements can have dimension info if we invisibly show them
- // however, it must have a current display style that would benefit from this
- return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ?
- jQuery.swap( elem, cssShow, function() {
- return getWidthOrHeight( elem, name, extra );
- }) :
- getWidthOrHeight( elem, name, extra );
- }
- },
-
- set: function( elem, value, extra ) {
- var styles = extra && getStyles( elem );
- return setPositiveNumber( elem, value, extra ?
- augmentWidthOrHeight(
- elem,
- name,
- extra,
- support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
- styles
- ) : 0
- );
- }
- };
-});
-
-if ( !support.opacity ) {
- jQuery.cssHooks.opacity = {
- get: function( elem, computed ) {
- // IE uses filters for opacity
- return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
- ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
- computed ? "1" : "";
- },
-
- set: function( elem, value ) {
- var style = elem.style,
- currentStyle = elem.currentStyle,
- opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
- filter = currentStyle && currentStyle.filter || style.filter || "";
-
- // IE has trouble with opacity if it does not have layout
- // Force it by setting the zoom level
- style.zoom = 1;
-
- // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
- // if value === "", then remove inline opacity #12685
- if ( ( value >= 1 || value === "" ) &&
- jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
- style.removeAttribute ) {
-
- // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
- // if "filter:" is present at all, clearType is disabled, we want to avoid this
- // style.removeAttribute is IE Only, but so apparently is this code path...
- style.removeAttribute( "filter" );
-
- // if there is no filter style applied in a css rule or unset inline opacity, we are done
- if ( value === "" || currentStyle && !currentStyle.filter ) {
- return;
- }
- }
-
- // otherwise, set new filter values
- style.filter = ralpha.test( filter ) ?
- filter.replace( ralpha, opacity ) :
- filter + " " + opacity;
- }
- };
-}
-
-jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
- function( elem, computed ) {
- if ( computed ) {
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // Work around by temporarily setting element display to inline-block
- return jQuery.swap( elem, { "display": "inline-block" },
- curCSS, [ elem, "marginRight" ] );
- }
- }
-);
-
-// These hooks are used by animate to expand properties
-jQuery.each({
- margin: "",
- padding: "",
- border: "Width"
-}, function( prefix, suffix ) {
- jQuery.cssHooks[ prefix + suffix ] = {
- expand: function( value ) {
- var i = 0,
- expanded = {},
-
- // assumes a single number if not a string
- parts = typeof value === "string" ? value.split(" ") : [ value ];
-
- for ( ; i < 4; i++ ) {
- expanded[ prefix + cssExpand[ i ] + suffix ] =
- parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
- }
-
- return expanded;
- }
- };
-
- if ( !rmargin.test( prefix ) ) {
- jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
- }
-});
-
-jQuery.fn.extend({
- css: function( name, value ) {
- return access( this, function( elem, name, value ) {
- var styles, len,
- map = {},
- i = 0;
-
- if ( jQuery.isArray( name ) ) {
- styles = getStyles( elem );
- len = name.length;
-
- for ( ; i < len; i++ ) {
- map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
- }
-
- return map;
- }
-
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- }, name, value, arguments.length > 1 );
- },
- show: function() {
- return showHide( this, true );
- },
- hide: function() {
- return showHide( this );
- },
- toggle: function( state ) {
- if ( typeof state === "boolean" ) {
- return state ? this.show() : this.hide();
- }
-
- return this.each(function() {
- if ( isHidden( this ) ) {
- jQuery( this ).show();
- } else {
- jQuery( this ).hide();
- }
- });
- }
-});
-
-
-function Tween( elem, options, prop, end, easing ) {
- return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
- constructor: Tween,
- init: function( elem, options, prop, end, easing, unit ) {
- this.elem = elem;
- this.prop = prop;
- this.easing = easing || "swing";
- this.options = options;
- this.start = this.now = this.cur();
- this.end = end;
- this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
- },
- cur: function() {
- var hooks = Tween.propHooks[ this.prop ];
-
- return hooks && hooks.get ?
- hooks.get( this ) :
- Tween.propHooks._default.get( this );
- },
- run: function( percent ) {
- var eased,
- hooks = Tween.propHooks[ this.prop ];
-
- if ( this.options.duration ) {
- this.pos = eased = jQuery.easing[ this.easing ](
- percent, this.options.duration * percent, 0, 1, this.options.duration
- );
- } else {
- this.pos = eased = percent;
- }
- this.now = ( this.end - this.start ) * eased + this.start;
-
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- if ( hooks && hooks.set ) {
- hooks.set( this );
- } else {
- Tween.propHooks._default.set( this );
- }
- return this;
- }
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
- _default: {
- get: function( tween ) {
- var result;
-
- if ( tween.elem[ tween.prop ] != null &&
- (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
- return tween.elem[ tween.prop ];
- }
-
- // passing an empty string as a 3rd parameter to .css will automatically
- // attempt a parseFloat and fallback to a string if the parse fails
- // so, simple values such as "10px" are parsed to Float.
- // complex values such as "rotate(1rad)" are returned as is.
- result = jQuery.css( tween.elem, tween.prop, "" );
- // Empty strings, null, undefined and "auto" are converted to 0.
- return !result || result === "auto" ? 0 : result;
- },
- set: function( tween ) {
- // use step hook for back compat - use cssHook if its there - use .style if its
- // available and use plain properties where available
- if ( jQuery.fx.step[ tween.prop ] ) {
- jQuery.fx.step[ tween.prop ]( tween );
- } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
- jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
- } else {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
- }
-};
-
-// Support: IE <=9
-// Panic based approach to setting things on disconnected nodes
-
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
- set: function( tween ) {
- if ( tween.elem.nodeType && tween.elem.parentNode ) {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
-};
-
-jQuery.easing = {
- linear: function( p ) {
- return p;
- },
- swing: function( p ) {
- return 0.5 - Math.cos( p * Math.PI ) / 2;
- }
-};
-
-jQuery.fx = Tween.prototype.init;
-
-// Back Compat <1.8 extension point
-jQuery.fx.step = {};
-
-
-
-
-var
- fxNow, timerId,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ),
- rrun = /queueHooks$/,
- animationPrefilters = [ defaultPrefilter ],
- tweeners = {
- "*": [ function( prop, value ) {
- var tween = this.createTween( prop, value ),
- target = tween.cur(),
- parts = rfxnum.exec( value ),
- unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
- // Starting value computation is required for potential unit mismatches
- start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) &&
- rfxnum.exec( jQuery.css( tween.elem, prop ) ),
- scale = 1,
- maxIterations = 20;
-
- if ( start && start[ 3 ] !== unit ) {
- // Trust units reported by jQuery.css
- unit = unit || start[ 3 ];
-
- // Make sure we update the tween properties later on
- parts = parts || [];
-
- // Iteratively approximate from a nonzero starting point
- start = +target || 1;
-
- do {
- // If previous iteration zeroed out, double until we get *something*
- // Use a string for doubling factor so we don't accidentally see scale as unchanged below
- scale = scale || ".5";
-
- // Adjust and apply
- start = start / scale;
- jQuery.style( tween.elem, prop, start + unit );
-
- // Update scale, tolerating zero or NaN from tween.cur()
- // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
- } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
- }
-
- // Update tween properties
- if ( parts ) {
- start = tween.start = +start || +target || 0;
- tween.unit = unit;
- // If a +=/-= token was provided, we're doing a relative animation
- tween.end = parts[ 1 ] ?
- start + ( parts[ 1 ] + 1 ) * parts[ 2 ] :
- +parts[ 2 ];
- }
-
- return tween;
- } ]
- };
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- setTimeout(function() {
- fxNow = undefined;
- });
- return ( fxNow = jQuery.now() );
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
- var which,
- attrs = { height: type },
- i = 0;
-
- // if we include width, step value is 1 to do all cssExpand values,
- // if we don't include width, step value is 2 to skip over Left and Right
- includeWidth = includeWidth ? 1 : 0;
- for ( ; i < 4 ; i += 2 - includeWidth ) {
- which = cssExpand[ i ];
- attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
- }
-
- if ( includeWidth ) {
- attrs.opacity = attrs.width = type;
- }
-
- return attrs;
-}
-
-function createTween( value, prop, animation ) {
- var tween,
- collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
- index = 0,
- length = collection.length;
- for ( ; index < length; index++ ) {
- if ( (tween = collection[ index ].call( animation, prop, value )) ) {
-
- // we're done with this property
- return tween;
- }
- }
-}
-
-function defaultPrefilter( elem, props, opts ) {
- /* jshint validthis: true */
- var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
- anim = this,
- orig = {},
- style = elem.style,
- hidden = elem.nodeType && isHidden( elem ),
- dataShow = jQuery._data( elem, "fxshow" );
-
- // handle queue: false promises
- if ( !opts.queue ) {
- hooks = jQuery._queueHooks( elem, "fx" );
- if ( hooks.unqueued == null ) {
- hooks.unqueued = 0;
- oldfire = hooks.empty.fire;
- hooks.empty.fire = function() {
- if ( !hooks.unqueued ) {
- oldfire();
- }
- };
- }
- hooks.unqueued++;
-
- anim.always(function() {
- // doing this makes sure that the complete handler will be called
- // before this completes
- anim.always(function() {
- hooks.unqueued--;
- if ( !jQuery.queue( elem, "fx" ).length ) {
- hooks.empty.fire();
- }
- });
- });
- }
-
- // height/width overflow pass
- if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
- // Make sure that nothing sneaks out
- // Record all 3 overflow attributes because IE does not
- // change the overflow attribute when overflowX and
- // overflowY are set to the same value
- opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
- // Set display property to inline-block for height/width
- // animations on inline elements that are having width/height animated
- display = jQuery.css( elem, "display" );
-
- // Test default display if display is currently "none"
- checkDisplay = display === "none" ?
- jQuery._data( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
-
- if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
-
- // inline-level elements accept inline-block;
- // block-level elements need to be inline with layout
- if ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) {
- style.display = "inline-block";
- } else {
- style.zoom = 1;
- }
- }
- }
-
- if ( opts.overflow ) {
- style.overflow = "hidden";
- if ( !support.shrinkWrapBlocks() ) {
- anim.always(function() {
- style.overflow = opts.overflow[ 0 ];
- style.overflowX = opts.overflow[ 1 ];
- style.overflowY = opts.overflow[ 2 ];
- });
- }
- }
-
- // show/hide pass
- for ( prop in props ) {
- value = props[ prop ];
- if ( rfxtypes.exec( value ) ) {
- delete props[ prop ];
- toggle = toggle || value === "toggle";
- if ( value === ( hidden ? "hide" : "show" ) ) {
-
- // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden
- if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
- hidden = true;
- } else {
- continue;
- }
- }
- orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
-
- // Any non-fx value stops us from restoring the original display value
- } else {
- display = undefined;
- }
- }
-
- if ( !jQuery.isEmptyObject( orig ) ) {
- if ( dataShow ) {
- if ( "hidden" in dataShow ) {
- hidden = dataShow.hidden;
- }
- } else {
- dataShow = jQuery._data( elem, "fxshow", {} );
- }
-
- // store state if its toggle - enables .stop().toggle() to "reverse"
- if ( toggle ) {
- dataShow.hidden = !hidden;
- }
- if ( hidden ) {
- jQuery( elem ).show();
- } else {
- anim.done(function() {
- jQuery( elem ).hide();
- });
- }
- anim.done(function() {
- var prop;
- jQuery._removeData( elem, "fxshow" );
- for ( prop in orig ) {
- jQuery.style( elem, prop, orig[ prop ] );
- }
- });
- for ( prop in orig ) {
- tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
-
- if ( !( prop in dataShow ) ) {
- dataShow[ prop ] = tween.start;
- if ( hidden ) {
- tween.end = tween.start;
- tween.start = prop === "width" || prop === "height" ? 1 : 0;
- }
- }
- }
-
- // If this is a noop like .hide().hide(), restore an overwritten display value
- } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) {
- style.display = display;
- }
-}
-
-function propFilter( props, specialEasing ) {
- var index, name, easing, value, hooks;
-
- // camelCase, specialEasing and expand cssHook pass
- for ( index in props ) {
- name = jQuery.camelCase( index );
- easing = specialEasing[ name ];
- value = props[ index ];
- if ( jQuery.isArray( value ) ) {
- easing = value[ 1 ];
- value = props[ index ] = value[ 0 ];
- }
-
- if ( index !== name ) {
- props[ name ] = value;
- delete props[ index ];
- }
-
- hooks = jQuery.cssHooks[ name ];
- if ( hooks && "expand" in hooks ) {
- value = hooks.expand( value );
- delete props[ name ];
-
- // not quite $.extend, this wont overwrite keys already present.
- // also - reusing 'index' from above because we have the correct "name"
- for ( index in value ) {
- if ( !( index in props ) ) {
- props[ index ] = value[ index ];
- specialEasing[ index ] = easing;
- }
- }
- } else {
- specialEasing[ name ] = easing;
- }
- }
-}
-
-function Animation( elem, properties, options ) {
- var result,
- stopped,
- index = 0,
- length = animationPrefilters.length,
- deferred = jQuery.Deferred().always( function() {
- // don't match elem in the :animated selector
- delete tick.elem;
- }),
- tick = function() {
- if ( stopped ) {
- return false;
- }
- var currentTime = fxNow || createFxNow(),
- remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
- // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
- temp = remaining / animation.duration || 0,
- percent = 1 - temp,
- index = 0,
- length = animation.tweens.length;
-
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( percent );
- }
-
- deferred.notifyWith( elem, [ animation, percent, remaining ]);
-
- if ( percent < 1 && length ) {
- return remaining;
- } else {
- deferred.resolveWith( elem, [ animation ] );
- return false;
- }
- },
- animation = deferred.promise({
- elem: elem,
- props: jQuery.extend( {}, properties ),
- opts: jQuery.extend( true, { specialEasing: {} }, options ),
- originalProperties: properties,
- originalOptions: options,
- startTime: fxNow || createFxNow(),
- duration: options.duration,
- tweens: [],
- createTween: function( prop, end ) {
- var tween = jQuery.Tween( elem, animation.opts, prop, end,
- animation.opts.specialEasing[ prop ] || animation.opts.easing );
- animation.tweens.push( tween );
- return tween;
- },
- stop: function( gotoEnd ) {
- var index = 0,
- // if we are going to the end, we want to run all the tweens
- // otherwise we skip this part
- length = gotoEnd ? animation.tweens.length : 0;
- if ( stopped ) {
- return this;
- }
- stopped = true;
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( 1 );
- }
-
- // resolve when we played the last frame
- // otherwise, reject
- if ( gotoEnd ) {
- deferred.resolveWith( elem, [ animation, gotoEnd ] );
- } else {
- deferred.rejectWith( elem, [ animation, gotoEnd ] );
- }
- return this;
- }
- }),
- props = animation.props;
-
- propFilter( props, animation.opts.specialEasing );
-
- for ( ; index < length ; index++ ) {
- result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
- if ( result ) {
- return result;
- }
- }
-
- jQuery.map( props, createTween, animation );
-
- if ( jQuery.isFunction( animation.opts.start ) ) {
- animation.opts.start.call( elem, animation );
- }
-
- jQuery.fx.timer(
- jQuery.extend( tick, {
- elem: elem,
- anim: animation,
- queue: animation.opts.queue
- })
- );
-
- // attach callbacks from options
- return animation.progress( animation.opts.progress )
- .done( animation.opts.done, animation.opts.complete )
- .fail( animation.opts.fail )
- .always( animation.opts.always );
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
- tweener: function( props, callback ) {
- if ( jQuery.isFunction( props ) ) {
- callback = props;
- props = [ "*" ];
- } else {
- props = props.split(" ");
- }
-
- var prop,
- index = 0,
- length = props.length;
-
- for ( ; index < length ; index++ ) {
- prop = props[ index ];
- tweeners[ prop ] = tweeners[ prop ] || [];
- tweeners[ prop ].unshift( callback );
- }
- },
-
- prefilter: function( callback, prepend ) {
- if ( prepend ) {
- animationPrefilters.unshift( callback );
- } else {
- animationPrefilters.push( callback );
- }
- }
-});
-
-jQuery.speed = function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
- };
-
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
- opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
- // normalize opt.queue - true/undefined/null -> "fx"
- if ( opt.queue == null || opt.queue === true ) {
- opt.queue = "fx";
- }
-
- // Queueing
- opt.old = opt.complete;
-
- opt.complete = function() {
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue ) {
- jQuery.dequeue( this, opt.queue );
- }
- };
-
- return opt;
-};
-
-jQuery.fn.extend({
- fadeTo: function( speed, to, easing, callback ) {
-
- // show any hidden elements after setting opacity to 0
- return this.filter( isHidden ).css( "opacity", 0 ).show()
-
- // animate to the value specified
- .end().animate({ opacity: to }, speed, easing, callback );
- },
- animate: function( prop, speed, easing, callback ) {
- var empty = jQuery.isEmptyObject( prop ),
- optall = jQuery.speed( speed, easing, callback ),
- doAnimation = function() {
- // Operate on a copy of prop so per-property easing won't be lost
- var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
- // Empty animations, or finishing resolves immediately
- if ( empty || jQuery._data( this, "finish" ) ) {
- anim.stop( true );
- }
- };
- doAnimation.finish = doAnimation;
-
- return empty || optall.queue === false ?
- this.each( doAnimation ) :
- this.queue( optall.queue, doAnimation );
- },
- stop: function( type, clearQueue, gotoEnd ) {
- var stopQueue = function( hooks ) {
- var stop = hooks.stop;
- delete hooks.stop;
- stop( gotoEnd );
- };
-
- if ( typeof type !== "string" ) {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if ( clearQueue && type !== false ) {
- this.queue( type || "fx", [] );
- }
-
- return this.each(function() {
- var dequeue = true,
- index = type != null && type + "queueHooks",
- timers = jQuery.timers,
- data = jQuery._data( this );
-
- if ( index ) {
- if ( data[ index ] && data[ index ].stop ) {
- stopQueue( data[ index ] );
- }
- } else {
- for ( index in data ) {
- if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
- stopQueue( data[ index ] );
- }
- }
- }
-
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
- timers[ index ].anim.stop( gotoEnd );
- dequeue = false;
- timers.splice( index, 1 );
- }
- }
-
- // start the next in the queue if the last step wasn't forced
- // timers currently will call their complete callbacks, which will dequeue
- // but only if they were gotoEnd
- if ( dequeue || !gotoEnd ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- finish: function( type ) {
- if ( type !== false ) {
- type = type || "fx";
- }
- return this.each(function() {
- var index,
- data = jQuery._data( this ),
- queue = data[ type + "queue" ],
- hooks = data[ type + "queueHooks" ],
- timers = jQuery.timers,
- length = queue ? queue.length : 0;
-
- // enable finishing flag on private data
- data.finish = true;
-
- // empty the queue first
- jQuery.queue( this, type, [] );
-
- if ( hooks && hooks.stop ) {
- hooks.stop.call( this, true );
- }
-
- // look for any active animations, and finish them
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
- timers[ index ].anim.stop( true );
- timers.splice( index, 1 );
- }
- }
-
- // look for any animations in the old queue and finish them
- for ( index = 0; index < length; index++ ) {
- if ( queue[ index ] && queue[ index ].finish ) {
- queue[ index ].finish.call( this );
- }
- }
-
- // turn off finishing flag
- delete data.finish;
- });
- }
-});
-
-jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
- var cssFn = jQuery.fn[ name ];
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return speed == null || typeof speed === "boolean" ?
- cssFn.apply( this, arguments ) :
- this.animate( genFx( name, true ), speed, easing, callback );
- };
-});
-
-// Generate shortcuts for custom animations
-jQuery.each({
- slideDown: genFx("show"),
- slideUp: genFx("hide"),
- slideToggle: genFx("toggle"),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-});
-
-jQuery.timers = [];
-jQuery.fx.tick = function() {
- var timer,
- timers = jQuery.timers,
- i = 0;
-
- fxNow = jQuery.now();
-
- for ( ; i < timers.length; i++ ) {
- timer = timers[ i ];
- // Checks the timer has not already been removed
- if ( !timer() && timers[ i ] === timer ) {
- timers.splice( i--, 1 );
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
- jQuery.timers.push( timer );
- if ( timer() ) {
- jQuery.fx.start();
- } else {
- jQuery.timers.pop();
- }
-};
-
-jQuery.fx.interval = 13;
-
-jQuery.fx.start = function() {
- if ( !timerId ) {
- timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
- }
-};
-
-jQuery.fx.stop = function() {
- clearInterval( timerId );
- timerId = null;
-};
-
-jQuery.fx.speeds = {
- slow: 600,
- fast: 200,
- // Default speed
- _default: 400
-};
-
-
-// Based off of the plugin by Clint Helfers, with permission.
-// http://blindsignals.com/index.php/2009/07/jquery-delay/
-jQuery.fn.delay = function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
- type = type || "fx";
-
- return this.queue( type, function( next, hooks ) {
- var timeout = setTimeout( next, time );
- hooks.stop = function() {
- clearTimeout( timeout );
- };
- });
-};
-
-
-(function() {
- // Minified: var a,b,c,d,e
- var input, div, select, a, opt;
-
- // Setup
- div = document.createElement( "div" );
- div.setAttribute( "className", "t" );
- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
- a = div.getElementsByTagName("a")[ 0 ];
-
- // First batch of tests.
- select = document.createElement("select");
- opt = select.appendChild( document.createElement("option") );
- input = div.getElementsByTagName("input")[ 0 ];
-
- a.style.cssText = "top:1px";
-
- // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
- support.getSetAttribute = div.className !== "t";
-
- // Get the style information from getAttribute
- // (IE uses .cssText instead)
- support.style = /top/.test( a.getAttribute("style") );
-
- // Make sure that URLs aren't manipulated
- // (IE normalizes it by default)
- support.hrefNormalized = a.getAttribute("href") === "/a";
-
- // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
- support.checkOn = !!input.value;
-
- // Make sure that a selected-by-default option has a working selected property.
- // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
- support.optSelected = opt.selected;
-
- // Tests for enctype support on a form (#6743)
- support.enctype = !!document.createElement("form").enctype;
-
- // Make sure that the options inside disabled selects aren't marked as disabled
- // (WebKit marks them as disabled)
- select.disabled = true;
- support.optDisabled = !opt.disabled;
-
- // Support: IE8 only
- // Check if we can trust getAttribute("value")
- input = document.createElement( "input" );
- input.setAttribute( "value", "" );
- support.input = input.getAttribute( "value" ) === "";
-
- // Check if an input maintains its value after becoming a radio
- input.value = "t";
- input.setAttribute( "type", "radio" );
- support.radioValue = input.value === "t";
-})();
-
-
-var rreturn = /\r/g;
-
-jQuery.fn.extend({
- val: function( value ) {
- var hooks, ret, isFunction,
- elem = this[0];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
- return ret;
- }
-
- ret = elem.value;
-
- return typeof ret === "string" ?
- // handle most common string cases
- ret.replace(rreturn, "") :
- // handle cases where value is null/undef or number
- ret == null ? "" : ret;
- }
-
- return;
- }
-
- isFunction = jQuery.isFunction( value );
-
- return this.each(function( i ) {
- var val;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call( this, i, jQuery( this ).val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
- } else if ( typeof val === "number" ) {
- val += "";
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map( val, function( value ) {
- return value == null ? "" : value + "";
- });
- }
-
- hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- });
- }
-});
-
-jQuery.extend({
- valHooks: {
- option: {
- get: function( elem ) {
- var val = jQuery.find.attr( elem, "value" );
- return val != null ?
- val :
- // Support: IE10-11+
- // option.text throws exceptions (#14686, #14858)
- jQuery.trim( jQuery.text( elem ) );
- }
- },
- select: {
- get: function( elem ) {
- var value, option,
- options = elem.options,
- index = elem.selectedIndex,
- one = elem.type === "select-one" || index < 0,
- values = one ? null : [],
- max = one ? index + 1 : options.length,
- i = index < 0 ?
- max :
- one ? index : 0;
-
- // Loop through all the selected options
- for ( ; i < max; i++ ) {
- option = options[ i ];
-
- // oldIE doesn't update selected after form reset (#2551)
- if ( ( option.selected || i === index ) &&
- // Don't return options that are disabled or in a disabled optgroup
- ( support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
- ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var optionSet, option,
- options = elem.options,
- values = jQuery.makeArray( value ),
- i = options.length;
-
- while ( i-- ) {
- option = options[ i ];
-
- if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {
-
- // Support: IE6
- // When new option element is added to select box we need to
- // force reflow of newly added node in order to workaround delay
- // of initialization properties
- try {
- option.selected = optionSet = true;
-
- } catch ( _ ) {
-
- // Will be executed only in IE6
- option.scrollHeight;
- }
-
- } else {
- option.selected = false;
- }
- }
-
- // Force browsers to behave consistently when non-matching value is set
- if ( !optionSet ) {
- elem.selectedIndex = -1;
- }
-
- return options;
- }
- }
- }
-});
-
-// Radios and checkboxes getter/setter
-jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
- }
- }
- };
- if ( !support.checkOn ) {
- jQuery.valHooks[ this ].get = function( elem ) {
- // Support: Webkit
- // "" is returned instead of "on" if a value isn't specified
- return elem.getAttribute("value") === null ? "on" : elem.value;
- };
- }
-});
-
-
-
-
-var nodeHook, boolHook,
- attrHandle = jQuery.expr.attrHandle,
- ruseDefault = /^(?:checked|selected)$/i,
- getSetAttribute = support.getSetAttribute,
- getSetInput = support.input;
-
-jQuery.fn.extend({
- attr: function( name, value ) {
- return access( this, jQuery.attr, name, value, arguments.length > 1 );
- },
-
- removeAttr: function( name ) {
- return this.each(function() {
- jQuery.removeAttr( this, name );
- });
- }
-});
-
-jQuery.extend({
- attr: function( elem, name, value ) {
- var hooks, ret,
- nType = elem.nodeType;
-
- // don't get/set attributes on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- // Fallback to prop when attributes are not supported
- if ( typeof elem.getAttribute === strundefined ) {
- return jQuery.prop( elem, name, value );
- }
-
- // All attributes are lowercase
- // Grab necessary hook if one is defined
- if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
- name = name.toLowerCase();
- hooks = jQuery.attrHooks[ name ] ||
- ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
- }
-
- if ( value !== undefined ) {
-
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
-
- } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- elem.setAttribute( name, value + "" );
- return value;
- }
-
- } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
- ret = jQuery.find.attr( elem, name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret == null ?
- undefined :
- ret;
- }
- },
-
- removeAttr: function( elem, value ) {
- var name, propName,
- i = 0,
- attrNames = value && value.match( rnotwhite );
-
- if ( attrNames && elem.nodeType === 1 ) {
- while ( (name = attrNames[i++]) ) {
- propName = jQuery.propFix[ name ] || name;
-
- // Boolean attributes get special treatment (#10870)
- if ( jQuery.expr.match.bool.test( name ) ) {
- // Set corresponding property to false
- if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
- elem[ propName ] = false;
- // Support: IE<9
- // Also clear defaultChecked/defaultSelected (if appropriate)
- } else {
- elem[ jQuery.camelCase( "default-" + name ) ] =
- elem[ propName ] = false;
- }
-
- // See #9699 for explanation of this approach (setting first, then removal)
- } else {
- jQuery.attr( elem, name, "" );
- }
-
- elem.removeAttribute( getSetAttribute ? name : propName );
- }
- }
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- if ( !support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
- // Setting the type on a radio button after the value resets the value in IE6-9
- // Reset value to default in case type is set after value during creation
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- }
- }
-});
-
-// Hook for boolean attributes
-boolHook = {
- set: function( elem, value, name ) {
- if ( value === false ) {
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
- // IE<8 needs the *property* name
- elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
-
- // Use defaultChecked and defaultSelected for oldIE
- } else {
- elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
- }
-
- return name;
- }
-};
-
-// Retrieve booleans specially
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
-
- var getter = attrHandle[ name ] || jQuery.find.attr;
-
- attrHandle[ name ] = getSetInput && getSetAttribute || !ruseDefault.test( name ) ?
- function( elem, name, isXML ) {
- var ret, handle;
- if ( !isXML ) {
- // Avoid an infinite loop by temporarily removing this function from the getter
- handle = attrHandle[ name ];
- attrHandle[ name ] = ret;
- ret = getter( elem, name, isXML ) != null ?
- name.toLowerCase() :
- null;
- attrHandle[ name ] = handle;
- }
- return ret;
- } :
- function( elem, name, isXML ) {
- if ( !isXML ) {
- return elem[ jQuery.camelCase( "default-" + name ) ] ?
- name.toLowerCase() :
- null;
- }
- };
-});
-
-// fix oldIE attroperties
-if ( !getSetInput || !getSetAttribute ) {
- jQuery.attrHooks.value = {
- set: function( elem, value, name ) {
- if ( jQuery.nodeName( elem, "input" ) ) {
- // Does not return so that setAttribute is also used
- elem.defaultValue = value;
- } else {
- // Use nodeHook if defined (#1954); otherwise setAttribute is fine
- return nodeHook && nodeHook.set( elem, value, name );
- }
- }
- };
-}
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
- // Use this for any attribute in IE6/7
- // This fixes almost every IE6/7 issue
- nodeHook = {
- set: function( elem, value, name ) {
- // Set the existing or create a new attribute node
- var ret = elem.getAttributeNode( name );
- if ( !ret ) {
- elem.setAttributeNode(
- (ret = elem.ownerDocument.createAttribute( name ))
- );
- }
-
- ret.value = value += "";
-
- // Break association with cloned elements by also using setAttribute (#9646)
- if ( name === "value" || value === elem.getAttribute( name ) ) {
- return value;
- }
- }
- };
-
- // Some attributes are constructed with empty-string values when not defined
- attrHandle.id = attrHandle.name = attrHandle.coords =
- function( elem, name, isXML ) {
- var ret;
- if ( !isXML ) {
- return (ret = elem.getAttributeNode( name )) && ret.value !== "" ?
- ret.value :
- null;
- }
- };
-
- // Fixing value retrieval on a button requires this module
- jQuery.valHooks.button = {
- get: function( elem, name ) {
- var ret = elem.getAttributeNode( name );
- if ( ret && ret.specified ) {
- return ret.value;
- }
- },
- set: nodeHook.set
- };
-
- // Set contenteditable to false on removals(#10429)
- // Setting to empty string throws an error as an invalid value
- jQuery.attrHooks.contenteditable = {
- set: function( elem, value, name ) {
- nodeHook.set( elem, value === "" ? false : value, name );
- }
- };
-
- // Set width and height to auto instead of 0 on empty string( Bug #8150 )
- // This is for removals
- jQuery.each([ "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = {
- set: function( elem, value ) {
- if ( value === "" ) {
- elem.setAttribute( name, "auto" );
- return value;
- }
- }
- };
- });
-}
-
-if ( !support.style ) {
- jQuery.attrHooks.style = {
- get: function( elem ) {
- // Return undefined in the case of empty string
- // Note: IE uppercases css property names, but if we were to .toLowerCase()
- // .cssText, that would destroy case senstitivity in URL's, like in "background"
- return elem.style.cssText || undefined;
- },
- set: function( elem, value ) {
- return ( elem.style.cssText = value + "" );
- }
- };
-}
-
-
-
-
-var rfocusable = /^(?:input|select|textarea|button|object)$/i,
- rclickable = /^(?:a|area)$/i;
-
-jQuery.fn.extend({
- prop: function( name, value ) {
- return access( this, jQuery.prop, name, value, arguments.length > 1 );
- },
-
- removeProp: function( name ) {
- name = jQuery.propFix[ name ] || name;
- return this.each(function() {
- // try/catch handles cases where IE balks (such as removing a property on window)
- try {
- this[ name ] = undefined;
- delete this[ name ];
- } catch( e ) {}
- });
- }
-});
-
-jQuery.extend({
- propFix: {
- "for": "htmlFor",
- "class": "className"
- },
-
- prop: function( elem, name, value ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- // don't get/set properties on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- if ( notxml ) {
- // Fix name and attach hooks
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
-
- if ( value !== undefined ) {
- return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ?
- ret :
- ( elem[ name ] = value );
-
- } else {
- return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ?
- ret :
- elem[ name ];
- }
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- // Use proper attribute retrieval(#12072)
- var tabindex = jQuery.find.attr( elem, "tabindex" );
-
- return tabindex ?
- parseInt( tabindex, 10 ) :
- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
- 0 :
- -1;
- }
- }
- }
-});
-
-// Some attributes require a special call on IE
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !support.hrefNormalized ) {
- // href/src property should get the full normalized URL (#10299/#12915)
- jQuery.each([ "href", "src" ], function( i, name ) {
- jQuery.propHooks[ name ] = {
- get: function( elem ) {
- return elem.getAttribute( name, 4 );
- }
- };
- });
-}
-
-// Support: Safari, IE9+
-// mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !support.optSelected ) {
- jQuery.propHooks.selected = {
- get: function( elem ) {
- var parent = elem.parentNode;
-
- if ( parent ) {
- parent.selectedIndex;
-
- // Make sure that it also works with optgroups, see #5701
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- return null;
- }
- };
-}
-
-jQuery.each([
- "tabIndex",
- "readOnly",
- "maxLength",
- "cellSpacing",
- "cellPadding",
- "rowSpan",
- "colSpan",
- "useMap",
- "frameBorder",
- "contentEditable"
-], function() {
- jQuery.propFix[ this.toLowerCase() ] = this;
-});
-
-// IE6/7 call enctype encoding
-if ( !support.enctype ) {
- jQuery.propFix.enctype = "encoding";
-}
-
-
-
-
-var rclass = /[\t\r\n\f]/g;
-
-jQuery.fn.extend({
- addClass: function( value ) {
- var classes, elem, cur, clazz, j, finalValue,
- i = 0,
- len = this.length,
- proceed = typeof value === "string" && value;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).addClass( value.call( this, j, this.className ) );
- });
- }
-
- if ( proceed ) {
- // The disjunction here is for better compressibility (see removeClass)
- classes = ( value || "" ).match( rnotwhite ) || [];
-
- for ( ; i < len; i++ ) {
- elem = this[ i ];
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- " "
- );
-
- if ( cur ) {
- j = 0;
- while ( (clazz = classes[j++]) ) {
- if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
- cur += clazz + " ";
- }
- }
-
- // only assign if different to avoid unneeded rendering.
- finalValue = jQuery.trim( cur );
- if ( elem.className !== finalValue ) {
- elem.className = finalValue;
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var classes, elem, cur, clazz, j, finalValue,
- i = 0,
- len = this.length,
- proceed = arguments.length === 0 || typeof value === "string" && value;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).removeClass( value.call( this, j, this.className ) );
- });
- }
- if ( proceed ) {
- classes = ( value || "" ).match( rnotwhite ) || [];
-
- for ( ; i < len; i++ ) {
- elem = this[ i ];
- // This expression is here for better compressibility (see addClass)
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- ""
- );
-
- if ( cur ) {
- j = 0;
- while ( (clazz = classes[j++]) ) {
- // Remove *all* instances
- while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
- cur = cur.replace( " " + clazz + " ", " " );
- }
- }
-
- // only assign if different to avoid unneeded rendering.
- finalValue = value ? jQuery.trim( cur ) : "";
- if ( elem.className !== finalValue ) {
- elem.className = finalValue;
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value;
-
- if ( typeof stateVal === "boolean" && type === "string" ) {
- return stateVal ? this.addClass( value ) : this.removeClass( value );
- }
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( i ) {
- jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
- });
- }
-
- return this.each(function() {
- if ( type === "string" ) {
- // toggle individual class names
- var className,
- i = 0,
- self = jQuery( this ),
- classNames = value.match( rnotwhite ) || [];
-
- while ( (className = classNames[ i++ ]) ) {
- // check each className given, space separated list
- if ( self.hasClass( className ) ) {
- self.removeClass( className );
- } else {
- self.addClass( className );
- }
- }
-
- // Toggle whole class name
- } else if ( type === strundefined || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- jQuery._data( this, "__className__", this.className );
- }
-
- // If the element has a class name or if we're passed "false",
- // then remove the whole classname (if there was one, the above saved it).
- // Otherwise bring back whatever was previously saved (if anything),
- // falling back to the empty string if nothing was stored.
- this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
- }
- });
- },
-
- hasClass: function( selector ) {
- var className = " " + selector + " ",
- i = 0,
- l = this.length;
- for ( ; i < l; i++ ) {
- if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
- return true;
- }
- }
-
- return false;
- }
-});
-
-
-
-
-// Return jQuery for attributes-only inclusion
-
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- return arguments.length > 0 ?
- this.on( name, null, data, fn ) :
- this.trigger( name );
- };
-});
-
-jQuery.fn.extend({
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- },
-
- bind: function( types, data, fn ) {
- return this.on( types, null, data, fn );
- },
- unbind: function( types, fn ) {
- return this.off( types, null, fn );
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.on( types, selector, data, fn );
- },
- undelegate: function( selector, types, fn ) {
- // ( namespace ) or ( selector, types [, fn] )
- return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
- }
-});
-
-
-var nonce = jQuery.now();
-
-var rquery = (/\?/);
-
-
-
-var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
-
-jQuery.parseJSON = function( data ) {
- // Attempt to parse using the native JSON parser first
- if ( window.JSON && window.JSON.parse ) {
- // Support: Android 2.3
- // Workaround failure to string-cast null input
- return window.JSON.parse( data + "" );
- }
-
- var requireNonComma,
- depth = null,
- str = jQuery.trim( data + "" );
-
- // Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
- // after removing valid tokens
- return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
-
- // Force termination if we see a misplaced comma
- if ( requireNonComma && comma ) {
- depth = 0;
- }
-
- // Perform no more replacements after returning to outermost depth
- if ( depth === 0 ) {
- return token;
- }
-
- // Commas must not follow "[", "{", or ","
- requireNonComma = open || comma;
-
- // Determine new depth
- // array/object open ("[" or "{"): depth += true - false (increment)
- // array/object close ("]" or "}"): depth += false - true (decrement)
- // other cases ("," or primitive): depth += true - true (numeric cast)
- depth += !close - !open;
-
- // Remove this token
- return "";
- }) ) ?
- ( Function( "return " + str ) )() :
- jQuery.error( "Invalid JSON: " + data );
-};
-
-
-// Cross-browser xml parsing
-jQuery.parseXML = function( data ) {
- var xml, tmp;
- if ( !data || typeof data !== "string" ) {
- return null;
- }
- try {
- if ( window.DOMParser ) { // Standard
- tmp = new DOMParser();
- xml = tmp.parseFromString( data, "text/xml" );
- } else { // IE
- xml = new ActiveXObject( "Microsoft.XMLDOM" );
- xml.async = "false";
- xml.loadXML( data );
- }
- } catch( e ) {
- xml = undefined;
- }
- if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
-};
-
-
-var
- // Document location
- ajaxLocParts,
- ajaxLocation,
-
- rhash = /#.*$/,
- rts = /([?&])_=[^&]*/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
- rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = "*/".concat("*");
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
- ajaxLocation = location.href;
-} catch( e ) {
- // Use the href attribute of an A element
- // since IE will modify it given document.location
- ajaxLocation = document.createElement( "a" );
- ajaxLocation.href = "";
- ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- var dataType,
- i = 0,
- dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
-
- if ( jQuery.isFunction( func ) ) {
- // For each dataType in the dataTypeExpression
- while ( (dataType = dataTypes[i++]) ) {
- // Prepend if requested
- if ( dataType.charAt( 0 ) === "+" ) {
- dataType = dataType.slice( 1 ) || "*";
- (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
-
- // Otherwise append
- } else {
- (structure[ dataType ] = structure[ dataType ] || []).push( func );
- }
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
- var inspected = {},
- seekingTransport = ( structure === transports );
-
- function inspect( dataType ) {
- var selected;
- inspected[ dataType ] = true;
- jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
- var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
- if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
- options.dataTypes.unshift( dataTypeOrTransport );
- inspect( dataTypeOrTransport );
- return false;
- } else if ( seekingTransport ) {
- return !( selected = dataTypeOrTransport );
- }
- });
- return selected;
- }
-
- return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var deep, key,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
- for ( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-
- return target;
-}
-
-/* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
- var firstDataType, ct, finalDataType, type,
- contents = s.contents,
- dataTypes = s.dataTypes;
-
- // Remove auto dataType and get content-type in the process
- while ( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-/* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
-function ajaxConvert( s, response, jqXHR, isSuccess ) {
- var conv2, current, conv, tmp, prev,
- converters = {},
- // Work with a copy of dataTypes in case we need to modify it for conversion
- dataTypes = s.dataTypes.slice();
-
- // Create converters map with lowercased keys
- if ( dataTypes[ 1 ] ) {
- for ( conv in s.converters ) {
- converters[ conv.toLowerCase() ] = s.converters[ conv ];
- }
- }
-
- current = dataTypes.shift();
-
- // Convert to each sequential dataType
- while ( current ) {
-
- if ( s.responseFields[ current ] ) {
- jqXHR[ s.responseFields[ current ] ] = response;
- }
-
- // Apply the dataFilter if provided
- if ( !prev && isSuccess && s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- prev = current;
- current = dataTypes.shift();
-
- if ( current ) {
-
- // There's only work to do if current dataType is non-auto
- if ( current === "*" ) {
-
- current = prev;
-
- // Convert response if prev dataType is non-auto and differs from current
- } else if ( prev !== "*" && prev !== current ) {
-
- // Seek a direct converter
- conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
- // If none found, seek a pair
- if ( !conv ) {
- for ( conv2 in converters ) {
-
- // If conv2 outputs current
- tmp = conv2.split( " " );
- if ( tmp[ 1 ] === current ) {
-
- // If prev can be converted to accepted input
- conv = converters[ prev + " " + tmp[ 0 ] ] ||
- converters[ "* " + tmp[ 0 ] ];
- if ( conv ) {
- // Condense equivalence converters
- if ( conv === true ) {
- conv = converters[ conv2 ];
-
- // Otherwise, insert the intermediate dataType
- } else if ( converters[ conv2 ] !== true ) {
- current = tmp[ 0 ];
- dataTypes.unshift( tmp[ 1 ] );
- }
- break;
- }
- }
- }
- }
-
- // Apply converter (if not an equivalence)
- if ( conv !== true ) {
-
- // Unless errors are allowed to bubble, catch and return them
- if ( conv && s[ "throws" ] ) {
- response = conv( response );
- } else {
- try {
- response = conv( response );
- } catch ( e ) {
- return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
- }
- }
- }
- }
- }
- }
-
- return { state: "success", data: response };
-}
-
-jQuery.extend({
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {},
-
- ajaxSettings: {
- url: ajaxLocation,
- type: "GET",
- isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
- global: true,
- processData: true,
- async: true,
- contentType: "application/x-www-form-urlencoded; charset=UTF-8",
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- throws: false,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- "*": allTypes,
- text: "text/plain",
- html: "text/html",
- xml: "application/xml, text/xml",
- json: "application/json, text/javascript"
- },
-
- contents: {
- xml: /xml/,
- html: /html/,
- json: /json/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText",
- json: "responseJSON"
- },
-
- // Data converters
- // Keys separate source (or catchall "*") and destination types with a single space
- converters: {
-
- // Convert anything to text
- "* text": String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": jQuery.parseJSON,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- url: true,
- context: true
- }
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- return settings ?
-
- // Building a settings object
- ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
- // Extending ajaxSettings
- ajaxExtend( jQuery.ajaxSettings, target );
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var // Cross-domain detection vars
- parts,
- // Loop variable
- i,
- // URL without anti-cache param
- cacheURL,
- // Response headers as string
- responseHeadersString,
- // timeout handle
- timeoutTimer,
-
- // To know if global events are to be dispatched
- fireGlobals,
-
- transport,
- // Response headers
- responseHeaders,
- // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
- // Callbacks context
- callbackContext = s.context || s,
- // Context for global events is callbackContext if it is a DOM node or jQuery collection
- globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
- jQuery( callbackContext ) :
- jQuery.event,
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks("once memory"),
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
- // The jqXHR state
- state = 0,
- // Default abort message
- strAbort = "canceled",
- // Fake xhr
- jqXHR = {
- readyState: 0,
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( state === 2 ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while ( (match = rheaders.exec( responseHeadersString )) ) {
- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match == null ? null : match;
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return state === 2 ? responseHeadersString : null;
- },
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- var lname = name.toLowerCase();
- if ( !state ) {
- name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( !state ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Status-dependent callbacks
- statusCode: function( map ) {
- var code;
- if ( map ) {
- if ( state < 2 ) {
- for ( code in map ) {
- // Lazy-add the new callback in a way that preserves old ones
- statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
- }
- } else {
- // Execute the appropriate callbacks
- jqXHR.always( map[ jqXHR.status ] );
- }
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- var finalText = statusText || strAbort;
- if ( transport ) {
- transport.abort( finalText );
- }
- done( 0, finalText );
- return this;
- }
- };
-
- // Attach deferreds
- deferred.promise( jqXHR ).complete = completeDeferred.add;
- jqXHR.success = jqXHR.done;
- jqXHR.error = jqXHR.fail;
-
- // Remove hash character (#7531: and string promotion)
- // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
- // Handle falsy url in the settings object (#10093: consistency with old signature)
- // We also use the url parameter if available
- s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
- // Alias method option to type as per ticket #12004
- s.type = options.method || options.type || s.method || s.type;
-
- // Extract dataTypes list
- s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
-
- // A cross-domain request is in order when we have a protocol:host:port mismatch
- if ( s.crossDomain == null ) {
- parts = rurl.exec( s.url.toLowerCase() );
- s.crossDomain = !!( parts &&
- ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
- );
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefilter, stop there
- if ( state === 2 ) {
- return jqXHR;
- }
-
- // We can fire global events as of now if asked to
- fireGlobals = s.global;
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger("ajaxStart");
- }
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Save the URL in case we're toying with the If-Modified-Since
- // and/or If-None-Match header later on
- cacheURL = s.url;
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // If data is available, append data to url
- if ( s.data ) {
- cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Add anti-cache in url if needed
- if ( s.cache === false ) {
- s.url = rts.test( cacheURL ) ?
-
- // If there is already a '_' parameter, set its value
- cacheURL.replace( rts, "$1_=" + nonce++ ) :
-
- // Otherwise add one to the end
- cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
- }
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- if ( jQuery.lastModified[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
- }
- if ( jQuery.etag[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
- s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
- // Abort if not done already and return
- return jqXHR.abort();
- }
-
- // aborting is no longer a cancellation
- strAbort = "abort";
-
- // Install callbacks on deferreds
- for ( i in { success: 1, error: 1, complete: 1 } ) {
- jqXHR[ i ]( s[ i ] );
- }
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
-
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = setTimeout(function() {
- jqXHR.abort("timeout");
- }, s.timeout );
- }
-
- try {
- state = 1;
- transport.send( requestHeaders, done );
- } catch ( e ) {
- // Propagate exception as error if not done
- if ( state < 2 ) {
- done( -1, e );
- // Simply rethrow otherwise
- } else {
- throw e;
- }
- }
- }
-
- // Callback for when everything is done
- function done( status, nativeStatusText, responses, headers ) {
- var isSuccess, success, error, response, modified,
- statusText = nativeStatusText;
-
- // Called once
- if ( state === 2 ) {
- return;
- }
-
- // State is "done" now
- state = 2;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- // Determine if successful
- isSuccess = status >= 200 && status < 300 || status === 304;
-
- // Get response data
- if ( responses ) {
- response = ajaxHandleResponses( s, jqXHR, responses );
- }
-
- // Convert no matter what (that way responseXXX fields are always set)
- response = ajaxConvert( s, response, jqXHR, isSuccess );
-
- // If successful, handle type chaining
- if ( isSuccess ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- modified = jqXHR.getResponseHeader("Last-Modified");
- if ( modified ) {
- jQuery.lastModified[ cacheURL ] = modified;
- }
- modified = jqXHR.getResponseHeader("etag");
- if ( modified ) {
- jQuery.etag[ cacheURL ] = modified;
- }
- }
-
- // if no content
- if ( status === 204 || s.type === "HEAD" ) {
- statusText = "nocontent";
-
- // if not modified
- } else if ( status === 304 ) {
- statusText = "notmodified";
-
- // If we have data, let's convert it
- } else {
- statusText = response.state;
- success = response.data;
- error = response.error;
- isSuccess = !error;
- }
- } else {
- // We extract error from statusText
- // then normalize statusText and status for non-aborts
- error = statusText;
- if ( status || !statusText ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger("ajaxStop");
- }
- }
- }
-
- return jqXHR;
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- }
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
- // shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- return jQuery.ajax({
- url: url,
- type: method,
- dataType: type,
- data: data,
- success: callback
- });
- };
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) {
- jQuery.fn[ type ] = function( fn ) {
- return this.on( type, fn );
- };
-});
-
-
-jQuery._evalUrl = function( url ) {
- return jQuery.ajax({
- url: url,
- type: "GET",
- dataType: "script",
- async: false,
- global: false,
- "throws": true
- });
-};
-
-
-jQuery.fn.extend({
- wrapAll: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapAll( html.call(this, i) );
- });
- }
-
- if ( this[0] ) {
- // The elements to wrap the target around
- var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
- if ( this[0].parentNode ) {
- wrap.insertBefore( this[0] );
- }
-
- wrap.map(function() {
- var elem = this;
-
- while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
- elem = elem.firstChild;
- }
-
- return elem;
- }).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapInner( html.call(this, i) );
- });
- }
-
- return this.each(function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- });
- },
-
- wrap: function( html ) {
- var isFunction = jQuery.isFunction( html );
-
- return this.each(function(i) {
- jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
- });
- },
-
- unwrap: function() {
- return this.parent().each(function() {
- if ( !jQuery.nodeName( this, "body" ) ) {
- jQuery( this ).replaceWith( this.childNodes );
- }
- }).end();
- }
-});
-
-
-jQuery.expr.filters.hidden = function( elem ) {
- // Support: Opera <= 12.12
- // Opera reports offsetWidths and offsetHeights less than zero on some elements
- return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
- (!support.reliableHiddenOffsets() &&
- ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
-};
-
-jQuery.expr.filters.visible = function( elem ) {
- return !jQuery.expr.filters.hidden( elem );
-};
-
-
-
-
-var r20 = /%20/g,
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
- rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-function buildParams( prefix, obj, traditional, add ) {
- var name;
-
- if ( jQuery.isArray( obj ) ) {
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
- // Item is non-scalar (array or object), encode its numeric index.
- buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
- }
- });
-
- } else if ( !traditional && jQuery.type( obj ) === "object" ) {
- // Serialize object item.
- for ( name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-
-// Serialize an array of form elements or a set of
-// key/values into a query string
-jQuery.param = function( a, traditional ) {
- var prefix,
- s = [],
- add = function( key, value ) {
- // If value is a function, invoke it and return its value
- value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
- s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
- };
-
- // Set traditional to true for jQuery <= 1.3.2 behavior.
- if ( traditional === undefined ) {
- traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- });
-
- } else {
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" ).replace( r20, "+" );
-};
-
-jQuery.fn.extend({
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
- serializeArray: function() {
- return this.map(function() {
- // Can add propHook for "elements" to filter or add form elements
- var elements = jQuery.prop( this, "elements" );
- return elements ? jQuery.makeArray( elements ) : this;
- })
- .filter(function() {
- var type = this.type;
- // Use .is(":disabled") so that fieldset[disabled] works
- return this.name && !jQuery( this ).is( ":disabled" ) &&
- rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
- ( this.checked || !rcheckableType.test( type ) );
- })
- .map(function( i, elem ) {
- var val = jQuery( this ).val();
-
- return val == null ?
- null :
- jQuery.isArray( val ) ?
- jQuery.map( val, function( val ) {
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }) :
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }).get();
- }
-});
-
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
- // Support: IE6+
- function() {
-
- // XHR cannot access local files, always use ActiveX for that case
- return !this.isLocal &&
-
- // Support: IE7-8
- // oldIE XHR does not support non-RFC2616 methods (#13240)
- // See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx
- // and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
- // Although this check for six methods instead of eight
- // since IE also does not support "trace" and "connect"
- /^(get|post|head|put|delete|options)$/i.test( this.type ) &&
-
- createStandardXHR() || createActiveXHR();
- } :
- // For all other browsers, use the standard XMLHttpRequest object
- createStandardXHR;
-
-var xhrId = 0,
- xhrCallbacks = {},
- xhrSupported = jQuery.ajaxSettings.xhr();
-
-// Support: IE<10
-// Open requests must be manually aborted on unload (#5280)
-if ( window.ActiveXObject ) {
- jQuery( window ).on( "unload", function() {
- for ( var key in xhrCallbacks ) {
- xhrCallbacks[ key ]( undefined, true );
- }
- });
-}
-
-// Determine support properties
-support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-xhrSupported = support.ajax = !!xhrSupported;
-
-// Create transport if the browser can provide an xhr
-if ( xhrSupported ) {
-
- jQuery.ajaxTransport(function( options ) {
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( !options.crossDomain || support.cors ) {
-
- var callback;
-
- return {
- send: function( headers, complete ) {
- var i,
- xhr = options.xhr(),
- id = ++xhrId;
-
- // Open the socket
- xhr.open( options.type, options.url, options.async, options.username, options.password );
-
- // Apply custom fields if provided
- if ( options.xhrFields ) {
- for ( i in options.xhrFields ) {
- xhr[ i ] = options.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( options.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( options.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !options.crossDomain && !headers["X-Requested-With"] ) {
- headers["X-Requested-With"] = "XMLHttpRequest";
- }
-
- // Set headers
- for ( i in headers ) {
- // Support: IE<9
- // IE's ActiveXObject throws a 'Type Mismatch' exception when setting
- // request header to a null-value.
- //
- // To keep consistent with other XHR implementations, cast the value
- // to string and ignore `undefined`.
- if ( headers[ i ] !== undefined ) {
- xhr.setRequestHeader( i, headers[ i ] + "" );
- }
- }
-
- // Do send the request
- // This may raise an exception which is actually
- // handled in jQuery.ajax (so no try/catch here)
- xhr.send( ( options.hasContent && options.data ) || null );
-
- // Listener
- callback = function( _, isAbort ) {
- var status, statusText, responses;
-
- // Was never called and is aborted or complete
- if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
- // Clean up
- delete xhrCallbacks[ id ];
- callback = undefined;
- xhr.onreadystatechange = jQuery.noop;
-
- // Abort manually if needed
- if ( isAbort ) {
- if ( xhr.readyState !== 4 ) {
- xhr.abort();
- }
- } else {
- responses = {};
- status = xhr.status;
-
- // Support: IE<10
- // Accessing binary-data responseText throws an exception
- // (#11426)
- if ( typeof xhr.responseText === "string" ) {
- responses.text = xhr.responseText;
- }
-
- // Firefox throws an exception when accessing
- // statusText for faulty cross-domain requests
- try {
- statusText = xhr.statusText;
- } catch( e ) {
- // We normalize with Webkit giving an empty statusText
- statusText = "";
- }
-
- // Filter status for non standard behaviors
-
- // If the request is local and we have data: assume a success
- // (success with no data won't get notified, that's the best we
- // can do given current implementations)
- if ( !status && options.isLocal && !options.crossDomain ) {
- status = responses.text ? 200 : 404;
- // IE - #1450: sometimes returns 1223 when it should be 204
- } else if ( status === 1223 ) {
- status = 204;
- }
- }
- }
-
- // Call complete if needed
- if ( responses ) {
- complete( status, statusText, responses, xhr.getAllResponseHeaders() );
- }
- };
-
- if ( !options.async ) {
- // if we're in sync mode we fire the callback
- callback();
- } else if ( xhr.readyState === 4 ) {
- // (IE6 & IE7) if it's in cache and has been
- // retrieved directly we need to fire the callback
- setTimeout( callback );
- } else {
- // Add to the list of active xhr callbacks
- xhr.onreadystatechange = xhrCallbacks[ id ] = callback;
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback( undefined, true );
- }
- }
- };
- }
- });
-}
-
-// Functions to create xhrs
-function createStandardXHR() {
- try {
- return new window.XMLHttpRequest();
- } catch( e ) {}
-}
-
-function createActiveXHR() {
- try {
- return new window.ActiveXObject( "Microsoft.XMLHTTP" );
- } catch( e ) {}
-}
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
- accepts: {
- script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /(?:java|ecma)script/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- s.global = false;
- }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
- // This transport only deals with cross domain requests
- if ( s.crossDomain ) {
-
- var script,
- head = document.head || jQuery("head")[0] || document.documentElement;
-
- return {
-
- send: function( _, callback ) {
-
- script = document.createElement("script");
-
- script.async = true;
-
- if ( s.scriptCharset ) {
- script.charset = s.scriptCharset;
- }
-
- script.src = s.url;
-
- // Attach handlers for all browsers
- script.onload = script.onreadystatechange = function( _, isAbort ) {
-
- if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
- // Handle memory leak in IE
- script.onload = script.onreadystatechange = null;
-
- // Remove the script
- if ( script.parentNode ) {
- script.parentNode.removeChild( script );
- }
-
- // Dereference the script
- script = null;
-
- // Callback if not abort
- if ( !isAbort ) {
- callback( 200, "success" );
- }
- }
- };
-
- // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
- // Use native DOM manipulation to avoid our domManip AJAX trickery
- head.insertBefore( script, head.firstChild );
- },
-
- abort: function() {
- if ( script ) {
- script.onload( undefined, true );
- }
- }
- };
- }
-});
-
-
-
-
-var oldCallbacks = [],
- rjsonp = /(=)\?(?=&|$)|\?\?/;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
- jsonp: "callback",
- jsonpCallback: function() {
- var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
- this[ callback ] = true;
- return callback;
- }
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var callbackName, overwritten, responseContainer,
- jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
- "url" :
- typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
- );
-
- // Handle iff the expected data type is "jsonp" or we have a parameter to set
- if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
- // Get callback name, remembering preexisting value associated with it
- callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
- s.jsonpCallback() :
- s.jsonpCallback;
-
- // Insert callback into url or form data
- if ( jsonProp ) {
- s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
- } else if ( s.jsonp !== false ) {
- s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
- }
-
- // Use data converter to retrieve json after script execution
- s.converters["script json"] = function() {
- if ( !responseContainer ) {
- jQuery.error( callbackName + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Install callback
- overwritten = window[ callbackName ];
- window[ callbackName ] = function() {
- responseContainer = arguments;
- };
-
- // Clean-up function (fires after converters)
- jqXHR.always(function() {
- // Restore preexisting value
- window[ callbackName ] = overwritten;
-
- // Save back as free
- if ( s[ callbackName ] ) {
- // make sure that re-using the options doesn't screw things around
- s.jsonpCallback = originalSettings.jsonpCallback;
-
- // save the callback name for future use
- oldCallbacks.push( callbackName );
- }
-
- // Call if it was a function and we have a response
- if ( responseContainer && jQuery.isFunction( overwritten ) ) {
- overwritten( responseContainer[ 0 ] );
- }
-
- responseContainer = overwritten = undefined;
- });
-
- // Delegate to script
- return "script";
- }
-});
-
-
-
-
-// data: string of html
-// context (optional): If specified, the fragment will be created in this context, defaults to document
-// keepScripts (optional): If true, will include scripts passed in the html string
-jQuery.parseHTML = function( data, context, keepScripts ) {
- if ( !data || typeof data !== "string" ) {
- return null;
- }
- if ( typeof context === "boolean" ) {
- keepScripts = context;
- context = false;
- }
- context = context || document;
-
- var parsed = rsingleTag.exec( data ),
- scripts = !keepScripts && [];
-
- // Single tag
- if ( parsed ) {
- return [ context.createElement( parsed[1] ) ];
- }
-
- parsed = jQuery.buildFragment( [ data ], context, scripts );
-
- if ( scripts && scripts.length ) {
- jQuery( scripts ).remove();
- }
-
- return jQuery.merge( [], parsed.childNodes );
-};
-
-
-// Keep a copy of the old load method
-var _load = jQuery.fn.load;
-
-/**
- * Load a url into a page
- */
-jQuery.fn.load = function( url, params, callback ) {
- if ( typeof url !== "string" && _load ) {
- return _load.apply( this, arguments );
- }
-
- var selector, response, type,
- self = this,
- off = url.indexOf(" ");
-
- if ( off >= 0 ) {
- selector = jQuery.trim( url.slice( off, url.length ) );
- url = url.slice( 0, off );
- }
-
- // If it's a function
- if ( jQuery.isFunction( params ) ) {
-
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( params && typeof params === "object" ) {
- type = "POST";
- }
-
- // If we have elements to modify, make the request
- if ( self.length > 0 ) {
- jQuery.ajax({
- url: url,
-
- // if "type" variable is undefined, then "GET" method will be used
- type: type,
- dataType: "html",
- data: params
- }).done(function( responseText ) {
-
- // Save response for use in complete callback
- response = arguments;
-
- self.html( selector ?
-
- // If a selector was specified, locate the right elements in a dummy div
- // Exclude scripts to avoid IE 'Permission Denied' errors
- jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
- // Otherwise use the full result
- responseText );
-
- }).complete( callback && function( jqXHR, status ) {
- self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
- });
- }
-
- return this;
-};
-
-
-
-
-jQuery.expr.filters.animated = function( elem ) {
- return jQuery.grep(jQuery.timers, function( fn ) {
- return elem === fn.elem;
- }).length;
-};
-
-
-
-
-
-var docElem = window.document.documentElement;
-
-/**
- * Gets a window from an element
- */
-function getWindow( elem ) {
- return jQuery.isWindow( elem ) ?
- elem :
- elem.nodeType === 9 ?
- elem.defaultView || elem.parentWindow :
- false;
-}
-
-jQuery.offset = {
- setOffset: function( elem, options, i ) {
- var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
- position = jQuery.css( elem, "position" ),
- curElem = jQuery( elem ),
- props = {};
-
- // set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- curOffset = curElem.offset();
- curCSSTop = jQuery.css( elem, "top" );
- curCSSLeft = jQuery.css( elem, "left" );
- calculatePosition = ( position === "absolute" || position === "fixed" ) &&
- jQuery.inArray("auto", [ curCSSTop, curCSSLeft ] ) > -1;
-
- // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( jQuery.isFunction( options ) ) {
- options = options.call( elem, i, curOffset );
- }
-
- if ( options.top != null ) {
- props.top = ( options.top - curOffset.top ) + curTop;
- }
- if ( options.left != null ) {
- props.left = ( options.left - curOffset.left ) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
- } else {
- curElem.css( props );
- }
- }
-};
-
-jQuery.fn.extend({
- offset: function( options ) {
- if ( arguments.length ) {
- return options === undefined ?
- this :
- this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- var docElem, win,
- box = { top: 0, left: 0 },
- elem = this[ 0 ],
- doc = elem && elem.ownerDocument;
-
- if ( !doc ) {
- return;
- }
-
- docElem = doc.documentElement;
-
- // Make sure it's not a disconnected DOM node
- if ( !jQuery.contains( docElem, elem ) ) {
- return box;
- }
-
- // If we don't have gBCR, just use 0,0 rather than error
- // BlackBerry 5, iOS 3 (original iPhone)
- if ( typeof elem.getBoundingClientRect !== strundefined ) {
- box = elem.getBoundingClientRect();
- }
- win = getWindow( doc );
- return {
- top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),
- left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
- };
- },
-
- position: function() {
- if ( !this[ 0 ] ) {
- return;
- }
-
- var offsetParent, offset,
- parentOffset = { top: 0, left: 0 },
- elem = this[ 0 ];
-
- // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent
- if ( jQuery.css( elem, "position" ) === "fixed" ) {
- // we assume that getBoundingClientRect is available when computed position is fixed
- offset = elem.getBoundingClientRect();
- } else {
- // Get *real* offsetParent
- offsetParent = this.offsetParent();
-
- // Get correct offsets
- offset = this.offset();
- if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
- parentOffset = offsetParent.offset();
- }
-
- // Add offsetParent borders
- parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
- parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
- }
-
- // Subtract parent offsets and element margins
- // note: when an element has margin: auto the offsetLeft and marginLeft
- // are the same in Safari causing offset.left to incorrectly be 0
- return {
- top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
- left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
- };
- },
-
- offsetParent: function() {
- return this.map(function() {
- var offsetParent = this.offsetParent || docElem;
-
- while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) {
- offsetParent = offsetParent.offsetParent;
- }
- return offsetParent || docElem;
- });
- }
-});
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
- var top = /Y/.test( prop );
-
- jQuery.fn[ method ] = function( val ) {
- return access( this, function( elem, method, val ) {
- var win = getWindow( elem );
-
- if ( val === undefined ) {
- return win ? (prop in win) ? win[ prop ] :
- win.document.documentElement[ method ] :
- elem[ method ];
- }
-
- if ( win ) {
- win.scrollTo(
- !top ? val : jQuery( win ).scrollLeft(),
- top ? val : jQuery( win ).scrollTop()
- );
-
- } else {
- elem[ method ] = val;
- }
- }, method, val, arguments.length, null );
- };
-});
-
-// Add the top/left cssHooks using jQuery.fn.position
-// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
-// getComputedStyle returns percent when specified for top/left/bottom/right
-// rather than make the css module depend on the offset module, we just check for it here
-jQuery.each( [ "top", "left" ], function( i, prop ) {
- jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
- function( elem, computed ) {
- if ( computed ) {
- computed = curCSS( elem, prop );
- // if curCSS returns percentage, fallback to offset
- return rnumnonpx.test( computed ) ?
- jQuery( elem ).position()[ prop ] + "px" :
- computed;
- }
- }
- );
-});
-
-
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
- jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
- // margin is only for outerHeight, outerWidth
- jQuery.fn[ funcName ] = function( margin, value ) {
- var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
- extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
- return access( this, function( elem, type, value ) {
- var doc;
-
- if ( jQuery.isWindow( elem ) ) {
- // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
- // isn't a whole lot we can do. See pull request at this URL for discussion:
- // https://github.com/jquery/jquery/pull/764
- return elem.document.documentElement[ "client" + name ];
- }
-
- // Get document width or height
- if ( elem.nodeType === 9 ) {
- doc = elem.documentElement;
-
- // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
- // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
- return Math.max(
- elem.body[ "scroll" + name ], doc[ "scroll" + name ],
- elem.body[ "offset" + name ], doc[ "offset" + name ],
- doc[ "client" + name ]
- );
- }
-
- return value === undefined ?
- // Get width or height on the element, requesting but not forcing parseFloat
- jQuery.css( elem, type, extra ) :
-
- // Set width or height on the element
- jQuery.style( elem, type, value, extra );
- }, type, chainable ? margin : undefined, chainable, null );
- };
- });
-});
-
-
-// The number of elements contained in the matched element set
-jQuery.fn.size = function() {
- return this.length;
-};
-
-jQuery.fn.andSelf = jQuery.fn.addBack;
-
-
-
-
-// Register as a named AMD module, since jQuery can be concatenated with other
-// files that may use define, but not via a proper concatenation script that
-// understands anonymous AMD modules. A named AMD is safest and most robust
-// way to register. Lowercase jquery is used because AMD module names are
-// derived from file names, and jQuery is normally delivered in a lowercase
-// file name. Do this after creating the global so that if an AMD module wants
-// to call noConflict to hide this version of jQuery, it will work.
-
-// Note that for maximum portability, libraries that are not jQuery should
-// declare themselves as anonymous modules, and avoid setting a global if an
-// AMD loader is present. jQuery is a special case. For more information, see
-// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
-
-if ( typeof define === "function" && define.amd ) {
- define( "jquery", [], function() {
- return jQuery;
- });
-}
-
-
-
-
-var
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$;
-
-jQuery.noConflict = function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
-};
-
-// Expose jQuery and $ identifiers, even in
-// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
-// and CommonJS for browser emulators (#13566)
-if ( typeof noGlobal === strundefined ) {
- window.jQuery = window.$ = jQuery;
-}
-
-
-
-
-return jQuery;
-
-}));
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery-1.7.2.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery-1.7.2.js
deleted file mode 100644
index 3774ff98..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery-1.7.2.js
+++ /dev/null
@@ -1,9404 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.7.2
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Wed Mar 21 12:46:34 2012 -0700
- */
-(function( window, undefined ) {
-
-// Use the correct document accordingly with window argument (sandbox)
-var document = window.document,
- navigator = window.navigator,
- location = window.location;
-var jQuery = (function() {
-
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- return new jQuery.fn.init( selector, context, rootjQuery );
- },
-
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$,
-
- // A central reference to the root jQuery(document)
- rootjQuery,
-
- // A simple way to check for HTML strings or ID strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-
- // Check if a string has a non-whitespace character in it
- rnotwhite = /\S/,
-
- // Used for trimming whitespace
- trimLeft = /^\s+/,
- trimRight = /\s+$/,
-
- // Match a standalone tag
- rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
- // JSON RegExp
- rvalidchars = /^[\],:{}\s]*$/,
- rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
- rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
- rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-
- // Useragent RegExp
- rwebkit = /(webkit)[ \/]([\w.]+)/,
- ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
- rmsie = /(msie) ([\w.]+)/,
- rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
-
- // Matches dashed string for camelizing
- rdashAlpha = /-([a-z]|[0-9])/ig,
- rmsPrefix = /^-ms-/,
-
- // Used by jQuery.camelCase as callback to replace()
- fcamelCase = function( all, letter ) {
- return ( letter + "" ).toUpperCase();
- },
-
- // Keep a UserAgent string for use with jQuery.browser
- userAgent = navigator.userAgent,
-
- // For matching the engine and version of the browser
- browserMatch,
-
- // The deferred used on DOM ready
- readyList,
-
- // The ready event handler
- DOMContentLoaded,
-
- // Save a reference to some core methods
- toString = Object.prototype.toString,
- hasOwn = Object.prototype.hasOwnProperty,
- push = Array.prototype.push,
- slice = Array.prototype.slice,
- trim = String.prototype.trim,
- indexOf = Array.prototype.indexOf,
-
- // [[Class]] -> type pairs
- class2type = {};
-
-jQuery.fn = jQuery.prototype = {
- constructor: jQuery,
- init: function( selector, context, rootjQuery ) {
- var match, elem, ret, doc;
-
- // Handle $(""), $(null), or $(undefined)
- if ( !selector ) {
- return this;
- }
-
- // Handle $(DOMElement)
- if ( selector.nodeType ) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
- }
-
- // The body element only exists once, optimize finding it
- if ( selector === "body" && !context && document.body ) {
- this.context = document;
- this[0] = document.body;
- this.selector = selector;
- this.length = 1;
- return this;
- }
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- // Are we dealing with HTML string or an ID?
- if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = quickExpr.exec( selector );
- }
-
- // Verify a match, and that no context was specified for #id
- if ( match && (match[1] || !context) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[1] ) {
- context = context instanceof jQuery ? context[0] : context;
- doc = ( context ? context.ownerDocument || context : document );
-
- // If a single string is passed in and it's a single tag
- // just do a createElement and skip the rest
- ret = rsingleTag.exec( selector );
-
- if ( ret ) {
- if ( jQuery.isPlainObject( context ) ) {
- selector = [ document.createElement( ret[1] ) ];
- jQuery.fn.attr.call( selector, context, true );
-
- } else {
- selector = [ doc.createElement( ret[1] ) ];
- }
-
- } else {
- ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
- selector = ( ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment ).childNodes;
- }
-
- return jQuery.merge( this, selector );
-
- // HANDLE: $("#id")
- } else {
- elem = document.getElementById( match[2] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id !== match[2] ) {
- return rootjQuery.find( selector );
- }
-
- // Otherwise, we inject the element directly into the jQuery object
- this.length = 1;
- this[0] = elem;
- }
-
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return ( context || rootjQuery ).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return rootjQuery.ready( selector );
- }
-
- if ( selector.selector !== undefined ) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray( selector, this );
- },
-
- // Start with an empty selector
- selector: "",
-
- // The current version of jQuery being used
- jquery: "1.7.2",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- // The number of elements contained in the matched element set
- size: function() {
- return this.length;
- },
-
- toArray: function() {
- return slice.call( this, 0 );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num == null ?
-
- // Return a 'clean' array
- this.toArray() :
-
- // Return just the object
- ( num < 0 ? this[ this.length + num ] : this[ num ] );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems, name, selector ) {
- // Build a new jQuery matched element set
- var ret = this.constructor();
-
- if ( jQuery.isArray( elems ) ) {
- push.apply( ret, elems );
-
- } else {
- jQuery.merge( ret, elems );
- }
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
-
- ret.context = this.context;
-
- if ( name === "find" ) {
- ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
- } else if ( name ) {
- ret.selector = this.selector + "." + name + "(" + selector + ")";
- }
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- // (You can seed the arguments with an array of args, but this is
- // only used internally.)
- each: function( callback, args ) {
- return jQuery.each( this, callback, args );
- },
-
- ready: function( fn ) {
- // Attach the listeners
- jQuery.bindReady();
-
- // Add the callback
- readyList.add( fn );
-
- return this;
- },
-
- eq: function( i ) {
- i = +i;
- return i === -1 ?
- this.slice( i ) :
- this.slice( i, i + 1 );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ),
- "slice", slice.call(arguments).join(",") );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function( elem, i ) {
- return callback.call( elem, i, elem );
- }));
- },
-
- end: function() {
- return this.prevObject || this.constructor(null);
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: [].sort,
- splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
- var options, name, src, copy, copyIsArray, clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
- target = arguments[1] || {};
- // skip the boolean and the target
- i = 2;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
- target = {};
- }
-
- // extend jQuery itself if only one argument is passed
- if ( length === i ) {
- target = this;
- --i;
- }
-
- for ( ; i < length; i++ ) {
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null ) {
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray(src) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject(src) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend({
- noConflict: function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
- },
-
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
- // Either a released hold or an DOMready/load event and not yet ready
- if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( !document.body ) {
- return setTimeout( jQuery.ready, 1 );
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.fireWith( document, [ jQuery ] );
-
- // Trigger any bound ready events
- if ( jQuery.fn.trigger ) {
- jQuery( document ).trigger( "ready" ).off( "ready" );
- }
- }
- },
-
- bindReady: function() {
- if ( readyList ) {
- return;
- }
-
- readyList = jQuery.Callbacks( "once memory" );
-
- // Catch cases where $(document).ready() is called after the
- // browser event has already occurred.
- if ( document.readyState === "complete" ) {
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- return setTimeout( jQuery.ready, 1 );
- }
-
- // Mozilla, Opera and webkit nightlies currently support this event
- if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", jQuery.ready, false );
-
- // If IE event model is used
- } else if ( document.attachEvent ) {
- // ensure firing before onload,
- // maybe late but safe also for iframes
- document.attachEvent( "onreadystatechange", DOMContentLoaded );
-
- // A fallback to window.onload, that will always work
- window.attachEvent( "onload", jQuery.ready );
-
- // If IE and not a frame
- // continually check to see if the document is ready
- var toplevel = false;
-
- try {
- toplevel = window.frameElement == null;
- } catch(e) {}
-
- if ( document.documentElement.doScroll && toplevel ) {
- doScrollCheck();
- }
- }
- },
-
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return jQuery.type(obj) === "function";
- },
-
- isArray: Array.isArray || function( obj ) {
- return jQuery.type(obj) === "array";
- },
-
- isWindow: function( obj ) {
- return obj != null && obj == obj.window;
- },
-
- isNumeric: function( obj ) {
- return !isNaN( parseFloat(obj) ) && isFinite( obj );
- },
-
- type: function( obj ) {
- return obj == null ?
- String( obj ) :
- class2type[ toString.call(obj) ] || "object";
- },
-
- isPlainObject: function( obj ) {
- // Must be an Object.
- // Because of IE, we also have to check the presence of the constructor property.
- // Make sure that DOM nodes and window objects don't pass through, as well
- if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- try {
- // Not own constructor property must be Object
- if ( obj.constructor &&
- !hasOwn.call(obj, "constructor") &&
- !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
- return false;
- }
- } catch ( e ) {
- // IE8,9 Will throw exceptions on certain host objects #9897
- return false;
- }
-
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own.
-
- var key;
- for ( key in obj ) {}
-
- return key === undefined || hasOwn.call( obj, key );
- },
-
- isEmptyObject: function( obj ) {
- for ( var name in obj ) {
- return false;
- }
- return true;
- },
-
- error: function( msg ) {
- throw new Error( msg );
- },
-
- parseJSON: function( data ) {
- if ( typeof data !== "string" || !data ) {
- return null;
- }
-
- // Make sure leading/trailing whitespace is removed (IE can't handle it)
- data = jQuery.trim( data );
-
- // Attempt to parse using the native JSON parser first
- if ( window.JSON && window.JSON.parse ) {
- return window.JSON.parse( data );
- }
-
- // Make sure the incoming data is actual JSON
- // Logic borrowed from http://json.org/json2.js
- if ( rvalidchars.test( data.replace( rvalidescape, "@" )
- .replace( rvalidtokens, "]" )
- .replace( rvalidbraces, "")) ) {
-
- return ( new Function( "return " + data ) )();
-
- }
- jQuery.error( "Invalid JSON: " + data );
- },
-
- // Cross-browser xml parsing
- parseXML: function( data ) {
- if ( typeof data !== "string" || !data ) {
- return null;
- }
- var xml, tmp;
- try {
- if ( window.DOMParser ) { // Standard
- tmp = new DOMParser();
- xml = tmp.parseFromString( data , "text/xml" );
- } else { // IE
- xml = new ActiveXObject( "Microsoft.XMLDOM" );
- xml.async = "false";
- xml.loadXML( data );
- }
- } catch( e ) {
- xml = undefined;
- }
- if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
- },
-
- noop: function() {},
-
- // Evaluates a script in a global context
- // Workarounds based on findings by Jim Driscoll
- // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
- globalEval: function( data ) {
- if ( data && rnotwhite.test( data ) ) {
- // We use execScript on Internet Explorer
- // We use an anonymous function so that context is window
- // rather than jQuery in Firefox
- ( window.execScript || function( data ) {
- window[ "eval" ].call( window, data );
- } )( data );
- }
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Microsoft forgot to hump their vendor prefix (#9572)
- camelCase: function( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
- },
-
- // args is for internal usage only
- each: function( object, callback, args ) {
- var name, i = 0,
- length = object.length,
- isObj = length === undefined || jQuery.isFunction( object );
-
- if ( args ) {
- if ( isObj ) {
- for ( name in object ) {
- if ( callback.apply( object[ name ], args ) === false ) {
- break;
- }
- }
- } else {
- for ( ; i < length; ) {
- if ( callback.apply( object[ i++ ], args ) === false ) {
- break;
- }
- }
- }
-
- // A special, fast, case for the most common use of each
- } else {
- if ( isObj ) {
- for ( name in object ) {
- if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
- break;
- }
- }
- } else {
- for ( ; i < length; ) {
- if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
- break;
- }
- }
- }
- }
-
- return object;
- },
-
- // Use native String.trim function wherever possible
- trim: trim ?
- function( text ) {
- return text == null ?
- "" :
- trim.call( text );
- } :
-
- // Otherwise use our own trimming functionality
- function( text ) {
- return text == null ?
- "" :
- text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
- },
-
- // results is for internal usage only
- makeArray: function( array, results ) {
- var ret = results || [];
-
- if ( array != null ) {
- // The window, strings (and functions) also have 'length'
- // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
- var type = jQuery.type( array );
-
- if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
- push.call( ret, array );
- } else {
- jQuery.merge( ret, array );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, array, i ) {
- var len;
-
- if ( array ) {
- if ( indexOf ) {
- return indexOf.call( array, elem, i );
- }
-
- len = array.length;
- i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
- for ( ; i < len; i++ ) {
- // Skip accessing in sparse arrays
- if ( i in array && array[ i ] === elem ) {
- return i;
- }
- }
- }
-
- return -1;
- },
-
- merge: function( first, second ) {
- var i = first.length,
- j = 0;
-
- if ( typeof second.length === "number" ) {
- for ( var l = second.length; j < l; j++ ) {
- first[ i++ ] = second[ j ];
- }
-
- } else {
- while ( second[j] !== undefined ) {
- first[ i++ ] = second[ j++ ];
- }
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, inv ) {
- var ret = [], retVal;
- inv = !!inv;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( var i = 0, length = elems.length; i < length; i++ ) {
- retVal = !!callback( elems[ i ], i );
- if ( inv !== retVal ) {
- ret.push( elems[ i ] );
- }
- }
-
- return ret;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var value, key, ret = [],
- i = 0,
- length = elems.length,
- // jquery objects are treated as arrays
- isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
-
- // Go through the array, translating each of the items to their
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( key in elems ) {
- value = callback( elems[ key ], key, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
- }
-
- // Flatten any nested arrays
- return ret.concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- if ( typeof context === "string" ) {
- var tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- var args = slice.call( arguments, 2 ),
- proxy = function() {
- return fn.apply( context, args.concat( slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-
- return proxy;
- },
-
- // Mutifunctional method to get and set values to a collection
- // The value/s can optionally be executed if it's a function
- access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
- var exec,
- bulk = key == null,
- i = 0,
- length = elems.length;
-
- // Sets many values
- if ( key && typeof key === "object" ) {
- for ( i in key ) {
- jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );
- }
- chainable = 1;
-
- // Sets one value
- } else if ( value !== undefined ) {
- // Optionally, function values get executed if exec is true
- exec = pass === undefined && jQuery.isFunction( value );
-
- if ( bulk ) {
- // Bulk operations only iterate when executing function values
- if ( exec ) {
- exec = fn;
- fn = function( elem, key, value ) {
- return exec.call( jQuery( elem ), value );
- };
-
- // Otherwise they run against the entire set
- } else {
- fn.call( elems, value );
- fn = null;
- }
- }
-
- if ( fn ) {
- for (; i < length; i++ ) {
- fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
- }
- }
-
- chainable = 1;
- }
-
- return chainable ?
- elems :
-
- // Gets
- bulk ?
- fn.call( elems ) :
- length ? fn( elems[0], key ) : emptyGet;
- },
-
- now: function() {
- return ( new Date() ).getTime();
- },
-
- // Use of jQuery.browser is frowned upon.
- // More details: http://docs.jquery.com/Utilities/jQuery.browser
- uaMatch: function( ua ) {
- ua = ua.toLowerCase();
-
- var match = rwebkit.exec( ua ) ||
- ropera.exec( ua ) ||
- rmsie.exec( ua ) ||
- ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
- [];
-
- return { browser: match[1] || "", version: match[2] || "0" };
- },
-
- sub: function() {
- function jQuerySub( selector, context ) {
- return new jQuerySub.fn.init( selector, context );
- }
- jQuery.extend( true, jQuerySub, this );
- jQuerySub.superclass = this;
- jQuerySub.fn = jQuerySub.prototype = this();
- jQuerySub.fn.constructor = jQuerySub;
- jQuerySub.sub = this.sub;
- jQuerySub.fn.init = function init( selector, context ) {
- if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
- context = jQuerySub( context );
- }
-
- return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
- };
- jQuerySub.fn.init.prototype = jQuerySub.fn;
- var rootjQuerySub = jQuerySub(document);
- return jQuerySub;
- },
-
- browser: {}
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-browserMatch = jQuery.uaMatch( userAgent );
-if ( browserMatch.browser ) {
- jQuery.browser[ browserMatch.browser ] = true;
- jQuery.browser.version = browserMatch.version;
-}
-
-// Deprecated, use jQuery.browser.webkit instead
-if ( jQuery.browser.webkit ) {
- jQuery.browser.safari = true;
-}
-
-// IE doesn't match non-breaking spaces with \s
-if ( rnotwhite.test( "\xA0" ) ) {
- trimLeft = /^[\s\xA0]+/;
- trimRight = /[\s\xA0]+$/;
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-if ( document.addEventListener ) {
- DOMContentLoaded = function() {
- document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
- jQuery.ready();
- };
-
-} else if ( document.attachEvent ) {
- DOMContentLoaded = function() {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( document.readyState === "complete" ) {
- document.detachEvent( "onreadystatechange", DOMContentLoaded );
- jQuery.ready();
- }
- };
-}
-
-// The DOM ready check for Internet Explorer
-function doScrollCheck() {
- if ( jQuery.isReady ) {
- return;
- }
-
- try {
- // If IE is used, use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- document.documentElement.doScroll("left");
- } catch(e) {
- setTimeout( doScrollCheck, 1 );
- return;
- }
-
- // and execute any waiting functions
- jQuery.ready();
-}
-
-return jQuery;
-
-})();
-
-
-// String to Object flags format cache
-var flagsCache = {};
-
-// Convert String-formatted flags into Object-formatted ones and store in cache
-function createFlags( flags ) {
- var object = flagsCache[ flags ] = {},
- i, length;
- flags = flags.split( /\s+/ );
- for ( i = 0, length = flags.length; i < length; i++ ) {
- object[ flags[i] ] = true;
- }
- return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- * flags: an optional list of space-separated flags that will change how
- * the callback list behaves
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible flags:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( flags ) {
-
- // Convert flags from String-formatted to Object-formatted
- // (we check in cache first)
- flags = flags ? ( flagsCache[ flags ] || createFlags( flags ) ) : {};
-
- var // Actual callback list
- list = [],
- // Stack of fire calls for repeatable lists
- stack = [],
- // Last fire value (for non-forgettable lists)
- memory,
- // Flag to know if list was already fired
- fired,
- // Flag to know if list is currently firing
- firing,
- // First callback to fire (used internally by add and fireWith)
- firingStart,
- // End of the loop when firing
- firingLength,
- // Index of currently firing callback (modified by remove if needed)
- firingIndex,
- // Add one or several callbacks to the list
- add = function( args ) {
- var i,
- length,
- elem,
- type,
- actual;
- for ( i = 0, length = args.length; i < length; i++ ) {
- elem = args[ i ];
- type = jQuery.type( elem );
- if ( type === "array" ) {
- // Inspect recursively
- add( elem );
- } else if ( type === "function" ) {
- // Add if not in unique mode and callback is not in
- if ( !flags.unique || !self.has( elem ) ) {
- list.push( elem );
- }
- }
- }
- },
- // Fire callbacks
- fire = function( context, args ) {
- args = args || [];
- memory = !flags.memory || [ context, args ];
- fired = true;
- firing = true;
- firingIndex = firingStart || 0;
- firingStart = 0;
- firingLength = list.length;
- for ( ; list && firingIndex < firingLength; firingIndex++ ) {
- if ( list[ firingIndex ].apply( context, args ) === false && flags.stopOnFalse ) {
- memory = true; // Mark as halted
- break;
- }
- }
- firing = false;
- if ( list ) {
- if ( !flags.once ) {
- if ( stack && stack.length ) {
- memory = stack.shift();
- self.fireWith( memory[ 0 ], memory[ 1 ] );
- }
- } else if ( memory === true ) {
- self.disable();
- } else {
- list = [];
- }
- }
- },
- // Actual Callbacks object
- self = {
- // Add a callback or a collection of callbacks to the list
- add: function() {
- if ( list ) {
- var length = list.length;
- add( arguments );
- // Do we need to add the callbacks to the
- // current firing batch?
- if ( firing ) {
- firingLength = list.length;
- // With memory, if we're not firing then
- // we should call right away, unless previous
- // firing was halted (stopOnFalse)
- } else if ( memory && memory !== true ) {
- firingStart = length;
- fire( memory[ 0 ], memory[ 1 ] );
- }
- }
- return this;
- },
- // Remove a callback from the list
- remove: function() {
- if ( list ) {
- var args = arguments,
- argIndex = 0,
- argLength = args.length;
- for ( ; argIndex < argLength ; argIndex++ ) {
- for ( var i = 0; i < list.length; i++ ) {
- if ( args[ argIndex ] === list[ i ] ) {
- // Handle firingIndex and firingLength
- if ( firing ) {
- if ( i <= firingLength ) {
- firingLength--;
- if ( i <= firingIndex ) {
- firingIndex--;
- }
- }
- }
- // Remove the element
- list.splice( i--, 1 );
- // If we have some unicity property then
- // we only need to do this once
- if ( flags.unique ) {
- break;
- }
- }
- }
- }
- }
- return this;
- },
- // Control if a given callback is in the list
- has: function( fn ) {
- if ( list ) {
- var i = 0,
- length = list.length;
- for ( ; i < length; i++ ) {
- if ( fn === list[ i ] ) {
- return true;
- }
- }
- }
- return false;
- },
- // Remove all callbacks from the list
- empty: function() {
- list = [];
- return this;
- },
- // Have the list do nothing anymore
- disable: function() {
- list = stack = memory = undefined;
- return this;
- },
- // Is it disabled?
- disabled: function() {
- return !list;
- },
- // Lock the list in its current state
- lock: function() {
- stack = undefined;
- if ( !memory || memory === true ) {
- self.disable();
- }
- return this;
- },
- // Is it locked?
- locked: function() {
- return !stack;
- },
- // Call all callbacks with the given context and arguments
- fireWith: function( context, args ) {
- if ( stack ) {
- if ( firing ) {
- if ( !flags.once ) {
- stack.push( [ context, args ] );
- }
- } else if ( !( flags.once && memory ) ) {
- fire( context, args );
- }
- }
- return this;
- },
- // Call all the callbacks with the given arguments
- fire: function() {
- self.fireWith( this, arguments );
- return this;
- },
- // To know if the callbacks have already been called at least once
- fired: function() {
- return !!fired;
- }
- };
-
- return self;
-};
-
-
-
-
-var // Static reference to slice
- sliceDeferred = [].slice;
-
-jQuery.extend({
-
- Deferred: function( func ) {
- var doneList = jQuery.Callbacks( "once memory" ),
- failList = jQuery.Callbacks( "once memory" ),
- progressList = jQuery.Callbacks( "memory" ),
- state = "pending",
- lists = {
- resolve: doneList,
- reject: failList,
- notify: progressList
- },
- promise = {
- done: doneList.add,
- fail: failList.add,
- progress: progressList.add,
-
- state: function() {
- return state;
- },
-
- // Deprecated
- isResolved: doneList.fired,
- isRejected: failList.fired,
-
- then: function( doneCallbacks, failCallbacks, progressCallbacks ) {
- deferred.done( doneCallbacks ).fail( failCallbacks ).progress( progressCallbacks );
- return this;
- },
- always: function() {
- deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
- return this;
- },
- pipe: function( fnDone, fnFail, fnProgress ) {
- return jQuery.Deferred(function( newDefer ) {
- jQuery.each( {
- done: [ fnDone, "resolve" ],
- fail: [ fnFail, "reject" ],
- progress: [ fnProgress, "notify" ]
- }, function( handler, data ) {
- var fn = data[ 0 ],
- action = data[ 1 ],
- returned;
- if ( jQuery.isFunction( fn ) ) {
- deferred[ handler ](function() {
- returned = fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise().then( newDefer.resolve, newDefer.reject, newDefer.notify );
- } else {
- newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
- }
- });
- } else {
- deferred[ handler ]( newDefer[ action ] );
- }
- });
- }).promise();
- },
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- if ( obj == null ) {
- obj = promise;
- } else {
- for ( var key in promise ) {
- obj[ key ] = promise[ key ];
- }
- }
- return obj;
- }
- },
- deferred = promise.promise({}),
- key;
-
- for ( key in lists ) {
- deferred[ key ] = lists[ key ].fire;
- deferred[ key + "With" ] = lists[ key ].fireWith;
- }
-
- // Handle state
- deferred.done( function() {
- state = "resolved";
- }, failList.disable, progressList.lock ).fail( function() {
- state = "rejected";
- }, doneList.disable, progressList.lock );
-
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
-
- // All done!
- return deferred;
- },
-
- // Deferred helper
- when: function( firstParam ) {
- var args = sliceDeferred.call( arguments, 0 ),
- i = 0,
- length = args.length,
- pValues = new Array( length ),
- count = length,
- pCount = length,
- deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
- firstParam :
- jQuery.Deferred(),
- promise = deferred.promise();
- function resolveFunc( i ) {
- return function( value ) {
- args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
- if ( !( --count ) ) {
- deferred.resolveWith( deferred, args );
- }
- };
- }
- function progressFunc( i ) {
- return function( value ) {
- pValues[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
- deferred.notifyWith( promise, pValues );
- };
- }
- if ( length > 1 ) {
- for ( ; i < length; i++ ) {
- if ( args[ i ] && args[ i ].promise && jQuery.isFunction( args[ i ].promise ) ) {
- args[ i ].promise().then( resolveFunc(i), deferred.reject, progressFunc(i) );
- } else {
- --count;
- }
- }
- if ( !count ) {
- deferred.resolveWith( deferred, args );
- }
- } else if ( deferred !== firstParam ) {
- deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
- }
- return promise;
- }
-});
-
-
-
-
-jQuery.support = (function() {
-
- var support,
- all,
- a,
- select,
- opt,
- input,
- fragment,
- tds,
- events,
- eventName,
- i,
- isSupported,
- div = document.createElement( "div" ),
- documentElement = document.documentElement;
-
- // Preliminary tests
- div.setAttribute("className", "t");
- div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-
- all = div.getElementsByTagName( "*" );
- a = div.getElementsByTagName( "a" )[ 0 ];
-
- // Can't get basic test support
- if ( !all || !all.length || !a ) {
- return {};
- }
-
- // First batch of supports tests
- select = document.createElement( "select" );
- opt = select.appendChild( document.createElement("option") );
- input = div.getElementsByTagName( "input" )[ 0 ];
-
- support = {
- // IE strips leading whitespace when .innerHTML is used
- leadingWhitespace: ( div.firstChild.nodeType === 3 ),
-
- // Make sure that tbody elements aren't automatically inserted
- // IE will insert them into empty tables
- tbody: !div.getElementsByTagName("tbody").length,
-
- // Make sure that link elements get serialized correctly by innerHTML
- // This requires a wrapper element in IE
- htmlSerialize: !!div.getElementsByTagName("link").length,
-
- // Get the style information from getAttribute
- // (IE uses .cssText instead)
- style: /top/.test( a.getAttribute("style") ),
-
- // Make sure that URLs aren't manipulated
- // (IE normalizes it by default)
- hrefNormalized: ( a.getAttribute("href") === "/a" ),
-
- // Make sure that element opacity exists
- // (IE uses filter instead)
- // Use a regex to work around a WebKit issue. See #5145
- opacity: /^0.55/.test( a.style.opacity ),
-
- // Verify style float existence
- // (IE uses styleFloat instead of cssFloat)
- cssFloat: !!a.style.cssFloat,
-
- // Make sure that if no value is specified for a checkbox
- // that it defaults to "on".
- // (WebKit defaults to "" instead)
- checkOn: ( input.value === "on" ),
-
- // Make sure that a selected-by-default option has a working selected property.
- // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
- optSelected: opt.selected,
-
- // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
- getSetAttribute: div.className !== "t",
-
- // Tests for enctype support on a form(#6743)
- enctype: !!document.createElement("form").enctype,
-
- // Makes sure cloning an html5 element does not cause problems
- // Where outerHTML is undefined, this still works
- html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
-
- // Will be defined later
- submitBubbles: true,
- changeBubbles: true,
- focusinBubbles: false,
- deleteExpando: true,
- noCloneEvent: true,
- inlineBlockNeedsLayout: false,
- shrinkWrapBlocks: false,
- reliableMarginRight: true,
- pixelMargin: true
- };
-
- // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead
- jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat");
-
- // Make sure checked status is properly cloned
- input.checked = true;
- support.noCloneChecked = input.cloneNode( true ).checked;
-
- // Make sure that the options inside disabled selects aren't marked as disabled
- // (WebKit marks them as disabled)
- select.disabled = true;
- support.optDisabled = !opt.disabled;
-
- // Test to see if it's possible to delete an expando from an element
- // Fails in Internet Explorer
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
-
- if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
- div.attachEvent( "onclick", function() {
- // Cloning a node shouldn't copy over any
- // bound event handlers (IE does this)
- support.noCloneEvent = false;
- });
- div.cloneNode( true ).fireEvent( "onclick" );
- }
-
- // Check if a radio maintains its value
- // after being appended to the DOM
- input = document.createElement("input");
- input.value = "t";
- input.setAttribute("type", "radio");
- support.radioValue = input.value === "t";
-
- input.setAttribute("checked", "checked");
-
- // #11217 - WebKit loses check when the name is after the checked attribute
- input.setAttribute( "name", "t" );
-
- div.appendChild( input );
- fragment = document.createDocumentFragment();
- fragment.appendChild( div.lastChild );
-
- // WebKit doesn't clone checked state correctly in fragments
- support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- // Check if a disconnected checkbox will retain its checked
- // value of true after appended to the DOM (IE6/7)
- support.appendChecked = input.checked;
-
- fragment.removeChild( input );
- fragment.appendChild( div );
-
- // Technique from Juriy Zaytsev
- // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
- // We only care about the case where non-standard event systems
- // are used, namely in IE. Short-circuiting here helps us to
- // avoid an eval call (in setAttribute) which can cause CSP
- // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
- if ( div.attachEvent ) {
- for ( i in {
- submit: 1,
- change: 1,
- focusin: 1
- }) {
- eventName = "on" + i;
- isSupported = ( eventName in div );
- if ( !isSupported ) {
- div.setAttribute( eventName, "return;" );
- isSupported = ( typeof div[ eventName ] === "function" );
- }
- support[ i + "Bubbles" ] = isSupported;
- }
- }
-
- fragment.removeChild( div );
-
- // Null elements to avoid leaks in IE
- fragment = select = opt = div = input = null;
-
- // Run tests that need a body at doc ready
- jQuery(function() {
- var container, outer, inner, table, td, offsetSupport,
- marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight,
- paddingMarginBorderVisibility, paddingMarginBorder,
- body = document.getElementsByTagName("body")[0];
-
- if ( !body ) {
- // Return for frameset docs that don't have a body
- return;
- }
-
- conMarginTop = 1;
- paddingMarginBorder = "padding:0;margin:0;border:";
- positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;";
- paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;";
- style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;";
- html = "<div " + style + "display:block;'><div style='" + paddingMarginBorder + "0;display:block;overflow:hidden;'></div></div>" +
- "<table " + style + "' cellpadding='0' cellspacing='0'>" +
- "<tr><td></td></tr></table>";
-
- container = document.createElement("div");
- container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px";
- body.insertBefore( container, body.firstChild );
-
- // Construct the test element
- div = document.createElement("div");
- container.appendChild( div );
-
- // Check if table cells still have offsetWidth/Height when they are set
- // to display:none and there are still other visible table cells in a
- // table row; if so, offsetWidth/Height are not reliable for use when
- // determining if an element has been hidden directly using
- // display:none (it is still safe to use offsets if a parent element is
- // hidden; don safety goggles and see bug #4512 for more information).
- // (only IE 8 fails this test)
- div.innerHTML = "<table><tr><td style='" + paddingMarginBorder + "0;display:none'></td><td>t</td></tr></table>";
- tds = div.getElementsByTagName( "td" );
- isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
- tds[ 0 ].style.display = "";
- tds[ 1 ].style.display = "none";
-
- // Check if empty table cells still have offsetWidth/Height
- // (IE <= 8 fail this test)
- support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
-
- // Check if div with explicit width and no margin-right incorrectly
- // gets computed margin-right based on width of container. For more
- // info see bug #3333
- // Fails in WebKit before Feb 2011 nightlies
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- if ( window.getComputedStyle ) {
- div.innerHTML = "";
- marginDiv = document.createElement( "div" );
- marginDiv.style.width = "0";
- marginDiv.style.marginRight = "0";
- div.style.width = "2px";
- div.appendChild( marginDiv );
- support.reliableMarginRight =
- ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
- }
-
- if ( typeof div.style.zoom !== "undefined" ) {
- // Check if natively block-level elements act like inline-block
- // elements when setting their display to 'inline' and giving
- // them layout
- // (IE < 8 does this)
- div.innerHTML = "";
- div.style.width = div.style.padding = "1px";
- div.style.border = 0;
- div.style.overflow = "hidden";
- div.style.display = "inline";
- div.style.zoom = 1;
- support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
-
- // Check if elements with layout shrink-wrap their children
- // (IE 6 does this)
- div.style.display = "block";
- div.style.overflow = "visible";
- div.innerHTML = "<div style='width:5px;'></div>";
- support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
- }
-
- div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility;
- div.innerHTML = html;
-
- outer = div.firstChild;
- inner = outer.firstChild;
- td = outer.nextSibling.firstChild.firstChild;
-
- offsetSupport = {
- doesNotAddBorder: ( inner.offsetTop !== 5 ),
- doesAddBorderForTableAndCells: ( td.offsetTop === 5 )
- };
-
- inner.style.position = "fixed";
- inner.style.top = "20px";
-
- // safari subtracts parent border width here which is 5px
- offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 );
- inner.style.position = inner.style.top = "";
-
- outer.style.overflow = "hidden";
- outer.style.position = "relative";
-
- offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 );
- offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop );
-
- if ( window.getComputedStyle ) {
- div.style.marginTop = "1%";
- support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%";
- }
-
- if ( typeof container.style.zoom !== "undefined" ) {
- container.style.zoom = 1;
- }
-
- body.removeChild( container );
- marginDiv = div = container = null;
-
- jQuery.extend( support, offsetSupport );
- });
-
- return support;
-})();
-
-
-
-
-var rbrace = /^(?:\{.*\}|\[.*\])$/,
- rmultiDash = /([A-Z])/g;
-
-jQuery.extend({
- cache: {},
-
- // Please use with caution
- uuid: 0,
-
- // Unique for each copy of jQuery on the page
- // Non-digits removed to match rinlinejQuery
- expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
-
- // The following elements throw uncatchable exceptions if you
- // attempt to add expando properties to them.
- noData: {
- "embed": true,
- // Ban all objects except for Flash (which handle expandos)
- "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
- "applet": true
- },
-
- hasData: function( elem ) {
- elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
- return !!elem && !isEmptyDataObject( elem );
- },
-
- data: function( elem, name, data, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var privateCache, thisCache, ret,
- internalKey = jQuery.expando,
- getByName = typeof name === "string",
-
- // We have to handle DOM nodes and JS objects differently because IE6-7
- // can't GC object references properly across the DOM-JS boundary
- isNode = elem.nodeType,
-
- // Only DOM nodes need the global jQuery cache; JS object data is
- // attached directly to the object so GC can occur automatically
- cache = isNode ? jQuery.cache : elem,
-
- // Only defining an ID for JS objects if its cache already exists allows
- // the code to shortcut on the same path as a DOM node with no cache
- id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey,
- isEvents = name === "events";
-
- // Avoid doing any more work than we need to when trying to get data on an
- // object that has no data at all
- if ( (!id || !cache[id] || (!isEvents && !pvt && !cache[id].data)) && getByName && data === undefined ) {
- return;
- }
-
- if ( !id ) {
- // Only DOM nodes need a new unique ID for each element since their data
- // ends up in the global cache
- if ( isNode ) {
- elem[ internalKey ] = id = ++jQuery.uuid;
- } else {
- id = internalKey;
- }
- }
-
- if ( !cache[ id ] ) {
- cache[ id ] = {};
-
- // Avoids exposing jQuery metadata on plain JS objects when the object
- // is serialized using JSON.stringify
- if ( !isNode ) {
- cache[ id ].toJSON = jQuery.noop;
- }
- }
-
- // An object can be passed to jQuery.data instead of a key/value pair; this gets
- // shallow copied over onto the existing cache
- if ( typeof name === "object" || typeof name === "function" ) {
- if ( pvt ) {
- cache[ id ] = jQuery.extend( cache[ id ], name );
- } else {
- cache[ id ].data = jQuery.extend( cache[ id ].data, name );
- }
- }
-
- privateCache = thisCache = cache[ id ];
-
- // jQuery data() is stored in a separate object inside the object's internal data
- // cache in order to avoid key collisions between internal data and user-defined
- // data.
- if ( !pvt ) {
- if ( !thisCache.data ) {
- thisCache.data = {};
- }
-
- thisCache = thisCache.data;
- }
-
- if ( data !== undefined ) {
- thisCache[ jQuery.camelCase( name ) ] = data;
- }
-
- // Users should not attempt to inspect the internal events object using jQuery.data,
- // it is undocumented and subject to change. But does anyone listen? No.
- if ( isEvents && !thisCache[ name ] ) {
- return privateCache.events;
- }
-
- // Check for both converted-to-camel and non-converted data property names
- // If a data property was specified
- if ( getByName ) {
-
- // First Try to find as-is property data
- ret = thisCache[ name ];
-
- // Test for null|undefined property data
- if ( ret == null ) {
-
- // Try to find the camelCased property
- ret = thisCache[ jQuery.camelCase( name ) ];
- }
- } else {
- ret = thisCache;
- }
-
- return ret;
- },
-
- removeData: function( elem, name, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var thisCache, i, l,
-
- // Reference to internal data cache key
- internalKey = jQuery.expando,
-
- isNode = elem.nodeType,
-
- // See jQuery.data for more information
- cache = isNode ? jQuery.cache : elem,
-
- // See jQuery.data for more information
- id = isNode ? elem[ internalKey ] : internalKey;
-
- // If there is already no cache entry for this object, there is no
- // purpose in continuing
- if ( !cache[ id ] ) {
- return;
- }
-
- if ( name ) {
-
- thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
- if ( thisCache ) {
-
- // Support array or space separated string names for data keys
- if ( !jQuery.isArray( name ) ) {
-
- // try the string as a key before any manipulation
- if ( name in thisCache ) {
- name = [ name ];
- } else {
-
- // split the camel cased version by spaces unless a key with the spaces exists
- name = jQuery.camelCase( name );
- if ( name in thisCache ) {
- name = [ name ];
- } else {
- name = name.split( " " );
- }
- }
- }
-
- for ( i = 0, l = name.length; i < l; i++ ) {
- delete thisCache[ name[i] ];
- }
-
- // If there is no data left in the cache, we want to continue
- // and let the cache object itself get destroyed
- if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
- return;
- }
- }
- }
-
- // See jQuery.data for more information
- if ( !pvt ) {
- delete cache[ id ].data;
-
- // Don't destroy the parent cache unless the internal data object
- // had been the only thing left in it
- if ( !isEmptyDataObject(cache[ id ]) ) {
- return;
- }
- }
-
- // Browsers that fail expando deletion also refuse to delete expandos on
- // the window, but it will allow it on all other JS objects; other browsers
- // don't care
- // Ensure that `cache` is not a window object #10080
- if ( jQuery.support.deleteExpando || !cache.setInterval ) {
- delete cache[ id ];
- } else {
- cache[ id ] = null;
- }
-
- // We destroyed the cache and need to eliminate the expando on the node to avoid
- // false lookups in the cache for entries that no longer exist
- if ( isNode ) {
- // IE does not allow us to delete expando properties from nodes,
- // nor does it have a removeAttribute function on Document nodes;
- // we must handle all of these cases
- if ( jQuery.support.deleteExpando ) {
- delete elem[ internalKey ];
- } else if ( elem.removeAttribute ) {
- elem.removeAttribute( internalKey );
- } else {
- elem[ internalKey ] = null;
- }
- }
- },
-
- // For internal use only.
- _data: function( elem, name, data ) {
- return jQuery.data( elem, name, data, true );
- },
-
- // A method for determining if a DOM node can handle the data expando
- acceptData: function( elem ) {
- if ( elem.nodeName ) {
- var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
-
- if ( match ) {
- return !(match === true || elem.getAttribute("classid") !== match);
- }
- }
-
- return true;
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ) {
- var parts, part, attr, name, l,
- elem = this[0],
- i = 0,
- data = null;
-
- // Gets all values
- if ( key === undefined ) {
- if ( this.length ) {
- data = jQuery.data( elem );
-
- if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
- attr = elem.attributes;
- for ( l = attr.length; i < l; i++ ) {
- name = attr[i].name;
-
- if ( name.indexOf( "data-" ) === 0 ) {
- name = jQuery.camelCase( name.substring(5) );
-
- dataAttr( elem, name, data[ name ] );
- }
- }
- jQuery._data( elem, "parsedAttrs", true );
- }
- }
-
- return data;
- }
-
- // Sets multiple values
- if ( typeof key === "object" ) {
- return this.each(function() {
- jQuery.data( this, key );
- });
- }
-
- parts = key.split( ".", 2 );
- parts[1] = parts[1] ? "." + parts[1] : "";
- part = parts[1] + "!";
-
- return jQuery.access( this, function( value ) {
-
- if ( value === undefined ) {
- data = this.triggerHandler( "getData" + part, [ parts[0] ] );
-
- // Try to fetch any internally stored data first
- if ( data === undefined && elem ) {
- data = jQuery.data( elem, key );
- data = dataAttr( elem, key, data );
- }
-
- return data === undefined && parts[1] ?
- this.data( parts[0] ) :
- data;
- }
-
- parts[1] = value;
- this.each(function() {
- var self = jQuery( this );
-
- self.triggerHandler( "setData" + part, parts );
- jQuery.data( this, key, value );
- self.triggerHandler( "changeData" + part, parts );
- });
- }, null, value, arguments.length > 1, null, false );
- },
-
- removeData: function( key ) {
- return this.each(function() {
- jQuery.removeData( this, key );
- });
- }
-});
-
-function dataAttr( elem, key, data ) {
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
-
- var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = data === "true" ? true :
- data === "false" ? false :
- data === "null" ? null :
- jQuery.isNumeric( data ) ? +data :
- rbrace.test( data ) ? jQuery.parseJSON( data ) :
- data;
- } catch( e ) {}
-
- // Make sure we set the data so it isn't changed later
- jQuery.data( elem, key, data );
-
- } else {
- data = undefined;
- }
- }
-
- return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
- for ( var name in obj ) {
-
- // if the public data object is empty, the private is still empty
- if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
- continue;
- }
- if ( name !== "toJSON" ) {
- return false;
- }
- }
-
- return true;
-}
-
-
-
-
-function handleQueueMarkDefer( elem, type, src ) {
- var deferDataKey = type + "defer",
- queueDataKey = type + "queue",
- markDataKey = type + "mark",
- defer = jQuery._data( elem, deferDataKey );
- if ( defer &&
- ( src === "queue" || !jQuery._data(elem, queueDataKey) ) &&
- ( src === "mark" || !jQuery._data(elem, markDataKey) ) ) {
- // Give room for hard-coded callbacks to fire first
- // and eventually mark/queue something else on the element
- setTimeout( function() {
- if ( !jQuery._data( elem, queueDataKey ) &&
- !jQuery._data( elem, markDataKey ) ) {
- jQuery.removeData( elem, deferDataKey, true );
- defer.fire();
- }
- }, 0 );
- }
-}
-
-jQuery.extend({
-
- _mark: function( elem, type ) {
- if ( elem ) {
- type = ( type || "fx" ) + "mark";
- jQuery._data( elem, type, (jQuery._data( elem, type ) || 0) + 1 );
- }
- },
-
- _unmark: function( force, elem, type ) {
- if ( force !== true ) {
- type = elem;
- elem = force;
- force = false;
- }
- if ( elem ) {
- type = type || "fx";
- var key = type + "mark",
- count = force ? 0 : ( (jQuery._data( elem, key ) || 1) - 1 );
- if ( count ) {
- jQuery._data( elem, key, count );
- } else {
- jQuery.removeData( elem, key, true );
- handleQueueMarkDefer( elem, type, "mark" );
- }
- }
- },
-
- queue: function( elem, type, data ) {
- var q;
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- q = jQuery._data( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !q || jQuery.isArray(data) ) {
- q = jQuery._data( elem, type, jQuery.makeArray(data) );
- } else {
- q.push( data );
- }
- }
- return q || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- fn = queue.shift(),
- hooks = {};
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- }
-
- if ( fn ) {
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- jQuery._data( elem, type + ".run", hooks );
- fn.call( elem, function() {
- jQuery.dequeue( elem, type );
- }, hooks );
- }
-
- if ( !queue.length ) {
- jQuery.removeData( elem, type + "queue " + type + ".run", true );
- handleQueueMarkDefer( elem, type, "queue" );
- }
- }
-});
-
-jQuery.fn.extend({
- queue: function( type, data ) {
- var setter = 2;
-
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- setter--;
- }
-
- if ( arguments.length < setter ) {
- return jQuery.queue( this[0], type );
- }
-
- return data === undefined ?
- this :
- this.each(function() {
- var queue = jQuery.queue( this, type, data );
-
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
- // Based off of the plugin by Clint Helfers, with permission.
- // http://blindsignals.com/index.php/2009/07/jquery-delay/
- delay: function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
- type = type || "fx";
-
- return this.queue( type, function( next, hooks ) {
- var timeout = setTimeout( next, time );
- hooks.stop = function() {
- clearTimeout( timeout );
- };
- });
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, object ) {
- if ( typeof type !== "string" ) {
- object = type;
- type = undefined;
- }
- type = type || "fx";
- var defer = jQuery.Deferred(),
- elements = this,
- i = elements.length,
- count = 1,
- deferDataKey = type + "defer",
- queueDataKey = type + "queue",
- markDataKey = type + "mark",
- tmp;
- function resolve() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- }
- while( i-- ) {
- if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
- ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
- jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
- jQuery.data( elements[ i ], deferDataKey, jQuery.Callbacks( "once memory" ), true ) )) {
- count++;
- tmp.add( resolve );
- }
- }
- resolve();
- return defer.promise( object );
- }
-});
-
-
-
-
-var rclass = /[\n\t\r]/g,
- rspace = /\s+/,
- rreturn = /\r/g,
- rtype = /^(?:button|input)$/i,
- rfocusable = /^(?:button|input|object|select|textarea)$/i,
- rclickable = /^a(?:rea)?$/i,
- rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
- getSetAttribute = jQuery.support.getSetAttribute,
- nodeHook, boolHook, fixSpecified;
-
-jQuery.fn.extend({
- attr: function( name, value ) {
- return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
- },
-
- removeAttr: function( name ) {
- return this.each(function() {
- jQuery.removeAttr( this, name );
- });
- },
-
- prop: function( name, value ) {
- return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
- },
-
- removeProp: function( name ) {
- name = jQuery.propFix[ name ] || name;
- return this.each(function() {
- // try/catch handles cases where IE balks (such as removing a property on window)
- try {
- this[ name ] = undefined;
- delete this[ name ];
- } catch( e ) {}
- });
- },
-
- addClass: function( value ) {
- var classNames, i, l, elem,
- setClass, c, cl;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).addClass( value.call(this, j, this.className) );
- });
- }
-
- if ( value && typeof value === "string" ) {
- classNames = value.split( rspace );
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- elem = this[ i ];
-
- if ( elem.nodeType === 1 ) {
- if ( !elem.className && classNames.length === 1 ) {
- elem.className = value;
-
- } else {
- setClass = " " + elem.className + " ";
-
- for ( c = 0, cl = classNames.length; c < cl; c++ ) {
- if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
- setClass += classNames[ c ] + " ";
- }
- }
- elem.className = jQuery.trim( setClass );
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var classNames, i, l, elem, className, c, cl;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).removeClass( value.call(this, j, this.className) );
- });
- }
-
- if ( (value && typeof value === "string") || value === undefined ) {
- classNames = ( value || "" ).split( rspace );
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- elem = this[ i ];
-
- if ( elem.nodeType === 1 && elem.className ) {
- if ( value ) {
- className = (" " + elem.className + " ").replace( rclass, " " );
- for ( c = 0, cl = classNames.length; c < cl; c++ ) {
- className = className.replace(" " + classNames[ c ] + " ", " ");
- }
- elem.className = jQuery.trim( className );
-
- } else {
- elem.className = "";
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value,
- isBool = typeof stateVal === "boolean";
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( i ) {
- jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
- });
- }
-
- return this.each(function() {
- if ( type === "string" ) {
- // toggle individual class names
- var className,
- i = 0,
- self = jQuery( this ),
- state = stateVal,
- classNames = value.split( rspace );
-
- while ( (className = classNames[ i++ ]) ) {
- // check each className given, space seperated list
- state = isBool ? state : !self.hasClass( className );
- self[ state ? "addClass" : "removeClass" ]( className );
- }
-
- } else if ( type === "undefined" || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- jQuery._data( this, "__className__", this.className );
- }
-
- // toggle whole className
- this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
- }
- });
- },
-
- hasClass: function( selector ) {
- var className = " " + selector + " ",
- i = 0,
- l = this.length;
- for ( ; i < l; i++ ) {
- if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
- return true;
- }
- }
-
- return false;
- },
-
- val: function( value ) {
- var hooks, ret, isFunction,
- elem = this[0];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
- return ret;
- }
-
- ret = elem.value;
-
- return typeof ret === "string" ?
- // handle most common string cases
- ret.replace(rreturn, "") :
- // handle cases where value is null/undef or number
- ret == null ? "" : ret;
- }
-
- return;
- }
-
- isFunction = jQuery.isFunction( value );
-
- return this.each(function( i ) {
- var self = jQuery(this), val;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call( this, i, self.val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
- } else if ( typeof val === "number" ) {
- val += "";
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map(val, function ( value ) {
- return value == null ? "" : value + "";
- });
- }
-
- hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- });
- }
-});
-
-jQuery.extend({
- valHooks: {
- option: {
- get: function( elem ) {
- // attributes.value is undefined in Blackberry 4.7 but
- // uses .value. See #6932
- var val = elem.attributes.value;
- return !val || val.specified ? elem.value : elem.text;
- }
- },
- select: {
- get: function( elem ) {
- var value, i, max, option,
- index = elem.selectedIndex,
- values = [],
- options = elem.options,
- one = elem.type === "select-one";
-
- // Nothing was selected
- if ( index < 0 ) {
- return null;
- }
-
- // Loop through all the selected options
- i = one ? index : 0;
- max = one ? index + 1 : options.length;
- for ( ; i < max; i++ ) {
- option = options[ i ];
-
- // Don't return options that are disabled or in a disabled optgroup
- if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
- (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
- if ( one && !values.length && options.length ) {
- return jQuery( options[ index ] ).val();
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var values = jQuery.makeArray( value );
-
- jQuery(elem).find("option").each(function() {
- this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
- });
-
- if ( !values.length ) {
- elem.selectedIndex = -1;
- }
- return values;
- }
- }
- },
-
- attrFn: {
- val: true,
- css: true,
- html: true,
- text: true,
- data: true,
- width: true,
- height: true,
- offset: true
- },
-
- attr: function( elem, name, value, pass ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- // don't get/set attributes on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- if ( pass && name in jQuery.attrFn ) {
- return jQuery( elem )[ name ]( value );
- }
-
- // Fallback to prop when attributes are not supported
- if ( typeof elem.getAttribute === "undefined" ) {
- return jQuery.prop( elem, name, value );
- }
-
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- // All attributes are lowercase
- // Grab necessary hook if one is defined
- if ( notxml ) {
- name = name.toLowerCase();
- hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
- }
-
- if ( value !== undefined ) {
-
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
- return;
-
- } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- elem.setAttribute( name, "" + value );
- return value;
- }
-
- } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
-
- ret = elem.getAttribute( name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret === null ?
- undefined :
- ret;
- }
- },
-
- removeAttr: function( elem, value ) {
- var propName, attrNames, name, l, isBool,
- i = 0;
-
- if ( value && elem.nodeType === 1 ) {
- attrNames = value.toLowerCase().split( rspace );
- l = attrNames.length;
-
- for ( ; i < l; i++ ) {
- name = attrNames[ i ];
-
- if ( name ) {
- propName = jQuery.propFix[ name ] || name;
- isBool = rboolean.test( name );
-
- // See #9699 for explanation of this approach (setting first, then removal)
- // Do not do this for boolean attributes (see #10870)
- if ( !isBool ) {
- jQuery.attr( elem, name, "" );
- }
- elem.removeAttribute( getSetAttribute ? name : propName );
-
- // Set corresponding property to false for boolean attributes
- if ( isBool && propName in elem ) {
- elem[ propName ] = false;
- }
- }
- }
- }
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- // We can't allow the type property to be changed (since it causes problems in IE)
- if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
- jQuery.error( "type property can't be changed" );
- } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
- // Setting the type on a radio button after the value resets the value in IE6-9
- // Reset value to it's default in case type is set after value
- // This is for element creation
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- },
- // Use the value property for back compat
- // Use the nodeHook for button elements in IE6/7 (#1954)
- value: {
- get: function( elem, name ) {
- if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
- return nodeHook.get( elem, name );
- }
- return name in elem ?
- elem.value :
- null;
- },
- set: function( elem, value, name ) {
- if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
- return nodeHook.set( elem, value, name );
- }
- // Does not return so that setAttribute is also used
- elem.value = value;
- }
- }
- },
-
- propFix: {
- tabindex: "tabIndex",
- readonly: "readOnly",
- "for": "htmlFor",
- "class": "className",
- maxlength: "maxLength",
- cellspacing: "cellSpacing",
- cellpadding: "cellPadding",
- rowspan: "rowSpan",
- colspan: "colSpan",
- usemap: "useMap",
- frameborder: "frameBorder",
- contenteditable: "contentEditable"
- },
-
- prop: function( elem, name, value ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- // don't get/set properties on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- if ( notxml ) {
- // Fix name and attach hooks
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
-
- if ( value !== undefined ) {
- if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- return ( elem[ name ] = value );
- }
-
- } else {
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
- return elem[ name ];
- }
- }
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- var attributeNode = elem.getAttributeNode("tabindex");
-
- return attributeNode && attributeNode.specified ?
- parseInt( attributeNode.value, 10 ) :
- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
- 0 :
- undefined;
- }
- }
- }
-});
-
-// Add the tabIndex propHook to attrHooks for back-compat (different case is intentional)
-jQuery.attrHooks.tabindex = jQuery.propHooks.tabIndex;
-
-// Hook for boolean attributes
-boolHook = {
- get: function( elem, name ) {
- // Align boolean attributes with corresponding properties
- // Fall back to attribute presence where some booleans are not supported
- var attrNode,
- property = jQuery.prop( elem, name );
- return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
- name.toLowerCase() :
- undefined;
- },
- set: function( elem, value, name ) {
- var propName;
- if ( value === false ) {
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else {
- // value is true since we know at this point it's type boolean and not false
- // Set boolean attributes to the same name and set the DOM property
- propName = jQuery.propFix[ name ] || name;
- if ( propName in elem ) {
- // Only set the IDL specifically if it already exists on the element
- elem[ propName ] = true;
- }
-
- elem.setAttribute( name, name.toLowerCase() );
- }
- return name;
- }
-};
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
- fixSpecified = {
- name: true,
- id: true,
- coords: true
- };
-
- // Use this for any attribute in IE6/7
- // This fixes almost every IE6/7 issue
- nodeHook = jQuery.valHooks.button = {
- get: function( elem, name ) {
- var ret;
- ret = elem.getAttributeNode( name );
- return ret && ( fixSpecified[ name ] ? ret.nodeValue !== "" : ret.specified ) ?
- ret.nodeValue :
- undefined;
- },
- set: function( elem, value, name ) {
- // Set the existing or create a new attribute node
- var ret = elem.getAttributeNode( name );
- if ( !ret ) {
- ret = document.createAttribute( name );
- elem.setAttributeNode( ret );
- }
- return ( ret.nodeValue = value + "" );
- }
- };
-
- // Apply the nodeHook to tabindex
- jQuery.attrHooks.tabindex.set = nodeHook.set;
-
- // Set width and height to auto instead of 0 on empty string( Bug #8150 )
- // This is for removals
- jQuery.each([ "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
- set: function( elem, value ) {
- if ( value === "" ) {
- elem.setAttribute( name, "auto" );
- return value;
- }
- }
- });
- });
-
- // Set contenteditable to false on removals(#10429)
- // Setting to empty string throws an error as an invalid value
- jQuery.attrHooks.contenteditable = {
- get: nodeHook.get,
- set: function( elem, value, name ) {
- if ( value === "" ) {
- value = "false";
- }
- nodeHook.set( elem, value, name );
- }
- };
-}
-
-
-// Some attributes require a special call on IE
-if ( !jQuery.support.hrefNormalized ) {
- jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
- get: function( elem ) {
- var ret = elem.getAttribute( name, 2 );
- return ret === null ? undefined : ret;
- }
- });
- });
-}
-
-if ( !jQuery.support.style ) {
- jQuery.attrHooks.style = {
- get: function( elem ) {
- // Return undefined in the case of empty string
- // Normalize to lowercase since IE uppercases css property names
- return elem.style.cssText.toLowerCase() || undefined;
- },
- set: function( elem, value ) {
- return ( elem.style.cssText = "" + value );
- }
- };
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
- jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
- get: function( elem ) {
- var parent = elem.parentNode;
-
- if ( parent ) {
- parent.selectedIndex;
-
- // Make sure that it also works with optgroups, see #5701
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- return null;
- }
- });
-}
-
-// IE6/7 call enctype encoding
-if ( !jQuery.support.enctype ) {
- jQuery.propFix.enctype = "encoding";
-}
-
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
- jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- get: function( elem ) {
- // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
- return elem.getAttribute("value") === null ? "on" : elem.value;
- }
- };
- });
-}
-jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
- }
- }
- });
-});
-
-
-
-
-var rformElems = /^(?:textarea|input|select)$/i,
- rtypenamespace = /^([^\.]*)?(?:\.(.+))?$/,
- rhoverHack = /(?:^|\s)hover(\.\S+)?\b/,
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|contextmenu)|click/,
- rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
- rquickIs = /^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,
- quickParse = function( selector ) {
- var quick = rquickIs.exec( selector );
- if ( quick ) {
- // 0 1 2 3
- // [ _, tag, id, class ]
- quick[1] = ( quick[1] || "" ).toLowerCase();
- quick[3] = quick[3] && new RegExp( "(?:^|\\s)" + quick[3] + "(?:\\s|$)" );
- }
- return quick;
- },
- quickIs = function( elem, m ) {
- var attrs = elem.attributes || {};
- return (
- (!m[1] || elem.nodeName.toLowerCase() === m[1]) &&
- (!m[2] || (attrs.id || {}).value === m[2]) &&
- (!m[3] || m[3].test( (attrs[ "class" ] || {}).value ))
- );
- },
- hoverHack = function( events ) {
- return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
- };
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
- add: function( elem, types, handler, data, selector ) {
-
- var elemData, eventHandle, events,
- t, tns, type, namespaces, handleObj,
- handleObjIn, quick, handlers, special;
-
- // Don't attach events to noData or text/comment nodes (allow plain objects tho)
- if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- selector = handleObjIn.selector;
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- events = elemData.events;
- if ( !events ) {
- elemData.events = events = {};
- }
- eventHandle = elemData.handle;
- if ( !eventHandle ) {
- elemData.handle = eventHandle = function( e ) {
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
- jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
- undefined;
- };
- // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
- eventHandle.elem = elem;
- }
-
- // Handle multiple events separated by a space
- // jQuery(...).bind("mouseover mouseout", fn);
- types = jQuery.trim( hoverHack(types) ).split( " " );
- for ( t = 0; t < types.length; t++ ) {
-
- tns = rtypenamespace.exec( types[t] ) || [];
- type = tns[1];
- namespaces = ( tns[2] || "" ).split( "." ).sort();
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[ type ] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[ type ] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend({
- type: type,
- origType: tns[1],
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- quick: selector && quickParse( selector ),
- namespace: namespaces.join(".")
- }, handleObjIn );
-
- // Init the event handler queue if we're the first
- handlers = events[ type ];
- if ( !handlers ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener/attachEvent if the special events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
- // Bind the global event handler to the element
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
-
- } else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- // Nullify elem to prevent memory leaks in IE
- elem = null;
- },
-
- global: {},
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, selector, mappedTypes ) {
-
- var elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
- t, tns, type, origType, namespaces, origCount,
- j, events, special, handle, eventType, handleObj;
-
- if ( !elemData || !(events = elemData.events) ) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
- for ( t = 0; t < types.length; t++ ) {
- tns = rtypenamespace.exec( types[t] ) || [];
- type = origType = tns[1];
- namespaces = tns[2];
-
- // Unbind all events (on this namespace, if provided) for the element
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
- type = ( selector? special.delegateType : special.bindType ) || type;
- eventType = events[ type ] || [];
- origCount = eventType.length;
- namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
-
- // Remove matching events
- for ( j = 0; j < eventType.length; j++ ) {
- handleObj = eventType[ j ];
-
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
- eventType.splice( j--, 1 );
-
- if ( handleObj.selector ) {
- eventType.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if ( eventType.length === 0 && origCount !== eventType.length ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- handle = elemData.handle;
- if ( handle ) {
- handle.elem = null;
- }
-
- // removeData also checks for emptiness and clears the expando if empty
- // so use it instead of delete
- jQuery.removeData( elem, [ "events", "handle" ], true );
- }
- },
-
- // Events that are safe to short-circuit if no handlers are attached.
- // Native DOM events should not be added, they may have inline handlers.
- customEvent: {
- "getData": true,
- "setData": true,
- "changeData": true
- },
-
- trigger: function( event, data, elem, onlyHandlers ) {
- // Don't do events on text and comment nodes
- if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
- return;
- }
-
- // Event object or event type
- var type = event.type || event,
- namespaces = [],
- cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType;
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
-
- if ( type.indexOf( "!" ) >= 0 ) {
- // Exclusive events trigger only for the exact event (no namespaces)
- type = type.slice(0, -1);
- exclusive = true;
- }
-
- if ( type.indexOf( "." ) >= 0 ) {
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split(".");
- type = namespaces.shift();
- namespaces.sort();
- }
-
- if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
- // No jQuery handlers for this event type, and it can't have inline handlers
- return;
- }
-
- // Caller can pass in an Event, Object, or just an event type string
- event = typeof event === "object" ?
- // jQuery.Event object
- event[ jQuery.expando ] ? event :
- // Object literal
- new jQuery.Event( type, event ) :
- // Just the event type (string)
- new jQuery.Event( type );
-
- event.type = type;
- event.isTrigger = true;
- event.exclusive = exclusive;
- event.namespace = namespaces.join( "." );
- event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)") : null;
- ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
-
- // Handle a global trigger
- if ( !elem ) {
-
- // TODO: Stop taunting the data cache; remove global events and always attach to document
- cache = jQuery.cache;
- for ( i in cache ) {
- if ( cache[ i ].events && cache[ i ].events[ type ] ) {
- jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
- }
- }
- return;
- }
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data != null ? jQuery.makeArray( data ) : [];
- data.unshift( event );
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[ type ] || {};
- if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- eventPath = [[ elem, special.bindType || type ]];
- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
- bubbleType = special.delegateType || type;
- cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
- old = null;
- for ( ; cur; cur = cur.parentNode ) {
- eventPath.push([ cur, bubbleType ]);
- old = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( old && old === elem.ownerDocument ) {
- eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
- }
- }
-
- // Fire handlers on the event path
- for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
-
- cur = eventPath[i][0];
- event.type = eventPath[i][1];
-
- handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
- if ( handle ) {
- handle.apply( cur, data );
- }
- // Note that this is a bare JS function and not a jQuery handler
- handle = ontype && cur[ ontype ];
- if ( handle && jQuery.acceptData( cur ) && handle.apply( cur, data ) === false ) {
- event.preventDefault();
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
- if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
- !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name name as the event.
- // Can't use an .isFunction() check here because IE6/7 fails that test.
- // Don't do default actions on window, that's where global variables be (#6170)
- // IE<9 dies on focus/blur to hidden element (#1486)
- if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- old = elem[ ontype ];
-
- if ( old ) {
- elem[ ontype ] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
- elem[ type ]();
- jQuery.event.triggered = undefined;
-
- if ( old ) {
- elem[ ontype ] = old;
- }
- }
- }
- }
-
- return event.result;
- },
-
- dispatch: function( event ) {
-
- // Make a writable jQuery.Event from the native event object
- event = jQuery.event.fix( event || window.event );
-
- var handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
- delegateCount = handlers.delegateCount,
- args = [].slice.call( arguments, 0 ),
- run_all = !event.exclusive && !event.namespace,
- special = jQuery.event.special[ event.type ] || {},
- handlerQueue = [],
- i, j, cur, jqcur, ret, selMatch, matched, matches, handleObj, sel, related;
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[0] = event;
- event.delegateTarget = this;
-
- // Call the preDispatch hook for the mapped type, and let it bail if desired
- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
- return;
- }
-
- // Determine handlers that should run if there are delegated events
- // Avoid non-left-click bubbling in Firefox (#3861)
- if ( delegateCount && !(event.button && event.type === "click") ) {
-
- // Pregenerate a single jQuery object for reuse with .is()
- jqcur = jQuery(this);
- jqcur.context = this.ownerDocument || this;
-
- for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
-
- // Don't process events on disabled elements (#6911, #8165)
- if ( cur.disabled !== true ) {
- selMatch = {};
- matches = [];
- jqcur[0] = cur;
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
- sel = handleObj.selector;
-
- if ( selMatch[ sel ] === undefined ) {
- selMatch[ sel ] = (
- handleObj.quick ? quickIs( cur, handleObj.quick ) : jqcur.is( sel )
- );
- }
- if ( selMatch[ sel ] ) {
- matches.push( handleObj );
- }
- }
- if ( matches.length ) {
- handlerQueue.push({ elem: cur, matches: matches });
- }
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- if ( handlers.length > delegateCount ) {
- handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
- }
-
- // Run delegates first; they may want to stop propagation beneath us
- for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
- matched = handlerQueue[ i ];
- event.currentTarget = matched.elem;
-
- for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
- handleObj = matched.matches[ j ];
-
- // Triggered event must either 1) be non-exclusive and have no namespace, or
- // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
- if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
-
- event.data = handleObj.data;
- event.handleObj = handleObj;
-
- ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
- .apply( matched.elem, args );
-
- if ( ret !== undefined ) {
- event.result = ret;
- if ( ret === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- // Call the postDispatch hook for the mapped type
- if ( special.postDispatch ) {
- special.postDispatch.call( this, event );
- }
-
- return event.result;
- },
-
- // Includes some event props shared by KeyEvent and MouseEvent
- // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
- props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
- fixHooks: {},
-
- keyHooks: {
- props: "char charCode key keyCode".split(" "),
- filter: function( event, original ) {
-
- // Add which for key events
- if ( event.which == null ) {
- event.which = original.charCode != null ? original.charCode : original.keyCode;
- }
-
- return event;
- }
- },
-
- mouseHooks: {
- props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
- filter: function( event, original ) {
- var eventDoc, doc, body,
- button = original.button,
- fromElement = original.fromElement;
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && original.clientX != null ) {
- eventDoc = event.target.ownerDocument || document;
- doc = eventDoc.documentElement;
- body = eventDoc.body;
-
- event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
- event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
- }
-
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && fromElement ) {
- event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if ( !event.which && button !== undefined ) {
- event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
- }
-
- return event;
- }
- },
-
- fix: function( event ) {
- if ( event[ jQuery.expando ] ) {
- return event;
- }
-
- // Create a writable copy of the event object and normalize some properties
- var i, prop,
- originalEvent = event,
- fixHook = jQuery.event.fixHooks[ event.type ] || {},
- copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
- event = jQuery.Event( originalEvent );
-
- for ( i = copy.length; i; ) {
- prop = copy[ --i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
- if ( !event.target ) {
- event.target = originalEvent.srcElement || document;
- }
-
- // Target should not be a text node (#504, Safari)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- // For mouse/key events; add metaKey if it's not there (#3368, IE6/7/8)
- if ( event.metaKey === undefined ) {
- event.metaKey = event.ctrlKey;
- }
-
- return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
- },
-
- special: {
- ready: {
- // Make sure the ready event is setup
- setup: jQuery.bindReady
- },
-
- load: {
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
-
- focus: {
- delegateType: "focusin"
- },
- blur: {
- delegateType: "focusout"
- },
-
- beforeunload: {
- setup: function( data, namespaces, eventHandle ) {
- // We only want to do this special case on windows
- if ( jQuery.isWindow( this ) ) {
- this.onbeforeunload = eventHandle;
- }
- },
-
- teardown: function( namespaces, eventHandle ) {
- if ( this.onbeforeunload === eventHandle ) {
- this.onbeforeunload = null;
- }
- }
- }
- },
-
- simulate: function( type, elem, event, bubble ) {
- // Piggyback on a donor event to simulate a different one.
- // Fake originalEvent to avoid donor's stopPropagation, but if the
- // simulated event prevents default then we do the same on the donor.
- var e = jQuery.extend(
- new jQuery.Event(),
- event,
- { type: type,
- isSimulated: true,
- originalEvent: {}
- }
- );
- if ( bubble ) {
- jQuery.event.trigger( e, null, elem );
- } else {
- jQuery.event.dispatch.call( elem, e );
- }
- if ( e.isDefaultPrevented() ) {
- event.preventDefault();
- }
- }
-};
-
-// Some plugins are using, but it's undocumented/deprecated and will be removed.
-// The 1.7 special event interface should provide all the hooks needed now.
-jQuery.event.handle = jQuery.event.dispatch;
-
-jQuery.removeEvent = document.removeEventListener ?
- function( elem, type, handle ) {
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle, false );
- }
- } :
- function( elem, type, handle ) {
- if ( elem.detachEvent ) {
- elem.detachEvent( "on" + type, handle );
- }
- };
-
-jQuery.Event = function( src, props ) {
- // Allow instantiation without the 'new' keyword
- if ( !(this instanceof jQuery.Event) ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
- src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-function returnFalse() {
- return false;
-}
-function returnTrue() {
- return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- preventDefault: function() {
- this.isDefaultPrevented = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
-
- // if preventDefault exists run it on the original event
- if ( e.preventDefault ) {
- e.preventDefault();
-
- // otherwise set the returnValue property of the original event to false (IE)
- } else {
- e.returnValue = false;
- }
- },
- stopPropagation: function() {
- this.isPropagationStopped = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
- // if stopPropagation exists run it on the original event
- if ( e.stopPropagation ) {
- e.stopPropagation();
- }
- // otherwise set the cancelBubble property of the original event to true (IE)
- e.cancelBubble = true;
- },
- stopImmediatePropagation: function() {
- this.isImmediatePropagationStopped = returnTrue;
- this.stopPropagation();
- },
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function( event ) {
- var target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj,
- selector = handleObj.selector,
- ret;
-
- // For mousenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply( this, arguments );
- event.type = fix;
- }
- return ret;
- }
- };
-});
-
-// IE submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
- jQuery.event.special.submit = {
- setup: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Lazy-add a submit handler when a descendant form may potentially be submitted
- jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
- // Node name check avoids a VML-related crash in IE (#9807)
- var elem = e.target,
- form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
- if ( form && !form._submit_attached ) {
- jQuery.event.add( form, "submit._submit", function( event ) {
- event._submit_bubble = true;
- });
- form._submit_attached = true;
- }
- });
- // return undefined since we don't need an event listener
- },
-
- postDispatch: function( event ) {
- // If form was submitted by the user, bubble the event up the tree
- if ( event._submit_bubble ) {
- delete event._submit_bubble;
- if ( this.parentNode && !event.isTrigger ) {
- jQuery.event.simulate( "submit", this.parentNode, event, true );
- }
- }
- },
-
- teardown: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
- jQuery.event.remove( this, "._submit" );
- }
- };
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !jQuery.support.changeBubbles ) {
-
- jQuery.event.special.change = {
-
- setup: function() {
-
- if ( rformElems.test( this.nodeName ) ) {
- // IE doesn't fire change on a check/radio until blur; trigger it on click
- // after a propertychange. Eat the blur-change in special.change.handle.
- // This still fires onchange a second time for check/radio after blur.
- if ( this.type === "checkbox" || this.type === "radio" ) {
- jQuery.event.add( this, "propertychange._change", function( event ) {
- if ( event.originalEvent.propertyName === "checked" ) {
- this._just_changed = true;
- }
- });
- jQuery.event.add( this, "click._change", function( event ) {
- if ( this._just_changed && !event.isTrigger ) {
- this._just_changed = false;
- jQuery.event.simulate( "change", this, event, true );
- }
- });
- }
- return false;
- }
- // Delegated event; lazy-add a change handler on descendant inputs
- jQuery.event.add( this, "beforeactivate._change", function( e ) {
- var elem = e.target;
-
- if ( rformElems.test( elem.nodeName ) && !elem._change_attached ) {
- jQuery.event.add( elem, "change._change", function( event ) {
- if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
- jQuery.event.simulate( "change", this.parentNode, event, true );
- }
- });
- elem._change_attached = true;
- }
- });
- },
-
- handle: function( event ) {
- var elem = event.target;
-
- // Swallow native change events from checkbox/radio, we already triggered them above
- if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
- return event.handleObj.handler.apply( this, arguments );
- }
- },
-
- teardown: function() {
- jQuery.event.remove( this, "._change" );
-
- return rformElems.test( this.nodeName );
- }
- };
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler while someone wants focusin/focusout
- var attaches = 0,
- handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
- };
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- if ( attaches++ === 0 ) {
- document.addEventListener( orig, handler, true );
- }
- },
- teardown: function() {
- if ( --attaches === 0 ) {
- document.removeEventListener( orig, handler, true );
- }
- }
- };
- });
-}
-
-jQuery.fn.extend({
-
- on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
- var origFn, type;
-
- // Types can be a map of types/handlers
- if ( typeof types === "object" ) {
- // ( types-Object, selector, data )
- if ( typeof selector !== "string" ) { // && selector != null
- // ( types-Object, data )
- data = data || selector;
- selector = undefined;
- }
- for ( type in types ) {
- this.on( type, selector, data, types[ type ], one );
- }
- return this;
- }
-
- if ( data == null && fn == null ) {
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return this;
- }
-
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
- // Can use an empty set, since event contains the info
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return this.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- });
- },
- one: function( types, selector, data, fn ) {
- return this.on( types, selector, data, fn, 1 );
- },
- off: function( types, selector, fn ) {
- if ( types && types.preventDefault && types.handleObj ) {
- // ( event ) dispatched jQuery.Event
- var handleObj = types.handleObj;
- jQuery( types.delegateTarget ).off(
- handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
- handleObj.selector,
- handleObj.handler
- );
- return this;
- }
- if ( typeof types === "object" ) {
- // ( types-object [, selector] )
- for ( var type in types ) {
- this.off( type, selector, types[ type ] );
- }
- return this;
- }
- if ( selector === false || typeof selector === "function" ) {
- // ( types [, fn] )
- fn = selector;
- selector = undefined;
- }
- if ( fn === false ) {
- fn = returnFalse;
- }
- return this.each(function() {
- jQuery.event.remove( this, types, fn, selector );
- });
- },
-
- bind: function( types, data, fn ) {
- return this.on( types, null, data, fn );
- },
- unbind: function( types, fn ) {
- return this.off( types, null, fn );
- },
-
- live: function( types, data, fn ) {
- jQuery( this.context ).on( types, this.selector, data, fn );
- return this;
- },
- die: function( types, fn ) {
- jQuery( this.context ).off( types, this.selector || "**", fn );
- return this;
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.on( types, selector, data, fn );
- },
- undelegate: function( selector, types, fn ) {
- // ( namespace ) or ( selector, types [, fn] )
- return arguments.length == 1? this.off( selector, "**" ) : this.off( types, selector, fn );
- },
-
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
- triggerHandler: function( type, data ) {
- if ( this[0] ) {
- return jQuery.event.trigger( type, data, this[0], true );
- }
- },
-
- toggle: function( fn ) {
- // Save reference to arguments for access in closure
- var args = arguments,
- guid = fn.guid || jQuery.guid++,
- i = 0,
- toggler = function( event ) {
- // Figure out which function to execute
- var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
- jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
- // Make sure that clicks stop
- event.preventDefault();
-
- // and execute the function
- return args[ lastToggle ].apply( this, arguments ) || false;
- };
-
- // link all the functions, so any of them can unbind this click handler
- toggler.guid = guid;
- while ( i < args.length ) {
- args[ i++ ].guid = guid;
- }
-
- return this.click( toggler );
- },
-
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- }
-});
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- if ( fn == null ) {
- fn = data;
- data = null;
- }
-
- return arguments.length > 0 ?
- this.on( name, null, data, fn ) :
- this.trigger( name );
- };
-
- if ( jQuery.attrFn ) {
- jQuery.attrFn[ name ] = true;
- }
-
- if ( rkeyEvent.test( name ) ) {
- jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
- }
-
- if ( rmouseEvent.test( name ) ) {
- jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
- }
-});
-
-
-
-/*!
- * Sizzle CSS Selector Engine
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- * More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
- expando = "sizcache" + (Math.random() + '').replace('.', ''),
- done = 0,
- toString = Object.prototype.toString,
- hasDuplicate = false,
- baseHasDuplicate = true,
- rBackslash = /\\/g,
- rReturn = /\r\n/g,
- rNonWord = /\W/;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-// Thus far that includes Google Chrome.
-[0, 0].sort(function() {
- baseHasDuplicate = false;
- return 0;
-});
-
-var Sizzle = function( selector, context, results, seed ) {
- results = results || [];
- context = context || document;
-
- var origContext = context;
-
- if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
- return [];
- }
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- var m, set, checkSet, extra, ret, cur, pop, i,
- prune = true,
- contextXML = Sizzle.isXML( context ),
- parts = [],
- soFar = selector;
-
- // Reset the position of the chunker regexp (start from head)
- do {
- chunker.exec( "" );
- m = chunker.exec( soFar );
-
- if ( m ) {
- soFar = m[3];
-
- parts.push( m[1] );
-
- if ( m[2] ) {
- extra = m[3];
- break;
- }
- }
- } while ( m );
-
- if ( parts.length > 1 && origPOS.exec( selector ) ) {
-
- if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
- set = posProcess( parts[0] + parts[1], context, seed );
-
- } else {
- set = Expr.relative[ parts[0] ] ?
- [ context ] :
- Sizzle( parts.shift(), context );
-
- while ( parts.length ) {
- selector = parts.shift();
-
- if ( Expr.relative[ selector ] ) {
- selector += parts.shift();
- }
-
- set = posProcess( selector, set, seed );
- }
- }
-
- } else {
- // Take a shortcut and set the context if the root selector is an ID
- // (but not if it'll be faster if the inner selector is an ID)
- if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
- Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-
- ret = Sizzle.find( parts.shift(), context, contextXML );
- context = ret.expr ?
- Sizzle.filter( ret.expr, ret.set )[0] :
- ret.set[0];
- }
-
- if ( context ) {
- ret = seed ?
- { expr: parts.pop(), set: makeArray(seed) } :
- Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-
- set = ret.expr ?
- Sizzle.filter( ret.expr, ret.set ) :
- ret.set;
-
- if ( parts.length > 0 ) {
- checkSet = makeArray( set );
-
- } else {
- prune = false;
- }
-
- while ( parts.length ) {
- cur = parts.pop();
- pop = cur;
-
- if ( !Expr.relative[ cur ] ) {
- cur = "";
- } else {
- pop = parts.pop();
- }
-
- if ( pop == null ) {
- pop = context;
- }
-
- Expr.relative[ cur ]( checkSet, pop, contextXML );
- }
-
- } else {
- checkSet = parts = [];
- }
- }
-
- if ( !checkSet ) {
- checkSet = set;
- }
-
- if ( !checkSet ) {
- Sizzle.error( cur || selector );
- }
-
- if ( toString.call(checkSet) === "[object Array]" ) {
- if ( !prune ) {
- results.push.apply( results, checkSet );
-
- } else if ( context && context.nodeType === 1 ) {
- for ( i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
- results.push( set[i] );
- }
- }
-
- } else {
- for ( i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
- results.push( set[i] );
- }
- }
- }
-
- } else {
- makeArray( checkSet, results );
- }
-
- if ( extra ) {
- Sizzle( extra, origContext, results, seed );
- Sizzle.uniqueSort( results );
- }
-
- return results;
-};
-
-Sizzle.uniqueSort = function( results ) {
- if ( sortOrder ) {
- hasDuplicate = baseHasDuplicate;
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- for ( var i = 1; i < results.length; i++ ) {
- if ( results[i] === results[ i - 1 ] ) {
- results.splice( i--, 1 );
- }
- }
- }
- }
-
- return results;
-};
-
-Sizzle.matches = function( expr, set ) {
- return Sizzle( expr, null, null, set );
-};
-
-Sizzle.matchesSelector = function( node, expr ) {
- return Sizzle( expr, null, null, [node] ).length > 0;
-};
-
-Sizzle.find = function( expr, context, isXML ) {
- var set, i, len, match, type, left;
-
- if ( !expr ) {
- return [];
- }
-
- for ( i = 0, len = Expr.order.length; i < len; i++ ) {
- type = Expr.order[i];
-
- if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
- left = match[1];
- match.splice( 1, 1 );
-
- if ( left.substr( left.length - 1 ) !== "\\" ) {
- match[1] = (match[1] || "").replace( rBackslash, "" );
- set = Expr.find[ type ]( match, context, isXML );
-
- if ( set != null ) {
- expr = expr.replace( Expr.match[ type ], "" );
- break;
- }
- }
- }
- }
-
- if ( !set ) {
- set = typeof context.getElementsByTagName !== "undefined" ?
- context.getElementsByTagName( "*" ) :
- [];
- }
-
- return { set: set, expr: expr };
-};
-
-Sizzle.filter = function( expr, set, inplace, not ) {
- var match, anyFound,
- type, found, item, filter, left,
- i, pass,
- old = expr,
- result = [],
- curLoop = set,
- isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
- while ( expr && set.length ) {
- for ( type in Expr.filter ) {
- if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
- filter = Expr.filter[ type ];
- left = match[1];
-
- anyFound = false;
-
- match.splice(1,1);
-
- if ( left.substr( left.length - 1 ) === "\\" ) {
- continue;
- }
-
- if ( curLoop === result ) {
- result = [];
- }
-
- if ( Expr.preFilter[ type ] ) {
- match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
- if ( !match ) {
- anyFound = found = true;
-
- } else if ( match === true ) {
- continue;
- }
- }
-
- if ( match ) {
- for ( i = 0; (item = curLoop[i]) != null; i++ ) {
- if ( item ) {
- found = filter( item, match, i, curLoop );
- pass = not ^ found;
-
- if ( inplace && found != null ) {
- if ( pass ) {
- anyFound = true;
-
- } else {
- curLoop[i] = false;
- }
-
- } else if ( pass ) {
- result.push( item );
- anyFound = true;
- }
- }
- }
- }
-
- if ( found !== undefined ) {
- if ( !inplace ) {
- curLoop = result;
- }
-
- expr = expr.replace( Expr.match[ type ], "" );
-
- if ( !anyFound ) {
- return [];
- }
-
- break;
- }
- }
- }
-
- // Improper expression
- if ( expr === old ) {
- if ( anyFound == null ) {
- Sizzle.error( expr );
-
- } else {
- break;
- }
- }
-
- old = expr;
- }
-
- return curLoop;
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Utility function for retreiving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-var getText = Sizzle.getText = function( elem ) {
- var i, node,
- nodeType = elem.nodeType,
- ret = "";
-
- if ( nodeType ) {
- if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
- // Use textContent || innerText for elements
- if ( typeof elem.textContent === 'string' ) {
- return elem.textContent;
- } else if ( typeof elem.innerText === 'string' ) {
- // Replace IE's carriage returns
- return elem.innerText.replace( rReturn, '' );
- } else {
- // Traverse it's children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
- } else {
-
- // If no nodeType, this is expected to be an array
- for ( i = 0; (node = elem[i]); i++ ) {
- // Do not traverse comment nodes
- if ( node.nodeType !== 8 ) {
- ret += getText( node );
- }
- }
- }
- return ret;
-};
-
-var Expr = Sizzle.selectors = {
- order: [ "ID", "NAME", "TAG" ],
-
- match: {
- ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
- CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
- NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
- ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
- TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
- CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
- POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
- PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
- },
-
- leftMatch: {},
-
- attrMap: {
- "class": "className",
- "for": "htmlFor"
- },
-
- attrHandle: {
- href: function( elem ) {
- return elem.getAttribute( "href" );
- },
- type: function( elem ) {
- return elem.getAttribute( "type" );
- }
- },
-
- relative: {
- "+": function(checkSet, part){
- var isPartStr = typeof part === "string",
- isTag = isPartStr && !rNonWord.test( part ),
- isPartStrNotTag = isPartStr && !isTag;
-
- if ( isTag ) {
- part = part.toLowerCase();
- }
-
- for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
- if ( (elem = checkSet[i]) ) {
- while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
- checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
- elem || false :
- elem === part;
- }
- }
-
- if ( isPartStrNotTag ) {
- Sizzle.filter( part, checkSet, true );
- }
- },
-
- ">": function( checkSet, part ) {
- var elem,
- isPartStr = typeof part === "string",
- i = 0,
- l = checkSet.length;
-
- if ( isPartStr && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
-
- for ( ; i < l; i++ ) {
- elem = checkSet[i];
-
- if ( elem ) {
- var parent = elem.parentNode;
- checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
- }
- }
-
- } else {
- for ( ; i < l; i++ ) {
- elem = checkSet[i];
-
- if ( elem ) {
- checkSet[i] = isPartStr ?
- elem.parentNode :
- elem.parentNode === part;
- }
- }
-
- if ( isPartStr ) {
- Sizzle.filter( part, checkSet, true );
- }
- }
- },
-
- "": function(checkSet, part, isXML){
- var nodeCheck,
- doneName = done++,
- checkFn = dirCheck;
-
- if ( typeof part === "string" && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
- nodeCheck = part;
- checkFn = dirNodeCheck;
- }
-
- checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
- },
-
- "~": function( checkSet, part, isXML ) {
- var nodeCheck,
- doneName = done++,
- checkFn = dirCheck;
-
- if ( typeof part === "string" && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
- nodeCheck = part;
- checkFn = dirNodeCheck;
- }
-
- checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
- }
- },
-
- find: {
- ID: function( match, context, isXML ) {
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- return m && m.parentNode ? [m] : [];
- }
- },
-
- NAME: function( match, context ) {
- if ( typeof context.getElementsByName !== "undefined" ) {
- var ret = [],
- results = context.getElementsByName( match[1] );
-
- for ( var i = 0, l = results.length; i < l; i++ ) {
- if ( results[i].getAttribute("name") === match[1] ) {
- ret.push( results[i] );
- }
- }
-
- return ret.length === 0 ? null : ret;
- }
- },
-
- TAG: function( match, context ) {
- if ( typeof context.getElementsByTagName !== "undefined" ) {
- return context.getElementsByTagName( match[1] );
- }
- }
- },
- preFilter: {
- CLASS: function( match, curLoop, inplace, result, not, isXML ) {
- match = " " + match[1].replace( rBackslash, "" ) + " ";
-
- if ( isXML ) {
- return match;
- }
-
- for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
- if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
- if ( !inplace ) {
- result.push( elem );
- }
-
- } else if ( inplace ) {
- curLoop[i] = false;
- }
- }
- }
-
- return false;
- },
-
- ID: function( match ) {
- return match[1].replace( rBackslash, "" );
- },
-
- TAG: function( match, curLoop ) {
- return match[1].replace( rBackslash, "" ).toLowerCase();
- },
-
- CHILD: function( match ) {
- if ( match[1] === "nth" ) {
- if ( !match[2] ) {
- Sizzle.error( match[0] );
- }
-
- match[2] = match[2].replace(/^\+|\s*/g, '');
-
- // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
- var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
- match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
- !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
- // calculate the numbers (first)n+(last) including if they are negative
- match[2] = (test[1] + (test[2] || 1)) - 0;
- match[3] = test[3] - 0;
- }
- else if ( match[2] ) {
- Sizzle.error( match[0] );
- }
-
- // TODO: Move to normal caching system
- match[0] = done++;
-
- return match;
- },
-
- ATTR: function( match, curLoop, inplace, result, not, isXML ) {
- var name = match[1] = match[1].replace( rBackslash, "" );
-
- if ( !isXML && Expr.attrMap[name] ) {
- match[1] = Expr.attrMap[name];
- }
-
- // Handle if an un-quoted value was used
- match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
-
- if ( match[2] === "~=" ) {
- match[4] = " " + match[4] + " ";
- }
-
- return match;
- },
-
- PSEUDO: function( match, curLoop, inplace, result, not ) {
- if ( match[1] === "not" ) {
- // If we're dealing with a complex expression, or a simple one
- if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
- match[3] = Sizzle(match[3], null, null, curLoop);
-
- } else {
- var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-
- if ( !inplace ) {
- result.push.apply( result, ret );
- }
-
- return false;
- }
-
- } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
- return true;
- }
-
- return match;
- },
-
- POS: function( match ) {
- match.unshift( true );
-
- return match;
- }
- },
-
- filters: {
- enabled: function( elem ) {
- return elem.disabled === false && elem.type !== "hidden";
- },
-
- disabled: function( elem ) {
- return elem.disabled === true;
- },
-
- checked: function( elem ) {
- return elem.checked === true;
- },
-
- selected: function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- parent: function( elem ) {
- return !!elem.firstChild;
- },
-
- empty: function( elem ) {
- return !elem.firstChild;
- },
-
- has: function( elem, i, match ) {
- return !!Sizzle( match[3], elem ).length;
- },
-
- header: function( elem ) {
- return (/h\d/i).test( elem.nodeName );
- },
-
- text: function( elem ) {
- var attr = elem.getAttribute( "type" ), type = elem.type;
- // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
- // use getAttribute instead to test this case
- return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
- },
-
- radio: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
- },
-
- checkbox: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
- },
-
- file: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
- },
-
- password: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
- },
-
- submit: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && "submit" === elem.type;
- },
-
- image: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
- },
-
- reset: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && "reset" === elem.type;
- },
-
- button: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && "button" === elem.type || name === "button";
- },
-
- input: function( elem ) {
- return (/input|select|textarea|button/i).test( elem.nodeName );
- },
-
- focus: function( elem ) {
- return elem === elem.ownerDocument.activeElement;
- }
- },
- setFilters: {
- first: function( elem, i ) {
- return i === 0;
- },
-
- last: function( elem, i, match, array ) {
- return i === array.length - 1;
- },
-
- even: function( elem, i ) {
- return i % 2 === 0;
- },
-
- odd: function( elem, i ) {
- return i % 2 === 1;
- },
-
- lt: function( elem, i, match ) {
- return i < match[3] - 0;
- },
-
- gt: function( elem, i, match ) {
- return i > match[3] - 0;
- },
-
- nth: function( elem, i, match ) {
- return match[3] - 0 === i;
- },
-
- eq: function( elem, i, match ) {
- return match[3] - 0 === i;
- }
- },
- filter: {
- PSEUDO: function( elem, match, i, array ) {
- var name = match[1],
- filter = Expr.filters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
-
- } else if ( name === "contains" ) {
- return (elem.textContent || elem.innerText || getText([ elem ]) || "").indexOf(match[3]) >= 0;
-
- } else if ( name === "not" ) {
- var not = match[3];
-
- for ( var j = 0, l = not.length; j < l; j++ ) {
- if ( not[j] === elem ) {
- return false;
- }
- }
-
- return true;
-
- } else {
- Sizzle.error( name );
- }
- },
-
- CHILD: function( elem, match ) {
- var first, last,
- doneName, parent, cache,
- count, diff,
- type = match[1],
- node = elem;
-
- switch ( type ) {
- case "only":
- case "first":
- while ( (node = node.previousSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
-
- if ( type === "first" ) {
- return true;
- }
-
- node = elem;
-
- /* falls through */
- case "last":
- while ( (node = node.nextSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
-
- return true;
-
- case "nth":
- first = match[2];
- last = match[3];
-
- if ( first === 1 && last === 0 ) {
- return true;
- }
-
- doneName = match[0];
- parent = elem.parentNode;
-
- if ( parent && (parent[ expando ] !== doneName || !elem.nodeIndex) ) {
- count = 0;
-
- for ( node = parent.firstChild; node; node = node.nextSibling ) {
- if ( node.nodeType === 1 ) {
- node.nodeIndex = ++count;
- }
- }
-
- parent[ expando ] = doneName;
- }
-
- diff = elem.nodeIndex - last;
-
- if ( first === 0 ) {
- return diff === 0;
-
- } else {
- return ( diff % first === 0 && diff / first >= 0 );
- }
- }
- },
-
- ID: function( elem, match ) {
- return elem.nodeType === 1 && elem.getAttribute("id") === match;
- },
-
- TAG: function( elem, match ) {
- return (match === "*" && elem.nodeType === 1) || !!elem.nodeName && elem.nodeName.toLowerCase() === match;
- },
-
- CLASS: function( elem, match ) {
- return (" " + (elem.className || elem.getAttribute("class")) + " ")
- .indexOf( match ) > -1;
- },
-
- ATTR: function( elem, match ) {
- var name = match[1],
- result = Sizzle.attr ?
- Sizzle.attr( elem, name ) :
- Expr.attrHandle[ name ] ?
- Expr.attrHandle[ name ]( elem ) :
- elem[ name ] != null ?
- elem[ name ] :
- elem.getAttribute( name ),
- value = result + "",
- type = match[2],
- check = match[4];
-
- return result == null ?
- type === "!=" :
- !type && Sizzle.attr ?
- result != null :
- type === "=" ?
- value === check :
- type === "*=" ?
- value.indexOf(check) >= 0 :
- type === "~=" ?
- (" " + value + " ").indexOf(check) >= 0 :
- !check ?
- value && result !== false :
- type === "!=" ?
- value !== check :
- type === "^=" ?
- value.indexOf(check) === 0 :
- type === "$=" ?
- value.substr(value.length - check.length) === check :
- type === "|=" ?
- value === check || value.substr(0, check.length + 1) === check + "-" :
- false;
- },
-
- POS: function( elem, match, i, array ) {
- var name = match[2],
- filter = Expr.setFilters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
- }
- }
- }
-};
-
-var origPOS = Expr.match.POS,
- fescape = function(all, num){
- return "\\" + (num - 0 + 1);
- };
-
-for ( var type in Expr.match ) {
- Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
- Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
-}
-// Expose origPOS
-// "global" as in regardless of relation to brackets/parens
-Expr.match.globalPOS = origPOS;
-
-var makeArray = function( array, results ) {
- array = Array.prototype.slice.call( array, 0 );
-
- if ( results ) {
- results.push.apply( results, array );
- return results;
- }
-
- return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
- Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch( e ) {
- makeArray = function( array, results ) {
- var i = 0,
- ret = results || [];
-
- if ( toString.call(array) === "[object Array]" ) {
- Array.prototype.push.apply( ret, array );
-
- } else {
- if ( typeof array.length === "number" ) {
- for ( var l = array.length; i < l; i++ ) {
- ret.push( array[i] );
- }
-
- } else {
- for ( ; array[i]; i++ ) {
- ret.push( array[i] );
- }
- }
- }
-
- return ret;
- };
-}
-
-var sortOrder, siblingCheck;
-
-if ( document.documentElement.compareDocumentPosition ) {
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
- return a.compareDocumentPosition ? -1 : 1;
- }
-
- return a.compareDocumentPosition(b) & 4 ? -1 : 1;
- };
-
-} else {
- sortOrder = function( a, b ) {
- // The nodes are identical, we can exit early
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
-
- // Fallback to using sourceIndex (in IE) if it's available on both nodes
- } else if ( a.sourceIndex && b.sourceIndex ) {
- return a.sourceIndex - b.sourceIndex;
- }
-
- var al, bl,
- ap = [],
- bp = [],
- aup = a.parentNode,
- bup = b.parentNode,
- cur = aup;
-
- // If the nodes are siblings (or identical) we can do a quick check
- if ( aup === bup ) {
- return siblingCheck( a, b );
-
- // If no parents were found then the nodes are disconnected
- } else if ( !aup ) {
- return -1;
-
- } else if ( !bup ) {
- return 1;
- }
-
- // Otherwise they're somewhere else in the tree so we need
- // to build up a full list of the parentNodes for comparison
- while ( cur ) {
- ap.unshift( cur );
- cur = cur.parentNode;
- }
-
- cur = bup;
-
- while ( cur ) {
- bp.unshift( cur );
- cur = cur.parentNode;
- }
-
- al = ap.length;
- bl = bp.length;
-
- // Start walking down the tree looking for a discrepancy
- for ( var i = 0; i < al && i < bl; i++ ) {
- if ( ap[i] !== bp[i] ) {
- return siblingCheck( ap[i], bp[i] );
- }
- }
-
- // We ended someplace up the tree so do a sibling check
- return i === al ?
- siblingCheck( a, bp[i], -1 ) :
- siblingCheck( ap[i], b, 1 );
- };
-
- siblingCheck = function( a, b, ret ) {
- if ( a === b ) {
- return ret;
- }
-
- var cur = a.nextSibling;
-
- while ( cur ) {
- if ( cur === b ) {
- return -1;
- }
-
- cur = cur.nextSibling;
- }
-
- return 1;
- };
-}
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
- // We're going to inject a fake input element with a specified name
- var form = document.createElement("div"),
- id = "script" + (new Date()).getTime(),
- root = document.documentElement;
-
- form.innerHTML = "<a name='" + id + "'/>";
-
- // Inject it into the root element, check its status, and remove it quickly
- root.insertBefore( form, root.firstChild );
-
- // The workaround has to do additional checks after a getElementById
- // Which slows things down for other browsers (hence the branching)
- if ( document.getElementById( id ) ) {
- Expr.find.ID = function( match, context, isXML ) {
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
-
- return m ?
- m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
- [m] :
- undefined :
- [];
- }
- };
-
- Expr.filter.ID = function( elem, match ) {
- var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-
- return elem.nodeType === 1 && node && node.nodeValue === match;
- };
- }
-
- root.removeChild( form );
-
- // release memory in IE
- root = form = null;
-})();
-
-(function(){
- // Check to see if the browser returns only elements
- // when doing getElementsByTagName("*")
-
- // Create a fake element
- var div = document.createElement("div");
- div.appendChild( document.createComment("") );
-
- // Make sure no comments are found
- if ( div.getElementsByTagName("*").length > 0 ) {
- Expr.find.TAG = function( match, context ) {
- var results = context.getElementsByTagName( match[1] );
-
- // Filter out possible comments
- if ( match[1] === "*" ) {
- var tmp = [];
-
- for ( var i = 0; results[i]; i++ ) {
- if ( results[i].nodeType === 1 ) {
- tmp.push( results[i] );
- }
- }
-
- results = tmp;
- }
-
- return results;
- };
- }
-
- // Check to see if an attribute returns normalized href attributes
- div.innerHTML = "<a href='#'></a>";
-
- if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
- div.firstChild.getAttribute("href") !== "#" ) {
-
- Expr.attrHandle.href = function( elem ) {
- return elem.getAttribute( "href", 2 );
- };
- }
-
- // release memory in IE
- div = null;
-})();
-
-if ( document.querySelectorAll ) {
- (function(){
- var oldSizzle = Sizzle,
- div = document.createElement("div"),
- id = "__sizzle__";
-
- div.innerHTML = "<p class='TEST'></p>";
-
- // Safari can't handle uppercase or unicode characters when
- // in quirks mode.
- if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
- return;
- }
-
- Sizzle = function( query, context, extra, seed ) {
- context = context || document;
-
- // Only use querySelectorAll on non-XML documents
- // (ID selectors don't work in non-HTML documents)
- if ( !seed && !Sizzle.isXML(context) ) {
- // See if we find a selector to speed up
- var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
-
- if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
- // Speed-up: Sizzle("TAG")
- if ( match[1] ) {
- return makeArray( context.getElementsByTagName( query ), extra );
-
- // Speed-up: Sizzle(".CLASS")
- } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
- return makeArray( context.getElementsByClassName( match[2] ), extra );
- }
- }
-
- if ( context.nodeType === 9 ) {
- // Speed-up: Sizzle("body")
- // The body element only exists once, optimize finding it
- if ( query === "body" && context.body ) {
- return makeArray( [ context.body ], extra );
-
- // Speed-up: Sizzle("#ID")
- } else if ( match && match[3] ) {
- var elem = context.getElementById( match[3] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id === match[3] ) {
- return makeArray( [ elem ], extra );
- }
-
- } else {
- return makeArray( [], extra );
- }
- }
-
- try {
- return makeArray( context.querySelectorAll(query), extra );
- } catch(qsaError) {}
-
- // qSA works strangely on Element-rooted queries
- // We can work around this by specifying an extra ID on the root
- // and working up from there (Thanks to Andrew Dupont for the technique)
- // IE 8 doesn't work on object elements
- } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- var oldContext = context,
- old = context.getAttribute( "id" ),
- nid = old || id,
- hasParent = context.parentNode,
- relativeHierarchySelector = /^\s*[+~]/.test( query );
-
- if ( !old ) {
- context.setAttribute( "id", nid );
- } else {
- nid = nid.replace( /'/g, "\\$&" );
- }
- if ( relativeHierarchySelector && hasParent ) {
- context = context.parentNode;
- }
-
- try {
- if ( !relativeHierarchySelector || hasParent ) {
- return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
- }
-
- } catch(pseudoError) {
- } finally {
- if ( !old ) {
- oldContext.removeAttribute( "id" );
- }
- }
- }
- }
-
- return oldSizzle(query, context, extra, seed);
- };
-
- for ( var prop in oldSizzle ) {
- Sizzle[ prop ] = oldSizzle[ prop ];
- }
-
- // release memory in IE
- div = null;
- })();
-}
-
-(function(){
- var html = document.documentElement,
- matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
-
- if ( matches ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9 fails this)
- var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
- pseudoWorks = false;
-
- try {
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( document.documentElement, "[test!='']:sizzle" );
-
- } catch( pseudoError ) {
- pseudoWorks = true;
- }
-
- Sizzle.matchesSelector = function( node, expr ) {
- // Make sure that attribute selectors are quoted
- expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
- if ( !Sizzle.isXML( node ) ) {
- try {
- if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
- var ret = matches.call( node, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || !disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9, so check for that
- node.document && node.document.nodeType !== 11 ) {
- return ret;
- }
- }
- } catch(e) {}
- }
-
- return Sizzle(expr, null, null, [node]).length > 0;
- };
- }
-})();
-
-(function(){
- var div = document.createElement("div");
-
- div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
- // Opera can't find a second classname (in 9.6)
- // Also, make sure that getElementsByClassName actually exists
- if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
- return;
- }
-
- // Safari caches class attributes, doesn't catch changes (in 3.2)
- div.lastChild.className = "e";
-
- if ( div.getElementsByClassName("e").length === 1 ) {
- return;
- }
-
- Expr.order.splice(1, 0, "CLASS");
- Expr.find.CLASS = function( match, context, isXML ) {
- if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
- return context.getElementsByClassName(match[1]);
- }
- };
-
- // release memory in IE
- div = null;
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
-
- if ( elem ) {
- var match = false;
-
- elem = elem[dir];
-
- while ( elem ) {
- if ( elem[ expando ] === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 && !isXML ){
- elem[ expando ] = doneName;
- elem.sizset = i;
- }
-
- if ( elem.nodeName.toLowerCase() === cur ) {
- match = elem;
- break;
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
-
- if ( elem ) {
- var match = false;
-
- elem = elem[dir];
-
- while ( elem ) {
- if ( elem[ expando ] === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 ) {
- if ( !isXML ) {
- elem[ expando ] = doneName;
- elem.sizset = i;
- }
-
- if ( typeof cur !== "string" ) {
- if ( elem === cur ) {
- match = true;
- break;
- }
-
- } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
- match = elem;
- break;
- }
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-if ( document.documentElement.contains ) {
- Sizzle.contains = function( a, b ) {
- return a !== b && (a.contains ? a.contains(b) : true);
- };
-
-} else if ( document.documentElement.compareDocumentPosition ) {
- Sizzle.contains = function( a, b ) {
- return !!(a.compareDocumentPosition(b) & 16);
- };
-
-} else {
- Sizzle.contains = function() {
- return false;
- };
-}
-
-Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
-
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function( selector, context, seed ) {
- var match,
- tmpSet = [],
- later = "",
- root = context.nodeType ? [context] : context;
-
- // Position selectors must be done after the filter
- // And so must :not(positional) so we move all PSEUDOs to the end
- while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
- later += match[0];
- selector = selector.replace( Expr.match.PSEUDO, "" );
- }
-
- selector = Expr.relative[selector] ? selector + "*" : selector;
-
- for ( var i = 0, l = root.length; i < l; i++ ) {
- Sizzle( selector, root[i], tmpSet, seed );
- }
-
- return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-// Override sizzle attribute retrieval
-Sizzle.attr = jQuery.attr;
-Sizzle.selectors.attrMap = {};
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})();
-
-
-var runtil = /Until$/,
- rparentsprev = /^(?:parents|prevUntil|prevAll)/,
- // Note: This RegExp should be improved, or likely pulled from Sizzle
- rmultiselector = /,/,
- isSimple = /^.[^:#\[\.,]*$/,
- slice = Array.prototype.slice,
- POS = jQuery.expr.match.globalPOS,
- // methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.fn.extend({
- find: function( selector ) {
- var self = this,
- i, l;
-
- if ( typeof selector !== "string" ) {
- return jQuery( selector ).filter(function() {
- for ( i = 0, l = self.length; i < l; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- });
- }
-
- var ret = this.pushStack( "", "find", selector ),
- length, n, r;
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- length = ret.length;
- jQuery.find( selector, this[i], ret );
-
- if ( i > 0 ) {
- // Make sure that the results are unique
- for ( n = length; n < ret.length; n++ ) {
- for ( r = 0; r < length; r++ ) {
- if ( ret[r] === ret[n] ) {
- ret.splice(n--, 1);
- break;
- }
- }
- }
- }
- }
-
- return ret;
- },
-
- has: function( target ) {
- var targets = jQuery( target );
- return this.filter(function() {
- for ( var i = 0, l = targets.length; i < l; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
-
- not: function( selector ) {
- return this.pushStack( winnow(this, selector, false), "not", selector);
- },
-
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector, true), "filter", selector );
- },
-
- is: function( selector ) {
- return !!selector && (
- typeof selector === "string" ?
- // If this is a positional selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- POS.test( selector ) ?
- jQuery( selector, this.context ).index( this[0] ) >= 0 :
- jQuery.filter( selector, this ).length > 0 :
- this.filter( selector ).length > 0 );
- },
-
- closest: function( selectors, context ) {
- var ret = [], i, l, cur = this[0];
-
- // Array (deprecated as of jQuery 1.7)
- if ( jQuery.isArray( selectors ) ) {
- var level = 1;
-
- while ( cur && cur.ownerDocument && cur !== context ) {
- for ( i = 0; i < selectors.length; i++ ) {
-
- if ( jQuery( cur ).is( selectors[ i ] ) ) {
- ret.push({ selector: selectors[ i ], elem: cur, level: level });
- }
- }
-
- cur = cur.parentNode;
- level++;
- }
-
- return ret;
- }
-
- // String
- var pos = POS.test( selectors ) || typeof selectors !== "string" ?
- jQuery( selectors, context || this.context ) :
- 0;
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- cur = this[i];
-
- while ( cur ) {
- if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
- ret.push( cur );
- break;
-
- } else {
- cur = cur.parentNode;
- if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
- break;
- }
- }
- }
- }
-
- ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
- return this.pushStack( ret, "closest", selectors );
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
- }
-
- // index in selector
- if ( typeof elem === "string" ) {
- return jQuery.inArray( this[0], jQuery( elem ) );
- }
-
- // Locate the position of the desired element
- return jQuery.inArray(
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[0] : elem, this );
- },
-
- add: function( selector, context ) {
- var set = typeof selector === "string" ?
- jQuery( selector, context ) :
- jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
- all = jQuery.merge( this.get(), set );
-
- return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
- all :
- jQuery.unique( all ) );
- },
-
- andSelf: function() {
- return this.add( this.prevObject );
- }
-});
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
- return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return jQuery.dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return jQuery.nth( elem, 2, "nextSibling" );
- },
- prev: function( elem ) {
- return jQuery.nth( elem, 2, "previousSibling" );
- },
- nextAll: function( elem ) {
- return jQuery.dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return jQuery.dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
- },
- children: function( elem ) {
- return jQuery.sibling( elem.firstChild );
- },
- contents: function( elem ) {
- return jQuery.nodeName( elem, "iframe" ) ?
- elem.contentDocument || elem.contentWindow.document :
- jQuery.makeArray( elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until );
-
- if ( !runtil.test( name ) ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- ret = jQuery.filter( selector, ret );
- }
-
- ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
- if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
- ret = ret.reverse();
- }
-
- return this.pushStack( ret, name, slice.call( arguments ).join(",") );
- };
-});
-
-jQuery.extend({
- filter: function( expr, elems, not ) {
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 ?
- jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
- jQuery.find.matches(expr, elems);
- },
-
- dir: function( elem, dir, until ) {
- var matched = [],
- cur = elem[ dir ];
-
- while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
- if ( cur.nodeType === 1 ) {
- matched.push( cur );
- }
- cur = cur[dir];
- }
- return matched;
- },
-
- nth: function( cur, result, dir, elem ) {
- result = result || 1;
- var num = 0;
-
- for ( ; cur; cur = cur[dir] ) {
- if ( cur.nodeType === 1 && ++num === result ) {
- break;
- }
- }
-
- return cur;
- },
-
- sibling: function( n, elem ) {
- var r = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- r.push( n );
- }
- }
-
- return r;
- }
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
-
- // Can't pass null or undefined to indexOf in Firefox 4
- // Set to 0 to skip string check
- qualifier = qualifier || 0;
-
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep(elements, function( elem, i ) {
- var retVal = !!qualifier.call( elem, i, elem );
- return retVal === keep;
- });
-
- } else if ( qualifier.nodeType ) {
- return jQuery.grep(elements, function( elem, i ) {
- return ( elem === qualifier ) === keep;
- });
-
- } else if ( typeof qualifier === "string" ) {
- var filtered = jQuery.grep(elements, function( elem ) {
- return elem.nodeType === 1;
- });
-
- if ( isSimple.test( qualifier ) ) {
- return jQuery.filter(qualifier, filtered, !keep);
- } else {
- qualifier = jQuery.filter( qualifier, filtered );
- }
- }
-
- return jQuery.grep(elements, function( elem, i ) {
- return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
- });
-}
-
-
-
-
-function createSafeFragment( document ) {
- var list = nodeNames.split( "|" ),
- safeFrag = document.createDocumentFragment();
-
- if ( safeFrag.createElement ) {
- while ( list.length ) {
- safeFrag.createElement(
- list.pop()
- );
- }
- }
- return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
- "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
- rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
- rleadingWhitespace = /^\s+/,
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
- rtagName = /<([\w:]+)/,
- rtbody = /<tbody/i,
- rhtml = /<|&#?\w+;/,
- rnoInnerhtml = /<(?:script|style)/i,
- rnocache = /<(?:script|object|embed|option|style)/i,
- rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptType = /\/(java|ecma)script/i,
- rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
- wrapMap = {
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
- legend: [ 1, "<fieldset>", "</fieldset>" ],
- thead: [ 1, "<table>", "</table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
- col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
- area: [ 1, "<map>", "</map>" ],
- _default: [ 0, "", "" ]
- },
- safeFragment = createSafeFragment( document );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE can't serialize <link> and <script> tags normally
-if ( !jQuery.support.htmlSerialize ) {
- wrapMap._default = [ 1, "div<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
- text: function( value ) {
- return jQuery.access( this, function( value ) {
- return value === undefined ?
- jQuery.text( this ) :
- this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
- }, null, value, arguments.length );
- },
-
- wrapAll: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapAll( html.call(this, i) );
- });
- }
-
- if ( this[0] ) {
- // The elements to wrap the target around
- var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
- if ( this[0].parentNode ) {
- wrap.insertBefore( this[0] );
- }
-
- wrap.map(function() {
- var elem = this;
-
- while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
- elem = elem.firstChild;
- }
-
- return elem;
- }).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapInner( html.call(this, i) );
- });
- }
-
- return this.each(function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- });
- },
-
- wrap: function( html ) {
- var isFunction = jQuery.isFunction( html );
-
- return this.each(function(i) {
- jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
- });
- },
-
- unwrap: function() {
- return this.parent().each(function() {
- if ( !jQuery.nodeName( this, "body" ) ) {
- jQuery( this ).replaceWith( this.childNodes );
- }
- }).end();
- },
-
- append: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 ) {
- this.appendChild( elem );
- }
- });
- },
-
- prepend: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 ) {
- this.insertBefore( elem, this.firstChild );
- }
- });
- },
-
- before: function() {
- if ( this[0] && this[0].parentNode ) {
- return this.domManip(arguments, false, function( elem ) {
- this.parentNode.insertBefore( elem, this );
- });
- } else if ( arguments.length ) {
- var set = jQuery.clean( arguments );
- set.push.apply( set, this.toArray() );
- return this.pushStack( set, "before", arguments );
- }
- },
-
- after: function() {
- if ( this[0] && this[0].parentNode ) {
- return this.domManip(arguments, false, function( elem ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- });
- } else if ( arguments.length ) {
- var set = this.pushStack( this, "after", arguments );
- set.push.apply( set, jQuery.clean(arguments) );
- return set;
- }
- },
-
- // keepData is for internal use only--do not document
- remove: function( selector, keepData ) {
- for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
- if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName("*") );
- jQuery.cleanData( [ elem ] );
- }
-
- if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
- }
- }
- }
-
- return this;
- },
-
- empty: function() {
- for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName("*") );
- }
-
- // Remove any remaining nodes
- while ( elem.firstChild ) {
- elem.removeChild( elem.firstChild );
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map( function () {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- });
- },
-
- html: function( value ) {
- return jQuery.access( this, function( value ) {
- var elem = this[0] || {},
- i = 0,
- l = this.length;
-
- if ( value === undefined ) {
- return elem.nodeType === 1 ?
- elem.innerHTML.replace( rinlinejQuery, "" ) :
- null;
- }
-
-
- if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
- ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
- !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
-
- value = value.replace( rxhtmlTag, "<$1></$2>" );
-
- try {
- for (; i < l; i++ ) {
- // Remove element nodes and prevent memory leaks
- elem = this[i] || {};
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName( "*" ) );
- elem.innerHTML = value;
- }
- }
-
- elem = 0;
-
- // If using innerHTML throws an exception, use the fallback method
- } catch(e) {}
- }
-
- if ( elem ) {
- this.empty().append( value );
- }
- }, null, value, arguments.length );
- },
-
- replaceWith: function( value ) {
- if ( this[0] && this[0].parentNode ) {
- // Make sure that the elements are removed from the DOM before they are inserted
- // this can help fix replacing a parent with child elements
- if ( jQuery.isFunction( value ) ) {
- return this.each(function(i) {
- var self = jQuery(this), old = self.html();
- self.replaceWith( value.call( this, i, old ) );
- });
- }
-
- if ( typeof value !== "string" ) {
- value = jQuery( value ).detach();
- }
-
- return this.each(function() {
- var next = this.nextSibling,
- parent = this.parentNode;
-
- jQuery( this ).remove();
-
- if ( next ) {
- jQuery(next).before( value );
- } else {
- jQuery(parent).append( value );
- }
- });
- } else {
- return this.length ?
- this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
- this;
- }
- },
-
- detach: function( selector ) {
- return this.remove( selector, true );
- },
-
- domManip: function( args, table, callback ) {
- var results, first, fragment, parent,
- value = args[0],
- scripts = [];
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
- return this.each(function() {
- jQuery(this).domManip( args, table, callback, true );
- });
- }
-
- if ( jQuery.isFunction(value) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- args[0] = value.call(this, i, table ? self.html() : undefined);
- self.domManip( args, table, callback );
- });
- }
-
- if ( this[0] ) {
- parent = value && value.parentNode;
-
- // If we're in a fragment, just use that instead of building a new one
- if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
- results = { fragment: parent };
-
- } else {
- results = jQuery.buildFragment( args, this, scripts );
- }
-
- fragment = results.fragment;
-
- if ( fragment.childNodes.length === 1 ) {
- first = fragment = fragment.firstChild;
- } else {
- first = fragment.firstChild;
- }
-
- if ( first ) {
- table = table && jQuery.nodeName( first, "tr" );
-
- for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
- callback.call(
- table ?
- root(this[i], first) :
- this[i],
- // Make sure that we do not leak memory by inadvertently discarding
- // the original fragment (which might have attached data) instead of
- // using it; in addition, use the original fragment object for the last
- // item instead of first because it can end up being emptied incorrectly
- // in certain situations (Bug #8070).
- // Fragments from the fragment cache must always be cloned and never used
- // in place.
- results.cacheable || ( l > 1 && i < lastIndex ) ?
- jQuery.clone( fragment, true, true ) :
- fragment
- );
- }
- }
-
- if ( scripts.length ) {
- jQuery.each( scripts, function( i, elem ) {
- if ( elem.src ) {
- jQuery.ajax({
- type: "GET",
- global: false,
- url: elem.src,
- async: false,
- dataType: "script"
- });
- } else {
- jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
- }
-
- if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
- }
- });
- }
- }
-
- return this;
- }
-});
-
-function root( elem, cur ) {
- return jQuery.nodeName(elem, "table") ?
- (elem.getElementsByTagName("tbody")[0] ||
- elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
- elem;
-}
-
-function cloneCopyEvent( src, dest ) {
-
- if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
- return;
- }
-
- var type, i, l,
- oldData = jQuery._data( src ),
- curData = jQuery._data( dest, oldData ),
- events = oldData.events;
-
- if ( events ) {
- delete curData.handle;
- curData.events = {};
-
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type, events[ type ][ i ] );
- }
- }
- }
-
- // make the cloned public data object a copy from the original
- if ( curData.data ) {
- curData.data = jQuery.extend( {}, curData.data );
- }
-}
-
-function cloneFixAttributes( src, dest ) {
- var nodeName;
-
- // We do not need to do anything for non-Elements
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- // clearAttributes removes the attributes, which we don't want,
- // but also removes the attachEvent events, which we *do* want
- if ( dest.clearAttributes ) {
- dest.clearAttributes();
- }
-
- // mergeAttributes, in contrast, only merges back on the
- // original attributes, not the events
- if ( dest.mergeAttributes ) {
- dest.mergeAttributes( src );
- }
-
- nodeName = dest.nodeName.toLowerCase();
-
- // IE6-8 fail to clone children inside object elements that use
- // the proprietary classid attribute value (rather than the type
- // attribute) to identify the type of content to display
- if ( nodeName === "object" ) {
- dest.outerHTML = src.outerHTML;
-
- } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
- // IE6-8 fails to persist the checked state of a cloned checkbox
- // or radio button. Worse, IE6-7 fail to give the cloned element
- // a checked appearance if the defaultChecked value isn't also set
- if ( src.checked ) {
- dest.defaultChecked = dest.checked = src.checked;
- }
-
- // IE6-7 get confused and end up setting the value of a cloned
- // checkbox/radio button to an empty string instead of "on"
- if ( dest.value !== src.value ) {
- dest.value = src.value;
- }
-
- // IE6-8 fails to return the selected option to the default selected
- // state when cloning options
- } else if ( nodeName === "option" ) {
- dest.selected = src.defaultSelected;
-
- // IE6-8 fails to set the defaultValue to the correct value when
- // cloning other types of input fields
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
-
- // IE blanks contents when cloning scripts
- } else if ( nodeName === "script" && dest.text !== src.text ) {
- dest.text = src.text;
- }
-
- // Event data gets referenced instead of copied if the expando
- // gets copied too
- dest.removeAttribute( jQuery.expando );
-
- // Clear flags for bubbling special change/submit events, they must
- // be reattached when the newly cloned events are first activated
- dest.removeAttribute( "_submit_attached" );
- dest.removeAttribute( "_change_attached" );
-}
-
-jQuery.buildFragment = function( args, nodes, scripts ) {
- var fragment, cacheable, cacheresults, doc,
- first = args[ 0 ];
-
- // nodes may contain either an explicit document object,
- // a jQuery collection or context object.
- // If nodes[0] contains a valid object to assign to doc
- if ( nodes && nodes[0] ) {
- doc = nodes[0].ownerDocument || nodes[0];
- }
-
- // Ensure that an attr object doesn't incorrectly stand in as a document object
- // Chrome and Firefox seem to allow this to occur and will throw exception
- // Fixes #8950
- if ( !doc.createDocumentFragment ) {
- doc = document;
- }
-
- // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
- // Cloning options loses the selected state, so don't cache them
- // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
- // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
- // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
- if ( args.length === 1 && typeof first === "string" && first.length < 512 && doc === document &&
- first.charAt(0) === "<" && !rnocache.test( first ) &&
- (jQuery.support.checkClone || !rchecked.test( first )) &&
- (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
-
- cacheable = true;
-
- cacheresults = jQuery.fragments[ first ];
- if ( cacheresults && cacheresults !== 1 ) {
- fragment = cacheresults;
- }
- }
-
- if ( !fragment ) {
- fragment = doc.createDocumentFragment();
- jQuery.clean( args, doc, fragment, scripts );
- }
-
- if ( cacheable ) {
- jQuery.fragments[ first ] = cacheresults ? fragment : 1;
- }
-
- return { fragment: fragment, cacheable: cacheable };
-};
-
-jQuery.fragments = {};
-
-jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var ret = [],
- insert = jQuery( selector ),
- parent = this.length === 1 && this[0].parentNode;
-
- if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
- insert[ original ]( this[0] );
- return this;
-
- } else {
- for ( var i = 0, l = insert.length; i < l; i++ ) {
- var elems = ( i > 0 ? this.clone(true) : this ).get();
- jQuery( insert[i] )[ original ]( elems );
- ret = ret.concat( elems );
- }
-
- return this.pushStack( ret, name, insert.selector );
- }
- };
-});
-
-function getAll( elem ) {
- if ( typeof elem.getElementsByTagName !== "undefined" ) {
- return elem.getElementsByTagName( "*" );
-
- } else if ( typeof elem.querySelectorAll !== "undefined" ) {
- return elem.querySelectorAll( "*" );
-
- } else {
- return [];
- }
-}
-
-// Used in clean, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
- if ( elem.type === "checkbox" || elem.type === "radio" ) {
- elem.defaultChecked = elem.checked;
- }
-}
-// Finds all inputs and passes them to fixDefaultChecked
-function findInputs( elem ) {
- var nodeName = ( elem.nodeName || "" ).toLowerCase();
- if ( nodeName === "input" ) {
- fixDefaultChecked( elem );
- // Skip scripts, get other children
- } else if ( nodeName !== "script" && typeof elem.getElementsByTagName !== "undefined" ) {
- jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
- }
-}
-
-// Derived From: http://www.iecss.com/shimprove/javascript/shimprove.1-0-1.js
-function shimCloneNode( elem ) {
- var div = document.createElement( "div" );
- safeFragment.appendChild( div );
-
- div.innerHTML = elem.outerHTML;
- return div.firstChild;
-}
-
-jQuery.extend({
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var srcElements,
- destElements,
- i,
- // IE<=8 does not properly clone detached, unknown element nodes
- clone = jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ?
- elem.cloneNode( true ) :
- shimCloneNode( elem );
-
- if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
- (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
- // IE copies events bound via attachEvent when using cloneNode.
- // Calling detachEvent on the clone will also remove the events
- // from the original. In order to get around this, we use some
- // proprietary methods to clear the events. Thanks to MooTools
- // guys for this hotness.
-
- cloneFixAttributes( elem, clone );
-
- // Using Sizzle here is crazy slow, so we use getElementsByTagName instead
- srcElements = getAll( elem );
- destElements = getAll( clone );
-
- // Weird iteration because IE will replace the length property
- // with an element if you are cloning the body and one of the
- // elements on the page has a name or id of "length"
- for ( i = 0; srcElements[i]; ++i ) {
- // Ensure that the destination node is not null; Fixes #9587
- if ( destElements[i] ) {
- cloneFixAttributes( srcElements[i], destElements[i] );
- }
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- cloneCopyEvent( elem, clone );
-
- if ( deepDataAndEvents ) {
- srcElements = getAll( elem );
- destElements = getAll( clone );
-
- for ( i = 0; srcElements[i]; ++i ) {
- cloneCopyEvent( srcElements[i], destElements[i] );
- }
- }
- }
-
- srcElements = destElements = null;
-
- // Return the cloned set
- return clone;
- },
-
- clean: function( elems, context, fragment, scripts ) {
- var checkScriptType, script, j,
- ret = [];
-
- context = context || document;
-
- // !context.createElement fails in IE with an error but returns typeof 'object'
- if ( typeof context.createElement === "undefined" ) {
- context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
- }
-
- for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
- if ( typeof elem === "number" ) {
- elem += "";
- }
-
- if ( !elem ) {
- continue;
- }
-
- // Convert html string into DOM nodes
- if ( typeof elem === "string" ) {
- if ( !rhtml.test( elem ) ) {
- elem = context.createTextNode( elem );
- } else {
- // Fix "XHTML"-style tags in all browsers
- elem = elem.replace(rxhtmlTag, "<$1></$2>");
-
- // Trim whitespace, otherwise indexOf won't work as expected
- var tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(),
- wrap = wrapMap[ tag ] || wrapMap._default,
- depth = wrap[0],
- div = context.createElement("div"),
- safeChildNodes = safeFragment.childNodes,
- remove;
-
- // Append wrapper element to unknown element safe doc fragment
- if ( context === document ) {
- // Use the fragment we've already created for this document
- safeFragment.appendChild( div );
- } else {
- // Use a fragment created with the owner document
- createSafeFragment( context ).appendChild( div );
- }
-
- // Go to html and back, then peel off extra wrappers
- div.innerHTML = wrap[1] + elem + wrap[2];
-
- // Move to the right depth
- while ( depth-- ) {
- div = div.lastChild;
- }
-
- // Remove IE's autoinserted <tbody> from table fragments
- if ( !jQuery.support.tbody ) {
-
- // String was a <table>, *may* have spurious <tbody>
- var hasBody = rtbody.test(elem),
- tbody = tag === "table" && !hasBody ?
- div.firstChild && div.firstChild.childNodes :
-
- // String was a bare <thead> or <tfoot>
- wrap[1] === "<table>" && !hasBody ?
- div.childNodes :
- [];
-
- for ( j = tbody.length - 1; j >= 0 ; --j ) {
- if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
- tbody[ j ].parentNode.removeChild( tbody[ j ] );
- }
- }
- }
-
- // IE completely kills leading whitespace when innerHTML is used
- if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
- div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
- }
-
- elem = div.childNodes;
-
- // Clear elements from DocumentFragment (safeFragment or otherwise)
- // to avoid hoarding elements. Fixes #11356
- if ( div ) {
- div.parentNode.removeChild( div );
-
- // Guard against -1 index exceptions in FF3.6
- if ( safeChildNodes.length > 0 ) {
- remove = safeChildNodes[ safeChildNodes.length - 1 ];
-
- if ( remove && remove.parentNode ) {
- remove.parentNode.removeChild( remove );
- }
- }
- }
- }
- }
-
- // Resets defaultChecked for any radios and checkboxes
- // about to be appended to the DOM in IE 6/7 (#8060)
- var len;
- if ( !jQuery.support.appendChecked ) {
- if ( elem[0] && typeof (len = elem.length) === "number" ) {
- for ( j = 0; j < len; j++ ) {
- findInputs( elem[j] );
- }
- } else {
- findInputs( elem );
- }
- }
-
- if ( elem.nodeType ) {
- ret.push( elem );
- } else {
- ret = jQuery.merge( ret, elem );
- }
- }
-
- if ( fragment ) {
- checkScriptType = function( elem ) {
- return !elem.type || rscriptType.test( elem.type );
- };
- for ( i = 0; ret[i]; i++ ) {
- script = ret[i];
- if ( scripts && jQuery.nodeName( script, "script" ) && (!script.type || rscriptType.test( script.type )) ) {
- scripts.push( script.parentNode ? script.parentNode.removeChild( script ) : script );
-
- } else {
- if ( script.nodeType === 1 ) {
- var jsTags = jQuery.grep( script.getElementsByTagName( "script" ), checkScriptType );
-
- ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
- }
- fragment.appendChild( script );
- }
- }
- }
-
- return ret;
- },
-
- cleanData: function( elems ) {
- var data, id,
- cache = jQuery.cache,
- special = jQuery.event.special,
- deleteExpando = jQuery.support.deleteExpando;
-
- for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
- if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
- continue;
- }
-
- id = elem[ jQuery.expando ];
-
- if ( id ) {
- data = cache[ id ];
-
- if ( data && data.events ) {
- for ( var type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
-
- // Null the DOM reference to avoid IE6/7/8 leak (#7054)
- if ( data.handle ) {
- data.handle.elem = null;
- }
- }
-
- if ( deleteExpando ) {
- delete elem[ jQuery.expando ];
-
- } else if ( elem.removeAttribute ) {
- elem.removeAttribute( jQuery.expando );
- }
-
- delete cache[ id ];
- }
- }
- }
-});
-
-
-
-
-var ralpha = /alpha\([^)]*\)/i,
- ropacity = /opacity=([^)]*)/,
- // fixed for IE9, see #8346
- rupper = /([A-Z]|^ms)/g,
- rnum = /^[\-+]?(?:\d*\.)?\d+$/i,
- rnumnonpx = /^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,
- rrelNum = /^([\-+])=([\-+.\de]+)/,
- rmargin = /^margin/,
-
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
-
- // order is important!
- cssExpand = [ "Top", "Right", "Bottom", "Left" ],
-
- curCSS,
-
- getComputedStyle,
- currentStyle;
-
-jQuery.fn.css = function( name, value ) {
- return jQuery.access( this, function( elem, name, value ) {
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- }, name, value, arguments.length > 1 );
-};
-
-jQuery.extend({
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity" );
- return ret === "" ? "1" : ret;
-
- } else {
- return elem.style.opacity;
- }
- }
- }
- },
-
- // Exclude the following css properties to add px
- cssNumber: {
- "fillOpacity": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- // normalize float css property
- "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, origName = jQuery.camelCase( name ),
- style = elem.style, hooks = jQuery.cssHooks[ origName ];
-
- name = jQuery.cssProps[ origName ] || origName;
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // convert relative number strings (+= or -=) to relative numbers. #7345
- if ( type === "string" && (ret = rrelNum.exec( value )) ) {
- value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that NaN and null values aren't set. See: #7116
- if ( value == null || type === "number" && isNaN( value ) ) {
- return;
- }
-
- // If a number was passed in, add 'px' to the (except for certain CSS properties)
- if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
- value += "px";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
- // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
- // Fixes bug #5509
- try {
- style[ name ] = value;
- } catch(e) {}
- }
-
- } else {
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra ) {
- var ret, hooks;
-
- // Make sure that we're working with the right name
- name = jQuery.camelCase( name );
- hooks = jQuery.cssHooks[ name ];
- name = jQuery.cssProps[ name ] || name;
-
- // cssFloat needs a special treatment
- if ( name === "cssFloat" ) {
- name = "float";
- }
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
- return ret;
-
- // Otherwise, if a way to get the computed value exists, use that
- } else if ( curCSS ) {
- return curCSS( elem, name );
- }
- },
-
- // A method for quickly swapping in/out CSS properties to get correct calculations
- swap: function( elem, options, callback ) {
- var old = {},
- ret, name;
-
- // Remember the old values, and insert the new ones
- for ( name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- ret = callback.call( elem );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
-
- return ret;
- }
-});
-
-// DEPRECATED in 1.3, Use jQuery.css() instead
-jQuery.curCSS = jQuery.css;
-
-if ( document.defaultView && document.defaultView.getComputedStyle ) {
- getComputedStyle = function( elem, name ) {
- var ret, defaultView, computedStyle, width,
- style = elem.style;
-
- name = name.replace( rupper, "-$1" ).toLowerCase();
-
- if ( (defaultView = elem.ownerDocument.defaultView) &&
- (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
-
- ret = computedStyle.getPropertyValue( name );
- if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
- ret = jQuery.style( elem, name );
- }
- }
-
- // A tribute to the "awesome hack by Dean Edwards"
- // WebKit uses "computed value (percentage if specified)" instead of "used value" for margins
- // which is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
- if ( !jQuery.support.pixelMargin && computedStyle && rmargin.test( name ) && rnumnonpx.test( ret ) ) {
- width = style.width;
- style.width = ret;
- ret = computedStyle.width;
- style.width = width;
- }
-
- return ret;
- };
-}
-
-if ( document.documentElement.currentStyle ) {
- currentStyle = function( elem, name ) {
- var left, rsLeft, uncomputed,
- ret = elem.currentStyle && elem.currentStyle[ name ],
- style = elem.style;
-
- // Avoid setting ret to empty string here
- // so we don't default to auto
- if ( ret == null && style && (uncomputed = style[ name ]) ) {
- ret = uncomputed;
- }
-
- // From the awesome hack by Dean Edwards
- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
- // If we're not dealing with a regular pixel number
- // but a number that has a weird ending, we need to convert it to pixels
- if ( rnumnonpx.test( ret ) ) {
-
- // Remember the original values
- left = style.left;
- rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
-
- // Put in the new values to get a computed value out
- if ( rsLeft ) {
- elem.runtimeStyle.left = elem.currentStyle.left;
- }
- style.left = name === "fontSize" ? "1em" : ret;
- ret = style.pixelLeft + "px";
-
- // Revert the changed values
- style.left = left;
- if ( rsLeft ) {
- elem.runtimeStyle.left = rsLeft;
- }
- }
-
- return ret === "" ? "auto" : ret;
- };
-}
-
-curCSS = getComputedStyle || currentStyle;
-
-function getWidthOrHeight( elem, name, extra ) {
-
- // Start with offset property
- var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
- i = name === "width" ? 1 : 0,
- len = 4;
-
- if ( val > 0 ) {
- if ( extra !== "border" ) {
- for ( ; i < len; i += 2 ) {
- if ( !extra ) {
- val -= parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
- }
- if ( extra === "margin" ) {
- val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ] ) ) || 0;
- } else {
- val -= parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
- }
- }
- }
-
- return val + "px";
- }
-
- // Fall back to computed then uncomputed css if necessary
- val = curCSS( elem, name );
- if ( val < 0 || val == null ) {
- val = elem.style[ name ];
- }
-
- // Computed unit is not pixels. Stop here and return.
- if ( rnumnonpx.test(val) ) {
- return val;
- }
-
- // Normalize "", auto, and prepare for extra
- val = parseFloat( val ) || 0;
-
- // Add padding, border, margin
- if ( extra ) {
- for ( ; i < len; i += 2 ) {
- val += parseFloat( jQuery.css( elem, "padding" + cssExpand[ i ] ) ) || 0;
- if ( extra !== "padding" ) {
- val += parseFloat( jQuery.css( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
- }
- if ( extra === "margin" ) {
- val += parseFloat( jQuery.css( elem, extra + cssExpand[ i ]) ) || 0;
- }
- }
- }
-
- return val + "px";
-}
-
-jQuery.each([ "height", "width" ], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- if ( computed ) {
- if ( elem.offsetWidth !== 0 ) {
- return getWidthOrHeight( elem, name, extra );
- } else {
- return jQuery.swap( elem, cssShow, function() {
- return getWidthOrHeight( elem, name, extra );
- });
- }
- }
- },
-
- set: function( elem, value ) {
- return rnum.test( value ) ?
- value + "px" :
- value;
- }
- };
-});
-
-if ( !jQuery.support.opacity ) {
- jQuery.cssHooks.opacity = {
- get: function( elem, computed ) {
- // IE uses filters for opacity
- return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
- ( parseFloat( RegExp.$1 ) / 100 ) + "" :
- computed ? "1" : "";
- },
-
- set: function( elem, value ) {
- var style = elem.style,
- currentStyle = elem.currentStyle,
- opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
- filter = currentStyle && currentStyle.filter || style.filter || "";
-
- // IE has trouble with opacity if it does not have layout
- // Force it by setting the zoom level
- style.zoom = 1;
-
- // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
- if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
-
- // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
- // if "filter:" is present at all, clearType is disabled, we want to avoid this
- // style.removeAttribute is IE Only, but so apparently is this code path...
- style.removeAttribute( "filter" );
-
- // if there there is no filter style applied in a css rule, we are done
- if ( currentStyle && !currentStyle.filter ) {
- return;
- }
- }
-
- // otherwise, set new filter values
- style.filter = ralpha.test( filter ) ?
- filter.replace( ralpha, opacity ) :
- filter + " " + opacity;
- }
- };
-}
-
-jQuery(function() {
- // This hook cannot be added until DOM ready because the support test
- // for it is not run until after DOM ready
- if ( !jQuery.support.reliableMarginRight ) {
- jQuery.cssHooks.marginRight = {
- get: function( elem, computed ) {
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // Work around by temporarily setting element display to inline-block
- return jQuery.swap( elem, { "display": "inline-block" }, function() {
- if ( computed ) {
- return curCSS( elem, "margin-right" );
- } else {
- return elem.style.marginRight;
- }
- });
- }
- };
- }
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.hidden = function( elem ) {
- var width = elem.offsetWidth,
- height = elem.offsetHeight;
-
- return ( width === 0 && height === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
- };
-
- jQuery.expr.filters.visible = function( elem ) {
- return !jQuery.expr.filters.hidden( elem );
- };
-}
-
-// These hooks are used by animate to expand properties
-jQuery.each({
- margin: "",
- padding: "",
- border: "Width"
-}, function( prefix, suffix ) {
-
- jQuery.cssHooks[ prefix + suffix ] = {
- expand: function( value ) {
- var i,
-
- // assumes a single number if not a string
- parts = typeof value === "string" ? value.split(" ") : [ value ],
- expanded = {};
-
- for ( i = 0; i < 4; i++ ) {
- expanded[ prefix + cssExpand[ i ] + suffix ] =
- parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
- }
-
- return expanded;
- }
- };
-});
-
-
-
-
-var r20 = /%20/g,
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rhash = /#.*$/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
- rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
- rquery = /\?/,
- rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
- rselectTextarea = /^(?:select|textarea)/i,
- rspacesAjax = /\s+/,
- rts = /([?&])_=[^&]*/,
- rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
-
- // Keep a copy of the old load method
- _load = jQuery.fn.load,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Document location
- ajaxLocation,
-
- // Document location segments
- ajaxLocParts,
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = ["*/"] + ["*"];
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
- ajaxLocation = location.href;
-} catch( e ) {
- // Use the href attribute of an A element
- // since IE will modify it given document.location
- ajaxLocation = document.createElement( "a" );
- ajaxLocation.href = "";
- ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- if ( jQuery.isFunction( func ) ) {
- var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
- i = 0,
- length = dataTypes.length,
- dataType,
- list,
- placeBefore;
-
- // For each dataType in the dataTypeExpression
- for ( ; i < length; i++ ) {
- dataType = dataTypes[ i ];
- // We control if we're asked to add before
- // any existing element
- placeBefore = /^\+/.test( dataType );
- if ( placeBefore ) {
- dataType = dataType.substr( 1 ) || "*";
- }
- list = structure[ dataType ] = structure[ dataType ] || [];
- // then we add to the structure accordingly
- list[ placeBefore ? "unshift" : "push" ]( func );
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
- dataType /* internal */, inspected /* internal */ ) {
-
- dataType = dataType || options.dataTypes[ 0 ];
- inspected = inspected || {};
-
- inspected[ dataType ] = true;
-
- var list = structure[ dataType ],
- i = 0,
- length = list ? list.length : 0,
- executeOnly = ( structure === prefilters ),
- selection;
-
- for ( ; i < length && ( executeOnly || !selection ); i++ ) {
- selection = list[ i ]( options, originalOptions, jqXHR );
- // If we got redirected to another dataType
- // we try there if executing only and not done already
- if ( typeof selection === "string" ) {
- if ( !executeOnly || inspected[ selection ] ) {
- selection = undefined;
- } else {
- options.dataTypes.unshift( selection );
- selection = inspectPrefiltersOrTransports(
- structure, options, originalOptions, jqXHR, selection, inspected );
- }
- }
- }
- // If we're only executing or nothing was selected
- // we try the catchall dataType if not done already
- if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
- selection = inspectPrefiltersOrTransports(
- structure, options, originalOptions, jqXHR, "*", inspected );
- }
- // unnecessary when only executing (prefilters)
- // but it'll be ignored by the caller in that case
- return selection;
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var key, deep,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
- for ( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-}
-
-jQuery.fn.extend({
- load: function( url, params, callback ) {
- if ( typeof url !== "string" && _load ) {
- return _load.apply( this, arguments );
-
- // Don't do a request if no elements are being requested
- } else if ( !this.length ) {
- return this;
- }
-
- var off = url.indexOf( " " );
- if ( off >= 0 ) {
- var selector = url.slice( off, url.length );
- url = url.slice( 0, off );
- }
-
- // Default to a GET request
- var type = "GET";
-
- // If the second parameter was provided
- if ( params ) {
- // If it's a function
- if ( jQuery.isFunction( params ) ) {
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( typeof params === "object" ) {
- params = jQuery.param( params, jQuery.ajaxSettings.traditional );
- type = "POST";
- }
- }
-
- var self = this;
-
- // Request the remote document
- jQuery.ajax({
- url: url,
- type: type,
- dataType: "html",
- data: params,
- // Complete callback (responseText is used internally)
- complete: function( jqXHR, status, responseText ) {
- // Store the response as specified by the jqXHR object
- responseText = jqXHR.responseText;
- // If successful, inject the HTML into all the matched elements
- if ( jqXHR.isResolved() ) {
- // #4825: Get the actual response in case
- // a dataFilter is present in ajaxSettings
- jqXHR.done(function( r ) {
- responseText = r;
- });
- // See if a selector was specified
- self.html( selector ?
- // Create a dummy div to hold the results
- jQuery("<div>")
- // inject the contents of the document in, removing the scripts
- // to avoid any 'Permission Denied' errors in IE
- .append(responseText.replace(rscript, ""))
-
- // Locate the specified elements
- .find(selector) :
-
- // If not, just inject the full result
- responseText );
- }
-
- if ( callback ) {
- self.each( callback, [ responseText, status, jqXHR ] );
- }
- }
- });
-
- return this;
- },
-
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
-
- serializeArray: function() {
- return this.map(function(){
- return this.elements ? jQuery.makeArray( this.elements ) : this;
- })
- .filter(function(){
- return this.name && !this.disabled &&
- ( this.checked || rselectTextarea.test( this.nodeName ) ||
- rinput.test( this.type ) );
- })
- .map(function( i, elem ){
- var val = jQuery( this ).val();
-
- return val == null ?
- null :
- jQuery.isArray( val ) ?
- jQuery.map( val, function( val, i ){
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }) :
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }).get();
- }
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
- jQuery.fn[ o ] = function( f ){
- return this.on( o, f );
- };
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
- // shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- return jQuery.ajax({
- type: method,
- url: url,
- data: data,
- success: callback,
- dataType: type
- });
- };
-});
-
-jQuery.extend({
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- if ( settings ) {
- // Building a settings object
- ajaxExtend( target, jQuery.ajaxSettings );
- } else {
- // Extending ajaxSettings
- settings = target;
- target = jQuery.ajaxSettings;
- }
- ajaxExtend( target, settings );
- return target;
- },
-
- ajaxSettings: {
- url: ajaxLocation,
- isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
- global: true,
- type: "GET",
- contentType: "application/x-www-form-urlencoded; charset=UTF-8",
- processData: true,
- async: true,
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- xml: "application/xml, text/xml",
- html: "text/html",
- text: "text/plain",
- json: "application/json, text/javascript",
- "*": allTypes
- },
-
- contents: {
- xml: /xml/,
- html: /html/,
- json: /json/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText"
- },
-
- // List of data converters
- // 1) key format is "source_type destination_type" (a single space in-between)
- // 2) the catchall symbol "*" can be used for source_type
- converters: {
-
- // Convert anything to text
- "* text": window.String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": jQuery.parseJSON,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- context: true,
- url: true
- }
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
- // Callbacks context
- callbackContext = s.context || s,
- // Context for global events
- // It's the callbackContext if one was provided in the options
- // and if it's a DOM node or a jQuery collection
- globalEventContext = callbackContext !== s &&
- ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
- jQuery( callbackContext ) : jQuery.event,
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks( "once memory" ),
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
- // ifModified key
- ifModifiedKey,
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
- // Response headers
- responseHeadersString,
- responseHeaders,
- // transport
- transport,
- // timeout handle
- timeoutTimer,
- // Cross-domain detection vars
- parts,
- // The jqXHR state
- state = 0,
- // To know if global events are to be dispatched
- fireGlobals,
- // Loop variable
- i,
- // Fake xhr
- jqXHR = {
-
- readyState: 0,
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- if ( !state ) {
- var lname = name.toLowerCase();
- name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return state === 2 ? responseHeadersString : null;
- },
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( state === 2 ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while( ( match = rheaders.exec( responseHeadersString ) ) ) {
- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match === undefined ? null : match;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( !state ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- statusText = statusText || "abort";
- if ( transport ) {
- transport.abort( statusText );
- }
- done( 0, statusText );
- return this;
- }
- };
-
- // Callback for when everything is done
- // It is defined here because jslint complains if it is declared
- // at the end of the function (which would be more logical and readable)
- function done( status, nativeStatusText, responses, headers ) {
-
- // Called once
- if ( state === 2 ) {
- return;
- }
-
- // State is "done" now
- state = 2;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- var isSuccess,
- success,
- error,
- statusText = nativeStatusText,
- response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
- lastModified,
- etag;
-
- // If successful, handle type chaining
- if ( status >= 200 && status < 300 || status === 304 ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
-
- if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
- jQuery.lastModified[ ifModifiedKey ] = lastModified;
- }
- if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
- jQuery.etag[ ifModifiedKey ] = etag;
- }
- }
-
- // If not modified
- if ( status === 304 ) {
-
- statusText = "notmodified";
- isSuccess = true;
-
- // If we have data
- } else {
-
- try {
- success = ajaxConvert( s, response );
- statusText = "success";
- isSuccess = true;
- } catch(e) {
- // We have a parsererror
- statusText = "parsererror";
- error = e;
- }
- }
- } else {
- // We extract error from statusText
- // then normalize statusText and status for non-aborts
- error = statusText;
- if ( !statusText || status ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = "" + ( nativeStatusText || statusText );
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger( "ajaxStop" );
- }
- }
- }
-
- // Attach deferreds
- deferred.promise( jqXHR );
- jqXHR.success = jqXHR.done;
- jqXHR.error = jqXHR.fail;
- jqXHR.complete = completeDeferred.add;
-
- // Status-dependent callbacks
- jqXHR.statusCode = function( map ) {
- if ( map ) {
- var tmp;
- if ( state < 2 ) {
- for ( tmp in map ) {
- statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
- }
- } else {
- tmp = map[ jqXHR.status ];
- jqXHR.then( tmp, tmp );
- }
- }
- return this;
- };
-
- // Remove hash character (#7531: and string promotion)
- // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
- // We also use the url parameter if available
- s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
- // Extract dataTypes list
- s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
-
- // Determine if a cross-domain request is in order
- if ( s.crossDomain == null ) {
- parts = rurl.exec( s.url.toLowerCase() );
- s.crossDomain = !!( parts &&
- ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
- );
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefilter, stop there
- if ( state === 2 ) {
- return false;
- }
-
- // We can fire global events as of now if asked to
- fireGlobals = s.global;
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger( "ajaxStart" );
- }
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // If data is available, append data to url
- if ( s.data ) {
- s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Get ifModifiedKey before adding the anti-cache parameter
- ifModifiedKey = s.url;
-
- // Add anti-cache in url if needed
- if ( s.cache === false ) {
-
- var ts = jQuery.now(),
- // try replacing _= if it is there
- ret = s.url.replace( rts, "$1_=" + ts );
-
- // if nothing was replaced, add timestamp to the end
- s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- ifModifiedKey = ifModifiedKey || s.url;
- if ( jQuery.lastModified[ ifModifiedKey ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
- }
- if ( jQuery.etag[ ifModifiedKey ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
- }
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
- s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
- // Abort if not done already
- jqXHR.abort();
- return false;
-
- }
-
- // Install callbacks on deferreds
- for ( i in { success: 1, error: 1, complete: 1 } ) {
- jqXHR[ i ]( s[ i ] );
- }
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = setTimeout( function(){
- jqXHR.abort( "timeout" );
- }, s.timeout );
- }
-
- try {
- state = 1;
- transport.send( requestHeaders, done );
- } catch (e) {
- // Propagate exception as error if not done
- if ( state < 2 ) {
- done( -1, e );
- // Simply rethrow otherwise
- } else {
- throw e;
- }
- }
- }
-
- return jqXHR;
- },
-
- // Serialize an array of form elements or a set of
- // key/values into a query string
- param: function( a, traditional ) {
- var s = [],
- add = function( key, value ) {
- // If value is a function, invoke it and return its value
- value = jQuery.isFunction( value ) ? value() : value;
- s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
- };
-
- // Set traditional to true for jQuery <= 1.3.2 behavior.
- if ( traditional === undefined ) {
- traditional = jQuery.ajaxSettings.traditional;
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- });
-
- } else {
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( var prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" ).replace( r20, "+" );
- }
-});
-
-function buildParams( prefix, obj, traditional, add ) {
- if ( jQuery.isArray( obj ) ) {
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
- // If array item is non-scalar (array or object), encode its
- // numeric index to resolve deserialization ambiguity issues.
- // Note that rack (as of 1.0.0) can't currently deserialize
- // nested arrays properly, and attempting to do so may cause
- // a server error. Possible fixes are to modify rack's
- // deserialization algorithm or to provide an option or flag
- // to force array serialization to be shallow.
- buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
- }
- });
-
- } else if ( !traditional && jQuery.type( obj ) === "object" ) {
- // Serialize object item.
- for ( var name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-
-// This is still on the jQuery object... for now
-// Want to move this to jQuery.ajax some day
-jQuery.extend({
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {}
-
-});
-
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
- var contents = s.contents,
- dataTypes = s.dataTypes,
- responseFields = s.responseFields,
- ct,
- type,
- finalDataType,
- firstDataType;
-
- // Fill responseXXX fields
- for ( type in responseFields ) {
- if ( type in responses ) {
- jqXHR[ responseFields[type] ] = responses[ type ];
- }
- }
-
- // Remove auto dataType and get content-type in the process
- while( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
-
- // Apply the dataFilter if provided
- if ( s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- var dataTypes = s.dataTypes,
- converters = {},
- i,
- key,
- length = dataTypes.length,
- tmp,
- // Current and previous dataTypes
- current = dataTypes[ 0 ],
- prev,
- // Conversion expression
- conversion,
- // Conversion function
- conv,
- // Conversion functions (transitive conversion)
- conv1,
- conv2;
-
- // For each dataType in the chain
- for ( i = 1; i < length; i++ ) {
-
- // Create converters map
- // with lowercased keys
- if ( i === 1 ) {
- for ( key in s.converters ) {
- if ( typeof key === "string" ) {
- converters[ key.toLowerCase() ] = s.converters[ key ];
- }
- }
- }
-
- // Get the dataTypes
- prev = current;
- current = dataTypes[ i ];
-
- // If current is auto dataType, update it to prev
- if ( current === "*" ) {
- current = prev;
- // If no auto and dataTypes are actually different
- } else if ( prev !== "*" && prev !== current ) {
-
- // Get the converter
- conversion = prev + " " + current;
- conv = converters[ conversion ] || converters[ "* " + current ];
-
- // If there is no direct converter, search transitively
- if ( !conv ) {
- conv2 = undefined;
- for ( conv1 in converters ) {
- tmp = conv1.split( " " );
- if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
- conv2 = converters[ tmp[1] + " " + current ];
- if ( conv2 ) {
- conv1 = converters[ conv1 ];
- if ( conv1 === true ) {
- conv = conv2;
- } else if ( conv2 === true ) {
- conv = conv1;
- }
- break;
- }
- }
- }
- }
- // If we found no converter, dispatch an error
- if ( !( conv || conv2 ) ) {
- jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
- }
- // If found converter is not an equivalence
- if ( conv !== true ) {
- // Convert with 1 or 2 converters accordingly
- response = conv ? conv( response ) : conv2( conv1(response) );
- }
- }
- }
- return response;
-}
-
-
-
-
-var jsc = jQuery.now(),
- jsre = /(\=)\?(&|$)|\?\?/i;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
- jsonp: "callback",
- jsonpCallback: function() {
- return jQuery.expando + "_" + ( jsc++ );
- }
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var inspectData = ( typeof s.data === "string" ) && /^application\/x\-www\-form\-urlencoded/.test( s.contentType );
-
- if ( s.dataTypes[ 0 ] === "jsonp" ||
- s.jsonp !== false && ( jsre.test( s.url ) ||
- inspectData && jsre.test( s.data ) ) ) {
-
- var responseContainer,
- jsonpCallback = s.jsonpCallback =
- jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
- previous = window[ jsonpCallback ],
- url = s.url,
- data = s.data,
- replace = "$1" + jsonpCallback + "$2";
-
- if ( s.jsonp !== false ) {
- url = url.replace( jsre, replace );
- if ( s.url === url ) {
- if ( inspectData ) {
- data = data.replace( jsre, replace );
- }
- if ( s.data === data ) {
- // Add callback manually
- url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
- }
- }
- }
-
- s.url = url;
- s.data = data;
-
- // Install callback
- window[ jsonpCallback ] = function( response ) {
- responseContainer = [ response ];
- };
-
- // Clean-up function
- jqXHR.always(function() {
- // Set callback back to previous value
- window[ jsonpCallback ] = previous;
- // Call if it was a function and we have a response
- if ( responseContainer && jQuery.isFunction( previous ) ) {
- window[ jsonpCallback ]( responseContainer[ 0 ] );
- }
- });
-
- // Use data converter to retrieve json after script execution
- s.converters["script json"] = function() {
- if ( !responseContainer ) {
- jQuery.error( jsonpCallback + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Delegate to script
- return "script";
- }
-});
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
- accepts: {
- script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /javascript|ecmascript/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- s.global = false;
- }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
- // This transport only deals with cross domain requests
- if ( s.crossDomain ) {
-
- var script,
- head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
-
- return {
-
- send: function( _, callback ) {
-
- script = document.createElement( "script" );
-
- script.async = "async";
-
- if ( s.scriptCharset ) {
- script.charset = s.scriptCharset;
- }
-
- script.src = s.url;
-
- // Attach handlers for all browsers
- script.onload = script.onreadystatechange = function( _, isAbort ) {
-
- if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
- // Handle memory leak in IE
- script.onload = script.onreadystatechange = null;
-
- // Remove the script
- if ( head && script.parentNode ) {
- head.removeChild( script );
- }
-
- // Dereference the script
- script = undefined;
-
- // Callback if not abort
- if ( !isAbort ) {
- callback( 200, "success" );
- }
- }
- };
- // Use insertBefore instead of appendChild to circumvent an IE6 bug.
- // This arises when a base node is used (#2709 and #4378).
- head.insertBefore( script, head.firstChild );
- },
-
- abort: function() {
- if ( script ) {
- script.onload( 0, 1 );
- }
- }
- };
- }
-});
-
-
-
-
-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
- xhrOnUnloadAbort = window.ActiveXObject ? function() {
- // Abort all pending requests
- for ( var key in xhrCallbacks ) {
- xhrCallbacks[ key ]( 0, 1 );
- }
- } : false,
- xhrId = 0,
- xhrCallbacks;
-
-// Functions to create xhrs
-function createStandardXHR() {
- try {
- return new window.XMLHttpRequest();
- } catch( e ) {}
-}
-
-function createActiveXHR() {
- try {
- return new window.ActiveXObject( "Microsoft.XMLHTTP" );
- } catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
- /* Microsoft failed to properly
- * implement the XMLHttpRequest in IE7 (can't request local files),
- * so we use the ActiveXObject when it is available
- * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
- * we need a fallback.
- */
- function() {
- return !this.isLocal && createStandardXHR() || createActiveXHR();
- } :
- // For all other browsers, use the standard XMLHttpRequest object
- createStandardXHR;
-
-// Determine support properties
-(function( xhr ) {
- jQuery.extend( jQuery.support, {
- ajax: !!xhr,
- cors: !!xhr && ( "withCredentials" in xhr )
- });
-})( jQuery.ajaxSettings.xhr() );
-
-// Create transport if the browser can provide an xhr
-if ( jQuery.support.ajax ) {
-
- jQuery.ajaxTransport(function( s ) {
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( !s.crossDomain || jQuery.support.cors ) {
-
- var callback;
-
- return {
- send: function( headers, complete ) {
-
- // Get a new xhr
- var xhr = s.xhr(),
- handle,
- i;
-
- // Open the socket
- // Passing null username, generates a login popup on Opera (#2865)
- if ( s.username ) {
- xhr.open( s.type, s.url, s.async, s.username, s.password );
- } else {
- xhr.open( s.type, s.url, s.async );
- }
-
- // Apply custom fields if provided
- if ( s.xhrFields ) {
- for ( i in s.xhrFields ) {
- xhr[ i ] = s.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( s.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( s.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !s.crossDomain && !headers["X-Requested-With"] ) {
- headers[ "X-Requested-With" ] = "XMLHttpRequest";
- }
-
- // Need an extra try/catch for cross domain requests in Firefox 3
- try {
- for ( i in headers ) {
- xhr.setRequestHeader( i, headers[ i ] );
- }
- } catch( _ ) {}
-
- // Do send the request
- // This may raise an exception which is actually
- // handled in jQuery.ajax (so no try/catch here)
- xhr.send( ( s.hasContent && s.data ) || null );
-
- // Listener
- callback = function( _, isAbort ) {
-
- var status,
- statusText,
- responseHeaders,
- responses,
- xml;
-
- // Firefox throws exceptions when accessing properties
- // of an xhr when a network error occured
- // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
- try {
-
- // Was never called and is aborted or complete
- if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
- // Only called once
- callback = undefined;
-
- // Do not keep as active anymore
- if ( handle ) {
- xhr.onreadystatechange = jQuery.noop;
- if ( xhrOnUnloadAbort ) {
- delete xhrCallbacks[ handle ];
- }
- }
-
- // If it's an abort
- if ( isAbort ) {
- // Abort it manually if needed
- if ( xhr.readyState !== 4 ) {
- xhr.abort();
- }
- } else {
- status = xhr.status;
- responseHeaders = xhr.getAllResponseHeaders();
- responses = {};
- xml = xhr.responseXML;
-
- // Construct response list
- if ( xml && xml.documentElement /* #4958 */ ) {
- responses.xml = xml;
- }
-
- // When requesting binary data, IE6-9 will throw an exception
- // on any attempt to access responseText (#11426)
- try {
- responses.text = xhr.responseText;
- } catch( _ ) {
- }
-
- // Firefox throws an exception when accessing
- // statusText for faulty cross-domain requests
- try {
- statusText = xhr.statusText;
- } catch( e ) {
- // We normalize with Webkit giving an empty statusText
- statusText = "";
- }
-
- // Filter status for non standard behaviors
-
- // If the request is local and we have data: assume a success
- // (success with no data won't get notified, that's the best we
- // can do given current implementations)
- if ( !status && s.isLocal && !s.crossDomain ) {
- status = responses.text ? 200 : 404;
- // IE - #1450: sometimes returns 1223 when it should be 204
- } else if ( status === 1223 ) {
- status = 204;
- }
- }
- }
- } catch( firefoxAccessException ) {
- if ( !isAbort ) {
- complete( -1, firefoxAccessException );
- }
- }
-
- // Call complete if needed
- if ( responses ) {
- complete( status, statusText, responses, responseHeaders );
- }
- };
-
- // if we're in sync mode or it's in cache
- // and has been retrieved directly (IE6 & IE7)
- // we need to manually fire the callback
- if ( !s.async || xhr.readyState === 4 ) {
- callback();
- } else {
- handle = ++xhrId;
- if ( xhrOnUnloadAbort ) {
- // Create the active xhrs callbacks list if needed
- // and attach the unload handler
- if ( !xhrCallbacks ) {
- xhrCallbacks = {};
- jQuery( window ).unload( xhrOnUnloadAbort );
- }
- // Add to list of active xhrs callbacks
- xhrCallbacks[ handle ] = callback;
- }
- xhr.onreadystatechange = callback;
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback(0,1);
- }
- }
- };
- }
- });
-}
-
-
-
-
-var elemdisplay = {},
- iframe, iframeDoc,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
- timerId,
- fxAttrs = [
- // height animations
- [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
- // width animations
- [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
- // opacity animations
- [ "opacity" ]
- ],
- fxNow;
-
-jQuery.fn.extend({
- show: function( speed, easing, callback ) {
- var elem, display;
-
- if ( speed || speed === 0 ) {
- return this.animate( genFx("show", 3), speed, easing, callback );
-
- } else {
- for ( var i = 0, j = this.length; i < j; i++ ) {
- elem = this[ i ];
-
- if ( elem.style ) {
- display = elem.style.display;
-
- // Reset the inline display of this element to learn if it is
- // being hidden by cascaded rules or not
- if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
- display = elem.style.display = "";
- }
-
- // Set elements which have been overridden with display: none
- // in a stylesheet to whatever the default browser style is
- // for such an element
- if ( (display === "" && jQuery.css(elem, "display") === "none") ||
- !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
- jQuery._data( elem, "olddisplay", defaultDisplay(elem.nodeName) );
- }
- }
- }
-
- // Set the display of most of the elements in a second loop
- // to avoid the constant reflow
- for ( i = 0; i < j; i++ ) {
- elem = this[ i ];
-
- if ( elem.style ) {
- display = elem.style.display;
-
- if ( display === "" || display === "none" ) {
- elem.style.display = jQuery._data( elem, "olddisplay" ) || "";
- }
- }
- }
-
- return this;
- }
- },
-
- hide: function( speed, easing, callback ) {
- if ( speed || speed === 0 ) {
- return this.animate( genFx("hide", 3), speed, easing, callback);
-
- } else {
- var elem, display,
- i = 0,
- j = this.length;
-
- for ( ; i < j; i++ ) {
- elem = this[i];
- if ( elem.style ) {
- display = jQuery.css( elem, "display" );
-
- if ( display !== "none" && !jQuery._data( elem, "olddisplay" ) ) {
- jQuery._data( elem, "olddisplay", display );
- }
- }
- }
-
- // Set the display of the elements in a second loop
- // to avoid the constant reflow
- for ( i = 0; i < j; i++ ) {
- if ( this[i].style ) {
- this[i].style.display = "none";
- }
- }
-
- return this;
- }
- },
-
- // Save the old toggle function
- _toggle: jQuery.fn.toggle,
-
- toggle: function( fn, fn2, callback ) {
- var bool = typeof fn === "boolean";
-
- if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
- this._toggle.apply( this, arguments );
-
- } else if ( fn == null || bool ) {
- this.each(function() {
- var state = bool ? fn : jQuery(this).is(":hidden");
- jQuery(this)[ state ? "show" : "hide" ]();
- });
-
- } else {
- this.animate(genFx("toggle", 3), fn, fn2, callback);
- }
-
- return this;
- },
-
- fadeTo: function( speed, to, easing, callback ) {
- return this.filter(":hidden").css("opacity", 0).show().end()
- .animate({opacity: to}, speed, easing, callback);
- },
-
- animate: function( prop, speed, easing, callback ) {
- var optall = jQuery.speed( speed, easing, callback );
-
- if ( jQuery.isEmptyObject( prop ) ) {
- return this.each( optall.complete, [ false ] );
- }
-
- // Do not change referenced properties as per-property easing will be lost
- prop = jQuery.extend( {}, prop );
-
- function doAnimation() {
- // XXX 'this' does not always have a nodeName when running the
- // test suite
-
- if ( optall.queue === false ) {
- jQuery._mark( this );
- }
-
- var opt = jQuery.extend( {}, optall ),
- isElement = this.nodeType === 1,
- hidden = isElement && jQuery(this).is(":hidden"),
- name, val, p, e, hooks, replace,
- parts, start, end, unit,
- method;
-
- // will store per property easing and be used to determine when an animation is complete
- opt.animatedProperties = {};
-
- // first pass over propertys to expand / normalize
- for ( p in prop ) {
- name = jQuery.camelCase( p );
- if ( p !== name ) {
- prop[ name ] = prop[ p ];
- delete prop[ p ];
- }
-
- if ( ( hooks = jQuery.cssHooks[ name ] ) && "expand" in hooks ) {
- replace = hooks.expand( prop[ name ] );
- delete prop[ name ];
-
- // not quite $.extend, this wont overwrite keys already present.
- // also - reusing 'p' from above because we have the correct "name"
- for ( p in replace ) {
- if ( ! ( p in prop ) ) {
- prop[ p ] = replace[ p ];
- }
- }
- }
- }
-
- for ( name in prop ) {
- val = prop[ name ];
- // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
- if ( jQuery.isArray( val ) ) {
- opt.animatedProperties[ name ] = val[ 1 ];
- val = prop[ name ] = val[ 0 ];
- } else {
- opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
- }
-
- if ( val === "hide" && hidden || val === "show" && !hidden ) {
- return opt.complete.call( this );
- }
-
- if ( isElement && ( name === "height" || name === "width" ) ) {
- // Make sure that nothing sneaks out
- // Record all 3 overflow attributes because IE does not
- // change the overflow attribute when overflowX and
- // overflowY are set to the same value
- opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
-
- // Set display property to inline-block for height/width
- // animations on inline elements that are having width/height animated
- if ( jQuery.css( this, "display" ) === "inline" &&
- jQuery.css( this, "float" ) === "none" ) {
-
- // inline-level elements accept inline-block;
- // block-level elements need to be inline with layout
- if ( !jQuery.support.inlineBlockNeedsLayout || defaultDisplay( this.nodeName ) === "inline" ) {
- this.style.display = "inline-block";
-
- } else {
- this.style.zoom = 1;
- }
- }
- }
- }
-
- if ( opt.overflow != null ) {
- this.style.overflow = "hidden";
- }
-
- for ( p in prop ) {
- e = new jQuery.fx( this, opt, p );
- val = prop[ p ];
-
- if ( rfxtypes.test( val ) ) {
-
- // Tracks whether to show or hide based on private
- // data attached to the element
- method = jQuery._data( this, "toggle" + p ) || ( val === "toggle" ? hidden ? "show" : "hide" : 0 );
- if ( method ) {
- jQuery._data( this, "toggle" + p, method === "show" ? "hide" : "show" );
- e[ method ]();
- } else {
- e[ val ]();
- }
-
- } else {
- parts = rfxnum.exec( val );
- start = e.cur();
-
- if ( parts ) {
- end = parseFloat( parts[2] );
- unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
-
- // We need to compute starting value
- if ( unit !== "px" ) {
- jQuery.style( this, p, (end || 1) + unit);
- start = ( (end || 1) / e.cur() ) * start;
- jQuery.style( this, p, start + unit);
- }
-
- // If a +=/-= token was provided, we're doing a relative animation
- if ( parts[1] ) {
- end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
- }
-
- e.custom( start, end, unit );
-
- } else {
- e.custom( start, val, "" );
- }
- }
- }
-
- // For JS strict compliance
- return true;
- }
-
- return optall.queue === false ?
- this.each( doAnimation ) :
- this.queue( optall.queue, doAnimation );
- },
-
- stop: function( type, clearQueue, gotoEnd ) {
- if ( typeof type !== "string" ) {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if ( clearQueue && type !== false ) {
- this.queue( type || "fx", [] );
- }
-
- return this.each(function() {
- var index,
- hadTimers = false,
- timers = jQuery.timers,
- data = jQuery._data( this );
-
- // clear marker counters if we know they won't be
- if ( !gotoEnd ) {
- jQuery._unmark( true, this );
- }
-
- function stopQueue( elem, data, index ) {
- var hooks = data[ index ];
- jQuery.removeData( elem, index, true );
- hooks.stop( gotoEnd );
- }
-
- if ( type == null ) {
- for ( index in data ) {
- if ( data[ index ] && data[ index ].stop && index.indexOf(".run") === index.length - 4 ) {
- stopQueue( this, data, index );
- }
- }
- } else if ( data[ index = type + ".run" ] && data[ index ].stop ){
- stopQueue( this, data, index );
- }
-
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
- if ( gotoEnd ) {
-
- // force the next step to be the last
- timers[ index ]( true );
- } else {
- timers[ index ].saveState();
- }
- hadTimers = true;
- timers.splice( index, 1 );
- }
- }
-
- // start the next in the queue if the last step wasn't forced
- // timers currently will call their complete callbacks, which will dequeue
- // but only if they were gotoEnd
- if ( !( gotoEnd && hadTimers ) ) {
- jQuery.dequeue( this, type );
- }
- });
- }
-
-});
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- setTimeout( clearFxNow, 0 );
- return ( fxNow = jQuery.now() );
-}
-
-function clearFxNow() {
- fxNow = undefined;
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, num ) {
- var obj = {};
-
- jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice( 0, num )), function() {
- obj[ this ] = type;
- });
-
- return obj;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
- slideDown: genFx( "show", 1 ),
- slideUp: genFx( "hide", 1 ),
- slideToggle: genFx( "toggle", 1 ),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-});
-
-jQuery.extend({
- speed: function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
- };
-
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
- opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
- // normalize opt.queue - true/undefined/null -> "fx"
- if ( opt.queue == null || opt.queue === true ) {
- opt.queue = "fx";
- }
-
- // Queueing
- opt.old = opt.complete;
-
- opt.complete = function( noUnmark ) {
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue ) {
- jQuery.dequeue( this, opt.queue );
- } else if ( noUnmark !== false ) {
- jQuery._unmark( this );
- }
- };
-
- return opt;
- },
-
- easing: {
- linear: function( p ) {
- return p;
- },
- swing: function( p ) {
- return ( -Math.cos( p*Math.PI ) / 2 ) + 0.5;
- }
- },
-
- timers: [],
-
- fx: function( elem, options, prop ) {
- this.options = options;
- this.elem = elem;
- this.prop = prop;
-
- options.orig = options.orig || {};
- }
-
-});
-
-jQuery.fx.prototype = {
- // Simple function for setting a style value
- update: function() {
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- ( jQuery.fx.step[ this.prop ] || jQuery.fx.step._default )( this );
- },
-
- // Get the current size
- cur: function() {
- if ( this.elem[ this.prop ] != null && (!this.elem.style || this.elem.style[ this.prop ] == null) ) {
- return this.elem[ this.prop ];
- }
-
- var parsed,
- r = jQuery.css( this.elem, this.prop );
- // Empty strings, null, undefined and "auto" are converted to 0,
- // complex values such as "rotate(1rad)" are returned as is,
- // simple values such as "10px" are parsed to Float.
- return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
- },
-
- // Start an animation from one number to another
- custom: function( from, to, unit ) {
- var self = this,
- fx = jQuery.fx;
-
- this.startTime = fxNow || createFxNow();
- this.end = to;
- this.now = this.start = from;
- this.pos = this.state = 0;
- this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
-
- function t( gotoEnd ) {
- return self.step( gotoEnd );
- }
-
- t.queue = this.options.queue;
- t.elem = this.elem;
- t.saveState = function() {
- if ( jQuery._data( self.elem, "fxshow" + self.prop ) === undefined ) {
- if ( self.options.hide ) {
- jQuery._data( self.elem, "fxshow" + self.prop, self.start );
- } else if ( self.options.show ) {
- jQuery._data( self.elem, "fxshow" + self.prop, self.end );
- }
- }
- };
-
- if ( t() && jQuery.timers.push(t) && !timerId ) {
- timerId = setInterval( fx.tick, fx.interval );
- }
- },
-
- // Simple 'show' function
- show: function() {
- var dataShow = jQuery._data( this.elem, "fxshow" + this.prop );
-
- // Remember where we started, so that we can go back to it later
- this.options.orig[ this.prop ] = dataShow || jQuery.style( this.elem, this.prop );
- this.options.show = true;
-
- // Begin the animation
- // Make sure that we start at a small width/height to avoid any flash of content
- if ( dataShow !== undefined ) {
- // This show is picking up where a previous hide or show left off
- this.custom( this.cur(), dataShow );
- } else {
- this.custom( this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur() );
- }
-
- // Start by showing the element
- jQuery( this.elem ).show();
- },
-
- // Simple 'hide' function
- hide: function() {
- // Remember where we started, so that we can go back to it later
- this.options.orig[ this.prop ] = jQuery._data( this.elem, "fxshow" + this.prop ) || jQuery.style( this.elem, this.prop );
- this.options.hide = true;
-
- // Begin the animation
- this.custom( this.cur(), 0 );
- },
-
- // Each step of an animation
- step: function( gotoEnd ) {
- var p, n, complete,
- t = fxNow || createFxNow(),
- done = true,
- elem = this.elem,
- options = this.options;
-
- if ( gotoEnd || t >= options.duration + this.startTime ) {
- this.now = this.end;
- this.pos = this.state = 1;
- this.update();
-
- options.animatedProperties[ this.prop ] = true;
-
- for ( p in options.animatedProperties ) {
- if ( options.animatedProperties[ p ] !== true ) {
- done = false;
- }
- }
-
- if ( done ) {
- // Reset the overflow
- if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
-
- jQuery.each( [ "", "X", "Y" ], function( index, value ) {
- elem.style[ "overflow" + value ] = options.overflow[ index ];
- });
- }
-
- // Hide the element if the "hide" operation was done
- if ( options.hide ) {
- jQuery( elem ).hide();
- }
-
- // Reset the properties, if the item has been hidden or shown
- if ( options.hide || options.show ) {
- for ( p in options.animatedProperties ) {
- jQuery.style( elem, p, options.orig[ p ] );
- jQuery.removeData( elem, "fxshow" + p, true );
- // Toggle data is no longer needed
- jQuery.removeData( elem, "toggle" + p, true );
- }
- }
-
- // Execute the complete function
- // in the event that the complete function throws an exception
- // we must ensure it won't be called twice. #5684
-
- complete = options.complete;
- if ( complete ) {
-
- options.complete = false;
- complete.call( elem );
- }
- }
-
- return false;
-
- } else {
- // classical easing cannot be used with an Infinity duration
- if ( options.duration == Infinity ) {
- this.now = t;
- } else {
- n = t - this.startTime;
- this.state = n / options.duration;
-
- // Perform the easing function, defaults to swing
- this.pos = jQuery.easing[ options.animatedProperties[this.prop] ]( this.state, n, 0, 1, options.duration );
- this.now = this.start + ( (this.end - this.start) * this.pos );
- }
- // Perform the next step of the animation
- this.update();
- }
-
- return true;
- }
-};
-
-jQuery.extend( jQuery.fx, {
- tick: function() {
- var timer,
- timers = jQuery.timers,
- i = 0;
-
- for ( ; i < timers.length; i++ ) {
- timer = timers[ i ];
- // Checks the timer has not already been removed
- if ( !timer() && timers[ i ] === timer ) {
- timers.splice( i--, 1 );
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- },
-
- interval: 13,
-
- stop: function() {
- clearInterval( timerId );
- timerId = null;
- },
-
- speeds: {
- slow: 600,
- fast: 200,
- // Default speed
- _default: 400
- },
-
- step: {
- opacity: function( fx ) {
- jQuery.style( fx.elem, "opacity", fx.now );
- },
-
- _default: function( fx ) {
- if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
- fx.elem.style[ fx.prop ] = fx.now + fx.unit;
- } else {
- fx.elem[ fx.prop ] = fx.now;
- }
- }
- }
-});
-
-// Ensure props that can't be negative don't go there on undershoot easing
-jQuery.each( fxAttrs.concat.apply( [], fxAttrs ), function( i, prop ) {
- // exclude marginTop, marginLeft, marginBottom and marginRight from this list
- if ( prop.indexOf( "margin" ) ) {
- jQuery.fx.step[ prop ] = function( fx ) {
- jQuery.style( fx.elem, prop, Math.max(0, fx.now) + fx.unit );
- };
- }
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.animated = function( elem ) {
- return jQuery.grep(jQuery.timers, function( fn ) {
- return elem === fn.elem;
- }).length;
- };
-}
-
-// Try to restore the default display value of an element
-function defaultDisplay( nodeName ) {
-
- if ( !elemdisplay[ nodeName ] ) {
-
- var body = document.body,
- elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
- display = elem.css( "display" );
- elem.remove();
-
- // If the simple way fails,
- // get element's real default display by attaching it to a temp iframe
- if ( display === "none" || display === "" ) {
- // No iframe to use yet, so create it
- if ( !iframe ) {
- iframe = document.createElement( "iframe" );
- iframe.frameBorder = iframe.width = iframe.height = 0;
- }
-
- body.appendChild( iframe );
-
- // Create a cacheable copy of the iframe document on first call.
- // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
- // document to it; WebKit & Firefox won't allow reusing the iframe document.
- if ( !iframeDoc || !iframe.createElement ) {
- iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
- iframeDoc.write( ( jQuery.support.boxModel ? "<!doctype html>" : "" ) + "<html><body>" );
- iframeDoc.close();
- }
-
- elem = iframeDoc.createElement( nodeName );
-
- iframeDoc.body.appendChild( elem );
-
- display = jQuery.css( elem, "display" );
- body.removeChild( iframe );
- }
-
- // Store the correct default display
- elemdisplay[ nodeName ] = display;
- }
-
- return elemdisplay[ nodeName ];
-}
-
-
-
-
-var getOffset,
- rtable = /^t(?:able|d|h)$/i,
- rroot = /^(?:body|html)$/i;
-
-if ( "getBoundingClientRect" in document.documentElement ) {
- getOffset = function( elem, doc, docElem, box ) {
- try {
- box = elem.getBoundingClientRect();
- } catch(e) {}
-
- // Make sure we're not dealing with a disconnected DOM node
- if ( !box || !jQuery.contains( docElem, elem ) ) {
- return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
- }
-
- var body = doc.body,
- win = getWindow( doc ),
- clientTop = docElem.clientTop || body.clientTop || 0,
- clientLeft = docElem.clientLeft || body.clientLeft || 0,
- scrollTop = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop,
- scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
- top = box.top + scrollTop - clientTop,
- left = box.left + scrollLeft - clientLeft;
-
- return { top: top, left: left };
- };
-
-} else {
- getOffset = function( elem, doc, docElem ) {
- var computedStyle,
- offsetParent = elem.offsetParent,
- prevOffsetParent = elem,
- body = doc.body,
- defaultView = doc.defaultView,
- prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
- top = elem.offsetTop,
- left = elem.offsetLeft;
-
- while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
- if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
- break;
- }
-
- computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
- top -= elem.scrollTop;
- left -= elem.scrollLeft;
-
- if ( elem === offsetParent ) {
- top += elem.offsetTop;
- left += elem.offsetLeft;
-
- if ( jQuery.support.doesNotAddBorder && !(jQuery.support.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
- top += parseFloat( computedStyle.borderTopWidth ) || 0;
- left += parseFloat( computedStyle.borderLeftWidth ) || 0;
- }
-
- prevOffsetParent = offsetParent;
- offsetParent = elem.offsetParent;
- }
-
- if ( jQuery.support.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
- top += parseFloat( computedStyle.borderTopWidth ) || 0;
- left += parseFloat( computedStyle.borderLeftWidth ) || 0;
- }
-
- prevComputedStyle = computedStyle;
- }
-
- if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
- top += body.offsetTop;
- left += body.offsetLeft;
- }
-
- if ( jQuery.support.fixedPosition && prevComputedStyle.position === "fixed" ) {
- top += Math.max( docElem.scrollTop, body.scrollTop );
- left += Math.max( docElem.scrollLeft, body.scrollLeft );
- }
-
- return { top: top, left: left };
- };
-}
-
-jQuery.fn.offset = function( options ) {
- if ( arguments.length ) {
- return options === undefined ?
- this :
- this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- var elem = this[0],
- doc = elem && elem.ownerDocument;
-
- if ( !doc ) {
- return null;
- }
-
- if ( elem === doc.body ) {
- return jQuery.offset.bodyOffset( elem );
- }
-
- return getOffset( elem, doc, doc.documentElement );
-};
-
-jQuery.offset = {
-
- bodyOffset: function( body ) {
- var top = body.offsetTop,
- left = body.offsetLeft;
-
- if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
- top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
- left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
- }
-
- return { top: top, left: left };
- },
-
- setOffset: function( elem, options, i ) {
- var position = jQuery.css( elem, "position" );
-
- // set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- var curElem = jQuery( elem ),
- curOffset = curElem.offset(),
- curCSSTop = jQuery.css( elem, "top" ),
- curCSSLeft = jQuery.css( elem, "left" ),
- calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
- props = {}, curPosition = {}, curTop, curLeft;
-
- // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( jQuery.isFunction( options ) ) {
- options = options.call( elem, i, curOffset );
- }
-
- if ( options.top != null ) {
- props.top = ( options.top - curOffset.top ) + curTop;
- }
- if ( options.left != null ) {
- props.left = ( options.left - curOffset.left ) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
- } else {
- curElem.css( props );
- }
- }
-};
-
-
-jQuery.fn.extend({
-
- position: function() {
- if ( !this[0] ) {
- return null;
- }
-
- var elem = this[0],
-
- // Get *real* offsetParent
- offsetParent = this.offsetParent(),
-
- // Get correct offsets
- offset = this.offset(),
- parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
-
- // Subtract element margins
- // note: when an element has margin: auto the offsetLeft and marginLeft
- // are the same in Safari causing offset.left to incorrectly be 0
- offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
- offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
-
- // Add offsetParent borders
- parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
- parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
-
- // Subtract the two offsets
- return {
- top: offset.top - parentOffset.top,
- left: offset.left - parentOffset.left
- };
- },
-
- offsetParent: function() {
- return this.map(function() {
- var offsetParent = this.offsetParent || document.body;
- while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
- offsetParent = offsetParent.offsetParent;
- }
- return offsetParent;
- });
- }
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
- var top = /Y/.test( prop );
-
- jQuery.fn[ method ] = function( val ) {
- return jQuery.access( this, function( elem, method, val ) {
- var win = getWindow( elem );
-
- if ( val === undefined ) {
- return win ? (prop in win) ? win[ prop ] :
- jQuery.support.boxModel && win.document.documentElement[ method ] ||
- win.document.body[ method ] :
- elem[ method ];
- }
-
- if ( win ) {
- win.scrollTo(
- !top ? val : jQuery( win ).scrollLeft(),
- top ? val : jQuery( win ).scrollTop()
- );
-
- } else {
- elem[ method ] = val;
- }
- }, method, val, arguments.length, null );
- };
-});
-
-function getWindow( elem ) {
- return jQuery.isWindow( elem ) ?
- elem :
- elem.nodeType === 9 ?
- elem.defaultView || elem.parentWindow :
- false;
-}
-
-
-
-
-// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
- var clientProp = "client" + name,
- scrollProp = "scroll" + name,
- offsetProp = "offset" + name;
-
- // innerHeight and innerWidth
- jQuery.fn[ "inner" + name ] = function() {
- var elem = this[0];
- return elem ?
- elem.style ?
- parseFloat( jQuery.css( elem, type, "padding" ) ) :
- this[ type ]() :
- null;
- };
-
- // outerHeight and outerWidth
- jQuery.fn[ "outer" + name ] = function( margin ) {
- var elem = this[0];
- return elem ?
- elem.style ?
- parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
- this[ type ]() :
- null;
- };
-
- jQuery.fn[ type ] = function( value ) {
- return jQuery.access( this, function( elem, type, value ) {
- var doc, docElemProp, orig, ret;
-
- if ( jQuery.isWindow( elem ) ) {
- // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
- doc = elem.document;
- docElemProp = doc.documentElement[ clientProp ];
- return jQuery.support.boxModel && docElemProp ||
- doc.body && doc.body[ clientProp ] || docElemProp;
- }
-
- // Get document width or height
- if ( elem.nodeType === 9 ) {
- // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
- doc = elem.documentElement;
-
- // when a window > document, IE6 reports a offset[Width/Height] > client[Width/Height]
- // so we can't use max, as it'll choose the incorrect offset[Width/Height]
- // instead we use the correct client[Width/Height]
- // support:IE6
- if ( doc[ clientProp ] >= doc[ scrollProp ] ) {
- return doc[ clientProp ];
- }
-
- return Math.max(
- elem.body[ scrollProp ], doc[ scrollProp ],
- elem.body[ offsetProp ], doc[ offsetProp ]
- );
- }
-
- // Get width or height on the element
- if ( value === undefined ) {
- orig = jQuery.css( elem, type );
- ret = parseFloat( orig );
- return jQuery.isNumeric( ret ) ? ret : orig;
- }
-
- // Set the width or height on the element
- jQuery( elem ).css( type, value );
- }, type, value, arguments.length, null );
- };
-});
-
-
-
-
-// Expose jQuery to the global object
-window.jQuery = window.$ = jQuery;
-
-// Expose jQuery as an AMD module, but only for AMD loaders that
-// understand the issues with loading multiple versions of jQuery
-// in a page that all might call define(). The loader will indicate
-// they have special allowances for multiple jQuery versions by
-// specifying define.amd.jQuery = true. Register as a named module,
-// since jQuery can be concatenated with other files that may use define,
-// but not use a proper concatenation script that understands anonymous
-// AMD modules. A named AMD is safest and most robust way to register.
-// Lowercase jquery is used because AMD module names are derived from
-// file names, and jQuery is normally delivered in a lowercase file name.
-// Do this after creating the global so that if an AMD module wants to call
-// noConflict to hide this version of jQuery, it will work.
-if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
- define( "jquery", [], function () { return jQuery; } );
-}
-
-
-
-})( window );
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery-1.8.3.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery-1.8.3.js
deleted file mode 100644
index e6e07fc6..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery-1.8.3.js
+++ /dev/null
@@ -1,9472 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.8.3
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright 2012 jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time)
- */
-(function( window, undefined ) {
-var
- // A central reference to the root jQuery(document)
- rootjQuery,
-
- // The deferred used on DOM ready
- readyList,
-
- // Use the correct document accordingly with window argument (sandbox)
- document = window.document,
- location = window.location,
- navigator = window.navigator,
-
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$,
-
- // Save a reference to some core methods
- core_push = Array.prototype.push,
- core_slice = Array.prototype.slice,
- core_indexOf = Array.prototype.indexOf,
- core_toString = Object.prototype.toString,
- core_hasOwn = Object.prototype.hasOwnProperty,
- core_trim = String.prototype.trim,
-
- // Define a local copy of jQuery
- jQuery = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- return new jQuery.fn.init( selector, context, rootjQuery );
- },
-
- // Used for matching numbers
- core_pnum = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,
-
- // Used for detecting and trimming whitespace
- core_rnotwhite = /\S/,
- core_rspace = /\s+/,
-
- // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
- rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
- // A simple way to check for HTML strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- rquickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-
- // Match a standalone tag
- rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
-
- // JSON RegExp
- rvalidchars = /^[\],:{}\s]*$/,
- rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
- rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
- rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,
-
- // Matches dashed string for camelizing
- rmsPrefix = /^-ms-/,
- rdashAlpha = /-([\da-z])/gi,
-
- // Used by jQuery.camelCase as callback to replace()
- fcamelCase = function( all, letter ) {
- return ( letter + "" ).toUpperCase();
- },
-
- // The ready event handler and self cleanup method
- DOMContentLoaded = function() {
- if ( document.addEventListener ) {
- document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
- jQuery.ready();
- } else if ( document.readyState === "complete" ) {
- // we're here because readyState === "complete" in oldIE
- // which is good enough for us to call the dom ready!
- document.detachEvent( "onreadystatechange", DOMContentLoaded );
- jQuery.ready();
- }
- },
-
- // [[Class]] -> type pairs
- class2type = {};
-
-jQuery.fn = jQuery.prototype = {
- constructor: jQuery,
- init: function( selector, context, rootjQuery ) {
- var match, elem, ret, doc;
-
- // Handle $(""), $(null), $(undefined), $(false)
- if ( !selector ) {
- return this;
- }
-
- // Handle $(DOMElement)
- if ( selector.nodeType ) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
- }
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = rquickExpr.exec( selector );
- }
-
- // Match html or make sure no context is specified for #id
- if ( match && (match[1] || !context) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[1] ) {
- context = context instanceof jQuery ? context[0] : context;
- doc = ( context && context.nodeType ? context.ownerDocument || context : document );
-
- // scripts is true for back-compat
- selector = jQuery.parseHTML( match[1], doc, true );
- if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
- this.attr.call( selector, context, true );
- }
-
- return jQuery.merge( this, selector );
-
- // HANDLE: $(#id)
- } else {
- elem = document.getElementById( match[2] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id !== match[2] ) {
- return rootjQuery.find( selector );
- }
-
- // Otherwise, we inject the element directly into the jQuery object
- this.length = 1;
- this[0] = elem;
- }
-
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return ( context || rootjQuery ).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return rootjQuery.ready( selector );
- }
-
- if ( selector.selector !== undefined ) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray( selector, this );
- },
-
- // Start with an empty selector
- selector: "",
-
- // The current version of jQuery being used
- jquery: "1.8.3",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- // The number of elements contained in the matched element set
- size: function() {
- return this.length;
- },
-
- toArray: function() {
- return core_slice.call( this );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num == null ?
-
- // Return a 'clean' array
- this.toArray() :
-
- // Return just the object
- ( num < 0 ? this[ this.length + num ] : this[ num ] );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems, name, selector ) {
-
- // Build a new jQuery matched element set
- var ret = jQuery.merge( this.constructor(), elems );
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
-
- ret.context = this.context;
-
- if ( name === "find" ) {
- ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
- } else if ( name ) {
- ret.selector = this.selector + "." + name + "(" + selector + ")";
- }
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- // (You can seed the arguments with an array of args, but this is
- // only used internally.)
- each: function( callback, args ) {
- return jQuery.each( this, callback, args );
- },
-
- ready: function( fn ) {
- // Add the callback
- jQuery.ready.promise().done( fn );
-
- return this;
- },
-
- eq: function( i ) {
- i = +i;
- return i === -1 ?
- this.slice( i ) :
- this.slice( i, i + 1 );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- slice: function() {
- return this.pushStack( core_slice.apply( this, arguments ),
- "slice", core_slice.call(arguments).join(",") );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function( elem, i ) {
- return callback.call( elem, i, elem );
- }));
- },
-
- end: function() {
- return this.prevObject || this.constructor(null);
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: core_push,
- sort: [].sort,
- splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
- var options, name, src, copy, copyIsArray, clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
- target = arguments[1] || {};
- // skip the boolean and the target
- i = 2;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
- target = {};
- }
-
- // extend jQuery itself if only one argument is passed
- if ( length === i ) {
- target = this;
- --i;
- }
-
- for ( ; i < length; i++ ) {
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null ) {
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray(src) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject(src) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend({
- noConflict: function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
- },
-
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
-
- // Abort if there are pending holds or we're already ready
- if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
- return;
- }
-
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( !document.body ) {
- return setTimeout( jQuery.ready, 1 );
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ jQuery ] );
-
- // Trigger any bound ready events
- if ( jQuery.fn.trigger ) {
- jQuery( document ).trigger("ready").off("ready");
- }
- },
-
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return jQuery.type(obj) === "function";
- },
-
- isArray: Array.isArray || function( obj ) {
- return jQuery.type(obj) === "array";
- },
-
- isWindow: function( obj ) {
- return obj != null && obj == obj.window;
- },
-
- isNumeric: function( obj ) {
- return !isNaN( parseFloat(obj) ) && isFinite( obj );
- },
-
- type: function( obj ) {
- return obj == null ?
- String( obj ) :
- class2type[ core_toString.call(obj) ] || "object";
- },
-
- isPlainObject: function( obj ) {
- // Must be an Object.
- // Because of IE, we also have to check the presence of the constructor property.
- // Make sure that DOM nodes and window objects don't pass through, as well
- if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- try {
- // Not own constructor property must be Object
- if ( obj.constructor &&
- !core_hasOwn.call(obj, "constructor") &&
- !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
- return false;
- }
- } catch ( e ) {
- // IE8,9 Will throw exceptions on certain host objects #9897
- return false;
- }
-
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own.
-
- var key;
- for ( key in obj ) {}
-
- return key === undefined || core_hasOwn.call( obj, key );
- },
-
- isEmptyObject: function( obj ) {
- var name;
- for ( name in obj ) {
- return false;
- }
- return true;
- },
-
- error: function( msg ) {
- throw new Error( msg );
- },
-
- // data: string of html
- // context (optional): If specified, the fragment will be created in this context, defaults to document
- // scripts (optional): If true, will include scripts passed in the html string
- parseHTML: function( data, context, scripts ) {
- var parsed;
- if ( !data || typeof data !== "string" ) {
- return null;
- }
- if ( typeof context === "boolean" ) {
- scripts = context;
- context = 0;
- }
- context = context || document;
-
- // Single tag
- if ( (parsed = rsingleTag.exec( data )) ) {
- return [ context.createElement( parsed[1] ) ];
- }
-
- parsed = jQuery.buildFragment( [ data ], context, scripts ? null : [] );
- return jQuery.merge( [],
- (parsed.cacheable ? jQuery.clone( parsed.fragment ) : parsed.fragment).childNodes );
- },
-
- parseJSON: function( data ) {
- if ( !data || typeof data !== "string") {
- return null;
- }
-
- // Make sure leading/trailing whitespace is removed (IE can't handle it)
- data = jQuery.trim( data );
-
- // Attempt to parse using the native JSON parser first
- if ( window.JSON && window.JSON.parse ) {
- return window.JSON.parse( data );
- }
-
- // Make sure the incoming data is actual JSON
- // Logic borrowed from http://json.org/json2.js
- if ( rvalidchars.test( data.replace( rvalidescape, "@" )
- .replace( rvalidtokens, "]" )
- .replace( rvalidbraces, "")) ) {
-
- return ( new Function( "return " + data ) )();
-
- }
- jQuery.error( "Invalid JSON: " + data );
- },
-
- // Cross-browser xml parsing
- parseXML: function( data ) {
- var xml, tmp;
- if ( !data || typeof data !== "string" ) {
- return null;
- }
- try {
- if ( window.DOMParser ) { // Standard
- tmp = new DOMParser();
- xml = tmp.parseFromString( data , "text/xml" );
- } else { // IE
- xml = new ActiveXObject( "Microsoft.XMLDOM" );
- xml.async = "false";
- xml.loadXML( data );
- }
- } catch( e ) {
- xml = undefined;
- }
- if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
- },
-
- noop: function() {},
-
- // Evaluates a script in a global context
- // Workarounds based on findings by Jim Driscoll
- // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
- globalEval: function( data ) {
- if ( data && core_rnotwhite.test( data ) ) {
- // We use execScript on Internet Explorer
- // We use an anonymous function so that context is window
- // rather than jQuery in Firefox
- ( window.execScript || function( data ) {
- window[ "eval" ].call( window, data );
- } )( data );
- }
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Microsoft forgot to hump their vendor prefix (#9572)
- camelCase: function( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
- },
-
- // args is for internal usage only
- each: function( obj, callback, args ) {
- var name,
- i = 0,
- length = obj.length,
- isObj = length === undefined || jQuery.isFunction( obj );
-
- if ( args ) {
- if ( isObj ) {
- for ( name in obj ) {
- if ( callback.apply( obj[ name ], args ) === false ) {
- break;
- }
- }
- } else {
- for ( ; i < length; ) {
- if ( callback.apply( obj[ i++ ], args ) === false ) {
- break;
- }
- }
- }
-
- // A special, fast, case for the most common use of each
- } else {
- if ( isObj ) {
- for ( name in obj ) {
- if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) {
- break;
- }
- }
- } else {
- for ( ; i < length; ) {
- if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
- break;
- }
- }
- }
- }
-
- return obj;
- },
-
- // Use native String.trim function wherever possible
- trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
- function( text ) {
- return text == null ?
- "" :
- core_trim.call( text );
- } :
-
- // Otherwise use our own trimming functionality
- function( text ) {
- return text == null ?
- "" :
- ( text + "" ).replace( rtrim, "" );
- },
-
- // results is for internal usage only
- makeArray: function( arr, results ) {
- var type,
- ret = results || [];
-
- if ( arr != null ) {
- // The window, strings (and functions) also have 'length'
- // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
- type = jQuery.type( arr );
-
- if ( arr.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( arr ) ) {
- core_push.call( ret, arr );
- } else {
- jQuery.merge( ret, arr );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, arr, i ) {
- var len;
-
- if ( arr ) {
- if ( core_indexOf ) {
- return core_indexOf.call( arr, elem, i );
- }
-
- len = arr.length;
- i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
- for ( ; i < len; i++ ) {
- // Skip accessing in sparse arrays
- if ( i in arr && arr[ i ] === elem ) {
- return i;
- }
- }
- }
-
- return -1;
- },
-
- merge: function( first, second ) {
- var l = second.length,
- i = first.length,
- j = 0;
-
- if ( typeof l === "number" ) {
- for ( ; j < l; j++ ) {
- first[ i++ ] = second[ j ];
- }
-
- } else {
- while ( second[j] !== undefined ) {
- first[ i++ ] = second[ j++ ];
- }
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, inv ) {
- var retVal,
- ret = [],
- i = 0,
- length = elems.length;
- inv = !!inv;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( ; i < length; i++ ) {
- retVal = !!callback( elems[ i ], i );
- if ( inv !== retVal ) {
- ret.push( elems[ i ] );
- }
- }
-
- return ret;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var value, key,
- ret = [],
- i = 0,
- length = elems.length,
- // jquery objects are treated as arrays
- isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
-
- // Go through the array, translating each of the items to their
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( key in elems ) {
- value = callback( elems[ key ], key, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
- }
-
- // Flatten any nested arrays
- return ret.concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- var tmp, args, proxy;
-
- if ( typeof context === "string" ) {
- tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- args = core_slice.call( arguments, 2 );
- proxy = function() {
- return fn.apply( context, args.concat( core_slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
- return proxy;
- },
-
- // Multifunctional method to get and set values of a collection
- // The value/s can optionally be executed if it's a function
- access: function( elems, fn, key, value, chainable, emptyGet, pass ) {
- var exec,
- bulk = key == null,
- i = 0,
- length = elems.length;
-
- // Sets many values
- if ( key && typeof key === "object" ) {
- for ( i in key ) {
- jQuery.access( elems, fn, i, key[i], 1, emptyGet, value );
- }
- chainable = 1;
-
- // Sets one value
- } else if ( value !== undefined ) {
- // Optionally, function values get executed if exec is true
- exec = pass === undefined && jQuery.isFunction( value );
-
- if ( bulk ) {
- // Bulk operations only iterate when executing function values
- if ( exec ) {
- exec = fn;
- fn = function( elem, key, value ) {
- return exec.call( jQuery( elem ), value );
- };
-
- // Otherwise they run against the entire set
- } else {
- fn.call( elems, value );
- fn = null;
- }
- }
-
- if ( fn ) {
- for (; i < length; i++ ) {
- fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
- }
- }
-
- chainable = 1;
- }
-
- return chainable ?
- elems :
-
- // Gets
- bulk ?
- fn.call( elems ) :
- length ? fn( elems[0], key ) : emptyGet;
- },
-
- now: function() {
- return ( new Date() ).getTime();
- }
-});
-
-jQuery.ready.promise = function( obj ) {
- if ( !readyList ) {
-
- readyList = jQuery.Deferred();
-
- // Catch cases where $(document).ready() is called after the browser event has already occurred.
- // we once tried to use readyState "interactive" here, but it caused issues like the one
- // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
- if ( document.readyState === "complete" ) {
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- setTimeout( jQuery.ready, 1 );
-
- // Standards-based browsers support DOMContentLoaded
- } else if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", jQuery.ready, false );
-
- // If IE event model is used
- } else {
- // Ensure firing before onload, maybe late but safe also for iframes
- document.attachEvent( "onreadystatechange", DOMContentLoaded );
-
- // A fallback to window.onload, that will always work
- window.attachEvent( "onload", jQuery.ready );
-
- // If IE and not a frame
- // continually check to see if the document is ready
- var top = false;
-
- try {
- top = window.frameElement == null && document.documentElement;
- } catch(e) {}
-
- if ( top && top.doScroll ) {
- (function doScrollCheck() {
- if ( !jQuery.isReady ) {
-
- try {
- // Use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- top.doScroll("left");
- } catch(e) {
- return setTimeout( doScrollCheck, 50 );
- }
-
- // and execute any waiting functions
- jQuery.ready();
- }
- })();
- }
- }
- }
- return readyList.promise( obj );
-};
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-// String to Object options format cache
-var optionsCache = {};
-
-// Convert String-formatted options into Object-formatted ones and store in cache
-function createOptions( options ) {
- var object = optionsCache[ options ] = {};
- jQuery.each( options.split( core_rspace ), function( _, flag ) {
- object[ flag ] = true;
- });
- return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- * options: an optional list of space-separated options that will change how
- * the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
- // Convert options from String-formatted to Object-formatted if needed
- // (we check in cache first)
- options = typeof options === "string" ?
- ( optionsCache[ options ] || createOptions( options ) ) :
- jQuery.extend( {}, options );
-
- var // Last fire value (for non-forgettable lists)
- memory,
- // Flag to know if list was already fired
- fired,
- // Flag to know if list is currently firing
- firing,
- // First callback to fire (used internally by add and fireWith)
- firingStart,
- // End of the loop when firing
- firingLength,
- // Index of currently firing callback (modified by remove if needed)
- firingIndex,
- // Actual callback list
- list = [],
- // Stack of fire calls for repeatable lists
- stack = !options.once && [],
- // Fire callbacks
- fire = function( data ) {
- memory = options.memory && data;
- fired = true;
- firingIndex = firingStart || 0;
- firingStart = 0;
- firingLength = list.length;
- firing = true;
- for ( ; list && firingIndex < firingLength; firingIndex++ ) {
- if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
- memory = false; // To prevent further calls using add
- break;
- }
- }
- firing = false;
- if ( list ) {
- if ( stack ) {
- if ( stack.length ) {
- fire( stack.shift() );
- }
- } else if ( memory ) {
- list = [];
- } else {
- self.disable();
- }
- }
- },
- // Actual Callbacks object
- self = {
- // Add a callback or a collection of callbacks to the list
- add: function() {
- if ( list ) {
- // First, we save the current length
- var start = list.length;
- (function add( args ) {
- jQuery.each( args, function( _, arg ) {
- var type = jQuery.type( arg );
- if ( type === "function" ) {
- if ( !options.unique || !self.has( arg ) ) {
- list.push( arg );
- }
- } else if ( arg && arg.length && type !== "string" ) {
- // Inspect recursively
- add( arg );
- }
- });
- })( arguments );
- // Do we need to add the callbacks to the
- // current firing batch?
- if ( firing ) {
- firingLength = list.length;
- // With memory, if we're not firing then
- // we should call right away
- } else if ( memory ) {
- firingStart = start;
- fire( memory );
- }
- }
- return this;
- },
- // Remove a callback from the list
- remove: function() {
- if ( list ) {
- jQuery.each( arguments, function( _, arg ) {
- var index;
- while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
- list.splice( index, 1 );
- // Handle firing indexes
- if ( firing ) {
- if ( index <= firingLength ) {
- firingLength--;
- }
- if ( index <= firingIndex ) {
- firingIndex--;
- }
- }
- }
- });
- }
- return this;
- },
- // Control if a given callback is in the list
- has: function( fn ) {
- return jQuery.inArray( fn, list ) > -1;
- },
- // Remove all callbacks from the list
- empty: function() {
- list = [];
- return this;
- },
- // Have the list do nothing anymore
- disable: function() {
- list = stack = memory = undefined;
- return this;
- },
- // Is it disabled?
- disabled: function() {
- return !list;
- },
- // Lock the list in its current state
- lock: function() {
- stack = undefined;
- if ( !memory ) {
- self.disable();
- }
- return this;
- },
- // Is it locked?
- locked: function() {
- return !stack;
- },
- // Call all callbacks with the given context and arguments
- fireWith: function( context, args ) {
- args = args || [];
- args = [ context, args.slice ? args.slice() : args ];
- if ( list && ( !fired || stack ) ) {
- if ( firing ) {
- stack.push( args );
- } else {
- fire( args );
- }
- }
- return this;
- },
- // Call all the callbacks with the given arguments
- fire: function() {
- self.fireWith( this, arguments );
- return this;
- },
- // To know if the callbacks have already been called at least once
- fired: function() {
- return !!fired;
- }
- };
-
- return self;
-};
-jQuery.extend({
-
- Deferred: function( func ) {
- var tuples = [
- // action, add listener, listener list, final state
- [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
- [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
- [ "notify", "progress", jQuery.Callbacks("memory") ]
- ],
- state = "pending",
- promise = {
- state: function() {
- return state;
- },
- always: function() {
- deferred.done( arguments ).fail( arguments );
- return this;
- },
- then: function( /* fnDone, fnFail, fnProgress */ ) {
- var fns = arguments;
- return jQuery.Deferred(function( newDefer ) {
- jQuery.each( tuples, function( i, tuple ) {
- var action = tuple[ 0 ],
- fn = fns[ i ];
- // deferred[ done | fail | progress ] for forwarding actions to newDefer
- deferred[ tuple[1] ]( jQuery.isFunction( fn ) ?
- function() {
- var returned = fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise()
- .done( newDefer.resolve )
- .fail( newDefer.reject )
- .progress( newDefer.notify );
- } else {
- newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
- }
- } :
- newDefer[ action ]
- );
- });
- fns = null;
- }).promise();
- },
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- return obj != null ? jQuery.extend( obj, promise ) : promise;
- }
- },
- deferred = {};
-
- // Keep pipe for back-compat
- promise.pipe = promise.then;
-
- // Add list-specific methods
- jQuery.each( tuples, function( i, tuple ) {
- var list = tuple[ 2 ],
- stateString = tuple[ 3 ];
-
- // promise[ done | fail | progress ] = list.add
- promise[ tuple[1] ] = list.add;
-
- // Handle state
- if ( stateString ) {
- list.add(function() {
- // state = [ resolved | rejected ]
- state = stateString;
-
- // [ reject_list | resolve_list ].disable; progress_list.lock
- }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
- }
-
- // deferred[ resolve | reject | notify ] = list.fire
- deferred[ tuple[0] ] = list.fire;
- deferred[ tuple[0] + "With" ] = list.fireWith;
- });
-
- // Make the deferred a promise
- promise.promise( deferred );
-
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
-
- // All done!
- return deferred;
- },
-
- // Deferred helper
- when: function( subordinate /* , ..., subordinateN */ ) {
- var i = 0,
- resolveValues = core_slice.call( arguments ),
- length = resolveValues.length,
-
- // the count of uncompleted subordinates
- remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
-
- // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
- deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
-
- // Update function for both resolve and progress values
- updateFunc = function( i, contexts, values ) {
- return function( value ) {
- contexts[ i ] = this;
- values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
- if( values === progressValues ) {
- deferred.notifyWith( contexts, values );
- } else if ( !( --remaining ) ) {
- deferred.resolveWith( contexts, values );
- }
- };
- },
-
- progressValues, progressContexts, resolveContexts;
-
- // add listeners to Deferred subordinates; treat others as resolved
- if ( length > 1 ) {
- progressValues = new Array( length );
- progressContexts = new Array( length );
- resolveContexts = new Array( length );
- for ( ; i < length; i++ ) {
- if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
- resolveValues[ i ].promise()
- .done( updateFunc( i, resolveContexts, resolveValues ) )
- .fail( deferred.reject )
- .progress( updateFunc( i, progressContexts, progressValues ) );
- } else {
- --remaining;
- }
- }
- }
-
- // if we're not waiting on anything, resolve the master
- if ( !remaining ) {
- deferred.resolveWith( resolveContexts, resolveValues );
- }
-
- return deferred.promise();
- }
-});
-jQuery.support = (function() {
-
- var support,
- all,
- a,
- select,
- opt,
- input,
- fragment,
- eventName,
- i,
- isSupported,
- clickFn,
- div = document.createElement("div");
-
- // Setup
- div.setAttribute( "className", "t" );
- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-
- // Support tests won't run in some limited or non-browser environments
- all = div.getElementsByTagName("*");
- a = div.getElementsByTagName("a")[ 0 ];
- if ( !all || !a || !all.length ) {
- return {};
- }
-
- // First batch of tests
- select = document.createElement("select");
- opt = select.appendChild( document.createElement("option") );
- input = div.getElementsByTagName("input")[ 0 ];
-
- a.style.cssText = "top:1px;float:left;opacity:.5";
- support = {
- // IE strips leading whitespace when .innerHTML is used
- leadingWhitespace: ( div.firstChild.nodeType === 3 ),
-
- // Make sure that tbody elements aren't automatically inserted
- // IE will insert them into empty tables
- tbody: !div.getElementsByTagName("tbody").length,
-
- // Make sure that link elements get serialized correctly by innerHTML
- // This requires a wrapper element in IE
- htmlSerialize: !!div.getElementsByTagName("link").length,
-
- // Get the style information from getAttribute
- // (IE uses .cssText instead)
- style: /top/.test( a.getAttribute("style") ),
-
- // Make sure that URLs aren't manipulated
- // (IE normalizes it by default)
- hrefNormalized: ( a.getAttribute("href") === "/a" ),
-
- // Make sure that element opacity exists
- // (IE uses filter instead)
- // Use a regex to work around a WebKit issue. See #5145
- opacity: /^0.5/.test( a.style.opacity ),
-
- // Verify style float existence
- // (IE uses styleFloat instead of cssFloat)
- cssFloat: !!a.style.cssFloat,
-
- // Make sure that if no value is specified for a checkbox
- // that it defaults to "on".
- // (WebKit defaults to "" instead)
- checkOn: ( input.value === "on" ),
-
- // Make sure that a selected-by-default option has a working selected property.
- // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
- optSelected: opt.selected,
-
- // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
- getSetAttribute: div.className !== "t",
-
- // Tests for enctype support on a form (#6743)
- enctype: !!document.createElement("form").enctype,
-
- // Makes sure cloning an html5 element does not cause problems
- // Where outerHTML is undefined, this still works
- html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
-
- // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
- boxModel: ( document.compatMode === "CSS1Compat" ),
-
- // Will be defined later
- submitBubbles: true,
- changeBubbles: true,
- focusinBubbles: false,
- deleteExpando: true,
- noCloneEvent: true,
- inlineBlockNeedsLayout: false,
- shrinkWrapBlocks: false,
- reliableMarginRight: true,
- boxSizingReliable: true,
- pixelPosition: false
- };
-
- // Make sure checked status is properly cloned
- input.checked = true;
- support.noCloneChecked = input.cloneNode( true ).checked;
-
- // Make sure that the options inside disabled selects aren't marked as disabled
- // (WebKit marks them as disabled)
- select.disabled = true;
- support.optDisabled = !opt.disabled;
-
- // Test to see if it's possible to delete an expando from an element
- // Fails in Internet Explorer
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
-
- if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
- div.attachEvent( "onclick", clickFn = function() {
- // Cloning a node shouldn't copy over any
- // bound event handlers (IE does this)
- support.noCloneEvent = false;
- });
- div.cloneNode( true ).fireEvent("onclick");
- div.detachEvent( "onclick", clickFn );
- }
-
- // Check if a radio maintains its value
- // after being appended to the DOM
- input = document.createElement("input");
- input.value = "t";
- input.setAttribute( "type", "radio" );
- support.radioValue = input.value === "t";
-
- input.setAttribute( "checked", "checked" );
-
- // #11217 - WebKit loses check when the name is after the checked attribute
- input.setAttribute( "name", "t" );
-
- div.appendChild( input );
- fragment = document.createDocumentFragment();
- fragment.appendChild( div.lastChild );
-
- // WebKit doesn't clone checked state correctly in fragments
- support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- // Check if a disconnected checkbox will retain its checked
- // value of true after appended to the DOM (IE6/7)
- support.appendChecked = input.checked;
-
- fragment.removeChild( input );
- fragment.appendChild( div );
-
- // Technique from Juriy Zaytsev
- // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/
- // We only care about the case where non-standard event systems
- // are used, namely in IE. Short-circuiting here helps us to
- // avoid an eval call (in setAttribute) which can cause CSP
- // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
- if ( div.attachEvent ) {
- for ( i in {
- submit: true,
- change: true,
- focusin: true
- }) {
- eventName = "on" + i;
- isSupported = ( eventName in div );
- if ( !isSupported ) {
- div.setAttribute( eventName, "return;" );
- isSupported = ( typeof div[ eventName ] === "function" );
- }
- support[ i + "Bubbles" ] = isSupported;
- }
- }
-
- // Run tests that need a body at doc ready
- jQuery(function() {
- var container, div, tds, marginDiv,
- divReset = "padding:0;margin:0;border:0;display:block;overflow:hidden;",
- body = document.getElementsByTagName("body")[0];
-
- if ( !body ) {
- // Return for frameset docs that don't have a body
- return;
- }
-
- container = document.createElement("div");
- container.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px";
- body.insertBefore( container, body.firstChild );
-
- // Construct the test element
- div = document.createElement("div");
- container.appendChild( div );
-
- // Check if table cells still have offsetWidth/Height when they are set
- // to display:none and there are still other visible table cells in a
- // table row; if so, offsetWidth/Height are not reliable for use when
- // determining if an element has been hidden directly using
- // display:none (it is still safe to use offsets if a parent element is
- // hidden; don safety goggles and see bug #4512 for more information).
- // (only IE 8 fails this test)
- div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
- tds = div.getElementsByTagName("td");
- tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
- isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
- tds[ 0 ].style.display = "";
- tds[ 1 ].style.display = "none";
-
- // Check if empty table cells still have offsetWidth/Height
- // (IE <= 8 fail this test)
- support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
-
- // Check box-sizing and margin behavior
- div.innerHTML = "";
- div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
- support.boxSizing = ( div.offsetWidth === 4 );
- support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
-
- // NOTE: To any future maintainer, we've window.getComputedStyle
- // because jsdom on node.js will break without it.
- if ( window.getComputedStyle ) {
- support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
- support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
-
- // Check if div with explicit width and no margin-right incorrectly
- // gets computed margin-right based on width of container. For more
- // info see bug #3333
- // Fails in WebKit before Feb 2011 nightlies
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- marginDiv = document.createElement("div");
- marginDiv.style.cssText = div.style.cssText = divReset;
- marginDiv.style.marginRight = marginDiv.style.width = "0";
- div.style.width = "1px";
- div.appendChild( marginDiv );
- support.reliableMarginRight =
- !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
- }
-
- if ( typeof div.style.zoom !== "undefined" ) {
- // Check if natively block-level elements act like inline-block
- // elements when setting their display to 'inline' and giving
- // them layout
- // (IE < 8 does this)
- div.innerHTML = "";
- div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
- support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
-
- // Check if elements with layout shrink-wrap their children
- // (IE 6 does this)
- div.style.display = "block";
- div.style.overflow = "visible";
- div.innerHTML = "<div></div>";
- div.firstChild.style.width = "5px";
- support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
-
- container.style.zoom = 1;
- }
-
- // Null elements to avoid leaks in IE
- body.removeChild( container );
- container = div = tds = marginDiv = null;
- });
-
- // Null elements to avoid leaks in IE
- fragment.removeChild( div );
- all = a = select = opt = input = fragment = div = null;
-
- return support;
-})();
-var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
- rmultiDash = /([A-Z])/g;
-
-jQuery.extend({
- cache: {},
-
- deletedIds: [],
-
- // Remove at next major release (1.9/2.0)
- uuid: 0,
-
- // Unique for each copy of jQuery on the page
- // Non-digits removed to match rinlinejQuery
- expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
-
- // The following elements throw uncatchable exceptions if you
- // attempt to add expando properties to them.
- noData: {
- "embed": true,
- // Ban all objects except for Flash (which handle expandos)
- "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
- "applet": true
- },
-
- hasData: function( elem ) {
- elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
- return !!elem && !isEmptyDataObject( elem );
- },
-
- data: function( elem, name, data, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var thisCache, ret,
- internalKey = jQuery.expando,
- getByName = typeof name === "string",
-
- // We have to handle DOM nodes and JS objects differently because IE6-7
- // can't GC object references properly across the DOM-JS boundary
- isNode = elem.nodeType,
-
- // Only DOM nodes need the global jQuery cache; JS object data is
- // attached directly to the object so GC can occur automatically
- cache = isNode ? jQuery.cache : elem,
-
- // Only defining an ID for JS objects if its cache already exists allows
- // the code to shortcut on the same path as a DOM node with no cache
- id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
-
- // Avoid doing any more work than we need to when trying to get data on an
- // object that has no data at all
- if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
- return;
- }
-
- if ( !id ) {
- // Only DOM nodes need a new unique ID for each element since their data
- // ends up in the global cache
- if ( isNode ) {
- elem[ internalKey ] = id = jQuery.deletedIds.pop() || jQuery.guid++;
- } else {
- id = internalKey;
- }
- }
-
- if ( !cache[ id ] ) {
- cache[ id ] = {};
-
- // Avoids exposing jQuery metadata on plain JS objects when the object
- // is serialized using JSON.stringify
- if ( !isNode ) {
- cache[ id ].toJSON = jQuery.noop;
- }
- }
-
- // An object can be passed to jQuery.data instead of a key/value pair; this gets
- // shallow copied over onto the existing cache
- if ( typeof name === "object" || typeof name === "function" ) {
- if ( pvt ) {
- cache[ id ] = jQuery.extend( cache[ id ], name );
- } else {
- cache[ id ].data = jQuery.extend( cache[ id ].data, name );
- }
- }
-
- thisCache = cache[ id ];
-
- // jQuery data() is stored in a separate object inside the object's internal data
- // cache in order to avoid key collisions between internal data and user-defined
- // data.
- if ( !pvt ) {
- if ( !thisCache.data ) {
- thisCache.data = {};
- }
-
- thisCache = thisCache.data;
- }
-
- if ( data !== undefined ) {
- thisCache[ jQuery.camelCase( name ) ] = data;
- }
-
- // Check for both converted-to-camel and non-converted data property names
- // If a data property was specified
- if ( getByName ) {
-
- // First Try to find as-is property data
- ret = thisCache[ name ];
-
- // Test for null|undefined property data
- if ( ret == null ) {
-
- // Try to find the camelCased property
- ret = thisCache[ jQuery.camelCase( name ) ];
- }
- } else {
- ret = thisCache;
- }
-
- return ret;
- },
-
- removeData: function( elem, name, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var thisCache, i, l,
-
- isNode = elem.nodeType,
-
- // See jQuery.data for more information
- cache = isNode ? jQuery.cache : elem,
- id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
- // If there is already no cache entry for this object, there is no
- // purpose in continuing
- if ( !cache[ id ] ) {
- return;
- }
-
- if ( name ) {
-
- thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
- if ( thisCache ) {
-
- // Support array or space separated string names for data keys
- if ( !jQuery.isArray( name ) ) {
-
- // try the string as a key before any manipulation
- if ( name in thisCache ) {
- name = [ name ];
- } else {
-
- // split the camel cased version by spaces unless a key with the spaces exists
- name = jQuery.camelCase( name );
- if ( name in thisCache ) {
- name = [ name ];
- } else {
- name = name.split(" ");
- }
- }
- }
-
- for ( i = 0, l = name.length; i < l; i++ ) {
- delete thisCache[ name[i] ];
- }
-
- // If there is no data left in the cache, we want to continue
- // and let the cache object itself get destroyed
- if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
- return;
- }
- }
- }
-
- // See jQuery.data for more information
- if ( !pvt ) {
- delete cache[ id ].data;
-
- // Don't destroy the parent cache unless the internal data object
- // had been the only thing left in it
- if ( !isEmptyDataObject( cache[ id ] ) ) {
- return;
- }
- }
-
- // Destroy the cache
- if ( isNode ) {
- jQuery.cleanData( [ elem ], true );
-
- // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
- } else if ( jQuery.support.deleteExpando || cache != cache.window ) {
- delete cache[ id ];
-
- // When all else fails, null
- } else {
- cache[ id ] = null;
- }
- },
-
- // For internal use only.
- _data: function( elem, name, data ) {
- return jQuery.data( elem, name, data, true );
- },
-
- // A method for determining if a DOM node can handle the data expando
- acceptData: function( elem ) {
- var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
-
- // nodes accept data unless otherwise specified; rejection can be conditional
- return !noData || noData !== true && elem.getAttribute("classid") === noData;
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ) {
- var parts, part, attr, name, l,
- elem = this[0],
- i = 0,
- data = null;
-
- // Gets all values
- if ( key === undefined ) {
- if ( this.length ) {
- data = jQuery.data( elem );
-
- if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
- attr = elem.attributes;
- for ( l = attr.length; i < l; i++ ) {
- name = attr[i].name;
-
- if ( !name.indexOf( "data-" ) ) {
- name = jQuery.camelCase( name.substring(5) );
-
- dataAttr( elem, name, data[ name ] );
- }
- }
- jQuery._data( elem, "parsedAttrs", true );
- }
- }
-
- return data;
- }
-
- // Sets multiple values
- if ( typeof key === "object" ) {
- return this.each(function() {
- jQuery.data( this, key );
- });
- }
-
- parts = key.split( ".", 2 );
- parts[1] = parts[1] ? "." + parts[1] : "";
- part = parts[1] + "!";
-
- return jQuery.access( this, function( value ) {
-
- if ( value === undefined ) {
- data = this.triggerHandler( "getData" + part, [ parts[0] ] );
-
- // Try to fetch any internally stored data first
- if ( data === undefined && elem ) {
- data = jQuery.data( elem, key );
- data = dataAttr( elem, key, data );
- }
-
- return data === undefined && parts[1] ?
- this.data( parts[0] ) :
- data;
- }
-
- parts[1] = value;
- this.each(function() {
- var self = jQuery( this );
-
- self.triggerHandler( "setData" + part, parts );
- jQuery.data( this, key, value );
- self.triggerHandler( "changeData" + part, parts );
- });
- }, null, value, arguments.length > 1, null, false );
- },
-
- removeData: function( key ) {
- return this.each(function() {
- jQuery.removeData( this, key );
- });
- }
-});
-
-function dataAttr( elem, key, data ) {
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
-
- var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = data === "true" ? true :
- data === "false" ? false :
- data === "null" ? null :
- // Only convert to a number if it doesn't change the string
- +data + "" === data ? +data :
- rbrace.test( data ) ? jQuery.parseJSON( data ) :
- data;
- } catch( e ) {}
-
- // Make sure we set the data so it isn't changed later
- jQuery.data( elem, key, data );
-
- } else {
- data = undefined;
- }
- }
-
- return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
- var name;
- for ( name in obj ) {
-
- // if the public data object is empty, the private is still empty
- if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
- continue;
- }
- if ( name !== "toJSON" ) {
- return false;
- }
- }
-
- return true;
-}
-jQuery.extend({
- queue: function( elem, type, data ) {
- var queue;
-
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- queue = jQuery._data( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !queue || jQuery.isArray(data) ) {
- queue = jQuery._data( elem, type, jQuery.makeArray(data) );
- } else {
- queue.push( data );
- }
- }
- return queue || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- startLength = queue.length,
- fn = queue.shift(),
- hooks = jQuery._queueHooks( elem, type ),
- next = function() {
- jQuery.dequeue( elem, type );
- };
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- startLength--;
- }
-
- if ( fn ) {
-
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- // clear up the last queue stop function
- delete hooks.stop;
- fn.call( elem, next, hooks );
- }
-
- if ( !startLength && hooks ) {
- hooks.empty.fire();
- }
- },
-
- // not intended for public consumption - generates a queueHooks object, or returns the current one
- _queueHooks: function( elem, type ) {
- var key = type + "queueHooks";
- return jQuery._data( elem, key ) || jQuery._data( elem, key, {
- empty: jQuery.Callbacks("once memory").add(function() {
- jQuery.removeData( elem, type + "queue", true );
- jQuery.removeData( elem, key, true );
- })
- });
- }
-});
-
-jQuery.fn.extend({
- queue: function( type, data ) {
- var setter = 2;
-
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- setter--;
- }
-
- if ( arguments.length < setter ) {
- return jQuery.queue( this[0], type );
- }
-
- return data === undefined ?
- this :
- this.each(function() {
- var queue = jQuery.queue( this, type, data );
-
- // ensure a hooks for this queue
- jQuery._queueHooks( this, type );
-
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
- // Based off of the plugin by Clint Helfers, with permission.
- // http://blindsignals.com/index.php/2009/07/jquery-delay/
- delay: function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
- type = type || "fx";
-
- return this.queue( type, function( next, hooks ) {
- var timeout = setTimeout( next, time );
- hooks.stop = function() {
- clearTimeout( timeout );
- };
- });
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, obj ) {
- var tmp,
- count = 1,
- defer = jQuery.Deferred(),
- elements = this,
- i = this.length,
- resolve = function() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- };
-
- if ( typeof type !== "string" ) {
- obj = type;
- type = undefined;
- }
- type = type || "fx";
-
- while( i-- ) {
- tmp = jQuery._data( elements[ i ], type + "queueHooks" );
- if ( tmp && tmp.empty ) {
- count++;
- tmp.empty.add( resolve );
- }
- }
- resolve();
- return defer.promise( obj );
- }
-});
-var nodeHook, boolHook, fixSpecified,
- rclass = /[\t\r\n]/g,
- rreturn = /\r/g,
- rtype = /^(?:button|input)$/i,
- rfocusable = /^(?:button|input|object|select|textarea)$/i,
- rclickable = /^a(?:rea|)$/i,
- rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
- getSetAttribute = jQuery.support.getSetAttribute;
-
-jQuery.fn.extend({
- attr: function( name, value ) {
- return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
- },
-
- removeAttr: function( name ) {
- return this.each(function() {
- jQuery.removeAttr( this, name );
- });
- },
-
- prop: function( name, value ) {
- return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
- },
-
- removeProp: function( name ) {
- name = jQuery.propFix[ name ] || name;
- return this.each(function() {
- // try/catch handles cases where IE balks (such as removing a property on window)
- try {
- this[ name ] = undefined;
- delete this[ name ];
- } catch( e ) {}
- });
- },
-
- addClass: function( value ) {
- var classNames, i, l, elem,
- setClass, c, cl;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).addClass( value.call(this, j, this.className) );
- });
- }
-
- if ( value && typeof value === "string" ) {
- classNames = value.split( core_rspace );
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- elem = this[ i ];
-
- if ( elem.nodeType === 1 ) {
- if ( !elem.className && classNames.length === 1 ) {
- elem.className = value;
-
- } else {
- setClass = " " + elem.className + " ";
-
- for ( c = 0, cl = classNames.length; c < cl; c++ ) {
- if ( setClass.indexOf( " " + classNames[ c ] + " " ) < 0 ) {
- setClass += classNames[ c ] + " ";
- }
- }
- elem.className = jQuery.trim( setClass );
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var removes, className, elem, c, cl, i, l;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).removeClass( value.call(this, j, this.className) );
- });
- }
- if ( (value && typeof value === "string") || value === undefined ) {
- removes = ( value || "" ).split( core_rspace );
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- elem = this[ i ];
- if ( elem.nodeType === 1 && elem.className ) {
-
- className = (" " + elem.className + " ").replace( rclass, " " );
-
- // loop over each item in the removal list
- for ( c = 0, cl = removes.length; c < cl; c++ ) {
- // Remove until there is nothing to remove,
- while ( className.indexOf(" " + removes[ c ] + " ") >= 0 ) {
- className = className.replace( " " + removes[ c ] + " " , " " );
- }
- }
- elem.className = value ? jQuery.trim( className ) : "";
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value,
- isBool = typeof stateVal === "boolean";
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( i ) {
- jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
- });
- }
-
- return this.each(function() {
- if ( type === "string" ) {
- // toggle individual class names
- var className,
- i = 0,
- self = jQuery( this ),
- state = stateVal,
- classNames = value.split( core_rspace );
-
- while ( (className = classNames[ i++ ]) ) {
- // check each className given, space separated list
- state = isBool ? state : !self.hasClass( className );
- self[ state ? "addClass" : "removeClass" ]( className );
- }
-
- } else if ( type === "undefined" || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- jQuery._data( this, "__className__", this.className );
- }
-
- // toggle whole className
- this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
- }
- });
- },
-
- hasClass: function( selector ) {
- var className = " " + selector + " ",
- i = 0,
- l = this.length;
- for ( ; i < l; i++ ) {
- if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
- return true;
- }
- }
-
- return false;
- },
-
- val: function( value ) {
- var hooks, ret, isFunction,
- elem = this[0];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
- return ret;
- }
-
- ret = elem.value;
-
- return typeof ret === "string" ?
- // handle most common string cases
- ret.replace(rreturn, "") :
- // handle cases where value is null/undef or number
- ret == null ? "" : ret;
- }
-
- return;
- }
-
- isFunction = jQuery.isFunction( value );
-
- return this.each(function( i ) {
- var val,
- self = jQuery(this);
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call( this, i, self.val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
- } else if ( typeof val === "number" ) {
- val += "";
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map(val, function ( value ) {
- return value == null ? "" : value + "";
- });
- }
-
- hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- });
- }
-});
-
-jQuery.extend({
- valHooks: {
- option: {
- get: function( elem ) {
- // attributes.value is undefined in Blackberry 4.7 but
- // uses .value. See #6932
- var val = elem.attributes.value;
- return !val || val.specified ? elem.value : elem.text;
- }
- },
- select: {
- get: function( elem ) {
- var value, option,
- options = elem.options,
- index = elem.selectedIndex,
- one = elem.type === "select-one" || index < 0,
- values = one ? null : [],
- max = one ? index + 1 : options.length,
- i = index < 0 ?
- max :
- one ? index : 0;
-
- // Loop through all the selected options
- for ( ; i < max; i++ ) {
- option = options[ i ];
-
- // oldIE doesn't update selected after form reset (#2551)
- if ( ( option.selected || i === index ) &&
- // Don't return options that are disabled or in a disabled optgroup
- ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
- ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var values = jQuery.makeArray( value );
-
- jQuery(elem).find("option").each(function() {
- this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
- });
-
- if ( !values.length ) {
- elem.selectedIndex = -1;
- }
- return values;
- }
- }
- },
-
- // Unused in 1.8, left in so attrFn-stabbers won't die; remove in 1.9
- attrFn: {},
-
- attr: function( elem, name, value, pass ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- // don't get/set attributes on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) {
- return jQuery( elem )[ name ]( value );
- }
-
- // Fallback to prop when attributes are not supported
- if ( typeof elem.getAttribute === "undefined" ) {
- return jQuery.prop( elem, name, value );
- }
-
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- // All attributes are lowercase
- // Grab necessary hook if one is defined
- if ( notxml ) {
- name = name.toLowerCase();
- hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
- }
-
- if ( value !== undefined ) {
-
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
- return;
-
- } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- elem.setAttribute( name, value + "" );
- return value;
- }
-
- } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
-
- ret = elem.getAttribute( name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret === null ?
- undefined :
- ret;
- }
- },
-
- removeAttr: function( elem, value ) {
- var propName, attrNames, name, isBool,
- i = 0;
-
- if ( value && elem.nodeType === 1 ) {
-
- attrNames = value.split( core_rspace );
-
- for ( ; i < attrNames.length; i++ ) {
- name = attrNames[ i ];
-
- if ( name ) {
- propName = jQuery.propFix[ name ] || name;
- isBool = rboolean.test( name );
-
- // See #9699 for explanation of this approach (setting first, then removal)
- // Do not do this for boolean attributes (see #10870)
- if ( !isBool ) {
- jQuery.attr( elem, name, "" );
- }
- elem.removeAttribute( getSetAttribute ? name : propName );
-
- // Set corresponding property to false for boolean attributes
- if ( isBool && propName in elem ) {
- elem[ propName ] = false;
- }
- }
- }
- }
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- // We can't allow the type property to be changed (since it causes problems in IE)
- if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
- jQuery.error( "type property can't be changed" );
- } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
- // Setting the type on a radio button after the value resets the value in IE6-9
- // Reset value to it's default in case type is set after value
- // This is for element creation
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- },
- // Use the value property for back compat
- // Use the nodeHook for button elements in IE6/7 (#1954)
- value: {
- get: function( elem, name ) {
- if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
- return nodeHook.get( elem, name );
- }
- return name in elem ?
- elem.value :
- null;
- },
- set: function( elem, value, name ) {
- if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
- return nodeHook.set( elem, value, name );
- }
- // Does not return so that setAttribute is also used
- elem.value = value;
- }
- }
- },
-
- propFix: {
- tabindex: "tabIndex",
- readonly: "readOnly",
- "for": "htmlFor",
- "class": "className",
- maxlength: "maxLength",
- cellspacing: "cellSpacing",
- cellpadding: "cellPadding",
- rowspan: "rowSpan",
- colspan: "colSpan",
- usemap: "useMap",
- frameborder: "frameBorder",
- contenteditable: "contentEditable"
- },
-
- prop: function( elem, name, value ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- // don't get/set properties on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- if ( notxml ) {
- // Fix name and attach hooks
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
-
- if ( value !== undefined ) {
- if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- return ( elem[ name ] = value );
- }
-
- } else {
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
- return elem[ name ];
- }
- }
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- var attributeNode = elem.getAttributeNode("tabindex");
-
- return attributeNode && attributeNode.specified ?
- parseInt( attributeNode.value, 10 ) :
- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
- 0 :
- undefined;
- }
- }
- }
-});
-
-// Hook for boolean attributes
-boolHook = {
- get: function( elem, name ) {
- // Align boolean attributes with corresponding properties
- // Fall back to attribute presence where some booleans are not supported
- var attrNode,
- property = jQuery.prop( elem, name );
- return property === true || typeof property !== "boolean" && ( attrNode = elem.getAttributeNode(name) ) && attrNode.nodeValue !== false ?
- name.toLowerCase() :
- undefined;
- },
- set: function( elem, value, name ) {
- var propName;
- if ( value === false ) {
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else {
- // value is true since we know at this point it's type boolean and not false
- // Set boolean attributes to the same name and set the DOM property
- propName = jQuery.propFix[ name ] || name;
- if ( propName in elem ) {
- // Only set the IDL specifically if it already exists on the element
- elem[ propName ] = true;
- }
-
- elem.setAttribute( name, name.toLowerCase() );
- }
- return name;
- }
-};
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
- fixSpecified = {
- name: true,
- id: true,
- coords: true
- };
-
- // Use this for any attribute in IE6/7
- // This fixes almost every IE6/7 issue
- nodeHook = jQuery.valHooks.button = {
- get: function( elem, name ) {
- var ret;
- ret = elem.getAttributeNode( name );
- return ret && ( fixSpecified[ name ] ? ret.value !== "" : ret.specified ) ?
- ret.value :
- undefined;
- },
- set: function( elem, value, name ) {
- // Set the existing or create a new attribute node
- var ret = elem.getAttributeNode( name );
- if ( !ret ) {
- ret = document.createAttribute( name );
- elem.setAttributeNode( ret );
- }
- return ( ret.value = value + "" );
- }
- };
-
- // Set width and height to auto instead of 0 on empty string( Bug #8150 )
- // This is for removals
- jQuery.each([ "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
- set: function( elem, value ) {
- if ( value === "" ) {
- elem.setAttribute( name, "auto" );
- return value;
- }
- }
- });
- });
-
- // Set contenteditable to false on removals(#10429)
- // Setting to empty string throws an error as an invalid value
- jQuery.attrHooks.contenteditable = {
- get: nodeHook.get,
- set: function( elem, value, name ) {
- if ( value === "" ) {
- value = "false";
- }
- nodeHook.set( elem, value, name );
- }
- };
-}
-
-
-// Some attributes require a special call on IE
-if ( !jQuery.support.hrefNormalized ) {
- jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
- get: function( elem ) {
- var ret = elem.getAttribute( name, 2 );
- return ret === null ? undefined : ret;
- }
- });
- });
-}
-
-if ( !jQuery.support.style ) {
- jQuery.attrHooks.style = {
- get: function( elem ) {
- // Return undefined in the case of empty string
- // Normalize to lowercase since IE uppercases css property names
- return elem.style.cssText.toLowerCase() || undefined;
- },
- set: function( elem, value ) {
- return ( elem.style.cssText = value + "" );
- }
- };
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
- jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
- get: function( elem ) {
- var parent = elem.parentNode;
-
- if ( parent ) {
- parent.selectedIndex;
-
- // Make sure that it also works with optgroups, see #5701
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- return null;
- }
- });
-}
-
-// IE6/7 call enctype encoding
-if ( !jQuery.support.enctype ) {
- jQuery.propFix.enctype = "encoding";
-}
-
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
- jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- get: function( elem ) {
- // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
- return elem.getAttribute("value") === null ? "on" : elem.value;
- }
- };
- });
-}
-jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
- }
- }
- });
-});
-var rformElems = /^(?:textarea|input|select)$/i,
- rtypenamespace = /^([^\.]*|)(?:\.(.+)|)$/,
- rhoverHack = /(?:^|\s)hover(\.\S+|)\b/,
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|contextmenu)|click/,
- rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
- hoverHack = function( events ) {
- return jQuery.event.special.hover ? events : events.replace( rhoverHack, "mouseenter$1 mouseleave$1" );
- };
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
- add: function( elem, types, handler, data, selector ) {
-
- var elemData, eventHandle, events,
- t, tns, type, namespaces, handleObj,
- handleObjIn, handlers, special;
-
- // Don't attach events to noData or text/comment nodes (allow plain objects tho)
- if ( elem.nodeType === 3 || elem.nodeType === 8 || !types || !handler || !(elemData = jQuery._data( elem )) ) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- selector = handleObjIn.selector;
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- events = elemData.events;
- if ( !events ) {
- elemData.events = events = {};
- }
- eventHandle = elemData.handle;
- if ( !eventHandle ) {
- elemData.handle = eventHandle = function( e ) {
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
- jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
- undefined;
- };
- // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
- eventHandle.elem = elem;
- }
-
- // Handle multiple events separated by a space
- // jQuery(...).bind("mouseover mouseout", fn);
- types = jQuery.trim( hoverHack(types) ).split( " " );
- for ( t = 0; t < types.length; t++ ) {
-
- tns = rtypenamespace.exec( types[t] ) || [];
- type = tns[1];
- namespaces = ( tns[2] || "" ).split( "." ).sort();
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[ type ] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[ type ] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend({
- type: type,
- origType: tns[1],
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
- namespace: namespaces.join(".")
- }, handleObjIn );
-
- // Init the event handler queue if we're the first
- handlers = events[ type ];
- if ( !handlers ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener/attachEvent if the special events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
- // Bind the global event handler to the element
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
-
- } else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- // Nullify elem to prevent memory leaks in IE
- elem = null;
- },
-
- global: {},
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, selector, mappedTypes ) {
-
- var t, tns, type, origType, namespaces, origCount,
- j, events, special, eventType, handleObj,
- elemData = jQuery.hasData( elem ) && jQuery._data( elem );
-
- if ( !elemData || !(events = elemData.events) ) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = jQuery.trim( hoverHack( types || "" ) ).split(" ");
- for ( t = 0; t < types.length; t++ ) {
- tns = rtypenamespace.exec( types[t] ) || [];
- type = origType = tns[1];
- namespaces = tns[2];
-
- // Unbind all events (on this namespace, if provided) for the element
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
- type = ( selector? special.delegateType : special.bindType ) || type;
- eventType = events[ type ] || [];
- origCount = eventType.length;
- namespaces = namespaces ? new RegExp("(^|\\.)" + namespaces.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
-
- // Remove matching events
- for ( j = 0; j < eventType.length; j++ ) {
- handleObj = eventType[ j ];
-
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !namespaces || namespaces.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
- eventType.splice( j--, 1 );
-
- if ( handleObj.selector ) {
- eventType.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if ( eventType.length === 0 && origCount !== eventType.length ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- delete elemData.handle;
-
- // removeData also checks for emptiness and clears the expando if empty
- // so use it instead of delete
- jQuery.removeData( elem, "events", true );
- }
- },
-
- // Events that are safe to short-circuit if no handlers are attached.
- // Native DOM events should not be added, they may have inline handlers.
- customEvent: {
- "getData": true,
- "setData": true,
- "changeData": true
- },
-
- trigger: function( event, data, elem, onlyHandlers ) {
- // Don't do events on text and comment nodes
- if ( elem && (elem.nodeType === 3 || elem.nodeType === 8) ) {
- return;
- }
-
- // Event object or event type
- var cache, exclusive, i, cur, old, ontype, special, handle, eventPath, bubbleType,
- type = event.type || event,
- namespaces = [];
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
-
- if ( type.indexOf( "!" ) >= 0 ) {
- // Exclusive events trigger only for the exact event (no namespaces)
- type = type.slice(0, -1);
- exclusive = true;
- }
-
- if ( type.indexOf( "." ) >= 0 ) {
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split(".");
- type = namespaces.shift();
- namespaces.sort();
- }
-
- if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
- // No jQuery handlers for this event type, and it can't have inline handlers
- return;
- }
-
- // Caller can pass in an Event, Object, or just an event type string
- event = typeof event === "object" ?
- // jQuery.Event object
- event[ jQuery.expando ] ? event :
- // Object literal
- new jQuery.Event( type, event ) :
- // Just the event type (string)
- new jQuery.Event( type );
-
- event.type = type;
- event.isTrigger = true;
- event.exclusive = exclusive;
- event.namespace = namespaces.join( "." );
- event.namespace_re = event.namespace? new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)") : null;
- ontype = type.indexOf( ":" ) < 0 ? "on" + type : "";
-
- // Handle a global trigger
- if ( !elem ) {
-
- // TODO: Stop taunting the data cache; remove global events and always attach to document
- cache = jQuery.cache;
- for ( i in cache ) {
- if ( cache[ i ].events && cache[ i ].events[ type ] ) {
- jQuery.event.trigger( event, data, cache[ i ].handle.elem, true );
- }
- }
- return;
- }
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data != null ? jQuery.makeArray( data ) : [];
- data.unshift( event );
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[ type ] || {};
- if ( special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- eventPath = [[ elem, special.bindType || type ]];
- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
- bubbleType = special.delegateType || type;
- cur = rfocusMorph.test( bubbleType + type ) ? elem : elem.parentNode;
- for ( old = elem; cur; cur = cur.parentNode ) {
- eventPath.push([ cur, bubbleType ]);
- old = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( old === (elem.ownerDocument || document) ) {
- eventPath.push([ old.defaultView || old.parentWindow || window, bubbleType ]);
- }
- }
-
- // Fire handlers on the event path
- for ( i = 0; i < eventPath.length && !event.isPropagationStopped(); i++ ) {
-
- cur = eventPath[i][0];
- event.type = eventPath[i][1];
-
- handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
- if ( handle ) {
- handle.apply( cur, data );
- }
- // Note that this is a bare JS function and not a jQuery handler
- handle = ontype && cur[ ontype ];
- if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
- event.preventDefault();
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
- if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
- !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name name as the event.
- // Can't use an .isFunction() check here because IE6/7 fails that test.
- // Don't do default actions on window, that's where global variables be (#6170)
- // IE<9 dies on focus/blur to hidden element (#1486)
- if ( ontype && elem[ type ] && ((type !== "focus" && type !== "blur") || event.target.offsetWidth !== 0) && !jQuery.isWindow( elem ) ) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- old = elem[ ontype ];
-
- if ( old ) {
- elem[ ontype ] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
- elem[ type ]();
- jQuery.event.triggered = undefined;
-
- if ( old ) {
- elem[ ontype ] = old;
- }
- }
- }
- }
-
- return event.result;
- },
-
- dispatch: function( event ) {
-
- // Make a writable jQuery.Event from the native event object
- event = jQuery.event.fix( event || window.event );
-
- var i, j, cur, ret, selMatch, matched, matches, handleObj, sel, related,
- handlers = ( (jQuery._data( this, "events" ) || {} )[ event.type ] || []),
- delegateCount = handlers.delegateCount,
- args = core_slice.call( arguments ),
- run_all = !event.exclusive && !event.namespace,
- special = jQuery.event.special[ event.type ] || {},
- handlerQueue = [];
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[0] = event;
- event.delegateTarget = this;
-
- // Call the preDispatch hook for the mapped type, and let it bail if desired
- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
- return;
- }
-
- // Determine handlers that should run if there are delegated events
- // Avoid non-left-click bubbling in Firefox (#3861)
- if ( delegateCount && !(event.button && event.type === "click") ) {
-
- for ( cur = event.target; cur != this; cur = cur.parentNode || this ) {
-
- // Don't process clicks (ONLY) on disabled elements (#6911, #8165, #11382, #11764)
- if ( cur.disabled !== true || event.type !== "click" ) {
- selMatch = {};
- matches = [];
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
- sel = handleObj.selector;
-
- if ( selMatch[ sel ] === undefined ) {
- selMatch[ sel ] = handleObj.needsContext ?
- jQuery( sel, this ).index( cur ) >= 0 :
- jQuery.find( sel, this, null, [ cur ] ).length;
- }
- if ( selMatch[ sel ] ) {
- matches.push( handleObj );
- }
- }
- if ( matches.length ) {
- handlerQueue.push({ elem: cur, matches: matches });
- }
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- if ( handlers.length > delegateCount ) {
- handlerQueue.push({ elem: this, matches: handlers.slice( delegateCount ) });
- }
-
- // Run delegates first; they may want to stop propagation beneath us
- for ( i = 0; i < handlerQueue.length && !event.isPropagationStopped(); i++ ) {
- matched = handlerQueue[ i ];
- event.currentTarget = matched.elem;
-
- for ( j = 0; j < matched.matches.length && !event.isImmediatePropagationStopped(); j++ ) {
- handleObj = matched.matches[ j ];
-
- // Triggered event must either 1) be non-exclusive and have no namespace, or
- // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
- if ( run_all || (!event.namespace && !handleObj.namespace) || event.namespace_re && event.namespace_re.test( handleObj.namespace ) ) {
-
- event.data = handleObj.data;
- event.handleObj = handleObj;
-
- ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
- .apply( matched.elem, args );
-
- if ( ret !== undefined ) {
- event.result = ret;
- if ( ret === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- // Call the postDispatch hook for the mapped type
- if ( special.postDispatch ) {
- special.postDispatch.call( this, event );
- }
-
- return event.result;
- },
-
- // Includes some event props shared by KeyEvent and MouseEvent
- // *** attrChange attrName relatedNode srcElement are not normalized, non-W3C, deprecated, will be removed in 1.8 ***
- props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
- fixHooks: {},
-
- keyHooks: {
- props: "char charCode key keyCode".split(" "),
- filter: function( event, original ) {
-
- // Add which for key events
- if ( event.which == null ) {
- event.which = original.charCode != null ? original.charCode : original.keyCode;
- }
-
- return event;
- }
- },
-
- mouseHooks: {
- props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
- filter: function( event, original ) {
- var eventDoc, doc, body,
- button = original.button,
- fromElement = original.fromElement;
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && original.clientX != null ) {
- eventDoc = event.target.ownerDocument || document;
- doc = eventDoc.documentElement;
- body = eventDoc.body;
-
- event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
- event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
- }
-
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && fromElement ) {
- event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if ( !event.which && button !== undefined ) {
- event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
- }
-
- return event;
- }
- },
-
- fix: function( event ) {
- if ( event[ jQuery.expando ] ) {
- return event;
- }
-
- // Create a writable copy of the event object and normalize some properties
- var i, prop,
- originalEvent = event,
- fixHook = jQuery.event.fixHooks[ event.type ] || {},
- copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
- event = jQuery.Event( originalEvent );
-
- for ( i = copy.length; i; ) {
- prop = copy[ --i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Fix target property, if necessary (#1925, IE 6/7/8 & Safari2)
- if ( !event.target ) {
- event.target = originalEvent.srcElement || document;
- }
-
- // Target should not be a text node (#504, Safari)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- // For mouse/key events, metaKey==false if it's undefined (#3368, #11328; IE6/7/8)
- event.metaKey = !!event.metaKey;
-
- return fixHook.filter? fixHook.filter( event, originalEvent ) : event;
- },
-
- special: {
- load: {
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
-
- focus: {
- delegateType: "focusin"
- },
- blur: {
- delegateType: "focusout"
- },
-
- beforeunload: {
- setup: function( data, namespaces, eventHandle ) {
- // We only want to do this special case on windows
- if ( jQuery.isWindow( this ) ) {
- this.onbeforeunload = eventHandle;
- }
- },
-
- teardown: function( namespaces, eventHandle ) {
- if ( this.onbeforeunload === eventHandle ) {
- this.onbeforeunload = null;
- }
- }
- }
- },
-
- simulate: function( type, elem, event, bubble ) {
- // Piggyback on a donor event to simulate a different one.
- // Fake originalEvent to avoid donor's stopPropagation, but if the
- // simulated event prevents default then we do the same on the donor.
- var e = jQuery.extend(
- new jQuery.Event(),
- event,
- { type: type,
- isSimulated: true,
- originalEvent: {}
- }
- );
- if ( bubble ) {
- jQuery.event.trigger( e, null, elem );
- } else {
- jQuery.event.dispatch.call( elem, e );
- }
- if ( e.isDefaultPrevented() ) {
- event.preventDefault();
- }
- }
-};
-
-// Some plugins are using, but it's undocumented/deprecated and will be removed.
-// The 1.7 special event interface should provide all the hooks needed now.
-jQuery.event.handle = jQuery.event.dispatch;
-
-jQuery.removeEvent = document.removeEventListener ?
- function( elem, type, handle ) {
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle, false );
- }
- } :
- function( elem, type, handle ) {
- var name = "on" + type;
-
- if ( elem.detachEvent ) {
-
- // #8545, #7054, preventing memory leaks for custom events in IE6-8
- // detachEvent needed property on element, by name of that event, to properly expose it to GC
- if ( typeof elem[ name ] === "undefined" ) {
- elem[ name ] = null;
- }
-
- elem.detachEvent( name, handle );
- }
- };
-
-jQuery.Event = function( src, props ) {
- // Allow instantiation without the 'new' keyword
- if ( !(this instanceof jQuery.Event) ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
- src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-function returnFalse() {
- return false;
-}
-function returnTrue() {
- return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- preventDefault: function() {
- this.isDefaultPrevented = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
-
- // if preventDefault exists run it on the original event
- if ( e.preventDefault ) {
- e.preventDefault();
-
- // otherwise set the returnValue property of the original event to false (IE)
- } else {
- e.returnValue = false;
- }
- },
- stopPropagation: function() {
- this.isPropagationStopped = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
- // if stopPropagation exists run it on the original event
- if ( e.stopPropagation ) {
- e.stopPropagation();
- }
- // otherwise set the cancelBubble property of the original event to true (IE)
- e.cancelBubble = true;
- },
- stopImmediatePropagation: function() {
- this.isImmediatePropagationStopped = returnTrue;
- this.stopPropagation();
- },
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function( event ) {
- var ret,
- target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj,
- selector = handleObj.selector;
-
- // For mousenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply( this, arguments );
- event.type = fix;
- }
- return ret;
- }
- };
-});
-
-// IE submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
- jQuery.event.special.submit = {
- setup: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Lazy-add a submit handler when a descendant form may potentially be submitted
- jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
- // Node name check avoids a VML-related crash in IE (#9807)
- var elem = e.target,
- form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
- if ( form && !jQuery._data( form, "_submit_attached" ) ) {
- jQuery.event.add( form, "submit._submit", function( event ) {
- event._submit_bubble = true;
- });
- jQuery._data( form, "_submit_attached", true );
- }
- });
- // return undefined since we don't need an event listener
- },
-
- postDispatch: function( event ) {
- // If form was submitted by the user, bubble the event up the tree
- if ( event._submit_bubble ) {
- delete event._submit_bubble;
- if ( this.parentNode && !event.isTrigger ) {
- jQuery.event.simulate( "submit", this.parentNode, event, true );
- }
- }
- },
-
- teardown: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
- jQuery.event.remove( this, "._submit" );
- }
- };
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !jQuery.support.changeBubbles ) {
-
- jQuery.event.special.change = {
-
- setup: function() {
-
- if ( rformElems.test( this.nodeName ) ) {
- // IE doesn't fire change on a check/radio until blur; trigger it on click
- // after a propertychange. Eat the blur-change in special.change.handle.
- // This still fires onchange a second time for check/radio after blur.
- if ( this.type === "checkbox" || this.type === "radio" ) {
- jQuery.event.add( this, "propertychange._change", function( event ) {
- if ( event.originalEvent.propertyName === "checked" ) {
- this._just_changed = true;
- }
- });
- jQuery.event.add( this, "click._change", function( event ) {
- if ( this._just_changed && !event.isTrigger ) {
- this._just_changed = false;
- }
- // Allow triggered, simulated change events (#11500)
- jQuery.event.simulate( "change", this, event, true );
- });
- }
- return false;
- }
- // Delegated event; lazy-add a change handler on descendant inputs
- jQuery.event.add( this, "beforeactivate._change", function( e ) {
- var elem = e.target;
-
- if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "_change_attached" ) ) {
- jQuery.event.add( elem, "change._change", function( event ) {
- if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
- jQuery.event.simulate( "change", this.parentNode, event, true );
- }
- });
- jQuery._data( elem, "_change_attached", true );
- }
- });
- },
-
- handle: function( event ) {
- var elem = event.target;
-
- // Swallow native change events from checkbox/radio, we already triggered them above
- if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
- return event.handleObj.handler.apply( this, arguments );
- }
- },
-
- teardown: function() {
- jQuery.event.remove( this, "._change" );
-
- return !rformElems.test( this.nodeName );
- }
- };
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler while someone wants focusin/focusout
- var attaches = 0,
- handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
- };
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- if ( attaches++ === 0 ) {
- document.addEventListener( orig, handler, true );
- }
- },
- teardown: function() {
- if ( --attaches === 0 ) {
- document.removeEventListener( orig, handler, true );
- }
- }
- };
- });
-}
-
-jQuery.fn.extend({
-
- on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
- var origFn, type;
-
- // Types can be a map of types/handlers
- if ( typeof types === "object" ) {
- // ( types-Object, selector, data )
- if ( typeof selector !== "string" ) { // && selector != null
- // ( types-Object, data )
- data = data || selector;
- selector = undefined;
- }
- for ( type in types ) {
- this.on( type, selector, data, types[ type ], one );
- }
- return this;
- }
-
- if ( data == null && fn == null ) {
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return this;
- }
-
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
- // Can use an empty set, since event contains the info
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return this.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- });
- },
- one: function( types, selector, data, fn ) {
- return this.on( types, selector, data, fn, 1 );
- },
- off: function( types, selector, fn ) {
- var handleObj, type;
- if ( types && types.preventDefault && types.handleObj ) {
- // ( event ) dispatched jQuery.Event
- handleObj = types.handleObj;
- jQuery( types.delegateTarget ).off(
- handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
- handleObj.selector,
- handleObj.handler
- );
- return this;
- }
- if ( typeof types === "object" ) {
- // ( types-object [, selector] )
- for ( type in types ) {
- this.off( type, selector, types[ type ] );
- }
- return this;
- }
- if ( selector === false || typeof selector === "function" ) {
- // ( types [, fn] )
- fn = selector;
- selector = undefined;
- }
- if ( fn === false ) {
- fn = returnFalse;
- }
- return this.each(function() {
- jQuery.event.remove( this, types, fn, selector );
- });
- },
-
- bind: function( types, data, fn ) {
- return this.on( types, null, data, fn );
- },
- unbind: function( types, fn ) {
- return this.off( types, null, fn );
- },
-
- live: function( types, data, fn ) {
- jQuery( this.context ).on( types, this.selector, data, fn );
- return this;
- },
- die: function( types, fn ) {
- jQuery( this.context ).off( types, this.selector || "**", fn );
- return this;
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.on( types, selector, data, fn );
- },
- undelegate: function( selector, types, fn ) {
- // ( namespace ) or ( selector, types [, fn] )
- return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
- },
-
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
- triggerHandler: function( type, data ) {
- if ( this[0] ) {
- return jQuery.event.trigger( type, data, this[0], true );
- }
- },
-
- toggle: function( fn ) {
- // Save reference to arguments for access in closure
- var args = arguments,
- guid = fn.guid || jQuery.guid++,
- i = 0,
- toggler = function( event ) {
- // Figure out which function to execute
- var lastToggle = ( jQuery._data( this, "lastToggle" + fn.guid ) || 0 ) % i;
- jQuery._data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
- // Make sure that clicks stop
- event.preventDefault();
-
- // and execute the function
- return args[ lastToggle ].apply( this, arguments ) || false;
- };
-
- // link all the functions, so any of them can unbind this click handler
- toggler.guid = guid;
- while ( i < args.length ) {
- args[ i++ ].guid = guid;
- }
-
- return this.click( toggler );
- },
-
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- }
-});
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- if ( fn == null ) {
- fn = data;
- data = null;
- }
-
- return arguments.length > 0 ?
- this.on( name, null, data, fn ) :
- this.trigger( name );
- };
-
- if ( rkeyEvent.test( name ) ) {
- jQuery.event.fixHooks[ name ] = jQuery.event.keyHooks;
- }
-
- if ( rmouseEvent.test( name ) ) {
- jQuery.event.fixHooks[ name ] = jQuery.event.mouseHooks;
- }
-});
-/*!
- * Sizzle CSS Selector Engine
- * Copyright 2012 jQuery Foundation and other contributors
- * Released under the MIT license
- * http://sizzlejs.com/
- */
-(function( window, undefined ) {
-
-var cachedruns,
- assertGetIdNotName,
- Expr,
- getText,
- isXML,
- contains,
- compile,
- sortOrder,
- hasDuplicate,
- outermostContext,
-
- baseHasDuplicate = true,
- strundefined = "undefined",
-
- expando = ( "sizcache" + Math.random() ).replace( ".", "" ),
-
- Token = String,
- document = window.document,
- docElem = document.documentElement,
- dirruns = 0,
- done = 0,
- pop = [].pop,
- push = [].push,
- slice = [].slice,
- // Use a stripped-down indexOf if a native one is unavailable
- indexOf = [].indexOf || function( elem ) {
- var i = 0,
- len = this.length;
- for ( ; i < len; i++ ) {
- if ( this[i] === elem ) {
- return i;
- }
- }
- return -1;
- },
-
- // Augment a function for special use by Sizzle
- markFunction = function( fn, value ) {
- fn[ expando ] = value == null || value;
- return fn;
- },
-
- createCache = function() {
- var cache = {},
- keys = [];
-
- return markFunction(function( key, value ) {
- // Only keep the most recent entries
- if ( keys.push( key ) > Expr.cacheLength ) {
- delete cache[ keys.shift() ];
- }
-
- // Retrieve with (key + " ") to avoid collision with native Object.prototype properties (see Issue #157)
- return (cache[ key + " " ] = value);
- }, cache );
- },
-
- classCache = createCache(),
- tokenCache = createCache(),
- compilerCache = createCache(),
-
- // Regex
-
- // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
- whitespace = "[\\x20\\t\\r\\n\\f]",
- // http://www.w3.org/TR/css3-syntax/#characters
- characterEncoding = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",
-
- // Loosely modeled on CSS identifier characters
- // An unquoted value should be a CSS identifier (http://www.w3.org/TR/css3-selectors/#attribute-selectors)
- // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
- identifier = characterEncoding.replace( "w", "w#" ),
-
- // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
- operators = "([*^$|!~]?=)",
- attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
- "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
-
- // Prefer arguments not in parens/brackets,
- // then attribute selectors and non-pseudos (denoted by :),
- // then anything else
- // These preferences are here to reduce the number of selectors
- // needing tokenize in the PSEUDO preFilter
- pseudos = ":(" + characterEncoding + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + attributes + ")|[^:]|\\\\.)*|.*))\\)|)",
-
- // For matchExpr.POS and matchExpr.needsContext
- pos = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace +
- "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)",
-
- // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
- rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
- rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
- rpseudo = new RegExp( pseudos ),
-
- // Easily-parseable/retrievable ID or TAG or CLASS selectors
- rquickExpr = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,
-
- rnot = /^:not/,
- rsibling = /[\x20\t\r\n\f]*[+~]/,
- rendsWithNot = /:not\($/,
-
- rheader = /h\d/i,
- rinputs = /input|select|textarea|button/i,
-
- rbackslash = /\\(?!\\)/g,
-
- matchExpr = {
- "ID": new RegExp( "^#(" + characterEncoding + ")" ),
- "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
- "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
- "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
- "ATTR": new RegExp( "^" + attributes ),
- "PSEUDO": new RegExp( "^" + pseudos ),
- "POS": new RegExp( pos, "i" ),
- "CHILD": new RegExp( "^:(only|nth|first|last)-child(?:\\(" + whitespace +
- "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
- "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
- // For use in libraries implementing .is()
- "needsContext": new RegExp( "^" + whitespace + "*[>+~]|" + pos, "i" )
- },
-
- // Support
-
- // Used for testing something on an element
- assert = function( fn ) {
- var div = document.createElement("div");
-
- try {
- return fn( div );
- } catch (e) {
- return false;
- } finally {
- // release memory in IE
- div = null;
- }
- },
-
- // Check if getElementsByTagName("*") returns only elements
- assertTagNameNoComments = assert(function( div ) {
- div.appendChild( document.createComment("") );
- return !div.getElementsByTagName("*").length;
- }),
-
- // Check if getAttribute returns normalized href attributes
- assertHrefNotNormalized = assert(function( div ) {
- div.innerHTML = "<a href='#'></a>";
- return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
- div.firstChild.getAttribute("href") === "#";
- }),
-
- // Check if attributes should be retrieved by attribute nodes
- assertAttributes = assert(function( div ) {
- div.innerHTML = "<select></select>";
- var type = typeof div.lastChild.getAttribute("multiple");
- // IE8 returns a string for some attributes even when not present
- return type !== "boolean" && type !== "string";
- }),
-
- // Check if getElementsByClassName can be trusted
- assertUsableClassName = assert(function( div ) {
- // Opera can't find a second classname (in 9.6)
- div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
- if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
- return false;
- }
-
- // Safari 3.2 caches class attributes and doesn't catch changes
- div.lastChild.className = "e";
- return div.getElementsByClassName("e").length === 2;
- }),
-
- // Check if getElementById returns elements by name
- // Check if getElementsByName privileges form controls or returns elements by ID
- assertUsableName = assert(function( div ) {
- // Inject content
- div.id = expando + 0;
- div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
- docElem.insertBefore( div, docElem.firstChild );
-
- // Test
- var pass = document.getElementsByName &&
- // buggy browsers will return fewer than the correct 2
- document.getElementsByName( expando ).length === 2 +
- // buggy browsers will return more than the correct 0
- document.getElementsByName( expando + 0 ).length;
- assertGetIdNotName = !document.getElementById( expando );
-
- // Cleanup
- docElem.removeChild( div );
-
- return pass;
- });
-
-// If slice is not available, provide a backup
-try {
- slice.call( docElem.childNodes, 0 )[0].nodeType;
-} catch ( e ) {
- slice = function( i ) {
- var elem,
- results = [];
- for ( ; (elem = this[i]); i++ ) {
- results.push( elem );
- }
- return results;
- };
-}
-
-function Sizzle( selector, context, results, seed ) {
- results = results || [];
- context = context || document;
- var match, elem, xml, m,
- nodeType = context.nodeType;
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- if ( nodeType !== 1 && nodeType !== 9 ) {
- return [];
- }
-
- xml = isXML( context );
-
- if ( !xml && !seed ) {
- if ( (match = rquickExpr.exec( selector )) ) {
- // Speed-up: Sizzle("#ID")
- if ( (m = match[1]) ) {
- if ( nodeType === 9 ) {
- elem = context.getElementById( m );
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE, Opera, and Webkit return items
- // by name instead of ID
- if ( elem.id === m ) {
- results.push( elem );
- return results;
- }
- } else {
- return results;
- }
- } else {
- // Context is not a document
- if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
- contains( context, elem ) && elem.id === m ) {
- results.push( elem );
- return results;
- }
- }
-
- // Speed-up: Sizzle("TAG")
- } else if ( match[2] ) {
- push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
- return results;
-
- // Speed-up: Sizzle(".CLASS")
- } else if ( (m = match[3]) && assertUsableClassName && context.getElementsByClassName ) {
- push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
- return results;
- }
- }
- }
-
- // All others
- return select( selector.replace( rtrim, "$1" ), context, results, seed, xml );
-}
-
-Sizzle.matches = function( expr, elements ) {
- return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
- return Sizzle( expr, null, null, [ elem ] ).length > 0;
-};
-
-// Returns a function to use in pseudos for input types
-function createInputPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === type;
- };
-}
-
-// Returns a function to use in pseudos for buttons
-function createButtonPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && elem.type === type;
- };
-}
-
-// Returns a function to use in pseudos for positionals
-function createPositionalPseudo( fn ) {
- return markFunction(function( argument ) {
- argument = +argument;
- return markFunction(function( seed, matches ) {
- var j,
- matchIndexes = fn( [], seed.length, argument ),
- i = matchIndexes.length;
-
- // Match elements found at the specified indexes
- while ( i-- ) {
- if ( seed[ (j = matchIndexes[i]) ] ) {
- seed[j] = !(matches[j] = seed[j]);
- }
- }
- });
- });
-}
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
- var node,
- ret = "",
- i = 0,
- nodeType = elem.nodeType;
-
- if ( nodeType ) {
- if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
- // Use textContent for elements
- // innerText usage removed for consistency of new lines (see #11153)
- if ( typeof elem.textContent === "string" ) {
- return elem.textContent;
- } else {
- // Traverse its children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
- // Do not include comment or processing instruction nodes
- } else {
-
- // If no nodeType, this is expected to be an array
- for ( ; (node = elem[i]); i++ ) {
- // Do not traverse comment nodes
- ret += getText( node );
- }
- }
- return ret;
-};
-
-isXML = Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = elem && (elem.ownerDocument || elem).documentElement;
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-// Element contains another
-contains = Sizzle.contains = docElem.contains ?
- function( a, b ) {
- var adown = a.nodeType === 9 ? a.documentElement : a,
- bup = b && b.parentNode;
- return a === bup || !!( bup && bup.nodeType === 1 && adown.contains && adown.contains(bup) );
- } :
- docElem.compareDocumentPosition ?
- function( a, b ) {
- return b && !!( a.compareDocumentPosition( b ) & 16 );
- } :
- function( a, b ) {
- while ( (b = b.parentNode) ) {
- if ( b === a ) {
- return true;
- }
- }
- return false;
- };
-
-Sizzle.attr = function( elem, name ) {
- var val,
- xml = isXML( elem );
-
- if ( !xml ) {
- name = name.toLowerCase();
- }
- if ( (val = Expr.attrHandle[ name ]) ) {
- return val( elem );
- }
- if ( xml || assertAttributes ) {
- return elem.getAttribute( name );
- }
- val = elem.getAttributeNode( name );
- return val ?
- typeof elem[ name ] === "boolean" ?
- elem[ name ] ? name : null :
- val.specified ? val.value : null :
- null;
-};
-
-Expr = Sizzle.selectors = {
-
- // Can be adjusted by the user
- cacheLength: 50,
-
- createPseudo: markFunction,
-
- match: matchExpr,
-
- // IE6/7 return a modified href
- attrHandle: assertHrefNotNormalized ?
- {} :
- {
- "href": function( elem ) {
- return elem.getAttribute( "href", 2 );
- },
- "type": function( elem ) {
- return elem.getAttribute("type");
- }
- },
-
- find: {
- "ID": assertGetIdNotName ?
- function( id, context, xml ) {
- if ( typeof context.getElementById !== strundefined && !xml ) {
- var m = context.getElementById( id );
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- return m && m.parentNode ? [m] : [];
- }
- } :
- function( id, context, xml ) {
- if ( typeof context.getElementById !== strundefined && !xml ) {
- var m = context.getElementById( id );
-
- return m ?
- m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
- [m] :
- undefined :
- [];
- }
- },
-
- "TAG": assertTagNameNoComments ?
- function( tag, context ) {
- if ( typeof context.getElementsByTagName !== strundefined ) {
- return context.getElementsByTagName( tag );
- }
- } :
- function( tag, context ) {
- var results = context.getElementsByTagName( tag );
-
- // Filter out possible comments
- if ( tag === "*" ) {
- var elem,
- tmp = [],
- i = 0;
-
- for ( ; (elem = results[i]); i++ ) {
- if ( elem.nodeType === 1 ) {
- tmp.push( elem );
- }
- }
-
- return tmp;
- }
- return results;
- },
-
- "NAME": assertUsableName && function( tag, context ) {
- if ( typeof context.getElementsByName !== strundefined ) {
- return context.getElementsByName( name );
- }
- },
-
- "CLASS": assertUsableClassName && function( className, context, xml ) {
- if ( typeof context.getElementsByClassName !== strundefined && !xml ) {
- return context.getElementsByClassName( className );
- }
- }
- },
-
- relative: {
- ">": { dir: "parentNode", first: true },
- " ": { dir: "parentNode" },
- "+": { dir: "previousSibling", first: true },
- "~": { dir: "previousSibling" }
- },
-
- preFilter: {
- "ATTR": function( match ) {
- match[1] = match[1].replace( rbackslash, "" );
-
- // Move the given value to match[3] whether quoted or unquoted
- match[3] = ( match[4] || match[5] || "" ).replace( rbackslash, "" );
-
- if ( match[2] === "~=" ) {
- match[3] = " " + match[3] + " ";
- }
-
- return match.slice( 0, 4 );
- },
-
- "CHILD": function( match ) {
- /* matches from matchExpr["CHILD"]
- 1 type (only|nth|...)
- 2 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
- 3 xn-component of xn+y argument ([+-]?\d*n|)
- 4 sign of xn-component
- 5 x of xn-component
- 6 sign of y-component
- 7 y of y-component
- */
- match[1] = match[1].toLowerCase();
-
- if ( match[1] === "nth" ) {
- // nth-child requires argument
- if ( !match[2] ) {
- Sizzle.error( match[0] );
- }
-
- // numeric x and y parameters for Expr.filter.CHILD
- // remember that false/true cast respectively to 0/1
- match[3] = +( match[3] ? match[4] + (match[5] || 1) : 2 * ( match[2] === "even" || match[2] === "odd" ) );
- match[4] = +( ( match[6] + match[7] ) || match[2] === "odd" );
-
- // other types prohibit arguments
- } else if ( match[2] ) {
- Sizzle.error( match[0] );
- }
-
- return match;
- },
-
- "PSEUDO": function( match ) {
- var unquoted, excess;
- if ( matchExpr["CHILD"].test( match[0] ) ) {
- return null;
- }
-
- if ( match[3] ) {
- match[2] = match[3];
- } else if ( (unquoted = match[4]) ) {
- // Only check arguments that contain a pseudo
- if ( rpseudo.test(unquoted) &&
- // Get excess from tokenize (recursively)
- (excess = tokenize( unquoted, true )) &&
- // advance to the next closing parenthesis
- (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
- // excess is a negative index
- unquoted = unquoted.slice( 0, excess );
- match[0] = match[0].slice( 0, excess );
- }
- match[2] = unquoted;
- }
-
- // Return only captures needed by the pseudo filter method (type and argument)
- return match.slice( 0, 3 );
- }
- },
-
- filter: {
- "ID": assertGetIdNotName ?
- function( id ) {
- id = id.replace( rbackslash, "" );
- return function( elem ) {
- return elem.getAttribute("id") === id;
- };
- } :
- function( id ) {
- id = id.replace( rbackslash, "" );
- return function( elem ) {
- var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
- return node && node.value === id;
- };
- },
-
- "TAG": function( nodeName ) {
- if ( nodeName === "*" ) {
- return function() { return true; };
- }
- nodeName = nodeName.replace( rbackslash, "" ).toLowerCase();
-
- return function( elem ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
- };
- },
-
- "CLASS": function( className ) {
- var pattern = classCache[ expando ][ className + " " ];
-
- return pattern ||
- (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
- classCache( className, function( elem ) {
- return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
- });
- },
-
- "ATTR": function( name, operator, check ) {
- return function( elem, context ) {
- var result = Sizzle.attr( elem, name );
-
- if ( result == null ) {
- return operator === "!=";
- }
- if ( !operator ) {
- return true;
- }
-
- result += "";
-
- return operator === "=" ? result === check :
- operator === "!=" ? result !== check :
- operator === "^=" ? check && result.indexOf( check ) === 0 :
- operator === "*=" ? check && result.indexOf( check ) > -1 :
- operator === "$=" ? check && result.substr( result.length - check.length ) === check :
- operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
- operator === "|=" ? result === check || result.substr( 0, check.length + 1 ) === check + "-" :
- false;
- };
- },
-
- "CHILD": function( type, argument, first, last ) {
-
- if ( type === "nth" ) {
- return function( elem ) {
- var node, diff,
- parent = elem.parentNode;
-
- if ( first === 1 && last === 0 ) {
- return true;
- }
-
- if ( parent ) {
- diff = 0;
- for ( node = parent.firstChild; node; node = node.nextSibling ) {
- if ( node.nodeType === 1 ) {
- diff++;
- if ( elem === node ) {
- break;
- }
- }
- }
- }
-
- // Incorporate the offset (or cast to NaN), then check against cycle size
- diff -= last;
- return diff === first || ( diff % first === 0 && diff / first >= 0 );
- };
- }
-
- return function( elem ) {
- var node = elem;
-
- switch ( type ) {
- case "only":
- case "first":
- while ( (node = node.previousSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
-
- if ( type === "first" ) {
- return true;
- }
-
- node = elem;
-
- /* falls through */
- case "last":
- while ( (node = node.nextSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
-
- return true;
- }
- };
- },
-
- "PSEUDO": function( pseudo, argument ) {
- // pseudo-class names are case-insensitive
- // http://www.w3.org/TR/selectors/#pseudo-classes
- // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
- // Remember that setFilters inherits from pseudos
- var args,
- fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
- Sizzle.error( "unsupported pseudo: " + pseudo );
-
- // The user may use createPseudo to indicate that
- // arguments are needed to create the filter function
- // just as Sizzle does
- if ( fn[ expando ] ) {
- return fn( argument );
- }
-
- // But maintain support for old signatures
- if ( fn.length > 1 ) {
- args = [ pseudo, pseudo, "", argument ];
- return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
- markFunction(function( seed, matches ) {
- var idx,
- matched = fn( seed, argument ),
- i = matched.length;
- while ( i-- ) {
- idx = indexOf.call( seed, matched[i] );
- seed[ idx ] = !( matches[ idx ] = matched[i] );
- }
- }) :
- function( elem ) {
- return fn( elem, 0, args );
- };
- }
-
- return fn;
- }
- },
-
- pseudos: {
- "not": markFunction(function( selector ) {
- // Trim the selector passed to compile
- // to avoid treating leading and trailing
- // spaces as combinators
- var input = [],
- results = [],
- matcher = compile( selector.replace( rtrim, "$1" ) );
-
- return matcher[ expando ] ?
- markFunction(function( seed, matches, context, xml ) {
- var elem,
- unmatched = matcher( seed, null, xml, [] ),
- i = seed.length;
-
- // Match elements unmatched by `matcher`
- while ( i-- ) {
- if ( (elem = unmatched[i]) ) {
- seed[i] = !(matches[i] = elem);
- }
- }
- }) :
- function( elem, context, xml ) {
- input[0] = elem;
- matcher( input, null, xml, results );
- return !results.pop();
- };
- }),
-
- "has": markFunction(function( selector ) {
- return function( elem ) {
- return Sizzle( selector, elem ).length > 0;
- };
- }),
-
- "contains": markFunction(function( text ) {
- return function( elem ) {
- return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
- };
- }),
-
- "enabled": function( elem ) {
- return elem.disabled === false;
- },
-
- "disabled": function( elem ) {
- return elem.disabled === true;
- },
-
- "checked": function( elem ) {
- // In CSS3, :checked should return both checked and selected elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- var nodeName = elem.nodeName.toLowerCase();
- return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
- },
-
- "selected": function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- "parent": function( elem ) {
- return !Expr.pseudos["empty"]( elem );
- },
-
- "empty": function( elem ) {
- // http://www.w3.org/TR/selectors/#empty-pseudo
- // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
- // not comment, processing instructions, or others
- // Thanks to Diego Perini for the nodeName shortcut
- // Greater than "@" means alpha characters (specifically not starting with "#" or "?")
- var nodeType;
- elem = elem.firstChild;
- while ( elem ) {
- if ( elem.nodeName > "@" || (nodeType = elem.nodeType) === 3 || nodeType === 4 ) {
- return false;
- }
- elem = elem.nextSibling;
- }
- return true;
- },
-
- "header": function( elem ) {
- return rheader.test( elem.nodeName );
- },
-
- "text": function( elem ) {
- var type, attr;
- // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
- // use getAttribute instead to test this case
- return elem.nodeName.toLowerCase() === "input" &&
- (type = elem.type) === "text" &&
- ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === type );
- },
-
- // Input types
- "radio": createInputPseudo("radio"),
- "checkbox": createInputPseudo("checkbox"),
- "file": createInputPseudo("file"),
- "password": createInputPseudo("password"),
- "image": createInputPseudo("image"),
-
- "submit": createButtonPseudo("submit"),
- "reset": createButtonPseudo("reset"),
-
- "button": function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === "button" || name === "button";
- },
-
- "input": function( elem ) {
- return rinputs.test( elem.nodeName );
- },
-
- "focus": function( elem ) {
- var doc = elem.ownerDocument;
- return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
- },
-
- "active": function( elem ) {
- return elem === elem.ownerDocument.activeElement;
- },
-
- // Positional types
- "first": createPositionalPseudo(function() {
- return [ 0 ];
- }),
-
- "last": createPositionalPseudo(function( matchIndexes, length ) {
- return [ length - 1 ];
- }),
-
- "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
- return [ argument < 0 ? argument + length : argument ];
- }),
-
- "even": createPositionalPseudo(function( matchIndexes, length ) {
- for ( var i = 0; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "odd": createPositionalPseudo(function( matchIndexes, length ) {
- for ( var i = 1; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- for ( var i = argument < 0 ? argument + length : argument; --i >= 0; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- for ( var i = argument < 0 ? argument + length : argument; ++i < length; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- })
- }
-};
-
-function siblingCheck( a, b, ret ) {
- if ( a === b ) {
- return ret;
- }
-
- var cur = a.nextSibling;
-
- while ( cur ) {
- if ( cur === b ) {
- return -1;
- }
-
- cur = cur.nextSibling;
- }
-
- return 1;
-}
-
-sortOrder = docElem.compareDocumentPosition ?
- function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- return ( !a.compareDocumentPosition || !b.compareDocumentPosition ?
- a.compareDocumentPosition :
- a.compareDocumentPosition(b) & 4
- ) ? -1 : 1;
- } :
- function( a, b ) {
- // The nodes are identical, we can exit early
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
-
- // Fallback to using sourceIndex (in IE) if it's available on both nodes
- } else if ( a.sourceIndex && b.sourceIndex ) {
- return a.sourceIndex - b.sourceIndex;
- }
-
- var al, bl,
- ap = [],
- bp = [],
- aup = a.parentNode,
- bup = b.parentNode,
- cur = aup;
-
- // If the nodes are siblings (or identical) we can do a quick check
- if ( aup === bup ) {
- return siblingCheck( a, b );
-
- // If no parents were found then the nodes are disconnected
- } else if ( !aup ) {
- return -1;
-
- } else if ( !bup ) {
- return 1;
- }
-
- // Otherwise they're somewhere else in the tree so we need
- // to build up a full list of the parentNodes for comparison
- while ( cur ) {
- ap.unshift( cur );
- cur = cur.parentNode;
- }
-
- cur = bup;
-
- while ( cur ) {
- bp.unshift( cur );
- cur = cur.parentNode;
- }
-
- al = ap.length;
- bl = bp.length;
-
- // Start walking down the tree looking for a discrepancy
- for ( var i = 0; i < al && i < bl; i++ ) {
- if ( ap[i] !== bp[i] ) {
- return siblingCheck( ap[i], bp[i] );
- }
- }
-
- // We ended someplace up the tree so do a sibling check
- return i === al ?
- siblingCheck( a, bp[i], -1 ) :
- siblingCheck( ap[i], b, 1 );
- };
-
-// Always assume the presence of duplicates if sort doesn't
-// pass them to our comparison function (as in Google Chrome).
-[0, 0].sort( sortOrder );
-baseHasDuplicate = !hasDuplicate;
-
-// Document sorting and removing duplicates
-Sizzle.uniqueSort = function( results ) {
- var elem,
- duplicates = [],
- i = 1,
- j = 0;
-
- hasDuplicate = baseHasDuplicate;
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- for ( ; (elem = results[i]); i++ ) {
- if ( elem === results[ i - 1 ] ) {
- j = duplicates.push( i );
- }
- }
- while ( j-- ) {
- results.splice( duplicates[ j ], 1 );
- }
- }
-
- return results;
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-function tokenize( selector, parseOnly ) {
- var matched, match, tokens, type,
- soFar, groups, preFilters,
- cached = tokenCache[ expando ][ selector + " " ];
-
- if ( cached ) {
- return parseOnly ? 0 : cached.slice( 0 );
- }
-
- soFar = selector;
- groups = [];
- preFilters = Expr.preFilter;
-
- while ( soFar ) {
-
- // Comma and first run
- if ( !matched || (match = rcomma.exec( soFar )) ) {
- if ( match ) {
- // Don't consume trailing commas as valid
- soFar = soFar.slice( match[0].length ) || soFar;
- }
- groups.push( tokens = [] );
- }
-
- matched = false;
-
- // Combinators
- if ( (match = rcombinators.exec( soFar )) ) {
- tokens.push( matched = new Token( match.shift() ) );
- soFar = soFar.slice( matched.length );
-
- // Cast descendant combinators to space
- matched.type = match[0].replace( rtrim, " " );
- }
-
- // Filters
- for ( type in Expr.filter ) {
- if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
- (match = preFilters[ type ]( match ))) ) {
-
- tokens.push( matched = new Token( match.shift() ) );
- soFar = soFar.slice( matched.length );
- matched.type = type;
- matched.matches = match;
- }
- }
-
- if ( !matched ) {
- break;
- }
- }
-
- // Return the length of the invalid excess
- // if we're just parsing
- // Otherwise, throw an error or return tokens
- return parseOnly ?
- soFar.length :
- soFar ?
- Sizzle.error( selector ) :
- // Cache the tokens
- tokenCache( selector, groups ).slice( 0 );
-}
-
-function addCombinator( matcher, combinator, base ) {
- var dir = combinator.dir,
- checkNonElements = base && combinator.dir === "parentNode",
- doneName = done++;
-
- return combinator.first ?
- // Check against closest ancestor/preceding element
- function( elem, context, xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( checkNonElements || elem.nodeType === 1 ) {
- return matcher( elem, context, xml );
- }
- }
- } :
-
- // Check against all ancestor/preceding elements
- function( elem, context, xml ) {
- // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
- if ( !xml ) {
- var cache,
- dirkey = dirruns + " " + doneName + " ",
- cachedkey = dirkey + cachedruns;
- while ( (elem = elem[ dir ]) ) {
- if ( checkNonElements || elem.nodeType === 1 ) {
- if ( (cache = elem[ expando ]) === cachedkey ) {
- return elem.sizset;
- } else if ( typeof cache === "string" && cache.indexOf(dirkey) === 0 ) {
- if ( elem.sizset ) {
- return elem;
- }
- } else {
- elem[ expando ] = cachedkey;
- if ( matcher( elem, context, xml ) ) {
- elem.sizset = true;
- return elem;
- }
- elem.sizset = false;
- }
- }
- }
- } else {
- while ( (elem = elem[ dir ]) ) {
- if ( checkNonElements || elem.nodeType === 1 ) {
- if ( matcher( elem, context, xml ) ) {
- return elem;
- }
- }
- }
- }
- };
-}
-
-function elementMatcher( matchers ) {
- return matchers.length > 1 ?
- function( elem, context, xml ) {
- var i = matchers.length;
- while ( i-- ) {
- if ( !matchers[i]( elem, context, xml ) ) {
- return false;
- }
- }
- return true;
- } :
- matchers[0];
-}
-
-function condense( unmatched, map, filter, context, xml ) {
- var elem,
- newUnmatched = [],
- i = 0,
- len = unmatched.length,
- mapped = map != null;
-
- for ( ; i < len; i++ ) {
- if ( (elem = unmatched[i]) ) {
- if ( !filter || filter( elem, context, xml ) ) {
- newUnmatched.push( elem );
- if ( mapped ) {
- map.push( i );
- }
- }
- }
- }
-
- return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
- if ( postFilter && !postFilter[ expando ] ) {
- postFilter = setMatcher( postFilter );
- }
- if ( postFinder && !postFinder[ expando ] ) {
- postFinder = setMatcher( postFinder, postSelector );
- }
- return markFunction(function( seed, results, context, xml ) {
- var temp, i, elem,
- preMap = [],
- postMap = [],
- preexisting = results.length,
-
- // Get initial elements from seed or context
- elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
- // Prefilter to get matcher input, preserving a map for seed-results synchronization
- matcherIn = preFilter && ( seed || !selector ) ?
- condense( elems, preMap, preFilter, context, xml ) :
- elems,
-
- matcherOut = matcher ?
- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
- // ...intermediate processing is necessary
- [] :
-
- // ...otherwise use results directly
- results :
- matcherIn;
-
- // Find primary matches
- if ( matcher ) {
- matcher( matcherIn, matcherOut, context, xml );
- }
-
- // Apply postFilter
- if ( postFilter ) {
- temp = condense( matcherOut, postMap );
- postFilter( temp, [], context, xml );
-
- // Un-match failing elements by moving them back to matcherIn
- i = temp.length;
- while ( i-- ) {
- if ( (elem = temp[i]) ) {
- matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
- }
- }
- }
-
- if ( seed ) {
- if ( postFinder || preFilter ) {
- if ( postFinder ) {
- // Get the final matcherOut by condensing this intermediate into postFinder contexts
- temp = [];
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) ) {
- // Restore matcherIn since elem is not yet a final match
- temp.push( (matcherIn[i] = elem) );
- }
- }
- postFinder( null, (matcherOut = []), temp, xml );
- }
-
- // Move matched elements from seed to results to keep them synchronized
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) &&
- (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
-
- seed[temp] = !(results[temp] = elem);
- }
- }
- }
-
- // Add elements to results, through postFinder if defined
- } else {
- matcherOut = condense(
- matcherOut === results ?
- matcherOut.splice( preexisting, matcherOut.length ) :
- matcherOut
- );
- if ( postFinder ) {
- postFinder( null, results, matcherOut, xml );
- } else {
- push.apply( results, matcherOut );
- }
- }
- });
-}
-
-function matcherFromTokens( tokens ) {
- var checkContext, matcher, j,
- len = tokens.length,
- leadingRelative = Expr.relative[ tokens[0].type ],
- implicitRelative = leadingRelative || Expr.relative[" "],
- i = leadingRelative ? 1 : 0,
-
- // The foundational matcher ensures that elements are reachable from top-level context(s)
- matchContext = addCombinator( function( elem ) {
- return elem === checkContext;
- }, implicitRelative, true ),
- matchAnyContext = addCombinator( function( elem ) {
- return indexOf.call( checkContext, elem ) > -1;
- }, implicitRelative, true ),
- matchers = [ function( elem, context, xml ) {
- return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
- (checkContext = context).nodeType ?
- matchContext( elem, context, xml ) :
- matchAnyContext( elem, context, xml ) );
- } ];
-
- for ( ; i < len; i++ ) {
- if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
- matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
- } else {
- matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
- // Return special upon seeing a positional matcher
- if ( matcher[ expando ] ) {
- // Find the next relative operator (if any) for proper handling
- j = ++i;
- for ( ; j < len; j++ ) {
- if ( Expr.relative[ tokens[j].type ] ) {
- break;
- }
- }
- return setMatcher(
- i > 1 && elementMatcher( matchers ),
- i > 1 && tokens.slice( 0, i - 1 ).join("").replace( rtrim, "$1" ),
- matcher,
- i < j && matcherFromTokens( tokens.slice( i, j ) ),
- j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
- j < len && tokens.join("")
- );
- }
- matchers.push( matcher );
- }
- }
-
- return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
- var bySet = setMatchers.length > 0,
- byElement = elementMatchers.length > 0,
- superMatcher = function( seed, context, xml, results, expandContext ) {
- var elem, j, matcher,
- setMatched = [],
- matchedCount = 0,
- i = "0",
- unmatched = seed && [],
- outermost = expandContext != null,
- contextBackup = outermostContext,
- // We must always have either seed elements or context
- elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
- // Nested matchers should use non-integer dirruns
- dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.E);
-
- if ( outermost ) {
- outermostContext = context !== document && context;
- cachedruns = superMatcher.el;
- }
-
- // Add elements passing elementMatchers directly to results
- for ( ; (elem = elems[i]) != null; i++ ) {
- if ( byElement && elem ) {
- for ( j = 0; (matcher = elementMatchers[j]); j++ ) {
- if ( matcher( elem, context, xml ) ) {
- results.push( elem );
- break;
- }
- }
- if ( outermost ) {
- dirruns = dirrunsUnique;
- cachedruns = ++superMatcher.el;
- }
- }
-
- // Track unmatched elements for set filters
- if ( bySet ) {
- // They will have gone through all possible matchers
- if ( (elem = !matcher && elem) ) {
- matchedCount--;
- }
-
- // Lengthen the array for every element, matched or not
- if ( seed ) {
- unmatched.push( elem );
- }
- }
- }
-
- // Apply set filters to unmatched elements
- matchedCount += i;
- if ( bySet && i !== matchedCount ) {
- for ( j = 0; (matcher = setMatchers[j]); j++ ) {
- matcher( unmatched, setMatched, context, xml );
- }
-
- if ( seed ) {
- // Reintegrate element matches to eliminate the need for sorting
- if ( matchedCount > 0 ) {
- while ( i-- ) {
- if ( !(unmatched[i] || setMatched[i]) ) {
- setMatched[i] = pop.call( results );
- }
- }
- }
-
- // Discard index placeholder values to get only actual matches
- setMatched = condense( setMatched );
- }
-
- // Add matches to results
- push.apply( results, setMatched );
-
- // Seedless set matches succeeding multiple successful matchers stipulate sorting
- if ( outermost && !seed && setMatched.length > 0 &&
- ( matchedCount + setMatchers.length ) > 1 ) {
-
- Sizzle.uniqueSort( results );
- }
- }
-
- // Override manipulation of globals by nested matchers
- if ( outermost ) {
- dirruns = dirrunsUnique;
- outermostContext = contextBackup;
- }
-
- return unmatched;
- };
-
- superMatcher.el = 0;
- return bySet ?
- markFunction( superMatcher ) :
- superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
- var i,
- setMatchers = [],
- elementMatchers = [],
- cached = compilerCache[ expando ][ selector + " " ];
-
- if ( !cached ) {
- // Generate a function of recursive functions that can be used to check each element
- if ( !group ) {
- group = tokenize( selector );
- }
- i = group.length;
- while ( i-- ) {
- cached = matcherFromTokens( group[i] );
- if ( cached[ expando ] ) {
- setMatchers.push( cached );
- } else {
- elementMatchers.push( cached );
- }
- }
-
- // Cache the compiled function
- cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
- }
- return cached;
-};
-
-function multipleContexts( selector, contexts, results ) {
- var i = 0,
- len = contexts.length;
- for ( ; i < len; i++ ) {
- Sizzle( selector, contexts[i], results );
- }
- return results;
-}
-
-function select( selector, context, results, seed, xml ) {
- var i, tokens, token, type, find,
- match = tokenize( selector ),
- j = match.length;
-
- if ( !seed ) {
- // Try to minimize operations if there is only one group
- if ( match.length === 1 ) {
-
- // Take a shortcut and set the context if the root selector is an ID
- tokens = match[0] = match[0].slice( 0 );
- if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
- context.nodeType === 9 && !xml &&
- Expr.relative[ tokens[1].type ] ) {
-
- context = Expr.find["ID"]( token.matches[0].replace( rbackslash, "" ), context, xml )[0];
- if ( !context ) {
- return results;
- }
-
- selector = selector.slice( tokens.shift().length );
- }
-
- // Fetch a seed set for right-to-left matching
- for ( i = matchExpr["POS"].test( selector ) ? -1 : tokens.length - 1; i >= 0; i-- ) {
- token = tokens[i];
-
- // Abort if we hit a combinator
- if ( Expr.relative[ (type = token.type) ] ) {
- break;
- }
- if ( (find = Expr.find[ type ]) ) {
- // Search, expanding context for leading sibling combinators
- if ( (seed = find(
- token.matches[0].replace( rbackslash, "" ),
- rsibling.test( tokens[0].type ) && context.parentNode || context,
- xml
- )) ) {
-
- // If seed is empty or no tokens remain, we can return early
- tokens.splice( i, 1 );
- selector = seed.length && tokens.join("");
- if ( !selector ) {
- push.apply( results, slice.call( seed, 0 ) );
- return results;
- }
-
- break;
- }
- }
- }
- }
- }
-
- // Compile and execute a filtering function
- // Provide `match` to avoid retokenization if we modified the selector above
- compile( selector, match )(
- seed,
- context,
- xml,
- results,
- rsibling.test( selector )
- );
- return results;
-}
-
-if ( document.querySelectorAll ) {
- (function() {
- var disconnectedMatch,
- oldSelect = select,
- rescape = /'|\\/g,
- rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
-
- // qSa(:focus) reports false when true (Chrome 21), no need to also add to buggyMatches since matches checks buggyQSA
- // A support test would require too much code (would include document ready)
- rbuggyQSA = [ ":focus" ],
-
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
- // A support test would require too much code (would include document ready)
- // just skip matchesSelector for :active
- rbuggyMatches = [ ":active" ],
- matches = docElem.matchesSelector ||
- docElem.mozMatchesSelector ||
- docElem.webkitMatchesSelector ||
- docElem.oMatchesSelector ||
- docElem.msMatchesSelector;
-
- // Build QSA regex
- // Regex strategy adopted from Diego Perini
- assert(function( div ) {
- // Select is set to empty string on purpose
- // This is to test IE's treatment of not explictly
- // setting a boolean content attribute,
- // since its presence should be enough
- // http://bugs.jquery.com/ticket/12359
- div.innerHTML = "<select><option selected=''></option></select>";
-
- // IE8 - Some boolean attributes are not treated correctly
- if ( !div.querySelectorAll("[selected]").length ) {
- rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
- }
-
- // Webkit/Opera - :checked should return selected option elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- // IE8 throws error here (do not put tests after this one)
- if ( !div.querySelectorAll(":checked").length ) {
- rbuggyQSA.push(":checked");
- }
- });
-
- assert(function( div ) {
-
- // Opera 10-12/IE9 - ^= $= *= and empty values
- // Should not select anything
- div.innerHTML = "<p test=''></p>";
- if ( div.querySelectorAll("[test^='']").length ) {
- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
- }
-
- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
- // IE8 throws error here (do not put tests after this one)
- div.innerHTML = "<input type='hidden'/>";
- if ( !div.querySelectorAll(":enabled").length ) {
- rbuggyQSA.push(":enabled", ":disabled");
- }
- });
-
- // rbuggyQSA always contains :focus, so no need for a length check
- rbuggyQSA = /* rbuggyQSA.length && */ new RegExp( rbuggyQSA.join("|") );
-
- select = function( selector, context, results, seed, xml ) {
- // Only use querySelectorAll when not filtering,
- // when this is not xml,
- // and when no QSA bugs apply
- if ( !seed && !xml && !rbuggyQSA.test( selector ) ) {
- var groups, i,
- old = true,
- nid = expando,
- newContext = context,
- newSelector = context.nodeType === 9 && selector;
-
- // qSA works strangely on Element-rooted queries
- // We can work around this by specifying an extra ID on the root
- // and working up from there (Thanks to Andrew Dupont for the technique)
- // IE 8 doesn't work on object elements
- if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- groups = tokenize( selector );
-
- if ( (old = context.getAttribute("id")) ) {
- nid = old.replace( rescape, "\\$&" );
- } else {
- context.setAttribute( "id", nid );
- }
- nid = "[id='" + nid + "'] ";
-
- i = groups.length;
- while ( i-- ) {
- groups[i] = nid + groups[i].join("");
- }
- newContext = rsibling.test( selector ) && context.parentNode || context;
- newSelector = groups.join(",");
- }
-
- if ( newSelector ) {
- try {
- push.apply( results, slice.call( newContext.querySelectorAll(
- newSelector
- ), 0 ) );
- return results;
- } catch(qsaError) {
- } finally {
- if ( !old ) {
- context.removeAttribute("id");
- }
- }
- }
- }
-
- return oldSelect( selector, context, results, seed, xml );
- };
-
- if ( matches ) {
- assert(function( div ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9)
- disconnectedMatch = matches.call( div, "div" );
-
- // This should fail with an exception
- // Gecko does not error, returns false instead
- try {
- matches.call( div, "[test!='']:sizzle" );
- rbuggyMatches.push( "!=", pseudos );
- } catch ( e ) {}
- });
-
- // rbuggyMatches always contains :active and :focus, so no need for a length check
- rbuggyMatches = /* rbuggyMatches.length && */ new RegExp( rbuggyMatches.join("|") );
-
- Sizzle.matchesSelector = function( elem, expr ) {
- // Make sure that attribute selectors are quoted
- expr = expr.replace( rattributeQuotes, "='$1']" );
-
- // rbuggyMatches always contains :active, so no need for an existence check
- if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && !rbuggyQSA.test( expr ) ) {
- try {
- var ret = matches.call( elem, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9
- elem.document && elem.document.nodeType !== 11 ) {
- return ret;
- }
- } catch(e) {}
- }
-
- return Sizzle( expr, null, null, [ elem ] ).length > 0;
- };
- }
- })();
-}
-
-// Deprecated
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Back-compat
-function setFilters() {}
-Expr.filters = setFilters.prototype = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-// Override sizzle attribute retrieval
-Sizzle.attr = jQuery.attr;
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.pseudos;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})( window );
-var runtil = /Until$/,
- rparentsprev = /^(?:parents|prev(?:Until|All))/,
- isSimple = /^.[^:#\[\.,]*$/,
- rneedsContext = jQuery.expr.match.needsContext,
- // methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.fn.extend({
- find: function( selector ) {
- var i, l, length, n, r, ret,
- self = this;
-
- if ( typeof selector !== "string" ) {
- return jQuery( selector ).filter(function() {
- for ( i = 0, l = self.length; i < l; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- });
- }
-
- ret = this.pushStack( "", "find", selector );
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- length = ret.length;
- jQuery.find( selector, this[i], ret );
-
- if ( i > 0 ) {
- // Make sure that the results are unique
- for ( n = length; n < ret.length; n++ ) {
- for ( r = 0; r < length; r++ ) {
- if ( ret[r] === ret[n] ) {
- ret.splice(n--, 1);
- break;
- }
- }
- }
- }
- }
-
- return ret;
- },
-
- has: function( target ) {
- var i,
- targets = jQuery( target, this ),
- len = targets.length;
-
- return this.filter(function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
-
- not: function( selector ) {
- return this.pushStack( winnow(this, selector, false), "not", selector);
- },
-
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector, true), "filter", selector );
- },
-
- is: function( selector ) {
- return !!selector && (
- typeof selector === "string" ?
- // If this is a positional/relative selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- rneedsContext.test( selector ) ?
- jQuery( selector, this.context ).index( this[0] ) >= 0 :
- jQuery.filter( selector, this ).length > 0 :
- this.filter( selector ).length > 0 );
- },
-
- closest: function( selectors, context ) {
- var cur,
- i = 0,
- l = this.length,
- ret = [],
- pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
- jQuery( selectors, context || this.context ) :
- 0;
-
- for ( ; i < l; i++ ) {
- cur = this[i];
-
- while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
- if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
- ret.push( cur );
- break;
- }
- cur = cur.parentNode;
- }
- }
-
- ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
- return this.pushStack( ret, "closest", selectors );
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
- }
-
- // index in selector
- if ( typeof elem === "string" ) {
- return jQuery.inArray( this[0], jQuery( elem ) );
- }
-
- // Locate the position of the desired element
- return jQuery.inArray(
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[0] : elem, this );
- },
-
- add: function( selector, context ) {
- var set = typeof selector === "string" ?
- jQuery( selector, context ) :
- jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
- all = jQuery.merge( this.get(), set );
-
- return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
- all :
- jQuery.unique( all ) );
- },
-
- addBack: function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter(selector)
- );
- }
-});
-
-jQuery.fn.andSelf = jQuery.fn.addBack;
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
- return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-function sibling( cur, dir ) {
- do {
- cur = cur[ dir ];
- } while ( cur && cur.nodeType !== 1 );
-
- return cur;
-}
-
-jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return jQuery.dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return sibling( elem, "nextSibling" );
- },
- prev: function( elem ) {
- return sibling( elem, "previousSibling" );
- },
- nextAll: function( elem ) {
- return jQuery.dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return jQuery.dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
- },
- children: function( elem ) {
- return jQuery.sibling( elem.firstChild );
- },
- contents: function( elem ) {
- return jQuery.nodeName( elem, "iframe" ) ?
- elem.contentDocument || elem.contentWindow.document :
- jQuery.merge( [], elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until );
-
- if ( !runtil.test( name ) ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- ret = jQuery.filter( selector, ret );
- }
-
- ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
- if ( this.length > 1 && rparentsprev.test( name ) ) {
- ret = ret.reverse();
- }
-
- return this.pushStack( ret, name, core_slice.call( arguments ).join(",") );
- };
-});
-
-jQuery.extend({
- filter: function( expr, elems, not ) {
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 ?
- jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
- jQuery.find.matches(expr, elems);
- },
-
- dir: function( elem, dir, until ) {
- var matched = [],
- cur = elem[ dir ];
-
- while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
- if ( cur.nodeType === 1 ) {
- matched.push( cur );
- }
- cur = cur[dir];
- }
- return matched;
- },
-
- sibling: function( n, elem ) {
- var r = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- r.push( n );
- }
- }
-
- return r;
- }
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
-
- // Can't pass null or undefined to indexOf in Firefox 4
- // Set to 0 to skip string check
- qualifier = qualifier || 0;
-
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep(elements, function( elem, i ) {
- var retVal = !!qualifier.call( elem, i, elem );
- return retVal === keep;
- });
-
- } else if ( qualifier.nodeType ) {
- return jQuery.grep(elements, function( elem, i ) {
- return ( elem === qualifier ) === keep;
- });
-
- } else if ( typeof qualifier === "string" ) {
- var filtered = jQuery.grep(elements, function( elem ) {
- return elem.nodeType === 1;
- });
-
- if ( isSimple.test( qualifier ) ) {
- return jQuery.filter(qualifier, filtered, !keep);
- } else {
- qualifier = jQuery.filter( qualifier, filtered );
- }
- }
-
- return jQuery.grep(elements, function( elem, i ) {
- return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
- });
-}
-function createSafeFragment( document ) {
- var list = nodeNames.split( "|" ),
- safeFrag = document.createDocumentFragment();
-
- if ( safeFrag.createElement ) {
- while ( list.length ) {
- safeFrag.createElement(
- list.pop()
- );
- }
- }
- return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
- "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
- rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
- rleadingWhitespace = /^\s+/,
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
- rtagName = /<([\w:]+)/,
- rtbody = /<tbody/i,
- rhtml = /<|&#?\w+;/,
- rnoInnerhtml = /<(?:script|style|link)/i,
- rnocache = /<(?:script|object|embed|option|style)/i,
- rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
- rcheckableType = /^(?:checkbox|radio)$/,
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptType = /\/(java|ecma)script/i,
- rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,
- wrapMap = {
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
- legend: [ 1, "<fieldset>", "</fieldset>" ],
- thead: [ 1, "<table>", "</table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
- col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
- area: [ 1, "<map>", "</map>" ],
- _default: [ 0, "", "" ]
- },
- safeFragment = createSafeFragment( document ),
- fragmentDiv = safeFragment.appendChild( document.createElement("div") );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
-// unless wrapped in a div with non-breaking characters in front of it.
-if ( !jQuery.support.htmlSerialize ) {
- wrapMap._default = [ 1, "X<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
- text: function( value ) {
- return jQuery.access( this, function( value ) {
- return value === undefined ?
- jQuery.text( this ) :
- this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
- }, null, value, arguments.length );
- },
-
- wrapAll: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapAll( html.call(this, i) );
- });
- }
-
- if ( this[0] ) {
- // The elements to wrap the target around
- var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
- if ( this[0].parentNode ) {
- wrap.insertBefore( this[0] );
- }
-
- wrap.map(function() {
- var elem = this;
-
- while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
- elem = elem.firstChild;
- }
-
- return elem;
- }).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapInner( html.call(this, i) );
- });
- }
-
- return this.each(function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- });
- },
-
- wrap: function( html ) {
- var isFunction = jQuery.isFunction( html );
-
- return this.each(function(i) {
- jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
- });
- },
-
- unwrap: function() {
- return this.parent().each(function() {
- if ( !jQuery.nodeName( this, "body" ) ) {
- jQuery( this ).replaceWith( this.childNodes );
- }
- }).end();
- },
-
- append: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 ) {
- this.appendChild( elem );
- }
- });
- },
-
- prepend: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 ) {
- this.insertBefore( elem, this.firstChild );
- }
- });
- },
-
- before: function() {
- if ( !isDisconnected( this[0] ) ) {
- return this.domManip(arguments, false, function( elem ) {
- this.parentNode.insertBefore( elem, this );
- });
- }
-
- if ( arguments.length ) {
- var set = jQuery.clean( arguments );
- return this.pushStack( jQuery.merge( set, this ), "before", this.selector );
- }
- },
-
- after: function() {
- if ( !isDisconnected( this[0] ) ) {
- return this.domManip(arguments, false, function( elem ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- });
- }
-
- if ( arguments.length ) {
- var set = jQuery.clean( arguments );
- return this.pushStack( jQuery.merge( this, set ), "after", this.selector );
- }
- },
-
- // keepData is for internal use only--do not document
- remove: function( selector, keepData ) {
- var elem,
- i = 0;
-
- for ( ; (elem = this[i]) != null; i++ ) {
- if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName("*") );
- jQuery.cleanData( [ elem ] );
- }
-
- if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
- }
- }
- }
-
- return this;
- },
-
- empty: function() {
- var elem,
- i = 0;
-
- for ( ; (elem = this[i]) != null; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName("*") );
- }
-
- // Remove any remaining nodes
- while ( elem.firstChild ) {
- elem.removeChild( elem.firstChild );
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map( function () {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- });
- },
-
- html: function( value ) {
- return jQuery.access( this, function( value ) {
- var elem = this[0] || {},
- i = 0,
- l = this.length;
-
- if ( value === undefined ) {
- return elem.nodeType === 1 ?
- elem.innerHTML.replace( rinlinejQuery, "" ) :
- undefined;
- }
-
- // See if we can take a shortcut and just use innerHTML
- if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
- ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) &&
- ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
- !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
-
- value = value.replace( rxhtmlTag, "<$1></$2>" );
-
- try {
- for (; i < l; i++ ) {
- // Remove element nodes and prevent memory leaks
- elem = this[i] || {};
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName( "*" ) );
- elem.innerHTML = value;
- }
- }
-
- elem = 0;
-
- // If using innerHTML throws an exception, use the fallback method
- } catch(e) {}
- }
-
- if ( elem ) {
- this.empty().append( value );
- }
- }, null, value, arguments.length );
- },
-
- replaceWith: function( value ) {
- if ( !isDisconnected( this[0] ) ) {
- // Make sure that the elements are removed from the DOM before they are inserted
- // this can help fix replacing a parent with child elements
- if ( jQuery.isFunction( value ) ) {
- return this.each(function(i) {
- var self = jQuery(this), old = self.html();
- self.replaceWith( value.call( this, i, old ) );
- });
- }
-
- if ( typeof value !== "string" ) {
- value = jQuery( value ).detach();
- }
-
- return this.each(function() {
- var next = this.nextSibling,
- parent = this.parentNode;
-
- jQuery( this ).remove();
-
- if ( next ) {
- jQuery(next).before( value );
- } else {
- jQuery(parent).append( value );
- }
- });
- }
-
- return this.length ?
- this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
- this;
- },
-
- detach: function( selector ) {
- return this.remove( selector, true );
- },
-
- domManip: function( args, table, callback ) {
-
- // Flatten any nested arrays
- args = [].concat.apply( [], args );
-
- var results, first, fragment, iNoClone,
- i = 0,
- value = args[0],
- scripts = [],
- l = this.length;
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( !jQuery.support.checkClone && l > 1 && typeof value === "string" && rchecked.test( value ) ) {
- return this.each(function() {
- jQuery(this).domManip( args, table, callback );
- });
- }
-
- if ( jQuery.isFunction(value) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- args[0] = value.call( this, i, table ? self.html() : undefined );
- self.domManip( args, table, callback );
- });
- }
-
- if ( this[0] ) {
- results = jQuery.buildFragment( args, this, scripts );
- fragment = results.fragment;
- first = fragment.firstChild;
-
- if ( fragment.childNodes.length === 1 ) {
- fragment = first;
- }
-
- if ( first ) {
- table = table && jQuery.nodeName( first, "tr" );
-
- // Use the original fragment for the last item instead of the first because it can end up
- // being emptied incorrectly in certain situations (#8070).
- // Fragments from the fragment cache must always be cloned and never used in place.
- for ( iNoClone = results.cacheable || l - 1; i < l; i++ ) {
- callback.call(
- table && jQuery.nodeName( this[i], "table" ) ?
- findOrAppend( this[i], "tbody" ) :
- this[i],
- i === iNoClone ?
- fragment :
- jQuery.clone( fragment, true, true )
- );
- }
- }
-
- // Fix #11809: Avoid leaking memory
- fragment = first = null;
-
- if ( scripts.length ) {
- jQuery.each( scripts, function( i, elem ) {
- if ( elem.src ) {
- if ( jQuery.ajax ) {
- jQuery.ajax({
- url: elem.src,
- type: "GET",
- dataType: "script",
- async: false,
- global: false,
- "throws": true
- });
- } else {
- jQuery.error("no ajax");
- }
- } else {
- jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "" ) );
- }
-
- if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
- }
- });
- }
- }
-
- return this;
- }
-});
-
-function findOrAppend( elem, tag ) {
- return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
-}
-
-function cloneCopyEvent( src, dest ) {
-
- if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
- return;
- }
-
- var type, i, l,
- oldData = jQuery._data( src ),
- curData = jQuery._data( dest, oldData ),
- events = oldData.events;
-
- if ( events ) {
- delete curData.handle;
- curData.events = {};
-
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type, events[ type ][ i ] );
- }
- }
- }
-
- // make the cloned public data object a copy from the original
- if ( curData.data ) {
- curData.data = jQuery.extend( {}, curData.data );
- }
-}
-
-function cloneFixAttributes( src, dest ) {
- var nodeName;
-
- // We do not need to do anything for non-Elements
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- // clearAttributes removes the attributes, which we don't want,
- // but also removes the attachEvent events, which we *do* want
- if ( dest.clearAttributes ) {
- dest.clearAttributes();
- }
-
- // mergeAttributes, in contrast, only merges back on the
- // original attributes, not the events
- if ( dest.mergeAttributes ) {
- dest.mergeAttributes( src );
- }
-
- nodeName = dest.nodeName.toLowerCase();
-
- if ( nodeName === "object" ) {
- // IE6-10 improperly clones children of object elements using classid.
- // IE10 throws NoModificationAllowedError if parent is null, #12132.
- if ( dest.parentNode ) {
- dest.outerHTML = src.outerHTML;
- }
-
- // This path appears unavoidable for IE9. When cloning an object
- // element in IE9, the outerHTML strategy above is not sufficient.
- // If the src has innerHTML and the destination does not,
- // copy the src.innerHTML into the dest.innerHTML. #10324
- if ( jQuery.support.html5Clone && (src.innerHTML && !jQuery.trim(dest.innerHTML)) ) {
- dest.innerHTML = src.innerHTML;
- }
-
- } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
- // IE6-8 fails to persist the checked state of a cloned checkbox
- // or radio button. Worse, IE6-7 fail to give the cloned element
- // a checked appearance if the defaultChecked value isn't also set
-
- dest.defaultChecked = dest.checked = src.checked;
-
- // IE6-7 get confused and end up setting the value of a cloned
- // checkbox/radio button to an empty string instead of "on"
- if ( dest.value !== src.value ) {
- dest.value = src.value;
- }
-
- // IE6-8 fails to return the selected option to the default selected
- // state when cloning options
- } else if ( nodeName === "option" ) {
- dest.selected = src.defaultSelected;
-
- // IE6-8 fails to set the defaultValue to the correct value when
- // cloning other types of input fields
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
-
- // IE blanks contents when cloning scripts
- } else if ( nodeName === "script" && dest.text !== src.text ) {
- dest.text = src.text;
- }
-
- // Event data gets referenced instead of copied if the expando
- // gets copied too
- dest.removeAttribute( jQuery.expando );
-}
-
-jQuery.buildFragment = function( args, context, scripts ) {
- var fragment, cacheable, cachehit,
- first = args[ 0 ];
-
- // Set context from what may come in as undefined or a jQuery collection or a node
- // Updated to fix #12266 where accessing context[0] could throw an exception in IE9/10 &
- // also doubles as fix for #8950 where plain objects caused createDocumentFragment exception
- context = context || document;
- context = !context.nodeType && context[0] || context;
- context = context.ownerDocument || context;
-
- // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
- // Cloning options loses the selected state, so don't cache them
- // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
- // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
- // Lastly, IE6,7,8 will not correctly reuse cached fragments that were created from unknown elems #10501
- if ( args.length === 1 && typeof first === "string" && first.length < 512 && context === document &&
- first.charAt(0) === "<" && !rnocache.test( first ) &&
- (jQuery.support.checkClone || !rchecked.test( first )) &&
- (jQuery.support.html5Clone || !rnoshimcache.test( first )) ) {
-
- // Mark cacheable and look for a hit
- cacheable = true;
- fragment = jQuery.fragments[ first ];
- cachehit = fragment !== undefined;
- }
-
- if ( !fragment ) {
- fragment = context.createDocumentFragment();
- jQuery.clean( args, context, fragment, scripts );
-
- // Update the cache, but only store false
- // unless this is a second parsing of the same content
- if ( cacheable ) {
- jQuery.fragments[ first ] = cachehit && fragment;
- }
- }
-
- return { fragment: fragment, cacheable: cacheable };
-};
-
-jQuery.fragments = {};
-
-jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var elems,
- i = 0,
- ret = [],
- insert = jQuery( selector ),
- l = insert.length,
- parent = this.length === 1 && this[0].parentNode;
-
- if ( (parent == null || parent && parent.nodeType === 11 && parent.childNodes.length === 1) && l === 1 ) {
- insert[ original ]( this[0] );
- return this;
- } else {
- for ( ; i < l; i++ ) {
- elems = ( i > 0 ? this.clone(true) : this ).get();
- jQuery( insert[i] )[ original ]( elems );
- ret = ret.concat( elems );
- }
-
- return this.pushStack( ret, name, insert.selector );
- }
- };
-});
-
-function getAll( elem ) {
- if ( typeof elem.getElementsByTagName !== "undefined" ) {
- return elem.getElementsByTagName( "*" );
-
- } else if ( typeof elem.querySelectorAll !== "undefined" ) {
- return elem.querySelectorAll( "*" );
-
- } else {
- return [];
- }
-}
-
-// Used in clean, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
- if ( rcheckableType.test( elem.type ) ) {
- elem.defaultChecked = elem.checked;
- }
-}
-
-jQuery.extend({
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var srcElements,
- destElements,
- i,
- clone;
-
- if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
- clone = elem.cloneNode( true );
-
- // IE<=8 does not properly clone detached, unknown element nodes
- } else {
- fragmentDiv.innerHTML = elem.outerHTML;
- fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
- }
-
- if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
- (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
- // IE copies events bound via attachEvent when using cloneNode.
- // Calling detachEvent on the clone will also remove the events
- // from the original. In order to get around this, we use some
- // proprietary methods to clear the events. Thanks to MooTools
- // guys for this hotness.
-
- cloneFixAttributes( elem, clone );
-
- // Using Sizzle here is crazy slow, so we use getElementsByTagName instead
- srcElements = getAll( elem );
- destElements = getAll( clone );
-
- // Weird iteration because IE will replace the length property
- // with an element if you are cloning the body and one of the
- // elements on the page has a name or id of "length"
- for ( i = 0; srcElements[i]; ++i ) {
- // Ensure that the destination node is not null; Fixes #9587
- if ( destElements[i] ) {
- cloneFixAttributes( srcElements[i], destElements[i] );
- }
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- cloneCopyEvent( elem, clone );
-
- if ( deepDataAndEvents ) {
- srcElements = getAll( elem );
- destElements = getAll( clone );
-
- for ( i = 0; srcElements[i]; ++i ) {
- cloneCopyEvent( srcElements[i], destElements[i] );
- }
- }
- }
-
- srcElements = destElements = null;
-
- // Return the cloned set
- return clone;
- },
-
- clean: function( elems, context, fragment, scripts ) {
- var i, j, elem, tag, wrap, depth, div, hasBody, tbody, len, handleScript, jsTags,
- safe = context === document && safeFragment,
- ret = [];
-
- // Ensure that context is a document
- if ( !context || typeof context.createDocumentFragment === "undefined" ) {
- context = document;
- }
-
- // Use the already-created safe fragment if context permits
- for ( i = 0; (elem = elems[i]) != null; i++ ) {
- if ( typeof elem === "number" ) {
- elem += "";
- }
-
- if ( !elem ) {
- continue;
- }
-
- // Convert html string into DOM nodes
- if ( typeof elem === "string" ) {
- if ( !rhtml.test( elem ) ) {
- elem = context.createTextNode( elem );
- } else {
- // Ensure a safe container in which to render the html
- safe = safe || createSafeFragment( context );
- div = context.createElement("div");
- safe.appendChild( div );
-
- // Fix "XHTML"-style tags in all browsers
- elem = elem.replace(rxhtmlTag, "<$1></$2>");
-
- // Go to html and back, then peel off extra wrappers
- tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
- wrap = wrapMap[ tag ] || wrapMap._default;
- depth = wrap[0];
- div.innerHTML = wrap[1] + elem + wrap[2];
-
- // Move to the right depth
- while ( depth-- ) {
- div = div.lastChild;
- }
-
- // Remove IE's autoinserted <tbody> from table fragments
- if ( !jQuery.support.tbody ) {
-
- // String was a <table>, *may* have spurious <tbody>
- hasBody = rtbody.test(elem);
- tbody = tag === "table" && !hasBody ?
- div.firstChild && div.firstChild.childNodes :
-
- // String was a bare <thead> or <tfoot>
- wrap[1] === "<table>" && !hasBody ?
- div.childNodes :
- [];
-
- for ( j = tbody.length - 1; j >= 0 ; --j ) {
- if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
- tbody[ j ].parentNode.removeChild( tbody[ j ] );
- }
- }
- }
-
- // IE completely kills leading whitespace when innerHTML is used
- if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
- div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
- }
-
- elem = div.childNodes;
-
- // Take out of fragment container (we need a fresh div each time)
- div.parentNode.removeChild( div );
- }
- }
-
- if ( elem.nodeType ) {
- ret.push( elem );
- } else {
- jQuery.merge( ret, elem );
- }
- }
-
- // Fix #11356: Clear elements from safeFragment
- if ( div ) {
- elem = div = safe = null;
- }
-
- // Reset defaultChecked for any radios and checkboxes
- // about to be appended to the DOM in IE 6/7 (#8060)
- if ( !jQuery.support.appendChecked ) {
- for ( i = 0; (elem = ret[i]) != null; i++ ) {
- if ( jQuery.nodeName( elem, "input" ) ) {
- fixDefaultChecked( elem );
- } else if ( typeof elem.getElementsByTagName !== "undefined" ) {
- jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
- }
- }
- }
-
- // Append elements to a provided document fragment
- if ( fragment ) {
- // Special handling of each script element
- handleScript = function( elem ) {
- // Check if we consider it executable
- if ( !elem.type || rscriptType.test( elem.type ) ) {
- // Detach the script and store it in the scripts array (if provided) or the fragment
- // Return truthy to indicate that it has been handled
- return scripts ?
- scripts.push( elem.parentNode ? elem.parentNode.removeChild( elem ) : elem ) :
- fragment.appendChild( elem );
- }
- };
-
- for ( i = 0; (elem = ret[i]) != null; i++ ) {
- // Check if we're done after handling an executable script
- if ( !( jQuery.nodeName( elem, "script" ) && handleScript( elem ) ) ) {
- // Append to fragment and handle embedded scripts
- fragment.appendChild( elem );
- if ( typeof elem.getElementsByTagName !== "undefined" ) {
- // handleScript alters the DOM, so use jQuery.merge to ensure snapshot iteration
- jsTags = jQuery.grep( jQuery.merge( [], elem.getElementsByTagName("script") ), handleScript );
-
- // Splice the scripts into ret after their former ancestor and advance our index beyond them
- ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
- i += jsTags.length;
- }
- }
- }
- }
-
- return ret;
- },
-
- cleanData: function( elems, /* internal */ acceptData ) {
- var data, id, elem, type,
- i = 0,
- internalKey = jQuery.expando,
- cache = jQuery.cache,
- deleteExpando = jQuery.support.deleteExpando,
- special = jQuery.event.special;
-
- for ( ; (elem = elems[i]) != null; i++ ) {
-
- if ( acceptData || jQuery.acceptData( elem ) ) {
-
- id = elem[ internalKey ];
- data = id && cache[ id ];
-
- if ( data ) {
- if ( data.events ) {
- for ( type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
- }
-
- // Remove cache only if it was not already removed by jQuery.event.remove
- if ( cache[ id ] ) {
-
- delete cache[ id ];
-
- // IE does not allow us to delete expando properties from nodes,
- // nor does it have a removeAttribute function on Document nodes;
- // we must handle all of these cases
- if ( deleteExpando ) {
- delete elem[ internalKey ];
-
- } else if ( elem.removeAttribute ) {
- elem.removeAttribute( internalKey );
-
- } else {
- elem[ internalKey ] = null;
- }
-
- jQuery.deletedIds.push( id );
- }
- }
- }
- }
- }
-});
-// Limit scope pollution from any deprecated API
-(function() {
-
-var matched, browser;
-
-// Use of jQuery.browser is frowned upon.
-// More details: http://api.jquery.com/jQuery.browser
-// jQuery.uaMatch maintained for back-compat
-jQuery.uaMatch = function( ua ) {
- ua = ua.toLowerCase();
-
- var match = /(chrome)[ \/]([\w.]+)/.exec( ua ) ||
- /(webkit)[ \/]([\w.]+)/.exec( ua ) ||
- /(opera)(?:.*version|)[ \/]([\w.]+)/.exec( ua ) ||
- /(msie) ([\w.]+)/.exec( ua ) ||
- ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec( ua ) ||
- [];
-
- return {
- browser: match[ 1 ] || "",
- version: match[ 2 ] || "0"
- };
-};
-
-matched = jQuery.uaMatch( navigator.userAgent );
-browser = {};
-
-if ( matched.browser ) {
- browser[ matched.browser ] = true;
- browser.version = matched.version;
-}
-
-// Chrome is Webkit, but Webkit is also Safari.
-if ( browser.chrome ) {
- browser.webkit = true;
-} else if ( browser.webkit ) {
- browser.safari = true;
-}
-
-jQuery.browser = browser;
-
-jQuery.sub = function() {
- function jQuerySub( selector, context ) {
- return new jQuerySub.fn.init( selector, context );
- }
- jQuery.extend( true, jQuerySub, this );
- jQuerySub.superclass = this;
- jQuerySub.fn = jQuerySub.prototype = this();
- jQuerySub.fn.constructor = jQuerySub;
- jQuerySub.sub = this.sub;
- jQuerySub.fn.init = function init( selector, context ) {
- if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
- context = jQuerySub( context );
- }
-
- return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
- };
- jQuerySub.fn.init.prototype = jQuerySub.fn;
- var rootjQuerySub = jQuerySub(document);
- return jQuerySub;
-};
-
-})();
-var curCSS, iframe, iframeDoc,
- ralpha = /alpha\([^)]*\)/i,
- ropacity = /opacity=([^)]*)/,
- rposition = /^(top|right|bottom|left)$/,
- // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
- // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
- rdisplayswap = /^(none|table(?!-c[ea]).+)/,
- rmargin = /^margin/,
- rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
- rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
- rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ),
- elemdisplay = { BODY: "block" },
-
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssNormalTransform = {
- letterSpacing: 0,
- fontWeight: 400
- },
-
- cssExpand = [ "Top", "Right", "Bottom", "Left" ],
- cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
-
- eventsToggle = jQuery.fn.toggle;
-
-// return a css property mapped to a potentially vendor prefixed property
-function vendorPropName( style, name ) {
-
- // shortcut for names that are not vendor prefixed
- if ( name in style ) {
- return name;
- }
-
- // check for vendor prefixed names
- var capName = name.charAt(0).toUpperCase() + name.slice(1),
- origName = name,
- i = cssPrefixes.length;
-
- while ( i-- ) {
- name = cssPrefixes[ i ] + capName;
- if ( name in style ) {
- return name;
- }
- }
-
- return origName;
-}
-
-function isHidden( elem, el ) {
- elem = el || elem;
- return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
-}
-
-function showHide( elements, show ) {
- var elem, display,
- values = [],
- index = 0,
- length = elements.length;
-
- for ( ; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
- values[ index ] = jQuery._data( elem, "olddisplay" );
- if ( show ) {
- // Reset the inline display of this element to learn if it is
- // being hidden by cascaded rules or not
- if ( !values[ index ] && elem.style.display === "none" ) {
- elem.style.display = "";
- }
-
- // Set elements which have been overridden with display: none
- // in a stylesheet to whatever the default browser style is
- // for such an element
- if ( elem.style.display === "" && isHidden( elem ) ) {
- values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
- }
- } else {
- display = curCSS( elem, "display" );
-
- if ( !values[ index ] && display !== "none" ) {
- jQuery._data( elem, "olddisplay", display );
- }
- }
- }
-
- // Set the display of most of the elements in a second loop
- // to avoid the constant reflow
- for ( index = 0; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
- if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
- elem.style.display = show ? values[ index ] || "" : "none";
- }
- }
-
- return elements;
-}
-
-jQuery.fn.extend({
- css: function( name, value ) {
- return jQuery.access( this, function( elem, name, value ) {
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- }, name, value, arguments.length > 1 );
- },
- show: function() {
- return showHide( this, true );
- },
- hide: function() {
- return showHide( this );
- },
- toggle: function( state, fn2 ) {
- var bool = typeof state === "boolean";
-
- if ( jQuery.isFunction( state ) && jQuery.isFunction( fn2 ) ) {
- return eventsToggle.apply( this, arguments );
- }
-
- return this.each(function() {
- if ( bool ? state : isHidden( this ) ) {
- jQuery( this ).show();
- } else {
- jQuery( this ).hide();
- }
- });
- }
-});
-
-jQuery.extend({
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity" );
- return ret === "" ? "1" : ret;
-
- }
- }
- }
- },
-
- // Exclude the following css properties to add px
- cssNumber: {
- "fillOpacity": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- // normalize float css property
- "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, hooks,
- origName = jQuery.camelCase( name ),
- style = elem.style;
-
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
-
- // gets hook for the prefixed version
- // followed by the unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // convert relative number strings (+= or -=) to relative numbers. #7345
- if ( type === "string" && (ret = rrelNum.exec( value )) ) {
- value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that NaN and null values aren't set. See: #7116
- if ( value == null || type === "number" && isNaN( value ) ) {
- return;
- }
-
- // If a number was passed in, add 'px' to the (except for certain CSS properties)
- if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
- value += "px";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
- // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
- // Fixes bug #5509
- try {
- style[ name ] = value;
- } catch(e) {}
- }
-
- } else {
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, numeric, extra ) {
- var val, num, hooks,
- origName = jQuery.camelCase( name );
-
- // Make sure that we're working with the right name
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
-
- // gets hook for the prefixed version
- // followed by the unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks ) {
- val = hooks.get( elem, true, extra );
- }
-
- // Otherwise, if a way to get the computed value exists, use that
- if ( val === undefined ) {
- val = curCSS( elem, name );
- }
-
- //convert "normal" to computed value
- if ( val === "normal" && name in cssNormalTransform ) {
- val = cssNormalTransform[ name ];
- }
-
- // Return, converting to number if forced or a qualifier was provided and val looks numeric
- if ( numeric || extra !== undefined ) {
- num = parseFloat( val );
- return numeric || jQuery.isNumeric( num ) ? num || 0 : val;
- }
- return val;
- },
-
- // A method for quickly swapping in/out CSS properties to get correct calculations
- swap: function( elem, options, callback ) {
- var ret, name,
- old = {};
-
- // Remember the old values, and insert the new ones
- for ( name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- ret = callback.call( elem );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
-
- return ret;
- }
-});
-
-// NOTE: To any future maintainer, we've window.getComputedStyle
-// because jsdom on node.js will break without it.
-if ( window.getComputedStyle ) {
- curCSS = function( elem, name ) {
- var ret, width, minWidth, maxWidth,
- computed = window.getComputedStyle( elem, null ),
- style = elem.style;
-
- if ( computed ) {
-
- // getPropertyValue is only needed for .css('filter') in IE9, see #12537
- ret = computed.getPropertyValue( name ) || computed[ name ];
-
- if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
- ret = jQuery.style( elem, name );
- }
-
- // A tribute to the "awesome hack by Dean Edwards"
- // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
- // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
- // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
- if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
- width = style.width;
- minWidth = style.minWidth;
- maxWidth = style.maxWidth;
-
- style.minWidth = style.maxWidth = style.width = ret;
- ret = computed.width;
-
- style.width = width;
- style.minWidth = minWidth;
- style.maxWidth = maxWidth;
- }
- }
-
- return ret;
- };
-} else if ( document.documentElement.currentStyle ) {
- curCSS = function( elem, name ) {
- var left, rsLeft,
- ret = elem.currentStyle && elem.currentStyle[ name ],
- style = elem.style;
-
- // Avoid setting ret to empty string here
- // so we don't default to auto
- if ( ret == null && style && style[ name ] ) {
- ret = style[ name ];
- }
-
- // From the awesome hack by Dean Edwards
- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
- // If we're not dealing with a regular pixel number
- // but a number that has a weird ending, we need to convert it to pixels
- // but not position css attributes, as those are proportional to the parent element instead
- // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
- if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
-
- // Remember the original values
- left = style.left;
- rsLeft = elem.runtimeStyle && elem.runtimeStyle.left;
-
- // Put in the new values to get a computed value out
- if ( rsLeft ) {
- elem.runtimeStyle.left = elem.currentStyle.left;
- }
- style.left = name === "fontSize" ? "1em" : ret;
- ret = style.pixelLeft + "px";
-
- // Revert the changed values
- style.left = left;
- if ( rsLeft ) {
- elem.runtimeStyle.left = rsLeft;
- }
- }
-
- return ret === "" ? "auto" : ret;
- };
-}
-
-function setPositiveNumber( elem, value, subtract ) {
- var matches = rnumsplit.exec( value );
- return matches ?
- Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
- value;
-}
-
-function augmentWidthOrHeight( elem, name, extra, isBorderBox ) {
- var i = extra === ( isBorderBox ? "border" : "content" ) ?
- // If we already have the right measurement, avoid augmentation
- 4 :
- // Otherwise initialize for horizontal or vertical properties
- name === "width" ? 1 : 0,
-
- val = 0;
-
- for ( ; i < 4; i += 2 ) {
- // both box models exclude margin, so add it if we want it
- if ( extra === "margin" ) {
- // we use jQuery.css instead of curCSS here
- // because of the reliableMarginRight CSS hook!
- val += jQuery.css( elem, extra + cssExpand[ i ], true );
- }
-
- // From this point on we use curCSS for maximum performance (relevant in animations)
- if ( isBorderBox ) {
- // border-box includes padding, so remove it if we want content
- if ( extra === "content" ) {
- val -= parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0;
- }
-
- // at this point, extra isn't border nor margin, so remove border
- if ( extra !== "margin" ) {
- val -= parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
- }
- } else {
- // at this point, extra isn't content, so add padding
- val += parseFloat( curCSS( elem, "padding" + cssExpand[ i ] ) ) || 0;
-
- // at this point, extra isn't content nor padding, so add border
- if ( extra !== "padding" ) {
- val += parseFloat( curCSS( elem, "border" + cssExpand[ i ] + "Width" ) ) || 0;
- }
- }
- }
-
- return val;
-}
-
-function getWidthOrHeight( elem, name, extra ) {
-
- // Start with offset property, which is equivalent to the border-box value
- var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
- valueIsBorderBox = true,
- isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box";
-
- // some non-html elements return undefined for offsetWidth, so check for null/undefined
- // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
- // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
- if ( val <= 0 || val == null ) {
- // Fall back to computed then uncomputed css if necessary
- val = curCSS( elem, name );
- if ( val < 0 || val == null ) {
- val = elem.style[ name ];
- }
-
- // Computed unit is not pixels. Stop here and return.
- if ( rnumnonpx.test(val) ) {
- return val;
- }
-
- // we need the check for style in case a browser which returns unreliable values
- // for getComputedStyle silently falls back to the reliable elem.style
- valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
-
- // Normalize "", auto, and prepare for extra
- val = parseFloat( val ) || 0;
- }
-
- // use the active box-sizing model to add/subtract irrelevant styles
- return ( val +
- augmentWidthOrHeight(
- elem,
- name,
- extra || ( isBorderBox ? "border" : "content" ),
- valueIsBorderBox
- )
- ) + "px";
-}
-
-
-// Try to determine the default display value of an element
-function css_defaultDisplay( nodeName ) {
- if ( elemdisplay[ nodeName ] ) {
- return elemdisplay[ nodeName ];
- }
-
- var elem = jQuery( "<" + nodeName + ">" ).appendTo( document.body ),
- display = elem.css("display");
- elem.remove();
-
- // If the simple way fails,
- // get element's real default display by attaching it to a temp iframe
- if ( display === "none" || display === "" ) {
- // Use the already-created iframe if possible
- iframe = document.body.appendChild(
- iframe || jQuery.extend( document.createElement("iframe"), {
- frameBorder: 0,
- width: 0,
- height: 0
- })
- );
-
- // Create a cacheable copy of the iframe document on first call.
- // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
- // document to it; WebKit & Firefox won't allow reusing the iframe document.
- if ( !iframeDoc || !iframe.createElement ) {
- iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
- iframeDoc.write("<!doctype html><html><body>");
- iframeDoc.close();
- }
-
- elem = iframeDoc.body.appendChild( iframeDoc.createElement(nodeName) );
-
- display = curCSS( elem, "display" );
- document.body.removeChild( iframe );
- }
-
- // Store the correct default display
- elemdisplay[ nodeName ] = display;
-
- return display;
-}
-
-jQuery.each([ "height", "width" ], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- if ( computed ) {
- // certain elements can have dimension info if we invisibly show them
- // however, it must have a current display style that would benefit from this
- if ( elem.offsetWidth === 0 && rdisplayswap.test( curCSS( elem, "display" ) ) ) {
- return jQuery.swap( elem, cssShow, function() {
- return getWidthOrHeight( elem, name, extra );
- });
- } else {
- return getWidthOrHeight( elem, name, extra );
- }
- }
- },
-
- set: function( elem, value, extra ) {
- return setPositiveNumber( elem, value, extra ?
- augmentWidthOrHeight(
- elem,
- name,
- extra,
- jQuery.support.boxSizing && jQuery.css( elem, "boxSizing" ) === "border-box"
- ) : 0
- );
- }
- };
-});
-
-if ( !jQuery.support.opacity ) {
- jQuery.cssHooks.opacity = {
- get: function( elem, computed ) {
- // IE uses filters for opacity
- return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
- ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
- computed ? "1" : "";
- },
-
- set: function( elem, value ) {
- var style = elem.style,
- currentStyle = elem.currentStyle,
- opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
- filter = currentStyle && currentStyle.filter || style.filter || "";
-
- // IE has trouble with opacity if it does not have layout
- // Force it by setting the zoom level
- style.zoom = 1;
-
- // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
- if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
- style.removeAttribute ) {
-
- // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
- // if "filter:" is present at all, clearType is disabled, we want to avoid this
- // style.removeAttribute is IE Only, but so apparently is this code path...
- style.removeAttribute( "filter" );
-
- // if there there is no filter style applied in a css rule, we are done
- if ( currentStyle && !currentStyle.filter ) {
- return;
- }
- }
-
- // otherwise, set new filter values
- style.filter = ralpha.test( filter ) ?
- filter.replace( ralpha, opacity ) :
- filter + " " + opacity;
- }
- };
-}
-
-// These hooks cannot be added until DOM ready because the support test
-// for it is not run until after DOM ready
-jQuery(function() {
- if ( !jQuery.support.reliableMarginRight ) {
- jQuery.cssHooks.marginRight = {
- get: function( elem, computed ) {
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // Work around by temporarily setting element display to inline-block
- return jQuery.swap( elem, { "display": "inline-block" }, function() {
- if ( computed ) {
- return curCSS( elem, "marginRight" );
- }
- });
- }
- };
- }
-
- // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
- // getComputedStyle returns percent when specified for top/left/bottom/right
- // rather than make the css module depend on the offset module, we just check for it here
- if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
- jQuery.each( [ "top", "left" ], function( i, prop ) {
- jQuery.cssHooks[ prop ] = {
- get: function( elem, computed ) {
- if ( computed ) {
- var ret = curCSS( elem, prop );
- // if curCSS returns percentage, fallback to offset
- return rnumnonpx.test( ret ) ? jQuery( elem ).position()[ prop ] + "px" : ret;
- }
- }
- };
- });
- }
-
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.hidden = function( elem ) {
- return ( elem.offsetWidth === 0 && elem.offsetHeight === 0 ) || (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || curCSS( elem, "display" )) === "none");
- };
-
- jQuery.expr.filters.visible = function( elem ) {
- return !jQuery.expr.filters.hidden( elem );
- };
-}
-
-// These hooks are used by animate to expand properties
-jQuery.each({
- margin: "",
- padding: "",
- border: "Width"
-}, function( prefix, suffix ) {
- jQuery.cssHooks[ prefix + suffix ] = {
- expand: function( value ) {
- var i,
-
- // assumes a single number if not a string
- parts = typeof value === "string" ? value.split(" ") : [ value ],
- expanded = {};
-
- for ( i = 0; i < 4; i++ ) {
- expanded[ prefix + cssExpand[ i ] + suffix ] =
- parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
- }
-
- return expanded;
- }
- };
-
- if ( !rmargin.test( prefix ) ) {
- jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
- }
-});
-var r20 = /%20/g,
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
- rselectTextarea = /^(?:select|textarea)/i;
-
-jQuery.fn.extend({
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
- serializeArray: function() {
- return this.map(function(){
- return this.elements ? jQuery.makeArray( this.elements ) : this;
- })
- .filter(function(){
- return this.name && !this.disabled &&
- ( this.checked || rselectTextarea.test( this.nodeName ) ||
- rinput.test( this.type ) );
- })
- .map(function( i, elem ){
- var val = jQuery( this ).val();
-
- return val == null ?
- null :
- jQuery.isArray( val ) ?
- jQuery.map( val, function( val, i ){
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }) :
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }).get();
- }
-});
-
-//Serialize an array of form elements or a set of
-//key/values into a query string
-jQuery.param = function( a, traditional ) {
- var prefix,
- s = [],
- add = function( key, value ) {
- // If value is a function, invoke it and return its value
- value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
- s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
- };
-
- // Set traditional to true for jQuery <= 1.3.2 behavior.
- if ( traditional === undefined ) {
- traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- });
-
- } else {
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" ).replace( r20, "+" );
-};
-
-function buildParams( prefix, obj, traditional, add ) {
- var name;
-
- if ( jQuery.isArray( obj ) ) {
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
- // If array item is non-scalar (array or object), encode its
- // numeric index to resolve deserialization ambiguity issues.
- // Note that rack (as of 1.0.0) can't currently deserialize
- // nested arrays properly, and attempting to do so may cause
- // a server error. Possible fixes are to modify rack's
- // deserialization algorithm or to provide an option or flag
- // to force array serialization to be shallow.
- buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
- }
- });
-
- } else if ( !traditional && jQuery.type( obj ) === "object" ) {
- // Serialize object item.
- for ( name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-var
- // Document location
- ajaxLocParts,
- ajaxLocation,
-
- rhash = /#.*$/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
- rquery = /\?/,
- rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
- rts = /([?&])_=[^&]*/,
- rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
-
- // Keep a copy of the old load method
- _load = jQuery.fn.load,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = ["*/"] + ["*"];
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
- ajaxLocation = location.href;
-} catch( e ) {
- // Use the href attribute of an A element
- // since IE will modify it given document.location
- ajaxLocation = document.createElement( "a" );
- ajaxLocation.href = "";
- ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- var dataType, list, placeBefore,
- dataTypes = dataTypeExpression.toLowerCase().split( core_rspace ),
- i = 0,
- length = dataTypes.length;
-
- if ( jQuery.isFunction( func ) ) {
- // For each dataType in the dataTypeExpression
- for ( ; i < length; i++ ) {
- dataType = dataTypes[ i ];
- // We control if we're asked to add before
- // any existing element
- placeBefore = /^\+/.test( dataType );
- if ( placeBefore ) {
- dataType = dataType.substr( 1 ) || "*";
- }
- list = structure[ dataType ] = structure[ dataType ] || [];
- // then we add to the structure accordingly
- list[ placeBefore ? "unshift" : "push" ]( func );
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
- dataType /* internal */, inspected /* internal */ ) {
-
- dataType = dataType || options.dataTypes[ 0 ];
- inspected = inspected || {};
-
- inspected[ dataType ] = true;
-
- var selection,
- list = structure[ dataType ],
- i = 0,
- length = list ? list.length : 0,
- executeOnly = ( structure === prefilters );
-
- for ( ; i < length && ( executeOnly || !selection ); i++ ) {
- selection = list[ i ]( options, originalOptions, jqXHR );
- // If we got redirected to another dataType
- // we try there if executing only and not done already
- if ( typeof selection === "string" ) {
- if ( !executeOnly || inspected[ selection ] ) {
- selection = undefined;
- } else {
- options.dataTypes.unshift( selection );
- selection = inspectPrefiltersOrTransports(
- structure, options, originalOptions, jqXHR, selection, inspected );
- }
- }
- }
- // If we're only executing or nothing was selected
- // we try the catchall dataType if not done already
- if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
- selection = inspectPrefiltersOrTransports(
- structure, options, originalOptions, jqXHR, "*", inspected );
- }
- // unnecessary when only executing (prefilters)
- // but it'll be ignored by the caller in that case
- return selection;
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var key, deep,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
- for ( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-}
-
-jQuery.fn.load = function( url, params, callback ) {
- if ( typeof url !== "string" && _load ) {
- return _load.apply( this, arguments );
- }
-
- // Don't do a request if no elements are being requested
- if ( !this.length ) {
- return this;
- }
-
- var selector, type, response,
- self = this,
- off = url.indexOf(" ");
-
- if ( off >= 0 ) {
- selector = url.slice( off, url.length );
- url = url.slice( 0, off );
- }
-
- // If it's a function
- if ( jQuery.isFunction( params ) ) {
-
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( params && typeof params === "object" ) {
- type = "POST";
- }
-
- // Request the remote document
- jQuery.ajax({
- url: url,
-
- // if "type" variable is undefined, then "GET" method will be used
- type: type,
- dataType: "html",
- data: params,
- complete: function( jqXHR, status ) {
- if ( callback ) {
- self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
- }
- }
- }).done(function( responseText ) {
-
- // Save response for use in complete callback
- response = arguments;
-
- // See if a selector was specified
- self.html( selector ?
-
- // Create a dummy div to hold the results
- jQuery("<div>")
-
- // inject the contents of the document in, removing the scripts
- // to avoid any 'Permission Denied' errors in IE
- .append( responseText.replace( rscript, "" ) )
-
- // Locate the specified elements
- .find( selector ) :
-
- // If not, just inject the full result
- responseText );
-
- });
-
- return this;
-};
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
- jQuery.fn[ o ] = function( f ){
- return this.on( o, f );
- };
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
- // shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- return jQuery.ajax({
- type: method,
- url: url,
- data: data,
- success: callback,
- dataType: type
- });
- };
-});
-
-jQuery.extend({
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- if ( settings ) {
- // Building a settings object
- ajaxExtend( target, jQuery.ajaxSettings );
- } else {
- // Extending ajaxSettings
- settings = target;
- target = jQuery.ajaxSettings;
- }
- ajaxExtend( target, settings );
- return target;
- },
-
- ajaxSettings: {
- url: ajaxLocation,
- isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
- global: true,
- type: "GET",
- contentType: "application/x-www-form-urlencoded; charset=UTF-8",
- processData: true,
- async: true,
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- throws: false,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- xml: "application/xml, text/xml",
- html: "text/html",
- text: "text/plain",
- json: "application/json, text/javascript",
- "*": allTypes
- },
-
- contents: {
- xml: /xml/,
- html: /html/,
- json: /json/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText"
- },
-
- // List of data converters
- // 1) key format is "source_type destination_type" (a single space in-between)
- // 2) the catchall symbol "*" can be used for source_type
- converters: {
-
- // Convert anything to text
- "* text": window.String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": jQuery.parseJSON,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- context: true,
- url: true
- }
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var // ifModified key
- ifModifiedKey,
- // Response headers
- responseHeadersString,
- responseHeaders,
- // transport
- transport,
- // timeout handle
- timeoutTimer,
- // Cross-domain detection vars
- parts,
- // To know if global events are to be dispatched
- fireGlobals,
- // Loop variable
- i,
- // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
- // Callbacks context
- callbackContext = s.context || s,
- // Context for global events
- // It's the callbackContext if one was provided in the options
- // and if it's a DOM node or a jQuery collection
- globalEventContext = callbackContext !== s &&
- ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
- jQuery( callbackContext ) : jQuery.event,
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks( "once memory" ),
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
- // The jqXHR state
- state = 0,
- // Default abort message
- strAbort = "canceled",
- // Fake xhr
- jqXHR = {
-
- readyState: 0,
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- if ( !state ) {
- var lname = name.toLowerCase();
- name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return state === 2 ? responseHeadersString : null;
- },
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( state === 2 ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while( ( match = rheaders.exec( responseHeadersString ) ) ) {
- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match === undefined ? null : match;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( !state ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- statusText = statusText || strAbort;
- if ( transport ) {
- transport.abort( statusText );
- }
- done( 0, statusText );
- return this;
- }
- };
-
- // Callback for when everything is done
- // It is defined here because jslint complains if it is declared
- // at the end of the function (which would be more logical and readable)
- function done( status, nativeStatusText, responses, headers ) {
- var isSuccess, success, error, response, modified,
- statusText = nativeStatusText;
-
- // Called once
- if ( state === 2 ) {
- return;
- }
-
- // State is "done" now
- state = 2;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- // Get response data
- if ( responses ) {
- response = ajaxHandleResponses( s, jqXHR, responses );
- }
-
- // If successful, handle type chaining
- if ( status >= 200 && status < 300 || status === 304 ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
-
- modified = jqXHR.getResponseHeader("Last-Modified");
- if ( modified ) {
- jQuery.lastModified[ ifModifiedKey ] = modified;
- }
- modified = jqXHR.getResponseHeader("Etag");
- if ( modified ) {
- jQuery.etag[ ifModifiedKey ] = modified;
- }
- }
-
- // If not modified
- if ( status === 304 ) {
-
- statusText = "notmodified";
- isSuccess = true;
-
- // If we have data
- } else {
-
- isSuccess = ajaxConvert( s, response );
- statusText = isSuccess.state;
- success = isSuccess.data;
- error = isSuccess.error;
- isSuccess = !error;
- }
- } else {
- // We extract error from statusText
- // then normalize statusText and status for non-aborts
- error = statusText;
- if ( !statusText || status ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger( "ajaxStop" );
- }
- }
- }
-
- // Attach deferreds
- deferred.promise( jqXHR );
- jqXHR.success = jqXHR.done;
- jqXHR.error = jqXHR.fail;
- jqXHR.complete = completeDeferred.add;
-
- // Status-dependent callbacks
- jqXHR.statusCode = function( map ) {
- if ( map ) {
- var tmp;
- if ( state < 2 ) {
- for ( tmp in map ) {
- statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
- }
- } else {
- tmp = map[ jqXHR.status ];
- jqXHR.always( tmp );
- }
- }
- return this;
- };
-
- // Remove hash character (#7531: and string promotion)
- // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
- // We also use the url parameter if available
- s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
- // Extract dataTypes list
- s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( core_rspace );
-
- // A cross-domain request is in order when we have a protocol:host:port mismatch
- if ( s.crossDomain == null ) {
- parts = rurl.exec( s.url.toLowerCase() );
- s.crossDomain = !!( parts &&
- ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
- );
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefilter, stop there
- if ( state === 2 ) {
- return jqXHR;
- }
-
- // We can fire global events as of now if asked to
- fireGlobals = s.global;
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger( "ajaxStart" );
- }
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // If data is available, append data to url
- if ( s.data ) {
- s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Get ifModifiedKey before adding the anti-cache parameter
- ifModifiedKey = s.url;
-
- // Add anti-cache in url if needed
- if ( s.cache === false ) {
-
- var ts = jQuery.now(),
- // try replacing _= if it is there
- ret = s.url.replace( rts, "$1_=" + ts );
-
- // if nothing was replaced, add timestamp to the end
- s.url = ret + ( ( ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- ifModifiedKey = ifModifiedKey || s.url;
- if ( jQuery.lastModified[ ifModifiedKey ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
- }
- if ( jQuery.etag[ ifModifiedKey ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
- }
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
- s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
- // Abort if not done already and return
- return jqXHR.abort();
-
- }
-
- // aborting is no longer a cancellation
- strAbort = "abort";
-
- // Install callbacks on deferreds
- for ( i in { success: 1, error: 1, complete: 1 } ) {
- jqXHR[ i ]( s[ i ] );
- }
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = setTimeout( function(){
- jqXHR.abort( "timeout" );
- }, s.timeout );
- }
-
- try {
- state = 1;
- transport.send( requestHeaders, done );
- } catch (e) {
- // Propagate exception as error if not done
- if ( state < 2 ) {
- done( -1, e );
- // Simply rethrow otherwise
- } else {
- throw e;
- }
- }
- }
-
- return jqXHR;
- },
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {}
-
-});
-
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
- var ct, type, finalDataType, firstDataType,
- contents = s.contents,
- dataTypes = s.dataTypes,
- responseFields = s.responseFields;
-
- // Fill responseXXX fields
- for ( type in responseFields ) {
- if ( type in responses ) {
- jqXHR[ responseFields[type] ] = responses[ type ];
- }
- }
-
- // Remove auto dataType and get content-type in the process
- while( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
-
- var conv, conv2, current, tmp,
- // Work with a copy of dataTypes in case we need to modify it for conversion
- dataTypes = s.dataTypes.slice(),
- prev = dataTypes[ 0 ],
- converters = {},
- i = 0;
-
- // Apply the dataFilter if provided
- if ( s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- // Create converters map with lowercased keys
- if ( dataTypes[ 1 ] ) {
- for ( conv in s.converters ) {
- converters[ conv.toLowerCase() ] = s.converters[ conv ];
- }
- }
-
- // Convert to each sequential dataType, tolerating list modification
- for ( ; (current = dataTypes[++i]); ) {
-
- // There's only work to do if current dataType is non-auto
- if ( current !== "*" ) {
-
- // Convert response if prev dataType is non-auto and differs from current
- if ( prev !== "*" && prev !== current ) {
-
- // Seek a direct converter
- conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
- // If none found, seek a pair
- if ( !conv ) {
- for ( conv2 in converters ) {
-
- // If conv2 outputs current
- tmp = conv2.split(" ");
- if ( tmp[ 1 ] === current ) {
-
- // If prev can be converted to accepted input
- conv = converters[ prev + " " + tmp[ 0 ] ] ||
- converters[ "* " + tmp[ 0 ] ];
- if ( conv ) {
- // Condense equivalence converters
- if ( conv === true ) {
- conv = converters[ conv2 ];
-
- // Otherwise, insert the intermediate dataType
- } else if ( converters[ conv2 ] !== true ) {
- current = tmp[ 0 ];
- dataTypes.splice( i--, 0, current );
- }
-
- break;
- }
- }
- }
- }
-
- // Apply converter (if not an equivalence)
- if ( conv !== true ) {
-
- // Unless errors are allowed to bubble, catch and return them
- if ( conv && s["throws"] ) {
- response = conv( response );
- } else {
- try {
- response = conv( response );
- } catch ( e ) {
- return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
- }
- }
- }
- }
-
- // Update prev for next iteration
- prev = current;
- }
- }
-
- return { state: "success", data: response };
-}
-var oldCallbacks = [],
- rquestion = /\?/,
- rjsonp = /(=)\?(?=&|$)|\?\?/,
- nonce = jQuery.now();
-
-// Default jsonp settings
-jQuery.ajaxSetup({
- jsonp: "callback",
- jsonpCallback: function() {
- var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
- this[ callback ] = true;
- return callback;
- }
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var callbackName, overwritten, responseContainer,
- data = s.data,
- url = s.url,
- hasCallback = s.jsonp !== false,
- replaceInUrl = hasCallback && rjsonp.test( url ),
- replaceInData = hasCallback && !replaceInUrl && typeof data === "string" &&
- !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") &&
- rjsonp.test( data );
-
- // Handle iff the expected data type is "jsonp" or we have a parameter to set
- if ( s.dataTypes[ 0 ] === "jsonp" || replaceInUrl || replaceInData ) {
-
- // Get callback name, remembering preexisting value associated with it
- callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
- s.jsonpCallback() :
- s.jsonpCallback;
- overwritten = window[ callbackName ];
-
- // Insert callback into url or form data
- if ( replaceInUrl ) {
- s.url = url.replace( rjsonp, "$1" + callbackName );
- } else if ( replaceInData ) {
- s.data = data.replace( rjsonp, "$1" + callbackName );
- } else if ( hasCallback ) {
- s.url += ( rquestion.test( url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
- }
-
- // Use data converter to retrieve json after script execution
- s.converters["script json"] = function() {
- if ( !responseContainer ) {
- jQuery.error( callbackName + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Install callback
- window[ callbackName ] = function() {
- responseContainer = arguments;
- };
-
- // Clean-up function (fires after converters)
- jqXHR.always(function() {
- // Restore preexisting value
- window[ callbackName ] = overwritten;
-
- // Save back as free
- if ( s[ callbackName ] ) {
- // make sure that re-using the options doesn't screw things around
- s.jsonpCallback = originalSettings.jsonpCallback;
-
- // save the callback name for future use
- oldCallbacks.push( callbackName );
- }
-
- // Call if it was a function and we have a response
- if ( responseContainer && jQuery.isFunction( overwritten ) ) {
- overwritten( responseContainer[ 0 ] );
- }
-
- responseContainer = overwritten = undefined;
- });
-
- // Delegate to script
- return "script";
- }
-});
-// Install script dataType
-jQuery.ajaxSetup({
- accepts: {
- script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /javascript|ecmascript/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- s.global = false;
- }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
- // This transport only deals with cross domain requests
- if ( s.crossDomain ) {
-
- var script,
- head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
-
- return {
-
- send: function( _, callback ) {
-
- script = document.createElement( "script" );
-
- script.async = "async";
-
- if ( s.scriptCharset ) {
- script.charset = s.scriptCharset;
- }
-
- script.src = s.url;
-
- // Attach handlers for all browsers
- script.onload = script.onreadystatechange = function( _, isAbort ) {
-
- if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
- // Handle memory leak in IE
- script.onload = script.onreadystatechange = null;
-
- // Remove the script
- if ( head && script.parentNode ) {
- head.removeChild( script );
- }
-
- // Dereference the script
- script = undefined;
-
- // Callback if not abort
- if ( !isAbort ) {
- callback( 200, "success" );
- }
- }
- };
- // Use insertBefore instead of appendChild to circumvent an IE6 bug.
- // This arises when a base node is used (#2709 and #4378).
- head.insertBefore( script, head.firstChild );
- },
-
- abort: function() {
- if ( script ) {
- script.onload( 0, 1 );
- }
- }
- };
- }
-});
-var xhrCallbacks,
- // #5280: Internet Explorer will keep connections alive if we don't abort on unload
- xhrOnUnloadAbort = window.ActiveXObject ? function() {
- // Abort all pending requests
- for ( var key in xhrCallbacks ) {
- xhrCallbacks[ key ]( 0, 1 );
- }
- } : false,
- xhrId = 0;
-
-// Functions to create xhrs
-function createStandardXHR() {
- try {
- return new window.XMLHttpRequest();
- } catch( e ) {}
-}
-
-function createActiveXHR() {
- try {
- return new window.ActiveXObject( "Microsoft.XMLHTTP" );
- } catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
- /* Microsoft failed to properly
- * implement the XMLHttpRequest in IE7 (can't request local files),
- * so we use the ActiveXObject when it is available
- * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
- * we need a fallback.
- */
- function() {
- return !this.isLocal && createStandardXHR() || createActiveXHR();
- } :
- // For all other browsers, use the standard XMLHttpRequest object
- createStandardXHR;
-
-// Determine support properties
-(function( xhr ) {
- jQuery.extend( jQuery.support, {
- ajax: !!xhr,
- cors: !!xhr && ( "withCredentials" in xhr )
- });
-})( jQuery.ajaxSettings.xhr() );
-
-// Create transport if the browser can provide an xhr
-if ( jQuery.support.ajax ) {
-
- jQuery.ajaxTransport(function( s ) {
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( !s.crossDomain || jQuery.support.cors ) {
-
- var callback;
-
- return {
- send: function( headers, complete ) {
-
- // Get a new xhr
- var handle, i,
- xhr = s.xhr();
-
- // Open the socket
- // Passing null username, generates a login popup on Opera (#2865)
- if ( s.username ) {
- xhr.open( s.type, s.url, s.async, s.username, s.password );
- } else {
- xhr.open( s.type, s.url, s.async );
- }
-
- // Apply custom fields if provided
- if ( s.xhrFields ) {
- for ( i in s.xhrFields ) {
- xhr[ i ] = s.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( s.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( s.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !s.crossDomain && !headers["X-Requested-With"] ) {
- headers[ "X-Requested-With" ] = "XMLHttpRequest";
- }
-
- // Need an extra try/catch for cross domain requests in Firefox 3
- try {
- for ( i in headers ) {
- xhr.setRequestHeader( i, headers[ i ] );
- }
- } catch( _ ) {}
-
- // Do send the request
- // This may raise an exception which is actually
- // handled in jQuery.ajax (so no try/catch here)
- xhr.send( ( s.hasContent && s.data ) || null );
-
- // Listener
- callback = function( _, isAbort ) {
-
- var status,
- statusText,
- responseHeaders,
- responses,
- xml;
-
- // Firefox throws exceptions when accessing properties
- // of an xhr when a network error occurred
- // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
- try {
-
- // Was never called and is aborted or complete
- if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
- // Only called once
- callback = undefined;
-
- // Do not keep as active anymore
- if ( handle ) {
- xhr.onreadystatechange = jQuery.noop;
- if ( xhrOnUnloadAbort ) {
- delete xhrCallbacks[ handle ];
- }
- }
-
- // If it's an abort
- if ( isAbort ) {
- // Abort it manually if needed
- if ( xhr.readyState !== 4 ) {
- xhr.abort();
- }
- } else {
- status = xhr.status;
- responseHeaders = xhr.getAllResponseHeaders();
- responses = {};
- xml = xhr.responseXML;
-
- // Construct response list
- if ( xml && xml.documentElement /* #4958 */ ) {
- responses.xml = xml;
- }
-
- // When requesting binary data, IE6-9 will throw an exception
- // on any attempt to access responseText (#11426)
- try {
- responses.text = xhr.responseText;
- } catch( e ) {
- }
-
- // Firefox throws an exception when accessing
- // statusText for faulty cross-domain requests
- try {
- statusText = xhr.statusText;
- } catch( e ) {
- // We normalize with Webkit giving an empty statusText
- statusText = "";
- }
-
- // Filter status for non standard behaviors
-
- // If the request is local and we have data: assume a success
- // (success with no data won't get notified, that's the best we
- // can do given current implementations)
- if ( !status && s.isLocal && !s.crossDomain ) {
- status = responses.text ? 200 : 404;
- // IE - #1450: sometimes returns 1223 when it should be 204
- } else if ( status === 1223 ) {
- status = 204;
- }
- }
- }
- } catch( firefoxAccessException ) {
- if ( !isAbort ) {
- complete( -1, firefoxAccessException );
- }
- }
-
- // Call complete if needed
- if ( responses ) {
- complete( status, statusText, responses, responseHeaders );
- }
- };
-
- if ( !s.async ) {
- // if we're in sync mode we fire the callback
- callback();
- } else if ( xhr.readyState === 4 ) {
- // (IE6 & IE7) if it's in cache and has been
- // retrieved directly we need to fire the callback
- setTimeout( callback, 0 );
- } else {
- handle = ++xhrId;
- if ( xhrOnUnloadAbort ) {
- // Create the active xhrs callbacks list if needed
- // and attach the unload handler
- if ( !xhrCallbacks ) {
- xhrCallbacks = {};
- jQuery( window ).unload( xhrOnUnloadAbort );
- }
- // Add to list of active xhrs callbacks
- xhrCallbacks[ handle ] = callback;
- }
- xhr.onreadystatechange = callback;
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback(0,1);
- }
- }
- };
- }
- });
-}
-var fxNow, timerId,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rfxnum = new RegExp( "^(?:([-+])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
- rrun = /queueHooks$/,
- animationPrefilters = [ defaultPrefilter ],
- tweeners = {
- "*": [function( prop, value ) {
- var end, unit,
- tween = this.createTween( prop, value ),
- parts = rfxnum.exec( value ),
- target = tween.cur(),
- start = +target || 0,
- scale = 1,
- maxIterations = 20;
-
- if ( parts ) {
- end = +parts[2];
- unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
-
- // We need to compute starting value
- if ( unit !== "px" && start ) {
- // Iteratively approximate from a nonzero starting point
- // Prefer the current property, because this process will be trivial if it uses the same units
- // Fallback to end or a simple constant
- start = jQuery.css( tween.elem, prop, true ) || end || 1;
-
- do {
- // If previous iteration zeroed out, double until we get *something*
- // Use a string for doubling factor so we don't accidentally see scale as unchanged below
- scale = scale || ".5";
-
- // Adjust and apply
- start = start / scale;
- jQuery.style( tween.elem, prop, start + unit );
-
- // Update scale, tolerating zero or NaN from tween.cur()
- // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
- } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
- }
-
- tween.unit = unit;
- tween.start = start;
- // If a +=/-= token was provided, we're doing a relative animation
- tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
- }
- return tween;
- }]
- };
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- setTimeout(function() {
- fxNow = undefined;
- }, 0 );
- return ( fxNow = jQuery.now() );
-}
-
-function createTweens( animation, props ) {
- jQuery.each( props, function( prop, value ) {
- var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
- index = 0,
- length = collection.length;
- for ( ; index < length; index++ ) {
- if ( collection[ index ].call( animation, prop, value ) ) {
-
- // we're done with this property
- return;
- }
- }
- });
-}
-
-function Animation( elem, properties, options ) {
- var result,
- index = 0,
- tweenerIndex = 0,
- length = animationPrefilters.length,
- deferred = jQuery.Deferred().always( function() {
- // don't match elem in the :animated selector
- delete tick.elem;
- }),
- tick = function() {
- var currentTime = fxNow || createFxNow(),
- remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
- // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
- temp = remaining / animation.duration || 0,
- percent = 1 - temp,
- index = 0,
- length = animation.tweens.length;
-
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( percent );
- }
-
- deferred.notifyWith( elem, [ animation, percent, remaining ]);
-
- if ( percent < 1 && length ) {
- return remaining;
- } else {
- deferred.resolveWith( elem, [ animation ] );
- return false;
- }
- },
- animation = deferred.promise({
- elem: elem,
- props: jQuery.extend( {}, properties ),
- opts: jQuery.extend( true, { specialEasing: {} }, options ),
- originalProperties: properties,
- originalOptions: options,
- startTime: fxNow || createFxNow(),
- duration: options.duration,
- tweens: [],
- createTween: function( prop, end, easing ) {
- var tween = jQuery.Tween( elem, animation.opts, prop, end,
- animation.opts.specialEasing[ prop ] || animation.opts.easing );
- animation.tweens.push( tween );
- return tween;
- },
- stop: function( gotoEnd ) {
- var index = 0,
- // if we are going to the end, we want to run all the tweens
- // otherwise we skip this part
- length = gotoEnd ? animation.tweens.length : 0;
-
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( 1 );
- }
-
- // resolve when we played the last frame
- // otherwise, reject
- if ( gotoEnd ) {
- deferred.resolveWith( elem, [ animation, gotoEnd ] );
- } else {
- deferred.rejectWith( elem, [ animation, gotoEnd ] );
- }
- return this;
- }
- }),
- props = animation.props;
-
- propFilter( props, animation.opts.specialEasing );
-
- for ( ; index < length ; index++ ) {
- result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
- if ( result ) {
- return result;
- }
- }
-
- createTweens( animation, props );
-
- if ( jQuery.isFunction( animation.opts.start ) ) {
- animation.opts.start.call( elem, animation );
- }
-
- jQuery.fx.timer(
- jQuery.extend( tick, {
- anim: animation,
- queue: animation.opts.queue,
- elem: elem
- })
- );
-
- // attach callbacks from options
- return animation.progress( animation.opts.progress )
- .done( animation.opts.done, animation.opts.complete )
- .fail( animation.opts.fail )
- .always( animation.opts.always );
-}
-
-function propFilter( props, specialEasing ) {
- var index, name, easing, value, hooks;
-
- // camelCase, specialEasing and expand cssHook pass
- for ( index in props ) {
- name = jQuery.camelCase( index );
- easing = specialEasing[ name ];
- value = props[ index ];
- if ( jQuery.isArray( value ) ) {
- easing = value[ 1 ];
- value = props[ index ] = value[ 0 ];
- }
-
- if ( index !== name ) {
- props[ name ] = value;
- delete props[ index ];
- }
-
- hooks = jQuery.cssHooks[ name ];
- if ( hooks && "expand" in hooks ) {
- value = hooks.expand( value );
- delete props[ name ];
-
- // not quite $.extend, this wont overwrite keys already present.
- // also - reusing 'index' from above because we have the correct "name"
- for ( index in value ) {
- if ( !( index in props ) ) {
- props[ index ] = value[ index ];
- specialEasing[ index ] = easing;
- }
- }
- } else {
- specialEasing[ name ] = easing;
- }
- }
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
-
- tweener: function( props, callback ) {
- if ( jQuery.isFunction( props ) ) {
- callback = props;
- props = [ "*" ];
- } else {
- props = props.split(" ");
- }
-
- var prop,
- index = 0,
- length = props.length;
-
- for ( ; index < length ; index++ ) {
- prop = props[ index ];
- tweeners[ prop ] = tweeners[ prop ] || [];
- tweeners[ prop ].unshift( callback );
- }
- },
-
- prefilter: function( callback, prepend ) {
- if ( prepend ) {
- animationPrefilters.unshift( callback );
- } else {
- animationPrefilters.push( callback );
- }
- }
-});
-
-function defaultPrefilter( elem, props, opts ) {
- var index, prop, value, length, dataShow, toggle, tween, hooks, oldfire,
- anim = this,
- style = elem.style,
- orig = {},
- handled = [],
- hidden = elem.nodeType && isHidden( elem );
-
- // handle queue: false promises
- if ( !opts.queue ) {
- hooks = jQuery._queueHooks( elem, "fx" );
- if ( hooks.unqueued == null ) {
- hooks.unqueued = 0;
- oldfire = hooks.empty.fire;
- hooks.empty.fire = function() {
- if ( !hooks.unqueued ) {
- oldfire();
- }
- };
- }
- hooks.unqueued++;
-
- anim.always(function() {
- // doing this makes sure that the complete handler will be called
- // before this completes
- anim.always(function() {
- hooks.unqueued--;
- if ( !jQuery.queue( elem, "fx" ).length ) {
- hooks.empty.fire();
- }
- });
- });
- }
-
- // height/width overflow pass
- if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
- // Make sure that nothing sneaks out
- // Record all 3 overflow attributes because IE does not
- // change the overflow attribute when overflowX and
- // overflowY are set to the same value
- opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
- // Set display property to inline-block for height/width
- // animations on inline elements that are having width/height animated
- if ( jQuery.css( elem, "display" ) === "inline" &&
- jQuery.css( elem, "float" ) === "none" ) {
-
- // inline-level elements accept inline-block;
- // block-level elements need to be inline with layout
- if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
- style.display = "inline-block";
-
- } else {
- style.zoom = 1;
- }
- }
- }
-
- if ( opts.overflow ) {
- style.overflow = "hidden";
- if ( !jQuery.support.shrinkWrapBlocks ) {
- anim.done(function() {
- style.overflow = opts.overflow[ 0 ];
- style.overflowX = opts.overflow[ 1 ];
- style.overflowY = opts.overflow[ 2 ];
- });
- }
- }
-
-
- // show/hide pass
- for ( index in props ) {
- value = props[ index ];
- if ( rfxtypes.exec( value ) ) {
- delete props[ index ];
- toggle = toggle || value === "toggle";
- if ( value === ( hidden ? "hide" : "show" ) ) {
- continue;
- }
- handled.push( index );
- }
- }
-
- length = handled.length;
- if ( length ) {
- dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
- if ( "hidden" in dataShow ) {
- hidden = dataShow.hidden;
- }
-
- // store state if its toggle - enables .stop().toggle() to "reverse"
- if ( toggle ) {
- dataShow.hidden = !hidden;
- }
- if ( hidden ) {
- jQuery( elem ).show();
- } else {
- anim.done(function() {
- jQuery( elem ).hide();
- });
- }
- anim.done(function() {
- var prop;
- jQuery.removeData( elem, "fxshow", true );
- for ( prop in orig ) {
- jQuery.style( elem, prop, orig[ prop ] );
- }
- });
- for ( index = 0 ; index < length ; index++ ) {
- prop = handled[ index ];
- tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
- orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
-
- if ( !( prop in dataShow ) ) {
- dataShow[ prop ] = tween.start;
- if ( hidden ) {
- tween.end = tween.start;
- tween.start = prop === "width" || prop === "height" ? 1 : 0;
- }
- }
- }
- }
-}
-
-function Tween( elem, options, prop, end, easing ) {
- return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
- constructor: Tween,
- init: function( elem, options, prop, end, easing, unit ) {
- this.elem = elem;
- this.prop = prop;
- this.easing = easing || "swing";
- this.options = options;
- this.start = this.now = this.cur();
- this.end = end;
- this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
- },
- cur: function() {
- var hooks = Tween.propHooks[ this.prop ];
-
- return hooks && hooks.get ?
- hooks.get( this ) :
- Tween.propHooks._default.get( this );
- },
- run: function( percent ) {
- var eased,
- hooks = Tween.propHooks[ this.prop ];
-
- if ( this.options.duration ) {
- this.pos = eased = jQuery.easing[ this.easing ](
- percent, this.options.duration * percent, 0, 1, this.options.duration
- );
- } else {
- this.pos = eased = percent;
- }
- this.now = ( this.end - this.start ) * eased + this.start;
-
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- if ( hooks && hooks.set ) {
- hooks.set( this );
- } else {
- Tween.propHooks._default.set( this );
- }
- return this;
- }
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
- _default: {
- get: function( tween ) {
- var result;
-
- if ( tween.elem[ tween.prop ] != null &&
- (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
- return tween.elem[ tween.prop ];
- }
-
- // passing any value as a 4th parameter to .css will automatically
- // attempt a parseFloat and fallback to a string if the parse fails
- // so, simple values such as "10px" are parsed to Float.
- // complex values such as "rotate(1rad)" are returned as is.
- result = jQuery.css( tween.elem, tween.prop, false, "" );
- // Empty strings, null, undefined and "auto" are converted to 0.
- return !result || result === "auto" ? 0 : result;
- },
- set: function( tween ) {
- // use step hook for back compat - use cssHook if its there - use .style if its
- // available and use plain properties where available
- if ( jQuery.fx.step[ tween.prop ] ) {
- jQuery.fx.step[ tween.prop ]( tween );
- } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
- jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
- } else {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
- }
-};
-
-// Remove in 2.0 - this supports IE8's panic based approach
-// to setting things on disconnected nodes
-
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
- set: function( tween ) {
- if ( tween.elem.nodeType && tween.elem.parentNode ) {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
-};
-
-jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
- var cssFn = jQuery.fn[ name ];
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return speed == null || typeof speed === "boolean" ||
- // special check for .toggle( handler, handler, ... )
- ( !i && jQuery.isFunction( speed ) && jQuery.isFunction( easing ) ) ?
- cssFn.apply( this, arguments ) :
- this.animate( genFx( name, true ), speed, easing, callback );
- };
-});
-
-jQuery.fn.extend({
- fadeTo: function( speed, to, easing, callback ) {
-
- // show any hidden elements after setting opacity to 0
- return this.filter( isHidden ).css( "opacity", 0 ).show()
-
- // animate to the value specified
- .end().animate({ opacity: to }, speed, easing, callback );
- },
- animate: function( prop, speed, easing, callback ) {
- var empty = jQuery.isEmptyObject( prop ),
- optall = jQuery.speed( speed, easing, callback ),
- doAnimation = function() {
- // Operate on a copy of prop so per-property easing won't be lost
- var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
- // Empty animations resolve immediately
- if ( empty ) {
- anim.stop( true );
- }
- };
-
- return empty || optall.queue === false ?
- this.each( doAnimation ) :
- this.queue( optall.queue, doAnimation );
- },
- stop: function( type, clearQueue, gotoEnd ) {
- var stopQueue = function( hooks ) {
- var stop = hooks.stop;
- delete hooks.stop;
- stop( gotoEnd );
- };
-
- if ( typeof type !== "string" ) {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if ( clearQueue && type !== false ) {
- this.queue( type || "fx", [] );
- }
-
- return this.each(function() {
- var dequeue = true,
- index = type != null && type + "queueHooks",
- timers = jQuery.timers,
- data = jQuery._data( this );
-
- if ( index ) {
- if ( data[ index ] && data[ index ].stop ) {
- stopQueue( data[ index ] );
- }
- } else {
- for ( index in data ) {
- if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
- stopQueue( data[ index ] );
- }
- }
- }
-
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
- timers[ index ].anim.stop( gotoEnd );
- dequeue = false;
- timers.splice( index, 1 );
- }
- }
-
- // start the next in the queue if the last step wasn't forced
- // timers currently will call their complete callbacks, which will dequeue
- // but only if they were gotoEnd
- if ( dequeue || !gotoEnd ) {
- jQuery.dequeue( this, type );
- }
- });
- }
-});
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
- var which,
- attrs = { height: type },
- i = 0;
-
- // if we include width, step value is 1 to do all cssExpand values,
- // if we don't include width, step value is 2 to skip over Left and Right
- includeWidth = includeWidth? 1 : 0;
- for( ; i < 4 ; i += 2 - includeWidth ) {
- which = cssExpand[ i ];
- attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
- }
-
- if ( includeWidth ) {
- attrs.opacity = attrs.width = type;
- }
-
- return attrs;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
- slideDown: genFx("show"),
- slideUp: genFx("hide"),
- slideToggle: genFx("toggle"),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-});
-
-jQuery.speed = function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
- };
-
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
- opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
- // normalize opt.queue - true/undefined/null -> "fx"
- if ( opt.queue == null || opt.queue === true ) {
- opt.queue = "fx";
- }
-
- // Queueing
- opt.old = opt.complete;
-
- opt.complete = function() {
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue ) {
- jQuery.dequeue( this, opt.queue );
- }
- };
-
- return opt;
-};
-
-jQuery.easing = {
- linear: function( p ) {
- return p;
- },
- swing: function( p ) {
- return 0.5 - Math.cos( p*Math.PI ) / 2;
- }
-};
-
-jQuery.timers = [];
-jQuery.fx = Tween.prototype.init;
-jQuery.fx.tick = function() {
- var timer,
- timers = jQuery.timers,
- i = 0;
-
- fxNow = jQuery.now();
-
- for ( ; i < timers.length; i++ ) {
- timer = timers[ i ];
- // Checks the timer has not already been removed
- if ( !timer() && timers[ i ] === timer ) {
- timers.splice( i--, 1 );
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
- if ( timer() && jQuery.timers.push( timer ) && !timerId ) {
- timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
- }
-};
-
-jQuery.fx.interval = 13;
-
-jQuery.fx.stop = function() {
- clearInterval( timerId );
- timerId = null;
-};
-
-jQuery.fx.speeds = {
- slow: 600,
- fast: 200,
- // Default speed
- _default: 400
-};
-
-// Back Compat <1.8 extension point
-jQuery.fx.step = {};
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.animated = function( elem ) {
- return jQuery.grep(jQuery.timers, function( fn ) {
- return elem === fn.elem;
- }).length;
- };
-}
-var rroot = /^(?:body|html)$/i;
-
-jQuery.fn.offset = function( options ) {
- if ( arguments.length ) {
- return options === undefined ?
- this :
- this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- var docElem, body, win, clientTop, clientLeft, scrollTop, scrollLeft,
- box = { top: 0, left: 0 },
- elem = this[ 0 ],
- doc = elem && elem.ownerDocument;
-
- if ( !doc ) {
- return;
- }
-
- if ( (body = doc.body) === elem ) {
- return jQuery.offset.bodyOffset( elem );
- }
-
- docElem = doc.documentElement;
-
- // Make sure it's not a disconnected DOM node
- if ( !jQuery.contains( docElem, elem ) ) {
- return box;
- }
-
- // If we don't have gBCR, just use 0,0 rather than error
- // BlackBerry 5, iOS 3 (original iPhone)
- if ( typeof elem.getBoundingClientRect !== "undefined" ) {
- box = elem.getBoundingClientRect();
- }
- win = getWindow( doc );
- clientTop = docElem.clientTop || body.clientTop || 0;
- clientLeft = docElem.clientLeft || body.clientLeft || 0;
- scrollTop = win.pageYOffset || docElem.scrollTop;
- scrollLeft = win.pageXOffset || docElem.scrollLeft;
- return {
- top: box.top + scrollTop - clientTop,
- left: box.left + scrollLeft - clientLeft
- };
-};
-
-jQuery.offset = {
-
- bodyOffset: function( body ) {
- var top = body.offsetTop,
- left = body.offsetLeft;
-
- if ( jQuery.support.doesNotIncludeMarginInBodyOffset ) {
- top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
- left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
- }
-
- return { top: top, left: left };
- },
-
- setOffset: function( elem, options, i ) {
- var position = jQuery.css( elem, "position" );
-
- // set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- var curElem = jQuery( elem ),
- curOffset = curElem.offset(),
- curCSSTop = jQuery.css( elem, "top" ),
- curCSSLeft = jQuery.css( elem, "left" ),
- calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
- props = {}, curPosition = {}, curTop, curLeft;
-
- // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( jQuery.isFunction( options ) ) {
- options = options.call( elem, i, curOffset );
- }
-
- if ( options.top != null ) {
- props.top = ( options.top - curOffset.top ) + curTop;
- }
- if ( options.left != null ) {
- props.left = ( options.left - curOffset.left ) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
- } else {
- curElem.css( props );
- }
- }
-};
-
-
-jQuery.fn.extend({
-
- position: function() {
- if ( !this[0] ) {
- return;
- }
-
- var elem = this[0],
-
- // Get *real* offsetParent
- offsetParent = this.offsetParent(),
-
- // Get correct offsets
- offset = this.offset(),
- parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
-
- // Subtract element margins
- // note: when an element has margin: auto the offsetLeft and marginLeft
- // are the same in Safari causing offset.left to incorrectly be 0
- offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
- offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
-
- // Add offsetParent borders
- parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
- parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
-
- // Subtract the two offsets
- return {
- top: offset.top - parentOffset.top,
- left: offset.left - parentOffset.left
- };
- },
-
- offsetParent: function() {
- return this.map(function() {
- var offsetParent = this.offsetParent || document.body;
- while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
- offsetParent = offsetParent.offsetParent;
- }
- return offsetParent || document.body;
- });
- }
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
- var top = /Y/.test( prop );
-
- jQuery.fn[ method ] = function( val ) {
- return jQuery.access( this, function( elem, method, val ) {
- var win = getWindow( elem );
-
- if ( val === undefined ) {
- return win ? (prop in win) ? win[ prop ] :
- win.document.documentElement[ method ] :
- elem[ method ];
- }
-
- if ( win ) {
- win.scrollTo(
- !top ? val : jQuery( win ).scrollLeft(),
- top ? val : jQuery( win ).scrollTop()
- );
-
- } else {
- elem[ method ] = val;
- }
- }, method, val, arguments.length, null );
- };
-});
-
-function getWindow( elem ) {
- return jQuery.isWindow( elem ) ?
- elem :
- elem.nodeType === 9 ?
- elem.defaultView || elem.parentWindow :
- false;
-}
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
- jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
- // margin is only for outerHeight, outerWidth
- jQuery.fn[ funcName ] = function( margin, value ) {
- var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
- extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
- return jQuery.access( this, function( elem, type, value ) {
- var doc;
-
- if ( jQuery.isWindow( elem ) ) {
- // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
- // isn't a whole lot we can do. See pull request at this URL for discussion:
- // https://github.com/jquery/jquery/pull/764
- return elem.document.documentElement[ "client" + name ];
- }
-
- // Get document width or height
- if ( elem.nodeType === 9 ) {
- doc = elem.documentElement;
-
- // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
- // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
- return Math.max(
- elem.body[ "scroll" + name ], doc[ "scroll" + name ],
- elem.body[ "offset" + name ], doc[ "offset" + name ],
- doc[ "client" + name ]
- );
- }
-
- return value === undefined ?
- // Get width or height on the element, requesting but not forcing parseFloat
- jQuery.css( elem, type, value, extra ) :
-
- // Set width or height on the element
- jQuery.style( elem, type, value, extra );
- }, type, chainable ? margin : undefined, chainable, null );
- };
- });
-});
-// Expose jQuery to the global object
-window.jQuery = window.$ = jQuery;
-
-// Expose jQuery as an AMD module, but only for AMD loaders that
-// understand the issues with loading multiple versions of jQuery
-// in a page that all might call define(). The loader will indicate
-// they have special allowances for multiple jQuery versions by
-// specifying define.amd.jQuery = true. Register as a named module,
-// since jQuery can be concatenated with other files that may use define,
-// but not use a proper concatenation script that understands anonymous
-// AMD modules. A named AMD is safest and most robust way to register.
-// Lowercase jquery is used because AMD module names are derived from
-// file names, and jQuery is normally delivered in a lowercase file name.
-// Do this after creating the global so that if an AMD module wants to call
-// noConflict to hide this version of jQuery, it will work.
-if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
- define( "jquery", [], function () { return jQuery; } );
-}
-
-})( window ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery-1.9.1.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery-1.9.1.js
deleted file mode 100644
index 86a33051..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery-1.9.1.js
+++ /dev/null
@@ -1,9597 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.9.1
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2013-2-4
- */
-(function( window, undefined ) {
-
-// Can't do this because several apps including ASP.NET trace
-// the stack via arguments.caller.callee and Firefox dies if
-// you try to trace through "use strict" call chains. (#13335)
-// Support: Firefox 18+
-//"use strict";
-var
- // The deferred used on DOM ready
- readyList,
-
- // A central reference to the root jQuery(document)
- rootjQuery,
-
- // Support: IE<9
- // For `typeof node.method` instead of `node.method !== undefined`
- core_strundefined = typeof undefined,
-
- // Use the correct document accordingly with window argument (sandbox)
- document = window.document,
- location = window.location,
-
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$,
-
- // [[Class]] -> type pairs
- class2type = {},
-
- // List of deleted data cache ids, so we can reuse them
- core_deletedIds = [],
-
- core_version = "1.9.1",
-
- // Save a reference to some core methods
- core_concat = core_deletedIds.concat,
- core_push = core_deletedIds.push,
- core_slice = core_deletedIds.slice,
- core_indexOf = core_deletedIds.indexOf,
- core_toString = class2type.toString,
- core_hasOwn = class2type.hasOwnProperty,
- core_trim = core_version.trim,
-
- // Define a local copy of jQuery
- jQuery = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- return new jQuery.fn.init( selector, context, rootjQuery );
- },
-
- // Used for matching numbers
- core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,
-
- // Used for splitting on whitespace
- core_rnotwhite = /\S+/g,
-
- // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)
- rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
- // A simple way to check for HTML strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- // Strict HTML recognition (#11290: must start with <)
- rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,
-
- // Match a standalone tag
- rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/,
-
- // JSON RegExp
- rvalidchars = /^[\],:{}\s]*$/,
- rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
- rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,
- rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,
-
- // Matches dashed string for camelizing
- rmsPrefix = /^-ms-/,
- rdashAlpha = /-([\da-z])/gi,
-
- // Used by jQuery.camelCase as callback to replace()
- fcamelCase = function( all, letter ) {
- return letter.toUpperCase();
- },
-
- // The ready event handler
- completed = function( event ) {
-
- // readyState === "complete" is good enough for us to call the dom ready in oldIE
- if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) {
- detach();
- jQuery.ready();
- }
- },
- // Clean-up method for dom ready events
- detach = function() {
- if ( document.addEventListener ) {
- document.removeEventListener( "DOMContentLoaded", completed, false );
- window.removeEventListener( "load", completed, false );
-
- } else {
- document.detachEvent( "onreadystatechange", completed );
- window.detachEvent( "onload", completed );
- }
- };
-
-jQuery.fn = jQuery.prototype = {
- // The current version of jQuery being used
- jquery: core_version,
-
- constructor: jQuery,
- init: function( selector, context, rootjQuery ) {
- var match, elem;
-
- // HANDLE: $(""), $(null), $(undefined), $(false)
- if ( !selector ) {
- return this;
- }
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = rquickExpr.exec( selector );
- }
-
- // Match html or make sure no context is specified for #id
- if ( match && (match[1] || !context) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[1] ) {
- context = context instanceof jQuery ? context[0] : context;
-
- // scripts is true for back-compat
- jQuery.merge( this, jQuery.parseHTML(
- match[1],
- context && context.nodeType ? context.ownerDocument || context : document,
- true
- ) );
-
- // HANDLE: $(html, props)
- if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) {
- for ( match in context ) {
- // Properties of context are called as methods if possible
- if ( jQuery.isFunction( this[ match ] ) ) {
- this[ match ]( context[ match ] );
-
- // ...and otherwise set as attributes
- } else {
- this.attr( match, context[ match ] );
- }
- }
- }
-
- return this;
-
- // HANDLE: $(#id)
- } else {
- elem = document.getElementById( match[2] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id !== match[2] ) {
- return rootjQuery.find( selector );
- }
-
- // Otherwise, we inject the element directly into the jQuery object
- this.length = 1;
- this[0] = elem;
- }
-
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return ( context || rootjQuery ).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(DOMElement)
- } else if ( selector.nodeType ) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return rootjQuery.ready( selector );
- }
-
- if ( selector.selector !== undefined ) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray( selector, this );
- },
-
- // Start with an empty selector
- selector: "",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- // The number of elements contained in the matched element set
- size: function() {
- return this.length;
- },
-
- toArray: function() {
- return core_slice.call( this );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num == null ?
-
- // Return a 'clean' array
- this.toArray() :
-
- // Return just the object
- ( num < 0 ? this[ this.length + num ] : this[ num ] );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems ) {
-
- // Build a new jQuery matched element set
- var ret = jQuery.merge( this.constructor(), elems );
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
- ret.context = this.context;
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- // (You can seed the arguments with an array of args, but this is
- // only used internally.)
- each: function( callback, args ) {
- return jQuery.each( this, callback, args );
- },
-
- ready: function( fn ) {
- // Add the callback
- jQuery.ready.promise().done( fn );
-
- return this;
- },
-
- slice: function() {
- return this.pushStack( core_slice.apply( this, arguments ) );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- eq: function( i ) {
- var len = this.length,
- j = +i + ( i < 0 ? len : 0 );
- return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function( elem, i ) {
- return callback.call( elem, i, elem );
- }));
- },
-
- end: function() {
- return this.prevObject || this.constructor(null);
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: core_push,
- sort: [].sort,
- splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
- var src, copyIsArray, copy, name, options, clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
- target = arguments[1] || {};
- // skip the boolean and the target
- i = 2;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
- target = {};
- }
-
- // extend jQuery itself if only one argument is passed
- if ( length === i ) {
- target = this;
- --i;
- }
-
- for ( ; i < length; i++ ) {
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null ) {
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray(src) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject(src) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend({
- noConflict: function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
- },
-
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
-
- // Abort if there are pending holds or we're already ready
- if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
- return;
- }
-
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( !document.body ) {
- return setTimeout( jQuery.ready );
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ jQuery ] );
-
- // Trigger any bound ready events
- if ( jQuery.fn.trigger ) {
- jQuery( document ).trigger("ready").off("ready");
- }
- },
-
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return jQuery.type(obj) === "function";
- },
-
- isArray: Array.isArray || function( obj ) {
- return jQuery.type(obj) === "array";
- },
-
- isWindow: function( obj ) {
- return obj != null && obj == obj.window;
- },
-
- isNumeric: function( obj ) {
- return !isNaN( parseFloat(obj) ) && isFinite( obj );
- },
-
- type: function( obj ) {
- if ( obj == null ) {
- return String( obj );
- }
- return typeof obj === "object" || typeof obj === "function" ?
- class2type[ core_toString.call(obj) ] || "object" :
- typeof obj;
- },
-
- isPlainObject: function( obj ) {
- // Must be an Object.
- // Because of IE, we also have to check the presence of the constructor property.
- // Make sure that DOM nodes and window objects don't pass through, as well
- if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- try {
- // Not own constructor property must be Object
- if ( obj.constructor &&
- !core_hasOwn.call(obj, "constructor") &&
- !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
- return false;
- }
- } catch ( e ) {
- // IE8,9 Will throw exceptions on certain host objects #9897
- return false;
- }
-
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own.
-
- var key;
- for ( key in obj ) {}
-
- return key === undefined || core_hasOwn.call( obj, key );
- },
-
- isEmptyObject: function( obj ) {
- var name;
- for ( name in obj ) {
- return false;
- }
- return true;
- },
-
- error: function( msg ) {
- throw new Error( msg );
- },
-
- // data: string of html
- // context (optional): If specified, the fragment will be created in this context, defaults to document
- // keepScripts (optional): If true, will include scripts passed in the html string
- parseHTML: function( data, context, keepScripts ) {
- if ( !data || typeof data !== "string" ) {
- return null;
- }
- if ( typeof context === "boolean" ) {
- keepScripts = context;
- context = false;
- }
- context = context || document;
-
- var parsed = rsingleTag.exec( data ),
- scripts = !keepScripts && [];
-
- // Single tag
- if ( parsed ) {
- return [ context.createElement( parsed[1] ) ];
- }
-
- parsed = jQuery.buildFragment( [ data ], context, scripts );
- if ( scripts ) {
- jQuery( scripts ).remove();
- }
- return jQuery.merge( [], parsed.childNodes );
- },
-
- parseJSON: function( data ) {
- // Attempt to parse using the native JSON parser first
- if ( window.JSON && window.JSON.parse ) {
- return window.JSON.parse( data );
- }
-
- if ( data === null ) {
- return data;
- }
-
- if ( typeof data === "string" ) {
-
- // Make sure leading/trailing whitespace is removed (IE can't handle it)
- data = jQuery.trim( data );
-
- if ( data ) {
- // Make sure the incoming data is actual JSON
- // Logic borrowed from http://json.org/json2.js
- if ( rvalidchars.test( data.replace( rvalidescape, "@" )
- .replace( rvalidtokens, "]" )
- .replace( rvalidbraces, "")) ) {
-
- return ( new Function( "return " + data ) )();
- }
- }
- }
-
- jQuery.error( "Invalid JSON: " + data );
- },
-
- // Cross-browser xml parsing
- parseXML: function( data ) {
- var xml, tmp;
- if ( !data || typeof data !== "string" ) {
- return null;
- }
- try {
- if ( window.DOMParser ) { // Standard
- tmp = new DOMParser();
- xml = tmp.parseFromString( data , "text/xml" );
- } else { // IE
- xml = new ActiveXObject( "Microsoft.XMLDOM" );
- xml.async = "false";
- xml.loadXML( data );
- }
- } catch( e ) {
- xml = undefined;
- }
- if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
- },
-
- noop: function() {},
-
- // Evaluates a script in a global context
- // Workarounds based on findings by Jim Driscoll
- // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
- globalEval: function( data ) {
- if ( data && jQuery.trim( data ) ) {
- // We use execScript on Internet Explorer
- // We use an anonymous function so that context is window
- // rather than jQuery in Firefox
- ( window.execScript || function( data ) {
- window[ "eval" ].call( window, data );
- } )( data );
- }
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Microsoft forgot to hump their vendor prefix (#9572)
- camelCase: function( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
- },
-
- // args is for internal usage only
- each: function( obj, callback, args ) {
- var value,
- i = 0,
- length = obj.length,
- isArray = isArraylike( obj );
-
- if ( args ) {
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback.apply( obj[ i ], args );
-
- if ( value === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- value = callback.apply( obj[ i ], args );
-
- if ( value === false ) {
- break;
- }
- }
- }
-
- // A special, fast, case for the most common use of each
- } else {
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback.call( obj[ i ], i, obj[ i ] );
-
- if ( value === false ) {
- break;
- }
- }
- } else {
- for ( i in obj ) {
- value = callback.call( obj[ i ], i, obj[ i ] );
-
- if ( value === false ) {
- break;
- }
- }
- }
- }
-
- return obj;
- },
-
- // Use native String.trim function wherever possible
- trim: core_trim && !core_trim.call("\uFEFF\xA0") ?
- function( text ) {
- return text == null ?
- "" :
- core_trim.call( text );
- } :
-
- // Otherwise use our own trimming functionality
- function( text ) {
- return text == null ?
- "" :
- ( text + "" ).replace( rtrim, "" );
- },
-
- // results is for internal usage only
- makeArray: function( arr, results ) {
- var ret = results || [];
-
- if ( arr != null ) {
- if ( isArraylike( Object(arr) ) ) {
- jQuery.merge( ret,
- typeof arr === "string" ?
- [ arr ] : arr
- );
- } else {
- core_push.call( ret, arr );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, arr, i ) {
- var len;
-
- if ( arr ) {
- if ( core_indexOf ) {
- return core_indexOf.call( arr, elem, i );
- }
-
- len = arr.length;
- i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
- for ( ; i < len; i++ ) {
- // Skip accessing in sparse arrays
- if ( i in arr && arr[ i ] === elem ) {
- return i;
- }
- }
- }
-
- return -1;
- },
-
- merge: function( first, second ) {
- var l = second.length,
- i = first.length,
- j = 0;
-
- if ( typeof l === "number" ) {
- for ( ; j < l; j++ ) {
- first[ i++ ] = second[ j ];
- }
- } else {
- while ( second[j] !== undefined ) {
- first[ i++ ] = second[ j++ ];
- }
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, inv ) {
- var retVal,
- ret = [],
- i = 0,
- length = elems.length;
- inv = !!inv;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( ; i < length; i++ ) {
- retVal = !!callback( elems[ i ], i );
- if ( inv !== retVal ) {
- ret.push( elems[ i ] );
- }
- }
-
- return ret;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var value,
- i = 0,
- length = elems.length,
- isArray = isArraylike( elems ),
- ret = [];
-
- // Go through the array, translating each of the items to their
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( i in elems ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
- }
-
- // Flatten any nested arrays
- return core_concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- var args, proxy, tmp;
-
- if ( typeof context === "string" ) {
- tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- args = core_slice.call( arguments, 2 );
- proxy = function() {
- return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
- return proxy;
- },
-
- // Multifunctional method to get and set values of a collection
- // The value/s can optionally be executed if it's a function
- access: function( elems, fn, key, value, chainable, emptyGet, raw ) {
- var i = 0,
- length = elems.length,
- bulk = key == null;
-
- // Sets many values
- if ( jQuery.type( key ) === "object" ) {
- chainable = true;
- for ( i in key ) {
- jQuery.access( elems, fn, i, key[i], true, emptyGet, raw );
- }
-
- // Sets one value
- } else if ( value !== undefined ) {
- chainable = true;
-
- if ( !jQuery.isFunction( value ) ) {
- raw = true;
- }
-
- if ( bulk ) {
- // Bulk operations run against the entire set
- if ( raw ) {
- fn.call( elems, value );
- fn = null;
-
- // ...except when executing function values
- } else {
- bulk = fn;
- fn = function( elem, key, value ) {
- return bulk.call( jQuery( elem ), value );
- };
- }
- }
-
- if ( fn ) {
- for ( ; i < length; i++ ) {
- fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );
- }
- }
- }
-
- return chainable ?
- elems :
-
- // Gets
- bulk ?
- fn.call( elems ) :
- length ? fn( elems[0], key ) : emptyGet;
- },
-
- now: function() {
- return ( new Date() ).getTime();
- }
-});
-
-jQuery.ready.promise = function( obj ) {
- if ( !readyList ) {
-
- readyList = jQuery.Deferred();
-
- // Catch cases where $(document).ready() is called after the browser event has already occurred.
- // we once tried to use readyState "interactive" here, but it caused issues like the one
- // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15
- if ( document.readyState === "complete" ) {
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- setTimeout( jQuery.ready );
-
- // Standards-based browsers support DOMContentLoaded
- } else if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", completed, false );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", completed, false );
-
- // If IE event model is used
- } else {
- // Ensure firing before onload, maybe late but safe also for iframes
- document.attachEvent( "onreadystatechange", completed );
-
- // A fallback to window.onload, that will always work
- window.attachEvent( "onload", completed );
-
- // If IE and not a frame
- // continually check to see if the document is ready
- var top = false;
-
- try {
- top = window.frameElement == null && document.documentElement;
- } catch(e) {}
-
- if ( top && top.doScroll ) {
- (function doScrollCheck() {
- if ( !jQuery.isReady ) {
-
- try {
- // Use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- top.doScroll("left");
- } catch(e) {
- return setTimeout( doScrollCheck, 50 );
- }
-
- // detach all dom ready events
- detach();
-
- // and execute any waiting functions
- jQuery.ready();
- }
- })();
- }
- }
- }
- return readyList.promise( obj );
-};
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-function isArraylike( obj ) {
- var length = obj.length,
- type = jQuery.type( obj );
-
- if ( jQuery.isWindow( obj ) ) {
- return false;
- }
-
- if ( obj.nodeType === 1 && length ) {
- return true;
- }
-
- return type === "array" || type !== "function" &&
- ( length === 0 ||
- typeof length === "number" && length > 0 && ( length - 1 ) in obj );
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-// String to Object options format cache
-var optionsCache = {};
-
-// Convert String-formatted options into Object-formatted ones and store in cache
-function createOptions( options ) {
- var object = optionsCache[ options ] = {};
- jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) {
- object[ flag ] = true;
- });
- return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- * options: an optional list of space-separated options that will change how
- * the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- * once: will ensure the callback list can only be fired once (like a Deferred)
- *
- * memory: will keep track of previous values and will call any callback added
- * after the list has been fired right away with the latest "memorized"
- * values (like a Deferred)
- *
- * unique: will ensure a callback can only be added once (no duplicate in the list)
- *
- * stopOnFalse: interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
- // Convert options from String-formatted to Object-formatted if needed
- // (we check in cache first)
- options = typeof options === "string" ?
- ( optionsCache[ options ] || createOptions( options ) ) :
- jQuery.extend( {}, options );
-
- var // Flag to know if list is currently firing
- firing,
- // Last fire value (for non-forgettable lists)
- memory,
- // Flag to know if list was already fired
- fired,
- // End of the loop when firing
- firingLength,
- // Index of currently firing callback (modified by remove if needed)
- firingIndex,
- // First callback to fire (used internally by add and fireWith)
- firingStart,
- // Actual callback list
- list = [],
- // Stack of fire calls for repeatable lists
- stack = !options.once && [],
- // Fire callbacks
- fire = function( data ) {
- memory = options.memory && data;
- fired = true;
- firingIndex = firingStart || 0;
- firingStart = 0;
- firingLength = list.length;
- firing = true;
- for ( ; list && firingIndex < firingLength; firingIndex++ ) {
- if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) {
- memory = false; // To prevent further calls using add
- break;
- }
- }
- firing = false;
- if ( list ) {
- if ( stack ) {
- if ( stack.length ) {
- fire( stack.shift() );
- }
- } else if ( memory ) {
- list = [];
- } else {
- self.disable();
- }
- }
- },
- // Actual Callbacks object
- self = {
- // Add a callback or a collection of callbacks to the list
- add: function() {
- if ( list ) {
- // First, we save the current length
- var start = list.length;
- (function add( args ) {
- jQuery.each( args, function( _, arg ) {
- var type = jQuery.type( arg );
- if ( type === "function" ) {
- if ( !options.unique || !self.has( arg ) ) {
- list.push( arg );
- }
- } else if ( arg && arg.length && type !== "string" ) {
- // Inspect recursively
- add( arg );
- }
- });
- })( arguments );
- // Do we need to add the callbacks to the
- // current firing batch?
- if ( firing ) {
- firingLength = list.length;
- // With memory, if we're not firing then
- // we should call right away
- } else if ( memory ) {
- firingStart = start;
- fire( memory );
- }
- }
- return this;
- },
- // Remove a callback from the list
- remove: function() {
- if ( list ) {
- jQuery.each( arguments, function( _, arg ) {
- var index;
- while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
- list.splice( index, 1 );
- // Handle firing indexes
- if ( firing ) {
- if ( index <= firingLength ) {
- firingLength--;
- }
- if ( index <= firingIndex ) {
- firingIndex--;
- }
- }
- }
- });
- }
- return this;
- },
- // Check if a given callback is in the list.
- // If no argument is given, return whether or not list has callbacks attached.
- has: function( fn ) {
- return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length );
- },
- // Remove all callbacks from the list
- empty: function() {
- list = [];
- return this;
- },
- // Have the list do nothing anymore
- disable: function() {
- list = stack = memory = undefined;
- return this;
- },
- // Is it disabled?
- disabled: function() {
- return !list;
- },
- // Lock the list in its current state
- lock: function() {
- stack = undefined;
- if ( !memory ) {
- self.disable();
- }
- return this;
- },
- // Is it locked?
- locked: function() {
- return !stack;
- },
- // Call all callbacks with the given context and arguments
- fireWith: function( context, args ) {
- args = args || [];
- args = [ context, args.slice ? args.slice() : args ];
- if ( list && ( !fired || stack ) ) {
- if ( firing ) {
- stack.push( args );
- } else {
- fire( args );
- }
- }
- return this;
- },
- // Call all the callbacks with the given arguments
- fire: function() {
- self.fireWith( this, arguments );
- return this;
- },
- // To know if the callbacks have already been called at least once
- fired: function() {
- return !!fired;
- }
- };
-
- return self;
-};
-jQuery.extend({
-
- Deferred: function( func ) {
- var tuples = [
- // action, add listener, listener list, final state
- [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ],
- [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ],
- [ "notify", "progress", jQuery.Callbacks("memory") ]
- ],
- state = "pending",
- promise = {
- state: function() {
- return state;
- },
- always: function() {
- deferred.done( arguments ).fail( arguments );
- return this;
- },
- then: function( /* fnDone, fnFail, fnProgress */ ) {
- var fns = arguments;
- return jQuery.Deferred(function( newDefer ) {
- jQuery.each( tuples, function( i, tuple ) {
- var action = tuple[ 0 ],
- fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
- // deferred[ done | fail | progress ] for forwarding actions to newDefer
- deferred[ tuple[1] ](function() {
- var returned = fn && fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise()
- .done( newDefer.resolve )
- .fail( newDefer.reject )
- .progress( newDefer.notify );
- } else {
- newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments );
- }
- });
- });
- fns = null;
- }).promise();
- },
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- return obj != null ? jQuery.extend( obj, promise ) : promise;
- }
- },
- deferred = {};
-
- // Keep pipe for back-compat
- promise.pipe = promise.then;
-
- // Add list-specific methods
- jQuery.each( tuples, function( i, tuple ) {
- var list = tuple[ 2 ],
- stateString = tuple[ 3 ];
-
- // promise[ done | fail | progress ] = list.add
- promise[ tuple[1] ] = list.add;
-
- // Handle state
- if ( stateString ) {
- list.add(function() {
- // state = [ resolved | rejected ]
- state = stateString;
-
- // [ reject_list | resolve_list ].disable; progress_list.lock
- }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
- }
-
- // deferred[ resolve | reject | notify ]
- deferred[ tuple[0] ] = function() {
- deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
- return this;
- };
- deferred[ tuple[0] + "With" ] = list.fireWith;
- });
-
- // Make the deferred a promise
- promise.promise( deferred );
-
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
-
- // All done!
- return deferred;
- },
-
- // Deferred helper
- when: function( subordinate /* , ..., subordinateN */ ) {
- var i = 0,
- resolveValues = core_slice.call( arguments ),
- length = resolveValues.length,
-
- // the count of uncompleted subordinates
- remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
-
- // the master Deferred. If resolveValues consist of only a single Deferred, just use that.
- deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
-
- // Update function for both resolve and progress values
- updateFunc = function( i, contexts, values ) {
- return function( value ) {
- contexts[ i ] = this;
- values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value;
- if( values === progressValues ) {
- deferred.notifyWith( contexts, values );
- } else if ( !( --remaining ) ) {
- deferred.resolveWith( contexts, values );
- }
- };
- },
-
- progressValues, progressContexts, resolveContexts;
-
- // add listeners to Deferred subordinates; treat others as resolved
- if ( length > 1 ) {
- progressValues = new Array( length );
- progressContexts = new Array( length );
- resolveContexts = new Array( length );
- for ( ; i < length; i++ ) {
- if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
- resolveValues[ i ].promise()
- .done( updateFunc( i, resolveContexts, resolveValues ) )
- .fail( deferred.reject )
- .progress( updateFunc( i, progressContexts, progressValues ) );
- } else {
- --remaining;
- }
- }
- }
-
- // if we're not waiting on anything, resolve the master
- if ( !remaining ) {
- deferred.resolveWith( resolveContexts, resolveValues );
- }
-
- return deferred.promise();
- }
-});
-jQuery.support = (function() {
-
- var support, all, a,
- input, select, fragment,
- opt, eventName, isSupported, i,
- div = document.createElement("div");
-
- // Setup
- div.setAttribute( "className", "t" );
- div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-
- // Support tests won't run in some limited or non-browser environments
- all = div.getElementsByTagName("*");
- a = div.getElementsByTagName("a")[ 0 ];
- if ( !all || !a || !all.length ) {
- return {};
- }
-
- // First batch of tests
- select = document.createElement("select");
- opt = select.appendChild( document.createElement("option") );
- input = div.getElementsByTagName("input")[ 0 ];
-
- a.style.cssText = "top:1px;float:left;opacity:.5";
- support = {
- // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
- getSetAttribute: div.className !== "t",
-
- // IE strips leading whitespace when .innerHTML is used
- leadingWhitespace: div.firstChild.nodeType === 3,
-
- // Make sure that tbody elements aren't automatically inserted
- // IE will insert them into empty tables
- tbody: !div.getElementsByTagName("tbody").length,
-
- // Make sure that link elements get serialized correctly by innerHTML
- // This requires a wrapper element in IE
- htmlSerialize: !!div.getElementsByTagName("link").length,
-
- // Get the style information from getAttribute
- // (IE uses .cssText instead)
- style: /top/.test( a.getAttribute("style") ),
-
- // Make sure that URLs aren't manipulated
- // (IE normalizes it by default)
- hrefNormalized: a.getAttribute("href") === "/a",
-
- // Make sure that element opacity exists
- // (IE uses filter instead)
- // Use a regex to work around a WebKit issue. See #5145
- opacity: /^0.5/.test( a.style.opacity ),
-
- // Verify style float existence
- // (IE uses styleFloat instead of cssFloat)
- cssFloat: !!a.style.cssFloat,
-
- // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
- checkOn: !!input.value,
-
- // Make sure that a selected-by-default option has a working selected property.
- // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
- optSelected: opt.selected,
-
- // Tests for enctype support on a form (#6743)
- enctype: !!document.createElement("form").enctype,
-
- // Makes sure cloning an html5 element does not cause problems
- // Where outerHTML is undefined, this still works
- html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>",
-
- // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode
- boxModel: document.compatMode === "CSS1Compat",
-
- // Will be defined later
- deleteExpando: true,
- noCloneEvent: true,
- inlineBlockNeedsLayout: false,
- shrinkWrapBlocks: false,
- reliableMarginRight: true,
- boxSizingReliable: true,
- pixelPosition: false
- };
-
- // Make sure checked status is properly cloned
- input.checked = true;
- support.noCloneChecked = input.cloneNode( true ).checked;
-
- // Make sure that the options inside disabled selects aren't marked as disabled
- // (WebKit marks them as disabled)
- select.disabled = true;
- support.optDisabled = !opt.disabled;
-
- // Support: IE<9
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
-
- // Check if we can trust getAttribute("value")
- input = document.createElement("input");
- input.setAttribute( "value", "" );
- support.input = input.getAttribute( "value" ) === "";
-
- // Check if an input maintains its value after becoming a radio
- input.value = "t";
- input.setAttribute( "type", "radio" );
- support.radioValue = input.value === "t";
-
- // #11217 - WebKit loses check when the name is after the checked attribute
- input.setAttribute( "checked", "t" );
- input.setAttribute( "name", "t" );
-
- fragment = document.createDocumentFragment();
- fragment.appendChild( input );
-
- // Check if a disconnected checkbox will retain its checked
- // value of true after appended to the DOM (IE6/7)
- support.appendChecked = input.checked;
-
- // WebKit doesn't clone checked state correctly in fragments
- support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- // Support: IE<9
- // Opera does not clone events (and typeof div.attachEvent === undefined).
- // IE9-10 clones events bound via attachEvent, but they don't trigger with .click()
- if ( div.attachEvent ) {
- div.attachEvent( "onclick", function() {
- support.noCloneEvent = false;
- });
-
- div.cloneNode( true ).click();
- }
-
- // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)
- // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php
- for ( i in { submit: true, change: true, focusin: true }) {
- div.setAttribute( eventName = "on" + i, "t" );
-
- support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false;
- }
-
- div.style.backgroundClip = "content-box";
- div.cloneNode( true ).style.backgroundClip = "";
- support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
- // Run tests that need a body at doc ready
- jQuery(function() {
- var container, marginDiv, tds,
- divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",
- body = document.getElementsByTagName("body")[0];
-
- if ( !body ) {
- // Return for frameset docs that don't have a body
- return;
- }
-
- container = document.createElement("div");
- container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px";
-
- body.appendChild( container ).appendChild( div );
-
- // Support: IE8
- // Check if table cells still have offsetWidth/Height when they are set
- // to display:none and there are still other visible table cells in a
- // table row; if so, offsetWidth/Height are not reliable for use when
- // determining if an element has been hidden directly using
- // display:none (it is still safe to use offsets if a parent element is
- // hidden; don safety goggles and see bug #4512 for more information).
- div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
- tds = div.getElementsByTagName("td");
- tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none";
- isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
- tds[ 0 ].style.display = "";
- tds[ 1 ].style.display = "none";
-
- // Support: IE8
- // Check if empty table cells still have offsetWidth/Height
- support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
-
- // Check box-sizing and margin behavior
- div.innerHTML = "";
- div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;";
- support.boxSizing = ( div.offsetWidth === 4 );
- support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );
-
- // Use window.getComputedStyle because jsdom on node.js will break without it.
- if ( window.getComputedStyle ) {
- support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%";
- support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px";
-
- // Check if div with explicit width and no margin-right incorrectly
- // gets computed margin-right based on width of container. (#3333)
- // Fails in WebKit before Feb 2011 nightlies
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- marginDiv = div.appendChild( document.createElement("div") );
- marginDiv.style.cssText = div.style.cssText = divReset;
- marginDiv.style.marginRight = marginDiv.style.width = "0";
- div.style.width = "1px";
-
- support.reliableMarginRight =
- !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );
- }
-
- if ( typeof div.style.zoom !== core_strundefined ) {
- // Support: IE<8
- // Check if natively block-level elements act like inline-block
- // elements when setting their display to 'inline' and giving
- // them layout
- div.innerHTML = "";
- div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1";
- support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );
-
- // Support: IE6
- // Check if elements with layout shrink-wrap their children
- div.style.display = "block";
- div.innerHTML = "<div></div>";
- div.firstChild.style.width = "5px";
- support.shrinkWrapBlocks = ( div.offsetWidth !== 3 );
-
- if ( support.inlineBlockNeedsLayout ) {
- // Prevent IE 6 from affecting layout for positioned elements #11048
- // Prevent IE from shrinking the body in IE 7 mode #12869
- // Support: IE<8
- body.style.zoom = 1;
- }
- }
-
- body.removeChild( container );
-
- // Null elements to avoid leaks in IE
- container = div = tds = marginDiv = null;
- });
-
- // Null elements to avoid leaks in IE
- all = select = fragment = opt = a = input = null;
-
- return support;
-})();
-
-var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,
- rmultiDash = /([A-Z])/g;
-
-function internalData( elem, name, data, pvt /* Internal Use Only */ ){
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var thisCache, ret,
- internalKey = jQuery.expando,
- getByName = typeof name === "string",
-
- // We have to handle DOM nodes and JS objects differently because IE6-7
- // can't GC object references properly across the DOM-JS boundary
- isNode = elem.nodeType,
-
- // Only DOM nodes need the global jQuery cache; JS object data is
- // attached directly to the object so GC can occur automatically
- cache = isNode ? jQuery.cache : elem,
-
- // Only defining an ID for JS objects if its cache already exists allows
- // the code to shortcut on the same path as a DOM node with no cache
- id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
-
- // Avoid doing any more work than we need to when trying to get data on an
- // object that has no data at all
- if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {
- return;
- }
-
- if ( !id ) {
- // Only DOM nodes need a new unique ID for each element since their data
- // ends up in the global cache
- if ( isNode ) {
- elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++;
- } else {
- id = internalKey;
- }
- }
-
- if ( !cache[ id ] ) {
- cache[ id ] = {};
-
- // Avoids exposing jQuery metadata on plain JS objects when the object
- // is serialized using JSON.stringify
- if ( !isNode ) {
- cache[ id ].toJSON = jQuery.noop;
- }
- }
-
- // An object can be passed to jQuery.data instead of a key/value pair; this gets
- // shallow copied over onto the existing cache
- if ( typeof name === "object" || typeof name === "function" ) {
- if ( pvt ) {
- cache[ id ] = jQuery.extend( cache[ id ], name );
- } else {
- cache[ id ].data = jQuery.extend( cache[ id ].data, name );
- }
- }
-
- thisCache = cache[ id ];
-
- // jQuery data() is stored in a separate object inside the object's internal data
- // cache in order to avoid key collisions between internal data and user-defined
- // data.
- if ( !pvt ) {
- if ( !thisCache.data ) {
- thisCache.data = {};
- }
-
- thisCache = thisCache.data;
- }
-
- if ( data !== undefined ) {
- thisCache[ jQuery.camelCase( name ) ] = data;
- }
-
- // Check for both converted-to-camel and non-converted data property names
- // If a data property was specified
- if ( getByName ) {
-
- // First Try to find as-is property data
- ret = thisCache[ name ];
-
- // Test for null|undefined property data
- if ( ret == null ) {
-
- // Try to find the camelCased property
- ret = thisCache[ jQuery.camelCase( name ) ];
- }
- } else {
- ret = thisCache;
- }
-
- return ret;
-}
-
-function internalRemoveData( elem, name, pvt ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var i, l, thisCache,
- isNode = elem.nodeType,
-
- // See jQuery.data for more information
- cache = isNode ? jQuery.cache : elem,
- id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
- // If there is already no cache entry for this object, there is no
- // purpose in continuing
- if ( !cache[ id ] ) {
- return;
- }
-
- if ( name ) {
-
- thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
- if ( thisCache ) {
-
- // Support array or space separated string names for data keys
- if ( !jQuery.isArray( name ) ) {
-
- // try the string as a key before any manipulation
- if ( name in thisCache ) {
- name = [ name ];
- } else {
-
- // split the camel cased version by spaces unless a key with the spaces exists
- name = jQuery.camelCase( name );
- if ( name in thisCache ) {
- name = [ name ];
- } else {
- name = name.split(" ");
- }
- }
- } else {
- // If "name" is an array of keys...
- // When data is initially created, via ("key", "val") signature,
- // keys will be converted to camelCase.
- // Since there is no way to tell _how_ a key was added, remove
- // both plain key and camelCase key. #12786
- // This will only penalize the array argument path.
- name = name.concat( jQuery.map( name, jQuery.camelCase ) );
- }
-
- for ( i = 0, l = name.length; i < l; i++ ) {
- delete thisCache[ name[i] ];
- }
-
- // If there is no data left in the cache, we want to continue
- // and let the cache object itself get destroyed
- if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {
- return;
- }
- }
- }
-
- // See jQuery.data for more information
- if ( !pvt ) {
- delete cache[ id ].data;
-
- // Don't destroy the parent cache unless the internal data object
- // had been the only thing left in it
- if ( !isEmptyDataObject( cache[ id ] ) ) {
- return;
- }
- }
-
- // Destroy the cache
- if ( isNode ) {
- jQuery.cleanData( [ elem ], true );
-
- // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
- } else if ( jQuery.support.deleteExpando || cache != cache.window ) {
- delete cache[ id ];
-
- // When all else fails, null
- } else {
- cache[ id ] = null;
- }
-}
-
-jQuery.extend({
- cache: {},
-
- // Unique for each copy of jQuery on the page
- // Non-digits removed to match rinlinejQuery
- expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ),
-
- // The following elements throw uncatchable exceptions if you
- // attempt to add expando properties to them.
- noData: {
- "embed": true,
- // Ban all objects except for Flash (which handle expandos)
- "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
- "applet": true
- },
-
- hasData: function( elem ) {
- elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
- return !!elem && !isEmptyDataObject( elem );
- },
-
- data: function( elem, name, data ) {
- return internalData( elem, name, data );
- },
-
- removeData: function( elem, name ) {
- return internalRemoveData( elem, name );
- },
-
- // For internal use only.
- _data: function( elem, name, data ) {
- return internalData( elem, name, data, true );
- },
-
- _removeData: function( elem, name ) {
- return internalRemoveData( elem, name, true );
- },
-
- // A method for determining if a DOM node can handle the data expando
- acceptData: function( elem ) {
- // Do not set data on non-element because it will not be cleared (#8335).
- if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {
- return false;
- }
-
- var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];
-
- // nodes accept data unless otherwise specified; rejection can be conditional
- return !noData || noData !== true && elem.getAttribute("classid") === noData;
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ) {
- var attrs, name,
- elem = this[0],
- i = 0,
- data = null;
-
- // Gets all values
- if ( key === undefined ) {
- if ( this.length ) {
- data = jQuery.data( elem );
-
- if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
- attrs = elem.attributes;
- for ( ; i < attrs.length; i++ ) {
- name = attrs[i].name;
-
- if ( !name.indexOf( "data-" ) ) {
- name = jQuery.camelCase( name.slice(5) );
-
- dataAttr( elem, name, data[ name ] );
- }
- }
- jQuery._data( elem, "parsedAttrs", true );
- }
- }
-
- return data;
- }
-
- // Sets multiple values
- if ( typeof key === "object" ) {
- return this.each(function() {
- jQuery.data( this, key );
- });
- }
-
- return jQuery.access( this, function( value ) {
-
- if ( value === undefined ) {
- // Try to fetch any internally stored data first
- return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;
- }
-
- this.each(function() {
- jQuery.data( this, key, value );
- });
- }, null, value, arguments.length > 1, null, true );
- },
-
- removeData: function( key ) {
- return this.each(function() {
- jQuery.removeData( this, key );
- });
- }
-});
-
-function dataAttr( elem, key, data ) {
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
-
- var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = data === "true" ? true :
- data === "false" ? false :
- data === "null" ? null :
- // Only convert to a number if it doesn't change the string
- +data + "" === data ? +data :
- rbrace.test( data ) ? jQuery.parseJSON( data ) :
- data;
- } catch( e ) {}
-
- // Make sure we set the data so it isn't changed later
- jQuery.data( elem, key, data );
-
- } else {
- data = undefined;
- }
- }
-
- return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
- var name;
- for ( name in obj ) {
-
- // if the public data object is empty, the private is still empty
- if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) {
- continue;
- }
- if ( name !== "toJSON" ) {
- return false;
- }
- }
-
- return true;
-}
-jQuery.extend({
- queue: function( elem, type, data ) {
- var queue;
-
- if ( elem ) {
- type = ( type || "fx" ) + "queue";
- queue = jQuery._data( elem, type );
-
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !queue || jQuery.isArray(data) ) {
- queue = jQuery._data( elem, type, jQuery.makeArray(data) );
- } else {
- queue.push( data );
- }
- }
- return queue || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- startLength = queue.length,
- fn = queue.shift(),
- hooks = jQuery._queueHooks( elem, type ),
- next = function() {
- jQuery.dequeue( elem, type );
- };
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- startLength--;
- }
-
- hooks.cur = fn;
- if ( fn ) {
-
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift( "inprogress" );
- }
-
- // clear up the last queue stop function
- delete hooks.stop;
- fn.call( elem, next, hooks );
- }
-
- if ( !startLength && hooks ) {
- hooks.empty.fire();
- }
- },
-
- // not intended for public consumption - generates a queueHooks object, or returns the current one
- _queueHooks: function( elem, type ) {
- var key = type + "queueHooks";
- return jQuery._data( elem, key ) || jQuery._data( elem, key, {
- empty: jQuery.Callbacks("once memory").add(function() {
- jQuery._removeData( elem, type + "queue" );
- jQuery._removeData( elem, key );
- })
- });
- }
-});
-
-jQuery.fn.extend({
- queue: function( type, data ) {
- var setter = 2;
-
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- setter--;
- }
-
- if ( arguments.length < setter ) {
- return jQuery.queue( this[0], type );
- }
-
- return data === undefined ?
- this :
- this.each(function() {
- var queue = jQuery.queue( this, type, data );
-
- // ensure a hooks for this queue
- jQuery._queueHooks( this, type );
-
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
- // Based off of the plugin by Clint Helfers, with permission.
- // http://blindsignals.com/index.php/2009/07/jquery-delay/
- delay: function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
- type = type || "fx";
-
- return this.queue( type, function( next, hooks ) {
- var timeout = setTimeout( next, time );
- hooks.stop = function() {
- clearTimeout( timeout );
- };
- });
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, obj ) {
- var tmp,
- count = 1,
- defer = jQuery.Deferred(),
- elements = this,
- i = this.length,
- resolve = function() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- };
-
- if ( typeof type !== "string" ) {
- obj = type;
- type = undefined;
- }
- type = type || "fx";
-
- while( i-- ) {
- tmp = jQuery._data( elements[ i ], type + "queueHooks" );
- if ( tmp && tmp.empty ) {
- count++;
- tmp.empty.add( resolve );
- }
- }
- resolve();
- return defer.promise( obj );
- }
-});
-var nodeHook, boolHook,
- rclass = /[\t\r\n]/g,
- rreturn = /\r/g,
- rfocusable = /^(?:input|select|textarea|button|object)$/i,
- rclickable = /^(?:a|area)$/i,
- rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,
- ruseDefault = /^(?:checked|selected)$/i,
- getSetAttribute = jQuery.support.getSetAttribute,
- getSetInput = jQuery.support.input;
-
-jQuery.fn.extend({
- attr: function( name, value ) {
- return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 );
- },
-
- removeAttr: function( name ) {
- return this.each(function() {
- jQuery.removeAttr( this, name );
- });
- },
-
- prop: function( name, value ) {
- return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );
- },
-
- removeProp: function( name ) {
- name = jQuery.propFix[ name ] || name;
- return this.each(function() {
- // try/catch handles cases where IE balks (such as removing a property on window)
- try {
- this[ name ] = undefined;
- delete this[ name ];
- } catch( e ) {}
- });
- },
-
- addClass: function( value ) {
- var classes, elem, cur, clazz, j,
- i = 0,
- len = this.length,
- proceed = typeof value === "string" && value;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).addClass( value.call( this, j, this.className ) );
- });
- }
-
- if ( proceed ) {
- // The disjunction here is for better compressibility (see removeClass)
- classes = ( value || "" ).match( core_rnotwhite ) || [];
-
- for ( ; i < len; i++ ) {
- elem = this[ i ];
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- " "
- );
-
- if ( cur ) {
- j = 0;
- while ( (clazz = classes[j++]) ) {
- if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
- cur += clazz + " ";
- }
- }
- elem.className = jQuery.trim( cur );
-
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var classes, elem, cur, clazz, j,
- i = 0,
- len = this.length,
- proceed = arguments.length === 0 || typeof value === "string" && value;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).removeClass( value.call( this, j, this.className ) );
- });
- }
- if ( proceed ) {
- classes = ( value || "" ).match( core_rnotwhite ) || [];
-
- for ( ; i < len; i++ ) {
- elem = this[ i ];
- // This expression is here for better compressibility (see addClass)
- cur = elem.nodeType === 1 && ( elem.className ?
- ( " " + elem.className + " " ).replace( rclass, " " ) :
- ""
- );
-
- if ( cur ) {
- j = 0;
- while ( (clazz = classes[j++]) ) {
- // Remove *all* instances
- while ( cur.indexOf( " " + clazz + " " ) >= 0 ) {
- cur = cur.replace( " " + clazz + " ", " " );
- }
- }
- elem.className = value ? jQuery.trim( cur ) : "";
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value,
- isBool = typeof stateVal === "boolean";
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( i ) {
- jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
- });
- }
-
- return this.each(function() {
- if ( type === "string" ) {
- // toggle individual class names
- var className,
- i = 0,
- self = jQuery( this ),
- state = stateVal,
- classNames = value.match( core_rnotwhite ) || [];
-
- while ( (className = classNames[ i++ ]) ) {
- // check each className given, space separated list
- state = isBool ? state : !self.hasClass( className );
- self[ state ? "addClass" : "removeClass" ]( className );
- }
-
- // Toggle whole class name
- } else if ( type === core_strundefined || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- jQuery._data( this, "__className__", this.className );
- }
-
- // If the element has a class name or if we're passed "false",
- // then remove the whole classname (if there was one, the above saved it).
- // Otherwise bring back whatever was previously saved (if anything),
- // falling back to the empty string if nothing was stored.
- this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
- }
- });
- },
-
- hasClass: function( selector ) {
- var className = " " + selector + " ",
- i = 0,
- l = this.length;
- for ( ; i < l; i++ ) {
- if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) {
- return true;
- }
- }
-
- return false;
- },
-
- val: function( value ) {
- var ret, hooks, isFunction,
- elem = this[0];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
- return ret;
- }
-
- ret = elem.value;
-
- return typeof ret === "string" ?
- // handle most common string cases
- ret.replace(rreturn, "") :
- // handle cases where value is null/undef or number
- ret == null ? "" : ret;
- }
-
- return;
- }
-
- isFunction = jQuery.isFunction( value );
-
- return this.each(function( i ) {
- var val,
- self = jQuery(this);
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call( this, i, self.val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
- } else if ( typeof val === "number" ) {
- val += "";
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map(val, function ( value ) {
- return value == null ? "" : value + "";
- });
- }
-
- hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- });
- }
-});
-
-jQuery.extend({
- valHooks: {
- option: {
- get: function( elem ) {
- // attributes.value is undefined in Blackberry 4.7 but
- // uses .value. See #6932
- var val = elem.attributes.value;
- return !val || val.specified ? elem.value : elem.text;
- }
- },
- select: {
- get: function( elem ) {
- var value, option,
- options = elem.options,
- index = elem.selectedIndex,
- one = elem.type === "select-one" || index < 0,
- values = one ? null : [],
- max = one ? index + 1 : options.length,
- i = index < 0 ?
- max :
- one ? index : 0;
-
- // Loop through all the selected options
- for ( ; i < max; i++ ) {
- option = options[ i ];
-
- // oldIE doesn't update selected after form reset (#2551)
- if ( ( option.selected || i === index ) &&
- // Don't return options that are disabled or in a disabled optgroup
- ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
- ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var values = jQuery.makeArray( value );
-
- jQuery(elem).find("option").each(function() {
- this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
- });
-
- if ( !values.length ) {
- elem.selectedIndex = -1;
- }
- return values;
- }
- }
- },
-
- attr: function( elem, name, value ) {
- var hooks, notxml, ret,
- nType = elem.nodeType;
-
- // don't get/set attributes on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- // Fallback to prop when attributes are not supported
- if ( typeof elem.getAttribute === core_strundefined ) {
- return jQuery.prop( elem, name, value );
- }
-
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- // All attributes are lowercase
- // Grab necessary hook if one is defined
- if ( notxml ) {
- name = name.toLowerCase();
- hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );
- }
-
- if ( value !== undefined ) {
-
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
-
- } else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- elem.setAttribute( name, value + "" );
- return value;
- }
-
- } else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
-
- // In IE9+, Flash objects don't have .getAttribute (#12945)
- // Support: IE9+
- if ( typeof elem.getAttribute !== core_strundefined ) {
- ret = elem.getAttribute( name );
- }
-
- // Non-existent attributes return null, we normalize to undefined
- return ret == null ?
- undefined :
- ret;
- }
- },
-
- removeAttr: function( elem, value ) {
- var name, propName,
- i = 0,
- attrNames = value && value.match( core_rnotwhite );
-
- if ( attrNames && elem.nodeType === 1 ) {
- while ( (name = attrNames[i++]) ) {
- propName = jQuery.propFix[ name ] || name;
-
- // Boolean attributes get special treatment (#10870)
- if ( rboolean.test( name ) ) {
- // Set corresponding property to false for boolean attributes
- // Also clear defaultChecked/defaultSelected (if appropriate) for IE<8
- if ( !getSetAttribute && ruseDefault.test( name ) ) {
- elem[ jQuery.camelCase( "default-" + name ) ] =
- elem[ propName ] = false;
- } else {
- elem[ propName ] = false;
- }
-
- // See #9699 for explanation of this approach (setting first, then removal)
- } else {
- jQuery.attr( elem, name, "" );
- }
-
- elem.removeAttribute( getSetAttribute ? name : propName );
- }
- }
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
- // Setting the type on a radio button after the value resets the value in IE6-9
- // Reset value to default in case type is set after value during creation
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- }
- },
-
- propFix: {
- tabindex: "tabIndex",
- readonly: "readOnly",
- "for": "htmlFor",
- "class": "className",
- maxlength: "maxLength",
- cellspacing: "cellSpacing",
- cellpadding: "cellPadding",
- rowspan: "rowSpan",
- colspan: "colSpan",
- usemap: "useMap",
- frameborder: "frameBorder",
- contenteditable: "contentEditable"
- },
-
- prop: function( elem, name, value ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- // don't get/set properties on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
-
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- if ( notxml ) {
- // Fix name and attach hooks
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
-
- if ( value !== undefined ) {
- if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- return ( elem[ name ] = value );
- }
-
- } else {
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
- return elem[ name ];
- }
- }
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- var attributeNode = elem.getAttributeNode("tabindex");
-
- return attributeNode && attributeNode.specified ?
- parseInt( attributeNode.value, 10 ) :
- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
- 0 :
- undefined;
- }
- }
- }
-});
-
-// Hook for boolean attributes
-boolHook = {
- get: function( elem, name ) {
- var
- // Use .prop to determine if this attribute is understood as boolean
- prop = jQuery.prop( elem, name ),
-
- // Fetch it accordingly
- attr = typeof prop === "boolean" && elem.getAttribute( name ),
- detail = typeof prop === "boolean" ?
-
- getSetInput && getSetAttribute ?
- attr != null :
- // oldIE fabricates an empty string for missing boolean attributes
- // and conflates checked/selected into attroperties
- ruseDefault.test( name ) ?
- elem[ jQuery.camelCase( "default-" + name ) ] :
- !!attr :
-
- // fetch an attribute node for properties not recognized as boolean
- elem.getAttributeNode( name );
-
- return detail && detail.value !== false ?
- name.toLowerCase() :
- undefined;
- },
- set: function( elem, value, name ) {
- if ( value === false ) {
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
- // IE<8 needs the *property* name
- elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
-
- // Use defaultChecked and defaultSelected for oldIE
- } else {
- elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
- }
-
- return name;
- }
-};
-
-// fix oldIE value attroperty
-if ( !getSetInput || !getSetAttribute ) {
- jQuery.attrHooks.value = {
- get: function( elem, name ) {
- var ret = elem.getAttributeNode( name );
- return jQuery.nodeName( elem, "input" ) ?
-
- // Ignore the value *property* by using defaultValue
- elem.defaultValue :
-
- ret && ret.specified ? ret.value : undefined;
- },
- set: function( elem, value, name ) {
- if ( jQuery.nodeName( elem, "input" ) ) {
- // Does not return so that setAttribute is also used
- elem.defaultValue = value;
- } else {
- // Use nodeHook if defined (#1954); otherwise setAttribute is fine
- return nodeHook && nodeHook.set( elem, value, name );
- }
- }
- };
-}
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
- // Use this for any attribute in IE6/7
- // This fixes almost every IE6/7 issue
- nodeHook = jQuery.valHooks.button = {
- get: function( elem, name ) {
- var ret = elem.getAttributeNode( name );
- return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ?
- ret.value :
- undefined;
- },
- set: function( elem, value, name ) {
- // Set the existing or create a new attribute node
- var ret = elem.getAttributeNode( name );
- if ( !ret ) {
- elem.setAttributeNode(
- (ret = elem.ownerDocument.createAttribute( name ))
- );
- }
-
- ret.value = value += "";
-
- // Break association with cloned elements by also using setAttribute (#9646)
- return name === "value" || value === elem.getAttribute( name ) ?
- value :
- undefined;
- }
- };
-
- // Set contenteditable to false on removals(#10429)
- // Setting to empty string throws an error as an invalid value
- jQuery.attrHooks.contenteditable = {
- get: nodeHook.get,
- set: function( elem, value, name ) {
- nodeHook.set( elem, value === "" ? false : value, name );
- }
- };
-
- // Set width and height to auto instead of 0 on empty string( Bug #8150 )
- // This is for removals
- jQuery.each([ "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
- set: function( elem, value ) {
- if ( value === "" ) {
- elem.setAttribute( name, "auto" );
- return value;
- }
- }
- });
- });
-}
-
-
-// Some attributes require a special call on IE
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !jQuery.support.hrefNormalized ) {
- jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
- get: function( elem ) {
- var ret = elem.getAttribute( name, 2 );
- return ret == null ? undefined : ret;
- }
- });
- });
-
- // href/src property should get the full normalized URL (#10299/#12915)
- jQuery.each([ "href", "src" ], function( i, name ) {
- jQuery.propHooks[ name ] = {
- get: function( elem ) {
- return elem.getAttribute( name, 4 );
- }
- };
- });
-}
-
-if ( !jQuery.support.style ) {
- jQuery.attrHooks.style = {
- get: function( elem ) {
- // Return undefined in the case of empty string
- // Note: IE uppercases css property names, but if we were to .toLowerCase()
- // .cssText, that would destroy case senstitivity in URL's, like in "background"
- return elem.style.cssText || undefined;
- },
- set: function( elem, value ) {
- return ( elem.style.cssText = value + "" );
- }
- };
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
- jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
- get: function( elem ) {
- var parent = elem.parentNode;
-
- if ( parent ) {
- parent.selectedIndex;
-
- // Make sure that it also works with optgroups, see #5701
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- return null;
- }
- });
-}
-
-// IE6/7 call enctype encoding
-if ( !jQuery.support.enctype ) {
- jQuery.propFix.enctype = "encoding";
-}
-
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
- jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- get: function( elem ) {
- // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
- return elem.getAttribute("value") === null ? "on" : elem.value;
- }
- };
- });
-}
-jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 );
- }
- }
- });
-});
-var rformElems = /^(?:input|select|textarea)$/i,
- rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|contextmenu)|click/,
- rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
- rtypenamespace = /^([^.]*)(?:\.(.+)|)$/;
-
-function returnTrue() {
- return true;
-}
-
-function returnFalse() {
- return false;
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
- global: {},
-
- add: function( elem, types, handler, data, selector ) {
- var tmp, events, t, handleObjIn,
- special, eventHandle, handleObj,
- handlers, type, namespaces, origType,
- elemData = jQuery._data( elem );
-
- // Don't attach events to noData or text/comment nodes (but allow plain objects)
- if ( !elemData ) {
- return;
- }
-
- // Caller can pass in an object of custom data in lieu of the handler
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- selector = handleObjIn.selector;
- }
-
- // Make sure that the handler has a unique ID, used to find/remove it later
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure and main handler, if this is the first
- if ( !(events = elemData.events) ) {
- events = elemData.events = {};
- }
- if ( !(eventHandle = elemData.handle) ) {
- eventHandle = elemData.handle = function( e ) {
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
- jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
- undefined;
- };
- // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
- eventHandle.elem = elem;
- }
-
- // Handle multiple events separated by a space
- // jQuery(...).bind("mouseover mouseout", fn);
- types = ( types || "" ).match( core_rnotwhite ) || [""];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[t] ) || [];
- type = origType = tmp[1];
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
- // If event changes its type, use the special event handlers for the changed type
- special = jQuery.event.special[ type ] || {};
-
- // If selector defined, determine special event api type, otherwise given type
- type = ( selector ? special.delegateType : special.bindType ) || type;
-
- // Update special based on newly reset type
- special = jQuery.event.special[ type ] || {};
-
- // handleObj is passed to all event handlers
- handleObj = jQuery.extend({
- type: type,
- origType: origType,
- data: data,
- handler: handler,
- guid: handler.guid,
- selector: selector,
- needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
- namespace: namespaces.join(".")
- }, handleObjIn );
-
- // Init the event handler queue if we're the first
- if ( !(handlers = events[ type ]) ) {
- handlers = events[ type ] = [];
- handlers.delegateCount = 0;
-
- // Only use addEventListener/attachEvent if the special events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
- // Bind the global event handler to the element
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
-
- } else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add to the element's handler list, delegates in front
- if ( selector ) {
- handlers.splice( handlers.delegateCount++, 0, handleObj );
- } else {
- handlers.push( handleObj );
- }
-
- // Keep track of which events have ever been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- // Nullify elem to prevent memory leaks in IE
- elem = null;
- },
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, selector, mappedTypes ) {
- var j, handleObj, tmp,
- origCount, t, events,
- special, handlers, type,
- namespaces, origType,
- elemData = jQuery.hasData( elem ) && jQuery._data( elem );
-
- if ( !elemData || !(events = elemData.events) ) {
- return;
- }
-
- // Once for each type.namespace in types; type may be omitted
- types = ( types || "" ).match( core_rnotwhite ) || [""];
- t = types.length;
- while ( t-- ) {
- tmp = rtypenamespace.exec( types[t] ) || [];
- type = origType = tmp[1];
- namespaces = ( tmp[2] || "" ).split( "." ).sort();
-
- // Unbind all events (on this namespace, if provided) for the element
- if ( !type ) {
- for ( type in events ) {
- jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
- }
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
- type = ( selector ? special.delegateType : special.bindType ) || type;
- handlers = events[ type ] || [];
- tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" );
-
- // Remove matching events
- origCount = j = handlers.length;
- while ( j-- ) {
- handleObj = handlers[ j ];
-
- if ( ( mappedTypes || origType === handleObj.origType ) &&
- ( !handler || handler.guid === handleObj.guid ) &&
- ( !tmp || tmp.test( handleObj.namespace ) ) &&
- ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) {
- handlers.splice( j, 1 );
-
- if ( handleObj.selector ) {
- handlers.delegateCount--;
- }
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
- }
-
- // Remove generic event handler if we removed something and no more handlers exist
- // (avoids potential for endless recursion during removal of special event handlers)
- if ( origCount && !handlers.length ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- delete elemData.handle;
-
- // removeData also checks for emptiness and clears the expando if empty
- // so use it instead of delete
- jQuery._removeData( elem, "events" );
- }
- },
-
- trigger: function( event, data, elem, onlyHandlers ) {
- var handle, ontype, cur,
- bubbleType, special, tmp, i,
- eventPath = [ elem || document ],
- type = core_hasOwn.call( event, "type" ) ? event.type : event,
- namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : [];
-
- cur = tmp = elem = elem || document;
-
- // Don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // focus/blur morphs to focusin/out; ensure we're not firing them right now
- if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
- return;
- }
-
- if ( type.indexOf(".") >= 0 ) {
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split(".");
- type = namespaces.shift();
- namespaces.sort();
- }
- ontype = type.indexOf(":") < 0 && "on" + type;
-
- // Caller can pass in a jQuery.Event object, Object, or just an event type string
- event = event[ jQuery.expando ] ?
- event :
- new jQuery.Event( type, typeof event === "object" && event );
-
- event.isTrigger = true;
- event.namespace = namespaces.join(".");
- event.namespace_re = event.namespace ?
- new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) :
- null;
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- if ( !event.target ) {
- event.target = elem;
- }
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data == null ?
- [ event ] :
- jQuery.makeArray( data, [ event ] );
-
- // Allow special events to draw outside the lines
- special = jQuery.event.special[ type ] || {};
- if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
- return;
- }
-
- // Determine event propagation path in advance, per W3C events spec (#9951)
- // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
- if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
- bubbleType = special.delegateType || type;
- if ( !rfocusMorph.test( bubbleType + type ) ) {
- cur = cur.parentNode;
- }
- for ( ; cur; cur = cur.parentNode ) {
- eventPath.push( cur );
- tmp = cur;
- }
-
- // Only add window if we got to document (e.g., not plain obj or detached DOM)
- if ( tmp === (elem.ownerDocument || document) ) {
- eventPath.push( tmp.defaultView || tmp.parentWindow || window );
- }
- }
-
- // Fire handlers on the event path
- i = 0;
- while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) {
-
- event.type = i > 1 ?
- bubbleType :
- special.bindType || type;
-
- // jQuery handler
- handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" );
- if ( handle ) {
- handle.apply( cur, data );
- }
-
- // Native handler
- handle = ontype && cur[ ontype ];
- if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {
- event.preventDefault();
- }
- }
- event.type = type;
-
- // If nobody prevented the default action, do it now
- if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
- if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) &&
- !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name name as the event.
- // Can't use an .isFunction() check here because IE6/7 fails that test.
- // Don't do default actions on window, that's where global variables be (#6170)
- if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
-
- // Don't re-trigger an onFOO event when we call its FOO() method
- tmp = elem[ ontype ];
-
- if ( tmp ) {
- elem[ ontype ] = null;
- }
-
- // Prevent re-triggering of the same event, since we already bubbled it above
- jQuery.event.triggered = type;
- try {
- elem[ type ]();
- } catch ( e ) {
- // IE<9 dies on focus/blur to hidden element (#1486,#12518)
- // only reproducible on winXP IE8 native, not IE9 in IE8 mode
- }
- jQuery.event.triggered = undefined;
-
- if ( tmp ) {
- elem[ ontype ] = tmp;
- }
- }
- }
- }
-
- return event.result;
- },
-
- dispatch: function( event ) {
-
- // Make a writable jQuery.Event from the native event object
- event = jQuery.event.fix( event );
-
- var i, ret, handleObj, matched, j,
- handlerQueue = [],
- args = core_slice.call( arguments ),
- handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
- special = jQuery.event.special[ event.type ] || {};
-
- // Use the fix-ed jQuery.Event rather than the (read-only) native event
- args[0] = event;
- event.delegateTarget = this;
-
- // Call the preDispatch hook for the mapped type, and let it bail if desired
- if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
- return;
- }
-
- // Determine handlers
- handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
- // Run delegates first; they may want to stop propagation beneath us
- i = 0;
- while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) {
- event.currentTarget = matched.elem;
-
- j = 0;
- while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) {
-
- // Triggered event must either 1) have no namespace, or
- // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace).
- if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) {
-
- event.handleObj = handleObj;
- event.data = handleObj.data;
-
- ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler )
- .apply( matched.elem, args );
-
- if ( ret !== undefined ) {
- if ( (event.result = ret) === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
- }
- }
- }
-
- // Call the postDispatch hook for the mapped type
- if ( special.postDispatch ) {
- special.postDispatch.call( this, event );
- }
-
- return event.result;
- },
-
- handlers: function( event, handlers ) {
- var sel, handleObj, matches, i,
- handlerQueue = [],
- delegateCount = handlers.delegateCount,
- cur = event.target;
-
- // Find delegate handlers
- // Black-hole SVG <use> instance trees (#13180)
- // Avoid non-left-click bubbling in Firefox (#3861)
- if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) {
-
- for ( ; cur != this; cur = cur.parentNode || this ) {
-
- // Don't check non-elements (#13208)
- // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
- if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) {
- matches = [];
- for ( i = 0; i < delegateCount; i++ ) {
- handleObj = handlers[ i ];
-
- // Don't conflict with Object.prototype properties (#13203)
- sel = handleObj.selector + " ";
-
- if ( matches[ sel ] === undefined ) {
- matches[ sel ] = handleObj.needsContext ?
- jQuery( sel, this ).index( cur ) >= 0 :
- jQuery.find( sel, this, null, [ cur ] ).length;
- }
- if ( matches[ sel ] ) {
- matches.push( handleObj );
- }
- }
- if ( matches.length ) {
- handlerQueue.push({ elem: cur, handlers: matches });
- }
- }
- }
- }
-
- // Add the remaining (directly-bound) handlers
- if ( delegateCount < handlers.length ) {
- handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) });
- }
-
- return handlerQueue;
- },
-
- fix: function( event ) {
- if ( event[ jQuery.expando ] ) {
- return event;
- }
-
- // Create a writable copy of the event object and normalize some properties
- var i, prop, copy,
- type = event.type,
- originalEvent = event,
- fixHook = this.fixHooks[ type ];
-
- if ( !fixHook ) {
- this.fixHooks[ type ] = fixHook =
- rmouseEvent.test( type ) ? this.mouseHooks :
- rkeyEvent.test( type ) ? this.keyHooks :
- {};
- }
- copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
- event = new jQuery.Event( originalEvent );
-
- i = copy.length;
- while ( i-- ) {
- prop = copy[ i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Support: IE<9
- // Fix target property (#1925)
- if ( !event.target ) {
- event.target = originalEvent.srcElement || document;
- }
-
- // Support: Chrome 23+, Safari?
- // Target should not be a text node (#504, #13143)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- // Support: IE<9
- // For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
- event.metaKey = !!event.metaKey;
-
- return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
- },
-
- // Includes some event props shared by KeyEvent and MouseEvent
- props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),
-
- fixHooks: {},
-
- keyHooks: {
- props: "char charCode key keyCode".split(" "),
- filter: function( event, original ) {
-
- // Add which for key events
- if ( event.which == null ) {
- event.which = original.charCode != null ? original.charCode : original.keyCode;
- }
-
- return event;
- }
- },
-
- mouseHooks: {
- props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),
- filter: function( event, original ) {
- var body, eventDoc, doc,
- button = original.button,
- fromElement = original.fromElement;
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && original.clientX != null ) {
- eventDoc = event.target.ownerDocument || document;
- doc = eventDoc.documentElement;
- body = eventDoc.body;
-
- event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 );
- event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 );
- }
-
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && fromElement ) {
- event.relatedTarget = fromElement === event.target ? original.toElement : fromElement;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if ( !event.which && button !== undefined ) {
- event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
- }
-
- return event;
- }
- },
-
- special: {
- load: {
- // Prevent triggered image.load events from bubbling to window.load
- noBubble: true
- },
- click: {
- // For checkbox, fire native event so checked state will be right
- trigger: function() {
- if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
- this.click();
- return false;
- }
- }
- },
- focus: {
- // Fire native event if possible so blur/focus sequence is correct
- trigger: function() {
- if ( this !== document.activeElement && this.focus ) {
- try {
- this.focus();
- return false;
- } catch ( e ) {
- // Support: IE<9
- // If we error on focus to hidden element (#1486, #12518),
- // let .trigger() run the handlers
- }
- }
- },
- delegateType: "focusin"
- },
- blur: {
- trigger: function() {
- if ( this === document.activeElement && this.blur ) {
- this.blur();
- return false;
- }
- },
- delegateType: "focusout"
- },
-
- beforeunload: {
- postDispatch: function( event ) {
-
- // Even when returnValue equals to undefined Firefox will still show alert
- if ( event.result !== undefined ) {
- event.originalEvent.returnValue = event.result;
- }
- }
- }
- },
-
- simulate: function( type, elem, event, bubble ) {
- // Piggyback on a donor event to simulate a different one.
- // Fake originalEvent to avoid donor's stopPropagation, but if the
- // simulated event prevents default then we do the same on the donor.
- var e = jQuery.extend(
- new jQuery.Event(),
- event,
- { type: type,
- isSimulated: true,
- originalEvent: {}
- }
- );
- if ( bubble ) {
- jQuery.event.trigger( e, null, elem );
- } else {
- jQuery.event.dispatch.call( elem, e );
- }
- if ( e.isDefaultPrevented() ) {
- event.preventDefault();
- }
- }
-};
-
-jQuery.removeEvent = document.removeEventListener ?
- function( elem, type, handle ) {
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle, false );
- }
- } :
- function( elem, type, handle ) {
- var name = "on" + type;
-
- if ( elem.detachEvent ) {
-
- // #8545, #7054, preventing memory leaks for custom events in IE6-8
- // detachEvent needed property on element, by name of that event, to properly expose it to GC
- if ( typeof elem[ name ] === core_strundefined ) {
- elem[ name ] = null;
- }
-
- elem.detachEvent( name, handle );
- }
- };
-
-jQuery.Event = function( src, props ) {
- // Allow instantiation without the 'new' keyword
- if ( !(this instanceof jQuery.Event) ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false ||
- src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse,
-
- preventDefault: function() {
- var e = this.originalEvent;
-
- this.isDefaultPrevented = returnTrue;
- if ( !e ) {
- return;
- }
-
- // If preventDefault exists, run it on the original event
- if ( e.preventDefault ) {
- e.preventDefault();
-
- // Support: IE
- // Otherwise set the returnValue property of the original event to false
- } else {
- e.returnValue = false;
- }
- },
- stopPropagation: function() {
- var e = this.originalEvent;
-
- this.isPropagationStopped = returnTrue;
- if ( !e ) {
- return;
- }
- // If stopPropagation exists, run it on the original event
- if ( e.stopPropagation ) {
- e.stopPropagation();
- }
-
- // Support: IE
- // Set the cancelBubble property of the original event to true
- e.cancelBubble = true;
- },
- stopImmediatePropagation: function() {
- this.isImmediatePropagationStopped = returnTrue;
- this.stopPropagation();
- }
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- delegateType: fix,
- bindType: fix,
-
- handle: function( event ) {
- var ret,
- target = this,
- related = event.relatedTarget,
- handleObj = event.handleObj;
-
- // For mousenter/leave call the handler if related is outside the target.
- // NB: No relatedTarget if the mouse left/entered the browser window
- if ( !related || (related !== target && !jQuery.contains( target, related )) ) {
- event.type = handleObj.origType;
- ret = handleObj.handler.apply( this, arguments );
- event.type = fix;
- }
- return ret;
- }
- };
-});
-
-// IE submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
- jQuery.event.special.submit = {
- setup: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Lazy-add a submit handler when a descendant form may potentially be submitted
- jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
- // Node name check avoids a VML-related crash in IE (#9807)
- var elem = e.target,
- form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined;
- if ( form && !jQuery._data( form, "submitBubbles" ) ) {
- jQuery.event.add( form, "submit._submit", function( event ) {
- event._submit_bubble = true;
- });
- jQuery._data( form, "submitBubbles", true );
- }
- });
- // return undefined since we don't need an event listener
- },
-
- postDispatch: function( event ) {
- // If form was submitted by the user, bubble the event up the tree
- if ( event._submit_bubble ) {
- delete event._submit_bubble;
- if ( this.parentNode && !event.isTrigger ) {
- jQuery.event.simulate( "submit", this.parentNode, event, true );
- }
- }
- },
-
- teardown: function() {
- // Only need this for delegated form submit events
- if ( jQuery.nodeName( this, "form" ) ) {
- return false;
- }
-
- // Remove delegated handlers; cleanData eventually reaps submit handlers attached above
- jQuery.event.remove( this, "._submit" );
- }
- };
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !jQuery.support.changeBubbles ) {
-
- jQuery.event.special.change = {
-
- setup: function() {
-
- if ( rformElems.test( this.nodeName ) ) {
- // IE doesn't fire change on a check/radio until blur; trigger it on click
- // after a propertychange. Eat the blur-change in special.change.handle.
- // This still fires onchange a second time for check/radio after blur.
- if ( this.type === "checkbox" || this.type === "radio" ) {
- jQuery.event.add( this, "propertychange._change", function( event ) {
- if ( event.originalEvent.propertyName === "checked" ) {
- this._just_changed = true;
- }
- });
- jQuery.event.add( this, "click._change", function( event ) {
- if ( this._just_changed && !event.isTrigger ) {
- this._just_changed = false;
- }
- // Allow triggered, simulated change events (#11500)
- jQuery.event.simulate( "change", this, event, true );
- });
- }
- return false;
- }
- // Delegated event; lazy-add a change handler on descendant inputs
- jQuery.event.add( this, "beforeactivate._change", function( e ) {
- var elem = e.target;
-
- if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) {
- jQuery.event.add( elem, "change._change", function( event ) {
- if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
- jQuery.event.simulate( "change", this.parentNode, event, true );
- }
- });
- jQuery._data( elem, "changeBubbles", true );
- }
- });
- },
-
- handle: function( event ) {
- var elem = event.target;
-
- // Swallow native change events from checkbox/radio, we already triggered them above
- if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) {
- return event.handleObj.handler.apply( this, arguments );
- }
- },
-
- teardown: function() {
- jQuery.event.remove( this, "._change" );
-
- return !rformElems.test( this.nodeName );
- }
- };
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler while someone wants focusin/focusout
- var attaches = 0,
- handler = function( event ) {
- jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true );
- };
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- if ( attaches++ === 0 ) {
- document.addEventListener( orig, handler, true );
- }
- },
- teardown: function() {
- if ( --attaches === 0 ) {
- document.removeEventListener( orig, handler, true );
- }
- }
- };
- });
-}
-
-jQuery.fn.extend({
-
- on: function( types, selector, data, fn, /*INTERNAL*/ one ) {
- var type, origFn;
-
- // Types can be a map of types/handlers
- if ( typeof types === "object" ) {
- // ( types-Object, selector, data )
- if ( typeof selector !== "string" ) {
- // ( types-Object, data )
- data = data || selector;
- selector = undefined;
- }
- for ( type in types ) {
- this.on( type, selector, data, types[ type ], one );
- }
- return this;
- }
-
- if ( data == null && fn == null ) {
- // ( types, fn )
- fn = selector;
- data = selector = undefined;
- } else if ( fn == null ) {
- if ( typeof selector === "string" ) {
- // ( types, selector, fn )
- fn = data;
- data = undefined;
- } else {
- // ( types, data, fn )
- fn = data;
- data = selector;
- selector = undefined;
- }
- }
- if ( fn === false ) {
- fn = returnFalse;
- } else if ( !fn ) {
- return this;
- }
-
- if ( one === 1 ) {
- origFn = fn;
- fn = function( event ) {
- // Can use an empty set, since event contains the info
- jQuery().off( event );
- return origFn.apply( this, arguments );
- };
- // Use same guid so caller can remove using origFn
- fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
- }
- return this.each( function() {
- jQuery.event.add( this, types, fn, data, selector );
- });
- },
- one: function( types, selector, data, fn ) {
- return this.on( types, selector, data, fn, 1 );
- },
- off: function( types, selector, fn ) {
- var handleObj, type;
- if ( types && types.preventDefault && types.handleObj ) {
- // ( event ) dispatched jQuery.Event
- handleObj = types.handleObj;
- jQuery( types.delegateTarget ).off(
- handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType,
- handleObj.selector,
- handleObj.handler
- );
- return this;
- }
- if ( typeof types === "object" ) {
- // ( types-object [, selector] )
- for ( type in types ) {
- this.off( type, selector, types[ type ] );
- }
- return this;
- }
- if ( selector === false || typeof selector === "function" ) {
- // ( types [, fn] )
- fn = selector;
- selector = undefined;
- }
- if ( fn === false ) {
- fn = returnFalse;
- }
- return this.each(function() {
- jQuery.event.remove( this, types, fn, selector );
- });
- },
-
- bind: function( types, data, fn ) {
- return this.on( types, null, data, fn );
- },
- unbind: function( types, fn ) {
- return this.off( types, null, fn );
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.on( types, selector, data, fn );
- },
- undelegate: function( selector, types, fn ) {
- // ( namespace ) or ( selector, types [, fn] )
- return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn );
- },
-
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
- triggerHandler: function( type, data ) {
- var elem = this[0];
- if ( elem ) {
- return jQuery.event.trigger( type, data, elem, true );
- }
- }
-});
-/*!
- * Sizzle CSS Selector Engine
- * Copyright 2012 jQuery Foundation and other contributors
- * Released under the MIT license
- * http://sizzlejs.com/
- */
-(function( window, undefined ) {
-
-var i,
- cachedruns,
- Expr,
- getText,
- isXML,
- compile,
- hasDuplicate,
- outermostContext,
-
- // Local document vars
- setDocument,
- document,
- docElem,
- documentIsXML,
- rbuggyQSA,
- rbuggyMatches,
- matches,
- contains,
- sortOrder,
-
- // Instance-specific data
- expando = "sizzle" + -(new Date()),
- preferredDoc = window.document,
- support = {},
- dirruns = 0,
- done = 0,
- classCache = createCache(),
- tokenCache = createCache(),
- compilerCache = createCache(),
-
- // General-purpose constants
- strundefined = typeof undefined,
- MAX_NEGATIVE = 1 << 31,
-
- // Array methods
- arr = [],
- pop = arr.pop,
- push = arr.push,
- slice = arr.slice,
- // Use a stripped-down indexOf if we can't use a native one
- indexOf = arr.indexOf || function( elem ) {
- var i = 0,
- len = this.length;
- for ( ; i < len; i++ ) {
- if ( this[i] === elem ) {
- return i;
- }
- }
- return -1;
- },
-
-
- // Regular expressions
-
- // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace
- whitespace = "[\\x20\\t\\r\\n\\f]",
- // http://www.w3.org/TR/css3-syntax/#characters
- characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
-
- // Loosely modeled on CSS identifier characters
- // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors
- // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
- identifier = characterEncoding.replace( "w", "w#" ),
-
- // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors
- operators = "([*^$|!~]?=)",
- attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace +
- "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]",
-
- // Prefer arguments quoted,
- // then not containing pseudos/brackets,
- // then attribute selectors/non-parenthetical expressions,
- // then anything else
- // These preferences are here to reduce the number of selectors
- // needing tokenize in the PSEUDO preFilter
- pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)",
-
- // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
- rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
- rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
- rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ),
- rpseudo = new RegExp( pseudos ),
- ridentifier = new RegExp( "^" + identifier + "$" ),
-
- matchExpr = {
- "ID": new RegExp( "^#(" + characterEncoding + ")" ),
- "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ),
- "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ),
- "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ),
- "ATTR": new RegExp( "^" + attributes ),
- "PSEUDO": new RegExp( "^" + pseudos ),
- "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
- "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
- "*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
- // For use in libraries implementing .is()
- // We use this for POS matching in `select`
- "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
- whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
- },
-
- rsibling = /[\x20\t\r\n\f]*[+~]/,
-
- rnative = /^[^{]+\{\s*\[native code/,
-
- // Easily-parseable/retrievable ID or TAG or CLASS selectors
- rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
- rinputs = /^(?:input|select|textarea|button)$/i,
- rheader = /^h\d$/i,
-
- rescape = /'|\\/g,
- rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
-
- // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
- runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,
- funescape = function( _, escaped ) {
- var high = "0x" + escaped - 0x10000;
- // NaN means non-codepoint
- return high !== high ?
- escaped :
- // BMP codepoint
- high < 0 ?
- String.fromCharCode( high + 0x10000 ) :
- // Supplemental Plane codepoint (surrogate pair)
- String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
- };
-
-// Use a stripped-down slice if we can't use a native one
-try {
- slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType;
-} catch ( e ) {
- slice = function( i ) {
- var elem,
- results = [];
- while ( (elem = this[i++]) ) {
- results.push( elem );
- }
- return results;
- };
-}
-
-/**
- * For feature detection
- * @param {Function} fn The function to test for native support
- */
-function isNative( fn ) {
- return rnative.test( fn + "" );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {Function(string, Object)} Returns the Object data after storing it on itself with
- * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- * deleting the oldest entry
- */
-function createCache() {
- var cache,
- keys = [];
-
- return (cache = function( key, value ) {
- // Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
- if ( keys.push( key += " " ) > Expr.cacheLength ) {
- // Only keep the most recent entries
- delete cache[ keys.shift() ];
- }
- return (cache[ key ] = value);
- });
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
- fn[ expando ] = true;
- return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
- */
-function assert( fn ) {
- var div = document.createElement("div");
-
- try {
- return fn( div );
- } catch (e) {
- return false;
- } finally {
- // release memory in IE
- div = null;
- }
-}
-
-function Sizzle( selector, context, results, seed ) {
- var match, elem, m, nodeType,
- // QSA vars
- i, groups, old, nid, newContext, newSelector;
-
- if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
- setDocument( context );
- }
-
- context = context || document;
- results = results || [];
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {
- return [];
- }
-
- if ( !documentIsXML && !seed ) {
-
- // Shortcuts
- if ( (match = rquickExpr.exec( selector )) ) {
- // Speed-up: Sizzle("#ID")
- if ( (m = match[1]) ) {
- if ( nodeType === 9 ) {
- elem = context.getElementById( m );
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE, Opera, and Webkit return items
- // by name instead of ID
- if ( elem.id === m ) {
- results.push( elem );
- return results;
- }
- } else {
- return results;
- }
- } else {
- // Context is not a document
- if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) &&
- contains( context, elem ) && elem.id === m ) {
- results.push( elem );
- return results;
- }
- }
-
- // Speed-up: Sizzle("TAG")
- } else if ( match[2] ) {
- push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) );
- return results;
-
- // Speed-up: Sizzle(".CLASS")
- } else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) {
- push.apply( results, slice.call(context.getElementsByClassName( m ), 0) );
- return results;
- }
- }
-
- // QSA path
- if ( support.qsa && !rbuggyQSA.test(selector) ) {
- old = true;
- nid = expando;
- newContext = context;
- newSelector = nodeType === 9 && selector;
-
- // qSA works strangely on Element-rooted queries
- // We can work around this by specifying an extra ID on the root
- // and working up from there (Thanks to Andrew Dupont for the technique)
- // IE 8 doesn't work on object elements
- if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- groups = tokenize( selector );
-
- if ( (old = context.getAttribute("id")) ) {
- nid = old.replace( rescape, "\\$&" );
- } else {
- context.setAttribute( "id", nid );
- }
- nid = "[id='" + nid + "'] ";
-
- i = groups.length;
- while ( i-- ) {
- groups[i] = nid + toSelector( groups[i] );
- }
- newContext = rsibling.test( selector ) && context.parentNode || context;
- newSelector = groups.join(",");
- }
-
- if ( newSelector ) {
- try {
- push.apply( results, slice.call( newContext.querySelectorAll(
- newSelector
- ), 0 ) );
- return results;
- } catch(qsaError) {
- } finally {
- if ( !old ) {
- context.removeAttribute("id");
- }
- }
- }
- }
- }
-
- // All others
- return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * Detect xml
- * @param {Element|Object} elem An element or a document
- */
-isXML = Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = elem && (elem.ownerDocument || elem).documentElement;
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
- var doc = node ? node.ownerDocument || node : preferredDoc;
-
- // If no document and documentElement is available, return
- if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
- return document;
- }
-
- // Set our document
- document = doc;
- docElem = doc.documentElement;
-
- // Support tests
- documentIsXML = isXML( doc );
-
- // Check if getElementsByTagName("*") returns only elements
- support.tagNameNoComments = assert(function( div ) {
- div.appendChild( doc.createComment("") );
- return !div.getElementsByTagName("*").length;
- });
-
- // Check if attributes should be retrieved by attribute nodes
- support.attributes = assert(function( div ) {
- div.innerHTML = "<select></select>";
- var type = typeof div.lastChild.getAttribute("multiple");
- // IE8 returns a string for some attributes even when not present
- return type !== "boolean" && type !== "string";
- });
-
- // Check if getElementsByClassName can be trusted
- support.getByClassName = assert(function( div ) {
- // Opera can't find a second classname (in 9.6)
- div.innerHTML = "<div class='hidden e'></div><div class='hidden'></div>";
- if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) {
- return false;
- }
-
- // Safari 3.2 caches class attributes and doesn't catch changes
- div.lastChild.className = "e";
- return div.getElementsByClassName("e").length === 2;
- });
-
- // Check if getElementById returns elements by name
- // Check if getElementsByName privileges form controls or returns elements by ID
- support.getByName = assert(function( div ) {
- // Inject content
- div.id = expando + 0;
- div.innerHTML = "<a name='" + expando + "'></a><div name='" + expando + "'></div>";
- docElem.insertBefore( div, docElem.firstChild );
-
- // Test
- var pass = doc.getElementsByName &&
- // buggy browsers will return fewer than the correct 2
- doc.getElementsByName( expando ).length === 2 +
- // buggy browsers will return more than the correct 0
- doc.getElementsByName( expando + 0 ).length;
- support.getIdNotName = !doc.getElementById( expando );
-
- // Cleanup
- docElem.removeChild( div );
-
- return pass;
- });
-
- // IE6/7 return modified attributes
- Expr.attrHandle = assert(function( div ) {
- div.innerHTML = "<a href='#'></a>";
- return div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&
- div.firstChild.getAttribute("href") === "#";
- }) ?
- {} :
- {
- "href": function( elem ) {
- return elem.getAttribute( "href", 2 );
- },
- "type": function( elem ) {
- return elem.getAttribute("type");
- }
- };
-
- // ID find and filter
- if ( support.getIdNotName ) {
- Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
- var m = context.getElementById( id );
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- return m && m.parentNode ? [m] : [];
- }
- };
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- return elem.getAttribute("id") === attrId;
- };
- };
- } else {
- Expr.find["ID"] = function( id, context ) {
- if ( typeof context.getElementById !== strundefined && !documentIsXML ) {
- var m = context.getElementById( id );
-
- return m ?
- m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ?
- [m] :
- undefined :
- [];
- }
- };
- Expr.filter["ID"] = function( id ) {
- var attrId = id.replace( runescape, funescape );
- return function( elem ) {
- var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id");
- return node && node.value === attrId;
- };
- };
- }
-
- // Tag
- Expr.find["TAG"] = support.tagNameNoComments ?
- function( tag, context ) {
- if ( typeof context.getElementsByTagName !== strundefined ) {
- return context.getElementsByTagName( tag );
- }
- } :
- function( tag, context ) {
- var elem,
- tmp = [],
- i = 0,
- results = context.getElementsByTagName( tag );
-
- // Filter out possible comments
- if ( tag === "*" ) {
- while ( (elem = results[i++]) ) {
- if ( elem.nodeType === 1 ) {
- tmp.push( elem );
- }
- }
-
- return tmp;
- }
- return results;
- };
-
- // Name
- Expr.find["NAME"] = support.getByName && function( tag, context ) {
- if ( typeof context.getElementsByName !== strundefined ) {
- return context.getElementsByName( name );
- }
- };
-
- // Class
- Expr.find["CLASS"] = support.getByClassName && function( className, context ) {
- if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) {
- return context.getElementsByClassName( className );
- }
- };
-
- // QSA and matchesSelector support
-
- // matchesSelector(:active) reports false when true (IE9/Opera 11.5)
- rbuggyMatches = [];
-
- // qSa(:focus) reports false when true (Chrome 21),
- // no need to also add to buggyMatches since matches checks buggyQSA
- // A support test would require too much code (would include document ready)
- rbuggyQSA = [ ":focus" ];
-
- if ( (support.qsa = isNative(doc.querySelectorAll)) ) {
- // Build QSA regex
- // Regex strategy adopted from Diego Perini
- assert(function( div ) {
- // Select is set to empty string on purpose
- // This is to test IE's treatment of not explictly
- // setting a boolean content attribute,
- // since its presence should be enough
- // http://bugs.jquery.com/ticket/12359
- div.innerHTML = "<select><option selected=''></option></select>";
-
- // IE8 - Some boolean attributes are not treated correctly
- if ( !div.querySelectorAll("[selected]").length ) {
- rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" );
- }
-
- // Webkit/Opera - :checked should return selected option elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- // IE8 throws error here and will not see later tests
- if ( !div.querySelectorAll(":checked").length ) {
- rbuggyQSA.push(":checked");
- }
- });
-
- assert(function( div ) {
-
- // Opera 10-12/IE8 - ^= $= *= and empty values
- // Should not select anything
- div.innerHTML = "<input type='hidden' i=''/>";
- if ( div.querySelectorAll("[i^='']").length ) {
- rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" );
- }
-
- // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
- // IE8 throws error here and will not see later tests
- if ( !div.querySelectorAll(":enabled").length ) {
- rbuggyQSA.push( ":enabled", ":disabled" );
- }
-
- // Opera 10-11 does not throw on post-comma invalid pseudos
- div.querySelectorAll("*,:x");
- rbuggyQSA.push(",.*:");
- });
- }
-
- if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector ||
- docElem.mozMatchesSelector ||
- docElem.webkitMatchesSelector ||
- docElem.oMatchesSelector ||
- docElem.msMatchesSelector) )) ) {
-
- assert(function( div ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9)
- support.disconnectedMatch = matches.call( div, "div" );
-
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( div, "[s!='']:x" );
- rbuggyMatches.push( "!=", pseudos );
- });
- }
-
- rbuggyQSA = new RegExp( rbuggyQSA.join("|") );
- rbuggyMatches = new RegExp( rbuggyMatches.join("|") );
-
- // Element contains another
- // Purposefully does not implement inclusive descendent
- // As in, an element does not contain itself
- contains = isNative(docElem.contains) || docElem.compareDocumentPosition ?
- function( a, b ) {
- var adown = a.nodeType === 9 ? a.documentElement : a,
- bup = b && b.parentNode;
- return a === bup || !!( bup && bup.nodeType === 1 && (
- adown.contains ?
- adown.contains( bup ) :
- a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
- ));
- } :
- function( a, b ) {
- if ( b ) {
- while ( (b = b.parentNode) ) {
- if ( b === a ) {
- return true;
- }
- }
- }
- return false;
- };
-
- // Document order sorting
- sortOrder = docElem.compareDocumentPosition ?
- function( a, b ) {
- var compare;
-
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) {
- if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) {
- if ( a === doc || contains( preferredDoc, a ) ) {
- return -1;
- }
- if ( b === doc || contains( preferredDoc, b ) ) {
- return 1;
- }
- return 0;
- }
- return compare & 4 ? -1 : 1;
- }
-
- return a.compareDocumentPosition ? -1 : 1;
- } :
- function( a, b ) {
- var cur,
- i = 0,
- aup = a.parentNode,
- bup = b.parentNode,
- ap = [ a ],
- bp = [ b ];
-
- // Exit early if the nodes are identical
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
-
- // Parentless nodes are either documents or disconnected
- } else if ( !aup || !bup ) {
- return a === doc ? -1 :
- b === doc ? 1 :
- aup ? -1 :
- bup ? 1 :
- 0;
-
- // If the nodes are siblings, we can do a quick check
- } else if ( aup === bup ) {
- return siblingCheck( a, b );
- }
-
- // Otherwise we need full lists of their ancestors for comparison
- cur = a;
- while ( (cur = cur.parentNode) ) {
- ap.unshift( cur );
- }
- cur = b;
- while ( (cur = cur.parentNode) ) {
- bp.unshift( cur );
- }
-
- // Walk down the tree looking for a discrepancy
- while ( ap[i] === bp[i] ) {
- i++;
- }
-
- return i ?
- // Do a sibling check if the nodes have a common ancestor
- siblingCheck( ap[i], bp[i] ) :
-
- // Otherwise nodes in our document sort first
- ap[i] === preferredDoc ? -1 :
- bp[i] === preferredDoc ? 1 :
- 0;
- };
-
- // Always assume the presence of duplicates if sort doesn't
- // pass them to our comparison function (as in Google Chrome).
- hasDuplicate = false;
- [0, 0].sort( sortOrder );
- support.detectDuplicates = hasDuplicate;
-
- return document;
-};
-
-Sizzle.matches = function( expr, elements ) {
- return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- // Make sure that attribute selectors are quoted
- expr = expr.replace( rattributeQuotes, "='$1']" );
-
- // rbuggyQSA always contains :focus, so no need for an existence check
- if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {
- try {
- var ret = matches.call( elem, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || support.disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9
- elem.document && elem.document.nodeType !== 11 ) {
- return ret;
- }
- } catch(e) {}
- }
-
- return Sizzle( expr, document, null, [elem] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
- // Set document vars if needed
- if ( ( context.ownerDocument || context ) !== document ) {
- setDocument( context );
- }
- return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
- var val;
-
- // Set document vars if needed
- if ( ( elem.ownerDocument || elem ) !== document ) {
- setDocument( elem );
- }
-
- if ( !documentIsXML ) {
- name = name.toLowerCase();
- }
- if ( (val = Expr.attrHandle[ name ]) ) {
- return val( elem );
- }
- if ( documentIsXML || support.attributes ) {
- return elem.getAttribute( name );
- }
- return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?
- name :
- val && val.specified ? val.value : null;
-};
-
-Sizzle.error = function( msg ) {
- throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-// Document sorting and removing duplicates
-Sizzle.uniqueSort = function( results ) {
- var elem,
- duplicates = [],
- i = 1,
- j = 0;
-
- // Unless we *know* we can detect duplicates, assume their presence
- hasDuplicate = !support.detectDuplicates;
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- for ( ; (elem = results[i]); i++ ) {
- if ( elem === results[ i - 1 ] ) {
- j = duplicates.push( i );
- }
- }
- while ( j-- ) {
- results.splice( duplicates[ j ], 1 );
- }
- }
-
- return results;
-};
-
-function siblingCheck( a, b ) {
- var cur = b && a,
- diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE );
-
- // Use IE sourceIndex if available on both nodes
- if ( diff ) {
- return diff;
- }
-
- // Check if b follows a
- if ( cur ) {
- while ( (cur = cur.nextSibling) ) {
- if ( cur === b ) {
- return -1;
- }
- }
- }
-
- return a ? 1 : -1;
-}
-
-// Returns a function to use in pseudos for input types
-function createInputPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === type;
- };
-}
-
-// Returns a function to use in pseudos for buttons
-function createButtonPseudo( type ) {
- return function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && elem.type === type;
- };
-}
-
-// Returns a function to use in pseudos for positionals
-function createPositionalPseudo( fn ) {
- return markFunction(function( argument ) {
- argument = +argument;
- return markFunction(function( seed, matches ) {
- var j,
- matchIndexes = fn( [], seed.length, argument ),
- i = matchIndexes.length;
-
- // Match elements found at the specified indexes
- while ( i-- ) {
- if ( seed[ (j = matchIndexes[i]) ] ) {
- seed[j] = !(matches[j] = seed[j]);
- }
- }
- });
- });
-}
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
- var node,
- ret = "",
- i = 0,
- nodeType = elem.nodeType;
-
- if ( !nodeType ) {
- // If no nodeType, this is expected to be an array
- for ( ; (node = elem[i]); i++ ) {
- // Do not traverse comment nodes
- ret += getText( node );
- }
- } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
- // Use textContent for elements
- // innerText usage removed for consistency of new lines (see #11153)
- if ( typeof elem.textContent === "string" ) {
- return elem.textContent;
- } else {
- // Traverse its children
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- ret += getText( elem );
- }
- }
- } else if ( nodeType === 3 || nodeType === 4 ) {
- return elem.nodeValue;
- }
- // Do not include comment or processing instruction nodes
-
- return ret;
-};
-
-Expr = Sizzle.selectors = {
-
- // Can be adjusted by the user
- cacheLength: 50,
-
- createPseudo: markFunction,
-
- match: matchExpr,
-
- find: {},
-
- relative: {
- ">": { dir: "parentNode", first: true },
- " ": { dir: "parentNode" },
- "+": { dir: "previousSibling", first: true },
- "~": { dir: "previousSibling" }
- },
-
- preFilter: {
- "ATTR": function( match ) {
- match[1] = match[1].replace( runescape, funescape );
-
- // Move the given value to match[3] whether quoted or unquoted
- match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape );
-
- if ( match[2] === "~=" ) {
- match[3] = " " + match[3] + " ";
- }
-
- return match.slice( 0, 4 );
- },
-
- "CHILD": function( match ) {
- /* matches from matchExpr["CHILD"]
- 1 type (only|nth|...)
- 2 what (child|of-type)
- 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
- 4 xn-component of xn+y argument ([+-]?\d*n|)
- 5 sign of xn-component
- 6 x of xn-component
- 7 sign of y-component
- 8 y of y-component
- */
- match[1] = match[1].toLowerCase();
-
- if ( match[1].slice( 0, 3 ) === "nth" ) {
- // nth-* requires argument
- if ( !match[3] ) {
- Sizzle.error( match[0] );
- }
-
- // numeric x and y parameters for Expr.filter.CHILD
- // remember that false/true cast respectively to 0/1
- match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
- match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
- // other types prohibit arguments
- } else if ( match[3] ) {
- Sizzle.error( match[0] );
- }
-
- return match;
- },
-
- "PSEUDO": function( match ) {
- var excess,
- unquoted = !match[5] && match[2];
-
- if ( matchExpr["CHILD"].test( match[0] ) ) {
- return null;
- }
-
- // Accept quoted arguments as-is
- if ( match[4] ) {
- match[2] = match[4];
-
- // Strip excess characters from unquoted arguments
- } else if ( unquoted && rpseudo.test( unquoted ) &&
- // Get excess from tokenize (recursively)
- (excess = tokenize( unquoted, true )) &&
- // advance to the next closing parenthesis
- (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
- // excess is a negative index
- match[0] = match[0].slice( 0, excess );
- match[2] = unquoted.slice( 0, excess );
- }
-
- // Return only captures needed by the pseudo filter method (type and argument)
- return match.slice( 0, 3 );
- }
- },
-
- filter: {
-
- "TAG": function( nodeName ) {
- if ( nodeName === "*" ) {
- return function() { return true; };
- }
-
- nodeName = nodeName.replace( runescape, funescape ).toLowerCase();
- return function( elem ) {
- return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
- };
- },
-
- "CLASS": function( className ) {
- var pattern = classCache[ className + " " ];
-
- return pattern ||
- (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
- classCache( className, function( elem ) {
- return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
- });
- },
-
- "ATTR": function( name, operator, check ) {
- return function( elem ) {
- var result = Sizzle.attr( elem, name );
-
- if ( result == null ) {
- return operator === "!=";
- }
- if ( !operator ) {
- return true;
- }
-
- result += "";
-
- return operator === "=" ? result === check :
- operator === "!=" ? result !== check :
- operator === "^=" ? check && result.indexOf( check ) === 0 :
- operator === "*=" ? check && result.indexOf( check ) > -1 :
- operator === "$=" ? check && result.slice( -check.length ) === check :
- operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 :
- operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
- false;
- };
- },
-
- "CHILD": function( type, what, argument, first, last ) {
- var simple = type.slice( 0, 3 ) !== "nth",
- forward = type.slice( -4 ) !== "last",
- ofType = what === "of-type";
-
- return first === 1 && last === 0 ?
-
- // Shortcut for :nth-*(n)
- function( elem ) {
- return !!elem.parentNode;
- } :
-
- function( elem, context, xml ) {
- var cache, outerCache, node, diff, nodeIndex, start,
- dir = simple !== forward ? "nextSibling" : "previousSibling",
- parent = elem.parentNode,
- name = ofType && elem.nodeName.toLowerCase(),
- useCache = !xml && !ofType;
-
- if ( parent ) {
-
- // :(first|last|only)-(child|of-type)
- if ( simple ) {
- while ( dir ) {
- node = elem;
- while ( (node = node[ dir ]) ) {
- if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) {
- return false;
- }
- }
- // Reverse direction for :only-* (if we haven't yet done so)
- start = dir = type === "only" && !start && "nextSibling";
- }
- return true;
- }
-
- start = [ forward ? parent.firstChild : parent.lastChild ];
-
- // non-xml :nth-child(...) stores cache data on `parent`
- if ( forward && useCache ) {
- // Seek `elem` from a previously-cached index
- outerCache = parent[ expando ] || (parent[ expando ] = {});
- cache = outerCache[ type ] || [];
- nodeIndex = cache[0] === dirruns && cache[1];
- diff = cache[0] === dirruns && cache[2];
- node = nodeIndex && parent.childNodes[ nodeIndex ];
-
- while ( (node = ++nodeIndex && node && node[ dir ] ||
-
- // Fallback to seeking `elem` from the start
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- // When found, cache indexes on `parent` and break
- if ( node.nodeType === 1 && ++diff && node === elem ) {
- outerCache[ type ] = [ dirruns, nodeIndex, diff ];
- break;
- }
- }
-
- // Use previously-cached element index if available
- } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) {
- diff = cache[1];
-
- // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...)
- } else {
- // Use the same loop as above to seek `elem` from the start
- while ( (node = ++nodeIndex && node && node[ dir ] ||
- (diff = nodeIndex = 0) || start.pop()) ) {
-
- if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) {
- // Cache the index of each encountered element
- if ( useCache ) {
- (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ];
- }
-
- if ( node === elem ) {
- break;
- }
- }
- }
- }
-
- // Incorporate the offset, then check against cycle size
- diff -= last;
- return diff === first || ( diff % first === 0 && diff / first >= 0 );
- }
- };
- },
-
- "PSEUDO": function( pseudo, argument ) {
- // pseudo-class names are case-insensitive
- // http://www.w3.org/TR/selectors/#pseudo-classes
- // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
- // Remember that setFilters inherits from pseudos
- var args,
- fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
- Sizzle.error( "unsupported pseudo: " + pseudo );
-
- // The user may use createPseudo to indicate that
- // arguments are needed to create the filter function
- // just as Sizzle does
- if ( fn[ expando ] ) {
- return fn( argument );
- }
-
- // But maintain support for old signatures
- if ( fn.length > 1 ) {
- args = [ pseudo, pseudo, "", argument ];
- return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
- markFunction(function( seed, matches ) {
- var idx,
- matched = fn( seed, argument ),
- i = matched.length;
- while ( i-- ) {
- idx = indexOf.call( seed, matched[i] );
- seed[ idx ] = !( matches[ idx ] = matched[i] );
- }
- }) :
- function( elem ) {
- return fn( elem, 0, args );
- };
- }
-
- return fn;
- }
- },
-
- pseudos: {
- // Potentially complex pseudos
- "not": markFunction(function( selector ) {
- // Trim the selector passed to compile
- // to avoid treating leading and trailing
- // spaces as combinators
- var input = [],
- results = [],
- matcher = compile( selector.replace( rtrim, "$1" ) );
-
- return matcher[ expando ] ?
- markFunction(function( seed, matches, context, xml ) {
- var elem,
- unmatched = matcher( seed, null, xml, [] ),
- i = seed.length;
-
- // Match elements unmatched by `matcher`
- while ( i-- ) {
- if ( (elem = unmatched[i]) ) {
- seed[i] = !(matches[i] = elem);
- }
- }
- }) :
- function( elem, context, xml ) {
- input[0] = elem;
- matcher( input, null, xml, results );
- return !results.pop();
- };
- }),
-
- "has": markFunction(function( selector ) {
- return function( elem ) {
- return Sizzle( selector, elem ).length > 0;
- };
- }),
-
- "contains": markFunction(function( text ) {
- return function( elem ) {
- return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
- };
- }),
-
- // "Whether an element is represented by a :lang() selector
- // is based solely on the element's language value
- // being equal to the identifier C,
- // or beginning with the identifier C immediately followed by "-".
- // The matching of C against the element's language value is performed case-insensitively.
- // The identifier C does not have to be a valid language name."
- // http://www.w3.org/TR/selectors/#lang-pseudo
- "lang": markFunction( function( lang ) {
- // lang value must be a valid identifider
- if ( !ridentifier.test(lang || "") ) {
- Sizzle.error( "unsupported lang: " + lang );
- }
- lang = lang.replace( runescape, funescape ).toLowerCase();
- return function( elem ) {
- var elemLang;
- do {
- if ( (elemLang = documentIsXML ?
- elem.getAttribute("xml:lang") || elem.getAttribute("lang") :
- elem.lang) ) {
-
- elemLang = elemLang.toLowerCase();
- return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
- }
- } while ( (elem = elem.parentNode) && elem.nodeType === 1 );
- return false;
- };
- }),
-
- // Miscellaneous
- "target": function( elem ) {
- var hash = window.location && window.location.hash;
- return hash && hash.slice( 1 ) === elem.id;
- },
-
- "root": function( elem ) {
- return elem === docElem;
- },
-
- "focus": function( elem ) {
- return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
- },
-
- // Boolean properties
- "enabled": function( elem ) {
- return elem.disabled === false;
- },
-
- "disabled": function( elem ) {
- return elem.disabled === true;
- },
-
- "checked": function( elem ) {
- // In CSS3, :checked should return both checked and selected elements
- // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
- var nodeName = elem.nodeName.toLowerCase();
- return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
- },
-
- "selected": function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- // Contents
- "empty": function( elem ) {
- // http://www.w3.org/TR/selectors/#empty-pseudo
- // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)),
- // not comment, processing instructions, or others
- // Thanks to Diego Perini for the nodeName shortcut
- // Greater than "@" means alpha characters (specifically not starting with "#" or "?")
- for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
- if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) {
- return false;
- }
- }
- return true;
- },
-
- "parent": function( elem ) {
- return !Expr.pseudos["empty"]( elem );
- },
-
- // Element/input types
- "header": function( elem ) {
- return rheader.test( elem.nodeName );
- },
-
- "input": function( elem ) {
- return rinputs.test( elem.nodeName );
- },
-
- "button": function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && elem.type === "button" || name === "button";
- },
-
- "text": function( elem ) {
- var attr;
- // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
- // use getAttribute instead to test this case
- return elem.nodeName.toLowerCase() === "input" &&
- elem.type === "text" &&
- ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type );
- },
-
- // Position-in-collection
- "first": createPositionalPseudo(function() {
- return [ 0 ];
- }),
-
- "last": createPositionalPseudo(function( matchIndexes, length ) {
- return [ length - 1 ];
- }),
-
- "eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
- return [ argument < 0 ? argument + length : argument ];
- }),
-
- "even": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 0;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "odd": createPositionalPseudo(function( matchIndexes, length ) {
- var i = 1;
- for ( ; i < length; i += 2 ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; --i >= 0; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- }),
-
- "gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
- var i = argument < 0 ? argument + length : argument;
- for ( ; ++i < length; ) {
- matchIndexes.push( i );
- }
- return matchIndexes;
- })
- }
-};
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
- Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
- Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-function tokenize( selector, parseOnly ) {
- var matched, match, tokens, type,
- soFar, groups, preFilters,
- cached = tokenCache[ selector + " " ];
-
- if ( cached ) {
- return parseOnly ? 0 : cached.slice( 0 );
- }
-
- soFar = selector;
- groups = [];
- preFilters = Expr.preFilter;
-
- while ( soFar ) {
-
- // Comma and first run
- if ( !matched || (match = rcomma.exec( soFar )) ) {
- if ( match ) {
- // Don't consume trailing commas as valid
- soFar = soFar.slice( match[0].length ) || soFar;
- }
- groups.push( tokens = [] );
- }
-
- matched = false;
-
- // Combinators
- if ( (match = rcombinators.exec( soFar )) ) {
- matched = match.shift();
- tokens.push( {
- value: matched,
- // Cast descendant combinators to space
- type: match[0].replace( rtrim, " " )
- } );
- soFar = soFar.slice( matched.length );
- }
-
- // Filters
- for ( type in Expr.filter ) {
- if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
- (match = preFilters[ type ]( match ))) ) {
- matched = match.shift();
- tokens.push( {
- value: matched,
- type: type,
- matches: match
- } );
- soFar = soFar.slice( matched.length );
- }
- }
-
- if ( !matched ) {
- break;
- }
- }
-
- // Return the length of the invalid excess
- // if we're just parsing
- // Otherwise, throw an error or return tokens
- return parseOnly ?
- soFar.length :
- soFar ?
- Sizzle.error( selector ) :
- // Cache the tokens
- tokenCache( selector, groups ).slice( 0 );
-}
-
-function toSelector( tokens ) {
- var i = 0,
- len = tokens.length,
- selector = "";
- for ( ; i < len; i++ ) {
- selector += tokens[i].value;
- }
- return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
- var dir = combinator.dir,
- checkNonElements = base && dir === "parentNode",
- doneName = done++;
-
- return combinator.first ?
- // Check against closest ancestor/preceding element
- function( elem, context, xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- return matcher( elem, context, xml );
- }
- }
- } :
-
- // Check against all ancestor/preceding elements
- function( elem, context, xml ) {
- var data, cache, outerCache,
- dirkey = dirruns + " " + doneName;
-
- // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching
- if ( xml ) {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- if ( matcher( elem, context, xml ) ) {
- return true;
- }
- }
- }
- } else {
- while ( (elem = elem[ dir ]) ) {
- if ( elem.nodeType === 1 || checkNonElements ) {
- outerCache = elem[ expando ] || (elem[ expando ] = {});
- if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {
- if ( (data = cache[1]) === true || data === cachedruns ) {
- return data === true;
- }
- } else {
- cache = outerCache[ dir ] = [ dirkey ];
- cache[1] = matcher( elem, context, xml ) || cachedruns;
- if ( cache[1] === true ) {
- return true;
- }
- }
- }
- }
- }
- };
-}
-
-function elementMatcher( matchers ) {
- return matchers.length > 1 ?
- function( elem, context, xml ) {
- var i = matchers.length;
- while ( i-- ) {
- if ( !matchers[i]( elem, context, xml ) ) {
- return false;
- }
- }
- return true;
- } :
- matchers[0];
-}
-
-function condense( unmatched, map, filter, context, xml ) {
- var elem,
- newUnmatched = [],
- i = 0,
- len = unmatched.length,
- mapped = map != null;
-
- for ( ; i < len; i++ ) {
- if ( (elem = unmatched[i]) ) {
- if ( !filter || filter( elem, context, xml ) ) {
- newUnmatched.push( elem );
- if ( mapped ) {
- map.push( i );
- }
- }
- }
- }
-
- return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
- if ( postFilter && !postFilter[ expando ] ) {
- postFilter = setMatcher( postFilter );
- }
- if ( postFinder && !postFinder[ expando ] ) {
- postFinder = setMatcher( postFinder, postSelector );
- }
- return markFunction(function( seed, results, context, xml ) {
- var temp, i, elem,
- preMap = [],
- postMap = [],
- preexisting = results.length,
-
- // Get initial elements from seed or context
- elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
- // Prefilter to get matcher input, preserving a map for seed-results synchronization
- matcherIn = preFilter && ( seed || !selector ) ?
- condense( elems, preMap, preFilter, context, xml ) :
- elems,
-
- matcherOut = matcher ?
- // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
- postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
- // ...intermediate processing is necessary
- [] :
-
- // ...otherwise use results directly
- results :
- matcherIn;
-
- // Find primary matches
- if ( matcher ) {
- matcher( matcherIn, matcherOut, context, xml );
- }
-
- // Apply postFilter
- if ( postFilter ) {
- temp = condense( matcherOut, postMap );
- postFilter( temp, [], context, xml );
-
- // Un-match failing elements by moving them back to matcherIn
- i = temp.length;
- while ( i-- ) {
- if ( (elem = temp[i]) ) {
- matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
- }
- }
- }
-
- if ( seed ) {
- if ( postFinder || preFilter ) {
- if ( postFinder ) {
- // Get the final matcherOut by condensing this intermediate into postFinder contexts
- temp = [];
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) ) {
- // Restore matcherIn since elem is not yet a final match
- temp.push( (matcherIn[i] = elem) );
- }
- }
- postFinder( null, (matcherOut = []), temp, xml );
- }
-
- // Move matched elements from seed to results to keep them synchronized
- i = matcherOut.length;
- while ( i-- ) {
- if ( (elem = matcherOut[i]) &&
- (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
-
- seed[temp] = !(results[temp] = elem);
- }
- }
- }
-
- // Add elements to results, through postFinder if defined
- } else {
- matcherOut = condense(
- matcherOut === results ?
- matcherOut.splice( preexisting, matcherOut.length ) :
- matcherOut
- );
- if ( postFinder ) {
- postFinder( null, results, matcherOut, xml );
- } else {
- push.apply( results, matcherOut );
- }
- }
- });
-}
-
-function matcherFromTokens( tokens ) {
- var checkContext, matcher, j,
- len = tokens.length,
- leadingRelative = Expr.relative[ tokens[0].type ],
- implicitRelative = leadingRelative || Expr.relative[" "],
- i = leadingRelative ? 1 : 0,
-
- // The foundational matcher ensures that elements are reachable from top-level context(s)
- matchContext = addCombinator( function( elem ) {
- return elem === checkContext;
- }, implicitRelative, true ),
- matchAnyContext = addCombinator( function( elem ) {
- return indexOf.call( checkContext, elem ) > -1;
- }, implicitRelative, true ),
- matchers = [ function( elem, context, xml ) {
- return ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
- (checkContext = context).nodeType ?
- matchContext( elem, context, xml ) :
- matchAnyContext( elem, context, xml ) );
- } ];
-
- for ( ; i < len; i++ ) {
- if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
- matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
- } else {
- matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
- // Return special upon seeing a positional matcher
- if ( matcher[ expando ] ) {
- // Find the next relative operator (if any) for proper handling
- j = ++i;
- for ( ; j < len; j++ ) {
- if ( Expr.relative[ tokens[j].type ] ) {
- break;
- }
- }
- return setMatcher(
- i > 1 && elementMatcher( matchers ),
- i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ),
- matcher,
- i < j && matcherFromTokens( tokens.slice( i, j ) ),
- j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
- j < len && toSelector( tokens )
- );
- }
- matchers.push( matcher );
- }
- }
-
- return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
- // A counter to specify which element is currently being matched
- var matcherCachedRuns = 0,
- bySet = setMatchers.length > 0,
- byElement = elementMatchers.length > 0,
- superMatcher = function( seed, context, xml, results, expandContext ) {
- var elem, j, matcher,
- setMatched = [],
- matchedCount = 0,
- i = "0",
- unmatched = seed && [],
- outermost = expandContext != null,
- contextBackup = outermostContext,
- // We must always have either seed elements or context
- elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ),
- // Use integer dirruns iff this is the outermost matcher
- dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1);
-
- if ( outermost ) {
- outermostContext = context !== document && context;
- cachedruns = matcherCachedRuns;
- }
-
- // Add elements passing elementMatchers directly to results
- // Keep `i` a string if there are no elements so `matchedCount` will be "00" below
- for ( ; (elem = elems[i]) != null; i++ ) {
- if ( byElement && elem ) {
- j = 0;
- while ( (matcher = elementMatchers[j++]) ) {
- if ( matcher( elem, context, xml ) ) {
- results.push( elem );
- break;
- }
- }
- if ( outermost ) {
- dirruns = dirrunsUnique;
- cachedruns = ++matcherCachedRuns;
- }
- }
-
- // Track unmatched elements for set filters
- if ( bySet ) {
- // They will have gone through all possible matchers
- if ( (elem = !matcher && elem) ) {
- matchedCount--;
- }
-
- // Lengthen the array for every element, matched or not
- if ( seed ) {
- unmatched.push( elem );
- }
- }
- }
-
- // Apply set filters to unmatched elements
- matchedCount += i;
- if ( bySet && i !== matchedCount ) {
- j = 0;
- while ( (matcher = setMatchers[j++]) ) {
- matcher( unmatched, setMatched, context, xml );
- }
-
- if ( seed ) {
- // Reintegrate element matches to eliminate the need for sorting
- if ( matchedCount > 0 ) {
- while ( i-- ) {
- if ( !(unmatched[i] || setMatched[i]) ) {
- setMatched[i] = pop.call( results );
- }
- }
- }
-
- // Discard index placeholder values to get only actual matches
- setMatched = condense( setMatched );
- }
-
- // Add matches to results
- push.apply( results, setMatched );
-
- // Seedless set matches succeeding multiple successful matchers stipulate sorting
- if ( outermost && !seed && setMatched.length > 0 &&
- ( matchedCount + setMatchers.length ) > 1 ) {
-
- Sizzle.uniqueSort( results );
- }
- }
-
- // Override manipulation of globals by nested matchers
- if ( outermost ) {
- dirruns = dirrunsUnique;
- outermostContext = contextBackup;
- }
-
- return unmatched;
- };
-
- return bySet ?
- markFunction( superMatcher ) :
- superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
- var i,
- setMatchers = [],
- elementMatchers = [],
- cached = compilerCache[ selector + " " ];
-
- if ( !cached ) {
- // Generate a function of recursive functions that can be used to check each element
- if ( !group ) {
- group = tokenize( selector );
- }
- i = group.length;
- while ( i-- ) {
- cached = matcherFromTokens( group[i] );
- if ( cached[ expando ] ) {
- setMatchers.push( cached );
- } else {
- elementMatchers.push( cached );
- }
- }
-
- // Cache the compiled function
- cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
- }
- return cached;
-};
-
-function multipleContexts( selector, contexts, results ) {
- var i = 0,
- len = contexts.length;
- for ( ; i < len; i++ ) {
- Sizzle( selector, contexts[i], results );
- }
- return results;
-}
-
-function select( selector, context, results, seed ) {
- var i, tokens, token, type, find,
- match = tokenize( selector );
-
- if ( !seed ) {
- // Try to minimize operations if there is only one group
- if ( match.length === 1 ) {
-
- // Take a shortcut and set the context if the root selector is an ID
- tokens = match[0] = match[0].slice( 0 );
- if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
- context.nodeType === 9 && !documentIsXML &&
- Expr.relative[ tokens[1].type ] ) {
-
- context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0];
- if ( !context ) {
- return results;
- }
-
- selector = selector.slice( tokens.shift().value.length );
- }
-
- // Fetch a seed set for right-to-left matching
- i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
- while ( i-- ) {
- token = tokens[i];
-
- // Abort if we hit a combinator
- if ( Expr.relative[ (type = token.type) ] ) {
- break;
- }
- if ( (find = Expr.find[ type ]) ) {
- // Search, expanding context for leading sibling combinators
- if ( (seed = find(
- token.matches[0].replace( runescape, funescape ),
- rsibling.test( tokens[0].type ) && context.parentNode || context
- )) ) {
-
- // If seed is empty or no tokens remain, we can return early
- tokens.splice( i, 1 );
- selector = seed.length && toSelector( tokens );
- if ( !selector ) {
- push.apply( results, slice.call( seed, 0 ) );
- return results;
- }
-
- break;
- }
- }
- }
- }
- }
-
- // Compile and execute a filtering function
- // Provide `match` to avoid retokenization if we modified the selector above
- compile( selector, match )(
- seed,
- context,
- documentIsXML,
- results,
- rsibling.test( selector )
- );
- return results;
-}
-
-// Deprecated
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Easy API for creating new setFilters
-function setFilters() {}
-Expr.filters = setFilters.prototype = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-// Initialize with the default document
-setDocument();
-
-// Override sizzle attribute retrieval
-Sizzle.attr = jQuery.attr;
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.pseudos;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})( window );
-var runtil = /Until$/,
- rparentsprev = /^(?:parents|prev(?:Until|All))/,
- isSimple = /^.[^:#\[\.,]*$/,
- rneedsContext = jQuery.expr.match.needsContext,
- // methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.fn.extend({
- find: function( selector ) {
- var i, ret, self,
- len = this.length;
-
- if ( typeof selector !== "string" ) {
- self = this;
- return this.pushStack( jQuery( selector ).filter(function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- }) );
- }
-
- ret = [];
- for ( i = 0; i < len; i++ ) {
- jQuery.find( selector, this[ i ], ret );
- }
-
- // Needed because $( selector, context ) becomes $( context ).find( selector )
- ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
- ret.selector = ( this.selector ? this.selector + " " : "" ) + selector;
- return ret;
- },
-
- has: function( target ) {
- var i,
- targets = jQuery( target, this ),
- len = targets.length;
-
- return this.filter(function() {
- for ( i = 0; i < len; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
-
- not: function( selector ) {
- return this.pushStack( winnow(this, selector, false) );
- },
-
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector, true) );
- },
-
- is: function( selector ) {
- return !!selector && (
- typeof selector === "string" ?
- // If this is a positional/relative selector, check membership in the returned set
- // so $("p:first").is("p:last") won't return true for a doc with two "p".
- rneedsContext.test( selector ) ?
- jQuery( selector, this.context ).index( this[0] ) >= 0 :
- jQuery.filter( selector, this ).length > 0 :
- this.filter( selector ).length > 0 );
- },
-
- closest: function( selectors, context ) {
- var cur,
- i = 0,
- l = this.length,
- ret = [],
- pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
- jQuery( selectors, context || this.context ) :
- 0;
-
- for ( ; i < l; i++ ) {
- cur = this[i];
-
- while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {
- if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
- ret.push( cur );
- break;
- }
- cur = cur.parentNode;
- }
- }
-
- return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1;
- }
-
- // index in selector
- if ( typeof elem === "string" ) {
- return jQuery.inArray( this[0], jQuery( elem ) );
- }
-
- // Locate the position of the desired element
- return jQuery.inArray(
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[0] : elem, this );
- },
-
- add: function( selector, context ) {
- var set = typeof selector === "string" ?
- jQuery( selector, context ) :
- jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
- all = jQuery.merge( this.get(), set );
-
- return this.pushStack( jQuery.unique(all) );
- },
-
- addBack: function( selector ) {
- return this.add( selector == null ?
- this.prevObject : this.prevObject.filter(selector)
- );
- }
-});
-
-jQuery.fn.andSelf = jQuery.fn.addBack;
-
-function sibling( cur, dir ) {
- do {
- cur = cur[ dir ];
- } while ( cur && cur.nodeType !== 1 );
-
- return cur;
-}
-
-jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return jQuery.dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return sibling( elem, "nextSibling" );
- },
- prev: function( elem ) {
- return sibling( elem, "previousSibling" );
- },
- nextAll: function( elem ) {
- return jQuery.dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return jQuery.dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem );
- },
- children: function( elem ) {
- return jQuery.sibling( elem.firstChild );
- },
- contents: function( elem ) {
- return jQuery.nodeName( elem, "iframe" ) ?
- elem.contentDocument || elem.contentWindow.document :
- jQuery.merge( [], elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until );
-
- if ( !runtil.test( name ) ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- ret = jQuery.filter( selector, ret );
- }
-
- ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
- if ( this.length > 1 && rparentsprev.test( name ) ) {
- ret = ret.reverse();
- }
-
- return this.pushStack( ret );
- };
-});
-
-jQuery.extend({
- filter: function( expr, elems, not ) {
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 ?
- jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
- jQuery.find.matches(expr, elems);
- },
-
- dir: function( elem, dir, until ) {
- var matched = [],
- cur = elem[ dir ];
-
- while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
- if ( cur.nodeType === 1 ) {
- matched.push( cur );
- }
- cur = cur[dir];
- }
- return matched;
- },
-
- sibling: function( n, elem ) {
- var r = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- r.push( n );
- }
- }
-
- return r;
- }
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
-
- // Can't pass null or undefined to indexOf in Firefox 4
- // Set to 0 to skip string check
- qualifier = qualifier || 0;
-
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep(elements, function( elem, i ) {
- var retVal = !!qualifier.call( elem, i, elem );
- return retVal === keep;
- });
-
- } else if ( qualifier.nodeType ) {
- return jQuery.grep(elements, function( elem ) {
- return ( elem === qualifier ) === keep;
- });
-
- } else if ( typeof qualifier === "string" ) {
- var filtered = jQuery.grep(elements, function( elem ) {
- return elem.nodeType === 1;
- });
-
- if ( isSimple.test( qualifier ) ) {
- return jQuery.filter(qualifier, filtered, !keep);
- } else {
- qualifier = jQuery.filter( qualifier, filtered );
- }
- }
-
- return jQuery.grep(elements, function( elem ) {
- return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;
- });
-}
-function createSafeFragment( document ) {
- var list = nodeNames.split( "|" ),
- safeFrag = document.createDocumentFragment();
-
- if ( safeFrag.createElement ) {
- while ( list.length ) {
- safeFrag.createElement(
- list.pop()
- );
- }
- }
- return safeFrag;
-}
-
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" +
- "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",
- rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
- rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"),
- rleadingWhitespace = /^\s+/,
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,
- rtagName = /<([\w:]+)/,
- rtbody = /<tbody/i,
- rhtml = /<|&#?\w+;/,
- rnoInnerhtml = /<(?:script|style|link)/i,
- manipulation_rcheckableType = /^(?:checkbox|radio)$/i,
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptType = /^$|\/(?:java|ecma)script/i,
- rscriptTypeMasked = /^true\/(.*)/,
- rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
-
- // We have to close these tags to support XHTML (#13200)
- wrapMap = {
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
- legend: [ 1, "<fieldset>", "</fieldset>" ],
- area: [ 1, "<map>", "</map>" ],
- param: [ 1, "<object>", "</object>" ],
- thead: [ 1, "<table>", "</table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
- // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
- // unless wrapped in a div with non-breaking characters in front of it.
- _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ]
- },
- safeFragment = createSafeFragment( document ),
- fragmentDiv = safeFragment.appendChild( document.createElement("div") );
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-jQuery.fn.extend({
- text: function( value ) {
- return jQuery.access( this, function( value ) {
- return value === undefined ?
- jQuery.text( this ) :
- this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );
- }, null, value, arguments.length );
- },
-
- wrapAll: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapAll( html.call(this, i) );
- });
- }
-
- if ( this[0] ) {
- // The elements to wrap the target around
- var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
- if ( this[0].parentNode ) {
- wrap.insertBefore( this[0] );
- }
-
- wrap.map(function() {
- var elem = this;
-
- while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
- elem = elem.firstChild;
- }
-
- return elem;
- }).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapInner( html.call(this, i) );
- });
- }
-
- return this.each(function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- });
- },
-
- wrap: function( html ) {
- var isFunction = jQuery.isFunction( html );
-
- return this.each(function(i) {
- jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html );
- });
- },
-
- unwrap: function() {
- return this.parent().each(function() {
- if ( !jQuery.nodeName( this, "body" ) ) {
- jQuery( this ).replaceWith( this.childNodes );
- }
- }).end();
- },
-
- append: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- this.appendChild( elem );
- }
- });
- },
-
- prepend: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
- this.insertBefore( elem, this.firstChild );
- }
- });
- },
-
- before: function() {
- return this.domManip( arguments, false, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this );
- }
- });
- },
-
- after: function() {
- return this.domManip( arguments, false, function( elem ) {
- if ( this.parentNode ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- }
- });
- },
-
- // keepData is for internal use only--do not document
- remove: function( selector, keepData ) {
- var elem,
- i = 0;
-
- for ( ; (elem = this[i]) != null; i++ ) {
- if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem ) );
- }
-
- if ( elem.parentNode ) {
- if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {
- setGlobalEval( getAll( elem, "script" ) );
- }
- elem.parentNode.removeChild( elem );
- }
- }
- }
-
- return this;
- },
-
- empty: function() {
- var elem,
- i = 0;
-
- for ( ; (elem = this[i]) != null; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- }
-
- // Remove any remaining nodes
- while ( elem.firstChild ) {
- elem.removeChild( elem.firstChild );
- }
-
- // If this is a select, ensure that it displays empty (#12336)
- // Support: IE<9
- if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
- elem.options.length = 0;
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map( function () {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- });
- },
-
- html: function( value ) {
- return jQuery.access( this, function( value ) {
- var elem = this[0] || {},
- i = 0,
- l = this.length;
-
- if ( value === undefined ) {
- return elem.nodeType === 1 ?
- elem.innerHTML.replace( rinlinejQuery, "" ) :
- undefined;
- }
-
- // See if we can take a shortcut and just use innerHTML
- if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
- ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) &&
- ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
- !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) {
-
- value = value.replace( rxhtmlTag, "<$1></$2>" );
-
- try {
- for (; i < l; i++ ) {
- // Remove element nodes and prevent memory leaks
- elem = this[i] || {};
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( getAll( elem, false ) );
- elem.innerHTML = value;
- }
- }
-
- elem = 0;
-
- // If using innerHTML throws an exception, use the fallback method
- } catch(e) {}
- }
-
- if ( elem ) {
- this.empty().append( value );
- }
- }, null, value, arguments.length );
- },
-
- replaceWith: function( value ) {
- var isFunc = jQuery.isFunction( value );
-
- // Make sure that the elements are removed from the DOM before they are inserted
- // this can help fix replacing a parent with child elements
- if ( !isFunc && typeof value !== "string" ) {
- value = jQuery( value ).not( this ).detach();
- }
-
- return this.domManip( [ value ], true, function( elem ) {
- var next = this.nextSibling,
- parent = this.parentNode;
-
- if ( parent ) {
- jQuery( this ).remove();
- parent.insertBefore( elem, next );
- }
- });
- },
-
- detach: function( selector ) {
- return this.remove( selector, true );
- },
-
- domManip: function( args, table, callback ) {
-
- // Flatten any nested arrays
- args = core_concat.apply( [], args );
-
- var first, node, hasScripts,
- scripts, doc, fragment,
- i = 0,
- l = this.length,
- set = this,
- iNoClone = l - 1,
- value = args[0],
- isFunction = jQuery.isFunction( value );
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) {
- return this.each(function( index ) {
- var self = set.eq( index );
- if ( isFunction ) {
- args[0] = value.call( this, index, table ? self.html() : undefined );
- }
- self.domManip( args, table, callback );
- });
- }
-
- if ( l ) {
- fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
- first = fragment.firstChild;
-
- if ( fragment.childNodes.length === 1 ) {
- fragment = first;
- }
-
- if ( first ) {
- table = table && jQuery.nodeName( first, "tr" );
- scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
- hasScripts = scripts.length;
-
- // Use the original fragment for the last item instead of the first because it can end up
- // being emptied incorrectly in certain situations (#8070).
- for ( ; i < l; i++ ) {
- node = fragment;
-
- if ( i !== iNoClone ) {
- node = jQuery.clone( node, true, true );
-
- // Keep references to cloned scripts for later restoration
- if ( hasScripts ) {
- jQuery.merge( scripts, getAll( node, "script" ) );
- }
- }
-
- callback.call(
- table && jQuery.nodeName( this[i], "table" ) ?
- findOrAppend( this[i], "tbody" ) :
- this[i],
- node,
- i
- );
- }
-
- if ( hasScripts ) {
- doc = scripts[ scripts.length - 1 ].ownerDocument;
-
- // Reenable scripts
- jQuery.map( scripts, restoreScript );
-
- // Evaluate executable scripts on first document insertion
- for ( i = 0; i < hasScripts; i++ ) {
- node = scripts[ i ];
- if ( rscriptType.test( node.type || "" ) &&
- !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) {
-
- if ( node.src ) {
- // Hope ajax is available...
- jQuery.ajax({
- url: node.src,
- type: "GET",
- dataType: "script",
- async: false,
- global: false,
- "throws": true
- });
- } else {
- jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) );
- }
- }
- }
- }
-
- // Fix #11809: Avoid leaking memory
- fragment = first = null;
- }
- }
-
- return this;
- }
-});
-
-function findOrAppend( elem, tag ) {
- return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
- var attr = elem.getAttributeNode("type");
- elem.type = ( attr && attr.specified ) + "/" + elem.type;
- return elem;
-}
-function restoreScript( elem ) {
- var match = rscriptTypeMasked.exec( elem.type );
- if ( match ) {
- elem.type = match[1];
- } else {
- elem.removeAttribute("type");
- }
- return elem;
-}
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
- var elem,
- i = 0;
- for ( ; (elem = elems[i]) != null; i++ ) {
- jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) );
- }
-}
-
-function cloneCopyEvent( src, dest ) {
-
- if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
- return;
- }
-
- var type, i, l,
- oldData = jQuery._data( src ),
- curData = jQuery._data( dest, oldData ),
- events = oldData.events;
-
- if ( events ) {
- delete curData.handle;
- curData.events = {};
-
- for ( type in events ) {
- for ( i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type, events[ type ][ i ] );
- }
- }
- }
-
- // make the cloned public data object a copy from the original
- if ( curData.data ) {
- curData.data = jQuery.extend( {}, curData.data );
- }
-}
-
-function fixCloneNodeIssues( src, dest ) {
- var nodeName, e, data;
-
- // We do not need to do anything for non-Elements
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- nodeName = dest.nodeName.toLowerCase();
-
- // IE6-8 copies events bound via attachEvent when using cloneNode.
- if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {
- data = jQuery._data( dest );
-
- for ( e in data.events ) {
- jQuery.removeEvent( dest, e, data.handle );
- }
-
- // Event data gets referenced instead of copied if the expando gets copied too
- dest.removeAttribute( jQuery.expando );
- }
-
- // IE blanks contents when cloning scripts, and tries to evaluate newly-set text
- if ( nodeName === "script" && dest.text !== src.text ) {
- disableScript( dest ).text = src.text;
- restoreScript( dest );
-
- // IE6-10 improperly clones children of object elements using classid.
- // IE10 throws NoModificationAllowedError if parent is null, #12132.
- } else if ( nodeName === "object" ) {
- if ( dest.parentNode ) {
- dest.outerHTML = src.outerHTML;
- }
-
- // This path appears unavoidable for IE9. When cloning an object
- // element in IE9, the outerHTML strategy above is not sufficient.
- // If the src has innerHTML and the destination does not,
- // copy the src.innerHTML into the dest.innerHTML. #10324
- if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {
- dest.innerHTML = src.innerHTML;
- }
-
- } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) {
- // IE6-8 fails to persist the checked state of a cloned checkbox
- // or radio button. Worse, IE6-7 fail to give the cloned element
- // a checked appearance if the defaultChecked value isn't also set
-
- dest.defaultChecked = dest.checked = src.checked;
-
- // IE6-7 get confused and end up setting the value of a cloned
- // checkbox/radio button to an empty string instead of "on"
- if ( dest.value !== src.value ) {
- dest.value = src.value;
- }
-
- // IE6-8 fails to return the selected option to the default selected
- // state when cloning options
- } else if ( nodeName === "option" ) {
- dest.defaultSelected = dest.selected = src.defaultSelected;
-
- // IE6-8 fails to set the defaultValue to the correct value when
- // cloning other types of input fields
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
-}
-
-jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var elems,
- i = 0,
- ret = [],
- insert = jQuery( selector ),
- last = insert.length - 1;
-
- for ( ; i <= last; i++ ) {
- elems = i === last ? this : this.clone(true);
- jQuery( insert[i] )[ original ]( elems );
-
- // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
- core_push.apply( ret, elems.get() );
- }
-
- return this.pushStack( ret );
- };
-});
-
-function getAll( context, tag ) {
- var elems, elem,
- i = 0,
- found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) :
- typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) :
- undefined;
-
- if ( !found ) {
- for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {
- if ( !tag || jQuery.nodeName( elem, tag ) ) {
- found.push( elem );
- } else {
- jQuery.merge( found, getAll( elem, tag ) );
- }
- }
- }
-
- return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
- jQuery.merge( [ context ], found ) :
- found;
-}
-
-// Used in buildFragment, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
- if ( manipulation_rcheckableType.test( elem.type ) ) {
- elem.defaultChecked = elem.checked;
- }
-}
-
-jQuery.extend({
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var destElements, node, clone, i, srcElements,
- inPage = jQuery.contains( elem.ownerDocument, elem );
-
- if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
- clone = elem.cloneNode( true );
-
- // IE<=8 does not properly clone detached, unknown element nodes
- } else {
- fragmentDiv.innerHTML = elem.outerHTML;
- fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
- }
-
- if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
- (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
-
- // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
- destElements = getAll( clone );
- srcElements = getAll( elem );
-
- // Fix all IE cloning issues
- for ( i = 0; (node = srcElements[i]) != null; ++i ) {
- // Ensure that the destination node is not null; Fixes #9587
- if ( destElements[i] ) {
- fixCloneNodeIssues( node, destElements[i] );
- }
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- if ( deepDataAndEvents ) {
- srcElements = srcElements || getAll( elem );
- destElements = destElements || getAll( clone );
-
- for ( i = 0; (node = srcElements[i]) != null; i++ ) {
- cloneCopyEvent( node, destElements[i] );
- }
- } else {
- cloneCopyEvent( elem, clone );
- }
- }
-
- // Preserve script evaluation history
- destElements = getAll( clone, "script" );
- if ( destElements.length > 0 ) {
- setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
- }
-
- destElements = srcElements = node = null;
-
- // Return the cloned set
- return clone;
- },
-
- buildFragment: function( elems, context, scripts, selection ) {
- var j, elem, contains,
- tmp, tag, tbody, wrap,
- l = elems.length,
-
- // Ensure a safe fragment
- safe = createSafeFragment( context ),
-
- nodes = [],
- i = 0;
-
- for ( ; i < l; i++ ) {
- elem = elems[ i ];
-
- if ( elem || elem === 0 ) {
-
- // Add nodes directly
- if ( jQuery.type( elem ) === "object" ) {
- jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
- // Convert non-html into a text node
- } else if ( !rhtml.test( elem ) ) {
- nodes.push( context.createTextNode( elem ) );
-
- // Convert html into DOM nodes
- } else {
- tmp = tmp || safe.appendChild( context.createElement("div") );
-
- // Deserialize a standard representation
- tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase();
- wrap = wrapMap[ tag ] || wrapMap._default;
-
- tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1></$2>" ) + wrap[2];
-
- // Descend through wrappers to the right content
- j = wrap[0];
- while ( j-- ) {
- tmp = tmp.lastChild;
- }
-
- // Manually add leading whitespace removed by IE
- if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
- nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );
- }
-
- // Remove IE's autoinserted <tbody> from table fragments
- if ( !jQuery.support.tbody ) {
-
- // String was a <table>, *may* have spurious <tbody>
- elem = tag === "table" && !rtbody.test( elem ) ?
- tmp.firstChild :
-
- // String was a bare <thead> or <tfoot>
- wrap[1] === "<table>" && !rtbody.test( elem ) ?
- tmp :
- 0;
-
- j = elem && elem.childNodes.length;
- while ( j-- ) {
- if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) {
- elem.removeChild( tbody );
- }
- }
- }
-
- jQuery.merge( nodes, tmp.childNodes );
-
- // Fix #12392 for WebKit and IE > 9
- tmp.textContent = "";
-
- // Fix #12392 for oldIE
- while ( tmp.firstChild ) {
- tmp.removeChild( tmp.firstChild );
- }
-
- // Remember the top-level container for proper cleanup
- tmp = safe.lastChild;
- }
- }
- }
-
- // Fix #11356: Clear elements from fragment
- if ( tmp ) {
- safe.removeChild( tmp );
- }
-
- // Reset defaultChecked for any radios and checkboxes
- // about to be appended to the DOM in IE 6/7 (#8060)
- if ( !jQuery.support.appendChecked ) {
- jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
- }
-
- i = 0;
- while ( (elem = nodes[ i++ ]) ) {
-
- // #4087 - If origin and destination elements are the same, and this is
- // that element, do not do anything
- if ( selection && jQuery.inArray( elem, selection ) !== -1 ) {
- continue;
- }
-
- contains = jQuery.contains( elem.ownerDocument, elem );
-
- // Append to fragment
- tmp = getAll( safe.appendChild( elem ), "script" );
-
- // Preserve script evaluation history
- if ( contains ) {
- setGlobalEval( tmp );
- }
-
- // Capture executables
- if ( scripts ) {
- j = 0;
- while ( (elem = tmp[ j++ ]) ) {
- if ( rscriptType.test( elem.type || "" ) ) {
- scripts.push( elem );
- }
- }
- }
- }
-
- tmp = null;
-
- return safe;
- },
-
- cleanData: function( elems, /* internal */ acceptData ) {
- var elem, type, id, data,
- i = 0,
- internalKey = jQuery.expando,
- cache = jQuery.cache,
- deleteExpando = jQuery.support.deleteExpando,
- special = jQuery.event.special;
-
- for ( ; (elem = elems[i]) != null; i++ ) {
-
- if ( acceptData || jQuery.acceptData( elem ) ) {
-
- id = elem[ internalKey ];
- data = id && cache[ id ];
-
- if ( data ) {
- if ( data.events ) {
- for ( type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
- }
-
- // Remove cache only if it was not already removed by jQuery.event.remove
- if ( cache[ id ] ) {
-
- delete cache[ id ];
-
- // IE does not allow us to delete expando properties from nodes,
- // nor does it have a removeAttribute function on Document nodes;
- // we must handle all of these cases
- if ( deleteExpando ) {
- delete elem[ internalKey ];
-
- } else if ( typeof elem.removeAttribute !== core_strundefined ) {
- elem.removeAttribute( internalKey );
-
- } else {
- elem[ internalKey ] = null;
- }
-
- core_deletedIds.push( id );
- }
- }
- }
- }
- }
-});
-var iframe, getStyles, curCSS,
- ralpha = /alpha\([^)]*\)/i,
- ropacity = /opacity\s*=\s*([^)]*)/,
- rposition = /^(top|right|bottom|left)$/,
- // swappable if display is none or starts with table except "table", "table-cell", or "table-caption"
- // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
- rdisplayswap = /^(none|table(?!-c[ea]).+)/,
- rmargin = /^margin/,
- rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
- rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
- rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ),
- elemdisplay = { BODY: "block" },
-
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssNormalTransform = {
- letterSpacing: 0,
- fontWeight: 400
- },
-
- cssExpand = [ "Top", "Right", "Bottom", "Left" ],
- cssPrefixes = [ "Webkit", "O", "Moz", "ms" ];
-
-// return a css property mapped to a potentially vendor prefixed property
-function vendorPropName( style, name ) {
-
- // shortcut for names that are not vendor prefixed
- if ( name in style ) {
- return name;
- }
-
- // check for vendor prefixed names
- var capName = name.charAt(0).toUpperCase() + name.slice(1),
- origName = name,
- i = cssPrefixes.length;
-
- while ( i-- ) {
- name = cssPrefixes[ i ] + capName;
- if ( name in style ) {
- return name;
- }
- }
-
- return origName;
-}
-
-function isHidden( elem, el ) {
- // isHidden might be called from jQuery#filter function;
- // in that case, element will be second argument
- elem = el || elem;
- return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem );
-}
-
-function showHide( elements, show ) {
- var display, elem, hidden,
- values = [],
- index = 0,
- length = elements.length;
-
- for ( ; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
-
- values[ index ] = jQuery._data( elem, "olddisplay" );
- display = elem.style.display;
- if ( show ) {
- // Reset the inline display of this element to learn if it is
- // being hidden by cascaded rules or not
- if ( !values[ index ] && display === "none" ) {
- elem.style.display = "";
- }
-
- // Set elements which have been overridden with display: none
- // in a stylesheet to whatever the default browser style is
- // for such an element
- if ( elem.style.display === "" && isHidden( elem ) ) {
- values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );
- }
- } else {
-
- if ( !values[ index ] ) {
- hidden = isHidden( elem );
-
- if ( display && display !== "none" || !hidden ) {
- jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) );
- }
- }
- }
- }
-
- // Set the display of most of the elements in a second loop
- // to avoid the constant reflow
- for ( index = 0; index < length; index++ ) {
- elem = elements[ index ];
- if ( !elem.style ) {
- continue;
- }
- if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
- elem.style.display = show ? values[ index ] || "" : "none";
- }
- }
-
- return elements;
-}
-
-jQuery.fn.extend({
- css: function( name, value ) {
- return jQuery.access( this, function( elem, name, value ) {
- var len, styles,
- map = {},
- i = 0;
-
- if ( jQuery.isArray( name ) ) {
- styles = getStyles( elem );
- len = name.length;
-
- for ( ; i < len; i++ ) {
- map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
- }
-
- return map;
- }
-
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- }, name, value, arguments.length > 1 );
- },
- show: function() {
- return showHide( this, true );
- },
- hide: function() {
- return showHide( this );
- },
- toggle: function( state ) {
- var bool = typeof state === "boolean";
-
- return this.each(function() {
- if ( bool ? state : isHidden( this ) ) {
- jQuery( this ).show();
- } else {
- jQuery( this ).hide();
- }
- });
- }
-});
-
-jQuery.extend({
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity" );
- return ret === "" ? "1" : ret;
- }
- }
- }
- },
-
- // Exclude the following css properties to add px
- cssNumber: {
- "columnCount": true,
- "fillOpacity": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- // normalize float css property
- "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, hooks,
- origName = jQuery.camelCase( name ),
- style = elem.style;
-
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );
-
- // gets hook for the prefixed version
- // followed by the unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // convert relative number strings (+= or -=) to relative numbers. #7345
- if ( type === "string" && (ret = rrelNum.exec( value )) ) {
- value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that NaN and null values aren't set. See: #7116
- if ( value == null || type === "number" && isNaN( value ) ) {
- return;
- }
-
- // If a number was passed in, add 'px' to the (except for certain CSS properties)
- if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
- value += "px";
- }
-
- // Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
- // but it would mean to define eight (for every problematic property) identical functions
- if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {
- style[ name ] = "inherit";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {
-
- // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
- // Fixes bug #5509
- try {
- style[ name ] = value;
- } catch(e) {}
- }
-
- } else {
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra, styles ) {
- var num, val, hooks,
- origName = jQuery.camelCase( name );
-
- // Make sure that we're working with the right name
- name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );
-
- // gets hook for the prefixed version
- // followed by the unprefixed version
- hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks ) {
- val = hooks.get( elem, true, extra );
- }
-
- // Otherwise, if a way to get the computed value exists, use that
- if ( val === undefined ) {
- val = curCSS( elem, name, styles );
- }
-
- //convert "normal" to computed value
- if ( val === "normal" && name in cssNormalTransform ) {
- val = cssNormalTransform[ name ];
- }
-
- // Return, converting to number if forced or a qualifier was provided and val looks numeric
- if ( extra === "" || extra ) {
- num = parseFloat( val );
- return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;
- }
- return val;
- },
-
- // A method for quickly swapping in/out CSS properties to get correct calculations
- swap: function( elem, options, callback, args ) {
- var ret, name,
- old = {};
-
- // Remember the old values, and insert the new ones
- for ( name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- ret = callback.apply( elem, args || [] );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
-
- return ret;
- }
-});
-
-// NOTE: we've included the "window" in window.getComputedStyle
-// because jsdom on node.js will break without it.
-if ( window.getComputedStyle ) {
- getStyles = function( elem ) {
- return window.getComputedStyle( elem, null );
- };
-
- curCSS = function( elem, name, _computed ) {
- var width, minWidth, maxWidth,
- computed = _computed || getStyles( elem ),
-
- // getPropertyValue is only needed for .css('filter') in IE9, see #12537
- ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,
- style = elem.style;
-
- if ( computed ) {
-
- if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
- ret = jQuery.style( elem, name );
- }
-
- // A tribute to the "awesome hack by Dean Edwards"
- // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right
- // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels
- // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values
- if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {
-
- // Remember the original values
- width = style.width;
- minWidth = style.minWidth;
- maxWidth = style.maxWidth;
-
- // Put in the new values to get a computed value out
- style.minWidth = style.maxWidth = style.width = ret;
- ret = computed.width;
-
- // Revert the changed values
- style.width = width;
- style.minWidth = minWidth;
- style.maxWidth = maxWidth;
- }
- }
-
- return ret;
- };
-} else if ( document.documentElement.currentStyle ) {
- getStyles = function( elem ) {
- return elem.currentStyle;
- };
-
- curCSS = function( elem, name, _computed ) {
- var left, rs, rsLeft,
- computed = _computed || getStyles( elem ),
- ret = computed ? computed[ name ] : undefined,
- style = elem.style;
-
- // Avoid setting ret to empty string here
- // so we don't default to auto
- if ( ret == null && style && style[ name ] ) {
- ret = style[ name ];
- }
-
- // From the awesome hack by Dean Edwards
- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
- // If we're not dealing with a regular pixel number
- // but a number that has a weird ending, we need to convert it to pixels
- // but not position css attributes, as those are proportional to the parent element instead
- // and we can't measure the parent instead because it might trigger a "stacking dolls" problem
- if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
-
- // Remember the original values
- left = style.left;
- rs = elem.runtimeStyle;
- rsLeft = rs && rs.left;
-
- // Put in the new values to get a computed value out
- if ( rsLeft ) {
- rs.left = elem.currentStyle.left;
- }
- style.left = name === "fontSize" ? "1em" : ret;
- ret = style.pixelLeft + "px";
-
- // Revert the changed values
- style.left = left;
- if ( rsLeft ) {
- rs.left = rsLeft;
- }
- }
-
- return ret === "" ? "auto" : ret;
- };
-}
-
-function setPositiveNumber( elem, value, subtract ) {
- var matches = rnumsplit.exec( value );
- return matches ?
- // Guard against undefined "subtract", e.g., when used as in cssHooks
- Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
- value;
-}
-
-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
- var i = extra === ( isBorderBox ? "border" : "content" ) ?
- // If we already have the right measurement, avoid augmentation
- 4 :
- // Otherwise initialize for horizontal or vertical properties
- name === "width" ? 1 : 0,
-
- val = 0;
-
- for ( ; i < 4; i += 2 ) {
- // both box models exclude margin, so add it if we want it
- if ( extra === "margin" ) {
- val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
- }
-
- if ( isBorderBox ) {
- // border-box includes padding, so remove it if we want content
- if ( extra === "content" ) {
- val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
- }
-
- // at this point, extra isn't border nor margin, so remove border
- if ( extra !== "margin" ) {
- val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- } else {
- // at this point, extra isn't content, so add padding
- val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
- // at this point, extra isn't content nor padding, so add border
- if ( extra !== "padding" ) {
- val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
- }
- }
- }
-
- return val;
-}
-
-function getWidthOrHeight( elem, name, extra ) {
-
- // Start with offset property, which is equivalent to the border-box value
- var valueIsBorderBox = true,
- val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
- styles = getStyles( elem ),
- isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
- // some non-html elements return undefined for offsetWidth, so check for null/undefined
- // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
- // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
- if ( val <= 0 || val == null ) {
- // Fall back to computed then uncomputed css if necessary
- val = curCSS( elem, name, styles );
- if ( val < 0 || val == null ) {
- val = elem.style[ name ];
- }
-
- // Computed unit is not pixels. Stop here and return.
- if ( rnumnonpx.test(val) ) {
- return val;
- }
-
- // we need the check for style in case a browser which returns unreliable values
- // for getComputedStyle silently falls back to the reliable elem.style
- valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] );
-
- // Normalize "", auto, and prepare for extra
- val = parseFloat( val ) || 0;
- }
-
- // use the active box-sizing model to add/subtract irrelevant styles
- return ( val +
- augmentWidthOrHeight(
- elem,
- name,
- extra || ( isBorderBox ? "border" : "content" ),
- valueIsBorderBox,
- styles
- )
- ) + "px";
-}
-
-// Try to determine the default display value of an element
-function css_defaultDisplay( nodeName ) {
- var doc = document,
- display = elemdisplay[ nodeName ];
-
- if ( !display ) {
- display = actualDisplay( nodeName, doc );
-
- // If the simple way fails, read from inside an iframe
- if ( display === "none" || !display ) {
- // Use the already-created iframe if possible
- iframe = ( iframe ||
- jQuery("<iframe frameborder='0' width='0' height='0'/>")
- .css( "cssText", "display:block !important" )
- ).appendTo( doc.documentElement );
-
- // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
- doc = ( iframe[0].contentWindow || iframe[0].contentDocument ).document;
- doc.write("<!doctype html><html><body>");
- doc.close();
-
- display = actualDisplay( nodeName, doc );
- iframe.detach();
- }
-
- // Store the correct default display
- elemdisplay[ nodeName ] = display;
- }
-
- return display;
-}
-
-// Called ONLY from within css_defaultDisplay
-function actualDisplay( name, doc ) {
- var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
- display = jQuery.css( elem[0], "display" );
- elem.remove();
- return display;
-}
-
-jQuery.each([ "height", "width" ], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- if ( computed ) {
- // certain elements can have dimension info if we invisibly show them
- // however, it must have a current display style that would benefit from this
- return elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, "display" ) ) ?
- jQuery.swap( elem, cssShow, function() {
- return getWidthOrHeight( elem, name, extra );
- }) :
- getWidthOrHeight( elem, name, extra );
- }
- },
-
- set: function( elem, value, extra ) {
- var styles = extra && getStyles( elem );
- return setPositiveNumber( elem, value, extra ?
- augmentWidthOrHeight(
- elem,
- name,
- extra,
- jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
- styles
- ) : 0
- );
- }
- };
-});
-
-if ( !jQuery.support.opacity ) {
- jQuery.cssHooks.opacity = {
- get: function( elem, computed ) {
- // IE uses filters for opacity
- return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
- ( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
- computed ? "1" : "";
- },
-
- set: function( elem, value ) {
- var style = elem.style,
- currentStyle = elem.currentStyle,
- opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
- filter = currentStyle && currentStyle.filter || style.filter || "";
-
- // IE has trouble with opacity if it does not have layout
- // Force it by setting the zoom level
- style.zoom = 1;
-
- // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
- // if value === "", then remove inline opacity #12685
- if ( ( value >= 1 || value === "" ) &&
- jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
- style.removeAttribute ) {
-
- // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
- // if "filter:" is present at all, clearType is disabled, we want to avoid this
- // style.removeAttribute is IE Only, but so apparently is this code path...
- style.removeAttribute( "filter" );
-
- // if there is no filter style applied in a css rule or unset inline opacity, we are done
- if ( value === "" || currentStyle && !currentStyle.filter ) {
- return;
- }
- }
-
- // otherwise, set new filter values
- style.filter = ralpha.test( filter ) ?
- filter.replace( ralpha, opacity ) :
- filter + " " + opacity;
- }
- };
-}
-
-// These hooks cannot be added until DOM ready because the support test
-// for it is not run until after DOM ready
-jQuery(function() {
- if ( !jQuery.support.reliableMarginRight ) {
- jQuery.cssHooks.marginRight = {
- get: function( elem, computed ) {
- if ( computed ) {
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // Work around by temporarily setting element display to inline-block
- return jQuery.swap( elem, { "display": "inline-block" },
- curCSS, [ elem, "marginRight" ] );
- }
- }
- };
- }
-
- // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
- // getComputedStyle returns percent when specified for top/left/bottom/right
- // rather than make the css module depend on the offset module, we just check for it here
- if ( !jQuery.support.pixelPosition && jQuery.fn.position ) {
- jQuery.each( [ "top", "left" ], function( i, prop ) {
- jQuery.cssHooks[ prop ] = {
- get: function( elem, computed ) {
- if ( computed ) {
- computed = curCSS( elem, prop );
- // if curCSS returns percentage, fallback to offset
- return rnumnonpx.test( computed ) ?
- jQuery( elem ).position()[ prop ] + "px" :
- computed;
- }
- }
- };
- });
- }
-
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.hidden = function( elem ) {
- // Support: Opera <= 12.12
- // Opera reports offsetWidths and offsetHeights less than zero on some elements
- return elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||
- (!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, "display" )) === "none");
- };
-
- jQuery.expr.filters.visible = function( elem ) {
- return !jQuery.expr.filters.hidden( elem );
- };
-}
-
-// These hooks are used by animate to expand properties
-jQuery.each({
- margin: "",
- padding: "",
- border: "Width"
-}, function( prefix, suffix ) {
- jQuery.cssHooks[ prefix + suffix ] = {
- expand: function( value ) {
- var i = 0,
- expanded = {},
-
- // assumes a single number if not a string
- parts = typeof value === "string" ? value.split(" ") : [ value ];
-
- for ( ; i < 4; i++ ) {
- expanded[ prefix + cssExpand[ i ] + suffix ] =
- parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
- }
-
- return expanded;
- }
- };
-
- if ( !rmargin.test( prefix ) ) {
- jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
- }
-});
-var r20 = /%20/g,
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
- rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-jQuery.fn.extend({
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
- serializeArray: function() {
- return this.map(function(){
- // Can add propHook for "elements" to filter or add form elements
- var elements = jQuery.prop( this, "elements" );
- return elements ? jQuery.makeArray( elements ) : this;
- })
- .filter(function(){
- var type = this.type;
- // Use .is(":disabled") so that fieldset[disabled] works
- return this.name && !jQuery( this ).is( ":disabled" ) &&
- rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
- ( this.checked || !manipulation_rcheckableType.test( type ) );
- })
- .map(function( i, elem ){
- var val = jQuery( this ).val();
-
- return val == null ?
- null :
- jQuery.isArray( val ) ?
- jQuery.map( val, function( val ){
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }) :
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }).get();
- }
-});
-
-//Serialize an array of form elements or a set of
-//key/values into a query string
-jQuery.param = function( a, traditional ) {
- var prefix,
- s = [],
- add = function( key, value ) {
- // If value is a function, invoke it and return its value
- value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
- s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
- };
-
- // Set traditional to true for jQuery <= 1.3.2 behavior.
- if ( traditional === undefined ) {
- traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- });
-
- } else {
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" ).replace( r20, "+" );
-};
-
-function buildParams( prefix, obj, traditional, add ) {
- var name;
-
- if ( jQuery.isArray( obj ) ) {
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
- // Item is non-scalar (array or object), encode its numeric index.
- buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
- }
- });
-
- } else if ( !traditional && jQuery.type( obj ) === "object" ) {
- // Serialize object item.
- for ( name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- return arguments.length > 0 ?
- this.on( name, null, data, fn ) :
- this.trigger( name );
- };
-});
-
-jQuery.fn.hover = function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-};
-var
- // Document location
- ajaxLocParts,
- ajaxLocation,
- ajax_nonce = jQuery.now(),
-
- ajax_rquery = /\?/,
- rhash = /#.*$/,
- rts = /([?&])_=[^&]*/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
- rurl = /^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,
-
- // Keep a copy of the old load method
- _load = jQuery.fn.load,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = "*/".concat("*");
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
- ajaxLocation = location.href;
-} catch( e ) {
- // Use the href attribute of an A element
- // since IE will modify it given document.location
- ajaxLocation = document.createElement( "a" );
- ajaxLocation.href = "";
- ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- var dataType,
- i = 0,
- dataTypes = dataTypeExpression.toLowerCase().match( core_rnotwhite ) || [];
-
- if ( jQuery.isFunction( func ) ) {
- // For each dataType in the dataTypeExpression
- while ( (dataType = dataTypes[i++]) ) {
- // Prepend if requested
- if ( dataType[0] === "+" ) {
- dataType = dataType.slice( 1 ) || "*";
- (structure[ dataType ] = structure[ dataType ] || []).unshift( func );
-
- // Otherwise append
- } else {
- (structure[ dataType ] = structure[ dataType ] || []).push( func );
- }
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
- var inspected = {},
- seekingTransport = ( structure === transports );
-
- function inspect( dataType ) {
- var selected;
- inspected[ dataType ] = true;
- jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
- var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
- if( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) {
- options.dataTypes.unshift( dataTypeOrTransport );
- inspect( dataTypeOrTransport );
- return false;
- } else if ( seekingTransport ) {
- return !( selected = dataTypeOrTransport );
- }
- });
- return selected;
- }
-
- return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var deep, key,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
- for ( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-
- return target;
-}
-
-jQuery.fn.load = function( url, params, callback ) {
- if ( typeof url !== "string" && _load ) {
- return _load.apply( this, arguments );
- }
-
- var selector, response, type,
- self = this,
- off = url.indexOf(" ");
-
- if ( off >= 0 ) {
- selector = url.slice( off, url.length );
- url = url.slice( 0, off );
- }
-
- // If it's a function
- if ( jQuery.isFunction( params ) ) {
-
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( params && typeof params === "object" ) {
- type = "POST";
- }
-
- // If we have elements to modify, make the request
- if ( self.length > 0 ) {
- jQuery.ajax({
- url: url,
-
- // if "type" variable is undefined, then "GET" method will be used
- type: type,
- dataType: "html",
- data: params
- }).done(function( responseText ) {
-
- // Save response for use in complete callback
- response = arguments;
-
- self.html( selector ?
-
- // If a selector was specified, locate the right elements in a dummy div
- // Exclude scripts to avoid IE 'Permission Denied' errors
- jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
- // Otherwise use the full result
- responseText );
-
- }).complete( callback && function( jqXHR, status ) {
- self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] );
- });
- }
-
- return this;
-};
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ){
- jQuery.fn[ type ] = function( fn ){
- return this.on( type, fn );
- };
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
- // shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- return jQuery.ajax({
- url: url,
- type: method,
- dataType: type,
- data: data,
- success: callback
- });
- };
-});
-
-jQuery.extend({
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {},
-
- ajaxSettings: {
- url: ajaxLocation,
- type: "GET",
- isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
- global: true,
- processData: true,
- async: true,
- contentType: "application/x-www-form-urlencoded; charset=UTF-8",
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- throws: false,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- "*": allTypes,
- text: "text/plain",
- html: "text/html",
- xml: "application/xml, text/xml",
- json: "application/json, text/javascript"
- },
-
- contents: {
- xml: /xml/,
- html: /html/,
- json: /json/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText"
- },
-
- // Data converters
- // Keys separate source (or catchall "*") and destination types with a single space
- converters: {
-
- // Convert anything to text
- "* text": window.String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": jQuery.parseJSON,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- url: true,
- context: true
- }
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- return settings ?
-
- // Building a settings object
- ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
- // Extending ajaxSettings
- ajaxExtend( jQuery.ajaxSettings, target );
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var // Cross-domain detection vars
- parts,
- // Loop variable
- i,
- // URL without anti-cache param
- cacheURL,
- // Response headers as string
- responseHeadersString,
- // timeout handle
- timeoutTimer,
-
- // To know if global events are to be dispatched
- fireGlobals,
-
- transport,
- // Response headers
- responseHeaders,
- // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
- // Callbacks context
- callbackContext = s.context || s,
- // Context for global events is callbackContext if it is a DOM node or jQuery collection
- globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ?
- jQuery( callbackContext ) :
- jQuery.event,
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery.Callbacks("once memory"),
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
- // The jqXHR state
- state = 0,
- // Default abort message
- strAbort = "canceled",
- // Fake xhr
- jqXHR = {
- readyState: 0,
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( state === 2 ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while ( (match = rheaders.exec( responseHeadersString )) ) {
- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match == null ? null : match;
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return state === 2 ? responseHeadersString : null;
- },
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- var lname = name.toLowerCase();
- if ( !state ) {
- name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( !state ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Status-dependent callbacks
- statusCode: function( map ) {
- var code;
- if ( map ) {
- if ( state < 2 ) {
- for ( code in map ) {
- // Lazy-add the new callback in a way that preserves old ones
- statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
- }
- } else {
- // Execute the appropriate callbacks
- jqXHR.always( map[ jqXHR.status ] );
- }
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- var finalText = statusText || strAbort;
- if ( transport ) {
- transport.abort( finalText );
- }
- done( 0, finalText );
- return this;
- }
- };
-
- // Attach deferreds
- deferred.promise( jqXHR ).complete = completeDeferred.add;
- jqXHR.success = jqXHR.done;
- jqXHR.error = jqXHR.fail;
-
- // Remove hash character (#7531: and string promotion)
- // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
- // Handle falsy url in the settings object (#10093: consistency with old signature)
- // We also use the url parameter if available
- s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
- // Alias method option to type as per ticket #12004
- s.type = options.method || options.type || s.method || s.type;
-
- // Extract dataTypes list
- s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( core_rnotwhite ) || [""];
-
- // A cross-domain request is in order when we have a protocol:host:port mismatch
- if ( s.crossDomain == null ) {
- parts = rurl.exec( s.url.toLowerCase() );
- s.crossDomain = !!( parts &&
- ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
- );
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefilter, stop there
- if ( state === 2 ) {
- return jqXHR;
- }
-
- // We can fire global events as of now if asked to
- fireGlobals = s.global;
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger("ajaxStart");
- }
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Save the URL in case we're toying with the If-Modified-Since
- // and/or If-None-Match header later on
- cacheURL = s.url;
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // If data is available, append data to url
- if ( s.data ) {
- cacheURL = ( s.url += ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Add anti-cache in url if needed
- if ( s.cache === false ) {
- s.url = rts.test( cacheURL ) ?
-
- // If there is already a '_' parameter, set its value
- cacheURL.replace( rts, "$1_=" + ajax_nonce++ ) :
-
- // Otherwise add one to the end
- cacheURL + ( ajax_rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ajax_nonce++;
- }
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- if ( jQuery.lastModified[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
- }
- if ( jQuery.etag[ cacheURL ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
- s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
- // Abort if not done already and return
- return jqXHR.abort();
- }
-
- // aborting is no longer a cancellation
- strAbort = "abort";
-
- // Install callbacks on deferreds
- for ( i in { success: 1, error: 1, complete: 1 } ) {
- jqXHR[ i ]( s[ i ] );
- }
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
-
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = setTimeout(function() {
- jqXHR.abort("timeout");
- }, s.timeout );
- }
-
- try {
- state = 1;
- transport.send( requestHeaders, done );
- } catch ( e ) {
- // Propagate exception as error if not done
- if ( state < 2 ) {
- done( -1, e );
- // Simply rethrow otherwise
- } else {
- throw e;
- }
- }
- }
-
- // Callback for when everything is done
- function done( status, nativeStatusText, responses, headers ) {
- var isSuccess, success, error, response, modified,
- statusText = nativeStatusText;
-
- // Called once
- if ( state === 2 ) {
- return;
- }
-
- // State is "done" now
- state = 2;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- // Get response data
- if ( responses ) {
- response = ajaxHandleResponses( s, jqXHR, responses );
- }
-
- // If successful, handle type chaining
- if ( status >= 200 && status < 300 || status === 304 ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- modified = jqXHR.getResponseHeader("Last-Modified");
- if ( modified ) {
- jQuery.lastModified[ cacheURL ] = modified;
- }
- modified = jqXHR.getResponseHeader("etag");
- if ( modified ) {
- jQuery.etag[ cacheURL ] = modified;
- }
- }
-
- // if no content
- if ( status === 204 ) {
- isSuccess = true;
- statusText = "nocontent";
-
- // if not modified
- } else if ( status === 304 ) {
- isSuccess = true;
- statusText = "notmodified";
-
- // If we have data, let's convert it
- } else {
- isSuccess = ajaxConvert( s, response );
- statusText = isSuccess.state;
- success = isSuccess.data;
- error = isSuccess.error;
- isSuccess = !error;
- }
- } else {
- // We extract error from statusText
- // then normalize statusText and status for non-aborts
- error = statusText;
- if ( status || !statusText ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger("ajaxStop");
- }
- }
- }
-
- return jqXHR;
- },
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- }
-});
-
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
- var firstDataType, ct, finalDataType, type,
- contents = s.contents,
- dataTypes = s.dataTypes,
- responseFields = s.responseFields;
-
- // Fill responseXXX fields
- for ( type in responseFields ) {
- if ( type in responses ) {
- jqXHR[ responseFields[type] ] = responses[ type ];
- }
- }
-
- // Remove auto dataType and get content-type in the process
- while( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader("Content-Type");
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
- var conv2, current, conv, tmp,
- converters = {},
- i = 0,
- // Work with a copy of dataTypes in case we need to modify it for conversion
- dataTypes = s.dataTypes.slice(),
- prev = dataTypes[ 0 ];
-
- // Apply the dataFilter if provided
- if ( s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- // Create converters map with lowercased keys
- if ( dataTypes[ 1 ] ) {
- for ( conv in s.converters ) {
- converters[ conv.toLowerCase() ] = s.converters[ conv ];
- }
- }
-
- // Convert to each sequential dataType, tolerating list modification
- for ( ; (current = dataTypes[++i]); ) {
-
- // There's only work to do if current dataType is non-auto
- if ( current !== "*" ) {
-
- // Convert response if prev dataType is non-auto and differs from current
- if ( prev !== "*" && prev !== current ) {
-
- // Seek a direct converter
- conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
- // If none found, seek a pair
- if ( !conv ) {
- for ( conv2 in converters ) {
-
- // If conv2 outputs current
- tmp = conv2.split(" ");
- if ( tmp[ 1 ] === current ) {
-
- // If prev can be converted to accepted input
- conv = converters[ prev + " " + tmp[ 0 ] ] ||
- converters[ "* " + tmp[ 0 ] ];
- if ( conv ) {
- // Condense equivalence converters
- if ( conv === true ) {
- conv = converters[ conv2 ];
-
- // Otherwise, insert the intermediate dataType
- } else if ( converters[ conv2 ] !== true ) {
- current = tmp[ 0 ];
- dataTypes.splice( i--, 0, current );
- }
-
- break;
- }
- }
- }
- }
-
- // Apply converter (if not an equivalence)
- if ( conv !== true ) {
-
- // Unless errors are allowed to bubble, catch and return them
- if ( conv && s["throws"] ) {
- response = conv( response );
- } else {
- try {
- response = conv( response );
- } catch ( e ) {
- return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current };
- }
- }
- }
- }
-
- // Update prev for next iteration
- prev = current;
- }
- }
-
- return { state: "success", data: response };
-}
-// Install script dataType
-jQuery.ajaxSetup({
- accepts: {
- script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /(?:java|ecma)script/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- s.global = false;
- }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
- // This transport only deals with cross domain requests
- if ( s.crossDomain ) {
-
- var script,
- head = document.head || jQuery("head")[0] || document.documentElement;
-
- return {
-
- send: function( _, callback ) {
-
- script = document.createElement("script");
-
- script.async = true;
-
- if ( s.scriptCharset ) {
- script.charset = s.scriptCharset;
- }
-
- script.src = s.url;
-
- // Attach handlers for all browsers
- script.onload = script.onreadystatechange = function( _, isAbort ) {
-
- if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
- // Handle memory leak in IE
- script.onload = script.onreadystatechange = null;
-
- // Remove the script
- if ( script.parentNode ) {
- script.parentNode.removeChild( script );
- }
-
- // Dereference the script
- script = null;
-
- // Callback if not abort
- if ( !isAbort ) {
- callback( 200, "success" );
- }
- }
- };
-
- // Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
- // Use native DOM manipulation to avoid our domManip AJAX trickery
- head.insertBefore( script, head.firstChild );
- },
-
- abort: function() {
- if ( script ) {
- script.onload( undefined, true );
- }
- }
- };
- }
-});
-var oldCallbacks = [],
- rjsonp = /(=)\?(?=&|$)|\?\?/;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
- jsonp: "callback",
- jsonpCallback: function() {
- var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( ajax_nonce++ ) );
- this[ callback ] = true;
- return callback;
- }
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var callbackName, overwritten, responseContainer,
- jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
- "url" :
- typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data"
- );
-
- // Handle iff the expected data type is "jsonp" or we have a parameter to set
- if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
- // Get callback name, remembering preexisting value associated with it
- callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
- s.jsonpCallback() :
- s.jsonpCallback;
-
- // Insert callback into url or form data
- if ( jsonProp ) {
- s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
- } else if ( s.jsonp !== false ) {
- s.url += ( ajax_rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
- }
-
- // Use data converter to retrieve json after script execution
- s.converters["script json"] = function() {
- if ( !responseContainer ) {
- jQuery.error( callbackName + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Install callback
- overwritten = window[ callbackName ];
- window[ callbackName ] = function() {
- responseContainer = arguments;
- };
-
- // Clean-up function (fires after converters)
- jqXHR.always(function() {
- // Restore preexisting value
- window[ callbackName ] = overwritten;
-
- // Save back as free
- if ( s[ callbackName ] ) {
- // make sure that re-using the options doesn't screw things around
- s.jsonpCallback = originalSettings.jsonpCallback;
-
- // save the callback name for future use
- oldCallbacks.push( callbackName );
- }
-
- // Call if it was a function and we have a response
- if ( responseContainer && jQuery.isFunction( overwritten ) ) {
- overwritten( responseContainer[ 0 ] );
- }
-
- responseContainer = overwritten = undefined;
- });
-
- // Delegate to script
- return "script";
- }
-});
-var xhrCallbacks, xhrSupported,
- xhrId = 0,
- // #5280: Internet Explorer will keep connections alive if we don't abort on unload
- xhrOnUnloadAbort = window.ActiveXObject && function() {
- // Abort all pending requests
- var key;
- for ( key in xhrCallbacks ) {
- xhrCallbacks[ key ]( undefined, true );
- }
- };
-
-// Functions to create xhrs
-function createStandardXHR() {
- try {
- return new window.XMLHttpRequest();
- } catch( e ) {}
-}
-
-function createActiveXHR() {
- try {
- return new window.ActiveXObject("Microsoft.XMLHTTP");
- } catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
- /* Microsoft failed to properly
- * implement the XMLHttpRequest in IE7 (can't request local files),
- * so we use the ActiveXObject when it is available
- * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
- * we need a fallback.
- */
- function() {
- return !this.isLocal && createStandardXHR() || createActiveXHR();
- } :
- // For all other browsers, use the standard XMLHttpRequest object
- createStandardXHR;
-
-// Determine support properties
-xhrSupported = jQuery.ajaxSettings.xhr();
-jQuery.support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-xhrSupported = jQuery.support.ajax = !!xhrSupported;
-
-// Create transport if the browser can provide an xhr
-if ( xhrSupported ) {
-
- jQuery.ajaxTransport(function( s ) {
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( !s.crossDomain || jQuery.support.cors ) {
-
- var callback;
-
- return {
- send: function( headers, complete ) {
-
- // Get a new xhr
- var handle, i,
- xhr = s.xhr();
-
- // Open the socket
- // Passing null username, generates a login popup on Opera (#2865)
- if ( s.username ) {
- xhr.open( s.type, s.url, s.async, s.username, s.password );
- } else {
- xhr.open( s.type, s.url, s.async );
- }
-
- // Apply custom fields if provided
- if ( s.xhrFields ) {
- for ( i in s.xhrFields ) {
- xhr[ i ] = s.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( s.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( s.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !s.crossDomain && !headers["X-Requested-With"] ) {
- headers["X-Requested-With"] = "XMLHttpRequest";
- }
-
- // Need an extra try/catch for cross domain requests in Firefox 3
- try {
- for ( i in headers ) {
- xhr.setRequestHeader( i, headers[ i ] );
- }
- } catch( err ) {}
-
- // Do send the request
- // This may raise an exception which is actually
- // handled in jQuery.ajax (so no try/catch here)
- xhr.send( ( s.hasContent && s.data ) || null );
-
- // Listener
- callback = function( _, isAbort ) {
- var status, responseHeaders, statusText, responses;
-
- // Firefox throws exceptions when accessing properties
- // of an xhr when a network error occurred
- // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
- try {
-
- // Was never called and is aborted or complete
- if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
- // Only called once
- callback = undefined;
-
- // Do not keep as active anymore
- if ( handle ) {
- xhr.onreadystatechange = jQuery.noop;
- if ( xhrOnUnloadAbort ) {
- delete xhrCallbacks[ handle ];
- }
- }
-
- // If it's an abort
- if ( isAbort ) {
- // Abort it manually if needed
- if ( xhr.readyState !== 4 ) {
- xhr.abort();
- }
- } else {
- responses = {};
- status = xhr.status;
- responseHeaders = xhr.getAllResponseHeaders();
-
- // When requesting binary data, IE6-9 will throw an exception
- // on any attempt to access responseText (#11426)
- if ( typeof xhr.responseText === "string" ) {
- responses.text = xhr.responseText;
- }
-
- // Firefox throws an exception when accessing
- // statusText for faulty cross-domain requests
- try {
- statusText = xhr.statusText;
- } catch( e ) {
- // We normalize with Webkit giving an empty statusText
- statusText = "";
- }
-
- // Filter status for non standard behaviors
-
- // If the request is local and we have data: assume a success
- // (success with no data won't get notified, that's the best we
- // can do given current implementations)
- if ( !status && s.isLocal && !s.crossDomain ) {
- status = responses.text ? 200 : 404;
- // IE - #1450: sometimes returns 1223 when it should be 204
- } else if ( status === 1223 ) {
- status = 204;
- }
- }
- }
- } catch( firefoxAccessException ) {
- if ( !isAbort ) {
- complete( -1, firefoxAccessException );
- }
- }
-
- // Call complete if needed
- if ( responses ) {
- complete( status, statusText, responses, responseHeaders );
- }
- };
-
- if ( !s.async ) {
- // if we're in sync mode we fire the callback
- callback();
- } else if ( xhr.readyState === 4 ) {
- // (IE6 & IE7) if it's in cache and has been
- // retrieved directly we need to fire the callback
- setTimeout( callback );
- } else {
- handle = ++xhrId;
- if ( xhrOnUnloadAbort ) {
- // Create the active xhrs callbacks list if needed
- // and attach the unload handler
- if ( !xhrCallbacks ) {
- xhrCallbacks = {};
- jQuery( window ).unload( xhrOnUnloadAbort );
- }
- // Add to list of active xhrs callbacks
- xhrCallbacks[ handle ] = callback;
- }
- xhr.onreadystatechange = callback;
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback( undefined, true );
- }
- }
- };
- }
- });
-}
-var fxNow, timerId,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rfxnum = new RegExp( "^(?:([+-])=|)(" + core_pnum + ")([a-z%]*)$", "i" ),
- rrun = /queueHooks$/,
- animationPrefilters = [ defaultPrefilter ],
- tweeners = {
- "*": [function( prop, value ) {
- var end, unit,
- tween = this.createTween( prop, value ),
- parts = rfxnum.exec( value ),
- target = tween.cur(),
- start = +target || 0,
- scale = 1,
- maxIterations = 20;
-
- if ( parts ) {
- end = +parts[2];
- unit = parts[3] || ( jQuery.cssNumber[ prop ] ? "" : "px" );
-
- // We need to compute starting value
- if ( unit !== "px" && start ) {
- // Iteratively approximate from a nonzero starting point
- // Prefer the current property, because this process will be trivial if it uses the same units
- // Fallback to end or a simple constant
- start = jQuery.css( tween.elem, prop, true ) || end || 1;
-
- do {
- // If previous iteration zeroed out, double until we get *something*
- // Use a string for doubling factor so we don't accidentally see scale as unchanged below
- scale = scale || ".5";
-
- // Adjust and apply
- start = start / scale;
- jQuery.style( tween.elem, prop, start + unit );
-
- // Update scale, tolerating zero or NaN from tween.cur()
- // And breaking the loop if scale is unchanged or perfect, or if we've just had enough
- } while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );
- }
-
- tween.unit = unit;
- tween.start = start;
- // If a +=/-= token was provided, we're doing a relative animation
- tween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;
- }
- return tween;
- }]
- };
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- setTimeout(function() {
- fxNow = undefined;
- });
- return ( fxNow = jQuery.now() );
-}
-
-function createTweens( animation, props ) {
- jQuery.each( props, function( prop, value ) {
- var collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ),
- index = 0,
- length = collection.length;
- for ( ; index < length; index++ ) {
- if ( collection[ index ].call( animation, prop, value ) ) {
-
- // we're done with this property
- return;
- }
- }
- });
-}
-
-function Animation( elem, properties, options ) {
- var result,
- stopped,
- index = 0,
- length = animationPrefilters.length,
- deferred = jQuery.Deferred().always( function() {
- // don't match elem in the :animated selector
- delete tick.elem;
- }),
- tick = function() {
- if ( stopped ) {
- return false;
- }
- var currentTime = fxNow || createFxNow(),
- remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
- // archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
- temp = remaining / animation.duration || 0,
- percent = 1 - temp,
- index = 0,
- length = animation.tweens.length;
-
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( percent );
- }
-
- deferred.notifyWith( elem, [ animation, percent, remaining ]);
-
- if ( percent < 1 && length ) {
- return remaining;
- } else {
- deferred.resolveWith( elem, [ animation ] );
- return false;
- }
- },
- animation = deferred.promise({
- elem: elem,
- props: jQuery.extend( {}, properties ),
- opts: jQuery.extend( true, { specialEasing: {} }, options ),
- originalProperties: properties,
- originalOptions: options,
- startTime: fxNow || createFxNow(),
- duration: options.duration,
- tweens: [],
- createTween: function( prop, end ) {
- var tween = jQuery.Tween( elem, animation.opts, prop, end,
- animation.opts.specialEasing[ prop ] || animation.opts.easing );
- animation.tweens.push( tween );
- return tween;
- },
- stop: function( gotoEnd ) {
- var index = 0,
- // if we are going to the end, we want to run all the tweens
- // otherwise we skip this part
- length = gotoEnd ? animation.tweens.length : 0;
- if ( stopped ) {
- return this;
- }
- stopped = true;
- for ( ; index < length ; index++ ) {
- animation.tweens[ index ].run( 1 );
- }
-
- // resolve when we played the last frame
- // otherwise, reject
- if ( gotoEnd ) {
- deferred.resolveWith( elem, [ animation, gotoEnd ] );
- } else {
- deferred.rejectWith( elem, [ animation, gotoEnd ] );
- }
- return this;
- }
- }),
- props = animation.props;
-
- propFilter( props, animation.opts.specialEasing );
-
- for ( ; index < length ; index++ ) {
- result = animationPrefilters[ index ].call( animation, elem, props, animation.opts );
- if ( result ) {
- return result;
- }
- }
-
- createTweens( animation, props );
-
- if ( jQuery.isFunction( animation.opts.start ) ) {
- animation.opts.start.call( elem, animation );
- }
-
- jQuery.fx.timer(
- jQuery.extend( tick, {
- elem: elem,
- anim: animation,
- queue: animation.opts.queue
- })
- );
-
- // attach callbacks from options
- return animation.progress( animation.opts.progress )
- .done( animation.opts.done, animation.opts.complete )
- .fail( animation.opts.fail )
- .always( animation.opts.always );
-}
-
-function propFilter( props, specialEasing ) {
- var value, name, index, easing, hooks;
-
- // camelCase, specialEasing and expand cssHook pass
- for ( index in props ) {
- name = jQuery.camelCase( index );
- easing = specialEasing[ name ];
- value = props[ index ];
- if ( jQuery.isArray( value ) ) {
- easing = value[ 1 ];
- value = props[ index ] = value[ 0 ];
- }
-
- if ( index !== name ) {
- props[ name ] = value;
- delete props[ index ];
- }
-
- hooks = jQuery.cssHooks[ name ];
- if ( hooks && "expand" in hooks ) {
- value = hooks.expand( value );
- delete props[ name ];
-
- // not quite $.extend, this wont overwrite keys already present.
- // also - reusing 'index' from above because we have the correct "name"
- for ( index in value ) {
- if ( !( index in props ) ) {
- props[ index ] = value[ index ];
- specialEasing[ index ] = easing;
- }
- }
- } else {
- specialEasing[ name ] = easing;
- }
- }
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
-
- tweener: function( props, callback ) {
- if ( jQuery.isFunction( props ) ) {
- callback = props;
- props = [ "*" ];
- } else {
- props = props.split(" ");
- }
-
- var prop,
- index = 0,
- length = props.length;
-
- for ( ; index < length ; index++ ) {
- prop = props[ index ];
- tweeners[ prop ] = tweeners[ prop ] || [];
- tweeners[ prop ].unshift( callback );
- }
- },
-
- prefilter: function( callback, prepend ) {
- if ( prepend ) {
- animationPrefilters.unshift( callback );
- } else {
- animationPrefilters.push( callback );
- }
- }
-});
-
-function defaultPrefilter( elem, props, opts ) {
- /*jshint validthis:true */
- var prop, index, length,
- value, dataShow, toggle,
- tween, hooks, oldfire,
- anim = this,
- style = elem.style,
- orig = {},
- handled = [],
- hidden = elem.nodeType && isHidden( elem );
-
- // handle queue: false promises
- if ( !opts.queue ) {
- hooks = jQuery._queueHooks( elem, "fx" );
- if ( hooks.unqueued == null ) {
- hooks.unqueued = 0;
- oldfire = hooks.empty.fire;
- hooks.empty.fire = function() {
- if ( !hooks.unqueued ) {
- oldfire();
- }
- };
- }
- hooks.unqueued++;
-
- anim.always(function() {
- // doing this makes sure that the complete handler will be called
- // before this completes
- anim.always(function() {
- hooks.unqueued--;
- if ( !jQuery.queue( elem, "fx" ).length ) {
- hooks.empty.fire();
- }
- });
- });
- }
-
- // height/width overflow pass
- if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
- // Make sure that nothing sneaks out
- // Record all 3 overflow attributes because IE does not
- // change the overflow attribute when overflowX and
- // overflowY are set to the same value
- opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
- // Set display property to inline-block for height/width
- // animations on inline elements that are having width/height animated
- if ( jQuery.css( elem, "display" ) === "inline" &&
- jQuery.css( elem, "float" ) === "none" ) {
-
- // inline-level elements accept inline-block;
- // block-level elements need to be inline with layout
- if ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === "inline" ) {
- style.display = "inline-block";
-
- } else {
- style.zoom = 1;
- }
- }
- }
-
- if ( opts.overflow ) {
- style.overflow = "hidden";
- if ( !jQuery.support.shrinkWrapBlocks ) {
- anim.always(function() {
- style.overflow = opts.overflow[ 0 ];
- style.overflowX = opts.overflow[ 1 ];
- style.overflowY = opts.overflow[ 2 ];
- });
- }
- }
-
-
- // show/hide pass
- for ( index in props ) {
- value = props[ index ];
- if ( rfxtypes.exec( value ) ) {
- delete props[ index ];
- toggle = toggle || value === "toggle";
- if ( value === ( hidden ? "hide" : "show" ) ) {
- continue;
- }
- handled.push( index );
- }
- }
-
- length = handled.length;
- if ( length ) {
- dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
- if ( "hidden" in dataShow ) {
- hidden = dataShow.hidden;
- }
-
- // store state if its toggle - enables .stop().toggle() to "reverse"
- if ( toggle ) {
- dataShow.hidden = !hidden;
- }
- if ( hidden ) {
- jQuery( elem ).show();
- } else {
- anim.done(function() {
- jQuery( elem ).hide();
- });
- }
- anim.done(function() {
- var prop;
- jQuery._removeData( elem, "fxshow" );
- for ( prop in orig ) {
- jQuery.style( elem, prop, orig[ prop ] );
- }
- });
- for ( index = 0 ; index < length ; index++ ) {
- prop = handled[ index ];
- tween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );
- orig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );
-
- if ( !( prop in dataShow ) ) {
- dataShow[ prop ] = tween.start;
- if ( hidden ) {
- tween.end = tween.start;
- tween.start = prop === "width" || prop === "height" ? 1 : 0;
- }
- }
- }
- }
-}
-
-function Tween( elem, options, prop, end, easing ) {
- return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
- constructor: Tween,
- init: function( elem, options, prop, end, easing, unit ) {
- this.elem = elem;
- this.prop = prop;
- this.easing = easing || "swing";
- this.options = options;
- this.start = this.now = this.cur();
- this.end = end;
- this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
- },
- cur: function() {
- var hooks = Tween.propHooks[ this.prop ];
-
- return hooks && hooks.get ?
- hooks.get( this ) :
- Tween.propHooks._default.get( this );
- },
- run: function( percent ) {
- var eased,
- hooks = Tween.propHooks[ this.prop ];
-
- if ( this.options.duration ) {
- this.pos = eased = jQuery.easing[ this.easing ](
- percent, this.options.duration * percent, 0, 1, this.options.duration
- );
- } else {
- this.pos = eased = percent;
- }
- this.now = ( this.end - this.start ) * eased + this.start;
-
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- if ( hooks && hooks.set ) {
- hooks.set( this );
- } else {
- Tween.propHooks._default.set( this );
- }
- return this;
- }
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
- _default: {
- get: function( tween ) {
- var result;
-
- if ( tween.elem[ tween.prop ] != null &&
- (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) {
- return tween.elem[ tween.prop ];
- }
-
- // passing an empty string as a 3rd parameter to .css will automatically
- // attempt a parseFloat and fallback to a string if the parse fails
- // so, simple values such as "10px" are parsed to Float.
- // complex values such as "rotate(1rad)" are returned as is.
- result = jQuery.css( tween.elem, tween.prop, "" );
- // Empty strings, null, undefined and "auto" are converted to 0.
- return !result || result === "auto" ? 0 : result;
- },
- set: function( tween ) {
- // use step hook for back compat - use cssHook if its there - use .style if its
- // available and use plain properties where available
- if ( jQuery.fx.step[ tween.prop ] ) {
- jQuery.fx.step[ tween.prop ]( tween );
- } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) {
- jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
- } else {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
- }
-};
-
-// Remove in 2.0 - this supports IE8's panic based approach
-// to setting things on disconnected nodes
-
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
- set: function( tween ) {
- if ( tween.elem.nodeType && tween.elem.parentNode ) {
- tween.elem[ tween.prop ] = tween.now;
- }
- }
-};
-
-jQuery.each([ "toggle", "show", "hide" ], function( i, name ) {
- var cssFn = jQuery.fn[ name ];
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return speed == null || typeof speed === "boolean" ?
- cssFn.apply( this, arguments ) :
- this.animate( genFx( name, true ), speed, easing, callback );
- };
-});
-
-jQuery.fn.extend({
- fadeTo: function( speed, to, easing, callback ) {
-
- // show any hidden elements after setting opacity to 0
- return this.filter( isHidden ).css( "opacity", 0 ).show()
-
- // animate to the value specified
- .end().animate({ opacity: to }, speed, easing, callback );
- },
- animate: function( prop, speed, easing, callback ) {
- var empty = jQuery.isEmptyObject( prop ),
- optall = jQuery.speed( speed, easing, callback ),
- doAnimation = function() {
- // Operate on a copy of prop so per-property easing won't be lost
- var anim = Animation( this, jQuery.extend( {}, prop ), optall );
- doAnimation.finish = function() {
- anim.stop( true );
- };
- // Empty animations, or finishing resolves immediately
- if ( empty || jQuery._data( this, "finish" ) ) {
- anim.stop( true );
- }
- };
- doAnimation.finish = doAnimation;
-
- return empty || optall.queue === false ?
- this.each( doAnimation ) :
- this.queue( optall.queue, doAnimation );
- },
- stop: function( type, clearQueue, gotoEnd ) {
- var stopQueue = function( hooks ) {
- var stop = hooks.stop;
- delete hooks.stop;
- stop( gotoEnd );
- };
-
- if ( typeof type !== "string" ) {
- gotoEnd = clearQueue;
- clearQueue = type;
- type = undefined;
- }
- if ( clearQueue && type !== false ) {
- this.queue( type || "fx", [] );
- }
-
- return this.each(function() {
- var dequeue = true,
- index = type != null && type + "queueHooks",
- timers = jQuery.timers,
- data = jQuery._data( this );
-
- if ( index ) {
- if ( data[ index ] && data[ index ].stop ) {
- stopQueue( data[ index ] );
- }
- } else {
- for ( index in data ) {
- if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
- stopQueue( data[ index ] );
- }
- }
- }
-
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) {
- timers[ index ].anim.stop( gotoEnd );
- dequeue = false;
- timers.splice( index, 1 );
- }
- }
-
- // start the next in the queue if the last step wasn't forced
- // timers currently will call their complete callbacks, which will dequeue
- // but only if they were gotoEnd
- if ( dequeue || !gotoEnd ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- finish: function( type ) {
- if ( type !== false ) {
- type = type || "fx";
- }
- return this.each(function() {
- var index,
- data = jQuery._data( this ),
- queue = data[ type + "queue" ],
- hooks = data[ type + "queueHooks" ],
- timers = jQuery.timers,
- length = queue ? queue.length : 0;
-
- // enable finishing flag on private data
- data.finish = true;
-
- // empty the queue first
- jQuery.queue( this, type, [] );
-
- if ( hooks && hooks.cur && hooks.cur.finish ) {
- hooks.cur.finish.call( this );
- }
-
- // look for any active animations, and finish them
- for ( index = timers.length; index--; ) {
- if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
- timers[ index ].anim.stop( true );
- timers.splice( index, 1 );
- }
- }
-
- // look for any animations in the old queue and finish them
- for ( index = 0; index < length; index++ ) {
- if ( queue[ index ] && queue[ index ].finish ) {
- queue[ index ].finish.call( this );
- }
- }
-
- // turn off finishing flag
- delete data.finish;
- });
- }
-});
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
- var which,
- attrs = { height: type },
- i = 0;
-
- // if we include width, step value is 1 to do all cssExpand values,
- // if we don't include width, step value is 2 to skip over Left and Right
- includeWidth = includeWidth? 1 : 0;
- for( ; i < 4 ; i += 2 - includeWidth ) {
- which = cssExpand[ i ];
- attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
- }
-
- if ( includeWidth ) {
- attrs.opacity = attrs.width = type;
- }
-
- return attrs;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
- slideDown: genFx("show"),
- slideUp: genFx("hide"),
- slideToggle: genFx("toggle"),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-});
-
-jQuery.speed = function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
- };
-
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
- opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
- // normalize opt.queue - true/undefined/null -> "fx"
- if ( opt.queue == null || opt.queue === true ) {
- opt.queue = "fx";
- }
-
- // Queueing
- opt.old = opt.complete;
-
- opt.complete = function() {
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue ) {
- jQuery.dequeue( this, opt.queue );
- }
- };
-
- return opt;
-};
-
-jQuery.easing = {
- linear: function( p ) {
- return p;
- },
- swing: function( p ) {
- return 0.5 - Math.cos( p*Math.PI ) / 2;
- }
-};
-
-jQuery.timers = [];
-jQuery.fx = Tween.prototype.init;
-jQuery.fx.tick = function() {
- var timer,
- timers = jQuery.timers,
- i = 0;
-
- fxNow = jQuery.now();
-
- for ( ; i < timers.length; i++ ) {
- timer = timers[ i ];
- // Checks the timer has not already been removed
- if ( !timer() && timers[ i ] === timer ) {
- timers.splice( i--, 1 );
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
- if ( timer() && jQuery.timers.push( timer ) ) {
- jQuery.fx.start();
- }
-};
-
-jQuery.fx.interval = 13;
-
-jQuery.fx.start = function() {
- if ( !timerId ) {
- timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval );
- }
-};
-
-jQuery.fx.stop = function() {
- clearInterval( timerId );
- timerId = null;
-};
-
-jQuery.fx.speeds = {
- slow: 600,
- fast: 200,
- // Default speed
- _default: 400
-};
-
-// Back Compat <1.8 extension point
-jQuery.fx.step = {};
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.animated = function( elem ) {
- return jQuery.grep(jQuery.timers, function( fn ) {
- return elem === fn.elem;
- }).length;
- };
-}
-jQuery.fn.offset = function( options ) {
- if ( arguments.length ) {
- return options === undefined ?
- this :
- this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- var docElem, win,
- box = { top: 0, left: 0 },
- elem = this[ 0 ],
- doc = elem && elem.ownerDocument;
-
- if ( !doc ) {
- return;
- }
-
- docElem = doc.documentElement;
-
- // Make sure it's not a disconnected DOM node
- if ( !jQuery.contains( docElem, elem ) ) {
- return box;
- }
-
- // If we don't have gBCR, just use 0,0 rather than error
- // BlackBerry 5, iOS 3 (original iPhone)
- if ( typeof elem.getBoundingClientRect !== core_strundefined ) {
- box = elem.getBoundingClientRect();
- }
- win = getWindow( doc );
- return {
- top: box.top + ( win.pageYOffset || docElem.scrollTop ) - ( docElem.clientTop || 0 ),
- left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
- };
-};
-
-jQuery.offset = {
-
- setOffset: function( elem, options, i ) {
- var position = jQuery.css( elem, "position" );
-
- // set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- var curElem = jQuery( elem ),
- curOffset = curElem.offset(),
- curCSSTop = jQuery.css( elem, "top" ),
- curCSSLeft = jQuery.css( elem, "left" ),
- calculatePosition = ( position === "absolute" || position === "fixed" ) && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
- props = {}, curPosition = {}, curTop, curLeft;
-
- // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( jQuery.isFunction( options ) ) {
- options = options.call( elem, i, curOffset );
- }
-
- if ( options.top != null ) {
- props.top = ( options.top - curOffset.top ) + curTop;
- }
- if ( options.left != null ) {
- props.left = ( options.left - curOffset.left ) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
- } else {
- curElem.css( props );
- }
- }
-};
-
-
-jQuery.fn.extend({
-
- position: function() {
- if ( !this[ 0 ] ) {
- return;
- }
-
- var offsetParent, offset,
- parentOffset = { top: 0, left: 0 },
- elem = this[ 0 ];
-
- // fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent
- if ( jQuery.css( elem, "position" ) === "fixed" ) {
- // we assume that getBoundingClientRect is available when computed position is fixed
- offset = elem.getBoundingClientRect();
- } else {
- // Get *real* offsetParent
- offsetParent = this.offsetParent();
-
- // Get correct offsets
- offset = this.offset();
- if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
- parentOffset = offsetParent.offset();
- }
-
- // Add offsetParent borders
- parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
- parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
- }
-
- // Subtract parent offsets and element margins
- // note: when an element has margin: auto the offsetLeft and marginLeft
- // are the same in Safari causing offset.left to incorrectly be 0
- return {
- top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
- left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true)
- };
- },
-
- offsetParent: function() {
- return this.map(function() {
- var offsetParent = this.offsetParent || document.documentElement;
- while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position") === "static" ) ) {
- offsetParent = offsetParent.offsetParent;
- }
- return offsetParent || document.documentElement;
- });
- }
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( {scrollLeft: "pageXOffset", scrollTop: "pageYOffset"}, function( method, prop ) {
- var top = /Y/.test( prop );
-
- jQuery.fn[ method ] = function( val ) {
- return jQuery.access( this, function( elem, method, val ) {
- var win = getWindow( elem );
-
- if ( val === undefined ) {
- return win ? (prop in win) ? win[ prop ] :
- win.document.documentElement[ method ] :
- elem[ method ];
- }
-
- if ( win ) {
- win.scrollTo(
- !top ? val : jQuery( win ).scrollLeft(),
- top ? val : jQuery( win ).scrollTop()
- );
-
- } else {
- elem[ method ] = val;
- }
- }, method, val, arguments.length, null );
- };
-});
-
-function getWindow( elem ) {
- return jQuery.isWindow( elem ) ?
- elem :
- elem.nodeType === 9 ?
- elem.defaultView || elem.parentWindow :
- false;
-}
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
- jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) {
- // margin is only for outerHeight, outerWidth
- jQuery.fn[ funcName ] = function( margin, value ) {
- var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
- extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
- return jQuery.access( this, function( elem, type, value ) {
- var doc;
-
- if ( jQuery.isWindow( elem ) ) {
- // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
- // isn't a whole lot we can do. See pull request at this URL for discussion:
- // https://github.com/jquery/jquery/pull/764
- return elem.document.documentElement[ "client" + name ];
- }
-
- // Get document width or height
- if ( elem.nodeType === 9 ) {
- doc = elem.documentElement;
-
- // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], whichever is greatest
- // unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.
- return Math.max(
- elem.body[ "scroll" + name ], doc[ "scroll" + name ],
- elem.body[ "offset" + name ], doc[ "offset" + name ],
- doc[ "client" + name ]
- );
- }
-
- return value === undefined ?
- // Get width or height on the element, requesting but not forcing parseFloat
- jQuery.css( elem, type, extra ) :
-
- // Set width or height on the element
- jQuery.style( elem, type, value, extra );
- }, type, chainable ? margin : undefined, chainable, null );
- };
- });
-});
-// Limit scope pollution from any deprecated API
-// (function() {
-
-// })();
-// Expose jQuery to the global object
-window.jQuery = window.$ = jQuery;
-
-// Expose jQuery as an AMD module, but only for AMD loaders that
-// understand the issues with loading multiple versions of jQuery
-// in a page that all might call define(). The loader will indicate
-// they have special allowances for multiple jQuery versions by
-// specifying define.amd.jQuery = true. Register as a named module,
-// since jQuery can be concatenated with other files that may use define,
-// but not use a proper concatenation script that understands anonymous
-// AMD modules. A named AMD is safest and most robust way to register.
-// Lowercase jquery is used because AMD module names are derived from
-// file names, and jQuery is normally delivered in a lowercase file name.
-// Do this after creating the global so that if an AMD module wants to call
-// noConflict to hide this version of jQuery, it will work.
-if ( typeof define === "function" && define.amd && define.amd.jQuery ) {
- define( "jquery", [], function () { return jQuery; } );
-}
-
-})( window ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery.form.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery.form.js
deleted file mode 100644
index 7e7ebf75..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery.form.js
+++ /dev/null
@@ -1,1121 +0,0 @@
-/*!
- * jQuery Form Plugin
- * version: 3.20 (20-NOV-2012)
- * @requires jQuery v1.5 or later
- *
- * Examples and documentation at: http://malsup.com/jquery/form/
- * Project repository: https://github.com/malsup/form
- * Dual licensed under the MIT and GPL licenses:
- * http://malsup.github.com/mit-license.txt
- * http://malsup.github.com/gpl-license-v2.txt
- */
-/*global ActiveXObject alert */
-;(function($) {
-"use strict";
-
-/*
- Usage Note:
- -----------
- Do not use both ajaxSubmit and ajaxForm on the same form. These
- functions are mutually exclusive. Use ajaxSubmit if you want
- to bind your own submit handler to the form. For example,
-
- $(document).ready(function() {
- $('#myForm').on('submit', function(e) {
- e.preventDefault(); // <-- important
- $(this).ajaxSubmit({
- target: '#output'
- });
- });
- });
-
- Use ajaxForm when you want the plugin to manage all the event binding
- for you. For example,
-
- $(document).ready(function() {
- $('#myForm').ajaxForm({
- target: '#output'
- });
- });
-
- You can also use ajaxForm with delegation (requires jQuery v1.7+), so the
- form does not have to exist when you invoke ajaxForm:
-
- $('#myForm').ajaxForm({
- delegation: true,
- target: '#output'
- });
-
- When using ajaxForm, the ajaxSubmit function will be invoked for you
- at the appropriate time.
-*/
-
-/**
- * Feature detection
- */
-var feature = {};
-feature.fileapi = $("<input type='file'/>").get(0).files !== undefined;
-feature.formdata = window.FormData !== undefined;
-
-/**
- * ajaxSubmit() provides a mechanism for immediately submitting
- * an HTML form using AJAX.
- */
-$.fn.ajaxSubmit = function(options) {
- /*jshint scripturl:true */
-
- // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
- if (!this.length) {
- log('ajaxSubmit: skipping submit process - no element selected');
- return this;
- }
-
- var method, action, url, $form = this;
-
- if (typeof options == 'function') {
- options = { success: options };
- }
-
- method = this.attr('method');
- action = this.attr('action');
- url = (typeof action === 'string') ? $.trim(action) : '';
- url = url || window.location.href || '';
- if (url) {
- // clean url (don't include hash vaue)
- url = (url.match(/^([^#]+)/)||[])[1];
- }
-
- options = $.extend(true, {
- url: url,
- success: $.ajaxSettings.success,
- type: method || 'GET',
- iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
- }, options);
-
- // hook for manipulating the form data before it is extracted;
- // convenient for use with rich editors like tinyMCE or FCKEditor
- var veto = {};
- this.trigger('form-pre-serialize', [this, options, veto]);
- if (veto.veto) {
- log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
- return this;
- }
-
- // provide opportunity to alter form data before it is serialized
- if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
- log('ajaxSubmit: submit aborted via beforeSerialize callback');
- return this;
- }
-
- var traditional = options.traditional;
- if ( traditional === undefined ) {
- traditional = $.ajaxSettings.traditional;
- }
-
- var elements = [];
- var qx, a = this.formToArray(options.semantic, elements);
- if (options.data) {
- options.extraData = options.data;
- qx = $.param(options.data, traditional);
- }
-
- // give pre-submit callback an opportunity to abort the submit
- if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
- log('ajaxSubmit: submit aborted via beforeSubmit callback');
- return this;
- }
-
- // fire vetoable 'validate' event
- this.trigger('form-submit-validate', [a, this, options, veto]);
- if (veto.veto) {
- log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
- return this;
- }
-
- var q = $.param(a, traditional);
- if (qx) {
- q = ( q ? (q + '&' + qx) : qx );
- }
- if (options.type.toUpperCase() == 'GET') {
- options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
- options.data = null; // data is null for 'get'
- }
- else {
- options.data = q; // data is the query string for 'post'
- }
-
- var callbacks = [];
- if (options.resetForm) {
- callbacks.push(function() { $form.resetForm(); });
- }
- if (options.clearForm) {
- callbacks.push(function() { $form.clearForm(options.includeHidden); });
- }
-
- // perform a load on the target only if dataType is not provided
- if (!options.dataType && options.target) {
- var oldSuccess = options.success || function(){};
- callbacks.push(function(data) {
- var fn = options.replaceTarget ? 'replaceWith' : 'html';
- $(options.target)[fn](data).each(oldSuccess, arguments);
- });
- }
- else if (options.success) {
- callbacks.push(options.success);
- }
-
- options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
- var context = options.context || this ; // jQuery 1.4+ supports scope context
- for (var i=0, max=callbacks.length; i < max; i++) {
- callbacks[i].apply(context, [data, status, xhr || $form, $form]);
- }
- };
-
- // are there files to upload?
-
- // [value] (issue #113), also see comment:
- // https://github.com/malsup/form/commit/588306aedba1de01388032d5f42a60159eea9228#commitcomment-2180219
- var fileInputs = $('input[type=file]:enabled[value!=""]', this);
-
- var hasFileInputs = fileInputs.length > 0;
- var mp = 'multipart/form-data';
- var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);
-
- var fileAPI = feature.fileapi && feature.formdata;
- log("fileAPI :" + fileAPI);
- var shouldUseFrame = (hasFileInputs || multipart) && !fileAPI;
-
- var jqxhr;
-
- // options.iframe allows user to force iframe mode
- // 06-NOV-09: now defaulting to iframe mode if file input is detected
- if (options.iframe !== false && (options.iframe || shouldUseFrame)) {
- // hack to fix Safari hang (thanks to Tim Molendijk for this)
- // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
- if (options.closeKeepAlive) {
- $.get(options.closeKeepAlive, function() {
- jqxhr = fileUploadIframe(a);
- });
- }
- else {
- jqxhr = fileUploadIframe(a);
- }
- }
- else if ((hasFileInputs || multipart) && fileAPI) {
- jqxhr = fileUploadXhr(a);
- }
- else {
- jqxhr = $.ajax(options);
- }
-
- $form.removeData('jqxhr').data('jqxhr', jqxhr);
-
- // clear element array
- for (var k=0; k < elements.length; k++)
- elements[k] = null;
-
- // fire 'notify' event
- this.trigger('form-submit-notify', [this, options]);
- return this;
-
- // utility fn for deep serialization
- function deepSerialize(extraData){
- var serialized = $.param(extraData).split('&');
- var len = serialized.length;
- var result = {};
- var i, part;
- for (i=0; i < len; i++) {
- part = serialized[i].split('=');
- result[decodeURIComponent(part[0])] = decodeURIComponent(part[1]);
- }
- return result;
- }
-
- // XMLHttpRequest Level 2 file uploads (big hat tip to francois2metz)
- function fileUploadXhr(a) {
- var formdata = new FormData();
-
- for (var i=0; i < a.length; i++) {
- formdata.append(a[i].name, a[i].value);
- }
-
- if (options.extraData) {
- var serializedData = deepSerialize(options.extraData);
- for (var p in serializedData)
- if (serializedData.hasOwnProperty(p))
- formdata.append(p, serializedData[p]);
- }
-
- options.data = null;
-
- var s = $.extend(true, {}, $.ajaxSettings, options, {
- contentType: false,
- processData: false,
- cache: false,
- type: method || 'POST'
- });
-
- if (options.uploadProgress) {
- // workaround because jqXHR does not expose upload property
- s.xhr = function() {
- var xhr = jQuery.ajaxSettings.xhr();
- if (xhr.upload) {
- xhr.upload.onprogress = function(event) {
- var percent = 0;
- var position = event.loaded || event.position; /*event.position is deprecated*/
- var total = event.total;
- if (event.lengthComputable) {
- percent = Math.ceil(position / total * 100);
- }
- options.uploadProgress(event, position, total, percent);
- };
- }
- return xhr;
- };
- }
-
- s.data = null;
- var beforeSend = s.beforeSend;
- s.beforeSend = function(xhr, o) {
- o.data = formdata;
- if(beforeSend)
- beforeSend.call(this, xhr, o);
- };
- return $.ajax(s);
- }
-
- // private function for handling file uploads (hat tip to YAHOO!)
- function fileUploadIframe(a) {
- var form = $form[0], el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle;
- var useProp = !!$.fn.prop;
- var deferred = $.Deferred();
-
- if ($('[name=submit],[id=submit]', form).length) {
- // if there is an input with a name or id of 'submit' then we won't be
- // able to invoke the submit fn on the form (at least not x-browser)
- alert('Error: Form elements must not have name or id of "submit".');
- deferred.reject();
- return deferred;
- }
-
- if (a) {
- // ensure that every serialized input is still enabled
- for (i=0; i < elements.length; i++) {
- el = $(elements[i]);
- if ( useProp )
- el.prop('disabled', false);
- else
- el.removeAttr('disabled');
- }
- }
-
- s = $.extend(true, {}, $.ajaxSettings, options);
- s.context = s.context || s;
- id = 'jqFormIO' + (new Date().getTime());
- if (s.iframeTarget) {
- $io = $(s.iframeTarget);
- n = $io.attr('name');
- if (!n)
- $io.attr('name', id);
- else
- id = n;
- }
- else {
- $io = $('<iframe name="' + id + '" src="'+ s.iframeSrc +'" />');
- $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
- }
- io = $io[0];
-
-
- xhr = { // mock object
- aborted: 0,
- responseText: null,
- responseXML: null,
- status: 0,
- statusText: 'n/a',
- getAllResponseHeaders: function() {},
- getResponseHeader: function() {},
- setRequestHeader: function() {},
- abort: function(status) {
- var e = (status === 'timeout' ? 'timeout' : 'aborted');
- log('aborting upload... ' + e);
- this.aborted = 1;
- // #214
- if (io.contentWindow.document.execCommand) {
- try { // #214
- io.contentWindow.document.execCommand('Stop');
- } catch(ignore) {}
- }
- $io.attr('src', s.iframeSrc); // abort op in progress
- xhr.error = e;
- if (s.error)
- s.error.call(s.context, xhr, e, status);
- if (g)
- $.event.trigger("ajaxError", [xhr, s, e]);
- if (s.complete)
- s.complete.call(s.context, xhr, e);
- }
- };
-
- g = s.global;
- // trigger ajax global events so that activity/block indicators work like normal
- if (g && 0 === $.active++) {
- $.event.trigger("ajaxStart");
- }
- if (g) {
- $.event.trigger("ajaxSend", [xhr, s]);
- }
-
- if (s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false) {
- if (s.global) {
- $.active--;
- }
- deferred.reject();
- return deferred;
- }
- if (xhr.aborted) {
- deferred.reject();
- return deferred;
- }
-
- // add submitting element to data if we know it
- sub = form.clk;
- if (sub) {
- n = sub.name;
- if (n && !sub.disabled) {
- s.extraData = s.extraData || {};
- s.extraData[n] = sub.value;
- if (sub.type == "image") {
- s.extraData[n+'.x'] = form.clk_x;
- s.extraData[n+'.y'] = form.clk_y;
- }
- }
- }
-
- var CLIENT_TIMEOUT_ABORT = 1;
- var SERVER_ABORT = 2;
-
- function getDoc(frame) {
- var doc = frame.contentWindow ? frame.contentWindow.document : frame.contentDocument ? frame.contentDocument : frame.document;
- return doc;
- }
-
- // Rails CSRF hack (thanks to Yvan Barthelemy)
- var csrf_token = $('meta[name=csrf-token]').attr('content');
- var csrf_param = $('meta[name=csrf-param]').attr('content');
- if (csrf_param && csrf_token) {
- s.extraData = s.extraData || {};
- s.extraData[csrf_param] = csrf_token;
- }
-
- // take a breath so that pending repaints get some cpu time before the upload starts
- function doSubmit() {
- // make sure form attrs are set
- var t = $form.attr('target'), a = $form.attr('action');
-
- // update form attrs in IE friendly way
- form.setAttribute('target',id);
- if (!method) {
- form.setAttribute('method', 'POST');
- }
- if (a != s.url) {
- form.setAttribute('action', s.url);
- }
-
- // ie borks in some cases when setting encoding
- if (! s.skipEncodingOverride && (!method || /post/i.test(method))) {
- $form.attr({
- encoding: 'multipart/form-data',
- enctype: 'multipart/form-data'
- });
- }
-
- // support timout
- if (s.timeout) {
- timeoutHandle = setTimeout(function() { timedOut = true; cb(CLIENT_TIMEOUT_ABORT); }, s.timeout);
- }
-
- // look for server aborts
- function checkState() {
- try {
- var state = getDoc(io).readyState;
- log('state = ' + state);
- if (state && state.toLowerCase() == 'uninitialized')
- setTimeout(checkState,50);
- }
- catch(e) {
- log('Server abort: ' , e, ' (', e.name, ')');
- cb(SERVER_ABORT);
- if (timeoutHandle)
- clearTimeout(timeoutHandle);
- timeoutHandle = undefined;
- }
- }
-
- // add "extra" data to form if provided in options
- var extraInputs = [];
- try {
- if (s.extraData) {
- for (var n in s.extraData) {
- if (s.extraData.hasOwnProperty(n)) {
- // if using the $.param format that allows for multiple values with the same name
- if($.isPlainObject(s.extraData[n]) && s.extraData[n].hasOwnProperty('name') && s.extraData[n].hasOwnProperty('value')) {
- extraInputs.push(
- $('<input type="hidden" name="'+s.extraData[n].name+'">').attr('value',s.extraData[n].value)
- .appendTo(form)[0]);
- } else {
- extraInputs.push(
- $('<input type="hidden" name="'+n+'">').attr('value',s.extraData[n])
- .appendTo(form)[0]);
- }
- }
- }
- }
-
- if (!s.iframeTarget) {
- // add iframe to doc and submit the form
- $io.appendTo('body');
- if (io.attachEvent)
- io.attachEvent('onload', cb);
- else
- io.addEventListener('load', cb, false);
- }
- setTimeout(checkState,15);
- form.submit();
- }
- finally {
- // reset attrs and remove "extra" input elements
- form.setAttribute('action',a);
- if(t) {
- form.setAttribute('target', t);
- } else {
- $form.removeAttr('target');
- }
- $(extraInputs).remove();
- }
- }
-
- if (s.forceSync) {
- doSubmit();
- }
- else {
- setTimeout(doSubmit, 10); // this lets dom updates render
- }
-
- var data, doc, domCheckCount = 50, callbackProcessed;
-
- function cb(e) {
- if (xhr.aborted || callbackProcessed) {
- return;
- }
- try {
- doc = getDoc(io);
- }
- catch(ex) {
- log('cannot access response document: ', ex);
- e = SERVER_ABORT;
- }
- if (e === CLIENT_TIMEOUT_ABORT && xhr) {
- xhr.abort('timeout');
- deferred.reject(xhr, 'timeout');
- return;
- }
- else if (e == SERVER_ABORT && xhr) {
- xhr.abort('server abort');
- deferred.reject(xhr, 'error', 'server abort');
- return;
- }
-
- if (!doc || doc.location.href == s.iframeSrc) {
- // response not received yet
- if (!timedOut)
- return;
- }
- if (io.detachEvent)
- io.detachEvent('onload', cb);
- else
- io.removeEventListener('load', cb, false);
-
- var status = 'success', errMsg;
- try {
- if (timedOut) {
- throw 'timeout';
- }
-
- var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
- log('isXml='+isXml);
- if (!isXml && window.opera && (doc.body === null || !doc.body.innerHTML)) {
- if (--domCheckCount) {
- // in some browsers (Opera) the iframe DOM is not always traversable when
- // the onload callback fires, so we loop a bit to accommodate
- log('requeing onLoad callback, DOM not available');
- setTimeout(cb, 250);
- return;
- }
- // let this fall through because server response could be an empty document
- //log('Could not access iframe DOM after mutiple tries.');
- //throw 'DOMException: not available';
- }
-
- //log('response detected');
- var docRoot = doc.body ? doc.body : doc.documentElement;
- xhr.responseText = docRoot ? docRoot.innerHTML : null;
- xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
- if (isXml)
- s.dataType = 'xml';
- xhr.getResponseHeader = function(header){
- var headers = {'content-type': s.dataType};
- return headers[header];
- };
- // support for XHR 'status' & 'statusText' emulation :
- if (docRoot) {
- xhr.status = Number( docRoot.getAttribute('status') ) || xhr.status;
- xhr.statusText = docRoot.getAttribute('statusText') || xhr.statusText;
- }
-
- var dt = (s.dataType || '').toLowerCase();
- var scr = /(json|script|text)/.test(dt);
- if (scr || s.textarea) {
- // see if user embedded response in textarea
- var ta = doc.getElementsByTagName('textarea')[0];
- if (ta) {
- xhr.responseText = ta.value;
- // support for XHR 'status' & 'statusText' emulation :
- xhr.status = Number( ta.getAttribute('status') ) || xhr.status;
- xhr.statusText = ta.getAttribute('statusText') || xhr.statusText;
- }
- else if (scr) {
- // account for browsers injecting pre around json response
- var pre = doc.getElementsByTagName('pre')[0];
- var b = doc.getElementsByTagName('body')[0];
- if (pre) {
- xhr.responseText = pre.textContent ? pre.textContent : pre.innerText;
- }
- else if (b) {
- xhr.responseText = b.textContent ? b.textContent : b.innerText;
- }
- }
- }
- else if (dt == 'xml' && !xhr.responseXML && xhr.responseText) {
- xhr.responseXML = toXml(xhr.responseText);
- }
-
- try {
- data = httpData(xhr, dt, s);
- }
- catch (e) {
- status = 'parsererror';
- xhr.error = errMsg = (e || status);
- }
- }
- catch (e) {
- log('error caught: ',e);
- status = 'error';
- xhr.error = errMsg = (e || status);
- }
-
- if (xhr.aborted) {
- log('upload aborted');
- status = null;
- }
-
- if (xhr.status) { // we've set xhr.status
- status = (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) ? 'success' : 'error';
- }
-
- // ordering of these callbacks/triggers is odd, but that's how $.ajax does it
- if (status === 'success') {
- if (s.success)
- s.success.call(s.context, data, 'success', xhr);
- deferred.resolve(xhr.responseText, 'success', xhr);
- if (g)
- $.event.trigger("ajaxSuccess", [xhr, s]);
- }
- else if (status) {
- if (errMsg === undefined)
- errMsg = xhr.statusText;
- if (s.error)
- s.error.call(s.context, xhr, status, errMsg);
- deferred.reject(xhr, 'error', errMsg);
- if (g)
- $.event.trigger("ajaxError", [xhr, s, errMsg]);
- }
-
- if (g)
- $.event.trigger("ajaxComplete", [xhr, s]);
-
- if (g && ! --$.active) {
- $.event.trigger("ajaxStop");
- }
-
- if (s.complete)
- s.complete.call(s.context, xhr, status);
-
- callbackProcessed = true;
- if (s.timeout)
- clearTimeout(timeoutHandle);
-
- // clean up
- setTimeout(function() {
- if (!s.iframeTarget)
- $io.remove();
- xhr.responseXML = null;
- }, 100);
- }
-
- var toXml = $.parseXML || function(s, doc) { // use parseXML if available (jQuery 1.5+)
- if (window.ActiveXObject) {
- doc = new ActiveXObject('Microsoft.XMLDOM');
- doc.async = 'false';
- doc.loadXML(s);
- }
- else {
- doc = (new DOMParser()).parseFromString(s, 'text/xml');
- }
- return (doc && doc.documentElement && doc.documentElement.nodeName != 'parsererror') ? doc : null;
- };
- var parseJSON = $.parseJSON || function(s) {
- /*jslint evil:true */
- return window['eval']('(' + s + ')');
- };
-
- var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4
-
- var ct = xhr.getResponseHeader('content-type') || '',
- xml = type === 'xml' || !type && ct.indexOf('xml') >= 0,
- data = xml ? xhr.responseXML : xhr.responseText;
-
- if (xml && data.documentElement.nodeName === 'parsererror') {
- if ($.error)
- $.error('parsererror');
- }
- if (s && s.dataFilter) {
- data = s.dataFilter(data, type);
- }
- if (typeof data === 'string') {
- if (type === 'json' || !type && ct.indexOf('json') >= 0) {
- data = parseJSON(data);
- } else if (type === "script" || !type && ct.indexOf("javascript") >= 0) {
- $.globalEval(data);
- }
- }
- return data;
- };
-
- return deferred;
- }
-};
-
-/**
- * ajaxForm() provides a mechanism for fully automating form submission.
- *
- * The advantages of using this method instead of ajaxSubmit() are:
- *
- * 1: This method will include coordinates for <input type="image" /> elements (if the element
- * is used to submit the form).
- * 2. This method will include the submit element's name/value data (for the element that was
- * used to submit the form).
- * 3. This method binds the submit() method to the form for you.
- *
- * The options argument for ajaxForm works exactly as it does for ajaxSubmit. ajaxForm merely
- * passes the options argument along after properly binding events for submit elements and
- * the form itself.
- */
-$.fn.ajaxForm = function(options) {
- options = options || {};
- options.delegation = options.delegation && $.isFunction($.fn.on);
-
- // in jQuery 1.3+ we can fix mistakes with the ready state
- if (!options.delegation && this.length === 0) {
- var o = { s: this.selector, c: this.context };
- if (!$.isReady && o.s) {
- log('DOM not ready, queuing ajaxForm');
- $(function() {
- $(o.s,o.c).ajaxForm(options);
- });
- return this;
- }
- // is your DOM ready? http://docs.jquery.com/Tutorials:Introducing_$(document).ready()
- log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));
- return this;
- }
-
- if ( options.delegation ) {
- $(document)
- .off('submit.form-plugin', this.selector, doAjaxSubmit)
- .off('click.form-plugin', this.selector, captureSubmittingElement)
- .on('submit.form-plugin', this.selector, options, doAjaxSubmit)
- .on('click.form-plugin', this.selector, options, captureSubmittingElement);
- return this;
- }
-
- return this.ajaxFormUnbind()
- .bind('submit.form-plugin', options, doAjaxSubmit)
- .bind('click.form-plugin', options, captureSubmittingElement);
-};
-
-// private event handlers
-function doAjaxSubmit(e) {
- /*jshint validthis:true */
- var options = e.data;
- if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed
- e.preventDefault();
- $(this).ajaxSubmit(options);
- }
-}
-
-function captureSubmittingElement(e) {
- /*jshint validthis:true */
- var target = e.target;
- var $el = $(target);
- if (!($el.is("[type=submit],[type=image]"))) {
- // is this a child element of the submit el? (ex: a span within a button)
- var t = $el.closest('[type=submit]');
- if (t.length === 0) {
- return;
- }
- target = t[0];
- }
- var form = this;
- form.clk = target;
- if (target.type == 'image') {
- if (e.offsetX !== undefined) {
- form.clk_x = e.offsetX;
- form.clk_y = e.offsetY;
- } else if (typeof $.fn.offset == 'function') {
- var offset = $el.offset();
- form.clk_x = e.pageX - offset.left;
- form.clk_y = e.pageY - offset.top;
- } else {
- form.clk_x = e.pageX - target.offsetLeft;
- form.clk_y = e.pageY - target.offsetTop;
- }
- }
- // clear form vars
- setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
-}
-
-
-// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
-$.fn.ajaxFormUnbind = function() {
- return this.unbind('submit.form-plugin click.form-plugin');
-};
-
-/**
- * formToArray() gathers form element data into an array of objects that can
- * be passed to any of the following ajax functions: $.get, $.post, or load.
- * Each object in the array has both a 'name' and 'value' property. An example of
- * an array for a simple login form might be:
- *
- * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
- *
- * It is this array that is passed to pre-submit callback functions provided to the
- * ajaxSubmit() and ajaxForm() methods.
- */
-$.fn.formToArray = function(semantic, elements) {
- var a = [];
- if (this.length === 0) {
- return a;
- }
-
- var form = this[0];
- var els = semantic ? form.getElementsByTagName('*') : form.elements;
- if (!els) {
- return a;
- }
-
- var i,j,n,v,el,max,jmax;
- for(i=0, max=els.length; i < max; i++) {
- el = els[i];
- n = el.name;
- if (!n) {
- continue;
- }
-
- if (semantic && form.clk && el.type == "image") {
- // handle image inputs on the fly when semantic == true
- if(!el.disabled && form.clk == el) {
- a.push({name: n, value: $(el).val(), type: el.type });
- a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
- }
- continue;
- }
-
- v = $.fieldValue(el, true);
- if (v && v.constructor == Array) {
- if (elements)
- elements.push(el);
- for(j=0, jmax=v.length; j < jmax; j++) {
- a.push({name: n, value: v[j]});
- }
- }
- else if (feature.fileapi && el.type == 'file' && !el.disabled) {
- if (elements)
- elements.push(el);
- var files = el.files;
- if (files.length) {
- for (j=0; j < files.length; j++) {
- a.push({name: n, value: files[j], type: el.type});
- }
- }
- else {
- // #180
- a.push({ name: n, value: '', type: el.type });
- }
- }
- else if (v !== null && typeof v != 'undefined') {
- if (elements)
- elements.push(el);
- a.push({name: n, value: v, type: el.type, required: el.required});
- }
- }
-
- if (!semantic && form.clk) {
- // input type=='image' are not found in elements array! handle it here
- var $input = $(form.clk), input = $input[0];
- n = input.name;
- if (n && !input.disabled && input.type == 'image') {
- a.push({name: n, value: $input.val()});
- a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
- }
- }
- return a;
-};
-
-/**
- * Serializes form data into a 'submittable' string. This method will return a string
- * in the format: name1=value1&amp;name2=value2
- */
-$.fn.formSerialize = function(semantic) {
- //hand off to jQuery.param for proper encoding
- return $.param(this.formToArray(semantic));
-};
-
-/**
- * Serializes all field elements in the jQuery object into a query string.
- * This method will return a string in the format: name1=value1&amp;name2=value2
- */
-$.fn.fieldSerialize = function(successful) {
- var a = [];
- this.each(function() {
- var n = this.name;
- if (!n) {
- return;
- }
- var v = $.fieldValue(this, successful);
- if (v && v.constructor == Array) {
- for (var i=0,max=v.length; i < max; i++) {
- a.push({name: n, value: v[i]});
- }
- }
- else if (v !== null && typeof v != 'undefined') {
- a.push({name: this.name, value: v});
- }
- });
- //hand off to jQuery.param for proper encoding
- return $.param(a);
-};
-
-/**
- * Returns the value(s) of the element in the matched set. For example, consider the following form:
- *
- * <form><fieldset>
- * <input name="A" type="text" />
- * <input name="A" type="text" />
- * <input name="B" type="checkbox" value="B1" />
- * <input name="B" type="checkbox" value="B2"/>
- * <input name="C" type="radio" value="C1" />
- * <input name="C" type="radio" value="C2" />
- * </fieldset></form>
- *
- * var v = $('input[type=text]').fieldValue();
- * // if no values are entered into the text inputs
- * v == ['','']
- * // if values entered into the text inputs are 'foo' and 'bar'
- * v == ['foo','bar']
- *
- * var v = $('input[type=checkbox]').fieldValue();
- * // if neither checkbox is checked
- * v === undefined
- * // if both checkboxes are checked
- * v == ['B1', 'B2']
- *
- * var v = $('input[type=radio]').fieldValue();
- * // if neither radio is checked
- * v === undefined
- * // if first radio is checked
- * v == ['C1']
- *
- * The successful argument controls whether or not the field element must be 'successful'
- * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
- * The default value of the successful argument is true. If this value is false the value(s)
- * for each element is returned.
- *
- * Note: This method *always* returns an array. If no valid value can be determined the
- * array will be empty, otherwise it will contain one or more values.
- */
-$.fn.fieldValue = function(successful) {
- for (var val=[], i=0, max=this.length; i < max; i++) {
- var el = this[i];
- var v = $.fieldValue(el, successful);
- if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) {
- continue;
- }
- if (v.constructor == Array)
- $.merge(val, v);
- else
- val.push(v);
- }
- return val;
-};
-
-/**
- * Returns the value of the field element.
- */
-$.fieldValue = function(el, successful) {
- var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
- if (successful === undefined) {
- successful = true;
- }
-
- if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
- (t == 'checkbox' || t == 'radio') && !el.checked ||
- (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
- tag == 'select' && el.selectedIndex == -1)) {
- return null;
- }
-
- if (tag == 'select') {
- var index = el.selectedIndex;
- if (index < 0) {
- return null;
- }
- var a = [], ops = el.options;
- var one = (t == 'select-one');
- var max = (one ? index+1 : ops.length);
- for(var i=(one ? index : 0); i < max; i++) {
- var op = ops[i];
- if (op.selected) {
- var v = op.value;
- if (!v) { // extra pain for IE...
- v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
- }
- if (one) {
- return v;
- }
- a.push(v);
- }
- }
- return a;
- }
- return $(el).val();
-};
-
-/**
- * Clears the form data. Takes the following actions on the form's input fields:
- * - input text fields will have their 'value' property set to the empty string
- * - select elements will have their 'selectedIndex' property set to -1
- * - checkbox and radio inputs will have their 'checked' property set to false
- * - inputs of type submit, button, reset, and hidden will *not* be effected
- * - button elements will *not* be effected
- */
-$.fn.clearForm = function(includeHidden) {
- return this.each(function() {
- $('input,select,textarea', this).clearFields(includeHidden);
- });
-};
-
-/**
- * Clears the selected form elements.
- */
-$.fn.clearFields = $.fn.clearInputs = function(includeHidden) {
- var re = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i; // 'hidden' is not in this list
- return this.each(function() {
- var t = this.type, tag = this.tagName.toLowerCase();
- if (re.test(t) || tag == 'textarea') {
- this.value = '';
- }
- else if (t == 'checkbox' || t == 'radio') {
- this.checked = false;
- }
- else if (tag == 'select') {
- this.selectedIndex = -1;
- }
- else if (includeHidden) {
- // includeHidden can be the value true, or it can be a selector string
- // indicating a special test; for example:
- // $('#myForm').clearForm('.special:hidden')
- // the above would clean hidden inputs that have the class of 'special'
- if ( (includeHidden === true && /hidden/.test(t)) ||
- (typeof includeHidden == 'string' && $(this).is(includeHidden)) )
- this.value = '';
- }
- });
-};
-
-/**
- * Resets the form data. Causes all form elements to be reset to their original value.
- */
-$.fn.resetForm = function() {
- return this.each(function() {
- // guard against an input with the name of 'reset'
- // note that IE reports the reset function as an 'object'
- if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) {
- this.reset();
- }
- });
-};
-
-/**
- * Enables or disables any matching elements.
- */
-$.fn.enable = function(b) {
- if (b === undefined) {
- b = true;
- }
- return this.each(function() {
- this.disabled = !b;
- });
-};
-
-/**
- * Checks/unchecks any matching checkboxes or radio buttons and
- * selects/deselects and matching option elements.
- */
-$.fn.selected = function(select) {
- if (select === undefined) {
- select = true;
- }
- return this.each(function() {
- var t = this.type;
- if (t == 'checkbox' || t == 'radio') {
- this.checked = select;
- }
- else if (this.tagName.toLowerCase() == 'option') {
- var $sel = $(this).parent('select');
- if (select && $sel[0] && $sel[0].type == 'select-one') {
- // deselect all other options
- $sel.find('option').selected(false);
- }
- this.selected = select;
- }
- });
-};
-
-// expose debug var
-$.fn.ajaxSubmit.debug = false;
-
-// helper fn for console logging
-function log() {
- if (!$.fn.ajaxSubmit.debug)
- return;
- var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');
- if (window.console && window.console.log) {
- window.console.log(msg);
- }
- else if (window.opera && window.opera.postError) {
- window.opera.postError(msg);
- }
-}
-
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery.js
deleted file mode 100644
index bf011177..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery.js
+++ /dev/null
@@ -1,27 +0,0 @@
-(function() {
-
-var parts = document.location.search.slice( 1 ).split( "&" ),
- length = parts.length,
- scripts = document.getElementsByTagName("script"),
- src = scripts[ scripts.length - 1].src,
- i = 0,
- current,
- version = "1.11.1",
- file = "http://code.jquery.com/jquery-git.js";
-
-for ( ; i < length; i++ ) {
- current = parts[ i ].split( "=" );
- if ( current[ 0 ] === "jquery" ) {
- version = current[ 1 ];
- break;
- }
-}
-
-if (version != "git") {
- file = src.replace(/jquery\.js$/, "jquery-" + version + ".js");
-}
-
-
-document.write( "<script src='" + file + "'></script>" );
-
-})();
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery.mockjax.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery.mockjax.js
deleted file mode 100644
index b8e13145..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery.mockjax.js
+++ /dev/null
@@ -1,598 +0,0 @@
-/*!
- * MockJax - jQuery Plugin to Mock Ajax requests
- *
- * Version: 1.5.3
- * Released:
- * Home: http://github.com/appendto/jquery-mockjax
- * Author: Jonathan Sharp (http://jdsharp.com)
- * License: MIT,GPL
- *
- * Copyright (c) 2011 appendTo LLC.
- * Dual licensed under the MIT or GPL licenses.
- * http://appendto.com/open-source-licenses
- */
-(function($) {
- var _ajax = $.ajax,
- mockHandlers = [],
- mockedAjaxCalls = [],
- CALLBACK_REGEX = /=\?(&|$)/,
- jsc = (new Date()).getTime();
-
-
- // Parse the given XML string.
- function parseXML(xml) {
- if ( window.DOMParser == undefined && window.ActiveXObject ) {
- DOMParser = function() { };
- DOMParser.prototype.parseFromString = function( xmlString ) {
- var doc = new ActiveXObject('Microsoft.XMLDOM');
- doc.async = 'false';
- doc.loadXML( xmlString );
- return doc;
- };
- }
-
- try {
- var xmlDoc = ( new DOMParser() ).parseFromString( xml, 'text/xml' );
- if ( $.isXMLDoc( xmlDoc ) ) {
- var err = $('parsererror', xmlDoc);
- if ( err.length == 1 ) {
- throw('Error: ' + $(xmlDoc).text() );
- }
- } else {
- throw('Unable to parse XML');
- }
- return xmlDoc;
- } catch( e ) {
- var msg = ( e.name == undefined ? e : e.name + ': ' + e.message );
- $(document).trigger('xmlParseError', [ msg ]);
- return undefined;
- }
- }
-
- // Trigger a jQuery event
- function trigger(s, type, args) {
- (s.context ? $(s.context) : $.event).trigger(type, args);
- }
-
- // Check if the data field on the mock handler and the request match. This
- // can be used to restrict a mock handler to being used only when a certain
- // set of data is passed to it.
- function isMockDataEqual( mock, live ) {
- var identical = true;
- // Test for situations where the data is a querystring (not an object)
- if (typeof live === 'string') {
- // Querystring may be a regex
- return $.isFunction( mock.test ) ? mock.test(live) : mock == live;
- }
- $.each(mock, function(k) {
- if ( live[k] === undefined ) {
- identical = false;
- return identical;
- } else {
- // This will allow to compare Arrays
- if ( typeof live[k] === 'object' && live[k] !== null ) {
- identical = identical && isMockDataEqual(mock[k], live[k]);
- } else {
- if ( mock[k] && $.isFunction( mock[k].test ) ) {
- identical = identical && mock[k].test(live[k]);
- } else {
- identical = identical && ( mock[k] == live[k] );
- }
- }
- }
- });
-
- return identical;
- }
-
- // See if a mock handler property matches the default settings
- function isDefaultSetting(handler, property) {
- return handler[property] === $.mockjaxSettings[property];
- }
-
- // Check the given handler should mock the given request
- function getMockForRequest( handler, requestSettings ) {
- // If the mock was registered with a function, let the function decide if we
- // want to mock this request
- if ( $.isFunction(handler) ) {
- return handler( requestSettings );
- }
-
- // Inspect the URL of the request and check if the mock handler's url
- // matches the url for this ajax request
- if ( $.isFunction(handler.url.test) ) {
- // The user provided a regex for the url, test it
- if ( !handler.url.test( requestSettings.url ) ) {
- return null;
- }
- } else {
- // Look for a simple wildcard '*' or a direct URL match
- var star = handler.url.indexOf('*');
- if (handler.url !== requestSettings.url && star === -1 ||
- !new RegExp(handler.url.replace(/[-[\]{}()+?.,\\^$|#\s]/g, "\\$&").replace(/\*/g, '.+')).test(requestSettings.url)) {
- return null;
- }
- }
-
- // Inspect the data submitted in the request (either POST body or GET query string)
- if ( handler.data && requestSettings.data ) {
- if ( !isMockDataEqual(handler.data, requestSettings.data) ) {
- // They're not identical, do not mock this request
- return null;
- }
- }
- // Inspect the request type
- if ( handler && handler.type &&
- handler.type.toLowerCase() != requestSettings.type.toLowerCase() ) {
- // The request type doesn't match (GET vs. POST)
- return null;
- }
-
- return handler;
- }
-
- // Process the xhr objects send operation
- function _xhrSend(mockHandler, requestSettings, origSettings) {
-
- // This is a substitute for < 1.4 which lacks $.proxy
- var process = (function(that) {
- return function() {
- return (function() {
- var onReady;
-
- // The request has returned
- this.status = mockHandler.status;
- this.statusText = mockHandler.statusText;
- this.readyState = 4;
-
- // We have an executable function, call it to give
- // the mock handler a chance to update it's data
- if ( $.isFunction(mockHandler.response) ) {
- mockHandler.response(origSettings);
- }
- // Copy over our mock to our xhr object before passing control back to
- // jQuery's onreadystatechange callback
- if ( requestSettings.dataType == 'json' && ( typeof mockHandler.responseText == 'object' ) ) {
- this.responseText = JSON.stringify(mockHandler.responseText);
- } else if ( requestSettings.dataType == 'xml' ) {
- if ( typeof mockHandler.responseXML == 'string' ) {
- this.responseXML = parseXML(mockHandler.responseXML);
- //in jQuery 1.9.1+, responseXML is processed differently and relies on responseText
- this.responseText = mockHandler.responseXML;
- } else {
- this.responseXML = mockHandler.responseXML;
- }
- } else {
- this.responseText = mockHandler.responseText;
- }
- if( typeof mockHandler.status == 'number' || typeof mockHandler.status == 'string' ) {
- this.status = mockHandler.status;
- }
- if( typeof mockHandler.statusText === "string") {
- this.statusText = mockHandler.statusText;
- }
- // jQuery 2.0 renamed onreadystatechange to onload
- onReady = this.onreadystatechange || this.onload;
-
- // jQuery < 1.4 doesn't have onreadystate change for xhr
- if ( $.isFunction( onReady ) ) {
- if( mockHandler.isTimeout) {
- this.status = -1;
- }
- onReady.call( this, mockHandler.isTimeout ? 'timeout' : undefined );
- } else if ( mockHandler.isTimeout ) {
- // Fix for 1.3.2 timeout to keep success from firing.
- this.status = -1;
- }
- }).apply(that);
- };
- })(this);
-
- if ( mockHandler.proxy ) {
- // We're proxying this request and loading in an external file instead
- _ajax({
- global: false,
- url: mockHandler.proxy,
- type: mockHandler.proxyType,
- data: mockHandler.data,
- dataType: requestSettings.dataType === "script" ? "text/plain" : requestSettings.dataType,
- complete: function(xhr) {
- mockHandler.responseXML = xhr.responseXML;
- mockHandler.responseText = xhr.responseText;
- // Don't override the handler status/statusText if it's specified by the config
- if (isDefaultSetting(mockHandler, 'status')) {
- mockHandler.status = xhr.status;
- }
- if (isDefaultSetting(mockHandler, 'statusText')) {
- mockHandler.statusText = xhr.statusText;
- }
-
- this.responseTimer = setTimeout(process, mockHandler.responseTime || 0);
- }
- });
- } else {
- // type == 'POST' || 'GET' || 'DELETE'
- if ( requestSettings.async === false ) {
- // TODO: Blocking delay
- process();
- } else {
- this.responseTimer = setTimeout(process, mockHandler.responseTime || 50);
- }
- }
- }
-
- // Construct a mocked XHR Object
- function xhr(mockHandler, requestSettings, origSettings, origHandler) {
- // Extend with our default mockjax settings
- mockHandler = $.extend(true, {}, $.mockjaxSettings, mockHandler);
-
- if (typeof mockHandler.headers === 'undefined') {
- mockHandler.headers = {};
- }
- if ( mockHandler.contentType ) {
- mockHandler.headers['content-type'] = mockHandler.contentType;
- }
-
- return {
- status: mockHandler.status,
- statusText: mockHandler.statusText,
- readyState: 1,
- open: function() { },
- send: function() {
- origHandler.fired = true;
- _xhrSend.call(this, mockHandler, requestSettings, origSettings);
- },
- abort: function() {
- clearTimeout(this.responseTimer);
- },
- setRequestHeader: function(header, value) {
- mockHandler.headers[header] = value;
- },
- getResponseHeader: function(header) {
- // 'Last-modified', 'Etag', 'content-type' are all checked by jQuery
- if ( mockHandler.headers && mockHandler.headers[header] ) {
- // Return arbitrary headers
- return mockHandler.headers[header];
- } else if ( header.toLowerCase() == 'last-modified' ) {
- return mockHandler.lastModified || (new Date()).toString();
- } else if ( header.toLowerCase() == 'etag' ) {
- return mockHandler.etag || '';
- } else if ( header.toLowerCase() == 'content-type' ) {
- return mockHandler.contentType || 'text/plain';
- }
- },
- getAllResponseHeaders: function() {
- var headers = '';
- $.each(mockHandler.headers, function(k, v) {
- headers += k + ': ' + v + "\n";
- });
- return headers;
- }
- };
- }
-
- // Process a JSONP mock request.
- function processJsonpMock( requestSettings, mockHandler, origSettings ) {
- // Handle JSONP Parameter Callbacks, we need to replicate some of the jQuery core here
- // because there isn't an easy hook for the cross domain script tag of jsonp
-
- processJsonpUrl( requestSettings );
-
- requestSettings.dataType = "json";
- if(requestSettings.data && CALLBACK_REGEX.test(requestSettings.data) || CALLBACK_REGEX.test(requestSettings.url)) {
- createJsonpCallback(requestSettings, mockHandler, origSettings);
-
- // We need to make sure
- // that a JSONP style response is executed properly
-
- var rurl = /^(\w+:)?\/\/([^\/?#]+)/,
- parts = rurl.exec( requestSettings.url ),
- remote = parts && (parts[1] && parts[1] !== location.protocol || parts[2] !== location.host);
-
- requestSettings.dataType = "script";
- if(requestSettings.type.toUpperCase() === "GET" && remote ) {
- var newMockReturn = processJsonpRequest( requestSettings, mockHandler, origSettings );
-
- // Check if we are supposed to return a Deferred back to the mock call, or just
- // signal success
- if(newMockReturn) {
- return newMockReturn;
- } else {
- return true;
- }
- }
- }
- return null;
- }
-
- // Append the required callback parameter to the end of the request URL, for a JSONP request
- function processJsonpUrl( requestSettings ) {
- if ( requestSettings.type.toUpperCase() === "GET" ) {
- if ( !CALLBACK_REGEX.test( requestSettings.url ) ) {
- requestSettings.url += (/\?/.test( requestSettings.url ) ? "&" : "?") +
- (requestSettings.jsonp || "callback") + "=?";
- }
- } else if ( !requestSettings.data || !CALLBACK_REGEX.test(requestSettings.data) ) {
- requestSettings.data = (requestSettings.data ? requestSettings.data + "&" : "") + (requestSettings.jsonp || "callback") + "=?";
- }
- }
-
- // Process a JSONP request by evaluating the mocked response text
- function processJsonpRequest( requestSettings, mockHandler, origSettings ) {
- // Synthesize the mock request for adding a script tag
- var callbackContext = origSettings && origSettings.context || requestSettings,
- newMock = null;
-
-
- // If the response handler on the moock is a function, call it
- if ( mockHandler.response && $.isFunction(mockHandler.response) ) {
- mockHandler.response(origSettings);
- } else {
-
- // Evaluate the responseText javascript in a global context
- if( typeof mockHandler.responseText === 'object' ) {
- $.globalEval( '(' + JSON.stringify( mockHandler.responseText ) + ')');
- } else {
- $.globalEval( '(' + mockHandler.responseText + ')');
- }
- }
-
- // Successful response
- jsonpSuccess( requestSettings, callbackContext, mockHandler );
- jsonpComplete( requestSettings, callbackContext, mockHandler );
-
- // If we are running under jQuery 1.5+, return a deferred object
- if($.Deferred){
- newMock = new $.Deferred();
- if(typeof mockHandler.responseText == "object"){
- newMock.resolveWith( callbackContext, [mockHandler.responseText] );
- }
- else{
- newMock.resolveWith( callbackContext, [$.parseJSON( mockHandler.responseText )] );
- }
- }
- return newMock;
- }
-
-
- // Create the required JSONP callback function for the request
- function createJsonpCallback( requestSettings, mockHandler, origSettings ) {
- var callbackContext = origSettings && origSettings.context || requestSettings;
- var jsonp = requestSettings.jsonpCallback || ("jsonp" + jsc++);
-
- // Replace the =? sequence both in the query string and the data
- if ( requestSettings.data ) {
- requestSettings.data = (requestSettings.data + "").replace(CALLBACK_REGEX, "=" + jsonp + "$1");
- }
-
- requestSettings.url = requestSettings.url.replace(CALLBACK_REGEX, "=" + jsonp + "$1");
-
-
- // Handle JSONP-style loading
- window[ jsonp ] = window[ jsonp ] || function( tmp ) {
- data = tmp;
- jsonpSuccess( requestSettings, callbackContext, mockHandler );
- jsonpComplete( requestSettings, callbackContext, mockHandler );
- // Garbage collect
- window[ jsonp ] = undefined;
-
- try {
- delete window[ jsonp ];
- } catch(e) {}
-
- if ( head ) {
- head.removeChild( script );
- }
- };
- }
-
- // The JSONP request was successful
- function jsonpSuccess(requestSettings, callbackContext, mockHandler) {
- // If a local callback was specified, fire it and pass it the data
- if ( requestSettings.success ) {
- requestSettings.success.call( callbackContext, mockHandler.responseText || "", status, {} );
- }
-
- // Fire the global callback
- if ( requestSettings.global ) {
- trigger(requestSettings, "ajaxSuccess", [{}, requestSettings] );
- }
- }
-
- // The JSONP request was completed
- function jsonpComplete(requestSettings, callbackContext) {
- // Process result
- if ( requestSettings.complete ) {
- requestSettings.complete.call( callbackContext, {} , status );
- }
-
- // The request was completed
- if ( requestSettings.global ) {
- trigger( "ajaxComplete", [{}, requestSettings] );
- }
-
- // Handle the global AJAX counter
- if ( requestSettings.global && ! --$.active ) {
- $.event.trigger( "ajaxStop" );
- }
- }
-
-
- // The core $.ajax replacement.
- function handleAjax( url, origSettings ) {
- var mockRequest, requestSettings, mockHandler;
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- origSettings = url;
- url = undefined;
- } else {
- // work around to support 1.5 signature
- origSettings.url = url;
- }
-
- // Extend the original settings for the request
- requestSettings = $.extend(true, {}, $.ajaxSettings, origSettings);
-
- // Iterate over our mock handlers (in registration order) until we find
- // one that is willing to intercept the request
- for(var k = 0; k < mockHandlers.length; k++) {
- if ( !mockHandlers[k] ) {
- continue;
- }
-
- mockHandler = getMockForRequest( mockHandlers[k], requestSettings );
- if(!mockHandler) {
- // No valid mock found for this request
- continue;
- }
-
- mockedAjaxCalls.push(requestSettings);
-
- // If logging is enabled, log the mock to the console
- $.mockjaxSettings.log( mockHandler, requestSettings );
-
-
- if ( requestSettings.dataType === "jsonp" ) {
- if ((mockRequest = processJsonpMock( requestSettings, mockHandler, origSettings ))) {
- // This mock will handle the JSONP request
- return mockRequest;
- }
- }
-
-
- // Removed to fix #54 - keep the mocking data object intact
- //mockHandler.data = requestSettings.data;
-
- mockHandler.cache = requestSettings.cache;
- mockHandler.timeout = requestSettings.timeout;
- mockHandler.global = requestSettings.global;
-
- copyUrlParameters(mockHandler, origSettings);
-
- (function(mockHandler, requestSettings, origSettings, origHandler) {
- mockRequest = _ajax.call($, $.extend(true, {}, origSettings, {
- // Mock the XHR object
- xhr: function() { return xhr( mockHandler, requestSettings, origSettings, origHandler ); }
- }));
- })(mockHandler, requestSettings, origSettings, mockHandlers[k]);
-
- return mockRequest;
- }
-
- // We don't have a mock request
- if($.mockjaxSettings.throwUnmocked === true) {
- throw('AJAX not mocked: ' + origSettings.url);
- }
- else { // trigger a normal request
- return _ajax.apply($, [origSettings]);
- }
- }
-
- /**
- * Copies URL parameter values if they were captured by a regular expression
- * @param {Object} mockHandler
- * @param {Object} origSettings
- */
- function copyUrlParameters(mockHandler, origSettings) {
- //parameters aren't captured if the URL isn't a RegExp
- if (!(mockHandler.url instanceof RegExp)) {
- return;
- }
- //if no URL params were defined on the handler, don't attempt a capture
- if (!mockHandler.hasOwnProperty('urlParams')) {
- return;
- }
- var captures = mockHandler.url.exec(origSettings.url);
- //the whole RegExp match is always the first value in the capture results
- if (captures.length === 1) {
- return;
- }
- captures.shift();
- //use handler params as keys and capture resuts as values
- var i = 0,
- capturesLength = captures.length,
- paramsLength = mockHandler.urlParams.length,
- //in case the number of params specified is less than actual captures
- maxIterations = Math.min(capturesLength, paramsLength),
- paramValues = {};
- for (i; i < maxIterations; i++) {
- var key = mockHandler.urlParams[i];
- paramValues[key] = captures[i];
- }
- origSettings.urlParams = paramValues;
- }
-
-
- // Public
-
- $.extend({
- ajax: handleAjax
- });
-
- $.mockjaxSettings = {
- //url: null,
- //type: 'GET',
- log: function( mockHandler, requestSettings ) {
- if ( mockHandler.logging === false ||
- ( typeof mockHandler.logging === 'undefined' && $.mockjaxSettings.logging === false ) ) {
- return;
- }
- if ( window.console && console.log ) {
- var message = 'MOCK ' + requestSettings.type.toUpperCase() + ': ' + requestSettings.url;
- var request = $.extend({}, requestSettings);
-
- if (typeof console.log === 'function') {
- console.log(message, request);
- } else {
- try {
- console.log( message + ' ' + JSON.stringify(request) );
- } catch (e) {
- console.log(message);
- }
- }
- }
- },
- logging: true,
- status: 200,
- statusText: "OK",
- responseTime: 500,
- isTimeout: false,
- throwUnmocked: false,
- contentType: 'text/plain',
- response: '',
- responseText: '',
- responseXML: '',
- proxy: '',
- proxyType: 'GET',
-
- lastModified: null,
- etag: '',
- headers: {
- etag: 'IJF@H#@923uf8023hFO@I#H#',
- 'content-type' : 'text/plain'
- }
- };
-
- $.mockjax = function(settings) {
- var i = mockHandlers.length;
- mockHandlers[i] = settings;
- return i;
- };
- $.mockjaxClear = function(i) {
- if ( arguments.length == 1 ) {
- mockHandlers[i] = null;
- } else {
- mockHandlers = [];
- }
- mockedAjaxCalls = [];
- };
- $.mockjax.handler = function(i) {
- if ( arguments.length == 1 ) {
- return mockHandlers[i];
- }
- };
- $.mockjax.mockedAjaxCalls = function() {
- return mockedAjaxCalls;
- };
-})(jQuery);
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery.simulate.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery.simulate.js
deleted file mode 100644
index 1e17f5f8..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/jquery.simulate.js
+++ /dev/null
@@ -1,314 +0,0 @@
- /*!
- * jQuery Simulate v0.0.1 - simulate browser mouse and keyboard events
- * https://github.com/jquery/jquery-simulate
- *
- * Copyright 2012 jQuery Foundation and other contributors
- * Released under the MIT license.
- * http://jquery.org/license
- *
- * Date: Thu May 29 21:31:24 2014 +0200
- */
-
-;(function( $, undefined ) {
-
-var rkeyEvent = /^key/,
- rmouseEvent = /^(?:mouse|contextmenu)|click/;
-
-$.fn.simulate = function( type, options ) {
- return this.each(function() {
- new $.simulate( this, type, options );
- });
-};
-
-$.simulate = function( elem, type, options ) {
- var method = $.camelCase( "simulate-" + type );
-
- this.target = elem;
- this.options = options;
-
- if ( this[ method ] ) {
- this[ method ]();
- } else {
- this.simulateEvent( elem, type, options );
- }
-};
-
-$.extend( $.simulate, {
-
- keyCode: {
- BACKSPACE: 8,
- COMMA: 188,
- DELETE: 46,
- DOWN: 40,
- END: 35,
- ENTER: 13,
- ESCAPE: 27,
- HOME: 36,
- LEFT: 37,
- NUMPAD_ADD: 107,
- NUMPAD_DECIMAL: 110,
- NUMPAD_DIVIDE: 111,
- NUMPAD_ENTER: 108,
- NUMPAD_MULTIPLY: 106,
- NUMPAD_SUBTRACT: 109,
- PAGE_DOWN: 34,
- PAGE_UP: 33,
- PERIOD: 190,
- RIGHT: 39,
- SPACE: 32,
- TAB: 9,
- UP: 38
- },
-
- buttonCode: {
- LEFT: 0,
- MIDDLE: 1,
- RIGHT: 2
- }
-});
-
-$.extend( $.simulate.prototype, {
-
- simulateEvent: function( elem, type, options ) {
- var event = this.createEvent( type, options );
- this.dispatchEvent( elem, type, event, options );
- },
-
- createEvent: function( type, options ) {
- if ( rkeyEvent.test( type ) ) {
- return this.keyEvent( type, options );
- }
-
- if ( rmouseEvent.test( type ) ) {
- return this.mouseEvent( type, options );
- }
- },
-
- mouseEvent: function( type, options ) {
- var event, eventDoc, doc, body;
- options = $.extend({
- bubbles: true,
- cancelable: (type !== "mousemove"),
- view: window,
- detail: 0,
- screenX: 0,
- screenY: 0,
- clientX: 1,
- clientY: 1,
- ctrlKey: false,
- altKey: false,
- shiftKey: false,
- metaKey: false,
- button: 0,
- relatedTarget: undefined
- }, options );
-
- if ( document.createEvent ) {
- event = document.createEvent( "MouseEvents" );
- event.initMouseEvent( type, options.bubbles, options.cancelable,
- options.view, options.detail,
- options.screenX, options.screenY, options.clientX, options.clientY,
- options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
- options.button, options.relatedTarget || document.body.parentNode );
-
- // IE 9+ creates events with pageX and pageY set to 0.
- // Trying to modify the properties throws an error,
- // so we define getters to return the correct values.
- if ( event.pageX === 0 && event.pageY === 0 && Object.defineProperty ) {
- eventDoc = event.relatedTarget.ownerDocument || document;
- doc = eventDoc.documentElement;
- body = eventDoc.body;
-
- Object.defineProperty( event, "pageX", {
- get: function() {
- return options.clientX +
- ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -
- ( doc && doc.clientLeft || body && body.clientLeft || 0 );
- }
- });
- Object.defineProperty( event, "pageY", {
- get: function() {
- return options.clientY +
- ( doc && doc.scrollTop || body && body.scrollTop || 0 ) -
- ( doc && doc.clientTop || body && body.clientTop || 0 );
- }
- });
- }
- } else if ( document.createEventObject ) {
- event = document.createEventObject();
- $.extend( event, options );
- // standards event.button uses constants defined here: http://msdn.microsoft.com/en-us/library/ie/ff974877(v=vs.85).aspx
- // old IE event.button uses constants defined here: http://msdn.microsoft.com/en-us/library/ie/ms533544(v=vs.85).aspx
- // so we actually need to map the standard back to oldIE
- event.button = {
- 0: 1,
- 1: 4,
- 2: 2
- }[ event.button ] || event.button;
- }
-
- return event;
- },
-
- keyEvent: function( type, options ) {
- var event;
- options = $.extend({
- bubbles: true,
- cancelable: true,
- view: window,
- ctrlKey: false,
- altKey: false,
- shiftKey: false,
- metaKey: false,
- keyCode: 0,
- charCode: undefined
- }, options );
-
- if ( document.createEvent ) {
- try {
- event = document.createEvent( "KeyEvents" );
- event.initKeyEvent( type, options.bubbles, options.cancelable, options.view,
- options.ctrlKey, options.altKey, options.shiftKey, options.metaKey,
- options.keyCode, options.charCode );
- // initKeyEvent throws an exception in WebKit
- // see: http://stackoverflow.com/questions/6406784/initkeyevent-keypress-only-works-in-firefox-need-a-cross-browser-solution
- // and also https://bugs.webkit.org/show_bug.cgi?id=13368
- // fall back to a generic event until we decide to implement initKeyboardEvent
- } catch( err ) {
- event = document.createEvent( "Events" );
- event.initEvent( type, options.bubbles, options.cancelable );
- $.extend( event, {
- view: options.view,
- ctrlKey: options.ctrlKey,
- altKey: options.altKey,
- shiftKey: options.shiftKey,
- metaKey: options.metaKey,
- keyCode: options.keyCode,
- charCode: options.charCode
- });
- }
- } else if ( document.createEventObject ) {
- event = document.createEventObject();
- $.extend( event, options );
- }
-
- if ( !!/msie [\w.]+/.exec( navigator.userAgent.toLowerCase() ) || (({}).toString.call( window.opera ) === "[object Opera]") ) {
- event.keyCode = (options.charCode > 0) ? options.charCode : options.keyCode;
- event.charCode = undefined;
- }
-
- return event;
- },
-
- dispatchEvent: function( elem, type, event ) {
- if ( elem[ type ] ) {
- elem[ type ]();
- } else if ( elem.dispatchEvent ) {
- elem.dispatchEvent( event );
- } else if ( elem.fireEvent ) {
- elem.fireEvent( "on" + type, event );
- }
- },
-
- simulateFocus: function() {
- var focusinEvent,
- triggered = false,
- element = $( this.target );
-
- function trigger() {
- triggered = true;
- }
-
- element.bind( "focus", trigger );
- element[ 0 ].focus();
-
- if ( !triggered ) {
- focusinEvent = $.Event( "focusin" );
- focusinEvent.preventDefault();
- element.trigger( focusinEvent );
- element.triggerHandler( "focus" );
- }
- element.unbind( "focus", trigger );
- },
-
- simulateBlur: function() {
- var focusoutEvent,
- triggered = false,
- element = $( this.target );
-
- function trigger() {
- triggered = true;
- }
-
- element.bind( "blur", trigger );
- element[ 0 ].blur();
-
- // blur events are async in IE
- setTimeout(function() {
- // IE won't let the blur occur if the window is inactive
- if ( element[ 0 ].ownerDocument.activeElement === element[ 0 ] ) {
- element[ 0 ].ownerDocument.body.focus();
- }
-
- // Firefox won't trigger events if the window is inactive
- // IE doesn't trigger events if we had to manually focus the body
- if ( !triggered ) {
- focusoutEvent = $.Event( "focusout" );
- focusoutEvent.preventDefault();
- element.trigger( focusoutEvent );
- element.triggerHandler( "blur" );
- }
- element.unbind( "blur", trigger );
- }, 1 );
- }
-});
-
-
-
-/** complex events **/
-
-function findCenter( elem ) {
- var offset,
- document = $( elem.ownerDocument );
- elem = $( elem );
- offset = elem.offset();
-
- return {
- x: offset.left + elem.outerWidth() / 2 - document.scrollLeft(),
- y: offset.top + elem.outerHeight() / 2 - document.scrollTop()
- };
-}
-
-$.extend( $.simulate.prototype, {
- simulateDrag: function() {
- var i = 0,
- target = this.target,
- options = this.options,
- center = findCenter( target ),
- x = Math.floor( center.x ),
- y = Math.floor( center.y ),
- dx = options.dx || 0,
- dy = options.dy || 0,
- moves = options.moves || 3,
- coord = { clientX: x, clientY: y };
-
- this.simulateEvent( target, "mousedown", coord );
-
- for ( ; i < moves ; i++ ) {
- x += dx / moves;
- y += dy / moves;
-
- coord = {
- clientX: Math.round( x ),
- clientY: Math.round( y )
- };
-
- this.simulateEvent( document, "mousemove", coord );
- }
-
- this.simulateEvent( target, "mouseup", coord );
- this.simulateEvent( target, "click", coord );
- }
-});
-
-})( jQuery );
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/require.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/require.js
deleted file mode 100644
index a1099cfc..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/lib/require.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- RequireJS 2.1.14 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved.
- Available via the MIT or new BSD license.
- see: http://github.com/jrburke/requirejs for details
-*/
-var requirejs,require,define;
-(function(ba){function G(b){return"[object Function]"===K.call(b)}function H(b){return"[object Array]"===K.call(b)}function v(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function T(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));d-=1);}}function t(b,c){return fa.call(b,c)}function m(b,c){return t(b,c)&&b[c]}function B(b,c){for(var d in b)if(t(b,d)&&c(b[d],d))break}function U(b,c,d,e){c&&B(c,function(c,g){if(d||!t(b,g))e&&"object"===typeof c&&c&&!H(c)&&!G(c)&&!(c instanceof
-RegExp)?(b[g]||(b[g]={}),U(b[g],c,d,e)):b[g]=c});return b}function u(b,c){return function(){return c.apply(b,arguments)}}function ca(b){throw b;}function da(b){if(!b)return b;var c=ba;v(b.split("."),function(b){c=c[b]});return c}function C(b,c,d,e){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=e;d&&(c.originalError=d);return c}function ga(b){function c(a,k,b){var f,l,c,d,e,g,i,p,k=k&&k.split("/"),h=j.map,n=h&&h["*"];if(a){a=a.split("/");l=a.length-1;j.nodeIdCompat&&
-Q.test(a[l])&&(a[l]=a[l].replace(Q,""));"."===a[0].charAt(0)&&k&&(l=k.slice(0,k.length-1),a=l.concat(a));l=a;for(c=0;c<l.length;c++)if(d=l[c],"."===d)l.splice(c,1),c-=1;else if(".."===d&&!(0===c||1==c&&".."===l[2]||".."===l[c-1])&&0<c)l.splice(c-1,2),c-=2;a=a.join("/")}if(b&&h&&(k||n)){l=a.split("/");c=l.length;a:for(;0<c;c-=1){e=l.slice(0,c).join("/");if(k)for(d=k.length;0<d;d-=1)if(b=m(h,k.slice(0,d).join("/")))if(b=m(b,e)){f=b;g=c;break a}!i&&(n&&m(n,e))&&(i=m(n,e),p=c)}!f&&i&&(f=i,g=p);f&&(l.splice(0,
-g,f),a=l.join("/"))}return(f=m(j.pkgs,a))?f:a}function d(a){z&&v(document.getElementsByTagName("script"),function(k){if(k.getAttribute("data-requiremodule")===a&&k.getAttribute("data-requirecontext")===i.contextName)return k.parentNode.removeChild(k),!0})}function e(a){var k=m(j.paths,a);if(k&&H(k)&&1<k.length)return k.shift(),i.require.undef(a),i.makeRequire(null,{skipMap:!0})([a]),!0}function n(a){var k,c=a?a.indexOf("!"):-1;-1<c&&(k=a.substring(0,c),a=a.substring(c+1,a.length));return[k,a]}function p(a,
-k,b,f){var l,d,e=null,g=k?k.name:null,j=a,p=!0,h="";a||(p=!1,a="_@r"+(K+=1));a=n(a);e=a[0];a=a[1];e&&(e=c(e,g,f),d=m(r,e));a&&(e?h=d&&d.normalize?d.normalize(a,function(a){return c(a,g,f)}):-1===a.indexOf("!")?c(a,g,f):a:(h=c(a,g,f),a=n(h),e=a[0],h=a[1],b=!0,l=i.nameToUrl(h)));b=e&&!d&&!b?"_unnormalized"+(O+=1):"";return{prefix:e,name:h,parentMap:k,unnormalized:!!b,url:l,originalName:j,isDefine:p,id:(e?e+"!"+h:h)+b}}function s(a){var k=a.id,b=m(h,k);b||(b=h[k]=new i.Module(a));return b}function q(a,
-k,b){var f=a.id,c=m(h,f);if(t(r,f)&&(!c||c.defineEmitComplete))"defined"===k&&b(r[f]);else if(c=s(a),c.error&&"error"===k)b(c.error);else c.on(k,b)}function w(a,b){var c=a.requireModules,f=!1;if(b)b(a);else if(v(c,function(b){if(b=m(h,b))b.error=a,b.events.error&&(f=!0,b.emit("error",a))}),!f)g.onError(a)}function x(){R.length&&(ha.apply(A,[A.length,0].concat(R)),R=[])}function y(a){delete h[a];delete V[a]}function F(a,b,c){var f=a.map.id;a.error?a.emit("error",a.error):(b[f]=!0,v(a.depMaps,function(f,
-d){var e=f.id,g=m(h,e);g&&(!a.depMatched[d]&&!c[e])&&(m(b,e)?(a.defineDep(d,r[e]),a.check()):F(g,b,c))}),c[f]=!0)}function D(){var a,b,c=(a=1E3*j.waitSeconds)&&i.startTime+a<(new Date).getTime(),f=[],l=[],g=!1,h=!0;if(!W){W=!0;B(V,function(a){var i=a.map,j=i.id;if(a.enabled&&(i.isDefine||l.push(a),!a.error))if(!a.inited&&c)e(j)?g=b=!0:(f.push(j),d(j));else if(!a.inited&&(a.fetched&&i.isDefine)&&(g=!0,!i.prefix))return h=!1});if(c&&f.length)return a=C("timeout","Load timeout for modules: "+f,null,
-f),a.contextName=i.contextName,w(a);h&&v(l,function(a){F(a,{},{})});if((!c||b)&&g)if((z||ea)&&!X)X=setTimeout(function(){X=0;D()},50);W=!1}}function E(a){t(r,a[0])||s(p(a[0],null,!0)).init(a[1],a[2])}function I(a){var a=a.currentTarget||a.srcElement,b=i.onScriptLoad;a.detachEvent&&!Y?a.detachEvent("onreadystatechange",b):a.removeEventListener("load",b,!1);b=i.onScriptError;(!a.detachEvent||Y)&&a.removeEventListener("error",b,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}function J(){var a;
-for(x();A.length;){a=A.shift();if(null===a[0])return w(C("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));E(a)}}var W,Z,i,L,X,j={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},h={},V={},$={},A=[],r={},S={},aa={},K=1,O=1;L={require:function(a){return a.require?a.require:a.require=i.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?r[a.map.id]=a.exports:a.exports=r[a.map.id]={}},module:function(a){return a.module?
-a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return m(j.config,a.map.id)||{}},exports:a.exports||(a.exports={})}}};Z=function(a){this.events=m($,a.id)||{};this.map=a;this.shim=m(j.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};Z.prototype={init:function(a,b,c,f){f=f||{};if(!this.inited){this.factory=b;if(c)this.on("error",c);else this.events.error&&(c=u(this,function(a){this.emit("error",a)}));this.depMaps=a&&a.slice(0);this.errback=
-c;this.inited=!0;this.ignore=f.ignore;f.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,b){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=b)},fetch:function(){if(!this.fetched){this.fetched=!0;i.startTime=(new Date).getTime();var a=this.map;if(this.shim)i.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],u(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=
-this.map.url;S[a]||(S[a]=!0,i.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,b,c=this.map.id;b=this.depExports;var f=this.exports,l=this.factory;if(this.inited)if(this.error)this.emit("error",this.error);else{if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(G(l)){if(this.events.error&&this.map.isDefine||g.onError!==ca)try{f=i.execCb(c,l,b,f)}catch(d){a=d}else f=i.execCb(c,l,b,f);this.map.isDefine&&void 0===f&&((b=this.module)?f=b.exports:this.usingExports&&
-(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else f=l;this.exports=f;if(this.map.isDefine&&!this.ignore&&(r[c]=f,g.onResourceLoad))g.onResourceLoad(i,this.map,this.depMaps);y(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a=
-this.map,b=a.id,d=p(a.prefix);this.depMaps.push(d);q(d,"defined",u(this,function(f){var l,d;d=m(aa,this.map.id);var e=this.map.name,P=this.map.parentMap?this.map.parentMap.name:null,n=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(e=f.normalize(e,function(a){return c(a,P,!0)})||""),f=p(a.prefix+"!"+e,this.map.parentMap),q(f,"defined",u(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),d=m(h,f.id)){this.depMaps.push(f);
-if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else d?(this.map.url=i.nameToUrl(d),this.load()):(l=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),l.error=u(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(h,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),l.fromText=u(this,function(f,c){var d=a.name,e=p(d),P=M;c&&(f=c);P&&(M=!1);s(e);t(j.config,b)&&(j.config[d]=j.config[b]);try{g.exec(f)}catch(h){return w(C("fromtexteval",
-"fromText eval for "+b+" failed: "+h,h,[b]))}P&&(M=!0);this.depMaps.push(e);i.completeLoad(d);n([d],l)}),f.load(a.name,n,l,j))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){V[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,u(this,function(a,b){var c,f;if("string"===typeof a){a=p(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=m(L,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;q(a,"defined",u(this,function(a){this.defineDep(b,
-a);this.check()}));this.errback&&q(a,"error",u(this,this.errback))}c=a.id;f=h[c];!t(L,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,u(this,function(a){var b=m(h,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:j,contextName:b,registry:h,defined:r,urlFetched:S,defQueue:A,Module:Z,makeModuleMap:p,
-nextTick:g.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=j.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(j[b]||(j[b]={}),U(j[b],a,!0,!0)):j[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(aa[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);b[c]=a}),j.shim=b);a.packages&&v(a.packages,function(a){var b,
-a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(j.paths[b]=a.location);j.pkgs[b]=a.name+"/"+(a.main||"main").replace(ia,"").replace(Q,"")});B(h,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=p(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ba,arguments));return b||a.exports&&da(a.exports)}},makeRequire:function(a,e){function j(c,d,m){var n,q;e.enableBuildCallback&&(d&&G(d))&&(d.__requireJsBuild=
-!0);if("string"===typeof c){if(G(d))return w(C("requireargs","Invalid require call"),m);if(a&&t(L,c))return L[c](h[a.id]);if(g.get)return g.get(i,c,a,j);n=p(c,a,!1,!0);n=n.id;return!t(r,n)?w(C("notloaded",'Module name "'+n+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):r[n]}J();i.nextTick(function(){J();q=s(p(null,a));q.skipMap=e.skipMap;q.init(c,d,m,{enabled:!0});D()});return j}e=e||{};U(j,{isBrowser:z,toUrl:function(b){var d,e=b.lastIndexOf("."),k=b.split("/")[0];if(-1!==
-e&&(!("."===k||".."===k)||1<e))d=b.substring(e,b.length),b=b.substring(0,e);return i.nameToUrl(c(b,a&&a.id,!0),d,!0)},defined:function(b){return t(r,p(b,a,!1,!0).id)},specified:function(b){b=p(b,a,!1,!0).id;return t(r,b)||t(h,b)}});a||(j.undef=function(b){x();var c=p(b,a,!0),e=m(h,b);d(b);delete r[b];delete S[c.url];delete $[b];T(A,function(a,c){a[0]===b&&A.splice(c,1)});e&&(e.events.defined&&($[b]=e.events),y(b))});return j},enable:function(a){m(h,a.id)&&s(a).enable()},completeLoad:function(a){var b,
-c,d=m(j.shim,a)||{},g=d.exports;for(x();A.length;){c=A.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);E(c)}c=m(h,a);if(!b&&!t(r,a)&&c&&!c.inited){if(j.enforceDefine&&(!g||!da(g)))return e(a)?void 0:w(C("nodefine","No define call for "+a,null,[a]));E([a,d.deps||[],d.exportsFn])}D()},nameToUrl:function(a,b,c){var d,e,h;(d=m(j.pkgs,a))&&(a=d);if(d=m(aa,a))return i.nameToUrl(d,b,c);if(g.jsExtRegExp.test(a))d=a+(b||"");else{d=j.paths;a=a.split("/");for(e=a.length;0<e;e-=1)if(h=a.slice(0,
-e).join("/"),h=m(d,h)){H(h)&&(h=h[0]);a.splice(0,e,h);break}d=a.join("/");d+=b||(/^data\:|\?/.test(d)||c?"":".js");d=("/"===d.charAt(0)||d.match(/^[\w\+\.\-]+:/)?"":j.baseUrl)+d}return j.urlArgs?d+((-1===d.indexOf("?")?"?":"&")+j.urlArgs):d},load:function(a,b){g.load(i,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if("load"===a.type||ja.test((a.currentTarget||a.srcElement).readyState))N=null,a=I(a),i.completeLoad(a.id)},onScriptError:function(a){var b=I(a);if(!e(b.id))return w(C("scripterror",
-"Script error for: "+b.id,a,[b.id]))}};i.require=i.makeRequire();return i}var g,x,y,D,I,E,N,J,s,O,ka=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,la=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,Q=/\.js$/,ia=/^\.\//;x=Object.prototype;var K=x.toString,fa=x.hasOwnProperty,ha=Array.prototype.splice,z=!!("undefined"!==typeof window&&"undefined"!==typeof navigator&&window.document),ea=!z&&"undefined"!==typeof importScripts,ja=z&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,
-Y="undefined"!==typeof opera&&"[object Opera]"===opera.toString(),F={},q={},R=[],M=!1;if("undefined"===typeof define){if("undefined"!==typeof requirejs){if(G(requirejs))return;q=requirejs;requirejs=void 0}"undefined"!==typeof require&&!G(require)&&(q=require,require=void 0);g=requirejs=function(b,c,d,e){var n,p="_";!H(b)&&"string"!==typeof b&&(n=b,H(c)?(b=c,c=d,d=e):b=[]);n&&n.context&&(p=n.context);(e=m(F,p))||(e=F[p]=g.s.newContext(p));n&&e.configure(n);return e.require(b,c,d)};g.config=function(b){return g(b)};
-g.nextTick="undefined"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=g);g.version="2.1.14";g.jsExtRegExp=/^\/|:|\?|\.js$/;g.isBrowser=z;x=g.s={contexts:F,newContext:ga};g({});v(["toUrl","undef","defined","specified"],function(b){g[b]=function(){var c=F._;return c.require[b].apply(c,arguments)}});if(z&&(y=x.head=document.getElementsByTagName("head")[0],D=document.getElementsByTagName("base")[0]))y=x.head=D.parentNode;g.onError=ca;g.createNode=function(b){var c=
-b.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");c.type=b.scriptType||"text/javascript";c.charset="utf-8";c.async=!0;return c};g.load=function(b,c,d){var e=b&&b.config||{};if(z)return e=g.createNode(e,c,d),e.setAttribute("data-requirecontext",b.contextName),e.setAttribute("data-requiremodule",c),e.attachEvent&&!(e.attachEvent.toString&&0>e.attachEvent.toString().indexOf("[native code"))&&!Y?(M=!0,e.attachEvent("onreadystatechange",b.onScriptLoad)):
-(e.addEventListener("load",b.onScriptLoad,!1),e.addEventListener("error",b.onScriptError,!1)),e.src=d,J=e,D?y.insertBefore(e,D):y.appendChild(e),J=null,e;if(ea)try{importScripts(d),b.completeLoad(c)}catch(m){b.onError(C("importscripts","importScripts failed for "+c+" at "+d,m,[c]))}};z&&!q.skipDataMain&&T(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(I=b.getAttribute("data-main"))return s=I,q.baseUrl||(E=s.split("/"),s=E.pop(),O=E.length?E.join("/")+"/":"./",q.baseUrl=
-O),s=s.replace(Q,""),g.jsExtRegExp.test(s)&&(s=I),q.deps=q.deps?q.deps.concat(s):[s],!0});define=function(b,c,d){var e,g;"string"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(ka,"").replace(la,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(M){if(!(e=J))N&&"interactive"===N.readyState||T(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return N=b}),e=N;e&&(b||
-(b=e.getAttribute("data-requiremodule")),g=F[e.getAttribute("data-requirecontext")])}(g?g.defQueue:R).push([b,c,d])};define.amd={jQuery:!0};g.exec=function(b){return eval(b)};g(q)}})(this);
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/package.json b/wqflask/wqflask/static/new/packages/ValidationPlugin/package.json
deleted file mode 100644
index c7f49618..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/package.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
- "name": "jquery-validation",
- "title": "jQuery Validation Plugin",
- "description": "Client-side form validation made easy",
- "version": "1.14.0",
- "homepage": "http://jqueryvalidation.org/",
- "license": "MIT",
- "author": {
- "name": "Jörn Zaefferer",
- "email": "joern.zaefferer@gmail.com",
- "url": "http://bassistance.de"
- },
- "repository": {
- "type": "git",
- "url": "git://github.com/jzaefferer/jquery-validation.git"
- },
- "bugs": {
- "url": "https://github.com/jzaefferer/jquery-validation/issues"
- },
- "licenses": [
- {
- "type": "MIT",
- "url": "http://www.opensource.org/licenses/MIT"
- }
- ],
- "scripts": {
- "test": "grunt",
- "prepublish": "grunt"
- },
- "files": [
- "dist/localization/",
- "dist/additional-methods.js",
- "dist/jquery.validate.js"
- ],
- "main": "dist/jquery.validate.js",
- "dependencies": {},
- "devDependencies": {
- "commitplease": "2.0.0",
- "grunt": "0.4.4",
- "grunt-contrib-compress": "0.7.0",
- "grunt-contrib-concat": "0.3.0",
- "grunt-contrib-copy": "0.5.0",
- "grunt-contrib-jshint": "^0.10.0",
- "grunt-contrib-qunit": "0.4.0",
- "grunt-contrib-uglify": "0.4.0",
- "grunt-contrib-watch": "0.6.0",
- "grunt-jscs": "1.0.0",
- "grunt-text-replace": "0.3.11"
- },
- "keywords": [
- "jquery",
- "jquery-plugin",
- "forms",
- "validation",
- "validate"
- ]
-}
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/accept.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/accept.js
deleted file mode 100644
index e5a8af0a..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/accept.js
+++ /dev/null
@@ -1,33 +0,0 @@
-// Accept a value from a file input based on a required mimetype
-$.validator.addMethod("accept", function(value, element, param) {
- // Split mime on commas in case we have multiple types we can accept
- var typeParam = typeof param === "string" ? param.replace(/\s/g, "").replace(/,/g, "|") : "image/*",
- optionalValue = this.optional(element),
- i, file;
-
- // Element is optional
- if (optionalValue) {
- return optionalValue;
- }
-
- if ($(element).attr("type") === "file") {
- // If we are using a wildcard, make it regex friendly
- typeParam = typeParam.replace(/\*/g, ".*");
-
- // Check if the element has a FileList before checking each file
- if (element.files && element.files.length) {
- for (i = 0; i < element.files.length; i++) {
- file = element.files[i];
-
- // Grab the mimetype from the loaded file, verify it matches
- if (!file.type.match(new RegExp( "\\.?(" + typeParam + ")$", "i"))) {
- return false;
- }
- }
- }
- }
-
- // Either return true because we've validated each file, or because the
- // browser does not support element.files and the FileList feature
- return true;
-}, $.validator.format("Please enter a value with a valid mimetype."));
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/additional.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/additional.js
deleted file mode 100644
index 0803925c..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/additional.js
+++ /dev/null
@@ -1,24 +0,0 @@
-(function() {
-
- function stripHtml(value) {
- // remove html tags and space chars
- return value.replace(/<.[^<>]*?>/g, " ").replace(/&nbsp;|&#160;/gi, " ")
- // remove punctuation
- .replace(/[.(),;:!?%#$'\"_+=\/\-҉ۉ۪]*/g, "");
- }
-
- $.validator.addMethod("maxWords", function(value, element, params) {
- return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length <= params;
- }, $.validator.format("Please enter {0} words or less."));
-
- $.validator.addMethod("minWords", function(value, element, params) {
- return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length >= params;
- }, $.validator.format("Please enter at least {0} words."));
-
- $.validator.addMethod("rangeWords", function(value, element, params) {
- var valueStripped = stripHtml(value),
- regex = /\b\w+\b/g;
- return this.optional(element) || valueStripped.match(regex).length >= params[0] && valueStripped.match(regex).length <= params[1];
- }, $.validator.format("Please enter between {0} and {1} words."));
-
-}());
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/alphanumeric.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/alphanumeric.js
deleted file mode 100644
index 39aaebe3..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/alphanumeric.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$.validator.addMethod("alphanumeric", function(value, element) {
- return this.optional(element) || /^\w+$/i.test(value);
-}, "Letters, numbers, and underscores only please");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/bankaccountNL.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/bankaccountNL.js
deleted file mode 100644
index 33f85479..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/bankaccountNL.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Dutch bank account numbers (not 'giro' numbers) have 9 digits
- * and pass the '11 check'.
- * We accept the notation with spaces, as that is common.
- * acceptable: 123456789 or 12 34 56 789
- */
-$.validator.addMethod("bankaccountNL", function(value, element) {
- if (this.optional(element)) {
- return true;
- }
- if (!(/^[0-9]{9}|([0-9]{2} ){3}[0-9]{3}$/.test(value))) {
- return false;
- }
- // now '11 check'
- var account = value.replace(/ /g, ""), // remove spaces
- sum = 0,
- len = account.length,
- pos, factor, digit;
- for ( pos = 0; pos < len; pos++ ) {
- factor = len - pos;
- digit = account.substring(pos, pos + 1);
- sum = sum + factor * digit;
- }
- return sum % 11 === 0;
-}, "Please specify a valid bank account number");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/bankorgiroaccountNL.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/bankorgiroaccountNL.js
deleted file mode 100644
index 1a4f2f6a..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/bankorgiroaccountNL.js
+++ /dev/null
@@ -1,5 +0,0 @@
-$.validator.addMethod("bankorgiroaccountNL", function(value, element) {
- return this.optional(element) ||
- ($.validator.methods.bankaccountNL.call(this, value, element)) ||
- ($.validator.methods.giroaccountNL.call(this, value, element));
-}, "Please specify a valid bank or giro account number");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/bic.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/bic.js
deleted file mode 100644
index ebac9e6c..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/bic.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * BIC is the business identifier code (ISO 9362). This BIC check is not a guarantee for authenticity.
- *
- * BIC pattern: BBBBCCLLbbb (8 or 11 characters long; bbb is optional)
- *
- * BIC definition in detail:
- * - First 4 characters - bank code (only letters)
- * - Next 2 characters - ISO 3166-1 alpha-2 country code (only letters)
- * - Next 2 characters - location code (letters and digits)
- * a. shall not start with '0' or '1'
- * b. second character must be a letter ('O' is not allowed) or one of the following digits ('0' for test (therefore not allowed), '1' for passive participant and '2' for active participant)
- * - Last 3 characters - branch code, optional (shall not start with 'X' except in case of 'XXX' for primary office) (letters and digits)
- */
-$.validator.addMethod("bic", function(value, element) {
- return this.optional( element ) || /^([A-Z]{6}[A-Z2-9][A-NP-Z1-2])(X{3}|[A-WY-Z0-9][A-Z0-9]{2})?$/.test( value );
-}, "Please specify a valid BIC code");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/cifES.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/cifES.js
deleted file mode 100644
index b66a9c2b..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/cifES.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Código de identificación fiscal ( CIF ) is the tax identification code for Spanish legal entities
- * Further rules can be found in Spanish on http://es.wikipedia.org/wiki/C%C3%B3digo_de_identificaci%C3%B3n_fiscal
- */
-$.validator.addMethod( "cifES", function( value ) {
- "use strict";
-
- var num = [],
- controlDigit, sum, i, count, tmp, secondDigit;
-
- value = value.toUpperCase();
-
- // Quick format test
- if ( !value.match( "((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)" ) ) {
- return false;
- }
-
- for ( i = 0; i < 9; i++ ) {
- num[ i ] = parseInt( value.charAt( i ), 10 );
- }
-
- // Algorithm for checking CIF codes
- sum = num[ 2 ] + num[ 4 ] + num[ 6 ];
- for ( count = 1; count < 8; count += 2 ) {
- tmp = ( 2 * num[ count ] ).toString();
- secondDigit = tmp.charAt( 1 );
-
- sum += parseInt( tmp.charAt( 0 ), 10 ) + ( secondDigit === "" ? 0 : parseInt( secondDigit, 10 ) );
- }
-
- /* The first (position 1) is a letter following the following criteria:
- * A. Corporations
- * B. LLCs
- * C. General partnerships
- * D. Companies limited partnerships
- * E. Communities of goods
- * F. Cooperative Societies
- * G. Associations
- * H. Communities of homeowners in horizontal property regime
- * J. Civil Societies
- * K. Old format
- * L. Old format
- * M. Old format
- * N. Nonresident entities
- * P. Local authorities
- * Q. Autonomous bodies, state or not, and the like, and congregations and religious institutions
- * R. Congregations and religious institutions (since 2008 ORDER EHA/451/2008)
- * S. Organs of State Administration and regions
- * V. Agrarian Transformation
- * W. Permanent establishments of non-resident in Spain
- */
- if ( /^[ABCDEFGHJNPQRSUVW]{1}/.test( value ) ) {
- sum += "";
- controlDigit = 10 - parseInt( sum.charAt( sum.length - 1 ), 10 );
- value += controlDigit;
- return ( num[ 8 ].toString() === String.fromCharCode( 64 + controlDigit ) || num[ 8 ].toString() === value.charAt( value.length - 1 ) );
- }
-
- return false;
-
-}, "Please specify a valid CIF number." );
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/cpfBR.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/cpfBR.js
deleted file mode 100644
index 7e3f0cfa..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/cpfBR.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Brazillian CPF number (Cadastrado de Pessoas Físicas) is the equivalent of a Brazilian tax registration number.
- * CPF numbers have 11 digits in total: 9 numbers followed by 2 check numbers that are being used for validation.
- */
-$.validator.addMethod("cpfBR", function(value) {
- // Removing special characters from value
- value = value.replace(/([~!@#$%^&*()_+=`{}\[\]\-|\\:;'<>,.\/? ])+/g, "");
-
- // Checking value to have 11 digits only
- if (value.length !== 11) {
- return false;
- }
-
- var sum = 0,
- firstCN, secondCN, checkResult, i;
-
- firstCN = parseInt(value.substring(9, 10), 10);
- secondCN = parseInt(value.substring(10, 11), 10);
-
- checkResult = function(sum, cn) {
- var result = (sum * 10) % 11;
- if ((result === 10) || (result === 11)) {result = 0;}
- return (result === cn);
- };
-
- // Checking for dump data
- if (value === "" ||
- value === "00000000000" ||
- value === "11111111111" ||
- value === "22222222222" ||
- value === "33333333333" ||
- value === "44444444444" ||
- value === "55555555555" ||
- value === "66666666666" ||
- value === "77777777777" ||
- value === "88888888888" ||
- value === "99999999999"
- ) {
- return false;
- }
-
- // Step 1 - using first Check Number:
- for ( i = 1; i <= 9; i++ ) {
- sum = sum + parseInt(value.substring(i - 1, i), 10) * (11 - i);
- }
-
- // If first Check Number (CN) is valid, move to Step 2 - using second Check Number:
- if ( checkResult(sum, firstCN) ) {
- sum = 0;
- for ( i = 1; i <= 10; i++ ) {
- sum = sum + parseInt(value.substring(i - 1, i), 10) * (12 - i);
- }
- return checkResult(sum, secondCN);
- }
- return false;
-
-}, "Please specify a valid CPF number");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/creditcardtypes.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/creditcardtypes.js
deleted file mode 100644
index f70f261f..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/creditcardtypes.js
+++ /dev/null
@@ -1,69 +0,0 @@
-/* NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator
- * Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0
- * Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings)
- */
-$.validator.addMethod("creditcardtypes", function(value, element, param) {
- if (/[^0-9\-]+/.test(value)) {
- return false;
- }
-
- value = value.replace(/\D/g, "");
-
- var validTypes = 0x0000;
-
- if (param.mastercard) {
- validTypes |= 0x0001;
- }
- if (param.visa) {
- validTypes |= 0x0002;
- }
- if (param.amex) {
- validTypes |= 0x0004;
- }
- if (param.dinersclub) {
- validTypes |= 0x0008;
- }
- if (param.enroute) {
- validTypes |= 0x0010;
- }
- if (param.discover) {
- validTypes |= 0x0020;
- }
- if (param.jcb) {
- validTypes |= 0x0040;
- }
- if (param.unknown) {
- validTypes |= 0x0080;
- }
- if (param.all) {
- validTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;
- }
- if (validTypes & 0x0001 && /^(5[12345])/.test(value)) { //mastercard
- return value.length === 16;
- }
- if (validTypes & 0x0002 && /^(4)/.test(value)) { //visa
- return value.length === 16;
- }
- if (validTypes & 0x0004 && /^(3[47])/.test(value)) { //amex
- return value.length === 15;
- }
- if (validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test(value)) { //dinersclub
- return value.length === 14;
- }
- if (validTypes & 0x0010 && /^(2(014|149))/.test(value)) { //enroute
- return value.length === 15;
- }
- if (validTypes & 0x0020 && /^(6011)/.test(value)) { //discover
- return value.length === 16;
- }
- if (validTypes & 0x0040 && /^(3)/.test(value)) { //jcb
- return value.length === 16;
- }
- if (validTypes & 0x0040 && /^(2131|1800)/.test(value)) { //jcb
- return value.length === 15;
- }
- if (validTypes & 0x0080) { //unknown
- return true;
- }
- return false;
-}, "Please enter a valid credit card number.");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/currency.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/currency.js
deleted file mode 100644
index fbdd5b0e..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/currency.js
+++ /dev/null
@@ -1,41 +0,0 @@
-/**
- * Validates currencies with any given symbols by @jameslouiz
- * Symbols can be optional or required. Symbols required by default
- *
- * Usage examples:
- * currency: ["£", false] - Use false for soft currency validation
- * currency: ["$", false]
- * currency: ["RM", false] - also works with text based symbols such as "RM" - Malaysia Ringgit etc
- *
- * <input class="currencyInput" name="currencyInput">
- *
- * Soft symbol checking
- * currencyInput: {
- * currency: ["$", false]
- * }
- *
- * Strict symbol checking (default)
- * currencyInput: {
- * currency: "$"
- * //OR
- * currency: ["$", true]
- * }
- *
- * Multiple Symbols
- * currencyInput: {
- * currency: "$,£,¢"
- * }
- */
-$.validator.addMethod("currency", function(value, element, param) {
- var isParamString = typeof param === "string",
- symbol = isParamString ? param : param[0],
- soft = isParamString ? true : param[1],
- regex;
-
- symbol = symbol.replace(/,/g, "");
- symbol = soft ? symbol + "]" : symbol + "]?";
- regex = "^[" + symbol + "([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$";
- regex = new RegExp(regex);
- return this.optional(element) || regex.test(value);
-
-}, "Please specify a valid currency");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/dateFA.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/dateFA.js
deleted file mode 100644
index c13e04e4..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/dateFA.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$.validator.addMethod("dateFA", function(value, element) {
- return this.optional(element) || /^[1-4]\d{3}\/((0?[1-6]\/((3[0-1])|([1-2][0-9])|(0?[1-9])))|((1[0-2]|(0?[7-9]))\/(30|([1-2][0-9])|(0?[1-9]))))$/.test(value);
-}, $.validator.messages.date);
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/dateITA.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/dateITA.js
deleted file mode 100644
index ddff8e69..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/dateITA.js
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.
- *
- * @example $.validator.methods.date("01/01/1900")
- * @result true
- *
- * @example $.validator.methods.date("01/13/1990")
- * @result false
- *
- * @example $.validator.methods.date("01.01.1900")
- * @result false
- *
- * @example <input name="pippo" class="{dateITA:true}" />
- * @desc Declares an optional input element whose value must be a valid date.
- *
- * @name $.validator.methods.dateITA
- * @type Boolean
- * @cat Plugins/Validate/Methods
- */
-$.validator.addMethod("dateITA", function(value, element) {
- var check = false,
- re = /^\d{1,2}\/\d{1,2}\/\d{4}$/,
- adata, gg, mm, aaaa, xdata;
- if ( re.test(value)) {
- adata = value.split("/");
- gg = parseInt(adata[0], 10);
- mm = parseInt(adata[1], 10);
- aaaa = parseInt(adata[2], 10);
- xdata = new Date(Date.UTC(aaaa, mm - 1, gg, 12, 0, 0, 0));
- if ( ( xdata.getUTCFullYear() === aaaa ) && ( xdata.getUTCMonth () === mm - 1 ) && ( xdata.getUTCDate() === gg ) ) {
- check = true;
- } else {
- check = false;
- }
- } else {
- check = false;
- }
- return this.optional(element) || check;
-}, $.validator.messages.date);
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/dateNL.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/dateNL.js
deleted file mode 100644
index a3ccc8d9..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/dateNL.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$.validator.addMethod("dateNL", function(value, element) {
- return this.optional(element) || /^(0?[1-9]|[12]\d|3[01])[\.\/\-](0?[1-9]|1[012])[\.\/\-]([12]\d)?(\d\d)$/.test(value);
-}, $.validator.messages.date);
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/extension.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/extension.js
deleted file mode 100644
index 872b434f..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/extension.js
+++ /dev/null
@@ -1,5 +0,0 @@
-// Older "accept" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept
-$.validator.addMethod("extension", function(value, element, param) {
- param = typeof param === "string" ? param.replace(/,/g, "|") : "png|jpe?g|gif";
- return this.optional(element) || value.match(new RegExp("\\.(" + param + ")$", "i"));
-}, $.validator.format("Please enter a value with a valid extension."));
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/giroaccountNL.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/giroaccountNL.js
deleted file mode 100644
index f7ea5429..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/giroaccountNL.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Dutch giro account numbers (not bank numbers) have max 7 digits
- */
-$.validator.addMethod("giroaccountNL", function(value, element) {
- return this.optional(element) || /^[0-9]{1,7}$/.test(value);
-}, "Please specify a valid giro account number");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/iban.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/iban.js
deleted file mode 100644
index 4e3ab20b..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/iban.js
+++ /dev/null
@@ -1,122 +0,0 @@
-/**
- * IBAN is the international bank account number.
- * It has a country - specific format, that is checked here too
- */
-$.validator.addMethod("iban", function(value, element) {
- // some quick simple tests to prevent needless work
- if (this.optional(element)) {
- return true;
- }
-
- // remove spaces and to upper case
- var iban = value.replace(/ /g, "").toUpperCase(),
- ibancheckdigits = "",
- leadingZeroes = true,
- cRest = "",
- cOperator = "",
- countrycode, ibancheck, charAt, cChar, bbanpattern, bbancountrypatterns, ibanregexp, i, p;
-
- // check the country code and find the country specific format
- countrycode = iban.substring(0, 2);
- bbancountrypatterns = {
- "AL": "\\d{8}[\\dA-Z]{16}",
- "AD": "\\d{8}[\\dA-Z]{12}",
- "AT": "\\d{16}",
- "AZ": "[\\dA-Z]{4}\\d{20}",
- "BE": "\\d{12}",
- "BH": "[A-Z]{4}[\\dA-Z]{14}",
- "BA": "\\d{16}",
- "BR": "\\d{23}[A-Z][\\dA-Z]",
- "BG": "[A-Z]{4}\\d{6}[\\dA-Z]{8}",
- "CR": "\\d{17}",
- "HR": "\\d{17}",
- "CY": "\\d{8}[\\dA-Z]{16}",
- "CZ": "\\d{20}",
- "DK": "\\d{14}",
- "DO": "[A-Z]{4}\\d{20}",
- "EE": "\\d{16}",
- "FO": "\\d{14}",
- "FI": "\\d{14}",
- "FR": "\\d{10}[\\dA-Z]{11}\\d{2}",
- "GE": "[\\dA-Z]{2}\\d{16}",
- "DE": "\\d{18}",
- "GI": "[A-Z]{4}[\\dA-Z]{15}",
- "GR": "\\d{7}[\\dA-Z]{16}",
- "GL": "\\d{14}",
- "GT": "[\\dA-Z]{4}[\\dA-Z]{20}",
- "HU": "\\d{24}",
- "IS": "\\d{22}",
- "IE": "[\\dA-Z]{4}\\d{14}",
- "IL": "\\d{19}",
- "IT": "[A-Z]\\d{10}[\\dA-Z]{12}",
- "KZ": "\\d{3}[\\dA-Z]{13}",
- "KW": "[A-Z]{4}[\\dA-Z]{22}",
- "LV": "[A-Z]{4}[\\dA-Z]{13}",
- "LB": "\\d{4}[\\dA-Z]{20}",
- "LI": "\\d{5}[\\dA-Z]{12}",
- "LT": "\\d{16}",
- "LU": "\\d{3}[\\dA-Z]{13}",
- "MK": "\\d{3}[\\dA-Z]{10}\\d{2}",
- "MT": "[A-Z]{4}\\d{5}[\\dA-Z]{18}",
- "MR": "\\d{23}",
- "MU": "[A-Z]{4}\\d{19}[A-Z]{3}",
- "MC": "\\d{10}[\\dA-Z]{11}\\d{2}",
- "MD": "[\\dA-Z]{2}\\d{18}",
- "ME": "\\d{18}",
- "NL": "[A-Z]{4}\\d{10}",
- "NO": "\\d{11}",
- "PK": "[\\dA-Z]{4}\\d{16}",
- "PS": "[\\dA-Z]{4}\\d{21}",
- "PL": "\\d{24}",
- "PT": "\\d{21}",
- "RO": "[A-Z]{4}[\\dA-Z]{16}",
- "SM": "[A-Z]\\d{10}[\\dA-Z]{12}",
- "SA": "\\d{2}[\\dA-Z]{18}",
- "RS": "\\d{18}",
- "SK": "\\d{20}",
- "SI": "\\d{15}",
- "ES": "\\d{20}",
- "SE": "\\d{20}",
- "CH": "\\d{5}[\\dA-Z]{12}",
- "TN": "\\d{20}",
- "TR": "\\d{5}[\\dA-Z]{17}",
- "AE": "\\d{3}\\d{16}",
- "GB": "[A-Z]{4}\\d{14}",
- "VG": "[\\dA-Z]{4}\\d{16}"
- };
-
- bbanpattern = bbancountrypatterns[countrycode];
- // As new countries will start using IBAN in the
- // future, we only check if the countrycode is known.
- // This prevents false negatives, while almost all
- // false positives introduced by this, will be caught
- // by the checksum validation below anyway.
- // Strict checking should return FALSE for unknown
- // countries.
- if (typeof bbanpattern !== "undefined") {
- ibanregexp = new RegExp("^[A-Z]{2}\\d{2}" + bbanpattern + "$", "");
- if (!(ibanregexp.test(iban))) {
- return false; // invalid country specific format
- }
- }
-
- // now check the checksum, first convert to digits
- ibancheck = iban.substring(4, iban.length) + iban.substring(0, 4);
- for (i = 0; i < ibancheck.length; i++) {
- charAt = ibancheck.charAt(i);
- if (charAt !== "0") {
- leadingZeroes = false;
- }
- if (!leadingZeroes) {
- ibancheckdigits += "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(charAt);
- }
- }
-
- // calculate the result of: ibancheckdigits % 97
- for (p = 0; p < ibancheckdigits.length; p++) {
- cChar = ibancheckdigits.charAt(p);
- cOperator = "" + cRest + "" + cChar;
- cRest = cOperator % 97;
- }
- return cRest === 1;
-}, "Please specify a valid IBAN");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/integer.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/integer.js
deleted file mode 100644
index c854b3c0..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/integer.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$.validator.addMethod("integer", function(value, element) {
- return this.optional(element) || /^-?\d+$/.test(value);
-}, "A positive or negative non-decimal number please");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/ipv4.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/ipv4.js
deleted file mode 100644
index 4825e986..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/ipv4.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$.validator.addMethod("ipv4", function(value, element) {
- return this.optional(element) || /^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(value);
-}, "Please enter a valid IP v4 address.");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/ipv6.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/ipv6.js
deleted file mode 100644
index 10f0b622..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/ipv6.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$.validator.addMethod("ipv6", function(value, element) {
- return this.optional(element) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value);
-}, "Please enter a valid IP v6 address.");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/lettersonly.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/lettersonly.js
deleted file mode 100644
index 3ef22106..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/lettersonly.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$.validator.addMethod("lettersonly", function(value, element) {
- return this.optional(element) || /^[a-z]+$/i.test(value);
-}, "Letters only please");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/letterswithbasicpunc.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/letterswithbasicpunc.js
deleted file mode 100644
index b578dee2..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/letterswithbasicpunc.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$.validator.addMethod("letterswithbasicpunc", function(value, element) {
- return this.optional(element) || /^[a-z\-.,()'"\s]+$/i.test(value);
-}, "Letters or punctuation only please");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/mobileNL.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/mobileNL.js
deleted file mode 100644
index 6aafed09..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/mobileNL.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$.validator.addMethod("mobileNL", function(value, element) {
- return this.optional(element) || /^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)6((\s|\s?\-\s?)?[0-9]){8}$/.test(value);
-}, "Please specify a valid mobile number");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/mobileUK.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/mobileUK.js
deleted file mode 100644
index 59b5afa2..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/mobileUK.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/* For UK phone functions, do the following server side processing:
- * Compare original input with this RegEx pattern:
- * ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$
- * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'
- * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.
- * A number of very detailed GB telephone number RegEx patterns can also be found at:
- * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers
- */
-$.validator.addMethod("mobileUK", function(phone_number, element) {
- phone_number = phone_number.replace(/\(|\)|\s+|-/g, "");
- return this.optional(element) || phone_number.length > 9 &&
- phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[1345789]\d{2}|624)\s?\d{3}\s?\d{3})$/);
-}, "Please specify a valid mobile number");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/nieES.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/nieES.js
deleted file mode 100644
index 254c0dab..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/nieES.js
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * The número de identidad de extranjero ( NIE )is a code used to identify the non-nationals in Spain
- */
-$.validator.addMethod( "nieES", function( value ) {
- "use strict";
-
- value = value.toUpperCase();
-
- // Basic format test
- if ( !value.match( "((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)" ) ) {
- return false;
- }
-
- // Test NIE
- //T
- if ( /^[T]{1}/.test( value ) ) {
- return ( value[ 8 ] === /^[T]{1}[A-Z0-9]{8}$/.test( value ) );
- }
-
- //XYZ
- if ( /^[XYZ]{1}/.test( value ) ) {
- return (
- value[ 8 ] === "TRWAGMYFPDXBNJZSQVHLCKE".charAt(
- value.replace( "X", "0" )
- .replace( "Y", "1" )
- .replace( "Z", "2" )
- .substring( 0, 8 ) % 23
- )
- );
- }
-
- return false;
-
-}, "Please specify a valid NIE number." );
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/nifES.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/nifES.js
deleted file mode 100644
index 47657474..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/nifES.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * The Número de Identificación Fiscal ( NIF ) is the way tax identification used in Spain for individuals
- */
-$.validator.addMethod( "nifES", function( value ) {
- "use strict";
-
- value = value.toUpperCase();
-
- // Basic format test
- if ( !value.match("((^[A-Z]{1}[0-9]{7}[A-Z0-9]{1}$|^[T]{1}[A-Z0-9]{8}$)|^[0-9]{8}[A-Z]{1}$)") ) {
- return false;
- }
-
- // Test NIF
- if ( /^[0-9]{8}[A-Z]{1}$/.test( value ) ) {
- return ( "TRWAGMYFPDXBNJZSQVHLCKE".charAt( value.substring( 8, 0 ) % 23 ) === value.charAt( 8 ) );
- }
- // Test specials NIF (starts with K, L or M)
- if ( /^[KLM]{1}/.test( value ) ) {
- return ( value[ 8 ] === String.fromCharCode( 64 ) );
- }
-
- return false;
-
-}, "Please specify a valid NIF number." );
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/notEqualTo.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/notEqualTo.js
deleted file mode 100644
index b9166a89..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/notEqualTo.js
+++ /dev/null
@@ -1,3 +0,0 @@
-jQuery.validator.addMethod( "notEqualTo", function( value, element, param ) {
- return this.optional(element) || !$.validator.methods.equalTo.call( this, value, element, param );
-}, "Please enter a different value, values must not be the same." );
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/nowhitespace.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/nowhitespace.js
deleted file mode 100644
index 3ad62008..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/nowhitespace.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$.validator.addMethod("nowhitespace", function(value, element) {
- return this.optional(element) || /^\S+$/i.test(value);
-}, "No white space please");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/pattern.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/pattern.js
deleted file mode 100644
index 64c8d158..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/pattern.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
-* Return true if the field value matches the given format RegExp
-*
-* @example $.validator.methods.pattern("AR1004",element,/^AR\d{4}$/)
-* @result true
-*
-* @example $.validator.methods.pattern("BR1004",element,/^AR\d{4}$/)
-* @result false
-*
-* @name $.validator.methods.pattern
-* @type Boolean
-* @cat Plugins/Validate/Methods
-*/
-$.validator.addMethod("pattern", function(value, element, param) {
- if (this.optional(element)) {
- return true;
- }
- if (typeof param === "string") {
- param = new RegExp("^(?:" + param + ")$");
- }
- return param.test(value);
-}, "Invalid format.");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/phoneNL.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/phoneNL.js
deleted file mode 100644
index b54d0a4a..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/phoneNL.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
- * Dutch phone numbers have 10 digits (or 11 and start with +31).
- */
-$.validator.addMethod("phoneNL", function(value, element) {
- return this.optional(element) || /^((\+|00(\s|\s?\-\s?)?)31(\s|\s?\-\s?)?(\(0\)[\-\s]?)?|0)[1-9]((\s|\s?\-\s?)?[0-9]){8}$/.test(value);
-}, "Please specify a valid phone number.");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/phoneUK.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/phoneUK.js
deleted file mode 100644
index ae35a06e..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/phoneUK.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/* For UK phone functions, do the following server side processing:
- * Compare original input with this RegEx pattern:
- * ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$
- * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'
- * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.
- * A number of very detailed GB telephone number RegEx patterns can also be found at:
- * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers
- */
-$.validator.addMethod("phoneUK", function(phone_number, element) {
- phone_number = phone_number.replace(/\(|\)|\s+|-/g, "");
- return this.optional(element) || phone_number.length > 9 &&
- phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:\d{2}\)?\s?\d{4}\s?\d{4}|\d{3}\)?\s?\d{3}\s?\d{3,4}|\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3})|\d{5}\)?\s?\d{4,5})$/);
-}, "Please specify a valid phone number");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/phoneUS.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/phoneUS.js
deleted file mode 100644
index 15d0645c..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/phoneUS.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- * matches US phone number format
- *
- * where the area code may not start with 1 and the prefix may not start with 1
- * allows '-' or ' ' as a separator and allows parens around area code
- * some people may want to put a '1' in front of their number
- *
- * 1(212)-999-2345 or
- * 212 999 2344 or
- * 212-999-0983
- *
- * but not
- * 111-123-5434
- * and not
- * 212 123 4567
- */
-$.validator.addMethod("phoneUS", function(phone_number, element) {
- phone_number = phone_number.replace(/\s+/g, "");
- return this.optional(element) || phone_number.length > 9 &&
- phone_number.match(/^(\+?1-?)?(\([2-9]([02-9]\d|1[02-9])\)|[2-9]([02-9]\d|1[02-9]))-?[2-9]([02-9]\d|1[02-9])-?\d{4}$/);
-}, "Please specify a valid phone number");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/phonesUK.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/phonesUK.js
deleted file mode 100644
index 9752cc5c..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/phonesUK.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/* For UK phone functions, do the following server side processing:
- * Compare original input with this RegEx pattern:
- * ^\(?(?:(?:00\)?[\s\-]?\(?|\+)(44)\)?[\s\-]?\(?(?:0\)?[\s\-]?\(?)?|0)([1-9]\d{1,4}\)?[\s\d\-]+)$
- * Extract $1 and set $prefix to '+44<space>' if $1 is '44', otherwise set $prefix to '0'
- * Extract $2 and remove hyphens, spaces and parentheses. Phone number is combined $prefix and $2.
- * A number of very detailed GB telephone number RegEx patterns can also be found at:
- * http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_GB_Telephone_Numbers
- */
-//Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers
-$.validator.addMethod("phonesUK", function(phone_number, element) {
- phone_number = phone_number.replace(/\(|\)|\s+|-/g, "");
- return this.optional(element) || phone_number.length > 9 &&
- phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[1345789]\d{8}|624\d{6})))$/);
-}, "Please specify a valid uk phone number");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postalCodeCA.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postalCodeCA.js
deleted file mode 100644
index 976b316c..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postalCodeCA.js
+++ /dev/null
@@ -1,16 +0,0 @@
-/**
- * Matches a valid Canadian Postal Code
- *
- * @example jQuery.validator.methods.postalCodeCA( "H0H 0H0", element )
- * @result true
- *
- * @example jQuery.validator.methods.postalCodeCA( "H0H0H0", element )
- * @result false
- *
- * @name jQuery.validator.methods.postalCodeCA
- * @type Boolean
- * @cat Plugins/Validate/Methods
- */
-$.validator.addMethod( "postalCodeCA", function( value, element ) {
- return this.optional( element ) || /^[ABCEGHJKLMNPRSTVXY]\d[A-Z] \d[A-Z]\d$/.test( value );
-}, "Please specify a valid postal code" );
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postalcodeBR.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postalcodeBR.js
deleted file mode 100644
index b0062977..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postalcodeBR.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-* Valida CEPs do brasileiros:
-*
-* Formatos aceitos:
-* 99999-999
-* 99.999-999
-* 99999999
-*/
-$.validator.addMethod("postalcodeBR", function(cep_value, element) {
- return this.optional(element) || /^\d{2}.\d{3}-\d{3}?$|^\d{5}-?\d{3}?$/.test( cep_value );
-}, "Informe um CEP válido.");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postalcodeIT.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postalcodeIT.js
deleted file mode 100644
index cae6463d..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postalcodeIT.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Matches Italian postcode (CAP) */
-$.validator.addMethod("postalcodeIT", function(value, element) {
- return this.optional(element) || /^\d{5}$/.test(value);
-}, "Please specify a valid postal code");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postalcodeNL.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postalcodeNL.js
deleted file mode 100644
index e01a95ef..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postalcodeNL.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$.validator.addMethod("postalcodeNL", function(value, element) {
- return this.optional(element) || /^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/.test(value);
-}, "Please specify a valid postal code");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postcodeUK.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postcodeUK.js
deleted file mode 100644
index de141378..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/postcodeUK.js
+++ /dev/null
@@ -1,4 +0,0 @@
-// Matches UK postcode. Does not match to UK Channel Islands that have their own postcodes (non standard UK)
-$.validator.addMethod("postcodeUK", function(value, element) {
- return this.optional(element) || /^((([A-PR-UWYZ][0-9])|([A-PR-UWYZ][0-9][0-9])|([A-PR-UWYZ][A-HK-Y][0-9])|([A-PR-UWYZ][A-HK-Y][0-9][0-9])|([A-PR-UWYZ][0-9][A-HJKSTUW])|([A-PR-UWYZ][A-HK-Y][0-9][ABEHMNPRVWXY]))\s?([0-9][ABD-HJLNP-UW-Z]{2})|(GIR)\s?(0AA))$/i.test(value);
-}, "Please specify a valid UK postcode");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/require_from_group.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/require_from_group.js
deleted file mode 100644
index 41640c80..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/require_from_group.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Lets you say "at least X inputs that match selector Y must be filled."
- *
- * The end result is that neither of these inputs:
- *
- * <input class="productinfo" name="partnumber">
- * <input class="productinfo" name="description">
- *
- * ...will validate unless at least one of them is filled.
- *
- * partnumber: {require_from_group: [1,".productinfo"]},
- * description: {require_from_group: [1,".productinfo"]}
- *
- * options[0]: number of fields that must be filled in the group
- * options[1]: CSS selector that defines the group of conditionally required fields
- */
-$.validator.addMethod("require_from_group", function(value, element, options) {
- var $fields = $(options[1], element.form),
- $fieldsFirst = $fields.eq(0),
- validator = $fieldsFirst.data("valid_req_grp") ? $fieldsFirst.data("valid_req_grp") : $.extend({}, this),
- isValid = $fields.filter(function() {
- return validator.elementValue(this);
- }).length >= options[0];
-
- // Store the cloned validator for future validation
- $fieldsFirst.data("valid_req_grp", validator);
-
- // If element isn't being validated, run each require_from_group field's validation rules
- if (!$(element).data("being_validated")) {
- $fields.data("being_validated", true);
- $fields.each(function() {
- validator.element(this);
- });
- $fields.data("being_validated", false);
- }
- return isValid;
-}, $.validator.format("Please fill at least {0} of these fields."));
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/skip_or_fill_minimum.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/skip_or_fill_minimum.js
deleted file mode 100644
index eaaa7508..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/skip_or_fill_minimum.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Lets you say "either at least X inputs that match selector Y must be filled,
- * OR they must all be skipped (left blank)."
- *
- * The end result, is that none of these inputs:
- *
- * <input class="productinfo" name="partnumber">
- * <input class="productinfo" name="description">
- * <input class="productinfo" name="color">
- *
- * ...will validate unless either at least two of them are filled,
- * OR none of them are.
- *
- * partnumber: {skip_or_fill_minimum: [2,".productinfo"]},
- * description: {skip_or_fill_minimum: [2,".productinfo"]},
- * color: {skip_or_fill_minimum: [2,".productinfo"]}
- *
- * options[0]: number of fields that must be filled in the group
- * options[1]: CSS selector that defines the group of conditionally required fields
- *
- */
-$.validator.addMethod("skip_or_fill_minimum", function(value, element, options) {
- var $fields = $(options[1], element.form),
- $fieldsFirst = $fields.eq(0),
- validator = $fieldsFirst.data("valid_skip") ? $fieldsFirst.data("valid_skip") : $.extend({}, this),
- numberFilled = $fields.filter(function() {
- return validator.elementValue(this);
- }).length,
- isValid = numberFilled === 0 || numberFilled >= options[0];
-
- // Store the cloned validator for future validation
- $fieldsFirst.data("valid_skip", validator);
-
- // If element isn't being validated, run each skip_or_fill_minimum field's validation rules
- if (!$(element).data("being_validated")) {
- $fields.data("being_validated", true);
- $fields.each(function() {
- validator.element(this);
- });
- $fields.data("being_validated", false);
- }
- return isValid;
-}, $.validator.format("Please either skip these fields or fill at least {0} of them."));
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/statesUS.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/statesUS.js
deleted file mode 100644
index 5f5c9ceb..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/statesUS.js
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Validates US States and/or Territories by @jdforsythe
- * Can be case insensitive or require capitalization - default is case insensitive
- * Can include US Territories or not - default does not
- * Can include US Military postal abbreviations (AA, AE, AP) - default does not
- *
- * Note: "States" always includes DC (District of Colombia)
- *
- * Usage examples:
- *
- * This is the default - case insensitive, no territories, no military zones
- * stateInput: {
- * caseSensitive: false,
- * includeTerritories: false,
- * includeMilitary: false
- * }
- *
- * Only allow capital letters, no territories, no military zones
- * stateInput: {
- * caseSensitive: false
- * }
- *
- * Case insensitive, include territories but not military zones
- * stateInput: {
- * includeTerritories: true
- * }
- *
- * Only allow capital letters, include territories and military zones
- * stateInput: {
- * caseSensitive: true,
- * includeTerritories: true,
- * includeMilitary: true
- * }
- *
- *
- *
- */
-
-$.validator.addMethod("stateUS", function(value, element, options) {
- var isDefault = typeof options === "undefined",
- caseSensitive = ( isDefault || typeof options.caseSensitive === "undefined" ) ? false : options.caseSensitive,
- includeTerritories = ( isDefault || typeof options.includeTerritories === "undefined" ) ? false : options.includeTerritories,
- includeMilitary = ( isDefault || typeof options.includeMilitary === "undefined" ) ? false : options.includeMilitary,
- regex;
-
- if (!includeTerritories && !includeMilitary) {
- regex = "^(A[KLRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$";
- } else if (includeTerritories && includeMilitary) {
- regex = "^(A[AEKLPRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$";
- } else if (includeTerritories) {
- regex = "^(A[KLRSZ]|C[AOT]|D[CE]|FL|G[AU]|HI|I[ADLN]|K[SY]|LA|M[ADEINOPST]|N[CDEHJMVY]|O[HKR]|P[AR]|RI|S[CD]|T[NX]|UT|V[AIT]|W[AIVY])$";
- } else {
- regex = "^(A[AEKLPRZ]|C[AOT]|D[CE]|FL|GA|HI|I[ADLN]|K[SY]|LA|M[ADEINOST]|N[CDEHJMVY]|O[HKR]|PA|RI|S[CD]|T[NX]|UT|V[AT]|W[AIVY])$";
- }
-
- regex = caseSensitive ? new RegExp(regex) : new RegExp(regex, "i");
- return this.optional(element) || regex.test(value);
-},
-"Please specify a valid state");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/strippedminlength.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/strippedminlength.js
deleted file mode 100644
index e170f71a..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/strippedminlength.js
+++ /dev/null
@@ -1,4 +0,0 @@
-// TODO check if value starts with <, otherwise don't try stripping anything
-$.validator.addMethod("strippedminlength", function(value, element, param) {
- return $(value).text().length >= param;
-}, $.validator.format("Please enter at least {0} characters"));
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/time.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/time.js
deleted file mode 100644
index 963bdb9b..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/time.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$.validator.addMethod("time", function(value, element) {
- return this.optional(element) || /^([01]\d|2[0-3]|[0-9])(:[0-5]\d){1,2}$/.test(value);
-}, "Please enter a valid time, between 00:00 and 23:59");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/time12h.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/time12h.js
deleted file mode 100644
index a5f61211..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/time12h.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$.validator.addMethod("time12h", function(value, element) {
- return this.optional(element) || /^((0?[1-9]|1[012])(:[0-5]\d){1,2}(\ ?[AP]M))$/i.test(value);
-}, "Please enter a valid time in 12-hour am/pm format");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/url2.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/url2.js
deleted file mode 100644
index 3a5f6f0d..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/url2.js
+++ /dev/null
@@ -1,4 +0,0 @@
-// same as url, but TLD is optional
-$.validator.addMethod("url2", function(value, element) {
- return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
-}, $.validator.messages.url);
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/vinUS.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/vinUS.js
deleted file mode 100644
index 2afd500d..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/vinUS.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/**
- * Return true, if the value is a valid vehicle identification number (VIN).
- *
- * Works with all kind of text inputs.
- *
- * @example <input type="text" size="20" name="VehicleID" class="{required:true,vinUS:true}" />
- * @desc Declares a required input element whose value must be a valid vehicle identification number.
- *
- * @name $.validator.methods.vinUS
- * @type Boolean
- * @cat Plugins/Validate/Methods
- */
-$.validator.addMethod("vinUS", function(v) {
- if (v.length !== 17) {
- return false;
- }
-
- var LL = [ "A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" ],
- VL = [ 1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 7, 9, 2, 3, 4, 5, 6, 7, 8, 9 ],
- FL = [ 8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2 ],
- rs = 0,
- i, n, d, f, cd, cdv;
-
- for (i = 0; i < 17; i++) {
- f = FL[i];
- d = v.slice(i, i + 1);
- if (i === 8) {
- cdv = d;
- }
- if (!isNaN(d)) {
- d *= f;
- } else {
- for (n = 0; n < LL.length; n++) {
- if (d.toUpperCase() === LL[n]) {
- d = VL[n];
- d *= f;
- if (isNaN(cdv) && n === 8) {
- cdv = LL[n];
- }
- break;
- }
- }
- }
- rs += d;
- }
- cd = rs % 11;
- if (cd === 10) {
- cd = "X";
- }
- if (cd === cdv) {
- return true;
- }
- return false;
-}, "The specified vehicle identification number (VIN) is invalid.");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/zipcodeUS.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/zipcodeUS.js
deleted file mode 100644
index b6310689..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/zipcodeUS.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$.validator.addMethod("zipcodeUS", function(value, element) {
- return this.optional(element) || /^\d{5}(-\d{4})?$/.test(value);
-}, "The specified US ZIP Code is invalid");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/ziprange.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/ziprange.js
deleted file mode 100644
index 75b4d176..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/additional/ziprange.js
+++ /dev/null
@@ -1,3 +0,0 @@
-$.validator.addMethod("ziprange", function(value, element) {
- return this.optional(element) || /^90[2-5]\d\{2\}-\d{4}$/.test(value);
-}, "Your ZIP-code must be in the range 902xx-xxxx to 905xx-xxxx");
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/ajax.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/ajax.js
deleted file mode 100644
index 4026ad2f..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/ajax.js
+++ /dev/null
@@ -1,33 +0,0 @@
-// ajax mode: abort
-// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
-// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()
-
-var pendingRequests = {},
- ajax;
-// Use a prefilter if available (1.5+)
-if ( $.ajaxPrefilter ) {
- $.ajaxPrefilter(function( settings, _, xhr ) {
- var port = settings.port;
- if ( settings.mode === "abort" ) {
- if ( pendingRequests[port] ) {
- pendingRequests[port].abort();
- }
- pendingRequests[port] = xhr;
- }
- });
-} else {
- // Proxy ajax
- ajax = $.ajax;
- $.ajax = function( settings ) {
- var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode,
- port = ( "port" in settings ? settings : $.ajaxSettings ).port;
- if ( mode === "abort" ) {
- if ( pendingRequests[port] ) {
- pendingRequests[port].abort();
- }
- pendingRequests[port] = ajax.apply(this, arguments);
- return pendingRequests[port];
- }
- return ajax.apply(this, arguments);
- };
-}
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/core.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/core.js
deleted file mode 100644
index d926ffd3..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/core.js
+++ /dev/null
@@ -1,1346 +0,0 @@
-$.extend($.fn, {
- // http://jqueryvalidation.org/validate/
- validate: function( options ) {
-
- // if nothing is selected, return nothing; can't chain anyway
- if ( !this.length ) {
- if ( options && options.debug && window.console ) {
- console.warn( "Nothing selected, can't validate, returning nothing." );
- }
- return;
- }
-
- // check if a validator for this form was already created
- var validator = $.data( this[ 0 ], "validator" );
- if ( validator ) {
- return validator;
- }
-
- // Add novalidate tag if HTML5.
- this.attr( "novalidate", "novalidate" );
-
- validator = new $.validator( options, this[ 0 ] );
- $.data( this[ 0 ], "validator", validator );
-
- if ( validator.settings.onsubmit ) {
-
- this.on( "click.validate", ":submit", function( event ) {
- if ( validator.settings.submitHandler ) {
- validator.submitButton = event.target;
- }
-
- // allow suppressing validation by adding a cancel class to the submit button
- if ( $( this ).hasClass( "cancel" ) ) {
- validator.cancelSubmit = true;
- }
-
- // allow suppressing validation by adding the html5 formnovalidate attribute to the submit button
- if ( $( this ).attr( "formnovalidate" ) !== undefined ) {
- validator.cancelSubmit = true;
- }
- });
-
- // validate the form on submit
- this.on( "submit.validate", function( event ) {
- if ( validator.settings.debug ) {
- // prevent form submit to be able to see console output
- event.preventDefault();
- }
- function handle() {
- var hidden, result;
- if ( validator.settings.submitHandler ) {
- if ( validator.submitButton ) {
- // insert a hidden input as a replacement for the missing submit button
- hidden = $( "<input type='hidden'/>" )
- .attr( "name", validator.submitButton.name )
- .val( $( validator.submitButton ).val() )
- .appendTo( validator.currentForm );
- }
- result = validator.settings.submitHandler.call( validator, validator.currentForm, event );
- if ( validator.submitButton ) {
- // and clean up afterwards; thanks to no-block-scope, hidden can be referenced
- hidden.remove();
- }
- if ( result !== undefined ) {
- return result;
- }
- return false;
- }
- return true;
- }
-
- // prevent submit for invalid forms or custom submit handlers
- if ( validator.cancelSubmit ) {
- validator.cancelSubmit = false;
- return handle();
- }
- if ( validator.form() ) {
- if ( validator.pendingRequest ) {
- validator.formSubmitted = true;
- return false;
- }
- return handle();
- } else {
- validator.focusInvalid();
- return false;
- }
- });
- }
-
- return validator;
- },
- // http://jqueryvalidation.org/valid/
- valid: function() {
- var valid, validator, errorList;
-
- if ( $( this[ 0 ] ).is( "form" ) ) {
- valid = this.validate().form();
- } else {
- errorList = [];
- valid = true;
- validator = $( this[ 0 ].form ).validate();
- this.each( function() {
- valid = validator.element( this ) && valid;
- errorList = errorList.concat( validator.errorList );
- });
- validator.errorList = errorList;
- }
- return valid;
- },
-
- // http://jqueryvalidation.org/rules/
- rules: function( command, argument ) {
- var element = this[ 0 ],
- settings, staticRules, existingRules, data, param, filtered;
-
- if ( command ) {
- settings = $.data( element.form, "validator" ).settings;
- staticRules = settings.rules;
- existingRules = $.validator.staticRules( element );
- switch ( command ) {
- case "add":
- $.extend( existingRules, $.validator.normalizeRule( argument ) );
- // remove messages from rules, but allow them to be set separately
- delete existingRules.messages;
- staticRules[ element.name ] = existingRules;
- if ( argument.messages ) {
- settings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages );
- }
- break;
- case "remove":
- if ( !argument ) {
- delete staticRules[ element.name ];
- return existingRules;
- }
- filtered = {};
- $.each( argument.split( /\s/ ), function( index, method ) {
- filtered[ method ] = existingRules[ method ];
- delete existingRules[ method ];
- if ( method === "required" ) {
- $( element ).removeAttr( "aria-required" );
- }
- });
- return filtered;
- }
- }
-
- data = $.validator.normalizeRules(
- $.extend(
- {},
- $.validator.classRules( element ),
- $.validator.attributeRules( element ),
- $.validator.dataRules( element ),
- $.validator.staticRules( element )
- ), element );
-
- // make sure required is at front
- if ( data.required ) {
- param = data.required;
- delete data.required;
- data = $.extend( { required: param }, data );
- $( element ).attr( "aria-required", "true" );
- }
-
- // make sure remote is at back
- if ( data.remote ) {
- param = data.remote;
- delete data.remote;
- data = $.extend( data, { remote: param });
- }
-
- return data;
- }
-});
-
-// Custom selectors
-$.extend( $.expr[ ":" ], {
- // http://jqueryvalidation.org/blank-selector/
- blank: function( a ) {
- return !$.trim( "" + $( a ).val() );
- },
- // http://jqueryvalidation.org/filled-selector/
- filled: function( a ) {
- return !!$.trim( "" + $( a ).val() );
- },
- // http://jqueryvalidation.org/unchecked-selector/
- unchecked: function( a ) {
- return !$( a ).prop( "checked" );
- }
-});
-
-// constructor for validator
-$.validator = function( options, form ) {
- this.settings = $.extend( true, {}, $.validator.defaults, options );
- this.currentForm = form;
- this.init();
-};
-
-// http://jqueryvalidation.org/jQuery.validator.format/
-$.validator.format = function( source, params ) {
- if ( arguments.length === 1 ) {
- return function() {
- var args = $.makeArray( arguments );
- args.unshift( source );
- return $.validator.format.apply( this, args );
- };
- }
- if ( arguments.length > 2 && params.constructor !== Array ) {
- params = $.makeArray( arguments ).slice( 1 );
- }
- if ( params.constructor !== Array ) {
- params = [ params ];
- }
- $.each( params, function( i, n ) {
- source = source.replace( new RegExp( "\\{" + i + "\\}", "g" ), function() {
- return n;
- });
- });
- return source;
-};
-
-$.extend( $.validator, {
-
- defaults: {
- messages: {},
- groups: {},
- rules: {},
- errorClass: "error",
- validClass: "valid",
- errorElement: "label",
- focusCleanup: false,
- focusInvalid: true,
- errorContainer: $( [] ),
- errorLabelContainer: $( [] ),
- onsubmit: true,
- ignore: ":hidden",
- ignoreTitle: false,
- onfocusin: function( element ) {
- this.lastActive = element;
-
- // Hide error label and remove error class on focus if enabled
- if ( this.settings.focusCleanup ) {
- if ( this.settings.unhighlight ) {
- this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
- }
- this.hideThese( this.errorsFor( element ) );
- }
- },
- onfocusout: function( element ) {
- if ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) {
- this.element( element );
- }
- },
- onkeyup: function( element, event ) {
- // Avoid revalidate the field when pressing one of the following keys
- // Shift => 16
- // Ctrl => 17
- // Alt => 18
- // Caps lock => 20
- // End => 35
- // Home => 36
- // Left arrow => 37
- // Up arrow => 38
- // Right arrow => 39
- // Down arrow => 40
- // Insert => 45
- // Num lock => 144
- // AltGr key => 225
- var excludedKeys = [
- 16, 17, 18, 20, 35, 36, 37,
- 38, 39, 40, 45, 144, 225
- ];
-
- if ( event.which === 9 && this.elementValue( element ) === "" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) {
- return;
- } else if ( element.name in this.submitted || element === this.lastElement ) {
- this.element( element );
- }
- },
- onclick: function( element ) {
- // click on selects, radiobuttons and checkboxes
- if ( element.name in this.submitted ) {
- this.element( element );
-
- // or option elements, check parent select in that case
- } else if ( element.parentNode.name in this.submitted ) {
- this.element( element.parentNode );
- }
- },
- highlight: function( element, errorClass, validClass ) {
- if ( element.type === "radio" ) {
- this.findByName( element.name ).addClass( errorClass ).removeClass( validClass );
- } else {
- $( element ).addClass( errorClass ).removeClass( validClass );
- }
- },
- unhighlight: function( element, errorClass, validClass ) {
- if ( element.type === "radio" ) {
- this.findByName( element.name ).removeClass( errorClass ).addClass( validClass );
- } else {
- $( element ).removeClass( errorClass ).addClass( validClass );
- }
- }
- },
-
- // http://jqueryvalidation.org/jQuery.validator.setDefaults/
- setDefaults: function( settings ) {
- $.extend( $.validator.defaults, settings );
- },
-
- messages: {
- required: "This field is required.",
- remote: "Please fix this field.",
- email: "Please enter a valid email address.",
- url: "Please enter a valid URL.",
- date: "Please enter a valid date.",
- dateISO: "Please enter a valid date ( ISO ).",
- number: "Please enter a valid number.",
- digits: "Please enter only digits.",
- creditcard: "Please enter a valid credit card number.",
- equalTo: "Please enter the same value again.",
- maxlength: $.validator.format( "Please enter no more than {0} characters." ),
- minlength: $.validator.format( "Please enter at least {0} characters." ),
- rangelength: $.validator.format( "Please enter a value between {0} and {1} characters long." ),
- range: $.validator.format( "Please enter a value between {0} and {1}." ),
- max: $.validator.format( "Please enter a value less than or equal to {0}." ),
- min: $.validator.format( "Please enter a value greater than or equal to {0}." )
- },
-
- autoCreateRanges: false,
-
- prototype: {
-
- init: function() {
- this.labelContainer = $( this.settings.errorLabelContainer );
- this.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm );
- this.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer );
- this.submitted = {};
- this.valueCache = {};
- this.pendingRequest = 0;
- this.pending = {};
- this.invalid = {};
- this.reset();
-
- var groups = ( this.groups = {} ),
- rules;
- $.each( this.settings.groups, function( key, value ) {
- if ( typeof value === "string" ) {
- value = value.split( /\s/ );
- }
- $.each( value, function( index, name ) {
- groups[ name ] = key;
- });
- });
- rules = this.settings.rules;
- $.each( rules, function( key, value ) {
- rules[ key ] = $.validator.normalizeRule( value );
- });
-
- function delegate( event ) {
- var validator = $.data( this.form, "validator" ),
- eventType = "on" + event.type.replace( /^validate/, "" ),
- settings = validator.settings;
- if ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) {
- settings[ eventType ].call( validator, this, event );
- }
- }
-
- $( this.currentForm )
- .on( "focusin.validate focusout.validate keyup.validate",
- ":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], " +
- "[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], " +
- "[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], " +
- "[type='radio'], [type='checkbox']", delegate)
- // Support: Chrome, oldIE
- // "select" is provided as event.target when clicking a option
- .on("click.validate", "select, option, [type='radio'], [type='checkbox']", delegate);
-
- if ( this.settings.invalidHandler ) {
- $( this.currentForm ).on( "invalid-form.validate", this.settings.invalidHandler );
- }
-
- // Add aria-required to any Static/Data/Class required fields before first validation
- // Screen readers require this attribute to be present before the initial submission http://www.w3.org/TR/WCAG-TECHS/ARIA2.html
- $( this.currentForm ).find( "[required], [data-rule-required], .required" ).attr( "aria-required", "true" );
- },
-
- // http://jqueryvalidation.org/Validator.form/
- form: function() {
- this.checkForm();
- $.extend( this.submitted, this.errorMap );
- this.invalid = $.extend({}, this.errorMap );
- if ( !this.valid() ) {
- $( this.currentForm ).triggerHandler( "invalid-form", [ this ]);
- }
- this.showErrors();
- return this.valid();
- },
-
- checkForm: function() {
- this.prepareForm();
- for ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) {
- this.check( elements[ i ] );
- }
- return this.valid();
- },
-
- // http://jqueryvalidation.org/Validator.element/
- element: function( element ) {
- var cleanElement = this.clean( element ),
- checkElement = this.validationTargetFor( cleanElement ),
- result = true;
-
- this.lastElement = checkElement;
-
- if ( checkElement === undefined ) {
- delete this.invalid[ cleanElement.name ];
- } else {
- this.prepareElement( checkElement );
- this.currentElements = $( checkElement );
-
- result = this.check( checkElement ) !== false;
- if ( result ) {
- delete this.invalid[ checkElement.name ];
- } else {
- this.invalid[ checkElement.name ] = true;
- }
- }
- // Add aria-invalid status for screen readers
- $( element ).attr( "aria-invalid", !result );
-
- if ( !this.numberOfInvalids() ) {
- // Hide error containers on last error
- this.toHide = this.toHide.add( this.containers );
- }
- this.showErrors();
- return result;
- },
-
- // http://jqueryvalidation.org/Validator.showErrors/
- showErrors: function( errors ) {
- if ( errors ) {
- // add items to error list and map
- $.extend( this.errorMap, errors );
- this.errorList = [];
- for ( var name in errors ) {
- this.errorList.push({
- message: errors[ name ],
- element: this.findByName( name )[ 0 ]
- });
- }
- // remove items from success list
- this.successList = $.grep( this.successList, function( element ) {
- return !( element.name in errors );
- });
- }
- if ( this.settings.showErrors ) {
- this.settings.showErrors.call( this, this.errorMap, this.errorList );
- } else {
- this.defaultShowErrors();
- }
- },
-
- // http://jqueryvalidation.org/Validator.resetForm/
- resetForm: function() {
- if ( $.fn.resetForm ) {
- $( this.currentForm ).resetForm();
- }
- this.submitted = {};
- this.lastElement = null;
- this.prepareForm();
- this.hideErrors();
- var i, elements = this.elements()
- .removeData( "previousValue" )
- .removeAttr( "aria-invalid" );
-
- if ( this.settings.unhighlight ) {
- for ( i = 0; elements[ i ]; i++ ) {
- this.settings.unhighlight.call( this, elements[ i ],
- this.settings.errorClass, "" );
- }
- } else {
- elements.removeClass( this.settings.errorClass );
- }
- },
-
- numberOfInvalids: function() {
- return this.objectLength( this.invalid );
- },
-
- objectLength: function( obj ) {
- /* jshint unused: false */
- var count = 0,
- i;
- for ( i in obj ) {
- count++;
- }
- return count;
- },
-
- hideErrors: function() {
- this.hideThese( this.toHide );
- },
-
- hideThese: function( errors ) {
- errors.not( this.containers ).text( "" );
- this.addWrapper( errors ).hide();
- },
-
- valid: function() {
- return this.size() === 0;
- },
-
- size: function() {
- return this.errorList.length;
- },
-
- focusInvalid: function() {
- if ( this.settings.focusInvalid ) {
- try {
- $( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [])
- .filter( ":visible" )
- .focus()
- // manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find
- .trigger( "focusin" );
- } catch ( e ) {
- // ignore IE throwing errors when focusing hidden elements
- }
- }
- },
-
- findLastActive: function() {
- var lastActive = this.lastActive;
- return lastActive && $.grep( this.errorList, function( n ) {
- return n.element.name === lastActive.name;
- }).length === 1 && lastActive;
- },
-
- elements: function() {
- var validator = this,
- rulesCache = {};
-
- // select all valid inputs inside the form (no submit or reset buttons)
- return $( this.currentForm )
- .find( "input, select, textarea" )
- .not( ":submit, :reset, :image, :disabled" )
- .not( this.settings.ignore )
- .filter( function() {
- if ( !this.name && validator.settings.debug && window.console ) {
- console.error( "%o has no name assigned", this );
- }
-
- // select only the first element for each name, and only those with rules specified
- if ( this.name in rulesCache || !validator.objectLength( $( this ).rules() ) ) {
- return false;
- }
-
- rulesCache[ this.name ] = true;
- return true;
- });
- },
-
- clean: function( selector ) {
- return $( selector )[ 0 ];
- },
-
- errors: function() {
- var errorClass = this.settings.errorClass.split( " " ).join( "." );
- return $( this.settings.errorElement + "." + errorClass, this.errorContext );
- },
-
- reset: function() {
- this.successList = [];
- this.errorList = [];
- this.errorMap = {};
- this.toShow = $( [] );
- this.toHide = $( [] );
- this.currentElements = $( [] );
- },
-
- prepareForm: function() {
- this.reset();
- this.toHide = this.errors().add( this.containers );
- },
-
- prepareElement: function( element ) {
- this.reset();
- this.toHide = this.errorsFor( element );
- },
-
- elementValue: function( element ) {
- var val,
- $element = $( element ),
- type = element.type;
-
- if ( type === "radio" || type === "checkbox" ) {
- return this.findByName( element.name ).filter(":checked").val();
- } else if ( type === "number" && typeof element.validity !== "undefined" ) {
- return element.validity.badInput ? false : $element.val();
- }
-
- val = $element.val();
- if ( typeof val === "string" ) {
- return val.replace(/\r/g, "" );
- }
- return val;
- },
-
- check: function( element ) {
- element = this.validationTargetFor( this.clean( element ) );
-
- var rules = $( element ).rules(),
- rulesCount = $.map( rules, function( n, i ) {
- return i;
- }).length,
- dependencyMismatch = false,
- val = this.elementValue( element ),
- result, method, rule;
-
- for ( method in rules ) {
- rule = { method: method, parameters: rules[ method ] };
- try {
-
- result = $.validator.methods[ method ].call( this, val, element, rule.parameters );
-
- // if a method indicates that the field is optional and therefore valid,
- // don't mark it as valid when there are no other rules
- if ( result === "dependency-mismatch" && rulesCount === 1 ) {
- dependencyMismatch = true;
- continue;
- }
- dependencyMismatch = false;
-
- if ( result === "pending" ) {
- this.toHide = this.toHide.not( this.errorsFor( element ) );
- return;
- }
-
- if ( !result ) {
- this.formatAndAdd( element, rule );
- return false;
- }
- } catch ( e ) {
- if ( this.settings.debug && window.console ) {
- console.log( "Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method.", e );
- }
- if ( e instanceof TypeError ) {
- e.message += ". Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method.";
- }
-
- throw e;
- }
- }
- if ( dependencyMismatch ) {
- return;
- }
- if ( this.objectLength( rules ) ) {
- this.successList.push( element );
- }
- return true;
- },
-
- // return the custom message for the given element and validation method
- // specified in the element's HTML5 data attribute
- // return the generic message if present and no method specific message is present
- customDataMessage: function( element, method ) {
- return $( element ).data( "msg" + method.charAt( 0 ).toUpperCase() +
- method.substring( 1 ).toLowerCase() ) || $( element ).data( "msg" );
- },
-
- // return the custom message for the given element name and validation method
- customMessage: function( name, method ) {
- var m = this.settings.messages[ name ];
- return m && ( m.constructor === String ? m : m[ method ]);
- },
-
- // return the first defined argument, allowing empty strings
- findDefined: function() {
- for ( var i = 0; i < arguments.length; i++) {
- if ( arguments[ i ] !== undefined ) {
- return arguments[ i ];
- }
- }
- return undefined;
- },
-
- defaultMessage: function( element, method ) {
- return this.findDefined(
- this.customMessage( element.name, method ),
- this.customDataMessage( element, method ),
- // title is never undefined, so handle empty string as undefined
- !this.settings.ignoreTitle && element.title || undefined,
- $.validator.messages[ method ],
- "<strong>Warning: No message defined for " + element.name + "</strong>"
- );
- },
-
- formatAndAdd: function( element, rule ) {
- var message = this.defaultMessage( element, rule.method ),
- theregex = /\$?\{(\d+)\}/g;
- if ( typeof message === "function" ) {
- message = message.call( this, rule.parameters, element );
- } else if ( theregex.test( message ) ) {
- message = $.validator.format( message.replace( theregex, "{$1}" ), rule.parameters );
- }
- this.errorList.push({
- message: message,
- element: element,
- method: rule.method
- });
-
- this.errorMap[ element.name ] = message;
- this.submitted[ element.name ] = message;
- },
-
- addWrapper: function( toToggle ) {
- if ( this.settings.wrapper ) {
- toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
- }
- return toToggle;
- },
-
- defaultShowErrors: function() {
- var i, elements, error;
- for ( i = 0; this.errorList[ i ]; i++ ) {
- error = this.errorList[ i ];
- if ( this.settings.highlight ) {
- this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
- }
- this.showLabel( error.element, error.message );
- }
- if ( this.errorList.length ) {
- this.toShow = this.toShow.add( this.containers );
- }
- if ( this.settings.success ) {
- for ( i = 0; this.successList[ i ]; i++ ) {
- this.showLabel( this.successList[ i ] );
- }
- }
- if ( this.settings.unhighlight ) {
- for ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) {
- this.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass );
- }
- }
- this.toHide = this.toHide.not( this.toShow );
- this.hideErrors();
- this.addWrapper( this.toShow ).show();
- },
-
- validElements: function() {
- return this.currentElements.not( this.invalidElements() );
- },
-
- invalidElements: function() {
- return $( this.errorList ).map(function() {
- return this.element;
- });
- },
-
- showLabel: function( element, message ) {
- var place, group, errorID,
- error = this.errorsFor( element ),
- elementID = this.idOrName( element ),
- describedBy = $( element ).attr( "aria-describedby" );
- if ( error.length ) {
- // refresh error/success class
- error.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );
- // replace message on existing label
- error.html( message );
- } else {
- // create error element
- error = $( "<" + this.settings.errorElement + ">" )
- .attr( "id", elementID + "-error" )
- .addClass( this.settings.errorClass )
- .html( message || "" );
-
- // Maintain reference to the element to be placed into the DOM
- place = error;
- if ( this.settings.wrapper ) {
- // make sure the element is visible, even in IE
- // actually showing the wrapped element is handled elsewhere
- place = error.hide().show().wrap( "<" + this.settings.wrapper + "/>" ).parent();
- }
- if ( this.labelContainer.length ) {
- this.labelContainer.append( place );
- } else if ( this.settings.errorPlacement ) {
- this.settings.errorPlacement( place, $( element ) );
- } else {
- place.insertAfter( element );
- }
-
- // Link error back to the element
- if ( error.is( "label" ) ) {
- // If the error is a label, then associate using 'for'
- error.attr( "for", elementID );
- } else if ( error.parents( "label[for='" + elementID + "']" ).length === 0 ) {
- // If the element is not a child of an associated label, then it's necessary
- // to explicitly apply aria-describedby
-
- errorID = error.attr( "id" ).replace( /(:|\.|\[|\]|\$)/g, "\\$1");
- // Respect existing non-error aria-describedby
- if ( !describedBy ) {
- describedBy = errorID;
- } else if ( !describedBy.match( new RegExp( "\\b" + errorID + "\\b" ) ) ) {
- // Add to end of list if not already present
- describedBy += " " + errorID;
- }
- $( element ).attr( "aria-describedby", describedBy );
-
- // If this element is grouped, then assign to all elements in the same group
- group = this.groups[ element.name ];
- if ( group ) {
- $.each( this.groups, function( name, testgroup ) {
- if ( testgroup === group ) {
- $( "[name='" + name + "']", this.currentForm )
- .attr( "aria-describedby", error.attr( "id" ) );
- }
- });
- }
- }
- }
- if ( !message && this.settings.success ) {
- error.text( "" );
- if ( typeof this.settings.success === "string" ) {
- error.addClass( this.settings.success );
- } else {
- this.settings.success( error, element );
- }
- }
- this.toShow = this.toShow.add( error );
- },
-
- errorsFor: function( element ) {
- var name = this.idOrName( element ),
- describer = $( element ).attr( "aria-describedby" ),
- selector = "label[for='" + name + "'], label[for='" + name + "'] *";
-
- // aria-describedby should directly reference the error element
- if ( describer ) {
- selector = selector + ", #" + describer.replace( /\s+/g, ", #" );
- }
- return this
- .errors()
- .filter( selector );
- },
-
- idOrName: function( element ) {
- return this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.id || element.name );
- },
-
- validationTargetFor: function( element ) {
-
- // If radio/checkbox, validate first element in group instead
- if ( this.checkable( element ) ) {
- element = this.findByName( element.name );
- }
-
- // Always apply ignore filter
- return $( element ).not( this.settings.ignore )[ 0 ];
- },
-
- checkable: function( element ) {
- return ( /radio|checkbox/i ).test( element.type );
- },
-
- findByName: function( name ) {
- return $( this.currentForm ).find( "[name='" + name + "']" );
- },
-
- getLength: function( value, element ) {
- switch ( element.nodeName.toLowerCase() ) {
- case "select":
- return $( "option:selected", element ).length;
- case "input":
- if ( this.checkable( element ) ) {
- return this.findByName( element.name ).filter( ":checked" ).length;
- }
- }
- return value.length;
- },
-
- depend: function( param, element ) {
- return this.dependTypes[typeof param] ? this.dependTypes[typeof param]( param, element ) : true;
- },
-
- dependTypes: {
- "boolean": function( param ) {
- return param;
- },
- "string": function( param, element ) {
- return !!$( param, element.form ).length;
- },
- "function": function( param, element ) {
- return param( element );
- }
- },
-
- optional: function( element ) {
- var val = this.elementValue( element );
- return !$.validator.methods.required.call( this, val, element ) && "dependency-mismatch";
- },
-
- startRequest: function( element ) {
- if ( !this.pending[ element.name ] ) {
- this.pendingRequest++;
- this.pending[ element.name ] = true;
- }
- },
-
- stopRequest: function( element, valid ) {
- this.pendingRequest--;
- // sometimes synchronization fails, make sure pendingRequest is never < 0
- if ( this.pendingRequest < 0 ) {
- this.pendingRequest = 0;
- }
- delete this.pending[ element.name ];
- if ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {
- $( this.currentForm ).submit();
- this.formSubmitted = false;
- } else if (!valid && this.pendingRequest === 0 && this.formSubmitted ) {
- $( this.currentForm ).triggerHandler( "invalid-form", [ this ]);
- this.formSubmitted = false;
- }
- },
-
- previousValue: function( element ) {
- return $.data( element, "previousValue" ) || $.data( element, "previousValue", {
- old: null,
- valid: true,
- message: this.defaultMessage( element, "remote" )
- });
- },
-
- // cleans up all forms and elements, removes validator-specific events
- destroy: function() {
- this.resetForm();
-
- $( this.currentForm )
- .off( ".validate" )
- .removeData( "validator" );
- }
-
- },
-
- classRuleSettings: {
- required: { required: true },
- email: { email: true },
- url: { url: true },
- date: { date: true },
- dateISO: { dateISO: true },
- number: { number: true },
- digits: { digits: true },
- creditcard: { creditcard: true }
- },
-
- addClassRules: function( className, rules ) {
- if ( className.constructor === String ) {
- this.classRuleSettings[ className ] = rules;
- } else {
- $.extend( this.classRuleSettings, className );
- }
- },
-
- classRules: function( element ) {
- var rules = {},
- classes = $( element ).attr( "class" );
-
- if ( classes ) {
- $.each( classes.split( " " ), function() {
- if ( this in $.validator.classRuleSettings ) {
- $.extend( rules, $.validator.classRuleSettings[ this ]);
- }
- });
- }
- return rules;
- },
-
- normalizeAttributeRule: function( rules, type, method, value ) {
-
- // convert the value to a number for number inputs, and for text for backwards compability
- // allows type="date" and others to be compared as strings
- if ( /min|max/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) {
- value = Number( value );
-
- // Support Opera Mini, which returns NaN for undefined minlength
- if ( isNaN( value ) ) {
- value = undefined;
- }
- }
-
- if ( value || value === 0 ) {
- rules[ method ] = value;
- } else if ( type === method && type !== "range" ) {
-
- // exception: the jquery validate 'range' method
- // does not test for the html5 'range' type
- rules[ method ] = true;
- }
- },
-
- attributeRules: function( element ) {
- var rules = {},
- $element = $( element ),
- type = element.getAttribute( "type" ),
- method, value;
-
- for ( method in $.validator.methods ) {
-
- // support for <input required> in both html5 and older browsers
- if ( method === "required" ) {
- value = element.getAttribute( method );
-
- // Some browsers return an empty string for the required attribute
- // and non-HTML5 browsers might have required="" markup
- if ( value === "" ) {
- value = true;
- }
-
- // force non-HTML5 browsers to return bool
- value = !!value;
- } else {
- value = $element.attr( method );
- }
-
- this.normalizeAttributeRule( rules, type, method, value );
- }
-
- // maxlength may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs
- if ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) {
- delete rules.maxlength;
- }
-
- return rules;
- },
-
- dataRules: function( element ) {
- var rules = {},
- $element = $( element ),
- type = element.getAttribute( "type" ),
- method, value;
-
- for ( method in $.validator.methods ) {
- value = $element.data( "rule" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() );
- this.normalizeAttributeRule( rules, type, method, value );
- }
- return rules;
- },
-
- staticRules: function( element ) {
- var rules = {},
- validator = $.data( element.form, "validator" );
-
- if ( validator.settings.rules ) {
- rules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {};
- }
- return rules;
- },
-
- normalizeRules: function( rules, element ) {
- // handle dependency check
- $.each( rules, function( prop, val ) {
- // ignore rule when param is explicitly false, eg. required:false
- if ( val === false ) {
- delete rules[ prop ];
- return;
- }
- if ( val.param || val.depends ) {
- var keepRule = true;
- switch ( typeof val.depends ) {
- case "string":
- keepRule = !!$( val.depends, element.form ).length;
- break;
- case "function":
- keepRule = val.depends.call( element, element );
- break;
- }
- if ( keepRule ) {
- rules[ prop ] = val.param !== undefined ? val.param : true;
- } else {
- delete rules[ prop ];
- }
- }
- });
-
- // evaluate parameters
- $.each( rules, function( rule, parameter ) {
- rules[ rule ] = $.isFunction( parameter ) ? parameter( element ) : parameter;
- });
-
- // clean number parameters
- $.each([ "minlength", "maxlength" ], function() {
- if ( rules[ this ] ) {
- rules[ this ] = Number( rules[ this ] );
- }
- });
- $.each([ "rangelength", "range" ], function() {
- var parts;
- if ( rules[ this ] ) {
- if ( $.isArray( rules[ this ] ) ) {
- rules[ this ] = [ Number( rules[ this ][ 0 ]), Number( rules[ this ][ 1 ] ) ];
- } else if ( typeof rules[ this ] === "string" ) {
- parts = rules[ this ].replace(/[\[\]]/g, "" ).split( /[\s,]+/ );
- rules[ this ] = [ Number( parts[ 0 ]), Number( parts[ 1 ] ) ];
- }
- }
- });
-
- if ( $.validator.autoCreateRanges ) {
- // auto-create ranges
- if ( rules.min != null && rules.max != null ) {
- rules.range = [ rules.min, rules.max ];
- delete rules.min;
- delete rules.max;
- }
- if ( rules.minlength != null && rules.maxlength != null ) {
- rules.rangelength = [ rules.minlength, rules.maxlength ];
- delete rules.minlength;
- delete rules.maxlength;
- }
- }
-
- return rules;
- },
-
- // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
- normalizeRule: function( data ) {
- if ( typeof data === "string" ) {
- var transformed = {};
- $.each( data.split( /\s/ ), function() {
- transformed[ this ] = true;
- });
- data = transformed;
- }
- return data;
- },
-
- // http://jqueryvalidation.org/jQuery.validator.addMethod/
- addMethod: function( name, method, message ) {
- $.validator.methods[ name ] = method;
- $.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ];
- if ( method.length < 3 ) {
- $.validator.addClassRules( name, $.validator.normalizeRule( name ) );
- }
- },
-
- methods: {
-
- // http://jqueryvalidation.org/required-method/
- required: function( value, element, param ) {
- // check if dependency is met
- if ( !this.depend( param, element ) ) {
- return "dependency-mismatch";
- }
- if ( element.nodeName.toLowerCase() === "select" ) {
- // could be an array for select-multiple or a string, both are fine this way
- var val = $( element ).val();
- return val && val.length > 0;
- }
- if ( this.checkable( element ) ) {
- return this.getLength( value, element ) > 0;
- }
- return value.length > 0;
- },
-
- // http://jqueryvalidation.org/email-method/
- email: function( value, element ) {
- // From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address
- // Retrieved 2014-01-14
- // If you have a problem with this implementation, report a bug against the above spec
- // Or use custom methods to implement your own email validation
- return this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value );
- },
-
- // http://jqueryvalidation.org/url-method/
- url: function( value, element ) {
-
- // Copyright (c) 2010-2013 Diego Perini, MIT licensed
- // https://gist.github.com/dperini/729294
- // see also https://mathiasbynens.be/demo/url-regex
- // modified to allow protocol-relative URLs
- return this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i.test( value );
- },
-
- // http://jqueryvalidation.org/date-method/
- date: function( value, element ) {
- return this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() );
- },
-
- // http://jqueryvalidation.org/dateISO-method/
- dateISO: function( value, element ) {
- return this.optional( element ) || /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test( value );
- },
-
- // http://jqueryvalidation.org/number-method/
- number: function( value, element ) {
- return this.optional( element ) || /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test( value );
- },
-
- // http://jqueryvalidation.org/digits-method/
- digits: function( value, element ) {
- return this.optional( element ) || /^\d+$/.test( value );
- },
-
- // http://jqueryvalidation.org/creditcard-method/
- // based on http://en.wikipedia.org/wiki/Luhn_algorithm
- creditcard: function( value, element ) {
- if ( this.optional( element ) ) {
- return "dependency-mismatch";
- }
- // accept only spaces, digits and dashes
- if ( /[^0-9 \-]+/.test( value ) ) {
- return false;
- }
- var nCheck = 0,
- nDigit = 0,
- bEven = false,
- n, cDigit;
-
- value = value.replace( /\D/g, "" );
-
- // Basing min and max length on
- // http://developer.ean.com/general_info/Valid_Credit_Card_Types
- if ( value.length < 13 || value.length > 19 ) {
- return false;
- }
-
- for ( n = value.length - 1; n >= 0; n--) {
- cDigit = value.charAt( n );
- nDigit = parseInt( cDigit, 10 );
- if ( bEven ) {
- if ( ( nDigit *= 2 ) > 9 ) {
- nDigit -= 9;
- }
- }
- nCheck += nDigit;
- bEven = !bEven;
- }
-
- return ( nCheck % 10 ) === 0;
- },
-
- // http://jqueryvalidation.org/minlength-method/
- minlength: function( value, element, param ) {
- var length = $.isArray( value ) ? value.length : this.getLength( value, element );
- return this.optional( element ) || length >= param;
- },
-
- // http://jqueryvalidation.org/maxlength-method/
- maxlength: function( value, element, param ) {
- var length = $.isArray( value ) ? value.length : this.getLength( value, element );
- return this.optional( element ) || length <= param;
- },
-
- // http://jqueryvalidation.org/rangelength-method/
- rangelength: function( value, element, param ) {
- var length = $.isArray( value ) ? value.length : this.getLength( value, element );
- return this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] );
- },
-
- // http://jqueryvalidation.org/min-method/
- min: function( value, element, param ) {
- return this.optional( element ) || value >= param;
- },
-
- // http://jqueryvalidation.org/max-method/
- max: function( value, element, param ) {
- return this.optional( element ) || value <= param;
- },
-
- // http://jqueryvalidation.org/range-method/
- range: function( value, element, param ) {
- return this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] );
- },
-
- // http://jqueryvalidation.org/equalTo-method/
- equalTo: function( value, element, param ) {
- // bind to the blur event of the target in order to revalidate whenever the target field is updated
- // TODO find a way to bind the event just once, avoiding the unbind-rebind overhead
- var target = $( param );
- if ( this.settings.onfocusout ) {
- target.off( ".validate-equalTo" ).on( "blur.validate-equalTo", function() {
- $( element ).valid();
- });
- }
- return value === target.val();
- },
-
- // http://jqueryvalidation.org/remote-method/
- remote: function( value, element, param ) {
- if ( this.optional( element ) ) {
- return "dependency-mismatch";
- }
-
- var previous = this.previousValue( element ),
- validator, data;
-
- if (!this.settings.messages[ element.name ] ) {
- this.settings.messages[ element.name ] = {};
- }
- previous.originalMessage = this.settings.messages[ element.name ].remote;
- this.settings.messages[ element.name ].remote = previous.message;
-
- param = typeof param === "string" && { url: param } || param;
-
- if ( previous.old === value ) {
- return previous.valid;
- }
-
- previous.old = value;
- validator = this;
- this.startRequest( element );
- data = {};
- data[ element.name ] = value;
- $.ajax( $.extend( true, {
- mode: "abort",
- port: "validate" + element.name,
- dataType: "json",
- data: data,
- context: validator.currentForm,
- success: function( response ) {
- var valid = response === true || response === "true",
- errors, message, submitted;
-
- validator.settings.messages[ element.name ].remote = previous.originalMessage;
- if ( valid ) {
- submitted = validator.formSubmitted;
- validator.prepareElement( element );
- validator.formSubmitted = submitted;
- validator.successList.push( element );
- delete validator.invalid[ element.name ];
- validator.showErrors();
- } else {
- errors = {};
- message = response || validator.defaultMessage( element, "remote" );
- errors[ element.name ] = previous.message = $.isFunction( message ) ? message( value ) : message;
- validator.invalid[ element.name ] = true;
- validator.showErrors( errors );
- }
- previous.valid = valid;
- validator.stopRequest( element, valid );
- }
- }, param ) );
- return "pending";
- }
- }
-
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ar.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ar.js
deleted file mode 100644
index 819a8c83..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ar.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: AR (Arabic; العربية)
- */
-$.extend($.validator.messages, {
- required: "هذا الحقل إلزامي",
- remote: "يرجى تصحيح هذا الحقل للمتابعة",
- email: "رجاء إدخال عنوان بريد إلكتروني صحيح",
- url: "رجاء إدخال عنوان موقع إلكتروني صحيح",
- date: "رجاء إدخال تاريخ صحيح",
- dateISO: "رجاء إدخال تاريخ صحيح (ISO)",
- number: "رجاء إدخال عدد بطريقة صحيحة",
- digits: "رجاء إدخال أرقام Ùقط",
- creditcard: "رجاء إدخال رقم بطاقة ائتمان صحيح",
- equalTo: "رجاء إدخال Ù†Ùس القيمة",
- extension: "رجاء إدخال مل٠بامتداد مواÙÙ‚ عليه",
- maxlength: $.validator.format("الحد الأقصى لعدد الحرو٠هو {0}"),
- minlength: $.validator.format("الحد الأدنى لعدد الحرو٠هو {0}"),
- rangelength: $.validator.format("عدد الحرو٠يجب أن يكون بين {0} و {1}"),
- range: $.validator.format("رجاء إدخال عدد قيمته بين {0} و {1}"),
- max: $.validator.format("رجاء إدخال عدد أقل من أو يساوي (0}"),
- min: $.validator.format("رجاء إدخال عدد أكبر من أو يساوي (0}")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_bg.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_bg.js
deleted file mode 100644
index 5880e3cb..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_bg.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: BG (Bulgarian; българÑки език)
- */
-$.extend($.validator.messages, {
- required: "Полето е задължително.",
- remote: "МолÑ, въведете правилната ÑтойноÑÑ‚.",
- email: "МолÑ, въведете валиден email.",
- url: "МолÑ, въведете валидно URL.",
- date: "МолÑ, въведете валидна дата.",
- dateISO: "МолÑ, въведете валидна дата (ISO).",
- number: "МолÑ, въведете валиден номер.",
- digits: "МолÑ, въведете Ñамо цифри.",
- creditcard: "МолÑ, въведете валиден номер на кредитна карта.",
- equalTo: "МолÑ, въведете Ñъщата ÑтойноÑÑ‚ отново.",
- extension: "МолÑ, въведете ÑтойноÑÑ‚ Ñ Ð²Ð°Ð»Ð¸Ð´Ð½Ð¾ разширение.",
- maxlength: $.validator.format("МолÑ, въведете повече от {0} Ñимвола."),
- minlength: $.validator.format("МолÑ, въведете поне {0} Ñимвола."),
- rangelength: $.validator.format("МолÑ, въведете ÑтойноÑÑ‚ Ñ Ð´ÑŠÐ»Ð¶Ð¸Ð½Ð° между {0} и {1} Ñимвола."),
- range: $.validator.format("МолÑ, въведете ÑтойноÑÑ‚ между {0} и {1}."),
- max: $.validator.format("МолÑ, въведете ÑтойноÑÑ‚ по-малка или равна на {0}."),
- min: $.validator.format("МолÑ, въведете ÑтойноÑÑ‚ по-голÑма или равна на {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_bn_BD.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_bn_BD.js
deleted file mode 100644
index 3aea86c0..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_bn_BD.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: bn_BD (Bengali, Bangladesh)
- */
-$.extend($.validator.messages, {
- required: "à¦à¦‡ তথà§à¦¯à¦Ÿà¦¿ আবশà§à¦¯à¦•à¥¤",
- remote: "à¦à¦‡ তথà§à¦¯à¦Ÿà¦¿ ঠিক করà§à¦¨à¥¤",
- email: "অনà§à¦—à§à¦°à¦¹ করে à¦à¦•à¦Ÿà¦¿ সঠিক মেইল ঠিকানা লিখà§à¦¨à¥¤",
- url: "অনà§à¦—à§à¦°à¦¹ করে à¦à¦•à¦Ÿà¦¿ সঠিক লিঙà§à¦• দিন।",
- date: "তারিখ সঠিক নয়।",
- dateISO: "অনà§à¦—à§à¦°à¦¹ করে à¦à¦•à¦Ÿà¦¿ সঠিক (ISO) তারিখ লিখà§à¦¨à¥¤",
- number: "অনà§à¦—à§à¦°à¦¹ করে à¦à¦•à¦Ÿà¦¿ সঠিক নমà§à¦¬à¦° লিখà§à¦¨à¥¤",
- digits: "à¦à¦–ানে শà§à¦§à§ সংখà§à¦¯à¦¾ বà§à¦¯à¦¬à¦¹à¦¾à¦° করা যাবে।",
- creditcard: "অনà§à¦—à§à¦°à¦¹ করে à¦à¦•à¦Ÿà¦¿ কà§à¦°à§‡à¦¡à¦¿à¦Ÿ কারà§à¦¡à§‡à¦° সঠিক নমà§à¦¬à¦° লিখà§à¦¨à¥¤",
- equalTo: "à¦à¦•à¦‡ মান আবার লিখà§à¦¨à¥¤",
- extension: "সঠিক ধরনের ফাইল আপলোড করà§à¦¨à¥¤",
- maxlength: $.validator.format("{0}টির বেশি অকà§à¦·à¦° লেখা যাবে না।"),
- minlength: $.validator.format("{0}টির কম অকà§à¦·à¦° লেখা যাবে না।"),
- rangelength: $.validator.format("{0} থেকে {1} টি অকà§à¦·à¦° সমà§à¦¬à¦²à¦¿à¦¤ মান লিখà§à¦¨à¥¤"),
- range: $.validator.format("{0} থেকে {1} à¦à¦° মধà§à¦¯à§‡ à¦à¦•à¦Ÿà¦¿ মান বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤"),
- max: $.validator.format("অনà§à¦—à§à¦°à¦¹ করে {0} বা তার চাইতে কম মান বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤"),
- min: $.validator.format("অনà§à¦—à§à¦°à¦¹ করে {0} বা তার চাইতে বেশি মান বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨à¥¤")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ca.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ca.js
deleted file mode 100644
index 3c8da2ce..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ca.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: CA (Catalan; català)
- */
-$.extend($.validator.messages, {
- required: "Aquest camp és obligatori.",
- remote: "Si us plau, omple aquest camp.",
- email: "Si us plau, escriu una adreça de correu-e vàlida",
- url: "Si us plau, escriu una URL vàlida.",
- date: "Si us plau, escriu una data vàlida.",
- dateISO: "Si us plau, escriu una data (ISO) vàlida.",
- number: "Si us plau, escriu un número enter vàlid.",
- digits: "Si us plau, escriu només dígits.",
- creditcard: "Si us plau, escriu un número de tarjeta vàlid.",
- equalTo: "Si us plau, escriu el mateix valor de nou.",
- extension: "Si us plau, escriu un valor amb una extensió acceptada.",
- maxlength: $.validator.format("Si us plau, no escriguis més de {0} caracters."),
- minlength: $.validator.format("Si us plau, no escriguis menys de {0} caracters."),
- rangelength: $.validator.format("Si us plau, escriu un valor entre {0} i {1} caracters."),
- range: $.validator.format("Si us plau, escriu un valor entre {0} i {1}."),
- max: $.validator.format("Si us plau, escriu un valor menor o igual a {0}."),
- min: $.validator.format("Si us plau, escriu un valor major o igual a {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_cs.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_cs.js
deleted file mode 100644
index 2f2f8d89..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_cs.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: CS (Czech; ÄeÅ¡tina, Äeský jazyk)
- */
-$.extend($.validator.messages, {
- required: "Tento údaj je povinný.",
- remote: "Prosím, opravte tento údaj.",
- email: "Prosím, zadejte platný e-mail.",
- url: "Prosím, zadejte platné URL.",
- date: "Prosím, zadejte platné datum.",
- dateISO: "Prosím, zadejte platné datum (ISO).",
- number: "Prosím, zadejte Äíslo.",
- digits: "Prosím, zadávejte pouze Äíslice.",
- creditcard: "Prosím, zadejte Äíslo kreditní karty.",
- equalTo: "Prosím, zadejte znovu stejnou hodnotu.",
- extension: "Prosím, zadejte soubor se správnou příponou.",
- maxlength: $.validator.format("Prosím, zadejte nejvíce {0} znaků."),
- minlength: $.validator.format("Prosím, zadejte nejméně {0} znaků."),
- rangelength: $.validator.format("Prosím, zadejte od {0} do {1} znaků."),
- range: $.validator.format("Prosím, zadejte hodnotu od {0} do {1}."),
- max: $.validator.format("Prosím, zadejte hodnotu menší nebo rovnu {0}."),
- min: $.validator.format("Prosím, zadejte hodnotu větší nebo rovnu {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_da.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_da.js
deleted file mode 100644
index f6a7dba0..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_da.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: DA (Danish; dansk)
- */
-$.extend($.validator.messages, {
- required: "Dette felt er påkrævet.",
- maxlength: $.validator.format("Indtast højst {0} tegn."),
- minlength: $.validator.format("Indtast mindst {0} tegn."),
- rangelength: $.validator.format("Indtast mindst {0} og højst {1} tegn."),
- email: "Indtast en gyldig email-adresse.",
- url: "Indtast en gyldig URL.",
- date: "Indtast en gyldig dato.",
- number: "Indtast et tal.",
- digits: "Indtast kun cifre.",
- equalTo: "Indtast den samme værdi igen.",
- range: $.validator.format("Angiv en værdi mellem {0} og {1}."),
- max: $.validator.format("Angiv en værdi der højst er {0}."),
- min: $.validator.format("Angiv en værdi der mindst er {0}."),
- creditcard: "Indtast et gyldigt kreditkortnummer."
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_de.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_de.js
deleted file mode 100644
index f9344331..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_de.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: DE (German, Deutsch)
- */
-$.extend($.validator.messages, {
- required: "Dieses Feld ist ein Pflichtfeld.",
- maxlength: $.validator.format("Geben Sie bitte maximal {0} Zeichen ein."),
- minlength: $.validator.format("Geben Sie bitte mindestens {0} Zeichen ein."),
- rangelength: $.validator.format("Geben Sie bitte mindestens {0} und maximal {1} Zeichen ein."),
- email: "Geben Sie bitte eine gültige E-Mail Adresse ein.",
- url: "Geben Sie bitte eine gültige URL ein.",
- date: "Bitte geben Sie ein gültiges Datum ein.",
- number: "Geben Sie bitte eine Nummer ein.",
- digits: "Geben Sie bitte nur Ziffern ein.",
- equalTo: "Bitte denselben Wert wiederholen.",
- range: $.validator.format("Geben Sie bitte einen Wert zwischen {0} und {1} ein."),
- max: $.validator.format("Geben Sie bitte einen Wert kleiner oder gleich {0} ein."),
- min: $.validator.format("Geben Sie bitte einen Wert größer oder gleich {0} ein."),
- creditcard: "Geben Sie bitte eine gültige Kreditkarten-Nummer ein."
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_el.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_el.js
deleted file mode 100644
index ddf9ac78..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_el.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: EL (Greek; ελληνικά)
- */
-$.extend($.validator.messages, {
- required: "Αυτό το πεδίο είναι υποχÏεωτικό.",
- remote: "ΠαÏακαλώ διοÏθώστε αυτό το πεδίο.",
- email: "ΠαÏακαλώ εισάγετε μια έγκυÏη διεÏθυνση email.",
- url: "ΠαÏακαλώ εισάγετε ένα έγκυÏο URL.",
- date: "ΠαÏακαλώ εισάγετε μια έγκυÏη ημεÏομηνία.",
- dateISO: "ΠαÏακαλώ εισάγετε μια έγκυÏη ημεÏομηνία (ISO).",
- number: "ΠαÏακαλώ εισάγετε έναν έγκυÏο αÏιθμό.",
- digits: "ΠαÏακαλώ εισάγετε μόνο αÏιθμητικά ψηφία.",
- creditcard: "ΠαÏακαλώ εισάγετε έναν έγκυÏο αÏιθμό πιστωτικής κάÏτας.",
- equalTo: "ΠαÏακαλώ εισάγετε την ίδια τιμή ξανά.",
- extension: "ΠαÏακαλώ εισάγετε μια τιμή με έγκυÏη επέκταση αÏχείου.",
- maxlength: $.validator.format("ΠαÏακαλώ εισάγετε μέχÏι και {0} χαÏακτήÏες."),
- minlength: $.validator.format("ΠαÏακαλώ εισάγετε τουλάχιστον {0} χαÏακτήÏες."),
- rangelength: $.validator.format("ΠαÏακαλώ εισάγετε μια τιμή με μήκος Î¼ÎµÏ„Î±Î¾Ï {0} και {1} χαÏακτήÏων."),
- range: $.validator.format("ΠαÏακαλώ εισάγετε μια τιμή Î¼ÎµÏ„Î±Î¾Ï {0} και {1}."),
- max: $.validator.format("ΠαÏακαλώ εισάγετε μια τιμή μικÏότεÏη ή ίση του {0}."),
- min: $.validator.format("ΠαÏακαλώ εισάγετε μια τιμή μεγαλÏτεÏη ή ίση του {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_es.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_es.js
deleted file mode 100644
index 85a8d459..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_es.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: ES (Spanish; Español)
- */
-$.extend($.validator.messages, {
- required: "Este campo es obligatorio.",
- remote: "Por favor, rellena este campo.",
- email: "Por favor, escribe una dirección de correo válida.",
- url: "Por favor, escribe una URL válida.",
- date: "Por favor, escribe una fecha válida.",
- dateISO: "Por favor, escribe una fecha (ISO) válida.",
- number: "Por favor, escribe un número válido.",
- digits: "Por favor, escribe sólo dígitos.",
- creditcard: "Por favor, escribe un número de tarjeta válido.",
- equalTo: "Por favor, escribe el mismo valor de nuevo.",
- extension: "Por favor, escribe un valor con una extensión aceptada.",
- maxlength: $.validator.format("Por favor, no escribas más de {0} caracteres."),
- minlength: $.validator.format("Por favor, no escribas menos de {0} caracteres."),
- rangelength: $.validator.format("Por favor, escribe un valor entre {0} y {1} caracteres."),
- range: $.validator.format("Por favor, escribe un valor entre {0} y {1}."),
- max: $.validator.format("Por favor, escribe un valor menor o igual a {0}."),
- min: $.validator.format("Por favor, escribe un valor mayor o igual a {0}."),
- nifES: "Por favor, escribe un NIF válido.",
- nieES: "Por favor, escribe un NIE válido.",
- cifES: "Por favor, escribe un CIF válido."
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_es_AR.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_es_AR.js
deleted file mode 100644
index 47b83a27..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_es_AR.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: ES (Spanish; Español)
- * Region: AR (Argentina)
- */
-$.extend($.validator.messages, {
- required: "Este campo es obligatorio.",
- remote: "Por favor, completá este campo.",
- email: "Por favor, escribí una dirección de correo válida.",
- url: "Por favor, escribí una URL válida.",
- date: "Por favor, escribí una fecha válida.",
- dateISO: "Por favor, escribí una fecha (ISO) válida.",
- number: "Por favor, escribí un número entero válido.",
- digits: "Por favor, escribí sólo dígitos.",
- creditcard: "Por favor, escribí un número de tarjeta válido.",
- equalTo: "Por favor, escribí el mismo valor de nuevo.",
- extension: "Por favor, escribí un valor con una extensión aceptada.",
- maxlength: $.validator.format("Por favor, no escribas más de {0} caracteres."),
- minlength: $.validator.format("Por favor, no escribas menos de {0} caracteres."),
- rangelength: $.validator.format("Por favor, escribí un valor entre {0} y {1} caracteres."),
- range: $.validator.format("Por favor, escribí un valor entre {0} y {1}."),
- max: $.validator.format("Por favor, escribí un valor menor o igual a {0}."),
- min: $.validator.format("Por favor, escribí un valor mayor o igual a {0}."),
- nifES: "Por favor, escribí un NIF válido.",
- nieES: "Por favor, escribí un NIE válido.",
- cifES: "Por favor, escribí un CIF válido."
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_es_PE.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_es_PE.js
deleted file mode 100644
index 38ba1885..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_es_PE.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: ES (Spanish; Español)
- * Region: PE (Perú)
- */
-$.extend($.validator.messages, {
- required: "Este campo es obligatorio.",
- remote: "Por favor, llene este campo.",
- email: "Por favor, escriba un correo electrónico válido.",
- url: "Por favor, escriba una URL válida.",
- date: "Por favor, escriba una fecha válida.",
- dateISO: "Por favor, escriba una fecha (ISO) válida.",
- number: "Por favor, escriba un número válido.",
- digits: "Por favor, escriba sólo dígitos.",
- creditcard: "Por favor, escriba un número de tarjeta válido.",
- equalTo: "Por favor, escriba el mismo valor de nuevo.",
- extension: "Por favor, escriba un valor con una extensión permitida.",
- maxlength: $.validator.format("Por favor, no escriba más de {0} caracteres."),
- minlength: $.validator.format("Por favor, no escriba menos de {0} caracteres."),
- rangelength: $.validator.format("Por favor, escriba un valor entre {0} y {1} caracteres."),
- range: $.validator.format("Por favor, escriba un valor entre {0} y {1}."),
- max: $.validator.format("Por favor, escriba un valor menor o igual a {0}."),
- min: $.validator.format("Por favor, escriba un valor mayor o igual a {0}."),
- nifES: "Por favor, escriba un NIF válido.",
- nieES: "Por favor, escriba un NIE válido.",
- cifES: "Por favor, escriba un CIF válido."
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_et.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_et.js
deleted file mode 100644
index bbc24aa9..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_et.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: ET (Estonian; eesti, eesti keel)
- */
-$.extend($.validator.messages, {
- required: "See väli peab olema täidetud.",
- maxlength: $.validator.format("Palun sisestage vähem kui {0} tähemärki."),
- minlength: $.validator.format("Palun sisestage vähemalt {0} tähemärki."),
- rangelength: $.validator.format("Palun sisestage väärtus vahemikus {0} kuni {1} tähemärki."),
- email: "Palun sisestage korrektne e-maili aadress.",
- url: "Palun sisestage korrektne URL.",
- date: "Palun sisestage korrektne kuupäev.",
- dateISO: "Palun sisestage korrektne kuupäev (YYYY-MM-DD).",
- number: "Palun sisestage korrektne number.",
- digits: "Palun sisestage ainult numbreid.",
- equalTo: "Palun sisestage sama väärtus uuesti.",
- range: $.validator.format("Palun sisestage väärtus vahemikus {0} kuni {1}."),
- max: $.validator.format("Palun sisestage väärtus, mis on väiksem või võrdne arvuga {0}."),
- min: $.validator.format("Palun sisestage väärtus, mis on suurem või võrdne arvuga {0}."),
- creditcard: "Palun sisestage korrektne krediitkaardi number."
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_eu.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_eu.js
deleted file mode 100644
index 1b07a65d..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_eu.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: EU (Basque; euskara, euskera)
- */
-$.extend($.validator.messages, {
- required: "Eremu hau beharrezkoa da.",
- remote: "Mesedez, bete eremu hau.",
- email: "Mesedez, idatzi baliozko posta helbide bat.",
- url: "Mesedez, idatzi baliozko URL bat.",
- date: "Mesedez, idatzi baliozko data bat.",
- dateISO: "Mesedez, idatzi baliozko (ISO) data bat.",
- number: "Mesedez, idatzi baliozko zenbaki oso bat.",
- digits: "Mesedez, idatzi digituak soilik.",
- creditcard: "Mesedez, idatzi baliozko txartel zenbaki bat.",
- equalTo: "Mesedez, idatzi berdina berriro ere.",
- extension: "Mesedez, idatzi onartutako luzapena duen balio bat.",
- maxlength: $.validator.format("Mesedez, ez idatzi {0} karaktere baino gehiago."),
- minlength: $.validator.format("Mesedez, ez idatzi {0} karaktere baino gutxiago."),
- rangelength: $.validator.format("Mesedez, idatzi {0} eta {1} karaktere arteko balio bat."),
- range: $.validator.format("Mesedez, idatzi {0} eta {1} arteko balio bat."),
- max: $.validator.format("Mesedez, idatzi {0} edo txikiagoa den balio bat."),
- min: $.validator.format("Mesedez, idatzi {0} edo handiagoa den balio bat.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_fa.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_fa.js
deleted file mode 100644
index 78204b3f..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_fa.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: FA (Persian; Ùارسی)
- */
-$.extend($.validator.messages, {
- required: "تکمیل این Ùیلد اجباری است.",
- remote: "لطÙا این Ùیلد را تصحیح کنید.",
- email: ".لطÙا یک ایمیل صحیح وارد کنید",
- url: "لطÙا آدرس صحیح وارد کنید.",
- date: "لطÙا یک تاریخ صحیح وارد کنید",
- dateFA: "لطÙا یک تاریخ صحیح وارد کنید",
- dateISO: "لطÙا تاریخ صحیح وارد کنید (ISO).",
- number: "لطÙا عدد صحیح وارد کنید.",
- digits: "لطÙا تنها رقم وارد کنید",
- creditcard: "لطÙا کریدیت کارت صحیح وارد کنید.",
- equalTo: "لطÙا مقدار برابری وارد کنید",
- extension: "لطÙا مقداری وارد کنید Ú©Ù‡ ",
- maxlength: $.validator.format("لطÙا بیشتر از {0} حر٠وارد نکنید."),
- minlength: $.validator.format("لطÙا کمتر از {0} حر٠وارد نکنید."),
- rangelength: $.validator.format("لطÙا مقداری بین {0} تا {1} حر٠وارد کنید."),
- range: $.validator.format("لطÙا مقداری بین {0} تا {1} حر٠وارد کنید."),
- max: $.validator.format("لطÙا مقداری کمتر از {0} حر٠وارد کنید."),
- min: $.validator.format("لطÙا مقداری بیشتر از {0} حر٠وارد کنید."),
- minWords: $.validator.format("لطÙا حداقل {0} کلمه وارد کنید."),
- maxWords: $.validator.format("لطÙا حداکثر {0} کلمه وارد کنید.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_fi.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_fi.js
deleted file mode 100644
index 63a57115..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_fi.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: FI (Finnish; suomi, suomen kieli)
- */
-$.extend($.validator.messages, {
- required: "T&auml;m&auml; kentt&auml; on pakollinen.",
- email: "Sy&ouml;t&auml; oikea s&auml;hk&ouml;postiosoite.",
- url: "Sy&ouml;t&auml; oikea URL-osoite.",
- date: "Sy&ouml;t&auml; oikea p&auml;iv&auml;m&auml;&auml;r&auml;.",
- dateISO: "Sy&ouml;t&auml; oikea p&auml;iv&auml;m&auml;&auml;r&auml; muodossa VVVV-KK-PP.",
- number: "Sy&ouml;t&auml; luku.",
- creditcard: "Sy&ouml;t&auml; voimassa oleva luottokorttinumero.",
- digits: "Sy&ouml;t&auml; pelk&auml;st&auml;&auml;n numeroita.",
- equalTo: "Sy&ouml;t&auml; sama arvo uudestaan.",
- maxlength: $.validator.format("Voit sy&ouml;tt&auml;&auml; enint&auml;&auml;n {0} merkki&auml;."),
- minlength: $.validator.format("V&auml;hint&auml;&auml;n {0} merkki&auml;."),
- rangelength: $.validator.format("Sy&ouml;t&auml; v&auml;hint&auml;&auml;n {0} ja enint&auml;&auml;n {1} merkki&auml;."),
- range: $.validator.format("Sy&ouml;t&auml; arvo v&auml;lilt&auml; {0}&ndash;{1}."),
- max: $.validator.format("Sy&ouml;t&auml; arvo, joka on enint&auml;&auml;n {0}."),
- min: $.validator.format("Sy&ouml;t&auml; arvo, joka on v&auml;hint&auml;&auml;n {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_fr.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_fr.js
deleted file mode 100644
index e82ccea3..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_fr.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: FR (French; français)
- */
-$.extend($.validator.messages, {
- required: "Ce champ est obligatoire.",
- remote: "Veuillez corriger ce champ.",
- email: "Veuillez fournir une adresse électronique valide.",
- url: "Veuillez fournir une adresse URL valide.",
- date: "Veuillez fournir une date valide.",
- dateISO: "Veuillez fournir une date valide (ISO).",
- number: "Veuillez fournir un numéro valide.",
- digits: "Veuillez fournir seulement des chiffres.",
- creditcard: "Veuillez fournir un numéro de carte de crédit valide.",
- equalTo: "Veuillez fournir encore la même valeur.",
- extension: "Veuillez fournir une valeur avec une extension valide.",
- maxlength: $.validator.format("Veuillez fournir au plus {0} caractères."),
- minlength: $.validator.format("Veuillez fournir au moins {0} caractères."),
- rangelength: $.validator.format("Veuillez fournir une valeur qui contient entre {0} et {1} caractères."),
- range: $.validator.format("Veuillez fournir une valeur entre {0} et {1}."),
- max: $.validator.format("Veuillez fournir une valeur inférieure ou égale à {0}."),
- min: $.validator.format("Veuillez fournir une valeur supérieure ou égale à {0}."),
- maxWords: $.validator.format("Veuillez fournir au plus {0} mots."),
- minWords: $.validator.format("Veuillez fournir au moins {0} mots."),
- rangeWords: $.validator.format("Veuillez fournir entre {0} et {1} mots."),
- letterswithbasicpunc: "Veuillez fournir seulement des lettres et des signes de ponctuation.",
- alphanumeric: "Veuillez fournir seulement des lettres, nombres, espaces et soulignages.",
- lettersonly: "Veuillez fournir seulement des lettres.",
- nowhitespace: "Veuillez ne pas inscrire d'espaces blancs.",
- ziprange: "Veuillez fournir un code postal entre 902xx-xxxx et 905-xx-xxxx.",
- integer: "Veuillez fournir un nombre non décimal qui est positif ou négatif.",
- vinUS: "Veuillez fournir un numéro d'identification du véhicule (VIN).",
- dateITA: "Veuillez fournir une date valide.",
- time: "Veuillez fournir une heure valide entre 00:00 et 23:59.",
- phoneUS: "Veuillez fournir un numéro de téléphone valide.",
- phoneUK: "Veuillez fournir un numéro de téléphone valide.",
- mobileUK: "Veuillez fournir un numéro de téléphone mobile valide.",
- strippedminlength: $.validator.format("Veuillez fournir au moins {0} caractères."),
- email2: "Veuillez fournir une adresse électronique valide.",
- url2: "Veuillez fournir une adresse URL valide.",
- creditcardtypes: "Veuillez fournir un numéro de carte de crédit valide.",
- ipv4: "Veuillez fournir une adresse IP v4 valide.",
- ipv6: "Veuillez fournir une adresse IP v6 valide.",
- require_from_group: "Veuillez fournir au moins {0} de ces champs.",
- nifES: "Veuillez fournir un numéro NIF valide.",
- nieES: "Veuillez fournir un numéro NIE valide.",
- cifES: "Veuillez fournir un numéro CIF valide.",
- postalCodeCA: "Veuillez fournir un code postal valide."
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ge.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ge.js
deleted file mode 100644
index 7d182771..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ge.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * @author @tatocaster <kutaliatato@gmail.com>
- * Translated default messages for the jQuery validation plugin.
- * Locale: GE (Georgian; ქáƒáƒ áƒ—ული)
- */
-$.extend($.validator.messages, {
- required: "ეს ველი სáƒáƒ•áƒáƒšáƒ“ებულáƒáƒ",
- remote: "გთხáƒáƒ•áƒ— შეáƒáƒ¡áƒ¬áƒáƒ áƒáƒ—.",
- email: "გთხáƒáƒ•áƒ— შეიყვáƒáƒœáƒáƒ— სწáƒáƒ áƒ˜ ფáƒáƒ áƒ›áƒáƒ¢áƒ˜áƒ—.",
- url: "გთხáƒáƒ•áƒ— შეიყვáƒáƒœáƒáƒ— სწáƒáƒ áƒ˜ ფáƒáƒ áƒ›áƒáƒ¢áƒ˜áƒ—.",
- date: "გთხáƒáƒ•áƒ— შეიყვáƒáƒœáƒáƒ— სწáƒáƒ áƒ˜ თáƒáƒ áƒ˜áƒ¦áƒ˜.",
- dateISO: "გთხáƒáƒ•áƒ— შეიყვáƒáƒœáƒáƒ— სწáƒáƒ áƒ˜ ფáƒáƒ áƒ›áƒáƒ¢áƒ˜áƒ— ( ISO ).",
- number: "გთხáƒáƒ•áƒ— შეიყვáƒáƒœáƒáƒ— რიცხვი.",
- digits: "დáƒáƒ¨áƒ•áƒ”ბულირმხáƒáƒšáƒáƒ“ ციფრები.",
- creditcard: "გთხáƒáƒ•áƒ— შეიყვáƒáƒœáƒáƒ— სწáƒáƒ áƒ˜ ფáƒáƒ áƒ›áƒáƒ¢áƒ˜áƒ¡ ბáƒáƒ áƒáƒ—ის კáƒáƒ“ი.",
- equalTo: "გთხáƒáƒ•áƒ— შეიყვáƒáƒœáƒáƒ— იგივე მნიშვნელáƒáƒ‘áƒ.",
- maxlength: $.validator.format( "გთხáƒáƒ•áƒ— შეიყვáƒáƒœáƒáƒ— áƒáƒ áƒ უმეტეს {0} სიმბáƒáƒšáƒáƒ¡áƒ˜." ),
- minlength: $.validator.format( "შეიყვáƒáƒœáƒ”თ მინიმუმ {0} სიმბáƒáƒšáƒ." ),
- rangelength: $.validator.format( "გთხáƒáƒ•áƒ— შეიყვáƒáƒœáƒáƒ— {0} -დáƒáƒœ {1} -მდე რáƒáƒáƒ“ენáƒáƒ‘ის სიმბáƒáƒšáƒáƒ”ბი." ),
- range: $.validator.format( "შეიყვáƒáƒœáƒ”თ {0} -სრ{1} -ს შáƒáƒ áƒ˜áƒ¡." ),
- max: $.validator.format( "გთხáƒáƒ•áƒ— შეიყვáƒáƒœáƒáƒ— მნიშვნელáƒáƒ‘რნáƒáƒ™áƒšáƒ”ბი áƒáƒœ ტáƒáƒšáƒ˜ {0} -ს." ),
- min: $.validator.format( "გთხáƒáƒ•áƒ— შეიყვáƒáƒœáƒáƒ— მნიშვნელáƒáƒ‘რმეტი áƒáƒœ ტáƒáƒšáƒ˜ {0} -ს." )
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_gl.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_gl.js
deleted file mode 100644
index 76fadb2e..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_gl.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: GL (Galician; Galego)
- */
-(function($) {
- $.extend($.validator.messages, {
- required: "Este campo é obrigatorio.",
- remote: "Por favor, cubre este campo.",
- email: "Por favor, escribe unha dirección de correo válida.",
- url: "Por favor, escribe unha URL válida.",
- date: "Por favor, escribe unha data válida.",
- dateISO: "Por favor, escribe unha data (ISO) válida.",
- number: "Por favor, escribe un número válido.",
- digits: "Por favor, escribe só díxitos.",
- creditcard: "Por favor, escribe un número de tarxeta válido.",
- equalTo: "Por favor, escribe o mesmo valor de novo.",
- extension: "Por favor, escribe un valor cunha extensión aceptada.",
- maxlength: $.validator.format("Por favor, non escribas máis de {0} caracteres."),
- minlength: $.validator.format("Por favor, non escribas menos de {0} caracteres."),
- rangelength: $.validator.format("Por favor, escribe un valor entre {0} e {1} caracteres."),
- range: $.validator.format("Por favor, escribe un valor entre {0} e {1}."),
- max: $.validator.format("Por favor, escribe un valor menor ou igual a {0}."),
- min: $.validator.format("Por favor, escribe un valor maior ou igual a {0}."),
- nifES: "Por favor, escribe un NIF válido.",
- nieES: "Por favor, escribe un NIE válido.",
- cifES: "Por favor, escribe un CIF válido."
- });
-}(jQuery));
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_he.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_he.js
deleted file mode 100644
index f54cd2ee..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_he.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: HE (Hebrew; עברית)
- */
-$.extend($.validator.messages, {
- required: "השדה הזה הינו שדה חובה",
- remote: "× × ×œ×ª×§×Ÿ שדה ×–×”",
- email: "× × ×œ×ž×œ× ×›×ª×•×‘×ª דו×\"ל חוקית",
- url: "× × ×œ×ž×œ× ×›×ª×•×‘×ª ×ינטרנט חוקית",
- date: "× × ×œ×ž×œ× ×ª×ריך חוקי",
- dateISO: "× × ×œ×ž×œ× ×ª×ריך חוקי (ISO)",
- number: "× × ×œ×ž×œ× ×ž×¡×¤×¨",
- digits: "× × ×œ×ž×œ× ×¨×§ מספרי×",
- creditcard: "× × ×œ×ž×œ× ×ž×¡×¤×¨ כרטיס ×שר××™ חוקי",
- equalTo: "× × ×œ×ž×œ× ×ת ×ותו ערך שוב",
- extension: "× × ×œ×ž×œ× ×¢×¨×š ×¢× ×¡×™×•×ž×ª חוקית",
- maxlength: $.validator.format(".× × ×œ× ×œ×ž×œ× ×™×•×ª×¨ מ- {0} תווי×"),
- minlength: $.validator.format("× × ×œ×ž×œ× ×œ×¤×—×•×ª {0} תווי×"),
- rangelength: $.validator.format("× × ×œ×ž×œ× ×¢×¨×š בין {0} ל- {1} תווי×"),
- range: $.validator.format("× × ×œ×ž×œ× ×¢×¨×š בין {0} ל- {1}"),
- max: $.validator.format("× × ×œ×ž×œ× ×¢×¨×š קטן ×ו שווה ל- {0}"),
- min: $.validator.format("× × ×œ×ž×œ× ×¢×¨×š גדול ×ו שווה ל- {0}")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_hr.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_hr.js
deleted file mode 100644
index 710dbb6d..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_hr.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: HR (Croatia; hrvatski jezik)
- */
-$.extend($.validator.messages, {
- required: "Ovo polje je obavezno.",
- remote: "Ovo polje treba popraviti.",
- email: "Unesite ispravnu e-mail adresu.",
- url: "Unesite ispravan URL.",
- date: "Unesite ispravan datum.",
- dateISO: "Unesite ispravan datum (ISO).",
- number: "Unesite ispravan broj.",
- digits: "Unesite samo brojeve.",
- creditcard: "Unesite ispravan broj kreditne kartice.",
- equalTo: "Unesite ponovo istu vrijednost.",
- extension: "Unesite vrijednost sa ispravnom ekstenzijom.",
- maxlength: $.validator.format("Maksimalni broj znakova je {0} ."),
- minlength: $.validator.format("Minimalni broj znakova je {0} ."),
- rangelength: $.validator.format("Unesite vrijednost između {0} i {1} znakova."),
- range: $.validator.format("Unesite vrijednost između {0} i {1}."),
- max: $.validator.format("Unesite vrijednost manju ili jednaku {0}."),
- min: $.validator.format("Unesite vrijednost veću ili jednaku {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_hu.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_hu.js
deleted file mode 100644
index f2d3bc0d..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_hu.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: HU (Hungarian; Magyar)
- */
-$.extend($.validator.messages, {
- required: "Kötelező megadni.",
- maxlength: $.validator.format("Legfeljebb {0} karakter hosszú legyen."),
- minlength: $.validator.format("Legalább {0} karakter hosszú legyen."),
- rangelength: $.validator.format("Legalább {0} és legfeljebb {1} karakter hosszú legyen."),
- email: "Érvényes e-mail címnek kell lennie.",
- url: "Érvényes URL-nek kell lennie.",
- date: "Dátumnak kell lennie.",
- number: "Számnak kell lennie.",
- digits: "Csak számjegyek lehetnek.",
- equalTo: "Meg kell egyeznie a két értéknek.",
- range: $.validator.format("{0} és {1} közé kell esnie."),
- max: $.validator.format("Nem lehet nagyobb, mint {0}."),
- min: $.validator.format("Nem lehet kisebb, mint {0}."),
- creditcard: "Érvényes hitelkártyaszámnak kell lennie.",
- remote: "Kérem javítsa ki ezt a mezőt.",
- dateISO: "Kérem írjon be egy érvényes dátumot (ISO)."
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_hy_AM.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_hy_AM.js
deleted file mode 100644
index 1c3bd9ba..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_hy_AM.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: HY_AM (Armenian; Õ°Õ¡ÕµÕ¥Ö€Õ¥Õ¶ Õ¬Õ¥Õ¦Õ¸Ö‚)
- */
-$.extend($.validator.messages, {
- required: "ÕŠÕ¡Ö€Õ¿Õ¡Õ¤Õ«Ö€ Õ¬Ö€Õ¡ÖÕ´Õ¡Õ¶ Õ¤Õ¡Õ·Õ¿",
- remote: "Õ†Õ¥Ö€Õ´Õ¸Ö‚Õ®Õ¥Ö„ Õ³Õ«Õ·Õ¿ Õ¡Ö€ÕªÕ¥Ö„Õ¨",
- email: "Õ†Õ¥Ö€Õ´Õ¸Ö‚Õ®Õ¥Ö„ Õ¾Õ¡Õ¾Õ¥Ö€ Õ§Õ¬Õ¥Õ¯Õ¿Ö€Õ¸Õ¶Õ¡ÕµÕ«Õ¶ ÖƒÕ¸Õ½Õ¿Õ« Õ°Õ¡Õ½ÖÕ¥",
- url: "Õ†Õ¥Ö€Õ´Õ¸Ö‚Õ®Õ¥Ö„ Õ¾Õ¡Õ¾Õ¥Ö€ URL",
- date: "Õ†Õ¥Ö€Õ´Õ¸Ö‚Õ®Õ¥Ö„ Õ¾Õ¡Õ¾Õ¥Ö€ Õ¡Õ´Õ½Õ¡Õ©Õ«Õ¾",
- dateISO: "Õ†Õ¥Ö€Õ´Õ¸Ö‚Õ®Õ¥Ö„ ISO Ö†Õ¸Ö€Õ´Õ¡Õ¿Õ¸Õ¾ Õ¾Õ¡Õ¾Õ¥Ö€ Õ¡Õ´Õ½Õ¡Õ©Õ«Õ¾Ö‰",
- number: "Õ†Õ¥Ö€Õ´Õ¸Ö‚Õ®Õ¥Ö„ Õ©Õ«Õ¾",
- digits: "Õ†Õ¥Ö€Õ´Õ¸Ö‚Õ®Õ¥Ö„ Õ´Õ«Õ¡ÕµÕ¶ Õ©Õ¾Õ¥Ö€",
- creditcard: "Õ†Õ¥Ö€Õ´Õ¸Ö‚Õ®Õ¥Ö„ Õ³Õ«Õ·Õ¿ Õ¢Õ¡Õ¶Õ¯Õ¡ÕµÕ«Õ¶ Ö„Õ¡Ö€Õ¿Õ« Õ°Õ¡Õ´Õ¡Ö€",
- equalTo: "Õ†Õ¥Ö€Õ´Õ¸Ö‚Õ®Õ¥Ö„ Õ´Õ«Ö‡Õ¶Õ¸Ö‚Õ¶ Õ¡Ö€ÕªÕ¥Ö„Õ¨ Ö‡Õ½ Õ´Õ¥Õ¯ Õ¡Õ¶Õ£Õ¡Õ´",
- extension: "Ô¸Õ¶Õ¿Ö€Õ¥Ö„ Õ³Õ«Õ·Õ¿ Õ¨Õ¶Õ¤Õ¬Õ¡Õ¶Õ¸Ö‚Õ´Õ¸Õ¾ Ö†Õ¡ÕµÕ¬",
- maxlength: $.validator.format("Õ†Õ¥Ö€Õ´Õ¸Ö‚Õ®Õ¥Ö„ Õ¸Õ¹ Õ¡Õ¾Õ¥Õ¬ Ö„Õ¡Õ¶ {0} Õ¶Õ«Õ·"),
- minlength: $.validator.format("Õ†Õ¥Ö€Õ´Õ¸Ö‚Õ®Õ¥Ö„ Õ¸Õ¹ ÕºÕ¡Õ¯Õ¡Õ½ Ö„Õ¡Õ¶ {0} Õ¶Õ«Õ·"),
- rangelength: $.validator.format("Õ†Õ¥Ö€Õ´Õ¸Ö‚Õ®Õ¥Ö„ {0}ÖŠÕ«Ö {1} Õ¥Ö€Õ¯Õ¡Ö€Õ¸Ö‚Õ©ÕµÕ¡Õ´Õ¢ Õ¡Ö€ÕªÕ¥Ö„"),
- range: $.validator.format("Õ†Õ¥Ö€Õ´Õ¸Ö‚Õ®Õ¥Ö„ Õ©Õ«Õ¾ {0}ÖŠÕ«Ö {1} Õ´Õ«Õ»Õ¡Õ¯Õ¡ÕµÖ„Õ¸Ö‚Õ´"),
- max: $.validator.format("Ներմուծեք թիվ, որը փոքր կամ հավասար է {0}֊ին"),
- min: $.validator.format("Õ†Õ¥Ö€Õ´Õ¸Ö‚Õ®Õ¥Ö„ Õ©Õ«Õ¾, Õ¸Ö€Õ¨ Õ´Õ¥Õ® Õ¯Õ¡Õ´ Õ°Õ¡Õ¾Õ¡Õ½Õ¡Ö€ Õ§ {0}ÖŠÕ«Õ¶")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_id.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_id.js
deleted file mode 100644
index 7d388717..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_id.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: ID (Indonesia; Indonesian)
- */
-$.extend($.validator.messages, {
- required: "Kolom ini diperlukan.",
- remote: "Harap benarkan kolom ini.",
- email: "Silakan masukkan format email yang benar.",
- url: "Silakan masukkan format URL yang benar.",
- date: "Silakan masukkan format tanggal yang benar.",
- dateISO: "Silakan masukkan format tanggal(ISO) yang benar.",
- number: "Silakan masukkan angka yang benar.",
- digits: "Harap masukan angka saja.",
- creditcard: "Harap masukkan format kartu kredit yang benar.",
- equalTo: "Harap masukkan nilai yg sama dengan sebelumnya.",
- maxlength: $.validator.format("Input dibatasi hanya {0} karakter."),
- minlength: $.validator.format("Input tidak kurang dari {0} karakter."),
- rangelength: $.validator.format("Panjang karakter yg diizinkan antara {0} dan {1} karakter."),
- range: $.validator.format("Harap masukkan nilai antara {0} dan {1}."),
- max: $.validator.format("Harap masukkan nilai lebih kecil atau sama dengan {0}."),
- min: $.validator.format("Harap masukkan nilai lebih besar atau sama dengan {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_is.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_is.js
deleted file mode 100644
index 1776fb45..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_is.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: IS (Icelandic; íslenska)
- */
-$.extend($.validator.messages, {
- required: "Þessi reitur er nauðsynlegur.",
- remote: "Lagaðu þennan reit.",
- maxlength: $.validator.format("Sláðu inn mest {0} stafi."),
- minlength: $.validator.format("Sláðu inn minnst {0} stafi."),
- rangelength: $.validator.format("Sláðu inn minnst {0} og mest {1} stafi."),
- email: "Sláðu inn gilt netfang.",
- url: "Sláðu inn gilda vefslóð.",
- date: "Sláðu inn gilda dagsetningu.",
- number: "Sláðu inn tölu.",
- digits: "Sláðu inn tölustafi eingöngu.",
- equalTo: "Sláðu sama gildi inn aftur.",
- range: $.validator.format("Sláðu inn gildi milli {0} og {1}."),
- max: $.validator.format("Sláðu inn gildi sem er minna en eða jafnt og {0}."),
- min: $.validator.format("Sláðu inn gildi sem er stærra en eða jafnt og {0}."),
- creditcard: "Sláðu inn gilt greiðslukortanúmer."
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_it.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_it.js
deleted file mode 100644
index 7ec62948..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_it.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: IT (Italian; Italiano)
- */
-$.extend($.validator.messages, {
- required: "Campo obbligatorio",
- remote: "Controlla questo campo",
- email: "Inserisci un indirizzo email valido",
- url: "Inserisci un indirizzo web valido",
- date: "Inserisci una data valida",
- dateISO: "Inserisci una data valida (ISO)",
- number: "Inserisci un numero valido",
- digits: "Inserisci solo numeri",
- creditcard: "Inserisci un numero di carta di credito valido",
- equalTo: "Il valore non corrisponde",
- extension: "Inserisci un valore con un&apos;estensione valida",
- maxlength: $.validator.format("Non inserire pi&ugrave; di {0} caratteri"),
- minlength: $.validator.format("Inserisci almeno {0} caratteri"),
- rangelength: $.validator.format("Inserisci un valore compreso tra {0} e {1} caratteri"),
- range: $.validator.format("Inserisci un valore compreso tra {0} e {1}"),
- max: $.validator.format("Inserisci un valore minore o uguale a {0}"),
- min: $.validator.format("Inserisci un valore maggiore o uguale a {0}"),
- nifES: "Inserisci un NIF valido",
- nieES: "Inserisci un NIE valido",
- cifES: "Inserisci un CIF valido",
- currency: "Inserisci una valuta valida"
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ja.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ja.js
deleted file mode 100644
index f422703d..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ja.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: JA (Japanese; 日本語)
- */
-$.extend($.validator.messages, {
- required: "ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯å¿…é ˆã§ã™ã€‚",
- remote: "ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’修正ã—ã¦ãã ã•ã„。",
- email: "有効ãªEメールアドレスを入力ã—ã¦ãã ã•ã„。",
- url: "有効ãªURLを入力ã—ã¦ãã ã•ã„。",
- date: "有効ãªæ—¥ä»˜ã‚’入力ã—ã¦ãã ã•ã„。",
- dateISO: "有効ãªæ—¥ä»˜ï¼ˆISO)を入力ã—ã¦ãã ã•ã„。",
- number: "有効ãªæ•°å­—を入力ã—ã¦ãã ã•ã„。",
- digits: "æ•°å­—ã®ã¿ã‚’入力ã—ã¦ãã ã•ã„。",
- creditcard: "有効ãªã‚¯ãƒ¬ã‚¸ãƒƒãƒˆã‚«ãƒ¼ãƒ‰ç•ªå·ã‚’入力ã—ã¦ãã ã•ã„。",
- equalTo: "åŒã˜å€¤ã‚’ã‚‚ã†ä¸€åº¦å…¥åŠ›ã—ã¦ãã ã•ã„。",
- extension: "有効ãªæ‹¡å¼µå­ã‚’å«ã‚€å€¤ã‚’入力ã—ã¦ãã ã•ã„。",
- maxlength: $.validator.format("{0} 文字以内ã§å…¥åŠ›ã—ã¦ãã ã•ã„。"),
- minlength: $.validator.format("{0} 文字以上ã§å…¥åŠ›ã—ã¦ãã ã•ã„。"),
- rangelength: $.validator.format("{0} 文字ã‹ã‚‰ {1} 文字ã¾ã§ã®å€¤ã‚’入力ã—ã¦ãã ã•ã„。"),
- range: $.validator.format("{0} ã‹ã‚‰ {1} ã¾ã§ã®å€¤ã‚’入力ã—ã¦ãã ã•ã„。"),
- max: $.validator.format("{0} 以下ã®å€¤ã‚’入力ã—ã¦ãã ã•ã„。"),
- min: $.validator.format("{0} 以上ã®å€¤ã‚’入力ã—ã¦ãã ã•ã„。")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ka.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ka.js
deleted file mode 100644
index 18f57dba..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ka.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: KA (Georgian; ქáƒáƒ áƒ—ული)
- */
-$.extend($.validator.messages, {
- required: "áƒáƒ› ველის შევსებრáƒáƒ£áƒªáƒ˜áƒšáƒ”ბელიáƒ.",
- remote: "გთხáƒáƒ•áƒ— მიუთითáƒáƒ— სწáƒáƒ áƒ˜ მნიშვნელáƒáƒ‘áƒ.",
- email: "გთხáƒáƒ•áƒ— მიუთითáƒáƒ— ელ-ფáƒáƒ¡áƒ¢áƒ˜áƒ¡ კáƒáƒ áƒ”ქტული მისáƒáƒ›áƒáƒ áƒ—ი.",
- url: "გთხáƒáƒ•áƒ— მიუთითáƒáƒ— კáƒáƒ áƒ”ქტული URL.",
- date: "გთხáƒáƒ•áƒ— მიუთითáƒáƒ— კáƒáƒ áƒ”ქტული თáƒáƒ áƒ˜áƒ¦áƒ˜.",
- dateISO: "გთხáƒáƒ•áƒ— მიუთითáƒáƒ— კáƒáƒ áƒ”ქტული თáƒáƒ áƒ˜áƒ¦áƒ˜ ISO ფáƒáƒ áƒ›áƒáƒ¢áƒ¨áƒ˜.",
- number: "გთხáƒáƒ•áƒ— მიუთითáƒáƒ— ციფრი.",
- digits: "გთხáƒáƒ•áƒ— მიუთითáƒáƒ— მხáƒáƒšáƒáƒ“ ციფრები.",
- creditcard: "გთხáƒáƒ•áƒ— მიუთითáƒáƒ— სáƒáƒ™áƒ áƒ”დიტრბáƒáƒ áƒáƒ—ის კáƒáƒ áƒ”ქტული ნáƒáƒ›áƒ”რი.",
- equalTo: "გთხáƒáƒ•áƒ— მიუთითáƒáƒ— áƒáƒ¡áƒ”თივე მნიშვნელáƒáƒ‘რკიდევ ერთხელ.",
- extension: "გთხáƒáƒ•áƒ— áƒáƒ˜áƒ áƒ©áƒ˜áƒáƒ— ფáƒáƒ˜áƒšáƒ˜ კáƒáƒ áƒ”ქტული გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბით.",
- maxlength: $.validator.format("დáƒáƒ¡áƒáƒ¨áƒ•áƒ”ბირáƒáƒ áƒáƒ£áƒ›áƒ”ტეს {0} სიმბáƒáƒšáƒ."),
- minlength: $.validator.format("áƒáƒ£áƒªáƒ˜áƒšáƒ”ბელირშეიყვáƒáƒœáƒáƒ— მინიმუმ {0} სიმბáƒáƒšáƒ."),
- rangelength: $.validator.format("ტექსტში სიმბáƒáƒšáƒáƒ”ბის რáƒáƒáƒ“ენáƒáƒ‘რუნდრიყáƒáƒ¡ {0}-დáƒáƒœ {1}-მდე."),
- range: $.validator.format("გთხáƒáƒ•áƒ— შეიყვáƒáƒœáƒáƒ— ციფრი {0}-დáƒáƒœ {1}-მდე."),
- max: $.validator.format("გთხáƒáƒ•áƒ— შეიყვáƒáƒœáƒáƒ— ციფრი რáƒáƒ›áƒ”ლიც ნáƒáƒ™áƒšáƒ”ბირáƒáƒœ უდრის {0}-ს."),
- min: $.validator.format("გთხáƒáƒ•áƒ— შეიყვáƒáƒœáƒáƒ— ციფრი რáƒáƒ›áƒ”ლიც მეტირáƒáƒœ უდრის {0}-ს.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_kk.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_kk.js
deleted file mode 100644
index 6f49c0b2..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_kk.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: KK (Kazakh; қазақ тілі)
- */
-$.extend($.validator.messages, {
- required: "Бұл өріÑÑ‚Ñ– міндетті түрде толтырыңыз.",
- remote: "Ð”Ò±Ñ€Ñ‹Ñ Ð¼Ð°Ò“Ñ‹Ð½Ð° енгізуіңізді Ñұраймыз.",
- email: "Ðақты Ñлектронды поштаңызды енгізуіңізді Ñұраймыз.",
- url: "Ðақты URL-ды енгізуіңізді Ñұраймыз.",
- date: "Ðақты URL-ды енгізуіңізді Ñұраймыз.",
- dateISO: "Ðақты ISO форматымен ÑÓ™Ð¹ÐºÐµÑ Ð´Ð°Ñ‚Ð°Ñын енгізуіңізді Ñұраймыз.",
- number: "Күнді енгізуіңізді Ñұраймыз.",
- digits: "Тек қана Ñандарды енгізуіңізді Ñұраймыз.",
- creditcard: "ÐеÑие картаÑының нөмірін Ð´Ò±Ñ€Ñ‹Ñ ÐµÐ½Ð³Ñ–Ð·ÑƒÑ–Ò£Ñ–Ð·Ð´Ñ– Ñұраймыз.",
- equalTo: "ОÑÑ‹ мәнді қайта енгізуіңізді Ñұраймыз.",
- extension: "Файлдың кеңейтуін Ð´Ò±Ñ€Ñ‹Ñ Ñ‚Ð°Ò£Ð´Ð°Ò£Ñ‹Ð·.",
- maxlength: $.validator.format("Ұзындығы {0} Ñимволдан көр болмаÑын."),
- minlength: $.validator.format("Ұзындығы {0} Ñимволдан аз болмаÑын."),
- rangelength: $.validator.format("Ұзындығы {0}-{1} дейін мән енгізуіңізді Ñұраймыз."),
- range: $.validator.format("ПожалуйÑта, введите чиÑло от {0} до {1}. - {0} - {1} Ñанын енгізуіңізді Ñұраймыз."),
- max: $.validator.format("{0} аз немеÑе тең Ñанын енгізуіңіді Ñұраймыз."),
- min: $.validator.format("{0} көп немеÑе тең Ñанын енгізуіңізді Ñұраймыз.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ko.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ko.js
deleted file mode 100644
index 2ae08a98..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ko.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: KO (Korean; 한국어)
- */
-$.extend($.validator.messages, {
- required: "필수 항목입니다.",
- remote: "í•­ëª©ì„ ìˆ˜ì •í•˜ì„¸ìš”.",
- email: "유효하지 ì•Šì€ E-Mail주소입니다.",
- url: "유효하지 ì•Šì€ URL입니다.",
- date: "올바른 날짜를 입력하세요.",
- dateISO: "올바른 날짜(ISO)를 입력하세요.",
- number: "유효한 숫ìžê°€ 아닙니다.",
- digits: "숫ìžë§Œ ìž…ë ¥ 가능합니다.",
- creditcard: "신용카드 번호가 바르지 않습니다.",
- equalTo: "ê°™ì€ ê°’ì„ ë‹¤ì‹œ 입력하세요.",
- extension: "올바른 확장ìžê°€ 아닙니다.",
- maxlength: $.validator.format("{0}ìžë¥¼ ë„˜ì„ ìˆ˜ 없습니다. "),
- minlength: $.validator.format("{0}ìž ì´ìƒ 입력하세요."),
- rangelength: $.validator.format("ë¬¸ìž ê¸¸ì´ê°€ {0} ì—ì„œ {1} 사ì´ì˜ ê°’ì„ ìž…ë ¥í•˜ì„¸ìš”."),
- range: $.validator.format("{0} ì—ì„œ {1} 사ì´ì˜ ê°’ì„ ìž…ë ¥í•˜ì„¸ìš”."),
- max: $.validator.format("{0} ì´í•˜ì˜ ê°’ì„ ìž…ë ¥í•˜ì„¸ìš”."),
- min: $.validator.format("{0} ì´ìƒì˜ ê°’ì„ ìž…ë ¥í•˜ì„¸ìš”.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_lt.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_lt.js
deleted file mode 100644
index 061feacf..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_lt.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: LT (Lithuanian; lietuvių kalba)
- */
-$.extend($.validator.messages, {
- required: "Å is laukas yra privalomas.",
- remote: "Prašau pataisyti šį lauką.",
- email: "Prašau įvesti teisingą elektroninio pašto adresą.",
- url: "Prašau įvesti teisingą URL.",
- date: "Prašau įvesti teisingą datą.",
- dateISO: "Prašau įvesti teisingą datą (ISO).",
- number: "PraÅ¡au įvesti teisingÄ… skaiÄių.",
- digits: "Prašau naudoti tik skaitmenis.",
- creditcard: "Prašau įvesti teisingą kreditinės kortelės numerį.",
- equalTo: "PraÅ¡au įvestį tÄ… paÄiÄ… reikÅ¡mÄ™ dar kartÄ….",
- extension: "Prašau įvesti reikšmę su teisingu plėtiniu.",
- maxlength: $.validator.format("Prašau įvesti ne daugiau kaip {0} simbolių."),
- minlength: $.validator.format("Prašau įvesti bent {0} simbolius."),
- rangelength: $.validator.format("Prašau įvesti reikšmes, kurių ilgis nuo {0} iki {1} simbolių."),
- range: $.validator.format("Prašau įvesti reikšmę intervale nuo {0} iki {1}."),
- max: $.validator.format("Prašau įvesti reikšmę mažesnę arba lygią {0}."),
- min: $.validator.format("Prašau įvesti reikšmę didesnę arba lygią {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_lv.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_lv.js
deleted file mode 100644
index 6c00a1bf..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_lv.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: LV (Latvian; latviešu valoda)
- */
-$.extend($.validator.messages, {
- required: "Å is lauks ir obligÄts.",
- remote: "LÅ«dzu, pÄrbaudiet Å¡o lauku.",
- email: "Lūdzu, ievadiet derīgu e-pasta adresi.",
- url: "Lūdzu, ievadiet derīgu URL adresi.",
- date: "Lūdzu, ievadiet derīgu datumu.",
- dateISO: "Lūdzu, ievadiet derīgu datumu (ISO).",
- number: "Lūdzu, ievadiet derīgu numuru.",
- digits: "LÅ«dzu, ievadiet tikai ciparus.",
- creditcard: "Lūdzu, ievadiet derīgu kredītkartes numuru.",
- equalTo: "Lūdzu, ievadiet to pašu vēlreiz.",
- extension: "LÅ«dzu, ievadiet vÄ“rtÄ«bu ar derÄ«gu paplaÅ¡inÄjumu.",
- maxlength: $.validator.format("LÅ«dzu, ievadiet ne vairÄk kÄ {0} rakstzÄ«mes."),
- minlength: $.validator.format("Lūdzu, ievadiet vismaz {0} rakstzīmes."),
- rangelength: $.validator.format("Lūdzu ievadiet {0} līdz {1} rakstzīmes."),
- range: $.validator.format("Lūdzu, ievadiet skaitli no {0} līdz {1}."),
- max: $.validator.format("LÅ«dzu, ievadiet skaitli, kurÅ¡ ir mazÄks vai vienÄds ar {0}."),
- min: $.validator.format("LÅ«dzu, ievadiet skaitli, kurÅ¡ ir lielÄks vai vienÄds ar {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_my.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_my.js
deleted file mode 100644
index 22dbe9c3..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_my.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: MY (Malay; Melayu)
- */
-$.extend($.validator.messages, {
- required: "Medan ini diperlukan.",
- remote: "Sila betulkan medan ini.",
- email: "Sila masukkan alamat emel yang betul.",
- url: "Sila masukkan URL yang betul.",
- date: "Sila masukkan tarikh yang betul.",
- dateISO: "Sila masukkan tarikh(ISO) yang betul.",
- number: "Sila masukkan nombor yang betul.",
- digits: "Sila masukkan nilai digit sahaja.",
- creditcard: "Sila masukkan nombor kredit kad yang betul.",
- equalTo: "Sila masukkan nilai yang sama semula.",
- extension: "Sila masukkan nilai yang telah diterima.",
- maxlength: $.validator.format("Sila masukkan nilai tidak lebih dari {0} aksara."),
- minlength: $.validator.format("Sila masukkan nilai sekurang-kurangnya {0} aksara."),
- rangelength: $.validator.format("Sila masukkan panjang nilai antara {0} dan {1} aksara."),
- range: $.validator.format("Sila masukkan nilai antara {0} dan {1} aksara."),
- max: $.validator.format("Sila masukkan nilai yang kurang atau sama dengan {0}."),
- min: $.validator.format("Sila masukkan nilai yang lebih atau sama dengan {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_nl.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_nl.js
deleted file mode 100644
index 52a7111d..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_nl.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: NL (Dutch; Nederlands, Vlaams)
- */
-$.extend($.validator.messages, {
- required: "Dit is een verplicht veld.",
- remote: "Controleer dit veld.",
- email: "Vul hier een geldig e-mailadres in.",
- url: "Vul hier een geldige URL in.",
- date: "Vul hier een geldige datum in.",
- dateISO: "Vul hier een geldige datum in (ISO-formaat).",
- number: "Vul hier een geldig getal in.",
- digits: "Vul hier alleen getallen in.",
- creditcard: "Vul hier een geldig creditcardnummer in.",
- equalTo: "Vul hier dezelfde waarde in.",
- extension: "Vul hier een waarde in met een geldige extensie.",
- maxlength: $.validator.format("Vul hier maximaal {0} tekens in."),
- minlength: $.validator.format("Vul hier minimaal {0} tekens in."),
- rangelength: $.validator.format("Vul hier een waarde in van minimaal {0} en maximaal {1} tekens."),
- range: $.validator.format("Vul hier een waarde in van minimaal {0} en maximaal {1}."),
- max: $.validator.format("Vul hier een waarde in kleiner dan of gelijk aan {0}."),
- min: $.validator.format("Vul hier een waarde in groter dan of gelijk aan {0}."),
-
- // for validations in additional-methods.js
- iban: "Vul hier een geldig IBAN in.",
- dateNL: "Vul hier een geldige datum in.",
- phoneNL: "Vul hier een geldig Nederlands telefoonnummer in.",
- mobileNL: "Vul hier een geldig Nederlands mobiel telefoonnummer in.",
- postalcodeNL: "Vul hier een geldige postcode in.",
- bankaccountNL: "Vul hier een geldig bankrekeningnummer in.",
- giroaccountNL: "Vul hier een geldig gironummer in.",
- bankorgiroaccountNL: "Vul hier een geldig bank- of gironummer in."
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_no.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_no.js
deleted file mode 100644
index 7d55a370..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_no.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: NO (Norwegian; Norsk)
- */
-$.extend($.validator.messages, {
- required: "Dette feltet er obligatorisk.",
- maxlength: $.validator.format("Maksimalt {0} tegn."),
- minlength: $.validator.format("Minimum {0} tegn."),
- rangelength: $.validator.format("Angi minimum {0} og maksimum {1} tegn."),
- email: "Oppgi en gyldig epostadresse.",
- url: "Angi en gyldig URL.",
- date: "Angi en gyldig dato.",
- dateISO: "Angi en gyldig dato (&ARING;&ARING;&ARING;&ARING;-MM-DD).",
- dateSE: "Angi en gyldig dato.",
- number: "Angi et gyldig nummer.",
- numberSE: "Angi et gyldig nummer.",
- digits: "Skriv kun tall.",
- equalTo: "Skriv samme verdi igjen.",
- range: $.validator.format("Angi en verdi mellom {0} og {1}."),
- max: $.validator.format("Angi en verdi som er mindre eller lik {0}."),
- min: $.validator.format("Angi en verdi som er st&oslash;rre eller lik {0}."),
- creditcard: "Angi et gyldig kredittkortnummer."
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_pl.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_pl.js
deleted file mode 100644
index 17fc0c43..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_pl.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: PL (Polish; język polski, polszczyzna)
- */
-$.extend($.validator.messages, {
- required: "To pole jest wymagane.",
- remote: "Proszę o wypełnienie tego pola.",
- email: "Proszę o podanie prawidłowego adresu email.",
- url: "Proszę o podanie prawidłowego URL.",
- date: "Proszę o podanie prawidłowej daty.",
- dateISO: "Proszę o podanie prawidłowej daty (ISO).",
- number: "Proszę o podanie prawidłowej liczby.",
- digits: "ProszÄ™ o podanie samych cyfr.",
- creditcard: "Proszę o podanie prawidłowej karty kredytowej.",
- equalTo: "Proszę o podanie tej samej wartości ponownie.",
- extension: "Proszę o podanie wartości z prawidłowym rozszerzeniem.",
- maxlength: $.validator.format("Proszę o podanie nie więcej niż {0} znaków."),
- minlength: $.validator.format("Proszę o podanie przynajmniej {0} znaków."),
- rangelength: $.validator.format("Proszę o podanie wartości o długości od {0} do {1} znaków."),
- range: $.validator.format("Proszę o podanie wartości z przedziału od {0} do {1}."),
- max: $.validator.format("Proszę o podanie wartości mniejszej bądź równej {0}."),
- min: $.validator.format("Proszę o podanie wartości większej bądź równej {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_pt_BR.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_pt_BR.js
deleted file mode 100644
index de0ae431..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_pt_BR.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: PT (Portuguese; português)
- * Region: BR (Brazil)
- */
-$.extend($.validator.messages, {
- required: "Este campo &eacute; requerido.",
- remote: "Por favor, corrija este campo.",
- email: "Por favor, forne&ccedil;a um endere&ccedil;o de email v&aacute;lido.",
- url: "Por favor, forne&ccedil;a uma URL v&aacute;lida.",
- date: "Por favor, forne&ccedil;a uma data v&aacute;lida.",
- dateISO: "Por favor, forne&ccedil;a uma data v&aacute;lida (ISO).",
- number: "Por favor, forne&ccedil;a um n&uacute;mero v&aacute;lido.",
- digits: "Por favor, forne&ccedil;a somente d&iacute;gitos.",
- creditcard: "Por favor, forne&ccedil;a um cart&atilde;o de cr&eacute;dito v&aacute;lido.",
- equalTo: "Por favor, forne&ccedil;a o mesmo valor novamente.",
- extension: "Por favor, forne&ccedil;a um valor com uma extens&atilde;o v&aacute;lida.",
- maxlength: $.validator.format("Por favor, forne&ccedil;a n&atilde;o mais que {0} caracteres."),
- minlength: $.validator.format("Por favor, forne&ccedil;a ao menos {0} caracteres."),
- rangelength: $.validator.format("Por favor, forne&ccedil;a um valor entre {0} e {1} caracteres de comprimento."),
- range: $.validator.format("Por favor, forne&ccedil;a um valor entre {0} e {1}."),
- max: $.validator.format("Por favor, forne&ccedil;a um valor menor ou igual a {0}."),
- min: $.validator.format("Por favor, forne&ccedil;a um valor maior ou igual a {0}."),
- nifES: "Por favor, forne&ccedil;a um NIF v&aacute;lido.",
- nieES: "Por favor, forne&ccedil;a um NIE v&aacute;lido.",
- cifEE: "Por favor, forne&ccedil;a um CIF v&aacute;lido.",
- postalcodeBR: "Por favor, forne&ccedil;a um CEP v&aacute;lido.",
- cpfBR: "Por favor, forne&ccedil;a um CPF v&aacute;lido."
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_pt_PT.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_pt_PT.js
deleted file mode 100644
index e3be7fc2..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_pt_PT.js
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: PT (Portuguese; português)
- * Region: PT (Portugal)
- */
-$.extend($.validator.messages, {
- required: "Campo de preenchimento obrigat&oacute;rio.",
- remote: "Por favor, corrija este campo.",
- email: "Por favor, introduza um endere&ccedil;o eletr&oacute;nico v&aacute;lido.",
- url: "Por favor, introduza um URL v&aacute;lido.",
- date: "Por favor, introduza uma data v&aacute;lida.",
- dateISO: "Por favor, introduza uma data v&aacute;lida (ISO).",
- number: "Por favor, introduza um n&uacute;mero v&aacute;lido.",
- digits: "Por favor, introduza apenas d&iacute;gitos.",
- creditcard: "Por favor, introduza um n&uacute;mero de cart&atilde;o de cr&eacute;dito v&aacute;lido.",
- equalTo: "Por favor, introduza de novo o mesmo valor.",
- extension: "Por favor, introduza um ficheiro com uma extens&atilde;o v&aacute;lida.",
- maxlength: $.validator.format("Por favor, n&atilde;o introduza mais do que {0} caracteres."),
- minlength: $.validator.format("Por favor, introduza pelo menos {0} caracteres."),
- rangelength: $.validator.format("Por favor, introduza entre {0} e {1} caracteres."),
- range: $.validator.format("Por favor, introduza um valor entre {0} e {1}."),
- max: $.validator.format("Por favor, introduza um valor menor ou igual a {0}."),
- min: $.validator.format("Por favor, introduza um valor maior ou igual a {0}."),
- nifES: "Por favor, introduza um NIF v&aacute;lido.",
- nieES: "Por favor, introduza um NIE v&aacute;lido.",
- cifES: "Por favor, introduza um CIF v&aacute;lido."
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ro.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ro.js
deleted file mode 100644
index 3e747330..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ro.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: RO (Romanian, limba română)
- */
-$.extend($.validator.messages, {
- required: "Acest câmp este obligatoriu.",
- remote: "Te rugăm să completezi acest câmp.",
- email: "Te rugăm să introduci o adresă de email validă",
- url: "Te rugăm sa introduci o adresă URL validă.",
- date: "Te rugăm să introduci o dată corectă.",
- dateISO: "Te rugăm să introduci o dată (ISO) corectă.",
- number: "Te rugăm să introduci un număr întreg valid.",
- digits: "Te rugăm să introduci doar cifre.",
- creditcard: "Te rugăm să introduci un numar de carte de credit valid.",
- equalTo: "Te rugăm să reintroduci valoarea.",
- extension: "Te rugăm să introduci o valoare cu o extensie validă.",
- maxlength: $.validator.format("Te rugăm să nu introduci mai mult de {0} caractere."),
- minlength: $.validator.format("Te rugăm să introduci cel puțin {0} caractere."),
- rangelength: $.validator.format("Te rugăm să introduci o valoare între {0} și {1} caractere."),
- range: $.validator.format("Te rugăm să introduci o valoare între {0} și {1}."),
- max: $.validator.format("Te rugăm să introduci o valoare egal sau mai mică decât {0}."),
- min: $.validator.format("Te rugăm să introduci o valoare egal sau mai mare decât {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ru.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ru.js
deleted file mode 100644
index a93d5398..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_ru.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: RU (Russian; руÑÑкий Ñзык)
- */
-$.extend($.validator.messages, {
- required: "Это поле необходимо заполнить.",
- remote: "ПожалуйÑта, введите правильное значение.",
- email: "ПожалуйÑта, введите корректный Ð°Ð´Ñ€ÐµÑ Ñлектронной почты.",
- url: "ПожалуйÑта, введите корректный URL.",
- date: "ПожалуйÑта, введите корректную дату.",
- dateISO: "ПожалуйÑта, введите корректную дату в формате ISO.",
- number: "ПожалуйÑта, введите чиÑло.",
- digits: "ПожалуйÑта, вводите только цифры.",
- creditcard: "ПожалуйÑта, введите правильный номер кредитной карты.",
- equalTo: "ПожалуйÑта, введите такое же значение ещё раз.",
- extension: "ПожалуйÑта, выберите файл Ñ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¼ раÑширением.",
- maxlength: $.validator.format("ПожалуйÑта, введите не больше {0} Ñимволов."),
- minlength: $.validator.format("ПожалуйÑта, введите не меньше {0} Ñимволов."),
- rangelength: $.validator.format("ПожалуйÑта, введите значение длиной от {0} до {1} Ñимволов."),
- range: $.validator.format("ПожалуйÑта, введите чиÑло от {0} до {1}."),
- max: $.validator.format("ПожалуйÑта, введите чиÑло, меньшее или равное {0}."),
- min: $.validator.format("ПожалуйÑта, введите чиÑло, большее или равное {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_si.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_si.js
deleted file mode 100644
index 011fb078..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_si.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: SI (Slovenian)
- */
-$.extend($.validator.messages, {
- required: "To polje je obvezno.",
- remote: "Vpis v tem polju ni v pravi obliki.",
- email: "Prosimo, vnesite pravi email naslov.",
- url: "Prosimo, vnesite pravi URL.",
- date: "Prosimo, vnesite pravi datum.",
- dateISO: "Prosimo, vnesite pravi datum (ISO).",
- number: "Prosimo, vnesite pravo Å¡tevilko.",
- digits: "Prosimo, vnesite samo Å¡tevilke.",
- creditcard: "Prosimo, vnesite pravo Å¡tevilko kreditne kartice.",
- equalTo: "Prosimo, ponovno vnesite enako vsebino.",
- extension: "Prosimo, vnesite vsebino z pravo konÄnico.",
- maxlength: $.validator.format("Prosimo, da ne vnaÅ¡ate veÄ kot {0} znakov."),
- minlength: $.validator.format("Prosimo, vnesite vsaj {0} znakov."),
- rangelength: $.validator.format("Prosimo, vnesite od {0} do {1} znakov."),
- range: $.validator.format("Prosimo, vnesite vrednost med {0} in {1}."),
- max: $.validator.format("Prosimo, vnesite vrednost manjšo ali enako {0}."),
- min: $.validator.format("Prosimo, vnesite vrednost veÄjo ali enako {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sk.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sk.js
deleted file mode 100644
index d4769ee5..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sk.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: SK (Slovak; slovenÄina, slovenský jazyk)
- */
-$.extend($.validator.messages, {
- required: "Povinné zadať.",
- maxlength: $.validator.format("Maximálne {0} znakov."),
- minlength: $.validator.format("Minimálne {0} znakov."),
- rangelength: $.validator.format("Minimálne {0} a Maximálne {1} znakov."),
- email: "E-mailová adresa musí byť platná.",
- url: "URL musí byť platný.",
- date: "Musí byť dátum.",
- number: "Musí byÅ¥ Äíslo.",
- digits: "Môže obsahovaÅ¥ iba Äíslice.",
- equalTo: "Dva hodnoty sa musia rovnať.",
- range: $.validator.format("Musí byť medzi {0} a {1}."),
- max: $.validator.format("Nemôže byť viac ako{0}."),
- min: $.validator.format("Nemôže byť menej ako{0}."),
- creditcard: "Číslo platobnej karty musí byť platné."
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sl.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sl.js
deleted file mode 100644
index 0587b91c..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sl.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Language: SL (Slovenian; slovenski jezik)
- */
-$.extend($.validator.messages, {
- required: "To polje je obvezno.",
- remote: "Prosimo popravite to polje.",
- email: "Prosimo vnesite veljaven email naslov.",
- url: "Prosimo vnesite veljaven URL naslov.",
- date: "Prosimo vnesite veljaven datum.",
- dateISO: "Prosimo vnesite veljaven ISO datum.",
- number: "Prosimo vnesite veljavno Å¡tevilo.",
- digits: "Prosimo vnesite samo Å¡tevila.",
- creditcard: "Prosimo vnesite veljavno Å¡tevilko kreditne kartice.",
- equalTo: "Prosimo ponovno vnesite vrednost.",
- extension: "Prosimo vnesite vrednost z veljavno konÄnico.",
- maxlength: $.validator.format("Prosimo vnesite najveÄ {0} znakov."),
- minlength: $.validator.format("Prosimo vnesite najmanj {0} znakov."),
- rangelength: $.validator.format("Prosimo vnesite najmanj {0} in najveÄ {1} znakov."),
- range: $.validator.format("Prosimo vnesite vrednost med {0} in {1}."),
- max: $.validator.format("Prosimo vnesite vrednost manjše ali enako {0}."),
- min: $.validator.format("Prosimo vnesite vrednost veÄje ali enako {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sr.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sr.js
deleted file mode 100644
index 788367ca..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sr.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: SR (Serbian; ÑрпÑки језик)
- */
-$.extend($.validator.messages, {
- required: "Поље је обавезно.",
- remote: "Средите ово поље.",
- email: "УнеÑите иÑправну и-мејл адреÑу.",
- url: "УнеÑите иÑправан URL.",
- date: "УнеÑите иÑправан датум.",
- dateISO: "УнеÑите иÑправан датум (ISO).",
- number: "УнеÑите иÑправан број.",
- digits: "УнеÑите Ñамо цифе.",
- creditcard: "УнеÑите иÑправан број кредитне картице.",
- equalTo: "УнеÑите иÑту вредноÑÑ‚ поново.",
- extension: "УнеÑите вредноÑÑ‚ Ñа одговарајућом екÑтензијом.",
- maxlength: $.validator.format("УнеÑите мање од {0} карактера."),
- minlength: $.validator.format("УнеÑите барем {0} карактера."),
- rangelength: $.validator.format("УнеÑите вредноÑÑ‚ дугачку између {0} и {1} карактера."),
- range: $.validator.format("УнеÑите вредноÑÑ‚ између {0} и {1}."),
- max: $.validator.format("УнеÑите вредноÑÑ‚ мању или једнаку {0}."),
- min: $.validator.format("УнеÑите вредноÑÑ‚ већу или једнаку {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sr_lat.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sr_lat.js
deleted file mode 100644
index 0dd3c40e..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sr_lat.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: SR (Serbian - Latin alphabet; srpski jezik - latinica)
- */
-$.extend($.validator.messages, {
- required: "Polje je obavezno.",
- remote: "Sredite ovo polje.",
- email: "Unesite ispravnu e-mail adresu",
- url: "Unesite ispravan URL.",
- date: "Unesite ispravan datum.",
- dateISO: "Unesite ispravan datum (ISO).",
- number: "Unesite ispravan broj.",
- digits: "Unesite samo cifre.",
- creditcard: "Unesite ispravan broj kreditne kartice.",
- equalTo: "Unesite istu vrednost ponovo.",
- extension: "Unesite vrednost sa odgovarajućom ekstenzijom.",
- maxlength: $.validator.format("Unesite manje od {0} karaktera."),
- minlength: $.validator.format("Unesite barem {0} karaktera."),
- rangelength: $.validator.format("Unesite vrednost dugaÄku izmeÄ‘u {0} i {1} karaktera."),
- range: $.validator.format("Unesite vrednost između {0} i {1}."),
- max: $.validator.format("Unesite vrednost manju ili jednaku {0}."),
- min: $.validator.format("Unesite vrednost veću ili jednaku {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sv.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sv.js
deleted file mode 100644
index 7f0c95e4..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_sv.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: SV (Swedish; Svenska)
- */
-$.extend($.validator.messages, {
- required: "Detta f&auml;lt &auml;r obligatoriskt.",
- maxlength: $.validator.format("Du f&aring;r ange h&ouml;gst {0} tecken."),
- minlength: $.validator.format("Du m&aring;ste ange minst {0} tecken."),
- rangelength: $.validator.format("Ange minst {0} och max {1} tecken."),
- email: "Ange en korrekt e-postadress.",
- url: "Ange en korrekt URL.",
- date: "Ange ett korrekt datum.",
- dateISO: "Ange ett korrekt datum (&Aring;&Aring;&Aring;&Aring;-MM-DD).",
- number: "Ange ett korrekt nummer.",
- digits: "Ange endast siffror.",
- equalTo: "Ange samma v&auml;rde igen.",
- range: $.validator.format("Ange ett v&auml;rde mellan {0} och {1}."),
- max: $.validator.format("Ange ett v&auml;rde som &auml;r mindre eller lika med {0}."),
- min: $.validator.format("Ange ett v&auml;rde som &auml;r st&ouml;rre eller lika med {0}."),
- creditcard: "Ange ett korrekt kreditkortsnummer."
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_th.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_th.js
deleted file mode 100644
index 92a80ecc..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_th.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: TH (Thai; ไทย)
- */
-$.extend($.validator.messages, {
- required: "โปรดระบุ",
- remote: "โปรดà¹à¸à¹‰à¹„ขให้ถูà¸à¸•à¹‰à¸­à¸‡",
- email: "โปรดระบุที่อยู่อีเมล์ที่ถูà¸à¸•à¹‰à¸­à¸‡",
- url: "โปรดระบุ URL ที่ถูà¸à¸•à¹‰à¸­à¸‡",
- date: "โปรดระบุวันที่ ที่ถูà¸à¸•à¹‰à¸­à¸‡",
- dateISO: "โปรดระบุวันที่ ที่ถูà¸à¸•à¹‰à¸­à¸‡ (ระบบ ISO).",
- number: "โปรดระบุทศนิยมที่ถูà¸à¸•à¹‰à¸­à¸‡",
- digits: "โปรดระบุจำนวนเต็มที่ถูà¸à¸•à¹‰à¸­à¸‡",
- creditcard: "โปรดระบุรหัสบัตรเครดิตที่ถูà¸à¸•à¹‰à¸­à¸‡",
- equalTo: "โปรดระบุค่าเดิมอีà¸à¸„รั้ง",
- extension: "โปรดระบุค่าที่มีส่วนขยายที่ถูà¸à¸•à¹‰à¸­à¸‡",
- maxlength: $.validator.format("โปรดอย่าระบุค่าที่ยาวà¸à¸§à¹ˆà¸² {0} อัà¸à¸‚ระ"),
- minlength: $.validator.format("โปรดอย่าระบุค่าที่สั้นà¸à¸§à¹ˆà¸² {0} อัà¸à¸‚ระ"),
- rangelength: $.validator.format("โปรดอย่าระบุค่าความยาวระหว่าง {0} ถึง {1} อัà¸à¸‚ระ"),
- range: $.validator.format("โปรดระบุค่าระหว่าง {0} à¹à¸¥à¸° {1}"),
- max: $.validator.format("โปรดระบุค่าน้อยà¸à¸§à¹ˆà¸²à¸«à¸£à¸·à¸­à¹€à¸—่าà¸à¸±à¸š {0}"),
- min: $.validator.format("โปรดระบุค่ามาà¸à¸à¸§à¹ˆà¸²à¸«à¸£à¸·à¸­à¹€à¸—่าà¸à¸±à¸š {0}")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_tj.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_tj.js
deleted file mode 100644
index 06b75bb0..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_tj.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: TJ (Tajikistan; Забони тоҷикӣ)
- */
-$.extend($.validator.messages, {
- required: "Ворид кардани ин филд маҷбури аÑÑ‚.",
- remote: "ИлтимоÑ, маълумоти Ñаҳеҳ ворид кунед.",
- email: "ИлтимоÑ, почтаи Ñлектронии Ñаҳеҳ ворид кунед.",
- url: "ИлтимоÑ, URL адреÑи Ñаҳеҳ ворид кунед.",
- date: "ИлтимоÑ, таърихи Ñаҳеҳ ворид кунед.",
- dateISO: "ИлтимоÑ, таърихи Ñаҳеҳи (ISO)Ó£ ворид кунед.",
- number: "ИлтимоÑ, рақамҳои Ñаҳеҳ ворид кунед.",
- digits: "ИлтимоÑ, танҳо рақам ворид кунед.",
- creditcard: "ИлтимоÑ, кредит карди Ñаҳеҳ ворид кунед.",
- equalTo: "ИлтимоÑ, миқдори баробар ворид кунед.",
- extension: "ИлтимоÑ, қофиÑи файлро дуруÑÑ‚ интихоб кунед",
- maxlength: $.validator.format("ИлтимоÑ, бештар аз {0} рамз ворид накунед."),
- minlength: $.validator.format("ИлтимоÑ, камтар аз {0} рамз ворид накунед."),
- rangelength: $.validator.format("ИлтимоÑ, камтар аз {0} ва зиёда аз {1} рамз ворид кунед."),
- range: $.validator.format("ИлтимоÑ, аз {0} то {1} рақам зиёд ворид кунед."),
- max: $.validator.format("ИлтимоÑ, бештар аз {0} рақам ворид накунед."),
- min: $.validator.format("ИлтимоÑ, камтар аз {0} рақам ворид накунед.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_tr.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_tr.js
deleted file mode 100644
index c111bedf..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_tr.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: TR (Turkish; Türkçe)
- */
-$.extend($.validator.messages, {
- required: "Bu alanın doldurulması zorunludur.",
- remote: "Lütfen bu alanı düzeltin.",
- email: "Lütfen geçerli bir e-posta adresi giriniz.",
- url: "Lütfen geçerli bir web adresi (URL) giriniz.",
- date: "Lütfen geçerli bir tarih giriniz.",
- dateISO: "Lütfen geçerli bir tarih giriniz(ISO formatında)",
- number: "Lütfen geçerli bir sayı giriniz.",
- digits: "Lütfen sadece sayısal karakterler giriniz.",
- creditcard: "Lütfen geçerli bir kredi kartı giriniz.",
- equalTo: "Lütfen aynı değeri tekrar giriniz.",
- extension: "Lütfen geçerli uzantıya sahip bir değer giriniz.",
- maxlength: $.validator.format("Lütfen en fazla {0} karakter uzunluğunda bir değer giriniz."),
- minlength: $.validator.format("Lütfen en az {0} karakter uzunluğunda bir değer giriniz."),
- rangelength: $.validator.format("Lütfen en az {0} ve en fazla {1} uzunluğunda bir değer giriniz."),
- range: $.validator.format("Lütfen {0} ile {1} arasında bir değer giriniz."),
- max: $.validator.format("Lütfen {0} değerine eşit ya da daha küçük bir değer giriniz."),
- min: $.validator.format("Lütfen {0} değerine eşit ya da daha büyük bir değer giriniz."),
- require_from_group: "Lütfen bu alanların en az {0} tanesini doldurunuz."
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_uk.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_uk.js
deleted file mode 100644
index 21a510ef..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_uk.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: UK (Ukrainian; українÑька мова)
- */
-$.extend($.validator.messages, {
- required: "Це поле необхідно заповнити.",
- remote: "Будь лаÑка, введіть правильне значеннÑ.",
- email: "Будь лаÑка, введіть коректну адреÑу електронної пошти.",
- url: "Будь лаÑка, введіть коректний URL.",
- date: "Будь лаÑка, введіть коректну дату.",
- dateISO: "Будь лаÑка, введіть коректну дату у форматі ISO.",
- number: "Будь лаÑка, введіть чиÑло.",
- digits: "Вводите потрібно лише цифри.",
- creditcard: "Будь лаÑка, введіть правильний номер кредитної карти.",
- equalTo: "Будь лаÑка, введіть таке ж Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‰Ðµ раз.",
- extension: "Будь лаÑка, виберіть файл з правильним розширеннÑм.",
- maxlength: $.validator.format("Будь лаÑка, введіть не більше {0} Ñимволів."),
- minlength: $.validator.format("Будь лаÑка, введіть не менше {0} Ñимволів."),
- rangelength: $.validator.format("Будь лаÑка, введіть Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð¾Ð²Ð¶Ð¸Ð½Ð¾ÑŽ від {0} до {1} Ñимволів."),
- range: $.validator.format("Будь лаÑка, введіть чиÑло від {0} до {1}."),
- max: $.validator.format("Будь лаÑка, введіть чиÑло, менше або рівно {0}."),
- min: $.validator.format("Будь лаÑка, введіть чиÑло, більше або рівно {0}.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_vi.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_vi.js
deleted file mode 100644
index 3f6427fa..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_vi.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: VI (Vietnamese; Tiếng Việt)
- */
-$.extend($.validator.messages, {
- required: "Hãy nhập.",
- remote: "Hãy sửa cho đúng.",
- email: "Hãy nhập email.",
- url: "Hãy nhập URL.",
- date: "Hãy nhập ngày.",
- dateISO: "Hãy nhập ngày (ISO).",
- number: "Hãy nhập số.",
- digits: "Hãy nhập chữ số.",
- creditcard: "Hãy nhập số thẻ tín dụng.",
- equalTo: "Hãy nhập thêm lần nữa.",
- extension: "Phần mở rộng không đúng.",
- maxlength: $.validator.format("Hãy nhập từ {0} kí tự trở xuống."),
- minlength: $.validator.format("Hãy nhập từ {0} kí tự trở lên."),
- rangelength: $.validator.format("Hãy nhập từ {0} đến {1} kí tự."),
- range: $.validator.format("Hãy nhập từ {0} đến {1}."),
- max: $.validator.format("Hãy nhập từ {0} trở xuống."),
- min: $.validator.format("Hãy nhập từ {1} trở lên.")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_zh.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_zh.js
deleted file mode 100644
index a5e1edca..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_zh.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: ZH (Chinese, 中文 (ZhÅngwén), 汉语, 漢語)
- */
-$.extend($.validator.messages, {
- required: "这是必填字段",
- remote: "请修正此字段",
- email: "请输入有效的电å­é‚®ä»¶åœ°å€",
- url: "请输入有效的网å€",
- date: "请输入有效的日期",
- dateISO: "请输入有效的日期 (YYYY-MM-DD)",
- number: "请输入有效的数字",
- digits: "åªèƒ½è¾“入数字",
- creditcard: "请输入有效的信用å¡å·ç ",
- equalTo: "你的输入ä¸ç›¸åŒ",
- extension: "请输入有效的åŽç¼€",
- maxlength: $.validator.format("最多å¯ä»¥è¾“å…¥ {0} 个字符"),
- minlength: $.validator.format("最少è¦è¾“å…¥ {0} 个字符"),
- rangelength: $.validator.format("请输入长度在 {0} 到 {1} 之间的字符串"),
- range: $.validator.format("请输入范围在 {0} 到 {1} 之间的数值"),
- max: $.validator.format("请输入ä¸å¤§äºŽ {0} 的数值"),
- min: $.validator.format("请输入ä¸å°äºŽ {0} 的数值")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_zh_TW.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_zh_TW.js
deleted file mode 100644
index 8dcf32c1..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/messages_zh_TW.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Translated default messages for the jQuery validation plugin.
- * Locale: ZH (Chinese; 中文 (ZhÅngwén), 汉语, 漢語)
- * Region: TW (Taiwan)
- */
-$.extend($.validator.messages, {
- required: "必須填寫",
- remote: "請修正此欄ä½",
- email: "請輸入有效的電å­éƒµä»¶",
- url: "請輸入有效的網å€",
- date: "請輸入有效的日期",
- dateISO: "請輸入有效的日期 (YYYY-MM-DD)",
- number: "請輸入正確的數值",
- digits: "åªå¯è¼¸å…¥æ•¸å­—",
- creditcard: "請輸入有效的信用å¡è™Ÿç¢¼",
- equalTo: "è«‹é‡è¤‡è¼¸å…¥ä¸€æ¬¡",
- extension: "請輸入有效的後綴",
- maxlength: $.validator.format("最多 {0} 個字"),
- minlength: $.validator.format("最少 {0} 個字"),
- rangelength: $.validator.format("請輸入長度為 {0} 至 {1} 之間的字串"),
- range: $.validator.format("請輸入 {0} 至 {1} 之間的數值"),
- max: $.validator.format("請輸入ä¸å¤§æ–¼ {0} 的數值"),
- min: $.validator.format("請輸入ä¸å°æ–¼ {0} 的數值")
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_de.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_de.js
deleted file mode 100644
index d06cc138..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_de.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * Localized default methods for the jQuery validation plugin.
- * Locale: DE
- */
-$.extend($.validator.methods, {
- date: function(value, element) {
- return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value);
- },
- number: function(value, element) {
- return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
- }
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_es_CL.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_es_CL.js
deleted file mode 100644
index 4c942132..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_es_CL.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * Localized default methods for the jQuery validation plugin.
- * Locale: ES_CL
- */
-$.extend($.validator.methods, {
- date: function(value, element) {
- return this.optional(element) || /^\d\d?\-\d\d?\-\d\d\d?\d?$/.test(value);
- },
- number: function(value, element) {
- return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
- }
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_fi.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_fi.js
deleted file mode 100644
index 74d82658..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_fi.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- * Localized default methods for the jQuery validation plugin.
- * Locale: FI
- */
-$.extend($.validator.methods, {
- date: function(value, element) {
- return this.optional(element) || /^\d{1,2}\.\d{1,2}\.\d{4}$/.test(value);
- },
- number: function(value, element) {
- return this.optional(element) || /^-?(?:\d+)(?:,\d+)?$/.test(value);
- }
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_nl.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_nl.js
deleted file mode 100644
index 6a08b20b..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_nl.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Localized default methods for the jQuery validation plugin.
- * Locale: NL
- */
-$.extend($.validator.methods, {
- date: function(value, element) {
- return this.optional(element) || /^\d\d?[\.\/\-]\d\d?[\.\/\-]\d\d\d?\d?$/.test(value);
- }
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_pt.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_pt.js
deleted file mode 100644
index 092eb852..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/src/localization/methods_pt.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * Localized default methods for the jQuery validation plugin.
- * Locale: PT_BR
- */
-$.extend($.validator.methods, {
- date: function(value, element) {
- return this.optional(element) || /^\d\d?\/\d\d?\/\d\d\d?\d?$/.test(value);
- }
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/aria.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/test/aria.js
deleted file mode 100644
index 8ac7d1bc..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/aria.js
+++ /dev/null
@@ -1,83 +0,0 @@
-module("aria");
-
-test("Invalid field adds aria-invalid=true", function() {
- var ariaInvalidFirstName = $("#ariaInvalidFirstName"),
- form = $("#ariaInvalid");
-
- form.validate({
- rules: {
- ariaInvalidFirstName: "required"
- }
- });
- ariaInvalidFirstName.val("");
- ariaInvalidFirstName.valid();
- equal(ariaInvalidFirstName.attr("aria-invalid"), "true");
-});
-
-test("Valid field adds aria-invalid=false", function() {
- var ariaInvalidFirstName = $("#ariaInvalidFirstName"),
- form = $("#ariaInvalid");
-
- form.validate({
- rules: {
- ariaInvalidFirstName: "required"
- }
- });
- ariaInvalidFirstName.val("not empty");
- ariaInvalidFirstName.valid();
- equal(ariaInvalidFirstName.attr("aria-invalid"), "false");
- equal($("#ariaInvalid [aria-invalid=false]").length, 1);
-});
-
-test("resetForm(): removes all aria-invalid attributes", function() {
- var ariaInvalidFirstName = $("#ariaInvalidFirstName"),
- form = $("#ariaInvalid"),
- validator = form.validate({
- rules: {
- ariaInvalidFirstName: "required"
- }
- });
-
- ariaInvalidFirstName.val("not empty");
- ariaInvalidFirstName.valid();
- validator.resetForm();
- equal($("#ariaInvalid [aria-invalid]").length, 0, "resetForm() should remove any aria-invalid attributes");
-});
-
-test("Static required field adds aria-required", function() {
- var ariaRequiredStatic = $("#ariaRequiredStatic"),
- form = $("#ariaRequired");
-
- form.validate();
- equal(ariaRequiredStatic.attr("aria-required"), "true");
-});
-
-test("Data required field adds aria-required", function() {
- var ariaRequiredData = $("#ariaRequiredData"),
- form = $("#ariaRequired");
-
- form.validate();
- equal(ariaRequiredData.attr("aria-required"), "true");
-});
-
-test("Class required field adds aria-required", function() {
- var ariaRequiredClass = $("#ariaRequiredClass"),
- form = $("#ariaRequired");
-
- form.validate();
- equal(ariaRequiredClass.attr("aria-required"), "true");
-});
-
-test("Dynamically required field adds aria-required after valid()", function() {
- var ariaRequiredDynamic = $("#ariaRequiredDynamic"),
- form = $("#ariaRequired");
-
- form.resetForm();
- form.validate({
- rules: {
- ariaRequiredDynamic: "required"
- }
- });
- ariaRequiredDynamic.valid();
- equal(ariaRequiredDynamic.attr("aria-required"), "true");
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/error-placement.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/test/error-placement.js
deleted file mode 100644
index 40d7e092..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/error-placement.js
+++ /dev/null
@@ -1,358 +0,0 @@
-module( "placement" );
-
-test( "elements() order", function() {
- var container = $( "#orderContainer" ),
- v = $( "#elementsOrder" ).validate({
- errorLabelContainer: container,
- wrap: "li"
- });
-
- deepEqual(
- v.elements().map( function() {
- return $( this ).attr( "id" );
- }).get(),
- [
- "order1",
- "order2",
- "order3",
- "order4",
- "order5",
- "order6"
- ],
- "elements must be in document order"
- );
-
- v.form();
- deepEqual(
- container.children().map( function() {
- return $( this ).attr( "id" );
- }).get(),
- [
- "order1-error",
- "order2-error",
- "order3-error",
- "order4-error",
- "order5-error",
- "order6-error"
- ],
- "labels in error container must be in document order"
- );
-});
-
-test( "error containers, simple", function() {
- expect( 14 );
- var container = $( "#simplecontainer" ),
- v = $( "#form" ).validate({
- errorLabelContainer: container,
- showErrors: function() {
- container.find( "h3" ).html( jQuery.validator.format( "There are {0} errors in your form.", this.size()) );
- this.defaultShowErrors();
- }
- });
-
- v.prepareForm();
- ok( v.valid(), "form is valid" );
- equal( 0, container.find( ".error:not(input)" ).length, "There should be no error labels" );
- equal( "", container.find( "h3" ).html() );
-
- v.prepareForm();
- v.errorList = [
- {
- message: "bar",
- element: {
- name: "foo"
- }
- },
- {
- message: "necessary",
- element: {
- name: "required"
- }
- }
- ];
-
- ok( !v.valid(), "form is not valid after adding errors manually" );
- v.showErrors();
- equal( container.find( ".error:not(input)" ).length, 2, "There should be two error labels" );
- ok( container.is( ":visible" ), "Check that the container is visible" );
- container.find( ".error:not(input)" ).each(function() {
- ok( $( this ).is( ":visible" ), "Check that each label is visible" );
- });
- equal( "There are 2 errors in your form.", container.find( "h3" ).html() );
-
- v.prepareForm();
- ok( v.valid(), "form is valid after a reset" );
- v.showErrors();
- equal( container.find( ".error:not(input)" ).length, 2, "There should still be two error labels" );
- ok( container.is( ":hidden" ), "Check that the container is hidden" );
- container.find( ".error:not(input)" ).each(function() {
- ok( $( this ).is( ":hidden" ), "Check that each label is hidden" );
- });
-});
-
-test( "error containers, with labelcontainer I", function() {
- expect( 16 );
- var container = $( "#container" ),
- labelcontainer = $( "#labelcontainer" ),
- v = $( "#form" ).validate({
- errorContainer: container,
- errorLabelContainer: labelcontainer,
- wrapper: "li"
- });
-
- ok( v.valid(), "form is valid" );
- equal( 0, container.find( ".error:not(input)" ).length, "There should be no error labels in the container" );
- equal( 0, labelcontainer.find( ".error:not(input)" ).length, "There should be no error labels in the labelcontainer" );
- equal( 0, labelcontainer.find( "li" ).length, "There should be no lis labels in the labelcontainer" );
-
- v.errorList = [
- {
- message: "bar",
- element: {
- name: "foo"
- }
- },
- {
- name: "required",
- message: "necessary",
- element: {
- name: "required"
- }
- }
- ];
-
- ok( !v.valid(), "form is not valid after adding errors manually" );
- v.showErrors();
- equal( 0, container.find( ".error:not(input)" ).length, "There should be no error label in the container" );
- equal( 2, labelcontainer.find( ".error:not(input)" ).length, "There should be two error labels in the labelcontainer" );
- equal( 2, labelcontainer.find( "li" ).length, "There should be two error lis in the labelcontainer" );
- ok( container.is( ":visible" ), "Check that the container is visible" );
- ok( labelcontainer.is( ":visible" ), "Check that the labelcontainer is visible" );
- labelcontainer.find( ".error:not(input)" ).each(function() {
- ok( $( this ).is( ":visible" ), "Check that each label is visible1" );
- equal( "li", $( this ).parent()[0].tagName.toLowerCase(), "Check that each label is wrapped in an li" );
- ok( $( this ).parent( "li" ).is( ":visible" ), "Check that each parent li is visible" );
- });
-});
-
-test( "errorcontainer, show/hide only on submit", function() {
- expect( 14 );
- var container = $( "#container" ),
- labelContainer = $( "#labelcontainer" ),
- v = $( "#testForm1" ).bind( "invalid-form.validate", function() {
- ok( true, "invalid-form event triggered called" );
- }).validate({
- errorContainer: container,
- errorLabelContainer: labelContainer,
- showErrors: function() {
- container.html( jQuery.validator.format( "There are {0} errors in your form.", this.numberOfInvalids()) );
- ok( true, "showErrors called" );
- this.defaultShowErrors();
- }
- });
-
- equal( "", container.html(), "must be empty" );
- equal( "", labelContainer.html(), "must be empty" );
- // validate whole form, both showErrors and invalidHandler must be called once
- // preferably invalidHandler first, showErrors second
- ok( !v.form(), "invalid form" );
- equal( 2, labelContainer.find( ".error:not(input)" ).length );
- equal( "There are 2 errors in your form.", container.html() );
- ok( labelContainer.is( ":visible" ), "must be visible" );
- ok( container.is( ":visible" ), "must be visible" );
-
- $( "#firstname" ).val( "hix" ).keyup();
- $( "#testForm1" ).triggerHandler( "keyup", [
- jQuery.event.fix({
- type: "keyup",
- target: $( "#firstname" )[ 0 ]
- })
- ]);
- equal( 1, labelContainer.find( ".error:visible" ).length );
- equal( "There are 1 errors in your form.", container.html() );
-
- $( "#lastname" ).val( "abc" );
- ok( v.form(), "Form now valid, trigger showErrors but not invalid-form" );
-});
-
-test( "test label used as error container", function(assert) {
- expect( 8 );
- var form = $( "#testForm16" ),
- field = $( "#testForm16text" );
-
- form.validate({
- errorPlacement: function( error, element ) {
- // Append error within linked label
- $( "label[for='" + element.attr( "id" ) + "']" ).append( error );
- },
- errorElement: "span"
- });
-
- ok( !field.valid() );
- equal( "Field Label", field.next( "label" ).contents().first().text(), "container label isn't disrupted" );
- assert.hasError(field, "missing");
- ok( !field.attr( "aria-describedby" ), "field does not require aria-describedby attribute" );
-
- field.val( "foo" );
- ok( field.valid() );
- equal( "Field Label", field.next( "label" ).contents().first().text(), "container label isn't disrupted" );
- ok( !field.attr( "aria-describedby" ), "field does not require aria-describedby attribute" );
- assert.noErrorFor(field);
-});
-
-test( "test error placed adjacent to descriptive label", function(assert) {
- expect( 8 );
- var form = $( "#testForm16" ),
- field = $( "#testForm16text" );
-
- form.validate({
- errorElement: "span"
- });
-
- ok( !field.valid() );
- equal( 1, form.find( "label" ).length );
- equal( "Field Label", form.find( "label" ).text(), "container label isn't disrupted" );
- assert.hasError( field, "missing" );
-
- field.val( "foo" );
- ok( field.valid() );
- equal( 1, form.find( "label" ).length );
- equal( "Field Label", form.find( "label" ).text(), "container label isn't disrupted" );
- assert.noErrorFor( field );
-});
-
-test( "test descriptive label used alongside error label", function(assert) {
- expect( 8 );
- var form = $( "#testForm16" ),
- field = $( "#testForm16text" );
-
- form.validate({
- errorElement: "label"
- });
-
- ok( !field.valid() );
- equal( 1, form.find( "label.title" ).length );
- equal( "Field Label", form.find( "label.title" ).text(), "container label isn't disrupted" );
- assert.hasError( field, "missing" );
-
- field.val( "foo" );
- ok( field.valid() );
- equal( 1, form.find( "label.title" ).length );
- equal( "Field Label", form.find( "label.title" ).text(), "container label isn't disrupted" );
- assert.noErrorFor( field );
-});
-
-test( "test custom errorElement", function(assert) {
- expect( 4 );
- var form = $( "#userForm" ),
- field = $( "#username" );
-
- form.validate({
- messages: {
- username: "missing"
- },
- errorElement: "label"
- });
-
- ok( !field.valid() );
- assert.hasError( field, "missing", "Field should have error 'missing'" );
- field.val( "foo" );
- ok( field.valid() );
- assert.noErrorFor( field, "Field should not have a visible error" );
-});
-
-test( "test existing label used as error element", function(assert) {
- expect( 4 );
- var form = $( "#testForm14" ),
- field = $( "#testForm14text" );
-
- form.validate({ errorElement: "label" });
-
- ok( !field.valid() );
- assert.hasError( field, "required" );
-
- field.val( "foo" );
- ok( field.valid() );
- assert.noErrorFor( field );
-});
-
-test( "test existing non-label used as error element", function(assert) {
- expect( 4 );
- var form = $( "#testForm15" ),
- field = $( "#testForm15text" );
-
- form.validate({ errorElement: "span" });
-
- ok( !field.valid() );
- assert.hasError( field, "required" );
-
- field.val( "foo" );
- ok( field.valid() );
- assert.noErrorFor( field );
-});
-
-test( "test existing non-error aria-describedby", function( assert ) {
- expect( 8 );
- var form = $( "#testForm17" ),
- field = $( "#testForm17text" );
-
- equal( field.attr( "aria-describedby" ), "testForm17text-description" );
- form.validate({ errorElement: "span" });
-
- ok( !field.valid() );
- equal( field.attr( "aria-describedby" ), "testForm17text-description testForm17text-error" );
- assert.hasError( field, "required" );
-
- field.val( "foo" );
- ok( field.valid() );
- assert.noErrorFor( field );
-
- strictEqual( "This is where you enter your data", $("#testForm17text-description").text() );
- strictEqual( "", $("#testForm17text-error").text(), "Error label is empty for valid field" );
-});
-
-test( "test pre-assigned non-error aria-describedby", function( assert ) {
- expect( 7 );
- var form = $( "#testForm17" ),
- field = $( "#testForm17text" );
-
- // Pre-assign error identifier
- field.attr( "aria-describedby", "testForm17text-description testForm17text-error" );
- form.validate({ errorElement: "span" });
-
- ok( !field.valid() );
- equal( field.attr( "aria-describedby" ), "testForm17text-description testForm17text-error" );
- assert.hasError( field, "required" );
-
- field.val( "foo" );
- ok( field.valid() );
- assert.noErrorFor( field );
-
- strictEqual( "This is where you enter your data", $("#testForm17text-description").text() );
- strictEqual( "", $("#testForm17text-error").text(), "Error label is empty for valid field" );
-});
-
-test( "test id/name containing brackets", function( assert ) {
- var form = $( "#testForm18" ),
- field = $( "#testForm18\\[text\\]" );
-
- form.validate({
- errorElement: "span"
- });
-
- form.valid();
- field.valid();
- assert.hasError( field, "required" );
-});
-
-test( "test id/name containing $", function( assert ) {
- var form = $( "#testForm19" ),
- field = $( "#testForm19\\$text" );
-
- form.validate({
- errorElement: "span"
- });
-
- field.valid();
- assert.hasError( field, "required" );
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/index.html b/wqflask/wqflask/static/new/packages/ValidationPlugin/test/index.html
deleted file mode 100644
index 6f670770..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/index.html
+++ /dev/null
@@ -1,375 +0,0 @@
-<!DOCTYPE html>
-<html id="html">
-<head>
- <meta charset="utf-8">
- <title>jQuery - Validation Test Suite</title>
- <link rel="stylesheet" href="qunit/qunit.css">
- <script src="../lib/jquery.js"></script>
- <script src="../lib/jquery.simulate.js"></script>
- <script src="../lib/jquery.form.js"></script>
- <script src="qunit/qunit.js"></script>
- <script src="../lib/jquery.mockjax.js"></script>
- <script src="../dist/jquery.validate.js"></script>
- <script src="../dist/additional-methods.js"></script>
- <script src="test.js"></script>
- <script src="rules.js"></script>
- <script src="messages.js"></script>
- <script src="methods.js"></script>
- <script src="aria.js"></script>
- <script src="error-placement.js"></script>
-</head>
-<body id="body">
-<h1 id="qunit-header">
- <a href="http://jqueryvalidation.org/">jQuery Validation Plugin</a> Test Suite
- <a href="?jquery=1.7.2">jQuery 1.7.2</a>
- <a href="?jquery=1.8.3">jQuery 1.8.3</a>
- <a href="?jquery=1.9.1">jQuery 1.9.1</a>
- <a href="?jquery=1.11.1">jQuery 1.11.1</a>
- <a href="?jquery=git">jQuery Latest (git)</a>
-</h1>
-<div>
-</div>
-<h2 id="qunit-banner"></h2>
-<div id="qunit-testrunner-toolbar"></div>
-<h2 id="qunit-userAgent"></h2>
-<ol id="qunit-tests"></ol>
-<!-- Test HTML -->
-<div id="other" style="display:none;">
- <input type="password" name="pw1" id="pw1" value="engfeh">
- <input type="password" name="pw2" id="pw2" value="">
-</div>
-<div id="qunit-fixture">
- <p id="firstp">See <a id="simon1" href="http://simon.incutio.com/archive/2003/03/25/#getElementsBySelector" rel="bookmark">this blog entry</a> for more information.</p>
- <p id="ap">
- Here are some links in a normal paragraph: <a id="google" href="http://www.google.com/" title="Google!">Google</a>,
- <a id="groups" href="http://groups.google.com/">Google Groups</a>. This link has
- <code><a href="#" id="anchor1">class="blog"</a>
- </code>:
- <a href="http://diveintomark.org/" class="blog" hreflang="en" id="mark">diveintomark</a>
- </p>
- <div id="foo">
- <p id="sndp">Everything inside the red border is inside a div with
- <code>id="foo"</code>.</p>
- <p lang="en" id="en">This is a normal link: <a id="yahoo" href="http://www.yahoo.com/" class="blogTest">Yahoo</a>
- </p>
- <p id="sap">This link has
- <code><a href="#2" id="anchor2">class="blog"</a>
- </code>: <a href="http://simon.incutio.com/" class="blog link" id="simon">Simon Willison's Weblog</a>
- </p>
- </div>
- <p id="first">Try them out:</p>
- <ul id="firstUL"></ul>
- <ol id="empty"></ol>
- <form id="testForm1">
- <input type="text" data-rule-required="true" data-rule-minlength="2" title="buga" name="firstname" id="firstname">
- <label id="errorFirstname" for="firstname" class="error">error for firstname</label>
- <input type="text" data-rule-required="true" title="buga" name="lastname" id="lastname">
- <input type="text" data-rule-required="true" title="something" name="something" id="something" value="something">
- </form>
- <form id="testForm1clean">
- <input title="buga" name="firstnamec" id="firstnamec">
- <label id="errorFirstnamec" for="firstnamec" class="error">error for firstname</label>
- <input title="buga" name="lastname" id="lastnamec">
- <input name="username" id="usernamec">
- </form>
- <form id="userForm">
- <input type="text" data-rule-required="true" name="username" id="username">
- <input type="submit" name="submitButton" value="submitButtonValue">
- </form>
- <form id="signupForm" action="form.php">
- <input id="user" name="user" title="Please enter your username (at least 3 characters)" data-rule-required="true" data-rule-minlength="3">
- <input type="password" name="password" id="password" data-rule-required="true" data-rule-minlength="5">
- </form>
- <form id="testForm2">
- <input data-rule-required="true" type="radio" name="agree" id="agb">
- <label for="agree" id="agreeLabel" class="xerror">error for agb</label>
- </form>
- <form id="testForm3">
- <select data-rule-required="true" name="meal" id="meal">
- <option value="">Please select...</option>
- <option value="1">Food</option>
- <option value="2">Milk</option>
- </select>
- </form>
- <div class="error" id="errorContainer">
- <ul>
- <li class="error" id="errorWrapper">
- <label for="meal" id="mealLabel" class="error">error for meal</label>
- </li>
- </ul>
- </div>
- <form id="testForm4">
- <input data-rule-foo="true" name="f1" id="f1">
- <input data-rule-bar="true" name="f2" id="f2">
- </form>
- <form id="testForm5">
- <input data-rule-equalto="#x2" value="x" name="x1" id="x1">
- <input data-rule-equalto="#x1" value="y" name="x2" id="x2">
- </form>
- <form id="testForm6">
- <input data-rule-required="true" data-rule-minlength="2" type="checkbox" name="check" id="form6check1">
- <input type="checkbox" name="check" id="form6check2">
- </form>
- <form id="testForm7">
- <select data-rule-required="true" data-rule-minlength="2" name="selectf7" id="selectf7" multiple="multiple">
- <option id="optionxa" value="0">0</option>
- <option id="optionxb" value="1">1</option>
- <option id="optionxc" value="2">2</option>
- <option id="optionxd" value="3">3</option>
- </select>
- </form>
- <form id="dateRangeForm">
- <input id="fromDate" name="fromDate" class="requiredDateRange" value="x">
- <input id="toDate" name="toDate" class="requiredDateRange" value="y">
- <span class="errorContainer"></span>
- </form>
- <form id="testForm8">
- <input id="form8input" data-rule-required="true" data-rule-number="true" data-rule-rangelength="2,8" name="abc">
- <input type="radio" name="radio1">
- </form>
- <form id="testForm9">
- <input id="testEmail9" data-rule-required="true" data-rule-email="true" data-msg-required="required" data-msg-email="email">
- <input id="testGeneric9" data-rule-required="true" data-rule-email="true" data-msg="generic" data-msg-email="email">
- </form>
- <form id="testForm10">
- <input type="radio" name="testForm10Radio" value="1" id="testForm10Radio1">
- <input type="radio" name="testForm10Radio" value="2" id="testForm10Radio2">
- </form>
- <form id="testForm11">
- <!-- HTML5 -->
- <input required type="text" name="testForm11Text" id="testForm11text1">
- </form>
- <form id="testForm12">
- <!-- empty "type" attribute -->
- <input name="testForm12text" id="testForm12text" data-rule-required="true">
- </form>
- <form id="testForm13">
- <select id="cars-select" name="cars" title="Please select at least two cars, but no more than three" required rangelength="[2,3]" multiple="multiple">
- <option value="m_sl">Mercedes SL</option>
- <option value="o_c">Opel Corsa</option>
- <option value="vw_p">VW Polo</option>
- <option value="t_s">Titanic Skoda</option>
- </select>
- </form>
- <form id="testForm14">
- <!-- test existing "label" error holder -->
- <input name="testForm14text" id="testForm14text" data-rule-required="true" data-msg="required">
- <label for="testForm14text" class="error"></label>
- </form>
- <form id="testForm16">
- <!-- test existing "label" attribute -->
- <input name="testForm16text" id="testForm16text" data-rule-required="true" data-msg="missing">
- <label for="testForm16text" class="title">Field Label</label>
- </form>
- <form id="testForm15">
- <!-- test existing non-label error holder -->
- <input name="testForm15text" id="testForm15text" data-rule-required="true" data-msg="required" aria-describedby="testForm15text-error">
- <span id="testForm15text-error" class="error"></span>
- </form>
- <form id="testForm17">
- <!-- test existing non-error aria-describedby -->
- <label for="testForm17text">My Label</label>
- <input name="testForm17text" id="testForm17text" data-rule-required="true" data-msg="required" aria-describedby="testForm17text-description">
- <span id="testForm17text-description">This is where you enter your data</span>
- </form>
- <form id="testForm18">
- <!-- test id/name containing brackets -->
- <input name="testForm18[text]" id="testForm18[text]" required>
- </form>
- <form id="testForm19">
- <!-- test id/name containing $ -->
- <input name="testForm19$text" id="testForm19$text" required>
- </form>
- <form id="dataMessages">
- <input name="dataMessagesName" id="dataMessagesName" class="required" data-msg-required="You must enter a value here">
- </form>
- <div id="simplecontainer">
- <h3></h3>
- </div>
- <div id="container" style="min-height:1px"></div>
- <ol id="labelcontainer"></ol>
- <form id="elementsOrder">
- <select class="required" name="order1" id="order1">
- <option value="">none</option>
- </select>
- <input class="required" name="order2" id="order2">
- <input class="required" name="order3" type="checkbox" id="order3">
- <input class="required" name="order4" id="order4">
- <input class="required" name="order5" type="radio" id="order5">
- <input class="required" name="order6" id="order6">
- <ul id="orderContainer">
- </ul>
- </form>
- <form id="form" action="formaction">
- <input type="text" name="action" value="Test" id="text1">
- <input type="text" name="text2" value="" id="text1b">
- <input type="text" name="text2" value="T " id="text1c">
- <input type="text" name="text2" value="T" id="text2">
- <input type="text" name="text2" value="TestTestTest" id="text3">
- <input type="text" name="action" value="0" id="value1">
- <input type="text" name="text2" value="10" id="value2">
- <input type="text" name="text2" value="1000" id="value3">
- <input type="radio" name="radio1" id="radio1">
- <input type="radio" name="radio1" id="radio1a">
- <input type="radio" name="radio2" id="radio2" checked="checked">
- <input type="radio" name="radio" id="radio3">
- <input type="radio" name="radio" id="radio4" checked="checked">
- <input type="checkbox" name="check" id="check1" checked="checked">
- <input type="checkbox" name="check" id="check1b">
- <input type="checkbox" name="check2" id="check2">
- <input type="checkbox" name="check3" id="check3" checked="checked">
- <input type="checkbox" name="check3" checked="checked">
- <input type="checkbox" name="check3" checked="checked">
- <input type="checkbox" name="check3" checked="checked">
- <input type="checkbox" name="check3" checked="checked">
- <input type="hidden" name="hidden" id="hidden1">
- <input type="text" style="display:none;" name="foo[bar]" id="hidden2">
- <input type="text" readonly="readonly" id="name" name="name" value="name">
- <button name="button">Button</button>
- <textarea id="area1" name="area1">foobar</textarea>
- <textarea id="area2" name="area2"></textarea>
- <select name="select1" id="select1">
- <option id="option1a" value="">Nothing</option>
- <option id="option1b" value="1">1</option>
- <option id="option1c" value="2">2</option>
- <option id="option1d" value="3">3</option>
- </select>
- <select name="select2" id="select2">
- <option id="option2a" value="">Nothing</option>
- <option id="option2b" value="1">1</option>
- <option id="option2c" value="2">2</option>
- <option id="option2d" selected="selected" value="3">3</option>
- </select>
- <select name="select3" id="select3" multiple="multiple">
- <option id="option3a" value="">Nothing</option>
- <option id="option3b" selected="selected" value="1">1</option>
- <option id="option3c" selected="selected" value="2">2</option>
- <option id="option3d" value="3">3</option>
- </select>
- <select name="select4" id="select4" multiple="multiple">
- <option id="option4a" selected="selected" value="1">1</option>
- <option id="option4b" selected="selected" value="2">2</option>
- <option id="option4c" selected="selected" value="3">3</option>
- <option id="option4d" selected="selected" value="4">4</option>
- <option id="option4e" selected="selected" value="5">5</option>
- </select>
- <select name="select5" id="select5" multiple="multiple">
- <option id="option5a" value="0">0</option>
- <option id="option5b" value="1">1</option>
- <option id="option5c" value="2">2</option>
- <option id="option5d" value="3">3</option>
- </select>
- </form>
- <form id="v2">
- <input id="v2-i1" name="v2-i1" class="required">
- <input id="v2-i2" name="v2-i2" class="required email">
- <input id="v2-i3" name="v2-i3" class="url">
- <input id="v2-i4" name="v2-i4" class="required" minlength="2">
- <input id="v2-i5" name="v2-i5" class="required" minlength="2" maxlength="5" customMethod1="123">
- <input id="v2-i6" name="v2-i6" class="required customMethod2" data-rule-maxlength="5" data-rule-minlength="2">
- <input id="v2-i7" name="v2-i7">
- </form>
- <form id="checkables">
- <input type="checkbox" id="checkable1" name="checkablesgroup" class="required">
- <input type="checkbox" id="checkable2" name="checkablesgroup">
- <input type="checkbox" id="checkable3" name="checkablesgroup">
- </form>
- <form id="subformRequired">
- <div class="billingAddressControl">
- <input type="checkbox" id="bill_to_co" name="bill_to_co" class="toggleCheck" checked="checked" style="width: auto;" tabindex="1">
- <label for="bill_to_co" style="cursor:pointer">Same as Company Address</label>
- </div>
- <div id="subform">
- <input maxlength="40" class="billingRequired" name="bill_first_name" size="20" type="text" tabindex="2" value="">
- </div>
- <input id="co_name" class="required" maxlength="40" name="co_name" size="20" type="text" tabindex="1" value="">
- </form>
- <form id="withTitle">
- <input class="required" name="hastitle" type="text" title="fromtitle">
- </form>
- <form id="ccform" method="get">
- <input id="cardnumber" name="cardnumber">
- </form>
- <form id="productInfo">
- <input class="productInfo" name="partnumber">
- <input class="productInfo" name="description">
- <input class="productInfo" name="color">
- <input name="supplier">
- <input class="productInfo" type="checkbox" name="discount">
- </form>
- <form id="updateLabel">
- <input class="required" name="updateLabelInput" id="updateLabelInput" data-msg-required="You must enter a value here">
- <label id="targetLabel" class="error" for="updateLabelInput">Some server-side error</label>
- </form>
- <form id="rangesMinDateInvalid">
- <input type="date" id="minDateInvalid" name="minDateInvalid" min="2012-12-21" value="2012-11-21">
- </form>
- <form id="ranges">
- <input type="date" id="maxDateInvalid" name="maxDateInvalid" max="2012-12-21" value="2013-01-21">
- <input type="date" id="rangeDateInvalidGreater" name="rangeDateInvalidGreater" min="2012-11-21" max="2013-01-21" value="2013-02-21">
- <input type="date" id="rangeDateInvalidLess" name="rangeDateInvalidLess" min="2012-11-21" max="2013-01-21" value="2012-10-21">
- <input type="date" id="maxDateValid" name="maxDateValid" max="2013-01-21" value="2012-12-21">
- <input type="date" id="rangeDateValid" name="rangeDateValid" min="2012-11-21" max="2013-01-21" value="2012-12-21">
- <!-- input type text is not supposed to have min/max according to html5,
- but for backward compatibility with 1.10.0 we treat it as number.
- you can also use type="number", in which case the browser may also
- do validation, and mobile browsers may offer a numeric keypad to edit
- the value.
- Type absent is treated like type="text".
- -->
- <input type="text" id="rangeTextInvalidGreater" name="rangeTextInvalidGreater" min="50" max="200" value="1000">
- <input type="text" id="rangeTextInvalidLess" name="rangeTextInvalidLess" min="200" max="1000" value="50">
- <input id="rangeAbsentInvalidGreater" name="rangeAbsentInvalidGreater" min="50" max="200" value="1000">
- <input id="rangeAbsentInvalidLess" name="rangeAbsentInvalidLess" min="200" max="1000" value="50">
- <input type="text" id="rangeTextValid" name="rangeTextValid" min="50" max="1000" value="200">
- <input type="text" id="rangeTextDataRuleValid" name="rangeTextValid" min="50" data-rule-max="1000.00" value="200">
- <input id="rangeAbsentValid" name="rangeAbsentValid" min="50" max="1000" value="200">
- <!-- ranges are like numbers in html5, except that browser is not required
- to demand an exact value. User interface could be a slider.
- -->
- <input type="range" id="rangeRangeValid" name="rangeRangeValid" min="50" max="1000" value="200">
- <input type="number" id="rangeNumberValid" name="rangeNumberValid" min="50" max="1000" value="200">
- <input type="number" id="rangeNumberInvalidGreater" name="rangeNumberInvalidGreater" min="50" max="200" value="1000">
- <input type="number" id="rangeNumberInvalidLess" name="rangeNumberInvalidLess" min="50" max="200" value="6">
- <input type="number" id="rangeMinZeroInvalidLess" name="rangeMinZeroInvalidLess" min="0" value="-1">
- <input type="number" id="rangeMinZeroValidEqual" name="rangeMinZeroValidEqual" min="0" value="0">
- <input type="number" id="rangeMinZeroValidGreater" name="rangeMinZeroValidGreater" min="0" value="1">
- </form>
- <form id="rangeMinDateValid">
- <input type="date" id="minDateValid" name="minDateValid" min="2012-11-21" value="2012-12-21">
- </form>
- <form id="bypassValidation">
- <input type="text" name="bypassValidationRequiredInput" required>
- <input id="normalSubmit" type="submit" value="submit">
- <input id="bypassSubmitWithCancel" type="submit" class="cancel" value="bypass1">
- <input id="bypassSubmitWithNoValidate1" type="submit" formnovalidate value="bypass1">
- <input id="bypassSubmitWithNoValidate2" type="submit" formnovalidate="formnovalidate" value="bypass2">
- </form>
- <form id="ariaInvalid">
- <input type="text" name="ariaInvalidFirstName" id="ariaInvalidFirstName">
- </form>
- <form id="ariaRequired">
- <input type="text" name="ariaRequiredDynamic" id="ariaRequiredDynamic">
- <input type="text" name="ariaRequiredStatic" id="ariaRequiredStatic" required="">
- <input type="text" name="ariaRequiredData" id="ariaRequiredData" data-rule-required="true">
- <input type="text" name="ariaRequiredClass" id="ariaRequiredClass" class="required">
- </form>
- <form id="ignoredElements">
- <select id="ss1" class="ignore">
- <option value="1">option 1</option>
- <option value="2">option 2</option>
- </select>
- <br>
- <input name="test" class="required" value="">
- </form>
- <form id="radiocheckbox" autocomplete="off">
- <input id="radiocheckbox-0-1" autocomplete="off" type="radio" name="radiocheckbox-0" required="required">
- <input id="radiocheckbox-0-2" autocomplete="off" type="radio" name="radiocheckbox-0" required="required">
- <input id="radiocheckbox-0-3" autocomplete="off" type="radio" name="radiocheckbox-0" required="required">
- <input id="radiocheckbox-1-1" autocomplete="off" type="checkbox" name="radiocheckbox-1" required="required">
- <input id="radiocheckbox-1-2" autocomplete="off" type="checkbox" name="radiocheckbox-1" required="required">
- <input id="radiocheckbox-1-3" autocomplete="off" type="checkbox" name="radiocheckbox-1" required="required">
- </form>
-</div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/messages.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/test/messages.js
deleted file mode 100644
index 10b4fde8..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/messages.js
+++ /dev/null
@@ -1,69 +0,0 @@
-module("messages");
-
-test("predefined message not overwritten by addMethod(a, b, undefined)", function() {
- var message = "my custom message";
- $.validator.messages.custom = message;
- $.validator.addMethod("custom", function() {});
- deepEqual(message, $.validator.messages.custom);
- delete $.validator.messages.custom;
- delete $.validator.methods.custom;
-});
-
-test("group error messages", function() {
- $.validator.addClassRules({
- requiredDateRange: { required: true, date: true, dateRange: true }
- });
- $.validator.addMethod("dateRange", function() {
- return new Date($("#fromDate").val()) < new Date($("#toDate").val());
- }, "Please specify a correct date range.");
- var form = $("#dateRangeForm");
- form.validate({
- groups: {
- dateRange: "fromDate toDate"
- },
- errorPlacement: function(error) {
- form.find(".errorContainer").append(error);
- }
- });
- ok( !form.valid() );
- equal( 1, form.find(".errorContainer *").length );
- equal( "Please enter a valid date.", form.find(".errorContainer .error:not(input)").text() );
-
- $("#fromDate").val("12/03/2006");
- $("#toDate").val("12/01/2006");
- ok( !form.valid() );
- equal( "Please specify a correct date range.", form.find(".errorContainer .error:not(input)").text() );
-
- $("#toDate").val("12/04/2006");
- ok( form.valid() );
- ok( form.find(".errorContainer .error:not(input)").is(":hidden") );
-});
-
-test("read messages from metadata", function() {
- var form = $("#testForm9"),
- e, g;
-
- form.validate();
- e = $("#testEmail9");
- e.valid();
- equal( form.find("#testEmail9").next(".error:not(input)").text(), "required" );
- e.val("bla").valid();
- equal( form.find("#testEmail9").next(".error:not(input)").text(), "email" );
-
- g = $("#testGeneric9");
- g.valid();
- equal( form.find("#testGeneric9").next(".error:not(input)").text(), "generic");
- g.val("bla").valid();
- equal( form.find("#testGeneric9").next(".error:not(input)").text(), "email" );
-});
-
-test("read messages from metadata, with meta option specified, but no metadata in there", function() {
- var form = $("#testForm1clean");
- form.validate({
- meta: "validate",
- rules: {
- firstnamec: "required"
- }
- });
- ok(!form.valid(), "not valid");
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/methods.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/test/methods.js
deleted file mode 100644
index 9b95ca79..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/methods.js
+++ /dev/null
@@ -1,1225 +0,0 @@
-(function($) {
-
-function methodTest( methodName ) {
- var v = jQuery("#form").validate(),
- method = $.validator.methods[methodName],
- element = $("#firstname")[0];
-
- return function(value, param) {
- element.value = value;
- return method.call( v, value, element, param );
- };
-}
-
-module("methods");
-
-test("default messages", function() {
- var m = $.validator.methods;
- $.each(m, function(key) {
- ok( jQuery.validator.messages[key], key + " has a default message." );
- });
-});
-
-test("digit", function() {
- var method = methodTest("digits");
- ok( method( "123" ), "Valid digits" );
- ok(!method( "123.000" ), "Invalid digits" );
- ok(!method( "123.000,00" ), "Invalid digits" );
- ok(!method( "123.0.0,0" ), "Invalid digits" );
- ok(!method( "x123" ), "Invalid digits" );
- ok(!method( "100.100,0,0" ), "Invalid digits" );
-});
-
-test("url", function() {
- var method = methodTest("url");
- ok( method( "http://bassistance.de/jquery/plugin.php?bla=blu" ), "Valid url" );
- ok( method( "https://bassistance.de/jquery/plugin.php?bla=blu" ), "Valid url" );
- ok( method( "ftp://bassistance.de/jquery/plugin.php?bla=blu" ), "Valid url" );
- ok( method( "http://www.føtex.dk/" ), "Valid url, danish unicode characters" );
- ok( method( "http://bösendorfer.de/" ), "Valid url, german unicode characters" );
- ok( method( "http://142.42.1.1" ), "Valid IP Address" );
- ok( method( "http://pro.photography" ), "Valid long TLD" );
- ok( method( "//code.jquery.com/jquery-1.11.3.min.js" ), "Valid protocol-relative url" );
- ok( method( "//142.42.1.1" ), "Valid protocol-relative IP Address" );
- ok(!method( "htp://code.jquery.com/jquery-1.11.3.min.js" ), "Invalid protocol" );
- ok(!method( "http://192.168.8." ), "Invalid IP Address" );
- ok(!method( "http://bassistance" ), "Invalid url" ); // valid
- ok(!method( "http://bassistance." ), "Invalid url" ); // valid
- ok(!method( "http://bassistance,de" ), "Invalid url" );
- ok(!method( "http://bassistance;de" ), "Invalid url" );
- ok(!method( "http://.bassistancede" ), "Invalid url" );
- ok(!method( "bassistance.de" ), "Invalid url" );
-});
-
-test("url2 (tld optional)", function() {
- var method = methodTest("url2");
- ok( method( "http://bassistance.de/jquery/plugin.php?bla=blu" ), "Valid url" );
- ok( method( "https://bassistance.de/jquery/plugin.php?bla=blu" ), "Valid url" );
- ok( method( "ftp://bassistance.de/jquery/plugin.php?bla=blu" ), "Valid url" );
- ok( method( "http://www.føtex.dk/" ), "Valid url, danish unicode characters" );
- ok( method( "http://bösendorfer.de/" ), "Valid url, german unicode characters" );
- ok( method( "http://192.168.8.5" ), "Valid IP Address" );
- ok(!method( "http://192.168.8." ), "Invalid IP Address" );
- ok( method( "http://bassistance" ), "Invalid url" );
- ok( method( "http://bassistance." ), "Invalid url" );
- ok(!method( "http://bassistance,de" ), "Invalid url" );
- ok(!method( "http://bassistance;de" ), "Invalid url" );
- ok(!method( "http://.bassistancede" ), "Invalid url" );
- ok(!method( "bassistance.de" ), "Invalid url" );
-});
-
-test("email", function() {
- var method = methodTest("email");
- ok( method( "name@domain.tld" ), "Valid email" );
- ok( method( "name@domain.tl" ), "Valid email" );
- ok( method( "bart+bart@tokbox.com" ), "Valid email" );
- ok( method( "bart+bart@tokbox.travel" ), "Valid email" );
- ok( method( "n@d.tld" ), "Valid email" );
- ok( method( "bla.blu@g.mail.com"), "Valid email" );
- ok( method( "name@domain" ), "Valid email" );
- ok( method( "name.@domain.tld" ), "Valid email" );
- ok( method( "name@website.a" ), "Valid email" );
- ok( method( "name@pro.photography" ), "Valid email" );
- ok(!method( "ole@føtex.dk"), "Invalid email" );
- ok(!method( "jörn@bassistance.de"), "Invalid email" );
- ok(!method( "name" ), "Invalid email" );
- ok(!method( "test@test-.com" ), "Invalid email" );
- ok(!method( "name@" ), "Invalid email" );
- ok(!method( "name,@domain.tld" ), "Invalid email" );
- ok(!method( "name;@domain.tld" ), "Invalid email" );
- ok(!method( "name;@domain.tld." ), "Invalid email" );
-});
-
-test("number", function() {
- var method = methodTest("number");
- ok( method( "123" ), "Valid number" );
- ok( method( "-123" ), "Valid number" );
- ok( method( "123,000" ), "Valid number" );
- ok( method( "-123,000" ), "Valid number" );
- ok( method( "123,000.00" ), "Valid number" );
- ok( method( "-123,000.00" ), "Valid number" );
- ok(!method( "-" ), "Invalid number" );
- ok(!method( "123.000,00" ), "Invalid number" );
- ok(!method( "123.0.0,0" ), "Invalid number" );
- ok(!method( "x123" ), "Invalid number" );
- ok(!method( "100.100,0,0" ), "Invalid number" );
-
- ok( method( "" ), "Blank is valid" );
- ok( method( "123" ), "Valid decimal" );
- ok( method( "123000" ), "Valid decimal" );
- ok( method( "123000.12" ), "Valid decimal" );
- ok( method( "-123000.12" ), "Valid decimal" );
- ok( method( "123.000" ), "Valid decimal" );
- ok( method( "123,000.00" ), "Valid decimal" );
- ok( method( "-123,000.00" ), "Valid decimal" );
- ok( method( ".100" ), "Valid decimal" );
- ok(!method( "1230,000.00" ), "Invalid decimal" );
- ok(!method( "123.0.0,0" ), "Invalid decimal" );
- ok(!method( "x123" ), "Invalid decimal" );
- ok(!method( "100.100,0,0" ), "Invalid decimal" );
-});
-
-/* disabled for now, need to figure out how to test localized methods
-test("numberDE", function() {
- var method = methodTest("numberDE");
- ok( method( "123" ), "Valid numberDE" );
- ok( method( "-123" ), "Valid numberDE" );
- ok( method( "123.000" ), "Valid numberDE" );
- ok( method( "-123.000" ), "Valid numberDE" );
- ok( method( "123.000,00" ), "Valid numberDE" );
- ok( method( "-123.000,00" ), "Valid numberDE" );
- ok(!method( "123,000.00" ), "Invalid numberDE" );
- ok(!method( "123,0,0.0" ), "Invalid numberDE" );
- ok(!method( "x123" ), "Invalid numberDE" );
- ok(!method( "100,100.0.0" ), "Invalid numberDE" );
-
- ok( method( "" ), "Blank is valid" );
- ok( method( "123" ), "Valid decimalDE" );
- ok( method( "123000" ), "Valid decimalDE" );
- ok( method( "123000,12" ), "Valid decimalDE" );
- ok( method( "-123000,12" ), "Valid decimalDE" );
- ok( method( "123.000" ), "Valid decimalDE" );
- ok( method( "123.000,00" ), "Valid decimalDE" );
- ok( method( "-123.000,00" ), "Valid decimalDE" )
- ok(!method( "123.0.0,0" ), "Invalid decimalDE" );
- ok(!method( "x123" ), "Invalid decimalDE" );
- ok(!method( "100,100.0.0" ), "Invalid decimalDE" );
-});
-*/
-
-test("date", function() {
- var method = methodTest("date");
- ok( method( "06/06/1990" ), "Valid date" );
- ok( method( "6/6/06" ), "Valid date" );
- ok(!method( "1990x-06-06" ), "Invalid date" );
-});
-
-test("dateISO", function() {
- var method = methodTest("dateISO");
- ok( method( "1990-06-06" ), "Valid date" );
- ok( method( "1990-01-01" ), "Valid date" );
- ok( method( "1990-01-31" ), "Valid date" );
- ok( method( "1990-12-01" ), "Valid date" );
- ok( method( "1990-12-31" ), "Valid date" );
- ok( method( "1990/06/06" ), "Valid date" );
- ok( method( "1990-6-6" ), "Valid date" );
- ok( method( "1990/6/6" ), "Valid date" );
- ok(!method( "1990-106-06" ), "Invalid date" );
- ok(!method( "190-06-06" ), "Invalid date" );
- ok(!method( "1990-00-06" ), "Invalid date" );
- ok(!method( "1990-13-01" ), "Invalid date" );
- ok(!method( "1990-01-00" ), "Invalid date" );
- ok(!method( "1990-01-32" ), "Invalid date" );
- ok(!method( "1990-13-32" ), "Invalid date" );
-});
-
-/* disabled for now, need to figure out how to test localized methods
-test("dateDE", function() {
- var method = methodTest("dateDE");
- ok( method( "03.06.1984" ), "Valid dateDE" );
- ok( method( "3.6.84" ), "Valid dateDE" );
- ok(!method( "6-6-06" ), "Invalid dateDE" );
- ok(!method( "1990-06-06" ), "Invalid dateDE" );
- ok(!method( "06/06/1990" ), "Invalid dateDE" );
- ok(!method( "6/6/06" ), "Invalid dateDE" );
-});
-*/
-
-test("required", function() {
- var v = jQuery("#form").validate(),
- method = $.validator.methods.required,
- e = $("#text1, #text1b, #hidden2, #select1, #select2");
- ok( method.call( v, e[0].value, e[0]), "Valid text input" );
- ok(!method.call( v, e[1].value, e[1]), "Invalid text input" );
- ok(!method.call( v, e[2].value, e[2]), "Invalid text input" );
-
- ok(!method.call( v, e[3].value, e[3]), "Invalid select" );
- ok( method.call( v, e[4].value, e[4]), "Valid select" );
-
- e = $("#area1, #area2, #pw1, #pw2");
- ok( method.call( v, e[0].value, e[0]), "Valid textarea" );
- ok(!method.call( v, e[1].value, e[1]), "Invalid textarea" );
- ok( method.call( v, e[2].value, e[2]), "Valid password input" );
- ok(!method.call( v, e[3].value, e[3]), "Invalid password input" );
-
- e = $("#radio1, #radio2, #radio3");
- ok(!method.call( v, e[0].value, e[0]), "Invalid radio" );
- ok( method.call( v, e[1].value, e[1]), "Valid radio" );
- ok( method.call( v, e[2].value, e[2]), "Valid radio" );
-
- e = $("#check1, #check2");
- ok( method.call( v, e[0].value, e[0]), "Valid checkbox" );
- ok(!method.call( v, e[1].value, e[1]), "Invalid checkbox" );
-
- e = $("#select1, #select2, #select3, #select4");
- ok(!method.call( v, e[0].value, e[0]), "Invalid select" );
- ok( method.call( v, e[1].value, e[1]), "Valid select" );
- ok( method.call( v, e[2].value, e[2]), "Valid select" );
- ok( method.call( v, e[3].value, e[3]), "Valid select" );
-});
-
-test("required with dependencies", function() {
- var v = jQuery("#form").validate(),
- method = $.validator.methods.required,
- e = $("#hidden2, #select1, #area2, #radio1, #check2");
- ok( method.call( v, e[0].value, e[0], "asffsaa" ), "Valid text input due to dependency not met" );
- ok(!method.call( v, e[0].value, e[0], "input" ), "Invalid text input" );
- ok( method.call( v, e[0].value, e[0], function() { return false; }), "Valid text input due to dependency not met" );
- ok(!method.call( v, e[0].value, e[0], function() { return true; }), "Invalid text input" );
- ok( method.call( v, e[1].value, e[1], "asfsfa" ), "Valid select due to dependency not met" );
- ok(!method.call( v, e[1].value, e[1], "input" ), "Invalid select" );
- ok( method.call( v, e[2].value, e[2], "asfsafsfa" ), "Valid textarea due to dependency not met" );
- ok(!method.call( v, e[2].value, e[2], "input" ), "Invalid textarea" );
- ok( method.call( v, e[3].value, e[3], "asfsafsfa" ), "Valid radio due to dependency not met" );
- ok(!method.call( v, e[3].value, e[3], "input" ), "Invalid radio" );
- ok( method.call( v, e[4].value, e[4], "asfsafsfa" ), "Valid checkbox due to dependency not met" );
- ok(!method.call( v, e[4].value, e[4], "input" ), "Invalid checkbox" );
-});
-
-test("minlength", function() {
- var v = jQuery("#form").validate(),
- method = $.validator.methods.minlength,
- param = 2,
- e = $("#text1, #text1c, #text2, #text3");
- ok( method.call( v, e[0].value, e[0], param), "Valid text input" );
- ok( method.call( v, e[1].value, e[1], param), "Valid text input" );
- ok(!method.call( v, e[2].value, e[2], param), "Invalid text input" );
- ok( method.call( v, e[3].value, e[3], param), "Valid text input" );
-
- e = $("#check1, #check2, #check3");
- ok(!method.call( v, e[0].value, e[0], param), "Valid checkbox" );
- ok( method.call( v, e[1].value, e[1], param), "Valid checkbox" );
- ok( method.call( v, e[2].value, e[2], param), "Invalid checkbox" );
-
- e = $("#select1, #select2, #select3, #select4, #select5");
- ok(method.call( v, e[0].value, e[0], param), "Valid select " + e[0].id );
- ok(!method.call( v, e[1].value, e[1], param), "Invalid select " + e[1].id );
- ok( method.call( v, e[2].value, e[2], param), "Valid select " + e[2].id );
- ok( method.call( v, e[3].value, e[3], param), "Valid select " + e[3].id );
- ok( method.call( v, e[4].value, e[4], param), "Valid select " + e[4].id );
-});
-
-test("maxlength", function() {
- var v = jQuery("#form").validate(),
- method = $.validator.methods.maxlength,
- param = 4,
- e = $("#text1, #text2, #text3");
-
- ok( method.call( v, e[0].value, e[0], param), "Valid text input" );
- ok( method.call( v, e[1].value, e[1], param), "Valid text input" );
- ok(!method.call( v, e[2].value, e[2], param), "Invalid text input" );
-
- e = $("#check1, #check2, #check3");
- ok( method.call( v, e[0].value, e[0], param), "Valid checkbox" );
- ok( method.call( v, e[1].value, e[1], param), "Invalid checkbox" );
- ok(!method.call( v, e[2].value, e[2], param), "Invalid checkbox" );
-
- e = $("#select1, #select2, #select3, #select4");
- ok( method.call( v, e[0].value, e[0], param), "Valid select" );
- ok( method.call( v, e[1].value, e[1], param), "Valid select" );
- ok( method.call( v, e[2].value, e[2], param), "Valid select" );
- ok(!method.call( v, e[3].value, e[3], param), "Invalid select" );
-});
-
-test("rangelength", function() {
- var v = jQuery("#form").validate(),
- method = $.validator.methods.rangelength,
- param = [ 2, 4 ],
- e = $("#text1, #text2, #text3");
-
- ok( method.call( v, e[0].value, e[0], param), "Valid text input" );
- ok(!method.call( v, e[1].value, e[1], param), "Invalid text input" );
- ok(!method.call( v, e[2].value, e[2], param), "Invalid text input" );
-});
-
-test("min", function() {
- var v = jQuery("#form").validate(),
- method = $.validator.methods.min,
- param = 8,
- e = $("#value1, #value2, #value3");
-
- ok(!method.call( v, e[0].value, e[0], param), "Invalid text input" );
- ok( method.call( v, e[1].value, e[1], param), "Valid text input" );
- ok( method.call( v, e[2].value, e[2], param), "Valid text input" );
-});
-
-test("max", function() {
- var v = jQuery("#form").validate(),
- method = $.validator.methods.max,
- param = 12,
- e = $("#value1, #value2, #value3");
-
- ok( method.call( v, e[0].value, e[0], param), "Valid text input" );
- ok( method.call( v, e[1].value, e[1], param), "Valid text input" );
- ok(!method.call( v, e[2].value, e[2], param), "Invalid text input" );
-});
-
-test("range", function() {
- var v = jQuery("#form").validate(),
- method = $.validator.methods.range,
- param = [ 4, 12 ],
- e = $("#value1, #value2, #value3");
-
- ok(!method.call( v, e[0].value, e[0], param), "Invalid text input" );
- ok( method.call( v, e[1].value, e[1], param), "Valid text input" );
- ok(!method.call( v, e[2].value, e[2], param), "Invalid text input" );
-});
-
-test("equalTo", function() {
- var v = jQuery("#form").validate(),
- method = $.validator.methods.equalTo,
- e = $("#text1, #text2");
-
- ok( method.call( v, "Test", e[0], "#text1" ), "Text input" );
- ok( method.call( v, "T", e[1], "#text2" ), "Another one" );
-});
-
-test("creditcard", function() {
- var method = methodTest("creditcard");
- ok( method( "4111-1111-1111-1111" ), "Valid creditcard number" );
- ok( method( "4111 1111 1111 1111" ), "Valid creditcard number" );
- ok(!method( "41111" ), "Invalid creditcard number" );
- ok(!method( "asdf" ), "Invalid creditcard number" );
-});
-
-test("extension", function() {
- var method = methodTest("extension"),
- v;
- ok( method( "picture.gif" ), "Valid default accept type" );
- ok( method( "picture.jpg" ), "Valid default accept type" );
- ok( method( "picture.jpeg" ), "Valid default accept type" );
- ok( method( "picture.png" ), "Valid default accept type" );
- ok(!method( "picture.pgn" ), "Invalid default accept type" );
-
- v = jQuery("#form").validate();
- method = function(value, param) {
- return $.validator.methods.extension.call(v, value, $("#text1")[0], param);
- };
- ok( method( "picture.doc", "doc" ), "Valid custom accept type" );
- ok( method( "picture.pdf", "doc|pdf" ), "Valid custom accept type" );
- ok( method( "picture.pdf", "pdf|doc" ), "Valid custom accept type" );
- ok(!method( "picture.pdf", "doc" ), "Invalid custom accept type" );
- ok(!method( "picture.doc", "pdf" ), "Invalid custom accept type" );
-
- ok( method( "picture.pdf", "doc,pdf" ), "Valid custom accept type, comma separated" );
- ok( method( "picture.pdf", "pdf,doc" ), "Valid custom accept type, comma separated" );
- ok(!method( "picture.pdf", "gop,top" ), "Invalid custom accept type, comma separated" );
-});
-
-asyncTest("remote", function() {
- expect(7);
- var e = $("#username"),
- v = $("#userForm").validate({
- rules: {
- username: {
- required: true,
- remote: "users.php"
- }
- },
- messages: {
- username: {
- required: "Please",
- remote: jQuery.validator.format("{0} in use")
- }
- },
- submitHandler: function() {
- ok( false, "submitHandler may never be called when validating only elements");
- }
- });
-
- $(document).ajaxStop(function() {
- $(document).unbind("ajaxStop");
- equal( 1, v.size(), "There must be one error" );
- equal( "Peter in use", v.errorList[0].message );
-
- $(document).ajaxStop(function() {
- $(document).unbind("ajaxStop");
- equal( 1, v.size(), "There must be one error" );
- equal( "Peter2 in use", v.errorList[0].message );
- start();
- });
- e.val("Peter2");
- strictEqual( v.element(e), true, "new value, new request; dependency-mismatch considered as valid though" );
- });
- strictEqual( v.element(e), false, "invalid element, nothing entered yet" );
- e.val("Peter");
- strictEqual( v.element(e), true, "still invalid, because remote validation must block until it returns; dependency-mismatch considered as valid though" );
-});
-
-asyncTest("remote, customized ajax options", function() {
- expect(2);
- $("#userForm").validate({
- rules: {
- username: {
- required: true,
- remote: {
- url: "users.php",
- type: "POST",
- beforeSend: function(request, settings) {
- deepEqual(settings.type, "POST");
- deepEqual(settings.data, "username=asdf&email=email.com");
- },
- data: {
- email: function() {
- return "email.com";
- }
- },
- complete: function() {
- start();
- }
- }
- }
- }
- });
- $("#username").val("asdf");
- $("#userForm").valid();
-});
-
-asyncTest("remote extensions", function() {
- expect(5);
- var e = $("#username"),
- v = $("#userForm").validate({
- rules: {
- username: {
- required: true,
- remote: "users2.php"
- }
- },
- messages: {
- username: {
- required: "Please"
- }
- },
- submitHandler: function() {
- ok( false, "submitHandler may never be called when validating only elements");
- }
- });
-
- $(document).ajaxStop(function() {
- $(document).unbind("ajaxStop");
- if ( v.size() !== 0 ) {
- ok( "There must be one error" );
- equal( v.errorList[0].message, "asdf is already taken, please try something else" );
- v.element(e);
- equal( v.errorList[0].message, "asdf is already taken, please try something else", "message doesn't change on revalidation" );
- }
- start();
- });
- strictEqual( v.element(e), false, "invalid element, nothing entered yet" );
- e.val("asdf");
- strictEqual( v.element(e), true, "still invalid, because remote validation must block until it returns; dependency-mismatch considered as valid though" );
-});
-
-module("additional methods");
-
-test("phone (us)", function() {
- var method = methodTest("phoneUS");
- ok( method( "1(212)-999-2345" ), "Valid US phone number" );
- ok( method( "212 999 2344" ), "Valid US phone number" );
- ok( method( "212-999-0983" ), "Valid US phone number" );
- ok(!method( "111-123-5434" ), "Invalid US phone number. Area Code cannot start with 1" );
- ok(!method( "212 123 4567" ), "Invalid US phone number. NXX cannot start with 1" );
- ok(!method( "234-911-5678" ), "Invalid US phone number, because the exchange code cannot be in the form N11" );
- ok(!method( "911-333-5678" ), "Invalid US phone number, because the area code cannot be in the form N11" );
- ok(method( "234-912-5678" ), "Valid US phone number" );
-});
-
-test("phoneUK", function() {
- var method = methodTest("phoneUK");
- ok( method( "0117 333 5555" ), "Valid UK Phone Number" );
- ok( method( "0121 555 5555" ), "Valid UK Phone Number" );
- ok( method( "01633 555555" ), "Valid UK Phone Number" );
- ok( method( "01298 28555" ), "Valid UK Phone Number" );
- ok( method( "015395 55555" ), "Valid UK Phone Number" );
- ok( method( "016977 3999" ), "Valid UK Phone Number" );
- ok( method( "020 3000 5555" ), "Valid UK Phone Number" );
- ok( method( "024 7500 5555" ), "Valid UK Phone Number" );
- ok( method( "0333 555 5555" ), "Valid UK Phone Number" );
- ok( method( "0500 555555" ), "Valid UK Phone Number" );
- ok( method( "055 3555 5555" ), "Valid UK Phone Number" );
- ok( method( "07122 555555" ), "Valid UK Phone Number" );
- ok( method( "07222 555555" ), "Valid UK Phone Number" );
- ok( method( "07322 555555" ), "Valid UK Phone Number" );
- ok( method( "0800 555 5555" ), "Valid UK Phone Number" );
- ok( method( "0800 355555" ), "Valid UK Phone Number" );
- ok( method( "0843 555 5555" ), "Valid UK Phone Number" );
- ok( method( "0872 555 5555" ), "Valid UK Phone Number" );
- ok( method( "0903 555 5555" ), "Valid UK Phone Number" );
- ok( method( "0983 555 5555" ), "Valid UK Phone Number" );
- ok( method( "(07122) 555555" ), "Valid UK Phone Number" );
- ok( method( "(07222) 555555" ), "Valid UK Phone Number" );
- ok( method( "(07322) 555555" ), "Valid UK Phone Number" );
- ok( method( "+44 7122 555 555" ), "Valid UK Phone Number" );
- ok( method( "+44 7222 555 555" ), "Valid UK Phone Number" );
- ok( method( "+44 7322 555 555" ), "Valid UK Phone Number" );
- ok(!method( "7222 555555" ), "Invalid UK Phone Number" );
- ok(!method( "+44 07222 555555" ), "Invalid UK Phone Number" );
-});
-
-test("mobileUK", function() {
- var method = methodTest("mobileUK");
- ok( method( "07134234323" ), "Valid UK Mobile Number" );
- ok( method( "07334234323" ), "Valid UK Mobile Number" );
- ok( method( "07624234323" ), "Valid UK Mobile Number" );
- ok( method( "07734234323" ), "Valid UK Mobile Number" );
- ok( method( "+447134234323" ), "Valid UK Mobile Number" );
- ok( method( "+447334234323" ), "Valid UK Mobile Number" );
- ok( method( "+447624234323" ), "Valid UK Mobile Number" );
- ok( method( "+447734234323" ), "Valid UK Mobile Number" );
- ok(!method( "07034234323" ), "Invalid UK Mobile Number" );
- ok(!method( "0753423432" ), "Invalid UK Mobile Number" );
- ok(!method( "07604234323" ), "Invalid UK Mobile Number" );
- ok(!method( "077342343234" ), "Invalid UK Mobile Number" );
- ok(!method( "044342343234" ), "Invalid UK Mobile Number" );
- ok(!method( "+44753423432" ), "Invalid UK Mobile Number" );
- ok(!method( "+447604234323" ), "Invalid UK Mobile Number" );
- ok(!method( "+4477342343234" ), "Invalid UK Mobile Number" );
- ok(!method( "+4444342343234" ), "Invalid UK Mobile Number" );
-});
-
-test("dateITA", function() {
- var method = methodTest("dateITA");
- ok( method( "01/01/1900" ), "Valid date ITA" );
- ok( method( "17/10/2010" ), "Valid date ITA" );
- ok(!method( "01/13/1990" ), "Invalid date ITA" );
- ok(!method( "01.01.1900" ), "Invalid date ITA" );
- ok(!method( "01/01/199" ), "Invalid date ITA" );
-});
-
-test("dateFA", function() {
- var method = methodTest("dateFA");
-
- ok( method( "1342/12/29" ), "Valid date FA" );
- ok( method( "1342/12/30" ), "Valid date FA" );
- ok( method( "1361/6/31" ), "Valid date FA" );
- ok( method( "1321/11/30" ), "Valid date FA" );
- ok( method( "1361/1/1" ), "Valid date FA" );
- ok( method( "1020/3/3" ), "Valid date FA" );
- ok( method( "1020/03/3" ), "Valid date FA" );
- ok( method( "1020/3/03" ), "Valid date FA" );
- ok( method( "1020/03/03" ), "Valid date FA" );
- ok( method( "1001/7/30" ), "Valid date FA" );
-
- ok(!method( "1000/1/32" ), "Invalid date FA" );
- ok(!method( "1323/12/31" ), "Invalid date FA" );
- ok(!method( "1361/0/11" ), "Invalid date FA" );
- ok(!method( "63/4/4" ), "Invalid date FA" );
- ok(!method( "15/6/1361" ), "Invalid date FA" );
-});
-
-test("iban", function() {
- var method = methodTest("iban");
- ok( method( "NL20INGB0001234567"), "Valid IBAN");
- ok( method( "DE68 2105 0170 0012 3456 78"), "Valid IBAN");
- ok( method( "NL20 INGB0001234567"), "Valid IBAN: invalid spacing");
- ok( method( "NL20 INGB 00 0123 4567"), "Valid IBAN: invalid spacing");
- ok( method( "XX40INGB000123456712341234"), "Valid (more or less) IBAN: unknown country, but checksum OK");
-
- ok(!method( "NL20INGB000123456"), "Invalid IBAN: too short");
- ok(!method( "NL20INGB00012345678"), "Invalid IBAN: too long");
- ok(!method( "NL20INGB0001234566"), "Invalid IBAN: checksum incorrect");
- ok(!method( "DE68 2105 0170 0012 3456 7"), "Invalid IBAN: too short");
- ok(!method( "DE68 2105 0170 0012 3456 789"), "Invalid IBAN: too long");
- ok(!method( "DE68 2105 0170 0012 3456 79"), "Invalid IBAN: checksum incorrect");
-
- ok(!method( "NL54INGB00012345671234"), "Invalid IBAN too long, BUT CORRECT CHECKSUM");
- ok(!method( "XX00INGB000123456712341234"), "Invalid IBAN: unknown country and checksum incorrect");
-
- // sample IBANs for different countries
- ok( method( "AL47 2121 1009 0000 0002 3569 8741"), "Valid IBAN - AL");
- ok( method( "AD12 0001 2030 2003 5910 0100"), "Valid IBAN - AD");
- ok( method( "AT61 1904 3002 3457 3201"), "Valid IBAN - AT");
- ok( method( "AZ21 NABZ 0000 0000 1370 1000 1944"), "Valid IBAN - AZ");
- ok( method( "BH67 BMAG 0000 1299 1234 56"), "Valid IBAN - BH");
- ok( method( "BE62 5100 0754 7061"), "Valid IBAN - BE");
- ok( method( "BA39 1290 0794 0102 8494"), "Valid IBAN - BA");
- ok( method( "BG80 BNBG 9661 1020 3456 78"), "Valid IBAN - BG");
- ok( method( "HR12 1001 0051 8630 0016 0"), "Valid IBAN - HR");
- ok( method( "CH93 0076 2011 6238 5295 7"), "Valid IBAN - CH");
- ok( method( "CY17 0020 0128 0000 0012 0052 7600"), "Valid IBAN - CY");
- ok( method( "CZ65 0800 0000 1920 0014 5399"), "Valid IBAN - CZ");
- ok( method( "DK50 0040 0440 1162 43"), "Valid IBAN - DK");
- ok( method( "EE38 2200 2210 2014 5685"), "Valid IBAN - EE");
- ok( method( "FO97 5432 0388 8999 44"), "Valid IBAN - FO");
- ok( method( "FI21 1234 5600 0007 85"), "Valid IBAN - FI");
- ok( method( "FR14 2004 1010 0505 0001 3M02 606"), "Valid IBAN - FR");
- ok( method( "GE29 NB00 0000 0101 9049 17"), "Valid IBAN - GE");
- ok( method( "DE89 3704 0044 0532 0130 00"), "Valid IBAN - DE");
- ok( method( "GI75 NWBK 0000 0000 7099 453"), "Valid IBAN - GI");
- ok( method( "GR16 0110 1250 0000 0001 2300 695"), "Valid IBAN - GR");
- ok( method( "GL56 0444 9876 5432 10"), "Valid IBAN - GL");
- ok( method( "HU42 1177 3016 1111 1018 0000 0000"), "Valid IBAN - HU");
- ok( method( "IS14 0159 2600 7654 5510 7303 39"), "Valid IBAN - IS");
- ok( method( "IE29 AIBK 9311 5212 3456 78"), "Valid IBAN - IE");
- ok( method( "IL62 0108 0000 0009 9999 999"), "Valid IBAN - IL");
- ok( method( "IT40 S054 2811 1010 0000 0123 456"), "Valid IBAN - IT");
- ok( method( "LV80 BANK 0000 4351 9500 1"), "Valid IBAN - LV");
- ok( method( "LB62 0999 0000 0001 0019 0122 9114"), "Valid IBAN - LB");
- ok( method( "LI21 0881 0000 2324 013A A"), "Valid IBAN - LI");
- ok( method( "LT12 1000 0111 0100 1000"), "Valid IBAN - LT");
- ok( method( "LU28 0019 4006 4475 0000"), "Valid IBAN - LU");
- ok( method( "MK07 2501 2000 0058 984"), "Valid IBAN - MK");
- ok( method( "MT84 MALT 0110 0001 2345 MTLC AST0 01S"), "Valid IBAN - MT");
- ok( method( "MU17 BOMM 0101 1010 3030 0200 000M UR"), "Valid IBAN - MU");
- ok( method( "MD24 AG00 0225 1000 1310 4168"), "Valid IBAN - MD");
- ok( method( "MC93 2005 2222 1001 1223 3M44 555"), "Valid IBAN - MC");
- ok( method( "ME25 5050 0001 2345 6789 51"), "Valid IBAN - ME");
- ok( method( "NL39 RABO 0300 0652 64"), "Valid IBAN - NL");
- ok( method( "NO93 8601 1117 947"), "Valid IBAN - NO");
- ok( method( "PK36 SCBL 0000 0011 2345 6702"), "Valid IBAN - PK");
- ok( method( "PL60 1020 1026 0000 0422 7020 1111"), "Valid IBAN - PL");
- ok( method( "PT50 0002 0123 1234 5678 9015 4"), "Valid IBAN - PT");
- ok( method( "RO49 AAAA 1B31 0075 9384 0000"), "Valid IBAN - RO");
- ok( method( "SM86 U032 2509 8000 0000 0270 100"), "Valid IBAN - SM");
- ok( method( "SA03 8000 0000 6080 1016 7519"), "Valid IBAN - SA");
- ok( method( "RS35 2600 0560 1001 6113 79"), "Valid IBAN - RS");
- ok( method( "SK31 1200 0000 1987 4263 7541"), "Valid IBAN - SK");
- ok( method( "SI56 1910 0000 0123 438"), "Valid IBAN - SI");
- ok( method( "ES80 2310 0001 1800 0001 2345"), "Valid IBAN - ES");
- ok( method( "SE35 5000 0000 0549 1000 0003"), "Valid IBAN - SE");
- ok( method( "CH93 0076 2011 6238 5295 7"), "Valid IBAN - CH");
- ok( method( "TN59 1000 6035 1835 9847 8831"), "Valid IBAN - TN");
- ok( method( "TR33 0006 1005 1978 6457 8413 26"), "Valid IBAN - TR");
- ok( method( "AE07 0331 2345 6789 0123 456"), "Valid IBAN - AE");
- ok( method( "GB29 NWBK 6016 1331 9268 19"), "Valid IBAN - GB");
-});
-
-/**
- * BIC tests (For BIC definition take a look on the implementation itself)
- */
-test("bic", function() {
- var method = methodTest( "bic" );
-
- ok( !method( "PBNKDEF" ), "Invalid BIC: too short" );
- ok( !method( "DEUTDEFFA1" ), "Invalid BIC: disallowed length" );
- ok( !method( "PBNKDEFFXXX1" ), "Invalid BIC: too long" );
- ok( !method( "1BNKDEFF" ), "Invalid BIC: invalid digit" );
- ok( !method( "PBNKDE1F" ), "Invalid BIC: invalid digit" );
- ok( !method( "PBNKDEF3" ), "Invalid BIC: invalid digit" );
- ok( !method( "PBNKDEFO" ), "Invalid BIC: invalid char" );
- ok( !method( "INGDDEFFXAA" ), "Invalid BIC: invalid char" );
- ok( !method( "DEUTDEF0" ), "Invalid BIC: invalid digit" );
-
- ok( method( "DEUTDEFF" ), "Valid BIC" );
- ok( method( "DEUTDEFFXXX" ), "Valid BIC" );
- ok( method( "PBNKDE2F" ), "Valid BIC" );
- ok( method( "INGDDEFF101" ), "Valid BIC" );
- ok( method( "INGDDEF2134" ), "Valid BIC" );
- ok( method( "INGDDE91XXX" ), "Valid BIC" );
- ok( method( "INGDDEF2" ), "Valid BIC" );
- ok( method( "AAFFFRP1" ), "Valid BIC" );
- ok( method( "DEUTDEFFAB1" ), "Valid BIC" );
- ok( method( "DEUTDEFFAXX" ), "Valid BIC" );
-});
-
-test("postcodeUK", function() {
- var method = methodTest("postcodeUK");
- ok( method( "AA9A 9AA" ), "Valid postcode" );
- ok( method( "A9A 9AA" ), "Valid postcode" );
- ok( method( "A9 9AA" ), "Valid postcode" );
- ok( method( "A99 9AA" ), "Valid postcode" );
- ok( method( "AA9 9AA" ), "Valid postcode" );
- ok( method( "AA99 9AA" ), "Valid postcode" );
-
- // Channel Island
- ok(!method( "AAAA 9AA" ), "Invalid postcode" );
- ok(!method( "AA-2640" ), "Invalid postcode" );
-
- ok(!method( "AAA AAA" ), "Invalid postcode" );
- ok(!method( "AA AAAA" ), "Invalid postcode" );
- ok(!method( "A AAAA" ), "Invalid postcode" );
- ok(!method( "AAAAA" ), "Invalid postcode" );
- ok(!method( "999 999" ), "Invalid postcode" );
- ok(!method( "99 9999" ), "Invalid postcode" );
- ok(!method( "9 9999" ), "Invalid postcode" );
- ok(!method( "99999" ), "Invalid postcode" );
-});
-
-test("dateNL", function() {
- var method = methodTest("dateNL");
- ok( method( "01-01-1900" ), "Valid date NL" );
- ok( method( "01.01.1900" ), "Valid date NL" );
- ok( method( "01/01/1900" ), "Valid date NL" );
- ok( method( "01-01-00" ), "Valid date NL" );
- ok( method( "1-01-1900" ), "Valid date NL" );
- ok( method( "10-10-1900" ), "Valid date NL" );
- ok(!method( "0-01-1900" ), "Invalid date NL" );
- ok(!method( "00-01-1900" ), "Invalid date NL" );
- ok(!method( "35-01-1990" ), "Invalid date NL" );
- ok(!method( "01.01.190" ), "Invalid date NL" );
-});
-
-test("phoneNL", function() {
- var method = methodTest("phoneNL");
- ok( method( "0701234567"), "Valid phone NL");
- ok( method( "0687654321"), "Valid phone NL");
- ok( method( "020-1234567"), "Valid phone NL");
- ok( method( "020 - 12 34 567"), "Valid phone NL");
- ok( method( "010-2345678"), "Valid phone NL");
- ok( method( "+3120-1234567"), "Valid phone NL");
- ok( method( "+31(0)10-2345678"), "Valid phone NL");
- ok(!method( "020-123456"), "Invalid phone NL: too short");
- ok(!method( "020-12345678"), "Invalid phone NL: too long");
- ok(!method( "-0201234567"), "Invalid phone NL");
- ok(!method( "+310201234567"), "Invalid phone NL: no 0 after +31 allowed");
-});
-
-test("mobileNL", function() {
- var method = methodTest("mobileNL");
- ok( method( "0612345678"), "Valid NL Mobile Number");
- ok( method( "06-12345678"), "Valid NL Mobile Number");
- ok( method( "06-12 345 678"), "Valid NL Mobile Number");
- ok( method( "+316-12345678"), "Valid NL Mobile Number");
- ok( method( "+31(0)6-12345678"), "Valid NL Mobile Number");
- ok(!method( "abcdefghij"), "Invalid NL Mobile Number: text");
- ok(!method( "0123456789"), "Invalid NL Mobile Number: should start with 06");
- ok(!method( "0823456789"), "Invalid NL Mobile Number: should start with 06");
- ok(!method( "06-1234567"), "Invalid NL Mobile Number: too short");
- ok(!method( "06-123456789"), "Invalid NL Mobile Number: too long");
- ok(!method( "-0612345678"), "Invalid NL Mobile Number");
- ok(!method( "+310612345678"), "Invalid NL Mobile Number: no 0 after +31 allowed");
-});
-
-test("postalcodeNL", function() {
- var method = methodTest("postalcodeNL");
- ok( method( "1234AB"), "Valid NL Postal Code");
- ok( method( "1234ab"), "Valid NL Postal Code");
- ok( method( "1234 AB"), "Valid NL Postal Code");
- ok( method( "6789YZ"), "Valid NL Postal Code");
- ok(!method( "123AA"), "Invalid NL Postal Code: not enough digits");
- ok(!method( "12345ZZ"), "Invalid NL Postal Code: too many digits");
- ok(!method( "1234 AA"), "Invalid NL Postal Code: too many spaces");
- ok(!method( "AA1234"), "Invalid NL Postal Code");
- ok(!method( "1234-AA"), "Invalid NL Postal Code");
-});
-
-test("bankaccountNL", function() {
- var method = methodTest("bankaccountNL");
- ok( method( "755490975"), "Valid NL bank account");
- ok( method( "75 54 90 975"), "Valid NL bank account");
- ok( method( "123456789"), "Valid NL bank account");
- ok( method( "12 34 56 789"), "Valid NL bank account");
- ok(!method( "12 3456789"), "Valid NL bank account: inconsistent spaces");
- ok(!method( "123 45 67 89"), "Valid NL bank account: incorrect spaces");
- ok(!method( "755490971"), "Invalid NL bank account");
- ok(!method( "755490973"), "Invalid NL bank account");
- ok(!method( "755490979"), "Invalid NL bank account");
- ok(!method( "123456781"), "Invalid NL bank account");
- ok(!method( "123456784"), "Invalid NL bank account");
- ok(!method( "123456788"), "Invalid NL bank account");
-});
-
-test("giroaccountNL", function() {
- var method = methodTest("giroaccountNL");
- ok( method( "123"), "Valid NL giro account");
- ok( method( "1234567"), "Valid NL giro account");
- ok(!method( "123456788"), "Invalid NL giro account");
-});
-
-test("bankorgiroaccountNL", function() {
- var method = methodTest("bankorgiroaccountNL");
- ok( method( "123"), "Valid NL giro account");
- ok( method( "1234567"), "Valid NL giro account");
- ok( method( "123456789"), "Valid NL bank account");
- ok(!method( "12345678"), "Invalid NL bank or giro account");
- ok(!method( "123456788"), "Invalid NL bank or giro account");
-});
-
-test("time", function() {
- var method = methodTest("time");
- ok( method( "00:00" ), "Valid time, lower bound" );
- ok( method( "23:59" ), "Valid time, upper bound" );
- ok( method( "3:59" ), "Valid time, single digit hour" );
- ok(!method( "12" ), "Invalid time" );
- ok(!method( "29:59" ), "Invalid time" );
- ok(!method( "00:60" ), "Invalid time" );
- ok(!method( "24:60" ), "Invalid time" );
- ok(!method( "24:00" ), "Invalid time" );
- ok(!method( "30:00" ), "Invalid time" );
- ok(!method( "29:59" ), "Invalid time" );
- ok(!method( "120:00" ), "Invalid time" );
- ok(!method( "12:001" ), "Invalid time" );
- ok(!method( "12:00a" ), "Invalid time" );
-});
-
-test("time12h", function() {
- var method = methodTest("time12h");
- ok( method( "12:00 AM" ), "Valid time, lower bound, am" );
- ok( method( "11:59 AM" ), "Valid time, upper bound, am" );
- ok( method( "12:00AM" ), "Valid time, no space, am" );
- ok( method( "12:00PM" ), "Valid time, no space, pm" );
- ok( method( "12:00 PM" ), "Valid time, lower bound, pm" );
- ok( method( "11:59 PM" ), "Valid time, upper bound, pm" );
- ok( method( "11:59 am" ), "Valid time, also accept lowercase" );
- ok( method( "11:59 pm" ), "Valid time, also accept lowercase" );
- ok( method( "1:59 pm" ), "Valid time, single hour, no leading 0" );
- ok( method( "01:59 pm" ), "Valid time, single hour, leading 0" );
- ok(!method( "12:00" ), "Invalid time" );
- ok(!method( "9" ), "Invalid time" );
- ok(!method( "9 am"), "Invalid time" );
- ok(!method( "12:61 am" ), "Invalid time" );
- ok(!method( "13:00 am" ), "Invalid time" );
- ok(!method( "00:00 am" ), "Invalid time" );
-});
-
-test("minWords", function() {
- var method = methodTest("minWords");
- ok( method( "hello worlds", 2 ), "plain text, valid" );
- ok( method( "<b>hello</b> world", 2 ), "html, valid" );
- ok(!method( "hello", 2 ), "plain text, invalid" );
- ok(!method( "<b>world</b>", 2 ), "html, invalid" );
- ok(!method( "world <br/>", 2 ), "html, invalid" );
-});
-
-test("maxWords", function() {
- var method = methodTest("maxWords");
- ok( method( "hello", 2 ), "plain text, valid" );
- ok( method( "<b>world</b>", 2 ), "html, valid" );
- ok( method( "world <br/>", 2 ), "html, valid" );
- ok( method( "hello worlds", 2 ), "plain text, valid" );
- ok( method( "<b>hello</b> world", 2 ), "html, valid" );
- ok(!method( "hello 123 world", 2 ), "plain text, invalid" );
- ok(!method( "<b>hello</b> 123 world", 2 ), "html, invalid" );
-});
-
-test("rangeWords", function() {
- var method = methodTest("rangeWords");
- ok( method( "hello", [ 0, 2 ] ), "plain text, valid" );
- ok( method( "hello worlds", [ 0, 2 ] ), "plain text, valid" );
- ok( method( "<b>hello</b> world", [ 0, 2 ] ), "html, valid" );
- ok(!method( "hello worlds what is up", [ 0, 2 ] ), "plain text, invalid" );
- ok(!method( "<b>Hello</b> <b>world</b> <b>hello</b>", [ 0, 2 ] ), "html, invalid" );
-});
-
-test("pattern", function() {
- var method = methodTest("pattern");
- ok( method( "AR1004", "AR\\d{4}" ), "Correct format for the given RegExp" );
- ok( method( "AR1004", /^AR\d{4}$/ ), "Correct format for the given RegExp" );
- ok(!method( "BR1004", /^AR\d{4}$/ ), "Invalid format for the given RegExp" );
- ok( method( "1ABC", "[0-9][A-Z]{3}" ), "Correct format for the given RegExp" );
- ok(!method( "ABC", "[0-9][A-Z]{3}" ), "Invalid format for the given RegExp" );
- ok(!method( "1ABC DEF", "[0-9][A-Z]{3}" ), "Invalid format for the given RegExp" );
- ok( method( "1ABCdef", "[a-zA-Z0-9]+" ), "Correct format for the given RegExp" );
- ok(!method( "1ABC def", "[a-zA-Z0-9]+" ), "Invalid format for the given RegExp" );
- ok( method( "2014-10-02", "[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01])" ), "Correct format for the given RegExp" );
- ok(!method( "02-10-2014", "[0-9]{4}-(0[1-9]|1[012])-(0[1-9]|1[0-9]|2[0-9]|3[01])" ), "Invalid format for the given RegExp" );
-});
-
-function testCardTypeByNumber(number, cardname, expected) {
- $("#cardnumber").val(number);
- var actual = $("#ccform").valid();
- equal(actual, expected, $.validator.format("Expect card number {0} to validate to {1}, actually validated to ", number, expected));
-}
-
-test("creditcardtypes, all", function() {
- $("#ccform").validate({
- rules: {
- cardnumber: {
- creditcard: true,
- creditcardtypes: {
- all: true
- }
- }
- }
- });
-
- testCardTypeByNumber( "4111-1111-1111-1111", "VISA", true );
- testCardTypeByNumber( "5111-1111-1111-1118", "MasterCard", true );
- testCardTypeByNumber( "6111-1111-1111-1116", "Discover", true );
- testCardTypeByNumber( "3400-0000-0000-009", "AMEX", true );
-
- testCardTypeByNumber( "4111-1111-1111-1110", "VISA", false );
- testCardTypeByNumber( "5432-1111-1111-1111", "MasterCard", false );
- testCardTypeByNumber( "6611-6611-6611-6611", "Discover", false );
- testCardTypeByNumber( "3777-7777-7777-7777", "AMEX", false );
-});
-
-test("creditcardtypes, visa", function() {
- $("#ccform").validate({
- rules: {
- cardnumber: {
- creditcard: true,
- creditcardtypes: {
- visa: true
- }
- }
- }
- });
-
- testCardTypeByNumber( "4111-1111-1111-1111", "VISA", true );
- testCardTypeByNumber( "5111-1111-1111-1118", "MasterCard", false );
- testCardTypeByNumber( "6111-1111-1111-1116", "Discover", false );
- testCardTypeByNumber( "3400-0000-0000-009", "AMEX", false );
-});
-
-test("creditcardtypes, mastercard", function() {
- $("#ccform").validate({
- rules: {
- cardnumber: {
- creditcard: true,
- creditcardtypes: {
- mastercard: true
- }
- }
- }
- });
-
- testCardTypeByNumber( "5111-1111-1111-1118", "MasterCard", true );
- testCardTypeByNumber( "6111-1111-1111-1116", "Discover", false );
- testCardTypeByNumber( "3400-0000-0000-009", "AMEX", false );
- testCardTypeByNumber( "4111-1111-1111-1111", "VISA", false );
-});
-
-/*
-function fillFormWithValuesAndExpect(formSelector, inputValues, expected) {
- var i, actual;
-
- for (i = 0; i < inputValues.length; i++) {
- $(formSelector + " input:eq(" + i + ")").val(inputValues[i]);
- }
- actual = $(formSelector).valid();
- equal(actual, expected, $.validator.format("Filled inputs of form '{0}' with {1} values ({2})", formSelector, inputValues.length, inputValues.toString()));
-
-}
-
-test("require_from_group", function() {
- $("#productInfo").validate({
- rules: {
- partnumber: { require_from_group: [ 2, ".productInfo" ] },
- description: { require_from_group: [ 2, ".productInfo" ] },
- discount: { require_from_group: [ 2, ".productInfo" ] }
- }
- });
-
- fillFormWithValuesAndExpect("#productInfo", [], false);
- fillFormWithValuesAndExpect("#productInfo", [ 123 ], false);
- $("#productInfo input[type='checkbox']").attr("checked", "checked");
- fillFormWithValuesAndExpect("#productInfo", [ 123 ], true);
- $("#productInfo input[type='checkbox']").removeAttr("checked");
- fillFormWithValuesAndExpect("#productInfo", [ 123, "widget" ], true);
- fillFormWithValuesAndExpect("#productInfo", [ 123, "widget", "red" ], true);
- fillFormWithValuesAndExpect("#productInfo", [ 123, "widget", "red" ], true);
-});
-
-test("require_from_group preserve other rules", function() {
- $("#productInfo").validate({
- rules: {
- partnumber: { require_from_group: [ 2, ".productInfo" ] },
- description: { require_from_group: [ 2, ".productInfo" ] },
- color: { require_from_group: [ 2, ".productInfo" ] },
- supplier: { required: true }
- }
- });
-
- fillFormWithValuesAndExpect("#productInfo", [], false);
- fillFormWithValuesAndExpect("#productInfo", [ 123 ], false);
- fillFormWithValuesAndExpect("#productInfo", [ 123, "widget" ], false);
- fillFormWithValuesAndExpect("#productInfo", [ "", "", "", "Acme" ], false);
- fillFormWithValuesAndExpect("#productInfo", [ 123, "", "", "Acme" ], false);
- fillFormWithValuesAndExpect("#productInfo", [ 123, "widget", "", "Acme" ], true);
- fillFormWithValuesAndExpect("#productInfo", [ 123, "widget", "red", "Acme" ], true);
-});
-
-test("skip_or_fill_minimum", function() {
- $("#productInfo").validate({
- rules: {
- partnumber: { skip_or_fill_minimum: [ 2, ".productInfo" ] },
- description: { skip_or_fill_minimum: [ 2, ".productInfo" ] },
- color: { skip_or_fill_minimum: [ 2, ".productInfo" ] }
- }
- });
-
- fillFormWithValuesAndExpect("#productInfo", [], true);
- fillFormWithValuesAndExpect("#productInfo", [ 123 ], false);
- fillFormWithValuesAndExpect("#productInfo", [ 123, "widget" ], true);
- fillFormWithValuesAndExpect("#productInfo", [ 123, "widget", "red" ], true);
-});
-
-test("skip_or_fill_minimum preserve other rules", function() {
- $("#productInfo").validate({
- rules: {
- partnumber: { skip_or_fill_minimum: [ 2, ".productInfo" ] },
- description: { skip_or_fill_minimum: [ 2, ".productInfo" ] },
- color: { skip_or_fill_minimum: [ 2, ".productInfo" ] },
- supplier: { required: true }
- }
- });
-
- fillFormWithValuesAndExpect("#productInfo", [], false);
- fillFormWithValuesAndExpect("#productInfo", [ "", "", "", "Acme" ], true);
- fillFormWithValuesAndExpect("#productInfo", [ 123, "", "", "Acme" ], false);
- fillFormWithValuesAndExpect("#productInfo", [ 123, "widget", "", "Acme" ], true);
- fillFormWithValuesAndExpect("#productInfo", [ 123, "widget", "red", "Acme" ], true);
-});
-*/
-
-test("zipcodeUS", function() {
- var method = methodTest("zipcodeUS");
- ok( method( "12345" ), "Valid zip" );
- ok( method( "12345-2345" ), "Valid zip" );
- ok( method( "90210-4567" ), "Valid zip" );
- ok(!method( "1" ), "Invalid zip" );
- ok(!method( "1234" ), "Invalid zip" );
- ok(!method( "123-23" ), "Invalid zip" );
- ok(!method( "12345-43" ), "Invalid zip" );
- ok(!method( "123456-7890" ), "Invalid zip" );
-});
-
-test("nifES", function() {
- var method = methodTest("nifES");
- ok( method( "11441059P" ), "NIF valid" );
- ok( method( "80054306T" ), "NIF valid" );
- ok( method( "76048581R" ), "NIF valid" );
- ok( method( "28950849J" ), "NIF valid" );
- ok( method( "34048598L" ), "NIF valid" );
- ok( method( "28311529R" ), "NIF valid" );
- ok( method( "34673804Q" ), "NIF valid" );
- ok( method( "92133247P" ), "NIF valid" );
- ok( method( "77149717N" ), "NIF valid" );
- ok( method( "15762034L" ), "NIF valid" );
- ok( method( "05122654W" ), "NIF valid" );
- ok( method( "05122654w" ), "NIF valid: lower case" );
- ok(!method( "1144105R" ), "NIF invalid: less than 8 digits without zero" );
- ok(!method( "11441059 R" ), "NIF invalid: white space" );
- ok(!method( "11441059" ), "NIF invalid: no letter" );
- ok(!method( "11441059PR" ), "NIF invalid: two letters" );
- ok(!method( "11440059R" ), "NIF invalid: wrong number" );
- ok(!method( "11441059S" ), "NIF invalid: wrong letter" );
- ok(!method( "114410598R" ), "NIF invalid: > 8 digits" );
- ok(!method( "11441059-R" ), "NIF invalid: dash" );
- ok(!method( "asdasdasd" ), "NIF invalid: all letters" );
- ok(!method( "11.144.059R" ), "NIF invalid: two dots" );
- ok(!method( "05.122.654R" ), "NIF invalid: starts with 0 and dots" );
- ok(!method( "5.122.654-R" ), "NIF invalid: dots and dash" );
- ok(!method( "05.122.654-R" ), "NIF invalid: starts with zero and dot and dash" );
-});
-
-test("nieES", function() {
- var method = methodTest("nieES");
- ok( method( "X0093999K" ), "NIE valid" );
- ok( method( "X1923000Q" ), "NIE valid" );
- ok( method( "Z9669587R" ), "NIE valid" );
- ok( method( "Z8945005B" ), "NIE valid" );
- ok( method( "Z6663465W" ), "NIE valid" );
- ok( method( "Y7875935J" ), "NIE valid" );
- ok( method( "X3390130E" ), "NIE valid" );
- ok( method( "Y7699182S" ), "NIE valid" );
- ok( method( "Y1524243R" ), "NIE valid" );
- ok( method( "X3744072V" ), "NIE valid" );
- ok( method( "X7436800A" ), "NIE valid" );
- ok( method( "y7875935j" ), "NIE valid: lower case" );
- ok(!method( "X0093999 K" ), "NIE inválido: white space" );
- ok(!method( "X 0093999 K" ), "NIE inválido: white space" );
- ok(!method( "11441059" ), "NIE inválido: no letter" );
- ok(!method( "11441059PR" ), "NIE inválido: two letters" );
- ok(!method( "11440059R" ), "NIE inválido: wrong number" );
- ok(!method( "11441059S" ), "NIE inválido: wrong letter" );
- ok(!method( "114410598R" ), "NIE inválido: > 8 digits" );
- ok(!method( "11441059-R" ), "NIE inválido: dash" );
- ok(!method( "asdasdasd" ), "NIE inválido: all letters" );
- ok(!method( "11.144.059R" ), "NIE inválido: two dots" );
- ok(!method( "05.122.654R" ), "NIE inválido: starts with 0 and dots" );
- ok(!method( "5.122.654-R" ), "NIE inválido: dots and dash" );
- ok(!method( "05.122.654-R" ), "NIE inválido: starts with zero and dot and dash" );
-});
-
-test("cifES", function() {
- var method = methodTest("cifES");
- ok( method( "A79082244" ), "CIF valid" );
- ok( method( "A60917978" ), "CIF valid" );
- ok( method( "A39000013" ), "CIF valid" );
- ok( method( "B43522192" ), "CIF valid" );
- ok( method( "B38624334" ), "CIF valid" );
- ok( method( "G72102064" ), "CIF valid" );
- ok( method( "F41190612" ), "CIF valid" );
- ok( method( "J85081081" ), "CIF valid" );
- ok( method( "S98038813" ), "CIF valid" );
- ok( method( "G32937757" ), "CIF valid" );
- ok( method( "B46125746" ), "CIF valid" );
- ok( method( "C27827559" ), "CIF valid" );
- ok( method( "E48911572" ), "CIF valid" );
- ok( method( "s98038813" ), "CIF valid: lower case" );
- ok(!method( "K48911572" ), "CIF invalid: starts with K" );
- ok(!method( "L48911572" ), "CIF invalid: starts with L" );
- ok(!method( "M48911572" ), "CIF invalid: starts with M" );
- ok(!method( "X48911572" ), "CIF invalid: starts with X" );
- ok(!method( "Y48911572" ), "CIF invalid: starts with Y" );
- ok(!method( "Z48911572" ), "CIF invalid: starts with Z" );
- ok(!method( "M15661515" ), "CIF invalid" );
- ok(!method( "Z98038813" ), "CIF invalid: wrong letter" );
- ok(!method( "B 43522192" ), "CIF invalid: white spaces" );
- ok(!method( "43522192" ), "CIF invalid: missing letter" );
- ok(!method( "BB43522192" ), "CIF invalid: two letters" );
- ok(!method( "B53522192" ), "CIF invalid: wrong number" );
- ok(!method( "B433522192" ), "CIF invalid: > 8 digits" );
- ok(!method( "B3522192" ), "CIF invalid: < 8 digits" );
- ok(!method( "B-43522192" ), "CIF invalid: dash" );
- ok(!method( "Basdasdas" ), "CIF invalid: all letters" );
- ok(!method( "B43.522.192" ), "CIF invalid: dots" );
- ok(!method( "B-43.522.192" ), "CIF invalid: dots and dash" );
-});
-
-test("maxWords", function() {
- var method = methodTest("maxWords"),
- maxWords = 6;
-
- ok( method( "I am a sentence", maxWords), "Max Words");
- ok(!method( "I'm way too long for this sentence!", maxWords), "Too many words");
- ok(method( "Don’t “count†me as too long", maxWords), "Right amount of words with smartquotes");
- ok(!method( "But you can “count†me as too long", maxWords), "Too many words with smartquotes");
- ok(method( "<div>Don’t “count†me as too long</div>", maxWords), "Right amount of words with smartquotes w/ HTML");
- ok(!method( "<div>But you can “count†me as too long</div>", maxWords), "Too many words with smartquotes w/ HTML");
-});
-
-test("minWords", function() {
- var method = methodTest("minWords"),
- minWords = 6;
-
- ok(!method( "I am a short sentence", minWords), "Max Words");
- ok( method( "I'm way too long for this sentence!", minWords), "Too many words");
- ok(!method( "Don’t “count†me as short.", minWords), "Right amount of words with smartquotes");
- ok( method( "But you can “count†me as too short", minWords), "Too many words with smartquotes");
- ok(!method( "<div>“Count†me as too short.</div>", minWords), "Right amount of words with smartquotes w/ HTML");
- ok( method( "<div>But you can “count†me as too long</div>", minWords), "Too many words with smartquotes w/ HTML");
-});
-
-test("rangeWords", function() {
- var method = methodTest("rangeWords"),
- rangeWords = [ 3, 6 ];
-
- ok(!method( "I'm going to be longer than “six words!â€", rangeWords), "Longer than 6 with smartquotes");
- ok( method( "I'm just the right amount!", rangeWords), "In between");
- ok( method( "Super short sentence’s.", rangeWords), "Low end");
- ok(!method( "I", rangeWords), "Too short");
- ok( method( "<div>“Count†me as perfect.</div>", rangeWords), "Right amount of words with smartquotes w/ HTML");
- ok(!method( "<div>But you can “count†me as too long</div>", rangeWords), "Too many words with smartquotes w/ HTML");
-});
-
-test("currency", function() { // Works with any symbol
- var method = methodTest( "currency" );
- ok( method( "£9", "£"), "Symbol no decimal" );
- ok( method( "£9.9", "£"), "£, one decimal" );
- ok( method( "£9.99", "£"), "£, two decimal" );
- ok( method( "£9.90", "£"), "Valid currency" );
- ok( method( "£9,999.9", "£"), "£, thousand, comma separator, one decimal" );
- ok( method( "£9,999.99", "£"), "£, thousand, comma separator, two decimal" );
- ok( method( "£9,999,999.9", "£"), "£, million, comma separators, one decimal" );
- ok( method( "9", [ "£", false ]), "Valid currency" );
- ok( method( "9.9", [ "£", false ]), "Valid currency" );
- ok( method( "9.99", [ "£", false ]), "Valid currency" );
- ok( method( "9.90", [ "£", false ]), "Valid currency" );
- ok( method( "9,999.9", [ "£", false ]), "Valid currency" );
- ok( method( "9,999.99", [ "£", false ]), "Valid currency" );
- ok( method( "9,999,999.9", [ "£", false ]), "Valid currency" );
- ok(!method( "9,", "£"), "Invalid currency" );
- ok(!method( "9,99.99", "£"), "Invalid currency" );
- ok(!method( "9,", "£"), "Invalid currency" );
- ok(!method( "9.999", "£"), "Invalid currency" );
- ok(!method( "9.999", "£"), "Invalid currency" );
- ok(!method( "9.99,9", "£"), "Invalid currency" );
-});
-
-test("postalCodeCA", function() {
- var method = methodTest("postalCodeCA");
- ok( method( "H0H 0H0"), "Valid CA Postal Code; Single space" );
- ok( !method( "H0H0H0"), "Inalid CA Postal Code; No space" );
- ok( !method( "H0H-0H0"), "Invalid CA Postal Code; Single dash" );
- ok( !method( "H0H 0H"), "Invalid CA Postal Code; Too Short" );
- ok( !method( "Z0H 0H"), "Invalid CA Postal Code; Only 'ABCEGHJKLMNPRSTVXY' are valid starting characters" );
- ok( !method( "h0h 0h0"), "Invalid CA Postal Code; Only upper case characters" );
-});
-
-test("stateUS", function() {
- var method = methodTest("stateUS");
- ok( method( "AZ" ), "Valid US state" );
- ok( method( "OH" ), "Valid US state" );
- ok( method( "DC" ), "Valid US state" );
- ok( method( "PR", { includeTerritories: true } ), "Valid US territory" );
- ok( method( "AA", { includeMilitary: true } ), "Valid US military zone" );
- ok( method( "me", { caseSensitive: false } ), "Valid US state" );
- ok(!method( "az", { caseSensitive: true } ), "Must be capital letters" );
- ok(!method( "mp", { caseSensitive: false, includeTerritories: false } ), "US territories not allowed" );
-});
-
-test("postalcodeBR", function() {
- var method = methodTest("postalcodeBR");
- ok( method( "99999-999"), "Valid BR Postal Code");
- ok( method( "99999999"), "Valid BR Postal Code");
- ok( method( "99.999-999"), "Valid BR Postal Code");
- ok( !method( "99.999999"), "Invalid BR Postal Code");
-});
-
-test("cpfBR", function() {
- var method = methodTest("cpfBR");
- ok( method( "11144477735"), "Valid CPF Number");
- ok( method( "263.946.533-30"), "Valid CPF Number");
- ok( method( "325 861 044 47"), "Valid CPF Number");
- ok( method( "859-684-732-40"), "Valid CPF Number");
- ok( !method( "99999999999"), "Invalid CPF Number: dump data");
- ok( !method( "1114447773"), "Invalid CPF Number: < 11 digits");
- ok( !method( "111444777355"), "Invalid CPF Number: > 11 digits");
- ok( !method( "11144477715"), "Invalid CPF Number: 1st check number failed");
- ok( !method( "11144477737"), "Invalid CPF Number: 2nd check number failed");
-});
-
-})(jQuery);
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/qunit/qunit.css b/wqflask/wqflask/static/new/packages/ValidationPlugin/test/qunit/qunit.css
deleted file mode 100644
index f1dcd4e1..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/qunit/qunit.css
+++ /dev/null
@@ -1,291 +0,0 @@
-/*!
- * QUnit 1.18.0
- * http://qunitjs.com/
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2015-04-03T10:23Z
- */
-
-/** Font Family and Sizes */
-
-#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
- font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
-}
-
-#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
-#qunit-tests { font-size: smaller; }
-
-
-/** Resets */
-
-#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
- margin: 0;
- padding: 0;
-}
-
-
-/** Header */
-
-#qunit-header {
- padding: 0.5em 0 0.5em 1em;
-
- color: #8699A4;
- background-color: #0D3349;
-
- font-size: 1.5em;
- line-height: 1em;
- font-weight: 400;
-
- border-radius: 5px 5px 0 0;
-}
-
-#qunit-header a {
- text-decoration: none;
- color: #C2CCD1;
-}
-
-#qunit-header a:hover,
-#qunit-header a:focus {
- color: #FFF;
-}
-
-#qunit-testrunner-toolbar label {
- display: inline-block;
- padding: 0 0.5em 0 0.1em;
-}
-
-#qunit-banner {
- height: 5px;
-}
-
-#qunit-testrunner-toolbar {
- padding: 0.5em 1em 0.5em 1em;
- color: #5E740B;
- background-color: #EEE;
- overflow: hidden;
-}
-
-#qunit-userAgent {
- padding: 0.5em 1em 0.5em 1em;
- background-color: #2B81AF;
- color: #FFF;
- text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
-}
-
-#qunit-modulefilter-container {
- float: right;
- padding: 0.2em;
-}
-
-.qunit-url-config {
- display: inline-block;
- padding: 0.1em;
-}
-
-.qunit-filter {
- display: block;
- float: right;
- margin-left: 1em;
-}
-
-/** Tests: Pass/Fail */
-
-#qunit-tests {
- list-style-position: inside;
-}
-
-#qunit-tests li {
- padding: 0.4em 1em 0.4em 1em;
- border-bottom: 1px solid #FFF;
- list-style-position: inside;
-}
-
-#qunit-tests > li {
- display: none;
-}
-
-#qunit-tests li.running,
-#qunit-tests li.pass,
-#qunit-tests li.fail,
-#qunit-tests li.skipped {
- display: list-item;
-}
-
-#qunit-tests.hidepass li.running,
-#qunit-tests.hidepass li.pass {
- visibility: hidden;
- position: absolute;
- width: 0px;
- height: 0px;
- padding: 0;
- border: 0;
- margin: 0;
-}
-
-#qunit-tests li strong {
- cursor: pointer;
-}
-
-#qunit-tests li.skipped strong {
- cursor: default;
-}
-
-#qunit-tests li a {
- padding: 0.5em;
- color: #C2CCD1;
- text-decoration: none;
-}
-
-#qunit-tests li p a {
- padding: 0.25em;
- color: #6B6464;
-}
-#qunit-tests li a:hover,
-#qunit-tests li a:focus {
- color: #000;
-}
-
-#qunit-tests li .runtime {
- float: right;
- font-size: smaller;
-}
-
-.qunit-assert-list {
- margin-top: 0.5em;
- padding: 0.5em;
-
- background-color: #FFF;
-
- border-radius: 5px;
-}
-
-.qunit-collapsed {
- display: none;
-}
-
-#qunit-tests table {
- border-collapse: collapse;
- margin-top: 0.2em;
-}
-
-#qunit-tests th {
- text-align: right;
- vertical-align: top;
- padding: 0 0.5em 0 0;
-}
-
-#qunit-tests td {
- vertical-align: top;
-}
-
-#qunit-tests pre {
- margin: 0;
- white-space: pre-wrap;
- word-wrap: break-word;
-}
-
-#qunit-tests del {
- background-color: #E0F2BE;
- color: #374E0C;
- text-decoration: none;
-}
-
-#qunit-tests ins {
- background-color: #FFCACA;
- color: #500;
- text-decoration: none;
-}
-
-/*** Test Counts */
-
-#qunit-tests b.counts { color: #000; }
-#qunit-tests b.passed { color: #5E740B; }
-#qunit-tests b.failed { color: #710909; }
-
-#qunit-tests li li {
- padding: 5px;
- background-color: #FFF;
- border-bottom: none;
- list-style-position: inside;
-}
-
-/*** Passing Styles */
-
-#qunit-tests li li.pass {
- color: #3C510C;
- background-color: #FFF;
- border-left: 10px solid #C6E746;
-}
-
-#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
-#qunit-tests .pass .test-name { color: #366097; }
-
-#qunit-tests .pass .test-actual,
-#qunit-tests .pass .test-expected { color: #999; }
-
-#qunit-banner.qunit-pass { background-color: #C6E746; }
-
-/*** Failing Styles */
-
-#qunit-tests li li.fail {
- color: #710909;
- background-color: #FFF;
- border-left: 10px solid #EE5757;
- white-space: pre;
-}
-
-#qunit-tests > li:last-child {
- border-radius: 0 0 5px 5px;
-}
-
-#qunit-tests .fail { color: #000; background-color: #EE5757; }
-#qunit-tests .fail .test-name,
-#qunit-tests .fail .module-name { color: #000; }
-
-#qunit-tests .fail .test-actual { color: #EE5757; }
-#qunit-tests .fail .test-expected { color: #008000; }
-
-#qunit-banner.qunit-fail { background-color: #EE5757; }
-
-/*** Skipped tests */
-
-#qunit-tests .skipped {
- background-color: #EBECE9;
-}
-
-#qunit-tests .qunit-skipped-label {
- background-color: #F4FF77;
- display: inline-block;
- font-style: normal;
- color: #366097;
- line-height: 1.8em;
- padding: 0 0.5em;
- margin: -0.4em 0.4em -0.4em 0;
-}
-
-/** Result */
-
-#qunit-testresult {
- padding: 0.5em 1em 0.5em 1em;
-
- color: #2B81AF;
- background-color: #D2E0E6;
-
- border-bottom: 1px solid #FFF;
-}
-#qunit-testresult .module-name {
- font-weight: 700;
-}
-
-/** Fixture */
-
-#qunit-fixture {
- position: absolute;
- top: -10000px;
- left: -10000px;
- width: 1000px;
- height: 1000px;
-}
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/qunit/qunit.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/test/qunit/qunit.js
deleted file mode 100644
index f3542ca9..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/qunit/qunit.js
+++ /dev/null
@@ -1,3828 +0,0 @@
-/*!
- * QUnit 1.18.0
- * http://qunitjs.com/
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2015-04-03T10:23Z
- */
-
-(function( window ) {
-
-var QUnit,
- config,
- onErrorFnPrev,
- loggingCallbacks = {},
- fileName = ( sourceFromStacktrace( 0 ) || "" ).replace( /(:\d+)+\)?/, "" ).replace( /.+\//, "" ),
- toString = Object.prototype.toString,
- hasOwn = Object.prototype.hasOwnProperty,
- // Keep a local reference to Date (GH-283)
- Date = window.Date,
- now = Date.now || function() {
- return new Date().getTime();
- },
- globalStartCalled = false,
- runStarted = false,
- setTimeout = window.setTimeout,
- clearTimeout = window.clearTimeout,
- defined = {
- document: window.document !== undefined,
- setTimeout: window.setTimeout !== undefined,
- sessionStorage: (function() {
- var x = "qunit-test-string";
- try {
- sessionStorage.setItem( x, x );
- sessionStorage.removeItem( x );
- return true;
- } catch ( e ) {
- return false;
- }
- }())
- },
- /**
- * Provides a normalized error string, correcting an issue
- * with IE 7 (and prior) where Error.prototype.toString is
- * not properly implemented
- *
- * Based on http://es5.github.com/#x15.11.4.4
- *
- * @param {String|Error} error
- * @return {String} error message
- */
- errorString = function( error ) {
- var name, message,
- errorString = error.toString();
- if ( errorString.substring( 0, 7 ) === "[object" ) {
- name = error.name ? error.name.toString() : "Error";
- message = error.message ? error.message.toString() : "";
- if ( name && message ) {
- return name + ": " + message;
- } else if ( name ) {
- return name;
- } else if ( message ) {
- return message;
- } else {
- return "Error";
- }
- } else {
- return errorString;
- }
- },
- /**
- * Makes a clone of an object using only Array or Object as base,
- * and copies over the own enumerable properties.
- *
- * @param {Object} obj
- * @return {Object} New object with only the own properties (recursively).
- */
- objectValues = function( obj ) {
- var key, val,
- vals = QUnit.is( "array", obj ) ? [] : {};
- for ( key in obj ) {
- if ( hasOwn.call( obj, key ) ) {
- val = obj[ key ];
- vals[ key ] = val === Object( val ) ? objectValues( val ) : val;
- }
- }
- return vals;
- };
-
-QUnit = {};
-
-/**
- * Config object: Maintain internal state
- * Later exposed as QUnit.config
- * `config` initialized at top of scope
- */
-config = {
- // The queue of tests to run
- queue: [],
-
- // block until document ready
- blocking: true,
-
- // by default, run previously failed tests first
- // very useful in combination with "Hide passed tests" checked
- reorder: true,
-
- // by default, modify document.title when suite is done
- altertitle: true,
-
- // by default, scroll to top of the page when suite is done
- scrolltop: true,
-
- // when enabled, all tests must call expect()
- requireExpects: false,
-
- // depth up-to which object will be dumped
- maxDepth: 5,
-
- // add checkboxes that are persisted in the query-string
- // when enabled, the id is set to `true` as a `QUnit.config` property
- urlConfig: [
- {
- id: "hidepassed",
- label: "Hide passed tests",
- tooltip: "Only show tests and assertions that fail. Stored as query-strings."
- },
- {
- id: "noglobals",
- label: "Check for Globals",
- tooltip: "Enabling this will test if any test introduces new properties on the " +
- "`window` object. Stored as query-strings."
- },
- {
- id: "notrycatch",
- label: "No try-catch",
- tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging " +
- "exceptions in IE reasonable. Stored as query-strings."
- }
- ],
-
- // Set of all modules.
- modules: [],
-
- // The first unnamed module
- currentModule: {
- name: "",
- tests: []
- },
-
- callbacks: {}
-};
-
-// Push a loose unnamed module to the modules collection
-config.modules.push( config.currentModule );
-
-// Initialize more QUnit.config and QUnit.urlParams
-(function() {
- var i, current,
- location = window.location || { search: "", protocol: "file:" },
- params = location.search.slice( 1 ).split( "&" ),
- length = params.length,
- urlParams = {};
-
- if ( params[ 0 ] ) {
- for ( i = 0; i < length; i++ ) {
- current = params[ i ].split( "=" );
- current[ 0 ] = decodeURIComponent( current[ 0 ] );
-
- // allow just a key to turn on a flag, e.g., test.html?noglobals
- current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
- if ( urlParams[ current[ 0 ] ] ) {
- urlParams[ current[ 0 ] ] = [].concat( urlParams[ current[ 0 ] ], current[ 1 ] );
- } else {
- urlParams[ current[ 0 ] ] = current[ 1 ];
- }
- }
- }
-
- if ( urlParams.filter === true ) {
- delete urlParams.filter;
- }
-
- QUnit.urlParams = urlParams;
-
- // String search anywhere in moduleName+testName
- config.filter = urlParams.filter;
-
- if ( urlParams.maxDepth ) {
- config.maxDepth = parseInt( urlParams.maxDepth, 10 ) === -1 ?
- Number.POSITIVE_INFINITY :
- urlParams.maxDepth;
- }
-
- config.testId = [];
- if ( urlParams.testId ) {
-
- // Ensure that urlParams.testId is an array
- urlParams.testId = decodeURIComponent( urlParams.testId ).split( "," );
- for ( i = 0; i < urlParams.testId.length; i++ ) {
- config.testId.push( urlParams.testId[ i ] );
- }
- }
-
- // Figure out if we're running the tests from a server or not
- QUnit.isLocal = location.protocol === "file:";
-
- // Expose the current QUnit version
- QUnit.version = "1.18.0";
-}());
-
-// Root QUnit object.
-// `QUnit` initialized at top of scope
-extend( QUnit, {
-
- // call on start of module test to prepend name to all tests
- module: function( name, testEnvironment ) {
- var currentModule = {
- name: name,
- testEnvironment: testEnvironment,
- tests: []
- };
-
- // DEPRECATED: handles setup/teardown functions,
- // beforeEach and afterEach should be used instead
- if ( testEnvironment && testEnvironment.setup ) {
- testEnvironment.beforeEach = testEnvironment.setup;
- delete testEnvironment.setup;
- }
- if ( testEnvironment && testEnvironment.teardown ) {
- testEnvironment.afterEach = testEnvironment.teardown;
- delete testEnvironment.teardown;
- }
-
- config.modules.push( currentModule );
- config.currentModule = currentModule;
- },
-
- // DEPRECATED: QUnit.asyncTest() will be removed in QUnit 2.0.
- asyncTest: function( testName, expected, callback ) {
- if ( arguments.length === 2 ) {
- callback = expected;
- expected = null;
- }
-
- QUnit.test( testName, expected, callback, true );
- },
-
- test: function( testName, expected, callback, async ) {
- var test;
-
- if ( arguments.length === 2 ) {
- callback = expected;
- expected = null;
- }
-
- test = new Test({
- testName: testName,
- expected: expected,
- async: async,
- callback: callback
- });
-
- test.queue();
- },
-
- skip: function( testName ) {
- var test = new Test({
- testName: testName,
- skip: true
- });
-
- test.queue();
- },
-
- // DEPRECATED: The functionality of QUnit.start() will be altered in QUnit 2.0.
- // In QUnit 2.0, invoking it will ONLY affect the `QUnit.config.autostart` blocking behavior.
- start: function( count ) {
- var globalStartAlreadyCalled = globalStartCalled;
-
- if ( !config.current ) {
- globalStartCalled = true;
-
- if ( runStarted ) {
- throw new Error( "Called start() outside of a test context while already started" );
- } else if ( globalStartAlreadyCalled || count > 1 ) {
- throw new Error( "Called start() outside of a test context too many times" );
- } else if ( config.autostart ) {
- throw new Error( "Called start() outside of a test context when " +
- "QUnit.config.autostart was true" );
- } else if ( !config.pageLoaded ) {
-
- // The page isn't completely loaded yet, so bail out and let `QUnit.load` handle it
- config.autostart = true;
- return;
- }
- } else {
-
- // If a test is running, adjust its semaphore
- config.current.semaphore -= count || 1;
-
- // Don't start until equal number of stop-calls
- if ( config.current.semaphore > 0 ) {
- return;
- }
-
- // throw an Error if start is called more often than stop
- if ( config.current.semaphore < 0 ) {
- config.current.semaphore = 0;
-
- QUnit.pushFailure(
- "Called start() while already started (test's semaphore was 0 already)",
- sourceFromStacktrace( 2 )
- );
- return;
- }
- }
-
- resumeProcessing();
- },
-
- // DEPRECATED: QUnit.stop() will be removed in QUnit 2.0.
- stop: function( count ) {
-
- // If there isn't a test running, don't allow QUnit.stop() to be called
- if ( !config.current ) {
- throw new Error( "Called stop() outside of a test context" );
- }
-
- // If a test is running, adjust its semaphore
- config.current.semaphore += count || 1;
-
- pauseProcessing();
- },
-
- config: config,
-
- // Safe object type checking
- is: function( type, obj ) {
- return QUnit.objectType( obj ) === type;
- },
-
- objectType: function( obj ) {
- if ( typeof obj === "undefined" ) {
- return "undefined";
- }
-
- // Consider: typeof null === object
- if ( obj === null ) {
- return "null";
- }
-
- var match = toString.call( obj ).match( /^\[object\s(.*)\]$/ ),
- type = match && match[ 1 ] || "";
-
- switch ( type ) {
- case "Number":
- if ( isNaN( obj ) ) {
- return "nan";
- }
- return "number";
- case "String":
- case "Boolean":
- case "Array":
- case "Date":
- case "RegExp":
- case "Function":
- return type.toLowerCase();
- }
- if ( typeof obj === "object" ) {
- return "object";
- }
- return undefined;
- },
-
- extend: extend,
-
- load: function() {
- config.pageLoaded = true;
-
- // Initialize the configuration options
- extend( config, {
- stats: { all: 0, bad: 0 },
- moduleStats: { all: 0, bad: 0 },
- started: 0,
- updateRate: 1000,
- autostart: true,
- filter: ""
- }, true );
-
- config.blocking = false;
-
- if ( config.autostart ) {
- resumeProcessing();
- }
- }
-});
-
-// Register logging callbacks
-(function() {
- var i, l, key,
- callbacks = [ "begin", "done", "log", "testStart", "testDone",
- "moduleStart", "moduleDone" ];
-
- function registerLoggingCallback( key ) {
- var loggingCallback = function( callback ) {
- if ( QUnit.objectType( callback ) !== "function" ) {
- throw new Error(
- "QUnit logging methods require a callback function as their first parameters."
- );
- }
-
- config.callbacks[ key ].push( callback );
- };
-
- // DEPRECATED: This will be removed on QUnit 2.0.0+
- // Stores the registered functions allowing restoring
- // at verifyLoggingCallbacks() if modified
- loggingCallbacks[ key ] = loggingCallback;
-
- return loggingCallback;
- }
-
- for ( i = 0, l = callbacks.length; i < l; i++ ) {
- key = callbacks[ i ];
-
- // Initialize key collection of logging callback
- if ( QUnit.objectType( config.callbacks[ key ] ) === "undefined" ) {
- config.callbacks[ key ] = [];
- }
-
- QUnit[ key ] = registerLoggingCallback( key );
- }
-})();
-
-// `onErrorFnPrev` initialized at top of scope
-// Preserve other handlers
-onErrorFnPrev = window.onerror;
-
-// Cover uncaught exceptions
-// Returning true will suppress the default browser handler,
-// returning false will let it run.
-window.onerror = function( error, filePath, linerNr ) {
- var ret = false;
- if ( onErrorFnPrev ) {
- ret = onErrorFnPrev( error, filePath, linerNr );
- }
-
- // Treat return value as window.onerror itself does,
- // Only do our handling if not suppressed.
- if ( ret !== true ) {
- if ( QUnit.config.current ) {
- if ( QUnit.config.current.ignoreGlobalErrors ) {
- return true;
- }
- QUnit.pushFailure( error, filePath + ":" + linerNr );
- } else {
- QUnit.test( "global failure", extend(function() {
- QUnit.pushFailure( error, filePath + ":" + linerNr );
- }, { validTest: true } ) );
- }
- return false;
- }
-
- return ret;
-};
-
-function done() {
- var runtime, passed;
-
- config.autorun = true;
-
- // Log the last module results
- if ( config.previousModule ) {
- runLoggingCallbacks( "moduleDone", {
- name: config.previousModule.name,
- tests: config.previousModule.tests,
- failed: config.moduleStats.bad,
- passed: config.moduleStats.all - config.moduleStats.bad,
- total: config.moduleStats.all,
- runtime: now() - config.moduleStats.started
- });
- }
- delete config.previousModule;
-
- runtime = now() - config.started;
- passed = config.stats.all - config.stats.bad;
-
- runLoggingCallbacks( "done", {
- failed: config.stats.bad,
- passed: passed,
- total: config.stats.all,
- runtime: runtime
- });
-}
-
-// Doesn't support IE6 to IE9, it will return undefined on these browsers
-// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
-function extractStacktrace( e, offset ) {
- offset = offset === undefined ? 4 : offset;
-
- var stack, include, i;
-
- if ( e.stack ) {
- stack = e.stack.split( "\n" );
- if ( /^error$/i.test( stack[ 0 ] ) ) {
- stack.shift();
- }
- if ( fileName ) {
- include = [];
- for ( i = offset; i < stack.length; i++ ) {
- if ( stack[ i ].indexOf( fileName ) !== -1 ) {
- break;
- }
- include.push( stack[ i ] );
- }
- if ( include.length ) {
- return include.join( "\n" );
- }
- }
- return stack[ offset ];
-
- // Support: Safari <=6 only
- } else if ( e.sourceURL ) {
-
- // exclude useless self-reference for generated Error objects
- if ( /qunit.js$/.test( e.sourceURL ) ) {
- return;
- }
-
- // for actual exceptions, this is useful
- return e.sourceURL + ":" + e.line;
- }
-}
-
-function sourceFromStacktrace( offset ) {
- var error = new Error();
-
- // Support: Safari <=7 only, IE <=10 - 11 only
- // Not all browsers generate the `stack` property for `new Error()`, see also #636
- if ( !error.stack ) {
- try {
- throw error;
- } catch ( err ) {
- error = err;
- }
- }
-
- return extractStacktrace( error, offset );
-}
-
-function synchronize( callback, last ) {
- if ( QUnit.objectType( callback ) === "array" ) {
- while ( callback.length ) {
- synchronize( callback.shift() );
- }
- return;
- }
- config.queue.push( callback );
-
- if ( config.autorun && !config.blocking ) {
- process( last );
- }
-}
-
-function process( last ) {
- function next() {
- process( last );
- }
- var start = now();
- config.depth = ( config.depth || 0 ) + 1;
-
- while ( config.queue.length && !config.blocking ) {
- if ( !defined.setTimeout || config.updateRate <= 0 ||
- ( ( now() - start ) < config.updateRate ) ) {
- if ( config.current ) {
-
- // Reset async tracking for each phase of the Test lifecycle
- config.current.usedAsync = false;
- }
- config.queue.shift()();
- } else {
- setTimeout( next, 13 );
- break;
- }
- }
- config.depth--;
- if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
- done();
- }
-}
-
-function begin() {
- var i, l,
- modulesLog = [];
-
- // If the test run hasn't officially begun yet
- if ( !config.started ) {
-
- // Record the time of the test run's beginning
- config.started = now();
-
- verifyLoggingCallbacks();
-
- // Delete the loose unnamed module if unused.
- if ( config.modules[ 0 ].name === "" && config.modules[ 0 ].tests.length === 0 ) {
- config.modules.shift();
- }
-
- // Avoid unnecessary information by not logging modules' test environments
- for ( i = 0, l = config.modules.length; i < l; i++ ) {
- modulesLog.push({
- name: config.modules[ i ].name,
- tests: config.modules[ i ].tests
- });
- }
-
- // The test run is officially beginning now
- runLoggingCallbacks( "begin", {
- totalTests: Test.count,
- modules: modulesLog
- });
- }
-
- config.blocking = false;
- process( true );
-}
-
-function resumeProcessing() {
- runStarted = true;
-
- // A slight delay to allow this iteration of the event loop to finish (more assertions, etc.)
- if ( defined.setTimeout ) {
- setTimeout(function() {
- if ( config.current && config.current.semaphore > 0 ) {
- return;
- }
- if ( config.timeout ) {
- clearTimeout( config.timeout );
- }
-
- begin();
- }, 13 );
- } else {
- begin();
- }
-}
-
-function pauseProcessing() {
- config.blocking = true;
-
- if ( config.testTimeout && defined.setTimeout ) {
- clearTimeout( config.timeout );
- config.timeout = setTimeout(function() {
- if ( config.current ) {
- config.current.semaphore = 0;
- QUnit.pushFailure( "Test timed out", sourceFromStacktrace( 2 ) );
- } else {
- throw new Error( "Test timed out" );
- }
- resumeProcessing();
- }, config.testTimeout );
- }
-}
-
-function saveGlobal() {
- config.pollution = [];
-
- if ( config.noglobals ) {
- for ( var key in window ) {
- if ( hasOwn.call( window, key ) ) {
- // in Opera sometimes DOM element ids show up here, ignore them
- if ( /^qunit-test-output/.test( key ) ) {
- continue;
- }
- config.pollution.push( key );
- }
- }
- }
-}
-
-function checkPollution() {
- var newGlobals,
- deletedGlobals,
- old = config.pollution;
-
- saveGlobal();
-
- newGlobals = diff( config.pollution, old );
- if ( newGlobals.length > 0 ) {
- QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join( ", " ) );
- }
-
- deletedGlobals = diff( old, config.pollution );
- if ( deletedGlobals.length > 0 ) {
- QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join( ", " ) );
- }
-}
-
-// returns a new Array with the elements that are in a but not in b
-function diff( a, b ) {
- var i, j,
- result = a.slice();
-
- for ( i = 0; i < result.length; i++ ) {
- for ( j = 0; j < b.length; j++ ) {
- if ( result[ i ] === b[ j ] ) {
- result.splice( i, 1 );
- i--;
- break;
- }
- }
- }
- return result;
-}
-
-function extend( a, b, undefOnly ) {
- for ( var prop in b ) {
- if ( hasOwn.call( b, prop ) ) {
-
- // Avoid "Member not found" error in IE8 caused by messing with window.constructor
- if ( !( prop === "constructor" && a === window ) ) {
- if ( b[ prop ] === undefined ) {
- delete a[ prop ];
- } else if ( !( undefOnly && typeof a[ prop ] !== "undefined" ) ) {
- a[ prop ] = b[ prop ];
- }
- }
- }
- }
-
- return a;
-}
-
-function runLoggingCallbacks( key, args ) {
- var i, l, callbacks;
-
- callbacks = config.callbacks[ key ];
- for ( i = 0, l = callbacks.length; i < l; i++ ) {
- callbacks[ i ]( args );
- }
-}
-
-// DEPRECATED: This will be removed on 2.0.0+
-// This function verifies if the loggingCallbacks were modified by the user
-// If so, it will restore it, assign the given callback and print a console warning
-function verifyLoggingCallbacks() {
- var loggingCallback, userCallback;
-
- for ( loggingCallback in loggingCallbacks ) {
- if ( QUnit[ loggingCallback ] !== loggingCallbacks[ loggingCallback ] ) {
-
- userCallback = QUnit[ loggingCallback ];
-
- // Restore the callback function
- QUnit[ loggingCallback ] = loggingCallbacks[ loggingCallback ];
-
- // Assign the deprecated given callback
- QUnit[ loggingCallback ]( userCallback );
-
- if ( window.console && window.console.warn ) {
- window.console.warn(
- "QUnit." + loggingCallback + " was replaced with a new value.\n" +
- "Please, check out the documentation on how to apply logging callbacks.\n" +
- "Reference: http://api.qunitjs.com/category/callbacks/"
- );
- }
- }
- }
-}
-
-// from jquery.js
-function inArray( elem, array ) {
- if ( array.indexOf ) {
- return array.indexOf( elem );
- }
-
- for ( var i = 0, length = array.length; i < length; i++ ) {
- if ( array[ i ] === elem ) {
- return i;
- }
- }
-
- return -1;
-}
-
-function Test( settings ) {
- var i, l;
-
- ++Test.count;
-
- extend( this, settings );
- this.assertions = [];
- this.semaphore = 0;
- this.usedAsync = false;
- this.module = config.currentModule;
- this.stack = sourceFromStacktrace( 3 );
-
- // Register unique strings
- for ( i = 0, l = this.module.tests; i < l.length; i++ ) {
- if ( this.module.tests[ i ].name === this.testName ) {
- this.testName += " ";
- }
- }
-
- this.testId = generateHash( this.module.name, this.testName );
-
- this.module.tests.push({
- name: this.testName,
- testId: this.testId
- });
-
- if ( settings.skip ) {
-
- // Skipped tests will fully ignore any sent callback
- this.callback = function() {};
- this.async = false;
- this.expected = 0;
- } else {
- this.assert = new Assert( this );
- }
-}
-
-Test.count = 0;
-
-Test.prototype = {
- before: function() {
- if (
-
- // Emit moduleStart when we're switching from one module to another
- this.module !== config.previousModule ||
-
- // They could be equal (both undefined) but if the previousModule property doesn't
- // yet exist it means this is the first test in a suite that isn't wrapped in a
- // module, in which case we'll just emit a moduleStart event for 'undefined'.
- // Without this, reporters can get testStart before moduleStart which is a problem.
- !hasOwn.call( config, "previousModule" )
- ) {
- if ( hasOwn.call( config, "previousModule" ) ) {
- runLoggingCallbacks( "moduleDone", {
- name: config.previousModule.name,
- tests: config.previousModule.tests,
- failed: config.moduleStats.bad,
- passed: config.moduleStats.all - config.moduleStats.bad,
- total: config.moduleStats.all,
- runtime: now() - config.moduleStats.started
- });
- }
- config.previousModule = this.module;
- config.moduleStats = { all: 0, bad: 0, started: now() };
- runLoggingCallbacks( "moduleStart", {
- name: this.module.name,
- tests: this.module.tests
- });
- }
-
- config.current = this;
-
- this.testEnvironment = extend( {}, this.module.testEnvironment );
- delete this.testEnvironment.beforeEach;
- delete this.testEnvironment.afterEach;
-
- this.started = now();
- runLoggingCallbacks( "testStart", {
- name: this.testName,
- module: this.module.name,
- testId: this.testId
- });
-
- if ( !config.pollution ) {
- saveGlobal();
- }
- },
-
- run: function() {
- var promise;
-
- config.current = this;
-
- if ( this.async ) {
- QUnit.stop();
- }
-
- this.callbackStarted = now();
-
- if ( config.notrycatch ) {
- promise = this.callback.call( this.testEnvironment, this.assert );
- this.resolvePromise( promise );
- return;
- }
-
- try {
- promise = this.callback.call( this.testEnvironment, this.assert );
- this.resolvePromise( promise );
- } catch ( e ) {
- this.pushFailure( "Died on test #" + ( this.assertions.length + 1 ) + " " +
- this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
-
- // else next test will carry the responsibility
- saveGlobal();
-
- // Restart the tests if they're blocking
- if ( config.blocking ) {
- QUnit.start();
- }
- }
- },
-
- after: function() {
- checkPollution();
- },
-
- queueHook: function( hook, hookName ) {
- var promise,
- test = this;
- return function runHook() {
- config.current = test;
- if ( config.notrycatch ) {
- promise = hook.call( test.testEnvironment, test.assert );
- test.resolvePromise( promise, hookName );
- return;
- }
- try {
- promise = hook.call( test.testEnvironment, test.assert );
- test.resolvePromise( promise, hookName );
- } catch ( error ) {
- test.pushFailure( hookName + " failed on " + test.testName + ": " +
- ( error.message || error ), extractStacktrace( error, 0 ) );
- }
- };
- },
-
- // Currently only used for module level hooks, can be used to add global level ones
- hooks: function( handler ) {
- var hooks = [];
-
- // Hooks are ignored on skipped tests
- if ( this.skip ) {
- return hooks;
- }
-
- if ( this.module.testEnvironment &&
- QUnit.objectType( this.module.testEnvironment[ handler ] ) === "function" ) {
- hooks.push( this.queueHook( this.module.testEnvironment[ handler ], handler ) );
- }
-
- return hooks;
- },
-
- finish: function() {
- config.current = this;
- if ( config.requireExpects && this.expected === null ) {
- this.pushFailure( "Expected number of assertions to be defined, but expect() was " +
- "not called.", this.stack );
- } else if ( this.expected !== null && this.expected !== this.assertions.length ) {
- this.pushFailure( "Expected " + this.expected + " assertions, but " +
- this.assertions.length + " were run", this.stack );
- } else if ( this.expected === null && !this.assertions.length ) {
- this.pushFailure( "Expected at least one assertion, but none were run - call " +
- "expect(0) to accept zero assertions.", this.stack );
- }
-
- var i,
- bad = 0;
-
- this.runtime = now() - this.started;
- config.stats.all += this.assertions.length;
- config.moduleStats.all += this.assertions.length;
-
- for ( i = 0; i < this.assertions.length; i++ ) {
- if ( !this.assertions[ i ].result ) {
- bad++;
- config.stats.bad++;
- config.moduleStats.bad++;
- }
- }
-
- runLoggingCallbacks( "testDone", {
- name: this.testName,
- module: this.module.name,
- skipped: !!this.skip,
- failed: bad,
- passed: this.assertions.length - bad,
- total: this.assertions.length,
- runtime: this.runtime,
-
- // HTML Reporter use
- assertions: this.assertions,
- testId: this.testId,
-
- // DEPRECATED: this property will be removed in 2.0.0, use runtime instead
- duration: this.runtime
- });
-
- // QUnit.reset() is deprecated and will be replaced for a new
- // fixture reset function on QUnit 2.0/2.1.
- // It's still called here for backwards compatibility handling
- QUnit.reset();
-
- config.current = undefined;
- },
-
- queue: function() {
- var bad,
- test = this;
-
- if ( !this.valid() ) {
- return;
- }
-
- function run() {
-
- // each of these can by async
- synchronize([
- function() {
- test.before();
- },
-
- test.hooks( "beforeEach" ),
-
- function() {
- test.run();
- },
-
- test.hooks( "afterEach" ).reverse(),
-
- function() {
- test.after();
- },
- function() {
- test.finish();
- }
- ]);
- }
-
- // `bad` initialized at top of scope
- // defer when previous test run passed, if storage is available
- bad = QUnit.config.reorder && defined.sessionStorage &&
- +sessionStorage.getItem( "qunit-test-" + this.module.name + "-" + this.testName );
-
- if ( bad ) {
- run();
- } else {
- synchronize( run, true );
- }
- },
-
- push: function( result, actual, expected, message ) {
- var source,
- details = {
- module: this.module.name,
- name: this.testName,
- result: result,
- message: message,
- actual: actual,
- expected: expected,
- testId: this.testId,
- runtime: now() - this.started
- };
-
- if ( !result ) {
- source = sourceFromStacktrace();
-
- if ( source ) {
- details.source = source;
- }
- }
-
- runLoggingCallbacks( "log", details );
-
- this.assertions.push({
- result: !!result,
- message: message
- });
- },
-
- pushFailure: function( message, source, actual ) {
- if ( !this instanceof Test ) {
- throw new Error( "pushFailure() assertion outside test context, was " +
- sourceFromStacktrace( 2 ) );
- }
-
- var details = {
- module: this.module.name,
- name: this.testName,
- result: false,
- message: message || "error",
- actual: actual || null,
- testId: this.testId,
- runtime: now() - this.started
- };
-
- if ( source ) {
- details.source = source;
- }
-
- runLoggingCallbacks( "log", details );
-
- this.assertions.push({
- result: false,
- message: message
- });
- },
-
- resolvePromise: function( promise, phase ) {
- var then, message,
- test = this;
- if ( promise != null ) {
- then = promise.then;
- if ( QUnit.objectType( then ) === "function" ) {
- QUnit.stop();
- then.call(
- promise,
- QUnit.start,
- function( error ) {
- message = "Promise rejected " +
- ( !phase ? "during" : phase.replace( /Each$/, "" ) ) +
- " " + test.testName + ": " + ( error.message || error );
- test.pushFailure( message, extractStacktrace( error, 0 ) );
-
- // else next test will carry the responsibility
- saveGlobal();
-
- // Unblock
- QUnit.start();
- }
- );
- }
- }
- },
-
- valid: function() {
- var include,
- filter = config.filter && config.filter.toLowerCase(),
- module = QUnit.urlParams.module && QUnit.urlParams.module.toLowerCase(),
- fullName = ( this.module.name + ": " + this.testName ).toLowerCase();
-
- // Internally-generated tests are always valid
- if ( this.callback && this.callback.validTest ) {
- return true;
- }
-
- if ( config.testId.length > 0 && inArray( this.testId, config.testId ) < 0 ) {
- return false;
- }
-
- if ( module && ( !this.module.name || this.module.name.toLowerCase() !== module ) ) {
- return false;
- }
-
- if ( !filter ) {
- return true;
- }
-
- include = filter.charAt( 0 ) !== "!";
- if ( !include ) {
- filter = filter.slice( 1 );
- }
-
- // If the filter matches, we need to honour include
- if ( fullName.indexOf( filter ) !== -1 ) {
- return include;
- }
-
- // Otherwise, do the opposite
- return !include;
- }
-
-};
-
-// Resets the test setup. Useful for tests that modify the DOM.
-/*
-DEPRECATED: Use multiple tests instead of resetting inside a test.
-Use testStart or testDone for custom cleanup.
-This method will throw an error in 2.0, and will be removed in 2.1
-*/
-QUnit.reset = function() {
-
- // Return on non-browser environments
- // This is necessary to not break on node tests
- if ( typeof window === "undefined" ) {
- return;
- }
-
- var fixture = defined.document && document.getElementById &&
- document.getElementById( "qunit-fixture" );
-
- if ( fixture ) {
- fixture.innerHTML = config.fixture;
- }
-};
-
-QUnit.pushFailure = function() {
- if ( !QUnit.config.current ) {
- throw new Error( "pushFailure() assertion outside test context, in " +
- sourceFromStacktrace( 2 ) );
- }
-
- // Gets current test obj
- var currentTest = QUnit.config.current;
-
- return currentTest.pushFailure.apply( currentTest, arguments );
-};
-
-// Based on Java's String.hashCode, a simple but not
-// rigorously collision resistant hashing function
-function generateHash( module, testName ) {
- var hex,
- i = 0,
- hash = 0,
- str = module + "\x1C" + testName,
- len = str.length;
-
- for ( ; i < len; i++ ) {
- hash = ( ( hash << 5 ) - hash ) + str.charCodeAt( i );
- hash |= 0;
- }
-
- // Convert the possibly negative integer hash code into an 8 character hex string, which isn't
- // strictly necessary but increases user understanding that the id is a SHA-like hash
- hex = ( 0x100000000 + hash ).toString( 16 );
- if ( hex.length < 8 ) {
- hex = "0000000" + hex;
- }
-
- return hex.slice( -8 );
-}
-
-function Assert( testContext ) {
- this.test = testContext;
-}
-
-// Assert helpers
-QUnit.assert = Assert.prototype = {
-
- // Specify the number of expected assertions to guarantee that failed test
- // (no assertions are run at all) don't slip through.
- expect: function( asserts ) {
- if ( arguments.length === 1 ) {
- this.test.expected = asserts;
- } else {
- return this.test.expected;
- }
- },
-
- // Increment this Test's semaphore counter, then return a single-use function that
- // decrements that counter a maximum of once.
- async: function() {
- var test = this.test,
- popped = false;
-
- test.semaphore += 1;
- test.usedAsync = true;
- pauseProcessing();
-
- return function done() {
- if ( !popped ) {
- test.semaphore -= 1;
- popped = true;
- resumeProcessing();
- } else {
- test.pushFailure( "Called the callback returned from `assert.async` more than once",
- sourceFromStacktrace( 2 ) );
- }
- };
- },
-
- // Exports test.push() to the user API
- push: function( /* result, actual, expected, message */ ) {
- var assert = this,
- currentTest = ( assert instanceof Assert && assert.test ) || QUnit.config.current;
-
- // Backwards compatibility fix.
- // Allows the direct use of global exported assertions and QUnit.assert.*
- // Although, it's use is not recommended as it can leak assertions
- // to other tests from async tests, because we only get a reference to the current test,
- // not exactly the test where assertion were intended to be called.
- if ( !currentTest ) {
- throw new Error( "assertion outside test context, in " + sourceFromStacktrace( 2 ) );
- }
-
- if ( currentTest.usedAsync === true && currentTest.semaphore === 0 ) {
- currentTest.pushFailure( "Assertion after the final `assert.async` was resolved",
- sourceFromStacktrace( 2 ) );
-
- // Allow this assertion to continue running anyway...
- }
-
- if ( !( assert instanceof Assert ) ) {
- assert = currentTest.assert;
- }
- return assert.test.push.apply( assert.test, arguments );
- },
-
- ok: function( result, message ) {
- message = message || ( result ? "okay" : "failed, expected argument to be truthy, was: " +
- QUnit.dump.parse( result ) );
- this.push( !!result, result, true, message );
- },
-
- notOk: function( result, message ) {
- message = message || ( !result ? "okay" : "failed, expected argument to be falsy, was: " +
- QUnit.dump.parse( result ) );
- this.push( !result, result, false, message );
- },
-
- equal: function( actual, expected, message ) {
- /*jshint eqeqeq:false */
- this.push( expected == actual, actual, expected, message );
- },
-
- notEqual: function( actual, expected, message ) {
- /*jshint eqeqeq:false */
- this.push( expected != actual, actual, expected, message );
- },
-
- propEqual: function( actual, expected, message ) {
- actual = objectValues( actual );
- expected = objectValues( expected );
- this.push( QUnit.equiv( actual, expected ), actual, expected, message );
- },
-
- notPropEqual: function( actual, expected, message ) {
- actual = objectValues( actual );
- expected = objectValues( expected );
- this.push( !QUnit.equiv( actual, expected ), actual, expected, message );
- },
-
- deepEqual: function( actual, expected, message ) {
- this.push( QUnit.equiv( actual, expected ), actual, expected, message );
- },
-
- notDeepEqual: function( actual, expected, message ) {
- this.push( !QUnit.equiv( actual, expected ), actual, expected, message );
- },
-
- strictEqual: function( actual, expected, message ) {
- this.push( expected === actual, actual, expected, message );
- },
-
- notStrictEqual: function( actual, expected, message ) {
- this.push( expected !== actual, actual, expected, message );
- },
-
- "throws": function( block, expected, message ) {
- var actual, expectedType,
- expectedOutput = expected,
- ok = false,
- currentTest = ( this instanceof Assert && this.test ) || QUnit.config.current;
-
- // 'expected' is optional unless doing string comparison
- if ( message == null && typeof expected === "string" ) {
- message = expected;
- expected = null;
- }
-
- currentTest.ignoreGlobalErrors = true;
- try {
- block.call( currentTest.testEnvironment );
- } catch (e) {
- actual = e;
- }
- currentTest.ignoreGlobalErrors = false;
-
- if ( actual ) {
- expectedType = QUnit.objectType( expected );
-
- // we don't want to validate thrown error
- if ( !expected ) {
- ok = true;
- expectedOutput = null;
-
- // expected is a regexp
- } else if ( expectedType === "regexp" ) {
- ok = expected.test( errorString( actual ) );
-
- // expected is a string
- } else if ( expectedType === "string" ) {
- ok = expected === errorString( actual );
-
- // expected is a constructor, maybe an Error constructor
- } else if ( expectedType === "function" && actual instanceof expected ) {
- ok = true;
-
- // expected is an Error object
- } else if ( expectedType === "object" ) {
- ok = actual instanceof expected.constructor &&
- actual.name === expected.name &&
- actual.message === expected.message;
-
- // expected is a validation function which returns true if validation passed
- } else if ( expectedType === "function" && expected.call( {}, actual ) === true ) {
- expectedOutput = null;
- ok = true;
- }
- }
-
- currentTest.assert.push( ok, actual, expectedOutput, message );
- }
-};
-
-// Provide an alternative to assert.throws(), for enviroments that consider throws a reserved word
-// Known to us are: Closure Compiler, Narwhal
-(function() {
- /*jshint sub:true */
- Assert.prototype.raises = Assert.prototype[ "throws" ];
-}());
-
-// Test for equality any JavaScript type.
-// Author: Philippe Rathé <prathe@gmail.com>
-QUnit.equiv = (function() {
-
- // Call the o related callback with the given arguments.
- function bindCallbacks( o, callbacks, args ) {
- var prop = QUnit.objectType( o );
- if ( prop ) {
- if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
- return callbacks[ prop ].apply( callbacks, args );
- } else {
- return callbacks[ prop ]; // or undefined
- }
- }
- }
-
- // the real equiv function
- var innerEquiv,
-
- // stack to decide between skip/abort functions
- callers = [],
-
- // stack to avoiding loops from circular referencing
- parents = [],
- parentsB = [],
-
- getProto = Object.getPrototypeOf || function( obj ) {
- /* jshint camelcase: false, proto: true */
- return obj.__proto__;
- },
- callbacks = (function() {
-
- // for string, boolean, number and null
- function useStrictEquality( b, a ) {
-
- /*jshint eqeqeq:false */
- if ( b instanceof a.constructor || a instanceof b.constructor ) {
-
- // to catch short annotation VS 'new' annotation of a
- // declaration
- // e.g. var i = 1;
- // var j = new Number(1);
- return a == b;
- } else {
- return a === b;
- }
- }
-
- return {
- "string": useStrictEquality,
- "boolean": useStrictEquality,
- "number": useStrictEquality,
- "null": useStrictEquality,
- "undefined": useStrictEquality,
-
- "nan": function( b ) {
- return isNaN( b );
- },
-
- "date": function( b, a ) {
- return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
- },
-
- "regexp": function( b, a ) {
- return QUnit.objectType( b ) === "regexp" &&
-
- // the regex itself
- a.source === b.source &&
-
- // and its modifiers
- a.global === b.global &&
-
- // (gmi) ...
- a.ignoreCase === b.ignoreCase &&
- a.multiline === b.multiline &&
- a.sticky === b.sticky;
- },
-
- // - skip when the property is a method of an instance (OOP)
- // - abort otherwise,
- // initial === would have catch identical references anyway
- "function": function() {
- var caller = callers[ callers.length - 1 ];
- return caller !== Object && typeof caller !== "undefined";
- },
-
- "array": function( b, a ) {
- var i, j, len, loop, aCircular, bCircular;
-
- // b could be an object literal here
- if ( QUnit.objectType( b ) !== "array" ) {
- return false;
- }
-
- len = a.length;
- if ( len !== b.length ) {
- // safe and faster
- return false;
- }
-
- // track reference to avoid circular references
- parents.push( a );
- parentsB.push( b );
- for ( i = 0; i < len; i++ ) {
- loop = false;
- for ( j = 0; j < parents.length; j++ ) {
- aCircular = parents[ j ] === a[ i ];
- bCircular = parentsB[ j ] === b[ i ];
- if ( aCircular || bCircular ) {
- if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
- loop = true;
- } else {
- parents.pop();
- parentsB.pop();
- return false;
- }
- }
- }
- if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
- parents.pop();
- parentsB.pop();
- return false;
- }
- }
- parents.pop();
- parentsB.pop();
- return true;
- },
-
- "object": function( b, a ) {
-
- /*jshint forin:false */
- var i, j, loop, aCircular, bCircular,
- // Default to true
- eq = true,
- aProperties = [],
- bProperties = [];
-
- // comparing constructors is more strict than using
- // instanceof
- if ( a.constructor !== b.constructor ) {
-
- // Allow objects with no prototype to be equivalent to
- // objects with Object as their constructor.
- if ( !( ( getProto( a ) === null && getProto( b ) === Object.prototype ) ||
- ( getProto( b ) === null && getProto( a ) === Object.prototype ) ) ) {
- return false;
- }
- }
-
- // stack constructor before traversing properties
- callers.push( a.constructor );
-
- // track reference to avoid circular references
- parents.push( a );
- parentsB.push( b );
-
- // be strict: don't ensure hasOwnProperty and go deep
- for ( i in a ) {
- loop = false;
- for ( j = 0; j < parents.length; j++ ) {
- aCircular = parents[ j ] === a[ i ];
- bCircular = parentsB[ j ] === b[ i ];
- if ( aCircular || bCircular ) {
- if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
- loop = true;
- } else {
- eq = false;
- break;
- }
- }
- }
- aProperties.push( i );
- if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
- eq = false;
- break;
- }
- }
-
- parents.pop();
- parentsB.pop();
- callers.pop(); // unstack, we are done
-
- for ( i in b ) {
- bProperties.push( i ); // collect b's properties
- }
-
- // Ensures identical properties name
- return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
- }
- };
- }());
-
- innerEquiv = function() { // can take multiple arguments
- var args = [].slice.apply( arguments );
- if ( args.length < 2 ) {
- return true; // end transition
- }
-
- return ( (function( a, b ) {
- if ( a === b ) {
- return true; // catch the most you can
- } else if ( a === null || b === null || typeof a === "undefined" ||
- typeof b === "undefined" ||
- QUnit.objectType( a ) !== QUnit.objectType( b ) ) {
-
- // don't lose time with error prone cases
- return false;
- } else {
- return bindCallbacks( a, callbacks, [ b, a ] );
- }
-
- // apply transition with (1..n) arguments
- }( args[ 0 ], args[ 1 ] ) ) &&
- innerEquiv.apply( this, args.splice( 1, args.length - 1 ) ) );
- };
-
- return innerEquiv;
-}());
-
-// Based on jsDump by Ariel Flesler
-// http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html
-QUnit.dump = (function() {
- function quote( str ) {
- return "\"" + str.toString().replace( /"/g, "\\\"" ) + "\"";
- }
- function literal( o ) {
- return o + "";
- }
- function join( pre, arr, post ) {
- var s = dump.separator(),
- base = dump.indent(),
- inner = dump.indent( 1 );
- if ( arr.join ) {
- arr = arr.join( "," + s + inner );
- }
- if ( !arr ) {
- return pre + post;
- }
- return [ pre, inner + arr, base + post ].join( s );
- }
- function array( arr, stack ) {
- var i = arr.length,
- ret = new Array( i );
-
- if ( dump.maxDepth && dump.depth > dump.maxDepth ) {
- return "[object Array]";
- }
-
- this.up();
- while ( i-- ) {
- ret[ i ] = this.parse( arr[ i ], undefined, stack );
- }
- this.down();
- return join( "[", ret, "]" );
- }
-
- var reName = /^function (\w+)/,
- dump = {
-
- // objType is used mostly internally, you can fix a (custom) type in advance
- parse: function( obj, objType, stack ) {
- stack = stack || [];
- var res, parser, parserType,
- inStack = inArray( obj, stack );
-
- if ( inStack !== -1 ) {
- return "recursion(" + ( inStack - stack.length ) + ")";
- }
-
- objType = objType || this.typeOf( obj );
- parser = this.parsers[ objType ];
- parserType = typeof parser;
-
- if ( parserType === "function" ) {
- stack.push( obj );
- res = parser.call( this, obj, stack );
- stack.pop();
- return res;
- }
- return ( parserType === "string" ) ? parser : this.parsers.error;
- },
- typeOf: function( obj ) {
- var type;
- if ( obj === null ) {
- type = "null";
- } else if ( typeof obj === "undefined" ) {
- type = "undefined";
- } else if ( QUnit.is( "regexp", obj ) ) {
- type = "regexp";
- } else if ( QUnit.is( "date", obj ) ) {
- type = "date";
- } else if ( QUnit.is( "function", obj ) ) {
- type = "function";
- } else if ( obj.setInterval !== undefined &&
- obj.document !== undefined &&
- obj.nodeType === undefined ) {
- type = "window";
- } else if ( obj.nodeType === 9 ) {
- type = "document";
- } else if ( obj.nodeType ) {
- type = "node";
- } else if (
-
- // native arrays
- toString.call( obj ) === "[object Array]" ||
-
- // NodeList objects
- ( typeof obj.length === "number" && obj.item !== undefined &&
- ( obj.length ? obj.item( 0 ) === obj[ 0 ] : ( obj.item( 0 ) === null &&
- obj[ 0 ] === undefined ) ) )
- ) {
- type = "array";
- } else if ( obj.constructor === Error.prototype.constructor ) {
- type = "error";
- } else {
- type = typeof obj;
- }
- return type;
- },
- separator: function() {
- return this.multiline ? this.HTML ? "<br />" : "\n" : this.HTML ? "&#160;" : " ";
- },
- // extra can be a number, shortcut for increasing-calling-decreasing
- indent: function( extra ) {
- if ( !this.multiline ) {
- return "";
- }
- var chr = this.indentChar;
- if ( this.HTML ) {
- chr = chr.replace( /\t/g, " " ).replace( / /g, "&#160;" );
- }
- return new Array( this.depth + ( extra || 0 ) ).join( chr );
- },
- up: function( a ) {
- this.depth += a || 1;
- },
- down: function( a ) {
- this.depth -= a || 1;
- },
- setParser: function( name, parser ) {
- this.parsers[ name ] = parser;
- },
- // The next 3 are exposed so you can use them
- quote: quote,
- literal: literal,
- join: join,
- //
- depth: 1,
- maxDepth: QUnit.config.maxDepth,
-
- // This is the list of parsers, to modify them, use dump.setParser
- parsers: {
- window: "[Window]",
- document: "[Document]",
- error: function( error ) {
- return "Error(\"" + error.message + "\")";
- },
- unknown: "[Unknown]",
- "null": "null",
- "undefined": "undefined",
- "function": function( fn ) {
- var ret = "function",
-
- // functions never have name in IE
- name = "name" in fn ? fn.name : ( reName.exec( fn ) || [] )[ 1 ];
-
- if ( name ) {
- ret += " " + name;
- }
- ret += "( ";
-
- ret = [ ret, dump.parse( fn, "functionArgs" ), "){" ].join( "" );
- return join( ret, dump.parse( fn, "functionCode" ), "}" );
- },
- array: array,
- nodelist: array,
- "arguments": array,
- object: function( map, stack ) {
- var keys, key, val, i, nonEnumerableProperties,
- ret = [];
-
- if ( dump.maxDepth && dump.depth > dump.maxDepth ) {
- return "[object Object]";
- }
-
- dump.up();
- keys = [];
- for ( key in map ) {
- keys.push( key );
- }
-
- // Some properties are not always enumerable on Error objects.
- nonEnumerableProperties = [ "message", "name" ];
- for ( i in nonEnumerableProperties ) {
- key = nonEnumerableProperties[ i ];
- if ( key in map && inArray( key, keys ) < 0 ) {
- keys.push( key );
- }
- }
- keys.sort();
- for ( i = 0; i < keys.length; i++ ) {
- key = keys[ i ];
- val = map[ key ];
- ret.push( dump.parse( key, "key" ) + ": " +
- dump.parse( val, undefined, stack ) );
- }
- dump.down();
- return join( "{", ret, "}" );
- },
- node: function( node ) {
- var len, i, val,
- open = dump.HTML ? "&lt;" : "<",
- close = dump.HTML ? "&gt;" : ">",
- tag = node.nodeName.toLowerCase(),
- ret = open + tag,
- attrs = node.attributes;
-
- if ( attrs ) {
- for ( i = 0, len = attrs.length; i < len; i++ ) {
- val = attrs[ i ].nodeValue;
-
- // IE6 includes all attributes in .attributes, even ones not explicitly
- // set. Those have values like undefined, null, 0, false, "" or
- // "inherit".
- if ( val && val !== "inherit" ) {
- ret += " " + attrs[ i ].nodeName + "=" +
- dump.parse( val, "attribute" );
- }
- }
- }
- ret += close;
-
- // Show content of TextNode or CDATASection
- if ( node.nodeType === 3 || node.nodeType === 4 ) {
- ret += node.nodeValue;
- }
-
- return ret + open + "/" + tag + close;
- },
-
- // function calls it internally, it's the arguments part of the function
- functionArgs: function( fn ) {
- var args,
- l = fn.length;
-
- if ( !l ) {
- return "";
- }
-
- args = new Array( l );
- while ( l-- ) {
-
- // 97 is 'a'
- args[ l ] = String.fromCharCode( 97 + l );
- }
- return " " + args.join( ", " ) + " ";
- },
- // object calls it internally, the key part of an item in a map
- key: quote,
- // function calls it internally, it's the content of the function
- functionCode: "[code]",
- // node calls it internally, it's an html attribute value
- attribute: quote,
- string: quote,
- date: quote,
- regexp: literal,
- number: literal,
- "boolean": literal
- },
- // if true, entities are escaped ( <, >, \t, space and \n )
- HTML: false,
- // indentation unit
- indentChar: " ",
- // if true, items in a collection, are separated by a \n, else just a space.
- multiline: true
- };
-
- return dump;
-}());
-
-// back compat
-QUnit.jsDump = QUnit.dump;
-
-// For browser, export only select globals
-if ( typeof window !== "undefined" ) {
-
- // Deprecated
- // Extend assert methods to QUnit and Global scope through Backwards compatibility
- (function() {
- var i,
- assertions = Assert.prototype;
-
- function applyCurrent( current ) {
- return function() {
- var assert = new Assert( QUnit.config.current );
- current.apply( assert, arguments );
- };
- }
-
- for ( i in assertions ) {
- QUnit[ i ] = applyCurrent( assertions[ i ] );
- }
- })();
-
- (function() {
- var i, l,
- keys = [
- "test",
- "module",
- "expect",
- "asyncTest",
- "start",
- "stop",
- "ok",
- "notOk",
- "equal",
- "notEqual",
- "propEqual",
- "notPropEqual",
- "deepEqual",
- "notDeepEqual",
- "strictEqual",
- "notStrictEqual",
- "throws"
- ];
-
- for ( i = 0, l = keys.length; i < l; i++ ) {
- window[ keys[ i ] ] = QUnit[ keys[ i ] ];
- }
- })();
-
- window.QUnit = QUnit;
-}
-
-// For nodejs
-if ( typeof module !== "undefined" && module && module.exports ) {
- module.exports = QUnit;
-
- // For consistency with CommonJS environments' exports
- module.exports.QUnit = QUnit;
-}
-
-// For CommonJS with exports, but without module.exports, like Rhino
-if ( typeof exports !== "undefined" && exports ) {
- exports.QUnit = QUnit;
-}
-
-if ( typeof define === "function" && define.amd ) {
- define( function() {
- return QUnit;
- } );
- QUnit.config.autostart = false;
-}
-
-// Get a reference to the global object, like window in browsers
-}( (function() {
- return this;
-})() ));
-
-/*istanbul ignore next */
-// jscs:disable maximumLineLength
-/*
- * This file is a modified version of google-diff-match-patch's JavaScript implementation
- * (https://code.google.com/p/google-diff-match-patch/source/browse/trunk/javascript/diff_match_patch_uncompressed.js),
- * modifications are licensed as more fully set forth in LICENSE.txt.
- *
- * The original source of google-diff-match-patch is attributable and licensed as follows:
- *
- * Copyright 2006 Google Inc.
- * http://code.google.com/p/google-diff-match-patch/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * More Info:
- * https://code.google.com/p/google-diff-match-patch/
- *
- * Usage: QUnit.diff(expected, actual)
- *
- * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) === "the quick <del>brown </del> fox jump<ins>s</ins><del>ed</del over"
- */
-QUnit.diff = (function() {
-
- function DiffMatchPatch() {
-
- // Defaults.
- // Redefine these in your program to override the defaults.
-
- // Number of seconds to map a diff before giving up (0 for infinity).
- this.DiffTimeout = 1.0;
- // Cost of an empty edit operation in terms of edit characters.
- this.DiffEditCost = 4;
- }
-
- // DIFF FUNCTIONS
-
- /**
- * The data structure representing a diff is an array of tuples:
- * [[DIFF_DELETE, 'Hello'], [DIFF_INSERT, 'Goodbye'], [DIFF_EQUAL, ' world.']]
- * which means: delete 'Hello', add 'Goodbye' and keep ' world.'
- */
- var DIFF_DELETE = -1,
- DIFF_INSERT = 1,
- DIFF_EQUAL = 0;
-
- /**
- * Find the differences between two texts. Simplifies the problem by stripping
- * any common prefix or suffix off the texts before diffing.
- * @param {string} text1 Old string to be diffed.
- * @param {string} text2 New string to be diffed.
- * @param {boolean=} optChecklines Optional speedup flag. If present and false,
- * then don't run a line-level diff first to identify the changed areas.
- * Defaults to true, which does a faster, slightly less optimal diff.
- * @param {number} optDeadline Optional time when the diff should be complete
- * by. Used internally for recursive calls. Users should set DiffTimeout
- * instead.
- * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
- */
- DiffMatchPatch.prototype.DiffMain = function( text1, text2, optChecklines, optDeadline ) {
- var deadline, checklines, commonlength,
- commonprefix, commonsuffix, diffs;
- // Set a deadline by which time the diff must be complete.
- if ( typeof optDeadline === "undefined" ) {
- if ( this.DiffTimeout <= 0 ) {
- optDeadline = Number.MAX_VALUE;
- } else {
- optDeadline = ( new Date() ).getTime() + this.DiffTimeout * 1000;
- }
- }
- deadline = optDeadline;
-
- // Check for null inputs.
- if ( text1 === null || text2 === null ) {
- throw new Error( "Null input. (DiffMain)" );
- }
-
- // Check for equality (speedup).
- if ( text1 === text2 ) {
- if ( text1 ) {
- return [
- [ DIFF_EQUAL, text1 ]
- ];
- }
- return [];
- }
-
- if ( typeof optChecklines === "undefined" ) {
- optChecklines = true;
- }
-
- checklines = optChecklines;
-
- // Trim off common prefix (speedup).
- commonlength = this.diffCommonPrefix( text1, text2 );
- commonprefix = text1.substring( 0, commonlength );
- text1 = text1.substring( commonlength );
- text2 = text2.substring( commonlength );
-
- // Trim off common suffix (speedup).
- /////////
- commonlength = this.diffCommonSuffix( text1, text2 );
- commonsuffix = text1.substring( text1.length - commonlength );
- text1 = text1.substring( 0, text1.length - commonlength );
- text2 = text2.substring( 0, text2.length - commonlength );
-
- // Compute the diff on the middle block.
- diffs = this.diffCompute( text1, text2, checklines, deadline );
-
- // Restore the prefix and suffix.
- if ( commonprefix ) {
- diffs.unshift( [ DIFF_EQUAL, commonprefix ] );
- }
- if ( commonsuffix ) {
- diffs.push( [ DIFF_EQUAL, commonsuffix ] );
- }
- this.diffCleanupMerge( diffs );
- return diffs;
- };
-
- /**
- * Reduce the number of edits by eliminating operationally trivial equalities.
- * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
- */
- DiffMatchPatch.prototype.diffCleanupEfficiency = function( diffs ) {
- var changes, equalities, equalitiesLength, lastequality,
- pointer, preIns, preDel, postIns, postDel;
- changes = false;
- equalities = []; // Stack of indices where equalities are found.
- equalitiesLength = 0; // Keeping our own length var is faster in JS.
- /** @type {?string} */
- lastequality = null;
- // Always equal to diffs[equalities[equalitiesLength - 1]][1]
- pointer = 0; // Index of current position.
- // Is there an insertion operation before the last equality.
- preIns = false;
- // Is there a deletion operation before the last equality.
- preDel = false;
- // Is there an insertion operation after the last equality.
- postIns = false;
- // Is there a deletion operation after the last equality.
- postDel = false;
- while ( pointer < diffs.length ) {
- if ( diffs[ pointer ][ 0 ] === DIFF_EQUAL ) { // Equality found.
- if ( diffs[ pointer ][ 1 ].length < this.DiffEditCost && ( postIns || postDel ) ) {
- // Candidate found.
- equalities[ equalitiesLength++ ] = pointer;
- preIns = postIns;
- preDel = postDel;
- lastequality = diffs[ pointer ][ 1 ];
- } else {
- // Not a candidate, and can never become one.
- equalitiesLength = 0;
- lastequality = null;
- }
- postIns = postDel = false;
- } else { // An insertion or deletion.
- if ( diffs[ pointer ][ 0 ] === DIFF_DELETE ) {
- postDel = true;
- } else {
- postIns = true;
- }
- /*
- * Five types to be split:
- * <ins>A</ins><del>B</del>XY<ins>C</ins><del>D</del>
- * <ins>A</ins>X<ins>C</ins><del>D</del>
- * <ins>A</ins><del>B</del>X<ins>C</ins>
- * <ins>A</del>X<ins>C</ins><del>D</del>
- * <ins>A</ins><del>B</del>X<del>C</del>
- */
- if ( lastequality && ( ( preIns && preDel && postIns && postDel ) ||
- ( ( lastequality.length < this.DiffEditCost / 2 ) &&
- ( preIns + preDel + postIns + postDel ) === 3 ) ) ) {
- // Duplicate record.
- diffs.splice( equalities[equalitiesLength - 1], 0, [ DIFF_DELETE, lastequality ] );
- // Change second copy to insert.
- diffs[ equalities[ equalitiesLength - 1 ] + 1 ][ 0 ] = DIFF_INSERT;
- equalitiesLength--; // Throw away the equality we just deleted;
- lastequality = null;
- if (preIns && preDel) {
- // No changes made which could affect previous entry, keep going.
- postIns = postDel = true;
- equalitiesLength = 0;
- } else {
- equalitiesLength--; // Throw away the previous equality.
- pointer = equalitiesLength > 0 ? equalities[ equalitiesLength - 1 ] : -1;
- postIns = postDel = false;
- }
- changes = true;
- }
- }
- pointer++;
- }
-
- if ( changes ) {
- this.diffCleanupMerge( diffs );
- }
- };
-
- /**
- * Convert a diff array into a pretty HTML report.
- * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
- * @param {integer} string to be beautified.
- * @return {string} HTML representation.
- */
- DiffMatchPatch.prototype.diffPrettyHtml = function( diffs ) {
- var op, data, x, html = [];
- for ( x = 0; x < diffs.length; x++ ) {
- op = diffs[x][0]; // Operation (insert, delete, equal)
- data = diffs[x][1]; // Text of change.
- switch ( op ) {
- case DIFF_INSERT:
- html[x] = "<ins>" + data + "</ins>";
- break;
- case DIFF_DELETE:
- html[x] = "<del>" + data + "</del>";
- break;
- case DIFF_EQUAL:
- html[x] = "<span>" + data + "</span>";
- break;
- }
- }
- return html.join("");
- };
-
- /**
- * Determine the common prefix of two strings.
- * @param {string} text1 First string.
- * @param {string} text2 Second string.
- * @return {number} The number of characters common to the start of each
- * string.
- */
- DiffMatchPatch.prototype.diffCommonPrefix = function( text1, text2 ) {
- var pointermid, pointermax, pointermin, pointerstart;
- // Quick check for common null cases.
- if ( !text1 || !text2 || text1.charAt(0) !== text2.charAt(0) ) {
- return 0;
- }
- // Binary search.
- // Performance analysis: http://neil.fraser.name/news/2007/10/09/
- pointermin = 0;
- pointermax = Math.min( text1.length, text2.length );
- pointermid = pointermax;
- pointerstart = 0;
- while ( pointermin < pointermid ) {
- if ( text1.substring( pointerstart, pointermid ) === text2.substring( pointerstart, pointermid ) ) {
- pointermin = pointermid;
- pointerstart = pointermin;
- } else {
- pointermax = pointermid;
- }
- pointermid = Math.floor( ( pointermax - pointermin ) / 2 + pointermin );
- }
- return pointermid;
- };
-
- /**
- * Determine the common suffix of two strings.
- * @param {string} text1 First string.
- * @param {string} text2 Second string.
- * @return {number} The number of characters common to the end of each string.
- */
- DiffMatchPatch.prototype.diffCommonSuffix = function( text1, text2 ) {
- var pointermid, pointermax, pointermin, pointerend;
- // Quick check for common null cases.
- if (!text1 || !text2 || text1.charAt(text1.length - 1) !== text2.charAt(text2.length - 1)) {
- return 0;
- }
- // Binary search.
- // Performance analysis: http://neil.fraser.name/news/2007/10/09/
- pointermin = 0;
- pointermax = Math.min(text1.length, text2.length);
- pointermid = pointermax;
- pointerend = 0;
- while ( pointermin < pointermid ) {
- if (text1.substring( text1.length - pointermid, text1.length - pointerend ) ===
- text2.substring( text2.length - pointermid, text2.length - pointerend ) ) {
- pointermin = pointermid;
- pointerend = pointermin;
- } else {
- pointermax = pointermid;
- }
- pointermid = Math.floor( ( pointermax - pointermin ) / 2 + pointermin );
- }
- return pointermid;
- };
-
- /**
- * Find the differences between two texts. Assumes that the texts do not
- * have any common prefix or suffix.
- * @param {string} text1 Old string to be diffed.
- * @param {string} text2 New string to be diffed.
- * @param {boolean} checklines Speedup flag. If false, then don't run a
- * line-level diff first to identify the changed areas.
- * If true, then run a faster, slightly less optimal diff.
- * @param {number} deadline Time when the diff should be complete by.
- * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
- * @private
- */
- DiffMatchPatch.prototype.diffCompute = function( text1, text2, checklines, deadline ) {
- var diffs, longtext, shorttext, i, hm,
- text1A, text2A, text1B, text2B,
- midCommon, diffsA, diffsB;
-
- if ( !text1 ) {
- // Just add some text (speedup).
- return [
- [ DIFF_INSERT, text2 ]
- ];
- }
-
- if (!text2) {
- // Just delete some text (speedup).
- return [
- [ DIFF_DELETE, text1 ]
- ];
- }
-
- longtext = text1.length > text2.length ? text1 : text2;
- shorttext = text1.length > text2.length ? text2 : text1;
- i = longtext.indexOf( shorttext );
- if ( i !== -1 ) {
- // Shorter text is inside the longer text (speedup).
- diffs = [
- [ DIFF_INSERT, longtext.substring( 0, i ) ],
- [ DIFF_EQUAL, shorttext ],
- [ DIFF_INSERT, longtext.substring( i + shorttext.length ) ]
- ];
- // Swap insertions for deletions if diff is reversed.
- if ( text1.length > text2.length ) {
- diffs[0][0] = diffs[2][0] = DIFF_DELETE;
- }
- return diffs;
- }
-
- if ( shorttext.length === 1 ) {
- // Single character string.
- // After the previous speedup, the character can't be an equality.
- return [
- [ DIFF_DELETE, text1 ],
- [ DIFF_INSERT, text2 ]
- ];
- }
-
- // Check to see if the problem can be split in two.
- hm = this.diffHalfMatch(text1, text2);
- if (hm) {
- // A half-match was found, sort out the return data.
- text1A = hm[0];
- text1B = hm[1];
- text2A = hm[2];
- text2B = hm[3];
- midCommon = hm[4];
- // Send both pairs off for separate processing.
- diffsA = this.DiffMain(text1A, text2A, checklines, deadline);
- diffsB = this.DiffMain(text1B, text2B, checklines, deadline);
- // Merge the results.
- return diffsA.concat([
- [ DIFF_EQUAL, midCommon ]
- ], diffsB);
- }
-
- if (checklines && text1.length > 100 && text2.length > 100) {
- return this.diffLineMode(text1, text2, deadline);
- }
-
- return this.diffBisect(text1, text2, deadline);
- };
-
- /**
- * Do the two texts share a substring which is at least half the length of the
- * longer text?
- * This speedup can produce non-minimal diffs.
- * @param {string} text1 First string.
- * @param {string} text2 Second string.
- * @return {Array.<string>} Five element Array, containing the prefix of
- * text1, the suffix of text1, the prefix of text2, the suffix of
- * text2 and the common middle. Or null if there was no match.
- * @private
- */
- DiffMatchPatch.prototype.diffHalfMatch = function(text1, text2) {
- var longtext, shorttext, dmp,
- text1A, text2B, text2A, text1B, midCommon,
- hm1, hm2, hm;
- if (this.DiffTimeout <= 0) {
- // Don't risk returning a non-optimal diff if we have unlimited time.
- return null;
- }
- longtext = text1.length > text2.length ? text1 : text2;
- shorttext = text1.length > text2.length ? text2 : text1;
- if (longtext.length < 4 || shorttext.length * 2 < longtext.length) {
- return null; // Pointless.
- }
- dmp = this; // 'this' becomes 'window' in a closure.
-
- /**
- * Does a substring of shorttext exist within longtext such that the substring
- * is at least half the length of longtext?
- * Closure, but does not reference any external variables.
- * @param {string} longtext Longer string.
- * @param {string} shorttext Shorter string.
- * @param {number} i Start index of quarter length substring within longtext.
- * @return {Array.<string>} Five element Array, containing the prefix of
- * longtext, the suffix of longtext, the prefix of shorttext, the suffix
- * of shorttext and the common middle. Or null if there was no match.
- * @private
- */
- function diffHalfMatchI(longtext, shorttext, i) {
- var seed, j, bestCommon, prefixLength, suffixLength,
- bestLongtextA, bestLongtextB, bestShorttextA, bestShorttextB;
- // Start with a 1/4 length substring at position i as a seed.
- seed = longtext.substring(i, i + Math.floor(longtext.length / 4));
- j = -1;
- bestCommon = "";
- while ((j = shorttext.indexOf(seed, j + 1)) !== -1) {
- prefixLength = dmp.diffCommonPrefix(longtext.substring(i),
- shorttext.substring(j));
- suffixLength = dmp.diffCommonSuffix(longtext.substring(0, i),
- shorttext.substring(0, j));
- if (bestCommon.length < suffixLength + prefixLength) {
- bestCommon = shorttext.substring(j - suffixLength, j) +
- shorttext.substring(j, j + prefixLength);
- bestLongtextA = longtext.substring(0, i - suffixLength);
- bestLongtextB = longtext.substring(i + prefixLength);
- bestShorttextA = shorttext.substring(0, j - suffixLength);
- bestShorttextB = shorttext.substring(j + prefixLength);
- }
- }
- if (bestCommon.length * 2 >= longtext.length) {
- return [ bestLongtextA, bestLongtextB,
- bestShorttextA, bestShorttextB, bestCommon
- ];
- } else {
- return null;
- }
- }
-
- // First check if the second quarter is the seed for a half-match.
- hm1 = diffHalfMatchI(longtext, shorttext,
- Math.ceil(longtext.length / 4));
- // Check again based on the third quarter.
- hm2 = diffHalfMatchI(longtext, shorttext,
- Math.ceil(longtext.length / 2));
- if (!hm1 && !hm2) {
- return null;
- } else if (!hm2) {
- hm = hm1;
- } else if (!hm1) {
- hm = hm2;
- } else {
- // Both matched. Select the longest.
- hm = hm1[4].length > hm2[4].length ? hm1 : hm2;
- }
-
- // A half-match was found, sort out the return data.
- text1A, text1B, text2A, text2B;
- if (text1.length > text2.length) {
- text1A = hm[0];
- text1B = hm[1];
- text2A = hm[2];
- text2B = hm[3];
- } else {
- text2A = hm[0];
- text2B = hm[1];
- text1A = hm[2];
- text1B = hm[3];
- }
- midCommon = hm[4];
- return [ text1A, text1B, text2A, text2B, midCommon ];
- };
-
- /**
- * Do a quick line-level diff on both strings, then rediff the parts for
- * greater accuracy.
- * This speedup can produce non-minimal diffs.
- * @param {string} text1 Old string to be diffed.
- * @param {string} text2 New string to be diffed.
- * @param {number} deadline Time when the diff should be complete by.
- * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
- * @private
- */
- DiffMatchPatch.prototype.diffLineMode = function(text1, text2, deadline) {
- var a, diffs, linearray, pointer, countInsert,
- countDelete, textInsert, textDelete, j;
- // Scan the text on a line-by-line basis first.
- a = this.diffLinesToChars(text1, text2);
- text1 = a.chars1;
- text2 = a.chars2;
- linearray = a.lineArray;
-
- diffs = this.DiffMain(text1, text2, false, deadline);
-
- // Convert the diff back to original text.
- this.diffCharsToLines(diffs, linearray);
- // Eliminate freak matches (e.g. blank lines)
- this.diffCleanupSemantic(diffs);
-
- // Rediff any replacement blocks, this time character-by-character.
- // Add a dummy entry at the end.
- diffs.push( [ DIFF_EQUAL, "" ] );
- pointer = 0;
- countDelete = 0;
- countInsert = 0;
- textDelete = "";
- textInsert = "";
- while (pointer < diffs.length) {
- switch ( diffs[pointer][0] ) {
- case DIFF_INSERT:
- countInsert++;
- textInsert += diffs[pointer][1];
- break;
- case DIFF_DELETE:
- countDelete++;
- textDelete += diffs[pointer][1];
- break;
- case DIFF_EQUAL:
- // Upon reaching an equality, check for prior redundancies.
- if (countDelete >= 1 && countInsert >= 1) {
- // Delete the offending records and add the merged ones.
- diffs.splice(pointer - countDelete - countInsert,
- countDelete + countInsert);
- pointer = pointer - countDelete - countInsert;
- a = this.DiffMain(textDelete, textInsert, false, deadline);
- for (j = a.length - 1; j >= 0; j--) {
- diffs.splice( pointer, 0, a[j] );
- }
- pointer = pointer + a.length;
- }
- countInsert = 0;
- countDelete = 0;
- textDelete = "";
- textInsert = "";
- break;
- }
- pointer++;
- }
- diffs.pop(); // Remove the dummy entry at the end.
-
- return diffs;
- };
-
- /**
- * Find the 'middle snake' of a diff, split the problem in two
- * and return the recursively constructed diff.
- * See Myers 1986 paper: An O(ND) Difference Algorithm and Its Variations.
- * @param {string} text1 Old string to be diffed.
- * @param {string} text2 New string to be diffed.
- * @param {number} deadline Time at which to bail if not yet complete.
- * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
- * @private
- */
- DiffMatchPatch.prototype.diffBisect = function(text1, text2, deadline) {
- var text1Length, text2Length, maxD, vOffset, vLength,
- v1, v2, x, delta, front, k1start, k1end, k2start,
- k2end, k2Offset, k1Offset, x1, x2, y1, y2, d, k1, k2;
- // Cache the text lengths to prevent multiple calls.
- text1Length = text1.length;
- text2Length = text2.length;
- maxD = Math.ceil((text1Length + text2Length) / 2);
- vOffset = maxD;
- vLength = 2 * maxD;
- v1 = new Array(vLength);
- v2 = new Array(vLength);
- // Setting all elements to -1 is faster in Chrome & Firefox than mixing
- // integers and undefined.
- for (x = 0; x < vLength; x++) {
- v1[x] = -1;
- v2[x] = -1;
- }
- v1[vOffset + 1] = 0;
- v2[vOffset + 1] = 0;
- delta = text1Length - text2Length;
- // If the total number of characters is odd, then the front path will collide
- // with the reverse path.
- front = (delta % 2 !== 0);
- // Offsets for start and end of k loop.
- // Prevents mapping of space beyond the grid.
- k1start = 0;
- k1end = 0;
- k2start = 0;
- k2end = 0;
- for (d = 0; d < maxD; d++) {
- // Bail out if deadline is reached.
- if ((new Date()).getTime() > deadline) {
- break;
- }
-
- // Walk the front path one step.
- for (k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {
- k1Offset = vOffset + k1;
- if ( k1 === -d || ( k1 !== d && v1[ k1Offset - 1 ] < v1[ k1Offset + 1 ] ) ) {
- x1 = v1[k1Offset + 1];
- } else {
- x1 = v1[k1Offset - 1] + 1;
- }
- y1 = x1 - k1;
- while (x1 < text1Length && y1 < text2Length &&
- text1.charAt(x1) === text2.charAt(y1)) {
- x1++;
- y1++;
- }
- v1[k1Offset] = x1;
- if (x1 > text1Length) {
- // Ran off the right of the graph.
- k1end += 2;
- } else if (y1 > text2Length) {
- // Ran off the bottom of the graph.
- k1start += 2;
- } else if (front) {
- k2Offset = vOffset + delta - k1;
- if (k2Offset >= 0 && k2Offset < vLength && v2[k2Offset] !== -1) {
- // Mirror x2 onto top-left coordinate system.
- x2 = text1Length - v2[k2Offset];
- if (x1 >= x2) {
- // Overlap detected.
- return this.diffBisectSplit(text1, text2, x1, y1, deadline);
- }
- }
- }
- }
-
- // Walk the reverse path one step.
- for (k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {
- k2Offset = vOffset + k2;
- if ( k2 === -d || (k2 !== d && v2[ k2Offset - 1 ] < v2[ k2Offset + 1 ] ) ) {
- x2 = v2[k2Offset + 1];
- } else {
- x2 = v2[k2Offset - 1] + 1;
- }
- y2 = x2 - k2;
- while (x2 < text1Length && y2 < text2Length &&
- text1.charAt(text1Length - x2 - 1) ===
- text2.charAt(text2Length - y2 - 1)) {
- x2++;
- y2++;
- }
- v2[k2Offset] = x2;
- if (x2 > text1Length) {
- // Ran off the left of the graph.
- k2end += 2;
- } else if (y2 > text2Length) {
- // Ran off the top of the graph.
- k2start += 2;
- } else if (!front) {
- k1Offset = vOffset + delta - k2;
- if (k1Offset >= 0 && k1Offset < vLength && v1[k1Offset] !== -1) {
- x1 = v1[k1Offset];
- y1 = vOffset + x1 - k1Offset;
- // Mirror x2 onto top-left coordinate system.
- x2 = text1Length - x2;
- if (x1 >= x2) {
- // Overlap detected.
- return this.diffBisectSplit(text1, text2, x1, y1, deadline);
- }
- }
- }
- }
- }
- // Diff took too long and hit the deadline or
- // number of diffs equals number of characters, no commonality at all.
- return [
- [ DIFF_DELETE, text1 ],
- [ DIFF_INSERT, text2 ]
- ];
- };
-
- /**
- * Given the location of the 'middle snake', split the diff in two parts
- * and recurse.
- * @param {string} text1 Old string to be diffed.
- * @param {string} text2 New string to be diffed.
- * @param {number} x Index of split point in text1.
- * @param {number} y Index of split point in text2.
- * @param {number} deadline Time at which to bail if not yet complete.
- * @return {!Array.<!DiffMatchPatch.Diff>} Array of diff tuples.
- * @private
- */
- DiffMatchPatch.prototype.diffBisectSplit = function( text1, text2, x, y, deadline ) {
- var text1a, text1b, text2a, text2b, diffs, diffsb;
- text1a = text1.substring(0, x);
- text2a = text2.substring(0, y);
- text1b = text1.substring(x);
- text2b = text2.substring(y);
-
- // Compute both diffs serially.
- diffs = this.DiffMain(text1a, text2a, false, deadline);
- diffsb = this.DiffMain(text1b, text2b, false, deadline);
-
- return diffs.concat(diffsb);
- };
-
- /**
- * Reduce the number of edits by eliminating semantically trivial equalities.
- * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
- */
- DiffMatchPatch.prototype.diffCleanupSemantic = function(diffs) {
- var changes, equalities, equalitiesLength, lastequality,
- pointer, lengthInsertions2, lengthDeletions2, lengthInsertions1,
- lengthDeletions1, deletion, insertion, overlapLength1, overlapLength2;
- changes = false;
- equalities = []; // Stack of indices where equalities are found.
- equalitiesLength = 0; // Keeping our own length var is faster in JS.
- /** @type {?string} */
- lastequality = null;
- // Always equal to diffs[equalities[equalitiesLength - 1]][1]
- pointer = 0; // Index of current position.
- // Number of characters that changed prior to the equality.
- lengthInsertions1 = 0;
- lengthDeletions1 = 0;
- // Number of characters that changed after the equality.
- lengthInsertions2 = 0;
- lengthDeletions2 = 0;
- while (pointer < diffs.length) {
- if (diffs[pointer][0] === DIFF_EQUAL) { // Equality found.
- equalities[equalitiesLength++] = pointer;
- lengthInsertions1 = lengthInsertions2;
- lengthDeletions1 = lengthDeletions2;
- lengthInsertions2 = 0;
- lengthDeletions2 = 0;
- lastequality = diffs[pointer][1];
- } else { // An insertion or deletion.
- if (diffs[pointer][0] === DIFF_INSERT) {
- lengthInsertions2 += diffs[pointer][1].length;
- } else {
- lengthDeletions2 += diffs[pointer][1].length;
- }
- // Eliminate an equality that is smaller or equal to the edits on both
- // sides of it.
- if (lastequality && (lastequality.length <=
- Math.max(lengthInsertions1, lengthDeletions1)) &&
- (lastequality.length <= Math.max(lengthInsertions2,
- lengthDeletions2))) {
- // Duplicate record.
- diffs.splice( equalities[ equalitiesLength - 1 ], 0, [ DIFF_DELETE, lastequality ] );
- // Change second copy to insert.
- diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT;
- // Throw away the equality we just deleted.
- equalitiesLength--;
- // Throw away the previous equality (it needs to be reevaluated).
- equalitiesLength--;
- pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1;
- lengthInsertions1 = 0; // Reset the counters.
- lengthDeletions1 = 0;
- lengthInsertions2 = 0;
- lengthDeletions2 = 0;
- lastequality = null;
- changes = true;
- }
- }
- pointer++;
- }
-
- // Normalize the diff.
- if (changes) {
- this.diffCleanupMerge(diffs);
- }
-
- // Find any overlaps between deletions and insertions.
- // e.g: <del>abcxxx</del><ins>xxxdef</ins>
- // -> <del>abc</del>xxx<ins>def</ins>
- // e.g: <del>xxxabc</del><ins>defxxx</ins>
- // -> <ins>def</ins>xxx<del>abc</del>
- // Only extract an overlap if it is as big as the edit ahead or behind it.
- pointer = 1;
- while (pointer < diffs.length) {
- if (diffs[pointer - 1][0] === DIFF_DELETE &&
- diffs[pointer][0] === DIFF_INSERT) {
- deletion = diffs[pointer - 1][1];
- insertion = diffs[pointer][1];
- overlapLength1 = this.diffCommonOverlap(deletion, insertion);
- overlapLength2 = this.diffCommonOverlap(insertion, deletion);
- if (overlapLength1 >= overlapLength2) {
- if (overlapLength1 >= deletion.length / 2 ||
- overlapLength1 >= insertion.length / 2) {
- // Overlap found. Insert an equality and trim the surrounding edits.
- diffs.splice( pointer, 0, [ DIFF_EQUAL, insertion.substring( 0, overlapLength1 ) ] );
- diffs[pointer - 1][1] =
- deletion.substring(0, deletion.length - overlapLength1);
- diffs[pointer + 1][1] = insertion.substring(overlapLength1);
- pointer++;
- }
- } else {
- if (overlapLength2 >= deletion.length / 2 ||
- overlapLength2 >= insertion.length / 2) {
- // Reverse overlap found.
- // Insert an equality and swap and trim the surrounding edits.
- diffs.splice( pointer, 0, [ DIFF_EQUAL, deletion.substring( 0, overlapLength2 ) ] );
- diffs[pointer - 1][0] = DIFF_INSERT;
- diffs[pointer - 1][1] =
- insertion.substring(0, insertion.length - overlapLength2);
- diffs[pointer + 1][0] = DIFF_DELETE;
- diffs[pointer + 1][1] =
- deletion.substring(overlapLength2);
- pointer++;
- }
- }
- pointer++;
- }
- pointer++;
- }
- };
-
- /**
- * Determine if the suffix of one string is the prefix of another.
- * @param {string} text1 First string.
- * @param {string} text2 Second string.
- * @return {number} The number of characters common to the end of the first
- * string and the start of the second string.
- * @private
- */
- DiffMatchPatch.prototype.diffCommonOverlap = function(text1, text2) {
- var text1Length, text2Length, textLength,
- best, length, pattern, found;
- // Cache the text lengths to prevent multiple calls.
- text1Length = text1.length;
- text2Length = text2.length;
- // Eliminate the null case.
- if (text1Length === 0 || text2Length === 0) {
- return 0;
- }
- // Truncate the longer string.
- if (text1Length > text2Length) {
- text1 = text1.substring(text1Length - text2Length);
- } else if (text1Length < text2Length) {
- text2 = text2.substring(0, text1Length);
- }
- textLength = Math.min(text1Length, text2Length);
- // Quick check for the worst case.
- if (text1 === text2) {
- return textLength;
- }
-
- // Start by looking for a single character match
- // and increase length until no match is found.
- // Performance analysis: http://neil.fraser.name/news/2010/11/04/
- best = 0;
- length = 1;
- while (true) {
- pattern = text1.substring(textLength - length);
- found = text2.indexOf(pattern);
- if (found === -1) {
- return best;
- }
- length += found;
- if (found === 0 || text1.substring(textLength - length) ===
- text2.substring(0, length)) {
- best = length;
- length++;
- }
- }
- };
-
- /**
- * Split two texts into an array of strings. Reduce the texts to a string of
- * hashes where each Unicode character represents one line.
- * @param {string} text1 First string.
- * @param {string} text2 Second string.
- * @return {{chars1: string, chars2: string, lineArray: !Array.<string>}}
- * An object containing the encoded text1, the encoded text2 and
- * the array of unique strings.
- * The zeroth element of the array of unique strings is intentionally blank.
- * @private
- */
- DiffMatchPatch.prototype.diffLinesToChars = function(text1, text2) {
- var lineArray, lineHash, chars1, chars2;
- lineArray = []; // e.g. lineArray[4] === 'Hello\n'
- lineHash = {}; // e.g. lineHash['Hello\n'] === 4
-
- // '\x00' is a valid character, but various debuggers don't like it.
- // So we'll insert a junk entry to avoid generating a null character.
- lineArray[0] = "";
-
- /**
- * Split a text into an array of strings. Reduce the texts to a string of
- * hashes where each Unicode character represents one line.
- * Modifies linearray and linehash through being a closure.
- * @param {string} text String to encode.
- * @return {string} Encoded string.
- * @private
- */
- function diffLinesToCharsMunge(text) {
- var chars, lineStart, lineEnd, lineArrayLength, line;
- chars = "";
- // Walk the text, pulling out a substring for each line.
- // text.split('\n') would would temporarily double our memory footprint.
- // Modifying text would create many large strings to garbage collect.
- lineStart = 0;
- lineEnd = -1;
- // Keeping our own length variable is faster than looking it up.
- lineArrayLength = lineArray.length;
- while (lineEnd < text.length - 1) {
- lineEnd = text.indexOf("\n", lineStart);
- if (lineEnd === -1) {
- lineEnd = text.length - 1;
- }
- line = text.substring(lineStart, lineEnd + 1);
- lineStart = lineEnd + 1;
-
- if (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) :
- (lineHash[line] !== undefined)) {
- chars += String.fromCharCode( lineHash[ line ] );
- } else {
- chars += String.fromCharCode(lineArrayLength);
- lineHash[line] = lineArrayLength;
- lineArray[lineArrayLength++] = line;
- }
- }
- return chars;
- }
-
- chars1 = diffLinesToCharsMunge(text1);
- chars2 = diffLinesToCharsMunge(text2);
- return {
- chars1: chars1,
- chars2: chars2,
- lineArray: lineArray
- };
- };
-
- /**
- * Rehydrate the text in a diff from a string of line hashes to real lines of
- * text.
- * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
- * @param {!Array.<string>} lineArray Array of unique strings.
- * @private
- */
- DiffMatchPatch.prototype.diffCharsToLines = function( diffs, lineArray ) {
- var x, chars, text, y;
- for ( x = 0; x < diffs.length; x++ ) {
- chars = diffs[x][1];
- text = [];
- for ( y = 0; y < chars.length; y++ ) {
- text[y] = lineArray[chars.charCodeAt(y)];
- }
- diffs[x][1] = text.join("");
- }
- };
-
- /**
- * Reorder and merge like edit sections. Merge equalities.
- * Any edit section can move as long as it doesn't cross an equality.
- * @param {!Array.<!DiffMatchPatch.Diff>} diffs Array of diff tuples.
- */
- DiffMatchPatch.prototype.diffCleanupMerge = function(diffs) {
- var pointer, countDelete, countInsert, textInsert, textDelete,
- commonlength, changes;
- diffs.push( [ DIFF_EQUAL, "" ] ); // Add a dummy entry at the end.
- pointer = 0;
- countDelete = 0;
- countInsert = 0;
- textDelete = "";
- textInsert = "";
- commonlength;
- while (pointer < diffs.length) {
- switch ( diffs[ pointer ][ 0 ] ) {
- case DIFF_INSERT:
- countInsert++;
- textInsert += diffs[pointer][1];
- pointer++;
- break;
- case DIFF_DELETE:
- countDelete++;
- textDelete += diffs[pointer][1];
- pointer++;
- break;
- case DIFF_EQUAL:
- // Upon reaching an equality, check for prior redundancies.
- if (countDelete + countInsert > 1) {
- if (countDelete !== 0 && countInsert !== 0) {
- // Factor out any common prefixies.
- commonlength = this.diffCommonPrefix(textInsert, textDelete);
- if (commonlength !== 0) {
- if ((pointer - countDelete - countInsert) > 0 &&
- diffs[pointer - countDelete - countInsert - 1][0] ===
- DIFF_EQUAL) {
- diffs[pointer - countDelete - countInsert - 1][1] +=
- textInsert.substring(0, commonlength);
- } else {
- diffs.splice( 0, 0, [ DIFF_EQUAL,
- textInsert.substring( 0, commonlength )
- ] );
- pointer++;
- }
- textInsert = textInsert.substring(commonlength);
- textDelete = textDelete.substring(commonlength);
- }
- // Factor out any common suffixies.
- commonlength = this.diffCommonSuffix(textInsert, textDelete);
- if (commonlength !== 0) {
- diffs[pointer][1] = textInsert.substring(textInsert.length -
- commonlength) + diffs[pointer][1];
- textInsert = textInsert.substring(0, textInsert.length -
- commonlength);
- textDelete = textDelete.substring(0, textDelete.length -
- commonlength);
- }
- }
- // Delete the offending records and add the merged ones.
- if (countDelete === 0) {
- diffs.splice( pointer - countInsert,
- countDelete + countInsert, [ DIFF_INSERT, textInsert ] );
- } else if (countInsert === 0) {
- diffs.splice( pointer - countDelete,
- countDelete + countInsert, [ DIFF_DELETE, textDelete ] );
- } else {
- diffs.splice( pointer - countDelete - countInsert,
- countDelete + countInsert, [ DIFF_DELETE, textDelete ], [ DIFF_INSERT, textInsert ] );
- }
- pointer = pointer - countDelete - countInsert +
- (countDelete ? 1 : 0) + (countInsert ? 1 : 0) + 1;
- } else if (pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL) {
- // Merge this equality with the previous one.
- diffs[pointer - 1][1] += diffs[pointer][1];
- diffs.splice(pointer, 1);
- } else {
- pointer++;
- }
- countInsert = 0;
- countDelete = 0;
- textDelete = "";
- textInsert = "";
- break;
- }
- }
- if (diffs[diffs.length - 1][1] === "") {
- diffs.pop(); // Remove the dummy entry at the end.
- }
-
- // Second pass: look for single edits surrounded on both sides by equalities
- // which can be shifted sideways to eliminate an equality.
- // e.g: A<ins>BA</ins>C -> <ins>AB</ins>AC
- changes = false;
- pointer = 1;
- // Intentionally ignore the first and last element (don't need checking).
- while (pointer < diffs.length - 1) {
- if (diffs[pointer - 1][0] === DIFF_EQUAL &&
- diffs[pointer + 1][0] === DIFF_EQUAL) {
- // This is a single edit surrounded by equalities.
- if ( diffs[ pointer ][ 1 ].substring( diffs[ pointer ][ 1 ].length -
- diffs[ pointer - 1 ][ 1 ].length ) === diffs[ pointer - 1 ][ 1 ] ) {
- // Shift the edit over the previous equality.
- diffs[pointer][1] = diffs[pointer - 1][1] +
- diffs[pointer][1].substring(0, diffs[pointer][1].length -
- diffs[pointer - 1][1].length);
- diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1];
- diffs.splice(pointer - 1, 1);
- changes = true;
- } else if ( diffs[ pointer ][ 1 ].substring( 0, diffs[ pointer + 1 ][ 1 ].length ) ===
- diffs[ pointer + 1 ][ 1 ] ) {
- // Shift the edit over the next equality.
- diffs[pointer - 1][1] += diffs[pointer + 1][1];
- diffs[pointer][1] =
- diffs[pointer][1].substring(diffs[pointer + 1][1].length) +
- diffs[pointer + 1][1];
- diffs.splice(pointer + 1, 1);
- changes = true;
- }
- }
- pointer++;
- }
- // If shifts were made, the diff needs reordering and another shift sweep.
- if (changes) {
- this.diffCleanupMerge(diffs);
- }
- };
-
- return function(o, n) {
- var diff, output, text;
- diff = new DiffMatchPatch();
- output = diff.DiffMain(o, n);
- //console.log(output);
- diff.diffCleanupEfficiency(output);
- text = diff.diffPrettyHtml(output);
-
- return text;
- };
-}());
-// jscs:enable
-
-(function() {
-
-// Deprecated QUnit.init - Ref #530
-// Re-initialize the configuration options
-QUnit.init = function() {
- var tests, banner, result, qunit,
- config = QUnit.config;
-
- config.stats = { all: 0, bad: 0 };
- config.moduleStats = { all: 0, bad: 0 };
- config.started = 0;
- config.updateRate = 1000;
- config.blocking = false;
- config.autostart = true;
- config.autorun = false;
- config.filter = "";
- config.queue = [];
-
- // Return on non-browser environments
- // This is necessary to not break on node tests
- if ( typeof window === "undefined" ) {
- return;
- }
-
- qunit = id( "qunit" );
- if ( qunit ) {
- qunit.innerHTML =
- "<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
- "<h2 id='qunit-banner'></h2>" +
- "<div id='qunit-testrunner-toolbar'></div>" +
- "<h2 id='qunit-userAgent'></h2>" +
- "<ol id='qunit-tests'></ol>";
- }
-
- tests = id( "qunit-tests" );
- banner = id( "qunit-banner" );
- result = id( "qunit-testresult" );
-
- if ( tests ) {
- tests.innerHTML = "";
- }
-
- if ( banner ) {
- banner.className = "";
- }
-
- if ( result ) {
- result.parentNode.removeChild( result );
- }
-
- if ( tests ) {
- result = document.createElement( "p" );
- result.id = "qunit-testresult";
- result.className = "result";
- tests.parentNode.insertBefore( result, tests );
- result.innerHTML = "Running...<br />&#160;";
- }
-};
-
-// Don't load the HTML Reporter on non-Browser environments
-if ( typeof window === "undefined" ) {
- return;
-}
-
-var config = QUnit.config,
- hasOwn = Object.prototype.hasOwnProperty,
- defined = {
- document: window.document !== undefined,
- sessionStorage: (function() {
- var x = "qunit-test-string";
- try {
- sessionStorage.setItem( x, x );
- sessionStorage.removeItem( x );
- return true;
- } catch ( e ) {
- return false;
- }
- }())
- },
- modulesList = [];
-
-/**
-* Escape text for attribute or text content.
-*/
-function escapeText( s ) {
- if ( !s ) {
- return "";
- }
- s = s + "";
-
- // Both single quotes and double quotes (for attributes)
- return s.replace( /['"<>&]/g, function( s ) {
- switch ( s ) {
- case "'":
- return "&#039;";
- case "\"":
- return "&quot;";
- case "<":
- return "&lt;";
- case ">":
- return "&gt;";
- case "&":
- return "&amp;";
- }
- });
-}
-
-/**
- * @param {HTMLElement} elem
- * @param {string} type
- * @param {Function} fn
- */
-function addEvent( elem, type, fn ) {
- if ( elem.addEventListener ) {
-
- // Standards-based browsers
- elem.addEventListener( type, fn, false );
- } else if ( elem.attachEvent ) {
-
- // support: IE <9
- elem.attachEvent( "on" + type, function() {
- var event = window.event;
- if ( !event.target ) {
- event.target = event.srcElement || document;
- }
-
- fn.call( elem, event );
- });
- }
-}
-
-/**
- * @param {Array|NodeList} elems
- * @param {string} type
- * @param {Function} fn
- */
-function addEvents( elems, type, fn ) {
- var i = elems.length;
- while ( i-- ) {
- addEvent( elems[ i ], type, fn );
- }
-}
-
-function hasClass( elem, name ) {
- return ( " " + elem.className + " " ).indexOf( " " + name + " " ) >= 0;
-}
-
-function addClass( elem, name ) {
- if ( !hasClass( elem, name ) ) {
- elem.className += ( elem.className ? " " : "" ) + name;
- }
-}
-
-function toggleClass( elem, name ) {
- if ( hasClass( elem, name ) ) {
- removeClass( elem, name );
- } else {
- addClass( elem, name );
- }
-}
-
-function removeClass( elem, name ) {
- var set = " " + elem.className + " ";
-
- // Class name may appear multiple times
- while ( set.indexOf( " " + name + " " ) >= 0 ) {
- set = set.replace( " " + name + " ", " " );
- }
-
- // trim for prettiness
- elem.className = typeof set.trim === "function" ? set.trim() : set.replace( /^\s+|\s+$/g, "" );
-}
-
-function id( name ) {
- return defined.document && document.getElementById && document.getElementById( name );
-}
-
-function getUrlConfigHtml() {
- var i, j, val,
- escaped, escapedTooltip,
- selection = false,
- len = config.urlConfig.length,
- urlConfigHtml = "";
-
- for ( i = 0; i < len; i++ ) {
- val = config.urlConfig[ i ];
- if ( typeof val === "string" ) {
- val = {
- id: val,
- label: val
- };
- }
-
- escaped = escapeText( val.id );
- escapedTooltip = escapeText( val.tooltip );
-
- if ( config[ val.id ] === undefined ) {
- config[ val.id ] = QUnit.urlParams[ val.id ];
- }
-
- if ( !val.value || typeof val.value === "string" ) {
- urlConfigHtml += "<input id='qunit-urlconfig-" + escaped +
- "' name='" + escaped + "' type='checkbox'" +
- ( val.value ? " value='" + escapeText( val.value ) + "'" : "" ) +
- ( config[ val.id ] ? " checked='checked'" : "" ) +
- " title='" + escapedTooltip + "' /><label for='qunit-urlconfig-" + escaped +
- "' title='" + escapedTooltip + "'>" + val.label + "</label>";
- } else {
- urlConfigHtml += "<label for='qunit-urlconfig-" + escaped +
- "' title='" + escapedTooltip + "'>" + val.label +
- ": </label><select id='qunit-urlconfig-" + escaped +
- "' name='" + escaped + "' title='" + escapedTooltip + "'><option></option>";
-
- if ( QUnit.is( "array", val.value ) ) {
- for ( j = 0; j < val.value.length; j++ ) {
- escaped = escapeText( val.value[ j ] );
- urlConfigHtml += "<option value='" + escaped + "'" +
- ( config[ val.id ] === val.value[ j ] ?
- ( selection = true ) && " selected='selected'" : "" ) +
- ">" + escaped + "</option>";
- }
- } else {
- for ( j in val.value ) {
- if ( hasOwn.call( val.value, j ) ) {
- urlConfigHtml += "<option value='" + escapeText( j ) + "'" +
- ( config[ val.id ] === j ?
- ( selection = true ) && " selected='selected'" : "" ) +
- ">" + escapeText( val.value[ j ] ) + "</option>";
- }
- }
- }
- if ( config[ val.id ] && !selection ) {
- escaped = escapeText( config[ val.id ] );
- urlConfigHtml += "<option value='" + escaped +
- "' selected='selected' disabled='disabled'>" + escaped + "</option>";
- }
- urlConfigHtml += "</select>";
- }
- }
-
- return urlConfigHtml;
-}
-
-// Handle "click" events on toolbar checkboxes and "change" for select menus.
-// Updates the URL with the new state of `config.urlConfig` values.
-function toolbarChanged() {
- var updatedUrl, value,
- field = this,
- params = {};
-
- // Detect if field is a select menu or a checkbox
- if ( "selectedIndex" in field ) {
- value = field.options[ field.selectedIndex ].value || undefined;
- } else {
- value = field.checked ? ( field.defaultValue || true ) : undefined;
- }
-
- params[ field.name ] = value;
- updatedUrl = setUrl( params );
-
- if ( "hidepassed" === field.name && "replaceState" in window.history ) {
- config[ field.name ] = value || false;
- if ( value ) {
- addClass( id( "qunit-tests" ), "hidepass" );
- } else {
- removeClass( id( "qunit-tests" ), "hidepass" );
- }
-
- // It is not necessary to refresh the whole page
- window.history.replaceState( null, "", updatedUrl );
- } else {
- window.location = updatedUrl;
- }
-}
-
-function setUrl( params ) {
- var key,
- querystring = "?";
-
- params = QUnit.extend( QUnit.extend( {}, QUnit.urlParams ), params );
-
- for ( key in params ) {
- if ( hasOwn.call( params, key ) ) {
- if ( params[ key ] === undefined ) {
- continue;
- }
- querystring += encodeURIComponent( key );
- if ( params[ key ] !== true ) {
- querystring += "=" + encodeURIComponent( params[ key ] );
- }
- querystring += "&";
- }
- }
- return location.protocol + "//" + location.host +
- location.pathname + querystring.slice( 0, -1 );
-}
-
-function applyUrlParams() {
- var selectedModule,
- modulesList = id( "qunit-modulefilter" ),
- filter = id( "qunit-filter-input" ).value;
-
- selectedModule = modulesList ?
- decodeURIComponent( modulesList.options[ modulesList.selectedIndex ].value ) :
- undefined;
-
- window.location = setUrl({
- module: ( selectedModule === "" ) ? undefined : selectedModule,
- filter: ( filter === "" ) ? undefined : filter,
-
- // Remove testId filter
- testId: undefined
- });
-}
-
-function toolbarUrlConfigContainer() {
- var urlConfigContainer = document.createElement( "span" );
-
- urlConfigContainer.innerHTML = getUrlConfigHtml();
- addClass( urlConfigContainer, "qunit-url-config" );
-
- // For oldIE support:
- // * Add handlers to the individual elements instead of the container
- // * Use "click" instead of "change" for checkboxes
- addEvents( urlConfigContainer.getElementsByTagName( "input" ), "click", toolbarChanged );
- addEvents( urlConfigContainer.getElementsByTagName( "select" ), "change", toolbarChanged );
-
- return urlConfigContainer;
-}
-
-function toolbarLooseFilter() {
- var filter = document.createElement( "form" ),
- label = document.createElement( "label" ),
- input = document.createElement( "input" ),
- button = document.createElement( "button" );
-
- addClass( filter, "qunit-filter" );
-
- label.innerHTML = "Filter: ";
-
- input.type = "text";
- input.value = config.filter || "";
- input.name = "filter";
- input.id = "qunit-filter-input";
-
- button.innerHTML = "Go";
-
- label.appendChild( input );
-
- filter.appendChild( label );
- filter.appendChild( button );
- addEvent( filter, "submit", function( ev ) {
- applyUrlParams();
-
- if ( ev && ev.preventDefault ) {
- ev.preventDefault();
- }
-
- return false;
- });
-
- return filter;
-}
-
-function toolbarModuleFilterHtml() {
- var i,
- moduleFilterHtml = "";
-
- if ( !modulesList.length ) {
- return false;
- }
-
- modulesList.sort(function( a, b ) {
- return a.localeCompare( b );
- });
-
- moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label>" +
- "<select id='qunit-modulefilter' name='modulefilter'><option value='' " +
- ( QUnit.urlParams.module === undefined ? "selected='selected'" : "" ) +
- ">< All Modules ></option>";
-
- for ( i = 0; i < modulesList.length; i++ ) {
- moduleFilterHtml += "<option value='" +
- escapeText( encodeURIComponent( modulesList[ i ] ) ) + "' " +
- ( QUnit.urlParams.module === modulesList[ i ] ? "selected='selected'" : "" ) +
- ">" + escapeText( modulesList[ i ] ) + "</option>";
- }
- moduleFilterHtml += "</select>";
-
- return moduleFilterHtml;
-}
-
-function toolbarModuleFilter() {
- var toolbar = id( "qunit-testrunner-toolbar" ),
- moduleFilter = document.createElement( "span" ),
- moduleFilterHtml = toolbarModuleFilterHtml();
-
- if ( !toolbar || !moduleFilterHtml ) {
- return false;
- }
-
- moduleFilter.setAttribute( "id", "qunit-modulefilter-container" );
- moduleFilter.innerHTML = moduleFilterHtml;
-
- addEvent( moduleFilter.lastChild, "change", applyUrlParams );
-
- toolbar.appendChild( moduleFilter );
-}
-
-function appendToolbar() {
- var toolbar = id( "qunit-testrunner-toolbar" );
-
- if ( toolbar ) {
- toolbar.appendChild( toolbarUrlConfigContainer() );
- toolbar.appendChild( toolbarLooseFilter() );
- }
-}
-
-function appendHeader() {
- var header = id( "qunit-header" );
-
- if ( header ) {
- header.innerHTML = "<a href='" +
- setUrl({ filter: undefined, module: undefined, testId: undefined }) +
- "'>" + header.innerHTML + "</a> ";
- }
-}
-
-function appendBanner() {
- var banner = id( "qunit-banner" );
-
- if ( banner ) {
- banner.className = "";
- }
-}
-
-function appendTestResults() {
- var tests = id( "qunit-tests" ),
- result = id( "qunit-testresult" );
-
- if ( result ) {
- result.parentNode.removeChild( result );
- }
-
- if ( tests ) {
- tests.innerHTML = "";
- result = document.createElement( "p" );
- result.id = "qunit-testresult";
- result.className = "result";
- tests.parentNode.insertBefore( result, tests );
- result.innerHTML = "Running...<br />&#160;";
- }
-}
-
-function storeFixture() {
- var fixture = id( "qunit-fixture" );
- if ( fixture ) {
- config.fixture = fixture.innerHTML;
- }
-}
-
-function appendUserAgent() {
- var userAgent = id( "qunit-userAgent" );
-
- if ( userAgent ) {
- userAgent.innerHTML = "";
- userAgent.appendChild(
- document.createTextNode(
- "QUnit " + QUnit.version + "; " + navigator.userAgent
- )
- );
- }
-}
-
-function appendTestsList( modules ) {
- var i, l, x, z, test, moduleObj;
-
- for ( i = 0, l = modules.length; i < l; i++ ) {
- moduleObj = modules[ i ];
-
- if ( moduleObj.name ) {
- modulesList.push( moduleObj.name );
- }
-
- for ( x = 0, z = moduleObj.tests.length; x < z; x++ ) {
- test = moduleObj.tests[ x ];
-
- appendTest( test.name, test.testId, moduleObj.name );
- }
- }
-}
-
-function appendTest( name, testId, moduleName ) {
- var title, rerunTrigger, testBlock, assertList,
- tests = id( "qunit-tests" );
-
- if ( !tests ) {
- return;
- }
-
- title = document.createElement( "strong" );
- title.innerHTML = getNameHtml( name, moduleName );
-
- rerunTrigger = document.createElement( "a" );
- rerunTrigger.innerHTML = "Rerun";
- rerunTrigger.href = setUrl({ testId: testId });
-
- testBlock = document.createElement( "li" );
- testBlock.appendChild( title );
- testBlock.appendChild( rerunTrigger );
- testBlock.id = "qunit-test-output-" + testId;
-
- assertList = document.createElement( "ol" );
- assertList.className = "qunit-assert-list";
-
- testBlock.appendChild( assertList );
-
- tests.appendChild( testBlock );
-}
-
-// HTML Reporter initialization and load
-QUnit.begin(function( details ) {
- var qunit = id( "qunit" );
-
- // Fixture is the only one necessary to run without the #qunit element
- storeFixture();
-
- if ( qunit ) {
- qunit.innerHTML =
- "<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
- "<h2 id='qunit-banner'></h2>" +
- "<div id='qunit-testrunner-toolbar'></div>" +
- "<h2 id='qunit-userAgent'></h2>" +
- "<ol id='qunit-tests'></ol>";
- }
-
- appendHeader();
- appendBanner();
- appendTestResults();
- appendUserAgent();
- appendToolbar();
- appendTestsList( details.modules );
- toolbarModuleFilter();
-
- if ( qunit && config.hidepassed ) {
- addClass( qunit.lastChild, "hidepass" );
- }
-});
-
-QUnit.done(function( details ) {
- var i, key,
- banner = id( "qunit-banner" ),
- tests = id( "qunit-tests" ),
- html = [
- "Tests completed in ",
- details.runtime,
- " milliseconds.<br />",
- "<span class='passed'>",
- details.passed,
- "</span> assertions of <span class='total'>",
- details.total,
- "</span> passed, <span class='failed'>",
- details.failed,
- "</span> failed."
- ].join( "" );
-
- if ( banner ) {
- banner.className = details.failed ? "qunit-fail" : "qunit-pass";
- }
-
- if ( tests ) {
- id( "qunit-testresult" ).innerHTML = html;
- }
-
- if ( config.altertitle && defined.document && document.title ) {
-
- // show ✖ for good, ✔ for bad suite result in title
- // use escape sequences in case file gets loaded with non-utf-8-charset
- document.title = [
- ( details.failed ? "\u2716" : "\u2714" ),
- document.title.replace( /^[\u2714\u2716] /i, "" )
- ].join( " " );
- }
-
- // clear own sessionStorage items if all tests passed
- if ( config.reorder && defined.sessionStorage && details.failed === 0 ) {
- for ( i = 0; i < sessionStorage.length; i++ ) {
- key = sessionStorage.key( i++ );
- if ( key.indexOf( "qunit-test-" ) === 0 ) {
- sessionStorage.removeItem( key );
- }
- }
- }
-
- // scroll back to top to show results
- if ( config.scrolltop && window.scrollTo ) {
- window.scrollTo( 0, 0 );
- }
-});
-
-function getNameHtml( name, module ) {
- var nameHtml = "";
-
- if ( module ) {
- nameHtml = "<span class='module-name'>" + escapeText( module ) + "</span>: ";
- }
-
- nameHtml += "<span class='test-name'>" + escapeText( name ) + "</span>";
-
- return nameHtml;
-}
-
-QUnit.testStart(function( details ) {
- var running, testBlock, bad;
-
- testBlock = id( "qunit-test-output-" + details.testId );
- if ( testBlock ) {
- testBlock.className = "running";
- } else {
-
- // Report later registered tests
- appendTest( details.name, details.testId, details.module );
- }
-
- running = id( "qunit-testresult" );
- if ( running ) {
- bad = QUnit.config.reorder && defined.sessionStorage &&
- +sessionStorage.getItem( "qunit-test-" + details.module + "-" + details.name );
-
- running.innerHTML = ( bad ?
- "Rerunning previously failed test: <br />" :
- "Running: <br />" ) +
- getNameHtml( details.name, details.module );
- }
-
-});
-
-QUnit.log(function( details ) {
- var assertList, assertLi,
- message, expected, actual,
- testItem = id( "qunit-test-output-" + details.testId );
-
- if ( !testItem ) {
- return;
- }
-
- message = escapeText( details.message ) || ( details.result ? "okay" : "failed" );
- message = "<span class='test-message'>" + message + "</span>";
- message += "<span class='runtime'>@ " + details.runtime + " ms</span>";
-
- // pushFailure doesn't provide details.expected
- // when it calls, it's implicit to also not show expected and diff stuff
- // Also, we need to check details.expected existence, as it can exist and be undefined
- if ( !details.result && hasOwn.call( details, "expected" ) ) {
- expected = escapeText( QUnit.dump.parse( details.expected ) );
- actual = escapeText( QUnit.dump.parse( details.actual ) );
- message += "<table><tr class='test-expected'><th>Expected: </th><td><pre>" +
- expected +
- "</pre></td></tr>";
-
- if ( actual !== expected ) {
- message += "<tr class='test-actual'><th>Result: </th><td><pre>" +
- actual + "</pre></td></tr>" +
- "<tr class='test-diff'><th>Diff: </th><td><pre>" +
- QUnit.diff( expected, actual ) + "</pre></td></tr>";
- } else {
- if ( expected.indexOf( "[object Array]" ) !== -1 ||
- expected.indexOf( "[object Object]" ) !== -1 ) {
- message += "<tr class='test-message'><th>Message: </th><td>" +
- "Diff suppressed as the depth of object is more than current max depth (" +
- QUnit.config.maxDepth + ").<p>Hint: Use <code>QUnit.dump.maxDepth</code> to " +
- " run with a higher max depth or <a href='" + setUrl({ maxDepth: -1 }) + "'>" +
- "Rerun</a> without max depth.</p></td></tr>";
- }
- }
-
- if ( details.source ) {
- message += "<tr class='test-source'><th>Source: </th><td><pre>" +
- escapeText( details.source ) + "</pre></td></tr>";
- }
-
- message += "</table>";
-
- // this occours when pushFailure is set and we have an extracted stack trace
- } else if ( !details.result && details.source ) {
- message += "<table>" +
- "<tr class='test-source'><th>Source: </th><td><pre>" +
- escapeText( details.source ) + "</pre></td></tr>" +
- "</table>";
- }
-
- assertList = testItem.getElementsByTagName( "ol" )[ 0 ];
-
- assertLi = document.createElement( "li" );
- assertLi.className = details.result ? "pass" : "fail";
- assertLi.innerHTML = message;
- assertList.appendChild( assertLi );
-});
-
-QUnit.testDone(function( details ) {
- var testTitle, time, testItem, assertList,
- good, bad, testCounts, skipped,
- tests = id( "qunit-tests" );
-
- if ( !tests ) {
- return;
- }
-
- testItem = id( "qunit-test-output-" + details.testId );
-
- assertList = testItem.getElementsByTagName( "ol" )[ 0 ];
-
- good = details.passed;
- bad = details.failed;
-
- // store result when possible
- if ( config.reorder && defined.sessionStorage ) {
- if ( bad ) {
- sessionStorage.setItem( "qunit-test-" + details.module + "-" + details.name, bad );
- } else {
- sessionStorage.removeItem( "qunit-test-" + details.module + "-" + details.name );
- }
- }
-
- if ( bad === 0 ) {
- addClass( assertList, "qunit-collapsed" );
- }
-
- // testItem.firstChild is the test name
- testTitle = testItem.firstChild;
-
- testCounts = bad ?
- "<b class='failed'>" + bad + "</b>, " + "<b class='passed'>" + good + "</b>, " :
- "";
-
- testTitle.innerHTML += " <b class='counts'>(" + testCounts +
- details.assertions.length + ")</b>";
-
- if ( details.skipped ) {
- testItem.className = "skipped";
- skipped = document.createElement( "em" );
- skipped.className = "qunit-skipped-label";
- skipped.innerHTML = "skipped";
- testItem.insertBefore( skipped, testTitle );
- } else {
- addEvent( testTitle, "click", function() {
- toggleClass( assertList, "qunit-collapsed" );
- });
-
- testItem.className = bad ? "fail" : "pass";
-
- time = document.createElement( "span" );
- time.className = "runtime";
- time.innerHTML = details.runtime + " ms";
- testItem.insertBefore( time, assertList );
- }
-});
-
-if ( defined.document ) {
- if ( document.readyState === "complete" ) {
- QUnit.load();
- } else {
- addEvent( window, "load", QUnit.load );
- }
-} else {
- config.pageLoaded = true;
- config.autorun = true;
-}
-
-})();
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/rules.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/test/rules.js
deleted file mode 100644
index f19a8702..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/rules.js
+++ /dev/null
@@ -1,307 +0,0 @@
-module("rules");
-
-test("rules() - internal - input", function() {
- var element = $("#firstname");
-
- $("#testForm1").validate();
-
- deepEqual( element.rules(), { required: true, minlength: 2 } );
-});
-
-test("rules(), ignore method:false", function() {
- var element = $("#firstnamec");
-
- $("#testForm1clean").validate({
- rules: {
- firstnamec: { required: false, minlength: 2 }
- }
- });
-
- deepEqual( element.rules(), { minlength: 2 } );
-});
-
-test("rules() HTML5 required (no value)", function() {
- var element = $("#testForm11text1");
-
- $("#testForm11").validate();
-
- deepEqual( element.rules(), { required: true } );
-});
-
-test("rules() - internal - select", function() {
- var element = $("#meal");
-
- $("#testForm3").validate();
-
- deepEqual( element.rules(), { required: true } );
-});
-
-test("rules() - external", function() {
- var element = $("#text1");
-
- $("#form").validate({
- rules: {
- action: { date: true, min: 5 }
- }
- });
-
- deepEqual( element.rules(), { date: true, min: 5 } );
-});
-
-test("rules() - external - complete form", function() {
- expect(1);
-
- var methods = $.extend({}, $.validator.methods),
- messages = $.extend({}, $.validator.messages),
- v;
-
- $.validator.addMethod("verifyTest", function() {
- ok( true, "method executed" );
- return true;
- });
- v = $("#form").validate({
- rules: {
- action: { verifyTest: true }
- }
- });
- v.form();
-
- $.validator.methods = methods;
- $.validator.messages = messages;
-});
-
-test("rules() - internal - input", function() {
- var element = $("#form8input");
-
- $("#testForm8").validate();
-
- deepEqual( element.rules(), { required: true, number: true, rangelength: [ 2, 8 ] } );
-});
-
-test("rules(), merge min/max to range, minlength/maxlength to rangelength", function() {
- jQuery.validator.autoCreateRanges = true;
-
- $("#testForm1clean").validate({
- rules: {
- firstnamec: {
- min: -15,
- max: 0
- },
- lastname: {
- minlength: 0,
- maxlength: 10
- }
- }
- });
-
- deepEqual( $("#firstnamec").rules(), { range: [ -15, 0 ] } );
- deepEqual( $("#lastnamec").rules(), { rangelength: [ 0, 10 ] } );
-
- jQuery.validator.autoCreateRanges = false;
-});
-
-test("rules(), guarantee that required is at front", function() {
- $("#testForm1").validate();
- var v = $("#v2").validate();
- $("#subformRequired").validate();
- function flatRules(element) {
- var result = [];
- jQuery.each($(element).rules(), function(key) { result.push(key); });
- return result.join(" ");
- }
- equal( "required minlength", flatRules("#firstname") );
- equal( "required minlength maxlength", flatRules("#v2-i6") );
- equal( "required maxlength", flatRules("#co_name") );
-
- QUnit.reset();
- jQuery.validator.autoCreateRanges = true;
- v = $("#v2").validate();
- equal( "required rangelength", flatRules("#v2-i6") );
-
- $("#subformRequired").validate({
- rules: {
- co_name: "required"
- }
- });
- $("#co_name").removeClass();
- equal( "required maxlength", flatRules("#co_name") );
- jQuery.validator.autoCreateRanges = false;
-});
-
-test("rules(), evaluate dynamic parameters", function() {
- expect(2);
-
- $("#testForm1clean").validate({
- rules: {
- firstnamec: {
- min: function(element) {
- equal( $("#firstnamec")[0], element );
- return 12;
- }
- }
- }
- });
-
- deepEqual( $("#firstnamec").rules(), { min: 12 });
-});
-
-test("rules(), class and attribute combinations", function() {
-
- $.validator.addMethod("customMethod1", function() {
- return false;
- }, "");
- $.validator.addMethod("customMethod2", function() {
- return false;
- }, "");
-
- $("#v2").validate({
- rules: {
- "v2-i7": {
- required: true,
- minlength: 2,
- customMethod: true
- }
- }
- });
-
- deepEqual( $("#v2-i1").rules(), { required: true });
- deepEqual( $("#v2-i2").rules(), { required: true, email: true });
- deepEqual( $("#v2-i3").rules(), { url: true });
- deepEqual( $("#v2-i4").rules(), { required: true, minlength: 2 });
- deepEqual( $("#v2-i5").rules(), { required: true, minlength: 2, maxlength: 5, customMethod1: "123" });
- jQuery.validator.autoCreateRanges = true;
- deepEqual( $("#v2-i5").rules(), { required: true, customMethod1: "123", rangelength: [ 2, 5 ] });
- deepEqual( $("#v2-i6").rules(), { required: true, customMethod2: true, rangelength: [ 2, 5 ] });
- jQuery.validator.autoCreateRanges = false;
- deepEqual( $("#v2-i7").rules(), { required: true, minlength: 2, customMethod: true });
-
- delete $.validator.methods.customMethod1;
- delete $.validator.messages.customMethod1;
- delete $.validator.methods.customMethod2;
- delete $.validator.messages.customMethod2;
-});
-
-test("rules(), dependency checks", function() {
- var v = $("#testForm1clean").validate({
- rules: {
- firstnamec: {
- min: {
- param: 5,
- depends: function(el) {
- return (/^a/).test($(el).val());
- }
- }
- },
- lastname: {
- max: {
- param: 12
- },
- email: {
- depends: function() { return true; }
- }
- }
- }
- }),
- rules = $("#firstnamec").rules();
-
- equal( 0, v.objectLength(rules) );
-
- $("#firstnamec").val("ab");
- deepEqual( $("#firstnamec").rules(), { min: 5 });
-
- deepEqual( $("#lastnamec").rules(), { max: 12, email: true });
-});
-
-test("rules(), add and remove", function() {
- $.validator.addMethod("customMethod1", function() {
- return false;
- }, "");
- $("#v2").validate();
- $("#v2-i5").removeClass("required").removeAttr("minlength maxlength");
- deepEqual( $("#v2-i5").rules(), { customMethod1: "123" });
-
- $("#v2-i5").addClass("required").attr({
- minlength: 2,
- maxlength: 5
- });
- deepEqual( $("#v2-i5").rules(), { required: true, minlength: 2, maxlength: 5, customMethod1: "123" });
-
- $("#v2-i5").addClass("email").attr({ min: 5 });
- deepEqual( $("#v2-i5").rules(), { required: true, email: true, minlength: 2, maxlength: 5, min: 5, customMethod1: "123" });
-
- $("#v2-i5").removeClass("required email").removeAttr("minlength maxlength customMethod1 min");
- deepEqual( $("#v2-i5").rules(), {});
-
- delete $.validator.methods.customMethod1;
- delete $.validator.messages.customMethod1;
-});
-
-test("rules(), add and remove static rules", function() {
-
- $("#testForm1clean").validate({
- rules: {
- firstnamec: "required date"
- }
- });
-
- deepEqual( $("#firstnamec").rules(), { required: true, date: true } );
-
- $("#firstnamec").rules("remove", "date");
- deepEqual( $("#firstnamec").rules(), { required: true } );
- $("#firstnamec").rules("add", "email");
- deepEqual( $("#firstnamec").rules(), { required: true, email: true } );
-
- $("#firstnamec").rules("remove", "required");
- deepEqual( $("#firstnamec").rules(), { email: true } );
-
- deepEqual( $("#firstnamec").rules("remove"), { email: true } );
- deepEqual( $("#firstnamec").rules(), { } );
-
- $("#firstnamec").rules("add", "required email");
- deepEqual( $("#firstnamec").rules(), { required: true, email: true } );
-
- deepEqual( $("#lastnamec").rules(), {} );
- $("#lastnamec").rules("add", "required");
- $("#lastnamec").rules("add", {
- minlength: 2
- });
- deepEqual( $("#lastnamec").rules(), { required: true, minlength: 2 } );
-
- var removedRules = $("#lastnamec").rules("remove", "required email");
- deepEqual( $("#lastnamec").rules(), { minlength: 2 } );
- $("#lastnamec").rules("add", removedRules);
- deepEqual( $("#lastnamec").rules(), { required: true, minlength: 2 } );
-});
-
-test("rules(), add messages", function() {
- $("#firstnamec").attr("title", null);
- var v = $("#testForm1clean").validate({
- rules: {
- firstnamec: "required"
- }
- });
- $("#testForm1clean").valid();
- $("#firstnamec").valid();
- deepEqual( v.settings.messages.firstname, undefined );
-
- $("#firstnamec").rules("add", {
- messages: {
- required: "required"
- }
- });
-
- $("#firstnamec").valid();
- deepEqual( v.errorList[0] && v.errorList[0].message, "required" );
-
- $("#firstnamec").val("test");
- $("#firstnamec").valid();
- equal(v.errorList.length, 0);
-});
-
-test( "rules(), rangelength attribute as array", function() {
- $("#testForm13").validate();
- deepEqual( $("#cars-select").rules(), {
- required: true,
- rangelength: [ 2, 3 ]
- });
-});
diff --git a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/test.js b/wqflask/wqflask/static/new/packages/ValidationPlugin/test/test.js
deleted file mode 100644
index 3cb08cae..00000000
--- a/wqflask/wqflask/static/new/packages/ValidationPlugin/test/test.js
+++ /dev/null
@@ -1,1853 +0,0 @@
-if ( window.sessionStorage ) {
- sessionStorage.clear();
-}
-jQuery.validator.defaults.debug = true;
-$.mockjaxSettings.log = $.noop;
-
-$.mockjax({
- url: "form.php?user=Peter&password=foobar",
- responseText: "Hi Peter, welcome back.",
- responseStatus: 200,
- responseTime: 1
-});
-
-$.mockjax({
- url: "users.php",
- data: {
- username: /Peter2?|asdf/
- },
- responseText: "false",
- responseStatus: 200,
- responseTime: 1
-});
-
-$.mockjax({
- url: "users2.php",
- data: {
- username: "asdf"
- },
- responseText: "\"asdf is already taken, please try something else\"",
- responseStatus: 200,
- responseTime: 1
-});
-
-$.mockjax({
- url: "echo.php",
- response: function( data ) {
- this.responseText = JSON.stringify( data.data );
- },
- responseTime: 100
-});
-
-// Asserts that there is a visible error with the given text for the specified element
-QUnit.assert.hasError = function( element, text, message ) {
- var errors = $( element ).closest( "form" ).validate().errorsFor( element[ 0 ] ),
- actual = ( errors.length === 1 && errors.is( ":visible" ) ) ? errors.text() : "";
- QUnit.push( actual, actual, text, message );
-};
-
-// Asserts that there is no visible error for the given element
-QUnit.assert.noErrorFor = function( element, message ) {
- var errors = $( element ).closest( "form" ).validate().errorsFor( element[ 0 ] ),
- hidden = ( errors.length === 0 ) || (errors.is( ":hidden" ) && ( errors.text() === "" ) );
- QUnit.push( hidden, hidden, true, message );
-};
-
-module( "validator" );
-
-test( "Constructor", function() {
- var v1 = $( "#testForm1" ).validate(),
- v2 = $( "#testForm1" ).validate();
-
- equal( v1, v2, "Calling validate() multiple times must return the same validator instance" );
- equal( v1.elements().length, 3, "validator elements" );
-});
-
-test( "validate() without elements, with non-form elements", 0, function() {
- $( "#doesntexist" ).validate();
-});
-
-test( "valid() plugin method", function() {
- var form = $( "#userForm" ),
- input = $( "#username" );
-
- form.validate();
- ok ( !form.valid(), "Form isn't valid yet" );
- ok ( !input.valid(), "Input isn't valid either" );
-
- input.val( "Hello world" );
- ok ( form.valid(), "Form is now valid" );
- ok ( input.valid(), "Input is valid, too" );
-});
-
-test( "valid() plugin method, multiple inputs", function() {
- var form = $( "#testForm1" ),
- validator = form.validate(),
- inputs = form.find( "input" );
-
- ok( !inputs.valid(), "all invalid" );
- inputs.not( ":first" ).val( "ok" );
- equal( validator.numberOfInvalids(), 2 );
- strictEqual( inputs.valid(), false, "just one invalid" );
- inputs.val( "ok" );
- strictEqual( inputs.valid(), true, "all valid" );
-});
-
-test( "valid() plugin method, special handling for checkable groups", function() {
- // rule is defined on first checkbox, must apply to others, too
- var checkable = $( "#checkable2" );
- ok( !checkable.valid(), "must be invalid, not checked yet" );
- checkable.attr( "checked", true );
- ok( checkable.valid(), "valid, is now checked" );
- checkable.attr( "checked", false );
- ok( !checkable.valid(), "invalid again" );
- $( "#checkable3" ).attr( "checked", true );
- ok( checkable.valid(), "valid, third box is checked" );
-});
-
-test( "valid() ???", function() {
- expect( 4 );
- var errorList = [
- {
- name: "meal",
- message: "foo",
- element: $( "#meal" )[ 0 ]
- }
- ],
- v = $( "#testForm3" ).validate();
-
- ok( v.valid(), "No errors, must be valid" );
- v.errorList = errorList;
- ok( !v.valid(), "One error, must be invalid" );
- QUnit.reset();
- v = $( "#testForm3" ).validate({
- submitHandler: function() {
- ok( false, "Submit handler was called" );
- }
- });
- ok( v.valid(), "No errors, must be valid and returning true, even with the submit handler" );
- v.errorList = errorList;
- ok( !v.valid(), "One error, must be invalid, no call to submit handler" );
-});
-
-test( "valid(), ignores ignored elements", function() {
- $( "#testForm1clean" ).validate({
- ignore: "#firstnamec",
- rules: {
- firstnamec: "required"
- }
- });
- ok( $( "#firstnamec" ).valid() );
-});
-
-test( "addMethod", function() {
- expect( 3 );
- $.validator.addMethod( "hi", function( value ) {
- return value === "hi";
- }, "hi me too" );
- var method = $.validator.methods.hi,
- e = $( "#text1" )[ 0 ];
- ok( !method( e.value, e ), "Invalid" );
- e.value = "hi";
- ok( method( e.value, e ), "Invalid" );
- ok( jQuery.validator.messages.hi === "hi me too", "Check custom message" );
-});
-
-test( "addMethod2", function() {
- expect( 4 );
- $.validator.addMethod( "complicatedPassword", function( value, element ) {
- return this.optional( element ) || /\D/.test( value ) && /\d/.test( value );
- }, "Your password must contain at least one number and one letter" );
- var v = jQuery( "#form" ).validate({
- rules: {
- action: { complicatedPassword: true }
- }
- }),
- e = $( "#text1" )[ 0 ];
-
- e.value = "";
- strictEqual( v.element( e ), true, "Rule is optional, valid" );
- equal( 0, v.size() );
- e.value = "ko";
- ok( !v.element( e ), "Invalid, doesn't contain one of the required characters" );
- e.value = "ko1";
- ok( v.element( e ) );
-});
-
-test( "form(): simple", function() {
- expect( 2 );
- var form = $( "#testForm1" )[ 0 ],
- v = $( form ).validate();
-
- ok( !v.form(), "Invalid form" );
- $( "#firstname" ).val( "hi" );
- $( "#lastname" ).val( "hi" );
- ok( v.form(), "Valid form" );
-});
-
-test( "form(): checkboxes: min/required", function() {
- expect( 3 );
- var form = $( "#testForm6" )[ 0 ],
- v = $( form ).validate();
-
- ok( !v.form(), "Invalid form" );
- $( "#form6check1" ).attr( "checked", true );
- ok( !v.form(), "Invalid form" );
- $( "#form6check2" ).attr( "checked", true );
- ok( v.form(), "Valid form" );
-});
-
-test( "form(): radio buttons: required", function() {
- expect( 6 );
- var form = $( "#testForm10" )[ 0 ],
- v = $( form ).validate({
- rules: {
- testForm10Radio: "required"
- }
- });
-
- ok(!v.form(), "Invalid Form" );
- equal($( "#testForm10Radio1" ).attr( "class" ), "error" );
- equal($( "#testForm10Radio2" ).attr( "class" ), "error" );
-
- $( "#testForm10Radio2" ).attr( "checked", true );
- ok( v.form(), "Valid form" );
-
- equal($( "#testForm10Radio1" ).attr( "class" ), "valid" );
- equal($( "#testForm10Radio2" ).attr( "class" ), "valid" );
-});
-
-test( "form(): selects: min/required", function() {
- expect( 3 );
- var form = $( "#testForm7" )[ 0 ],
- v = $( form ).validate();
-
- ok( !v.form(), "Invalid form" );
- $( "#optionxa" ).attr( "selected", true );
- ok( !v.form(), "Invalid form" );
- $( "#optionxb" ).attr( "selected", true );
- ok( v.form(), "Valid form" );
-});
-
-test( "form(): with equalTo", function() {
- expect( 2 );
- var form = $( "#testForm5" )[ 0 ],
- v = $( form ).validate();
-
- ok( !v.form(), "Invalid form" );
- $( "#x1, #x2" ).val( "hi" );
- ok( v.form(), "Valid form" );
-});
-
-test( "form(): with equalTo and onfocusout=false", function() {
- expect( 4 );
- var form = $( "#testForm5" )[ 0 ],
- v = $( form ).validate({
- onfocusout: false,
- showErrors: function() {
- ok( true, "showErrors should only be called twice" );
- this.defaultShowErrors();
- }
- });
-
- $( "#x1, #x2" ).val( "hi" );
- ok( v.form(), "Valid form" );
- $( "#x2" ).val( "not equal" ).blur();
- ok( !v.form(), "Invalid form" );
-});
-
-test( "check(): simple", function() {
- expect( 3 );
- var element = $( "#firstname" )[ 0 ],
- v = $( "#testForm1" ).validate();
-
- ok( v.size() === 0, "No errors yet" );
- v.check( element );
- ok( v.size() === 1, "error exists" );
- v.errorList = [];
- $( "#firstname" ).val( "hi" );
- v.check( element );
- ok( v.size() === 0, "No more errors" );
-});
-
-test( "hide(): input", function() {
- expect( 3 );
- var errorLabel = $( "#errorFirstname" ),
- element = $( "#firstname" )[ 0 ],
- v;
-
- element.value = "bla";
- v = $( "#testForm1" ).validate();
- errorLabel.show();
-
- ok( errorLabel.is( ":visible" ), "Error label visible before validation" );
- ok( v.element( element ) );
- ok( errorLabel.is( ":hidden" ), "Error label not visible after validation" );
-});
-
-test( "hide(): radio", function() {
- expect( 2 );
- var errorLabel = $( "#agreeLabel" ),
- element = $( "#agb" )[ 0 ],
- v;
-
- element.checked = true;
- v = $( "#testForm2" ).validate({ errorClass: "xerror" });
- errorLabel.show();
-
- ok( errorLabel.is( ":visible" ), "Error label visible after validation" );
- v.element( element );
- ok( errorLabel.is( ":hidden" ), "Error label not visible after hiding it" );
-});
-
-test( "hide(): errorWrapper", function() {
- expect( 2 );
- var errorLabel = $( "#errorWrapper" ),
- element = $( "#meal" )[ 0 ],
- v;
-
- element.selectedIndex = 1;
- errorLabel.show();
-
- ok( errorLabel.is( ":visible" ), "Error label visible after validation" );
- v = $( "#testForm3" ).validate({ wrapper: "li", errorLabelContainer: $( "#errorContainer" ) });
- v.element( element );
- ok( errorLabel.is( ":hidden" ), "Error label not visible after hiding it" );
-});
-
-test( "hide(): container", function() {
- expect( 4 );
- var errorLabel = $( "#errorContainer" ),
- v = $( "#testForm3" ).validate({ errorWrapper: "li", errorContainer: $( "#errorContainer" ) });
-
- v.form();
- ok( errorLabel.is( ":visible" ), "Error label visible after validation" );
- $( "#meal" )[ 0 ].selectedIndex = 1;
- v.form();
- ok( errorLabel.is( ":hidden" ), "Error label not visible after hiding it" );
- $( "#meal" )[ 0 ].selectedIndex = -1;
- v.element( "#meal" );
- ok( errorLabel.is( ":visible" ), "Error label visible after validation" );
- $( "#meal" )[ 0 ].selectedIndex = 1;
- v.element( "#meal" );
- ok( errorLabel.is( ":hidden" ), "Error label not visible after hiding it" );
-});
-
-test( "submitHandler keeps submitting button", function() {
- var button, event;
-
- $( "#userForm" ).validate({
- debug: true,
- submitHandler: function( form ) {
- // dunno how to test this better; this tests the implementation that uses a hidden input
- var hidden = $( form ).find( "input:hidden" )[ 0 ];
- deepEqual( hidden.value, button.value );
- deepEqual( hidden.name, button.name );
- }
- });
- $( "#username" ).val( "bla" );
- button = $( "#userForm :submit" )[ 0 ];
- event = $.Event( "click" );
- event.preventDefault();
- $.event.trigger( event, null, button );
- $( "#userForm" ).submit();
-});
-
-asyncTest("validation triggered on radio/checkbox when using keyboard", function() {
- expect( 1 );
- var input, i, events, triggeredEvents = 0;
-
- $("#form").validate({
- onfocusin: function() {
- triggeredEvents++;
- },
- onfocusout: function() {
- triggeredEvents++;
- },
- onkeyup: function() {
- triggeredEvents++;
- }
- });
-
- events = [
- $.Event("focusin"),
- $.Event("focusout"),
- $.Event("keyup")
- ];
-
- input = $("#form :radio:first");
- for (i = 0; i < events.length; i++) {
- input.trigger(events[i]);
- }
-
- input = $("#form :checkbox:first");
- for (i = 0; i < events.length; i++) {
- input.trigger(events[i]);
- }
-
- setTimeout(function() {
- // assert all event handlers fired
- equal(6, triggeredEvents);
- start();
- });
-});
-
-asyncTest("validation triggered on radio/checkbox when using mouseclick", function() {
- expect( 1 );
- var input, i, events, triggeredEvents = 0;
-
- $("#form").validate({
- onclick: function() {
- triggeredEvents++;
- }
- });
-
- events = [
- $.Event("click")
- ];
-
- input = $("#form :radio:first");
- for (i = 0; i < events.length; i++) {
- input.trigger(events[i]);
- }
-
- input = $("#form :checkbox:first");
- for (i = 0; i < events.length; i++) {
- input.trigger(events[i]);
- }
-
- setTimeout(function() {
- // assert all event handlers fired
- equal(2, triggeredEvents);
- start();
- });
-});
-
-test( "showErrors()", function() {
- expect( 4 );
- var errorLabel = $( "#errorFirstname" ).hide(),
- v = $( "#testForm1" ).validate();
-
- ok( errorLabel.is( ":hidden" ) );
- equal( 0, $( "#lastname" ).next( ".error:not(input)" ).length );
- v.showErrors({ "firstname": "required", "lastname": "bla" });
- equal( true, errorLabel.is( ":visible" ) );
- equal( true, $( "#lastname" ).next( ".error:not(input)" ).is( ":visible" ) );
-});
-
-test( "showErrors(), allow empty string and null as default message", function() {
- $( "#userForm" ).validate({
- rules: {
- username: {
- required: true,
- minlength: 3
- }
- },
- messages: {
- username: {
- required: "",
- minlength: "too short"
- }
- }
- });
- ok( !$( "#username" ).valid() );
- equal( "", $( "#username" ).next( ".error:not(input)" ).text() );
-
- $( "#username" ).val( "ab" );
- ok( !$( "#username" ).valid() );
- equal( "too short", $( "#username" ).next( ".error:not(input)" ).text() );
-
- $( "#username" ).val( "abc" );
- ok( $( "#username" ).valid() );
- ok( $( "#username" ).next( ".error:not(input)" ).is( ":hidden" ) );
-});
-
-test( "showErrors() - external messages", function() {
- expect( 4 );
- var methods = $.extend( {}, $.validator.methods ),
- messages = $.extend( {}, $.validator.messages ),
- form, v;
-
- $.validator.addMethod( "foo", function() { return false; });
- $.validator.addMethod( "bar", function() { return false; });
- equal( 0, $( "#testForm4 #f1" ).next( ".error:not(input)" ).length );
- equal( 0, $( "#testForm4 #f2" ).next( ".error:not(input)" ).length );
-
- form = $( "#testForm4" )[ 0 ];
- v = $( form ).validate({
- messages: {
- f1: "Please!",
- f2: "Wohoo!"
- }
- });
- v.form();
- equal( $( "#testForm4 #f1" ).next( ".error:not(input)" ).text(), "Please!" );
- equal( $( "#testForm4 #f2" ).next( ".error:not(input)" ).text(), "Wohoo!" );
-
- $.validator.methods = methods;
- $.validator.messages = messages;
-});
-
-test( "showErrors() - custom handler", function() {
- expect( 5 );
- var v = $( "#testForm1" ).validate({
- showErrors: function( errorMap, errorList ) {
- equal( v, this );
- equal( v.errorList, errorList );
- equal( v.errorMap, errorMap );
- equal( "buga", errorMap.firstname );
- equal( "buga", errorMap.lastname );
- }
- });
- v.form();
-});
-
-test( "option: (un)highlight, default", function() {
- $( "#testForm1" ).validate();
- var e = $( "#firstname" );
- ok( !e.hasClass( "error" ) );
- ok( !e.hasClass( "valid" ) );
- e.valid();
- ok( e.hasClass( "error" ) );
- ok( !e.hasClass( "valid" ) );
- e.val( "hithere" ).valid();
- ok( !e.hasClass( "error" ) );
- ok( e.hasClass( "valid" ) );
-});
-
-test( "option: (un)highlight, nothing", function() {
- expect( 3 );
- $( "#testForm1" ).validate({
- highlight: false,
- unhighlight: false
- });
- var e = $( "#firstname" );
- ok( !e.hasClass( "error" ) );
- e.valid();
- ok( !e.hasClass( "error" ) );
- e.valid();
- ok( !e.hasClass( "error" ) );
-});
-
-test( "option: (un)highlight, custom", function() {
- expect( 5 );
- $( "#testForm1clean" ).validate({
- highlight: function( element, errorClass ) {
- equal( "invalid", errorClass );
- $( element ).hide();
- },
- unhighlight: function( element, errorClass ) {
- equal( "invalid", errorClass );
- $( element ).show();
- },
- ignore: "",
- errorClass: "invalid",
- rules: {
- firstnamec: "required"
- }
- });
- var e = $( "#firstnamec" );
- ok( e.is( ":visible" ) );
- e.valid();
- ok( !e.is( ":visible" ) );
- e.val( "hithere" ).valid();
- ok( e.is( ":visible" ) );
-});
-
-test( "option: (un)highlight, custom2", function() {
- expect( 6 );
- var e, l;
- $( "#testForm1" ).validate({
- highlight: function( element, errorClass ) {
- $( element ).addClass( errorClass );
- $( element ).next( ".error:not(input)" ).addClass( errorClass );
- },
- unhighlight: function( element, errorClass ) {
- $( element ).removeClass( errorClass );
- $( element ).next( ".error:not(input)" ).removeClass( errorClass );
- },
- errorClass: "invalid"
- });
-
- e = $( "#firstname" );
- l = $( "#errorFirstname" );
-
- ok( !e.is( ".invalid" ) );
- ok( !l.is( ".invalid" ) );
- e.valid();
- ok( e.is( ".invalid" ) );
- ok( l.is( ".invalid" ) );
- e.val( "hithere" ).valid();
- ok( !e.is( ".invalid" ) );
- ok( !l.is( ".invalid" ) );
-});
-
-test( "option: focusCleanup default false", function() {
- var form = $( "#userForm" );
- form.validate();
- form.valid();
- ok( form.find( "#username" ).next( ".error:not(input)" ).is( ":visible" ));
- $( "#username" ).focus();
- ok( form.find( "#username" ).next( ".error:not(input)" ).is( ":visible" ));
-});
-
-test( "option: focusCleanup true", function() {
- var form = $( "#userForm" );
- form.validate({
- focusCleanup: true
- });
- form.valid();
- ok( form.find( "#username" ).next( ".error:not(input)" ).is( ":visible" ) );
- $( "#username" ).focus().trigger( "focusin" );
- ok( !form.find( "#username" ).next( ".error:not(input)" ).is( ":visible" ) );
-});
-
-test( "option: focusCleanup with wrapper", function() {
- var form = $( "#userForm" );
- form.validate({
- focusCleanup: true,
- wrapper: "span"
- });
- form.valid();
- ok( form.is( ":has(span:visible:has(.error#username-error))" ) );
- $( "#username" ).focus().trigger( "focusin" );
- ok( !form.is( ":has(span:visible:has(.error#username-error))" ) );
-});
-
-test( "option: errorClass with multiple classes", function() {
- var form = $( "#userForm" );
- form.validate({
- focusCleanup: true,
- wrapper: "span",
- errorClass: "error error1 error2"
- });
- form.valid();
- ok( form.is( ":has(span:visible:has(.error#username-error))" ) );
- ok( form.is( ":has(span:visible:has(.error1#username-error))" ) );
- ok( form.is( ":has(span:visible:has(.error2#username-error))" ) );
- $( "#username" ).focus().trigger( "focusin" );
- ok( !form.is( ":has(span:visible:has(.error#username-error))" ) );
- ok( !form.is( ":has(span:visible:has(.error1#username-error))" ) );
- ok( !form.is( ":has(span:visible:has(.error2#username-error))" ) );
-});
-
-test( "defaultMessage(), empty title is ignored", function() {
- var v = $( "#userForm" ).validate();
- equal( "This field is required.", v.defaultMessage($( "#username" )[ 0 ], "required" ) );
-});
-
-test( "formatAndAdd", function() {
- expect( 4 );
- var v = $( "#form" ).validate(),
- fakeElement = { form: $( "#form" )[ 0 ], name: "bar" };
-
- v.formatAndAdd( fakeElement, { method: "maxlength", parameters: 2 });
- equal( "Please enter no more than 2 characters.", v.errorList[ 0 ].message );
- equal( "bar", v.errorList[ 0 ].element.name );
-
- v.formatAndAdd( fakeElement, { method: "range", parameters: [ 2, 4 ] });
- equal( "Please enter a value between 2 and 4.", v.errorList[ 1 ].message );
-
- v.formatAndAdd( fakeElement, { method: "range", parameters: [ 0, 4 ] });
- equal( "Please enter a value between 0 and 4.", v.errorList[ 2 ].message );
-});
-
-test( "formatAndAdd2", function() {
- expect( 3 );
- var v = $( "#form" ).validate(),
- fakeElement = { form: $( "#form" )[ 0 ], name: "bar" };
-
- jQuery.validator.messages.test1 = function( param, element ) {
- equal( v, this );
- equal( 0, param );
- return "element " + element.name + " is not valid";
- };
- v.formatAndAdd( fakeElement, { method: "test1", parameters: 0 });
- equal( "element bar is not valid", v.errorList[ 0 ].message );
-});
-
-test( "formatAndAdd, auto detect substitution string", function() {
- var v = $( "#testForm1clean" ).validate({
- rules: {
- firstnamec: {
- required: true,
- rangelength: [ 5, 10 ]
- }
- },
- messages: {
- firstnamec: {
- rangelength: "at least ${0}, up to {1}"
- }
- }
- });
- $( "#firstnamec" ).val( "abc" );
- v.form();
- equal( "at least 5, up to 10", v.errorList[ 0 ].message );
-});
-
-asyncTest( "option invalidHandler", function() {
- expect( 1 );
- $( "#testForm1clean" ).validate({
- invalidHandler: function() {
- ok( true, "invalid-form event triggered called" );
- start();
- }
- });
- $( "#usernamec" ).val( "asdf" ).rules( "add", { required: true, minlength: 5 });
- $( "#testForm1clean" ).submit();
-});
-
-test( "findByName()", function() {
- deepEqual(
- new $.validator({}, document.getElementById( "form" ))
- .findByName( document.getElementById( "radio1" ).name )
- .get(),
- $( "#form" ).find( "[name=radio1]" ).get()
- );
-});
-
-test( "focusInvalid()", function() {
- // TODO when using custom focusin, this is triggered just once
- // TODO when using 1.4 focusin, triggered twice; fix once not testing against 1.3 anymore
- // expect( 1 );
- var inputs = $( "#testForm1 input" ).focus(function() {
- equal( inputs[ 0 ], this, "focused first element" );
- }),
- v = $( "#testForm1" ).validate();
-
- v.form();
- v.focusInvalid();
-});
-
-test( "focusInvalid() after validate a custom set of inputs", function() {
- var form = $( "#testForm1" ),
- validator = form.validate(),
- // It's important the order of Valid, Invalid, Valid so last active element it's a valid element before focus
- inputs = $( "#firstname, #lastname, #something" );
-
- $( "#firstname" ).val( "ok" );
-
- ok( !inputs.valid(), "just one invalid");
-
- validator.focusInvalid();
-
- equal( form[ 0 ].ownerDocument.activeElement, $( "#lastname" )[0], "focused first element" );
-});
-
-test( "findLastActive()", function() {
- expect( 3 );
- var v = $( "#testForm1" ).validate(),
- lastActive;
-
- ok( !v.findLastActive() );
- v.form();
- v.focusInvalid();
- equal( v.findLastActive(), $( "#firstname" )[ 0 ] );
- lastActive = $( "#lastname" ).trigger( "focus" ).trigger( "focusin" )[ 0 ];
-
- equal( v.lastActive, lastActive );
-});
-
-test("elementValue() finds radios/checkboxes only within the current form", function() {
- expect(1);
- var v = $("#userForm").validate(), foreignRadio = $("#radio2")[0];
-
- ok( !v.elementValue(foreignRadio) );
-});
-
-test( "validating multiple checkboxes with 'required'", function() {
- expect( 3 );
- var checkboxes = $( "#form input[name=check3]" ).prop( "checked", false ),
- v;
- equal( checkboxes.length, 5 );
-
- v = $( "#form" ).validate({
- rules: {
- check3: "required"
- }
- });
- v.form();
-
- equal( v.size(), 1 );
- checkboxes.filter( ":last" ).prop( "checked", true );
- v.form();
- equal( v.size(), 0 );
-});
-
-test( "dynamic form", function() {
- var counter = 0,
- v;
- function add() {
- $( "<input data-rule-required='true' name='list" + counter++ + "' />" ).appendTo( "#testForm2" );
- }
- function errors( expected, message ) {
- equal( expected, v.size(), message );
- }
-
- v = $( "#testForm2" ).validate();
- v.form();
- errors( 1 );
- add();
- v.form();
- errors( 2 );
- add();
- v.form();
- errors( 3 );
- $( "#testForm2 input[name=list1]" ).remove();
- v.form();
- errors( 2 );
- add();
- v.form();
- errors( 3 );
- $( "#testForm2 input[name^=list]" ).remove();
- v.form();
- errors( 1 );
- $( "#agb" ).attr( "disabled", true );
- v.form();
- errors( 0 );
- $( "#agb" ).attr( "disabled", false );
- v.form();
- errors( 1 );
-});
-
-test( "idOrName()", function() {
- expect( 4 );
- var v = $( "#testForm1" ).validate();
- equal( "form8input", v.idOrName( $( "#form8input" )[ 0 ] ) );
- equal( "check", v.idOrName( $( "#form6check1" )[ 0 ] ) );
- equal( "agree", v.idOrName( $( "#agb" )[ 0 ] ) );
- equal( "button", v.idOrName( $( "#form :button" )[ 0 ] ) );
-});
-
-test( "resetForm()", function() {
- function errors( expected, message ) {
- equal( expected, v.size(), message );
- }
- var v = $( "#testForm1" ).validate();
- v.form();
- errors( 2 );
- ok( $( "#firstname" ).hasClass( "error" ) );
- $( "#firstname" ).val( "hiy" );
- v.resetForm();
- errors( 0 );
- ok( !$( "#firstname" ).hasClass( "error" ) );
- equal( "", $( "#firstname" ).val(), "form plugin is included, therefor resetForm must also reset inputs, not only errors" );
-});
-
-test( "resetForm() clean styles when custom highlight function is used", function() {
- var form = $( "#testForm1clean" ),
- e = $( "#firstnamec" );
- form.validate({
- highlight: function( element ) {
- $( element ).hide();
- },
- unhighlight: function( element ) {
- $( element ).show();
- },
- ignore: "",
- errorClass: "invalid",
- rules: {
- firstnamec: "required"
- }
- });
- e.valid();
- ok( !e.is( ":visible" ) );
- form.validate().resetForm();
- ok( e.is( ":visible" ) );
-});
-
-test( "message from title", function() {
- var v = $( "#withTitle" ).validate();
- v.checkForm();
- equal( v.errorList[ 0 ].message, "fromtitle", "title not used" );
-});
-
-test( "ignoreTitle", function() {
- var v = $( "#withTitle" ).validate({ ignoreTitle: true });
- v.checkForm();
- equal( v.errorList[ 0 ].message, $.validator.messages.required, "title used when it should have been ignored" );
-});
-
-asyncTest( "ajaxSubmit", function() {
- expect( 1 );
- $( "#user" ).val( "Peter" );
- $( "#password" ).val( "foobar" );
- jQuery( "#signupForm" ).validate({
- submitHandler: function( form ) {
- jQuery( form ).ajaxSubmit({
- success: function( response ) {
- equal( "Hi Peter, welcome back.", response );
- start();
- }
- });
- }
- });
- jQuery( "#signupForm" ).triggerHandler( "submit" );
-});
-
-test( "validating groups settings parameter", function() {
- var form = $( "<form>" ),
- validate = form.validate({
- groups: {
- arrayGroup: [ "input one", "input-two", "input three" ],
- stringGroup: "input-four input-five input-six"
- }
- });
-
- equal( validate.groups[ "input one" ], "arrayGroup" );
- equal( validate.groups[ "input-two" ], "arrayGroup" );
- equal( validate.groups[ "input three" ], "arrayGroup" );
- equal( validate.groups[ "input-four" ], "stringGroup" );
- equal( validate.groups[ "input-five" ], "stringGroup" );
- equal( validate.groups[ "input-six" ], "stringGroup" );
-});
-
-test( "bypassing validation on form submission", function() {
- var form = $( "#bypassValidation" ),
- normalSubmission = $( "form#bypassValidation :input[id=normalSubmit]" ),
- bypassSubmitWithCancel = $( "form#bypassValidation :input[id=bypassSubmitWithCancel]" ),
- bypassSubmitWithNoValidate1 = $( "form#bypassValidation :input[id=bypassSubmitWithNoValidate1]" ),
- bypassSubmitWithNoValidate2 = $( "form#bypassValidation :input[id=bypassSubmitWithNoValidate2]" ),
- $v = form.validate({
- debug: true
- });
-
- bypassSubmitWithCancel.click();
- equal($v.numberOfInvalids(), 0, "Validation was bypassed using CSS 'cancel' class." );
- $v.resetForm();
-
- bypassSubmitWithNoValidate1.click();
- equal($v.numberOfInvalids(), 0, "Validation was bypassed using blank 'formnovalidate' attribute." );
- $v.resetForm();
-
- bypassSubmitWithNoValidate2.click();
- equal($v.numberOfInvalids(), 0, "Validation was bypassed using 'formnovalidate=\"formnovalidate\"' attribute." );
- $v.resetForm();
-
- normalSubmission.click();
- equal($v.numberOfInvalids(), 1, "Validation failed correctly" );
-});
-
-module( "misc" );
-
-test( "success option", function() {
- expect( 7 );
- equal( "", $( "#firstname" ).val() );
- var v = $( "#testForm1" ).validate({
- success: "valid"
- }),
- label = $( "#testForm1 .error:not(input)" );
-
- ok( label.is( ".error" ) );
- ok( !label.is( ".valid" ) );
- v.form();
- ok( label.is( ".error" ) );
- ok( !label.is( ".valid" ) );
- $( "#firstname" ).val( "hi" );
- v.form();
- ok( label.is( ".error" ) );
- ok( label.is( ".valid" ) );
-});
-
-test( "success option2", function() {
- expect( 5 );
- equal( "", $( "#firstname" ).val() );
- var v = $( "#testForm1" ).validate({
- success: "valid"
- }),
- label = $( "#testForm1 .error:not(input)" );
-
- ok( label.is( ".error" ) );
- ok( !label.is( ".valid" ) );
- $( "#firstname" ).val( "hi" );
- v.form();
- ok( label.is( ".error" ) );
- ok( label.is( ".valid" ) );
-});
-
-test( "success option3", function() {
- expect( 5 );
- equal( "", $( "#firstname" ).val() );
- $( "#errorFirstname" ).remove();
- var v = $( "#testForm1" ).validate({
- success: "valid"
- }),
- labels;
-
- equal( 0, $( "#testForm1 .error:not(input)" ).length );
- $( "#firstname" ).val( "hi" );
- v.form();
- labels = $( "#testForm1 .error:not(input)" );
-
- equal( 3, labels.length );
- ok( labels.eq( 0 ).is( ".valid" ) );
- ok( !labels.eq( 1 ).is( ".valid" ) );
-});
-
-test( "successlist", function() {
- var v = $( "#form" ).validate({ success: "xyz" });
- v.form();
- equal( 0, v.successList.length );
-});
-
-test( "success isn't called for optional elements with no other rules", function() {
- expect( 4 );
- equal( "", $( "#firstname" ).removeAttr( "data-rule-required" ).removeAttr( "data-rule-minlength" ).val() );
- $( "#something" ).remove();
- $( "#lastname" ).remove();
- $( "#errorFirstname" ).remove();
- var v = $( "#testForm1" ).validate({
- success: function() {
- ok( false, "don't call success for optional elements!" );
- },
- rules: {
- firstname: { required: false }
- }
- });
- equal( 0, $( "#testForm1 .error:not(input)" ).length );
- v.form();
- equal( 0, $( "#testForm1 .error:not(input)" ).length );
- $( "#firstname" ).valid();
- equal( 0, $( "#testForm1 .error:not(input)" ).length );
-});
-
-test( "success is called for optional elements with other rules", function() {
- expect( 1 );
-
- $.validator.addMethod( "custom1", function() {
- return true;
- }, "" );
-
- $( "#testForm1clean" ).validate({
- success: function() {
- ok( true, "success called correctly!" );
- },
- rules: {
- firstnamec: {
- required: false,
- custom1: true
- }
- }
- });
-
- $( "#firstnamec" ).valid();
-
- delete $.validator.methods.custom1;
-});
-
-test( "success callback with element", function() {
- expect( 1 );
- var v = $( "#userForm" ).validate({
- success: function( label, element ) {
- equal( element, $( "#username" ).get( 0 ) );
- }
- });
- $( "#username" ).val( "hi" );
- v.form();
-});
-
-test( "all rules are evaluated even if one returns a dependency-mistmatch", function() {
- expect( 6 );
- equal( "", $( "#firstname" ).removeAttr( "data-rule-required" ).removeAttr( "data-rule-minlength" ).val() );
- $( "#lastname" ).remove();
- $( "#errorFirstname" ).remove();
- $.validator.addMethod( "custom1", function() {
- ok( true, "custom method must be evaluated" );
- return true;
- }, "" );
- var v = $( "#testForm1" ).validate({
- rules: {
- firstname: {
- email: true,
- custom1: true
- }
- }
- });
- equal( 0, $( "#testForm1 .error:not(input)" ).length );
- v.form();
- equal( 0, $( "#testForm1 .error:not(input)" ).length );
- $( "#firstname" ).valid();
- equal( 0, $( "#testForm1 .error:not(input)" ).length );
-
- delete $.validator.methods.custom1;
- delete $.validator.messages.custom1;
-});
-
-test( "messages", function() {
- var m = jQuery.validator.messages;
- equal( "Please enter no more than 0 characters.", m.maxlength( 0 ) );
- equal( "Please enter at least 1 characters.", m.minlength( 1 ) );
- equal( "Please enter a value between 1 and 2 characters long.", m.rangelength( [ 1, 2 ] ) );
- equal( "Please enter a value less than or equal to 1.", m.max( 1 ) );
- equal( "Please enter a value greater than or equal to 0.", m.min( 0 ) );
- equal( "Please enter a value between 1 and 2.", m.range( [ 1, 2 ] ) );
-});
-
-test( "jQuery.validator.format", function() {
- equal(
- "Please enter a value between 0 and 1.",
- jQuery.validator.format( "Please enter a value between {0} and {1}.", 0, 1 )
- );
- equal(
- "0 is too fast! Enter a value smaller then 0 and at least -15",
- jQuery.validator.format( "{0} is too fast! Enter a value smaller then {0} and at least {1}", 0, -15 )
- );
- var template = jQuery.validator.format( "{0} is too fast! Enter a value smaller then {0} and at least {1}" );
- equal( "0 is too fast! Enter a value smaller then 0 and at least -15", template( 0, -15 ) );
- template = jQuery.validator.format( "Please enter a value between {0} and {1}." );
- equal( "Please enter a value between 1 and 2.", template( [ 1, 2 ] ) );
- equal( $.validator.format( "{0}", "$0" ), "$0" );
-});
-
-test( "option: ignore", function() {
- var v = $( "#testForm1" ).validate({
- ignore: "[name=lastname]"
- });
- v.form();
- equal( 1, v.size() );
-});
-
-test( "option: subformRequired", function() {
- jQuery.validator.addMethod( "billingRequired", function( value, element ) {
- if ($( "#bill_to_co" ).is( ":checked" )) {
- return $( element ).parents( "#subform" ).length;
- }
- return !this.optional( element );
- }, "" );
- var v = $( "#subformRequired" ).validate();
- v.form();
- equal( 1, v.size() );
- $( "#bill_to_co" ).attr( "checked", false );
- v.form();
- equal( 2, v.size() );
-
- delete $.validator.methods.billingRequired;
- delete $.validator.messages.billingRequired;
-});
-
-module( "expressions" );
-
-test( "expression: :blank", function() {
- var e = $( "#lastname" )[ 0 ];
- equal( 1, $( e ).filter( ":blank" ).length );
- e.value = " ";
- equal( 1, $( e ).filter( ":blank" ).length );
- e.value = " ";
- equal( 1, $( e ).filter( ":blank" ).length );
- e.value = " a ";
- equal( 0, $( e ).filter( ":blank" ).length );
-});
-
-test( "expression: :filled", function() {
- var e = $( "#lastname" )[ 0 ];
- equal( 0, $( e ).filter( ":filled" ).length );
- e.value = " ";
- equal( 0, $( e ).filter( ":filled" ).length );
- e.value = " ";
- equal( 0, $( e ).filter( ":filled" ).length );
- e.value = " a ";
- equal( 1, $( e ).filter( ":filled" ).length );
-});
-
-test( "expression: :unchecked", function() {
- var e = $( "#check2" )[ 0 ];
- equal( 1, $( e ).filter( ":unchecked" ).length );
- e.checked = true;
- equal( 0, $( e ).filter( ":unchecked" ).length );
- e.checked = false;
- equal( 1, $( e ).filter( ":unchecked" ).length );
-});
-
-module( "events" );
-
-test( "validate on blur", function() {
- function errors( expected, message ) {
- equal( v.size(), expected, message );
- }
- function labels( expected ) {
- equal( v.errors().filter( ":visible" ).length, expected );
- }
- function blur( target ) {
- target.trigger( "blur" ).trigger( "focusout" );
- }
- $( "#errorFirstname" ).hide();
- var e = $( "#firstname" ),
- v = $( "#testForm1" ).validate();
-
- $( "#something" ).val( "" );
- blur( e );
- errors( 0, "No value yet, required is skipped on blur" );
- labels( 0 );
- e.val( "h" );
- blur( e );
- errors( 1, "Required was ignored, but as something was entered, check other rules, minlength isn't met" );
- labels( 1 );
- e.val( "hh" );
- blur( e );
- errors( 0, "All is fine" );
- labels( 0 );
- e.val( "" );
- v.form();
- errors( 3, "Submit checks all rules, both fields invalid" );
- labels( 3 );
- blur( e );
- errors( 1, "Blurring the field results in emptying the error list first, then checking the invalid field: its still invalid, don't remove the error" );
- labels( 3 );
- e.val( "h" );
- blur( e );
- errors( 1, "Entering a single character fulfills required, but not minlength: 2, still invalid" );
- labels( 3 );
- e.val( "hh" );
- blur( e );
- errors( 0, "Both required and minlength are met, no errors left" );
- labels( 2 );
-});
-
-test( "validate on keyup", function() {
- function errors( expected, message ) {
- equal( expected, v.size(), message );
- }
- function keyup( target ) {
- target.trigger( "keyup" );
- }
- var e = $( "#firstname" ),
- v = $( "#testForm1" ).validate();
-
- keyup( e );
- errors( 0, "No value, no errors" );
- e.val( "a" );
- keyup( e );
- errors( 0, "Value, but not invalid" );
- e.val( "" );
- v.form();
- errors( 2, "Both invalid" );
- keyup( e );
- errors( 1, "Only one field validated, still invalid" );
- e.val( "hh" );
- keyup( e );
- errors( 0, "Not invalid anymore" );
- e.val( "h" );
- keyup( e );
- errors( 1, "Field didn't loose focus, so validate again, invalid" );
- e.val( "hh" );
- keyup( e );
- errors( 0, "Valid" );
-});
-
-test( "validate on not keyup, only blur", function() {
- function errors( expected, message ) {
- equal( expected, v.size(), message );
- }
- var e = $( "#firstname" ),
- v = $( "#testForm1" ).validate({
- onkeyup: false
- });
-
- errors( 0 );
- e.val( "a" );
- e.trigger( "keyup" );
- e.keyup();
- errors( 0 );
- e.trigger( "blur" ).trigger( "focusout" );
- errors( 1 );
-});
-
-test( "validate on keyup and blur", function() {
- function errors( expected, message ) {
- equal( expected, v.size(), message );
- }
- var e = $( "#firstname" ),
- v = $( "#testForm1" ).validate();
-
- errors( 0 );
- e.val( "a" );
- e.trigger( "keyup" );
- errors( 0 );
- e.trigger( "blur" ).trigger( "focusout" );
- errors( 1 );
-});
-
-test( "validate email on keyup and blur", function() {
- function errors( expected, message ) {
- equal( expected, v.size(), message );
- }
- var e = $( "#firstname" ),
- v = $( "#testForm1" ).validate();
-
- v.form();
- errors( 2 );
- e.val( "a" );
- e.trigger( "keyup" );
- errors( 1 );
- e.val( "aa" );
- e.trigger( "keyup" );
- errors( 0 );
-});
-
-test( "don't revalidate the field when pressing special characters", function() {
- function errors( expected, message ) {
- equal( expected, v.size(), message );
- }
-
- function triggerEvent( element, keycode ) {
- var event = $.Event( "keyup", { keyCode: keycode } );
- element.trigger( event );
- }
-
- var e = $( "#firstname" ),
- v = $( "#testForm1" ).validate(),
- excludedKeys = {
- "Shift": 16,
- "Ctrl": 17,
- "Alt": 18,
- "Caps lock": 20,
- "End": 35,
- "Home": 36,
- "Left arrow": 37,
- "Up arrow": 38,
- "Right arrow": 39,
- "Down arrow": 40,
- "Insert": 45,
- "Num lock": 144,
- "Alt GR": 225
- };
-
- // To make sure there is only one error, that one of #firtname field
- $( "#firstname" ).val( "" );
- $( "#lastname" ).val( "something" );
- $( "#something" ).val( "something" );
-
- // Validate the form
- v.form();
- errors( 1, "Validate manualy" );
-
- // Check for special keys
- e.val( "aaa" );
- $.each( excludedKeys, function( key, keyCode ) {
- triggerEvent( e, keyCode );
- errors( 1, key + " key" );
- });
-
- // Normal keyup
- e.val( "aaaaa" );
- e.trigger( "keyup" );
- errors( 0, "Normal keyup" );
-});
-
-test( "validate checkbox on click", function() {
- function errors( expected, message ) {
- equal( expected, v.size(), message );
- }
- function trigger( element ) {
- element.click();
- // triggered click event screws up checked-state in 1.4
- element.valid();
- }
- var e = $( "#check2" ),
- v = $( "#form" ).validate({
- rules: {
- check2: "required"
- }
- });
-
- trigger( e );
- errors( 0 );
- trigger( e );
- equal( false, v.form() );
- errors( 1 );
- trigger( e );
- errors( 0 );
- trigger( e );
- errors( 1 );
-});
-
-test( "validate multiple checkbox on click", function() {
- function errors( expected, message ) {
- equal( expected, v.size(), message );
- }
- function trigger( element ) {
- element.click();
- // triggered click event screws up checked-state in 1.4
- element.valid();
- }
- var e1 = $( "#check1" ).attr( "checked", false ),
- e2 = $( "#check1b" ),
- v = $( "#form" ).validate({
- rules: {
- check: {
- required: true,
- minlength: 2
- }
- }
- });
-
- trigger( e1 );
- trigger( e2 );
- errors( 0 );
- trigger( e2 );
- equal( false, v.form() );
- errors( 1 );
- trigger( e2 );
- errors( 0 );
- trigger( e2 );
- errors( 1 );
-});
-
-test( "correct checkbox receives the error", function() {
- function trigger( element ) {
- element.click();
- // triggered click event screws up checked-state in 1.4
- element.valid();
- }
- var e1 = $( "#check1" ).attr( "checked", false ),
- v;
-
- $( "#check1b" ).attr( "checked", false );
- v = $( "#form" ).find( "[type=checkbox]" ).attr( "checked", false ).end().validate({
- rules: {
- check: {
- required: true,
- minlength: 2
- }
- }
- });
-
- equal( false, v.form());
- trigger( e1 );
- equal( false, v.form());
- ok( v.errorList[ 0 ].element.id === v.currentElements[ 0 ].id, "the proper checkbox has the error AND is present in currentElements" );
-});
-
-test( "validate radio on click", function() {
- function errors( expected, message ) {
- equal( expected, v.size(), message );
- }
- function trigger( element ) {
- element.click();
- // triggered click event screws up checked-state in 1.4
- element.valid();
- }
- var e1 = $( "#radio1" ),
- e2 = $( "#radio1a" ),
- v = $( "#form" ).validate({
- rules: {
- radio1: "required"
- }
- });
-
- errors( 0 );
- equal( false, v.form() );
- errors( 1 );
- trigger( e2 );
- errors( 0 );
- trigger( e1 );
- errors( 0 );
-});
-
-test( "validate input with no type attribute, defaulting to text", function() {
- function errors( expected, message ) {
- equal( expected, v.size(), message );
- }
- var v = $( "#testForm12" ).validate(),
- e = $( "#testForm12text" );
-
- errors( 0 );
- e.valid();
- errors( 1 );
- e.val( "test" );
- e.trigger( "keyup" );
- errors( 0 );
-});
-
-module( "ignore hidden" );
-
-test( "ignore hidden elements", function() {
- var form = $( "#userForm" ),
- validate = form.validate({
- rules: {
- "username": "required"
- }
- });
-
- form.get( 0 ).reset();
- ok( !validate.form(), "form should be initially invalid" );
- $( "#userForm [name=username]" ).hide();
- ok( validate.form(), "hidden elements should be ignored by default" );
-});
-
-test( "ignore hidden elements at start", function() {
- var form = $( "#userForm" ),
- validate = form.validate({
- rules: {
- "username": "required"
- }
- });
-
- form.get( 0 ).reset();
- $( "#userForm [name=username]" ).hide();
- ok( validate.form(), "hidden elements should be ignored by default" );
- $( "#userForm [name=username]" ).show();
- ok( !validate.form(), "form should be invalid when required element is visible" );
-});
-
-module( "configuration with attributes " );
-
-test( "Specify error messages through data attributes", function() {
- var form = $( "#dataMessages" ),
- name = $( "#dataMessagesName" ),
- label;
-
- form.validate();
-
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#dataMessages .error:not(input)" );
- equal( label.text(), "You must enter a value here", "Correct error label" );
-});
-
-test( "Updates pre-existing label if has error class", function() {
- var form = $( "#updateLabel" ),
- input = $( "#updateLabelInput" ),
- label = $( "#targetLabel" ),
- labelsBefore = form.find( ".error:not(input)" ).length,
- labelsAfter;
-
- form.validate();
- input.val( "" );
- input.valid();
- labelsAfter = form.find( ".error:not(input)" ).length;
-
- // label was updated
- equal( label.text(), input.attr( "data-msg-required" ) );
- // new label wasn't created
- equal( labelsBefore, labelsAfter );
-});
-
-test( "Min date set by attribute", function() {
- var form = $( "#rangesMinDateInvalid" ),
- name = $( "#minDateInvalid" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#rangesMinDateInvalid .error:not(input)" );
- equal( label.text(), "Please enter a value greater than or equal to 2012-12-21.", "Correct error label" );
-});
-
-test( "Max date set by attribute", function() {
- var form = $( "#ranges" ),
- name = $( "#maxDateInvalid" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "Please enter a value less than or equal to 2012-12-21.", "Correct error label" );
-});
-
-test( "Min and Max date set by attributes greater", function() {
- var form = $( "#ranges" ),
- name = $( "#rangeDateInvalidGreater" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "Please enter a value less than or equal to 2013-01-21.", "Correct error label" );
-});
-
-test( "Min and Max date set by attributes less", function() {
- var form = $( "#ranges" ),
- name = $( "#rangeDateInvalidLess" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "Please enter a value greater than or equal to 2012-11-21.", "Correct error label" );
-});
-
-test( "Min date set by attribute valid", function() {
- var form = $( "#rangeMinDateValid" ),
- name = $( "#minDateValid" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#rangeMinDateValid .error:not(input)" );
- equal( label.text(), "", "Correct error label" );
-});
-
-test( "Max date set by attribute valid", function() {
- var form = $( "#ranges" ),
- name = $( "#maxDateValid" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "", "Correct error label" );
-});
-
-test( "Min and Max date set by attributes valid", function() {
- var form = $( "#ranges" ),
- name = $( "#rangeDateValid" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "", "Correct error label" );
-});
-
-test( "Min and Max strings set by attributes greater", function() {
- var form = $( "#ranges" ),
- name = $( "#rangeTextInvalidGreater" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "Please enter a value less than or equal to 200.", "Correct error label" );
-});
-
-test( "Min and Max strings set by attributes less", function() {
- var form = $( "#ranges" ),
- name = $( "#rangeTextInvalidLess" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "Please enter a value greater than or equal to 200.", "Correct error label" );
-});
-
-test( "Min and Max strings set by attributes valid", function() {
- var form = $( "#ranges" ),
- range = $( "#rangeTextValid" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- range.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "", "Correct error label" );
-});
-
-test( "Max set by data-rule, valid", function() {
- var form = $( "#ranges" ),
- range = $( "#rangeTextDataRuleValid" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- range.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "", "Correct error label" );
-});
-
-test( "calling blur on ignored element", function() {
- var form = $( "#ignoredElements" );
-
- form.validate({
- ignore: ".ignore",
- submitHandler: $.noop,
- invalidHandler: function() {
- $( "#ss1" ).blur();
- }
- });
-
- form.trigger( "submit" );
- equal( form.valid(), false, "valid() should return false" );
-});
-
-test( "Min and Max type absent set by attributes greater", function() {
- var form = $( "#ranges" ),
- name = $( "#rangeAbsentInvalidGreater" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "Please enter a value less than or equal to 200.", "Correct error label" );
-});
-
-test( "Min and Max type absent set by attributes less", function() {
- var form = $( "#ranges" ),
- name = $( "#rangeAbsentInvalidLess" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "Please enter a value greater than or equal to 200.", "Correct error label" );
-});
-
-test( "Min and Max type absent set by attributes valid", function() {
- var form = $( "#ranges" ),
- name = $( "#rangeAbsentValid" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "", "Correct error label" );
-});
-
-test( "Min and Max range set by attributes valid", function() {
- //
- // cannot test for overflow:
- // When the element is suffering from an underflow,
- // the user agent must set the element"s value to a valid
- // floating-point number that represents the minimum.
- // http://www.w3.org/TR/html5/forms.html#range-state-%28type=range%29
- //
- var form = $( "#ranges" ),
- name = $( "#rangeRangeValid" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "", "Correct error label" );
-});
-
-test( "Min and Max number set by attributes valid", function() {
- var form = $( "#ranges" ),
- name = $( "#rangeNumberValid" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "", "Correct error label" );
-});
-
-test( "Min and Max number set by attributes greater", function() {
- var form = $( "#ranges" ),
- name = $( "#rangeNumberInvalidGreater" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "Please enter a value less than or equal to 200.", "Correct error label" );
-});
-
-test( "Min and Max number set by attributes less", function() {
- var form = $( "#ranges" ),
- name = $( "#rangeNumberInvalidLess" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "Please enter a value greater than or equal to 50.", "Correct error label" );
-});
-
-test( "Rules allowed to have a value of zero invalid", function() {
- var form = $( "#ranges" ),
- name = $( "#rangeMinZeroInvalidLess" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "Please enter a value greater than or equal to 0.", "Correct error label" );
-});
-
-test( "Rules allowed to have a value of zero valid equal", function() {
- var form = $( "#ranges" ),
- name = $( "#rangeMinZeroValidEqual" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "", "Correct error label" );
-});
-
-test( "Rules allowed to have a value of zero valid greater", function() {
- var form = $( "#ranges" ),
- name = $( "#rangeMinZeroValidGreater" ),
- label;
-
- form.validate();
- form.get( 0 ).reset();
- name.valid();
-
- label = $( "#ranges .error:not(input)" );
- equal( label.text(), "", "Correct error label" );
-});
-
-test( "Validation triggered on radio and checkbox via click", function() {
- expect( 2 );
-
- var form = $( "#radiocheckbox" );
-
- // init validate
- form.validate();
-
- // validate so we have errors
- ok( !form.valid(), "Form invalid");
-
- // simulate native click on first checkbox to trigger change-event
- $( "#radiocheckbox-0-1" ).simulate( "click" );
-
- // simulate native click on first radio to trigger change-event
- $( "#radiocheckbox-1-1" ).simulate( "click" );
-
- // test if there is no error anymore
- ok( form.find( "input.error" ).length === 0, "Form valid" );
-});
-
-test( "destroy()", function() {
- expect( 2 );
-
- var form = $( "#form" ),
- validate = form.validate();
-
- strictEqual( $( form ).data( "validator" ), validate );
-
- validate.destroy();
- strictEqual( $( form ).data( "validator" ), undefined );
-});
diff --git a/wqflask/wqflask/static/new/packages/nvd3/nv.d3.css b/wqflask/wqflask/static/new/packages/nvd3/nv.d3.css
deleted file mode 100644
index 694b9218..00000000
--- a/wqflask/wqflask/static/new/packages/nvd3/nv.d3.css
+++ /dev/null
@@ -1,641 +0,0 @@
-/* nvd3 version 1.8.1 (https://github.com/novus/nvd3) 2015-05-25 */
-.nvd3 .nv-axis {
- pointer-events:none;
- opacity: 1;
-}
-
-.nvd3 .nv-axis path {
- fill: none;
- stroke: #000;
- stroke-opacity: .75;
- shape-rendering: crispEdges;
-}
-
-.nvd3 .nv-axis path.domain {
- stroke-opacity: .75;
-}
-
-.nvd3 .nv-axis.nv-x path.domain {
- stroke-opacity: 1;
-}
-
-.nvd3 .nv-axis line {
- fill: none;
- stroke: #e5e5e5;
- shape-rendering: crispEdges;
-}
-
-.nvd3 .nv-axis .zero line,
- /*this selector may not be necessary*/ .nvd3 .nv-axis line.zero {
- stroke-opacity: .75;
-}
-
-.nvd3 .nv-axis .nv-axisMaxMin text {
- font-weight: bold;
-}
-
-.nvd3 .x .nv-axis .nv-axisMaxMin text,
-.nvd3 .x2 .nv-axis .nv-axisMaxMin text,
-.nvd3 .x3 .nv-axis .nv-axisMaxMin text {
- text-anchor: middle
-}
-
-.nvd3 .nv-axis.nv-disabled {
- opacity: 0;
-}
-
-.nvd3 .nv-bars rect {
- fill-opacity: .75;
-
- transition: fill-opacity 250ms linear;
- -moz-transition: fill-opacity 250ms linear;
- -webkit-transition: fill-opacity 250ms linear;
-}
-
-.nvd3 .nv-bars rect.hover {
- fill-opacity: 1;
-}
-
-.nvd3 .nv-bars .hover rect {
- fill: lightblue;
-}
-
-.nvd3 .nv-bars text {
- fill: rgba(0,0,0,0);
-}
-
-.nvd3 .nv-bars .hover text {
- fill: rgba(0,0,0,1);
-}
-
-.nvd3 .nv-multibar .nv-groups rect,
-.nvd3 .nv-multibarHorizontal .nv-groups rect,
-.nvd3 .nv-discretebar .nv-groups rect {
- stroke-opacity: 0;
-
- transition: fill-opacity 250ms linear;
- -moz-transition: fill-opacity 250ms linear;
- -webkit-transition: fill-opacity 250ms linear;
-}
-
-.nvd3 .nv-multibar .nv-groups rect:hover,
-.nvd3 .nv-multibarHorizontal .nv-groups rect:hover,
-.nvd3 .nv-candlestickBar .nv-ticks rect:hover,
-.nvd3 .nv-discretebar .nv-groups rect:hover {
- fill-opacity: 1;
-}
-
-.nvd3 .nv-discretebar .nv-groups text,
-.nvd3 .nv-multibarHorizontal .nv-groups text {
- font-weight: bold;
- fill: rgba(0,0,0,1);
- stroke: rgba(0,0,0,0);
-}
-
-/* boxplot CSS */
-.nvd3 .nv-boxplot circle {
- fill-opacity: 0.5;
-}
-
-.nvd3 .nv-boxplot circle:hover {
- fill-opacity: 1;
-}
-
-.nvd3 .nv-boxplot rect:hover {
- fill-opacity: 1;
-}
-
-.nvd3 line.nv-boxplot-median {
- stroke: black;
-}
-
-.nv-boxplot-tick:hover {
- stroke-width: 2.5px;
-}
-/* bullet */
-.nvd3.nv-bullet { font: 10px sans-serif; }
-.nvd3.nv-bullet .nv-measure { fill-opacity: .8; }
-.nvd3.nv-bullet .nv-measure:hover { fill-opacity: 1; }
-.nvd3.nv-bullet .nv-marker { stroke: #000; stroke-width: 2px; }
-.nvd3.nv-bullet .nv-markerTriangle { stroke: #000; fill: #fff; stroke-width: 1.5px; }
-.nvd3.nv-bullet .nv-tick line { stroke: #666; stroke-width: .5px; }
-.nvd3.nv-bullet .nv-range.nv-s0 { fill: #eee; }
-.nvd3.nv-bullet .nv-range.nv-s1 { fill: #ddd; }
-.nvd3.nv-bullet .nv-range.nv-s2 { fill: #ccc; }
-.nvd3.nv-bullet .nv-title { font-size: 14px; font-weight: bold; }
-.nvd3.nv-bullet .nv-subtitle { fill: #999; }
-
-
-.nvd3.nv-bullet .nv-range {
- fill: #bababa;
- fill-opacity: .4;
-}
-.nvd3.nv-bullet .nv-range:hover {
- fill-opacity: .7;
-}
-
-.nvd3.nv-candlestickBar .nv-ticks .nv-tick {
- stroke-width: 1px;
-}
-
-.nvd3.nv-candlestickBar .nv-ticks .nv-tick.hover {
- stroke-width: 2px;
-}
-
-.nvd3.nv-candlestickBar .nv-ticks .nv-tick.positive rect {
- stroke: #2ca02c;
- fill: #2ca02c;
-}
-
-.nvd3.nv-candlestickBar .nv-ticks .nv-tick.negative rect {
- stroke: #d62728;
- fill: #d62728;
-}
-
-.with-transitions .nv-candlestickBar .nv-ticks .nv-tick {
- transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
- -moz-transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
- -webkit-transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
-
-}
-
-.nvd3.nv-candlestickBar .nv-ticks line {
- stroke: #333;
-}
-
-
-.nvd3 .nv-legend .nv-disabled rect {
- /*fill-opacity: 0;*/
-}
-
-.nvd3 .nv-check-box .nv-box {
- fill-opacity:0;
- stroke-width:2;
-}
-
-.nvd3 .nv-check-box .nv-check {
- fill-opacity:0;
- stroke-width:4;
-}
-
-.nvd3 .nv-series.nv-disabled .nv-check-box .nv-check {
- fill-opacity:0;
- stroke-opacity:0;
-}
-
-.nvd3 .nv-controlsWrap .nv-legend .nv-check-box .nv-check {
- opacity: 0;
-}
-
-/* line plus bar */
-.nvd3.nv-linePlusBar .nv-bar rect {
- fill-opacity: .75;
-}
-
-.nvd3.nv-linePlusBar .nv-bar rect:hover {
- fill-opacity: 1;
-}
-.nvd3 .nv-groups path.nv-line {
- fill: none;
-}
-
-.nvd3 .nv-groups path.nv-area {
- stroke: none;
-}
-
-.nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point {
- fill-opacity: 0;
- stroke-opacity: 0;
-}
-
-.nvd3.nv-scatter.nv-single-point .nv-groups .nv-point {
- fill-opacity: .5 !important;
- stroke-opacity: .5 !important;
-}
-
-
-.with-transitions .nvd3 .nv-groups .nv-point {
- transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
- -moz-transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
- -webkit-transition: stroke-width 250ms linear, stroke-opacity 250ms linear;
-
-}
-
-.nvd3.nv-scatter .nv-groups .nv-point.hover,
-.nvd3 .nv-groups .nv-point.hover {
- stroke-width: 7px;
- fill-opacity: .95 !important;
- stroke-opacity: .95 !important;
-}
-
-
-.nvd3 .nv-point-paths path {
- stroke: #aaa;
- stroke-opacity: 0;
- fill: #eee;
- fill-opacity: 0;
-}
-
-
-
-.nvd3 .nv-indexLine {
- cursor: ew-resize;
-}
-
-/********************
- * SVG CSS
- */
-
-/********************
- Default CSS for an svg element nvd3 used
-*/
-svg.nvd3-svg {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -ms-user-select: none;
- -moz-user-select: none;
- user-select: none;
- display: block;
- width:100%;
- height:100%;
-}
-
-/********************
- Box shadow and border radius styling
-*/
-.nvtooltip.with-3d-shadow, .with-3d-shadow .nvtooltip {
- -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);
- -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);
- box-shadow: 0 5px 10px rgba(0,0,0,.2);
-
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
-}
-
-
-.nvd3 text {
- font: normal 12px Arial;
-}
-
-.nvd3 .title {
- font: bold 14px Arial;
-}
-
-.nvd3 .nv-background {
- fill: white;
- fill-opacity: 0;
-}
-
-.nvd3.nv-noData {
- font-size: 18px;
- font-weight: bold;
-}
-
-
-/**********
-* Brush
-*/
-
-.nv-brush .extent {
- fill-opacity: .125;
- shape-rendering: crispEdges;
-}
-
-.nv-brush .resize path {
- fill: #eee;
- stroke: #666;
-}
-
-
-/**********
-* Legend
-*/
-
-.nvd3 .nv-legend .nv-series {
- cursor: pointer;
-}
-
-.nvd3 .nv-legend .nv-disabled circle {
- fill-opacity: 0;
-}
-
-/* focus */
-.nvd3 .nv-brush .extent {
- fill-opacity: 0 !important;
-}
-
-.nvd3 .nv-brushBackground rect {
- stroke: #000;
- stroke-width: .4;
- fill: #fff;
- fill-opacity: .7;
-}
-
-
-.nvd3.nv-ohlcBar .nv-ticks .nv-tick {
- stroke-width: 1px;
-}
-
-.nvd3.nv-ohlcBar .nv-ticks .nv-tick.hover {
- stroke-width: 2px;
-}
-
-.nvd3.nv-ohlcBar .nv-ticks .nv-tick.positive {
- stroke: #2ca02c;
-}
-
-.nvd3.nv-ohlcBar .nv-ticks .nv-tick.negative {
- stroke: #d62728;
-}
-
-
-.nvd3 .background path {
- fill: none;
- stroke: #EEE;
- stroke-opacity: .4;
- shape-rendering: crispEdges;
-}
-
-.nvd3 .foreground path {
- fill: none;
- stroke-opacity: .7;
-}
-
-.nvd3 .nv-parallelCoordinates-brush .extent
-{
- fill: #fff;
- fill-opacity: .6;
- stroke: gray;
- shape-rendering: crispEdges;
-}
-
-.nvd3 .nv-parallelCoordinates .hover {
- fill-opacity: 1;
- stroke-width: 3px;
-}
-
-
-.nvd3 .missingValuesline line {
- fill: none;
- stroke: black;
- stroke-width: 1;
- stroke-opacity: 1;
- stroke-dasharray: 5, 5;
-}
-.nvd3.nv-pie path {
- stroke-opacity: 0;
- transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear;
- -moz-transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear;
- -webkit-transition: fill-opacity 250ms linear, stroke-width 250ms linear, stroke-opacity 250ms linear;
-
-}
-
-.nvd3.nv-pie .nv-pie-title {
- font-size: 24px;
- fill: rgba(19, 196, 249, 0.59);
-}
-
-.nvd3.nv-pie .nv-slice text {
- stroke: #000;
- stroke-width: 0;
-}
-
-.nvd3.nv-pie path {
- stroke: #fff;
- stroke-width: 1px;
- stroke-opacity: 1;
-}
-
-.nvd3.nv-pie .hover path {
- fill-opacity: .7;
-}
-.nvd3.nv-pie .nv-label {
- pointer-events: none;
-}
-.nvd3.nv-pie .nv-label rect {
- fill-opacity: 0;
- stroke-opacity: 0;
-}
-
-/* scatter */
-.nvd3 .nv-groups .nv-point.hover {
- stroke-width: 20px;
- stroke-opacity: .5;
-}
-
-.nvd3 .nv-scatter .nv-point.hover {
- fill-opacity: 1;
-}
-.nv-noninteractive {
- pointer-events: none;
-}
-
-.nv-distx, .nv-disty {
- pointer-events: none;
-}
-
-/* sparkline */
-.nvd3.nv-sparkline path {
- fill: none;
-}
-
-.nvd3.nv-sparklineplus g.nv-hoverValue {
- pointer-events: none;
-}
-
-.nvd3.nv-sparklineplus .nv-hoverValue line {
- stroke: #333;
- stroke-width: 1.5px;
-}
-
-.nvd3.nv-sparklineplus,
-.nvd3.nv-sparklineplus g {
- pointer-events: all;
-}
-
-.nvd3 .nv-hoverArea {
- fill-opacity: 0;
- stroke-opacity: 0;
-}
-
-.nvd3.nv-sparklineplus .nv-xValue,
-.nvd3.nv-sparklineplus .nv-yValue {
- stroke-width: 0;
- font-size: .9em;
- font-weight: normal;
-}
-
-.nvd3.nv-sparklineplus .nv-yValue {
- stroke: #f66;
-}
-
-.nvd3.nv-sparklineplus .nv-maxValue {
- stroke: #2ca02c;
- fill: #2ca02c;
-}
-
-.nvd3.nv-sparklineplus .nv-minValue {
- stroke: #d62728;
- fill: #d62728;
-}
-
-.nvd3.nv-sparklineplus .nv-currentValue {
- font-weight: bold;
- font-size: 1.1em;
-}
-/* stacked area */
-.nvd3.nv-stackedarea path.nv-area {
- fill-opacity: .7;
- stroke-opacity: 0;
- transition: fill-opacity 250ms linear, stroke-opacity 250ms linear;
- -moz-transition: fill-opacity 250ms linear, stroke-opacity 250ms linear;
- -webkit-transition: fill-opacity 250ms linear, stroke-opacity 250ms linear;
-}
-
-.nvd3.nv-stackedarea path.nv-area.hover {
- fill-opacity: .9;
-}
-
-
-.nvd3.nv-stackedarea .nv-groups .nv-point {
- stroke-opacity: 0;
- fill-opacity: 0;
-}
-
-
-.nvtooltip {
- position: absolute;
- background-color: rgba(255,255,255,1.0);
- color: rgba(0,0,0,1.0);
- padding: 1px;
- border: 1px solid rgba(0,0,0,.2);
- z-index: 10000;
- display: block;
-
- font-family: Arial;
- font-size: 13px;
- text-align: left;
- pointer-events: none;
-
- white-space: nowrap;
-
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-.nvtooltip {
- background: rgba(255,255,255, 0.8);
- border: 1px solid rgba(0,0,0,0.5);
- border-radius: 4px;
-}
-
-/*Give tooltips that old fade in transition by
- putting a "with-transitions" class on the container div.
-*/
-.nvtooltip.with-transitions, .with-transitions .nvtooltip {
- transition: opacity 50ms linear;
- -moz-transition: opacity 50ms linear;
- -webkit-transition: opacity 50ms linear;
-
- transition-delay: 200ms;
- -moz-transition-delay: 200ms;
- -webkit-transition-delay: 200ms;
-}
-
-.nvtooltip.x-nvtooltip,
-.nvtooltip.y-nvtooltip {
- padding: 8px;
-}
-
-.nvtooltip h3 {
- margin: 0;
- padding: 4px 14px;
- line-height: 18px;
- font-weight: normal;
- background-color: rgba(247,247,247,0.75);
- color: rgba(0,0,0,1.0);
- text-align: center;
-
- border-bottom: 1px solid #ebebeb;
-
- -webkit-border-radius: 5px 5px 0 0;
- -moz-border-radius: 5px 5px 0 0;
- border-radius: 5px 5px 0 0;
-}
-
-.nvtooltip p {
- margin: 0;
- padding: 5px 14px;
- text-align: center;
-}
-
-.nvtooltip span {
- display: inline-block;
- margin: 2px 0;
-}
-
-.nvtooltip table {
- margin: 6px;
- border-spacing:0;
-}
-
-
-.nvtooltip table td {
- padding: 2px 9px 2px 0;
- vertical-align: middle;
-}
-
-.nvtooltip table td.key {
- font-weight:normal;
-}
-.nvtooltip table td.value {
- text-align: right;
- font-weight: bold;
-}
-
-.nvtooltip table tr.highlight td {
- padding: 1px 9px 1px 0;
- border-bottom-style: solid;
- border-bottom-width: 1px;
- border-top-style: solid;
- border-top-width: 1px;
-}
-
-.nvtooltip table td.legend-color-guide div {
- width: 8px;
- height: 8px;
- vertical-align: middle;
-}
-
-.nvtooltip table td.legend-color-guide div {
- width: 12px;
- height: 12px;
- border: 1px solid #999;
-}
-
-.nvtooltip .footer {
- padding: 3px;
- text-align: center;
-}
-
-.nvtooltip-pending-removal {
- pointer-events: none;
- display: none;
-}
-
-
-/****
-Interactive Layer
-*/
-.nvd3 .nv-interactiveGuideLine {
- pointer-events:none;
-}
-.nvd3 line.nv-guideline {
- stroke: #ccc;
-} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/nvd3/nv.d3.js b/wqflask/wqflask/static/new/packages/nvd3/nv.d3.js
deleted file mode 100644
index f64a6c14..00000000
--- a/wqflask/wqflask/static/new/packages/nvd3/nv.d3.js
+++ /dev/null
@@ -1,13363 +0,0 @@
-/* nvd3 version 1.8.1 (https://github.com/novus/nvd3) 2015-05-25 */
-(function(){
-
-// set up main nv object
-var nv = {};
-
-// the major global objects under the nv namespace
-nv.dev = false; //set false when in production
-nv.tooltip = nv.tooltip || {}; // For the tooltip system
-nv.utils = nv.utils || {}; // Utility subsystem
-nv.models = nv.models || {}; //stores all the possible models/components
-nv.charts = {}; //stores all the ready to use charts
-nv.logs = {}; //stores some statistics and potential error messages
-nv.dom = {}; //DOM manipulation functions
-
-nv.dispatch = d3.dispatch('render_start', 'render_end');
-
-// Function bind polyfill
-// Needed ONLY for phantomJS as it's missing until version 2.0 which is unreleased as of this comment
-// https://github.com/ariya/phantomjs/issues/10522
-// http://kangax.github.io/compat-table/es5/#Function.prototype.bind
-// phantomJS is used for running the test suite
-if (!Function.prototype.bind) {
- Function.prototype.bind = function (oThis) {
- if (typeof this !== "function") {
- // closest thing possible to the ECMAScript 5 internal IsCallable function
- throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");
- }
-
- var aArgs = Array.prototype.slice.call(arguments, 1),
- fToBind = this,
- fNOP = function () {},
- fBound = function () {
- return fToBind.apply(this instanceof fNOP && oThis
- ? this
- : oThis,
- aArgs.concat(Array.prototype.slice.call(arguments)));
- };
-
- fNOP.prototype = this.prototype;
- fBound.prototype = new fNOP();
- return fBound;
- };
-}
-
-// Development render timers - disabled if dev = false
-if (nv.dev) {
- nv.dispatch.on('render_start', function(e) {
- nv.logs.startTime = +new Date();
- });
-
- nv.dispatch.on('render_end', function(e) {
- nv.logs.endTime = +new Date();
- nv.logs.totalTime = nv.logs.endTime - nv.logs.startTime;
- nv.log('total', nv.logs.totalTime); // used for development, to keep track of graph generation times
- });
-}
-
-// Logs all arguments, and returns the last so you can test things in place
-// Note: in IE8 console.log is an object not a function, and if modernizr is used
-// then calling Function.prototype.bind with with anything other than a function
-// causes a TypeError to be thrown.
-nv.log = function() {
- if (nv.dev && window.console && console.log && console.log.apply)
- console.log.apply(console, arguments);
- else if (nv.dev && window.console && typeof console.log == "function" && Function.prototype.bind) {
- var log = Function.prototype.bind.call(console.log, console);
- log.apply(console, arguments);
- }
- return arguments[arguments.length - 1];
-};
-
-// print console warning, should be used by deprecated functions
-nv.deprecated = function(name, info) {
- if (console && console.warn) {
- console.warn('nvd3 warning: `' + name + '` has been deprecated. ', info || '');
- }
-};
-
-// The nv.render function is used to queue up chart rendering
-// in non-blocking async functions.
-// When all queued charts are done rendering, nv.dispatch.render_end is invoked.
-nv.render = function render(step) {
- // number of graphs to generate in each timeout loop
- step = step || 1;
-
- nv.render.active = true;
- nv.dispatch.render_start();
-
- var renderLoop = function() {
- var chart, graph;
-
- for (var i = 0; i < step && (graph = nv.render.queue[i]); i++) {
- chart = graph.generate();
- if (typeof graph.callback == typeof(Function)) graph.callback(chart);
- }
-
- nv.render.queue.splice(0, i);
-
- if (nv.render.queue.length) {
- setTimeout(renderLoop);
- }
- else {
- nv.dispatch.render_end();
- nv.render.active = false;
- }
- };
-
- setTimeout(renderLoop);
-};
-
-nv.render.active = false;
-nv.render.queue = [];
-
-/*
-Adds a chart to the async rendering queue. This method can take arguments in two forms:
-nv.addGraph({
- generate: <Function>
- callback: <Function>
-})
-
-or
-
-nv.addGraph(<generate Function>, <callback Function>)
-
-The generate function should contain code that creates the NVD3 model, sets options
-on it, adds data to an SVG element, and invokes the chart model. The generate function
-should return the chart model. See examples/lineChart.html for a usage example.
-
-The callback function is optional, and it is called when the generate function completes.
-*/
-nv.addGraph = function(obj) {
- if (typeof arguments[0] === typeof(Function)) {
- obj = {generate: arguments[0], callback: arguments[1]};
- }
-
- nv.render.queue.push(obj);
-
- if (!nv.render.active) {
- nv.render();
- }
-};
-
-// Node/CommonJS exports
-if (typeof(module) !== 'undefined' && typeof(exports) !== 'undefined') {
- module.exports = nv;
-}
-
-if (typeof(window) !== 'undefined') {
- window.nv = nv;
-}
-/* Facade for queueing DOM write operations
- * with Fastdom (https://github.com/wilsonpage/fastdom)
- * if available.
- * This could easily be extended to support alternate
- * implementations in the future.
- */
-nv.dom.write = function(callback) {
- if (window.fastdom !== undefined) {
- return fastdom.write(callback);
- }
- return callback();
-};
-
-/* Facade for queueing DOM read operations
- * with Fastdom (https://github.com/wilsonpage/fastdom)
- * if available.
- * This could easily be extended to support alternate
- * implementations in the future.
- */
-nv.dom.read = function(callback) {
- if (window.fastdom !== undefined) {
- return fastdom.read(callback);
- }
- return callback();
-};/* Utility class to handle creation of an interactive layer.
- This places a rectangle on top of the chart. When you mouse move over it, it sends a dispatch
- containing the X-coordinate. It can also render a vertical line where the mouse is located.
-
- dispatch.elementMousemove is the important event to latch onto. It is fired whenever the mouse moves over
- the rectangle. The dispatch is given one object which contains the mouseX/Y location.
- It also has 'pointXValue', which is the conversion of mouseX to the x-axis scale.
- */
-nv.interactiveGuideline = function() {
- "use strict";
-
- var tooltip = nv.models.tooltip();
- tooltip.duration(0).hideDelay(0)._isInteractiveLayer(true).hidden(false);
-
- //Public settings
- var width = null;
- var height = null;
-
- //Please pass in the bounding chart's top and left margins
- //This is important for calculating the correct mouseX/Y positions.
- var margin = {left: 0, top: 0}
- , xScale = d3.scale.linear()
- , dispatch = d3.dispatch('elementMousemove', 'elementMouseout', 'elementClick', 'elementDblclick')
- , showGuideLine = true;
- //Must pass in the bounding chart's <svg> container.
- //The mousemove event is attached to this container.
- var svgContainer = null;
-
- // check if IE by looking for activeX
- var isMSIE = "ActiveXObject" in window;
-
-
- function layer(selection) {
- selection.each(function(data) {
- var container = d3.select(this);
- var availableWidth = (width || 960), availableHeight = (height || 400);
- var wrap = container.selectAll("g.nv-wrap.nv-interactiveLineLayer")
- .data([data]);
- var wrapEnter = wrap.enter()
- .append("g").attr("class", " nv-wrap nv-interactiveLineLayer");
- wrapEnter.append("g").attr("class","nv-interactiveGuideLine");
-
- if (!svgContainer) {
- return;
- }
-
- function mouseHandler() {
- var d3mouse = d3.mouse(this);
- var mouseX = d3mouse[0];
- var mouseY = d3mouse[1];
- var subtractMargin = true;
- var mouseOutAnyReason = false;
- if (isMSIE) {
- /*
- D3.js (or maybe SVG.getScreenCTM) has a nasty bug in Internet Explorer 10.
- d3.mouse() returns incorrect X,Y mouse coordinates when mouse moving
- over a rect in IE 10.
- However, d3.event.offsetX/Y also returns the mouse coordinates
- relative to the triggering <rect>. So we use offsetX/Y on IE.
- */
- mouseX = d3.event.offsetX;
- mouseY = d3.event.offsetY;
-
- /*
- On IE, if you attach a mouse event listener to the <svg> container,
- it will actually trigger it for all the child elements (like <path>, <circle>, etc).
- When this happens on IE, the offsetX/Y is set to where ever the child element
- is located.
- As a result, we do NOT need to subtract margins to figure out the mouse X/Y
- position under this scenario. Removing the line below *will* cause
- the interactive layer to not work right on IE.
- */
- if(d3.event.target.tagName !== "svg") {
- subtractMargin = false;
- }
-
- if (d3.event.target.className.baseVal.match("nv-legend")) {
- mouseOutAnyReason = true;
- }
-
- }
-
- if(subtractMargin) {
- mouseX -= margin.left;
- mouseY -= margin.top;
- }
-
- /* If mouseX/Y is outside of the chart's bounds,
- trigger a mouseOut event.
- */
- if (mouseX < 0 || mouseY < 0
- || mouseX > availableWidth || mouseY > availableHeight
- || (d3.event.relatedTarget && d3.event.relatedTarget.ownerSVGElement === undefined)
- || mouseOutAnyReason
- ) {
-
- if (isMSIE) {
- if (d3.event.relatedTarget
- && d3.event.relatedTarget.ownerSVGElement === undefined
- && (d3.event.relatedTarget.className === undefined
- || d3.event.relatedTarget.className.match(tooltip.nvPointerEventsClass))) {
-
- return;
- }
- }
- dispatch.elementMouseout({
- mouseX: mouseX,
- mouseY: mouseY
- });
- layer.renderGuideLine(null); //hide the guideline
- tooltip.hidden(true);
- return;
- } else {
- tooltip.hidden(false);
- }
-
- var pointXValue = xScale.invert(mouseX);
- dispatch.elementMousemove({
- mouseX: mouseX,
- mouseY: mouseY,
- pointXValue: pointXValue
- });
-
- //If user double clicks the layer, fire a elementDblclick
- if (d3.event.type === "dblclick") {
- dispatch.elementDblclick({
- mouseX: mouseX,
- mouseY: mouseY,
- pointXValue: pointXValue
- });
- }
-
- // if user single clicks the layer, fire elementClick
- if (d3.event.type === 'click') {
- dispatch.elementClick({
- mouseX: mouseX,
- mouseY: mouseY,
- pointXValue: pointXValue
- });
- }
- }
-
- svgContainer
- .on("touchmove",mouseHandler)
- .on("mousemove",mouseHandler, true)
- .on("mouseout" ,mouseHandler,true)
- .on("dblclick" ,mouseHandler)
- .on("click", mouseHandler)
- ;
-
- layer.guideLine = null;
- //Draws a vertical guideline at the given X postion.
- layer.renderGuideLine = function(x) {
- if (!showGuideLine) return;
- if (layer.guideLine && layer.guideLine.attr("x1") === x) return;
- nv.dom.write(function() {
- var line = wrap.select(".nv-interactiveGuideLine")
- .selectAll("line")
- .data((x != null) ? [nv.utils.NaNtoZero(x)] : [], String);
- line.enter()
- .append("line")
- .attr("class", "nv-guideline")
- .attr("x1", function(d) { return d;})
- .attr("x2", function(d) { return d;})
- .attr("y1", availableHeight)
- .attr("y2",0);
- line.exit().remove();
- });
- }
- });
- }
-
- layer.dispatch = dispatch;
- layer.tooltip = tooltip;
-
- layer.margin = function(_) {
- if (!arguments.length) return margin;
- margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
- margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
- return layer;
- };
-
- layer.width = function(_) {
- if (!arguments.length) return width;
- width = _;
- return layer;
- };
-
- layer.height = function(_) {
- if (!arguments.length) return height;
- height = _;
- return layer;
- };
-
- layer.xScale = function(_) {
- if (!arguments.length) return xScale;
- xScale = _;
- return layer;
- };
-
- layer.showGuideLine = function(_) {
- if (!arguments.length) return showGuideLine;
- showGuideLine = _;
- return layer;
- };
-
- layer.svgContainer = function(_) {
- if (!arguments.length) return svgContainer;
- svgContainer = _;
- return layer;
- };
-
- return layer;
-};
-
-/* Utility class that uses d3.bisect to find the index in a given array, where a search value can be inserted.
- This is different from normal bisectLeft; this function finds the nearest index to insert the search value.
-
- For instance, lets say your array is [1,2,3,5,10,30], and you search for 28.
- Normal d3.bisectLeft will return 4, because 28 is inserted after the number 10. But interactiveBisect will return 5
- because 28 is closer to 30 than 10.
-
- Unit tests can be found in: interactiveBisectTest.html
-
- Has the following known issues:
- * Will not work if the data points move backwards (ie, 10,9,8,7, etc) or if the data points are in random order.
- * Won't work if there are duplicate x coordinate values.
- */
-nv.interactiveBisect = function (values, searchVal, xAccessor) {
- "use strict";
- if (! (values instanceof Array)) {
- return null;
- }
- var _xAccessor;
- if (typeof xAccessor !== 'function') {
- _xAccessor = function(d) {
- return d.x;
- }
- } else {
- _xAccessor = xAccessor;
- }
- var _cmp = function(d, v) {
- // Accessors are no longer passed the index of the element along with
- // the element itself when invoked by d3.bisector.
- //
- // Starting at D3 v3.4.4, d3.bisector() started inspecting the
- // function passed to determine if it should consider it an accessor
- // or a comparator. This meant that accessors that take two arguments
- // (expecting an index as the second parameter) are treated as
- // comparators where the second argument is the search value against
- // which the first argument is compared.
- return _xAccessor(d) - v;
- };
-
- var bisect = d3.bisector(_cmp).left;
- var index = d3.max([0, bisect(values,searchVal) - 1]);
- var currentValue = _xAccessor(values[index]);
-
- if (typeof currentValue === 'undefined') {
- currentValue = index;
- }
-
- if (currentValue === searchVal) {
- return index; //found exact match
- }
-
- var nextIndex = d3.min([index+1, values.length - 1]);
- var nextValue = _xAccessor(values[nextIndex]);
-
- if (typeof nextValue === 'undefined') {
- nextValue = nextIndex;
- }
-
- if (Math.abs(nextValue - searchVal) >= Math.abs(currentValue - searchVal)) {
- return index;
- } else {
- return nextIndex
- }
-};
-
-/*
- Returns the index in the array "values" that is closest to searchVal.
- Only returns an index if searchVal is within some "threshold".
- Otherwise, returns null.
- */
-nv.nearestValueIndex = function (values, searchVal, threshold) {
- "use strict";
- var yDistMax = Infinity, indexToHighlight = null;
- values.forEach(function(d,i) {
- var delta = Math.abs(searchVal - d);
- if ( d != null && delta <= yDistMax && delta < threshold) {
- yDistMax = delta;
- indexToHighlight = i;
- }
- });
- return indexToHighlight;
-};
-/* Tooltip rendering model for nvd3 charts.
- window.nv.models.tooltip is the updated,new way to render tooltips.
-
- window.nv.tooltip.show is the old tooltip code.
- window.nv.tooltip.* also has various helper methods.
- */
-(function() {
- "use strict";
-
- /* Model which can be instantiated to handle tooltip rendering.
- Example usage:
- var tip = nv.models.tooltip().gravity('w').distance(23)
- .data(myDataObject);
-
- tip(); //just invoke the returned function to render tooltip.
- */
- nv.models.tooltip = function() {
-
- /*
- Tooltip data. If data is given in the proper format, a consistent tooltip is generated.
- Example Format of data:
- {
- key: "Date",
- value: "August 2009",
- series: [
- {key: "Series 1", value: "Value 1", color: "#000"},
- {key: "Series 2", value: "Value 2", color: "#00f"}
- ]
- }
- */
- var data = null;
- var gravity = 'w' //Can be 'n','s','e','w'. Determines how tooltip is positioned.
- , distance = 25 //Distance to offset tooltip from the mouse location.
- , snapDistance = 0 //Tolerance allowed before tooltip is moved from its current position (creates 'snapping' effect)
- , fixedTop = null //If not null, this fixes the top position of the tooltip.
- , classes = null //Attaches additional CSS classes to the tooltip DIV that is created.
- , chartContainer = null //Parent dom element of the SVG that holds the chart.
- , hidden = true // start off hidden, toggle with hide/show functions below
- , hideDelay = 400 // delay before the tooltip hides after calling hide()
- , tooltip = null // d3 select of tooltipElem below
- , tooltipElem = null //actual DOM element representing the tooltip.
- , position = {left: null, top: null} //Relative position of the tooltip inside chartContainer.
- , offset = {left: 0, top: 0} //Offset of tooltip against the pointer
- , enabled = true //True -> tooltips are rendered. False -> don't render tooltips.
- , duration = 100 // duration for tooltip movement
- , headerEnabled = true
- ;
-
- // set to true by interactive layer to adjust tooltip positions
- // eventually we should probably fix interactive layer to get the position better.
- // for now this is needed if you want to set chartContainer for normal tooltips, else it "fixes" it to broken
- var isInteractiveLayer = false;
-
- //Generates a unique id when you create a new tooltip() object
- var id = "nvtooltip-" + Math.floor(Math.random() * 100000);
-
- //CSS class to specify whether element should not have mouse events.
- var nvPointerEventsClass = "nv-pointer-events-none";
-
- //Format function for the tooltip values column
- var valueFormatter = function(d,i) {
- return d;
- };
-
- //Format function for the tooltip header value.
- var headerFormatter = function(d) {
- return d;
- };
-
- var keyFormatter = function(d, i) {
- return d;
- };
-
- //By default, the tooltip model renders a beautiful table inside a DIV.
- //You can override this function if a custom tooltip is desired.
- var contentGenerator = function(d) {
- if (d === null) {
- return '';
- }
-
- var table = d3.select(document.createElement("table"));
- if (headerEnabled) {
- var theadEnter = table.selectAll("thead")
- .data([d])
- .enter().append("thead");
-
- theadEnter.append("tr")
- .append("td")
- .attr("colspan", 3)
- .append("strong")
- .classed("x-value", true)
- .html(headerFormatter(d.value));
- }
-
- var tbodyEnter = table.selectAll("tbody")
- .data([d])
- .enter().append("tbody");
-
- var trowEnter = tbodyEnter.selectAll("tr")
- .data(function(p) { return p.series})
- .enter()
- .append("tr")
- .classed("highlight", function(p) { return p.highlight});
-
- trowEnter.append("td")
- .classed("legend-color-guide",true)
- .append("div")
- .style("background-color", function(p) { return p.color});
-
- trowEnter.append("td")
- .classed("key",true)
- .html(function(p, i) {return keyFormatter(p.key, i)});
-
- trowEnter.append("td")
- .classed("value",true)
- .html(function(p, i) { return valueFormatter(p.value, i) });
-
-
- trowEnter.selectAll("td").each(function(p) {
- if (p.highlight) {
- var opacityScale = d3.scale.linear().domain([0,1]).range(["#fff",p.color]);
- var opacity = 0.6;
- d3.select(this)
- .style("border-bottom-color", opacityScale(opacity))
- .style("border-top-color", opacityScale(opacity))
- ;
- }
- });
-
- var html = table.node().outerHTML;
- if (d.footer !== undefined)
- html += "<div class='footer'>" + d.footer + "</div>";
- return html;
-
- };
-
- var dataSeriesExists = function(d) {
- if (d && d.series) {
- if (d.series instanceof Array) {
- return !!d.series.length;
- }
- // if object, it's okay just convert to array of the object
- if (d.series instanceof Object) {
- d.series = [d.series];
- return true;
- }
- }
- return false;
- };
-
- var calcTooltipPosition = function(pos) {
- if (!tooltipElem) return;
-
- nv.dom.read(function() {
- var height = parseInt(tooltipElem.offsetHeight, 10),
- width = parseInt(tooltipElem.offsetWidth, 10),
- windowWidth = nv.utils.windowSize().width,
- windowHeight = nv.utils.windowSize().height,
- scrollTop = window.pageYOffset,
- scrollLeft = window.pageXOffset,
- left, top;
-
- windowHeight = window.innerWidth >= document.body.scrollWidth ? windowHeight : windowHeight - 16;
- windowWidth = window.innerHeight >= document.body.scrollHeight ? windowWidth : windowWidth - 16;
-
-
- //Helper functions to find the total offsets of a given DOM element.
- //Looks up the entire ancestry of an element, up to the first relatively positioned element.
- var tooltipTop = function ( Elem ) {
- var offsetTop = top;
- do {
- if( !isNaN( Elem.offsetTop ) ) {
- offsetTop += (Elem.offsetTop);
- }
- Elem = Elem.offsetParent;
- } while( Elem );
- return offsetTop;
- };
- var tooltipLeft = function ( Elem ) {
- var offsetLeft = left;
- do {
- if( !isNaN( Elem.offsetLeft ) ) {
- offsetLeft += (Elem.offsetLeft);
- }
- Elem = Elem.offsetParent;
- } while( Elem );
- return offsetLeft;
- };
-
- // calculate position based on gravity
- var tLeft, tTop;
- switch (gravity) {
- case 'e':
- left = pos[0] - width - distance;
- top = pos[1] - (height / 2);
- tLeft = tooltipLeft(tooltipElem);
- tTop = tooltipTop(tooltipElem);
- if (tLeft < scrollLeft) left = pos[0] + distance > scrollLeft ? pos[0] + distance : scrollLeft - tLeft + left;
- if (tTop < scrollTop) top = scrollTop - tTop + top;
- if (tTop + height > scrollTop + windowHeight) top = scrollTop + windowHeight - tTop + top - height;
- break;
- case 'w':
- left = pos[0] + distance;
- top = pos[1] - (height / 2);
- tLeft = tooltipLeft(tooltipElem);
- tTop = tooltipTop(tooltipElem);
- if (tLeft + width > windowWidth) left = pos[0] - width - distance;
- if (tTop < scrollTop) top = scrollTop + 5;
- if (tTop + height > scrollTop + windowHeight) top = scrollTop + windowHeight - tTop + top - height;
- break;
- case 'n':
- left = pos[0] - (width / 2) - 5;
- top = pos[1] + distance;
- tLeft = tooltipLeft(tooltipElem);
- tTop = tooltipTop(tooltipElem);
- if (tLeft < scrollLeft) left = scrollLeft + 5;
- if (tLeft + width > windowWidth) left = left - width/2 + 5;
- if (tTop + height > scrollTop + windowHeight) top = scrollTop + windowHeight - tTop + top - height;
- break;
- case 's':
- left = pos[0] - (width / 2);
- top = pos[1] - height - distance;
- tLeft = tooltipLeft(tooltipElem);
- tTop = tooltipTop(tooltipElem);
- if (tLeft < scrollLeft) left = scrollLeft + 5;
- if (tLeft + width > windowWidth) left = left - width/2 + 5;
- if (scrollTop > tTop) top = scrollTop;
- break;
- case 'none':
- left = pos[0];
- top = pos[1] - distance;
- tLeft = tooltipLeft(tooltipElem);
- tTop = tooltipTop(tooltipElem);
- break;
- }
-
- // adjust tooltip offsets
- left -= offset.left;
- top -= offset.top;
-
- // using tooltip.style('transform') returns values un-usable for tween
- var box = tooltipElem.getBoundingClientRect();
- var scrollTop = window.pageYOffset || document.documentElement.scrollTop;
- var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;
- var old_translate = 'translate(' + (box.left + scrollLeft) + 'px, ' + (box.top + scrollTop) + 'px)';
- var new_translate = 'translate(' + left + 'px, ' + top + 'px)';
- var translateInterpolator = d3.interpolateString(old_translate, new_translate);
-
- var is_hidden = tooltip.style('opacity') < 0.1;
-
- // delay hiding a bit to avoid flickering
- if (hidden) {
- tooltip
- .transition()
- .delay(hideDelay)
- .duration(0)
- .style('opacity', 0);
- } else {
- tooltip
- .interrupt() // cancel running transitions
- .transition()
- .duration(is_hidden ? 0 : duration)
- // using tween since some versions of d3 can't auto-tween a translate on a div
- .styleTween('transform', function (d) {
- return translateInterpolator;
- }, 'important')
- // Safari has its own `-webkit-transform` and does not support `transform`
- // transform tooltip without transition only in Safari
- .style('-webkit-transform', new_translate)
- .style('opacity', 1);
- }
-
-
-
- });
- };
-
- //In situations where the chart is in a 'viewBox', re-position the tooltip based on how far chart is zoomed.
- function convertViewBoxRatio() {
- if (chartContainer) {
- var svg = d3.select(chartContainer);
- if (svg.node().tagName !== "svg") {
- svg = svg.select("svg");
- }
- var viewBox = (svg.node()) ? svg.attr('viewBox') : null;
- if (viewBox) {
- viewBox = viewBox.split(' ');
- var ratio = parseInt(svg.style('width'), 10) / viewBox[2];
-
- position.left = position.left * ratio;
- position.top = position.top * ratio;
- }
- }
- }
-
- //Creates new tooltip container, or uses existing one on DOM.
- function initTooltip() {
- if (!tooltip) {
- var body;
- if (chartContainer) {
- body = chartContainer;
- } else {
- body = document.body;
- }
- //Create new tooltip div if it doesn't exist on DOM.
- tooltip = d3.select(body).append("div")
- .attr("class", "nvtooltip " + (classes ? classes : "xy-tooltip"))
- .attr("id", id);
- tooltip.style("top", 0).style("left", 0);
- tooltip.style('opacity', 0);
- tooltip.selectAll("div, table, td, tr").classed(nvPointerEventsClass, true);
- tooltip.classed(nvPointerEventsClass, true);
- tooltipElem = tooltip.node();
- }
- }
-
- //Draw the tooltip onto the DOM.
- function nvtooltip() {
- if (!enabled) return;
- if (!dataSeriesExists(data)) return;
-
- convertViewBoxRatio();
-
- var left = position.left;
- var top = (fixedTop !== null) ? fixedTop : position.top;
-
- nv.dom.write(function () {
- initTooltip();
- // generate data and set it into tooltip
- // Bonus - If you override contentGenerator and return falsey you can use something like
- // React or Knockout to bind the data for your tooltip
- var newContent = contentGenerator(data);
- if (newContent) {
- tooltipElem.innerHTML = newContent;
- }
-
- if (chartContainer && isInteractiveLayer) {
- nv.dom.read(function() {
- var svgComp = chartContainer.getElementsByTagName("svg")[0];
- var svgOffset = {left:0,top:0};
- if (svgComp) {
- var svgBound = svgComp.getBoundingClientRect();
- var chartBound = chartContainer.getBoundingClientRect();
- var svgBoundTop = svgBound.top;
-
- //Defensive code. Sometimes, svgBoundTop can be a really negative
- // number, like -134254. That's a bug.
- // If such a number is found, use zero instead. FireFox bug only
- if (svgBoundTop < 0) {
- var containerBound = chartContainer.getBoundingClientRect();
- svgBoundTop = (Math.abs(svgBoundTop) > containerBound.height) ? 0 : svgBoundTop;
- }
- svgOffset.top = Math.abs(svgBoundTop - chartBound.top);
- svgOffset.left = Math.abs(svgBound.left - chartBound.left);
- }
- //If the parent container is an overflow <div> with scrollbars, subtract the scroll offsets.
- //You need to also add any offset between the <svg> element and its containing <div>
- //Finally, add any offset of the containing <div> on the whole page.
- left += chartContainer.offsetLeft + svgOffset.left - 2*chartContainer.scrollLeft;
- top += chartContainer.offsetTop + svgOffset.top - 2*chartContainer.scrollTop;
-
- if (snapDistance && snapDistance > 0) {
- top = Math.floor(top/snapDistance) * snapDistance;
- }
- calcTooltipPosition([left,top]);
- });
- } else {
- calcTooltipPosition([left,top]);
- }
- });
-
- return nvtooltip;
- }
-
- nvtooltip.nvPointerEventsClass = nvPointerEventsClass;
- nvtooltip.options = nv.utils.optionsFunc.bind(nvtooltip);
-
- nvtooltip._options = Object.create({}, {
- // simple read/write options
- duration: {get: function(){return duration;}, set: function(_){duration=_;}},
- gravity: {get: function(){return gravity;}, set: function(_){gravity=_;}},
- distance: {get: function(){return distance;}, set: function(_){distance=_;}},
- snapDistance: {get: function(){return snapDistance;}, set: function(_){snapDistance=_;}},
- classes: {get: function(){return classes;}, set: function(_){classes=_;}},
- chartContainer: {get: function(){return chartContainer;}, set: function(_){chartContainer=_;}},
- fixedTop: {get: function(){return fixedTop;}, set: function(_){fixedTop=_;}},
- enabled: {get: function(){return enabled;}, set: function(_){enabled=_;}},
- hideDelay: {get: function(){return hideDelay;}, set: function(_){hideDelay=_;}},
- contentGenerator: {get: function(){return contentGenerator;}, set: function(_){contentGenerator=_;}},
- valueFormatter: {get: function(){return valueFormatter;}, set: function(_){valueFormatter=_;}},
- headerFormatter: {get: function(){return headerFormatter;}, set: function(_){headerFormatter=_;}},
- keyFormatter: {get: function(){return keyFormatter;}, set: function(_){keyFormatter=_;}},
- headerEnabled: {get: function(){return headerEnabled;}, set: function(_){headerEnabled=_;}},
-
- // internal use only, set by interactive layer to adjust position.
- _isInteractiveLayer: {get: function(){return isInteractiveLayer;}, set: function(_){isInteractiveLayer=!!_;}},
-
- // options with extra logic
- position: {get: function(){return position;}, set: function(_){
- position.left = _.left !== undefined ? _.left : position.left;
- position.top = _.top !== undefined ? _.top : position.top;
- }},
- offset: {get: function(){return offset;}, set: function(_){
- offset.left = _.left !== undefined ? _.left : offset.left;
- offset.top = _.top !== undefined ? _.top : offset.top;
- }},
- hidden: {get: function(){return hidden;}, set: function(_){
- if (hidden != _) {
- hidden = !!_;
- nvtooltip();
- }
- }},
- data: {get: function(){return data;}, set: function(_){
- // if showing a single data point, adjust data format with that
- if (_.point) {
- _.value = _.point.x;
- _.series = _.series || {};
- _.series.value = _.point.y;
- _.series.color = _.point.color || _.series.color;
- }
- data = _;
- }},
-
- // read only properties
- tooltipElem: {get: function(){return tooltipElem;}, set: function(_){}},
- id: {get: function(){return id;}, set: function(_){}}
- });
-
- nv.utils.initOptions(nvtooltip);
- return nvtooltip;
- };
-
-})();
-
-
-/*
-Gets the browser window size
-
-Returns object with height and width properties
- */
-nv.utils.windowSize = function() {
- // Sane defaults
- var size = {width: 640, height: 480};
-
- // Most recent browsers use
- if (window.innerWidth && window.innerHeight) {
- size.width = window.innerWidth;
- size.height = window.innerHeight;
- return (size);
- }
-
- // IE can use depending on mode it is in
- if (document.compatMode=='CSS1Compat' &&
- document.documentElement &&
- document.documentElement.offsetWidth ) {
-
- size.width = document.documentElement.offsetWidth;
- size.height = document.documentElement.offsetHeight;
- return (size);
- }
-
- // Earlier IE uses Doc.body
- if (document.body && document.body.offsetWidth) {
- size.width = document.body.offsetWidth;
- size.height = document.body.offsetHeight;
- return (size);
- }
-
- return (size);
-};
-
-/*
-Binds callback function to run when window is resized
- */
-nv.utils.windowResize = function(handler) {
- if (window.addEventListener) {
- window.addEventListener('resize', handler);
- } else {
- nv.log("ERROR: Failed to bind to window.resize with: ", handler);
- }
- // return object with clear function to remove the single added callback.
- return {
- callback: handler,
- clear: function() {
- window.removeEventListener('resize', handler);
- }
- }
-};
-
-
-/*
-Backwards compatible way to implement more d3-like coloring of graphs.
-Can take in nothing, an array, or a function/scale
-To use a normal scale, get the range and pass that because we must be able
-to take two arguments and use the index to keep backward compatibility
-*/
-nv.utils.getColor = function(color) {
- //if you pass in nothing, get default colors back
- if (color === undefined) {
- return nv.utils.defaultColor();
-
- //if passed an array, turn it into a color scale
- // use isArray, instanceof fails if d3 range is created in an iframe
- } else if(Array.isArray(color)) {
- var color_scale = d3.scale.ordinal().range(color);
- return function(d, i) {
- var key = i === undefined ? d : i;
- return d.color || color_scale(key);
- };
-
- //if passed a function or scale, return it, or whatever it may be
- //external libs, such as angularjs-nvd3-directives use this
- } else {
- //can't really help it if someone passes rubbish as color
- return color;
- }
-};
-
-
-/*
-Default color chooser uses a color scale of 20 colors from D3
- https://github.com/mbostock/d3/wiki/Ordinal-Scales#categorical-colors
- */
-nv.utils.defaultColor = function() {
- // get range of the scale so we'll turn it into our own function.
- return nv.utils.getColor(d3.scale.category20().range());
-};
-
-
-/*
-Returns a color function that takes the result of 'getKey' for each series and
-looks for a corresponding color from the dictionary
-*/
-nv.utils.customTheme = function(dictionary, getKey, defaultColors) {
- // use default series.key if getKey is undefined
- getKey = getKey || function(series) { return series.key };
- defaultColors = defaultColors || d3.scale.category20().range();
-
- // start at end of default color list and walk back to index 0
- var defIndex = defaultColors.length;
-
- return function(series, index) {
- var key = getKey(series);
- if (typeof dictionary[key] === 'function') {
- return dictionary[key]();
- } else if (dictionary[key] !== undefined) {
- return dictionary[key];
- } else {
- // no match in dictionary, use a default color
- if (!defIndex) {
- // used all the default colors, start over
- defIndex = defaultColors.length;
- }
- defIndex = defIndex - 1;
- return defaultColors[defIndex];
- }
- };
-};
-
-
-/*
-From the PJAX example on d3js.org, while this is not really directly needed
-it's a very cool method for doing pjax, I may expand upon it a little bit,
-open to suggestions on anything that may be useful
-*/
-nv.utils.pjax = function(links, content) {
-
- var load = function(href) {
- d3.html(href, function(fragment) {
- var target = d3.select(content).node();
- target.parentNode.replaceChild(
- d3.select(fragment).select(content).node(),
- target);
- nv.utils.pjax(links, content);
- });
- };
-
- d3.selectAll(links).on("click", function() {
- history.pushState(this.href, this.textContent, this.href);
- load(this.href);
- d3.event.preventDefault();
- });
-
- d3.select(window).on("popstate", function() {
- if (d3.event.state) {
- load(d3.event.state);
- }
- });
-};
-
-
-/*
-For when we want to approximate the width in pixels for an SVG:text element.
-Most common instance is when the element is in a display:none; container.
-Forumla is : text.length * font-size * constant_factor
-*/
-nv.utils.calcApproxTextWidth = function (svgTextElem) {
- if (typeof svgTextElem.style === 'function'
- && typeof svgTextElem.text === 'function') {
-
- var fontSize = parseInt(svgTextElem.style("font-size").replace("px",""), 10);
- var textLength = svgTextElem.text().length;
- return textLength * fontSize * 0.5;
- }
- return 0;
-};
-
-
-/*
-Numbers that are undefined, null or NaN, convert them to zeros.
-*/
-nv.utils.NaNtoZero = function(n) {
- if (typeof n !== 'number'
- || isNaN(n)
- || n === null
- || n === Infinity
- || n === -Infinity) {
-
- return 0;
- }
- return n;
-};
-
-/*
-Add a way to watch for d3 transition ends to d3
-*/
-d3.selection.prototype.watchTransition = function(renderWatch){
- var args = [this].concat([].slice.call(arguments, 1));
- return renderWatch.transition.apply(renderWatch, args);
-};
-
-
-/*
-Helper object to watch when d3 has rendered something
-*/
-nv.utils.renderWatch = function(dispatch, duration) {
- if (!(this instanceof nv.utils.renderWatch)) {
- return new nv.utils.renderWatch(dispatch, duration);
- }
-
- var _duration = duration !== undefined ? duration : 250;
- var renderStack = [];
- var self = this;
-
- this.models = function(models) {
- models = [].slice.call(arguments, 0);
- models.forEach(function(model){
- model.__rendered = false;
- (function(m){
- m.dispatch.on('renderEnd', function(arg){
- m.__rendered = true;
- self.renderEnd('model');
- });
- })(model);
-
- if (renderStack.indexOf(model) < 0) {
- renderStack.push(model);
- }
- });
- return this;
- };
-
- this.reset = function(duration) {
- if (duration !== undefined) {
- _duration = duration;
- }
- renderStack = [];
- };
-
- this.transition = function(selection, args, duration) {
- args = arguments.length > 1 ? [].slice.call(arguments, 1) : [];
-
- if (args.length > 1) {
- duration = args.pop();
- } else {
- duration = _duration !== undefined ? _duration : 250;
- }
- selection.__rendered = false;
-
- if (renderStack.indexOf(selection) < 0) {
- renderStack.push(selection);
- }
-
- if (duration === 0) {
- selection.__rendered = true;
- selection.delay = function() { return this; };
- selection.duration = function() { return this; };
- return selection;
- } else {
- if (selection.length === 0) {
- selection.__rendered = true;
- } else if (selection.every( function(d){ return !d.length; } )) {
- selection.__rendered = true;
- } else {
- selection.__rendered = false;
- }
-
- var n = 0;
- return selection
- .transition()
- .duration(duration)
- .each(function(){ ++n; })
- .each('end', function(d, i) {
- if (--n === 0) {
- selection.__rendered = true;
- self.renderEnd.apply(this, args);
- }
- });
- }
- };
-
- this.renderEnd = function() {
- if (renderStack.every( function(d){ return d.__rendered; } )) {
- renderStack.forEach( function(d){ d.__rendered = false; });
- dispatch.renderEnd.apply(this, arguments);
- }
- }
-
-};
-
-
-/*
-Takes multiple objects and combines them into the first one (dst)
-example: nv.utils.deepExtend({a: 1}, {a: 2, b: 3}, {c: 4});
-gives: {a: 2, b: 3, c: 4}
-*/
-nv.utils.deepExtend = function(dst){
- var sources = arguments.length > 1 ? [].slice.call(arguments, 1) : [];
- sources.forEach(function(source) {
- for (var key in source) {
- var isArray = dst[key] instanceof Array;
- var isObject = typeof dst[key] === 'object';
- var srcObj = typeof source[key] === 'object';
-
- if (isObject && !isArray && srcObj) {
- nv.utils.deepExtend(dst[key], source[key]);
- } else {
- dst[key] = source[key];
- }
- }
- });
-};
-
-
-/*
-state utility object, used to track d3 states in the models
-*/
-nv.utils.state = function(){
- if (!(this instanceof nv.utils.state)) {
- return new nv.utils.state();
- }
- var state = {};
- var _self = this;
- var _setState = function(){};
- var _getState = function(){ return {}; };
- var init = null;
- var changed = null;
-
- this.dispatch = d3.dispatch('change', 'set');
-
- this.dispatch.on('set', function(state){
- _setState(state, true);
- });
-
- this.getter = function(fn){
- _getState = fn;
- return this;
- };
-
- this.setter = function(fn, callback) {
- if (!callback) {
- callback = function(){};
- }
- _setState = function(state, update){
- fn(state);
- if (update) {
- callback();
- }
- };
- return this;
- };
-
- this.init = function(state){
- init = init || {};
- nv.utils.deepExtend(init, state);
- };
-
- var _set = function(){
- var settings = _getState();
-
- if (JSON.stringify(settings) === JSON.stringify(state)) {
- return false;
- }
-
- for (var key in settings) {
- if (state[key] === undefined) {
- state[key] = {};
- }
- state[key] = settings[key];
- changed = true;
- }
- return true;
- };
-
- this.update = function(){
- if (init) {
- _setState(init, false);
- init = null;
- }
- if (_set.call(this)) {
- this.dispatch.change(state);
- }
- };
-
-};
-
-
-/*
-Snippet of code you can insert into each nv.models.* to give you the ability to
-do things like:
-chart.options({
- showXAxis: true,
- tooltips: true
-});
-
-To enable in the chart:
-chart.options = nv.utils.optionsFunc.bind(chart);
-*/
-nv.utils.optionsFunc = function(args) {
- if (args) {
- d3.map(args).forEach((function(key,value) {
- if (typeof this[key] === "function") {
- this[key](value);
- }
- }).bind(this));
- }
- return this;
-};
-
-
-/*
-numTicks: requested number of ticks
-data: the chart data
-
-returns the number of ticks to actually use on X axis, based on chart data
-to avoid duplicate ticks with the same value
-*/
-nv.utils.calcTicksX = function(numTicks, data) {
- // find max number of values from all data streams
- var numValues = 1;
- var i = 0;
- for (i; i < data.length; i += 1) {
- var stream_len = data[i] && data[i].values ? data[i].values.length : 0;
- numValues = stream_len > numValues ? stream_len : numValues;
- }
- nv.log("Requested number of ticks: ", numTicks);
- nv.log("Calculated max values to be: ", numValues);
- // make sure we don't have more ticks than values to avoid duplicates
- numTicks = numTicks > numValues ? numTicks = numValues - 1 : numTicks;
- // make sure we have at least one tick
- numTicks = numTicks < 1 ? 1 : numTicks;
- // make sure it's an integer
- numTicks = Math.floor(numTicks);
- nv.log("Calculating tick count as: ", numTicks);
- return numTicks;
-};
-
-
-/*
-returns number of ticks to actually use on Y axis, based on chart data
-*/
-nv.utils.calcTicksY = function(numTicks, data) {
- // currently uses the same logic but we can adjust here if needed later
- return nv.utils.calcTicksX(numTicks, data);
-};
-
-
-/*
-Add a particular option from an options object onto chart
-Options exposed on a chart are a getter/setter function that returns chart
-on set to mimic typical d3 option chaining, e.g. svg.option1('a').option2('b');
-
-option objects should be generated via Object.create() to provide
-the option of manipulating data via get/set functions.
-*/
-nv.utils.initOption = function(chart, name) {
- // if it's a call option, just call it directly, otherwise do get/set
- if (chart._calls && chart._calls[name]) {
- chart[name] = chart._calls[name];
- } else {
- chart[name] = function (_) {
- if (!arguments.length) return chart._options[name];
- chart._overrides[name] = true;
- chart._options[name] = _;
- return chart;
- };
- // calling the option as _option will ignore if set by option already
- // so nvd3 can set options internally but the stop if set manually
- chart['_' + name] = function(_) {
- if (!arguments.length) return chart._options[name];
- if (!chart._overrides[name]) {
- chart._options[name] = _;
- }
- return chart;
- }
- }
-};
-
-
-/*
-Add all options in an options object to the chart
-*/
-nv.utils.initOptions = function(chart) {
- chart._overrides = chart._overrides || {};
- var ops = Object.getOwnPropertyNames(chart._options || {});
- var calls = Object.getOwnPropertyNames(chart._calls || {});
- ops = ops.concat(calls);
- for (var i in ops) {
- nv.utils.initOption(chart, ops[i]);
- }
-};
-
-
-/*
-Inherit options from a D3 object
-d3.rebind makes calling the function on target actually call it on source
-Also use _d3options so we can track what we inherit for documentation and chained inheritance
-*/
-nv.utils.inheritOptionsD3 = function(target, d3_source, oplist) {
- target._d3options = oplist.concat(target._d3options || []);
- oplist.unshift(d3_source);
- oplist.unshift(target);
- d3.rebind.apply(this, oplist);
-};
-
-
-/*
-Remove duplicates from an array
-*/
-nv.utils.arrayUnique = function(a) {
- return a.sort().filter(function(item, pos) {
- return !pos || item != a[pos - 1];
- });
-};
-
-
-/*
-Keeps a list of custom symbols to draw from in addition to d3.svg.symbol
-Necessary since d3 doesn't let you extend its list -_-
-Add new symbols by doing nv.utils.symbols.set('name', function(size){...});
-*/
-nv.utils.symbolMap = d3.map();
-
-
-/*
-Replaces d3.svg.symbol so that we can look both there and our own map
- */
-nv.utils.symbol = function() {
- var type,
- size = 64;
- function symbol(d,i) {
- var t = type.call(this,d,i);
- var s = size.call(this,d,i);
- if (d3.svg.symbolTypes.indexOf(t) !== -1) {
- return d3.svg.symbol().type(t).size(s)();
- } else {
- return nv.utils.symbolMap.get(t)(s);
- }
- }
- symbol.type = function(_) {
- if (!arguments.length) return type;
- type = d3.functor(_);
- return symbol;
- };
- symbol.size = function(_) {
- if (!arguments.length) return size;
- size = d3.functor(_);
- return symbol;
- };
- return symbol;
-};
-
-
-/*
-Inherit option getter/setter functions from source to target
-d3.rebind makes calling the function on target actually call it on source
-Also track via _inherited and _d3options so we can track what we inherit
-for documentation generation purposes and chained inheritance
-*/
-nv.utils.inheritOptions = function(target, source) {
- // inherit all the things
- var ops = Object.getOwnPropertyNames(source._options || {});
- var calls = Object.getOwnPropertyNames(source._calls || {});
- var inherited = source._inherited || [];
- var d3ops = source._d3options || [];
- var args = ops.concat(calls).concat(inherited).concat(d3ops);
- args.unshift(source);
- args.unshift(target);
- d3.rebind.apply(this, args);
- // pass along the lists to keep track of them, don't allow duplicates
- target._inherited = nv.utils.arrayUnique(ops.concat(calls).concat(inherited).concat(ops).concat(target._inherited || []));
- target._d3options = nv.utils.arrayUnique(d3ops.concat(target._d3options || []));
-};
-
-
-/*
-Runs common initialize code on the svg before the chart builds
-*/
-nv.utils.initSVG = function(svg) {
- svg.classed({'nvd3-svg':true});
-};
-
-
-/*
-Sanitize and provide default for the container height.
-*/
-nv.utils.sanitizeHeight = function(height, container) {
- return (height || parseInt(container.style('height'), 10) || 400);
-};
-
-
-/*
-Sanitize and provide default for the container width.
-*/
-nv.utils.sanitizeWidth = function(width, container) {
- return (width || parseInt(container.style('width'), 10) || 960);
-};
-
-
-/*
-Calculate the available height for a chart.
-*/
-nv.utils.availableHeight = function(height, container, margin) {
- return nv.utils.sanitizeHeight(height, container) - margin.top - margin.bottom;
-};
-
-/*
-Calculate the available width for a chart.
-*/
-nv.utils.availableWidth = function(width, container, margin) {
- return nv.utils.sanitizeWidth(width, container) - margin.left - margin.right;
-};
-
-/*
-Clear any rendered chart components and display a chart's 'noData' message
-*/
-nv.utils.noData = function(chart, container) {
- var opt = chart.options(),
- margin = opt.margin(),
- noData = opt.noData(),
- data = (noData == null) ? ["No Data Available."] : [noData],
- height = nv.utils.availableHeight(opt.height(), container, margin),
- width = nv.utils.availableWidth(opt.width(), container, margin),
- x = margin.left + width/2,
- y = margin.top + height/2;
-
- //Remove any previously created chart components
- container.selectAll('g').remove();
-
- var noDataText = container.selectAll('.nv-noData').data(data);
-
- noDataText.enter().append('text')
- .attr('class', 'nvd3 nv-noData')
- .attr('dy', '-.7em')
- .style('text-anchor', 'middle');
-
- noDataText
- .attr('x', x)
- .attr('y', y)
- .text(function(t){ return t; });
-};
-
-nv.models.axis = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var axis = d3.svg.axis();
- var scale = d3.scale.linear();
-
- var margin = {top: 0, right: 0, bottom: 0, left: 0}
- , width = 75 //only used for tickLabel currently
- , height = 60 //only used for tickLabel currently
- , axisLabelText = null
- , showMaxMin = false //TODO: showMaxMin should be disabled on all ordinal scaled axes
- , rotateLabels = 0
- , rotateYLabel = true
- , staggerLabels = false
- , isOrdinal = false
- , ticks = null
- , axisLabelDistance = 0
- , duration = 250
- , dispatch = d3.dispatch('renderEnd')
- ;
- axis
- .scale(scale)
- .orient('bottom')
- .tickFormat(function(d) { return d })
- ;
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var scale0;
- var renderWatch = nv.utils.renderWatch(dispatch, duration);
-
- function chart(selection) {
- renderWatch.reset();
- selection.each(function(data) {
- var container = d3.select(this);
- nv.utils.initSVG(container);
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-axis').data([data]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-axis');
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- if (ticks !== null)
- axis.ticks(ticks);
- else if (axis.orient() == 'top' || axis.orient() == 'bottom')
- axis.ticks(Math.abs(scale.range()[1] - scale.range()[0]) / 100);
-
- //TODO: consider calculating width/height based on whether or not label is added, for reference in charts using this component
- g.watchTransition(renderWatch, 'axis').call(axis);
-
- scale0 = scale0 || axis.scale();
-
- var fmt = axis.tickFormat();
- if (fmt == null) {
- fmt = scale0.tickFormat();
- }
-
- var axisLabel = g.selectAll('text.nv-axislabel')
- .data([axisLabelText || null]);
- axisLabel.exit().remove();
-
- var xLabelMargin;
- var axisMaxMin;
- var w;
- switch (axis.orient()) {
- case 'top':
- axisLabel.enter().append('text').attr('class', 'nv-axislabel');
- if (scale.range().length < 2) {
- w = 0;
- } else if (scale.range().length === 2) {
- w = scale.range()[1];
- } else {
- w = scale.range()[scale.range().length-1]+(scale.range()[1]-scale.range()[0]);
- }
- axisLabel
- .attr('text-anchor', 'middle')
- .attr('y', 0)
- .attr('x', w/2);
- if (showMaxMin) {
- axisMaxMin = wrap.selectAll('g.nv-axisMaxMin')
- .data(scale.domain());
- axisMaxMin.enter().append('g').attr('class',function(d,i){
- return ['nv-axisMaxMin','nv-axisMaxMin-x',(i == 0 ? 'nv-axisMin-x':'nv-axisMax-x')].join(' ')
- }).append('text');
- axisMaxMin.exit().remove();
- axisMaxMin
- .attr('transform', function(d,i) {
- return 'translate(' + nv.utils.NaNtoZero(scale(d)) + ',0)'
- })
- .select('text')
- .attr('dy', '-0.5em')
- .attr('y', -axis.tickPadding())
- .attr('text-anchor', 'middle')
- .text(function(d,i) {
- var v = fmt(d);
- return ('' + v).match('NaN') ? '' : v;
- });
- axisMaxMin.watchTransition(renderWatch, 'min-max top')
- .attr('transform', function(d,i) {
- return 'translate(' + nv.utils.NaNtoZero(scale.range()[i]) + ',0)'
- });
- }
- break;
- case 'bottom':
- xLabelMargin = axisLabelDistance + 36;
- var maxTextWidth = 30;
- var textHeight = 0;
- var xTicks = g.selectAll('g').select("text");
- var rotateLabelsRule = '';
- if (rotateLabels%360) {
- //Calculate the longest xTick width
- xTicks.each(function(d,i){
- var box = this.getBoundingClientRect();
- var width = box.width;
- textHeight = box.height;
- if(width > maxTextWidth) maxTextWidth = width;
- });
- rotateLabelsRule = 'rotate(' + rotateLabels + ' 0,' + (textHeight/2 + axis.tickPadding()) + ')';
- //Convert to radians before calculating sin. Add 30 to margin for healthy padding.
- var sin = Math.abs(Math.sin(rotateLabels*Math.PI/180));
- xLabelMargin = (sin ? sin*maxTextWidth : maxTextWidth)+30;
- //Rotate all xTicks
- xTicks
- .attr('transform', rotateLabelsRule)
- .style('text-anchor', rotateLabels%360 > 0 ? 'start' : 'end');
- }
- axisLabel.enter().append('text').attr('class', 'nv-axislabel');
- if (scale.range().length < 2) {
- w = 0;
- } else if (scale.range().length === 2) {
- w = scale.range()[1];
- } else {
- w = scale.range()[scale.range().length-1]+(scale.range()[1]-scale.range()[0]);
- }
- axisLabel
- .attr('text-anchor', 'middle')
- .attr('y', xLabelMargin)
- .attr('x', w/2);
- if (showMaxMin) {
- //if (showMaxMin && !isOrdinal) {
- axisMaxMin = wrap.selectAll('g.nv-axisMaxMin')
- //.data(scale.domain())
- .data([scale.domain()[0], scale.domain()[scale.domain().length - 1]]);
- axisMaxMin.enter().append('g').attr('class',function(d,i){
- return ['nv-axisMaxMin','nv-axisMaxMin-x',(i == 0 ? 'nv-axisMin-x':'nv-axisMax-x')].join(' ')
- }).append('text');
- axisMaxMin.exit().remove();
- axisMaxMin
- .attr('transform', function(d,i) {
- return 'translate(' + nv.utils.NaNtoZero((scale(d) + (isOrdinal ? scale.rangeBand() / 2 : 0))) + ',0)'
- })
- .select('text')
- .attr('dy', '.71em')
- .attr('y', axis.tickPadding())
- .attr('transform', rotateLabelsRule)
- .style('text-anchor', rotateLabels ? (rotateLabels%360 > 0 ? 'start' : 'end') : 'middle')
- .text(function(d,i) {
- var v = fmt(d);
- return ('' + v).match('NaN') ? '' : v;
- });
- axisMaxMin.watchTransition(renderWatch, 'min-max bottom')
- .attr('transform', function(d,i) {
- return 'translate(' + nv.utils.NaNtoZero((scale(d) + (isOrdinal ? scale.rangeBand() / 2 : 0))) + ',0)'
- });
- }
- if (staggerLabels)
- xTicks
- .attr('transform', function(d,i) {
- return 'translate(0,' + (i % 2 == 0 ? '0' : '12') + ')'
- });
-
- break;
- case 'right':
- axisLabel.enter().append('text').attr('class', 'nv-axislabel');
- axisLabel
- .style('text-anchor', rotateYLabel ? 'middle' : 'begin')
- .attr('transform', rotateYLabel ? 'rotate(90)' : '')
- .attr('y', rotateYLabel ? (-Math.max(margin.right, width) + 12) : -10) //TODO: consider calculating this based on largest tick width... OR at least expose this on chart
- .attr('x', rotateYLabel ? (d3.max(scale.range()) / 2) : axis.tickPadding());
- if (showMaxMin) {
- axisMaxMin = wrap.selectAll('g.nv-axisMaxMin')
- .data(scale.domain());
- axisMaxMin.enter().append('g').attr('class',function(d,i){
- return ['nv-axisMaxMin','nv-axisMaxMin-y',(i == 0 ? 'nv-axisMin-y':'nv-axisMax-y')].join(' ')
- }).append('text')
- .style('opacity', 0);
- axisMaxMin.exit().remove();
- axisMaxMin
- .attr('transform', function(d,i) {
- return 'translate(0,' + nv.utils.NaNtoZero(scale(d)) + ')'
- })
- .select('text')
- .attr('dy', '.32em')
- .attr('y', 0)
- .attr('x', axis.tickPadding())
- .style('text-anchor', 'start')
- .text(function(d, i) {
- var v = fmt(d);
- return ('' + v).match('NaN') ? '' : v;
- });
- axisMaxMin.watchTransition(renderWatch, 'min-max right')
- .attr('transform', function(d,i) {
- return 'translate(0,' + nv.utils.NaNtoZero(scale.range()[i]) + ')'
- })
- .select('text')
- .style('opacity', 1);
- }
- break;
- case 'left':
- /*
- //For dynamically placing the label. Can be used with dynamically-sized chart axis margins
- var yTicks = g.selectAll('g').select("text");
- yTicks.each(function(d,i){
- var labelPadding = this.getBoundingClientRect().width + axis.tickPadding() + 16;
- if(labelPadding > width) width = labelPadding;
- });
- */
- axisLabel.enter().append('text').attr('class', 'nv-axislabel');
- axisLabel
- .style('text-anchor', rotateYLabel ? 'middle' : 'end')
- .attr('transform', rotateYLabel ? 'rotate(-90)' : '')
- .attr('y', rotateYLabel ? (-Math.max(margin.left, width) + 25 - (axisLabelDistance || 0)) : -10)
- .attr('x', rotateYLabel ? (-d3.max(scale.range()) / 2) : -axis.tickPadding());
- if (showMaxMin) {
- axisMaxMin = wrap.selectAll('g.nv-axisMaxMin')
- .data(scale.domain());
- axisMaxMin.enter().append('g').attr('class',function(d,i){
- return ['nv-axisMaxMin','nv-axisMaxMin-y',(i == 0 ? 'nv-axisMin-y':'nv-axisMax-y')].join(' ')
- }).append('text')
- .style('opacity', 0);
- axisMaxMin.exit().remove();
- axisMaxMin
- .attr('transform', function(d,i) {
- return 'translate(0,' + nv.utils.NaNtoZero(scale0(d)) + ')'
- })
- .select('text')
- .attr('dy', '.32em')
- .attr('y', 0)
- .attr('x', -axis.tickPadding())
- .attr('text-anchor', 'end')
- .text(function(d,i) {
- var v = fmt(d);
- return ('' + v).match('NaN') ? '' : v;
- });
- axisMaxMin.watchTransition(renderWatch, 'min-max right')
- .attr('transform', function(d,i) {
- return 'translate(0,' + nv.utils.NaNtoZero(scale.range()[i]) + ')'
- })
- .select('text')
- .style('opacity', 1);
- }
- break;
- }
- axisLabel.text(function(d) { return d });
-
- if (showMaxMin && (axis.orient() === 'left' || axis.orient() === 'right')) {
- //check if max and min overlap other values, if so, hide the values that overlap
- g.selectAll('g') // the g's wrapping each tick
- .each(function(d,i) {
- d3.select(this).select('text').attr('opacity', 1);
- if (scale(d) < scale.range()[1] + 10 || scale(d) > scale.range()[0] - 10) { // 10 is assuming text height is 16... if d is 0, leave it!
- if (d > 1e-10 || d < -1e-10) // accounts for minor floating point errors... though could be problematic if the scale is EXTREMELY SMALL
- d3.select(this).attr('opacity', 0);
-
- d3.select(this).select('text').attr('opacity', 0); // Don't remove the ZERO line!!
- }
- });
-
- //if Max and Min = 0 only show min, Issue #281
- if (scale.domain()[0] == scale.domain()[1] && scale.domain()[0] == 0) {
- wrap.selectAll('g.nv-axisMaxMin').style('opacity', function (d, i) {
- return !i ? 1 : 0
- });
- }
- }
-
- if (showMaxMin && (axis.orient() === 'top' || axis.orient() === 'bottom')) {
- var maxMinRange = [];
- wrap.selectAll('g.nv-axisMaxMin')
- .each(function(d,i) {
- try {
- if (i) // i== 1, max position
- maxMinRange.push(scale(d) - this.getBoundingClientRect().width - 4); //assuming the max and min labels are as wide as the next tick (with an extra 4 pixels just in case)
- else // i==0, min position
- maxMinRange.push(scale(d) + this.getBoundingClientRect().width + 4)
- }catch (err) {
- if (i) // i== 1, max position
- maxMinRange.push(scale(d) - 4); //assuming the max and min labels are as wide as the next tick (with an extra 4 pixels just in case)
- else // i==0, min position
- maxMinRange.push(scale(d) + 4);
- }
- });
- // the g's wrapping each tick
- g.selectAll('g').each(function(d, i) {
- if (scale(d) < maxMinRange[0] || scale(d) > maxMinRange[1]) {
- if (d > 1e-10 || d < -1e-10) // accounts for minor floating point errors... though could be problematic if the scale is EXTREMELY SMALL
- d3.select(this).remove();
- else
- d3.select(this).select('text').remove(); // Don't remove the ZERO line!!
- }
- });
- }
-
- //Highlight zero tick line
- g.selectAll('.tick')
- .filter(function (d) {
- /*
- The filter needs to return only ticks at or near zero.
- Numbers like 0.00001 need to count as zero as well,
- and the arithmetic trick below solves that.
- */
- return !parseFloat(Math.round(d * 100000) / 1000000) && (d !== undefined)
- })
- .classed('zero', true);
-
- //store old scales for use in transitions on update
- scale0 = scale.copy();
-
- });
-
- renderWatch.renderEnd('axis immediate');
- return chart;
- }
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- // expose chart's sub-components
- chart.axis = axis;
- chart.dispatch = dispatch;
-
- chart.options = nv.utils.optionsFunc.bind(chart);
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- axisLabelDistance: {get: function(){return axisLabelDistance;}, set: function(_){axisLabelDistance=_;}},
- staggerLabels: {get: function(){return staggerLabels;}, set: function(_){staggerLabels=_;}},
- rotateLabels: {get: function(){return rotateLabels;}, set: function(_){rotateLabels=_;}},
- rotateYLabel: {get: function(){return rotateYLabel;}, set: function(_){rotateYLabel=_;}},
- showMaxMin: {get: function(){return showMaxMin;}, set: function(_){showMaxMin=_;}},
- axisLabel: {get: function(){return axisLabelText;}, set: function(_){axisLabelText=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- ticks: {get: function(){return ticks;}, set: function(_){ticks=_;}},
- width: {get: function(){return width;}, set: function(_){width=_;}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration=_;
- renderWatch.reset(duration);
- }},
- scale: {get: function(){return scale;}, set: function(_){
- scale = _;
- axis.scale(scale);
- isOrdinal = typeof scale.rangeBands === 'function';
- nv.utils.inheritOptionsD3(chart, scale, ['domain', 'range', 'rangeBand', 'rangeBands']);
- }}
- });
-
- nv.utils.initOptions(chart);
- nv.utils.inheritOptionsD3(chart, axis, ['orient', 'tickValues', 'tickSubdivide', 'tickSize', 'tickPadding', 'tickFormat']);
- nv.utils.inheritOptionsD3(chart, scale, ['domain', 'range', 'rangeBand', 'rangeBands']);
-
- return chart;
-};
-nv.models.boxPlot = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 0, right: 0, bottom: 0, left: 0}
- , width = 960
- , height = 500
- , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one
- , x = d3.scale.ordinal()
- , y = d3.scale.linear()
- , getX = function(d) { return d.x }
- , getY = function(d) { return d.y }
- , color = nv.utils.defaultColor()
- , container = null
- , xDomain
- , yDomain
- , xRange
- , yRange
- , dispatch = d3.dispatch('elementMouseover', 'elementMouseout', 'elementMousemove', 'renderEnd')
- , duration = 250
- , maxBoxWidth = null
- ;
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var x0, y0;
- var renderWatch = nv.utils.renderWatch(dispatch, duration);
-
- function chart(selection) {
- renderWatch.reset();
- selection.each(function(data) {
- var availableWidth = width - margin.left - margin.right,
- availableHeight = height - margin.top - margin.bottom;
-
- container = d3.select(this);
- nv.utils.initSVG(container);
-
- // Setup Scales
- x .domain(xDomain || data.map(function(d,i) { return getX(d,i); }))
- .rangeBands(xRange || [0, availableWidth], .1);
-
- // if we know yDomain, no need to calculate
- var yData = []
- if (!yDomain) {
- // (y-range is based on quartiles, whiskers and outliers)
-
- // lower values
- var yMin = d3.min(data.map(function(d) {
- var min_arr = [];
-
- min_arr.push(d.values.Q1);
- if (d.values.hasOwnProperty('whisker_low') && d.values.whisker_low !== null) { min_arr.push(d.values.whisker_low); }
- if (d.values.hasOwnProperty('outliers') && d.values.outliers !== null) { min_arr = min_arr.concat(d.values.outliers); }
-
- return d3.min(min_arr);
- }));
-
- // upper values
- var yMax = d3.max(data.map(function(d) {
- var max_arr = [];
-
- max_arr.push(d.values.Q3);
- if (d.values.hasOwnProperty('whisker_high') && d.values.whisker_high !== null) { max_arr.push(d.values.whisker_high); }
- if (d.values.hasOwnProperty('outliers') && d.values.outliers !== null) { max_arr = max_arr.concat(d.values.outliers); }
-
- return d3.max(max_arr);
- }));
-
- yData = [ yMin, yMax ] ;
- }
-
- y.domain(yDomain || yData);
- y.range(yRange || [availableHeight, 0]);
-
- //store old scales if they exist
- x0 = x0 || x;
- y0 = y0 || y.copy().range([y(0),y(0)]);
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap').data([data]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap');
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- var boxplots = wrap.selectAll('.nv-boxplot').data(function(d) { return d });
- var boxEnter = boxplots.enter().append('g').style('stroke-opacity', 1e-6).style('fill-opacity', 1e-6);
- boxplots
- .attr('class', 'nv-boxplot')
- .attr('transform', function(d,i,j) { return 'translate(' + (x(getX(d,i)) + x.rangeBand() * .05) + ', 0)'; })
- .classed('hover', function(d) { return d.hover });
- boxplots
- .watchTransition(renderWatch, 'nv-boxplot: boxplots')
- .style('stroke-opacity', 1)
- .style('fill-opacity', .75)
- .delay(function(d,i) { return i * duration / data.length })
- .attr('transform', function(d,i) {
- return 'translate(' + (x(getX(d,i)) + x.rangeBand() * .05) + ', 0)';
- });
- boxplots.exit().remove();
-
- // ----- add the SVG elements for each boxPlot -----
-
- // conditionally append whisker lines
- boxEnter.each(function(d,i) {
- var box = d3.select(this);
-
- ['low', 'high'].forEach(function(key) {
- if (d.values.hasOwnProperty('whisker_' + key) && d.values['whisker_' + key] !== null) {
- box.append('line')
- .style('stroke', (d.color) ? d.color : color(d,i))
- .attr('class', 'nv-boxplot-whisker nv-boxplot-' + key);
-
- box.append('line')
- .style('stroke', (d.color) ? d.color : color(d,i))
- .attr('class', 'nv-boxplot-tick nv-boxplot-' + key);
- }
- });
- });
-
- // outliers
- // TODO: support custom colors here
- var outliers = boxplots.selectAll('.nv-boxplot-outlier').data(function(d) {
- if (d.values.hasOwnProperty('outliers') && d.values.outliers !== null) { return d.values.outliers; }
- else { return []; }
- });
- outliers.enter().append('circle')
- .style('fill', function(d,i,j) { return color(d,j) }).style('stroke', function(d,i,j) { return color(d,j) })
- .on('mouseover', function(d,i,j) {
- d3.select(this).classed('hover', true);
- dispatch.elementMouseover({
- series: { key: d, color: color(d,j) },
- e: d3.event
- });
- })
- .on('mouseout', function(d,i,j) {
- d3.select(this).classed('hover', false);
- dispatch.elementMouseout({
- series: { key: d, color: color(d,j) },
- e: d3.event
- });
- })
- .on('mousemove', function(d,i) {
- dispatch.elementMousemove({e: d3.event});
- });
-
- outliers.attr('class', 'nv-boxplot-outlier');
- outliers
- .watchTransition(renderWatch, 'nv-boxplot: nv-boxplot-outlier')
- .attr('cx', x.rangeBand() * .45)
- .attr('cy', function(d,i,j) { return y(d); })
- .attr('r', '3');
- outliers.exit().remove();
-
- var box_width = function() { return (maxBoxWidth === null ? x.rangeBand() * .9 : Math.min(75, x.rangeBand() * .9)); };
- var box_left = function() { return x.rangeBand() * .45 - box_width()/2; };
- var box_right = function() { return x.rangeBand() * .45 + box_width()/2; };
-
- // update whisker lines and ticks
- ['low', 'high'].forEach(function(key) {
- var endpoint = (key === 'low') ? 'Q1' : 'Q3';
-
- boxplots.select('line.nv-boxplot-whisker.nv-boxplot-' + key)
- .watchTransition(renderWatch, 'nv-boxplot: boxplots')
- .attr('x1', x.rangeBand() * .45 )
- .attr('y1', function(d,i) { return y(d.values['whisker_' + key]); })
- .attr('x2', x.rangeBand() * .45 )
- .attr('y2', function(d,i) { return y(d.values[endpoint]); });
-
- boxplots.select('line.nv-boxplot-tick.nv-boxplot-' + key)
- .watchTransition(renderWatch, 'nv-boxplot: boxplots')
- .attr('x1', box_left )
- .attr('y1', function(d,i) { return y(d.values['whisker_' + key]); })
- .attr('x2', box_right )
- .attr('y2', function(d,i) { return y(d.values['whisker_' + key]); });
- });
-
- ['low', 'high'].forEach(function(key) {
- boxEnter.selectAll('.nv-boxplot-' + key)
- .on('mouseover', function(d,i,j) {
- d3.select(this).classed('hover', true);
- dispatch.elementMouseover({
- series: { key: d.values['whisker_' + key], color: color(d,j) },
- e: d3.event
- });
- })
- .on('mouseout', function(d,i,j) {
- d3.select(this).classed('hover', false);
- dispatch.elementMouseout({
- series: { key: d.values['whisker_' + key], color: color(d,j) },
- e: d3.event
- });
- })
- .on('mousemove', function(d,i) {
- dispatch.elementMousemove({e: d3.event});
- });
- });
-
- // boxes
- boxEnter.append('rect')
- .attr('class', 'nv-boxplot-box')
- // tooltip events
- .on('mouseover', function(d,i) {
- d3.select(this).classed('hover', true);
- dispatch.elementMouseover({
- key: d.label,
- value: d.label,
- series: [
- { key: 'Q3', value: d.values.Q3, color: d.color || color(d,i) },
- { key: 'Q2', value: d.values.Q2, color: d.color || color(d,i) },
- { key: 'Q1', value: d.values.Q1, color: d.color || color(d,i) }
- ],
- data: d,
- index: i,
- e: d3.event
- });
- })
- .on('mouseout', function(d,i) {
- d3.select(this).classed('hover', false);
- dispatch.elementMouseout({
- key: d.label,
- value: d.label,
- series: [
- { key: 'Q3', value: d.values.Q3, color: d.color || color(d,i) },
- { key: 'Q2', value: d.values.Q2, color: d.color || color(d,i) },
- { key: 'Q1', value: d.values.Q1, color: d.color || color(d,i) }
- ],
- data: d,
- index: i,
- e: d3.event
- });
- })
- .on('mousemove', function(d,i) {
- dispatch.elementMousemove({e: d3.event});
- });
-
- // box transitions
- boxplots.select('rect.nv-boxplot-box')
- .watchTransition(renderWatch, 'nv-boxplot: boxes')
- .attr('y', function(d,i) { return y(d.values.Q3); })
- .attr('width', box_width)
- .attr('x', box_left )
-
- .attr('height', function(d,i) { return Math.abs(y(d.values.Q3) - y(d.values.Q1)) || 1 })
- .style('fill', function(d,i) { return d.color || color(d,i) })
- .style('stroke', function(d,i) { return d.color || color(d,i) });
-
- // median line
- boxEnter.append('line').attr('class', 'nv-boxplot-median');
-
- boxplots.select('line.nv-boxplot-median')
- .watchTransition(renderWatch, 'nv-boxplot: boxplots line')
- .attr('x1', box_left)
- .attr('y1', function(d,i) { return y(d.values.Q2); })
- .attr('x2', box_right)
- .attr('y2', function(d,i) { return y(d.values.Q2); });
-
- //store old scales for use in transitions on update
- x0 = x.copy();
- y0 = y.copy();
- });
-
- renderWatch.renderEnd('nv-boxplot immediate');
- return chart;
- }
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- maxBoxWidth: {get: function(){return maxBoxWidth;}, set: function(_){maxBoxWidth=_;}},
- x: {get: function(){return getX;}, set: function(_){getX=_;}},
- y: {get: function(){return getY;}, set: function(_){getY=_;}},
- xScale: {get: function(){return x;}, set: function(_){x=_;}},
- yScale: {get: function(){return y;}, set: function(_){y=_;}},
- xDomain: {get: function(){return xDomain;}, set: function(_){xDomain=_;}},
- yDomain: {get: function(){return yDomain;}, set: function(_){yDomain=_;}},
- xRange: {get: function(){return xRange;}, set: function(_){xRange=_;}},
- yRange: {get: function(){return yRange;}, set: function(_){yRange=_;}},
- id: {get: function(){return id;}, set: function(_){id=_;}},
- // rectClass: {get: function(){return rectClass;}, set: function(_){rectClass=_;}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration = _;
- renderWatch.reset(duration);
- }}
- });
-
- nv.utils.initOptions(chart);
-
- return chart;
-};
-nv.models.boxPlotChart = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var boxplot = nv.models.boxPlot()
- , xAxis = nv.models.axis()
- , yAxis = nv.models.axis()
- ;
-
- var margin = {top: 15, right: 10, bottom: 50, left: 60}
- , width = null
- , height = null
- , color = nv.utils.getColor()
- , showXAxis = true
- , showYAxis = true
- , rightAlignYAxis = false
- , staggerLabels = false
- , tooltip = nv.models.tooltip()
- , x
- , y
- , noData = "No Data Available."
- , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'beforeUpdate', 'renderEnd')
- , duration = 250
- ;
-
- xAxis
- .orient('bottom')
- .showMaxMin(false)
- .tickFormat(function(d) { return d })
- ;
- yAxis
- .orient((rightAlignYAxis) ? 'right' : 'left')
- .tickFormat(d3.format(',.1f'))
- ;
-
- tooltip.duration(0);
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var renderWatch = nv.utils.renderWatch(dispatch, duration);
-
- function chart(selection) {
- renderWatch.reset();
- renderWatch.models(boxplot);
- if (showXAxis) renderWatch.models(xAxis);
- if (showYAxis) renderWatch.models(yAxis);
-
- selection.each(function(data) {
- var container = d3.select(this),
- that = this;
- nv.utils.initSVG(container);
- var availableWidth = (width || parseInt(container.style('width')) || 960)
- - margin.left - margin.right,
- availableHeight = (height || parseInt(container.style('height')) || 400)
- - margin.top - margin.bottom;
-
- chart.update = function() {
- dispatch.beforeUpdate();
- container.transition().duration(duration).call(chart);
- };
- chart.container = this;
-
- // Display No Data message if there's nothing to show. (quartiles required at minimum)
- if (!data || !data.length ||
- !data.filter(function(d) { return d.values.hasOwnProperty("Q1") && d.values.hasOwnProperty("Q2") && d.values.hasOwnProperty("Q3"); }).length) {
- var noDataText = container.selectAll('.nv-noData').data([noData]);
-
- noDataText.enter().append('text')
- .attr('class', 'nvd3 nv-noData')
- .attr('dy', '-.7em')
- .style('text-anchor', 'middle');
-
- noDataText
- .attr('x', margin.left + availableWidth / 2)
- .attr('y', margin.top + availableHeight / 2)
- .text(function(d) { return d });
-
- return chart;
- } else {
- container.selectAll('.nv-noData').remove();
- }
-
- // Setup Scales
- x = boxplot.xScale();
- y = boxplot.yScale().clamp(true);
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-boxPlotWithAxes').data([data]);
- var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-boxPlotWithAxes').append('g');
- var defsEnter = gEnter.append('defs');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-x nv-axis');
- gEnter.append('g').attr('class', 'nv-y nv-axis')
- .append('g').attr('class', 'nv-zeroLine')
- .append('line');
-
- gEnter.append('g').attr('class', 'nv-barsWrap');
-
- g.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- if (rightAlignYAxis) {
- g.select(".nv-y.nv-axis")
- .attr("transform", "translate(" + availableWidth + ",0)");
- }
-
- // Main Chart Component(s)
- boxplot
- .width(availableWidth)
- .height(availableHeight);
-
- var barsWrap = g.select('.nv-barsWrap')
- .datum(data.filter(function(d) { return !d.disabled }))
-
- barsWrap.transition().call(boxplot);
-
-
- defsEnter.append('clipPath')
- .attr('id', 'nv-x-label-clip-' + boxplot.id())
- .append('rect');
-
- g.select('#nv-x-label-clip-' + boxplot.id() + ' rect')
- .attr('width', x.rangeBand() * (staggerLabels ? 2 : 1))
- .attr('height', 16)
- .attr('x', -x.rangeBand() / (staggerLabels ? 1 : 2 ));
-
- // Setup Axes
- if (showXAxis) {
- xAxis
- .scale(x)
- .ticks( nv.utils.calcTicksX(availableWidth/100, data) )
- .tickSize(-availableHeight, 0);
-
- g.select('.nv-x.nv-axis').attr('transform', 'translate(0,' + y.range()[0] + ')');
- g.select('.nv-x.nv-axis').call(xAxis);
-
- var xTicks = g.select('.nv-x.nv-axis').selectAll('g');
- if (staggerLabels) {
- xTicks
- .selectAll('text')
- .attr('transform', function(d,i,j) { return 'translate(0,' + (j % 2 == 0 ? '5' : '17') + ')' })
- }
- }
-
- if (showYAxis) {
- yAxis
- .scale(y)
- .ticks( Math.floor(availableHeight/36) ) // can't use nv.utils.calcTicksY with Object data
- .tickSize( -availableWidth, 0);
-
- g.select('.nv-y.nv-axis').call(yAxis);
- }
-
- // Zero line
- g.select(".nv-zeroLine line")
- .attr("x1",0)
- .attr("x2",availableWidth)
- .attr("y1", y(0))
- .attr("y2", y(0))
- ;
-
- //============================================================
- // Event Handling/Dispatching (in chart's scope)
- //------------------------------------------------------------
- });
-
- renderWatch.renderEnd('nv-boxplot chart immediate');
- return chart;
- }
-
- //============================================================
- // Event Handling/Dispatching (out of chart's scope)
- //------------------------------------------------------------
-
- boxplot.dispatch.on('elementMouseover.tooltip', function(evt) {
- tooltip.data(evt).hidden(false);
- });
-
- boxplot.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.data(evt).hidden(true);
- });
-
- boxplot.dispatch.on('elementMousemove.tooltip', function(evt) {
- tooltip.position({top: d3.event.pageY, left: d3.event.pageX})();
- });
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.boxplot = boxplot;
- chart.xAxis = xAxis;
- chart.yAxis = yAxis;
- chart.tooltip = tooltip;
-
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- staggerLabels: {get: function(){return staggerLabels;}, set: function(_){staggerLabels=_;}},
- showXAxis: {get: function(){return showXAxis;}, set: function(_){showXAxis=_;}},
- showYAxis: {get: function(){return showYAxis;}, set: function(_){showYAxis=_;}},
- tooltips: {get: function(){return tooltips;}, set: function(_){tooltips=_;}},
- tooltipContent: {get: function(){return tooltip;}, set: function(_){tooltip=_;}},
- noData: {get: function(){return noData;}, set: function(_){noData=_;}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration = _;
- renderWatch.reset(duration);
- boxplot.duration(duration);
- xAxis.duration(duration);
- yAxis.duration(duration);
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- boxplot.color(color);
- }},
- rightAlignYAxis: {get: function(){return rightAlignYAxis;}, set: function(_){
- rightAlignYAxis = _;
- yAxis.orient( (_) ? 'right' : 'left');
- }}
- });
-
- nv.utils.inheritOptions(chart, boxplot);
- nv.utils.initOptions(chart);
-
- return chart;
-}
-// Chart design based on the recommendations of Stephen Few. Implementation
-// based on the work of Clint Ivy, Jamie Love, and Jason Davies.
-// http://projects.instantcognition.com/protovis/bulletchart/
-
-nv.models.bullet = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 0, right: 0, bottom: 0, left: 0}
- , orient = 'left' // TODO top & bottom
- , reverse = false
- , ranges = function(d) { return d.ranges }
- , markers = function(d) { return d.markers ? d.markers : [0] }
- , measures = function(d) { return d.measures }
- , rangeLabels = function(d) { return d.rangeLabels ? d.rangeLabels : [] }
- , markerLabels = function(d) { return d.markerLabels ? d.markerLabels : [] }
- , measureLabels = function(d) { return d.measureLabels ? d.measureLabels : [] }
- , forceX = [0] // List of numbers to Force into the X scale (ie. 0, or a max / min, etc.)
- , width = 380
- , height = 30
- , container = null
- , tickFormat = null
- , color = nv.utils.getColor(['#1f77b4'])
- , dispatch = d3.dispatch('elementMouseover', 'elementMouseout', 'elementMousemove')
- ;
-
- function chart(selection) {
- selection.each(function(d, i) {
- var availableWidth = width - margin.left - margin.right,
- availableHeight = height - margin.top - margin.bottom;
-
- container = d3.select(this);
- nv.utils.initSVG(container);
-
- var rangez = ranges.call(this, d, i).slice().sort(d3.descending),
- markerz = markers.call(this, d, i).slice().sort(d3.descending),
- measurez = measures.call(this, d, i).slice().sort(d3.descending),
- rangeLabelz = rangeLabels.call(this, d, i).slice(),
- markerLabelz = markerLabels.call(this, d, i).slice(),
- measureLabelz = measureLabels.call(this, d, i).slice();
-
- // Setup Scales
- // Compute the new x-scale.
- var x1 = d3.scale.linear()
- .domain( d3.extent(d3.merge([forceX, rangez])) )
- .range(reverse ? [availableWidth, 0] : [0, availableWidth]);
-
- // Retrieve the old x-scale, if this is an update.
- var x0 = this.__chart__ || d3.scale.linear()
- .domain([0, Infinity])
- .range(x1.range());
-
- // Stash the new scale.
- this.__chart__ = x1;
-
- var rangeMin = d3.min(rangez), //rangez[2]
- rangeMax = d3.max(rangez), //rangez[0]
- rangeAvg = rangez[1];
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-bullet').data([d]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-bullet');
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- gEnter.append('rect').attr('class', 'nv-range nv-rangeMax');
- gEnter.append('rect').attr('class', 'nv-range nv-rangeAvg');
- gEnter.append('rect').attr('class', 'nv-range nv-rangeMin');
- gEnter.append('rect').attr('class', 'nv-measure');
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- var w0 = function(d) { return Math.abs(x0(d) - x0(0)) }, // TODO: could optimize by precalculating x0(0) and x1(0)
- w1 = function(d) { return Math.abs(x1(d) - x1(0)) };
- var xp0 = function(d) { return d < 0 ? x0(d) : x0(0) },
- xp1 = function(d) { return d < 0 ? x1(d) : x1(0) };
-
- g.select('rect.nv-rangeMax')
- .attr('height', availableHeight)
- .attr('width', w1(rangeMax > 0 ? rangeMax : rangeMin))
- .attr('x', xp1(rangeMax > 0 ? rangeMax : rangeMin))
- .datum(rangeMax > 0 ? rangeMax : rangeMin)
-
- g.select('rect.nv-rangeAvg')
- .attr('height', availableHeight)
- .attr('width', w1(rangeAvg))
- .attr('x', xp1(rangeAvg))
- .datum(rangeAvg)
-
- g.select('rect.nv-rangeMin')
- .attr('height', availableHeight)
- .attr('width', w1(rangeMax))
- .attr('x', xp1(rangeMax))
- .attr('width', w1(rangeMax > 0 ? rangeMin : rangeMax))
- .attr('x', xp1(rangeMax > 0 ? rangeMin : rangeMax))
- .datum(rangeMax > 0 ? rangeMin : rangeMax)
-
- g.select('rect.nv-measure')
- .style('fill', color)
- .attr('height', availableHeight / 3)
- .attr('y', availableHeight / 3)
- .attr('width', measurez < 0 ?
- x1(0) - x1(measurez[0])
- : x1(measurez[0]) - x1(0))
- .attr('x', xp1(measurez))
- .on('mouseover', function() {
- dispatch.elementMouseover({
- value: measurez[0],
- label: measureLabelz[0] || 'Current',
- color: d3.select(this).style("fill")
- })
- })
- .on('mousemove', function() {
- dispatch.elementMousemove({
- value: measurez[0],
- label: measureLabelz[0] || 'Current',
- color: d3.select(this).style("fill")
- })
- })
- .on('mouseout', function() {
- dispatch.elementMouseout({
- value: measurez[0],
- label: measureLabelz[0] || 'Current',
- color: d3.select(this).style("fill")
- })
- });
-
- var h3 = availableHeight / 6;
-
- var markerData = markerz.map( function(marker, index) {
- return {value: marker, label: markerLabelz[index]}
- });
- gEnter
- .selectAll("path.nv-markerTriangle")
- .data(markerData)
- .enter()
- .append('path')
- .attr('class', 'nv-markerTriangle')
- .attr('transform', function(d) { return 'translate(' + x1(d.value) + ',' + (availableHeight / 2) + ')' })
- .attr('d', 'M0,' + h3 + 'L' + h3 + ',' + (-h3) + ' ' + (-h3) + ',' + (-h3) + 'Z')
- .on('mouseover', function(d) {
- dispatch.elementMouseover({
- value: d.value,
- label: d.label || 'Previous',
- color: d3.select(this).style("fill"),
- pos: [x1(d.value), availableHeight/2]
- })
-
- })
- .on('mousemove', function(d) {
- dispatch.elementMousemove({
- value: d.value,
- label: d.label || 'Previous',
- color: d3.select(this).style("fill")
- })
- })
- .on('mouseout', function(d, i) {
- dispatch.elementMouseout({
- value: d.value,
- label: d.label || 'Previous',
- color: d3.select(this).style("fill")
- })
- });
-
- wrap.selectAll('.nv-range')
- .on('mouseover', function(d,i) {
- var label = rangeLabelz[i] || (!i ? "Maximum" : i == 1 ? "Mean" : "Minimum");
- dispatch.elementMouseover({
- value: d,
- label: label,
- color: d3.select(this).style("fill")
- })
- })
- .on('mousemove', function() {
- dispatch.elementMousemove({
- value: measurez[0],
- label: measureLabelz[0] || 'Previous',
- color: d3.select(this).style("fill")
- })
- })
- .on('mouseout', function(d,i) {
- var label = rangeLabelz[i] || (!i ? "Maximum" : i == 1 ? "Mean" : "Minimum");
- dispatch.elementMouseout({
- value: d,
- label: label,
- color: d3.select(this).style("fill")
- })
- });
- });
-
- return chart;
- }
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- ranges: {get: function(){return ranges;}, set: function(_){ranges=_;}}, // ranges (bad, satisfactory, good)
- markers: {get: function(){return markers;}, set: function(_){markers=_;}}, // markers (previous, goal)
- measures: {get: function(){return measures;}, set: function(_){measures=_;}}, // measures (actual, forecast)
- forceX: {get: function(){return forceX;}, set: function(_){forceX=_;}},
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- tickFormat: {get: function(){return tickFormat;}, set: function(_){tickFormat=_;}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- orient: {get: function(){return orient;}, set: function(_){ // left, right, top, bottom
- orient = _;
- reverse = orient == 'right' || orient == 'bottom';
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- }}
- });
-
- nv.utils.initOptions(chart);
- return chart;
-};
-
-
-
-// Chart design based on the recommendations of Stephen Few. Implementation
-// based on the work of Clint Ivy, Jamie Love, and Jason Davies.
-// http://projects.instantcognition.com/protovis/bulletchart/
-nv.models.bulletChart = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var bullet = nv.models.bullet();
- var tooltip = nv.models.tooltip();
-
- var orient = 'left' // TODO top & bottom
- , reverse = false
- , margin = {top: 5, right: 40, bottom: 20, left: 120}
- , ranges = function(d) { return d.ranges }
- , markers = function(d) { return d.markers ? d.markers : [0] }
- , measures = function(d) { return d.measures }
- , width = null
- , height = 55
- , tickFormat = null
- , ticks = null
- , noData = null
- , dispatch = d3.dispatch('tooltipShow', 'tooltipHide')
- ;
-
- tooltip.duration(0).headerEnabled(false);
-
- function chart(selection) {
- selection.each(function(d, i) {
- var container = d3.select(this);
- nv.utils.initSVG(container);
-
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = height - margin.top - margin.bottom,
- that = this;
-
- chart.update = function() { chart(selection) };
- chart.container = this;
-
- // Display No Data message if there's nothing to show.
- if (!d || !ranges.call(this, d, i)) {
- nv.utils.noData(chart, container)
- return chart;
- } else {
- container.selectAll('.nv-noData').remove();
- }
-
- var rangez = ranges.call(this, d, i).slice().sort(d3.descending),
- markerz = markers.call(this, d, i).slice().sort(d3.descending),
- measurez = measures.call(this, d, i).slice().sort(d3.descending);
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-bulletChart').data([d]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-bulletChart');
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-bulletWrap');
- gEnter.append('g').attr('class', 'nv-titles');
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- // Compute the new x-scale.
- var x1 = d3.scale.linear()
- .domain([0, Math.max(rangez[0], markerz[0], measurez[0])]) // TODO: need to allow forceX and forceY, and xDomain, yDomain
- .range(reverse ? [availableWidth, 0] : [0, availableWidth]);
-
- // Retrieve the old x-scale, if this is an update.
- var x0 = this.__chart__ || d3.scale.linear()
- .domain([0, Infinity])
- .range(x1.range());
-
- // Stash the new scale.
- this.__chart__ = x1;
-
- var w0 = function(d) { return Math.abs(x0(d) - x0(0)) }, // TODO: could optimize by precalculating x0(0) and x1(0)
- w1 = function(d) { return Math.abs(x1(d) - x1(0)) };
-
- var title = gEnter.select('.nv-titles').append('g')
- .attr('text-anchor', 'end')
- .attr('transform', 'translate(-6,' + (height - margin.top - margin.bottom) / 2 + ')');
- title.append('text')
- .attr('class', 'nv-title')
- .text(function(d) { return d.title; });
-
- title.append('text')
- .attr('class', 'nv-subtitle')
- .attr('dy', '1em')
- .text(function(d) { return d.subtitle; });
-
- bullet
- .width(availableWidth)
- .height(availableHeight)
-
- var bulletWrap = g.select('.nv-bulletWrap');
- d3.transition(bulletWrap).call(bullet);
-
- // Compute the tick format.
- var format = tickFormat || x1.tickFormat( availableWidth / 100 );
-
- // Update the tick groups.
- var tick = g.selectAll('g.nv-tick')
- .data(x1.ticks( ticks ? ticks : (availableWidth / 50) ), function(d) {
- return this.textContent || format(d);
- });
-
- // Initialize the ticks with the old scale, x0.
- var tickEnter = tick.enter().append('g')
- .attr('class', 'nv-tick')
- .attr('transform', function(d) { return 'translate(' + x0(d) + ',0)' })
- .style('opacity', 1e-6);
-
- tickEnter.append('line')
- .attr('y1', availableHeight)
- .attr('y2', availableHeight * 7 / 6);
-
- tickEnter.append('text')
- .attr('text-anchor', 'middle')
- .attr('dy', '1em')
- .attr('y', availableHeight * 7 / 6)
- .text(format);
-
- // Transition the updating ticks to the new scale, x1.
- var tickUpdate = d3.transition(tick)
- .attr('transform', function(d) { return 'translate(' + x1(d) + ',0)' })
- .style('opacity', 1);
-
- tickUpdate.select('line')
- .attr('y1', availableHeight)
- .attr('y2', availableHeight * 7 / 6);
-
- tickUpdate.select('text')
- .attr('y', availableHeight * 7 / 6);
-
- // Transition the exiting ticks to the new scale, x1.
- d3.transition(tick.exit())
- .attr('transform', function(d) { return 'translate(' + x1(d) + ',0)' })
- .style('opacity', 1e-6)
- .remove();
- });
-
- d3.timer.flush();
- return chart;
- }
-
- //============================================================
- // Event Handling/Dispatching (out of chart's scope)
- //------------------------------------------------------------
-
- bullet.dispatch.on('elementMouseover.tooltip', function(evt) {
- evt['series'] = {
- key: evt.label,
- value: evt.value,
- color: evt.color
- };
- tooltip.data(evt).hidden(false);
- });
-
- bullet.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true);
- });
-
- bullet.dispatch.on('elementMousemove.tooltip', function(evt) {
- tooltip.position({top: d3.event.pageY, left: d3.event.pageX})();
- });
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.bullet = bullet;
- chart.dispatch = dispatch;
- chart.tooltip = tooltip;
-
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- ranges: {get: function(){return ranges;}, set: function(_){ranges=_;}}, // ranges (bad, satisfactory, good)
- markers: {get: function(){return markers;}, set: function(_){markers=_;}}, // markers (previous, goal)
- measures: {get: function(){return measures;}, set: function(_){measures=_;}}, // measures (actual, forecast)
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- tickFormat: {get: function(){return tickFormat;}, set: function(_){tickFormat=_;}},
- ticks: {get: function(){return ticks;}, set: function(_){ticks=_;}},
- noData: {get: function(){return noData;}, set: function(_){noData=_;}},
-
- // deprecated options
- tooltips: {get: function(){return tooltip.enabled();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltips', 'use chart.tooltip.enabled() instead');
- tooltip.enabled(!!_);
- }},
- tooltipContent: {get: function(){return tooltip.contentGenerator();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltipContent', 'use chart.tooltip.contentGenerator() instead');
- tooltip.contentGenerator(_);
- }},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- orient: {get: function(){return orient;}, set: function(_){ // left, right, top, bottom
- orient = _;
- reverse = orient == 'right' || orient == 'bottom';
- }}
- });
-
- nv.utils.inheritOptions(chart, bullet);
- nv.utils.initOptions(chart);
-
- return chart;
-};
-
-
-
-nv.models.candlestickBar = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 0, right: 0, bottom: 0, left: 0}
- , width = null
- , height = null
- , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one
- , container
- , x = d3.scale.linear()
- , y = d3.scale.linear()
- , getX = function(d) { return d.x }
- , getY = function(d) { return d.y }
- , getOpen = function(d) { return d.open }
- , getClose = function(d) { return d.close }
- , getHigh = function(d) { return d.high }
- , getLow = function(d) { return d.low }
- , forceX = []
- , forceY = []
- , padData = false // If true, adds half a data points width to front and back, for lining up a line chart with a bar chart
- , clipEdge = true
- , color = nv.utils.defaultColor()
- , interactive = false
- , xDomain
- , yDomain
- , xRange
- , yRange
- , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState', 'renderEnd', 'chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout', 'elementMousemove')
- ;
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- function chart(selection) {
- selection.each(function(data) {
- container = d3.select(this);
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- nv.utils.initSVG(container);
-
- // Width of the candlestick bars.
- var barWidth = (availableWidth / data[0].values.length) * .45;
-
- // Setup Scales
- x.domain(xDomain || d3.extent(data[0].values.map(getX).concat(forceX) ));
-
- if (padData)
- x.range(xRange || [availableWidth * .5 / data[0].values.length, availableWidth * (data[0].values.length - .5) / data[0].values.length ]);
- else
- x.range(xRange || [5 + barWidth / 2, availableWidth - barWidth / 2 - 5]);
-
- y.domain(yDomain || [
- d3.min(data[0].values.map(getLow).concat(forceY)),
- d3.max(data[0].values.map(getHigh).concat(forceY))
- ]
- ).range(yRange || [availableHeight, 0]);
-
- // If scale's domain don't have a range, slightly adjust to make one... so a chart can show a single data point
- if (x.domain()[0] === x.domain()[1])
- x.domain()[0] ?
- x.domain([x.domain()[0] - x.domain()[0] * 0.01, x.domain()[1] + x.domain()[1] * 0.01])
- : x.domain([-1,1]);
-
- if (y.domain()[0] === y.domain()[1])
- y.domain()[0] ?
- y.domain([y.domain()[0] + y.domain()[0] * 0.01, y.domain()[1] - y.domain()[1] * 0.01])
- : y.domain([-1,1]);
-
- // Setup containers and skeleton of chart
- var wrap = d3.select(this).selectAll('g.nv-wrap.nv-candlestickBar').data([data[0].values]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-candlestickBar');
- var defsEnter = wrapEnter.append('defs');
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-ticks');
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- container
- .on('click', function(d,i) {
- dispatch.chartClick({
- data: d,
- index: i,
- pos: d3.event,
- id: id
- });
- });
-
- defsEnter.append('clipPath')
- .attr('id', 'nv-chart-clip-path-' + id)
- .append('rect');
-
- wrap.select('#nv-chart-clip-path-' + id + ' rect')
- .attr('width', availableWidth)
- .attr('height', availableHeight);
-
- g .attr('clip-path', clipEdge ? 'url(#nv-chart-clip-path-' + id + ')' : '');
-
- var ticks = wrap.select('.nv-ticks').selectAll('.nv-tick')
- .data(function(d) { return d });
- ticks.exit().remove();
-
- // The colors are currently controlled by CSS.
- var tickGroups = ticks.enter().append('g')
- .attr('class', function(d, i, j) { return (getOpen(d, i) > getClose(d, i) ? 'nv-tick negative' : 'nv-tick positive') + ' nv-tick-' + j + '-' + i});
-
- var lines = tickGroups.append('line')
- .attr('class', 'nv-candlestick-lines')
- .attr('transform', function(d, i) { return 'translate(' + x(getX(d, i)) + ',0)'; })
- .attr('x1', 0)
- .attr('y1', function(d, i) { return y(getHigh(d, i)); })
- .attr('x2', 0)
- .attr('y2', function(d, i) { return y(getLow(d, i)); });
-
- var rects = tickGroups.append('rect')
- .attr('class', 'nv-candlestick-rects nv-bars')
- .attr('transform', function(d, i) {
- return 'translate(' + (x(getX(d, i)) - barWidth/2) + ','
- + (y(getY(d, i)) - (getOpen(d, i) > getClose(d, i) ? (y(getClose(d, i)) - y(getOpen(d, i))) : 0))
- + ')';
- })
- .attr('x', 0)
- .attr('y', 0)
- .attr('width', barWidth)
- .attr('height', function(d, i) {
- var open = getOpen(d, i);
- var close = getClose(d, i);
- return open > close ? y(close) - y(open) : y(open) - y(close);
- });
-
- container.selectAll('.nv-candlestick-lines').transition()
- .attr('transform', function(d, i) { return 'translate(' + x(getX(d, i)) + ',0)'; })
- .attr('x1', 0)
- .attr('y1', function(d, i) { return y(getHigh(d, i)); })
- .attr('x2', 0)
- .attr('y2', function(d, i) { return y(getLow(d, i)); });
-
- container.selectAll('.nv-candlestick-rects').transition()
- .attr('transform', function(d, i) {
- return 'translate(' + (x(getX(d, i)) - barWidth/2) + ','
- + (y(getY(d, i)) - (getOpen(d, i) > getClose(d, i) ? (y(getClose(d, i)) - y(getOpen(d, i))) : 0))
- + ')';
- })
- .attr('x', 0)
- .attr('y', 0)
- .attr('width', barWidth)
- .attr('height', function(d, i) {
- var open = getOpen(d, i);
- var close = getClose(d, i);
- return open > close ? y(close) - y(open) : y(open) - y(close);
- });
- });
-
- return chart;
- }
-
-
- //Create methods to allow outside functions to highlight a specific bar.
- chart.highlightPoint = function(pointIndex, isHoverOver) {
- chart.clearHighlights();
- container.select(".nv-candlestickBar .nv-tick-0-" + pointIndex)
- .classed("hover", isHoverOver)
- ;
- };
-
- chart.clearHighlights = function() {
- container.select(".nv-candlestickBar .nv-tick.hover")
- .classed("hover", false)
- ;
- };
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- xScale: {get: function(){return x;}, set: function(_){x=_;}},
- yScale: {get: function(){return y;}, set: function(_){y=_;}},
- xDomain: {get: function(){return xDomain;}, set: function(_){xDomain=_;}},
- yDomain: {get: function(){return yDomain;}, set: function(_){yDomain=_;}},
- xRange: {get: function(){return xRange;}, set: function(_){xRange=_;}},
- yRange: {get: function(){return yRange;}, set: function(_){yRange=_;}},
- forceX: {get: function(){return forceX;}, set: function(_){forceX=_;}},
- forceY: {get: function(){return forceY;}, set: function(_){forceY=_;}},
- padData: {get: function(){return padData;}, set: function(_){padData=_;}},
- clipEdge: {get: function(){return clipEdge;}, set: function(_){clipEdge=_;}},
- id: {get: function(){return id;}, set: function(_){id=_;}},
- interactive: {get: function(){return interactive;}, set: function(_){interactive=_;}},
-
- x: {get: function(){return getX;}, set: function(_){getX=_;}},
- y: {get: function(){return getY;}, set: function(_){getY=_;}},
- open: {get: function(){return getOpen();}, set: function(_){getOpen=_;}},
- close: {get: function(){return getClose();}, set: function(_){getClose=_;}},
- high: {get: function(){return getHigh;}, set: function(_){getHigh=_;}},
- low: {get: function(){return getLow;}, set: function(_){getLow=_;}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top != undefined ? _.top : margin.top;
- margin.right = _.right != undefined ? _.right : margin.right;
- margin.bottom = _.bottom != undefined ? _.bottom : margin.bottom;
- margin.left = _.left != undefined ? _.left : margin.left;
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- }}
- });
-
- nv.utils.initOptions(chart);
- return chart;
-};
-
-nv.models.cumulativeLineChart = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var lines = nv.models.line()
- , xAxis = nv.models.axis()
- , yAxis = nv.models.axis()
- , legend = nv.models.legend()
- , controls = nv.models.legend()
- , interactiveLayer = nv.interactiveGuideline()
- , tooltip = nv.models.tooltip()
- ;
-
- var margin = {top: 30, right: 30, bottom: 50, left: 60}
- , color = nv.utils.defaultColor()
- , width = null
- , height = null
- , showLegend = true
- , showXAxis = true
- , showYAxis = true
- , rightAlignYAxis = false
- , showControls = true
- , useInteractiveGuideline = false
- , rescaleY = true
- , x //can be accessed via chart.xScale()
- , y //can be accessed via chart.yScale()
- , id = lines.id()
- , state = nv.utils.state()
- , defaultState = null
- , noData = null
- , average = function(d) { return d.average }
- , dispatch = d3.dispatch('stateChange', 'changeState', 'renderEnd')
- , transitionDuration = 250
- , duration = 250
- , noErrorCheck = false //if set to TRUE, will bypass an error check in the indexify function.
- ;
-
- state.index = 0;
- state.rescaleY = rescaleY;
-
- xAxis.orient('bottom').tickPadding(7);
- yAxis.orient((rightAlignYAxis) ? 'right' : 'left');
-
- tooltip.valueFormatter(function(d, i) {
- return yAxis.tickFormat()(d, i);
- }).headerFormatter(function(d, i) {
- return xAxis.tickFormat()(d, i);
- });
-
- controls.updateState(false);
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var dx = d3.scale.linear()
- , index = {i: 0, x: 0}
- , renderWatch = nv.utils.renderWatch(dispatch, duration)
- ;
-
- var stateGetter = function(data) {
- return function(){
- return {
- active: data.map(function(d) { return !d.disabled }),
- index: index.i,
- rescaleY: rescaleY
- };
- }
- };
-
- var stateSetter = function(data) {
- return function(state) {
- if (state.index !== undefined)
- index.i = state.index;
- if (state.rescaleY !== undefined)
- rescaleY = state.rescaleY;
- if (state.active !== undefined)
- data.forEach(function(series,i) {
- series.disabled = !state.active[i];
- });
- }
- };
-
- function chart(selection) {
- renderWatch.reset();
- renderWatch.models(lines);
- if (showXAxis) renderWatch.models(xAxis);
- if (showYAxis) renderWatch.models(yAxis);
- selection.each(function(data) {
- var container = d3.select(this);
- nv.utils.initSVG(container);
- container.classed('nv-chart-' + id, true);
- var that = this;
-
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- chart.update = function() {
- if (duration === 0)
- container.call(chart);
- else
- container.transition().duration(duration).call(chart)
- };
- chart.container = this;
-
- state
- .setter(stateSetter(data), chart.update)
- .getter(stateGetter(data))
- .update();
-
- // DEPRECATED set state.disableddisabled
- state.disabled = data.map(function(d) { return !!d.disabled });
-
- if (!defaultState) {
- var key;
- defaultState = {};
- for (key in state) {
- if (state[key] instanceof Array)
- defaultState[key] = state[key].slice(0);
- else
- defaultState[key] = state[key];
- }
- }
-
- var indexDrag = d3.behavior.drag()
- .on('dragstart', dragStart)
- .on('drag', dragMove)
- .on('dragend', dragEnd);
-
-
- function dragStart(d,i) {
- d3.select(chart.container)
- .style('cursor', 'ew-resize');
- }
-
- function dragMove(d,i) {
- index.x = d3.event.x;
- index.i = Math.round(dx.invert(index.x));
- updateZero();
- }
-
- function dragEnd(d,i) {
- d3.select(chart.container)
- .style('cursor', 'auto');
-
- // update state and send stateChange with new index
- state.index = index.i;
- dispatch.stateChange(state);
- }
-
- // Display No Data message if there's nothing to show.
- if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
- nv.utils.noData(chart, container)
- return chart;
- } else {
- container.selectAll('.nv-noData').remove();
- }
-
- // Setup Scales
- x = lines.xScale();
- y = lines.yScale();
-
- if (!rescaleY) {
- var seriesDomains = data
- .filter(function(series) { return !series.disabled })
- .map(function(series,i) {
- var initialDomain = d3.extent(series.values, lines.y());
-
- //account for series being disabled when losing 95% or more
- if (initialDomain[0] < -.95) initialDomain[0] = -.95;
-
- return [
- (initialDomain[0] - initialDomain[1]) / (1 + initialDomain[1]),
- (initialDomain[1] - initialDomain[0]) / (1 + initialDomain[0])
- ];
- });
-
- var completeDomain = [
- d3.min(seriesDomains, function(d) { return d[0] }),
- d3.max(seriesDomains, function(d) { return d[1] })
- ];
-
- lines.yDomain(completeDomain);
- } else {
- lines.yDomain(null);
- }
-
- dx.domain([0, data[0].values.length - 1]) //Assumes all series have same length
- .range([0, availableWidth])
- .clamp(true);
-
- var data = indexify(index.i, data);
-
- // Setup containers and skeleton of chart
- var interactivePointerEvents = (useInteractiveGuideline) ? "none" : "all";
- var wrap = container.selectAll('g.nv-wrap.nv-cumulativeLine').data([data]);
- var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-cumulativeLine').append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-interactive');
- gEnter.append('g').attr('class', 'nv-x nv-axis').style("pointer-events","none");
- gEnter.append('g').attr('class', 'nv-y nv-axis');
- gEnter.append('g').attr('class', 'nv-background');
- gEnter.append('g').attr('class', 'nv-linesWrap').style("pointer-events",interactivePointerEvents);
- gEnter.append('g').attr('class', 'nv-avgLinesWrap').style("pointer-events","none");
- gEnter.append('g').attr('class', 'nv-legendWrap');
- gEnter.append('g').attr('class', 'nv-controlsWrap');
-
- // Legend
- if (showLegend) {
- legend.width(availableWidth);
-
- g.select('.nv-legendWrap')
- .datum(data)
- .call(legend);
-
- if ( margin.top != legend.height()) {
- margin.top = legend.height();
- availableHeight = nv.utils.availableHeight(height, container, margin);
- }
-
- g.select('.nv-legendWrap')
- .attr('transform', 'translate(0,' + (-margin.top) +')')
- }
-
- // Controls
- if (showControls) {
- var controlsData = [
- { key: 'Re-scale y-axis', disabled: !rescaleY }
- ];
-
- controls
- .width(140)
- .color(['#444', '#444', '#444'])
- .rightAlign(false)
- .margin({top: 5, right: 0, bottom: 5, left: 20})
- ;
-
- g.select('.nv-controlsWrap')
- .datum(controlsData)
- .attr('transform', 'translate(0,' + (-margin.top) +')')
- .call(controls);
- }
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- if (rightAlignYAxis) {
- g.select(".nv-y.nv-axis")
- .attr("transform", "translate(" + availableWidth + ",0)");
- }
-
- // Show error if series goes below 100%
- var tempDisabled = data.filter(function(d) { return d.tempDisabled });
-
- wrap.select('.tempDisabled').remove(); //clean-up and prevent duplicates
- if (tempDisabled.length) {
- wrap.append('text').attr('class', 'tempDisabled')
- .attr('x', availableWidth / 2)
- .attr('y', '-.71em')
- .style('text-anchor', 'end')
- .text(tempDisabled.map(function(d) { return d.key }).join(', ') + ' values cannot be calculated for this time period.');
- }
-
- //Set up interactive layer
- if (useInteractiveGuideline) {
- interactiveLayer
- .width(availableWidth)
- .height(availableHeight)
- .margin({left:margin.left,top:margin.top})
- .svgContainer(container)
- .xScale(x);
- wrap.select(".nv-interactive").call(interactiveLayer);
- }
-
- gEnter.select('.nv-background')
- .append('rect');
-
- g.select('.nv-background rect')
- .attr('width', availableWidth)
- .attr('height', availableHeight);
-
- lines
- //.x(function(d) { return d.x })
- .y(function(d) { return d.display.y })
- .width(availableWidth)
- .height(availableHeight)
- .color(data.map(function(d,i) {
- return d.color || color(d, i);
- }).filter(function(d,i) { return !data[i].disabled && !data[i].tempDisabled; }));
-
- var linesWrap = g.select('.nv-linesWrap')
- .datum(data.filter(function(d) { return !d.disabled && !d.tempDisabled }));
-
- linesWrap.call(lines);
-
- //Store a series index number in the data array.
- data.forEach(function(d,i) {
- d.seriesIndex = i;
- });
-
- var avgLineData = data.filter(function(d) {
- return !d.disabled && !!average(d);
- });
-
- var avgLines = g.select(".nv-avgLinesWrap").selectAll("line")
- .data(avgLineData, function(d) { return d.key; });
-
- var getAvgLineY = function(d) {
- //If average lines go off the svg element, clamp them to the svg bounds.
- var yVal = y(average(d));
- if (yVal < 0) return 0;
- if (yVal > availableHeight) return availableHeight;
- return yVal;
- };
-
- avgLines.enter()
- .append('line')
- .style('stroke-width',2)
- .style('stroke-dasharray','10,10')
- .style('stroke',function (d,i) {
- return lines.color()(d,d.seriesIndex);
- })
- .attr('x1',0)
- .attr('x2',availableWidth)
- .attr('y1', getAvgLineY)
- .attr('y2', getAvgLineY);
-
- avgLines
- .style('stroke-opacity',function(d){
- //If average lines go offscreen, make them transparent
- var yVal = y(average(d));
- if (yVal < 0 || yVal > availableHeight) return 0;
- return 1;
- })
- .attr('x1',0)
- .attr('x2',availableWidth)
- .attr('y1', getAvgLineY)
- .attr('y2', getAvgLineY);
-
- avgLines.exit().remove();
-
- //Create index line
- var indexLine = linesWrap.selectAll('.nv-indexLine')
- .data([index]);
- indexLine.enter().append('rect').attr('class', 'nv-indexLine')
- .attr('width', 3)
- .attr('x', -2)
- .attr('fill', 'red')
- .attr('fill-opacity', .5)
- .style("pointer-events","all")
- .call(indexDrag);
-
- indexLine
- .attr('transform', function(d) { return 'translate(' + dx(d.i) + ',0)' })
- .attr('height', availableHeight);
-
- // Setup Axes
- if (showXAxis) {
- xAxis
- .scale(x)
- ._ticks( nv.utils.calcTicksX(availableWidth/70, data) )
- .tickSize(-availableHeight, 0);
-
- g.select('.nv-x.nv-axis')
- .attr('transform', 'translate(0,' + y.range()[0] + ')');
- g.select('.nv-x.nv-axis')
- .call(xAxis);
- }
-
- if (showYAxis) {
- yAxis
- .scale(y)
- ._ticks( nv.utils.calcTicksY(availableHeight/36, data) )
- .tickSize( -availableWidth, 0);
-
- g.select('.nv-y.nv-axis')
- .call(yAxis);
- }
-
- //============================================================
- // Event Handling/Dispatching (in chart's scope)
- //------------------------------------------------------------
-
- function updateZero() {
- indexLine
- .data([index]);
-
- //When dragging the index line, turn off line transitions.
- // Then turn them back on when done dragging.
- var oldDuration = chart.duration();
- chart.duration(0);
- chart.update();
- chart.duration(oldDuration);
- }
-
- g.select('.nv-background rect')
- .on('click', function() {
- index.x = d3.mouse(this)[0];
- index.i = Math.round(dx.invert(index.x));
-
- // update state and send stateChange with new index
- state.index = index.i;
- dispatch.stateChange(state);
-
- updateZero();
- });
-
- lines.dispatch.on('elementClick', function(e) {
- index.i = e.pointIndex;
- index.x = dx(index.i);
-
- // update state and send stateChange with new index
- state.index = index.i;
- dispatch.stateChange(state);
-
- updateZero();
- });
-
- controls.dispatch.on('legendClick', function(d,i) {
- d.disabled = !d.disabled;
- rescaleY = !d.disabled;
-
- state.rescaleY = rescaleY;
- dispatch.stateChange(state);
- chart.update();
- });
-
- legend.dispatch.on('stateChange', function(newState) {
- for (var key in newState)
- state[key] = newState[key];
- dispatch.stateChange(state);
- chart.update();
- });
-
- interactiveLayer.dispatch.on('elementMousemove', function(e) {
- lines.clearHighlights();
- var singlePoint, pointIndex, pointXLocation, allData = [];
-
- data
- .filter(function(series, i) {
- series.seriesIndex = i;
- return !series.disabled;
- })
- .forEach(function(series,i) {
- pointIndex = nv.interactiveBisect(series.values, e.pointXValue, chart.x());
- lines.highlightPoint(i, pointIndex, true);
- var point = series.values[pointIndex];
- if (typeof point === 'undefined') return;
- if (typeof singlePoint === 'undefined') singlePoint = point;
- if (typeof pointXLocation === 'undefined') pointXLocation = chart.xScale()(chart.x()(point,pointIndex));
- allData.push({
- key: series.key,
- value: chart.y()(point, pointIndex),
- color: color(series,series.seriesIndex)
- });
- });
-
- //Highlight the tooltip entry based on which point the mouse is closest to.
- if (allData.length > 2) {
- var yValue = chart.yScale().invert(e.mouseY);
- var domainExtent = Math.abs(chart.yScale().domain()[0] - chart.yScale().domain()[1]);
- var threshold = 0.03 * domainExtent;
- var indexToHighlight = nv.nearestValueIndex(allData.map(function(d){return d.value}),yValue,threshold);
- if (indexToHighlight !== null)
- allData[indexToHighlight].highlight = true;
- }
-
- var xValue = xAxis.tickFormat()(chart.x()(singlePoint,pointIndex), pointIndex);
- interactiveLayer.tooltip
- .position({left: pointXLocation + margin.left, top: e.mouseY + margin.top})
- .chartContainer(that.parentNode)
- .valueFormatter(function(d,i) {
- return yAxis.tickFormat()(d);
- })
- .data(
- {
- value: xValue,
- series: allData
- }
- )();
-
- interactiveLayer.renderGuideLine(pointXLocation);
- });
-
- interactiveLayer.dispatch.on("elementMouseout",function(e) {
- lines.clearHighlights();
- });
-
- // Update chart from a state object passed to event handler
- dispatch.on('changeState', function(e) {
- if (typeof e.disabled !== 'undefined') {
- data.forEach(function(series,i) {
- series.disabled = e.disabled[i];
- });
-
- state.disabled = e.disabled;
- }
-
- if (typeof e.index !== 'undefined') {
- index.i = e.index;
- index.x = dx(index.i);
-
- state.index = e.index;
-
- indexLine
- .data([index]);
- }
-
- if (typeof e.rescaleY !== 'undefined') {
- rescaleY = e.rescaleY;
- }
-
- chart.update();
- });
-
- });
-
- renderWatch.renderEnd('cumulativeLineChart immediate');
-
- return chart;
- }
-
- //============================================================
- // Event Handling/Dispatching (out of chart's scope)
- //------------------------------------------------------------
-
- lines.dispatch.on('elementMouseover.tooltip', function(evt) {
- var point = {
- x: chart.x()(evt.point),
- y: chart.y()(evt.point),
- color: evt.point.color
- };
- evt.point = point;
- tooltip.data(evt).position(evt.pos).hidden(false);
- });
-
- lines.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true)
- });
-
- //============================================================
- // Functions
- //------------------------------------------------------------
-
- var indexifyYGetter = null;
- /* Normalize the data according to an index point. */
- function indexify(idx, data) {
- if (!indexifyYGetter) indexifyYGetter = lines.y();
- return data.map(function(line, i) {
- if (!line.values) {
- return line;
- }
- var indexValue = line.values[idx];
- if (indexValue == null) {
- return line;
- }
- var v = indexifyYGetter(indexValue, idx);
-
- //TODO: implement check below, and disable series if series loses 100% or more cause divide by 0 issue
- if (v < -.95 && !noErrorCheck) {
- //if a series loses more than 100%, calculations fail.. anything close can cause major distortion (but is mathematically correct till it hits 100)
-
- line.tempDisabled = true;
- return line;
- }
-
- line.tempDisabled = false;
-
- line.values = line.values.map(function(point, pointIndex) {
- point.display = {'y': (indexifyYGetter(point, pointIndex) - v) / (1 + v) };
- return point;
- });
-
- return line;
- })
- }
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- // expose chart's sub-components
- chart.dispatch = dispatch;
- chart.lines = lines;
- chart.legend = legend;
- chart.controls = controls;
- chart.xAxis = xAxis;
- chart.yAxis = yAxis;
- chart.interactiveLayer = interactiveLayer;
- chart.state = state;
- chart.tooltip = tooltip;
-
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- rescaleY: {get: function(){return rescaleY;}, set: function(_){rescaleY=_;}},
- showControls: {get: function(){return showControls;}, set: function(_){showControls=_;}},
- showLegend: {get: function(){return showLegend;}, set: function(_){showLegend=_;}},
- average: {get: function(){return average;}, set: function(_){average=_;}},
- defaultState: {get: function(){return defaultState;}, set: function(_){defaultState=_;}},
- noData: {get: function(){return noData;}, set: function(_){noData=_;}},
- showXAxis: {get: function(){return showXAxis;}, set: function(_){showXAxis=_;}},
- showYAxis: {get: function(){return showYAxis;}, set: function(_){showYAxis=_;}},
- noErrorCheck: {get: function(){return noErrorCheck;}, set: function(_){noErrorCheck=_;}},
-
- // deprecated options
- tooltips: {get: function(){return tooltip.enabled();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltips', 'use chart.tooltip.enabled() instead');
- tooltip.enabled(!!_);
- }},
- tooltipContent: {get: function(){return tooltip.contentGenerator();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltipContent', 'use chart.tooltip.contentGenerator() instead');
- tooltip.contentGenerator(_);
- }},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- legend.color(color);
- }},
- useInteractiveGuideline: {get: function(){return useInteractiveGuideline;}, set: function(_){
- useInteractiveGuideline = _;
- if (_ === true) {
- chart.interactive(false);
- chart.useVoronoi(false);
- }
- }},
- rightAlignYAxis: {get: function(){return rightAlignYAxis;}, set: function(_){
- rightAlignYAxis = _;
- yAxis.orient( (_) ? 'right' : 'left');
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration = _;
- lines.duration(duration);
- xAxis.duration(duration);
- yAxis.duration(duration);
- renderWatch.reset(duration);
- }}
- });
-
- nv.utils.inheritOptions(chart, lines);
- nv.utils.initOptions(chart);
-
- return chart;
-};
-//TODO: consider deprecating by adding necessary features to multiBar model
-nv.models.discreteBar = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 0, right: 0, bottom: 0, left: 0}
- , width = 960
- , height = 500
- , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one
- , container
- , x = d3.scale.ordinal()
- , y = d3.scale.linear()
- , getX = function(d) { return d.x }
- , getY = function(d) { return d.y }
- , forceY = [0] // 0 is forced by default.. this makes sense for the majority of bar graphs... user can always do chart.forceY([]) to remove
- , color = nv.utils.defaultColor()
- , showValues = false
- , valueFormat = d3.format(',.2f')
- , xDomain
- , yDomain
- , xRange
- , yRange
- , dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout', 'elementMousemove', 'renderEnd')
- , rectClass = 'discreteBar'
- , duration = 250
- ;
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var x0, y0;
- var renderWatch = nv.utils.renderWatch(dispatch, duration);
-
- function chart(selection) {
- renderWatch.reset();
- selection.each(function(data) {
- var availableWidth = width - margin.left - margin.right,
- availableHeight = height - margin.top - margin.bottom;
-
- container = d3.select(this);
- nv.utils.initSVG(container);
-
- //add series index to each data point for reference
- data.forEach(function(series, i) {
- series.values.forEach(function(point) {
- point.series = i;
- });
- });
-
- // Setup Scales
- // remap and flatten the data for use in calculating the scales' domains
- var seriesData = (xDomain && yDomain) ? [] : // if we know xDomain and yDomain, no need to calculate
- data.map(function(d) {
- return d.values.map(function(d,i) {
- return { x: getX(d,i), y: getY(d,i), y0: d.y0 }
- })
- });
-
- x .domain(xDomain || d3.merge(seriesData).map(function(d) { return d.x }))
- .rangeBands(xRange || [0, availableWidth], .1);
- y .domain(yDomain || d3.extent(d3.merge(seriesData).map(function(d) { return d.y }).concat(forceY)));
-
- // If showValues, pad the Y axis range to account for label height
- if (showValues) y.range(yRange || [availableHeight - (y.domain()[0] < 0 ? 12 : 0), y.domain()[1] > 0 ? 12 : 0]);
- else y.range(yRange || [availableHeight, 0]);
-
- //store old scales if they exist
- x0 = x0 || x;
- y0 = y0 || y.copy().range([y(0),y(0)]);
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-discretebar').data([data]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-discretebar');
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-groups');
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- //TODO: by definition, the discrete bar should not have multiple groups, will modify/remove later
- var groups = wrap.select('.nv-groups').selectAll('.nv-group')
- .data(function(d) { return d }, function(d) { return d.key });
- groups.enter().append('g')
- .style('stroke-opacity', 1e-6)
- .style('fill-opacity', 1e-6);
- groups.exit()
- .watchTransition(renderWatch, 'discreteBar: exit groups')
- .style('stroke-opacity', 1e-6)
- .style('fill-opacity', 1e-6)
- .remove();
- groups
- .attr('class', function(d,i) { return 'nv-group nv-series-' + i })
- .classed('hover', function(d) { return d.hover });
- groups
- .watchTransition(renderWatch, 'discreteBar: groups')
- .style('stroke-opacity', 1)
- .style('fill-opacity', .75);
-
- var bars = groups.selectAll('g.nv-bar')
- .data(function(d) { return d.values });
- bars.exit().remove();
-
- var barsEnter = bars.enter().append('g')
- .attr('transform', function(d,i,j) {
- return 'translate(' + (x(getX(d,i)) + x.rangeBand() * .05 ) + ', ' + y(0) + ')'
- })
- .on('mouseover', function(d,i) { //TODO: figure out why j works above, but not here
- d3.select(this).classed('hover', true);
- dispatch.elementMouseover({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- })
- .on('mouseout', function(d,i) {
- d3.select(this).classed('hover', false);
- dispatch.elementMouseout({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- })
- .on('mousemove', function(d,i) {
- dispatch.elementMousemove({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- })
- .on('click', function(d,i) {
- dispatch.elementClick({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- d3.event.stopPropagation();
- })
- .on('dblclick', function(d,i) {
- dispatch.elementDblClick({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- d3.event.stopPropagation();
- });
-
- barsEnter.append('rect')
- .attr('height', 0)
- .attr('width', x.rangeBand() * .9 / data.length )
-
- if (showValues) {
- barsEnter.append('text')
- .attr('text-anchor', 'middle')
- ;
-
- bars.select('text')
- .text(function(d,i) { return valueFormat(getY(d,i)) })
- .watchTransition(renderWatch, 'discreteBar: bars text')
- .attr('x', x.rangeBand() * .9 / 2)
- .attr('y', function(d,i) { return getY(d,i) < 0 ? y(getY(d,i)) - y(0) + 12 : -4 })
-
- ;
- } else {
- bars.selectAll('text').remove();
- }
-
- bars
- .attr('class', function(d,i) { return getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive' })
- .style('fill', function(d,i) { return d.color || color(d,i) })
- .style('stroke', function(d,i) { return d.color || color(d,i) })
- .select('rect')
- .attr('class', rectClass)
- .watchTransition(renderWatch, 'discreteBar: bars rect')
- .attr('width', x.rangeBand() * .9 / data.length);
- bars.watchTransition(renderWatch, 'discreteBar: bars')
- //.delay(function(d,i) { return i * 1200 / data[0].values.length })
- .attr('transform', function(d,i) {
- var left = x(getX(d,i)) + x.rangeBand() * .05,
- top = getY(d,i) < 0 ?
- y(0) :
- y(0) - y(getY(d,i)) < 1 ?
- y(0) - 1 : //make 1 px positive bars show up above y=0
- y(getY(d,i));
-
- return 'translate(' + left + ', ' + top + ')'
- })
- .select('rect')
- .attr('height', function(d,i) {
- return Math.max(Math.abs(y(getY(d,i)) - y((yDomain && yDomain[0]) || 0)) || 1)
- });
-
-
- //store old scales for use in transitions on update
- x0 = x.copy();
- y0 = y.copy();
-
- });
-
- renderWatch.renderEnd('discreteBar immediate');
- return chart;
- }
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- forceY: {get: function(){return forceY;}, set: function(_){forceY=_;}},
- showValues: {get: function(){return showValues;}, set: function(_){showValues=_;}},
- x: {get: function(){return getX;}, set: function(_){getX=_;}},
- y: {get: function(){return getY;}, set: function(_){getY=_;}},
- xScale: {get: function(){return x;}, set: function(_){x=_;}},
- yScale: {get: function(){return y;}, set: function(_){y=_;}},
- xDomain: {get: function(){return xDomain;}, set: function(_){xDomain=_;}},
- yDomain: {get: function(){return yDomain;}, set: function(_){yDomain=_;}},
- xRange: {get: function(){return xRange;}, set: function(_){xRange=_;}},
- yRange: {get: function(){return yRange;}, set: function(_){yRange=_;}},
- valueFormat: {get: function(){return valueFormat;}, set: function(_){valueFormat=_;}},
- id: {get: function(){return id;}, set: function(_){id=_;}},
- rectClass: {get: function(){return rectClass;}, set: function(_){rectClass=_;}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration = _;
- renderWatch.reset(duration);
- }}
- });
-
- nv.utils.initOptions(chart);
-
- return chart;
-};
-
-nv.models.discreteBarChart = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var discretebar = nv.models.discreteBar()
- , xAxis = nv.models.axis()
- , yAxis = nv.models.axis()
- , tooltip = nv.models.tooltip()
- ;
-
- var margin = {top: 15, right: 10, bottom: 50, left: 60}
- , width = null
- , height = null
- , color = nv.utils.getColor()
- , showXAxis = true
- , showYAxis = true
- , rightAlignYAxis = false
- , staggerLabels = false
- , x
- , y
- , noData = null
- , dispatch = d3.dispatch('beforeUpdate','renderEnd')
- , duration = 250
- ;
-
- xAxis
- .orient('bottom')
- .showMaxMin(false)
- .tickFormat(function(d) { return d })
- ;
- yAxis
- .orient((rightAlignYAxis) ? 'right' : 'left')
- .tickFormat(d3.format(',.1f'))
- ;
-
- tooltip
- .duration(0)
- .headerEnabled(false)
- .valueFormatter(function(d, i) {
- return yAxis.tickFormat()(d, i);
- })
- .keyFormatter(function(d, i) {
- return xAxis.tickFormat()(d, i);
- });
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var renderWatch = nv.utils.renderWatch(dispatch, duration);
-
- function chart(selection) {
- renderWatch.reset();
- renderWatch.models(discretebar);
- if (showXAxis) renderWatch.models(xAxis);
- if (showYAxis) renderWatch.models(yAxis);
-
- selection.each(function(data) {
- var container = d3.select(this),
- that = this;
- nv.utils.initSVG(container);
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- chart.update = function() {
- dispatch.beforeUpdate();
- container.transition().duration(duration).call(chart);
- };
- chart.container = this;
-
- // Display No Data message if there's nothing to show.
- if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
- nv.utils.noData(chart, container);
- return chart;
- } else {
- container.selectAll('.nv-noData').remove();
- }
-
- // Setup Scales
- x = discretebar.xScale();
- y = discretebar.yScale().clamp(true);
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-discreteBarWithAxes').data([data]);
- var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-discreteBarWithAxes').append('g');
- var defsEnter = gEnter.append('defs');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-x nv-axis');
- gEnter.append('g').attr('class', 'nv-y nv-axis')
- .append('g').attr('class', 'nv-zeroLine')
- .append('line');
-
- gEnter.append('g').attr('class', 'nv-barsWrap');
-
- g.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- if (rightAlignYAxis) {
- g.select(".nv-y.nv-axis")
- .attr("transform", "translate(" + availableWidth + ",0)");
- }
-
- // Main Chart Component(s)
- discretebar
- .width(availableWidth)
- .height(availableHeight);
-
- var barsWrap = g.select('.nv-barsWrap')
- .datum(data.filter(function(d) { return !d.disabled }));
-
- barsWrap.transition().call(discretebar);
-
-
- defsEnter.append('clipPath')
- .attr('id', 'nv-x-label-clip-' + discretebar.id())
- .append('rect');
-
- g.select('#nv-x-label-clip-' + discretebar.id() + ' rect')
- .attr('width', x.rangeBand() * (staggerLabels ? 2 : 1))
- .attr('height', 16)
- .attr('x', -x.rangeBand() / (staggerLabels ? 1 : 2 ));
-
- // Setup Axes
- if (showXAxis) {
- xAxis
- .scale(x)
- ._ticks( nv.utils.calcTicksX(availableWidth/100, data) )
- .tickSize(-availableHeight, 0);
-
- g.select('.nv-x.nv-axis')
- .attr('transform', 'translate(0,' + (y.range()[0] + ((discretebar.showValues() && y.domain()[0] < 0) ? 16 : 0)) + ')');
- g.select('.nv-x.nv-axis').call(xAxis);
-
- var xTicks = g.select('.nv-x.nv-axis').selectAll('g');
- if (staggerLabels) {
- xTicks
- .selectAll('text')
- .attr('transform', function(d,i,j) { return 'translate(0,' + (j % 2 == 0 ? '5' : '17') + ')' })
- }
- }
-
- if (showYAxis) {
- yAxis
- .scale(y)
- ._ticks( nv.utils.calcTicksY(availableHeight/36, data) )
- .tickSize( -availableWidth, 0);
-
- g.select('.nv-y.nv-axis').call(yAxis);
- }
-
- // Zero line
- g.select(".nv-zeroLine line")
- .attr("x1",0)
- .attr("x2",availableWidth)
- .attr("y1", y(0))
- .attr("y2", y(0))
- ;
- });
-
- renderWatch.renderEnd('discreteBar chart immediate');
- return chart;
- }
-
- //============================================================
- // Event Handling/Dispatching (out of chart's scope)
- //------------------------------------------------------------
-
- discretebar.dispatch.on('elementMouseover.tooltip', function(evt) {
- evt['series'] = {
- key: chart.x()(evt.data),
- value: chart.y()(evt.data),
- color: evt.color
- };
- tooltip.data(evt).hidden(false);
- });
-
- discretebar.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true);
- });
-
- discretebar.dispatch.on('elementMousemove.tooltip', function(evt) {
- tooltip.position({top: d3.event.pageY, left: d3.event.pageX})();
- });
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.discretebar = discretebar;
- chart.xAxis = xAxis;
- chart.yAxis = yAxis;
- chart.tooltip = tooltip;
-
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- staggerLabels: {get: function(){return staggerLabels;}, set: function(_){staggerLabels=_;}},
- showXAxis: {get: function(){return showXAxis;}, set: function(_){showXAxis=_;}},
- showYAxis: {get: function(){return showYAxis;}, set: function(_){showYAxis=_;}},
- noData: {get: function(){return noData;}, set: function(_){noData=_;}},
-
- // deprecated options
- tooltips: {get: function(){return tooltip.enabled();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltips', 'use chart.tooltip.enabled() instead');
- tooltip.enabled(!!_);
- }},
- tooltipContent: {get: function(){return tooltip.contentGenerator();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltipContent', 'use chart.tooltip.contentGenerator() instead');
- tooltip.contentGenerator(_);
- }},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration = _;
- renderWatch.reset(duration);
- discretebar.duration(duration);
- xAxis.duration(duration);
- yAxis.duration(duration);
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- discretebar.color(color);
- }},
- rightAlignYAxis: {get: function(){return rightAlignYAxis;}, set: function(_){
- rightAlignYAxis = _;
- yAxis.orient( (_) ? 'right' : 'left');
- }}
- });
-
- nv.utils.inheritOptions(chart, discretebar);
- nv.utils.initOptions(chart);
-
- return chart;
-}
-
-nv.models.distribution = function() {
- "use strict";
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 0, right: 0, bottom: 0, left: 0}
- , width = 400 //technically width or height depending on x or y....
- , size = 8
- , axis = 'x' // 'x' or 'y'... horizontal or vertical
- , getData = function(d) { return d[axis] } // defaults d.x or d.y
- , color = nv.utils.defaultColor()
- , scale = d3.scale.linear()
- , domain
- , duration = 250
- , dispatch = d3.dispatch('renderEnd')
- ;
-
- //============================================================
-
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var scale0;
- var renderWatch = nv.utils.renderWatch(dispatch, duration);
-
- //============================================================
-
-
- function chart(selection) {
- renderWatch.reset();
- selection.each(function(data) {
- var availableLength = width - (axis === 'x' ? margin.left + margin.right : margin.top + margin.bottom),
- naxis = axis == 'x' ? 'y' : 'x',
- container = d3.select(this);
- nv.utils.initSVG(container);
-
- //------------------------------------------------------------
- // Setup Scales
-
- scale0 = scale0 || scale;
-
- //------------------------------------------------------------
-
-
- //------------------------------------------------------------
- // Setup containers and skeleton of chart
-
- var wrap = container.selectAll('g.nv-distribution').data([data]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-distribution');
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')
-
- //------------------------------------------------------------
-
-
- var distWrap = g.selectAll('g.nv-dist')
- .data(function(d) { return d }, function(d) { return d.key });
-
- distWrap.enter().append('g');
- distWrap
- .attr('class', function(d,i) { return 'nv-dist nv-series-' + i })
- .style('stroke', function(d,i) { return color(d, i) });
-
- var dist = distWrap.selectAll('line.nv-dist' + axis)
- .data(function(d) { return d.values })
- dist.enter().append('line')
- .attr(axis + '1', function(d,i) { return scale0(getData(d,i)) })
- .attr(axis + '2', function(d,i) { return scale0(getData(d,i)) })
- renderWatch.transition(distWrap.exit().selectAll('line.nv-dist' + axis), 'dist exit')
- // .transition()
- .attr(axis + '1', function(d,i) { return scale(getData(d,i)) })
- .attr(axis + '2', function(d,i) { return scale(getData(d,i)) })
- .style('stroke-opacity', 0)
- .remove();
- dist
- .attr('class', function(d,i) { return 'nv-dist' + axis + ' nv-dist' + axis + '-' + i })
- .attr(naxis + '1', 0)
- .attr(naxis + '2', size);
- renderWatch.transition(dist, 'dist')
- // .transition()
- .attr(axis + '1', function(d,i) { return scale(getData(d,i)) })
- .attr(axis + '2', function(d,i) { return scale(getData(d,i)) })
-
-
- scale0 = scale.copy();
-
- });
- renderWatch.renderEnd('distribution immediate');
- return chart;
- }
-
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
- chart.options = nv.utils.optionsFunc.bind(chart);
- chart.dispatch = dispatch;
-
- chart.margin = function(_) {
- if (!arguments.length) return margin;
- margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
- margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
- margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
- margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
- return chart;
- };
-
- chart.width = function(_) {
- if (!arguments.length) return width;
- width = _;
- return chart;
- };
-
- chart.axis = function(_) {
- if (!arguments.length) return axis;
- axis = _;
- return chart;
- };
-
- chart.size = function(_) {
- if (!arguments.length) return size;
- size = _;
- return chart;
- };
-
- chart.getData = function(_) {
- if (!arguments.length) return getData;
- getData = d3.functor(_);
- return chart;
- };
-
- chart.scale = function(_) {
- if (!arguments.length) return scale;
- scale = _;
- return chart;
- };
-
- chart.color = function(_) {
- if (!arguments.length) return color;
- color = nv.utils.getColor(_);
- return chart;
- };
-
- chart.duration = function(_) {
- if (!arguments.length) return duration;
- duration = _;
- renderWatch.reset(duration);
- return chart;
- };
- //============================================================
-
-
- return chart;
-}
-nv.models.furiousLegend = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 5, right: 0, bottom: 5, left: 0}
- , width = 400
- , height = 20
- , getKey = function(d) { return d.key }
- , color = nv.utils.getColor()
- , align = true
- , padding = 28 //define how much space between legend items. - recommend 32 for furious version
- , rightAlign = true
- , updateState = true //If true, legend will update data.disabled and trigger a 'stateChange' dispatch.
- , radioButtonMode = false //If true, clicking legend items will cause it to behave like a radio button. (only one can be selected at a time)
- , expanded = false
- , dispatch = d3.dispatch('legendClick', 'legendDblclick', 'legendMouseover', 'legendMouseout', 'stateChange')
- , vers = 'classic' //Options are "classic" and "furious"
- ;
-
- function chart(selection) {
- selection.each(function(data) {
- var availableWidth = width - margin.left - margin.right,
- container = d3.select(this);
- nv.utils.initSVG(container);
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-legend').data([data]);
- var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-legend').append('g');
- var g = wrap.select('g');
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- var series = g.selectAll('.nv-series')
- .data(function(d) {
- if(vers != 'furious') return d;
-
- return d.filter(function(n) {
- return expanded ? true : !n.disengaged;
- });
- });
- var seriesEnter = series.enter().append('g').attr('class', 'nv-series')
-
- var seriesShape;
-
- if(vers == 'classic') {
- seriesEnter.append('circle')
- .style('stroke-width', 2)
- .attr('class','nv-legend-symbol')
- .attr('r', 5);
-
- seriesShape = series.select('circle');
- } else if (vers == 'furious') {
- seriesEnter.append('rect')
- .style('stroke-width', 2)
- .attr('class','nv-legend-symbol')
- .attr('rx', 3)
- .attr('ry', 3);
-
- seriesShape = series.select('rect');
-
- seriesEnter.append('g')
- .attr('class', 'nv-check-box')
- .property('innerHTML','<path d="M0.5,5 L22.5,5 L22.5,26.5 L0.5,26.5 L0.5,5 Z" class="nv-box"></path><path d="M5.5,12.8618467 L11.9185089,19.2803556 L31,0.198864511" class="nv-check"></path>')
- .attr('transform', 'translate(-10,-8)scale(0.5)');
-
- var seriesCheckbox = series.select('.nv-check-box');
-
- seriesCheckbox.each(function(d,i) {
- d3.select(this).selectAll('path')
- .attr('stroke', setTextColor(d,i));
- });
- }
-
- seriesEnter.append('text')
- .attr('text-anchor', 'start')
- .attr('class','nv-legend-text')
- .attr('dy', '.32em')
- .attr('dx', '8');
-
- var seriesText = series.select('text.nv-legend-text');
-
- series
- .on('mouseover', function(d,i) {
- dispatch.legendMouseover(d,i); //TODO: Make consistent with other event objects
- })
- .on('mouseout', function(d,i) {
- dispatch.legendMouseout(d,i);
- })
- .on('click', function(d,i) {
- dispatch.legendClick(d,i);
- // make sure we re-get data in case it was modified
- var data = series.data();
- if (updateState) {
- if(vers =='classic') {
- if (radioButtonMode) {
- //Radio button mode: set every series to disabled,
- // and enable the clicked series.
- data.forEach(function(series) { series.disabled = true});
- d.disabled = false;
- }
- else {
- d.disabled = !d.disabled;
- if (data.every(function(series) { return series.disabled})) {
- //the default behavior of NVD3 legends is, if every single series
- // is disabled, turn all series' back on.
- data.forEach(function(series) { series.disabled = false});
- }
- }
- } else if(vers == 'furious') {
- if(expanded) {
- d.disengaged = !d.disengaged;
- d.userDisabled = d.userDisabled == undefined ? !!d.disabled : d.userDisabled;
- d.disabled = d.disengaged || d.userDisabled;
- } else if (!expanded) {
- d.disabled = !d.disabled;
- d.userDisabled = d.disabled;
- var engaged = data.filter(function(d) { return !d.disengaged; });
- if (engaged.every(function(series) { return series.userDisabled })) {
- //the default behavior of NVD3 legends is, if every single series
- // is disabled, turn all series' back on.
- data.forEach(function(series) {
- series.disabled = series.userDisabled = false;
- });
- }
- }
- }
- dispatch.stateChange({
- disabled: data.map(function(d) { return !!d.disabled }),
- disengaged: data.map(function(d) { return !!d.disengaged })
- });
-
- }
- })
- .on('dblclick', function(d,i) {
- if(vers == 'furious' && expanded) return;
- dispatch.legendDblclick(d,i);
- if (updateState) {
- // make sure we re-get data in case it was modified
- var data = series.data();
- //the default behavior of NVD3 legends, when double clicking one,
- // is to set all other series' to false, and make the double clicked series enabled.
- data.forEach(function(series) {
- series.disabled = true;
- if(vers == 'furious') series.userDisabled = series.disabled;
- });
- d.disabled = false;
- if(vers == 'furious') d.userDisabled = d.disabled;
- dispatch.stateChange({
- disabled: data.map(function(d) { return !!d.disabled })
- });
- }
- });
-
- series.classed('nv-disabled', function(d) { return d.userDisabled });
- series.exit().remove();
-
- seriesText
- .attr('fill', setTextColor)
- .text(getKey);
-
- //TODO: implement fixed-width and max-width options (max-width is especially useful with the align option)
- // NEW ALIGNING CODE, TODO: clean up
-
- var versPadding;
- switch(vers) {
- case 'furious' :
- versPadding = 23;
- break;
- case 'classic' :
- versPadding = 20;
- }
-
- if (align) {
-
- var seriesWidths = [];
- series.each(function(d,i) {
- var legendText = d3.select(this).select('text');
- var nodeTextLength;
- try {
- nodeTextLength = legendText.node().getComputedTextLength();
- // If the legendText is display:none'd (nodeTextLength == 0), simulate an error so we approximate, instead
- if(nodeTextLength <= 0) throw Error();
- }
- catch(e) {
- nodeTextLength = nv.utils.calcApproxTextWidth(legendText);
- }
-
- seriesWidths.push(nodeTextLength + padding);
- });
-
- var seriesPerRow = 0;
- var legendWidth = 0;
- var columnWidths = [];
-
- while ( legendWidth < availableWidth && seriesPerRow < seriesWidths.length) {
- columnWidths[seriesPerRow] = seriesWidths[seriesPerRow];
- legendWidth += seriesWidths[seriesPerRow++];
- }
- if (seriesPerRow === 0) seriesPerRow = 1; //minimum of one series per row
-
- while ( legendWidth > availableWidth && seriesPerRow > 1 ) {
- columnWidths = [];
- seriesPerRow--;
-
- for (var k = 0; k < seriesWidths.length; k++) {
- if (seriesWidths[k] > (columnWidths[k % seriesPerRow] || 0) )
- columnWidths[k % seriesPerRow] = seriesWidths[k];
- }
-
- legendWidth = columnWidths.reduce(function(prev, cur, index, array) {
- return prev + cur;
- });
- }
-
- var xPositions = [];
- for (var i = 0, curX = 0; i < seriesPerRow; i++) {
- xPositions[i] = curX;
- curX += columnWidths[i];
- }
-
- series
- .attr('transform', function(d, i) {
- return 'translate(' + xPositions[i % seriesPerRow] + ',' + (5 + Math.floor(i / seriesPerRow) * versPadding) + ')';
- });
-
- //position legend as far right as possible within the total width
- if (rightAlign) {
- g.attr('transform', 'translate(' + (width - margin.right - legendWidth) + ',' + margin.top + ')');
- }
- else {
- g.attr('transform', 'translate(0' + ',' + margin.top + ')');
- }
-
- height = margin.top + margin.bottom + (Math.ceil(seriesWidths.length / seriesPerRow) * versPadding);
-
- } else {
-
- var ypos = 5,
- newxpos = 5,
- maxwidth = 0,
- xpos;
- series
- .attr('transform', function(d, i) {
- var length = d3.select(this).select('text').node().getComputedTextLength() + padding;
- xpos = newxpos;
-
- if (width < margin.left + margin.right + xpos + length) {
- newxpos = xpos = 5;
- ypos += versPadding;
- }
-
- newxpos += length;
- if (newxpos > maxwidth) maxwidth = newxpos;
-
- return 'translate(' + xpos + ',' + ypos + ')';
- });
-
- //position legend as far right as possible within the total width
- g.attr('transform', 'translate(' + (width - margin.right - maxwidth) + ',' + margin.top + ')');
-
- height = margin.top + margin.bottom + ypos + 15;
- }
-
- if(vers == 'furious') {
- // Size rectangles after text is placed
- seriesShape
- .attr('width', function(d,i) {
- return seriesText[0][i].getComputedTextLength() + 27;
- })
- .attr('height', 18)
- .attr('y', -9)
- .attr('x', -15)
- }
-
- seriesShape
- .style('fill', setBGColor)
- .style('stroke', function(d,i) { return d.color || color(d, i) });
- });
-
- function setTextColor(d,i) {
- if(vers != 'furious') return '#000';
- if(expanded) {
- return d.disengaged ? color(d,i) : '#fff';
- } else if (!expanded) {
- return !!d.disabled ? color(d,i) : '#fff';
- }
- }
-
- function setBGColor(d,i) {
- if(expanded && vers == 'furious') {
- return d.disengaged ? '#fff' : color(d,i);
- } else {
- return !!d.disabled ? '#fff' : color(d,i);
- }
- }
-
- return chart;
- }
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- key: {get: function(){return getKey;}, set: function(_){getKey=_;}},
- align: {get: function(){return align;}, set: function(_){align=_;}},
- rightAlign: {get: function(){return rightAlign;}, set: function(_){rightAlign=_;}},
- padding: {get: function(){return padding;}, set: function(_){padding=_;}},
- updateState: {get: function(){return updateState;}, set: function(_){updateState=_;}},
- radioButtonMode: {get: function(){return radioButtonMode;}, set: function(_){radioButtonMode=_;}},
- expanded: {get: function(){return expanded;}, set: function(_){expanded=_;}},
- vers: {get: function(){return vers;}, set: function(_){vers=_;}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- }}
- });
-
- nv.utils.initOptions(chart);
-
- return chart;
-};
-//TODO: consider deprecating and using multibar with single series for this
-nv.models.historicalBar = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 0, right: 0, bottom: 0, left: 0}
- , width = null
- , height = null
- , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one
- , container = null
- , x = d3.scale.linear()
- , y = d3.scale.linear()
- , getX = function(d) { return d.x }
- , getY = function(d) { return d.y }
- , forceX = []
- , forceY = [0]
- , padData = false
- , clipEdge = true
- , color = nv.utils.defaultColor()
- , xDomain
- , yDomain
- , xRange
- , yRange
- , dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout', 'elementMousemove', 'renderEnd')
- , interactive = true
- ;
-
- var renderWatch = nv.utils.renderWatch(dispatch, 0);
-
- function chart(selection) {
- selection.each(function(data) {
- renderWatch.reset();
-
- container = d3.select(this);
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- nv.utils.initSVG(container);
-
- // Setup Scales
- x.domain(xDomain || d3.extent(data[0].values.map(getX).concat(forceX) ));
-
- if (padData)
- x.range(xRange || [availableWidth * .5 / data[0].values.length, availableWidth * (data[0].values.length - .5) / data[0].values.length ]);
- else
- x.range(xRange || [0, availableWidth]);
-
- y.domain(yDomain || d3.extent(data[0].values.map(getY).concat(forceY) ))
- .range(yRange || [availableHeight, 0]);
-
- // If scale's domain don't have a range, slightly adjust to make one... so a chart can show a single data point
- if (x.domain()[0] === x.domain()[1])
- x.domain()[0] ?
- x.domain([x.domain()[0] - x.domain()[0] * 0.01, x.domain()[1] + x.domain()[1] * 0.01])
- : x.domain([-1,1]);
-
- if (y.domain()[0] === y.domain()[1])
- y.domain()[0] ?
- y.domain([y.domain()[0] + y.domain()[0] * 0.01, y.domain()[1] - y.domain()[1] * 0.01])
- : y.domain([-1,1]);
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-historicalBar-' + id).data([data[0].values]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-historicalBar-' + id);
- var defsEnter = wrapEnter.append('defs');
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-bars');
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- container
- .on('click', function(d,i) {
- dispatch.chartClick({
- data: d,
- index: i,
- pos: d3.event,
- id: id
- });
- });
-
- defsEnter.append('clipPath')
- .attr('id', 'nv-chart-clip-path-' + id)
- .append('rect');
-
- wrap.select('#nv-chart-clip-path-' + id + ' rect')
- .attr('width', availableWidth)
- .attr('height', availableHeight);
-
- g.attr('clip-path', clipEdge ? 'url(#nv-chart-clip-path-' + id + ')' : '');
-
- var bars = wrap.select('.nv-bars').selectAll('.nv-bar')
- .data(function(d) { return d }, function(d,i) {return getX(d,i)});
- bars.exit().remove();
-
- bars.enter().append('rect')
- .attr('x', 0 )
- .attr('y', function(d,i) { return nv.utils.NaNtoZero(y(Math.max(0, getY(d,i)))) })
- .attr('height', function(d,i) { return nv.utils.NaNtoZero(Math.abs(y(getY(d,i)) - y(0))) })
- .attr('transform', function(d,i) { return 'translate(' + (x(getX(d,i)) - availableWidth / data[0].values.length * .45) + ',0)'; })
- .on('mouseover', function(d,i) {
- if (!interactive) return;
- d3.select(this).classed('hover', true);
- dispatch.elementMouseover({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
-
- })
- .on('mouseout', function(d,i) {
- if (!interactive) return;
- d3.select(this).classed('hover', false);
- dispatch.elementMouseout({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- })
- .on('mousemove', function(d,i) {
- if (!interactive) return;
- dispatch.elementMousemove({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- })
- .on('click', function(d,i) {
- if (!interactive) return;
- dispatch.elementClick({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- d3.event.stopPropagation();
- })
- .on('dblclick', function(d,i) {
- if (!interactive) return;
- dispatch.elementDblClick({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- d3.event.stopPropagation();
- });
-
- bars
- .attr('fill', function(d,i) { return color(d, i); })
- .attr('class', function(d,i,j) { return (getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive') + ' nv-bar-' + j + '-' + i })
- .watchTransition(renderWatch, 'bars')
- .attr('transform', function(d,i) { return 'translate(' + (x(getX(d,i)) - availableWidth / data[0].values.length * .45) + ',0)'; })
- //TODO: better width calculations that don't assume always uniform data spacing;w
- .attr('width', (availableWidth / data[0].values.length) * .9 );
-
- bars.watchTransition(renderWatch, 'bars')
- .attr('y', function(d,i) {
- var rval = getY(d,i) < 0 ?
- y(0) :
- y(0) - y(getY(d,i)) < 1 ?
- y(0) - 1 :
- y(getY(d,i));
- return nv.utils.NaNtoZero(rval);
- })
- .attr('height', function(d,i) { return nv.utils.NaNtoZero(Math.max(Math.abs(y(getY(d,i)) - y(0)),1)) });
-
- });
-
- renderWatch.renderEnd('historicalBar immediate');
- return chart;
- }
-
- //Create methods to allow outside functions to highlight a specific bar.
- chart.highlightPoint = function(pointIndex, isHoverOver) {
- container
- .select(".nv-bars .nv-bar-0-" + pointIndex)
- .classed("hover", isHoverOver)
- ;
- };
-
- chart.clearHighlights = function() {
- container
- .select(".nv-bars .nv-bar.hover")
- .classed("hover", false)
- ;
- };
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- forceX: {get: function(){return forceX;}, set: function(_){forceX=_;}},
- forceY: {get: function(){return forceY;}, set: function(_){forceY=_;}},
- padData: {get: function(){return padData;}, set: function(_){padData=_;}},
- x: {get: function(){return getX;}, set: function(_){getX=_;}},
- y: {get: function(){return getY;}, set: function(_){getY=_;}},
- xScale: {get: function(){return x;}, set: function(_){x=_;}},
- yScale: {get: function(){return y;}, set: function(_){y=_;}},
- xDomain: {get: function(){return xDomain;}, set: function(_){xDomain=_;}},
- yDomain: {get: function(){return yDomain;}, set: function(_){yDomain=_;}},
- xRange: {get: function(){return xRange;}, set: function(_){xRange=_;}},
- yRange: {get: function(){return yRange;}, set: function(_){yRange=_;}},
- clipEdge: {get: function(){return clipEdge;}, set: function(_){clipEdge=_;}},
- id: {get: function(){return id;}, set: function(_){id=_;}},
- interactive: {get: function(){return interactive;}, set: function(_){interactive=_;}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- }}
- });
-
- nv.utils.initOptions(chart);
-
- return chart;
-};
-
-nv.models.historicalBarChart = function(bar_model) {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var bars = bar_model || nv.models.historicalBar()
- , xAxis = nv.models.axis()
- , yAxis = nv.models.axis()
- , legend = nv.models.legend()
- , interactiveLayer = nv.interactiveGuideline()
- , tooltip = nv.models.tooltip()
- ;
-
-
- var margin = {top: 30, right: 90, bottom: 50, left: 90}
- , color = nv.utils.defaultColor()
- , width = null
- , height = null
- , showLegend = false
- , showXAxis = true
- , showYAxis = true
- , rightAlignYAxis = false
- , useInteractiveGuideline = false
- , x
- , y
- , state = {}
- , defaultState = null
- , noData = null
- , dispatch = d3.dispatch('tooltipHide', 'stateChange', 'changeState', 'renderEnd')
- , transitionDuration = 250
- ;
-
- xAxis.orient('bottom').tickPadding(7);
- yAxis.orient( (rightAlignYAxis) ? 'right' : 'left');
- tooltip
- .duration(0)
- .headerEnabled(false)
- .valueFormatter(function(d, i) {
- return yAxis.tickFormat()(d, i);
- })
- .headerFormatter(function(d, i) {
- return xAxis.tickFormat()(d, i);
- });
-
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var renderWatch = nv.utils.renderWatch(dispatch, 0);
-
- function chart(selection) {
- selection.each(function(data) {
- renderWatch.reset();
- renderWatch.models(bars);
- if (showXAxis) renderWatch.models(xAxis);
- if (showYAxis) renderWatch.models(yAxis);
-
- var container = d3.select(this),
- that = this;
- nv.utils.initSVG(container);
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- chart.update = function() { container.transition().duration(transitionDuration).call(chart) };
- chart.container = this;
-
- //set state.disabled
- state.disabled = data.map(function(d) { return !!d.disabled });
-
- if (!defaultState) {
- var key;
- defaultState = {};
- for (key in state) {
- if (state[key] instanceof Array)
- defaultState[key] = state[key].slice(0);
- else
- defaultState[key] = state[key];
- }
- }
-
- // Display noData message if there's nothing to show.
- if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
- nv.utils.noData(chart, container)
- return chart;
- } else {
- container.selectAll('.nv-noData').remove();
- }
-
- // Setup Scales
- x = bars.xScale();
- y = bars.yScale();
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-historicalBarChart').data([data]);
- var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-historicalBarChart').append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-x nv-axis');
- gEnter.append('g').attr('class', 'nv-y nv-axis');
- gEnter.append('g').attr('class', 'nv-barsWrap');
- gEnter.append('g').attr('class', 'nv-legendWrap');
- gEnter.append('g').attr('class', 'nv-interactive');
-
- // Legend
- if (showLegend) {
- legend.width(availableWidth);
-
- g.select('.nv-legendWrap')
- .datum(data)
- .call(legend);
-
- if ( margin.top != legend.height()) {
- margin.top = legend.height();
- availableHeight = nv.utils.availableHeight(height, container, margin);
- }
-
- wrap.select('.nv-legendWrap')
- .attr('transform', 'translate(0,' + (-margin.top) +')')
- }
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- if (rightAlignYAxis) {
- g.select(".nv-y.nv-axis")
- .attr("transform", "translate(" + availableWidth + ",0)");
- }
-
- //Set up interactive layer
- if (useInteractiveGuideline) {
- interactiveLayer
- .width(availableWidth)
- .height(availableHeight)
- .margin({left:margin.left, top:margin.top})
- .svgContainer(container)
- .xScale(x);
- wrap.select(".nv-interactive").call(interactiveLayer);
- }
- bars
- .width(availableWidth)
- .height(availableHeight)
- .color(data.map(function(d,i) {
- return d.color || color(d, i);
- }).filter(function(d,i) { return !data[i].disabled }));
-
- var barsWrap = g.select('.nv-barsWrap')
- .datum(data.filter(function(d) { return !d.disabled }));
- barsWrap.transition().call(bars);
-
- // Setup Axes
- if (showXAxis) {
- xAxis
- .scale(x)
- ._ticks( nv.utils.calcTicksX(availableWidth/100, data) )
- .tickSize(-availableHeight, 0);
-
- g.select('.nv-x.nv-axis')
- .attr('transform', 'translate(0,' + y.range()[0] + ')');
- g.select('.nv-x.nv-axis')
- .transition()
- .call(xAxis);
- }
-
- if (showYAxis) {
- yAxis
- .scale(y)
- ._ticks( nv.utils.calcTicksY(availableHeight/36, data) )
- .tickSize( -availableWidth, 0);
-
- g.select('.nv-y.nv-axis')
- .transition()
- .call(yAxis);
- }
-
- //============================================================
- // Event Handling/Dispatching (in chart's scope)
- //------------------------------------------------------------
-
- interactiveLayer.dispatch.on('elementMousemove', function(e) {
- bars.clearHighlights();
-
- var singlePoint, pointIndex, pointXLocation, allData = [];
- data
- .filter(function(series, i) {
- series.seriesIndex = i;
- return !series.disabled;
- })
- .forEach(function(series,i) {
- pointIndex = nv.interactiveBisect(series.values, e.pointXValue, chart.x());
- bars.highlightPoint(pointIndex,true);
- var point = series.values[pointIndex];
- if (point === undefined) return;
- if (singlePoint === undefined) singlePoint = point;
- if (pointXLocation === undefined) pointXLocation = chart.xScale()(chart.x()(point,pointIndex));
- allData.push({
- key: series.key,
- value: chart.y()(point, pointIndex),
- color: color(series,series.seriesIndex),
- data: series.values[pointIndex]
- });
- });
-
- var xValue = xAxis.tickFormat()(chart.x()(singlePoint,pointIndex));
- interactiveLayer.tooltip
- .position({left: pointXLocation + margin.left, top: e.mouseY + margin.top})
- .chartContainer(that.parentNode)
- .valueFormatter(function(d,i) {
- return yAxis.tickFormat()(d);
- })
- .data({
- value: xValue,
- index: pointIndex,
- series: allData
- })();
-
- interactiveLayer.renderGuideLine(pointXLocation);
-
- });
-
- interactiveLayer.dispatch.on("elementMouseout",function(e) {
- dispatch.tooltipHide();
- bars.clearHighlights();
- });
-
- legend.dispatch.on('legendClick', function(d,i) {
- d.disabled = !d.disabled;
-
- if (!data.filter(function(d) { return !d.disabled }).length) {
- data.map(function(d) {
- d.disabled = false;
- wrap.selectAll('.nv-series').classed('disabled', false);
- return d;
- });
- }
-
- state.disabled = data.map(function(d) { return !!d.disabled });
- dispatch.stateChange(state);
-
- selection.transition().call(chart);
- });
-
- legend.dispatch.on('legendDblclick', function(d) {
- //Double clicking should always enable current series, and disabled all others.
- data.forEach(function(d) {
- d.disabled = true;
- });
- d.disabled = false;
-
- state.disabled = data.map(function(d) { return !!d.disabled });
- dispatch.stateChange(state);
- chart.update();
- });
-
- dispatch.on('changeState', function(e) {
- if (typeof e.disabled !== 'undefined') {
- data.forEach(function(series,i) {
- series.disabled = e.disabled[i];
- });
-
- state.disabled = e.disabled;
- }
-
- chart.update();
- });
- });
-
- renderWatch.renderEnd('historicalBarChart immediate');
- return chart;
- }
-
- //============================================================
- // Event Handling/Dispatching (out of chart's scope)
- //------------------------------------------------------------
-
- bars.dispatch.on('elementMouseover.tooltip', function(evt) {
- evt['series'] = {
- key: chart.x()(evt.data),
- value: chart.y()(evt.data),
- color: evt.color
- };
- tooltip.data(evt).hidden(false);
- });
-
- bars.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true);
- });
-
- bars.dispatch.on('elementMousemove.tooltip', function(evt) {
- tooltip.position({top: d3.event.pageY, left: d3.event.pageX})();
- });
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- // expose chart's sub-components
- chart.dispatch = dispatch;
- chart.bars = bars;
- chart.legend = legend;
- chart.xAxis = xAxis;
- chart.yAxis = yAxis;
- chart.interactiveLayer = interactiveLayer;
- chart.tooltip = tooltip;
-
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- showLegend: {get: function(){return showLegend;}, set: function(_){showLegend=_;}},
- showXAxis: {get: function(){return showXAxis;}, set: function(_){showXAxis=_;}},
- showYAxis: {get: function(){return showYAxis;}, set: function(_){showYAxis=_;}},
- defaultState: {get: function(){return defaultState;}, set: function(_){defaultState=_;}},
- noData: {get: function(){return noData;}, set: function(_){noData=_;}},
-
- // deprecated options
- tooltips: {get: function(){return tooltip.enabled();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltips', 'use chart.tooltip.enabled() instead');
- tooltip.enabled(!!_);
- }},
- tooltipContent: {get: function(){return tooltip.contentGenerator();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltipContent', 'use chart.tooltip.contentGenerator() instead');
- tooltip.contentGenerator(_);
- }},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- legend.color(color);
- bars.color(color);
- }},
- duration: {get: function(){return transitionDuration;}, set: function(_){
- transitionDuration=_;
- renderWatch.reset(transitionDuration);
- yAxis.duration(transitionDuration);
- xAxis.duration(transitionDuration);
- }},
- rightAlignYAxis: {get: function(){return rightAlignYAxis;}, set: function(_){
- rightAlignYAxis = _;
- yAxis.orient( (_) ? 'right' : 'left');
- }},
- useInteractiveGuideline: {get: function(){return useInteractiveGuideline;}, set: function(_){
- useInteractiveGuideline = _;
- if (_ === true) {
- chart.interactive(false);
- }
- }}
- });
-
- nv.utils.inheritOptions(chart, bars);
- nv.utils.initOptions(chart);
-
- return chart;
-};
-
-
-// ohlcChart is just a historical chart with ohlc bars and some tweaks
-nv.models.ohlcBarChart = function() {
- var chart = nv.models.historicalBarChart(nv.models.ohlcBar());
-
- // special default tooltip since we show multiple values per x
- chart.useInteractiveGuideline(true);
- chart.interactiveLayer.tooltip.contentGenerator(function(data) {
- // we assume only one series exists for this chart
- var d = data.series[0].data;
- // match line colors as defined in nv.d3.css
- var color = d.open < d.close ? "2ca02c" : "d62728";
- return '' +
- '<h3 style="color: #' + color + '">' + data.value + '</h3>' +
- '<table>' +
- '<tr><td>open:</td><td>' + chart.yAxis.tickFormat()(d.open) + '</td></tr>' +
- '<tr><td>close:</td><td>' + chart.yAxis.tickFormat()(d.close) + '</td></tr>' +
- '<tr><td>high</td><td>' + chart.yAxis.tickFormat()(d.high) + '</td></tr>' +
- '<tr><td>low:</td><td>' + chart.yAxis.tickFormat()(d.low) + '</td></tr>' +
- '</table>';
- });
- return chart;
-};
-
-// candlestickChart is just a historical chart with candlestick bars and some tweaks
-nv.models.candlestickBarChart = function() {
- var chart = nv.models.historicalBarChart(nv.models.candlestickBar());
-
- // special default tooltip since we show multiple values per x
- chart.useInteractiveGuideline(true);
- chart.interactiveLayer.tooltip.contentGenerator(function(data) {
- // we assume only one series exists for this chart
- var d = data.series[0].data;
- // match line colors as defined in nv.d3.css
- var color = d.open < d.close ? "2ca02c" : "d62728";
- return '' +
- '<h3 style="color: #' + color + '">' + data.value + '</h3>' +
- '<table>' +
- '<tr><td>open:</td><td>' + chart.yAxis.tickFormat()(d.open) + '</td></tr>' +
- '<tr><td>close:</td><td>' + chart.yAxis.tickFormat()(d.close) + '</td></tr>' +
- '<tr><td>high</td><td>' + chart.yAxis.tickFormat()(d.high) + '</td></tr>' +
- '<tr><td>low:</td><td>' + chart.yAxis.tickFormat()(d.low) + '</td></tr>' +
- '</table>';
- });
- return chart;
-};
-nv.models.legend = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 5, right: 0, bottom: 5, left: 0}
- , width = 400
- , height = 20
- , getKey = function(d) { return d.key }
- , color = nv.utils.getColor()
- , align = true
- , padding = 32 //define how much space between legend items. - recommend 32 for furious version
- , rightAlign = true
- , updateState = true //If true, legend will update data.disabled and trigger a 'stateChange' dispatch.
- , radioButtonMode = false //If true, clicking legend items will cause it to behave like a radio button. (only one can be selected at a time)
- , expanded = false
- , dispatch = d3.dispatch('legendClick', 'legendDblclick', 'legendMouseover', 'legendMouseout', 'stateChange')
- , vers = 'classic' //Options are "classic" and "furious"
- ;
-
- function chart(selection) {
- selection.each(function(data) {
- var availableWidth = width - margin.left - margin.right,
- container = d3.select(this);
- nv.utils.initSVG(container);
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-legend').data([data]);
- var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-legend').append('g');
- var g = wrap.select('g');
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- var series = g.selectAll('.nv-series')
- .data(function(d) {
- if(vers != 'furious') return d;
-
- return d.filter(function(n) {
- return expanded ? true : !n.disengaged;
- });
- });
-
- var seriesEnter = series.enter().append('g').attr('class', 'nv-series');
- var seriesShape;
-
- var versPadding;
- switch(vers) {
- case 'furious' :
- versPadding = 23;
- break;
- case 'classic' :
- versPadding = 20;
- }
-
- if(vers == 'classic') {
- seriesEnter.append('circle')
- .style('stroke-width', 2)
- .attr('class','nv-legend-symbol')
- .attr('r', 5);
-
- seriesShape = series.select('circle');
- } else if (vers == 'furious') {
- seriesEnter.append('rect')
- .style('stroke-width', 2)
- .attr('class','nv-legend-symbol')
- .attr('rx', 3)
- .attr('ry', 3);
-
- seriesShape = series.select('.nv-legend-symbol');
-
- seriesEnter.append('g')
- .attr('class', 'nv-check-box')
- .property('innerHTML','<path d="M0.5,5 L22.5,5 L22.5,26.5 L0.5,26.5 L0.5,5 Z" class="nv-box"></path><path d="M5.5,12.8618467 L11.9185089,19.2803556 L31,0.198864511" class="nv-check"></path>')
- .attr('transform', 'translate(-10,-8)scale(0.5)');
-
- var seriesCheckbox = series.select('.nv-check-box');
-
- seriesCheckbox.each(function(d,i) {
- d3.select(this).selectAll('path')
- .attr('stroke', setTextColor(d,i));
- });
- }
-
- seriesEnter.append('text')
- .attr('text-anchor', 'start')
- .attr('class','nv-legend-text')
- .attr('dy', '.32em')
- .attr('dx', '8');
-
- var seriesText = series.select('text.nv-legend-text');
-
- series
- .on('mouseover', function(d,i) {
- dispatch.legendMouseover(d,i); //TODO: Make consistent with other event objects
- })
- .on('mouseout', function(d,i) {
- dispatch.legendMouseout(d,i);
- })
- .on('click', function(d,i) {
- dispatch.legendClick(d,i);
- // make sure we re-get data in case it was modified
- var data = series.data();
- if (updateState) {
- if(vers =='classic') {
- if (radioButtonMode) {
- //Radio button mode: set every series to disabled,
- // and enable the clicked series.
- data.forEach(function(series) { series.disabled = true});
- d.disabled = false;
- }
- else {
- d.disabled = !d.disabled;
- if (data.every(function(series) { return series.disabled})) {
- //the default behavior of NVD3 legends is, if every single series
- // is disabled, turn all series' back on.
- data.forEach(function(series) { series.disabled = false});
- }
- }
- } else if(vers == 'furious') {
- if(expanded) {
- d.disengaged = !d.disengaged;
- d.userDisabled = d.userDisabled == undefined ? !!d.disabled : d.userDisabled;
- d.disabled = d.disengaged || d.userDisabled;
- } else if (!expanded) {
- d.disabled = !d.disabled;
- d.userDisabled = d.disabled;
- var engaged = data.filter(function(d) { return !d.disengaged; });
- if (engaged.every(function(series) { return series.userDisabled })) {
- //the default behavior of NVD3 legends is, if every single series
- // is disabled, turn all series' back on.
- data.forEach(function(series) {
- series.disabled = series.userDisabled = false;
- });
- }
- }
- }
- dispatch.stateChange({
- disabled: data.map(function(d) { return !!d.disabled }),
- disengaged: data.map(function(d) { return !!d.disengaged })
- });
-
- }
- })
- .on('dblclick', function(d,i) {
- if(vers == 'furious' && expanded) return;
- dispatch.legendDblclick(d,i);
- if (updateState) {
- // make sure we re-get data in case it was modified
- var data = series.data();
- //the default behavior of NVD3 legends, when double clicking one,
- // is to set all other series' to false, and make the double clicked series enabled.
- data.forEach(function(series) {
- series.disabled = true;
- if(vers == 'furious') series.userDisabled = series.disabled;
- });
- d.disabled = false;
- if(vers == 'furious') d.userDisabled = d.disabled;
- dispatch.stateChange({
- disabled: data.map(function(d) { return !!d.disabled })
- });
- }
- });
-
- series.classed('nv-disabled', function(d) { return d.userDisabled });
- series.exit().remove();
-
- seriesText
- .attr('fill', setTextColor)
- .text(getKey);
-
- //TODO: implement fixed-width and max-width options (max-width is especially useful with the align option)
- // NEW ALIGNING CODE, TODO: clean up
- var legendWidth = 0;
- if (align) {
-
- var seriesWidths = [];
- series.each(function(d,i) {
- var legendText = d3.select(this).select('text');
- var nodeTextLength;
- try {
- nodeTextLength = legendText.node().getComputedTextLength();
- // If the legendText is display:none'd (nodeTextLength == 0), simulate an error so we approximate, instead
- if(nodeTextLength <= 0) throw Error();
- }
- catch(e) {
- nodeTextLength = nv.utils.calcApproxTextWidth(legendText);
- }
-
- seriesWidths.push(nodeTextLength + padding);
- });
-
- var seriesPerRow = 0;
- var columnWidths = [];
- legendWidth = 0;
-
- while ( legendWidth < availableWidth && seriesPerRow < seriesWidths.length) {
- columnWidths[seriesPerRow] = seriesWidths[seriesPerRow];
- legendWidth += seriesWidths[seriesPerRow++];
- }
- if (seriesPerRow === 0) seriesPerRow = 1; //minimum of one series per row
-
- while ( legendWidth > availableWidth && seriesPerRow > 1 ) {
- columnWidths = [];
- seriesPerRow--;
-
- for (var k = 0; k < seriesWidths.length; k++) {
- if (seriesWidths[k] > (columnWidths[k % seriesPerRow] || 0) )
- columnWidths[k % seriesPerRow] = seriesWidths[k];
- }
-
- legendWidth = columnWidths.reduce(function(prev, cur, index, array) {
- return prev + cur;
- });
- }
-
- var xPositions = [];
- for (var i = 0, curX = 0; i < seriesPerRow; i++) {
- xPositions[i] = curX;
- curX += columnWidths[i];
- }
-
- series
- .attr('transform', function(d, i) {
- return 'translate(' + xPositions[i % seriesPerRow] + ',' + (5 + Math.floor(i / seriesPerRow) * versPadding) + ')';
- });
-
- //position legend as far right as possible within the total width
- if (rightAlign) {
- g.attr('transform', 'translate(' + (width - margin.right - legendWidth) + ',' + margin.top + ')');
- }
- else {
- g.attr('transform', 'translate(0' + ',' + margin.top + ')');
- }
-
- height = margin.top + margin.bottom + (Math.ceil(seriesWidths.length / seriesPerRow) * versPadding);
-
- } else {
-
- var ypos = 5,
- newxpos = 5,
- maxwidth = 0,
- xpos;
- series
- .attr('transform', function(d, i) {
- var length = d3.select(this).select('text').node().getComputedTextLength() + padding;
- xpos = newxpos;
-
- if (width < margin.left + margin.right + xpos + length) {
- newxpos = xpos = 5;
- ypos += versPadding;
- }
-
- newxpos += length;
- if (newxpos > maxwidth) maxwidth = newxpos;
-
- if(legendWidth < xpos + maxwidth) {
- legendWidth = xpos + maxwidth;
- }
- return 'translate(' + xpos + ',' + ypos + ')';
- });
-
- //position legend as far right as possible within the total width
- g.attr('transform', 'translate(' + (width - margin.right - maxwidth) + ',' + margin.top + ')');
-
- height = margin.top + margin.bottom + ypos + 15;
- }
-
- if(vers == 'furious') {
- // Size rectangles after text is placed
- seriesShape
- .attr('width', function(d,i) {
- return seriesText[0][i].getComputedTextLength() + 27;
- })
- .attr('height', 18)
- .attr('y', -9)
- .attr('x', -15);
-
- // The background for the expanded legend (UI)
- gEnter.insert('rect',':first-child')
- .attr('class', 'nv-legend-bg')
- .attr('fill', '#eee')
- // .attr('stroke', '#444')
- .attr('opacity',0);
-
- var seriesBG = g.select('.nv-legend-bg');
-
- seriesBG
- .transition().duration(300)
- .attr('x', -versPadding )
- .attr('width', legendWidth + versPadding - 12)
- .attr('height', height + 10)
- .attr('y', -margin.top - 10)
- .attr('opacity', expanded ? 1 : 0);
-
-
- }
-
- seriesShape
- .style('fill', setBGColor)
- .style('fill-opacity', setBGOpacity)
- .style('stroke', setBGColor);
- });
-
- function setTextColor(d,i) {
- if(vers != 'furious') return '#000';
- if(expanded) {
- return d.disengaged ? '#000' : '#fff';
- } else if (!expanded) {
- if(!d.color) d.color = color(d,i);
- return !!d.disabled ? d.color : '#fff';
- }
- }
-
- function setBGColor(d,i) {
- if(expanded && vers == 'furious') {
- return d.disengaged ? '#eee' : d.color || color(d,i);
- } else {
- return d.color || color(d,i);
- }
- }
-
-
- function setBGOpacity(d,i) {
- if(expanded && vers == 'furious') {
- return 1;
- } else {
- return !!d.disabled ? 0 : 1;
- }
- }
-
- return chart;
- }
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- key: {get: function(){return getKey;}, set: function(_){getKey=_;}},
- align: {get: function(){return align;}, set: function(_){align=_;}},
- rightAlign: {get: function(){return rightAlign;}, set: function(_){rightAlign=_;}},
- padding: {get: function(){return padding;}, set: function(_){padding=_;}},
- updateState: {get: function(){return updateState;}, set: function(_){updateState=_;}},
- radioButtonMode: {get: function(){return radioButtonMode;}, set: function(_){radioButtonMode=_;}},
- expanded: {get: function(){return expanded;}, set: function(_){expanded=_;}},
- vers: {get: function(){return vers;}, set: function(_){vers=_;}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- }}
- });
-
- nv.utils.initOptions(chart);
-
- return chart;
-};
-
-nv.models.line = function() {
- "use strict";
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var scatter = nv.models.scatter()
- ;
-
- var margin = {top: 0, right: 0, bottom: 0, left: 0}
- , width = 960
- , height = 500
- , container = null
- , strokeWidth = 1.5
- , color = nv.utils.defaultColor() // a function that returns a color
- , getX = function(d) { return d.x } // accessor to get the x value from a data point
- , getY = function(d) { return d.y } // accessor to get the y value from a data point
- , defined = function(d,i) { return !isNaN(getY(d,i)) && getY(d,i) !== null } // allows a line to be not continuous when it is not defined
- , isArea = function(d) { return d.area } // decides if a line is an area or just a line
- , clipEdge = false // if true, masks lines within x and y scale
- , x //can be accessed via chart.xScale()
- , y //can be accessed via chart.yScale()
- , interpolate = "linear" // controls the line interpolation
- , duration = 250
- , dispatch = d3.dispatch('elementClick', 'elementMouseover', 'elementMouseout', 'renderEnd')
- ;
-
- scatter
- .pointSize(16) // default size
- .pointDomain([16,256]) //set to speed up calculation, needs to be unset if there is a custom size accessor
- ;
-
- //============================================================
-
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var x0, y0 //used to store previous scales
- , renderWatch = nv.utils.renderWatch(dispatch, duration)
- ;
-
- //============================================================
-
-
- function chart(selection) {
- renderWatch.reset();
- renderWatch.models(scatter);
- selection.each(function(data) {
- container = d3.select(this);
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
- nv.utils.initSVG(container);
-
- // Setup Scales
- x = scatter.xScale();
- y = scatter.yScale();
-
- x0 = x0 || x;
- y0 = y0 || y;
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-line').data([data]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-line');
- var defsEnter = wrapEnter.append('defs');
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-groups');
- gEnter.append('g').attr('class', 'nv-scatterWrap');
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- scatter
- .width(availableWidth)
- .height(availableHeight);
-
- var scatterWrap = wrap.select('.nv-scatterWrap');
- scatterWrap.call(scatter);
-
- defsEnter.append('clipPath')
- .attr('id', 'nv-edge-clip-' + scatter.id())
- .append('rect');
-
- wrap.select('#nv-edge-clip-' + scatter.id() + ' rect')
- .attr('width', availableWidth)
- .attr('height', (availableHeight > 0) ? availableHeight : 0);
-
- g .attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + scatter.id() + ')' : '');
- scatterWrap
- .attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + scatter.id() + ')' : '');
-
- var groups = wrap.select('.nv-groups').selectAll('.nv-group')
- .data(function(d) { return d }, function(d) { return d.key });
- groups.enter().append('g')
- .style('stroke-opacity', 1e-6)
- .style('stroke-width', function(d) { return d.strokeWidth || strokeWidth })
- .style('fill-opacity', 1e-6);
-
- groups.exit().remove();
-
- groups
- .attr('class', function(d,i) {
- return (d.classed || '') + ' nv-group nv-series-' + i;
- })
- .classed('hover', function(d) { return d.hover })
- .style('fill', function(d,i){ return color(d, i) })
- .style('stroke', function(d,i){ return color(d, i)});
- groups.watchTransition(renderWatch, 'line: groups')
- .style('stroke-opacity', 1)
- .style('fill-opacity', function(d) { return d.fillOpacity || .5});
-
- var areaPaths = groups.selectAll('path.nv-area')
- .data(function(d) { return isArea(d) ? [d] : [] }); // this is done differently than lines because I need to check if series is an area
- areaPaths.enter().append('path')
- .attr('class', 'nv-area')
- .attr('d', function(d) {
- return d3.svg.area()
- .interpolate(interpolate)
- .defined(defined)
- .x(function(d,i) { return nv.utils.NaNtoZero(x0(getX(d,i))) })
- .y0(function(d,i) { return nv.utils.NaNtoZero(y0(getY(d,i))) })
- .y1(function(d,i) { return y0( y.domain()[0] <= 0 ? y.domain()[1] >= 0 ? 0 : y.domain()[1] : y.domain()[0] ) })
- //.y1(function(d,i) { return y0(0) }) //assuming 0 is within y domain.. may need to tweak this
- .apply(this, [d.values])
- });
- groups.exit().selectAll('path.nv-area')
- .remove();
-
- areaPaths.watchTransition(renderWatch, 'line: areaPaths')
- .attr('d', function(d) {
- return d3.svg.area()
- .interpolate(interpolate)
- .defined(defined)
- .x(function(d,i) { return nv.utils.NaNtoZero(x(getX(d,i))) })
- .y0(function(d,i) { return nv.utils.NaNtoZero(y(getY(d,i))) })
- .y1(function(d,i) { return y( y.domain()[0] <= 0 ? y.domain()[1] >= 0 ? 0 : y.domain()[1] : y.domain()[0] ) })
- //.y1(function(d,i) { return y0(0) }) //assuming 0 is within y domain.. may need to tweak this
- .apply(this, [d.values])
- });
-
- var linePaths = groups.selectAll('path.nv-line')
- .data(function(d) { return [d.values] });
-
- linePaths.enter().append('path')
- .attr('class', 'nv-line')
- .attr('d',
- d3.svg.line()
- .interpolate(interpolate)
- .defined(defined)
- .x(function(d,i) { return nv.utils.NaNtoZero(x0(getX(d,i))) })
- .y(function(d,i) { return nv.utils.NaNtoZero(y0(getY(d,i))) })
- );
-
- linePaths.watchTransition(renderWatch, 'line: linePaths')
- .attr('d',
- d3.svg.line()
- .interpolate(interpolate)
- .defined(defined)
- .x(function(d,i) { return nv.utils.NaNtoZero(x(getX(d,i))) })
- .y(function(d,i) { return nv.utils.NaNtoZero(y(getY(d,i))) })
- );
-
- //store old scales for use in transitions on update
- x0 = x.copy();
- y0 = y.copy();
- });
- renderWatch.renderEnd('line immediate');
- return chart;
- }
-
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.scatter = scatter;
- // Pass through events
- scatter.dispatch.on('elementClick', function(){ dispatch.elementClick.apply(this, arguments); });
- scatter.dispatch.on('elementMouseover', function(){ dispatch.elementMouseover.apply(this, arguments); });
- scatter.dispatch.on('elementMouseout', function(){ dispatch.elementMouseout.apply(this, arguments); });
-
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- defined: {get: function(){return defined;}, set: function(_){defined=_;}},
- interpolate: {get: function(){return interpolate;}, set: function(_){interpolate=_;}},
- clipEdge: {get: function(){return clipEdge;}, set: function(_){clipEdge=_;}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration = _;
- renderWatch.reset(duration);
- scatter.duration(duration);
- }},
- isArea: {get: function(){return isArea;}, set: function(_){
- isArea = d3.functor(_);
- }},
- x: {get: function(){return getX;}, set: function(_){
- getX = _;
- scatter.x(_);
- }},
- y: {get: function(){return getY;}, set: function(_){
- getY = _;
- scatter.y(_);
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- scatter.color(color);
- }}
- });
-
- nv.utils.inheritOptions(chart, scatter);
- nv.utils.initOptions(chart);
-
- return chart;
-};
-nv.models.lineChart = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var lines = nv.models.line()
- , xAxis = nv.models.axis()
- , yAxis = nv.models.axis()
- , legend = nv.models.legend()
- , interactiveLayer = nv.interactiveGuideline()
- , tooltip = nv.models.tooltip()
- ;
-
- var margin = {top: 30, right: 20, bottom: 50, left: 60}
- , color = nv.utils.defaultColor()
- , width = null
- , height = null
- , showLegend = true
- , showXAxis = true
- , showYAxis = true
- , rightAlignYAxis = false
- , useInteractiveGuideline = false
- , x
- , y
- , state = nv.utils.state()
- , defaultState = null
- , noData = null
- , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState', 'renderEnd')
- , duration = 250
- ;
-
- // set options on sub-objects for this chart
- xAxis.orient('bottom').tickPadding(7);
- yAxis.orient(rightAlignYAxis ? 'right' : 'left');
- tooltip.valueFormatter(function(d, i) {
- return yAxis.tickFormat()(d, i);
- }).headerFormatter(function(d, i) {
- return xAxis.tickFormat()(d, i);
- });
-
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var renderWatch = nv.utils.renderWatch(dispatch, duration);
-
- var stateGetter = function(data) {
- return function(){
- return {
- active: data.map(function(d) { return !d.disabled })
- };
- }
- };
-
- var stateSetter = function(data) {
- return function(state) {
- if (state.active !== undefined)
- data.forEach(function(series,i) {
- series.disabled = !state.active[i];
- });
- }
- };
-
- function chart(selection) {
- renderWatch.reset();
- renderWatch.models(lines);
- if (showXAxis) renderWatch.models(xAxis);
- if (showYAxis) renderWatch.models(yAxis);
-
- selection.each(function(data) {
- var container = d3.select(this),
- that = this;
- nv.utils.initSVG(container);
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- chart.update = function() {
- if (duration === 0)
- container.call(chart);
- else
- container.transition().duration(duration).call(chart)
- };
- chart.container = this;
-
- state
- .setter(stateSetter(data), chart.update)
- .getter(stateGetter(data))
- .update();
-
- // DEPRECATED set state.disableddisabled
- state.disabled = data.map(function(d) { return !!d.disabled });
-
- if (!defaultState) {
- var key;
- defaultState = {};
- for (key in state) {
- if (state[key] instanceof Array)
- defaultState[key] = state[key].slice(0);
- else
- defaultState[key] = state[key];
- }
- }
-
- // Display noData message if there's nothing to show.
- if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
- nv.utils.noData(chart, container)
- return chart;
- } else {
- container.selectAll('.nv-noData').remove();
- }
-
-
- // Setup Scales
- x = lines.xScale();
- y = lines.yScale();
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-lineChart').data([data]);
- var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-lineChart').append('g');
- var g = wrap.select('g');
-
- gEnter.append("rect").style("opacity",0);
- gEnter.append('g').attr('class', 'nv-x nv-axis');
- gEnter.append('g').attr('class', 'nv-y nv-axis');
- gEnter.append('g').attr('class', 'nv-linesWrap');
- gEnter.append('g').attr('class', 'nv-legendWrap');
- gEnter.append('g').attr('class', 'nv-interactive');
-
- g.select("rect")
- .attr("width",availableWidth)
- .attr("height",(availableHeight > 0) ? availableHeight : 0);
-
- // Legend
- if (showLegend) {
- legend.width(availableWidth);
-
- g.select('.nv-legendWrap')
- .datum(data)
- .call(legend);
-
- if ( margin.top != legend.height()) {
- margin.top = legend.height();
- availableHeight = nv.utils.availableHeight(height, container, margin);
- }
-
- wrap.select('.nv-legendWrap')
- .attr('transform', 'translate(0,' + (-margin.top) +')')
- }
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- if (rightAlignYAxis) {
- g.select(".nv-y.nv-axis")
- .attr("transform", "translate(" + availableWidth + ",0)");
- }
-
- //Set up interactive layer
- if (useInteractiveGuideline) {
- interactiveLayer
- .width(availableWidth)
- .height(availableHeight)
- .margin({left:margin.left, top:margin.top})
- .svgContainer(container)
- .xScale(x);
- wrap.select(".nv-interactive").call(interactiveLayer);
- }
-
- lines
- .width(availableWidth)
- .height(availableHeight)
- .color(data.map(function(d,i) {
- return d.color || color(d, i);
- }).filter(function(d,i) { return !data[i].disabled }));
-
-
- var linesWrap = g.select('.nv-linesWrap')
- .datum(data.filter(function(d) { return !d.disabled }));
-
- linesWrap.call(lines);
-
- // Setup Axes
- if (showXAxis) {
- xAxis
- .scale(x)
- ._ticks(nv.utils.calcTicksX(availableWidth/100, data) )
- .tickSize(-availableHeight, 0);
-
- g.select('.nv-x.nv-axis')
- .attr('transform', 'translate(0,' + y.range()[0] + ')');
- g.select('.nv-x.nv-axis')
- .call(xAxis);
- }
-
- if (showYAxis) {
- yAxis
- .scale(y)
- ._ticks(nv.utils.calcTicksY(availableHeight/36, data) )
- .tickSize( -availableWidth, 0);
-
- g.select('.nv-y.nv-axis')
- .call(yAxis);
- }
-
- //============================================================
- // Event Handling/Dispatching (in chart's scope)
- //------------------------------------------------------------
-
- legend.dispatch.on('stateChange', function(newState) {
- for (var key in newState)
- state[key] = newState[key];
- dispatch.stateChange(state);
- chart.update();
- });
-
- interactiveLayer.dispatch.on('elementMousemove', function(e) {
- lines.clearHighlights();
- var singlePoint, pointIndex, pointXLocation, allData = [];
- data
- .filter(function(series, i) {
- series.seriesIndex = i;
- return !series.disabled;
- })
- .forEach(function(series,i) {
- pointIndex = nv.interactiveBisect(series.values, e.pointXValue, chart.x());
- var point = series.values[pointIndex];
- var pointYValue = chart.y()(point, pointIndex);
- if (pointYValue != null) {
- lines.highlightPoint(i, pointIndex, true);
- }
- if (point === undefined) return;
- if (singlePoint === undefined) singlePoint = point;
- if (pointXLocation === undefined) pointXLocation = chart.xScale()(chart.x()(point,pointIndex));
- allData.push({
- key: series.key,
- value: pointYValue,
- color: color(series,series.seriesIndex)
- });
- });
- //Highlight the tooltip entry based on which point the mouse is closest to.
- if (allData.length > 2) {
- var yValue = chart.yScale().invert(e.mouseY);
- var domainExtent = Math.abs(chart.yScale().domain()[0] - chart.yScale().domain()[1]);
- var threshold = 0.03 * domainExtent;
- var indexToHighlight = nv.nearestValueIndex(allData.map(function(d){return d.value}),yValue,threshold);
- if (indexToHighlight !== null)
- allData[indexToHighlight].highlight = true;
- }
-
- var xValue = xAxis.tickFormat()(chart.x()(singlePoint,pointIndex));
- interactiveLayer.tooltip
- .position({left: e.mouseX + margin.left, top: e.mouseY + margin.top})
- .chartContainer(that.parentNode)
- .valueFormatter(function(d,i) {
- return d == null ? "N/A" : yAxis.tickFormat()(d);
- })
- .data({
- value: xValue,
- index: pointIndex,
- series: allData
- })();
-
- interactiveLayer.renderGuideLine(pointXLocation);
-
- });
-
- interactiveLayer.dispatch.on('elementClick', function(e) {
- var pointXLocation, allData = [];
-
- data.filter(function(series, i) {
- series.seriesIndex = i;
- return !series.disabled;
- }).forEach(function(series) {
- var pointIndex = nv.interactiveBisect(series.values, e.pointXValue, chart.x());
- var point = series.values[pointIndex];
- if (typeof point === 'undefined') return;
- if (typeof pointXLocation === 'undefined') pointXLocation = chart.xScale()(chart.x()(point,pointIndex));
- var yPos = chart.yScale()(chart.y()(point,pointIndex));
- allData.push({
- point: point,
- pointIndex: pointIndex,
- pos: [pointXLocation, yPos],
- seriesIndex: series.seriesIndex,
- series: series
- });
- });
-
- lines.dispatch.elementClick(allData);
- });
-
- interactiveLayer.dispatch.on("elementMouseout",function(e) {
- lines.clearHighlights();
- });
-
- dispatch.on('changeState', function(e) {
- if (typeof e.disabled !== 'undefined' && data.length === e.disabled.length) {
- data.forEach(function(series,i) {
- series.disabled = e.disabled[i];
- });
-
- state.disabled = e.disabled;
- }
-
- chart.update();
- });
-
- });
-
- renderWatch.renderEnd('lineChart immediate');
- return chart;
- }
-
- //============================================================
- // Event Handling/Dispatching (out of chart's scope)
- //------------------------------------------------------------
-
- lines.dispatch.on('elementMouseover.tooltip', function(evt) {
- tooltip.data(evt).position(evt.pos).hidden(false);
- });
-
- lines.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true)
- });
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- // expose chart's sub-components
- chart.dispatch = dispatch;
- chart.lines = lines;
- chart.legend = legend;
- chart.xAxis = xAxis;
- chart.yAxis = yAxis;
- chart.interactiveLayer = interactiveLayer;
- chart.tooltip = tooltip;
-
- chart.dispatch = dispatch;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- showLegend: {get: function(){return showLegend;}, set: function(_){showLegend=_;}},
- showXAxis: {get: function(){return showXAxis;}, set: function(_){showXAxis=_;}},
- showYAxis: {get: function(){return showYAxis;}, set: function(_){showYAxis=_;}},
- defaultState: {get: function(){return defaultState;}, set: function(_){defaultState=_;}},
- noData: {get: function(){return noData;}, set: function(_){noData=_;}},
-
- // deprecated options
- tooltips: {get: function(){return tooltip.enabled();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltips', 'use chart.tooltip.enabled() instead');
- tooltip.enabled(!!_);
- }},
- tooltipContent: {get: function(){return tooltip.contentGenerator();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltipContent', 'use chart.tooltip.contentGenerator() instead');
- tooltip.contentGenerator(_);
- }},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration = _;
- renderWatch.reset(duration);
- lines.duration(duration);
- xAxis.duration(duration);
- yAxis.duration(duration);
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- legend.color(color);
- lines.color(color);
- }},
- rightAlignYAxis: {get: function(){return rightAlignYAxis;}, set: function(_){
- rightAlignYAxis = _;
- yAxis.orient( rightAlignYAxis ? 'right' : 'left');
- }},
- useInteractiveGuideline: {get: function(){return useInteractiveGuideline;}, set: function(_){
- useInteractiveGuideline = _;
- if (useInteractiveGuideline) {
- lines.interactive(false);
- lines.useVoronoi(false);
- }
- }}
- });
-
- nv.utils.inheritOptions(chart, lines);
- nv.utils.initOptions(chart);
-
- return chart;
-};
-nv.models.linePlusBarChart = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var lines = nv.models.line()
- , lines2 = nv.models.line()
- , bars = nv.models.historicalBar()
- , bars2 = nv.models.historicalBar()
- , xAxis = nv.models.axis()
- , x2Axis = nv.models.axis()
- , y1Axis = nv.models.axis()
- , y2Axis = nv.models.axis()
- , y3Axis = nv.models.axis()
- , y4Axis = nv.models.axis()
- , legend = nv.models.legend()
- , brush = d3.svg.brush()
- , tooltip = nv.models.tooltip()
- ;
-
- var margin = {top: 30, right: 30, bottom: 30, left: 60}
- , margin2 = {top: 0, right: 30, bottom: 20, left: 60}
- , width = null
- , height = null
- , getX = function(d) { return d.x }
- , getY = function(d) { return d.y }
- , color = nv.utils.defaultColor()
- , showLegend = true
- , focusEnable = true
- , focusShowAxisY = false
- , focusShowAxisX = true
- , focusHeight = 50
- , extent
- , brushExtent = null
- , x
- , x2
- , y1
- , y2
- , y3
- , y4
- , noData = null
- , dispatch = d3.dispatch('brush', 'stateChange', 'changeState')
- , transitionDuration = 0
- , state = nv.utils.state()
- , defaultState = null
- , legendLeftAxisHint = ' (left axis)'
- , legendRightAxisHint = ' (right axis)'
- ;
-
- lines.clipEdge(true);
- lines2.interactive(false);
- xAxis.orient('bottom').tickPadding(5);
- y1Axis.orient('left');
- y2Axis.orient('right');
- x2Axis.orient('bottom').tickPadding(5);
- y3Axis.orient('left');
- y4Axis.orient('right');
-
- tooltip.headerEnabled(true).headerFormatter(function(d, i) {
- return xAxis.tickFormat()(d, i);
- });
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var stateGetter = function(data) {
- return function(){
- return {
- active: data.map(function(d) { return !d.disabled })
- };
- }
- };
-
- var stateSetter = function(data) {
- return function(state) {
- if (state.active !== undefined)
- data.forEach(function(series,i) {
- series.disabled = !state.active[i];
- });
- }
- };
-
- function chart(selection) {
- selection.each(function(data) {
- var container = d3.select(this),
- that = this;
- nv.utils.initSVG(container);
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight1 = nv.utils.availableHeight(height, container, margin)
- - (focusEnable ? focusHeight : 0),
- availableHeight2 = focusHeight - margin2.top - margin2.bottom;
-
- chart.update = function() { container.transition().duration(transitionDuration).call(chart); };
- chart.container = this;
-
- state
- .setter(stateSetter(data), chart.update)
- .getter(stateGetter(data))
- .update();
-
- // DEPRECATED set state.disableddisabled
- state.disabled = data.map(function(d) { return !!d.disabled });
-
- if (!defaultState) {
- var key;
- defaultState = {};
- for (key in state) {
- if (state[key] instanceof Array)
- defaultState[key] = state[key].slice(0);
- else
- defaultState[key] = state[key];
- }
- }
-
- // Display No Data message if there's nothing to show.
- if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
- nv.utils.noData(chart, container)
- return chart;
- } else {
- container.selectAll('.nv-noData').remove();
- }
-
- // Setup Scales
- var dataBars = data.filter(function(d) { return !d.disabled && d.bar });
- var dataLines = data.filter(function(d) { return !d.bar }); // removed the !d.disabled clause here to fix Issue #240
-
- x = bars.xScale();
- x2 = x2Axis.scale();
- y1 = bars.yScale();
- y2 = lines.yScale();
- y3 = bars2.yScale();
- y4 = lines2.yScale();
-
- var series1 = data
- .filter(function(d) { return !d.disabled && d.bar })
- .map(function(d) {
- return d.values.map(function(d,i) {
- return { x: getX(d,i), y: getY(d,i) }
- })
- });
-
- var series2 = data
- .filter(function(d) { return !d.disabled && !d.bar })
- .map(function(d) {
- return d.values.map(function(d,i) {
- return { x: getX(d,i), y: getY(d,i) }
- })
- });
-
- x.range([0, availableWidth]);
-
- x2 .domain(d3.extent(d3.merge(series1.concat(series2)), function(d) { return d.x } ))
- .range([0, availableWidth]);
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-linePlusBar').data([data]);
- var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-linePlusBar').append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-legendWrap');
-
- // this is the main chart
- var focusEnter = gEnter.append('g').attr('class', 'nv-focus');
- focusEnter.append('g').attr('class', 'nv-x nv-axis');
- focusEnter.append('g').attr('class', 'nv-y1 nv-axis');
- focusEnter.append('g').attr('class', 'nv-y2 nv-axis');
- focusEnter.append('g').attr('class', 'nv-barsWrap');
- focusEnter.append('g').attr('class', 'nv-linesWrap');
-
- // context chart is where you can focus in
- var contextEnter = gEnter.append('g').attr('class', 'nv-context');
- contextEnter.append('g').attr('class', 'nv-x nv-axis');
- contextEnter.append('g').attr('class', 'nv-y1 nv-axis');
- contextEnter.append('g').attr('class', 'nv-y2 nv-axis');
- contextEnter.append('g').attr('class', 'nv-barsWrap');
- contextEnter.append('g').attr('class', 'nv-linesWrap');
- contextEnter.append('g').attr('class', 'nv-brushBackground');
- contextEnter.append('g').attr('class', 'nv-x nv-brush');
-
- //============================================================
- // Legend
- //------------------------------------------------------------
-
- if (showLegend) {
- var legendWidth = legend.align() ? availableWidth / 2 : availableWidth;
- var legendXPosition = legend.align() ? legendWidth : 0;
-
- legend.width(legendWidth);
-
- g.select('.nv-legendWrap')
- .datum(data.map(function(series) {
- series.originalKey = series.originalKey === undefined ? series.key : series.originalKey;
- series.key = series.originalKey + (series.bar ? legendLeftAxisHint : legendRightAxisHint);
- return series;
- }))
- .call(legend);
-
- if ( margin.top != legend.height()) {
- margin.top = legend.height();
- // FIXME: shouldn't this be "- (focusEnabled ? focusHeight : 0)"?
- availableHeight1 = nv.utils.availableHeight(height, container, margin) - focusHeight;
- }
-
- g.select('.nv-legendWrap')
- .attr('transform', 'translate(' + legendXPosition + ',' + (-margin.top) +')');
- }
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- //============================================================
- // Context chart (focus chart) components
- //------------------------------------------------------------
-
- // hide or show the focus context chart
- g.select('.nv-context').style('display', focusEnable ? 'initial' : 'none');
-
- bars2
- .width(availableWidth)
- .height(availableHeight2)
- .color(data.map(function (d, i) {
- return d.color || color(d, i);
- }).filter(function (d, i) {
- return !data[i].disabled && data[i].bar
- }));
- lines2
- .width(availableWidth)
- .height(availableHeight2)
- .color(data.map(function (d, i) {
- return d.color || color(d, i);
- }).filter(function (d, i) {
- return !data[i].disabled && !data[i].bar
- }));
-
- var bars2Wrap = g.select('.nv-context .nv-barsWrap')
- .datum(dataBars.length ? dataBars : [
- {values: []}
- ]);
- var lines2Wrap = g.select('.nv-context .nv-linesWrap')
- .datum(!dataLines[0].disabled ? dataLines : [
- {values: []}
- ]);
-
- g.select('.nv-context')
- .attr('transform', 'translate(0,' + ( availableHeight1 + margin.bottom + margin2.top) + ')');
-
- bars2Wrap.transition().call(bars2);
- lines2Wrap.transition().call(lines2);
-
- // context (focus chart) axis controls
- if (focusShowAxisX) {
- x2Axis
- ._ticks( nv.utils.calcTicksX(availableWidth / 100, data))
- .tickSize(-availableHeight2, 0);
- g.select('.nv-context .nv-x.nv-axis')
- .attr('transform', 'translate(0,' + y3.range()[0] + ')');
- g.select('.nv-context .nv-x.nv-axis').transition()
- .call(x2Axis);
- }
-
- if (focusShowAxisY) {
- y3Axis
- .scale(y3)
- ._ticks( availableHeight2 / 36 )
- .tickSize( -availableWidth, 0);
- y4Axis
- .scale(y4)
- ._ticks( availableHeight2 / 36 )
- .tickSize(dataBars.length ? 0 : -availableWidth, 0); // Show the y2 rules only if y1 has none
-
- g.select('.nv-context .nv-y3.nv-axis')
- .style('opacity', dataBars.length ? 1 : 0)
- .attr('transform', 'translate(0,' + x2.range()[0] + ')');
- g.select('.nv-context .nv-y2.nv-axis')
- .style('opacity', dataLines.length ? 1 : 0)
- .attr('transform', 'translate(' + x2.range()[1] + ',0)');
-
- g.select('.nv-context .nv-y1.nv-axis').transition()
- .call(y3Axis);
- g.select('.nv-context .nv-y2.nv-axis').transition()
- .call(y4Axis);
- }
-
- // Setup Brush
- brush.x(x2).on('brush', onBrush);
-
- if (brushExtent) brush.extent(brushExtent);
-
- var brushBG = g.select('.nv-brushBackground').selectAll('g')
- .data([brushExtent || brush.extent()]);
-
- var brushBGenter = brushBG.enter()
- .append('g');
-
- brushBGenter.append('rect')
- .attr('class', 'left')
- .attr('x', 0)
- .attr('y', 0)
- .attr('height', availableHeight2);
-
- brushBGenter.append('rect')
- .attr('class', 'right')
- .attr('x', 0)
- .attr('y', 0)
- .attr('height', availableHeight2);
-
- var gBrush = g.select('.nv-x.nv-brush')
- .call(brush);
- gBrush.selectAll('rect')
- //.attr('y', -5)
- .attr('height', availableHeight2);
- gBrush.selectAll('.resize').append('path').attr('d', resizePath);
-
- //============================================================
- // Event Handling/Dispatching (in chart's scope)
- //------------------------------------------------------------
-
- legend.dispatch.on('stateChange', function(newState) {
- for (var key in newState)
- state[key] = newState[key];
- dispatch.stateChange(state);
- chart.update();
- });
-
- // Update chart from a state object passed to event handler
- dispatch.on('changeState', function(e) {
- if (typeof e.disabled !== 'undefined') {
- data.forEach(function(series,i) {
- series.disabled = e.disabled[i];
- });
- state.disabled = e.disabled;
- }
- chart.update();
- });
-
- //============================================================
- // Functions
- //------------------------------------------------------------
-
- // Taken from crossfilter (http://square.github.com/crossfilter/)
- function resizePath(d) {
- var e = +(d == 'e'),
- x = e ? 1 : -1,
- y = availableHeight2 / 3;
- return 'M' + (.5 * x) + ',' + y
- + 'A6,6 0 0 ' + e + ' ' + (6.5 * x) + ',' + (y + 6)
- + 'V' + (2 * y - 6)
- + 'A6,6 0 0 ' + e + ' ' + (.5 * x) + ',' + (2 * y)
- + 'Z'
- + 'M' + (2.5 * x) + ',' + (y + 8)
- + 'V' + (2 * y - 8)
- + 'M' + (4.5 * x) + ',' + (y + 8)
- + 'V' + (2 * y - 8);
- }
-
-
- function updateBrushBG() {
- if (!brush.empty()) brush.extent(brushExtent);
- brushBG
- .data([brush.empty() ? x2.domain() : brushExtent])
- .each(function(d,i) {
- var leftWidth = x2(d[0]) - x2.range()[0],
- rightWidth = x2.range()[1] - x2(d[1]);
- d3.select(this).select('.left')
- .attr('width', leftWidth < 0 ? 0 : leftWidth);
-
- d3.select(this).select('.right')
- .attr('x', x2(d[1]))
- .attr('width', rightWidth < 0 ? 0 : rightWidth);
- });
- }
-
- function onBrush() {
- brushExtent = brush.empty() ? null : brush.extent();
- extent = brush.empty() ? x2.domain() : brush.extent();
- dispatch.brush({extent: extent, brush: brush});
- updateBrushBG();
-
- // Prepare Main (Focus) Bars and Lines
- bars
- .width(availableWidth)
- .height(availableHeight1)
- .color(data.map(function(d,i) {
- return d.color || color(d, i);
- }).filter(function(d,i) { return !data[i].disabled && data[i].bar }));
-
- lines
- .width(availableWidth)
- .height(availableHeight1)
- .color(data.map(function(d,i) {
- return d.color || color(d, i);
- }).filter(function(d,i) { return !data[i].disabled && !data[i].bar }));
-
- var focusBarsWrap = g.select('.nv-focus .nv-barsWrap')
- .datum(!dataBars.length ? [{values:[]}] :
- dataBars
- .map(function(d,i) {
- return {
- key: d.key,
- values: d.values.filter(function(d,i) {
- return bars.x()(d,i) >= extent[0] && bars.x()(d,i) <= extent[1];
- })
- }
- })
- );
-
- var focusLinesWrap = g.select('.nv-focus .nv-linesWrap')
- .datum(dataLines[0].disabled ? [{values:[]}] :
- dataLines
- .map(function(d,i) {
- return {
- area: d.area,
- fillOpacity: d.fillOpacity,
- key: d.key,
- values: d.values.filter(function(d,i) {
- return lines.x()(d,i) >= extent[0] && lines.x()(d,i) <= extent[1];
- })
- }
- })
- );
-
- // Update Main (Focus) X Axis
- if (dataBars.length) {
- x = bars.xScale();
- } else {
- x = lines.xScale();
- }
-
- xAxis
- .scale(x)
- ._ticks( nv.utils.calcTicksX(availableWidth/100, data) )
- .tickSize(-availableHeight1, 0);
-
- xAxis.domain([Math.ceil(extent[0]), Math.floor(extent[1])]);
-
- g.select('.nv-x.nv-axis').transition().duration(transitionDuration)
- .call(xAxis);
-
- // Update Main (Focus) Bars and Lines
- focusBarsWrap.transition().duration(transitionDuration).call(bars);
- focusLinesWrap.transition().duration(transitionDuration).call(lines);
-
- // Setup and Update Main (Focus) Y Axes
- g.select('.nv-focus .nv-x.nv-axis')
- .attr('transform', 'translate(0,' + y1.range()[0] + ')');
-
- y1Axis
- .scale(y1)
- ._ticks( nv.utils.calcTicksY(availableHeight1/36, data) )
- .tickSize(-availableWidth, 0);
- y2Axis
- .scale(y2)
- ._ticks( nv.utils.calcTicksY(availableHeight1/36, data) )
- .tickSize(dataBars.length ? 0 : -availableWidth, 0); // Show the y2 rules only if y1 has none
-
- g.select('.nv-focus .nv-y1.nv-axis')
- .style('opacity', dataBars.length ? 1 : 0);
- g.select('.nv-focus .nv-y2.nv-axis')
- .style('opacity', dataLines.length && !dataLines[0].disabled ? 1 : 0)
- .attr('transform', 'translate(' + x.range()[1] + ',0)');
-
- g.select('.nv-focus .nv-y1.nv-axis').transition().duration(transitionDuration)
- .call(y1Axis);
- g.select('.nv-focus .nv-y2.nv-axis').transition().duration(transitionDuration)
- .call(y2Axis);
- }
-
- onBrush();
-
- });
-
- return chart;
- }
-
- //============================================================
- // Event Handling/Dispatching (out of chart's scope)
- //------------------------------------------------------------
-
- lines.dispatch.on('elementMouseover.tooltip', function(evt) {
- tooltip
- .duration(100)
- .valueFormatter(function(d, i) {
- return y2Axis.tickFormat()(d, i);
- })
- .data(evt)
- .position(evt.pos)
- .hidden(false);
- });
-
- lines.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true)
- });
-
- bars.dispatch.on('elementMouseover.tooltip', function(evt) {
- evt.value = chart.x()(evt.data);
- evt['series'] = {
- value: chart.y()(evt.data),
- color: evt.color
- };
- tooltip
- .duration(0)
- .valueFormatter(function(d, i) {
- return y1Axis.tickFormat()(d, i);
- })
- .data(evt)
- .hidden(false);
- });
-
- bars.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true);
- });
-
- bars.dispatch.on('elementMousemove.tooltip', function(evt) {
- tooltip.position({top: d3.event.pageY, left: d3.event.pageX})();
- });
-
- //============================================================
-
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- // expose chart's sub-components
- chart.dispatch = dispatch;
- chart.legend = legend;
- chart.lines = lines;
- chart.lines2 = lines2;
- chart.bars = bars;
- chart.bars2 = bars2;
- chart.xAxis = xAxis;
- chart.x2Axis = x2Axis;
- chart.y1Axis = y1Axis;
- chart.y2Axis = y2Axis;
- chart.y3Axis = y3Axis;
- chart.y4Axis = y4Axis;
- chart.tooltip = tooltip;
-
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- showLegend: {get: function(){return showLegend;}, set: function(_){showLegend=_;}},
- brushExtent: {get: function(){return brushExtent;}, set: function(_){brushExtent=_;}},
- noData: {get: function(){return noData;}, set: function(_){noData=_;}},
- focusEnable: {get: function(){return focusEnable;}, set: function(_){focusEnable=_;}},
- focusHeight: {get: function(){return focusHeight;}, set: function(_){focusHeight=_;}},
- focusShowAxisX: {get: function(){return focusShowAxisX;}, set: function(_){focusShowAxisX=_;}},
- focusShowAxisY: {get: function(){return focusShowAxisY;}, set: function(_){focusShowAxisY=_;}},
- legendLeftAxisHint: {get: function(){return legendLeftAxisHint;}, set: function(_){legendLeftAxisHint=_;}},
- legendRightAxisHint: {get: function(){return legendRightAxisHint;}, set: function(_){legendRightAxisHint=_;}},
-
- // deprecated options
- tooltips: {get: function(){return tooltip.enabled();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltips', 'use chart.tooltip.enabled() instead');
- tooltip.enabled(!!_);
- }},
- tooltipContent: {get: function(){return tooltip.contentGenerator();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltipContent', 'use chart.tooltip.contentGenerator() instead');
- tooltip.contentGenerator(_);
- }},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- duration: {get: function(){return transitionDuration;}, set: function(_){
- transitionDuration = _;
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- legend.color(color);
- }},
- x: {get: function(){return getX;}, set: function(_){
- getX = _;
- lines.x(_);
- lines2.x(_);
- bars.x(_);
- bars2.x(_);
- }},
- y: {get: function(){return getY;}, set: function(_){
- getY = _;
- lines.y(_);
- lines2.y(_);
- bars.y(_);
- bars2.y(_);
- }}
- });
-
- nv.utils.inheritOptions(chart, lines);
- nv.utils.initOptions(chart);
-
- return chart;
-};
-nv.models.lineWithFocusChart = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var lines = nv.models.line()
- , lines2 = nv.models.line()
- , xAxis = nv.models.axis()
- , yAxis = nv.models.axis()
- , x2Axis = nv.models.axis()
- , y2Axis = nv.models.axis()
- , legend = nv.models.legend()
- , brush = d3.svg.brush()
- , tooltip = nv.models.tooltip()
- , interactiveLayer = nv.interactiveGuideline()
- ;
-
- var margin = {top: 30, right: 30, bottom: 30, left: 60}
- , margin2 = {top: 0, right: 30, bottom: 20, left: 60}
- , color = nv.utils.defaultColor()
- , width = null
- , height = null
- , height2 = 50
- , useInteractiveGuideline = false
- , x
- , y
- , x2
- , y2
- , showLegend = true
- , brushExtent = null
- , noData = null
- , dispatch = d3.dispatch('brush', 'stateChange', 'changeState')
- , transitionDuration = 250
- , state = nv.utils.state()
- , defaultState = null
- ;
-
- lines.clipEdge(true).duration(0);
- lines2.interactive(false);
- xAxis.orient('bottom').tickPadding(5);
- yAxis.orient('left');
- x2Axis.orient('bottom').tickPadding(5);
- y2Axis.orient('left');
-
- tooltip.valueFormatter(function(d, i) {
- return yAxis.tickFormat()(d, i);
- }).headerFormatter(function(d, i) {
- return xAxis.tickFormat()(d, i);
- });
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var stateGetter = function(data) {
- return function(){
- return {
- active: data.map(function(d) { return !d.disabled })
- };
- }
- };
-
- var stateSetter = function(data) {
- return function(state) {
- if (state.active !== undefined)
- data.forEach(function(series,i) {
- series.disabled = !state.active[i];
- });
- }
- };
-
- function chart(selection) {
- selection.each(function(data) {
- var container = d3.select(this),
- that = this;
- nv.utils.initSVG(container);
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight1 = nv.utils.availableHeight(height, container, margin) - height2,
- availableHeight2 = height2 - margin2.top - margin2.bottom;
-
- chart.update = function() { container.transition().duration(transitionDuration).call(chart) };
- chart.container = this;
-
- state
- .setter(stateSetter(data), chart.update)
- .getter(stateGetter(data))
- .update();
-
- // DEPRECATED set state.disableddisabled
- state.disabled = data.map(function(d) { return !!d.disabled });
-
- if (!defaultState) {
- var key;
- defaultState = {};
- for (key in state) {
- if (state[key] instanceof Array)
- defaultState[key] = state[key].slice(0);
- else
- defaultState[key] = state[key];
- }
- }
-
- // Display No Data message if there's nothing to show.
- if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
- nv.utils.noData(chart, container)
- return chart;
- } else {
- container.selectAll('.nv-noData').remove();
- }
-
- // Setup Scales
- x = lines.xScale();
- y = lines.yScale();
- x2 = lines2.xScale();
- y2 = lines2.yScale();
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-lineWithFocusChart').data([data]);
- var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-lineWithFocusChart').append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-legendWrap');
-
- var focusEnter = gEnter.append('g').attr('class', 'nv-focus');
- focusEnter.append('g').attr('class', 'nv-x nv-axis');
- focusEnter.append('g').attr('class', 'nv-y nv-axis');
- focusEnter.append('g').attr('class', 'nv-linesWrap');
- focusEnter.append('g').attr('class', 'nv-interactive');
-
- var contextEnter = gEnter.append('g').attr('class', 'nv-context');
- contextEnter.append('g').attr('class', 'nv-x nv-axis');
- contextEnter.append('g').attr('class', 'nv-y nv-axis');
- contextEnter.append('g').attr('class', 'nv-linesWrap');
- contextEnter.append('g').attr('class', 'nv-brushBackground');
- contextEnter.append('g').attr('class', 'nv-x nv-brush');
-
- // Legend
- if (showLegend) {
- legend.width(availableWidth);
-
- g.select('.nv-legendWrap')
- .datum(data)
- .call(legend);
-
- if ( margin.top != legend.height()) {
- margin.top = legend.height();
- availableHeight1 = nv.utils.availableHeight(height, container, margin) - height2;
- }
-
- g.select('.nv-legendWrap')
- .attr('transform', 'translate(0,' + (-margin.top) +')')
- }
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
-
- //Set up interactive layer
- if (useInteractiveGuideline) {
- interactiveLayer
- .width(availableWidth)
- .height(availableHeight1)
- .margin({left:margin.left, top:margin.top})
- .svgContainer(container)
- .xScale(x);
- wrap.select(".nv-interactive").call(interactiveLayer);
- }
-
- // Main Chart Component(s)
- lines
- .width(availableWidth)
- .height(availableHeight1)
- .color(
- data
- .map(function(d,i) {
- return d.color || color(d, i);
- })
- .filter(function(d,i) {
- return !data[i].disabled;
- })
- );
-
- lines2
- .defined(lines.defined())
- .width(availableWidth)
- .height(availableHeight2)
- .color(
- data
- .map(function(d,i) {
- return d.color || color(d, i);
- })
- .filter(function(d,i) {
- return !data[i].disabled;
- })
- );
-
- g.select('.nv-context')
- .attr('transform', 'translate(0,' + ( availableHeight1 + margin.bottom + margin2.top) + ')')
-
- var contextLinesWrap = g.select('.nv-context .nv-linesWrap')
- .datum(data.filter(function(d) { return !d.disabled }))
-
- d3.transition(contextLinesWrap).call(lines2);
-
- // Setup Main (Focus) Axes
- xAxis
- .scale(x)
- ._ticks( nv.utils.calcTicksX(availableWidth/100, data) )
- .tickSize(-availableHeight1, 0);
-
- yAxis
- .scale(y)
- ._ticks( nv.utils.calcTicksY(availableHeight1/36, data) )
- .tickSize( -availableWidth, 0);
-
- g.select('.nv-focus .nv-x.nv-axis')
- .attr('transform', 'translate(0,' + availableHeight1 + ')');
-
- // Setup Brush
- brush
- .x(x2)
- .on('brush', function() {
- onBrush();
- });
-
- if (brushExtent) brush.extent(brushExtent);
-
- var brushBG = g.select('.nv-brushBackground').selectAll('g')
- .data([brushExtent || brush.extent()])
-
- var brushBGenter = brushBG.enter()
- .append('g');
-
- brushBGenter.append('rect')
- .attr('class', 'left')
- .attr('x', 0)
- .attr('y', 0)
- .attr('height', availableHeight2);
-
- brushBGenter.append('rect')
- .attr('class', 'right')
- .attr('x', 0)
- .attr('y', 0)
- .attr('height', availableHeight2);
-
- var gBrush = g.select('.nv-x.nv-brush')
- .call(brush);
- gBrush.selectAll('rect')
- .attr('height', availableHeight2);
- gBrush.selectAll('.resize').append('path').attr('d', resizePath);
-
- onBrush();
-
- // Setup Secondary (Context) Axes
- x2Axis
- .scale(x2)
- ._ticks( nv.utils.calcTicksX(availableWidth/100, data) )
- .tickSize(-availableHeight2, 0);
-
- g.select('.nv-context .nv-x.nv-axis')
- .attr('transform', 'translate(0,' + y2.range()[0] + ')');
- d3.transition(g.select('.nv-context .nv-x.nv-axis'))
- .call(x2Axis);
-
- y2Axis
- .scale(y2)
- ._ticks( nv.utils.calcTicksY(availableHeight2/36, data) )
- .tickSize( -availableWidth, 0);
-
- d3.transition(g.select('.nv-context .nv-y.nv-axis'))
- .call(y2Axis);
-
- g.select('.nv-context .nv-x.nv-axis')
- .attr('transform', 'translate(0,' + y2.range()[0] + ')');
-
- //============================================================
- // Event Handling/Dispatching (in chart's scope)
- //------------------------------------------------------------
-
- legend.dispatch.on('stateChange', function(newState) {
- for (var key in newState)
- state[key] = newState[key];
- dispatch.stateChange(state);
- chart.update();
- });
-
- interactiveLayer.dispatch.on('elementMousemove', function(e) {
- lines.clearHighlights();
- var singlePoint, pointIndex, pointXLocation, allData = [];
- data
- .filter(function(series, i) {
- series.seriesIndex = i;
- return !series.disabled;
- })
- .forEach(function(series,i) {
- var extent = brush.empty() ? x2.domain() : brush.extent();
- var currentValues = series.values.filter(function(d,i) {
- return lines.x()(d,i) >= extent[0] && lines.x()(d,i) <= extent[1];
- });
-
- pointIndex = nv.interactiveBisect(currentValues, e.pointXValue, lines.x());
- var point = currentValues[pointIndex];
- var pointYValue = chart.y()(point, pointIndex);
- if (pointYValue != null) {
- lines.highlightPoint(i, pointIndex, true);
- }
- if (point === undefined) return;
- if (singlePoint === undefined) singlePoint = point;
- if (pointXLocation === undefined) pointXLocation = chart.xScale()(chart.x()(point,pointIndex));
- allData.push({
- key: series.key,
- value: chart.y()(point, pointIndex),
- color: color(series,series.seriesIndex)
- });
- });
- //Highlight the tooltip entry based on which point the mouse is closest to.
- if (allData.length > 2) {
- var yValue = chart.yScale().invert(e.mouseY);
- var domainExtent = Math.abs(chart.yScale().domain()[0] - chart.yScale().domain()[1]);
- var threshold = 0.03 * domainExtent;
- var indexToHighlight = nv.nearestValueIndex(allData.map(function(d){return d.value}),yValue,threshold);
- if (indexToHighlight !== null)
- allData[indexToHighlight].highlight = true;
- }
-
- var xValue = xAxis.tickFormat()(chart.x()(singlePoint,pointIndex));
- interactiveLayer.tooltip
- .position({left: e.mouseX + margin.left, top: e.mouseY + margin.top})
- .chartContainer(that.parentNode)
- .valueFormatter(function(d,i) {
- return d == null ? "N/A" : yAxis.tickFormat()(d);
- })
- .data({
- value: xValue,
- index: pointIndex,
- series: allData
- })();
-
- interactiveLayer.renderGuideLine(pointXLocation);
-
- });
-
- interactiveLayer.dispatch.on("elementMouseout",function(e) {
- lines.clearHighlights();
- });
-
- dispatch.on('changeState', function(e) {
- if (typeof e.disabled !== 'undefined') {
- data.forEach(function(series,i) {
- series.disabled = e.disabled[i];
- });
- }
- chart.update();
- });
-
- //============================================================
- // Functions
- //------------------------------------------------------------
-
- // Taken from crossfilter (http://square.github.com/crossfilter/)
- function resizePath(d) {
- var e = +(d == 'e'),
- x = e ? 1 : -1,
- y = availableHeight2 / 3;
- return 'M' + (.5 * x) + ',' + y
- + 'A6,6 0 0 ' + e + ' ' + (6.5 * x) + ',' + (y + 6)
- + 'V' + (2 * y - 6)
- + 'A6,6 0 0 ' + e + ' ' + (.5 * x) + ',' + (2 * y)
- + 'Z'
- + 'M' + (2.5 * x) + ',' + (y + 8)
- + 'V' + (2 * y - 8)
- + 'M' + (4.5 * x) + ',' + (y + 8)
- + 'V' + (2 * y - 8);
- }
-
-
- function updateBrushBG() {
- if (!brush.empty()) brush.extent(brushExtent);
- brushBG
- .data([brush.empty() ? x2.domain() : brushExtent])
- .each(function(d,i) {
- var leftWidth = x2(d[0]) - x.range()[0],
- rightWidth = availableWidth - x2(d[1]);
- d3.select(this).select('.left')
- .attr('width', leftWidth < 0 ? 0 : leftWidth);
-
- d3.select(this).select('.right')
- .attr('x', x2(d[1]))
- .attr('width', rightWidth < 0 ? 0 : rightWidth);
- });
- }
-
-
- function onBrush() {
- brushExtent = brush.empty() ? null : brush.extent();
- var extent = brush.empty() ? x2.domain() : brush.extent();
-
- //The brush extent cannot be less than one. If it is, don't update the line chart.
- if (Math.abs(extent[0] - extent[1]) <= 1) {
- return;
- }
-
- dispatch.brush({extent: extent, brush: brush});
-
-
- updateBrushBG();
-
- // Update Main (Focus)
- var focusLinesWrap = g.select('.nv-focus .nv-linesWrap')
- .datum(
- data
- .filter(function(d) { return !d.disabled })
- .map(function(d,i) {
- return {
- key: d.key,
- area: d.area,
- values: d.values.filter(function(d,i) {
- return lines.x()(d,i) >= extent[0] && lines.x()(d,i) <= extent[1];
- })
- }
- })
- );
- focusLinesWrap.transition().duration(transitionDuration).call(lines);
-
-
- // Update Main (Focus) Axes
- g.select('.nv-focus .nv-x.nv-axis').transition().duration(transitionDuration)
- .call(xAxis);
- g.select('.nv-focus .nv-y.nv-axis').transition().duration(transitionDuration)
- .call(yAxis);
- }
- });
-
- return chart;
- }
-
- //============================================================
- // Event Handling/Dispatching (out of chart's scope)
- //------------------------------------------------------------
-
- lines.dispatch.on('elementMouseover.tooltip', function(evt) {
- tooltip.data(evt).position(evt.pos).hidden(false);
- });
-
- lines.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true)
- });
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- // expose chart's sub-components
- chart.dispatch = dispatch;
- chart.legend = legend;
- chart.lines = lines;
- chart.lines2 = lines2;
- chart.xAxis = xAxis;
- chart.yAxis = yAxis;
- chart.x2Axis = x2Axis;
- chart.y2Axis = y2Axis;
- chart.interactiveLayer = interactiveLayer;
- chart.tooltip = tooltip;
-
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- focusHeight: {get: function(){return height2;}, set: function(_){height2=_;}},
- showLegend: {get: function(){return showLegend;}, set: function(_){showLegend=_;}},
- brushExtent: {get: function(){return brushExtent;}, set: function(_){brushExtent=_;}},
- defaultState: {get: function(){return defaultState;}, set: function(_){defaultState=_;}},
- noData: {get: function(){return noData;}, set: function(_){noData=_;}},
-
- // deprecated options
- tooltips: {get: function(){return tooltip.enabled();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltips', 'use chart.tooltip.enabled() instead');
- tooltip.enabled(!!_);
- }},
- tooltipContent: {get: function(){return tooltip.contentGenerator();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltipContent', 'use chart.tooltip.contentGenerator() instead');
- tooltip.contentGenerator(_);
- }},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- legend.color(color);
- // line color is handled above?
- }},
- interpolate: {get: function(){return lines.interpolate();}, set: function(_){
- lines.interpolate(_);
- lines2.interpolate(_);
- }},
- xTickFormat: {get: function(){return xAxis.tickFormat();}, set: function(_){
- xAxis.tickFormat(_);
- x2Axis.tickFormat(_);
- }},
- yTickFormat: {get: function(){return yAxis.tickFormat();}, set: function(_){
- yAxis.tickFormat(_);
- y2Axis.tickFormat(_);
- }},
- duration: {get: function(){return transitionDuration;}, set: function(_){
- transitionDuration=_;
- yAxis.duration(transitionDuration);
- y2Axis.duration(transitionDuration);
- xAxis.duration(transitionDuration);
- x2Axis.duration(transitionDuration);
- }},
- x: {get: function(){return lines.x();}, set: function(_){
- lines.x(_);
- lines2.x(_);
- }},
- y: {get: function(){return lines.y();}, set: function(_){
- lines.y(_);
- lines2.y(_);
- }},
- useInteractiveGuideline: {get: function(){return useInteractiveGuideline;}, set: function(_){
- useInteractiveGuideline = _;
- if (useInteractiveGuideline) {
- lines.interactive(false);
- lines.useVoronoi(false);
- }
- }}
- });
-
- nv.utils.inheritOptions(chart, lines);
- nv.utils.initOptions(chart);
-
- return chart;
-};
-nv.models.multiBar = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 0, right: 0, bottom: 0, left: 0}
- , width = 960
- , height = 500
- , x = d3.scale.ordinal()
- , y = d3.scale.linear()
- , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one
- , container = null
- , getX = function(d) { return d.x }
- , getY = function(d) { return d.y }
- , getYerr = function(d) { return d.yErr }
- , forceY = [0] // 0 is forced by default.. this makes sense for the majority of bar graphs... user can always do chart.forceY([]) to remove
- , clipEdge = true
- , stacked = false
- , stackOffset = 'zero' // options include 'silhouette', 'wiggle', 'expand', 'zero', or a custom function
- , color = nv.utils.defaultColor()
- , errorBarColor = nv.utils.defaultColor()
- , hideable = false
- , barColor = null // adding the ability to set the color for each rather than the whole group
- , disabled // used in conjunction with barColor to communicate from multiBarHorizontalChart what series are disabled
- , duration = 500
- , xDomain
- , yDomain
- , xRange
- , yRange
- , groupSpacing = 0.1
- , dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout', 'elementMousemove', 'renderEnd')
- ;
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var x0, y0 //used to store previous scales
- , renderWatch = nv.utils.renderWatch(dispatch, duration)
- ;
-
- var last_datalength = 0;
-
- function chart(selection) {
- renderWatch.reset();
- selection.each(function(data) {
- var availableWidth = width - margin.left - margin.right,
- availableHeight = height - margin.top - margin.bottom;
-
- container = d3.select(this);
- nv.utils.initSVG(container);
- var nonStackableCount = 0;
- // This function defines the requirements for render complete
- var endFn = function(d, i) {
- if (d.series === data.length - 1 && i === data[0].values.length - 1)
- return true;
- return false;
- };
-
- if(hideable && data.length) hideable = [{
- values: data[0].values.map(function(d) {
- return {
- x: d.x,
- y: 0,
- series: d.series,
- size: 0.01
- };}
- )}];
-
- if (stacked) {
- var parsed = d3.layout.stack()
- .offset(stackOffset)
- .values(function(d){ return d.values })
- .y(getY)
- (!data.length && hideable ? hideable : data);
-
- parsed.forEach(function(series, i){
- // if series is non-stackable, use un-parsed data
- if (series.nonStackable) {
- data[i].nonStackableSeries = nonStackableCount++;
- parsed[i] = data[i];
- } else {
- // don't stack this seires on top of the nonStackable seriees
- if (i > 0 && parsed[i - 1].nonStackable){
- parsed[i].values.map(function(d,j){
- d.y0 -= parsed[i - 1].values[j].y;
- d.y1 = d.y0 + d.y;
- });
- }
- }
- });
- data = parsed;
- }
- //add series index and key to each data point for reference
- data.forEach(function(series, i) {
- series.values.forEach(function(point) {
- point.series = i;
- point.key = series.key;
- });
- });
-
- // HACK for negative value stacking
- if (stacked) {
- data[0].values.map(function(d,i) {
- var posBase = 0, negBase = 0;
- data.map(function(d, idx) {
- if (!data[idx].nonStackable) {
- var f = d.values[i]
- f.size = Math.abs(f.y);
- if (f.y<0) {
- f.y1 = negBase;
- negBase = negBase - f.size;
- } else
- {
- f.y1 = f.size + posBase;
- posBase = posBase + f.size;
- }
- }
-
- });
- });
- }
- // Setup Scales
- // remap and flatten the data for use in calculating the scales' domains
- var seriesData = (xDomain && yDomain) ? [] : // if we know xDomain and yDomain, no need to calculate
- data.map(function(d, idx) {
- return d.values.map(function(d,i) {
- return { x: getX(d,i), y: getY(d,i), y0: d.y0, y1: d.y1, idx:idx, yErr: getYerr(d,i)}
- })
- });
-
- x.domain(xDomain || d3.merge(seriesData).map(function(d) { return d.x }))
- .rangeBands(xRange || [0, availableWidth], groupSpacing);
-
- y.domain(yDomain || d3.extent(d3.merge(
- d3.merge(seriesData).map(function(d) {
- var domain = d.y;
- // increase the domain range if this series is stackable
- if (stacked && !data[d.idx].nonStackable) {
- if (d.y > 0){
- domain = d.y1
- } else {
- domain = d.y1 + d.y
- }
- }
- var yerr = d.yErr;
- if (yerr) {
- if (yerr.length) {
- return [domain + yerr[0], domain + yerr[1]];
- } else {
- yerr = Math.abs(yerr)
- return [domain - yerr, domain + yerr];
- }
- } else {
- return [domain];
- }
- })).concat(forceY)))
- .range(yRange || [availableHeight, 0]);
-
- // If scale's domain don't have a range, slightly adjust to make one... so a chart can show a single data point
- if (x.domain()[0] === x.domain()[1])
- x.domain()[0] ?
- x.domain([x.domain()[0] - x.domain()[0] * 0.01, x.domain()[1] + x.domain()[1] * 0.01])
- : x.domain([-1,1]);
-
- if (y.domain()[0] === y.domain()[1])
- y.domain()[0] ?
- y.domain([y.domain()[0] + y.domain()[0] * 0.01, y.domain()[1] - y.domain()[1] * 0.01])
- : y.domain([-1,1]);
-
- x0 = x0 || x;
- y0 = y0 || y;
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-multibar').data([data]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-multibar');
- var defsEnter = wrapEnter.append('defs');
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-groups');
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- defsEnter.append('clipPath')
- .attr('id', 'nv-edge-clip-' + id)
- .append('rect');
- wrap.select('#nv-edge-clip-' + id + ' rect')
- .attr('width', availableWidth)
- .attr('height', availableHeight);
-
- g.attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + id + ')' : '');
-
- var groups = wrap.select('.nv-groups').selectAll('.nv-group')
- .data(function(d) { return d }, function(d,i) { return i });
- groups.enter().append('g')
- .style('stroke-opacity', 1e-6)
- .style('fill-opacity', 1e-6);
-
- var exitTransition = renderWatch
- .transition(groups.exit().selectAll('g.nv-bar'), 'multibarExit', Math.min(100, duration))
- .attr('y', function(d, i, j) {
- var yVal = y0(0) || 0;
- if (stacked) {
- if (data[d.series] && !data[d.series].nonStackable) {
- yVal = y0(d.y0);
- }
- }
- return yVal;
- })
- .attr('height', 0)
- .remove();
- if (exitTransition.delay)
- exitTransition.delay(function(d,i) {
- var delay = i * (duration / (last_datalength + 1)) - i;
- return delay;
- });
- groups
- .attr('class', function(d,i) { return 'nv-group nv-series-' + i })
- .classed('hover', function(d) { return d.hover })
- .style('fill', function(d,i){ return color(d, i) })
- .style('stroke', function(d,i){ return color(d, i) });
- groups
- .style('stroke-opacity', 1)
- .style('fill-opacity', 0.75);
-
- var bars = groups.selectAll('g.nv-bar')
- .data(function(d) { return (hideable && !data.length) ? hideable.values : d.values });
- bars.exit().remove();
-
- var barsEnter = bars.enter().append('g')
- .attr('class', function(d,i) { return getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive'})
- .attr('transform', function(d,i,j) {
- var _x = stacked && !data[j].nonStackable ? 0 : (j * x.rangeBand() / data.length );
- var _y = y0(stacked && !data[j].nonStackable ? d.y0 : 0) || 0;
- return 'translate(' + _x + ',' + _y + ')';
- })
- ;
-
- barsEnter.append('rect')
- .attr('height', 0)
- .attr('width', function(d,i,j) { return x.rangeBand() / (stacked && !data[j].nonStackable ? 1 : data.length) })
- .style('fill', function(d,i,j){ return color(d, j, i); })
- .style('stroke', function(d,i,j){ return color(d, j, i); })
- ;
- bars
- .on('mouseover', function(d,i) { //TODO: figure out why j works above, but not here
- d3.select(this).classed('hover', true);
- dispatch.elementMouseover({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- })
- .on('mouseout', function(d,i) {
- d3.select(this).classed('hover', false);
- dispatch.elementMouseout({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- })
- .on('mousemove', function(d,i) {
- dispatch.elementMousemove({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- })
- .on('click', function(d,i) {
- dispatch.elementClick({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- d3.event.stopPropagation();
- })
- .on('dblclick', function(d,i) {
- dispatch.elementDblClick({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- d3.event.stopPropagation();
- });
-
- if (getYerr(data[0].values[0], 0)) {
- barsEnter.append('polyline');
-
- bars.select('polyline')
- .attr('fill', 'none')
- .attr('stroke', 'black')
- //.attr('stroke', function(d, i, j) { return errorBarColor(d, j, i); })
- .attr('points', function(d,i) {
- var yerr = getYerr(d,i)
- , mid = 0.8 * x.rangeBand() / ((stacked ? 1 : data.length) * 2);
- yerr = yerr.length ? yerr : [-Math.abs(yerr), Math.abs(yerr)];
- yerr = yerr.map(function(e) { return y(e) - y(0); });
- var a = [[-mid, yerr[0]], [mid, yerr[0]], [0, yerr[0]], [0, yerr[1]], [-mid, yerr[1]], [mid, yerr[1]]];
- return a.map(function (path) { return path.join(',') }).join(' ');
- })
- .attr('transform', function(d, i) {
- var xOffset = x.rangeBand() / ((stacked ? 1 : data.length) * 2);
- var yOffset = getY(d,i) < 0 ? y(getY(d, i)) - y(0) : 0;
- return 'translate(' + xOffset + ', ' + yOffset + ')';
- })
- }
-
- bars
- .attr('class', function(d,i) { return getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive'})
-
- if (barColor) {
- if (!disabled) disabled = data.map(function() { return true });
- bars.select('rect')
- .style('fill', function(d,i,j) { return d3.rgb(barColor(d,i)).darker( disabled.map(function(d,i) { return i }).filter(function(d,i){ return !disabled[i] })[j] ).toString(); })
- .style('stroke', function(d,i,j) { return d3.rgb(barColor(d,i)).darker( disabled.map(function(d,i) { return i }).filter(function(d,i){ return !disabled[i] })[j] ).toString(); });
- }
-
- var barSelection =
- bars.watchTransition(renderWatch, 'multibar', Math.min(250, duration))
- .delay(function(d,i) {
- return i * duration / data[0].values.length;
- });
- if (stacked){
- barSelection
- .attr('transform', function(d,i,j) {
- var yVal = 0;
- // if stackable, stack it on top of the previous series
- if (!data[j].nonStackable) {
- yVal = y(d.y1);
- } else {
- if (getY(d,i) < 0){
- yVal = y(0);
- } else {
- if (y(0) - y(getY(d,i)) < -1){
- yVal = y(0) - 1;
- } else {
- yVal = y(getY(d, i)) || 0;
- }
- }
- }
- var width = 0;
- if (data[j].nonStackable) {
- width = d.series * x.rangeBand() / data.length;
- if (data.length !== nonStackableCount){
- width = data[j].nonStackableSeries * x.rangeBand()/(nonStackableCount*2);
- }
- }
- var xVal = width + x(getX(d, i));
- return 'translate(' + xVal + ',' + yVal + ')';
- })
- .select('rect')
- .attr('height', function(d,i,j) {
- if (!data[j].nonStackable) {
- return Math.max(Math.abs(y(d.y+d.y0) - y(d.y0)), 1);
- } else {
- return Math.max(Math.abs(y(getY(d,i)) - y(0)),1) || 0;
- }
- })
- .attr('width', function(d,i,j){
- if (!data[j].nonStackable) {
- return x.rangeBand();
- } else {
- // if all series are nonStacable, take the full width
- var width = (x.rangeBand() / nonStackableCount);
- // otherwise, nonStackable graph will be only taking the half-width
- // of the x rangeBand
- if (data.length !== nonStackableCount) {
- width = x.rangeBand()/(nonStackableCount*2);
- }
- return width;
- }
- });
- }
- else {
- barSelection.attr('transform', function(d,i) {
- var xVal = d.series * x.rangeBand() / data.length + x(getX(d, i));
- var yVal = getY(d,i) < 0 ?
- y(0) :
- y(0) - y(getY(d,i)) < 1 ?
- y(0) - 1 :
- y(getY(d,i)) || 0;
- return 'translate(' + xVal + ',' + yVal + ')';
- })
- .select('rect')
- .attr('width', x.rangeBand() / data.length)
- .attr('height', function(d,i) {
- return Math.max(Math.abs(y(getY(d,i)) - y(0)),1) || 0;
- });
- }
-
- //store old scales for use in transitions on update
- x0 = x.copy();
- y0 = y.copy();
-
- // keep track of the last data value length for transition calculations
- if (data[0] && data[0].values) {
- last_datalength = data[0].values.length;
- }
-
- });
-
- renderWatch.renderEnd('multibar immediate');
-
- return chart;
- }
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
-
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- x: {get: function(){return getX;}, set: function(_){getX=_;}},
- y: {get: function(){return getY;}, set: function(_){getY=_;}},
- yErr: {get: function(){return getYerr;}, set: function(_){getYerr=_;}},
- xScale: {get: function(){return x;}, set: function(_){x=_;}},
- yScale: {get: function(){return y;}, set: function(_){y=_;}},
- xDomain: {get: function(){return xDomain;}, set: function(_){xDomain=_;}},
- yDomain: {get: function(){return yDomain;}, set: function(_){yDomain=_;}},
- xRange: {get: function(){return xRange;}, set: function(_){xRange=_;}},
- yRange: {get: function(){return yRange;}, set: function(_){yRange=_;}},
- forceY: {get: function(){return forceY;}, set: function(_){forceY=_;}},
- stacked: {get: function(){return stacked;}, set: function(_){stacked=_;}},
- stackOffset: {get: function(){return stackOffset;}, set: function(_){stackOffset=_;}},
- clipEdge: {get: function(){return clipEdge;}, set: function(_){clipEdge=_;}},
- disabled: {get: function(){return disabled;}, set: function(_){disabled=_;}},
- id: {get: function(){return id;}, set: function(_){id=_;}},
- hideable: {get: function(){return hideable;}, set: function(_){hideable=_;}},
- groupSpacing:{get: function(){return groupSpacing;}, set: function(_){groupSpacing=_;}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration = _;
- renderWatch.reset(duration);
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- }},
- barColor: {get: function(){return barColor;}, set: function(_){
- barColor = _ ? nv.utils.getColor(_) : null;
- }},
- errorBarColor: {get: function(){return errorBarColor;}, set: function(_){
- errorBarColor = _ ? nv.utils.getColor(_) : null;
- }}
- });
-
- nv.utils.initOptions(chart);
-
- return chart;
-};
-
-nv.models.multiBarChart = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var multibar = nv.models.multiBar()
- , xAxis = nv.models.axis()
- , yAxis = nv.models.axis()
- , legend = nv.models.legend()
- , controls = nv.models.legend()
- , tooltip = nv.models.tooltip()
- ;
-
- var margin = {top: 30, right: 20, bottom: 50, left: 60}
- , width = null
- , height = null
- , color = nv.utils.defaultColor()
- , showControls = true
- , controlLabels = {}
- , showLegend = true
- , showXAxis = true
- , showYAxis = true
- , rightAlignYAxis = false
- , reduceXTicks = true // if false a tick will show for every data point
- , staggerLabels = false
- , rotateLabels = 0
- , x //can be accessed via chart.xScale()
- , y //can be accessed via chart.yScale()
- , state = nv.utils.state()
- , defaultState = null
- , noData = null
- , dispatch = d3.dispatch('stateChange', 'changeState', 'renderEnd')
- , controlWidth = function() { return showControls ? 180 : 0 }
- , duration = 250
- ;
-
- state.stacked = false // DEPRECATED Maintained for backward compatibility
-
- multibar.stacked(false);
- xAxis
- .orient('bottom')
- .tickPadding(7)
- .showMaxMin(false)
- .tickFormat(function(d) { return d })
- ;
- yAxis
- .orient((rightAlignYAxis) ? 'right' : 'left')
- .tickFormat(d3.format(',.1f'))
- ;
-
- tooltip
- .duration(0)
- .valueFormatter(function(d, i) {
- return yAxis.tickFormat()(d, i);
- })
- .headerFormatter(function(d, i) {
- return xAxis.tickFormat()(d, i);
- });
-
- controls.updateState(false);
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var renderWatch = nv.utils.renderWatch(dispatch);
- var stacked = false;
-
- var stateGetter = function(data) {
- return function(){
- return {
- active: data.map(function(d) { return !d.disabled }),
- stacked: stacked
- };
- }
- };
-
- var stateSetter = function(data) {
- return function(state) {
- if (state.stacked !== undefined)
- stacked = state.stacked;
- if (state.active !== undefined)
- data.forEach(function(series,i) {
- series.disabled = !state.active[i];
- });
- }
- };
-
- function chart(selection) {
- renderWatch.reset();
- renderWatch.models(multibar);
- if (showXAxis) renderWatch.models(xAxis);
- if (showYAxis) renderWatch.models(yAxis);
-
- selection.each(function(data) {
- var container = d3.select(this),
- that = this;
- nv.utils.initSVG(container);
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- chart.update = function() {
- if (duration === 0)
- container.call(chart);
- else
- container.transition()
- .duration(duration)
- .call(chart);
- };
- chart.container = this;
-
- state
- .setter(stateSetter(data), chart.update)
- .getter(stateGetter(data))
- .update();
-
- // DEPRECATED set state.disableddisabled
- state.disabled = data.map(function(d) { return !!d.disabled });
-
- if (!defaultState) {
- var key;
- defaultState = {};
- for (key in state) {
- if (state[key] instanceof Array)
- defaultState[key] = state[key].slice(0);
- else
- defaultState[key] = state[key];
- }
- }
-
- // Display noData message if there's nothing to show.
- if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
- nv.utils.noData(chart, container)
- return chart;
- } else {
- container.selectAll('.nv-noData').remove();
- }
-
- // Setup Scales
- x = multibar.xScale();
- y = multibar.yScale();
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-multiBarWithLegend').data([data]);
- var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-multiBarWithLegend').append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-x nv-axis');
- gEnter.append('g').attr('class', 'nv-y nv-axis');
- gEnter.append('g').attr('class', 'nv-barsWrap');
- gEnter.append('g').attr('class', 'nv-legendWrap');
- gEnter.append('g').attr('class', 'nv-controlsWrap');
-
- // Legend
- if (showLegend) {
- legend.width(availableWidth - controlWidth());
-
- g.select('.nv-legendWrap')
- .datum(data)
- .call(legend);
-
- if ( margin.top != legend.height()) {
- margin.top = legend.height();
- availableHeight = nv.utils.availableHeight(height, container, margin);
- }
-
- g.select('.nv-legendWrap')
- .attr('transform', 'translate(' + controlWidth() + ',' + (-margin.top) +')');
- }
-
- // Controls
- if (showControls) {
- var controlsData = [
- { key: controlLabels.grouped || 'Grouped', disabled: multibar.stacked() },
- { key: controlLabels.stacked || 'Stacked', disabled: !multibar.stacked() }
- ];
-
- controls.width(controlWidth()).color(['#444', '#444', '#444']);
- g.select('.nv-controlsWrap')
- .datum(controlsData)
- .attr('transform', 'translate(0,' + (-margin.top) +')')
- .call(controls);
- }
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
- if (rightAlignYAxis) {
- g.select(".nv-y.nv-axis")
- .attr("transform", "translate(" + availableWidth + ",0)");
- }
-
- // Main Chart Component(s)
- multibar
- .disabled(data.map(function(series) { return series.disabled }))
- .width(availableWidth)
- .height(availableHeight)
- .color(data.map(function(d,i) {
- return d.color || color(d, i);
- }).filter(function(d,i) { return !data[i].disabled }));
-
-
- var barsWrap = g.select('.nv-barsWrap')
- .datum(data.filter(function(d) { return !d.disabled }));
-
- barsWrap.call(multibar);
-
- // Setup Axes
- if (showXAxis) {
- xAxis
- .scale(x)
- ._ticks( nv.utils.calcTicksX(availableWidth/100, data) )
- .tickSize(-availableHeight, 0);
-
- g.select('.nv-x.nv-axis')
- .attr('transform', 'translate(0,' + y.range()[0] + ')');
- g.select('.nv-x.nv-axis')
- .call(xAxis);
-
- var xTicks = g.select('.nv-x.nv-axis > g').selectAll('g');
-
- xTicks
- .selectAll('line, text')
- .style('opacity', 1)
-
- if (staggerLabels) {
- var getTranslate = function(x,y) {
- return "translate(" + x + "," + y + ")";
- };
-
- var staggerUp = 5, staggerDown = 17; //pixels to stagger by
- // Issue #140
- xTicks
- .selectAll("text")
- .attr('transform', function(d,i,j) {
- return getTranslate(0, (j % 2 == 0 ? staggerUp : staggerDown));
- });
-
- var totalInBetweenTicks = d3.selectAll(".nv-x.nv-axis .nv-wrap g g text")[0].length;
- g.selectAll(".nv-x.nv-axis .nv-axisMaxMin text")
- .attr("transform", function(d,i) {
- return getTranslate(0, (i === 0 || totalInBetweenTicks % 2 !== 0) ? staggerDown : staggerUp);
- });
- }
-
- if (reduceXTicks)
- xTicks
- .filter(function(d,i) {
- return i % Math.ceil(data[0].values.length / (availableWidth / 100)) !== 0;
- })
- .selectAll('text, line')
- .style('opacity', 0);
-
- if(rotateLabels)
- xTicks
- .selectAll('.tick text')
- .attr('transform', 'rotate(' + rotateLabels + ' 0,0)')
- .style('text-anchor', rotateLabels > 0 ? 'start' : 'end');
-
- g.select('.nv-x.nv-axis').selectAll('g.nv-axisMaxMin text')
- .style('opacity', 1);
- }
-
- if (showYAxis) {
- yAxis
- .scale(y)
- ._ticks( nv.utils.calcTicksY(availableHeight/36, data) )
- .tickSize( -availableWidth, 0);
-
- g.select('.nv-y.nv-axis')
- .call(yAxis);
- }
-
- //============================================================
- // Event Handling/Dispatching (in chart's scope)
- //------------------------------------------------------------
-
- legend.dispatch.on('stateChange', function(newState) {
- for (var key in newState)
- state[key] = newState[key];
- dispatch.stateChange(state);
- chart.update();
- });
-
- controls.dispatch.on('legendClick', function(d,i) {
- if (!d.disabled) return;
- controlsData = controlsData.map(function(s) {
- s.disabled = true;
- return s;
- });
- d.disabled = false;
-
- switch (d.key) {
- case 'Grouped':
- case controlLabels.grouped:
- multibar.stacked(false);
- break;
- case 'Stacked':
- case controlLabels.stacked:
- multibar.stacked(true);
- break;
- }
-
- state.stacked = multibar.stacked();
- dispatch.stateChange(state);
- chart.update();
- });
-
- // Update chart from a state object passed to event handler
- dispatch.on('changeState', function(e) {
- if (typeof e.disabled !== 'undefined') {
- data.forEach(function(series,i) {
- series.disabled = e.disabled[i];
- });
- state.disabled = e.disabled;
- }
- if (typeof e.stacked !== 'undefined') {
- multibar.stacked(e.stacked);
- state.stacked = e.stacked;
- stacked = e.stacked;
- }
- chart.update();
- });
- });
-
- renderWatch.renderEnd('multibarchart immediate');
- return chart;
- }
-
- //============================================================
- // Event Handling/Dispatching (out of chart's scope)
- //------------------------------------------------------------
-
- multibar.dispatch.on('elementMouseover.tooltip', function(evt) {
- evt.value = chart.x()(evt.data);
- evt['series'] = {
- key: evt.data.key,
- value: chart.y()(evt.data),
- color: evt.color
- };
- tooltip.data(evt).hidden(false);
- });
-
- multibar.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true);
- });
-
- multibar.dispatch.on('elementMousemove.tooltip', function(evt) {
- tooltip.position({top: d3.event.pageY, left: d3.event.pageX})();
- });
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- // expose chart's sub-components
- chart.dispatch = dispatch;
- chart.multibar = multibar;
- chart.legend = legend;
- chart.controls = controls;
- chart.xAxis = xAxis;
- chart.yAxis = yAxis;
- chart.state = state;
- chart.tooltip = tooltip;
-
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- showLegend: {get: function(){return showLegend;}, set: function(_){showLegend=_;}},
- showControls: {get: function(){return showControls;}, set: function(_){showControls=_;}},
- controlLabels: {get: function(){return controlLabels;}, set: function(_){controlLabels=_;}},
- showXAxis: {get: function(){return showXAxis;}, set: function(_){showXAxis=_;}},
- showYAxis: {get: function(){return showYAxis;}, set: function(_){showYAxis=_;}},
- defaultState: {get: function(){return defaultState;}, set: function(_){defaultState=_;}},
- noData: {get: function(){return noData;}, set: function(_){noData=_;}},
- reduceXTicks: {get: function(){return reduceXTicks;}, set: function(_){reduceXTicks=_;}},
- rotateLabels: {get: function(){return rotateLabels;}, set: function(_){rotateLabels=_;}},
- staggerLabels: {get: function(){return staggerLabels;}, set: function(_){staggerLabels=_;}},
-
- // deprecated options
- tooltips: {get: function(){return tooltip.enabled();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltips', 'use chart.tooltip.enabled() instead');
- tooltip.enabled(!!_);
- }},
- tooltipContent: {get: function(){return tooltip.contentGenerator();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltipContent', 'use chart.tooltip.contentGenerator() instead');
- tooltip.contentGenerator(_);
- }},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration = _;
- multibar.duration(duration);
- xAxis.duration(duration);
- yAxis.duration(duration);
- renderWatch.reset(duration);
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- legend.color(color);
- }},
- rightAlignYAxis: {get: function(){return rightAlignYAxis;}, set: function(_){
- rightAlignYAxis = _;
- yAxis.orient( rightAlignYAxis ? 'right' : 'left');
- }},
- barColor: {get: function(){return multibar.barColor;}, set: function(_){
- multibar.barColor(_);
- legend.color(function(d,i) {return d3.rgb('#ccc').darker(i * 1.5).toString();})
- }}
- });
-
- nv.utils.inheritOptions(chart, multibar);
- nv.utils.initOptions(chart);
-
- return chart;
-};
-
-nv.models.multiBarHorizontal = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 0, right: 0, bottom: 0, left: 0}
- , width = 960
- , height = 500
- , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one
- , container = null
- , x = d3.scale.ordinal()
- , y = d3.scale.linear()
- , getX = function(d) { return d.x }
- , getY = function(d) { return d.y }
- , getYerr = function(d) { return d.yErr }
- , forceY = [0] // 0 is forced by default.. this makes sense for the majority of bar graphs... user can always do chart.forceY([]) to remove
- , color = nv.utils.defaultColor()
- , barColor = null // adding the ability to set the color for each rather than the whole group
- , errorBarColor = nv.utils.defaultColor()
- , disabled // used in conjunction with barColor to communicate from multiBarHorizontalChart what series are disabled
- , stacked = false
- , showValues = false
- , showBarLabels = false
- , valuePadding = 60
- , groupSpacing = 0.1
- , valueFormat = d3.format(',.2f')
- , delay = 1200
- , xDomain
- , yDomain
- , xRange
- , yRange
- , duration = 250
- , dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout', 'elementMousemove', 'renderEnd')
- ;
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var x0, y0; //used to store previous scales
- var renderWatch = nv.utils.renderWatch(dispatch, duration);
-
- function chart(selection) {
- renderWatch.reset();
- selection.each(function(data) {
- var availableWidth = width - margin.left - margin.right,
- availableHeight = height - margin.top - margin.bottom;
-
- container = d3.select(this);
- nv.utils.initSVG(container);
-
- if (stacked)
- data = d3.layout.stack()
- .offset('zero')
- .values(function(d){ return d.values })
- .y(getY)
- (data);
-
- //add series index and key to each data point for reference
- data.forEach(function(series, i) {
- series.values.forEach(function(point) {
- point.series = i;
- point.key = series.key;
- });
- });
-
- // HACK for negative value stacking
- if (stacked)
- data[0].values.map(function(d,i) {
- var posBase = 0, negBase = 0;
- data.map(function(d) {
- var f = d.values[i]
- f.size = Math.abs(f.y);
- if (f.y<0) {
- f.y1 = negBase - f.size;
- negBase = negBase - f.size;
- } else
- {
- f.y1 = posBase;
- posBase = posBase + f.size;
- }
- });
- });
-
- // Setup Scales
- // remap and flatten the data for use in calculating the scales' domains
- var seriesData = (xDomain && yDomain) ? [] : // if we know xDomain and yDomain, no need to calculate
- data.map(function(d) {
- return d.values.map(function(d,i) {
- return { x: getX(d,i), y: getY(d,i), y0: d.y0, y1: d.y1, yErr: getYerr(d,i) }
- })
- });
-
- x.domain(xDomain || d3.merge(seriesData).map(function(d) { return d.x }))
- .rangeBands(xRange || [0, availableHeight], groupSpacing);
-
- y.domain(yDomain || d3.extent(d3.merge(
- d3.merge(seriesData).map(function(d) {
- var domain = d.y;
- if (stacked) {
- if (d.y > 0){
- domain = d.y1 + d.y
- } else {
- domain = d.y1
- }
- }
- var yerr = d.yErr;
- if (yerr) {
- if (yerr.length) {
- return [domain + yerr[0], domain + yerr[1]];
- } else {
- yerr = Math.abs(yerr)
- return [domain - yerr, domain + yerr];
- }
- } else {
- return [domain];
- }
- })).concat(forceY)))
-
- if (showValues && !stacked)
- y.range(yRange || [(y.domain()[0] < 0 ? valuePadding : 0), availableWidth - (y.domain()[1] > 0 ? valuePadding : 0) ]);
- else
- y.range(yRange || [0, availableWidth]);
-
- x0 = x0 || x;
- y0 = y0 || d3.scale.linear().domain(y.domain()).range([y(0),y(0)]);
-
- // Setup containers and skeleton of chart
- var wrap = d3.select(this).selectAll('g.nv-wrap.nv-multibarHorizontal').data([data]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-multibarHorizontal');
- var defsEnter = wrapEnter.append('defs');
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-groups');
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- var groups = wrap.select('.nv-groups').selectAll('.nv-group')
- .data(function(d) { return d }, function(d,i) { return i });
- groups.enter().append('g')
- .style('stroke-opacity', 1e-6)
- .style('fill-opacity', 1e-6);
- groups.exit().watchTransition(renderWatch, 'multibarhorizontal: exit groups')
- .style('stroke-opacity', 1e-6)
- .style('fill-opacity', 1e-6)
- .remove();
- groups
- .attr('class', function(d,i) { return 'nv-group nv-series-' + i })
- .classed('hover', function(d) { return d.hover })
- .style('fill', function(d,i){ return color(d, i) })
- .style('stroke', function(d,i){ return color(d, i) });
- groups.watchTransition(renderWatch, 'multibarhorizontal: groups')
- .style('stroke-opacity', 1)
- .style('fill-opacity', .75);
-
- var bars = groups.selectAll('g.nv-bar')
- .data(function(d) { return d.values });
- bars.exit().remove();
-
- var barsEnter = bars.enter().append('g')
- .attr('transform', function(d,i,j) {
- return 'translate(' + y0(stacked ? d.y0 : 0) + ',' + (stacked ? 0 : (j * x.rangeBand() / data.length ) + x(getX(d,i))) + ')'
- });
-
- barsEnter.append('rect')
- .attr('width', 0)
- .attr('height', x.rangeBand() / (stacked ? 1 : data.length) )
-
- bars
- .on('mouseover', function(d,i) { //TODO: figure out why j works above, but not here
- d3.select(this).classed('hover', true);
- dispatch.elementMouseover({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- })
- .on('mouseout', function(d,i) {
- d3.select(this).classed('hover', false);
- dispatch.elementMouseout({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- })
- .on('mouseout', function(d,i) {
- dispatch.elementMouseout({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- })
- .on('mousemove', function(d,i) {
- dispatch.elementMousemove({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- })
- .on('click', function(d,i) {
- dispatch.elementClick({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- d3.event.stopPropagation();
- })
- .on('dblclick', function(d,i) {
- dispatch.elementDblClick({
- data: d,
- index: i,
- color: d3.select(this).style("fill")
- });
- d3.event.stopPropagation();
- });
-
- if (getYerr(data[0].values[0], 0)) {
- barsEnter.append('polyline');
-
- bars.select('polyline')
- .attr('fill', 'none')
- .attr('stroke', function(d,i,j) { return errorBarColor(d, j, i); })
- .attr('points', function(d,i) {
- var xerr = getYerr(d,i)
- , mid = 0.8 * x.rangeBand() / ((stacked ? 1 : data.length) * 2);
- xerr = xerr.length ? xerr : [-Math.abs(xerr), Math.abs(xerr)];
- xerr = xerr.map(function(e) { return y(e) - y(0); });
- var a = [[xerr[0],-mid], [xerr[0],mid], [xerr[0],0], [xerr[1],0], [xerr[1],-mid], [xerr[1],mid]];
- return a.map(function (path) { return path.join(',') }).join(' ');
- })
- .attr('transform', function(d,i) {
- var mid = x.rangeBand() / ((stacked ? 1 : data.length) * 2);
- return 'translate(' + (getY(d,i) < 0 ? 0 : y(getY(d,i)) - y(0)) + ', ' + mid + ')'
- });
- }
-
- barsEnter.append('text');
-
- if (showValues && !stacked) {
- bars.select('text')
- .attr('text-anchor', function(d,i) { return getY(d,i) < 0 ? 'end' : 'start' })
- .attr('y', x.rangeBand() / (data.length * 2))
- .attr('dy', '.32em')
- .text(function(d,i) {
- var t = valueFormat(getY(d,i))
- , yerr = getYerr(d,i);
- if (yerr === undefined)
- return t;
- if (!yerr.length)
- return t + '±' + valueFormat(Math.abs(yerr));
- return t + '+' + valueFormat(Math.abs(yerr[1])) + '-' + valueFormat(Math.abs(yerr[0]));
- });
- bars.watchTransition(renderWatch, 'multibarhorizontal: bars')
- .select('text')
- .attr('x', function(d,i) { return getY(d,i) < 0 ? -4 : y(getY(d,i)) - y(0) + 4 })
- } else {
- bars.selectAll('text').text('');
- }
-
- if (showBarLabels && !stacked) {
- barsEnter.append('text').classed('nv-bar-label',true);
- bars.select('text.nv-bar-label')
- .attr('text-anchor', function(d,i) { return getY(d,i) < 0 ? 'start' : 'end' })
- .attr('y', x.rangeBand() / (data.length * 2))
- .attr('dy', '.32em')
- .text(function(d,i) { return getX(d,i) });
- bars.watchTransition(renderWatch, 'multibarhorizontal: bars')
- .select('text.nv-bar-label')
- .attr('x', function(d,i) { return getY(d,i) < 0 ? y(0) - y(getY(d,i)) + 4 : -4 });
- }
- else {
- bars.selectAll('text.nv-bar-label').text('');
- }
-
- bars
- .attr('class', function(d,i) { return getY(d,i) < 0 ? 'nv-bar negative' : 'nv-bar positive'})
-
- if (barColor) {
- if (!disabled) disabled = data.map(function() { return true });
- bars
- .style('fill', function(d,i,j) { return d3.rgb(barColor(d,i)).darker( disabled.map(function(d,i) { return i }).filter(function(d,i){ return !disabled[i] })[j] ).toString(); })
- .style('stroke', function(d,i,j) { return d3.rgb(barColor(d,i)).darker( disabled.map(function(d,i) { return i }).filter(function(d,i){ return !disabled[i] })[j] ).toString(); });
- }
-
- if (stacked)
- bars.watchTransition(renderWatch, 'multibarhorizontal: bars')
- .attr('transform', function(d,i) {
- return 'translate(' + y(d.y1) + ',' + x(getX(d,i)) + ')'
- })
- .select('rect')
- .attr('width', function(d,i) {
- return Math.abs(y(getY(d,i) + d.y0) - y(d.y0))
- })
- .attr('height', x.rangeBand() );
- else
- bars.watchTransition(renderWatch, 'multibarhorizontal: bars')
- .attr('transform', function(d,i) {
- //TODO: stacked must be all positive or all negative, not both?
- return 'translate(' +
- (getY(d,i) < 0 ? y(getY(d,i)) : y(0))
- + ',' +
- (d.series * x.rangeBand() / data.length
- +
- x(getX(d,i)) )
- + ')'
- })
- .select('rect')
- .attr('height', x.rangeBand() / data.length )
- .attr('width', function(d,i) {
- return Math.max(Math.abs(y(getY(d,i)) - y(0)),1)
- });
-
- //store old scales for use in transitions on update
- x0 = x.copy();
- y0 = y.copy();
-
- });
-
- renderWatch.renderEnd('multibarHorizontal immediate');
- return chart;
- }
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
-
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- x: {get: function(){return getX;}, set: function(_){getX=_;}},
- y: {get: function(){return getY;}, set: function(_){getY=_;}},
- yErr: {get: function(){return getYerr;}, set: function(_){getYerr=_;}},
- xScale: {get: function(){return x;}, set: function(_){x=_;}},
- yScale: {get: function(){return y;}, set: function(_){y=_;}},
- xDomain: {get: function(){return xDomain;}, set: function(_){xDomain=_;}},
- yDomain: {get: function(){return yDomain;}, set: function(_){yDomain=_;}},
- xRange: {get: function(){return xRange;}, set: function(_){xRange=_;}},
- yRange: {get: function(){return yRange;}, set: function(_){yRange=_;}},
- forceY: {get: function(){return forceY;}, set: function(_){forceY=_;}},
- stacked: {get: function(){return stacked;}, set: function(_){stacked=_;}},
- showValues: {get: function(){return showValues;}, set: function(_){showValues=_;}},
- // this shows the group name, seems pointless?
- //showBarLabels: {get: function(){return showBarLabels;}, set: function(_){showBarLabels=_;}},
- disabled: {get: function(){return disabled;}, set: function(_){disabled=_;}},
- id: {get: function(){return id;}, set: function(_){id=_;}},
- valueFormat: {get: function(){return valueFormat;}, set: function(_){valueFormat=_;}},
- valuePadding: {get: function(){return valuePadding;}, set: function(_){valuePadding=_;}},
- groupSpacing:{get: function(){return groupSpacing;}, set: function(_){groupSpacing=_;}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration = _;
- renderWatch.reset(duration);
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- }},
- barColor: {get: function(){return barColor;}, set: function(_){
- barColor = _ ? nv.utils.getColor(_) : null;
- }},
- errorBarColor: {get: function(){return errorBarColor;}, set: function(_){
- errorBarColor = _ ? nv.utils.getColor(_) : null;
- }}
- });
-
- nv.utils.initOptions(chart);
-
- return chart;
-};
-
-nv.models.multiBarHorizontalChart = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var multibar = nv.models.multiBarHorizontal()
- , xAxis = nv.models.axis()
- , yAxis = nv.models.axis()
- , legend = nv.models.legend().height(30)
- , controls = nv.models.legend().height(30)
- , tooltip = nv.models.tooltip()
- ;
-
- var margin = {top: 30, right: 20, bottom: 50, left: 60}
- , width = null
- , height = null
- , color = nv.utils.defaultColor()
- , showControls = true
- , controlLabels = {}
- , showLegend = true
- , showXAxis = true
- , showYAxis = true
- , stacked = false
- , x //can be accessed via chart.xScale()
- , y //can be accessed via chart.yScale()
- , state = nv.utils.state()
- , defaultState = null
- , noData = null
- , dispatch = d3.dispatch('stateChange', 'changeState','renderEnd')
- , controlWidth = function() { return showControls ? 180 : 0 }
- , duration = 250
- ;
-
- state.stacked = false; // DEPRECATED Maintained for backward compatibility
-
- multibar.stacked(stacked);
-
- xAxis
- .orient('left')
- .tickPadding(5)
- .showMaxMin(false)
- .tickFormat(function(d) { return d })
- ;
- yAxis
- .orient('bottom')
- .tickFormat(d3.format(',.1f'))
- ;
-
- tooltip
- .duration(0)
- .valueFormatter(function(d, i) {
- return yAxis.tickFormat()(d, i);
- })
- .headerFormatter(function(d, i) {
- return xAxis.tickFormat()(d, i);
- });
-
- controls.updateState(false);
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var stateGetter = function(data) {
- return function(){
- return {
- active: data.map(function(d) { return !d.disabled }),
- stacked: stacked
- };
- }
- };
-
- var stateSetter = function(data) {
- return function(state) {
- if (state.stacked !== undefined)
- stacked = state.stacked;
- if (state.active !== undefined)
- data.forEach(function(series,i) {
- series.disabled = !state.active[i];
- });
- }
- };
-
- var renderWatch = nv.utils.renderWatch(dispatch, duration);
-
- function chart(selection) {
- renderWatch.reset();
- renderWatch.models(multibar);
- if (showXAxis) renderWatch.models(xAxis);
- if (showYAxis) renderWatch.models(yAxis);
-
- selection.each(function(data) {
- var container = d3.select(this),
- that = this;
- nv.utils.initSVG(container);
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- chart.update = function() { container.transition().duration(duration).call(chart) };
- chart.container = this;
-
- stacked = multibar.stacked();
-
- state
- .setter(stateSetter(data), chart.update)
- .getter(stateGetter(data))
- .update();
-
- // DEPRECATED set state.disableddisabled
- state.disabled = data.map(function(d) { return !!d.disabled });
-
- if (!defaultState) {
- var key;
- defaultState = {};
- for (key in state) {
- if (state[key] instanceof Array)
- defaultState[key] = state[key].slice(0);
- else
- defaultState[key] = state[key];
- }
- }
-
- // Display No Data message if there's nothing to show.
- if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
- nv.utils.noData(chart, container)
- return chart;
- } else {
- container.selectAll('.nv-noData').remove();
- }
-
- // Setup Scales
- x = multibar.xScale();
- y = multibar.yScale();
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-multiBarHorizontalChart').data([data]);
- var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-multiBarHorizontalChart').append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-x nv-axis');
- gEnter.append('g').attr('class', 'nv-y nv-axis')
- .append('g').attr('class', 'nv-zeroLine')
- .append('line');
- gEnter.append('g').attr('class', 'nv-barsWrap');
- gEnter.append('g').attr('class', 'nv-legendWrap');
- gEnter.append('g').attr('class', 'nv-controlsWrap');
-
- // Legend
- if (showLegend) {
- legend.width(availableWidth - controlWidth());
-
- g.select('.nv-legendWrap')
- .datum(data)
- .call(legend);
-
- if ( margin.top != legend.height()) {
- margin.top = legend.height();
- availableHeight = nv.utils.availableHeight(height, container, margin);
- }
-
- g.select('.nv-legendWrap')
- .attr('transform', 'translate(' + controlWidth() + ',' + (-margin.top) +')');
- }
-
- // Controls
- if (showControls) {
- var controlsData = [
- { key: controlLabels.grouped || 'Grouped', disabled: multibar.stacked() },
- { key: controlLabels.stacked || 'Stacked', disabled: !multibar.stacked() }
- ];
-
- controls.width(controlWidth()).color(['#444', '#444', '#444']);
- g.select('.nv-controlsWrap')
- .datum(controlsData)
- .attr('transform', 'translate(0,' + (-margin.top) +')')
- .call(controls);
- }
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- // Main Chart Component(s)
- multibar
- .disabled(data.map(function(series) { return series.disabled }))
- .width(availableWidth)
- .height(availableHeight)
- .color(data.map(function(d,i) {
- return d.color || color(d, i);
- }).filter(function(d,i) { return !data[i].disabled }));
-
- var barsWrap = g.select('.nv-barsWrap')
- .datum(data.filter(function(d) { return !d.disabled }));
-
- barsWrap.transition().call(multibar);
-
- // Setup Axes
- if (showXAxis) {
- xAxis
- .scale(x)
- ._ticks( nv.utils.calcTicksY(availableHeight/24, data) )
- .tickSize(-availableWidth, 0);
-
- g.select('.nv-x.nv-axis').call(xAxis);
-
- var xTicks = g.select('.nv-x.nv-axis').selectAll('g');
-
- xTicks
- .selectAll('line, text');
- }
-
- if (showYAxis) {
- yAxis
- .scale(y)
- ._ticks( nv.utils.calcTicksX(availableWidth/100, data) )
- .tickSize( -availableHeight, 0);
-
- g.select('.nv-y.nv-axis')
- .attr('transform', 'translate(0,' + availableHeight + ')');
- g.select('.nv-y.nv-axis').call(yAxis);
- }
-
- // Zero line
- g.select(".nv-zeroLine line")
- .attr("x1", y(0))
- .attr("x2", y(0))
- .attr("y1", 0)
- .attr("y2", -availableHeight)
- ;
-
- //============================================================
- // Event Handling/Dispatching (in chart's scope)
- //------------------------------------------------------------
-
- legend.dispatch.on('stateChange', function(newState) {
- for (var key in newState)
- state[key] = newState[key];
- dispatch.stateChange(state);
- chart.update();
- });
-
- controls.dispatch.on('legendClick', function(d,i) {
- if (!d.disabled) return;
- controlsData = controlsData.map(function(s) {
- s.disabled = true;
- return s;
- });
- d.disabled = false;
-
- switch (d.key) {
- case 'Grouped':
- multibar.stacked(false);
- break;
- case 'Stacked':
- multibar.stacked(true);
- break;
- }
-
- state.stacked = multibar.stacked();
- dispatch.stateChange(state);
- stacked = multibar.stacked();
-
- chart.update();
- });
-
- // Update chart from a state object passed to event handler
- dispatch.on('changeState', function(e) {
-
- if (typeof e.disabled !== 'undefined') {
- data.forEach(function(series,i) {
- series.disabled = e.disabled[i];
- });
-
- state.disabled = e.disabled;
- }
-
- if (typeof e.stacked !== 'undefined') {
- multibar.stacked(e.stacked);
- state.stacked = e.stacked;
- stacked = e.stacked;
- }
-
- chart.update();
- });
- });
- renderWatch.renderEnd('multibar horizontal chart immediate');
- return chart;
- }
-
- //============================================================
- // Event Handling/Dispatching (out of chart's scope)
- //------------------------------------------------------------
-
- multibar.dispatch.on('elementMouseover.tooltip', function(evt) {
- evt.value = chart.x()(evt.data);
- evt['series'] = {
- key: evt.data.key,
- value: chart.y()(evt.data),
- color: evt.color
- };
- tooltip.data(evt).hidden(false);
- });
-
- multibar.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true);
- });
-
- multibar.dispatch.on('elementMousemove.tooltip', function(evt) {
- tooltip.position({top: d3.event.pageY, left: d3.event.pageX})();
- });
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- // expose chart's sub-components
- chart.dispatch = dispatch;
- chart.multibar = multibar;
- chart.legend = legend;
- chart.controls = controls;
- chart.xAxis = xAxis;
- chart.yAxis = yAxis;
- chart.state = state;
- chart.tooltip = tooltip;
-
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- showLegend: {get: function(){return showLegend;}, set: function(_){showLegend=_;}},
- showControls: {get: function(){return showControls;}, set: function(_){showControls=_;}},
- controlLabels: {get: function(){return controlLabels;}, set: function(_){controlLabels=_;}},
- showXAxis: {get: function(){return showXAxis;}, set: function(_){showXAxis=_;}},
- showYAxis: {get: function(){return showYAxis;}, set: function(_){showYAxis=_;}},
- defaultState: {get: function(){return defaultState;}, set: function(_){defaultState=_;}},
- noData: {get: function(){return noData;}, set: function(_){noData=_;}},
-
- // deprecated options
- tooltips: {get: function(){return tooltip.enabled();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltips', 'use chart.tooltip.enabled() instead');
- tooltip.enabled(!!_);
- }},
- tooltipContent: {get: function(){return tooltip.contentGenerator();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltipContent', 'use chart.tooltip.contentGenerator() instead');
- tooltip.contentGenerator(_);
- }},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration = _;
- renderWatch.reset(duration);
- multibar.duration(duration);
- xAxis.duration(duration);
- yAxis.duration(duration);
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- legend.color(color);
- }},
- barColor: {get: function(){return multibar.barColor;}, set: function(_){
- multibar.barColor(_);
- legend.color(function(d,i) {return d3.rgb('#ccc').darker(i * 1.5).toString();})
- }}
- });
-
- nv.utils.inheritOptions(chart, multibar);
- nv.utils.initOptions(chart);
-
- return chart;
-};
-nv.models.multiChart = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 30, right: 20, bottom: 50, left: 60},
- color = nv.utils.defaultColor(),
- width = null,
- height = null,
- showLegend = true,
- noData = null,
- yDomain1,
- yDomain2,
- getX = function(d) { return d.x },
- getY = function(d) { return d.y},
- interpolate = 'monotone',
- useVoronoi = true
- ;
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var x = d3.scale.linear(),
- yScale1 = d3.scale.linear(),
- yScale2 = d3.scale.linear(),
-
- lines1 = nv.models.line().yScale(yScale1),
- lines2 = nv.models.line().yScale(yScale2),
-
- bars1 = nv.models.multiBar().stacked(false).yScale(yScale1),
- bars2 = nv.models.multiBar().stacked(false).yScale(yScale2),
-
- stack1 = nv.models.stackedArea().yScale(yScale1),
- stack2 = nv.models.stackedArea().yScale(yScale2),
-
- xAxis = nv.models.axis().scale(x).orient('bottom').tickPadding(5),
- yAxis1 = nv.models.axis().scale(yScale1).orient('left'),
- yAxis2 = nv.models.axis().scale(yScale2).orient('right'),
-
- legend = nv.models.legend().height(30),
- tooltip = nv.models.tooltip(),
- dispatch = d3.dispatch();
-
- function chart(selection) {
- selection.each(function(data) {
- var container = d3.select(this),
- that = this;
- nv.utils.initSVG(container);
-
- chart.update = function() { container.transition().call(chart); };
- chart.container = this;
-
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- var dataLines1 = data.filter(function(d) {return d.type == 'line' && d.yAxis == 1});
- var dataLines2 = data.filter(function(d) {return d.type == 'line' && d.yAxis == 2});
- var dataBars1 = data.filter(function(d) {return d.type == 'bar' && d.yAxis == 1});
- var dataBars2 = data.filter(function(d) {return d.type == 'bar' && d.yAxis == 2});
- var dataStack1 = data.filter(function(d) {return d.type == 'area' && d.yAxis == 1});
- var dataStack2 = data.filter(function(d) {return d.type == 'area' && d.yAxis == 2});
-
- // Display noData message if there's nothing to show.
- if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
- nv.utils.noData(chart, container);
- return chart;
- } else {
- container.selectAll('.nv-noData').remove();
- }
-
- var series1 = data.filter(function(d) {return !d.disabled && d.yAxis == 1})
- .map(function(d) {
- return d.values.map(function(d,i) {
- return { x: d.x, y: d.y }
- })
- });
-
- var series2 = data.filter(function(d) {return !d.disabled && d.yAxis == 2})
- .map(function(d) {
- return d.values.map(function(d,i) {
- return { x: d.x, y: d.y }
- })
- });
-
- x .domain(d3.extent(d3.merge(series1.concat(series2)), function(d) { return d.x } ))
- .range([0, availableWidth]);
-
- var wrap = container.selectAll('g.wrap.multiChart').data([data]);
- var gEnter = wrap.enter().append('g').attr('class', 'wrap nvd3 multiChart').append('g');
-
- gEnter.append('g').attr('class', 'nv-x nv-axis');
- gEnter.append('g').attr('class', 'nv-y1 nv-axis');
- gEnter.append('g').attr('class', 'nv-y2 nv-axis');
- gEnter.append('g').attr('class', 'lines1Wrap');
- gEnter.append('g').attr('class', 'lines2Wrap');
- gEnter.append('g').attr('class', 'bars1Wrap');
- gEnter.append('g').attr('class', 'bars2Wrap');
- gEnter.append('g').attr('class', 'stack1Wrap');
- gEnter.append('g').attr('class', 'stack2Wrap');
- gEnter.append('g').attr('class', 'legendWrap');
-
- var g = wrap.select('g');
-
- var color_array = data.map(function(d,i) {
- return data[i].color || color(d, i);
- });
-
- if (showLegend) {
- var legendWidth = legend.align() ? availableWidth / 2 : availableWidth;
- var legendXPosition = legend.align() ? legendWidth : 0;
-
- legend.width(legendWidth);
- legend.color(color_array);
-
- g.select('.legendWrap')
- .datum(data.map(function(series) {
- series.originalKey = series.originalKey === undefined ? series.key : series.originalKey;
- series.key = series.originalKey + (series.yAxis == 1 ? '' : ' (right axis)');
- return series;
- }))
- .call(legend);
-
- if ( margin.top != legend.height()) {
- margin.top = legend.height();
- availableHeight = nv.utils.availableHeight(height, container, margin);
- }
-
- g.select('.legendWrap')
- .attr('transform', 'translate(' + legendXPosition + ',' + (-margin.top) +')');
- }
-
- lines1
- .width(availableWidth)
- .height(availableHeight)
- .interpolate(interpolate)
- .color(color_array.filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 1 && data[i].type == 'line'}));
- lines2
- .width(availableWidth)
- .height(availableHeight)
- .interpolate(interpolate)
- .color(color_array.filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 2 && data[i].type == 'line'}));
- bars1
- .width(availableWidth)
- .height(availableHeight)
- .color(color_array.filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 1 && data[i].type == 'bar'}));
- bars2
- .width(availableWidth)
- .height(availableHeight)
- .color(color_array.filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 2 && data[i].type == 'bar'}));
- stack1
- .width(availableWidth)
- .height(availableHeight)
- .color(color_array.filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 1 && data[i].type == 'area'}));
- stack2
- .width(availableWidth)
- .height(availableHeight)
- .color(color_array.filter(function(d,i) { return !data[i].disabled && data[i].yAxis == 2 && data[i].type == 'area'}));
-
- g.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- var lines1Wrap = g.select('.lines1Wrap')
- .datum(dataLines1.filter(function(d){return !d.disabled}));
- var bars1Wrap = g.select('.bars1Wrap')
- .datum(dataBars1.filter(function(d){return !d.disabled}));
- var stack1Wrap = g.select('.stack1Wrap')
- .datum(dataStack1.filter(function(d){return !d.disabled}));
- var lines2Wrap = g.select('.lines2Wrap')
- .datum(dataLines2.filter(function(d){return !d.disabled}));
- var bars2Wrap = g.select('.bars2Wrap')
- .datum(dataBars2.filter(function(d){return !d.disabled}));
- var stack2Wrap = g.select('.stack2Wrap')
- .datum(dataStack2.filter(function(d){return !d.disabled}));
-
- var extraValue1 = dataStack1.length ? dataStack1.map(function(a){return a.values}).reduce(function(a,b){
- return a.map(function(aVal,i){return {x: aVal.x, y: aVal.y + b[i].y}})
- }).concat([{x:0, y:0}]) : [];
- var extraValue2 = dataStack2.length ? dataStack2.map(function(a){return a.values}).reduce(function(a,b){
- return a.map(function(aVal,i){return {x: aVal.x, y: aVal.y + b[i].y}})
- }).concat([{x:0, y:0}]) : [];
-
- yScale1 .domain(yDomain1 || d3.extent(d3.merge(series1).concat(extraValue1), function(d) { return d.y } ))
- .range([0, availableHeight]);
-
- yScale2 .domain(yDomain2 || d3.extent(d3.merge(series2).concat(extraValue2), function(d) { return d.y } ))
- .range([0, availableHeight]);
-
- lines1.yDomain(yScale1.domain());
- bars1.yDomain(yScale1.domain());
- stack1.yDomain(yScale1.domain());
-
- lines2.yDomain(yScale2.domain());
- bars2.yDomain(yScale2.domain());
- stack2.yDomain(yScale2.domain());
-
- if(dataStack1.length){d3.transition(stack1Wrap).call(stack1);}
- if(dataStack2.length){d3.transition(stack2Wrap).call(stack2);}
-
- if(dataBars1.length){d3.transition(bars1Wrap).call(bars1);}
- if(dataBars2.length){d3.transition(bars2Wrap).call(bars2);}
-
- if(dataLines1.length){d3.transition(lines1Wrap).call(lines1);}
- if(dataLines2.length){d3.transition(lines2Wrap).call(lines2);}
-
- xAxis
- ._ticks( nv.utils.calcTicksX(availableWidth/100, data) )
- .tickSize(-availableHeight, 0);
-
- g.select('.nv-x.nv-axis')
- .attr('transform', 'translate(0,' + availableHeight + ')');
- d3.transition(g.select('.nv-x.nv-axis'))
- .call(xAxis);
-
- yAxis1
- ._ticks( nv.utils.calcTicksY(availableHeight/36, data) )
- .tickSize( -availableWidth, 0);
-
-
- d3.transition(g.select('.nv-y1.nv-axis'))
- .call(yAxis1);
-
- yAxis2
- ._ticks( nv.utils.calcTicksY(availableHeight/36, data) )
- .tickSize( -availableWidth, 0);
-
- d3.transition(g.select('.nv-y2.nv-axis'))
- .call(yAxis2);
-
- g.select('.nv-y1.nv-axis')
- .classed('nv-disabled', series1.length ? false : true)
- .attr('transform', 'translate(' + x.range()[0] + ',0)');
-
- g.select('.nv-y2.nv-axis')
- .classed('nv-disabled', series2.length ? false : true)
- .attr('transform', 'translate(' + x.range()[1] + ',0)');
-
- legend.dispatch.on('stateChange', function(newState) {
- chart.update();
- });
-
- //============================================================
- // Event Handling/Dispatching
- //------------------------------------------------------------
-
- function mouseover_line(evt) {
- var yaxis = data[evt.seriesIndex].yAxis === 2 ? yAxis2 : yAxis1;
- evt.value = evt.point.x;
- evt.series = {
- value: evt.point.y,
- color: evt.point.color
- };
- tooltip
- .duration(100)
- .valueFormatter(function(d, i) {
- return yaxis.tickFormat()(d, i);
- })
- .data(evt)
- .position(evt.pos)
- .hidden(false);
- }
-
- function mouseover_stack(evt) {
- var yaxis = data[evt.seriesIndex].yAxis === 2 ? yAxis2 : yAxis1;
- evt.point['x'] = stack1.x()(evt.point);
- evt.point['y'] = stack1.y()(evt.point);
- tooltip
- .duration(100)
- .valueFormatter(function(d, i) {
- return yaxis.tickFormat()(d, i);
- })
- .data(evt)
- .position(evt.pos)
- .hidden(false);
- }
-
- function mouseover_bar(evt) {
- var yaxis = data[evt.data.series].yAxis === 2 ? yAxis2 : yAxis1;
-
- evt.value = bars1.x()(evt.data);
- evt['series'] = {
- value: bars1.y()(evt.data),
- color: evt.color
- };
- tooltip
- .duration(0)
- .valueFormatter(function(d, i) {
- return yaxis.tickFormat()(d, i);
- })
- .data(evt)
- .hidden(false);
- }
-
- lines1.dispatch.on('elementMouseover.tooltip', mouseover_line);
- lines2.dispatch.on('elementMouseover.tooltip', mouseover_line);
- lines1.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true)
- });
- lines2.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true)
- });
-
- stack1.dispatch.on('elementMouseover.tooltip', mouseover_stack);
- stack2.dispatch.on('elementMouseover.tooltip', mouseover_stack);
- stack1.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true)
- });
- stack2.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true)
- });
-
- bars1.dispatch.on('elementMouseover.tooltip', mouseover_bar);
- bars2.dispatch.on('elementMouseover.tooltip', mouseover_bar);
-
- bars1.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true);
- });
- bars2.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true);
- });
- bars1.dispatch.on('elementMousemove.tooltip', function(evt) {
- tooltip.position({top: d3.event.pageY, left: d3.event.pageX})();
- });
- bars2.dispatch.on('elementMousemove.tooltip', function(evt) {
- tooltip.position({top: d3.event.pageY, left: d3.event.pageX})();
- });
-
- });
-
- return chart;
- }
-
- //============================================================
- // Global getters and setters
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.lines1 = lines1;
- chart.lines2 = lines2;
- chart.bars1 = bars1;
- chart.bars2 = bars2;
- chart.stack1 = stack1;
- chart.stack2 = stack2;
- chart.xAxis = xAxis;
- chart.yAxis1 = yAxis1;
- chart.yAxis2 = yAxis2;
- chart.tooltip = tooltip;
-
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- showLegend: {get: function(){return showLegend;}, set: function(_){showLegend=_;}},
- yDomain1: {get: function(){return yDomain1;}, set: function(_){yDomain1=_;}},
- yDomain2: {get: function(){return yDomain2;}, set: function(_){yDomain2=_;}},
- noData: {get: function(){return noData;}, set: function(_){noData=_;}},
- interpolate: {get: function(){return interpolate;}, set: function(_){interpolate=_;}},
-
- // deprecated options
- tooltips: {get: function(){return tooltip.enabled();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltips', 'use chart.tooltip.enabled() instead');
- tooltip.enabled(!!_);
- }},
- tooltipContent: {get: function(){return tooltip.contentGenerator();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltipContent', 'use chart.tooltip.contentGenerator() instead');
- tooltip.contentGenerator(_);
- }},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- }},
- x: {get: function(){return getX;}, set: function(_){
- getX = _;
- lines1.x(_);
- lines2.x(_);
- bars1.x(_);
- bars2.x(_);
- stack1.x(_);
- stack2.x(_);
- }},
- y: {get: function(){return getY;}, set: function(_){
- getY = _;
- lines1.y(_);
- lines2.y(_);
- stack1.y(_);
- stack2.y(_);
- bars1.y(_);
- bars2.y(_);
- }},
- useVoronoi: {get: function(){return useVoronoi;}, set: function(_){
- useVoronoi=_;
- lines1.useVoronoi(_);
- lines2.useVoronoi(_);
- stack1.useVoronoi(_);
- stack2.useVoronoi(_);
- }}
- });
-
- nv.utils.initOptions(chart);
-
- return chart;
-};
-
-
-nv.models.ohlcBar = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 0, right: 0, bottom: 0, left: 0}
- , width = null
- , height = null
- , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one
- , container = null
- , x = d3.scale.linear()
- , y = d3.scale.linear()
- , getX = function(d) { return d.x }
- , getY = function(d) { return d.y }
- , getOpen = function(d) { return d.open }
- , getClose = function(d) { return d.close }
- , getHigh = function(d) { return d.high }
- , getLow = function(d) { return d.low }
- , forceX = []
- , forceY = []
- , padData = false // If true, adds half a data points width to front and back, for lining up a line chart with a bar chart
- , clipEdge = true
- , color = nv.utils.defaultColor()
- , interactive = false
- , xDomain
- , yDomain
- , xRange
- , yRange
- , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState', 'renderEnd', 'chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout', 'elementMousemove')
- ;
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- function chart(selection) {
- selection.each(function(data) {
- container = d3.select(this);
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- nv.utils.initSVG(container);
-
- // ohlc bar width.
- var w = (availableWidth / data[0].values.length) * .9;
-
- // Setup Scales
- x.domain(xDomain || d3.extent(data[0].values.map(getX).concat(forceX) ));
-
- if (padData)
- x.range(xRange || [availableWidth * .5 / data[0].values.length, availableWidth * (data[0].values.length - .5) / data[0].values.length ]);
- else
- x.range(xRange || [5 + w/2, availableWidth - w/2 - 5]);
-
- y.domain(yDomain || [
- d3.min(data[0].values.map(getLow).concat(forceY)),
- d3.max(data[0].values.map(getHigh).concat(forceY))
- ]
- ).range(yRange || [availableHeight, 0]);
-
- // If scale's domain don't have a range, slightly adjust to make one... so a chart can show a single data point
- if (x.domain()[0] === x.domain()[1])
- x.domain()[0] ?
- x.domain([x.domain()[0] - x.domain()[0] * 0.01, x.domain()[1] + x.domain()[1] * 0.01])
- : x.domain([-1,1]);
-
- if (y.domain()[0] === y.domain()[1])
- y.domain()[0] ?
- y.domain([y.domain()[0] + y.domain()[0] * 0.01, y.domain()[1] - y.domain()[1] * 0.01])
- : y.domain([-1,1]);
-
- // Setup containers and skeleton of chart
- var wrap = d3.select(this).selectAll('g.nv-wrap.nv-ohlcBar').data([data[0].values]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-ohlcBar');
- var defsEnter = wrapEnter.append('defs');
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-ticks');
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- container
- .on('click', function(d,i) {
- dispatch.chartClick({
- data: d,
- index: i,
- pos: d3.event,
- id: id
- });
- });
-
- defsEnter.append('clipPath')
- .attr('id', 'nv-chart-clip-path-' + id)
- .append('rect');
-
- wrap.select('#nv-chart-clip-path-' + id + ' rect')
- .attr('width', availableWidth)
- .attr('height', availableHeight);
-
- g .attr('clip-path', clipEdge ? 'url(#nv-chart-clip-path-' + id + ')' : '');
-
- var ticks = wrap.select('.nv-ticks').selectAll('.nv-tick')
- .data(function(d) { return d });
- ticks.exit().remove();
-
- ticks.enter().append('path')
- .attr('class', function(d,i,j) { return (getOpen(d,i) > getClose(d,i) ? 'nv-tick negative' : 'nv-tick positive') + ' nv-tick-' + j + '-' + i })
- .attr('d', function(d,i) {
- return 'm0,0l0,'
- + (y(getOpen(d,i))
- - y(getHigh(d,i)))
- + 'l'
- + (-w/2)
- + ',0l'
- + (w/2)
- + ',0l0,'
- + (y(getLow(d,i)) - y(getOpen(d,i)))
- + 'l0,'
- + (y(getClose(d,i))
- - y(getLow(d,i)))
- + 'l'
- + (w/2)
- + ',0l'
- + (-w/2)
- + ',0z';
- })
- .attr('transform', function(d,i) { return 'translate(' + x(getX(d,i)) + ',' + y(getHigh(d,i)) + ')'; })
- .attr('fill', function(d,i) { return color[0]; })
- .attr('stroke', function(d,i) { return color[0]; })
- .attr('x', 0 )
- .attr('y', function(d,i) { return y(Math.max(0, getY(d,i))) })
- .attr('height', function(d,i) { return Math.abs(y(getY(d,i)) - y(0)) });
-
- // the bar colors are controlled by CSS currently
- ticks.attr('class', function(d,i,j) {
- return (getOpen(d,i) > getClose(d,i) ? 'nv-tick negative' : 'nv-tick positive') + ' nv-tick-' + j + '-' + i;
- });
-
- d3.transition(ticks)
- .attr('transform', function(d,i) { return 'translate(' + x(getX(d,i)) + ',' + y(getHigh(d,i)) + ')'; })
- .attr('d', function(d,i) {
- var w = (availableWidth / data[0].values.length) * .9;
- return 'm0,0l0,'
- + (y(getOpen(d,i))
- - y(getHigh(d,i)))
- + 'l'
- + (-w/2)
- + ',0l'
- + (w/2)
- + ',0l0,'
- + (y(getLow(d,i))
- - y(getOpen(d,i)))
- + 'l0,'
- + (y(getClose(d,i))
- - y(getLow(d,i)))
- + 'l'
- + (w/2)
- + ',0l'
- + (-w/2)
- + ',0z';
- });
- });
-
- return chart;
- }
-
-
- //Create methods to allow outside functions to highlight a specific bar.
- chart.highlightPoint = function(pointIndex, isHoverOver) {
- chart.clearHighlights();
- container.select(".nv-ohlcBar .nv-tick-0-" + pointIndex)
- .classed("hover", isHoverOver)
- ;
- };
-
- chart.clearHighlights = function() {
- container.select(".nv-ohlcBar .nv-tick.hover")
- .classed("hover", false)
- ;
- };
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- xScale: {get: function(){return x;}, set: function(_){x=_;}},
- yScale: {get: function(){return y;}, set: function(_){y=_;}},
- xDomain: {get: function(){return xDomain;}, set: function(_){xDomain=_;}},
- yDomain: {get: function(){return yDomain;}, set: function(_){yDomain=_;}},
- xRange: {get: function(){return xRange;}, set: function(_){xRange=_;}},
- yRange: {get: function(){return yRange;}, set: function(_){yRange=_;}},
- forceX: {get: function(){return forceX;}, set: function(_){forceX=_;}},
- forceY: {get: function(){return forceY;}, set: function(_){forceY=_;}},
- padData: {get: function(){return padData;}, set: function(_){padData=_;}},
- clipEdge: {get: function(){return clipEdge;}, set: function(_){clipEdge=_;}},
- id: {get: function(){return id;}, set: function(_){id=_;}},
- interactive: {get: function(){return interactive;}, set: function(_){interactive=_;}},
-
- x: {get: function(){return getX;}, set: function(_){getX=_;}},
- y: {get: function(){return getY;}, set: function(_){getY=_;}},
- open: {get: function(){return getOpen();}, set: function(_){getOpen=_;}},
- close: {get: function(){return getClose();}, set: function(_){getClose=_;}},
- high: {get: function(){return getHigh;}, set: function(_){getHigh=_;}},
- low: {get: function(){return getLow;}, set: function(_){getLow=_;}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top != undefined ? _.top : margin.top;
- margin.right = _.right != undefined ? _.right : margin.right;
- margin.bottom = _.bottom != undefined ? _.bottom : margin.bottom;
- margin.left = _.left != undefined ? _.left : margin.left;
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- }}
- });
-
- nv.utils.initOptions(chart);
- return chart;
-};
-// Code adapted from Jason Davies' "Parallel Coordinates"
-// http://bl.ocks.org/jasondavies/1341281
-nv.models.parallelCoordinates = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 30, right: 0, bottom: 10, left: 0}
- , width = null
- , height = null
- , x = d3.scale.ordinal()
- , y = {}
- , dimensionNames = []
- , dimensionFormats = []
- , color = nv.utils.defaultColor()
- , filters = []
- , active = []
- , dragging = []
- , lineTension = 1
- , dispatch = d3.dispatch('brush', 'elementMouseover', 'elementMouseout')
- ;
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- function chart(selection) {
- selection.each(function(data) {
- var container = d3.select(this);
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- nv.utils.initSVG(container);
-
- active = data; //set all active before first brush call
-
- // Setup Scales
- x.rangePoints([0, availableWidth], 1).domain(dimensionNames);
-
- //Set as true if all values on an axis are missing.
- var onlyNanValues = {};
- // Extract the list of dimensions and create a scale for each.
- dimensionNames.forEach(function(d) {
- var extent = d3.extent(data, function(p) { return +p[d]; });
- onlyNanValues[d] = false;
- //If there is no values to display on an axis, set the extent to 0
- if (extent[0] === undefined) {
- onlyNanValues[d] = true;
- extent[0] = 0;
- extent[1] = 0;
- }
- //Scale axis if there is only one value
- if (extent[0] === extent[1]) {
- extent[0] = extent[0] - 1;
- extent[1] = extent[1] + 1;
- }
- //Use 90% of (availableHeight - 12) for the axis range, 12 reprensenting the space necessary to display "undefined values" text.
- //The remaining 10% are used to display the missingValue line.
- y[d] = d3.scale.linear()
- .domain(extent)
- .range([(availableHeight - 12) * 0.9, 0]);
-
- y[d].brush = d3.svg.brush().y(y[d]).on('brush', brush);
-
- return d != 'name';
- });
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-parallelCoordinates').data([data]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-parallelCoordinates');
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-parallelCoordinates background');
- gEnter.append('g').attr('class', 'nv-parallelCoordinates foreground');
- gEnter.append('g').attr('class', 'nv-parallelCoordinates missingValuesline');
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- var line = d3.svg.line().interpolate('cardinal').tension(lineTension),
- axis = d3.svg.axis().orient('left'),
- axisDrag = d3.behavior.drag()
- .on('dragstart', dragStart)
- .on('drag', dragMove)
- .on('dragend', dragEnd);
-
- //Add missing value line at the bottom of the chart
- var missingValuesline, missingValueslineText;
- var step = x.range()[1] - x.range()[0];
- var axisWithMissingValues = [];
- var lineData = [0 + step / 2, availableHeight - 12, availableWidth - step / 2, availableHeight - 12];
- missingValuesline = wrap.select('.missingValuesline').selectAll('line').data([lineData]);
- missingValuesline.enter().append('line');
- missingValuesline.exit().remove();
- missingValuesline.attr("x1", function(d) { return d[0]; })
- .attr("y1", function(d) { return d[1]; })
- .attr("x2", function(d) { return d[2]; })
- .attr("y2", function(d) { return d[3]; });
-
- //Add the text "undefined values" under the missing value line
- missingValueslineText = wrap.select('.missingValuesline').selectAll('text').data(["undefined values"]);
- missingValueslineText.append('text').data(["undefined values"]);
- missingValueslineText.enter().append('text');
- missingValueslineText.exit().remove();
- missingValueslineText.attr("y", availableHeight)
- //To have the text right align with the missingValues line, substract 92 representing the text size.
- .attr("x", availableWidth - 92 - step / 2)
- .text(function(d) { return d; });
-
- // Add grey background lines for context.
- var background = wrap.select('.background').selectAll('path').data(data);
- background.enter().append('path');
- background.exit().remove();
- background.attr('d', path);
-
- // Add blue foreground lines for focus.
- var foreground = wrap.select('.foreground').selectAll('path').data(data);
- foreground.enter().append('path')
- foreground.exit().remove();
- foreground.attr('d', path).attr('stroke', color);
- foreground.on("mouseover", function (d, i) {
- d3.select(this).classed('hover', true);
- dispatch.elementMouseover({
- label: d.name,
- data: d.data,
- index: i,
- pos: [d3.mouse(this.parentNode)[0], d3.mouse(this.parentNode)[1]]
- });
-
- });
- foreground.on("mouseout", function (d, i) {
- d3.select(this).classed('hover', false);
- dispatch.elementMouseout({
- label: d.name,
- data: d.data,
- index: i
- });
- });
-
- // Add a group element for each dimension.
- var dimensions = g.selectAll('.dimension').data(dimensionNames);
- var dimensionsEnter = dimensions.enter().append('g').attr('class', 'nv-parallelCoordinates dimension');
- dimensionsEnter.append('g').attr('class', 'nv-parallelCoordinates nv-axis');
- dimensionsEnter.append('g').attr('class', 'nv-parallelCoordinates-brush');
- dimensionsEnter.append('text').attr('class', 'nv-parallelCoordinates nv-label');
-
- dimensions.attr('transform', function(d) { return 'translate(' + x(d) + ',0)'; });
- dimensions.exit().remove();
-
- // Add an axis and title.
- dimensions.select('.nv-label')
- .style("cursor", "move")
- .attr('dy', '-1em')
- .attr('text-anchor', 'middle')
- .text(String)
- .on("mouseover", function(d, i) {
- dispatch.elementMouseover({
- dim: d,
- pos: [d3.mouse(this.parentNode.parentNode)[0], d3.mouse(this.parentNode.parentNode)[1]]
- });
- })
- .on("mouseout", function(d, i) {
- dispatch.elementMouseout({
- dim: d
- });
- })
- .call(axisDrag);
-
- dimensions.select('.nv-axis')
- .each(function (d, i) {
- d3.select(this).call(axis.scale(y[d]).tickFormat(d3.format(dimensionFormats[i])));
- });
-
- dimensions.select('.nv-parallelCoordinates-brush')
- .each(function (d) {
- d3.select(this).call(y[d].brush);
- })
- .selectAll('rect')
- .attr('x', -8)
- .attr('width', 16);
-
- // Returns the path for a given data point.
- function path(d) {
- return line(dimensionNames.map(function (p) {
- //If value if missing, put the value on the missing value line
- if(isNaN(d[p]) || isNaN(parseFloat(d[p]))) {
- var domain = y[p].domain();
- var range = y[p].range();
- var min = domain[0] - (domain[1] - domain[0]) / 9;
-
- //If it's not already the case, allow brush to select undefined values
- if(axisWithMissingValues.indexOf(p) < 0) {
-
- var newscale = d3.scale.linear().domain([min, domain[1]]).range([availableHeight - 12, range[1]]);
- y[p].brush.y(newscale);
- axisWithMissingValues.push(p);
- }
-
- return [x(p), y[p](min)];
- }
-
- //If parallelCoordinate contain missing values show the missing values line otherwise, hide it.
- if(axisWithMissingValues.length > 0) {
- missingValuesline.style("display", "inline");
- missingValueslineText.style("display", "inline");
- } else {
- missingValuesline.style("display", "none");
- missingValueslineText.style("display", "none");
- }
-
- return [x(p), y[p](d[p])];
- }));
- }
-
- // Handles a brush event, toggling the display of foreground lines.
- function brush() {
- var actives = dimensionNames.filter(function(p) { return !y[p].brush.empty(); }),
- extents = actives.map(function(p) { return y[p].brush.extent(); });
-
- filters = []; //erase current filters
- actives.forEach(function(d,i) {
- filters[i] = {
- dimension: d,
- extent: extents[i]
- }
- });
-
- active = []; //erase current active list
- foreground.style('display', function(d) {
- var isActive = actives.every(function(p, i) {
- if(isNaN(d[p]) && extents[i][0] == y[p].brush.y().domain()[0]) return true;
- return extents[i][0] <= d[p] && d[p] <= extents[i][1];
- });
- if (isActive) active.push(d);
- return isActive ? null : 'none';
- });
-
- dispatch.brush({
- filters: filters,
- active: active
- });
- }
-
- function dragStart(d, i) {
- dragging[d] = this.parentNode.__origin__ = x(d);
- background.attr("visibility", "hidden");
-
- }
-
- function dragMove(d, i) {
- dragging[d] = Math.min(availableWidth, Math.max(0, this.parentNode.__origin__ += d3.event.x));
- foreground.attr("d", path);
- dimensionNames.sort(function (a, b) { return position(a) - position(b); });
- x.domain(dimensionNames);
- dimensions.attr("transform", function(d) { return "translate(" + position(d) + ")"; });
- }
-
- function dragEnd(d, i) {
- delete this.parentNode.__origin__;
- delete dragging[d];
- d3.select(this.parentNode).attr("transform", "translate(" + x(d) + ")");
- foreground
- .attr("d", path);
- background
- .attr("d", path)
- .attr("visibility", null);
-
- }
-
- function position(d) {
- var v = dragging[d];
- return v == null ? x(d) : v;
- }
- });
-
- return chart;
- }
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width= _;}},
- height: {get: function(){return height;}, set: function(_){height= _;}},
- dimensionNames: {get: function() { return dimensionNames;}, set: function(_){dimensionNames= _;}},
- dimensionFormats : {get: function(){return dimensionFormats;}, set: function (_){dimensionFormats=_;}},
- lineTension: {get: function(){return lineTension;}, set: function(_){lineTension = _;}},
-
- // deprecated options
- dimensions: {get: function (){return dimensionNames;}, set: function(_){
- // deprecated after 1.8.1
- nv.deprecated('dimensions', 'use dimensionNames instead');
- dimensionNames = _;
- }},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- }}
- });
-
- nv.utils.initOptions(chart);
- return chart;
-};
-nv.models.pie = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 0, right: 0, bottom: 0, left: 0}
- , width = 500
- , height = 500
- , getX = function(d) { return d.x }
- , getY = function(d) { return d.y }
- , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one
- , container = null
- , color = nv.utils.defaultColor()
- , valueFormat = d3.format(',.2f')
- , showLabels = true
- , labelsOutside = false
- , labelType = "key"
- , labelThreshold = .02 //if slice percentage is under this, don't show label
- , donut = false
- , title = false
- , growOnHover = true
- , titleOffset = 0
- , labelSunbeamLayout = false
- , startAngle = false
- , padAngle = false
- , endAngle = false
- , cornerRadius = 0
- , donutRatio = 0.5
- , arcsRadius = []
- , dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout', 'elementMousemove', 'renderEnd')
- ;
-
- var arcs = [];
- var arcsOver = [];
-
- //============================================================
- // chart function
- //------------------------------------------------------------
-
- var renderWatch = nv.utils.renderWatch(dispatch);
-
- function chart(selection) {
- renderWatch.reset();
- selection.each(function(data) {
- var availableWidth = width - margin.left - margin.right
- , availableHeight = height - margin.top - margin.bottom
- , radius = Math.min(availableWidth, availableHeight) / 2
- , arcsRadiusOuter = []
- , arcsRadiusInner = []
- ;
-
- container = d3.select(this)
- if (arcsRadius.length === 0) {
- var outer = radius - radius / 5;
- var inner = donutRatio * radius;
- for (var i = 0; i < data[0].length; i++) {
- arcsRadiusOuter.push(outer);
- arcsRadiusInner.push(inner);
- }
- } else {
- arcsRadiusOuter = arcsRadius.map(function (d) { return (d.outer - d.outer / 5) * radius; });
- arcsRadiusInner = arcsRadius.map(function (d) { return (d.inner - d.inner / 5) * radius; });
- donutRatio = d3.min(arcsRadius.map(function (d) { return (d.inner - d.inner / 5); }));
- }
- nv.utils.initSVG(container);
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('.nv-wrap.nv-pie').data(data);
- var wrapEnter = wrap.enter().append('g').attr('class','nvd3 nv-wrap nv-pie nv-chart-' + id);
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
- var g_pie = gEnter.append('g').attr('class', 'nv-pie');
- gEnter.append('g').attr('class', 'nv-pieLabels');
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
- g.select('.nv-pie').attr('transform', 'translate(' + availableWidth / 2 + ',' + availableHeight / 2 + ')');
- g.select('.nv-pieLabels').attr('transform', 'translate(' + availableWidth / 2 + ',' + availableHeight / 2 + ')');
-
- //
- container.on('click', function(d,i) {
- dispatch.chartClick({
- data: d,
- index: i,
- pos: d3.event,
- id: id
- });
- });
-
- arcs = [];
- arcsOver = [];
- for (var i = 0; i < data[0].length; i++) {
-
- var arc = d3.svg.arc().outerRadius(arcsRadiusOuter[i]);
- var arcOver = d3.svg.arc().outerRadius(arcsRadiusOuter[i] + 5);
-
- if (startAngle !== false) {
- arc.startAngle(startAngle);
- arcOver.startAngle(startAngle);
- }
- if (endAngle !== false) {
- arc.endAngle(endAngle);
- arcOver.endAngle(endAngle);
- }
- if (donut) {
- arc.innerRadius(arcsRadiusInner[i]);
- arcOver.innerRadius(arcsRadiusInner[i]);
- }
-
- if (arc.cornerRadius && cornerRadius) {
- arc.cornerRadius(cornerRadius);
- arcOver.cornerRadius(cornerRadius);
- }
-
- arcs.push(arc);
- arcsOver.push(arcOver);
- }
-
- // Setup the Pie chart and choose the data element
- var pie = d3.layout.pie()
- .sort(null)
- .value(function(d) { return d.disabled ? 0 : getY(d) });
-
- // padAngle added in d3 3.5
- if (pie.padAngle && padAngle) {
- pie.padAngle(padAngle);
- }
-
- // if title is specified and donut, put it in the middle
- if (donut && title) {
- g_pie.append("text").attr('class', 'nv-pie-title');
-
- wrap.select('.nv-pie-title')
- .style("text-anchor", "middle")
- .text(function (d) {
- return title;
- })
- .style("font-size", (Math.min(availableWidth, availableHeight)) * donutRatio * 2 / (title.length + 2) + "px")
- .attr("dy", "0.35em") // trick to vertically center text
- .attr('transform', function(d, i) {
- return 'translate(0, '+ titleOffset + ')';
- });
- }
-
- var slices = wrap.select('.nv-pie').selectAll('.nv-slice').data(pie);
- var pieLabels = wrap.select('.nv-pieLabels').selectAll('.nv-label').data(pie);
-
- slices.exit().remove();
- pieLabels.exit().remove();
-
- var ae = slices.enter().append('g');
- ae.attr('class', 'nv-slice');
- ae.on('mouseover', function(d, i) {
- d3.select(this).classed('hover', true);
- if (growOnHover) {
- d3.select(this).select("path").transition()
- .duration(70)
- .attr("d", arcsOver[i]);
- }
- dispatch.elementMouseover({
- data: d.data,
- index: i,
- color: d3.select(this).style("fill")
- });
- });
- ae.on('mouseout', function(d, i) {
- d3.select(this).classed('hover', false);
- if (growOnHover) {
- d3.select(this).select("path").transition()
- .duration(50)
- .attr("d", arcs[i]);
- }
- dispatch.elementMouseout({data: d.data, index: i});
- });
- ae.on('mousemove', function(d, i) {
- dispatch.elementMousemove({data: d.data, index: i});
- });
- ae.on('click', function(d, i) {
- dispatch.elementClick({
- data: d.data,
- index: i,
- color: d3.select(this).style("fill")
- });
- });
- ae.on('dblclick', function(d, i) {
- dispatch.elementDblClick({
- data: d.data,
- index: i,
- color: d3.select(this).style("fill")
- });
- });
-
- slices.attr('fill', function(d,i) { return color(d.data, i); });
- slices.attr('stroke', function(d,i) { return color(d.data, i); });
-
- var paths = ae.append('path').each(function(d) {
- this._current = d;
- });
-
- slices.select('path')
- .transition()
- .attr('d', function (d, i) { return arcs[i](d); })
- .attrTween('d', arcTween);
-
- if (showLabels) {
- // This does the normal label
- var labelsArc = [];
- for (var i = 0; i < data[0].length; i++) {
- labelsArc.push(arcs[i]);
-
- if (labelsOutside) {
- if (donut) {
- labelsArc[i] = d3.svg.arc().outerRadius(arcs[i].outerRadius());
- if (startAngle !== false) labelsArc[i].startAngle(startAngle);
- if (endAngle !== false) labelsArc[i].endAngle(endAngle);
- }
- } else if (!donut) {
- labelsArc[i].innerRadius(0);
- }
- }
-
- pieLabels.enter().append("g").classed("nv-label",true).each(function(d,i) {
- var group = d3.select(this);
-
- group.attr('transform', function (d, i) {
- if (labelSunbeamLayout) {
- d.outerRadius = arcsRadiusOuter[i] + 10; // Set Outer Coordinate
- d.innerRadius = arcsRadiusOuter[i] + 15; // Set Inner Coordinate
- var rotateAngle = (d.startAngle + d.endAngle) / 2 * (180 / Math.PI);
- if ((d.startAngle + d.endAngle) / 2 < Math.PI) {
- rotateAngle -= 90;
- } else {
- rotateAngle += 90;
- }
- return 'translate(' + labelsArc[i].centroid(d) + ') rotate(' + rotateAngle + ')';
- } else {
- d.outerRadius = radius + 10; // Set Outer Coordinate
- d.innerRadius = radius + 15; // Set Inner Coordinate
- return 'translate(' + labelsArc[i].centroid(d) + ')'
- }
- });
-
- group.append('rect')
- .style('stroke', '#fff')
- .style('fill', '#fff')
- .attr("rx", 3)
- .attr("ry", 3);
-
- group.append('text')
- .style('text-anchor', labelSunbeamLayout ? ((d.startAngle + d.endAngle) / 2 < Math.PI ? 'start' : 'end') : 'middle') //center the text on it's origin or begin/end if orthogonal aligned
- .style('fill', '#000')
- });
-
- var labelLocationHash = {};
- var avgHeight = 14;
- var avgWidth = 140;
- var createHashKey = function(coordinates) {
- return Math.floor(coordinates[0]/avgWidth) * avgWidth + ',' + Math.floor(coordinates[1]/avgHeight) * avgHeight;
- };
-
- pieLabels.watchTransition(renderWatch, 'pie labels').attr('transform', function (d, i) {
- if (labelSunbeamLayout) {
- d.outerRadius = arcsRadiusOuter[i] + 10; // Set Outer Coordinate
- d.innerRadius = arcsRadiusOuter[i] + 15; // Set Inner Coordinate
- var rotateAngle = (d.startAngle + d.endAngle) / 2 * (180 / Math.PI);
- if ((d.startAngle + d.endAngle) / 2 < Math.PI) {
- rotateAngle -= 90;
- } else {
- rotateAngle += 90;
- }
- return 'translate(' + labelsArc[i].centroid(d) + ') rotate(' + rotateAngle + ')';
- } else {
- d.outerRadius = radius + 10; // Set Outer Coordinate
- d.innerRadius = radius + 15; // Set Inner Coordinate
-
- /*
- Overlapping pie labels are not good. What this attempts to do is, prevent overlapping.
- Each label location is hashed, and if a hash collision occurs, we assume an overlap.
- Adjust the label's y-position to remove the overlap.
- */
- var center = labelsArc[i].centroid(d);
- if (d.value) {
- var hashKey = createHashKey(center);
- if (labelLocationHash[hashKey]) {
- center[1] -= avgHeight;
- }
- labelLocationHash[createHashKey(center)] = true;
- }
- return 'translate(' + center + ')'
- }
- });
-
- pieLabels.select(".nv-label text")
- .style('text-anchor', function(d,i) {
- //center the text on it's origin or begin/end if orthogonal aligned
- return labelSunbeamLayout ? ((d.startAngle + d.endAngle) / 2 < Math.PI ? 'start' : 'end') : 'middle';
- })
- .text(function(d, i) {
- var percent = (d.endAngle - d.startAngle) / (2 * Math.PI);
- var label = '';
- if (!d.value || percent < labelThreshold) return '';
-
- if(typeof labelType === 'function') {
- label = labelType(d, i, {
- 'key': getX(d.data),
- 'value': getY(d.data),
- 'percent': valueFormat(percent)
- });
- } else {
- switch (labelType) {
- case 'key':
- label = getX(d.data);
- break;
- case 'value':
- label = valueFormat(getY(d.data));
- break;
- case 'percent':
- label = d3.format('%')(percent);
- break;
- }
- }
- return label;
- })
- ;
- }
-
-
- // Computes the angle of an arc, converting from radians to degrees.
- function angle(d) {
- var a = (d.startAngle + d.endAngle) * 90 / Math.PI - 90;
- return a > 90 ? a - 180 : a;
- }
-
- function arcTween(a, idx) {
- a.endAngle = isNaN(a.endAngle) ? 0 : a.endAngle;
- a.startAngle = isNaN(a.startAngle) ? 0 : a.startAngle;
- if (!donut) a.innerRadius = 0;
- var i = d3.interpolate(this._current, a);
- this._current = i(0);
- return function (t) {
- return arcs[idx](i(t));
- };
- }
- });
-
- renderWatch.renderEnd('pie immediate');
- return chart;
- }
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- arcsRadius: { get: function () { return arcsRadius; }, set: function (_) { arcsRadius = _; } },
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- showLabels: {get: function(){return showLabels;}, set: function(_){showLabels=_;}},
- title: {get: function(){return title;}, set: function(_){title=_;}},
- titleOffset: {get: function(){return titleOffset;}, set: function(_){titleOffset=_;}},
- labelThreshold: {get: function(){return labelThreshold;}, set: function(_){labelThreshold=_;}},
- valueFormat: {get: function(){return valueFormat;}, set: function(_){valueFormat=_;}},
- x: {get: function(){return getX;}, set: function(_){getX=_;}},
- id: {get: function(){return id;}, set: function(_){id=_;}},
- endAngle: {get: function(){return endAngle;}, set: function(_){endAngle=_;}},
- startAngle: {get: function(){return startAngle;}, set: function(_){startAngle=_;}},
- padAngle: {get: function(){return padAngle;}, set: function(_){padAngle=_;}},
- cornerRadius: {get: function(){return cornerRadius;}, set: function(_){cornerRadius=_;}},
- donutRatio: {get: function(){return donutRatio;}, set: function(_){donutRatio=_;}},
- labelsOutside: {get: function(){return labelsOutside;}, set: function(_){labelsOutside=_;}},
- labelSunbeamLayout: {get: function(){return labelSunbeamLayout;}, set: function(_){labelSunbeamLayout=_;}},
- donut: {get: function(){return donut;}, set: function(_){donut=_;}},
- growOnHover: {get: function(){return growOnHover;}, set: function(_){growOnHover=_;}},
-
- // depreciated after 1.7.1
- pieLabelsOutside: {get: function(){return labelsOutside;}, set: function(_){
- labelsOutside=_;
- nv.deprecated('pieLabelsOutside', 'use labelsOutside instead');
- }},
- // depreciated after 1.7.1
- donutLabelsOutside: {get: function(){return labelsOutside;}, set: function(_){
- labelsOutside=_;
- nv.deprecated('donutLabelsOutside', 'use labelsOutside instead');
- }},
- // deprecated after 1.7.1
- labelFormat: {get: function(){ return valueFormat;}, set: function(_) {
- valueFormat=_;
- nv.deprecated('labelFormat','use valueFormat instead');
- }},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = typeof _.top != 'undefined' ? _.top : margin.top;
- margin.right = typeof _.right != 'undefined' ? _.right : margin.right;
- margin.bottom = typeof _.bottom != 'undefined' ? _.bottom : margin.bottom;
- margin.left = typeof _.left != 'undefined' ? _.left : margin.left;
- }},
- y: {get: function(){return getY;}, set: function(_){
- getY=d3.functor(_);
- }},
- color: {get: function(){return color;}, set: function(_){
- color=nv.utils.getColor(_);
- }},
- labelType: {get: function(){return labelType;}, set: function(_){
- labelType= _ || 'key';
- }}
- });
-
- nv.utils.initOptions(chart);
- return chart;
-};
-nv.models.pieChart = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var pie = nv.models.pie();
- var legend = nv.models.legend();
- var tooltip = nv.models.tooltip();
-
- var margin = {top: 30, right: 20, bottom: 20, left: 20}
- , width = null
- , height = null
- , showLegend = true
- , legendPosition = "top"
- , color = nv.utils.defaultColor()
- , state = nv.utils.state()
- , defaultState = null
- , noData = null
- , duration = 250
- , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState','renderEnd')
- ;
-
- tooltip
- .headerEnabled(false)
- .duration(0)
- .valueFormatter(function(d, i) {
- return pie.valueFormat()(d, i);
- });
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var renderWatch = nv.utils.renderWatch(dispatch);
-
- var stateGetter = function(data) {
- return function(){
- return {
- active: data.map(function(d) { return !d.disabled })
- };
- }
- };
-
- var stateSetter = function(data) {
- return function(state) {
- if (state.active !== undefined) {
- data.forEach(function (series, i) {
- series.disabled = !state.active[i];
- });
- }
- }
- };
-
- //============================================================
- // Chart function
- //------------------------------------------------------------
-
- function chart(selection) {
- renderWatch.reset();
- renderWatch.models(pie);
-
- selection.each(function(data) {
- var container = d3.select(this);
- nv.utils.initSVG(container);
-
- var that = this;
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- chart.update = function() { container.transition().call(chart); };
- chart.container = this;
-
- state.setter(stateSetter(data), chart.update)
- .getter(stateGetter(data))
- .update();
-
- //set state.disabled
- state.disabled = data.map(function(d) { return !!d.disabled });
-
- if (!defaultState) {
- var key;
- defaultState = {};
- for (key in state) {
- if (state[key] instanceof Array)
- defaultState[key] = state[key].slice(0);
- else
- defaultState[key] = state[key];
- }
- }
-
- // Display No Data message if there's nothing to show.
- if (!data || !data.length) {
- nv.utils.noData(chart, container);
- return chart;
- } else {
- container.selectAll('.nv-noData').remove();
- }
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-pieChart').data([data]);
- var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-pieChart').append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-pieWrap');
- gEnter.append('g').attr('class', 'nv-legendWrap');
-
- // Legend
- if (showLegend) {
- if (legendPosition === "top") {
- legend.width( availableWidth ).key(pie.x());
-
- wrap.select('.nv-legendWrap')
- .datum(data)
- .call(legend);
-
- if ( margin.top != legend.height()) {
- margin.top = legend.height();
- availableHeight = nv.utils.availableHeight(height, container, margin);
- }
-
- wrap.select('.nv-legendWrap')
- .attr('transform', 'translate(0,' + (-margin.top) +')');
- } else if (legendPosition === "right") {
- var legendWidth = nv.models.legend().width();
- if (availableWidth / 2 < legendWidth) {
- legendWidth = (availableWidth / 2)
- }
- legend.height(availableHeight).key(pie.x());
- legend.width(legendWidth);
- availableWidth -= legend.width();
-
- wrap.select('.nv-legendWrap')
- .datum(data)
- .call(legend)
- .attr('transform', 'translate(' + (availableWidth) +',0)');
- }
- }
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- // Main Chart Component(s)
- pie.width(availableWidth).height(availableHeight);
- var pieWrap = g.select('.nv-pieWrap').datum([data]);
- d3.transition(pieWrap).call(pie);
-
- //============================================================
- // Event Handling/Dispatching (in chart's scope)
- //------------------------------------------------------------
-
- legend.dispatch.on('stateChange', function(newState) {
- for (var key in newState) {
- state[key] = newState[key];
- }
- dispatch.stateChange(state);
- chart.update();
- });
-
- // Update chart from a state object passed to event handler
- dispatch.on('changeState', function(e) {
- if (typeof e.disabled !== 'undefined') {
- data.forEach(function(series,i) {
- series.disabled = e.disabled[i];
- });
- state.disabled = e.disabled;
- }
- chart.update();
- });
- });
-
- renderWatch.renderEnd('pieChart immediate');
- return chart;
- }
-
- //============================================================
- // Event Handling/Dispatching (out of chart's scope)
- //------------------------------------------------------------
-
- pie.dispatch.on('elementMouseover.tooltip', function(evt) {
- evt['series'] = {
- key: chart.x()(evt.data),
- value: chart.y()(evt.data),
- color: evt.color
- };
- tooltip.data(evt).hidden(false);
- });
-
- pie.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true);
- });
-
- pie.dispatch.on('elementMousemove.tooltip', function(evt) {
- tooltip.position({top: d3.event.pageY, left: d3.event.pageX})();
- });
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- // expose chart's sub-components
- chart.legend = legend;
- chart.dispatch = dispatch;
- chart.pie = pie;
- chart.tooltip = tooltip;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- // use Object get/set functionality to map between vars and chart functions
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- noData: {get: function(){return noData;}, set: function(_){noData=_;}},
- showLegend: {get: function(){return showLegend;}, set: function(_){showLegend=_;}},
- legendPosition: {get: function(){return legendPosition;}, set: function(_){legendPosition=_;}},
- defaultState: {get: function(){return defaultState;}, set: function(_){defaultState=_;}},
-
- // deprecated options
- tooltips: {get: function(){return tooltip.enabled();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltips', 'use chart.tooltip.enabled() instead');
- tooltip.enabled(!!_);
- }},
- tooltipContent: {get: function(){return tooltip.contentGenerator();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltipContent', 'use chart.tooltip.contentGenerator() instead');
- tooltip.contentGenerator(_);
- }},
-
- // options that require extra logic in the setter
- color: {get: function(){return color;}, set: function(_){
- color = _;
- legend.color(color);
- pie.color(color);
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration = _;
- renderWatch.reset(duration);
- }},
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }}
- });
- nv.utils.inheritOptions(chart, pie);
- nv.utils.initOptions(chart);
- return chart;
-};
-
-nv.models.scatter = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 0, right: 0, bottom: 0, left: 0}
- , width = null
- , height = null
- , color = nv.utils.defaultColor() // chooses color
- , id = Math.floor(Math.random() * 100000) //Create semi-unique ID incase user doesn't select one
- , container = null
- , x = d3.scale.linear()
- , y = d3.scale.linear()
- , z = d3.scale.linear() //linear because d3.svg.shape.size is treated as area
- , getX = function(d) { return d.x } // accessor to get the x value
- , getY = function(d) { return d.y } // accessor to get the y value
- , getSize = function(d) { return d.size || 1} // accessor to get the point size
- , getShape = function(d) { return d.shape || 'circle' } // accessor to get point shape
- , forceX = [] // List of numbers to Force into the X scale (ie. 0, or a max / min, etc.)
- , forceY = [] // List of numbers to Force into the Y scale
- , forceSize = [] // List of numbers to Force into the Size scale
- , interactive = true // If true, plots a voronoi overlay for advanced point intersection
- , pointActive = function(d) { return !d.notActive } // any points that return false will be filtered out
- , padData = false // If true, adds half a data points width to front and back, for lining up a line chart with a bar chart
- , padDataOuter = .1 //outerPadding to imitate ordinal scale outer padding
- , clipEdge = false // if true, masks points within x and y scale
- , clipVoronoi = true // if true, masks each point with a circle... can turn off to slightly increase performance
- , showVoronoi = false // display the voronoi areas
- , clipRadius = function() { return 25 } // function to get the radius for voronoi point clips
- , xDomain = null // Override x domain (skips the calculation from data)
- , yDomain = null // Override y domain
- , xRange = null // Override x range
- , yRange = null // Override y range
- , sizeDomain = null // Override point size domain
- , sizeRange = null
- , singlePoint = false
- , dispatch = d3.dispatch('elementClick', 'elementDblClick', 'elementMouseover', 'elementMouseout', 'renderEnd')
- , useVoronoi = true
- , duration = 250
- ;
-
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var x0, y0, z0 // used to store previous scales
- , timeoutID
- , needsUpdate = false // Flag for when the points are visually updating, but the interactive layer is behind, to disable tooltips
- , renderWatch = nv.utils.renderWatch(dispatch, duration)
- , _sizeRange_def = [16, 256]
- ;
-
- function chart(selection) {
- renderWatch.reset();
- selection.each(function(data) {
- container = d3.select(this);
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- nv.utils.initSVG(container);
-
- //add series index to each data point for reference
- data.forEach(function(series, i) {
- series.values.forEach(function(point) {
- point.series = i;
- });
- });
-
- // Setup Scales
- // remap and flatten the data for use in calculating the scales' domains
- var seriesData = (xDomain && yDomain && sizeDomain) ? [] : // if we know xDomain and yDomain and sizeDomain, no need to calculate.... if Size is constant remember to set sizeDomain to speed up performance
- d3.merge(
- data.map(function(d) {
- return d.values.map(function(d,i) {
- return { x: getX(d,i), y: getY(d,i), size: getSize(d,i) }
- })
- })
- );
-
- x .domain(xDomain || d3.extent(seriesData.map(function(d) { return d.x; }).concat(forceX)))
-
- if (padData && data[0])
- x.range(xRange || [(availableWidth * padDataOuter + availableWidth) / (2 *data[0].values.length), availableWidth - availableWidth * (1 + padDataOuter) / (2 * data[0].values.length) ]);
- //x.range([availableWidth * .5 / data[0].values.length, availableWidth * (data[0].values.length - .5) / data[0].values.length ]);
- else
- x.range(xRange || [0, availableWidth]);
-
- y .domain(yDomain || d3.extent(seriesData.map(function(d) { return d.y }).concat(forceY)))
- .range(yRange || [availableHeight, 0]);
-
- z .domain(sizeDomain || d3.extent(seriesData.map(function(d) { return d.size }).concat(forceSize)))
- .range(sizeRange || _sizeRange_def);
-
- // If scale's domain don't have a range, slightly adjust to make one... so a chart can show a single data point
- singlePoint = x.domain()[0] === x.domain()[1] || y.domain()[0] === y.domain()[1];
-
- if (x.domain()[0] === x.domain()[1])
- x.domain()[0] ?
- x.domain([x.domain()[0] - x.domain()[0] * 0.01, x.domain()[1] + x.domain()[1] * 0.01])
- : x.domain([-1,1]);
-
- if (y.domain()[0] === y.domain()[1])
- y.domain()[0] ?
- y.domain([y.domain()[0] - y.domain()[0] * 0.01, y.domain()[1] + y.domain()[1] * 0.01])
- : y.domain([-1,1]);
-
- if ( isNaN(x.domain()[0])) {
- x.domain([-1,1]);
- }
-
- if ( isNaN(y.domain()[0])) {
- y.domain([-1,1]);
- }
-
- x0 = x0 || x;
- y0 = y0 || y;
- z0 = z0 || z;
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-scatter').data([data]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-scatter nv-chart-' + id);
- var defsEnter = wrapEnter.append('defs');
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- wrap.classed('nv-single-point', singlePoint);
- gEnter.append('g').attr('class', 'nv-groups');
- gEnter.append('g').attr('class', 'nv-point-paths');
- wrapEnter.append('g').attr('class', 'nv-point-clips');
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- defsEnter.append('clipPath')
- .attr('id', 'nv-edge-clip-' + id)
- .append('rect');
-
- wrap.select('#nv-edge-clip-' + id + ' rect')
- .attr('width', availableWidth)
- .attr('height', (availableHeight > 0) ? availableHeight : 0);
-
- g.attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + id + ')' : '');
-
- function updateInteractiveLayer() {
- // Always clear needs-update flag regardless of whether or not
- // we will actually do anything (avoids needless invocations).
- needsUpdate = false;
-
- if (!interactive) return false;
-
- // inject series and point index for reference into voronoi
- if (useVoronoi === true) {
- var vertices = d3.merge(data.map(function(group, groupIndex) {
- return group.values
- .map(function(point, pointIndex) {
- // *Adding noise to make duplicates very unlikely
- // *Injecting series and point index for reference
- /* *Adding a 'jitter' to the points, because there's an issue in d3.geom.voronoi.
- */
- var pX = getX(point,pointIndex);
- var pY = getY(point,pointIndex);
-
- return [x(pX)+ Math.random() * 1e-4,
- y(pY)+ Math.random() * 1e-4,
- groupIndex,
- pointIndex, point]; //temp hack to add noise until I think of a better way so there are no duplicates
- })
- .filter(function(pointArray, pointIndex) {
- return pointActive(pointArray[4], pointIndex); // Issue #237.. move filter to after map, so pointIndex is correct!
- })
- })
- );
-
- if (vertices.length == 0) return false; // No active points, we're done
- if (vertices.length < 3) {
- // Issue #283 - Adding 2 dummy points to the voronoi b/c voronoi requires min 3 points to work
- vertices.push([x.range()[0] - 20, y.range()[0] - 20, null, null]);
- vertices.push([x.range()[1] + 20, y.range()[1] + 20, null, null]);
- vertices.push([x.range()[0] - 20, y.range()[0] + 20, null, null]);
- vertices.push([x.range()[1] + 20, y.range()[1] - 20, null, null]);
- }
-
- // keep voronoi sections from going more than 10 outside of graph
- // to avoid overlap with other things like legend etc
- var bounds = d3.geom.polygon([
- [-10,-10],
- [-10,height + 10],
- [width + 10,height + 10],
- [width + 10,-10]
- ]);
-
- var voronoi = d3.geom.voronoi(vertices).map(function(d, i) {
- return {
- 'data': bounds.clip(d),
- 'series': vertices[i][2],
- 'point': vertices[i][3]
- }
- });
-
- // nuke all voronoi paths on reload and recreate them
- wrap.select('.nv-point-paths').selectAll('path').remove();
- var pointPaths = wrap.select('.nv-point-paths').selectAll('path').data(voronoi);
- var vPointPaths = pointPaths
- .enter().append("svg:path")
- .attr("d", function(d) {
- if (!d || !d.data || d.data.length === 0)
- return 'M 0 0';
- else
- return "M" + d.data.join(",") + "Z";
- })
- .attr("id", function(d,i) {
- return "nv-path-"+i; })
- .attr("clip-path", function(d,i) { return "url(#nv-clip-"+i+")"; })
- ;
-
- // good for debugging point hover issues
- if (showVoronoi) {
- vPointPaths.style("fill", d3.rgb(230, 230, 230))
- .style('fill-opacity', 0.4)
- .style('stroke-opacity', 1)
- .style("stroke", d3.rgb(200,200,200));
- }
-
- if (clipVoronoi) {
- // voronoi sections are already set to clip,
- // just create the circles with the IDs they expect
- wrap.select('.nv-point-clips').selectAll('clipPath').remove();
- wrap.select('.nv-point-clips').selectAll("clipPath")
- .data(vertices)
- .enter().append("svg:clipPath")
- .attr("id", function(d, i) { return "nv-clip-"+i;})
- .append("svg:circle")
- .attr('cx', function(d) { return d[0]; })
- .attr('cy', function(d) { return d[1]; })
- .attr('r', clipRadius);
- }
-
- var mouseEventCallback = function(d, mDispatch) {
- if (needsUpdate) return 0;
- var series = data[d.series];
- if (series === undefined) return;
- var point = series.values[d.point];
- point['color'] = color(series, d.series);
-
- // standardize attributes for tooltip.
- point['x'] = getX(point);
- point['y'] = getY(point);
-
- // can't just get box of event node since it's actually a voronoi polygon
- var box = container.node().getBoundingClientRect();
- var scrollTop = window.pageYOffset || document.documentElement.scrollTop;
- var scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;
-
- var pos = {
- left: x(getX(point, d.point)) + box.left + scrollLeft + margin.left + 10,
- top: y(getY(point, d.point)) + box.top + scrollTop + margin.top + 10
- };
-
- mDispatch({
- point: point,
- series: series,
- pos: pos,
- seriesIndex: d.series,
- pointIndex: d.point
- });
- };
-
- pointPaths
- .on('click', function(d) {
- mouseEventCallback(d, dispatch.elementClick);
- })
- .on('dblclick', function(d) {
- mouseEventCallback(d, dispatch.elementDblClick);
- })
- .on('mouseover', function(d) {
- mouseEventCallback(d, dispatch.elementMouseover);
- })
- .on('mouseout', function(d, i) {
- mouseEventCallback(d, dispatch.elementMouseout);
- });
-
- } else {
- // add event handlers to points instead voronoi paths
- wrap.select('.nv-groups').selectAll('.nv-group')
- .selectAll('.nv-point')
- //.data(dataWithPoints)
- //.style('pointer-events', 'auto') // recativate events, disabled by css
- .on('click', function(d,i) {
- //nv.log('test', d, i);
- if (needsUpdate || !data[d.series]) return 0; //check if this is a dummy point
- var series = data[d.series],
- point = series.values[i];
-
- dispatch.elementClick({
- point: point,
- series: series,
- pos: [x(getX(point, i)) + margin.left, y(getY(point, i)) + margin.top],
- seriesIndex: d.series,
- pointIndex: i
- });
- })
- .on('dblclick', function(d,i) {
- if (needsUpdate || !data[d.series]) return 0; //check if this is a dummy point
- var series = data[d.series],
- point = series.values[i];
-
- dispatch.elementDblClick({
- point: point,
- series: series,
- pos: [x(getX(point, i)) + margin.left, y(getY(point, i)) + margin.top],
- seriesIndex: d.series,
- pointIndex: i
- });
- })
- .on('mouseover', function(d,i) {
- if (needsUpdate || !data[d.series]) return 0; //check if this is a dummy point
- var series = data[d.series],
- point = series.values[i];
-
- dispatch.elementMouseover({
- point: point,
- series: series,
- pos: [x(getX(point, i)) + margin.left, y(getY(point, i)) + margin.top],
- seriesIndex: d.series,
- pointIndex: i,
- color: color(d, i)
- });
- })
- .on('mouseout', function(d,i) {
- if (needsUpdate || !data[d.series]) return 0; //check if this is a dummy point
- var series = data[d.series],
- point = series.values[i];
-
- dispatch.elementMouseout({
- point: point,
- series: series,
- seriesIndex: d.series,
- pointIndex: i,
- color: color(d, i)
- });
- });
- }
- }
-
- needsUpdate = true;
- var groups = wrap.select('.nv-groups').selectAll('.nv-group')
- .data(function(d) { return d }, function(d) { return d.key });
- groups.enter().append('g')
- .style('stroke-opacity', 1e-6)
- .style('fill-opacity', 1e-6);
- groups.exit()
- .remove();
- groups
- .attr('class', function(d,i) { return 'nv-group nv-series-' + i })
- .classed('hover', function(d) { return d.hover });
- groups.watchTransition(renderWatch, 'scatter: groups')
- .style('fill', function(d,i) { return color(d, i) })
- .style('stroke', function(d,i) { return color(d, i) })
- .style('stroke-opacity', 1)
- .style('fill-opacity', .5);
-
- // create the points, maintaining their IDs from the original data set
- var points = groups.selectAll('path.nv-point')
- .data(function(d) {
- return d.values.map(
- function (point, pointIndex) {
- return [point, pointIndex]
- }).filter(
- function(pointArray, pointIndex) {
- return pointActive(pointArray[0], pointIndex)
- })
- });
- points.enter().append('path')
- .style('fill', function (d) { return d.color })
- .style('stroke', function (d) { return d.color })
- .attr('transform', function(d) {
- return 'translate(' + x0(getX(d[0],d[1])) + ',' + y0(getY(d[0],d[1])) + ')'
- })
- .attr('d',
- nv.utils.symbol()
- .type(function(d) { return getShape(d[0]); })
- .size(function(d) { return z(getSize(d[0],d[1])) })
- );
- points.exit().remove();
- groups.exit().selectAll('path.nv-point')
- .watchTransition(renderWatch, 'scatter exit')
- .attr('transform', function(d) {
- return 'translate(' + x(getX(d[0],d[1])) + ',' + y(getY(d[0],d[1])) + ')'
- })
- .remove();
- points.each(function(d) {
- d3.select(this)
- .classed('nv-point', true)
- .classed('nv-point-' + d[1], true)
- .classed('nv-noninteractive', !interactive)
- .classed('hover',false)
- ;
- });
- points
- .watchTransition(renderWatch, 'scatter points')
- .attr('transform', function(d) {
- //nv.log(d, getX(d[0],d[1]), x(getX(d[0],d[1])));
- return 'translate(' + x(getX(d[0],d[1])) + ',' + y(getY(d[0],d[1])) + ')'
- })
- .attr('d',
- nv.utils.symbol()
- .type(function(d) { return getShape(d[0]); })
- .size(function(d) { return z(getSize(d[0],d[1])) })
- );
-
- // Delay updating the invisible interactive layer for smoother animation
- clearTimeout(timeoutID); // stop repeat calls to updateInteractiveLayer
- timeoutID = setTimeout(updateInteractiveLayer, 300);
- //updateInteractiveLayer();
-
- //store old scales for use in transitions on update
- x0 = x.copy();
- y0 = y.copy();
- z0 = z.copy();
-
- });
- renderWatch.renderEnd('scatter immediate');
- return chart;
- }
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- // utility function calls provided by this chart
- chart._calls = new function() {
- this.clearHighlights = function () {
- nv.dom.write(function() {
- container.selectAll(".nv-point.hover").classed("hover", false);
- });
- return null;
- };
- this.highlightPoint = function (seriesIndex, pointIndex, isHoverOver) {
- nv.dom.write(function() {
- container.select(" .nv-series-" + seriesIndex + " .nv-point-" + pointIndex)
- .classed("hover", isHoverOver);
- });
- };
- };
-
- // trigger calls from events too
- dispatch.on('elementMouseover.point', function(d) {
- if (interactive) chart._calls.highlightPoint(d.seriesIndex,d.pointIndex,true);
- });
-
- dispatch.on('elementMouseout.point', function(d) {
- if (interactive) chart._calls.highlightPoint(d.seriesIndex,d.pointIndex,false);
- });
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- xScale: {get: function(){return x;}, set: function(_){x=_;}},
- yScale: {get: function(){return y;}, set: function(_){y=_;}},
- pointScale: {get: function(){return z;}, set: function(_){z=_;}},
- xDomain: {get: function(){return xDomain;}, set: function(_){xDomain=_;}},
- yDomain: {get: function(){return yDomain;}, set: function(_){yDomain=_;}},
- pointDomain: {get: function(){return sizeDomain;}, set: function(_){sizeDomain=_;}},
- xRange: {get: function(){return xRange;}, set: function(_){xRange=_;}},
- yRange: {get: function(){return yRange;}, set: function(_){yRange=_;}},
- pointRange: {get: function(){return sizeRange;}, set: function(_){sizeRange=_;}},
- forceX: {get: function(){return forceX;}, set: function(_){forceX=_;}},
- forceY: {get: function(){return forceY;}, set: function(_){forceY=_;}},
- forcePoint: {get: function(){return forceSize;}, set: function(_){forceSize=_;}},
- interactive: {get: function(){return interactive;}, set: function(_){interactive=_;}},
- pointActive: {get: function(){return pointActive;}, set: function(_){pointActive=_;}},
- padDataOuter: {get: function(){return padDataOuter;}, set: function(_){padDataOuter=_;}},
- padData: {get: function(){return padData;}, set: function(_){padData=_;}},
- clipEdge: {get: function(){return clipEdge;}, set: function(_){clipEdge=_;}},
- clipVoronoi: {get: function(){return clipVoronoi;}, set: function(_){clipVoronoi=_;}},
- clipRadius: {get: function(){return clipRadius;}, set: function(_){clipRadius=_;}},
- showVoronoi: {get: function(){return showVoronoi;}, set: function(_){showVoronoi=_;}},
- id: {get: function(){return id;}, set: function(_){id=_;}},
-
-
- // simple functor options
- x: {get: function(){return getX;}, set: function(_){getX = d3.functor(_);}},
- y: {get: function(){return getY;}, set: function(_){getY = d3.functor(_);}},
- pointSize: {get: function(){return getSize;}, set: function(_){getSize = d3.functor(_);}},
- pointShape: {get: function(){return getShape;}, set: function(_){getShape = d3.functor(_);}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration = _;
- renderWatch.reset(duration);
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- }},
- useVoronoi: {get: function(){return useVoronoi;}, set: function(_){
- useVoronoi = _;
- if (useVoronoi === false) {
- clipVoronoi = false;
- }
- }}
- });
-
- nv.utils.initOptions(chart);
- return chart;
-};
-
-nv.models.scatterChart = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var scatter = nv.models.scatter()
- , xAxis = nv.models.axis()
- , yAxis = nv.models.axis()
- , legend = nv.models.legend()
- , distX = nv.models.distribution()
- , distY = nv.models.distribution()
- , tooltip = nv.models.tooltip()
- ;
-
- var margin = {top: 30, right: 20, bottom: 50, left: 75}
- , width = null
- , height = null
- , container = null
- , color = nv.utils.defaultColor()
- , x = scatter.xScale()
- , y = scatter.yScale()
- , showDistX = false
- , showDistY = false
- , showLegend = true
- , showXAxis = true
- , showYAxis = true
- , rightAlignYAxis = false
- , state = nv.utils.state()
- , defaultState = null
- , dispatch = d3.dispatch('stateChange', 'changeState', 'renderEnd')
- , noData = null
- , duration = 250
- ;
-
- scatter.xScale(x).yScale(y);
- xAxis.orient('bottom').tickPadding(10);
- yAxis
- .orient((rightAlignYAxis) ? 'right' : 'left')
- .tickPadding(10)
- ;
- distX.axis('x');
- distY.axis('y');
- tooltip
- .headerFormatter(function(d, i) {
- return xAxis.tickFormat()(d, i);
- })
- .valueFormatter(function(d, i) {
- return yAxis.tickFormat()(d, i);
- });
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var x0, y0
- , renderWatch = nv.utils.renderWatch(dispatch, duration);
-
- var stateGetter = function(data) {
- return function(){
- return {
- active: data.map(function(d) { return !d.disabled })
- };
- }
- };
-
- var stateSetter = function(data) {
- return function(state) {
- if (state.active !== undefined)
- data.forEach(function(series,i) {
- series.disabled = !state.active[i];
- });
- }
- };
-
- function chart(selection) {
- renderWatch.reset();
- renderWatch.models(scatter);
- if (showXAxis) renderWatch.models(xAxis);
- if (showYAxis) renderWatch.models(yAxis);
- if (showDistX) renderWatch.models(distX);
- if (showDistY) renderWatch.models(distY);
-
- selection.each(function(data) {
- var that = this;
-
- container = d3.select(this);
- nv.utils.initSVG(container);
-
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- chart.update = function() {
- if (duration === 0)
- container.call(chart);
- else
- container.transition().duration(duration).call(chart);
- };
- chart.container = this;
-
- state
- .setter(stateSetter(data), chart.update)
- .getter(stateGetter(data))
- .update();
-
- // DEPRECATED set state.disableddisabled
- state.disabled = data.map(function(d) { return !!d.disabled });
-
- if (!defaultState) {
- var key;
- defaultState = {};
- for (key in state) {
- if (state[key] instanceof Array)
- defaultState[key] = state[key].slice(0);
- else
- defaultState[key] = state[key];
- }
- }
-
- // Display noData message if there's nothing to show.
- if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
- nv.utils.noData(chart, container);
- renderWatch.renderEnd('scatter immediate');
- return chart;
- } else {
- container.selectAll('.nv-noData').remove();
- }
-
- // Setup Scales
- x = scatter.xScale();
- y = scatter.yScale();
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-scatterChart').data([data]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-scatterChart nv-chart-' + scatter.id());
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- // background for pointer events
- gEnter.append('rect').attr('class', 'nvd3 nv-background').style("pointer-events","none");
-
- gEnter.append('g').attr('class', 'nv-x nv-axis');
- gEnter.append('g').attr('class', 'nv-y nv-axis');
- gEnter.append('g').attr('class', 'nv-scatterWrap');
- gEnter.append('g').attr('class', 'nv-regressionLinesWrap');
- gEnter.append('g').attr('class', 'nv-distWrap');
- gEnter.append('g').attr('class', 'nv-legendWrap');
-
- if (rightAlignYAxis) {
- g.select(".nv-y.nv-axis")
- .attr("transform", "translate(" + availableWidth + ",0)");
- }
-
- // Legend
- if (showLegend) {
- var legendWidth = availableWidth;
- legend.width(legendWidth);
-
- wrap.select('.nv-legendWrap')
- .datum(data)
- .call(legend);
-
- if ( margin.top != legend.height()) {
- margin.top = legend.height();
- availableHeight = nv.utils.availableHeight(height, container, margin);
- }
-
- wrap.select('.nv-legendWrap')
- .attr('transform', 'translate(0' + ',' + (-margin.top) +')');
- }
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- // Main Chart Component(s)
- scatter
- .width(availableWidth)
- .height(availableHeight)
- .color(data.map(function(d,i) {
- return d.color || color(d, i);
- }).filter(function(d,i) { return !data[i].disabled }));
-
- wrap.select('.nv-scatterWrap')
- .datum(data.filter(function(d) { return !d.disabled }))
- .call(scatter);
-
-
- wrap.select('.nv-regressionLinesWrap')
- .attr('clip-path', 'url(#nv-edge-clip-' + scatter.id() + ')');
-
- var regWrap = wrap.select('.nv-regressionLinesWrap').selectAll('.nv-regLines')
- .data(function (d) {
- return d;
- });
-
- regWrap.enter().append('g').attr('class', 'nv-regLines');
-
- var regLine = regWrap.selectAll('.nv-regLine')
- .data(function (d) {
- return [d]
- });
-
- regLine.enter()
- .append('line').attr('class', 'nv-regLine')
- .style('stroke-opacity', 0);
-
- // don't add lines unless we have slope and intercept to use
- regLine.filter(function(d) {
- return d.intercept && d.slope;
- })
- .watchTransition(renderWatch, 'scatterPlusLineChart: regline')
- .attr('x1', x.range()[0])
- .attr('x2', x.range()[1])
- .attr('y1', function (d, i) {
- return y(x.domain()[0] * d.slope + d.intercept)
- })
- .attr('y2', function (d, i) {
- return y(x.domain()[1] * d.slope + d.intercept)
- })
- .style('stroke', function (d, i, j) {
- return color(d, j)
- })
- .style('stroke-opacity', function (d, i) {
- return (d.disabled || typeof d.slope === 'undefined' || typeof d.intercept === 'undefined') ? 0 : 1
- });
-
- // Setup Axes
- if (showXAxis) {
- xAxis
- .scale(x)
- ._ticks( nv.utils.calcTicksX(availableWidth/100, data) )
- .tickSize( -availableHeight , 0);
-
- g.select('.nv-x.nv-axis')
- .attr('transform', 'translate(0,' + y.range()[0] + ')')
- .call(xAxis);
- }
-
- if (showYAxis) {
- yAxis
- .scale(y)
- ._ticks( nv.utils.calcTicksY(availableHeight/36, data) )
- .tickSize( -availableWidth, 0);
-
- g.select('.nv-y.nv-axis')
- .call(yAxis);
- }
-
-
- if (showDistX) {
- distX
- .getData(scatter.x())
- .scale(x)
- .width(availableWidth)
- .color(data.map(function(d,i) {
- return d.color || color(d, i);
- }).filter(function(d,i) { return !data[i].disabled }));
- gEnter.select('.nv-distWrap').append('g')
- .attr('class', 'nv-distributionX');
- g.select('.nv-distributionX')
- .attr('transform', 'translate(0,' + y.range()[0] + ')')
- .datum(data.filter(function(d) { return !d.disabled }))
- .call(distX);
- }
-
- if (showDistY) {
- distY
- .getData(scatter.y())
- .scale(y)
- .width(availableHeight)
- .color(data.map(function(d,i) {
- return d.color || color(d, i);
- }).filter(function(d,i) { return !data[i].disabled }));
- gEnter.select('.nv-distWrap').append('g')
- .attr('class', 'nv-distributionY');
- g.select('.nv-distributionY')
- .attr('transform', 'translate(' + (rightAlignYAxis ? availableWidth : -distY.size() ) + ',0)')
- .datum(data.filter(function(d) { return !d.disabled }))
- .call(distY);
- }
-
- //============================================================
- // Event Handling/Dispatching (in chart's scope)
- //------------------------------------------------------------
-
- legend.dispatch.on('stateChange', function(newState) {
- for (var key in newState)
- state[key] = newState[key];
- dispatch.stateChange(state);
- chart.update();
- });
-
- // Update chart from a state object passed to event handler
- dispatch.on('changeState', function(e) {
- if (typeof e.disabled !== 'undefined') {
- data.forEach(function(series,i) {
- series.disabled = e.disabled[i];
- });
- state.disabled = e.disabled;
- }
- chart.update();
- });
-
- // mouseover needs availableHeight so we just keep scatter mouse events inside the chart block
- scatter.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true);
- container.select('.nv-chart-' + scatter.id() + ' .nv-series-' + evt.seriesIndex + ' .nv-distx-' + evt.pointIndex)
- .attr('y1', 0);
- container.select('.nv-chart-' + scatter.id() + ' .nv-series-' + evt.seriesIndex + ' .nv-disty-' + evt.pointIndex)
- .attr('x2', distY.size());
- });
-
- scatter.dispatch.on('elementMouseover.tooltip', function(evt) {
- container.select('.nv-series-' + evt.seriesIndex + ' .nv-distx-' + evt.pointIndex)
- .attr('y1', evt.pos.top - availableHeight - margin.top);
- container.select('.nv-series-' + evt.seriesIndex + ' .nv-disty-' + evt.pointIndex)
- .attr('x2', evt.pos.left + distX.size() - margin.left);
- tooltip.position(evt.pos).data(evt).hidden(false);
- });
-
- //store old scales for use in transitions on update
- x0 = x.copy();
- y0 = y.copy();
-
- });
-
- renderWatch.renderEnd('scatter with line immediate');
- return chart;
- }
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- // expose chart's sub-components
- chart.dispatch = dispatch;
- chart.scatter = scatter;
- chart.legend = legend;
- chart.xAxis = xAxis;
- chart.yAxis = yAxis;
- chart.distX = distX;
- chart.distY = distY;
- chart.tooltip = tooltip;
-
- chart.options = nv.utils.optionsFunc.bind(chart);
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- container: {get: function(){return container;}, set: function(_){container=_;}},
- showDistX: {get: function(){return showDistX;}, set: function(_){showDistX=_;}},
- showDistY: {get: function(){return showDistY;}, set: function(_){showDistY=_;}},
- showLegend: {get: function(){return showLegend;}, set: function(_){showLegend=_;}},
- showXAxis: {get: function(){return showXAxis;}, set: function(_){showXAxis=_;}},
- showYAxis: {get: function(){return showYAxis;}, set: function(_){showYAxis=_;}},
- defaultState: {get: function(){return defaultState;}, set: function(_){defaultState=_;}},
- noData: {get: function(){return noData;}, set: function(_){noData=_;}},
- duration: {get: function(){return duration;}, set: function(_){duration=_;}},
-
- // deprecated options
- tooltips: {get: function(){return tooltip.enabled();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltips', 'use chart.tooltip.enabled() instead');
- tooltip.enabled(!!_);
- }},
- tooltipContent: {get: function(){return tooltip.contentGenerator();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltipContent', 'use chart.tooltip.contentGenerator() instead');
- tooltip.contentGenerator(_);
- }},
- tooltipXContent: {get: function(){return tooltip.contentGenerator();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltipContent', 'This option is removed, put values into main tooltip.');
- }},
- tooltipYContent: {get: function(){return tooltip.contentGenerator();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltipContent', 'This option is removed, put values into main tooltip.');
- }},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- rightAlignYAxis: {get: function(){return rightAlignYAxis;}, set: function(_){
- rightAlignYAxis = _;
- yAxis.orient( (_) ? 'right' : 'left');
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- legend.color(color);
- distX.color(color);
- distY.color(color);
- }}
- });
-
- nv.utils.inheritOptions(chart, scatter);
- nv.utils.initOptions(chart);
- return chart;
-};
-
-nv.models.sparkline = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 2, right: 0, bottom: 2, left: 0}
- , width = 400
- , height = 32
- , container = null
- , animate = true
- , x = d3.scale.linear()
- , y = d3.scale.linear()
- , getX = function(d) { return d.x }
- , getY = function(d) { return d.y }
- , color = nv.utils.getColor(['#000'])
- , xDomain
- , yDomain
- , xRange
- , yRange
- ;
-
- function chart(selection) {
- selection.each(function(data) {
- var availableWidth = width - margin.left - margin.right,
- availableHeight = height - margin.top - margin.bottom;
-
- container = d3.select(this);
- nv.utils.initSVG(container);
-
- // Setup Scales
- x .domain(xDomain || d3.extent(data, getX ))
- .range(xRange || [0, availableWidth]);
-
- y .domain(yDomain || d3.extent(data, getY ))
- .range(yRange || [availableHeight, 0]);
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-sparkline').data([data]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-sparkline');
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')')
-
- var paths = wrap.selectAll('path')
- .data(function(d) { return [d] });
- paths.enter().append('path');
- paths.exit().remove();
- paths
- .style('stroke', function(d,i) { return d.color || color(d, i) })
- .attr('d', d3.svg.line()
- .x(function(d,i) { return x(getX(d,i)) })
- .y(function(d,i) { return y(getY(d,i)) })
- );
-
- // TODO: Add CURRENT data point (Need Min, Mac, Current / Most recent)
- var points = wrap.selectAll('circle.nv-point')
- .data(function(data) {
- var yValues = data.map(function(d, i) { return getY(d,i); });
- function pointIndex(index) {
- if (index != -1) {
- var result = data[index];
- result.pointIndex = index;
- return result;
- } else {
- return null;
- }
- }
- var maxPoint = pointIndex(yValues.lastIndexOf(y.domain()[1])),
- minPoint = pointIndex(yValues.indexOf(y.domain()[0])),
- currentPoint = pointIndex(yValues.length - 1);
- return [minPoint, maxPoint, currentPoint].filter(function (d) {return d != null;});
- });
- points.enter().append('circle');
- points.exit().remove();
- points
- .attr('cx', function(d,i) { return x(getX(d,d.pointIndex)) })
- .attr('cy', function(d,i) { return y(getY(d,d.pointIndex)) })
- .attr('r', 2)
- .attr('class', function(d,i) {
- return getX(d, d.pointIndex) == x.domain()[1] ? 'nv-point nv-currentValue' :
- getY(d, d.pointIndex) == y.domain()[0] ? 'nv-point nv-minValue' : 'nv-point nv-maxValue'
- });
- });
-
- return chart;
- }
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- xDomain: {get: function(){return xDomain;}, set: function(_){xDomain=_;}},
- yDomain: {get: function(){return yDomain;}, set: function(_){yDomain=_;}},
- xRange: {get: function(){return xRange;}, set: function(_){xRange=_;}},
- yRange: {get: function(){return yRange;}, set: function(_){yRange=_;}},
- xScale: {get: function(){return x;}, set: function(_){x=_;}},
- yScale: {get: function(){return y;}, set: function(_){y=_;}},
- animate: {get: function(){return animate;}, set: function(_){animate=_;}},
-
- //functor options
- x: {get: function(){return getX;}, set: function(_){getX=d3.functor(_);}},
- y: {get: function(){return getY;}, set: function(_){getY=d3.functor(_);}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- }}
- });
-
- nv.utils.initOptions(chart);
- return chart;
-};
-
-nv.models.sparklinePlus = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var sparkline = nv.models.sparkline();
-
- var margin = {top: 15, right: 100, bottom: 10, left: 50}
- , width = null
- , height = null
- , x
- , y
- , index = []
- , paused = false
- , xTickFormat = d3.format(',r')
- , yTickFormat = d3.format(',.2f')
- , showLastValue = true
- , alignValue = true
- , rightAlignValue = false
- , noData = null
- ;
-
- function chart(selection) {
- selection.each(function(data) {
- var container = d3.select(this);
- nv.utils.initSVG(container);
-
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- chart.update = function() { chart(selection) };
- chart.container = this;
-
- // Display No Data message if there's nothing to show.
- if (!data || !data.length) {
- nv.utils.noData(chart, container)
- return chart;
- } else {
- container.selectAll('.nv-noData').remove();
- }
-
- var currentValue = sparkline.y()(data[data.length-1], data.length-1);
-
- // Setup Scales
- x = sparkline.xScale();
- y = sparkline.yScale();
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-sparklineplus').data([data]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-sparklineplus');
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-sparklineWrap');
- gEnter.append('g').attr('class', 'nv-valueWrap');
- gEnter.append('g').attr('class', 'nv-hoverArea');
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- // Main Chart Component(s)
- var sparklineWrap = g.select('.nv-sparklineWrap');
-
- sparkline.width(availableWidth).height(availableHeight);
- sparklineWrap.call(sparkline);
-
- if (showLastValue) {
- var valueWrap = g.select('.nv-valueWrap');
- var value = valueWrap.selectAll('.nv-currentValue')
- .data([currentValue]);
-
- value.enter().append('text').attr('class', 'nv-currentValue')
- .attr('dx', rightAlignValue ? -8 : 8)
- .attr('dy', '.9em')
- .style('text-anchor', rightAlignValue ? 'end' : 'start');
-
- value
- .attr('x', availableWidth + (rightAlignValue ? margin.right : 0))
- .attr('y', alignValue ? function (d) {
- return y(d)
- } : 0)
- .style('fill', sparkline.color()(data[data.length - 1], data.length - 1))
- .text(yTickFormat(currentValue));
- }
-
- gEnter.select('.nv-hoverArea').append('rect')
- .on('mousemove', sparklineHover)
- .on('click', function() { paused = !paused })
- .on('mouseout', function() { index = []; updateValueLine(); });
-
- g.select('.nv-hoverArea rect')
- .attr('transform', function(d) { return 'translate(' + -margin.left + ',' + -margin.top + ')' })
- .attr('width', availableWidth + margin.left + margin.right)
- .attr('height', availableHeight + margin.top);
-
- //index is currently global (within the chart), may or may not keep it that way
- function updateValueLine() {
- if (paused) return;
-
- var hoverValue = g.selectAll('.nv-hoverValue').data(index);
-
- var hoverEnter = hoverValue.enter()
- .append('g').attr('class', 'nv-hoverValue')
- .style('stroke-opacity', 0)
- .style('fill-opacity', 0);
-
- hoverValue.exit()
- .transition().duration(250)
- .style('stroke-opacity', 0)
- .style('fill-opacity', 0)
- .remove();
-
- hoverValue
- .attr('transform', function(d) { return 'translate(' + x(sparkline.x()(data[d],d)) + ',0)' })
- .transition().duration(250)
- .style('stroke-opacity', 1)
- .style('fill-opacity', 1);
-
- if (!index.length) return;
-
- hoverEnter.append('line')
- .attr('x1', 0)
- .attr('y1', -margin.top)
- .attr('x2', 0)
- .attr('y2', availableHeight);
-
- hoverEnter.append('text').attr('class', 'nv-xValue')
- .attr('x', -6)
- .attr('y', -margin.top)
- .attr('text-anchor', 'end')
- .attr('dy', '.9em');
-
- g.select('.nv-hoverValue .nv-xValue')
- .text(xTickFormat(sparkline.x()(data[index[0]], index[0])));
-
- hoverEnter.append('text').attr('class', 'nv-yValue')
- .attr('x', 6)
- .attr('y', -margin.top)
- .attr('text-anchor', 'start')
- .attr('dy', '.9em');
-
- g.select('.nv-hoverValue .nv-yValue')
- .text(yTickFormat(sparkline.y()(data[index[0]], index[0])));
- }
-
- function sparklineHover() {
- if (paused) return;
-
- var pos = d3.mouse(this)[0] - margin.left;
-
- function getClosestIndex(data, x) {
- var distance = Math.abs(sparkline.x()(data[0], 0) - x);
- var closestIndex = 0;
- for (var i = 0; i < data.length; i++){
- if (Math.abs(sparkline.x()(data[i], i) - x) < distance) {
- distance = Math.abs(sparkline.x()(data[i], i) - x);
- closestIndex = i;
- }
- }
- return closestIndex;
- }
-
- index = [getClosestIndex(data, Math.round(x.invert(pos)))];
- updateValueLine();
- }
-
- });
-
- return chart;
- }
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- // expose chart's sub-components
- chart.sparkline = sparkline;
-
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- xTickFormat: {get: function(){return xTickFormat;}, set: function(_){xTickFormat=_;}},
- yTickFormat: {get: function(){return yTickFormat;}, set: function(_){yTickFormat=_;}},
- showLastValue: {get: function(){return showLastValue;}, set: function(_){showLastValue=_;}},
- alignValue: {get: function(){return alignValue;}, set: function(_){alignValue=_;}},
- rightAlignValue: {get: function(){return rightAlignValue;}, set: function(_){rightAlignValue=_;}},
- noData: {get: function(){return noData;}, set: function(_){noData=_;}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }}
- });
-
- nv.utils.inheritOptions(chart, sparkline);
- nv.utils.initOptions(chart);
-
- return chart;
-};
-
-nv.models.stackedArea = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 0, right: 0, bottom: 0, left: 0}
- , width = 960
- , height = 500
- , color = nv.utils.defaultColor() // a function that computes the color
- , id = Math.floor(Math.random() * 100000) //Create semi-unique ID incase user doesn't selet one
- , container = null
- , getX = function(d) { return d.x } // accessor to get the x value from a data point
- , getY = function(d) { return d.y } // accessor to get the y value from a data point
- , style = 'stack'
- , offset = 'zero'
- , order = 'default'
- , interpolate = 'linear' // controls the line interpolation
- , clipEdge = false // if true, masks lines within x and y scale
- , x //can be accessed via chart.xScale()
- , y //can be accessed via chart.yScale()
- , scatter = nv.models.scatter()
- , duration = 250
- , dispatch = d3.dispatch('areaClick', 'areaMouseover', 'areaMouseout','renderEnd', 'elementClick', 'elementMouseover', 'elementMouseout')
- ;
-
- scatter
- .pointSize(2.2) // default size
- .pointDomain([2.2, 2.2]) // all the same size by default
- ;
-
- /************************************
- * offset:
- * 'wiggle' (stream)
- * 'zero' (stacked)
- * 'expand' (normalize to 100%)
- * 'silhouette' (simple centered)
- *
- * order:
- * 'inside-out' (stream)
- * 'default' (input order)
- ************************************/
-
- var renderWatch = nv.utils.renderWatch(dispatch, duration);
-
- function chart(selection) {
- renderWatch.reset();
- renderWatch.models(scatter);
- selection.each(function(data) {
- var availableWidth = width - margin.left - margin.right,
- availableHeight = height - margin.top - margin.bottom;
-
- container = d3.select(this);
- nv.utils.initSVG(container);
-
- // Setup Scales
- x = scatter.xScale();
- y = scatter.yScale();
-
- var dataRaw = data;
- // Injecting point index into each point because d3.layout.stack().out does not give index
- data.forEach(function(aseries, i) {
- aseries.seriesIndex = i;
- aseries.values = aseries.values.map(function(d, j) {
- d.index = j;
- d.seriesIndex = i;
- return d;
- });
- });
-
- var dataFiltered = data.filter(function(series) {
- return !series.disabled;
- });
-
- data = d3.layout.stack()
- .order(order)
- .offset(offset)
- .values(function(d) { return d.values }) //TODO: make values customizeable in EVERY model in this fashion
- .x(getX)
- .y(getY)
- .out(function(d, y0, y) {
- d.display = {
- y: y,
- y0: y0
- };
- })
- (dataFiltered);
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-stackedarea').data([data]);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-stackedarea');
- var defsEnter = wrapEnter.append('defs');
- var gEnter = wrapEnter.append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-areaWrap');
- gEnter.append('g').attr('class', 'nv-scatterWrap');
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- // If the user has not specified forceY, make sure 0 is included in the domain
- // Otherwise, use user-specified values for forceY
- if (scatter.forceY().length == 0) {
- scatter.forceY().push(0);
- }
-
- scatter
- .width(availableWidth)
- .height(availableHeight)
- .x(getX)
- .y(function(d) { return d.display.y + d.display.y0 })
- .forceY([0])
- .color(data.map(function(d,i) {
- return d.color || color(d, d.seriesIndex);
- }));
-
- var scatterWrap = g.select('.nv-scatterWrap')
- .datum(data);
-
- scatterWrap.call(scatter);
-
- defsEnter.append('clipPath')
- .attr('id', 'nv-edge-clip-' + id)
- .append('rect');
-
- wrap.select('#nv-edge-clip-' + id + ' rect')
- .attr('width', availableWidth)
- .attr('height', availableHeight);
-
- g.attr('clip-path', clipEdge ? 'url(#nv-edge-clip-' + id + ')' : '');
-
- var area = d3.svg.area()
- .x(function(d,i) { return x(getX(d,i)) })
- .y0(function(d) {
- return y(d.display.y0)
- })
- .y1(function(d) {
- return y(d.display.y + d.display.y0)
- })
- .interpolate(interpolate);
-
- var zeroArea = d3.svg.area()
- .x(function(d,i) { return x(getX(d,i)) })
- .y0(function(d) { return y(d.display.y0) })
- .y1(function(d) { return y(d.display.y0) });
-
- var path = g.select('.nv-areaWrap').selectAll('path.nv-area')
- .data(function(d) { return d });
-
- path.enter().append('path').attr('class', function(d,i) { return 'nv-area nv-area-' + i })
- .attr('d', function(d,i){
- return zeroArea(d.values, d.seriesIndex);
- })
- .on('mouseover', function(d,i) {
- d3.select(this).classed('hover', true);
- dispatch.areaMouseover({
- point: d,
- series: d.key,
- pos: [d3.event.pageX, d3.event.pageY],
- seriesIndex: d.seriesIndex
- });
- })
- .on('mouseout', function(d,i) {
- d3.select(this).classed('hover', false);
- dispatch.areaMouseout({
- point: d,
- series: d.key,
- pos: [d3.event.pageX, d3.event.pageY],
- seriesIndex: d.seriesIndex
- });
- })
- .on('click', function(d,i) {
- d3.select(this).classed('hover', false);
- dispatch.areaClick({
- point: d,
- series: d.key,
- pos: [d3.event.pageX, d3.event.pageY],
- seriesIndex: d.seriesIndex
- });
- });
-
- path.exit().remove();
- path.style('fill', function(d,i){
- return d.color || color(d, d.seriesIndex)
- })
- .style('stroke', function(d,i){ return d.color || color(d, d.seriesIndex) });
- path.watchTransition(renderWatch,'stackedArea path')
- .attr('d', function(d,i) {
- return area(d.values,i)
- });
-
- //============================================================
- // Event Handling/Dispatching (in chart's scope)
- //------------------------------------------------------------
-
- scatter.dispatch.on('elementMouseover.area', function(e) {
- g.select('.nv-chart-' + id + ' .nv-area-' + e.seriesIndex).classed('hover', true);
- });
- scatter.dispatch.on('elementMouseout.area', function(e) {
- g.select('.nv-chart-' + id + ' .nv-area-' + e.seriesIndex).classed('hover', false);
- });
-
- //Special offset functions
- chart.d3_stackedOffset_stackPercent = function(stackData) {
- var n = stackData.length, //How many series
- m = stackData[0].length, //how many points per series
- i,
- j,
- o,
- y0 = [];
-
- for (j = 0; j < m; ++j) { //Looping through all points
- for (i = 0, o = 0; i < dataRaw.length; i++) { //looping through all series
- o += getY(dataRaw[i].values[j]); //total y value of all series at a certian point in time.
- }
-
- if (o) for (i = 0; i < n; i++) { //(total y value of all series at point in time i) != 0
- stackData[i][j][1] /= o;
- } else { //(total y value of all series at point in time i) == 0
- for (i = 0; i < n; i++) {
- stackData[i][j][1] = 0;
- }
- }
- }
- for (j = 0; j < m; ++j) y0[j] = 0;
- return y0;
- };
-
- });
-
- renderWatch.renderEnd('stackedArea immediate');
- return chart;
- }
-
- //============================================================
- // Global getters and setters
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.scatter = scatter;
-
- scatter.dispatch.on('elementClick', function(){ dispatch.elementClick.apply(this, arguments); });
- scatter.dispatch.on('elementMouseover', function(){ dispatch.elementMouseover.apply(this, arguments); });
- scatter.dispatch.on('elementMouseout', function(){ dispatch.elementMouseout.apply(this, arguments); });
-
- chart.interpolate = function(_) {
- if (!arguments.length) return interpolate;
- interpolate = _;
- return chart;
- };
-
- chart.duration = function(_) {
- if (!arguments.length) return duration;
- duration = _;
- renderWatch.reset(duration);
- scatter.duration(duration);
- return chart;
- };
-
- chart.dispatch = dispatch;
- chart.scatter = scatter;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- clipEdge: {get: function(){return clipEdge;}, set: function(_){clipEdge=_;}},
- offset: {get: function(){return offset;}, set: function(_){offset=_;}},
- order: {get: function(){return order;}, set: function(_){order=_;}},
- interpolate: {get: function(){return interpolate;}, set: function(_){interpolate=_;}},
-
- // simple functor options
- x: {get: function(){return getX;}, set: function(_){getX = d3.functor(_);}},
- y: {get: function(){return getY;}, set: function(_){getY = d3.functor(_);}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- }},
- style: {get: function(){return style;}, set: function(_){
- style = _;
- switch (style) {
- case 'stack':
- chart.offset('zero');
- chart.order('default');
- break;
- case 'stream':
- chart.offset('wiggle');
- chart.order('inside-out');
- break;
- case 'stream-center':
- chart.offset('silhouette');
- chart.order('inside-out');
- break;
- case 'expand':
- chart.offset('expand');
- chart.order('default');
- break;
- case 'stack_percent':
- chart.offset(chart.d3_stackedOffset_stackPercent);
- chart.order('default');
- break;
- }
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration = _;
- renderWatch.reset(duration);
- scatter.duration(duration);
- }}
- });
-
- nv.utils.inheritOptions(chart, scatter);
- nv.utils.initOptions(chart);
-
- return chart;
-};
-
-nv.models.stackedAreaChart = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var stacked = nv.models.stackedArea()
- , xAxis = nv.models.axis()
- , yAxis = nv.models.axis()
- , legend = nv.models.legend()
- , controls = nv.models.legend()
- , interactiveLayer = nv.interactiveGuideline()
- , tooltip = nv.models.tooltip()
- ;
-
- var margin = {top: 30, right: 25, bottom: 50, left: 60}
- , width = null
- , height = null
- , color = nv.utils.defaultColor()
- , showControls = true
- , showLegend = true
- , showXAxis = true
- , showYAxis = true
- , rightAlignYAxis = false
- , useInteractiveGuideline = false
- , x //can be accessed via chart.xScale()
- , y //can be accessed via chart.yScale()
- , state = nv.utils.state()
- , defaultState = null
- , noData = null
- , dispatch = d3.dispatch('stateChange', 'changeState','renderEnd')
- , controlWidth = 250
- , controlOptions = ['Stacked','Stream','Expanded']
- , controlLabels = {}
- , duration = 250
- ;
-
- state.style = stacked.style();
- xAxis.orient('bottom').tickPadding(7);
- yAxis.orient((rightAlignYAxis) ? 'right' : 'left');
-
- tooltip
- .headerFormatter(function(d, i) {
- return xAxis.tickFormat()(d, i);
- })
- .valueFormatter(function(d, i) {
- return yAxis.tickFormat()(d, i);
- });
-
- interactiveLayer.tooltip
- .headerFormatter(function(d, i) {
- return xAxis.tickFormat()(d, i);
- })
- .valueFormatter(function(d, i) {
- return yAxis.tickFormat()(d, i);
- });
-
- var oldYTickFormat = null,
- oldValueFormatter = null;
-
- controls.updateState(false);
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var renderWatch = nv.utils.renderWatch(dispatch);
- var style = stacked.style();
-
- var stateGetter = function(data) {
- return function(){
- return {
- active: data.map(function(d) { return !d.disabled }),
- style: stacked.style()
- };
- }
- };
-
- var stateSetter = function(data) {
- return function(state) {
- if (state.style !== undefined)
- style = state.style;
- if (state.active !== undefined)
- data.forEach(function(series,i) {
- series.disabled = !state.active[i];
- });
- }
- };
-
- var percentFormatter = d3.format('%');
-
- function chart(selection) {
- renderWatch.reset();
- renderWatch.models(stacked);
- if (showXAxis) renderWatch.models(xAxis);
- if (showYAxis) renderWatch.models(yAxis);
-
- selection.each(function(data) {
- var container = d3.select(this),
- that = this;
- nv.utils.initSVG(container);
-
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- chart.update = function() { container.transition().duration(duration).call(chart); };
- chart.container = this;
-
- state
- .setter(stateSetter(data), chart.update)
- .getter(stateGetter(data))
- .update();
-
- // DEPRECATED set state.disabled
- state.disabled = data.map(function(d) { return !!d.disabled });
-
- if (!defaultState) {
- var key;
- defaultState = {};
- for (key in state) {
- if (state[key] instanceof Array)
- defaultState[key] = state[key].slice(0);
- else
- defaultState[key] = state[key];
- }
- }
-
- // Display No Data message if there's nothing to show.
- if (!data || !data.length || !data.filter(function(d) { return d.values.length }).length) {
- nv.utils.noData(chart, container)
- return chart;
- } else {
- container.selectAll('.nv-noData').remove();
- }
-
- // Setup Scales
- x = stacked.xScale();
- y = stacked.yScale();
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-stackedAreaChart').data([data]);
- var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-stackedAreaChart').append('g');
- var g = wrap.select('g');
-
- gEnter.append("rect").style("opacity",0);
- gEnter.append('g').attr('class', 'nv-x nv-axis');
- gEnter.append('g').attr('class', 'nv-y nv-axis');
- gEnter.append('g').attr('class', 'nv-stackedWrap');
- gEnter.append('g').attr('class', 'nv-legendWrap');
- gEnter.append('g').attr('class', 'nv-controlsWrap');
- gEnter.append('g').attr('class', 'nv-interactive');
-
- g.select("rect").attr("width",availableWidth).attr("height",availableHeight);
-
- // Legend
- if (showLegend) {
- var legendWidth = (showControls) ? availableWidth - controlWidth : availableWidth;
-
- legend.width(legendWidth);
- g.select('.nv-legendWrap').datum(data).call(legend);
-
- if ( margin.top != legend.height()) {
- margin.top = legend.height();
- availableHeight = nv.utils.availableHeight(height, container, margin);
- }
-
- g.select('.nv-legendWrap')
- .attr('transform', 'translate(' + (availableWidth-legendWidth) + ',' + (-margin.top) +')');
- }
-
- // Controls
- if (showControls) {
- var controlsData = [
- {
- key: controlLabels.stacked || 'Stacked',
- metaKey: 'Stacked',
- disabled: stacked.style() != 'stack',
- style: 'stack'
- },
- {
- key: controlLabels.stream || 'Stream',
- metaKey: 'Stream',
- disabled: stacked.style() != 'stream',
- style: 'stream'
- },
- {
- key: controlLabels.expanded || 'Expanded',
- metaKey: 'Expanded',
- disabled: stacked.style() != 'expand',
- style: 'expand'
- },
- {
- key: controlLabels.stack_percent || 'Stack %',
- metaKey: 'Stack_Percent',
- disabled: stacked.style() != 'stack_percent',
- style: 'stack_percent'
- }
- ];
-
- controlWidth = (controlOptions.length/3) * 260;
- controlsData = controlsData.filter(function(d) {
- return controlOptions.indexOf(d.metaKey) !== -1;
- });
-
- controls
- .width( controlWidth )
- .color(['#444', '#444', '#444']);
-
- g.select('.nv-controlsWrap')
- .datum(controlsData)
- .call(controls);
-
- if ( margin.top != Math.max(controls.height(), legend.height()) ) {
- margin.top = Math.max(controls.height(), legend.height());
- availableHeight = nv.utils.availableHeight(height, container, margin);
- }
-
- g.select('.nv-controlsWrap')
- .attr('transform', 'translate(0,' + (-margin.top) +')');
- }
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- if (rightAlignYAxis) {
- g.select(".nv-y.nv-axis")
- .attr("transform", "translate(" + availableWidth + ",0)");
- }
-
- //Set up interactive layer
- if (useInteractiveGuideline) {
- interactiveLayer
- .width(availableWidth)
- .height(availableHeight)
- .margin({left: margin.left, top: margin.top})
- .svgContainer(container)
- .xScale(x);
- wrap.select(".nv-interactive").call(interactiveLayer);
- }
-
- stacked
- .width(availableWidth)
- .height(availableHeight);
-
- var stackedWrap = g.select('.nv-stackedWrap')
- .datum(data);
-
- stackedWrap.transition().call(stacked);
-
- // Setup Axes
- if (showXAxis) {
- xAxis.scale(x)
- ._ticks( nv.utils.calcTicksX(availableWidth/100, data) )
- .tickSize( -availableHeight, 0);
-
- g.select('.nv-x.nv-axis')
- .attr('transform', 'translate(0,' + availableHeight + ')');
-
- g.select('.nv-x.nv-axis')
- .transition().duration(0)
- .call(xAxis);
- }
-
- if (showYAxis) {
- var ticks;
- if (stacked.offset() === 'wiggle') {
- ticks = 0;
- }
- else {
- ticks = nv.utils.calcTicksY(availableHeight/36, data);
- }
- yAxis.scale(y)
- ._ticks(ticks)
- .tickSize(-availableWidth, 0);
-
- if (stacked.style() === 'expand' || stacked.style() === 'stack_percent') {
- var currentFormat = yAxis.tickFormat();
-
- if ( !oldYTickFormat || currentFormat !== percentFormatter )
- oldYTickFormat = currentFormat;
-
- //Forces the yAxis to use percentage in 'expand' mode.
- yAxis.tickFormat(percentFormatter);
- }
- else {
- if (oldYTickFormat) {
- yAxis.tickFormat(oldYTickFormat);
- oldYTickFormat = null;
- }
- }
-
- g.select('.nv-y.nv-axis')
- .transition().duration(0)
- .call(yAxis);
- }
-
- //============================================================
- // Event Handling/Dispatching (in chart's scope)
- //------------------------------------------------------------
-
- stacked.dispatch.on('areaClick.toggle', function(e) {
- if (data.filter(function(d) { return !d.disabled }).length === 1)
- data.forEach(function(d) {
- d.disabled = false;
- });
- else
- data.forEach(function(d,i) {
- d.disabled = (i != e.seriesIndex);
- });
-
- state.disabled = data.map(function(d) { return !!d.disabled });
- dispatch.stateChange(state);
-
- chart.update();
- });
-
- legend.dispatch.on('stateChange', function(newState) {
- for (var key in newState)
- state[key] = newState[key];
- dispatch.stateChange(state);
- chart.update();
- });
-
- controls.dispatch.on('legendClick', function(d,i) {
- if (!d.disabled) return;
-
- controlsData = controlsData.map(function(s) {
- s.disabled = true;
- return s;
- });
- d.disabled = false;
-
- stacked.style(d.style);
-
-
- state.style = stacked.style();
- dispatch.stateChange(state);
-
- chart.update();
- });
-
- interactiveLayer.dispatch.on('elementMousemove', function(e) {
- stacked.clearHighlights();
- var singlePoint, pointIndex, pointXLocation, allData = [];
- data
- .filter(function(series, i) {
- series.seriesIndex = i;
- return !series.disabled;
- })
- .forEach(function(series,i) {
- pointIndex = nv.interactiveBisect(series.values, e.pointXValue, chart.x());
- var point = series.values[pointIndex];
- var pointYValue = chart.y()(point, pointIndex);
- if (pointYValue != null) {
- stacked.highlightPoint(i, pointIndex, true);
- }
- if (typeof point === 'undefined') return;
- if (typeof singlePoint === 'undefined') singlePoint = point;
- if (typeof pointXLocation === 'undefined') pointXLocation = chart.xScale()(chart.x()(point,pointIndex));
-
- //If we are in 'expand' mode, use the stacked percent value instead of raw value.
- var tooltipValue = (stacked.style() == 'expand') ? point.display.y : chart.y()(point,pointIndex);
- allData.push({
- key: series.key,
- value: tooltipValue,
- color: color(series,series.seriesIndex),
- stackedValue: point.display
- });
- });
-
- allData.reverse();
-
- //Highlight the tooltip entry based on which stack the mouse is closest to.
- if (allData.length > 2) {
- var yValue = chart.yScale().invert(e.mouseY);
- var yDistMax = Infinity, indexToHighlight = null;
- allData.forEach(function(series,i) {
-
- //To handle situation where the stacked area chart is negative, we need to use absolute values
- //when checking if the mouse Y value is within the stack area.
- yValue = Math.abs(yValue);
- var stackedY0 = Math.abs(series.stackedValue.y0);
- var stackedY = Math.abs(series.stackedValue.y);
- if ( yValue >= stackedY0 && yValue <= (stackedY + stackedY0))
- {
- indexToHighlight = i;
- return;
- }
- });
- if (indexToHighlight != null)
- allData[indexToHighlight].highlight = true;
- }
-
- var xValue = xAxis.tickFormat()(chart.x()(singlePoint,pointIndex));
-
- var valueFormatter = interactiveLayer.tooltip.valueFormatter();
- // Keeps track of the tooltip valueFormatter if the chart changes to expanded view
- if (stacked.style() === 'expand' || stacked.style() === 'stack_percent') {
- if ( !oldValueFormatter ) {
- oldValueFormatter = valueFormatter;
- }
- //Forces the tooltip to use percentage in 'expand' mode.
- valueFormatter = d3.format(".1%");
- }
- else {
- if (oldValueFormatter) {
- valueFormatter = oldValueFormatter;
- oldValueFormatter = null;
- }
- }
-
- interactiveLayer.tooltip
- .position({left: pointXLocation + margin.left, top: e.mouseY + margin.top})
- .chartContainer(that.parentNode)
- .valueFormatter(valueFormatter)
- .data(
- {
- value: xValue,
- series: allData
- }
- )();
-
- interactiveLayer.renderGuideLine(pointXLocation);
-
- });
-
- interactiveLayer.dispatch.on("elementMouseout",function(e) {
- stacked.clearHighlights();
- });
-
- // Update chart from a state object passed to event handler
- dispatch.on('changeState', function(e) {
-
- if (typeof e.disabled !== 'undefined' && data.length === e.disabled.length) {
- data.forEach(function(series,i) {
- series.disabled = e.disabled[i];
- });
-
- state.disabled = e.disabled;
- }
-
- if (typeof e.style !== 'undefined') {
- stacked.style(e.style);
- style = e.style;
- }
-
- chart.update();
- });
-
- });
-
- renderWatch.renderEnd('stacked Area chart immediate');
- return chart;
- }
-
- //============================================================
- // Event Handling/Dispatching (out of chart's scope)
- //------------------------------------------------------------
-
- stacked.dispatch.on('elementMouseover.tooltip', function(evt) {
- evt.point['x'] = stacked.x()(evt.point);
- evt.point['y'] = stacked.y()(evt.point);
- tooltip.data(evt).position(evt.pos).hidden(false);
- });
-
- stacked.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true)
- });
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- // expose chart's sub-components
- chart.dispatch = dispatch;
- chart.stacked = stacked;
- chart.legend = legend;
- chart.controls = controls;
- chart.xAxis = xAxis;
- chart.yAxis = yAxis;
- chart.interactiveLayer = interactiveLayer;
- chart.tooltip = tooltip;
-
- chart.dispatch = dispatch;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- showLegend: {get: function(){return showLegend;}, set: function(_){showLegend=_;}},
- showXAxis: {get: function(){return showXAxis;}, set: function(_){showXAxis=_;}},
- showYAxis: {get: function(){return showYAxis;}, set: function(_){showYAxis=_;}},
- defaultState: {get: function(){return defaultState;}, set: function(_){defaultState=_;}},
- noData: {get: function(){return noData;}, set: function(_){noData=_;}},
- showControls: {get: function(){return showControls;}, set: function(_){showControls=_;}},
- controlLabels: {get: function(){return controlLabels;}, set: function(_){controlLabels=_;}},
- controlOptions: {get: function(){return controlOptions;}, set: function(_){controlOptions=_;}},
-
- // deprecated options
- tooltips: {get: function(){return tooltip.enabled();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltips', 'use chart.tooltip.enabled() instead');
- tooltip.enabled(!!_);
- }},
- tooltipContent: {get: function(){return tooltip.contentGenerator();}, set: function(_){
- // deprecated after 1.7.1
- nv.deprecated('tooltipContent', 'use chart.tooltip.contentGenerator() instead');
- tooltip.contentGenerator(_);
- }},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration = _;
- renderWatch.reset(duration);
- stacked.duration(duration);
- xAxis.duration(duration);
- yAxis.duration(duration);
- }},
- color: {get: function(){return color;}, set: function(_){
- color = nv.utils.getColor(_);
- legend.color(color);
- stacked.color(color);
- }},
- rightAlignYAxis: {get: function(){return rightAlignYAxis;}, set: function(_){
- rightAlignYAxis = _;
- yAxis.orient( rightAlignYAxis ? 'right' : 'left');
- }},
- useInteractiveGuideline: {get: function(){return useInteractiveGuideline;}, set: function(_){
- useInteractiveGuideline = !!_;
- chart.interactive(!_);
- chart.useVoronoi(!_);
- stacked.scatter.interactive(!_);
- }}
- });
-
- nv.utils.inheritOptions(chart, stacked);
- nv.utils.initOptions(chart);
-
- return chart;
-};
-// based on http://bl.ocks.org/kerryrodden/477c1bfb081b783f80ad
-nv.models.sunburst = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var margin = {top: 0, right: 0, bottom: 0, left: 0}
- , width = null
- , height = null
- , mode = "count"
- , modes = {count: function(d) { return 1; }, size: function(d) { return d.size }}
- , id = Math.floor(Math.random() * 10000) //Create semi-unique ID in case user doesn't select one
- , container = null
- , color = nv.utils.defaultColor()
- , duration = 500
- , dispatch = d3.dispatch('chartClick', 'elementClick', 'elementDblClick', 'elementMousemove', 'elementMouseover', 'elementMouseout', 'renderEnd')
- ;
-
- var x = d3.scale.linear().range([0, 2 * Math.PI]);
- var y = d3.scale.sqrt();
-
- var partition = d3.layout.partition()
- .sort(null)
- .value(function(d) { return 1; });
-
- var arc = d3.svg.arc()
- .startAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x))); })
- .endAngle(function(d) { return Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx))); })
- .innerRadius(function(d) { return Math.max(0, y(d.y)); })
- .outerRadius(function(d) { return Math.max(0, y(d.y + d.dy)); });
-
- // Keep track of the current and previous node being displayed as the root.
- var node, prevNode;
- // Keep track of the root node
- var rootNode;
-
- //============================================================
- // chart function
- //------------------------------------------------------------
-
- var renderWatch = nv.utils.renderWatch(dispatch);
-
- function chart(selection) {
- renderWatch.reset();
- selection.each(function(data) {
- container = d3.select(this);
- var availableWidth = nv.utils.availableWidth(width, container, margin);
- var availableHeight = nv.utils.availableHeight(height, container, margin);
- var radius = Math.min(availableWidth, availableHeight) / 2;
- var path;
-
- nv.utils.initSVG(container);
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('.nv-wrap.nv-sunburst').data(data);
- var wrapEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-sunburst nv-chart-' + id);
-
- var g = wrapEnter.selectAll('nv-sunburst');
-
- wrap.attr('transform', 'translate(' + availableWidth / 2 + ',' + availableHeight / 2 + ')');
-
- container.on('click', function (d, i) {
- dispatch.chartClick({
- data: d,
- index: i,
- pos: d3.event,
- id: id
- });
- });
-
- y.range([0, radius]);
-
- node = node || data;
- rootNode = data[0];
- partition.value(modes[mode] || modes["count"]);
- path = g.data(partition.nodes).enter()
- .append("path")
- .attr("d", arc)
- .style("fill", function (d) {
- return color((d.children ? d : d.parent).name);
- })
- .style("stroke", "#FFF")
- .on("click", function(d) {
- if (prevNode !== node && node !== d) prevNode = node;
- node = d;
- path.transition()
- .duration(duration)
- .attrTween("d", arcTweenZoom(d));
- })
- .each(stash)
- .on("dblclick", function(d) {
- if (prevNode.parent == d) {
- path.transition()
- .duration(duration)
- .attrTween("d", arcTweenZoom(rootNode));
- }
- })
- .each(stash)
- .on('mouseover', function(d,i){
- d3.select(this).classed('hover', true).style('opacity', 0.8);
- dispatch.elementMouseover({
- data: d,
- color: d3.select(this).style("fill")
- });
- })
- .on('mouseout', function(d,i){
- d3.select(this).classed('hover', false).style('opacity', 1);
- dispatch.elementMouseout({
- data: d
- });
- })
- .on('mousemove', function(d,i){
- dispatch.elementMousemove({
- data: d
- });
- });
-
-
-
- // Setup for switching data: stash the old values for transition.
- function stash(d) {
- d.x0 = d.x;
- d.dx0 = d.dx;
- }
-
- // When switching data: interpolate the arcs in data space.
- function arcTweenData(a, i) {
- var oi = d3.interpolate({x: a.x0, dx: a.dx0}, a);
-
- function tween(t) {
- var b = oi(t);
- a.x0 = b.x;
- a.dx0 = b.dx;
- return arc(b);
- }
-
- if (i == 0) {
- // If we are on the first arc, adjust the x domain to match the root node
- // at the current zoom level. (We only need to do this once.)
- var xd = d3.interpolate(x.domain(), [node.x, node.x + node.dx]);
- return function (t) {
- x.domain(xd(t));
- return tween(t);
- };
- } else {
- return tween;
- }
- }
-
- // When zooming: interpolate the scales.
- function arcTweenZoom(d) {
- var xd = d3.interpolate(x.domain(), [d.x, d.x + d.dx]),
- yd = d3.interpolate(y.domain(), [d.y, 1]),
- yr = d3.interpolate(y.range(), [d.y ? 20 : 0, radius]);
- return function (d, i) {
- return i
- ? function (t) {
- return arc(d);
- }
- : function (t) {
- x.domain(xd(t));
- y.domain(yd(t)).range(yr(t));
- return arc(d);
- };
- };
- }
-
- });
-
- renderWatch.renderEnd('sunburst immediate');
- return chart;
- }
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- chart.dispatch = dispatch;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- width: {get: function(){return width;}, set: function(_){width=_;}},
- height: {get: function(){return height;}, set: function(_){height=_;}},
- mode: {get: function(){return mode;}, set: function(_){mode=_;}},
- id: {get: function(){return id;}, set: function(_){id=_;}},
- duration: {get: function(){return duration;}, set: function(_){duration=_;}},
-
- // options that require extra logic in the setter
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top != undefined ? _.top : margin.top;
- margin.right = _.right != undefined ? _.right : margin.right;
- margin.bottom = _.bottom != undefined ? _.bottom : margin.bottom;
- margin.left = _.left != undefined ? _.left : margin.left;
- }},
- color: {get: function(){return color;}, set: function(_){
- color=nv.utils.getColor(_);
- }}
- });
-
- nv.utils.initOptions(chart);
- return chart;
-};
-nv.models.sunburstChart = function() {
- "use strict";
-
- //============================================================
- // Public Variables with Default Settings
- //------------------------------------------------------------
-
- var sunburst = nv.models.sunburst();
- var tooltip = nv.models.tooltip();
-
- var margin = {top: 30, right: 20, bottom: 20, left: 20}
- , width = null
- , height = null
- , color = nv.utils.defaultColor()
- , id = Math.round(Math.random() * 100000)
- , defaultState = null
- , noData = null
- , duration = 250
- , dispatch = d3.dispatch('tooltipShow', 'tooltipHide', 'stateChange', 'changeState','renderEnd')
- ;
-
- //============================================================
- // Private Variables
- //------------------------------------------------------------
-
- var renderWatch = nv.utils.renderWatch(dispatch);
- tooltip.headerEnabled(false).duration(0).valueFormatter(function(d, i) {
- return d;
- });
-
- //============================================================
- // Chart function
- //------------------------------------------------------------
-
- function chart(selection) {
- renderWatch.reset();
- renderWatch.models(sunburst);
-
- selection.each(function(data) {
- var container = d3.select(this);
- nv.utils.initSVG(container);
-
- var that = this;
- var availableWidth = nv.utils.availableWidth(width, container, margin),
- availableHeight = nv.utils.availableHeight(height, container, margin);
-
- chart.update = function() {
- if (duration === 0)
- container.call(chart);
- else
- container.transition().duration(duration).call(chart)
- };
- chart.container = this;
-
- // Display No Data message if there's nothing to show.
- if (!data || !data.length) {
- nv.utils.noData(chart, container);
- return chart;
- } else {
- container.selectAll('.nv-noData').remove();
- }
-
- // Setup containers and skeleton of chart
- var wrap = container.selectAll('g.nv-wrap.nv-sunburstChart').data(data);
- var gEnter = wrap.enter().append('g').attr('class', 'nvd3 nv-wrap nv-sunburstChart').append('g');
- var g = wrap.select('g');
-
- gEnter.append('g').attr('class', 'nv-sunburstWrap');
-
- wrap.attr('transform', 'translate(' + margin.left + ',' + margin.top + ')');
-
- // Main Chart Component(s)
- sunburst.width(availableWidth).height(availableHeight);
- var sunWrap = g.select('.nv-sunburstWrap').datum(data);
- d3.transition(sunWrap).call(sunburst);
-
- });
-
- renderWatch.renderEnd('sunburstChart immediate');
- return chart;
- }
-
- //============================================================
- // Event Handling/Dispatching (out of chart's scope)
- //------------------------------------------------------------
-
- sunburst.dispatch.on('elementMouseover.tooltip', function(evt) {
- evt['series'] = {
- key: evt.data.name,
- value: evt.data.size,
- color: evt.color
- };
- tooltip.data(evt).hidden(false);
- });
-
- sunburst.dispatch.on('elementMouseout.tooltip', function(evt) {
- tooltip.hidden(true);
- });
-
- sunburst.dispatch.on('elementMousemove.tooltip', function(evt) {
- tooltip.position({top: d3.event.pageY, left: d3.event.pageX})();
- });
-
- //============================================================
- // Expose Public Variables
- //------------------------------------------------------------
-
- // expose chart's sub-components
- chart.dispatch = dispatch;
- chart.sunburst = sunburst;
- chart.tooltip = tooltip;
- chart.options = nv.utils.optionsFunc.bind(chart);
-
- // use Object get/set functionality to map between vars and chart functions
- chart._options = Object.create({}, {
- // simple options, just get/set the necessary values
- noData: {get: function(){return noData;}, set: function(_){noData=_;}},
- defaultState: {get: function(){return defaultState;}, set: function(_){defaultState=_;}},
-
- // options that require extra logic in the setter
- color: {get: function(){return color;}, set: function(_){
- color = _;
- sunburst.color(color);
- }},
- duration: {get: function(){return duration;}, set: function(_){
- duration = _;
- renderWatch.reset(duration);
- sunburst.duration(duration);
- }},
- margin: {get: function(){return margin;}, set: function(_){
- margin.top = _.top !== undefined ? _.top : margin.top;
- margin.right = _.right !== undefined ? _.right : margin.right;
- margin.bottom = _.bottom !== undefined ? _.bottom : margin.bottom;
- margin.left = _.left !== undefined ? _.left : margin.left;
- }}
- });
- nv.utils.inheritOptions(chart, sunburst);
- nv.utils.initOptions(chart);
- return chart;
-};
-
-nv.version = "1.8.1";
-})(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/nvd3/nv.d3.min.css b/wqflask/wqflask/static/new/packages/nvd3/nv.d3.min.css
deleted file mode 100644
index 7a6f7fe9..00000000
--- a/wqflask/wqflask/static/new/packages/nvd3/nv.d3.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.nvd3 .nv-axis{pointer-events:none;opacity:1}.nvd3 .nv-axis path{fill:none;stroke:#000;stroke-opacity:.75;shape-rendering:crispEdges}.nvd3 .nv-axis path.domain{stroke-opacity:.75}.nvd3 .nv-axis.nv-x path.domain{stroke-opacity:0}.nvd3 .nv-axis line{fill:none;stroke:#e5e5e5;shape-rendering:crispEdges}.nvd3 .nv-axis .zero line,.nvd3 .nv-axis line.zero{stroke-opacity:.75}.nvd3 .nv-axis .nv-axisMaxMin text{font-weight:700}.nvd3 .x .nv-axis .nv-axisMaxMin text,.nvd3 .x2 .nv-axis .nv-axisMaxMin text,.nvd3 .x3 .nv-axis .nv-axisMaxMin text{text-anchor:middle}.nvd3 .nv-axis.nv-disabled{opacity:0}.nvd3 .nv-bars rect{fill-opacity:.75;transition:fill-opacity 250ms linear;-moz-transition:fill-opacity 250ms linear;-webkit-transition:fill-opacity 250ms linear}.nvd3 .nv-bars rect.hover{fill-opacity:1}.nvd3 .nv-bars .hover rect{fill:#add8e6}.nvd3 .nv-bars text{fill:rgba(0,0,0,0)}.nvd3 .nv-bars .hover text{fill:rgba(0,0,0,1)}.nvd3 .nv-multibar .nv-groups rect,.nvd3 .nv-multibarHorizontal .nv-groups rect,.nvd3 .nv-discretebar .nv-groups rect{stroke-opacity:0;transition:fill-opacity 250ms linear;-moz-transition:fill-opacity 250ms linear;-webkit-transition:fill-opacity 250ms linear}.nvd3 .nv-multibar .nv-groups rect:hover,.nvd3 .nv-multibarHorizontal .nv-groups rect:hover,.nvd3 .nv-candlestickBar .nv-ticks rect:hover,.nvd3 .nv-discretebar .nv-groups rect:hover{fill-opacity:1}.nvd3 .nv-discretebar .nv-groups text,.nvd3 .nv-multibarHorizontal .nv-groups text{font-weight:700;fill:rgba(0,0,0,1);stroke:rgba(0,0,0,0)}.nvd3 .nv-boxplot circle{fill-opacity:.5}.nvd3 .nv-boxplot circle:hover{fill-opacity:1}.nvd3 .nv-boxplot rect:hover{fill-opacity:1}.nvd3 line.nv-boxplot-median{stroke:#000}.nv-boxplot-tick:hover{stroke-width:2.5px}.nvd3.nv-bullet{font:10px sans-serif}.nvd3.nv-bullet .nv-measure{fill-opacity:.8}.nvd3.nv-bullet .nv-measure:hover{fill-opacity:1}.nvd3.nv-bullet .nv-marker{stroke:#000;stroke-width:2px}.nvd3.nv-bullet .nv-markerTriangle{stroke:#000;fill:#fff;stroke-width:1.5px}.nvd3.nv-bullet .nv-tick line{stroke:#666;stroke-width:.5px}.nvd3.nv-bullet .nv-range.nv-s0{fill:#eee}.nvd3.nv-bullet .nv-range.nv-s1{fill:#ddd}.nvd3.nv-bullet .nv-range.nv-s2{fill:#ccc}.nvd3.nv-bullet .nv-title{font-size:14px;font-weight:700}.nvd3.nv-bullet .nv-subtitle{fill:#999}.nvd3.nv-bullet .nv-range{fill:#bababa;fill-opacity:.4}.nvd3.nv-bullet .nv-range:hover{fill-opacity:.7}.nvd3.nv-candlestickBar .nv-ticks .nv-tick{stroke-width:1px}.nvd3.nv-candlestickBar .nv-ticks .nv-tick.hover{stroke-width:2px}.nvd3.nv-candlestickBar .nv-ticks .nv-tick.positive rect{stroke:#2ca02c;fill:#2ca02c}.nvd3.nv-candlestickBar .nv-ticks .nv-tick.negative rect{stroke:#d62728;fill:#d62728}.with-transitions .nv-candlestickBar .nv-ticks .nv-tick{transition:stroke-width 250ms linear,stroke-opacity 250ms linear;-moz-transition:stroke-width 250ms linear,stroke-opacity 250ms linear;-webkit-transition:stroke-width 250ms linear,stroke-opacity 250ms linear}.nvd3.nv-candlestickBar .nv-ticks line{stroke:#333}.nvd3 .nv-legend .nv-disabled rect{}.nvd3 .nv-check-box .nv-box{fill-opacity:0;stroke-width:2}.nvd3 .nv-check-box .nv-check{fill-opacity:0;stroke-width:4}.nvd3 .nv-series.nv-disabled .nv-check-box .nv-check{fill-opacity:0;stroke-opacity:0}.nvd3 .nv-controlsWrap .nv-legend .nv-check-box .nv-check{opacity:0}.nvd3.nv-linePlusBar .nv-bar rect{fill-opacity:.75}.nvd3.nv-linePlusBar .nv-bar rect:hover{fill-opacity:1}.nvd3 .nv-groups path.nv-line{fill:none}.nvd3 .nv-groups path.nv-area{stroke:none}.nvd3.nv-line .nvd3.nv-scatter .nv-groups .nv-point{fill-opacity:0;stroke-opacity:0}.nvd3.nv-scatter.nv-single-point .nv-groups .nv-point{fill-opacity:.5!important;stroke-opacity:.5!important}.with-transitions .nvd3 .nv-groups .nv-point{transition:stroke-width 250ms linear,stroke-opacity 250ms linear;-moz-transition:stroke-width 250ms linear,stroke-opacity 250ms linear;-webkit-transition:stroke-width 250ms linear,stroke-opacity 250ms linear}.nvd3.nv-scatter .nv-groups .nv-point.hover,.nvd3 .nv-groups .nv-point.hover{stroke-width:7px;fill-opacity:.95!important;stroke-opacity:.95!important}.nvd3 .nv-point-paths path{stroke:#aaa;stroke-opacity:0;fill:#eee;fill-opacity:0}.nvd3 .nv-indexLine{cursor:ew-resize}svg.nvd3-svg{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-ms-user-select:none;-moz-user-select:none;user-select:none;display:block;width:100%;height:100%}.nvtooltip.with-3d-shadow,.with-3d-shadow .nvtooltip{-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.nvd3 text{font:400 12px Arial}.nvd3 .title{font:700 14px Arial}.nvd3 .nv-background{fill:#fff;fill-opacity:0}.nvd3.nv-noData{font-size:18px;font-weight:700}.nv-brush .extent{fill-opacity:.125;shape-rendering:crispEdges}.nv-brush .resize path{fill:#eee;stroke:#666}.nvd3 .nv-legend .nv-series{cursor:pointer}.nvd3 .nv-legend .nv-disabled circle{fill-opacity:0}.nvd3 .nv-brush .extent{fill-opacity:0!important}.nvd3 .nv-brushBackground rect{stroke:#000;stroke-width:.4;fill:#fff;fill-opacity:.7}.nvd3.nv-ohlcBar .nv-ticks .nv-tick{stroke-width:1px}.nvd3.nv-ohlcBar .nv-ticks .nv-tick.hover{stroke-width:2px}.nvd3.nv-ohlcBar .nv-ticks .nv-tick.positive{stroke:#2ca02c}.nvd3.nv-ohlcBar .nv-ticks .nv-tick.negative{stroke:#d62728}.nvd3 .background path{fill:none;stroke:#EEE;stroke-opacity:.4;shape-rendering:crispEdges}.nvd3 .foreground path{fill:none;stroke-opacity:.7}.nvd3 .nv-parallelCoordinates-brush .extent{fill:#fff;fill-opacity:.6;stroke:gray;shape-rendering:crispEdges}.nvd3 .nv-parallelCoordinates .hover{fill-opacity:1;stroke-width:3px}.nvd3 .missingValuesline line{fill:none;stroke:#000;stroke-width:1;stroke-opacity:1;stroke-dasharray:5,5}.nvd3.nv-pie path{stroke-opacity:0;transition:fill-opacity 250ms linear,stroke-width 250ms linear,stroke-opacity 250ms linear;-moz-transition:fill-opacity 250ms linear,stroke-width 250ms linear,stroke-opacity 250ms linear;-webkit-transition:fill-opacity 250ms linear,stroke-width 250ms linear,stroke-opacity 250ms linear}.nvd3.nv-pie .nv-pie-title{font-size:24px;fill:rgba(19,196,249,.59)}.nvd3.nv-pie .nv-slice text{stroke:#000;stroke-width:0}.nvd3.nv-pie path{stroke:#fff;stroke-width:1px;stroke-opacity:1}.nvd3.nv-pie .hover path{fill-opacity:.7}.nvd3.nv-pie .nv-label{pointer-events:none}.nvd3.nv-pie .nv-label rect{fill-opacity:0;stroke-opacity:0}.nvd3 .nv-groups .nv-point.hover{stroke-width:20px;stroke-opacity:.5}.nvd3 .nv-scatter .nv-point.hover{fill-opacity:1}.nv-noninteractive{pointer-events:none}.nv-distx,.nv-disty{pointer-events:none}.nvd3.nv-sparkline path{fill:none}.nvd3.nv-sparklineplus g.nv-hoverValue{pointer-events:none}.nvd3.nv-sparklineplus .nv-hoverValue line{stroke:#333;stroke-width:1.5px}.nvd3.nv-sparklineplus,.nvd3.nv-sparklineplus g{pointer-events:all}.nvd3 .nv-hoverArea{fill-opacity:0;stroke-opacity:0}.nvd3.nv-sparklineplus .nv-xValue,.nvd3.nv-sparklineplus .nv-yValue{stroke-width:0;font-size:.9em;font-weight:400}.nvd3.nv-sparklineplus .nv-yValue{stroke:#f66}.nvd3.nv-sparklineplus .nv-maxValue{stroke:#2ca02c;fill:#2ca02c}.nvd3.nv-sparklineplus .nv-minValue{stroke:#d62728;fill:#d62728}.nvd3.nv-sparklineplus .nv-currentValue{font-weight:700;font-size:1.1em}.nvd3.nv-stackedarea path.nv-area{fill-opacity:.7;stroke-opacity:0;transition:fill-opacity 250ms linear,stroke-opacity 250ms linear;-moz-transition:fill-opacity 250ms linear,stroke-opacity 250ms linear;-webkit-transition:fill-opacity 250ms linear,stroke-opacity 250ms linear}.nvd3.nv-stackedarea path.nv-area.hover{fill-opacity:.9}.nvd3.nv-stackedarea .nv-groups .nv-point{stroke-opacity:0;fill-opacity:0}.nvtooltip{position:absolute;background-color:rgba(255,255,255,1);color:rgba(0,0,0,1);padding:1px;border:1px solid rgba(0,0,0,.2);z-index:10000;display:block;font-family:Arial;font-size:13px;text-align:left;pointer-events:none;white-space:nowrap;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.nvtooltip{background:rgba(255,255,255,.8);border:1px solid rgba(0,0,0,.5);border-radius:4px}.nvtooltip.with-transitions,.with-transitions .nvtooltip{transition:opacity 50ms linear;-moz-transition:opacity 50ms linear;-webkit-transition:opacity 50ms linear;transition-delay:200ms;-moz-transition-delay:200ms;-webkit-transition-delay:200ms}.nvtooltip.x-nvtooltip,.nvtooltip.y-nvtooltip{padding:8px}.nvtooltip h3{margin:0;padding:4px 14px;line-height:18px;font-weight:400;background-color:rgba(247,247,247,.75);color:rgba(0,0,0,1);text-align:center;border-bottom:1px solid #ebebeb;-webkit-border-radius:5px 5px 0 0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 0}.nvtooltip p{margin:0;padding:5px 14px;text-align:center}.nvtooltip span{display:inline-block;margin:2px 0}.nvtooltip table{margin:6px;border-spacing:0}.nvtooltip table td{padding:2px 9px 2px 0;vertical-align:middle}.nvtooltip table td.key{font-weight:400}.nvtooltip table td.value{text-align:right;font-weight:700}.nvtooltip table tr.highlight td{padding:1px 9px 1px 0;border-bottom-style:solid;border-bottom-width:1px;border-top-style:solid;border-top-width:1px}.nvtooltip table td.legend-color-guide div{width:8px;height:8px;vertical-align:middle}.nvtooltip table td.legend-color-guide div{width:12px;height:12px;border:1px solid #999}.nvtooltip .footer{padding:3px;text-align:center}.nvtooltip-pending-removal{pointer-events:none;display:none}.nvd3 .nv-interactiveGuideLine{pointer-events:none}.nvd3 line.nv-guideline{stroke:#ccc} \ No newline at end of file
diff --git a/wqflask/wqflask/static/new/packages/nvd3/nv.d3.min.js b/wqflask/wqflask/static/new/packages/nvd3/nv.d3.min.js
deleted file mode 100644
index ab17e9fe..00000000
--- a/wqflask/wqflask/static/new/packages/nvd3/nv.d3.min.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/* nvd3 version 1.8.1 (https://github.com/novus/nvd3) 2015-05-25 */
-!function(){var a={};a.dev=!1,a.tooltip=a.tooltip||{},a.utils=a.utils||{},a.models=a.models||{},a.charts={},a.logs={},a.dom={},a.dispatch=d3.dispatch("render_start","render_end"),Function.prototype.bind||(Function.prototype.bind=function(a){if("function"!=typeof this)throw new TypeError("Function.prototype.bind - what is trying to be bound is not callable");var b=Array.prototype.slice.call(arguments,1),c=this,d=function(){},e=function(){return c.apply(this instanceof d&&a?this:a,b.concat(Array.prototype.slice.call(arguments)))};return d.prototype=this.prototype,e.prototype=new d,e}),a.dev&&(a.dispatch.on("render_start",function(b){a.logs.startTime=+new Date}),a.dispatch.on("render_end",function(b){a.logs.endTime=+new Date,a.logs.totalTime=a.logs.endTime-a.logs.startTime,a.log("total",a.logs.totalTime)})),a.log=function(){if(a.dev&&window.console&&console.log&&console.log.apply)console.log.apply(console,arguments);else if(a.dev&&window.console&&"function"==typeof console.log&&Function.prototype.bind){var b=Function.prototype.bind.call(console.log,console);b.apply(console,arguments)}return arguments[arguments.length-1]},a.deprecated=function(a,b){console&&console.warn&&console.warn("nvd3 warning: `"+a+"` has been deprecated. ",b||"")},a.render=function(b){b=b||1,a.render.active=!0,a.dispatch.render_start();var c=function(){for(var d,e,f=0;b>f&&(e=a.render.queue[f]);f++)d=e.generate(),typeof e.callback==typeof Function&&e.callback(d);a.render.queue.splice(0,f),a.render.queue.length?setTimeout(c):(a.dispatch.render_end(),a.render.active=!1)};setTimeout(c)},a.render.active=!1,a.render.queue=[],a.addGraph=function(b){typeof arguments[0]==typeof Function&&(b={generate:arguments[0],callback:arguments[1]}),a.render.queue.push(b),a.render.active||a.render()},"undefined"!=typeof module&&"undefined"!=typeof exports&&(module.exports=a),"undefined"!=typeof window&&(window.nv=a),a.dom.write=function(a){return void 0!==window.fastdom?fastdom.write(a):a()},a.dom.read=function(a){return void 0!==window.fastdom?fastdom.read(a):a()},a.interactiveGuideline=function(){"use strict";function b(l){l.each(function(l){function m(){var a=d3.mouse(this),d=a[0],e=a[1],i=!0,j=!1;if(k&&(d=d3.event.offsetX,e=d3.event.offsetY,"svg"!==d3.event.target.tagName&&(i=!1),d3.event.target.className.baseVal.match("nv-legend")&&(j=!0)),i&&(d-=f.left,e-=f.top),0>d||0>e||d>o||e>p||d3.event.relatedTarget&&void 0===d3.event.relatedTarget.ownerSVGElement||j){if(k&&d3.event.relatedTarget&&void 0===d3.event.relatedTarget.ownerSVGElement&&(void 0===d3.event.relatedTarget.className||d3.event.relatedTarget.className.match(c.nvPointerEventsClass)))return;return h.elementMouseout({mouseX:d,mouseY:e}),b.renderGuideLine(null),void c.hidden(!0)}c.hidden(!1);var l=g.invert(d);h.elementMousemove({mouseX:d,mouseY:e,pointXValue:l}),"dblclick"===d3.event.type&&h.elementDblclick({mouseX:d,mouseY:e,pointXValue:l}),"click"===d3.event.type&&h.elementClick({mouseX:d,mouseY:e,pointXValue:l})}var n=d3.select(this),o=d||960,p=e||400,q=n.selectAll("g.nv-wrap.nv-interactiveLineLayer").data([l]),r=q.enter().append("g").attr("class"," nv-wrap nv-interactiveLineLayer");r.append("g").attr("class","nv-interactiveGuideLine"),j&&(j.on("touchmove",m).on("mousemove",m,!0).on("mouseout",m,!0).on("dblclick",m).on("click",m),b.guideLine=null,b.renderGuideLine=function(c){i&&(b.guideLine&&b.guideLine.attr("x1")===c||a.dom.write(function(){var b=q.select(".nv-interactiveGuideLine").selectAll("line").data(null!=c?[a.utils.NaNtoZero(c)]:[],String);b.enter().append("line").attr("class","nv-guideline").attr("x1",function(a){return a}).attr("x2",function(a){return a}).attr("y1",p).attr("y2",0),b.exit().remove()}))})})}var c=a.models.tooltip();c.duration(0).hideDelay(0)._isInteractiveLayer(!0).hidden(!1);var d=null,e=null,f={left:0,top:0},g=d3.scale.linear(),h=d3.dispatch("elementMousemove","elementMouseout","elementClick","elementDblclick"),i=!0,j=null,k="ActiveXObject"in window;return b.dispatch=h,b.tooltip=c,b.margin=function(a){return arguments.length?(f.top="undefined"!=typeof a.top?a.top:f.top,f.left="undefined"!=typeof a.left?a.left:f.left,b):f},b.width=function(a){return arguments.length?(d=a,b):d},b.height=function(a){return arguments.length?(e=a,b):e},b.xScale=function(a){return arguments.length?(g=a,b):g},b.showGuideLine=function(a){return arguments.length?(i=a,b):i},b.svgContainer=function(a){return arguments.length?(j=a,b):j},b},a.interactiveBisect=function(a,b,c){"use strict";if(!(a instanceof Array))return null;var d;d="function"!=typeof c?function(a){return a.x}:c;var e=function(a,b){return d(a)-b},f=d3.bisector(e).left,g=d3.max([0,f(a,b)-1]),h=d(a[g]);if("undefined"==typeof h&&(h=g),h===b)return g;var i=d3.min([g+1,a.length-1]),j=d(a[i]);return"undefined"==typeof j&&(j=i),Math.abs(j-b)>=Math.abs(h-b)?g:i},a.nearestValueIndex=function(a,b,c){"use strict";var d=1/0,e=null;return a.forEach(function(a,f){var g=Math.abs(b-a);null!=a&&d>=g&&c>g&&(d=g,e=f)}),e},function(){"use strict";a.models.tooltip=function(){function b(){if(k){var a=d3.select(k);"svg"!==a.node().tagName&&(a=a.select("svg"));var b=a.node()?a.attr("viewBox"):null;if(b){b=b.split(" ");var c=parseInt(a.style("width"),10)/b[2];p.left=p.left*c,p.top=p.top*c}}}function c(){if(!n){var a;a=k?k:document.body,n=d3.select(a).append("div").attr("class","nvtooltip "+(j?j:"xy-tooltip")).attr("id",v),n.style("top",0).style("left",0),n.style("opacity",0),n.selectAll("div, table, td, tr").classed(w,!0),n.classed(w,!0),o=n.node()}}function d(){if(r&&B(e)){b();var f=p.left,g=null!==i?i:p.top;return a.dom.write(function(){c();var b=A(e);b&&(o.innerHTML=b),k&&u?a.dom.read(function(){var a=k.getElementsByTagName("svg")[0],b={left:0,top:0};if(a){var c=a.getBoundingClientRect(),d=k.getBoundingClientRect(),e=c.top;if(0>e){var i=k.getBoundingClientRect();e=Math.abs(e)>i.height?0:e}b.top=Math.abs(e-d.top),b.left=Math.abs(c.left-d.left)}f+=k.offsetLeft+b.left-2*k.scrollLeft,g+=k.offsetTop+b.top-2*k.scrollTop,h&&h>0&&(g=Math.floor(g/h)*h),C([f,g])}):C([f,g])}),d}}var e=null,f="w",g=25,h=0,i=null,j=null,k=null,l=!0,m=400,n=null,o=null,p={left:null,top:null},q={left:0,top:0},r=!0,s=100,t=!0,u=!1,v="nvtooltip-"+Math.floor(1e5*Math.random()),w="nv-pointer-events-none",x=function(a,b){return a},y=function(a){return a},z=function(a,b){return a},A=function(a){if(null===a)return"";var b=d3.select(document.createElement("table"));if(t){var c=b.selectAll("thead").data([a]).enter().append("thead");c.append("tr").append("td").attr("colspan",3).append("strong").classed("x-value",!0).html(y(a.value))}var d=b.selectAll("tbody").data([a]).enter().append("tbody"),e=d.selectAll("tr").data(function(a){return a.series}).enter().append("tr").classed("highlight",function(a){return a.highlight});e.append("td").classed("legend-color-guide",!0).append("div").style("background-color",function(a){return a.color}),e.append("td").classed("key",!0).html(function(a,b){return z(a.key,b)}),e.append("td").classed("value",!0).html(function(a,b){return x(a.value,b)}),e.selectAll("td").each(function(a){if(a.highlight){var b=d3.scale.linear().domain([0,1]).range(["#fff",a.color]),c=.6;d3.select(this).style("border-bottom-color",b(c)).style("border-top-color",b(c))}});var f=b.node().outerHTML;return void 0!==a.footer&&(f+="<div class='footer'>"+a.footer+"</div>"),f},B=function(a){if(a&&a.series){if(a.series instanceof Array)return!!a.series.length;if(a.series instanceof Object)return a.series=[a.series],!0}return!1},C=function(b){o&&a.dom.read(function(){var c,d,e=parseInt(o.offsetHeight,10),h=parseInt(o.offsetWidth,10),i=a.utils.windowSize().width,j=a.utils.windowSize().height,k=window.pageYOffset,p=window.pageXOffset;j=window.innerWidth>=document.body.scrollWidth?j:j-16,i=window.innerHeight>=document.body.scrollHeight?i:i-16;var r,t,u=function(a){var b=d;do isNaN(a.offsetTop)||(b+=a.offsetTop),a=a.offsetParent;while(a);return b},v=function(a){var b=c;do isNaN(a.offsetLeft)||(b+=a.offsetLeft),a=a.offsetParent;while(a);return b};switch(f){case"e":c=b[0]-h-g,d=b[1]-e/2,r=v(o),t=u(o),p>r&&(c=b[0]+g>p?b[0]+g:p-r+c),k>t&&(d=k-t+d),t+e>k+j&&(d=k+j-t+d-e);break;case"w":c=b[0]+g,d=b[1]-e/2,r=v(o),t=u(o),r+h>i&&(c=b[0]-h-g),k>t&&(d=k+5),t+e>k+j&&(d=k+j-t+d-e);break;case"n":c=b[0]-h/2-5,d=b[1]+g,r=v(o),t=u(o),p>r&&(c=p+5),r+h>i&&(c=c-h/2+5),t+e>k+j&&(d=k+j-t+d-e);break;case"s":c=b[0]-h/2,d=b[1]-e-g,r=v(o),t=u(o),p>r&&(c=p+5),r+h>i&&(c=c-h/2+5),k>t&&(d=k);break;case"none":c=b[0],d=b[1]-g,r=v(o),t=u(o)}c-=q.left,d-=q.top;var w=o.getBoundingClientRect(),k=window.pageYOffset||document.documentElement.scrollTop,p=window.pageXOffset||document.documentElement.scrollLeft,x="translate("+(w.left+p)+"px, "+(w.top+k)+"px)",y="translate("+c+"px, "+d+"px)",z=d3.interpolateString(x,y),A=n.style("opacity")<.1;l?n.transition().delay(m).duration(0).style("opacity",0):n.interrupt().transition().duration(A?0:s).styleTween("transform",function(a){return z},"important").style("-webkit-transform",y).style("opacity",1)})};return d.nvPointerEventsClass=w,d.options=a.utils.optionsFunc.bind(d),d._options=Object.create({},{duration:{get:function(){return s},set:function(a){s=a}},gravity:{get:function(){return f},set:function(a){f=a}},distance:{get:function(){return g},set:function(a){g=a}},snapDistance:{get:function(){return h},set:function(a){h=a}},classes:{get:function(){return j},set:function(a){j=a}},chartContainer:{get:function(){return k},set:function(a){k=a}},fixedTop:{get:function(){return i},set:function(a){i=a}},enabled:{get:function(){return r},set:function(a){r=a}},hideDelay:{get:function(){return m},set:function(a){m=a}},contentGenerator:{get:function(){return A},set:function(a){A=a}},valueFormatter:{get:function(){return x},set:function(a){x=a}},headerFormatter:{get:function(){return y},set:function(a){y=a}},keyFormatter:{get:function(){return z},set:function(a){z=a}},headerEnabled:{get:function(){return t},set:function(a){t=a}},_isInteractiveLayer:{get:function(){return u},set:function(a){u=!!a}},position:{get:function(){return p},set:function(a){p.left=void 0!==a.left?a.left:p.left,p.top=void 0!==a.top?a.top:p.top}},offset:{get:function(){return q},set:function(a){q.left=void 0!==a.left?a.left:q.left,q.top=void 0!==a.top?a.top:q.top}},hidden:{get:function(){return l},set:function(a){l!=a&&(l=!!a,d())}},data:{get:function(){return e},set:function(a){a.point&&(a.value=a.point.x,a.series=a.series||{},a.series.value=a.point.y,a.series.color=a.point.color||a.series.color),e=a}},tooltipElem:{get:function(){return o},set:function(a){}},id:{get:function(){return v},set:function(a){}}}),a.utils.initOptions(d),d}}(),a.utils.windowSize=function(){var a={width:640,height:480};return window.innerWidth&&window.innerHeight?(a.width=window.innerWidth,a.height=window.innerHeight,a):"CSS1Compat"==document.compatMode&&document.documentElement&&document.documentElement.offsetWidth?(a.width=document.documentElement.offsetWidth,a.height=document.documentElement.offsetHeight,a):document.body&&document.body.offsetWidth?(a.width=document.body.offsetWidth,a.height=document.body.offsetHeight,a):a},a.utils.windowResize=function(b){return window.addEventListener?window.addEventListener("resize",b):a.log("ERROR: Failed to bind to window.resize with: ",b),{callback:b,clear:function(){window.removeEventListener("resize",b)}}},a.utils.getColor=function(b){if(void 0===b)return a.utils.defaultColor();if(Array.isArray(b)){var c=d3.scale.ordinal().range(b);return function(a,b){var d=void 0===b?a:b;return a.color||c(d)}}return b},a.utils.defaultColor=function(){return a.utils.getColor(d3.scale.category20().range())},a.utils.customTheme=function(a,b,c){b=b||function(a){return a.key},c=c||d3.scale.category20().range();var d=c.length;return function(e,f){var g=b(e);return"function"==typeof a[g]?a[g]():void 0!==a[g]?a[g]:(d||(d=c.length),d-=1,c[d])}},a.utils.pjax=function(b,c){var d=function(d){d3.html(d,function(d){var e=d3.select(c).node();e.parentNode.replaceChild(d3.select(d).select(c).node(),e),a.utils.pjax(b,c)})};d3.selectAll(b).on("click",function(){history.pushState(this.href,this.textContent,this.href),d(this.href),d3.event.preventDefault()}),d3.select(window).on("popstate",function(){d3.event.state&&d(d3.event.state)})},a.utils.calcApproxTextWidth=function(a){if("function"==typeof a.style&&"function"==typeof a.text){var b=parseInt(a.style("font-size").replace("px",""),10),c=a.text().length;return c*b*.5}return 0},a.utils.NaNtoZero=function(a){return"number"!=typeof a||isNaN(a)||null===a||a===1/0||a===-(1/0)?0:a},d3.selection.prototype.watchTransition=function(a){var b=[this].concat([].slice.call(arguments,1));return a.transition.apply(a,b)},a.utils.renderWatch=function(b,c){if(!(this instanceof a.utils.renderWatch))return new a.utils.renderWatch(b,c);var d=void 0!==c?c:250,e=[],f=this;this.models=function(a){return a=[].slice.call(arguments,0),a.forEach(function(a){a.__rendered=!1,function(a){a.dispatch.on("renderEnd",function(b){a.__rendered=!0,f.renderEnd("model")})}(a),e.indexOf(a)<0&&e.push(a)}),this},this.reset=function(a){void 0!==a&&(d=a),e=[]},this.transition=function(a,b,c){if(b=arguments.length>1?[].slice.call(arguments,1):[],c=b.length>1?b.pop():void 0!==d?d:250,a.__rendered=!1,e.indexOf(a)<0&&e.push(a),0===c)return a.__rendered=!0,a.delay=function(){return this},a.duration=function(){return this},a;0===a.length?a.__rendered=!0:a.every(function(a){return!a.length})?a.__rendered=!0:a.__rendered=!1;var g=0;return a.transition().duration(c).each(function(){++g}).each("end",function(c,d){0===--g&&(a.__rendered=!0,f.renderEnd.apply(this,b))})},this.renderEnd=function(){e.every(function(a){return a.__rendered})&&(e.forEach(function(a){a.__rendered=!1}),b.renderEnd.apply(this,arguments))}},a.utils.deepExtend=function(b){var c=arguments.length>1?[].slice.call(arguments,1):[];c.forEach(function(c){for(var d in c){var e=b[d]instanceof Array,f="object"==typeof b[d],g="object"==typeof c[d];f&&!e&&g?a.utils.deepExtend(b[d],c[d]):b[d]=c[d]}})},a.utils.state=function(){if(!(this instanceof a.utils.state))return new a.utils.state;var b={},c=function(){},d=function(){return{}},e=null,f=null;this.dispatch=d3.dispatch("change","set"),this.dispatch.on("set",function(a){c(a,!0)}),this.getter=function(a){return d=a,this},this.setter=function(a,b){return b||(b=function(){}),c=function(c,d){a(c),d&&b()},this},this.init=function(b){e=e||{},a.utils.deepExtend(e,b)};var g=function(){var a=d();if(JSON.stringify(a)===JSON.stringify(b))return!1;for(var c in a)void 0===b[c]&&(b[c]={}),b[c]=a[c],f=!0;return!0};this.update=function(){e&&(c(e,!1),e=null),g.call(this)&&this.dispatch.change(b)}},a.utils.optionsFunc=function(a){return a&&d3.map(a).forEach(function(a,b){"function"==typeof this[a]&&this[a](b)}.bind(this)),this},a.utils.calcTicksX=function(b,c){var d=1,e=0;for(e;e<c.length;e+=1){var f=c[e]&&c[e].values?c[e].values.length:0;d=f>d?f:d}return a.log("Requested number of ticks: ",b),a.log("Calculated max values to be: ",d),b=b>d?b=d-1:b,b=1>b?1:b,b=Math.floor(b),a.log("Calculating tick count as: ",b),b},a.utils.calcTicksY=function(b,c){return a.utils.calcTicksX(b,c)},a.utils.initOption=function(a,b){a._calls&&a._calls[b]?a[b]=a._calls[b]:(a[b]=function(c){return arguments.length?(a._overrides[b]=!0,a._options[b]=c,a):a._options[b]},a["_"+b]=function(c){return arguments.length?(a._overrides[b]||(a._options[b]=c),a):a._options[b]})},a.utils.initOptions=function(b){b._overrides=b._overrides||{};var c=Object.getOwnPropertyNames(b._options||{}),d=Object.getOwnPropertyNames(b._calls||{});c=c.concat(d);for(var e in c)a.utils.initOption(b,c[e])},a.utils.inheritOptionsD3=function(a,b,c){a._d3options=c.concat(a._d3options||[]),c.unshift(b),c.unshift(a),d3.rebind.apply(this,c)},a.utils.arrayUnique=function(a){return a.sort().filter(function(b,c){return!c||b!=a[c-1]})},a.utils.symbolMap=d3.map(),a.utils.symbol=function(){function b(b,e){var f=c.call(this,b,e),g=d.call(this,b,e);return-1!==d3.svg.symbolTypes.indexOf(f)?d3.svg.symbol().type(f).size(g)():a.utils.symbolMap.get(f)(g)}var c,d=64;return b.type=function(a){return arguments.length?(c=d3.functor(a),b):c},b.size=function(a){return arguments.length?(d=d3.functor(a),b):d},b},a.utils.inheritOptions=function(b,c){var d=Object.getOwnPropertyNames(c._options||{}),e=Object.getOwnPropertyNames(c._calls||{}),f=c._inherited||[],g=c._d3options||[],h=d.concat(e).concat(f).concat(g);h.unshift(c),h.unshift(b),d3.rebind.apply(this,h),b._inherited=a.utils.arrayUnique(d.concat(e).concat(f).concat(d).concat(b._inherited||[])),b._d3options=a.utils.arrayUnique(g.concat(b._d3options||[]))},a.utils.initSVG=function(a){a.classed({"nvd3-svg":!0})},a.utils.sanitizeHeight=function(a,b){return a||parseInt(b.style("height"),10)||400},a.utils.sanitizeWidth=function(a,b){return a||parseInt(b.style("width"),10)||960},a.utils.availableHeight=function(b,c,d){return a.utils.sanitizeHeight(b,c)-d.top-d.bottom},a.utils.availableWidth=function(b,c,d){return a.utils.sanitizeWidth(b,c)-d.left-d.right},a.utils.noData=function(b,c){var d=b.options(),e=d.margin(),f=d.noData(),g=null==f?["No Data Available."]:[f],h=a.utils.availableHeight(d.height(),c,e),i=a.utils.availableWidth(d.width(),c,e),j=e.left+i/2,k=e.top+h/2;c.selectAll("g").remove();var l=c.selectAll(".nv-noData").data(g);l.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),l.attr("x",j).attr("y",k).text(function(a){return a})},a.models.axis=function(){"use strict";function b(g){return s.reset(),g.each(function(b){var g=d3.select(this);a.utils.initSVG(g);var p=g.selectAll("g.nv-wrap.nv-axis").data([b]),q=p.enter().append("g").attr("class","nvd3 nv-wrap nv-axis"),t=(q.append("g"),p.select("g"));null!==n?c.ticks(n):("top"==c.orient()||"bottom"==c.orient())&&c.ticks(Math.abs(d.range()[1]-d.range()[0])/100),t.watchTransition(s,"axis").call(c),r=r||c.scale();var u=c.tickFormat();null==u&&(u=r.tickFormat());var v=t.selectAll("text.nv-axislabel").data([h||null]);v.exit().remove();var w,x,y;switch(c.orient()){case"top":v.enter().append("text").attr("class","nv-axislabel"),y=d.range().length<2?0:2===d.range().length?d.range()[1]:d.range()[d.range().length-1]+(d.range()[1]-d.range()[0]),v.attr("text-anchor","middle").attr("y",0).attr("x",y/2),i&&(x=p.selectAll("g.nv-axisMaxMin").data(d.domain()),x.enter().append("g").attr("class",function(a,b){return["nv-axisMaxMin","nv-axisMaxMin-x",0==b?"nv-axisMin-x":"nv-axisMax-x"].join(" ")}).append("text"),x.exit().remove(),x.attr("transform",function(b,c){return"translate("+a.utils.NaNtoZero(d(b))+",0)"}).select("text").attr("dy","-0.5em").attr("y",-c.tickPadding()).attr("text-anchor","middle").text(function(a,b){var c=u(a);return(""+c).match("NaN")?"":c}),x.watchTransition(s,"min-max top").attr("transform",function(b,c){return"translate("+a.utils.NaNtoZero(d.range()[c])+",0)"}));break;case"bottom":w=o+36;var z=30,A=0,B=t.selectAll("g").select("text"),C="";if(j%360){B.each(function(a,b){var c=this.getBoundingClientRect(),d=c.width;A=c.height,d>z&&(z=d)}),C="rotate("+j+" 0,"+(A/2+c.tickPadding())+")";var D=Math.abs(Math.sin(j*Math.PI/180));w=(D?D*z:z)+30,B.attr("transform",C).style("text-anchor",j%360>0?"start":"end")}v.enter().append("text").attr("class","nv-axislabel"),y=d.range().length<2?0:2===d.range().length?d.range()[1]:d.range()[d.range().length-1]+(d.range()[1]-d.range()[0]),v.attr("text-anchor","middle").attr("y",w).attr("x",y/2),i&&(x=p.selectAll("g.nv-axisMaxMin").data([d.domain()[0],d.domain()[d.domain().length-1]]),x.enter().append("g").attr("class",function(a,b){return["nv-axisMaxMin","nv-axisMaxMin-x",0==b?"nv-axisMin-x":"nv-axisMax-x"].join(" ")}).append("text"),x.exit().remove(),x.attr("transform",function(b,c){return"translate("+a.utils.NaNtoZero(d(b)+(m?d.rangeBand()/2:0))+",0)"}).select("text").attr("dy",".71em").attr("y",c.tickPadding()).attr("transform",C).style("text-anchor",j?j%360>0?"start":"end":"middle").text(function(a,b){var c=u(a);return(""+c).match("NaN")?"":c}),x.watchTransition(s,"min-max bottom").attr("transform",function(b,c){return"translate("+a.utils.NaNtoZero(d(b)+(m?d.rangeBand()/2:0))+",0)"})),l&&B.attr("transform",function(a,b){return"translate(0,"+(b%2==0?"0":"12")+")"});break;case"right":v.enter().append("text").attr("class","nv-axislabel"),v.style("text-anchor",k?"middle":"begin").attr("transform",k?"rotate(90)":"").attr("y",k?-Math.max(e.right,f)+12:-10).attr("x",k?d3.max(d.range())/2:c.tickPadding()),i&&(x=p.selectAll("g.nv-axisMaxMin").data(d.domain()),x.enter().append("g").attr("class",function(a,b){return["nv-axisMaxMin","nv-axisMaxMin-y",0==b?"nv-axisMin-y":"nv-axisMax-y"].join(" ")}).append("text").style("opacity",0),x.exit().remove(),x.attr("transform",function(b,c){return"translate(0,"+a.utils.NaNtoZero(d(b))+")"}).select("text").attr("dy",".32em").attr("y",0).attr("x",c.tickPadding()).style("text-anchor","start").text(function(a,b){var c=u(a);return(""+c).match("NaN")?"":c}),x.watchTransition(s,"min-max right").attr("transform",function(b,c){return"translate(0,"+a.utils.NaNtoZero(d.range()[c])+")"}).select("text").style("opacity",1));break;case"left":v.enter().append("text").attr("class","nv-axislabel"),v.style("text-anchor",k?"middle":"end").attr("transform",k?"rotate(-90)":"").attr("y",k?-Math.max(e.left,f)+25-(o||0):-10).attr("x",k?-d3.max(d.range())/2:-c.tickPadding()),i&&(x=p.selectAll("g.nv-axisMaxMin").data(d.domain()),x.enter().append("g").attr("class",function(a,b){return["nv-axisMaxMin","nv-axisMaxMin-y",0==b?"nv-axisMin-y":"nv-axisMax-y"].join(" ")}).append("text").style("opacity",0),x.exit().remove(),x.attr("transform",function(b,c){return"translate(0,"+a.utils.NaNtoZero(r(b))+")"}).select("text").attr("dy",".32em").attr("y",0).attr("x",-c.tickPadding()).attr("text-anchor","end").text(function(a,b){var c=u(a);return(""+c).match("NaN")?"":c}),x.watchTransition(s,"min-max right").attr("transform",function(b,c){return"translate(0,"+a.utils.NaNtoZero(d.range()[c])+")"}).select("text").style("opacity",1))}if(v.text(function(a){return a}),!i||"left"!==c.orient()&&"right"!==c.orient()||(t.selectAll("g").each(function(a,b){d3.select(this).select("text").attr("opacity",1),(d(a)<d.range()[1]+10||d(a)>d.range()[0]-10)&&((a>1e-10||-1e-10>a)&&d3.select(this).attr("opacity",0),d3.select(this).select("text").attr("opacity",0))}),d.domain()[0]==d.domain()[1]&&0==d.domain()[0]&&p.selectAll("g.nv-axisMaxMin").style("opacity",function(a,b){return b?0:1})),i&&("top"===c.orient()||"bottom"===c.orient())){var E=[];p.selectAll("g.nv-axisMaxMin").each(function(a,b){try{b?E.push(d(a)-this.getBoundingClientRect().width-4):E.push(d(a)+this.getBoundingClientRect().width+4)}catch(c){b?E.push(d(a)-4):E.push(d(a)+4)}}),t.selectAll("g").each(function(a,b){(d(a)<E[0]||d(a)>E[1])&&(a>1e-10||-1e-10>a?d3.select(this).remove():d3.select(this).select("text").remove())})}t.selectAll(".tick").filter(function(a){return!parseFloat(Math.round(1e5*a)/1e6)&&void 0!==a}).classed("zero",!0),r=d.copy()}),s.renderEnd("axis immediate"),b}var c=d3.svg.axis(),d=d3.scale.linear(),e={top:0,right:0,bottom:0,left:0},f=75,g=60,h=null,i=!0,j=0,k=!0,l=!1,m=!1,n=null,o=0,p=250,q=d3.dispatch("renderEnd");c.scale(d).orient("bottom").tickFormat(function(a){return a});var r,s=a.utils.renderWatch(q,p);return b.axis=c,b.dispatch=q,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{axisLabelDistance:{get:function(){return o},set:function(a){o=a}},staggerLabels:{get:function(){return l},set:function(a){l=a}},rotateLabels:{get:function(){return j},set:function(a){j=a}},rotateYLabel:{get:function(){return k},set:function(a){k=a}},showMaxMin:{get:function(){return i},set:function(a){i=a}},axisLabel:{get:function(){return h},set:function(a){h=a}},height:{get:function(){return g},set:function(a){g=a}},ticks:{get:function(){return n},set:function(a){n=a}},width:{get:function(){return f},set:function(a){f=a}},margin:{get:function(){return e},set:function(a){e.top=void 0!==a.top?a.top:e.top,e.right=void 0!==a.right?a.right:e.right,e.bottom=void 0!==a.bottom?a.bottom:e.bottom,e.left=void 0!==a.left?a.left:e.left}},duration:{get:function(){return p},set:function(a){p=a,s.reset(p)}},scale:{get:function(){return d},set:function(e){d=e,c.scale(d),m="function"==typeof d.rangeBands,a.utils.inheritOptionsD3(b,d,["domain","range","rangeBand","rangeBands"])}}}),a.utils.initOptions(b),a.utils.inheritOptionsD3(b,c,["orient","tickValues","tickSubdivide","tickSize","tickPadding","tickFormat"]),a.utils.inheritOptionsD3(b,d,["domain","range","rangeBand","rangeBands"]),b},a.models.boxPlot=function(){"use strict";function b(l){return v.reset(),l.each(function(b){var l=j-i.left-i.right,p=k-i.top-i.bottom;r=d3.select(this),a.utils.initSVG(r),m.domain(c||b.map(function(a,b){return o(a,b)})).rangeBands(e||[0,l],.1);var w=[];if(!d){var x=d3.min(b.map(function(a){var b=[];return b.push(a.values.Q1),a.values.hasOwnProperty("whisker_low")&&null!==a.values.whisker_low&&b.push(a.values.whisker_low),a.values.hasOwnProperty("outliers")&&null!==a.values.outliers&&(b=b.concat(a.values.outliers)),d3.min(b)})),y=d3.max(b.map(function(a){var b=[];return b.push(a.values.Q3),a.values.hasOwnProperty("whisker_high")&&null!==a.values.whisker_high&&b.push(a.values.whisker_high),a.values.hasOwnProperty("outliers")&&null!==a.values.outliers&&(b=b.concat(a.values.outliers)),d3.max(b)}));w=[x,y]}n.domain(d||w),n.range(f||[p,0]),g=g||m,h=h||n.copy().range([n(0),n(0)]);var z=r.selectAll("g.nv-wrap").data([b]);z.enter().append("g").attr("class","nvd3 nv-wrap");z.attr("transform","translate("+i.left+","+i.top+")");var A=z.selectAll(".nv-boxplot").data(function(a){return a}),B=A.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6);A.attr("class","nv-boxplot").attr("transform",function(a,b,c){return"translate("+(m(o(a,b))+.05*m.rangeBand())+", 0)"}).classed("hover",function(a){return a.hover}),A.watchTransition(v,"nv-boxplot: boxplots").style("stroke-opacity",1).style("fill-opacity",.75).delay(function(a,c){return c*t/b.length}).attr("transform",function(a,b){return"translate("+(m(o(a,b))+.05*m.rangeBand())+", 0)"}),A.exit().remove(),B.each(function(a,b){var c=d3.select(this);["low","high"].forEach(function(d){a.values.hasOwnProperty("whisker_"+d)&&null!==a.values["whisker_"+d]&&(c.append("line").style("stroke",a.color?a.color:q(a,b)).attr("class","nv-boxplot-whisker nv-boxplot-"+d),c.append("line").style("stroke",a.color?a.color:q(a,b)).attr("class","nv-boxplot-tick nv-boxplot-"+d))})});var C=A.selectAll(".nv-boxplot-outlier").data(function(a){return a.values.hasOwnProperty("outliers")&&null!==a.values.outliers?a.values.outliers:[]});C.enter().append("circle").style("fill",function(a,b,c){return q(a,c)}).style("stroke",function(a,b,c){return q(a,c)}).on("mouseover",function(a,b,c){d3.select(this).classed("hover",!0),s.elementMouseover({series:{key:a,color:q(a,c)},e:d3.event})}).on("mouseout",function(a,b,c){d3.select(this).classed("hover",!1),s.elementMouseout({series:{key:a,color:q(a,c)},e:d3.event})}).on("mousemove",function(a,b){s.elementMousemove({e:d3.event})}),C.attr("class","nv-boxplot-outlier"),C.watchTransition(v,"nv-boxplot: nv-boxplot-outlier").attr("cx",.45*m.rangeBand()).attr("cy",function(a,b,c){return n(a)}).attr("r","3"),C.exit().remove();var D=function(){return null===u?.9*m.rangeBand():Math.min(75,.9*m.rangeBand())},E=function(){return.45*m.rangeBand()-D()/2},F=function(){return.45*m.rangeBand()+D()/2};["low","high"].forEach(function(a){var b="low"===a?"Q1":"Q3";A.select("line.nv-boxplot-whisker.nv-boxplot-"+a).watchTransition(v,"nv-boxplot: boxplots").attr("x1",.45*m.rangeBand()).attr("y1",function(b,c){return n(b.values["whisker_"+a])}).attr("x2",.45*m.rangeBand()).attr("y2",function(a,c){return n(a.values[b])}),A.select("line.nv-boxplot-tick.nv-boxplot-"+a).watchTransition(v,"nv-boxplot: boxplots").attr("x1",E).attr("y1",function(b,c){return n(b.values["whisker_"+a])}).attr("x2",F).attr("y2",function(b,c){return n(b.values["whisker_"+a])})}),["low","high"].forEach(function(a){B.selectAll(".nv-boxplot-"+a).on("mouseover",function(b,c,d){d3.select(this).classed("hover",!0),s.elementMouseover({series:{key:b.values["whisker_"+a],color:q(b,d)},e:d3.event})}).on("mouseout",function(b,c,d){d3.select(this).classed("hover",!1),s.elementMouseout({series:{key:b.values["whisker_"+a],color:q(b,d)},e:d3.event})}).on("mousemove",function(a,b){s.elementMousemove({e:d3.event})})}),B.append("rect").attr("class","nv-boxplot-box").on("mouseover",function(a,b){d3.select(this).classed("hover",!0),s.elementMouseover({key:a.label,value:a.label,series:[{key:"Q3",value:a.values.Q3,color:a.color||q(a,b)},{key:"Q2",value:a.values.Q2,color:a.color||q(a,b)},{key:"Q1",value:a.values.Q1,color:a.color||q(a,b)}],data:a,index:b,e:d3.event})}).on("mouseout",function(a,b){d3.select(this).classed("hover",!1),s.elementMouseout({key:a.label,value:a.label,series:[{key:"Q3",value:a.values.Q3,color:a.color||q(a,b)},{key:"Q2",value:a.values.Q2,color:a.color||q(a,b)},{key:"Q1",value:a.values.Q1,color:a.color||q(a,b)}],data:a,index:b,e:d3.event})}).on("mousemove",function(a,b){s.elementMousemove({e:d3.event})}),A.select("rect.nv-boxplot-box").watchTransition(v,"nv-boxplot: boxes").attr("y",function(a,b){return n(a.values.Q3)}).attr("width",D).attr("x",E).attr("height",function(a,b){return Math.abs(n(a.values.Q3)-n(a.values.Q1))||1}).style("fill",function(a,b){return a.color||q(a,b)}).style("stroke",function(a,b){return a.color||q(a,b)}),B.append("line").attr("class","nv-boxplot-median"),A.select("line.nv-boxplot-median").watchTransition(v,"nv-boxplot: boxplots line").attr("x1",E).attr("y1",function(a,b){return n(a.values.Q2)}).attr("x2",F).attr("y2",function(a,b){return n(a.values.Q2)}),g=m.copy(),h=n.copy()}),v.renderEnd("nv-boxplot immediate"),b}var c,d,e,f,g,h,i={top:0,right:0,bottom:0,left:0},j=960,k=500,l=Math.floor(1e4*Math.random()),m=d3.scale.ordinal(),n=d3.scale.linear(),o=function(a){return a.x},p=function(a){return a.y},q=a.utils.defaultColor(),r=null,s=d3.dispatch("elementMouseover","elementMouseout","elementMousemove","renderEnd"),t=250,u=null,v=a.utils.renderWatch(s,t);return b.dispatch=s,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return j},set:function(a){j=a}},height:{get:function(){return k},set:function(a){k=a}},maxBoxWidth:{get:function(){return u},set:function(a){u=a}},x:{get:function(){return o},set:function(a){o=a}},y:{get:function(){return p},set:function(a){p=a}},xScale:{get:function(){return m},set:function(a){m=a}},yScale:{get:function(){return n},set:function(a){n=a}},xDomain:{get:function(){return c},set:function(a){c=a}},yDomain:{get:function(){return d},set:function(a){d=a}},xRange:{get:function(){return e},set:function(a){e=a}},yRange:{get:function(){return f},set:function(a){f=a}},id:{get:function(){return l},set:function(a){l=a}},margin:{get:function(){return i},set:function(a){i.top=void 0!==a.top?a.top:i.top,i.right=void 0!==a.right?a.right:i.right,i.bottom=void 0!==a.bottom?a.bottom:i.bottom,i.left=void 0!==a.left?a.left:i.left}},color:{get:function(){return q},set:function(b){q=a.utils.getColor(b)}},duration:{get:function(){return t},set:function(a){t=a,v.reset(t)}}}),a.utils.initOptions(b),b},a.models.boxPlotChart=function(){"use strict";function b(k){return t.reset(),t.models(e),l&&t.models(f),m&&t.models(g),k.each(function(k){var p=d3.select(this);a.utils.initSVG(p);var t=(i||parseInt(p.style("width"))||960)-h.left-h.right,u=(j||parseInt(p.style("height"))||400)-h.top-h.bottom;if(b.update=function(){r.beforeUpdate(),p.transition().duration(s).call(b)},b.container=this,!(k&&k.length&&k.filter(function(a){return a.values.hasOwnProperty("Q1")&&a.values.hasOwnProperty("Q2")&&a.values.hasOwnProperty("Q3")}).length)){var v=p.selectAll(".nv-noData").data([q]);return v.enter().append("text").attr("class","nvd3 nv-noData").attr("dy","-.7em").style("text-anchor","middle"),v.attr("x",h.left+t/2).attr("y",h.top+u/2).text(function(a){return a}),b}p.selectAll(".nv-noData").remove(),
-c=e.xScale(),d=e.yScale().clamp(!0);var w=p.selectAll("g.nv-wrap.nv-boxPlotWithAxes").data([k]),x=w.enter().append("g").attr("class","nvd3 nv-wrap nv-boxPlotWithAxes").append("g"),y=x.append("defs"),z=w.select("g");x.append("g").attr("class","nv-x nv-axis"),x.append("g").attr("class","nv-y nv-axis").append("g").attr("class","nv-zeroLine").append("line"),x.append("g").attr("class","nv-barsWrap"),z.attr("transform","translate("+h.left+","+h.top+")"),n&&z.select(".nv-y.nv-axis").attr("transform","translate("+t+",0)"),e.width(t).height(u);var A=z.select(".nv-barsWrap").datum(k.filter(function(a){return!a.disabled}));if(A.transition().call(e),y.append("clipPath").attr("id","nv-x-label-clip-"+e.id()).append("rect"),z.select("#nv-x-label-clip-"+e.id()+" rect").attr("width",c.rangeBand()*(o?2:1)).attr("height",16).attr("x",-c.rangeBand()/(o?1:2)),l){f.scale(c).ticks(a.utils.calcTicksX(t/100,k)).tickSize(-u,0),z.select(".nv-x.nv-axis").attr("transform","translate(0,"+d.range()[0]+")"),z.select(".nv-x.nv-axis").call(f);var B=z.select(".nv-x.nv-axis").selectAll("g");o&&B.selectAll("text").attr("transform",function(a,b,c){return"translate(0,"+(c%2==0?"5":"17")+")"})}m&&(g.scale(d).ticks(Math.floor(u/36)).tickSize(-t,0),z.select(".nv-y.nv-axis").call(g)),z.select(".nv-zeroLine line").attr("x1",0).attr("x2",t).attr("y1",d(0)).attr("y2",d(0))}),t.renderEnd("nv-boxplot chart immediate"),b}var c,d,e=a.models.boxPlot(),f=a.models.axis(),g=a.models.axis(),h={top:15,right:10,bottom:50,left:60},i=null,j=null,k=a.utils.getColor(),l=!0,m=!0,n=!1,o=!1,p=a.models.tooltip(),q="No Data Available.",r=d3.dispatch("tooltipShow","tooltipHide","beforeUpdate","renderEnd"),s=250;f.orient("bottom").showMaxMin(!1).tickFormat(function(a){return a}),g.orient(n?"right":"left").tickFormat(d3.format(",.1f")),p.duration(0);var t=a.utils.renderWatch(r,s);return e.dispatch.on("elementMouseover.tooltip",function(a){p.data(a).hidden(!1)}),e.dispatch.on("elementMouseout.tooltip",function(a){p.data(a).hidden(!0)}),e.dispatch.on("elementMousemove.tooltip",function(a){p.position({top:d3.event.pageY,left:d3.event.pageX})()}),b.dispatch=r,b.boxplot=e,b.xAxis=f,b.yAxis=g,b.tooltip=p,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return i},set:function(a){i=a}},height:{get:function(){return j},set:function(a){j=a}},staggerLabels:{get:function(){return o},set:function(a){o=a}},showXAxis:{get:function(){return l},set:function(a){l=a}},showYAxis:{get:function(){return m},set:function(a){m=a}},tooltips:{get:function(){return tooltips},set:function(a){tooltips=a}},tooltipContent:{get:function(){return p},set:function(a){p=a}},noData:{get:function(){return q},set:function(a){q=a}},margin:{get:function(){return h},set:function(a){h.top=void 0!==a.top?a.top:h.top,h.right=void 0!==a.right?a.right:h.right,h.bottom=void 0!==a.bottom?a.bottom:h.bottom,h.left=void 0!==a.left?a.left:h.left}},duration:{get:function(){return s},set:function(a){s=a,t.reset(s),e.duration(s),f.duration(s),g.duration(s)}},color:{get:function(){return k},set:function(b){k=a.utils.getColor(b),e.color(k)}},rightAlignYAxis:{get:function(){return n},set:function(a){n=a,g.orient(a?"right":"left")}}}),a.utils.inheritOptions(b,e),a.utils.initOptions(b),b},a.models.bullet=function(){"use strict";function b(d){return d.each(function(b,d){var p=m-c.left-c.right,s=n-c.top-c.bottom;o=d3.select(this),a.utils.initSVG(o);var t=f.call(this,b,d).slice().sort(d3.descending),u=g.call(this,b,d).slice().sort(d3.descending),v=h.call(this,b,d).slice().sort(d3.descending),w=i.call(this,b,d).slice(),x=j.call(this,b,d).slice(),y=k.call(this,b,d).slice(),z=d3.scale.linear().domain(d3.extent(d3.merge([l,t]))).range(e?[p,0]:[0,p]);this.__chart__||d3.scale.linear().domain([0,1/0]).range(z.range());this.__chart__=z;var A=d3.min(t),B=d3.max(t),C=t[1],D=o.selectAll("g.nv-wrap.nv-bullet").data([b]),E=D.enter().append("g").attr("class","nvd3 nv-wrap nv-bullet"),F=E.append("g"),G=D.select("g");F.append("rect").attr("class","nv-range nv-rangeMax"),F.append("rect").attr("class","nv-range nv-rangeAvg"),F.append("rect").attr("class","nv-range nv-rangeMin"),F.append("rect").attr("class","nv-measure"),D.attr("transform","translate("+c.left+","+c.top+")");var H=function(a){return Math.abs(z(a)-z(0))},I=function(a){return z(0>a?a:0)};G.select("rect.nv-rangeMax").attr("height",s).attr("width",H(B>0?B:A)).attr("x",I(B>0?B:A)).datum(B>0?B:A),G.select("rect.nv-rangeAvg").attr("height",s).attr("width",H(C)).attr("x",I(C)).datum(C),G.select("rect.nv-rangeMin").attr("height",s).attr("width",H(B)).attr("x",I(B)).attr("width",H(B>0?A:B)).attr("x",I(B>0?A:B)).datum(B>0?A:B),G.select("rect.nv-measure").style("fill",q).attr("height",s/3).attr("y",s/3).attr("width",0>v?z(0)-z(v[0]):z(v[0])-z(0)).attr("x",I(v)).on("mouseover",function(){r.elementMouseover({value:v[0],label:y[0]||"Current",color:d3.select(this).style("fill")})}).on("mousemove",function(){r.elementMousemove({value:v[0],label:y[0]||"Current",color:d3.select(this).style("fill")})}).on("mouseout",function(){r.elementMouseout({value:v[0],label:y[0]||"Current",color:d3.select(this).style("fill")})});var J=s/6,K=u.map(function(a,b){return{value:a,label:x[b]}});F.selectAll("path.nv-markerTriangle").data(K).enter().append("path").attr("class","nv-markerTriangle").attr("transform",function(a){return"translate("+z(a.value)+","+s/2+")"}).attr("d","M0,"+J+"L"+J+","+-J+" "+-J+","+-J+"Z").on("mouseover",function(a){r.elementMouseover({value:a.value,label:a.label||"Previous",color:d3.select(this).style("fill"),pos:[z(a.value),s/2]})}).on("mousemove",function(a){r.elementMousemove({value:a.value,label:a.label||"Previous",color:d3.select(this).style("fill")})}).on("mouseout",function(a,b){r.elementMouseout({value:a.value,label:a.label||"Previous",color:d3.select(this).style("fill")})}),D.selectAll(".nv-range").on("mouseover",function(a,b){var c=w[b]||(b?1==b?"Mean":"Minimum":"Maximum");r.elementMouseover({value:a,label:c,color:d3.select(this).style("fill")})}).on("mousemove",function(){r.elementMousemove({value:v[0],label:y[0]||"Previous",color:d3.select(this).style("fill")})}).on("mouseout",function(a,b){var c=w[b]||(b?1==b?"Mean":"Minimum":"Maximum");r.elementMouseout({value:a,label:c,color:d3.select(this).style("fill")})})}),b}var c={top:0,right:0,bottom:0,left:0},d="left",e=!1,f=function(a){return a.ranges},g=function(a){return a.markers?a.markers:[0]},h=function(a){return a.measures},i=function(a){return a.rangeLabels?a.rangeLabels:[]},j=function(a){return a.markerLabels?a.markerLabels:[]},k=function(a){return a.measureLabels?a.measureLabels:[]},l=[0],m=380,n=30,o=null,p=null,q=a.utils.getColor(["#1f77b4"]),r=d3.dispatch("elementMouseover","elementMouseout","elementMousemove");return b.dispatch=r,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{ranges:{get:function(){return f},set:function(a){f=a}},markers:{get:function(){return g},set:function(a){g=a}},measures:{get:function(){return h},set:function(a){h=a}},forceX:{get:function(){return l},set:function(a){l=a}},width:{get:function(){return m},set:function(a){m=a}},height:{get:function(){return n},set:function(a){n=a}},tickFormat:{get:function(){return p},set:function(a){p=a}},margin:{get:function(){return c},set:function(a){c.top=void 0!==a.top?a.top:c.top,c.right=void 0!==a.right?a.right:c.right,c.bottom=void 0!==a.bottom?a.bottom:c.bottom,c.left=void 0!==a.left?a.left:c.left}},orient:{get:function(){return d},set:function(a){d=a,e="right"==d||"bottom"==d}},color:{get:function(){return q},set:function(b){q=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.bulletChart=function(){"use strict";function b(d){return d.each(function(e,o){var p=d3.select(this);a.utils.initSVG(p);var q=a.utils.availableWidth(k,p,g),r=l-g.top-g.bottom;if(b.update=function(){b(d)},b.container=this,!e||!h.call(this,e,o))return a.utils.noData(b,p),b;p.selectAll(".nv-noData").remove();var s=h.call(this,e,o).slice().sort(d3.descending),t=i.call(this,e,o).slice().sort(d3.descending),u=j.call(this,e,o).slice().sort(d3.descending),v=p.selectAll("g.nv-wrap.nv-bulletChart").data([e]),w=v.enter().append("g").attr("class","nvd3 nv-wrap nv-bulletChart"),x=w.append("g"),y=v.select("g");x.append("g").attr("class","nv-bulletWrap"),x.append("g").attr("class","nv-titles"),v.attr("transform","translate("+g.left+","+g.top+")");var z=d3.scale.linear().domain([0,Math.max(s[0],t[0],u[0])]).range(f?[q,0]:[0,q]),A=this.__chart__||d3.scale.linear().domain([0,1/0]).range(z.range());this.__chart__=z;var B=x.select(".nv-titles").append("g").attr("text-anchor","end").attr("transform","translate(-6,"+(l-g.top-g.bottom)/2+")");B.append("text").attr("class","nv-title").text(function(a){return a.title}),B.append("text").attr("class","nv-subtitle").attr("dy","1em").text(function(a){return a.subtitle}),c.width(q).height(r);var C=y.select(".nv-bulletWrap");d3.transition(C).call(c);var D=m||z.tickFormat(q/100),E=y.selectAll("g.nv-tick").data(z.ticks(n?n:q/50),function(a){return this.textContent||D(a)}),F=E.enter().append("g").attr("class","nv-tick").attr("transform",function(a){return"translate("+A(a)+",0)"}).style("opacity",1e-6);F.append("line").attr("y1",r).attr("y2",7*r/6),F.append("text").attr("text-anchor","middle").attr("dy","1em").attr("y",7*r/6).text(D);var G=d3.transition(E).attr("transform",function(a){return"translate("+z(a)+",0)"}).style("opacity",1);G.select("line").attr("y1",r).attr("y2",7*r/6),G.select("text").attr("y",7*r/6),d3.transition(E.exit()).attr("transform",function(a){return"translate("+z(a)+",0)"}).style("opacity",1e-6).remove()}),d3.timer.flush(),b}var c=a.models.bullet(),d=a.models.tooltip(),e="left",f=!1,g={top:5,right:40,bottom:20,left:120},h=function(a){return a.ranges},i=function(a){return a.markers?a.markers:[0]},j=function(a){return a.measures},k=null,l=55,m=null,n=null,o=null,p=d3.dispatch("tooltipShow","tooltipHide");return d.duration(0).headerEnabled(!1),c.dispatch.on("elementMouseover.tooltip",function(a){a.series={key:a.label,value:a.value,color:a.color},d.data(a).hidden(!1)}),c.dispatch.on("elementMouseout.tooltip",function(a){d.hidden(!0)}),c.dispatch.on("elementMousemove.tooltip",function(a){d.position({top:d3.event.pageY,left:d3.event.pageX})()}),b.bullet=c,b.dispatch=p,b.tooltip=d,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{ranges:{get:function(){return h},set:function(a){h=a}},markers:{get:function(){return i},set:function(a){i=a}},measures:{get:function(){return j},set:function(a){j=a}},width:{get:function(){return k},set:function(a){k=a}},height:{get:function(){return l},set:function(a){l=a}},tickFormat:{get:function(){return m},set:function(a){m=a}},ticks:{get:function(){return n},set:function(a){n=a}},noData:{get:function(){return o},set:function(a){o=a}},tooltips:{get:function(){return d.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),d.enabled(!!b)}},tooltipContent:{get:function(){return d.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),d.contentGenerator(b)}},margin:{get:function(){return g},set:function(a){g.top=void 0!==a.top?a.top:g.top,g.right=void 0!==a.right?a.right:g.right,g.bottom=void 0!==a.bottom?a.bottom:g.bottom,g.left=void 0!==a.left?a.left:g.left}},orient:{get:function(){return e},set:function(a){e=a,f="right"==e||"bottom"==e}}}),a.utils.inheritOptions(b,c),a.utils.initOptions(b),b},a.models.candlestickBar=function(){"use strict";function b(x){return x.each(function(b){c=d3.select(this);var x=a.utils.availableWidth(i,c,h),y=a.utils.availableHeight(j,c,h);a.utils.initSVG(c);var A=x/b[0].values.length*.45;l.domain(d||d3.extent(b[0].values.map(n).concat(t))),v?l.range(f||[.5*x/b[0].values.length,x*(b[0].values.length-.5)/b[0].values.length]):l.range(f||[5+A/2,x-A/2-5]),m.domain(e||[d3.min(b[0].values.map(s).concat(u)),d3.max(b[0].values.map(r).concat(u))]).range(g||[y,0]),l.domain()[0]===l.domain()[1]&&(l.domain()[0]?l.domain([l.domain()[0]-.01*l.domain()[0],l.domain()[1]+.01*l.domain()[1]]):l.domain([-1,1])),m.domain()[0]===m.domain()[1]&&(m.domain()[0]?m.domain([m.domain()[0]+.01*m.domain()[0],m.domain()[1]-.01*m.domain()[1]]):m.domain([-1,1]));var B=d3.select(this).selectAll("g.nv-wrap.nv-candlestickBar").data([b[0].values]),C=B.enter().append("g").attr("class","nvd3 nv-wrap nv-candlestickBar"),D=C.append("defs"),E=C.append("g"),F=B.select("g");E.append("g").attr("class","nv-ticks"),B.attr("transform","translate("+h.left+","+h.top+")"),c.on("click",function(a,b){z.chartClick({data:a,index:b,pos:d3.event,id:k})}),D.append("clipPath").attr("id","nv-chart-clip-path-"+k).append("rect"),B.select("#nv-chart-clip-path-"+k+" rect").attr("width",x).attr("height",y),F.attr("clip-path",w?"url(#nv-chart-clip-path-"+k+")":"");var G=B.select(".nv-ticks").selectAll(".nv-tick").data(function(a){return a});G.exit().remove();var H=G.enter().append("g").attr("class",function(a,b,c){return(p(a,b)>q(a,b)?"nv-tick negative":"nv-tick positive")+" nv-tick-"+c+"-"+b});H.append("line").attr("class","nv-candlestick-lines").attr("transform",function(a,b){return"translate("+l(n(a,b))+",0)"}).attr("x1",0).attr("y1",function(a,b){return m(r(a,b))}).attr("x2",0).attr("y2",function(a,b){return m(s(a,b))}),H.append("rect").attr("class","nv-candlestick-rects nv-bars").attr("transform",function(a,b){return"translate("+(l(n(a,b))-A/2)+","+(m(o(a,b))-(p(a,b)>q(a,b)?m(q(a,b))-m(p(a,b)):0))+")"}).attr("x",0).attr("y",0).attr("width",A).attr("height",function(a,b){var c=p(a,b),d=q(a,b);return c>d?m(d)-m(c):m(c)-m(d)});c.selectAll(".nv-candlestick-lines").transition().attr("transform",function(a,b){return"translate("+l(n(a,b))+",0)"}).attr("x1",0).attr("y1",function(a,b){return m(r(a,b))}).attr("x2",0).attr("y2",function(a,b){return m(s(a,b))}),c.selectAll(".nv-candlestick-rects").transition().attr("transform",function(a,b){return"translate("+(l(n(a,b))-A/2)+","+(m(o(a,b))-(p(a,b)>q(a,b)?m(q(a,b))-m(p(a,b)):0))+")"}).attr("x",0).attr("y",0).attr("width",A).attr("height",function(a,b){var c=p(a,b),d=q(a,b);return c>d?m(d)-m(c):m(c)-m(d)})}),b}var c,d,e,f,g,h={top:0,right:0,bottom:0,left:0},i=null,j=null,k=Math.floor(1e4*Math.random()),l=d3.scale.linear(),m=d3.scale.linear(),n=function(a){return a.x},o=function(a){return a.y},p=function(a){return a.open},q=function(a){return a.close},r=function(a){return a.high},s=function(a){return a.low},t=[],u=[],v=!1,w=!0,x=a.utils.defaultColor(),y=!1,z=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState","renderEnd","chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout","elementMousemove");return b.highlightPoint=function(a,d){b.clearHighlights(),c.select(".nv-candlestickBar .nv-tick-0-"+a).classed("hover",d)},b.clearHighlights=function(){c.select(".nv-candlestickBar .nv-tick.hover").classed("hover",!1)},b.dispatch=z,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return i},set:function(a){i=a}},height:{get:function(){return j},set:function(a){j=a}},xScale:{get:function(){return l},set:function(a){l=a}},yScale:{get:function(){return m},set:function(a){m=a}},xDomain:{get:function(){return d},set:function(a){d=a}},yDomain:{get:function(){return e},set:function(a){e=a}},xRange:{get:function(){return f},set:function(a){f=a}},yRange:{get:function(){return g},set:function(a){g=a}},forceX:{get:function(){return t},set:function(a){t=a}},forceY:{get:function(){return u},set:function(a){u=a}},padData:{get:function(){return v},set:function(a){v=a}},clipEdge:{get:function(){return w},set:function(a){w=a}},id:{get:function(){return k},set:function(a){k=a}},interactive:{get:function(){return y},set:function(a){y=a}},x:{get:function(){return n},set:function(a){n=a}},y:{get:function(){return o},set:function(a){o=a}},open:{get:function(){return p()},set:function(a){p=a}},close:{get:function(){return q()},set:function(a){q=a}},high:{get:function(){return r},set:function(a){r=a}},low:{get:function(){return s},set:function(a){s=a}},margin:{get:function(){return h},set:function(a){h.top=void 0!=a.top?a.top:h.top,h.right=void 0!=a.right?a.right:h.right,h.bottom=void 0!=a.bottom?a.bottom:h.bottom,h.left=void 0!=a.left?a.left:h.left}},color:{get:function(){return x},set:function(b){x=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.cumulativeLineChart=function(){"use strict";function b(l){return H.reset(),H.models(f),r&&H.models(g),s&&H.models(h),l.each(function(l){function A(a,c){d3.select(b.container).style("cursor","ew-resize")}function E(a,b){G.x=d3.event.x,G.i=Math.round(F.invert(G.x)),K()}function H(a,c){d3.select(b.container).style("cursor","auto"),y.index=G.i,C.stateChange(y)}function K(){ba.data([G]);var a=b.duration();b.duration(0),b.update(),b.duration(a)}var L=d3.select(this);a.utils.initSVG(L),L.classed("nv-chart-"+x,!0);var M=this,N=a.utils.availableWidth(o,L,m),O=a.utils.availableHeight(p,L,m);if(b.update=function(){0===D?L.call(b):L.transition().duration(D).call(b)},b.container=this,y.setter(J(l),b.update).getter(I(l)).update(),y.disabled=l.map(function(a){return!!a.disabled}),!z){var P;z={};for(P in y)y[P]instanceof Array?z[P]=y[P].slice(0):z[P]=y[P]}var Q=d3.behavior.drag().on("dragstart",A).on("drag",E).on("dragend",H);if(!(l&&l.length&&l.filter(function(a){return a.values.length}).length))return a.utils.noData(b,L),b;if(L.selectAll(".nv-noData").remove(),d=f.xScale(),e=f.yScale(),w)f.yDomain(null);else{var R=l.filter(function(a){return!a.disabled}).map(function(a,b){var c=d3.extent(a.values,f.y());return c[0]<-.95&&(c[0]=-.95),[(c[0]-c[1])/(1+c[1]),(c[1]-c[0])/(1+c[0])]}),S=[d3.min(R,function(a){return a[0]}),d3.max(R,function(a){return a[1]})];f.yDomain(S)}F.domain([0,l[0].values.length-1]).range([0,N]).clamp(!0);var l=c(G.i,l),T=v?"none":"all",U=L.selectAll("g.nv-wrap.nv-cumulativeLine").data([l]),V=U.enter().append("g").attr("class","nvd3 nv-wrap nv-cumulativeLine").append("g"),W=U.select("g");if(V.append("g").attr("class","nv-interactive"),V.append("g").attr("class","nv-x nv-axis").style("pointer-events","none"),V.append("g").attr("class","nv-y nv-axis"),V.append("g").attr("class","nv-background"),V.append("g").attr("class","nv-linesWrap").style("pointer-events",T),V.append("g").attr("class","nv-avgLinesWrap").style("pointer-events","none"),V.append("g").attr("class","nv-legendWrap"),V.append("g").attr("class","nv-controlsWrap"),q&&(i.width(N),W.select(".nv-legendWrap").datum(l).call(i),m.top!=i.height()&&(m.top=i.height(),O=a.utils.availableHeight(p,L,m)),W.select(".nv-legendWrap").attr("transform","translate(0,"+-m.top+")")),u){var X=[{key:"Re-scale y-axis",disabled:!w}];j.width(140).color(["#444","#444","#444"]).rightAlign(!1).margin({top:5,right:0,bottom:5,left:20}),W.select(".nv-controlsWrap").datum(X).attr("transform","translate(0,"+-m.top+")").call(j)}U.attr("transform","translate("+m.left+","+m.top+")"),t&&W.select(".nv-y.nv-axis").attr("transform","translate("+N+",0)");var Y=l.filter(function(a){return a.tempDisabled});U.select(".tempDisabled").remove(),Y.length&&U.append("text").attr("class","tempDisabled").attr("x",N/2).attr("y","-.71em").style("text-anchor","end").text(Y.map(function(a){return a.key}).join(", ")+" values cannot be calculated for this time period."),v&&(k.width(N).height(O).margin({left:m.left,top:m.top}).svgContainer(L).xScale(d),U.select(".nv-interactive").call(k)),V.select(".nv-background").append("rect"),W.select(".nv-background rect").attr("width",N).attr("height",O),f.y(function(a){return a.display.y}).width(N).height(O).color(l.map(function(a,b){return a.color||n(a,b)}).filter(function(a,b){return!l[b].disabled&&!l[b].tempDisabled}));var Z=W.select(".nv-linesWrap").datum(l.filter(function(a){return!a.disabled&&!a.tempDisabled}));Z.call(f),l.forEach(function(a,b){a.seriesIndex=b});var $=l.filter(function(a){return!a.disabled&&!!B(a)}),_=W.select(".nv-avgLinesWrap").selectAll("line").data($,function(a){return a.key}),aa=function(a){var b=e(B(a));return 0>b?0:b>O?O:b};_.enter().append("line").style("stroke-width",2).style("stroke-dasharray","10,10").style("stroke",function(a,b){return f.color()(a,a.seriesIndex)}).attr("x1",0).attr("x2",N).attr("y1",aa).attr("y2",aa),_.style("stroke-opacity",function(a){var b=e(B(a));return 0>b||b>O?0:1}).attr("x1",0).attr("x2",N).attr("y1",aa).attr("y2",aa),_.exit().remove();var ba=Z.selectAll(".nv-indexLine").data([G]);ba.enter().append("rect").attr("class","nv-indexLine").attr("width",3).attr("x",-2).attr("fill","red").attr("fill-opacity",.5).style("pointer-events","all").call(Q),ba.attr("transform",function(a){return"translate("+F(a.i)+",0)"}).attr("height",O),r&&(g.scale(d)._ticks(a.utils.calcTicksX(N/70,l)).tickSize(-O,0),W.select(".nv-x.nv-axis").attr("transform","translate(0,"+e.range()[0]+")"),W.select(".nv-x.nv-axis").call(g)),s&&(h.scale(e)._ticks(a.utils.calcTicksY(O/36,l)).tickSize(-N,0),W.select(".nv-y.nv-axis").call(h)),W.select(".nv-background rect").on("click",function(){G.x=d3.mouse(this)[0],G.i=Math.round(F.invert(G.x)),y.index=G.i,C.stateChange(y),K()}),f.dispatch.on("elementClick",function(a){G.i=a.pointIndex,G.x=F(G.i),y.index=G.i,C.stateChange(y),K()}),j.dispatch.on("legendClick",function(a,c){a.disabled=!a.disabled,w=!a.disabled,y.rescaleY=w,C.stateChange(y),b.update()}),i.dispatch.on("stateChange",function(a){for(var c in a)y[c]=a[c];C.stateChange(y),b.update()}),k.dispatch.on("elementMousemove",function(c){f.clearHighlights();var d,e,i,j=[];if(l.filter(function(a,b){return a.seriesIndex=b,!a.disabled}).forEach(function(g,h){e=a.interactiveBisect(g.values,c.pointXValue,b.x()),f.highlightPoint(h,e,!0);var k=g.values[e];"undefined"!=typeof k&&("undefined"==typeof d&&(d=k),"undefined"==typeof i&&(i=b.xScale()(b.x()(k,e))),j.push({key:g.key,value:b.y()(k,e),color:n(g,g.seriesIndex)}))}),j.length>2){var o=b.yScale().invert(c.mouseY),p=Math.abs(b.yScale().domain()[0]-b.yScale().domain()[1]),q=.03*p,r=a.nearestValueIndex(j.map(function(a){return a.value}),o,q);null!==r&&(j[r].highlight=!0)}var s=g.tickFormat()(b.x()(d,e),e);k.tooltip.position({left:i+m.left,top:c.mouseY+m.top}).chartContainer(M.parentNode).valueFormatter(function(a,b){return h.tickFormat()(a)}).data({value:s,series:j})(),k.renderGuideLine(i)}),k.dispatch.on("elementMouseout",function(a){f.clearHighlights()}),C.on("changeState",function(a){"undefined"!=typeof a.disabled&&(l.forEach(function(b,c){b.disabled=a.disabled[c]}),y.disabled=a.disabled),"undefined"!=typeof a.index&&(G.i=a.index,G.x=F(G.i),y.index=a.index,ba.data([G])),"undefined"!=typeof a.rescaleY&&(w=a.rescaleY),b.update()})}),H.renderEnd("cumulativeLineChart immediate"),b}function c(a,b){return K||(K=f.y()),b.map(function(b,c){if(!b.values)return b;var d=b.values[a];if(null==d)return b;var e=K(d,a);return-.95>e&&!E?(b.tempDisabled=!0,b):(b.tempDisabled=!1,b.values=b.values.map(function(a,b){return a.display={y:(K(a,b)-e)/(1+e)},a}),b)})}var d,e,f=a.models.line(),g=a.models.axis(),h=a.models.axis(),i=a.models.legend(),j=a.models.legend(),k=a.interactiveGuideline(),l=a.models.tooltip(),m={top:30,right:30,bottom:50,left:60},n=a.utils.defaultColor(),o=null,p=null,q=!0,r=!0,s=!0,t=!1,u=!0,v=!1,w=!0,x=f.id(),y=a.utils.state(),z=null,A=null,B=function(a){return a.average},C=d3.dispatch("stateChange","changeState","renderEnd"),D=250,E=!1;y.index=0,y.rescaleY=w,g.orient("bottom").tickPadding(7),h.orient(t?"right":"left"),l.valueFormatter(function(a,b){return h.tickFormat()(a,b)}).headerFormatter(function(a,b){return g.tickFormat()(a,b)}),j.updateState(!1);var F=d3.scale.linear(),G={i:0,x:0},H=a.utils.renderWatch(C,D),I=function(a){return function(){return{active:a.map(function(a){return!a.disabled}),index:G.i,rescaleY:w}}},J=function(a){return function(b){void 0!==b.index&&(G.i=b.index),void 0!==b.rescaleY&&(w=b.rescaleY),void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}};f.dispatch.on("elementMouseover.tooltip",function(a){var c={x:b.x()(a.point),y:b.y()(a.point),color:a.point.color};a.point=c,l.data(a).position(a.pos).hidden(!1)}),f.dispatch.on("elementMouseout.tooltip",function(a){l.hidden(!0)});var K=null;return b.dispatch=C,b.lines=f,b.legend=i,b.controls=j,b.xAxis=g,b.yAxis=h,b.interactiveLayer=k,b.state=y,b.tooltip=l,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return o},set:function(a){o=a}},height:{get:function(){return p},set:function(a){p=a}},rescaleY:{get:function(){return w},set:function(a){w=a}},showControls:{get:function(){return u},set:function(a){u=a}},showLegend:{get:function(){return q},set:function(a){q=a}},average:{get:function(){return B},set:function(a){B=a}},defaultState:{get:function(){return z},set:function(a){z=a}},noData:{get:function(){return A},set:function(a){A=a}},showXAxis:{get:function(){return r},set:function(a){r=a}},showYAxis:{get:function(){return s},set:function(a){s=a}},noErrorCheck:{get:function(){return E},set:function(a){E=a}},tooltips:{get:function(){return l.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),l.enabled(!!b)}},tooltipContent:{get:function(){return l.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),l.contentGenerator(b)}},margin:{get:function(){return m},set:function(a){m.top=void 0!==a.top?a.top:m.top,m.right=void 0!==a.right?a.right:m.right,m.bottom=void 0!==a.bottom?a.bottom:m.bottom,m.left=void 0!==a.left?a.left:m.left}},color:{get:function(){return n},set:function(b){n=a.utils.getColor(b),i.color(n)}},useInteractiveGuideline:{get:function(){return v},set:function(a){v=a,a===!0&&(b.interactive(!1),b.useVoronoi(!1))}},rightAlignYAxis:{get:function(){return t},set:function(a){t=a,h.orient(a?"right":"left")}},duration:{get:function(){return D},set:function(a){D=a,f.duration(D),g.duration(D),h.duration(D),H.reset(D)}}}),a.utils.inheritOptions(b,f),a.utils.initOptions(b),b},a.models.discreteBar=function(){"use strict";function b(m){return y.reset(),m.each(function(b){var m=k-j.left-j.right,x=l-j.top-j.bottom;c=d3.select(this),a.utils.initSVG(c),b.forEach(function(a,b){a.values.forEach(function(a){a.series=b})});var z=d&&e?[]:b.map(function(a){return a.values.map(function(a,b){return{x:p(a,b),y:q(a,b),y0:a.y0}})});n.domain(d||d3.merge(z).map(function(a){return a.x})).rangeBands(f||[0,m],.1),o.domain(e||d3.extent(d3.merge(z).map(function(a){return a.y}).concat(r))),t?o.range(g||[x-(o.domain()[0]<0?12:0),o.domain()[1]>0?12:0]):o.range(g||[x,0]),h=h||n,i=i||o.copy().range([o(0),o(0)]);var A=c.selectAll("g.nv-wrap.nv-discretebar").data([b]),B=A.enter().append("g").attr("class","nvd3 nv-wrap nv-discretebar"),C=B.append("g");A.select("g");C.append("g").attr("class","nv-groups"),A.attr("transform","translate("+j.left+","+j.top+")");var D=A.select(".nv-groups").selectAll(".nv-group").data(function(a){return a},function(a){return a.key});D.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),D.exit().watchTransition(y,"discreteBar: exit groups").style("stroke-opacity",1e-6).style("fill-opacity",1e-6).remove(),D.attr("class",function(a,b){return"nv-group nv-series-"+b}).classed("hover",function(a){return a.hover}),D.watchTransition(y,"discreteBar: groups").style("stroke-opacity",1).style("fill-opacity",.75);var E=D.selectAll("g.nv-bar").data(function(a){return a.values});E.exit().remove();var F=E.enter().append("g").attr("transform",function(a,b,c){return"translate("+(n(p(a,b))+.05*n.rangeBand())+", "+o(0)+")"}).on("mouseover",function(a,b){d3.select(this).classed("hover",!0),v.elementMouseover({data:a,index:b,color:d3.select(this).style("fill")})}).on("mouseout",function(a,b){d3.select(this).classed("hover",!1),v.elementMouseout({data:a,index:b,color:d3.select(this).style("fill")})}).on("mousemove",function(a,b){v.elementMousemove({data:a,index:b,color:d3.select(this).style("fill")})}).on("click",function(a,b){v.elementClick({data:a,index:b,color:d3.select(this).style("fill")}),d3.event.stopPropagation()}).on("dblclick",function(a,b){v.elementDblClick({data:a,index:b,color:d3.select(this).style("fill")}),d3.event.stopPropagation()});F.append("rect").attr("height",0).attr("width",.9*n.rangeBand()/b.length),t?(F.append("text").attr("text-anchor","middle"),E.select("text").text(function(a,b){return u(q(a,b))}).watchTransition(y,"discreteBar: bars text").attr("x",.9*n.rangeBand()/2).attr("y",function(a,b){return q(a,b)<0?o(q(a,b))-o(0)+12:-4})):E.selectAll("text").remove(),E.attr("class",function(a,b){return q(a,b)<0?"nv-bar negative":"nv-bar positive"}).style("fill",function(a,b){return a.color||s(a,b)}).style("stroke",function(a,b){return a.color||s(a,b)}).select("rect").attr("class",w).watchTransition(y,"discreteBar: bars rect").attr("width",.9*n.rangeBand()/b.length),E.watchTransition(y,"discreteBar: bars").attr("transform",function(a,b){var c=n(p(a,b))+.05*n.rangeBand(),d=q(a,b)<0?o(0):o(0)-o(q(a,b))<1?o(0)-1:o(q(a,b));return"translate("+c+", "+d+")"}).select("rect").attr("height",function(a,b){return Math.max(Math.abs(o(q(a,b))-o(e&&e[0]||0))||1)}),h=n.copy(),i=o.copy()}),y.renderEnd("discreteBar immediate"),b}var c,d,e,f,g,h,i,j={top:0,right:0,bottom:0,left:0},k=960,l=500,m=Math.floor(1e4*Math.random()),n=d3.scale.ordinal(),o=d3.scale.linear(),p=function(a){return a.x},q=function(a){return a.y},r=[0],s=a.utils.defaultColor(),t=!1,u=d3.format(",.2f"),v=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout","elementMousemove","renderEnd"),w="discreteBar",x=250,y=a.utils.renderWatch(v,x);return b.dispatch=v,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return k},set:function(a){k=a}},height:{get:function(){return l},set:function(a){l=a}},forceY:{get:function(){return r},set:function(a){r=a}},showValues:{get:function(){return t},set:function(a){t=a}},x:{get:function(){return p},set:function(a){p=a}},y:{get:function(){return q},set:function(a){q=a}},xScale:{get:function(){return n},set:function(a){n=a}},yScale:{get:function(){return o},set:function(a){o=a}},xDomain:{get:function(){return d},set:function(a){d=a}},yDomain:{get:function(){return e},set:function(a){e=a}},xRange:{get:function(){return f},set:function(a){f=a}},yRange:{get:function(){return g},set:function(a){g=a}},valueFormat:{get:function(){return u},set:function(a){u=a}},id:{get:function(){return m},set:function(a){m=a}},rectClass:{get:function(){return w},set:function(a){w=a}},margin:{get:function(){return j},set:function(a){j.top=void 0!==a.top?a.top:j.top,j.right=void 0!==a.right?a.right:j.right,j.bottom=void 0!==a.bottom?a.bottom:j.bottom,j.left=void 0!==a.left?a.left:j.left}},color:{get:function(){return s},set:function(b){s=a.utils.getColor(b)}},duration:{get:function(){return x},set:function(a){x=a,y.reset(x)}}}),a.utils.initOptions(b),b},a.models.discreteBarChart=function(){"use strict";function b(h){return t.reset(),t.models(e),m&&t.models(f),n&&t.models(g),h.each(function(h){var l=d3.select(this);a.utils.initSVG(l);var q=a.utils.availableWidth(j,l,i),t=a.utils.availableHeight(k,l,i);if(b.update=function(){r.beforeUpdate(),l.transition().duration(s).call(b)},b.container=this,!(h&&h.length&&h.filter(function(a){return a.values.length}).length))return a.utils.noData(b,l),b;l.selectAll(".nv-noData").remove(),c=e.xScale(),d=e.yScale().clamp(!0);var u=l.selectAll("g.nv-wrap.nv-discreteBarWithAxes").data([h]),v=u.enter().append("g").attr("class","nvd3 nv-wrap nv-discreteBarWithAxes").append("g"),w=v.append("defs"),x=u.select("g");v.append("g").attr("class","nv-x nv-axis"),v.append("g").attr("class","nv-y nv-axis").append("g").attr("class","nv-zeroLine").append("line"),v.append("g").attr("class","nv-barsWrap"),x.attr("transform","translate("+i.left+","+i.top+")"),o&&x.select(".nv-y.nv-axis").attr("transform","translate("+q+",0)"),e.width(q).height(t);var y=x.select(".nv-barsWrap").datum(h.filter(function(a){return!a.disabled}));if(y.transition().call(e),w.append("clipPath").attr("id","nv-x-label-clip-"+e.id()).append("rect"),
-x.select("#nv-x-label-clip-"+e.id()+" rect").attr("width",c.rangeBand()*(p?2:1)).attr("height",16).attr("x",-c.rangeBand()/(p?1:2)),m){f.scale(c)._ticks(a.utils.calcTicksX(q/100,h)).tickSize(-t,0),x.select(".nv-x.nv-axis").attr("transform","translate(0,"+(d.range()[0]+(e.showValues()&&d.domain()[0]<0?16:0))+")"),x.select(".nv-x.nv-axis").call(f);var z=x.select(".nv-x.nv-axis").selectAll("g");p&&z.selectAll("text").attr("transform",function(a,b,c){return"translate(0,"+(c%2==0?"5":"17")+")"})}n&&(g.scale(d)._ticks(a.utils.calcTicksY(t/36,h)).tickSize(-q,0),x.select(".nv-y.nv-axis").call(g)),x.select(".nv-zeroLine line").attr("x1",0).attr("x2",q).attr("y1",d(0)).attr("y2",d(0))}),t.renderEnd("discreteBar chart immediate"),b}var c,d,e=a.models.discreteBar(),f=a.models.axis(),g=a.models.axis(),h=a.models.tooltip(),i={top:15,right:10,bottom:50,left:60},j=null,k=null,l=a.utils.getColor(),m=!0,n=!0,o=!1,p=!1,q=null,r=d3.dispatch("beforeUpdate","renderEnd"),s=250;f.orient("bottom").showMaxMin(!1).tickFormat(function(a){return a}),g.orient(o?"right":"left").tickFormat(d3.format(",.1f")),h.duration(0).headerEnabled(!1).valueFormatter(function(a,b){return g.tickFormat()(a,b)}).keyFormatter(function(a,b){return f.tickFormat()(a,b)});var t=a.utils.renderWatch(r,s);return e.dispatch.on("elementMouseover.tooltip",function(a){a.series={key:b.x()(a.data),value:b.y()(a.data),color:a.color},h.data(a).hidden(!1)}),e.dispatch.on("elementMouseout.tooltip",function(a){h.hidden(!0)}),e.dispatch.on("elementMousemove.tooltip",function(a){h.position({top:d3.event.pageY,left:d3.event.pageX})()}),b.dispatch=r,b.discretebar=e,b.xAxis=f,b.yAxis=g,b.tooltip=h,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return j},set:function(a){j=a}},height:{get:function(){return k},set:function(a){k=a}},staggerLabels:{get:function(){return p},set:function(a){p=a}},showXAxis:{get:function(){return m},set:function(a){m=a}},showYAxis:{get:function(){return n},set:function(a){n=a}},noData:{get:function(){return q},set:function(a){q=a}},tooltips:{get:function(){return h.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),h.enabled(!!b)}},tooltipContent:{get:function(){return h.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),h.contentGenerator(b)}},margin:{get:function(){return i},set:function(a){i.top=void 0!==a.top?a.top:i.top,i.right=void 0!==a.right?a.right:i.right,i.bottom=void 0!==a.bottom?a.bottom:i.bottom,i.left=void 0!==a.left?a.left:i.left}},duration:{get:function(){return s},set:function(a){s=a,t.reset(s),e.duration(s),f.duration(s),g.duration(s)}},color:{get:function(){return l},set:function(b){l=a.utils.getColor(b),e.color(l)}},rightAlignYAxis:{get:function(){return o},set:function(a){o=a,g.orient(a?"right":"left")}}}),a.utils.inheritOptions(b,e),a.utils.initOptions(b),b},a.models.distribution=function(){"use strict";function b(k){return m.reset(),k.each(function(b){var k=(e-("x"===g?d.left+d.right:d.top+d.bottom),"x"==g?"y":"x"),l=d3.select(this);a.utils.initSVG(l),c=c||j;var n=l.selectAll("g.nv-distribution").data([b]),o=n.enter().append("g").attr("class","nvd3 nv-distribution"),p=(o.append("g"),n.select("g"));n.attr("transform","translate("+d.left+","+d.top+")");var q=p.selectAll("g.nv-dist").data(function(a){return a},function(a){return a.key});q.enter().append("g"),q.attr("class",function(a,b){return"nv-dist nv-series-"+b}).style("stroke",function(a,b){return i(a,b)});var r=q.selectAll("line.nv-dist"+g).data(function(a){return a.values});r.enter().append("line").attr(g+"1",function(a,b){return c(h(a,b))}).attr(g+"2",function(a,b){return c(h(a,b))}),m.transition(q.exit().selectAll("line.nv-dist"+g),"dist exit").attr(g+"1",function(a,b){return j(h(a,b))}).attr(g+"2",function(a,b){return j(h(a,b))}).style("stroke-opacity",0).remove(),r.attr("class",function(a,b){return"nv-dist"+g+" nv-dist"+g+"-"+b}).attr(k+"1",0).attr(k+"2",f),m.transition(r,"dist").attr(g+"1",function(a,b){return j(h(a,b))}).attr(g+"2",function(a,b){return j(h(a,b))}),c=j.copy()}),m.renderEnd("distribution immediate"),b}var c,d={top:0,right:0,bottom:0,left:0},e=400,f=8,g="x",h=function(a){return a[g]},i=a.utils.defaultColor(),j=d3.scale.linear(),k=250,l=d3.dispatch("renderEnd"),m=a.utils.renderWatch(l,k);return b.options=a.utils.optionsFunc.bind(b),b.dispatch=l,b.margin=function(a){return arguments.length?(d.top="undefined"!=typeof a.top?a.top:d.top,d.right="undefined"!=typeof a.right?a.right:d.right,d.bottom="undefined"!=typeof a.bottom?a.bottom:d.bottom,d.left="undefined"!=typeof a.left?a.left:d.left,b):d},b.width=function(a){return arguments.length?(e=a,b):e},b.axis=function(a){return arguments.length?(g=a,b):g},b.size=function(a){return arguments.length?(f=a,b):f},b.getData=function(a){return arguments.length?(h=d3.functor(a),b):h},b.scale=function(a){return arguments.length?(j=a,b):j},b.color=function(c){return arguments.length?(i=a.utils.getColor(c),b):i},b.duration=function(a){return arguments.length?(k=a,m.reset(k),b):k},b},a.models.furiousLegend=function(){"use strict";function b(p){function q(a,b){return"furious"!=o?"#000":m?a.disengaged?g(a,b):"#fff":m?void 0:a.disabled?g(a,b):"#fff"}function r(a,b){return m&&"furious"==o?a.disengaged?"#fff":g(a,b):a.disabled?"#fff":g(a,b)}return p.each(function(b){var p=d-c.left-c.right,s=d3.select(this);a.utils.initSVG(s);var t=s.selectAll("g.nv-legend").data([b]),u=(t.enter().append("g").attr("class","nvd3 nv-legend").append("g"),t.select("g"));t.attr("transform","translate("+c.left+","+c.top+")");var v,w=u.selectAll(".nv-series").data(function(a){return"furious"!=o?a:a.filter(function(a){return m?!0:!a.disengaged})}),x=w.enter().append("g").attr("class","nv-series");if("classic"==o)x.append("circle").style("stroke-width",2).attr("class","nv-legend-symbol").attr("r",5),v=w.select("circle");else if("furious"==o){x.append("rect").style("stroke-width",2).attr("class","nv-legend-symbol").attr("rx",3).attr("ry",3),v=w.select("rect"),x.append("g").attr("class","nv-check-box").property("innerHTML",'<path d="M0.5,5 L22.5,5 L22.5,26.5 L0.5,26.5 L0.5,5 Z" class="nv-box"></path><path d="M5.5,12.8618467 L11.9185089,19.2803556 L31,0.198864511" class="nv-check"></path>').attr("transform","translate(-10,-8)scale(0.5)");var y=w.select(".nv-check-box");y.each(function(a,b){d3.select(this).selectAll("path").attr("stroke",q(a,b))})}x.append("text").attr("text-anchor","start").attr("class","nv-legend-text").attr("dy",".32em").attr("dx","8");var z=w.select("text.nv-legend-text");w.on("mouseover",function(a,b){n.legendMouseover(a,b)}).on("mouseout",function(a,b){n.legendMouseout(a,b)}).on("click",function(a,b){n.legendClick(a,b);var c=w.data();if(k){if("classic"==o)l?(c.forEach(function(a){a.disabled=!0}),a.disabled=!1):(a.disabled=!a.disabled,c.every(function(a){return a.disabled})&&c.forEach(function(a){a.disabled=!1}));else if("furious"==o)if(m)a.disengaged=!a.disengaged,a.userDisabled=void 0==a.userDisabled?!!a.disabled:a.userDisabled,a.disabled=a.disengaged||a.userDisabled;else if(!m){a.disabled=!a.disabled,a.userDisabled=a.disabled;var d=c.filter(function(a){return!a.disengaged});d.every(function(a){return a.userDisabled})&&c.forEach(function(a){a.disabled=a.userDisabled=!1})}n.stateChange({disabled:c.map(function(a){return!!a.disabled}),disengaged:c.map(function(a){return!!a.disengaged})})}}).on("dblclick",function(a,b){if(("furious"!=o||!m)&&(n.legendDblclick(a,b),k)){var c=w.data();c.forEach(function(a){a.disabled=!0,"furious"==o&&(a.userDisabled=a.disabled)}),a.disabled=!1,"furious"==o&&(a.userDisabled=a.disabled),n.stateChange({disabled:c.map(function(a){return!!a.disabled})})}}),w.classed("nv-disabled",function(a){return a.userDisabled}),w.exit().remove(),z.attr("fill",q).text(f);var A;switch(o){case"furious":A=23;break;case"classic":A=20}if(h){var B=[];w.each(function(b,c){var d,e=d3.select(this).select("text");try{if(d=e.node().getComputedTextLength(),0>=d)throw Error()}catch(f){d=a.utils.calcApproxTextWidth(e)}B.push(d+i)});for(var C=0,D=0,E=[];p>D&&C<B.length;)E[C]=B[C],D+=B[C++];for(0===C&&(C=1);D>p&&C>1;){E=[],C--;for(var F=0;F<B.length;F++)B[F]>(E[F%C]||0)&&(E[F%C]=B[F]);D=E.reduce(function(a,b,c,d){return a+b})}for(var G=[],H=0,I=0;C>H;H++)G[H]=I,I+=E[H];w.attr("transform",function(a,b){return"translate("+G[b%C]+","+(5+Math.floor(b/C)*A)+")"}),j?u.attr("transform","translate("+(d-c.right-D)+","+c.top+")"):u.attr("transform","translate(0,"+c.top+")"),e=c.top+c.bottom+Math.ceil(B.length/C)*A}else{var J,K=5,L=5,M=0;w.attr("transform",function(a,b){var e=d3.select(this).select("text").node().getComputedTextLength()+i;return J=L,d<c.left+c.right+J+e&&(L=J=5,K+=A),L+=e,L>M&&(M=L),"translate("+J+","+K+")"}),u.attr("transform","translate("+(d-c.right-M)+","+c.top+")"),e=c.top+c.bottom+K+15}"furious"==o&&v.attr("width",function(a,b){return z[0][b].getComputedTextLength()+27}).attr("height",18).attr("y",-9).attr("x",-15),v.style("fill",r).style("stroke",function(a,b){return a.color||g(a,b)})}),b}var c={top:5,right:0,bottom:5,left:0},d=400,e=20,f=function(a){return a.key},g=a.utils.getColor(),h=!0,i=28,j=!0,k=!0,l=!1,m=!1,n=d3.dispatch("legendClick","legendDblclick","legendMouseover","legendMouseout","stateChange"),o="classic";return b.dispatch=n,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return d},set:function(a){d=a}},height:{get:function(){return e},set:function(a){e=a}},key:{get:function(){return f},set:function(a){f=a}},align:{get:function(){return h},set:function(a){h=a}},rightAlign:{get:function(){return j},set:function(a){j=a}},padding:{get:function(){return i},set:function(a){i=a}},updateState:{get:function(){return k},set:function(a){k=a}},radioButtonMode:{get:function(){return l},set:function(a){l=a}},expanded:{get:function(){return m},set:function(a){m=a}},vers:{get:function(){return o},set:function(a){o=a}},margin:{get:function(){return c},set:function(a){c.top=void 0!==a.top?a.top:c.top,c.right=void 0!==a.right?a.right:c.right,c.bottom=void 0!==a.bottom?a.bottom:c.bottom,c.left=void 0!==a.left?a.left:c.left}},color:{get:function(){return g},set:function(b){g=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.historicalBar=function(){"use strict";function b(x){return x.each(function(b){w.reset(),k=d3.select(this);var x=a.utils.availableWidth(h,k,g),y=a.utils.availableHeight(i,k,g);a.utils.initSVG(k),l.domain(c||d3.extent(b[0].values.map(n).concat(p))),r?l.range(e||[.5*x/b[0].values.length,x*(b[0].values.length-.5)/b[0].values.length]):l.range(e||[0,x]),m.domain(d||d3.extent(b[0].values.map(o).concat(q))).range(f||[y,0]),l.domain()[0]===l.domain()[1]&&(l.domain()[0]?l.domain([l.domain()[0]-.01*l.domain()[0],l.domain()[1]+.01*l.domain()[1]]):l.domain([-1,1])),m.domain()[0]===m.domain()[1]&&(m.domain()[0]?m.domain([m.domain()[0]+.01*m.domain()[0],m.domain()[1]-.01*m.domain()[1]]):m.domain([-1,1]));var z=k.selectAll("g.nv-wrap.nv-historicalBar-"+j).data([b[0].values]),A=z.enter().append("g").attr("class","nvd3 nv-wrap nv-historicalBar-"+j),B=A.append("defs"),C=A.append("g"),D=z.select("g");C.append("g").attr("class","nv-bars"),z.attr("transform","translate("+g.left+","+g.top+")"),k.on("click",function(a,b){u.chartClick({data:a,index:b,pos:d3.event,id:j})}),B.append("clipPath").attr("id","nv-chart-clip-path-"+j).append("rect"),z.select("#nv-chart-clip-path-"+j+" rect").attr("width",x).attr("height",y),D.attr("clip-path",s?"url(#nv-chart-clip-path-"+j+")":"");var E=z.select(".nv-bars").selectAll(".nv-bar").data(function(a){return a},function(a,b){return n(a,b)});E.exit().remove(),E.enter().append("rect").attr("x",0).attr("y",function(b,c){return a.utils.NaNtoZero(m(Math.max(0,o(b,c))))}).attr("height",function(b,c){return a.utils.NaNtoZero(Math.abs(m(o(b,c))-m(0)))}).attr("transform",function(a,c){return"translate("+(l(n(a,c))-x/b[0].values.length*.45)+",0)"}).on("mouseover",function(a,b){v&&(d3.select(this).classed("hover",!0),u.elementMouseover({data:a,index:b,color:d3.select(this).style("fill")}))}).on("mouseout",function(a,b){v&&(d3.select(this).classed("hover",!1),u.elementMouseout({data:a,index:b,color:d3.select(this).style("fill")}))}).on("mousemove",function(a,b){v&&u.elementMousemove({data:a,index:b,color:d3.select(this).style("fill")})}).on("click",function(a,b){v&&(u.elementClick({data:a,index:b,color:d3.select(this).style("fill")}),d3.event.stopPropagation())}).on("dblclick",function(a,b){v&&(u.elementDblClick({data:a,index:b,color:d3.select(this).style("fill")}),d3.event.stopPropagation())}),E.attr("fill",function(a,b){return t(a,b)}).attr("class",function(a,b,c){return(o(a,b)<0?"nv-bar negative":"nv-bar positive")+" nv-bar-"+c+"-"+b}).watchTransition(w,"bars").attr("transform",function(a,c){return"translate("+(l(n(a,c))-x/b[0].values.length*.45)+",0)"}).attr("width",x/b[0].values.length*.9),E.watchTransition(w,"bars").attr("y",function(b,c){var d=o(b,c)<0?m(0):m(0)-m(o(b,c))<1?m(0)-1:m(o(b,c));return a.utils.NaNtoZero(d)}).attr("height",function(b,c){return a.utils.NaNtoZero(Math.max(Math.abs(m(o(b,c))-m(0)),1))})}),w.renderEnd("historicalBar immediate"),b}var c,d,e,f,g={top:0,right:0,bottom:0,left:0},h=null,i=null,j=Math.floor(1e4*Math.random()),k=null,l=d3.scale.linear(),m=d3.scale.linear(),n=function(a){return a.x},o=function(a){return a.y},p=[],q=[0],r=!1,s=!0,t=a.utils.defaultColor(),u=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout","elementMousemove","renderEnd"),v=!0,w=a.utils.renderWatch(u,0);return b.highlightPoint=function(a,b){k.select(".nv-bars .nv-bar-0-"+a).classed("hover",b)},b.clearHighlights=function(){k.select(".nv-bars .nv-bar.hover").classed("hover",!1)},b.dispatch=u,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return h},set:function(a){h=a}},height:{get:function(){return i},set:function(a){i=a}},forceX:{get:function(){return p},set:function(a){p=a}},forceY:{get:function(){return q},set:function(a){q=a}},padData:{get:function(){return r},set:function(a){r=a}},x:{get:function(){return n},set:function(a){n=a}},y:{get:function(){return o},set:function(a){o=a}},xScale:{get:function(){return l},set:function(a){l=a}},yScale:{get:function(){return m},set:function(a){m=a}},xDomain:{get:function(){return c},set:function(a){c=a}},yDomain:{get:function(){return d},set:function(a){d=a}},xRange:{get:function(){return e},set:function(a){e=a}},yRange:{get:function(){return f},set:function(a){f=a}},clipEdge:{get:function(){return s},set:function(a){s=a}},id:{get:function(){return j},set:function(a){j=a}},interactive:{get:function(){return v},set:function(a){v=a}},margin:{get:function(){return g},set:function(a){g.top=void 0!==a.top?a.top:g.top,g.right=void 0!==a.right?a.right:g.right,g.bottom=void 0!==a.bottom?a.bottom:g.bottom,g.left=void 0!==a.left?a.left:g.left}},color:{get:function(){return t},set:function(b){t=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.historicalBarChart=function(b){"use strict";function c(b){return b.each(function(k){z.reset(),z.models(f),q&&z.models(g),r&&z.models(h);var w=d3.select(this),A=this;a.utils.initSVG(w);var B=a.utils.availableWidth(n,w,l),C=a.utils.availableHeight(o,w,l);if(c.update=function(){w.transition().duration(y).call(c)},c.container=this,u.disabled=k.map(function(a){return!!a.disabled}),!v){var D;v={};for(D in u)u[D]instanceof Array?v[D]=u[D].slice(0):v[D]=u[D]}if(!(k&&k.length&&k.filter(function(a){return a.values.length}).length))return a.utils.noData(c,w),c;w.selectAll(".nv-noData").remove(),d=f.xScale(),e=f.yScale();var E=w.selectAll("g.nv-wrap.nv-historicalBarChart").data([k]),F=E.enter().append("g").attr("class","nvd3 nv-wrap nv-historicalBarChart").append("g"),G=E.select("g");F.append("g").attr("class","nv-x nv-axis"),F.append("g").attr("class","nv-y nv-axis"),F.append("g").attr("class","nv-barsWrap"),F.append("g").attr("class","nv-legendWrap"),F.append("g").attr("class","nv-interactive"),p&&(i.width(B),G.select(".nv-legendWrap").datum(k).call(i),l.top!=i.height()&&(l.top=i.height(),C=a.utils.availableHeight(o,w,l)),E.select(".nv-legendWrap").attr("transform","translate(0,"+-l.top+")")),E.attr("transform","translate("+l.left+","+l.top+")"),s&&G.select(".nv-y.nv-axis").attr("transform","translate("+B+",0)"),t&&(j.width(B).height(C).margin({left:l.left,top:l.top}).svgContainer(w).xScale(d),E.select(".nv-interactive").call(j)),f.width(B).height(C).color(k.map(function(a,b){return a.color||m(a,b)}).filter(function(a,b){return!k[b].disabled}));var H=G.select(".nv-barsWrap").datum(k.filter(function(a){return!a.disabled}));H.transition().call(f),q&&(g.scale(d)._ticks(a.utils.calcTicksX(B/100,k)).tickSize(-C,0),G.select(".nv-x.nv-axis").attr("transform","translate(0,"+e.range()[0]+")"),G.select(".nv-x.nv-axis").transition().call(g)),r&&(h.scale(e)._ticks(a.utils.calcTicksY(C/36,k)).tickSize(-B,0),G.select(".nv-y.nv-axis").transition().call(h)),j.dispatch.on("elementMousemove",function(b){f.clearHighlights();var d,e,i,n=[];k.filter(function(a,b){return a.seriesIndex=b,!a.disabled}).forEach(function(g,h){e=a.interactiveBisect(g.values,b.pointXValue,c.x()),f.highlightPoint(e,!0);var j=g.values[e];void 0!==j&&(void 0===d&&(d=j),void 0===i&&(i=c.xScale()(c.x()(j,e))),n.push({key:g.key,value:c.y()(j,e),color:m(g,g.seriesIndex),data:g.values[e]}))});var o=g.tickFormat()(c.x()(d,e));j.tooltip.position({left:i+l.left,top:b.mouseY+l.top}).chartContainer(A.parentNode).valueFormatter(function(a,b){return h.tickFormat()(a)}).data({value:o,index:e,series:n})(),j.renderGuideLine(i)}),j.dispatch.on("elementMouseout",function(a){x.tooltipHide(),f.clearHighlights()}),i.dispatch.on("legendClick",function(a,d){a.disabled=!a.disabled,k.filter(function(a){return!a.disabled}).length||k.map(function(a){return a.disabled=!1,E.selectAll(".nv-series").classed("disabled",!1),a}),u.disabled=k.map(function(a){return!!a.disabled}),x.stateChange(u),b.transition().call(c)}),i.dispatch.on("legendDblclick",function(a){k.forEach(function(a){a.disabled=!0}),a.disabled=!1,u.disabled=k.map(function(a){return!!a.disabled}),x.stateChange(u),c.update()}),x.on("changeState",function(a){"undefined"!=typeof a.disabled&&(k.forEach(function(b,c){b.disabled=a.disabled[c]}),u.disabled=a.disabled),c.update()})}),z.renderEnd("historicalBarChart immediate"),c}var d,e,f=b||a.models.historicalBar(),g=a.models.axis(),h=a.models.axis(),i=a.models.legend(),j=a.interactiveGuideline(),k=a.models.tooltip(),l={top:30,right:90,bottom:50,left:90},m=a.utils.defaultColor(),n=null,o=null,p=!1,q=!0,r=!0,s=!1,t=!1,u={},v=null,w=null,x=d3.dispatch("tooltipHide","stateChange","changeState","renderEnd"),y=250;g.orient("bottom").tickPadding(7),h.orient(s?"right":"left"),k.duration(0).headerEnabled(!1).valueFormatter(function(a,b){return h.tickFormat()(a,b)}).headerFormatter(function(a,b){return g.tickFormat()(a,b)});var z=a.utils.renderWatch(x,0);return f.dispatch.on("elementMouseover.tooltip",function(a){a.series={key:c.x()(a.data),value:c.y()(a.data),color:a.color},k.data(a).hidden(!1)}),f.dispatch.on("elementMouseout.tooltip",function(a){k.hidden(!0)}),f.dispatch.on("elementMousemove.tooltip",function(a){k.position({top:d3.event.pageY,left:d3.event.pageX})()}),c.dispatch=x,c.bars=f,c.legend=i,c.xAxis=g,c.yAxis=h,c.interactiveLayer=j,c.tooltip=k,c.options=a.utils.optionsFunc.bind(c),c._options=Object.create({},{width:{get:function(){return n},set:function(a){n=a}},height:{get:function(){return o},set:function(a){o=a}},showLegend:{get:function(){return p},set:function(a){p=a}},showXAxis:{get:function(){return q},set:function(a){q=a}},showYAxis:{get:function(){return r},set:function(a){r=a}},defaultState:{get:function(){return v},set:function(a){v=a}},noData:{get:function(){return w},set:function(a){w=a}},tooltips:{get:function(){return k.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),k.enabled(!!b)}},tooltipContent:{get:function(){return k.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),k.contentGenerator(b)}},margin:{get:function(){return l},set:function(a){l.top=void 0!==a.top?a.top:l.top,l.right=void 0!==a.right?a.right:l.right,l.bottom=void 0!==a.bottom?a.bottom:l.bottom,l.left=void 0!==a.left?a.left:l.left}},color:{get:function(){return m},set:function(b){m=a.utils.getColor(b),i.color(m),f.color(m)}},duration:{get:function(){return y},set:function(a){y=a,z.reset(y),h.duration(y),g.duration(y)}},rightAlignYAxis:{get:function(){return s},set:function(a){s=a,h.orient(a?"right":"left")}},useInteractiveGuideline:{get:function(){return t},set:function(a){t=a,a===!0&&c.interactive(!1)}}}),a.utils.inheritOptions(c,f),a.utils.initOptions(c),c},a.models.ohlcBarChart=function(){var b=a.models.historicalBarChart(a.models.ohlcBar());return b.useInteractiveGuideline(!0),b.interactiveLayer.tooltip.contentGenerator(function(a){var c=a.series[0].data,d=c.open<c.close?"2ca02c":"d62728";return'<h3 style="color: #'+d+'">'+a.value+"</h3><table><tr><td>open:</td><td>"+b.yAxis.tickFormat()(c.open)+"</td></tr><tr><td>close:</td><td>"+b.yAxis.tickFormat()(c.close)+"</td></tr><tr><td>high</td><td>"+b.yAxis.tickFormat()(c.high)+"</td></tr><tr><td>low:</td><td>"+b.yAxis.tickFormat()(c.low)+"</td></tr></table>"}),b},a.models.candlestickBarChart=function(){var b=a.models.historicalBarChart(a.models.candlestickBar());return b.useInteractiveGuideline(!0),b.interactiveLayer.tooltip.contentGenerator(function(a){var c=a.series[0].data,d=c.open<c.close?"2ca02c":"d62728";return'<h3 style="color: #'+d+'">'+a.value+"</h3><table><tr><td>open:</td><td>"+b.yAxis.tickFormat()(c.open)+"</td></tr><tr><td>close:</td><td>"+b.yAxis.tickFormat()(c.close)+"</td></tr><tr><td>high</td><td>"+b.yAxis.tickFormat()(c.high)+"</td></tr><tr><td>low:</td><td>"+b.yAxis.tickFormat()(c.low)+"</td></tr></table>"}),b},a.models.legend=function(){"use strict";function b(p){function q(a,b){return"furious"!=o?"#000":m?a.disengaged?"#000":"#fff":m?void 0:(a.color||(a.color=g(a,b)),a.disabled?a.color:"#fff")}function r(a,b){return m&&"furious"==o&&a.disengaged?"#eee":a.color||g(a,b)}function s(a,b){return m&&"furious"==o?1:a.disabled?0:1}return p.each(function(b){var g=d-c.left-c.right,p=d3.select(this);a.utils.initSVG(p);var t=p.selectAll("g.nv-legend").data([b]),u=t.enter().append("g").attr("class","nvd3 nv-legend").append("g"),v=t.select("g");t.attr("transform","translate("+c.left+","+c.top+")");var w,x,y=v.selectAll(".nv-series").data(function(a){return"furious"!=o?a:a.filter(function(a){return m?!0:!a.disengaged})}),z=y.enter().append("g").attr("class","nv-series");switch(o){case"furious":x=23;break;case"classic":x=20}if("classic"==o)z.append("circle").style("stroke-width",2).attr("class","nv-legend-symbol").attr("r",5),w=y.select("circle");else if("furious"==o){z.append("rect").style("stroke-width",2).attr("class","nv-legend-symbol").attr("rx",3).attr("ry",3),w=y.select(".nv-legend-symbol"),z.append("g").attr("class","nv-check-box").property("innerHTML",'<path d="M0.5,5 L22.5,5 L22.5,26.5 L0.5,26.5 L0.5,5 Z" class="nv-box"></path><path d="M5.5,12.8618467 L11.9185089,19.2803556 L31,0.198864511" class="nv-check"></path>').attr("transform","translate(-10,-8)scale(0.5)");var A=y.select(".nv-check-box");A.each(function(a,b){d3.select(this).selectAll("path").attr("stroke",q(a,b))})}z.append("text").attr("text-anchor","start").attr("class","nv-legend-text").attr("dy",".32em").attr("dx","8");var B=y.select("text.nv-legend-text");y.on("mouseover",function(a,b){n.legendMouseover(a,b)}).on("mouseout",function(a,b){n.legendMouseout(a,b)}).on("click",function(a,b){n.legendClick(a,b);var c=y.data();if(k){if("classic"==o)l?(c.forEach(function(a){a.disabled=!0}),a.disabled=!1):(a.disabled=!a.disabled,c.every(function(a){return a.disabled})&&c.forEach(function(a){a.disabled=!1}));else if("furious"==o)if(m)a.disengaged=!a.disengaged,a.userDisabled=void 0==a.userDisabled?!!a.disabled:a.userDisabled,a.disabled=a.disengaged||a.userDisabled;else if(!m){a.disabled=!a.disabled,a.userDisabled=a.disabled;var d=c.filter(function(a){return!a.disengaged});d.every(function(a){return a.userDisabled})&&c.forEach(function(a){a.disabled=a.userDisabled=!1})}n.stateChange({disabled:c.map(function(a){return!!a.disabled}),disengaged:c.map(function(a){return!!a.disengaged})})}}).on("dblclick",function(a,b){if(("furious"!=o||!m)&&(n.legendDblclick(a,b),k)){var c=y.data();c.forEach(function(a){a.disabled=!0,"furious"==o&&(a.userDisabled=a.disabled)}),a.disabled=!1,"furious"==o&&(a.userDisabled=a.disabled),n.stateChange({disabled:c.map(function(a){return!!a.disabled})})}}),y.classed("nv-disabled",function(a){return a.userDisabled}),y.exit().remove(),B.attr("fill",q).text(f);var C=0;if(h){var D=[];y.each(function(b,c){var d,e=d3.select(this).select("text");try{if(d=e.node().getComputedTextLength(),0>=d)throw Error()}catch(f){d=a.utils.calcApproxTextWidth(e)}D.push(d+i)});var E=0,F=[];for(C=0;g>C&&E<D.length;)F[E]=D[E],C+=D[E++];for(0===E&&(E=1);C>g&&E>1;){F=[],E--;for(var G=0;G<D.length;G++)D[G]>(F[G%E]||0)&&(F[G%E]=D[G]);C=F.reduce(function(a,b,c,d){return a+b})}for(var H=[],I=0,J=0;E>I;I++)H[I]=J,J+=F[I];y.attr("transform",function(a,b){return"translate("+H[b%E]+","+(5+Math.floor(b/E)*x)+")"}),j?v.attr("transform","translate("+(d-c.right-C)+","+c.top+")"):v.attr("transform","translate(0,"+c.top+")"),e=c.top+c.bottom+Math.ceil(D.length/E)*x}else{var K,L=5,M=5,N=0;y.attr("transform",function(a,b){var e=d3.select(this).select("text").node().getComputedTextLength()+i;return K=M,d<c.left+c.right+K+e&&(M=K=5,L+=x),M+=e,M>N&&(N=M),K+N>C&&(C=K+N),"translate("+K+","+L+")"}),v.attr("transform","translate("+(d-c.right-N)+","+c.top+")"),e=c.top+c.bottom+L+15}if("furious"==o){w.attr("width",function(a,b){return B[0][b].getComputedTextLength()+27}).attr("height",18).attr("y",-9).attr("x",-15),u.insert("rect",":first-child").attr("class","nv-legend-bg").attr("fill","#eee").attr("opacity",0);var O=v.select(".nv-legend-bg");O.transition().duration(300).attr("x",-x).attr("width",C+x-12).attr("height",e+10).attr("y",-c.top-10).attr("opacity",m?1:0)}w.style("fill",r).style("fill-opacity",s).style("stroke",r)}),b}var c={top:5,right:0,bottom:5,left:0},d=400,e=20,f=function(a){return a.key},g=a.utils.getColor(),h=!0,i=32,j=!0,k=!0,l=!1,m=!1,n=d3.dispatch("legendClick","legendDblclick","legendMouseover","legendMouseout","stateChange"),o="classic";return b.dispatch=n,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return d},set:function(a){d=a}},height:{get:function(){return e},set:function(a){e=a}},key:{get:function(){return f},set:function(a){f=a}},align:{get:function(){return h},set:function(a){h=a}},rightAlign:{get:function(){return j},set:function(a){j=a}},padding:{get:function(){return i},set:function(a){i=a}},updateState:{get:function(){return k},set:function(a){k=a}},radioButtonMode:{get:function(){return l},set:function(a){l=a}},expanded:{get:function(){return m},set:function(a){m=a}},vers:{get:function(){return o},set:function(a){o=a}},margin:{get:function(){return c},set:function(a){c.top=void 0!==a.top?a.top:c.top,c.right=void 0!==a.right?a.right:c.right,c.bottom=void 0!==a.bottom?a.bottom:c.bottom,c.left=void 0!==a.left?a.left:c.left}},color:{get:function(){return g},set:function(b){g=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.line=function(){"use strict";function b(r){return v.reset(),v.models(e),r.each(function(b){i=d3.select(this);var r=a.utils.availableWidth(g,i,f),s=a.utils.availableHeight(h,i,f);a.utils.initSVG(i),c=e.xScale(),d=e.yScale(),t=t||c,u=u||d;var w=i.selectAll("g.nv-wrap.nv-line").data([b]),x=w.enter().append("g").attr("class","nvd3 nv-wrap nv-line"),y=x.append("defs"),z=x.append("g"),A=w.select("g");z.append("g").attr("class","nv-groups"),z.append("g").attr("class","nv-scatterWrap"),w.attr("transform","translate("+f.left+","+f.top+")"),e.width(r).height(s);var B=w.select(".nv-scatterWrap");B.call(e),y.append("clipPath").attr("id","nv-edge-clip-"+e.id()).append("rect"),w.select("#nv-edge-clip-"+e.id()+" rect").attr("width",r).attr("height",s>0?s:0),A.attr("clip-path",p?"url(#nv-edge-clip-"+e.id()+")":""),B.attr("clip-path",p?"url(#nv-edge-clip-"+e.id()+")":"");var C=w.select(".nv-groups").selectAll(".nv-group").data(function(a){return a},function(a){return a.key});C.enter().append("g").style("stroke-opacity",1e-6).style("stroke-width",function(a){return a.strokeWidth||j}).style("fill-opacity",1e-6),C.exit().remove(),C.attr("class",function(a,b){return(a.classed||"")+" nv-group nv-series-"+b}).classed("hover",function(a){return a.hover}).style("fill",function(a,b){return k(a,b)}).style("stroke",function(a,b){return k(a,b)}),C.watchTransition(v,"line: groups").style("stroke-opacity",1).style("fill-opacity",function(a){return a.fillOpacity||.5});var D=C.selectAll("path.nv-area").data(function(a){return o(a)?[a]:[]});D.enter().append("path").attr("class","nv-area").attr("d",function(b){return d3.svg.area().interpolate(q).defined(n).x(function(b,c){return a.utils.NaNtoZero(t(l(b,c)))}).y0(function(b,c){return a.utils.NaNtoZero(u(m(b,c)))}).y1(function(a,b){return u(d.domain()[0]<=0?d.domain()[1]>=0?0:d.domain()[1]:d.domain()[0])}).apply(this,[b.values])}),C.exit().selectAll("path.nv-area").remove(),D.watchTransition(v,"line: areaPaths").attr("d",function(b){return d3.svg.area().interpolate(q).defined(n).x(function(b,d){return a.utils.NaNtoZero(c(l(b,d)))}).y0(function(b,c){return a.utils.NaNtoZero(d(m(b,c)))}).y1(function(a,b){return d(d.domain()[0]<=0?d.domain()[1]>=0?0:d.domain()[1]:d.domain()[0])}).apply(this,[b.values])});var E=C.selectAll("path.nv-line").data(function(a){return[a.values]});E.enter().append("path").attr("class","nv-line").attr("d",d3.svg.line().interpolate(q).defined(n).x(function(b,c){return a.utils.NaNtoZero(t(l(b,c)))}).y(function(b,c){return a.utils.NaNtoZero(u(m(b,c)))})),E.watchTransition(v,"line: linePaths").attr("d",d3.svg.line().interpolate(q).defined(n).x(function(b,d){return a.utils.NaNtoZero(c(l(b,d)))}).y(function(b,c){return a.utils.NaNtoZero(d(m(b,c)))})),t=c.copy(),u=d.copy()}),v.renderEnd("line immediate"),b}var c,d,e=a.models.scatter(),f={top:0,right:0,bottom:0,left:0},g=960,h=500,i=null,j=1.5,k=a.utils.defaultColor(),l=function(a){return a.x},m=function(a){return a.y},n=function(a,b){return!isNaN(m(a,b))&&null!==m(a,b)},o=function(a){return a.area},p=!1,q="linear",r=250,s=d3.dispatch("elementClick","elementMouseover","elementMouseout","renderEnd");e.pointSize(16).pointDomain([16,256]);var t,u,v=a.utils.renderWatch(s,r);return b.dispatch=s,b.scatter=e,e.dispatch.on("elementClick",function(){s.elementClick.apply(this,arguments)}),e.dispatch.on("elementMouseover",function(){s.elementMouseover.apply(this,arguments)}),e.dispatch.on("elementMouseout",function(){s.elementMouseout.apply(this,arguments)}),b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return g},set:function(a){g=a}},height:{get:function(){return h},set:function(a){h=a}},defined:{get:function(){return n},set:function(a){n=a}},interpolate:{get:function(){return q},set:function(a){q=a}},clipEdge:{get:function(){return p},set:function(a){p=a}},margin:{get:function(){return f},set:function(a){f.top=void 0!==a.top?a.top:f.top,f.right=void 0!==a.right?a.right:f.right,f.bottom=void 0!==a.bottom?a.bottom:f.bottom,f.left=void 0!==a.left?a.left:f.left}},duration:{get:function(){return r},set:function(a){r=a,v.reset(r),e.duration(r)}},isArea:{get:function(){return o},set:function(a){o=d3.functor(a)}},x:{get:function(){return l},set:function(a){l=a,e.x(a)}},y:{get:function(){return m},set:function(a){m=a,e.y(a)}},color:{get:function(){return k},set:function(b){k=a.utils.getColor(b),e.color(k)}}}),a.utils.inheritOptions(b,e),a.utils.initOptions(b),b},a.models.lineChart=function(){"use strict";function b(j){return y.reset(),y.models(e),
-p&&y.models(f),q&&y.models(g),j.each(function(j){var v=d3.select(this),y=this;a.utils.initSVG(v);var B=a.utils.availableWidth(m,v,k),C=a.utils.availableHeight(n,v,k);if(b.update=function(){0===x?v.call(b):v.transition().duration(x).call(b)},b.container=this,t.setter(A(j),b.update).getter(z(j)).update(),t.disabled=j.map(function(a){return!!a.disabled}),!u){var D;u={};for(D in t)t[D]instanceof Array?u[D]=t[D].slice(0):u[D]=t[D]}if(!(j&&j.length&&j.filter(function(a){return a.values.length}).length))return a.utils.noData(b,v),b;v.selectAll(".nv-noData").remove(),c=e.xScale(),d=e.yScale();var E=v.selectAll("g.nv-wrap.nv-lineChart").data([j]),F=E.enter().append("g").attr("class","nvd3 nv-wrap nv-lineChart").append("g"),G=E.select("g");F.append("rect").style("opacity",0),F.append("g").attr("class","nv-x nv-axis"),F.append("g").attr("class","nv-y nv-axis"),F.append("g").attr("class","nv-linesWrap"),F.append("g").attr("class","nv-legendWrap"),F.append("g").attr("class","nv-interactive"),G.select("rect").attr("width",B).attr("height",C>0?C:0),o&&(h.width(B),G.select(".nv-legendWrap").datum(j).call(h),k.top!=h.height()&&(k.top=h.height(),C=a.utils.availableHeight(n,v,k)),E.select(".nv-legendWrap").attr("transform","translate(0,"+-k.top+")")),E.attr("transform","translate("+k.left+","+k.top+")"),r&&G.select(".nv-y.nv-axis").attr("transform","translate("+B+",0)"),s&&(i.width(B).height(C).margin({left:k.left,top:k.top}).svgContainer(v).xScale(c),E.select(".nv-interactive").call(i)),e.width(B).height(C).color(j.map(function(a,b){return a.color||l(a,b)}).filter(function(a,b){return!j[b].disabled}));var H=G.select(".nv-linesWrap").datum(j.filter(function(a){return!a.disabled}));H.call(e),p&&(f.scale(c)._ticks(a.utils.calcTicksX(B/100,j)).tickSize(-C,0),G.select(".nv-x.nv-axis").attr("transform","translate(0,"+d.range()[0]+")"),G.select(".nv-x.nv-axis").call(f)),q&&(g.scale(d)._ticks(a.utils.calcTicksY(C/36,j)).tickSize(-B,0),G.select(".nv-y.nv-axis").call(g)),h.dispatch.on("stateChange",function(a){for(var c in a)t[c]=a[c];w.stateChange(t),b.update()}),i.dispatch.on("elementMousemove",function(c){e.clearHighlights();var d,h,m,n=[];if(j.filter(function(a,b){return a.seriesIndex=b,!a.disabled}).forEach(function(f,g){h=a.interactiveBisect(f.values,c.pointXValue,b.x());var i=f.values[h],j=b.y()(i,h);null!=j&&e.highlightPoint(g,h,!0),void 0!==i&&(void 0===d&&(d=i),void 0===m&&(m=b.xScale()(b.x()(i,h))),n.push({key:f.key,value:j,color:l(f,f.seriesIndex)}))}),n.length>2){var o=b.yScale().invert(c.mouseY),p=Math.abs(b.yScale().domain()[0]-b.yScale().domain()[1]),q=.03*p,r=a.nearestValueIndex(n.map(function(a){return a.value}),o,q);null!==r&&(n[r].highlight=!0)}var s=f.tickFormat()(b.x()(d,h));i.tooltip.position({left:c.mouseX+k.left,top:c.mouseY+k.top}).chartContainer(y.parentNode).valueFormatter(function(a,b){return null==a?"N/A":g.tickFormat()(a)}).data({value:s,index:h,series:n})(),i.renderGuideLine(m)}),i.dispatch.on("elementClick",function(c){var d,f=[];j.filter(function(a,b){return a.seriesIndex=b,!a.disabled}).forEach(function(e){var g=a.interactiveBisect(e.values,c.pointXValue,b.x()),h=e.values[g];if("undefined"!=typeof h){"undefined"==typeof d&&(d=b.xScale()(b.x()(h,g)));var i=b.yScale()(b.y()(h,g));f.push({point:h,pointIndex:g,pos:[d,i],seriesIndex:e.seriesIndex,series:e})}}),e.dispatch.elementClick(f)}),i.dispatch.on("elementMouseout",function(a){e.clearHighlights()}),w.on("changeState",function(a){"undefined"!=typeof a.disabled&&j.length===a.disabled.length&&(j.forEach(function(b,c){b.disabled=a.disabled[c]}),t.disabled=a.disabled),b.update()})}),y.renderEnd("lineChart immediate"),b}var c,d,e=a.models.line(),f=a.models.axis(),g=a.models.axis(),h=a.models.legend(),i=a.interactiveGuideline(),j=a.models.tooltip(),k={top:30,right:20,bottom:50,left:60},l=a.utils.defaultColor(),m=null,n=null,o=!0,p=!0,q=!0,r=!1,s=!1,t=a.utils.state(),u=null,v=null,w=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState","renderEnd"),x=250;f.orient("bottom").tickPadding(7),g.orient(r?"right":"left"),j.valueFormatter(function(a,b){return g.tickFormat()(a,b)}).headerFormatter(function(a,b){return f.tickFormat()(a,b)});var y=a.utils.renderWatch(w,x),z=function(a){return function(){return{active:a.map(function(a){return!a.disabled})}}},A=function(a){return function(b){void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}};return e.dispatch.on("elementMouseover.tooltip",function(a){j.data(a).position(a.pos).hidden(!1)}),e.dispatch.on("elementMouseout.tooltip",function(a){j.hidden(!0)}),b.dispatch=w,b.lines=e,b.legend=h,b.xAxis=f,b.yAxis=g,b.interactiveLayer=i,b.tooltip=j,b.dispatch=w,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return m},set:function(a){m=a}},height:{get:function(){return n},set:function(a){n=a}},showLegend:{get:function(){return o},set:function(a){o=a}},showXAxis:{get:function(){return p},set:function(a){p=a}},showYAxis:{get:function(){return q},set:function(a){q=a}},defaultState:{get:function(){return u},set:function(a){u=a}},noData:{get:function(){return v},set:function(a){v=a}},tooltips:{get:function(){return j.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),j.enabled(!!b)}},tooltipContent:{get:function(){return j.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),j.contentGenerator(b)}},margin:{get:function(){return k},set:function(a){k.top=void 0!==a.top?a.top:k.top,k.right=void 0!==a.right?a.right:k.right,k.bottom=void 0!==a.bottom?a.bottom:k.bottom,k.left=void 0!==a.left?a.left:k.left}},duration:{get:function(){return x},set:function(a){x=a,y.reset(x),e.duration(x),f.duration(x),g.duration(x)}},color:{get:function(){return l},set:function(b){l=a.utils.getColor(b),h.color(l),e.color(l)}},rightAlignYAxis:{get:function(){return r},set:function(a){r=a,g.orient(r?"right":"left")}},useInteractiveGuideline:{get:function(){return s},set:function(a){s=a,s&&(e.interactive(!1),e.useVoronoi(!1))}}}),a.utils.inheritOptions(b,e),a.utils.initOptions(b),b},a.models.linePlusBarChart=function(){"use strict";function b(v){return v.each(function(v){function J(a){var b=+("e"==a),c=b?1:-1,d=X/3;return"M"+.5*c+","+d+"A6,6 0 0 "+b+" "+6.5*c+","+(d+6)+"V"+(2*d-6)+"A6,6 0 0 "+b+" "+.5*c+","+2*d+"ZM"+2.5*c+","+(d+8)+"V"+(2*d-8)+"M"+4.5*c+","+(d+8)+"V"+(2*d-8)}function S(){u.empty()||u.extent(I),ka.data([u.empty()?e.domain():I]).each(function(a,b){var c=e(a[0])-e.range()[0],d=e.range()[1]-e(a[1]);d3.select(this).select(".left").attr("width",0>c?0:c),d3.select(this).select(".right").attr("x",e(a[1])).attr("width",0>d?0:d)})}function T(){I=u.empty()?null:u.extent(),c=u.empty()?e.domain():u.extent(),K.brush({extent:c,brush:u}),S(),l.width(V).height(W).color(v.map(function(a,b){return a.color||C(a,b)}).filter(function(a,b){return!v[b].disabled&&v[b].bar})),j.width(V).height(W).color(v.map(function(a,b){return a.color||C(a,b)}).filter(function(a,b){return!v[b].disabled&&!v[b].bar}));var b=da.select(".nv-focus .nv-barsWrap").datum(Z.length?Z.map(function(a,b){return{key:a.key,values:a.values.filter(function(a,b){return l.x()(a,b)>=c[0]&&l.x()(a,b)<=c[1]})}}):[{values:[]}]),h=da.select(".nv-focus .nv-linesWrap").datum($[0].disabled?[{values:[]}]:$.map(function(a,b){return{area:a.area,fillOpacity:a.fillOpacity,key:a.key,values:a.values.filter(function(a,b){return j.x()(a,b)>=c[0]&&j.x()(a,b)<=c[1]})}}));d=Z.length?l.xScale():j.xScale(),n.scale(d)._ticks(a.utils.calcTicksX(V/100,v)).tickSize(-W,0),n.domain([Math.ceil(c[0]),Math.floor(c[1])]),da.select(".nv-x.nv-axis").transition().duration(L).call(n),b.transition().duration(L).call(l),h.transition().duration(L).call(j),da.select(".nv-focus .nv-x.nv-axis").attr("transform","translate(0,"+f.range()[0]+")"),p.scale(f)._ticks(a.utils.calcTicksY(W/36,v)).tickSize(-V,0),q.scale(g)._ticks(a.utils.calcTicksY(W/36,v)).tickSize(Z.length?0:-V,0),da.select(".nv-focus .nv-y1.nv-axis").style("opacity",Z.length?1:0),da.select(".nv-focus .nv-y2.nv-axis").style("opacity",$.length&&!$[0].disabled?1:0).attr("transform","translate("+d.range()[1]+",0)"),da.select(".nv-focus .nv-y1.nv-axis").transition().duration(L).call(p),da.select(".nv-focus .nv-y2.nv-axis").transition().duration(L).call(q)}var U=d3.select(this);a.utils.initSVG(U);var V=a.utils.availableWidth(y,U,w),W=a.utils.availableHeight(z,U,w)-(E?H:0),X=H-x.top-x.bottom;if(b.update=function(){U.transition().duration(L).call(b)},b.container=this,M.setter(R(v),b.update).getter(Q(v)).update(),M.disabled=v.map(function(a){return!!a.disabled}),!N){var Y;N={};for(Y in M)M[Y]instanceof Array?N[Y]=M[Y].slice(0):N[Y]=M[Y]}if(!(v&&v.length&&v.filter(function(a){return a.values.length}).length))return a.utils.noData(b,U),b;U.selectAll(".nv-noData").remove();var Z=v.filter(function(a){return!a.disabled&&a.bar}),$=v.filter(function(a){return!a.bar});d=l.xScale(),e=o.scale(),f=l.yScale(),g=j.yScale(),h=m.yScale(),i=k.yScale();var _=v.filter(function(a){return!a.disabled&&a.bar}).map(function(a){return a.values.map(function(a,b){return{x:A(a,b),y:B(a,b)}})}),aa=v.filter(function(a){return!a.disabled&&!a.bar}).map(function(a){return a.values.map(function(a,b){return{x:A(a,b),y:B(a,b)}})});d.range([0,V]),e.domain(d3.extent(d3.merge(_.concat(aa)),function(a){return a.x})).range([0,V]);var ba=U.selectAll("g.nv-wrap.nv-linePlusBar").data([v]),ca=ba.enter().append("g").attr("class","nvd3 nv-wrap nv-linePlusBar").append("g"),da=ba.select("g");ca.append("g").attr("class","nv-legendWrap");var ea=ca.append("g").attr("class","nv-focus");ea.append("g").attr("class","nv-x nv-axis"),ea.append("g").attr("class","nv-y1 nv-axis"),ea.append("g").attr("class","nv-y2 nv-axis"),ea.append("g").attr("class","nv-barsWrap"),ea.append("g").attr("class","nv-linesWrap");var fa=ca.append("g").attr("class","nv-context");if(fa.append("g").attr("class","nv-x nv-axis"),fa.append("g").attr("class","nv-y1 nv-axis"),fa.append("g").attr("class","nv-y2 nv-axis"),fa.append("g").attr("class","nv-barsWrap"),fa.append("g").attr("class","nv-linesWrap"),fa.append("g").attr("class","nv-brushBackground"),fa.append("g").attr("class","nv-x nv-brush"),D){var ga=t.align()?V/2:V,ha=t.align()?ga:0;t.width(ga),da.select(".nv-legendWrap").datum(v.map(function(a){return a.originalKey=void 0===a.originalKey?a.key:a.originalKey,a.key=a.originalKey+(a.bar?O:P),a})).call(t),w.top!=t.height()&&(w.top=t.height(),W=a.utils.availableHeight(z,U,w)-H),da.select(".nv-legendWrap").attr("transform","translate("+ha+","+-w.top+")")}ba.attr("transform","translate("+w.left+","+w.top+")"),da.select(".nv-context").style("display",E?"initial":"none"),m.width(V).height(X).color(v.map(function(a,b){return a.color||C(a,b)}).filter(function(a,b){return!v[b].disabled&&v[b].bar})),k.width(V).height(X).color(v.map(function(a,b){return a.color||C(a,b)}).filter(function(a,b){return!v[b].disabled&&!v[b].bar}));var ia=da.select(".nv-context .nv-barsWrap").datum(Z.length?Z:[{values:[]}]),ja=da.select(".nv-context .nv-linesWrap").datum($[0].disabled?[{values:[]}]:$);da.select(".nv-context").attr("transform","translate(0,"+(W+w.bottom+x.top)+")"),ia.transition().call(m),ja.transition().call(k),G&&(o._ticks(a.utils.calcTicksX(V/100,v)).tickSize(-X,0),da.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+h.range()[0]+")"),da.select(".nv-context .nv-x.nv-axis").transition().call(o)),F&&(r.scale(h)._ticks(X/36).tickSize(-V,0),s.scale(i)._ticks(X/36).tickSize(Z.length?0:-V,0),da.select(".nv-context .nv-y3.nv-axis").style("opacity",Z.length?1:0).attr("transform","translate(0,"+e.range()[0]+")"),da.select(".nv-context .nv-y2.nv-axis").style("opacity",$.length?1:0).attr("transform","translate("+e.range()[1]+",0)"),da.select(".nv-context .nv-y1.nv-axis").transition().call(r),da.select(".nv-context .nv-y2.nv-axis").transition().call(s)),u.x(e).on("brush",T),I&&u.extent(I);var ka=da.select(".nv-brushBackground").selectAll("g").data([I||u.extent()]),la=ka.enter().append("g");la.append("rect").attr("class","left").attr("x",0).attr("y",0).attr("height",X),la.append("rect").attr("class","right").attr("x",0).attr("y",0).attr("height",X);var ma=da.select(".nv-x.nv-brush").call(u);ma.selectAll("rect").attr("height",X),ma.selectAll(".resize").append("path").attr("d",J),t.dispatch.on("stateChange",function(a){for(var c in a)M[c]=a[c];K.stateChange(M),b.update()}),K.on("changeState",function(a){"undefined"!=typeof a.disabled&&(v.forEach(function(b,c){b.disabled=a.disabled[c]}),M.disabled=a.disabled),b.update()}),T()}),b}var c,d,e,f,g,h,i,j=a.models.line(),k=a.models.line(),l=a.models.historicalBar(),m=a.models.historicalBar(),n=a.models.axis(),o=a.models.axis(),p=a.models.axis(),q=a.models.axis(),r=a.models.axis(),s=a.models.axis(),t=a.models.legend(),u=d3.svg.brush(),v=a.models.tooltip(),w={top:30,right:30,bottom:30,left:60},x={top:0,right:30,bottom:20,left:60},y=null,z=null,A=function(a){return a.x},B=function(a){return a.y},C=a.utils.defaultColor(),D=!0,E=!0,F=!1,G=!0,H=50,I=null,J=null,K=d3.dispatch("brush","stateChange","changeState"),L=0,M=a.utils.state(),N=null,O=" (left axis)",P=" (right axis)";j.clipEdge(!0),k.interactive(!1),n.orient("bottom").tickPadding(5),p.orient("left"),q.orient("right"),o.orient("bottom").tickPadding(5),r.orient("left"),s.orient("right"),v.headerEnabled(!0).headerFormatter(function(a,b){return n.tickFormat()(a,b)});var Q=function(a){return function(){return{active:a.map(function(a){return!a.disabled})}}},R=function(a){return function(b){void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}};return j.dispatch.on("elementMouseover.tooltip",function(a){v.duration(100).valueFormatter(function(a,b){return q.tickFormat()(a,b)}).data(a).position(a.pos).hidden(!1)}),j.dispatch.on("elementMouseout.tooltip",function(a){v.hidden(!0)}),l.dispatch.on("elementMouseover.tooltip",function(a){a.value=b.x()(a.data),a.series={value:b.y()(a.data),color:a.color},v.duration(0).valueFormatter(function(a,b){return p.tickFormat()(a,b)}).data(a).hidden(!1)}),l.dispatch.on("elementMouseout.tooltip",function(a){v.hidden(!0)}),l.dispatch.on("elementMousemove.tooltip",function(a){v.position({top:d3.event.pageY,left:d3.event.pageX})()}),b.dispatch=K,b.legend=t,b.lines=j,b.lines2=k,b.bars=l,b.bars2=m,b.xAxis=n,b.x2Axis=o,b.y1Axis=p,b.y2Axis=q,b.y3Axis=r,b.y4Axis=s,b.tooltip=v,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return y},set:function(a){y=a}},height:{get:function(){return z},set:function(a){z=a}},showLegend:{get:function(){return D},set:function(a){D=a}},brushExtent:{get:function(){return I},set:function(a){I=a}},noData:{get:function(){return J},set:function(a){J=a}},focusEnable:{get:function(){return E},set:function(a){E=a}},focusHeight:{get:function(){return H},set:function(a){H=a}},focusShowAxisX:{get:function(){return G},set:function(a){G=a}},focusShowAxisY:{get:function(){return F},set:function(a){F=a}},legendLeftAxisHint:{get:function(){return O},set:function(a){O=a}},legendRightAxisHint:{get:function(){return P},set:function(a){P=a}},tooltips:{get:function(){return v.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),v.enabled(!!b)}},tooltipContent:{get:function(){return v.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),v.contentGenerator(b)}},margin:{get:function(){return w},set:function(a){w.top=void 0!==a.top?a.top:w.top,w.right=void 0!==a.right?a.right:w.right,w.bottom=void 0!==a.bottom?a.bottom:w.bottom,w.left=void 0!==a.left?a.left:w.left}},duration:{get:function(){return L},set:function(a){L=a}},color:{get:function(){return C},set:function(b){C=a.utils.getColor(b),t.color(C)}},x:{get:function(){return A},set:function(a){A=a,j.x(a),k.x(a),l.x(a),m.x(a)}},y:{get:function(){return B},set:function(a){B=a,j.y(a),k.y(a),l.y(a),m.y(a)}}}),a.utils.inheritOptions(b,j),a.utils.initOptions(b),b},a.models.lineWithFocusChart=function(){"use strict";function b(o){return o.each(function(o){function z(a){var b=+("e"==a),c=b?1:-1,d=M/3;return"M"+.5*c+","+d+"A6,6 0 0 "+b+" "+6.5*c+","+(d+6)+"V"+(2*d-6)+"A6,6 0 0 "+b+" "+.5*c+","+2*d+"ZM"+2.5*c+","+(d+8)+"V"+(2*d-8)+"M"+4.5*c+","+(d+8)+"V"+(2*d-8)}function G(){n.empty()||n.extent(y),U.data([n.empty()?e.domain():y]).each(function(a,b){var d=e(a[0])-c.range()[0],f=K-e(a[1]);d3.select(this).select(".left").attr("width",0>d?0:d),d3.select(this).select(".right").attr("x",e(a[1])).attr("width",0>f?0:f)})}function H(){y=n.empty()?null:n.extent();var a=n.empty()?e.domain():n.extent();if(!(Math.abs(a[0]-a[1])<=1)){A.brush({extent:a,brush:n}),G();var b=Q.select(".nv-focus .nv-linesWrap").datum(o.filter(function(a){return!a.disabled}).map(function(b,c){return{key:b.key,area:b.area,values:b.values.filter(function(b,c){return g.x()(b,c)>=a[0]&&g.x()(b,c)<=a[1]})}}));b.transition().duration(B).call(g),Q.select(".nv-focus .nv-x.nv-axis").transition().duration(B).call(i),Q.select(".nv-focus .nv-y.nv-axis").transition().duration(B).call(j)}}var I=d3.select(this),J=this;a.utils.initSVG(I);var K=a.utils.availableWidth(t,I,q),L=a.utils.availableHeight(u,I,q)-v,M=v-r.top-r.bottom;if(b.update=function(){I.transition().duration(B).call(b)},b.container=this,C.setter(F(o),b.update).getter(E(o)).update(),C.disabled=o.map(function(a){return!!a.disabled}),!D){var N;D={};for(N in C)C[N]instanceof Array?D[N]=C[N].slice(0):D[N]=C[N]}if(!(o&&o.length&&o.filter(function(a){return a.values.length}).length))return a.utils.noData(b,I),b;I.selectAll(".nv-noData").remove(),c=g.xScale(),d=g.yScale(),e=h.xScale(),f=h.yScale();var O=I.selectAll("g.nv-wrap.nv-lineWithFocusChart").data([o]),P=O.enter().append("g").attr("class","nvd3 nv-wrap nv-lineWithFocusChart").append("g"),Q=O.select("g");P.append("g").attr("class","nv-legendWrap");var R=P.append("g").attr("class","nv-focus");R.append("g").attr("class","nv-x nv-axis"),R.append("g").attr("class","nv-y nv-axis"),R.append("g").attr("class","nv-linesWrap"),R.append("g").attr("class","nv-interactive");var S=P.append("g").attr("class","nv-context");S.append("g").attr("class","nv-x nv-axis"),S.append("g").attr("class","nv-y nv-axis"),S.append("g").attr("class","nv-linesWrap"),S.append("g").attr("class","nv-brushBackground"),S.append("g").attr("class","nv-x nv-brush"),x&&(m.width(K),Q.select(".nv-legendWrap").datum(o).call(m),q.top!=m.height()&&(q.top=m.height(),L=a.utils.availableHeight(u,I,q)-v),Q.select(".nv-legendWrap").attr("transform","translate(0,"+-q.top+")")),O.attr("transform","translate("+q.left+","+q.top+")"),w&&(p.width(K).height(L).margin({left:q.left,top:q.top}).svgContainer(I).xScale(c),O.select(".nv-interactive").call(p)),g.width(K).height(L).color(o.map(function(a,b){return a.color||s(a,b)}).filter(function(a,b){return!o[b].disabled})),h.defined(g.defined()).width(K).height(M).color(o.map(function(a,b){return a.color||s(a,b)}).filter(function(a,b){return!o[b].disabled})),Q.select(".nv-context").attr("transform","translate(0,"+(L+q.bottom+r.top)+")");var T=Q.select(".nv-context .nv-linesWrap").datum(o.filter(function(a){return!a.disabled}));d3.transition(T).call(h),i.scale(c)._ticks(a.utils.calcTicksX(K/100,o)).tickSize(-L,0),j.scale(d)._ticks(a.utils.calcTicksY(L/36,o)).tickSize(-K,0),Q.select(".nv-focus .nv-x.nv-axis").attr("transform","translate(0,"+L+")"),n.x(e).on("brush",function(){H()}),y&&n.extent(y);var U=Q.select(".nv-brushBackground").selectAll("g").data([y||n.extent()]),V=U.enter().append("g");V.append("rect").attr("class","left").attr("x",0).attr("y",0).attr("height",M),V.append("rect").attr("class","right").attr("x",0).attr("y",0).attr("height",M);var W=Q.select(".nv-x.nv-brush").call(n);W.selectAll("rect").attr("height",M),W.selectAll(".resize").append("path").attr("d",z),H(),k.scale(e)._ticks(a.utils.calcTicksX(K/100,o)).tickSize(-M,0),Q.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+f.range()[0]+")"),d3.transition(Q.select(".nv-context .nv-x.nv-axis")).call(k),l.scale(f)._ticks(a.utils.calcTicksY(M/36,o)).tickSize(-K,0),d3.transition(Q.select(".nv-context .nv-y.nv-axis")).call(l),Q.select(".nv-context .nv-x.nv-axis").attr("transform","translate(0,"+f.range()[0]+")"),m.dispatch.on("stateChange",function(a){for(var c in a)C[c]=a[c];A.stateChange(C),b.update()}),p.dispatch.on("elementMousemove",function(c){g.clearHighlights();var d,f,h,k=[];if(o.filter(function(a,b){return a.seriesIndex=b,!a.disabled}).forEach(function(i,j){var l=n.empty()?e.domain():n.extent(),m=i.values.filter(function(a,b){return g.x()(a,b)>=l[0]&&g.x()(a,b)<=l[1]});f=a.interactiveBisect(m,c.pointXValue,g.x());var o=m[f],p=b.y()(o,f);null!=p&&g.highlightPoint(j,f,!0),void 0!==o&&(void 0===d&&(d=o),void 0===h&&(h=b.xScale()(b.x()(o,f))),k.push({key:i.key,value:b.y()(o,f),color:s(i,i.seriesIndex)}))}),k.length>2){var l=b.yScale().invert(c.mouseY),m=Math.abs(b.yScale().domain()[0]-b.yScale().domain()[1]),r=.03*m,t=a.nearestValueIndex(k.map(function(a){return a.value}),l,r);null!==t&&(k[t].highlight=!0)}var u=i.tickFormat()(b.x()(d,f));p.tooltip.position({left:c.mouseX+q.left,top:c.mouseY+q.top}).chartContainer(J.parentNode).valueFormatter(function(a,b){return null==a?"N/A":j.tickFormat()(a)}).data({value:u,index:f,series:k})(),p.renderGuideLine(h)}),p.dispatch.on("elementMouseout",function(a){g.clearHighlights()}),A.on("changeState",function(a){"undefined"!=typeof a.disabled&&o.forEach(function(b,c){b.disabled=a.disabled[c]}),b.update()})}),b}var c,d,e,f,g=a.models.line(),h=a.models.line(),i=a.models.axis(),j=a.models.axis(),k=a.models.axis(),l=a.models.axis(),m=a.models.legend(),n=d3.svg.brush(),o=a.models.tooltip(),p=a.interactiveGuideline(),q={top:30,right:30,bottom:30,left:60},r={top:0,right:30,bottom:20,left:60},s=a.utils.defaultColor(),t=null,u=null,v=50,w=!1,x=!0,y=null,z=null,A=d3.dispatch("brush","stateChange","changeState"),B=250,C=a.utils.state(),D=null;g.clipEdge(!0).duration(0),h.interactive(!1),i.orient("bottom").tickPadding(5),j.orient("left"),k.orient("bottom").tickPadding(5),l.orient("left"),o.valueFormatter(function(a,b){return j.tickFormat()(a,b)}).headerFormatter(function(a,b){return i.tickFormat()(a,b)});var E=function(a){return function(){return{active:a.map(function(a){return!a.disabled})}}},F=function(a){return function(b){void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}};return g.dispatch.on("elementMouseover.tooltip",function(a){o.data(a).position(a.pos).hidden(!1)}),g.dispatch.on("elementMouseout.tooltip",function(a){o.hidden(!0)}),b.dispatch=A,b.legend=m,b.lines=g,b.lines2=h,b.xAxis=i,b.yAxis=j,b.x2Axis=k,b.y2Axis=l,b.interactiveLayer=p,b.tooltip=o,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return t},set:function(a){t=a}},height:{get:function(){return u},set:function(a){u=a}},focusHeight:{get:function(){return v},set:function(a){v=a}},showLegend:{get:function(){return x},set:function(a){x=a}},brushExtent:{get:function(){return y},set:function(a){y=a}},defaultState:{get:function(){return D},set:function(a){D=a}},noData:{get:function(){return z},set:function(a){z=a}},tooltips:{get:function(){return o.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),o.enabled(!!b)}},tooltipContent:{get:function(){return o.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),o.contentGenerator(b)}},margin:{get:function(){return q},set:function(a){q.top=void 0!==a.top?a.top:q.top,q.right=void 0!==a.right?a.right:q.right,q.bottom=void 0!==a.bottom?a.bottom:q.bottom,q.left=void 0!==a.left?a.left:q.left}},color:{get:function(){return s},set:function(b){s=a.utils.getColor(b),m.color(s)}},interpolate:{get:function(){return g.interpolate()},set:function(a){g.interpolate(a),h.interpolate(a)}},xTickFormat:{get:function(){return i.tickFormat()},set:function(a){i.tickFormat(a),k.tickFormat(a)}},yTickFormat:{get:function(){return j.tickFormat()},set:function(a){j.tickFormat(a),l.tickFormat(a)}},duration:{get:function(){return B},set:function(a){B=a,j.duration(B),l.duration(B),i.duration(B),k.duration(B)}},x:{get:function(){return g.x()},set:function(a){g.x(a),h.x(a)}},y:{get:function(){return g.y()},set:function(a){g.y(a),h.y(a)}},useInteractiveGuideline:{get:function(){return w},set:function(a){w=a,w&&(g.interactive(!1),g.useVoronoi(!1))}}}),a.utils.inheritOptions(b,g),a.utils.initOptions(b),b},a.models.multiBar=function(){"use strict";function b(G){return E.reset(),G.each(function(b){var G=k-j.left-j.right,H=l-j.top-j.bottom;p=d3.select(this),a.utils.initSVG(p);var I=0;if(z&&b.length&&(z=[{values:b[0].values.map(function(a){return{x:a.x,y:0,series:a.series,size:.01}})}]),v){var J=d3.layout.stack().offset(w).values(function(a){return a.values}).y(r)(!b.length&&z?z:b);J.forEach(function(a,c){a.nonStackable?(b[c].nonStackableSeries=I++,J[c]=b[c]):c>0&&J[c-1].nonStackable&&J[c].values.map(function(a,b){a.y0-=J[c-1].values[b].y,a.y1=a.y0+a.y})}),b=J}b.forEach(function(a,b){a.values.forEach(function(c){c.series=b,c.key=a.key})}),v&&b[0].values.map(function(a,c){var d=0,e=0;b.map(function(a,f){if(!b[f].nonStackable){var g=a.values[c];g.size=Math.abs(g.y),g.y<0?(g.y1=e,e-=g.size):(g.y1=g.size+d,d+=g.size)}})});var K=d&&e?[]:b.map(function(a,b){return a.values.map(function(a,c){return{x:q(a,c),y:r(a,c),y0:a.y0,y1:a.y1,idx:b,yErr:s(a,c)}})});m.domain(d||d3.merge(K).map(function(a){return a.x})).rangeBands(f||[0,G],C),n.domain(e||d3.extent(d3.merge(d3.merge(K).map(function(a){var c=a.y;v&&!b[a.idx].nonStackable&&(c=a.y>0?a.y1:a.y1+a.y);var d=a.yErr;return d?d.length?[c+d[0],c+d[1]]:(d=Math.abs(d),[c-d,c+d]):[c]})).concat(t))).range(g||[H,0]),m.domain()[0]===m.domain()[1]&&(m.domain()[0]?m.domain([m.domain()[0]-.01*m.domain()[0],m.domain()[1]+.01*m.domain()[1]]):m.domain([-1,1])),n.domain()[0]===n.domain()[1]&&(n.domain()[0]?n.domain([n.domain()[0]+.01*n.domain()[0],n.domain()[1]-.01*n.domain()[1]]):n.domain([-1,1])),h=h||m,i=i||n;var L=p.selectAll("g.nv-wrap.nv-multibar").data([b]),M=L.enter().append("g").attr("class","nvd3 nv-wrap nv-multibar"),N=M.append("defs"),O=M.append("g"),P=L.select("g");O.append("g").attr("class","nv-groups"),L.attr("transform","translate("+j.left+","+j.top+")"),N.append("clipPath").attr("id","nv-edge-clip-"+o).append("rect"),L.select("#nv-edge-clip-"+o+" rect").attr("width",G).attr("height",H),P.attr("clip-path",u?"url(#nv-edge-clip-"+o+")":"");var Q=L.select(".nv-groups").selectAll(".nv-group").data(function(a){return a},function(a,b){return b});Q.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6);var R=E.transition(Q.exit().selectAll("g.nv-bar"),"multibarExit",Math.min(100,B)).attr("y",function(a,c,d){var e=i(0)||0;return v&&b[a.series]&&!b[a.series].nonStackable&&(e=i(a.y0)),e}).attr("height",0).remove();R.delay&&R.delay(function(a,b){var c=b*(B/(F+1))-b;return c}),Q.attr("class",function(a,b){return"nv-group nv-series-"+b}).classed("hover",function(a){return a.hover}).style("fill",function(a,b){return x(a,b)}).style("stroke",function(a,b){return x(a,b)}),Q.style("stroke-opacity",1).style("fill-opacity",.75);var S=Q.selectAll("g.nv-bar").data(function(a){return z&&!b.length?z.values:a.values});S.exit().remove();var T=S.enter().append("g").attr("class",function(a,b){return r(a,b)<0?"nv-bar negative":"nv-bar positive"}).attr("transform",function(a,c,d){var e=v&&!b[d].nonStackable?0:d*m.rangeBand()/b.length,f=i(v&&!b[d].nonStackable?a.y0:0)||0;return"translate("+e+","+f+")"});T.append("rect").attr("height",0).attr("width",function(a,c,d){return m.rangeBand()/(v&&!b[d].nonStackable?1:b.length)}).style("fill",function(a,b,c){return x(a,c,b)}).style("stroke",function(a,b,c){return x(a,c,b)}),S.on("mouseover",function(a,b){d3.select(this).classed("hover",!0),D.elementMouseover({data:a,index:b,color:d3.select(this).style("fill")})}).on("mouseout",function(a,b){d3.select(this).classed("hover",!1),D.elementMouseout({data:a,index:b,color:d3.select(this).style("fill")})}).on("mousemove",function(a,b){D.elementMousemove({data:a,index:b,color:d3.select(this).style("fill")})}).on("click",function(a,b){D.elementClick({data:a,index:b,color:d3.select(this).style("fill")}),d3.event.stopPropagation()}).on("dblclick",function(a,b){D.elementDblClick({data:a,index:b,color:d3.select(this).style("fill")}),d3.event.stopPropagation()}),s(b[0].values[0],0)&&(T.append("polyline"),S.select("polyline").attr("fill","none").attr("stroke",function(a,b,c){return y(a,c,b)}).attr("points",function(a,c){var d=s(a,c),e=.8*m.rangeBand()/(2*(v?1:b.length));d=d.length?d:[-Math.abs(d),Math.abs(d)],d=d.map(function(a){return n(a)-n(0)});var f=[[-e,d[0]],[e,d[0]],[0,d[0]],[0,d[1]],[-e,d[1]],[e,d[1]]];return f.map(function(a){return a.join(",")}).join(" ")}).attr("transform",function(a,c){var d=m.rangeBand()/(2*(v?1:b.length)),e=r(a,c)<0?n(r(a,c))-n(0):0;return"translate("+d+", "+e+")"})),S.attr("class",function(a,b){return r(a,b)<0?"nv-bar negative":"nv-bar positive"}),A&&(c||(c=b.map(function(){return!0})),S.select("rect").style("fill",function(a,b,d){return d3.rgb(A(a,b)).darker(c.map(function(a,b){return b}).filter(function(a,b){return!c[b]})[d]).toString()}).style("stroke",function(a,b,d){return d3.rgb(A(a,b)).darker(c.map(function(a,b){return b}).filter(function(a,b){return!c[b]})[d]).toString()}));var U=S.watchTransition(E,"multibar",Math.min(250,B)).delay(function(a,c){return c*B/b[0].values.length});v?U.attr("transform",function(a,c,d){var e=0;e=b[d].nonStackable?r(a,c)<0?n(0):n(0)-n(r(a,c))<-1?n(0)-1:n(r(a,c))||0:n(a.y1);var f=0;b[d].nonStackable&&(f=a.series*m.rangeBand()/b.length,b.length!==I&&(f=b[d].nonStackableSeries*m.rangeBand()/(2*I)));var g=f+m(q(a,c));return"translate("+g+","+e+")"}).select("rect").attr("height",function(a,c,d){return b[d].nonStackable?Math.max(Math.abs(n(r(a,c))-n(0)),1)||0:Math.max(Math.abs(n(a.y+a.y0)-n(a.y0)),1)}).attr("width",function(a,c,d){if(b[d].nonStackable){var e=m.rangeBand()/I;return b.length!==I&&(e=m.rangeBand()/(2*I)),e}return m.rangeBand()}):U.attr("transform",function(a,c){var d=a.series*m.rangeBand()/b.length+m(q(a,c)),e=r(a,c)<0?n(0):n(0)-n(r(a,c))<1?n(0)-1:n(r(a,c))||0;return"translate("+d+","+e+")"}).select("rect").attr("width",m.rangeBand()/b.length).attr("height",function(a,b){return Math.max(Math.abs(n(r(a,b))-n(0)),1)||0}),h=m.copy(),i=n.copy(),b[0]&&b[0].values&&(F=b[0].values.length)}),E.renderEnd("multibar immediate"),b}var c,d,e,f,g,h,i,j={top:0,right:0,bottom:0,left:0},k=960,l=500,m=d3.scale.ordinal(),n=d3.scale.linear(),o=Math.floor(1e4*Math.random()),p=null,q=function(a){return a.x},r=function(a){return a.y},s=function(a){return a.yErr},t=[0],u=!0,v=!1,w="zero",x=a.utils.defaultColor(),y=a.utils.defaultColor(),z=!1,A=null,B=500,C=.1,D=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout","elementMousemove","renderEnd"),E=a.utils.renderWatch(D,B),F=0;return b.dispatch=D,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return k},set:function(a){k=a}},height:{get:function(){return l},set:function(a){l=a}},x:{get:function(){return q},set:function(a){q=a}},y:{get:function(){return r},set:function(a){r=a}},yErr:{get:function(){return s},set:function(a){s=a}},xScale:{get:function(){return m},set:function(a){m=a}},yScale:{get:function(){return n},set:function(a){n=a}},xDomain:{get:function(){return d},set:function(a){d=a}},yDomain:{get:function(){return e},set:function(a){e=a}},xRange:{get:function(){return f},set:function(a){f=a}},yRange:{get:function(){return g},set:function(a){g=a}},forceY:{get:function(){return t},set:function(a){t=a}},stacked:{get:function(){return v},set:function(a){v=a}},stackOffset:{get:function(){return w},set:function(a){w=a}},clipEdge:{get:function(){return u},set:function(a){u=a}},disabled:{get:function(){return c},set:function(a){c=a}},id:{get:function(){return o},set:function(a){o=a}},hideable:{get:function(){
-return z},set:function(a){z=a}},groupSpacing:{get:function(){return C},set:function(a){C=a}},margin:{get:function(){return j},set:function(a){j.top=void 0!==a.top?a.top:j.top,j.right=void 0!==a.right?a.right:j.right,j.bottom=void 0!==a.bottom?a.bottom:j.bottom,j.left=void 0!==a.left?a.left:j.left}},duration:{get:function(){return B},set:function(a){B=a,E.reset(B)}},color:{get:function(){return x},set:function(b){x=a.utils.getColor(b)}},barColor:{get:function(){return A},set:function(b){A=b?a.utils.getColor(b):null}},errorBarColor:{get:function(){return y},set:function(b){y=b?a.utils.getColor(b):null}}}),a.utils.initOptions(b),b},a.models.multiBarChart=function(){"use strict";function b(j){return D.reset(),D.models(e),r&&D.models(f),s&&D.models(g),j.each(function(j){var z=d3.select(this);a.utils.initSVG(z);var D=a.utils.availableWidth(l,z,k),H=a.utils.availableHeight(m,z,k);if(b.update=function(){0===C?z.call(b):z.transition().duration(C).call(b)},b.container=this,x.setter(G(j),b.update).getter(F(j)).update(),x.disabled=j.map(function(a){return!!a.disabled}),!y){var I;y={};for(I in x)x[I]instanceof Array?y[I]=x[I].slice(0):y[I]=x[I]}if(!(j&&j.length&&j.filter(function(a){return a.values.length}).length))return a.utils.noData(b,z),b;z.selectAll(".nv-noData").remove(),c=e.xScale(),d=e.yScale();var J=z.selectAll("g.nv-wrap.nv-multiBarWithLegend").data([j]),K=J.enter().append("g").attr("class","nvd3 nv-wrap nv-multiBarWithLegend").append("g"),L=J.select("g");if(K.append("g").attr("class","nv-x nv-axis"),K.append("g").attr("class","nv-y nv-axis"),K.append("g").attr("class","nv-barsWrap"),K.append("g").attr("class","nv-legendWrap"),K.append("g").attr("class","nv-controlsWrap"),q&&(h.width(D-B()),L.select(".nv-legendWrap").datum(j).call(h),k.top!=h.height()&&(k.top=h.height(),H=a.utils.availableHeight(m,z,k)),L.select(".nv-legendWrap").attr("transform","translate("+B()+","+-k.top+")")),o){var M=[{key:p.grouped||"Grouped",disabled:e.stacked()},{key:p.stacked||"Stacked",disabled:!e.stacked()}];i.width(B()).color(["#444","#444","#444"]),L.select(".nv-controlsWrap").datum(M).attr("transform","translate(0,"+-k.top+")").call(i)}J.attr("transform","translate("+k.left+","+k.top+")"),t&&L.select(".nv-y.nv-axis").attr("transform","translate("+D+",0)"),e.disabled(j.map(function(a){return a.disabled})).width(D).height(H).color(j.map(function(a,b){return a.color||n(a,b)}).filter(function(a,b){return!j[b].disabled}));var N=L.select(".nv-barsWrap").datum(j.filter(function(a){return!a.disabled}));if(N.call(e),r){f.scale(c)._ticks(a.utils.calcTicksX(D/100,j)).tickSize(-H,0),L.select(".nv-x.nv-axis").attr("transform","translate(0,"+d.range()[0]+")"),L.select(".nv-x.nv-axis").call(f);var O=L.select(".nv-x.nv-axis > g").selectAll("g");if(O.selectAll("line, text").style("opacity",1),v){var P=function(a,b){return"translate("+a+","+b+")"},Q=5,R=17;O.selectAll("text").attr("transform",function(a,b,c){return P(0,c%2==0?Q:R)});var S=d3.selectAll(".nv-x.nv-axis .nv-wrap g g text")[0].length;L.selectAll(".nv-x.nv-axis .nv-axisMaxMin text").attr("transform",function(a,b){return P(0,0===b||S%2!==0?R:Q)})}u&&O.filter(function(a,b){return b%Math.ceil(j[0].values.length/(D/100))!==0}).selectAll("text, line").style("opacity",0),w&&O.selectAll(".tick text").attr("transform","rotate("+w+" 0,0)").style("text-anchor",w>0?"start":"end"),L.select(".nv-x.nv-axis").selectAll("g.nv-axisMaxMin text").style("opacity",1)}s&&(g.scale(d)._ticks(a.utils.calcTicksY(H/36,j)).tickSize(-D,0),L.select(".nv-y.nv-axis").call(g)),h.dispatch.on("stateChange",function(a){for(var c in a)x[c]=a[c];A.stateChange(x),b.update()}),i.dispatch.on("legendClick",function(a,c){if(a.disabled){switch(M=M.map(function(a){return a.disabled=!0,a}),a.disabled=!1,a.key){case"Grouped":case p.grouped:e.stacked(!1);break;case"Stacked":case p.stacked:e.stacked(!0)}x.stacked=e.stacked(),A.stateChange(x),b.update()}}),A.on("changeState",function(a){"undefined"!=typeof a.disabled&&(j.forEach(function(b,c){b.disabled=a.disabled[c]}),x.disabled=a.disabled),"undefined"!=typeof a.stacked&&(e.stacked(a.stacked),x.stacked=a.stacked,E=a.stacked),b.update()})}),D.renderEnd("multibarchart immediate"),b}var c,d,e=a.models.multiBar(),f=a.models.axis(),g=a.models.axis(),h=a.models.legend(),i=a.models.legend(),j=a.models.tooltip(),k={top:30,right:20,bottom:50,left:60},l=null,m=null,n=a.utils.defaultColor(),o=!0,p={},q=!0,r=!0,s=!0,t=!1,u=!0,v=!1,w=0,x=a.utils.state(),y=null,z=null,A=d3.dispatch("stateChange","changeState","renderEnd"),B=function(){return o?180:0},C=250;x.stacked=!1,e.stacked(!1),f.orient("bottom").tickPadding(7).showMaxMin(!1).tickFormat(function(a){return a}),g.orient(t?"right":"left").tickFormat(d3.format(",.1f")),j.duration(0).valueFormatter(function(a,b){return g.tickFormat()(a,b)}).headerFormatter(function(a,b){return f.tickFormat()(a,b)}),i.updateState(!1);var D=a.utils.renderWatch(A),E=!1,F=function(a){return function(){return{active:a.map(function(a){return!a.disabled}),stacked:E}}},G=function(a){return function(b){void 0!==b.stacked&&(E=b.stacked),void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}};return e.dispatch.on("elementMouseover.tooltip",function(a){a.value=b.x()(a.data),a.series={key:a.data.key,value:b.y()(a.data),color:a.color},j.data(a).hidden(!1)}),e.dispatch.on("elementMouseout.tooltip",function(a){j.hidden(!0)}),e.dispatch.on("elementMousemove.tooltip",function(a){j.position({top:d3.event.pageY,left:d3.event.pageX})()}),b.dispatch=A,b.multibar=e,b.legend=h,b.controls=i,b.xAxis=f,b.yAxis=g,b.state=x,b.tooltip=j,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return l},set:function(a){l=a}},height:{get:function(){return m},set:function(a){m=a}},showLegend:{get:function(){return q},set:function(a){q=a}},showControls:{get:function(){return o},set:function(a){o=a}},controlLabels:{get:function(){return p},set:function(a){p=a}},showXAxis:{get:function(){return r},set:function(a){r=a}},showYAxis:{get:function(){return s},set:function(a){s=a}},defaultState:{get:function(){return y},set:function(a){y=a}},noData:{get:function(){return z},set:function(a){z=a}},reduceXTicks:{get:function(){return u},set:function(a){u=a}},rotateLabels:{get:function(){return w},set:function(a){w=a}},staggerLabels:{get:function(){return v},set:function(a){v=a}},tooltips:{get:function(){return j.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),j.enabled(!!b)}},tooltipContent:{get:function(){return j.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),j.contentGenerator(b)}},margin:{get:function(){return k},set:function(a){k.top=void 0!==a.top?a.top:k.top,k.right=void 0!==a.right?a.right:k.right,k.bottom=void 0!==a.bottom?a.bottom:k.bottom,k.left=void 0!==a.left?a.left:k.left}},duration:{get:function(){return C},set:function(a){C=a,e.duration(C),f.duration(C),g.duration(C),D.reset(C)}},color:{get:function(){return n},set:function(b){n=a.utils.getColor(b),h.color(n)}},rightAlignYAxis:{get:function(){return t},set:function(a){t=a,g.orient(t?"right":"left")}},barColor:{get:function(){return e.barColor},set:function(a){e.barColor(a),h.color(function(a,b){return d3.rgb("#ccc").darker(1.5*b).toString()})}}}),a.utils.inheritOptions(b,e),a.utils.initOptions(b),b},a.models.multiBarHorizontal=function(){"use strict";function b(m){return F.reset(),m.each(function(b){var m=k-j.left-j.right,D=l-j.top-j.bottom;n=d3.select(this),a.utils.initSVG(n),x&&(b=d3.layout.stack().offset("zero").values(function(a){return a.values}).y(r)(b)),b.forEach(function(a,b){a.values.forEach(function(c){c.series=b,c.key=a.key})}),x&&b[0].values.map(function(a,c){var d=0,e=0;b.map(function(a){var b=a.values[c];b.size=Math.abs(b.y),b.y<0?(b.y1=e-b.size,e-=b.size):(b.y1=d,d+=b.size)})});var G=d&&e?[]:b.map(function(a){return a.values.map(function(a,b){return{x:q(a,b),y:r(a,b),y0:a.y0,y1:a.y1,yErr:s(a,b)}})});o.domain(d||d3.merge(G).map(function(a){return a.x})).rangeBands(f||[0,D],B),p.domain(e||d3.extent(d3.merge(d3.merge(G).map(function(a){var b=a.y;x&&(b=a.y>0?a.y1+a.y:a.y1);var c=a.yErr;return c?c.length?[b+c[0],b+c[1]]:(c=Math.abs(c),[b-c,b+c]):[b]})).concat(t))),y&&!x?p.range(g||[p.domain()[0]<0?A:0,m-(p.domain()[1]>0?A:0)]):p.range(g||[0,m]),h=h||o,i=i||d3.scale.linear().domain(p.domain()).range([p(0),p(0)]);var H=d3.select(this).selectAll("g.nv-wrap.nv-multibarHorizontal").data([b]),I=H.enter().append("g").attr("class","nvd3 nv-wrap nv-multibarHorizontal"),J=(I.append("defs"),I.append("g"));H.select("g");J.append("g").attr("class","nv-groups"),H.attr("transform","translate("+j.left+","+j.top+")");var K=H.select(".nv-groups").selectAll(".nv-group").data(function(a){return a},function(a,b){return b});K.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),K.exit().watchTransition(F,"multibarhorizontal: exit groups").style("stroke-opacity",1e-6).style("fill-opacity",1e-6).remove(),K.attr("class",function(a,b){return"nv-group nv-series-"+b}).classed("hover",function(a){return a.hover}).style("fill",function(a,b){return u(a,b)}).style("stroke",function(a,b){return u(a,b)}),K.watchTransition(F,"multibarhorizontal: groups").style("stroke-opacity",1).style("fill-opacity",.75);var L=K.selectAll("g.nv-bar").data(function(a){return a.values});L.exit().remove();var M=L.enter().append("g").attr("transform",function(a,c,d){return"translate("+i(x?a.y0:0)+","+(x?0:d*o.rangeBand()/b.length+o(q(a,c)))+")"});M.append("rect").attr("width",0).attr("height",o.rangeBand()/(x?1:b.length)),L.on("mouseover",function(a,b){d3.select(this).classed("hover",!0),E.elementMouseover({data:a,index:b,color:d3.select(this).style("fill")})}).on("mouseout",function(a,b){d3.select(this).classed("hover",!1),E.elementMouseout({data:a,index:b,color:d3.select(this).style("fill")})}).on("mouseout",function(a,b){E.elementMouseout({data:a,index:b,color:d3.select(this).style("fill")})}).on("mousemove",function(a,b){E.elementMousemove({data:a,index:b,color:d3.select(this).style("fill")})}).on("click",function(a,b){E.elementClick({data:a,index:b,color:d3.select(this).style("fill")}),d3.event.stopPropagation()}).on("dblclick",function(a,b){E.elementDblClick({data:a,index:b,color:d3.select(this).style("fill")}),d3.event.stopPropagation()}),s(b[0].values[0],0)&&(M.append("polyline"),L.select("polyline").attr("fill","none").attr("stroke",function(a,b,c){return w(a,c,b)}).attr("points",function(a,c){var d=s(a,c),e=.8*o.rangeBand()/(2*(x?1:b.length));d=d.length?d:[-Math.abs(d),Math.abs(d)],d=d.map(function(a){return p(a)-p(0)});var f=[[d[0],-e],[d[0],e],[d[0],0],[d[1],0],[d[1],-e],[d[1],e]];return f.map(function(a){return a.join(",")}).join(" ")}).attr("transform",function(a,c){var d=o.rangeBand()/(2*(x?1:b.length));return"translate("+(r(a,c)<0?0:p(r(a,c))-p(0))+", "+d+")"})),M.append("text"),y&&!x?(L.select("text").attr("text-anchor",function(a,b){return r(a,b)<0?"end":"start"}).attr("y",o.rangeBand()/(2*b.length)).attr("dy",".32em").text(function(a,b){var c=C(r(a,b)),d=s(a,b);return void 0===d?c:d.length?c+"+"+C(Math.abs(d[1]))+"-"+C(Math.abs(d[0])):c+"±"+C(Math.abs(d))}),L.watchTransition(F,"multibarhorizontal: bars").select("text").attr("x",function(a,b){return r(a,b)<0?-4:p(r(a,b))-p(0)+4})):L.selectAll("text").text(""),z&&!x?(M.append("text").classed("nv-bar-label",!0),L.select("text.nv-bar-label").attr("text-anchor",function(a,b){return r(a,b)<0?"start":"end"}).attr("y",o.rangeBand()/(2*b.length)).attr("dy",".32em").text(function(a,b){return q(a,b)}),L.watchTransition(F,"multibarhorizontal: bars").select("text.nv-bar-label").attr("x",function(a,b){return r(a,b)<0?p(0)-p(r(a,b))+4:-4})):L.selectAll("text.nv-bar-label").text(""),L.attr("class",function(a,b){return r(a,b)<0?"nv-bar negative":"nv-bar positive"}),v&&(c||(c=b.map(function(){return!0})),L.style("fill",function(a,b,d){return d3.rgb(v(a,b)).darker(c.map(function(a,b){return b}).filter(function(a,b){return!c[b]})[d]).toString()}).style("stroke",function(a,b,d){return d3.rgb(v(a,b)).darker(c.map(function(a,b){return b}).filter(function(a,b){return!c[b]})[d]).toString()})),x?L.watchTransition(F,"multibarhorizontal: bars").attr("transform",function(a,b){return"translate("+p(a.y1)+","+o(q(a,b))+")"}).select("rect").attr("width",function(a,b){return Math.abs(p(r(a,b)+a.y0)-p(a.y0))}).attr("height",o.rangeBand()):L.watchTransition(F,"multibarhorizontal: bars").attr("transform",function(a,c){return"translate("+p(r(a,c)<0?r(a,c):0)+","+(a.series*o.rangeBand()/b.length+o(q(a,c)))+")"}).select("rect").attr("height",o.rangeBand()/b.length).attr("width",function(a,b){return Math.max(Math.abs(p(r(a,b))-p(0)),1)}),h=o.copy(),i=p.copy()}),F.renderEnd("multibarHorizontal immediate"),b}var c,d,e,f,g,h,i,j={top:0,right:0,bottom:0,left:0},k=960,l=500,m=Math.floor(1e4*Math.random()),n=null,o=d3.scale.ordinal(),p=d3.scale.linear(),q=function(a){return a.x},r=function(a){return a.y},s=function(a){return a.yErr},t=[0],u=a.utils.defaultColor(),v=null,w=a.utils.defaultColor(),x=!1,y=!1,z=!1,A=60,B=.1,C=d3.format(",.2f"),D=250,E=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout","elementMousemove","renderEnd"),F=a.utils.renderWatch(E,D);return b.dispatch=E,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return k},set:function(a){k=a}},height:{get:function(){return l},set:function(a){l=a}},x:{get:function(){return q},set:function(a){q=a}},y:{get:function(){return r},set:function(a){r=a}},yErr:{get:function(){return s},set:function(a){s=a}},xScale:{get:function(){return o},set:function(a){o=a}},yScale:{get:function(){return p},set:function(a){p=a}},xDomain:{get:function(){return d},set:function(a){d=a}},yDomain:{get:function(){return e},set:function(a){e=a}},xRange:{get:function(){return f},set:function(a){f=a}},yRange:{get:function(){return g},set:function(a){g=a}},forceY:{get:function(){return t},set:function(a){t=a}},stacked:{get:function(){return x},set:function(a){x=a}},showValues:{get:function(){return y},set:function(a){y=a}},disabled:{get:function(){return c},set:function(a){c=a}},id:{get:function(){return m},set:function(a){m=a}},valueFormat:{get:function(){return C},set:function(a){C=a}},valuePadding:{get:function(){return A},set:function(a){A=a}},groupSpacing:{get:function(){return B},set:function(a){B=a}},margin:{get:function(){return j},set:function(a){j.top=void 0!==a.top?a.top:j.top,j.right=void 0!==a.right?a.right:j.right,j.bottom=void 0!==a.bottom?a.bottom:j.bottom,j.left=void 0!==a.left?a.left:j.left}},duration:{get:function(){return D},set:function(a){D=a,F.reset(D)}},color:{get:function(){return u},set:function(b){u=a.utils.getColor(b)}},barColor:{get:function(){return v},set:function(b){v=b?a.utils.getColor(b):null}},errorBarColor:{get:function(){return w},set:function(b){w=b?a.utils.getColor(b):null}}}),a.utils.initOptions(b),b},a.models.multiBarHorizontalChart=function(){"use strict";function b(j){return C.reset(),C.models(e),r&&C.models(f),s&&C.models(g),j.each(function(j){var w=d3.select(this);a.utils.initSVG(w);var C=a.utils.availableWidth(l,w,k),D=a.utils.availableHeight(m,w,k);if(b.update=function(){w.transition().duration(z).call(b)},b.container=this,t=e.stacked(),u.setter(B(j),b.update).getter(A(j)).update(),u.disabled=j.map(function(a){return!!a.disabled}),!v){var E;v={};for(E in u)u[E]instanceof Array?v[E]=u[E].slice(0):v[E]=u[E]}if(!(j&&j.length&&j.filter(function(a){return a.values.length}).length))return a.utils.noData(b,w),b;w.selectAll(".nv-noData").remove(),c=e.xScale(),d=e.yScale();var F=w.selectAll("g.nv-wrap.nv-multiBarHorizontalChart").data([j]),G=F.enter().append("g").attr("class","nvd3 nv-wrap nv-multiBarHorizontalChart").append("g"),H=F.select("g");if(G.append("g").attr("class","nv-x nv-axis"),G.append("g").attr("class","nv-y nv-axis").append("g").attr("class","nv-zeroLine").append("line"),G.append("g").attr("class","nv-barsWrap"),G.append("g").attr("class","nv-legendWrap"),G.append("g").attr("class","nv-controlsWrap"),q&&(h.width(C-y()),H.select(".nv-legendWrap").datum(j).call(h),k.top!=h.height()&&(k.top=h.height(),D=a.utils.availableHeight(m,w,k)),H.select(".nv-legendWrap").attr("transform","translate("+y()+","+-k.top+")")),o){var I=[{key:p.grouped||"Grouped",disabled:e.stacked()},{key:p.stacked||"Stacked",disabled:!e.stacked()}];i.width(y()).color(["#444","#444","#444"]),H.select(".nv-controlsWrap").datum(I).attr("transform","translate(0,"+-k.top+")").call(i)}F.attr("transform","translate("+k.left+","+k.top+")"),e.disabled(j.map(function(a){return a.disabled})).width(C).height(D).color(j.map(function(a,b){return a.color||n(a,b)}).filter(function(a,b){return!j[b].disabled}));var J=H.select(".nv-barsWrap").datum(j.filter(function(a){return!a.disabled}));if(J.transition().call(e),r){f.scale(c)._ticks(a.utils.calcTicksY(D/24,j)).tickSize(-C,0),H.select(".nv-x.nv-axis").call(f);var K=H.select(".nv-x.nv-axis").selectAll("g");K.selectAll("line, text")}s&&(g.scale(d)._ticks(a.utils.calcTicksX(C/100,j)).tickSize(-D,0),H.select(".nv-y.nv-axis").attr("transform","translate(0,"+D+")"),H.select(".nv-y.nv-axis").call(g)),H.select(".nv-zeroLine line").attr("x1",d(0)).attr("x2",d(0)).attr("y1",0).attr("y2",-D),h.dispatch.on("stateChange",function(a){for(var c in a)u[c]=a[c];x.stateChange(u),b.update()}),i.dispatch.on("legendClick",function(a,c){if(a.disabled){switch(I=I.map(function(a){return a.disabled=!0,a}),a.disabled=!1,a.key){case"Grouped":e.stacked(!1);break;case"Stacked":e.stacked(!0)}u.stacked=e.stacked(),x.stateChange(u),t=e.stacked(),b.update()}}),x.on("changeState",function(a){"undefined"!=typeof a.disabled&&(j.forEach(function(b,c){b.disabled=a.disabled[c]}),u.disabled=a.disabled),"undefined"!=typeof a.stacked&&(e.stacked(a.stacked),u.stacked=a.stacked,t=a.stacked),b.update()})}),C.renderEnd("multibar horizontal chart immediate"),b}var c,d,e=a.models.multiBarHorizontal(),f=a.models.axis(),g=a.models.axis(),h=a.models.legend().height(30),i=a.models.legend().height(30),j=a.models.tooltip(),k={top:30,right:20,bottom:50,left:60},l=null,m=null,n=a.utils.defaultColor(),o=!0,p={},q=!0,r=!0,s=!0,t=!1,u=a.utils.state(),v=null,w=null,x=d3.dispatch("stateChange","changeState","renderEnd"),y=function(){return o?180:0},z=250;u.stacked=!1,e.stacked(t),f.orient("left").tickPadding(5).showMaxMin(!1).tickFormat(function(a){return a}),g.orient("bottom").tickFormat(d3.format(",.1f")),j.duration(0).valueFormatter(function(a,b){return g.tickFormat()(a,b)}).headerFormatter(function(a,b){return f.tickFormat()(a,b)}),i.updateState(!1);var A=function(a){return function(){return{active:a.map(function(a){return!a.disabled}),stacked:t}}},B=function(a){return function(b){void 0!==b.stacked&&(t=b.stacked),void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}},C=a.utils.renderWatch(x,z);return e.dispatch.on("elementMouseover.tooltip",function(a){a.value=b.x()(a.data),a.series={key:a.data.key,value:b.y()(a.data),color:a.color},j.data(a).hidden(!1)}),e.dispatch.on("elementMouseout.tooltip",function(a){j.hidden(!0)}),e.dispatch.on("elementMousemove.tooltip",function(a){j.position({top:d3.event.pageY,left:d3.event.pageX})()}),b.dispatch=x,b.multibar=e,b.legend=h,b.controls=i,b.xAxis=f,b.yAxis=g,b.state=u,b.tooltip=j,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return l},set:function(a){l=a}},height:{get:function(){return m},set:function(a){m=a}},showLegend:{get:function(){return q},set:function(a){q=a}},showControls:{get:function(){return o},set:function(a){o=a}},controlLabels:{get:function(){return p},set:function(a){p=a}},showXAxis:{get:function(){return r},set:function(a){r=a}},showYAxis:{get:function(){return s},set:function(a){s=a}},defaultState:{get:function(){return v},set:function(a){v=a}},noData:{get:function(){return w},set:function(a){w=a}},tooltips:{get:function(){return j.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),j.enabled(!!b)}},tooltipContent:{get:function(){return j.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),j.contentGenerator(b)}},margin:{get:function(){return k},set:function(a){k.top=void 0!==a.top?a.top:k.top,k.right=void 0!==a.right?a.right:k.right,k.bottom=void 0!==a.bottom?a.bottom:k.bottom,k.left=void 0!==a.left?a.left:k.left}},duration:{get:function(){return z},set:function(a){z=a,C.reset(z),e.duration(z),f.duration(z),g.duration(z)}},color:{get:function(){return n},set:function(b){n=a.utils.getColor(b),h.color(n)}},barColor:{get:function(){return e.barColor},set:function(a){e.barColor(a),h.color(function(a,b){return d3.rgb("#ccc").darker(1.5*b).toString()})}}}),a.utils.inheritOptions(b,e),a.utils.initOptions(b),b},a.models.multiChart=function(){"use strict";function b(j){return j.each(function(j){function k(a){var b=2===j[a.seriesIndex].yAxis?z:y;a.value=a.point.x,a.series={value:a.point.y,color:a.point.color},B.duration(100).valueFormatter(function(a,c){return b.tickFormat()(a,c)}).data(a).position(a.pos).hidden(!1)}function l(a){var b=2===j[a.seriesIndex].yAxis?z:y;a.point.x=v.x()(a.point),a.point.y=v.y()(a.point),B.duration(100).valueFormatter(function(a,c){return b.tickFormat()(a,c)}).data(a).position(a.pos).hidden(!1)}function n(a){var b=2===j[a.data.series].yAxis?z:y;a.value=t.x()(a.data),a.series={value:t.y()(a.data),color:a.color},B.duration(0).valueFormatter(function(a,c){return b.tickFormat()(a,c)}).data(a).hidden(!1)}var C=d3.select(this);a.utils.initSVG(C),b.update=function(){C.transition().call(b)},b.container=this;var D=a.utils.availableWidth(g,C,e),E=a.utils.availableHeight(h,C,e),F=j.filter(function(a){return"line"==a.type&&1==a.yAxis}),G=j.filter(function(a){return"line"==a.type&&2==a.yAxis}),H=j.filter(function(a){return"bar"==a.type&&1==a.yAxis}),I=j.filter(function(a){return"bar"==a.type&&2==a.yAxis}),J=j.filter(function(a){return"area"==a.type&&1==a.yAxis}),K=j.filter(function(a){return"area"==a.type&&2==a.yAxis});if(!(j&&j.length&&j.filter(function(a){return a.values.length}).length))return a.utils.noData(b,C),b;C.selectAll(".nv-noData").remove();var L=j.filter(function(a){return!a.disabled&&1==a.yAxis}).map(function(a){return a.values.map(function(a,b){return{x:a.x,y:a.y}})}),M=j.filter(function(a){return!a.disabled&&2==a.yAxis}).map(function(a){return a.values.map(function(a,b){return{x:a.x,y:a.y}})});o.domain(d3.extent(d3.merge(L.concat(M)),function(a){return a.x})).range([0,D]);var N=C.selectAll("g.wrap.multiChart").data([j]),O=N.enter().append("g").attr("class","wrap nvd3 multiChart").append("g");O.append("g").attr("class","nv-x nv-axis"),O.append("g").attr("class","nv-y1 nv-axis"),O.append("g").attr("class","nv-y2 nv-axis"),O.append("g").attr("class","lines1Wrap"),O.append("g").attr("class","lines2Wrap"),O.append("g").attr("class","bars1Wrap"),O.append("g").attr("class","bars2Wrap"),O.append("g").attr("class","stack1Wrap"),O.append("g").attr("class","stack2Wrap"),O.append("g").attr("class","legendWrap");var P=N.select("g"),Q=j.map(function(a,b){return j[b].color||f(a,b)});if(i){var R=A.align()?D/2:D,S=A.align()?R:0;A.width(R),A.color(Q),P.select(".legendWrap").datum(j.map(function(a){return a.originalKey=void 0===a.originalKey?a.key:a.originalKey,a.key=a.originalKey+(1==a.yAxis?"":" (right axis)"),a})).call(A),e.top!=A.height()&&(e.top=A.height(),E=a.utils.availableHeight(h,C,e)),P.select(".legendWrap").attr("transform","translate("+S+","+-e.top+")")}r.width(D).height(E).interpolate(m).color(Q.filter(function(a,b){return!j[b].disabled&&1==j[b].yAxis&&"line"==j[b].type})),s.width(D).height(E).interpolate(m).color(Q.filter(function(a,b){return!j[b].disabled&&2==j[b].yAxis&&"line"==j[b].type})),t.width(D).height(E).color(Q.filter(function(a,b){return!j[b].disabled&&1==j[b].yAxis&&"bar"==j[b].type})),u.width(D).height(E).color(Q.filter(function(a,b){return!j[b].disabled&&2==j[b].yAxis&&"bar"==j[b].type})),v.width(D).height(E).color(Q.filter(function(a,b){return!j[b].disabled&&1==j[b].yAxis&&"area"==j[b].type})),w.width(D).height(E).color(Q.filter(function(a,b){return!j[b].disabled&&2==j[b].yAxis&&"area"==j[b].type})),P.attr("transform","translate("+e.left+","+e.top+")");var T=P.select(".lines1Wrap").datum(F.filter(function(a){return!a.disabled})),U=P.select(".bars1Wrap").datum(H.filter(function(a){return!a.disabled})),V=P.select(".stack1Wrap").datum(J.filter(function(a){return!a.disabled})),W=P.select(".lines2Wrap").datum(G.filter(function(a){return!a.disabled})),X=P.select(".bars2Wrap").datum(I.filter(function(a){return!a.disabled})),Y=P.select(".stack2Wrap").datum(K.filter(function(a){return!a.disabled})),Z=J.length?J.map(function(a){return a.values}).reduce(function(a,b){return a.map(function(a,c){return{x:a.x,y:a.y+b[c].y}})}).concat([{x:0,y:0}]):[],$=K.length?K.map(function(a){return a.values}).reduce(function(a,b){return a.map(function(a,c){return{x:a.x,y:a.y+b[c].y}})}).concat([{x:0,y:0}]):[];p.domain(c||d3.extent(d3.merge(L).concat(Z),function(a){return a.y})).range([0,E]),q.domain(d||d3.extent(d3.merge(M).concat($),function(a){return a.y})).range([0,E]),r.yDomain(p.domain()),t.yDomain(p.domain()),v.yDomain(p.domain()),s.yDomain(q.domain()),u.yDomain(q.domain()),w.yDomain(q.domain()),J.length&&d3.transition(V).call(v),K.length&&d3.transition(Y).call(w),H.length&&d3.transition(U).call(t),I.length&&d3.transition(X).call(u),F.length&&d3.transition(T).call(r),G.length&&d3.transition(W).call(s),x._ticks(a.utils.calcTicksX(D/100,j)).tickSize(-E,0),P.select(".nv-x.nv-axis").attr("transform","translate(0,"+E+")"),d3.transition(P.select(".nv-x.nv-axis")).call(x),y._ticks(a.utils.calcTicksY(E/36,j)).tickSize(-D,0),d3.transition(P.select(".nv-y1.nv-axis")).call(y),z._ticks(a.utils.calcTicksY(E/36,j)).tickSize(-D,0),d3.transition(P.select(".nv-y2.nv-axis")).call(z),P.select(".nv-y1.nv-axis").classed("nv-disabled",L.length?!1:!0).attr("transform","translate("+o.range()[0]+",0)"),P.select(".nv-y2.nv-axis").classed("nv-disabled",M.length?!1:!0).attr("transform","translate("+o.range()[1]+",0)"),A.dispatch.on("stateChange",function(a){b.update()}),r.dispatch.on("elementMouseover.tooltip",k),s.dispatch.on("elementMouseover.tooltip",k),r.dispatch.on("elementMouseout.tooltip",function(a){B.hidden(!0)}),s.dispatch.on("elementMouseout.tooltip",function(a){B.hidden(!0)}),v.dispatch.on("elementMouseover.tooltip",l),w.dispatch.on("elementMouseover.tooltip",l),v.dispatch.on("elementMouseout.tooltip",function(a){B.hidden(!0)}),w.dispatch.on("elementMouseout.tooltip",function(a){B.hidden(!0)}),t.dispatch.on("elementMouseover.tooltip",n),u.dispatch.on("elementMouseover.tooltip",n),t.dispatch.on("elementMouseout.tooltip",function(a){B.hidden(!0)}),u.dispatch.on("elementMouseout.tooltip",function(a){B.hidden(!0)}),t.dispatch.on("elementMousemove.tooltip",function(a){B.position({top:d3.event.pageY,left:d3.event.pageX})()}),u.dispatch.on("elementMousemove.tooltip",function(a){B.position({top:d3.event.pageY,left:d3.event.pageX})()})}),b}var c,d,e={top:30,right:20,bottom:50,left:60},f=a.utils.defaultColor(),g=null,h=null,i=!0,j=null,k=function(a){return a.x},l=function(a){return a.y},m="monotone",n=!0,o=d3.scale.linear(),p=d3.scale.linear(),q=d3.scale.linear(),r=a.models.line().yScale(p),s=a.models.line().yScale(q),t=a.models.multiBar().stacked(!1).yScale(p),u=a.models.multiBar().stacked(!1).yScale(q),v=a.models.stackedArea().yScale(p),w=a.models.stackedArea().yScale(q),x=a.models.axis().scale(o).orient("bottom").tickPadding(5),y=a.models.axis().scale(p).orient("left"),z=a.models.axis().scale(q).orient("right"),A=a.models.legend().height(30),B=a.models.tooltip(),C=d3.dispatch();return b.dispatch=C,b.lines1=r,b.lines2=s,b.bars1=t,b.bars2=u,b.stack1=v,b.stack2=w,b.xAxis=x,b.yAxis1=y,b.yAxis2=z,b.tooltip=B,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return g},set:function(a){g=a}},height:{get:function(){return h},set:function(a){h=a}},showLegend:{get:function(){return i},set:function(a){i=a}},yDomain1:{get:function(){return c},set:function(a){c=a}},yDomain2:{get:function(){return d},set:function(a){d=a}},noData:{get:function(){return j},set:function(a){j=a}},interpolate:{get:function(){return m},set:function(a){m=a}},tooltips:{get:function(){return B.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),B.enabled(!!b)}},tooltipContent:{get:function(){return B.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),B.contentGenerator(b)}},margin:{get:function(){return e},set:function(a){e.top=void 0!==a.top?a.top:e.top,e.right=void 0!==a.right?a.right:e.right,e.bottom=void 0!==a.bottom?a.bottom:e.bottom,e.left=void 0!==a.left?a.left:e.left}},color:{get:function(){return f},set:function(b){f=a.utils.getColor(b)}},x:{get:function(){return k},set:function(a){k=a,r.x(a),s.x(a),t.x(a),u.x(a),v.x(a),w.x(a)}},y:{get:function(){return l},set:function(a){l=a,r.y(a),s.y(a),v.y(a),w.y(a),t.y(a),u.y(a)}},useVoronoi:{get:function(){return n},set:function(a){n=a,r.useVoronoi(a),s.useVoronoi(a),v.useVoronoi(a),w.useVoronoi(a)}}}),a.utils.initOptions(b),b},a.models.ohlcBar=function(){"use strict";function b(y){return y.each(function(b){k=d3.select(this);var y=a.utils.availableWidth(h,k,g),A=a.utils.availableHeight(i,k,g);a.utils.initSVG(k);var B=y/b[0].values.length*.9;l.domain(c||d3.extent(b[0].values.map(n).concat(t))),v?l.range(e||[.5*y/b[0].values.length,y*(b[0].values.length-.5)/b[0].values.length]):l.range(e||[5+B/2,y-B/2-5]),m.domain(d||[d3.min(b[0].values.map(s).concat(u)),d3.max(b[0].values.map(r).concat(u))]).range(f||[A,0]),l.domain()[0]===l.domain()[1]&&(l.domain()[0]?l.domain([l.domain()[0]-.01*l.domain()[0],l.domain()[1]+.01*l.domain()[1]]):l.domain([-1,1])),m.domain()[0]===m.domain()[1]&&(m.domain()[0]?m.domain([m.domain()[0]+.01*m.domain()[0],m.domain()[1]-.01*m.domain()[1]]):m.domain([-1,1]));var C=d3.select(this).selectAll("g.nv-wrap.nv-ohlcBar").data([b[0].values]),D=C.enter().append("g").attr("class","nvd3 nv-wrap nv-ohlcBar"),E=D.append("defs"),F=D.append("g"),G=C.select("g");F.append("g").attr("class","nv-ticks"),C.attr("transform","translate("+g.left+","+g.top+")"),k.on("click",function(a,b){z.chartClick({data:a,index:b,pos:d3.event,id:j})}),E.append("clipPath").attr("id","nv-chart-clip-path-"+j).append("rect"),C.select("#nv-chart-clip-path-"+j+" rect").attr("width",y).attr("height",A),G.attr("clip-path",w?"url(#nv-chart-clip-path-"+j+")":"");var H=C.select(".nv-ticks").selectAll(".nv-tick").data(function(a){return a});H.exit().remove(),H.enter().append("path").attr("class",function(a,b,c){return(p(a,b)>q(a,b)?"nv-tick negative":"nv-tick positive")+" nv-tick-"+c+"-"+b}).attr("d",function(a,b){return"m0,0l0,"+(m(p(a,b))-m(r(a,b)))+"l"+-B/2+",0l"+B/2+",0l0,"+(m(s(a,b))-m(p(a,b)))+"l0,"+(m(q(a,b))-m(s(a,b)))+"l"+B/2+",0l"+-B/2+",0z"}).attr("transform",function(a,b){return"translate("+l(n(a,b))+","+m(r(a,b))+")"}).attr("fill",function(a,b){return x[0]}).attr("stroke",function(a,b){return x[0]}).attr("x",0).attr("y",function(a,b){return m(Math.max(0,o(a,b)))}).attr("height",function(a,b){return Math.abs(m(o(a,b))-m(0))}),H.attr("class",function(a,b,c){return(p(a,b)>q(a,b)?"nv-tick negative":"nv-tick positive")+" nv-tick-"+c+"-"+b}),d3.transition(H).attr("transform",function(a,b){return"translate("+l(n(a,b))+","+m(r(a,b))+")"}).attr("d",function(a,c){var d=y/b[0].values.length*.9;return"m0,0l0,"+(m(p(a,c))-m(r(a,c)))+"l"+-d/2+",0l"+d/2+",0l0,"+(m(s(a,c))-m(p(a,c)))+"l0,"+(m(q(a,c))-m(s(a,c)))+"l"+d/2+",0l"+-d/2+",0z"})}),b}var c,d,e,f,g={top:0,right:0,bottom:0,left:0},h=null,i=null,j=Math.floor(1e4*Math.random()),k=null,l=d3.scale.linear(),m=d3.scale.linear(),n=function(a){return a.x},o=function(a){return a.y},p=function(a){return a.open},q=function(a){return a.close},r=function(a){return a.high},s=function(a){return a.low;
-},t=[],u=[],v=!1,w=!0,x=a.utils.defaultColor(),y=!1,z=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState","renderEnd","chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout","elementMousemove");return b.highlightPoint=function(a,c){b.clearHighlights(),k.select(".nv-ohlcBar .nv-tick-0-"+a).classed("hover",c)},b.clearHighlights=function(){k.select(".nv-ohlcBar .nv-tick.hover").classed("hover",!1)},b.dispatch=z,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return h},set:function(a){h=a}},height:{get:function(){return i},set:function(a){i=a}},xScale:{get:function(){return l},set:function(a){l=a}},yScale:{get:function(){return m},set:function(a){m=a}},xDomain:{get:function(){return c},set:function(a){c=a}},yDomain:{get:function(){return d},set:function(a){d=a}},xRange:{get:function(){return e},set:function(a){e=a}},yRange:{get:function(){return f},set:function(a){f=a}},forceX:{get:function(){return t},set:function(a){t=a}},forceY:{get:function(){return u},set:function(a){u=a}},padData:{get:function(){return v},set:function(a){v=a}},clipEdge:{get:function(){return w},set:function(a){w=a}},id:{get:function(){return j},set:function(a){j=a}},interactive:{get:function(){return y},set:function(a){y=a}},x:{get:function(){return n},set:function(a){n=a}},y:{get:function(){return o},set:function(a){o=a}},open:{get:function(){return p()},set:function(a){p=a}},close:{get:function(){return q()},set:function(a){q=a}},high:{get:function(){return r},set:function(a){r=a}},low:{get:function(){return s},set:function(a){s=a}},margin:{get:function(){return g},set:function(a){g.top=void 0!=a.top?a.top:g.top,g.right=void 0!=a.right?a.right:g.right,g.bottom=void 0!=a.bottom?a.bottom:g.bottom,g.left=void 0!=a.left?a.left:g.left}},color:{get:function(){return x},set:function(b){x=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.parallelCoordinates=function(){"use strict";function b(p){return p.each(function(b){function p(a){return F(h.map(function(b){if(isNaN(a[b])||isNaN(parseFloat(a[b]))){var c=g[b].domain(),d=g[b].range(),e=c[0]-(c[1]-c[0])/9;if(J.indexOf(b)<0){var h=d3.scale.linear().domain([e,c[1]]).range([x-12,d[1]]);g[b].brush.y(h),J.push(b)}return[f(b),g[b](e)]}return J.length>0?(D.style("display","inline"),E.style("display","inline")):(D.style("display","none"),E.style("display","none")),[f(b),g[b](a[b])]}))}function q(){var a=h.filter(function(a){return!g[a].brush.empty()}),b=a.map(function(a){return g[a].brush.extent()});k=[],a.forEach(function(a,c){k[c]={dimension:a,extent:b[c]}}),l=[],M.style("display",function(c){var d=a.every(function(a,d){return isNaN(c[a])&&b[d][0]==g[a].brush.y().domain()[0]?!0:b[d][0]<=c[a]&&c[a]<=b[d][1]});return d&&l.push(c),d?null:"none"}),o.brush({filters:k,active:l})}function r(a,b){m[a]=this.parentNode.__origin__=f(a),L.attr("visibility","hidden")}function s(a,b){m[a]=Math.min(w,Math.max(0,this.parentNode.__origin__+=d3.event.x)),M.attr("d",p),h.sort(function(a,b){return u(a)-u(b)}),f.domain(h),N.attr("transform",function(a){return"translate("+u(a)+")"})}function t(a,b){delete this.parentNode.__origin__,delete m[a],d3.select(this.parentNode).attr("transform","translate("+f(a)+")"),M.attr("d",p),L.attr("d",p).attr("visibility",null)}function u(a){var b=m[a];return null==b?f(a):b}var v=d3.select(this),w=a.utils.availableWidth(d,v,c),x=a.utils.availableHeight(e,v,c);a.utils.initSVG(v),l=b,f.rangePoints([0,w],1).domain(h);var y={};h.forEach(function(a){var c=d3.extent(b,function(b){return+b[a]});return y[a]=!1,void 0===c[0]&&(y[a]=!0,c[0]=0,c[1]=0),c[0]===c[1]&&(c[0]=c[0]-1,c[1]=c[1]+1),g[a]=d3.scale.linear().domain(c).range([.9*(x-12),0]),g[a].brush=d3.svg.brush().y(g[a]).on("brush",q),"name"!=a});var z=v.selectAll("g.nv-wrap.nv-parallelCoordinates").data([b]),A=z.enter().append("g").attr("class","nvd3 nv-wrap nv-parallelCoordinates"),B=A.append("g"),C=z.select("g");B.append("g").attr("class","nv-parallelCoordinates background"),B.append("g").attr("class","nv-parallelCoordinates foreground"),B.append("g").attr("class","nv-parallelCoordinates missingValuesline"),z.attr("transform","translate("+c.left+","+c.top+")");var D,E,F=d3.svg.line().interpolate("cardinal").tension(n),G=d3.svg.axis().orient("left"),H=d3.behavior.drag().on("dragstart",r).on("drag",s).on("dragend",t),I=f.range()[1]-f.range()[0],J=[],K=[0+I/2,x-12,w-I/2,x-12];D=z.select(".missingValuesline").selectAll("line").data([K]),D.enter().append("line"),D.exit().remove(),D.attr("x1",function(a){return a[0]}).attr("y1",function(a){return a[1]}).attr("x2",function(a){return a[2]}).attr("y2",function(a){return a[3]}),E=z.select(".missingValuesline").selectAll("text").data(["undefined values"]),E.append("text").data(["undefined values"]),E.enter().append("text"),E.exit().remove(),E.attr("y",x).attr("x",w-92-I/2).text(function(a){return a});var L=z.select(".background").selectAll("path").data(b);L.enter().append("path"),L.exit().remove(),L.attr("d",p);var M=z.select(".foreground").selectAll("path").data(b);M.enter().append("path"),M.exit().remove(),M.attr("d",p).attr("stroke",j),M.on("mouseover",function(a,b){d3.select(this).classed("hover",!0),o.elementMouseover({label:a.name,data:a.data,index:b,pos:[d3.mouse(this.parentNode)[0],d3.mouse(this.parentNode)[1]]})}),M.on("mouseout",function(a,b){d3.select(this).classed("hover",!1),o.elementMouseout({label:a.name,data:a.data,index:b})});var N=C.selectAll(".dimension").data(h),O=N.enter().append("g").attr("class","nv-parallelCoordinates dimension");O.append("g").attr("class","nv-parallelCoordinates nv-axis"),O.append("g").attr("class","nv-parallelCoordinates-brush"),O.append("text").attr("class","nv-parallelCoordinates nv-label"),N.attr("transform",function(a){return"translate("+f(a)+",0)"}),N.exit().remove(),N.select(".nv-label").style("cursor","move").attr("dy","-1em").attr("text-anchor","middle").text(String).on("mouseover",function(a,b){o.elementMouseover({dim:a,pos:[d3.mouse(this.parentNode.parentNode)[0],d3.mouse(this.parentNode.parentNode)[1]]})}).on("mouseout",function(a,b){o.elementMouseout({dim:a})}).call(H),N.select(".nv-axis").each(function(a,b){d3.select(this).call(G.scale(g[a]).tickFormat(d3.format(i[b])))}),N.select(".nv-parallelCoordinates-brush").each(function(a){d3.select(this).call(g[a].brush)}).selectAll("rect").attr("x",-8).attr("width",16)}),b}var c={top:30,right:0,bottom:10,left:0},d=null,e=null,f=d3.scale.ordinal(),g={},h=[],i=[],j=a.utils.defaultColor(),k=[],l=[],m=[],n=1,o=d3.dispatch("brush","elementMouseover","elementMouseout");return b.dispatch=o,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return d},set:function(a){d=a}},height:{get:function(){return e},set:function(a){e=a}},dimensionNames:{get:function(){return h},set:function(a){h=a}},dimensionFormats:{get:function(){return i},set:function(a){i=a}},lineTension:{get:function(){return n},set:function(a){n=a}},dimensions:{get:function(){return h},set:function(b){a.deprecated("dimensions","use dimensionNames instead"),h=b}},margin:{get:function(){return c},set:function(a){c.top=void 0!==a.top?a.top:c.top,c.right=void 0!==a.right?a.right:c.right,c.bottom=void 0!==a.bottom?a.bottom:c.bottom,c.left=void 0!==a.left?a.left:c.left}},color:{get:function(){return j},set:function(b){j=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.pie=function(){"use strict";function b(E){return D.reset(),E.each(function(b){function E(a,b){a.endAngle=isNaN(a.endAngle)?0:a.endAngle,a.startAngle=isNaN(a.startAngle)?0:a.startAngle,p||(a.innerRadius=0);var c=d3.interpolate(this._current,a);return this._current=c(0),function(a){return B[b](c(a))}}var F=d-c.left-c.right,G=e-c.top-c.bottom,H=Math.min(F,G)/2,I=[],J=[];if(i=d3.select(this),0===z.length)for(var K=H-H/5,L=y*H,M=0;M<b[0].length;M++)I.push(K),J.push(L);else I=z.map(function(a){return(a.outer-a.outer/5)*H}),J=z.map(function(a){return(a.inner-a.inner/5)*H}),y=d3.min(z.map(function(a){return a.inner-a.inner/5}));a.utils.initSVG(i);var N=i.selectAll(".nv-wrap.nv-pie").data(b),O=N.enter().append("g").attr("class","nvd3 nv-wrap nv-pie nv-chart-"+h),P=O.append("g"),Q=N.select("g"),R=P.append("g").attr("class","nv-pie");P.append("g").attr("class","nv-pieLabels"),N.attr("transform","translate("+c.left+","+c.top+")"),Q.select(".nv-pie").attr("transform","translate("+F/2+","+G/2+")"),Q.select(".nv-pieLabels").attr("transform","translate("+F/2+","+G/2+")"),i.on("click",function(a,b){A.chartClick({data:a,index:b,pos:d3.event,id:h})}),B=[],C=[];for(var M=0;M<b[0].length;M++){var S=d3.svg.arc().outerRadius(I[M]),T=d3.svg.arc().outerRadius(I[M]+5);u!==!1&&(S.startAngle(u),T.startAngle(u)),w!==!1&&(S.endAngle(w),T.endAngle(w)),p&&(S.innerRadius(J[M]),T.innerRadius(J[M])),S.cornerRadius&&x&&(S.cornerRadius(x),T.cornerRadius(x)),B.push(S),C.push(T)}var U=d3.layout.pie().sort(null).value(function(a){return a.disabled?0:g(a)});U.padAngle&&v&&U.padAngle(v),p&&q&&(R.append("text").attr("class","nv-pie-title"),N.select(".nv-pie-title").style("text-anchor","middle").text(function(a){return q}).style("font-size",Math.min(F,G)*y*2/(q.length+2)+"px").attr("dy","0.35em").attr("transform",function(a,b){return"translate(0, "+s+")"}));var V=N.select(".nv-pie").selectAll(".nv-slice").data(U),W=N.select(".nv-pieLabels").selectAll(".nv-label").data(U);V.exit().remove(),W.exit().remove();var X=V.enter().append("g");X.attr("class","nv-slice"),X.on("mouseover",function(a,b){d3.select(this).classed("hover",!0),r&&d3.select(this).select("path").transition().duration(70).attr("d",C[b]),A.elementMouseover({data:a.data,index:b,color:d3.select(this).style("fill")})}),X.on("mouseout",function(a,b){d3.select(this).classed("hover",!1),r&&d3.select(this).select("path").transition().duration(50).attr("d",B[b]),A.elementMouseout({data:a.data,index:b})}),X.on("mousemove",function(a,b){A.elementMousemove({data:a.data,index:b})}),X.on("click",function(a,b){A.elementClick({data:a.data,index:b,color:d3.select(this).style("fill")})}),X.on("dblclick",function(a,b){A.elementDblClick({data:a.data,index:b,color:d3.select(this).style("fill")})}),V.attr("fill",function(a,b){return j(a.data,b)}),V.attr("stroke",function(a,b){return j(a.data,b)});X.append("path").each(function(a){this._current=a});if(V.select("path").transition().attr("d",function(a,b){return B[b](a)}).attrTween("d",E),l){for(var Y=[],M=0;M<b[0].length;M++)Y.push(B[M]),m?p&&(Y[M]=d3.svg.arc().outerRadius(B[M].outerRadius()),u!==!1&&Y[M].startAngle(u),w!==!1&&Y[M].endAngle(w)):p||Y[M].innerRadius(0);W.enter().append("g").classed("nv-label",!0).each(function(a,b){var c=d3.select(this);c.attr("transform",function(a,b){if(t){a.outerRadius=I[b]+10,a.innerRadius=I[b]+15;var c=(a.startAngle+a.endAngle)/2*(180/Math.PI);return(a.startAngle+a.endAngle)/2<Math.PI?c-=90:c+=90,"translate("+Y[b].centroid(a)+") rotate("+c+")"}return a.outerRadius=H+10,a.innerRadius=H+15,"translate("+Y[b].centroid(a)+")"}),c.append("rect").style("stroke","#fff").style("fill","#fff").attr("rx",3).attr("ry",3),c.append("text").style("text-anchor",t?(a.startAngle+a.endAngle)/2<Math.PI?"start":"end":"middle").style("fill","#000")});var Z={},$=14,_=140,aa=function(a){return Math.floor(a[0]/_)*_+","+Math.floor(a[1]/$)*$};W.watchTransition(D,"pie labels").attr("transform",function(a,b){if(t){a.outerRadius=I[b]+10,a.innerRadius=I[b]+15;var c=(a.startAngle+a.endAngle)/2*(180/Math.PI);return(a.startAngle+a.endAngle)/2<Math.PI?c-=90:c+=90,"translate("+Y[b].centroid(a)+") rotate("+c+")"}a.outerRadius=H+10,a.innerRadius=H+15;var d=Y[b].centroid(a);if(a.value){var e=aa(d);Z[e]&&(d[1]-=$),Z[aa(d)]=!0}return"translate("+d+")"}),W.select(".nv-label text").style("text-anchor",function(a,b){return t?(a.startAngle+a.endAngle)/2<Math.PI?"start":"end":"middle"}).text(function(a,b){var c=(a.endAngle-a.startAngle)/(2*Math.PI),d="";if(!a.value||o>c)return"";if("function"==typeof n)d=n(a,b,{key:f(a.data),value:g(a.data),percent:k(c)});else switch(n){case"key":d=f(a.data);break;case"value":d=k(g(a.data));break;case"percent":d=d3.format("%")(c)}return d})}}),D.renderEnd("pie immediate"),b}var c={top:0,right:0,bottom:0,left:0},d=500,e=500,f=function(a){return a.x},g=function(a){return a.y},h=Math.floor(1e4*Math.random()),i=null,j=a.utils.defaultColor(),k=d3.format(",.2f"),l=!0,m=!1,n="key",o=.02,p=!1,q=!1,r=!0,s=0,t=!1,u=!1,v=!1,w=!1,x=0,y=.5,z=[],A=d3.dispatch("chartClick","elementClick","elementDblClick","elementMouseover","elementMouseout","elementMousemove","renderEnd"),B=[],C=[],D=a.utils.renderWatch(A);return b.dispatch=A,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{arcsRadius:{get:function(){return z},set:function(a){z=a}},width:{get:function(){return d},set:function(a){d=a}},height:{get:function(){return e},set:function(a){e=a}},showLabels:{get:function(){return l},set:function(a){l=a}},title:{get:function(){return q},set:function(a){q=a}},titleOffset:{get:function(){return s},set:function(a){s=a}},labelThreshold:{get:function(){return o},set:function(a){o=a}},valueFormat:{get:function(){return k},set:function(a){k=a}},x:{get:function(){return f},set:function(a){f=a}},id:{get:function(){return h},set:function(a){h=a}},endAngle:{get:function(){return w},set:function(a){w=a}},startAngle:{get:function(){return u},set:function(a){u=a}},padAngle:{get:function(){return v},set:function(a){v=a}},cornerRadius:{get:function(){return x},set:function(a){x=a}},donutRatio:{get:function(){return y},set:function(a){y=a}},labelsOutside:{get:function(){return m},set:function(a){m=a}},labelSunbeamLayout:{get:function(){return t},set:function(a){t=a}},donut:{get:function(){return p},set:function(a){p=a}},growOnHover:{get:function(){return r},set:function(a){r=a}},pieLabelsOutside:{get:function(){return m},set:function(b){m=b,a.deprecated("pieLabelsOutside","use labelsOutside instead")}},donutLabelsOutside:{get:function(){return m},set:function(b){m=b,a.deprecated("donutLabelsOutside","use labelsOutside instead")}},labelFormat:{get:function(){return k},set:function(b){k=b,a.deprecated("labelFormat","use valueFormat instead")}},margin:{get:function(){return c},set:function(a){c.top="undefined"!=typeof a.top?a.top:c.top,c.right="undefined"!=typeof a.right?a.right:c.right,c.bottom="undefined"!=typeof a.bottom?a.bottom:c.bottom,c.left="undefined"!=typeof a.left?a.left:c.left}},y:{get:function(){return g},set:function(a){g=d3.functor(a)}},color:{get:function(){return j},set:function(b){j=a.utils.getColor(b)}},labelType:{get:function(){return n},set:function(a){n=a||"key"}}}),a.utils.initOptions(b),b},a.models.pieChart=function(){"use strict";function b(e){return q.reset(),q.models(c),e.each(function(e){var k=d3.select(this);a.utils.initSVG(k);var n=a.utils.availableWidth(g,k,f),o=a.utils.availableHeight(h,k,f);if(b.update=function(){k.transition().call(b)},b.container=this,l.setter(s(e),b.update).getter(r(e)).update(),l.disabled=e.map(function(a){return!!a.disabled}),!m){var q;m={};for(q in l)l[q]instanceof Array?m[q]=l[q].slice(0):m[q]=l[q]}if(!e||!e.length)return a.utils.noData(b,k),b;k.selectAll(".nv-noData").remove();var t=k.selectAll("g.nv-wrap.nv-pieChart").data([e]),u=t.enter().append("g").attr("class","nvd3 nv-wrap nv-pieChart").append("g"),v=t.select("g");if(u.append("g").attr("class","nv-pieWrap"),u.append("g").attr("class","nv-legendWrap"),i)if("top"===j)d.width(n).key(c.x()),t.select(".nv-legendWrap").datum(e).call(d),f.top!=d.height()&&(f.top=d.height(),o=a.utils.availableHeight(h,k,f)),t.select(".nv-legendWrap").attr("transform","translate(0,"+-f.top+")");else if("right"===j){var w=a.models.legend().width();w>n/2&&(w=n/2),d.height(o).key(c.x()),d.width(w),n-=d.width(),t.select(".nv-legendWrap").datum(e).call(d).attr("transform","translate("+n+",0)")}t.attr("transform","translate("+f.left+","+f.top+")"),c.width(n).height(o);var x=v.select(".nv-pieWrap").datum([e]);d3.transition(x).call(c),d.dispatch.on("stateChange",function(a){for(var c in a)l[c]=a[c];p.stateChange(l),b.update()}),p.on("changeState",function(a){"undefined"!=typeof a.disabled&&(e.forEach(function(b,c){b.disabled=a.disabled[c]}),l.disabled=a.disabled),b.update()})}),q.renderEnd("pieChart immediate"),b}var c=a.models.pie(),d=a.models.legend(),e=a.models.tooltip(),f={top:30,right:20,bottom:20,left:20},g=null,h=null,i=!0,j="top",k=a.utils.defaultColor(),l=a.utils.state(),m=null,n=null,o=250,p=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState","renderEnd");e.headerEnabled(!1).duration(0).valueFormatter(function(a,b){return c.valueFormat()(a,b)});var q=a.utils.renderWatch(p),r=function(a){return function(){return{active:a.map(function(a){return!a.disabled})}}},s=function(a){return function(b){void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}};return c.dispatch.on("elementMouseover.tooltip",function(a){a.series={key:b.x()(a.data),value:b.y()(a.data),color:a.color},e.data(a).hidden(!1)}),c.dispatch.on("elementMouseout.tooltip",function(a){e.hidden(!0)}),c.dispatch.on("elementMousemove.tooltip",function(a){e.position({top:d3.event.pageY,left:d3.event.pageX})()}),b.legend=d,b.dispatch=p,b.pie=c,b.tooltip=e,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{noData:{get:function(){return n},set:function(a){n=a}},showLegend:{get:function(){return i},set:function(a){i=a}},legendPosition:{get:function(){return j},set:function(a){j=a}},defaultState:{get:function(){return m},set:function(a){m=a}},tooltips:{get:function(){return e.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),e.enabled(!!b)}},tooltipContent:{get:function(){return e.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),e.contentGenerator(b)}},color:{get:function(){return k},set:function(a){k=a,d.color(k),c.color(k)}},duration:{get:function(){return o},set:function(a){o=a,q.reset(o)}},margin:{get:function(){return f},set:function(a){f.top=void 0!==a.top?a.top:f.top,f.right=void 0!==a.right?a.right:f.right,f.bottom=void 0!==a.bottom?a.bottom:f.bottom,f.left=void 0!==a.left?a.left:f.left}}}),a.utils.inheritOptions(b,c),a.utils.initOptions(b),b},a.models.scatter=function(){"use strict";function b(N){return P.reset(),N.each(function(b){function N(){if(O=!1,!w)return!1;if(M===!0){var a=d3.merge(b.map(function(a,b){return a.values.map(function(a,c){var d=p(a,c),e=q(a,c);return[m(d)+1e-4*Math.random(),n(e)+1e-4*Math.random(),b,c,a]}).filter(function(a,b){return x(a[4],b)})}));if(0==a.length)return!1;a.length<3&&(a.push([m.range()[0]-20,n.range()[0]-20,null,null]),a.push([m.range()[1]+20,n.range()[1]+20,null,null]),a.push([m.range()[0]-20,n.range()[0]+20,null,null]),a.push([m.range()[1]+20,n.range()[1]-20,null,null]));var c=d3.geom.polygon([[-10,-10],[-10,i+10],[h+10,i+10],[h+10,-10]]),d=d3.geom.voronoi(a).map(function(b,d){return{data:c.clip(b),series:a[d][2],point:a[d][3]}});U.select(".nv-point-paths").selectAll("path").remove();var e=U.select(".nv-point-paths").selectAll("path").data(d),f=e.enter().append("svg:path").attr("d",function(a){return a&&a.data&&0!==a.data.length?"M"+a.data.join(",")+"Z":"M 0 0"}).attr("id",function(a,b){return"nv-path-"+b}).attr("clip-path",function(a,b){return"url(#nv-clip-"+b+")"});C&&f.style("fill",d3.rgb(230,230,230)).style("fill-opacity",.4).style("stroke-opacity",1).style("stroke",d3.rgb(200,200,200)),B&&(U.select(".nv-point-clips").selectAll("clipPath").remove(),U.select(".nv-point-clips").selectAll("clipPath").data(a).enter().append("svg:clipPath").attr("id",function(a,b){return"nv-clip-"+b}).append("svg:circle").attr("cx",function(a){return a[0]}).attr("cy",function(a){return a[1]}).attr("r",D));var k=function(a,c){if(O)return 0;var d=b[a.series];if(void 0!==d){var e=d.values[a.point];e.color=j(d,a.series),e.x=p(e),e.y=q(e);var f=l.node().getBoundingClientRect(),h=window.pageYOffset||document.documentElement.scrollTop,i=window.pageXOffset||document.documentElement.scrollLeft,k={left:m(p(e,a.point))+f.left+i+g.left+10,top:n(q(e,a.point))+f.top+h+g.top+10};c({point:e,series:d,pos:k,seriesIndex:a.series,pointIndex:a.point})}};e.on("click",function(a){k(a,L.elementClick)}).on("dblclick",function(a){k(a,L.elementDblClick)}).on("mouseover",function(a){k(a,L.elementMouseover)}).on("mouseout",function(a,b){k(a,L.elementMouseout)})}else U.select(".nv-groups").selectAll(".nv-group").selectAll(".nv-point").on("click",function(a,c){if(O||!b[a.series])return 0;var d=b[a.series],e=d.values[c];L.elementClick({point:e,series:d,pos:[m(p(e,c))+g.left,n(q(e,c))+g.top],seriesIndex:a.series,pointIndex:c})}).on("dblclick",function(a,c){if(O||!b[a.series])return 0;var d=b[a.series],e=d.values[c];L.elementDblClick({point:e,series:d,pos:[m(p(e,c))+g.left,n(q(e,c))+g.top],seriesIndex:a.series,pointIndex:c})}).on("mouseover",function(a,c){if(O||!b[a.series])return 0;var d=b[a.series],e=d.values[c];L.elementMouseover({point:e,series:d,pos:[m(p(e,c))+g.left,n(q(e,c))+g.top],seriesIndex:a.series,pointIndex:c,color:j(a,c)})}).on("mouseout",function(a,c){if(O||!b[a.series])return 0;var d=b[a.series],e=d.values[c];L.elementMouseout({point:e,series:d,seriesIndex:a.series,pointIndex:c,color:j(a,c)})})}l=d3.select(this);var R=a.utils.availableWidth(h,l,g),S=a.utils.availableHeight(i,l,g);a.utils.initSVG(l),b.forEach(function(a,b){a.values.forEach(function(a){a.series=b})});var T=E&&F&&I?[]:d3.merge(b.map(function(a){return a.values.map(function(a,b){return{x:p(a,b),y:q(a,b),size:r(a,b)}})}));m.domain(E||d3.extent(T.map(function(a){return a.x}).concat(t))),y&&b[0]?m.range(G||[(R*z+R)/(2*b[0].values.length),R-R*(1+z)/(2*b[0].values.length)]):m.range(G||[0,R]),n.domain(F||d3.extent(T.map(function(a){return a.y}).concat(u))).range(H||[S,0]),o.domain(I||d3.extent(T.map(function(a){return a.size}).concat(v))).range(J||Q),K=m.domain()[0]===m.domain()[1]||n.domain()[0]===n.domain()[1],m.domain()[0]===m.domain()[1]&&(m.domain()[0]?m.domain([m.domain()[0]-.01*m.domain()[0],m.domain()[1]+.01*m.domain()[1]]):m.domain([-1,1])),n.domain()[0]===n.domain()[1]&&(n.domain()[0]?n.domain([n.domain()[0]-.01*n.domain()[0],n.domain()[1]+.01*n.domain()[1]]):n.domain([-1,1])),isNaN(m.domain()[0])&&m.domain([-1,1]),isNaN(n.domain()[0])&&n.domain([-1,1]),c=c||m,d=d||n,e=e||o;var U=l.selectAll("g.nv-wrap.nv-scatter").data([b]),V=U.enter().append("g").attr("class","nvd3 nv-wrap nv-scatter nv-chart-"+k),W=V.append("defs"),X=V.append("g"),Y=U.select("g");U.classed("nv-single-point",K),X.append("g").attr("class","nv-groups"),X.append("g").attr("class","nv-point-paths"),V.append("g").attr("class","nv-point-clips"),U.attr("transform","translate("+g.left+","+g.top+")"),W.append("clipPath").attr("id","nv-edge-clip-"+k).append("rect"),U.select("#nv-edge-clip-"+k+" rect").attr("width",R).attr("height",S>0?S:0),Y.attr("clip-path",A?"url(#nv-edge-clip-"+k+")":""),O=!0;var Z=U.select(".nv-groups").selectAll(".nv-group").data(function(a){return a},function(a){return a.key});Z.enter().append("g").style("stroke-opacity",1e-6).style("fill-opacity",1e-6),Z.exit().remove(),Z.attr("class",function(a,b){return"nv-group nv-series-"+b}).classed("hover",function(a){return a.hover}),Z.watchTransition(P,"scatter: groups").style("fill",function(a,b){return j(a,b)}).style("stroke",function(a,b){return j(a,b)}).style("stroke-opacity",1).style("fill-opacity",.5);var $=Z.selectAll("path.nv-point").data(function(a){return a.values.map(function(a,b){return[a,b]}).filter(function(a,b){return x(a[0],b)})});$.enter().append("path").style("fill",function(a){return a.color}).style("stroke",function(a){return a.color}).attr("transform",function(a){return"translate("+c(p(a[0],a[1]))+","+d(q(a[0],a[1]))+")"}).attr("d",a.utils.symbol().type(function(a){return s(a[0])}).size(function(a){return o(r(a[0],a[1]))})),$.exit().remove(),Z.exit().selectAll("path.nv-point").watchTransition(P,"scatter exit").attr("transform",function(a){return"translate("+m(p(a[0],a[1]))+","+n(q(a[0],a[1]))+")"}).remove(),$.each(function(a){d3.select(this).classed("nv-point",!0).classed("nv-point-"+a[1],!0).classed("nv-noninteractive",!w).classed("hover",!1)}),$.watchTransition(P,"scatter points").attr("transform",function(a){return"translate("+m(p(a[0],a[1]))+","+n(q(a[0],a[1]))+")"}).attr("d",a.utils.symbol().type(function(a){return s(a[0])}).size(function(a){return o(r(a[0],a[1]))})),clearTimeout(f),f=setTimeout(N,300),c=m.copy(),d=n.copy(),e=o.copy()}),P.renderEnd("scatter immediate"),b}var c,d,e,f,g={top:0,right:0,bottom:0,left:0},h=null,i=null,j=a.utils.defaultColor(),k=Math.floor(1e5*Math.random()),l=null,m=d3.scale.linear(),n=d3.scale.linear(),o=d3.scale.linear(),p=function(a){return a.x},q=function(a){return a.y},r=function(a){return a.size||1},s=function(a){return a.shape||"circle"},t=[],u=[],v=[],w=!0,x=function(a){return!a.notActive},y=!1,z=.1,A=!1,B=!0,C=!1,D=function(){return 25},E=null,F=null,G=null,H=null,I=null,J=null,K=!1,L=d3.dispatch("elementClick","elementDblClick","elementMouseover","elementMouseout","renderEnd"),M=!0,N=250,O=!1,P=a.utils.renderWatch(L,N),Q=[16,256];return b.dispatch=L,b.options=a.utils.optionsFunc.bind(b),b._calls=new function(){this.clearHighlights=function(){return a.dom.write(function(){l.selectAll(".nv-point.hover").classed("hover",!1)}),null},this.highlightPoint=function(b,c,d){a.dom.write(function(){l.select(" .nv-series-"+b+" .nv-point-"+c).classed("hover",d)})}},L.on("elementMouseover.point",function(a){w&&b._calls.highlightPoint(a.seriesIndex,a.pointIndex,!0)}),L.on("elementMouseout.point",function(a){w&&b._calls.highlightPoint(a.seriesIndex,a.pointIndex,!1)}),b._options=Object.create({},{width:{get:function(){return h},set:function(a){h=a}},height:{get:function(){return i},set:function(a){i=a}},xScale:{get:function(){return m},set:function(a){m=a}},yScale:{get:function(){return n},set:function(a){n=a}},pointScale:{get:function(){return o},set:function(a){o=a}},xDomain:{get:function(){return E},set:function(a){E=a}},yDomain:{get:function(){return F},set:function(a){F=a}},pointDomain:{get:function(){return I},set:function(a){I=a}},xRange:{get:function(){return G},set:function(a){G=a}},yRange:{get:function(){return H},set:function(a){H=a}},pointRange:{get:function(){return J},set:function(a){J=a}},forceX:{get:function(){return t},set:function(a){t=a}},forceY:{get:function(){return u},set:function(a){u=a}},forcePoint:{get:function(){return v},set:function(a){v=a}},interactive:{get:function(){return w},set:function(a){w=a}},pointActive:{get:function(){return x},set:function(a){x=a}},padDataOuter:{get:function(){return z},set:function(a){z=a}},padData:{get:function(){return y},set:function(a){y=a}},clipEdge:{get:function(){return A},set:function(a){A=a}},clipVoronoi:{get:function(){return B},set:function(a){B=a}},clipRadius:{get:function(){return D},set:function(a){D=a}},showVoronoi:{get:function(){return C},set:function(a){C=a}},id:{get:function(){return k},set:function(a){k=a}},x:{get:function(){return p},set:function(a){p=d3.functor(a)}},y:{get:function(){return q},set:function(a){q=d3.functor(a)}},pointSize:{get:function(){return r},set:function(a){r=d3.functor(a)}},pointShape:{get:function(){return s},set:function(a){s=d3.functor(a)}},margin:{get:function(){return g},set:function(a){g.top=void 0!==a.top?a.top:g.top,g.right=void 0!==a.right?a.right:g.right,g.bottom=void 0!==a.bottom?a.bottom:g.bottom,g.left=void 0!==a.left?a.left:g.left}},duration:{get:function(){return N},set:function(a){N=a,P.reset(N)}},color:{get:function(){return j},set:function(b){j=a.utils.getColor(b)}},useVoronoi:{get:function(){return M},set:function(a){M=a,M===!1&&(B=!1)}}}),a.utils.initOptions(b),b},a.models.scatterChart=function(){"use strict";function b(z){return D.reset(),D.models(c),t&&D.models(d),u&&D.models(e),q&&D.models(g),r&&D.models(h),z.each(function(z){m=d3.select(this),a.utils.initSVG(m);var G=a.utils.availableWidth(k,m,j),H=a.utils.availableHeight(l,m,j);if(b.update=function(){0===A?m.call(b):m.transition().duration(A).call(b)},b.container=this,w.setter(F(z),b.update).getter(E(z)).update(),w.disabled=z.map(function(a){return!!a.disabled}),!x){var I;x={};for(I in w)w[I]instanceof Array?x[I]=w[I].slice(0):x[I]=w[I]}if(!(z&&z.length&&z.filter(function(a){return a.values.length}).length))return a.utils.noData(b,m),D.renderEnd("scatter immediate"),b;m.selectAll(".nv-noData").remove(),o=c.xScale(),p=c.yScale();var J=m.selectAll("g.nv-wrap.nv-scatterChart").data([z]),K=J.enter().append("g").attr("class","nvd3 nv-wrap nv-scatterChart nv-chart-"+c.id()),L=K.append("g"),M=J.select("g");if(L.append("rect").attr("class","nvd3 nv-background").style("pointer-events","none"),L.append("g").attr("class","nv-x nv-axis"),L.append("g").attr("class","nv-y nv-axis"),L.append("g").attr("class","nv-scatterWrap"),L.append("g").attr("class","nv-regressionLinesWrap"),L.append("g").attr("class","nv-distWrap"),L.append("g").attr("class","nv-legendWrap"),v&&M.select(".nv-y.nv-axis").attr("transform","translate("+G+",0)"),s){var N=G;f.width(N),J.select(".nv-legendWrap").datum(z).call(f),j.top!=f.height()&&(j.top=f.height(),H=a.utils.availableHeight(l,m,j)),J.select(".nv-legendWrap").attr("transform","translate(0,"+-j.top+")")}J.attr("transform","translate("+j.left+","+j.top+")"),c.width(G).height(H).color(z.map(function(a,b){return a.color||n(a,b)}).filter(function(a,b){return!z[b].disabled})),J.select(".nv-scatterWrap").datum(z.filter(function(a){return!a.disabled})).call(c),J.select(".nv-regressionLinesWrap").attr("clip-path","url(#nv-edge-clip-"+c.id()+")");var O=J.select(".nv-regressionLinesWrap").selectAll(".nv-regLines").data(function(a){return a});O.enter().append("g").attr("class","nv-regLines");var P=O.selectAll(".nv-regLine").data(function(a){return[a]});P.enter().append("line").attr("class","nv-regLine").style("stroke-opacity",0),P.filter(function(a){return a.intercept&&a.slope}).watchTransition(D,"scatterPlusLineChart: regline").attr("x1",o.range()[0]).attr("x2",o.range()[1]).attr("y1",function(a,b){return p(o.domain()[0]*a.slope+a.intercept)}).attr("y2",function(a,b){return p(o.domain()[1]*a.slope+a.intercept)}).style("stroke",function(a,b,c){return n(a,c)}).style("stroke-opacity",function(a,b){return a.disabled||"undefined"==typeof a.slope||"undefined"==typeof a.intercept?0:1}),t&&(d.scale(o)._ticks(a.utils.calcTicksX(G/100,z)).tickSize(-H,0),M.select(".nv-x.nv-axis").attr("transform","translate(0,"+p.range()[0]+")").call(d)),u&&(e.scale(p)._ticks(a.utils.calcTicksY(H/36,z)).tickSize(-G,0),M.select(".nv-y.nv-axis").call(e)),q&&(g.getData(c.x()).scale(o).width(G).color(z.map(function(a,b){return a.color||n(a,b)}).filter(function(a,b){return!z[b].disabled})),L.select(".nv-distWrap").append("g").attr("class","nv-distributionX"),M.select(".nv-distributionX").attr("transform","translate(0,"+p.range()[0]+")").datum(z.filter(function(a){return!a.disabled})).call(g)),r&&(h.getData(c.y()).scale(p).width(H).color(z.map(function(a,b){return a.color||n(a,b)}).filter(function(a,b){return!z[b].disabled})),L.select(".nv-distWrap").append("g").attr("class","nv-distributionY"),M.select(".nv-distributionY").attr("transform","translate("+(v?G:-h.size())+",0)").datum(z.filter(function(a){return!a.disabled})).call(h)),f.dispatch.on("stateChange",function(a){for(var c in a)w[c]=a[c];y.stateChange(w),b.update()}),y.on("changeState",function(a){"undefined"!=typeof a.disabled&&(z.forEach(function(b,c){b.disabled=a.disabled[c]}),w.disabled=a.disabled),b.update()}),c.dispatch.on("elementMouseout.tooltip",function(a){i.hidden(!0),m.select(".nv-chart-"+c.id()+" .nv-series-"+a.seriesIndex+" .nv-distx-"+a.pointIndex).attr("y1",0),m.select(".nv-chart-"+c.id()+" .nv-series-"+a.seriesIndex+" .nv-disty-"+a.pointIndex).attr("x2",h.size())}),c.dispatch.on("elementMouseover.tooltip",function(a){m.select(".nv-series-"+a.seriesIndex+" .nv-distx-"+a.pointIndex).attr("y1",a.pos.top-H-j.top),m.select(".nv-series-"+a.seriesIndex+" .nv-disty-"+a.pointIndex).attr("x2",a.pos.left+g.size()-j.left),i.position(a.pos).data(a).hidden(!1);
-}),B=o.copy(),C=p.copy()}),D.renderEnd("scatter with line immediate"),b}var c=a.models.scatter(),d=a.models.axis(),e=a.models.axis(),f=a.models.legend(),g=a.models.distribution(),h=a.models.distribution(),i=a.models.tooltip(),j={top:30,right:20,bottom:50,left:75},k=null,l=null,m=null,n=a.utils.defaultColor(),o=c.xScale(),p=c.yScale(),q=!1,r=!1,s=!0,t=!0,u=!0,v=!1,w=a.utils.state(),x=null,y=d3.dispatch("stateChange","changeState","renderEnd"),z=null,A=250;c.xScale(o).yScale(p),d.orient("bottom").tickPadding(10),e.orient(v?"right":"left").tickPadding(10),g.axis("x"),h.axis("y"),i.headerFormatter(function(a,b){return d.tickFormat()(a,b)}).valueFormatter(function(a,b){return e.tickFormat()(a,b)});var B,C,D=a.utils.renderWatch(y,A),E=function(a){return function(){return{active:a.map(function(a){return!a.disabled})}}},F=function(a){return function(b){void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}};return b.dispatch=y,b.scatter=c,b.legend=f,b.xAxis=d,b.yAxis=e,b.distX=g,b.distY=h,b.tooltip=i,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return k},set:function(a){k=a}},height:{get:function(){return l},set:function(a){l=a}},container:{get:function(){return m},set:function(a){m=a}},showDistX:{get:function(){return q},set:function(a){q=a}},showDistY:{get:function(){return r},set:function(a){r=a}},showLegend:{get:function(){return s},set:function(a){s=a}},showXAxis:{get:function(){return t},set:function(a){t=a}},showYAxis:{get:function(){return u},set:function(a){u=a}},defaultState:{get:function(){return x},set:function(a){x=a}},noData:{get:function(){return z},set:function(a){z=a}},duration:{get:function(){return A},set:function(a){A=a}},tooltips:{get:function(){return i.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),i.enabled(!!b)}},tooltipContent:{get:function(){return i.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),i.contentGenerator(b)}},tooltipXContent:{get:function(){return i.contentGenerator()},set:function(b){a.deprecated("tooltipContent","This option is removed, put values into main tooltip.")}},tooltipYContent:{get:function(){return i.contentGenerator()},set:function(b){a.deprecated("tooltipContent","This option is removed, put values into main tooltip.")}},margin:{get:function(){return j},set:function(a){j.top=void 0!==a.top?a.top:j.top,j.right=void 0!==a.right?a.right:j.right,j.bottom=void 0!==a.bottom?a.bottom:j.bottom,j.left=void 0!==a.left?a.left:j.left}},rightAlignYAxis:{get:function(){return v},set:function(a){v=a,e.orient(a?"right":"left")}},color:{get:function(){return n},set:function(b){n=a.utils.getColor(b),f.color(n),g.color(n),h.color(n)}}}),a.utils.inheritOptions(b,c),a.utils.initOptions(b),b},a.models.sparkline=function(){"use strict";function b(k){return k.each(function(b){var k=h-g.left-g.right,q=i-g.top-g.bottom;j=d3.select(this),a.utils.initSVG(j),l.domain(c||d3.extent(b,n)).range(e||[0,k]),m.domain(d||d3.extent(b,o)).range(f||[q,0]);var r=j.selectAll("g.nv-wrap.nv-sparkline").data([b]),s=r.enter().append("g").attr("class","nvd3 nv-wrap nv-sparkline");s.append("g"),r.select("g");r.attr("transform","translate("+g.left+","+g.top+")");var t=r.selectAll("path").data(function(a){return[a]});t.enter().append("path"),t.exit().remove(),t.style("stroke",function(a,b){return a.color||p(a,b)}).attr("d",d3.svg.line().x(function(a,b){return l(n(a,b))}).y(function(a,b){return m(o(a,b))}));var u=r.selectAll("circle.nv-point").data(function(a){function b(b){if(-1!=b){var c=a[b];return c.pointIndex=b,c}return null}var c=a.map(function(a,b){return o(a,b)}),d=b(c.lastIndexOf(m.domain()[1])),e=b(c.indexOf(m.domain()[0])),f=b(c.length-1);return[e,d,f].filter(function(a){return null!=a})});u.enter().append("circle"),u.exit().remove(),u.attr("cx",function(a,b){return l(n(a,a.pointIndex))}).attr("cy",function(a,b){return m(o(a,a.pointIndex))}).attr("r",2).attr("class",function(a,b){return n(a,a.pointIndex)==l.domain()[1]?"nv-point nv-currentValue":o(a,a.pointIndex)==m.domain()[0]?"nv-point nv-minValue":"nv-point nv-maxValue"})}),b}var c,d,e,f,g={top:2,right:0,bottom:2,left:0},h=400,i=32,j=null,k=!0,l=d3.scale.linear(),m=d3.scale.linear(),n=function(a){return a.x},o=function(a){return a.y},p=a.utils.getColor(["#000"]);return b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return h},set:function(a){h=a}},height:{get:function(){return i},set:function(a){i=a}},xDomain:{get:function(){return c},set:function(a){c=a}},yDomain:{get:function(){return d},set:function(a){d=a}},xRange:{get:function(){return e},set:function(a){e=a}},yRange:{get:function(){return f},set:function(a){f=a}},xScale:{get:function(){return l},set:function(a){l=a}},yScale:{get:function(){return m},set:function(a){m=a}},animate:{get:function(){return k},set:function(a){k=a}},x:{get:function(){return n},set:function(a){n=d3.functor(a)}},y:{get:function(){return o},set:function(a){o=d3.functor(a)}},margin:{get:function(){return g},set:function(a){g.top=void 0!==a.top?a.top:g.top,g.right=void 0!==a.right?a.right:g.right,g.bottom=void 0!==a.bottom?a.bottom:g.bottom,g.left=void 0!==a.left?a.left:g.left}},color:{get:function(){return p},set:function(b){p=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.sparklinePlus=function(){"use strict";function b(p){return p.each(function(q){function r(){if(!j){var a=A.selectAll(".nv-hoverValue").data(i),b=a.enter().append("g").attr("class","nv-hoverValue").style("stroke-opacity",0).style("fill-opacity",0);a.exit().transition().duration(250).style("stroke-opacity",0).style("fill-opacity",0).remove(),a.attr("transform",function(a){return"translate("+c(e.x()(q[a],a))+",0)"}).transition().duration(250).style("stroke-opacity",1).style("fill-opacity",1),i.length&&(b.append("line").attr("x1",0).attr("y1",-f.top).attr("x2",0).attr("y2",v),b.append("text").attr("class","nv-xValue").attr("x",-6).attr("y",-f.top).attr("text-anchor","end").attr("dy",".9em"),A.select(".nv-hoverValue .nv-xValue").text(k(e.x()(q[i[0]],i[0]))),b.append("text").attr("class","nv-yValue").attr("x",6).attr("y",-f.top).attr("text-anchor","start").attr("dy",".9em"),A.select(".nv-hoverValue .nv-yValue").text(l(e.y()(q[i[0]],i[0]))))}}function s(){function a(a,b){for(var c=Math.abs(e.x()(a[0],0)-b),d=0,f=0;f<a.length;f++)Math.abs(e.x()(a[f],f)-b)<c&&(c=Math.abs(e.x()(a[f],f)-b),d=f);return d}if(!j){var b=d3.mouse(this)[0]-f.left;i=[a(q,Math.round(c.invert(b)))],r()}}var t=d3.select(this);a.utils.initSVG(t);var u=a.utils.availableWidth(g,t,f),v=a.utils.availableHeight(h,t,f);if(b.update=function(){b(p)},b.container=this,!q||!q.length)return a.utils.noData(b,t),b;t.selectAll(".nv-noData").remove();var w=e.y()(q[q.length-1],q.length-1);c=e.xScale(),d=e.yScale();var x=t.selectAll("g.nv-wrap.nv-sparklineplus").data([q]),y=x.enter().append("g").attr("class","nvd3 nv-wrap nv-sparklineplus"),z=y.append("g"),A=x.select("g");z.append("g").attr("class","nv-sparklineWrap"),z.append("g").attr("class","nv-valueWrap"),z.append("g").attr("class","nv-hoverArea"),x.attr("transform","translate("+f.left+","+f.top+")");var B=A.select(".nv-sparklineWrap");if(e.width(u).height(v),B.call(e),m){var C=A.select(".nv-valueWrap"),D=C.selectAll(".nv-currentValue").data([w]);D.enter().append("text").attr("class","nv-currentValue").attr("dx",o?-8:8).attr("dy",".9em").style("text-anchor",o?"end":"start"),D.attr("x",u+(o?f.right:0)).attr("y",n?function(a){return d(a)}:0).style("fill",e.color()(q[q.length-1],q.length-1)).text(l(w))}z.select(".nv-hoverArea").append("rect").on("mousemove",s).on("click",function(){j=!j}).on("mouseout",function(){i=[],r()}),A.select(".nv-hoverArea rect").attr("transform",function(a){return"translate("+-f.left+","+-f.top+")"}).attr("width",u+f.left+f.right).attr("height",v+f.top)}),b}var c,d,e=a.models.sparkline(),f={top:15,right:100,bottom:10,left:50},g=null,h=null,i=[],j=!1,k=d3.format(",r"),l=d3.format(",.2f"),m=!0,n=!0,o=!1,p=null;return b.sparkline=e,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return g},set:function(a){g=a}},height:{get:function(){return h},set:function(a){h=a}},xTickFormat:{get:function(){return k},set:function(a){k=a}},yTickFormat:{get:function(){return l},set:function(a){l=a}},showLastValue:{get:function(){return m},set:function(a){m=a}},alignValue:{get:function(){return n},set:function(a){n=a}},rightAlignValue:{get:function(){return o},set:function(a){o=a}},noData:{get:function(){return p},set:function(a){p=a}},margin:{get:function(){return f},set:function(a){f.top=void 0!==a.top?a.top:f.top,f.right=void 0!==a.right?a.right:f.right,f.bottom=void 0!==a.bottom?a.bottom:f.bottom,f.left=void 0!==a.left?a.left:f.left}}}),a.utils.inheritOptions(b,e),a.utils.initOptions(b),b},a.models.stackedArea=function(){"use strict";function b(m){return u.reset(),u.models(r),m.each(function(m){var s=f-e.left-e.right,v=g-e.top-e.bottom;j=d3.select(this),a.utils.initSVG(j),c=r.xScale(),d=r.yScale();var w=m;m.forEach(function(a,b){a.seriesIndex=b,a.values=a.values.map(function(a,c){return a.index=c,a.seriesIndex=b,a})});var x=m.filter(function(a){return!a.disabled});m=d3.layout.stack().order(o).offset(n).values(function(a){return a.values}).x(k).y(l).out(function(a,b,c){a.display={y:c,y0:b}})(x);var y=j.selectAll("g.nv-wrap.nv-stackedarea").data([m]),z=y.enter().append("g").attr("class","nvd3 nv-wrap nv-stackedarea"),A=z.append("defs"),B=z.append("g"),C=y.select("g");B.append("g").attr("class","nv-areaWrap"),B.append("g").attr("class","nv-scatterWrap"),y.attr("transform","translate("+e.left+","+e.top+")"),0==r.forceY().length&&r.forceY().push(0),r.width(s).height(v).x(k).y(function(a){return a.display.y+a.display.y0}).forceY([0]).color(m.map(function(a,b){return a.color||h(a,a.seriesIndex)}));var D=C.select(".nv-scatterWrap").datum(m);D.call(r),A.append("clipPath").attr("id","nv-edge-clip-"+i).append("rect"),y.select("#nv-edge-clip-"+i+" rect").attr("width",s).attr("height",v),C.attr("clip-path",q?"url(#nv-edge-clip-"+i+")":"");var E=d3.svg.area().x(function(a,b){return c(k(a,b))}).y0(function(a){return d(a.display.y0)}).y1(function(a){return d(a.display.y+a.display.y0)}).interpolate(p),F=d3.svg.area().x(function(a,b){return c(k(a,b))}).y0(function(a){return d(a.display.y0)}).y1(function(a){return d(a.display.y0)}),G=C.select(".nv-areaWrap").selectAll("path.nv-area").data(function(a){return a});G.enter().append("path").attr("class",function(a,b){return"nv-area nv-area-"+b}).attr("d",function(a,b){return F(a.values,a.seriesIndex)}).on("mouseover",function(a,b){d3.select(this).classed("hover",!0),t.areaMouseover({point:a,series:a.key,pos:[d3.event.pageX,d3.event.pageY],seriesIndex:a.seriesIndex})}).on("mouseout",function(a,b){d3.select(this).classed("hover",!1),t.areaMouseout({point:a,series:a.key,pos:[d3.event.pageX,d3.event.pageY],seriesIndex:a.seriesIndex})}).on("click",function(a,b){d3.select(this).classed("hover",!1),t.areaClick({point:a,series:a.key,pos:[d3.event.pageX,d3.event.pageY],seriesIndex:a.seriesIndex})}),G.exit().remove(),G.style("fill",function(a,b){return a.color||h(a,a.seriesIndex)}).style("stroke",function(a,b){return a.color||h(a,a.seriesIndex)}),G.watchTransition(u,"stackedArea path").attr("d",function(a,b){return E(a.values,b)}),r.dispatch.on("elementMouseover.area",function(a){C.select(".nv-chart-"+i+" .nv-area-"+a.seriesIndex).classed("hover",!0)}),r.dispatch.on("elementMouseout.area",function(a){C.select(".nv-chart-"+i+" .nv-area-"+a.seriesIndex).classed("hover",!1)}),b.d3_stackedOffset_stackPercent=function(a){var b,c,d,e=a.length,f=a[0].length,g=[];for(c=0;f>c;++c){for(b=0,d=0;b<w.length;b++)d+=l(w[b].values[c]);if(d)for(b=0;e>b;b++)a[b][c][1]/=d;else for(b=0;e>b;b++)a[b][c][1]=0}for(c=0;f>c;++c)g[c]=0;return g}}),u.renderEnd("stackedArea immediate"),b}var c,d,e={top:0,right:0,bottom:0,left:0},f=960,g=500,h=a.utils.defaultColor(),i=Math.floor(1e5*Math.random()),j=null,k=function(a){return a.x},l=function(a){return a.y},m="stack",n="zero",o="default",p="linear",q=!1,r=a.models.scatter(),s=250,t=d3.dispatch("areaClick","areaMouseover","areaMouseout","renderEnd","elementClick","elementMouseover","elementMouseout");r.pointSize(2.2).pointDomain([2.2,2.2]);var u=a.utils.renderWatch(t,s);return b.dispatch=t,b.scatter=r,r.dispatch.on("elementClick",function(){t.elementClick.apply(this,arguments)}),r.dispatch.on("elementMouseover",function(){t.elementMouseover.apply(this,arguments)}),r.dispatch.on("elementMouseout",function(){t.elementMouseout.apply(this,arguments)}),b.interpolate=function(a){return arguments.length?(p=a,b):p},b.duration=function(a){return arguments.length?(s=a,u.reset(s),r.duration(s),b):s},b.dispatch=t,b.scatter=r,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return f},set:function(a){f=a}},height:{get:function(){return g},set:function(a){g=a}},clipEdge:{get:function(){return q},set:function(a){q=a}},offset:{get:function(){return n},set:function(a){n=a}},order:{get:function(){return o},set:function(a){o=a}},interpolate:{get:function(){return p},set:function(a){p=a}},x:{get:function(){return k},set:function(a){k=d3.functor(a)}},y:{get:function(){return l},set:function(a){l=d3.functor(a)}},margin:{get:function(){return e},set:function(a){e.top=void 0!==a.top?a.top:e.top,e.right=void 0!==a.right?a.right:e.right,e.bottom=void 0!==a.bottom?a.bottom:e.bottom,e.left=void 0!==a.left?a.left:e.left}},color:{get:function(){return h},set:function(b){h=a.utils.getColor(b)}},style:{get:function(){return m},set:function(a){switch(m=a){case"stack":b.offset("zero"),b.order("default");break;case"stream":b.offset("wiggle"),b.order("inside-out");break;case"stream-center":b.offset("silhouette"),b.order("inside-out");break;case"expand":b.offset("expand"),b.order("default");break;case"stack_percent":b.offset(b.d3_stackedOffset_stackPercent),b.order("default")}}},duration:{get:function(){return s},set:function(a){s=a,u.reset(s),r.duration(s)}}}),a.utils.inheritOptions(b,r),a.utils.initOptions(b),b},a.models.stackedAreaChart=function(){"use strict";function b(k){return F.reset(),F.models(e),r&&F.models(f),s&&F.models(g),k.each(function(k){var x=d3.select(this),F=this;a.utils.initSVG(x);var K=a.utils.availableWidth(m,x,l),L=a.utils.availableHeight(n,x,l);if(b.update=function(){x.transition().duration(C).call(b)},b.container=this,v.setter(I(k),b.update).getter(H(k)).update(),v.disabled=k.map(function(a){return!!a.disabled}),!w){var M;w={};for(M in v)v[M]instanceof Array?w[M]=v[M].slice(0):w[M]=v[M]}if(!(k&&k.length&&k.filter(function(a){return a.values.length}).length))return a.utils.noData(b,x),b;x.selectAll(".nv-noData").remove(),c=e.xScale(),d=e.yScale();var N=x.selectAll("g.nv-wrap.nv-stackedAreaChart").data([k]),O=N.enter().append("g").attr("class","nvd3 nv-wrap nv-stackedAreaChart").append("g"),P=N.select("g");if(O.append("rect").style("opacity",0),O.append("g").attr("class","nv-x nv-axis"),O.append("g").attr("class","nv-y nv-axis"),O.append("g").attr("class","nv-stackedWrap"),O.append("g").attr("class","nv-legendWrap"),O.append("g").attr("class","nv-controlsWrap"),O.append("g").attr("class","nv-interactive"),P.select("rect").attr("width",K).attr("height",L),q){var Q=p?K-z:K;h.width(Q),P.select(".nv-legendWrap").datum(k).call(h),l.top!=h.height()&&(l.top=h.height(),L=a.utils.availableHeight(n,x,l)),P.select(".nv-legendWrap").attr("transform","translate("+(K-Q)+","+-l.top+")")}if(p){var R=[{key:B.stacked||"Stacked",metaKey:"Stacked",disabled:"stack"!=e.style(),style:"stack"},{key:B.stream||"Stream",metaKey:"Stream",disabled:"stream"!=e.style(),style:"stream"},{key:B.expanded||"Expanded",metaKey:"Expanded",disabled:"expand"!=e.style(),style:"expand"},{key:B.stack_percent||"Stack %",metaKey:"Stack_Percent",disabled:"stack_percent"!=e.style(),style:"stack_percent"}];z=A.length/3*260,R=R.filter(function(a){return-1!==A.indexOf(a.metaKey)}),i.width(z).color(["#444","#444","#444"]),P.select(".nv-controlsWrap").datum(R).call(i),l.top!=Math.max(i.height(),h.height())&&(l.top=Math.max(i.height(),h.height()),L=a.utils.availableHeight(n,x,l)),P.select(".nv-controlsWrap").attr("transform","translate(0,"+-l.top+")")}N.attr("transform","translate("+l.left+","+l.top+")"),t&&P.select(".nv-y.nv-axis").attr("transform","translate("+K+",0)"),u&&(j.width(K).height(L).margin({left:l.left,top:l.top}).svgContainer(x).xScale(c),N.select(".nv-interactive").call(j)),e.width(K).height(L);var S=P.select(".nv-stackedWrap").datum(k);if(S.transition().call(e),r&&(f.scale(c)._ticks(a.utils.calcTicksX(K/100,k)).tickSize(-L,0),P.select(".nv-x.nv-axis").attr("transform","translate(0,"+L+")"),P.select(".nv-x.nv-axis").transition().duration(0).call(f)),s){var T;if(T="wiggle"===e.offset()?0:a.utils.calcTicksY(L/36,k),g.scale(d)._ticks(T).tickSize(-K,0),"expand"===e.style()||"stack_percent"===e.style()){var U=g.tickFormat();D&&U===J||(D=U),g.tickFormat(J)}else D&&(g.tickFormat(D),D=null);P.select(".nv-y.nv-axis").transition().duration(0).call(g)}e.dispatch.on("areaClick.toggle",function(a){1===k.filter(function(a){return!a.disabled}).length?k.forEach(function(a){a.disabled=!1}):k.forEach(function(b,c){b.disabled=c!=a.seriesIndex}),v.disabled=k.map(function(a){return!!a.disabled}),y.stateChange(v),b.update()}),h.dispatch.on("stateChange",function(a){for(var c in a)v[c]=a[c];y.stateChange(v),b.update()}),i.dispatch.on("legendClick",function(a,c){a.disabled&&(R=R.map(function(a){return a.disabled=!0,a}),a.disabled=!1,e.style(a.style),v.style=e.style(),y.stateChange(v),b.update())}),j.dispatch.on("elementMousemove",function(c){e.clearHighlights();var d,g,h,i=[];if(k.filter(function(a,b){return a.seriesIndex=b,!a.disabled}).forEach(function(f,j){g=a.interactiveBisect(f.values,c.pointXValue,b.x());var k=f.values[g],l=b.y()(k,g);if(null!=l&&e.highlightPoint(j,g,!0),"undefined"!=typeof k){"undefined"==typeof d&&(d=k),"undefined"==typeof h&&(h=b.xScale()(b.x()(k,g)));var m="expand"==e.style()?k.display.y:b.y()(k,g);i.push({key:f.key,value:m,color:o(f,f.seriesIndex),stackedValue:k.display})}}),i.reverse(),i.length>2){var m=b.yScale().invert(c.mouseY),n=null;i.forEach(function(a,b){m=Math.abs(m);var c=Math.abs(a.stackedValue.y0),d=Math.abs(a.stackedValue.y);return m>=c&&d+c>=m?void(n=b):void 0}),null!=n&&(i[n].highlight=!0)}var p=f.tickFormat()(b.x()(d,g)),q=j.tooltip.valueFormatter();"expand"===e.style()||"stack_percent"===e.style()?(E||(E=q),q=d3.format(".1%")):E&&(q=E,E=null),j.tooltip.position({left:h+l.left,top:c.mouseY+l.top}).chartContainer(F.parentNode).valueFormatter(q).data({value:p,series:i})(),j.renderGuideLine(h)}),j.dispatch.on("elementMouseout",function(a){e.clearHighlights()}),y.on("changeState",function(a){"undefined"!=typeof a.disabled&&k.length===a.disabled.length&&(k.forEach(function(b,c){b.disabled=a.disabled[c]}),v.disabled=a.disabled),"undefined"!=typeof a.style&&(e.style(a.style),G=a.style),b.update()})}),F.renderEnd("stacked Area chart immediate"),b}var c,d,e=a.models.stackedArea(),f=a.models.axis(),g=a.models.axis(),h=a.models.legend(),i=a.models.legend(),j=a.interactiveGuideline(),k=a.models.tooltip(),l={top:30,right:25,bottom:50,left:60},m=null,n=null,o=a.utils.defaultColor(),p=!0,q=!0,r=!0,s=!0,t=!1,u=!1,v=a.utils.state(),w=null,x=null,y=d3.dispatch("stateChange","changeState","renderEnd"),z=250,A=["Stacked","Stream","Expanded"],B={},C=250;v.style=e.style(),f.orient("bottom").tickPadding(7),g.orient(t?"right":"left"),k.headerFormatter(function(a,b){return f.tickFormat()(a,b)}).valueFormatter(function(a,b){return g.tickFormat()(a,b)}),j.tooltip.headerFormatter(function(a,b){return f.tickFormat()(a,b)}).valueFormatter(function(a,b){return g.tickFormat()(a,b)});var D=null,E=null;i.updateState(!1);var F=a.utils.renderWatch(y),G=e.style(),H=function(a){return function(){return{active:a.map(function(a){return!a.disabled}),style:e.style()}}},I=function(a){return function(b){void 0!==b.style&&(G=b.style),void 0!==b.active&&a.forEach(function(a,c){a.disabled=!b.active[c]})}},J=d3.format("%");return e.dispatch.on("elementMouseover.tooltip",function(a){a.point.x=e.x()(a.point),a.point.y=e.y()(a.point),k.data(a).position(a.pos).hidden(!1)}),e.dispatch.on("elementMouseout.tooltip",function(a){k.hidden(!0)}),b.dispatch=y,b.stacked=e,b.legend=h,b.controls=i,b.xAxis=f,b.yAxis=g,b.interactiveLayer=j,b.tooltip=k,b.dispatch=y,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return m},set:function(a){m=a}},height:{get:function(){return n},set:function(a){n=a}},showLegend:{get:function(){return q},set:function(a){q=a}},showXAxis:{get:function(){return r},set:function(a){r=a}},showYAxis:{get:function(){return s},set:function(a){s=a}},defaultState:{get:function(){return w},set:function(a){w=a}},noData:{get:function(){return x},set:function(a){x=a}},showControls:{get:function(){return p},set:function(a){p=a}},controlLabels:{get:function(){return B},set:function(a){B=a}},controlOptions:{get:function(){return A},set:function(a){A=a}},tooltips:{get:function(){return k.enabled()},set:function(b){a.deprecated("tooltips","use chart.tooltip.enabled() instead"),k.enabled(!!b)}},tooltipContent:{get:function(){return k.contentGenerator()},set:function(b){a.deprecated("tooltipContent","use chart.tooltip.contentGenerator() instead"),k.contentGenerator(b)}},margin:{get:function(){return l},set:function(a){l.top=void 0!==a.top?a.top:l.top,l.right=void 0!==a.right?a.right:l.right,l.bottom=void 0!==a.bottom?a.bottom:l.bottom,l.left=void 0!==a.left?a.left:l.left}},duration:{get:function(){return C},set:function(a){C=a,F.reset(C),e.duration(C),f.duration(C),g.duration(C)}},color:{get:function(){return o},set:function(b){o=a.utils.getColor(b),h.color(o),e.color(o)}},rightAlignYAxis:{get:function(){return t},set:function(a){t=a,g.orient(t?"right":"left")}},useInteractiveGuideline:{get:function(){return u},set:function(a){u=!!a,b.interactive(!a),b.useVoronoi(!a),e.scatter.interactive(!a)}}}),a.utils.inheritOptions(b,e),a.utils.initOptions(b),b},a.models.sunburst=function(){"use strict";function b(u){return t.reset(),u.each(function(b){function t(a){a.x0=a.x,a.dx0=a.dx}function u(a){var b=d3.interpolate(p.domain(),[a.x,a.x+a.dx]),c=d3.interpolate(q.domain(),[a.y,1]),d=d3.interpolate(q.range(),[a.y?20:0,y]);return function(a,e){return e?function(b){return s(a)}:function(e){return p.domain(b(e)),q.domain(c(e)).range(d(e)),s(a)}}}l=d3.select(this);var v,w=a.utils.availableWidth(g,l,f),x=a.utils.availableHeight(h,l,f),y=Math.min(w,x)/2;a.utils.initSVG(l);var z=l.selectAll(".nv-wrap.nv-sunburst").data(b),A=z.enter().append("g").attr("class","nvd3 nv-wrap nv-sunburst nv-chart-"+k),B=A.selectAll("nv-sunburst");z.attr("transform","translate("+w/2+","+x/2+")"),l.on("click",function(a,b){o.chartClick({data:a,index:b,pos:d3.event,id:k})}),q.range([0,y]),c=c||b,e=b[0],r.value(j[i]||j.count),v=B.data(r.nodes).enter().append("path").attr("d",s).style("fill",function(a){return m((a.children?a:a.parent).name)}).style("stroke","#FFF").on("click",function(a){d!==c&&c!==a&&(d=c),c=a,v.transition().duration(n).attrTween("d",u(a))}).each(t).on("dblclick",function(a){d.parent==a&&v.transition().duration(n).attrTween("d",u(e))}).each(t).on("mouseover",function(a,b){d3.select(this).classed("hover",!0).style("opacity",.8),o.elementMouseover({data:a,color:d3.select(this).style("fill")})}).on("mouseout",function(a,b){d3.select(this).classed("hover",!1).style("opacity",1),o.elementMouseout({data:a})}).on("mousemove",function(a,b){o.elementMousemove({data:a})})}),t.renderEnd("sunburst immediate"),b}var c,d,e,f={top:0,right:0,bottom:0,left:0},g=null,h=null,i="count",j={count:function(a){return 1},size:function(a){return a.size}},k=Math.floor(1e4*Math.random()),l=null,m=a.utils.defaultColor(),n=500,o=d3.dispatch("chartClick","elementClick","elementDblClick","elementMousemove","elementMouseover","elementMouseout","renderEnd"),p=d3.scale.linear().range([0,2*Math.PI]),q=d3.scale.sqrt(),r=d3.layout.partition().sort(null).value(function(a){return 1}),s=d3.svg.arc().startAngle(function(a){return Math.max(0,Math.min(2*Math.PI,p(a.x)))}).endAngle(function(a){return Math.max(0,Math.min(2*Math.PI,p(a.x+a.dx)))}).innerRadius(function(a){return Math.max(0,q(a.y))}).outerRadius(function(a){return Math.max(0,q(a.y+a.dy))}),t=a.utils.renderWatch(o);return b.dispatch=o,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{width:{get:function(){return g},set:function(a){g=a}},height:{get:function(){return h},set:function(a){h=a}},mode:{get:function(){return i},set:function(a){i=a}},id:{get:function(){return k},set:function(a){k=a}},duration:{get:function(){return n},set:function(a){n=a}},margin:{get:function(){return f},set:function(a){f.top=void 0!=a.top?a.top:f.top,f.right=void 0!=a.right?a.right:f.right,f.bottom=void 0!=a.bottom?a.bottom:f.bottom,f.left=void 0!=a.left?a.left:f.left}},color:{get:function(){return m},set:function(b){m=a.utils.getColor(b)}}}),a.utils.initOptions(b),b},a.models.sunburstChart=function(){"use strict";function b(d){return m.reset(),m.models(c),d.each(function(d){var h=d3.select(this);a.utils.initSVG(h);var i=a.utils.availableWidth(f,h,e),j=a.utils.availableHeight(g,h,e);if(b.update=function(){0===k?h.call(b):h.transition().duration(k).call(b)},b.container=this,!d||!d.length)return a.utils.noData(b,h),b;h.selectAll(".nv-noData").remove();var l=h.selectAll("g.nv-wrap.nv-sunburstChart").data(d),m=l.enter().append("g").attr("class","nvd3 nv-wrap nv-sunburstChart").append("g"),n=l.select("g");m.append("g").attr("class","nv-sunburstWrap"),l.attr("transform","translate("+e.left+","+e.top+")"),c.width(i).height(j);var o=n.select(".nv-sunburstWrap").datum(d);d3.transition(o).call(c)}),m.renderEnd("sunburstChart immediate"),b}var c=a.models.sunburst(),d=a.models.tooltip(),e={top:30,right:20,bottom:20,left:20},f=null,g=null,h=a.utils.defaultColor(),i=(Math.round(1e5*Math.random()),null),j=null,k=250,l=d3.dispatch("tooltipShow","tooltipHide","stateChange","changeState","renderEnd"),m=a.utils.renderWatch(l);return d.headerEnabled(!1).duration(0).valueFormatter(function(a,b){return a}),c.dispatch.on("elementMouseover.tooltip",function(a){a.series={key:a.data.name,value:a.data.size,color:a.color},d.data(a).hidden(!1)}),c.dispatch.on("elementMouseout.tooltip",function(a){d.hidden(!0)}),c.dispatch.on("elementMousemove.tooltip",function(a){d.position({top:d3.event.pageY,left:d3.event.pageX})()}),b.dispatch=l,b.sunburst=c,b.tooltip=d,b.options=a.utils.optionsFunc.bind(b),b._options=Object.create({},{noData:{get:function(){return j},set:function(a){j=a}},defaultState:{get:function(){return i},set:function(a){i=a}},color:{get:function(){return h},set:function(a){h=a,c.color(h)}},duration:{get:function(){return k},set:function(a){k=a,m.reset(k),c.duration(k)}},margin:{get:function(){return e},set:function(a){e.top=void 0!==a.top?a.top:e.top,e.right=void 0!==a.right?a.right:e.right,e.bottom=void 0!==a.bottom?a.bottom:e.bottom,e.left=void 0!==a.left?a.left:e.left}}}),a.utils.inheritOptions(b,c),a.utils.initOptions(b),b},a.version="1.8.1"}(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/output/Itvl_3kiKQR1g.jpeg b/wqflask/wqflask/static/output/Itvl_3kiKQR1g.jpeg
deleted file mode 100644
index bdd94651..00000000
--- a/wqflask/wqflask/static/output/Itvl_3kiKQR1g.jpeg
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/output/Itvl_hNsk2rxO.jpeg b/wqflask/wqflask/static/output/Itvl_hNsk2rxO.jpeg
deleted file mode 100644
index bdd94651..00000000
--- a/wqflask/wqflask/static/output/Itvl_hNsk2rxO.jpeg
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/DT_bootstrap/DT_bootstrap.css b/wqflask/wqflask/static/packages/DT_bootstrap/DT_bootstrap.css
deleted file mode 100644
index 9adaabb1..00000000
--- a/wqflask/wqflask/static/packages/DT_bootstrap/DT_bootstrap.css
+++ /dev/null
@@ -1,179 +0,0 @@
-
-div.dataTables_length label {
- float: left;
- text-align: left;
-}
-
-div.dataTables_length select {
- width: 75px;
-}
-
-div.dataTables_filter label {
- float: right;
-}
-
-div.dataTables_info {
- padding-top: 8px;
-}
-
-div.dataTables_paginate {
- float: right;
- margin: 0;
-}
-
-table.table {
- clear: both;
- margin-bottom: 6px !important;
- max-width: none !important;
-}
-
-table.table thead .sorting,
-table.table thead .sorting_asc,
-table.table thead .sorting_desc,
-table.table thead .sorting_asc_disabled,
-table.table thead .sorting_desc_disabled {
- cursor: pointer;
- *cursor: hand;
-}
-
-table.table thead .sorting { background: url('images/sort_both.png') no-repeat center right; }
-table.table thead .sorting_asc { background: url('images/sort_asc.png') no-repeat center right; }
-table.table thead .sorting_desc { background: url('images/sort_desc.png') no-repeat center right; }
-
-table.table thead .sorting_asc_disabled { background: url('images/sort_asc_disabled.png') no-repeat center right; }
-table.table thead .sorting_desc_disabled { background: url('images/sort_desc_disabled.png') no-repeat center right; }
-
-table.dataTable th:active {
- outline: none;
-}
-
-/* Scrolling */
-div.dataTables_scrollHead table {
- margin-bottom: 0 !important;
- border-bottom-left-radius: 0;
- border-bottom-right-radius: 0;
-}
-
-div.dataTables_scrollHead table thead tr:last-child th:first-child,
-div.dataTables_scrollHead table thead tr:last-child td:first-child {
- border-bottom-left-radius: 0 !important;
- border-bottom-right-radius: 0 !important;
-}
-
-div.dataTables_scrollBody table {
- border-top: none;
- margin-bottom: 0 !important;
-}
-
-div.dataTables_scrollBody tbody tr:first-child th,
-div.dataTables_scrollBody tbody tr:first-child td {
- border-top: none;
-}
-
-div.dataTables_scrollFoot table {
- border-top: none;
-}
-
-
-
-
-/*
- * TableTools styles
- */
-.table tbody tr.active td,
-.table tbody tr.active th {
- background-color: #08C;
- color: white;
-}
-
-.table tbody tr.active:hover td,
-.table tbody tr.active:hover th {
- background-color: #0075b0 !important;
-}
-
-.table-striped tbody tr.active:nth-child(odd) td,
-.table-striped tbody tr.active:nth-child(odd) th {
- background-color: #017ebc;
-}
-
-table.DTTT_selectable tbody tr {
- cursor: pointer;
- *cursor: hand;
-}
-
-div.DTTT .btn {
- color: #333 !important;
- font-size: 12px;
-}
-
-div.DTTT .btn:hover {
- text-decoration: none !important;
-}
-
-
-ul.DTTT_dropdown.dropdown-menu a {
- color: #333 !important; /* needed only when demo_page.css is included */
-}
-
-ul.DTTT_dropdown.dropdown-menu li:hover a {
- background-color: #0088cc;
- color: white !important;
-}
-
-/* TableTools information display */
-div.DTTT_print_info.modal {
- height: 150px;
- margin-top: -75px;
- text-align: center;
-}
-
-div.DTTT_print_info h6 {
- font-weight: normal;
- font-size: 28px;
- line-height: 28px;
- margin: 1em;
-}
-
-div.DTTT_print_info p {
- font-size: 14px;
- line-height: 20px;
-}
-
-
-
-/*
- * FixedColumns styles
- */
-div.DTFC_LeftHeadWrapper table,
-div.DTFC_LeftFootWrapper table,
-table.DTFC_Cloned tr.even {
- background-color: white;
-}
-
-div.DTFC_LeftHeadWrapper table {
- margin-bottom: 0 !important;
- border-top-right-radius: 0 !important;
- border-bottom-left-radius: 0 !important;
- border-bottom-right-radius: 0 !important;
-}
-
-div.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child,
-div.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child {
- border-bottom-left-radius: 0 !important;
- border-bottom-right-radius: 0 !important;
-}
-
-div.DTFC_LeftBodyWrapper table {
- border-top: none;
- margin-bottom: 0 !important;
-}
-
-div.DTFC_LeftBodyWrapper tbody tr:first-child th,
-div.DTFC_LeftBodyWrapper tbody tr:first-child td {
- border-top: none;
-}
-
-div.DTFC_LeftFootWrapper table {
- border-top: none;
-}
-
diff --git a/wqflask/wqflask/static/packages/DT_bootstrap/DT_bootstrap.js b/wqflask/wqflask/static/packages/DT_bootstrap/DT_bootstrap.js
deleted file mode 100644
index cfe3e9d2..00000000
--- a/wqflask/wqflask/static/packages/DT_bootstrap/DT_bootstrap.js
+++ /dev/null
@@ -1,159 +0,0 @@
-/* Set the defaults for DataTables initialisation */
-$.extend( true, $.fn.dataTable.defaults, {
- "sDom": "<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
- "sPaginationType": "bootstrap",
- "oLanguage": {
- "sLengthMenu": "_MENU_ records per page"
- }
-} );
-
-
-/* Default class modification */
-$.extend( $.fn.dataTableExt.oStdClasses, {
- "sWrapper": "dataTables_wrapper form-inline"
-} );
-
-
-/* API method to get paging information */
-$.fn.dataTableExt.oApi.fnPagingInfo = function ( oSettings )
-{
- return {
- "iStart": oSettings._iDisplayStart,
- "iEnd": oSettings.fnDisplayEnd(),
- "iLength": oSettings._iDisplayLength,
- "iTotal": oSettings.fnRecordsTotal(),
- "iFilteredTotal": oSettings.fnRecordsDisplay(),
- "iPage": oSettings._iDisplayLength === -1 ?
- 0 : Math.ceil( oSettings._iDisplayStart / oSettings._iDisplayLength ),
- "iTotalPages": oSettings._iDisplayLength === -1 ?
- 0 : Math.ceil( oSettings.fnRecordsDisplay() / oSettings._iDisplayLength )
- };
-};
-
-
-/* Bootstrap style pagination control */
-$.extend( $.fn.dataTableExt.oPagination, {
- "bootstrap": {
- "fnInit": function( oSettings, nPaging, fnDraw ) {
- var oLang = oSettings.oLanguage.oPaginate;
- var fnClickHandler = function ( e ) {
- e.preventDefault();
- if ( oSettings.oApi._fnPageChange(oSettings, e.data.action) ) {
- fnDraw( oSettings );
- }
- };
-
- $(nPaging).addClass('pagination').append(
- '<ul>'+
- '<li class="prev disabled"><a href="#">&larr; '+oLang.sPrevious+'</a></li>'+
- '<li class="next disabled"><a href="#">'+oLang.sNext+' &rarr; </a></li>'+
- '</ul>'
- );
- var els = $('a', nPaging);
- $(els[0]).bind( 'click.DT', { action: "previous" }, fnClickHandler );
- $(els[1]).bind( 'click.DT', { action: "next" }, fnClickHandler );
- },
-
- "fnUpdate": function ( oSettings, fnDraw ) {
- var iListLength = 5;
- var oPaging = oSettings.oInstance.fnPagingInfo();
- var an = oSettings.aanFeatures.p;
- var i, ien, j, sClass, iStart, iEnd, iHalf=Math.floor(iListLength/2);
-
- if ( oPaging.iTotalPages < iListLength) {
- iStart = 1;
- iEnd = oPaging.iTotalPages;
- }
- else if ( oPaging.iPage <= iHalf ) {
- iStart = 1;
- iEnd = iListLength;
- } else if ( oPaging.iPage >= (oPaging.iTotalPages-iHalf) ) {
- iStart = oPaging.iTotalPages - iListLength + 1;
- iEnd = oPaging.iTotalPages;
- } else {
- iStart = oPaging.iPage - iHalf + 1;
- iEnd = iStart + iListLength - 1;
- }
-
- for ( i=0, ien=an.length ; i<ien ; i++ ) {
- // Remove the middle elements
- $('li:gt(0)', an[i]).filter(':not(:last)').remove();
-
- // Add the new list items and their event handlers
- for ( j=iStart ; j<=iEnd ; j++ ) {
- sClass = (j==oPaging.iPage+1) ? 'class="active"' : '';
- $('<li '+sClass+'><a href="#">'+j+'</a></li>')
- .insertBefore( $('li:last', an[i])[0] )
- .bind('click', function (e) {
- e.preventDefault();
- oSettings._iDisplayStart = (parseInt($('a', this).text(),10)-1) * oPaging.iLength;
- fnDraw( oSettings );
- } );
- }
-
- // Add / remove disabled classes from the static elements
- if ( oPaging.iPage === 0 ) {
- $('li:first', an[i]).addClass('disabled');
- } else {
- $('li:first', an[i]).removeClass('disabled');
- }
-
- if ( oPaging.iPage === oPaging.iTotalPages-1 || oPaging.iTotalPages === 0 ) {
- $('li:last', an[i]).addClass('disabled');
- } else {
- $('li:last', an[i]).removeClass('disabled');
- }
- }
- }
- }
-} );
-
-
-/*
- * TableTools Bootstrap compatibility
- * Required TableTools 2.1+
- */
-if ( $.fn.DataTable.TableTools ) {
- // Set the classes that TableTools uses to something suitable for Bootstrap
- $.extend( true, $.fn.DataTable.TableTools.classes, {
- "container": "DTTT btn-group",
- "buttons": {
- "normal": "btn",
- "disabled": "disabled"
- },
- "collection": {
- "container": "DTTT_dropdown dropdown-menu",
- "buttons": {
- "normal": "",
- "disabled": "disabled"
- }
- },
- "print": {
- "info": "DTTT_print_info modal"
- },
- "select": {
- "row": "active"
- }
- } );
-
- // Have the collection use a bootstrap compatible dropdown
- $.extend( true, $.fn.DataTable.TableTools.DEFAULTS.oTags, {
- "collection": {
- "container": "ul",
- "button": "li",
- "liner": "a"
- }
- } );
-}
-
-
-/* Table initialisation */
-//$(document).ready(function() {
-// $('#example').dataTable( {
-// "sDom": "<'row'<'span6'l><'span6'f>r>t<'row'<'span6'i><'span6'p>>",
-// "sPaginationType": "bootstrap",
-// "oLanguage": {
-// "sLengthMenu": "_MENU_ records per page"
-// }
-// } );
-//} ); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/DT_bootstrap/images b/wqflask/wqflask/static/packages/DT_bootstrap/images
deleted file mode 120000
index f5f1b7d0..00000000
--- a/wqflask/wqflask/static/packages/DT_bootstrap/images
+++ /dev/null
@@ -1 +0,0 @@
-../../new/packages/DataTables/images/ \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/TableTools/alt_init.html b/wqflask/wqflask/static/packages/TableTools/alt_init.html
deleted file mode 100644
index 73853150..00000000
--- a/wqflask/wqflask/static/packages/TableTools/alt_init.html
+++ /dev/null
@@ -1,520 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico">
-
- <title>TableTools example</title>
- <style type="text/css" title="currentStyle">
- @import "../../media/css/demo_page.css";
- @import "../../media/css/demo_table.css";
- @import "media/css/TableTools.css";
- tr.selected {
- background-color: red !important;
- }
- </style>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/ZeroClipboard.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/TableTools.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready( function () {
- var oTable = $('#example').dataTable();
- var oTableTools = new TableTools( oTable, {
- "buttons": [
- "copy",
- "csv",
- "xls",
- "pdf",
- { "type": "print", "buttonText": "Print me!" }
- ]
- } );
-
- $('#demo').before( oTableTools.dom.container );
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- TableTools example - initialisation with 'new TableTools()'
- </div>
-
- <h1>Preamble</h1>
- <p>Typically when working with TableTools, the initialisation and insertion into the DOM will be done automatically by DataTables, through the use of the sDom parameter. However, it is also possible to initialise TableTools manually as shown in the example below. Once initialised you can insert the TableTools tool bar node anywhere you wish into the DOM using the <i>instance</i>.dom.container parameter.</p>
-
-
- <h1>Live example</h1>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="odd_gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+ (Entity: &amp;)</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Trident</td>
- <td>Internet Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko (UTF-8: $¢€)</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="even_gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <h1>Initialisation code</h1>
- <pre>$(document).ready( function () {
- var oTable = $('#example').dataTable();
- var oTableTools = new TableTools( oTable, {
- "buttons": [
- "copy",
- "csv",
- "xls",
- "pdf",
- { "type": "print", "buttonText": "Print me!" }
- ]
- } );
-
- $('#demo').before( oTableTools.dom.container );
-} );</pre>
-
-
- <h1>Other examples</h1>
- <ul>
- <li><a href="index.html">Basic initialisation</a></li>
- <li><a href="swf_path.html">Setting the SWF path</a></li>
- <li><a href="alter_buttons.html">Custom button arrangement</a></li>
- <li><a href="button_text.html">Button text alteration</a></li>
- <li><a href="collection.html">Using button collections</a></li>
- <li><a href="theme.html">Using jQuery UI themes</a></li>
- <li><a href="bootstrap.html">Styling with Twitter Bootstrap</a></li>
- <li><a href="multi_instance.html">Multiple TableTools toolbars for a single table</a></li>
- <li><a href="multiple_tables.html">Multiple DataTables with a single initialisation</a></li>
- <li><a href="select_multi.html">User selectable rows (multiple rows)</a></li>
- <li><a href="select_single.html">User selectable rows (single row)</a></li>
- <li><a href="alt_init.html">Alternative initialisation using 'new TableTools()'</a></li>
- <li><a href="defaults.html">Altering the TableTools defaults</a></li>
- <li><a href="plug-in.html">TableTools plug-in buttons</a></li>
- <li><a href="pdf_message.html">Customising the PDF output (adding text and orientation)</a></li>
- </ul>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- TableTools and DataTables &copy; Allan Jardine 2009-2011.<br>
- Flash 10 save / copy operations are performed by a modified version of <a href="http://code.google.com/p/zeroclipboard/">Zero Clipboard</a>.<br>
- The icons used in the toolbar are modified from <a href="http://www.addictedtocoffee.de/">Oliver Twardowski's</a> <a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/">Flavours Icon set</a>.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/TableTools/alter_buttons.html b/wqflask/wqflask/static/packages/TableTools/alter_buttons.html
deleted file mode 100644
index 771b0b86..00000000
--- a/wqflask/wqflask/static/packages/TableTools/alter_buttons.html
+++ /dev/null
@@ -1,505 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico">
-
- <title>TableTools example</title>
- <style type="text/css" title="currentStyle">
- @import "../../media/css/demo_page.css";
- @import "../../media/css/demo_table.css";
- @import "media/css/TableTools.css";
- </style>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/ZeroClipboard.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/TableTools.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T<"clear">lfrtip',
- "oTableTools": {
- "aButtons": [ "copy", "print" ]
- }
- } );
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- TableTools example - button arrangement
- </div>
-
- <h1>Preamble</h1>
- <p>TableTools makes it very simple to arrange the buttons in the toolbar as you see fit. Using the <i>aButtons</i> parameter you can use any of the <a href="http://datatables.net/extras/tabletools/buttons">predefined buttons</a> or <a href="http://datatables.net/extras/tabletools/button_options">customised buttons</a>. The example below shows how TableTools can be initialised to provide only the 'copy-to-clipboard' and 'print view' options (i.e. no save to local file option is available).</p>
-
-
- <h1>Live example</h1>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="odd_gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+ (Entity: &amp;)</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Trident</td>
- <td>Internet Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko (UTF-8: $¢€)</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="even_gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <h1>Initialisation code</h1>
- <pre>$(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T&lt;"clear"&gt;lfrtip',
- "oTableTools": {
- "aButtons": [ "copy", "print" ]
- }
- } );
-} );</pre>
-
-
- <h1>Other examples</h1>
- <ul>
- <li><a href="index.html">Basic initialisation</a></li>
- <li><a href="swf_path.html">Setting the SWF path</a></li>
- <li><a href="alter_buttons.html">Custom button arrangement</a></li>
- <li><a href="button_text.html">Button text alteration</a></li>
- <li><a href="collection.html">Using button collections</a></li>
- <li><a href="theme.html">Using jQuery UI themes</a></li>
- <li><a href="bootstrap.html">Styling with Twitter Bootstrap</a></li>
- <li><a href="multi_instance.html">Multiple TableTools toolbars for a single table</a></li>
- <li><a href="multiple_tables.html">Multiple DataTables with a single initialisation</a></li>
- <li><a href="select_multi.html">User selectable rows (multiple rows)</a></li>
- <li><a href="select_single.html">User selectable rows (single row)</a></li>
- <li><a href="alt_init.html">Alternative initialisation using 'new TableTools()'</a></li>
- <li><a href="defaults.html">Altering the TableTools defaults</a></li>
- <li><a href="plug-in.html">TableTools plug-in buttons</a></li>
- <li><a href="pdf_message.html">Customising the PDF output (adding text and orientation)</a></li>
- </ul>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- TableTools and DataTables &copy; Allan Jardine 2009-2011.<br>
- Flash 10 save / copy operations are performed by a modified version of <a href="http://code.google.com/p/zeroclipboard/">Zero Clipboard</a>.<br>
- The icons used in the toolbar are modified from <a href="http://www.addictedtocoffee.de/">Oliver Twardowski's</a> <a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/">Flavours Icon set</a>.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/TableTools/bootstrap.html b/wqflask/wqflask/static/packages/TableTools/bootstrap.html
deleted file mode 100644
index 664bde3d..00000000
--- a/wqflask/wqflask/static/packages/TableTools/bootstrap.html
+++ /dev/null
@@ -1,551 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico">
-
- <title>TableTools example</title>
-
- <style type="text/css">
- @import "../../media/css/demo_page.css";
- @import "http://twitter.github.com/bootstrap/assets/css/bootstrap.css";
- @import "http://datatables.github.com/Plugins/integration/bootstrap/dataTables.bootstrap.css";
- </style>
-
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/ZeroClipboard.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/TableTools.js"></script>
- <script type="text/javascript" charset="utf-8" src="http://datatables.github.com/Plugins/integration/bootstrap/dataTables.bootstrap.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready( function () {
- $('#example').dataTable( {
- "sDom": "<'row-fluid'<'span6'T><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
- "oTableTools": {
- "aButtons": [
- "copy",
- "print",
- {
- "sExtends": "collection",
- "sButtonText": 'Save <span class="caret" />',
- "aButtons": [ "csv", "xls", "pdf" ]
- }
- ]
- }
- } );
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- TableTools with Twitter Bootstrap
- </div>
-
- <h1>Preamble</h1>
- <p><a href="http://twitter.github.com/bootstrap/">Twitter Bootstrap</a> is a very powerful design framework for allowing you to very quickly create applications with a unified look and feel. <a href="http://datatables.net/blog/Twitter_Bootstrap_2">DataTables integrates well</a> with Bootstrap, and so does TableTools.</p>
- <p>This example shows the default Bootstrap theme being used with a Bootstrap styled DataTable. sDom is supplied to the DataTable with a setup suitable for Bootstrap styling, and a TableTools collection is used to show how it can be used in this environment.</p>
-
- <h1>Live example</h1>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="table table-striped table-bordered" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="odd_gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+ (Entity: &amp;)</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Trident</td>
- <td>Internet Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko (UTF-8: $¢€ היצו×)</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="even_gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <h1>Initialisation code</h1>
- <pre>$(document).ready( function () {
- $('#example').dataTable( {
- "sDom": "&lt;'row-fluid'&lt;'span6'T&gt;&lt;'span6'f&gt;r&gt;t&lt;'row-fluid'&lt;'span6'i&gt;&lt;'span6'p&gt;&gt;",
- "oTableTools": {
- "aButtons": [
- "copy",
- "print",
- {
- "sExtends": "collection",
- "sButtonText": 'Save &lt;span class="caret" /&gt;',
- "aButtons": [ "csv", "xls", "pdf" ]
- }
- ]
- }
- } );
-} );</pre>
-
- <p>The following code is included from the <a href="http://datatables.github.com/Plugins/integration/bootstrap/dataTables.bootstrap.js">DataTables bootstrap integration file</a>:</p>
-
- <pre>// Set the classes that TableTools uses to something suitable for Bootstrap
-$.extend( true, $.fn.DataTable.TableTools.classes, {
- "container": "btn-group",
- "buttons": {
- "normal": "btn",
- "disabled": "btn disabled"
- },
- "collection": {
- "container": "DTTT_dropdown dropdown-menu",
- "buttons": {
- "normal": "",
- "disabled": "disabled"
- }
- }
-} );
-
-// Have the collection use a bootstrap compatible dropdown
-$.extend( true, $.fn.DataTable.TableTools.DEFAULTS.oTags, {
- "collection": {
- "container": "ul",
- "button": "li",
- "liner": "a"
- }
-} );</pre>
-
-
- <h1>Other examples</h1>
- <ul>
- <li><a href="index.html">Basic initialisation</a></li>
- <li><a href="swf_path.html">Setting the SWF path</a></li>
- <li><a href="alter_buttons.html">Custom button arrangement</a></li>
- <li><a href="button_text.html">Button text alteration</a></li>
- <li><a href="collection.html">Using button collections</a></li>
- <li><a href="theme.html">Using jQuery UI themes</a></li>
- <li><a href="bootstrap.html">Styling with Twitter Bootstrap</a></li>
- <li><a href="multi_instance.html">Multiple TableTools toolbars for a single table</a></li>
- <li><a href="multiple_tables.html">Multiple DataTables with a single initialisation</a></li>
- <li><a href="select_multi.html">User selectable rows (multiple rows)</a></li>
- <li><a href="select_single.html">User selectable rows (single row)</a></li>
- <li><a href="alt_init.html">Alternative initialisation using 'new TableTools()'</a></li>
- <li><a href="defaults.html">Altering the TableTools defaults</a></li>
- <li><a href="plug-in.html">TableTools plug-in buttons</a></li>
- <li><a href="pdf_message.html">Customising the PDF output (adding text and orientation)</a></li>
- </ul>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- TableTools and DataTables &copy; Allan Jardine 2009-2011.<br>
- Flash 10 save / copy operations are performed by a modified version of <a href="http://code.google.com/p/zeroclipboard/">Zero Clipboard</a>.<br>
- The icons used in the toolbar are modified from <a href="http://www.addictedtocoffee.de/">Oliver Twardowski's</a> <a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/">Flavours Icon set</a>.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/TableTools/button_text.html b/wqflask/wqflask/static/packages/TableTools/button_text.html
deleted file mode 100644
index 6828eb94..00000000
--- a/wqflask/wqflask/static/packages/TableTools/button_text.html
+++ /dev/null
@@ -1,531 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico">
-
- <title>TableTools example</title>
- <style type="text/css" title="currentStyle">
- @import "../../media/css/demo_page.css";
- @import "../../media/css/demo_table.css";
- @import "media/css/TableTools.css";
- </style>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/ZeroClipboard.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/TableTools.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T<"clear">lfrtip',
- "oTableTools": {
- "aButtons": [
- {
- "sExtends": "copy",
- "sButtonText": "Copy to clipboard"
- },
- {
- "sExtends": "csv",
- "sButtonText": "Save to CSV"
- },
- {
- "sExtends": "xls",
- "sButtonText": "Save for Excel"
- }
- ]
- }
- } );
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- TableTools example - customised button text
- </div>
-
- <h1>Preamble</h1>
- <p>You may wish to set your own text for the buttons in the TableTools toolbar, rather than relying on the default built-in text. This is done by overriding the <i>sButtonText</i> parameter of whatever button you wish to alter. The way TableTools allows you to alter a predefined button is by 'extending' it (using the <i>sExtends</i> parameter) and then setting the overriding parameter. A full list of the parameters which can be used is <a href="http://datatables.net/extras/tabletools/button_options">available on the DataTables.net web-site</a>. This example shows how to set the button text as required.</p>
-
-
- <h1>Live example</h1>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="odd_gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+ (Entity: &amp;)</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Trident</td>
- <td>Internet Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko (UTF-8: $¢€)</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="even_gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <h1>Initialisation code</h1>
- <pre>$(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T&lt;"clear"&gt;lfrtip',
- "oTableTools": {
- "aButtons": [
- {
- "sExtends": "copy",
- "sButtonText": "Copy to clipboard"
- },
- {
- "sExtends": "csv",
- "sButtonText": "Save to CSV"
- },
- {
- "sExtends": "xls",
- "sButtonText": "Save for Excel"
- }
- ]
- }
- } );
-} );</pre>
-
-
- <h1>Other examples</h1>
- <ul>
- <li><a href="index.html">Basic initialisation</a></li>
- <li><a href="swf_path.html">Setting the SWF path</a></li>
- <li><a href="alter_buttons.html">Custom button arrangement</a></li>
- <li><a href="button_text.html">Button text alteration</a></li>
- <li><a href="collection.html">Using button collections</a></li>
- <li><a href="theme.html">Using jQuery UI themes</a></li>
- <li><a href="bootstrap.html">Styling with Twitter Bootstrap</a></li>
- <li><a href="multi_instance.html">Multiple TableTools toolbars for a single table</a></li>
- <li><a href="multiple_tables.html">Multiple DataTables with a single initialisation</a></li>
- <li><a href="select_multi.html">User selectable rows (multiple rows)</a></li>
- <li><a href="select_single.html">User selectable rows (single row)</a></li>
- <li><a href="alt_init.html">Alternative initialisation using 'new TableTools()'</a></li>
- <li><a href="defaults.html">Altering the TableTools defaults</a></li>
- <li><a href="plug-in.html">TableTools plug-in buttons</a></li>
- <li><a href="pdf_message.html">Customising the PDF output (adding text and orientation)</a></li>
- </ul>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- TableTools and DataTables &copy; Allan Jardine 2009-2011.<br>
- Flash 10 save / copy operations are performed by a modified version of <a href="http://code.google.com/p/zeroclipboard/">Zero Clipboard</a>.<br>
- The icons used in the toolbar are modified from <a href="http://www.addictedtocoffee.de/">Oliver Twardowski's</a> <a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/">Flavours Icon set</a>.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/TableTools/collection.html b/wqflask/wqflask/static/packages/TableTools/collection.html
deleted file mode 100644
index 4eb3141b..00000000
--- a/wqflask/wqflask/static/packages/TableTools/collection.html
+++ /dev/null
@@ -1,522 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico">
-
- <title>TableTools example</title>
- <style type="text/css" title="currentStyle">
- @import "../../media/css/demo_page.css";
- @import "../../media/css/demo_table.css";
- @import "media/css/TableTools.css";
- </style>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/ZeroClipboard.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/TableTools.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T<"clear">lfrtip',
- "oTableTools": {
- "aButtons": [
- "copy",
- "print",
- {
- "sExtends": "collection",
- "sButtonText": "Save",
- "aButtons": [ "csv", "xls", "pdf" ]
- }
- ]
- }
- } );
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- TableTools example - button collections
- </div>
-
- <h1>Preamble</h1>
- <p>TableTools provides the ability to group buttons into a hidden drop down list, which is activated by clicking on a top-level button. This is achieved by extending the 'collection' predefined button type and setting it's <i>aButtons</i> parameter with the same options as the top level buttons (note that you cannot currently use a collection within a collection).</p>
- <p>The example below shows the file save buttons grouped into a collection, while the copy and print buttons are left on the top level.</p>
-
-
- <h1>Live example</h1>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="odd_gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+ (Entity: &amp;)</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Trident</td>
- <td>Internet Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko (UTF-8: $¢€)</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="even_gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <h1>Initialisation code</h1>
- <pre>$(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T&lt;"clear"&gt;lfrtip',
- "oTableTools": {
- "aButtons": [
- "copy",
- "print",
- {
- "sExtends": "collection",
- "sButtonText": "Save",
- "aButtons": [ "csv", "xls", "pdf" ]
- }
- ]
- }
- } );
-} );</pre>
-
-
- <h1>Other examples</h1>
- <ul>
- <li><a href="index.html">Basic initialisation</a></li>
- <li><a href="swf_path.html">Setting the SWF path</a></li>
- <li><a href="alter_buttons.html">Custom button arrangement</a></li>
- <li><a href="button_text.html">Button text alteration</a></li>
- <li><a href="collection.html">Using button collections</a></li>
- <li><a href="theme.html">Using jQuery UI themes</a></li>
- <li><a href="bootstrap.html">Styling with Twitter Bootstrap</a></li>
- <li><a href="multi_instance.html">Multiple TableTools toolbars for a single table</a></li>
- <li><a href="multiple_tables.html">Multiple DataTables with a single initialisation</a></li>
- <li><a href="select_multi.html">User selectable rows (multiple rows)</a></li>
- <li><a href="select_single.html">User selectable rows (single row)</a></li>
- <li><a href="alt_init.html">Alternative initialisation using 'new TableTools()'</a></li>
- <li><a href="defaults.html">Altering the TableTools defaults</a></li>
- <li><a href="plug-in.html">TableTools plug-in buttons</a></li>
- <li><a href="pdf_message.html">Customising the PDF output (adding text and orientation)</a></li>
- </ul>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- TableTools and DataTables &copy; Allan Jardine 2009-2011.<br>
- Flash 10 save / copy operations are performed by a modified version of <a href="http://code.google.com/p/zeroclipboard/">Zero Clipboard</a>.<br>
- The icons used in the toolbar are modified from <a href="http://www.addictedtocoffee.de/">Oliver Twardowski's</a> <a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/">Flavours Icon set</a>.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/TableTools/defaults.html b/wqflask/wqflask/static/packages/TableTools/defaults.html
deleted file mode 100644
index 5ef74a68..00000000
--- a/wqflask/wqflask/static/packages/TableTools/defaults.html
+++ /dev/null
@@ -1,503 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico">
-
- <title>TableTools example</title>
- <style type="text/css" title="currentStyle">
- @import "../../media/css/demo_page.css";
- @import "../../media/css/demo_table.css";
- @import "media/css/TableTools.css";
- </style>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/ZeroClipboard.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/TableTools.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready( function () {
- TableTools.DEFAULTS.aButtons = [ "copy", "csv", "xls" ];
-
- $('#example').dataTable( {
- "sDom": 'T<"clear">lfrtip'
- } );
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- TableTools example - changing the initialisation defaults
- </div>
-
- <h1>Preamble</h1>
- <p>TableTools provides the ability to override the default initialisation parameters that are used when creating a new instance. This this particularly useful if you have multiple tables which you want to have the same TableTools behaviour - rather than declaring the structure multiple times, you can just set the defaults once. This example shows how to alter the default buttons.</p>
-
-
- <h1>Live example</h1>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="odd_gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+ (Entity: &amp;)</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Trident</td>
- <td>Internet Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko (UTF-8: $¢€)</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="even_gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <h1>Initialisation code</h1>
- <pre>$(document).ready( function () {
- TableTools.DEFAULTS.aButtons = [ "copy", "csv", "xls" ];
-
- $('#example').dataTable( {
- "sDom": 'T&lt;"clear"&gt;lfrtip'
- } );
-} );</pre>
-
-
- <h1>Other examples</h1>
- <ul>
- <li><a href="index.html">Basic initialisation</a></li>
- <li><a href="swf_path.html">Setting the SWF path</a></li>
- <li><a href="alter_buttons.html">Custom button arrangement</a></li>
- <li><a href="button_text.html">Button text alteration</a></li>
- <li><a href="collection.html">Using button collections</a></li>
- <li><a href="theme.html">Using jQuery UI themes</a></li>
- <li><a href="bootstrap.html">Styling with Twitter Bootstrap</a></li>
- <li><a href="multi_instance.html">Multiple TableTools toolbars for a single table</a></li>
- <li><a href="multiple_tables.html">Multiple DataTables with a single initialisation</a></li>
- <li><a href="select_multi.html">User selectable rows (multiple rows)</a></li>
- <li><a href="select_single.html">User selectable rows (single row)</a></li>
- <li><a href="alt_init.html">Alternative initialisation using 'new TableTools()'</a></li>
- <li><a href="defaults.html">Altering the TableTools defaults</a></li>
- <li><a href="plug-in.html">TableTools plug-in buttons</a></li>
- <li><a href="pdf_message.html">Customising the PDF output (adding text and orientation)</a></li>
- </ul>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- TableTools and DataTables &copy; Allan Jardine 2009-2011.<br>
- Flash 10 save / copy operations are performed by a modified version of <a href="http://code.google.com/p/zeroclipboard/">Zero Clipboard</a>.<br>
- The icons used in the toolbar are modified from <a href="http://www.addictedtocoffee.de/">Oliver Twardowski's</a> <a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/">Flavours Icon set</a>.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/TableTools/index.html b/wqflask/wqflask/static/packages/TableTools/index.html
deleted file mode 100644
index 06a2442d..00000000
--- a/wqflask/wqflask/static/packages/TableTools/index.html
+++ /dev/null
@@ -1,499 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico">
-
- <title>TableTools example</title>
- <style type="text/css" title="currentStyle">
- @import "../../media/css/demo_page.css";
- @import "../../media/css/demo_table.css";
- @import "media/css/TableTools.css";
- </style>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/ZeroClipboard.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/TableTools.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T<"clear">lfrtip'
- } );
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- TableTools example
- </div>
-
- <h1>Preamble</h1>
- <p>This example shows the basic initialisation of TableTools by simply including the 'T' marker in DataTables' sDom parameter. This tell DataTables to insert the TableTools toolbar in that location. Remember to include the Javascript and CSS source files as well!</p>
- <p>It is worth noting that you might need to <a href="swf_path.html">set the <i>sSwfPath</i> parameter</a> to tell TableTools where to find the SWF file for copy and file save.</p>
-
- <h1>Live example</h1>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="odd_gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+ (Entity: &amp;)</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Trident</td>
- <td>Internet Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko (UTF-8: $¢€ היצו×)</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="even_gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <h1>Initialisation code</h1>
- <pre>$(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T&lt;"clear"&gt;lfrtip'
- } );
-} );</pre>
-
-
- <h1>Other examples</h1>
- <ul>
- <li><a href="index.html">Basic initialisation</a></li>
- <li><a href="swf_path.html">Setting the SWF path</a></li>
- <li><a href="alter_buttons.html">Custom button arrangement</a></li>
- <li><a href="button_text.html">Button text alteration</a></li>
- <li><a href="collection.html">Using button collections</a></li>
- <li><a href="theme.html">Using jQuery UI themes</a></li>
- <li><a href="bootstrap.html">Styling with Twitter Bootstrap</a></li>
- <li><a href="multi_instance.html">Multiple TableTools toolbars for a single table</a></li>
- <li><a href="multiple_tables.html">Multiple DataTables with a single initialisation</a></li>
- <li><a href="select_multi.html">User selectable rows (multiple rows)</a></li>
- <li><a href="select_single.html">User selectable rows (single row)</a></li>
- <li><a href="alt_init.html">Alternative initialisation using 'new TableTools()'</a></li>
- <li><a href="defaults.html">Altering the TableTools defaults</a></li>
- <li><a href="plug-in.html">TableTools plug-in buttons</a></li>
- <li><a href="pdf_message.html">Customising the PDF output (adding text and orientation)</a></li>
- </ul>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- TableTools and DataTables &copy; Allan Jardine 2009-2011.<br>
- Flash 10 save / copy operations are performed by a modified version of <a href="http://code.google.com/p/zeroclipboard/">Zero Clipboard</a>.<br>
- The icons used in the toolbar are modified from <a href="http://www.addictedtocoffee.de/">Oliver Twardowski's</a> <a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/">Flavours Icon set</a>.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/TableTools/media/as3/ZeroClipboard.as b/wqflask/wqflask/static/packages/TableTools/media/as3/ZeroClipboard.as
deleted file mode 100644
index d6b9c072..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/as3/ZeroClipboard.as
+++ /dev/null
@@ -1,221 +0,0 @@
-/* Compile using: mxmlc --target-player=10.0.0 ZeroClipboard.as */
-package {
- import flash.display.Stage;
- import flash.display.Sprite;
- import flash.display.LoaderInfo;
- import flash.display.StageScaleMode;
- import flash.events.*;
- import flash.display.StageAlign;
- import flash.display.StageScaleMode;
- import flash.external.ExternalInterface;
- import flash.system.Security;
- import flash.utils.*;
- import flash.system.System;
- import flash.net.FileReference;
- import flash.net.FileFilter;
-
- public class ZeroClipboard extends Sprite {
-
- private var domId:String = '';
- private var button:Sprite;
- private var clipText:String = 'blank';
- private var fileName:String = '';
- private var action:String = 'copy';
- private var incBom:Boolean = true;
- private var charSet:String = 'utf8';
-
-
- public function ZeroClipboard() {
- // constructor, setup event listeners and external interfaces
- stage.scaleMode = StageScaleMode.EXACT_FIT;
- flash.system.Security.allowDomain("*");
-
- // import flashvars
- var flashvars:Object = LoaderInfo( this.root.loaderInfo ).parameters;
- domId = flashvars.id.split("\\").join("\\\\");
-
- // invisible button covers entire stage
- button = new Sprite();
- button.buttonMode = true;
- button.useHandCursor = true;
- button.graphics.beginFill(0x00FF00);
- button.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
- button.alpha = 0.0;
- addChild(button);
-
- button.addEventListener(MouseEvent.CLICK, clickHandler);
- button.addEventListener(MouseEvent.MOUSE_OVER, function(event:Event):void {
- ExternalInterface.call( 'ZeroClipboard_TableTools.dispatch', domId, 'mouseOver', null );
- } );
- button.addEventListener(MouseEvent.MOUSE_OUT, function(event:Event):void {
- ExternalInterface.call( 'ZeroClipboard_TableTools.dispatch', domId, 'mouseOut', null );
- } );
- button.addEventListener(MouseEvent.MOUSE_DOWN, function(event:Event):void {
- ExternalInterface.call( 'ZeroClipboard_TableTools.dispatch', domId, 'mouseDown', null );
- } );
- button.addEventListener(MouseEvent.MOUSE_UP, function(event:Event):void {
- ExternalInterface.call( 'ZeroClipboard_TableTools.dispatch', domId, 'mouseUp', null );
- } );
-
- // External functions - readd whenever the stage is made active for IE
- addCallbacks();
- stage.addEventListener(Event.ACTIVATE, addCallbacks);
-
- // signal to the browser that we are ready
- ExternalInterface.call( 'ZeroClipboard_TableTools.dispatch', domId, 'load', null );
- }
-
- public function addCallbacks (evt:Event = null):void {
- ExternalInterface.addCallback("setHandCursor", setHandCursor);
- ExternalInterface.addCallback("clearText", clearText);
- ExternalInterface.addCallback("setText", setText);
- ExternalInterface.addCallback("appendText", appendText);
- ExternalInterface.addCallback("setFileName", setFileName);
- ExternalInterface.addCallback("setAction", setAction);
- ExternalInterface.addCallback("setCharSet", setCharSet);
- ExternalInterface.addCallback("setBomInc", setBomInc);
- }
-
-
- public function setCharSet(newCharSet:String):void {
- if ( newCharSet == 'UTF16LE' ) {
- charSet = newCharSet;
- } else {
- charSet = 'UTF8';
- }
- }
-
- public function setBomInc(newBomInc:Boolean):void {
- incBom = newBomInc;
- }
-
- public function clearText():void {
- clipText = '';
- }
-
- public function appendText(newText:String):void {
- clipText += newText;
- }
-
- public function setText(newText:String):void {
- clipText = newText;
- }
-
- public function setFileName(newFileName:String):void {
- fileName = newFileName;
- }
-
- public function setAction(newAction:String):void {
- action = newAction;
- }
-
- public function setHandCursor(enabled:Boolean):void {
- // control whether the hand cursor is shown on rollover (true)
- // or the default arrow cursor (false)
- button.useHandCursor = enabled;
- }
-
-
- private function clickHandler(event:Event):void {
- var fileRef:FileReference = new FileReference();
- fileRef.addEventListener(Event.COMPLETE, saveComplete);
-
- if ( action == "save" ) {
- /* Save as a file */
- if ( charSet == 'UTF16LE' ) {
- fileRef.save( strToUTF16LE(clipText), fileName );
- } else {
- fileRef.save( strToUTF8(clipText), fileName );
- }
- } else if ( action == "pdf" ) {
- fileRef.save( "This instance of ZeroClipboard is not configured for PDF export. "+
- "Please use the PDF export version.", fileName+".txt" );
- } else {
- /* Copy the text to the clipboard. Note charset and BOM have no effect here */
- System.setClipboard( clipText );
- ExternalInterface.call( 'ZeroClipboard_TableTools.dispatch', domId, 'complete', clipText );
- }
- }
-
-
- private function saveComplete(event:Event):void {
- ExternalInterface.call( 'ZeroClipboard_TableTools.dispatch', domId, 'complete', clipText );
- }
-
-
- private function getProp( prop:String, opts:Array ):String
- {
- var i:int, iLen:int;
- for ( i=0, iLen=opts.length ; i<iLen ; i++ )
- {
- if ( opts[i].indexOf( prop+":" ) != -1 )
- {
- return opts[i].replace( prop+":", "" );
- }
- }
- return "";
- }
-
-
- /*
- * Function: strToUTF8
- * Purpose: Convert a string to the output utf-8
- * Returns: ByteArray
- * Inputs: String
- */
- private function strToUTF8( str:String ):ByteArray {
- var utf8:ByteArray = new ByteArray();
-
- /* BOM first */
- if ( incBom ) {
- utf8.writeByte( 0xEF );
- utf8.writeByte( 0xBB );
- utf8.writeByte( 0xBF );
- }
- utf8.writeUTFBytes( str );
-
- return utf8;
- }
-
-
- /*
- * Function: strToUTF16LE
- * Purpose: Convert a string to the output utf-16
- * Returns: ByteArray
- * Inputs: String
- * Notes: The fact that this function is needed is a little annoying. Basically, strings in
- * AS3 are UTF-16 (with surrogate pairs and everything), but characters which take up less
- * than 8 bytes appear to be stored as only 8 bytes. This function effective adds the
- * padding required, and the BOM
- */
- private function strToUTF16LE( str:String ):ByteArray {
- var utf16:ByteArray = new ByteArray();
- var iChar:uint;
- var i:uint=0, iLen:uint = str.length;
-
- /* BOM first */
- if ( incBom ) {
- utf16.writeByte( 0xFF );
- utf16.writeByte( 0xFE );
- }
-
- while ( i < iLen ) {
- iChar = str.charCodeAt(i);
-
- if ( iChar < 0xFF ) {
- /* one byte char */
- utf16.writeByte( iChar );
- utf16.writeByte( 0 );
- } else {
- /* two byte char */
- utf16.writeByte( iChar & 0x00FF );
- utf16.writeByte( iChar >> 8 );
- }
-
- i++;
- }
-
- return utf16;
- }
- }
-}
diff --git a/wqflask/wqflask/static/packages/TableTools/media/as3/ZeroClipboardPdf.as b/wqflask/wqflask/static/packages/TableTools/media/as3/ZeroClipboardPdf.as
deleted file mode 100644
index 158d5f18..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/as3/ZeroClipboardPdf.as
+++ /dev/null
@@ -1,310 +0,0 @@
-/* Compile using: mxmlc --target-player=10.0.0 -static-link-runtime-shared-libraries=true -library-path+=lib ZeroClipboardPdf.as */
-package {
- import flash.display.Stage;
- import flash.display.Sprite;
- import flash.display.LoaderInfo;
- import flash.display.StageScaleMode;
- import flash.events.*;
- import flash.display.StageAlign;
- import flash.display.StageScaleMode;
- import flash.external.ExternalInterface;
- import flash.system.Security;
- import flash.utils.*;
- import flash.system.System;
- import flash.net.FileReference;
- import flash.net.FileFilter;
-
- /* PDF imports */
- import org.alivepdf.pdf.PDF;
- import org.alivepdf.data.Grid;
- import org.alivepdf.data.GridColumn;
- import org.alivepdf.layout.Orientation;
- import org.alivepdf.layout.Size;
- import org.alivepdf.layout.Unit;
- import org.alivepdf.display.Display;
- import org.alivepdf.saving.Method;
- import org.alivepdf.fonts.FontFamily;
- import org.alivepdf.fonts.Style;
- import org.alivepdf.fonts.CoreFont;
- import org.alivepdf.colors.RGBColor;
-
- public class ZeroClipboard extends Sprite {
-
- private var domId:String = '';
- private var button:Sprite;
- private var clipText:String = 'blank';
- private var fileName:String = '';
- private var action:String = 'copy';
- private var incBom:Boolean = true;
- private var charSet:String = 'utf8';
-
-
- public function ZeroClipboard() {
- // constructor, setup event listeners and external interfaces
- stage.scaleMode = StageScaleMode.EXACT_FIT;
- flash.system.Security.allowDomain("*");
-
- // import flashvars
- var flashvars:Object = LoaderInfo( this.root.loaderInfo ).parameters;
- domId = flashvars.id.split("\\").join("\\\\");
-
- // invisible button covers entire stage
- button = new Sprite();
- button.buttonMode = true;
- button.useHandCursor = true;
- button.graphics.beginFill(0x00FF00);
- button.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
- button.alpha = 0.0;
- addChild(button);
-
- button.addEventListener(MouseEvent.CLICK, function(event:Event):void {
- clickHandler(event);
- } );
- button.addEventListener(MouseEvent.MOUSE_OVER, function(event:Event):void {
- ExternalInterface.call( 'ZeroClipboard_TableTools.dispatch', domId, 'mouseOver', null );
- } );
- button.addEventListener(MouseEvent.MOUSE_OUT, function(event:Event):void {
- ExternalInterface.call( 'ZeroClipboard_TableTools.dispatch', domId, 'mouseOut', null );
- } );
- button.addEventListener(MouseEvent.MOUSE_DOWN, function(event:Event):void {
- ExternalInterface.call( 'ZeroClipboard_TableTools.dispatch', domId, 'mouseDown', null );
- } );
- button.addEventListener(MouseEvent.MOUSE_UP, function(event:Event):void {
- ExternalInterface.call( 'ZeroClipboard_TableTools.dispatch', domId, 'mouseUp', null );
- } );
-
- // External functions - readd whenever the stage is made active for IE
- addCallbacks();
- stage.addEventListener(Event.ACTIVATE, addCallbacks);
-
- // signal to the browser that we are ready
- ExternalInterface.call( 'ZeroClipboard_TableTools.dispatch', domId, 'load', null );
- }
-
- public function addCallbacks (evt:Event = null):void {
- ExternalInterface.addCallback("setHandCursor", setHandCursor);
- ExternalInterface.addCallback("clearText", clearText);
- ExternalInterface.addCallback("setText", setText);
- ExternalInterface.addCallback("appendText", appendText);
- ExternalInterface.addCallback("setFileName", setFileName);
- ExternalInterface.addCallback("setAction", setAction);
- ExternalInterface.addCallback("setCharSet", setCharSet);
- ExternalInterface.addCallback("setBomInc", setBomInc);
- }
-
-
- public function setCharSet(newCharSet:String):void {
- if ( newCharSet == 'UTF16LE' ) {
- charSet = newCharSet;
- } else {
- charSet = 'UTF8';
- }
- }
-
- public function setBomInc(newBomInc:Boolean):void {
- incBom = newBomInc;
- }
-
- public function clearText():void {
- clipText = '';
- }
-
- public function appendText(newText:String):void {
- clipText += newText;
- }
-
- public function setText(newText:String):void {
- clipText = newText;
- }
-
- public function setFileName(newFileName:String):void {
- fileName = newFileName;
- }
-
- public function setAction(newAction:String):void {
- action = newAction;
- }
-
- public function setHandCursor(enabled:Boolean):void {
- // control whether the hand cursor is shown on rollover (true)
- // or the default arrow cursor (false)
- button.useHandCursor = enabled;
- }
-
-
- private function clickHandler(event:Event):void {
- var fileRef:FileReference = new FileReference();
- fileRef.addEventListener(Event.COMPLETE, saveComplete);
-
- if ( action == "save" ) {
- /* Save as a file */
- if ( charSet == 'UTF16LE' ) {
- fileRef.save( strToUTF16LE(clipText), fileName );
- } else {
- fileRef.save( strToUTF8(clipText), fileName );
- }
- } else if ( action == "pdf" ) {
- /* Save as a PDF */
- var pdf:PDF = configPdf();
- fileRef.save( pdf.save( Method.LOCAL ), fileName );
- } else {
- /* Copy the text to the clipboard. Note charset and BOM have no effect here */
- System.setClipboard( clipText );
- ExternalInterface.call( 'ZeroClipboard_TableTools.dispatch', domId, 'complete', clipText );
- }
- }
-
-
- private function saveComplete(event:Event):void {
- ExternalInterface.call( 'ZeroClipboard_TableTools.dispatch', domId, 'complete', clipText );
- }
-
-
- private function getProp( prop:String, opts:Array ):String
- {
- var i:int, iLen:int;
- for ( i=0, iLen=opts.length ; i<iLen ; i++ )
- {
- if ( opts[i].indexOf( prop+":" ) != -1 )
- {
- return opts[i].replace( prop+":", "" );
- }
- }
- return "";
- }
-
-
- private function configPdf():PDF
- {
- var
- pdf:PDF,
- i:int, iLen:int,
- splitText:Array = clipText.split("--/TableToolsOpts--\n"),
- opts:Array = splitText[0].split("\n"),
- dataIn:Array = splitText[1].split("\n"),
- aColRatio:Array = getProp( 'colWidth', opts ).split('\t'),
- title:String = getProp( 'title', opts ),
- message:String = getProp( 'message', opts ),
- orientation:String = getProp( 'orientation', opts ),
- size:String = getProp( 'size', opts ),
- iPageWidth:int = 0,
- dataOut:Array = [],
- columns:Array = [],
- headers:Array,
- y:int = 0;
-
- /* Create the PDF */
- pdf = new PDF( Orientation[orientation.toUpperCase()], Unit.MM, Size[size.toUpperCase()] );
- pdf.setDisplayMode( Display.FULL_WIDTH );
- pdf.addPage();
- iPageWidth = pdf.getCurrentPage().w-20;
- pdf.textStyle( new RGBColor(0), 1 );
-
- /* Add the title / message if there is one */
- pdf.setFont( new CoreFont(FontFamily.HELVETICA), 14 );
- if ( title != "" )
- {
- pdf.writeText(11, title+"\n");
- }
-
- pdf.setFont( new CoreFont(FontFamily.HELVETICA), 11 );
- if ( message != "" )
- {
- pdf.writeText(11, message+"\n");
- }
-
- /* Data setup. Split up the headers, and then construct the columns */
- for ( i=0, iLen=dataIn.length ; i<iLen ; i++ )
- {
- if ( dataIn[i] != "" )
- {
- dataOut.push( dataIn[i].split("\t") );
- }
- }
- headers = dataOut.shift();
-
- for ( i=0, iLen=headers.length ; i<iLen ; i++ )
- {
- columns.push( new GridColumn( " \n"+headers[i]+"\n ", i.toString(), aColRatio[i]*iPageWidth, 'C' ) );
- }
-
- var grid:Grid = new Grid(
- dataOut, /* 1. data */
- iPageWidth, /* 2. width */
- 100, /* 3. height */
- new RGBColor (0xE0E0E0), /* 4. headerColor */
- new RGBColor (0xFFFFFF), /* 5. backgroundColor */
- true, /* 6. alternateRowColor */
- new RGBColor ( 0x0 ), /* 7. borderColor */
- .1, /* 8. border alpha */
- null, /* 9. joins */
- columns /* 10. columns */
- );
-
- pdf.addGrid( grid, 0, y );
- return pdf;
- }
-
-
- /*
- * Function: strToUTF8
- * Purpose: Convert a string to the output utf-8
- * Returns: ByteArray
- * Inputs: String
- */
- private function strToUTF8( str:String ):ByteArray {
- var utf8:ByteArray = new ByteArray();
-
- /* BOM first */
- if ( incBom ) {
- utf8.writeByte( 0xEF );
- utf8.writeByte( 0xBB );
- utf8.writeByte( 0xBF );
- }
- utf8.writeUTFBytes( str );
-
- return utf8;
- }
-
-
- /*
- * Function: strToUTF16LE
- * Purpose: Convert a string to the output utf-16
- * Returns: ByteArray
- * Inputs: String
- * Notes: The fact that this function is needed is a little annoying. Basically, strings in
- * AS3 are UTF-16 (with surrogate pairs and everything), but characters which take up less
- * than 8 bytes appear to be stored as only 8 bytes. This function effective adds the
- * padding required, and the BOM
- */
- private function strToUTF16LE( str:String ):ByteArray {
- var utf16:ByteArray = new ByteArray();
- var iChar:uint;
- var i:uint=0, iLen:uint = str.length;
-
- /* BOM first */
- if ( incBom ) {
- utf16.writeByte( 0xFF );
- utf16.writeByte( 0xFE );
- }
-
- while ( i < iLen ) {
- iChar = str.charCodeAt(i);
-
- if ( iChar < 0xFF ) {
- /* one byte char */
- utf16.writeByte( iChar );
- utf16.writeByte( 0 );
- } else {
- /* two byte char */
- utf16.writeByte( iChar & 0x00FF );
- utf16.writeByte( iChar >> 8 );
- }
-
- i++;
- }
-
- return utf16;
- }
- }
-}
diff --git a/wqflask/wqflask/static/packages/TableTools/media/as3/lib/AlivePDF.swc b/wqflask/wqflask/static/packages/TableTools/media/as3/lib/AlivePDF.swc
deleted file mode 100644
index ee0f3f8f..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/as3/lib/AlivePDF.swc
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/css/TableTools.css b/wqflask/wqflask/static/packages/TableTools/media/css/TableTools.css
deleted file mode 100644
index ffa2af34..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/css/TableTools.css
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * File: TableTools.css
- * Description: Styles for TableTools 2
- * Author: Allan Jardine (www.sprymedia.co.uk)
- * Language: Javascript
- * License: GPL v2 / 3 point BSD
- * Project: DataTables
- *
- * Copyright 2009-2012 Allan Jardine, all rights reserved.
- *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *
- * CSS name space:
- * DTTT DataTables TableTools
- *
- * Style sheet provides:
- * CONTAINER TableTools container element and styles applying to all components
- * BUTTON_STYLES Action specific button styles
- * SELECTING Row selection styles
- * COLLECTIONS Drop down list (collection) styles
- * PRINTING Print display styles
- */
-
-
-/*
- * CONTAINER
- * TableTools container element and styles applying to all components
- */
-div.DTTT_container {
- position: relative;
- float: right;
- margin-bottom: 1em;
-}
-
-button.DTTT_button,
-div.DTTT_button,
-a.DTTT_button {
- position: relative;
- float: left;
- margin-right: 3px;
- padding: 5px 8px;
- border: 1px solid #999;
- cursor: pointer;
- *cursor: hand;
- font-size: 0.88em;
- color: black !important;
-
- -webkit-border-radius: 2px;
- -moz-border-radius: 2px;
- -ms-border-radius: 2px;
- -o-border-radius: 2px;
- border-radius: 2px;
-
- -webkit-box-shadow: 1px 1px 3px #ccc;
- -moz-box-shadow: 1px 1px 3px #ccc;
- -ms-box-shadow: 1px 1px 3px #ccc;
- -o-box-shadow: 1px 1px 3px #ccc;
- box-shadow: 1px 1px 3px #ccc;
-
- /* Generated by http://www.colorzilla.com/gradient-editor/ */
- background: #ffffff; /* Old browsers */
- background: -webkit-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Chrome10+,Safari5.1+ */
- background: -moz-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* FF3.6+ */
- background: -ms-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* IE10+ */
- background: -o-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Opera 11.10+ */
- background: linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#f9f9f9',GradientType=0 ); /* IE6-9 */
-}
-
-
-/* Buttons are cunning border-box sizing - we can't just use that for A and DIV due to IE6/7 */
-button.DTTT_button {
- height: 30px;
- padding: 3px 8px;
-}
-
-.DTTT_button embed {
- outline: none;
-}
-
-button.DTTT_button:hover,
-div.DTTT_button:hover,
-a.DTTT_button:hover {
- border: 1px solid #666;
- text-decoration: none !important;
-
- -webkit-box-shadow: 1px 1px 3px #999;
- -moz-box-shadow: 1px 1px 3px #999;
- -ms-box-shadow: 1px 1px 3px #999;
- -o-box-shadow: 1px 1px 3px #999;
- box-shadow: 1px 1px 3px #999;
-
- background: #f3f3f3; /* Old browsers */
- background: -webkit-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* Chrome10+,Safari5.1+ */
- background: -moz-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* FF3.6+ */
- background: -ms-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* IE10+ */
- background: -o-linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* Opera 11.10+ */
- background: linear-gradient(top, #f3f3f3 0%,#e2e2e2 89%,#f4f4f4 100%); /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f3f3f3', endColorstr='#f4f4f4',GradientType=0 ); /* IE6-9 */
-}
-
-button.DTTT_disabled,
-div.DTTT_disabled,
-a.DTTT_disabled {
- color: #999;
- border: 1px solid #d0d0d0;
-
- background: #ffffff; /* Old browsers */
- background: -webkit-linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* Chrome10+,Safari5.1+ */
- background: -moz-linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* FF3.6+ */
- background: -ms-linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* IE10+ */
- background: -o-linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* Opera 11.10+ */
- background: linear-gradient(top, #ffffff 0%,#f9f9f9 89%,#fafafa 100%); /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#fafafa',GradientType=0 ); /* IE6-9 */
-}
-
-
-
-/*
- * BUTTON_STYLES
- * Action specific button styles
- * If you want images - comment this back in
-
-a.DTTT_button_csv,
-a.DTTT_button_xls,
-a.DTTT_button_copy,
-a.DTTT_button_pdf,
-a.DTTT_button_print {
- padding-right: 0px;
-}
-
-a.DTTT_button_csv span,
-a.DTTT_button_xls span,
-a.DTTT_button_copy span,
-a.DTTT_button_pdf span,
-a.DTTT_button_print span {
- display: inline-block;
- height: 24px;
- line-height: 24px;
- padding-right: 30px;
-}
-
-
-a.DTTT_button_csv span { background: url(../images/csv.png) no-repeat bottom right; }
-a.DTTT_button_csv:hover span { background: url(../images/csv_hover.png) no-repeat center right; }
-
-a.DTTT_button_xls span { background: url(../images/xls.png) no-repeat center right; }
-a.DTTT_button_xls:hover span { background: #f0f0f0 url(../images/xls_hover.png) no-repeat center right; }
-
-a.DTTT_button_copy span { background: url(../images/copy.png) no-repeat center right; }
-a.DTTT_button_copy:hover span { background: #f0f0f0 url(../images/copy_hover.png) no-repeat center right; }
-
-a.DTTT_button_pdf span { background: url(../images/pdf.png) no-repeat center right; }
-a.DTTT_button_pdf:hover span { background: #f0f0f0 url(../images/pdf_hover.png) no-repeat center right; }
-
-a.DTTT_button_print span { background: url(../images/print.png) no-repeat center right; }
-a.DTTT_button_print:hover span { background: #f0f0f0 url(../images/print_hover.png) no-repeat center right; }
-
- */
-
-button.DTTT_button_collection span {
- padding-right: 17px;
- background: url(../images/collection.png) no-repeat center right;
-}
-
-button.DTTT_button_collection:hover span {
- padding-right: 17px;
- background: #f0f0f0 url(../images/collection_hover.png) no-repeat center right;
-}
-
-
-/*
- * SELECTING
- * Row selection styles
- */
-table.DTTT_selectable tbody tr {
- cursor: pointer;
- *cursor: hand;
-}
-
-table.dataTable tr.DTTT_selected.odd {
- background-color: #9FAFD1;
-}
-
-table.dataTable tr.DTTT_selected.odd td.sorting_1 {
- background-color: #9FAFD1;
-}
-
-table.dataTable tr.DTTT_selected.odd td.sorting_2 {
- background-color: #9FAFD1;
-}
-
-table.dataTable tr.DTTT_selected.odd td.sorting_3 {
- background-color: #9FAFD1;
-}
-
-
-table.dataTable tr.DTTT_selected.even {
- background-color: #B0BED9;
-}
-
-table.dataTable tr.DTTT_selected.even td.sorting_1 {
- background-color: #B0BED9;
-}
-
-table.dataTable tr.DTTT_selected.even td.sorting_2 {
- background-color: #B0BED9;
-}
-
-table.dataTable tr.DTTT_selected.even td.sorting_3 {
- background-color: #B0BED9;
-}
-
-
-/*
- * COLLECTIONS
- * Drop down list (collection) styles
- */
-
-div.DTTT_collection {
- width: 150px;
- padding: 8px 8px 4px 8px;
- border: 1px solid #ccc;
- border: 1px solid rgba( 0, 0, 0, 0.4 );
- background-color: #f3f3f3;
- background-color: rgba( 255, 255, 255, 0.3 );
- overflow: hidden;
- z-index: 2002;
-
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- -ms-border-radius: 5px;
- -o-border-radius: 5px;
- border-radius: 5px;
-
- -webkit-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
- -moz-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
- -ms-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
- -o-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
- box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3);
-}
-
-div.DTTT_collection_background {
- background: transparent url(../images/background.png) repeat top left;
- z-index: 2001;
-}
-
-div.DTTT_collection button.DTTT_button,
-div.DTTT_collection div.DTTT_button,
-div.DTTT_collection a.DTTT_button {
- position: relative;
- left: 0;
- right: 0;
-
- display: block;
- float: none;
- margin-bottom: 4px;
-
- -webkit-box-shadow: 1px 1px 3px #999;
- -moz-box-shadow: 1px 1px 3px #999;
- -ms-box-shadow: 1px 1px 3px #999;
- -o-box-shadow: 1px 1px 3px #999;
- box-shadow: 1px 1px 3px #999;
-}
-
-
-/*
- * PRINTING
- * Print display styles
- */
-
-.DTTT_print_info {
- position: fixed;
- top: 50%;
- left: 50%;
- width: 400px;
- height: 150px;
- margin-left: -200px;
- margin-top: -75px;
- text-align: center;
- color: #333;
- padding: 10px 30px;
-
- background: #ffffff; /* Old browsers */
- background: -webkit-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Chrome10+,Safari5.1+ */
- background: -moz-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* FF3.6+ */
- background: -ms-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* IE10+ */
- background: -o-linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* Opera 11.10+ */
- background: linear-gradient(top, #ffffff 0%,#f3f3f3 89%,#f9f9f9 100%); /* W3C */
- filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#f9f9f9',GradientType=0 ); /* IE6-9 */
-
- opacity: 0.95;
-
- border: 1px solid black;
- border: 1px solid rgba(0, 0, 0, 0.5);
-
- -webkit-border-radius: 6px;
- -moz-border-radius: 6px;
- -ms-border-radius: 6px;
- -o-border-radius: 6px;
- border-radius: 6px;
-
- -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);
- -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);
- -ms-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);
- -o-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);
- box-shadow: 0 3px 7px rgba(0, 0, 0, 0.5);
-}
-
-.DTTT_print_info h6 {
- font-weight: normal;
- font-size: 28px;
- line-height: 28px;
- margin: 1em;
-}
-
-.DTTT_print_info p {
- font-size: 14px;
- line-height: 20px;
-}
-
-.no-sort::after { display: none!important; }
-.no-sort { pointer-events: none!important;
- cursor: default!important;
-}
-
diff --git a/wqflask/wqflask/static/packages/TableTools/media/css/TableTools_JUI.css b/wqflask/wqflask/static/packages/TableTools/media/css/TableTools_JUI.css
deleted file mode 100644
index 4c41138e..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/css/TableTools_JUI.css
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * File: TableTools.css
- * Description: Styles for TableTools 2 with JUI theming
- * Author: Allan Jardine (www.sprymedia.co.uk)
- * Language: Javascript
- * License: LGPL / 3 point BSD
- * Project: DataTables
- *
- * Copyright 2010 Allan Jardine, all rights reserved.
- *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- *
- * Notes:
- * Generally speaking, please refer to the TableTools.css file - this file contains basic
- * modifications to that 'master' stylesheet for ThemeRoller.
- *
- * CSS name space:
- * DTTT DataTables TableTools
- *
- * Colour dictionary:
- * Button border #d0d0d0
- * Button border hover #999999
- * Hover background #f0f0f0
- * Action blue #4b66d9
- *
- * Style sheet provides:
- * CONTAINER TableTools container element and styles applying to all components
- * SELECTING Row selection styles
- * COLLECTIONS Drop down list (collection) styles
- * PRINTING Print display styles
- * MISC Minor misc styles
- */
-
-
-/*
- * CONTAINER
- * TableTools container element and styles applying to all components
- */
-div.DTTT_container {
- position: relative;
- float: left;
-}
-
-.DTTT_button {
- position: relative;
- float: left;
- margin-right: 3px;
- padding: 3px 10px;
- border: 1px solid #d0d0d0;
- background-color: #fff;
- color: #333 !important;
- cursor: pointer;
- *cursor: hand;
-}
-
-.DTTT_button::-moz-focus-inner {
- border: none !important;
- padding: 0;
-}
-
-
-
-/*
- * SELECTING
- * Row selection styles
- */
-table.DTTT_selectable tbody tr {
- cursor: pointer;
- *cursor: hand;
-}
-
-table.dataTable tr.DTTT_selected.odd {
- background-color: #9FAFD1;
-}
-
-table.dataTable tr.DTTT_selected.odd td.sorting_1 {
- background-color: #9FAFD1;
-}
-
-table.dataTable tr.DTTT_selected.odd td.sorting_2 {
- background-color: #9FAFD1;
-}
-
-table.dataTable tr.DTTT_selected.odd td.sorting_3 {
- background-color: #9FAFD1;
-}
-
-
-table.dataTable tr.DTTT_selected.even {
- background-color: #B0BED9;
-}
-
-table.dataTable tr.DTTT_selected.even td.sorting_1 {
- background-color: #B0BED9;
-}
-
-table.dataTable tr.DTTT_selected.even td.sorting_2 {
- background-color: #B0BED9;
-}
-
-table.dataTable tr.DTTT_selected.even td.sorting_3 {
- background-color: #B0BED9;
-}
-
-
-/*
- * COLLECTIONS
- * Drop down list (collection) styles
- */
-
-div.DTTT_collection {
- width: 150px;
- background-color: #f3f3f3;
- overflow: hidden;
- z-index: 2002;
-
- box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5);
- -moz-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5);
- -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5);
-}
-
-div.DTTT_collection_background {
- background: url(../images/background.png) repeat top left;
- z-index: 2001;
-}
-
-div.DTTT_collection button.DTTT_button,
-div.DTTT_collection div.DTTT_button,
-div.DTTT_collection a.DTTT_button {
- float: none;
- width: 100%;
- margin-bottom: -0.1em;
-}
-
-
-/*
- * PRINTING
- * Print display styles
- */
-
-.DTTT_print_info {
- position: fixed;
- top: 50%;
- left: 50%;
- width: 400px;
- height: 150px;
- margin-left: -200px;
- margin-top: -75px;
- text-align: center;
- background-color: #3f3f3f;
- color: white;
- padding: 10px 30px;
-
- opacity: 0.9;
-
- border-radius: 5px;
- -moz-border-radius: 5px;
- -webkit-border-radius: 5px;
-
- box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5);
- -moz-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5);
- -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.5);
-}
-
-.DTTT_print_info h6 {
- font-weight: normal;
- font-size: 28px;
- line-height: 28px;
- margin: 1em;
-}
-
-.DTTT_print_info p {
- font-size: 14px;
- line-height: 20px;
-}
-
-
-/*
- * MISC
- * Minor misc styles
- */
-
-.DTTT_disabled {
- color: #999;
-}
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/background.png b/wqflask/wqflask/static/packages/TableTools/media/images/background.png
deleted file mode 100644
index 915efba6..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/background.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/collection.png b/wqflask/wqflask/static/packages/TableTools/media/images/collection.png
deleted file mode 100644
index 5dd4dfdf..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/collection.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/collection_hover.png b/wqflask/wqflask/static/packages/TableTools/media/images/collection_hover.png
deleted file mode 100644
index 7b37b1e9..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/collection_hover.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/copy.png b/wqflask/wqflask/static/packages/TableTools/media/images/copy.png
deleted file mode 100644
index 5b01ab16..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/copy.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/copy_hover.png b/wqflask/wqflask/static/packages/TableTools/media/images/copy_hover.png
deleted file mode 100644
index 039a7fc3..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/copy_hover.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/csv.png b/wqflask/wqflask/static/packages/TableTools/media/images/csv.png
deleted file mode 100644
index 43df1559..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/csv.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/csv_hover.png b/wqflask/wqflask/static/packages/TableTools/media/images/csv_hover.png
deleted file mode 100644
index 10b34d3b..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/csv_hover.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/pdf.png b/wqflask/wqflask/static/packages/TableTools/media/images/pdf.png
deleted file mode 100644
index 1b038d08..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/pdf.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/pdf_hover.png b/wqflask/wqflask/static/packages/TableTools/media/images/pdf_hover.png
deleted file mode 100644
index eb06855f..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/pdf_hover.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/print.png b/wqflask/wqflask/static/packages/TableTools/media/images/print.png
deleted file mode 100644
index 2db08242..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/print.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/print_hover.png b/wqflask/wqflask/static/packages/TableTools/media/images/print_hover.png
deleted file mode 100644
index 9808a9cc..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/print_hover.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/psd/collection.psd b/wqflask/wqflask/static/packages/TableTools/media/images/psd/collection.psd
deleted file mode 100644
index 7eb7caf2..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/psd/collection.psd
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/psd/copy document.psd b/wqflask/wqflask/static/packages/TableTools/media/images/psd/copy document.psd
deleted file mode 100644
index ca207adc..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/psd/copy document.psd
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/psd/file_types.psd b/wqflask/wqflask/static/packages/TableTools/media/images/psd/file_types.psd
deleted file mode 100644
index 0f280ad5..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/psd/file_types.psd
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/psd/printer.psd b/wqflask/wqflask/static/packages/TableTools/media/images/psd/printer.psd
deleted file mode 100644
index 8c33f7aa..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/psd/printer.psd
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/xls.png b/wqflask/wqflask/static/packages/TableTools/media/images/xls.png
deleted file mode 100644
index 5aaf40d0..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/xls.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/images/xls_hover.png b/wqflask/wqflask/static/packages/TableTools/media/images/xls_hover.png
deleted file mode 100644
index 5b1930af..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/images/xls_hover.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/js/TableTools.js b/wqflask/wqflask/static/packages/TableTools/media/js/TableTools.js
deleted file mode 100644
index b4bf4a6b..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/js/TableTools.js
+++ /dev/null
@@ -1,2476 +0,0 @@
-/*
- * File: TableTools.js
- * Version: 2.1.5
- * Description: Tools and buttons for DataTables
- * Author: Allan Jardine (www.sprymedia.co.uk)
- * Language: Javascript
- * License: GPL v2 or BSD 3 point style
- * Project: DataTables
- *
- * Copyright 2009-2013 Allan Jardine, all rights reserved.
- *
- * This source file is free software, under either the GPL v2 license or a
- * BSD style license, available at:
- * http://datatables.net/license_gpl2
- * http://datatables.net/license_bsd
- */
-
-/* Global scope for TableTools */
-var TableTools;
-
-(function($, window, document) {
-
-/**
- * TableTools provides flexible buttons and other tools for a DataTables enhanced table
- * @class TableTools
- * @constructor
- * @param {Object} oDT DataTables instance
- * @param {Object} oOpts TableTools options
- * @param {String} oOpts.sSwfPath ZeroClipboard SWF path
- * @param {String} oOpts.sRowSelect Row selection options - 'none', 'single' or 'multi'
- * @param {Function} oOpts.fnPreRowSelect Callback function just prior to row selection
- * @param {Function} oOpts.fnRowSelected Callback function just after row selection
- * @param {Function} oOpts.fnRowDeselected Callback function when row is deselected
- * @param {Array} oOpts.aButtons List of buttons to be used
- */
-TableTools = function( oDT, oOpts )
-{
- /* Santiy check that we are a new instance */
- if ( ! this instanceof TableTools )
- {
- alert( "Warning: TableTools must be initialised with the keyword 'new'" );
- }
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Public class variables
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- /**
- * @namespace Settings object which contains customisable information for TableTools instance
- */
- this.s = {
- /**
- * Store 'this' so the instance can be retrieved from the settings object
- * @property that
- * @type object
- * @default this
- */
- "that": this,
-
- /**
- * DataTables settings objects
- * @property dt
- * @type object
- * @default <i>From the oDT init option</i>
- */
- "dt": oDT.fnSettings(),
-
- /**
- * @namespace Print specific information
- */
- "print": {
- /**
- * DataTables draw 'start' point before the printing display was shown
- * @property saveStart
- * @type int
- * @default -1
- */
- "saveStart": -1,
-
- /**
- * DataTables draw 'length' point before the printing display was shown
- * @property saveLength
- * @type int
- * @default -1
- */
- "saveLength": -1,
-
- /**
- * Page scrolling point before the printing display was shown so it can be restored
- * @property saveScroll
- * @type int
- * @default -1
- */
- "saveScroll": -1,
-
- /**
- * Wrapped function to end the print display (to maintain scope)
- * @property funcEnd
- * @type Function
- * @default function () {}
- */
- "funcEnd": function () {}
- },
-
- /**
- * A unique ID is assigned to each button in each instance
- * @property buttonCounter
- * @type int
- * @default 0
- */
- "buttonCounter": 0,
-
- /**
- * @namespace Select rows specific information
- */
- "select": {
- /**
- * Select type - can be 'none', 'single' or 'multi'
- * @property type
- * @type string
- * @default ""
- */
- "type": "",
-
- /**
- * Array of nodes which are currently selected
- * @property selected
- * @type array
- * @default []
- */
- "selected": [],
-
- /**
- * Function to run before the selection can take place. Will cancel the select if the
- * function returns false
- * @property preRowSelect
- * @type Function
- * @default null
- */
- "preRowSelect": null,
-
- /**
- * Function to run when a row is selected
- * @property postSelected
- * @type Function
- * @default null
- */
- "postSelected": null,
-
- /**
- * Function to run when a row is deselected
- * @property postDeselected
- * @type Function
- * @default null
- */
- "postDeselected": null,
-
- /**
- * Indicate if all rows are selected (needed for server-side processing)
- * @property all
- * @type boolean
- * @default false
- */
- "all": false,
-
- /**
- * Class name to add to selected TR nodes
- * @property selectedClass
- * @type String
- * @default ""
- */
- "selectedClass": ""
- },
-
- /**
- * Store of the user input customisation object
- * @property custom
- * @type object
- * @default {}
- */
- "custom": {},
-
- /**
- * SWF movie path
- * @property swfPath
- * @type string
- * @default ""
- */
- "swfPath": "",
-
- /**
- * Default button set
- * @property buttonSet
- * @type array
- * @default []
- */
- "buttonSet": [],
-
- /**
- * When there is more than one TableTools instance for a DataTable, there must be a
- * master which controls events (row selection etc)
- * @property master
- * @type boolean
- * @default false
- */
- "master": false,
-
- /**
- * Tag names that are used for creating collections and buttons
- * @namesapce
- */
- "tags": {}
- };
-
-
- /**
- * @namespace Common and useful DOM elements for the class instance
- */
- this.dom = {
- /**
- * DIV element that is create and all TableTools buttons (and their children) put into
- * @property container
- * @type node
- * @default null
- */
- "container": null,
-
- /**
- * The table node to which TableTools will be applied
- * @property table
- * @type node
- * @default null
- */
- "table": null,
-
- /**
- * @namespace Nodes used for the print display
- */
- "print": {
- /**
- * Nodes which have been removed from the display by setting them to display none
- * @property hidden
- * @type array
- * @default []
- */
- "hidden": [],
-
- /**
- * The information display saying telling the user about the print display
- * @property message
- * @type node
- * @default null
- */
- "message": null
- },
-
- /**
- * @namespace Nodes used for a collection display. This contains the currently used collection
- */
- "collection": {
- /**
- * The div wrapper containing the buttons in the collection (i.e. the menu)
- * @property collection
- * @type node
- * @default null
- */
- "collection": null,
-
- /**
- * Background display to provide focus and capture events
- * @property background
- * @type node
- * @default null
- */
- "background": null
- }
- };
-
- /**
- * @namespace Name space for the classes that this TableTools instance will use
- * @extends TableTools.classes
- */
- this.classes = $.extend( true, {}, TableTools.classes );
- if ( this.s.dt.bJUI )
- {
- $.extend( true, this.classes, TableTools.classes_themeroller );
- }
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Public class methods
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- /**
- * Retreieve the settings object from an instance
- * @method fnSettings
- * @returns {object} TableTools settings object
- */
- this.fnSettings = function () {
- return this.s;
- };
-
-
- /* Constructor logic */
- if ( typeof oOpts == 'undefined' )
- {
- oOpts = {};
- }
-
- this._fnConstruct( oOpts );
-
- return this;
-};
-
-
-
-TableTools.prototype = {
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Public methods
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- /**
- * Retreieve the settings object from an instance
- * @returns {array} List of TR nodes which are currently selected
- * @param {boolean} [filtered=false] Get only selected rows which are
- * available given the filtering applied to the table. By default
- * this is false - i.e. all rows, regardless of filtering are
- selected.
- */
- "fnGetSelected": function ( filtered )
- {
- var
- out = [],
- data = this.s.dt.aoData,
- displayed = this.s.dt.aiDisplay,
- i, iLen;
-
- if ( filtered )
- {
- // Only consider filtered rows
- for ( i=0, iLen=displayed.length ; i<iLen ; i++ )
- {
- if ( data[ displayed[i] ]._DTTT_selected )
- {
- out.push( data[ displayed[i] ].nTr );
- }
- }
- }
- else
- {
- // Use all rows
- for ( i=0, iLen=data.length ; i<iLen ; i++ )
- {
- if ( data[i]._DTTT_selected )
- {
- out.push( data[i].nTr );
- }
- }
- }
-
- return out;
- },
-
-
- /**
- * Get the data source objects/arrays from DataTables for the selected rows (same as
- * fnGetSelected followed by fnGetData on each row from the table)
- * @returns {array} Data from the TR nodes which are currently selected
- */
- "fnGetSelectedData": function ()
- {
- var out = [];
- var data=this.s.dt.aoData;
- var i, iLen;
-
- for ( i=0, iLen=data.length ; i<iLen ; i++ )
- {
- if ( data[i]._DTTT_selected )
- {
- out.push( this.s.dt.oInstance.fnGetData(i) );
- }
- }
-
- return out;
- },
-
-
- /**
- * Check to see if a current row is selected or not
- * @param {Node} n TR node to check if it is currently selected or not
- * @returns {Boolean} true if select, false otherwise
- */
- "fnIsSelected": function ( n )
- {
- var pos = this.s.dt.oInstance.fnGetPosition( n );
- return (this.s.dt.aoData[pos]._DTTT_selected===true) ? true : false;
- },
-
-
- /**
- * Select all rows in the table
- * @param {boolean} [filtered=false] Select only rows which are available
- * given the filtering applied to the table. By default this is false -
- * i.e. all rows, regardless of filtering are selected.
- */
- "fnSelectAll": function ( filtered )
- {
- var s = this._fnGetMasterSettings();
-
- this._fnRowSelect( (filtered === true) ?
- s.dt.aiDisplay :
- s.dt.aoData
- );
- },
-
-
- /**
- * Deselect all rows in the table
- * @param {boolean} [filtered=false] Deselect only rows which are available
- * given the filtering applied to the table. By default this is false -
- * i.e. all rows, regardless of filtering are deselected.
- */
- "fnSelectNone": function ( filtered )
- {
- var s = this._fnGetMasterSettings();
-
- this._fnRowDeselect( this.fnGetSelected(filtered) );
- },
-
-
- /**
- * Select row(s)
- * @param {node|object|array} n The row(s) to select. Can be a single DOM
- * TR node, an array of TR nodes or a jQuery object.
- */
- "fnSelect": function ( n )
- {
- if ( this.s.select.type == "single" )
- {
- this.fnSelectNone();
- this._fnRowSelect( n );
- }
- else if ( this.s.select.type == "multi" )
- {
- this._fnRowSelect( n );
- }
- },
-
-
- /**
- * Deselect row(s)
- * @param {node|object|array} n The row(s) to deselect. Can be a single DOM
- * TR node, an array of TR nodes or a jQuery object.
- */
- "fnDeselect": function ( n )
- {
- this._fnRowDeselect( n );
- },
-
-
- /**
- * Get the title of the document - useful for file names. The title is retrieved from either
- * the configuration object's 'title' parameter, or the HTML document title
- * @param {Object} oConfig Button configuration object
- * @returns {String} Button title
- */
- "fnGetTitle": function( oConfig )
- {
- var sTitle = "";
- if ( typeof oConfig.sTitle != 'undefined' && oConfig.sTitle !== "" ) {
- sTitle = oConfig.sTitle;
- } else {
- var anTitle = document.getElementsByTagName('title');
- if ( anTitle.length > 0 )
- {
- sTitle = anTitle[0].innerHTML;
- }
- }
-
- /* Strip characters which the OS will object to - checking for UTF8 support in the scripting
- * engine
- */
- if ( "\u00A1".toString().length < 4 ) {
- return sTitle.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g, "");
- } else {
- return sTitle.replace(/[^a-zA-Z0-9_\.,\-_ !\(\)]/g, "");
- }
- },
-
-
- /**
- * Calculate a unity array with the column width by proportion for a set of columns to be
- * included for a button. This is particularly useful for PDF creation, where we can use the
- * column widths calculated by the browser to size the columns in the PDF.
- * @param {Object} oConfig Button configuration object
- * @returns {Array} Unity array of column ratios
- */
- "fnCalcColRatios": function ( oConfig )
- {
- var
- aoCols = this.s.dt.aoColumns,
- aColumnsInc = this._fnColumnTargets( oConfig.mColumns ),
- aColWidths = [],
- iWidth = 0, iTotal = 0, i, iLen;
-
- for ( i=0, iLen=aColumnsInc.length ; i<iLen ; i++ )
- {
- if ( aColumnsInc[i] )
- {
- iWidth = aoCols[i].nTh.offsetWidth;
- iTotal += iWidth;
- aColWidths.push( iWidth );
- }
- }
-
- for ( i=0, iLen=aColWidths.length ; i<iLen ; i++ )
- {
- aColWidths[i] = aColWidths[i] / iTotal;
- }
-
- return aColWidths.join('\t');
- },
-
-
- /**
- * Get the information contained in a table as a string
- * @param {Object} oConfig Button configuration object
- * @returns {String} Table data as a string
- */
- "fnGetTableData": function ( oConfig )
- {
- /* In future this could be used to get data from a plain HTML source as well as DataTables */
- if ( this.s.dt )
- {
- return this._fnGetDataTablesData( oConfig );
- }
- },
-
-
- /**
- * Pass text to a flash button instance, which will be used on the button's click handler
- * @param {Object} clip Flash button object
- * @param {String} text Text to set
- */
- "fnSetText": function ( clip, text )
- {
- this._fnFlashSetText( clip, text );
- },
-
-
- /**
- * Resize the flash elements of the buttons attached to this TableTools instance - this is
- * useful for when initialising TableTools when it is hidden (display:none) since sizes can't
- * be calculated at that time.
- */
- "fnResizeButtons": function ()
- {
- for ( var cli in ZeroClipboard_TableTools.clients )
- {
- if ( cli )
- {
- var client = ZeroClipboard_TableTools.clients[cli];
- if ( typeof client.domElement != 'undefined' &&
- client.domElement.parentNode )
- {
- client.positionElement();
- }
- }
- }
- },
-
-
- /**
- * Check to see if any of the ZeroClipboard client's attached need to be resized
- */
- "fnResizeRequired": function ()
- {
- for ( var cli in ZeroClipboard_TableTools.clients )
- {
- if ( cli )
- {
- var client = ZeroClipboard_TableTools.clients[cli];
- if ( typeof client.domElement != 'undefined' &&
- client.domElement.parentNode == this.dom.container &&
- client.sized === false )
- {
- return true;
- }
- }
- }
- return false;
- },
-
-
- /**
- * Programmatically enable or disable the print view
- * @param {boolean} [bView=true] Show the print view if true or not given. If false, then
- * terminate the print view and return to normal.
- * @param {object} [oConfig={}] Configuration for the print view
- * @param {boolean} [oConfig.bShowAll=false] Show all rows in the table if true
- * @param {string} [oConfig.sInfo] Information message, displayed as an overlay to the
- * user to let them know what the print view is.
- * @param {string} [oConfig.sMessage] HTML string to show at the top of the document - will
- * be included in the printed document.
- */
- "fnPrint": function ( bView, oConfig )
- {
- if ( oConfig === undefined )
- {
- oConfig = {};
- }
-
- if ( bView === undefined || bView )
- {
- this._fnPrintStart( oConfig );
- }
- else
- {
- this._fnPrintEnd();
- }
- },
-
-
- /**
- * Show a message to the end user which is nicely styled
- * @param {string} message The HTML string to show to the user
- * @param {int} time The duration the message is to be shown on screen for (mS)
- */
- "fnInfo": function ( message, time ) {
- var nInfo = document.createElement( "div" );
- nInfo.className = this.classes.print.info;
- nInfo.innerHTML = message;
-
- document.body.appendChild( nInfo );
-
- setTimeout( function() {
- $(nInfo).fadeOut( "normal", function() {
- document.body.removeChild( nInfo );
- } );
- }, time );
- },
-
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Private methods (they are of course public in JS, but recommended as private)
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
- /**
- * Constructor logic
- * @method _fnConstruct
- * @param {Object} oOpts Same as TableTools constructor
- * @returns void
- * @private
- */
- "_fnConstruct": function ( oOpts )
- {
- var that = this;
-
- this._fnCustomiseSettings( oOpts );
-
- /* Container element */
- this.dom.container = document.createElement( this.s.tags.container );
- this.dom.container.className = this.classes.container;
-
- /* Row selection config */
- if ( this.s.select.type != 'none' )
- {
- this._fnRowSelectConfig();
- }
-
- /* Buttons */
- this._fnButtonDefinations( this.s.buttonSet, this.dom.container );
-
- /* Destructor */
- this.s.dt.aoDestroyCallback.push( {
- "sName": "TableTools",
- "fn": function () {
- $(that.s.dt.nTBody).off( 'click.DTTT_Select', 'tr' );
- $(that.dom.container).empty();
- }
- } );
- },
-
-
- /**
- * Take the user defined settings and the default settings and combine them.
- * @method _fnCustomiseSettings
- * @param {Object} oOpts Same as TableTools constructor
- * @returns void
- * @private
- */
- "_fnCustomiseSettings": function ( oOpts )
- {
- /* Is this the master control instance or not? */
- if ( typeof this.s.dt._TableToolsInit == 'undefined' )
- {
- this.s.master = true;
- this.s.dt._TableToolsInit = true;
- }
-
- /* We can use the table node from comparisons to group controls */
- this.dom.table = this.s.dt.nTable;
-
- /* Clone the defaults and then the user options */
- this.s.custom = $.extend( {}, TableTools.DEFAULTS, oOpts );
-
- /* Flash file location */
- this.s.swfPath = this.s.custom.sSwfPath;
- if ( typeof ZeroClipboard_TableTools != 'undefined' )
- {
- ZeroClipboard_TableTools.moviePath = this.s.swfPath;
- }
-
- /* Table row selecting */
- this.s.select.type = this.s.custom.sRowSelect;
- this.s.select.preRowSelect = this.s.custom.fnPreRowSelect;
- this.s.select.postSelected = this.s.custom.fnRowSelected;
- this.s.select.postDeselected = this.s.custom.fnRowDeselected;
-
- // Backwards compatibility - allow the user to specify a custom class in the initialiser
- if ( this.s.custom.sSelectedClass )
- {
- this.classes.select.row = this.s.custom.sSelectedClass;
- }
-
- this.s.tags = this.s.custom.oTags;
-
- /* Button set */
- this.s.buttonSet = this.s.custom.aButtons;
- },
-
-
- /**
- * Take the user input arrays and expand them to be fully defined, and then add them to a given
- * DOM element
- * @method _fnButtonDefinations
- * @param {array} buttonSet Set of user defined buttons
- * @param {node} wrapper Node to add the created buttons to
- * @returns void
- * @private
- */
- "_fnButtonDefinations": function ( buttonSet, wrapper )
- {
- var buttonDef;
-
- for ( var i=0, iLen=buttonSet.length ; i<iLen ; i++ )
- {
- if ( typeof buttonSet[i] == "string" )
- {
- if ( typeof TableTools.BUTTONS[ buttonSet[i] ] == 'undefined' )
- {
- alert( "TableTools: Warning - unknown button type: "+buttonSet[i] );
- continue;
- }
- buttonDef = $.extend( {}, TableTools.BUTTONS[ buttonSet[i] ], true );
- }
- else
- {
- if ( typeof TableTools.BUTTONS[ buttonSet[i].sExtends ] == 'undefined' )
- {
- alert( "TableTools: Warning - unknown button type: "+buttonSet[i].sExtends );
- continue;
- }
- var o = $.extend( {}, TableTools.BUTTONS[ buttonSet[i].sExtends ], true );
- buttonDef = $.extend( o, buttonSet[i], true );
- }
-
- wrapper.appendChild( this._fnCreateButton(
- buttonDef,
- $(wrapper).hasClass(this.classes.collection.container)
- ) );
- }
- },
-
-
- /**
- * Create and configure a TableTools button
- * @method _fnCreateButton
- * @param {Object} oConfig Button configuration object
- * @returns {Node} Button element
- * @private
- */
- "_fnCreateButton": function ( oConfig, bCollectionButton )
- {
- var nButton = this._fnButtonBase( oConfig, bCollectionButton );
-
- if ( oConfig.sAction.match(/flash/) )
- {
- this._fnFlashConfig( nButton, oConfig );
- }
- else if ( oConfig.sAction == "text" )
- {
- this._fnTextConfig( nButton, oConfig );
- }
- else if ( oConfig.sAction == "div" )
- {
- this._fnTextConfig( nButton, oConfig );
- }
- else if ( oConfig.sAction == "collection" )
- {
- this._fnTextConfig( nButton, oConfig );
- this._fnCollectionConfig( nButton, oConfig );
- }
-
- return nButton;
- },
-
-
- /**
- * Create the DOM needed for the button and apply some base properties. All buttons start here
- * @method _fnButtonBase
- * @param {o} oConfig Button configuration object
- * @returns {Node} DIV element for the button
- * @private
- */
- "_fnButtonBase": function ( o, bCollectionButton )
- {
- var sTag, sLiner, sClass;
-
- if ( bCollectionButton )
- {
- sTag = o.sTag !== "default" ? o.sTag : this.s.tags.collection.button;
- sLiner = o.sLinerTag !== "default" ? o.sLiner : this.s.tags.collection.liner;
- sClass = this.classes.collection.buttons.normal;
- }
- else
- {
- sTag = o.sTag !== "default" ? o.sTag : this.s.tags.button;
- sLiner = o.sLinerTag !== "default" ? o.sLiner : this.s.tags.liner;
- sClass = this.classes.buttons.normal;
- }
-
- var
- nButton = document.createElement( sTag ),
- nSpan = document.createElement( sLiner ),
- masterS = this._fnGetMasterSettings();
-
- nButton.className = sClass+" "+o.sButtonClass;
- nButton.setAttribute('id', "ToolTables_"+this.s.dt.sInstance+"_"+masterS.buttonCounter );
- nButton.appendChild( nSpan );
- nSpan.innerHTML = o.sButtonText;
-
- masterS.buttonCounter++;
-
- return nButton;
- },
-
-
- /**
- * Get the settings object for the master instance. When more than one TableTools instance is
- * assigned to a DataTable, only one of them can be the 'master' (for the select rows). As such,
- * we will typically want to interact with that master for global properties.
- * @method _fnGetMasterSettings
- * @returns {Object} TableTools settings object
- * @private
- */
- "_fnGetMasterSettings": function ()
- {
- if ( this.s.master )
- {
- return this.s;
- }
- else
- {
- /* Look for the master which has the same DT as this one */
- var instances = TableTools._aInstances;
- for ( var i=0, iLen=instances.length ; i<iLen ; i++ )
- {
- if ( this.dom.table == instances[i].s.dt.nTable )
- {
- return instances[i].s;
- }
- }
- }
- },
-
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Button collection functions
- */
-
- /**
- * Create a collection button, when activated will present a drop down list of other buttons
- * @param {Node} nButton Button to use for the collection activation
- * @param {Object} oConfig Button configuration object
- * @returns void
- * @private
- */
- "_fnCollectionConfig": function ( nButton, oConfig )
- {
- var nHidden = document.createElement( this.s.tags.collection.container );
- nHidden.style.display = "none";
- nHidden.className = this.classes.collection.container;
- oConfig._collection = nHidden;
- document.body.appendChild( nHidden );
-
- this._fnButtonDefinations( oConfig.aButtons, nHidden );
- },
-
-
- /**
- * Show a button collection
- * @param {Node} nButton Button to use for the collection
- * @param {Object} oConfig Button configuration object
- * @returns void
- * @private
- */
- "_fnCollectionShow": function ( nButton, oConfig )
- {
- var
- that = this,
- oPos = $(nButton).offset(),
- nHidden = oConfig._collection,
- iDivX = oPos.left,
- iDivY = oPos.top + $(nButton).outerHeight(),
- iWinHeight = $(window).height(), iDocHeight = $(document).height(),
- iWinWidth = $(window).width(), iDocWidth = $(document).width();
-
- nHidden.style.position = "absolute";
- nHidden.style.left = iDivX+"px";
- nHidden.style.top = iDivY+"px";
- nHidden.style.display = "block";
- $(nHidden).css('opacity',0);
-
- var nBackground = document.createElement('div');
- nBackground.style.position = "absolute";
- nBackground.style.left = "0px";
- nBackground.style.top = "0px";
- nBackground.style.height = ((iWinHeight>iDocHeight)? iWinHeight : iDocHeight) +"px";
- nBackground.style.width = ((iWinWidth>iDocWidth)? iWinWidth : iDocWidth) +"px";
- nBackground.className = this.classes.collection.background;
- $(nBackground).css('opacity',0);
-
- document.body.appendChild( nBackground );
- document.body.appendChild( nHidden );
-
- /* Visual corrections to try and keep the collection visible */
- var iDivWidth = $(nHidden).outerWidth();
- var iDivHeight = $(nHidden).outerHeight();
-
- if ( iDivX + iDivWidth > iDocWidth )
- {
- nHidden.style.left = (iDocWidth-iDivWidth)+"px";
- }
-
- if ( iDivY + iDivHeight > iDocHeight )
- {
- nHidden.style.top = (iDivY-iDivHeight-$(nButton).outerHeight())+"px";
- }
-
- this.dom.collection.collection = nHidden;
- this.dom.collection.background = nBackground;
-
- /* This results in a very small delay for the end user but it allows the animation to be
- * much smoother. If you don't want the animation, then the setTimeout can be removed
- */
- setTimeout( function () {
- $(nHidden).animate({"opacity": 1}, 500);
- $(nBackground).animate({"opacity": 0.25}, 500);
- }, 10 );
-
- /* Resize the buttons to the Flash contents fit */
- this.fnResizeButtons();
-
- /* Event handler to remove the collection display */
- $(nBackground).click( function () {
- that._fnCollectionHide.call( that, null, null );
- } );
- },
-
-
- /**
- * Hide a button collection
- * @param {Node} nButton Button to use for the collection
- * @param {Object} oConfig Button configuration object
- * @returns void
- * @private
- */
- "_fnCollectionHide": function ( nButton, oConfig )
- {
- if ( oConfig !== null && oConfig.sExtends == 'collection' )
- {
- return;
- }
-
- if ( this.dom.collection.collection !== null )
- {
- $(this.dom.collection.collection).animate({"opacity": 0}, 500, function (e) {
- this.style.display = "none";
- } );
-
- $(this.dom.collection.background).animate({"opacity": 0}, 500, function (e) {
- this.parentNode.removeChild( this );
- } );
-
- this.dom.collection.collection = null;
- this.dom.collection.background = null;
- }
- },
-
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Row selection functions
- */
-
- /**
- * Add event handlers to a table to allow for row selection
- * @method _fnRowSelectConfig
- * @returns void
- * @private
- */
- "_fnRowSelectConfig": function ()
- {
- if ( this.s.master )
- {
- var
- that = this,
- i, iLen,
- dt = this.s.dt,
- aoOpenRows = this.s.dt.aoOpenRows;
-
- $(dt.nTable).addClass( this.classes.select.table );
-
- $(dt.nTBody).on( 'click.DTTT_Select', 'tr', function(e) {
- /* Sub-table must be ignored (odd that the selector won't do this with >) */
- if ( this.parentNode != dt.nTBody )
- {
- return;
- }
-
- /* Check that we are actually working with a DataTables controlled row */
- if ( dt.oInstance.fnGetData(this) === null )
- {
- return;
- }
-
- if ( that.fnIsSelected( this ) )
- {
- that._fnRowDeselect( this, e );
- }
- else if ( that.s.select.type == "single" )
- {
- that.fnSelectNone();
- that._fnRowSelect( this, e );
- }
- else if ( that.s.select.type == "multi" )
- {
- that._fnRowSelect( this, e );
- }
- } );
-
- // Bind a listener to the DataTable for when new rows are created.
- // This allows rows to be visually selected when they should be and
- // deferred rendering is used.
- dt.oApi._fnCallbackReg( dt, 'aoRowCreatedCallback', function (tr, data, index) {
- if ( dt.aoData[index]._DTTT_selected ) {
- $(tr).addClass( that.classes.select.row );
- }
- }, 'TableTools-SelectAll' );
- }
- },
-
- /**
- * Select rows
- * @param {*} src Rows to select - see _fnSelectData for a description of valid inputs
- * @private
- */
- "_fnRowSelect": function ( src, e )
- {
- var
- that = this,
- data = this._fnSelectData( src ),
- firstTr = data.length===0 ? null : data[0].nTr,
- anSelected = [],
- i, len;
-
- // Get all the rows that will be selected
- for ( i=0, len=data.length ; i<len ; i++ )
- {
- if ( data[i].nTr )
- {
- anSelected.push( data[i].nTr );
- }
- }
-
- // User defined pre-selection function
- if ( this.s.select.preRowSelect !== null && !this.s.select.preRowSelect.call(this, e, anSelected, true) )
- {
- return;
- }
-
- // Mark them as selected
- for ( i=0, len=data.length ; i<len ; i++ )
- {
- data[i]._DTTT_selected = true;
-
- if ( data[i].nTr )
- {
- $(data[i].nTr).addClass( that.classes.select.row );
- }
- }
-
- // Post-selection function
- if ( this.s.select.postSelected !== null )
- {
- this.s.select.postSelected.call( this, anSelected );
- }
-
- TableTools._fnEventDispatch( this, 'select', anSelected, true );
- },
-
- /**
- * Deselect rows
- * @param {*} src Rows to deselect - see _fnSelectData for a description of valid inputs
- * @private
- */
- "_fnRowDeselect": function ( src, e )
- {
- var
- that = this,
- data = this._fnSelectData( src ),
- firstTr = data.length===0 ? null : data[0].nTr,
- anDeselectedTrs = [],
- i, len;
-
- // Get all the rows that will be deselected
- for ( i=0, len=data.length ; i<len ; i++ )
- {
- if ( data[i].nTr )
- {
- anDeselectedTrs.push( data[i].nTr );
- }
- }
-
- // User defined pre-selection function
- if ( this.s.select.preRowSelect !== null && !this.s.select.preRowSelect.call(this, e, anDeselectedTrs, false) )
- {
- return;
- }
-
- // Mark them as deselected
- for ( i=0, len=data.length ; i<len ; i++ )
- {
- data[i]._DTTT_selected = false;
-
- if ( data[i].nTr )
- {
- $(data[i].nTr).removeClass( that.classes.select.row );
- }
- }
-
- // Post-deselection function
- if ( this.s.select.postDeselected !== null )
- {
- this.s.select.postDeselected.call( this, anDeselectedTrs );
- }
-
- TableTools._fnEventDispatch( this, 'select', anDeselectedTrs, false );
- },
-
- /**
- * Take a data source for row selection and convert it into aoData points for the DT
- * @param {*} src Can be a single DOM TR node, an array of TR nodes (including a
- * a jQuery object), a single aoData point from DataTables, an array of aoData
- * points or an array of aoData indexes
- * @returns {array} An array of aoData points
- */
- "_fnSelectData": function ( src )
- {
- var out = [], pos, i, iLen;
-
- if ( src.nodeName )
- {
- // Single node
- pos = this.s.dt.oInstance.fnGetPosition( src );
- out.push( this.s.dt.aoData[pos] );
- }
- else if ( typeof src.length !== 'undefined' )
- {
- // jQuery object or an array of nodes, or aoData points
- for ( i=0, iLen=src.length ; i<iLen ; i++ )
- {
- if ( src[i].nodeName )
- {
- pos = this.s.dt.oInstance.fnGetPosition( src[i] );
- out.push( this.s.dt.aoData[pos] );
- }
- else if ( typeof src[i] === 'number' )
- {
- out.push( this.s.dt.aoData[ src[i] ] );
- }
- else
- {
- out.push( src[i] );
- }
- }
-
- return out;
- }
- else
- {
- // A single aoData point
- out.push( src );
- }
-
- return out;
- },
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Text button functions
- */
-
- /**
- * Configure a text based button for interaction events
- * @method _fnTextConfig
- * @param {Node} nButton Button element which is being considered
- * @param {Object} oConfig Button configuration object
- * @returns void
- * @private
- */
- "_fnTextConfig": function ( nButton, oConfig )
- {
- var that = this;
-
- if ( oConfig.fnInit !== null )
- {
- oConfig.fnInit.call( this, nButton, oConfig );
- }
-
- if ( oConfig.sToolTip !== "" )
- {
- nButton.title = oConfig.sToolTip;
- }
-
- $(nButton).hover( function () {
- if ( oConfig.fnMouseover !== null )
- {
- oConfig.fnMouseover.call( this, nButton, oConfig, null );
- }
- }, function () {
- if ( oConfig.fnMouseout !== null )
- {
- oConfig.fnMouseout.call( this, nButton, oConfig, null );
- }
- } );
-
- if ( oConfig.fnSelect !== null )
- {
- TableTools._fnEventListen( this, 'select', function (n) {
- oConfig.fnSelect.call( that, nButton, oConfig, n );
- } );
- }
-
- $(nButton).click( function (e) {
- //e.preventDefault();
-
- if ( oConfig.fnClick !== null )
- {
- oConfig.fnClick.call( that, nButton, oConfig, null, e );
- }
-
- /* Provide a complete function to match the behaviour of the flash elements */
- if ( oConfig.fnComplete !== null )
- {
- oConfig.fnComplete.call( that, nButton, oConfig, null, null );
- }
-
- that._fnCollectionHide( nButton, oConfig );
- } );
- },
-
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Flash button functions
- */
-
- /**
- * Configure a flash based button for interaction events
- * @method _fnFlashConfig
- * @param {Node} nButton Button element which is being considered
- * @param {o} oConfig Button configuration object
- * @returns void
- * @private
- */
- "_fnFlashConfig": function ( nButton, oConfig )
- {
- var that = this;
- var flash = new ZeroClipboard_TableTools.Client();
-
- if ( oConfig.fnInit !== null )
- {
- oConfig.fnInit.call( this, nButton, oConfig );
- }
-
- flash.setHandCursor( true );
-
- if ( oConfig.sAction == "flash_save" )
- {
- flash.setAction( 'save' );
- flash.setCharSet( (oConfig.sCharSet=="utf16le") ? 'UTF16LE' : 'UTF8' );
- flash.setBomInc( oConfig.bBomInc );
- flash.setFileName( oConfig.sFileName.replace('*', this.fnGetTitle(oConfig)) );
- }
- else if ( oConfig.sAction == "flash_pdf" )
- {
- flash.setAction( 'pdf' );
- flash.setFileName( oConfig.sFileName.replace('*', this.fnGetTitle(oConfig)) );
- }
- else
- {
- flash.setAction( 'copy' );
- }
-
- flash.addEventListener('mouseOver', function(client) {
- if ( oConfig.fnMouseover !== null )
- {
- oConfig.fnMouseover.call( that, nButton, oConfig, flash );
- }
- } );
-
- flash.addEventListener('mouseOut', function(client) {
- if ( oConfig.fnMouseout !== null )
- {
- oConfig.fnMouseout.call( that, nButton, oConfig, flash );
- }
- } );
-
- flash.addEventListener('mouseDown', function(client) {
- if ( oConfig.fnClick !== null )
- {
- oConfig.fnClick.call( that, nButton, oConfig, flash );
- }
- } );
-
- flash.addEventListener('complete', function (client, text) {
- if ( oConfig.fnComplete !== null )
- {
- oConfig.fnComplete.call( that, nButton, oConfig, flash, text );
- }
- that._fnCollectionHide( nButton, oConfig );
- } );
-
- this._fnFlashGlue( flash, nButton, oConfig.sToolTip );
- },
-
-
- /**
- * Wait until the id is in the DOM before we "glue" the swf. Note that this function will call
- * itself (using setTimeout) until it completes successfully
- * @method _fnFlashGlue
- * @param {Object} clip Zero clipboard object
- * @param {Node} node node to glue swf to
- * @param {String} text title of the flash movie
- * @returns void
- * @private
- */
- "_fnFlashGlue": function ( flash, node, text )
- {
- var that = this;
- var id = node.getAttribute('id');
-
- if ( document.getElementById(id) )
- {
- flash.glue( node, text );
- }
- else
- {
- setTimeout( function () {
- that._fnFlashGlue( flash, node, text );
- }, 100 );
- }
- },
-
-
- /**
- * Set the text for the flash clip to deal with
- *
- * This function is required for large information sets. There is a limit on the
- * amount of data that can be transferred between Javascript and Flash in a single call, so
- * we use this method to build up the text in Flash by sending over chunks. It is estimated
- * that the data limit is around 64k, although it is undocumented, and appears to be different
- * between different flash versions. We chunk at 8KiB.
- * @method _fnFlashSetText
- * @param {Object} clip the ZeroClipboard object
- * @param {String} sData the data to be set
- * @returns void
- * @private
- */
- "_fnFlashSetText": function ( clip, sData )
- {
- var asData = this._fnChunkData( sData, 8192 );
-
- clip.clearText();
- for ( var i=0, iLen=asData.length ; i<iLen ; i++ )
- {
- clip.appendText( asData[i] );
- }
- },
-
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Data retrieval functions
- */
-
- /**
- * Convert the mixed columns variable into a boolean array the same size as the columns, which
- * indicates which columns we want to include
- * @method _fnColumnTargets
- * @param {String|Array} mColumns The columns to be included in data retrieval. If a string
- * then it can take the value of "visible" or "hidden" (to include all visible or
- * hidden columns respectively). Or an array of column indexes
- * @returns {Array} A boolean array the length of the columns of the table, which each value
- * indicating if the column is to be included or not
- * @private
- */
- "_fnColumnTargets": function ( mColumns )
- {
- var aColumns = [];
- var dt = this.s.dt;
-
- if ( typeof mColumns == "object" )
- {
- for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ )
- {
- aColumns.push( false );
- }
-
- for ( i=0, iLen=mColumns.length ; i<iLen ; i++ )
- {
- aColumns[ mColumns[i] ] = true;
- }
- }
- else if ( mColumns == "visible" )
- {
- for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ )
- {
- aColumns.push( dt.aoColumns[i].bVisible ? true : false );
- }
- }
- else if ( mColumns == "hidden" )
- {
- for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ )
- {
- aColumns.push( dt.aoColumns[i].bVisible ? false : true );
- }
- }
- else if ( mColumns == "sortable" )
- {
- for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ )
- {
- aColumns.push( dt.aoColumns[i].bSortable ? true : false );
- }
- }
- else /* all */
- {
- for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ )
- {
- aColumns.push( true );
- }
- }
-
- return aColumns;
- },
-
-
- /**
- * New line character(s) depend on the platforms
- * @method method
- * @param {Object} oConfig Button configuration object - only interested in oConfig.sNewLine
- * @returns {String} Newline character
- */
- "_fnNewline": function ( oConfig )
- {
- if ( oConfig.sNewLine == "auto" )
- {
- return navigator.userAgent.match(/Windows/) ? "\r\n" : "\n";
- }
- else
- {
- return oConfig.sNewLine;
- }
- },
-
-
- /**
- * Get data from DataTables' internals and format it for output
- * @method _fnGetDataTablesData
- * @param {Object} oConfig Button configuration object
- * @param {String} oConfig.sFieldBoundary Field boundary for the data cells in the string
- * @param {String} oConfig.sFieldSeperator Field separator for the data cells
- * @param {String} oConfig.sNewline New line options
- * @param {Mixed} oConfig.mColumns Which columns should be included in the output
- * @param {Boolean} oConfig.bHeader Include the header
- * @param {Boolean} oConfig.bFooter Include the footer
- * @param {Boolean} oConfig.bSelectedOnly Include only the selected rows in the output
- * @returns {String} Concatenated string of data
- * @private
- */
- "_fnGetDataTablesData": function ( oConfig )
- {
- var i, iLen, j, jLen;
- var aRow, aData=[], sLoopData='', arr;
- var dt = this.s.dt, tr, child;
- var regex = new RegExp(oConfig.sFieldBoundary, "g"); /* Do it here for speed */
- var aColumnsInc = this._fnColumnTargets( oConfig.mColumns );
- var bSelectedOnly = (typeof oConfig.bSelectedOnly != 'undefined') ? oConfig.bSelectedOnly : false;
-
- /*
- * Header
- */
- if ( oConfig.bHeader )
- {
- aRow = [];
-
- for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ )
- {
- if ( aColumnsInc[i] )
- {
- sLoopData = dt.aoColumns[i].sTitle.replace(/\n/g," ").replace( /<.*?>/g, "" ).replace(/^\s+|\s+$/g,"");
- sLoopData = this._fnHtmlDecode( sLoopData );
-
- aRow.push( this._fnBoundData( sLoopData, oConfig.sFieldBoundary, regex ) );
- }
- }
-
- aData.push( aRow.join(oConfig.sFieldSeperator) );
- }
-
- /*
- * Body
- */
- var aDataIndex = dt.aiDisplay;
- var aSelected = this.fnGetSelected();
- if ( this.s.select.type !== "none" && bSelectedOnly && aSelected.length !== 0 )
- {
- aDataIndex = [];
- for ( i=0, iLen=aSelected.length ; i<iLen ; i++ )
- {
- aDataIndex.push( dt.oInstance.fnGetPosition( aSelected[i] ) );
- }
- }
-
- for ( j=0, jLen=aDataIndex.length ; j<jLen ; j++ )
- {
- tr = dt.aoData[ aDataIndex[j] ].nTr;
- aRow = [];
-
- /* Columns */
- for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ )
- {
- if ( aColumnsInc[i] )
- {
- /* Convert to strings (with small optimisation) */
- var mTypeData = dt.oApi._fnGetCellData( dt, aDataIndex[j], i, 'display' );
- if ( oConfig.fnCellRender )
- {
- sLoopData = oConfig.fnCellRender( mTypeData, i, tr, aDataIndex[j] )+"";
- }
- else if ( typeof mTypeData == "string" )
- {
- /* Strip newlines, replace img tags with alt attr. and finally strip html... */
- sLoopData = mTypeData.replace(/\n/g," ");
- sLoopData =
- sLoopData.replace(/<img.*?\s+alt\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s>]+)).*?>/gi,
- '$1$2$3');
- sLoopData = sLoopData.replace( /<.*?>/g, "" );
- }
- else
- {
- sLoopData = mTypeData+"";
- }
-
- /* Trim and clean the data */
- sLoopData = sLoopData.replace(/^\s+/, '').replace(/\s+$/, '');
- sLoopData = this._fnHtmlDecode( sLoopData );
-
- /* Bound it and add it to the total data */
- aRow.push( this._fnBoundData( sLoopData, oConfig.sFieldBoundary, regex ) );
- }
- }
-
- aData.push( aRow.join(oConfig.sFieldSeperator) );
-
- /* Details rows from fnOpen */
- if ( oConfig.bOpenRows )
- {
- arr = $.grep(dt.aoOpenRows, function(o) { return o.nParent === tr; });
-
- if ( arr.length === 1 )
- {
- sLoopData = this._fnBoundData( $('td', arr[0].nTr).html(), oConfig.sFieldBoundary, regex );
- aData.push( sLoopData );
- }
- }
- }
-
- /*
- * Footer
- */
- if ( oConfig.bFooter && dt.nTFoot !== null )
- {
- aRow = [];
-
- for ( i=0, iLen=dt.aoColumns.length ; i<iLen ; i++ )
- {
- if ( aColumnsInc[i] && dt.aoColumns[i].nTf !== null )
- {
- sLoopData = dt.aoColumns[i].nTf.innerHTML.replace(/\n/g," ").replace( /<.*?>/g, "" );
- sLoopData = this._fnHtmlDecode( sLoopData );
-
- aRow.push( this._fnBoundData( sLoopData, oConfig.sFieldBoundary, regex ) );
- }
- }
-
- aData.push( aRow.join(oConfig.sFieldSeperator) );
- }
-
- _sLastData = aData.join( this._fnNewline(oConfig) );
- return _sLastData;
- },
-
-
- /**
- * Wrap data up with a boundary string
- * @method _fnBoundData
- * @param {String} sData data to bound
- * @param {String} sBoundary bounding char(s)
- * @param {RegExp} regex search for the bounding chars - constructed outside for efficiency
- * in the loop
- * @returns {String} bound data
- * @private
- */
- "_fnBoundData": function ( sData, sBoundary, regex )
- {
- if ( sBoundary === "" )
- {
- return sData;
- }
- else
- {
- return sBoundary + sData.replace(regex, sBoundary+sBoundary) + sBoundary;
- }
- },
-
-
- /**
- * Break a string up into an array of smaller strings
- * @method _fnChunkData
- * @param {String} sData data to be broken up
- * @param {Int} iSize chunk size
- * @returns {Array} String array of broken up text
- * @private
- */
- "_fnChunkData": function ( sData, iSize )
- {
- var asReturn = [];
- var iStrlen = sData.length;
-
- for ( var i=0 ; i<iStrlen ; i+=iSize )
- {
- if ( i+iSize < iStrlen )
- {
- asReturn.push( sData.substring( i, i+iSize ) );
- }
- else
- {
- asReturn.push( sData.substring( i, iStrlen ) );
- }
- }
-
- return asReturn;
- },
-
-
- /**
- * Decode HTML entities
- * @method _fnHtmlDecode
- * @param {String} sData encoded string
- * @returns {String} decoded string
- * @private
- */
- "_fnHtmlDecode": function ( sData )
- {
- if ( sData.indexOf('&') === -1 )
- {
- return sData;
- }
-
- var n = document.createElement('div');
-
- return sData.replace( /&([^\s]*);/g, function( match, match2 ) {
- if ( match.substr(1, 1) === '#' )
- {
- return String.fromCharCode( Number(match2.substr(1)) );
- }
- else
- {
- n.innerHTML = match;
- return n.childNodes[0].nodeValue;
- }
- } );
- },
-
-
-
- /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Printing functions
- */
-
- /**
- * Show print display
- * @method _fnPrintStart
- * @param {Event} e Event object
- * @param {Object} oConfig Button configuration object
- * @returns void
- * @private
- */
- "_fnPrintStart": function ( oConfig )
- {
- var that = this;
- var oSetDT = this.s.dt;
-
- /* Parse through the DOM hiding everything that isn't needed for the table */
- this._fnPrintHideNodes( oSetDT.nTable );
-
- /* Show the whole table */
- this.s.print.saveStart = oSetDT._iDisplayStart;
- this.s.print.saveLength = oSetDT._iDisplayLength;
-
- if ( oConfig.bShowAll )
- {
- oSetDT._iDisplayStart = 0;
- oSetDT._iDisplayLength = -1;
- oSetDT.oApi._fnCalculateEnd( oSetDT );
- oSetDT.oApi._fnDraw( oSetDT );
- }
-
- /* Adjust the display for scrolling which might be done by DataTables */
- if ( oSetDT.oScroll.sX !== "" || oSetDT.oScroll.sY !== "" )
- {
- this._fnPrintScrollStart( oSetDT );
-
- // If the table redraws while in print view, the DataTables scrolling
- // setup would hide the header, so we need to readd it on draw
- $(this.s.dt.nTable).bind('draw.DTTT_Print', function () {
- that._fnPrintScrollStart( oSetDT );
- } );
- }
-
- /* Remove the other DataTables feature nodes - but leave the table! and info div */
- var anFeature = oSetDT.aanFeatures;
- for ( var cFeature in anFeature )
- {
- if ( cFeature != 'i' && cFeature != 't' && cFeature.length == 1 )
- {
- for ( var i=0, iLen=anFeature[cFeature].length ; i<iLen ; i++ )
- {
- this.dom.print.hidden.push( {
- "node": anFeature[cFeature][i],
- "display": "block"
- } );
- anFeature[cFeature][i].style.display = "none";
- }
- }
- }
-
- /* Print class can be used for styling */
- $(document.body).addClass( this.classes.print.body );
-
- /* Show information message to let the user know what is happening */
- if ( oConfig.sInfo !== "" )
- {
- this.fnInfo( oConfig.sInfo, 3000 );
- }
-
- /* Add a message at the top of the page */
- if ( oConfig.sMessage )
- {
- this.dom.print.message = document.createElement( "div" );
- this.dom.print.message.className = this.classes.print.message;
- this.dom.print.message.innerHTML = oConfig.sMessage;
- document.body.insertBefore( this.dom.print.message, document.body.childNodes[0] );
- }
-
- /* Cache the scrolling and the jump to the top of the page */
- this.s.print.saveScroll = $(window).scrollTop();
- window.scrollTo( 0, 0 );
-
- /* Bind a key event listener to the document for the escape key -
- * it is removed in the callback
- */
- $(document).bind( "keydown.DTTT", function(e) {
- /* Only interested in the escape key */
- if ( e.keyCode == 27 )
- {
- e.preventDefault();
- that._fnPrintEnd.call( that, e );
- }
- } );
- },
-
-
- /**
- * Printing is finished, resume normal display
- * @method _fnPrintEnd
- * @param {Event} e Event object
- * @returns void
- * @private
- */
- "_fnPrintEnd": function ( e )
- {
- var that = this;
- var oSetDT = this.s.dt;
- var oSetPrint = this.s.print;
- var oDomPrint = this.dom.print;
-
- /* Show all hidden nodes */
- this._fnPrintShowNodes();
-
- /* Restore DataTables' scrolling */
- if ( oSetDT.oScroll.sX !== "" || oSetDT.oScroll.sY !== "" )
- {
- $(this.s.dt.nTable).unbind('draw.DTTT_Print');
-
- this._fnPrintScrollEnd();
- }
-
- /* Restore the scroll */
- window.scrollTo( 0, oSetPrint.saveScroll );
-
- /* Drop the print message */
- if ( oDomPrint.message !== null )
- {
- document.body.removeChild( oDomPrint.message );
- oDomPrint.message = null;
- }
-
- /* Styling class */
- $(document.body).removeClass( 'DTTT_Print' );
-
- /* Restore the table length */
- oSetDT._iDisplayStart = oSetPrint.saveStart;
- oSetDT._iDisplayLength = oSetPrint.saveLength;
- oSetDT.oApi._fnCalculateEnd( oSetDT );
- oSetDT.oApi._fnDraw( oSetDT );
-
- $(document).unbind( "keydown.DTTT" );
- },
-
-
- /**
- * Take account of scrolling in DataTables by showing the full table
- * @returns void
- * @private
- */
- "_fnPrintScrollStart": function ()
- {
- var
- oSetDT = this.s.dt,
- nScrollHeadInner = oSetDT.nScrollHead.getElementsByTagName('div')[0],
- nScrollHeadTable = nScrollHeadInner.getElementsByTagName('table')[0],
- nScrollBody = oSetDT.nTable.parentNode;
-
- /* Copy the header in the thead in the body table, this way we show one single table when
- * in print view. Note that this section of code is more or less verbatim from DT 1.7.0
- */
- var nTheadSize = oSetDT.nTable.getElementsByTagName('thead');
- if ( nTheadSize.length > 0 )
- {
- oSetDT.nTable.removeChild( nTheadSize[0] );
- }
-
- if ( oSetDT.nTFoot !== null )
- {
- var nTfootSize = oSetDT.nTable.getElementsByTagName('tfoot');
- if ( nTfootSize.length > 0 )
- {
- oSetDT.nTable.removeChild( nTfootSize[0] );
- }
- }
-
- nTheadSize = oSetDT.nTHead.cloneNode(true);
- oSetDT.nTable.insertBefore( nTheadSize, oSetDT.nTable.childNodes[0] );
-
- if ( oSetDT.nTFoot !== null )
- {
- nTfootSize = oSetDT.nTFoot.cloneNode(true);
- oSetDT.nTable.insertBefore( nTfootSize, oSetDT.nTable.childNodes[1] );
- }
-
- /* Now adjust the table's viewport so we can actually see it */
- if ( oSetDT.oScroll.sX !== "" )
- {
- oSetDT.nTable.style.width = $(oSetDT.nTable).outerWidth()+"px";
- nScrollBody.style.width = $(oSetDT.nTable).outerWidth()+"px";
- nScrollBody.style.overflow = "visible";
- }
-
- if ( oSetDT.oScroll.sY !== "" )
- {
- nScrollBody.style.height = $(oSetDT.nTable).outerHeight()+"px";
- nScrollBody.style.overflow = "visible";
- }
- },
-
-
- /**
- * Take account of scrolling in DataTables by showing the full table. Note that the redraw of
- * the DataTable that we do will actually deal with the majority of the hard work here
- * @returns void
- * @private
- */
- "_fnPrintScrollEnd": function ()
- {
- var
- oSetDT = this.s.dt,
- nScrollBody = oSetDT.nTable.parentNode;
-
- if ( oSetDT.oScroll.sX !== "" )
- {
- nScrollBody.style.width = oSetDT.oApi._fnStringToCss( oSetDT.oScroll.sX );
- nScrollBody.style.overflow = "auto";
- }
-
- if ( oSetDT.oScroll.sY !== "" )
- {
- nScrollBody.style.height = oSetDT.oApi._fnStringToCss( oSetDT.oScroll.sY );
- nScrollBody.style.overflow = "auto";
- }
- },
-
-
- /**
- * Resume the display of all TableTools hidden nodes
- * @method _fnPrintShowNodes
- * @returns void
- * @private
- */
- "_fnPrintShowNodes": function ( )
- {
- var anHidden = this.dom.print.hidden;
-
- for ( var i=0, iLen=anHidden.length ; i<iLen ; i++ )
- {
- anHidden[i].node.style.display = anHidden[i].display;
- }
- anHidden.splice( 0, anHidden.length );
- },
-
-
- /**
- * Hide nodes which are not needed in order to display the table. Note that this function is
- * recursive
- * @method _fnPrintHideNodes
- * @param {Node} nNode Element which should be showing in a 'print' display
- * @returns void
- * @private
- */
- "_fnPrintHideNodes": function ( nNode )
- {
- var anHidden = this.dom.print.hidden;
-
- var nParent = nNode.parentNode;
- var nChildren = nParent.childNodes;
- for ( var i=0, iLen=nChildren.length ; i<iLen ; i++ )
- {
- if ( nChildren[i] != nNode && nChildren[i].nodeType == 1 )
- {
- /* If our node is shown (don't want to show nodes which were previously hidden) */
- var sDisplay = $(nChildren[i]).css("display");
- if ( sDisplay != "none" )
- {
- /* Cache the node and it's previous state so we can restore it */
- anHidden.push( {
- "node": nChildren[i],
- "display": sDisplay
- } );
- nChildren[i].style.display = "none";
- }
- }
- }
-
- if ( nParent.nodeName != "BODY" )
- {
- this._fnPrintHideNodes( nParent );
- }
- }
-};
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Static variables
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/**
- * Store of all instances that have been created of TableTools, so one can look up other (when
- * there is need of a master)
- * @property _aInstances
- * @type Array
- * @default []
- * @private
- */
-TableTools._aInstances = [];
-
-
-/**
- * Store of all listeners and their callback functions
- * @property _aListeners
- * @type Array
- * @default []
- */
-TableTools._aListeners = [];
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Static methods
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/**
- * Get an array of all the master instances
- * @method fnGetMasters
- * @returns {Array} List of master TableTools instances
- * @static
- */
-TableTools.fnGetMasters = function ()
-{
- var a = [];
- for ( var i=0, iLen=TableTools._aInstances.length ; i<iLen ; i++ )
- {
- if ( TableTools._aInstances[i].s.master )
- {
- a.push( TableTools._aInstances[i] );
- }
- }
- return a;
-};
-
-/**
- * Get the master instance for a table node (or id if a string is given)
- * @method fnGetInstance
- * @returns {Object} ID of table OR table node, for which we want the TableTools instance
- * @static
- */
-TableTools.fnGetInstance = function ( node )
-{
- if ( typeof node != 'object' )
- {
- node = document.getElementById(node);
- }
-
- for ( var i=0, iLen=TableTools._aInstances.length ; i<iLen ; i++ )
- {
- if ( TableTools._aInstances[i].s.master && TableTools._aInstances[i].dom.table == node )
- {
- return TableTools._aInstances[i];
- }
- }
- return null;
-};
-
-
-/**
- * Add a listener for a specific event
- * @method _fnEventListen
- * @param {Object} that Scope of the listening function (i.e. 'this' in the caller)
- * @param {String} type Event type
- * @param {Function} fn Function
- * @returns void
- * @private
- * @static
- */
-TableTools._fnEventListen = function ( that, type, fn )
-{
- TableTools._aListeners.push( {
- "that": that,
- "type": type,
- "fn": fn
- } );
-};
-
-
-/**
- * An event has occurred - look up every listener and fire it off. We check that the event we are
- * going to fire is attached to the same table (using the table node as reference) before firing
- * @method _fnEventDispatch
- * @param {Object} that Scope of the listening function (i.e. 'this' in the caller)
- * @param {String} type Event type
- * @param {Node} node Element that the event occurred on (may be null)
- * @param {boolean} [selected] Indicate if the node was selected (true) or deselected (false)
- * @returns void
- * @private
- * @static
- */
-TableTools._fnEventDispatch = function ( that, type, node, selected )
-{
- var listeners = TableTools._aListeners;
- for ( var i=0, iLen=listeners.length ; i<iLen ; i++ )
- {
- if ( that.dom.table == listeners[i].that.dom.table && listeners[i].type == type )
- {
- listeners[i].fn( node, selected );
- }
- }
-};
-
-
-
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Constants
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-
-
-TableTools.buttonBase = {
- // Button base
- "sAction": "text",
- "sTag": "default",
- "sLinerTag": "default",
- "sButtonClass": "DTTT_button_text",
- "sButtonText": "Button text",
- "sTitle": "",
- "sToolTip": "",
-
- // Common button specific options
- "sCharSet": "utf8",
- "bBomInc": false,
- "sFileName": "*.csv",
- "sFieldBoundary": "",
- "sFieldSeperator": "\t",
- "sNewLine": "auto",
- "mColumns": "all", /* "all", "visible", "hidden" or array of column integers */
- "bHeader": true,
- "bFooter": true,
- "bOpenRows": false,
- "bSelectedOnly": false,
-
- // Callbacks
- "fnMouseover": null,
- "fnMouseout": null,
- "fnClick": null,
- "fnSelect": null,
- "fnComplete": null,
- "fnInit": null,
- "fnCellRender": null
-};
-
-
-/**
- * @namespace Default button configurations
- */
-TableTools.BUTTONS = {
- "csv": $.extend( {}, TableTools.buttonBase, {
- "sAction": "flash_save",
- "sButtonClass": "DTTT_button_csv",
- "sButtonText": "CSV",
- "sFieldBoundary": '"',
- "sFieldSeperator": ",",
- "fnClick": function( nButton, oConfig, flash ) {
- this.fnSetText( flash, this.fnGetTableData(oConfig) );
- }
- } ),
-
- "xls": $.extend( {}, TableTools.buttonBase, {
- "sAction": "flash_save",
- "sCharSet": "utf16le",
- "bBomInc": true,
- "sButtonClass": "DTTT_button_xls",
- "sButtonText": "Excel",
- "fnClick": function( nButton, oConfig, flash ) {
- this.fnSetText( flash, this.fnGetTableData(oConfig) );
- }
- } ),
-
- "copy": $.extend( {}, TableTools.buttonBase, {
- "sAction": "flash_copy",
- "sButtonClass": "DTTT_button_copy",
- "sButtonText": "Copy",
- "fnClick": function( nButton, oConfig, flash ) {
- this.fnSetText( flash, this.fnGetTableData(oConfig) );
- },
- "fnComplete": function(nButton, oConfig, flash, text) {
- var
- lines = text.split('\n').length,
- len = this.s.dt.nTFoot === null ? lines-1 : lines-2,
- plural = (len==1) ? "" : "s";
- this.fnInfo( '<h6>Table copied</h6>'+
- '<p>Copied '+len+' row'+plural+' to the clipboard.</p>',
- 1500
- );
- }
- } ),
-
- "pdf": $.extend( {}, TableTools.buttonBase, {
- "sAction": "flash_pdf",
- "sNewLine": "\n",
- "sFileName": "*.pdf",
- "sButtonClass": "DTTT_button_pdf",
- "sButtonText": "PDF",
- "sPdfOrientation": "portrait",
- "sPdfSize": "A4",
- "sPdfMessage": "",
- "fnClick": function( nButton, oConfig, flash ) {
- this.fnSetText( flash,
- "title:"+ this.fnGetTitle(oConfig) +"\n"+
- "message:"+ oConfig.sPdfMessage +"\n"+
- "colWidth:"+ this.fnCalcColRatios(oConfig) +"\n"+
- "orientation:"+ oConfig.sPdfOrientation +"\n"+
- "size:"+ oConfig.sPdfSize +"\n"+
- "--/TableToolsOpts--\n" +
- this.fnGetTableData(oConfig)
- );
- }
- } ),
-
- "print": $.extend( {}, TableTools.buttonBase, {
- "sInfo": "<h6>Print view</h6><p>Please use your browser's print function to "+
- "print this table. Press escape when finished.",
- "sMessage": null,
- "bShowAll": true,
- "sToolTip": "View print view",
- "sButtonClass": "DTTT_button_print",
- "sButtonText": "Print",
- "fnClick": function ( nButton, oConfig ) {
- this.fnPrint( true, oConfig );
- }
- } ),
-
- "text": $.extend( {}, TableTools.buttonBase ),
-
- "select": $.extend( {}, TableTools.buttonBase, {
- "sButtonText": "Select button",
- "fnSelect": function( nButton, oConfig ) {
- if ( this.fnGetSelected().length !== 0 ) {
- $(nButton).removeClass( this.classes.buttons.disabled );
- } else {
- $(nButton).addClass( this.classes.buttons.disabled );
- }
- },
- "fnInit": function( nButton, oConfig ) {
- $(nButton).addClass( this.classes.buttons.disabled );
- }
- } ),
-
- "select_single": $.extend( {}, TableTools.buttonBase, {
- "sButtonText": "Select button",
- "fnSelect": function( nButton, oConfig ) {
- var iSelected = this.fnGetSelected().length;
- if ( iSelected == 1 ) {
- $(nButton).removeClass( this.classes.buttons.disabled );
- } else {
- $(nButton).addClass( this.classes.buttons.disabled );
- }
- },
- "fnInit": function( nButton, oConfig ) {
- $(nButton).addClass( this.classes.buttons.disabled );
- }
- } ),
-
- "select_all": $.extend( {}, TableTools.buttonBase, {
- "sButtonText": "Select all",
- "fnClick": function( nButton, oConfig ) {
- this.fnSelectAll();
- },
- "fnSelect": function( nButton, oConfig ) {
- if ( this.fnGetSelected().length == this.s.dt.fnRecordsDisplay() ) {
- $(nButton).addClass( this.classes.buttons.disabled );
- } else {
- $(nButton).removeClass( this.classes.buttons.disabled );
- }
- }
- } ),
-
- "select_none": $.extend( {}, TableTools.buttonBase, {
- "sButtonText": "Deselect all",
- "fnClick": function( nButton, oConfig ) {
- this.fnSelectNone();
- },
- "fnSelect": function( nButton, oConfig ) {
- if ( this.fnGetSelected().length !== 0 ) {
- $(nButton).removeClass( this.classes.buttons.disabled );
- } else {
- $(nButton).addClass( this.classes.buttons.disabled );
- }
- },
- "fnInit": function( nButton, oConfig ) {
- $(nButton).addClass( this.classes.buttons.disabled );
- }
- } ),
-
- "ajax": $.extend( {}, TableTools.buttonBase, {
- "sAjaxUrl": "/xhr.php",
- "sButtonText": "Ajax button",
- "fnClick": function( nButton, oConfig ) {
- var sData = this.fnGetTableData(oConfig);
- $.ajax( {
- "url": oConfig.sAjaxUrl,
- "data": [
- { "name": "tableData", "value": sData }
- ],
- "success": oConfig.fnAjaxComplete,
- "dataType": "json",
- "type": "POST",
- "cache": false,
- "error": function () {
- alert( "Error detected when sending table data to server" );
- }
- } );
- },
- "fnAjaxComplete": function( json ) {
- alert( 'Ajax complete' );
- }
- } ),
-
- "div": $.extend( {}, TableTools.buttonBase, {
- "sAction": "div",
- "sTag": "div",
- "sButtonClass": "DTTT_nonbutton",
- "sButtonText": "Text button"
- } ),
-
- "collection": $.extend( {}, TableTools.buttonBase, {
- "sAction": "collection",
- "sButtonClass": "DTTT_button_collection",
- "sButtonText": "Collection",
- "fnClick": function( nButton, oConfig ) {
- this._fnCollectionShow(nButton, oConfig);
- }
- } )
-};
-/*
- * on* callback parameters:
- * 1. node - button element
- * 2. object - configuration object for this button
- * 3. object - ZeroClipboard reference (flash button only)
- * 4. string - Returned string from Flash (flash button only - and only on 'complete')
- */
-
-
-
-/**
- * @namespace Classes used by TableTools - allows the styles to be override easily.
- * Note that when TableTools initialises it will take a copy of the classes object
- * and will use its internal copy for the remainder of its run time.
- */
-TableTools.classes = {
- "container": "DTTT_container",
- "buttons": {
- "normal": "DTTT_button",
- "disabled": "DTTT_disabled"
- },
- "collection": {
- "container": "DTTT_collection",
- "background": "DTTT_collection_background",
- "buttons": {
- "normal": "DTTT_button",
- "disabled": "DTTT_disabled"
- }
- },
- "select": {
- "table": "DTTT_selectable",
- "row": "DTTT_selected"
- },
- "print": {
- "body": "DTTT_Print",
- "info": "DTTT_print_info",
- "message": "DTTT_PrintMessage"
- }
-};
-
-
-/**
- * @namespace ThemeRoller classes - built in for compatibility with DataTables'
- * bJQueryUI option.
- */
-TableTools.classes_themeroller = {
- "container": "DTTT_container ui-buttonset ui-buttonset-multi",
- "buttons": {
- "normal": "DTTT_button ui-button ui-state-default"
- },
- "collection": {
- "container": "DTTT_collection ui-buttonset ui-buttonset-multi"
- }
-};
-
-
-/**
- * @namespace TableTools default settings for initialisation
- */
-TableTools.DEFAULTS = {
- "sSwfPath": "media/swf/copy_csv_xls_pdf.swf",
- "sRowSelect": "none",
- "sSelectedClass": null,
- "fnPreRowSelect": null,
- "fnRowSelected": null,
- "fnRowDeselected": null,
- "aButtons": [ "copy", "csv", "xls", "pdf", "print" ],
- "oTags": {
- "container": "div",
- "button": "a", // We really want to use buttons here, but Firefox and IE ignore the
- // click on the Flash element in the button (but not mouse[in|out]).
- "liner": "span",
- "collection": {
- "container": "div",
- "button": "a",
- "liner": "span"
- }
- }
-};
-
-
-/**
- * Name of this class
- * @constant CLASS
- * @type String
- * @default TableTools
- */
-TableTools.prototype.CLASS = "TableTools";
-
-
-/**
- * TableTools version
- * @constant VERSION
- * @type String
- * @default See code
- */
-TableTools.VERSION = "2.1.5";
-TableTools.prototype.VERSION = TableTools.VERSION;
-
-
-
-
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * Initialisation
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/*
- * Register a new feature with DataTables
- */
-if ( typeof $.fn.dataTable == "function" &&
- typeof $.fn.dataTableExt.fnVersionCheck == "function" &&
- $.fn.dataTableExt.fnVersionCheck('1.9.0') )
-{
- $.fn.dataTableExt.aoFeatures.push( {
- "fnInit": function( oDTSettings ) {
- var oOpts = typeof oDTSettings.oInit.oTableTools != 'undefined' ?
- oDTSettings.oInit.oTableTools : {};
-
- var oTT = new TableTools( oDTSettings.oInstance, oOpts );
- TableTools._aInstances.push( oTT );
-
- return oTT.dom.container;
- },
- "cFeature": "T",
- "sFeature": "TableTools"
- } );
-}
-else
-{
- alert( "Warning: TableTools 2 requires DataTables 1.9.0 or newer - www.datatables.net/download");
-}
-
-$.fn.DataTable.TableTools = TableTools;
-
-})(jQuery, window, document);
diff --git a/wqflask/wqflask/static/packages/TableTools/media/js/TableTools.min.js b/wqflask/wqflask/static/packages/TableTools/media/js/TableTools.min.js
deleted file mode 100644
index 1dd2298f..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/js/TableTools.min.js
+++ /dev/null
@@ -1,77 +0,0 @@
-// Simple Set Clipboard System
-// Author: Joseph Huckaby
-var ZeroClipboard_TableTools={version:"1.0.4-TableTools2",clients:{},moviePath:"",nextId:1,$:function(a){"string"==typeof a&&(a=document.getElementById(a));a.addClass||(a.hide=function(){this.style.display="none"},a.show=function(){this.style.display=""},a.addClass=function(a){this.removeClass(a);this.className+=" "+a},a.removeClass=function(a){this.className=this.className.replace(RegExp("\\s*"+a+"\\s*")," ").replace(/^\s+/,"").replace(/\s+$/,"")},a.hasClass=function(a){return!!this.className.match(RegExp("\\s*"+
-a+"\\s*"))});return a},setMoviePath:function(a){this.moviePath=a},dispatch:function(a,b,c){(a=this.clients[a])&&a.receiveEvent(b,c)},register:function(a,b){this.clients[a]=b},getDOMObjectPosition:function(a){var b={left:0,top:0,width:a.width?a.width:a.offsetWidth,height:a.height?a.height:a.offsetHeight};""!=a.style.width&&(b.width=a.style.width.replace("px",""));""!=a.style.height&&(b.height=a.style.height.replace("px",""));for(;a;)b.left+=a.offsetLeft,b.top+=a.offsetTop,a=a.offsetParent;return b},
-Client:function(a){this.handlers={};this.id=ZeroClipboard_TableTools.nextId++;this.movieId="ZeroClipboard_TableToolsMovie_"+this.id;ZeroClipboard_TableTools.register(this.id,this);a&&this.glue(a)}};
-ZeroClipboard_TableTools.Client.prototype={id:0,ready:!1,movie:null,clipText:"",fileName:"",action:"copy",handCursorEnabled:!0,cssEffects:!0,handlers:null,sized:!1,glue:function(a,b){this.domElement=ZeroClipboard_TableTools.$(a);var c=99;this.domElement.style.zIndex&&(c=parseInt(this.domElement.style.zIndex)+1);var d=ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement);this.div=document.createElement("div");var e=this.div.style;e.position="absolute";e.left="0px";e.top="0px";e.width=d.width+
-"px";e.height=d.height+"px";e.zIndex=c;"undefined"!=typeof b&&""!=b&&(this.div.title=b);0!=d.width&&0!=d.height&&(this.sized=!0);this.domElement&&(this.domElement.appendChild(this.div),this.div.innerHTML=this.getHTML(d.width,d.height))},positionElement:function(){var a=ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement),b=this.div.style;b.position="absolute";b.width=a.width+"px";b.height=a.height+"px";0!=a.width&&0!=a.height&&(this.sized=!0,b=this.div.childNodes[0],b.width=a.width,b.height=
-a.height)},getHTML:function(a,b){var c="",d="id="+this.id+"&width="+a+"&height="+b;if(navigator.userAgent.match(/MSIE/))var e=location.href.match(/^https/i)?"https://":"http://",c=c+('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="'+e+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="'+a+'" height="'+b+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+
-ZeroClipboard_TableTools.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+d+'"/><param name="wmode" value="transparent"/></object>');else c+='<embed id="'+this.movieId+'" src="'+ZeroClipboard_TableTools.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+a+'" height="'+b+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+
-d+'" wmode="transparent" />';return c},hide:function(){this.div&&(this.div.style.left="-2000px")},show:function(){this.reposition()},destroy:function(){if(this.domElement&&this.div){this.hide();this.div.innerHTML="";var a=document.getElementsByTagName("body")[0];try{a.removeChild(this.div)}catch(b){}this.div=this.domElement=null}},reposition:function(a){a&&((this.domElement=ZeroClipboard_TableTools.$(a))||this.hide());if(this.domElement&&this.div){var a=ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement),
-b=this.div.style;b.left=""+a.left+"px";b.top=""+a.top+"px"}},clearText:function(){this.clipText="";this.ready&&this.movie.clearText()},appendText:function(a){this.clipText+=a;this.ready&&this.movie.appendText(a)},setText:function(a){this.clipText=a;this.ready&&this.movie.setText(a)},setCharSet:function(a){this.charSet=a;this.ready&&this.movie.setCharSet(a)},setBomInc:function(a){this.incBom=a;this.ready&&this.movie.setBomInc(a)},setFileName:function(a){this.fileName=a;this.ready&&this.movie.setFileName(a)},
-setAction:function(a){this.action=a;this.ready&&this.movie.setAction(a)},addEventListener:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");this.handlers[a]||(this.handlers[a]=[]);this.handlers[a].push(b)},setHandCursor:function(a){this.handCursorEnabled=a;this.ready&&this.movie.setHandCursor(a)},setCSSEffects:function(a){this.cssEffects=!!a},receiveEvent:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");switch(a){case "load":this.movie=document.getElementById(this.movieId);
-if(!this.movie){var c=this;setTimeout(function(){c.receiveEvent("load",null)},1);return}if(!this.ready&&navigator.userAgent.match(/Firefox/)&&navigator.userAgent.match(/Windows/)){c=this;setTimeout(function(){c.receiveEvent("load",null)},100);this.ready=!0;return}this.ready=!0;this.movie.clearText();this.movie.appendText(this.clipText);this.movie.setFileName(this.fileName);this.movie.setAction(this.action);this.movie.setCharSet(this.charSet);this.movie.setBomInc(this.incBom);this.movie.setHandCursor(this.handCursorEnabled);
-break;case "mouseover":this.domElement&&this.cssEffects&&this.recoverActive&&this.domElement.addClass("active");break;case "mouseout":this.domElement&&this.cssEffects&&(this.recoverActive=!1,this.domElement.hasClass("active")&&(this.domElement.removeClass("active"),this.recoverActive=!0));break;case "mousedown":this.domElement&&this.cssEffects&&this.domElement.addClass("active");break;case "mouseup":this.domElement&&this.cssEffects&&(this.domElement.removeClass("active"),this.recoverActive=!1)}if(this.handlers[a])for(var d=
-0,e=this.handlers[a].length;d<e;d++){var f=this.handlers[a][d];if("function"==typeof f)f(this,b);else if("object"==typeof f&&2==f.length)f[0][f[1]](this,b);else if("string"==typeof f)window[f](this,b)}}};
-
-
-/*
- * File: TableTools.min.js
- * Version: 2.1.5
- * Author: Allan Jardine (www.sprymedia.co.uk)
- *
- * Copyright 2009-2012 Allan Jardine, all rights reserved.
- *
- * This source file is free software, under either the GPL v2 license or a
- * BSD (3 point) style license, as supplied with this software.
- *
- * This source file is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.
- */
-var TableTools;
-(function(e,n,g){TableTools=function(a,b){!this instanceof TableTools&&alert("Warning: TableTools must be initialised with the keyword 'new'");this.s={that:this,dt:a.fnSettings(),print:{saveStart:-1,saveLength:-1,saveScroll:-1,funcEnd:function(){}},buttonCounter:0,select:{type:"",selected:[],preRowSelect:null,postSelected:null,postDeselected:null,all:!1,selectedClass:""},custom:{},swfPath:"",buttonSet:[],master:!1,tags:{}};this.dom={container:null,table:null,print:{hidden:[],message:null},collection:{collection:null,
-background:null}};this.classes=e.extend(!0,{},TableTools.classes);this.s.dt.bJUI&&e.extend(!0,this.classes,TableTools.classes_themeroller);this.fnSettings=function(){return this.s};"undefined"==typeof b&&(b={});this._fnConstruct(b);return this};TableTools.prototype={fnGetSelected:function(a){var b=[],c=this.s.dt.aoData,d=this.s.dt.aiDisplay,f;if(a){a=0;for(f=d.length;a<f;a++)c[d[a]]._DTTT_selected&&b.push(c[d[a]].nTr)}else{a=0;for(f=c.length;a<f;a++)c[a]._DTTT_selected&&b.push(c[a].nTr)}return b},
-fnGetSelectedData:function(){var a=[],b=this.s.dt.aoData,c,d;c=0;for(d=b.length;c<d;c++)b[c]._DTTT_selected&&a.push(this.s.dt.oInstance.fnGetData(c));return a},fnIsSelected:function(a){a=this.s.dt.oInstance.fnGetPosition(a);return!0===this.s.dt.aoData[a]._DTTT_selected?!0:!1},fnSelectAll:function(a){var b=this._fnGetMasterSettings();this._fnRowSelect(!0===a?b.dt.aiDisplay:b.dt.aoData)},fnSelectNone:function(a){this._fnGetMasterSettings();this._fnRowDeselect(this.fnGetSelected(a))},fnSelect:function(a){"single"==
-this.s.select.type?(this.fnSelectNone(),this._fnRowSelect(a)):"multi"==this.s.select.type&&this._fnRowSelect(a)},fnDeselect:function(a){this._fnRowDeselect(a)},fnGetTitle:function(a){var b="";"undefined"!=typeof a.sTitle&&""!==a.sTitle?b=a.sTitle:(a=g.getElementsByTagName("title"),0<a.length&&(b=a[0].innerHTML));return 4>"\u00a1".toString().length?b.replace(/[^a-zA-Z0-9_\u00A1-\uFFFF\.,\-_ !\(\)]/g,""):b.replace(/[^a-zA-Z0-9_\.,\-_ !\(\)]/g,"")},fnCalcColRatios:function(a){var b=this.s.dt.aoColumns,
-a=this._fnColumnTargets(a.mColumns),c=[],d=0,f=0,e,g;e=0;for(g=a.length;e<g;e++)a[e]&&(d=b[e].nTh.offsetWidth,f+=d,c.push(d));e=0;for(g=c.length;e<g;e++)c[e]/=f;return c.join("\t")},fnGetTableData:function(a){if(this.s.dt)return this._fnGetDataTablesData(a)},fnSetText:function(a,b){this._fnFlashSetText(a,b)},fnResizeButtons:function(){for(var a in ZeroClipboard_TableTools.clients)if(a){var b=ZeroClipboard_TableTools.clients[a];"undefined"!=typeof b.domElement&&b.domElement.parentNode&&b.positionElement()}},
-fnResizeRequired:function(){for(var a in ZeroClipboard_TableTools.clients)if(a){var b=ZeroClipboard_TableTools.clients[a];if("undefined"!=typeof b.domElement&&b.domElement.parentNode==this.dom.container&&!1===b.sized)return!0}return!1},fnPrint:function(a,b){void 0===b&&(b={});void 0===a||a?this._fnPrintStart(b):this._fnPrintEnd()},fnInfo:function(a,b){var c=g.createElement("div");c.className=this.classes.print.info;c.innerHTML=a;g.body.appendChild(c);setTimeout(function(){e(c).fadeOut("normal",function(){g.body.removeChild(c)})},
-b)},_fnConstruct:function(a){var b=this;this._fnCustomiseSettings(a);this.dom.container=g.createElement(this.s.tags.container);this.dom.container.className=this.classes.container;"none"!=this.s.select.type&&this._fnRowSelectConfig();this._fnButtonDefinations(this.s.buttonSet,this.dom.container);this.s.dt.aoDestroyCallback.push({sName:"TableTools",fn:function(){e(b.s.dt.nTBody).off("click.DTTT_Select","tr");e(b.dom.container).empty()}})},_fnCustomiseSettings:function(a){"undefined"==typeof this.s.dt._TableToolsInit&&
-(this.s.master=!0,this.s.dt._TableToolsInit=!0);this.dom.table=this.s.dt.nTable;this.s.custom=e.extend({},TableTools.DEFAULTS,a);this.s.swfPath=this.s.custom.sSwfPath;"undefined"!=typeof ZeroClipboard_TableTools&&(ZeroClipboard_TableTools.moviePath=this.s.swfPath);this.s.select.type=this.s.custom.sRowSelect;this.s.select.preRowSelect=this.s.custom.fnPreRowSelect;this.s.select.postSelected=this.s.custom.fnRowSelected;this.s.select.postDeselected=this.s.custom.fnRowDeselected;this.s.custom.sSelectedClass&&
-(this.classes.select.row=this.s.custom.sSelectedClass);this.s.tags=this.s.custom.oTags;this.s.buttonSet=this.s.custom.aButtons},_fnButtonDefinations:function(a,b){for(var c,d=0,f=a.length;d<f;d++){if("string"==typeof a[d]){if("undefined"==typeof TableTools.BUTTONS[a[d]]){alert("TableTools: Warning - unknown button type: "+a[d]);continue}c=e.extend({},TableTools.BUTTONS[a[d]],!0)}else{if("undefined"==typeof TableTools.BUTTONS[a[d].sExtends]){alert("TableTools: Warning - unknown button type: "+a[d].sExtends);
-continue}c=e.extend({},TableTools.BUTTONS[a[d].sExtends],!0);c=e.extend(c,a[d],!0)}b.appendChild(this._fnCreateButton(c,e(b).hasClass(this.classes.collection.container)))}},_fnCreateButton:function(a,b){var c=this._fnButtonBase(a,b);a.sAction.match(/flash/)?this._fnFlashConfig(c,a):"text"==a.sAction?this._fnTextConfig(c,a):"div"==a.sAction?this._fnTextConfig(c,a):"collection"==a.sAction&&(this._fnTextConfig(c,a),this._fnCollectionConfig(c,a));return c},_fnButtonBase:function(a,b){var c,d,f;b?(c="default"!==
-a.sTag?a.sTag:this.s.tags.collection.button,d="default"!==a.sLinerTag?a.sLiner:this.s.tags.collection.liner,f=this.classes.collection.buttons.normal):(c="default"!==a.sTag?a.sTag:this.s.tags.button,d="default"!==a.sLinerTag?a.sLiner:this.s.tags.liner,f=this.classes.buttons.normal);c=g.createElement(c);d=g.createElement(d);var e=this._fnGetMasterSettings();c.className=f+" "+a.sButtonClass;c.setAttribute("id","ToolTables_"+this.s.dt.sInstance+"_"+e.buttonCounter);c.appendChild(d);d.innerHTML=a.sButtonText;
-e.buttonCounter++;return c},_fnGetMasterSettings:function(){if(this.s.master)return this.s;for(var a=TableTools._aInstances,b=0,c=a.length;b<c;b++)if(this.dom.table==a[b].s.dt.nTable)return a[b].s},_fnCollectionConfig:function(a,b){var c=g.createElement(this.s.tags.collection.container);c.style.display="none";c.className=this.classes.collection.container;b._collection=c;g.body.appendChild(c);this._fnButtonDefinations(b.aButtons,c)},_fnCollectionShow:function(a,b){var c=this,d=e(a).offset(),f=b._collection,
-j=d.left,d=d.top+e(a).outerHeight(),m=e(n).height(),h=e(g).height(),k=e(n).width(),o=e(g).width();f.style.position="absolute";f.style.left=j+"px";f.style.top=d+"px";f.style.display="block";e(f).css("opacity",0);var l=g.createElement("div");l.style.position="absolute";l.style.left="0px";l.style.top="0px";l.style.height=(m>h?m:h)+"px";l.style.width=(k>o?k:o)+"px";l.className=this.classes.collection.background;e(l).css("opacity",0);g.body.appendChild(l);g.body.appendChild(f);m=e(f).outerWidth();k=e(f).outerHeight();
-j+m>o&&(f.style.left=o-m+"px");d+k>h&&(f.style.top=d-k-e(a).outerHeight()+"px");this.dom.collection.collection=f;this.dom.collection.background=l;setTimeout(function(){e(f).animate({opacity:1},500);e(l).animate({opacity:0.25},500)},10);this.fnResizeButtons();e(l).click(function(){c._fnCollectionHide.call(c,null,null)})},_fnCollectionHide:function(a,b){!(null!==b&&"collection"==b.sExtends)&&null!==this.dom.collection.collection&&(e(this.dom.collection.collection).animate({opacity:0},500,function(){this.style.display=
-"none"}),e(this.dom.collection.background).animate({opacity:0},500,function(){this.parentNode.removeChild(this)}),this.dom.collection.collection=null,this.dom.collection.background=null)},_fnRowSelectConfig:function(){if(this.s.master){var a=this,b=this.s.dt;e(b.nTable).addClass(this.classes.select.table);e(b.nTBody).on("click.DTTT_Select","tr",function(c){this.parentNode==b.nTBody&&null!==b.oInstance.fnGetData(this)&&(a.fnIsSelected(this)?a._fnRowDeselect(this,c):"single"==a.s.select.type?(a.fnSelectNone(),
-a._fnRowSelect(this,c)):"multi"==a.s.select.type&&a._fnRowSelect(this,c))});b.oApi._fnCallbackReg(b,"aoRowCreatedCallback",function(c,d,f){b.aoData[f]._DTTT_selected&&e(c).addClass(a.classes.select.row)},"TableTools-SelectAll")}},_fnRowSelect:function(a,b){var c=this._fnSelectData(a),d=[],f,j;f=0;for(j=c.length;f<j;f++)c[f].nTr&&d.push(c[f].nTr);if(null===this.s.select.preRowSelect||this.s.select.preRowSelect.call(this,b,d,!0)){f=0;for(j=c.length;f<j;f++)c[f]._DTTT_selected=!0,c[f].nTr&&e(c[f].nTr).addClass(this.classes.select.row);
-null!==this.s.select.postSelected&&this.s.select.postSelected.call(this,d);TableTools._fnEventDispatch(this,"select",d,!0)}},_fnRowDeselect:function(a,b){var c=this._fnSelectData(a),d=[],f,j;f=0;for(j=c.length;f<j;f++)c[f].nTr&&d.push(c[f].nTr);if(null===this.s.select.preRowSelect||this.s.select.preRowSelect.call(this,b,d,!1)){f=0;for(j=c.length;f<j;f++)c[f]._DTTT_selected=!1,c[f].nTr&&e(c[f].nTr).removeClass(this.classes.select.row);null!==this.s.select.postDeselected&&this.s.select.postDeselected.call(this,
-d);TableTools._fnEventDispatch(this,"select",d,!1)}},_fnSelectData:function(a){var b=[],c,d,f;if(a.nodeName)c=this.s.dt.oInstance.fnGetPosition(a),b.push(this.s.dt.aoData[c]);else if("undefined"!==typeof a.length){d=0;for(f=a.length;d<f;d++)a[d].nodeName?(c=this.s.dt.oInstance.fnGetPosition(a[d]),b.push(this.s.dt.aoData[c])):"number"===typeof a[d]?b.push(this.s.dt.aoData[a[d]]):b.push(a[d])}else b.push(a);return b},_fnTextConfig:function(a,b){var c=this;null!==b.fnInit&&b.fnInit.call(this,a,b);""!==
-b.sToolTip&&(a.title=b.sToolTip);e(a).hover(function(){b.fnMouseover!==null&&b.fnMouseover.call(this,a,b,null)},function(){b.fnMouseout!==null&&b.fnMouseout.call(this,a,b,null)});null!==b.fnSelect&&TableTools._fnEventListen(this,"select",function(d){b.fnSelect.call(c,a,b,d)});e(a).click(function(d){b.fnClick!==null&&b.fnClick.call(c,a,b,null,d);b.fnComplete!==null&&b.fnComplete.call(c,a,b,null,null);c._fnCollectionHide(a,b)})},_fnFlashConfig:function(a,b){var c=this,d=new ZeroClipboard_TableTools.Client;
-null!==b.fnInit&&b.fnInit.call(this,a,b);d.setHandCursor(!0);"flash_save"==b.sAction?(d.setAction("save"),d.setCharSet("utf16le"==b.sCharSet?"UTF16LE":"UTF8"),d.setBomInc(b.bBomInc),d.setFileName(b.sFileName.replace("*",this.fnGetTitle(b)))):"flash_pdf"==b.sAction?(d.setAction("pdf"),d.setFileName(b.sFileName.replace("*",this.fnGetTitle(b)))):d.setAction("copy");d.addEventListener("mouseOver",function(){b.fnMouseover!==null&&b.fnMouseover.call(c,a,b,d)});d.addEventListener("mouseOut",function(){b.fnMouseout!==
-null&&b.fnMouseout.call(c,a,b,d)});d.addEventListener("mouseDown",function(){b.fnClick!==null&&b.fnClick.call(c,a,b,d)});d.addEventListener("complete",function(f,e){b.fnComplete!==null&&b.fnComplete.call(c,a,b,d,e);c._fnCollectionHide(a,b)});this._fnFlashGlue(d,a,b.sToolTip)},_fnFlashGlue:function(a,b,c){var d=this,f=b.getAttribute("id");g.getElementById(f)?a.glue(b,c):setTimeout(function(){d._fnFlashGlue(a,b,c)},100)},_fnFlashSetText:function(a,b){var c=this._fnChunkData(b,8192);a.clearText();for(var d=
-0,f=c.length;d<f;d++)a.appendText(c[d])},_fnColumnTargets:function(a){var b=[],c=this.s.dt;if("object"==typeof a){i=0;for(iLen=c.aoColumns.length;i<iLen;i++)b.push(!1);i=0;for(iLen=a.length;i<iLen;i++)b[a[i]]=!0}else if("visible"==a){i=0;for(iLen=c.aoColumns.length;i<iLen;i++)b.push(c.aoColumns[i].bVisible?!0:!1)}else if("hidden"==a){i=0;for(iLen=c.aoColumns.length;i<iLen;i++)b.push(c.aoColumns[i].bVisible?!1:!0)}else if("sortable"==a){i=0;for(iLen=c.aoColumns.length;i<iLen;i++)b.push(c.aoColumns[i].bSortable?
-!0:!1)}else{i=0;for(iLen=c.aoColumns.length;i<iLen;i++)b.push(!0)}return b},_fnNewline:function(a){return"auto"==a.sNewLine?navigator.userAgent.match(/Windows/)?"\r\n":"\n":a.sNewLine},_fnGetDataTablesData:function(a){var b,c,d,f,j,g=[],h="",k=this.s.dt,o,l=RegExp(a.sFieldBoundary,"g"),n=this._fnColumnTargets(a.mColumns);d="undefined"!=typeof a.bSelectedOnly?a.bSelectedOnly:!1;if(a.bHeader){j=[];b=0;for(c=k.aoColumns.length;b<c;b++)n[b]&&(h=k.aoColumns[b].sTitle.replace(/\n/g," ").replace(/<.*?>/g,
-"").replace(/^\s+|\s+$/g,""),h=this._fnHtmlDecode(h),j.push(this._fnBoundData(h,a.sFieldBoundary,l)));g.push(j.join(a.sFieldSeperator))}var p=k.aiDisplay;f=this.fnGetSelected();if("none"!==this.s.select.type&&d&&0!==f.length){p=[];b=0;for(c=f.length;b<c;b++)p.push(k.oInstance.fnGetPosition(f[b]))}d=0;for(f=p.length;d<f;d++){o=k.aoData[p[d]].nTr;j=[];b=0;for(c=k.aoColumns.length;b<c;b++)n[b]&&(h=k.oApi._fnGetCellData(k,p[d],b,"display"),a.fnCellRender?h=a.fnCellRender(h,b,o,p[d])+"":"string"==typeof h?
-(h=h.replace(/\n/g," "),h=h.replace(/<img.*?\s+alt\s*=\s*(?:"([^"]+)"|'([^']+)'|([^\s>]+)).*?>/gi,"$1$2$3"),h=h.replace(/<.*?>/g,"")):h+="",h=h.replace(/^\s+/,"").replace(/\s+$/,""),h=this._fnHtmlDecode(h),j.push(this._fnBoundData(h,a.sFieldBoundary,l)));g.push(j.join(a.sFieldSeperator));a.bOpenRows&&(b=e.grep(k.aoOpenRows,function(a){return a.nParent===o}),1===b.length&&(h=this._fnBoundData(e("td",b[0].nTr).html(),a.sFieldBoundary,l),g.push(h)))}if(a.bFooter&&null!==k.nTFoot){j=[];b=0;for(c=k.aoColumns.length;b<
-c;b++)n[b]&&null!==k.aoColumns[b].nTf&&(h=k.aoColumns[b].nTf.innerHTML.replace(/\n/g," ").replace(/<.*?>/g,""),h=this._fnHtmlDecode(h),j.push(this._fnBoundData(h,a.sFieldBoundary,l)));g.push(j.join(a.sFieldSeperator))}return _sLastData=g.join(this._fnNewline(a))},_fnBoundData:function(a,b,c){return""===b?a:b+a.replace(c,b+b)+b},_fnChunkData:function(a,b){for(var c=[],d=a.length,f=0;f<d;f+=b)f+b<d?c.push(a.substring(f,f+b)):c.push(a.substring(f,d));return c},_fnHtmlDecode:function(a){if(-1===a.indexOf("&"))return a;
-var b=g.createElement("div");return a.replace(/&([^\s]*);/g,function(a,d){if("#"===a.substr(1,1))return String.fromCharCode(Number(d.substr(1)));b.innerHTML=a;return b.childNodes[0].nodeValue})},_fnPrintStart:function(a){var b=this,c=this.s.dt;this._fnPrintHideNodes(c.nTable);this.s.print.saveStart=c._iDisplayStart;this.s.print.saveLength=c._iDisplayLength;a.bShowAll&&(c._iDisplayStart=0,c._iDisplayLength=-1,c.oApi._fnCalculateEnd(c),c.oApi._fnDraw(c));if(""!==c.oScroll.sX||""!==c.oScroll.sY)this._fnPrintScrollStart(c),
-e(this.s.dt.nTable).bind("draw.DTTT_Print",function(){b._fnPrintScrollStart(c)});var d=c.aanFeatures,f;for(f in d)if("i"!=f&&"t"!=f&&1==f.length)for(var j=0,m=d[f].length;j<m;j++)this.dom.print.hidden.push({node:d[f][j],display:"block"}),d[f][j].style.display="none";e(g.body).addClass(this.classes.print.body);""!==a.sInfo&&this.fnInfo(a.sInfo,3E3);a.sMessage&&(this.dom.print.message=g.createElement("div"),this.dom.print.message.className=this.classes.print.message,this.dom.print.message.innerHTML=
-a.sMessage,g.body.insertBefore(this.dom.print.message,g.body.childNodes[0]));this.s.print.saveScroll=e(n).scrollTop();n.scrollTo(0,0);e(g).bind("keydown.DTTT",function(a){if(a.keyCode==27){a.preventDefault();b._fnPrintEnd.call(b,a)}})},_fnPrintEnd:function(){var a=this.s.dt,b=this.s.print,c=this.dom.print;this._fnPrintShowNodes();if(""!==a.oScroll.sX||""!==a.oScroll.sY)e(this.s.dt.nTable).unbind("draw.DTTT_Print"),this._fnPrintScrollEnd();n.scrollTo(0,b.saveScroll);null!==c.message&&(g.body.removeChild(c.message),
-c.message=null);e(g.body).removeClass("DTTT_Print");a._iDisplayStart=b.saveStart;a._iDisplayLength=b.saveLength;a.oApi._fnCalculateEnd(a);a.oApi._fnDraw(a);e(g).unbind("keydown.DTTT")},_fnPrintScrollStart:function(){var a=this.s.dt;a.nScrollHead.getElementsByTagName("div")[0].getElementsByTagName("table");var b=a.nTable.parentNode,c=a.nTable.getElementsByTagName("thead");0<c.length&&a.nTable.removeChild(c[0]);null!==a.nTFoot&&(c=a.nTable.getElementsByTagName("tfoot"),0<c.length&&a.nTable.removeChild(c[0]));
-c=a.nTHead.cloneNode(!0);a.nTable.insertBefore(c,a.nTable.childNodes[0]);null!==a.nTFoot&&(c=a.nTFoot.cloneNode(!0),a.nTable.insertBefore(c,a.nTable.childNodes[1]));""!==a.oScroll.sX&&(a.nTable.style.width=e(a.nTable).outerWidth()+"px",b.style.width=e(a.nTable).outerWidth()+"px",b.style.overflow="visible");""!==a.oScroll.sY&&(b.style.height=e(a.nTable).outerHeight()+"px",b.style.overflow="visible")},_fnPrintScrollEnd:function(){var a=this.s.dt,b=a.nTable.parentNode;""!==a.oScroll.sX&&(b.style.width=
-a.oApi._fnStringToCss(a.oScroll.sX),b.style.overflow="auto");""!==a.oScroll.sY&&(b.style.height=a.oApi._fnStringToCss(a.oScroll.sY),b.style.overflow="auto")},_fnPrintShowNodes:function(){for(var a=this.dom.print.hidden,b=0,c=a.length;b<c;b++)a[b].node.style.display=a[b].display;a.splice(0,a.length)},_fnPrintHideNodes:function(a){for(var b=this.dom.print.hidden,c=a.parentNode,d=c.childNodes,f=0,g=d.length;f<g;f++)if(d[f]!=a&&1==d[f].nodeType){var m=e(d[f]).css("display");"none"!=m&&(b.push({node:d[f],
-display:m}),d[f].style.display="none")}"BODY"!=c.nodeName&&this._fnPrintHideNodes(c)}};TableTools._aInstances=[];TableTools._aListeners=[];TableTools.fnGetMasters=function(){for(var a=[],b=0,c=TableTools._aInstances.length;b<c;b++)TableTools._aInstances[b].s.master&&a.push(TableTools._aInstances[b]);return a};TableTools.fnGetInstance=function(a){"object"!=typeof a&&(a=g.getElementById(a));for(var b=0,c=TableTools._aInstances.length;b<c;b++)if(TableTools._aInstances[b].s.master&&TableTools._aInstances[b].dom.table==
-a)return TableTools._aInstances[b];return null};TableTools._fnEventListen=function(a,b,c){TableTools._aListeners.push({that:a,type:b,fn:c})};TableTools._fnEventDispatch=function(a,b,c,d){for(var f=TableTools._aListeners,e=0,g=f.length;e<g;e++)a.dom.table==f[e].that.dom.table&&f[e].type==b&&f[e].fn(c,d)};TableTools.buttonBase={sAction:"text",sTag:"default",sLinerTag:"default",sButtonClass:"DTTT_button_text",sButtonText:"Button text",sTitle:"",sToolTip:"",sCharSet:"utf8",bBomInc:!1,sFileName:"*.csv",
-sFieldBoundary:"",sFieldSeperator:"\t",sNewLine:"auto",mColumns:"all",bHeader:!0,bFooter:!0,bOpenRows:!1,bSelectedOnly:!1,fnMouseover:null,fnMouseout:null,fnClick:null,fnSelect:null,fnComplete:null,fnInit:null,fnCellRender:null};TableTools.BUTTONS={csv:e.extend({},TableTools.buttonBase,{sAction:"flash_save",sButtonClass:"DTTT_button_csv",sButtonText:"CSV",sFieldBoundary:'"',sFieldSeperator:",",fnClick:function(a,b,c){this.fnSetText(c,this.fnGetTableData(b))}}),xls:e.extend({},TableTools.buttonBase,
-{sAction:"flash_save",sCharSet:"utf16le",bBomInc:!0,sButtonClass:"DTTT_button_xls",sButtonText:"Excel",fnClick:function(a,b,c){this.fnSetText(c,this.fnGetTableData(b))}}),copy:e.extend({},TableTools.buttonBase,{sAction:"flash_copy",sButtonClass:"DTTT_button_copy",sButtonText:"Copy",fnClick:function(a,b,c){this.fnSetText(c,this.fnGetTableData(b))},fnComplete:function(a,b,c,d){a=d.split("\n").length;a=null===this.s.dt.nTFoot?a-1:a-2;this.fnInfo("<h6>Table copied</h6><p>Copied "+a+" row"+(1==a?"":"s")+
-" to the clipboard.</p>",1500)}}),pdf:e.extend({},TableTools.buttonBase,{sAction:"flash_pdf",sNewLine:"\n",sFileName:"*.pdf",sButtonClass:"DTTT_button_pdf",sButtonText:"PDF",sPdfOrientation:"portrait",sPdfSize:"A4",sPdfMessage:"",fnClick:function(a,b,c){this.fnSetText(c,"title:"+this.fnGetTitle(b)+"\nmessage:"+b.sPdfMessage+"\ncolWidth:"+this.fnCalcColRatios(b)+"\norientation:"+b.sPdfOrientation+"\nsize:"+b.sPdfSize+"\n--/TableToolsOpts--\n"+this.fnGetTableData(b))}}),print:e.extend({},TableTools.buttonBase,
-{sInfo:"<h6>Print view</h6><p>Please use your browser's print function to print this table. Press escape when finished.",sMessage:null,bShowAll:!0,sToolTip:"View print view",sButtonClass:"DTTT_button_print",sButtonText:"Print",fnClick:function(a,b){this.fnPrint(!0,b)}}),text:e.extend({},TableTools.buttonBase),select:e.extend({},TableTools.buttonBase,{sButtonText:"Select button",fnSelect:function(a){0!==this.fnGetSelected().length?e(a).removeClass(this.classes.buttons.disabled):e(a).addClass(this.classes.buttons.disabled)},
-fnInit:function(a){e(a).addClass(this.classes.buttons.disabled)}}),select_single:e.extend({},TableTools.buttonBase,{sButtonText:"Select button",fnSelect:function(a){1==this.fnGetSelected().length?e(a).removeClass(this.classes.buttons.disabled):e(a).addClass(this.classes.buttons.disabled)},fnInit:function(a){e(a).addClass(this.classes.buttons.disabled)}}),select_all:e.extend({},TableTools.buttonBase,{sButtonText:"Select all",fnClick:function(){this.fnSelectAll()},fnSelect:function(a){this.fnGetSelected().length==
-this.s.dt.fnRecordsDisplay()?e(a).addClass(this.classes.buttons.disabled):e(a).removeClass(this.classes.buttons.disabled)}}),select_none:e.extend({},TableTools.buttonBase,{sButtonText:"Deselect all",fnClick:function(){this.fnSelectNone()},fnSelect:function(a){0!==this.fnGetSelected().length?e(a).removeClass(this.classes.buttons.disabled):e(a).addClass(this.classes.buttons.disabled)},fnInit:function(a){e(a).addClass(this.classes.buttons.disabled)}}),ajax:e.extend({},TableTools.buttonBase,{sAjaxUrl:"/xhr.php",
-sButtonText:"Ajax button",fnClick:function(a,b){var c=this.fnGetTableData(b);e.ajax({url:b.sAjaxUrl,data:[{name:"tableData",value:c}],success:b.fnAjaxComplete,dataType:"json",type:"POST",cache:!1,error:function(){alert("Error detected when sending table data to server")}})},fnAjaxComplete:function(){alert("Ajax complete")}}),div:e.extend({},TableTools.buttonBase,{sAction:"div",sTag:"div",sButtonClass:"DTTT_nonbutton",sButtonText:"Text button"}),collection:e.extend({},TableTools.buttonBase,{sAction:"collection",
-sButtonClass:"DTTT_button_collection",sButtonText:"Collection",fnClick:function(a,b){this._fnCollectionShow(a,b)}})};TableTools.classes={container:"DTTT_container",buttons:{normal:"DTTT_button",disabled:"DTTT_disabled"},collection:{container:"DTTT_collection",background:"DTTT_collection_background",buttons:{normal:"DTTT_button",disabled:"DTTT_disabled"}},select:{table:"DTTT_selectable",row:"DTTT_selected"},print:{body:"DTTT_Print",info:"DTTT_print_info",message:"DTTT_PrintMessage"}};TableTools.classes_themeroller=
-{container:"DTTT_container ui-buttonset ui-buttonset-multi",buttons:{normal:"DTTT_button ui-button ui-state-default"},collection:{container:"DTTT_collection ui-buttonset ui-buttonset-multi"}};TableTools.DEFAULTS={sSwfPath:"media/swf/copy_csv_xls_pdf.swf",sRowSelect:"none",sSelectedClass:null,fnPreRowSelect:null,fnRowSelected:null,fnRowDeselected:null,aButtons:["copy","csv","xls","pdf","print"],oTags:{container:"div",button:"a",liner:"span",collection:{container:"div",button:"a",liner:"span"}}};TableTools.prototype.CLASS=
-"TableTools";TableTools.VERSION="2.1.5";TableTools.prototype.VERSION=TableTools.VERSION;"function"==typeof e.fn.dataTable&&"function"==typeof e.fn.dataTableExt.fnVersionCheck&&e.fn.dataTableExt.fnVersionCheck("1.9.0")?e.fn.dataTableExt.aoFeatures.push({fnInit:function(a){a=new TableTools(a.oInstance,"undefined"!=typeof a.oInit.oTableTools?a.oInit.oTableTools:{});TableTools._aInstances.push(a);return a.dom.container},cFeature:"T",sFeature:"TableTools"}):alert("Warning: TableTools 2 requires DataTables 1.9.0 or newer - www.datatables.net/download");
-e.fn.DataTable.TableTools=TableTools})(jQuery,window,document);
diff --git a/wqflask/wqflask/static/packages/TableTools/media/js/TableTools.min.js.gz b/wqflask/wqflask/static/packages/TableTools/media/js/TableTools.min.js.gz
deleted file mode 100644
index 01ce7c04..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/js/TableTools.min.js.gz
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/js/ZeroClipboard.js b/wqflask/wqflask/static/packages/TableTools/media/js/ZeroClipboard.js
deleted file mode 100644
index ff87ecd8..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/js/ZeroClipboard.js
+++ /dev/null
@@ -1,367 +0,0 @@
-// Simple Set Clipboard System
-// Author: Joseph Huckaby
-
-var ZeroClipboard_TableTools = {
-
- version: "1.0.4-TableTools2",
- clients: {}, // registered upload clients on page, indexed by id
- moviePath: '', // URL to movie
- nextId: 1, // ID of next movie
-
- $: function(thingy) {
- // simple DOM lookup utility function
- if (typeof(thingy) == 'string') thingy = document.getElementById(thingy);
- if (!thingy.addClass) {
- // extend element with a few useful methods
- thingy.hide = function() { this.style.display = 'none'; };
- thingy.show = function() { this.style.display = ''; };
- thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; };
- thingy.removeClass = function(name) {
- this.className = this.className.replace( new RegExp("\\s*" + name + "\\s*"), " ").replace(/^\s+/, '').replace(/\s+$/, '');
- };
- thingy.hasClass = function(name) {
- return !!this.className.match( new RegExp("\\s*" + name + "\\s*") );
- }
- }
- return thingy;
- },
-
- setMoviePath: function(path) {
- // set path to ZeroClipboard.swf
- this.moviePath = path;
- },
-
- dispatch: function(id, eventName, args) {
- // receive event from flash movie, send to client
- var client = this.clients[id];
- if (client) {
- client.receiveEvent(eventName, args);
- }
- },
-
- register: function(id, client) {
- // register new client to receive events
- this.clients[id] = client;
- },
-
- getDOMObjectPosition: function(obj) {
- // get absolute coordinates for dom element
- var info = {
- left: 0,
- top: 0,
- width: obj.width ? obj.width : obj.offsetWidth,
- height: obj.height ? obj.height : obj.offsetHeight
- };
-
- if ( obj.style.width != "" )
- info.width = obj.style.width.replace("px","");
-
- if ( obj.style.height != "" )
- info.height = obj.style.height.replace("px","");
-
- while (obj) {
- info.left += obj.offsetLeft;
- info.top += obj.offsetTop;
- obj = obj.offsetParent;
- }
-
- return info;
- },
-
- Client: function(elem) {
- // constructor for new simple upload client
- this.handlers = {};
-
- // unique ID
- this.id = ZeroClipboard_TableTools.nextId++;
- this.movieId = 'ZeroClipboard_TableToolsMovie_' + this.id;
-
- // register client with singleton to receive flash events
- ZeroClipboard_TableTools.register(this.id, this);
-
- // create movie
- if (elem) this.glue(elem);
- }
-};
-
-ZeroClipboard_TableTools.Client.prototype = {
-
- id: 0, // unique ID for us
- ready: false, // whether movie is ready to receive events or not
- movie: null, // reference to movie object
- clipText: '', // text to copy to clipboard
- fileName: '', // default file save name
- action: 'copy', // action to perform
- handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor
- cssEffects: true, // enable CSS mouse effects on dom container
- handlers: null, // user event handlers
- sized: false,
-
- glue: function(elem, title) {
- // glue to DOM element
- // elem can be ID or actual DOM element object
- this.domElement = ZeroClipboard_TableTools.$(elem);
-
- // float just above object, or zIndex 99 if dom element isn't set
- var zIndex = 99;
- if (this.domElement.style.zIndex) {
- zIndex = parseInt(this.domElement.style.zIndex) + 1;
- }
-
- // find X/Y position of domElement
- var box = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement);
-
- // create floating DIV above element
- this.div = document.createElement('div');
- var style = this.div.style;
- style.position = 'absolute';
- style.left = '0px';
- style.top = '0px';
- style.width = (box.width) + 'px';
- style.height = box.height + 'px';
- style.zIndex = zIndex;
-
- if ( typeof title != "undefined" && title != "" ) {
- this.div.title = title;
- }
- if ( box.width != 0 && box.height != 0 ) {
- this.sized = true;
- }
-
- // style.backgroundColor = '#f00'; // debug
- if ( this.domElement ) {
- this.domElement.appendChild(this.div);
- this.div.innerHTML = this.getHTML( box.width, box.height );
- }
- },
-
- positionElement: function() {
- var box = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement);
- var style = this.div.style;
-
- style.position = 'absolute';
- //style.left = (this.domElement.offsetLeft)+'px';
- //style.top = this.domElement.offsetTop+'px';
- style.width = box.width + 'px';
- style.height = box.height + 'px';
-
- if ( box.width != 0 && box.height != 0 ) {
- this.sized = true;
- } else {
- return;
- }
-
- var flash = this.div.childNodes[0];
- flash.width = box.width;
- flash.height = box.height;
- },
-
- getHTML: function(width, height) {
- // return HTML for movie
- var html = '';
- var flashvars = 'id=' + this.id +
- '&width=' + width +
- '&height=' + height;
-
- if (navigator.userAgent.match(/MSIE/)) {
- // IE gets an OBJECT tag
- var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';
- html += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="'+protocol+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0" width="'+width+'" height="'+height+'" id="'+this.movieId+'" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="'+ZeroClipboard_TableTools.moviePath+'" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="'+flashvars+'"/><param name="wmode" value="transparent"/></object>';
- }
- else {
- // all other browsers get an EMBED tag
- html += '<embed id="'+this.movieId+'" src="'+ZeroClipboard_TableTools.moviePath+'" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="'+width+'" height="'+height+'" name="'+this.movieId+'" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="'+flashvars+'" wmode="transparent" />';
- }
- return html;
- },
-
- hide: function() {
- // temporarily hide floater offscreen
- if (this.div) {
- this.div.style.left = '-2000px';
- }
- },
-
- show: function() {
- // show ourselves after a call to hide()
- this.reposition();
- },
-
- destroy: function() {
- // destroy control and floater
- if (this.domElement && this.div) {
- this.hide();
- this.div.innerHTML = '';
-
- var body = document.getElementsByTagName('body')[0];
- try { body.removeChild( this.div ); } catch(e) {;}
-
- this.domElement = null;
- this.div = null;
- }
- },
-
- reposition: function(elem) {
- // reposition our floating div, optionally to new container
- // warning: container CANNOT change size, only position
- if (elem) {
- this.domElement = ZeroClipboard_TableTools.$(elem);
- if (!this.domElement) this.hide();
- }
-
- if (this.domElement && this.div) {
- var box = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement);
- var style = this.div.style;
- style.left = '' + box.left + 'px';
- style.top = '' + box.top + 'px';
- }
- },
-
- clearText: function() {
- // clear the text to be copy / saved
- this.clipText = '';
- if (this.ready) this.movie.clearText();
- },
-
- appendText: function(newText) {
- // append text to that which is to be copied / saved
- this.clipText += newText;
- if (this.ready) { this.movie.appendText(newText) ;}
- },
-
- setText: function(newText) {
- // set text to be copied to be copied / saved
- this.clipText = newText;
- if (this.ready) { this.movie.setText(newText) ;}
- },
-
- setCharSet: function(charSet) {
- // set the character set (UTF16LE or UTF8)
- this.charSet = charSet;
- if (this.ready) { this.movie.setCharSet(charSet) ;}
- },
-
- setBomInc: function(bomInc) {
- // set if the BOM should be included or not
- this.incBom = bomInc;
- if (this.ready) { this.movie.setBomInc(bomInc) ;}
- },
-
- setFileName: function(newText) {
- // set the file name
- this.fileName = newText;
- if (this.ready) this.movie.setFileName(newText);
- },
-
- setAction: function(newText) {
- // set action (save or copy)
- this.action = newText;
- if (this.ready) this.movie.setAction(newText);
- },
-
- addEventListener: function(eventName, func) {
- // add user event listener for event
- // event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
- eventName = eventName.toString().toLowerCase().replace(/^on/, '');
- if (!this.handlers[eventName]) this.handlers[eventName] = [];
- this.handlers[eventName].push(func);
- },
-
- setHandCursor: function(enabled) {
- // enable hand cursor (true), or default arrow cursor (false)
- this.handCursorEnabled = enabled;
- if (this.ready) this.movie.setHandCursor(enabled);
- },
-
- setCSSEffects: function(enabled) {
- // enable or disable CSS effects on DOM container
- this.cssEffects = !!enabled;
- },
-
- receiveEvent: function(eventName, args) {
- // receive event from flash
- eventName = eventName.toString().toLowerCase().replace(/^on/, '');
-
- // special behavior for certain events
- switch (eventName) {
- case 'load':
- // movie claims it is ready, but in IE this isn't always the case...
- // bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
- this.movie = document.getElementById(this.movieId);
- if (!this.movie) {
- var self = this;
- setTimeout( function() { self.receiveEvent('load', null); }, 1 );
- return;
- }
-
- // firefox on pc needs a "kick" in order to set these in certain cases
- if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
- var self = this;
- setTimeout( function() { self.receiveEvent('load', null); }, 100 );
- this.ready = true;
- return;
- }
-
- this.ready = true;
- this.movie.clearText();
- this.movie.appendText( this.clipText );
- this.movie.setFileName( this.fileName );
- this.movie.setAction( this.action );
- this.movie.setCharSet( this.charSet );
- this.movie.setBomInc( this.incBom );
- this.movie.setHandCursor( this.handCursorEnabled );
- break;
-
- case 'mouseover':
- if (this.domElement && this.cssEffects) {
- //this.domElement.addClass('hover');
- if (this.recoverActive) this.domElement.addClass('active');
- }
- break;
-
- case 'mouseout':
- if (this.domElement && this.cssEffects) {
- this.recoverActive = false;
- if (this.domElement.hasClass('active')) {
- this.domElement.removeClass('active');
- this.recoverActive = true;
- }
- //this.domElement.removeClass('hover');
- }
- break;
-
- case 'mousedown':
- if (this.domElement && this.cssEffects) {
- this.domElement.addClass('active');
- }
- break;
-
- case 'mouseup':
- if (this.domElement && this.cssEffects) {
- this.domElement.removeClass('active');
- this.recoverActive = false;
- }
- break;
- } // switch eventName
-
- if (this.handlers[eventName]) {
- for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {
- var func = this.handlers[eventName][idx];
-
- if (typeof(func) == 'function') {
- // actual function reference
- func(this, args);
- }
- else if ((typeof(func) == 'object') && (func.length == 2)) {
- // PHP style object + method, i.e. [myObject, 'myMethod']
- func[0][ func[1] ](this, args);
- }
- else if (typeof(func) == 'string') {
- // name of function
- window[func](this, args);
- }
- } // foreach event handler defined
- } // user defined handler for event
- }
-
-};
diff --git a/wqflask/wqflask/static/packages/TableTools/media/swf/copy_csv_xls.swf b/wqflask/wqflask/static/packages/TableTools/media/swf/copy_csv_xls.swf
deleted file mode 100644
index 082c7acb..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/swf/copy_csv_xls.swf
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/media/swf/copy_csv_xls_pdf.swf b/wqflask/wqflask/static/packages/TableTools/media/swf/copy_csv_xls_pdf.swf
deleted file mode 100644
index 063131df..00000000
--- a/wqflask/wqflask/static/packages/TableTools/media/swf/copy_csv_xls_pdf.swf
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/TableTools/multi_instance.html b/wqflask/wqflask/static/packages/TableTools/multi_instance.html
deleted file mode 100644
index 14e1e63e..00000000
--- a/wqflask/wqflask/static/packages/TableTools/multi_instance.html
+++ /dev/null
@@ -1,499 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico">
-
- <title>TableTools example</title>
- <style type="text/css" title="currentStyle">
- @import "../../media/css/demo_page.css";
- @import "../../media/css/demo_table.css";
- @import "media/css/TableTools.css";
- </style>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/ZeroClipboard.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/TableTools.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T<"clear">lfrtip<"clear spacer">T'
- } );
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- TableTools example - multiple toolbars
- </div>
-
- <h1>Preamble</h1>
- <p>Like all DataTables control elements, TableTools can have multiple instances specified in the <i>sDom</i> parameter of DataTables. This will create two TableTools toolbars next to the table, providing the same functions. An example of when this might be useful is to show the toolbar both above and below the table - as is done in this example.</p>
-
-
- <h1>Live example</h1>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="odd_gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+ (Entity: &amp;)</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Trident</td>
- <td>Internet Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko (UTF-8: $¢€)</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="even_gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <h1>Initialisation code</h1>
- <pre>$(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T&lt;"clear"&gt;lfrtip&lt;"clear spacer"&gt;T'
- } );
-} );</pre>
-
-
- <h1>Other examples</h1>
- <ul>
- <li><a href="index.html">Basic initialisation</a></li>
- <li><a href="swf_path.html">Setting the SWF path</a></li>
- <li><a href="alter_buttons.html">Custom button arrangement</a></li>
- <li><a href="button_text.html">Button text alteration</a></li>
- <li><a href="collection.html">Using button collections</a></li>
- <li><a href="theme.html">Using jQuery UI themes</a></li>
- <li><a href="bootstrap.html">Styling with Twitter Bootstrap</a></li>
- <li><a href="multi_instance.html">Multiple TableTools toolbars for a single table</a></li>
- <li><a href="multiple_tables.html">Multiple DataTables with a single initialisation</a></li>
- <li><a href="select_multi.html">User selectable rows (multiple rows)</a></li>
- <li><a href="select_single.html">User selectable rows (single row)</a></li>
- <li><a href="alt_init.html">Alternative initialisation using 'new TableTools()'</a></li>
- <li><a href="defaults.html">Altering the TableTools defaults</a></li>
- <li><a href="plug-in.html">TableTools plug-in buttons</a></li>
- <li><a href="pdf_message.html">Customising the PDF output (adding text and orientation)</a></li>
- </ul>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- TableTools and DataTables &copy; Allan Jardine 2009-2011.<br>
- Flash 10 save / copy operations are performed by a modified version of <a href="http://code.google.com/p/zeroclipboard/">Zero Clipboard</a>.<br>
- The icons used in the toolbar are modified from <a href="http://www.addictedtocoffee.de/">Oliver Twardowski's</a> <a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/">Flavours Icon set</a>.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/TableTools/multiple_tables.html b/wqflask/wqflask/static/packages/TableTools/multiple_tables.html
deleted file mode 100644
index 8cd8aef9..00000000
--- a/wqflask/wqflask/static/packages/TableTools/multiple_tables.html
+++ /dev/null
@@ -1,296 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico">
-
- <title>TableTools example</title>
- <style type="text/css" title="currentStyle">
- @import "../../media/css/demo_page.css";
- @import "../../media/css/demo_table.css";
- @import "media/css/TableTools.css";
- </style>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/ZeroClipboard.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/TableTools.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready( function () {
- $('table.display').dataTable( {
- "sDom": 'T<"clear">lfrtip'
- } );
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- TableTools example - multiple tables
- </div>
-
- <h1>Preamble</h1>
- <p>This example shows how multiple tables can be initialised with DataTables and TableTools in a single call to the $().dataTable() function. Basically it works as you would expect - no special considerations need be made!</p>
-
- <h1>Live example</h1>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tbody>
- <tr class="odd_gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+ (Entity: &amp;)</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Trident</td>
- <td>Internet Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- </tbody>
-</table>
-
-
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example2">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="odd_gradeA">
- <td>Gecko (UTF-8: $¢€)</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <h1>Initialisation code</h1>
- <pre>$(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T&lt;"clear"&gt;lfrtip'
- } );
-} );</pre>
-
-
- <h1>Other examples</h1>
- <ul>
- <li><a href="index.html">Basic initialisation</a></li>
- <li><a href="swf_path.html">Setting the SWF path</a></li>
- <li><a href="alter_buttons.html">Custom button arrangement</a></li>
- <li><a href="button_text.html">Button text alteration</a></li>
- <li><a href="collection.html">Using button collections</a></li>
- <li><a href="theme.html">Using jQuery UI themes</a></li>
- <li><a href="bootstrap.html">Styling with Twitter Bootstrap</a></li>
- <li><a href="multi_instance.html">Multiple TableTools toolbars for a single table</a></li>
- <li><a href="multiple_tables.html">Multiple DataTables with a single initialisation</a></li>
- <li><a href="select_multi.html">User selectable rows (multiple rows)</a></li>
- <li><a href="select_single.html">User selectable rows (single row)</a></li>
- <li><a href="alt_init.html">Alternative initialisation using 'new TableTools()'</a></li>
- <li><a href="defaults.html">Altering the TableTools defaults</a></li>
- <li><a href="plug-in.html">TableTools plug-in buttons</a></li>
- <li><a href="pdf_message.html">Customising the PDF output (adding text and orientation)</a></li>
- </ul>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- TableTools and DataTables &copy; Allan Jardine 2009-2011.<br>
- Flash 10 save / copy operations are performed by a modified version of <a href="http://code.google.com/p/zeroclipboard/">Zero Clipboard</a>.<br>
- The icons used in the toolbar are modified from <a href="http://www.addictedtocoffee.de/">Oliver Twardowski's</a> <a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/">Flavours Icon set</a>.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/TableTools/pdf_message.html b/wqflask/wqflask/static/packages/TableTools/pdf_message.html
deleted file mode 100644
index e8f66e12..00000000
--- a/wqflask/wqflask/static/packages/TableTools/pdf_message.html
+++ /dev/null
@@ -1,524 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico">
-
- <title>TableTools example</title>
- <style type="text/css" title="currentStyle">
- @import "../../media/css/demo_page.css";
- @import "../../media/css/demo_table.css";
- @import "media/css/TableTools.css";
- </style>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/ZeroClipboard.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/TableTools.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T<"clear">lfrtip',
- "oTableTools": {
- "aButtons": [
- "copy",
- "csv",
- "xls",
- {
- "sExtends": "pdf",
- "sPdfOrientation": "landscape",
- "sPdfMessage": "Your custom message would go here."
- },
- "print"
- ]
- }
- } );
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- TableTools example
- </div>
-
- <h1>Preamble</h1>
- <p>This example shows how you can add a message to the saved PDF using the 'sPdfMessage' parameter. It also shows that the orientation of the output PDF can be changed to landscape which is useful if you have a lot of columns.</p>
-
- <h1>Live example</h1>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="odd_gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+ (Entity: &amp;)</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Trident</td>
- <td>Internet Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko (UTF-8: $¢€)</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="even_gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <h1>Initialisation code</h1>
- <pre>$(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T&lt;"clear"&gt;lfrtip',
- "oTableTools": {
- "aButtons": [
- "copy",
- "csv",
- "xls",
- {
- "sExtends": "pdf",
- "sPdfOrientation": "landscape",
- "sPdfMessage": "Your custom message would go here."
- }
- "print"
- ]
- }
- } );
-} );</pre>
-
-
- <h1>Other examples</h1>
- <ul>
- <li><a href="index.html">Basic initialisation</a></li>
- <li><a href="swf_path.html">Setting the SWF path</a></li>
- <li><a href="alter_buttons.html">Custom button arrangement</a></li>
- <li><a href="button_text.html">Button text alteration</a></li>
- <li><a href="collection.html">Using button collections</a></li>
- <li><a href="theme.html">Using jQuery UI themes</a></li>
- <li><a href="bootstrap.html">Styling with Twitter Bootstrap</a></li>
- <li><a href="multi_instance.html">Multiple TableTools toolbars for a single table</a></li>
- <li><a href="multiple_tables.html">Multiple DataTables with a single initialisation</a></li>
- <li><a href="select_multi.html">User selectable rows (multiple rows)</a></li>
- <li><a href="select_single.html">User selectable rows (single row)</a></li>
- <li><a href="alt_init.html">Alternative initialisation using 'new TableTools()'</a></li>
- <li><a href="defaults.html">Altering the TableTools defaults</a></li>
- <li><a href="plug-in.html">TableTools plug-in buttons</a></li>
- <li><a href="pdf_message.html">Customising the PDF output (adding text and orientation)</a></li>
- </ul>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- TableTools and DataTables &copy; Allan Jardine 2009-2011.<br>
- Flash 10 save / copy operations are performed by a modified version of <a href="http://code.google.com/p/zeroclipboard/">Zero Clipboard</a>.<br>
- The icons used in the toolbar are modified from <a href="http://www.addictedtocoffee.de/">Oliver Twardowski's</a> <a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/">Flavours Icon set</a>.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/TableTools/plug-in.html b/wqflask/wqflask/static/packages/TableTools/plug-in.html
deleted file mode 100644
index 08a055bf..00000000
--- a/wqflask/wqflask/static/packages/TableTools/plug-in.html
+++ /dev/null
@@ -1,539 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico">
-
- <title>TableTools example</title>
- <style type="text/css" title="currentStyle">
- @import "../../media/css/demo_page.css";
- @import "../../media/css/demo_table.css";
- @import "media/css/TableTools.css";
- </style>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/ZeroClipboard.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/TableTools.js"></script>
- <script type="text/javascript" charset="utf-8">
- TableTools.BUTTONS.copy_to_div = $.extend( true, TableTools.buttonBase, {
- "sNewLine": "<br>",
- "sButtonText": "Copy to element",
- "sDiv": "",
- "fnClick": function( nButton, oConfig ) {
- document.getElementById(oConfig.sDiv).innerHTML =
- this.fnGetTableData(oConfig);
- }
- } );
-
- $(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T<"clear">lfrtip',
- "oTableTools": {
- "aButtons": [
- {
- "sExtends": "copy_to_div",
- "sButtonText": "Copy to div",
- "sDiv": "copy",
- }
- ]
- }
- } );
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- TableTools example - plug-ins
- </div>
-
- <h1>Preamble</h1>
- <p>Plug-ins in TableTools take the form of additional buttons types, which provide extra options and flexibility for TableTools. This example shows how a plug-in button type can be defined and then used in the TableTools initialisation. Note that the <i>TableTools.buttonBase</i> object is extended with our required parameters - this base object provides default values for all of the options TableTools can work with, so they don't all have to be defined in our button.</p>
- <p>Additional plug-ins for TableTools can be found <a href="http://datatables.net/extras/tabletools/plug-ins">on the DataTables.net site</a>. The example plug-in here shows a button which is used to insert the data from the table into a given element.</p>
-
- <h1>Live example</h1>
-
- <div id="copy" class="box" style="height: 100px; overflow: auto"></div>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="odd_gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+ (Entity: &amp;)</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Trident</td>
- <td>Internet Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko (UTF-8: $¢€)</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="even_gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <h1>Initialisation code</h1>
- <pre>TableTools.BUTTONS.copy_to_div = $.extend( true, TableTools.buttonBase, {
- "sNewLine": "&lt;br&gt;",
- "sButtonText": "Copy to element",
- "sDiv": "",
- "fnClick": function( nButton, oConfig ) {
- document.getElementById(oConfig.sDiv).innerHTML =
- this.fnGetTableData(oConfig);
- }
-} );
-
-$(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T&lt;"clear"&gt;lfrtip',
- "oTableTools": {
- "aButtons": [
- {
- "sExtends": "copy_to_div",
- "sButtonText": "Copy to div",
- "sDiv": "copy",
- }
- ]
- }
- } );
-} );</pre>
-
-
- <h1>Other examples</h1>
- <ul>
- <li><a href="index.html">Basic initialisation</a></li>
- <li><a href="swf_path.html">Setting the SWF path</a></li>
- <li><a href="alter_buttons.html">Custom button arrangement</a></li>
- <li><a href="button_text.html">Button text alteration</a></li>
- <li><a href="collection.html">Using button collections</a></li>
- <li><a href="theme.html">Using jQuery UI themes</a></li>
- <li><a href="bootstrap.html">Styling with Twitter Bootstrap</a></li>
- <li><a href="multi_instance.html">Multiple TableTools toolbars for a single table</a></li>
- <li><a href="multiple_tables.html">Multiple DataTables with a single initialisation</a></li>
- <li><a href="select_multi.html">User selectable rows (multiple rows)</a></li>
- <li><a href="select_single.html">User selectable rows (single row)</a></li>
- <li><a href="alt_init.html">Alternative initialisation using 'new TableTools()'</a></li>
- <li><a href="defaults.html">Altering the TableTools defaults</a></li>
- <li><a href="plug-in.html">TableTools plug-in buttons</a></li>
- <li><a href="pdf_message.html">Customising the PDF output (adding text and orientation)</a></li>
- </ul>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- TableTools and DataTables &copy; Allan Jardine 2009-2011.<br>
- Flash 10 save / copy operations are performed by a modified version of <a href="http://code.google.com/p/zeroclipboard/">Zero Clipboard</a>.<br>
- The icons used in the toolbar are modified from <a href="http://www.addictedtocoffee.de/">Oliver Twardowski's</a> <a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/">Flavours Icon set</a>.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/TableTools/select_multi.html b/wqflask/wqflask/static/packages/TableTools/select_multi.html
deleted file mode 100644
index ee94789c..00000000
--- a/wqflask/wqflask/static/packages/TableTools/select_multi.html
+++ /dev/null
@@ -1,507 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico">
-
- <title>TableTools example</title>
- <style type="text/css" title="currentStyle">
- @import "../../media/css/demo_page.css";
- @import "../../media/css/demo_table.css";
- @import "media/css/TableTools.css";
- </style>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/ZeroClipboard.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/TableTools.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T<"clear">lfrtip',
- "oTableTools": {
- "sRowSelect": "multi",
- "aButtons": [ "select_all", "select_none" ]
- }
- } );
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- TableTools example - multi-row select
- </div>
-
- <h1>Preamble</h1>
- <p>As well as providing a button toolbar, TableTools provides everything needed to have selectable rows in the table. Row selection is turned off by default in TableTools, but can be enabled using the <i>sRowSelect</i> parameter, set to either 'multi' or 'single'. When set the end user can select rows by simply clicking on them. TableTools provides <a href="http://datatables.net/extras/tabletools/api">a set of API methods</a> and <a href="http://datatables.net/extras/tabletools/initialisation">callbacks</a> for controlling and monitoring the row selection in TableTools. There are also a number of <a href="http://datatables.net/extras/tabletools/buttons">pre-defined buttons</a> to provide functions such as select-all and select-none, as shown in this example.</p>
-
-
- <h1>Live example</h1>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="odd_gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+ (Entity: &amp;)</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Trident</td>
- <td>Internet Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko (UTF-8: $¢€)</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="even_gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <h1>Initialisation code</h1>
- <pre>$(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T&lt;"clear"&gt;lfrtip',
- "oTableTools": {
- "sRowSelect": "multi",
- "aButtons": [ "select_all", "select_none" ]
- }
- } );
-} );</pre>
-
-
- <h1>Other examples</h1>
- <ul>
- <li><a href="index.html">Basic initialisation</a></li>
- <li><a href="swf_path.html">Setting the SWF path</a></li>
- <li><a href="alter_buttons.html">Custom button arrangement</a></li>
- <li><a href="button_text.html">Button text alteration</a></li>
- <li><a href="collection.html">Using button collections</a></li>
- <li><a href="theme.html">Using jQuery UI themes</a></li>
- <li><a href="bootstrap.html">Styling with Twitter Bootstrap</a></li>
- <li><a href="multi_instance.html">Multiple TableTools toolbars for a single table</a></li>
- <li><a href="multiple_tables.html">Multiple DataTables with a single initialisation</a></li>
- <li><a href="select_multi.html">User selectable rows (multiple rows)</a></li>
- <li><a href="select_single.html">User selectable rows (single row)</a></li>
- <li><a href="alt_init.html">Alternative initialisation using 'new TableTools()'</a></li>
- <li><a href="defaults.html">Altering the TableTools defaults</a></li>
- <li><a href="plug-in.html">TableTools plug-in buttons</a></li>
- <li><a href="pdf_message.html">Customising the PDF output (adding text and orientation)</a></li>
- </ul>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- TableTools and DataTables &copy; Allan Jardine 2009-2011.<br>
- Flash 10 save / copy operations are performed by a modified version of <a href="http://code.google.com/p/zeroclipboard/">Zero Clipboard</a>.<br>
- The icons used in the toolbar are modified from <a href="http://www.addictedtocoffee.de/">Oliver Twardowski's</a> <a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/">Flavours Icon set</a>.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/TableTools/select_single.html b/wqflask/wqflask/static/packages/TableTools/select_single.html
deleted file mode 100644
index 94a47893..00000000
--- a/wqflask/wqflask/static/packages/TableTools/select_single.html
+++ /dev/null
@@ -1,505 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico">
-
- <title>TableTools example</title>
- <style type="text/css" title="currentStyle">
- @import "../../media/css/demo_page.css";
- @import "../../media/css/demo_table.css";
- @import "media/css/TableTools.css";
- </style>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/ZeroClipboard.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/TableTools.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T<"clear">lfrtip',
- "oTableTools": {
- "sRowSelect": "single"
- }
- } );
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- TableTools example - single row selection
- </div>
-
- <h1>Preamble</h1>
- <p>As well as providing a button toolbar, TableTools provides everything needed to have selectable rows in the table. Row selection is turned off by default in TableTools, but can be enabled using the <i>sRowSelect</i> parameter, set to either 'multi' or 'single'. When set the end user can select rows by simply clicking on them. TableTools provides <a href="http://datatables.net/extras/tabletools/api">a set of API methods</a> and <a href="http://datatables.net/extras/tabletools/initialisation">callbacks</a> for controlling and monitoring the row selection in TableTools. This example shows single row selection enabled.</p>
-
-
- <h1>Live example</h1>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="odd_gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+ (Entity: &amp;)</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Trident</td>
- <td>Internet Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko (UTF-8: $¢€)</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="even_gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <h1>Initialisation code</h1>
- <pre>$(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T&lt;"clear"&gt;lfrtip',
- "oTableTools": {
- "sRowSelect": "single"
- }
- } );
-} );</pre>
-
-
- <h1>Other examples</h1>
- <ul>
- <li><a href="index.html">Basic initialisation</a></li>
- <li><a href="swf_path.html">Setting the SWF path</a></li>
- <li><a href="alter_buttons.html">Custom button arrangement</a></li>
- <li><a href="button_text.html">Button text alteration</a></li>
- <li><a href="collection.html">Using button collections</a></li>
- <li><a href="theme.html">Using jQuery UI themes</a></li>
- <li><a href="bootstrap.html">Styling with Twitter Bootstrap</a></li>
- <li><a href="multi_instance.html">Multiple TableTools toolbars for a single table</a></li>
- <li><a href="multiple_tables.html">Multiple DataTables with a single initialisation</a></li>
- <li><a href="select_multi.html">User selectable rows (multiple rows)</a></li>
- <li><a href="select_single.html">User selectable rows (single row)</a></li>
- <li><a href="alt_init.html">Alternative initialisation using 'new TableTools()'</a></li>
- <li><a href="defaults.html">Altering the TableTools defaults</a></li>
- <li><a href="plug-in.html">TableTools plug-in buttons</a></li>
- <li><a href="pdf_message.html">Customising the PDF output (adding text and orientation)</a></li>
- </ul>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- TableTools and DataTables &copy; Allan Jardine 2009-2011.<br>
- Flash 10 save / copy operations are performed by a modified version of <a href="http://code.google.com/p/zeroclipboard/">Zero Clipboard</a>.<br>
- The icons used in the toolbar are modified from <a href="http://www.addictedtocoffee.de/">Oliver Twardowski's</a> <a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/">Flavours Icon set</a>.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/TableTools/swf_path.html b/wqflask/wqflask/static/packages/TableTools/swf_path.html
deleted file mode 100644
index c82633b4..00000000
--- a/wqflask/wqflask/static/packages/TableTools/swf_path.html
+++ /dev/null
@@ -1,505 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico">
-
- <title>TableTools example</title>
- <style type="text/css" title="currentStyle">
- @import "../../media/css/demo_page.css";
- @import "../../media/css/demo_table.css";
- @import "media/css/TableTools.css";
- </style>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/ZeroClipboard.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/TableTools.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T<"clear">lfrtip',
- "oTableTools": {
- "sSwfPath": "media/swf/copy_csv_xls_pdf.swf"
- }
- } );
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- TableTools example - setting SWF path
- </div>
-
- <h1>Preamble</h1>
- <p>TableTools uses a Flash SWF file to provide the ability to copy text to the system clipboard and save files locally. TableTools must be able to load the SWF file in order to provide these facilities. If you aren't using the same directory structure as the TableTools package, you will need to set this parameter.</p>
- <p>Note that TableTools ships with two different SWF files - the only difference between them is that one of them provides the ability to save PDF files while the other doesn't. The trade off is that the PDF capable file is significantly larger in size (56K v 2K).</p>
-
- <h1>Live example</h1>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="odd_gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+ (Entity: &amp;)</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Trident</td>
- <td>Internet Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko (UTF-8: $¢€)</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="even_gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <h1>Initialisation code</h1>
- <pre>$(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T&lt;"clear"&gt;lfrtip',
- "oTableTools": {
- "sSwfPath": "media/swf/copy_csv_xls_pdf.swf"
- }
- } );
-} );</pre>
-
-
- <h1>Other examples</h1>
- <ul>
- <li><a href="index.html">Basic initialisation</a></li>
- <li><a href="swf_path.html">Setting the SWF path</a></li>
- <li><a href="alter_buttons.html">Custom button arrangement</a></li>
- <li><a href="button_text.html">Button text alteration</a></li>
- <li><a href="collection.html">Using button collections</a></li>
- <li><a href="theme.html">Using jQuery UI themes</a></li>
- <li><a href="bootstrap.html">Styling with Twitter Bootstrap</a></li>
- <li><a href="multi_instance.html">Multiple TableTools toolbars for a single table</a></li>
- <li><a href="multiple_tables.html">Multiple DataTables with a single initialisation</a></li>
- <li><a href="select_multi.html">User selectable rows (multiple rows)</a></li>
- <li><a href="select_single.html">User selectable rows (single row)</a></li>
- <li><a href="alt_init.html">Alternative initialisation using 'new TableTools()'</a></li>
- <li><a href="defaults.html">Altering the TableTools defaults</a></li>
- <li><a href="plug-in.html">TableTools plug-in buttons</a></li>
- <li><a href="pdf_message.html">Customising the PDF output (adding text and orientation)</a></li>
- </ul>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- TableTools and DataTables &copy; Allan Jardine 2009-2011.<br>
- Flash 10 save / copy operations are performed by a modified version of <a href="http://code.google.com/p/zeroclipboard/">Zero Clipboard</a>.<br>
- The icons used in the toolbar are modified from <a href="http://www.addictedtocoffee.de/">Oliver Twardowski's</a> <a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/">Flavours Icon set</a>.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/TableTools/tabs.html b/wqflask/wqflask/static/packages/TableTools/tabs.html
deleted file mode 100644
index 915cc821..00000000
--- a/wqflask/wqflask/static/packages/TableTools/tabs.html
+++ /dev/null
@@ -1,348 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico">
-
- <title>TableTools example</title>
- <style type="text/css" title="currentStyle">
- @import "../../media/css/demo_page.css";
- @import "../../media/css/demo_table_jui.css";
- @import "../../examples/examples_support/themes/smoothness/jquery-ui-1.8.4.custom.css";
- @import "media/css/TableTools_JUI.css";
- .ui-tabs .ui-tabs-panel { padding: 10px }
- </style>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../examples/examples_support/jquery-ui-tabs.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/ZeroClipboard.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/TableTools.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready(function() {
- $("#tabs").tabs( {
- "show": function(event, ui) {
- var jqTable = $('table.display', ui.panel);
- if ( jqTable.length > 0 ) {
- var oTableTools = TableTools.fnGetInstance( jqTable[0] );
- if ( oTableTools != null && oTableTools.fnResizeRequired() )
- {
- /* A resize of TableTools' buttons and DataTables' columns is only required on the
- * first visible draw of the table
- */
- jqTable.dataTable().fnAdjustColumnSizing();
- oTableTools.fnResizeButtons();
- }
- }
- }
- } );
-
- $('#example1').dataTable( {
- "bJQueryUI": true,
- "sPaginationType": "full_numbers",
- "sDom": '<"H"Tfr>t<"F"ip>'
- } );
-
- $('#example2').dataTable( {
- "bJQueryUI": true,
- "sPaginationType": "full_numbers",
- "sDom": '<"H"Tfr>t<"F"ip>'
- } );
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- TableTools example
- </div>
-
- <h1>Preamble</h1>
- <p>This example shows the basic initialisation of TableTools by simply including the 'T' marker in DataTables' sDom parameter. This tell DataTables to insert the TableTools toolbar in that location. Remember to include the Javascript and CSS source files as well!</p>
- <p>It is worth noting that you might need to <a href="swf_path.html">set the <i>sSwfPath</i> parameter</a> to tell TableTools where to find the SWF file for copy and file save.</p>
-
- <h1>Live example</h1>
- <div id="demo">
- <div id="tabs">
- <ul>
- <li><a href="#tabs-1">Trident browsers</a></li>
- <li><a href="#tabs-2">Gecko browsers</a></li>
- </ul>
-
- <div id="tabs-1">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example1">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>Grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>Grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="odd gradeX">
- <td>Trident</td>
- <td>Internet
- Explorer 4.0</td>
- <td>Win 95+</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd gradeC">
- <td>Trident</td>
- <td>Internet
- Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd gradeA">
- <td>Trident</td>
- <td>Internet
- Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tbody>
-</table>
- </div>
-
-
- <div id="tabs-2">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example2">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>Grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>Grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- </tbody>
-</table>
- </div>
- </div>
- </div>
- <div class="spacer"></div>
-
- <h1>Initialisation code</h1>
- <pre>$(document).ready( function () {
- $('#example').dataTable( {
- "sDom": 'T&lt;"clear"&gt;lfrtip'
- } );
-} );</pre>
-
-
- <h1>Other examples</h1>
- <ul>
- <li><a href="index.html">Basic initialisation</a></li>
- <li><a href="swf_path.html">Setting the SWF path</a></li>
- <li><a href="alter_buttons.html">Custom button arrangement</a></li>
- <li><a href="button_text.html">Button text alteration</a></li>
- <li><a href="collection.html">Using button collections</a></li>
- <li><a href="theme.html">Using jQuery UI themes</a></li>
- <li><a href="bootstrap.html">Styling with Twitter Bootstrap</a></li>
- <li><a href="multi_instance.html">Multiple TableTools toolbars for a single table</a></li>
- <li><a href="multiple_tables.html">Multiple DataTables with a single initialisation</a></li>
- <li><a href="select_multi.html">User selectable rows (multiple rows)</a></li>
- <li><a href="select_single.html">User selectable rows (single row)</a></li>
- <li><a href="alt_init.html">Alternative initialisation using 'new TableTools()'</a></li>
- <li><a href="defaults.html">Altering the TableTools defaults</a></li>
- <li><a href="plug-in.html">TableTools plug-in buttons</a></li>
- <li><a href="pdf_message.html">Customising the PDF output (adding text and orientation)</a></li>
- </ul>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- TableTools and DataTables &copy; Allan Jardine 2009-2011.<br>
- Flash 10 save / copy operations are performed by a modified version of <a href="http://code.google.com/p/zeroclipboard/">Zero Clipboard</a>.<br>
- The icons used in the toolbar are modified from <a href="http://www.addictedtocoffee.de/">Oliver Twardowski's</a> <a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/">Flavours Icon set</a>.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/TableTools/theme.html b/wqflask/wqflask/static/packages/TableTools/theme.html
deleted file mode 100644
index fcda07a0..00000000
--- a/wqflask/wqflask/static/packages/TableTools/theme.html
+++ /dev/null
@@ -1,524 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <link rel="shortcut icon" type="image/ico" href="http://www.sprymedia.co.uk/media/images/favicon.ico">
-
- <title>TableTools example</title>
- <style type="text/css" title="currentStyle">
- @import "../../media/css/demo_page.css";
- @import "../../media/css/demo_table_jui.css";
- @import "../../examples/examples_support/themes/smoothness/jquery-ui-1.8.4.custom.css";
- @import "media/css/TableTools_JUI.css";
- </style>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.js"></script>
- <script type="text/javascript" charset="utf-8" src="../../media/js/jquery.dataTables.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/ZeroClipboard.js"></script>
- <script type="text/javascript" charset="utf-8" src="media/js/TableTools.js"></script>
- <script type="text/javascript" charset="utf-8">
- $(document).ready( function () {
- $('#example').dataTable( {
- "bJQueryUI": true,
- "sPaginationType": "full_numbers",
- "sDom": '<"H"Tfr>t<"F"ip>',
- "oTableTools": {
- "aButtons": [
- "copy", "csv", "xls", "pdf",
- {
- "sExtends": "collection",
- "sButtonText": "Save",
- "aButtons": [ "csv", "xls", "pdf" ]
- }
- ]
- }
- } );
- } );
- </script>
- </head>
- <body id="dt_example">
- <div id="container">
- <div class="full_width big">
- TableTools example - jQuery UI theming
- </div>
-
- <h1>Preamble</h1>
- <p>Like DataTables, TableTools can be styled by a jQuery UI theme. The required classes for the theming with TableTools are added automatically when the <i>bJQueryUI</i> option is detected from DataTables. This example shows that in action, and also defines a button collection to show the themeing there.</p>
-
-
- <h1>Live example</h1>
- <div id="demo">
-<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
- <thead>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </thead>
- <tfoot>
- <tr>
- <th>Rendering engine</th>
- <th>Browser</th>
- <th>Platform(s)</th>
- <th>Engine version</th>
- <th>CSS grade</th>
- </tr>
- </tfoot>
- <tbody>
- <tr class="odd_gradeX">
- <td>Trident</td>
- <td>Internet Explorer 4.0</td>
- <td>Win 95+ (Entity: &amp;)</td>
- <td class="center">4</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Trident</td>
- <td>Internet Explorer 5.0</td>
- <td>Win 95+</td>
- <td class="center">5</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 5.5</td>
- <td>Win 95+</td>
- <td class="center">5.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 6</td>
- <td>Win 98+</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Trident</td>
- <td>Internet Explorer 7</td>
- <td>Win XP SP2+</td>
- <td class="center">7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Trident</td>
- <td>AOL browser (AOL desktop)</td>
- <td>Win XP</td>
- <td class="center">6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko (UTF-8: $¢€)</td>
- <td>Firefox 1.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 1.5</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Firefox 2.0</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Firefox 3.0</td>
- <td>Win 2k+ / OSX.3+</td>
- <td class="center">1.9</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Camino 1.0</td>
- <td>OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Camino 1.5</td>
- <td>OSX.3+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape 7.2</td>
- <td>Win 95+ / Mac OS 8.6-9.2</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Netscape Browser 8</td>
- <td>Win 98SE+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Netscape Navigator 9</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.1</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.2</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.2</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.3</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.4</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.4</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.5</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.6</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">1.6</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.7</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.7</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Mozilla 1.8</td>
- <td>Win 98+ / OSX.1+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Gecko</td>
- <td>Seamonkey 1.1</td>
- <td>Win 98+ / OSX.2+</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Gecko</td>
- <td>Epiphany 2.20</td>
- <td>Gnome</td>
- <td class="center">1.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 1.2</td>
- <td>OSX.3</td>
- <td class="center">125.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 1.3</td>
- <td>OSX.3</td>
- <td class="center">312.8</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>Safari 2.0</td>
- <td>OSX.4+</td>
- <td class="center">419.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>Safari 3.0</td>
- <td>OSX.4+</td>
- <td class="center">522.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>OmniWeb 5.5</td>
- <td>OSX.4+</td>
- <td class="center">420</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Webkit</td>
- <td>iPod Touch / iPhone</td>
- <td>iPod</td>
- <td class="center">420.1</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Webkit</td>
- <td>S60</td>
- <td>S60</td>
- <td class="center">413</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 7.0</td>
- <td>Win 95+ / OSX.1+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 7.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 8.0</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 8.5</td>
- <td>Win 95+ / OSX.2+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.0</td>
- <td>Win 95+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera 9.2</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Opera 9.5</td>
- <td>Win 88+ / OSX.3+</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Opera for Wii</td>
- <td>Wii</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>Presto</td>
- <td>Nokia N800</td>
- <td>N800</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Presto</td>
- <td>Nintendo DS browser</td>
- <td>Nintendo DS</td>
- <td class="center">8.5</td>
- <td class="center">C/A<sup>1</sup></td>
- </tr>
- <tr class="even_gradeC">
- <td>KHTML</td>
- <td>Konqureror 3.1</td>
- <td>KDE 3.1</td>
- <td class="center">3.1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.3</td>
- <td>KDE 3.3</td>
- <td class="center">3.3</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeA">
- <td>KHTML</td>
- <td>Konqureror 3.5</td>
- <td>KDE 3.5</td>
- <td class="center">3.5</td>
- <td class="center">A</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Tasman</td>
- <td>Internet Explorer 4.5</td>
- <td>Mac OS 8-9</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.1</td>
- <td>Mac OS 7.6-9</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Tasman</td>
- <td>Internet Explorer 5.2</td>
- <td>Mac OS 8-X</td>
- <td class="center">1</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeA">
- <td>Misc</td>
- <td>NetFront 3.1</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeA">
- <td>Misc</td>
- <td>NetFront 3.4</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">A</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Dillo 0.8</td>
- <td>Embedded devices</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeX">
- <td>Misc</td>
- <td>Links</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="even_gradeX">
- <td>Misc</td>
- <td>Lynx</td>
- <td>Text only</td>
- <td class="center">-</td>
- <td class="center">X</td>
- </tr>
- <tr class="odd_gradeC">
- <td>Misc</td>
- <td>IE Mobile</td>
- <td>Windows Mobile 6</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="even_gradeC">
- <td>Misc</td>
- <td>PSP browser</td>
- <td>PSP</td>
- <td class="center">-</td>
- <td class="center">C</td>
- </tr>
- <tr class="odd_gradeU">
- <td>Other browsers</td>
- <td>All others</td>
- <td>-</td>
- <td class="center">-</td>
- <td class="center">U</td>
- </tr>
- </tbody>
-</table>
- </div>
- <div class="spacer"></div>
-
-
- <h1>Initialisation code</h1>
- <pre>$(document).ready( function () {
- $('#example').dataTable( {
- "bJQueryUI": true,
- "sPaginationType": "full_numbers",
- "sDom": '&lt;"H"Tfr&gt;t&lt;"F"ip&gt;',
- "oTableTools": {
- "aButtons": [
- "copy", "csv", "xls", "pdf",
- {
- "sExtends": "collection",
- "sButtonText": "Save",
- "aButtons": [ "csv", "xls", "pdf" ]
- }
- ]
- }
- } );
-} );</pre>
-
-
- <h1>Other examples</h1>
- <ul>
- <li><a href="index.html">Basic initialisation</a></li>
- <li><a href="swf_path.html">Setting the SWF path</a></li>
- <li><a href="alter_buttons.html">Custom button arrangement</a></li>
- <li><a href="button_text.html">Button text alteration</a></li>
- <li><a href="collection.html">Using button collections</a></li>
- <li><a href="theme.html">Using jQuery UI themes</a></li>
- <li><a href="bootstrap.html">Styling with Twitter Bootstrap</a></li>
- <li><a href="multi_instance.html">Multiple TableTools toolbars for a single table</a></li>
- <li><a href="multiple_tables.html">Multiple DataTables with a single initialisation</a></li>
- <li><a href="select_multi.html">User selectable rows (multiple rows)</a></li>
- <li><a href="select_single.html">User selectable rows (single row)</a></li>
- <li><a href="alt_init.html">Alternative initialisation using 'new TableTools()'</a></li>
- <li><a href="defaults.html">Altering the TableTools defaults</a></li>
- <li><a href="plug-in.html">TableTools plug-in buttons</a></li>
- <li><a href="pdf_message.html">Customising the PDF output (adding text and orientation)</a></li>
- </ul>
-
-
- <div id="footer" style="text-align:center;">
- <span style="font-size:10px;">
- TableTools and DataTables &copy; Allan Jardine 2009-2011.<br>
- Flash 10 save / copy operations are performed by a modified version of <a href="http://code.google.com/p/zeroclipboard/">Zero Clipboard</a>.<br>
- The icons used in the toolbar are modified from <a href="http://www.addictedtocoffee.de/">Oliver Twardowski's</a> <a href="http://www.smashingmagazine.com/2009/05/20/flavour-extended-the-ultimate-icon-set-for-web-designers/">Flavours Icon set</a>.
- </span>
- </div>
- </div>
- </body>
-</html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css b/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css
index 91aaa98f..ead46cef 100644
--- a/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css
+++ b/wqflask/wqflask/static/packages/bootstrap/css/bootstrap.css
@@ -915,7 +915,7 @@ textarea {
line-height: inherit;
}
a {
- color: #428bca;
+ color: #3071a9;
text-decoration: none;
}
a:hover,
@@ -3683,6 +3683,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
list-style: none;
}
.nav > li {
+ margin-right: 10px;
position: relative;
display: block;
}
@@ -3803,7 +3804,7 @@ select[multiple].input-group-sm > .input-group-btn > .btn {
.nav-pills > li.active > a:hover,
.nav-pills > li.active > a:focus {
color: #fff;
- background-color: #428bca;
+ background-color: #3071a9; /* Tab cell background color */
}
.nav-stacked > li {
float: none;
@@ -4485,7 +4486,7 @@ fieldset[disabled] .navbar-inverse .btn-link:focus {
z-index: 2;
color: #fff;
cursor: default;
- background-color: #428bca;
+ background-color: #3071a9;
border-color: #428bca;
}
.pagination > .disabled > span,
@@ -4667,7 +4668,7 @@ a.badge:focus {
}
a.list-group-item.active > .badge,
.nav-pills > .active > a > .badge {
- color: #428bca;
+ color: #3071a9;
background-color: #fff;
}
.nav-pills > li > a > .badge {
diff --git a/wqflask/wqflask/static/packages/bootstrap/css/non-responsive.css b/wqflask/wqflask/static/packages/bootstrap/css/non-responsive.css
index 9da73a8f..36affd72 100644
--- a/wqflask/wqflask/static/packages/bootstrap/css/non-responsive.css
+++ b/wqflask/wqflask/static/packages/bootstrap/css/non-responsive.css
@@ -6,7 +6,7 @@
/* Account for fixed navbar */
body {
- min-width: 1200px;
+ //min-width: 1200px;
padding-top: 70px;
padding-bottom: 30px;
}
@@ -28,7 +28,7 @@ body {
/* Reset the container */
.container {
- width: 1400px;
+ width: 100%;
max-width: none !important;
}
@@ -97,7 +97,7 @@ body {
.navbar .navbar-nav .open .dropdown-menu > .active > a:hover,
.navbar .navbar-nav .open .dropdown-menu > .active > a:focus {
color: #fff !important;
- background-color: #428bca !important;
+ background-color: #3071a9 !important;
}
.navbar .navbar-nav .open .dropdown-menu > .disabled > a,
.navbar .navbar-nav .open .dropdown-menu > .disabled > a:hover,
diff --git a/wqflask/wqflask/static/packages/ckeditor/CHANGES.md b/wqflask/wqflask/static/packages/ckeditor/CHANGES.md
deleted file mode 100644
index 9bfaef34..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/CHANGES.md
+++ /dev/null
@@ -1,671 +0,0 @@
-CKEditor 4 Changelog
-====================
-
-## CKEditor 4.4.5
-
-New Features:
-
-* [#12279](http://dev.ckeditor.com/ticket/12279): Added a possibility to pass a custom evaluator to [`node.getAscendant()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.node-method-getAscendant).
-
-Fixed Issues:
-
-* [#12423](http://dev.ckeditor.com/ticket/12423): [Safari7.1+] Fixed: *Enter* key moved cursor to a strange position.
-* [#12381](http://dev.ckeditor.com/ticket/12381): [iOS] Fixed: Selection issue. Thanks to [Remiremi](https://github.com/Remiremi)!
-* [#10804](http://dev.ckeditor.com/ticket/10804): Fixed: `CKEDITOR_GETURL` is not used with some plugins where it should be used. Thanks to [Thomas Andraschko](https://github.com/tandraschko)!
-* [#9137](http://dev.ckeditor.com/ticket/9137): Fixed: The `<base>` tag is not created when `<head>` has an attribute. Thanks to [naoki.fujikawa](https://github.com/naoki-fujikawa)!
-* [#12377](http://dev.ckeditor.com/ticket/12377): Fixed: Errors thrown in the [Image](http://ckeditor.com/addon/image) plugin when removing preview from the dialog window definition. Thanks to [Axinet](https://github.com/Axinet)!
-* [#12162](http://dev.ckeditor.com/ticket/12162): Fixed: Auto paragraphing and *Enter* key in nested editables.
-* [#12315](http://dev.ckeditor.com/ticket/12315): Fixed: Marked [`config.autoParagraph`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-autoParagraph) as deprecated.
-* [#12113](http://dev.ckeditor.com/ticket/12113): Fixed: A [code snippet](http://ckeditor.com/addon/codesnippet) should be presented in the [elements path](http://ckeditor.com/addon/elementspath) as "code snippet" (translatable).
-* [#12311](http://dev.ckeditor.com/ticket/12311): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) should also remove `<cite>` elements.
-* [#12261](http://dev.ckeditor.com/ticket/12261): Fixed: Filter has to be destroyed and removed from [`CKEDITOR.filter.instances`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-static-property-instances) on editor destroy.
-* [#12398](http://dev.ckeditor.com/ticket/12398): Fixed: [Maximize](http://ckeditor.com/addon/maximize) does not work on an instance without a [title](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title).
-* [#12097](http://dev.ckeditor.com/ticket/12097): Fixed: JAWS not reading the number of options correctly in the [Text Color and Background Color](http://ckeditor.com/addon/colorbutton) button menu.
-* [#12411](http://dev.ckeditor.com/ticket/12411): Fixed: [Page Break](http://ckeditor.com/addon/pagebreak) used directly in the editable breaks the editor.
-* [#12354](http://dev.ckeditor.com/ticket/12354): Fixed: Various issues in undo manager when holding keys.
-* [#12324](http://dev.ckeditor.com/ticket/12324): [IE8] Fixed: Undo steps are not recorded when changing the caret position by clicking below the body.
-* [#12332](http://dev.ckeditor.com/ticket/12332): Fixed: Lowered DOM events listeners' priorities in undo manager in order to avoid ambiguity.
-* [#12402](http://dev.ckeditor.com/ticket/12402): [Blink] Fixed: Workaround for Blink bug with `document.title` which breaks updating title in the full HTML mode.
-* [#12338](http://dev.ckeditor.com/ticket/12338): Fixed: The CKEditor package contains unoptimized images.
-
-
-## CKEditor 4.4.4
-
-Fixed Issues:
-
-* [#12268](http://dev.ckeditor.com/ticket/12268): Cleanup of [UI Color](http://ckeditor.com/addon/uicolor) YUI styles. Thanks to [CasherWest](https://github.com/CasherWest)!
-* [#12263](http://dev.ckeditor.com/ticket/12263): Fixed: [Paste from Word]((http://ckeditor.com/addon/pastefromword)) filter does not properly normalize semicolons style text. Thanks to [Alin Purcaru](https://github.com/mesmerizero)!
-* [#12243](http://dev.ckeditor.com/ticket/12243): Fixed: Text formatting lost when pasting from Word. Thanks to [Alin Purcaru](https://github.com/mesmerizero)!
-* [#111739](http://dev.ckeditor.com/ticket/11739): Fixed: `keypress` listeners should not be used in the undo manager. A complete rewrite of keyboard handling in the undo manager was made. Numerous smaller issues were fixed, among others:
- * [#10926](http://dev.ckeditor.com/ticket/10926): [Chrome@Android] Fixed: Typing does not record snapshots and does not fire the [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event.
- * [#11611](http://dev.ckeditor.com/ticket/11611): [Firefox] Fixed: The [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event is fired when pressing Arrow keys.
- * [#12219](http://dev.ckeditor.com/ticket/12219): [Safari] Fixed: Some modifications of the [`UndoManager.locked`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-property-locked) property violate strict mode in the [Undo](http://ckeditor.com/addon/undo) plugin.
-* [#10916](http://dev.ckeditor.com/ticket/10916): Fixed: [Magic Line](http://ckeditor.com/addon/magicline) icon in Right-To-Left environments.
-* [#11970](http://dev.ckeditor.com/ticket/11970): [IE] Fixed: CKEditor `paste` event is not fired when pasting with *Shift+Ins*.
-* [#12111](http://dev.ckeditor.com/ticket/12111): Fixed: Linked image attributes are not read when opening the image dialog window by doubleclicking.
-* [#10030](http://dev.ckeditor.com/ticket/10030): [IE] Fixed: Prevented "Unspecified Error" thrown in various cases when IE8-9 does not allow access to `document.activeElement`.
-* [#12273](http://dev.ckeditor.com/ticket/12273): Fixed: Applying block style in a description list breaks it.
-* [#12218](http://dev.ckeditor.com/ticket/12218): Fixed: Minor syntax issue in CSS files.
-* [#12178](http://dev.ckeditor.com/ticket/12178): [Blink/WebKit] Fixed: Iterator does not return the block if the selection is located at the end of it.
-* [#12185](http://dev.ckeditor.com/ticket/12185): [IE9QM] Fixed: Error thrown when moving the mouse over focused editor's scrollbar.
-* [#12215](http://dev.ckeditor.com/ticket/12215): Fixed: Basepath resolution does not recognize semicolon as a query separator.
-* [#12135](http://dev.ckeditor.com/ticket/12135): Fixed: [Remove Format](http://ckeditor.com/addon/removeformat) does not work on widgets.
-* [#12298](http://dev.ckeditor.com/ticket/12298): [IE11] Fixed: Clicking below `<body>` in Compatibility Mode will no longer reset selection to the first line.
-* [#12204](http://dev.ckeditor.com/ticket/12204): Fixed: Editor's voice label is not affected by [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title).
-* [#11915](http://dev.ckeditor.com/ticket/11915): Fixed: With [SCAYT](http://ckeditor.com/addon/scayt) enabled, cursor moves to the beginning of the first highlighted, misspelled word after typing or pasting into the editor.
-* [SCAYT](https://github.com/WebSpellChecker/ckeditor-plugin-scayt/issues/69): Fixed: Error thrown in the console after enabling [SCAYT](http://ckeditor.com/addon/scayt) and trying to add a new image.
-
-
-Other Changes:
-
-* [#12296](http://dev.ckeditor.com/ticket/12296): Merged `benderjs-ckeditor` into the main CKEditor repository.
-
-## CKEditor 4.4.3
-
-**Security Updates:**
-
-* Fixed XSS vulnerability in the Preview plugin reported by Mario Heiderich of [Cure53](https://cure53.de/).
-
-**An upgrade is highly recommended!**
-
-New Features:
-
-* [#12164](http://dev.ckeditor.com/ticket/12164): Added the "Justify" option to the "Horizontal Alignment" drop-down in the Table Cell Properties dialog window.
-
-Fixed Issues:
-
-* [#12110](http://dev.ckeditor.com/ticket/12110): Fixed: Editor crash after deleting a table. Thanks to [Alin Purcaru](https://github.com/mesmerizero)!
-* [#11897](http://dev.ckeditor.com/ticket/11897): Fixed: **Enter** key used in an empty list item creates a new line instead of breaking the list. Thanks to [noam-si](https://github.com/noam-si)!
-* [#12140](http://dev.ckeditor.com/ticket/12140): Fixed: Double-clicking linked widgets opens two dialog windows.
-* [#12132](http://dev.ckeditor.com/ticket/12132): Fixed: Image is inserted with `width` and `height` styles even when they are not allowed.
-* [#9317](http://dev.ckeditor.com/ticket/9317): [IE] Fixed: [`config.disableObjectResizing`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-disableObjectResizing) does not work on IE. **Note**: We were not able to fix this issue on IE11+ because necessary events stopped working. See a [last resort workaround](http://dev.ckeditor.com/ticket/9317#comment:16) and make sure to [support our complaint to Microsoft](https://connect.microsoft.com/IE/feedback/details/742593/please-respect-execcommand-enableobjectresizing-in-contenteditable-elements).
-* [#9638](http://dev.ckeditor.com/ticket/9638): Fixed: There should be no information about accessibility help available under the *Alt+0* keyboard shortcut if the [Accessibility Help](http://ckeditor.com/addon/a11yhelp) plugin is not available.
-* [#8117](http://dev.ckeditor.com/ticket/8117) and [#9186](http://dev.ckeditor.com/ticket/9186): Fixed: In HTML5 `<meta>` tags should be allowed everywhere, including inside the `<body>` element.
-* [#10422](http://dev.ckeditor.com/ticket/10422): Fixed: [`config.fillEmptyBlocks`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fillEmptyBlocks) not working properly if a function is specified.
-
-## CKEditor 4.4.2
-
-Important Notes:
-
-* The CKEditor testing environment is now publicly available. Read more about how to set up the environment and execute tests in the [CKEditor Testing Environment](http://docs.ckeditor.com/#!/guide/dev_tests) guide.
- Please note that the [`tests/`](https://github.com/ckeditor/ckeditor-dev/tree/master/tests) directory which contains editor tests is not available in release packages. It can only be found in the development version of CKEditor on [GitHub](https://github.com/ckeditor/ckeditor-dev/).
-
-New Features:
-
-* [#11909](http://dev.ckeditor.com/ticket/11909): Introduced a parameter to prevent the [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) method from recording undo snapshots.
-
-Fixed Issues:
-
-* [#11757](http://dev.ckeditor.com/ticket/11757): Fixed: Imperfections in the [Moono](http://ckeditor.com/addon/moono) skin. Thanks to [danyaPostfactum](https://github.com/danyaPostfactum)!
-* [#10091](http://dev.ckeditor.com/ticket/10091): Blockquote should be treated like an object by the styles system. Thanks to [dan-james-deeson](https://github.com/dan-james-deeson)!
-* [#11478](http://dev.ckeditor.com/ticket/11478): Fixed: Issue with passing jQuery objects to [adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) configuration.
-* [#10867](http://dev.ckeditor.com/ticket/10867): Fixed: Issue with setting encoded URI as image link.
-* [#11983](http://dev.ckeditor.com/ticket/11983): Fixed: Clicking a nested widget does not focus it. Additionally, performance of the [`widget.repository.getByElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-getByElement) method was improved.
-* [#12000](http://dev.ckeditor.com/ticket/12000): Fixed: Nested widgets should be initialized on [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData) and [`nestedEditable.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.nestedEditable-method-setData).
-* [#12022](http://dev.ckeditor.com/ticket/12022): Fixed: Outer widget's drag handler is not created at all if it has any nested widgets inside.
-* [#11960](http://dev.ckeditor.com/ticket/11960): [Blink/WebKit] Fixed: The caret should be scrolled into view on *Backspace* and *Delete* (covers only the merging blocks case).
-* [#11306](http://dev.ckeditor.com/ticket/11306): [OSX][Blink/WebKit] Fixed: No widget entries in the context menu on widget right-click.
-* [#11957](http://dev.ckeditor.com/ticket/11957): Fixed: Alignment labels in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window are not translated.
-* [#11980](http://dev.ckeditor.com/ticket/11980): [Blink/WebKit] Fixed: `<span>` elements created when joining adjacent elements (non-collapsed selection).
-* [#12009](http://dev.ckeditor.com/ticket/12009): [Nested widgets] Integration with the [Magic Line](http://ckeditor.com/addon/magicline) plugin.
-* [#11387](http://dev.ckeditor.com/ticket/11387): Fixed: `role="radiogroup"` should be applied only to radio inputs' container.
-* [#7975](http://dev.ckeditor.com/ticket/7975): [IE8] Fixed: Errors when trying to select an empty table cell.
-* [#11947](http://dev.ckeditor.com/ticket/11947): [Firefox+IE11] Fixed: *Shift+Enter* in lists produces two line breaks.
-* [#11972](http://dev.ckeditor.com/ticket/11972): Fixed: Feature detection in the [`element.setText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-setText) method should not trigger the layout engine.
-* [#7634](http://dev.ckeditor.com/ticket/7634): Fixed: The [Flash Dialog](http://ckeditor.com/addon/flash) plugin omits the `allowFullScreen` parameter in the editor data if set to `true`.
-* [#11910](http://dev.ckeditor.com/ticket/11910): Fixed: [Enhanced Image](http://ckeditor.com/addon/image2) does not take [`config.baseHref`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-baseHref) into account when updating image dimensions.
-* [#11753](http://dev.ckeditor.com/ticket/11753): Fixed: Wrong [`checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method value after focusing or blurring a widget.
-* [#11830](http://dev.ckeditor.com/ticket/11830): Fixed: Impossible to pass some arguments to [CKBuilder](https://github.com/ckeditor/ckbuilder) when using the `/dev/builder/build.sh` script.
-* [#11945](http://dev.ckeditor.com/ticket/11945): Fixed: [Form Elements](http://ckeditor.com/addon/forms) plugin should not change a core method.
-* [#11384](http://dev.ckeditor.com/ticket/11384): [IE9+] Fixed: `IndexSizeError` thrown when pasting into a non-empty selection anchored in one text node.
-
-## CKEditor 4.4.1
-
-New Features:
-
-* [#9661](http://dev.ckeditor.com/ticket/9661): Added the option to [configure](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-linkJavaScriptLinksAllowed) anchor tags with JavaScript code in the `href` attribute.
-
-Fixed Issues:
-
-* [#11861](http://dev.ckeditor.com/ticket/11861): [Webkit/Blink] Fixed: Span elements created while joining adjacent elements. **Note:** This patch only covers cases when *Backspace* or *Delete* is pressed on a collapsed (empty) selection. The remaining case, with a non-empty selection, will be fixed in the next release.
-* [#10714](http://dev.ckeditor.com/ticket/10714): [iOS] Fixed: Selection and drop-downs are broken if a touch event listener is used due to a [Webkit bug](https://bugs.webkit.org/show_bug.cgi?id=128924). Thanks to [Arty Gus](https://github.com/artygus)!
-* [#11911](http://dev.ckeditor.com/ticket/11911): Fixed setting the `dir` attribute for a preloaded language in [CKEDITOR.lang](http://docs.ckeditor.com/#!/api/CKEDITOR.lang). Thanks to [Akash Mohapatra](https://github.com/akashmohapatra)!
-* [#11926](http://dev.ckeditor.com/ticket/11926): Fixed: [Code Snippet](http://ckeditor.com/addon/codesnippet) does not decode HTML entities when loading code from the `<code>` element.
-* [#11223](http://dev.ckeditor.com/ticket/11223): Fixed: Issue when [Protected Source](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-protectedSource) was not working in the `<title>` element.
-* [#11859](http://dev.ckeditor.com/ticket/11859): Fixed: Removed the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin dependency from the [Code Snippet](http://ckeditor.com/addon/codesnippet) sample.
-* [#11754](http://dev.ckeditor.com/ticket/11754): [Chrome] Fixed: Infinite loop when content includes not closed attributes.
-* [#11848](http://dev.ckeditor.com/ticket/11848): [IE] Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) throwing an exception when there was no selection in the editor.
-* [#11801](http://dev.ckeditor.com/ticket/11801): Fixed: Editor anchors unavailable when linking the [Enhanced Image](http://ckeditor.com/addon/image2) widget.
-* [#11626](http://dev.ckeditor.com/ticket/11626): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) sets invalid column width.
-* [#11872](http://dev.ckeditor.com/ticket/11872): Made [`element.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-addClass) chainable symmetrically to [`element.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-removeClass).
-* [#11813](http://dev.ckeditor.com/ticket/11813): Fixed: Link lost while pasting a captioned image and restoring an undo snapshot ([Enhanced Image](http://ckeditor.com/addon/image2)).
-* [#11814](http://dev.ckeditor.com/ticket/11814): Fixed: _Link_ and _Unlink_ entries persistently displayed in the [Enhanced Image](http://ckeditor.com/addon/image2) context menu.
-* [#11839](http://dev.ckeditor.com/ticket/11839): [IE9] Fixed: The caret jumps out of the editable area when resizing the editor in the source mode.
-* [#11822](http://dev.ckeditor.com/ticket/11822): [Webkit] Fixed: Editing anchors by double-click is broken in some cases.
-* [#11823](http://dev.ckeditor.com/ticket/11823): [IE8] Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) throws an error over scrollbar.
-* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: It is not possible to change the language back to _Not set_ in the [Code Snippet](http://ckeditor.com/addon/codesnippet) dialog window.
-* [#11788](http://dev.ckeditor.com/ticket/11788): Fixed: [Filter](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied inside elements with the `contenteditable` attribute set to `true`.
-* [#11798](http://dev.ckeditor.com/ticket/11798): Fixed: Inserting a non-editable element inside a table cell breaks the table.
-* [#11793](http://dev.ckeditor.com/ticket/11793): Fixed: Drop-down is not "on" when clicking it while the editor is blurred.
-* [#11850](http://dev.ckeditor.com/ticket/11850): Fixed: Fake objects with the `contenteditable` attribute set to `false` are not downcasted properly.
-* [#11811](http://dev.ckeditor.com/ticket/11811): Fixed: Widget's data is not encoded correctly when passed to an attribute.
-* [#11777](http://dev.ckeditor.com/ticket/11777): Fixed encoding ampersand in the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin.
-* [#11880](http://dev.ckeditor.com/ticket/11880): [IE8-9] Fixed: Linked image has a default thick border.
-
-Other Changes:
-
-* [#11807](http://dev.ckeditor.com/ticket/11807): Updated jQuery version used in the sample to 1.11.0 and tested CKEditor jQuery Adapter with version 1.11.0 and 2.1.0.
-* [#9504](http://dev.ckeditor.com/ticket/9504): Stopped using deprecated `attribute.specified` in all browsers except Internet Explorer.
-* [#11809](http://dev.ckeditor.com/ticket/11809): Changed tab size in `<pre>` to 4 spaces.
-
-## CKEditor 4.4
-
-**Important Notes:**
-
-* Marked the [`editor.beforePaste`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-beforePaste) event as deprecated.
-* The default class of captioned images has changed to `image` (was: `caption`). Please note that once edited in CKEditor 4.4+, all existing images of the `caption` class (`<figure class="caption">`) will be [filtered out](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) unless the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option is set to `caption`. For backward compatibility (i.e. when upgrading), it is highly recommended to use this setting, which also helps prevent CSS conflicts, etc. This does not apply to new CKEditor integrations.
-* Widgets without defined buttons are no longer registered automatically to the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter). Before CKEditor 4.4 widgets were registered to the ACF which was an incorrect behavior ([#11567](http://dev.ckeditor.com/ticket/11567)). This change should not have any impact on standard scenarios, but if your button does not execute the widget command, you need to set [`allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-allowedContent) and [`requiredContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.feature-property-requiredContent) properties for it manually, because the editor will not be able to find them.
-* The [Show Borders](http://ckeditor.com/addon/showborders) plugin was added to the Standard installation package in order to ensure that unstyled tables are still visible for the user ([#11665](http://dev.ckeditor.com/ticket/11665)).
-* Since CKEditor 4.4 the editor instance should be passed to [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) methods to ensure full compatibility with other features (e.g. applying styles to widgets requires that). We ensured backward compatibility though, so the [`CKEDITOR.style`](http://docs.ckeditor.com/#!/api/CKEDITOR.style) will work even when the editor instance is not provided.
-
-New Features:
-
-* [#11297](http://dev.ckeditor.com/ticket/11297): Styles can now be applied to widgets. The definition of a style which can be applied to a specific widget must contain two additional properties &mdash; `type` and `widget`. Read more in the [Widget Styles](http://docs.ckeditor.com/#!/guide/dev_styles-section-widget-styles) section of the "Syles Drop-down" guide. Note that by default, widgets support only classes and no other attributes or styles. Related changes and features:
- * Introduced the [`CKEDITOR.style.addCustomHandler()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-static-method-addCustomHandler) method for registering custom style handlers.
- * The [`CKEDITOR.style.apply()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-apply) and [`CKEDITOR.style.remove()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-remove) methods are now called with an editor instance instead of the document so they can be reused by the [`CKEDITOR.editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) and [`CKEDITOR.editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) methods. Backward compatibility was preserved, but from CKEditor 4.4 it is highly recommended to pass an editor instead of a document to these methods.
- * Many new methods and properties were introduced in the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget) to make the handling of styles by widgets fully customizable. See: [`widget.definition.styleableElements`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleableElements), [`widget.definition.styleToAllowedContentRule`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-styleToAllowedContentRules), [`widget.addClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-addClass), [`widget.removeClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeClass), [`widget.getClasses()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-getClasses), [`widget.hasClass()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-hasClass), [`widget.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-applyStyle), [`widget.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-removeStyle), [`widget.checkStyleActive()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-method-checkStyleActive).
- * Integration with the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) required an introduction of the [`CKEDITOR.style.toAllowedContent()`](http://docs.ckeditor.com/#!/api/CKEDITOR.style-method-toAllowedContentRules) method which can be implemented by the custom style handler and if exists, it is used by the [`CKEDITOR.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter) to translate a style to [allowed content rules](http://docs.ckeditor.com/#!/api/CKEDITOR.filter.allowedContentRules).
-* [#11300](http://dev.ckeditor.com/ticket/11300): Various changes in the [Enhanced Image](http://ckeditor.com/addon/image2) plugin:
- * Introduced the [`config.image2_captionedClass`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_captionedClass) option to configure the class of captioned images.
- * Introduced the [`config.image2_alignClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-image2_alignClasses) option to configure the way images are aligned with CSS classes.
- If this setting is defined, the editor produces classes instead of inline styles for aligned images.
- * Default image caption can be translated (customized) with the `editor.lang.image2.captionPlaceholder` string.
-* [#11341](http://dev.ckeditor.com/ticket/11341): [Enhanced Image](http://ckeditor.com/addon/image2) plugin: It is now possible to add a link to any image type.
-* [#10202](http://dev.ckeditor.com/ticket/10202): Introduced wildcard support in the [Allowed Content Rules](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) format.
-* [#10276](http://dev.ckeditor.com/ticket/10276): Introduced blacklisting in the [Allowed Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter).
-* [#10480](http://dev.ckeditor.com/ticket/10480): Introduced code snippets with code highlighting. There are two versions available so far &mdash; the default [Code Snippet](http://ckeditor.com/addon/codesnippet) which uses the [highlight.js](http://highlightjs.org) library and the [Code Snippet GeSHi](http://ckeditor.com/addon/codesnippetgeshi) which uses the [GeSHi](http://qbnz.com/highlighter/) library.
-* [#11737](http://dev.ckeditor.com/ticket/11737): Introduced an option to prevent [filtering](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) of an element that matches custom criteria (see [`filter.addElementCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-method-addElementCallback)).
-* [#11532](http://dev.ckeditor.com/ticket/11532): Introduced the [`editor.addContentsCss()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addContentsCss) method that can be used for [adding custom CSS files](http://docs.ckeditor.com/#!/guide/plugin_sdk_styles).
-* [#11536](http://dev.ckeditor.com/ticket/11536): Added the [`CKEDITOR.tools.htmlDecode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-htmlDecode) method for decoding HTML entities.
-* [#11225](http://dev.ckeditor.com/ticket/11225): Introduced the [`CKEDITOR.tools.transparentImageData`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-property-transparentImageData) property which contains transparent image data to be used in CSS or as image source.
-
-Other Changes:
-
-* [#11377](http://dev.ckeditor.com/ticket/11377): Unified internal representation of empty anchors using the [fake objects](http://ckeditor.com/addon/fakeobjects).
-* [#11422](http://dev.ckeditor.com/ticket/11422): Removed Firefox 3.x, Internet Explorer 6 and Opera 12.x leftovers in code.
-* [#5217](http://dev.ckeditor.com/ticket/5217): Setting data (including switching between modes) creates a new undo snapshot. Besides that:
- * Introduced the [`editable.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-property-status) property.
- * Introduced a new `forceUpdate` option for the [`editor.lockSnapshot`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-lockSnapshot) event.
- * Fixed: Selection not being unlocked in inline editor after setting data ([#11500](http://dev.ckeditor.com/ticket/11500)).
-* The [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin was updated to the latest version.
-
-Fixed Issues:
-
-* [#10190](http://dev.ckeditor.com/ticket/10190): Fixed: Removing block style with [`editor.removeStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-removeStyle) should result in a paragraph and not a div.
-* [#11727](http://dev.ckeditor.com/ticket/11727): Fixed: The editor tries to select a non-editable image which was clicked.
-
-## CKEditor 4.3.5
-
-New Features:
-
-* Added new translation: Tatar.
-
-Fixed Issues:
-
-* [#11677](http://dev.ckeditor.com/ticket/11677): Fixed: Undo/Redo keystrokes are blocked in the source mode.
-* [#11717](http://dev.ckeditor.com/ticket/11717): [Document Properties](http://ckeditor.com/addon/docprops) plugin requires the [Color Dialog](http://ckeditor.com/addon/colordialog) plugin to work.
-
-## CKEditor 4.3.4
-
-Fixed Issues:
-
-* [#11597](http://dev.ckeditor.com/ticket/11597): [IE11] Fixed: Error thrown when trying to open the [preview](http://ckeditor.com/addon/preview) using the keyboard.
-* [#11544](http://dev.ckeditor.com/ticket/11544): [Placeholders](http://ckeditor.com/addon/placeholder) will no longer be upcasted in parents not accepting `<span>` elements.
-* [#8663](http://dev.ckeditor.com/ticket/8663): Fixed [`element.renameNode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-renameNode) not clearing the [`element.getName()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.element-method-getName) cache.
-* [#11574](http://dev.ckeditor.com/ticket/11574): Fixed: *Backspace* destroying the DOM structure if an inline editable is placed in a list item.
-* [#11603](http://dev.ckeditor.com/ticket/11603): Fixed: [Table Resize](http://ckeditor.com/addon/tableresize) attaches to tables outside the editable.
-* [#9205](http://dev.ckeditor.com/ticket/9205), [#7805](http://dev.ckeditor.com/ticket/7805), [#8216](http://dev.ckeditor.com/ticket/8216): Fixed: `{cke_protected_1}` appearing in data in various cases where HTML comments are placed next to `"` or `'`.
-* [#11635](http://dev.ckeditor.com/ticket/11635): Fixed: Some attributes are not protected before the content is passed through the fix bin.
-* [#11660](http://dev.ckeditor.com/ticket/11660): [IE] Fixed: Table content is lost when some extra markup is inside the table.
-* [#11641](http://dev.ckeditor.com/ticket/11641): Fixed: Switching between modes in the classic editor removes content styles for the inline editor.
-* [#11568](http://dev.ckeditor.com/ticket/11568): Fixed: [Styles](http://ckeditor.com/addon/stylescombo) drop-down list is not enabled on selection change.
-
-## CKEditor 4.3.3
-
-Fixed Issues:
-
-* [#11500](http://dev.ckeditor.com/ticket/11500): [Webkit/Blink] Fixed: Selection lost when setting data in another inline editor. Additionally, [`selection.removeAllRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-removeAllRanges) is now scoped to selection's [root](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-property-root).
-* [#11104](http://dev.ckeditor.com/ticket/11104): [IE] Fixed: Various issues with scrolling and selection when focusing widgets.
-* [#11487](http://dev.ckeditor.com/ticket/11487): Moving mouse over the [Enhanced Image](http://ckeditor.com/addon/image2) widget will no longer change the value returned by the [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) method.
-* [#8673](http://dev.ckeditor.com/ticket/8673): [WebKit] Fixed: Cannot select and remove the [Page Break](http://ckeditor.com/addon/pagebreak).
-* [#11413](http://dev.ckeditor.com/ticket/11413): Fixed: Incorrect [`editor.execCommand()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand) behavior.
-* [#11438](http://dev.ckeditor.com/ticket/11438): Splitting table cells vertically is no longer changing table structure.
-* [#8899](http://dev.ckeditor.com/ticket/8899): Fixed: Links in the [About CKEditor](http://ckeditor.com/addon/about) dialog window now open in a new browser window or tab.
-* [#11490](http://dev.ckeditor.com/ticket/11490): Fixed: [Menu button](http://ckeditor.com/addon/menubutton) panel not showing in the source mode.
-* [#11417](http://dev.ckeditor.com/ticket/11417): The [`widget.doubleclick`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget-event-doubleclick) event is not canceled anymore after editing was triggered.
-* [#11253](http://dev.ckeditor.com/ticket/11253): [IE] Fixed: Clipped upload button in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window.
-* [#11359](http://dev.ckeditor.com/ticket/11359): Standardized the way anchors are discovered by the [Link](http://ckeditor.com/addon/link) plugin.
-* [#11058](http://dev.ckeditor.com/ticket/11058): [IE8] Fixed: Error when deleting a table row.
-* [#11508](http://dev.ckeditor.com/ticket/11508): Fixed: [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor) discovering protected attributes within other attributes' values.
-* [#11533](http://dev.ckeditor.com/ticket/11533): Widgets: Avoid recurring upcasts if the DOM structure was modified during an upcast.
-* [#11400](http://dev.ckeditor.com/ticket/11400): Fixed: The [`domObject.removeAllListeners()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.domObject-method-removeAllListeners) method does not remove custom listeners completely.
-* [#11493](http://dev.ckeditor.com/ticket/11493): Fixed: The [`selection.getRanges()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-getRanges) method does not override cached ranges when used with the `onlyEditables` argument.
-* [#11390](http://dev.ckeditor.com/ticket/11390): [IE] All [XML](http://ckeditor.com/addon/xml) plugin [methods](http://docs.ckeditor.com/#!/api/CKEDITOR.xml) now work in IE10+.
-* [#11542](http://dev.ckeditor.com/ticket/11542): [IE11] Fixed: Blurry toolbar icons when Right-to-Left UI language is set.
-* [#11504](http://dev.ckeditor.com/ticket/11504): Fixed: When [`config.fullPage`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-fullPage) is set to `true`, entities are not encoded in editor output.
-* [#11004](http://dev.ckeditor.com/ticket/11004): Integrated [Enhanced Image](http://ckeditor.com/addon/image2) dialog window with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter).
-* [#11439](http://dev.ckeditor.com/ticket/11439): Fixed: Properties get cloned in the Cell Properties dialog window if multiple cells are selected.
-
-## CKEditor 4.3.2
-
-Fixed Issues:
-
-* [#11331](http://dev.ckeditor.com/ticket/11331): A menu button will have a changed label when selected instead of using the `aria-pressed` attribute.
-* [#11177](http://dev.ckeditor.com/ticket/11177): Widget drag handler improvements:
- * [#11176](http://dev.ckeditor.com/ticket/11176): Fixed: Initial position is not updated when the widget data object is empty.
- * [#11001](http://dev.ckeditor.com/ticket/11001): Fixed: Multiple synchronous layout recalculations are caused by initial drag handler positioning causing performance issues.
- * [#11161](http://dev.ckeditor.com/ticket/11161): Fixed: Drag handler is not repositioned in various situations.
- * [#11281](http://dev.ckeditor.com/ticket/11281): Fixed: Drag handler and mask are duplicated after widget reinitialization.
-* [#11207](http://dev.ckeditor.com/ticket/11207): [Firefox] Fixed: Misplaced [Enhanced Image](http://ckeditor.com/addon/image2) resizer in the inline editor.
-* [#11102](http://dev.ckeditor.com/ticket/11102): `CKEDITOR.template` improvements:
- * [#11102](http://dev.ckeditor.com/ticket/11102): Added newline character support.
- * [#11216](http://dev.ckeditor.com/ticket/11216): Added "\\'" substring support.
-* [#11121](http://dev.ckeditor.com/ticket/11121): [Firefox] Fixed: High Contrast mode is enabled when the editor is loaded in a hidden iframe.
-* [#11350](http://dev.ckeditor.com/ticket/11350): The default value of [`config.contentsCss`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-contentsCss) is affected by [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl).
-* [#11097](http://dev.ckeditor.com/ticket/11097): Improved the [Autogrow](http://ckeditor.com/addon/autogrow) plugin performance when dealing with very big tables.
-* [#11290](http://dev.ckeditor.com/ticket/11290): Removed redundant code in the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin.
-* [#11133](http://dev.ckeditor.com/ticket/11133): [Page Break](http://ckeditor.com/addon/pagebreak) becomes editable if pasted.
-* [#11126](http://dev.ckeditor.com/ticket/11126): Fixed: Native Undo executed once the bottom of the snapshot stack is reached.
-* [#11131](http://dev.ckeditor.com/ticket/11131): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Error thrown when switching to source mode if the selection was in widget's nested editable.
-* [#11139](http://dev.ckeditor.com/ticket/11139): [Div Editing Area](http://ckeditor.com/addon/divarea): Fixed: Elements Path is not cleared after switching to source mode.
-* [#10778](http://dev.ckeditor.com/ticket/10778): Fixed a bug with range enlargement. The range no longer expands to visible whitespace.
-* [#11146](http://dev.ckeditor.com/ticket/11146): [IE] Fixed: Preview window switches Internet Explorer to Quirks Mode.
-* [#10762](http://dev.ckeditor.com/ticket/10762): [IE] Fixed: JavaScript code displayed in preview window's URL bar.
-* [#11186](http://dev.ckeditor.com/ticket/11186): Introduced the [`widgets.repository.addUpcastCallback()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-addUpcastCallback) method that allows to block upcasting given element to a widget.
-* [#11307](http://dev.ckeditor.com/ticket/11307): Fixed: Paste as Plain Text conflict with the [MooTools](http://mootools.net) library.
-* [#11140](http://dev.ckeditor.com/ticket/11140): [IE11] Fixed: Anchors are not draggable.
-* [#11379](http://dev.ckeditor.com/ticket/11379): Changed default contents `line-height` to unitless values to avoid huge text overlapping (like in [#9696](http://dev.ckeditor.com/ticket/9696)).
-* [#10787](http://dev.ckeditor.com/ticket/10787): [Firefox] Fixed: Broken replacement of text while pasting into `div`-based editor.
-* [#10884](http://dev.ckeditor.com/ticket/10884): Widgets integration with the [Show Blocks](http://ckeditor.com/addon/showblocks) plugin.
-* [#11021](http://dev.ckeditor.com/ticket/11021): Fixed: An error thrown when selecting entire editable contents while fake selection is on.
-* [#11086](http://dev.ckeditor.com/ticket/11086): [IE8] Re-enable inline widgets drag&drop in Internet Explorer 8.
-* [#11372](http://dev.ckeditor.com/ticket/11372): Widgets: Special characters encoded twice in nested editables.
-* [#10068](http://dev.ckeditor.com/ticket/10068): Fixed: Support for protocol-relative URLs.
-* [#11283](http://dev.ckeditor.com/ticket/11283): [Enhanced Image](http://ckeditor.com/addon/image2): A `<div>` element with `text-align: center` and an image inside is not recognised correctly.
-* [#11196](http://dev.ckeditor.com/ticket/11196): [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp): Allowed additional keyboard button labels to be translated in the dialog window.
-
-## CKEditor 4.3.1
-
-**Important Notes:**
-
-* To match the naming convention, the `language` button is now `Language` ([#11201](http://dev.ckeditor.com/ticket/11201)).
-* [Enhanced Image](http://ckeditor.com/addon/image2) button, context menu, command, and icon names match those of the [Image](http://ckeditor.com/addon/image) plugin ([#11222](http://dev.ckeditor.com/ticket/11222)).
-
-Fixed Issues:
-
-* [#11244](http://dev.ckeditor.com/ticket/11244): Changed: The [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method now fires the [`widget.repository.checkWidgets`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-event-checkWidgets) event, so from CKEditor 4.3.1 it is preferred to use the method rather than fire the event.
-* [#11171](http://dev.ckeditor.com/ticket/11171): Fixed: [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) and [`editor.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText) methods do not call the [`widget.repository.checkWidgets()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.repository-method-checkWidgets) method.
-* [#11085](http://dev.ckeditor.com/ticket/11085): [IE8] Replaced preview generated by the [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget with a placeholder.
-* [#11044](http://dev.ckeditor.com/ticket/11044): Enhanced WAI-ARIA support for the [Language](http://ckeditor.com/addon/language) plugin drop-down menu.
-* [#11075](http://dev.ckeditor.com/ticket/11075): With drop-down menu button focused, pressing the *Down Arrow* key will now open the menu and focus its first option.
-* [#11165](http://dev.ckeditor.com/ticket/11165): Fixed: The [File Browser](http://ckeditor.com/addon/filebrowser) plugin cannot be removed from the editor.
-* [#11159](http://dev.ckeditor.com/ticket/11159): [IE9-10] [Enhanced Image](http://ckeditor.com/addon/image2): Fixed buggy discovery of image dimensions.
-* [#11101](http://dev.ckeditor.com/ticket/11101): Drop-down lists no longer break when given double quotes.
-* [#11077](http://dev.ckeditor.com/ticket/11077): [Enhanced Image](http://ckeditor.com/addon/image2): Empty undo step recorded when resizing the image.
-* [#10853](http://dev.ckeditor.com/ticket/10853): [Enhanced Image](http://ckeditor.com/addon/image2): Widget has paragraph wrapper when de-captioning unaligned image.
-* [#11198](http://dev.ckeditor.com/ticket/11198): Widgets: Drag handler is not fully visible when an inline widget is in a heading.
-* [#11132](http://dev.ckeditor.com/ticket/11132): [Firefox] Fixed: Caret is lost after drag and drop of an inline widget.
-* [#11182](http://dev.ckeditor.com/ticket/11182): [IE10-11] Fixed: Editor crashes (IE11) or works with minor issues (IE10) if a page is loaded in Quirks Mode. See [`env.quirks`](http://docs.ckeditor.com/#!/api/CKEDITOR.env-property-quirks) for more details.
-* [#11204](http://dev.ckeditor.com/ticket/11204): Added `figure` and `figcaption` styles to the `contents.css` file so [Enhanced Image](http://ckeditor.com/addon/image2) looks nicer.
-* [#11202](http://dev.ckeditor.com/ticket/11202): Fixed: No newline in [BBCode](http://ckeditor.com/addon/bbcode) mode.
-* [#10890](http://dev.ckeditor.com/ticket/10890): Fixed: Error thrown when pressing the *Delete* key in a list item.
-* [#10055](http://dev.ckeditor.com/ticket/10055): [IE8-10] Fixed: *Delete* pressed on a selected image causes the browser to go back.
-* [#11183](http://dev.ckeditor.com/ticket/11183): Fixed: Inserting a horizontal rule or a table in multiple row selection causes a browser crash. Additionally, the [`editor.insertElement()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertElement) method does not insert the element into every range of a selection any more.
-* [#11042](http://dev.ckeditor.com/ticket/11042): Fixed: Selection made on an element containing a non-editable element was not auto faked.
-* [#11125](http://dev.ckeditor.com/ticket/11125): Fixed: Keyboard navigation through menu and drop-down items will now cycle.
-* [#11011](http://dev.ckeditor.com/ticket/11011): Fixed: The [`editor.applyStyle()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-applyStyle) method removes attributes from nested elements.
-* [#11179](http://dev.ckeditor.com/ticket/11179): Fixed: [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy) does not cleanup content generated by the [Table Resize](http://ckeditor.com/addon/tableresize) plugin for inline editors.
-* [#11237](http://dev.ckeditor.com/ticket/11237): Fixed: Table border attribute value is deleted when pasting content from Microsoft Word.
-* [#11250](http://dev.ckeditor.com/ticket/11250): Fixed: HTML entities inside the `<textarea>` element are not encoded.
-* [#11260](http://dev.ckeditor.com/ticket/11260): Fixed: Initially disabled buttons are not read by JAWS as disabled.
-* [#11200](http://dev.ckeditor.com/ticket/11200): Added [Clipboard](http://ckeditor.com/addon/clipboard) plugin as a dependency for [Widget](http://ckeditor.com/addon/widget) to fix drag and drop.
-
-## CKEditor 4.3
-
-New Features:
-
-* [#10612](http://dev.ckeditor.com/ticket/10612): Internet Explorer 11 support.
-* [#10869](http://dev.ckeditor.com/ticket/10869): Widgets: Added better integration with the [Elements Path](http://ckeditor.com/addon/elementspath) plugin.
-* [#10886](http://dev.ckeditor.com/ticket/10886): Widgets: Added tooltip to the drag handle.
-* [#10933](http://dev.ckeditor.com/ticket/10933): Widgets: Introduced drag and drop of block widgets with the [Line Utilities](http://ckeditor.com/addon/lineutils) plugin.
-* [#10936](http://dev.ckeditor.com/ticket/10936): Widget System changes for easier integration with other dialog systems.
-* [#10895](http://dev.ckeditor.com/ticket/10895): [Enhanced Image](http://ckeditor.com/addon/image2): Added file browser integration.
-* [#11002](http://dev.ckeditor.com/ticket/11002): Added the [`draggable`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget.definition-property-draggable) option to disable drag and drop support for widgets.
-* [#10937](http://dev.ckeditor.com/ticket/10937): [Mathematical Formulas](http://ckeditor.com/addon/mathjax) widget improvements:
- * loading indicator ([#10948](http://dev.ckeditor.com/ticket/10948)),
- * applying paragraph changes (like font color change) to iframe ([#10841](http://dev.ckeditor.com/ticket/10841)),
- * Firefox and IE9 clipboard fixes ([#10857](http://dev.ckeditor.com/ticket/10857)),
- * fixing same origin policy issue ([#10840](http://dev.ckeditor.com/ticket/10840)),
- * fixing undo bugs ([#10842](http://dev.ckeditor.com/ticket/10842), [#10930](http://dev.ckeditor.com/ticket/10930)),
- * fixing other minor bugs.
-* [#10862](http://dev.ckeditor.com/ticket/10862): [Placeholder](http://ckeditor.com/addon/placeholder) plugin was rewritten as a widget.
-* [#10822](http://dev.ckeditor.com/ticket/10822): Added styles system integration with non-editable elements (for example widgets) and their nested editables. Styles cannot change non-editable content and are applied in nested editable only if allowed by its type and content filter.
-* [#10856](http://dev.ckeditor.com/ticket/10856): Menu buttons will now toggle the visibility of their panels when clicked multiple times. [Language](http://ckeditor.com/addon/language) plugin fixes: Added active language highlighting, added an option to remove the language.
-* [#10028](http://dev.ckeditor.com/ticket/10028): New [`config.dialog_noConfirmCancel`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-dialog_noConfirmCancel) configuration option that eliminates the need to confirm closing of a dialog window when the user changed any of its fields.
-* [#10848](http://dev.ckeditor.com/ticket/10848): Integrate remaining plugins ([Styles](http://ckeditor.com/addon/stylescombo), [Format](http://ckeditor.com/addon/format), [Font](http://ckeditor.com/addon/font), [Color Button](http://ckeditor.com/addon/colorbutton), [Language](http://ckeditor.com/addon/language) and [Indent](http://ckeditor.com/addon/indent)) with [active filter](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter).
-* [#10855](http://dev.ckeditor.com/ticket/10855): Change the extension of emoticons in the [BBCode](http://ckeditor.com/addon/bbcode) sample from GIF to PNG.
-
-Fixed Issues:
-
-* [#10831](http://dev.ckeditor.com/ticket/10831): [Enhanced Image](http://ckeditor.com/addon/image2): Merged `image2inline` and `image2block` into one `image2` widget.
-* [#10835](http://dev.ckeditor.com/ticket/10835): [Enhanced Image](http://ckeditor.com/addon/image2): Improved visibility of the resize handle.
-* [#10836](http://dev.ckeditor.com/ticket/10836): [Enhanced Image](http://ckeditor.com/addon/image2): Preserve custom mouse cursor while resizing the image.
-* [#10939](http://dev.ckeditor.com/ticket/10939): [Firefox] [Enhanced Image](http://ckeditor.com/addon/image2): hovering the image causes it to change.
-* [#10866](http://dev.ckeditor.com/ticket/10866): Fixed: Broken *Tab* key navigation in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window.
-* [#10833](http://dev.ckeditor.com/ticket/10833): Fixed: *Lock ratio* option should be on by default in the [Enhanced Image](http://ckeditor.com/addon/image2) dialog window.
-* [#10881](http://dev.ckeditor.com/ticket/10881): Various improvements to *Enter* key behavior in nested editables.
-* [#10879](http://dev.ckeditor.com/ticket/10879): [Remove Format](http://ckeditor.com/addon/removeformat) should not leak from a nested editable.
-* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [WebSpellChecker](http://ckeditor.com/addon/wsc) fails to apply changes if a nested editable was focused.
-* [#10877](http://dev.ckeditor.com/ticket/10877): Fixed: [SCAYT](http://ckeditor.com/addon/wsc) blocks typing in nested editables.
-* [#11079](http://dev.ckeditor.com/ticket/11079): Add button icons to the [Placeholder](http://ckeditor.com/addon/placeholder) sample.
-* [#10870](http://dev.ckeditor.com/ticket/10870): The `paste` command is no longer being disabled when the clipboard is empty.
-* [#10854](http://dev.ckeditor.com/ticket/10854): Fixed: Firefox prepends `<br>` to `<body>`, so it is stripped by the HTML data processor.
-* [#10823](http://dev.ckeditor.com/ticket/10823): Fixed: [Link](http://ckeditor.com/addon/link) plugin does not work with non-editable content.
-* [#10828](http://dev.ckeditor.com/ticket/10828): [Magic Line](http://ckeditor.com/addon/magicline) integration with the Widget System.
-* [#10865](http://dev.ckeditor.com/ticket/10865): Improved hiding copybin, so copying widgets works smoothly.
-* [#11066](http://dev.ckeditor.com/ticket/11066): Widget's private parts use CSS reset.
-* [#11027](http://dev.ckeditor.com/ticket/11027): Fixed: Block commands break on widgets; added the [`contentDomInvalidated`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-contentDomInvalidated) event.
-* [#10430](http://dev.ckeditor.com/ticket/10430): Resolve dependence of the [Image](http://ckeditor.com/addon/image) plugin on the [Form Elements](http://ckeditor.com/addon/forms) plugin.
-* [#10911](http://dev.ckeditor.com/ticket/10911): Fixed: Browser *Alt* hotkeys will no longer be blocked while a widget is focused.
-* [#11082](http://dev.ckeditor.com/ticket/11082): Fixed: Selected widget is not copied or cut when using toolbar buttons or context menu.
-* [#11083](http://dev.ckeditor.com/ticket/11083): Fixed list and div element application to block widgets.
-* [#10887](http://dev.ckeditor.com/ticket/10887): Internet Explorer 8 compatibility issues related to the Widget System.
-* [#11074](http://dev.ckeditor.com/ticket/11074): Temporarily disabled inline widget drag and drop, because of seriously buggy native `range#moveToPoint` method.
-* [#11098](http://dev.ckeditor.com/ticket/11098): Fixed: Wrong selection position after undoing widget drag and drop.
-* [#11110](http://dev.ckeditor.com/ticket/11110): Fixed: IFrame and Flash objects are being incorrectly pasted in certain conditions.
-* [#11129](http://dev.ckeditor.com/ticket/11129): Page break is lost when loading data.
-* [#11123](http://dev.ckeditor.com/ticket/11123): [Firefox] Widget is destroyed after being dragged outside of `<body>`.
-* [#11124](http://dev.ckeditor.com/ticket/11124): Fixed the [Elements Path](http://ckeditor.com/addon/elementspath) in an editor using the [Div Editing Area](http://ckeditor.com/addon/divarea).
-
-## CKEditor 4.3 Beta
-
-New Features:
-
-* [#9764](http://dev.ckeditor.com/ticket/9764): Widget System.
- * [Widget plugin](http://ckeditor.com/addon/widget) introducing the [Widget API](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.widget).
- * New [`editor.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) and [`editor.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-shiftEnterMode) properties &ndash; normalized versions of [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) and [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode).
- * Dynamic editor settings. Starting from CKEditor 4.3 Beta, *Enter* mode values and [content filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) instances may be changed dynamically (for example when the caret was placed in an element in which editor features should be adjusted). When you are implementing a new editor feature, you should base its behavior on [dynamic](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) or [static](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-enterMode) *Enter* mode values depending on whether this feature works in selection context or globally on editor content.
- * Dynamic *Enter* mode values &ndash; [`editor.setActiveEnterMode()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveEnterMode) method, [`editor.activeEnterModeChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeEnterModeChange) event, and two properties: [`editor.activeEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeEnterMode) and [`editor.activeShiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeShiftEnterMode).
- * Dynamic content filter instances &ndash; [`editor.setActiveFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setActiveFilter) method, [`editor.activeFilterChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-activeFilterChange) event, and [`editor.activeFilter`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-activeFilter) property.
- * "Fake" selection was introduced. It makes it possible to virtually select any element when the real selection remains hidden. See the [`selection.fake()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.selection-method-fake) method.
- * Default [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter) rules are not applied to non-editable elements (elements with `contenteditable` attribute set to `false` and their descendants) anymore. To add a rule which will be applied to all elements you need to pass an additional argument to the [`filter.addRules()`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter-method-addRules) method.
- * Dozens of new methods were introduced &ndash; most interesting ones:
- * [`document.find()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-find),
- * [`document.findOne()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.document-method-findOne),
- * [`editable.insertElementIntoRange()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertElementIntoRange),
- * [`range.moveToClosestEditablePosition()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-moveToClosestEditablePosition),
- * New methods for [`htmlParser.node`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.node) and [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element).
-* [#10659](http://dev.ckeditor.com/ticket/10659): New [Enhanced Image](http://ckeditor.com/addon/image2) plugin that introduces a widget with integrated image captions, an option to center images, and dynamic "click and drag" resizing.
-* [#10664](http://dev.ckeditor.com/ticket/10664): New [Mathematical Formulas](http://ckeditor.com/addon/mathjax) plugin that introduces the MathJax widget.
-* [#7987](https://dev.ckeditor.com/ticket/7987): New [Language](http://ckeditor.com/addon/language) plugin that implements Language toolbar button to support [WCAG 3.1.2 Language of Parts](http://www.w3.org/TR/UNDERSTANDING-WCAG20/meaning-other-lang-id.html).
-* [#10708](http://dev.ckeditor.com/ticket/10708): New [smileys](http://ckeditor.com/addon/smiley).
-
-## CKEditor 4.2.3
-
-Fixed Issues:
-
-* [#10994](http://dev.ckeditor.com/ticket/10994): Fixed: Loading external jQuery library when opening the [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) sample directly from file.
-* [#10975](http://dev.ckeditor.com/ticket/10975): [IE] Fixed: Error thrown while opening the color palette.
-* [#9929](http://dev.ckeditor.com/ticket/9929): [Blink/WebKit] Fixed: A non-breaking space is created once a character is deleted and a regular space is typed.
-* [#10963](http://dev.ckeditor.com/ticket/10963): Fixed: JAWS issue with the keyboard shortcut for [Magic Line](http://ckeditor.com/addon/magicline).
-* [#11096](http://dev.ckeditor.com/ticket/11096): Fixed: TypeError: Object has no method 'is'.
-
-## CKEditor 4.2.2
-
-Fixed Issues:
-
-* [#9314](http://dev.ckeditor.com/ticket/9314): Fixed: Incorrect error message on closing a dialog window without saving changs.
-* [#10308](http://dev.ckeditor.com/ticket/10308): [IE10] Fixed: Unspecified error when deleting a row.
-* [#10945](http://dev.ckeditor.com/ticket/10945): [Chrome] Fixed: Clicking with a mouse inside the editor does not show the caret.
-* [#10912](http://dev.ckeditor.com/ticket/10912): Prevent default action when content of a non-editable link is clicked.
-* [#10913](http://dev.ckeditor.com/ticket/10913): Fixed [`CKEDITOR.plugins.addExternal()`](http://docs.ckeditor.com/#!/api/CKEDITOR.resourceManager-method-addExternal) not handling paths including file name specified.
-* [#10666](http://dev.ckeditor.com/ticket/10666): Fixed [`CKEDITOR.tools.isArray()`](http://docs.ckeditor.com/#!/api/CKEDITOR.tools-method-isArray) not working cross frame.
-* [#10910](http://dev.ckeditor.com/ticket/10910): [IE9] Fixed JavaScript error thrown in Compatibility Mode when clicking and/or typing in the editing area.
-* [#10868](http://dev.ckeditor.com/ticket/10868): [IE8] Prevent the browser from crashing when applying the Inline Quotation style.
-* [#10915](http://dev.ckeditor.com/ticket/10915): Fixed: Invalid CSS filter in the Kama skin.
-* [#10914](http://dev.ckeditor.com/ticket/10914): Plugins [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock) are now included in the build configuration.
-* [#10812](http://dev.ckeditor.com/ticket/10812): Fixed [`range.createBookmark2()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-createBookmark2) incorrectly normalizing offsets. This bug was causing many issues: [#10850](http://dev.ckeditor.com/ticket/10850), [#10842](http://dev.ckeditor.com/ticket/10842).
-* [#10951](http://dev.ckeditor.com/ticket/10951): Reviewed and optimized focus handling on panels (combo, menu buttons, color buttons, and context menu) to enhance accessibility. Fixed [#10705](http://dev.ckeditor.com/ticket/10705), [#10706](http://dev.ckeditor.com/ticket/10706) and [#10707](http://dev.ckeditor.com/ticket/10707).
-* [#10704](http://dev.ckeditor.com/ticket/10704): Fixed a JAWS issue with the Select Color dialog window title not being announced.
-* [#10753](http://dev.ckeditor.com/ticket/10753): The floating toolbar in inline instances now has a dedicated accessibility label.
-
-## CKEditor 4.2.1
-
-Fixed Issues:
-
-* [#10301](http://dev.ckeditor.com/ticket/10301): [IE9-10] Undo fails after 3+ consecutive paste actions with a JavaScript error.
-* [#10689](http://dev.ckeditor.com/ticket/10689): Save toolbar button saves only the first editor instance.
-* [#10368](http://dev.ckeditor.com/ticket/10368): Move language reading direction definition (`dir`) from main language file to core.
-* [#9330](http://dev.ckeditor.com/ticket/9330): Fixed pasting anchors from MS Word.
-* [#8103](http://dev.ckeditor.com/ticket/8103): Fixed pasting nested lists from MS Word.
-* [#9958](http://dev.ckeditor.com/ticket/9958): [IE9] Pressing the "OK" button will trigger the `onbeforeunload` event in the popup dialog.
-* [#10662](http://dev.ckeditor.com/ticket/10662): Fixed styles from the Styles drop-down list not registering to the ACF in case when the [Shared Spaces plugin](http://ckeditor.com/addon/sharedspace) is used.
-* [#9654](http://dev.ckeditor.com/ticket/9654): Problems with Internet Explorer 10 Quirks Mode.
-* [#9816](http://dev.ckeditor.com/ticket/9816): Floating toolbar does not reposition vertically in several cases.
-* [#10646](http://dev.ckeditor.com/ticket/10646): Removing a selected sublist or nested table with *Backspace/Delete* removes the parent element.
-* [#10623](http://dev.ckeditor.com/ticket/10623): [WebKit] Page is scrolled when opening a drop-down list.
-* [#10004](http://dev.ckeditor.com/ticket/10004): [ChromeVox] Button names are not announced.
-* [#10731](http://dev.ckeditor.com/ticket/10731): [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin breaks cloning of editor configuration.
-* It is now possible to set per instance [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin configuration instead of setting the configuration globally.
-
-## CKEditor 4.2
-
-**Important Notes:**
-
-* Dropped compatibility support for Internet Explorer 7 and Firefox 3.6.
-
-* Both the Basic and the Standard distribution packages will not contain the new [Indent Block](http://ckeditor.com/addon/indentblock) plugin. Because of this the [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) might remove block indentations from existing contents. If you want to prevent this, either [add an appropriate ACF rule to your filter](http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules) or create a custom build based on the Basic/Standard package and add the Indent Block plugin in [CKBuilder](http://ckeditor.com/builder).
-
-New Features:
-
-* [#10027](http://dev.ckeditor.com/ticket/10027): Separated list and block indentation into two plugins: [Indent List](http://ckeditor.com/addon/indentlist) and [Indent Block](http://ckeditor.com/addon/indentblock).
-* [#8244](http://dev.ckeditor.com/ticket/8244): Use *(Shift+)Tab* to indent and outdent lists.
-* [#10281](http://dev.ckeditor.com/ticket/10281): The [jQuery Adapter](http://docs.ckeditor.com/#!/guide/dev_jquery) is now available. Several jQuery-related issues fixed: [#8261](http://dev.ckeditor.com/ticket/8261), [#9077](http://dev.ckeditor.com/ticket/9077), [#8710](http://dev.ckeditor.com/ticket/8710), [#8530](http://dev.ckeditor.com/ticket/8530), [#9019](http://dev.ckeditor.com/ticket/9019), [#6181](http://dev.ckeditor.com/ticket/6181), [#7876](http://dev.ckeditor.com/ticket/7876), [#6906](http://dev.ckeditor.com/ticket/6906).
-* [#10042](http://dev.ckeditor.com/ticket/10042): Introduced [`config.title`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-title) setting to change the human-readable title of the editor.
-* [#9794](http://dev.ckeditor.com/ticket/9794): Added [`editor.change`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-change) event.
-* [#9923](http://dev.ckeditor.com/ticket/9923): HiDPI support in the editor UI. HiDPI icons for [Moono skin](http://ckeditor.com/addon/moono) added.
-* [#8031](http://dev.ckeditor.com/ticket/8031): Handle `required` attributes on `<textarea>` elements &mdash; introduced [`editor.required`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-required) event.
-* [#10280](http://dev.ckeditor.com/ticket/10280): Ability to replace `<textarea>` elements with the inline editor.
-
-Fixed Issues:
-
-* [#10599](http://dev.ckeditor.com/ticket/10599): [Indent](http://ckeditor.com/addon/indent) plugin is no longer required by the [List](http://ckeditor.com/addon/list) plugin.
-* [#10370](http://dev.ckeditor.com/ticket/10370): Inconsistency in data events between framed and inline editors.
-* [#10438](http://dev.ckeditor.com/ticket/10438): [FF, IE] No selection is done on an editable element on executing [`editor.setData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData).
-
-## CKEditor 4.1.3
-
-New Features:
-
-* Added new translation: Indonesian.
-
-Fixed Issues:
-
-* [#10644](http://dev.ckeditor.com/ticket/10644): Fixed a critical bug when pasting plain text in Blink-based browsers.
-* [#5189](http://dev.ckeditor.com/ticket/5189): [Find/Replace](http://ckeditor.com/addon/find) dialog window: rename "Cancel" button to "Close".
-* [#10562](http://dev.ckeditor.com/ticket/10562): [Housekeeping] Unified CSS gradient filter formats in the [Moono](http://ckeditor.com/addon/moono) skin.
-* [#10537](http://dev.ckeditor.com/ticket/10537): Advanced Content Filter should register a default rule for [`config.shiftEnterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode).
-* [#10610](http://dev.ckeditor.com/ticket/10610): [`CKEDITOR.dialog.addIframe()`](http://docs.ckeditor.com/#!/api/CKEDITOR.dialog-static-method-addIframe) incorrectly sets the iframe size in dialog windows.
-
-## CKEditor 4.1.2
-
-New Features:
-
-* Added new translation: Sinhala.
-
-Fixed Issues:
-
-* [#10339](http://dev.ckeditor.com/ticket/10339): Fixed: Error thrown when inserted data was totally stripped out after filtering and processing.
-* [#10298](http://dev.ckeditor.com/ticket/10298): Fixed: Data processor breaks attributes containing protected parts.
-* [#10367](http://dev.ckeditor.com/ticket/10367): Fixed: [`editable.insertText()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editable-method-insertText) loses characters when `RegExp` replace controls are being inserted.
-* [#10165](http://dev.ckeditor.com/ticket/10165): [IE] Access denied error when `document.domain` has been altered.
-* [#9761](http://dev.ckeditor.com/ticket/9761): Update the *Backspace* key state in [`keystrokeHandler.blockedKeystrokes`](http://docs.ckeditor.com/#!/api/CKEDITOR.keystrokeHandler-property-blockedKeystrokes) when calling [`editor.setReadOnly()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly).
-* [#6504](http://dev.ckeditor.com/ticket/6504): Fixed: Race condition while loading several [`config.customConfig`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-customConfig) files.
-* [#10146](http://dev.ckeditor.com/ticket/10146): [Firefox] Empty lines are being removed while [`config.enterMode`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode) is [`CKEDITOR.ENTER_BR`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-ENTER_BR).
-* [#10360](http://dev.ckeditor.com/ticket/10360): Fixed: ARIA `role="application"` should not be used for dialog windows.
-* [#10361](http://dev.ckeditor.com/ticket/10361): Fixed: ARIA `role="application"` should not be used for floating panels.
-* [#10510](http://dev.ckeditor.com/ticket/10510): Introduced unique voice labels to differentiate between different editor instances.
-* [#9945](http://dev.ckeditor.com/ticket/9945): [iOS] Scrolling not possible on iPad.
-* [#10389](http://dev.ckeditor.com/ticket/10389): Fixed: Invalid HTML in the "Text and Table" template.
-* [WebSpellChecker](http://ckeditor.com/addon/wsc) plugin user interface was changed to match CKEditor 4 style.
-
-## CKEditor 4.1.1
-
-New Features:
-
-* Added new translation: Albanian.
-
-Fixed Issues:
-
-* [#10172](http://dev.ckeditor.com/ticket/10172): Pressing *Delete* or *Backspace* in an empty table cell moves the cursor to the next/previous cell.
-* [#10219](http://dev.ckeditor.com/ticket/10219): Error thrown when destroying an editor instance in parallel with a `mouseup` event.
-* [#10265](http://dev.ckeditor.com/ticket/10265): Wrong loop type in the [File Browser](http://ckeditor.com/addon/filebrowser) plugin.
-* [#10249](http://dev.ckeditor.com/ticket/10249): Wrong undo/redo states at start.
-* [#10268](http://dev.ckeditor.com/ticket/10268): [Show Blocks](http://ckeditor.com/addon/showblocks) does not recover after switching to Source view.
-* [#9995](http://dev.ckeditor.com/ticket/9995): HTML code in the `<textarea>` should not be modified by the [`htmlDataProcessor`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlDataProcessor).
-* [#10320](http://dev.ckeditor.com/ticket/10320): [Justify](http://ckeditor.com/addon/justify) plugin should add elements to Advanced Content Filter based on current [Enter mode](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode).
-* [#10260](http://dev.ckeditor.com/ticket/10260): Fixed: Advanced Content Filter blocks [`tabSpaces`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-tabSpaces). Unified `data-cke-*` attributes filtering.
-* [#10315](http://dev.ckeditor.com/ticket/10315): [WebKit] [Undo manager](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager) should not record snapshots after a filling character was added/removed.
-* [#10291](http://dev.ckeditor.com/ticket/10291): [WebKit] Space after a filling character should be secured.
-* [#10330](http://dev.ckeditor.com/ticket/10330): [WebKit] The filling character is not removed on `keydown` in specific cases.
-* [#10285](http://dev.ckeditor.com/ticket/10285): Fixed: Styled text pasted from MS Word causes an infinite loop.
-* [#10131](http://dev.ckeditor.com/ticket/10131): Fixed: [`undoManager.update()`](http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.undo.UndoManager-method-update) does not refresh the command state.
-* [#10337](http://dev.ckeditor.com/ticket/10337): Fixed: Unable to remove `<s>` using [Remove Format](http://ckeditor.com/addon/removeformat).
-
-## CKEditor 4.1
-
-Fixed Issues:
-
-* [#10192](http://dev.ckeditor.com/ticket/10192): Closing lists with the *Enter* key does not work with [Advanced Content Filter](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) in several cases.
-* [#10191](http://dev.ckeditor.com/ticket/10191): Fixed allowed content rules unification, so the [`filter.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.filter-property-allowedContent) property always contains rules in the same format.
-* [#10224](http://dev.ckeditor.com/ticket/10224): Advanced Content Filter does not remove non-empty `<a>` elements anymore.
-* Minor issues in plugin integration with Advanced Content Filter:
- * [#10166](http://dev.ckeditor.com/ticket/10166): Added transformation from the `align` attribute to `float` style to preserve backward compatibility after the introduction of Advanced Content Filter.
- * [#10195](http://dev.ckeditor.com/ticket/10195): [Image](http://ckeditor.com/addon/image) plugin no longer registers rules for links to Advanced Content Filter.
- * [#10213](http://dev.ckeditor.com/ticket/10213): [Justify](http://ckeditor.com/addon/justify) plugin is now correctly registering rules to Advanced Content Filter when [`config.justifyClasses`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-justifyClasses) is defined.
-
-## CKEditor 4.1 RC
-
-New Features:
-
-* [#9829](http://dev.ckeditor.com/ticket/9829): Advanced Content Filter - data and features activation based on editor configuration.
-
- Brand new data filtering system that works in 2 modes:
-
- * Based on loaded features (toolbar items, plugins) - the data will be filtered according to what the editor in its
- current configuration can handle.
- * Based on [`config.allowedContent`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent) rules - the data
- will be filtered and the editor features (toolbar items, commands, keystrokes) will be enabled if they are allowed.
-
- See the `datafiltering.html` sample, [guides](http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter) and [`CKEDITOR.filter` API documentation](http://docs.ckeditor.com/#!/api/CKEDITOR.filter).
-* [#9387](http://dev.ckeditor.com/ticket/9387): Reintroduced [Shared Spaces](http://ckeditor.com/addon/sharedspace) - the ability to display toolbar and bottom editor space in selected locations and to share them by different editor instances.
-* [#9907](http://dev.ckeditor.com/ticket/9907): Added the [`contentPreview`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-contentPreview) event for preview data manipulation.
-* [#9713](http://dev.ckeditor.com/ticket/9713): Introduced the [Source Dialog](http://ckeditor.com/addon/sourcedialog) plugin that brings raw HTML editing for inline editor instances.
-* Included in [#9829](http://dev.ckeditor.com/ticket/9829): Introduced new events, [`toHtml`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toHtml) and [`toDataFormat`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-toDataFormat), allowing for better integration with data processing.
-* [#9981](http://dev.ckeditor.com/ticket/9981): Added ability to filter [`htmlParser.fragment`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.fragment), [`htmlParser.element`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.element) etc. by many [`htmlParser.filter`](http://docs.ckeditor.com/#!/api/CKEDITOR.htmlParser.filter)s before writing structure to an HTML string.
-* Included in [#10103](http://dev.ckeditor.com/ticket/10103):
- * Introduced the [`editor.status`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-status) property to make it easier to check the current status of the editor.
- * Default [`command`](http://docs.ckeditor.com/#!/api/CKEDITOR.command) state is now [`CKEDITOR.TRISTATE_DISABLE`](http://docs.ckeditor.com/#!/api/CKEDITOR-property-TRISTATE_DISABLED). It will be activated on [`editor.instanceReady`](http://docs.ckeditor.com/#!/api/CKEDITOR-event-instanceReady) or immediately after being added if the editor is already initialized.
-* [#9796](http://dev.ckeditor.com/ticket/9796): Introduced `<s>` as a default tag for strikethrough, which replaces obsolete `<strike>` in HTML5.
-
-## CKEditor 4.0.3
-
-Fixed Issues:
-
-* [#10196](http://dev.ckeditor.com/ticket/10196): Fixed context menus not opening with keyboard shortcuts when [Autogrow](http://ckeditor.com/addon/autogrow) is enabled.
-* [#10212](http://dev.ckeditor.com/ticket/10212): [IE7-10] Undo command throws errors after multiple switches between Source and WYSIWYG view.
-* [#10219](http://dev.ckeditor.com/ticket/10219): [Inline editor] Error thrown after calling [`editor.destroy()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-destroy).
-
-## CKEditor 4.0.2
-
-Fixed Issues:
-
-* [#9779](http://dev.ckeditor.com/ticket/9779): Fixed overriding [`CKEDITOR.getUrl()`](http://docs.ckeditor.com/#!/api/CKEDITOR-method-getUrl) with `CKEDITOR_GETURL`.
-* [#9772](http://dev.ckeditor.com/ticket/9772): Custom buttons in the dialog window footer have different look and size ([Moono](http://ckeditor.com/addon/moono), [Kama](http://ckeditor.com/addon/kama) skins).
-* [#9029](http://dev.ckeditor.com/ticket/9029): Custom styles added with the [`stylesSet.add()`](http://docs.ckeditor.com/#!/api/CKEDITOR.stylesSet-method-add) are displayed in the wrong order.
-* [#9887](http://dev.ckeditor.com/ticket/9887): Disable [Magic Line](http://ckeditor.com/addon/magicline) when [`editor.readOnly`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-property-readOnly) is set.
-* [#9882](http://dev.ckeditor.com/ticket/9882): Fixed empty document title on [`editor.getData()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData) if set via the Document Properties dialog window.
-* [#9773](http://dev.ckeditor.com/ticket/9773): Fixed rendering problems with selection fields in the Kama skin.
-* [#9851](http://dev.ckeditor.com/ticket/9851): The [`selectionChange`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-event-selectionChange) event is not fired when mouse selection ended outside editable.
-* [#9903](http://dev.ckeditor.com/ticket/9903): [Inline editor] Bad positioning of floating space with page horizontal scroll.
-* [#9872](http://dev.ckeditor.com/ticket/9872): [`editor.checkDirty()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty) returns `true` when called onload. Removed the obsolete `editor.mayBeDirty` flag.
-* [#9893](http://dev.ckeditor.com/ticket/9893): [IE] Fixed broken toolbar when editing mixed direction content in Quirks mode.
-* [#9845](http://dev.ckeditor.com/ticket/9845): Fixed TAB navigation in the [Link](http://ckeditor.com/addon/link) dialog window when the Anchor option is used and no anchors are available.
-* [#9883](http://dev.ckeditor.com/ticket/9883): Maximizing was making the entire page editable with [divarea](http://ckeditor.com/addon/divarea)-based editors.
-* [#9940](http://dev.ckeditor.com/ticket/9940): [Firefox] Navigating back to a page with the editor was making the entire page editable.
-* [#9966](http://dev.ckeditor.com/ticket/9966): Fixed: Unable to type square brackets with French keyboard layout. Changed [Magic Line](http://ckeditor.com/addon/magicline) keystrokes.
-* [#9507](http://dev.ckeditor.com/ticket/9507): [Firefox] Selection is moved before editable position when the editor is focused for the first time.
-* [#9947](http://dev.ckeditor.com/ticket/9947): [WebKit] Editor overflows parent container in some edge cases.
-* [#10105](http://dev.ckeditor.com/ticket/10105): Fixed: Broken [sourcearea](http://ckeditor.com/addon/sourcearea) view when an RTL language is set.
-* [#10123](http://dev.ckeditor.com/ticket/10123): [WebKit] Fixed: Several dialog windows have broken layout since the latest WebKit release.
-* [#10152](http://dev.ckeditor.com/ticket/10152): Fixed: Invalid ARIA property used on menu items.
-
-## CKEditor 4.0.1.1
-
-Fixed Issues:
-
-* Security update: Added protection against XSS attack and possible path disclosure in the PHP sample.
-
-## CKEditor 4.0.1
-
-Fixed Issues:
-
-* [#9655](http://dev.ckeditor.com/ticket/9655): Support for IE Quirks Mode in the new [Moono skin](http://ckeditor.com/addon/moono).
-* Accessibility issues (mainly in inline editor): [#9364](http://dev.ckeditor.com/ticket/9364), [#9368](http://dev.ckeditor.com/ticket/9368), [#9369](http://dev.ckeditor.com/ticket/9369), [#9370](http://dev.ckeditor.com/ticket/9370), [#9541](http://dev.ckeditor.com/ticket/9541), [#9543](http://dev.ckeditor.com/ticket/9543), [#9841](http://dev.ckeditor.com/ticket/9841), [#9844](http://dev.ckeditor.com/ticket/9844).
-* [Magic Line](http://ckeditor.com/addon/magicline) plugin:
- * [#9481](http://dev.ckeditor.com/ticket/9481): Added accessibility support for Magic Line.
- * [#9509](http://dev.ckeditor.com/ticket/9509): Added Magic Line support for forms.
- * [#9573](http://dev.ckeditor.com/ticket/9573): Magic Line does not disappear on `mouseout` in a specific case.
-* [#9754](http://dev.ckeditor.com/ticket/9754): [WebKit] Cutting & pasting simple unformatted text generates an inline wrapper in WebKit browsers.
-* [#9456](http://dev.ckeditor.com/ticket/9456): [Chrome] Properly paste bullet list style from MS Word.
-* [#9699](http://dev.ckeditor.com/ticket/9699), [#9758](http://dev.ckeditor.com/ticket/9758): Improved selection locking when selecting by dragging.
-* Context menu:
- * [#9712](http://dev.ckeditor.com/ticket/9712): Opening the context menu destroys editor focus.
- * [#9366](http://dev.ckeditor.com/ticket/9366): Context menu should be displayed over the floating toolbar.
- * [#9706](http://dev.ckeditor.com/ticket/9706): Context menu generates a JavaScript error in inline mode when the editor is attached to a header element.
-* [#9800](http://dev.ckeditor.com/ticket/9800): Hide float panel when resizing the window.
-* [#9721](http://dev.ckeditor.com/ticket/9721): Padding in content of div-based editor puts the editing area under the bottom UI space.
-* [#9528](http://dev.ckeditor.com/ticket/9528): Host page `box-sizing` style should not influence the editor UI elements.
-* [#9503](http://dev.ckeditor.com/ticket/9503): [Form Elements](http://ckeditor.com/addon/forms) plugin adds context menu listeners only on supported input types. Added support for `tel`, `email`, `search` and `url` input types.
-* [#9769](http://dev.ckeditor.com/ticket/9769): Improved floating toolbar positioning in a narrow window.
-* [#9875](http://dev.ckeditor.com/ticket/9875): Table dialog window does not populate width correctly.
-* [#8675](http://dev.ckeditor.com/ticket/8675): Deleting cells in a nested table removes the outer table cell.
-* [#9815](http://dev.ckeditor.com/ticket/9815): Cannot edit dialog window fields in an editor initialized in the jQuery UI modal dialog.
-* [#8888](http://dev.ckeditor.com/ticket/8888): CKEditor dialog windows do not show completely in a small window.
-* [#9360](http://dev.ckeditor.com/ticket/9360): [Inline editor] Blocks shown for a `<div>` element stay permanently even after the user exits editing the `<div>`.
-* [#9531](http://dev.ckeditor.com/ticket/9531): [Firefox & Inline editor] Toolbar is lost when closing the Format drop-down list by clicking its button.
-* [#9553](http://dev.ckeditor.com/ticket/9553): Table width incorrectly set when the `border-width` style is specified.
-* [#9594](http://dev.ckeditor.com/ticket/9594): Cannot tab past CKEditor when it is in read-only mode.
-* [#9658](http://dev.ckeditor.com/ticket/9658): [IE9] Justify not working on selected images.
-* [#9686](http://dev.ckeditor.com/ticket/9686): Added missing contents styles for `<pre>` elements.
-* [#9709](http://dev.ckeditor.com/ticket/9709): [Paste from Word](http://ckeditor.com/addon/pastefromword) should not depend on configuration from other styles.
-* [#9726](http://dev.ckeditor.com/ticket/9726): Removed [Color Dialog](http://ckeditor.com/addon/colordialog) plugin dependency from [Table Tools](http://ckeditor.com/addon/tabletools).
-* [#9765](http://dev.ckeditor.com/ticket/9765): Toolbar Collapse command documented incorrectly in the [Accessibility Instructions](http://ckeditor.com/addon/a11yhelp) dialog window.
-* [#9771](http://dev.ckeditor.com/ticket/9771): [WebKit & Opera] Fixed scrolling issues when pasting.
-* [#9787](http://dev.ckeditor.com/ticket/9787): [IE9] `onChange` is not fired for checkboxes in dialogs.
-* [#9842](http://dev.ckeditor.com/ticket/9842): [Firefox 17] When opening a toolbar menu for the first time and pressing the *Down Arrow* key, focus goes to the next toolbar button instead of the menu options.
-* [#9847](http://dev.ckeditor.com/ticket/9847): [Elements Path](http://ckeditor.com/addon/elementspath) should not be initialized in the inline editor.
-* [#9853](http://dev.ckeditor.com/ticket/9853): [`editor.addRemoveFormatFilter()`](http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-addRemoveFormatFilter) is exposed before it really works.
-* [#8893](http://dev.ckeditor.com/ticket/8893): Value of the [`pasteFromWordCleanupFile`](http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-pasteFromWordCleanupFile) configuration option is now taken from the instance configuration.
-* [#9693](http://dev.ckeditor.com/ticket/9693): Removed "Live Preview" checkbox from UI color picker.
-
-
-## CKEditor 4.0
-
-The first stable release of the new CKEditor 4 code line.
-
-The CKEditor JavaScript API has been kept compatible with CKEditor 4, whenever
-possible. The list of relevant changes can be found in the [API Changes page of
-the CKEditor 4 documentation][1].
-
-[1]: http://docs.ckeditor.com/#!/guide/dev_api_changes "API Changes"
diff --git a/wqflask/wqflask/static/packages/ckeditor/LICENSE.md b/wqflask/wqflask/static/packages/ckeditor/LICENSE.md
deleted file mode 100644
index b6e0b9ca..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/LICENSE.md
+++ /dev/null
@@ -1,1264 +0,0 @@
-Software License Agreement
-==========================
-
-CKEditor - The text editor for Internet - http://ckeditor.com
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-
-Licensed under the terms of any of the following licenses at your
-choice:
-
- - GNU General Public License Version 2 or later (the "GPL")
- http://www.gnu.org/licenses/gpl.html
- (See Appendix A)
-
- - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
- http://www.gnu.org/licenses/lgpl.html
- (See Appendix B)
-
- - Mozilla Public License Version 1.1 or later (the "MPL")
- http://www.mozilla.org/MPL/MPL-1.1.html
- (See Appendix C)
-
-You are not required to, but if you want to explicitly declare the
-license you have chosen to be bound to when using, reproducing,
-modifying and distributing this software, just include a text file
-titled "legal.txt" in your version of this software, indicating your
-license choice. In any case, your choice will not restrict any
-recipient of your version of this software to use, reproduce, modify
-and distribute this software under any of the above licenses.
-
-Sources of Intellectual Property Included in CKEditor
------------------------------------------------------
-
-Where not otherwise indicated, all CKEditor content is authored by
-CKSource engineers and consists of CKSource-owned intellectual
-property. In some specific instances, CKEditor will incorporate work
-done by developers outside of CKSource with their express permission.
-
-Trademarks
-----------
-
-CKEditor is a trademark of CKSource - Frederico Knabben. All other brand
-and product names are trademarks, registered trademarks or service
-marks of their respective holders.
-
----
-
-Appendix A: The GPL License
----------------------------
-
-GNU GENERAL PUBLIC LICENSE
-Version 2, June 1991
-
- Copyright (C) 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.
-
-END OF TERMS AND CONDITIONS
-
-
-Appendix B: The LGPL License
-----------------------------
-
-GNU LESSER GENERAL PUBLIC LICENSE
-Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
-Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software-to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages-typically libraries-of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-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 and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-GNU LESSER GENERAL PUBLIC LICENSE
-TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, 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 library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete 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 distribute a copy of this License along with the
-Library.
-
- 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 Library or any portion
-of it, thus forming a work based on the Library, 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) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-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 Library, 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 Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you 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.
-
- If distribution of 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 satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be 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.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library 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.
-
- 9. 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 Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-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 with
-this License.
-
- 11. 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 Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library 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 Library.
-
-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.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library 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.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser 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 Library
-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 Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-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
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "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
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. 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 LIBRARY 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
-LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
-END OF TERMS AND CONDITIONS
-
-
-Appendix C: The MPL License
----------------------------
-
-MOZILLA PUBLIC LICENSE
-Version 1.1
-
-1. Definitions.
-
- 1.0.1. "Commercial Use" means distribution or otherwise making the
- Covered Code available to a third party.
-
- 1.1. "Contributor" means each entity that creates or contributes to
- the creation of Modifications.
-
- 1.2. "Contributor Version" means the combination of the Original
- Code, prior Modifications used by a Contributor, and the Modifications
- made by that particular Contributor.
-
- 1.3. "Covered Code" means the Original Code or Modifications or the
- combination of the Original Code and Modifications, in each case
- including portions thereof.
-
- 1.4. "Electronic Distribution Mechanism" means a mechanism generally
- accepted in the software development community for the electronic
- transfer of data.
-
- 1.5. "Executable" means Covered Code in any form other than Source
- Code.
-
- 1.6. "Initial Developer" means the individual or entity identified
- as the Initial Developer in the Source Code notice required by Exhibit
- A.
-
- 1.7. "Larger Work" means a work which combines Covered Code or
- portions thereof with code not governed by the terms of this License.
-
- 1.8. "License" means this document.
-
- 1.8.1. "Licensable" means having the right to grant, to the maximum
- extent possible, whether at the time of the initial grant or
- subsequently acquired, any and all of the rights conveyed herein.
-
- 1.9. "Modifications" means any addition to or deletion from the
- substance or structure of either the Original Code or any previous
- Modifications. When Covered Code is released as a series of files, a
- Modification is:
- A. Any addition to or deletion from the contents of a file
- containing Original Code or previous Modifications.
-
- B. Any new file that contains any part of the Original Code or
- previous Modifications.
-
- 1.10. "Original Code" means Source Code of computer software code
- which is described in the Source Code notice required by Exhibit A as
- Original Code, and which, at the time of its release under this
- License is not already Covered Code governed by this License.
-
- 1.10.1. "Patent Claims" means any patent claim(s), now owned or
- hereafter acquired, including without limitation, method, process,
- and apparatus claims, in any patent Licensable by grantor.
-
- 1.11. "Source Code" means the preferred form of the Covered Code for
- making modifications to it, including all modules it contains, plus
- any associated interface definition files, scripts used to control
- compilation and installation of an Executable, or source code
- differential comparisons against either the Original Code or another
- well known, available Covered Code of the Contributor's choice. The
- Source Code can be in a compressed or archival form, provided the
- appropriate decompression or de-archiving software is widely available
- for no charge.
-
- 1.12. "You" (or "Your") means an individual or a legal entity
- exercising rights under, and complying with all of the terms of, this
- License or a future version of this License issued under Section 6.1.
- For legal entities, "You" includes any entity which controls, is
- controlled by, or is under common control with You. For purposes of
- this definition, "control" means (a) the power, direct or indirect,
- to cause the direction or management of such entity, whether by
- contract or otherwise, or (b) ownership of more than fifty percent
- (50%) of the outstanding shares or beneficial ownership of such
- entity.
-
-2. Source Code License.
-
- 2.1. The Initial Developer Grant.
- The Initial Developer hereby grants You a world-wide, royalty-free,
- non-exclusive license, subject to third party intellectual property
- claims:
- (a) under intellectual property rights (other than patent or
- trademark) Licensable by Initial Developer to use, reproduce,
- modify, display, perform, sublicense and distribute the Original
- Code (or portions thereof) with or without Modifications, and/or
- as part of a Larger Work; and
-
- (b) under Patents Claims infringed by the making, using or
- selling of Original Code, to make, have made, use, practice,
- sell, and offer for sale, and/or otherwise dispose of the
- Original Code (or portions thereof).
-
- (c) the licenses granted in this Section 2.1(a) and (b) are
- effective on the date Initial Developer first distributes
- Original Code under the terms of this License.
-
- (d) Notwithstanding Section 2.1(b) above, no patent license is
- granted: 1) for code that You delete from the Original Code; 2)
- separate from the Original Code; or 3) for infringements caused
- by: i) the modification of the Original Code or ii) the
- combination of the Original Code with other software or devices.
-
- 2.2. Contributor Grant.
- Subject to third party intellectual property claims, each Contributor
- hereby grants You a world-wide, royalty-free, non-exclusive license
-
- (a) under intellectual property rights (other than patent or
- trademark) Licensable by Contributor, to use, reproduce, modify,
- display, perform, sublicense and distribute the Modifications
- created by such Contributor (or portions thereof) either on an
- unmodified basis, with other Modifications, as Covered Code
- and/or as part of a Larger Work; and
-
- (b) under Patent Claims infringed by the making, using, or
- selling of Modifications made by that Contributor either alone
- and/or in combination with its Contributor Version (or portions
- of such combination), to make, use, sell, offer for sale, have
- made, and/or otherwise dispose of: 1) Modifications made by that
- Contributor (or portions thereof); and 2) the combination of
- Modifications made by that Contributor with its Contributor
- Version (or portions of such combination).
-
- (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
- effective on the date Contributor first makes Commercial Use of
- the Covered Code.
-
- (d) Notwithstanding Section 2.2(b) above, no patent license is
- granted: 1) for any code that Contributor has deleted from the
- Contributor Version; 2) separate from the Contributor Version;
- 3) for infringements caused by: i) third party modifications of
- Contributor Version or ii) the combination of Modifications made
- by that Contributor with other software (except as part of the
- Contributor Version) or other devices; or 4) under Patent Claims
- infringed by Covered Code in the absence of Modifications made by
- that Contributor.
-
-3. Distribution Obligations.
-
- 3.1. Application of License.
- The Modifications which You create or to which You contribute are
- governed by the terms of this License, including without limitation
- Section 2.2. The Source Code version of Covered Code may be
- distributed only under the terms of this License or a future version
- of this License released under Section 6.1, and You must include a
- copy of this License with every copy of the Source Code You
- distribute. You may not offer or impose any terms on any Source Code
- version that alters or restricts the applicable version of this
- License or the recipients' rights hereunder. However, You may include
- an additional document offering the additional rights described in
- Section 3.5.
-
- 3.2. Availability of Source Code.
- Any Modification which You create or to which You contribute must be
- made available in Source Code form under the terms of this License
- either on the same media as an Executable version or via an accepted
- Electronic Distribution Mechanism to anyone to whom you made an
- Executable version available; and if made available via Electronic
- Distribution Mechanism, must remain available for at least twelve (12)
- months after the date it initially became available, or at least six
- (6) months after a subsequent version of that particular Modification
- has been made available to such recipients. You are responsible for
- ensuring that the Source Code version remains available even if the
- Electronic Distribution Mechanism is maintained by a third party.
-
- 3.3. Description of Modifications.
- You must cause all Covered Code to which You contribute to contain a
- file documenting the changes You made to create that Covered Code and
- the date of any change. You must include a prominent statement that
- the Modification is derived, directly or indirectly, from Original
- Code provided by the Initial Developer and including the name of the
- Initial Developer in (a) the Source Code, and (b) in any notice in an
- Executable version or related documentation in which You describe the
- origin or ownership of the Covered Code.
-
- 3.4. Intellectual Property Matters
- (a) Third Party Claims.
- If Contributor has knowledge that a license under a third party's
- intellectual property rights is required to exercise the rights
- granted by such Contributor under Sections 2.1 or 2.2,
- Contributor must include a text file with the Source Code
- distribution titled "LEGAL" which describes the claim and the
- party making the claim in sufficient detail that a recipient will
- know whom to contact. If Contributor obtains such knowledge after
- the Modification is made available as described in Section 3.2,
- Contributor shall promptly modify the LEGAL file in all copies
- Contributor makes available thereafter and shall take other steps
- (such as notifying appropriate mailing lists or newsgroups)
- reasonably calculated to inform those who received the Covered
- Code that new knowledge has been obtained.
-
- (b) Contributor APIs.
- If Contributor's Modifications include an application programming
- interface and Contributor has knowledge of patent licenses which
- are reasonably necessary to implement that API, Contributor must
- also include this information in the LEGAL file.
-
- (c) Representations.
- Contributor represents that, except as disclosed pursuant to
- Section 3.4(a) above, Contributor believes that Contributor's
- Modifications are Contributor's original creation(s) and/or
- Contributor has sufficient rights to grant the rights conveyed by
- this License.
-
- 3.5. Required Notices.
- You must duplicate the notice in Exhibit A in each file of the Source
- Code. If it is not possible to put such notice in a particular Source
- Code file due to its structure, then You must include such notice in a
- location (such as a relevant directory) where a user would be likely
- to look for such a notice. If You created one or more Modification(s)
- You may add your name as a Contributor to the notice described in
- Exhibit A. You must also duplicate this License in any documentation
- for the Source Code where You describe recipients' rights or ownership
- rights relating to Covered Code. You may choose to offer, and to
- charge a fee for, warranty, support, indemnity or liability
- obligations to one or more recipients of Covered Code. However, You
- may do so only on Your own behalf, and not on behalf of the Initial
- Developer or any Contributor. You must make it absolutely clear than
- any such warranty, support, indemnity or liability obligation is
- offered by You alone, and You hereby agree to indemnify the Initial
- Developer and every Contributor for any liability incurred by the
- Initial Developer or such Contributor as a result of warranty,
- support, indemnity or liability terms You offer.
-
- 3.6. Distribution of Executable Versions.
- You may distribute Covered Code in Executable form only if the
- requirements of Section 3.1-3.5 have been met for that Covered Code,
- and if You include a notice stating that the Source Code version of
- the Covered Code is available under the terms of this License,
- including a description of how and where You have fulfilled the
- obligations of Section 3.2. The notice must be conspicuously included
- in any notice in an Executable version, related documentation or
- collateral in which You describe recipients' rights relating to the
- Covered Code. You may distribute the Executable version of Covered
- Code or ownership rights under a license of Your choice, which may
- contain terms different from this License, provided that You are in
- compliance with the terms of this License and that the license for the
- Executable version does not attempt to limit or alter the recipient's
- rights in the Source Code version from the rights set forth in this
- License. If You distribute the Executable version under a different
- license You must make it absolutely clear that any terms which differ
- from this License are offered by You alone, not by the Initial
- Developer or any Contributor. You hereby agree to indemnify the
- Initial Developer and every Contributor for any liability incurred by
- the Initial Developer or such Contributor as a result of any such
- terms You offer.
-
- 3.7. Larger Works.
- You may create a Larger Work by combining Covered Code with other code
- not governed by the terms of this License and distribute the Larger
- Work as a single product. In such a case, You must make sure the
- requirements of this License are fulfilled for the Covered Code.
-
-4. Inability to Comply Due to Statute or Regulation.
-
- If it is impossible for You to comply with any of the terms of this
- License with respect to some or all of the Covered Code due to
- statute, judicial order, or regulation then You must: (a) comply with
- the terms of this License to the maximum extent possible; and (b)
- describe the limitations and the code they affect. Such description
- must be included in the LEGAL file described in Section 3.4 and must
- be included with all distributions of the Source Code. Except to the
- extent prohibited by statute or regulation, such description must be
- sufficiently detailed for a recipient of ordinary skill to be able to
- understand it.
-
-5. Application of this License.
-
- This License applies to code to which the Initial Developer has
- attached the notice in Exhibit A and to related Covered Code.
-
-6. Versions of the License.
-
- 6.1. New Versions.
- Netscape Communications Corporation ("Netscape") may publish revised
- and/or new versions of the License from time to time. Each version
- will be given a distinguishing version number.
-
- 6.2. Effect of New Versions.
- Once Covered Code has been published under a particular version of the
- License, You may always continue to use it under the terms of that
- version. You may also choose to use such Covered Code under the terms
- of any subsequent version of the License published by Netscape. No one
- other than Netscape has the right to modify the terms applicable to
- Covered Code created under this License.
-
- 6.3. Derivative Works.
- If You create or use a modified version of this License (which you may
- only do in order to apply it to code which is not already Covered Code
- governed by this License), You must (a) rename Your license so that
- the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
- "MPL", "NPL" or any confusingly similar phrase do not appear in your
- license (except to note that your license differs from this License)
- and (b) otherwise make it clear that Your version of the license
- contains terms which differ from the Mozilla Public License and
- Netscape Public License. (Filling in the name of the Initial
- Developer, Original Code or Contributor in the notice described in
- Exhibit A shall not of themselves be deemed to be modifications of
- this License.)
-
-7. DISCLAIMER OF WARRANTY.
-
- COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
- WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
- DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
- THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
- IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
- YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
- COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
- OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
- ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
-
-8. TERMINATION.
-
- 8.1. This License and the rights granted hereunder will terminate
- automatically if You fail to comply with terms herein and fail to cure
- such breach within 30 days of becoming aware of the breach. All
- sublicenses to the Covered Code which are properly granted shall
- survive any termination of this License. Provisions which, by their
- nature, must remain in effect beyond the termination of this License
- shall survive.
-
- 8.2. If You initiate litigation by asserting a patent infringement
- claim (excluding declatory judgment actions) against Initial Developer
- or a Contributor (the Initial Developer or Contributor against whom
- You file such action is referred to as "Participant") alleging that:
-
- (a) such Participant's Contributor Version directly or indirectly
- infringes any patent, then any and all rights granted by such
- Participant to You under Sections 2.1 and/or 2.2 of this License
- shall, upon 60 days notice from Participant terminate prospectively,
- unless if within 60 days after receipt of notice You either: (i)
- agree in writing to pay Participant a mutually agreeable reasonable
- royalty for Your past and future use of Modifications made by such
- Participant, or (ii) withdraw Your litigation claim with respect to
- the Contributor Version against such Participant. If within 60 days
- of notice, a reasonable royalty and payment arrangement are not
- mutually agreed upon in writing by the parties or the litigation claim
- is not withdrawn, the rights granted by Participant to You under
- Sections 2.1 and/or 2.2 automatically terminate at the expiration of
- the 60 day notice period specified above.
-
- (b) any software, hardware, or device, other than such Participant's
- Contributor Version, directly or indirectly infringes any patent, then
- any rights granted to You by such Participant under Sections 2.1(b)
- and 2.2(b) are revoked effective as of the date You first made, used,
- sold, distributed, or had made, Modifications made by that
- Participant.
-
- 8.3. If You assert a patent infringement claim against Participant
- alleging that such Participant's Contributor Version directly or
- indirectly infringes any patent where such claim is resolved (such as
- by license or settlement) prior to the initiation of patent
- infringement litigation, then the reasonable value of the licenses
- granted by such Participant under Sections 2.1 or 2.2 shall be taken
- into account in determining the amount or value of any payment or
- license.
-
- 8.4. In the event of termination under Sections 8.1 or 8.2 above,
- all end user license agreements (excluding distributors and resellers)
- which have been validly granted by You or any distributor hereunder
- prior to termination shall survive termination.
-
-9. LIMITATION OF LIABILITY.
-
- UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
- (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
- DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
- OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
- ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
- CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
- WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
- COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
- INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
- LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
- RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
- PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
- EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
- THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
-
-10. U.S. GOVERNMENT END USERS.
-
- The Covered Code is a "commercial item," as that term is defined in
- 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
- software" and "commercial computer software documentation," as such
- terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
- C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
- all U.S. Government End Users acquire Covered Code with only those
- rights set forth herein.
-
-11. MISCELLANEOUS.
-
- This License represents the complete agreement concerning subject
- matter hereof. If any provision of this License is held to be
- unenforceable, such provision shall be reformed only to the extent
- necessary to make it enforceable. This License shall be governed by
- California law provisions (except to the extent applicable law, if
- any, provides otherwise), excluding its conflict-of-law provisions.
- With respect to disputes in which at least one party is a citizen of,
- or an entity chartered or registered to do business in the United
- States of America, any litigation relating to this License shall be
- subject to the jurisdiction of the Federal Courts of the Northern
- District of California, with venue lying in Santa Clara County,
- California, with the losing party responsible for costs, including
- without limitation, court costs and reasonable attorneys' fees and
- expenses. The application of the United Nations Convention on
- Contracts for the International Sale of Goods is expressly excluded.
- Any law or regulation which provides that the language of a contract
- shall be construed against the drafter shall not apply to this
- License.
-
-12. RESPONSIBILITY FOR CLAIMS.
-
- As between Initial Developer and the Contributors, each party is
- responsible for claims and damages arising, directly or indirectly,
- out of its utilization of rights under this License and You agree to
- work with Initial Developer and Contributors to distribute such
- responsibility on an equitable basis. Nothing herein is intended or
- shall be deemed to constitute any admission of liability.
-
-13. MULTIPLE-LICENSED CODE.
-
- Initial Developer may designate portions of the Covered Code as
- "Multiple-Licensed". "Multiple-Licensed" means that the Initial
- Developer permits you to utilize portions of the Covered Code under
- Your choice of the NPL or the alternative licenses, if any, specified
- by the Initial Developer in the file described in Exhibit A.
-
-EXHIBIT A -Mozilla Public License.
-
- ``The contents of this file are subject to the Mozilla Public License
- Version 1.1 (the "License"); you may not use this file except in
- compliance with the License. You may obtain a copy of the License at
- http://www.mozilla.org/MPL/
-
- Software distributed under the License is distributed on an "AS IS"
- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
- License for the specific language governing rights and limitations
- under the License.
-
- The Original Code is ______________________________________.
-
- The Initial Developer of the Original Code is ________________________.
- Portions created by ______________________ are Copyright (C) ______
- _______________________. All Rights Reserved.
-
- Contributor(s): ______________________________________.
-
- Alternatively, the contents of this file may be used under the terms
- of the _____ license (the "[___] License"), in which case the
- provisions of [______] License are applicable instead of those
- above. If you wish to allow use of your version of this file only
- under the terms of the [____] License and not to allow others to use
- your version of this file under the MPL, indicate your decision by
- deleting the provisions above and replace them with the notice and
- other provisions required by the [___] License. If you do not delete
- the provisions above, a recipient may use your version of this file
- under either the MPL or the [___] License."
-
- [NOTE: The text of this Exhibit A may differ slightly from the text of
- the notices in the Source Code files of the Original Code. You should
- use the text of this Exhibit A rather than the text found in the
- Original Code Source Code for Your Modifications.]
diff --git a/wqflask/wqflask/static/packages/ckeditor/README.md b/wqflask/wqflask/static/packages/ckeditor/README.md
deleted file mode 100644
index c5a55cd8..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/README.md
+++ /dev/null
@@ -1,39 +0,0 @@
-CKEditor 4
-==========
-
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-http://ckeditor.com - See LICENSE.md for license information.
-
-CKEditor is a text editor to be used inside web pages. It's not a replacement
-for desktop text editors like Word or OpenOffice, but a component to be used as
-part of web applications and websites.
-
-## Documentation
-
-The full editor documentation is available online at the following address:
-http://docs.ckeditor.com
-
-## Installation
-
-Installing CKEditor is an easy task. Just follow these simple steps:
-
- 1. **Download** the latest version from the CKEditor website:
- http://ckeditor.com. You should have already completed this step, but be
- sure you have the very latest version.
- 2. **Extract** (decompress) the downloaded file into the root of your website.
-
-**Note:** CKEditor is by default installed in the `ckeditor` folder. You can
-place the files in whichever you want though.
-
-## Checking Your Installation
-
-The editor comes with a few sample pages that can be used to verify that
-installation proceeded properly. Take a look at the `samples` directory.
-
-To test your installation, just call the following page at your website:
-
- http://<your site>/<CKEditor installation path>/samples/index.html
-
-For example:
-
- http://www.example.com/ckeditor/samples/index.html
diff --git a/wqflask/wqflask/static/packages/ckeditor/adapters/jquery.js b/wqflask/wqflask/static/packages/ckeditor/adapters/jquery.js
deleted file mode 100644
index 3ec908b0..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/adapters/jquery.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-(function(a){CKEDITOR.config.jqueryOverrideVal="undefined"==typeof CKEDITOR.config.jqueryOverrideVal?!0:CKEDITOR.config.jqueryOverrideVal;"undefined"!=typeof a&&(a.extend(a.fn,{ckeditorGet:function(){var a=this.eq(0).data("ckeditorInstance");if(!a)throw"CKEditor is not initialized yet, use ckeditor() with a callback.";return a},ckeditor:function(g,d){if(!CKEDITOR.env.isCompatible)throw Error("The environment is incompatible.");if(!a.isFunction(g))var k=d,d=g,g=k;var i=[],d=d||{};this.each(function(){var b=
-a(this),c=b.data("ckeditorInstance"),f=b.data("_ckeditorInstanceLock"),h=this,j=new a.Deferred;i.push(j.promise());if(c&&!f)g&&g.apply(c,[this]),j.resolve();else if(f)c.once("instanceReady",function(){setTimeout(function(){c.element?(c.element.$==h&&g&&g.apply(c,[h]),j.resolve()):setTimeout(arguments.callee,100)},0)},null,null,9999);else{if(d.autoUpdateElement||"undefined"==typeof d.autoUpdateElement&&CKEDITOR.config.autoUpdateElement)d.autoUpdateElementJquery=!0;d.autoUpdateElement=!1;b.data("_ckeditorInstanceLock",
-!0);c=a(this).is("textarea")?CKEDITOR.replace(h,d):CKEDITOR.inline(h,d);b.data("ckeditorInstance",c);c.on("instanceReady",function(d){var e=d.editor;setTimeout(function(){if(e.element){d.removeListener();e.on("dataReady",function(){b.trigger("dataReady.ckeditor",[e])});e.on("setData",function(a){b.trigger("setData.ckeditor",[e,a.data])});e.on("getData",function(a){b.trigger("getData.ckeditor",[e,a.data])},999);e.on("destroy",function(){b.trigger("destroy.ckeditor",[e])});e.on("save",function(){a(h.form).submit();
-return!1},null,null,20);if(e.config.autoUpdateElementJquery&&b.is("textarea")&&a(h.form).length){var c=function(){b.ckeditor(function(){e.updateElement()})};a(h.form).submit(c);a(h.form).bind("form-pre-serialize",c);b.bind("destroy.ckeditor",function(){a(h.form).unbind("submit",c);a(h.form).unbind("form-pre-serialize",c)})}e.on("destroy",function(){b.removeData("ckeditorInstance")});b.removeData("_ckeditorInstanceLock");b.trigger("instanceReady.ckeditor",[e]);g&&g.apply(e,[h]);j.resolve()}else setTimeout(arguments.callee,
-100)},0)},null,null,9999)}});var f=new a.Deferred;this.promise=f.promise();a.when.apply(this,i).then(function(){f.resolve()});this.editor=this.eq(0).data("ckeditorInstance");return this}}),CKEDITOR.config.jqueryOverrideVal&&(a.fn.val=CKEDITOR.tools.override(a.fn.val,function(g){return function(d){if(arguments.length){var k=this,i=[],f=this.each(function(){var b=a(this),c=b.data("ckeditorInstance");if(b.is("textarea")&&c){var f=new a.Deferred;c.setData(d,function(){f.resolve()});i.push(f.promise());
-return!0}return g.call(b,d)});if(i.length){var b=new a.Deferred;a.when.apply(this,i).done(function(){b.resolveWith(k)});return b.promise()}return f}var f=a(this).eq(0),c=f.data("ckeditorInstance");return f.is("textarea")&&c?c.getData():g.call(f)}})))})(window.jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/build-config.js b/wqflask/wqflask/static/packages/ckeditor/build-config.js
deleted file mode 100644
index 5ea8379e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/build-config.js
+++ /dev/null
@@ -1,179 +0,0 @@
-/**
- * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md or http://ckeditor.com/license
- */
-
-/**
- * This file was added automatically by CKEditor builder.
- * You may re-use it at any time to build CKEditor again.
- *
- * If you would like to build CKEditor online again
- * (for example to upgrade), visit one the following links:
- *
- * (1) http://ckeditor.com/builder
- * Visit online builder to build CKEditor from scratch.
- *
- * (2) http://ckeditor.com/builder/e6b8a045f8f984a69463975ca3e6524a
- * Visit online builder to build CKEditor, starting with the same setup as before.
- *
- * (3) http://ckeditor.com/builder/download/e6b8a045f8f984a69463975ca3e6524a
- * Straight download link to the latest version of CKEditor (Optimized) with the same setup as before.
- *
- * NOTE:
- * This file is not used by CKEditor, you may remove it.
- * Changing this file will not change your CKEditor configuration.
- */
-
-var CKBUILDER_CONFIG = {
- skin: 'moono',
- preset: 'full',
- ignore: [
- '.bender',
- 'bender.js',
- 'bender-err.log',
- 'bender-out.log',
- 'dev',
- '.DS_Store',
- '.gitattributes',
- '.gitignore',
- 'Gruntfile.js',
- '.idea',
- '.jscsrc',
- '.jshintignore',
- '.jshintrc',
- '.mailmap',
- 'node_modules',
- 'package.json',
- 'README.md',
- 'tests'
- ],
- plugins : {
- 'a11yhelp' : 1,
- 'about' : 1,
- 'basicstyles' : 1,
- 'bidi' : 1,
- 'blockquote' : 1,
- 'clipboard' : 1,
- 'colorbutton' : 1,
- 'colordialog' : 1,
- 'contextmenu' : 1,
- 'dialogadvtab' : 1,
- 'div' : 1,
- 'elementspath' : 1,
- 'enterkey' : 1,
- 'entities' : 1,
- 'filebrowser' : 1,
- 'find' : 1,
- 'flash' : 1,
- 'floatingspace' : 1,
- 'font' : 1,
- 'format' : 1,
- 'forms' : 1,
- 'horizontalrule' : 1,
- 'htmlwriter' : 1,
- 'iframe' : 1,
- 'image' : 1,
- 'indentblock' : 1,
- 'indentlist' : 1,
- 'justify' : 1,
- 'language' : 1,
- 'link' : 1,
- 'list' : 1,
- 'liststyle' : 1,
- 'magicline' : 1,
- 'maximize' : 1,
- 'newpage' : 1,
- 'pagebreak' : 1,
- 'pastefromword' : 1,
- 'pastetext' : 1,
- 'preview' : 1,
- 'print' : 1,
- 'removeformat' : 1,
- 'resize' : 1,
- 'save' : 1,
- 'scayt' : 1,
- 'selectall' : 1,
- 'showblocks' : 1,
- 'showborders' : 1,
- 'smiley' : 1,
- 'sourcearea' : 1,
- 'specialchar' : 1,
- 'stylescombo' : 1,
- 'tab' : 1,
- 'table' : 1,
- 'tabletools' : 1,
- 'templates' : 1,
- 'toolbar' : 1,
- 'undo' : 1,
- 'wsc' : 1,
- 'wysiwygarea' : 1
- },
- languages : {
- 'af' : 1,
- 'ar' : 1,
- 'bg' : 1,
- 'bn' : 1,
- 'bs' : 1,
- 'ca' : 1,
- 'cs' : 1,
- 'cy' : 1,
- 'da' : 1,
- 'de' : 1,
- 'el' : 1,
- 'en' : 1,
- 'en-au' : 1,
- 'en-ca' : 1,
- 'en-gb' : 1,
- 'eo' : 1,
- 'es' : 1,
- 'et' : 1,
- 'eu' : 1,
- 'fa' : 1,
- 'fi' : 1,
- 'fo' : 1,
- 'fr' : 1,
- 'fr-ca' : 1,
- 'gl' : 1,
- 'gu' : 1,
- 'he' : 1,
- 'hi' : 1,
- 'hr' : 1,
- 'hu' : 1,
- 'id' : 1,
- 'is' : 1,
- 'it' : 1,
- 'ja' : 1,
- 'ka' : 1,
- 'km' : 1,
- 'ko' : 1,
- 'ku' : 1,
- 'lt' : 1,
- 'lv' : 1,
- 'mk' : 1,
- 'mn' : 1,
- 'ms' : 1,
- 'nb' : 1,
- 'nl' : 1,
- 'no' : 1,
- 'pl' : 1,
- 'pt' : 1,
- 'pt-br' : 1,
- 'ro' : 1,
- 'ru' : 1,
- 'si' : 1,
- 'sk' : 1,
- 'sl' : 1,
- 'sq' : 1,
- 'sr' : 1,
- 'sr-latn' : 1,
- 'sv' : 1,
- 'th' : 1,
- 'tr' : 1,
- 'tt' : 1,
- 'ug' : 1,
- 'uk' : 1,
- 'vi' : 1,
- 'zh' : 1,
- 'zh-cn' : 1
- }
-}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/ckeditor.js b/wqflask/wqflask/static/packages/ckeditor/ckeditor.js
deleted file mode 100644
index d35e8bc3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/ckeditor.js
+++ /dev/null
@@ -1,1013 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;window.CKEDITOR||(window.CKEDITOR=function(){var a=/(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i,e={timestamp:"E8PB",version:"4.4.5",revision:"25cdcad",rnd:Math.floor(900*Math.random())+100,_:{pending:[],basePathSrcPattern:a},status:"unloaded",basePath:function(){var f=window.CKEDITOR_BASEPATH||"";if(!f)for(var d=document.getElementsByTagName("script"),c=0;c<d.length;c++){var b=d[c].src.match(a);if(b){f=b[1];break}}-1==f.indexOf(":/")&&"//"!=f.slice(0,2)&&(f=0===f.indexOf("/")?location.href.match(/^.*?:\/\/[^\/]*/)[0]+
-f:location.href.match(/^[^\?]*\/(?:)/)[0]+f);if(!f)throw'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.';return f}(),getUrl:function(a){-1==a.indexOf(":/")&&0!==a.indexOf("/")&&(a=this.basePath+a);this.timestamp&&("/"!=a.charAt(a.length-1)&&!/[&?]t=/.test(a))&&(a+=(0<=a.indexOf("?")?"&":"?")+"t="+this.timestamp);return a},domReady:function(){function a(){try{document.addEventListener?(document.removeEventListener("DOMContentLoaded",
-a,!1),d()):document.attachEvent&&"complete"===document.readyState&&(document.detachEvent("onreadystatechange",a),d())}catch(c){}}function d(){for(var a;a=c.shift();)a()}var c=[];return function(d){function b(){try{document.documentElement.doScroll("left")}catch(p){setTimeout(b,1);return}a()}c.push(d);"complete"===document.readyState&&setTimeout(a,1);if(1==c.length)if(document.addEventListener)document.addEventListener("DOMContentLoaded",a,!1),window.addEventListener("load",a,!1);else if(document.attachEvent){document.attachEvent("onreadystatechange",
-a);window.attachEvent("onload",a);d=!1;try{d=!window.frameElement}catch(e){}document.documentElement.doScroll&&d&&b()}}}()},b=window.CKEDITOR_GETURL;if(b){var c=e.getUrl;e.getUrl=function(a){return b.call(e,a)||c.call(e,a)}}return e}());
-CKEDITOR.event||(CKEDITOR.event=function(){},CKEDITOR.event.implementOn=function(a){var e=CKEDITOR.event.prototype,b;for(b in e)a[b]==null&&(a[b]=e[b])},CKEDITOR.event.prototype=function(){function a(a){var f=e(this);return f[a]||(f[a]=new b(a))}var e=function(a){a=a.getPrivate&&a.getPrivate()||a._||(a._={});return a.events||(a.events={})},b=function(a){this.name=a;this.listeners=[]};b.prototype={getListenerIndex:function(a){for(var f=0,d=this.listeners;f<d.length;f++)if(d[f].fn==a)return f;return-1}};
-return{define:function(c,f){var d=a.call(this,c);CKEDITOR.tools.extend(d,f,true)},on:function(c,f,d,b,e){function m(a,p,u,e){a={name:c,sender:this,editor:a,data:p,listenerData:b,stop:u,cancel:e,removeListener:j};return f.call(d,a)===false?false:a.data}function j(){u.removeListener(c,f)}var p=a.call(this,c);if(p.getListenerIndex(f)<0){p=p.listeners;d||(d=this);isNaN(e)&&(e=10);var u=this;m.fn=f;m.priority=e;for(var t=p.length-1;t>=0;t--)if(p[t].priority<=e){p.splice(t+1,0,m);return{removeListener:j}}p.unshift(m)}return{removeListener:j}},
-once:function(){var a=Array.prototype.slice.call(arguments),f=a[1];a[1]=function(a){a.removeListener();return f.apply(this,arguments)};return this.on.apply(this,a)},capture:function(){CKEDITOR.event.useCapture=1;var a=this.on.apply(this,arguments);CKEDITOR.event.useCapture=0;return a},fire:function(){var a=0,f=function(){a=1},d=0,b=function(){d=1};return function(h,m,j){var p=e(this)[h],h=a,u=d;a=d=0;if(p){var t=p.listeners;if(t.length)for(var t=t.slice(0),y,n=0;n<t.length;n++){if(p.errorProof)try{y=
-t[n].call(this,j,m,f,b)}catch(w){}else y=t[n].call(this,j,m,f,b);y===false?d=1:typeof y!="undefined"&&(m=y);if(a||d)break}}m=d?false:typeof m=="undefined"?true:m;a=h;d=u;return m}}(),fireOnce:function(a,f,d){f=this.fire(a,f,d);delete e(this)[a];return f},removeListener:function(a,f){var d=e(this)[a];if(d){var b=d.getListenerIndex(f);b>=0&&d.listeners.splice(b,1)}},removeAllListeners:function(){var a=e(this),f;for(f in a)delete a[f]},hasListeners:function(a){return(a=e(this)[a])&&a.listeners.length>
-0}}}());CKEDITOR.editor||(CKEDITOR.editor=function(){CKEDITOR._.pending.push([this,arguments]);CKEDITOR.event.call(this)},CKEDITOR.editor.prototype.fire=function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fire.call(this,a,e,this)},CKEDITOR.editor.prototype.fireOnce=function(a,e){a in{instanceReady:1,loaded:1}&&(this[a]=true);return CKEDITOR.event.prototype.fireOnce.call(this,a,e,this)},CKEDITOR.event.implementOn(CKEDITOR.editor.prototype));
-CKEDITOR.env||(CKEDITOR.env=function(){var a=navigator.userAgent.toLowerCase(),e={ie:a.indexOf("trident/")>-1,webkit:a.indexOf(" applewebkit/")>-1,air:a.indexOf(" adobeair/")>-1,mac:a.indexOf("macintosh")>-1,quirks:document.compatMode=="BackCompat"&&(!document.documentMode||document.documentMode<10),mobile:a.indexOf("mobile")>-1,iOS:/(ipad|iphone|ipod)/.test(a),isCustomDomain:function(){if(!this.ie)return false;var a=document.domain,d=window.location.hostname;return a!=d&&a!="["+d+"]"},secure:location.protocol==
-"https:"};e.gecko=navigator.product=="Gecko"&&!e.webkit&&!e.ie;if(e.webkit)a.indexOf("chrome")>-1?e.chrome=true:e.safari=true;var b=0;if(e.ie){b=e.quirks||!document.documentMode?parseFloat(a.match(/msie (\d+)/)[1]):document.documentMode;e.ie9Compat=b==9;e.ie8Compat=b==8;e.ie7Compat=b==7;e.ie6Compat=b<7||e.quirks}if(e.gecko){var c=a.match(/rv:([\d\.]+)/);if(c){c=c[1].split(".");b=c[0]*1E4+(c[1]||0)*100+(c[2]||0)*1}}e.air&&(b=parseFloat(a.match(/ adobeair\/(\d+)/)[1]));e.webkit&&(b=parseFloat(a.match(/ applewebkit\/(\d+)/)[1]));
-e.version=b;e.isCompatible=e.iOS&&b>=534||!e.mobile&&(e.ie&&b>6||e.gecko&&b>=2E4||e.air&&b>=1||e.webkit&&b>=522||false);e.hidpi=window.devicePixelRatio>=2;e.needsBrFiller=e.gecko||e.webkit||e.ie&&b>10;e.needsNbspFiller=e.ie&&b<11;e.cssClass="cke_browser_"+(e.ie?"ie":e.gecko?"gecko":e.webkit?"webkit":"unknown");if(e.quirks)e.cssClass=e.cssClass+" cke_browser_quirks";if(e.ie)e.cssClass=e.cssClass+(" cke_browser_ie"+(e.quirks?"6 cke_browser_iequirks":e.version));if(e.air)e.cssClass=e.cssClass+" cke_browser_air";
-if(e.iOS)e.cssClass=e.cssClass+" cke_browser_ios";if(e.hidpi)e.cssClass=e.cssClass+" cke_hidpi";return e}());
-"unloaded"==CKEDITOR.status&&function(){CKEDITOR.event.implementOn(CKEDITOR);CKEDITOR.loadFullCore=function(){if(CKEDITOR.status!="basic_ready")CKEDITOR.loadFullCore._load=1;else{delete CKEDITOR.loadFullCore;var a=document.createElement("script");a.type="text/javascript";a.src=CKEDITOR.basePath+"ckeditor.js";document.getElementsByTagName("head")[0].appendChild(a)}};CKEDITOR.loadFullCoreTimeout=0;CKEDITOR.add=function(a){(this._.pending||(this._.pending=[])).push(a)};(function(){CKEDITOR.domReady(function(){var a=
-CKEDITOR.loadFullCore,e=CKEDITOR.loadFullCoreTimeout;if(a){CKEDITOR.status="basic_ready";a&&a._load?a():e&&setTimeout(function(){CKEDITOR.loadFullCore&&CKEDITOR.loadFullCore()},e*1E3)}})})();CKEDITOR.status="basic_loaded"}();CKEDITOR.dom={};
-(function(){var a=[],e=CKEDITOR.env.gecko?"-moz-":CKEDITOR.env.webkit?"-webkit-":CKEDITOR.env.ie?"-ms-":"",b=/&/g,c=/>/g,f=/</g,d=/"/g,g=/&amp;/g,h=/&gt;/g,m=/&lt;/g,j=/&quot;/g;CKEDITOR.on("reset",function(){a=[]});CKEDITOR.tools={arrayCompare:function(a,f){if(!a&&!f)return true;if(!a||!f||a.length!=f.length)return false;for(var d=0;d<a.length;d++)if(a[d]!=f[d])return false;return true},clone:function(a){var f;if(a&&a instanceof Array){f=[];for(var d=0;d<a.length;d++)f[d]=CKEDITOR.tools.clone(a[d]);
-return f}if(a===null||typeof a!="object"||a instanceof String||a instanceof Number||a instanceof Boolean||a instanceof Date||a instanceof RegExp||a.nodeType||a.window===a)return a;f=new a.constructor;for(d in a)f[d]=CKEDITOR.tools.clone(a[d]);return f},capitalize:function(a,f){return a.charAt(0).toUpperCase()+(f?a.slice(1):a.slice(1).toLowerCase())},extend:function(a){var f=arguments.length,d,b;if(typeof(d=arguments[f-1])=="boolean")f--;else if(typeof(d=arguments[f-2])=="boolean"){b=arguments[f-1];
-f=f-2}for(var c=1;c<f;c++){var e=arguments[c],o;for(o in e)if(d===true||a[o]==null)if(!b||o in b)a[o]=e[o]}return a},prototypedCopy:function(a){var f=function(){};f.prototype=a;return new f},copy:function(a){var f={},d;for(d in a)f[d]=a[d];return f},isArray:function(a){return Object.prototype.toString.call(a)=="[object Array]"},isEmpty:function(a){for(var f in a)if(a.hasOwnProperty(f))return false;return true},cssVendorPrefix:function(a,f,d){if(d)return e+a+":"+f+";"+a+":"+f;d={};d[a]=f;d[e+a]=f;
-return d},cssStyleToDomStyle:function(){var a=document.createElement("div").style,f=typeof a.cssFloat!="undefined"?"cssFloat":typeof a.styleFloat!="undefined"?"styleFloat":"float";return function(a){return a=="float"?f:a.replace(/-./g,function(a){return a.substr(1).toUpperCase()})}}(),buildStyleHtml:function(a){for(var a=[].concat(a),f,d=[],b=0;b<a.length;b++)if(f=a[b])/@import|[{}]/.test(f)?d.push("<style>"+f+"</style>"):d.push('<link type="text/css" rel=stylesheet href="'+f+'">');return d.join("")},
-htmlEncode:function(a){return(""+a).replace(b,"&amp;").replace(c,"&gt;").replace(f,"&lt;")},htmlDecode:function(a){return a.replace(g,"&").replace(h,">").replace(m,"<")},htmlEncodeAttr:function(a){return a.replace(d,"&quot;").replace(f,"&lt;").replace(c,"&gt;")},htmlDecodeAttr:function(a){return a.replace(j,'"').replace(m,"<").replace(h,">")},getNextNumber:function(){var a=0;return function(){return++a}}(),getNextId:function(){return"cke_"+this.getNextNumber()},override:function(a,f){var d=f(a);d.prototype=
-a.prototype;return d},setTimeout:function(a,f,d,b,c){c||(c=window);d||(d=c);return c.setTimeout(function(){b?a.apply(d,[].concat(b)):a.apply(d)},f||0)},trim:function(){var a=/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g;return function(f){return f.replace(a,"")}}(),ltrim:function(){var a=/^[ \t\n\r]+/g;return function(f){return f.replace(a,"")}}(),rtrim:function(){var a=/[ \t\n\r]+$/g;return function(f){return f.replace(a,"")}}(),indexOf:function(a,f){if(typeof f=="function")for(var d=0,b=a.length;d<b;d++){if(f(a[d]))return d}else{if(a.indexOf)return a.indexOf(f);
-d=0;for(b=a.length;d<b;d++)if(a[d]===f)return d}return-1},search:function(a,f){var d=CKEDITOR.tools.indexOf(a,f);return d>=0?a[d]:null},bind:function(a,f){return function(){return a.apply(f,arguments)}},createClass:function(a){var f=a.$,d=a.base,b=a.privates||a._,c=a.proto,a=a.statics;!f&&(f=function(){d&&this.base.apply(this,arguments)});if(b)var e=f,f=function(){var a=this._||(this._={}),f;for(f in b){var d=b[f];a[f]=typeof d=="function"?CKEDITOR.tools.bind(d,this):d}e.apply(this,arguments)};if(d){f.prototype=
-this.prototypedCopy(d.prototype);f.prototype.constructor=f;f.base=d;f.baseProto=d.prototype;f.prototype.base=function(){this.base=d.prototype.base;d.apply(this,arguments);this.base=arguments.callee}}c&&this.extend(f.prototype,c,true);a&&this.extend(f,a,true);return f},addFunction:function(f,d){return a.push(function(){return f.apply(d||this,arguments)})-1},removeFunction:function(f){a[f]=null},callFunction:function(f){var d=a[f];return d&&d.apply(window,Array.prototype.slice.call(arguments,1))},cssLength:function(){var a=
-/^-?\d+\.?\d*px$/,f;return function(d){f=CKEDITOR.tools.trim(d+"")+"px";return a.test(f)?f:d||""}}(),convertToPx:function(){var a;return function(f){if(!a){a=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(a)}if(!/%$/.test(f)){a.setStyle("width",f);return a.$.clientWidth}return f}}(),repeat:function(a,f){return Array(f+1).join(a)},tryThese:function(){for(var a,
-f=0,d=arguments.length;f<d;f++){var b=arguments[f];try{a=b();break}catch(c){}}return a},genKey:function(){return Array.prototype.slice.call(arguments).join("-")},defer:function(a){return function(){var f=arguments,d=this;window.setTimeout(function(){a.apply(d,f)},0)}},normalizeCssText:function(a,f){var d=[],b,c=CKEDITOR.tools.parseCssText(a,true,f);for(b in c)d.push(b+":"+c[b]);d.sort();return d.length?d.join(";")+";":""},convertRgbToHex:function(a){return a.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi,
-function(a,f,d,b){a=[f,d,b];for(f=0;f<3;f++)a[f]=("0"+parseInt(a[f],10).toString(16)).slice(-2);return"#"+a.join("")})},parseCssText:function(a,f,d){var b={};if(d){d=new CKEDITOR.dom.element("span");d.setAttribute("style",a);a=CKEDITOR.tools.convertRgbToHex(d.getAttribute("style")||"")}if(!a||a==";")return b;a.replace(/&quot;/g,'"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,d,c){if(f){d=d.toLowerCase();d=="font-family"&&(c=c.toLowerCase().replace(/["']/g,"").replace(/\s*,\s*/g,","));
-c=CKEDITOR.tools.trim(c)}b[d]=c});return b},writeCssText:function(a,f){var d,b=[];for(d in a)b.push(d+":"+a[d]);f&&b.sort();return b.join("; ")},objectCompare:function(a,f,d){var b;if(!a&&!f)return true;if(!a||!f)return false;for(b in a)if(a[b]!=f[b])return false;if(!d)for(b in f)if(a[b]!=f[b])return false;return true},objectKeys:function(a){var f=[],d;for(d in a)f.push(d);return f},convertArrayToObject:function(a,f){var d={};arguments.length==1&&(f=true);for(var b=0,c=a.length;b<c;++b)d[a[b]]=f;
-return d},fixDomain:function(){for(var a;;)try{a=window.parent.document.domain;break}catch(f){a=a?a.replace(/.+?(?:\.|$)/,""):document.domain;if(!a)break;document.domain=a}return!!a},eventsBuffer:function(a,f){function d(){c=(new Date).getTime();b=false;f()}var b,c=0;return{input:function(){if(!b){var f=(new Date).getTime()-c;f<a?b=setTimeout(d,a-f):d()}},reset:function(){b&&clearTimeout(b);b=c=0}}},enableHtml5Elements:function(a,f){for(var d=["abbr","article","aside","audio","bdi","canvas","data",
-"datalist","details","figcaption","figure","footer","header","hgroup","mark","meter","nav","output","progress","section","summary","time","video"],b=d.length,c;b--;){c=a.createElement(d[b]);f&&a.appendChild(c)}},checkIfAnyArrayItemMatches:function(a,f){for(var d=0,b=a.length;d<b;++d)if(a[d].match(f))return true;return false},checkIfAnyObjectPropertyMatches:function(a,f){for(var d in a)if(d.match(f))return true;return false},transparentImageData:"data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw=="}})();
-CKEDITOR.dtd=function(){var a=CKEDITOR.tools.extend,e=function(a,f){for(var d=CKEDITOR.tools.clone(a),b=1;b<arguments.length;b++){var f=arguments[b],c;for(c in f)delete d[c]}return d},b={},c={},f={address:1,article:1,aside:1,blockquote:1,details:1,div:1,dl:1,fieldset:1,figure:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,hr:1,menu:1,nav:1,ol:1,p:1,pre:1,section:1,table:1,ul:1},d={command:1,link:1,meta:1,noscript:1,script:1,style:1},g={},h={"#":1},m={center:1,dir:1,noframes:1};
-a(b,{a:1,abbr:1,area:1,audio:1,b:1,bdi:1,bdo:1,br:1,button:1,canvas:1,cite:1,code:1,command:1,datalist:1,del:1,dfn:1,em:1,embed:1,i:1,iframe:1,img:1,input:1,ins:1,kbd:1,keygen:1,label:1,map:1,mark:1,meter:1,noscript:1,object:1,output:1,progress:1,q:1,ruby:1,s:1,samp:1,script:1,select:1,small:1,span:1,strong:1,sub:1,sup:1,textarea:1,time:1,u:1,"var":1,video:1,wbr:1},h,{acronym:1,applet:1,basefont:1,big:1,font:1,isindex:1,strike:1,style:1,tt:1});a(c,f,b,m);e={a:e(b,{a:1,button:1}),abbr:b,address:c,
-area:g,article:a({style:1},c),aside:a({style:1},c),audio:a({source:1,track:1},c),b:b,base:g,bdi:b,bdo:b,blockquote:c,body:c,br:g,button:e(b,{a:1,button:1}),canvas:b,caption:c,cite:b,code:b,col:g,colgroup:{col:1},command:g,datalist:a({option:1},b),dd:c,del:b,details:a({summary:1},c),dfn:b,div:a({style:1},c),dl:{dt:1,dd:1},dt:c,em:b,embed:g,fieldset:a({legend:1},c),figcaption:c,figure:a({figcaption:1},c),footer:c,form:c,h1:b,h2:b,h3:b,h4:b,h5:b,h6:b,head:a({title:1,base:1},d),header:c,hgroup:{h1:1,
-h2:1,h3:1,h4:1,h5:1,h6:1},hr:g,html:a({head:1,body:1},c,d),i:b,iframe:h,img:g,input:g,ins:b,kbd:b,keygen:g,label:b,legend:b,li:c,link:g,map:c,mark:b,menu:a({li:1},c),meta:g,meter:e(b,{meter:1}),nav:c,noscript:a({link:1,meta:1,style:1},b),object:a({param:1},b),ol:{li:1},optgroup:{option:1},option:h,output:b,p:b,param:g,pre:b,progress:e(b,{progress:1}),q:b,rp:b,rt:b,ruby:a({rp:1,rt:1},b),s:b,samp:b,script:h,section:a({style:1},c),select:{optgroup:1,option:1},small:b,source:g,span:b,strong:b,style:h,
-sub:b,summary:b,sup:b,table:{caption:1,colgroup:1,thead:1,tfoot:1,tbody:1,tr:1},tbody:{tr:1},td:c,textarea:h,tfoot:{tr:1},th:c,thead:{tr:1},time:e(b,{time:1}),title:h,tr:{th:1,td:1},track:g,u:b,ul:{li:1},"var":b,video:a({source:1,track:1},c),wbr:g,acronym:b,applet:a({param:1},c),basefont:g,big:b,center:c,dialog:g,dir:{li:1},font:b,isindex:g,noframes:c,strike:b,tt:b};a(e,{$block:a({audio:1,dd:1,dt:1,figcaption:1,li:1,video:1},f,m),$blockLimit:{article:1,aside:1,audio:1,body:1,caption:1,details:1,dir:1,
-div:1,dl:1,fieldset:1,figcaption:1,figure:1,footer:1,form:1,header:1,hgroup:1,menu:1,nav:1,ol:1,section:1,table:1,td:1,th:1,tr:1,ul:1,video:1},$cdata:{script:1,style:1},$editable:{address:1,article:1,aside:1,blockquote:1,body:1,details:1,div:1,fieldset:1,figcaption:1,footer:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,header:1,hgroup:1,nav:1,p:1,pre:1,section:1},$empty:{area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,
-wbr:1},$inline:b,$list:{dl:1,ol:1,ul:1},$listItem:{dd:1,dt:1,li:1},$nonBodyContent:a({body:1,head:1,html:1},e.head),$nonEditable:{applet:1,audio:1,button:1,embed:1,iframe:1,map:1,object:1,option:1,param:1,script:1,textarea:1,video:1},$object:{applet:1,audio:1,button:1,hr:1,iframe:1,img:1,input:1,object:1,select:1,table:1,textarea:1,video:1},$removeEmpty:{abbr:1,acronym:1,b:1,bdi:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,mark:1,meter:1,output:1,q:1,ruby:1,s:1,samp:1,
-small:1,span:1,strike:1,strong:1,sub:1,sup:1,time:1,tt:1,u:1,"var":1},$tabIndex:{a:1,area:1,button:1,input:1,object:1,select:1,textarea:1},$tableContent:{caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1},$transparent:{a:1,audio:1,canvas:1,del:1,ins:1,map:1,noscript:1,object:1,video:1},$intermediate:{caption:1,colgroup:1,dd:1,dt:1,figcaption:1,legend:1,li:1,optgroup:1,option:1,rp:1,rt:1,summary:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1}});return e}();
-CKEDITOR.dom.event=function(a){this.$=a};
-CKEDITOR.dom.event.prototype={getKey:function(){return this.$.keyCode||this.$.which},getKeystroke:function(){var a=this.getKey();if(this.$.ctrlKey||this.$.metaKey)a=a+CKEDITOR.CTRL;this.$.shiftKey&&(a=a+CKEDITOR.SHIFT);this.$.altKey&&(a=a+CKEDITOR.ALT);return a},preventDefault:function(a){var e=this.$;e.preventDefault?e.preventDefault():e.returnValue=false;a&&this.stopPropagation()},stopPropagation:function(){var a=this.$;a.stopPropagation?a.stopPropagation():a.cancelBubble=true},getTarget:function(){var a=
-this.$.target||this.$.srcElement;return a?new CKEDITOR.dom.node(a):null},getPhase:function(){return this.$.eventPhase||2},getPageOffset:function(){var a=this.getTarget().getDocument().$;return{x:this.$.pageX||this.$.clientX+(a.documentElement.scrollLeft||a.body.scrollLeft),y:this.$.pageY||this.$.clientY+(a.documentElement.scrollTop||a.body.scrollTop)}}};CKEDITOR.CTRL=1114112;CKEDITOR.SHIFT=2228224;CKEDITOR.ALT=4456448;CKEDITOR.EVENT_PHASE_CAPTURING=1;CKEDITOR.EVENT_PHASE_AT_TARGET=2;
-CKEDITOR.EVENT_PHASE_BUBBLING=3;CKEDITOR.dom.domObject=function(a){if(a)this.$=a};
-CKEDITOR.dom.domObject.prototype=function(){var a=function(a,b){return function(c){typeof CKEDITOR!="undefined"&&a.fire(b,new CKEDITOR.dom.event(c))}};return{getPrivate:function(){var a;if(!(a=this.getCustomData("_")))this.setCustomData("_",a={});return a},on:function(e){var b=this.getCustomData("_cke_nativeListeners");if(!b){b={};this.setCustomData("_cke_nativeListeners",b)}if(!b[e]){b=b[e]=a(this,e);this.$.addEventListener?this.$.addEventListener(e,b,!!CKEDITOR.event.useCapture):this.$.attachEvent&&
-this.$.attachEvent("on"+e,b)}return CKEDITOR.event.prototype.on.apply(this,arguments)},removeListener:function(a){CKEDITOR.event.prototype.removeListener.apply(this,arguments);if(!this.hasListeners(a)){var b=this.getCustomData("_cke_nativeListeners"),c=b&&b[a];if(c){this.$.removeEventListener?this.$.removeEventListener(a,c,false):this.$.detachEvent&&this.$.detachEvent("on"+a,c);delete b[a]}}},removeAllListeners:function(){var a=this.getCustomData("_cke_nativeListeners"),b;for(b in a){var c=a[b];this.$.detachEvent?
-this.$.detachEvent("on"+b,c):this.$.removeEventListener&&this.$.removeEventListener(b,c,false);delete a[b]}CKEDITOR.event.prototype.removeAllListeners.call(this)}}}();
-(function(a){var e={};CKEDITOR.on("reset",function(){e={}});a.equals=function(a){try{return a&&a.$===this.$}catch(c){return false}};a.setCustomData=function(a,c){var f=this.getUniqueId();(e[f]||(e[f]={}))[a]=c;return this};a.getCustomData=function(a){var c=this.$["data-cke-expando"];return(c=c&&e[c])&&a in c?c[a]:null};a.removeCustomData=function(a){var c=this.$["data-cke-expando"],c=c&&e[c],f,d;if(c){f=c[a];d=a in c;delete c[a]}return d?f:null};a.clearCustomData=function(){this.removeAllListeners();
-var a=this.$["data-cke-expando"];a&&delete e[a]};a.getUniqueId=function(){return this.$["data-cke-expando"]||(this.$["data-cke-expando"]=CKEDITOR.tools.getNextNumber())};CKEDITOR.event.implementOn(a)})(CKEDITOR.dom.domObject.prototype);
-CKEDITOR.dom.node=function(a){return a?new CKEDITOR.dom[a.nodeType==CKEDITOR.NODE_DOCUMENT?"document":a.nodeType==CKEDITOR.NODE_ELEMENT?"element":a.nodeType==CKEDITOR.NODE_TEXT?"text":a.nodeType==CKEDITOR.NODE_COMMENT?"comment":a.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT?"documentFragment":"domObject"](a):this};CKEDITOR.dom.node.prototype=new CKEDITOR.dom.domObject;CKEDITOR.NODE_ELEMENT=1;CKEDITOR.NODE_DOCUMENT=9;CKEDITOR.NODE_TEXT=3;CKEDITOR.NODE_COMMENT=8;CKEDITOR.NODE_DOCUMENT_FRAGMENT=11;
-CKEDITOR.POSITION_IDENTICAL=0;CKEDITOR.POSITION_DISCONNECTED=1;CKEDITOR.POSITION_FOLLOWING=2;CKEDITOR.POSITION_PRECEDING=4;CKEDITOR.POSITION_IS_CONTAINED=8;CKEDITOR.POSITION_CONTAINS=16;
-CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype,{appendTo:function(a,e){a.append(this,e);return a},clone:function(a,e){var b=this.$.cloneNode(a),c=function(f){f["data-cke-expando"]&&(f["data-cke-expando"]=false);if(f.nodeType==CKEDITOR.NODE_ELEMENT){e||f.removeAttribute("id",false);if(a)for(var f=f.childNodes,d=0;d<f.length;d++)c(f[d])}};c(b);return new CKEDITOR.dom.node(b)},hasPrevious:function(){return!!this.$.previousSibling},hasNext:function(){return!!this.$.nextSibling},insertAfter:function(a){a.$.parentNode.insertBefore(this.$,
-a.$.nextSibling);return a},insertBefore:function(a){a.$.parentNode.insertBefore(this.$,a.$);return a},insertBeforeMe:function(a){this.$.parentNode.insertBefore(a.$,this.$);return a},getAddress:function(a){for(var e=[],b=this.getDocument().$.documentElement,c=this.$;c&&c!=b;){var f=c.parentNode;f&&e.unshift(this.getIndex.call({$:c},a));c=f}return e},getDocument:function(){return new CKEDITOR.dom.document(this.$.ownerDocument||this.$.parentNode.ownerDocument)},getIndex:function(a){var e=this.$,b=-1,
-c;if(!this.$.parentNode)return b;do if(!a||!(e!=this.$&&e.nodeType==CKEDITOR.NODE_TEXT&&(c||!e.nodeValue))){b++;c=e.nodeType==CKEDITOR.NODE_TEXT}while(e=e.previousSibling);return b},getNextSourceNode:function(a,e,b){if(b&&!b.call)var c=b,b=function(a){return!a.equals(c)};var a=!a&&this.getFirst&&this.getFirst(),f;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getNext()}for(;!a&&(f=(f||this).getParent());){if(b&&b(f,true)===false)return null;a=f.getNext()}return!a||
-b&&b(a)===false?null:e&&e!=a.type?a.getNextSourceNode(false,e,b):a},getPreviousSourceNode:function(a,e,b){if(b&&!b.call)var c=b,b=function(a){return!a.equals(c)};var a=!a&&this.getLast&&this.getLast(),f;if(!a){if(this.type==CKEDITOR.NODE_ELEMENT&&b&&b(this,true)===false)return null;a=this.getPrevious()}for(;!a&&(f=(f||this).getParent());){if(b&&b(f,true)===false)return null;a=f.getPrevious()}return!a||b&&b(a)===false?null:e&&a.type!=e?a.getPreviousSourceNode(false,e,b):a},getPrevious:function(a){var e=
-this.$,b;do b=(e=e.previousSibling)&&e.nodeType!=10&&new CKEDITOR.dom.node(e);while(b&&a&&!a(b));return b},getNext:function(a){var e=this.$,b;do b=(e=e.nextSibling)&&new CKEDITOR.dom.node(e);while(b&&a&&!a(b));return b},getParent:function(a){var e=this.$.parentNode;return e&&(e.nodeType==CKEDITOR.NODE_ELEMENT||a&&e.nodeType==CKEDITOR.NODE_DOCUMENT_FRAGMENT)?new CKEDITOR.dom.node(e):null},getParents:function(a){var e=this,b=[];do b[a?"push":"unshift"](e);while(e=e.getParent());return b},getCommonAncestor:function(a){if(a.equals(this))return this;
-if(a.contains&&a.contains(this))return a;var e=this.contains?this:this.getParent();do if(e.contains(a))return e;while(e=e.getParent());return null},getPosition:function(a){var e=this.$,b=a.$;if(e.compareDocumentPosition)return e.compareDocumentPosition(b);if(e==b)return CKEDITOR.POSITION_IDENTICAL;if(this.type==CKEDITOR.NODE_ELEMENT&&a.type==CKEDITOR.NODE_ELEMENT){if(e.contains){if(e.contains(b))return CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING;if(b.contains(e))return CKEDITOR.POSITION_IS_CONTAINED+
-CKEDITOR.POSITION_FOLLOWING}if("sourceIndex"in e)return e.sourceIndex<0||b.sourceIndex<0?CKEDITOR.POSITION_DISCONNECTED:e.sourceIndex<b.sourceIndex?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING}for(var e=this.getAddress(),a=a.getAddress(),b=Math.min(e.length,a.length),c=0;c<=b-1;c++)if(e[c]!=a[c]){if(c<b)return e[c]<a[c]?CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_FOLLOWING;break}return e.length<a.length?CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_PRECEDING:CKEDITOR.POSITION_IS_CONTAINED+
-CKEDITOR.POSITION_FOLLOWING},getAscendant:function(a,e){var b=this.$,c,f;if(!e)b=b.parentNode;if(typeof a=="function"){f=true;c=a}else{f=false;c=function(f){f=typeof f.nodeName=="string"?f.nodeName.toLowerCase():"";return typeof a=="string"?f==a:f in a}}for(;b;){if(c(f?new CKEDITOR.dom.node(b):b))return new CKEDITOR.dom.node(b);try{b=b.parentNode}catch(d){b=null}}return null},hasAscendant:function(a,e){var b=this.$;if(!e)b=b.parentNode;for(;b;){if(b.nodeName&&b.nodeName.toLowerCase()==a)return true;
-b=b.parentNode}return false},move:function(a,e){a.append(this.remove(),e)},remove:function(a){var e=this.$,b=e.parentNode;if(b){if(a)for(;a=e.firstChild;)b.insertBefore(e.removeChild(a),e);b.removeChild(e)}return this},replace:function(a){this.insertBefore(a);a.remove()},trim:function(){this.ltrim();this.rtrim()},ltrim:function(){for(var a;this.getFirst&&(a=this.getFirst());){if(a.type==CKEDITOR.NODE_TEXT){var e=CKEDITOR.tools.ltrim(a.getText()),b=a.getLength();if(e){if(e.length<b){a.split(b-e.length);
-this.$.removeChild(this.$.firstChild)}}else{a.remove();continue}}break}},rtrim:function(){for(var a;this.getLast&&(a=this.getLast());){if(a.type==CKEDITOR.NODE_TEXT){var e=CKEDITOR.tools.rtrim(a.getText()),b=a.getLength();if(e){if(e.length<b){a.split(e.length);this.$.lastChild.parentNode.removeChild(this.$.lastChild)}}else{a.remove();continue}}break}if(CKEDITOR.env.needsBrFiller)(a=this.$.lastChild)&&(a.type==1&&a.nodeName.toLowerCase()=="br")&&a.parentNode.removeChild(a)},isReadOnly:function(){var a=
-this;this.type!=CKEDITOR.NODE_ELEMENT&&(a=this.getParent());if(a&&typeof a.$.isContentEditable!="undefined")return!(a.$.isContentEditable||a.data("cke-editable"));for(;a;){if(a.data("cke-editable"))break;if(a.getAttribute("contentEditable")=="false")return true;if(a.getAttribute("contentEditable")=="true")break;a=a.getParent()}return!a}});CKEDITOR.dom.window=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.window.prototype=new CKEDITOR.dom.domObject;
-CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype,{focus:function(){this.$.focus()},getViewPaneSize:function(){var a=this.$.document,e=a.compatMode=="CSS1Compat";return{width:(e?a.documentElement.clientWidth:a.body.clientWidth)||0,height:(e?a.documentElement.clientHeight:a.body.clientHeight)||0}},getScrollPosition:function(){var a=this.$;if("pageXOffset"in a)return{x:a.pageXOffset||0,y:a.pageYOffset||0};a=a.document;return{x:a.documentElement.scrollLeft||a.body.scrollLeft||0,y:a.documentElement.scrollTop||
-a.body.scrollTop||0}},getFrame:function(){var a=this.$.frameElement;return a?new CKEDITOR.dom.element.get(a):null}});CKEDITOR.dom.document=function(a){CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.document.prototype=new CKEDITOR.dom.domObject;
-CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype,{type:CKEDITOR.NODE_DOCUMENT,appendStyleSheet:function(a){if(this.$.createStyleSheet)this.$.createStyleSheet(a);else{var e=new CKEDITOR.dom.element("link");e.setAttributes({rel:"stylesheet",type:"text/css",href:a});this.getHead().append(e)}},appendStyleText:function(a){if(this.$.createStyleSheet){var e=this.$.createStyleSheet("");e.cssText=a}else{var b=new CKEDITOR.dom.element("style",this);b.append(new CKEDITOR.dom.text(a,this));this.getHead().append(b)}return e||
-b.$.sheet},createElement:function(a,e){var b=new CKEDITOR.dom.element(a,this);if(e){e.attributes&&b.setAttributes(e.attributes);e.styles&&b.setStyles(e.styles)}return b},createText:function(a){return new CKEDITOR.dom.text(a,this)},focus:function(){this.getWindow().focus()},getActive:function(){var a;try{a=this.$.activeElement}catch(e){return null}return new CKEDITOR.dom.element(a)},getById:function(a){return(a=this.$.getElementById(a))?new CKEDITOR.dom.element(a):null},getByAddress:function(a,e){for(var b=
-this.$.documentElement,c=0;b&&c<a.length;c++){var f=a[c];if(e)for(var d=-1,g=0;g<b.childNodes.length;g++){var h=b.childNodes[g];if(!(e===true&&h.nodeType==3&&h.previousSibling&&h.previousSibling.nodeType==3)){d++;if(d==f){b=h;break}}}else b=b.childNodes[f]}return b?new CKEDITOR.dom.node(b):null},getElementsByTag:function(a,e){!(CKEDITOR.env.ie&&document.documentMode<=8)&&e&&(a=e+":"+a);return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a))},getHead:function(){var a=this.$.getElementsByTagName("head")[0];
-return a=a?new CKEDITOR.dom.element(a):this.getDocumentElement().append(new CKEDITOR.dom.element("head"),true)},getBody:function(){return new CKEDITOR.dom.element(this.$.body)},getDocumentElement:function(){return new CKEDITOR.dom.element(this.$.documentElement)},getWindow:function(){return new CKEDITOR.dom.window(this.$.parentWindow||this.$.defaultView)},write:function(a){this.$.open("text/html","replace");CKEDITOR.env.ie&&(a=a.replace(/(?:^\s*<!DOCTYPE[^>]*?>)|^/i,'$&\n<script data-cke-temp="1">('+
-CKEDITOR.tools.fixDomain+")();<\/script>"));this.$.write(a);this.$.close()},find:function(a){return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a))},findOne:function(a){return(a=this.$.querySelector(a))?new CKEDITOR.dom.element(a):null},_getHtml5ShivFrag:function(){var a=this.getCustomData("html5ShivFrag");if(!a){a=this.$.createDocumentFragment();CKEDITOR.tools.enableHtml5Elements(a,true);this.setCustomData("html5ShivFrag",a)}return a}});CKEDITOR.dom.nodeList=function(a){this.$=a};
-CKEDITOR.dom.nodeList.prototype={count:function(){return this.$.length},getItem:function(a){if(a<0||a>=this.$.length)return null;return(a=this.$[a])?new CKEDITOR.dom.node(a):null}};CKEDITOR.dom.element=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createElement(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.element.get=function(a){return(a=typeof a=="string"?document.getElementById(a)||document.getElementsByName(a)[0]:a)&&(a.$?a:new CKEDITOR.dom.element(a))};
-CKEDITOR.dom.element.prototype=new CKEDITOR.dom.node;CKEDITOR.dom.element.createFromHtml=function(a,e){var b=new CKEDITOR.dom.element("div",e);b.setHtml(a);return b.getFirst().remove()};
-CKEDITOR.dom.element.setMarker=function(a,e,b,c){var f=e.getCustomData("list_marker_id")||e.setCustomData("list_marker_id",CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"),d=e.getCustomData("list_marker_names")||e.setCustomData("list_marker_names",{}).getCustomData("list_marker_names");a[f]=e;d[b]=1;return e.setCustomData(b,c)};CKEDITOR.dom.element.clearAllMarkers=function(a){for(var e in a)CKEDITOR.dom.element.clearMarkers(a,a[e],1)};
-CKEDITOR.dom.element.clearMarkers=function(a,e,b){var c=e.getCustomData("list_marker_names"),f=e.getCustomData("list_marker_id"),d;for(d in c)e.removeCustomData(d);e.removeCustomData("list_marker_names");if(b){e.removeCustomData("list_marker_id");delete a[f]}};
-(function(){function a(a){var d=true;if(!a.$.id){a.$.id="cke_tmp_"+CKEDITOR.tools.getNextNumber();d=false}return function(){d||a.removeAttribute("id")}}function e(a,d){return"#"+a.$.id+" "+d.split(/,\s*/).join(", #"+a.$.id+" ")}function b(a){for(var d=0,b=0,e=c[a].length;b<e;b++)d=d+(parseInt(this.getComputedStyle(c[a][b])||0,10)||0);return d}CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_ELEMENT,addClass:function(a){var d=this.$.className;d&&(RegExp("(?:^|\\s)"+a+"(?:\\s|$)",
-"").test(d)||(d=d+(" "+a)));this.$.className=d||a;return this},removeClass:function(a){var d=this.getAttribute("class");if(d){a=RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","i");if(a.test(d))(d=d.replace(a,"").replace(/^\s+/,""))?this.setAttribute("class",d):this.removeAttribute("class")}return this},hasClass:function(a){return RegExp("(?:^|\\s+)"+a+"(?=\\s|$)","").test(this.getAttribute("class"))},append:function(a,d){typeof a=="string"&&(a=this.getDocument().createElement(a));d?this.$.insertBefore(a.$,this.$.firstChild):
-this.$.appendChild(a.$);return a},appendHtml:function(a){if(this.$.childNodes.length){var d=new CKEDITOR.dom.element("div",this.getDocument());d.setHtml(a);d.moveChildren(this)}else this.setHtml(a)},appendText:function(a){this.$.text!=null?this.$.text=this.$.text+a:this.append(new CKEDITOR.dom.text(a))},appendBogus:function(a){if(a||CKEDITOR.env.needsBrFiller){for(a=this.getLast();a&&a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.rtrim(a.getText());)a=a.getPrevious();if(!a||!a.is||!a.is("br")){a=this.getDocument().createElement("br");
-CKEDITOR.env.gecko&&a.setAttribute("type","_moz");this.append(a)}}},breakParent:function(a){var d=new CKEDITOR.dom.range(this.getDocument());d.setStartAfter(this);d.setEndAfter(a);a=d.extractContents();d.insertNode(this.remove());a.insertAfterNode(this)},contains:CKEDITOR.env.ie||CKEDITOR.env.webkit?function(a){var d=this.$;return a.type!=CKEDITOR.NODE_ELEMENT?d.contains(a.getParent().$):d!=a.$&&d.contains(a.$)}:function(a){return!!(this.$.compareDocumentPosition(a.$)&16)},focus:function(){function a(){try{this.$.focus()}catch(f){}}
-return function(d){d?CKEDITOR.tools.setTimeout(a,100,this):a.call(this)}}(),getHtml:function(){var a=this.$.innerHTML;return CKEDITOR.env.ie?a.replace(/<\?[^>]*>/g,""):a},getOuterHtml:function(){if(this.$.outerHTML)return this.$.outerHTML.replace(/<\?[^>]*>/,"");var a=this.$.ownerDocument.createElement("div");a.appendChild(this.$.cloneNode(true));return a.innerHTML},getClientRect:function(){var a=CKEDITOR.tools.extend({},this.$.getBoundingClientRect());!a.width&&(a.width=a.right-a.left);!a.height&&
-(a.height=a.bottom-a.top);return a},setHtml:CKEDITOR.env.ie&&CKEDITOR.env.version<9?function(a){try{var d=this.$;if(this.getParent())return d.innerHTML=a;var b=this.getDocument()._getHtml5ShivFrag();b.appendChild(d);d.innerHTML=a;b.removeChild(d);return a}catch(c){this.$.innerHTML="";d=new CKEDITOR.dom.element("body",this.getDocument());d.$.innerHTML=a;for(d=d.getChildren();d.count();)this.append(d.getItem(0));return a}}:function(a){return this.$.innerHTML=a},setText:function(){var a=document.createElement("p");
-a.innerHTML="x";a=a.textContent;return function(d){this.$[a?"textContent":"innerText"]=d}}(),getAttribute:function(){var a=function(a){return this.$.getAttribute(a,2)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){switch(a){case "class":a="className";break;case "http-equiv":a="httpEquiv";break;case "name":return this.$.name;case "tabindex":a=this.$.getAttribute(a,2);a!==0&&this.$.tabIndex===0&&(a=null);return a;case "checked":a=this.$.attributes.getNamedItem(a);
-return(a.specified?a.nodeValue:this.$.checked)?"checked":null;case "hspace":case "value":return this.$[a];case "style":return this.$.style.cssText;case "contenteditable":case "contentEditable":return this.$.attributes.getNamedItem("contentEditable").specified?this.$.getAttribute("contentEditable"):null}return this.$.getAttribute(a,2)}:a}(),getChildren:function(){return new CKEDITOR.dom.nodeList(this.$.childNodes)},getComputedStyle:CKEDITOR.env.ie?function(a){return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)]}:
-function(a){var d=this.getWindow().$.getComputedStyle(this.$,null);return d?d.getPropertyValue(a):""},getDtd:function(){var a=CKEDITOR.dtd[this.getName()];this.getDtd=function(){return a};return a},getElementsByTag:CKEDITOR.dom.document.prototype.getElementsByTag,getTabIndex:CKEDITOR.env.ie?function(){var a=this.$.tabIndex;a===0&&(!CKEDITOR.dtd.$tabIndex[this.getName()]&&parseInt(this.getAttribute("tabindex"),10)!==0)&&(a=-1);return a}:CKEDITOR.env.webkit?function(){var a=this.$.tabIndex;if(a===void 0){a=
-parseInt(this.getAttribute("tabindex"),10);isNaN(a)&&(a=-1)}return a}:function(){return this.$.tabIndex},getText:function(){return this.$.textContent||this.$.innerText||""},getWindow:function(){return this.getDocument().getWindow()},getId:function(){return this.$.id||null},getNameAtt:function(){return this.$.name||null},getName:function(){var a=this.$.nodeName.toLowerCase();if(CKEDITOR.env.ie&&document.documentMode<=8){var d=this.$.scopeName;d!="HTML"&&(a=d.toLowerCase()+":"+a)}this.getName=function(){return a};
-return this.getName()},getValue:function(){return this.$.value},getFirst:function(a){var d=this.$.firstChild;(d=d&&new CKEDITOR.dom.node(d))&&(a&&!a(d))&&(d=d.getNext(a));return d},getLast:function(a){var d=this.$.lastChild;(d=d&&new CKEDITOR.dom.node(d))&&(a&&!a(d))&&(d=d.getPrevious(a));return d},getStyle:function(a){return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]},is:function(){var a=this.getName();if(typeof arguments[0]=="object")return!!arguments[0][a];for(var d=0;d<arguments.length;d++)if(arguments[d]==
-a)return true;return false},isEditable:function(a){var d=this.getName();if(this.isReadOnly()||this.getComputedStyle("display")=="none"||this.getComputedStyle("visibility")=="hidden"||CKEDITOR.dtd.$nonEditable[d]||CKEDITOR.dtd.$empty[d]||this.is("a")&&(this.data("cke-saved-name")||this.hasAttribute("name"))&&!this.getChildCount())return false;if(a!==false){a=CKEDITOR.dtd[d]||CKEDITOR.dtd.span;return!(!a||!a["#"])}return true},isIdentical:function(a){var d=this.clone(0,1),a=a.clone(0,1);d.removeAttributes(["_moz_dirty",
-"data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);a.removeAttributes(["_moz_dirty","data-cke-expando","data-cke-saved-href","data-cke-saved-name"]);if(d.$.isEqualNode){d.$.style.cssText=CKEDITOR.tools.normalizeCssText(d.$.style.cssText);a.$.style.cssText=CKEDITOR.tools.normalizeCssText(a.$.style.cssText);return d.$.isEqualNode(a.$)}d=d.getOuterHtml();a=a.getOuterHtml();if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&this.is("a")){var b=this.getParent();if(b.type==CKEDITOR.NODE_ELEMENT){b=
-b.clone();b.setHtml(d);d=b.getHtml();b.setHtml(a);a=b.getHtml()}}return d==a},isVisible:function(){var a=(this.$.offsetHeight||this.$.offsetWidth)&&this.getComputedStyle("visibility")!="hidden",d,b;if(a&&CKEDITOR.env.webkit){d=this.getWindow();if(!d.equals(CKEDITOR.document.getWindow())&&(b=d.$.frameElement))a=(new CKEDITOR.dom.element(b)).isVisible()}return!!a},isEmptyInlineRemoveable:function(){if(!CKEDITOR.dtd.$removeEmpty[this.getName()])return false;for(var a=this.getChildren(),d=0,b=a.count();d<
-b;d++){var c=a.getItem(d);if(!(c.type==CKEDITOR.NODE_ELEMENT&&c.data("cke-bookmark"))&&(c.type==CKEDITOR.NODE_ELEMENT&&!c.isEmptyInlineRemoveable()||c.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(c.getText())))return false}return true},hasAttributes:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(){for(var a=this.$.attributes,d=0;d<a.length;d++){var b=a[d];switch(b.nodeName){case "class":if(this.getAttribute("class"))return true;case "data-cke-expando":continue;default:if(b.specified)return true}}return false}:
-function(){var a=this.$.attributes,d=a.length,b={"data-cke-expando":1,_moz_dirty:1};return d>0&&(d>2||!b[a[0].nodeName]||d==2&&!b[a[1].nodeName])},hasAttribute:function(){function a(d){var f=this.$.attributes.getNamedItem(d);if(this.getName()=="input")switch(d){case "class":return this.$.className.length>0;case "checked":return!!this.$.checked;case "value":d=this.getAttribute("type");return d=="checkbox"||d=="radio"?this.$.value!="on":!!this.$.value}return!f?false:f.specified}return CKEDITOR.env.ie?
-CKEDITOR.env.version<8?function(d){return d=="name"?!!this.$.name:a.call(this,d)}:a:function(a){return!!this.$.attributes.getNamedItem(a)}}(),hide:function(){this.setStyle("display","none")},moveChildren:function(a,d){var b=this.$,a=a.$;if(b!=a){var c;if(d)for(;c=b.lastChild;)a.insertBefore(b.removeChild(c),a.firstChild);else for(;c=b.firstChild;)a.appendChild(b.removeChild(c))}},mergeSiblings:function(){function a(d,f,b){if(f&&f.type==CKEDITOR.NODE_ELEMENT){for(var c=[];f.data("cke-bookmark")||f.isEmptyInlineRemoveable();){c.push(f);
-f=b?f.getNext():f.getPrevious();if(!f||f.type!=CKEDITOR.NODE_ELEMENT)return}if(d.isIdentical(f)){for(var e=b?d.getLast():d.getFirst();c.length;)c.shift().move(d,!b);f.moveChildren(d,!b);f.remove();e&&e.type==CKEDITOR.NODE_ELEMENT&&e.mergeSiblings()}}}return function(d){if(d===false||CKEDITOR.dtd.$removeEmpty[this.getName()]||this.is("a")){a(this,this.getNext(),true);a(this,this.getPrevious())}}}(),show:function(){this.setStyles({display:"",visibility:""})},setAttribute:function(){var a=function(a,
-f){this.$.setAttribute(a,f);return this};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(d,b){d=="class"?this.$.className=b:d=="style"?this.$.style.cssText=b:d=="tabindex"?this.$.tabIndex=b:d=="checked"?this.$.checked=b:d=="contenteditable"?a.call(this,"contentEditable",b):a.apply(this,arguments);return this}:CKEDITOR.env.ie8Compat&&CKEDITOR.env.secure?function(d,b){if(d=="src"&&b.match(/^http:\/\//))try{a.apply(this,arguments)}catch(c){}else a.apply(this,arguments);
-return this}:a}(),setAttributes:function(a){for(var d in a)this.setAttribute(d,a[d]);return this},setValue:function(a){this.$.value=a;return this},removeAttribute:function(){var a=function(a){this.$.removeAttribute(a)};return CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?function(a){a=="class"?a="className":a=="tabindex"?a="tabIndex":a=="contenteditable"&&(a="contentEditable");this.$.removeAttribute(a)}:a}(),removeAttributes:function(a){if(CKEDITOR.tools.isArray(a))for(var d=0;d<
-a.length;d++)this.removeAttribute(a[d]);else for(d in a)a.hasOwnProperty(d)&&this.removeAttribute(d)},removeStyle:function(a){var d=this.$.style;if(!d.removeProperty&&(a=="border"||a=="margin"||a=="padding")){var b=["top","left","right","bottom"],c;a=="border"&&(c=["color","style","width"]);for(var d=[],e=0;e<b.length;e++)if(c)for(var j=0;j<c.length;j++)d.push([a,b[e],c[j]].join("-"));else d.push([a,b[e]].join("-"));for(a=0;a<d.length;a++)this.removeStyle(d[a])}else{d.removeProperty?d.removeProperty(a):
-d.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a));this.$.style.cssText||this.removeAttribute("style")}},setStyle:function(a,d){this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)]=d;return this},setStyles:function(a){for(var d in a)this.setStyle(d,a[d]);return this},setOpacity:function(a){if(CKEDITOR.env.ie&&CKEDITOR.env.version<9){a=Math.round(a*100);this.setStyle("filter",a>=100?"":"progid:DXImageTransform.Microsoft.Alpha(opacity="+a+")")}else this.setStyle("opacity",a)},unselectable:function(){this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select",
-"none"));if(CKEDITOR.env.ie){this.setAttribute("unselectable","on");for(var a,d=this.getElementsByTag("*"),b=0,c=d.count();b<c;b++){a=d.getItem(b);a.setAttribute("unselectable","on")}}},getPositionedAncestor:function(){for(var a=this;a.getName()!="html";){if(a.getComputedStyle("position")!="static")return a;a=a.getParent()}return null},getDocumentPosition:function(a){var d=0,b=0,c=this.getDocument(),e=c.getBody(),j=c.$.compatMode=="BackCompat";if(document.documentElement.getBoundingClientRect){var p=
-this.$.getBoundingClientRect(),u=c.$.documentElement,t=u.clientTop||e.$.clientTop||0,y=u.clientLeft||e.$.clientLeft||0,n=true;if(CKEDITOR.env.ie){n=c.getDocumentElement().contains(this);c=c.getBody().contains(this);n=j&&c||!j&&n}if(n){d=p.left+(!j&&u.scrollLeft||e.$.scrollLeft);d=d-y;b=p.top+(!j&&u.scrollTop||e.$.scrollTop);b=b-t}}else{e=this;for(c=null;e&&!(e.getName()=="body"||e.getName()=="html");){d=d+(e.$.offsetLeft-e.$.scrollLeft);b=b+(e.$.offsetTop-e.$.scrollTop);if(!e.equals(this)){d=d+(e.$.clientLeft||
-0);b=b+(e.$.clientTop||0)}for(;c&&!c.equals(e);){d=d-c.$.scrollLeft;b=b-c.$.scrollTop;c=c.getParent()}c=e;e=(p=e.$.offsetParent)?new CKEDITOR.dom.element(p):null}}if(a){e=this.getWindow();c=a.getWindow();if(!e.equals(c)&&e.$.frameElement){a=(new CKEDITOR.dom.element(e.$.frameElement)).getDocumentPosition(a);d=d+a.x;b=b+a.y}}if(!document.documentElement.getBoundingClientRect&&CKEDITOR.env.gecko&&!j){d=d+(this.$.clientLeft?1:0);b=b+(this.$.clientTop?1:0)}return{x:d,y:b}},scrollIntoView:function(a){var b=
-this.getParent();if(b){do{(b.$.clientWidth&&b.$.clientWidth<b.$.scrollWidth||b.$.clientHeight&&b.$.clientHeight<b.$.scrollHeight)&&!b.is("body")&&this.scrollIntoParent(b,a,1);if(b.is("html")){var c=b.getWindow();try{var e=c.$.frameElement;e&&(b=new CKEDITOR.dom.element(e))}catch(m){}}}while(b=b.getParent())}},scrollIntoParent:function(a,b,c){var e,m,j,p;function u(b,d){if(/body|html/.test(a.getName()))a.getWindow().$.scrollBy(b,d);else{a.$.scrollLeft=a.$.scrollLeft+b;a.$.scrollTop=a.$.scrollTop+d}}
-function t(a,b){var d={x:0,y:0};if(!a.is(n?"body":"html")){var c=a.$.getBoundingClientRect();d.x=c.left;d.y=c.top}c=a.getWindow();if(!c.equals(b)){c=t(CKEDITOR.dom.element.get(c.$.frameElement),b);d.x=d.x+c.x;d.y=d.y+c.y}return d}function y(a,b){return parseInt(a.getComputedStyle("margin-"+b)||0,10)||0}!a&&(a=this.getWindow());j=a.getDocument();var n=j.$.compatMode=="BackCompat";a instanceof CKEDITOR.dom.window&&(a=n?j.getBody():j.getDocumentElement());j=a.getWindow();m=t(this,j);var w=t(a,j),o=this.$.offsetHeight;
-e=this.$.offsetWidth;var r=a.$.clientHeight,i=a.$.clientWidth;j=m.x-y(this,"left")-w.x||0;p=m.y-y(this,"top")-w.y||0;e=m.x+e+y(this,"right")-(w.x+i)||0;m=m.y+o+y(this,"bottom")-(w.y+r)||0;if(p<0||m>0)u(0,b===true?p:b===false?m:p<0?p:m);if(c&&(j<0||e>0))u(j<0?j:e,0)},setState:function(a,b,c){b=b||"cke";switch(a){case CKEDITOR.TRISTATE_ON:this.addClass(b+"_on");this.removeClass(b+"_off");this.removeClass(b+"_disabled");c&&this.setAttribute("aria-pressed",true);c&&this.removeAttribute("aria-disabled");
-break;case CKEDITOR.TRISTATE_DISABLED:this.addClass(b+"_disabled");this.removeClass(b+"_off");this.removeClass(b+"_on");c&&this.setAttribute("aria-disabled",true);c&&this.removeAttribute("aria-pressed");break;default:this.addClass(b+"_off");this.removeClass(b+"_on");this.removeClass(b+"_disabled");c&&this.removeAttribute("aria-pressed");c&&this.removeAttribute("aria-disabled")}},getFrameDocument:function(){var a=this.$;try{a.contentWindow.document}catch(b){a.src=a.src}return a&&new CKEDITOR.dom.document(a.contentWindow.document)},
-copyAttributes:function(a,b){for(var c=this.$.attributes,b=b||{},e=0;e<c.length;e++){var m=c[e],j=m.nodeName.toLowerCase(),p;if(!(j in b))if(j=="checked"&&(p=this.getAttribute(j)))a.setAttribute(j,p);else if(!CKEDITOR.env.ie||this.hasAttribute(j)){p=this.getAttribute(j);if(p===null)p=m.nodeValue;a.setAttribute(j,p)}}if(this.$.style.cssText!=="")a.$.style.cssText=this.$.style.cssText},renameNode:function(a){if(this.getName()!=a){var b=this.getDocument(),a=new CKEDITOR.dom.element(a,b);this.copyAttributes(a);
-this.moveChildren(a);this.getParent()&&this.$.parentNode.replaceChild(a.$,this.$);a.$["data-cke-expando"]=this.$["data-cke-expando"];this.$=a.$;delete this.getName}},getChild:function(){function a(b,c){var f=b.childNodes;if(c>=0&&c<f.length)return f[c]}return function(b){var c=this.$;if(b.slice)for(;b.length>0&&c;)c=a(c,b.shift());else c=a(c,b);return c?new CKEDITOR.dom.node(c):null}}(),getChildCount:function(){return this.$.childNodes.length},disableContextMenu:function(){this.on("contextmenu",function(a){a.data.getTarget().hasClass("cke_enable_context_menu")||
-a.data.preventDefault()})},getDirection:function(a){return a?this.getComputedStyle("direction")||this.getDirection()||this.getParent()&&this.getParent().getDirection(1)||this.getDocument().$.dir||"ltr":this.getStyle("direction")||this.getAttribute("dir")},data:function(a,b){a="data-"+a;if(b===void 0)return this.getAttribute(a);b===false?this.removeAttribute(a):this.setAttribute(a,b);return null},getEditor:function(){var a=CKEDITOR.instances,b,c;for(b in a){c=a[b];if(c.element.equals(this)&&c.elementMode!=
-CKEDITOR.ELEMENT_MODE_APPENDTO)return c}return null},find:function(b){var c=a(this),b=new CKEDITOR.dom.nodeList(this.$.querySelectorAll(e(this,b)));c();return b},findOne:function(b){var c=a(this),b=this.$.querySelector(e(this,b));c();return b?new CKEDITOR.dom.element(b):null},forEach:function(a,b,c){if(!c&&(!b||this.type==b))var e=a(this);if(e!==false)for(var c=this.getChildren(),m=0;m<c.count();m++){e=c.getItem(m);e.type==CKEDITOR.NODE_ELEMENT?e.forEach(a,b):(!b||e.type==b)&&a(e)}}});var c={width:["border-left-width",
-"border-right-width","padding-left","padding-right"],height:["border-top-width","border-bottom-width","padding-top","padding-bottom"]};CKEDITOR.dom.element.prototype.setSize=function(a,c,e){if(typeof c=="number"){if(e&&(!CKEDITOR.env.ie||!CKEDITOR.env.quirks))c=c-b.call(this,a);this.setStyle(a,c+"px")}};CKEDITOR.dom.element.prototype.getSize=function(a,c){var e=Math.max(this.$["offset"+CKEDITOR.tools.capitalize(a)],this.$["client"+CKEDITOR.tools.capitalize(a)])||0;c&&(e=e-b.call(this,a));return e}})();
-CKEDITOR.dom.documentFragment=function(a){a=a||CKEDITOR.document;this.$=a.type==CKEDITOR.NODE_DOCUMENT?a.$.createDocumentFragment():a};
-CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype,CKEDITOR.dom.element.prototype,{type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,insertAfterNode:function(a){a=a.$;a.parentNode.insertBefore(this.$,a.nextSibling)}},!0,{append:1,appendBogus:1,getFirst:1,getLast:1,getParent:1,getNext:1,getPrevious:1,appendTo:1,moveChildren:1,insertBefore:1,insertAfterNode:1,replace:1,trim:1,type:1,ltrim:1,rtrim:1,getDocument:1,getChildCount:1,getChild:1,getChildren:1});
-(function(){function a(a,b){var c=this.range;if(this._.end)return null;if(!this._.start){this._.start=1;if(c.collapsed){this.end();return null}c.optimize()}var d,f=c.startContainer;d=c.endContainer;var e=c.startOffset,p=c.endOffset,i,k=this.guard,l=this.type,q=a?"getPreviousSourceNode":"getNextSourceNode";if(!a&&!this._.guardLTR){var x=d.type==CKEDITOR.NODE_ELEMENT?d:d.getParent(),s=d.type==CKEDITOR.NODE_ELEMENT?d.getChild(p):d.getNext();this._.guardLTR=function(a,b){return(!b||!x.equals(a))&&(!s||
-!a.equals(s))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}if(a&&!this._.guardRTL){var g=f.type==CKEDITOR.NODE_ELEMENT?f:f.getParent(),j=f.type==CKEDITOR.NODE_ELEMENT?e?f.getChild(e-1):null:f.getPrevious();this._.guardRTL=function(a,b){return(!b||!g.equals(a))&&(!j||!a.equals(j))&&(a.type!=CKEDITOR.NODE_ELEMENT||!b||!a.equals(c.root))}}var m=a?this._.guardRTL:this._.guardLTR;i=k?function(a,b){return m(a,b)===false?false:k(a,b)}:m;if(this.current)d=this.current[q](false,l,i);else{if(a)d.type==
-CKEDITOR.NODE_ELEMENT&&(d=p>0?d.getChild(p-1):i(d,true)===false?null:d.getPreviousSourceNode(true,l,i));else{d=f;if(d.type==CKEDITOR.NODE_ELEMENT&&!(d=d.getChild(e)))d=i(f,true)===false?null:f.getNextSourceNode(true,l,i)}d&&i(d)===false&&(d=null)}for(;d&&!this._.end;){this.current=d;if(!this.evaluator||this.evaluator(d)!==false){if(!b)return d}else if(b&&this.evaluator)return false;d=d[q](false,l,i)}this.end();return this.current=null}function e(b){for(var c,d=null;c=a.call(this,b);)d=c;return d}
-function b(a){if(j(a))return false;if(a.type==CKEDITOR.NODE_TEXT)return true;if(a.type==CKEDITOR.NODE_ELEMENT){if(a.is(CKEDITOR.dtd.$inline)||a.is("hr")||a.getAttribute("contenteditable")=="false")return true;var b;if(b=!CKEDITOR.env.needsBrFiller)if(b=a.is(p))a:{b=0;for(var c=a.getChildCount();b<c;++b)if(!j(a.getChild(b))){b=false;break a}b=true}if(b)return true}return false}CKEDITOR.dom.walker=CKEDITOR.tools.createClass({$:function(a){this.range=a;this._={}},proto:{end:function(){this._.end=1},
-next:function(){return a.call(this)},previous:function(){return a.call(this,1)},checkForward:function(){return a.call(this,0,1)!==false},checkBackward:function(){return a.call(this,1,1)!==false},lastForward:function(){return e.call(this)},lastBackward:function(){return e.call(this,1)},reset:function(){delete this.current;this._={}}}});var c={block:1,"list-item":1,table:1,"table-row-group":1,"table-header-group":1,"table-footer-group":1,"table-row":1,"table-column-group":1,"table-column":1,"table-cell":1,
-"table-caption":1},f={absolute:1,fixed:1};CKEDITOR.dom.element.prototype.isBlockBoundary=function(a){return this.getComputedStyle("float")=="none"&&!(this.getComputedStyle("position")in f)&&c[this.getComputedStyle("display")]?true:!!(this.is(CKEDITOR.dtd.$block)||a&&this.is(a))};CKEDITOR.dom.walker.blockBoundary=function(a){return function(b){return!(b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary(a))}};CKEDITOR.dom.walker.listItemBoundary=function(){return this.blockBoundary({br:1})};CKEDITOR.dom.walker.bookmark=
-function(a,b){function c(a){return a&&a.getName&&a.getName()=="span"&&a.data("cke-bookmark")}return function(d){var f,e;f=d&&d.type!=CKEDITOR.NODE_ELEMENT&&(e=d.getParent())&&c(e);f=a?f:f||c(d);return!!(b^f)}};CKEDITOR.dom.walker.whitespaces=function(a){return function(b){var c;b&&b.type==CKEDITOR.NODE_TEXT&&(c=!CKEDITOR.tools.trim(b.getText())||CKEDITOR.env.webkit&&b.getText()=="​");return!!(a^c)}};CKEDITOR.dom.walker.invisible=function(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.env.webkit?
-1:0;return function(d){if(b(d))d=1;else{d.type==CKEDITOR.NODE_TEXT&&(d=d.getParent());d=d.$.offsetWidth<=c}return!!(a^d)}};CKEDITOR.dom.walker.nodeType=function(a,b){return function(c){return!!(b^c.type==a)}};CKEDITOR.dom.walker.bogus=function(a){function b(a){return!g(a)&&!h(a)}return function(c){var f=CKEDITOR.env.needsBrFiller?c.is&&c.is("br"):c.getText&&d.test(c.getText());if(f){f=c.getParent();c=c.getNext(b);f=f.isBlockBoundary()&&(!c||c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary())}return!!(a^
-f)}};CKEDITOR.dom.walker.temp=function(a){return function(b){b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b=b&&b.hasAttribute("data-cke-temp");return!!(a^b)}};var d=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,g=CKEDITOR.dom.walker.whitespaces(),h=CKEDITOR.dom.walker.bookmark(),m=CKEDITOR.dom.walker.temp();CKEDITOR.dom.walker.ignored=function(a){return function(b){b=g(b)||h(b)||m(b);return!!(a^b)}};var j=CKEDITOR.dom.walker.ignored(),p=function(a){var b={},c;for(c in a)CKEDITOR.dtd[c]["#"]&&(b[c]=1);return b}(CKEDITOR.dtd.$block);
-CKEDITOR.dom.walker.editable=function(a){return function(c){return!!(a^b(c))}};CKEDITOR.dom.element.prototype.getBogus=function(){var a=this;do a=a.getPreviousSourceNode();while(h(a)||g(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.is(CKEDITOR.dtd.$inline)&&!a.is(CKEDITOR.dtd.$empty));return a&&(CKEDITOR.env.needsBrFiller?a.is&&a.is("br"):a.getText&&d.test(a.getText()))?a:false}})();
-CKEDITOR.dom.range=function(a){this.endOffset=this.endContainer=this.startOffset=this.startContainer=null;this.collapsed=true;var e=a instanceof CKEDITOR.dom.document;this.document=e?a:a.getDocument();this.root=e?a.getBody():a};
-(function(){function a(){var a=false,b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(true),f=CKEDITOR.dom.walker.bogus();return function(e){if(c(e)||b(e))return true;if(f(e)&&!a)return a=true;return e.type==CKEDITOR.NODE_TEXT&&(e.hasAscendant("pre")||CKEDITOR.tools.trim(e.getText()).length)||e.type==CKEDITOR.NODE_ELEMENT&&!e.is(d)?false:true}}function e(a){var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(1);return function(d){return c(d)||b(d)?true:!a&&g(d)||
-d.type==CKEDITOR.NODE_ELEMENT&&d.is(CKEDITOR.dtd.$removeEmpty)}}function b(a){return function(){var b;return this[a?"getPreviousNode":"getNextNode"](function(a){!b&&j(a)&&(b=a);return m(a)&&!(g(a)&&a.equals(b))})}}var c=function(a){a.collapsed=a.startContainer&&a.endContainer&&a.startContainer.equals(a.endContainer)&&a.startOffset==a.endOffset},f=function(a,b,c,d){a.optimizeBookmark();var f=a.startContainer,e=a.endContainer,o=a.startOffset,r=a.endOffset,i,k;if(e.type==CKEDITOR.NODE_TEXT)e=e.split(r);
-else if(e.getChildCount()>0)if(r>=e.getChildCount()){e=e.append(a.document.createText(""));k=true}else e=e.getChild(r);if(f.type==CKEDITOR.NODE_TEXT){f.split(o);f.equals(e)&&(e=f.getNext())}else if(o)if(o>=f.getChildCount()){f=f.append(a.document.createText(""));i=true}else f=f.getChild(o).getPrevious();else{f=f.append(a.document.createText(""),1);i=true}var o=f.getParents(),r=e.getParents(),l,q,x;for(l=0;l<o.length;l++){q=o[l];x=r[l];if(!q.equals(x))break}for(var s=c,g,j,m,F=l;F<o.length;F++){g=
-o[F];s&&!g.equals(f)&&(j=s.append(g.clone()));for(g=g.getNext();g;){if(g.equals(r[F])||g.equals(e))break;m=g.getNext();if(b==2)s.append(g.clone(true));else{g.remove();b==1&&s.append(g)}g=m}s&&(s=j)}s=c;for(c=l;c<r.length;c++){g=r[c];b>0&&!g.equals(e)&&(j=s.append(g.clone()));if(!o[c]||g.$.parentNode!=o[c].$.parentNode)for(g=g.getPrevious();g;){if(g.equals(o[c])||g.equals(f))break;m=g.getPrevious();if(b==2)s.$.insertBefore(g.$.cloneNode(true),s.$.firstChild);else{g.remove();b==1&&s.$.insertBefore(g.$,
-s.$.firstChild)}g=m}s&&(s=j)}if(b==2){q=a.startContainer;if(q.type==CKEDITOR.NODE_TEXT){q.$.data=q.$.data+q.$.nextSibling.data;q.$.parentNode.removeChild(q.$.nextSibling)}a=a.endContainer;if(a.type==CKEDITOR.NODE_TEXT&&a.$.nextSibling){a.$.data=a.$.data+a.$.nextSibling.data;a.$.parentNode.removeChild(a.$.nextSibling)}}else{if(q&&x&&(f.$.parentNode!=q.$.parentNode||e.$.parentNode!=x.$.parentNode)){b=x.getIndex();i&&x.$.parentNode==f.$.parentNode&&b--;if(d&&q.type==CKEDITOR.NODE_ELEMENT){d=CKEDITOR.dom.element.createFromHtml('<span data-cke-bookmark="1" style="display:none">&nbsp;</span>',
-a.document);d.insertAfter(q);q.mergeSiblings(false);a.moveToBookmark({startNode:d})}else a.setStart(x.getParent(),b)}a.collapse(true)}i&&f.remove();k&&e.$.parentNode&&e.remove()},d={abbr:1,acronym:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1},g=CKEDITOR.dom.walker.bogus(),h=/^[\t\r\n ]*(?:&nbsp;|\xa0)$/,m=CKEDITOR.dom.walker.editable(),j=CKEDITOR.dom.walker.ignored(true);CKEDITOR.dom.range.prototype=
-{clone:function(){var a=new CKEDITOR.dom.range(this.root);a.startContainer=this.startContainer;a.startOffset=this.startOffset;a.endContainer=this.endContainer;a.endOffset=this.endOffset;a.collapsed=this.collapsed;return a},collapse:function(a){if(a){this.endContainer=this.startContainer;this.endOffset=this.startOffset}else{this.startContainer=this.endContainer;this.startOffset=this.endOffset}this.collapsed=true},cloneContents:function(){var a=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||
-f(this,2,a);return a},deleteContents:function(a){this.collapsed||f(this,0,null,a)},extractContents:function(a){var b=new CKEDITOR.dom.documentFragment(this.document);this.collapsed||f(this,1,b,a);return b},createBookmark:function(a){var b,c,d,f,e=this.collapsed;b=this.document.createElement("span");b.data("cke-bookmark",1);b.setStyle("display","none");b.setHtml("&nbsp;");if(a){d="cke_bm_"+CKEDITOR.tools.getNextNumber();b.setAttribute("id",d+(e?"C":"S"))}if(!e){c=b.clone();c.setHtml("&nbsp;");a&&c.setAttribute("id",
-d+"E");f=this.clone();f.collapse();f.insertNode(c)}f=this.clone();f.collapse(true);f.insertNode(b);if(c){this.setStartAfter(b);this.setEndBefore(c)}else this.moveToPosition(b,CKEDITOR.POSITION_AFTER_END);return{startNode:a?d+(e?"C":"S"):b,endNode:a?d+"E":c,serializable:a,collapsed:e}},createBookmark2:function(){function a(b){var c=b.container,d=b.offset,f;f=c;var e=d;f=f.type!=CKEDITOR.NODE_ELEMENT||e===0||e==f.getChildCount()?0:f.getChild(e-1).type==CKEDITOR.NODE_TEXT&&f.getChild(e).type==CKEDITOR.NODE_TEXT;
-if(f){c=c.getChild(d-1);d=c.getLength()}c.type==CKEDITOR.NODE_ELEMENT&&d>1&&(d=c.getChild(d-1).getIndex(true)+1);if(c.type==CKEDITOR.NODE_TEXT){f=c;for(e=0;(f=f.getPrevious())&&f.type==CKEDITOR.NODE_TEXT;)e=e+f.getLength();d=d+e}b.container=c;b.offset=d}return function(b){var c=this.collapsed,d={container:this.startContainer,offset:this.startOffset},f={container:this.endContainer,offset:this.endOffset};if(b){a(d);c||a(f)}return{start:d.container.getAddress(b),end:c?null:f.container.getAddress(b),
-startOffset:d.offset,endOffset:f.offset,normalized:b,collapsed:c,is2:true}}}(),moveToBookmark:function(a){if(a.is2){var b=this.document.getByAddress(a.start,a.normalized),c=a.startOffset,d=a.end&&this.document.getByAddress(a.end,a.normalized),a=a.endOffset;this.setStart(b,c);d?this.setEnd(d,a):this.collapse(true)}else{b=(c=a.serializable)?this.document.getById(a.startNode):a.startNode;a=c?this.document.getById(a.endNode):a.endNode;this.setStartBefore(b);b.remove();if(a){this.setEndBefore(a);a.remove()}else this.collapse(true)}},
-getBoundaryNodes:function(){var a=this.startContainer,b=this.endContainer,c=this.startOffset,d=this.endOffset,f;if(a.type==CKEDITOR.NODE_ELEMENT){f=a.getChildCount();if(f>c)a=a.getChild(c);else if(f<1)a=a.getPreviousSourceNode();else{for(a=a.$;a.lastChild;)a=a.lastChild;a=new CKEDITOR.dom.node(a);a=a.getNextSourceNode()||a}}if(b.type==CKEDITOR.NODE_ELEMENT){f=b.getChildCount();if(f>d)b=b.getChild(d).getPreviousSourceNode(true);else if(f<1)b=b.getPreviousSourceNode();else{for(b=b.$;b.lastChild;)b=
-b.lastChild;b=new CKEDITOR.dom.node(b)}}a.getPosition(b)&CKEDITOR.POSITION_FOLLOWING&&(a=b);return{startNode:a,endNode:b}},getCommonAncestor:function(a,b){var c=this.startContainer,d=this.endContainer,c=c.equals(d)?a&&c.type==CKEDITOR.NODE_ELEMENT&&this.startOffset==this.endOffset-1?c.getChild(this.startOffset):c:c.getCommonAncestor(d);return b&&!c.is?c.getParent():c},optimize:function(){var a=this.startContainer,b=this.startOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setStartAfter(a):
-this.setStartBefore(a));a=this.endContainer;b=this.endOffset;a.type!=CKEDITOR.NODE_ELEMENT&&(b?b>=a.getLength()&&this.setEndAfter(a):this.setEndBefore(a))},optimizeBookmark:function(){var a=this.startContainer,b=this.endContainer;a.is&&(a.is("span")&&a.data("cke-bookmark"))&&this.setStartAt(a,CKEDITOR.POSITION_BEFORE_START);b&&(b.is&&b.is("span")&&b.data("cke-bookmark"))&&this.setEndAt(b,CKEDITOR.POSITION_AFTER_END)},trim:function(a,b){var c=this.startContainer,d=this.startOffset,f=this.collapsed;
-if((!a||f)&&c&&c.type==CKEDITOR.NODE_TEXT){if(d)if(d>=c.getLength()){d=c.getIndex()+1;c=c.getParent()}else{var e=c.split(d),d=c.getIndex()+1,c=c.getParent();if(this.startContainer.equals(this.endContainer))this.setEnd(e,this.endOffset-this.startOffset);else if(c.equals(this.endContainer))this.endOffset=this.endOffset+1}else{d=c.getIndex();c=c.getParent()}this.setStart(c,d);if(f){this.collapse(true);return}}c=this.endContainer;d=this.endOffset;if(!b&&!f&&c&&c.type==CKEDITOR.NODE_TEXT){if(d){d>=c.getLength()||
-c.split(d);d=c.getIndex()+1}else d=c.getIndex();c=c.getParent();this.setEnd(c,d)}},enlarge:function(a,b){function c(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.hasAttribute("contenteditable")?null:a}var d=RegExp(/[^\s\ufeff]/);switch(a){case CKEDITOR.ENLARGE_INLINE:var f=1;case CKEDITOR.ENLARGE_ELEMENT:if(this.collapsed)break;var e=this.getCommonAncestor(),o=this.root,r,i,k,l,q,x=false,s,g;s=this.startContainer;var j=this.startOffset;if(s.type==CKEDITOR.NODE_TEXT){if(j){s=!CKEDITOR.tools.trim(s.substring(0,
-j)).length&&s;x=!!s}if(s&&!(l=s.getPrevious()))k=s.getParent()}else{j&&(l=s.getChild(j-1)||s.getLast());l||(k=s)}for(k=c(k);k||l;){if(k&&!l){!q&&k.equals(e)&&(q=true);if(f?k.isBlockBoundary():!o.contains(k))break;if(!x||k.getComputedStyle("display")!="inline"){x=false;q?r=k:this.setStartBefore(k)}l=k.getPrevious()}for(;l;){s=false;if(l.type==CKEDITOR.NODE_COMMENT)l=l.getPrevious();else{if(l.type==CKEDITOR.NODE_TEXT){g=l.getText();d.test(g)&&(l=null);s=/[\s\ufeff]$/.test(g)}else if((l.$.offsetWidth>
-(CKEDITOR.env.webkit?1:0)||b&&l.is("br"))&&!l.data("cke-bookmark"))if(x&&CKEDITOR.dtd.$removeEmpty[l.getName()]){g=l.getText();if(d.test(g))l=null;else for(var j=l.$.getElementsByTagName("*"),m=0,F;F=j[m++];)if(!CKEDITOR.dtd.$removeEmpty[F.nodeName.toLowerCase()]){l=null;break}l&&(s=!!g.length)}else l=null;s&&(x?q?r=k:k&&this.setStartBefore(k):x=true);if(l){s=l.getPrevious();if(!k&&!s){k=l;l=null;break}l=s}else k=null}}k&&(k=c(k.getParent()))}s=this.endContainer;j=this.endOffset;k=l=null;q=x=false;
-var h=function(a,b){var c=new CKEDITOR.dom.range(o);c.setStart(a,b);c.setEndAt(o,CKEDITOR.POSITION_BEFORE_END);var c=new CKEDITOR.dom.walker(c),f;for(c.guard=function(a){return!(a.type==CKEDITOR.NODE_ELEMENT&&a.isBlockBoundary())};f=c.next();){if(f.type!=CKEDITOR.NODE_TEXT)return false;g=f!=a?f.getText():f.substring(b);if(d.test(g))return false}return true};if(s.type==CKEDITOR.NODE_TEXT)if(CKEDITOR.tools.trim(s.substring(j)).length)x=true;else{x=!s.getLength();if(j==s.getLength()){if(!(l=s.getNext()))k=
-s.getParent()}else h(s,j)&&(k=s.getParent())}else(l=s.getChild(j))||(k=s);for(;k||l;){if(k&&!l){!q&&k.equals(e)&&(q=true);if(f?k.isBlockBoundary():!o.contains(k))break;if(!x||k.getComputedStyle("display")!="inline"){x=false;q?i=k:k&&this.setEndAfter(k)}l=k.getNext()}for(;l;){s=false;if(l.type==CKEDITOR.NODE_TEXT){g=l.getText();h(l,0)||(l=null);s=/^[\s\ufeff]/.test(g)}else if(l.type==CKEDITOR.NODE_ELEMENT){if((l.$.offsetWidth>0||b&&l.is("br"))&&!l.data("cke-bookmark"))if(x&&CKEDITOR.dtd.$removeEmpty[l.getName()]){g=
-l.getText();if(d.test(g))l=null;else{j=l.$.getElementsByTagName("*");for(m=0;F=j[m++];)if(!CKEDITOR.dtd.$removeEmpty[F.nodeName.toLowerCase()]){l=null;break}}l&&(s=!!g.length)}else l=null}else s=1;s&&x&&(q?i=k:this.setEndAfter(k));if(l){s=l.getNext();if(!k&&!s){k=l;l=null;break}l=s}else k=null}k&&(k=c(k.getParent()))}if(r&&i){e=r.contains(i)?i:r;this.setStartBefore(e);this.setEndAfter(e)}break;case CKEDITOR.ENLARGE_BLOCK_CONTENTS:case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:k=new CKEDITOR.dom.range(this.root);
-o=this.root;k.setStartAt(o,CKEDITOR.POSITION_AFTER_START);k.setEnd(this.startContainer,this.startOffset);k=new CKEDITOR.dom.walker(k);var J,A,E=CKEDITOR.dom.walker.blockBoundary(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?{br:1}:null),v=null,z=function(a){if(a.type==CKEDITOR.NODE_ELEMENT&&a.getAttribute("contenteditable")=="false")if(v){if(v.equals(a)){v=null;return}}else v=a;else if(v)return;var b=E(a);b||(J=a);return b},f=function(a){var b=z(a);!b&&(a.is&&a.is("br"))&&(A=a);return b};k.guard=z;k=k.lastBackward();
-J=J||o;this.setStartAt(J,!J.is("br")&&(!k&&this.checkStartOfBlock()||k&&J.contains(k))?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_AFTER_END);if(a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS){k=this.clone();k=new CKEDITOR.dom.walker(k);var B=CKEDITOR.dom.walker.whitespaces(),D=CKEDITOR.dom.walker.bookmark();k.evaluator=function(a){return!B(a)&&!D(a)};if((k=k.previous())&&k.type==CKEDITOR.NODE_ELEMENT&&k.is("br"))break}k=this.clone();k.collapse();k.setEndAt(o,CKEDITOR.POSITION_BEFORE_END);k=new CKEDITOR.dom.walker(k);
-k.guard=a==CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS?f:z;J=v=A=null;k=k.lastForward();J=J||o;this.setEndAt(J,!k&&this.checkEndOfBlock()||k&&J.contains(k)?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_BEFORE_START);A&&this.setEndAfter(A)}},shrink:function(a,b,c){if(!this.collapsed){var a=a||CKEDITOR.SHRINK_TEXT,d=this.clone(),f=this.startContainer,e=this.endContainer,o=this.startOffset,g=this.endOffset,i=1,k=1;if(f&&f.type==CKEDITOR.NODE_TEXT)if(o)if(o>=f.getLength())d.setStartAfter(f);else{d.setStartBefore(f);
-i=0}else d.setStartBefore(f);if(e&&e.type==CKEDITOR.NODE_TEXT)if(g)if(g>=e.getLength())d.setEndAfter(e);else{d.setEndAfter(e);k=0}else d.setEndBefore(e);var d=new CKEDITOR.dom.walker(d),l=CKEDITOR.dom.walker.bookmark();d.evaluator=function(b){return b.type==(a==CKEDITOR.SHRINK_ELEMENT?CKEDITOR.NODE_ELEMENT:CKEDITOR.NODE_TEXT)};var q;d.guard=function(b,d){if(l(b))return true;if(a==CKEDITOR.SHRINK_ELEMENT&&b.type==CKEDITOR.NODE_TEXT||d&&b.equals(q)||c===false&&b.type==CKEDITOR.NODE_ELEMENT&&b.isBlockBoundary()||
-b.type==CKEDITOR.NODE_ELEMENT&&b.hasAttribute("contenteditable"))return false;!d&&b.type==CKEDITOR.NODE_ELEMENT&&(q=b);return true};if(i)(f=d[a==CKEDITOR.SHRINK_ELEMENT?"lastForward":"next"]())&&this.setStartAt(f,b?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_START);if(k){d.reset();(d=d[a==CKEDITOR.SHRINK_ELEMENT?"lastBackward":"previous"]())&&this.setEndAt(d,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_END)}return!(!i&&!k)}},insertNode:function(a){this.optimizeBookmark();this.trim(false,
-true);var b=this.startContainer,c=b.getChild(this.startOffset);c?a.insertBefore(c):b.append(a);a.getParent()&&a.getParent().equals(this.endContainer)&&this.endOffset++;this.setStartBefore(a)},moveToPosition:function(a,b){this.setStartAt(a,b);this.collapse(true)},moveToRange:function(a){this.setStart(a.startContainer,a.startOffset);this.setEnd(a.endContainer,a.endOffset)},selectNodeContents:function(a){this.setStart(a,0);this.setEnd(a,a.type==CKEDITOR.NODE_TEXT?a.getLength():a.getChildCount())},setStart:function(a,
-b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex();a=a.getParent()}this.startContainer=a;this.startOffset=b;if(!this.endContainer){this.endContainer=a;this.endOffset=b}c(this)},setEnd:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$empty[a.getName()]){b=a.getIndex()+1;a=a.getParent()}this.endContainer=a;this.endOffset=b;if(!this.startContainer){this.startContainer=a;this.startOffset=b}c(this)},setStartAfter:function(a){this.setStart(a.getParent(),a.getIndex()+
-1)},setStartBefore:function(a){this.setStart(a.getParent(),a.getIndex())},setEndAfter:function(a){this.setEnd(a.getParent(),a.getIndex()+1)},setEndBefore:function(a){this.setEnd(a.getParent(),a.getIndex())},setStartAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setStart(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setStart(a,a.getLength()):this.setStart(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setStartBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setStartAfter(a)}c(this)},
-setEndAt:function(a,b){switch(b){case CKEDITOR.POSITION_AFTER_START:this.setEnd(a,0);break;case CKEDITOR.POSITION_BEFORE_END:a.type==CKEDITOR.NODE_TEXT?this.setEnd(a,a.getLength()):this.setEnd(a,a.getChildCount());break;case CKEDITOR.POSITION_BEFORE_START:this.setEndBefore(a);break;case CKEDITOR.POSITION_AFTER_END:this.setEndAfter(a)}c(this)},fixBlock:function(a,b){var c=this.createBookmark(),d=this.document.createElement(b);this.collapse(a);this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);this.extractContents().appendTo(d);
-d.trim();d.appendBogus();this.insertNode(d);this.moveToBookmark(c);return d},splitBlock:function(a){var b=new CKEDITOR.dom.elementPath(this.startContainer,this.root),c=new CKEDITOR.dom.elementPath(this.endContainer,this.root),d=b.block,f=c.block,e=null;if(!b.blockLimit.equals(c.blockLimit))return null;if(a!="br"){if(!d){d=this.fixBlock(true,a);f=(new CKEDITOR.dom.elementPath(this.endContainer,this.root)).block}f||(f=this.fixBlock(false,a))}a=d&&this.checkStartOfBlock();b=f&&this.checkEndOfBlock();
-this.deleteContents();if(d&&d.equals(f))if(b){e=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(f,CKEDITOR.POSITION_AFTER_END);f=null}else if(a){e=new CKEDITOR.dom.elementPath(this.startContainer,this.root);this.moveToPosition(d,CKEDITOR.POSITION_BEFORE_START);d=null}else{f=this.splitElement(d);d.is("ul","ol")||d.appendBogus()}return{previousBlock:d,nextBlock:f,wasStartOfBlock:a,wasEndOfBlock:b,elementPath:e}},splitElement:function(a){if(!this.collapsed)return null;
-this.setEndAt(a,CKEDITOR.POSITION_BEFORE_END);var b=this.extractContents(),c=a.clone(false);b.appendTo(c);c.insertAfter(a);this.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);return c},removeEmptyBlocksAtEnd:function(){function a(d){return function(a){return b(a)||(c(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.isEmptyInlineRemoveable())||d.is("table")&&a.is("caption")?false:true}}var b=CKEDITOR.dom.walker.whitespaces(),c=CKEDITOR.dom.walker.bookmark(false);return function(b){for(var c=this.createBookmark(),
-d=this[b?"endPath":"startPath"](),f=d.block||d.blockLimit,e;f&&!f.equals(d.root)&&!f.getFirst(a(f));){e=f.getParent();this[b?"setEndAt":"setStartAt"](f,CKEDITOR.POSITION_AFTER_END);f.remove(1);f=e}this.moveToBookmark(c)}}(),startPath:function(){return new CKEDITOR.dom.elementPath(this.startContainer,this.root)},endPath:function(){return new CKEDITOR.dom.elementPath(this.endContainer,this.root)},checkBoundaryOfElement:function(a,b){var c=b==CKEDITOR.START,d=this.clone();d.collapse(c);d[c?"setStartAt":
-"setEndAt"](a,c?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END);d=new CKEDITOR.dom.walker(d);d.evaluator=e(c);return d[c?"checkBackward":"checkForward"]()},checkStartOfBlock:function(){var b=this.startContainer,c=this.startOffset;if(CKEDITOR.env.ie&&c&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.ltrim(b.substring(0,c));h.test(b)&&this.trim(0,1)}this.trim();b=new CKEDITOR.dom.elementPath(this.startContainer,this.root);c=this.clone();c.collapse(true);c.setStartAt(b.block||b.blockLimit,
-CKEDITOR.POSITION_AFTER_START);b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkBackward()},checkEndOfBlock:function(){var b=this.endContainer,c=this.endOffset;if(CKEDITOR.env.ie&&b.type==CKEDITOR.NODE_TEXT){b=CKEDITOR.tools.rtrim(b.substring(c));h.test(b)&&this.trim(1,0)}this.trim();b=new CKEDITOR.dom.elementPath(this.endContainer,this.root);c=this.clone();c.collapse(false);c.setEndAt(b.block||b.blockLimit,CKEDITOR.POSITION_BEFORE_END);b=new CKEDITOR.dom.walker(c);b.evaluator=a();return b.checkForward()},
-getPreviousNode:function(a,b,c){var d=this.clone();d.collapse(1);d.setStartAt(c||this.root,CKEDITOR.POSITION_AFTER_START);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.previous()},getNextNode:function(a,b,c){var d=this.clone();d.collapse();d.setEndAt(c||this.root,CKEDITOR.POSITION_BEFORE_END);c=new CKEDITOR.dom.walker(d);c.evaluator=a;c.guard=b;return c.next()},checkReadOnly:function(){function a(b,c){for(;b;){if(b.type==CKEDITOR.NODE_ELEMENT){if(b.getAttribute("contentEditable")==
-"false"&&!b.data("cke-editable"))return 0;if(b.is("html")||b.getAttribute("contentEditable")=="true"&&(b.contains(c)||b.equals(c)))break}b=b.getParent()}return 1}return function(){var b=this.startContainer,c=this.endContainer;return!(a(b,c)&&a(c,b))}}(),moveToElementEditablePosition:function(a,b){if(a.type==CKEDITOR.NODE_ELEMENT&&!a.isEditable(false)){this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);return true}for(var c=0;a;){if(a.type==CKEDITOR.NODE_TEXT){b&&this.endContainer&&
-this.checkEndOfBlock()&&h.test(a.getText())?this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START):this.moveToPosition(a,b?CKEDITOR.POSITION_AFTER_END:CKEDITOR.POSITION_BEFORE_START);c=1;break}if(a.type==CKEDITOR.NODE_ELEMENT)if(a.isEditable()){this.moveToPosition(a,b?CKEDITOR.POSITION_BEFORE_END:CKEDITOR.POSITION_AFTER_START);c=1}else if(b&&a.is("br")&&this.endContainer&&this.checkEndOfBlock())this.moveToPosition(a,CKEDITOR.POSITION_BEFORE_START);else if(a.getAttribute("contenteditable")=="false"&&
-a.is(CKEDITOR.dtd.$block)){this.setStartBefore(a);this.setEndAfter(a);return true}var d=a,f=c,e=void 0;d.type==CKEDITOR.NODE_ELEMENT&&d.isEditable(false)&&(e=d[b?"getLast":"getFirst"](j));!f&&!e&&(e=d[b?"getPrevious":"getNext"](j));a=e}return!!c},moveToClosestEditablePosition:function(a,b){var c=new CKEDITOR.dom.range(this.root),d=0,f,e=[CKEDITOR.POSITION_AFTER_END,CKEDITOR.POSITION_BEFORE_START];c.moveToPosition(a,e[b?0:1]);if(a.is(CKEDITOR.dtd.$block)){if(f=c[b?"getNextEditableNode":"getPreviousEditableNode"]()){d=
-1;if(f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$block)&&f.getAttribute("contenteditable")=="false"){c.setStartAt(f,CKEDITOR.POSITION_BEFORE_START);c.setEndAt(f,CKEDITOR.POSITION_AFTER_END)}else c.moveToPosition(f,e[b?1:0])}}else d=1;d&&this.moveToRange(c);return!!d},moveToElementEditStart:function(a){return this.moveToElementEditablePosition(a)},moveToElementEditEnd:function(a){return this.moveToElementEditablePosition(a,true)},getEnclosedNode:function(){var a=this.clone();a.optimize();if(a.startContainer.type!=
-CKEDITOR.NODE_ELEMENT||a.endContainer.type!=CKEDITOR.NODE_ELEMENT)return null;var a=new CKEDITOR.dom.walker(a),b=CKEDITOR.dom.walker.bookmark(false,true),c=CKEDITOR.dom.walker.whitespaces(true);a.evaluator=function(a){return c(a)&&b(a)};var d=a.next();a.reset();return d&&d.equals(a.previous())?d:null},getTouchedStartNode:function(){var a=this.startContainer;return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.startOffset)||a},getTouchedEndNode:function(){var a=this.endContainer;
-return this.collapsed||a.type!=CKEDITOR.NODE_ELEMENT?a:a.getChild(this.endOffset-1)||a},getNextEditableNode:b(),getPreviousEditableNode:b(1),scrollIntoView:function(){var a=new CKEDITOR.dom.element.createFromHtml("<span>&nbsp;</span>",this.document),b,c,d,f=this.clone();f.optimize();if(d=f.startContainer.type==CKEDITOR.NODE_TEXT){c=f.startContainer.getText();b=f.startContainer.split(f.startOffset);a.insertAfter(f.startContainer)}else f.insertNode(a);a.scrollIntoView();if(d){f.startContainer.setText(c);
-b.remove()}a.remove()}}})();CKEDITOR.POSITION_AFTER_START=1;CKEDITOR.POSITION_BEFORE_END=2;CKEDITOR.POSITION_BEFORE_START=3;CKEDITOR.POSITION_AFTER_END=4;CKEDITOR.ENLARGE_ELEMENT=1;CKEDITOR.ENLARGE_BLOCK_CONTENTS=2;CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS=3;CKEDITOR.ENLARGE_INLINE=4;CKEDITOR.START=1;CKEDITOR.END=2;CKEDITOR.SHRINK_ELEMENT=1;CKEDITOR.SHRINK_TEXT=2;"use strict";
-(function(){function a(a){if(!(arguments.length<1)){this.range=a;this.forceBrBreak=0;this.enlargeBr=1;this.enforceRealBlocks=0;this._||(this._={})}}function e(a,b,c){for(a=a.getNextSourceNode(b,null,c);!g(a);)a=a.getNextSourceNode(b,null,c);return a}function b(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")=="true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function c(a,d,f,e){a:{e==null&&(e=b(f));for(var g;g=e.shift();)if(g.getDtd().p){e={element:g,remaining:e};
-break a}e=null}if(!e)return 0;if((g=CKEDITOR.filter.instances[e.element.data("cke-filter")])&&!g.check(d))return c(a,d,f,e.remaining);d=new CKEDITOR.dom.range(e.element);d.selectNodeContents(e.element);d=d.createIterator();d.enlargeBr=a.enlargeBr;d.enforceRealBlocks=a.enforceRealBlocks;d.activeFilter=d.filter=g;a._.nestedEditable={element:e.element,container:f,remaining:e.remaining,iterator:d};return 1}function f(a,b,c){if(!b)return false;a=a.clone();a.collapse(!c);return a.checkBoundaryOfElement(b,
-c?CKEDITOR.START:CKEDITOR.END)}var d=/^[\r\n\t ]+$/,g=CKEDITOR.dom.walker.bookmark(false,true),h=CKEDITOR.dom.walker.whitespaces(true),m=function(a){return g(a)&&h(a)},j={dd:1,dt:1,li:1};a.prototype={getNextParagraph:function(a){var b,h,y,n,w,a=a||"p";if(this._.nestedEditable){if(b=this._.nestedEditable.iterator.getNextParagraph(a)){this.activeFilter=this._.nestedEditable.iterator.activeFilter;return b}this.activeFilter=this.filter;if(c(this,a,this._.nestedEditable.container,this._.nestedEditable.remaining)){this.activeFilter=
-this._.nestedEditable.iterator.activeFilter;return this._.nestedEditable.iterator.getNextParagraph(a)}this._.nestedEditable=null}if(!this.range.root.getDtd()[a])return null;if(!this._.started){var o=this.range.clone();h=o.startPath();var r=o.endPath(),i=!o.collapsed&&f(o,h.block),k=!o.collapsed&&f(o,r.block,1);o.shrink(CKEDITOR.SHRINK_ELEMENT,true);i&&o.setStartAt(h.block,CKEDITOR.POSITION_BEFORE_END);k&&o.setEndAt(r.block,CKEDITOR.POSITION_AFTER_START);h=o.endContainer.hasAscendant("pre",true)||
-o.startContainer.hasAscendant("pre",true);o.enlarge(this.forceBrBreak&&!h||!this.enlargeBr?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(!o.collapsed){h=new CKEDITOR.dom.walker(o.clone());r=CKEDITOR.dom.walker.bookmark(true,true);h.evaluator=r;this._.nextNode=h.next();h=new CKEDITOR.dom.walker(o.clone());h.evaluator=r;h=h.previous();this._.lastNode=h.getNextSourceNode(true);if(this._.lastNode&&this._.lastNode.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(this._.lastNode.getText())&&
-this._.lastNode.getParent().isBlockBoundary()){r=this.range.clone();r.moveToPosition(this._.lastNode,CKEDITOR.POSITION_AFTER_END);if(r.checkEndOfBlock()){r=new CKEDITOR.dom.elementPath(r.endContainer,r.root);this._.lastNode=(r.block||r.blockLimit).getNextSourceNode(true)}}if(!this._.lastNode||!o.root.contains(this._.lastNode)){this._.lastNode=this._.docEndMarker=o.document.createText("");this._.lastNode.insertAfter(h)}o=null}this._.started=1;h=o}r=this._.nextNode;o=this._.lastNode;for(this._.nextNode=
-null;r;){var i=0,k=r.hasAscendant("pre"),l=r.type!=CKEDITOR.NODE_ELEMENT,q=0;if(l)r.type==CKEDITOR.NODE_TEXT&&d.test(r.getText())&&(l=0);else{var x=r.getName();if(CKEDITOR.dtd.$block[x]&&r.getAttribute("contenteditable")=="false"){b=r;c(this,a,b);break}else if(r.isBlockBoundary(this.forceBrBreak&&!k&&{br:1})){if(x=="br")l=1;else if(!h&&!r.getChildCount()&&x!="hr"){b=r;y=r.equals(o);break}if(h){h.setEndAt(r,CKEDITOR.POSITION_BEFORE_START);if(x!="br")this._.nextNode=r}i=1}else{if(r.getFirst()){if(!h){h=
-this.range.clone();h.setStartAt(r,CKEDITOR.POSITION_BEFORE_START)}r=r.getFirst();continue}l=1}}if(l&&!h){h=this.range.clone();h.setStartAt(r,CKEDITOR.POSITION_BEFORE_START)}y=(!i||l)&&r.equals(o);if(h&&!i)for(;!r.getNext(m)&&!y;){x=r.getParent();if(x.isBlockBoundary(this.forceBrBreak&&!k&&{br:1})){i=1;l=0;y||x.equals(o);h.setEndAt(x,CKEDITOR.POSITION_BEFORE_END);break}r=x;l=1;y=r.equals(o);q=1}l&&h.setEndAt(r,CKEDITOR.POSITION_AFTER_END);r=e(r,q,o);if((y=!r)||i&&h)break}if(!b){if(!h){this._.docEndMarker&&
-this._.docEndMarker.remove();return this._.nextNode=null}b=new CKEDITOR.dom.elementPath(h.startContainer,h.root);r=b.blockLimit;i={div:1,th:1,td:1};b=b.block;if(!b&&r&&!this.enforceRealBlocks&&i[r.getName()]&&h.checkStartOfBlock()&&h.checkEndOfBlock()&&!r.equals(h.root))b=r;else if(!b||this.enforceRealBlocks&&b.is(j)){b=this.range.document.createElement(a);h.extractContents().appendTo(b);b.trim();h.insertNode(b);n=w=true}else if(b.getName()!="li"){if(!h.checkStartOfBlock()||!h.checkEndOfBlock()){b=
-b.clone(false);h.extractContents().appendTo(b);b.trim();w=h.splitBlock();n=!w.wasStartOfBlock;w=!w.wasEndOfBlock;h.insertNode(b)}}else if(!y)this._.nextNode=b.equals(o)?null:e(h.getBoundaryNodes().endNode,1,o)}if(n)(n=b.getPrevious())&&n.type==CKEDITOR.NODE_ELEMENT&&(n.getName()=="br"?n.remove():n.getLast()&&n.getLast().$.nodeName.toLowerCase()=="br"&&n.getLast().remove());if(w)(n=b.getLast())&&n.type==CKEDITOR.NODE_ELEMENT&&n.getName()=="br"&&(!CKEDITOR.env.needsBrFiller||n.getPrevious(g)||n.getNext(g))&&
-n.remove();if(!this._.nextNode)this._.nextNode=y||b.equals(o)||!o?null:e(b,1,o);return b}};CKEDITOR.dom.range.prototype.createIterator=function(){return new a(this)}})();
-CKEDITOR.command=function(a,e){this.uiItems=[];this.exec=function(b){if(this.state==CKEDITOR.TRISTATE_DISABLED||!this.checkAllowed())return false;this.editorFocus&&a.focus();return this.fire("exec")===false?true:e.exec.call(this,a,b)!==false};this.refresh=function(a,b){if(!this.readOnly&&a.readOnly)return true;if(this.context&&!b.isContextFor(this.context)){this.disable();return true}if(!this.checkAllowed(true)){this.disable();return true}this.startDisabled||this.enable();this.modes&&!this.modes[a.mode]&&
-this.disable();return this.fire("refresh",{editor:a,path:b})===false?true:e.refresh&&e.refresh.apply(this,arguments)!==false};var b;this.checkAllowed=function(c){return!c&&typeof b=="boolean"?b:b=a.activeFilter.checkFeature(this)};CKEDITOR.tools.extend(this,e,{modes:{wysiwyg:1},editorFocus:1,contextSensitive:!!e.context,state:CKEDITOR.TRISTATE_DISABLED});CKEDITOR.event.call(this)};
-CKEDITOR.command.prototype={enable:function(){this.state==CKEDITOR.TRISTATE_DISABLED&&this.checkAllowed()&&this.setState(!this.preserveState||typeof this.previousState=="undefined"?CKEDITOR.TRISTATE_OFF:this.previousState)},disable:function(){this.setState(CKEDITOR.TRISTATE_DISABLED)},setState:function(a){if(this.state==a||a!=CKEDITOR.TRISTATE_DISABLED&&!this.checkAllowed())return false;this.previousState=this.state;this.state=a;this.fire("state");return true},toggleState:function(){this.state==CKEDITOR.TRISTATE_OFF?
-this.setState(CKEDITOR.TRISTATE_ON):this.state==CKEDITOR.TRISTATE_ON&&this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.event.implementOn(CKEDITOR.command.prototype);CKEDITOR.ENTER_P=1;CKEDITOR.ENTER_BR=2;CKEDITOR.ENTER_DIV=3;
-CKEDITOR.config={customConfig:"config.js",autoUpdateElement:!0,language:"",defaultLanguage:"en",contentsLangDirection:"",enterMode:CKEDITOR.ENTER_P,forceEnterMode:!1,shiftEnterMode:CKEDITOR.ENTER_BR,docType:"<!DOCTYPE html>",bodyId:"",bodyClass:"",fullPage:!1,height:200,extraPlugins:"",removePlugins:"",protectedSource:[],tabIndex:0,width:"",baseFloatZIndex:1E4,blockedKeystrokes:[CKEDITOR.CTRL+66,CKEDITOR.CTRL+73,CKEDITOR.CTRL+85]};
-(function(){function a(a,b,c,d,f){var e,i,a=[];for(e in b){i=b[e];i=typeof i=="boolean"?{}:typeof i=="function"?{match:i}:Q(i);if(e.charAt(0)!="$")i.elements=e;if(c)i.featureName=c.toLowerCase();var q=i;q.elements=g(q.elements,/\s+/)||null;q.propertiesOnly=q.propertiesOnly||q.elements===true;var o=/\s*,\s*/,k=void 0;for(k in v){q[k]=g(q[k],o)||null;var l=q,B=z[k],s=g(q[z[k]],o),n=q[k],x=[],A=true,h=void 0;s?A=false:s={};for(h in n)if(h.charAt(0)=="!"){h=h.slice(1);x.push(h);s[h]=true;A=false}for(;h=
-x.pop();){n[h]=n["!"+h];delete n["!"+h]}l[B]=(A?false:s)||null}q.match=q.match||null;d.push(i);a.push(i)}for(var b=f.elements,f=f.generic,D,c=0,d=a.length;c<d;++c){e=Q(a[c]);i=e.classes===true||e.styles===true||e.attributes===true;q=e;k=B=o=void 0;for(o in v)q[o]=r(q[o]);l=true;for(k in z){o=z[k];B=q[o];s=[];n=void 0;for(n in B)n.indexOf("*")>-1?s.push(RegExp("^"+n.replace(/\*/g,".*")+"$")):s.push(n);B=s;if(B.length){q[o]=B;l=false}}q.nothingRequired=l;q.noProperties=!(q.attributes||q.classes||q.styles);
-if(e.elements===true||e.elements===null)f[i?"unshift":"push"](e);else{q=e.elements;delete e.elements;for(D in q)if(b[D])b[D][i?"unshift":"push"](e);else b[D]=[e]}}}function e(a,c,d,f){if(!a.match||a.match(c))if(f||h(a,c)){if(!a.propertiesOnly)d.valid=true;if(!d.allAttributes)d.allAttributes=b(a.attributes,c.attributes,d.validAttributes);if(!d.allStyles)d.allStyles=b(a.styles,c.styles,d.validStyles);if(!d.allClasses){a=a.classes;c=c.classes;f=d.validClasses;if(a)if(a===true)a=true;else{for(var e=0,
-i=c.length,q;e<i;++e){q=c[e];f[q]||(f[q]=a(q))}a=false}else a=false;d.allClasses=a}}}function b(a,b,c){if(!a)return false;if(a===true)return true;for(var d in b)c[d]||(c[d]=a(d));return false}function c(a,b,c){if(!a.match||a.match(b)){if(a.noProperties)return false;c.hadInvalidAttribute=f(a.attributes,b.attributes)||c.hadInvalidAttribute;c.hadInvalidStyle=f(a.styles,b.styles)||c.hadInvalidStyle;a=a.classes;b=b.classes;if(a){for(var d=false,e=a===true,i=b.length;i--;)if(e||a(b[i])){b.splice(i,1);d=
-true}a=d}else a=false;c.hadInvalidClass=a||c.hadInvalidClass}}function f(a,b){if(!a)return false;var c=false,d=a===true,f;for(f in b)if(d||a(f)){delete b[f];c=true}return c}function d(a,b,c){if(a.disabled||a.customConfig&&!c||!b)return false;a._.cachedChecks={};return true}function g(a,b){if(!a)return false;if(a===true)return a;if(typeof a=="string"){a=J(a);return a=="*"?true:CKEDITOR.tools.convertArrayToObject(a.split(b))}if(CKEDITOR.tools.isArray(a))return a.length?CKEDITOR.tools.convertArrayToObject(a):
-false;var c={},d=0,f;for(f in a){c[f]=a[f];d++}return d?c:false}function h(a,b){if(a.nothingRequired)return true;var c,d,f,e;if(f=a.requiredClasses){e=b.classes;for(c=0;c<f.length;++c){d=f[c];if(typeof d=="string"){if(CKEDITOR.tools.indexOf(e,d)==-1)return false}else if(!CKEDITOR.tools.checkIfAnyArrayItemMatches(e,d))return false}}return m(b.styles,a.requiredStyles)&&m(b.attributes,a.requiredAttributes)}function m(a,b){if(!b)return true;for(var c=0,d;c<b.length;++c){d=b[c];if(typeof d=="string"){if(!(d in
-a))return false}else if(!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a,d))return false}return true}function j(a){if(!a)return{};for(var a=a.split(/\s*,\s*/).sort(),b={};a.length;)b[a.shift()]=A;return b}function p(a){for(var b,c,d,f,e={},i=1,a=J(a);b=a.match(B);){if(c=b[2]){d=u(c,"styles");f=u(c,"attrs");c=u(c,"classes")}else d=f=c=null;e["$"+i++]={elements:b[1],classes:c,styles:d,attributes:f};a=a.slice(b[0].length)}return e}function u(a,b){var c=a.match(D[b]);return c?J(c[1]):null}function t(a){var b=
-a.styleBackup=a.attributes.style,c=a.classBackup=a.attributes["class"];if(!a.styles)a.styles=CKEDITOR.tools.parseCssText(b||"",1);if(!a.classes)a.classes=c?c.split(/\s+/):[]}function y(a,b,d,f){var i=0,k;if(f.toHtml)b.name=b.name.replace(G,"$1");if(f.doCallbacks&&a.elementCallbacks){a:for(var l=a.elementCallbacks,B=0,s=l.length,g;B<s;++B)if(g=l[B](b)){k=g;break a}if(k)return k}if(f.doTransform)if(k=a._.transformations[b.name]){t(b);for(l=0;l<k.length;++l)q(a,b,k[l]);w(b)}if(f.doFilter){a:{l=b.name;
-B=a._;a=B.allowedRules.elements[l];k=B.allowedRules.generic;l=B.disallowedRules.elements[l];B=B.disallowedRules.generic;s=f.skipRequired;g={valid:false,validAttributes:{},validClasses:{},validStyles:{},allAttributes:false,allClasses:false,allStyles:false,hadInvalidAttribute:false,hadInvalidClass:false,hadInvalidStyle:false};var n,r;if(!a&&!k)a=null;else{t(b);if(l){n=0;for(r=l.length;n<r;++n)if(c(l[n],b,g)===false){a=null;break a}}if(B){n=0;for(r=B.length;n<r;++n)c(B[n],b,g)}if(a){n=0;for(r=a.length;n<
-r;++n)e(a[n],b,g,s)}if(k){n=0;for(r=k.length;n<r;++n)e(k[n],b,g,s)}a=g}}if(!a){d.push(b);return F}if(!a.valid){d.push(b);return F}r=a.validAttributes;var x=a.validStyles;k=a.validClasses;var l=b.attributes,A=b.styles,B=b.classes,s=b.classBackup,z=b.styleBackup,v,h,D=[];g=[];var j=/^data-cke-/;n=false;delete l.style;delete l["class"];delete b.classBackup;delete b.styleBackup;if(!a.allAttributes)for(v in l)if(!r[v])if(j.test(v)){if(v!=(h=v.replace(/^data-cke-saved-/,""))&&!r[h]){delete l[v];n=true}}else{delete l[v];
-n=true}if(!a.allStyles||a.hadInvalidStyle){for(v in A)a.allStyles||x[v]?D.push(v+":"+A[v]):n=true;if(D.length)l.style=D.sort().join("; ")}else if(z)l.style=z;if(!a.allClasses||a.hadInvalidClass){for(v=0;v<B.length;++v)(a.allClasses||k[B[v]])&&g.push(B[v]);g.length&&(l["class"]=g.sort().join(" "));s&&g.length<s.split(/\s+/).length&&(n=true)}else s&&(l["class"]=s);n&&(i=F);if(!f.skipFinalValidation&&!o(b)){d.push(b);return F}}if(f.toHtml)b.name=b.name.replace(aa,"cke:$1");return i}function n(a){var b=
-[],c;for(c in a)c.indexOf("*")>-1&&b.push(c.replace(/\*/g,".*"));return b.length?RegExp("^(?:"+b.join("|")+")$"):null}function w(a){var b=a.attributes,c;delete b.style;delete b["class"];if(c=CKEDITOR.tools.writeCssText(a.styles,true))b.style=c;a.classes.length&&(b["class"]=a.classes.sort().join(" "))}function o(a){switch(a.name){case "a":if(!a.children.length&&!a.attributes.name)return false;break;case "img":if(!a.attributes.src)return false}return true}function r(a){if(!a)return false;if(a===true)return true;
-var b=n(a);return function(c){return c in a||b&&c.match(b)}}function i(){return new CKEDITOR.htmlParser.element("br")}function k(a){return a.type==CKEDITOR.NODE_ELEMENT&&(a.name=="br"||N.$block[a.name])}function l(a,b,c){var d=a.name;if(N.$empty[d]||!a.children.length)if(d=="hr"&&b=="br")a.replaceWith(i());else{a.parent&&c.push({check:"it",el:a.parent});a.remove()}else if(N.$block[d]||d=="tr")if(b=="br"){if(a.previous&&!k(a.previous)){b=i();b.insertBefore(a)}if(a.next&&!k(a.next)){b=i();b.insertAfter(a)}a.replaceWithChildren()}else{var d=
-a.children,f;b:{f=N[b];for(var e=0,q=d.length,o;e<q;++e){o=d[e];if(o.type==CKEDITOR.NODE_ELEMENT&&!f[o.name]){f=false;break b}}f=true}if(f){a.name=b;a.attributes={};c.push({check:"parent-down",el:a})}else{f=a.parent;for(var e=f.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT||f.name=="body",l,q=d.length;q>0;){o=d[--q];if(e&&(o.type==CKEDITOR.NODE_TEXT||o.type==CKEDITOR.NODE_ELEMENT&&N.$inline[o.name])){if(!l){l=new CKEDITOR.htmlParser.element(b);l.insertAfter(a);c.push({check:"parent-down",el:l})}l.add(o,0)}else{l=
-null;o.insertAfter(a);f.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(o.type==CKEDITOR.NODE_ELEMENT&&!N[f.name][o.name])&&c.push({check:"el-up",el:o})}}a.remove()}}else if(d=="style")a.remove();else{a.parent&&c.push({check:"it",el:a.parent});a.replaceWithChildren()}}function q(a,b,c){var d,f;for(d=0;d<c.length;++d){f=c[d];if((!f.check||a.check(f.check,false))&&(!f.left||f.left(b))){f.right(b,ba);break}}}function x(a,b){var c=b.getDefinition(),d=c.attributes,f=c.styles,e,i,q,o;if(a.name!=c.element)return false;
-for(e in d)if(e=="class"){c=d[e].split(/\s+/);for(q=a.classes.join("|");o=c.pop();)if(q.indexOf(o)==-1)return false}else if(a.attributes[e]!=d[e])return false;for(i in f)if(a.styles[i]!=f[i])return false;return true}function s(a,b){var c,d;if(typeof a=="string")c=a;else if(a instanceof CKEDITOR.style)d=a;else{c=a[0];d=a[1]}return[{element:c,left:d,right:function(a,c){c.transform(a,b)}}]}function M(a){return function(b){return x(b,a)}}function R(a){return function(b,c){c[a](b)}}var N=CKEDITOR.dtd,
-F=1,Q=CKEDITOR.tools.copy,J=CKEDITOR.tools.trim,A="cke-test",E=["","p","br","div"];CKEDITOR.FILTER_SKIP_TREE=2;CKEDITOR.filter=function(a){this.allowedContent=[];this.disallowedContent=[];this.elementCallbacks=null;this.disabled=false;this.editor=null;this.id=CKEDITOR.tools.getNextNumber();this._={allowedRules:{elements:{},generic:[]},disallowedRules:{elements:{},generic:[]},transformations:{},cachedTests:{}};CKEDITOR.filter.instances[this.id]=this;if(a instanceof CKEDITOR.editor){a=this.editor=a;
-this.customConfig=true;var b=a.config.allowedContent;if(b===true)this.disabled=true;else{if(!b)this.customConfig=false;this.allow(b,"config",1);this.allow(a.config.extraAllowedContent,"extra",1);this.allow(E[a.enterMode]+" "+E[a.shiftEnterMode],"default",1);this.disallow(a.config.disallowedContent)}}else{this.customConfig=false;this.allow(a,"default",1)}};CKEDITOR.filter.instances={};CKEDITOR.filter.prototype={allow:function(b,c,f){if(!d(this,b,f))return false;var e,i;if(typeof b=="string")b=p(b);
-else if(b instanceof CKEDITOR.style){if(b.toAllowedContentRules)return this.allow(b.toAllowedContentRules(this.editor),c,f);e=b.getDefinition();b={};f=e.attributes;b[e.element]=e={styles:e.styles,requiredStyles:e.styles&&CKEDITOR.tools.objectKeys(e.styles)};if(f){f=Q(f);e.classes=f["class"]?f["class"].split(/\s+/):null;e.requiredClasses=e.classes;delete f["class"];e.attributes=f;e.requiredAttributes=f&&CKEDITOR.tools.objectKeys(f)}}else if(CKEDITOR.tools.isArray(b)){for(e=0;e<b.length;++e)i=this.allow(b[e],
-c,f);return i}a(this,b,c,this.allowedContent,this._.allowedRules);return true},applyTo:function(a,b,c,d){if(this.disabled)return false;var f=this,e=[],i=this.editor&&this.editor.config.protectedSource,q,k=false,B={doFilter:!c,doTransform:true,doCallbacks:true,toHtml:b};a.forEach(function(a){if(a.type==CKEDITOR.NODE_ELEMENT){if(a.attributes["data-cke-filter"]=="off")return false;if(!b||!(a.name=="span"&&~CKEDITOR.tools.objectKeys(a.attributes).join("|").indexOf("data-cke-"))){q=y(f,a,e,B);if(q&F)k=
-true;else if(q&2)return false}}else if(a.type==CKEDITOR.NODE_COMMENT&&a.value.match(/^\{cke_protected\}(?!\{C\})/)){var c;a:{var d=decodeURIComponent(a.value.replace(/^\{cke_protected\}/,""));c=[];var o,l,n;if(i)for(l=0;l<i.length;++l)if((n=d.match(i[l]))&&n[0].length==d.length){c=true;break a}d=CKEDITOR.htmlParser.fragment.fromHtml(d);d.children.length==1&&(o=d.children[0]).type==CKEDITOR.NODE_ELEMENT&&y(f,o,c,B);c=!c.length}c||e.push(a)}},null,true);e.length&&(k=true);for(var n,a=[],d=E[d||(this.editor?
-this.editor.enterMode:CKEDITOR.ENTER_P)];c=e.pop();)c.type==CKEDITOR.NODE_ELEMENT?l(c,d,a):c.remove();for(;n=a.pop();){c=n.el;if(c.parent)switch(n.check){case "it":N.$removeEmpty[c.name]&&!c.children.length?l(c,d,a):o(c)||l(c,d,a);break;case "el-up":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!N[c.parent.name][c.name]&&l(c,d,a);break;case "parent-down":c.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT&&!N[c.parent.name][c.name]&&l(c.parent,d,a)}}return k},checkFeature:function(a){if(this.disabled||
-!a)return true;a.toFeature&&(a=a.toFeature(this.editor));return!a.requiredContent||this.check(a.requiredContent)},disable:function(){this.disabled=true},disallow:function(b){if(!d(this,b,true))return false;typeof b=="string"&&(b=p(b));a(this,b,null,this.disallowedContent,this._.disallowedRules);return true},addContentForms:function(a){if(!this.disabled&&a){var b,c,d=[],f;for(b=0;b<a.length&&!f;++b){c=a[b];if((typeof c=="string"||c instanceof CKEDITOR.style)&&this.check(c))f=c}if(f){for(b=0;b<a.length;++b)d.push(s(a[b],
-f));this.addTransformations(d)}}},addElementCallback:function(a){if(!this.elementCallbacks)this.elementCallbacks=[];this.elementCallbacks.push(a)},addFeature:function(a){if(this.disabled||!a)return true;a.toFeature&&(a=a.toFeature(this.editor));this.allow(a.allowedContent,a.name);this.addTransformations(a.contentTransformations);this.addContentForms(a.contentForms);return a.requiredContent&&(this.customConfig||this.disallowedContent.length)?this.check(a.requiredContent):true},addTransformations:function(a){var b,
-c;if(!this.disabled&&a){var d=this._.transformations,f;for(f=0;f<a.length;++f){b=a[f];var e=void 0,i=void 0,q=void 0,o=void 0,l=void 0,k=void 0;c=[];for(i=0;i<b.length;++i){q=b[i];if(typeof q=="string"){q=q.split(/\s*:\s*/);o=q[0];l=null;k=q[1]}else{o=q.check;l=q.left;k=q.right}if(!e){e=q;e=e.element?e.element:o?o.match(/^([a-z0-9]+)/i)[0]:e.left.getDefinition().element}l instanceof CKEDITOR.style&&(l=M(l));c.push({check:o==e?null:o,left:l,right:typeof k=="string"?R(k):k})}b=e;d[b]||(d[b]=[]);d[b].push(c)}}},
-check:function(a,b,c){if(this.disabled)return true;if(CKEDITOR.tools.isArray(a)){for(var d=a.length;d--;)if(this.check(a[d],b,c))return true;return false}var f,e;if(typeof a=="string"){e=a+"<"+(b===false?"0":"1")+(c?"1":"0")+">";if(e in this._.cachedChecks)return this._.cachedChecks[e];d=p(a).$1;f=d.styles;var i=d.classes;d.name=d.elements;d.classes=i=i?i.split(/\s*,\s*/):[];d.styles=j(f);d.attributes=j(d.attributes);d.children=[];i.length&&(d.attributes["class"]=i.join(" "));if(f)d.attributes.style=
-CKEDITOR.tools.writeCssText(d.styles);f=d}else{d=a.getDefinition();f=d.styles;i=d.attributes||{};if(f){f=Q(f);i.style=CKEDITOR.tools.writeCssText(f,true)}else f={};f={name:d.element,attributes:i,classes:i["class"]?i["class"].split(/\s+/):[],styles:f,children:[]}}var i=CKEDITOR.tools.clone(f),o=[],l;if(b!==false&&(l=this._.transformations[f.name])){for(d=0;d<l.length;++d)q(this,f,l[d]);w(f)}y(this,i,o,{doFilter:true,doTransform:b!==false,skipRequired:!c,skipFinalValidation:!c});b=o.length>0?false:
-CKEDITOR.tools.objectCompare(f.attributes,i.attributes,true)?true:false;typeof a=="string"&&(this._.cachedChecks[e]=b);return b},getAllowedEnterMode:function(){var a=["p","div","br"],b={p:CKEDITOR.ENTER_P,div:CKEDITOR.ENTER_DIV,br:CKEDITOR.ENTER_BR};return function(c,d){var f=a.slice(),e;if(this.check(E[c]))return c;for(d||(f=f.reverse());e=f.pop();)if(this.check(e))return b[e];return CKEDITOR.ENTER_BR}}(),destroy:function(){delete CKEDITOR.filter.instances[this.id];delete this._;delete this.allowedContent;
-delete this.disallowedContent}};var v={styles:1,attributes:1,classes:1},z={styles:"requiredStyles",attributes:"requiredAttributes",classes:"requiredClasses"},B=/^([a-z0-9*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i,D={styles:/{([^}]+)}/,attrs:/\[([^\]]+)\]/,classes:/\(([^\)]+)\)/},G=/^cke:(object|embed|param)$/,aa=/^(object|embed|param)$/,ba=CKEDITOR.filter.transformationsTools={sizeToStyle:function(a){this.lengthToStyle(a,"width");this.lengthToStyle(a,
-"height")},sizeToAttribute:function(a){this.lengthToAttribute(a,"width");this.lengthToAttribute(a,"height")},lengthToStyle:function(a,b,c){c=c||b;if(!(c in a.styles)){var d=a.attributes[b];if(d){/^\d+$/.test(d)&&(d=d+"px");a.styles[c]=d}}delete a.attributes[b]},lengthToAttribute:function(a,b,c){c=c||b;if(!(c in a.attributes)){var d=a.styles[b],f=d&&d.match(/^(\d+)(?:\.\d*)?px$/);f?a.attributes[c]=f[1]:d==A&&(a.attributes[c]=A)}delete a.styles[b]},alignmentToStyle:function(a){if(!("float"in a.styles)){var b=
-a.attributes.align;if(b=="left"||b=="right")a.styles["float"]=b}delete a.attributes.align},alignmentToAttribute:function(a){if(!("align"in a.attributes)){var b=a.styles["float"];if(b=="left"||b=="right")a.attributes.align=b}delete a.styles["float"]},matchesStyle:x,transform:function(a,b){if(typeof b=="string")a.name=b;else{var c=b.getDefinition(),d=c.styles,f=c.attributes,e,i,q,o;a.name=c.element;for(e in f)if(e=="class"){c=a.classes.join("|");for(q=f[e].split(/\s+/);o=q.pop();)c.indexOf(o)==-1&&
-a.classes.push(o)}else a.attributes[e]=f[e];for(i in d)a.styles[i]=d[i]}}}})();
-(function(){CKEDITOR.focusManager=function(a){if(a.focusManager)return a.focusManager;this.hasFocus=false;this.currentActive=null;this._={editor:a};return this};CKEDITOR.focusManager._={blurDelay:200};CKEDITOR.focusManager.prototype={focus:function(a){this._.timer&&clearTimeout(this._.timer);if(a)this.currentActive=a;if(!this.hasFocus&&!this._.locked){(a=CKEDITOR.currentInstance)&&a.focusManager.blur(1);this.hasFocus=true;(a=this._.editor.container)&&a.addClass("cke_focus");this._.editor.fire("focus")}},
-lock:function(){this._.locked=1},unlock:function(){delete this._.locked},blur:function(a){function e(){if(this.hasFocus){this.hasFocus=false;var a=this._.editor.container;a&&a.removeClass("cke_focus");this._.editor.fire("blur")}}if(!this._.locked){this._.timer&&clearTimeout(this._.timer);var b=CKEDITOR.focusManager._.blurDelay;a||!b?e.call(this):this._.timer=CKEDITOR.tools.setTimeout(function(){delete this._.timer;e.call(this)},b,this)}},add:function(a,e){var b=a.getCustomData("focusmanager");if(!b||
-b!=this){b&&b.remove(a);var b="focus",c="blur";if(e)if(CKEDITOR.env.ie){b="focusin";c="focusout"}else CKEDITOR.event.useCapture=1;var f={blur:function(){a.equals(this.currentActive)&&this.blur()},focus:function(){this.focus(a)}};a.on(b,f.focus,this);a.on(c,f.blur,this);if(e)CKEDITOR.event.useCapture=0;a.setCustomData("focusmanager",this);a.setCustomData("focusmanager_handlers",f)}},remove:function(a){a.removeCustomData("focusmanager");var e=a.removeCustomData("focusmanager_handlers");a.removeListener("blur",
-e.blur);a.removeListener("focus",e.focus)}}})();CKEDITOR.keystrokeHandler=function(a){if(a.keystrokeHandler)return a.keystrokeHandler;this.keystrokes={};this.blockedKeystrokes={};this._={editor:a};return this};
-(function(){var a,e=function(b){var b=b.data,f=b.getKeystroke(),d=this.keystrokes[f],e=this._.editor;a=e.fire("key",{keyCode:f,domEvent:b})===false;if(!a){d&&(a=e.execCommand(d,{from:"keystrokeHandler"})!==false);a||(a=!!this.blockedKeystrokes[f])}a&&b.preventDefault(true);return!a},b=function(b){if(a){a=false;b.data.preventDefault(true)}};CKEDITOR.keystrokeHandler.prototype={attach:function(a){a.on("keydown",e,this);if(CKEDITOR.env.gecko&&CKEDITOR.env.mac)a.on("keypress",b,this)}}})();
-(function(){CKEDITOR.lang={languages:{af:1,ar:1,bg:1,bn:1,bs:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,"en-au":1,"en-ca":1,"en-gb":1,en:1,eo:1,es:1,et:1,eu:1,fa:1,fi:1,fo:1,"fr-ca":1,fr:1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,is:1,it:1,ja:1,ka:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,ms:1,nb:1,nl:1,no:1,pl:1,"pt-br":1,pt:1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,"sr-latn":1,sr:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,"zh-cn":1,zh:1},rtl:{ar:1,fa:1,he:1,ku:1,ug:1},load:function(a,e,b){if(!a||!CKEDITOR.lang.languages[a])a=this.detect(e,
-a);var c=this,e=function(){c[a].dir=c.rtl[a]?"rtl":"ltr";b(a,c[a])};this[a]?e():CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/"+a+".js"),e,this)},detect:function(a,e){var b=this.languages,e=e||navigator.userLanguage||navigator.language||a,c=e.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/),f=c[1],c=c[2];b[f+"-"+c]?f=f+"-"+c:b[f]||(f=null);CKEDITOR.lang.detect=f?function(){return f}:function(a){return a};return f||a}}})();
-CKEDITOR.scriptLoader=function(){var a={},e={};return{load:function(b,c,f,d){var g=typeof b=="string";g&&(b=[b]);f||(f=CKEDITOR);var h=b.length,m=[],j=[],p=function(a){c&&(g?c.call(f,a):c.call(f,m,j))};if(h===0)p(true);else{var u=function(a,b){(b?m:j).push(a);if(--h<=0){d&&CKEDITOR.document.getDocumentElement().removeStyle("cursor");p(b)}},t=function(b,c){a[b]=1;var d=e[b];delete e[b];for(var f=0;f<d.length;f++)d[f](b,c)},y=function(b){if(a[b])u(b,true);else{var d=e[b]||(e[b]=[]);d.push(u);if(!(d.length>
-1)){var f=new CKEDITOR.dom.element("script");f.setAttributes({type:"text/javascript",src:b});if(c)if(CKEDITOR.env.ie&&CKEDITOR.env.version<11)f.$.onreadystatechange=function(){if(f.$.readyState=="loaded"||f.$.readyState=="complete"){f.$.onreadystatechange=null;t(b,true)}};else{f.$.onload=function(){setTimeout(function(){t(b,true)},0)};f.$.onerror=function(){t(b,false)}}f.appendTo(CKEDITOR.document.getHead())}}};d&&CKEDITOR.document.getDocumentElement().setStyle("cursor","wait");for(var n=0;n<h;n++)y(b[n])}},
-queue:function(){function a(){var b;(b=c[0])&&this.load(b.scriptUrl,b.callback,CKEDITOR,0)}var c=[];return function(f,d){var e=this;c.push({scriptUrl:f,callback:function(){d&&d.apply(this,arguments);c.shift();a.call(e)}});c.length==1&&a.call(this)}}()}}();CKEDITOR.resourceManager=function(a,e){this.basePath=a;this.fileName=e;this.registered={};this.loaded={};this.externals={};this._={waitingList:{}}};
-CKEDITOR.resourceManager.prototype={add:function(a,e){if(this.registered[a])throw'[CKEDITOR.resourceManager.add] The resource name "'+a+'" is already registered.';var b=this.registered[a]=e||{};b.name=a;b.path=this.getPath(a);CKEDITOR.fire(a+CKEDITOR.tools.capitalize(this.fileName)+"Ready",b);return this.get(a)},get:function(a){return this.registered[a]||null},getPath:function(a){var e=this.externals[a];return CKEDITOR.getUrl(e&&e.dir||this.basePath+a+"/")},getFilePath:function(a){var e=this.externals[a];
-return CKEDITOR.getUrl(this.getPath(a)+(e?e.file:this.fileName+".js"))},addExternal:function(a,e,b){for(var a=a.split(","),c=0;c<a.length;c++){var f=a[c];b||(e=e.replace(/[^\/]+$/,function(a){b=a;return""}));this.externals[f]={dir:e,file:b||this.fileName+".js"}}},load:function(a,e,b){CKEDITOR.tools.isArray(a)||(a=a?[a]:[]);for(var c=this.loaded,f=this.registered,d=[],g={},h={},m=0;m<a.length;m++){var j=a[m];if(j)if(!c[j]&&!f[j]){var p=this.getFilePath(j);d.push(p);p in g||(g[p]=[]);g[p].push(j)}else h[j]=
-this.get(j)}CKEDITOR.scriptLoader.load(d,function(a,d){if(d.length)throw'[CKEDITOR.resourceManager.load] Resource name "'+g[d[0]].join(",")+'" was not found at "'+d[0]+'".';for(var f=0;f<a.length;f++)for(var n=g[a[f]],j=0;j<n.length;j++){var o=n[j];h[o]=this.get(o);c[o]=1}e.call(b,h)},this)}};CKEDITOR.plugins=new CKEDITOR.resourceManager("plugins/","plugin");
-CKEDITOR.plugins.load=CKEDITOR.tools.override(CKEDITOR.plugins.load,function(a){var e={};return function(b,c,f){var d={},g=function(b){a.call(this,b,function(a){CKEDITOR.tools.extend(d,a);var b=[],h;for(h in a){var u=a[h],t=u&&u.requires;if(!e[h]){if(u.icons)for(var y=u.icons.split(","),n=y.length;n--;)CKEDITOR.skin.addIcon(y[n],u.path+"icons/"+(CKEDITOR.env.hidpi&&u.hidpi?"hidpi/":"")+y[n]+".png");e[h]=1}if(t){t.split&&(t=t.split(","));for(u=0;u<t.length;u++)d[t[u]]||b.push(t[u])}}if(b.length)g.call(this,
-b);else{for(h in d){u=d[h];if(u.onLoad&&!u.onLoad._called){u.onLoad()===false&&delete d[h];u.onLoad._called=1}}c&&c.call(f||window,d)}},this)};g.call(this,b)}});CKEDITOR.plugins.setLang=function(a,e,b){var c=this.get(a),a=c.langEntries||(c.langEntries={}),c=c.lang||(c.lang=[]);c.split&&(c=c.split(","));CKEDITOR.tools.indexOf(c,e)==-1&&c.push(e);a[e]=b};CKEDITOR.ui=function(a){if(a.ui)return a.ui;this.items={};this.instances={};this.editor=a;this._={handlers:{}};return this};
-CKEDITOR.ui.prototype={add:function(a,e,b){b.name=a.toLowerCase();var c=this.items[a]={type:e,command:b.command||null,args:Array.prototype.slice.call(arguments,2)};CKEDITOR.tools.extend(c,b)},get:function(a){return this.instances[a]},create:function(a){var e=this.items[a],b=e&&this._.handlers[e.type],c=e&&e.command&&this.editor.getCommand(e.command),b=b&&b.create.apply(this,e.args);this.instances[a]=b;c&&c.uiItems.push(b);if(b&&!b.type)b.type=e.type;return b},addHandler:function(a,e){this._.handlers[a]=
-e},space:function(a){return CKEDITOR.document.getById(this.spaceId(a))},spaceId:function(a){return this.editor.id+"_"+a}};CKEDITOR.event.implementOn(CKEDITOR.ui);
-(function(){function a(a,c,d){CKEDITOR.event.call(this);a=a&&CKEDITOR.tools.clone(a);if(c!==void 0){if(c instanceof CKEDITOR.dom.element){if(!d)throw Error("One of the element modes must be specified.");}else throw Error("Expect element of type CKEDITOR.dom.element.");if(CKEDITOR.env.ie&&CKEDITOR.env.quirks&&d==CKEDITOR.ELEMENT_MODE_INLINE)throw Error("Inline element mode is not supported on IE quirks.");if(!(d==CKEDITOR.ELEMENT_MODE_INLINE?c.is(CKEDITOR.dtd.$editable)||c.is("textarea"):d==CKEDITOR.ELEMENT_MODE_REPLACE?
-!c.is(CKEDITOR.dtd.$nonBodyContent):1))throw Error('The specified element mode is not supported on element: "'+c.getName()+'".');this.element=c;this.elementMode=d;this.name=this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO&&(c.getId()||c.getNameAtt())}else this.elementMode=CKEDITOR.ELEMENT_MODE_NONE;this._={};this.commands={};this.templates={};this.name=this.name||e();this.id=CKEDITOR.tools.getNextId();this.status="unloaded";this.config=CKEDITOR.tools.prototypedCopy(CKEDITOR.config);this.ui=new CKEDITOR.ui(this);
-this.focusManager=new CKEDITOR.focusManager(this);this.keystrokeHandler=new CKEDITOR.keystrokeHandler(this);this.on("readOnly",b);this.on("selectionChange",function(a){f(this,a.data.path)});this.on("activeFilterChange",function(){f(this,this.elementPath(),true)});this.on("mode",b);this.on("instanceReady",function(){this.config.startupFocus&&this.focus()});CKEDITOR.fire("instanceCreated",null,this);CKEDITOR.add(this);CKEDITOR.tools.setTimeout(function(){g(this,a)},0,this)}function e(){do var a="editor"+
-++t;while(CKEDITOR.instances[a]);return a}function b(){var a=this.commands,b;for(b in a)c(this,a[b])}function c(a,b){b[b.startDisabled?"disable":a.readOnly&&!b.readOnly?"disable":b.modes[a.mode]?"enable":"disable"]()}function f(a,b,c){if(b){var d,f,e=a.commands;for(f in e){d=e[f];(c||d.contextSensitive)&&d.refresh(a,b)}}}function d(a){var b=a.config.customConfig;if(!b)return false;var b=CKEDITOR.getUrl(b),c=y[b]||(y[b]={});if(c.fn){c.fn.call(a,a.config);(CKEDITOR.getUrl(a.config.customConfig)==b||
-!d(a))&&a.fireOnce("customConfigLoaded")}else CKEDITOR.scriptLoader.queue(b,function(){c.fn=CKEDITOR.editorConfig?CKEDITOR.editorConfig:function(){};d(a)});return true}function g(a,b){a.on("customConfigLoaded",function(){if(b){if(b.on)for(var c in b.on)a.on(c,b.on[c]);CKEDITOR.tools.extend(a.config,b,true);delete a.config.on}c=a.config;a.readOnly=!(!c.readOnly&&!(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.is("textarea")?a.element.hasAttribute("disabled"):a.element.isReadOnly():a.elementMode==
-CKEDITOR.ELEMENT_MODE_REPLACE&&a.element.hasAttribute("disabled")));a.blockless=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?!(a.element.is("textarea")||CKEDITOR.dtd[a.element.getName()].p):false;a.tabIndex=c.tabIndex||a.element&&a.element.getAttribute("tabindex")||0;a.activeEnterMode=a.enterMode=a.blockless?CKEDITOR.ENTER_BR:c.enterMode;a.activeShiftEnterMode=a.shiftEnterMode=a.blockless?CKEDITOR.ENTER_BR:c.shiftEnterMode;if(c.skin)CKEDITOR.skinName=c.skin;a.fireOnce("configLoaded");a.dataProcessor=
-new CKEDITOR.htmlDataProcessor(a);a.filter=a.activeFilter=new CKEDITOR.filter(a);h(a)});if(b&&b.customConfig!=null)a.config.customConfig=b.customConfig;d(a)||a.fireOnce("customConfigLoaded")}function h(a){CKEDITOR.skin.loadPart("editor",function(){m(a)})}function m(a){CKEDITOR.lang.load(a.config.language,a.config.defaultLanguage,function(b,c){var d=a.config.title;a.langCode=b;a.lang=CKEDITOR.tools.prototypedCopy(c);a.title=typeof d=="string"||d===false?d:[a.lang.editor,a.name].join(", ");if(!a.config.contentsLangDirection)a.config.contentsLangDirection=
-a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.element.getDirection(1):a.lang.dir;a.fire("langLoaded");j(a)})}function j(a){a.getStylesSet(function(b){a.once("loaded",function(){a.fire("stylesSet",{styles:b})},null,null,1);p(a)})}function p(a){var b=a.config,c=b.plugins,d=b.extraPlugins,f=b.removePlugins;if(d)var e=RegExp("(?:^|,)(?:"+d.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(e,""),c=c+(","+d);if(f)var l=RegExp("(?:^|,)(?:"+f.replace(/\s*,\s*/g,"|")+")(?=,|$)","g"),c=c.replace(l,"");CKEDITOR.env.air&&
-(c=c+",adobeair");CKEDITOR.plugins.load(c.split(","),function(c){var d=[],f=[],e=[];a.plugins=c;for(var i in c){var o=c[i],k=o.lang,g=null,r=o.requires,A;CKEDITOR.tools.isArray(r)&&(r=r.join(","));if(r&&(A=r.match(l)))for(;r=A.pop();)CKEDITOR.tools.setTimeout(function(a,b){throw Error('Plugin "'+a.replace(",","")+'" cannot be removed from the plugins list, because it\'s required by "'+b+'" plugin.');},0,null,[r,i]);if(k&&!a.lang[i]){k.split&&(k=k.split(","));if(CKEDITOR.tools.indexOf(k,a.langCode)>=
-0)g=a.langCode;else{g=a.langCode.replace(/-.*/,"");g=g!=a.langCode&&CKEDITOR.tools.indexOf(k,g)>=0?g:CKEDITOR.tools.indexOf(k,"en")>=0?"en":k[0]}if(!o.langEntries||!o.langEntries[g])e.push(CKEDITOR.getUrl(o.path+"lang/"+g+".js"));else{a.lang[i]=o.langEntries[g];g=null}}f.push(g);d.push(o)}CKEDITOR.scriptLoader.load(e,function(){for(var c=["beforeInit","init","afterInit"],e=0;e<c.length;e++)for(var i=0;i<d.length;i++){var q=d[i];e===0&&(f[i]&&q.lang&&q.langEntries)&&(a.lang[q.name]=q.langEntries[f[i]]);
-if(q[c[e]])q[c[e]](a)}a.fireOnce("pluginsLoaded");b.keystrokes&&a.setKeystroke(a.config.keystrokes);for(i=0;i<a.config.blockedKeystrokes.length;i++)a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[i]]=1;a.status="loaded";a.fireOnce("loaded");CKEDITOR.fire("instanceLoaded",null,a)})})}function u(){var a=this.element;if(a&&this.elementMode!=CKEDITOR.ELEMENT_MODE_APPENDTO){var b=this.getData();this.config.htmlEncodeOutput&&(b=CKEDITOR.tools.htmlEncode(b));a.is("textarea")?a.setValue(b):
-a.setHtml(b);return true}return false}a.prototype=CKEDITOR.editor.prototype;CKEDITOR.editor=a;var t=0,y={};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{addCommand:function(a,b){b.name=a.toLowerCase();var d=new CKEDITOR.command(this,b);this.mode&&c(this,d);return this.commands[a]=d},_attachToForm:function(){function a(d){b.updateElement();b._.required&&(!c.getValue()&&b.fire("required")===false)&&d.data.preventDefault()}var b=this,c=b.element,d=new CKEDITOR.dom.element(c.$.form);if(c.is("textarea")&&
-d){d.on("submit",a);if(d.$.submit&&d.$.submit.call&&d.$.submit.apply)d.$.submit=CKEDITOR.tools.override(d.$.submit,function(b){return function(){a();b.apply?b.apply(this):b()}});b.on("destroy",function(){d.removeListener("submit",a)})}},destroy:function(a){this.fire("beforeDestroy");!a&&u.call(this);this.editable(null);this.filter.destroy();delete this.filter;delete this.activeFilter;this.status="destroyed";this.fire("destroy");this.removeAllListeners();CKEDITOR.remove(this);CKEDITOR.fire("instanceDestroyed",
-null,this)},elementPath:function(a){if(!a){a=this.getSelection();if(!a)return null;a=a.getStartElement()}return a?new CKEDITOR.dom.elementPath(a,this.editable()):null},createRange:function(){var a=this.editable();return a?new CKEDITOR.dom.range(a):null},execCommand:function(a,b){var c=this.getCommand(a),d={name:a,commandData:b,command:c};if(c&&c.state!=CKEDITOR.TRISTATE_DISABLED&&this.fire("beforeCommandExec",d)!==false){d.returnValue=c.exec(d.commandData);if(!c.async&&this.fire("afterCommandExec",
-d)!==false)return d.returnValue}return false},getCommand:function(a){return this.commands[a]},getData:function(a){!a&&this.fire("beforeGetData");var b=this._.data;if(typeof b!="string")b=(b=this.element)&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE?b.is("textarea")?b.getValue():b.getHtml():"";b={dataValue:b};!a&&this.fire("getData",b);return b.dataValue},getSnapshot:function(){var a=this.fire("getSnapshot");if(typeof a!="string"){var b=this.element;b&&this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&
-(a=b.is("textarea")?b.getValue():b.getHtml())}return a},loadSnapshot:function(a){this.fire("loadSnapshot",a)},setData:function(a,b,c){var d=true,f=b;if(b&&typeof b=="object"){c=b.internal;f=b.callback;d=!b.noSnapshot}!c&&d&&this.fire("saveSnapshot");if(f||!c)this.once("dataReady",function(a){!c&&d&&this.fire("saveSnapshot");f&&f.call(a.editor)});a={dataValue:a};!c&&this.fire("setData",a);this._.data=a.dataValue;!c&&this.fire("afterSetData",a)},setReadOnly:function(a){a=a==null||a;if(this.readOnly!=
-a){this.readOnly=a;this.keystrokeHandler.blockedKeystrokes[8]=+a;this.editable().setReadOnly(a);this.fire("readOnly")}},insertHtml:function(a,b){this.fire("insertHtml",{dataValue:a,mode:b})},insertText:function(a){this.fire("insertText",a)},insertElement:function(a){this.fire("insertElement",a)},focus:function(){this.fire("beforeFocus")},checkDirty:function(){return this.status=="ready"&&this._.previousValue!==this.getSnapshot()},resetDirty:function(){this._.previousValue=this.getSnapshot()},updateElement:function(){return u.call(this)},
-setKeystroke:function(){for(var a=this.keystrokeHandler.keystrokes,b=CKEDITOR.tools.isArray(arguments[0])?arguments[0]:[[].slice.call(arguments,0)],c,d,f=b.length;f--;){c=b[f];d=0;if(CKEDITOR.tools.isArray(c)){d=c[1];c=c[0]}d?a[c]=d:delete a[c]}},addFeature:function(a){return this.filter.addFeature(a)},setActiveFilter:function(a){if(!a)a=this.filter;if(this.activeFilter!==a){this.activeFilter=a;this.fire("activeFilterChange");a===this.filter?this.setActiveEnterMode(null,null):this.setActiveEnterMode(a.getAllowedEnterMode(this.enterMode),
-a.getAllowedEnterMode(this.shiftEnterMode,true))}},setActiveEnterMode:function(a,b){a=a?this.blockless?CKEDITOR.ENTER_BR:a:this.enterMode;b=b?this.blockless?CKEDITOR.ENTER_BR:b:this.shiftEnterMode;if(this.activeEnterMode!=a||this.activeShiftEnterMode!=b){this.activeEnterMode=a;this.activeShiftEnterMode=b;this.fire("activeEnterModeChange")}}})})();CKEDITOR.ELEMENT_MODE_NONE=0;CKEDITOR.ELEMENT_MODE_REPLACE=1;CKEDITOR.ELEMENT_MODE_APPENDTO=2;CKEDITOR.ELEMENT_MODE_INLINE=3;
-CKEDITOR.htmlParser=function(){this._={htmlPartsRegex:RegExp("<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)--\>)|(?:([^\\s>]+)\\s*((?:(?:\"[^\"]*\")|(?:'[^']*')|[^\"'>])*)\\/?>))","g")}};
-(function(){var a=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,e={checked:1,compact:1,declare:1,defer:1,disabled:1,ismap:1,multiple:1,nohref:1,noresize:1,noshade:1,nowrap:1,readonly:1,selected:1};CKEDITOR.htmlParser.prototype={onTagOpen:function(){},onTagClose:function(){},onText:function(){},onCDATA:function(){},onComment:function(){},parse:function(b){for(var c,f,d=0,g;c=this._.htmlPartsRegex.exec(b);){f=c.index;if(f>d){d=b.substring(d,f);if(g)g.push(d);else this.onText(d)}d=
-this._.htmlPartsRegex.lastIndex;if(f=c[1]){f=f.toLowerCase();if(g&&CKEDITOR.dtd.$cdata[f]){this.onCDATA(g.join(""));g=null}if(!g){this.onTagClose(f);continue}}if(g)g.push(c[0]);else if(f=c[3]){f=f.toLowerCase();if(!/="/.test(f)){var h={},m;c=c[4];var j=!!(c&&c.charAt(c.length-1)=="/");if(c)for(;m=a.exec(c);){var p=m[1].toLowerCase();m=m[2]||m[3]||m[4]||"";h[p]=!m&&e[p]?p:CKEDITOR.tools.htmlDecodeAttr(m)}this.onTagOpen(f,h,j);!g&&CKEDITOR.dtd.$cdata[f]&&(g=[])}}else if(f=c[2])this.onComment(f)}if(b.length>
-d)this.onText(b.substring(d,b.length))}}})();
-CKEDITOR.htmlParser.basicWriter=CKEDITOR.tools.createClass({$:function(){this._={output:[]}},proto:{openTag:function(a){this._.output.push("<",a)},openTagClose:function(a,e){e?this._.output.push(" />"):this._.output.push(">")},attribute:function(a,e){typeof e=="string"&&(e=CKEDITOR.tools.htmlEncodeAttr(e));this._.output.push(" ",a,'="',e,'"')},closeTag:function(a){this._.output.push("</",a,">")},text:function(a){this._.output.push(a)},comment:function(a){this._.output.push("<\!--",a,"--\>")},write:function(a){this._.output.push(a)},
-reset:function(){this._.output=[];this._.indent=false},getHtml:function(a){var e=this._.output.join("");a&&this.reset();return e}}});"use strict";
-(function(){CKEDITOR.htmlParser.node=function(){};CKEDITOR.htmlParser.node.prototype={remove:function(){var a=this.parent.children,e=CKEDITOR.tools.indexOf(a,this),b=this.previous,c=this.next;b&&(b.next=c);c&&(c.previous=b);a.splice(e,1);this.parent=null},replaceWith:function(a){var e=this.parent.children,b=CKEDITOR.tools.indexOf(e,this),c=a.previous=this.previous,f=a.next=this.next;c&&(c.next=a);f&&(f.previous=a);e[b]=a;a.parent=this.parent;this.parent=null},insertAfter:function(a){var e=a.parent.children,
-b=CKEDITOR.tools.indexOf(e,a),c=a.next;e.splice(b+1,0,this);this.next=a.next;this.previous=a;a.next=this;c&&(c.previous=this);this.parent=a.parent},insertBefore:function(a){var e=a.parent.children,b=CKEDITOR.tools.indexOf(e,a);e.splice(b,0,this);this.next=a;(this.previous=a.previous)&&(a.previous.next=this);a.previous=this;this.parent=a.parent},getAscendant:function(a){var e=typeof a=="function"?a:typeof a=="string"?function(b){return b.name==a}:function(b){return b.name in a},b=this.parent;for(;b&&
-b.type==CKEDITOR.NODE_ELEMENT;){if(e(b))return b;b=b.parent}return null},wrapWith:function(a){this.replaceWith(a);a.add(this);return a},getIndex:function(){return CKEDITOR.tools.indexOf(this.parent.children,this)},getFilterContext:function(a){return a||{}}}})();"use strict";CKEDITOR.htmlParser.comment=function(a){this.value=a;this._={isBlockLike:false}};
-CKEDITOR.htmlParser.comment.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_COMMENT,filter:function(a,e){var b=this.value;if(!(b=a.onComment(e,b,this))){this.remove();return false}if(typeof b!="string"){this.replaceWith(b);return false}this.value=b;return true},writeHtml:function(a,e){e&&this.filter(e);a.comment(this.value)}});"use strict";
-(function(){CKEDITOR.htmlParser.text=function(a){this.value=a;this._={isBlockLike:false}};CKEDITOR.htmlParser.text.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(a,e){if(!(this.value=a.onText(e,this.value,this))){this.remove();return false}},writeHtml:function(a,e){e&&this.filter(e);a.text(this.value)}})})();"use strict";
-(function(){CKEDITOR.htmlParser.cdata=function(a){this.value=a};CKEDITOR.htmlParser.cdata.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_TEXT,filter:function(){},writeHtml:function(a){a.write(this.value)}})})();"use strict";CKEDITOR.htmlParser.fragment=function(){this.children=[];this.parent=null;this._={isBlockLike:true,hasInlineStarted:false}};
-(function(){function a(a){return a.attributes["data-cke-survive"]?false:a.name=="a"&&a.attributes.href||CKEDITOR.dtd.$removeEmpty[a.name]}var e=CKEDITOR.tools.extend({table:1,ul:1,ol:1,dl:1},CKEDITOR.dtd.table,CKEDITOR.dtd.ul,CKEDITOR.dtd.ol,CKEDITOR.dtd.dl),b={ol:1,ul:1},c=CKEDITOR.tools.extend({},{html:1},CKEDITOR.dtd.html,CKEDITOR.dtd.body,CKEDITOR.dtd.head,{style:1,script:1}),f={ul:"li",ol:"li",dl:"dd",table:"tbody",tbody:"tr",thead:"tr",tfoot:"tr",tr:"td"};CKEDITOR.htmlParser.fragment.fromHtml=
-function(d,g,h){function m(a){var b;if(o.length>0)for(var c=0;c<o.length;c++){var d=o[c],f=d.name,e=CKEDITOR.dtd[f],l=i.name&&CKEDITOR.dtd[i.name];if((!l||l[f])&&(!a||!e||e[a]||!CKEDITOR.dtd[a])){if(!b){j();b=1}d=d.clone();d.parent=i;i=d;o.splice(c,1);c--}else if(f==i.name){u(i,i.parent,1);c--}}}function j(){for(;r.length;)u(r.shift(),i)}function p(a){if(a._.isBlockLike&&a.name!="pre"&&a.name!="textarea"){var b=a.children.length,c=a.children[b-1],d;if(c&&c.type==CKEDITOR.NODE_TEXT)(d=CKEDITOR.tools.rtrim(c.value))?
-c.value=d:a.children.length=b-1}}function u(b,c,d){var c=c||i||w,f=i;if(b.previous===void 0){if(t(c,b)){i=c;n.onTagOpen(h,{});b.returnPoint=c=i}p(b);(!a(b)||b.children.length)&&c.add(b);b.name=="pre"&&(l=false);b.name=="textarea"&&(k=false)}if(b.returnPoint){i=b.returnPoint;delete b.returnPoint}else i=d?c:f}function t(a,b){if((a==w||a.name=="body")&&h&&(!a.name||CKEDITOR.dtd[a.name][h])){var c,d;return(c=b.attributes&&(d=b.attributes["data-cke-real-element-type"])?d:b.name)&&c in CKEDITOR.dtd.$inline&&
-!(c in CKEDITOR.dtd.head)&&!b.isOrphan||b.type==CKEDITOR.NODE_TEXT}}function y(a,b){return a in CKEDITOR.dtd.$listItem||a in CKEDITOR.dtd.$tableContent?a==b||a=="dt"&&b=="dd"||a=="dd"&&b=="dt":false}var n=new CKEDITOR.htmlParser,w=g instanceof CKEDITOR.htmlParser.element?g:typeof g=="string"?new CKEDITOR.htmlParser.element(g):new CKEDITOR.htmlParser.fragment,o=[],r=[],i=w,k=w.name=="textarea",l=w.name=="pre";n.onTagOpen=function(d,f,g,h){f=new CKEDITOR.htmlParser.element(d,f);if(f.isUnknown&&g)f.isEmpty=
-true;f.isOptionalClose=h;if(a(f))o.push(f);else{if(d=="pre")l=true;else{if(d=="br"&&l){i.add(new CKEDITOR.htmlParser.text("\n"));return}d=="textarea"&&(k=true)}if(d=="br")r.push(f);else{for(;;){h=(g=i.name)?CKEDITOR.dtd[g]||(i._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c;if(!f.isUnknown&&!i.isUnknown&&!h[d])if(i.isOptionalClose)n.onTagClose(g);else if(d in b&&g in b){g=i.children;(g=g[g.length-1])&&g.name=="li"||u(g=new CKEDITOR.htmlParser.element("li"),i);!f.returnPoint&&(f.returnPoint=i);
-i=g}else if(d in CKEDITOR.dtd.$listItem&&!y(d,g))n.onTagOpen(d=="li"?"ul":"dl",{},0,1);else if(g in e&&!y(d,g)){!f.returnPoint&&(f.returnPoint=i);i=i.parent}else{g in CKEDITOR.dtd.$inline&&o.unshift(i);if(i.parent)u(i,i.parent,1);else{f.isOrphan=1;break}}else break}m(d);j();f.parent=i;f.isEmpty?u(f):i=f}}};n.onTagClose=function(a){for(var b=o.length-1;b>=0;b--)if(a==o[b].name){o.splice(b,1);return}for(var c=[],d=[],f=i;f!=w&&f.name!=a;){f._.isBlockLike||d.unshift(f);c.push(f);f=f.returnPoint||f.parent}if(f!=
-w){for(b=0;b<c.length;b++){var e=c[b];u(e,e.parent)}i=f;f._.isBlockLike&&j();u(f,f.parent);if(f==i)i=i.parent;o=o.concat(d)}a=="body"&&(h=false)};n.onText=function(a){if((!i._.hasInlineStarted||r.length)&&!l&&!k){a=CKEDITOR.tools.ltrim(a);if(a.length===0)return}var b=i.name,d=b?CKEDITOR.dtd[b]||(i._.isBlockLike?CKEDITOR.dtd.div:CKEDITOR.dtd.span):c;if(!k&&!d["#"]&&b in e){n.onTagOpen(f[b]||"");n.onText(a)}else{j();m();!l&&!k&&(a=a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g," "));a=new CKEDITOR.htmlParser.text(a);
-if(t(i,a))this.onTagOpen(h,{},0,1);i.add(a)}};n.onCDATA=function(a){i.add(new CKEDITOR.htmlParser.cdata(a))};n.onComment=function(a){j();m();i.add(new CKEDITOR.htmlParser.comment(a))};n.parse(d);for(j();i!=w;)u(i,i.parent,1);p(w);return w};CKEDITOR.htmlParser.fragment.prototype={type:CKEDITOR.NODE_DOCUMENT_FRAGMENT,add:function(a,b){isNaN(b)&&(b=this.children.length);var c=b>0?this.children[b-1]:null;if(c){if(a._.isBlockLike&&c.type==CKEDITOR.NODE_TEXT){c.value=CKEDITOR.tools.rtrim(c.value);if(c.value.length===
-0){this.children.pop();this.add(a);return}}c.next=a}a.previous=c;a.parent=this;this.children.splice(b,0,a);if(!this._.hasInlineStarted)this._.hasInlineStarted=a.type==CKEDITOR.NODE_TEXT||a.type==CKEDITOR.NODE_ELEMENT&&!a._.isBlockLike},filter:function(a,b){b=this.getFilterContext(b);a.onRoot(b,this);this.filterChildren(a,false,b)},filterChildren:function(a,b,c){if(this.childrenFilteredBy!=a.id){c=this.getFilterContext(c);if(b&&!this.parent)a.onRoot(c,this);this.childrenFilteredBy=a.id;for(b=0;b<this.children.length;b++)this.children[b].filter(a,
-c)===false&&b--}},writeHtml:function(a,b){b&&this.filter(b);this.writeChildrenHtml(a)},writeChildrenHtml:function(a,b,c){var f=this.getFilterContext();if(c&&!this.parent&&b)b.onRoot(f,this);b&&this.filterChildren(b,false,f);b=0;c=this.children;for(f=c.length;b<f;b++)c[b].writeHtml(a)},forEach:function(a,b,c){if(!c&&(!b||this.type==b))var f=a(this);if(f!==false)for(var c=this.children,e=0;e<c.length;e++){f=c[e];f.type==CKEDITOR.NODE_ELEMENT?f.forEach(a,b):(!b||f.type==b)&&a(f)}},getFilterContext:function(a){return a||
-{}}}})();"use strict";
-(function(){function a(){this.rules=[]}function e(b,c,f,d){var e,h;for(e in c){(h=b[e])||(h=b[e]=new a);h.add(c[e],f,d)}}CKEDITOR.htmlParser.filter=CKEDITOR.tools.createClass({$:function(b){this.id=CKEDITOR.tools.getNextNumber();this.elementNameRules=new a;this.attributeNameRules=new a;this.elementsRules={};this.attributesRules={};this.textRules=new a;this.commentRules=new a;this.rootRules=new a;b&&this.addRules(b,10)},proto:{addRules:function(a,c){var f;if(typeof c=="number")f=c;else if(c&&"priority"in
-c)f=c.priority;typeof f!="number"&&(f=10);typeof c!="object"&&(c={});a.elementNames&&this.elementNameRules.addMany(a.elementNames,f,c);a.attributeNames&&this.attributeNameRules.addMany(a.attributeNames,f,c);a.elements&&e(this.elementsRules,a.elements,f,c);a.attributes&&e(this.attributesRules,a.attributes,f,c);a.text&&this.textRules.add(a.text,f,c);a.comment&&this.commentRules.add(a.comment,f,c);a.root&&this.rootRules.add(a.root,f,c)},applyTo:function(a){a.filter(this)},onElementName:function(a,c){return this.elementNameRules.execOnName(a,
-c)},onAttributeName:function(a,c){return this.attributeNameRules.execOnName(a,c)},onText:function(a,c,f){return this.textRules.exec(a,c,f)},onComment:function(a,c,f){return this.commentRules.exec(a,c,f)},onRoot:function(a,c){return this.rootRules.exec(a,c)},onElement:function(a,c){for(var f=[this.elementsRules["^"],this.elementsRules[c.name],this.elementsRules.$],d,e=0;e<3;e++)if(d=f[e]){d=d.exec(a,c,this);if(d===false)return null;if(d&&d!=c)return this.onNode(a,d);if(c.parent&&!c.name)break}return c},
-onNode:function(a,c){var f=c.type;return f==CKEDITOR.NODE_ELEMENT?this.onElement(a,c):f==CKEDITOR.NODE_TEXT?new CKEDITOR.htmlParser.text(this.onText(a,c.value)):f==CKEDITOR.NODE_COMMENT?new CKEDITOR.htmlParser.comment(this.onComment(a,c.value)):null},onAttribute:function(a,c,f,d){return(f=this.attributesRules[f])?f.exec(a,d,c,this):d}}});CKEDITOR.htmlParser.filterRulesGroup=a;a.prototype={add:function(a,c,f){this.rules.splice(this.findIndex(c),0,{value:a,priority:c,options:f})},addMany:function(a,
-c,f){for(var d=[this.findIndex(c),0],e=0,h=a.length;e<h;e++)d.push({value:a[e],priority:c,options:f});this.rules.splice.apply(this.rules,d)},findIndex:function(a){for(var c=this.rules,f=c.length-1;f>=0&&a<c[f].priority;)f--;return f+1},exec:function(a,c){var f=c instanceof CKEDITOR.htmlParser.node||c instanceof CKEDITOR.htmlParser.fragment,d=Array.prototype.slice.call(arguments,1),e=this.rules,h=e.length,m,j,p,u;for(u=0;u<h;u++){if(f){m=c.type;j=c.name}p=e[u];if(!(a.nonEditable&&!p.options.applyToAll||
-a.nestedEditable&&p.options.excludeNestedEditable)){p=p.value.apply(null,d);if(p===false||f&&p&&(p.name!=j||p.type!=m))return p;p!=null&&(d[0]=c=p)}}return c},execOnName:function(a,c){for(var f=0,d=this.rules,e=d.length,h;c&&f<e;f++){h=d[f];!(a.nonEditable&&!h.options.applyToAll||a.nestedEditable&&h.options.excludeNestedEditable)&&(c=c.replace(h.value[0],h.value[1]))}return c}}})();
-(function(){function a(a,e){function k(a){return a||CKEDITOR.env.needsNbspFiller?new CKEDITOR.htmlParser.text(" "):new CKEDITOR.htmlParser.element("br",{"data-cke-bogus":1})}function q(a,f){return function(e){if(e.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var i=[],l=b(e),q,o;if(l)for(A(l,1)&&i.push(l);l;){if(d(l)&&(q=c(l))&&A(q))if((o=c(q))&&!d(o))i.push(q);else{k(r).insertAfter(q);q.remove()}l=l.previous}for(l=0;l<i.length;l++)i[l].remove();if(i=(typeof f=="function"?f(e):f)!==false)if(!r&&!CKEDITOR.env.needsBrFiller&&
-e.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)i=false;else if(!r&&!CKEDITOR.env.needsBrFiller&&(document.documentMode>7||e.name in CKEDITOR.dtd.tr||e.name in CKEDITOR.dtd.$listItem))i=false;else{i=b(e);i=!i||e.name=="form"&&i.name=="input"}i&&e.add(k(a))}}}function A(a,b){if((!r||CKEDITOR.env.needsBrFiller)&&a.type==CKEDITOR.NODE_ELEMENT&&a.name=="br"&&!a.attributes["data-cke-eol"])return true;var c;if(a.type==CKEDITOR.NODE_TEXT&&(c=a.value.match(o))){if(c.index){(new CKEDITOR.htmlParser.text(a.value.substring(0,
-c.index))).insertBefore(a);a.value=c[0]}if(!CKEDITOR.env.needsBrFiller&&r&&(!b||a.parent.name in v))return true;if(!r)if((c=a.previous)&&c.name=="br"||!c||d(c))return true}return false}var s={elements:{}},r=e=="html",v=CKEDITOR.tools.extend({},l),z;for(z in v)"#"in i[z]||delete v[z];for(z in v)s.elements[z]=q(r,a.config.fillEmptyBlocks);s.root=q(r,false);s.elements.br=function(a){return function(b){if(b.parent.type!=CKEDITOR.NODE_DOCUMENT_FRAGMENT){var e=b.attributes;if("data-cke-bogus"in e||"data-cke-eol"in
-e)delete e["data-cke-bogus"];else{for(e=b.next;e&&f(e);)e=e.next;var i=c(b);!e&&d(b.parent)?g(b.parent,k(a)):d(e)&&(i&&!d(i))&&k(a).insertBefore(e)}}}}(r);return s}function e(a,b){return a!=CKEDITOR.ENTER_BR&&b!==false?a==CKEDITOR.ENTER_DIV?"div":"p":false}function b(a){for(a=a.children[a.children.length-1];a&&f(a);)a=a.previous;return a}function c(a){for(a=a.previous;a&&f(a);)a=a.previous;return a}function f(a){return a.type==CKEDITOR.NODE_TEXT&&!CKEDITOR.tools.trim(a.value)||a.type==CKEDITOR.NODE_ELEMENT&&
-a.attributes["data-cke-bookmark"]}function d(a){return a&&(a.type==CKEDITOR.NODE_ELEMENT&&a.name in l||a.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT)}function g(a,b){var c=a.children[a.children.length-1];a.children.push(b);b.parent=a;if(c){c.next=b;b.previous=c}}function h(a){a=a.attributes;a.contenteditable!="false"&&(a["data-cke-editable"]=a.contenteditable?"true":1);a.contenteditable="false"}function m(a){a=a.attributes;switch(a["data-cke-editable"]){case "true":a.contenteditable="true";break;case "1":delete a.contenteditable}}
-function j(a){return a.replace(R,function(a,b,c){return"<"+b+c.replace(N,function(a,b){return F.test(b)&&c.indexOf("data-cke-saved-"+b)==-1?" data-cke-saved-"+a+" data-cke-"+CKEDITOR.rnd+"-"+a:a})+">"})}function p(a,b){return a.replace(b,function(a,b,c){a.indexOf("<textarea")===0&&(a=b+y(c).replace(/</g,"&lt;").replace(/>/g,"&gt;")+"</textarea>");return"<cke:encoded>"+encodeURIComponent(a)+"</cke:encoded>"})}function u(a){return a.replace(A,function(a,b){return decodeURIComponent(b)})}function t(a){return a.replace(/<\!--(?!{cke_protected})[\s\S]+?--\>/g,
-function(a){return"<\!--"+r+"{C}"+encodeURIComponent(a).replace(/--/g,"%2D%2D")+"--\>"})}function y(a){return a.replace(/<\!--\{cke_protected\}\{C\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)})}function n(a,b){var c=b._.dataStore;return a.replace(/<\!--\{cke_protected\}([\s\S]+?)--\>/g,function(a,b){return decodeURIComponent(b)}).replace(/\{cke_protected_(\d+)\}/g,function(a,b){return c&&c[b]||""})}function w(a,b){for(var c=[],d=b.config.protectedSource,f=b._.dataStore||(b._.dataStore=
-{id:1}),e=/<\!--\{cke_temp(comment)?\}(\d*?)--\>/g,d=[/<script[\s\S]*?<\/script>/gi,/<noscript[\s\S]*?<\/noscript>/gi,/<meta[\s\S]*?\/?>/gi].concat(d),a=a.replace(/<\!--[\s\S]*?--\>/g,function(a){return"<\!--{cke_tempcomment}"+(c.push(a)-1)+"--\>"}),i=0;i<d.length;i++)a=a.replace(d[i],function(a){a=a.replace(e,function(a,b,d){return c[d]});return/cke_temp(comment)?/.test(a)?a:"<\!--{cke_temp}"+(c.push(a)-1)+"--\>"});a=a.replace(e,function(a,b,d){return"<\!--"+r+(b?"{C}":"")+encodeURIComponent(c[d]).replace(/--/g,
-"%2D%2D")+"--\>"});a=a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=>]+))+\s*>/g,function(a){return a.replace(/<\!--\{cke_protected\}([^>]*)--\>/g,function(a,b){f[f.id]=decodeURIComponent(b);return"{cke_protected_"+f.id++ +"}"})});return a=a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g,function(a,c,d,f){return"<"+c+d+">"+n(y(f),b)+"</"+c+">"})}CKEDITOR.htmlDataProcessor=function(b){var c,d,f=this;this.editor=b;this.dataFilter=c=new CKEDITOR.htmlParser.filter;
-this.htmlFilter=d=new CKEDITOR.htmlParser.filter;this.writer=new CKEDITOR.htmlParser.basicWriter;c.addRules(q);c.addRules(x,{applyToAll:true});c.addRules(a(b,"data"),{applyToAll:true});d.addRules(s);d.addRules(M,{applyToAll:true});d.addRules(a(b,"html"),{applyToAll:true});b.on("toHtml",function(a){var a=a.data,c=a.dataValue,c=w(c,b),c=p(c,J),c=j(c),c=p(c,Q),c=c.replace(E,"$1cke:$2"),c=c.replace(z,"<cke:$1$2></cke:$1>"),c=c.replace(/(<pre\b[^>]*>)(\r\n|\n)/g,"$1$2$2"),c=c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi,
-"$1data-cke-"+CKEDITOR.rnd+"-$2"),d=a.context||b.editable().getName(),f;if(CKEDITOR.env.ie&&CKEDITOR.env.version<9&&d=="pre"){d="div";c="<pre>"+c+"</pre>";f=1}d=b.document.createElement(d);d.setHtml("a"+c);c=d.getHtml().substr(1);c=c.replace(RegExp("data-cke-"+CKEDITOR.rnd+"-","ig"),"");f&&(c=c.replace(/^<pre>|<\/pre>$/gi,""));c=c.replace(v,"$1$2");c=u(c);c=y(c);a.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.context,a.fixForBody===false?false:e(a.enterMode,b.config.autoParagraph))},null,null,
-5);b.on("toHtml",function(a){a.data.filter.applyTo(a.data.dataValue,true,a.data.dontFilter,a.data.enterMode)&&b.fire("dataFiltered")},null,null,6);b.on("toHtml",function(a){a.data.dataValue.filterChildren(f.dataFilter,true)},null,null,10);b.on("toHtml",function(a){var a=a.data,b=a.dataValue,c=new CKEDITOR.htmlParser.basicWriter;b.writeChildrenHtml(c);b=c.getHtml(true);a.dataValue=t(b)},null,null,15);b.on("toDataFormat",function(a){var c=a.data.dataValue;a.data.enterMode!=CKEDITOR.ENTER_BR&&(c=c.replace(/^<br *\/?>/i,
-""));a.data.dataValue=CKEDITOR.htmlParser.fragment.fromHtml(c,a.data.context,e(a.data.enterMode,b.config.autoParagraph))},null,null,5);b.on("toDataFormat",function(a){a.data.dataValue.filterChildren(f.htmlFilter,true)},null,null,10);b.on("toDataFormat",function(a){a.data.filter.applyTo(a.data.dataValue,false,true)},null,null,11);b.on("toDataFormat",function(a){var c=a.data.dataValue,d=f.writer;d.reset();c.writeChildrenHtml(d);c=d.getHtml(true);c=y(c);c=n(c,b);a.data.dataValue=c},null,null,15)};CKEDITOR.htmlDataProcessor.prototype=
-{toHtml:function(a,b,c,d){var f=this.editor,e,i,l;if(b&&typeof b=="object"){e=b.context;c=b.fixForBody;d=b.dontFilter;i=b.filter;l=b.enterMode}else e=b;!e&&e!==null&&(e=f.editable().getName());return f.fire("toHtml",{dataValue:a,context:e,fixForBody:c,dontFilter:d,filter:i||f.filter,enterMode:l||f.enterMode}).dataValue},toDataFormat:function(a,b){var c,d,f;if(b){c=b.context;d=b.filter;f=b.enterMode}!c&&c!==null&&(c=this.editor.editable().getName());return this.editor.fire("toDataFormat",{dataValue:a,
-filter:d||this.editor.filter,context:c,enterMode:f||this.editor.enterMode}).dataValue}};var o=/(?:&nbsp;|\xa0)$/,r="{cke_protected}",i=CKEDITOR.dtd,k=["caption","colgroup","col","thead","tfoot","tbody"],l=CKEDITOR.tools.extend({},i.$blockLimit,i.$block),q={elements:{input:h,textarea:h}},x={attributeNames:[[/^on/,"data-cke-pa-on"],[/^data-cke-expando$/,""]]},s={elements:{embed:function(a){var b=a.parent;if(b&&b.name=="object"){var c=b.attributes.width,b=b.attributes.height;if(c)a.attributes.width=
-c;if(b)a.attributes.height=b}},a:function(a){if(!a.children.length&&!a.attributes.name&&!a.attributes["data-cke-saved-name"])return false}}},M={elementNames:[[/^cke:/,""],[/^\?xml:namespace$/,""]],attributeNames:[[/^data-cke-(saved|pa)-/,""],[/^data-cke-.*/,""],["hidefocus",""]],elements:{$:function(a){var b=a.attributes;if(b){if(b["data-cke-temp"])return false;for(var c=["name","href","src"],d,f=0;f<c.length;f++){d="data-cke-saved-"+c[f];d in b&&delete b[c[f]]}}return a},table:function(a){a.children.slice(0).sort(function(a,
-b){var c,d;if(a.type==CKEDITOR.NODE_ELEMENT&&b.type==a.type){c=CKEDITOR.tools.indexOf(k,a.name);d=CKEDITOR.tools.indexOf(k,b.name)}if(!(c>-1&&d>-1&&c!=d)){c=a.parent?a.getIndex():-1;d=b.parent?b.getIndex():-1}return c>d?1:-1})},param:function(a){a.children=[];a.isEmpty=true;return a},span:function(a){a.attributes["class"]=="Apple-style-span"&&delete a.name},html:function(a){delete a.attributes.contenteditable;delete a.attributes["class"]},body:function(a){delete a.attributes.spellcheck;delete a.attributes.contenteditable},
-style:function(a){var b=a.children[0];if(b&&b.value)b.value=CKEDITOR.tools.trim(b.value);if(!a.attributes.type)a.attributes.type="text/css"},title:function(a){var b=a.children[0];!b&&g(a,b=new CKEDITOR.htmlParser.text);b.value=a.attributes["data-cke-title"]||""},input:m,textarea:m},attributes:{"class":function(a){return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g,""))||false}}};if(CKEDITOR.env.ie)M.attributes.style=function(a){return a.replace(/(^|;)([^\:]+)/g,function(a){return a.toLowerCase()})};
-var R=/<(a|area|img|input|source)\b([^>]*)>/gi,N=/([\w-]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi,F=/^(href|src|name)$/i,Q=/(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi,J=/(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi,A=/<cke:encoded>([^<]*)<\/cke:encoded>/gi,E=/(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi,v=/(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi,z=/<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi})();"use strict";
-CKEDITOR.htmlParser.element=function(a,e){this.name=a;this.attributes=e||{};this.children=[];var b=a||"",c=b.match(/^cke:(.*)/);c&&(b=c[1]);b=!(!CKEDITOR.dtd.$nonBodyContent[b]&&!CKEDITOR.dtd.$block[b]&&!CKEDITOR.dtd.$listItem[b]&&!CKEDITOR.dtd.$tableContent[b]&&!(CKEDITOR.dtd.$nonEditable[b]||b=="br"));this.isEmpty=!!CKEDITOR.dtd.$empty[a];this.isUnknown=!CKEDITOR.dtd[a];this._={isBlockLike:b,hasInlineStarted:this.isEmpty||!b}};
-CKEDITOR.htmlParser.cssStyle=function(a){var e={};((a instanceof CKEDITOR.htmlParser.element?a.attributes.style:a)||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(a,c,f){c=="font-family"&&(f=f.replace(/["']/g,""));e[c.toLowerCase()]=f});return{rules:e,populate:function(a){var c=this.toString();if(c)a instanceof CKEDITOR.dom.element?a.setAttribute("style",c):a instanceof CKEDITOR.htmlParser.element?a.attributes.style=c:a.style=c},toString:function(){var a=[],c;
-for(c in e)e[c]&&a.push(c,":",e[c],";");return a.join("")}}};
-(function(){function a(a){return function(b){return b.type==CKEDITOR.NODE_ELEMENT&&(typeof a=="string"?b.name==a:b.name in a)}}var e=function(a,b){a=a[0];b=b[0];return a<b?-1:a>b?1:0},b=CKEDITOR.htmlParser.fragment.prototype;CKEDITOR.htmlParser.element.prototype=CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node,{type:CKEDITOR.NODE_ELEMENT,add:b.add,clone:function(){return new CKEDITOR.htmlParser.element(this.name,this.attributes)},filter:function(a,b){var d=this,e,h,b=d.getFilterContext(b);if(b.off)return true;
-if(!d.parent)a.onRoot(b,d);for(;;){e=d.name;if(!(h=a.onElementName(b,e))){this.remove();return false}d.name=h;if(!(d=a.onElement(b,d))){this.remove();return false}if(d!==this){this.replaceWith(d);return false}if(d.name==e)break;if(d.type!=CKEDITOR.NODE_ELEMENT){this.replaceWith(d);return false}if(!d.name){this.replaceWithChildren();return false}}e=d.attributes;var m,j;for(m in e){j=m;for(h=e[m];;)if(j=a.onAttributeName(b,m))if(j!=m){delete e[m];m=j}else break;else{delete e[m];break}j&&((h=a.onAttribute(b,
-d,j,h))===false?delete e[j]:e[j]=h)}d.isEmpty||this.filterChildren(a,false,b);return true},filterChildren:b.filterChildren,writeHtml:function(a,b){b&&this.filter(b);var d=this.name,g=[],h=this.attributes,m,j;a.openTag(d,h);for(m in h)g.push([m,h[m]]);a.sortAttributes&&g.sort(e);m=0;for(j=g.length;m<j;m++){h=g[m];a.attribute(h[0],h[1])}a.openTagClose(d,this.isEmpty);this.writeChildrenHtml(a);this.isEmpty||a.closeTag(d)},writeChildrenHtml:b.writeChildrenHtml,replaceWithChildren:function(){for(var a=
-this.children,b=a.length;b;)a[--b].insertAfter(this);this.remove()},forEach:b.forEach,getFirst:function(b){if(!b)return this.children.length?this.children[0]:null;typeof b!="function"&&(b=a(b));for(var f=0,d=this.children.length;f<d;++f)if(b(this.children[f]))return this.children[f];return null},getHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeChildrenHtml(a);return a.getHtml()},setHtml:function(a){for(var a=this.children=CKEDITOR.htmlParser.fragment.fromHtml(a).children,b=0,
-d=a.length;b<d;++b)a[b].parent=this},getOuterHtml:function(){var a=new CKEDITOR.htmlParser.basicWriter;this.writeHtml(a);return a.getHtml()},split:function(a){for(var b=this.children.splice(a,this.children.length-a),d=this.clone(),e=0;e<b.length;++e)b[e].parent=d;d.children=b;if(b[0])b[0].previous=null;if(a>0)this.children[a-1].next=null;this.parent.add(d,this.getIndex()+1);return d},addClass:function(a){if(!this.hasClass(a)){var b=this.attributes["class"]||"";this.attributes["class"]=b+(b?" ":"")+
-a}},removeClass:function(a){var b=this.attributes["class"];if(b)(b=CKEDITOR.tools.trim(b.replace(RegExp("(?:\\s+|^)"+a+"(?:\\s+|$)")," ")))?this.attributes["class"]=b:delete this.attributes["class"]},hasClass:function(a){var b=this.attributes["class"];return!b?false:RegExp("(?:^|\\s)"+a+"(?=\\s|$)").test(b)},getFilterContext:function(a){var b=[];a||(a={off:false,nonEditable:false,nestedEditable:false});!a.off&&this.attributes["data-cke-processor"]=="off"&&b.push("off",true);!a.nonEditable&&this.attributes.contenteditable==
-"false"?b.push("nonEditable",true):a.nonEditable&&(!a.nestedEditable&&this.attributes.contenteditable=="true")&&b.push("nestedEditable",true);if(b.length)for(var a=CKEDITOR.tools.copy(a),d=0;d<b.length;d=d+2)a[b[d]]=b[d+1];return a}},true)})();
-(function(){var a={},e=/{([^}]+)}/g,b=/([\\'])/g,c=/\n/g,f=/\r/g;CKEDITOR.template=function(d){if(a[d])this.output=a[d];else{var g=d.replace(b,"\\$1").replace(c,"\\n").replace(f,"\\r").replace(e,function(a,b){return"',data['"+b+"']==undefined?'{"+b+"}':data['"+b+"'],'"});this.output=a[d]=Function("data","buffer","return buffer?buffer.push('"+g+"'):['"+g+"'].join('');")}}})();delete CKEDITOR.loadFullCore;CKEDITOR.instances={};CKEDITOR.document=new CKEDITOR.dom.document(document);
-CKEDITOR.add=function(a){CKEDITOR.instances[a.name]=a;a.on("focus",function(){if(CKEDITOR.currentInstance!=a){CKEDITOR.currentInstance=a;CKEDITOR.fire("currentInstance")}});a.on("blur",function(){if(CKEDITOR.currentInstance==a){CKEDITOR.currentInstance=null;CKEDITOR.fire("currentInstance")}});CKEDITOR.fire("instance",null,a)};CKEDITOR.remove=function(a){delete CKEDITOR.instances[a.name]};
-(function(){var a={};CKEDITOR.addTemplate=function(e,b){var c=a[e];if(c)return c;c={name:e,source:b};CKEDITOR.fire("template",c);return a[e]=new CKEDITOR.template(c.source)};CKEDITOR.getTemplate=function(e){return a[e]}})();(function(){var a=[];CKEDITOR.addCss=function(e){a.push(e)};CKEDITOR.getCss=function(){return a.join("\n")}})();CKEDITOR.on("instanceDestroyed",function(){CKEDITOR.tools.isEmpty(this.instances)&&CKEDITOR.fire("reset")});CKEDITOR.TRISTATE_ON=1;CKEDITOR.TRISTATE_OFF=2;
-CKEDITOR.TRISTATE_DISABLED=0;
-(function(){CKEDITOR.inline=function(a,e){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var b=new CKEDITOR.editor(e,a,CKEDITOR.ELEMENT_MODE_INLINE),c=a.is("textarea")?a:null;if(c){b.setData(c.getValue(),null,true);a=CKEDITOR.dom.element.createFromHtml('<div contenteditable="'+!!b.readOnly+'" class="cke_textarea_inline">'+c.getValue()+"</div>",CKEDITOR.document);
-a.insertAfter(c);c.hide();c.$.form&&b._attachToForm()}else b.setData(a.getHtml(),null,true);b.on("loaded",function(){b.fire("uiReady");b.editable(a);b.container=a;b.setData(b.getData(1));b.resetDirty();b.fire("contentDom");b.mode="wysiwyg";b.fire("mode");b.status="ready";b.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,b)},null,null,1E4);b.on("destroy",function(){if(c){b.container.clearCustomData();b.container.remove();c.show()}b.element.clearCustomData();delete b.element});return b};
-CKEDITOR.inlineAll=function(){var a,e,b;for(b in CKEDITOR.dtd.$editable)for(var c=CKEDITOR.document.getElementsByTag(b),f=0,d=c.count();f<d;f++){a=c.getItem(f);if(a.getAttribute("contenteditable")=="true"){e={element:a,config:{}};CKEDITOR.fire("inline",e)!==false&&CKEDITOR.inline(a,e.config)}}};CKEDITOR.domReady(function(){!CKEDITOR.disableAutoInline&&CKEDITOR.inlineAll()})})();CKEDITOR.replaceClass="ckeditor";
-(function(){function a(a,f,d,g){if(!CKEDITOR.env.isCompatible)return null;a=CKEDITOR.dom.element.get(a);if(a.getEditor())throw'The editor instance "'+a.getEditor().name+'" is already attached to the provided element.';var h=new CKEDITOR.editor(f,a,g);if(g==CKEDITOR.ELEMENT_MODE_REPLACE){a.setStyle("visibility","hidden");h._.required=a.hasAttribute("required");a.removeAttribute("required")}d&&h.setData(d,null,true);h.on("loaded",function(){b(h);g==CKEDITOR.ELEMENT_MODE_REPLACE&&(h.config.autoUpdateElement&&
-a.$.form)&&h._attachToForm();h.setMode(h.config.startupMode,function(){h.resetDirty();h.status="ready";h.fireOnce("instanceReady");CKEDITOR.fire("instanceReady",null,h)})});h.on("destroy",e);return h}function e(){var a=this.container,b=this.element;if(a){a.clearCustomData();a.remove()}if(b){b.clearCustomData();if(this.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE){b.show();this._.required&&b.setAttribute("required","required")}delete this.element}}function b(a){var b=a.name,d=a.element,e=a.elementMode,
-h=a.fire("uiSpace",{space:"top",html:""}).html,m=a.fire("uiSpace",{space:"bottom",html:""}).html,j=new CKEDITOR.template('<{outerEl} id="cke_{name}" class="{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" lang="{langCode}" role="application"'+(a.title?' aria-labelledby="cke_{name}_arialbl"':"")+">"+(a.title?'<span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span>':"")+'<{outerEl} class="cke_inner cke_reset" role="presentation">{topHtml}<{outerEl} id="{contentId}" class="cke_contents cke_reset" role="presentation"></{outerEl}>{bottomHtml}</{outerEl}></{outerEl}>'),
-b=CKEDITOR.dom.element.createFromHtml(j.output({id:a.id,name:b,langDir:a.lang.dir,langCode:a.langCode,voiceLabel:a.title,topHtml:h?'<span id="'+a.ui.spaceId("top")+'" class="cke_top cke_reset_all" role="presentation" style="height:auto">'+h+"</span>":"",contentId:a.ui.spaceId("contents"),bottomHtml:m?'<span id="'+a.ui.spaceId("bottom")+'" class="cke_bottom cke_reset_all" role="presentation">'+m+"</span>":"",outerEl:CKEDITOR.env.ie?"span":"div"}));if(e==CKEDITOR.ELEMENT_MODE_REPLACE){d.hide();b.insertAfter(d)}else d.append(b);
-a.container=b;h&&a.ui.space("top").unselectable();m&&a.ui.space("bottom").unselectable();d=a.config.width;e=a.config.height;d&&b.setStyle("width",CKEDITOR.tools.cssLength(d));e&&a.ui.space("contents").setStyle("height",CKEDITOR.tools.cssLength(e));b.disableContextMenu();CKEDITOR.env.webkit&&b.on("focus",function(){a.focus()});a.fireOnce("uiReady")}CKEDITOR.replace=function(b,f){return a(b,f,null,CKEDITOR.ELEMENT_MODE_REPLACE)};CKEDITOR.appendTo=function(b,f,d){return a(b,f,d,CKEDITOR.ELEMENT_MODE_APPENDTO)};
-CKEDITOR.replaceAll=function(){for(var a=document.getElementsByTagName("textarea"),b=0;b<a.length;b++){var d=null,e=a[b];if(e.name||e.id){if(typeof arguments[0]=="string"){if(!RegExp("(?:^|\\s)"+arguments[0]+"(?:$|\\s)").test(e.className))continue}else if(typeof arguments[0]=="function"){d={};if(arguments[0](e,d)===false)continue}this.replace(e,d)}}};CKEDITOR.editor.prototype.addMode=function(a,b){(this._.modes||(this._.modes={}))[a]=b};CKEDITOR.editor.prototype.setMode=function(a,b){var d=this,e=
-this._.modes;if(!(a==d.mode||!e||!e[a])){d.fire("beforeSetMode",a);if(d.mode){var h=d.checkDirty(),e=d._.previousModeData,m,j=0;d.fire("beforeModeUnload");d.editable(0);d._.previousMode=d.mode;d._.previousModeData=m=d.getData(1);if(d.mode=="source"&&e==m){d.fire("lockSnapshot",{forceUpdate:true});j=1}d.ui.space("contents").setHtml("");d.mode=""}else d._.previousModeData=d.getData(1);this._.modes[a](function(){d.mode=a;h!==void 0&&!h&&d.resetDirty();j?d.fire("unlockSnapshot"):a=="wysiwyg"&&d.fire("saveSnapshot");
-setTimeout(function(){d.fire("mode");b&&b.call(d)},0)})}};CKEDITOR.editor.prototype.resize=function(a,b,d,e){var h=this.container,m=this.ui.space("contents"),j=CKEDITOR.env.webkit&&this.document&&this.document.getWindow().$.frameElement,e=e?this.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}):h;e.setSize("width",a,true);j&&(j.style.width="1%");m.setStyle("height",Math.max(b-(d?0:(e.$.offsetHeight||0)-(m.$.clientHeight||0)),0)+"px");j&&(j.style.width=
-"100%");this.fire("resize")};CKEDITOR.editor.prototype.getResizable=function(a){return a?this.ui.space("contents"):this.container};CKEDITOR.domReady(function(){CKEDITOR.replaceClass&&CKEDITOR.replaceAll(CKEDITOR.replaceClass)})})();CKEDITOR.config.startupMode="wysiwyg";
-(function(){function a(a){var b=a.editor,d=a.data.path,f=d.blockLimit,l=a.data.selection,q=l.getRanges()[0],x;if(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)if(l=e(l,d)){l.appendBogus();x=CKEDITOR.env.ie}if(g(b,d.block,f)&&q.collapsed&&!q.getCommonAncestor().isReadOnly()){d=q.clone();d.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS);f=new CKEDITOR.dom.walker(d);f.guard=function(a){return!c(a)||a.type==CKEDITOR.NODE_COMMENT||a.isReadOnly()};if(!f.checkForward()||d.checkStartOfBlock()&&
-d.checkEndOfBlock()){b=q.fixBlock(true,b.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p");if(!CKEDITOR.env.needsBrFiller)(b=b.getFirst(c))&&(b.type==CKEDITOR.NODE_TEXT&&CKEDITOR.tools.trim(b.getText()).match(/^(?:&nbsp;|\xa0)$/))&&b.remove();x=1;a.cancel()}}x&&q.select()}function e(a,b){if(a.isFake)return 0;var d=b.block||b.blockLimit,e=d&&d.getLast(c);if(d&&d.isBlockBoundary()&&(!e||!(e.type==CKEDITOR.NODE_ELEMENT&&e.isBlockBoundary()))&&!d.is("pre")&&!d.getBogus())return d}function b(a){var b=a.data.getTarget();
-if(b.is("input")){b=b.getAttribute("type");(b=="submit"||b=="reset")&&a.data.preventDefault()}}function c(a){return t(a)&&y(a)}function f(a,b){return function(c){var d=CKEDITOR.dom.element.get(c.data.$.toElement||c.data.$.fromElement||c.data.$.relatedTarget);(!d||!b.equals(d)&&!b.contains(d))&&a.call(this,c)}}function d(a){function b(a){return function(b,e){e&&(b.type==CKEDITOR.NODE_ELEMENT&&b.is(f))&&(d=b);if(!e&&c(b)&&(!a||!p(b)))return false}}var d,e=a.getRanges()[0],a=a.root,f={table:1,ul:1,ol:1,
-dl:1};if(e.startPath().contains(f)){var q=e.clone();q.collapse(1);q.setStartAt(a,CKEDITOR.POSITION_AFTER_START);a=new CKEDITOR.dom.walker(q);a.guard=b();a.checkBackward();if(d){q=e.clone();q.collapse();q.setEndAt(d,CKEDITOR.POSITION_AFTER_END);a=new CKEDITOR.dom.walker(q);a.guard=b(true);d=false;a.checkForward();return d}}return null}function g(a,b,c){return a.config.autoParagraph!==false&&a.activeEnterMode!=CKEDITOR.ENTER_BR&&a.editable().equals(c)&&!b||b&&b.getAttribute("contenteditable")=="true"}
-function h(a){a.editor.focus();a.editor.fire("saveSnapshot")}function m(a){var b=a.editor;b.getSelection().scrollIntoView();setTimeout(function(){b.fire("saveSnapshot")},0)}function j(a,b,c){for(var d=a.getCommonAncestor(b),b=a=c?b:a;(a=a.getParent())&&!d.equals(a)&&a.getChildCount()==1;)b=a;b.remove()}CKEDITOR.editable=CKEDITOR.tools.createClass({base:CKEDITOR.dom.element,$:function(a,b){this.base(b.$||b);this.editor=a;this.status="unloaded";this.hasFocus=false;this.setup()},proto:{focus:function(){var a;
-if(CKEDITOR.env.webkit&&!this.hasFocus){a=this.editor._.previousActive||this.getDocument().getActive();if(this.contains(a)){a.focus();return}}try{this.$[CKEDITOR.env.ie&&this.getDocument().equals(CKEDITOR.document)?"setActive":"focus"]()}catch(b){if(!CKEDITOR.env.ie)throw b;}if(CKEDITOR.env.safari&&!this.isInline()){a=CKEDITOR.document.getActive();a.equals(this.getWindow().getFrame())||this.getWindow().focus()}},on:function(a,b){var c=Array.prototype.slice.call(arguments,0);if(CKEDITOR.env.ie&&/^focus|blur$/.exec(a)){a=
-a=="focus"?"focusin":"focusout";b=f(b,this);c[0]=a;c[1]=b}return CKEDITOR.dom.element.prototype.on.apply(this,c)},attachListener:function(a){!this._.listeners&&(this._.listeners=[]);var b=Array.prototype.slice.call(arguments,1),b=a.on.apply(a,b);this._.listeners.push(b);return b},clearListeners:function(){var a=this._.listeners;try{for(;a.length;)a.pop().removeListener()}catch(b){}},restoreAttrs:function(){var a=this._.attrChanges,b,c;for(c in a)if(a.hasOwnProperty(c)){b=a[c];b!==null?this.setAttribute(c,
-b):this.removeAttribute(c)}},attachClass:function(a){var b=this.getCustomData("classes");if(!this.hasClass(a)){!b&&(b=[]);b.push(a);this.setCustomData("classes",b);this.addClass(a)}},changeAttr:function(a,b){var c=this.getAttribute(a);if(b!==c){!this._.attrChanges&&(this._.attrChanges={});a in this._.attrChanges||(this._.attrChanges[a]=c);this.setAttribute(a,b)}},insertHtml:function(a,b){h(this);n(this,b||"html",a)},insertText:function(a){h(this);var b=this.editor,c=b.getSelection().getStartElement().hasAscendant("pre",
-true)?CKEDITOR.ENTER_BR:b.activeEnterMode,b=c==CKEDITOR.ENTER_BR,d=CKEDITOR.tools,a=d.htmlEncode(a.replace(/\r\n/g,"\n")),a=a.replace(/\t/g,"&nbsp;&nbsp; &nbsp;"),c=c==CKEDITOR.ENTER_P?"p":"div";if(!b){var e=/\n{2}/g;if(e.test(a))var f="<"+c+">",g="</"+c+">",a=f+a.replace(e,function(){return g+f})+g}a=a.replace(/\n/g,"<br>");b||(a=a.replace(RegExp("<br>(?=</"+c+">)"),function(a){return d.repeat(a,2)}));a=a.replace(/^ | $/g,"&nbsp;");a=a.replace(/(>|\s) /g,function(a,b){return b+"&nbsp;"}).replace(/ (?=<)/g,
-"&nbsp;");n(this,"text",a)},insertElement:function(a,b){b?this.insertElementIntoRange(a,b):this.insertElementIntoSelection(a)},insertElementIntoRange:function(a,b){var c=this.editor,d=c.config.enterMode,e=a.getName(),f=CKEDITOR.dtd.$block[e];if(b.checkReadOnly())return false;b.deleteContents(1);b.startContainer.type==CKEDITOR.NODE_ELEMENT&&b.startContainer.is({tr:1,table:1,tbody:1,thead:1,tfoot:1})&&w(b);var g,s;if(f)for(;(g=b.getCommonAncestor(0,1))&&(s=CKEDITOR.dtd[g.getName()])&&(!s||!s[e]);)if(g.getName()in
-CKEDITOR.dtd.span)b.splitElement(g);else if(b.checkStartOfBlock()&&b.checkEndOfBlock()){b.setStartBefore(g);b.collapse(true);g.remove()}else b.splitBlock(d==CKEDITOR.ENTER_DIV?"div":"p",c.editable());b.insertNode(a);return true},insertElementIntoSelection:function(a){h(this);var b=this.editor,d=b.activeEnterMode,b=b.getSelection(),e=b.getRanges()[0],f=a.getName(),f=CKEDITOR.dtd.$block[f];if(this.insertElementIntoRange(a,e)){e.moveToPosition(a,CKEDITOR.POSITION_AFTER_END);if(f)if((f=a.getNext(function(a){return c(a)&&
-!p(a)}))&&f.type==CKEDITOR.NODE_ELEMENT&&f.is(CKEDITOR.dtd.$block))f.getDtd()["#"]?e.moveToElementEditStart(f):e.moveToElementEditEnd(a);else if(!f&&d!=CKEDITOR.ENTER_BR){f=e.fixBlock(true,d==CKEDITOR.ENTER_DIV?"div":"p");e.moveToElementEditStart(f)}}b.selectRanges([e]);m(this)},setData:function(a,b){b||(a=this.editor.dataProcessor.toHtml(a));this.setHtml(a);if(this.status=="unloaded")this.status="ready";this.editor.fire("dataReady")},getData:function(a){var b=this.getHtml();a||(b=this.editor.dataProcessor.toDataFormat(b));
-return b},setReadOnly:function(a){this.setAttribute("contenteditable",!a)},detach:function(){this.removeClass("cke_editable");this.status="detached";var a=this.editor;this._.detach();delete a.document;delete a.window},isInline:function(){return this.getDocument().equals(CKEDITOR.document)},setup:function(){var a=this.editor;this.attachListener(a,"beforeGetData",function(){var b=this.getData();this.is("textarea")||a.config.ignoreEmptyParagraph!==false&&(b=b.replace(u,function(a,b){return b}));a.setData(b,
-null,1)},this);this.attachListener(a,"getSnapshot",function(a){a.data=this.getData(1)},this);this.attachListener(a,"afterSetData",function(){this.setData(a.getData(1))},this);this.attachListener(a,"loadSnapshot",function(a){this.setData(a.data,1)},this);this.attachListener(a,"beforeFocus",function(){var b=a.getSelection();(b=b&&b.getNative())&&b.type=="Control"||this.focus()},this);this.attachListener(a,"insertHtml",function(a){this.insertHtml(a.data.dataValue,a.data.mode)},this);this.attachListener(a,
-"insertElement",function(a){this.insertElement(a.data)},this);this.attachListener(a,"insertText",function(a){this.insertText(a.data)},this);this.setReadOnly(a.readOnly);this.attachClass("cke_editable");this.attachClass(a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"cke_editable_inline":a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE||a.elementMode==CKEDITOR.ELEMENT_MODE_APPENDTO?"cke_editable_themed":"");this.attachClass("cke_contents_"+a.config.contentsLangDirection);a.keystrokeHandler.blockedKeystrokes[8]=
-+a.readOnly;a.keystrokeHandler.attach(this);this.on("blur",function(){this.hasFocus=false},null,null,-1);this.on("focus",function(){this.hasFocus=true},null,null,-1);a.focusManager.add(this);if(this.equals(CKEDITOR.document.getActive())){this.hasFocus=true;a.once("contentDom",function(){a.focusManager.focus()})}this.isInline()&&this.changeAttr("tabindex",a.tabIndex);if(!this.is("textarea")){a.document=this.getDocument();a.window=this.getWindow();var e=a.document;this.changeAttr("spellcheck",!a.config.disableNativeSpellChecker);
-var f=a.config.contentsLangDirection;this.getDirection(1)!=f&&this.changeAttr("dir",f);var k=CKEDITOR.getCss();if(k){f=e.getHead();if(!f.getCustomData("stylesheet")){k=e.appendStyleText(k);k=new CKEDITOR.dom.element(k.ownerNode||k.owningElement);f.setCustomData("stylesheet",k);k.data("cke-temp",1)}}f=e.getCustomData("stylesheet_ref")||0;e.setCustomData("stylesheet_ref",f+1);this.setCustomData("cke_includeReadonly",!a.config.disableReadonlyStyling);this.attachListener(this,"click",function(a){var a=
-a.data,b=(new CKEDITOR.dom.elementPath(a.getTarget(),this)).contains("a");b&&(a.$.button!=2&&b.isReadOnly())&&a.preventDefault()});var l={8:1,46:1};this.attachListener(a,"key",function(b){if(a.readOnly)return true;var c=b.data.domEvent.getKey(),e;if(c in l){var b=a.getSelection(),f,i=b.getRanges()[0],k=i.startPath(),g,h,j,c=c==8;if(CKEDITOR.env.ie&&CKEDITOR.env.version<11&&(f=b.getSelectedElement())||(f=d(b))){a.fire("saveSnapshot");i.moveToPosition(f,CKEDITOR.POSITION_BEFORE_START);f.remove();i.select();
-a.fire("saveSnapshot");e=1}else if(i.collapsed)if((g=k.block)&&(j=g[c?"getPrevious":"getNext"](t))&&j.type==CKEDITOR.NODE_ELEMENT&&j.is("table")&&i[c?"checkStartOfBlock":"checkEndOfBlock"]()){a.fire("saveSnapshot");i[c?"checkEndOfBlock":"checkStartOfBlock"]()&&g.remove();i["moveToElementEdit"+(c?"End":"Start")](j);i.select();a.fire("saveSnapshot");e=1}else if(k.blockLimit&&k.blockLimit.is("td")&&(h=k.blockLimit.getAscendant("table"))&&i.checkBoundaryOfElement(h,c?CKEDITOR.START:CKEDITOR.END)&&(j=
-h[c?"getPrevious":"getNext"](t))){a.fire("saveSnapshot");i["moveToElementEdit"+(c?"End":"Start")](j);i.checkStartOfBlock()&&i.checkEndOfBlock()?j.remove():i.select();a.fire("saveSnapshot");e=1}else if((h=k.contains(["td","th","caption"]))&&i.checkBoundaryOfElement(h,c?CKEDITOR.START:CKEDITOR.END))e=1}return!e});a.blockless&&(CKEDITOR.env.ie&&CKEDITOR.env.needsBrFiller)&&this.attachListener(this,"keyup",function(b){if(b.data.getKeystroke()in l&&!this.getFirst(c)){this.appendBogus();b=a.createRange();
-b.moveToPosition(this,CKEDITOR.POSITION_AFTER_START);b.select()}});this.attachListener(this,"dblclick",function(b){if(a.readOnly)return false;b={element:b.data.getTarget()};a.fire("doubleclick",b)});CKEDITOR.env.ie&&this.attachListener(this,"click",b);CKEDITOR.env.ie||this.attachListener(this,"mousedown",function(b){var c=b.data.getTarget();if(c.is("img","hr","input","textarea","select")&&!c.isReadOnly()){a.getSelection().selectElement(c);c.is("input","textarea","select")&&b.data.preventDefault()}});
-CKEDITOR.env.gecko&&this.attachListener(this,"mouseup",function(b){if(b.data.$.button==2){b=b.data.getTarget();if(!b.getOuterHtml().replace(u,"")){var c=a.createRange();c.moveToElementEditStart(b);c.select(true)}}});if(CKEDITOR.env.webkit){this.attachListener(this,"click",function(a){a.data.getTarget().is("input","select")&&a.data.preventDefault()});this.attachListener(this,"mouseup",function(a){a.data.getTarget().is("input","textarea")&&a.data.preventDefault()})}CKEDITOR.env.webkit&&this.attachListener(a,
-"key",function(b){b=b.data.domEvent.getKey();if(b in l){var c=b==8,d=a.getSelection().getRanges()[0],b=d.startPath();if(d.collapsed){var e;a:{var f=b.block;if(f)if(d[c?"checkStartOfBlock":"checkEndOfBlock"]())if(!d.moveToClosestEditablePosition(f,!c)||!d.collapsed)e=false;else{if(d.startContainer.type==CKEDITOR.NODE_ELEMENT){var i=d.startContainer.getChild(d.startOffset-(c?1:0));if(i&&i.type==CKEDITOR.NODE_ELEMENT&&i.is("hr")){a.fire("saveSnapshot");i.remove();e=true;break a}}if((d=d.startPath().block)&&
-(!d||!d.contains(f))){a.fire("saveSnapshot");var k;(k=(c?d:f).getBogus())&&k.remove();e=a.getSelection();k=e.createBookmarks();(c?f:d).moveChildren(c?d:f,false);b.lastElement.mergeSiblings();j(f,d,!c);e.selectBookmarks(k);e=true}}else e=false;else e=false}if(!e)return}else{c=d;e=b.block;k=c.endPath().block;if(!e||!k||e.equals(k))b=false;else{a.fire("saveSnapshot");(f=e.getBogus())&&f.remove();c.deleteContents();if(k.getParent()){k.moveChildren(e,false);b.lastElement.mergeSiblings();j(e,k,true)}c=
-a.getSelection().getRanges()[0];c.collapse(1);c.select();b=true}if(!b)return}a.getSelection().scrollIntoView();a.fire("saveSnapshot");return false}},this,null,100)}}},_:{detach:function(){this.editor.setData(this.editor.getData(),0,1);this.clearListeners();this.restoreAttrs();var a;if(a=this.removeCustomData("classes"))for(;a.length;)this.removeClass(a.pop());if(!this.is("textarea")){a=this.getDocument();var b=a.getHead();if(b.getCustomData("stylesheet")){var c=a.getCustomData("stylesheet_ref");if(--c)a.setCustomData("stylesheet_ref",
-c);else{a.removeCustomData("stylesheet_ref");b.removeCustomData("stylesheet").remove()}}}this.editor.fire("contentDomUnload");delete this.editor}}});CKEDITOR.editor.prototype.editable=function(a){var b=this._.editable;if(b&&a)return 0;if(arguments.length)b=this._.editable=a?a instanceof CKEDITOR.editable?a:new CKEDITOR.editable(this,a):(b&&b.detach(),null);return b};var p=CKEDITOR.dom.walker.bogus(),u=/(^|<body\b[^>]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:<br[^>]*>|&nbsp;|\u00A0|&#160;)?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi,
-t=CKEDITOR.dom.walker.whitespaces(true),y=CKEDITOR.dom.walker.bookmark(false,true);CKEDITOR.on("instanceLoaded",function(b){var c=b.editor;c.on("insertElement",function(a){a=a.data;if(a.type==CKEDITOR.NODE_ELEMENT&&(a.is("input")||a.is("textarea"))){a.getAttribute("contentEditable")!="false"&&a.data("cke-editable",a.hasAttribute("contenteditable")?"true":"1");a.setAttribute("contentEditable",false)}});c.on("selectionChange",function(b){if(!c.readOnly){var d=c.getSelection();if(d&&!d.isLocked){d=c.checkDirty();
-c.fire("lockSnapshot");a(b);c.fire("unlockSnapshot");!d&&c.resetDirty()}}})});CKEDITOR.on("instanceCreated",function(a){var b=a.editor;b.on("mode",function(){var a=b.editable();if(a&&a.isInline()){var c=b.title;a.changeAttr("role","textbox");a.changeAttr("aria-label",c);c&&a.changeAttr("title",c);var d=b.fire("ariaEditorHelpLabel",{}).label;if(d)if(c=this.ui.space(this.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?"top":"contents")){var e=CKEDITOR.tools.getNextId(),d=CKEDITOR.dom.element.createFromHtml('<span id="'+
-e+'" class="cke_voice_label">'+d+"</span>");c.append(d);a.changeAttr("aria-describedby",e)}}})});CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}");var n=function(){function a(b){return b.type==CKEDITOR.NODE_ELEMENT}function b(c,d){var e,f,i,l,k=[],q=d.range.startContainer;e=d.range.startPath();for(var q=h[q.getName()],g=0,s=c.getChildren(),j=s.count(),m=-1,p=-1,n=0,M=e.contains(h.$list);g<j;++g){e=s.getItem(g);if(a(e)){i=e.getName();
-if(M&&i in CKEDITOR.dtd.$list)k=k.concat(b(e,d));else{l=!!q[i];if(i=="br"&&e.data("cke-eol")&&(!g||g==j-1)){n=(f=g?k[g-1].node:s.getItem(g+1))&&(!a(f)||!f.is("br"));f=f&&a(f)&&h.$block[f.getName()]}m==-1&&!l&&(m=g);l||(p=g);k.push({isElement:1,isLineBreak:n,isBlock:e.isBlockBoundary(),hasBlockSibling:f,node:e,name:i,allowed:l});f=n=0}}else k.push({isElement:0,node:e,allowed:1})}if(m>-1)k[m].firstNotAllowed=1;if(p>-1)k[p].lastNotAllowed=1;return k}function d(b,c){var e=[],f=b.getChildren(),l=f.count(),
-k,q=0,g=h[c],s=!b.is(h.$inline)||b.is("br");for(s&&e.push(" ");q<l;q++){k=f.getItem(q);a(k)&&!k.is(g)?e=e.concat(d(k,c)):e.push(k)}s&&e.push(" ");return e}function e(b){return b&&a(b)&&(b.is(h.$removeEmpty)||b.is("a")&&!b.isBlockBoundary())}function f(b,c,d,e){var i=b.clone(),k,q;i.setEndAt(c,CKEDITOR.POSITION_BEFORE_END);if((k=(new CKEDITOR.dom.walker(i)).next())&&a(k)&&s[k.getName()]&&(q=k.getPrevious())&&a(q)&&!q.getParent().equals(b.startContainer)&&d.contains(q)&&e.contains(k)&&k.isIdentical(q)){k.moveChildren(q);
-k.remove();f(b,c,d,e)}}function q(b,c){function d(b,c){if(c.isBlock&&c.isElement&&!c.node.is("br")&&a(b)&&b.is("br")){b.remove();return 1}}var e=c.endContainer.getChild(c.endOffset),f=c.endContainer.getChild(c.endOffset-1);e&&d(e,b[b.length-1]);if(f&&d(f,b[0])){c.setEnd(c.endContainer,c.endOffset-1);c.collapse()}}var h=CKEDITOR.dtd,s={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,li:1,pre:1,dl:1,blockquote:1},j={p:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1},p=CKEDITOR.tools.extend({},h.$inline);delete p.br;
-return function(s,n,u){var t=s.editor,A=t.getSelection().getRanges()[0],E=false;if(n=="unfiltered_html"){n="html";E=true}if(!A.checkReadOnly()){var v=(new CKEDITOR.dom.elementPath(A.startContainer,A.root)).blockLimit||A.root,n={type:n,dontFilter:E,editable:s,editor:t,range:A,blockLimit:v,mergeCandidates:[],zombies:[]},t=n.range,E=n.mergeCandidates,z,B,D,G;if(n.type=="text"&&t.shrink(CKEDITOR.SHRINK_ELEMENT,true,false)){z=CKEDITOR.dom.element.createFromHtml("<span>&nbsp;</span>",t.document);t.insertNode(z);
-t.setStartAfter(z)}B=new CKEDITOR.dom.elementPath(t.startContainer);n.endPath=D=new CKEDITOR.dom.elementPath(t.endContainer);if(!t.collapsed){var v=D.block||D.blockLimit,y=t.getCommonAncestor();v&&(!v.equals(y)&&!v.contains(y)&&t.checkEndOfBlock())&&n.zombies.push(v);t.deleteContents()}for(;(G=a(t.startContainer)&&t.startContainer.getChild(t.startOffset-1))&&a(G)&&G.isBlockBoundary()&&B.contains(G);)t.moveToPosition(G,CKEDITOR.POSITION_BEFORE_END);f(t,n.blockLimit,B,D);if(z){t.setEndBefore(z);t.collapse();
-z.remove()}z=t.startPath();if(v=z.contains(e,false,1)){t.splitElement(v);n.inlineStylesRoot=v;n.inlineStylesPeak=z.lastElement}z=t.createBookmark();(v=z.startNode.getPrevious(c))&&a(v)&&e(v)&&E.push(v);(v=z.startNode.getNext(c))&&a(v)&&e(v)&&E.push(v);for(v=z.startNode;(v=v.getParent())&&e(v);)E.push(v);t.moveToBookmark(z);if(z=u){z=n.range;if(n.type=="text"&&n.inlineStylesRoot){G=n.inlineStylesPeak;t=G.getDocument().createText("{cke-peak}");for(E=n.inlineStylesRoot.getParent();!G.equals(E);){t=t.appendTo(G.clone());
-G=G.getParent()}u=t.getOuterHtml().split("{cke-peak}").join(u)}G=n.blockLimit.getName();if(/^\s+|\s+$/.test(u)&&"span"in CKEDITOR.dtd[G])var w='<span data-cke-marker="1">&nbsp;</span>',u=w+u+w;u=n.editor.dataProcessor.toHtml(u,{context:null,fixForBody:false,dontFilter:n.dontFilter,filter:n.editor.activeFilter,enterMode:n.editor.activeEnterMode});G=z.document.createElement("body");G.setHtml(u);if(w){G.getFirst().remove();G.getLast().remove()}if((w=z.startPath().block)&&!(w.getChildCount()==1&&w.getBogus()))a:{var H;
-if(G.getChildCount()==1&&a(H=G.getFirst())&&H.is(j)){w=H.getElementsByTag("*");z=0;for(E=w.count();z<E;z++){t=w.getItem(z);if(!t.is(p))break a}H.moveChildren(H.getParent(1));H.remove()}}n.dataWrapper=G;z=u}if(z){H=n.range;var w=H.document,C,u=n.blockLimit;z=0;var K;G=[];var I,S,E=t=0,L,U;B=H.startContainer;var v=n.endPath.elements[0],V;D=v.getPosition(B);y=!!v.getCommonAncestor(B)&&D!=CKEDITOR.POSITION_IDENTICAL&&!(D&CKEDITOR.POSITION_CONTAINS+CKEDITOR.POSITION_IS_CONTAINED);B=b(n.dataWrapper,n);
-for(q(B,H);z<B.length;z++){D=B[z];if(C=D.isLineBreak){C=H;L=u;var P=void 0,Y=void 0;if(D.hasBlockSibling)C=1;else{P=C.startContainer.getAscendant(h.$block,1);if(!P||!P.is({div:1,p:1}))C=0;else{Y=P.getPosition(L);if(Y==CKEDITOR.POSITION_IDENTICAL||Y==CKEDITOR.POSITION_CONTAINS)C=0;else{L=C.splitElement(P);C.moveToPosition(L,CKEDITOR.POSITION_AFTER_START);C=1}}}}if(C)E=z>0;else{C=H.startPath();if(!D.isBlock&&g(n.editor,C.block,C.blockLimit)&&(S=n.editor.activeEnterMode!=CKEDITOR.ENTER_BR&&n.editor.config.autoParagraph!==
-false?n.editor.activeEnterMode==CKEDITOR.ENTER_DIV?"div":"p":false)){S=w.createElement(S);S.appendBogus();H.insertNode(S);CKEDITOR.env.needsBrFiller&&(K=S.getBogus())&&K.remove();H.moveToPosition(S,CKEDITOR.POSITION_BEFORE_END)}if((C=H.startPath().block)&&!C.equals(I)){if(K=C.getBogus()){K.remove();G.push(C)}I=C}D.firstNotAllowed&&(t=1);if(t&&D.isElement){C=H.startContainer;for(L=null;C&&!h[C.getName()][D.name];){if(C.equals(u)){C=null;break}L=C;C=C.getParent()}if(C){if(L){U=H.splitElement(L);n.zombies.push(U);
-n.zombies.push(L)}}else{L=u.getName();V=!z;C=z==B.length-1;L=d(D.node,L);for(var P=[],Y=L.length,Z=0,$=void 0,X=0,W=-1;Z<Y;Z++){$=L[Z];if($==" "){if(!X&&(!V||Z)){P.push(new CKEDITOR.dom.text(" "));W=P.length}X=1}else{P.push($);X=0}}C&&W==P.length&&P.pop();V=P}}if(V){for(;C=V.pop();)H.insertNode(C);V=0}else H.insertNode(D.node);if(D.lastNotAllowed&&z<B.length-1){(U=y?v:U)&&H.setEndAt(U,CKEDITOR.POSITION_AFTER_START);t=0}H.collapse()}}n.dontMoveCaret=E;n.bogusNeededBlocks=G}K=n.range;var O;U=n.bogusNeededBlocks;
-for(V=K.createBookmark();I=n.zombies.pop();)if(I.getParent()){S=K.clone();S.moveToElementEditStart(I);S.removeEmptyBlocksAtEnd()}if(U)for(;I=U.pop();)CKEDITOR.env.needsBrFiller?I.appendBogus():I.append(K.document.createText(" "));for(;I=n.mergeCandidates.pop();)I.mergeSiblings();K.moveToBookmark(V);if(!n.dontMoveCaret){for(I=a(K.startContainer)&&K.startContainer.getChild(K.startOffset-1);I&&a(I)&&!I.is(h.$empty);){if(I.isBlockBoundary())K.moveToPosition(I,CKEDITOR.POSITION_BEFORE_END);else{if(e(I)&&
-I.getHtml().match(/(\s|&nbsp;)$/g)){O=null;break}O=K.clone();O.moveToPosition(I,CKEDITOR.POSITION_BEFORE_END)}I=I.getLast(c)}O&&K.moveToRange(O)}A.select();m(s)}}}(),w=function(){function a(b){b=new CKEDITOR.dom.walker(b);b.guard=function(a,b){if(b)return false;if(a.type==CKEDITOR.NODE_ELEMENT)return a.is(CKEDITOR.dtd.$tableContent)};b.evaluator=function(a){return a.type==CKEDITOR.NODE_ELEMENT};return b}function b(a,c,d){c=a.getDocument().createElement(c);a.append(c,d);return c}function c(a){var b=
-a.count(),d;for(b;b-- >0;){d=a.getItem(b);if(!CKEDITOR.tools.trim(d.getHtml())){d.appendBogus();CKEDITOR.env.ie&&(CKEDITOR.env.version<9&&d.getChildCount())&&d.getFirst().remove()}}}return function(d){var e=d.startContainer,f=e.getAscendant("table",1),g=false;c(f.getElementsByTag("td"));c(f.getElementsByTag("th"));f=d.clone();f.setStart(e,0);f=a(f).lastBackward();if(!f){f=d.clone();f.setEndAt(e,CKEDITOR.POSITION_BEFORE_END);f=a(f).lastForward();g=true}f||(f=e);if(f.is("table")){d.setStartAt(f,CKEDITOR.POSITION_BEFORE_START);
-d.collapse(true);f.remove()}else{f.is({tbody:1,thead:1,tfoot:1})&&(f=b(f,"tr",g));f.is("tr")&&(f=b(f,f.getParent().is("thead")?"th":"td",g));(e=f.getBogus())&&e.remove();d.moveToPosition(f,g?CKEDITOR.POSITION_AFTER_START:CKEDITOR.POSITION_BEFORE_END)}}}()})();
-(function(){function a(){var a=this._.fakeSelection,b;if(a){b=this.getSelection(1);if(!b||!b.isHidden()){a.reset();a=0}}if(!a){a=b||this.getSelection(1);if(!a||a.getType()==CKEDITOR.SELECTION_NONE)return}this.fire("selectionCheck",a);b=this.elementPath();if(!b.compare(this._.selectionPreviousPath)){if(CKEDITOR.env.webkit)this._.previousActive=this.document.getActive();this._.selectionPreviousPath=b;this.fire("selectionChange",{selection:a,path:b})}}function e(){t=true;if(!u){b.call(this);u=CKEDITOR.tools.setTimeout(b,
-200,this)}}function b(){u=null;if(t){CKEDITOR.tools.setTimeout(a,0,this);t=false}}function c(a){function b(c,d){return!c||c.type==CKEDITOR.NODE_TEXT?false:a.clone()["moveToElementEdit"+(d?"End":"Start")](c)}if(!(a.root instanceof CKEDITOR.editable))return false;var c=a.startContainer,d=a.getPreviousNode(y,null,c),e=a.getNextNode(y,null,c);return b(d)||b(e,1)||!d&&!e&&!(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary()&&c.getBogus())?true:false}function f(a){return a.getCustomData("cke-fillingChar")}
-function d(a,b){var c=a&&a.removeCustomData("cke-fillingChar");if(c){if(b!==false){var d,e=a.getDocument().getSelection().getNative(),f=e&&e.type!="None"&&e.getRangeAt(0);if(c.getLength()>1&&f&&f.intersectsNode(c.$)){d=[e.anchorOffset,e.focusOffset];f=e.focusNode==c.$&&e.focusOffset>0;e.anchorNode==c.$&&e.anchorOffset>0&&d[0]--;f&&d[1]--;var h;f=e;if(!f.isCollapsed){h=f.getRangeAt(0);h.setStart(f.anchorNode,f.anchorOffset);h.setEnd(f.focusNode,f.focusOffset);h=h.collapsed}h&&d.unshift(d.pop())}}c.setText(g(c.getText()));
-if(d){c=e.getRangeAt(0);c.setStart(c.startContainer,d[0]);c.setEnd(c.startContainer,d[1]);e.removeAllRanges();e.addRange(c)}}}function g(a){return a.replace(/\u200B( )?/g,function(a){return a[1]?" ":""})}function h(a,b,c){var d=a.on("focus",function(a){a.cancel()},null,null,-100);if(CKEDITOR.env.ie)var e=a.getDocument().on("selectionchange",function(a){a.cancel()},null,null,-100);else{var f=new CKEDITOR.dom.range(a);f.moveToElementEditStart(a);var g=a.getDocument().$.createRange();g.setStart(f.startContainer.$,
-f.startOffset);g.collapse(1);b.removeAllRanges();b.addRange(g)}c&&a.focus();d.removeListener();e&&e.removeListener()}function m(a){var b=CKEDITOR.dom.element.createFromHtml('<div data-cke-hidden-sel="1" data-cke-temp="1" style="'+(CKEDITOR.env.ie?"display:none":"position:fixed;top:0;left:-1000px")+'">&nbsp;</div>',a.document);a.fire("lockSnapshot");a.editable().append(b);var c=a.getSelection(1),d=a.createRange(),e=c.root.on("selectionchange",function(a){a.cancel()},null,null,0);d.setStartAt(b,CKEDITOR.POSITION_AFTER_START);
-d.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);c.selectRanges([d]);e.removeListener();a.fire("unlockSnapshot");a._.hiddenSelectionContainer=b}function j(a){var b={37:1,39:1,8:1,46:1};return function(c){var d=c.data.getKeystroke();if(b[d]){var e=a.getSelection().getRanges(),f=e[0];if(e.length==1&&f.collapsed)if((d=f[d<38?"getPreviousEditableNode":"getNextEditableNode"]())&&d.type==CKEDITOR.NODE_ELEMENT&&d.getAttribute("contenteditable")=="false"){a.getSelection().fake(d);c.data.preventDefault();c.cancel()}}}}
-function p(a){for(var b=0;b<a.length;b++){var c=a[b];c.getCommonAncestor().isReadOnly()&&a.splice(b,1);if(!c.collapsed){if(c.startContainer.isReadOnly())for(var d=c.startContainer,e;d;){if((e=d.type==CKEDITOR.NODE_ELEMENT)&&d.is("body")||!d.isReadOnly())break;e&&d.getAttribute("contentEditable")=="false"&&c.setStartAfter(d);d=d.getParent()}d=c.startContainer;e=c.endContainer;var f=c.startOffset,g=c.endOffset,h=c.clone();d&&d.type==CKEDITOR.NODE_TEXT&&(f>=d.getLength()?h.setStartAfter(d):h.setStartBefore(d));
-e&&e.type==CKEDITOR.NODE_TEXT&&(g?h.setEndAfter(e):h.setEndBefore(e));d=new CKEDITOR.dom.walker(h);d.evaluator=function(d){if(d.type==CKEDITOR.NODE_ELEMENT&&d.isReadOnly()){var e=c.clone();c.setEndBefore(d);c.collapsed&&a.splice(b--,1);if(!(d.getPosition(h.endContainer)&CKEDITOR.POSITION_CONTAINS)){e.setStartAfter(d);e.collapsed||a.splice(b+1,0,e)}return true}return false};d.next()}}return a}var u,t,y=CKEDITOR.dom.walker.invisible(1),n=function(){function a(b){return function(a){var c=a.editor.createRange();
-c.moveToClosestEditablePosition(a.selected,b)&&a.editor.getSelection().selectRanges([c]);return false}}function b(a){return function(b){var c=b.editor,d=c.createRange(),e;if(!(e=d.moveToClosestEditablePosition(b.selected,a)))e=d.moveToClosestEditablePosition(b.selected,!a);e&&c.getSelection().selectRanges([d]);c.fire("saveSnapshot");b.selected.remove();if(!e){d.moveToElementEditablePosition(c.editable());c.getSelection().selectRanges([d])}c.fire("saveSnapshot");return false}}var c=a(),d=a(1);return{37:c,
-38:c,39:d,40:d,8:b(),46:b(1)}}();CKEDITOR.on("instanceCreated",function(b){function c(){var a=f.getSelection();a&&a.removeAllRanges()}var f=b.editor;f.on("contentDom",function(){function b(){A=new CKEDITOR.dom.selection(f.getSelection());A.lock()}function c(){k.removeListener("mouseup",c);n.removeListener("mouseup",c);var a=CKEDITOR.document.$.selection,b=a.createRange();a.type!="None"&&b.parentElement().ownerDocument==i.$&&b.select()}var i=f.document,k=CKEDITOR.document,g=f.editable(),h=i.getBody(),
-n=i.getDocumentElement(),m=g.isInline(),p,A;CKEDITOR.env.gecko&&g.attachListener(g,"focus",function(a){a.removeListener();if(p!==0)if((a=f.getSelection().getNative())&&a.isCollapsed&&a.anchorNode==g.$){a=f.createRange();a.moveToElementEditStart(g);a.select()}},null,null,-2);g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){p&&CKEDITOR.env.webkit&&(p=f._.previousActive&&f._.previousActive.equals(i.getActive()));f.unlockSelection(p);p=0},null,null,-1);g.attachListener(g,"mousedown",
-function(){p=0});if(CKEDITOR.env.ie||m){w?g.attachListener(g,"beforedeactivate",b,null,null,-1):g.attachListener(f,"selectionCheck",b,null,null,-1);g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusOut":"blur",function(){f.lockSelection(A);p=1},null,null,-1);g.attachListener(g,"mousedown",function(){p=0})}if(CKEDITOR.env.ie&&!m){var E;g.attachListener(g,"mousedown",function(a){if(a.data.$.button==2){a=f.document.getSelection();if(!a||a.getType()==CKEDITOR.SELECTION_NONE)E=f.window.getScrollPosition()}});
-g.attachListener(g,"mouseup",function(a){if(a.data.$.button==2&&E){f.document.$.documentElement.scrollLeft=E.x;f.document.$.documentElement.scrollTop=E.y}E=null});if(i.$.compatMode!="BackCompat"){if(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)n.on("mousedown",function(a){function b(a){a=a.data.$;if(d){var c=h.$.createTextRange();try{c.moveToPoint(a.clientX,a.clientY)}catch(f){}d.setEndPoint(e.compareEndPoints("StartToStart",c)<0?"EndToEnd":"StartToStart",c);d.select()}}function c(){n.removeListener("mousemove",
-b);k.removeListener("mouseup",c);n.removeListener("mouseup",c);d.select()}a=a.data;if(a.getTarget().is("html")&&a.$.y<n.$.clientHeight&&a.$.x<n.$.clientWidth){var d=h.$.createTextRange();try{d.moveToPoint(a.$.clientX,a.$.clientY)}catch(f){}var e=d.duplicate();n.on("mousemove",b);k.on("mouseup",c);n.on("mouseup",c)}});if(CKEDITOR.env.version>7&&CKEDITOR.env.version<11)n.on("mousedown",function(a){if(a.data.getTarget().is("html")){k.on("mouseup",c);n.on("mouseup",c)}})}}g.attachListener(g,"selectionchange",
-a,f);g.attachListener(g,"keyup",e,f);g.attachListener(g,CKEDITOR.env.webkit?"DOMFocusIn":"focus",function(){f.forceNextSelectionCheck();f.selectionChange(1)});if(m&&(CKEDITOR.env.webkit||CKEDITOR.env.gecko)){var v;g.attachListener(g,"mousedown",function(){v=1});g.attachListener(i.getDocumentElement(),"mouseup",function(){v&&e.call(f);v=0})}else g.attachListener(CKEDITOR.env.ie?g:i.getDocumentElement(),"mouseup",e,f);CKEDITOR.env.webkit&&g.attachListener(i,"keydown",function(a){switch(a.data.getKey()){case 13:case 33:case 34:case 35:case 36:case 37:case 39:case 8:case 45:case 46:d(g)}},
-null,null,-1);g.attachListener(g,"keydown",j(f),null,null,-1)});f.on("setData",function(){f.unlockSelection();CKEDITOR.env.webkit&&c()});f.on("contentDomUnload",function(){f.unlockSelection()});if(CKEDITOR.env.ie9Compat)f.on("beforeDestroy",c,null,null,9);f.on("dataReady",function(){delete f._.fakeSelection;delete f._.hiddenSelectionContainer;f.selectionChange(1)});f.on("loadSnapshot",function(){var a=f.editable().getLast(function(a){return a.type==CKEDITOR.NODE_ELEMENT});a&&a.hasAttribute("data-cke-hidden-sel")&&
-a.remove()},null,null,100);f.on("key",function(a){if(f.mode=="wysiwyg"){var b=f.getSelection();if(b.isFake){var c=n[a.data.keyCode];if(c)return c({editor:f,selected:b.getSelectedElement(),selection:b,keyEvent:a})}}})});CKEDITOR.on("instanceReady",function(a){function b(){var a=e.editable();if(a)if(a=f(a)){var c=e.document.$.defaultView.getSelection();c.type=="Caret"&&c.anchorNode==a.$&&(j=1);h=a.getText();a.setText(g(h))}}function c(){var a=e.editable();if(a)if(a=f(a)){a.setText(h);if(j){e.document.$.defaultView.getSelection().setPosition(a.$,
-a.getLength());j=0}}}var e=a.editor;if(CKEDITOR.env.webkit){e.on("selectionChange",function(){var a=e.editable(),b=f(a);b&&(b.getCustomData("ready")?d(a):b.setCustomData("ready",1))},null,null,-1);e.on("beforeSetMode",function(){d(e.editable())},null,null,-1);var h,j;e.on("beforeUndoImage",b);e.on("afterUndoImage",c);e.on("beforeGetData",b,null,null,0);e.on("getData",c)}});CKEDITOR.editor.prototype.selectionChange=function(b){(b?a:e).call(this)};CKEDITOR.editor.prototype.getSelection=function(a){if((this._.savedSelection||
-this._.fakeSelection)&&!a)return this._.savedSelection||this._.fakeSelection;return(a=this.editable())&&this.mode=="wysiwyg"?new CKEDITOR.dom.selection(a):null};CKEDITOR.editor.prototype.lockSelection=function(a){a=a||this.getSelection(1);if(a.getType()!=CKEDITOR.SELECTION_NONE){!a.isLocked&&a.lock();this._.savedSelection=a;return true}return false};CKEDITOR.editor.prototype.unlockSelection=function(a){var b=this._.savedSelection;if(b){b.unlock(a);delete this._.savedSelection;return true}return false};
-CKEDITOR.editor.prototype.forceNextSelectionCheck=function(){delete this._.selectionPreviousPath};CKEDITOR.dom.document.prototype.getSelection=function(){return new CKEDITOR.dom.selection(this)};CKEDITOR.dom.range.prototype.select=function(){var a=this.root instanceof CKEDITOR.editable?this.root.editor.getSelection():new CKEDITOR.dom.selection(this.root);a.selectRanges([this]);return a};CKEDITOR.SELECTION_NONE=1;CKEDITOR.SELECTION_TEXT=2;CKEDITOR.SELECTION_ELEMENT=3;var w=typeof window.getSelection!=
-"function",o=1;CKEDITOR.dom.selection=function(a){if(a instanceof CKEDITOR.dom.selection)var b=a,a=a.root;var c=a instanceof CKEDITOR.dom.element;this.rev=b?b.rev:o++;this.document=a instanceof CKEDITOR.dom.document?a:a.getDocument();this.root=a=c?a:this.document.getBody();this.isLocked=0;this._={cache:{}};if(b){CKEDITOR.tools.extend(this._.cache,b._.cache);this.isFake=b.isFake;this.isLocked=b.isLocked;return this}c=w?this.document.$.selection:this.document.getWindow().$.getSelection();if(CKEDITOR.env.webkit)(c.type==
-"None"&&this.document.getActive().equals(a)||c.type=="Caret"&&c.anchorNode.nodeType==CKEDITOR.NODE_DOCUMENT)&&h(a,c);else if(CKEDITOR.env.gecko)c&&(this.document.getActive().equals(a)&&c.anchorNode&&c.anchorNode.nodeType==CKEDITOR.NODE_DOCUMENT)&&h(a,c,true);else if(CKEDITOR.env.ie){b=this.document.getActive();if(w)c.type=="None"&&(b&&b.equals(this.document.getDocumentElement()))&&h(a,null,true);else{(c=c&&c.anchorNode)&&(c=new CKEDITOR.dom.node(c));b&&(b.equals(this.document.getDocumentElement())&&
-c&&(a.equals(c)||a.contains(c)))&&h(a,null,true)}}var a=this.getNative(),d,e;if(a)if(a.getRangeAt)d=(e=a.rangeCount&&a.getRangeAt(0))&&new CKEDITOR.dom.node(e.commonAncestorContainer);else{try{e=a.createRange()}catch(f){}d=e&&CKEDITOR.dom.element.get(e.item&&e.item(0)||e.parentElement())}if(!d||!(d.type==CKEDITOR.NODE_ELEMENT||d.type==CKEDITOR.NODE_TEXT)||!this.root.equals(d)&&!this.root.contains(d)){this._.cache.type=CKEDITOR.SELECTION_NONE;this._.cache.startElement=null;this._.cache.selectedElement=
-null;this._.cache.selectedText="";this._.cache.ranges=new CKEDITOR.dom.rangeList}return this};var r={img:1,hr:1,li:1,table:1,tr:1,td:1,th:1,embed:1,object:1,ol:1,ul:1,a:1,input:1,form:1,select:1,textarea:1,button:1,fieldset:1,thead:1,tfoot:1};CKEDITOR.dom.selection.prototype={getNative:function(){return this._.cache.nativeSel!==void 0?this._.cache.nativeSel:this._.cache.nativeSel=w?this.document.$.selection:this.document.getWindow().$.getSelection()},getType:w?function(){var a=this._.cache;if(a.type)return a.type;
-var b=CKEDITOR.SELECTION_NONE;try{var c=this.getNative(),d=c.type;if(d=="Text")b=CKEDITOR.SELECTION_TEXT;if(d=="Control")b=CKEDITOR.SELECTION_ELEMENT;if(c.createRange().parentElement())b=CKEDITOR.SELECTION_TEXT}catch(e){}return a.type=b}:function(){var a=this._.cache;if(a.type)return a.type;var b=CKEDITOR.SELECTION_TEXT,c=this.getNative();if(!c||!c.rangeCount)b=CKEDITOR.SELECTION_NONE;else if(c.rangeCount==1){var c=c.getRangeAt(0),d=c.startContainer;if(d==c.endContainer&&d.nodeType==1&&c.endOffset-
-c.startOffset==1&&r[d.childNodes[c.startOffset].nodeName.toLowerCase()])b=CKEDITOR.SELECTION_ELEMENT}return a.type=b},getRanges:function(){var a=w?function(){function a(b){return(new CKEDITOR.dom.node(b)).getIndex()}var b=function(b,c){b=b.duplicate();b.collapse(c);var d=b.parentElement();if(!d.hasChildNodes())return{container:d,offset:0};for(var e=d.children,f,i,g=b.duplicate(),l=0,h=e.length-1,A=-1,j,v;l<=h;){A=Math.floor((l+h)/2);f=e[A];g.moveToElementText(f);j=g.compareEndPoints("StartToStart",
-b);if(j>0)h=A-1;else if(j<0)l=A+1;else return{container:d,offset:a(f)}}if(A==-1||A==e.length-1&&j<0){g.moveToElementText(d);g.setEndPoint("StartToStart",b);g=g.text.replace(/(\r\n|\r)/g,"\n").length;e=d.childNodes;if(!g){f=e[e.length-1];return f.nodeType!=CKEDITOR.NODE_TEXT?{container:d,offset:e.length}:{container:f,offset:f.nodeValue.length}}for(d=e.length;g>0&&d>0;){i=e[--d];if(i.nodeType==CKEDITOR.NODE_TEXT){v=i;g=g-i.nodeValue.length}}return{container:v,offset:-g}}g.collapse(j>0?true:false);g.setEndPoint(j>
-0?"StartToStart":"EndToStart",b);g=g.text.replace(/(\r\n|\r)/g,"\n").length;if(!g)return{container:d,offset:a(f)+(j>0?0:1)};for(;g>0;)try{i=f[j>0?"previousSibling":"nextSibling"];if(i.nodeType==CKEDITOR.NODE_TEXT){g=g-i.nodeValue.length;v=i}f=i}catch(z){return{container:d,offset:a(f)}}return{container:v,offset:j>0?-g:v.nodeValue.length+g}};return function(){var a=this.getNative(),c=a&&a.createRange(),d=this.getType();if(!a)return[];if(d==CKEDITOR.SELECTION_TEXT){a=new CKEDITOR.dom.range(this.root);
-d=b(c,true);a.setStart(new CKEDITOR.dom.node(d.container),d.offset);d=b(c);a.setEnd(new CKEDITOR.dom.node(d.container),d.offset);a.endContainer.getPosition(a.startContainer)&CKEDITOR.POSITION_PRECEDING&&a.endOffset<=a.startContainer.getIndex()&&a.collapse();return[a]}if(d==CKEDITOR.SELECTION_ELEMENT){for(var d=[],e=0;e<c.length;e++){for(var f=c.item(e),g=f.parentNode,i=0,a=new CKEDITOR.dom.range(this.root);i<g.childNodes.length&&g.childNodes[i]!=f;i++);a.setStart(new CKEDITOR.dom.node(g),i);a.setEnd(new CKEDITOR.dom.node(g),
-i+1);d.push(a)}return d}return[]}}():function(){var a=[],b,c=this.getNative();if(!c)return a;for(var d=0;d<c.rangeCount;d++){var e=c.getRangeAt(d);b=new CKEDITOR.dom.range(this.root);b.setStart(new CKEDITOR.dom.node(e.startContainer),e.startOffset);b.setEnd(new CKEDITOR.dom.node(e.endContainer),e.endOffset);a.push(b)}return a};return function(b){var c=this._.cache,d=c.ranges;if(!d)c.ranges=d=new CKEDITOR.dom.rangeList(a.call(this));return!b?d:p(new CKEDITOR.dom.rangeList(d.slice()))}}(),getStartElement:function(){var a=
-this._.cache;if(a.startElement!==void 0)return a.startElement;var b;switch(this.getType()){case CKEDITOR.SELECTION_ELEMENT:return this.getSelectedElement();case CKEDITOR.SELECTION_TEXT:var c=this.getRanges()[0];if(c){if(c.collapsed){b=c.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent())}else{for(c.optimize();;){b=c.startContainer;if(c.startOffset==(b.getChildCount?b.getChildCount():b.getLength())&&!b.isBlockBoundary())c.setStartAfter(b);else break}b=c.startContainer;if(b.type!=CKEDITOR.NODE_ELEMENT)return b.getParent();
-b=b.getChild(c.startOffset);if(!b||b.type!=CKEDITOR.NODE_ELEMENT)b=c.startContainer;else for(c=b.getFirst();c&&c.type==CKEDITOR.NODE_ELEMENT;){b=c;c=c.getFirst()}}b=b.$}}return a.startElement=b?new CKEDITOR.dom.element(b):null},getSelectedElement:function(){var a=this._.cache;if(a.selectedElement!==void 0)return a.selectedElement;var b=this,c=CKEDITOR.tools.tryThese(function(){return b.getNative().createRange().item(0)},function(){for(var a=b.getRanges()[0].clone(),c,d,e=2;e&&(!(c=a.getEnclosedNode())||
-!(c.type==CKEDITOR.NODE_ELEMENT&&r[c.getName()]&&(d=c)));e--)a.shrink(CKEDITOR.SHRINK_ELEMENT);return d&&d.$});return a.selectedElement=c?new CKEDITOR.dom.element(c):null},getSelectedText:function(){var a=this._.cache;if(a.selectedText!==void 0)return a.selectedText;var b=this.getNative(),b=w?b.type=="Control"?"":b.createRange().text:b.toString();return a.selectedText=b},lock:function(){this.getRanges();this.getStartElement();this.getSelectedElement();this.getSelectedText();this._.cache.nativeSel=
-null;this.isLocked=1},unlock:function(a){if(this.isLocked){if(a)var b=this.getSelectedElement(),c=!b&&this.getRanges(),d=this.isFake;this.isLocked=0;this.reset();if(a)(a=b||c[0]&&c[0].getCommonAncestor())&&a.getAscendant("body",1)&&(d?this.fake(b):b?this.selectElement(b):this.selectRanges(c))}},reset:function(){this._.cache={};this.isFake=0;var a=this.root.editor;if(a&&a._.fakeSelection&&this.rev==a._.fakeSelection.rev){delete a._.fakeSelection;var b=a._.hiddenSelectionContainer;if(b){var c=a.checkDirty();
-a.fire("lockSnapshot");b.remove();a.fire("unlockSnapshot");!c&&a.resetDirty()}delete a._.hiddenSelectionContainer}this.rev=o++},selectElement:function(a){var b=new CKEDITOR.dom.range(this.root);b.setStartBefore(a);b.setEndAfter(a);this.selectRanges([b])},selectRanges:function(a){var b=this.root.editor,b=b&&b._.hiddenSelectionContainer;this.reset();if(b)for(var b=this.root,e,f=0;f<a.length;++f){e=a[f];if(e.endContainer.equals(b))e.endOffset=Math.min(e.endOffset,b.getChildCount())}if(a.length)if(this.isLocked){var g=
-CKEDITOR.document.getActive();this.unlock();this.selectRanges(a);this.lock();g&&!g.equals(this.root)&&g.focus()}else{var h;a:{var j,n;if(a.length==1&&!(n=a[0]).collapsed&&(h=n.getEnclosedNode())&&h.type==CKEDITOR.NODE_ELEMENT){n=n.clone();n.shrink(CKEDITOR.SHRINK_ELEMENT,true);if((j=n.getEnclosedNode())&&j.type==CKEDITOR.NODE_ELEMENT)h=j;if(h.getAttribute("contenteditable")=="false")break a}h=void 0}if(h)this.fake(h);else{if(w){n=CKEDITOR.dom.walker.whitespaces(true);j=/\ufeff|\u00a0/;b={table:1,
-tbody:1,tr:1};if(a.length>1){h=a[a.length-1];a[0].setEnd(h.endContainer,h.endOffset)}h=a[0];var a=h.collapsed,m,p,o;if((e=h.getEnclosedNode())&&e.type==CKEDITOR.NODE_ELEMENT&&e.getName()in r&&(!e.is("a")||!e.getText()))try{o=e.$.createControlRange();o.addElement(e.$);o.select();return}catch(t){}if(h.startContainer.type==CKEDITOR.NODE_ELEMENT&&h.startContainer.getName()in b||h.endContainer.type==CKEDITOR.NODE_ELEMENT&&h.endContainer.getName()in b){h.shrink(CKEDITOR.NODE_ELEMENT,true);a=h.collapsed}o=
-h.createBookmark();b=o.startNode;if(!a)g=o.endNode;o=h.document.$.body.createTextRange();o.moveToElementText(b.$);o.moveStart("character",1);if(g){j=h.document.$.body.createTextRange();j.moveToElementText(g.$);o.setEndPoint("EndToEnd",j);o.moveEnd("character",-1)}else{m=b.getNext(n);p=b.hasAscendant("pre");m=!(m&&m.getText&&m.getText().match(j))&&(p||!b.hasPrevious()||b.getPrevious().is&&b.getPrevious().is("br"));p=h.document.createElement("span");p.setHtml("&#65279;");p.insertBefore(b);m&&h.document.createText("").insertBefore(b)}h.setStartBefore(b);
-b.remove();if(a){if(m){o.moveStart("character",-1);o.select();h.document.$.selection.clear()}else o.select();h.moveToPosition(p,CKEDITOR.POSITION_BEFORE_START);p.remove()}else{h.setEndBefore(g);g.remove();o.select()}}else{g=this.getNative();if(!g)return;this.removeAllRanges();for(o=0;o<a.length;o++){if(o<a.length-1){m=a[o];p=a[o+1];j=m.clone();j.setStart(m.endContainer,m.endOffset);j.setEnd(p.startContainer,p.startOffset);if(!j.collapsed){j.shrink(CKEDITOR.NODE_ELEMENT,true);h=j.getCommonAncestor();
-j=j.getEnclosedNode();if(h.isReadOnly()||j&&j.isReadOnly()){p.setStart(m.startContainer,m.startOffset);a.splice(o--,1);continue}}}h=a[o];p=this.document.$.createRange();if(h.collapsed&&CKEDITOR.env.webkit&&c(h)){m=this.root;d(m,false);j=m.getDocument().createText("​");m.setCustomData("cke-fillingChar",j);h.insertNode(j);if((m=j.getNext())&&!j.getPrevious()&&m.type==CKEDITOR.NODE_ELEMENT&&m.getName()=="br"){d(this.root);h.moveToPosition(m,CKEDITOR.POSITION_BEFORE_START)}else h.moveToPosition(j,CKEDITOR.POSITION_AFTER_END)}p.setStart(h.startContainer.$,
-h.startOffset);try{p.setEnd(h.endContainer.$,h.endOffset)}catch(A){if(A.toString().indexOf("NS_ERROR_ILLEGAL_VALUE")>=0){h.collapse(1);p.setEnd(h.endContainer.$,h.endOffset)}else throw A;}g.addRange(p)}}this.reset();this.root.fire("selectionchange")}}},fake:function(a){var b=this.root.editor;this.reset();m(b);var c=this._.cache,d=new CKEDITOR.dom.range(this.root);d.setStartBefore(a);d.setEndAfter(a);c.ranges=new CKEDITOR.dom.rangeList(d);c.selectedElement=c.startElement=a;c.type=CKEDITOR.SELECTION_ELEMENT;
-c.selectedText=c.nativeSel=null;this.isFake=1;this.rev=o++;b._.fakeSelection=this;this.root.fire("selectionchange")},isHidden:function(){var a=this.getCommonAncestor();a&&a.type==CKEDITOR.NODE_TEXT&&(a=a.getParent());return!(!a||!a.data("cke-hidden-sel"))},createBookmarks:function(a){a=this.getRanges().createBookmarks(a);this.isFake&&(a.isFake=1);return a},createBookmarks2:function(a){a=this.getRanges().createBookmarks2(a);this.isFake&&(a.isFake=1);return a},selectBookmarks:function(a){for(var b=
-[],c=0;c<a.length;c++){var d=new CKEDITOR.dom.range(this.root);d.moveToBookmark(a[c]);b.push(d)}a.isFake?this.fake(b[0].getEnclosedNode()):this.selectRanges(b);return this},getCommonAncestor:function(){var a=this.getRanges();return!a.length?null:a[0].startContainer.getCommonAncestor(a[a.length-1].endContainer)},scrollIntoView:function(){this.type!=CKEDITOR.SELECTION_NONE&&this.getRanges()[0].scrollIntoView()},removeAllRanges:function(){if(this.getType()!=CKEDITOR.SELECTION_NONE){var a=this.getNative();
-try{a&&a[w?"empty":"removeAllRanges"]()}catch(b){}this.reset()}}}})();"use strict";CKEDITOR.STYLE_BLOCK=1;CKEDITOR.STYLE_INLINE=2;CKEDITOR.STYLE_OBJECT=3;
-(function(){function a(a,b){for(var c,d;a=a.getParent();){if(a.equals(b))break;if(a.getAttribute("data-nostyle"))c=a;else if(!d){var e=a.getAttribute("contentEditable");e=="false"?c=a:e=="true"&&(d=1)}}return c}function e(b){var d=b.document;if(b.collapsed){d=o(this,d);b.insertNode(d);b.moveToPosition(d,CKEDITOR.POSITION_BEFORE_END)}else{var f=this.element,g=this._.definition,h,j=g.ignoreReadonly,i=j||g.includeReadonly;i==null&&(i=b.root.getCustomData("cke_includeReadonly"));var k=CKEDITOR.dtd[f];
-if(!k){h=true;k=CKEDITOR.dtd.span}b.enlarge(CKEDITOR.ENLARGE_INLINE,1);b.trim();var n=b.createBookmark(),l=n.startNode,m=n.endNode,p=l,q;if(!j){var t=b.getCommonAncestor(),j=a(l,t),t=a(m,t);j&&(p=j.getNextSourceNode(true));t&&(m=t)}for(p.getPosition(m)==CKEDITOR.POSITION_FOLLOWING&&(p=0);p;){j=false;if(p.equals(m)){p=null;j=true}else{var r=p.type==CKEDITOR.NODE_ELEMENT?p.getName():null,t=r&&p.getAttribute("contentEditable")=="false",u=r&&p.getAttribute("data-nostyle");if(r&&p.data("cke-bookmark")){p=
-p.getNextSourceNode(true);continue}if(t&&i&&CKEDITOR.dtd.$block[r])for(var s=p,w=c(s),x=void 0,F=w.length,M=0,s=F&&new CKEDITOR.dom.range(s.getDocument());M<F;++M){var x=w[M],X=CKEDITOR.filter.instances[x.data("cke-filter")];if(X?X.check(this):1){s.selectNodeContents(x);e.call(this,s)}}w=r?!k[r]||u?0:t&&!i?0:(p.getPosition(m)|Q)==Q&&(!g.childRule||g.childRule(p)):1;if(w)if((w=p.getParent())&&((w.getDtd()||CKEDITOR.dtd.span)[f]||h)&&(!g.parentRule||g.parentRule(w))){if(!q&&(!r||!CKEDITOR.dtd.$removeEmpty[r]||
-(p.getPosition(m)|Q)==Q)){q=b.clone();q.setStartBefore(p)}r=p.type;if(r==CKEDITOR.NODE_TEXT||t||r==CKEDITOR.NODE_ELEMENT&&!p.getChildCount()){for(var r=p,W;(j=!r.getNext(N))&&(W=r.getParent(),k[W.getName()])&&(W.getPosition(l)|J)==J&&(!g.childRule||g.childRule(W));)r=W;q.setEndAfter(r)}}else j=true;else j=true;p=p.getNextSourceNode(u||t)}if(j&&q&&!q.collapsed){for(var j=o(this,d),t=j.hasAttributes(),u=q.getCommonAncestor(),r={},w={},x={},F={},O,T,R;j&&u;){if(u.getName()==f){for(O in g.attributes)if(!F[O]&&
-(R=u.getAttribute(T)))j.getAttribute(O)==R?w[O]=1:F[O]=1;for(T in g.styles)if(!x[T]&&(R=u.getStyle(T)))j.getStyle(T)==R?r[T]=1:x[T]=1}u=u.getParent()}for(O in w)j.removeAttribute(O);for(T in r)j.removeStyle(T);t&&!j.hasAttributes()&&(j=null);if(j){q.extractContents().appendTo(j);q.insertNode(j);y.call(this,j);j.mergeSiblings();CKEDITOR.env.ie||j.$.normalize()}else{j=new CKEDITOR.dom.element("span");q.extractContents().appendTo(j);q.insertNode(j);y.call(this,j);j.remove(true)}q=null}}b.moveToBookmark(n);
-b.shrink(CKEDITOR.SHRINK_TEXT);b.shrink(CKEDITOR.NODE_ELEMENT,true)}}function b(a){function b(){for(var a=new CKEDITOR.dom.elementPath(d.getParent()),c=new CKEDITOR.dom.elementPath(i.getParent()),e=null,f=null,g=0;g<a.elements.length;g++){var h=a.elements[g];if(h==a.block||h==a.blockLimit)break;p.checkElementRemovable(h)&&(e=h)}for(g=0;g<c.elements.length;g++){h=c.elements[g];if(h==c.block||h==c.blockLimit)break;p.checkElementRemovable(h)&&(f=h)}f&&i.breakParent(f);e&&d.breakParent(e)}a.enlarge(CKEDITOR.ENLARGE_INLINE,
-1);var c=a.createBookmark(),d=c.startNode;if(a.collapsed){for(var e=new CKEDITOR.dom.elementPath(d.getParent(),a.root),f,g=0,h;g<e.elements.length&&(h=e.elements[g]);g++){if(h==e.block||h==e.blockLimit)break;if(this.checkElementRemovable(h)){var j;if(a.collapsed&&(a.checkBoundaryOfElement(h,CKEDITOR.END)||(j=a.checkBoundaryOfElement(h,CKEDITOR.START)))){f=h;f.match=j?"start":"end"}else{h.mergeSiblings();h.is(this.element)?t.call(this,h):n(h,k(this)[h.getName()])}}}if(f){h=d;for(g=0;;g++){j=e.elements[g];
-if(j.equals(f))break;else if(j.match)continue;else j=j.clone();j.append(h);h=j}h[f.match=="start"?"insertBefore":"insertAfter"](f)}}else{var i=c.endNode,p=this;b();for(e=d;!e.equals(i);){f=e.getNextSourceNode();if(e.type==CKEDITOR.NODE_ELEMENT&&this.checkElementRemovable(e)){e.getName()==this.element?t.call(this,e):n(e,k(this)[e.getName()]);if(f.type==CKEDITOR.NODE_ELEMENT&&f.contains(d)){b();f=d.getNext()}}e=f}}a.moveToBookmark(c);a.shrink(CKEDITOR.NODE_ELEMENT,true)}function c(a){var b=[];a.forEach(function(a){if(a.getAttribute("contenteditable")==
-"true"){b.push(a);return false}},CKEDITOR.NODE_ELEMENT,true);return b}function f(a){var b=a.getEnclosedNode()||a.getCommonAncestor(false,true);(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1))&&!a.isReadOnly()&&r(a,this)}function d(a){var b=a.getCommonAncestor(true,true);if(a=(new CKEDITOR.dom.elementPath(b,a.root)).contains(this.element,1)){var b=this._.definition,c=b.attributes;if(c)for(var d in c)a.removeAttribute(d,c[d]);if(b.styles)for(var e in b.styles)b.styles.hasOwnProperty(e)&&
-a.removeStyle(e)}}function g(a){var b=a.createBookmark(true),c=a.createIterator();c.enforceRealBlocks=true;if(this._.enterMode)c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e=a.document,f;d=c.getNextParagraph();)if(!d.isReadOnly()&&(c.activeFilter?c.activeFilter.check(this):1)){f=o(this,e,d);m(d,f)}a.moveToBookmark(b)}function h(a){var b=a.createBookmark(1),c=a.createIterator();c.enforceRealBlocks=true;c.enlargeBr=this._.enterMode!=CKEDITOR.ENTER_BR;for(var d,e;d=c.getNextParagraph();)if(this.checkElementRemovable(d))if(d.is("pre")){(e=
-this._.enterMode==CKEDITOR.ENTER_BR?null:a.document.createElement(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))&&d.copyAttributes(e);m(d,e)}else t.call(this,d);a.moveToBookmark(b)}function m(a,b){var c=!b;if(c){b=a.getDocument().createElement("div");a.copyAttributes(b)}var d=b&&b.is("pre"),e=a.is("pre"),f=!d&&e;if(d&&!e){e=b;(f=a.getBogus())&&f.remove();f=a.getHtml();f=p(f,/(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g,"");f=f.replace(/[ \t\r\n]*(<br[^>]*>)[ \t\r\n]*/gi,"$1");f=f.replace(/([ \t\n\r]+|&nbsp;)/g,
-" ");f=f.replace(/<br\b[^>]*>/gi,"\n");if(CKEDITOR.env.ie){var g=a.getDocument().createElement("div");g.append(e);e.$.outerHTML="<pre>"+f+"</pre>";e.copyAttributes(g.getFirst());e=g.getFirst().remove()}else e.setHtml(f);b=e}else f?b=u(c?[a.getHtml()]:j(a),b):a.moveChildren(b);b.replace(a);if(d){var c=b,h;if((h=c.getPrevious(F))&&h.type==CKEDITOR.NODE_ELEMENT&&h.is("pre")){d=p(h.getHtml(),/\n$/,"")+"\n\n"+p(c.getHtml(),/^\n/,"");CKEDITOR.env.ie?c.$.outerHTML="<pre>"+d+"</pre>":c.setHtml(d);h.remove()}}else c&&
-w(b)}function j(a){var b=[];p(a.getOuterHtml(),/(\S\s*)\n(?:\s|(<span[^>]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi,function(a,b,c){return b+"</pre>"+c+"<pre>"}).replace(/<pre\b.*?>([\s\S]*?)<\/pre>/gi,function(a,c){b.push(c)});return b}function p(a,b,c){var d="",e="",a=a.replace(/(^<span[^>]+data-cke-bookmark.*?\/span>)|(<span[^>]+data-cke-bookmark.*?\/span>$)/gi,function(a,b,c){b&&(d=b);c&&(e=c);return""});return d+a.replace(b,c)+e}function u(a,b){var c;a.length>1&&(c=new CKEDITOR.dom.documentFragment(b.getDocument()));
-for(var d=0;d<a.length;d++){var e=a[d],e=e.replace(/(\r\n|\r)/g,"\n"),e=p(e,/^[ \t]*\n/,""),e=p(e,/\n$/,""),e=p(e,/^[ \t]+|[ \t]+$/g,function(a,b){return a.length==1?"&nbsp;":b?" "+CKEDITOR.tools.repeat("&nbsp;",a.length-1):CKEDITOR.tools.repeat("&nbsp;",a.length-1)+" "}),e=e.replace(/\n/g,"<br>"),e=e.replace(/[ \t]{2,}/g,function(a){return CKEDITOR.tools.repeat("&nbsp;",a.length-1)+" "});if(c){var f=b.clone();f.setHtml(e);c.append(f)}else b.setHtml(e)}return c||b}function t(a,b){var c=this._.definition,
-d=c.attributes,c=c.styles,e=k(this)[a.getName()],f=CKEDITOR.tools.isEmpty(d)&&CKEDITOR.tools.isEmpty(c),g;for(g in d)if(!((g=="class"||this._.definition.fullMatch)&&a.getAttribute(g)!=l(g,d[g]))&&!(b&&g.slice(0,5)=="data-")){f=a.hasAttribute(g);a.removeAttribute(g)}for(var h in c)if(!(this._.definition.fullMatch&&a.getStyle(h)!=l(h,c[h],true))){f=f||!!a.getStyle(h);a.removeStyle(h)}n(a,e,x[a.getName()]);f&&(this._.definition.alwaysRemoveElement?w(a,1):!CKEDITOR.dtd.$block[a.getName()]||this._.enterMode==
-CKEDITOR.ENTER_BR&&!a.hasAttributes()?w(a):a.renameNode(this._.enterMode==CKEDITOR.ENTER_P?"p":"div"))}function y(a){for(var b=k(this),c=a.getElementsByTag(this.element),d,e=c.count();--e>=0;){d=c.getItem(e);d.isReadOnly()||t.call(this,d,true)}for(var f in b)if(f!=this.element){c=a.getElementsByTag(f);for(e=c.count()-1;e>=0;e--){d=c.getItem(e);d.isReadOnly()||n(d,b[f])}}}function n(a,b,c){if(b=b&&b.attributes)for(var d=0;d<b.length;d++){var e=b[d][0],f;if(f=a.getAttribute(e)){var g=b[d][1];(g===null||
-g.test&&g.test(f)||typeof g=="string"&&f==g)&&a.removeAttribute(e)}}c||w(a)}function w(a,b){if(!a.hasAttributes()||b)if(CKEDITOR.dtd.$block[a.getName()]){var c=a.getPrevious(F),d=a.getNext(F);c&&(c.type==CKEDITOR.NODE_TEXT||!c.isBlockBoundary({br:1}))&&a.append("br",1);d&&(d.type==CKEDITOR.NODE_TEXT||!d.isBlockBoundary({br:1}))&&a.append("br");a.remove(true)}else{c=a.getFirst();d=a.getLast();a.remove(true);if(c){c.type==CKEDITOR.NODE_ELEMENT&&c.mergeSiblings();d&&(!c.equals(d)&&d.type==CKEDITOR.NODE_ELEMENT)&&
-d.mergeSiblings()}}}function o(a,b,c){var d;d=a.element;d=="*"&&(d="span");d=new CKEDITOR.dom.element(d,b);c&&c.copyAttributes(d);d=r(d,a);b.getCustomData("doc_processing_style")&&d.hasAttribute("id")?d.removeAttribute("id"):b.setCustomData("doc_processing_style",1);return d}function r(a,b){var c=b._.definition,d=c.attributes,c=CKEDITOR.style.getStyleText(c);if(d)for(var e in d)a.setAttribute(e,d[e]);c&&a.setAttribute("style",c);return a}function i(a,b){for(var c in a)a[c]=a[c].replace(R,function(a,
-c){return b[c]})}function k(a){if(a._.overrides)return a._.overrides;var b=a._.overrides={},c=a._.definition.overrides;if(c){CKEDITOR.tools.isArray(c)||(c=[c]);for(var d=0;d<c.length;d++){var e=c[d],f,g;if(typeof e=="string")f=e.toLowerCase();else{f=e.element?e.element.toLowerCase():a.element;g=e.attributes}e=b[f]||(b[f]={});if(g){var e=e.attributes=e.attributes||[],h;for(h in g)e.push([h.toLowerCase(),g[h]])}}}return b}function l(a,b,c){var d=new CKEDITOR.dom.element("span");d[c?"setStyle":"setAttribute"](a,
-b);return d[c?"getStyle":"getAttribute"](a)}function q(a,b,c){for(var d=a.document,e=a.getRanges(),b=b?this.removeFromRange:this.applyToRange,f,g=e.createIterator();f=g.getNextRange();)b.call(this,f,c);a.selectRanges(e);d.removeCustomData("doc_processing_style")}var x={address:1,div:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,section:1,header:1,footer:1,nav:1,article:1,aside:1,figure:1,dialog:1,hgroup:1,time:1,meter:1,menu:1,command:1,keygen:1,output:1,progress:1,details:1,datagrid:1,datalist:1},s=
-{a:1,blockquote:1,embed:1,hr:1,img:1,li:1,object:1,ol:1,table:1,td:1,tr:1,th:1,ul:1,dl:1,dt:1,dd:1,form:1,audio:1,video:1},M=/\s*(?:;\s*|$)/,R=/#\((.+?)\)/g,N=CKEDITOR.dom.walker.bookmark(0,1),F=CKEDITOR.dom.walker.whitespaces(1);CKEDITOR.style=function(a,b){if(typeof a.type=="string")return new CKEDITOR.style.customHandlers[a.type](a);var c=a.attributes;if(c&&c.style){a.styles=CKEDITOR.tools.extend({},a.styles,CKEDITOR.tools.parseCssText(c.style));delete c.style}if(b){a=CKEDITOR.tools.clone(a);i(a.attributes,
-b);i(a.styles,b)}c=this.element=a.element?typeof a.element=="string"?a.element.toLowerCase():a.element:"*";this.type=a.type||(x[c]?CKEDITOR.STYLE_BLOCK:s[c]?CKEDITOR.STYLE_OBJECT:CKEDITOR.STYLE_INLINE);if(typeof this.element=="object")this.type=CKEDITOR.STYLE_OBJECT;this._={definition:a}};CKEDITOR.style.prototype={apply:function(a){if(a instanceof CKEDITOR.dom.document)return q.call(this,a.getSelection());if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode;
-q.call(this,a.getSelection(),0,a);this._.enterMode=b}},remove:function(a){if(a instanceof CKEDITOR.dom.document)return q.call(this,a.getSelection(),1);if(this.checkApplicable(a.elementPath(),a)){var b=this._.enterMode;if(!b)this._.enterMode=a.activeEnterMode;q.call(this,a.getSelection(),1,a);this._.enterMode=b}},applyToRange:function(a){this.applyToRange=this.type==CKEDITOR.STYLE_INLINE?e:this.type==CKEDITOR.STYLE_BLOCK?g:this.type==CKEDITOR.STYLE_OBJECT?f:null;return this.applyToRange(a)},removeFromRange:function(a){this.removeFromRange=
-this.type==CKEDITOR.STYLE_INLINE?b:this.type==CKEDITOR.STYLE_BLOCK?h:this.type==CKEDITOR.STYLE_OBJECT?d:null;return this.removeFromRange(a)},applyToObject:function(a){r(a,this)},checkActive:function(a,b){switch(this.type){case CKEDITOR.STYLE_BLOCK:return this.checkElementRemovable(a.block||a.blockLimit,true,b);case CKEDITOR.STYLE_OBJECT:case CKEDITOR.STYLE_INLINE:for(var c=a.elements,d=0,e;d<c.length;d++){e=c[d];if(!(this.type==CKEDITOR.STYLE_INLINE&&(e==a.block||e==a.blockLimit))){if(this.type==
-CKEDITOR.STYLE_OBJECT){var f=e.getName();if(!(typeof this.element=="string"?f==this.element:f in this.element))continue}if(this.checkElementRemovable(e,true,b))return true}}}return false},checkApplicable:function(a,b,c){b&&b instanceof CKEDITOR.filter&&(c=b);if(c&&!c.check(this))return false;switch(this.type){case CKEDITOR.STYLE_OBJECT:return!!a.contains(this.element);case CKEDITOR.STYLE_BLOCK:return!!a.blockLimit.getDtd()[this.element]}return true},checkElementMatch:function(a,b){var c=this._.definition;
-if(!a||!c.ignoreReadonly&&a.isReadOnly())return false;var d=a.getName();if(typeof this.element=="string"?d==this.element:d in this.element){if(!b&&!a.hasAttributes())return true;if(d=c._AC)c=d;else{var d={},e=0,f=c.attributes;if(f)for(var g in f){e++;d[g]=f[g]}if(g=CKEDITOR.style.getStyleText(c)){d.style||e++;d.style=g}d._length=e;c=c._AC=d}if(c._length){for(var h in c)if(h!="_length"){e=a.getAttribute(h)||"";if(h=="style")a:{d=c[h];typeof d=="string"&&(d=CKEDITOR.tools.parseCssText(d));typeof e==
-"string"&&(e=CKEDITOR.tools.parseCssText(e,true));g=void 0;for(g in d)if(!(g in e&&(e[g]==d[g]||d[g]=="inherit"||e[g]=="inherit"))){d=false;break a}d=true}else d=c[h]==e;if(d){if(!b)return true}else if(b)return false}if(b)return true}else return true}return false},checkElementRemovable:function(a,b,c){if(this.checkElementMatch(a,b,c))return true;if(b=k(this)[a.getName()]){var d;if(!(b=b.attributes))return true;for(c=0;c<b.length;c++){d=b[c][0];if(d=a.getAttribute(d)){var e=b[c][1];if(e===null||typeof e==
-"string"&&d==e||e.test(d))return true}}}return false},buildPreview:function(a){var b=this._.definition,c=[],d=b.element;d=="bdo"&&(d="span");var c=["<",d],e=b.attributes;if(e)for(var f in e)c.push(" ",f,'="',e[f],'"');(e=CKEDITOR.style.getStyleText(b))&&c.push(' style="',e,'"');c.push(">",a||b.name,"</",d,">");return c.join("")},getDefinition:function(){return this._.definition}};CKEDITOR.style.getStyleText=function(a){var b=a._ST;if(b)return b;var b=a.styles,c=a.attributes&&a.attributes.style||"",
-d="";c.length&&(c=c.replace(M,";"));for(var e in b){var f=b[e],g=(e+":"+f).replace(M,";");f=="inherit"?d=d+g:c=c+g}c.length&&(c=CKEDITOR.tools.normalizeCssText(c,true));return a._ST=c+d};CKEDITOR.style.customHandlers={};CKEDITOR.style.addCustomHandler=function(a){var b=function(a){this._={definition:a};this.setup&&this.setup(a)};b.prototype=CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype),{assignedTo:CKEDITOR.STYLE_OBJECT},a,true);return this.customHandlers[a.type]=b};
-var Q=CKEDITOR.POSITION_PRECEDING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED,J=CKEDITOR.POSITION_FOLLOWING|CKEDITOR.POSITION_IDENTICAL|CKEDITOR.POSITION_IS_CONTAINED})();CKEDITOR.styleCommand=function(a,e){this.requiredContent=this.allowedContent=this.style=a;CKEDITOR.tools.extend(this,e,true)};CKEDITOR.styleCommand.prototype.exec=function(a){a.focus();this.state==CKEDITOR.TRISTATE_OFF?a.applyStyle(this.style):this.state==CKEDITOR.TRISTATE_ON&&a.removeStyle(this.style)};
-CKEDITOR.stylesSet=new CKEDITOR.resourceManager("","stylesSet");CKEDITOR.addStylesSet=CKEDITOR.tools.bind(CKEDITOR.stylesSet.add,CKEDITOR.stylesSet);CKEDITOR.loadStylesSet=function(a,e,b){CKEDITOR.stylesSet.addExternal(a,e,"");CKEDITOR.stylesSet.load(a,b)};
-CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{attachStyleStateChange:function(a,e){var b=this._.styleStateChangeCallbacks;if(!b){b=this._.styleStateChangeCallbacks=[];this.on("selectionChange",function(a){for(var e=0;e<b.length;e++){var d=b[e],g=d.style.checkActive(a.data.path,this)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF;d.fn.call(this,g)}})}b.push({style:a,fn:e})},applyStyle:function(a){a.apply(this)},removeStyle:function(a){a.remove(this)},getStylesSet:function(a){if(this._.stylesDefinitions)a(this._.stylesDefinitions);
-else{var e=this,b=e.config.stylesCombo_stylesSet||e.config.stylesSet;if(b===false)a(null);else if(b instanceof Array){e._.stylesDefinitions=b;a(b)}else{b||(b="default");var b=b.split(":"),c=b[0];CKEDITOR.stylesSet.addExternal(c,b[1]?b.slice(1).join(":"):CKEDITOR.getUrl("styles.js"),"");CKEDITOR.stylesSet.load(c,function(b){e._.stylesDefinitions=b[c];a(e._.stylesDefinitions)})}}}});
-CKEDITOR.dom.comment=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createComment(a));CKEDITOR.dom.domObject.call(this,a)};CKEDITOR.dom.comment.prototype=new CKEDITOR.dom.node;CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype,{type:CKEDITOR.NODE_COMMENT,getOuterHtml:function(){return"<\!--"+this.$.nodeValue+"--\>"}});"use strict";
-(function(){var a={},e={},b;for(b in CKEDITOR.dtd.$blockLimit)b in CKEDITOR.dtd.$list||(a[b]=1);for(b in CKEDITOR.dtd.$block)b in CKEDITOR.dtd.$blockLimit||b in CKEDITOR.dtd.$empty||(e[b]=1);CKEDITOR.dom.elementPath=function(b,f){var d=null,g=null,h=[],m=b,j,f=f||b.getDocument().getBody();do if(m.type==CKEDITOR.NODE_ELEMENT){h.push(m);if(!this.lastElement){this.lastElement=m;if(m.is(CKEDITOR.dtd.$object)||m.getAttribute("contenteditable")=="false")continue}if(m.equals(f))break;if(!g){j=m.getName();
-m.getAttribute("contenteditable")=="true"?g=m:!d&&e[j]&&(d=m);if(a[j]){var p;if(p=!d){if(j=j=="div"){a:{j=m.getChildren();p=0;for(var u=j.count();p<u;p++){var t=j.getItem(p);if(t.type==CKEDITOR.NODE_ELEMENT&&CKEDITOR.dtd.$block[t.getName()]){j=true;break a}}j=false}j=!j}p=j}p?d=m:g=m}}}while(m=m.getParent());g||(g=f);this.block=d;this.blockLimit=g;this.root=f;this.elements=h}})();
-CKEDITOR.dom.elementPath.prototype={compare:function(a){var e=this.elements,a=a&&a.elements;if(!a||e.length!=a.length)return false;for(var b=0;b<e.length;b++)if(!e[b].equals(a[b]))return false;return true},contains:function(a,e,b){var c;typeof a=="string"&&(c=function(b){return b.getName()==a});a instanceof CKEDITOR.dom.element?c=function(b){return b.equals(a)}:CKEDITOR.tools.isArray(a)?c=function(b){return CKEDITOR.tools.indexOf(a,b.getName())>-1}:typeof a=="function"?c=a:typeof a=="object"&&(c=
-function(b){return b.getName()in a});var f=this.elements,d=f.length;e&&d--;if(b){f=Array.prototype.slice.call(f,0);f.reverse()}for(e=0;e<d;e++)if(c(f[e]))return f[e];return null},isContextFor:function(a){var e;if(a in CKEDITOR.dtd.$block){e=this.contains(CKEDITOR.dtd.$intermediate)||this.root.equals(this.block)&&this.block||this.blockLimit;return!!e.getDtd()[a]}return true},direction:function(){return(this.block||this.blockLimit||this.root).getDirection(1)}};
-CKEDITOR.dom.text=function(a,e){typeof a=="string"&&(a=(e?e.$:document).createTextNode(a));this.$=a};CKEDITOR.dom.text.prototype=new CKEDITOR.dom.node;
-CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype,{type:CKEDITOR.NODE_TEXT,getLength:function(){return this.$.nodeValue.length},getText:function(){return this.$.nodeValue},setText:function(a){this.$.nodeValue=a},split:function(a){var e=this.$.parentNode,b=e.childNodes.length,c=this.getLength(),f=this.getDocument(),d=new CKEDITOR.dom.text(this.$.splitText(a),f);if(e.childNodes.length==b)if(a>=c){d=f.createText("");d.insertAfter(this)}else{a=f.createText("");a.insertAfter(d);a.remove()}return d},substring:function(a,
-e){return typeof e!="number"?this.$.nodeValue.substr(a):this.$.nodeValue.substring(a,e)}});
-(function(){function a(a,c,e){var d=a.serializable,g=c[e?"endContainer":"startContainer"],h=e?"endOffset":"startOffset",m=d?c.document.getById(a.startNode):a.startNode,a=d?c.document.getById(a.endNode):a.endNode;if(g.equals(m.getPrevious())){c.startOffset=c.startOffset-g.getLength()-a.getPrevious().getLength();g=a.getNext()}else if(g.equals(a.getPrevious())){c.startOffset=c.startOffset-g.getLength();g=a.getNext()}g.equals(m.getParent())&&c[h]++;g.equals(a.getParent())&&c[h]++;c[e?"endContainer":"startContainer"]=
-g;return c}CKEDITOR.dom.rangeList=function(a){if(a instanceof CKEDITOR.dom.rangeList)return a;a?a instanceof CKEDITOR.dom.range&&(a=[a]):a=[];return CKEDITOR.tools.extend(a,e)};var e={createIterator:function(){var a=this,c=CKEDITOR.dom.walker.bookmark(),e=[],d;return{getNextRange:function(g){d=d===void 0?0:d+1;var h=a[d];if(h&&a.length>1){if(!d)for(var m=a.length-1;m>=0;m--)e.unshift(a[m].createBookmark(true));if(g)for(var j=0;a[d+j+1];){for(var p=h.document,g=0,m=p.getById(e[j].endNode),p=p.getById(e[j+
-1].startNode);;){m=m.getNextSourceNode(false);if(p.equals(m))g=1;else if(c(m)||m.type==CKEDITOR.NODE_ELEMENT&&m.isBlockBoundary())continue;break}if(!g)break;j++}for(h.moveToBookmark(e.shift());j--;){m=a[++d];m.moveToBookmark(e.shift());h.setEnd(m.endContainer,m.endOffset)}}return h}}},createBookmarks:function(b){for(var c=[],e,d=0;d<this.length;d++){c.push(e=this[d].createBookmark(b,true));for(var g=d+1;g<this.length;g++){this[g]=a(e,this[g]);this[g]=a(e,this[g],true)}}return c},createBookmarks2:function(a){for(var c=
-[],e=0;e<this.length;e++)c.push(this[e].createBookmark2(a));return c},moveToBookmarks:function(a){for(var c=0;c<this.length;c++)this[c].moveToBookmark(a[c])}}})();
-(function(){function a(){return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1]||"skins/"+CKEDITOR.skinName.split(",")[0]+"/")}function e(b){var c=CKEDITOR.skin["ua_"+b],d=CKEDITOR.env;if(c)for(var c=c.split(",").sort(function(a,b){return a>b?-1:1}),e=0,f;e<c.length;e++){f=c[e];if(d.ie&&(f.replace(/^ie/,"")==d.version||d.quirks&&f=="iequirks"))f="ie";if(d[f]){b=b+("_"+c[e]);break}}return CKEDITOR.getUrl(a()+b+".css")}function b(a,b){if(!d[a]){CKEDITOR.document.appendStyleSheet(e(a));d[a]=1}b&&b()}
-function c(a){var b=a.getById(g);if(!b){b=a.getHead().append("style");b.setAttribute("id",g);b.setAttribute("type","text/css")}return b}function f(a,b,c){var d,e,f;if(CKEDITOR.env.webkit){b=b.split("}").slice(0,-1);for(e=0;e<b.length;e++)b[e]=b[e].split("{")}for(var g=0;g<a.length;g++)if(CKEDITOR.env.webkit)for(e=0;e<b.length;e++){f=b[e][1];for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);a[g].$.sheet.addRule(b[e][0],f)}else{f=b;for(d=0;d<c.length;d++)f=f.replace(c[d][0],c[d][1]);CKEDITOR.env.ie&&
-CKEDITOR.env.version<11?a[g].$.styleSheet.cssText=a[g].$.styleSheet.cssText+f:a[g].$.innerHTML=a[g].$.innerHTML+f}}var d={};CKEDITOR.skin={path:a,loadPart:function(c,d){CKEDITOR.skin.name!=CKEDITOR.skinName.split(",")[0]?CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a()+"skin.js"),function(){b(c,d)}):b(c,d)},getPath:function(a){return CKEDITOR.getUrl(e(a))},icons:{},addIcon:function(a,b,c,d){a=a.toLowerCase();this.icons[a]||(this.icons[a]={path:b,offset:c||0,bgsize:d||"16px"})},getIconStyle:function(a,
-b,c,d,e){var f;if(a){a=a.toLowerCase();b&&(f=this.icons[a+"-rtl"]);f||(f=this.icons[a])}a=c||f&&f.path||"";d=d||f&&f.offset;e=e||f&&f.bgsize||"16px";return a&&"background-image:url("+CKEDITOR.getUrl(a)+");background-position:0 "+d+"px;background-size:"+e+";"}};CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{getUiColor:function(){return this.uiColor},setUiColor:function(a){var b=c(CKEDITOR.document);return(this.setUiColor=function(a){var c=CKEDITOR.skin.chameleon,d=[[m,a]];this.uiColor=a;f([b],c(this,
-"editor"),d);f(h,c(this,"panel"),d)}).call(this,a)}});var g="cke_ui_color",h=[],m=/\$color/g;CKEDITOR.on("instanceLoaded",function(a){if(!CKEDITOR.env.ie||!CKEDITOR.env.quirks){var b=a.editor,a=function(a){a=(a.data[0]||a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument();if(!a.getById("cke_ui_color")){a=c(a);h.push(a);var d=b.getUiColor();d&&f([a],CKEDITOR.skin.chameleon(b,"panel"),[[m,d]])}};b.on("panelShow",a);b.on("menuShow",a);b.config.uiColor&&b.setUiColor(b.config.uiColor)}})})();
-(function(){if(CKEDITOR.env.webkit)CKEDITOR.env.hc=false;else{var a=CKEDITOR.dom.element.createFromHtml('<div style="width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"></div>',CKEDITOR.document);a.appendTo(CKEDITOR.document.getHead());try{var e=a.getComputedStyle("border-top-color"),b=a.getComputedStyle("border-right-color");CKEDITOR.env.hc=!!(e&&e==b)}catch(c){CKEDITOR.env.hc=false}a.remove()}if(CKEDITOR.env.hc)CKEDITOR.env.cssClass=CKEDITOR.env.cssClass+" cke_hc";
-CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}");CKEDITOR.status="loaded";CKEDITOR.fireOnce("loaded");if(a=CKEDITOR._.pending){delete CKEDITOR._.pending;for(e=0;e<a.length;e++){CKEDITOR.editor.prototype.constructor.apply(a[e][0],a[e][1]);CKEDITOR.add(a[e][0])}}})();/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.skin.name="moono";CKEDITOR.skin.ua_editor="ie,iequirks,ie7,ie8,gecko";CKEDITOR.skin.ua_dialog="ie,iequirks,ie7,ie8";
-CKEDITOR.skin.chameleon=function(){var b=function(){return function(b,e){for(var a=b.match(/[^#]./g),c=0;3>c;c++){var f=a,h=c,d;d=parseInt(a[c],16);d=("0"+(0>e?0|d*(1+e):0|d+(255-d)*e).toString(16)).slice(-2);f[h]=d}return"#"+a.join("")}}(),c=function(){var b=new CKEDITOR.template("background:#{to};background-image:-webkit-gradient(linear,lefttop,leftbottom,from({from}),to({to}));background-image:-moz-linear-gradient(top,{from},{to});background-image:-webkit-linear-gradient(top,{from},{to});background-image:-o-linear-gradient(top,{from},{to});background-image:-ms-linear-gradient(top,{from},{to});background-image:linear-gradient(top,{from},{to});filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='{from}',endColorstr='{to}');");return function(c,
-a){return b.output({from:c,to:a})}}(),f={editor:new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ {defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_bottom [{defaultGradient}border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [{defaultGradient}border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [{defaultGradient}outline-color:{defaultBorder};border-top-color:{defaultBorder};] {id} .cke_dialog_tab [{lightGradient}border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [{mediumGradient}] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} .cke_toolgroup [{lightGradient}border-color:{defaultBorder};] {id} a.cke_button_off:hover, {id} a.cke_button_off:focus, {id} a.cke_button_off:active [{mediumGradient}] {id} .cke_button_on [{ckeButtonOn}] {id} .cke_toolbar_separator [background-color: {ckeToolbarSeparator};] {id} .cke_combo_button [border-color:{defaultBorder};{lightGradient}] {id} a.cke_combo_button:hover, {id} a.cke_combo_button:focus, {id} .cke_combo_on a.cke_combo_button [border-color:{defaultBorder};{mediumGradient}] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover, {id} a.cke_path_item:focus, {id} a.cke_path_item:active [background-color:{elementsPathBg};] {id}.cke_panel [border-color:{defaultBorder};] "),
-panel:new CKEDITOR.template(".cke_panel_grouptitle [{lightGradient}border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:focus.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:focus.cke_colorauto, a:focus.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ")};
-return function(g,e){var a=g.uiColor,a={id:"."+g.id,defaultBorder:b(a,-0.1),defaultGradient:c(b(a,0.9),a),lightGradient:c(b(a,1),b(a,0.7)),mediumGradient:c(b(a,0.8),b(a,0.5)),ckeButtonOn:c(b(a,0.6),b(a,0.7)),ckeResizer:b(a,-0.4),ckeToolbarSeparator:b(a,0.5),ckeColorauto:b(a,0.8),dialogBody:b(a,0.7),dialogTabSelected:c("#FFFFFF","#FFFFFF"),dialogTabSelectedBorder:"#FFF",elementsPathColor:b(a,-0.6),elementsPathBg:a,menubuttonIcon:b(a,0.5),menubuttonIconHover:b(a,0.3)};return f[e].output(a).replace(/\[/g,
-"{").replace(/\]/g,"}")}}();CKEDITOR.plugins.add("dialogui",{onLoad:function(){var h=function(b){this._||(this._={});this._["default"]=this._.initValue=b["default"]||"";this._.required=b.required||!1;for(var a=[this._],d=1;d<arguments.length;d++)a.push(arguments[d]);a.push(!0);CKEDITOR.tools.extend.apply(CKEDITOR.tools,a);return this._},r={build:function(b,a,d){return new CKEDITOR.ui.dialog.textInput(b,a,d)}},l={build:function(b,a,d){return new CKEDITOR.ui.dialog[a.type](b,a,d)}},n={isChanged:function(){return this.getValue()!=
-this.getInitValue()},reset:function(b){this.setValue(this.getInitValue(),b)},setInitValue:function(){this._.initValue=this.getValue()},resetInitValue:function(){this._.initValue=this._["default"]},getInitValue:function(){return this._.initValue}},o=CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onChange:function(b,a){this._.domOnChangeRegistered||(b.on("load",function(){this.getInputElement().on("change",function(){b.parts.dialog.isVisible()&&this.fire("change",{value:this.getValue()})},
-this)},this),this._.domOnChangeRegistered=!0);this.on("change",a)}},!0),s=/^on([A-Z]\w+)/,p=function(b){for(var a in b)(s.test(a)||"title"==a||"type"==a)&&delete b[a];return b};CKEDITOR.tools.extend(CKEDITOR.ui.dialog,{labeledElement:function(b,a,d,f){if(!(4>arguments.length)){var c=h.call(this,a);c.labelId=CKEDITOR.tools.getNextId()+"_label";this._.children=[];var e={role:a.role||"presentation"};a.includeLabel&&(e["aria-labelledby"]=c.labelId);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"div",null,
-e,function(){var e=[],g=a.required?" cke_required":"";if(a.labelLayout!="horizontal")e.push('<label class="cke_dialog_ui_labeled_label'+g+'" ',' id="'+c.labelId+'"',c.inputId?' for="'+c.inputId+'"':"",(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",a.label,"</label>",'<div class="cke_dialog_ui_labeled_content"',a.controlStyle?' style="'+a.controlStyle+'"':"",' role="presentation">',f.call(this,b,a),"</div>");else{g={type:"hbox",widths:a.widths,padding:0,children:[{type:"html",html:'<label class="cke_dialog_ui_labeled_label'+
-g+'" id="'+c.labelId+'" for="'+c.inputId+'"'+(a.labelStyle?' style="'+a.labelStyle+'"':"")+">"+CKEDITOR.tools.htmlEncode(a.label)+"</span>"},{type:"html",html:'<span class="cke_dialog_ui_labeled_content"'+(a.controlStyle?' style="'+a.controlStyle+'"':"")+">"+f.call(this,b,a)+"</span>"}]};CKEDITOR.dialog._.uiElementBuilders.hbox.build(b,g,e)}return e.join("")})}},textInput:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this._.inputId=CKEDITOR.tools.getNextId()+"_textInput",c={"class":"cke_dialog_ui_input_"+
-a.type,id:f,type:a.type};a.validate&&(this.validate=a.validate);a.maxLength&&(c.maxlength=a.maxLength);a.size&&(c.size=a.size);a.inputStyle&&(c.style=a.inputStyle);var e=this,k=!1;b.on("load",function(){e.getInputElement().on("keydown",function(a){a.data.getKeystroke()==13&&(k=true)});e.getInputElement().on("keyup",function(a){if(a.data.getKeystroke()==13&&k){b.getButton("ok")&&setTimeout(function(){b.getButton("ok").click()},0);k=false}},null,null,1E3)});CKEDITOR.ui.dialog.labeledElement.call(this,
-b,a,d,function(){var b=['<div class="cke_dialog_ui_input_',a.type,'" role="presentation"'];a.width&&b.push('style="width:'+a.width+'" ');b.push("><input ");c["aria-labelledby"]=this._.labelId;this._.required&&(c["aria-required"]=this._.required);for(var e in c)b.push(e+'="'+c[e]+'" ');b.push(" /></div>");return b.join("")})}},textarea:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this,c=this._.inputId=CKEDITOR.tools.getNextId()+"_textarea",e={};a.validate&&(this.validate=a.validate);
-e.rows=a.rows||5;e.cols=a.cols||20;e["class"]="cke_dialog_ui_input_textarea "+(a["class"]||"");"undefined"!=typeof a.inputStyle&&(e.style=a.inputStyle);a.dir&&(e.dir=a.dir);CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){e["aria-labelledby"]=this._.labelId;this._.required&&(e["aria-required"]=this._.required);var a=['<div class="cke_dialog_ui_input_textarea" role="presentation"><textarea id="',c,'" '],b;for(b in e)a.push(b+'="'+CKEDITOR.tools.htmlEncode(e[b])+'" ');a.push(">",CKEDITOR.tools.htmlEncode(f._["default"]),
-"</textarea></div>");return a.join("")})}},checkbox:function(b,a,d){if(!(3>arguments.length)){var f=h.call(this,a,{"default":!!a["default"]});a.validate&&(this.validate=a.validate);CKEDITOR.ui.dialog.uiElement.call(this,b,a,d,"span",null,null,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_checkbox":CKEDITOR.tools.getNextId()+"_checkbox"},true),e=[],d=CKEDITOR.tools.getNextId()+"_label",g={"class":"cke_dialog_ui_checkbox_input",type:"checkbox","aria-labelledby":d};p(c);if(a["default"])g.checked=
-"checked";if(typeof c.inputStyle!="undefined")c.style=c.inputStyle;f.checkbox=new CKEDITOR.ui.dialog.uiElement(b,c,e,"input",null,g);e.push(' <label id="',d,'" for="',g.id,'"'+(a.labelStyle?' style="'+a.labelStyle+'"':"")+">",CKEDITOR.tools.htmlEncode(a.label),"</label>");return e.join("")})}},radio:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);this._["default"]||(this._["default"]=this._.initValue=a.items[0][1]);a.validate&&(this.validate=a.valdiate);var f=[],c=this;a.role="radiogroup";
-a.includeLabel=!0;CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){for(var e=[],d=[],g=(a.id?a.id:CKEDITOR.tools.getNextId())+"_radio",i=0;i<a.items.length;i++){var j=a.items[i],h=j[2]!==void 0?j[2]:j[0],l=j[1]!==void 0?j[1]:j[0],m=CKEDITOR.tools.getNextId()+"_radio_input",n=m+"_label",m=CKEDITOR.tools.extend({},a,{id:m,title:null,type:null},true),h=CKEDITOR.tools.extend({},m,{title:h},true),o={type:"radio","class":"cke_dialog_ui_radio_input",name:g,value:l,"aria-labelledby":n},q=[];if(c._["default"]==
-l)o.checked="checked";p(m);p(h);if(typeof m.inputStyle!="undefined")m.style=m.inputStyle;m.keyboardFocusable=true;f.push(new CKEDITOR.ui.dialog.uiElement(b,m,q,"input",null,o));q.push(" ");new CKEDITOR.ui.dialog.uiElement(b,h,q,"label",null,{id:n,"for":o.id},j[0]);e.push(q.join(""))}new CKEDITOR.ui.dialog.hbox(b,f,e,d);return d.join("")});this._.children=f}},button:function(b,a,d){if(arguments.length){"function"==typeof a&&(a=a(b.getParentEditor()));h.call(this,a,{disabled:a.disabled||!1});CKEDITOR.event.implementOn(this);
-var f=this;b.on("load",function(){var a=this.getElement();(function(){a.on("click",function(a){f.click();a.data.preventDefault()});a.on("keydown",function(a){a.data.getKeystroke()in{32:1}&&(f.click(),a.data.preventDefault())})})();a.unselectable()},this);var c=CKEDITOR.tools.extend({},a);delete c.style;var e=CKEDITOR.tools.getNextId()+"_label";CKEDITOR.ui.dialog.uiElement.call(this,b,c,d,"a",null,{style:a.style,href:"javascript:void(0)",title:a.label,hidefocus:"true","class":a["class"],role:"button",
-"aria-labelledby":e},'<span id="'+e+'" class="cke_dialog_ui_button">'+CKEDITOR.tools.htmlEncode(a.label)+"</span>")}},select:function(b,a,d){if(!(3>arguments.length)){var f=h.call(this,a);a.validate&&(this.validate=a.validate);f.inputId=CKEDITOR.tools.getNextId()+"_select";CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){var c=CKEDITOR.tools.extend({},a,{id:a.id?a.id+"_select":CKEDITOR.tools.getNextId()+"_select"},true),e=[],d=[],g={id:f.inputId,"class":"cke_dialog_ui_input_select","aria-labelledby":this._.labelId};
-e.push('<div class="cke_dialog_ui_input_',a.type,'" role="presentation"');a.width&&e.push('style="width:'+a.width+'" ');e.push(">");if(a.size!=void 0)g.size=a.size;if(a.multiple!=void 0)g.multiple=a.multiple;p(c);for(var i=0,j;i<a.items.length&&(j=a.items[i]);i++)d.push('<option value="',CKEDITOR.tools.htmlEncode(j[1]!==void 0?j[1]:j[0]).replace(/"/g,"&quot;"),'" /> ',CKEDITOR.tools.htmlEncode(j[0]));if(typeof c.inputStyle!="undefined")c.style=c.inputStyle;f.select=new CKEDITOR.ui.dialog.uiElement(b,
-c,e,"select",null,g,d.join(""));e.push("</div>");return e.join("")})}},file:function(b,a,d){if(!(3>arguments.length)){void 0===a["default"]&&(a["default"]="");var f=CKEDITOR.tools.extend(h.call(this,a),{definition:a,buttons:[]});a.validate&&(this.validate=a.validate);b.on("load",function(){CKEDITOR.document.getById(f.frameId).getParent().addClass("cke_dialog_ui_input_file")});CKEDITOR.ui.dialog.labeledElement.call(this,b,a,d,function(){f.frameId=CKEDITOR.tools.getNextId()+"_fileInput";var b=['<iframe frameborder="0" allowtransparency="0" class="cke_dialog_ui_input_file" role="presentation" id="',
-f.frameId,'" title="',a.label,'" src="javascript:void('];b.push(CKEDITOR.env.ie?"(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"})()":"0");b.push(')"></iframe>');return b.join("")})}},fileButton:function(b,a,d){if(!(3>arguments.length)){h.call(this,a);var f=this;a.validate&&(this.validate=a.validate);var c=CKEDITOR.tools.extend({},a),e=c.onClick;c.className=(c.className?c.className+" ":"")+"cke_dialog_ui_button";c.onClick=function(c){var d=
-a["for"];if(!e||e.call(this,c)!==false){b.getContentElement(d[0],d[1]).submit();this.disable()}};b.on("load",function(){b.getContentElement(a["for"][0],a["for"][1])._.buttons.push(f)});CKEDITOR.ui.dialog.button.call(this,b,c,d)}},html:function(){var b=/^\s*<[\w:]+\s+([^>]*)?>/,a=/^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/,d=/\/$/;return function(f,c,e){if(!(3>arguments.length)){var k=[],g=c.html;"<"!=g.charAt(0)&&(g="<span>"+g+"</span>");var i=c.focus;if(i){var j=this.focus;this.focus=function(){("function"==
-typeof i?i:j).call(this);this.fire("focus")};c.isFocusable&&(this.isFocusable=this.isFocusable);this.keyboardFocusable=!0}CKEDITOR.ui.dialog.uiElement.call(this,f,c,k,"span",null,null,"");k=k.join("").match(b);g=g.match(a)||["","",""];d.test(g[1])&&(g[1]=g[1].slice(0,-1),g[2]="/"+g[2]);e.push([g[1]," ",k[1]||"",g[2]].join(""))}}}(),fieldset:function(b,a,d,f,c){var e=c.label;this._={children:a};CKEDITOR.ui.dialog.uiElement.call(this,b,c,f,"fieldset",null,null,function(){var a=[];e&&a.push("<legend"+
-(c.labelStyle?' style="'+c.labelStyle+'"':"")+">"+e+"</legend>");for(var b=0;b<d.length;b++)a.push(d[b]);return a.join("")})}},!0);CKEDITOR.ui.dialog.html.prototype=new CKEDITOR.ui.dialog.uiElement;CKEDITOR.ui.dialog.labeledElement.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setLabel:function(b){var a=CKEDITOR.document.getById(this._.labelId);1>a.getChildCount()?(new CKEDITOR.dom.text(b,CKEDITOR.document)).appendTo(a):a.getChild(0).$.nodeValue=b;return this},getLabel:function(){var b=
-CKEDITOR.document.getById(this._.labelId);return!b||1>b.getChildCount()?"":b.getChild(0).getText()},eventProcessors:o},!0);CKEDITOR.ui.dialog.button.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{click:function(){return!this._.disabled?this.fire("click",{dialog:this._.dialog}):!1},enable:function(){this._.disabled=!1;var b=this.getElement();b&&b.removeClass("cke_disabled")},disable:function(){this._.disabled=!0;this.getElement().addClass("cke_disabled")},isVisible:function(){return this.getElement().getFirst().isVisible()},
-isEnabled:function(){return!this._.disabled},eventProcessors:CKEDITOR.tools.extend({},CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,{onClick:function(b,a){this.on("click",function(){a.apply(this,arguments)})}},!0),accessKeyUp:function(){this.click()},accessKeyDown:function(){this.focus()},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.textInput.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return CKEDITOR.document.getById(this._.inputId)},
-focus:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&a.$.focus()},0)},select:function(){var b=this.selectParentTab();setTimeout(function(){var a=b.getInputElement();a&&(a.$.focus(),a.$.select())},0)},accessKeyUp:function(){this.select()},setValue:function(b){!b&&(b="");return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this,arguments)},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.textarea.prototype=new CKEDITOR.ui.dialog.textInput;CKEDITOR.ui.dialog.select.prototype=
-CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,{getInputElement:function(){return this._.select.getElement()},add:function(b,a,d){var f=new CKEDITOR.dom.element("option",this.getDialog().getParentEditor().document),c=this.getInputElement().$;f.$.text=b;f.$.value=void 0===a||null===a?b:a;void 0===d||null===d?CKEDITOR.env.ie?c.add(f.$):c.add(f.$,null):c.add(f.$,d);return this},remove:function(b){this.getInputElement().$.remove(b);return this},clear:function(){for(var b=this.getInputElement().$;0<
-b.length;)b.remove(0);return this},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.checkbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getInputElement:function(){return this._.checkbox.getElement()},setValue:function(b,a){this.getInputElement().$.checked=b;!a&&this.fire("change",{value:b})},getValue:function(){return this.getInputElement().$.checked},accessKeyUp:function(){this.setValue(!this.getValue())},eventProcessors:{onChange:function(b,a){if(!CKEDITOR.env.ie||8<CKEDITOR.env.version)return o.onChange.apply(this,
-arguments);b.on("load",function(){var a=this._.checkbox.getElement();a.on("propertychange",function(b){b=b.data.$;"checked"==b.propertyName&&this.fire("change",{value:a.$.checked})},this)},this);this.on("change",a);return null}},keyboardFocusable:!0},n,!0);CKEDITOR.ui.dialog.radio.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{setValue:function(b,a){for(var d=this._.children,f,c=0;c<d.length&&(f=d[c]);c++)f.getElement().$.checked=f.getValue()==b;!a&&this.fire("change",{value:b})},
-getValue:function(){for(var b=this._.children,a=0;a<b.length;a++)if(b[a].getElement().$.checked)return b[a].getValue();return null},accessKeyUp:function(){var b=this._.children,a;for(a=0;a<b.length;a++)if(b[a].getElement().$.checked){b[a].getElement().focus();return}b[0].getElement().focus()},eventProcessors:{onChange:function(b,a){if(CKEDITOR.env.ie)b.on("load",function(){for(var a=this._.children,b=this,c=0;c<a.length;c++)a[c].getElement().on("propertychange",function(a){a=a.data.$;"checked"==a.propertyName&&
-this.$.checked&&b.fire("change",{value:this.getAttribute("value")})})},this),this.on("change",a);else return o.onChange.apply(this,arguments);return null}}},n,!0);CKEDITOR.ui.dialog.file.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement,n,{getInputElement:function(){var b=CKEDITOR.document.getById(this._.frameId).getFrameDocument();return 0<b.$.forms.length?new CKEDITOR.dom.element(b.$.forms[0].elements[0]):this.getElement()},submit:function(){this.getInputElement().getParent().$.submit();
-return this},getAction:function(){return this.getInputElement().getParent().$.action},registerEvents:function(b){var a=/^on([A-Z]\w+)/,d,f=function(a,b,c,d){a.on("formLoaded",function(){a.getInputElement().on(c,d,a)})},c;for(c in b)if(d=c.match(a))this.eventProcessors[c]?this.eventProcessors[c].call(this,this._.dialog,b[c]):f(this,this._.dialog,d[1].toLowerCase(),b[c]);return this},reset:function(){function b(){d.$.open();var b="";f.size&&(b=f.size-(CKEDITOR.env.ie?7:0));var h=a.frameId+"_input";
-d.$.write(['<html dir="'+g+'" lang="'+i+'"><head><title></title></head><body style="margin: 0; overflow: hidden; background: transparent;">','<form enctype="multipart/form-data" method="POST" dir="'+g+'" lang="'+i+'" action="',CKEDITOR.tools.htmlEncode(f.action),'"><label id="',a.labelId,'" for="',h,'" style="display:none">',CKEDITOR.tools.htmlEncode(f.label),'</label><input style="width:100%" id="',h,'" aria-labelledby="',a.labelId,'" type="file" name="',CKEDITOR.tools.htmlEncode(f.id||"cke_upload"),
-'" size="',CKEDITOR.tools.htmlEncode(0<b?b:""),'" /></form></body></html><script>',CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"","window.parent.CKEDITOR.tools.callFunction("+e+");","window.onbeforeunload = function() {window.parent.CKEDITOR.tools.callFunction("+k+")}","<\/script>"].join(""));d.$.close();for(b=0;b<c.length;b++)c[b].enable()}var a=this._,d=CKEDITOR.document.getById(a.frameId).getFrameDocument(),f=a.definition,c=a.buttons,e=this.formLoadedNumber,k=this.formUnloadNumber,g=a.dialog._.editor.lang.dir,
-i=a.dialog._.editor.langCode;e||(e=this.formLoadedNumber=CKEDITOR.tools.addFunction(function(){this.fire("formLoaded")},this),k=this.formUnloadNumber=CKEDITOR.tools.addFunction(function(){this.getInputElement().clearCustomData()},this),this.getDialog()._.editor.on("destroy",function(){CKEDITOR.tools.removeFunction(e);CKEDITOR.tools.removeFunction(k)}));CKEDITOR.env.gecko?setTimeout(b,500):b()},getValue:function(){return this.getInputElement().$.value||""},setInitValue:function(){this._.initValue=
-""},eventProcessors:{onChange:function(b,a){this._.domOnChangeRegistered||(this.on("formLoaded",function(){this.getInputElement().on("change",function(){this.fire("change",{value:this.getValue()})},this)},this),this._.domOnChangeRegistered=!0);this.on("change",a)}},keyboardFocusable:!0},!0);CKEDITOR.ui.dialog.fileButton.prototype=new CKEDITOR.ui.dialog.button;CKEDITOR.ui.dialog.fieldset.prototype=CKEDITOR.tools.clone(CKEDITOR.ui.dialog.hbox.prototype);CKEDITOR.dialog.addUIElement("text",r);CKEDITOR.dialog.addUIElement("password",
-r);CKEDITOR.dialog.addUIElement("textarea",l);CKEDITOR.dialog.addUIElement("checkbox",l);CKEDITOR.dialog.addUIElement("radio",l);CKEDITOR.dialog.addUIElement("button",l);CKEDITOR.dialog.addUIElement("select",l);CKEDITOR.dialog.addUIElement("file",l);CKEDITOR.dialog.addUIElement("fileButton",l);CKEDITOR.dialog.addUIElement("html",l);CKEDITOR.dialog.addUIElement("fieldset",{build:function(b,a,d){for(var f=a.children,c,e=[],h=[],g=0;g<f.length&&(c=f[g]);g++){var i=[];e.push(i);h.push(CKEDITOR.dialog._.uiElementBuilders[c.type].build(b,
-c,i))}return new CKEDITOR.ui.dialog[a.type](b,h,e,d,a)}})}});CKEDITOR.DIALOG_RESIZE_NONE=0;CKEDITOR.DIALOG_RESIZE_WIDTH=1;CKEDITOR.DIALOG_RESIZE_HEIGHT=2;CKEDITOR.DIALOG_RESIZE_BOTH=3;
-(function(){function t(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId)+a,c=b-1;c>b-a;c--)if(this._.tabs[this._.tabIdList[c%a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function u(){for(var a=this._.tabIdList.length,b=CKEDITOR.tools.indexOf(this._.tabIdList,this._.currentTabId),c=b+1;c<b+a;c++)if(this._.tabs[this._.tabIdList[c%a]][0].$.offsetHeight)return this._.tabIdList[c%a];return null}function G(a,b){for(var c=a.$.getElementsByTagName("input"),
-e=0,d=c.length;e<d;e++){var g=new CKEDITOR.dom.element(c[e]);"text"==g.getAttribute("type").toLowerCase()&&(b?(g.setAttribute("value",g.getCustomData("fake_value")||""),g.removeCustomData("fake_value")):(g.setCustomData("fake_value",g.getAttribute("value")),g.setAttribute("value","")))}}function P(a,b){var c=this.getInputElement();c&&(a?c.removeAttribute("aria-invalid"):c.setAttribute("aria-invalid",!0));a||(this.select?this.select():this.focus());b&&alert(b);this.fire("validated",{valid:a,msg:b})}
-function Q(){var a=this.getInputElement();a&&a.removeAttribute("aria-invalid")}function R(a){var a=CKEDITOR.dom.element.createFromHtml(CKEDITOR.addTemplate("dialog",S).output({id:CKEDITOR.tools.getNextNumber(),editorId:a.id,langDir:a.lang.dir,langCode:a.langCode,editorDialogClass:"cke_editor_"+a.name.replace(/\./g,"\\.")+"_dialog",closeTitle:a.lang.common.close,hidpi:CKEDITOR.env.hidpi?"cke_hidpi":""})),b=a.getChild([0,0,0,0,0]),c=b.getChild(0),e=b.getChild(1);if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var d=
-"javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())";CKEDITOR.dom.element.createFromHtml('<iframe frameBorder="0" class="cke_iframe_shim" src="'+d+'" tabIndex="-1"></iframe>').appendTo(b.getParent())}c.unselectable();e.unselectable();return{element:a,parts:{dialog:a.getChild(0),title:c,close:e,tabs:b.getChild(2),contents:b.getChild([3,0,0,0]),footer:b.getChild([3,0,1,0])}}}function H(a,b,c){this.element=b;this.focusIndex=c;this.tabIndex=
-0;this.isFocusable=function(){return!b.getAttribute("disabled")&&b.isVisible()};this.focus=function(){a._.currentFocusIndex=this.focusIndex;this.element.focus()};b.on("keydown",function(a){a.data.getKeystroke()in{32:1,13:1}&&this.fire("click")});b.on("focus",function(){this.fire("mouseover")});b.on("blur",function(){this.fire("mouseout")})}function T(a){function b(){a.layout()}var c=CKEDITOR.document.getWindow();c.on("resize",b);a.on("hide",function(){c.removeListener("resize",b)})}function I(a,b){this._=
-{dialog:a};CKEDITOR.tools.extend(this,b)}function U(a){function b(b){var c=a.getSize(),i=CKEDITOR.document.getWindow().getViewPaneSize(),o=b.data.$.screenX,j=b.data.$.screenY,n=o-e.x,l=j-e.y;e={x:o,y:j};d.x+=n;d.y+=l;a.move(d.x+h[3]<f?-h[3]:d.x-h[1]>i.width-c.width-f?i.width-c.width+("rtl"==g.lang.dir?0:h[1]):d.x,d.y+h[0]<f?-h[0]:d.y-h[2]>i.height-c.height-f?i.height-c.height+h[2]:d.y,1);b.data.preventDefault()}function c(){CKEDITOR.document.removeListener("mousemove",b);CKEDITOR.document.removeListener("mouseup",
-c);if(CKEDITOR.env.ie6Compat){var a=q.getChild(0).getFrameDocument();a.removeListener("mousemove",b);a.removeListener("mouseup",c)}}var e=null,d=null;a.getElement().getFirst();var g=a.getParentEditor(),f=g.config.dialog_magnetDistance,h=CKEDITOR.skin.margins||[0,0,0,0];"undefined"==typeof f&&(f=20);a.parts.title.on("mousedown",function(f){e={x:f.data.$.screenX,y:f.data.$.screenY};CKEDITOR.document.on("mousemove",b);CKEDITOR.document.on("mouseup",c);d=a.getPosition();if(CKEDITOR.env.ie6Compat){var h=
-q.getChild(0).getFrameDocument();h.on("mousemove",b);h.on("mouseup",c)}f.data.preventDefault()},a)}function V(a){var b,c;function e(d){var e="rtl"==h.lang.dir,j=o.width,C=o.height,D=j+(d.data.$.screenX-b)*(e?-1:1)*(a._.moved?1:2),n=C+(d.data.$.screenY-c)*(a._.moved?1:2),x=a._.element.getFirst(),x=e&&x.getComputedStyle("right"),y=a.getPosition();y.y+n>i.height&&(n=i.height-y.y);if((e?x:y.x)+D>i.width)D=i.width-(e?x:y.x);if(f==CKEDITOR.DIALOG_RESIZE_WIDTH||f==CKEDITOR.DIALOG_RESIZE_BOTH)j=Math.max(g.minWidth||
-0,D-m);if(f==CKEDITOR.DIALOG_RESIZE_HEIGHT||f==CKEDITOR.DIALOG_RESIZE_BOTH)C=Math.max(g.minHeight||0,n-k);a.resize(j,C);a._.moved||a.layout();d.data.preventDefault()}function d(){CKEDITOR.document.removeListener("mouseup",d);CKEDITOR.document.removeListener("mousemove",e);j&&(j.remove(),j=null);if(CKEDITOR.env.ie6Compat){var a=q.getChild(0).getFrameDocument();a.removeListener("mouseup",d);a.removeListener("mousemove",e)}}var g=a.definition,f=g.resizable;if(f!=CKEDITOR.DIALOG_RESIZE_NONE){var h=a.getParentEditor(),
-m,k,i,o,j,n=CKEDITOR.tools.addFunction(function(f){o=a.getSize();var h=a.parts.contents;h.$.getElementsByTagName("iframe").length&&(j=CKEDITOR.dom.element.createFromHtml('<div class="cke_dialog_resize_cover" style="height: 100%; position: absolute; width: 100%;"></div>'),h.append(j));k=o.height-a.parts.contents.getSize("height",!(CKEDITOR.env.gecko||CKEDITOR.env.ie&&CKEDITOR.env.quirks));m=o.width-a.parts.contents.getSize("width",1);b=f.screenX;c=f.screenY;i=CKEDITOR.document.getWindow().getViewPaneSize();
-CKEDITOR.document.on("mousemove",e);CKEDITOR.document.on("mouseup",d);CKEDITOR.env.ie6Compat&&(h=q.getChild(0).getFrameDocument(),h.on("mousemove",e),h.on("mouseup",d));f.preventDefault&&f.preventDefault()});a.on("load",function(){var b="";f==CKEDITOR.DIALOG_RESIZE_WIDTH?b=" cke_resizer_horizontal":f==CKEDITOR.DIALOG_RESIZE_HEIGHT&&(b=" cke_resizer_vertical");b=CKEDITOR.dom.element.createFromHtml('<div class="cke_resizer'+b+" cke_resizer_"+h.lang.dir+'" title="'+CKEDITOR.tools.htmlEncode(h.lang.common.resize)+
-'" onmousedown="CKEDITOR.tools.callFunction('+n+', event )">'+("ltr"==h.lang.dir?"â—¢":"â—£")+"</div>");a.parts.footer.append(b,1)});h.on("destroy",function(){CKEDITOR.tools.removeFunction(n)})}}function E(a){a.data.preventDefault(1)}function J(a){var b=CKEDITOR.document.getWindow(),c=a.config,e=c.dialog_backgroundCoverColor||"white",d=c.dialog_backgroundCoverOpacity,g=c.baseFloatZIndex,c=CKEDITOR.tools.genKey(e,d,g),f=w[c];f?f.show():(g=['<div tabIndex="-1" style="position: ',CKEDITOR.env.ie6Compat?
-"absolute":"fixed","; z-index: ",g,"; top: 0px; left: 0px; ",!CKEDITOR.env.ie6Compat?"background-color: "+e:"",'" class="cke_dialog_background_cover">'],CKEDITOR.env.ie6Compat&&(e="<html><body style=\\'background-color:"+e+";\\'></body></html>",g.push('<iframe hidefocus="true" frameborder="0" id="cke_dialog_background_iframe" src="javascript:'),g.push("void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.write( '"+e+"' );document.close();")+"})())"),g.push('" style="position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0)"></iframe>')),
-g.push("</div>"),f=CKEDITOR.dom.element.createFromHtml(g.join("")),f.setOpacity(void 0!=d?d:0.5),f.on("keydown",E),f.on("keypress",E),f.on("keyup",E),f.appendTo(CKEDITOR.document.getBody()),w[c]=f);a.focusManager.add(f);q=f;var a=function(){var a=b.getViewPaneSize();f.setStyles({width:a.width+"px",height:a.height+"px"})},h=function(){var a=b.getScrollPosition(),c=CKEDITOR.dialog._.currentTop;f.setStyles({left:a.x+"px",top:a.y+"px"});if(c){do{a=c.getPosition();c.move(a.x,a.y)}while(c=c._.parentDialog)
-}};F=a;b.on("resize",a);a();(!CKEDITOR.env.mac||!CKEDITOR.env.webkit)&&f.focus();if(CKEDITOR.env.ie6Compat){var m=function(){h();arguments.callee.prevScrollHandler.apply(this,arguments)};b.$.setTimeout(function(){m.prevScrollHandler=window.onscroll||function(){};window.onscroll=m},0);h()}}function K(a){q&&(a.focusManager.remove(q),a=CKEDITOR.document.getWindow(),q.hide(),a.removeListener("resize",F),CKEDITOR.env.ie6Compat&&a.$.setTimeout(function(){window.onscroll=window.onscroll&&window.onscroll.prevScrollHandler||
-null},0),F=null)}var r=CKEDITOR.tools.cssLength,S='<div class="cke_reset_all {editorId} {editorDialogClass} {hidpi}" dir="{langDir}" lang="{langCode}" role="dialog" aria-labelledby="cke_dialog_title_{id}"><table class="cke_dialog '+CKEDITOR.env.cssClass+' cke_{langDir}" style="position:absolute" role="presentation"><tr><td role="presentation"><div class="cke_dialog_body" role="presentation"><div id="cke_dialog_title_{id}" class="cke_dialog_title" role="presentation"></div><a id="cke_dialog_close_button_{id}" class="cke_dialog_close_button" href="javascript:void(0)" title="{closeTitle}" role="button"><span class="cke_label">X</span></a><div id="cke_dialog_tabs_{id}" class="cke_dialog_tabs" role="tablist"></div><table class="cke_dialog_contents" role="presentation"><tr><td id="cke_dialog_contents_{id}" class="cke_dialog_contents_body" role="presentation"></td></tr><tr><td id="cke_dialog_footer_{id}" class="cke_dialog_footer" role="presentation"></td></tr></table></div></td></tr></table></div>';
-CKEDITOR.dialog=function(a,b){function c(){var a=l._.focusList;a.sort(function(a,b){return a.tabIndex!=b.tabIndex?b.tabIndex-a.tabIndex:a.focusIndex-b.focusIndex});for(var b=a.length,c=0;c<b;c++)a[c].focusIndex=c}function e(a){var b=l._.focusList,a=a||0;if(!(1>b.length)){var c=l._.currentFocusIndex;try{b[c].getInputElement().$.blur()}catch(f){}for(var d=c=(c+a+b.length)%b.length;a&&!b[d].isFocusable()&&!(d=(d+a+b.length)%b.length,d==c););b[d].focus();"text"==b[d].type&&b[d].select()}}function d(b){if(l==
-CKEDITOR.dialog._.currentTop){var c=b.data.getKeystroke(),d="rtl"==a.lang.dir;o=j=0;if(9==c||c==CKEDITOR.SHIFT+9)c=c==CKEDITOR.SHIFT+9,l._.tabBarMode?(c=c?t.call(l):u.call(l),l.selectPage(c),l._.tabs[c][0].focus()):e(c?-1:1),o=1;else if(c==CKEDITOR.ALT+121&&!l._.tabBarMode&&1<l.getPageCount())l._.tabBarMode=!0,l._.tabs[l._.currentTabId][0].focus(),o=1;else if((37==c||39==c)&&l._.tabBarMode)c=c==(d?39:37)?t.call(l):u.call(l),l.selectPage(c),l._.tabs[c][0].focus(),o=1;else if((13==c||32==c)&&l._.tabBarMode)this.selectPage(this._.currentTabId),
-this._.tabBarMode=!1,this._.currentFocusIndex=-1,e(1),o=1;else if(13==c){c=b.data.getTarget();if(!c.is("a","button","select","textarea")&&(!c.is("input")||"button"!=c.$.type))(c=this.getButton("ok"))&&CKEDITOR.tools.setTimeout(c.click,0,c),o=1;j=1}else if(27==c)(c=this.getButton("cancel"))?CKEDITOR.tools.setTimeout(c.click,0,c):!1!==this.fire("cancel",{hide:!0}).hide&&this.hide(),j=1;else return;g(b)}}function g(a){o?a.data.preventDefault(1):j&&a.data.stopPropagation()}var f=CKEDITOR.dialog._.dialogDefinitions[b],
-h=CKEDITOR.tools.clone(W),m=a.config.dialog_buttonsOrder||"OS",k=a.lang.dir,i={},o,j;("OS"==m&&CKEDITOR.env.mac||"rtl"==m&&"ltr"==k||"ltr"==m&&"rtl"==k)&&h.buttons.reverse();f=CKEDITOR.tools.extend(f(a),h);f=CKEDITOR.tools.clone(f);f=new L(this,f);h=R(a);this._={editor:a,element:h.element,name:b,contentSize:{width:0,height:0},size:{width:0,height:0},contents:{},buttons:{},accessKeyMap:{},tabs:{},tabIdList:[],currentTabId:null,currentTabIndex:null,pageCount:0,lastTab:null,tabBarMode:!1,focusList:[],
-currentFocusIndex:0,hasFocus:!1};this.parts=h.parts;CKEDITOR.tools.setTimeout(function(){a.fire("ariaWidget",this.parts.contents)},0,this);h={position:CKEDITOR.env.ie6Compat?"absolute":"fixed",top:0,visibility:"hidden"};h["rtl"==k?"right":"left"]=0;this.parts.dialog.setStyles(h);CKEDITOR.event.call(this);this.definition=f=CKEDITOR.fire("dialogDefinition",{name:b,definition:f},a).definition;if(!("removeDialogTabs"in a._)&&a.config.removeDialogTabs){h=a.config.removeDialogTabs.split(";");for(k=0;k<
-h.length;k++)if(m=h[k].split(":"),2==m.length){var n=m[0];i[n]||(i[n]=[]);i[n].push(m[1])}a._.removeDialogTabs=i}if(a._.removeDialogTabs&&(i=a._.removeDialogTabs[b]))for(k=0;k<i.length;k++)f.removeContents(i[k]);if(f.onLoad)this.on("load",f.onLoad);if(f.onShow)this.on("show",f.onShow);if(f.onHide)this.on("hide",f.onHide);if(f.onOk)this.on("ok",function(b){a.fire("saveSnapshot");setTimeout(function(){a.fire("saveSnapshot")},0);!1===f.onOk.call(this,b)&&(b.data.hide=!1)});if(f.onCancel)this.on("cancel",
-function(a){!1===f.onCancel.call(this,a)&&(a.data.hide=!1)});var l=this,p=function(a){var b=l._.contents,c=!1,d;for(d in b)for(var f in b[d])if(c=a.call(this,b[d][f]))return};this.on("ok",function(a){p(function(b){if(b.validate){var c=b.validate(this),d="string"==typeof c||!1===c;d&&(a.data.hide=!1,a.stop());P.call(b,!d,"string"==typeof c?c:void 0);return d}})},this,null,0);this.on("cancel",function(b){p(function(c){if(c.isChanged())return!a.config.dialog_noConfirmCancel&&!confirm(a.lang.common.confirmCancel)&&
-(b.data.hide=!1),!0})},this,null,0);this.parts.close.on("click",function(a){!1!==this.fire("cancel",{hide:!0}).hide&&this.hide();a.data.preventDefault()},this);this.changeFocus=e;var v=this._.element;a.focusManager.add(v,1);this.on("show",function(){v.on("keydown",d,this);if(CKEDITOR.env.gecko)v.on("keypress",g,this)});this.on("hide",function(){v.removeListener("keydown",d);CKEDITOR.env.gecko&&v.removeListener("keypress",g);p(function(a){Q.apply(a)})});this.on("iframeAdded",function(a){(new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document)).on("keydown",
-d,this,null,0)});this.on("show",function(){c();if(a.config.dialog_startupFocusTab&&1<l._.pageCount)l._.tabBarMode=!0,l._.tabs[l._.currentTabId][0].focus();else if(!this._.hasFocus)if(this._.currentFocusIndex=-1,f.onFocus){var b=f.onFocus.call(this);b&&b.focus()}else e(1)},this,null,4294967295);if(CKEDITOR.env.ie6Compat)this.on("load",function(){var a=this.getElement(),b=a.getFirst();b.remove();b.appendTo(a)},this);U(this);V(this);(new CKEDITOR.dom.text(f.title,CKEDITOR.document)).appendTo(this.parts.title);
-for(k=0;k<f.contents.length;k++)(i=f.contents[k])&&this.addPage(i);this.parts.tabs.on("click",function(a){var b=a.data.getTarget();b.hasClass("cke_dialog_tab")&&(b=b.$.id,this.selectPage(b.substring(4,b.lastIndexOf("_"))),this._.tabBarMode&&(this._.tabBarMode=!1,this._.currentFocusIndex=-1,e(1)),a.data.preventDefault())},this);k=[];i=CKEDITOR.dialog._.uiElementBuilders.hbox.build(this,{type:"hbox",className:"cke_dialog_footer_buttons",widths:[],children:f.buttons},k).getChild();this.parts.footer.setHtml(k.join(""));
-for(k=0;k<i.length;k++)this._.buttons[i[k].id]=i[k]};CKEDITOR.dialog.prototype={destroy:function(){this.hide();this._.element.remove()},resize:function(){return function(a,b){if(!this._.contentSize||!(this._.contentSize.width==a&&this._.contentSize.height==b))CKEDITOR.dialog.fire("resize",{dialog:this,width:a,height:b},this._.editor),this.fire("resize",{width:a,height:b},this._.editor),this.parts.contents.setStyles({width:a+"px",height:b+"px"}),"rtl"==this._.editor.lang.dir&&this._.position&&(this._.position.x=
-CKEDITOR.document.getWindow().getViewPaneSize().width-this._.contentSize.width-parseInt(this._.element.getFirst().getStyle("right"),10)),this._.contentSize={width:a,height:b}}}(),getSize:function(){var a=this._.element.getFirst();return{width:a.$.offsetWidth||0,height:a.$.offsetHeight||0}},move:function(a,b,c){var e=this._.element.getFirst(),d="rtl"==this._.editor.lang.dir,g="fixed"==e.getComputedStyle("position");CKEDITOR.env.ie&&e.setStyle("zoom","100%");if(!g||!this._.position||!(this._.position.x==
-a&&this._.position.y==b))this._.position={x:a,y:b},g||(g=CKEDITOR.document.getWindow().getScrollPosition(),a+=g.x,b+=g.y),d&&(g=this.getSize(),a=CKEDITOR.document.getWindow().getViewPaneSize().width-g.width-a),b={top:(0<b?b:0)+"px"},b[d?"right":"left"]=(0<a?a:0)+"px",e.setStyles(b),c&&(this._.moved=1)},getPosition:function(){return CKEDITOR.tools.extend({},this._.position)},show:function(){var a=this._.element,b=this.definition;!a.getParent()||!a.getParent().equals(CKEDITOR.document.getBody())?a.appendTo(CKEDITOR.document.getBody()):
-a.setStyle("display","block");this.resize(this._.contentSize&&this._.contentSize.width||b.width||b.minWidth,this._.contentSize&&this._.contentSize.height||b.height||b.minHeight);this.reset();this.selectPage(this.definition.contents[0].id);null===CKEDITOR.dialog._.currentZIndex&&(CKEDITOR.dialog._.currentZIndex=this._.editor.config.baseFloatZIndex);this._.element.getFirst().setStyle("z-index",CKEDITOR.dialog._.currentZIndex+=10);null===CKEDITOR.dialog._.currentTop?(CKEDITOR.dialog._.currentTop=this,
-this._.parentDialog=null,J(this._.editor)):(this._.parentDialog=CKEDITOR.dialog._.currentTop,this._.parentDialog.getElement().getFirst().$.style.zIndex-=Math.floor(this._.editor.config.baseFloatZIndex/2),CKEDITOR.dialog._.currentTop=this);a.on("keydown",M);a.on("keyup",N);this._.hasFocus=!1;for(var c in b.contents)if(b.contents[c]){var a=b.contents[c],e=this._.tabs[a.id],d=a.requiredContent,g=0;if(e){for(var f in this._.contents[a.id]){var h=this._.contents[a.id][f];"hbox"==h.type||("vbox"==h.type||
-!h.getInputElement())||(h.requiredContent&&!this._.editor.activeFilter.check(h.requiredContent)?h.disable():(h.enable(),g++))}!g||d&&!this._.editor.activeFilter.check(d)?e[0].addClass("cke_dialog_tab_disabled"):e[0].removeClass("cke_dialog_tab_disabled")}}CKEDITOR.tools.setTimeout(function(){this.layout();T(this);this.parts.dialog.setStyle("visibility","");this.fireOnce("load",{});CKEDITOR.ui.fire("ready",this);this.fire("show",{});this._.editor.fire("dialogShow",this);this._.parentDialog||this._.editor.focusManager.lock();
-this.foreach(function(a){a.setInitValue&&a.setInitValue()})},100,this)},layout:function(){var a=this.parts.dialog,b=this.getSize(),c=CKEDITOR.document.getWindow().getViewPaneSize(),e=(c.width-b.width)/2,d=(c.height-b.height)/2;CKEDITOR.env.ie6Compat||(b.height+(0<d?d:0)>c.height||b.width+(0<e?e:0)>c.width?a.setStyle("position","absolute"):a.setStyle("position","fixed"));this.move(this._.moved?this._.position.x:e,this._.moved?this._.position.y:d)},foreach:function(a){for(var b in this._.contents)for(var c in this._.contents[b])a.call(this,
-this._.contents[b][c]);return this},reset:function(){var a=function(a){a.reset&&a.reset(1)};return function(){this.foreach(a);return this}}(),setupContent:function(){var a=arguments;this.foreach(function(b){b.setup&&b.setup.apply(b,a)})},commitContent:function(){var a=arguments;this.foreach(function(b){CKEDITOR.env.ie&&this._.currentFocusIndex==b.focusIndex&&b.getInputElement().$.blur();b.commit&&b.commit.apply(b,a)})},hide:function(){if(this.parts.dialog.isVisible()){this.fire("hide",{});this._.editor.fire("dialogHide",
-this);this.selectPage(this._.tabIdList[0]);var a=this._.element;a.setStyle("display","none");this.parts.dialog.setStyle("visibility","hidden");for(X(this);CKEDITOR.dialog._.currentTop!=this;)CKEDITOR.dialog._.currentTop.hide();if(this._.parentDialog){var b=this._.parentDialog.getElement().getFirst();b.setStyle("z-index",parseInt(b.$.style.zIndex,10)+Math.floor(this._.editor.config.baseFloatZIndex/2))}else K(this._.editor);if(CKEDITOR.dialog._.currentTop=this._.parentDialog)CKEDITOR.dialog._.currentZIndex-=
-10;else{CKEDITOR.dialog._.currentZIndex=null;a.removeListener("keydown",M);a.removeListener("keyup",N);var c=this._.editor;c.focus();setTimeout(function(){c.focusManager.unlock();CKEDITOR.env.iOS&&c.window.focus()},0)}delete this._.parentDialog;this.foreach(function(a){a.resetInitValue&&a.resetInitValue()})}},addPage:function(a){if(!a.requiredContent||this._.editor.filter.check(a.requiredContent)){for(var b=[],c=a.label?' title="'+CKEDITOR.tools.htmlEncode(a.label)+'"':"",e=CKEDITOR.dialog._.uiElementBuilders.vbox.build(this,
-{type:"vbox",className:"cke_dialog_page_contents",children:a.elements,expand:!!a.expand,padding:a.padding,style:a.style||"width: 100%;"},b),d=this._.contents[a.id]={},g=e.getChild(),f=0;e=g.shift();)!e.notAllowed&&("hbox"!=e.type&&"vbox"!=e.type)&&f++,d[e.id]=e,"function"==typeof e.getChild&&g.push.apply(g,e.getChild());f||(a.hidden=!0);b=CKEDITOR.dom.element.createFromHtml(b.join(""));b.setAttribute("role","tabpanel");e=CKEDITOR.env;d="cke_"+a.id+"_"+CKEDITOR.tools.getNextNumber();c=CKEDITOR.dom.element.createFromHtml(['<a class="cke_dialog_tab"',
-0<this._.pageCount?" cke_last":"cke_first",c,a.hidden?' style="display:none"':"",' id="',d,'"',e.gecko&&!e.hc?"":' href="javascript:void(0)"',' tabIndex="-1" hidefocus="true" role="tab">',a.label,"</a>"].join(""));b.setAttribute("aria-labelledby",d);this._.tabs[a.id]=[c,b];this._.tabIdList.push(a.id);!a.hidden&&this._.pageCount++;this._.lastTab=c;this.updateStyle();b.setAttribute("name",a.id);b.appendTo(this.parts.contents);c.unselectable();this.parts.tabs.append(c);a.accessKey&&(O(this,this,"CTRL+"+
-a.accessKey,Y,Z),this._.accessKeyMap["CTRL+"+a.accessKey]=a.id)}},selectPage:function(a){if(this._.currentTabId!=a&&!this._.tabs[a][0].hasClass("cke_dialog_tab_disabled")&&!1!==this.fire("selectPage",{page:a,currentPage:this._.currentTabId})){for(var b in this._.tabs){var c=this._.tabs[b][0],e=this._.tabs[b][1];b!=a&&(c.removeClass("cke_dialog_tab_selected"),e.hide());e.setAttribute("aria-hidden",b!=a)}var d=this._.tabs[a];d[0].addClass("cke_dialog_tab_selected");CKEDITOR.env.ie6Compat||CKEDITOR.env.ie7Compat?
-(G(d[1]),d[1].show(),setTimeout(function(){G(d[1],1)},0)):d[1].show();this._.currentTabId=a;this._.currentTabIndex=CKEDITOR.tools.indexOf(this._.tabIdList,a)}},updateStyle:function(){this.parts.dialog[(1===this._.pageCount?"add":"remove")+"Class"]("cke_single_page")},hidePage:function(a){var b=this._.tabs[a]&&this._.tabs[a][0];b&&(1!=this._.pageCount&&b.isVisible())&&(a==this._.currentTabId&&this.selectPage(t.call(this)),b.hide(),this._.pageCount--,this.updateStyle())},showPage:function(a){if(a=this._.tabs[a]&&
-this._.tabs[a][0])a.show(),this._.pageCount++,this.updateStyle()},getElement:function(){return this._.element},getName:function(){return this._.name},getContentElement:function(a,b){var c=this._.contents[a];return c&&c[b]},getValueOf:function(a,b){return this.getContentElement(a,b).getValue()},setValueOf:function(a,b,c){return this.getContentElement(a,b).setValue(c)},getButton:function(a){return this._.buttons[a]},click:function(a){return this._.buttons[a].click()},disableButton:function(a){return this._.buttons[a].disable()},
-enableButton:function(a){return this._.buttons[a].enable()},getPageCount:function(){return this._.pageCount},getParentEditor:function(){return this._.editor},getSelectedElement:function(){return this.getParentEditor().getSelection().getSelectedElement()},addFocusable:function(a,b){if("undefined"==typeof b)b=this._.focusList.length,this._.focusList.push(new H(this,a,b));else{this._.focusList.splice(b,0,new H(this,a,b));for(var c=b+1;c<this._.focusList.length;c++)this._.focusList[c].focusIndex++}}};
-CKEDITOR.tools.extend(CKEDITOR.dialog,{add:function(a,b){if(!this._.dialogDefinitions[a]||"function"==typeof b)this._.dialogDefinitions[a]=b},exists:function(a){return!!this._.dialogDefinitions[a]},getCurrent:function(){return CKEDITOR.dialog._.currentTop},isTabEnabled:function(a,b,c){a=a.config.removeDialogTabs;return!(a&&a.match(RegExp("(?:^|;)"+b+":"+c+"(?:$|;)","i")))},okButton:function(){var a=function(a,c){c=c||{};return CKEDITOR.tools.extend({id:"ok",type:"button",label:a.lang.common.ok,"class":"cke_dialog_ui_button_ok",
-onClick:function(a){a=a.data.dialog;!1!==a.fire("ok",{hide:!0}).hide&&a.hide()}},c,!0)};a.type="button";a.override=function(b){return CKEDITOR.tools.extend(function(c){return a(c,b)},{type:"button"},!0)};return a}(),cancelButton:function(){var a=function(a,c){c=c||{};return CKEDITOR.tools.extend({id:"cancel",type:"button",label:a.lang.common.cancel,"class":"cke_dialog_ui_button_cancel",onClick:function(a){a=a.data.dialog;!1!==a.fire("cancel",{hide:!0}).hide&&a.hide()}},c,!0)};a.type="button";a.override=
-function(b){return CKEDITOR.tools.extend(function(c){return a(c,b)},{type:"button"},!0)};return a}(),addUIElement:function(a,b){this._.uiElementBuilders[a]=b}});CKEDITOR.dialog._={uiElementBuilders:{},dialogDefinitions:{},currentTop:null,currentZIndex:null};CKEDITOR.event.implementOn(CKEDITOR.dialog);CKEDITOR.event.implementOn(CKEDITOR.dialog.prototype);var W={resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:600,minHeight:400,buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton]},z=function(a,
-b,c){for(var e=0,d;d=a[e];e++)if(d.id==b||c&&d[c]&&(d=z(d[c],b,c)))return d;return null},A=function(a,b,c,e,d){if(c){for(var g=0,f;f=a[g];g++){if(f.id==c)return a.splice(g,0,b),b;if(e&&f[e]&&(f=A(f[e],b,c,e,!0)))return f}if(d)return null}a.push(b);return b},B=function(a,b,c){for(var e=0,d;d=a[e];e++){if(d.id==b)return a.splice(e,1);if(c&&d[c]&&(d=B(d[c],b,c)))return d}return null},L=function(a,b){this.dialog=a;for(var c=b.contents,e=0,d;d=c[e];e++)c[e]=d&&new I(a,d);CKEDITOR.tools.extend(this,b)};
-L.prototype={getContents:function(a){return z(this.contents,a)},getButton:function(a){return z(this.buttons,a)},addContents:function(a,b){return A(this.contents,a,b)},addButton:function(a,b){return A(this.buttons,a,b)},removeContents:function(a){B(this.contents,a)},removeButton:function(a){B(this.buttons,a)}};I.prototype={get:function(a){return z(this.elements,a,"children")},add:function(a,b){return A(this.elements,a,b,"children")},remove:function(a){B(this.elements,a,"children")}};var F,w={},q,s=
-{},M=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=a.data.$.altKey,e=a.data.$.shiftKey,d=String.fromCharCode(a.data.$.keyCode);if((b=s[(b?"CTRL+":"")+(c?"ALT+":"")+(e?"SHIFT+":"")+d])&&b.length)b=b[b.length-1],b.keydown&&b.keydown.call(b.uiElement,b.dialog,b.key),a.data.preventDefault()},N=function(a){var b=a.data.$.ctrlKey||a.data.$.metaKey,c=a.data.$.altKey,e=a.data.$.shiftKey,d=String.fromCharCode(a.data.$.keyCode);if((b=s[(b?"CTRL+":"")+(c?"ALT+":"")+(e?"SHIFT+":"")+d])&&b.length)b=b[b.length-
-1],b.keyup&&(b.keyup.call(b.uiElement,b.dialog,b.key),a.data.preventDefault())},O=function(a,b,c,e,d){(s[c]||(s[c]=[])).push({uiElement:a,dialog:b,key:c,keyup:d||a.accessKeyUp,keydown:e||a.accessKeyDown})},X=function(a){for(var b in s){for(var c=s[b],e=c.length-1;0<=e;e--)(c[e].dialog==a||c[e].uiElement==a)&&c.splice(e,1);0===c.length&&delete s[b]}},Z=function(a,b){a._.accessKeyMap[b]&&a.selectPage(a._.accessKeyMap[b])},Y=function(){};(function(){CKEDITOR.ui.dialog={uiElement:function(a,b,c,e,d,g,
-f){if(!(4>arguments.length)){var h=(e.call?e(b):e)||"div",m=["<",h," "],k=(d&&d.call?d(b):d)||{},i=(g&&g.call?g(b):g)||{},o=(f&&f.call?f.call(this,a,b):f)||"",j=this.domId=i.id||CKEDITOR.tools.getNextId()+"_uiElement";this.id=b.id;b.requiredContent&&!a.getParentEditor().filter.check(b.requiredContent)&&(k.display="none",this.notAllowed=!0);i.id=j;var n={};b.type&&(n["cke_dialog_ui_"+b.type]=1);b.className&&(n[b.className]=1);b.disabled&&(n.cke_disabled=1);for(var l=i["class"]&&i["class"].split?i["class"].split(" "):
-[],j=0;j<l.length;j++)l[j]&&(n[l[j]]=1);l=[];for(j in n)l.push(j);i["class"]=l.join(" ");b.title&&(i.title=b.title);n=(b.style||"").split(";");b.align&&(l=b.align,k["margin-left"]="left"==l?0:"auto",k["margin-right"]="right"==l?0:"auto");for(j in k)n.push(j+":"+k[j]);b.hidden&&n.push("display:none");for(j=n.length-1;0<=j;j--)""===n[j]&&n.splice(j,1);0<n.length&&(i.style=(i.style?i.style+"; ":"")+n.join("; "));for(j in i)m.push(j+'="'+CKEDITOR.tools.htmlEncode(i[j])+'" ');m.push(">",o,"</",h,">");
-c.push(m.join(""));(this._||(this._={})).dialog=a;"boolean"==typeof b.isChanged&&(this.isChanged=function(){return b.isChanged});"function"==typeof b.isChanged&&(this.isChanged=b.isChanged);"function"==typeof b.setValue&&(this.setValue=CKEDITOR.tools.override(this.setValue,function(a){return function(c){a.call(this,b.setValue.call(this,c))}}));"function"==typeof b.getValue&&(this.getValue=CKEDITOR.tools.override(this.getValue,function(a){return function(){return b.getValue.call(this,a.call(this))}}));
-CKEDITOR.event.implementOn(this);this.registerEvents(b);this.accessKeyUp&&(this.accessKeyDown&&b.accessKey)&&O(this,a,"CTRL+"+b.accessKey);var p=this;a.on("load",function(){var b=p.getInputElement();if(b){var c=p.type in{checkbox:1,ratio:1}&&CKEDITOR.env.ie&&CKEDITOR.env.version<8?"cke_dialog_ui_focused":"";b.on("focus",function(){a._.tabBarMode=false;a._.hasFocus=true;p.fire("focus");c&&this.addClass(c)});b.on("blur",function(){p.fire("blur");c&&this.removeClass(c)})}});CKEDITOR.tools.extend(this,
-b);this.keyboardFocusable&&(this.tabIndex=b.tabIndex||0,this.focusIndex=a._.focusList.push(this)-1,this.on("focus",function(){a._.currentFocusIndex=p.focusIndex}))}},hbox:function(a,b,c,e,d){if(!(4>arguments.length)){this._||(this._={});var g=this._.children=b,f=d&&d.widths||null,h=d&&d.height||null,m,k={role:"presentation"};d&&d.align&&(k.align=d.align);CKEDITOR.ui.dialog.uiElement.call(this,a,d||{type:"hbox"},e,"table",{},k,function(){var a=['<tbody><tr class="cke_dialog_ui_hbox">'];for(m=0;m<c.length;m++){var b=
-"cke_dialog_ui_hbox_child",e=[];0===m&&(b="cke_dialog_ui_hbox_first");m==c.length-1&&(b="cke_dialog_ui_hbox_last");a.push('<td class="',b,'" role="presentation" ');f?f[m]&&e.push("width:"+r(f[m])):e.push("width:"+Math.floor(100/c.length)+"%");h&&e.push("height:"+r(h));d&&void 0!=d.padding&&e.push("padding:"+r(d.padding));CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&g[m].align)&&e.push("text-align:"+g[m].align);0<e.length&&a.push('style="'+e.join("; ")+'" ');a.push(">",c[m],"</td>")}a.push("</tr></tbody>");
-return a.join("")})}},vbox:function(a,b,c,e,d){if(!(3>arguments.length)){this._||(this._={});var g=this._.children=b,f=d&&d.width||null,h=d&&d.heights||null;CKEDITOR.ui.dialog.uiElement.call(this,a,d||{type:"vbox"},e,"div",null,{role:"presentation"},function(){var b=['<table role="presentation" cellspacing="0" border="0" '];b.push('style="');d&&d.expand&&b.push("height:100%;");b.push("width:"+r(f||"100%"),";");CKEDITOR.env.webkit&&b.push("float:none;");b.push('"');b.push('align="',CKEDITOR.tools.htmlEncode(d&&
-d.align||("ltr"==a.getParentEditor().lang.dir?"left":"right")),'" ');b.push("><tbody>");for(var e=0;e<c.length;e++){var i=[];b.push('<tr><td role="presentation" ');f&&i.push("width:"+r(f||"100%"));h?i.push("height:"+r(h[e])):d&&d.expand&&i.push("height:"+Math.floor(100/c.length)+"%");d&&void 0!=d.padding&&i.push("padding:"+r(d.padding));CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&g[e].align)&&i.push("text-align:"+g[e].align);0<i.length&&b.push('style="',i.join("; "),'" ');b.push(' class="cke_dialog_ui_vbox_child">',
-c[e],"</td></tr>")}b.push("</tbody></table>");return b.join("")})}}}})();CKEDITOR.ui.dialog.uiElement.prototype={getElement:function(){return CKEDITOR.document.getById(this.domId)},getInputElement:function(){return this.getElement()},getDialog:function(){return this._.dialog},setValue:function(a,b){this.getInputElement().setValue(a);!b&&this.fire("change",{value:a});return this},getValue:function(){return this.getInputElement().getValue()},isChanged:function(){return!1},selectParentTab:function(){for(var a=
-this.getInputElement();(a=a.getParent())&&-1==a.$.className.search("cke_dialog_page_contents"););if(!a)return this;a=a.getAttribute("name");this._.dialog._.currentTabId!=a&&this._.dialog.selectPage(a);return this},focus:function(){this.selectParentTab().getInputElement().focus();return this},registerEvents:function(a){var b=/^on([A-Z]\w+)/,c,e=function(a,b,c,d){b.on("load",function(){a.getInputElement().on(c,d,a)})},d;for(d in a)if(c=d.match(b))this.eventProcessors[d]?this.eventProcessors[d].call(this,
-this._.dialog,a[d]):e(this,this._.dialog,c[1].toLowerCase(),a[d]);return this},eventProcessors:{onLoad:function(a,b){a.on("load",b,this)},onShow:function(a,b){a.on("show",b,this)},onHide:function(a,b){a.on("hide",b,this)}},accessKeyDown:function(){this.focus()},accessKeyUp:function(){},disable:function(){var a=this.getElement();this.getInputElement().setAttribute("disabled","true");a.addClass("cke_disabled")},enable:function(){var a=this.getElement();this.getInputElement().removeAttribute("disabled");
-a.removeClass("cke_disabled")},isEnabled:function(){return!this.getElement().hasClass("cke_disabled")},isVisible:function(){return this.getInputElement().isVisible()},isFocusable:function(){return!this.isEnabled()||!this.isVisible()?!1:!0}};CKEDITOR.ui.dialog.hbox.prototype=CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement,{getChild:function(a){if(1>arguments.length)return this._.children.concat();a.splice||(a=[a]);return 2>a.length?this._.children[a[0]]:this._.children[a[0]]&&this._.children[a[0]].getChild?
-this._.children[a[0]].getChild(a.slice(1,a.length)):null}},!0);CKEDITOR.ui.dialog.vbox.prototype=new CKEDITOR.ui.dialog.hbox;(function(){var a={build:function(a,c,e){for(var d=c.children,g,f=[],h=[],m=0;m<d.length&&(g=d[m]);m++){var k=[];f.push(k);h.push(CKEDITOR.dialog._.uiElementBuilders[g.type].build(a,g,k))}return new CKEDITOR.ui.dialog[c.type](a,h,f,e,c)}};CKEDITOR.dialog.addUIElement("hbox",a);CKEDITOR.dialog.addUIElement("vbox",a)})();CKEDITOR.dialogCommand=function(a,b){this.dialogName=a;
-CKEDITOR.tools.extend(this,b,!0)};CKEDITOR.dialogCommand.prototype={exec:function(a){a.openDialog(this.dialogName)},canUndo:!1,editorFocus:1};(function(){var a=/^([a]|[^a])+$/,b=/^\d*$/,c=/^\d*(?:\.\d+)?$/,e=/^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/,d=/^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i,g=/^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/;CKEDITOR.VALIDATE_OR=1;CKEDITOR.VALIDATE_AND=2;CKEDITOR.dialog.validate={functions:function(){var a=arguments;return function(){var b=this&&this.getValue?this.getValue():
-a[0],c=void 0,d=CKEDITOR.VALIDATE_AND,e=[],g;for(g=0;g<a.length;g++)if("function"==typeof a[g])e.push(a[g]);else break;g<a.length&&"string"==typeof a[g]&&(c=a[g],g++);g<a.length&&"number"==typeof a[g]&&(d=a[g]);var j=d==CKEDITOR.VALIDATE_AND?!0:!1;for(g=0;g<e.length;g++)j=d==CKEDITOR.VALIDATE_AND?j&&e[g](b):j||e[g](b);return!j?c:!0}},regex:function(a,b){return function(c){c=this&&this.getValue?this.getValue():c;return!a.test(c)?b:!0}},notEmpty:function(b){return this.regex(a,b)},integer:function(a){return this.regex(b,
-a)},number:function(a){return this.regex(c,a)},cssLength:function(a){return this.functions(function(a){return d.test(CKEDITOR.tools.trim(a))},a)},htmlLength:function(a){return this.functions(function(a){return e.test(CKEDITOR.tools.trim(a))},a)},inlineStyle:function(a){return this.functions(function(a){return g.test(CKEDITOR.tools.trim(a))},a)},equals:function(a,b){return this.functions(function(b){return b==a},b)},notEqual:function(a,b){return this.functions(function(b){return b!=a},b)}};CKEDITOR.on("instanceDestroyed",
-function(a){if(CKEDITOR.tools.isEmpty(CKEDITOR.instances)){for(var b;b=CKEDITOR.dialog._.currentTop;)b.hide();for(var c in w)w[c].remove();w={}}var a=a.editor._.storedDialogs,d;for(d in a)a[d].destroy()})})();CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{openDialog:function(a,b){var c=null,e=CKEDITOR.dialog._.dialogDefinitions[a];null===CKEDITOR.dialog._.currentTop&&J(this);if("function"==typeof e)c=this._.storedDialogs||(this._.storedDialogs={}),c=c[a]||(c[a]=new CKEDITOR.dialog(this,a)),b&&b.call(c,
-c),c.show();else{if("failed"==e)throw K(this),Error('[CKEDITOR.dialog.openDialog] Dialog "'+a+'" failed when loading definition.');"string"==typeof e&&CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(e),function(){"function"!=typeof CKEDITOR.dialog._.dialogDefinitions[a]&&(CKEDITOR.dialog._.dialogDefinitions[a]="failed");this.openDialog(a,b)},this,0,1)}CKEDITOR.skin.loadPart("dialog");return c}})})();
-CKEDITOR.plugins.add("dialog",{requires:"dialogui",init:function(t){t.on("doubleclick",function(u){u.data.dialog&&t.openDialog(u.data.dialog)},null,null,999)}});CKEDITOR.plugins.add("about",{requires:"dialog",init:function(a){var b=a.addCommand("about",new CKEDITOR.dialogCommand("about"));b.modes={wysiwyg:1,source:1};b.canUndo=!1;b.readOnly=1;a.ui.addButton&&a.ui.addButton("About",{label:a.lang.about.title,command:"about",toolbar:"about"});CKEDITOR.dialog.add("about",this.path+"dialogs/about.js")}});(function(){CKEDITOR.plugins.add("a11yhelp",{requires:"dialog",availableLangs:{ar:1,bg:1,ca:1,cs:1,cy:1,da:1,de:1,el:1,en:1,"en-gb":1,eo:1,es:1,et:1,fa:1,fi:1,fr:1,"fr-ca":1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,nb:1,nl:1,no:1,pl:1,pt:1,"pt-br":1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,sr:1,"sr-latn":1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},init:function(b){var c=this;b.addCommand("a11yHelp",{exec:function(){var a=b.langCode,a=c.availableLangs[a]?a:c.availableLangs[a.replace(/-.*/,
-"")]?a.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c.path+"dialogs/lang/"+a+".js"),function(){b.lang.a11yhelp=c.langEntries[a];b.openDialog("a11yHelp")})},modes:{wysiwyg:1,source:1},readOnly:1,canUndo:!1});b.setKeystroke(CKEDITOR.ALT+48,"a11yHelp");CKEDITOR.dialog.add("a11yHelp",this.path+"dialogs/a11yhelp.js");b.on("ariaEditorHelpLabel",function(a){a.data.label=b.lang.common.editorHelp})}})})();(function(){function f(c){var a=this.att,c=c&&c.hasAttribute(a)&&c.getAttribute(a)||"";void 0!==c&&this.setValue(c)}function g(){for(var c,a=0;a<arguments.length;a++)if(arguments[a]instanceof CKEDITOR.dom.element){c=arguments[a];break}if(c){var a=this.att,b=this.getValue();b?c.setAttribute(a,b):c.removeAttribute(a,b)}}var i={id:1,dir:1,classes:1,styles:1};CKEDITOR.plugins.add("dialogadvtab",{requires:"dialog",allowedContent:function(c){c||(c=i);var a=[];c.id&&a.push("id");c.dir&&a.push("dir");var b=
-"";a.length&&(b+="["+a.join(",")+"]");c.classes&&(b+="(*)");c.styles&&(b+="{*}");return b},createAdvancedTab:function(c,a,b){a||(a=i);var d=c.lang.common,h={id:"advanced",label:d.advancedTab,title:d.advancedTab,elements:[{type:"vbox",padding:1,children:[]}]},e=[];if(a.id||a.dir)a.id&&e.push({id:"advId",att:"id",type:"text",requiredContent:b?b+"[id]":null,label:d.id,setup:f,commit:g}),a.dir&&e.push({id:"advLangDir",att:"dir",type:"select",requiredContent:b?b+"[dir]":null,label:d.langDir,"default":"",
-style:"width:100%",items:[[d.notSet,""],[d.langDirLTR,"ltr"],[d.langDirRTL,"rtl"]],setup:f,commit:g}),h.elements[0].children.push({type:"hbox",widths:["50%","50%"],children:[].concat(e)});if(a.styles||a.classes)e=[],a.styles&&e.push({id:"advStyles",att:"style",type:"text",requiredContent:b?b+"{cke-xyz}":null,label:d.styles,"default":"",validate:CKEDITOR.dialog.validate.inlineStyle(d.invalidInlineStyle),onChange:function(){},getStyle:function(a,c){var b=this.getValue().match(RegExp("(?:^|;)\\s*"+a+
-"\\s*:\\s*([^;]*)","i"));return b?b[1]:c},updateStyle:function(a,b){var d=this.getValue(),e=c.document.createElement("span");e.setAttribute("style",d);e.setStyle(a,b);d=CKEDITOR.tools.normalizeCssText(e.getAttribute("style"));this.setValue(d,1)},setup:f,commit:g}),a.classes&&e.push({type:"hbox",widths:["45%","55%"],children:[{id:"advCSSClasses",att:"class",type:"text",requiredContent:b?b+"(cke-xyz)":null,label:d.cssClasses,"default":"",setup:f,commit:g}]}),h.elements[0].children.push({type:"hbox",
-widths:["50%","50%"],children:[].concat(e)});return h}})})();CKEDITOR.plugins.add("basicstyles",{init:function(c){var e=0,d=function(g,d,b,a){if(a){var a=new CKEDITOR.style(a),f=h[b];f.unshift(a);c.attachStyleStateChange(a,function(a){!c.readOnly&&c.getCommand(b).setState(a)});c.addCommand(b,new CKEDITOR.styleCommand(a,{contentForms:f}));c.ui.addButton&&c.ui.addButton(g,{label:d,command:b,toolbar:"basicstyles,"+(e+=10)})}},h={bold:["strong","b",["span",function(a){a=a.styles["font-weight"];return"bold"==a||700<=+a}]],italic:["em","i",["span",function(a){return"italic"==
-a.styles["font-style"]}]],underline:["u",["span",function(a){return"underline"==a.styles["text-decoration"]}]],strike:["s","strike",["span",function(a){return"line-through"==a.styles["text-decoration"]}]],subscript:["sub"],superscript:["sup"]},b=c.config,a=c.lang.basicstyles;d("Bold",a.bold,"bold",b.coreStyles_bold);d("Italic",a.italic,"italic",b.coreStyles_italic);d("Underline",a.underline,"underline",b.coreStyles_underline);d("Strike",a.strike,"strike",b.coreStyles_strike);d("Subscript",a.subscript,
-"subscript",b.coreStyles_subscript);d("Superscript",a.superscript,"superscript",b.coreStyles_superscript);c.setKeystroke([[CKEDITOR.CTRL+66,"bold"],[CKEDITOR.CTRL+73,"italic"],[CKEDITOR.CTRL+85,"underline"]])}});CKEDITOR.config.coreStyles_bold={element:"strong",overrides:"b"};CKEDITOR.config.coreStyles_italic={element:"em",overrides:"i"};CKEDITOR.config.coreStyles_underline={element:"u"};CKEDITOR.config.coreStyles_strike={element:"s",overrides:"strike"};CKEDITOR.config.coreStyles_subscript={element:"sub"};
-CKEDITOR.config.coreStyles_superscript={element:"sup"};(function(){function n(a,f,d,b){if(!a.isReadOnly()&&!a.equals(d.editable())){CKEDITOR.dom.element.setMarker(b,a,"bidi_processed",1);for(var b=a,c=d.editable();(b=b.getParent())&&!b.equals(c);)if(b.getCustomData("bidi_processed")){a.removeStyle("direction");a.removeAttribute("dir");return}b="useComputedState"in d.config?d.config.useComputedState:1;if((b?a.getComputedStyle("direction"):a.getStyle("direction")||a.hasAttribute("dir"))!=f)a.removeStyle("direction"),b?(a.removeAttribute("dir"),f!=a.getComputedStyle("direction")&&
-a.setAttribute("dir",f)):a.setAttribute("dir",f),d.forceNextSelectionCheck()}}function r(a,f,d){var b=a.getCommonAncestor(!1,!0),a=a.clone();a.enlarge(d==CKEDITOR.ENTER_BR?CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS:CKEDITOR.ENLARGE_BLOCK_CONTENTS);if(a.checkBoundaryOfElement(b,CKEDITOR.START)&&a.checkBoundaryOfElement(b,CKEDITOR.END)){for(var c;b&&b.type==CKEDITOR.NODE_ELEMENT&&(c=b.getParent())&&1==c.getChildCount()&&!(b.getName()in f);)b=c;return b.type==CKEDITOR.NODE_ELEMENT&&b.getName()in f&&b}}function m(a){return{context:"p",
-allowedContent:{"h1 h2 h3 h4 h5 h6 table ul ol blockquote div tr p div li td":{propertiesOnly:!0,attributes:"dir"}},requiredContent:"p[dir]",refresh:function(a,d){var b=a.config.useComputedState,c,b=void 0===b||b;if(!b){c=d.lastElement;for(var h=a.editable();c&&!(c.getName()in q||c.equals(h));){var e=c.getParent();if(!e)break;c=e}}c=c||d.block||d.blockLimit;c.equals(a.editable())&&(h=a.getSelection().getRanges()[0].getEnclosedNode())&&h.type==CKEDITOR.NODE_ELEMENT&&(c=h);c&&(b=b?c.getComputedStyle("direction"):
-c.getStyle("direction")||c.getAttribute("dir"),a.getCommand("bidirtl").setState("rtl"==b?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF),a.getCommand("bidiltr").setState("ltr"==b?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF));b=(d.block||d.blockLimit||a.editable()).getDirection(1);if(b!=(a._.selDir||a.lang.dir))a._.selDir=b,a.fire("contentDirChanged",b)},exec:function(f){var d=f.getSelection(),b=f.config.enterMode,c=d.getRanges();if(c&&c.length){for(var h={},e=d.createBookmarks(),c=c.createIterator(),g,
-j=0;g=c.getNextRange(1);){var i=g.getEnclosedNode();if(!i||i&&!(i.type==CKEDITOR.NODE_ELEMENT&&i.getName()in o))i=r(g,p,b);i&&n(i,a,f,h);var k=new CKEDITOR.dom.walker(g),l=e[j].startNode,m=e[j++].endNode;k.evaluator=function(a){return!!(a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in p&&!(a.getName()==(b==CKEDITOR.ENTER_P?"p":"div")&&a.getParent().type==CKEDITOR.NODE_ELEMENT&&"blockquote"==a.getParent().getName())&&a.getPosition(l)&CKEDITOR.POSITION_FOLLOWING&&(a.getPosition(m)&CKEDITOR.POSITION_PRECEDING+
-CKEDITOR.POSITION_CONTAINS)==CKEDITOR.POSITION_PRECEDING)};for(;i=k.next();)n(i,a,f,h);g=g.createIterator();for(g.enlargeBr=b!=CKEDITOR.ENTER_BR;i=g.getNextParagraph(b==CKEDITOR.ENTER_P?"p":"div");)n(i,a,f,h)}CKEDITOR.dom.element.clearAllMarkers(h);f.forceNextSelectionCheck();d.selectBookmarks(e);f.focus()}}}}function s(a){var f=a==j.setAttribute,d=a==j.removeAttribute,b=/\bdirection\s*:\s*(.*?)\s*(:?$|;)/;return function(c,h){if(!this.isReadOnly()){var e;if(e=c==(f||d?"dir":"direction")||"style"==
-c&&(d||b.test(h))){a:{e=this;for(var g=e.getDocument().getBody().getParent();e;){if(e.equals(g)){e=!1;break a}e=e.getParent()}e=!0}e=!e}if(e&&(e=this.getDirection(1),g=a.apply(this,arguments),e!=this.getDirection(1)))return this.getDocument().fire("dirChanged",this),g}return a.apply(this,arguments)}}var p={table:1,ul:1,ol:1,blockquote:1,div:1},o={},q={};CKEDITOR.tools.extend(o,p,{tr:1,p:1,div:1,li:1});CKEDITOR.tools.extend(q,o,{td:1});CKEDITOR.plugins.add("bidi",{init:function(a){function f(b,c,d,
-e,f){a.addCommand(d,new CKEDITOR.command(a,e));a.ui.addButton&&a.ui.addButton(b,{label:c,command:d,toolbar:"bidi,"+f})}if(!a.blockless){var d=a.lang.bidi;f("BidiLtr",d.ltr,"bidiltr",m("ltr"),10);f("BidiRtl",d.rtl,"bidirtl",m("rtl"),20);a.on("contentDom",function(){a.document.on("dirChanged",function(b){a.fire("dirChanged",{node:b.data,dir:b.data.getDirection(1)})})});a.on("contentDirChanged",function(b){var b=(a.lang.dir!=b.data?"add":"remove")+"Class",c=a.ui.space(a.config.toolbarLocation);if(c)c[b]("cke_mixed_dir_content")})}}});
-for(var j=CKEDITOR.dom.element.prototype,l=["setStyle","removeStyle","setAttribute","removeAttribute"],k=0;k<l.length;k++)j[l[k]]=CKEDITOR.tools.override(j[l[k]],s)})();(function(){var k={exec:function(g){var a=g.getCommand("blockquote").state,i=g.getSelection(),c=i&&i.getRanges()[0];if(c){var h=i.createBookmarks();if(CKEDITOR.env.ie){var e=h[0].startNode,b=h[0].endNode,d;if(e&&"blockquote"==e.getParent().getName())for(d=e;d=d.getNext();)if(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()){e.move(d,!0);break}if(b&&"blockquote"==b.getParent().getName())for(d=b;d=d.getPrevious();)if(d.type==CKEDITOR.NODE_ELEMENT&&d.isBlockBoundary()){b.move(d);break}}var f=c.createIterator();
-f.enlargeBr=g.config.enterMode!=CKEDITOR.ENTER_BR;if(a==CKEDITOR.TRISTATE_OFF){for(e=[];a=f.getNextParagraph();)e.push(a);1>e.length&&(a=g.document.createElement(g.config.enterMode==CKEDITOR.ENTER_P?"p":"div"),b=h.shift(),c.insertNode(a),a.append(new CKEDITOR.dom.text("",g.document)),c.moveToBookmark(b),c.selectNodeContents(a),c.collapse(!0),b=c.createBookmark(),e.push(a),h.unshift(b));d=e[0].getParent();c=[];for(b=0;b<e.length;b++)a=e[b],d=d.getCommonAncestor(a.getParent());for(a={table:1,tbody:1,
-tr:1,ol:1,ul:1};a[d.getName()];)d=d.getParent();for(b=null;0<e.length;){for(a=e.shift();!a.getParent().equals(d);)a=a.getParent();a.equals(b)||c.push(a);b=a}for(;0<c.length;)if(a=c.shift(),"blockquote"==a.getName()){for(b=new CKEDITOR.dom.documentFragment(g.document);a.getFirst();)b.append(a.getFirst().remove()),e.push(b.getLast());b.replace(a)}else e.push(a);c=g.document.createElement("blockquote");for(c.insertBefore(e[0]);0<e.length;)a=e.shift(),c.append(a)}else if(a==CKEDITOR.TRISTATE_ON){b=[];
-for(d={};a=f.getNextParagraph();){for(e=c=null;a.getParent();){if("blockquote"==a.getParent().getName()){c=a.getParent();e=a;break}a=a.getParent()}c&&(e&&!e.getCustomData("blockquote_moveout"))&&(b.push(e),CKEDITOR.dom.element.setMarker(d,e,"blockquote_moveout",!0))}CKEDITOR.dom.element.clearAllMarkers(d);a=[];e=[];for(d={};0<b.length;)f=b.shift(),c=f.getParent(),f.getPrevious()?f.getNext()?(f.breakParent(f.getParent()),e.push(f.getNext())):f.remove().insertAfter(c):f.remove().insertBefore(c),c.getCustomData("blockquote_processed")||
-(e.push(c),CKEDITOR.dom.element.setMarker(d,c,"blockquote_processed",!0)),a.push(f);CKEDITOR.dom.element.clearAllMarkers(d);for(b=e.length-1;0<=b;b--){c=e[b];a:{d=c;for(var f=0,k=d.getChildCount(),j=void 0;f<k&&(j=d.getChild(f));f++)if(j.type==CKEDITOR.NODE_ELEMENT&&j.isBlockBoundary()){d=!1;break a}d=!0}d&&c.remove()}if(g.config.enterMode==CKEDITOR.ENTER_BR)for(c=!0;a.length;)if(f=a.shift(),"div"==f.getName()){b=new CKEDITOR.dom.documentFragment(g.document);c&&(f.getPrevious()&&!(f.getPrevious().type==
-CKEDITOR.NODE_ELEMENT&&f.getPrevious().isBlockBoundary()))&&b.append(g.document.createElement("br"));for(c=f.getNext()&&!(f.getNext().type==CKEDITOR.NODE_ELEMENT&&f.getNext().isBlockBoundary());f.getFirst();)f.getFirst().remove().appendTo(b);c&&b.append(g.document.createElement("br"));b.replace(f);c=!1}}i.selectBookmarks(h);g.focus()}},refresh:function(g,a){this.setState(g.elementPath(a.block||a.blockLimit).contains("blockquote",1)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)},context:"blockquote",
-allowedContent:"blockquote",requiredContent:"blockquote"};CKEDITOR.plugins.add("blockquote",{init:function(g){g.blockless||(g.addCommand("blockquote",k),g.ui.addButton&&g.ui.addButton("Blockquote",{label:g.lang.blockquote.toolbar,command:"blockquote",toolbar:"blocks,10"}))}})})();(function(){function v(b){function a(){var e=b.editable();e.on(p,function(b){(!CKEDITOR.env.ie||!n)&&u(b)});CKEDITOR.env.ie&&e.on("paste",function(e){q||(g(),e.data.preventDefault(),u(e),h("paste")||b.openDialog("paste"))});CKEDITOR.env.ie&&(e.on("contextmenu",i,null,null,0),e.on("beforepaste",function(b){b.data&&(!b.data.$.ctrlKey&&!b.data.$.shiftKey)&&i()},null,null,0));e.on("beforecut",function(){!n&&j(b)});var a;e.attachListener(CKEDITOR.env.ie?e:b.document.getDocumentElement(),"mouseup",function(){a=
-setTimeout(function(){r()},0)});b.on("destroy",function(){clearTimeout(a)});e.on("keyup",r)}function c(e){return{type:e,canUndo:"cut"==e,startDisabled:!0,exec:function(){"cut"==this.type&&j();var e;var a=this.type;if(CKEDITOR.env.ie)e=h(a);else try{e=b.document.$.execCommand(a,!1,null)}catch(d){e=!1}e||alert(b.lang.clipboard[this.type+"Error"]);return e}}}function d(){return{canUndo:!1,async:!0,exec:function(b,a){var d=function(a,d){a&&f(a.type,a.dataValue,!!d);b.fire("afterCommandExec",{name:"paste",
-command:c,returnValue:!!a})},c=this;"string"==typeof a?d({type:"auto",dataValue:a},1):b.getClipboardData(d)}}}function g(){q=1;setTimeout(function(){q=0},100)}function i(){n=1;setTimeout(function(){n=0},10)}function h(e){var a=b.document,d=a.getBody(),c=!1,j=function(){c=!0};d.on(e,j);(7<CKEDITOR.env.version?a.$:a.$.selection.createRange()).execCommand(e);d.removeListener(e,j);return c}function f(e,a,d){e={type:e};if(d&&!1===b.fire("beforePaste",e)||!a)return!1;e.dataValue=a;return b.fire("paste",
-e)}function j(){if(CKEDITOR.env.ie&&!CKEDITOR.env.quirks){var e=b.getSelection(),a,d,c;if(e.getType()==CKEDITOR.SELECTION_ELEMENT&&(a=e.getSelectedElement()))d=e.getRanges()[0],c=b.document.createText(""),c.insertBefore(a),d.setStartBefore(c),d.setEndAfter(a),e.selectRanges([d]),setTimeout(function(){a.getParent()&&(c.remove(),e.selectElement(a))},0)}}function l(a,d){var c=b.document,j=b.editable(),l=function(b){b.cancel()},g;if(!c.getById("cke_pastebin")){var i=b.getSelection(),s=i.createBookmarks();
-CKEDITOR.env.ie&&i.root.fire("selectionchange");var k=new CKEDITOR.dom.element((CKEDITOR.env.webkit||j.is("body"))&&!CKEDITOR.env.ie?"body":"div",c);k.setAttributes({id:"cke_pastebin","data-cke-temp":"1"});var f=0,c=c.getWindow();CKEDITOR.env.webkit?(j.append(k),k.addClass("cke_editable"),j.is("body")||(f="static"!=j.getComputedStyle("position")?j:CKEDITOR.dom.element.get(j.$.offsetParent),f=f.getDocumentPosition().y)):j.getAscendant(CKEDITOR.env.ie?"body":"html",1).append(k);k.setStyles({position:"absolute",
-top:c.getScrollPosition().y-f+10+"px",width:"1px",height:Math.max(1,c.getViewPaneSize().height-20)+"px",overflow:"hidden",margin:0,padding:0});(f=k.getParent().isReadOnly())?(k.setOpacity(0),k.setAttribute("contenteditable",!0)):k.setStyle("ltr"==b.config.contentsLangDirection?"left":"right","-1000px");b.on("selectionChange",l,null,null,0);if(CKEDITOR.env.webkit||CKEDITOR.env.gecko)g=j.once("blur",l,null,null,-100);f&&k.focus();f=new CKEDITOR.dom.range(k);f.selectNodeContents(k);var h=f.select();
-CKEDITOR.env.ie&&(g=j.once("blur",function(){b.lockSelection(h)}));var m=CKEDITOR.document.getWindow().getScrollPosition().y;setTimeout(function(){if(CKEDITOR.env.webkit)CKEDITOR.document.getBody().$.scrollTop=m;g&&g.removeListener();CKEDITOR.env.ie&&j.focus();i.selectBookmarks(s);k.remove();var a;if(CKEDITOR.env.webkit&&(a=k.getFirst())&&a.is&&a.hasClass("Apple-style-span"))k=a;b.removeListener("selectionChange",l);d(k.getHtml())},0)}}function s(){if(CKEDITOR.env.ie){b.focus();g();var a=b.focusManager;
-a.lock();if(b.editable().fire(p)&&!h("paste"))return a.unlock(),!1;a.unlock()}else try{if(b.editable().fire(p)&&!b.document.$.execCommand("Paste",!1,null))throw 0;}catch(d){return!1}return!0}function o(a){if("wysiwyg"==b.mode)switch(a.data.keyCode){case CKEDITOR.CTRL+86:case CKEDITOR.SHIFT+45:a=b.editable();g();!CKEDITOR.env.ie&&a.fire("beforepaste");break;case CKEDITOR.CTRL+88:case CKEDITOR.SHIFT+46:b.fire("saveSnapshot"),setTimeout(function(){b.fire("saveSnapshot")},50)}}function u(a){var d={type:"auto"},
-c=b.fire("beforePaste",d);l(a,function(b){b=b.replace(/<span[^>]+data-cke-bookmark[^<]*?<\/span>/ig,"");c&&f(d.type,b,0,1)})}function r(){if("wysiwyg"==b.mode){var a=m("paste");b.getCommand("cut").setState(m("cut"));b.getCommand("copy").setState(m("copy"));b.getCommand("paste").setState(a);b.fire("pasteState",a)}}function m(a){if(t&&a in{paste:1,cut:1})return CKEDITOR.TRISTATE_DISABLED;if("paste"==a)return CKEDITOR.TRISTATE_OFF;var a=b.getSelection(),d=a.getRanges();return a.getType()==CKEDITOR.SELECTION_NONE||
-1==d.length&&d[0].collapsed?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_OFF}var n=0,q=0,t=0,p=CKEDITOR.env.ie?"beforepaste":"paste";(function(){b.on("key",o);b.on("contentDom",a);b.on("selectionChange",function(b){t=b.data.selection.getRanges()[0].checkReadOnly();r()});b.contextMenu&&b.contextMenu.addListener(function(b,a){t=a.getRanges()[0].checkReadOnly();return{cut:m("cut"),copy:m("copy"),paste:m("paste")}})})();(function(){function a(d,c,j,e,l){var g=b.lang.clipboard[c];b.addCommand(c,j);b.ui.addButton&&
-b.ui.addButton(d,{label:g,command:c,toolbar:"clipboard,"+e});b.addMenuItems&&b.addMenuItem(c,{label:g,command:c,group:"clipboard",order:l})}a("Cut","cut",c("cut"),10,1);a("Copy","copy",c("copy"),20,4);a("Paste","paste",d(),30,8)})();b.getClipboardData=function(a,d){function c(a){a.removeListener();a.cancel();d(a.data)}function j(a){a.removeListener();a.cancel();i=!0;d({type:f,dataValue:a.data})}function l(){this.customTitle=a&&a.title}var g=!1,f="auto",i=!1;d||(d=a,a=null);b.on("paste",c,null,null,
-0);b.on("beforePaste",function(a){a.removeListener();g=true;f=a.data.type},null,null,1E3);!1===s()&&(b.removeListener("paste",c),g&&b.fire("pasteDialog",l)?(b.on("pasteDialogCommit",j),b.on("dialogHide",function(a){a.removeListener();a.data.removeListener("pasteDialogCommit",j);setTimeout(function(){i||d(null)},10)})):d(null))}}function w(b){if(CKEDITOR.env.webkit){if(!b.match(/^[^<]*$/g)&&!b.match(/^(<div><br( ?\/)?><\/div>|<div>[^<]*<\/div>)*$/gi))return"html"}else if(CKEDITOR.env.ie){if(!b.match(/^([^<]|<br( ?\/)?>)*$/gi)&&
-!b.match(/^(<p>([^<]|<br( ?\/)?>)*<\/p>|(\r\n))*$/gi))return"html"}else if(CKEDITOR.env.gecko){if(!b.match(/^([^<]|<br( ?\/)?>)*$/gi))return"html"}else return"html";return"htmlifiedtext"}function x(b,a){function c(a){return CKEDITOR.tools.repeat("</p><p>",~~(a/2))+(1==a%2?"<br>":"")}a=a.replace(/\s+/g," ").replace(/> +</g,"><").replace(/<br ?\/>/gi,"<br>");a=a.replace(/<\/?[A-Z]+>/g,function(a){return a.toLowerCase()});if(a.match(/^[^<]$/))return a;CKEDITOR.env.webkit&&-1<a.indexOf("<div>")&&(a=a.replace(/^(<div>(<br>|)<\/div>)(?!$|(<div>(<br>|)<\/div>))/g,
-"<br>").replace(/^(<div>(<br>|)<\/div>){2}(?!$)/g,"<div></div>"),a.match(/<div>(<br>|)<\/div>/)&&(a="<p>"+a.replace(/(<div>(<br>|)<\/div>)+/g,function(a){return c(a.split("</div><div>").length+1)})+"</p>"),a=a.replace(/<\/div><div>/g,"<br>"),a=a.replace(/<\/?div>/g,""));CKEDITOR.env.gecko&&b.enterMode!=CKEDITOR.ENTER_BR&&(CKEDITOR.env.gecko&&(a=a.replace(/^<br><br>$/,"<br>")),-1<a.indexOf("<br><br>")&&(a="<p>"+a.replace(/(<br>){2,}/g,function(a){return c(a.length/4)})+"</p>"));return o(b,a)}function y(){var b=
-new CKEDITOR.htmlParser.filter,a={blockquote:1,dl:1,fieldset:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ol:1,p:1,table:1,ul:1},c=CKEDITOR.tools.extend({br:0},CKEDITOR.dtd.$inline),d={p:1,br:1,"cke:br":1},g=CKEDITOR.dtd,i=CKEDITOR.tools.extend({area:1,basefont:1,embed:1,iframe:1,map:1,object:1,param:1},CKEDITOR.dtd.$nonBodyContent,CKEDITOR.dtd.$cdata),h=function(a){delete a.name;a.add(new CKEDITOR.htmlParser.text(" "))},f=function(a){for(var b=a,c;(b=b.next)&&b.name&&b.name.match(/^h\d$/);){c=new CKEDITOR.htmlParser.element("cke:br");
-c.isEmpty=!0;for(a.add(c);c=b.children.shift();)a.add(c)}};b.addRules({elements:{h1:f,h2:f,h3:f,h4:f,h5:f,h6:f,img:function(a){var a=CKEDITOR.tools.trim(a.attributes.alt||""),b=" ";a&&!a.match(/(^http|\.(jpe?g|gif|png))/i)&&(b=" ["+a+"] ");return new CKEDITOR.htmlParser.text(b)},td:h,th:h,$:function(b){var f=b.name,h;if(i[f])return!1;b.attributes={};if("br"==f)return b;if(a[f])b.name="p";else if(c[f])delete b.name;else if(g[f]){h=new CKEDITOR.htmlParser.element("cke:br");h.isEmpty=!0;if(CKEDITOR.dtd.$empty[f])return h;
-b.add(h,0);h=h.clone();h.isEmpty=!0;b.add(h);delete b.name}d[b.name]||delete b.name;return b}}},{applyToAll:!0});return b}function z(b,a,c){var a=new CKEDITOR.htmlParser.fragment.fromHtml(a),d=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(d,c);var a=d.getHtml(),a=a.replace(/\s*(<\/?[a-z:]+ ?\/?>)\s*/g,"$1").replace(/(<cke:br \/>){2,}/g,"<cke:br />").replace(/(<cke:br \/>)(<\/?p>|<br \/>)/g,"$2").replace(/(<\/?p>|<br \/>)(<cke:br \/>)/g,"$1").replace(/<(cke:)?br( \/)?>/g,"<br>").replace(/<p><\/p>/g,
-""),g=0,a=a.replace(/<\/?p>/g,function(a){if("<p>"==a){if(1<++g)return"</p><p>"}else if(0<--g)return"</p><p>";return a}).replace(/<p><\/p>/g,"");return o(b,a)}function o(b,a){b.enterMode==CKEDITOR.ENTER_BR?a=a.replace(/(<\/p><p>)+/g,function(a){return CKEDITOR.tools.repeat("<br>",2*(a.length/7))}).replace(/<\/?p>/g,""):b.enterMode==CKEDITOR.ENTER_DIV&&(a=a.replace(/<(\/)?p>/g,"<$1div>"));return a}CKEDITOR.plugins.add("clipboard",{requires:"dialog",init:function(b){var a;v(b);CKEDITOR.dialog.add("paste",
-CKEDITOR.getUrl(this.path+"dialogs/paste.js"));b.on("paste",function(a){var b=a.data.dataValue,g=CKEDITOR.dtd.$block;-1<b.indexOf("Apple-")&&(b=b.replace(/<span class="Apple-converted-space">&nbsp;<\/span>/gi," "),"html"!=a.data.type&&(b=b.replace(/<span class="Apple-tab-span"[^>]*>([^<]*)<\/span>/gi,function(a,b){return b.replace(/\t/g,"&nbsp;&nbsp; &nbsp;")})),-1<b.indexOf('<br class="Apple-interchange-newline">')&&(a.data.startsWithEOL=1,a.data.preSniffing="html",b=b.replace(/<br class="Apple-interchange-newline">/,
-"")),b=b.replace(/(<[^>]+) class="Apple-[^"]*"/gi,"$1"));if(b.match(/^<[^<]+cke_(editable|contents)/i)){var i,h,f=new CKEDITOR.dom.element("div");for(f.setHtml(b);1==f.getChildCount()&&(i=f.getFirst())&&i.type==CKEDITOR.NODE_ELEMENT&&(i.hasClass("cke_editable")||i.hasClass("cke_contents"));)f=h=i;h&&(b=h.getHtml().replace(/<br>$/i,""))}CKEDITOR.env.ie?b=b.replace(/^&nbsp;(?: |\r\n)?<(\w+)/g,function(b,d){if(d.toLowerCase()in g){a.data.preSniffing="html";return"<"+d}return b}):CKEDITOR.env.webkit?
-b=b.replace(/<\/(\w+)><div><br><\/div>$/,function(b,d){if(d in g){a.data.endsWithEOL=1;return"</"+d+">"}return b}):CKEDITOR.env.gecko&&(b=b.replace(/(\s)<br>$/,"$1"));a.data.dataValue=b},null,null,3);b.on("paste",function(c){var c=c.data,d=c.type,g=c.dataValue,i,h=b.config.clipboard_defaultContentType||"html";i="html"==d||"html"==c.preSniffing?"html":w(g);"htmlifiedtext"==i?g=x(b.config,g):"text"==d&&"html"==i&&(g=z(b.config,g,a||(a=y(b))));c.startsWithEOL&&(g='<br data-cke-eol="1">'+g);c.endsWithEOL&&
-(g+='<br data-cke-eol="1">');"auto"==d&&(d="html"==i||"html"==h?"html":"text");c.type=d;c.dataValue=g;delete c.preSniffing;delete c.startsWithEOL;delete c.endsWithEOL},null,null,6);b.on("paste",function(a){a=a.data;b.insertHtml(a.dataValue,a.type);setTimeout(function(){b.fire("afterPaste")},0)},null,null,1E3);b.on("pasteDialog",function(a){setTimeout(function(){b.openDialog("paste",a.data)},0)})}})})();(function(){var c='<a id="{id}" class="cke_button cke_button__{name} cke_button_{state} {cls}"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href=\"javascript:void('{titleJs}')\"")+' title="{title}" tabindex="-1" hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="{hasArrow}" aria-disabled="{ariaDisabled}"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(c+=' onkeypress="return false;"');CKEDITOR.env.gecko&&(c+=' onblur="this.style.cssText = this.style.cssText;"');var c=c+(' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" '+
-(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+'="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span class="cke_button_icon cke_button__{iconName}_icon" style="{style}"'),c=c+'>&nbsp;</span><span id="{id}_label" class="cke_button_label cke_button__{name}_label" aria-hidden="false">{label}</span>{arrowHtml}</a>',m=CKEDITOR.addTemplate("buttonArrow",'<span class="cke_button_arrow">'+(CKEDITOR.env.hc?"&#9660;":"")+"</span>"),n=CKEDITOR.addTemplate("button",c);CKEDITOR.plugins.add("button",
-{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_BUTTON,CKEDITOR.ui.button.handler)}});CKEDITOR.UI_BUTTON="button";CKEDITOR.ui.button=function(a){CKEDITOR.tools.extend(this,a,{title:a.label,click:a.click||function(b){b.execCommand(a.command)}});this._={}};CKEDITOR.ui.button.handler={create:function(a){return new CKEDITOR.ui.button(a)}};CKEDITOR.ui.button.prototype={render:function(a,b){var c=CKEDITOR.env,i=this._.id=CKEDITOR.tools.getNextId(),e="",f=this.command,k;this._.editor=a;var d={id:i,button:this,
-editor:a,focus:function(){CKEDITOR.document.getById(i).focus()},execute:function(){this.button.click(a)},attach:function(a){this.button.attach(a)}},o=CKEDITOR.tools.addFunction(function(a){if(d.onkey)return a=new CKEDITOR.dom.event(a),!1!==d.onkey(d,a.getKeystroke())}),p=CKEDITOR.tools.addFunction(function(a){var b;d.onfocus&&(b=!1!==d.onfocus(d,new CKEDITOR.dom.event(a)));return b}),l=0;d.clickFn=k=CKEDITOR.tools.addFunction(function(){l&&(a.unlockSelection(1),l=0);d.execute();c.iOS&&a.focus()});
-if(this.modes){var j={},g=function(){var b=a.mode;b&&(b=this.modes[b]?void 0!=j[b]?j[b]:CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,b=a.readOnly&&!this.readOnly?CKEDITOR.TRISTATE_DISABLED:b,this.setState(b),this.refresh&&this.refresh())};a.on("beforeModeUnload",function(){a.mode&&this._.state!=CKEDITOR.TRISTATE_DISABLED&&(j[a.mode]=this._.state)},this);a.on("activeFilterChange",g,this);a.on("mode",g,this);!this.readOnly&&a.on("readOnly",g,this)}else if(f&&(f=a.getCommand(f)))f.on("state",function(){this.setState(f.state)},
-this),e+=f.state==CKEDITOR.TRISTATE_ON?"on":f.state==CKEDITOR.TRISTATE_DISABLED?"disabled":"off";if(this.directional)a.on("contentDirChanged",function(b){var c=CKEDITOR.document.getById(this._.id),d=c.getFirst(),b=b.data;b!=a.lang.dir?c.addClass("cke_"+b):c.removeClass("cke_ltr").removeClass("cke_rtl");d.setAttribute("style",CKEDITOR.skin.getIconStyle(h,"rtl"==b,this.icon,this.iconOffset))},this);f||(e+="off");var h=g=this.name||this.command;this.icon&&!/\./.test(this.icon)&&(h=this.icon,this.icon=
-null);e={id:i,name:g,iconName:h,label:this.label,cls:this.className||"",state:e,ariaDisabled:"disabled"==e?"true":"false",title:this.title,titleJs:c.gecko&&!c.hc?"":(this.title||"").replace("'",""),hasArrow:this.hasArrow?"true":"false",keydownFn:o,focusFn:p,clickFn:k,style:CKEDITOR.skin.getIconStyle(h,"rtl"==a.lang.dir,this.icon,this.iconOffset),arrowHtml:this.hasArrow?m.output():""};n.output(e,b);if(this.onRender)this.onRender();return d},setState:function(a){if(this._.state==a)return!1;this._.state=
-a;var b=CKEDITOR.document.getById(this._.id);return b?(b.setState(a,"cke_button"),a==CKEDITOR.TRISTATE_DISABLED?b.setAttribute("aria-disabled",!0):b.removeAttribute("aria-disabled"),this.hasArrow?(a=a==CKEDITOR.TRISTATE_ON?this._.editor.lang.button.selectedLabel.replace(/%1/g,this.label):this.label,CKEDITOR.document.getById(this._.id+"_label").setText(a)):a==CKEDITOR.TRISTATE_ON?b.setAttribute("aria-pressed",!0):b.removeAttribute("aria-pressed"),!0):!1},getState:function(){return this._.state},toFeature:function(a){if(this._.feature)return this._.feature;
-var b=this;!this.allowedContent&&(!this.requiredContent&&this.command)&&(b=a.getCommand(this.command)||b);return this._.feature=b}};CKEDITOR.ui.prototype.addButton=function(a,b){this.add(a,CKEDITOR.UI_BUTTON,b)}})();CKEDITOR.plugins.add("panelbutton",{requires:"button",onLoad:function(){function e(c){var a=this._;a.state!=CKEDITOR.TRISTATE_DISABLED&&(this.createPanel(c),a.on?a.panel.hide():a.panel.showBlock(this._.id,this.document.getById(this._.id),4))}CKEDITOR.ui.panelButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(c){var a=c.panel||{};delete c.panel;this.base(c);this.document=a.parent&&a.parent.getDocument()||CKEDITOR.document;a.block={attributes:a.attributes};this.hasArrow=a.toolbarRelated=
-!0;this.click=e;this._={panelDefinition:a}},statics:{handler:{create:function(c){return new CKEDITOR.ui.panelButton(c)}}},proto:{createPanel:function(c){var a=this._;if(!a.panel){var f=this._.panelDefinition,e=this._.panelDefinition.block,g=f.parent||CKEDITOR.document.getBody(),d=this._.panel=new CKEDITOR.ui.floatPanel(c,g,f),f=d.addBlock(a.id,e),b=this;d.onShow=function(){b.className&&this.element.addClass(b.className+"_panel");b.setState(CKEDITOR.TRISTATE_ON);a.on=1;b.editorFocus&&c.focus();if(b.onOpen)b.onOpen()};
-d.onHide=function(d){b.className&&this.element.getFirst().removeClass(b.className+"_panel");b.setState(b.modes&&b.modes[c.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);a.on=0;if(!d&&b.onClose)b.onClose()};d.onEscape=function(){d.hide(1);b.document.getById(a.id).focus()};if(this.onBlock)this.onBlock(d,f);f.onHide=function(){a.on=0;b.setState(CKEDITOR.TRISTATE_OFF)}}}}})},beforeInit:function(e){e.ui.addHandler(CKEDITOR.UI_PANELBUTTON,CKEDITOR.ui.panelButton.handler)}});
-CKEDITOR.UI_PANELBUTTON="panelbutton";(function(){CKEDITOR.plugins.add("panel",{beforeInit:function(a){a.ui.addHandler(CKEDITOR.UI_PANEL,CKEDITOR.ui.panel.handler)}});CKEDITOR.UI_PANEL="panel";CKEDITOR.ui.panel=function(a,b){b&&CKEDITOR.tools.extend(this,b);CKEDITOR.tools.extend(this,{className:"",css:[]});this.id=CKEDITOR.tools.getNextId();this.document=a;this.isFramed=this.forceIFrame||this.css.length;this._={blocks:{}}};CKEDITOR.ui.panel.handler={create:function(a){return new CKEDITOR.ui.panel(a)}};var f=CKEDITOR.addTemplate("panel",
-'<div lang="{langCode}" id="{id}" dir={dir} class="cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style="z-index:{z-index}" role="presentation">{frame}</div>'),g=CKEDITOR.addTemplate("panel-frame",'<iframe id="{id}" class="cke_panel_frame" role="presentation" frameborder="0" src="{src}"></iframe>'),h=CKEDITOR.addTemplate("panel-frame-inner",'<!DOCTYPE html><html class="cke_panel_container {env}" dir="{dir}" lang="{langCode}"><head>{css}</head><body class="cke_{dir}" style="margin:0;padding:0" onload="{onload}"></body></html>');
-CKEDITOR.ui.panel.prototype={render:function(a,b){this.getHolderElement=function(){var a=this._.holder;if(!a){if(this.isFramed){var a=this.document.getById(this.id+"_frame"),b=a.getParent(),a=a.getFrameDocument();CKEDITOR.env.iOS&&b.setStyles({overflow:"scroll","-webkit-overflow-scrolling":"touch"});b=CKEDITOR.tools.addFunction(CKEDITOR.tools.bind(function(){this.isLoaded=!0;if(this.onLoad)this.onLoad()},this));a.write(h.output(CKEDITOR.tools.extend({css:CKEDITOR.tools.buildStyleHtml(this.css),onload:"window.parent.CKEDITOR.tools.callFunction("+
-b+");"},d)));a.getWindow().$.CKEDITOR=CKEDITOR;a.on("keydown",function(a){var b=a.data.getKeystroke(),c=this.document.getById(this.id).getAttribute("dir");this._.onKeyDown&&!1===this._.onKeyDown(b)?a.data.preventDefault():(27==b||b==("rtl"==c?39:37))&&this.onEscape&&!1===this.onEscape(b)&&a.data.preventDefault()},this);a=a.getBody();a.unselectable();CKEDITOR.env.air&&CKEDITOR.tools.callFunction(b)}else a=this.document.getById(this.id);this._.holder=a}return a};var d={editorId:a.id,id:this.id,langCode:a.langCode,
-dir:a.lang.dir,cls:this.className,frame:"",env:CKEDITOR.env.cssClass,"z-index":a.config.baseFloatZIndex+1};if(this.isFramed){var e=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie?"javascript:void(function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+"}())":"";d.frame=g.output({id:this.id+"_frame",src:e})}e=f.output(d);b&&b.push(e);return e},addBlock:function(a,b){b=this._.blocks[a]=b instanceof CKEDITOR.ui.panel.block?b:new CKEDITOR.ui.panel.block(this.getHolderElement(),
-b);this._.currentBlock||this.showBlock(a);return b},getBlock:function(a){return this._.blocks[a]},showBlock:function(a){var a=this._.blocks[a],b=this._.currentBlock,d=!this.forceIFrame||CKEDITOR.env.ie?this._.holder:this.document.getById(this.id+"_frame");b&&b.hide();this._.currentBlock=a;CKEDITOR.fire("ariaWidget",d);a._.focusIndex=-1;this._.onKeyDown=a.onKeyDown&&CKEDITOR.tools.bind(a.onKeyDown,a);a.show();return a},destroy:function(){this.element&&this.element.remove()}};CKEDITOR.ui.panel.block=
-CKEDITOR.tools.createClass({$:function(a,b){this.element=a.append(a.getDocument().createElement("div",{attributes:{tabindex:-1,"class":"cke_panel_block"},styles:{display:"none"}}));b&&CKEDITOR.tools.extend(this,b);this.element.setAttributes({role:this.attributes.role||"presentation","aria-label":this.attributes["aria-label"],title:this.attributes.title||this.attributes["aria-label"]});this.keys={};this._.focusIndex=-1;this.element.disableContextMenu()},_:{markItem:function(a){-1!=a&&(a=this.element.getElementsByTag("a").getItem(this._.focusIndex=
-a),CKEDITOR.env.webkit&&a.getDocument().getWindow().focus(),a.focus(),this.onMark&&this.onMark(a))}},proto:{show:function(){this.element.setStyle("display","")},hide:function(){(!this.onHide||!0!==this.onHide.call(this))&&this.element.setStyle("display","none")},onKeyDown:function(a,b){var d=this.keys[a];switch(d){case "next":for(var e=this._.focusIndex,d=this.element.getElementsByTag("a"),c;c=d.getItem(++e);)if(c.getAttribute("_cke_focus")&&c.$.offsetWidth){this._.focusIndex=e;c.focus();break}return!c&&
-!b?(this._.focusIndex=-1,this.onKeyDown(a,1)):!1;case "prev":e=this._.focusIndex;for(d=this.element.getElementsByTag("a");0<e&&(c=d.getItem(--e));){if(c.getAttribute("_cke_focus")&&c.$.offsetWidth){this._.focusIndex=e;c.focus();break}c=null}return!c&&!b?(this._.focusIndex=d.count(),this.onKeyDown(a,1)):!1;case "click":case "mouseup":return e=this._.focusIndex,(c=0<=e&&this.element.getElementsByTag("a").getItem(e))&&(c.$[d]?c.$[d]():c.$["on"+d]()),!1}return!0}}})})();CKEDITOR.plugins.add("floatpanel",{requires:"panel"});
-(function(){function r(a,b,c,i,f){var f=CKEDITOR.tools.genKey(b.getUniqueId(),c.getUniqueId(),a.lang.dir,a.uiColor||"",i.css||"",f||""),h=g[f];h||(h=g[f]=new CKEDITOR.ui.panel(b,i),h.element=c.append(CKEDITOR.dom.element.createFromHtml(h.render(a),b)),h.element.setStyles({display:"none",position:"absolute"}));return h}var g={};CKEDITOR.ui.floatPanel=CKEDITOR.tools.createClass({$:function(a,b,c,i){function f(){d.hide()}c.forceIFrame=1;c.toolbarRelated&&a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&
-(b=CKEDITOR.document.getById("cke_"+a.name));var h=b.getDocument(),i=r(a,h,b,c,i||0),j=i.element,l=j.getFirst(),d=this;j.disableContextMenu();this.element=j;this._={editor:a,panel:i,parentElement:b,definition:c,document:h,iframe:l,children:[],dir:a.lang.dir};a.on("mode",f);a.on("resize",f);if(!CKEDITOR.env.iOS)h.getWindow().on("resize",f)},proto:{addBlock:function(a,b){return this._.panel.addBlock(a,b)},addListBlock:function(a,b){return this._.panel.addListBlock(a,b)},getBlock:function(a){return this._.panel.getBlock(a)},
-showBlock:function(a,b,c,i,f,h){var j=this._.panel,l=j.showBlock(a);this.allowBlur(!1);a=this._.editor.editable();this._.returnFocus=a.hasFocus?a:new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement);this._.hideTimeout=0;var d=this.element,a=this._.iframe,a=CKEDITOR.env.ie?a:new CKEDITOR.dom.window(a.$.contentWindow),g=d.getDocument(),o=this._.parentElement.getPositionedAncestor(),p=b.getDocumentPosition(g),g=o?o.getDocumentPosition(g):{x:0,y:0},m="rtl"==this._.dir,e=p.x+(i||0)-g.x,k=p.y+(f||
-0)-g.y;if(m&&(1==c||4==c))e+=b.$.offsetWidth;else if(!m&&(2==c||3==c))e+=b.$.offsetWidth-1;if(3==c||4==c)k+=b.$.offsetHeight-1;this._.panel._.offsetParentId=b.getId();d.setStyles({top:k+"px",left:0,display:""});d.setOpacity(0);d.getFirst().removeStyle("width");this._.editor.focusManager.add(a);this._.blurSet||(CKEDITOR.event.useCapture=!0,a.on("blur",function(a){function q(){delete this._.returnFocus;this.hide()}this.allowBlur()&&a.data.getPhase()==CKEDITOR.EVENT_PHASE_AT_TARGET&&(this.visible&&!this._.activeChild)&&
-(CKEDITOR.env.iOS?this._.hideTimeout||(this._.hideTimeout=CKEDITOR.tools.setTimeout(q,0,this)):q.call(this))},this),a.on("focus",function(){this._.focused=!0;this.hideChild();this.allowBlur(!0)},this),CKEDITOR.env.iOS&&(a.on("touchstart",function(){clearTimeout(this._.hideTimeout)},this),a.on("touchend",function(){this._.hideTimeout=0;this.focus()},this)),CKEDITOR.event.useCapture=!1,this._.blurSet=1);j.onEscape=CKEDITOR.tools.bind(function(a){if(this.onEscape&&this.onEscape(a)===false)return false},
-this);CKEDITOR.tools.setTimeout(function(){var a=CKEDITOR.tools.bind(function(){d.removeStyle("width");if(l.autoSize){var a=l.element.getDocument(),a=(CKEDITOR.env.webkit?l.element:a.getBody()).$.scrollWidth;CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&a>0)&&(a=a+((d.$.offsetWidth||0)-(d.$.clientWidth||0)+3));d.setStyle("width",a+10+"px");a=l.element.$.scrollHeight;CKEDITOR.env.ie&&(CKEDITOR.env.quirks&&a>0)&&(a=a+((d.$.offsetHeight||0)-(d.$.clientHeight||0)+3));d.setStyle("height",a+"px");j._.currentBlock.element.setStyle("display",
-"none").removeStyle("display")}else d.removeStyle("height");m&&(e=e-d.$.offsetWidth);d.setStyle("left",e+"px");var b=j.element.getWindow(),a=d.$.getBoundingClientRect(),b=b.getViewPaneSize(),c=a.width||a.right-a.left,f=a.height||a.bottom-a.top,i=m?a.right:b.width-a.left,g=m?b.width-a.right:a.left;m?i<c&&(e=g>c?e+c:b.width>c?e-a.left:e-a.right+b.width):i<c&&(e=g>c?e-c:b.width>c?e-a.right+b.width:e-a.left);c=a.top;b.height-a.top<f&&(k=c>f?k-f:b.height>f?k-a.bottom+b.height:k-a.top);if(CKEDITOR.env.ie){b=
-a=new CKEDITOR.dom.element(d.$.offsetParent);b.getName()=="html"&&(b=b.getDocument().getBody());b.getComputedStyle("direction")=="rtl"&&(e=CKEDITOR.env.ie8Compat?e-d.getDocument().getDocumentElement().$.scrollLeft*2:e-(a.$.scrollWidth-a.$.clientWidth))}var a=d.getFirst(),n;(n=a.getCustomData("activePanel"))&&n.onHide&&n.onHide.call(this,1);a.setCustomData("activePanel",this);d.setStyles({top:k+"px",left:e+"px"});d.setOpacity(1);h&&h()},this);j.isLoaded?a():j.onLoad=a;CKEDITOR.tools.setTimeout(function(){var a=
-CKEDITOR.env.webkit&&CKEDITOR.document.getWindow().getScrollPosition().y;this.focus();l.element.focus();if(CKEDITOR.env.webkit)CKEDITOR.document.getBody().$.scrollTop=a;this.allowBlur(true);this._.editor.fire("panelShow",this)},0,this)},CKEDITOR.env.air?200:0,this);this.visible=1;this.onShow&&this.onShow.call(this)},focus:function(){if(CKEDITOR.env.webkit){var a=CKEDITOR.document.getActive();a&&!a.equals(this._.iframe)&&a.$.blur()}(this._.lastFocused||this._.iframe.getFrameDocument().getWindow()).focus()},
-blur:function(){var a=this._.iframe.getFrameDocument().getActive();a&&a.is("a")&&(this._.lastFocused=a)},hide:function(a){if(this.visible&&(!this.onHide||!0!==this.onHide.call(this))){this.hideChild();CKEDITOR.env.gecko&&this._.iframe.getFrameDocument().$.activeElement.blur();this.element.setStyle("display","none");this.visible=0;this.element.getFirst().removeCustomData("activePanel");if(a=a&&this._.returnFocus)CKEDITOR.env.webkit&&a.type&&a.getWindow().$.focus(),a.focus();delete this._.lastFocused;
-this._.editor.fire("panelHide",this)}},allowBlur:function(a){var b=this._.panel;void 0!=a&&(b.allowBlur=a);return b.allowBlur},showAsChild:function(a,b,c,g,f,h){this._.activeChild==a&&a._.panel._.offsetParentId==c.getId()||(this.hideChild(),a.onHide=CKEDITOR.tools.bind(function(){CKEDITOR.tools.setTimeout(function(){this._.focused||this.hide()},0,this)},this),this._.activeChild=a,this._.focused=!1,a.showBlock(b,c,g,f,h),this.blur(),(CKEDITOR.env.ie7Compat||CKEDITOR.env.ie6Compat)&&setTimeout(function(){a.element.getChild(0).$.style.cssText+=
-""},100))},hideChild:function(a){var b=this._.activeChild;b&&(delete b.onHide,delete this._.activeChild,b.hide(),a&&this.focus())}}});CKEDITOR.on("instanceDestroyed",function(){var a=CKEDITOR.tools.isEmpty(CKEDITOR.instances),b;for(b in g){var c=g[b];a?c.destroy():c.element.hide()}a&&(g={})})})();CKEDITOR.plugins.add("colorbutton",{requires:"panelbutton,floatpanel",init:function(c){function o(m,g,d,h){var i=new CKEDITOR.style(j["colorButton_"+g+"Style"]),k=CKEDITOR.tools.getNextId()+"_colorBox";c.ui.add(m,CKEDITOR.UI_PANELBUTTON,{label:d,title:d,modes:{wysiwyg:1},editorFocus:0,toolbar:"colors,"+h,allowedContent:i,requiredContent:i,panel:{css:CKEDITOR.skin.getPath("editor"),attributes:{role:"listbox","aria-label":f.panelTitle}},onBlock:function(a,b){b.autoSize=!0;b.element.addClass("cke_colorblock");
-b.element.setHtml(q(a,g,k));b.element.getDocument().getBody().setStyle("overflow","hidden");CKEDITOR.ui.fire("ready",this);var e=b.keys,d="rtl"==c.lang.dir;e[d?37:39]="next";e[40]="next";e[9]="next";e[d?39:37]="prev";e[38]="prev";e[CKEDITOR.SHIFT+9]="prev";e[32]="click"},refresh:function(){c.activeFilter.check(i)||this.setState(CKEDITOR.TRISTATE_DISABLED)},onOpen:function(){var a=c.getSelection(),a=a&&a.getStartElement(),a=c.elementPath(a),b;if(a){a=a.block||a.blockLimit||c.document.getBody();do b=
-a&&a.getComputedStyle("back"==g?"background-color":"color")||"transparent";while("back"==g&&"transparent"==b&&a&&(a=a.getParent()));if(!b||"transparent"==b)b="#ffffff";this._.panel._.iframe.getFrameDocument().getById(k).setStyle("background-color",b);return b}}})}function q(m,g,d){var h=[],i=j.colorButton_colors.split(","),k=c.plugins.colordialog&&!1!==j.colorButton_enableMore,a=i.length+(k?2:1),b=CKEDITOR.tools.addFunction(function(a,b){if("?"==a){var e=arguments.callee,d=function(a){this.removeListener("ok",
-d);this.removeListener("cancel",d);"ok"==a.name&&e(this.getContentElement("picker","selectedColor").getValue(),b)};c.openDialog("colordialog",function(){this.on("ok",d);this.on("cancel",d)})}else{c.focus();m.hide();c.fire("saveSnapshot");c.removeStyle(new CKEDITOR.style(j["colorButton_"+b+"Style"],{color:"inherit"}));if(a){var f=j["colorButton_"+b+"Style"];f.childRule="back"==b?function(a){return p(a)}:function(a){return!(a.is("a")||a.getElementsByTag("a").count())||p(a)};c.applyStyle(new CKEDITOR.style(f,
-{color:a}))}c.fire("saveSnapshot")}});h.push('<a class="cke_colorauto" _cke_focus=1 hidefocus=true title="',f.auto,'" onclick="CKEDITOR.tools.callFunction(',b,",null,'",g,"');return false;\" href=\"javascript:void('",f.auto,'\')" role="option" aria-posinset="1" aria-setsize="',a,'"><table role="presentation" cellspacing=0 cellpadding=0 width="100%"><tr><td><span class="cke_colorbox" id="',d,'"></span></td><td colspan=7 align=center>',f.auto,'</td></tr></table></a><table role="presentation" cellspacing=0 cellpadding=0 width="100%">');
-for(d=0;d<i.length;d++){0===d%8&&h.push("</tr><tr>");var e=i[d].split("/"),l=e[0],n=e[1]||l;e[1]||(l="#"+l.replace(/^(.)(.)(.)$/,"$1$1$2$2$3$3"));e=c.lang.colorbutton.colors[n]||n;h.push('<td><a class="cke_colorbox" _cke_focus=1 hidefocus=true title="',e,'" onclick="CKEDITOR.tools.callFunction(',b,",'",l,"','",g,"'); return false;\" href=\"javascript:void('",e,'\')" role="option" aria-posinset="',d+2,'" aria-setsize="',a,'"><span class="cke_colorbox" style="background-color:#',n,'"></span></a></td>')}k&&
-h.push('</tr><tr><td colspan=8 align=center><a class="cke_colormore" _cke_focus=1 hidefocus=true title="',f.more,'" onclick="CKEDITOR.tools.callFunction(',b,",'?','",g,"');return false;\" href=\"javascript:void('",f.more,"')\"",' role="option" aria-posinset="',a,'" aria-setsize="',a,'">',f.more,"</a></td>");h.push("</tr></table>");return h.join("")}function p(c){return"false"==c.getAttribute("contentEditable")||c.getAttribute("data-nostyle")}var j=c.config,f=c.lang.colorbutton;CKEDITOR.env.hc||(o("TextColor",
-"fore",f.textColorTitle,10),o("BGColor","back",f.bgColorTitle,20))}});CKEDITOR.config.colorButton_colors="000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF";CKEDITOR.config.colorButton_foreStyle={element:"span",styles:{color:"#(color)"},overrides:[{element:"font",attributes:{color:null}}]};
-CKEDITOR.config.colorButton_backStyle={element:"span",styles:{"background-color":"#(color)"}};CKEDITOR.plugins.colordialog={requires:"dialog",init:function(b){var c=new CKEDITOR.dialogCommand("colordialog");c.editorFocus=!1;b.addCommand("colordialog",c);CKEDITOR.dialog.add("colordialog",this.path+"dialogs/colordialog.js");b.getColorFromDialog=function(c,f){var d=function(a){this.removeListener("ok",d);this.removeListener("cancel",d);a="ok"==a.name?this.getValueOf("picker","selectedColor"):null;c.call(f,a)},e=function(a){a.on("ok",d);a.on("cancel",d)};b.execCommand("colordialog");if(b._.storedDialogs&&
-b._.storedDialogs.colordialog)e(b._.storedDialogs.colordialog);else CKEDITOR.on("dialogDefinition",function(a){if("colordialog"==a.data.name){var b=a.data.definition;a.removeListener();b.onLoad=CKEDITOR.tools.override(b.onLoad,function(a){return function(){e(this);b.onLoad=a;"function"==typeof a&&a.call(this)}})}})}}};CKEDITOR.plugins.add("colordialog",CKEDITOR.plugins.colordialog);(function(){CKEDITOR.plugins.add("templates",{requires:"dialog",init:function(a){CKEDITOR.dialog.add("templates",CKEDITOR.getUrl(this.path+"dialogs/templates.js"));a.addCommand("templates",new CKEDITOR.dialogCommand("templates"));a.ui.addButton&&a.ui.addButton("Templates",{label:a.lang.templates.button,command:"templates",toolbar:"doctools,10"})}});var c={},f={};CKEDITOR.addTemplates=function(a,d){c[a]=d};CKEDITOR.getTemplates=function(a){return c[a]};CKEDITOR.loadTemplates=function(a,d){for(var e=
-[],b=0,c=a.length;b<c;b++)f[a[b]]||(e.push(a[b]),f[a[b]]=1);e.length?CKEDITOR.scriptLoader.load(e,d):setTimeout(d,0)}})();CKEDITOR.config.templates_files=[CKEDITOR.getUrl("plugins/templates/templates/default.js")];CKEDITOR.config.templates_replaceContent=!0;CKEDITOR.plugins.add("menu",{requires:"floatpanel",beforeInit:function(g){for(var h=g.config.menu_groups.split(","),m=g._.menuGroups={},l=g._.menuItems={},a=0;a<h.length;a++)m[h[a]]=a+1;g.addMenuGroup=function(b,a){m[b]=a||100};g.addMenuItem=function(a,c){m[c.group]&&(l[a]=new CKEDITOR.menuItem(this,a,c))};g.addMenuItems=function(a){for(var c in a)this.addMenuItem(c,a[c])};g.getMenuItem=function(a){return l[a]};g.removeMenuItem=function(a){delete l[a]}}});
-(function(){function g(a){a.sort(function(a,c){return a.group<c.group?-1:a.group>c.group?1:a.order<c.order?-1:a.order>c.order?1:0})}var h='<span class="cke_menuitem"><a id="{id}" class="cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href="{href}" title="{title}" tabindex="-1"_cke_focus=1 hidefocus="true" role="{role}" aria-haspopup="{hasPopup}" aria-disabled="{disabled}" {ariaChecked}';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(h+=' onkeypress="return false;"');CKEDITOR.env.gecko&&
-(h+=' onblur="this.style.cssText = this.style.cssText;"');var h=h+(' onmouseover="CKEDITOR.tools.callFunction({hoverFn},{index});" onmouseout="CKEDITOR.tools.callFunction({moveOutFn},{index});" '+(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+'="CKEDITOR.tools.callFunction({clickFn},{index}); return false;">'),m=CKEDITOR.addTemplate("menuItem",h+'<span class="cke_menubutton_inner"><span class="cke_menubutton_icon"><span class="cke_button_icon cke_button__{iconName}_icon" style="{iconStyle}"></span></span><span class="cke_menubutton_label">{label}</span>{arrowHtml}</span></a></span>'),
-l=CKEDITOR.addTemplate("menuArrow",'<span class="cke_menuarrow"><span>{label}</span></span>');CKEDITOR.menu=CKEDITOR.tools.createClass({$:function(a,b){b=this._.definition=b||{};this.id=CKEDITOR.tools.getNextId();this.editor=a;this.items=[];this._.listeners=[];this._.level=b.level||1;var c=CKEDITOR.tools.extend({},b.panel,{css:[CKEDITOR.skin.getPath("editor")],level:this._.level-1,block:{}}),k=c.block.attributes=c.attributes||{};!k.role&&(k.role="menu");this._.panelDefinition=c},_:{onShow:function(){var a=
-this.editor.getSelection(),b=a&&a.getStartElement(),c=this.editor.elementPath(),k=this._.listeners;this.removeAll();for(var e=0;e<k.length;e++){var j=k[e](b,a,c);if(j)for(var i in j){var f=this.editor.getMenuItem(i);if(f&&(!f.command||this.editor.getCommand(f.command).state))f.state=j[i],this.add(f)}}},onClick:function(a){this.hide();if(a.onClick)a.onClick();else a.command&&this.editor.execCommand(a.command)},onEscape:function(a){var b=this.parent;b?b._.panel.hideChild(1):27==a&&this.hide(1);return!1},
-onHide:function(){this.onHide&&this.onHide()},showSubMenu:function(a){var b=this._.subMenu,c=this.items[a];if(c=c.getItems&&c.getItems()){b?b.removeAll():(b=this._.subMenu=new CKEDITOR.menu(this.editor,CKEDITOR.tools.extend({},this._.definition,{level:this._.level+1},!0)),b.parent=this,b._.onClick=CKEDITOR.tools.bind(this._.onClick,this));for(var k in c){var e=this.editor.getMenuItem(k);e&&(e.state=c[k],b.add(e))}var j=this._.panel.getBlock(this.id).element.getDocument().getById(this.id+(""+a));setTimeout(function(){b.show(j,
-2)},0)}else this._.panel.hideChild(1)}},proto:{add:function(a){a.order||(a.order=this.items.length);this.items.push(a)},removeAll:function(){this.items=[]},show:function(a,b,c,k){if(!this.parent&&(this._.onShow(),!this.items.length))return;var b=b||("rtl"==this.editor.lang.dir?2:1),e=this.items,j=this.editor,i=this._.panel,f=this._.element;if(!i){i=this._.panel=new CKEDITOR.ui.floatPanel(this.editor,CKEDITOR.document.getBody(),this._.panelDefinition,this._.level);i.onEscape=CKEDITOR.tools.bind(function(a){if(!1===
-this._.onEscape(a))return!1},this);i.onShow=function(){i._.panel.getHolderElement().getParent().addClass("cke cke_reset_all")};i.onHide=CKEDITOR.tools.bind(function(){this._.onHide&&this._.onHide()},this);f=i.addBlock(this.id,this._.panelDefinition.block);f.autoSize=!0;var d=f.keys;d[40]="next";d[9]="next";d[38]="prev";d[CKEDITOR.SHIFT+9]="prev";d["rtl"==j.lang.dir?37:39]=CKEDITOR.env.ie?"mouseup":"click";d[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(d[13]="mouseup");f=this._.element=
-f.element;d=f.getDocument();d.getBody().setStyle("overflow","hidden");d.getElementsByTag("html").getItem(0).setStyle("overflow","hidden");this._.itemOverFn=CKEDITOR.tools.addFunction(function(a){clearTimeout(this._.showSubTimeout);this._.showSubTimeout=CKEDITOR.tools.setTimeout(this._.showSubMenu,j.config.menu_subMenuDelay||400,this,[a])},this);this._.itemOutFn=CKEDITOR.tools.addFunction(function(){clearTimeout(this._.showSubTimeout)},this);this._.itemClickFn=CKEDITOR.tools.addFunction(function(a){var b=
-this.items[a];if(b.state==CKEDITOR.TRISTATE_DISABLED)this.hide(1);else if(b.getItems)this._.showSubMenu(a);else this._.onClick(b)},this)}g(e);for(var d=j.elementPath(),d=['<div class="cke_menu'+(d&&d.direction()!=j.lang.dir?" cke_mixed_dir_content":"")+'" role="presentation">'],h=e.length,m=h&&e[0].group,l=0;l<h;l++){var n=e[l];m!=n.group&&(d.push('<div class="cke_menuseparator" role="separator"></div>'),m=n.group);n.render(this,l,d)}d.push("</div>");f.setHtml(d.join(""));CKEDITOR.ui.fire("ready",
-this);this.parent?this.parent._.panel.showAsChild(i,this.id,a,b,c,k):i.showBlock(this.id,a,b,c,k);j.fire("menuShow",[i])},addListener:function(a){this._.listeners.push(a)},hide:function(a){this._.onHide&&this._.onHide();this._.panel&&this._.panel.hide(a)}}});CKEDITOR.menuItem=CKEDITOR.tools.createClass({$:function(a,b,c){CKEDITOR.tools.extend(this,c,{order:0,className:"cke_menubutton__"+b});this.group=a._.menuGroups[this.group];this.editor=a;this.name=b},proto:{render:function(a,b,c){var h=a.id+(""+
-b),e="undefined"==typeof this.state?CKEDITOR.TRISTATE_OFF:this.state,j="",i=e==CKEDITOR.TRISTATE_ON?"on":e==CKEDITOR.TRISTATE_DISABLED?"disabled":"off";this.role in{menuitemcheckbox:1,menuitemradio:1}&&(j=' aria-checked="'+(e==CKEDITOR.TRISTATE_ON?"true":"false")+'"');var f=this.getItems,d="&#"+("rtl"==this.editor.lang.dir?"9668":"9658")+";",g=this.name;this.icon&&!/\./.test(this.icon)&&(g=this.icon);a={id:h,name:this.name,iconName:g,label:this.label,cls:this.className||"",state:i,hasPopup:f?"true":
-"false",disabled:e==CKEDITOR.TRISTATE_DISABLED,title:this.label,href:"javascript:void('"+(this.label||"").replace("'")+"')",hoverFn:a._.itemOverFn,moveOutFn:a._.itemOutFn,clickFn:a._.itemClickFn,index:b,iconStyle:CKEDITOR.skin.getIconStyle(g,"rtl"==this.editor.lang.dir,g==this.icon?null:this.icon,this.iconOffset),arrowHtml:f?l.output({label:d}):"",role:this.role?this.role:"menuitem",ariaChecked:j};m.output(a,c)}}})})();CKEDITOR.config.menu_groups="clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div";CKEDITOR.plugins.add("contextmenu",{requires:"menu",onLoad:function(){CKEDITOR.plugins.contextMenu=CKEDITOR.tools.createClass({base:CKEDITOR.menu,$:function(a){this.base.call(this,a,{panel:{className:"cke_menu_panel",attributes:{"aria-label":a.lang.contextmenu.options}}})},proto:{addTarget:function(a,e){a.on("contextmenu",function(a){var a=a.data,c=CKEDITOR.env.webkit?f:CKEDITOR.env.mac?a.$.metaKey:a.$.ctrlKey;if(!e||!c){a.preventDefault();if(CKEDITOR.env.mac&&CKEDITOR.env.webkit){var c=this.editor,
-b=(new CKEDITOR.dom.elementPath(a.getTarget(),c.editable())).contains(function(a){return a.hasAttribute("contenteditable")},!0);b&&"false"==b.getAttribute("contenteditable")&&c.getSelection().fake(b)}var b=a.getTarget().getDocument(),d=a.getTarget().getDocument().getDocumentElement(),c=!b.equals(CKEDITOR.document),b=b.getWindow().getScrollPosition(),g=c?a.$.clientX:a.$.pageX||b.x+a.$.clientX,h=c?a.$.clientY:a.$.pageY||b.y+a.$.clientY;CKEDITOR.tools.setTimeout(function(){this.open(d,null,g,h)},CKEDITOR.env.ie?
-200:0,this)}},this);if(CKEDITOR.env.webkit){var f,d=function(){f=0};a.on("keydown",function(a){f=CKEDITOR.env.mac?a.data.$.metaKey:a.data.$.ctrlKey});a.on("keyup",d);a.on("contextmenu",d)}},open:function(a,e,f,d){this.editor.focus();a=a||CKEDITOR.document.getDocumentElement();this.editor.selectionChange(1);this.show(a,e,f,d)}}})},beforeInit:function(a){var e=a.contextMenu=new CKEDITOR.plugins.contextMenu(a);a.on("contentDom",function(){e.addTarget(a.editable(),!1!==a.config.browserContextMenuOnCtrl)});
-a.addCommand("contextMenu",{exec:function(){a.contextMenu.open(a.document.getBody())}});a.setKeystroke(CKEDITOR.SHIFT+121,"contextMenu");a.setKeystroke(CKEDITOR.CTRL+CKEDITOR.SHIFT+121,"contextMenu")}});(function(){CKEDITOR.plugins.add("div",{requires:"dialog",init:function(a){if(!a.blockless){var c=a.lang.div,b="div(*)";CKEDITOR.dialog.isTabEnabled(a,"editdiv","advanced")&&(b+=";div[dir,id,lang,title]{*}");a.addCommand("creatediv",new CKEDITOR.dialogCommand("creatediv",{allowedContent:b,requiredContent:"div",contextSensitive:!0,refresh:function(a,c){this.setState("div"in(a.config.div_wrapTable?c.root:c.blockLimit).getDtd()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}}));a.addCommand("editdiv",
-new CKEDITOR.dialogCommand("editdiv",{requiredContent:"div"}));a.addCommand("removediv",{requiredContent:"div",exec:function(a){function c(b){if((b=CKEDITOR.plugins.div.getSurroundDiv(a,b))&&!b.data("cke-div-added"))f.push(b),b.data("cke-div-added")}for(var b=a.getSelection(),g=b&&b.getRanges(),e,h=b.createBookmarks(),f=[],d=0;d<g.length;d++)e=g[d],e.collapsed?c(b.getStartElement()):(e=new CKEDITOR.dom.walker(e),e.evaluator=c,e.lastForward());for(d=0;d<f.length;d++)f[d].remove(!0);b.selectBookmarks(h)}});
-a.ui.addButton&&a.ui.addButton("CreateDiv",{label:c.toolbar,command:"creatediv",toolbar:"blocks,50"});a.addMenuItems&&(a.addMenuItems({editdiv:{label:c.edit,command:"editdiv",group:"div",order:1},removediv:{label:c.remove,command:"removediv",group:"div",order:5}}),a.contextMenu&&a.contextMenu.addListener(function(b){return!b||b.isReadOnly()?null:CKEDITOR.plugins.div.getSurroundDiv(a)?{editdiv:CKEDITOR.TRISTATE_OFF,removediv:CKEDITOR.TRISTATE_OFF}:null}));CKEDITOR.dialog.add("creatediv",this.path+
-"dialogs/div.js");CKEDITOR.dialog.add("editdiv",this.path+"dialogs/div.js")}}});CKEDITOR.plugins.div={getSurroundDiv:function(a,c){var b=a.elementPath(c);return a.elementPath(b.blockLimit).contains(function(a){return a.is("div")&&!a.isReadOnly()},1)}}})();CKEDITOR.plugins.add("resize",{init:function(b){var f,g,n,o,a=b.config,q=b.ui.spaceId("resizer"),h=b.element?b.element.getDirection(1):"ltr";!a.resize_dir&&(a.resize_dir="vertical");void 0==a.resize_maxWidth&&(a.resize_maxWidth=3E3);void 0==a.resize_maxHeight&&(a.resize_maxHeight=3E3);void 0==a.resize_minWidth&&(a.resize_minWidth=750);void 0==a.resize_minHeight&&(a.resize_minHeight=250);if(!1!==a.resize_enabled){var c=null,i=("both"==a.resize_dir||"horizontal"==a.resize_dir)&&a.resize_minWidth!=a.resize_maxWidth,
-l=("both"==a.resize_dir||"vertical"==a.resize_dir)&&a.resize_minHeight!=a.resize_maxHeight,j=function(d){var e=f,m=g,c=e+(d.data.$.screenX-n)*("rtl"==h?-1:1),d=m+(d.data.$.screenY-o);i&&(e=Math.max(a.resize_minWidth,Math.min(c,a.resize_maxWidth)));l&&(m=Math.max(a.resize_minHeight,Math.min(d,a.resize_maxHeight)));b.resize(i?e:null,m)},k=function(){CKEDITOR.document.removeListener("mousemove",j);CKEDITOR.document.removeListener("mouseup",k);b.document&&(b.document.removeListener("mousemove",j),b.document.removeListener("mouseup",
-k))},p=CKEDITOR.tools.addFunction(function(d){c||(c=b.getResizable());f=c.$.offsetWidth||0;g=c.$.offsetHeight||0;n=d.screenX;o=d.screenY;a.resize_minWidth>f&&(a.resize_minWidth=f);a.resize_minHeight>g&&(a.resize_minHeight=g);CKEDITOR.document.on("mousemove",j);CKEDITOR.document.on("mouseup",k);b.document&&(b.document.on("mousemove",j),b.document.on("mouseup",k));d.preventDefault&&d.preventDefault()});b.on("destroy",function(){CKEDITOR.tools.removeFunction(p)});b.on("uiSpace",function(a){if("bottom"==
-a.data.space){var e="";i&&!l&&(e=" cke_resizer_horizontal");!i&&l&&(e=" cke_resizer_vertical");var c='<span id="'+q+'" class="cke_resizer'+e+" cke_resizer_"+h+'" title="'+CKEDITOR.tools.htmlEncode(b.lang.common.resize)+'" onmousedown="CKEDITOR.tools.callFunction('+p+', event)">'+("ltr"==h?"â—¢":"â—£")+"</span>";"ltr"==h&&"ltr"==e?a.data.html+=c:a.data.html=c+a.data.html}},b,null,100);b.on("maximize",function(a){b.ui.space("resizer")[a.data==CKEDITOR.TRISTATE_ON?"hide":"show"]()})}}});(function(){function w(a){function d(){for(var b=g(),e=CKEDITOR.tools.clone(a.config.toolbarGroups)||n(a),f=0;f<e.length;f++){var k=e[f];if("/"!=k){"string"==typeof k&&(k=e[f]={name:k});var i,d=k.groups;if(d)for(var h=0;h<d.length;h++)i=d[h],(i=b[i])&&c(k,i);(i=b[k.name])&&c(k,i)}}return e}function g(){var b={},c,f,e;for(c in a.ui.items)f=a.ui.items[c],e=f.toolbar||"others",e=e.split(","),f=e[0],e=parseInt(e[1]||-1,10),b[f]||(b[f]=[]),b[f].push({name:c,order:e});for(f in b)b[f]=b[f].sort(function(b,
-a){return b.order==a.order?0:0>a.order?-1:0>b.order?1:b.order<a.order?-1:1});return b}function c(c,e){if(e.length){c.items?c.items.push(a.ui.create("-")):c.items=[];for(var f;f=e.shift();)if(f="string"==typeof f?f:f.name,!b||-1==CKEDITOR.tools.indexOf(b,f))(f=a.ui.create(f))&&a.addFeature(f)&&c.items.push(f)}}function h(b){var a=[],e,d,h;for(e=0;e<b.length;++e)d=b[e],h={},"/"==d?a.push(d):CKEDITOR.tools.isArray(d)?(c(h,CKEDITOR.tools.clone(d)),a.push(h)):d.items&&(c(h,CKEDITOR.tools.clone(d.items)),
-h.name=d.name,a.push(h));return a}var b=a.config.removeButtons,b=b&&b.split(","),e=a.config.toolbar;"string"==typeof e&&(e=a.config["toolbar_"+e]);return a.toolbar=e?h(e):d()}function n(a){return a._.toolbarGroups||(a._.toolbarGroups=[{name:"document",groups:["mode","document","doctools"]},{name:"clipboard",groups:["clipboard","undo"]},{name:"editing",groups:["find","selection","spellchecker"]},{name:"forms"},"/",{name:"basicstyles",groups:["basicstyles","cleanup"]},{name:"paragraph",groups:["list",
-"indent","blocks","align","bidi"]},{name:"links"},{name:"insert"},"/",{name:"styles"},{name:"colors"},{name:"tools"},{name:"others"},{name:"about"}])}var u=function(){this.toolbars=[];this.focusCommandExecuted=!1};u.prototype.focus=function(){for(var a=0,d;d=this.toolbars[a++];)for(var g=0,c;c=d.items[g++];)if(c.focus){c.focus();return}};var x={modes:{wysiwyg:1,source:1},readOnly:1,exec:function(a){a.toolbox&&(a.toolbox.focusCommandExecuted=!0,CKEDITOR.env.ie||CKEDITOR.env.air?setTimeout(function(){a.toolbox.focus()},
-100):a.toolbox.focus())}};CKEDITOR.plugins.add("toolbar",{requires:"button",init:function(a){var d,g=function(c,h){var b,e="rtl"==a.lang.dir,j=a.config.toolbarGroupCycling,o=e?37:39,e=e?39:37,j=void 0===j||j;switch(h){case 9:case CKEDITOR.SHIFT+9:for(;!b||!b.items.length;)if(b=9==h?(b?b.next:c.toolbar.next)||a.toolbox.toolbars[0]:(b?b.previous:c.toolbar.previous)||a.toolbox.toolbars[a.toolbox.toolbars.length-1],b.items.length)for(c=b.items[d?b.items.length-1:0];c&&!c.focus;)(c=d?c.previous:c.next)||
-(b=0);c&&c.focus();return!1;case o:b=c;do b=b.next,!b&&j&&(b=c.toolbar.items[0]);while(b&&!b.focus);b?b.focus():g(c,9);return!1;case 40:return c.button&&c.button.hasArrow?(a.once("panelShow",function(b){b.data._.panel._.currentBlock.onKeyDown(40)}),c.execute()):g(c,40==h?o:e),!1;case e:case 38:b=c;do b=b.previous,!b&&j&&(b=c.toolbar.items[c.toolbar.items.length-1]);while(b&&!b.focus);b?b.focus():(d=1,g(c,CKEDITOR.SHIFT+9),d=0);return!1;case 27:return a.focus(),!1;case 13:case 32:return c.execute(),
-!1}return!0};a.on("uiSpace",function(c){if(c.data.space==a.config.toolbarLocation){c.removeListener();a.toolbox=new u;var d=CKEDITOR.tools.getNextId(),b=['<span id="',d,'" class="cke_voice_label">',a.lang.toolbar.toolbars,"</span>",'<span id="'+a.ui.spaceId("toolbox")+'" class="cke_toolbox" role="group" aria-labelledby="',d,'" onmousedown="return false;">'],d=!1!==a.config.toolbarStartupExpanded,e,j;a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&b.push('<span class="cke_toolbox_main"'+
-(d?">":' style="display:none">'));for(var o=a.toolbox.toolbars,f=w(a),k=0;k<f.length;k++){var i,l=0,r,m=f[k],s;if(m)if(e&&(b.push("</span>"),j=e=0),"/"===m)b.push('<span class="cke_toolbar_break"></span>');else{s=m.items||m;for(var t=0;t<s.length;t++){var p=s[t],n;if(p)if(p.type==CKEDITOR.UI_SEPARATOR)j=e&&p;else{n=!1!==p.canGroup;if(!l){i=CKEDITOR.tools.getNextId();l={id:i,items:[]};r=m.name&&(a.lang.toolbar.toolbarGroups[m.name]||m.name);b.push('<span id="',i,'" class="cke_toolbar"',r?' aria-labelledby="'+
-i+'_label"':"",' role="toolbar">');r&&b.push('<span id="',i,'_label" class="cke_voice_label">',r,"</span>");b.push('<span class="cke_toolbar_start"></span>');var q=o.push(l)-1;0<q&&(l.previous=o[q-1],l.previous.next=l)}n?e||(b.push('<span class="cke_toolgroup" role="presentation">'),e=1):e&&(b.push("</span>"),e=0);i=function(c){c=c.render(a,b);q=l.items.push(c)-1;if(q>0){c.previous=l.items[q-1];c.previous.next=c}c.toolbar=l;c.onkey=g;c.onfocus=function(){a.toolbox.focusCommandExecuted||a.focus()}};
-j&&(i(j),j=0);i(p)}}e&&(b.push("</span>"),j=e=0);l&&b.push('<span class="cke_toolbar_end"></span></span>')}}a.config.toolbarCanCollapse&&b.push("</span>");if(a.config.toolbarCanCollapse&&a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var v=CKEDITOR.tools.addFunction(function(){a.execCommand("toolbarCollapse")});a.on("destroy",function(){CKEDITOR.tools.removeFunction(v)});a.addCommand("toolbarCollapse",{readOnly:1,exec:function(b){var a=b.ui.space("toolbar_collapser"),c=a.getPrevious(),e=b.ui.space("contents"),
-d=c.getParent(),f=parseInt(e.$.style.height,10),h=d.$.offsetHeight,g=a.hasClass("cke_toolbox_collapser_min");g?(c.show(),a.removeClass("cke_toolbox_collapser_min"),a.setAttribute("title",b.lang.toolbar.toolbarCollapse)):(c.hide(),a.addClass("cke_toolbox_collapser_min"),a.setAttribute("title",b.lang.toolbar.toolbarExpand));a.getFirst().setText(g?"â–²":"â—€");e.setStyle("height",f-(d.$.offsetHeight-h)+"px");b.fire("resize")},modes:{wysiwyg:1,source:1}});a.setKeystroke(CKEDITOR.ALT+(CKEDITOR.env.ie||CKEDITOR.env.webkit?
-189:109),"toolbarCollapse");b.push('<a title="'+(d?a.lang.toolbar.toolbarCollapse:a.lang.toolbar.toolbarExpand)+'" id="'+a.ui.spaceId("toolbar_collapser")+'" tabIndex="-1" class="cke_toolbox_collapser');d||b.push(" cke_toolbox_collapser_min");b.push('" onclick="CKEDITOR.tools.callFunction('+v+')">','<span class="cke_arrow">&#9650;</span>',"</a>")}b.push("</span>");c.data.html+=b.join("")}});a.on("destroy",function(){if(this.toolbox){var a,d=0,b,e,g;for(a=this.toolbox.toolbars;d<a.length;d++){e=a[d].items;
-for(b=0;b<e.length;b++)g=e[b],g.clickFn&&CKEDITOR.tools.removeFunction(g.clickFn),g.keyDownFn&&CKEDITOR.tools.removeFunction(g.keyDownFn)}}});a.on("uiReady",function(){var c=a.ui.space("toolbox");c&&a.focusManager.add(c,1)});a.addCommand("toolbarFocus",x);a.setKeystroke(CKEDITOR.ALT+121,"toolbarFocus");a.ui.add("-",CKEDITOR.UI_SEPARATOR,{});a.ui.addHandler(CKEDITOR.UI_SEPARATOR,{create:function(){return{render:function(a,d){d.push('<span class="cke_toolbar_separator" role="separator"></span>');return{}}}}})}});
-CKEDITOR.ui.prototype.addToolbarGroup=function(a,d,g){var c=n(this.editor),h=0===d,b={name:a};if(g){if(g=CKEDITOR.tools.search(c,function(a){return a.name==g})){!g.groups&&(g.groups=[]);if(d&&(d=CKEDITOR.tools.indexOf(g.groups,d),0<=d)){g.groups.splice(d+1,0,a);return}h?g.groups.splice(0,0,a):g.groups.push(a);return}d=null}d&&(d=CKEDITOR.tools.indexOf(c,function(a){return a.name==d}));h?c.splice(0,0,a):"number"==typeof d?c.splice(d+1,0,b):c.push(a)}})();CKEDITOR.UI_SEPARATOR="separator";
-CKEDITOR.config.toolbarLocation="top";(function(){var k;function n(a,c){function j(d){d=i.list[d];if(d.equals(a.editable())||"true"==d.getAttribute("contenteditable")){var e=a.createRange();e.selectNodeContents(d);e.select()}else a.getSelection().selectElement(d);a.focus()}function s(){l&&l.setHtml(o);delete i.list}var m=a.ui.spaceId("path"),l,i=a._.elementsPath,n=i.idBase;c.html+='<span id="'+m+'_label" class="cke_voice_label">'+a.lang.elementspath.eleLabel+'</span><span id="'+m+'" class="cke_path" role="group" aria-labelledby="'+m+
-'_label">'+o+"</span>";a.on("uiReady",function(){var d=a.ui.space("path");d&&a.focusManager.add(d,1)});i.onClick=j;var t=CKEDITOR.tools.addFunction(j),u=CKEDITOR.tools.addFunction(function(d,e){var g=i.idBase,b,e=new CKEDITOR.dom.event(e);b="rtl"==a.lang.dir;switch(e.getKeystroke()){case b?39:37:case 9:return(b=CKEDITOR.document.getById(g+(d+1)))||(b=CKEDITOR.document.getById(g+"0")),b.focus(),!1;case b?37:39:case CKEDITOR.SHIFT+9:return(b=CKEDITOR.document.getById(g+(d-1)))||(b=CKEDITOR.document.getById(g+
-(i.list.length-1))),b.focus(),!1;case 27:return a.focus(),!1;case 13:case 32:return j(d),!1}return!0});a.on("selectionChange",function(){a.editable();for(var d=[],e=i.list=[],g=[],b=i.filters,c=!0,j=a.elementPath().elements,f,k=j.length;k--;){var h=j[k],p=0;f=h.data("cke-display-name")?h.data("cke-display-name"):h.data("cke-real-element-type")?h.data("cke-real-element-type"):h.getName();c=h.hasAttribute("contenteditable")?"true"==h.getAttribute("contenteditable"):c;!c&&!h.hasAttribute("contenteditable")&&
-(p=1);for(var q=0;q<b.length;q++){var r=b[q](h,f);if(!1===r){p=1;break}f=r||f}p||(e.unshift(h),g.unshift(f))}e=e.length;for(b=0;b<e;b++)f=g[b],c=a.lang.elementspath.eleTitle.replace(/%1/,f),f=v.output({id:n+b,label:c,text:f,jsTitle:"javascript:void('"+f+"')",index:b,keyDownFn:u,clickFn:t}),d.unshift(f);l||(l=CKEDITOR.document.getById(m));g=l;g.setHtml(d.join("")+o);a.fire("elementsPathUpdate",{space:g})});a.on("readOnly",s);a.on("contentDomUnload",s);a.addCommand("elementsPathFocus",k);a.setKeystroke(CKEDITOR.ALT+
-122,"elementsPathFocus")}k={editorFocus:!1,readOnly:1,exec:function(a){(a=CKEDITOR.document.getById(a._.elementsPath.idBase+"0"))&&a.focus(CKEDITOR.env.ie||CKEDITOR.env.air)}};var o='<span class="cke_path_empty">&nbsp;</span>',c="";CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(c+=' onkeypress="return false;"');CKEDITOR.env.gecko&&(c+=' onblur="this.style.cssText = this.style.cssText;"');var v=CKEDITOR.addTemplate("pathItem",'<a id="{id}" href="{jsTitle}" tabindex="-1" class="cke_path_item" title="{label}"'+
-c+' hidefocus="true" onkeydown="return CKEDITOR.tools.callFunction({keyDownFn},{index}, event );" onclick="CKEDITOR.tools.callFunction({clickFn},{index}); return false;" role="button" aria-label="{label}">{text}</a>');CKEDITOR.plugins.add("elementspath",{init:function(a){a._.elementsPath={idBase:"cke_elementspath_"+CKEDITOR.tools.getNextNumber()+"_",filters:[]};a.on("uiSpace",function(c){"bottom"==c.data.space&&n(a,c.data)})}})})();(function(){function u(b){var d=b.startContainer.getAscendant(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&"true"==a.getAttribute("contenteditable")},!0);if(b.root.equals(d))return b;d=new CKEDITOR.dom.range(d);d.moveToRange(b);return d}function m(b,d,a){a=b.config.forceEnterMode||a;"wysiwyg"==b.mode&&(d||(d=b.activeEnterMode),b.elementPath().isContextFor("p")||(d=CKEDITOR.ENTER_BR,a=1),b.fire("saveSnapshot"),d==CKEDITOR.ENTER_BR?p(b,d,null,a):q(b,d,null,a),b.fire("saveSnapshot"))}function r(b){for(var b=
-b.getSelection().getRanges(!0),d=b.length-1;0<d;d--)b[d].deleteContents();return b[0]}CKEDITOR.plugins.add("enterkey",{init:function(b){b.addCommand("enter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(b){m(b)}});b.addCommand("shiftEnter",{modes:{wysiwyg:1},editorFocus:!1,exec:function(b){m(b,b.activeShiftEnterMode,1)}});b.setKeystroke([[13,"enter"],[CKEDITOR.SHIFT+13,"shiftEnter"]])}});var v=CKEDITOR.dom.walker.whitespaces(),w=CKEDITOR.dom.walker.bookmark();CKEDITOR.plugins.enterkey={enterBlock:function(b,
-d,a,h){if(a=a||r(b)){var a=u(a),f=a.document,i=a.checkStartOfBlock(),k=a.checkEndOfBlock(),j=b.elementPath(a.startContainer),c=j.block,l=d==CKEDITOR.ENTER_DIV?"div":"p",e;if(i&&k){if(c&&(c.is("li")||c.getParent().is("li"))){c.is("li")||(c=c.getParent());a=c.getParent();e=a.getParent();var h=!c.hasPrevious(),n=!c.hasNext(),l=b.getSelection(),g=l.createBookmarks(),i=c.getDirection(1),k=c.getAttribute("class"),o=c.getAttribute("style"),m=e.getDirection(1)!=i,b=b.enterMode!=CKEDITOR.ENTER_BR||m||o||k;
-if(e.is("li"))if(h||n)c[h?"insertBefore":"insertAfter"](e);else c.breakParent(e);else{if(b)if(j.block.is("li")?(e=f.createElement(d==CKEDITOR.ENTER_P?"p":"div"),m&&e.setAttribute("dir",i),o&&e.setAttribute("style",o),k&&e.setAttribute("class",k),c.moveChildren(e)):e=j.block,h||n)e[h?"insertBefore":"insertAfter"](a);else c.breakParent(a),e.insertAfter(a);else if(c.appendBogus(!0),h||n)for(;f=c[h?"getFirst":"getLast"]();)f[h?"insertBefore":"insertAfter"](a);else for(c.breakParent(a);f=c.getLast();)f.insertAfter(a);
-c.remove()}l.selectBookmarks(g);return}if(c&&c.getParent().is("blockquote")){c.breakParent(c.getParent());c.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1))||c.getPrevious().remove();c.getNext().getFirst(CKEDITOR.dom.walker.invisible(1))||c.getNext().remove();a.moveToElementEditStart(c);a.select();return}}else if(c&&c.is("pre")&&!k){p(b,d,a,h);return}if(i=a.splitBlock(l)){d=i.previousBlock;c=i.nextBlock;j=i.wasStartOfBlock;b=i.wasEndOfBlock;if(c)g=c.getParent(),g.is("li")&&(c.breakParent(g),
-c.move(c.getNext(),1));else if(d&&(g=d.getParent())&&g.is("li"))d.breakParent(g),g=d.getNext(),a.moveToElementEditStart(g),d.move(d.getPrevious());if(!j&&!b)c.is("li")&&(e=a.clone(),e.selectNodeContents(c),e=new CKEDITOR.dom.walker(e),e.evaluator=function(a){return!(w(a)||v(a)||a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in CKEDITOR.dtd.$inline&&!(a.getName()in CKEDITOR.dtd.$empty))},(g=e.next())&&(g.type==CKEDITOR.NODE_ELEMENT&&g.is("ul","ol"))&&(CKEDITOR.env.needsBrFiller?f.createElement("br"):f.createText(" ")).insertBefore(g)),
-c&&a.moveToElementEditStart(c);else{if(d){if(d.is("li")||!s.test(d.getName())&&!d.is("pre"))e=d.clone()}else c&&(e=c.clone());e?h&&!e.is("li")&&e.renameNode(l):g&&g.is("li")?e=g:(e=f.createElement(l),d&&(n=d.getDirection())&&e.setAttribute("dir",n));if(f=i.elementPath){h=0;for(l=f.elements.length;h<l;h++){g=f.elements[h];if(g.equals(f.block)||g.equals(f.blockLimit))break;CKEDITOR.dtd.$removeEmpty[g.getName()]&&(g=g.clone(),e.moveChildren(g),e.append(g))}}e.appendBogus();e.getParent()||a.insertNode(e);
-e.is("li")&&e.removeAttribute("value");if(CKEDITOR.env.ie&&j&&(!b||!d.getChildCount()))a.moveToElementEditStart(b?d:e),a.select();a.moveToElementEditStart(j&&!b?c:e)}a.select();a.scrollIntoView()}}},enterBr:function(b,d,a,h){if(a=a||r(b)){var f=a.document,i=a.checkEndOfBlock(),k=new CKEDITOR.dom.elementPath(b.getSelection().getStartElement()),j=k.block,c=j&&k.block.getName();!h&&"li"==c?q(b,d,a,h):(!h&&i&&s.test(c)?(i=j.getDirection())?(f=f.createElement("div"),f.setAttribute("dir",i),f.insertAfter(j),
-a.setStart(f,0)):(f.createElement("br").insertAfter(j),CKEDITOR.env.gecko&&f.createText("").insertAfter(j),a.setStartAt(j.getNext(),CKEDITOR.env.ie?CKEDITOR.POSITION_BEFORE_START:CKEDITOR.POSITION_AFTER_START)):(b="pre"==c&&CKEDITOR.env.ie&&8>CKEDITOR.env.version?f.createText("\r"):f.createElement("br"),a.deleteContents(),a.insertNode(b),CKEDITOR.env.needsBrFiller?(f.createText("").insertAfter(b),i&&(j||k.blockLimit).appendBogus(),b.getNext().$.nodeValue="",a.setStartAt(b.getNext(),CKEDITOR.POSITION_AFTER_START)):
-a.setStartAt(b,CKEDITOR.POSITION_AFTER_END)),a.collapse(!0),a.select(),a.scrollIntoView())}}};var t=CKEDITOR.plugins.enterkey,p=t.enterBr,q=t.enterBlock,s=/^h[1-6]$/})();(function(){function j(a,b){var d={},e=[],f={nbsp:" ",shy:"­",gt:">",lt:"<",amp:"&",apos:"'",quot:'"'},a=a.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g,function(a,h){var c=b?"&"+h+";":f[h];d[c]=b?f[h]:"&"+h+";";e.push(c);return""});if(!b&&a){var a=a.split(","),c=document.createElement("div"),g;c.innerHTML="&"+a.join(";&")+";";g=c.innerHTML;c=null;for(c=0;c<g.length;c++){var i=g.charAt(c);d[i]="&"+a[c]+";";e.push(i)}}d.regex=e.join(b?"|":"");return d}CKEDITOR.plugins.add("entities",{afterInit:function(a){var b=
-a.config;if(a=(a=a.dataProcessor)&&a.htmlFilter){var d=[];!1!==b.basicEntities&&d.push("nbsp,gt,lt,amp");b.entities&&(d.length&&d.push("quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro"),
-b.entities_latin&&d.push("Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml"),b.entities_greek&&d.push("Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv"),
-b.entities_additional&&d.push(b.entities_additional));var e=j(d.join(",")),f=e.regex?"["+e.regex+"]":"a^";delete e.regex;b.entities&&b.entities_processNumerical&&(f="[^ -~]|"+f);var f=RegExp(f,"g"),c=function(a){return b.entities_processNumerical=="force"||!e[a]?"&#"+a.charCodeAt(0)+";":e[a]},g=j("nbsp,gt,lt,amp,shy",!0),i=RegExp(g.regex,"g"),k=function(a){return g[a]};a.addRules({text:function(a){return a.replace(i,k).replace(f,c)}},{applyToAll:!0,excludeNestedEditable:!0})}}})})();
-CKEDITOR.config.basicEntities=!0;CKEDITOR.config.entities=!0;CKEDITOR.config.entities_latin=!0;CKEDITOR.config.entities_greek=!0;CKEDITOR.config.entities_additional="#39";CKEDITOR.plugins.add("popup");
-CKEDITOR.tools.extend(CKEDITOR.editor.prototype,{popup:function(e,a,b,d){a=a||"80%";b=b||"70%";"string"==typeof a&&(1<a.length&&"%"==a.substr(a.length-1,1))&&(a=parseInt(window.screen.width*parseInt(a,10)/100,10));"string"==typeof b&&(1<b.length&&"%"==b.substr(b.length-1,1))&&(b=parseInt(window.screen.height*parseInt(b,10)/100,10));640>a&&(a=640);420>b&&(b=420);var f=parseInt((window.screen.height-b)/2,10),g=parseInt((window.screen.width-a)/2,10),d=(d||"location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes")+",width="+
-a+",height="+b+",top="+f+",left="+g,c=window.open("",null,d,!0);if(!c)return!1;try{-1==navigator.userAgent.toLowerCase().indexOf(" chrome/")&&(c.moveTo(g,f),c.resizeTo(a,b)),c.focus(),c.location.href=e}catch(h){window.open(e,null,d,!0)}return!0}});(function(){function g(a,c){var d=[];if(c)for(var b in c)d.push(b+"="+encodeURIComponent(c[b]));else return a;return a+(-1!=a.indexOf("?")?"&":"?")+d.join("&")}function i(a){a+="";return a.charAt(0).toUpperCase()+a.substr(1)}function k(){var a=this.getDialog(),c=a.getParentEditor();c._.filebrowserSe=this;var d=c.config["filebrowser"+i(a.getName())+"WindowWidth"]||c.config.filebrowserWindowWidth||"80%",a=c.config["filebrowser"+i(a.getName())+"WindowHeight"]||c.config.filebrowserWindowHeight||"70%",
-b=this.filebrowser.params||{};b.CKEditor=c.name;b.CKEditorFuncNum=c._.filebrowserFn;b.langCode||(b.langCode=c.langCode);b=g(this.filebrowser.url,b);c.popup(b,d,a,c.config.filebrowserWindowFeatures||c.config.fileBrowserWindowFeatures)}function l(){var a=this.getDialog();a.getParentEditor()._.filebrowserSe=this;return!a.getContentElement(this["for"][0],this["for"][1]).getInputElement().$.value||!a.getContentElement(this["for"][0],this["for"][1]).getAction()?!1:!0}function m(a,c,d){var b=d.params||{};
-b.CKEditor=a.name;b.CKEditorFuncNum=a._.filebrowserFn;b.langCode||(b.langCode=a.langCode);c.action=g(d.url,b);c.filebrowser=d}function j(a,c,d,b){if(b&&b.length)for(var e,g=b.length;g--;)if(e=b[g],("hbox"==e.type||"vbox"==e.type||"fieldset"==e.type)&&j(a,c,d,e.children),e.filebrowser)if("string"==typeof e.filebrowser&&(e.filebrowser={action:"fileButton"==e.type?"QuickUpload":"Browse",target:e.filebrowser}),"Browse"==e.filebrowser.action){var f=e.filebrowser.url;void 0===f&&(f=a.config["filebrowser"+
-i(c)+"BrowseUrl"],void 0===f&&(f=a.config.filebrowserBrowseUrl));f&&(e.onClick=k,e.filebrowser.url=f,e.hidden=!1)}else if("QuickUpload"==e.filebrowser.action&&e["for"]&&(f=e.filebrowser.url,void 0===f&&(f=a.config["filebrowser"+i(c)+"UploadUrl"],void 0===f&&(f=a.config.filebrowserUploadUrl)),f)){var h=e.onClick;e.onClick=function(a){var b=a.sender;return h&&h.call(b,a)===false?false:l.call(b,a)};e.filebrowser.url=f;e.hidden=!1;m(a,d.getContents(e["for"][0]).get(e["for"][1]),e.filebrowser)}}function h(a,
-c,d){if(-1!==d.indexOf(";")){for(var d=d.split(";"),b=0;b<d.length;b++)if(h(a,c,d[b]))return!0;return!1}return(a=a.getContents(c).get(d).filebrowser)&&a.url}function n(a,c){var d=this._.filebrowserSe.getDialog(),b=this._.filebrowserSe["for"],e=this._.filebrowserSe.filebrowser.onSelect;b&&d.getContentElement(b[0],b[1]).reset();if(!("function"==typeof c&&!1===c.call(this._.filebrowserSe))&&!(e&&!1===e.call(this._.filebrowserSe,a,c))&&("string"==typeof c&&c&&alert(c),a&&(b=this._.filebrowserSe,d=b.getDialog(),
-b=b.filebrowser.target||null)))if(b=b.split(":"),e=d.getContentElement(b[0],b[1]))e.setValue(a),d.selectPage(b[0])}CKEDITOR.plugins.add("filebrowser",{requires:"popup",init:function(a){a._.filebrowserFn=CKEDITOR.tools.addFunction(n,a);a.on("destroy",function(){CKEDITOR.tools.removeFunction(this._.filebrowserFn)})}});CKEDITOR.on("dialogDefinition",function(a){if(a.editor.plugins.filebrowser)for(var c=a.data.definition,d,b=0;b<c.contents.length;++b)if(d=c.contents[b])j(a.editor,a.data.name,c,d.elements),
-d.hidden&&d.filebrowser&&(d.hidden=!h(c,d.id,d.filebrowser))})})();CKEDITOR.plugins.add("find",{requires:"dialog",init:function(a){var b=a.addCommand("find",new CKEDITOR.dialogCommand("find"));b.canUndo=!1;b.readOnly=1;a.addCommand("replace",new CKEDITOR.dialogCommand("replace")).canUndo=!1;a.ui.addButton&&(a.ui.addButton("Find",{label:a.lang.find.find,command:"find",toolbar:"find,10"}),a.ui.addButton("Replace",{label:a.lang.find.replace,command:"replace",toolbar:"find,20"}));CKEDITOR.dialog.add("find",this.path+"dialogs/find.js");CKEDITOR.dialog.add("replace",this.path+
-"dialogs/find.js")}});CKEDITOR.config.find_highlight={element:"span",styles:{"background-color":"#004",color:"#fff"}};(function(){function g(a,b){var c=j.exec(a),d=j.exec(b);if(c){if(!c[2]&&"px"==d[2])return d[1];if("px"==c[2]&&!d[2])return d[1]+"px"}return b}var i=CKEDITOR.htmlParser.cssStyle,h=CKEDITOR.tools.cssLength,j=/^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i,k={elements:{$:function(a){var b=a.attributes;if((b=(b=(b=b&&b["data-cke-realelement"])&&new CKEDITOR.htmlParser.fragment.fromHtml(decodeURIComponent(b)))&&b.children[0])&&a.attributes["data-cke-resizable"]){var c=(new i(a)).rules,a=b.attributes,d=c.width,c=
-c.height;d&&(a.width=g(a.width,d));c&&(a.height=g(a.height,c))}return b}}};CKEDITOR.plugins.add("fakeobjects",{init:function(a){a.filter.allow("img[!data-cke-realelement,src,alt,title](*){*}","fakeobjects")},afterInit:function(a){(a=(a=a.dataProcessor)&&a.htmlFilter)&&a.addRules(k,{applyToAll:!0})}});CKEDITOR.editor.prototype.createFakeElement=function(a,b,c,d){var e=this.lang.fakeobjects,e=e[c]||e.unknown,b={"class":b,"data-cke-realelement":encodeURIComponent(a.getOuterHtml()),"data-cke-real-node-type":a.type,
-alt:e,title:e,align:a.getAttribute("align")||""};CKEDITOR.env.hc||(b.src=CKEDITOR.tools.transparentImageData);c&&(b["data-cke-real-element-type"]=c);d&&(b["data-cke-resizable"]=d,c=new i,d=a.getAttribute("width"),a=a.getAttribute("height"),d&&(c.rules.width=h(d)),a&&(c.rules.height=h(a)),c.populate(b));return this.document.createElement("img",{attributes:b})};CKEDITOR.editor.prototype.createFakeParserElement=function(a,b,c,d){var e=this.lang.fakeobjects,e=e[c]||e.unknown,f;f=new CKEDITOR.htmlParser.basicWriter;
-a.writeHtml(f);f=f.getHtml();b={"class":b,"data-cke-realelement":encodeURIComponent(f),"data-cke-real-node-type":a.type,alt:e,title:e,align:a.attributes.align||""};CKEDITOR.env.hc||(b.src=CKEDITOR.tools.transparentImageData);c&&(b["data-cke-real-element-type"]=c);d&&(b["data-cke-resizable"]=d,d=a.attributes,a=new i,c=d.width,d=d.height,void 0!=c&&(a.rules.width=h(c)),void 0!=d&&(a.rules.height=h(d)),a.populate(b));return new CKEDITOR.htmlParser.element("img",b)};CKEDITOR.editor.prototype.restoreRealElement=
-function(a){if(a.data("cke-real-node-type")!=CKEDITOR.NODE_ELEMENT)return null;var b=CKEDITOR.dom.element.createFromHtml(decodeURIComponent(a.data("cke-realelement")),this.document);if(a.data("cke-resizable")){var c=a.getStyle("width"),a=a.getStyle("height");c&&b.setAttribute("width",g(b.getAttribute("width"),c));a&&b.setAttribute("height",g(b.getAttribute("height"),a))}return b}})();(function(){function d(a){a=a.attributes;return"application/x-shockwave-flash"==a.type||f.test(a.src||"")}function e(a,b){return a.createFakeParserElement(b,"cke_flash","flash",!0)}var f=/\.swf(?:$|\?)/i;CKEDITOR.plugins.add("flash",{requires:"dialog,fakeobjects",onLoad:function(){CKEDITOR.addCss("img.cke_flash{background-image: url("+CKEDITOR.getUrl(this.path+"images/placeholder.png")+");background-position: center center;background-repeat: no-repeat;border: 1px solid #a9a9a9;width: 80px;height: 80px;}")},
-init:function(a){var b="object[classid,codebase,height,hspace,vspace,width];param[name,value];embed[height,hspace,pluginspage,src,type,vspace,width]";CKEDITOR.dialog.isTabEnabled(a,"flash","properties")&&(b+=";object[align]; embed[allowscriptaccess,quality,scale,wmode]");CKEDITOR.dialog.isTabEnabled(a,"flash","advanced")&&(b+=";object[id]{*}; embed[bgcolor]{*}(*)");a.addCommand("flash",new CKEDITOR.dialogCommand("flash",{allowedContent:b,requiredContent:"embed"}));a.ui.addButton&&a.ui.addButton("Flash",
-{label:a.lang.common.flash,command:"flash",toolbar:"insert,20"});CKEDITOR.dialog.add("flash",this.path+"dialogs/flash.js");a.addMenuItems&&a.addMenuItems({flash:{label:a.lang.flash.properties,command:"flash",group:"flash"}});a.on("doubleclick",function(a){var b=a.data.element;b.is("img")&&"flash"==b.data("cke-real-element-type")&&(a.data.dialog="flash")});a.contextMenu&&a.contextMenu.addListener(function(a){if(a&&a.is("img")&&!a.isReadOnly()&&"flash"==a.data("cke-real-element-type"))return{flash:CKEDITOR.TRISTATE_OFF}})},
-afterInit:function(a){var b=a.dataProcessor;(b=b&&b.dataFilter)&&b.addRules({elements:{"cke:object":function(b){var c=b.attributes;if((!c.classid||!(""+c.classid).toLowerCase())&&!d(b)){for(c=0;c<b.children.length;c++)if("cke:embed"==b.children[c].name){if(!d(b.children[c]))break;return e(a,b)}return null}return e(a,b)},"cke:embed":function(b){return!d(b)?null:e(a,b)}}},5)}})})();CKEDITOR.tools.extend(CKEDITOR.config,{flashEmbedTagOnly:!1,flashAddEmbedTag:!0,flashConvertOnEdit:!1});(function(){function i(a){var j=a.config,m=a.fire("uiSpace",{space:"top",html:""}).html,p=function(){function f(a,c,e){b.setStyle(c,s(e));b.setStyle("position",a)}function e(a){var b=i.getDocumentPosition();switch(a){case "top":f("absolute","top",b.y-n-o);break;case "pin":f("fixed","top",t);break;case "bottom":f("absolute","top",b.y+(c.height||c.bottom-c.top)+o)}k=a}var k,i,l,c,h,n,r,m=j.floatSpaceDockedOffsetX||0,o=j.floatSpaceDockedOffsetY||0,q=j.floatSpacePinnedOffsetX||0,t=j.floatSpacePinnedOffsetY||
-0;return function(d){if(i=a.editable())if(d&&"focus"==d.name&&b.show(),b.removeStyle("left"),b.removeStyle("right"),l=b.getClientRect(),c=i.getClientRect(),h=g.getViewPaneSize(),n=l.height,r="pageXOffset"in g.$?g.$.pageXOffset:CKEDITOR.document.$.documentElement.scrollLeft,k){n+o<=c.top?e("top"):n+o>h.height-c.bottom?e("pin"):e("bottom");var d=h.width/2,d=0<c.left&&c.right<h.width&&c.width>l.width?"rtl"==a.config.contentsLangDirection?"right":"left":d-c.left>c.right-d?"left":"right",f;l.width>h.width?
-(d="left",f=0):(f="left"==d?0<c.left?c.left:0:c.right<h.width?h.width-c.right:0,f+l.width>h.width&&(d="left"==d?"right":"left",f=0));b.setStyle(d,s(("pin"==k?q:m)+f+("pin"==k?0:"left"==d?r:-r)))}else k="pin",e("pin"),p(d)}}();if(m){var i=new CKEDITOR.template('<div id="cke_{name}" class="cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} '+CKEDITOR.env.cssClass+'" dir="{langDir}" title="'+(CKEDITOR.env.gecko?" ":"")+'" lang="{langCode}" role="application" style="{style}"'+
-(a.title?' aria-labelledby="cke_{name}_arialbl"':" ")+">"+(a.title?'<span id="cke_{name}_arialbl" class="cke_voice_label">{voiceLabel}</span>':" ")+'<div class="cke_inner"><div id="{topId}" class="cke_top" role="presentation">{content}</div></div></div>'),b=CKEDITOR.document.getBody().append(CKEDITOR.dom.element.createFromHtml(i.output({content:m,id:a.id,langDir:a.lang.dir,langCode:a.langCode,name:a.name,style:"display:none;z-index:"+(j.baseFloatZIndex-1),topId:a.ui.spaceId("top"),voiceLabel:a.title}))),
-q=CKEDITOR.tools.eventsBuffer(500,p),e=CKEDITOR.tools.eventsBuffer(100,p);b.unselectable();b.on("mousedown",function(a){a=a.data;a.getTarget().hasAscendant("a",1)||a.preventDefault()});a.on("focus",function(b){p(b);a.on("change",q.input);g.on("scroll",e.input);g.on("resize",e.input)});a.on("blur",function(){b.hide();a.removeListener("change",q.input);g.removeListener("scroll",e.input);g.removeListener("resize",e.input)});a.on("destroy",function(){g.removeListener("scroll",e.input);g.removeListener("resize",
-e.input);b.clearCustomData();b.remove()});a.focusManager.hasFocus&&b.show();a.focusManager.add(b,1)}}var g=CKEDITOR.document.getWindow(),s=CKEDITOR.tools.cssLength;CKEDITOR.plugins.add("floatingspace",{init:function(a){a.on("loaded",function(){i(this)},null,null,20)}})})();CKEDITOR.plugins.add("listblock",{requires:"panel",onLoad:function(){var f=CKEDITOR.addTemplate("panel-list",'<ul role="presentation" class="cke_panel_list">{items}</ul>'),g=CKEDITOR.addTemplate("panel-list-item",'<li id="{id}" class="cke_panel_listItem" role=presentation><a id="{id}_option" _cke_focus=1 hidefocus=true title="{title}" href="javascript:void(\'{val}\')" {onclick}="CKEDITOR.tools.callFunction({clickFn},\'{val}\'); return false;" role="option">{text}</a></li>'),h=CKEDITOR.addTemplate("panel-list-group",
-'<h1 id="{id}" class="cke_panel_grouptitle" role="presentation" >{label}</h1>'),i=/\'/g;CKEDITOR.ui.panel.prototype.addListBlock=function(a,b){return this.addBlock(a,new CKEDITOR.ui.listBlock(this.getHolderElement(),b))};CKEDITOR.ui.listBlock=CKEDITOR.tools.createClass({base:CKEDITOR.ui.panel.block,$:function(a,b){var b=b||{},c=b.attributes||(b.attributes={});(this.multiSelect=!!b.multiSelect)&&(c["aria-multiselectable"]=!0);!c.role&&(c.role="listbox");this.base.apply(this,arguments);this.element.setAttribute("role",
-c.role);c=this.keys;c[40]="next";c[9]="next";c[38]="prev";c[CKEDITOR.SHIFT+9]="prev";c[32]=CKEDITOR.env.ie?"mouseup":"click";CKEDITOR.env.ie&&(c[13]="mouseup");this._.pendingHtml=[];this._.pendingList=[];this._.items={};this._.groups={}},_:{close:function(){if(this._.started){var a=f.output({items:this._.pendingList.join("")});this._.pendingList=[];this._.pendingHtml.push(a);delete this._.started}},getClick:function(){this._.click||(this._.click=CKEDITOR.tools.addFunction(function(a){var b=this.toggle(a);
-if(this.onClick)this.onClick(a,b)},this));return this._.click}},proto:{add:function(a,b,c){var d=CKEDITOR.tools.getNextId();this._.started||(this._.started=1,this._.size=this._.size||0);this._.items[a]=d;var e;e=CKEDITOR.tools.htmlEncodeAttr(a).replace(i,"\\'");a={id:d,val:e,onclick:CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick",clickFn:this._.getClick(),title:CKEDITOR.tools.htmlEncodeAttr(c||a),text:b||a};this._.pendingList.push(g.output(a))},startGroup:function(a){this._.close();
-var b=CKEDITOR.tools.getNextId();this._.groups[a]=b;this._.pendingHtml.push(h.output({id:b,label:a}))},commit:function(){this._.close();this.element.appendHtml(this._.pendingHtml.join(""));delete this._.size;this._.pendingHtml=[]},toggle:function(a){var b=this.isMarked(a);b?this.unmark(a):this.mark(a);return!b},hideGroup:function(a){var b=(a=this.element.getDocument().getById(this._.groups[a]))&&a.getNext();a&&(a.setStyle("display","none"),b&&"ul"==b.getName()&&b.setStyle("display","none"))},hideItem:function(a){this.element.getDocument().getById(this._.items[a]).setStyle("display",
-"none")},showAll:function(){var a=this._.items,b=this._.groups,c=this.element.getDocument(),d;for(d in a)c.getById(a[d]).setStyle("display","");for(var e in b)a=c.getById(b[e]),d=a.getNext(),a.setStyle("display",""),d&&"ul"==d.getName()&&d.setStyle("display","")},mark:function(a){this.multiSelect||this.unmarkAll();var a=this._.items[a],b=this.element.getDocument().getById(a);b.addClass("cke_selected");this.element.getDocument().getById(a+"_option").setAttribute("aria-selected",!0);this.onMark&&this.onMark(b)},
-unmark:function(a){var b=this.element.getDocument(),a=this._.items[a],c=b.getById(a);c.removeClass("cke_selected");b.getById(a+"_option").removeAttribute("aria-selected");this.onUnmark&&this.onUnmark(c)},unmarkAll:function(){var a=this._.items,b=this.element.getDocument(),c;for(c in a){var d=a[c];b.getById(d).removeClass("cke_selected");b.getById(d+"_option").removeAttribute("aria-selected")}this.onUnmark&&this.onUnmark()},isMarked:function(a){return this.element.getDocument().getById(this._.items[a]).hasClass("cke_selected")},
-focus:function(a){this._.focusIndex=-1;var b=this.element.getElementsByTag("a"),c,d=-1;if(a)for(c=this.element.getDocument().getById(this._.items[a]).getFirst();a=b.getItem(++d);){if(a.equals(c)){this._.focusIndex=d;break}}else this.element.focus();c&&setTimeout(function(){c.focus()},0)}}})}});CKEDITOR.plugins.add("richcombo",{requires:"floatpanel,listblock,button",beforeInit:function(d){d.ui.addHandler(CKEDITOR.UI_RICHCOMBO,CKEDITOR.ui.richCombo.handler)}});
-(function(){var d='<span id="{id}" class="cke_combo cke_combo__{name} {cls}" role="presentation"><span id="{id}_label" class="cke_combo_label">{label}</span><a class="cke_combo_button" title="{title}" tabindex="-1"'+(CKEDITOR.env.gecko&&!CKEDITOR.env.hc?"":" href=\"javascript:void('{titleJs}')\"")+' hidefocus="true" role="button" aria-labelledby="{id}_label" aria-haspopup="true"';CKEDITOR.env.gecko&&CKEDITOR.env.mac&&(d+=' onkeypress="return false;"');CKEDITOR.env.gecko&&(d+=' onblur="this.style.cssText = this.style.cssText;"');
-var d=d+(' onkeydown="return CKEDITOR.tools.callFunction({keydownFn},event,this);" onfocus="return CKEDITOR.tools.callFunction({focusFn},event);" '+(CKEDITOR.env.ie?'onclick="return false;" onmouseup':"onclick")+'="CKEDITOR.tools.callFunction({clickFn},this);return false;"><span id="{id}_text" class="cke_combo_text cke_combo_inlinelabel">{label}</span><span class="cke_combo_open"><span class="cke_combo_arrow">'+(CKEDITOR.env.hc?"&#9660;":CKEDITOR.env.air?"&nbsp;":"")+"</span></span></a></span>"),
-i=CKEDITOR.addTemplate("combo",d);CKEDITOR.UI_RICHCOMBO="richcombo";CKEDITOR.ui.richCombo=CKEDITOR.tools.createClass({$:function(a){CKEDITOR.tools.extend(this,a,{canGroup:!1,title:a.label,modes:{wysiwyg:1},editorFocus:1});a=this.panel||{};delete this.panel;this.id=CKEDITOR.tools.getNextNumber();this.document=a.parent&&a.parent.getDocument()||CKEDITOR.document;a.className="cke_combopanel";a.block={multiSelect:a.multiSelect,attributes:a.attributes};a.toolbarRelated=!0;this._={panelDefinition:a,items:{}}},
-proto:{renderHtml:function(a){var b=[];this.render(a,b);return b.join("")},render:function(a,b){function g(){if(this.getState()!=CKEDITOR.TRISTATE_ON){var c=this.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;a.readOnly&&!this.readOnly&&(c=CKEDITOR.TRISTATE_DISABLED);this.setState(c);this.setValue("");c!=CKEDITOR.TRISTATE_DISABLED&&this.refresh&&this.refresh()}}var d=CKEDITOR.env,h="cke_"+this.id,e=CKEDITOR.tools.addFunction(function(b){j&&(a.unlockSelection(1),j=0);c.execute(b)},
-this),f=this,c={id:h,combo:this,focus:function(){CKEDITOR.document.getById(h).getChild(1).focus()},execute:function(c){var b=f._;if(b.state!=CKEDITOR.TRISTATE_DISABLED)if(f.createPanel(a),b.on)b.panel.hide();else{f.commit();var d=f.getValue();d?b.list.mark(d):b.list.unmarkAll();b.panel.showBlock(f.id,new CKEDITOR.dom.element(c),4)}},clickFn:e};a.on("activeFilterChange",g,this);a.on("mode",g,this);a.on("selectionChange",g,this);!this.readOnly&&a.on("readOnly",g,this);var k=CKEDITOR.tools.addFunction(function(b,
-d){var b=new CKEDITOR.dom.event(b),g=b.getKeystroke();if(40==g)a.once("panelShow",function(a){a.data._.panel._.currentBlock.onKeyDown(40)});switch(g){case 13:case 32:case 40:CKEDITOR.tools.callFunction(e,d);break;default:c.onkey(c,g)}b.preventDefault()}),l=CKEDITOR.tools.addFunction(function(){c.onfocus&&c.onfocus()}),j=0;c.keyDownFn=k;d={id:h,name:this.name||this.command,label:this.label,title:this.title,cls:this.className||"",titleJs:d.gecko&&!d.hc?"":(this.title||"").replace("'",""),keydownFn:k,
-focusFn:l,clickFn:e};i.output(d,b);if(this.onRender)this.onRender();return c},createPanel:function(a){if(!this._.panel){var b=this._.panelDefinition,d=this._.panelDefinition.block,i=b.parent||CKEDITOR.document.getBody(),h="cke_combopanel__"+this.name,e=new CKEDITOR.ui.floatPanel(a,i,b),f=e.addListBlock(this.id,d),c=this;e.onShow=function(){this.element.addClass(h);c.setState(CKEDITOR.TRISTATE_ON);c._.on=1;c.editorFocus&&!a.focusManager.hasFocus&&a.focus();if(c.onOpen)c.onOpen();a.once("panelShow",
-function(){f.focus(!f.multiSelect&&c.getValue())})};e.onHide=function(b){this.element.removeClass(h);c.setState(c.modes&&c.modes[a.mode]?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);c._.on=0;if(!b&&c.onClose)c.onClose()};e.onEscape=function(){e.hide(1)};f.onClick=function(a,b){c.onClick&&c.onClick.call(c,a,b);e.hide()};this._.panel=e;this._.list=f;e.getBlock(this.id).onHide=function(){c._.on=0;c.setState(CKEDITOR.TRISTATE_OFF)};this.init&&this.init()}},setValue:function(a,b){this._.value=a;var d=
-this.document.getById("cke_"+this.id+"_text");d&&(!a&&!b?(b=this.label,d.addClass("cke_combo_inlinelabel")):d.removeClass("cke_combo_inlinelabel"),d.setText("undefined"!=typeof b?b:a))},getValue:function(){return this._.value||""},unmarkAll:function(){this._.list.unmarkAll()},mark:function(a){this._.list.mark(a)},hideItem:function(a){this._.list.hideItem(a)},hideGroup:function(a){this._.list.hideGroup(a)},showAll:function(){this._.list.showAll()},add:function(a,b,d){this._.items[a]=d||a;this._.list.add(a,
-b,d)},startGroup:function(a){this._.list.startGroup(a)},commit:function(){this._.committed||(this._.list.commit(),this._.committed=1,CKEDITOR.ui.fire("ready",this));this._.committed=1},setState:function(a){if(this._.state!=a){var b=this.document.getById("cke_"+this.id);b.setState(a,"cke_combo");a==CKEDITOR.TRISTATE_DISABLED?b.setAttribute("aria-disabled",!0):b.removeAttribute("aria-disabled");this._.state=a}},getState:function(){return this._.state},enable:function(){this._.state==CKEDITOR.TRISTATE_DISABLED&&
-this.setState(this._.lastState)},disable:function(){this._.state!=CKEDITOR.TRISTATE_DISABLED&&(this._.lastState=this._.state,this.setState(CKEDITOR.TRISTATE_DISABLED))}},statics:{handler:{create:function(a){return new CKEDITOR.ui.richCombo(a)}}}});CKEDITOR.ui.prototype.addRichCombo=function(a,b){this.add(a,CKEDITOR.UI_RICHCOMBO,b)}})();(function(){function e(b,a,e,h,j,n,l,o){for(var p=b.config,k=new CKEDITOR.style(l),c=j.split(";"),j=[],g={},d=0;d<c.length;d++){var f=c[d];if(f){var f=f.split("/"),m={},i=c[d]=f[0];m[e]=j[d]=f[1]||i;g[i]=new CKEDITOR.style(l,m);g[i]._.definition.name=i}else c.splice(d--,1)}b.ui.addRichCombo(a,{label:h.label,title:h.panelTitle,toolbar:"styles,"+o,allowedContent:k,requiredContent:k,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(p.contentsCss),multiSelect:!1,attributes:{"aria-label":h.panelTitle}},
-init:function(){this.startGroup(h.panelTitle);for(var b=0;b<c.length;b++){var a=c[b];this.add(a,g[a].buildPreview(),a)}},onClick:function(a){b.focus();b.fire("saveSnapshot");var c=g[a];b[this.getValue()==a?"removeStyle":"applyStyle"](c);b.fire("saveSnapshot")},onRender:function(){b.on("selectionChange",function(a){for(var c=this.getValue(),a=a.data.path.elements,d=0,f;d<a.length;d++){f=a[d];for(var e in g)if(g[e].checkElementMatch(f,!0,b)){e!=c&&this.setValue(e);return}}this.setValue("",n)},this)},
-refresh:function(){b.activeFilter.check(k)||this.setState(CKEDITOR.TRISTATE_DISABLED)}})}CKEDITOR.plugins.add("font",{requires:"richcombo",init:function(b){var a=b.config;e(b,"Font","family",b.lang.font,a.font_names,a.font_defaultLabel,a.font_style,30);e(b,"FontSize","size",b.lang.font.fontSize,a.fontSize_sizes,a.fontSize_defaultLabel,a.fontSize_style,40)}})})();CKEDITOR.config.font_names="Arial/Arial, Helvetica, sans-serif;Comic Sans MS/Comic Sans MS, cursive;Courier New/Courier New, Courier, monospace;Georgia/Georgia, serif;Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;Tahoma/Tahoma, Geneva, sans-serif;Times New Roman/Times New Roman, Times, serif;Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;Verdana/Verdana, Geneva, sans-serif";
-CKEDITOR.config.font_defaultLabel="";CKEDITOR.config.font_style={element:"span",styles:{"font-family":"#(family)"},overrides:[{element:"font",attributes:{face:null}}]};CKEDITOR.config.fontSize_sizes="8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px";CKEDITOR.config.fontSize_defaultLabel="";CKEDITOR.config.fontSize_style={element:"span",styles:{"font-size":"#(size)"},overrides:[{element:"font",attributes:{size:null}}]};CKEDITOR.plugins.add("forms",{requires:"dialog,fakeobjects",onLoad:function(){CKEDITOR.addCss(".cke_editable form{border: 1px dotted #FF0000;padding: 2px;}\n");CKEDITOR.addCss("img.cke_hidden{background-image: url("+CKEDITOR.getUrl(this.path+"images/hiddenfield.gif")+");background-position: center center;background-repeat: no-repeat;border: 1px solid #a9a9a9;width: 16px !important;height: 16px !important;}")},init:function(a){var b=a.lang,g=0,h={email:1,password:1,search:1,tel:1,text:1,url:1},j={checkbox:"input[type,name,checked]",
-radio:"input[type,name,checked]",textfield:"input[type,name,value,size,maxlength]",textarea:"textarea[cols,rows,name]",select:"select[name,size,multiple]; option[value,selected]",button:"input[type,name,value]",form:"form[action,name,id,enctype,target,method]",hiddenfield:"input[type,name,value]",imagebutton:"input[type,alt,src]{width,height,border,border-width,border-style,margin,float}"},k={checkbox:"input",radio:"input",textfield:"input",textarea:"textarea",select:"select",button:"input",form:"form",
-hiddenfield:"input",imagebutton:"input"},e=function(d,c,e){var h={allowedContent:j[c],requiredContent:k[c]};"form"==c&&(h.context="form");a.addCommand(c,new CKEDITOR.dialogCommand(c,h));a.ui.addButton&&a.ui.addButton(d,{label:b.common[d.charAt(0).toLowerCase()+d.slice(1)],command:c,toolbar:"forms,"+(g+=10)});CKEDITOR.dialog.add(c,e)},f=this.path+"dialogs/";!a.blockless&&e("Form","form",f+"form.js");e("Checkbox","checkbox",f+"checkbox.js");e("Radio","radio",f+"radio.js");e("TextField","textfield",
-f+"textfield.js");e("Textarea","textarea",f+"textarea.js");e("Select","select",f+"select.js");e("Button","button",f+"button.js");var i=a.plugins.image;i&&!a.plugins.image2&&e("ImageButton","imagebutton",CKEDITOR.plugins.getPath("image")+"dialogs/image.js");e("HiddenField","hiddenfield",f+"hiddenfield.js");a.addMenuItems&&(e={checkbox:{label:b.forms.checkboxAndRadio.checkboxTitle,command:"checkbox",group:"checkbox"},radio:{label:b.forms.checkboxAndRadio.radioTitle,command:"radio",group:"radio"},textfield:{label:b.forms.textfield.title,
-command:"textfield",group:"textfield"},hiddenfield:{label:b.forms.hidden.title,command:"hiddenfield",group:"hiddenfield"},button:{label:b.forms.button.title,command:"button",group:"button"},select:{label:b.forms.select.title,command:"select",group:"select"},textarea:{label:b.forms.textarea.title,command:"textarea",group:"textarea"}},i&&(e.imagebutton={label:b.image.titleButton,command:"imagebutton",group:"imagebutton"}),!a.blockless&&(e.form={label:b.forms.form.menu,command:"form",group:"form"}),
-a.addMenuItems(e));a.contextMenu&&(!a.blockless&&a.contextMenu.addListener(function(d,c,a){if((d=a.contains("form",1))&&!d.isReadOnly())return{form:CKEDITOR.TRISTATE_OFF}}),a.contextMenu.addListener(function(d){if(d&&!d.isReadOnly()){var c=d.getName();if(c=="select")return{select:CKEDITOR.TRISTATE_OFF};if(c=="textarea")return{textarea:CKEDITOR.TRISTATE_OFF};if(c=="input"){var a=d.getAttribute("type")||"text";switch(a){case "button":case "submit":case "reset":return{button:CKEDITOR.TRISTATE_OFF};case "checkbox":return{checkbox:CKEDITOR.TRISTATE_OFF};
-case "radio":return{radio:CKEDITOR.TRISTATE_OFF};case "image":return i?{imagebutton:CKEDITOR.TRISTATE_OFF}:null}if(h[a])return{textfield:CKEDITOR.TRISTATE_OFF}}if(c=="img"&&d.data("cke-real-element-type")=="hiddenfield")return{hiddenfield:CKEDITOR.TRISTATE_OFF}}}));a.on("doubleclick",function(d){var c=d.data.element;if(!a.blockless&&c.is("form"))d.data.dialog="form";else if(c.is("select"))d.data.dialog="select";else if(c.is("textarea"))d.data.dialog="textarea";else if(c.is("img")&&c.data("cke-real-element-type")==
-"hiddenfield")d.data.dialog="hiddenfield";else if(c.is("input")){c=c.getAttribute("type")||"text";switch(c){case "button":case "submit":case "reset":d.data.dialog="button";break;case "checkbox":d.data.dialog="checkbox";break;case "radio":d.data.dialog="radio";break;case "image":d.data.dialog="imagebutton"}if(h[c])d.data.dialog="textfield"}})},afterInit:function(a){var b=a.dataProcessor,g=b&&b.htmlFilter,b=b&&b.dataFilter;CKEDITOR.env.ie&&g&&g.addRules({elements:{input:function(a){var a=a.attributes,
-b=a.type;b||(a.type="text");("checkbox"==b||"radio"==b)&&"on"==a.value&&delete a.value}}},{applyToAll:!0});b&&b.addRules({elements:{input:function(b){if("hidden"==b.attributes.type)return a.createFakeParserElement(b,"cke_hidden","hiddenfield")}}},{applyToAll:!0})}});CKEDITOR.plugins.add("format",{requires:"richcombo",init:function(a){if(!a.blockless){for(var f=a.config,c=a.lang.format,j=f.format_tags.split(";"),d={},k=0,l=[],g=0;g<j.length;g++){var h=j[g],i=new CKEDITOR.style(f["format_"+h]);if(!a.filter.customConfig||a.filter.check(i))k++,d[h]=i,d[h]._.enterMode=a.config.enterMode,l.push(i)}0!==k&&a.ui.addRichCombo("Format",{label:c.label,title:c.panelTitle,toolbar:"styles,20",allowedContent:l,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(f.contentsCss),
-multiSelect:!1,attributes:{"aria-label":c.panelTitle}},init:function(){this.startGroup(c.panelTitle);for(var a in d){var e=c["tag_"+a];this.add(a,d[a].buildPreview(e),e)}},onClick:function(b){a.focus();a.fire("saveSnapshot");var b=d[b],e=a.elementPath();a[b.checkActive(e,a)?"removeStyle":"applyStyle"](b);setTimeout(function(){a.fire("saveSnapshot")},0)},onRender:function(){a.on("selectionChange",function(b){var e=this.getValue(),b=b.data.path;this.refresh();for(var c in d)if(d[c].checkActive(b,a)){c!=
-e&&this.setValue(c,a.lang.format["tag_"+c]);return}this.setValue("")},this)},onOpen:function(){this.showAll();for(var b in d)a.activeFilter.check(d[b])||this.hideItem(b)},refresh:function(){var b=a.elementPath();if(b){if(b.isContextFor("p"))for(var c in d)if(a.activeFilter.check(d[c]))return;this.setState(CKEDITOR.TRISTATE_DISABLED)}}})}}});CKEDITOR.config.format_tags="p;h1;h2;h3;h4;h5;h6;pre;address;div";CKEDITOR.config.format_p={element:"p"};CKEDITOR.config.format_div={element:"div"};
-CKEDITOR.config.format_pre={element:"pre"};CKEDITOR.config.format_address={element:"address"};CKEDITOR.config.format_h1={element:"h1"};CKEDITOR.config.format_h2={element:"h2"};CKEDITOR.config.format_h3={element:"h3"};CKEDITOR.config.format_h4={element:"h4"};CKEDITOR.config.format_h5={element:"h5"};CKEDITOR.config.format_h6={element:"h6"};(function(){var b={canUndo:!1,exec:function(a){var b=a.document.createElement("hr");a.insertElement(b)},allowedContent:"hr",requiredContent:"hr"};CKEDITOR.plugins.add("horizontalrule",{init:function(a){a.blockless||(a.addCommand("horizontalrule",b),a.ui.addButton&&a.ui.addButton("HorizontalRule",{label:a.lang.horizontalrule.toolbar,command:"horizontalrule",toolbar:"insert,40"}))}})})();CKEDITOR.plugins.add("htmlwriter",{init:function(b){var a=new CKEDITOR.htmlWriter;a.forceSimpleAmpersand=b.config.forceSimpleAmpersand;a.indentationChars=b.config.dataIndentationChars||"\t";b.dataProcessor.writer=a}});
-CKEDITOR.htmlWriter=CKEDITOR.tools.createClass({base:CKEDITOR.htmlParser.basicWriter,$:function(){this.base();this.indentationChars="\t";this.selfClosingEnd=" />";this.lineBreakChars="\n";this.sortAttributes=1;this._.indent=0;this._.indentation="";this._.inPre=0;this._.rules={};var b=CKEDITOR.dtd,a;for(a in CKEDITOR.tools.extend({},b.$nonBodyContent,b.$block,b.$listItem,b.$tableContent))this.setRules(a,{indent:!b[a]["#"],breakBeforeOpen:1,breakBeforeClose:!b[a]["#"],breakAfterClose:1,needsSpace:a in
-b.$block&&!(a in{li:1,dt:1,dd:1})});this.setRules("br",{breakAfterOpen:1});this.setRules("title",{indent:0,breakAfterOpen:0});this.setRules("style",{indent:0,breakBeforeClose:1});this.setRules("pre",{breakAfterOpen:1,indent:0})},proto:{openTag:function(b){var a=this._.rules[b];this._.afterCloser&&(a&&a.needsSpace&&this._.needsSpace)&&this._.output.push("\n");this._.indent?this.indentation():a&&a.breakBeforeOpen&&(this.lineBreak(),this.indentation());this._.output.push("<",b);this._.afterCloser=0},
-openTagClose:function(b,a){var c=this._.rules[b];a?(this._.output.push(this.selfClosingEnd),c&&c.breakAfterClose&&(this._.needsSpace=c.needsSpace)):(this._.output.push(">"),c&&c.indent&&(this._.indentation+=this.indentationChars));c&&c.breakAfterOpen&&this.lineBreak();"pre"==b&&(this._.inPre=1)},attribute:function(b,a){"string"==typeof a&&(this.forceSimpleAmpersand&&(a=a.replace(/&amp;/g,"&")),a=CKEDITOR.tools.htmlEncodeAttr(a));this._.output.push(" ",b,'="',a,'"')},closeTag:function(b){var a=this._.rules[b];
-a&&a.indent&&(this._.indentation=this._.indentation.substr(this.indentationChars.length));this._.indent?this.indentation():a&&a.breakBeforeClose&&(this.lineBreak(),this.indentation());this._.output.push("</",b,">");"pre"==b&&(this._.inPre=0);a&&a.breakAfterClose&&(this.lineBreak(),this._.needsSpace=a.needsSpace);this._.afterCloser=1},text:function(b){this._.indent&&(this.indentation(),!this._.inPre&&(b=CKEDITOR.tools.ltrim(b)));this._.output.push(b)},comment:function(b){this._.indent&&this.indentation();
-this._.output.push("<\!--",b,"--\>")},lineBreak:function(){!this._.inPre&&0<this._.output.length&&this._.output.push(this.lineBreakChars);this._.indent=1},indentation:function(){!this._.inPre&&this._.indentation&&this._.output.push(this._.indentation);this._.indent=0},reset:function(){this._.output=[];this._.indent=0;this._.indentation="";this._.afterCloser=0;this._.inPre=0},setRules:function(b,a){var c=this._.rules[b];c?CKEDITOR.tools.extend(c,a,!0):this._.rules[b]=a}}});(function(){CKEDITOR.plugins.add("iframe",{requires:"dialog,fakeobjects",onLoad:function(){CKEDITOR.addCss("img.cke_iframe{background-image: url("+CKEDITOR.getUrl(this.path+"images/placeholder.png")+");background-position: center center;background-repeat: no-repeat;border: 1px solid #a9a9a9;width: 80px;height: 80px;}")},init:function(a){var b=a.lang.iframe,c="iframe[align,longdesc,frameborder,height,name,scrolling,src,title,width]";a.plugins.dialogadvtab&&(c+=";iframe"+a.plugins.dialogadvtab.allowedContent({id:1,
-classes:1,styles:1}));CKEDITOR.dialog.add("iframe",this.path+"dialogs/iframe.js");a.addCommand("iframe",new CKEDITOR.dialogCommand("iframe",{allowedContent:c,requiredContent:"iframe"}));a.ui.addButton&&a.ui.addButton("Iframe",{label:b.toolbar,command:"iframe",toolbar:"insert,80"});a.on("doubleclick",function(a){var b=a.data.element;b.is("img")&&"iframe"==b.data("cke-real-element-type")&&(a.data.dialog="iframe")});a.addMenuItems&&a.addMenuItems({iframe:{label:b.title,command:"iframe",group:"image"}});
-a.contextMenu&&a.contextMenu.addListener(function(a){if(a&&a.is("img")&&"iframe"==a.data("cke-real-element-type"))return{iframe:CKEDITOR.TRISTATE_OFF}})},afterInit:function(a){var b=a.dataProcessor;(b=b&&b.dataFilter)&&b.addRules({elements:{iframe:function(b){return a.createFakeParserElement(b,"cke_iframe","iframe",!0)}}})}})})();(function(){function k(a){var e=this.editor,b=a.document,c=b.body,d=b.getElementById("cke_actscrpt");d&&d.parentNode.removeChild(d);(d=b.getElementById("cke_shimscrpt"))&&d.parentNode.removeChild(d);(d=b.getElementById("cke_basetagscrpt"))&&d.parentNode.removeChild(d);CKEDITOR.env.gecko&&(c.contentEditable=!1,2E4>CKEDITOR.env.version&&(c.innerHTML=c.innerHTML.replace(/^.*<\!-- cke-content-start --\>/,""),setTimeout(function(){var a=new CKEDITOR.dom.range(new CKEDITOR.dom.document(b));a.setStart(new CKEDITOR.dom.node(c),
-0);e.getSelection().selectRanges([a])},0)));c.contentEditable=!0;CKEDITOR.env.ie&&(c.hideFocus=!0,c.disabled=!0,c.removeAttribute("disabled"));delete this._.isLoadingData;this.$=c;b=new CKEDITOR.dom.document(b);this.setup();CKEDITOR.env.ie&&(b.getDocumentElement().addClass(b.$.compatMode),e.config.enterMode!=CKEDITOR.ENTER_P&&this.attachListener(b,"selectionchange",function(){var a=b.getBody(),c=e.getSelection(),d=c&&c.getRanges()[0];d&&(a.getHtml().match(/^<p>(?:&nbsp;|<br>)<\/p>$/i)&&d.startContainer.equals(a))&&
-setTimeout(function(){d=e.getSelection().getRanges()[0];if(!d.startContainer.equals("body")){a.getFirst().remove(1);d.moveToElementEditEnd(a);d.select()}},0)}));if(CKEDITOR.env.webkit||CKEDITOR.env.ie&&10<CKEDITOR.env.version)b.getDocumentElement().on("mousedown",function(a){a.data.getTarget().is("html")&&setTimeout(function(){e.editable().focus()})});l(e);try{e.document.$.execCommand("2D-position",!1,!0)}catch(g){}(CKEDITOR.env.gecko||CKEDITOR.env.ie&&"CSS1Compat"==e.document.$.compatMode)&&this.attachListener(this,
-"keydown",function(a){var b=a.data.getKeystroke();if(b==33||b==34)if(CKEDITOR.env.ie)setTimeout(function(){e.getSelection().scrollIntoView()},0);else if(e.window.$.innerHeight>this.$.offsetHeight){var c=e.createRange();c[b==33?"moveToElementEditStart":"moveToElementEditEnd"](this);c.select();a.data.preventDefault()}});CKEDITOR.env.ie&&this.attachListener(b,"blur",function(){try{b.$.selection.empty()}catch(a){}});CKEDITOR.env.iOS&&this.attachListener(b,"touchend",function(){a.focus()});d=e.document.getElementsByTag("title").getItem(0);
-d.data("cke-title",d.getText());CKEDITOR.env.ie&&(e.document.$.title=this._.docTitle);CKEDITOR.tools.setTimeout(function(){if(this.status=="unloaded")this.status="ready";e.fire("contentDom");if(this._.isPendingFocus){e.focus();this._.isPendingFocus=false}setTimeout(function(){e.fire("dataReady")},0);CKEDITOR.env.ie&&setTimeout(function(){if(e.document){var a=e.document.$.body;a.runtimeStyle.marginBottom="0px";a.runtimeStyle.marginBottom=""}},1E3)},0,this)}function l(a){function e(){var c;a.editable().attachListener(a,
-"selectionChange",function(){var d=a.getSelection().getSelectedElement();d&&(c&&(c.detachEvent("onresizestart",b),c=null),d.$.attachEvent("onresizestart",b),c=d.$)})}function b(a){a.returnValue=!1}if(CKEDITOR.env.gecko)try{var c=a.document.$;c.execCommand("enableObjectResizing",!1,!a.config.disableObjectResizing);c.execCommand("enableInlineTableEditing",!1,!a.config.disableNativeTableHandles)}catch(d){}else CKEDITOR.env.ie&&(11>CKEDITOR.env.version&&a.config.disableObjectResizing)&&e(a)}function m(){var a=
-[];if(8<=CKEDITOR.document.$.documentMode){a.push("html.CSS1Compat [contenteditable=false]{min-height:0 !important}");var e=[],b;for(b in CKEDITOR.dtd.$removeEmpty)e.push("html.CSS1Compat "+b+"[contenteditable=false]");a.push(e.join(",")+"{display:inline-block}")}else CKEDITOR.env.gecko&&(a.push("html{height:100% !important}"),a.push("img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}"));a.push("html{cursor:text;*cursor:auto}");a.push("img,input,textarea{cursor:default}");
-return a.join("\n")}CKEDITOR.plugins.add("wysiwygarea",{init:function(a){a.config.fullPage&&a.addFeature({allowedContent:"html head title; style [media,type]; body (*)[id]; meta link [*]",requiredContent:"body"});a.addMode("wysiwyg",function(e){function b(b){b&&b.removeListener();a.editable(new j(a,d.$.contentWindow.document.body));a.setData(a.getData(1),e)}var c="document.open();"+(CKEDITOR.env.ie?"("+CKEDITOR.tools.fixDomain+")();":"")+"document.close();",c=CKEDITOR.env.air?"javascript:void(0)":
-CKEDITOR.env.ie?"javascript:void(function(){"+encodeURIComponent(c)+"}())":"",d=CKEDITOR.dom.element.createFromHtml('<iframe src="'+c+'" frameBorder="0"></iframe>');d.setStyles({width:"100%",height:"100%"});d.addClass("cke_wysiwyg_frame cke_reset");var g=a.ui.space("contents");g.append(d);if(c=CKEDITOR.env.ie||CKEDITOR.env.gecko)d.on("load",b);var f=a.title,h=a.fire("ariaEditorHelpLabel",{}).label;f&&(CKEDITOR.env.ie&&h&&(f+=", "+h),d.setAttribute("title",f));if(h){var f=CKEDITOR.tools.getNextId(),
-i=CKEDITOR.dom.element.createFromHtml('<span id="'+f+'" class="cke_voice_label">'+h+"</span>");g.append(i,1);d.setAttribute("aria-describedby",f)}a.on("beforeModeUnload",function(a){a.removeListener();i&&i.remove()});d.setAttributes({tabIndex:a.tabIndex,allowTransparency:"true"});!c&&b();CKEDITOR.env.webkit&&(c=function(){g.setStyle("width","100%");d.hide();d.setSize("width",g.getSize("width"));g.removeStyle("width");d.show()},d.setCustomData("onResize",c),CKEDITOR.document.getWindow().on("resize",
-c));a.fire("ariaWidget",d)})}});CKEDITOR.editor.prototype.addContentsCss=function(a){var e=this.config,b=e.contentsCss;CKEDITOR.tools.isArray(b)||(e.contentsCss=b?[b]:[]);e.contentsCss.push(a)};var j=CKEDITOR.tools.createClass({$:function(a){this.base.apply(this,arguments);this._.frameLoadedHandler=CKEDITOR.tools.addFunction(function(a){CKEDITOR.tools.setTimeout(k,0,this,a)},this);this._.docTitle=this.getWindow().getFrame().getAttribute("title")},base:CKEDITOR.editable,proto:{setData:function(a,e){var b=
-this.editor;if(e)this.setHtml(a),b.fire("dataReady");else{this._.isLoadingData=!0;b._.dataStore={id:1};var c=b.config,d=c.fullPage,g=c.docType,f=CKEDITOR.tools.buildStyleHtml(m()).replace(/<style>/,'<style data-cke-temp="1">');d||(f+=CKEDITOR.tools.buildStyleHtml(b.config.contentsCss));var h=c.baseHref?'<base href="'+c.baseHref+'" data-cke-temp="1" />':"";d&&(a=a.replace(/<!DOCTYPE[^>]*>/i,function(a){b.docType=g=a;return""}).replace(/<\?xml\s[^\?]*\?>/i,function(a){b.xmlDeclaration=a;return""}));
-a=b.dataProcessor.toHtml(a);d?(/<body[\s|>]/.test(a)||(a="<body>"+a),/<html[\s|>]/.test(a)||(a="<html>"+a+"</html>"),/<head[\s|>]/.test(a)?/<title[\s|>]/.test(a)||(a=a.replace(/<head[^>]*>/,"$&<title></title>")):a=a.replace(/<html[^>]*>/,"$&<head><title></title></head>"),h&&(a=a.replace(/<head[^>]*?>/,"$&"+h)),a=a.replace(/<\/head\s*>/,f+"$&"),a=g+a):a=c.docType+'<html dir="'+c.contentsLangDirection+'" lang="'+(c.contentsLanguage||b.langCode)+'"><head><title>'+this._.docTitle+"</title>"+h+f+"</head><body"+
-(c.bodyId?' id="'+c.bodyId+'"':"")+(c.bodyClass?' class="'+c.bodyClass+'"':"")+">"+a+"</body></html>";CKEDITOR.env.gecko&&(a=a.replace(/<body/,'<body contenteditable="true" '),2E4>CKEDITOR.env.version&&(a=a.replace(/<body[^>]*>/,"$&<\!-- cke-content-start --\>")));c='<script id="cke_actscrpt" type="text/javascript"'+(CKEDITOR.env.ie?' defer="defer" ':"")+">var wasLoaded=0;function onload(){if(!wasLoaded)window.parent.CKEDITOR.tools.callFunction("+this._.frameLoadedHandler+",window);wasLoaded=1;}"+
-(CKEDITOR.env.ie?"onload();":'document.addEventListener("DOMContentLoaded", onload, false );')+"<\/script>";CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(c+='<script id="cke_shimscrpt">window.parent.CKEDITOR.tools.enableHtml5Elements(document)<\/script>');h&&(CKEDITOR.env.ie&&10>CKEDITOR.env.version)&&(c+='<script id="cke_basetagscrpt">var baseTag = document.querySelector( "base" );baseTag.href = baseTag.href;<\/script>');a=a.replace(/(?=\s*<\/(:?head)>)/,c);this.clearCustomData();this.clearListeners();
-b.fire("contentDomUnload");var i=this.getDocument();try{i.write(a)}catch(j){setTimeout(function(){i.write(a)},0)}}},getData:function(a){if(a)return this.getHtml();var a=this.editor,e=a.config,b=e.fullPage,c=b&&a.docType,d=b&&a.xmlDeclaration,g=this.getDocument(),b=b?g.getDocumentElement().getOuterHtml():g.getBody().getHtml();CKEDITOR.env.gecko&&e.enterMode!=CKEDITOR.ENTER_BR&&(b=b.replace(/<br>(?=\s*(:?$|<\/body>))/,""));b=a.dataProcessor.toDataFormat(b);d&&(b=d+"\n"+b);c&&(b=c+"\n"+b);return b},
-focus:function(){this._.isLoadingData?this._.isPendingFocus=!0:j.baseProto.focus.call(this)},detach:function(){var a=this.editor,e=a.document,a=a.window.getFrame();j.baseProto.detach.call(this);this.clearCustomData();e.getDocumentElement().clearCustomData();a.clearCustomData();CKEDITOR.tools.removeFunction(this._.frameLoadedHandler);(e=a.removeCustomData("onResize"))&&e.removeListener();a.remove()}}})})();CKEDITOR.config.disableObjectResizing=!1;CKEDITOR.config.disableNativeTableHandles=!0;
-CKEDITOR.config.disableNativeSpellChecker=!0;CKEDITOR.config.contentsCss=CKEDITOR.getUrl("contents.css");(function(){function e(b,a){a||(a=b.getSelection().getSelectedElement());if(a&&a.is("img")&&!a.data("cke-realelement")&&!a.isReadOnly())return a}function f(b){var a=b.getStyle("float");if("inherit"==a||"none"==a)a=0;a||(a=b.getAttribute("align"));return a}CKEDITOR.plugins.add("image",{requires:"dialog",init:function(b){if(!b.plugins.image2){CKEDITOR.dialog.add("image",this.path+"dialogs/image.js");var a="img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}";
-CKEDITOR.dialog.isTabEnabled(b,"image","advanced")&&(a="img[alt,dir,id,lang,longdesc,!src,title]{*}(*)");b.addCommand("image",new CKEDITOR.dialogCommand("image",{allowedContent:a,requiredContent:"img[alt,src]",contentTransformations:[["img{width}: sizeToStyle","img[width]: sizeToAttribute"],["img{float}: alignmentToStyle","img[align]: alignmentToAttribute"]]}));b.ui.addButton&&b.ui.addButton("Image",{label:b.lang.common.image,command:"image",toolbar:"insert,10"});b.on("doubleclick",function(b){var a=
-b.data.element;a.is("img")&&(!a.data("cke-realelement")&&!a.isReadOnly())&&(b.data.dialog="image")});b.addMenuItems&&b.addMenuItems({image:{label:b.lang.image.menu,command:"image",group:"image"}});b.contextMenu&&b.contextMenu.addListener(function(a){if(e(b,a))return{image:CKEDITOR.TRISTATE_OFF}})}},afterInit:function(b){function a(a){var d=b.getCommand("justify"+a);if(d){if("left"==a||"right"==a)d.on("exec",function(d){var c=e(b),g;c&&(g=f(c),g==a?(c.removeStyle("float"),a==f(c)&&c.removeAttribute("align")):
-c.setStyle("float",a),d.cancel())});d.on("refresh",function(d){var c=e(b);c&&(c=f(c),this.setState(c==a?CKEDITOR.TRISTATE_ON:"right"==a||"left"==a?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED),d.cancel())})}}b.plugins.image2||(a("left"),a("right"),a("center"),a("block"))}})})();CKEDITOR.config.image_removeLinkByEmptyURL=!0;(function(){function k(a,b){var e,f;b.on("refresh",function(a){var b=[i],c;for(c in a.data.states)b.push(a.data.states[c]);this.setState(CKEDITOR.tools.search(b,m)?m:i)},b,null,100);b.on("exec",function(b){e=a.getSelection();f=e.createBookmarks(1);b.data||(b.data={});b.data.done=!1},b,null,0);b.on("exec",function(){a.forceNextSelectionCheck();e.selectBookmarks(f)},b,null,100)}var i=CKEDITOR.TRISTATE_DISABLED,m=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indent",{init:function(a){var b=CKEDITOR.plugins.indent.genericDefinition;
-k(a,a.addCommand("indent",new b(!0)));k(a,a.addCommand("outdent",new b));a.ui.addButton&&(a.ui.addButton("Indent",{label:a.lang.indent.indent,command:"indent",directional:!0,toolbar:"indent,20"}),a.ui.addButton("Outdent",{label:a.lang.indent.outdent,command:"outdent",directional:!0,toolbar:"indent,10"}));a.on("dirChanged",function(b){var f=a.createRange(),j=b.data.node;f.setStartBefore(j);f.setEndAfter(j);for(var l=new CKEDITOR.dom.walker(f),c;c=l.next();)if(c.type==CKEDITOR.NODE_ELEMENT)if(!c.equals(j)&&
-c.getDirection()){f.setStartAfter(c);l=new CKEDITOR.dom.walker(f)}else{var d=a.config.indentClasses;if(d)for(var g=b.data.dir=="ltr"?["_rtl",""]:["","_rtl"],h=0;h<d.length;h++)if(c.hasClass(d[h]+g[0])){c.removeClass(d[h]+g[0]);c.addClass(d[h]+g[1])}d=c.getStyle("margin-right");g=c.getStyle("margin-left");d?c.setStyle("margin-left",d):c.removeStyle("margin-left");g?c.setStyle("margin-right",g):c.removeStyle("margin-right")}})}});CKEDITOR.plugins.indent={genericDefinition:function(a){this.isIndent=
-!!a;this.startDisabled=!this.isIndent},specificDefinition:function(a,b,e){this.name=b;this.editor=a;this.jobs={};this.enterBr=a.config.enterMode==CKEDITOR.ENTER_BR;this.isIndent=!!e;this.relatedGlobal=e?"indent":"outdent";this.indentKey=e?9:CKEDITOR.SHIFT+9;this.database={}},registerCommands:function(a,b){a.on("pluginsLoaded",function(){for(var a in b)(function(a,b){var e=a.getCommand(b.relatedGlobal),c;for(c in b.jobs)e.on("exec",function(d){d.data.done||(a.fire("lockSnapshot"),b.execJob(a,c)&&(d.data.done=
-!0),a.fire("unlockSnapshot"),CKEDITOR.dom.element.clearAllMarkers(b.database))},this,null,c),e.on("refresh",function(d){d.data.states||(d.data.states={});d.data.states[b.name+"@"+c]=b.refreshJob(a,c,d.data.path)},this,null,c);a.addFeature(b)})(this,b[a])})}};CKEDITOR.plugins.indent.genericDefinition.prototype={context:"p",exec:function(){}};CKEDITOR.plugins.indent.specificDefinition.prototype={execJob:function(a,b){var e=this.jobs[b];if(e.state!=i)return e.exec.call(this,a)},refreshJob:function(a,
-b,e){b=this.jobs[b];b.state=a.activeFilter.checkFeature(this)?b.refresh.call(this,a,e):i;return b.state},getContext:function(a){return a.contains(this.context)}}})();(function(){function h(b,c,a){if(!b.getCustomData("indent_processed")){var d=this.editor,f=this.isIndent;if(c){d=b.$.className.match(this.classNameRegex);a=0;d&&(d=d[1],a=CKEDITOR.tools.indexOf(c,d)+1);if(0>(a+=f?1:-1))return;a=Math.min(a,c.length);a=Math.max(a,0);b.$.className=CKEDITOR.tools.ltrim(b.$.className.replace(this.classNameRegex,""));0<a&&b.addClass(c[a-1])}else{var c=i(b,a),a=parseInt(b.getStyle(c),10),g=d.config.indentOffset||40;isNaN(a)&&(a=0);a+=(f?1:-1)*g;if(0>a)return;a=Math.max(a,
-0);a=Math.ceil(a/g)*g;b.setStyle(c,a?a+(d.config.indentUnit||"px"):"");""===b.getAttribute("style")&&b.removeAttribute("style")}CKEDITOR.dom.element.setMarker(this.database,b,"indent_processed",1)}}function i(b,c){return"ltr"==(c||b.getComputedStyle("direction"))?"margin-left":"margin-right"}var j=CKEDITOR.dtd.$listItem,l=CKEDITOR.dtd.$list,f=CKEDITOR.TRISTATE_DISABLED,k=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indentblock",{requires:"indent",init:function(b){function c(b,c){a.specificDefinition.apply(this,
-arguments);this.allowedContent={"div h1 h2 h3 h4 h5 h6 ol p pre ul":{propertiesOnly:!0,styles:!d?"margin-left,margin-right":null,classes:d||null}};this.enterBr&&(this.allowedContent.div=!0);this.requiredContent=(this.enterBr?"div":"p")+(d?"("+d.join(",")+")":"{margin-left}");this.jobs={20:{refresh:function(a,b){var e=b.block||b.blockLimit;if(e.is(j))e=e.getParent();else if(e.getAscendant(j))return f;if(!this.enterBr&&!this.getContext(b))return f;if(d){var c;c=d;var e=e.$.className.match(this.classNameRegex),
-g=this.isIndent;c=e?g?e[1]!=c.slice(-1):true:g;return c?k:f}return this.isIndent?k:e?CKEDITOR[(parseInt(e.getStyle(i(e)),10)||0)<=0?"TRISTATE_DISABLED":"TRISTATE_OFF"]:f},exec:function(a){var b=a.getSelection(),b=b&&b.getRanges()[0],c;if(c=a.elementPath().contains(l))h.call(this,c,d);else{b=b.createIterator();a=a.config.enterMode;b.enforceRealBlocks=true;for(b.enlargeBr=a!=CKEDITOR.ENTER_BR;c=b.getNextParagraph(a==CKEDITOR.ENTER_P?"p":"div");)c.isReadOnly()||h.call(this,c,d)}return true}}}}var a=
-CKEDITOR.plugins.indent,d=b.config.indentClasses;a.registerCommands(b,{indentblock:new c(b,"indentblock",!0),outdentblock:new c(b,"outdentblock")});CKEDITOR.tools.extend(c.prototype,a.specificDefinition.prototype,{context:{div:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,ul:1,ol:1,p:1,pre:1,table:1},classNameRegex:d?RegExp("(?:^|\\s+)("+d.join("|")+")(?=$|\\s)"):null})}})})();(function(){function s(e){function g(b){for(var f=d.startContainer,a=d.endContainer;f&&!f.getParent().equals(b);)f=f.getParent();for(;a&&!a.getParent().equals(b);)a=a.getParent();if(!f||!a)return!1;for(var h=f,f=[],c=!1;!c;)h.equals(a)&&(c=!0),f.push(h),h=h.getNext();if(1>f.length)return!1;h=b.getParents(!0);for(a=0;a<h.length;a++)if(h[a].getName&&k[h[a].getName()]){b=h[a];break}for(var h=n.isIndent?1:-1,a=f[0],f=f[f.length-1],c=CKEDITOR.plugins.list.listToArray(b,o),g=c[f.getCustomData("listarray_index")].indent,
-a=a.getCustomData("listarray_index");a<=f.getCustomData("listarray_index");a++)if(c[a].indent+=h,0<h){var l=c[a].parent;c[a].parent=new CKEDITOR.dom.element(l.getName(),l.getDocument())}for(a=f.getCustomData("listarray_index")+1;a<c.length&&c[a].indent>g;a++)c[a].indent+=h;f=CKEDITOR.plugins.list.arrayToList(c,o,null,e.config.enterMode,b.getDirection());if(!n.isIndent){var i;if((i=b.getParent())&&i.is("li"))for(var h=f.listNode.getChildren(),m=[],j,a=h.count()-1;0<=a;a--)(j=h.getItem(a))&&(j.is&&
-j.is("li"))&&m.push(j)}f&&f.listNode.replace(b);if(m&&m.length)for(a=0;a<m.length;a++){for(j=b=m[a];(j=j.getNext())&&j.is&&j.getName()in k;)CKEDITOR.env.needsNbspFiller&&!b.getFirst(t)&&b.append(d.document.createText(" ")),b.append(j);b.insertAfter(i)}f&&e.fire("contentDomInvalidated");return!0}for(var n=this,o=this.database,k=this.context,l=e.getSelection(),l=(l&&l.getRanges()).createIterator(),d;d=l.getNextRange();){for(var b=d.getCommonAncestor();b&&!(b.type==CKEDITOR.NODE_ELEMENT&&k[b.getName()]);)b=
-b.getParent();b||(b=d.startPath().contains(k))&&d.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);if(!b){var c=d.getEnclosedNode();c&&(c.type==CKEDITOR.NODE_ELEMENT&&c.getName()in k)&&(d.setStartAt(c,CKEDITOR.POSITION_AFTER_START),d.setEndAt(c,CKEDITOR.POSITION_BEFORE_END),b=c)}b&&(d.startContainer.type==CKEDITOR.NODE_ELEMENT&&d.startContainer.getName()in k)&&(c=new CKEDITOR.dom.walker(d),c.evaluator=i,d.startContainer=c.next());b&&(d.endContainer.type==CKEDITOR.NODE_ELEMENT&&d.endContainer.getName()in k)&&
-(c=new CKEDITOR.dom.walker(d),c.evaluator=i,d.endContainer=c.previous());if(b)return g(b)}return 0}function p(e,g){g||(g=e.contains(this.context));return g&&e.block&&e.block.equals(g.getFirst(i))}function i(e){return e.type==CKEDITOR.NODE_ELEMENT&&e.is("li")}function t(e){return u(e)&&v(e)}var u=CKEDITOR.dom.walker.whitespaces(!0),v=CKEDITOR.dom.walker.bookmark(!1,!0),q=CKEDITOR.TRISTATE_DISABLED,r=CKEDITOR.TRISTATE_OFF;CKEDITOR.plugins.add("indentlist",{requires:"indent",init:function(e){function g(e,
-g){i.specificDefinition.apply(this,arguments);this.requiredContent=["ul","ol"];e.on("key",function(g){if("wysiwyg"==e.mode&&g.data.keyCode==this.indentKey){var d=this.getContext(e.elementPath());if(d&&(!this.isIndent||!p.call(this,e.elementPath(),d)))e.execCommand(this.relatedGlobal),g.cancel()}},this);this.jobs[this.isIndent?10:30]={refresh:this.isIndent?function(e,d){var b=this.getContext(d),c=p.call(this,d,b);return!b||!this.isIndent||c?q:r}:function(e,d){return!this.getContext(d)||this.isIndent?
-q:r},exec:CKEDITOR.tools.bind(s,this)}}var i=CKEDITOR.plugins.indent;i.registerCommands(e,{indentlist:new g(e,"indentlist",!0),outdentlist:new g(e,"outdentlist")});CKEDITOR.tools.extend(g.prototype,i.specificDefinition.prototype,{context:{ol:1,ul:1}})}})})();CKEDITOR.plugins.add("smiley",{requires:"dialog",init:function(a){a.config.smiley_path=a.config.smiley_path||this.path+"images/";a.addCommand("smiley",new CKEDITOR.dialogCommand("smiley",{allowedContent:"img[alt,height,!src,title,width]",requiredContent:"img"}));a.ui.addButton&&a.ui.addButton("Smiley",{label:a.lang.smiley.toolbar,command:"smiley",toolbar:"insert,50"});CKEDITOR.dialog.add("smiley",this.path+"dialogs/smiley.js")}});CKEDITOR.config.smiley_images="regular_smile.png sad_smile.png wink_smile.png teeth_smile.png confused_smile.png tongue_smile.png embarrassed_smile.png omg_smile.png whatchutalkingabout_smile.png angry_smile.png angel_smile.png shades_smile.png devil_smile.png cry_smile.png lightbulb.png thumbs_down.png thumbs_up.png heart.png broken_heart.png kiss.png envelope.png".split(" ");
-CKEDITOR.config.smiley_descriptions="smiley;sad;wink;laugh;frown;cheeky;blush;surprise;indecision;angry;angel;cool;devil;crying;enlightened;no;yes;heart;broken heart;kiss;mail".split(";");(function(){function l(a,c){var c=void 0===c||c,b;if(c)b=a.getComputedStyle("text-align");else{for(;!a.hasAttribute||!a.hasAttribute("align")&&!a.getStyle("text-align");){b=a.getParent();if(!b)break;a=b}b=a.getStyle("text-align")||a.getAttribute("align")||""}b&&(b=b.replace(/(?:-(?:moz|webkit)-)?(?:start|auto)/i,""));!b&&c&&(b="rtl"==a.getComputedStyle("direction")?"right":"left");return b}function g(a,c,b){this.editor=a;this.name=c;this.value=b;this.context="p";var c=a.config.justifyClasses,h=a.config.enterMode==
-CKEDITOR.ENTER_P?"p":"div";if(c){switch(b){case "left":this.cssClassName=c[0];break;case "center":this.cssClassName=c[1];break;case "right":this.cssClassName=c[2];break;case "justify":this.cssClassName=c[3]}this.cssClassRegex=RegExp("(?:^|\\s+)(?:"+c.join("|")+")(?=$|\\s)");this.requiredContent=h+"("+this.cssClassName+")"}else this.requiredContent=h+"{text-align}";this.allowedContent={"caption div h1 h2 h3 h4 h5 h6 p pre td th li":{propertiesOnly:!0,styles:this.cssClassName?null:"text-align",classes:this.cssClassName||
-null}};a.config.enterMode==CKEDITOR.ENTER_BR&&(this.allowedContent.div=!0)}function j(a){var c=a.editor,b=c.createRange();b.setStartBefore(a.data.node);b.setEndAfter(a.data.node);for(var h=new CKEDITOR.dom.walker(b),d;d=h.next();)if(d.type==CKEDITOR.NODE_ELEMENT)if(!d.equals(a.data.node)&&d.getDirection())b.setStartAfter(d),h=new CKEDITOR.dom.walker(b);else{var e=c.config.justifyClasses;e&&(d.hasClass(e[0])?(d.removeClass(e[0]),d.addClass(e[2])):d.hasClass(e[2])&&(d.removeClass(e[2]),d.addClass(e[0])));
-e=d.getStyle("text-align");"left"==e?d.setStyle("text-align","right"):"right"==e&&d.setStyle("text-align","left")}}g.prototype={exec:function(a){var c=a.getSelection(),b=a.config.enterMode;if(c){for(var h=c.createBookmarks(),d=c.getRanges(),e=this.cssClassName,g,f,i=a.config.useComputedState,i=void 0===i||i,k=d.length-1;0<=k;k--){g=d[k].createIterator();for(g.enlargeBr=b!=CKEDITOR.ENTER_BR;f=g.getNextParagraph(b==CKEDITOR.ENTER_P?"p":"div");)if(!f.isReadOnly()){f.removeAttribute("align");f.removeStyle("text-align");
-var j=e&&(f.$.className=CKEDITOR.tools.ltrim(f.$.className.replace(this.cssClassRegex,""))),m=this.state==CKEDITOR.TRISTATE_OFF&&(!i||l(f,!0)!=this.value);e?m?f.addClass(e):j||f.removeAttribute("class"):m&&f.setStyle("text-align",this.value)}}a.focus();a.forceNextSelectionCheck();c.selectBookmarks(h)}},refresh:function(a,c){var b=c.block||c.blockLimit;this.setState("body"!=b.getName()&&l(b,this.editor.config.useComputedState)==this.value?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add("justify",
-{init:function(a){if(!a.blockless){var c=new g(a,"justifyleft","left"),b=new g(a,"justifycenter","center"),h=new g(a,"justifyright","right"),d=new g(a,"justifyblock","justify");a.addCommand("justifyleft",c);a.addCommand("justifycenter",b);a.addCommand("justifyright",h);a.addCommand("justifyblock",d);a.ui.addButton&&(a.ui.addButton("JustifyLeft",{label:a.lang.justify.left,command:"justifyleft",toolbar:"align,10"}),a.ui.addButton("JustifyCenter",{label:a.lang.justify.center,command:"justifycenter",
-toolbar:"align,20"}),a.ui.addButton("JustifyRight",{label:a.lang.justify.right,command:"justifyright",toolbar:"align,30"}),a.ui.addButton("JustifyBlock",{label:a.lang.justify.block,command:"justifyblock",toolbar:"align,40"}));a.on("dirChanged",j)}}})})();CKEDITOR.plugins.add("menubutton",{requires:"button,menu",onLoad:function(){var d=function(c){var a=this._,b=a.menu;a.state!==CKEDITOR.TRISTATE_DISABLED&&(a.on&&b?b.hide():(a.previousState=a.state,b||(b=a.menu=new CKEDITOR.menu(c,{panel:{className:"cke_menu_panel",attributes:{"aria-label":c.lang.common.options}}}),b.onHide=CKEDITOR.tools.bind(function(){var b=this.command?c.getCommand(this.command).modes:this.modes;this.setState(!b||b[c.mode]?a.previousState:CKEDITOR.TRISTATE_DISABLED);a.on=0},this),
-this.onMenu&&b.addListener(this.onMenu)),this.setState(CKEDITOR.TRISTATE_ON),a.on=1,setTimeout(function(){b.show(CKEDITOR.document.getById(a.id),4)},0)))};CKEDITOR.ui.menuButton=CKEDITOR.tools.createClass({base:CKEDITOR.ui.button,$:function(c){delete c.panel;this.base(c);this.hasArrow=!0;this.click=d},statics:{handler:{create:function(c){return new CKEDITOR.ui.menuButton(c)}}}})},beforeInit:function(d){d.ui.addHandler(CKEDITOR.UI_MENUBUTTON,CKEDITOR.ui.menuButton.handler)}});
-CKEDITOR.UI_MENUBUTTON="menubutton";(function(){CKEDITOR.plugins.add("language",{requires:"menubutton",init:function(a){var b=a.config.language_list||["ar:Arabic:rtl","fr:French","es:Spanish"],c=this,d=a.lang.language,e={},g,h,i,f;a.addCommand("language",{allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",contextSensitive:!0,exec:function(a,b){var c=e["language_"+b];if(c)a[c.style.checkActive(a.elementPath(),a)?"removeStyle":"applyStyle"](c.style)},refresh:function(a){this.setState(c.getCurrentLangElement(a)?CKEDITOR.TRISTATE_ON:
-CKEDITOR.TRISTATE_OFF)}});for(f=0;f<b.length;f++)g=b[f].split(":"),h=g[0],i="language_"+h,e[i]={label:g[1],langId:h,group:"language",order:f,ltr:"rtl"!=(""+g[2]).toLowerCase(),onClick:function(){a.execCommand("language",this.langId)},role:"menuitemcheckbox"},e[i].style=new CKEDITOR.style({element:"span",attributes:{lang:h,dir:e[i].ltr?"ltr":"rtl"}});e.language_remove={label:d.remove,group:"language_remove",state:CKEDITOR.TRISTATE_DISABLED,order:e.length,onClick:function(){var b=c.getCurrentLangElement(a);
-b&&a.execCommand("language",b.getAttribute("lang"))}};a.addMenuGroup("language",1);a.addMenuGroup("language_remove");a.addMenuItems(e);a.ui.add("Language",CKEDITOR.UI_MENUBUTTON,{label:d.button,allowedContent:"span[!lang,!dir]",requiredContent:"span[lang,dir]",toolbar:"bidi,30",command:"language",onMenu:function(){var b={},d=c.getCurrentLangElement(a),f;for(f in e)b[f]=CKEDITOR.TRISTATE_OFF;b.language_remove=d?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED;d&&(b["language_"+d.getAttribute("lang")]=
-CKEDITOR.TRISTATE_ON);return b}})},getCurrentLangElement:function(a){var b=a.elementPath(),a=b&&b.elements,c;if(b)for(var d=0;d<a.length;d++)b=a[d],!c&&("span"==b.getName()&&b.hasAttribute("dir")&&b.hasAttribute("lang"))&&(c=b);return c}})})();(function(){function m(c){return c.replace(/'/g,"\\$&")}function n(c){for(var b,a=c.length,f=[],e=0;e<a;e++)b=c.charCodeAt(e),f.push(b);return"String.fromCharCode("+f.join(",")+")"}function o(c,b){var a=c.plugins.link,f=a.compiledProtectionFunction.params,e,d;d=[a.compiledProtectionFunction.name,"("];for(var g=0;g<f.length;g++)a=f[g].toLowerCase(),e=b[a],0<g&&d.push(","),d.push("'",e?m(encodeURIComponent(b[a])):"","'");d.push(")");return d.join("")}function l(c){var c=c.config.emailProtection||"",
-b;c&&"encode"!=c&&(b={},c.replace(/^([^(]+)\(([^)]+)\)$/,function(a,c,e){b.name=c;b.params=[];e.replace(/[^,\s]+/g,function(a){b.params.push(a)})}));return b}CKEDITOR.plugins.add("link",{requires:"dialog,fakeobjects",onLoad:function(){function c(b){return a.replace(/%1/g,"rtl"==b?"right":"left").replace(/%2/g,"cke_contents_"+b)}var b="background:url("+CKEDITOR.getUrl(this.path+"images"+(CKEDITOR.env.hidpi?"/hidpi":"")+"/anchor.png")+") no-repeat %1 center;border:1px dotted #00f;background-size:16px;",
-a=".%2 a.cke_anchor,.%2 a.cke_anchor_empty,.cke_editable.%2 a[name],.cke_editable.%2 a[data-cke-saved-name]{"+b+"padding-%1:18px;cursor:auto;}.%2 img.cke_anchor{"+b+"width:16px;min-height:15px;height:1.15em;vertical-align:text-bottom;}";CKEDITOR.addCss(c("ltr")+c("rtl"))},init:function(c){var b="a[!href]";CKEDITOR.dialog.isTabEnabled(c,"link","advanced")&&(b=b.replace("]",",accesskey,charset,dir,id,lang,name,rel,tabindex,title,type]{*}(*)"));CKEDITOR.dialog.isTabEnabled(c,"link","target")&&(b=b.replace("]",
-",target,onclick]"));c.addCommand("link",new CKEDITOR.dialogCommand("link",{allowedContent:b,requiredContent:"a[href]"}));c.addCommand("anchor",new CKEDITOR.dialogCommand("anchor",{allowedContent:"a[!name,id]",requiredContent:"a[name]"}));c.addCommand("unlink",new CKEDITOR.unlinkCommand);c.addCommand("removeAnchor",new CKEDITOR.removeAnchorCommand);c.setKeystroke(CKEDITOR.CTRL+76,"link");c.ui.addButton&&(c.ui.addButton("Link",{label:c.lang.link.toolbar,command:"link",toolbar:"links,10"}),c.ui.addButton("Unlink",
-{label:c.lang.link.unlink,command:"unlink",toolbar:"links,20"}),c.ui.addButton("Anchor",{label:c.lang.link.anchor.toolbar,command:"anchor",toolbar:"links,30"}));CKEDITOR.dialog.add("link",this.path+"dialogs/link.js");CKEDITOR.dialog.add("anchor",this.path+"dialogs/anchor.js");c.on("doubleclick",function(a){var b=CKEDITOR.plugins.link.getSelectedLink(c)||a.data.element;if(!b.isReadOnly())if(b.is("a")){a.data.dialog=b.getAttribute("name")&&(!b.getAttribute("href")||!b.getChildCount())?"anchor":"link";
-a.data.link=b}else if(CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,b))a.data.dialog="anchor"},null,null,0);c.on("doubleclick",function(a){a.data.dialog in{link:1,anchor:1}&&a.data.link&&c.getSelection().selectElement(a.data.link)},null,null,20);c.addMenuItems&&c.addMenuItems({anchor:{label:c.lang.link.anchor.menu,command:"anchor",group:"anchor",order:1},removeAnchor:{label:c.lang.link.anchor.remove,command:"removeAnchor",group:"anchor",order:5},link:{label:c.lang.link.menu,command:"link",group:"link",
-order:1},unlink:{label:c.lang.link.unlink,command:"unlink",group:"link",order:5}});c.contextMenu&&c.contextMenu.addListener(function(a){if(!a||a.isReadOnly())return null;a=CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,a);if(!a&&!(a=CKEDITOR.plugins.link.getSelectedLink(c)))return null;var b={};a.getAttribute("href")&&a.getChildCount()&&(b={link:CKEDITOR.TRISTATE_OFF,unlink:CKEDITOR.TRISTATE_OFF});if(a&&a.hasAttribute("name"))b.anchor=b.removeAnchor=CKEDITOR.TRISTATE_OFF;return b});this.compiledProtectionFunction=
-l(c)},afterInit:function(c){c.dataProcessor.dataFilter.addRules({elements:{a:function(a){return!a.attributes.name?null:!a.children.length?c.createFakeParserElement(a,"cke_anchor","anchor"):null}}});var b=c._.elementsPath&&c._.elementsPath.filters;b&&b.push(function(a,b){if("a"==b&&(CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,a)||a.getAttribute("name")&&(!a.getAttribute("href")||!a.getChildCount())))return"anchor"})}});var p=/^javascript:/,q=/^mailto:([^?]+)(?:\?(.+))?$/,r=/subject=([^;?:@&=$,\/]*)/,
-s=/body=([^;?:@&=$,\/]*)/,t=/^#(.*)$/,u=/^((?:http|https|ftp|news):\/\/)?(.*)$/,v=/^(_(?:self|top|parent|blank))$/,w=/^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/,x=/^javascript:([^(]+)\(([^)]+)\)$/,y=/\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/,z=/(?:^|,)([^=]+)=(\d+|yes|no)/gi,j={id:"advId",dir:"advLangDir",accessKey:"advAccessKey",name:"advName",lang:"advLangCode",tabindex:"advTabIndex",title:"advTitle",
-type:"advContentType","class":"advCSSClasses",charset:"advCharset",style:"advStyles",rel:"advRel"};CKEDITOR.plugins.link={getSelectedLink:function(c){var b=c.getSelection(),a=b.getSelectedElement();return a&&a.is("a")?a:(b=b.getRanges()[0])?(b.shrink(CKEDITOR.SHRINK_TEXT),c.elementPath(b.getCommonAncestor()).contains("a",1)):null},getEditorAnchors:function(c){for(var b=c.editable(),a=b.isInline()&&!c.plugins.divarea?c.document:b,b=a.getElementsByTag("a"),a=a.getElementsByTag("img"),f=[],e=0,d;d=b.getItem(e++);)if(d.data("cke-saved-name")||
-d.hasAttribute("name"))f.push({name:d.data("cke-saved-name")||d.getAttribute("name"),id:d.getAttribute("id")});for(e=0;d=a.getItem(e++);)(d=this.tryRestoreFakeAnchor(c,d))&&f.push({name:d.getAttribute("name"),id:d.getAttribute("id")});return f},fakeAnchor:!0,tryRestoreFakeAnchor:function(c,b){if(b&&b.data("cke-real-element-type")&&"anchor"==b.data("cke-real-element-type")){var a=c.restoreRealElement(b);if(a.data("cke-saved-name"))return a}},parseLinkAttributes:function(c,b){var a=b&&(b.data("cke-saved-href")||
-b.getAttribute("href"))||"",f=c.plugins.link.compiledProtectionFunction,e=c.config.emailProtection,d,g={};a.match(p)&&("encode"==e?a=a.replace(w,function(a,b,c){return"mailto:"+String.fromCharCode.apply(String,b.split(","))+(c&&c.replace(/\\'/g,"'"))}):e&&a.replace(x,function(a,b,c){if(b==f.name){g.type="email";for(var a=g.email={},b=/(^')|('$)/g,c=c.match(/[^,\s]+/g),d=c.length,e,h,i=0;i<d;i++)e=decodeURIComponent,h=c[i].replace(b,"").replace(/\\'/g,"'"),h=e(h),e=f.params[i].toLowerCase(),a[e]=h;
-a.address=[a.name,a.domain].join("@")}}));if(!g.type)if(e=a.match(t))g.type="anchor",g.anchor={},g.anchor.name=g.anchor.id=e[1];else if(e=a.match(q)){d=a.match(r);a=a.match(s);g.type="email";var i=g.email={};i.address=e[1];d&&(i.subject=decodeURIComponent(d[1]));a&&(i.body=decodeURIComponent(a[1]))}else if(a&&(d=a.match(u)))g.type="url",g.url={},g.url.protocol=d[1],g.url.url=d[2];if(b){if(a=b.getAttribute("target"))g.target={type:a.match(v)?a:"frame",name:a};else if(a=(a=b.data("cke-pa-onclick")||
-b.getAttribute("onclick"))&&a.match(y))for(g.target={type:"popup",name:a[1]};e=z.exec(a[2]);)("yes"==e[2]||"1"==e[2])&&!(e[1]in{height:1,width:1,top:1,left:1})?g.target[e[1]]=!0:isFinite(e[2])&&(g.target[e[1]]=e[2]);var a={},h;for(h in j)(e=b.getAttribute(h))&&(a[j[h]]=e);if(h=b.data("cke-saved-name")||a.advName)a.advName=h;CKEDITOR.tools.isEmpty(a)||(g.advanced=a)}return g},getLinkAttributes:function(c,b){var a=c.config.emailProtection||"",f={};switch(b.type){case "url":var a=b.url&&void 0!=b.url.protocol?
-b.url.protocol:"http://",e=b.url&&CKEDITOR.tools.trim(b.url.url)||"";f["data-cke-saved-href"]=0===e.indexOf("/")?e:a+e;break;case "anchor":a=b.anchor&&b.anchor.id;f["data-cke-saved-href"]="#"+(b.anchor&&b.anchor.name||a||"");break;case "email":var d=b.email,e=d.address;switch(a){case "":case "encode":var g=encodeURIComponent(d.subject||""),i=encodeURIComponent(d.body||""),d=[];g&&d.push("subject="+g);i&&d.push("body="+i);d=d.length?"?"+d.join("&"):"";"encode"==a?(a=["javascript:void(location.href='mailto:'+",
-n(e)],d&&a.push("+'",m(d),"'"),a.push(")")):a=["mailto:",e,d];break;default:a=e.split("@",2),d.name=a[0],d.domain=a[1],a=["javascript:",o(c,d)]}f["data-cke-saved-href"]=a.join("")}if(b.target)if("popup"==b.target.type){for(var a=["window.open(this.href, '",b.target.name||"","', '"],h="resizable status location toolbar menubar fullscreen scrollbars dependent".split(" "),e=h.length,g=function(a){b.target[a]&&h.push(a+"="+b.target[a])},d=0;d<e;d++)h[d]+=b.target[h[d]]?"=yes":"=no";g("width");g("left");
-g("height");g("top");a.push(h.join(","),"'); return false;");f["data-cke-pa-onclick"]=a.join("")}else"notSet"!=b.target.type&&b.target.name&&(f.target=b.target.name);if(b.advanced){for(var k in j)(a=b.advanced[j[k]])&&(f[k]=a);f.name&&(f["data-cke-saved-name"]=f.name)}f["data-cke-saved-href"]&&(f.href=f["data-cke-saved-href"]);k=CKEDITOR.tools.extend({target:1,onclick:1,"data-cke-pa-onclick":1,"data-cke-saved-name":1},j);for(var l in f)delete k[l];return{set:f,removed:CKEDITOR.tools.objectKeys(k)}}};
-CKEDITOR.unlinkCommand=function(){};CKEDITOR.unlinkCommand.prototype={exec:function(c){var b=new CKEDITOR.style({element:"a",type:CKEDITOR.STYLE_INLINE,alwaysRemoveElement:1});c.removeStyle(b)},refresh:function(c,b){var a=b.lastElement&&b.lastElement.getAscendant("a",!0);a&&"a"==a.getName()&&a.getAttribute("href")&&a.getChildCount()?this.setState(CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_DISABLED)},contextSensitive:1,startDisabled:1,requiredContent:"a[href]"};CKEDITOR.removeAnchorCommand=
-function(){};CKEDITOR.removeAnchorCommand.prototype={exec:function(c){var b=c.getSelection(),a=b.createBookmarks(),f;if(b&&(f=b.getSelectedElement())&&(!f.getChildCount()?CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,f):f.is("a")))f.remove(1);else if(f=CKEDITOR.plugins.link.getSelectedLink(c))f.hasAttribute("href")?(f.removeAttributes({name:1,"data-cke-saved-name":1}),f.removeClass("cke_anchor")):f.remove(1);b.selectBookmarks(a)},requiredContent:"a[name]"};CKEDITOR.tools.extend(CKEDITOR.config,{linkShowAdvancedTab:!0,
-linkShowTargetTab:!0})})();(function(){function E(c,j,e){function b(b){if((d=a[b?"getFirst":"getLast"]())&&(!d.is||!d.isBlockBoundary())&&(m=j.root[b?"getPrevious":"getNext"](CKEDITOR.dom.walker.invisible(!0)))&&(!m.is||!m.isBlockBoundary({br:1})))c.document.createElement("br")[b?"insertBefore":"insertAfter"](d)}for(var k=CKEDITOR.plugins.list.listToArray(j.root,e),g=[],h=0;h<j.contents.length;h++){var f=j.contents[h];if((f=f.getAscendant("li",!0))&&!f.getCustomData("list_item_processed"))g.push(f),CKEDITOR.dom.element.setMarker(e,
-f,"list_item_processed",!0)}f=null;for(h=0;h<g.length;h++)f=g[h].getCustomData("listarray_index"),k[f].indent=-1;for(h=f+1;h<k.length;h++)if(k[h].indent>k[h-1].indent+1){g=k[h-1].indent+1-k[h].indent;for(f=k[h].indent;k[h]&&k[h].indent>=f;)k[h].indent+=g,h++;h--}var a=CKEDITOR.plugins.list.arrayToList(k,e,null,c.config.enterMode,j.root.getAttribute("dir")).listNode,d,m;b(!0);b();a.replace(j.root);c.fire("contentDomInvalidated")}function x(c,j){this.name=c;this.context=this.type=j;this.allowedContent=
-j+" li";this.requiredContent=j}function A(c,j,e,b){for(var k,g;k=c[b?"getLast":"getFirst"](F);)(g=k.getDirection(1))!==j.getDirection(1)&&k.setAttribute("dir",g),k.remove(),e?k[b?"insertBefore":"insertAfter"](e):j.append(k,b)}function B(c){var j;(j=function(e){var b=c[e?"getPrevious":"getNext"](q);b&&(b.type==CKEDITOR.NODE_ELEMENT&&b.is(c.getName()))&&(A(c,b,null,!e),c.remove(),c=b)})();j(1)}function C(c){return c.type==CKEDITOR.NODE_ELEMENT&&(c.getName()in CKEDITOR.dtd.$block||c.getName()in CKEDITOR.dtd.$listItem)&&
-CKEDITOR.dtd[c.getName()]["#"]}function y(c,j,e){c.fire("saveSnapshot");e.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS);var b=e.extractContents();j.trim(!1,!0);var k=j.createBookmark(),g=new CKEDITOR.dom.elementPath(j.startContainer),h=g.block,g=g.lastElement.getAscendant("li",1)||h,f=new CKEDITOR.dom.elementPath(e.startContainer),a=f.contains(CKEDITOR.dtd.$listItem),f=f.contains(CKEDITOR.dtd.$list);h?(h=h.getBogus())&&h.remove():f&&(h=f.getPrevious(q))&&v(h)&&h.remove();(h=b.getLast())&&(h.type==
-CKEDITOR.NODE_ELEMENT&&h.is("br"))&&h.remove();(h=j.startContainer.getChild(j.startOffset))?b.insertBefore(h):j.startContainer.append(b);if(a&&(b=w(a)))g.contains(a)?(A(b,a.getParent(),a),b.remove()):g.append(b);for(;e.checkStartOfBlock()&&e.checkEndOfBlock();){f=e.startPath();b=f.block;if(!b)break;b.is("li")&&(g=b.getParent(),b.equals(g.getLast(q))&&b.equals(g.getFirst(q))&&(b=g));e.moveToPosition(b,CKEDITOR.POSITION_BEFORE_START);b.remove()}e=e.clone();b=c.editable();e.setEndAt(b,CKEDITOR.POSITION_BEFORE_END);
-e=new CKEDITOR.dom.walker(e);e.evaluator=function(a){return q(a)&&!v(a)};(e=e.next())&&(e.type==CKEDITOR.NODE_ELEMENT&&e.getName()in CKEDITOR.dtd.$list)&&B(e);j.moveToBookmark(k);j.select();c.fire("saveSnapshot")}function w(c){return(c=c.getLast(q))&&c.type==CKEDITOR.NODE_ELEMENT&&c.getName()in r?c:null}var r={ol:1,ul:1},G=CKEDITOR.dom.walker.whitespaces(),D=CKEDITOR.dom.walker.bookmark(),q=function(c){return!(G(c)||D(c))},v=CKEDITOR.dom.walker.bogus();CKEDITOR.plugins.list={listToArray:function(c,
-j,e,b,k){if(!r[c.getName()])return[];b||(b=0);e||(e=[]);for(var g=0,h=c.getChildCount();g<h;g++){var f=c.getChild(g);f.type==CKEDITOR.NODE_ELEMENT&&f.getName()in CKEDITOR.dtd.$list&&CKEDITOR.plugins.list.listToArray(f,j,e,b+1);if("li"==f.$.nodeName.toLowerCase()){var a={parent:c,indent:b,element:f,contents:[]};k?a.grandparent=k:(a.grandparent=c.getParent(),a.grandparent&&"li"==a.grandparent.$.nodeName.toLowerCase()&&(a.grandparent=a.grandparent.getParent()));j&&CKEDITOR.dom.element.setMarker(j,f,
-"listarray_index",e.length);e.push(a);for(var d=0,m=f.getChildCount(),i;d<m;d++)i=f.getChild(d),i.type==CKEDITOR.NODE_ELEMENT&&r[i.getName()]?CKEDITOR.plugins.list.listToArray(i,j,e,b+1,a.grandparent):a.contents.push(i)}}return e},arrayToList:function(c,j,e,b,k){e||(e=0);if(!c||c.length<e+1)return null;for(var g,h=c[e].parent.getDocument(),f=new CKEDITOR.dom.documentFragment(h),a=null,d=e,m=Math.max(c[e].indent,0),i=null,n,l,p=b==CKEDITOR.ENTER_P?"p":"div";;){var o=c[d];g=o.grandparent;n=o.element.getDirection(1);
-if(o.indent==m){if(!a||c[d].parent.getName()!=a.getName())a=c[d].parent.clone(!1,1),k&&a.setAttribute("dir",k),f.append(a);i=a.append(o.element.clone(0,1));n!=a.getDirection(1)&&i.setAttribute("dir",n);for(g=0;g<o.contents.length;g++)i.append(o.contents[g].clone(1,1));d++}else if(o.indent==Math.max(m,0)+1)o=c[d-1].element.getDirection(1),d=CKEDITOR.plugins.list.arrayToList(c,null,d,b,o!=n?n:null),!i.getChildCount()&&(CKEDITOR.env.needsNbspFiller&&!(7<h.$.documentMode))&&i.append(h.createText(" ")),
-i.append(d.listNode),d=d.nextIndex;else if(-1==o.indent&&!e&&g){r[g.getName()]?(i=o.element.clone(!1,!0),n!=g.getDirection(1)&&i.setAttribute("dir",n)):i=new CKEDITOR.dom.documentFragment(h);var a=g.getDirection(1)!=n,u=o.element,z=u.getAttribute("class"),v=u.getAttribute("style"),w=i.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&(b!=CKEDITOR.ENTER_BR||a||v||z),s,x=o.contents.length,t;for(g=0;g<x;g++)if(s=o.contents[g],D(s)&&1<x)w?t=s.clone(1,1):i.append(s.clone(1,1));else if(s.type==CKEDITOR.NODE_ELEMENT&&
-s.isBlockBoundary()){a&&!s.getDirection()&&s.setAttribute("dir",n);l=s;var y=u.getAttribute("style");y&&l.setAttribute("style",y.replace(/([^;])$/,"$1;")+(l.getAttribute("style")||""));z&&s.addClass(z);l=null;t&&(i.append(t),t=null);i.append(s.clone(1,1))}else w?(l||(l=h.createElement(p),i.append(l),a&&l.setAttribute("dir",n)),v&&l.setAttribute("style",v),z&&l.setAttribute("class",z),t&&(l.append(t),t=null),l.append(s.clone(1,1))):i.append(s.clone(1,1));t&&((l||i).append(t),t=null);i.type==CKEDITOR.NODE_DOCUMENT_FRAGMENT&&
-d!=c.length-1&&(CKEDITOR.env.needsBrFiller&&(n=i.getLast())&&(n.type==CKEDITOR.NODE_ELEMENT&&n.is("br"))&&n.remove(),n=i.getLast(q),(!n||!(n.type==CKEDITOR.NODE_ELEMENT&&n.is(CKEDITOR.dtd.$block)))&&i.append(h.createElement("br")));n=i.$.nodeName.toLowerCase();("div"==n||"p"==n)&&i.appendBogus();f.append(i);a=null;d++}else return null;l=null;if(c.length<=d||Math.max(c[d].indent,0)<m)break}if(j)for(c=f.getFirst();c;){if(c.type==CKEDITOR.NODE_ELEMENT&&(CKEDITOR.dom.element.clearMarkers(j,c),c.getName()in
-CKEDITOR.dtd.$listItem&&(e=c,h=k=b=void 0,b=e.getDirection()))){for(k=e.getParent();k&&!(h=k.getDirection());)k=k.getParent();b==h&&e.removeAttribute("dir")}c=c.getNextSourceNode()}return{listNode:f,nextIndex:d}}};var H=/^h[1-6]$/,F=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT);x.prototype={exec:function(c){this.refresh(c,c.elementPath());var j=c.config,e=c.getSelection(),b=e&&e.getRanges();if(this.state==CKEDITOR.TRISTATE_OFF){var k=c.editable();if(k.getFirst(q)){var g=1==b.length&&b[0];(j=
-g&&g.getEnclosedNode())&&(j.is&&this.type==j.getName())&&this.setState(CKEDITOR.TRISTATE_ON)}else j.enterMode==CKEDITOR.ENTER_BR?k.appendBogus():b[0].fixBlock(1,j.enterMode==CKEDITOR.ENTER_P?"p":"div"),e.selectRanges(b)}for(var j=e.createBookmarks(!0),k=[],h={},b=b.createIterator(),f=0;(g=b.getNextRange())&&++f;){var a=g.getBoundaryNodes(),d=a.startNode,m=a.endNode;d.type==CKEDITOR.NODE_ELEMENT&&"td"==d.getName()&&g.setStartAt(a.startNode,CKEDITOR.POSITION_AFTER_START);m.type==CKEDITOR.NODE_ELEMENT&&
-"td"==m.getName()&&g.setEndAt(a.endNode,CKEDITOR.POSITION_BEFORE_END);g=g.createIterator();for(g.forceBrBreak=this.state==CKEDITOR.TRISTATE_OFF;a=g.getNextParagraph();)if(!a.getCustomData("list_block")){CKEDITOR.dom.element.setMarker(h,a,"list_block",1);for(var i=c.elementPath(a),d=i.elements,m=0,i=i.blockLimit,n,l=d.length-1;0<=l&&(n=d[l]);l--)if(r[n.getName()]&&i.contains(n)){i.removeCustomData("list_group_object_"+f);(d=n.getCustomData("list_group_object"))?d.contents.push(a):(d={root:n,contents:[a]},
-k.push(d),CKEDITOR.dom.element.setMarker(h,n,"list_group_object",d));m=1;break}m||(m=i,m.getCustomData("list_group_object_"+f)?m.getCustomData("list_group_object_"+f).contents.push(a):(d={root:m,contents:[a]},CKEDITOR.dom.element.setMarker(h,m,"list_group_object_"+f,d),k.push(d)))}}for(n=[];0<k.length;)if(d=k.shift(),this.state==CKEDITOR.TRISTATE_OFF)if(r[d.root.getName()]){b=c;f=d;d=h;g=n;m=CKEDITOR.plugins.list.listToArray(f.root,d);i=[];for(a=0;a<f.contents.length;a++)if(l=f.contents[a],(l=l.getAscendant("li",
-!0))&&!l.getCustomData("list_item_processed"))i.push(l),CKEDITOR.dom.element.setMarker(d,l,"list_item_processed",!0);for(var l=f.root.getDocument(),p=void 0,o=void 0,a=0;a<i.length;a++){var u=i[a].getCustomData("listarray_index"),p=m[u].parent;p.is(this.type)||(o=l.createElement(this.type),p.copyAttributes(o,{start:1,type:1}),o.removeStyle("list-style-type"),m[u].parent=o)}d=CKEDITOR.plugins.list.arrayToList(m,d,null,b.config.enterMode);m=void 0;i=d.listNode.getChildCount();for(a=0;a<i&&(m=d.listNode.getChild(a));a++)m.getName()==
-this.type&&g.push(m);d.listNode.replace(f.root);b.fire("contentDomInvalidated")}else{m=c;a=d;g=n;i=a.contents;b=a.root.getDocument();f=[];1==i.length&&i[0].equals(a.root)&&(d=b.createElement("div"),i[0].moveChildren&&i[0].moveChildren(d),i[0].append(d),i[0]=d);a=a.contents[0].getParent();for(l=0;l<i.length;l++)a=a.getCommonAncestor(i[l].getParent());p=m.config.useComputedState;m=d=void 0;p=void 0===p||p;for(l=0;l<i.length;l++)for(o=i[l];u=o.getParent();){if(u.equals(a)){f.push(o);!m&&o.getDirection()&&
-(m=1);o=o.getDirection(p);null!==d&&(d=d&&d!=o?null:o);break}o=u}if(!(1>f.length)){i=f[f.length-1].getNext();l=b.createElement(this.type);g.push(l);for(p=g=void 0;f.length;)g=f.shift(),p=b.createElement("li"),g.is("pre")||H.test(g.getName())||"false"==g.getAttribute("contenteditable")?g.appendTo(p):(g.copyAttributes(p),d&&g.getDirection()&&(p.removeStyle("direction"),p.removeAttribute("dir")),g.moveChildren(p),g.remove()),p.appendTo(l);d&&m&&l.setAttribute("dir",d);i?l.insertBefore(i):l.appendTo(a)}}else this.state==
-CKEDITOR.TRISTATE_ON&&r[d.root.getName()]&&E.call(this,c,d,h);for(l=0;l<n.length;l++)B(n[l]);CKEDITOR.dom.element.clearAllMarkers(h);e.selectBookmarks(j);c.focus()},refresh:function(c,j){var e=j.contains(r,1),b=j.blockLimit||j.root;e&&b.contains(e)?this.setState(e.is(this.type)?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF):this.setState(CKEDITOR.TRISTATE_OFF)}};CKEDITOR.plugins.add("list",{requires:"indentlist",init:function(c){c.blockless||(c.addCommand("numberedlist",new x("numberedlist","ol")),c.addCommand("bulletedlist",
-new x("bulletedlist","ul")),c.ui.addButton&&(c.ui.addButton("NumberedList",{label:c.lang.list.numberedlist,command:"numberedlist",directional:!0,toolbar:"list,10"}),c.ui.addButton("BulletedList",{label:c.lang.list.bulletedlist,command:"bulletedlist",directional:!0,toolbar:"list,20"})),c.on("key",function(j){var e=j.data.domEvent.getKey();if(c.mode=="wysiwyg"&&e in{8:1,46:1}){var b=c.getSelection().getRanges()[0],k=b&&b.startPath();if(b&&b.collapsed){var g=e==8,h=c.editable(),f=new CKEDITOR.dom.walker(b.clone());
-f.evaluator=function(a){return q(a)&&!v(a)};f.guard=function(a,b){return!(b&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))};e=b.clone();if(g){var a,d;if((a=k.contains(r))&&b.checkBoundaryOfElement(a,CKEDITOR.START)&&(a=a.getParent())&&a.is("li")&&(a=w(a))){d=a;a=a.getPrevious(q);e.moveToPosition(a&&v(a)?a:d,CKEDITOR.POSITION_BEFORE_START)}else{f.range.setStartAt(h,CKEDITOR.POSITION_AFTER_START);f.range.setEnd(b.startContainer,b.startOffset);if((a=f.previous())&&a.type==CKEDITOR.NODE_ELEMENT&&(a.getName()in
-r||a.is("li"))){if(!a.is("li")){f.range.selectNodeContents(a);f.reset();f.evaluator=C;a=f.previous()}d=a;e.moveToElementEditEnd(d)}}if(d){y(c,e,b);j.cancel()}else if((e=k.contains(r))&&b.checkBoundaryOfElement(e,CKEDITOR.START)){d=e.getFirst(q);if(b.checkBoundaryOfElement(d,CKEDITOR.START)){a=e.getPrevious(q);if(w(d)){if(a){b.moveToElementEditEnd(a);b.select()}}else c.execCommand("outdent");j.cancel()}}}else if(d=k.contains("li")){f.range.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);h=(k=d.getLast(q))&&
-C(k)?k:d;d=0;if((a=f.next())&&a.type==CKEDITOR.NODE_ELEMENT&&a.getName()in r&&a.equals(k)){d=1;a=f.next()}else b.checkBoundaryOfElement(h,CKEDITOR.END)&&(d=1);if(d&&a){b=b.clone();b.moveToElementEditStart(a);y(c,e,b);j.cancel()}}else{f.range.setEndAt(h,CKEDITOR.POSITION_BEFORE_END);if((a=f.next())&&a.type==CKEDITOR.NODE_ELEMENT&&a.is(r)){a=a.getFirst(q);if(k.block&&b.checkStartOfBlock()&&b.checkEndOfBlock()){k.block.remove();b.moveToElementEditStart(a);b.select()}else if(w(a)){b.moveToElementEditStart(a);
-b.select()}else{b=b.clone();b.moveToElementEditStart(a);y(c,e,b)}j.cancel()}}setTimeout(function(){c.selectionChange(1)})}}}))}})})();(function(){CKEDITOR.plugins.liststyle={requires:"dialog,contextmenu",init:function(a){if(!a.blockless){var b;b=new CKEDITOR.dialogCommand("numberedListStyle",{requiredContent:"ol",allowedContent:"ol{list-style-type}[start]"});b=a.addCommand("numberedListStyle",b);a.addFeature(b);CKEDITOR.dialog.add("numberedListStyle",this.path+"dialogs/liststyle.js");b=new CKEDITOR.dialogCommand("bulletedListStyle",{requiredContent:"ul",allowedContent:"ul{list-style-type}"});b=a.addCommand("bulletedListStyle",b);
-a.addFeature(b);CKEDITOR.dialog.add("bulletedListStyle",this.path+"dialogs/liststyle.js");a.addMenuGroup("list",108);a.addMenuItems({numberedlist:{label:a.lang.liststyle.numberedTitle,group:"list",command:"numberedListStyle"},bulletedlist:{label:a.lang.liststyle.bulletedTitle,group:"list",command:"bulletedListStyle"}});a.contextMenu.addListener(function(a){if(!a||a.isReadOnly())return null;for(;a;){var b=a.getName();if("ol"==b)return{numberedlist:CKEDITOR.TRISTATE_OFF};if("ul"==b)return{bulletedlist:CKEDITOR.TRISTATE_OFF};
-a=a.getParent()}return null})}}};CKEDITOR.plugins.add("liststyle",CKEDITOR.plugins.liststyle)})();(function(){function Q(a,c,d){return m(c)&&m(d)&&d.equals(c.getNext(function(a){return!(z(a)||A(a)||p(a))}))}function u(a){this.upper=a[0];this.lower=a[1];this.set.apply(this,a.slice(2))}function J(a){var c=a.element;if(c&&m(c)&&(c=c.getAscendant(a.triggers,!0))&&a.editable.contains(c)){var d=K(c);if("true"==d.getAttribute("contenteditable"))return c;if(d.is(a.triggers))return d}return null}function ga(a,c,d){o(a,c);o(a,d);a=c.size.bottom;d=d.size.top;return a&&d?0|(a+d)/2:a||d}function r(a,c,d){return c=
-c[d?"getPrevious":"getNext"](function(b){return b&&b.type==CKEDITOR.NODE_TEXT&&!z(b)||m(b)&&!p(b)&&!v(a,b)})}function K(a,c){if(a.data("cke-editable"))return null;for(c||(a=a.getParent());a&&!a.data("cke-editable");){if(a.hasAttribute("contenteditable"))return a;a=a.getParent()}return null}function ha(a){var c=a.doc,d=B('<span contenteditable="false" style="'+L+"position:absolute;border-top:1px dashed "+a.boxColor+'"></span>',c),b=CKEDITOR.getUrl(this.path+"images/"+(n.hidpi?"hidpi/":"")+"icon"+(a.rtl?
-"-rtl":"")+".png");q(d,{attach:function(){this.wrap.getParent()||this.wrap.appendTo(a.editable,!0);return this},lineChildren:[q(B('<span title="'+a.editor.lang.magicline.title+'" contenteditable="false">&#8629;</span>',c),{base:L+"height:17px;width:17px;"+(a.rtl?"left":"right")+":17px;background:url("+b+") center no-repeat "+a.boxColor+";cursor:pointer;"+(n.hc?"font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;":"")+(n.hidpi?"background-size: 9px 10px;":""),looks:["top:-8px;"+
-CKEDITOR.tools.cssVendorPrefix("border-radius","2px",1),"top:-17px;"+CKEDITOR.tools.cssVendorPrefix("border-radius","2px 2px 0px 0px",1),"top:-1px;"+CKEDITOR.tools.cssVendorPrefix("border-radius","0px 0px 2px 2px",1)]}),q(B(R,c),{base:S+"left:0px;border-left-color:"+a.boxColor+";",looks:["border-width:8px 0 8px 8px;top:-8px","border-width:8px 0 0 8px;top:-8px","border-width:0 0 8px 8px;top:0px"]}),q(B(R,c),{base:S+"right:0px;border-right-color:"+a.boxColor+";",looks:["border-width:8px 8px 8px 0;top:-8px",
-"border-width:8px 8px 0 0;top:-8px","border-width:0 8px 8px 0;top:0px"]})],detach:function(){this.wrap.getParent()&&this.wrap.remove();return this},mouseNear:function(){o(a,this);var b=a.holdDistance,c=this.size;return c&&a.mouse.y>c.top-b&&a.mouse.y<c.bottom+b&&a.mouse.x>c.left-b&&a.mouse.x<c.right+b?!0:!1},place:function(){var b=a.view,c=a.editable,d=a.trigger,i=d.upper,h=d.lower,j=i||h,l=j.getParent(),k={};this.trigger=d;i&&o(a,i,!0);h&&o(a,h,!0);o(a,l,!0);a.inInlineMode&&C(a,!0);l.equals(c)?(k.left=
-b.scroll.x,k.right=-b.scroll.x,k.width=""):(k.left=j.size.left-j.size.margin.left+b.scroll.x-(a.inInlineMode?b.editable.left+b.editable.border.left:0),k.width=j.size.outerWidth+j.size.margin.left+j.size.margin.right+b.scroll.x,k.right="");i&&h?k.top=i.size.margin.bottom===h.size.margin.top?0|i.size.bottom+i.size.margin.bottom/2:i.size.margin.bottom<h.size.margin.top?i.size.bottom+i.size.margin.bottom:i.size.bottom+i.size.margin.bottom-h.size.margin.top:i?h||(k.top=i.size.bottom+i.size.margin.bottom):
-k.top=h.size.top-h.size.margin.top;d.is(x)||k.top>b.scroll.y-15&&k.top<b.scroll.y+5?(k.top=a.inInlineMode?0:b.scroll.y,this.look(x)):d.is(y)||k.top>b.pane.bottom-5&&k.top<b.pane.bottom+15?(k.top=a.inInlineMode?b.editable.height+b.editable.padding.top+b.editable.padding.bottom:b.pane.bottom-1,this.look(y)):(a.inInlineMode&&(k.top-=b.editable.top+b.editable.border.top),this.look(s));a.inInlineMode&&(k.top--,k.top+=b.editable.scroll.top,k.left+=b.editable.scroll.left);for(var T in k)k[T]=CKEDITOR.tools.cssLength(k[T]);
-this.setStyles(k)},look:function(a){if(this.oldLook!=a){for(var b=this.lineChildren.length,c;b--;)(c=this.lineChildren[b]).setAttribute("style",c.base+c.looks[0|a/2]);this.oldLook=a}},wrap:new M("span",a.doc)});for(c=d.lineChildren.length;c--;)d.lineChildren[c].appendTo(d);d.look(s);d.appendTo(d.wrap);d.unselectable();d.lineChildren[0].on("mouseup",function(b){d.detach();N(a,function(b){var c=a.line.trigger;b[c.is(D)?"insertBefore":"insertAfter"](c.is(D)?c.lower:c.upper)},!0);a.editor.focus();!n.ie&&
-a.enterMode!=CKEDITOR.ENTER_BR&&a.hotNode.scrollIntoView();b.data.preventDefault(!0)});d.on("mousedown",function(a){a.data.preventDefault(!0)});a.line=d}function N(a,c,d){var b=new CKEDITOR.dom.range(a.doc),e=a.editor,f;n.ie&&a.enterMode==CKEDITOR.ENTER_BR?f=a.doc.createText(E):(f=(f=K(a.element,!0))&&f.data("cke-enter-mode")||a.enterMode,f=new M(F[f],a.doc),f.is("br")||a.doc.createText(E).appendTo(f));d&&e.fire("saveSnapshot");c(f);b.moveToPosition(f,CKEDITOR.POSITION_AFTER_START);e.getSelection().selectRanges([b]);
-a.hotNode=f;d&&e.fire("saveSnapshot")}function U(a,c){return{canUndo:!0,modes:{wysiwyg:1},exec:function(){function d(b){var d=n.ie&&9>n.version?" ":E,f=a.hotNode&&a.hotNode.getText()==d&&a.element.equals(a.hotNode)&&a.lastCmdDirection===!!c;N(a,function(d){f&&a.hotNode&&a.hotNode.remove();d[c?"insertAfter":"insertBefore"](b);d.setAttributes({"data-cke-magicline-hot":1,"data-cke-magicline-dir":!!c});a.lastCmdDirection=!!c});!n.ie&&a.enterMode!=CKEDITOR.ENTER_BR&&a.hotNode.scrollIntoView();a.line.detach()}
-return function(b){var b=b.getSelection().getStartElement(),e,b=b.getAscendant(V,1);if(!W(a,b)&&b&&!b.equals(a.editable)&&!b.contains(a.editable)){if((e=K(b))&&"false"==e.getAttribute("contenteditable"))b=e;a.element=b;e=r(a,b,!c);var f;m(e)&&e.is(a.triggers)&&e.is(ia)&&(!r(a,e,!c)||(f=r(a,e,!c))&&m(f)&&f.is(a.triggers))?d(e):(f=J(a,b),m(f)&&(r(a,f,!c)?(b=r(a,f,!c))&&(m(b)&&b.is(a.triggers))&&d(f):d(f)))}}}()}}function v(a,c){if(!c||!(c.type==CKEDITOR.NODE_ELEMENT&&c.$))return!1;var d=a.line;return d.wrap.equals(c)||
-d.wrap.contains(c)}function m(a){return a&&a.type==CKEDITOR.NODE_ELEMENT&&a.$}function p(a){if(!m(a))return!1;var c;if(!(c=X(a)))m(a)?(c={left:1,right:1,center:1},c=!(!c[a.getComputedStyle("float")]&&!c[a.getAttribute("align")])):c=!1;return c}function X(a){return!!{absolute:1,fixed:1}[a.getComputedStyle("position")]}function G(a,c){return m(c)?c.is(a.triggers):null}function W(a,c){if(!c)return!1;for(var d=c.getParents(1),b=d.length;b--;)for(var e=a.tabuList.length;e--;)if(d[b].hasAttribute(a.tabuList[e]))return!0;
-return!1}function ja(a,c,d){c=c[d?"getLast":"getFirst"](function(b){return a.isRelevant(b)&&!b.is(ka)});if(!c)return!1;o(a,c);return d?c.size.top>a.mouse.y:c.size.bottom<a.mouse.y}function Y(a){var c=a.editable,d=a.mouse,b=a.view,e=a.triggerOffset;C(a);var f=d.y>(a.inInlineMode?b.editable.top+b.editable.height/2:Math.min(b.editable.height,b.pane.height)/2),c=c[f?"getLast":"getFirst"](function(a){return!(z(a)||A(a))});if(!c)return null;v(a,c)&&(c=a.line.wrap[f?"getPrevious":"getNext"](function(a){return!(z(a)||
-A(a))}));if(!m(c)||p(c)||!G(a,c))return null;o(a,c);return!f&&0<=c.size.top&&0<d.y&&d.y<c.size.top+e?(a=a.inInlineMode||0===b.scroll.y?x:s,new u([null,c,D,H,a])):f&&c.size.bottom<=b.pane.height&&d.y>c.size.bottom-e&&d.y<b.pane.height?(a=a.inInlineMode||c.size.bottom>b.pane.height-e&&c.size.bottom<b.pane.height?y:s,new u([c,null,Z,H,a])):null}function $(a){var c=a.mouse,d=a.view,b=a.triggerOffset,e=J(a);if(!e)return null;o(a,e);var b=Math.min(b,0|e.size.outerHeight/2),f=[],g,i;if(c.y>e.size.top-1&&
-c.y<e.size.top+b)i=!1;else if(c.y>e.size.bottom-b&&c.y<e.size.bottom+1)i=!0;else return null;if(p(e)||ja(a,e,i)||e.getParent().is(aa))return null;var h=r(a,e,!i);if(h){if(h&&h.type==CKEDITOR.NODE_TEXT)return null;if(m(h)){if(p(h)||!G(a,h)||h.getParent().is(aa))return null;f=[h,e][i?"reverse":"concat"]().concat([O,H])}}else e.equals(a.editable[i?"getLast":"getFirst"](a.isRelevant))?(C(a),i&&c.y>e.size.bottom-b&&c.y<d.pane.height&&e.size.bottom>d.pane.height-b&&e.size.bottom<d.pane.height?g=y:0<c.y&&
-c.y<e.size.top+b&&(g=x)):g=s,f=[null,e][i?"reverse":"concat"]().concat([i?Z:D,H,g,e.equals(a.editable[i?"getLast":"getFirst"](a.isRelevant))?i?y:x:s]);return 0 in f?new u(f):null}function P(a,c,d,b){for(var e=function(){var b=n.ie?c.$.currentStyle:a.win.$.getComputedStyle(c.$,"");return n.ie?function(a){return b[CKEDITOR.tools.cssStyleToDomStyle(a)]}:function(a){return b.getPropertyValue(a)}}(),f=c.getDocumentPosition(),g={},i={},h={},j={},l=t.length;l--;)g[t[l]]=parseInt(e("border-"+t[l]+"-width"),
-10)||0,h[t[l]]=parseInt(e("padding-"+t[l]),10)||0,i[t[l]]=parseInt(e("margin-"+t[l]),10)||0;(!d||b)&&I(a,b);j.top=f.y-(d?0:a.view.scroll.y);j.left=f.x-(d?0:a.view.scroll.x);j.outerWidth=c.$.offsetWidth;j.outerHeight=c.$.offsetHeight;j.height=j.outerHeight-(h.top+h.bottom+g.top+g.bottom);j.width=j.outerWidth-(h.left+h.right+g.left+g.right);j.bottom=j.top+j.outerHeight;j.right=j.left+j.outerWidth;a.inInlineMode&&(j.scroll={top:c.$.scrollTop,left:c.$.scrollLeft});return q({border:g,padding:h,margin:i,
-ignoreScroll:d},j,!0)}function o(a,c,d){if(!m(c))return c.size=null;if(c.size){if(c.size.ignoreScroll==d&&c.size.date>new Date-ba)return null}else c.size={};return q(c.size,P(a,c,d),{date:+new Date},!0)}function C(a,c){a.view.editable=P(a,a.editable,c,!0)}function I(a,c){a.view||(a.view={});var d=a.view;if(c||!(d&&d.date>new Date-ba)){var b=a.win,d=b.getScrollPosition(),b=b.getViewPaneSize();q(a.view,{scroll:{x:d.x,y:d.y,width:a.doc.$.documentElement.scrollWidth-b.width,height:a.doc.$.documentElement.scrollHeight-
-b.height},pane:{width:b.width,height:b.height,bottom:b.height+d.y},date:+new Date},!0)}}function la(a,c,d,b){for(var e=b,f=b,g=0,i=!1,h=!1,j=a.view.pane.height,l=a.mouse;l.y+g<j&&0<l.y-g;){i||(i=c(e,b));h||(h=c(f,b));!i&&0<l.y-g&&(e=d(a,{x:l.x,y:l.y-g}));!h&&l.y+g<j&&(f=d(a,{x:l.x,y:l.y+g}));if(i&&h)break;g+=2}return new u([e,f,null,null])}CKEDITOR.plugins.add("magicline",{init:function(a){var c=a.config,d=c.magicline_triggerOffset||30,b={editor:a,enterMode:c.enterMode,triggerOffset:d,holdDistance:0|
-d*(c.magicline_holdDistance||0.5),boxColor:c.magicline_color||"#ff0000",rtl:"rtl"==c.contentsLangDirection,tabuList:["data-cke-hidden-sel"].concat(c.magicline_tabuList||[]),triggers:c.magicline_everywhere?V:{table:1,hr:1,div:1,ul:1,ol:1,dl:1,form:1,blockquote:1}},e,f,g;b.isRelevant=function(a){return m(a)&&!v(b,a)&&!p(a)};a.on("contentDom",function(){var d=a.editable(),h=a.document,j=a.window;q(b,{editable:d,inInlineMode:d.isInline(),doc:h,win:j,hotNode:null},!0);b.boundary=b.inInlineMode?b.editable:
-b.doc.getDocumentElement();d.is(w.$inline)||(b.inInlineMode&&!X(d)&&d.setStyles({position:"relative",top:null,left:null}),ha.call(this,b),I(b),d.attachListener(a,"beforeUndoImage",function(){b.line.detach()}),d.attachListener(a,"beforeGetData",function(){b.line.wrap.getParent()&&(b.line.detach(),a.once("getData",function(){b.line.attach()},null,null,1E3))},null,null,0),d.attachListener(b.inInlineMode?h:h.getWindow().getFrame(),"mouseout",function(c){if("wysiwyg"==a.mode)if(b.inInlineMode){var d=c.data.$.clientX,
-c=c.data.$.clientY;I(b);C(b,!0);var e=b.view.editable,f=b.view.scroll;if(!(d>e.left-f.x&&d<e.right-f.x)||!(c>e.top-f.y&&c<e.bottom-f.y))clearTimeout(g),g=null,b.line.detach()}else clearTimeout(g),g=null,b.line.detach()}),d.attachListener(d,"keyup",function(){b.hiddenMode=0}),d.attachListener(d,"keydown",function(c){if("wysiwyg"==a.mode)switch(c=c.data.getKeystroke(),a.getSelection().getStartElement(),c){case 2228240:case 16:b.hiddenMode=1,b.line.detach()}}),d.attachListener(b.inInlineMode?d:h,"mousemove",
-function(c){f=!0;if(!("wysiwyg"!=a.mode||a.readOnly||g)){var d={x:c.data.$.clientX,y:c.data.$.clientY};g=setTimeout(function(){b.mouse=d;g=b.trigger=null;I(b);if(f&&!b.hiddenMode&&a.focusManager.hasFocus&&!b.line.mouseNear()&&(b.element=ca(b,!0)))(b.trigger=Y(b)||$(b)||da(b))&&!W(b,b.trigger.upper||b.trigger.lower)?b.line.attach().place():(b.trigger=null,b.line.detach()),f=!1},30)}}),d.attachListener(j,"scroll",function(){"wysiwyg"==a.mode&&(b.line.detach(),n.webkit&&(b.hiddenMode=1,clearTimeout(e),
-e=setTimeout(function(){b.mouseDown||(b.hiddenMode=0)},50)))}),d.attachListener(ea?h:j,"mousedown",function(){"wysiwyg"==a.mode&&(b.line.detach(),b.hiddenMode=1,b.mouseDown=1)}),d.attachListener(ea?h:j,"mouseup",function(){b.hiddenMode=0;b.mouseDown=0}),a.addCommand("accessPreviousSpace",U(b)),a.addCommand("accessNextSpace",U(b,!0)),a.setKeystroke([[c.magicline_keystrokePrevious,"accessPreviousSpace"],[c.magicline_keystrokeNext,"accessNextSpace"]]),a.on("loadSnapshot",function(){var c,d,e,f;for(f in{p:1,
-br:1,div:1}){c=a.document.getElementsByTag(f);for(e=c.count();e--;)if((d=c.getItem(e)).data("cke-magicline-hot")){b.hotNode=d;b.lastCmdDirection="true"===d.data("cke-magicline-dir")?!0:!1;return}}}),this.backdoor={accessFocusSpace:N,boxTrigger:u,isLine:v,getAscendantTrigger:J,getNonEmptyNeighbour:r,getSize:P,that:b,triggerEdge:$,triggerEditable:Y,triggerExpand:da})},this)}});var q=CKEDITOR.tools.extend,M=CKEDITOR.dom.element,B=M.createFromHtml,n=CKEDITOR.env,ea=CKEDITOR.env.ie&&9>CKEDITOR.env.version,
-w=CKEDITOR.dtd,F={},D=128,Z=64,O=32,H=16,fa=8,x=4,y=2,s=1,E=" ",aa=w.$listItem,ka=w.$tableContent,ia=q({},w.$nonEditable,w.$empty),V=w.$block,ba=100,L="width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;",S=L+"border-color:transparent;display:block;border-style:solid;",R="<span>"+E+"</span>";F[CKEDITOR.ENTER_BR]="br";F[CKEDITOR.ENTER_P]="p";F[CKEDITOR.ENTER_DIV]="div";u.prototype={set:function(a,c,d){this.properties=a+
-c+(d||s);return this},is:function(a){return(this.properties&a)==a}};var ca=function(){function a(a,d){var b=a.$.elementFromPoint(d.x,d.y);return b&&b.nodeType?new CKEDITOR.dom.element(b):null}return function(c,d,b){if(!c.mouse)return null;var e=c.doc,f=c.line.wrap,b=b||c.mouse,g=a(e,b);d&&v(c,g)&&(f.hide(),g=a(e,b),f.show());return!g||!(g.type==CKEDITOR.NODE_ELEMENT&&g.$)||n.ie&&9>n.version&&!c.boundary.equals(g)&&!c.boundary.contains(g)?null:g}}(),z=CKEDITOR.dom.walker.whitespaces(),A=CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT),
-da=function(){function a(a){var b=a.element,e,f,g;if(!m(b)||b.contains(a.editable)||b.isReadOnly())return null;g=la(a,function(a,b){return!b.equals(a)},function(a,b){return ca(a,!0,b)},b);e=g.upper;f=g.lower;if(Q(a,e,f))return g.set(O,fa);if(e&&b.contains(e))for(;!e.getParent().equals(b);)e=e.getParent();else e=b.getFirst(function(b){return c(a,b)});if(f&&b.contains(f))for(;!f.getParent().equals(b);)f=f.getParent();else f=b.getLast(function(b){return c(a,b)});if(!e||!f)return null;o(a,e);o(a,f);if(!(a.mouse.y>
-e.size.top&&a.mouse.y<f.size.bottom))return null;for(var b=Number.MAX_VALUE,i,h,j,l;f&&!f.equals(e)&&(h=e.getNext(a.isRelevant));)i=Math.abs(ga(a,e,h)-a.mouse.y),i<b&&(b=i,j=e,l=h),e=h,o(a,e);if(!j||!l||!(a.mouse.y>j.size.top&&a.mouse.y<l.size.bottom))return null;g.upper=j;g.lower=l;return g.set(O,fa)}function c(a,b){return!(b&&b.type==CKEDITOR.NODE_TEXT||A(b)||p(b)||v(a,b)||b.type==CKEDITOR.NODE_ELEMENT&&b.$&&b.is("br"))}return function(c){var b=a(c),e;if(e=b){e=b.upper;var f=b.lower;e=!e||!f||p(f)||
-p(e)||f.equals(e)||e.equals(f)||f.contains(e)||e.contains(f)?!1:G(c,e)&&G(c,f)&&Q(c,e,f)?!0:!1}return e?b:null}}(),t=["top","left","right","bottom"]})();CKEDITOR.config.magicline_keystrokePrevious=CKEDITOR.CTRL+CKEDITOR.SHIFT+51;CKEDITOR.config.magicline_keystrokeNext=CKEDITOR.CTRL+CKEDITOR.SHIFT+52;(function(){function l(a){if(!a||a.type!=CKEDITOR.NODE_ELEMENT||"form"!=a.getName())return[];for(var e=[],f=["style","className"],b=0;b<f.length;b++){var d=a.$.elements.namedItem(f[b]);d&&(d=new CKEDITOR.dom.element(d),e.push([d,d.nextSibling]),d.remove())}return e}function o(a,e){if(a&&!(a.type!=CKEDITOR.NODE_ELEMENT||"form"!=a.getName())&&0<e.length)for(var f=e.length-1;0<=f;f--){var b=e[f][0],d=e[f][1];d?b.insertBefore(d):b.appendTo(a)}}function n(a,e){var f=l(a),b={},d=a.$;e||(b["class"]=d.className||
-"",d.className="");b.inline=d.style.cssText||"";e||(d.style.cssText="position: static; overflow: visible");o(f);return b}function p(a,e){var f=l(a),b=a.$;"class"in e&&(b.className=e["class"]);"inline"in e&&(b.style.cssText=e.inline);o(f)}function q(a){if(!a.editable().isInline()){var e=CKEDITOR.instances,f;for(f in e){var b=e[f];"wysiwyg"==b.mode&&!b.readOnly&&(b=b.document.getBody(),b.setAttribute("contentEditable",!1),b.setAttribute("contentEditable",!0))}a.editable().hasFocus&&(a.toolbox.focus(),
-a.focus())}}CKEDITOR.plugins.add("maximize",{init:function(a){function e(){var b=d.getViewPaneSize();a.resize(b.width,b.height,null,!0)}if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var f=a.lang,b=CKEDITOR.document,d=b.getWindow(),j,k,m,l=CKEDITOR.TRISTATE_OFF;a.addCommand("maximize",{modes:{wysiwyg:!CKEDITOR.env.iOS,source:!CKEDITOR.env.iOS},readOnly:1,editorFocus:!1,exec:function(){var h=a.container.getFirst(function(a){return a.type==CKEDITOR.NODE_ELEMENT&&a.hasClass("cke_inner")}),g=a.ui.space("contents");
-if("wysiwyg"==a.mode){var c=a.getSelection();j=c&&c.getRanges();k=d.getScrollPosition()}else{var i=a.editable().$;j=!CKEDITOR.env.ie&&[i.selectionStart,i.selectionEnd];k=[i.scrollLeft,i.scrollTop]}if(this.state==CKEDITOR.TRISTATE_OFF){d.on("resize",e);m=d.getScrollPosition();for(c=a.container;c=c.getParent();)c.setCustomData("maximize_saved_styles",n(c)),c.setStyle("z-index",a.config.baseFloatZIndex-5);g.setCustomData("maximize_saved_styles",n(g,!0));h.setCustomData("maximize_saved_styles",n(h,!0));
-g={overflow:CKEDITOR.env.webkit?"":"hidden",width:0,height:0};b.getDocumentElement().setStyles(g);!CKEDITOR.env.gecko&&b.getDocumentElement().setStyle("position","fixed");(!CKEDITOR.env.gecko||!CKEDITOR.env.quirks)&&b.getBody().setStyles(g);CKEDITOR.env.ie?setTimeout(function(){d.$.scrollTo(0,0)},0):d.$.scrollTo(0,0);h.setStyle("position",CKEDITOR.env.gecko&&CKEDITOR.env.quirks?"fixed":"absolute");h.$.offsetLeft;h.setStyles({"z-index":a.config.baseFloatZIndex-5,left:"0px",top:"0px"});h.addClass("cke_maximized");
-e();g=h.getDocumentPosition();h.setStyles({left:-1*g.x+"px",top:-1*g.y+"px"});CKEDITOR.env.gecko&&q(a)}else if(this.state==CKEDITOR.TRISTATE_ON){d.removeListener("resize",e);g=[g,h];for(c=0;c<g.length;c++)p(g[c],g[c].getCustomData("maximize_saved_styles")),g[c].removeCustomData("maximize_saved_styles");for(c=a.container;c=c.getParent();)p(c,c.getCustomData("maximize_saved_styles")),c.removeCustomData("maximize_saved_styles");CKEDITOR.env.ie?setTimeout(function(){d.$.scrollTo(m.x,m.y)},0):d.$.scrollTo(m.x,
-m.y);h.removeClass("cke_maximized");CKEDITOR.env.webkit&&(h.setStyle("display","inline"),setTimeout(function(){h.setStyle("display","block")},0));a.fire("resize")}this.toggleState();if(c=this.uiItems[0])g=this.state==CKEDITOR.TRISTATE_OFF?f.maximize.maximize:f.maximize.minimize,c=CKEDITOR.document.getById(c._.id),c.getChild(1).setHtml(g),c.setAttribute("title",g),c.setAttribute("href",'javascript:void("'+g+'");');"wysiwyg"==a.mode?j?(CKEDITOR.env.gecko&&q(a),a.getSelection().selectRanges(j),(i=a.getSelection().getStartElement())&&
-i.scrollIntoView(!0)):d.$.scrollTo(k.x,k.y):(j&&(i.selectionStart=j[0],i.selectionEnd=j[1]),i.scrollLeft=k[0],i.scrollTop=k[1]);j=k=null;l=this.state;a.fire("maximize",this.state)},canUndo:!1});a.ui.addButton&&a.ui.addButton("Maximize",{label:f.maximize.maximize,command:"maximize",toolbar:"tools,10"});a.on("mode",function(){var b=a.getCommand("maximize");b.setState(b.state==CKEDITOR.TRISTATE_DISABLED?CKEDITOR.TRISTATE_DISABLED:l)},null,null,100)}}})})();CKEDITOR.plugins.add("newpage",{init:function(a){a.addCommand("newpage",{modes:{wysiwyg:1,source:1},exec:function(b){var a=this;b.setData(b.config.newpage_html||"",function(){b.focus();setTimeout(function(){b.fire("afterCommandExec",{name:"newpage",command:a});b.selectionChange()},200)})},async:!0});a.ui.addButton&&a.ui.addButton("NewPage",{label:a.lang.newpage.toolbar,command:"newpage",toolbar:"document,20"})}});(function(){function e(a){return{"aria-label":a,"class":"cke_pagebreak",contenteditable:"false","data-cke-display-name":"pagebreak","data-cke-pagebreak":1,style:"page-break-after: always",title:a}}CKEDITOR.plugins.add("pagebreak",{requires:"fakeobjects",onLoad:function(){var a=("background:url("+CKEDITOR.getUrl(this.path+"images/pagebreak.gif")+") no-repeat center center;clear:both;width:100%;border-top:#999 1px dotted;border-bottom:#999 1px dotted;padding:0;height:5px;cursor:default;").replace(/;/g,
-" !important;");CKEDITOR.addCss("div.cke_pagebreak{"+a+"}")},init:function(a){a.blockless||(a.addCommand("pagebreak",CKEDITOR.plugins.pagebreakCmd),a.ui.addButton&&a.ui.addButton("PageBreak",{label:a.lang.pagebreak.toolbar,command:"pagebreak",toolbar:"insert,70"}),CKEDITOR.env.webkit&&a.on("contentDom",function(){a.document.on("click",function(b){b=b.data.getTarget();b.is("div")&&b.hasClass("cke_pagebreak")&&a.getSelection().selectElement(b)})}))},afterInit:function(a){function b(f){CKEDITOR.tools.extend(f.attributes,
-e(a.lang.pagebreak.alt),!0);f.children.length=0}var c=a.dataProcessor,g=c&&c.dataFilter,c=c&&c.htmlFilter,h=/page-break-after\s*:\s*always/i,i=/display\s*:\s*none/i;c&&c.addRules({attributes:{"class":function(a,b){var c=a.replace("cke_pagebreak","");if(c!=a){var d=CKEDITOR.htmlParser.fragment.fromHtml('<span style="display: none;">&nbsp;</span>').children[0];b.children.length=0;b.add(d);d=b.attributes;delete d["aria-label"];delete d.contenteditable;delete d.title}return c}}},{applyToAll:!0,priority:5});
-g&&g.addRules({elements:{div:function(a){if(a.attributes["data-cke-pagebreak"])b(a);else if(h.test(a.attributes.style)){var c=a.children[0];c&&("span"==c.name&&i.test(c.attributes.style))&&b(a)}}}})}});CKEDITOR.plugins.pagebreakCmd={exec:function(a){var b=a.document.createElement("div",{attributes:e(a.lang.pagebreak.alt)});a.insertElement(b)},context:"div",allowedContent:{div:{styles:"!page-break-after"},span:{match:function(a){return(a=a.parent)&&"div"==a.name&&a.styles&&a.styles["page-break-after"]},
-styles:"display"}},requiredContent:"div{page-break-after}"}})();(function(){var c={canUndo:!1,async:!0,exec:function(a){a.getClipboardData({title:a.lang.pastetext.title},function(b){b&&a.fire("paste",{type:"text",dataValue:b.dataValue});a.fire("afterCommandExec",{name:"pastetext",command:c,returnValue:!!b})})}};CKEDITOR.plugins.add("pastetext",{requires:"clipboard",init:function(a){a.addCommand("pastetext",c);a.ui.addButton&&a.ui.addButton("PasteText",{label:a.lang.pastetext.button,command:"pastetext",toolbar:"clipboard,40"});if(a.config.forcePasteAsPlainText)a.on("beforePaste",
-function(a){"html"!=a.data.type&&(a.data.type="text")});a.on("pasteState",function(b){a.getCommand("pastetext").setState(b.data)})}})})();(function(){function h(a,d,f){var b=CKEDITOR.cleanWord;b?f():(a=CKEDITOR.getUrl(a.config.pasteFromWordCleanupFile||d+"filter/default.js"),CKEDITOR.scriptLoader.load(a,f,null,!0));return!b}function i(a){a.data.type="html"}CKEDITOR.plugins.add("pastefromword",{requires:"clipboard",init:function(a){var d=0,f=this.path;a.addCommand("pastefromword",{canUndo:!1,async:!0,exec:function(a){var e=this;d=1;a.once("beforePaste",i);a.getClipboardData({title:a.lang.pastefromword.title},function(c){c&&a.fire("paste",
-{type:"html",dataValue:c.dataValue});a.fire("afterCommandExec",{name:"pastefromword",command:e,returnValue:!!c})})}});a.ui.addButton&&a.ui.addButton("PasteFromWord",{label:a.lang.pastefromword.toolbar,command:"pastefromword",toolbar:"clipboard,50"});a.on("pasteState",function(b){a.getCommand("pastefromword").setState(b.data)});a.on("paste",function(b){var e=b.data,c=e.dataValue;if(c&&(d||/(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument)/.test(c))){var g=h(a,f,function(){if(g)a.fire("paste",e);
-else if(!a.config.pasteFromWordPromptCleanup||d||confirm(a.lang.pastefromword.confirmCleanup))e.dataValue=CKEDITOR.cleanWord(c,a)});g&&b.cancel()}},null,null,3)}})})();(function(){var h,i={modes:{wysiwyg:1,source:1},canUndo:!1,readOnly:1,exec:function(a){var g,b=a.config,f=b.baseHref?'<base href="'+b.baseHref+'"/>':"";if(b.fullPage)g=a.getData().replace(/<head>/,"$&"+f).replace(/[^>]*(?=<\/title>)/,"$& &mdash; "+a.lang.preview.preview);else{var b="<body ",d=a.document&&a.document.getBody();d&&(d.getAttribute("id")&&(b+='id="'+d.getAttribute("id")+'" '),d.getAttribute("class")&&(b+='class="'+d.getAttribute("class")+'" '));g=a.config.docType+'<html dir="'+a.config.contentsLangDirection+
-'"><head>'+f+"<title>"+a.lang.preview.preview+"</title>"+CKEDITOR.tools.buildStyleHtml(a.config.contentsCss)+"</head>"+(b+">")+a.getData()+"</body></html>"}f=640;b=420;d=80;try{var c=window.screen,f=Math.round(0.8*c.width),b=Math.round(0.7*c.height),d=Math.round(0.1*c.width)}catch(i){}if(!1===a.fire("contentPreview",a={dataValue:g}))return!1;var c="",e;CKEDITOR.env.ie&&(window._cke_htmlToLoad=a.dataValue,e="javascript:void( (function(){document.open();"+("("+CKEDITOR.tools.fixDomain+")();").replace(/\/\/.*?\n/g,
-"").replace(/parent\./g,"window.opener.")+"document.write( window.opener._cke_htmlToLoad );document.close();window.opener._cke_htmlToLoad = null;})() )",c="");CKEDITOR.env.gecko&&(window._cke_htmlToLoad=a.dataValue,c=CKEDITOR.getUrl(h+"preview.html"));c=window.open(c,null,"toolbar=yes,location=no,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width="+f+",height="+b+",left="+d);CKEDITOR.env.ie&&c&&(c.location=e);!CKEDITOR.env.ie&&!CKEDITOR.env.gecko&&(e=c.document,e.open(),e.write(a.dataValue),
-e.close());return!0}};CKEDITOR.plugins.add("preview",{init:function(a){a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&(h=this.path,a.addCommand("preview",i),a.ui.addButton&&a.ui.addButton("Preview",{label:a.lang.preview.preview,command:"preview",toolbar:"document,40"}))}})})();CKEDITOR.plugins.add("print",{init:function(a){a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE&&(a.addCommand("print",CKEDITOR.plugins.print),a.ui.addButton&&a.ui.addButton("Print",{label:a.lang.print.toolbar,command:"print",toolbar:"document,50"}))}});CKEDITOR.plugins.print={exec:function(a){CKEDITOR.env.gecko?a.window.$.print():a.document.$.execCommand("Print")},canUndo:!1,readOnly:1,modes:{wysiwyg:1}};CKEDITOR.plugins.add("removeformat",{init:function(a){a.addCommand("removeFormat",CKEDITOR.plugins.removeformat.commands.removeformat);a.ui.addButton&&a.ui.addButton("RemoveFormat",{label:a.lang.removeformat.toolbar,command:"removeFormat",toolbar:"cleanup,10"})}});
-CKEDITOR.plugins.removeformat={commands:{removeformat:{exec:function(a){for(var h=a._.removeFormatRegex||(a._.removeFormatRegex=RegExp("^(?:"+a.config.removeFormatTags.replace(/,/g,"|")+")$","i")),e=a._.removeAttributes||(a._.removeAttributes=a.config.removeFormatAttributes.split(",")),f=CKEDITOR.plugins.removeformat.filter,k=a.getSelection().getRanges(),l=k.createIterator(),m=function(a){return a.type==CKEDITOR.NODE_ELEMENT},c;c=l.getNextRange();){c.collapsed||c.enlarge(CKEDITOR.ENLARGE_ELEMENT);
-var j=c.createBookmark(),b=j.startNode,d=j.endNode,i=function(b){for(var c=a.elementPath(b),e=c.elements,d=1,g;(g=e[d])&&!g.equals(c.block)&&!g.equals(c.blockLimit);d++)h.test(g.getName())&&f(a,g)&&b.breakParent(g)};i(b);if(d){i(d);for(b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT);b&&!b.equals(d);)if(b.isReadOnly()){if(b.getPosition(d)&CKEDITOR.POSITION_CONTAINS)break;b=b.getNext(m)}else i=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT),!("img"==b.getName()&&b.data("cke-realelement"))&&f(a,b)&&(h.test(b.getName())?
-b.remove(1):(b.removeAttributes(e),a.fire("removeFormatCleanup",b))),b=i}c.moveToBookmark(j)}a.forceNextSelectionCheck();a.getSelection().selectRanges(k)}}},filter:function(a,h){for(var e=a._.removeFormatFilters||[],f=0;f<e.length;f++)if(!1===e[f](h))return!1;return!0}};CKEDITOR.editor.prototype.addRemoveFormatFilter=function(a){this._.removeFormatFilters||(this._.removeFormatFilters=[]);this._.removeFormatFilters.push(a)};CKEDITOR.config.removeFormatTags="b,big,cite,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var";
-CKEDITOR.config.removeFormatAttributes="class,style,lang,width,height,align,hspace,valign";(function(){var b={readOnly:1,exec:function(a){if(a.fire("save")&&(a=a.element.$.form))try{a.submit()}catch(b){a.submit.click&&a.submit.click()}}};CKEDITOR.plugins.add("save",{init:function(a){a.elementMode==CKEDITOR.ELEMENT_MODE_REPLACE&&(a.addCommand("save",b).modes={wysiwyg:!!a.element.$.form},a.ui.addButton&&a.ui.addButton("Save",{label:a.lang.save.toolbar,command:"save",toolbar:"document,10"}))}})})();(function(){CKEDITOR.plugins.add("selectall",{init:function(b){b.addCommand("selectAll",{modes:{wysiwyg:1,source:1},exec:function(a){var b=a.editable();if(b.is("textarea"))a=b.$,CKEDITOR.env.ie?a.createTextRange().execCommand("SelectAll"):(a.selectionStart=0,a.selectionEnd=a.value.length),a.focus();else{if(b.is("body"))a.document.$.execCommand("SelectAll",!1,null);else{var c=a.createRange();c.selectNodeContents(b);c.select()}a.forceNextSelectionCheck();a.selectionChange()}},canUndo:!1});b.ui.addButton&&
-b.ui.addButton("SelectAll",{label:b.lang.selectall.toolbar,command:"selectAll",toolbar:"selection,10"})}})})();(function(){var i={readOnly:1,preserveState:!0,editorFocus:!1,exec:function(a){this.toggleState();this.refresh(a)},refresh:function(a){if(a.document){var c=this.state==CKEDITOR.TRISTATE_ON&&(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE||a.focusManager.hasFocus)?"attachClass":"removeClass";a.editable()[c]("cke_show_blocks")}}};CKEDITOR.plugins.add("showblocks",{onLoad:function(){var a="p div pre address blockquote h1 h2 h3 h4 h5 h6".split(" "),c,b,e,f,i=CKEDITOR.getUrl(this.path),j=!(CKEDITOR.env.ie&&
-9>CKEDITOR.env.version),g=j?":not([contenteditable=false]):not(.cke_show_blocks_off)":"",d,h;for(c=b=e=f="";d=a.pop();)h=a.length?",":"",c+=".cke_show_blocks "+d+g+h,e+=".cke_show_blocks.cke_contents_ltr "+d+g+h,f+=".cke_show_blocks.cke_contents_rtl "+d+g+h,b+=".cke_show_blocks "+d+g+"{background-image:url("+CKEDITOR.getUrl(i+"images/block_"+d+".png")+")}";CKEDITOR.addCss((c+"{background-repeat:no-repeat;border:1px dotted gray;padding-top:8px}").concat(b,e+"{background-position:top left;padding-left:8px}",
-f+"{background-position:top right;padding-right:8px}"));j||CKEDITOR.addCss(".cke_show_blocks [contenteditable=false],.cke_show_blocks .cke_show_blocks_off{border:none;padding-top:0;background-image:none}.cke_show_blocks.cke_contents_rtl [contenteditable=false],.cke_show_blocks.cke_contents_rtl .cke_show_blocks_off{padding-right:0}.cke_show_blocks.cke_contents_ltr [contenteditable=false],.cke_show_blocks.cke_contents_ltr .cke_show_blocks_off{padding-left:0}")},init:function(a){function c(){b.refresh(a)}
-if(!a.blockless){var b=a.addCommand("showblocks",i);b.canUndo=!1;a.config.startupOutlineBlocks&&b.setState(CKEDITOR.TRISTATE_ON);a.ui.addButton&&a.ui.addButton("ShowBlocks",{label:a.lang.showblocks.toolbar,command:"showblocks",toolbar:"tools,20"});a.on("mode",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)});a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&(a.on("focus",c),a.on("blur",c));a.on("contentDom",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)})}}})})();(function(){var f={preserveState:!0,editorFocus:!1,readOnly:1,exec:function(a){this.toggleState();this.refresh(a)},refresh:function(a){if(a.document){var b=this.state==CKEDITOR.TRISTATE_ON?"attachClass":"removeClass";a.editable()[b]("cke_show_borders")}}};CKEDITOR.plugins.add("showborders",{modes:{wysiwyg:1},onLoad:function(){var a;a=(CKEDITOR.env.ie6Compat?[".%1 table.%2,",".%1 table.%2 td, .%1 table.%2 th","{","border : #d3d3d3 1px dotted","}"]:".%1 table.%2,;.%1 table.%2 > tr > td, .%1 table.%2 > tr > th,;.%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,;.%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,;.%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th;{;border : #d3d3d3 1px dotted;}".split(";")).join("").replace(/%2/g,
-"cke_show_border").replace(/%1/g,"cke_show_borders ");CKEDITOR.addCss(a)},init:function(a){var b=a.addCommand("showborders",f);b.canUndo=!1;!1!==a.config.startupShowBorders&&b.setState(CKEDITOR.TRISTATE_ON);a.on("mode",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)},null,null,100);a.on("contentDom",function(){b.state!=CKEDITOR.TRISTATE_DISABLED&&b.refresh(a)});a.on("removeFormatCleanup",function(d){d=d.data;a.getCommand("showborders").state==CKEDITOR.TRISTATE_ON&&(d.is("table")&&(!d.hasAttribute("border")||
-0>=parseInt(d.getAttribute("border"),10)))&&d.addClass("cke_show_border")})},afterInit:function(a){var b=a.dataProcessor,a=b&&b.dataFilter,b=b&&b.htmlFilter;a&&a.addRules({elements:{table:function(a){var a=a.attributes,b=a["class"],c=parseInt(a.border,10);if((!c||0>=c)&&(!b||-1==b.indexOf("cke_show_border")))a["class"]=(b||"")+" cke_show_border"}}});b&&b.addRules({elements:{table:function(a){var a=a.attributes,b=a["class"];b&&(a["class"]=b.replace("cke_show_border","").replace(/\s{2}/," ").replace(/^\s+|\s+$/,
-""))}}})}});CKEDITOR.on("dialogDefinition",function(a){var b=a.data.name;if("table"==b||"tableProperties"==b)if(a=a.data.definition,b=a.getContents("info").get("txtBorder"),b.commit=CKEDITOR.tools.override(b.commit,function(a){return function(b,c){a.apply(this,arguments);var e=parseInt(this.getValue(),10);c[!e||0>=e?"addClass":"removeClass"]("cke_show_border")}}),a=(a=a.getContents("advanced"))&&a.get("advCSSClasses"))a.setup=CKEDITOR.tools.override(a.setup,function(a){return function(){a.apply(this,
-arguments);this.setValue(this.getValue().replace(/cke_show_border/,""))}}),a.commit=CKEDITOR.tools.override(a.commit,function(a){return function(b,c){a.apply(this,arguments);parseInt(c.getAttribute("border"),10)||c.addClass("cke_show_border")}})})})();(function(){CKEDITOR.plugins.add("sourcearea",{init:function(a){function d(){var a=e&&this.equals(CKEDITOR.document.getActive());this.hide();this.setStyle("height",this.getParent().$.clientHeight+"px");this.setStyle("width",this.getParent().$.clientWidth+"px");this.show();a&&this.focus()}if(a.elementMode!=CKEDITOR.ELEMENT_MODE_INLINE){var f=CKEDITOR.plugins.sourcearea;a.addMode("source",function(e){var b=a.ui.space("contents").getDocument().createElement("textarea");b.setStyles(CKEDITOR.tools.extend({width:CKEDITOR.env.ie7Compat?
-"99%":"100%",height:"100%",resize:"none",outline:"none","text-align":"left"},CKEDITOR.tools.cssVendorPrefix("tab-size",a.config.sourceAreaTabSize||4)));b.setAttribute("dir","ltr");b.addClass("cke_source cke_reset cke_enable_context_menu");a.ui.space("contents").append(b);b=a.editable(new c(a,b));b.setData(a.getData(1));CKEDITOR.env.ie&&(b.attachListener(a,"resize",d,b),b.attachListener(CKEDITOR.document.getWindow(),"resize",d,b),CKEDITOR.tools.setTimeout(d,0,b));a.fire("ariaWidget",this);e()});a.addCommand("source",
-f.commands.source);a.ui.addButton&&a.ui.addButton("Source",{label:a.lang.sourcearea.toolbar,command:"source",toolbar:"mode,10"});a.on("mode",function(){a.getCommand("source").setState("source"==a.mode?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF)});var e=CKEDITOR.env.ie&&9==CKEDITOR.env.version}}});var c=CKEDITOR.tools.createClass({base:CKEDITOR.editable,proto:{setData:function(a){this.setValue(a);this.status="ready";this.editor.fire("dataReady")},getData:function(){return this.getValue()},insertHtml:function(){},
-insertElement:function(){},insertText:function(){},setReadOnly:function(a){this[(a?"set":"remove")+"Attribute"]("readOnly","readonly")},detach:function(){c.baseProto.detach.call(this);this.clearCustomData();this.remove()}}})})();CKEDITOR.plugins.sourcearea={commands:{source:{modes:{wysiwyg:1,source:1},editorFocus:!1,readOnly:1,exec:function(c){"wysiwyg"==c.mode&&c.fire("saveSnapshot");c.getCommand("source").setState(CKEDITOR.TRISTATE_DISABLED);c.setMode("source"==c.mode?"wysiwyg":"source")},canUndo:!1}}};CKEDITOR.plugins.add("specialchar",{availableLangs:{ar:1,bg:1,ca:1,cs:1,cy:1,de:1,el:1,en:1,"en-gb":1,eo:1,es:1,et:1,fa:1,fi:1,fr:1,"fr-ca":1,gl:1,he:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ku:1,lv:1,nb:1,nl:1,no:1,pl:1,pt:1,"pt-br":1,ru:1,si:1,sk:1,sl:1,sq:1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,"zh-cn":1},requires:"dialog",init:function(a){var c=this;CKEDITOR.dialog.add("specialchar",this.path+"dialogs/specialchar.js");a.addCommand("specialchar",{exec:function(){var b=a.langCode,b=c.availableLangs[b]?
-b:c.availableLangs[b.replace(/-.*/,"")]?b.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c.path+"dialogs/lang/"+b+".js"),function(){CKEDITOR.tools.extend(a.lang.specialchar,c.langEntries[b]);a.openDialog("specialchar")})},modes:{wysiwyg:1},canUndo:!1});a.ui.addButton&&a.ui.addButton("SpecialChar",{label:a.lang.specialchar.toolbar,command:"specialchar",toolbar:"insert,50"})}});CKEDITOR.config.specialChars="! &quot; # $ % &amp; ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 9 : ; &lt; = &gt; ? @ 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 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 { | } ~ &euro; &lsquo; &rsquo; &ldquo; &rdquo; &ndash; &mdash; &iexcl; &cent; &pound; &curren; &yen; &brvbar; &sect; &uml; &copy; &ordf; &laquo; &not; &reg; &macr; &deg; &sup2; &sup3; &acute; &micro; &para; &middot; &cedil; &sup1; &ordm; &raquo; &frac14; &frac12; &frac34; &iquest; &Agrave; &Aacute; &Acirc; &Atilde; &Auml; &Aring; &AElig; &Ccedil; &Egrave; &Eacute; &Ecirc; &Euml; &Igrave; &Iacute; &Icirc; &Iuml; &ETH; &Ntilde; &Ograve; &Oacute; &Ocirc; &Otilde; &Ouml; &times; &Oslash; &Ugrave; &Uacute; &Ucirc; &Uuml; &Yacute; &THORN; &szlig; &agrave; &aacute; &acirc; &atilde; &auml; &aring; &aelig; &ccedil; &egrave; &eacute; &ecirc; &euml; &igrave; &iacute; &icirc; &iuml; &eth; &ntilde; &ograve; &oacute; &ocirc; &otilde; &ouml; &divide; &oslash; &ugrave; &uacute; &ucirc; &uuml; &yacute; &thorn; &yuml; &OElig; &oelig; &#372; &#374 &#373 &#375; &sbquo; &#8219; &bdquo; &hellip; &trade; &#9658; &bull; &rarr; &rArr; &hArr; &diams; &asymp;".split(" ");CKEDITOR.plugins.add("scayt",{requires:"menubutton,dialog",tabToOpen:null,dialogName:"scaytDialog",init:function(a){var d=this,c=CKEDITOR.plugins.scayt;this.bindEvents(a);this.parseConfig(a);this.addRule(a);CKEDITOR.dialog.add(this.dialogName,CKEDITOR.getUrl(this.path+"dialogs/options.js"));this.addMenuItems(a);var b=a.lang.scayt,f=CKEDITOR.env;a.ui.add("Scayt",CKEDITOR.UI_MENUBUTTON,{label:b.text_title,title:b.text_title,modes:{wysiwyg:!(f.ie&&(8>f.version||f.quirks))},toolbar:"spellchecker,20",
-refresh:function(){var b=a.ui.instances.Scayt.getState();a.scayt&&(b=c.state[a.name]?CKEDITOR.TRISTATE_ON:CKEDITOR.TRISTATE_OFF);a.fire("scaytButtonState",b)},onRender:function(){var c=this;a.on("scaytButtonState",function(a){void 0!==typeof a.data&&c.setState(a.data)})},onMenu:function(){var b=a.scayt;a.getMenuItem("scaytToggle").label=a.lang.scayt[b&&c.state[a.name]?"btn_disable":"btn_enable"];b={scaytToggle:CKEDITOR.TRISTATE_OFF,scaytOptions:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytLangs:b?
-CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytDict:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,scaytAbout:b?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,WSC:a.plugins.wsc?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED};a.config.scayt_uiTabs[0]||delete b.scaytOptions;a.config.scayt_uiTabs[1]||delete b.scaytLangs;a.config.scayt_uiTabs[2]||delete b.scaytDict;return b}});a.contextMenu&&a.addMenuItems&&(a.contextMenu.addListener(function(){var c=a.scayt,b;if(c){var h=c.getSelectionNode();
-if(h=h?h.getAttribute(c.getNodeAttribute()):h)b=d.menuGenerator(a,h,d),c.showBanner("."+a.contextMenu._.definition.panel.className.split(" ").join(" ."))}return b}),a.contextMenu._.onHide=CKEDITOR.tools.override(a.contextMenu._.onHide,function(c){return function(){var b=a.scayt;b&&b.hideBanner();return c.apply(this)}}))},addMenuItems:function(a){var d=this,c=CKEDITOR.plugins.scayt;a.addMenuGroup("scaytButton");var b=a.config.scayt_contextMenuItemsOrder.split("|");if(b&&b.length)for(var f=0;f<b.length;f++)a.addMenuGroup("scayt_"+
-b[f],f-10);b={scaytToggle:{label:a.lang.scayt.btn_enable,group:"scaytButton",onClick:function(){var b=a.scayt;c.state[a.name]=!c.state[a.name];!0===c.state[a.name]?b||c.createScayt(a):b&&c.destroy(a)}},scaytAbout:{label:a.lang.scayt.btn_about,group:"scaytButton",onClick:function(){a.scayt.tabToOpen="about";a.lockSelection();a.openDialog(d.dialogName)}},scaytOptions:{label:a.lang.scayt.btn_options,group:"scaytButton",onClick:function(){a.scayt.tabToOpen="options";a.lockSelection();a.openDialog(d.dialogName)}},
-scaytLangs:{label:a.lang.scayt.btn_langs,group:"scaytButton",onClick:function(){a.scayt.tabToOpen="langs";a.lockSelection();a.openDialog(d.dialogName)}},scaytDict:{label:a.lang.scayt.btn_dictionaries,group:"scaytButton",onClick:function(){a.scayt.tabToOpen="dictionaries";a.lockSelection();a.openDialog(d.dialogName)}}};a.plugins.wsc&&(b.WSC={label:a.lang.wsc.toolbar,group:"scaytButton",onClick:function(){var c=CKEDITOR.plugins.scayt,b=a.scayt,d=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.container.getText():
-a.document.getBody().getText();(d=d.replace(/\s/g,""))?(b&&(c.state[a.name]&&b.setMarkupPaused)&&b.setMarkupPaused(!0),a.lockSelection(),a.execCommand("checkspell")):alert("Nothing to check!")}});a.addMenuItems(b)},bindEvents:function(a){var d=CKEDITOR.plugins.scayt,c=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE;CKEDITOR.on("dialogDefinition",function(a){if("scaytDialog"===a.data.name)a.data.definition.dialog.on("cancel",function(){return!1},this,null,-1)});var b=function(){a.scayt&&d.destroy(a)},
-f=function(){d.state[a.name]&&!a.readOnly&&d.createScayt(a)},g=function(){c?(a.on("blur",b),a.on("focus",f),a.focusManager.hasFocus&&f()):f()};a.on("contentDom",g);a.on("beforeCommandExec",function(c){if(c.data.name in d.options.disablingCommandExec&&"wysiwyg"==a.mode){if(c=a.scayt)d.destroy(a),a.fire("scaytButtonState",CKEDITOR.TRISTATE_DISABLED)}else if("bold"===c.data.name||"italic"===c.data.name||"underline"===c.data.name||"strike"===c.data.name||"subscript"===c.data.name||"superscript"===c.data.name)if(c=
-a.scayt)c.removeMarkupInSelectionNode(),c.fire("startSpellCheck")});a.on("beforeSetMode",function(c){if("source"==c.data&&(c=a.scayt))d.destroy(a),a.fire("scaytButtonState",CKEDITOR.TRISTATE_DISABLED)});a.on("afterCommandExec",function(c){var b;if("wysiwyg"==a.mode&&("undo"==c.data.name||"redo"==c.data.name))(b=a.scayt)&&setTimeout(function(){b.fire("startSpellCheck")},250)});a.on("readOnly",function(c){var b;c&&(b=a.scayt,!0===c.editor.readOnly?b&&b.fire("removeMarkupInDocument",{}):b?b.fire("startSpellCheck"):
-"wysiwyg"==c.editor.mode&&!0===d.state[c.editor.name]&&(d.createScayt(a),c.editor.fire("scaytButtonState",CKEDITOR.TRISTATE_ON)))});a.on("beforeDestroy",b);a.on("setData",function(){b();a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE&&g()},this,null,50);a.on("insertElement",function(){var c=a.scayt;c&&(c.removeMarkupInSelectionNode(),c.fire("startSpellCheck"))},this,null,50);a.on("insertHtml",function(){var c=a.scayt;c&&(c.removeMarkupInSelectionNode(),c.fire("startSpellCheck"))},this,null,50);a.on("scaytDialogShown",
-function(c){c.data.selectPage(a.scayt.tabToOpen)})},parseConfig:function(a){var d=CKEDITOR.plugins.scayt;d.replaceOldOptionsNames(a.config);"boolean"!==typeof a.config.scayt_autoStartup&&(a.config.scayt_autoStartup=!1);d.state[a.name]=a.config.scayt_autoStartup;a.config.scayt_contextCommands||(a.config.scayt_contextCommands="ignore|ignoreall|add");a.config.scayt_contextMenuItemsOrder||(a.config.scayt_contextMenuItemsOrder="suggest|moresuggest|control");a.config.scayt_sLang||(a.config.scayt_sLang=
-"en_US");if(void 0===a.config.scayt_maxSuggestions||"number"!=typeof a.config.scayt_maxSuggestions||0>a.config.scayt_maxSuggestions)a.config.scayt_maxSuggestions=5;if(void 0===a.config.scayt_customDictionaryIds||"string"!==typeof a.config.scayt_customDictionaryIds)a.config.scayt_customDictionaryIds="";if(void 0===a.config.scayt_userDictionaryName||"string"!==typeof a.config.scayt_userDictionaryName)a.config.scayt_userDictionaryName=null;if("string"===typeof a.config.scayt_uiTabs&&3===a.config.scayt_uiTabs.split(",").length){var c=
-[],b=[];a.config.scayt_uiTabs=a.config.scayt_uiTabs.split(",");CKEDITOR.tools.search(a.config.scayt_uiTabs,function(a){if(Number(a)===1||Number(a)===0){b.push(true);c.push(Number(a))}else b.push(false)});a.config.scayt_uiTabs=null===CKEDITOR.tools.search(b,!1)?c:[1,1,1]}else a.config.scayt_uiTabs=[1,1,1];"string"!=typeof a.config.scayt_serviceProtocol&&(a.config.scayt_serviceProtocol=null);"string"!=typeof a.config.scayt_serviceHost&&(a.config.scayt_serviceHost=null);"string"!=typeof a.config.scayt_servicePort&&
-(a.config.scayt_servicePort=null);"string"!=typeof a.config.scayt_servicePath&&(a.config.scayt_servicePath=null);a.config.scayt_moreSuggestions||(a.config.scayt_moreSuggestions="on");"string"!==typeof a.config.scayt_customerId&&(a.config.scayt_customerId="1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2");"string"!==typeof a.config.scayt_srcUrl&&(d=document.location.protocol,d=-1!=d.search(/https?:/)?d:"http:",a.config.scayt_srcUrl=d+"//svc.webspellchecker.net/spellcheck31/lf/scayt3/ckscayt/ckscayt.js");
-"boolean"!==typeof CKEDITOR.config.scayt_handleCheckDirty&&(CKEDITOR.config.scayt_handleCheckDirty=!0);"boolean"!==typeof CKEDITOR.config.scayt_handleUndoRedo&&(CKEDITOR.config.scayt_handleUndoRedo=!0)},addRule:function(a){var d=a.dataProcessor,c=d&&d.htmlFilter,b=a._.elementsPath&&a._.elementsPath.filters,d=d&&d.dataFilter,f=a.addRemoveFormatFilter,g=function(c){var b=CKEDITOR.plugins.scayt;if(a.scayt&&c.hasAttribute(b.options.data_attribute_name))return!1},e=function(c){var b=CKEDITOR.plugins.scayt,
-d=!0;a.scayt&&c.hasAttribute(b.options.data_attribute_name)&&(d=!1);return d};b&&b.push(g);d&&d.addRules({elements:{span:function(c){var b=CKEDITOR.plugins.scayt;b&&(b.state[a.name]&&c.classes&&CKEDITOR.tools.search(c.classes,b.options.misspelled_word_class))&&(c.classes&&c.parent.type===CKEDITOR.NODE_DOCUMENT_FRAGMENT?(delete c.attributes.style,delete c.name):delete c.classes[CKEDITOR.tools.indexOf(c.classes,b.options.misspelled_word_class)]);return c}}});c&&c.addRules({elements:{span:function(c){var b=
-CKEDITOR.plugins.scayt;b&&(b.state[a.name]&&c.hasClass(b.options.misspelled_word_class)&&c.attributes[b.options.data_attribute_name])&&(c.removeClass(b.options.misspelled_word_class),delete c.attributes[b.options.data_attribute_name],delete c.name);return c}}});f&&f.call(a,e)},scaytMenuDefinition:function(a){var d=this,a=a.scayt;return{scayt_ignore:{label:a.getLocal("btn_ignore"),group:"scayt_control",order:1,exec:function(a){a.scayt.ignoreWord()}},scayt_ignoreall:{label:a.getLocal("btn_ignoreAll"),
-group:"scayt_control",order:2,exec:function(a){a.scayt.ignoreAllWords()}},scayt_add:{label:a.getLocal("btn_addWord"),group:"scayt_control",order:3,exec:function(a){var b=a.scayt;setTimeout(function(){b.addWordToUserDictionary()},10)}},option:{label:a.getLocal("btn_options"),group:"scayt_control",order:4,exec:function(a){a.scayt.tabToOpen="options";a.lockSelection();a.openDialog(d.dialogName)},verification:function(a){return 1==a.config.scayt_uiTabs[0]?!0:!1}},language:{label:a.getLocal("btn_langs"),
-group:"scayt_control",order:5,exec:function(a){a.scayt.tabToOpen="langs";a.lockSelection();a.openDialog(d.dialogName)},verification:function(a){return 1==a.config.scayt_uiTabs[1]?!0:!1}},dictionary:{label:a.getLocal("btn_dictionaries"),group:"scayt_control",order:6,exec:function(a){a.scayt.tabToOpen="dictionaries";a.lockSelection();a.openDialog(d.dialogName)},verification:function(a){return 1==a.config.scayt_uiTabs[2]?!0:!1}},about:{label:a.getLocal("btn_about"),group:"scayt_control",order:7,exec:function(a){a.scayt.tabToOpen=
-"about";a.lockSelection();a.openDialog(d.dialogName)}}}},buildSuggestionMenuItems:function(a,d){var c={},b={},f=a.scayt;if(0<d.length&&"no_any_suggestions"!==d[0])for(var g=0;g<d.length;g++){var e="scayt_suggest_"+CKEDITOR.plugins.scayt.suggestions[g].replace(" ","_");a.addCommand(e,this.createCommand(CKEDITOR.plugins.scayt.suggestions[g]));g<a.config.scayt_maxSuggestions?(a.addMenuItem(e,{label:d[g],command:e,group:"scayt_suggest",order:g+1}),c[e]=CKEDITOR.TRISTATE_OFF):(a.addMenuItem(e,{label:d[g],
-command:e,group:"scayt_moresuggest",order:g+1}),b[e]=CKEDITOR.TRISTATE_OFF,"on"===a.config.scayt_moreSuggestions&&(a.addMenuItem("scayt_moresuggest",{label:f.getLocal("btn_moreSuggestions"),group:"scayt_moresuggest",order:10,getItems:function(){return b}}),c.scayt_moresuggest=CKEDITOR.TRISTATE_OFF))}else c.no_scayt_suggest=CKEDITOR.TRISTATE_DISABLED,a.addCommand("no_scayt_suggest",{exec:function(){}}),a.addMenuItem("no_scayt_suggest",{label:f.getLocal("btn_noSuggestions")||"no_scayt_suggest",command:"no_scayt_suggest",
-group:"scayt_suggest",order:0});return c},menuGenerator:function(a,d){var c=a.scayt,b=this.scaytMenuDefinition(a),f={},g=a.config.scayt_contextCommands.split("|");c.fire("getSuggestionsList",{lang:c.getLang(),word:d});f=this.buildSuggestionMenuItems(a,CKEDITOR.plugins.scayt.suggestions);if("off"==a.config.scayt_contextCommands)return f;for(var e in b)-1==CKEDITOR.tools.indexOf(g,e.replace("scayt_",""))&&"all"!=a.config.scayt_contextCommands||(f[e]=CKEDITOR.TRISTATE_OFF,"function"===typeof b[e].verification&&
-!b[e].verification(a)&&delete f[e],a.addCommand(e,{exec:b[e].exec}),a.addMenuItem(e,{label:a.lang.scayt[b[e].label]||b[e].label,command:e,group:b[e].group,order:b[e].order}));return f},createCommand:function(a){return{exec:function(d){d.scayt.replaceSelectionNode({word:a})}}}});
-CKEDITOR.plugins.scayt={state:{},suggestions:[],loadingHelper:{loadOrder:[]},isLoading:!1,options:{disablingCommandExec:{source:!0,newpage:!0,templates:!0},data_attribute_name:"data-scayt-word",misspelled_word_class:"scayt-misspell-word"},backCompatibilityMap:{scayt_service_protocol:"scayt_serviceProtocol",scayt_service_host:"scayt_serviceHost",scayt_service_port:"scayt_servicePort",scayt_service_path:"scayt_servicePath",scayt_customerid:"scayt_customerId"},replaceOldOptionsNames:function(a){for(var d in a)d in
-this.backCompatibilityMap&&(a[this.backCompatibilityMap[d]]=a[d],delete a[d])},createScayt:function(a){var d=this;this.loadScaytLibrary(a,function(a){var b={lang:a.config.scayt_sLang,container:"BODY"==a.editable().$.nodeName?a.document.getWindow().$.frameElement:a.editable().$,customDictionary:a.config.scayt_customDictionaryIds,userDictionaryName:a.config.scayt_userDictionaryName,localization:a.langCode,customer_id:a.config.scayt_customerId,data_attribute_name:d.options.data_attribute_name,misspelled_word_class:d.options.misspelled_word_class};
-a.config.scayt_serviceProtocol&&(b.service_protocol=a.config.scayt_serviceProtocol);a.config.scayt_serviceHost&&(b.service_host=a.config.scayt_serviceHost);a.config.scayt_servicePort&&(b.service_port=a.config.scayt_servicePort);a.config.scayt_servicePath&&(b.service_path=a.config.scayt_servicePath);b=new SCAYT.CKSCAYT(b,function(){},function(){});b.subscribe("suggestionListSend",function(a){for(var b={},c=[],d=0;d<a.suggestionList.length;d++)if(!b[a.suggestionList[d]]){b[a.suggestionList[d]]=a.suggestionList[d];
-c.push(a.suggestionList[d])}CKEDITOR.plugins.scayt.suggestions=c});a.scayt=b;a.fire("scaytButtonState",a.readOnly?CKEDITOR.TRISTATE_DISABLED:CKEDITOR.TRISTATE_ON)})},destroy:function(a){a.scayt&&a.scayt.destroy();delete a.scayt;a.fire("scaytButtonState",CKEDITOR.TRISTATE_OFF)},loadScaytLibrary:function(a,d){var c=this;"undefined"===typeof window.SCAYT||"function"!==typeof window.SCAYT.CKSCAYT?(this.loadingHelper[a.name]=d,this.loadingHelper.loadOrder.push(a.name),CKEDITOR.scriptLoader.load(a.config.scayt_srcUrl,
-function(){var a;CKEDITOR.fireOnce("scaytReady");for(var d=0;d<c.loadingHelper.loadOrder.length;d++){a=c.loadingHelper.loadOrder[d];if("function"===typeof c.loadingHelper[a])c.loadingHelper[a](CKEDITOR.instances[a]);delete c.loadingHelper[a]}c.loadingHelper.loadOrder=[]})):window.SCAYT&&"function"===typeof window.SCAYT.CKSCAYT&&(CKEDITOR.fireOnce("scaytReady"),a.scayt||"function"===typeof d&&d(a))}};
-CKEDITOR.on("scaytReady",function(){if(!0===CKEDITOR.config.scayt_handleCheckDirty){var a=CKEDITOR.editor.prototype;a.checkDirty=CKEDITOR.tools.override(a.checkDirty,function(a){return function(){var b=null,d=this.scayt;if(!CKEDITOR.plugins.scayt||!CKEDITOR.plugins.scayt.state[this.name]||!this.scayt)b=a.call(this);else if(b="ready"==this.status)var g=d.removeMarkupFromString(this.getSnapshot()),d=d.removeMarkupFromString(this._.previousValue),b=b&&d!==g;return b}});a.resetDirty=CKEDITOR.tools.override(a.resetDirty,
-function(a){return function(){var b=this.scayt;!CKEDITOR.plugins.scayt||!CKEDITOR.plugins.scayt.state[this.name]||!this.scayt?a.call(this):this._.previousValue=b.removeMarkupFromString(this.getSnapshot())}})}if(!0===CKEDITOR.config.scayt_handleUndoRedo){var a=CKEDITOR.plugins.undo.Image.prototype,d="function"==typeof a.equalsContent?"equalsContent":"equals";a[d]=CKEDITOR.tools.override(a[d],function(a){return function(b){var d=b.editor.scayt,g=this.contents,e=b.contents,h=null;CKEDITOR.plugins.scayt&&
-(CKEDITOR.plugins.scayt.state[b.editor.name]&&b.editor.scayt)&&(this.contents=d.removeMarkupFromString(g)||"",b.contents=d.removeMarkupFromString(e)||"");h=a.apply(this,arguments);this.contents=g;b.contents=e;return h}})}});(function(){CKEDITOR.plugins.add("stylescombo",{requires:"richcombo",init:function(c){var j=c.config,g=c.lang.stylescombo,f={},i=[],k=[];c.on("stylesSet",function(b){if(b=b.data.styles){for(var a,h,d,e=0,l=b.length;e<l;e++)if(a=b[e],!(c.blockless&&a.element in CKEDITOR.dtd.$block)&&(h=a.name,a=new CKEDITOR.style(a),!c.filter.customConfig||c.filter.check(a)))a._name=h,a._.enterMode=j.enterMode,a._.type=d=a.assignedTo||a.type,a._.weight=e+1E3*(d==CKEDITOR.STYLE_OBJECT?1:d==CKEDITOR.STYLE_BLOCK?2:3),
-f[h]=a,i.push(a),k.push(a);i.sort(function(a,b){return a._.weight-b._.weight})}});c.ui.addRichCombo("Styles",{label:g.label,title:g.panelTitle,toolbar:"styles,10",allowedContent:k,panel:{css:[CKEDITOR.skin.getPath("editor")].concat(j.contentsCss),multiSelect:!0,attributes:{"aria-label":g.panelTitle}},init:function(){var b,a,c,d,e,f;e=0;for(f=i.length;e<f;e++)b=i[e],a=b._name,d=b._.type,d!=c&&(this.startGroup(g["panelTitle"+d]),c=d),this.add(a,b.type==CKEDITOR.STYLE_OBJECT?a:b.buildPreview(),a);this.commit()},
-onClick:function(b){c.focus();c.fire("saveSnapshot");var b=f[b],a=c.elementPath();c[b.checkActive(a,c)?"removeStyle":"applyStyle"](b);c.fire("saveSnapshot")},onRender:function(){c.on("selectionChange",function(b){for(var a=this.getValue(),b=b.data.path.elements,h=0,d=b.length,e;h<d;h++){e=b[h];for(var g in f)if(f[g].checkElementRemovable(e,!0,c)){g!=a&&this.setValue(g);return}}this.setValue("")},this)},onOpen:function(){var b=c.getSelection().getSelectedElement(),b=c.elementPath(b),a=[0,0,0,0];this.showAll();
-this.unmarkAll();for(var h in f){var d=f[h],e=d._.type;d.checkApplicable(b,c,c.activeFilter)?a[e]++:this.hideItem(h);d.checkActive(b,c)&&this.mark(h)}a[CKEDITOR.STYLE_BLOCK]||this.hideGroup(g["panelTitle"+CKEDITOR.STYLE_BLOCK]);a[CKEDITOR.STYLE_INLINE]||this.hideGroup(g["panelTitle"+CKEDITOR.STYLE_INLINE]);a[CKEDITOR.STYLE_OBJECT]||this.hideGroup(g["panelTitle"+CKEDITOR.STYLE_OBJECT])},refresh:function(){var b=c.elementPath();if(b){for(var a in f)if(f[a].checkApplicable(b,c,c.activeFilter))return;
-this.setState(CKEDITOR.TRISTATE_DISABLED)}},reset:function(){f={};i=[]}})}})})();(function(){function i(c){return{editorFocus:!1,canUndo:!1,modes:{wysiwyg:1},exec:function(d){if(d.editable().hasFocus){var e=d.getSelection(),b;if(b=(new CKEDITOR.dom.elementPath(e.getCommonAncestor(),e.root)).contains({td:1,th:1},1)){var e=d.createRange(),a=CKEDITOR.tools.tryThese(function(){var a=b.getParent().$.cells[b.$.cellIndex+(c?-1:1)];a.parentNode.parentNode;return a},function(){var a=b.getParent(),a=a.getAscendant("table").$.rows[a.$.rowIndex+(c?-1:1)];return a.cells[c?a.cells.length-1:
-0]});if(!a&&!c){for(var f=b.getAscendant("table").$,a=b.getParent().$.cells,f=new CKEDITOR.dom.element(f.insertRow(-1),d.document),g=0,h=a.length;g<h;g++)f.append((new CKEDITOR.dom.element(a[g],d.document)).clone(!1,!1)).appendBogus();e.moveToElementEditStart(f)}else if(a)a=new CKEDITOR.dom.element(a),e.moveToElementEditStart(a),(!e.checkStartOfBlock()||!e.checkEndOfBlock())&&e.selectNodeContents(a);else return!0;e.select(!0);return!0}}return!1}}}var h={editorFocus:!1,modes:{wysiwyg:1,source:1}},
-g={exec:function(c){c.container.focusNext(!0,c.tabIndex)}},f={exec:function(c){c.container.focusPrevious(!0,c.tabIndex)}};CKEDITOR.plugins.add("tab",{init:function(c){for(var d=!1!==c.config.enableTabKeyTools,e=c.config.tabSpaces||0,b="";e--;)b+=" ";if(b)c.on("key",function(a){9==a.data.keyCode&&(c.insertHtml(b),a.cancel())});if(d)c.on("key",function(a){(9==a.data.keyCode&&c.execCommand("selectNextCell")||a.data.keyCode==CKEDITOR.SHIFT+9&&c.execCommand("selectPreviousCell"))&&a.cancel()});c.addCommand("blur",
-CKEDITOR.tools.extend(g,h));c.addCommand("blurBack",CKEDITOR.tools.extend(f,h));c.addCommand("selectNextCell",i());c.addCommand("selectPreviousCell",i(!0))}})})();
-CKEDITOR.dom.element.prototype.focusNext=function(i,h){var g=void 0===h?this.getTabIndex():h,f,c,d,e,b,a;if(0>=g)for(b=this.getNextSourceNode(i,CKEDITOR.NODE_ELEMENT);b;){if(b.isVisible()&&0===b.getTabIndex()){d=b;break}b=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT)}else for(b=this.getDocument().getBody().getFirst();b=b.getNextSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!f)if(!c&&b.equals(this)){if(c=!0,i){if(!(b=b.getNextSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;f=1}}else c&&!this.contains(b)&&
-(f=1);if(b.isVisible()&&!(0>(a=b.getTabIndex()))){if(f&&a==g){d=b;break}a>g&&(!d||!e||a<e)?(d=b,e=a):!d&&0===a&&(d=b,e=a)}}d&&d.focus()};
-CKEDITOR.dom.element.prototype.focusPrevious=function(i,h){for(var g=void 0===h?this.getTabIndex():h,f,c,d,e=0,b,a=this.getDocument().getBody().getLast();a=a.getPreviousSourceNode(!1,CKEDITOR.NODE_ELEMENT);){if(!f)if(!c&&a.equals(this)){if(c=!0,i){if(!(a=a.getPreviousSourceNode(!0,CKEDITOR.NODE_ELEMENT)))break;f=1}}else c&&!this.contains(a)&&(f=1);if(a.isVisible()&&!(0>(b=a.getTabIndex())))if(0>=g){if(f&&0===b){d=a;break}b>e&&(d=a,e=b)}else{if(f&&b==g){d=a;break}if(b<g&&(!d||b>e))d=a,e=b}}d&&d.focus()};CKEDITOR.plugins.add("table",{requires:"dialog",init:function(a){function e(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,f){this.setState(f.contains("table",1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}if(!a.blockless){var c=a.lang.table;a.addCommand("table",new CKEDITOR.dialogCommand("table",{context:"table",allowedContent:"table{width,height}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];"+(a.plugins.dialogadvtab?
-"table"+a.plugins.dialogadvtab.allowedContent():""),requiredContent:"table",contentTransformations:[["table{width}: sizeToStyle","table[width]: sizeToAttribute"]]}));a.addCommand("tableProperties",new CKEDITOR.dialogCommand("tableProperties",e()));a.addCommand("tableDelete",e({exec:function(a){var b=a.elementPath().contains("table",1);if(b){var d=b.getParent(),c=a.editable();1==d.getChildCount()&&(!d.is("td","th")&&!d.equals(c))&&(b=d);a=a.createRange();a.moveToPosition(b,CKEDITOR.POSITION_BEFORE_START);
-b.remove();a.select()}}}));a.ui.addButton&&a.ui.addButton("Table",{label:c.toolbar,command:"table",toolbar:"insert,30"});CKEDITOR.dialog.add("table",this.path+"dialogs/table.js");CKEDITOR.dialog.add("tableProperties",this.path+"dialogs/table.js");a.addMenuItems&&a.addMenuItems({table:{label:c.menu,command:"tableProperties",group:"table",order:5},tabledelete:{label:c.deleteTable,command:"tableDelete",group:"table",order:1}});a.on("doubleclick",function(a){a.data.element.is("table")&&(a.data.dialog=
-"tableProperties")});a.contextMenu&&a.contextMenu.addListener(function(){return{tabledelete:CKEDITOR.TRISTATE_OFF,table:CKEDITOR.TRISTATE_OFF}})}}});(function(){function p(e){function d(a){!(0<b.length)&&(a.type==CKEDITOR.NODE_ELEMENT&&y.test(a.getName())&&!a.getCustomData("selected_cell"))&&(CKEDITOR.dom.element.setMarker(c,a,"selected_cell",!0),b.push(a))}for(var e=e.getRanges(),b=[],c={},a=0;a<e.length;a++){var f=e[a];if(f.collapsed)f=f.getCommonAncestor(),(f=f.getAscendant("td",!0)||f.getAscendant("th",!0))&&b.push(f);else{var f=new CKEDITOR.dom.walker(f),g;for(f.guard=d;g=f.next();)if(g.type!=CKEDITOR.NODE_ELEMENT||!g.is(CKEDITOR.dtd.table))if((g=
-g.getAscendant("td",!0)||g.getAscendant("th",!0))&&!g.getCustomData("selected_cell"))CKEDITOR.dom.element.setMarker(c,g,"selected_cell",!0),b.push(g)}}CKEDITOR.dom.element.clearAllMarkers(c);return b}function o(e,d){for(var b=p(e),c=b[0],a=c.getAscendant("table"),c=c.getDocument(),f=b[0].getParent(),g=f.$.rowIndex,b=b[b.length-1],h=b.getParent().$.rowIndex+b.$.rowSpan-1,b=new CKEDITOR.dom.element(a.$.rows[h]),g=d?g:h,f=d?f:b,b=CKEDITOR.tools.buildTableMap(a),a=b[g],g=d?b[g-1]:b[g+1],b=b[0].length,
-c=c.createElement("tr"),h=0;a[h]&&h<b;h++){var i;1<a[h].rowSpan&&g&&a[h]==g[h]?(i=a[h],i.rowSpan+=1):(i=(new CKEDITOR.dom.element(a[h])).clone(),i.removeAttribute("rowSpan"),i.appendBogus(),c.append(i),i=i.$);h+=i.colSpan-1}d?c.insertBefore(f):c.insertAfter(f)}function q(e){if(e instanceof CKEDITOR.dom.selection){for(var d=p(e),b=d[0].getAscendant("table"),c=CKEDITOR.tools.buildTableMap(b),e=d[0].getParent().$.rowIndex,d=d[d.length-1],a=d.getParent().$.rowIndex+d.$.rowSpan-1,d=[],f=e;f<=a;f++){for(var g=
-c[f],h=new CKEDITOR.dom.element(b.$.rows[f]),i=0;i<g.length;i++){var j=new CKEDITOR.dom.element(g[i]),l=j.getParent().$.rowIndex;1==j.$.rowSpan?j.remove():(j.$.rowSpan-=1,l==f&&(l=c[f+1],l[i-1]?j.insertAfter(new CKEDITOR.dom.element(l[i-1])):(new CKEDITOR.dom.element(b.$.rows[f+1])).append(j,1)));i+=j.$.colSpan-1}d.push(h)}c=b.$.rows;b=new CKEDITOR.dom.element(c[a+1]||(0<e?c[e-1]:null)||b.$.parentNode);for(f=d.length;0<=f;f--)q(d[f]);return b}e instanceof CKEDITOR.dom.element&&(b=e.getAscendant("table"),
-1==b.$.rows.length?b.remove():e.remove());return null}function r(e,d){for(var b=d?Infinity:0,c=0;c<e.length;c++){var a;a=e[c];for(var f=d,g=a.getParent().$.cells,h=0,i=0;i<g.length;i++){var j=g[i],h=h+(f?1:j.colSpan);if(j==a.$)break}a=h-1;if(d?a<b:a>b)b=a}return b}function k(e,d){for(var b=p(e),c=b[0].getAscendant("table"),a=r(b,1),b=r(b),a=d?a:b,f=CKEDITOR.tools.buildTableMap(c),c=[],b=[],g=f.length,h=0;h<g;h++)c.push(f[h][a]),b.push(d?f[h][a-1]:f[h][a+1]);for(h=0;h<g;h++)c[h]&&(1<c[h].colSpan&&
-b[h]==c[h]?(a=c[h],a.colSpan+=1):(a=(new CKEDITOR.dom.element(c[h])).clone(),a.removeAttribute("colSpan"),a.appendBogus(),a[d?"insertBefore":"insertAfter"].call(a,new CKEDITOR.dom.element(c[h])),a=a.$),h+=a.rowSpan-1)}function u(e,d){var b=e.getStartElement();if(b=b.getAscendant("td",1)||b.getAscendant("th",1)){var c=b.clone();c.appendBogus();d?c.insertBefore(b):c.insertAfter(b)}}function t(e){if(e instanceof CKEDITOR.dom.selection){var e=p(e),d=e[0]&&e[0].getAscendant("table"),b;a:{var c=0;b=e.length-
-1;for(var a={},f,g;f=e[c++];)CKEDITOR.dom.element.setMarker(a,f,"delete_cell",!0);for(c=0;f=e[c++];)if((g=f.getPrevious())&&!g.getCustomData("delete_cell")||(g=f.getNext())&&!g.getCustomData("delete_cell")){CKEDITOR.dom.element.clearAllMarkers(a);b=g;break a}CKEDITOR.dom.element.clearAllMarkers(a);g=e[0].getParent();(g=g.getPrevious())?b=g.getLast():(g=e[b].getParent(),b=(g=g.getNext())?g.getChild(0):null)}for(g=e.length-1;0<=g;g--)t(e[g]);b?m(b,!0):d&&d.remove()}else e instanceof CKEDITOR.dom.element&&
-(d=e.getParent(),1==d.getChildCount()?d.remove():e.remove())}function m(e,d){var b=e.getDocument(),c=CKEDITOR.document;CKEDITOR.env.ie&&10==CKEDITOR.env.version&&(c.focus(),b.focus());b=new CKEDITOR.dom.range(b);if(!b["moveToElementEdit"+(d?"End":"Start")](e))b.selectNodeContents(e),b.collapse(d?!1:!0);b.select(!0)}function v(e,d,b){e=e[d];if("undefined"==typeof b)return e;for(d=0;e&&d<e.length;d++){if(b.is&&e[d]==b.$)return d;if(d==b)return new CKEDITOR.dom.element(e[d])}return b.is?-1:null}function s(e,
-d,b){var c=p(e),a;if((d?1!=c.length:2>c.length)||(a=e.getCommonAncestor())&&a.type==CKEDITOR.NODE_ELEMENT&&a.is("table"))return!1;var f,e=c[0];a=e.getAscendant("table");var g=CKEDITOR.tools.buildTableMap(a),h=g.length,i=g[0].length,j=e.getParent().$.rowIndex,l=v(g,j,e);if(d){var n;try{var m=parseInt(e.getAttribute("rowspan"),10)||1;f=parseInt(e.getAttribute("colspan"),10)||1;n=g["up"==d?j-m:"down"==d?j+m:j]["left"==d?l-f:"right"==d?l+f:l]}catch(z){return!1}if(!n||e.$==n)return!1;c["up"==d||"left"==
-d?"unshift":"push"](new CKEDITOR.dom.element(n))}for(var d=e.getDocument(),o=j,m=n=0,q=!b&&new CKEDITOR.dom.documentFragment(d),s=0,d=0;d<c.length;d++){f=c[d];var k=f.getParent(),t=f.getFirst(),r=f.$.colSpan,u=f.$.rowSpan,k=k.$.rowIndex,w=v(g,k,f),s=s+r*u,m=Math.max(m,w-l+r);n=Math.max(n,k-j+u);if(!b){r=f;(u=r.getBogus())&&u.remove();r.trim();if(f.getChildren().count()){if(k!=o&&t&&(!t.isBlockBoundary||!t.isBlockBoundary({br:1})))(o=q.getLast(CKEDITOR.dom.walker.whitespaces(!0)))&&(!o.is||!o.is("br"))&&
-q.append("br");f.moveChildren(q)}d?f.remove():f.setHtml("")}o=k}if(b)return n*m==s;q.moveChildren(e);e.appendBogus();m>=i?e.removeAttribute("rowSpan"):e.$.rowSpan=n;n>=h?e.removeAttribute("colSpan"):e.$.colSpan=m;b=new CKEDITOR.dom.nodeList(a.$.rows);c=b.count();for(d=c-1;0<=d;d--)a=b.getItem(d),a.$.cells.length||(a.remove(),c++);return e}function w(e,d){var b=p(e);if(1<b.length)return!1;if(d)return!0;var b=b[0],c=b.getParent(),a=c.getAscendant("table"),f=CKEDITOR.tools.buildTableMap(a),g=c.$.rowIndex,
-h=v(f,g,b),i=b.$.rowSpan,j;if(1<i){j=Math.ceil(i/2);for(var i=Math.floor(i/2),c=g+j,a=new CKEDITOR.dom.element(a.$.rows[c]),f=v(f,c),l,c=b.clone(),g=0;g<f.length;g++)if(l=f[g],l.parentNode==a.$&&g>h){c.insertBefore(new CKEDITOR.dom.element(l));break}else l=null;l||a.append(c)}else{i=j=1;a=c.clone();a.insertAfter(c);a.append(c=b.clone());l=v(f,g);for(h=0;h<l.length;h++)l[h].rowSpan++}c.appendBogus();b.$.rowSpan=j;c.$.rowSpan=i;1==j&&b.removeAttribute("rowSpan");1==i&&c.removeAttribute("rowSpan");return c}
-function x(e,d){var b=p(e);if(1<b.length)return!1;if(d)return!0;var b=b[0],c=b.getParent(),a=c.getAscendant("table"),a=CKEDITOR.tools.buildTableMap(a),f=v(a,c.$.rowIndex,b),g=b.$.colSpan;if(1<g)c=Math.ceil(g/2),g=Math.floor(g/2);else{for(var g=c=1,h=[],i=0;i<a.length;i++){var j=a[i];h.push(j[f]);1<j[f].rowSpan&&(i+=j[f].rowSpan-1)}for(a=0;a<h.length;a++)h[a].colSpan++}a=b.clone();a.insertAfter(b);a.appendBogus();b.$.colSpan=c;a.$.colSpan=g;1==c&&b.removeAttribute("colSpan");1==g&&a.removeAttribute("colSpan");
-return a}var y=/^(?:td|th)$/;CKEDITOR.plugins.tabletools={requires:"table,dialog,contextmenu",init:function(e){function d(a){return CKEDITOR.tools.extend(a||{},{contextSensitive:1,refresh:function(a,b){this.setState(b.contains({td:1,th:1},1)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)}})}function b(a,b){var c=e.addCommand(a,b);e.addFeature(c)}var c=e.lang.table;b("cellProperties",new CKEDITOR.dialogCommand("cellProperties",d({allowedContent:"td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]",
-requiredContent:"table"})));CKEDITOR.dialog.add("cellProperties",this.path+"dialogs/tableCell.js");b("rowDelete",d({requiredContent:"table",exec:function(a){a=a.getSelection();m(q(a))}}));b("rowInsertBefore",d({requiredContent:"table",exec:function(a){a=a.getSelection();o(a,!0)}}));b("rowInsertAfter",d({requiredContent:"table",exec:function(a){a=a.getSelection();o(a)}}));b("columnDelete",d({requiredContent:"table",exec:function(a){for(var a=a.getSelection(),a=p(a),b=a[0],c=a[a.length-1],a=b.getAscendant("table"),
-d=CKEDITOR.tools.buildTableMap(a),e,j,l=[],n=0,o=d.length;n<o;n++)for(var k=0,q=d[n].length;k<q;k++)d[n][k]==b.$&&(e=k),d[n][k]==c.$&&(j=k);for(n=e;n<=j;n++)for(k=0;k<d.length;k++)c=d[k],b=new CKEDITOR.dom.element(a.$.rows[k]),c=new CKEDITOR.dom.element(c[n]),c.$&&(1==c.$.colSpan?c.remove():c.$.colSpan-=1,k+=c.$.rowSpan-1,b.$.cells.length||l.push(b));j=a.$.rows[0]&&a.$.rows[0].cells;e=new CKEDITOR.dom.element(j[e]||(e?j[e-1]:a.$.parentNode));l.length==o&&a.remove();e&&m(e,!0)}}));b("columnInsertBefore",
-d({requiredContent:"table",exec:function(a){a=a.getSelection();k(a,!0)}}));b("columnInsertAfter",d({requiredContent:"table",exec:function(a){a=a.getSelection();k(a)}}));b("cellDelete",d({requiredContent:"table",exec:function(a){a=a.getSelection();t(a)}}));b("cellMerge",d({allowedContent:"td[colspan,rowspan]",requiredContent:"td[colspan,rowspan]",exec:function(a){m(s(a.getSelection()),!0)}}));b("cellMergeRight",d({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){m(s(a.getSelection(),
-"right"),!0)}}));b("cellMergeDown",d({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){m(s(a.getSelection(),"down"),!0)}}));b("cellVerticalSplit",d({allowedContent:"td[rowspan]",requiredContent:"td[rowspan]",exec:function(a){m(w(a.getSelection()))}}));b("cellHorizontalSplit",d({allowedContent:"td[colspan]",requiredContent:"td[colspan]",exec:function(a){m(x(a.getSelection()))}}));b("cellInsertBefore",d({requiredContent:"table",exec:function(a){a=a.getSelection();u(a,!0)}}));
-b("cellInsertAfter",d({requiredContent:"table",exec:function(a){a=a.getSelection();u(a)}}));e.addMenuItems&&e.addMenuItems({tablecell:{label:c.cell.menu,group:"tablecell",order:1,getItems:function(){var a=e.getSelection(),b=p(a);return{tablecell_insertBefore:CKEDITOR.TRISTATE_OFF,tablecell_insertAfter:CKEDITOR.TRISTATE_OFF,tablecell_delete:CKEDITOR.TRISTATE_OFF,tablecell_merge:s(a,null,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_merge_right:s(a,"right",!0)?CKEDITOR.TRISTATE_OFF:
-CKEDITOR.TRISTATE_DISABLED,tablecell_merge_down:s(a,"down",!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_vertical:w(a,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_split_horizontal:x(a,!0)?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED,tablecell_properties:0<b.length?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED}}},tablecell_insertBefore:{label:c.cell.insertBefore,group:"tablecell",command:"cellInsertBefore",order:5},tablecell_insertAfter:{label:c.cell.insertAfter,
-group:"tablecell",command:"cellInsertAfter",order:10},tablecell_delete:{label:c.cell.deleteCell,group:"tablecell",command:"cellDelete",order:15},tablecell_merge:{label:c.cell.merge,group:"tablecell",command:"cellMerge",order:16},tablecell_merge_right:{label:c.cell.mergeRight,group:"tablecell",command:"cellMergeRight",order:17},tablecell_merge_down:{label:c.cell.mergeDown,group:"tablecell",command:"cellMergeDown",order:18},tablecell_split_horizontal:{label:c.cell.splitHorizontal,group:"tablecell",
-command:"cellHorizontalSplit",order:19},tablecell_split_vertical:{label:c.cell.splitVertical,group:"tablecell",command:"cellVerticalSplit",order:20},tablecell_properties:{label:c.cell.title,group:"tablecellproperties",command:"cellProperties",order:21},tablerow:{label:c.row.menu,group:"tablerow",order:1,getItems:function(){return{tablerow_insertBefore:CKEDITOR.TRISTATE_OFF,tablerow_insertAfter:CKEDITOR.TRISTATE_OFF,tablerow_delete:CKEDITOR.TRISTATE_OFF}}},tablerow_insertBefore:{label:c.row.insertBefore,
-group:"tablerow",command:"rowInsertBefore",order:5},tablerow_insertAfter:{label:c.row.insertAfter,group:"tablerow",command:"rowInsertAfter",order:10},tablerow_delete:{label:c.row.deleteRow,group:"tablerow",command:"rowDelete",order:15},tablecolumn:{label:c.column.menu,group:"tablecolumn",order:1,getItems:function(){return{tablecolumn_insertBefore:CKEDITOR.TRISTATE_OFF,tablecolumn_insertAfter:CKEDITOR.TRISTATE_OFF,tablecolumn_delete:CKEDITOR.TRISTATE_OFF}}},tablecolumn_insertBefore:{label:c.column.insertBefore,
-group:"tablecolumn",command:"columnInsertBefore",order:5},tablecolumn_insertAfter:{label:c.column.insertAfter,group:"tablecolumn",command:"columnInsertAfter",order:10},tablecolumn_delete:{label:c.column.deleteColumn,group:"tablecolumn",command:"columnDelete",order:15}});e.contextMenu&&e.contextMenu.addListener(function(a,b,c){return(a=c.contains({td:1,th:1},1))&&!a.isReadOnly()?{tablecell:CKEDITOR.TRISTATE_OFF,tablerow:CKEDITOR.TRISTATE_OFF,tablecolumn:CKEDITOR.TRISTATE_OFF}:null})},getSelectedCells:p};
-CKEDITOR.plugins.add("tabletools",CKEDITOR.plugins.tabletools)})();CKEDITOR.tools.buildTableMap=function(p){for(var p=p.$.rows,o=-1,q=[],r=0;r<p.length;r++){o++;!q[o]&&(q[o]=[]);for(var k=-1,u=0;u<p[r].cells.length;u++){var t=p[r].cells[u];for(k++;q[o][k];)k++;for(var m=isNaN(t.colSpan)?1:t.colSpan,t=isNaN(t.rowSpan)?1:t.rowSpan,v=0;v<t;v++){q[o+v]||(q[o+v]=[]);for(var s=0;s<m;s++)q[o+v][k+s]=p[r].cells[u]}k+=m-1}}return q};(function(){var g=[CKEDITOR.CTRL+90,CKEDITOR.CTRL+89,CKEDITOR.CTRL+CKEDITOR.SHIFT+90],l={8:1,46:1};CKEDITOR.plugins.add("undo",{init:function(a){function b(a){d.enabled&&!1!==a.data.command.canUndo&&d.save()}function c(){d.enabled=a.readOnly?!1:"wysiwyg"==a.mode;d.onChange()}var d=a.undoManager=new e(a),j=d.editingHandler=new i(d),f=a.addCommand("undo",{exec:function(){d.undo()&&(a.selectionChange(),this.fire("afterUndo"))},startDisabled:!0,canUndo:!1}),h=a.addCommand("redo",{exec:function(){d.redo()&&
-(a.selectionChange(),this.fire("afterRedo"))},startDisabled:!0,canUndo:!1});a.setKeystroke([[g[0],"undo"],[g[1],"redo"],[g[2],"redo"]]);d.onChange=function(){f.setState(d.undoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED);h.setState(d.redoable()?CKEDITOR.TRISTATE_OFF:CKEDITOR.TRISTATE_DISABLED)};a.on("beforeCommandExec",b);a.on("afterCommandExec",b);a.on("saveSnapshot",function(a){d.save(a.data&&a.data.contentOnly)});a.on("contentDom",j.attachListeners,j);a.on("instanceReady",function(){a.fire("saveSnapshot")});
-a.on("beforeModeUnload",function(){"wysiwyg"==a.mode&&d.save(!0)});a.on("mode",c);a.on("readOnly",c);a.ui.addButton&&(a.ui.addButton("Undo",{label:a.lang.undo.undo,command:"undo",toolbar:"undo,10"}),a.ui.addButton("Redo",{label:a.lang.undo.redo,command:"redo",toolbar:"undo,20"}));a.resetUndo=function(){d.reset();a.fire("saveSnapshot")};a.on("updateSnapshot",function(){d.currentImage&&d.update()});a.on("lockSnapshot",function(a){a=a.data;d.lock(a&&a.dontUpdate,a&&a.forceUpdate)});a.on("unlockSnapshot",
-d.unlock,d)}});CKEDITOR.plugins.undo={};var e=CKEDITOR.plugins.undo.UndoManager=function(a){this.strokesRecorded=[0,0];this.locked=null;this.previousKeyGroup=-1;this.limit=a.config.undoStackSize||20;this.strokesLimit=25;this.editor=a;this.reset()};e.prototype={type:function(a,b){var c=e.getKeyGroup(a),d=this.strokesRecorded[c]+1,b=b||d>=this.strokesLimit;this.typing||(this.hasUndo=this.typing=!0,this.hasRedo=!1,this.onChange());b?(d=0,this.editor.fire("saveSnapshot")):this.editor.fire("change");this.strokesRecorded[c]=
-d;this.previousKeyGroup=c},keyGroupChanged:function(a){return e.getKeyGroup(a)!=this.previousKeyGroup},reset:function(){this.snapshots=[];this.index=-1;this.currentImage=null;this.hasRedo=this.hasUndo=!1;this.locked=null;this.resetType()},resetType:function(){this.strokesRecorded=[0,0];this.typing=!1;this.previousKeyGroup=-1},refreshState:function(){this.hasUndo=!!this.getNextImage(!0);this.hasRedo=!!this.getNextImage(!1);this.resetType();this.onChange()},save:function(a,b,c){var d=this.editor;if(this.locked||
-"ready"!=d.status||"wysiwyg"!=d.mode)return!1;var e=d.editable();if(!e||"ready"!=e.status)return!1;e=this.snapshots;b||(b=new f(d));if(!1===b.contents)return!1;if(this.currentImage)if(b.equalsContent(this.currentImage)){if(a||b.equalsSelection(this.currentImage))return!1}else!1!==c&&d.fire("change");e.splice(this.index+1,e.length-this.index-1);e.length==this.limit&&e.shift();this.index=e.push(b)-1;this.currentImage=b;!1!==c&&this.refreshState();return!0},restoreImage:function(a){var b=this.editor,
-c;a.bookmarks&&(b.focus(),c=b.getSelection());this.locked={level:999};this.editor.loadSnapshot(a.contents);a.bookmarks?c.selectBookmarks(a.bookmarks):CKEDITOR.env.ie&&(c=this.editor.document.getBody().$.createTextRange(),c.collapse(!0),c.select());this.locked=null;this.index=a.index;this.currentImage=this.snapshots[this.index];this.update();this.refreshState();b.fire("change")},getNextImage:function(a){var b=this.snapshots,c=this.currentImage,d;if(c)if(a)for(d=this.index-1;0<=d;d--){if(a=b[d],!c.equalsContent(a))return a.index=
-d,a}else for(d=this.index+1;d<b.length;d++)if(a=b[d],!c.equalsContent(a))return a.index=d,a;return null},redoable:function(){return this.enabled&&this.hasRedo},undoable:function(){return this.enabled&&this.hasUndo},undo:function(){if(this.undoable()){this.save(!0);var a=this.getNextImage(!0);if(a)return this.restoreImage(a),!0}return!1},redo:function(){if(this.redoable()&&(this.save(!0),this.redoable())){var a=this.getNextImage(!1);if(a)return this.restoreImage(a),!0}return!1},update:function(a){if(!this.locked){a||
-(a=new f(this.editor));for(var b=this.index,c=this.snapshots;0<b&&this.currentImage.equalsContent(c[b-1]);)b-=1;c.splice(b,this.index-b+1,a);this.index=b;this.currentImage=a}},updateSelection:function(a){if(!this.snapshots.length)return!1;var b=this.snapshots,c=b[b.length-1];return c.equalsContent(a)&&!c.equalsSelection(a)?(this.currentImage=b[b.length-1]=a,!0):!1},lock:function(a,b){if(this.locked)this.locked.level++;else if(a)this.locked={level:1};else{var c=null;if(b)c=!0;else{var d=new f(this.editor,
-!0);this.currentImage&&this.currentImage.equalsContent(d)&&(c=d)}this.locked={update:c,level:1}}},unlock:function(){if(this.locked&&!--this.locked.level){var a=this.locked.update;this.locked=null;if(!0===a)this.update();else if(a){var b=new f(this.editor,!0);a.equalsContent(b)||this.update()}}}};e.navigationKeyCodes={37:1,38:1,39:1,40:1,36:1,35:1,33:1,34:1};e.keyGroups={PRINTABLE:0,FUNCTIONAL:1};e.isNavigationKey=function(a){return!!e.navigationKeyCodes[a]};e.getKeyGroup=function(a){var b=e.keyGroups;
-return l[a]?b.FUNCTIONAL:b.PRINTABLE};e.getOppositeKeyGroup=function(a){var b=e.keyGroups;return a==b.FUNCTIONAL?b.PRINTABLE:b.FUNCTIONAL};e.ieFunctionalKeysBug=function(a){return CKEDITOR.env.ie&&e.getKeyGroup(a)==e.keyGroups.FUNCTIONAL};var f=CKEDITOR.plugins.undo.Image=function(a,b){this.editor=a;a.fire("beforeUndoImage");var c=a.getSnapshot();CKEDITOR.env.ie&&c&&(c=c.replace(/\s+data-cke-expando=".*?"/g,""));this.contents=c;b||(this.bookmarks=(c=c&&a.getSelection())&&c.createBookmarks2(!0));a.fire("afterUndoImage")},
-h=/\b(?:href|src|name)="[^"]*?"/gi;f.prototype={equalsContent:function(a){var b=this.contents,a=a.contents;if(CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks))b=b.replace(h,""),a=a.replace(h,"");return b!=a?!1:!0},equalsSelection:function(a){var b=this.bookmarks,a=a.bookmarks;if(b||a){if(!b||!a||b.length!=a.length)return!1;for(var c=0;c<b.length;c++){var d=b[c],e=a[c];if(d.startOffset!=e.startOffset||d.endOffset!=e.endOffset||!CKEDITOR.tools.arrayCompare(d.start,e.start)||!CKEDITOR.tools.arrayCompare(d.end,
-e.end))return!1}}return!0}};var i=CKEDITOR.plugins.undo.NativeEditingHandler=function(a){this.undoManager=a;this.ignoreInputEvent=!1;this.keyEventsStack=new k;this.lastKeydownImage=null};i.prototype={onKeydown:function(a){if(-1<CKEDITOR.tools.indexOf(g,a.data.getKeystroke()))a.data.preventDefault();else{this.keyEventsStack.cleanUp(a);var a=a.data.getKey(),b=this.undoManager;this.keyEventsStack.getLast(a)||this.keyEventsStack.push(a);this.lastKeydownImage=new f(b.editor);if(e.isNavigationKey(a)||this.undoManager.keyGroupChanged(a))if(b.strokesRecorded[0]||
-b.strokesRecorded[1])b.save(!1,this.lastKeydownImage),b.resetType()}},onInput:function(){if(this.ignoreInputEvent)this.ignoreInputEvent=!1;else{var a=this.keyEventsStack.getLast();a||(a=this.keyEventsStack.push(0));this.keyEventsStack.increment(a.keyCode);this.keyEventsStack.getTotalInputs()>=this.undoManager.strokesLimit&&(this.undoManager.type(a.keyCode,!0),this.keyEventsStack.resetInputs())}},onKeyup:function(a){var b=this.undoManager,a=a.data.getKey(),c=this.keyEventsStack.getTotalInputs();this.keyEventsStack.remove(a);
-if(!e.ieFunctionalKeysBug(a)||!this.lastKeydownImage||!this.lastKeydownImage.equalsContent(new f(b.editor,!0)))if(0<c)b.type(a);else if(e.isNavigationKey(a))this.onNavigationKey(!0)},onNavigationKey:function(a){var b=this.undoManager;(a||!b.save(!0,null,!1))&&b.updateSelection(new f(b.editor));b.resetType()},ignoreInputEventListener:function(){this.ignoreInputEvent=!0},attachListeners:function(){var a=this.undoManager.editor,b=a.editable(),c=this;b.attachListener(b,"keydown",function(a){c.onKeydown(a);
-if(e.ieFunctionalKeysBug(a.data.getKey()))c.onInput()},null,null,999);b.attachListener(b,CKEDITOR.env.ie?"keypress":"input",c.onInput,c,null,999);b.attachListener(b,"keyup",c.onKeyup,c,null,999);b.attachListener(b,"paste",c.ignoreInputEventListener,c,null,999);b.attachListener(b,"drop",c.ignoreInputEventListener,c,null,999);b.attachListener(b.isInline()?b:a.document.getDocumentElement(),"click",function(){c.onNavigationKey()},null,null,999);b.attachListener(this.undoManager.editor,"blur",function(){c.keyEventsStack.remove(9)},
-null,null,999)}};var k=CKEDITOR.plugins.undo.KeyEventsStack=function(){this.stack=[]};k.prototype={push:function(a){return this.stack[this.stack.push({keyCode:a,inputs:0})-1]},getLastIndex:function(a){if("number"!=typeof a)return this.stack.length-1;for(var b=this.stack.length;b--;)if(this.stack[b].keyCode==a)return b;return-1},getLast:function(a){a=this.getLastIndex(a);return-1!=a?this.stack[a]:null},increment:function(a){this.getLast(a).inputs++},remove:function(a){a=this.getLastIndex(a);-1!=a&&
-this.stack.splice(a,1)},resetInputs:function(a){if("number"==typeof a)this.getLast(a).inputs=0;else for(a=this.stack.length;a--;)this.stack[a].inputs=0},getTotalInputs:function(){for(var a=this.stack.length,b=0;a--;)b+=this.stack[a].inputs;return b},cleanUp:function(a){a=a.data.$;!a.ctrlKey&&!a.metaKey&&this.remove(17);a.shiftKey||this.remove(16);a.altKey||this.remove(18)}}})();CKEDITOR.config.wsc_removeGlobalVariable=!0;
-CKEDITOR.plugins.add("wsc",{requires:"dialog",parseApi:function(a){a.config.wsc_onFinish="function"===typeof a.config.wsc_onFinish?a.config.wsc_onFinish:function(){};a.config.wsc_onClose="function"===typeof a.config.wsc_onClose?a.config.wsc_onClose:function(){}},parseConfig:function(a){a.config.wsc_customerId=a.config.wsc_customerId||CKEDITOR.config.wsc_customerId||"1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk";a.config.wsc_customDictionaryIds=a.config.wsc_customDictionaryIds||
-CKEDITOR.config.wsc_customDictionaryIds||"";a.config.wsc_userDictionaryName=a.config.wsc_userDictionaryName||CKEDITOR.config.wsc_userDictionaryName||"";a.config.wsc_customLoaderScript=a.config.wsc_customLoaderScript||CKEDITOR.config.wsc_customLoaderScript;CKEDITOR.config.wsc_cmd=a.config.wsc_cmd||CKEDITOR.config.wsc_cmd||"spell";CKEDITOR.config.wsc_version=CKEDITOR.version+" | %Rev%"},init:function(a){var b=CKEDITOR.env;this.parseConfig(a);this.parseApi(a);a.addCommand("checkspell",new CKEDITOR.dialogCommand("checkspell")).modes=
-{wysiwyg:!CKEDITOR.env.opera&&!CKEDITOR.env.air&&document.domain==window.location.hostname&&!(b.ie&&(8>b.version||b.quirks))};"undefined"==typeof a.plugins.scayt&&a.ui.addButton&&a.ui.addButton("SpellChecker",{label:a.lang.wsc.toolbar,click:function(a){var b=a.elementMode==CKEDITOR.ELEMENT_MODE_INLINE?a.container.getText():a.document.getBody().getText();(b=b.replace(/\s/g,""))?a.execCommand("checkspell"):alert("Nothing to check!")},toolbar:"spellchecker,10"});CKEDITOR.dialog.add("checkspell",this.path+
-(CKEDITOR.env.ie&&7>=CKEDITOR.env.version?"dialogs/wsc_ie.js":window.postMessage?"dialogs/wsc.js":"dialogs/wsc_ie.js"))}});CKEDITOR.config.plugins='dialogui,dialog,about,a11yhelp,dialogadvtab,basicstyles,bidi,blockquote,clipboard,button,panelbutton,panel,floatpanel,colorbutton,colordialog,templates,menu,contextmenu,div,resize,toolbar,elementspath,enterkey,entities,popup,filebrowser,find,fakeobjects,flash,floatingspace,listblock,richcombo,font,forms,format,horizontalrule,htmlwriter,iframe,wysiwygarea,image,indent,indentblock,indentlist,smiley,justify,menubutton,language,link,list,liststyle,magicline,maximize,newpage,pagebreak,pastetext,pastefromword,preview,print,removeformat,save,selectall,showblocks,showborders,sourcearea,specialchar,scayt,stylescombo,tab,table,tabletools,undo,wsc';CKEDITOR.config.skin='moono';(function() {var setIcons = function(icons, strip) {var path = CKEDITOR.getUrl( 'plugins/' + strip );icons = icons.split( ',' );for ( var i = 0; i < icons.length; i++ )CKEDITOR.skin.icons[ icons[ i ] ] = { path: path, offset: -icons[ ++i ], bgsize : icons[ ++i ] };};if (CKEDITOR.env.hidpi) setIcons('about,0,,bold,24,,italic,48,,strike,72,,subscript,96,,superscript,120,,underline,144,,bidiltr,168,,bidirtl,192,,blockquote,216,,copy-rtl,240,,copy,264,,cut-rtl,288,,cut,312,,paste-rtl,336,,paste,360,,bgcolor,384,,textcolor,408,,templates-rtl,432,,templates,456,,creatediv,480,,find-rtl,504,,find,528,,replace,552,,flash,576,,button,600,,checkbox,624,,form,648,,hiddenfield,672,,imagebutton,696,,radio,720,,select-rtl,744,,select,768,,textarea-rtl,792,,textarea,816,,textfield-rtl,840,,textfield,864,,horizontalrule,888,,iframe,912,,image,936,,indent-rtl,960,,indent,984,,outdent-rtl,1008,,outdent,1032,,smiley,1056,,justifyblock,1080,,justifycenter,1104,,justifyleft,1128,,justifyright,1152,,language,1176,,anchor-rtl,1200,,anchor,1224,,link,1248,,unlink,1272,,bulletedlist-rtl,1296,,bulletedlist,1320,,numberedlist-rtl,1344,,numberedlist,1368,,maximize,1392,,newpage-rtl,1416,,newpage,1440,,pagebreak-rtl,1464,,pagebreak,1488,,pastetext-rtl,1512,,pastetext,1536,,pastefromword-rtl,1560,,pastefromword,1584,,preview-rtl,1608,,preview,1632,,print,1656,,removeformat,1680,,save,1704,,selectall,1728,,showblocks-rtl,1752,,showblocks,1776,,source-rtl,1800,,source,1824,,specialchar,1848,,scayt,1872,,table,1896,,redo-rtl,1920,,redo,1944,,undo-rtl,1968,,undo,1992,,spellchecker,2016,','icons_hidpi.png');else setIcons('about,0,auto,bold,24,auto,italic,48,auto,strike,72,auto,subscript,96,auto,superscript,120,auto,underline,144,auto,bidiltr,168,auto,bidirtl,192,auto,blockquote,216,auto,copy-rtl,240,auto,copy,264,auto,cut-rtl,288,auto,cut,312,auto,paste-rtl,336,auto,paste,360,auto,bgcolor,384,auto,textcolor,408,auto,templates-rtl,432,auto,templates,456,auto,creatediv,480,auto,find-rtl,504,auto,find,528,auto,replace,552,auto,flash,576,auto,button,600,auto,checkbox,624,auto,form,648,auto,hiddenfield,672,auto,imagebutton,696,auto,radio,720,auto,select-rtl,744,auto,select,768,auto,textarea-rtl,792,auto,textarea,816,auto,textfield-rtl,840,auto,textfield,864,auto,horizontalrule,888,auto,iframe,912,auto,image,936,auto,indent-rtl,960,auto,indent,984,auto,outdent-rtl,1008,auto,outdent,1032,auto,smiley,1056,auto,justifyblock,1080,auto,justifycenter,1104,auto,justifyleft,1128,auto,justifyright,1152,auto,language,1176,auto,anchor-rtl,1200,auto,anchor,1224,auto,link,1248,auto,unlink,1272,auto,bulletedlist-rtl,1296,auto,bulletedlist,1320,auto,numberedlist-rtl,1344,auto,numberedlist,1368,auto,maximize,1392,auto,newpage-rtl,1416,auto,newpage,1440,auto,pagebreak-rtl,1464,auto,pagebreak,1488,auto,pastetext-rtl,1512,auto,pastetext,1536,auto,pastefromword-rtl,1560,auto,pastefromword,1584,auto,preview-rtl,1608,auto,preview,1632,auto,print,1656,auto,removeformat,1680,auto,save,1704,auto,selectall,1728,auto,showblocks-rtl,1752,auto,showblocks,1776,auto,source-rtl,1800,auto,source,1824,auto,specialchar,1848,auto,scayt,1872,auto,table,1896,auto,redo-rtl,1920,auto,redo,1944,auto,undo-rtl,1968,auto,undo,1992,auto,spellchecker,2016,auto','icons.png');})();CKEDITOR.lang.languages={"af":1,"sq":1,"ar":1,"eu":1,"bn":1,"bs":1,"bg":1,"ca":1,"zh-cn":1,"zh":1,"hr":1,"cs":1,"da":1,"nl":1,"en":1,"en-au":1,"en-ca":1,"en-gb":1,"eo":1,"et":1,"fo":1,"fi":1,"fr":1,"fr-ca":1,"gl":1,"ka":1,"de":1,"el":1,"gu":1,"he":1,"hi":1,"hu":1,"is":1,"id":1,"it":1,"ja":1,"km":1,"ko":1,"ku":1,"lv":1,"lt":1,"mk":1,"ms":1,"mn":1,"no":1,"nb":1,"fa":1,"pl":1,"pt-br":1,"pt":1,"ro":1,"ru":1,"sr":1,"sr-latn":1,"si":1,"sk":1,"sl":1,"es":1,"sv":1,"tt":1,"th":1,"tr":1,"ug":1,"uk":1,"vi":1,"cy":1};}()); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/config.js b/wqflask/wqflask/static/packages/ckeditor/config.js
deleted file mode 100644
index dd43dc10..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/config.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/**
- * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md or http://ckeditor.com/license
- */
-
-CKEDITOR.editorConfig = function( config ) {
- // Define changes to default configuration here. For example:
- // config.language = 'fr';
- // config.uiColor = '#AADC6E';
-};
diff --git a/wqflask/wqflask/static/packages/ckeditor/contents.css b/wqflask/wqflask/static/packages/ckeditor/contents.css
deleted file mode 100644
index f29bc0a8..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/contents.css
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-
-body
-{
- /* Font */
- font-family: sans-serif, Arial, Verdana, "Trebuchet MS";
- font-size: 12px;
-
- /* Text color */
- color: #333;
-
- /* Remove the background color to make it transparent */
- background-color: #fff;
-
- margin: 20px;
-}
-
-.cke_editable
-{
- font-size: 13px;
- line-height: 1.6;
-}
-
-blockquote
-{
- font-style: italic;
- font-family: Georgia, Times, "Times New Roman", serif;
- padding: 2px 0;
- border-style: solid;
- border-color: #ccc;
- border-width: 0;
-}
-
-.cke_contents_ltr blockquote
-{
- padding-left: 20px;
- padding-right: 8px;
- border-left-width: 5px;
-}
-
-.cke_contents_rtl blockquote
-{
- padding-left: 8px;
- padding-right: 20px;
- border-right-width: 5px;
-}
-
-a
-{
- color: #0782C1;
-}
-
-ol,ul,dl
-{
- /* IE7: reset rtl list margin. (#7334) */
- *margin-right: 0px;
- /* preserved spaces for list items with text direction other than the list. (#6249,#8049)*/
- padding: 0 40px;
-}
-
-h1,h2,h3,h4,h5,h6
-{
- font-weight: normal;
- line-height: 1.2;
-}
-
-hr
-{
- border: 0px;
- border-top: 1px solid #ccc;
-}
-
-img.right
-{
- border: 1px solid #ccc;
- float: right;
- margin-left: 15px;
- padding: 5px;
-}
-
-img.left
-{
- border: 1px solid #ccc;
- float: left;
- margin-right: 15px;
- padding: 5px;
-}
-
-pre
-{
- white-space: pre-wrap; /* CSS 2.1 */
- word-wrap: break-word; /* IE7 */
- -moz-tab-size: 4;
- -o-tab-size: 4;
- -webkit-tab-size: 4;
- tab-size: 4;
-}
-
-.marker
-{
- background-color: Yellow;
-}
-
-span[lang]
-{
- font-style: italic;
-}
-
-figure
-{
- text-align: center;
- border: solid 1px #ccc;
- border-radius: 2px;
- background: rgba(0,0,0,0.05);
- padding: 10px;
- margin: 10px 20px;
- display: inline-block;
-}
-
-figure > figcaption
-{
- text-align: center;
- display: block; /* For IE8 */
-}
-
-a > img {
- padding: 1px;
- margin: 1px;
- border: none;
- outline: 1px solid #0782C1;
-}
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/af.js b/wqflask/wqflask/static/packages/ckeditor/lang/af.js
deleted file mode 100644
index 3d0a2b2d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/af.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['af']={"editor":"Teksverwerker","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Druk op ALT 0 vir hulp","browseServer":"Blaai op bediener","url":"URL","protocol":"Protokol","upload":"Oplaai","uploadSubmit":"Stuur na bediener","image":"Afbeelding","flash":"Flash","form":"Vorm","checkbox":"Merkhokkie","radio":"Radioknoppie","textField":"Teksveld","textarea":"Teks-area","hiddenField":"Blinde veld","button":"Knop","select":"Keuseveld","imageButton":"Afbeeldingsknop","notSet":"<geen instelling>","id":"Id","name":"Naam","langDir":"Skryfrigting","langDirLtr":"Links na regs (LTR)","langDirRtl":"Regs na links (RTL)","langCode":"Taalkode","longDescr":"Lang beskrywing URL","cssClass":"CSS klasse","advisoryTitle":"Aanbevole titel","cssStyle":"Styl","ok":"OK","cancel":"Kanselleer","close":"Sluit","preview":"Voorbeeld","resize":"Sleep om te herskaal","generalTab":"Algemeen","advancedTab":"Gevorderd","validateNumberFailed":"Hierdie waarde is nie 'n getal nie.","confirmNewPage":"Alle wysiginge sal verlore gaan. Is u seker dat u 'n nuwe bladsy wil laai?","confirmCancel":"Sommige opsies is gewysig. Is u seker dat u hierdie dialoogvenster wil sluit?","options":"Opsies","target":"Doel","targetNew":"Nuwe venster (_blank)","targetTop":"Boonste venster (_top)","targetSelf":"Selfde venster (_self)","targetParent":"Oorspronklike venster (_parent)","langDirLTR":"Links na Regs (LTR)","langDirRTL":"Regs na Links (RTL)","styles":"Styl","cssClasses":"CSS klasse","width":"Breedte","height":"Hoogte","align":"Oplyn","alignLeft":"Links","alignRight":"Regs","alignCenter":"Sentreer","alignJustify":"Uitvul","alignTop":"Bo","alignMiddle":"Middel","alignBottom":"Onder","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Hoogte moet 'n getal wees","invalidWidth":"Breedte moet 'n getal wees.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, nie beskikbaar nie</span>"},"about":{"copy":"Kopiereg &copy; $1. Alle regte voorbehou.","dlgTitle":"Info oor CKEditor","help":"Check $1 for help.","moreInfo":"Vir lisensie-informasie, besoek asb. ons webwerf:","title":"Info oor CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Vet","italic":"Skuins","strike":"Deurstreep","subscript":"Onderskrif","superscript":"Bo-skrif","underline":"Onderstreep"},"bidi":{"ltr":"Skryfrigting van links na regs","rtl":"Skryfrigting van regs na links"},"blockquote":{"toolbar":"Sitaatblok"},"clipboard":{"copy":"Kopiëer","copyError":"U blaaier se sekuriteitsinstelling belet die kopiëringsaksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+C).","cut":"Knip","cutError":"U blaaier se sekuriteitsinstelling belet die outomatiese knip-aksie. Gebruik die sleutelbordkombinasie (Ctrl/Cmd+X).","paste":"Plak","pasteArea":"Plak-area","pasteMsg":"Plak die teks in die volgende teks-area met die sleutelbordkombinasie (<STRONG>Ctrl/Cmd+V</STRONG>) en druk <STRONG>OK</STRONG>.","securityMsg":"Weens u blaaier se sekuriteitsinstelling is data op die knipbord nie toeganklik nie. U kan dit eers weer in hierdie venster plak.","title":"Byvoeg"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Outomaties","bgColorTitle":"Agtergrondkleur","colors":{"000":"Swart","800000":"Meroen","8B4513":"Sjokoladebruin","2F4F4F":"Donkerleisteengrys","008080":"Blougroen","000080":"Vlootblou","4B0082":"Indigo","696969":"Donkergrys","B22222":"Rooibaksteen","A52A2A":"Bruin","DAA520":"Donkergeel","006400":"Donkergroen","40E0D0":"Turkoois","0000CD":"Middelblou","800080":"Pers","808080":"Grys","F00":"Rooi","FF8C00":"Donkeroranje","FFD700":"Goud","008000":"Groen","0FF":"Siaan","00F":"Blou","EE82EE":"Viooltjieblou","A9A9A9":"Donkergrys","FFA07A":"Ligsalm","FFA500":"Oranje","FFFF00":"Geel","00FF00":"Lemmetjie","AFEEEE":"Ligturkoois","ADD8E6":"Ligblou","DDA0DD":"Pruim","D3D3D3":"Liggrys","FFF0F5":"Linne","FAEBD7":"Ivoor","FFFFE0":"Liggeel","F0FFF0":"Heuningdou","F0FFFF":"Asuur","F0F8FF":"Ligte hemelsblou","E6E6FA":"Laventel","FFF":"Wit"},"more":"Meer Kleure...","panelTitle":"Kleure","textColorTitle":"Tekskleur"},"colordialog":{"clear":"Herstel","highlight":"Aktief","options":"Kleuropsies","selected":"Geselekteer","title":"Kies kleur"},"templates":{"button":"Sjablone","emptyListMsg":"(Geen sjablone gedefineer nie)","insertOption":"Vervang huidige inhoud","options":"Sjabloon opsies","selectPromptMsg":"Kies die sjabloon om te gebruik in die redigeerder (huidige inhoud gaan verlore):","title":"Inhoud Sjablone"},"contextmenu":{"options":"Konteks Spyskaart-opsies"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Aanbevole Titel","cssClassInputLabel":"CSS klasse","edit":"Wysig Div","inlineStyleInputLabel":"Inlyn Styl","langDirLTRLabel":"Links na regs (LTR)","langDirLabel":"Skryfrigting","langDirRTLLabel":"Regs na links (RTL)","languageCodeInputLabel":" Taalkode","remove":"Verwyder Div","styleSelectLabel":"Styl","title":"Skep Div houer","toolbar":"Skep Div houer"},"toolbar":{"toolbarCollapse":"Verklein werkbalk","toolbarExpand":"Vergroot werkbalk","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elemente-pad","eleTitle":"%1 element"},"find":{"find":"Soek","findOptions":"Find Options","findWhat":"Soek na:","matchCase":"Hoof/kleinletter sensitief","matchCyclic":"Soek deurlopend","matchWord":"Hele woord moet voorkom","notFoundMsg":"Teks nie gevind nie.","replace":"Vervang","replaceAll":"Vervang alles","replaceSuccessMsg":"%1 voorkoms(te) vervang.","replaceWith":"Vervang met:","title":"Soek en vervang"},"fakeobjects":{"anchor":"Anker","flash":"Flash animasie","hiddenfield":"Verborge veld","iframe":"IFrame","unknown":"Onbekende objek"},"flash":{"access":"Skrip toegang","accessAlways":"Altyd","accessNever":"Nooit","accessSameDomain":"Selfde domeinnaam","alignAbsBottom":"Absoluut-onder","alignAbsMiddle":"Absoluut-middel","alignBaseline":"Basislyn","alignTextTop":"Teks bo","bgcolor":"Agtergrondkleur","chkFull":"Laat volledige skerm toe","chkLoop":"Herhaal","chkMenu":"Flash spyskaart aan","chkPlay":"Speel outomaties","flashvars":"Veranderlikes vir Flash","hSpace":"HSpasie","properties":"Flash eienskappe","propertiesTab":"Eienskappe","quality":"Kwaliteit","qualityAutoHigh":"Outomaties hoog","qualityAutoLow":"Outomaties laag","qualityBest":"Beste","qualityHigh":"Hoog","qualityLow":"Laag","qualityMedium":"Gemiddeld","scale":"Skaal","scaleAll":"Wys alles","scaleFit":"Presiese pas","scaleNoBorder":"Geen rand","title":"Flash eienskappe","vSpace":"VSpasie","validateHSpace":"HSpasie moet 'n heelgetal wees.","validateSrc":"Voeg die URL in","validateVSpace":"VSpasie moet 'n heelgetal wees.","windowMode":"Venster modus","windowModeOpaque":"Ondeursigtig","windowModeTransparent":"Deursigtig","windowModeWindow":"Venster"},"font":{"fontSize":{"label":"Grootte","voiceLabel":"Fontgrootte","panelTitle":"Fontgrootte"},"label":"Font","panelTitle":"Fontnaam","voiceLabel":"Font"},"forms":{"button":{"title":"Knop eienskappe","text":"Teks (Waarde)","type":"Soort","typeBtn":"Knop","typeSbm":"Stuur","typeRst":"Maak leeg"},"checkboxAndRadio":{"checkboxTitle":"Merkhokkie eienskappe","radioTitle":"Radioknoppie eienskappe","value":"Waarde","selected":"Geselekteer"},"form":{"title":"Vorm eienskappe","menu":"Vorm eienskappe","action":"Aksie","method":"Metode","encoding":"Kodering"},"hidden":{"title":"Verborge veld eienskappe","name":"Naam","value":"Waarde"},"select":{"title":"Keuseveld eienskappe","selectInfo":"Info","opAvail":"Beskikbare opsies","value":"Waarde","size":"Grootte","lines":"Lyne","chkMulti":"Laat meer as een keuse toe","opText":"Teks","opValue":"Waarde","btnAdd":"Byvoeg","btnModify":"Wysig","btnUp":"Op","btnDown":"Af","btnSetValue":"Stel as geselekteerde waarde","btnDelete":"Verwyder"},"textarea":{"title":"Teks-area eienskappe","cols":"Kolomme","rows":"Rye"},"textfield":{"title":"Teksveld eienskappe","name":"Naam","value":"Waarde","charWidth":"Breedte (karakters)","maxChars":"Maksimum karakters","type":"Soort","typeText":"Teks","typePass":"Wagwoord","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Opmaak","panelTitle":"Opmaak","tag_address":"Adres","tag_div":"Normaal (DIV)","tag_h1":"Opskrif 1","tag_h2":"Opskrif 2","tag_h3":"Opskrif 3","tag_h4":"Opskrif 4","tag_h5":"Opskrif 5","tag_h6":"Opskrif 6","tag_p":"Normaal","tag_pre":"Opgemaak"},"horizontalrule":{"toolbar":"Horisontale lyn invoeg"},"iframe":{"border":"Wys rand van raam","noUrl":"Gee die iframe URL","scrolling":"Skuifbalke aan","title":"IFrame Eienskappe","toolbar":"IFrame"},"image":{"alertUrl":"Gee URL van afbeelding.","alt":"Alternatiewe teks","border":"Rand","btnUpload":"Stuur na bediener","button2Img":"Wil u die geselekteerde afbeeldingsknop vervang met 'n eenvoudige afbeelding?","hSpace":"HSpasie","img2Button":"Wil u die geselekteerde afbeelding vervang met 'n afbeeldingsknop?","infoTab":"Afbeelding informasie","linkTab":"Skakel","lockRatio":"Vaste proporsie","menu":"Afbeelding eienskappe","resetSize":"Herstel grootte","title":"Afbeelding eienskappe","titleButton":"Afbeeldingsknop eienskappe","upload":"Oplaai","urlMissing":"Die URL na die afbeelding ontbreek.","vSpace":"VSpasie","validateBorder":"Rand moet 'n heelgetal wees.","validateHSpace":"HSpasie moet 'n heelgetal wees.","validateVSpace":"VSpasie moet 'n heelgetal wees."},"indent":{"indent":"Vergroot inspring","outdent":"Verklein inspring"},"smiley":{"options":"Lagbekkie opsies","title":"Voeg lagbekkie by","toolbar":"Lagbekkie"},"justify":{"block":"Uitvul","center":"Sentreer","left":"Links oplyn","right":"Regs oplyn"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Toegangsleutel","advanced":"Gevorderd","advisoryContentType":"Aanbevole inhoudstipe","advisoryTitle":"Aanbevole titel","anchor":{"toolbar":"Anker byvoeg/verander","menu":"Anker-eienskappe","title":"Anker-eienskappe","name":"Ankernaam","errorName":"Voltooi die ankernaam asseblief","remove":"Remove Anchor"},"anchorId":"Op element Id","anchorName":"Op ankernaam","charset":"Karakterstel van geskakelde bron","cssClasses":"CSS klasse","emailAddress":"E-posadres","emailBody":"Berig-inhoud","emailSubject":"Berig-onderwerp","id":"Id","info":"Skakel informasie","langCode":"Taalkode","langDir":"Skryfrigting","langDirLTR":"Links na regs (LTR)","langDirRTL":"Regs na links (RTL)","menu":"Wysig skakel","name":"Naam","noAnchors":"(Geen ankers beskikbaar in dokument)","noEmail":"Gee die e-posadres","noUrl":"Gee die skakel se URL","other":"<ander>","popupDependent":"Afhanklik (Netscape)","popupFeatures":"Eienskappe van opspringvenster","popupFullScreen":"Volskerm (IE)","popupLeft":"Posisie links","popupLocationBar":"Adresbalk","popupMenuBar":"Spyskaartbalk","popupResizable":"Herskaalbaar","popupScrollBars":"Skuifbalke","popupStatusBar":"Statusbalk","popupToolbar":"Werkbalk","popupTop":"Posisie bo","rel":"Relationship","selectAnchor":"Kies 'n anker","styles":"Styl","tabIndex":"Tab indeks","target":"Doel","targetFrame":"<raam>","targetFrameName":"Naam van doelraam","targetPopup":"<opspringvenster>","targetPopupName":"Naam van opspringvenster","title":"Skakel","toAnchor":"Anker in bladsy","toEmail":"E-pos","toUrl":"URL","toolbar":"Skakel invoeg/wysig","type":"Skakelsoort","unlink":"Verwyder skakel","upload":"Oplaai"},"list":{"bulletedlist":"Ongenommerde lys","numberedlist":"Genommerde lys"},"liststyle":{"armenian":"Armeense nommering","bulletedTitle":"Eienskappe van ongenommerde lys","circle":"Sirkel","decimal":"Desimale syfers (1, 2, 3, ens.)","decimalLeadingZero":"Desimale syfers met voorloopnul (01, 02, 03, ens.)","disc":"Skyf","georgian":"Georgiese nommering (an, ban, gan, ens.)","lowerAlpha":"Kleinletters (a, b, c, d, e, ens.)","lowerGreek":"Griekse kleinletters (alpha, beta, gamma, ens.)","lowerRoman":"Romeinse kleinletters (i, ii, iii, iv, v, ens.)","none":"Geen","notset":"<nie ingestel nie>","numberedTitle":"Eienskappe van genommerde lys","square":"Vierkant","start":"Begin","type":"Tipe","upperAlpha":"Hoofletters (A, B, C, D, E, ens.)","upperRoman":"Romeinse hoofletters (I, II, III, IV, V, ens.)","validateStartNumber":"Beginnommer van lys moet 'n heelgetal wees."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maksimaliseer","minimize":"Minimaliseer"},"newpage":{"toolbar":"Nuwe bladsy"},"pagebreak":{"alt":"Bladsy-einde","toolbar":"Bladsy-einde invoeg"},"pastetext":{"button":"Plak as eenvoudige teks","title":"Plak as eenvoudige teks"},"pastefromword":{"confirmCleanup":"Die teks wat u wil plak lyk asof dit uit Word gekopiëer is. Wil u dit eers skoonmaak voordat dit geplak word?","error":"Die geplakte teks kon nie skoongemaak word nie, weens 'n interne fout","title":"Plak vanuit Word","toolbar":"Plak vanuit Word"},"preview":{"preview":"Voorbeeld"},"print":{"toolbar":"Druk"},"removeformat":{"toolbar":"Verwyder opmaak"},"save":{"toolbar":"Bewaar"},"selectall":{"toolbar":"Selekteer alles"},"showblocks":{"toolbar":"Toon blokke"},"sourcearea":{"toolbar":"Bron"},"specialchar":{"options":"Spesiale karakter-opsies","title":"Kies spesiale karakter","toolbar":"Voeg spesiaale karakter in"},"scayt":{"btn_about":"SCAYT info","btn_dictionaries":"Woordeboeke","btn_disable":"SCAYT af","btn_enable":"SCAYT aan","btn_langs":"Tale","btn_options":"Opsies","text_title":""},"stylescombo":{"label":"Styl","panelTitle":"Opmaak style","panelTitle1":"Blok style","panelTitle2":"Inlyn style","panelTitle3":"Objek style"},"table":{"border":"Randbreedte","caption":"Naam","cell":{"menu":"Sel","insertBefore":"Voeg sel in voor","insertAfter":"Voeg sel in na","deleteCell":"Verwyder sel","merge":"Voeg selle saam","mergeRight":"Voeg saam na regs","mergeDown":"Voeg saam ondertoe","splitHorizontal":"Splits sel horisontaal","splitVertical":"Splits sel vertikaal","title":"Sel eienskappe","cellType":"Sel tipe","rowSpan":"Omspan rye","colSpan":"Omspan kolomme","wordWrap":"Woord terugloop","hAlign":"Horisontale oplyning","vAlign":"Vertikale oplyning","alignBaseline":"Basislyn","bgColor":"Agtergrondkleur","borderColor":"Randkleur","data":"Inhoud","header":"Opskrif","yes":"Ja","no":"Nee","invalidWidth":"Selbreedte moet 'n getal wees.","invalidHeight":"Selhoogte moet 'n getal wees.","invalidRowSpan":"Omspan rye moet 'n heelgetal wees.","invalidColSpan":"Omspan kolomme moet 'n heelgetal wees.","chooseColor":"Kies"},"cellPad":"Sel-spasie","cellSpace":"Sel-afstand","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in na","deleteColumn":"Verwyder kolom"},"columns":"Kolomme","deleteTable":"Verwyder tabel","headers":"Opskrifte","headersBoth":"Beide ","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste ry","invalidBorder":"Randbreedte moet 'n getal wees.","invalidCellPadding":"Sel-spasie moet 'n getal wees.","invalidCellSpacing":"Sel-afstand moet 'n getal wees.","invalidCols":"Aantal kolomme moet 'n getal groter as 0 wees.","invalidHeight":"Tabelhoogte moet 'n getal wees.","invalidRows":"Aantal rye moet 'n getal groter as 0 wees.","invalidWidth":"Tabelbreedte moet 'n getal wees.","menu":"Tabel eienskappe","row":{"menu":"Ry","insertBefore":"Voeg ry in voor","insertAfter":"Voeg ry in na","deleteRow":"Verwyder ry"},"rows":"Rye","summary":"Opsomming","title":"Tabel eienskappe","toolbar":"Tabel","widthPc":"persent","widthPx":"piksels","widthUnit":"breedte-eenheid"},"undo":{"redo":"Oordoen","undo":"Ontdoen"},"wsc":{"btnIgnore":"Ignoreer","btnIgnoreAll":"Ignoreer alles","btnReplace":"Vervang","btnReplaceAll":"vervang alles","btnUndo":"Ontdoen","changeTo":"Verander na","errorLoading":"Fout by inlaai van diens: %s.","ieSpellDownload":"Speltoetser is nie geïnstalleer nie. Wil u dit nou aflaai?","manyChanges":"Klaar met speltoets: %1 woorde verander","noChanges":"Klaar met speltoets: Geen woorde verander nie","noMispell":"Klaar met speltoets: Geen foute nie","noSuggestions":"- Geen voorstel -","notAvailable":"Jammer, hierdie diens is nie nou beskikbaar nie.","notInDic":"Nie in woordeboek nie","oneChange":"Klaar met speltoets: Een woord verander","progress":"Spelling word getoets...","title":"Speltoetser","toolbar":"Speltoets"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/ar.js b/wqflask/wqflask/static/packages/ckeditor/lang/ar.js
deleted file mode 100644
index d1ab6617..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/ar.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ar']={"editor":"محرر النص الغني","editorPanel":"لائحة محرر النص المنسق","common":{"editorHelp":"إضغط على ALT + 0 للحصول على المساعدة.","browseServer":"تصÙØ­","url":"الرابط","protocol":"البروتوكول","upload":"رÙع","uploadSubmit":"أرسل","image":"صورة","flash":"Ùلاش","form":"نموذج","checkbox":"خانة إختيار","radio":"زر اختيار","textField":"مربع نص","textarea":"مساحة نصية","hiddenField":"إدراج حقل Ø®ÙÙŠ","button":"زر ضغط","select":"اختار","imageButton":"زر صورة","notSet":"<بدون تحديد>","id":"الرقم","name":"إسم","langDir":"إتجاه النص","langDirLtr":"اليسار لليمين (LTR)","langDirRtl":"اليمين لليسار (RTL)","langCode":"رمز اللغة","longDescr":"الوص٠التÙصيلى","cssClass":"Ùئات التنسيق","advisoryTitle":"عنوان التقرير","cssStyle":"نمط","ok":"مواÙÙ‚","cancel":"إلغاء الأمر","close":"أغلق","preview":"استعراض","resize":"تغيير الحجم","generalTab":"عام","advancedTab":"متقدم","validateNumberFailed":"لايوجد نتيجة","confirmNewPage":"ستÙقد أي متغييرات اذا لم تقم بحÙظها اولا. هل أنت متأكد أنك تريد صÙحة جديدة؟","confirmCancel":"بعض الخيارات قد تغيرت. هل أنت متأكد من إغلاق مربع النص؟","options":"خيارات","target":"هد٠الرابط","targetNew":"ناÙذة جديدة","targetTop":"الناÙذة الأعلى","targetSelf":"داخل الناÙذة","targetParent":"الناÙذة الأم","langDirLTR":"اليسار لليمين (LTR)","langDirRTL":"اليمين لليسار (RTL)","styles":"نمط","cssClasses":"Ùئات التنسيق","width":"العرض","height":"الإرتÙاع","align":"محاذاة","alignLeft":"يسار","alignRight":"يمين","alignCenter":"وسط","alignJustify":"ضبط","alignTop":"أعلى","alignMiddle":"وسط","alignBottom":"أسÙÙ„","alignNone":"None","invalidValue":"قيمة غير Ù…Ùبولة.","invalidHeight":"الارتÙاع يجب أن يكون عدداً.","invalidWidth":"العرض يجب أن يكون عدداً.","invalidCssLength":"قيمة الخانة المخصصة لـ \"%1\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة CSS قياس مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"قيمة الخانة المخصصة لـ \"%1\" يجب أن تكون رقما موجبا، باستخدام أو من غير استخدام وحدة HTML قياس مقبولة (px or %).","invalidInlineStyle":"قيمة الخانة المخصصة لـ Inline Style يجب أن تختوي على مجموع واحد أو أكثر بالشكل التالي: \"name : value\", Ù…Ùصولة بÙاصلة منقزطة.","cssLengthTooltip":"أدخل رقما للقيمة بالبكسل أو رقما بوحدة CSS مقبولة (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, غير متاح</span>"},"about":{"copy":"حقوق النشر &copy; $1. جميع الحقوق محÙوظة.","dlgTitle":"عن CKEditor","help":"راجع $1 من أجل المساعدة","moreInfo":"للحصول على معلومات الترخيص ØŒ يرجى زيارة موقعنا:","title":"عن CKEditor","userGuide":"دليل مستخدم CKEditor."},"basicstyles":{"bold":"عريض","italic":"مائل","strike":"يتوسطه خط","subscript":"منخÙض","superscript":"مرتÙع","underline":"تسطير"},"bidi":{"ltr":"إتجاه النص من اليسار إلى اليمين","rtl":"إتجاه النص من اليمين إلى اليسار"},"blockquote":{"toolbar":"اقتباس"},"clipboard":{"copy":"نسخ","copyError":"الإعدادات الأمنية للمتصÙØ­ الذي تستخدمه تمنع عمليات النسخ التلقائي. Ùضلاً إستخدم لوحة المÙاتيح Ù„Ùعل ذلك (Ctrl/Cmd+C).","cut":"قص","cutError":"الإعدادات الأمنية للمتصÙØ­ الذي تستخدمه تمنع القص التلقائي. Ùضلاً إستخدم لوحة المÙاتيح Ù„Ùعل ذلك (Ctrl/Cmd+X).","paste":"لصق","pasteArea":"منطقة اللصق","pasteMsg":"الصق داخل الصندوق بإستخدام زرائر (<STRONG>Ctrl/Cmd+V</STRONG>) ÙÙŠ لوحة المÙاتيح، ثم اضغط زر <STRONG>مواÙÙ‚</STRONG>.","securityMsg":"نظراً لإعدادات الأمان الخاصة بمتصÙحك، لن يتمكن هذا المحرر من الوصول لمحتوى حاÙظتك، لذلك يجب عليك لصق المحتوى مرة أخرى ÙÙŠ هذه الناÙذة.","title":"لصق"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"تلقائي","bgColorTitle":"لون الخلÙية","colors":{"000":"أسود","800000":"كستنائي","8B4513":"بني Ùاتح","2F4F4F":"رمادي أردوازي غامق","008080":"أزرق مخضر","000080":"أزرق داكن","4B0082":"كحلي","696969":"رمادي داكن","B22222":"طوبي","A52A2A":"بني","DAA520":"ذهبي داكن","006400":"أخضر داكن","40E0D0":"Ùيروزي","0000CD":"أزرق متوسط","800080":"بنÙسجي غامق","808080":"رمادي","F00":"أحمر","FF8C00":"برتقالي داكن","FFD700":"ذهبي","008000":"أخضر","0FF":"تركواز","00F":"أزرق","EE82EE":"بنÙسجي","A9A9A9":"رمادي شاحب","FFA07A":"برتقالي وردي","FFA500":"برتقالي","FFFF00":"أصÙر","00FF00":"ليموني","AFEEEE":"Ùيروزي شاحب","ADD8E6":"أزرق Ùاتح","DDA0DD":"بنÙسجي Ùاتح","D3D3D3":"رمادي Ùاتح","FFF0F5":"وردي Ùاتح","FAEBD7":"أبيض عتيق","FFFFE0":"أصÙر Ùاتح","F0FFF0":"أبيض مائل للأخضر","F0FFFF":"سماوي","F0F8FF":"لبني","E6E6FA":"أرجواني","FFF":"أبيض"},"more":"ألوان إضاÙية...","panelTitle":"Colors","textColorTitle":"لون النص"},"colordialog":{"clear":"مسح","highlight":"تحديد","options":"اختيارات الألوان","selected":"اللون المختار","title":"اختر اللون"},"templates":{"button":"القوالب","emptyListMsg":"(لم يتم تعري٠أي قالب)","insertOption":"استبدال المحتوى","options":"خصائص القوالب","selectPromptMsg":"اختر القالب الذي تود وضعه ÙÙŠ المحرر","title":"قوالب المحتوى"},"contextmenu":{"options":"خصائص قائمة السياق"},"div":{"IdInputLabel":"هوية","advisoryTitleInputLabel":"عنوان التقرير","cssClassInputLabel":"Ùئات التنسيق","edit":"تحرير Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"اليسار لليمين (LTR)","langDirLabel":"إتجاه النص","langDirRTLLabel":"اليمين لليسار (RTL)","languageCodeInputLabel":"رمز اللغة","remove":"إزالة Div","styleSelectLabel":"نمط","title":"إحداث Div Container","toolbar":"إحداث Div Container"},"toolbar":{"toolbarCollapse":"تقليص شريط الأدوت","toolbarExpand":"تمديد شريط الأدوات","toolbarGroups":{"document":"مستند","clipboard":"الحاÙظة/الرجوع","editing":"تحرير","forms":"نماذج","basicstyles":"نمط بسيط","paragraph":"Ùقرة","links":"روابط","insert":"إدراج","styles":"أنماط","colors":"ألوان","tools":"أدوات"},"toolbars":"أشرطة أدوات المحرر"},"elementspath":{"eleLabel":"مسار العنصر","eleTitle":"عنصر 1%"},"find":{"find":"بحث","findOptions":"Find Options","findWhat":"البحث بـ:","matchCase":"مطابقة حالة الأحرÙ","matchCyclic":"مطابقة دورية","matchWord":"مطابقة بالكامل","notFoundMsg":"لم يتم العثور على النص المحدد.","replace":"إستبدال","replaceAll":"إستبدال الكل","replaceSuccessMsg":"تم استبدال 1% من الحالات ","replaceWith":"إستبدال بـ:","title":"بحث واستبدال"},"fakeobjects":{"anchor":"إرساء","flash":"رسم متحرك بالÙلاش","hiddenfield":"إدراج حقل Ø®ÙÙŠ","iframe":"iframe","unknown":"عنصر غير معروÙ"},"flash":{"access":"دخول النص البرمجي","accessAlways":"دائماً","accessNever":"مطلقاً","accessSameDomain":"Ù†Ùس النطاق","alignAbsBottom":"أسÙÙ„ النص","alignAbsMiddle":"وسط السطر","alignBaseline":"على السطر","alignTextTop":"أعلى النص","bgcolor":"لون الخلÙية","chkFull":"ملء الشاشة","chkLoop":"تكرار","chkMenu":"تمكين قائمة Ùيلم الÙلاش","chkPlay":"تشغيل تلقائي","flashvars":"متغيرات الÙلاش","hSpace":"تباعد Ø£Ùقي","properties":"خصائص الÙلاش","propertiesTab":"الخصائص","quality":"جودة","qualityAutoHigh":"عالية تلقائياً","qualityAutoLow":"منخÙضة تلقائياً","qualityBest":"Ø£Ùضل","qualityHigh":"عالية","qualityLow":"منخÙضة","qualityMedium":"متوسطة","scale":"الحجم","scaleAll":"إظهار الكل","scaleFit":"ضبط تام","scaleNoBorder":"بلا حدود","title":"خصائص Ùيلم الÙلاش","vSpace":"تباعد عمودي","validateHSpace":"HSpace يجب أن يكون عدداً.","validateSrc":"Ùضلاً أدخل عنوان الموقع الذي يشير إليه الرابط","validateVSpace":"VSpace يجب أن يكون عدداً.","windowMode":"وضع الناÙذة","windowModeOpaque":"غير Ø´ÙاÙ","windowModeTransparent":"Ø´ÙاÙ","windowModeWindow":"ناÙذة"},"font":{"fontSize":{"label":"حجم الخط","voiceLabel":"حجم الخط","panelTitle":"حجم الخط"},"label":"خط","panelTitle":"حجم الخط","voiceLabel":"حجم الخط"},"forms":{"button":{"title":"خصائص زر الضغط","text":"القيمة/التسمية","type":"نوع الزر","typeBtn":"زر","typeSbm":"إرسال","typeRst":"إعادة تعيين"},"checkboxAndRadio":{"checkboxTitle":"خصائص خانة الإختيار","radioTitle":"خصائص زر الخيار","value":"القيمة","selected":"محدد"},"form":{"title":"خصائص النموذج","menu":"خصائص النموذج","action":"اسم الملÙ","method":"الأسلوب","encoding":"تشÙير"},"hidden":{"title":"خصائص الحقل المخÙÙŠ","name":"الاسم","value":"القيمة"},"select":{"title":"خصائص اختيار الحقل","selectInfo":"اختار معلومات","opAvail":"الخيارات المتاحة","value":"القيمة","size":"الحجم","lines":"الأسطر","chkMulti":"السماح بتحديدات متعددة","opText":"النص","opValue":"القيمة","btnAdd":"إضاÙØ©","btnModify":"تعديل","btnUp":"أعلى","btnDown":"أسÙÙ„","btnSetValue":"إجعلها محددة","btnDelete":"إزالة"},"textarea":{"title":"خصائص مساحة النص","cols":"الأعمدة","rows":"الصÙÙˆÙ"},"textfield":{"title":"خصائص مربع النص","name":"الاسم","value":"القيمة","charWidth":"عرض السمات","maxChars":"اقصى عدد للسمات","type":"نوع المحتوى","typeText":"نص","typePass":"كلمة مرور","typeEmail":"بريد إلكتروني","typeSearch":"بحث","typeTel":"رقم الهاتÙ","typeUrl":"الرابط"}},"format":{"label":"تنسيق","panelTitle":"تنسيق الÙقرة","tag_address":"عنوان","tag_div":"عادي (DIV)","tag_h1":"العنوان 1","tag_h2":"العنوان 2","tag_h3":"العنوان 3","tag_h4":"العنوان 4","tag_h5":"العنوان 5","tag_h6":"العنوان 6","tag_p":"عادي","tag_pre":"منسّق"},"horizontalrule":{"toolbar":"خط Ùاصل"},"iframe":{"border":"إظهار حدود الإطار","noUrl":"Ùضلا أكتب رابط الـ iframe","scrolling":"تÙعيل أشرطة الإنتقال","title":"خصائص iframe","toolbar":"iframe"},"image":{"alertUrl":"Ùضلاً أكتب الموقع الذي توجد عليه هذه الصورة.","alt":"عنوان الصورة","border":"سمك الحدود","btnUpload":"أرسلها للخادم","button2Img":"هل تريد تحويل زر الصورة المختار إلى صورة بسيطة؟","hSpace":"تباعد Ø£Ùقي","img2Button":"هل تريد تحويل الصورة المختارة إلى زر صورة؟","infoTab":"معلومات الصورة","linkTab":"الرابط","lockRatio":"تناسق الحجم","menu":"خصائص الصورة","resetSize":"إستعادة الحجم الأصلي","title":"خصائص الصورة","titleButton":"خصائص زر الصورة","upload":"رÙع","urlMissing":"عنوان مصدر الصورة Ù…Ùقود","vSpace":"تباعد عمودي","validateBorder":"الإطار يجب أن يكون عددا","validateHSpace":"HSpace يجب أن يكون عدداً.","validateVSpace":"VSpace يجب أن يكون عدداً."},"indent":{"indent":"زيادة المساÙØ© البادئة","outdent":"إنقاص المساÙØ© البادئة"},"smiley":{"options":"خصائص الإبتسامات","title":"إدراج ابتسامات","toolbar":"ابتسامات"},"justify":{"block":"ضبط","center":"توسيط","left":"محاذاة إلى اليسار","right":"محاذاة إلى اليمين"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Ù…Ùاتيح الإختصار","advanced":"متقدم","advisoryContentType":"نوع التقرير","advisoryTitle":"عنوان التقرير","anchor":{"toolbar":"إشارة مرجعية","menu":"تحرير الإشارة المرجعية","title":"خصائص الإشارة المرجعية","name":"اسم الإشارة المرجعية","errorName":"الرجاء كتابة اسم الإشارة المرجعية","remove":"إزالة الإشارة المرجعية"},"anchorId":"حسب رقم العنصر","anchorName":"حسب إسم الإشارة المرجعية","charset":"ترميز المادة المطلوبة","cssClasses":"Ùئات التنسيق","emailAddress":"البريد الإلكتروني","emailBody":"محتوى الرسالة","emailSubject":"موضوع الرسالة","id":"هوية","info":"معلومات الرابط","langCode":"رمز اللغة","langDir":"إتجاه نص اللغة","langDirLTR":"اليسار لليمين (LTR)","langDirRTL":"اليمين لليسار (RTL)","menu":"تحرير الرابط","name":"إسم","noAnchors":"(لا توجد علامات مرجعية ÙÙŠ هذا المستند)","noEmail":"الرجاء كتابة الريد الإلكتروني","noUrl":"الرجاء كتابة رابط الموقع","other":"<أخرى>","popupDependent":"تابع (Netscape)","popupFeatures":"خصائص الناÙذة المنبثقة","popupFullScreen":"ملئ الشاشة (IE)","popupLeft":"التمركز لليسار","popupLocationBar":"شريط العنوان","popupMenuBar":"القوائم الرئيسية","popupResizable":"قابلة التشكيل","popupScrollBars":"أشرطة التمرير","popupStatusBar":"شريط الحالة","popupToolbar":"شريط الأدوات","popupTop":"التمركز للأعلى","rel":"العلاقة","selectAnchor":"اختر علامة مرجعية","styles":"نمط","tabIndex":"الترتيب","target":"هد٠الرابط","targetFrame":"<إطار>","targetFrameName":"اسم الإطار المستهدÙ","targetPopup":"<ناÙذة منبثقة>","targetPopupName":"اسم الناÙذة المنبثقة","title":"رابط","toAnchor":"مكان ÙÙŠ هذا المستند","toEmail":"بريد إلكتروني","toUrl":"الرابط","toolbar":"رابط","type":"نوع الربط","unlink":"إزالة رابط","upload":"رÙع"},"list":{"bulletedlist":"ادخال/حذ٠تعداد نقطي","numberedlist":"ادخال/حذ٠تعداد رقمي"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"إدراج Ùقرة هنا"},"maximize":{"maximize":"تكبير","minimize":"تصغير"},"newpage":{"toolbar":"صÙحة جديدة"},"pagebreak":{"alt":"Ùاصل الصÙحة","toolbar":"إدخال صÙحة جديدة"},"pastetext":{"button":"لصق كنص بسيط","title":"لصق كنص بسيط"},"pastefromword":{"confirmCleanup":"يبدو أن النص المراد لصقه منسوخ من برنامج وورد. هل تود تنظيÙÙ‡ قبل الشروع ÙÙŠ عملية اللصق؟","error":"لم يتم مسح المعلومات الملصقة لخلل داخلي","title":"لصق من وورد","toolbar":"لصق من وورد"},"preview":{"preview":"معاينة الصÙحة"},"print":{"toolbar":"طباعة"},"removeformat":{"toolbar":"إزالة التنسيقات"},"save":{"toolbar":"Ø­Ùظ"},"selectall":{"toolbar":"تحديد الكل"},"showblocks":{"toolbar":"مخطط تÙصيلي"},"sourcearea":{"toolbar":"المصدر"},"specialchar":{"options":"خيارات الأحر٠الخاصة","title":"اختر حر٠خاص","toolbar":"إدراج حر٠خاص"},"scayt":{"btn_about":"عن SCAYT","btn_dictionaries":"قواميس","btn_disable":"تعطيل SCAYT","btn_enable":"تÙعيل SCAYT","btn_langs":"لغات","btn_options":"خيارات","text_title":""},"stylescombo":{"label":"أنماط","panelTitle":"أنماط التنسيق","panelTitle1":"أنماط الÙقرة","panelTitle2":"أنماط مضمنة","panelTitle3":"أنماط الكائن"},"table":{"border":"الحدود","caption":"الوصÙ","cell":{"menu":"خلية","insertBefore":"إدراج خلية قبل","insertAfter":"إدراج خلية بعد","deleteCell":"حذ٠خلية","merge":"دمج خلايا","mergeRight":"دمج لليمين","mergeDown":"دمج للأسÙÙ„","splitHorizontal":"تقسيم الخلية Ø£Ùقياً","splitVertical":"تقسيم الخلية عمودياً","title":"خصائص الخلية","cellType":"نوع الخلية","rowSpan":"امتداد الصÙÙˆÙ","colSpan":"امتداد الأعمدة","wordWrap":"التÙا٠النص","hAlign":"محاذاة Ø£Ùقية","vAlign":"محاذاة رأسية","alignBaseline":"خط القاعدة","bgColor":"لون الخلÙية","borderColor":"لون الحدود","data":"بيانات","header":"عنوان","yes":"نعم","no":"لا","invalidWidth":"عرض الخلية يجب أن يكون عدداً.","invalidHeight":"ارتÙاع الخلية يجب أن يكون عدداً.","invalidRowSpan":"امتداد الصÙو٠يجب أن يكون عدداً صحيحاً.","invalidColSpan":"امتداد الأعمدة يجب أن يكون عدداً صحيحاً.","chooseColor":"اختر"},"cellPad":"المساÙØ© البادئة","cellSpace":"تباعد الخلايا","column":{"menu":"عمود","insertBefore":"إدراج عمود قبل","insertAfter":"إدراج عمود بعد","deleteColumn":"حذ٠أعمدة"},"columns":"أعمدة","deleteTable":"حذ٠الجدول","headers":"العناوين","headersBoth":"كلاهما","headersColumn":"العمود الأول","headersNone":"بدون","headersRow":"الص٠الأول","invalidBorder":"حجم الحد يجب أن يكون عدداً.","invalidCellPadding":"المساÙØ© البادئة يجب أن تكون عدداً","invalidCellSpacing":"المساÙØ© بين الخلايا يجب أن تكون عدداً.","invalidCols":"عدد الأعمدة يجب أن يكون عدداً أكبر من صÙر.","invalidHeight":"ارتÙاع الجدول يجب أن يكون عدداً.","invalidRows":"عدد الصÙو٠يجب أن يكون عدداً أكبر من صÙر.","invalidWidth":"عرض الجدول يجب أن يكون عدداً.","menu":"خصائص الجدول","row":{"menu":"صÙ","insertBefore":"إدراج ص٠قبل","insertAfter":"إدراج ص٠بعد","deleteRow":"حذ٠صÙÙˆÙ"},"rows":"صÙÙˆÙ","summary":"الخلاصة","title":"خصائص الجدول","toolbar":"جدول","widthPc":"بالمئة","widthPx":"بكسل","widthUnit":"وحدة العرض"},"undo":{"redo":"إعادة","undo":"تراجع"},"wsc":{"btnIgnore":"تجاهل","btnIgnoreAll":"تجاهل الكل","btnReplace":"تغيير","btnReplaceAll":"تغيير الكل","btnUndo":"تراجع","changeTo":"التغيير إلى","errorLoading":"خطأ ÙÙŠ تحميل تطبيق خدمة الاستضاÙØ©: %s.","ieSpellDownload":"المدقق الإملائي (الإنجليزي) غير مثبّت. هل تود تحميله الآن؟","manyChanges":"تم إكمال التدقيق الإملائي: تم تغيير %1 من كلمات","noChanges":"تم التدقيق الإملائي: لم يتم تغيير أي كلمة","noMispell":"تم التدقيق الإملائي: لم يتم العثور على أي أخطاء إملائية","noSuggestions":"- لا توجد إقتراحات -","notAvailable":"عÙواً، ولكن هذه الخدمة غير متاحة الان","notInDic":"ليست ÙÙŠ القاموس","oneChange":"تم التدقيق الإملائي: تم تغيير كلمة واحدة Ùقط","progress":"جاري التدقيق الاملائى","title":"التدقيق الإملائي","toolbar":"تدقيق إملائي"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/bg.js b/wqflask/wqflask/static/packages/ckeditor/lang/bg.js
deleted file mode 100644
index daae1f70..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/bg.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['bg']={"editor":"ТекÑтов редактор за форматиран текÑÑ‚","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"натиÑнете ALT 0 за помощ","browseServer":"Избор от Ñървъра","url":"URL","protocol":"Протокол","upload":"Качване","uploadSubmit":"Изпращане към Ñървъра","image":"Снимка","flash":"Флаш","form":"Форма","checkbox":"Поле за избор","radio":"Радио бутон","textField":"ТекÑтово поле","textarea":"ТекÑтова зона","hiddenField":"Скрито поле","button":"Бутон","select":"Поле за избор","imageButton":"Бутон за Ñнимка","notSet":"<не е избрано>","id":"ID","name":"Име","langDir":"ПоÑока на езика","langDirLtr":"ЛÑво на дÑÑно (ЛнД)","langDirRtl":"ДÑÑно на лÑво (ДнЛ)","langCode":"Код на езика","longDescr":"Уеб Ð°Ð´Ñ€ÐµÑ Ð·Ð° дълго опиÑание","cssClass":"КлаÑове за CSS","advisoryTitle":"Препоръчително заглавие","cssStyle":"Стил","ok":"ОК","cancel":"Отказ","close":"Затвори","preview":"Преглед","resize":"Влачете за да оразмерите","generalTab":"Общи","advancedTab":"Разширено","validateNumberFailed":"Тази ÑтойноÑÑ‚ не е чиÑло","confirmNewPage":"Ð’Ñички незапазени промени ще бъдат изгубени. Сигурни ли Ñте, че желаете да заредите нова Ñтраница?","confirmCancel":"ÐÑкои от опциите Ñа променени. Сигурни ли Ñте, че желаете да затворите прозореца?","options":"Опции","target":"Цел","targetNew":"Ðов прозорец (_blank)","targetTop":"Горна Ð¿Ð¾Ð·Ð¸Ñ†Ð¸Ñ (_top)","targetSelf":"Ð¢ÐµÐºÑƒÑ‰Ð¸Ñ Ð¿Ñ€Ð¾Ð·Ð¾Ñ€ÐµÑ† (_self)","targetParent":"ОÑновен прозорец (_parent)","langDirLTR":"ЛÑво на дÑÑно (ЛнД)","langDirRTL":"ДÑÑно на лÑво (ДнЛ)","styles":"Стил","cssClasses":"КлаÑове за CSS","width":"Ширина","height":"ВиÑочина","align":"ПодравнÑване","alignLeft":"ЛÑво","alignRight":"ДÑÑно","alignCenter":"Център","alignJustify":"ДвуÑтранно подравнÑване","alignTop":"Горе","alignMiddle":"По Ñредата","alignBottom":"Долу","alignNone":"None","invalidValue":"Ðевалидна ÑтойноÑÑ‚.","invalidHeight":"ВиÑочината Ñ‚Ñ€Ñбва да е чиÑло.","invalidWidth":"Ширина требе да е чиÑло.","invalidCssLength":"СтойноÑтта на полето \"%1\" Ñ‚Ñ€Ñбва да бъде положително чиÑло Ñ Ð¸Ð»Ð¸ без валидна CSS измервателна единица (px, %, in, cm, mm, em, ex, pt, или pc).","invalidHtmlLength":"СтойноÑтта на полето \"%1\" Ñ‚Ñ€Ñбва да бъде положително чиÑло Ñ Ð¸Ð»Ð¸ без валидна HTML измервателна единица (px или %).","invalidInlineStyle":"СтойноÑтта на Ñтилa Ñ‚Ñ€Ñбва да Ñъдържат една или повече двойки във формат \"name : value\", разделени Ñ Ð´Ð²Ð¾ÐµÑ‚Ð¾Ñ‡Ð¸Ðµ.","cssLengthTooltip":"Въведете чиÑлена ÑтойноÑÑ‚ в пикÑели или друга валидна CSS единица (px, %, in, cm, mm, em, ex, pt, или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недоÑтъпно</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"ОтноÑно CKEditor","help":"Проверете $1 за помощ.","moreInfo":"За лицензионна Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¼Ð¾Ð»Ñ Ð¿Ð¾Ñетете Ñайта ни:","title":"ОтноÑно CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Удебелен","italic":"Ðаклонен","strike":"Зачертан текÑÑ‚","subscript":"ИндекÑиран текÑÑ‚","superscript":"СуперÑкрипт","underline":"Подчертан"},"bidi":{"ltr":"ПоÑока на текÑта от лÑво на дÑÑно","rtl":"ПоÑока на текÑта от дÑÑно на лÑво"},"blockquote":{"toolbar":"Блок за цитат"},"clipboard":{"copy":"Копирай","copyError":"ÐаÑтройките за ÑигурноÑÑ‚ на Ð²Ð°ÑˆÐ¸Ñ Ð±Ñ€Ð°Ð·ÑƒÑŠÑ€ не разрешават на редактора да изпълни запаметÑването. За целта използвайте клавиатурата (Ctrl/Cmd+C).","cut":"Отрежи","cutError":"ÐаÑтройките за ÑигурноÑÑ‚ на Ð’Ð°ÑˆÐ¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÑŠÑ€ не позволÑват на редактора автоматично да изъплни дейÑтвиÑта за отрÑзване. ÐœÐ¾Ð»Ñ Ð¿Ð¾Ð»Ð·Ð²Ð°Ð¹Ñ‚Ðµ клавиатурните команди за целта (ctrl+x).","paste":"Вмъкни","pasteArea":"Зона за вмъкване","pasteMsg":"Вмъкнете тук Ñъдъжанието Ñ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÐ°Ñ€Ð°Ñ‚Ð° (<STRONG>Ctrl/Cmd+V</STRONG>) и натиÑнете <STRONG>OK</STRONG>.","securityMsg":"Заради наÑтройките за ÑигурноÑÑ‚ на Ð’Ð°ÑˆÐ¸Ñ Ð±Ñ€Ð°ÑƒÐ·ÑŠÑ€, редакторът не може да прочете данните от клипборда коректно.","title":"Вмъкни"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Ðвтоматично","bgColorTitle":"Фонов цвÑÑ‚","colors":{"000":"Черно","800000":"КеÑтенÑво","8B4513":"СветлокафÑво","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Индиго","696969":"Тъмно Ñиво","B22222":"Огнено червено","A52A2A":"КафÑво","DAA520":"ЗлатиÑто","006400":"Тъмно зелено","40E0D0":"Тюркуазено","0000CD":"Средно Ñиньо","800080":"Пурпурно","808080":"Сиво","F00":"Червено","FF8C00":"Тъмно оранжево","FFD700":"Златно","008000":"Зелено","0FF":"Светло Ñиньо","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Още цветове","panelTitle":"Цветове","textColorTitle":"ЦвÑÑ‚ на шрифт"},"colordialog":{"clear":"ИзчиÑтване","highlight":"ОÑветÑване","options":"Цветови опции","selected":"Изберете цвÑÑ‚","title":"Изберете цвÑÑ‚"},"templates":{"button":"Шаблони","emptyListMsg":"(ÐÑма дефинирани шаблони)","insertOption":"Препокрива актуалното Ñъдържание","options":"Опции за шаблона","selectPromptMsg":"Изберете шаблон <br>(текущото Ñъдържание на редактора ще бъде загубено):","title":"Шаблони"},"contextmenu":{"options":"Опции на контекÑтното меню"},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"Препоръчително заглавие","cssClassInputLabel":"КлаÑове за CSS","edit":"ПромÑна на Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"ЛÑво на ДÑÑно (ЛнД)","langDirLabel":"ПоÑока на езика","langDirRTLLabel":"ДÑÑно на ЛÑво (ДнЛ)","languageCodeInputLabel":" Код на езика","remove":"Премахване на Div","styleSelectLabel":"Стил","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"Свиване на лентата Ñ Ð¸Ð½Ñтрументи","toolbarExpand":"РазширÑване на лентата Ñ Ð¸Ð½Ñтрументи","toolbarGroups":{"document":"Документ","clipboard":"Clipboard/Undo","editing":"ПромÑна","forms":"Форми","basicstyles":"Базови Ñтилове","paragraph":"Параграф","links":"Връзки","insert":"Вмъкване","styles":"Стилове","colors":"Цветове","tools":"ИнÑтрументи"},"toolbars":"Ленти Ñ Ð¸Ð½Ñтрументи"},"elementspath":{"eleLabel":"Път за елементите","eleTitle":"%1 елемент"},"find":{"find":"ТърÑене","findOptions":"Find Options","findWhat":"ТърÑи за:","matchCase":"Съвпадение","matchCyclic":"Циклично Ñъвпадение","matchWord":"Съвпадение Ñ Ð´ÑƒÐ¼Ð°","notFoundMsg":"УказаниÑÑ‚ текÑÑ‚ не е намерен.","replace":"Препокриване","replaceAll":"Препокрий вÑички","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Препокрива Ñ:","title":"ТърÑене и препокриване"},"fakeobjects":{"anchor":"Кука","flash":"Флаш анимациÑ","hiddenfield":"Скрито поле","iframe":"IFrame","unknown":"ÐеизвеÑтен обект"},"flash":{"access":"ДоÑтъп до Ñкрипт","accessAlways":"Винаги","accessNever":"Ðикога","accessSameDomain":"СъщиÑÑ‚ домейн","alignAbsBottom":"Ðай-долу","alignAbsMiddle":"Точно по Ñредата","alignBaseline":"Базова линиÑ","alignTextTop":"Върху текÑта","bgcolor":"ЦвÑÑ‚ на фона","chkFull":"Включи на цÑл екран","chkLoop":"Цикъл","chkMenu":"Разрешено Flash меню","chkPlay":"Ðвто. пуÑкане","flashvars":"Променливи за Флаш","hSpace":"Хоризонтален отÑтъп","properties":"ÐаÑтройки за флаш","propertiesTab":"ÐаÑтройки","quality":"КачеÑтво","qualityAutoHigh":"Ðвто. виÑоко","qualityAutoLow":"Ðвто. ниÑко","qualityBest":"Отлично","qualityHigh":"ВиÑоко","qualityLow":"ÐиÑко","qualityMedium":"Средно","scale":"ОразмерÑване","scaleAll":"Показва вÑичко","scaleFit":"Според мÑÑтото","scaleNoBorder":"Без рамка","title":"ÐаÑтройки за флаш","vSpace":"Вертикален отÑтъп","validateHSpace":"HSpace Ñ‚Ñ€Ñбва да е чиÑло.","validateSrc":"Уеб адреÑа не Ñ‚Ñ€Ñбва да е празен.","validateVSpace":"VSpace Ñ‚Ñ€Ñбва да е чиÑло.","windowMode":"Режим на прозореца","windowModeOpaque":"ПлътноÑÑ‚","windowModeTransparent":"ПрозрачноÑÑ‚","windowModeWindow":"Прозорец"},"font":{"fontSize":{"label":"Размер","voiceLabel":"Размер на шрифт","panelTitle":"Размер на шрифт"},"label":"Шрифт","panelTitle":"Име на шрифт","voiceLabel":"Шрифт"},"forms":{"button":{"title":"ÐаÑтройки на бутона","text":"ТекÑÑ‚ (ÑтойноÑÑ‚)","type":"Тип","typeBtn":"Бутон","typeSbm":"Добави","typeRst":"Ðулиране"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"ÐаÑтройки на радиобутон","value":"СтойноÑÑ‚","selected":"Избрано"},"form":{"title":"ÐаÑтройки на формата","menu":"ÐаÑтройки на формата","action":"ДейÑтвие","method":"Метод","encoding":"Кодиране"},"hidden":{"title":"ÐаÑтройки за Ñкрито поле","name":"Име","value":"СтойноÑÑ‚"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Ðалични опции","value":"СтойноÑÑ‚","size":"Размер","lines":"линии","chkMulti":"Allow multiple selections","opText":"ТекÑÑ‚","opValue":"СтойноÑÑ‚","btnAdd":"Добави","btnModify":"Промени","btnUp":"Ðа горе","btnDown":"Ðа долу","btnSetValue":"Set as selected value","btnDelete":"Изтриване"},"textarea":{"title":"Опции за текÑтовата зона","cols":"Колони","rows":"Редове"},"textfield":{"title":"ÐаÑтройки за текÑтово поле","name":"Име","value":"СтойноÑÑ‚","charWidth":"Ширина на знаците","maxChars":"МакÑ. знаци","type":"Тип","typeText":"ТекÑÑ‚","typePass":"Парола","typeEmail":"Email","typeSearch":"ТърÑене","typeTel":"Телефонен номер","typeUrl":"Уеб адреÑ"}},"format":{"label":"Формат","panelTitle":"Формат","tag_address":"ÐдреÑ","tag_div":"Параграф (DIV)","tag_h1":"Заглавие 1","tag_h2":"Заглавие 2","tag_h3":"Заглавие 3","tag_h4":"Заглавие 4","tag_h5":"Заглавие 5","tag_h6":"Заглавие 6","tag_p":"Ðормален","tag_pre":"Форматиран"},"horizontalrule":{"toolbar":"Вмъкване на хоризонтална линиÑ"},"iframe":{"border":"Показва рамка на карето","noUrl":"ÐœÐ¾Ð»Ñ Ð²ÑŠÐ²ÐµÐ´ÐµÑ‚Ðµ URL за iFrame","scrolling":"Вкл. Ñкролбаровете","title":"IFrame наÑтройки","toolbar":"IFrame"},"image":{"alertUrl":"МолÑ, въведете Ð¿ÑŠÐ»Ð½Ð¸Ñ Ð¿ÑŠÑ‚ до изображението","alt":"Ðлтернативен текÑÑ‚","border":"Рамка","btnUpload":"Изпрати Ñ Ð½Ð° Ñървъра","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Хоризонтален отÑтъп","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Инфо за Ñнимка","linkTab":"Връзка","lockRatio":"Заключване на Ñъотношението","menu":"ÐаÑтройки за Ñнимка","resetSize":"Ðулиране на размер","title":"ÐаÑтройки за Ñнимка","titleButton":"ÐаÑтойки за бутон за Ñнимка","upload":"Качване","urlMissing":"Image source URL is missing.","vSpace":"Вертикален отÑтъп","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Увеличаване на отÑтъпа","outdent":"ÐамалÑване на отÑтъпа"},"smiley":{"options":"Опции за уÑмивката","title":"Вмъкване на уÑмивка","toolbar":"УÑмивка"},"justify":{"block":"ДвуÑтранно подравнÑване","center":"Център","left":"Подравни в лÑво","right":"Подравни в дÑÑно"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Ключ за доÑтъп","advanced":"Разширено","advisoryContentType":"Препоръчителен тип на Ñъдържанието","advisoryTitle":"Препоръчително заглавие","anchor":{"toolbar":"Котва","menu":"ПромÑна на котва","title":"ÐаÑтройки на котва","name":"Име на котва","errorName":"ÐœÐ¾Ð»Ñ Ð²ÑŠÐ²ÐµÐ´ÐµÑ‚Ðµ име на котвата","remove":"Премахване на котва"},"anchorId":"По ID на елемент","anchorName":"По име на котва","charset":"Тип на ÑÐ²ÑŠÑ€Ð·Ð°Ð½Ð¸Ñ Ñ€ÐµÑурÑ","cssClasses":"КлаÑове за CSS","emailAddress":"E-mail aдреÑ","emailBody":"Съдържание","emailSubject":"Тема","id":"ID","info":"Инфо за връзката","langCode":"Код за езика","langDir":"ПоÑока на езика","langDirLTR":"ЛÑво на ДÑÑно (ЛнД)","langDirRTL":"ДÑÑно на ЛÑво (ДнЛ)","menu":"ПромÑна на връзка","name":"Име","noAnchors":"(ÐÑма котви в Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚)","noEmail":"ÐœÐ¾Ð»Ñ Ð²ÑŠÐ²ÐµÐ´ÐµÑ‚Ðµ e-mail aдреÑ","noUrl":"ÐœÐ¾Ð»Ñ Ð²ÑŠÐ²ÐµÐ´ÐµÑ‚Ðµ URL адреÑа","other":"<друго>","popupDependent":"ЗавиÑимоÑÑ‚ (Netscape)","popupFeatures":"Функции на изкачащ прозорец","popupFullScreen":"ЦÑл екран (IE)","popupLeft":"ЛÑва позициÑ","popupLocationBar":"Лента Ñ Ð»Ð¾ÐºÐ°Ñ†Ð¸Ñта","popupMenuBar":"Лента за меню","popupResizable":"ОразмерÑем","popupScrollBars":"Скролери","popupStatusBar":"СтатуÑна лента","popupToolbar":"Лента Ñ Ð¸Ð½Ñтрументи","popupTop":"Горна позициÑ","rel":"Връзка","selectAnchor":"Изберете котва","styles":"Стил","tabIndex":"Ред на доÑтъп","target":"Цел","targetFrame":"<frame>","targetFrameName":"Име на целевиÑÑ‚ прозорец","targetPopup":"<изкачащ прозорец>","targetPopupName":"Име на изкачащ прозорец","title":"Връзка","toAnchor":"Връзка към котва в текÑта","toEmail":"E-mail","toUrl":"Уеб адреÑ","toolbar":"Връзка","type":"Тип на връзката","unlink":"Премахни връзката","upload":"Качване"},"list":{"bulletedlist":"Вмъкване/Премахване на точков ÑпиÑък","numberedlist":"Вмъкване/Премахване на номериран ÑпиÑък"},"liststyle":{"armenian":"ÐрменÑко номериране","bulletedTitle":"Bulleted List Properties","circle":"Кръг","decimal":"ЧиÑла (1, 2, 3 и др.)","decimalLeadingZero":"ЧиÑла Ñ Ð²Ð¾Ð´ÐµÑ‰Ð° нула (01, 02, 03 и Ñ‚.н.)","disc":"ДиÑк","georgian":"ГрузинÑко номериране (an, ban, gan, и Ñ‚.н.)","lowerAlpha":"Малки букви (а, б, в, г, д и Ñ‚.н.)","lowerGreek":"Малки гръцки букви (алфа, бета, гама и Ñ‚.н.)","lowerRoman":"Малки римÑки чиÑла (i, ii, iii, iv, v и Ñ‚.н.)","none":"ÐÑма","notset":"<не е указано>","numberedTitle":"Numbered List Properties","square":"Квадрат","start":"Старт","type":"Тип","upperAlpha":"Големи букви (Ð, Б, Ð’, Г, Д и Ñ‚.н.)","upperRoman":"Големи римÑки чиÑла (I, II, III, IV, V и Ñ‚.н.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Вмъкнете параграф тук"},"maximize":{"maximize":"МакÑимизиране","minimize":"Минимизиране"},"newpage":{"toolbar":"Ðова Ñтраница"},"pagebreak":{"alt":"РазделÑне на Ñтраници","toolbar":"Вмъкване на нова Ñтраница при печат"},"pastetext":{"button":"Вмъкни като чиÑÑ‚ текÑÑ‚","title":"Вмъкни като чиÑÑ‚ текÑÑ‚"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Вмъкни от MS Word","toolbar":"Вмъкни от MS Word"},"preview":{"preview":"Преглед"},"print":{"toolbar":"Печат"},"removeformat":{"toolbar":"Премахване на форматирането"},"save":{"toolbar":"ЗапиÑ"},"selectall":{"toolbar":"Избери вÑичко"},"showblocks":{"toolbar":"Показва блокове"},"sourcearea":{"toolbar":"Източник"},"specialchar":{"options":"Опции за Ñпециален знак","title":"Избор на Ñпециален знак","toolbar":"Вмъкване на Ñпециален знак"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Речници","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Стилове","panelTitle":"Стилове за форматиране","panelTitle1":"Блокови Ñтилове","panelTitle2":"Вътрешни Ñтилове","panelTitle3":"Обектни Ñтилове"},"table":{"border":"Размер на рамката","caption":"Заглавие","cell":{"menu":"Клетка","insertBefore":"Вмъкване на клетка преди","insertAfter":"Вмъкване на клетка Ñлед","deleteCell":"Изтриване на клетки","merge":"Сливане на клетки","mergeRight":"Сливане в дÑÑно","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"ÐаÑтройки на клетката","cellType":"Тип на клетката","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Ðвто. преноÑ","hAlign":"Хоризонтално подравнÑване","vAlign":"Вертикално подравнÑване","alignBaseline":"Базова линиÑ","bgColor":"Фон","borderColor":"ЦвÑÑ‚ на рамката","data":"Данни","header":"Хедър","yes":"Да","no":"Ðе","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Изберете"},"cellPad":"ОтделÑне на клетките","cellSpace":"РазтоÑние между клетките","column":{"menu":"Колона","insertBefore":"Вмъкване на колона преди","insertAfter":"Вмъкване на колона Ñлед","deleteColumn":"Изтриване на колони"},"columns":"Колони","deleteTable":"Изтриване на таблица","headers":"Хедъри","headersBoth":"Заедно","headersColumn":"Първа колона","headersNone":"ÐÑма","headersRow":"Първи ред","invalidBorder":"Размерът на рамката Ñ‚Ñ€Ñбва да е чиÑло.","invalidCellPadding":"ОтÑтоÑнието на клетките Ñ‚Ñ€Ñбва да е позитивно чиÑло.","invalidCellSpacing":"Интервала в клетките Ñ‚Ñ€Ñбва да е позитивно чиÑло.","invalidCols":"БроÑÑ‚ колони Ñ‚Ñ€Ñбва да е по-голÑм от 0.","invalidHeight":"ВиÑочината на таблицата Ñ‚Ñ€Ñбва да е чиÑло.","invalidRows":"БроÑÑ‚ редове Ñ‚Ñ€Ñбва да е по-голÑм от 0.","invalidWidth":"Ширината на таблицата Ñ‚Ñ€Ñбва да е чиÑло.","menu":"ÐаÑтройки на таблицата","row":{"menu":"Ред","insertBefore":"Вмъкване на ред преди","insertAfter":"Вмъкване на ред Ñлед","deleteRow":"Изтриване на редове"},"rows":"Редове","summary":"Обща информациÑ","title":"ÐаÑтройки на таблицата","toolbar":"Таблица","widthPc":"процент","widthPx":"пикÑела","widthUnit":"единица за ширина"},"undo":{"redo":"Връщане на предишен ÑтатуÑ","undo":"Възтанови"},"wsc":{"btnIgnore":"Игнорирай","btnIgnoreAll":"Игнорирай вÑичко","btnReplace":"Препокриване","btnReplaceAll":"Препокрий вÑичко","btnUndo":"Възтанови","changeTo":"Промени на","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- ÐÑма препоръчани -","notAvailable":"СъжалÑваме, но уÑлугата не е доÑтъпна за момента","notInDic":"Ðе е в речника","oneChange":"Spell check complete: One word changed","progress":"ПроверÑва Ñе правопиÑа...","title":"Проверка на правопиÑ","toolbar":"Проверка на правопиÑ"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/bn.js b/wqflask/wqflask/static/packages/ckeditor/lang/bn.js
deleted file mode 100644
index 2e2ffb58..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/bn.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['bn']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"বà§à¦°à¦¾à¦‰à¦œ সারà§à¦­à¦¾à¦°","url":"URL","protocol":"পà§à¦°à§‹à¦Ÿà§‹à¦•à¦²","upload":"আপলোড","uploadSubmit":"ইহাকে সারà§à¦­à¦¾à¦°à§‡ পà§à¦°à§‡à¦°à¦¨ কর","image":"ছবির লেবেল যà§à¦•à§à¦¤ কর","flash":"ফà§à¦²à¦¾à¦¶ লেবেল যà§à¦•à§à¦¤ কর","form":"ফরà§à¦®","checkbox":"চেক বাকà§à¦¸","radio":"রেডিও বাটন","textField":"টেকà§à¦¸à¦Ÿ ফীলà§à¦¡","textarea":"টেকà§à¦¸à¦Ÿ à¦à¦°à¦¿à§Ÿà¦¾","hiddenField":"গà§à¦ªà§à¦¤ ফীলà§à¦¡","button":"বাটন","select":"বাছাই ফীলà§à¦¡","imageButton":"ছবির বাটন","notSet":"<সেট নেই>","id":"আইডি","name":"নাম","langDir":"ভাষা লেখার দিক","langDirLtr":"বাম থেকে ডান (LTR)","langDirRtl":"ডান থেকে বাম (RTL)","langCode":"ভাষা কোড","longDescr":"URL à¦à¦° লমà§à¦¬à¦¾ বরà§à¦£à¦¨à¦¾","cssClass":"সà§à¦Ÿà¦¾à¦‡à¦²-শীট কà§à¦²à¦¾à¦¸","advisoryTitle":"পরামরà§à¦¶ শীরà§à¦·à¦•","cssStyle":"সà§à¦Ÿà¦¾à¦‡à¦²","ok":"ওকে","cancel":"বাতিল","close":"Close","preview":"পà§à¦°à¦¿à¦­à¦¿à¦‰","resize":"Resize","generalTab":"General","advancedTab":"à¦à¦¡à¦­à¦¾à¦¨à§à¦¸à¦¡","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"টারà§à¦—েট","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"বাম থেকে ডান (LTR)","langDirRTL":"ডান থেকে বাম (RTL)","styles":"সà§à¦Ÿà¦¾à¦‡à¦²","cssClasses":"সà§à¦Ÿà¦¾à¦‡à¦²-শীট কà§à¦²à¦¾à¦¸","width":"পà§à¦°à¦¸à§à¦¥","height":"দৈরà§à¦˜à§à¦¯","align":"à¦à¦²à¦¾à¦‡à¦¨","alignLeft":"বামে","alignRight":"ডানে","alignCenter":"মাà¦à¦–ানে","alignJustify":"বà§à¦²à¦• জাসà§à¦Ÿà¦¿à¦«à¦¾à¦‡","alignTop":"উপর","alignMiddle":"মধà§à¦¯","alignBottom":"নীচে","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"বোলà§à¦¡","italic":"ইটালিক","strike":"সà§à¦Ÿà§à¦°à¦¾à¦‡à¦• থà§à¦°à§","subscript":"অধোলেখ","superscript":"অভিলেখ","underline":"আনà§à¦¡à¦¾à¦°à¦²à¦¾à¦‡à¦¨"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"কপি","copyError":"আপনার বà§à¦°à¦¾à¦‰à¦œà¦¾à¦°à§‡à¦° সà§à¦°à¦•à§à¦·à¦¾ সেটিংস à¦à¦¡à¦¿à¦Ÿà¦°à¦•à§‡ অটোমেটিক কপি করার অনà§à¦®à¦¤à¦¿ দেয়নি। দয়া করে à¦à¦‡ কাজের জনà§à¦¯ কিবোরà§à¦¡ বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ (Ctrl/Cmd+C)।","cut":"কাট","cutError":"আপনার বà§à¦°à¦¾à¦‰à¦œà¦¾à¦°à§‡à¦° সà§à¦°à¦•à§à¦·à¦¾ সেটিংস à¦à¦¡à¦¿à¦Ÿà¦°à¦•à§‡ অটোমেটিক কাট করার অনà§à¦®à¦¤à¦¿ দেয়নি। দয়া করে à¦à¦‡ কাজের জনà§à¦¯ কিবোরà§à¦¡ বà§à¦¯à¦¬à¦¹à¦¾à¦° করà§à¦¨ (Ctrl/Cmd+X)।","paste":"পেসà§à¦Ÿ","pasteArea":"Paste Area","pasteMsg":"অনà§à¦—à§à¦°à¦¹ করে নীচের বাকà§à¦¸à§‡ কিবোরà§à¦¡ বà§à¦¯à¦¬à¦¹à¦¾à¦° করে (<STRONG>Ctrl/Cmd+V</STRONG>) পেসà§à¦Ÿ করà§à¦¨ à¦à¦¬à¦‚ <STRONG>OK</STRONG> চাপ দিন","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"পেসà§à¦Ÿ"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"অটোমেটিক","bgColorTitle":"বেকগà§à¦°à¦¾à¦‰à¦¨à§à¦¡ রং","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"আরও রং...","panelTitle":"Colors","textColorTitle":"টেকà§à¦¸à§à¦Ÿ রং"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"টেমপà§à¦²à§‡à¦Ÿ","emptyListMsg":"(কোন টেমপà§à¦²à§‡à¦Ÿ ডিফাইন করা নেই)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"অনà§à¦—à§à¦°à¦¹ করে à¦à¦¡à¦¿à¦Ÿà¦°à§‡ ওপেন করার জনà§à¦¯ টেমপà§à¦²à§‡à¦Ÿ বাছাই করà§à¦¨<br>(আসল কনটেনà§à¦Ÿ হারিয়ে যাবে):","title":"কনটেনà§à¦Ÿ টেমপà§à¦²à§‡à¦Ÿ"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"খোজো","findOptions":"Find Options","findWhat":"যা খà§à¦à¦œà¦¤à§‡ হবে:","matchCase":"কেস মিলাও","matchCyclic":"Match cyclic","matchWord":"পà§à¦°à¦¾ শবà§à¦¦ মেলাও","notFoundMsg":"আপনার উলà§à¦²à§‡à¦–িত টেকসà§à¦Ÿ পাওয়া যায়নি","replace":"রিপà§à¦²à§‡à¦¸","replaceAll":"সব বদলে দাও","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"যার সাথে বদলাতে হবে:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs নীচে","alignAbsMiddle":"Abs উপর","alignBaseline":"মূল রেখা","alignTextTop":"টেকà§à¦¸à¦Ÿ উপর","bgcolor":"বেকগà§à¦°à¦¾à¦‰à¦¨à§à¦¡ রং","chkFull":"Allow Fullscreen","chkLoop":"লূপ","chkMenu":"ফà§à¦²à§à¦¯à¦¾à¦¶ মেনৠà¦à¦¨à¦¾à¦¬à¦² কর","chkPlay":"অটো পà§à¦²à§‡","flashvars":"Variables for Flash","hSpace":"হরাইজনà§à¦Ÿà¦¾à¦² সà§à¦ªà§‡à¦¸","properties":"ফà§à¦²à¦¾à¦¶ পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"সà§à¦•à§‡à¦²","scaleAll":"সব দেখাও","scaleFit":"নিখà§à¦à¦¤ ফিট","scaleNoBorder":"কোনো বরà§à¦¡à¦¾à¦° নেই","title":"ফà§à¦²à§à¦¯à¦¾à¦¶ পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","vSpace":"ভারà§à¦Ÿà¦¿à¦•à§‡à¦² সà§à¦ªà§‡à¦¸","validateHSpace":"HSpace must be a number.","validateSrc":"অনà§à¦—à§à¦°à¦¹ করে URL লিংক টাইপ করà§à¦¨","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"সাইজ","voiceLabel":"Font Size","panelTitle":"সাইজ"},"label":"ফনà§à¦Ÿ","panelTitle":"ফনà§à¦Ÿ","voiceLabel":"ফনà§à¦Ÿ"},"forms":{"button":{"title":"বাটন পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","text":"টেকà§à¦¸à¦Ÿ (ভà§à¦¯à¦¾à¦²à§)","type":"পà§à¦°à¦•à¦¾à¦°","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"চেক বকà§à¦¸ পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","radioTitle":"রেডিও বাটন পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","value":"ভà§à¦¯à¦¾à¦²à§","selected":"সিলেকà§à¦Ÿà§‡à¦¡"},"form":{"title":"ফরà§à¦® পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","menu":"ফরà§à¦® পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","action":"à¦à¦•à¦¶à§à¦¯à¦¨","method":"পদà§à¦§à¦¤à¦¿","encoding":"Encoding"},"hidden":{"title":"গà§à¦ªà§à¦¤ ফীলà§à¦¡ পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","name":"নাম","value":"ভà§à¦¯à¦¾à¦²à§"},"select":{"title":"বাছাই ফীলà§à¦¡ পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","selectInfo":"তথà§à¦¯","opAvail":"অনà§à¦¯à¦¾à¦¨à§à¦¯ বিকলà§à¦ª","value":"ভà§à¦¯à¦¾à¦²à§","size":"সাইজ","lines":"লাইন সমূহ","chkMulti":"à¦à¦•à¦¾à¦§à¦¿à¦• সিলেকশন à¦à¦²à¦¾à¦‰ কর","opText":"টেকà§à¦¸à¦Ÿ","opValue":"ভà§à¦¯à¦¾à¦²à§","btnAdd":"যà§à¦•à§à¦¤","btnModify":"বদলে দাও","btnUp":"উপর","btnDown":"নীচে","btnSetValue":"বাছাই করা ভà§à¦¯à¦¾à¦²à§ হিসেবে সেট কর","btnDelete":"ডিলীট"},"textarea":{"title":"টেকà§à¦¸à¦Ÿ à¦à¦°à¦¿à§Ÿà¦¾ পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","cols":"কলাম","rows":"রো"},"textfield":{"title":"টেকà§à¦¸à¦Ÿ ফীলà§à¦¡ পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","name":"নাম","value":"ভà§à¦¯à¦¾à¦²à§","charWidth":"কà§à¦¯à¦¾à¦°à§‡à¦•à§à¦Ÿà¦¾à¦° পà§à¦°à¦¶à¦¸à§à¦¤à¦¤à¦¾","maxChars":"সরà§à¦¬à¦¾à¦§à¦¿à¦• কà§à¦¯à¦¾à¦°à§‡à¦•à§à¦Ÿà¦¾à¦°","type":"টাইপ","typeText":"টেকà§à¦¸à¦Ÿ","typePass":"পাসওয়ারà§à¦¡","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"ফনà§à¦Ÿ ফরমেট","panelTitle":"ফনà§à¦Ÿ ফরমেট","tag_address":"ঠিকানা","tag_div":"শীরà§à¦·à¦• (DIV)","tag_h1":"শীরà§à¦·à¦• ১","tag_h2":"শীরà§à¦·à¦• ২","tag_h3":"শীরà§à¦·à¦• ৩","tag_h4":"শীরà§à¦·à¦• ৪","tag_h5":"শীরà§à¦·à¦• ৫","tag_h6":"শীরà§à¦·à¦• ৬","tag_p":"সাধারণ","tag_pre":"ফরà§à¦®à§‡à¦Ÿà§‡à¦¡"},"horizontalrule":{"toolbar":"রেখা যà§à¦•à§à¦¤ কর"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"অনà§à¦—à§à¦°à¦¹à¦• করে ছবির URL টাইপ করà§à¦¨","alt":"বিকলà§à¦ª টেকà§à¦¸à¦Ÿ","border":"বরà§à¦¡à¦¾à¦°","btnUpload":"ইহাকে সারà§à¦­à¦¾à¦°à§‡ পà§à¦°à§‡à¦°à¦¨ কর","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"হরাইজনà§à¦Ÿà¦¾à¦² সà§à¦ªà§‡à¦¸","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"ছবির তথà§à¦¯","linkTab":"লিংক","lockRatio":"অনà§à¦ªà¦¾à¦¤ লক কর","menu":"ছবির পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","resetSize":"সাইজ পূরà§à¦¬à¦¾à¦¬à¦¸à§à¦¥à¦¾à§Ÿ ফিরিয়ে দাও","title":"ছবির পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","titleButton":"ছবি বাটন পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","upload":"আপলোড","urlMissing":"Image source URL is missing.","vSpace":"ভারà§à¦Ÿà¦¿à¦•à§‡à¦² সà§à¦ªà§‡à¦¸","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"ইনডেনà§à¦Ÿ বাড়াও","outdent":"ইনডেনà§à¦Ÿ কমাও"},"smiley":{"options":"Smiley Options","title":"সà§à¦®à¦¾à¦‡à¦²à§€ যà§à¦•à§à¦¤ কর","toolbar":"সà§à¦®à¦¾à¦‡à¦²à§€"},"justify":{"block":"বà§à¦²à¦• জাসà§à¦Ÿà¦¿à¦«à¦¾à¦‡","center":"মাঠবরাবর ঘেষা","left":"বা দিকে ঘেà¦à¦·à¦¾","right":"ডান দিকে ঘেà¦à¦·à¦¾"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"à¦à¦•à§à¦¸à§‡à¦¸ কী","advanced":"à¦à¦¡à¦­à¦¾à¦¨à§à¦¸à¦¡","advisoryContentType":"পরামরà§à¦¶ কনà§à¦Ÿà§‡à¦¨à§à¦Ÿà§‡à¦° পà§à¦°à¦•à¦¾à¦°","advisoryTitle":"পরামরà§à¦¶ শীরà§à¦·à¦•","anchor":{"toolbar":"নোঙà§à¦—র","menu":"নোঙর পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","title":"নোঙর পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","name":"নোঙরের নাম","errorName":"নোঙরের নাম টাইপ করà§à¦¨","remove":"Remove Anchor"},"anchorId":"নোঙরের আইডি দিয়ে","anchorName":"নোঙরের নাম দিয়ে","charset":"লিংক রিসোরà§à¦¸ কà§à¦¯à¦¾à¦°à§‡à¦•à§à¦Ÿà¦° সেট","cssClasses":"সà§à¦Ÿà¦¾à¦‡à¦²-শীট কà§à¦²à¦¾à¦¸","emailAddress":"ইমেইল ঠিকানা","emailBody":"মেসেজের দেহ","emailSubject":"মেসেজের বিষয়","id":"আইডি","info":"লিংক তথà§à¦¯","langCode":"ভাষা লেখার দিক","langDir":"ভাষা লেখার দিক","langDirLTR":"বাম থেকে ডান (LTR)","langDirRTL":"ডান থেকে বাম (RTL)","menu":"লিংক সমà§à¦ªà¦¾à¦¦à¦¨","name":"নাম","noAnchors":"(No anchors available in the document)","noEmail":"অনà§à¦—à§à¦°à¦¹ করে ইমেইল à¦à¦¡à§à¦°à§‡à¦¸ টাইপ করà§à¦¨","noUrl":"অনà§à¦—à§à¦°à¦¹ করে URL লিংক টাইপ করà§à¦¨","other":"<other>","popupDependent":"ডিপেনà§à¦¡à§‡à¦¨à§à¦Ÿ (Netscape)","popupFeatures":"পপআপ উইনà§à¦¡à§‹ ফীচার সমূহ","popupFullScreen":"পূরà§à¦£ পরà§à¦¦à¦¾ জà§à§œà§‡ (IE)","popupLeft":"বামের পজিশন","popupLocationBar":"লোকেশন বার","popupMenuBar":"মেনà§à¦¯à§ বার","popupResizable":"Resizable","popupScrollBars":"সà§à¦•à§à¦°à¦² বার","popupStatusBar":"সà§à¦Ÿà§à¦¯à¦¾à¦Ÿà¦¾à¦¸ বার","popupToolbar":"টà§à¦² বার","popupTop":"ডানের পজিশন","rel":"Relationship","selectAnchor":"নোঙর বাছাই","styles":"সà§à¦Ÿà¦¾à¦‡à¦²","tabIndex":"টà§à¦¯à¦¾à¦¬ ইনà§à¦¡à§‡à¦•à§à¦¸","target":"টারà§à¦—েট","targetFrame":"<ফà§à¦°à§‡à¦®>","targetFrameName":"টারà§à¦—েট ফà§à¦°à§‡à¦®à§‡à¦° নাম","targetPopup":"<পপআপ উইনà§à¦¡à§‹>","targetPopupName":"পপআপ উইনà§à¦¡à§‹à¦° নাম","title":"লিংক","toAnchor":"à¦à¦‡ পেজে নোঙর কর","toEmail":"ইমেইল","toUrl":"URL","toolbar":"লিংক যà§à¦•à§à¦¤ কর","type":"লিংক পà§à¦°à¦•à¦¾à¦°","unlink":"লিংক সরাও","upload":"আপলোড"},"list":{"bulletedlist":"বà§à¦²à§‡à¦Ÿ লিসà§à¦Ÿ লেবেল","numberedlist":"সাংখà§à¦¯à¦¿à¦• লিসà§à¦Ÿà§‡à¦° লেবেল"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"নতà§à¦¨ পেজ"},"pagebreak":{"alt":"Page Break","toolbar":"পেজ বà§à¦°à§‡à¦•"},"pastetext":{"button":"সাদা টেকà§à¦¸à¦Ÿ হিসেবে পেসà§à¦Ÿ কর","title":"সাদা টেকà§à¦¸à¦Ÿ হিসেবে পেসà§à¦Ÿ কর"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"পেসà§à¦Ÿ (শবà§à¦¦)","toolbar":"পেসà§à¦Ÿ (শবà§à¦¦)"},"preview":{"preview":"পà§à¦°à¦¿à¦­à¦¿à¦‰"},"print":{"toolbar":"পà§à¦°à¦¿à¦¨à§à¦Ÿ"},"removeformat":{"toolbar":"ফরমেট সরাও"},"save":{"toolbar":"সংরকà§à¦·à¦¨ কর"},"selectall":{"toolbar":"সব সিলেকà§à¦Ÿ কর"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"সোরà§à¦¸"},"specialchar":{"options":"Special Character Options","title":"বিশেষ কà§à¦¯à¦¾à¦°à§‡à¦•à§à¦Ÿà¦¾à¦° বাছাই কর","toolbar":"বিশেষ অকà§à¦·à¦° যà§à¦•à§à¦¤ কর"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"সà§à¦Ÿà¦¾à¦‡à¦²","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"বরà§à¦¡à¦¾à¦° সাইজ","caption":"শীরà§à¦·à¦•","cell":{"menu":"সেল","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"সেল মà§à¦›à§‡ দাও","merge":"সেল জোড়া দাও","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"সেল পà§à¦¯à¦¾à¦¡à¦¿à¦‚","cellSpace":"সেল সà§à¦ªà§‡à¦¸","column":{"menu":"কলাম","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"কলাম মà§à¦›à§‡ দাও"},"columns":"কলাম","deleteTable":"টেবিল ডিলীট কর","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"টেবিল পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","row":{"menu":"রো","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"রো মà§à¦›à§‡ দাও"},"rows":"রো","summary":"সারাংশ","title":"টেবিল পà§à¦°à§‹à¦ªà¦¾à¦°à§à¦Ÿà¦¿","toolbar":"টেবিলের লেবেল যà§à¦•à§à¦¤ কর","widthPc":"শতকরা","widthPx":"পিকà§à¦¸à§‡à¦²","widthUnit":"width unit"},"undo":{"redo":"রি-ডà§","undo":"আনডà§"},"wsc":{"btnIgnore":"ইগনোর কর","btnIgnoreAll":"সব ইগনোর কর","btnReplace":"বদলে দাও","btnReplaceAll":"সব বদলে দাও","btnUndo":"আনà§à¦¡à§","changeTo":"à¦à¦¤à§‡ বদলাও","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"বানান পরীকà§à¦·à¦• ইনসà§à¦Ÿà¦² করা নেই। আপনি কি à¦à¦–নই à¦à¦Ÿà¦¾ ডাউনলোড করতে চান?","manyChanges":"বানান পরীকà§à¦·à¦¾ শেষ: %1 গà§à¦²à§‹ শবà§à¦¦ বদলে গà§à¦¯à¦¾à¦›à§‡","noChanges":"বানান পরীকà§à¦·à¦¾ শেষ: কোন শবà§à¦¦ পরিবরà§à¦¤à¦¨ করা হয়নি","noMispell":"বানান পরীকà§à¦·à¦¾ শেষ: কোন ভà§à¦² বানান পাওয়া যায়নি","noSuggestions":"- কোন সাজেশন নেই -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"শবà§à¦¦à¦•à§‹à¦·à§‡ নেই","oneChange":"বানান পরীকà§à¦·à¦¾ শেষ: à¦à¦•à¦Ÿà¦¿ মাতà§à¦° শবà§à¦¦ পরিবরà§à¦¤à¦¨ করা হয়েছে","progress":"বানান পরীকà§à¦·à¦¾ চলছে...","title":"Spell Check","toolbar":"বানান চেক"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/bs.js b/wqflask/wqflask/static/packages/ckeditor/lang/bs.js
deleted file mode 100644
index f12f8bec..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/bs.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['bs']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protokol","upload":"Šalji","uploadSubmit":"Šalji na server","image":"Slika","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<nije podešeno>","id":"Id","name":"Naziv","langDir":"Smjer pisanja","langDirLtr":"S lijeva na desno (LTR)","langDirRtl":"S desna na lijevo (RTL)","langCode":"Jezièni kôd","longDescr":"Dugaèki opis URL-a","cssClass":"Klase CSS stilova","advisoryTitle":"Advisory title","cssStyle":"Stil","ok":"OK","cancel":"Odustani","close":"Close","preview":"Prikaži","resize":"Resize","generalTab":"General","advancedTab":"Naprednije","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Prozor","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","styles":"Stil","cssClasses":"Klase CSS stilova","width":"Širina","height":"Visina","align":"Poravnanje","alignLeft":"Lijevo","alignRight":"Desno","alignCenter":"Centar","alignJustify":"Puno poravnanje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dno","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Boldiraj","italic":"Ukosi","strike":"Precrtaj","subscript":"Subscript","superscript":"Superscript","underline":"Podvuci"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosne postavke Vašeg pretraživaèa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Sigurnosne postavke vašeg pretraživaèa ne dozvoljavaju operacije automatskog rezanja. Molimo koristite kraticu na tastaturi (Ctrl/Cmd+X).","paste":"Zalijepi","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Zalijepi"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatska","bgColorTitle":"Boja pozadine","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Više boja...","panelTitle":"Colors","textColorTitle":"Boja teksta"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Templates","emptyListMsg":"(No templates defined)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Please select the template to open in the editor","title":"Content Templates"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory title","cssClassInputLabel":"Klase CSS stilova","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"S lijeva na desno (LTR)","langDirLabel":"Smjer pisanja","langDirRTLLabel":"S desna na lijevo (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Stil","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"Naði","findOptions":"Find Options","findWhat":"Naði šta:","matchCase":"Uporeðuj velika/mala slova","matchCyclic":"Match cyclic","matchWord":"Uporeðuj samo cijelu rijeè","notFoundMsg":"Traženi tekst nije pronaðen.","replace":"Zamjeni","replaceAll":"Zamjeni sve","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Zamjeni sa:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs dole","alignAbsMiddle":"Abs sredina","alignBaseline":"Bazno","alignTextTop":"Vrh teksta","bgcolor":"Boja pozadine","chkFull":"Allow Fullscreen","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Scale","scaleAll":"Show all","scaleFit":"Exact Fit","scaleNoBorder":"No Border","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"Molimo ukucajte URL link","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Velièina","voiceLabel":"Font Size","panelTitle":"Velièina"},"label":"Font","panelTitle":"Font","voiceLabel":"Font"},"forms":{"button":{"title":"Button Properties","text":"Text (Value)","type":"Type","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Action","method":"Method","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Name","value":"Value"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Value","size":"Size","lines":"lines","chkMulti":"Allow multiple selections","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"Delete"},"textarea":{"title":"Textarea Properties","cols":"Columns","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","type":"Type","typeText":"Text","typePass":"Password","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Ubaci horizontalnu liniju"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"Molimo ukucajte URL od slike.","alt":"Tekst na slici","border":"Okvir","btnUpload":"Šalji na server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info slike","linkTab":"Link","lockRatio":"Zakljuèaj odnos","menu":"Svojstva slike","resetSize":"Resetuj dimenzije","title":"Svojstva slike","titleButton":"Image Button Properties","upload":"Šalji","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Poveæaj uvod","outdent":"Smanji uvod"},"smiley":{"options":"Smiley Options","title":"Ubaci smješka","toolbar":"Smješko"},"justify":{"block":"Puno poravnanje","center":"Centralno poravnanje","left":"Lijevo poravnanje","right":"Desno poravnanje"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Pristupna tipka","advanced":"Naprednije","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"Po Id-u elementa","anchorName":"Po nazivu sidra","charset":"Linked Resource Charset","cssClasses":"Klase CSS stilova","emailAddress":"E-Mail Adresa","emailBody":"Poruka","emailSubject":"Subjekt poruke","id":"Id","info":"Link info","langCode":"Smjer pisanja","langDir":"Smjer pisanja","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","menu":"Izmjeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra na stranici)","noEmail":"Molimo ukucajte e-mail adresu","noUrl":"Molimo ukucajte URL link","other":"<other>","popupDependent":"Ovisno (Netscape)","popupFeatures":"Moguænosti popup prozora","popupFullScreen":"Cijeli ekran (IE)","popupLeft":"Lijeva pozicija","popupLocationBar":"Traka za lokaciju","popupMenuBar":"Izborna traka","popupResizable":"Resizable","popupScrollBars":"Scroll traka","popupStatusBar":"Statusna traka","popupToolbar":"Traka sa alatima","popupTop":"Gornja pozicija","rel":"Relationship","selectAnchor":"Izaberi sidro","styles":"Stil","tabIndex":"Tab indeks","target":"Prozor","targetFrame":"<frejm>","targetFrameName":"Target Frame Name","targetPopup":"<popup prozor>","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toolbar":"Ubaci/Izmjeni link","type":"Tip linka","unlink":"Izbriši link","upload":"Šalji"},"list":{"bulletedlist":"Lista","numberedlist":"Numerisana lista"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"Novi dokument"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Zalijepi kao obièan tekst","title":"Zalijepi kao obièan tekst"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Zalijepi iz Word-a","toolbar":"Zalijepi iz Word-a"},"preview":{"preview":"Prikaži"},"print":{"toolbar":"Štampaj"},"removeformat":{"toolbar":"Poništi format"},"save":{"toolbar":"Snimi"},"selectall":{"toolbar":"Selektuj sve"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"HTML kôd"},"specialchar":{"options":"Special Character Options","title":"Izaberi specijalni karakter","toolbar":"Ubaci specijalni karater"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Stil","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Okvir","caption":"Naslov","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Briši æelije","merge":"Spoji æelije","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Uvod æelija","cellSpace":"Razmak æelija","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Briši kolone"},"columns":"Kolona","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Svojstva tabele","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Briši redove"},"rows":"Redova","summary":"Summary","title":"Svojstva tabele","toolbar":"Tabela","widthPc":"posto","widthPx":"piksela","widthUnit":"width unit"},"undo":{"redo":"Ponovi","undo":"Vrati"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/ca.js b/wqflask/wqflask/static/packages/ckeditor/lang/ca.js
deleted file mode 100644
index 222aaa91..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/ca.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ca']={"editor":"Editor de text enriquit","editorPanel":"Panell de l'editor de text enriquit","common":{"editorHelp":"Premeu ALT 0 per ajuda","browseServer":"Veure servidor","url":"URL","protocol":"Protocol","upload":"Puja","uploadSubmit":"Envia-la al servidor","image":"Imatge","flash":"Flash","form":"Formulari","checkbox":"Casella de verificació","radio":"Botó d'opció","textField":"Camp de text","textarea":"Àrea de text","hiddenField":"Camp ocult","button":"Botó","select":"Camp de selecció","imageButton":"Botó d'imatge","notSet":"<no definit>","id":"Id","name":"Nom","langDir":"Direcció de l'idioma","langDirLtr":"D'esquerra a dreta (LTR)","langDirRtl":"De dreta a esquerra (RTL)","langCode":"Codi d'idioma","longDescr":"Descripció llarga de la URL","cssClass":"Classes del full d'estil","advisoryTitle":"Títol consultiu","cssStyle":"Estil","ok":"D'acord","cancel":"Cancel·la","close":"Tanca","preview":"Previsualitza","resize":"Arrossegueu per redimensionar","generalTab":"General","advancedTab":"Avançat","validateNumberFailed":"Aquest valor no és un número.","confirmNewPage":"Els canvis en aquest contingut que no es desin es perdran. Esteu segur que voleu carregar una pàgina nova?","confirmCancel":"Algunes opcions s'han canviat. Esteu segur que voleu tancar el quadre de diàleg?","options":"Opcions","target":"Destí","targetNew":"Nova finestra (_blank)","targetTop":"Finestra superior (_top)","targetSelf":"Mateixa finestra (_self)","targetParent":"Finestra pare (_parent)","langDirLTR":"D'esquerra a dreta (LTR)","langDirRTL":"De dreta a esquerra (RTL)","styles":"Estil","cssClasses":"Classes del full d'estil","width":"Amplada","height":"Alçada","align":"Alineació","alignLeft":"Ajusta a l'esquerra","alignRight":"Ajusta a la dreta","alignCenter":"Centre","alignJustify":"Justificat","alignTop":"Superior","alignMiddle":"Centre","alignBottom":"Inferior","alignNone":"None","invalidValue":"Valor no vàlid.","invalidHeight":"L'alçada ha de ser un número.","invalidWidth":"L'amplada ha de ser un número.","invalidCssLength":"El valor especificat per als \"%1\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).","invalidHtmlLength":"El valor especificat per als \"%1\" camps ha de ser un número positiu amb o sense unitat de mesura vàlida d'HTML (px o %).","invalidInlineStyle":"El valor especificat per l'estil en línia ha de constar d'una o més tuples amb el format \"name: value\", separats per punt i coma.","cssLengthTooltip":"Introduïu un número per un valor en píxels o un número amb una unitat vàlida de CSS (px, %, in, cm, mm, em, ex, pt o pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>"},"about":{"copy":"Copyright &copy; $1. Tots els drets reservats.","dlgTitle":"Quant al CKEditor","help":"Premi $1 per obtenir ajuda.","moreInfo":"Per informació sobre llicències visiteu el nostre lloc web:","title":"Quant al CKEditor","userGuide":"Manual d'usuari de CKEditor"},"basicstyles":{"bold":"Negreta","italic":"Cursiva","strike":"Ratllat","subscript":"Subíndex","superscript":"Superíndex","underline":"Subratllat"},"bidi":{"ltr":"Direcció del text d'esquerra a dreta","rtl":"Direcció del text de dreta a esquerra"},"blockquote":{"toolbar":"Bloc de cita"},"clipboard":{"copy":"Copiar","copyError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de copiar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+C).","cut":"Retallar","cutError":"La configuració de seguretat del vostre navegador no permet executar automàticament les operacions de retallar. Si us plau, utilitzeu el teclat (Ctrl/Cmd+X).","paste":"Enganxar","pasteArea":"Àrea d'enganxat","pasteMsg":"Si us plau, enganxi dins del següent camp utilitzant el teclat (<strong>Ctrl/Cmd+V</strong>) i premi OK.","securityMsg":"A causa de la configuració de seguretat del vostre navegador, l'editor no pot accedir a les dades del porta-retalls directament. Enganxeu-ho un altre cop en aquesta finestra.","title":"Enganxar"},"button":{"selectedLabel":"%1 (Seleccionat)"},"colorbutton":{"auto":"Automàtic","bgColorTitle":"Color de Fons","colors":{"000":"Negre","800000":"Grana","8B4513":"Marró sella","2F4F4F":"Gris pissarra fosca","008080":"Blau xarxet","000080":"Blau marí","4B0082":"Indi","696969":"Gris Fosc","B22222":"Foc Maó","A52A2A":"Marró","DAA520":"Solidago","006400":"Verd Fosc","40E0D0":"Turquesa","0000CD":"Blau 1/2","800080":"Lila","808080":"Gris","F00":"Vermell","FF8C00":"Taronja Fosc","FFD700":"Or","008000":"Verd","0FF":"Cian","00F":"Blau","EE82EE":"Violat","A9A9A9":"Gris clar","FFA07A":"Salmó clar","FFA500":"Taronja","FFFF00":"Groc","00FF00":"Verd Llima","AFEEEE":"Turquesa Pàl·lid","ADD8E6":"Blau Clar","DDA0DD":"Pruna","D3D3D3":"Gris Clar","FFF0F5":"Lavanda rosat","FAEBD7":"Blanc Antic","FFFFE0":"Groc Clar","F0FFF0":"Verd Pàl·lid","F0FFFF":"Atzur","F0F8FF":"Cian pàlid","E6E6FA":"Lavanda","FFF":"Blanc"},"more":"Més Colors...","panelTitle":"Colors","textColorTitle":"Color del Text"},"colordialog":{"clear":"Neteja","highlight":"Destacat","options":"Opcions del color","selected":"Color Seleccionat","title":"Seleccioni el color"},"templates":{"button":"Plantilles","emptyListMsg":"(No hi ha plantilles definides)","insertOption":"Reemplaça el contingut actual","options":"Opcions de plantilla","selectPromptMsg":"Seleccioneu una plantilla per usar a l'editor<br>(per defecte s'elimina el contingut actual):","title":"Plantilles de contingut"},"contextmenu":{"options":"Opcions del menú contextual"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Títol de guia","cssClassInputLabel":"Classes de la fulla d'estils","edit":"Edita la Capa","inlineStyleInputLabel":"Estil en línia","langDirLTRLabel":"D'esquerra a dreta (LTR)","langDirLabel":"Direcció de l'idioma","langDirRTLLabel":"De dreta a esquerra (RTL)","languageCodeInputLabel":" Codi d'idioma","remove":"Elimina la Capa","styleSelectLabel":"Estil","title":"Crea una Capa Contenidora","toolbar":"Crea una Capa Contenidora"},"toolbar":{"toolbarCollapse":"Redueix la barra d'eines","toolbarExpand":"Amplia la barra d'eines","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor de barra d'eines"},"elementspath":{"eleLabel":"Ruta dels elements","eleTitle":"%1 element"},"find":{"find":"Cerca","findOptions":"Opcions de Cerca","findWhat":"Cerca el:","matchCase":"Distingeix majúscules/minúscules","matchCyclic":"Coincidència cíclica","matchWord":"Només paraules completes","notFoundMsg":"El text especificat no s'ha trobat.","replace":"Reemplaça","replaceAll":"Reemplaça-ho tot","replaceSuccessMsg":"%1 ocurrència/es reemplaçada/es.","replaceWith":"Reemplaça amb:","title":"Cerca i reemplaça"},"fakeobjects":{"anchor":"Àncora","flash":"Animació Flash","hiddenfield":"Camp ocult","iframe":"IFrame","unknown":"Objecte desconegut"},"flash":{"access":"Accés a scripts","accessAlways":"Sempre","accessNever":"Mai","accessSameDomain":"El mateix domini","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Baseline","alignTextTop":"Text Superior","bgcolor":"Color de Fons","chkFull":"Permetre la pantalla completa","chkLoop":"Bucle","chkMenu":"Habilita menú Flash","chkPlay":"Reprodució automàtica","flashvars":"Variables de Flash","hSpace":"Espaiat horitzontal","properties":"Propietats del Flash","propertiesTab":"Propietats","quality":"Qualitat","qualityAutoHigh":"Alta automàtica","qualityAutoLow":"Baixa automàtica","qualityBest":"La millor","qualityHigh":"Alta","qualityLow":"Baixa","qualityMedium":"Mitjana","scale":"Escala","scaleAll":"Mostra-ho tot","scaleFit":"Mida exacta","scaleNoBorder":"Sense vores","title":"Propietats del Flash","vSpace":"Espaiat vertical","validateHSpace":"L'espaiat horitzontal ha de ser un número.","validateSrc":"La URL no pot estar buida.","validateVSpace":"L'espaiat vertical ha de ser un número.","windowMode":"Mode de la finestra","windowModeOpaque":"Opaca","windowModeTransparent":"Transparent","windowModeWindow":"Finestra"},"font":{"fontSize":{"label":"Mida","voiceLabel":"Mida de la lletra","panelTitle":"Mida de la lletra"},"label":"Tipus de lletra","panelTitle":"Tipus de lletra","voiceLabel":"Tipus de lletra"},"forms":{"button":{"title":"Propietats del botó","text":"Text (Valor)","type":"Tipus","typeBtn":"Botó","typeSbm":"Transmet formulari","typeRst":"Reinicia formulari"},"checkboxAndRadio":{"checkboxTitle":"Propietats de la casella de verificació","radioTitle":"Propietats del botó d'opció","value":"Valor","selected":"Seleccionat"},"form":{"title":"Propietats del formulari","menu":"Propietats del formulari","action":"Acció","method":"Mètode","encoding":"Codificació"},"hidden":{"title":"Propietats del camp ocult","name":"Nom","value":"Valor"},"select":{"title":"Propietats del camp de selecció","selectInfo":"Info","opAvail":"Opcions disponibles","value":"Valor","size":"Mida","lines":"Línies","chkMulti":"Permet múltiples seleccions","opText":"Text","opValue":"Valor","btnAdd":"Afegeix","btnModify":"Modifica","btnUp":"Amunt","btnDown":"Avall","btnSetValue":"Selecciona per defecte","btnDelete":"Elimina"},"textarea":{"title":"Propietats de l'àrea de text","cols":"Columnes","rows":"Files"},"textfield":{"title":"Propietats del camp de text","name":"Nom","value":"Valor","charWidth":"Amplada","maxChars":"Nombre màxim de caràcters","type":"Tipus","typeText":"Text","typePass":"Contrasenya","typeEmail":"Correu electrònic","typeSearch":"Cercar","typeTel":"Número de telèfon","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adreça","tag_div":"Normal (DIV)","tag_h1":"Encapçalament 1","tag_h2":"Encapçalament 2","tag_h3":"Encapçalament 3","tag_h4":"Encapçalament 4","tag_h5":"Encapçalament 5","tag_h6":"Encapçalament 6","tag_p":"Normal","tag_pre":"Formatejat"},"horizontalrule":{"toolbar":"Insereix línia horitzontal"},"iframe":{"border":"Mostra la vora del marc","noUrl":"Si us plau, introdueixi la URL de l'iframe","scrolling":"Activa les barres de desplaçament","title":"Propietats de l'IFrame","toolbar":"IFrame"},"image":{"alertUrl":"Si us plau, escriviu la URL de la imatge","alt":"Text alternatiu","border":"Vora","btnUpload":"Envia-la al servidor","button2Img":"Voleu transformar el botó d'imatge seleccionat en una simple imatge?","hSpace":"Espaiat horit.","img2Button":"Voleu transformar la imatge seleccionada en un botó d'imatge?","infoTab":"Informació de la imatge","linkTab":"Enllaç","lockRatio":"Bloqueja les proporcions","menu":"Propietats de la imatge","resetSize":"Restaura la mida","title":"Propietats de la imatge","titleButton":"Propietats del botó d'imatge","upload":"Puja","urlMissing":"Falta la URL de la imatge.","vSpace":"Espaiat vert.","validateBorder":"La vora ha de ser un nombre enter.","validateHSpace":"HSpace ha de ser un nombre enter.","validateVSpace":"VSpace ha de ser un nombre enter."},"indent":{"indent":"Augmenta el sagnat","outdent":"Redueix el sagnat"},"smiley":{"options":"Opcions d'emoticones","title":"Insereix una icona","toolbar":"Icona"},"justify":{"block":"Justificat","center":"Centrat","left":"Alinea a l'esquerra","right":"Alinea a la dreta"},"language":{"button":"Definir l'idioma","remove":"Eliminar idioma"},"link":{"acccessKey":"Clau d'accés","advanced":"Avançat","advisoryContentType":"Tipus de contingut consultiu","advisoryTitle":"Títol consultiu","anchor":{"toolbar":"Insereix/Edita àncora","menu":"Propietats de l'àncora","title":"Propietats de l'àncora","name":"Nom de l'àncora","errorName":"Si us plau, escriviu el nom de l'ancora","remove":"Remove Anchor"},"anchorId":"Per Id d'element","anchorName":"Per nom d'àncora","charset":"Conjunt de caràcters font enllaçat","cssClasses":"Classes del full d'estil","emailAddress":"Adreça de correu electrònic","emailBody":"Cos del missatge","emailSubject":"Assumpte del missatge","id":"Id","info":"Informació de l'enllaç","langCode":"Direcció de l'idioma","langDir":"Direcció de l'idioma","langDirLTR":"D'esquerra a dreta (LTR)","langDirRTL":"De dreta a esquerra (RTL)","menu":"Edita l'enllaç","name":"Nom","noAnchors":"(No hi ha àncores disponibles en aquest document)","noEmail":"Si us plau, escrigui l'adreça correu electrònic","noUrl":"Si us plau, escrigui l'enllaç URL","other":"<altre>","popupDependent":"Depenent (Netscape)","popupFeatures":"Característiques finestra popup","popupFullScreen":"Pantalla completa (IE)","popupLeft":"Posició esquerra","popupLocationBar":"Barra d'adreça","popupMenuBar":"Barra de menú","popupResizable":"Redimensionable","popupScrollBars":"Barres d'scroll","popupStatusBar":"Barra d'estat","popupToolbar":"Barra d'eines","popupTop":"Posició dalt","rel":"Relació","selectAnchor":"Selecciona una àncora","styles":"Estil","tabIndex":"Index de Tab","target":"Destí","targetFrame":"<marc>","targetFrameName":"Nom del marc de destí","targetPopup":"<finestra emergent>","targetPopupName":"Nom finestra popup","title":"Enllaç","toAnchor":"Àncora en aquesta pàgina","toEmail":"Correu electrònic","toUrl":"URL","toolbar":"Insereix/Edita enllaç","type":"Tipus d'enllaç","unlink":"Elimina l'enllaç","upload":"Puja"},"list":{"bulletedlist":"Llista de pics","numberedlist":"Llista numerada"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insereix el paràgraf aquí"},"maximize":{"maximize":"Maximitza","minimize":"Minimitza"},"newpage":{"toolbar":"Nova pàgina"},"pagebreak":{"alt":"Salt de pàgina","toolbar":"Insereix salt de pàgina"},"pastetext":{"button":"Enganxa com a text no formatat","title":"Enganxa com a text no formatat"},"pastefromword":{"confirmCleanup":"El text que voleu enganxar sembla provenir de Word. Voleu netejar aquest text abans que sigui enganxat?","error":"No ha estat possible netejar les dades enganxades degut a un error intern","title":"Enganxa des del Word","toolbar":"Enganxa des del Word"},"preview":{"preview":"Visualització prèvia"},"print":{"toolbar":"Imprimeix"},"removeformat":{"toolbar":"Elimina Format"},"save":{"toolbar":"Desa"},"selectall":{"toolbar":"Selecciona-ho tot"},"showblocks":{"toolbar":"Mostra els blocs"},"sourcearea":{"toolbar":"Codi font"},"specialchar":{"options":"Opcions de caràcters especials","title":"Selecciona el caràcter especial","toolbar":"Insereix caràcter especial"},"scayt":{"btn_about":"Quant a l'SCAYT","btn_dictionaries":"Diccionaris","btn_disable":"Deshabilita SCAYT","btn_enable":"Habilitat l'SCAYT","btn_langs":"Idiomes","btn_options":"Opcions","text_title":""},"stylescombo":{"label":"Estil","panelTitle":"Estils de format","panelTitle1":"Estils de bloc","panelTitle2":"Estils incrustats","panelTitle3":"Estils d'objecte"},"table":{"border":"Mida vora","caption":"Títol","cell":{"menu":"Cel·la","insertBefore":"Insereix abans","insertAfter":"Insereix després","deleteCell":"Suprimeix","merge":"Fusiona","mergeRight":"Fusiona a la dreta","mergeDown":"Fusiona avall","splitHorizontal":"Divideix horitzontalment","splitVertical":"Divideix verticalment","title":"Propietats de la cel·la","cellType":"Tipus de cel·la","rowSpan":"Expansió de files","colSpan":"Expansió de columnes","wordWrap":"Ajustar al contingut","hAlign":"Alineació Horizontal","vAlign":"Alineació Vertical","alignBaseline":"A la línia base","bgColor":"Color de fons","borderColor":"Color de la vora","data":"Dades","header":"Capçalera","yes":"Sí","no":"No","invalidWidth":"L'amplada de cel·la ha de ser un nombre.","invalidHeight":"L'alçada de cel·la ha de ser un nombre.","invalidRowSpan":"L'expansió de files ha de ser un nombre enter.","invalidColSpan":"L'expansió de columnes ha de ser un nombre enter.","chooseColor":"Trieu"},"cellPad":"Encoixinament de cel·les","cellSpace":"Espaiat de cel·les","column":{"menu":"Columna","insertBefore":"Insereix columna abans de","insertAfter":"Insereix columna darrera","deleteColumn":"Suprimeix una columna"},"columns":"Columnes","deleteTable":"Suprimeix la taula","headers":"Capçaleres","headersBoth":"Ambdues","headersColumn":"Primera columna","headersNone":"Cap","headersRow":"Primera fila","invalidBorder":"El gruix de la vora ha de ser un nombre.","invalidCellPadding":"L'encoixinament de cel·la ha de ser un nombre.","invalidCellSpacing":"L'espaiat de cel·la ha de ser un nombre.","invalidCols":"El nombre de columnes ha de ser un nombre major que 0.","invalidHeight":"L'alçada de la taula ha de ser un nombre.","invalidRows":"El nombre de files ha de ser un nombre major que 0.","invalidWidth":"L'amplada de la taula ha de ser un nombre.","menu":"Propietats de la taula","row":{"menu":"Fila","insertBefore":"Insereix fila abans de","insertAfter":"Insereix fila darrera","deleteRow":"Suprimeix una fila"},"rows":"Files","summary":"Resum","title":"Propietats de la taula","toolbar":"Taula","widthPc":"percentatge","widthPx":"píxels","widthUnit":"unitat d'amplada"},"undo":{"redo":"Refés","undo":"Desfés"},"wsc":{"btnIgnore":"Ignora","btnIgnoreAll":"Ignora-les totes","btnReplace":"Canvia","btnReplaceAll":"Canvia-les totes","btnUndo":"Desfés","changeTo":"Reemplaça amb","errorLoading":"Error carregant el servidor: %s.","ieSpellDownload":"Verificació ortogràfica no instal·lada. Voleu descarregar-ho ara?","manyChanges":"Verificació ortogràfica: s'han canviat %1 paraules","noChanges":"Verificació ortogràfica: no s'ha canviat cap paraula","noMispell":"Verificació ortogràfica acabada: no hi ha cap paraula mal escrita","noSuggestions":"Cap suggeriment","notAvailable":"El servei no es troba disponible ara.","notInDic":"No és al diccionari","oneChange":"Verificació ortogràfica: s'ha canviat una paraula","progress":"Verificació ortogràfica en curs...","title":"Comprova l'ortografia","toolbar":"Revisa l'ortografia"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/cs.js b/wqflask/wqflask/static/packages/ckeditor/lang/cs.js
deleted file mode 100644
index 3865e126..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/cs.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['cs']={"editor":"Textový editor","editorPanel":"Panel textového editoru","common":{"editorHelp":"StisknÄ›te ALT 0 pro nápovÄ›du","browseServer":"Vybrat na serveru","url":"URL","protocol":"Protokol","upload":"Odeslat","uploadSubmit":"Odeslat na server","image":"Obrázek","flash":"Flash","form":"Formulář","checkbox":"ZaÅ¡krtávací políÄko","radio":"PÅ™epínaÄ","textField":"Textové pole","textarea":"Textová oblast","hiddenField":"Skryté pole","button":"TlaÄítko","select":"Seznam","imageButton":"Obrázkové tlaÄítko","notSet":"<nenastaveno>","id":"Id","name":"Jméno","langDir":"SmÄ›r jazyka","langDirLtr":"Zleva doprava (LTR)","langDirRtl":"Zprava doleva (RTL)","langCode":"Kód jazyka","longDescr":"Dlouhý popis URL","cssClass":"Třída stylu","advisoryTitle":"Pomocný titulek","cssStyle":"Styl","ok":"OK","cancel":"ZruÅ¡it","close":"Zavřít","preview":"Náhled","resize":"Uchopit pro zmÄ›nu velikosti","generalTab":"Obecné","advancedTab":"Rozšířené","validateNumberFailed":"Zadaná hodnota není Äíselná.","confirmNewPage":"Jakékoliv neuložené zmÄ›ny obsahu budou ztraceny. SkuteÄnÄ› chcete otevřít novou stránku?","confirmCancel":"NÄ›která z nastavení byla zmÄ›nÄ›na. SkuteÄnÄ› chcete zavřít dialogové okno?","options":"Nastavení","target":"Cíl","targetNew":"Nové okno (_blank)","targetTop":"Okno nejvyšší úrovnÄ› (_top)","targetSelf":"Stejné okno (_self)","targetParent":"RodiÄovské okno (_parent)","langDirLTR":"Zleva doprava (LTR)","langDirRTL":"Zprava doleva (RTL)","styles":"Styly","cssClasses":"Třídy stylů","width":"Šířka","height":"Výška","align":"Zarovnání","alignLeft":"Vlevo","alignRight":"Vpravo","alignCenter":"Na stÅ™ed","alignJustify":"Zarovnat do bloku","alignTop":"Nahoru","alignMiddle":"Na stÅ™ed","alignBottom":"Dolů","alignNone":"Žádné","invalidValue":"Neplatná hodnota.","invalidHeight":"Zadaná výška musí být Äíslo.","invalidWidth":"Šířka musí být Äíslo.","invalidCssLength":"Hodnota urÄená pro pole \"%1\" musí být kladné Äíslo bez nebo s platnou jednotkou míry CSS (px, %, in, cm, mm, em, ex, pt, nebo pc).","invalidHtmlLength":"Hodnota urÄená pro pole \"%1\" musí být kladné Äíslo bez nebo s platnou jednotkou míry HTML (px nebo %).","invalidInlineStyle":"Hodnota urÄená pro řádkový styl se musí skládat z jedné nebo více n-tic ve formátu \"název : hodnota\", oddÄ›lené stÅ™edníky","cssLengthTooltip":"Zadejte Äíslo jako hodnotu v pixelech nebo Äíslo s platnou jednotkou CSS (px, %, v cm, mm, em, ex, pt, nebo pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupné</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"O aplikaci CKEditor","help":"ProhlédnÄ›te si $1 pro nápovÄ›du.","moreInfo":"Pro informace o lincenci navÅ¡tivte naÅ¡i webovou stránku:","title":"O aplikaci CKEditor","userGuide":"Uživatelská příruÄka CKEditor"},"basicstyles":{"bold":"TuÄné","italic":"Kurzíva","strike":"PÅ™eÅ¡krtnuté","subscript":"Dolní index","superscript":"Horní index","underline":"Podtržené"},"bidi":{"ltr":"SmÄ›r textu zleva doprava","rtl":"SmÄ›r textu zprava doleva"},"blockquote":{"toolbar":"Citace"},"clipboard":{"copy":"Kopírovat","copyError":"BezpeÄnostní nastavení vaÅ¡eho prohlížeÄe nedovolují editoru spustit funkci pro kopírování zvoleného textu do schránky. Prosím zkopírujte zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+C).","cut":"Vyjmout","cutError":"BezpeÄnostní nastavení vaÅ¡eho prohlížeÄe nedovolují editoru spustit funkci pro vyjmutí zvoleného textu do schránky. Prosím vyjmÄ›te zvolený text do schránky pomocí klávesnice (Ctrl/Cmd+X).","paste":"Vložit","pasteArea":"Oblast vkládání","pasteMsg":"Do následujícího pole vložte požadovaný obsah pomocí klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stisknÄ›te <STRONG>OK</STRONG>.","securityMsg":"Z důvodů nastavení bezpeÄnosti vaÅ¡eho prohlížeÄe nemůže editor pÅ™istupovat přímo do schránky. Obsah schránky prosím vložte znovu do tohoto okna.","title":"Vložit"},"button":{"selectedLabel":"%1 (Vybráno)"},"colorbutton":{"auto":"Automaticky","bgColorTitle":"Barva pozadí","colors":{"000":"ÄŒerná","800000":"KaÅ¡tanová","8B4513":"Sedlová hnÄ›Ä","2F4F4F":"TmavÄ› bledÄ› Å¡edá","008080":"Čírka","000080":"NámoÅ™nická modÅ™","4B0082":"Inkoustová","696969":"TmavÄ› Å¡edá","B22222":"Pálená cihla","A52A2A":"HnÄ›dá","DAA520":"Zlatý prut","006400":"TmavÄ› zelená","40E0D0":"Tyrkisová","0000CD":"StÅ™ednÄ› modrá","800080":"Purpurová","808080":"Å edá","F00":"ÄŒervená","FF8C00":"TmavÄ› oranžová","FFD700":"Zlatá","008000":"Zelená","0FF":"Azurová","00F":"Modrá","EE82EE":"Fialová","A9A9A9":"KalnÄ› Å¡edá","FFA07A":"SvÄ›tle lososová","FFA500":"Oranžová","FFFF00":"Žlutá","00FF00":"Limetková","AFEEEE":"BledÄ› tyrkisová","ADD8E6":"SvÄ›tle modrá","DDA0DD":"Å vestková","D3D3D3":"SvÄ›tle Å¡edá","FFF0F5":"LevandulovÄ› rumÄ›nná","FAEBD7":"Antická bílá","FFFFE0":"SvÄ›tle žlutá","F0FFF0":"Medová rosa","F0FFFF":"Azurová","F0F8FF":"AlenÄina modrá","E6E6FA":"Levandulová","FFF":"Bílá"},"more":"Více barev...","panelTitle":"Barvy","textColorTitle":"Barva textu"},"colordialog":{"clear":"VyÄistit","highlight":"Zvýraznit","options":"Nastavení barvy","selected":"Vybráno","title":"VýbÄ›r barvy"},"templates":{"button":"Å ablony","emptyListMsg":"(Není definována žádná Å¡ablona)","insertOption":"Nahradit aktuální obsah","options":"Nastavení Å¡ablon","selectPromptMsg":"Prosím zvolte Å¡ablonu pro otevÅ™ení v editoru<br>(aktuální obsah editoru bude ztracen):","title":"Å ablony obsahu"},"contextmenu":{"options":"Nastavení kontextové nabídky"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"NápovÄ›dní titulek","cssClassInputLabel":"Třídy stylů","edit":"ZmÄ›nit Div","inlineStyleInputLabel":"VnitÅ™ní styly","langDirLTRLabel":"Zleva doprava (LTR)","langDirLabel":"SmÄ›r jazyka","langDirRTLLabel":"Zprava doleva (RTL)","languageCodeInputLabel":" Kód jazyka","remove":"Odstranit Div","styleSelectLabel":"Styly","title":"VytvoÅ™it Div kontejner","toolbar":"VytvoÅ™it Div kontejner"},"toolbar":{"toolbarCollapse":"Skrýt panel nástrojů","toolbarExpand":"Zobrazit panel nástrojů","toolbarGroups":{"document":"Dokument","clipboard":"Schránka/ZpÄ›t","editing":"Úpravy","forms":"Formuláře","basicstyles":"Základní styly","paragraph":"Odstavec","links":"Odkazy","insert":"Vložit","styles":"Styly","colors":"Barvy","tools":"Nástroje"},"toolbars":"Panely nástrojů editoru"},"elementspath":{"eleLabel":"Cesta objektu","eleTitle":"%1 objekt"},"find":{"find":"Hledat","findOptions":"Možnosti hledání","findWhat":"Co hledat:","matchCase":"RozliÅ¡ovat velikost písma","matchCyclic":"Procházet opakovanÄ›","matchWord":"Pouze celá slova","notFoundMsg":"Hledaný text nebyl nalezen.","replace":"Nahradit","replaceAll":"Nahradit vÅ¡e","replaceSuccessMsg":"%1 nahrazení.","replaceWith":"Čím nahradit:","title":"Najít a nahradit"},"fakeobjects":{"anchor":"Záložka","flash":"Flash animace","hiddenfield":"Skryté pole","iframe":"IFrame","unknown":"Neznámý objekt"},"flash":{"access":"Přístup ke skriptu","accessAlways":"Vždy","accessNever":"Nikdy","accessSameDomain":"Ve stejné doménÄ›","alignAbsBottom":"Zcela dolů","alignAbsMiddle":"DoprostÅ™ed","alignBaseline":"Na úÄaří","alignTextTop":"Na horní okraj textu","bgcolor":"Barva pozadí","chkFull":"Povolit celoobrazovkový režim","chkLoop":"Opakování","chkMenu":"Nabídka Flash","chkPlay":"Automatické spuÅ¡tÄ›ní","flashvars":"PromÄ›nné pro Flash","hSpace":"Horizontální mezera","properties":"Vlastnosti Flashe","propertiesTab":"Vlastnosti","quality":"Kvalita","qualityAutoHigh":"Vysoká - auto","qualityAutoLow":"Nízká - auto","qualityBest":"Nejlepší","qualityHigh":"Vysoká","qualityLow":"Nejnižší","qualityMedium":"StÅ™ední","scale":"Zobrazit","scaleAll":"Zobrazit vÅ¡e","scaleFit":"PÅ™izpůsobit","scaleNoBorder":"Bez okraje","title":"Vlastnosti Flashe","vSpace":"Vertikální mezera","validateHSpace":"Zadaná horizontální mezera musí být Äíslo.","validateSrc":"Zadejte prosím URL odkazu","validateVSpace":"Zadaná vertikální mezera musí být Äíslo.","windowMode":"Režim okna","windowModeOpaque":"Neprůhledné","windowModeTransparent":"Průhledné","windowModeWindow":"Okno"},"font":{"fontSize":{"label":"Velikost","voiceLabel":"Velikost písma","panelTitle":"Velikost"},"label":"Písmo","panelTitle":"Písmo","voiceLabel":"Písmo"},"forms":{"button":{"title":"Vlastnosti tlaÄítka","text":"Popisek","type":"Typ","typeBtn":"TlaÄítko","typeSbm":"Odeslat","typeRst":"Obnovit"},"checkboxAndRadio":{"checkboxTitle":"Vlastnosti zaÅ¡krtávacího políÄka","radioTitle":"Vlastnosti pÅ™epínaÄe","value":"Hodnota","selected":"ZaÅ¡krtnuto"},"form":{"title":"Vlastnosti formuláře","menu":"Vlastnosti formuláře","action":"Akce","method":"Metoda","encoding":"Kódování"},"hidden":{"title":"Vlastnosti skrytého pole","name":"Název","value":"Hodnota"},"select":{"title":"Vlastnosti seznamu","selectInfo":"Info","opAvail":"Dostupná nastavení","value":"Hodnota","size":"Velikost","lines":"Řádků","chkMulti":"Povolit mnohonásobné výbÄ›ry","opText":"Text","opValue":"Hodnota","btnAdd":"PÅ™idat","btnModify":"ZmÄ›nit","btnUp":"Nahoru","btnDown":"Dolů","btnSetValue":"Nastavit jako vybranou hodnotu","btnDelete":"Smazat"},"textarea":{"title":"Vlastnosti textové oblasti","cols":"Sloupců","rows":"Řádků"},"textfield":{"title":"Vlastnosti textového pole","name":"Název","value":"Hodnota","charWidth":"Šířka ve znacích","maxChars":"Maximální poÄet znaků","type":"Typ","typeText":"Text","typePass":"Heslo","typeEmail":"Email","typeSearch":"Hledat","typeTel":"Telefonní Äíslo","typeUrl":"URL"}},"format":{"label":"Formát","panelTitle":"Formát","tag_address":"Adresa","tag_div":"Normální (DIV)","tag_h1":"Nadpis 1","tag_h2":"Nadpis 2","tag_h3":"Nadpis 3","tag_h4":"Nadpis 4","tag_h5":"Nadpis 5","tag_h6":"Nadpis 6","tag_p":"Normální","tag_pre":"Naformátováno"},"horizontalrule":{"toolbar":"Vložit vodorovnou linku"},"iframe":{"border":"Zobrazit okraj","noUrl":"Zadejte prosím URL obsahu pro IFrame","scrolling":"Zapnout posuvníky","title":"Vlastnosti IFrame","toolbar":"IFrame"},"image":{"alertUrl":"Zadejte prosím URL obrázku","alt":"Alternativní text","border":"Okraje","btnUpload":"Odeslat na server","button2Img":"SkuteÄnÄ› chcete pÅ™evést zvolené obrázkové tlaÄítko na obyÄejný obrázek?","hSpace":"Horizontální mezera","img2Button":"SkuteÄnÄ› chcete pÅ™evést zvolený obrázek na obrázkové tlaÄítko?","infoTab":"Informace o obrázku","linkTab":"Odkaz","lockRatio":"Zámek","menu":"Vlastnosti obrázku","resetSize":"Původní velikost","title":"Vlastnosti obrázku","titleButton":"Vlastností obrázkového tlaÄítka","upload":"Odeslat","urlMissing":"Zadané URL zdroje obrázku nebylo nalezeno.","vSpace":"Vertikální mezera","validateBorder":"Okraj musí být nastaven v celých Äíslech.","validateHSpace":"Horizontální mezera musí být nastavena v celých Äíslech.","validateVSpace":"Vertikální mezera musí být nastavena v celých Äíslech."},"indent":{"indent":"ZvÄ›tÅ¡it odsazení","outdent":"ZmenÅ¡it odsazení"},"smiley":{"options":"Nastavení smajlíků","title":"Vkládání smajlíků","toolbar":"Smajlíci"},"justify":{"block":"Zarovnat do bloku","center":"Zarovnat na stÅ™ed","left":"Zarovnat vlevo","right":"Zarovnat vpravo"},"language":{"button":"Nastavit jazyk","remove":"Odstranit jazyk"},"link":{"acccessKey":"Přístupový klíÄ","advanced":"Rozšířené","advisoryContentType":"Pomocný typ obsahu","advisoryTitle":"Pomocný titulek","anchor":{"toolbar":"Záložka","menu":"Vlastnosti záložky","title":"Vlastnosti záložky","name":"Název záložky","errorName":"Zadejte prosím název záložky","remove":"Odstranit záložku"},"anchorId":"Podle Id objektu","anchorName":"Podle jména kotvy","charset":"PÅ™iÅ™azená znaková sada","cssClasses":"Třída stylu","emailAddress":"E-mailová adresa","emailBody":"TÄ›lo zprávy","emailSubject":"PÅ™edmÄ›t zprávy","id":"Id","info":"Informace o odkazu","langCode":"Kód jazyka","langDir":"SmÄ›r jazyka","langDirLTR":"Zleva doprava (LTR)","langDirRTL":"Zprava doleva (RTL)","menu":"ZmÄ›nit odkaz","name":"Jméno","noAnchors":"(Ve stránce není definována žádná kotva!)","noEmail":"Zadejte prosím e-mailovou adresu","noUrl":"Zadejte prosím URL odkazu","other":"<jiný>","popupDependent":"Závislost (Netscape)","popupFeatures":"Vlastnosti vyskakovacího okna","popupFullScreen":"Celá obrazovka (IE)","popupLeft":"Levý okraj","popupLocationBar":"Panel umístÄ›ní","popupMenuBar":"Panel nabídky","popupResizable":"Umožňující mÄ›nit velikost","popupScrollBars":"Posuvníky","popupStatusBar":"Stavový řádek","popupToolbar":"Panel nástrojů","popupTop":"Horní okraj","rel":"Vztah","selectAnchor":"Vybrat kotvu","styles":"Styl","tabIndex":"PoÅ™adí prvku","target":"Cíl","targetFrame":"<rámec>","targetFrameName":"Název cílového rámu","targetPopup":"<vyskakovací okno>","targetPopupName":"Název vyskakovacího okna","title":"Odkaz","toAnchor":"Kotva v této stránce","toEmail":"E-mail","toUrl":"URL","toolbar":"Odkaz","type":"Typ odkazu","unlink":"Odstranit odkaz","upload":"Odeslat"},"list":{"bulletedlist":"Odrážky","numberedlist":"Číslování"},"liststyle":{"armenian":"Arménské","bulletedTitle":"Vlastnosti odrážek","circle":"Kroužky","decimal":"Arabská Äísla (1, 2, 3, atd.)","decimalLeadingZero":"Arabská Äísla uvozená nulou (01, 02, 03, atd.)","disc":"KoleÄka","georgian":"Gruzínské (an, ban, gan, atd.)","lowerAlpha":"Malá latinka (a, b, c, d, e, atd.)","lowerGreek":"Malé Å™ecké (alpha, beta, gamma, atd.)","lowerRoman":"Malé římské (i, ii, iii, iv, v, atd.)","none":"Nic","notset":"<nenastaveno>","numberedTitle":"Vlastnosti Äíslování","square":"ÄŒtverce","start":"PoÄátek","type":"Typ","upperAlpha":"Velká latinka (A, B, C, D, E, atd.)","upperRoman":"Velké římské (I, II, III, IV, V, atd.)","validateStartNumber":"Číslování musí zaÄínat celým Äíslem."},"magicline":{"title":"zde vložit odstavec"},"maximize":{"maximize":"Maximalizovat","minimize":"Minimalizovat"},"newpage":{"toolbar":"Nová stránka"},"pagebreak":{"alt":"Konec stránky","toolbar":"Vložit konec stránky"},"pastetext":{"button":"Vložit jako Äistý text","title":"Vložit jako Äistý text"},"pastefromword":{"confirmCleanup":"Jak je vidÄ›t, vkládaný text je kopírován z Wordu. Chcete jej pÅ™ed vložením vyÄistit?","error":"Z důvodu vnitÅ™ní chyby nebylo možné provést vyÄiÅ¡tÄ›ní vkládaného textu.","title":"Vložit z Wordu","toolbar":"Vložit z Wordu"},"preview":{"preview":"Náhled"},"print":{"toolbar":"Tisk"},"removeformat":{"toolbar":"Odstranit formátování"},"save":{"toolbar":"Uložit"},"selectall":{"toolbar":"Vybrat vÅ¡e"},"showblocks":{"toolbar":"Ukázat bloky"},"sourcearea":{"toolbar":"Zdroj"},"specialchar":{"options":"Nastavení speciálních znaků","title":"VýbÄ›r speciálního znaku","toolbar":"Vložit speciální znaky"},"scayt":{"btn_about":"O aplikaci SCAYT","btn_dictionaries":"Slovníky","btn_disable":"Vypnout SCAYT","btn_enable":"Zapnout SCAYT","btn_langs":"Jazyky","btn_options":"Nastavení","text_title":""},"stylescombo":{"label":"Styl","panelTitle":"Formátovací styly","panelTitle1":"Blokové styly","panelTitle2":"Řádkové styly","panelTitle3":"Objektové styly"},"table":{"border":"OhraniÄení","caption":"Popis","cell":{"menu":"Buňka","insertBefore":"Vložit buňku pÅ™ed","insertAfter":"Vložit buňku za","deleteCell":"Smazat buňky","merge":"SlouÄit buňky","mergeRight":"SlouÄit doprava","mergeDown":"SlouÄit dolů","splitHorizontal":"RozdÄ›lit buňky vodorovnÄ›","splitVertical":"RozdÄ›lit buňky svisle","title":"Vlastnosti buňky","cellType":"Typ buňky","rowSpan":"Spojit řádky","colSpan":"Spojit sloupce","wordWrap":"Zalamování","hAlign":"Vodorovné zarovnání","vAlign":"Svislé zarovnání","alignBaseline":"Na úÄaří","bgColor":"Barva pozadí","borderColor":"Barva okraje","data":"Data","header":"HlaviÄka","yes":"Ano","no":"Ne","invalidWidth":"Šířka buňky musí být Äíslo.","invalidHeight":"Zadaná výška buňky musí být Äíslená.","invalidRowSpan":"Zadaný poÄet slouÄených řádků musí být celé Äíslo.","invalidColSpan":"Zadaný poÄet slouÄených sloupců musí být celé Äíslo.","chooseColor":"VýbÄ›r"},"cellPad":"Odsazení obsahu v buňce","cellSpace":"Vzdálenost bunÄ›k","column":{"menu":"Sloupec","insertBefore":"Vložit sloupec pÅ™ed","insertAfter":"Vložit sloupec za","deleteColumn":"Smazat sloupec"},"columns":"Sloupce","deleteTable":"Smazat tabulku","headers":"Záhlaví","headersBoth":"Obojí","headersColumn":"První sloupec","headersNone":"Žádné","headersRow":"První řádek","invalidBorder":"Zdaná velikost okraje musí být Äíselná.","invalidCellPadding":"Zadané odsazení obsahu v buňce musí být Äíselné.","invalidCellSpacing":"Zadaná vzdálenost bunÄ›k musí být Äíselná.","invalidCols":"PoÄet sloupců musí být Äíslo vÄ›tší než 0.","invalidHeight":"Zadaná výška tabulky musí být Äíselná.","invalidRows":"PoÄet řádků musí být Äíslo vÄ›tší než 0.","invalidWidth":"Šířka tabulky musí být Äíslo.","menu":"Vlastnosti tabulky","row":{"menu":"Řádek","insertBefore":"Vložit řádek pÅ™ed","insertAfter":"Vložit řádek za","deleteRow":"Smazat řádky"},"rows":"Řádky","summary":"Souhrn","title":"Vlastnosti tabulky","toolbar":"Tabulka","widthPc":"procent","widthPx":"bodů","widthUnit":"jednotka šířky"},"undo":{"redo":"Znovu","undo":"ZpÄ›t"},"wsc":{"btnIgnore":"PÅ™eskoÄit","btnIgnoreAll":"PÅ™eskakovat vÅ¡e","btnReplace":"ZamÄ›nit","btnReplaceAll":"Zaměňovat vÅ¡e","btnUndo":"ZpÄ›t","changeTo":"ZmÄ›nit na","errorLoading":"Chyba nahrávání služby aplikace z: %s.","ieSpellDownload":"Kontrola pravopisu není nainstalována. Chcete ji nyní stáhnout?","manyChanges":"Kontrola pravopisu dokonÄena: %1 slov zmÄ›nÄ›no","noChanges":"Kontrola pravopisu dokonÄena: Beze zmÄ›n","noMispell":"Kontrola pravopisu dokonÄena: Žádné pravopisné chyby nenalezeny","noSuggestions":"- žádné návrhy -","notAvailable":"Omlouváme se, ale služba nyní není dostupná.","notInDic":"Není ve slovníku","oneChange":"Kontrola pravopisu dokonÄena: Jedno slovo zmÄ›nÄ›no","progress":"Probíhá kontrola pravopisu...","title":"Kontrola pravopisu","toolbar":"Zkontrolovat pravopis"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/cy.js b/wqflask/wqflask/static/packages/ckeditor/lang/cy.js
deleted file mode 100644
index 420a0546..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/cy.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['cy']={"editor":"Golygydd Testun Cyfoethog","editorPanel":"Panel Golygydd Testun Cyfoethog","common":{"editorHelp":"Gwasgwch ALT 0 am gymorth","browseServer":"Pori'r Gweinydd","url":"URL","protocol":"Protocol","upload":"Lanlwytho","uploadSubmit":"Anfon i'r Gweinydd","image":"Delwedd","flash":"Flash","form":"Ffurflen","checkbox":"Blwch ticio","radio":"Botwm Radio","textField":"Maes Testun","textarea":"Ardal Testun","hiddenField":"Maes Cudd","button":"Botwm","select":"Maes Dewis","imageButton":"Botwm Delwedd","notSet":"<heb osod>","id":"Id","name":"Name","langDir":"Cyfeiriad Iaith","langDirLtr":"Chwith i'r Dde (LTR)","langDirRtl":"Dde i'r Chwith (RTL)","langCode":"Cod Iaith","longDescr":"URL Disgrifiad Hir","cssClass":"Dosbarthiadau Dalen Arddull","advisoryTitle":"Teitl Cynghorol","cssStyle":"Arddull","ok":"Iawn","cancel":"Diddymu","close":"Cau","preview":"Rhagolwg","resize":"Ailfeintio","generalTab":"Cyffredinol","advancedTab":"Uwch","validateNumberFailed":"'Dyw'r gwerth hwn ddim yn rhif.","confirmNewPage":"Byddwch chi'n colli unrhyw newidiadau i'r cynnwys sydd heb eu cadw. Ydych am barhau i lwytho tudalen newydd?","confirmCancel":"Cafodd rhai o'r opsiynau eu newid. Ydych chi wir am gau'r deialog?","options":"Opsiynau","target":"Targed","targetNew":"Ffenest Newydd (_blank)","targetTop":"Ffenest ar y Brig (_top)","targetSelf":"Yr un Ffenest (_self)","targetParent":"Ffenest y Rhiant (_parent)","langDirLTR":"Chwith i'r Dde (LTR)","langDirRTL":"Dde i'r Chwith (RTL)","styles":"Arddull","cssClasses":"Dosbarthiadau Dalen Arddull","width":"Lled","height":"Uchder","align":"Alinio","alignLeft":"Chwith","alignRight":"Dde","alignCenter":"Canol","alignJustify":"Unioni","alignTop":"Brig","alignMiddle":"Canol","alignBottom":"Gwaelod","alignNone":"None","invalidValue":"Gwerth annilys.","invalidHeight":"Mae'n rhaid i'r uchder fod yn rhif.","invalidWidth":"Mae'n rhaid i'r lled fod yn rhif.","invalidCssLength":"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad CSS dilys (px, %, in, cm, mm, em, ex, pt, neu pc).","invalidHtmlLength":"Mae'n rhaid i'r gwerth ar gyfer maes \"%1\" fod yn rhif positif gyda neu heb uned fesuriad HTML dilys (px neu %).","invalidInlineStyle":"Mae'n rhaid i'r gwerth ar gyfer arddull mewn-llinell gynnwys un set neu fwy ar y fformat \"enw : gwerth\", wedi'u gwahanu gyda hanner colon.","cssLengthTooltip":"Rhowch rif am werth mewn picsel neu rhif gydag uned CSS dilys (px, %, in, cm, mm, em, pt neu pc).","unavailable":"%1<span class=\"cke_accessibility\">, ddim ar gael</span>"},"about":{"copy":"Hawlfraint &copy; $1. Cedwir pob hawl.","dlgTitle":"Ynghylch CKEditor","help":"Gwirio $1 am gymorth.","moreInfo":"Am wybodaeth ynghylch trwyddedau, ewch i'n gwefan:","title":"Ynghylch CKEditor","userGuide":"Canllawiau Defnyddiwr CKEditor"},"basicstyles":{"bold":"Bras","italic":"Italig","strike":"Llinell Trwyddo","subscript":"Is-sgript","superscript":"Uwchsgript","underline":"Tanlinellu"},"bidi":{"ltr":"Cyfeiriad testun o'r chwith i'r dde","rtl":"Cyfeiriad testun o'r dde i'r chwith"},"blockquote":{"toolbar":"Dyfyniad bloc"},"clipboard":{"copy":"Copïo","copyError":"'Dyw gosodiadau diogelwch eich porwr ddim yn caniatàu'r golygydd i gynnal 'gweithredoedd copïo' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+C).","cut":"Torri","cutError":"Nid yw gosodiadau diogelwch eich porwr yn caniatàu'r golygydd i gynnal 'gweithredoedd torri' yn awtomatig. Defnyddiwch y bysellfwrdd (Ctrl/Cmd+X).","paste":"Gludo","pasteArea":"Ardal Gludo","pasteMsg":"Gludwch i mewn i'r blwch canlynol gan ddefnyddio'r bysellfwrdd (<strong>Ctrl/Cmd+V</strong>) a phwyso <strong>Iawn</strong>.","securityMsg":"Oherwydd gosodiadau diogelwch eich porwr, 'dyw'r porwr ddim yn gallu ennill mynediad i'r data ar y clipfwrdd yn uniongyrchol. Mae angen i chi ei ludo eto i'r ffenestr hon.","title":"Gludo"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Awtomatig","bgColorTitle":"Lliw Cefndir","colors":{"000":"Du","800000":"Marwn","8B4513":"Brown Cyfrwy","2F4F4F":"Llechen Tywyll","008080":"Corhwyad","000080":"Nefi","4B0082":"Indigo","696969":"Llwyd Tywyll","B22222":"Bric Tân","A52A2A":"Brown","DAA520":"Rhoden Aur","006400":"Gwyrdd Tywyll","40E0D0":"Gwyrddlas","0000CD":"Glas Canolig","800080":"Porffor","808080":"Llwyd","F00":"Coch","FF8C00":"Oren Tywyll","FFD700":"Aur","008000":"Gwyrdd","0FF":"Cyan","00F":"Glas","EE82EE":"Fioled","A9A9A9":"Llwyd Pwl","FFA07A":"Samwn Golau","FFA500":"Oren","FFFF00":"Melyn","00FF00":"Leim","AFEEEE":"Gwyrddlas Golau","ADD8E6":"Glas Golau","DDA0DD":"Eirinen","D3D3D3":"Llwyd Golau","FFF0F5":"Gwrid Lafant","FAEBD7":"Gwyn Hynafol","FFFFE0":"Melyn Golau","F0FFF0":"Melwn Gwyrdd Golau","F0FFFF":"Aswr","F0F8FF":"Glas Alys","E6E6FA":"Lafant","FFF":"Gwyn"},"more":"Mwy o Liwiau...","panelTitle":"Lliwiau","textColorTitle":"Lliw Testun"},"colordialog":{"clear":"Clirio","highlight":"Uwcholeuo","options":"Opsiynau Lliw","selected":"Lliw a Ddewiswyd","title":"Dewis lliw"},"templates":{"button":"Templedi","emptyListMsg":"(Dim templedi wedi'u diffinio)","insertOption":"Amnewid y cynnwys go iawn","options":"Opsiynau Templedi","selectPromptMsg":"Dewiswch dempled i'w agor yn y golygydd","title":"Templedi Cynnwys"},"contextmenu":{"options":"Opsiynau Dewislen Cyd-destun"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Teitl Cynghorol","cssClassInputLabel":"Dosbarthiadau Ffeil Arddull","edit":"Golygu Div","inlineStyleInputLabel":"Arddull Mewn Llinell","langDirLTRLabel":"Chwith i'r Dde (LTR)","langDirLabel":"Cyfeiriad yr Iaith","langDirRTLLabel":"Dde i'r Chwith (RTL)","languageCodeInputLabel":" Cod Iaith","remove":"Tynnu Div","styleSelectLabel":"Arddull","title":"Creu Cynhwysydd Div","toolbar":"Creu Cynhwysydd Div"},"toolbar":{"toolbarCollapse":"Cyfangu'r Bar Offer","toolbarExpand":"Ehangu'r Bar Offer","toolbarGroups":{"document":"Dogfen","clipboard":"Clipfwrdd/Dadwneud","editing":"Golygu","forms":"Ffurflenni","basicstyles":"Arddulliau Sylfaenol","paragraph":"Paragraff","links":"Dolenni","insert":"Mewnosod","styles":"Arddulliau","colors":"Lliwiau","tools":"Offer"},"toolbars":"Bariau offer y golygydd"},"elementspath":{"eleLabel":"Llwybr elfennau","eleTitle":"Elfen %1"},"find":{"find":"Chwilio","findOptions":"Opsiynau Chwilio","findWhat":"Chwilio'r term:","matchCase":"Cydweddu'r cas","matchCyclic":"Cydweddu'n gylchol","matchWord":"Cydweddu gair cyfan","notFoundMsg":"Nid oedd y testun wedi'i ddarganfod.","replace":"Amnewid Un","replaceAll":"Amnewid Pob","replaceSuccessMsg":"Amnewidiwyd %1 achlysur.","replaceWith":"Amnewid gyda:","title":"Chwilio ac Amnewid"},"fakeobjects":{"anchor":"Angor","flash":"Animeiddiant Flash","hiddenfield":"Maes Cudd","iframe":"IFrame","unknown":"Gwrthrych Anhysbys"},"flash":{"access":"Mynediad Sgript","accessAlways":"Pob amser","accessNever":"Byth","accessSameDomain":"R'un parth","alignAbsBottom":"Gwaelod Abs","alignAbsMiddle":"Canol Abs","alignBaseline":"Baslinell","alignTextTop":"Testun Top","bgcolor":"Lliw cefndir","chkFull":"Caniatàu Sgrin Llawn","chkLoop":"Lwpio","chkMenu":"Galluogi Dewislen Flash","chkPlay":"AwtoChwarae","flashvars":"Newidynnau ar gyfer Flash","hSpace":"BwlchLl","properties":"Priodweddau Flash","propertiesTab":"Priodweddau","quality":"Ansawdd","qualityAutoHigh":"Uchel Awto","qualityAutoLow":"Isel Awto","qualityBest":"Gorau","qualityHigh":"Uchel","qualityLow":"Isel","qualityMedium":"Canolig","scale":"Graddfa","scaleAll":"Dangos pob","scaleFit":"Ffit Union","scaleNoBorder":"Dim Ymyl","title":"Priodweddau Flash","vSpace":"BwlchF","validateHSpace":"Rhaid i'r BwlchLl fod yn rhif.","validateSrc":"Ni all yr URL fod yn wag.","validateVSpace":"Rhaid i'r BwlchF fod yn rhif.","windowMode":"Modd ffenestr","windowModeOpaque":"Afloyw","windowModeTransparent":"Tryloyw","windowModeWindow":"Ffenestr"},"font":{"fontSize":{"label":"Maint","voiceLabel":"Maint y Ffont","panelTitle":"Maint y Ffont"},"label":"Ffont","panelTitle":"Enw'r Ffont","voiceLabel":"Ffont"},"forms":{"button":{"title":"Priodweddau Botymau","text":"Testun (Gwerth)","type":"Math","typeBtn":"Botwm","typeSbm":"Anfon","typeRst":"Ailosod"},"checkboxAndRadio":{"checkboxTitle":"Priodweddau Blwch Ticio","radioTitle":"Priodweddau Botwm Radio","value":"Gwerth","selected":"Dewiswyd"},"form":{"title":"Priodweddau Ffurflen","menu":"Priodweddau Ffurflen","action":"Gweithred","method":"Dull","encoding":"Amgodio"},"hidden":{"title":"Priodweddau Maes Cudd","name":"Enw","value":"Gwerth"},"select":{"title":"Priodweddau Maes Dewis","selectInfo":"Gwyb Dewis","opAvail":"Opsiynau ar Gael","value":"Gwerth","size":"Maint","lines":"llinellau","chkMulti":"Caniatàu aml-ddewisiadau","opText":"Testun","opValue":"Gwerth","btnAdd":"Ychwanegu","btnModify":"Newid","btnUp":"Lan","btnDown":"Lawr","btnSetValue":"Gosod fel gwerth a ddewiswyd","btnDelete":"Dileu"},"textarea":{"title":"Priodweddau Ardal Testun","cols":"Colofnau","rows":"Rhesi"},"textfield":{"title":"Priodweddau Maes Testun","name":"Enw","value":"Gwerth","charWidth":"Lled Nod","maxChars":"Uchafswm y Nodau","type":"Math","typeText":"Testun","typePass":"Cyfrinair","typeEmail":"Ebost","typeSearch":"Chwilio","typeTel":"Rhif Ffôn","typeUrl":"URL"}},"format":{"label":"Fformat","panelTitle":"Fformat Paragraff","tag_address":"Cyfeiriad","tag_div":"Normal (DIV)","tag_h1":"Pennawd 1","tag_h2":"Pennawd 2","tag_h3":"Pennawd 3","tag_h4":"Pennawd 4","tag_h5":"Pennawd 5","tag_h6":"Pennawd 6","tag_p":"Normal","tag_pre":"Wedi'i Fformatio"},"horizontalrule":{"toolbar":"Mewnosod Llinell Lorweddol"},"iframe":{"border":"Dangos ymyl y ffrâm","noUrl":"Rhowch URL yr iframe","scrolling":"Galluogi bariau sgrolio","title":"Priodweddau IFrame","toolbar":"IFrame"},"image":{"alertUrl":"Rhowch URL y ddelwedd","alt":"Testun Amgen","border":"Ymyl","btnUpload":"Anfon i'r Gweinydd","button2Img":"Ydych am drawsffurfio'r botwm ddelwedd hwn ar ddelwedd syml?","hSpace":"BwlchLl","img2Button":"Ydych am drawsffurfio'r ddelwedd hon ar fotwm delwedd?","infoTab":"Gwyb Delwedd","linkTab":"Dolen","lockRatio":"Cloi Cymhareb","menu":"Priodweddau Delwedd","resetSize":"Ailosod Maint","title":"Priodweddau Delwedd","titleButton":"Priodweddau Botwm Delwedd","upload":"Lanlwytho","urlMissing":"URL gwreiddiol y ddelwedd ar goll.","vSpace":"BwlchF","validateBorder":"Rhaid i'r ymyl fod yn gyfanrif.","validateHSpace":"Rhaid i'r HSpace fod yn gyfanrif.","validateVSpace":"Rhaid i'r VSpace fod yn gyfanrif."},"indent":{"indent":"Cynyddu'r Mewnoliad","outdent":"Lleihau'r Mewnoliad"},"smiley":{"options":"Opsiynau Gwenogluniau","title":"Mewnosod Gwenoglun","toolbar":"Gwenoglun"},"justify":{"block":"Unioni","center":"Alinio i'r Canol","left":"Alinio i'r Chwith","right":"Alinio i'r Dde"},"language":{"button":"Gosod iaith","remove":"Tynnu iaith"},"link":{"acccessKey":"Allwedd Mynediad","advanced":"Uwch","advisoryContentType":"Math y Cynnwys Cynghorol","advisoryTitle":"Teitl Cynghorol","anchor":{"toolbar":"Angor","menu":"Golygu'r Angor","title":"Priodweddau'r Angor","name":"Enw'r Angor","errorName":"Teipiwch enw'r angor","remove":"Tynnwch yr Angor"},"anchorId":"Gan Id yr Elfen","anchorName":"Gan Enw'r Angor","charset":"Set Nodau'r Adnodd Cysylltiedig","cssClasses":"Dosbarthiadau Dalen Arddull","emailAddress":"Cyfeiriad E-Bost","emailBody":"Corff y Neges","emailSubject":"Testun y Neges","id":"Id","info":"Gwyb y Ddolen","langCode":"Cod Iaith","langDir":"Cyfeiriad Iaith","langDirLTR":"Chwith i'r Dde (LTR)","langDirRTL":"Dde i'r Chwith (RTL)","menu":"Golygu Dolen","name":"Enw","noAnchors":"(Dim angorau ar gael yn y ddogfen)","noEmail":"Teipiwch gyfeiriad yr e-bost","noUrl":"Teipiwch URL y ddolen","other":"<eraill>","popupDependent":"Dibynnol (Netscape)","popupFeatures":"Nodweddion Ffenestr Bop","popupFullScreen":"Sgrin Llawn (IE)","popupLeft":"Safle Chwith","popupLocationBar":"Bar Safle","popupMenuBar":"Dewislen","popupResizable":"Ailfeintiol","popupScrollBars":"Barrau Sgrolio","popupStatusBar":"Bar Statws","popupToolbar":"Bar Offer","popupTop":"Safle Top","rel":"Perthynas","selectAnchor":"Dewiswch Angor","styles":"Arddull","tabIndex":"Indecs Tab","target":"Targed","targetFrame":"<ffrâm>","targetFrameName":"Enw Ffrâm y Targed","targetPopup":"<ffenestr bop>","targetPopupName":"Enw Ffenestr Bop","title":"Dolen","toAnchor":"Dolen at angor yn y testun","toEmail":"E-bost","toUrl":"URL","toolbar":"Dolen","type":"Math y Ddolen","unlink":"Datgysylltu","upload":"Lanlwytho"},"list":{"bulletedlist":"Mewnosod/Tynnu Rhestr Bwled","numberedlist":"Mewnosod/Tynnu Rhestr Rhifol"},"liststyle":{"armenian":"Rhifo Armeneg","bulletedTitle":"Priodweddau Rhestr Fwled","circle":"Cylch","decimal":"Degol (1, 2, 3, ayyb.)","decimalLeadingZero":"Degol â sero arweiniol (01, 02, 03, ayyb.)","disc":"Disg","georgian":"Rhifau Sioraidd (an, ban, gan, ayyb.)","lowerAlpha":"Alffa Is (a, b, c, d, e, ayyb.)","lowerGreek":"Groeg Is (alpha, beta, gamma, ayyb.)","lowerRoman":"Rhufeinig Is (i, ii, iii, iv, v, ayyb.)","none":"Dim","notset":"<heb osod>","numberedTitle":"Priodweddau Rhestr Rifol","square":"Sgwâr","start":"Dechrau","type":"Math","upperAlpha":"Alffa Uwch (A, B, C, D, E, ayyb.)","upperRoman":"Rhufeinig Uwch (I, II, III, IV, V, ayyb.)","validateStartNumber":"Rhaid bod y rhif cychwynnol yn gyfanrif."},"magicline":{"title":"Mewnosod paragraff yma"},"maximize":{"maximize":"Mwyhau","minimize":"Lleihau"},"newpage":{"toolbar":"Tudalen Newydd"},"pagebreak":{"alt":"Toriad Tudalen","toolbar":"Mewnosod Toriad Tudalen i Argraffu"},"pastetext":{"button":"Gludo fel testun plaen","title":"Gludo fel Testun Plaen"},"pastefromword":{"confirmCleanup":"Mae'r testun rydych chi am ludo wedi'i gopïo o Word. Ydych chi am ei lanhau cyn ei ludo?","error":"Doedd dim modd glanhau y data a ludwyd oherwydd gwall mewnol","title":"Gludo o Word","toolbar":"Gludo o Word"},"preview":{"preview":"Rhagolwg"},"print":{"toolbar":"Argraffu"},"removeformat":{"toolbar":"Tynnu Fformat"},"save":{"toolbar":"Cadw"},"selectall":{"toolbar":"Dewis Popeth"},"showblocks":{"toolbar":"Dangos Blociau"},"sourcearea":{"toolbar":"HTML"},"specialchar":{"options":"Opsiynau Nodau Arbennig","title":"Dewis Nod Arbennig","toolbar":"Mewnosod Nod Arbennig"},"scayt":{"btn_about":"Ynghylch SCAYT","btn_dictionaries":"Geiriaduron","btn_disable":"Analluogi SCAYT","btn_enable":"Galluogi SCAYT","btn_langs":"Ieithoedd","btn_options":"Opsiynau","text_title":""},"stylescombo":{"label":"Arddulliau","panelTitle":"Arddulliau Fformatio","panelTitle1":"Arddulliau Bloc","panelTitle2":"Arddulliau Mewnol","panelTitle3":"Arddulliau Gwrthrych"},"table":{"border":"Maint yr Ymyl","caption":"Pennawd","cell":{"menu":"Cell","insertBefore":"Mewnosod Cell Cyn","insertAfter":"Mewnosod Cell Ar Ôl","deleteCell":"Dileu Celloedd","merge":"Cyfuno Celloedd","mergeRight":"Cyfuno i'r Dde","mergeDown":"Cyfuno i Lawr","splitHorizontal":"Hollti'r Gell yn Lorweddol","splitVertical":"Hollti'r Gell yn Fertigol","title":"Priodweddau'r Gell","cellType":"Math y Gell","rowSpan":"Rhychwant Rhesi","colSpan":"Rhychwant Colofnau","wordWrap":"Lapio Geiriau","hAlign":"Aliniad Llorweddol","vAlign":"Aliniad Fertigol","alignBaseline":"Baslinell","bgColor":"Lliw Cefndir","borderColor":"Lliw Ymyl","data":"Data","header":"Pennyn","yes":"Ie","no":"Na","invalidWidth":"Mae'n rhaid i led y gell fod yn rhif.","invalidHeight":"Mae'n rhaid i uchder y gell fod yn rhif.","invalidRowSpan":"Mae'n rhaid i rychwant y rhesi fod yn gyfanrif.","invalidColSpan":"Mae'n rhaid i rychwant y colofnau fod yn gyfanrif.","chooseColor":"Dewis"},"cellPad":"Padio'r gell","cellSpace":"Bylchiad y gell","column":{"menu":"Colofn","insertBefore":"Mewnosod Colofn Cyn","insertAfter":"Mewnosod Colofn Ar Ôl","deleteColumn":"Dileu Colofnau"},"columns":"Colofnau","deleteTable":"Dileu Tabl","headers":"Penynnau","headersBoth":"Y Ddau","headersColumn":"Colofn gyntaf","headersNone":"Dim","headersRow":"Rhes gyntaf","invalidBorder":"Mae'n rhaid i faint yr ymyl fod yn rhif.","invalidCellPadding":"Mae'n rhaid i badiad y gell fod yn rhif positif.","invalidCellSpacing":"Mae'n rhaid i fylchiad y gell fod yn rhif positif.","invalidCols":"Mae'n rhaid cael o leiaf un golofn.","invalidHeight":"Mae'n rhaid i uchder y tabl fod yn rhif.","invalidRows":"Mae'n rhaid cael o leiaf un rhes.","invalidWidth":"Mae'n rhaid i led y tabl fod yn rhif.","menu":"Priodweddau'r Tabl","row":{"menu":"Rhes","insertBefore":"Mewnosod Rhes Cyn","insertAfter":"Mewnosod Rhes Ar Ôl","deleteRow":"Dileu Rhesi"},"rows":"Rhesi","summary":"Crynodeb","title":"Priodweddau'r Tabl","toolbar":"Tabl","widthPc":"y cant","widthPx":"picsel","widthUnit":"uned lled"},"undo":{"redo":"Ailwneud","undo":"Dadwneud"},"wsc":{"btnIgnore":"Anwybyddu Un","btnIgnoreAll":"Anwybyddu Pob","btnReplace":"Amnewid Un","btnReplaceAll":"Amnewid Pob","btnUndo":"Dadwneud","changeTo":"Newid i","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Gwirydd sillafu heb ei arsefydlu. A ydych am ei lawrlwytho nawr?","manyChanges":"Gwirio sillafu wedi gorffen: Newidiwyd %1 gair","noChanges":"Gwirio sillafu wedi gorffen: Dim newidiadau","noMispell":"Gwirio sillafu wedi gorffen: Dim camsillaf.","noSuggestions":"- Dim awgrymiadau -","notAvailable":"Nid yw'r gwasanaeth hwn ar gael yn bresennol.","notInDic":"Nid i'w gael yn y geiriadur","oneChange":"Gwirio sillafu wedi gorffen: Newidiwyd 1 gair","progress":"Gwirio sillafu yn ar y gweill...","title":"Gwirio Sillafu","toolbar":"Gwirio Sillafu"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/da.js b/wqflask/wqflask/static/packages/ckeditor/lang/da.js
deleted file mode 100644
index 32d3d184..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/da.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['da']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tryk ALT 0 for hjælp","browseServer":"Gennemse...","url":"URL","protocol":"Protokol","upload":"Upload","uploadSubmit":"Upload","image":"Indsæt billede","flash":"Indsæt Flash","form":"Indsæt formular","checkbox":"Indsæt afkrydsningsfelt","radio":"Indsæt alternativknap","textField":"Indsæt tekstfelt","textarea":"Indsæt tekstboks","hiddenField":"Indsæt skjult felt","button":"Indsæt knap","select":"Indsæt liste","imageButton":"Indsæt billedknap","notSet":"<intet valgt>","id":"Id","name":"Navn","langDir":"Tekstretning","langDirLtr":"Fra venstre mod højre (LTR)","langDirRtl":"Fra højre mod venstre (RTL)","langCode":"Sprogkode","longDescr":"Udvidet beskrivelse","cssClass":"Typografiark (CSS)","advisoryTitle":"Titel","cssStyle":"Typografi (CSS)","ok":"OK","cancel":"Annullér","close":"Luk","preview":"Forhåndsvisning","resize":"Træk for at skalere","generalTab":"Generelt","advancedTab":"Avanceret","validateNumberFailed":"Værdien er ikke et tal.","confirmNewPage":"Alt indhold, der ikke er blevet gemt, vil gå tabt. Er du sikker på, at du vil indlæse en ny side?","confirmCancel":"Nogle af indstillingerne er blevet ændret. Er du sikker på, at du vil lukke vinduet?","options":"Vis muligheder","target":"Mål","targetNew":"Nyt vindue (_blank)","targetTop":"Øverste vindue (_top)","targetSelf":"Samme vindue (_self)","targetParent":"Samme vindue (_parent)","langDirLTR":"Venstre til højre (LTR)","langDirRTL":"Højre til venstre (RTL)","styles":"Style","cssClasses":"Stylesheetklasser","width":"Bredde","height":"Højde","align":"Justering","alignLeft":"Venstre","alignRight":"Højre","alignCenter":"Centreret","alignJustify":"Lige margener","alignTop":"Øverst","alignMiddle":"Centreret","alignBottom":"Nederst","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Højde skal være et tal.","invalidWidth":"Bredde skal være et tal.","invalidCssLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Værdien specificeret for \"%1\" feltet skal være et positivt nummer med eller uden en CSS måleenhed (px eller %).","invalidInlineStyle":"Værdien specificeret for inline style skal indeholde en eller flere elementer med et format som \"name:value\", separeret af semikoloner","cssLengthTooltip":"Indsæt en numerisk værdi i pixel eller nummer med en gyldig CSS værdi (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, ikke tilgængelig</span>"},"about":{"copy":"Copyright &copy; $1. Alle rettigheder forbeholdes.","dlgTitle":"Om CKEditor","help":"Se $1 for at få hjælp.","moreInfo":"For informationer omkring licens, se venligst vores hjemmeside (på engelsk):","title":"Om CKEditor","userGuide":"CKEditor-brugermanual"},"basicstyles":{"bold":"Fed","italic":"Kursiv","strike":"Gennemstreget","subscript":"Sænket skrift","superscript":"Hævet skrift","underline":"Understreget"},"bidi":{"ltr":"Tekstretning fra venstre til højre","rtl":"Tekstretning fra højre til venstre"},"blockquote":{"toolbar":"Blokcitat"},"clipboard":{"copy":"Kopiér","copyError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at kopiere teksten (Ctrl/Cmd+C).","cut":"Klip","cutError":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Brug i stedet tastaturet til at klippe teksten (Ctrl/Cmd+X).","paste":"Indsæt","pasteArea":"Indsæt område","pasteMsg":"Indsæt i feltet herunder (<STRONG>Ctrl/Cmd+V</STRONG>) og klik på <STRONG>OK</STRONG>.","securityMsg":"Din browsers sikkerhedsindstillinger tillader ikke editoren at få automatisk adgang til udklipsholderen.<br><br>Du skal indsætte udklipsholderens indhold i dette vindue igen.","title":"Indsæt"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatisk","bgColorTitle":"Baggrundsfarve","colors":{"000":"Sort","800000":"Mørkerød","8B4513":"Mørk orange","2F4F4F":"Dark Slate Grå","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Mørkegrå","B22222":"Scarlet / Rød","A52A2A":"Brun","DAA520":"Guld","006400":"Mørkegrøn","40E0D0":"Tyrkis","0000CD":"Mellemblå","800080":"Lilla","808080":"Grå","F00":"Rød","FF8C00":"Mørk orange","FFD700":"Guld","008000":"Grøn","0FF":"Cyan","00F":"Blå","EE82EE":"Violet","A9A9A9":"Matgrå","FFA07A":"Laksefarve","FFA500":"Orange","FFFF00":"Gul","00FF00":"Lime","AFEEEE":"Mat tyrkis","ADD8E6":"Lyseblå","DDA0DD":"Plum","D3D3D3":"Lysegrå","FFF0F5":"Lavender Blush","FAEBD7":"Antikhvid","FFFFE0":"Lysegul","F0FFF0":"Gul / Beige","F0FFFF":"Himmeblå","F0F8FF":"Alice blue","E6E6FA":"Lavendel","FFF":"Hvid"},"more":"Flere farver...","panelTitle":"Farver","textColorTitle":"Tekstfarve"},"colordialog":{"clear":"Nulstil","highlight":"Markér","options":"Farvemuligheder","selected":"Valgt farve","title":"Vælg farve"},"templates":{"button":"Skabeloner","emptyListMsg":"(Der er ikke defineret nogen skabelon)","insertOption":"Erstat det faktiske indhold","options":"Skabelon muligheder","selectPromptMsg":"Vælg den skabelon, som skal åbnes i editoren (nuværende indhold vil blive overskrevet):","title":"Indholdsskabeloner"},"contextmenu":{"options":"Muligheder for hjælpemenu"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Vejledende titel","cssClassInputLabel":"Typografiark","edit":"Rediger Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Venstre til højre (LTR)","langDirLabel":"Sprogretning","langDirRTLLabel":"Højre til venstre (RTL)","languageCodeInputLabel":" Sprogkode","remove":"Slet Div","styleSelectLabel":"Style","title":"Opret Div Container","toolbar":"Opret Div Container"},"toolbar":{"toolbarCollapse":"Sammenklap værktøjslinje","toolbarExpand":"Udvid værktøjslinje","toolbarGroups":{"document":"Dokument","clipboard":"Udklipsholder/Fortryd","editing":"Redigering","forms":"Formularer","basicstyles":"Basis styles","paragraph":"Paragraf","links":"Links","insert":"Indsæt","styles":"Typografier","colors":"Farver","tools":"Værktøjer"},"toolbars":"Editors værktøjslinjer"},"elementspath":{"eleLabel":"Sti på element","eleTitle":"%1 element"},"find":{"find":"Søg","findOptions":"Find muligheder","findWhat":"Søg efter:","matchCase":"Forskel på store og små bogstaver","matchCyclic":"Match cyklisk","matchWord":"Kun hele ord","notFoundMsg":"Søgeteksten blev ikke fundet","replace":"Erstat","replaceAll":"Erstat alle","replaceSuccessMsg":"%1 forekomst(er) erstattet.","replaceWith":"Erstat med:","title":"Søg og erstat"},"fakeobjects":{"anchor":"Anker","flash":"Flashanimation","hiddenfield":"Skjult felt","iframe":"Iframe","unknown":"Ukendt objekt"},"flash":{"access":"Scriptadgang","accessAlways":"Altid","accessNever":"Aldrig","accessSameDomain":"Samme domæne","alignAbsBottom":"Absolut nederst","alignAbsMiddle":"Absolut centreret","alignBaseline":"Grundlinje","alignTextTop":"Toppen af teksten","bgcolor":"Baggrundsfarve","chkFull":"Tillad fuldskærm","chkLoop":"Gentagelse","chkMenu":"Vis Flash-menu","chkPlay":"Automatisk afspilning","flashvars":"Variabler for Flash","hSpace":"Vandret margen","properties":"Egenskaber for Flash","propertiesTab":"Egenskaber","quality":"Kvalitet","qualityAutoHigh":"Auto høj","qualityAutoLow":"Auto lav","qualityBest":"Bedste","qualityHigh":"Høj","qualityLow":"Lav","qualityMedium":"Medium","scale":"Skalér","scaleAll":"Vis alt","scaleFit":"Tilpas størrelse","scaleNoBorder":"Ingen ramme","title":"Egenskaber for Flash","vSpace":"Lodret margen","validateHSpace":"Vandret margen skal være et tal.","validateSrc":"Indtast hyperlink URL!","validateVSpace":"Lodret margen skal være et tal.","windowMode":"Vinduestilstand","windowModeOpaque":"Gennemsigtig (opaque)","windowModeTransparent":"Transparent","windowModeWindow":"Vindue"},"font":{"fontSize":{"label":"Skriftstørrelse","voiceLabel":"Skriftstørrelse","panelTitle":"Skriftstørrelse"},"label":"Skrifttype","panelTitle":"Skrifttype","voiceLabel":"Skrifttype"},"forms":{"button":{"title":"Egenskaber for knap","text":"Tekst","type":"Type","typeBtn":"Knap","typeSbm":"Send","typeRst":"Nulstil"},"checkboxAndRadio":{"checkboxTitle":"Egenskaber for afkrydsningsfelt","radioTitle":"Egenskaber for alternativknap","value":"Værdi","selected":"Valgt"},"form":{"title":"Egenskaber for formular","menu":"Egenskaber for formular","action":"Handling","method":"Metode","encoding":"Kodning (encoding)"},"hidden":{"title":"Egenskaber for skjult felt","name":"Navn","value":"Værdi"},"select":{"title":"Egenskaber for liste","selectInfo":"Generelt","opAvail":"Valgmuligheder","value":"Værdi","size":"Størrelse","lines":"Linjer","chkMulti":"Tillad flere valg","opText":"Tekst","opValue":"Værdi","btnAdd":"Tilføj","btnModify":"Redigér","btnUp":"Op","btnDown":"Ned","btnSetValue":"Sæt som valgt","btnDelete":"Slet"},"textarea":{"title":"Egenskaber for tekstboks","cols":"Kolonner","rows":"Rækker"},"textfield":{"title":"Egenskaber for tekstfelt","name":"Navn","value":"Værdi","charWidth":"Bredde (tegn)","maxChars":"Max. antal tegn","type":"Type","typeText":"Tekst","typePass":"Adgangskode","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Formatering","panelTitle":"Formatering","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formateret"},"horizontalrule":{"toolbar":"Indsæt vandret streg"},"iframe":{"border":"Vis kant på rammen","noUrl":"Venligst indsæt URL på iframen","scrolling":"Aktiver scrollbars","title":"Iframe egenskaber","toolbar":"Iframe"},"image":{"alertUrl":"Indtast stien til billedet","alt":"Alternativ tekst","border":"Ramme","btnUpload":"Upload fil til serveren","button2Img":"Vil du lave billedknappen om til et almindeligt billede?","hSpace":"Vandret margen","img2Button":"Vil du lave billedet om til en billedknap?","infoTab":"Generelt","linkTab":"Hyperlink","lockRatio":"Lås størrelsesforhold","menu":"Egenskaber for billede","resetSize":"Nulstil størrelse","title":"Egenskaber for billede","titleButton":"Egenskaber for billedknap","upload":"Upload","urlMissing":"Kilde på billed-URL mangler","vSpace":"Lodret margen","validateBorder":"Kant skal være et helt nummer.","validateHSpace":"HSpace skal være et helt nummer.","validateVSpace":"VSpace skal være et helt nummer."},"indent":{"indent":"Forøg indrykning","outdent":"Formindsk indrykning"},"smiley":{"options":"Smileymuligheder","title":"Vælg smiley","toolbar":"Smiley"},"justify":{"block":"Lige margener","center":"Centreret","left":"Venstrestillet","right":"Højrestillet"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Genvejstast","advanced":"Avanceret","advisoryContentType":"Indholdstype","advisoryTitle":"Titel","anchor":{"toolbar":"Indsæt/redigér bogmærke","menu":"Egenskaber for bogmærke","title":"Egenskaber for bogmærke","name":"Bogmærkenavn","errorName":"Indtast bogmærkenavn","remove":"Fjern bogmærke"},"anchorId":"Efter element-Id","anchorName":"Efter ankernavn","charset":"Tegnsæt","cssClasses":"Typografiark","emailAddress":"E-mailadresse","emailBody":"Besked","emailSubject":"Emne","id":"Id","info":"Generelt","langCode":"Tekstretning","langDir":"Tekstretning","langDirLTR":"Fra venstre mod højre (LTR)","langDirRTL":"Fra højre mod venstre (RTL)","menu":"Redigér hyperlink","name":"Navn","noAnchors":"(Ingen bogmærker i dokumentet)","noEmail":"Indtast e-mailadresse!","noUrl":"Indtast hyperlink-URL!","other":"<anden>","popupDependent":"Koblet/dependent (Netscape)","popupFeatures":"Egenskaber for popup","popupFullScreen":"Fuld skærm (IE)","popupLeft":"Position fra venstre","popupLocationBar":"Adresselinje","popupMenuBar":"Menulinje","popupResizable":"Justérbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Værktøjslinje","popupTop":"Position fra toppen","rel":"Relation","selectAnchor":"Vælg et anker","styles":"Typografi","tabIndex":"Tabulatorindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Destinationsvinduets navn","targetPopup":"<popup vindue>","targetPopupName":"Popupvinduets navn","title":"Egenskaber for hyperlink","toAnchor":"Bogmærke på denne side","toEmail":"E-mail","toUrl":"URL","toolbar":"Indsæt/redigér hyperlink","type":"Type","unlink":"Fjern hyperlink","upload":"Upload"},"list":{"bulletedlist":"Punktopstilling","numberedlist":"Talopstilling"},"liststyle":{"armenian":"Armensk nummering","bulletedTitle":"Værdier for cirkelpunktopstilling","circle":"Cirkel","decimal":"Decimal (1, 2, 3, osv.)","decimalLeadingZero":"Decimaler med 0 først (01, 02, 03, etc.)","disc":"Værdier for diskpunktopstilling","georgian":"Georgiansk nummering (an, ban, gan, etc.)","lowerAlpha":"Små alfabet (a, b, c, d, e, etc.)","lowerGreek":"Små græsk (alpha, beta, gamma, etc.)","lowerRoman":"Små romerske (i, ii, iii, iv, v, etc.)","none":"Ingen","notset":"<ikke defineret>","numberedTitle":"Egenskaber for nummereret liste","square":"Firkant","start":"Start","type":"Type","upperAlpha":"Store alfabet (A, B, C, D, E, etc.)","upperRoman":"Store romerske (I, II, III, IV, V, etc.)","validateStartNumber":"Den nummererede liste skal starte med et rundt nummer"},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maksimér","minimize":"Minimér"},"newpage":{"toolbar":"Ny side"},"pagebreak":{"alt":"Sideskift","toolbar":"Indsæt sideskift"},"pastetext":{"button":"Indsæt som ikke-formateret tekst","title":"Indsæt som ikke-formateret tekst"},"pastefromword":{"confirmCleanup":"Den tekst du forsøger at indsætte ser ud til at komme fra Word. Vil du rense teksten før den indsættes?","error":"Det var ikke muligt at fjerne formatteringen på den indsatte tekst grundet en intern fejl","title":"Indsæt fra Word","toolbar":"Indsæt fra Word"},"preview":{"preview":"Vis eksempel"},"print":{"toolbar":"Udskriv"},"removeformat":{"toolbar":"Fjern formatering"},"save":{"toolbar":"Gem"},"selectall":{"toolbar":"Vælg alt"},"showblocks":{"toolbar":"Vis afsnitsmærker"},"sourcearea":{"toolbar":"Kilde"},"specialchar":{"options":"Muligheder for specialkarakterer","title":"Vælg symbol","toolbar":"Indsæt symbol"},"scayt":{"btn_about":"Om SCAYT","btn_dictionaries":"Ordbøger","btn_disable":"Deaktivér SCAYT","btn_enable":"Aktivér SCAYT","btn_langs":"Sprog","btn_options":"Indstillinger","text_title":""},"stylescombo":{"label":"Typografi","panelTitle":"Formattering på stylesheet","panelTitle1":"Block typografi","panelTitle2":"Inline typografi","panelTitle3":"Object typografi"},"table":{"border":"Rammebredde","caption":"Titel","cell":{"menu":"Celle","insertBefore":"Indsæt celle før","insertAfter":"Indsæt celle efter","deleteCell":"Slet celle","merge":"Flet celler","mergeRight":"Flet til højre","mergeDown":"Flet nedad","splitHorizontal":"Del celle vandret","splitVertical":"Del celle lodret","title":"Celleegenskaber","cellType":"Celletype","rowSpan":"Række span (rows span)","colSpan":"Kolonne span (columns span)","wordWrap":"Tekstombrydning","hAlign":"Vandret justering","vAlign":"Lodret justering","alignBaseline":"Grundlinje","bgColor":"Baggrundsfarve","borderColor":"Rammefarve","data":"Data","header":"Hoved","yes":"Ja","no":"Nej","invalidWidth":"Cellebredde skal være et tal.","invalidHeight":"Cellehøjde skal være et tal.","invalidRowSpan":"Række span skal være et heltal.","invalidColSpan":"Kolonne span skal være et heltal.","chooseColor":"Vælg"},"cellPad":"Cellemargen","cellSpace":"Celleafstand","column":{"menu":"Kolonne","insertBefore":"Indsæt kolonne før","insertAfter":"Indsæt kolonne efter","deleteColumn":"Slet kolonne"},"columns":"Kolonner","deleteTable":"Slet tabel","headers":"Hoved","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første række","invalidBorder":"Rammetykkelse skal være et tal.","invalidCellPadding":"Cellemargen skal være et tal.","invalidCellSpacing":"Celleafstand skal være et tal.","invalidCols":"Antallet af kolonner skal være større end 0.","invalidHeight":"Tabelhøjde skal være et tal.","invalidRows":"Antallet af rækker skal være større end 0.","invalidWidth":"Tabelbredde skal være et tal.","menu":"Egenskaber for tabel","row":{"menu":"Række","insertBefore":"Indsæt række før","insertAfter":"Indsæt række efter","deleteRow":"Slet række"},"rows":"Rækker","summary":"Resumé","title":"Egenskaber for tabel","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"Bredde på enhed"},"undo":{"redo":"Annullér fortryd","undo":"Fortryd"},"wsc":{"btnIgnore":"Ignorér","btnIgnoreAll":"Ignorér alle","btnReplace":"Erstat","btnReplaceAll":"Erstat alle","btnUndo":"Tilbage","changeTo":"Forslag","errorLoading":"Fejl ved indlæsning af host: %s.","ieSpellDownload":"Stavekontrol ikke installeret. Vil du installere den nu?","manyChanges":"Stavekontrol færdig: %1 ord ændret","noChanges":"Stavekontrol færdig: Ingen ord ændret","noMispell":"Stavekontrol færdig: Ingen fejl fundet","noSuggestions":"(ingen forslag)","notAvailable":"Stavekontrol er desværre ikke tilgængelig.","notInDic":"Ikke i ordbogen","oneChange":"Stavekontrol færdig: Et ord ændret","progress":"Stavekontrollen arbejder...","title":"Stavekontrol","toolbar":"Stavekontrol"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/de.js b/wqflask/wqflask/static/packages/ckeditor/lang/de.js
deleted file mode 100644
index a056b364..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/de.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['de']={"editor":"WYSIWYG-Editor","editorPanel":"WYSIWYG-Editor-Leiste","common":{"editorHelp":"Drücken Sie ALT 0 für Hilfe","browseServer":"Server durchsuchen","url":"URL","protocol":"Protokoll","upload":"Hochladen","uploadSubmit":"Zum Server senden","image":"Bild","flash":"Flash","form":"Formular","checkbox":"Checkbox","radio":"Radiobutton","textField":"Textfeld einzeilig","textarea":"Textfeld mehrzeilig","hiddenField":"Verstecktes Feld","button":"Klickbutton","select":"Auswahlfeld","imageButton":"Bildbutton","notSet":"<nichts>","id":"ID","name":"Name","langDir":"Schreibrichtung","langDirLtr":"Links nach Rechts (LTR)","langDirRtl":"Rechts nach Links (RTL)","langCode":"Sprachenkürzel","longDescr":"Langform URL","cssClass":"Stylesheet Klasse","advisoryTitle":"Titel Beschreibung","cssStyle":"Style","ok":"OK","cancel":"Abbrechen","close":"Schließen","preview":"Vorschau","resize":"Zum Vergrößern ziehen","generalTab":"Allgemein","advancedTab":"Erweitert","validateNumberFailed":"Dieser Wert ist keine Nummer.","confirmNewPage":"Alle nicht gespeicherten Änderungen gehen verlohren. Sind Sie sicher die neue Seite zu laden?","confirmCancel":"Einige Optionen wurden geändert. Wollen Sie den Dialog dennoch schließen?","options":"Optionen","target":"Zielseite","targetNew":"Neues Fenster (_blank)","targetTop":"Oberstes Fenster (_top)","targetSelf":"Gleiches Fenster (_self)","targetParent":"Oberes Fenster (_parent)","langDirLTR":"Links nach Rechts (LNR)","langDirRTL":"Rechts nach Links (RNL)","styles":"Style","cssClasses":"Stylesheet Klasse","width":"Breite","height":"Höhe","align":"Ausrichtung","alignLeft":"Links","alignRight":"Rechts","alignCenter":"Zentriert","alignJustify":"Blocksatz","alignTop":"Oben","alignMiddle":"Mitte","alignBottom":"Unten","alignNone":"Keine","invalidValue":"Ungültiger Wert.","invalidHeight":"Höhe muss eine Zahl sein.","invalidWidth":"Breite muss eine Zahl sein.","invalidCssLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","invalidHtmlLength":"Wert spezifiziert für \"%1\" Feld muss ein positiver numerischer Wert sein mit oder ohne korrekte HTML Messeinheit (px oder %).","invalidInlineStyle":"Wert spezifiziert für inline Stilart muss enthalten ein oder mehr Tupels mit dem Format \"Name : Wert\" getrennt mit Semikolons.","cssLengthTooltip":"Gebe eine Zahl ein für ein Wert in pixels oder eine Zahl mit einer korrekten CSS Messeinheit (px, %, in, cm, mm, em, ex, pt oder pc).","unavailable":"%1<span class=\"cke_accessibility\">, nicht verfügbar</span>"},"about":{"copy":"Copyright &copy; $1. Alle Rechte vorbehalten.","dlgTitle":"Über CKEditor","help":"Prüfe $1 für Hilfe.","moreInfo":"Für Informationen über unsere Lizenzbestimmungen besuchen sie bitte unsere Webseite:","title":"Über CKEditor","userGuide":"CKEditor Benutzerhandbuch"},"basicstyles":{"bold":"Fett","italic":"Kursiv","strike":"Durchgestrichen","subscript":"Tiefgestellt","superscript":"Hochgestellt","underline":"Unterstrichen"},"bidi":{"ltr":"Leserichtung von Links nach Rechts","rtl":"Leserichtung von Rechts nach Links"},"blockquote":{"toolbar":"Zitatblock"},"clipboard":{"copy":"Kopieren","copyError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch kopieren. Bitte benutzen Sie die System-Zwischenablage über STRG-C (kopieren).","cut":"Ausschneiden","cutError":"Die Sicherheitseinstellungen Ihres Browsers lassen es nicht zu, den Text automatisch auszuschneiden. Bitte benutzen Sie die System-Zwischenablage über STRG-X (ausschneiden) und STRG-V (einfügen).","paste":"Einfügen","pasteArea":"Einfügebereich","pasteMsg":"Bitte fügen Sie den Text in der folgenden Box über die Tastatur (mit <STRONG>Strg+V</STRONG>) ein und bestätigen Sie mit <STRONG>OK</STRONG>.","securityMsg":"Aufgrund von Sicherheitsbeschränkungen Ihres Browsers kann der Editor nicht direkt auf die Zwischenablage zugreifen. Bitte fügen Sie den Inhalt erneut in diesem Fenster ein.","title":"Einfügen"},"button":{"selectedLabel":"%1 (Ausgewählt)"},"colorbutton":{"auto":"Automatisch","bgColorTitle":"Hintergrundfarbe","colors":{"000":"Schwarz","800000":"Kastanienbraun","8B4513":"Braun","2F4F4F":"Dunkles Schiefergrau","008080":"Blaugrün","000080":"Navy","4B0082":"Indigo","696969":"Dunkelgrau","B22222":"Ziegelrot","A52A2A":"Braun","DAA520":"Goldgelb","006400":"Dunkelgrün","40E0D0":"Türkis","0000CD":"Medium Blau","800080":"Lila","808080":"Grau","F00":"Rot","FF8C00":"Dunkelorange","FFD700":"Gold","008000":"Grün","0FF":"Cyan","00F":"Blau","EE82EE":"Hellviolett","A9A9A9":"Dunkelgrau","FFA07A":"Helles Lachsrosa","FFA500":"Orange","FFFF00":"Gelb","00FF00":"Lime","AFEEEE":"Blaß-Türkis","ADD8E6":"Hellblau","DDA0DD":"Pflaumenblau","D3D3D3":"Hellgrau","FFF0F5":"Lavendel","FAEBD7":"Antik Weiß","FFFFE0":"Hellgelb","F0FFF0":"Honigtau","F0FFFF":"Azurblau","F0F8FF":"Alice Blau","E6E6FA":"Lavendel","FFF":"Weiß"},"more":"Weitere Farben...","panelTitle":"Farben","textColorTitle":"Textfarbe"},"colordialog":{"clear":"Entfernen","highlight":"Hervorheben","options":"Farbeoptionen","selected":"Ausgewählte Farbe","title":"Farbe wählen"},"templates":{"button":"Vorlagen","emptyListMsg":"(keine Vorlagen definiert)","insertOption":"Aktuellen Inhalt ersetzen","options":"Vorlagen Optionen","selectPromptMsg":"Klicken Sie auf eine Vorlage, um sie im Editor zu öffnen (der aktuelle Inhalt wird dabei gelöscht!):","title":"Vorlagen"},"contextmenu":{"options":"Kontextmenü Optionen"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Tooltip","cssClassInputLabel":"Stylesheet Klasse","edit":"Div bearbeiten","inlineStyleInputLabel":"Inline Stil","langDirLTRLabel":"Links nach Rechs (LTR)","langDirLabel":"Sprache Richtung","langDirRTLLabel":"Rechs nach Links (RTL)","languageCodeInputLabel":"Sprachenkürzel","remove":"Div entfernen","styleSelectLabel":"Style","title":"Div Container erzeugen","toolbar":"Div Container erzeugen"},"toolbar":{"toolbarCollapse":"Symbolleiste einklappen","toolbarExpand":"Symbolleiste ausklappen","toolbarGroups":{"document":"Dokument","clipboard":"Zwischenablage/Rückgängig","editing":"Editieren","forms":"Formularen","basicstyles":"Grundstile","paragraph":"Absatz","links":"Links","insert":"Einfügen","styles":"Stile","colors":"Farben","tools":"Werkzeuge"},"toolbars":"Editor Symbolleisten"},"elementspath":{"eleLabel":"Elements Pfad","eleTitle":"%1 Element"},"find":{"find":"Suchen","findOptions":"Suchoptionen","findWhat":"Suche nach:","matchCase":"Groß-Kleinschreibung beachten","matchCyclic":"Zyklische Suche","matchWord":"Nur ganze Worte suchen","notFoundMsg":"Der gesuchte Text wurde nicht gefunden.","replace":"Ersetzen","replaceAll":"Alle ersetzen","replaceSuccessMsg":"%1 vorkommen ersetzt.","replaceWith":"Ersetze mit:","title":"Suchen und Ersetzen"},"fakeobjects":{"anchor":"Anker","flash":"Flash Animation","hiddenfield":"Verstecktes Feld","iframe":"IFrame","unknown":"Unbekanntes Objekt"},"flash":{"access":"Skript Zugang","accessAlways":"Immer","accessNever":"Nie","accessSameDomain":"Gleiche Domain","alignAbsBottom":"Abs Unten","alignAbsMiddle":"Abs Mitte","alignBaseline":"Baseline","alignTextTop":"Text Oben","bgcolor":"Hintergrundfarbe","chkFull":"Vollbildmodus erlauben","chkLoop":"Endlosschleife","chkMenu":"Flash-Menü aktivieren","chkPlay":"Automatisch Abspielen","flashvars":"Variablen für Flash","hSpace":"Horizontal-Abstand","properties":"Flash-Eigenschaften","propertiesTab":"Eigenschaften","quality":"Qualität","qualityAutoHigh":"Auto Hoch","qualityAutoLow":"Auto Niedrig","qualityBest":"Beste","qualityHigh":"Hoch","qualityLow":"Niedrig","qualityMedium":"Medium","scale":"Skalierung","scaleAll":"Alles anzeigen","scaleFit":"Passgenau","scaleNoBorder":"Ohne Rand","title":"Flash-Eigenschaften","vSpace":"Vertikal-Abstand","validateHSpace":"HSpace muss eine Zahl sein.","validateSrc":"Bitte geben Sie die Link-URL an","validateVSpace":"VSpace muss eine Zahl sein.","windowMode":"Fenster Modus","windowModeOpaque":"Deckend","windowModeTransparent":"Transparent","windowModeWindow":"Fenster"},"font":{"fontSize":{"label":"Größe","voiceLabel":"Schrifgröße","panelTitle":"Größe"},"label":"Schriftart","panelTitle":"Schriftart","voiceLabel":"Schriftart"},"forms":{"button":{"title":"Button-Eigenschaften","text":"Text (Wert)","type":"Typ","typeBtn":"Button","typeSbm":"Absenden","typeRst":"Zurücksetzen"},"checkboxAndRadio":{"checkboxTitle":"Checkbox-Eigenschaften","radioTitle":"Optionsfeld-Eigenschaften","value":"Wert","selected":"ausgewählt"},"form":{"title":"Formular-Eigenschaften","menu":"Formular-Eigenschaften","action":"Action","method":"Method","encoding":"Zeichenkodierung"},"hidden":{"title":"Verstecktes Feld-Eigenschaften","name":"Name","value":"Wert"},"select":{"title":"Auswahlfeld-Eigenschaften","selectInfo":"Info","opAvail":"Mögliche Optionen","value":"Wert","size":"Größe","lines":"Linien","chkMulti":"Erlaube Mehrfachauswahl","opText":"Text","opValue":"Wert","btnAdd":"Hinzufügen","btnModify":"Ändern","btnUp":"Hoch","btnDown":"Runter","btnSetValue":"Setze als Standardwert","btnDelete":"Entfernen"},"textarea":{"title":"Textfeld (mehrzeilig) Eigenschaften","cols":"Spalten","rows":"Reihen"},"textfield":{"title":"Textfeld (einzeilig) Eigenschaften","name":"Name","value":"Wert","charWidth":"Zeichenbreite","maxChars":"Max. Zeichen","type":"Typ","typeText":"Text","typePass":"Passwort","typeEmail":"E-mail","typeSearch":"Suche","typeTel":"Telefonnummer","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Format","tag_address":"Addresse","tag_div":"Normal (DIV)","tag_h1":"Überschrift 1","tag_h2":"Überschrift 2","tag_h3":"Überschrift 3","tag_h4":"Überschrift 4","tag_h5":"Überschrift 5","tag_h6":"Überschrift 6","tag_p":"Normal","tag_pre":"Formatiert"},"horizontalrule":{"toolbar":"Horizontale Linie einfügen"},"iframe":{"border":"Rahmen anzeigen","noUrl":"Bitte geben Sie die IFrame-URL an","scrolling":"Rollbalken anzeigen","title":"IFrame-Eigenschaften","toolbar":"IFrame"},"image":{"alertUrl":"Bitte geben Sie die Bild-URL an","alt":"Alternativer Text","border":"Rahmen","btnUpload":"Zum Server senden","button2Img":"Möchten Sie den gewählten Bild-Button in ein einfaches Bild umwandeln?","hSpace":"Horizontal-Abstand","img2Button":"Möchten Sie das gewählten Bild in einen Bild-Button umwandeln?","infoTab":"Bild-Info","linkTab":"Link","lockRatio":"Größenverhältnis beibehalten","menu":"Bild-Eigenschaften","resetSize":"Größe zurücksetzen","title":"Bild-Eigenschaften","titleButton":"Bildbutton-Eigenschaften","upload":"Hochladen","urlMissing":"Imagequelle URL fehlt.","vSpace":"Vertikal-Abstand","validateBorder":"Rahmen muß eine ganze Zahl sein.","validateHSpace":"Horizontal-Abstand muß eine ganze Zahl sein.","validateVSpace":"Vertikal-Abstand muß eine ganze Zahl sein."},"indent":{"indent":"Einzug erhöhen","outdent":"Einzug verringern"},"smiley":{"options":"Smiley Optionen","title":"Smiley auswählen","toolbar":"Smiley"},"justify":{"block":"Blocksatz","center":"Zentriert","left":"Linksbündig","right":"Rechtsbündig"},"language":{"button":"Sprache stellen","remove":"Sprache entfernen"},"link":{"acccessKey":"Zugriffstaste","advanced":"Erweitert","advisoryContentType":"Inhaltstyp","advisoryTitle":"Titel Beschreibung","anchor":{"toolbar":"Anker einfügen/editieren","menu":"Anker-Eigenschaften","title":"Anker-Eigenschaften","name":"Anker Name","errorName":"Bitte geben Sie den Namen des Ankers ein","remove":"Anker entfernen"},"anchorId":"nach Element Id","anchorName":"nach Anker Name","charset":"Ziel-Zeichensatz","cssClasses":"Stylesheet Klasse","emailAddress":"E-Mail Adresse","emailBody":"Nachrichtentext","emailSubject":"Betreffzeile","id":"Id","info":"Link-Info","langCode":"Sprachenkürzel","langDir":"Schreibrichtung","langDirLTR":"Links nach Rechts (LTR)","langDirRTL":"Rechts nach Links (RTL)","menu":"Link editieren","name":"Name","noAnchors":"(keine Anker im Dokument vorhanden)","noEmail":"Bitte geben Sie e-Mail Adresse an","noUrl":"Bitte geben Sie die Link-URL an","other":"<andere>","popupDependent":"Abhängig (Netscape)","popupFeatures":"Pop-up Fenster-Eigenschaften","popupFullScreen":"Vollbild (IE)","popupLeft":"Linke Position","popupLocationBar":"Adress-Leiste","popupMenuBar":"Menü-Leiste","popupResizable":"Größe änderbar","popupScrollBars":"Rollbalken","popupStatusBar":"Statusleiste","popupToolbar":"Symbolleiste","popupTop":"Obere Position","rel":"Beziehung","selectAnchor":"Anker auswählen","styles":"Style","tabIndex":"Tab-Index","target":"Zielseite","targetFrame":"<Frame>","targetFrameName":"Ziel-Fenster-Name","targetPopup":"<Pop-up Fenster>","targetPopupName":"Pop-up Fenster-Name","title":"Link","toAnchor":"Anker in dieser Seite","toEmail":"E-Mail","toUrl":"URL","toolbar":"Link einfügen/editieren","type":"Link-Typ","unlink":"Link entfernen","upload":"Hochladen"},"list":{"bulletedlist":"Liste","numberedlist":"Nummerierte Liste"},"liststyle":{"armenian":"Armenisch Nummerierung","bulletedTitle":"Listen-Eigenschaften","circle":"Ring","decimal":"Dezimal (1, 2, 3, etc.)","decimalLeadingZero":"Dezimal mit führende Null (01, 02, 03, etc.)","disc":"Kreis","georgian":"Georgisch Nummerierung (an, ban, gan, etc.)","lowerAlpha":"Klein alpha (a, b, c, d, e, etc.)","lowerGreek":"Klein griechisch (alpha, beta, gamma, etc.)","lowerRoman":"Klein römisch (i, ii, iii, iv, v, etc.)","none":"Keine","notset":"<nicht gesetzt>","numberedTitle":"Nummerierte Listen-Eigenschaften","square":"Quadrat","start":"Start","type":"Typ","upperAlpha":"Groß alpha (A, B, C, D, E, etc.)","upperRoman":"Groß römisch (I, II, III, IV, V, etc.)","validateStartNumber":"List Startnummer muss eine ganze Zahl sein."},"magicline":{"title":"Absatz hier einfügen"},"maximize":{"maximize":"Maximieren","minimize":"Minimieren"},"newpage":{"toolbar":"Neue Seite"},"pagebreak":{"alt":"Seitenumbruch einfügen","toolbar":"Seitenumbruch einfügen"},"pastetext":{"button":"Als Text einfügen","title":"Als Text einfügen"},"pastefromword":{"confirmCleanup":"Der Text, den Sie einfügen möchten, scheint aus MS-Word kopiert zu sein. Möchten Sie ihn zuvor bereinigen lassen?","error":"Aufgrund eines internen Fehlers war es nicht möglich die eingefügten Daten zu bereinigen","title":"Aus MS-Word einfügen","toolbar":"Aus MS-Word einfügen"},"preview":{"preview":"Vorschau"},"print":{"toolbar":"Drucken"},"removeformat":{"toolbar":"Formatierungen entfernen"},"save":{"toolbar":"Speichern"},"selectall":{"toolbar":"Alles auswählen"},"showblocks":{"toolbar":"Blöcke anzeigen"},"sourcearea":{"toolbar":"Quellcode"},"specialchar":{"options":"Sonderzeichen Optionen","title":"Sonderzeichen auswählen","toolbar":"Sonderzeichen einfügen/editieren"},"scayt":{"btn_about":"Über SCAYT","btn_dictionaries":"Wörterbücher","btn_disable":"SCAYT ausschalten","btn_enable":"SCAYT einschalten","btn_langs":"Sprachen","btn_options":"Optionen","text_title":""},"stylescombo":{"label":"Stil","panelTitle":"Formatierungsstile","panelTitle1":"Block Stilart","panelTitle2":"Inline Stilart","panelTitle3":"Objekt Stilart"},"table":{"border":"Rahmen","caption":"Überschrift","cell":{"menu":"Zelle","insertBefore":"Zelle davor einfügen","insertAfter":"Zelle danach einfügen","deleteCell":"Zelle löschen","merge":"Zellen verbinden","mergeRight":"Nach rechts verbinden","mergeDown":"Nach unten verbinden","splitHorizontal":"Zelle horizontal teilen","splitVertical":"Zelle vertikal teilen","title":"Zellen-Eigenschaften","cellType":"Zellart","rowSpan":"Anzahl Zeilen verbinden","colSpan":"Anzahl Spalten verbinden","wordWrap":"Zeilenumbruch","hAlign":"Horizontale Ausrichtung","vAlign":"Vertikale Ausrichtung","alignBaseline":"Grundlinie","bgColor":"Hintergrundfarbe","borderColor":"Rahmenfarbe","data":"Daten","header":"Überschrift","yes":"Ja","no":"Nein","invalidWidth":"Zellenbreite muß eine Zahl sein.","invalidHeight":"Zellenhöhe muß eine Zahl sein.","invalidRowSpan":"\"Anzahl Zeilen verbinden\" muss eine Ganzzahl sein.","invalidColSpan":"\"Anzahl Spalten verbinden\" muss eine Ganzzahl sein.","chooseColor":"Wählen"},"cellPad":"Zellenabstand innen","cellSpace":"Zellenabstand außen","column":{"menu":"Spalte","insertBefore":"Spalte links davor einfügen","insertAfter":"Spalte rechts danach einfügen","deleteColumn":"Spalte löschen"},"columns":"Spalte","deleteTable":"Tabelle löschen","headers":"Kopfzeile","headersBoth":"Beide","headersColumn":"Erste Spalte","headersNone":"Keine","headersRow":"Erste Zeile","invalidBorder":"Die Rahmenbreite muß eine Zahl sein.","invalidCellPadding":"Der Zellenabstand innen muß eine positive Zahl sein.","invalidCellSpacing":"Der Zellenabstand außen muß eine positive Zahl sein.","invalidCols":"Die Anzahl der Spalten muß größer als 0 sein..","invalidHeight":"Die Tabellenbreite muß eine Zahl sein.","invalidRows":"Die Anzahl der Zeilen muß größer als 0 sein.","invalidWidth":"Die Tabellenbreite muss eine Zahl sein.","menu":"Tabellen-Eigenschaften","row":{"menu":"Zeile","insertBefore":"Zeile oberhalb einfügen","insertAfter":"Zeile unterhalb einfügen","deleteRow":"Zeile entfernen"},"rows":"Zeile","summary":"Inhaltsübersicht","title":"Tabellen-Eigenschaften","toolbar":"Tabelle","widthPc":"%","widthPx":"Pixel","widthUnit":"Breite Einheit"},"undo":{"redo":"Wiederherstellen","undo":"Rückgängig"},"wsc":{"btnIgnore":"Ignorieren","btnIgnoreAll":"Alle Ignorieren","btnReplace":"Ersetzen","btnReplaceAll":"Alle Ersetzen","btnUndo":"Rückgängig","changeTo":"Ändern in","errorLoading":"Fehler beim laden des Dienstanbieters: %s.","ieSpellDownload":"Rechtschreibprüfung nicht installiert. Möchten Sie sie jetzt herunterladen?","manyChanges":"Rechtschreibprüfung abgeschlossen - %1 Wörter geändert","noChanges":"Rechtschreibprüfung abgeschlossen - keine Worte geändert","noMispell":"Rechtschreibprüfung abgeschlossen - keine Fehler gefunden","noSuggestions":" - keine Vorschläge - ","notAvailable":"Entschuldigung, aber dieser Dienst steht im Moment nicht zur Verfügung.","notInDic":"Nicht im Wörterbuch","oneChange":"Rechtschreibprüfung abgeschlossen - ein Wort geändert","progress":"Rechtschreibprüfung läuft...","title":"Rechtschreibprüfung","toolbar":"Rechtschreibprüfung"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/el.js b/wqflask/wqflask/static/packages/ckeditor/lang/el.js
deleted file mode 100644
index 3f5d17d4..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/el.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['el']={"editor":"ΕπεξεÏγαστής ΠλοÏσιου Κειμένου","editorPanel":"Πίνακας ΕπεξεÏγαστή ΠλοÏσιου Κειμένου","common":{"editorHelp":"Πατήστε το ALT 0 για βοήθεια","browseServer":"ΕξεÏεÏνηση Διακομιστή","url":"URL","protocol":"ΠÏωτόκολλο","upload":"Αποστολή","uploadSubmit":"Αποστολή στον Διακομιστή","image":"Εικόνα","flash":"Flash","form":"ΦόÏμα","checkbox":"Κουτί Επιλογής","radio":"Κουμπί Επιλογής","textField":"Πεδίο Κειμένου","textarea":"ΠεÏιοχή Κειμένου","hiddenField":"ΚÏυφό Πεδίο","button":"Κουμπί","select":"Πεδίο Επιλογής","imageButton":"Κουμπί Εικόνας","notSet":"<δεν έχει Ïυθμιστεί>","id":"Id","name":"Όνομα","langDir":"ΚατεÏθυνση Κειμένου","langDirLtr":"ΑÏιστεÏά Ï€Ïος Δεξιά (LTR)","langDirRtl":"Δεξιά Ï€Ïος ΑÏιστεÏά (RTL)","langCode":"Κωδικός Γλώσσας","longDescr":"Αναλυτική ΠεÏιγÏαφή URL","cssClass":"Κλάσεις ΦÏλλων Στυλ","advisoryTitle":"Ενδεικτικός Τίτλος","cssStyle":"ΜοÏφή Κειμένου","ok":"OK","cancel":"ΑκÏÏωση","close":"Κλείσιμο","preview":"ΠÏοεπισκόπηση","resize":"Αλλαγή Μεγέθους","generalTab":"Γενικά","advancedTab":"Για ΠÏοχωÏημένους","validateNumberFailed":"Αυτή η τιμή δεν είναι αÏιθμός.","confirmNewPage":"Οι όποιες αλλαγές στο πεÏιεχόμενο θα χαθοÏν. Είσαστε σίγουÏοι ότι θέλετε να φοÏτώσετε μια νέα σελίδα;","confirmCancel":"ΜεÏικές επιλογές έχουν αλλάξει. Είσαστε σίγουÏοι ότι θέλετε να κλείσετε το παÏάθυÏο διαλόγου;","options":"Επιλογές","target":"ΠÏοοÏισμός","targetNew":"Îέο ΠαÏάθυÏο (_blank)","targetTop":"ΑÏχική ΠεÏιοχή (_top)","targetSelf":"Ίδιο ΠαÏάθυÏο (_self)","targetParent":"Γονεϊκό ΠαÏάθυÏο (_parent)","langDirLTR":"ΑÏιστεÏά Ï€Ïος Δεξιά (LTR)","langDirRTL":"Δεξιά Ï€Ïος ΑÏιστεÏά (RTL)","styles":"ΜοÏφή","cssClasses":"Κλάσεις ΦÏλλων Στυλ","width":"Πλάτος","height":"Ύψος","align":"Στοίχιση","alignLeft":"ΑÏιστεÏά","alignRight":"Δεξιά","alignCenter":"ΚέντÏο","alignJustify":"ΠλήÏης Στοίχιση","alignTop":"Πάνω","alignMiddle":"Μέση","alignBottom":"Κάτω","alignNone":"ΧωÏίς","invalidValue":"Μη έγκυÏη τιμή.","invalidHeight":"Το Ïψος Ï€Ïέπει να είναι ένας αÏιθμός.","invalidWidth":"Το πλάτος Ï€Ïέπει να είναι ένας αÏιθμός.","invalidCssLength":"Η τιμή που οÏίζεται για το πεδίο \"%1\" Ï€Ïέπει να είναι ένας θετικός αÏιθμός με ή χωÏίς μια έγκυÏη μονάδα μέτÏησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","invalidHtmlLength":"Η τιμή που οÏίζεται για το πεδίο \"%1\" Ï€Ïέπει να είναι ένας θετικός αÏιθμός με ή χωÏίς μια έγκυÏη μονάδα μέτÏησης HTML (px ή %).","invalidInlineStyle":"Η τιμή για το εν σειÏά στυλ Ï€Ïέπει να πεÏιέχει ένα ή πεÏισσότεÏα ζεÏγη με την μοÏφή \"όνομα: τιμή\" διαχωÏισμένα με Ελληνικό εÏωτηματικό.","cssLengthTooltip":"Εισάγεται μια τιμή σε pixel ή έναν αÏιθμό μαζί με μια έγκυÏη μονάδα μέτÏησης CSS (px, %, in, cm, mm, em, ex, pt, ή pc).","unavailable":"%1<span class=\"cke_accessibility\">, δεν είναι διαθέσιμο</span>"},"about":{"copy":"Πνευματικά δικαιώματα &copy; $1 Με επιφÏλαξη παντός δικαιώματος.","dlgTitle":"ΠεÏί του CKEditor","help":"Ελέγξτε τις $1 για βοήθεια.","moreInfo":"Για πληÏοφοÏίες σχετικές με την άδεια χÏήσης, παÏακαλοÏμε επισκεφθείτε την ιστοσελίδα μας:","title":"ΠεÏί του CKEditor","userGuide":"Οδηγίες ΧÏήστη CKEditor"},"basicstyles":{"bold":"Έντονη","italic":"Πλάγια","strike":"ΔιακÏιτή ΔιαγÏαφή","subscript":"Δείκτης","superscript":"Εκθέτης","underline":"ΥπογÏάμμιση"},"bidi":{"ltr":"ΔιεÏθυνση κειμένου από αÏιστεÏά στα δεξιά","rtl":"ΔιεÏθυνση κειμένου από δεξιά στα αÏιστεÏά"},"blockquote":{"toolbar":"ΠεÏιοχή ΠαÏάθεσης"},"clipboard":{"copy":"ΑντιγÏαφή","copyError":"Οι Ïυθμίσεις ασφαλείας του πεÏιηγητή σας δεν επιτÏέπουν την επιλεγμένη εÏγασία αντιγÏαφής. ΠαÏακαλώ χÏησιμοποιείστε το πληκτÏολόγιο (Ctrl/Cmd+C).","cut":"Αποκοπή","cutError":"Οι Ïυθμίσεις ασφαλείας του πεÏιηγητή σας δεν επιτÏέπουν την επιλεγμένη εÏγασία αποκοπής. ΠαÏακαλώ χÏησιμοποιείστε το πληκτÏολόγιο (Ctrl/Cmd+X).","paste":"Επικόλληση","pasteArea":"ΠεÏιοχή Επικόλλησης","pasteMsg":"ΠαÏακαλώ επικολλήστε στο ακόλουθο κουτί χÏησιμοποιώντας το πληκτÏολόγιο (<strong>Ctrl/Cmd+V</strong>) και πατήστε OK.","securityMsg":"Λόγων των Ïυθμίσεων ασφάλειας του πεÏιηγητή σας, ο επεξεÏγαστής δεν μποÏεί να έχει Ï€Ïόσβαση στην μνήμη επικόλλησης. ΧÏειάζεται να επικολλήσετε ξανά σε αυτό το παÏάθυÏο.","title":"Επικόλληση"},"button":{"selectedLabel":"%1 (Επιλεγμένο)"},"colorbutton":{"auto":"Αυτόματα","bgColorTitle":"ΧÏώμα Φόντου","colors":{"000":"ΜαÏÏο","800000":"ΚαστανέÏυθÏο","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"ΒαθυκÏανο","000080":"Μπλε μαÏέν","4B0082":"Ινδικό","696969":"ΣκοÏÏο ΓκÏι","B22222":"Ανοικτό Κόκκινο","A52A2A":"Καφέ","DAA520":"Golden Rod","006400":"ΣκοÏÏο ΠÏάσινο","40E0D0":"ΤυÏκουάζ","0000CD":"Medium Blue","800080":"Μοβ","808080":"ΓκÏι","F00":"Κόκκινο","FF8C00":"ΣκοÏÏο ΠοÏτοκαλί","FFD700":"ΧÏυσαφί","008000":"ΠÏάσινο","0FF":"Κυανό","00F":"Μπλε","EE82EE":"Μενεξεδί","A9A9A9":"Ποντικί","FFA07A":"Ανοικτό Σομόν","FFA500":"ΠοÏτοκαλί","FFFF00":"ΚίτÏινο","00FF00":"Μοσχολέμονο","AFEEEE":"Pale Turquoise","ADD8E6":"Γαλάζιο","DDA0DD":"Plum","D3D3D3":"Ανοικτό ΓκÏι","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Ανοικτό ΚίτÏινο","F0FFF0":"Honeydew","F0FFFF":"Γαλανό","F0F8FF":"Alice Blue","E6E6FA":"ΕλαφÏός Ιώδες","FFF":"Λευκό"},"more":"ΠεÏισσότεÏα ΧÏώματα...","panelTitle":"ΧÏώματα","textColorTitle":"ΧÏώμα Κειμένου"},"colordialog":{"clear":"ΕκκαθάÏιση","highlight":"Σήμανση","options":"Επιλογές ΧÏωμάτων","selected":"Επιλεγμένο ΧÏώμα","title":"Επιλογή χÏώματος"},"templates":{"button":"ΠÏότυπα","emptyListMsg":"(Δεν έχουν καθοÏιστεί Ï€Ïότυπα)","insertOption":"Αντικατάσταση υπάÏχοντων πεÏιεχομένων","options":"Επιλογές ΠÏοτÏπου","selectPromptMsg":"ΠαÏακαλώ επιλέξτε Ï€Ïότυπο για εισαγωγή στο Ï€ÏόγÏαμμα","title":"ΠÏότυπα ΠεÏιεχομένου"},"contextmenu":{"options":"Επιλογές Αναδυόμενου ΜενοÏ"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Ενδεικτικός Τίτλος","cssClassInputLabel":"Κλάσεις ΦÏλλων Στυλ","edit":"ΕπεξεÏγασία Div","inlineStyleInputLabel":"Στυλ Εν ΣειÏά","langDirLTRLabel":"ΑÏιστεÏά Ï€Ïος Δεξιά (LTR)","langDirLabel":"ΚατεÏθυνση Κειμένου","langDirRTLLabel":"Δεξιά Ï€Ïος ΑÏιστεÏά (RTL)","languageCodeInputLabel":"Κωδικός Γλώσσας","remove":"ΔιαγÏαφή Div","styleSelectLabel":"ΜοÏφή","title":"ΔημιουÏγία Div","toolbar":"ΔημιουÏγία Div"},"toolbar":{"toolbarCollapse":"ΣÏμπτυξη ΕÏγαλειοθήκης","toolbarExpand":"Ανάπτυξη ΕÏγαλειοθήκης","toolbarGroups":{"document":"ΈγγÏαφο","clipboard":"ΠÏόχειÏο/ΑναίÏεση","editing":"ΕπεξεÏγασία","forms":"ΦόÏμες","basicstyles":"Βασικά Στυλ","paragraph":"ΠαÏάγÏαφος","links":"ΣÏνδεσμοι","insert":"Εισαγωγή","styles":"Στυλ","colors":"ΧÏώματα","tools":"ΕÏγαλεία"},"toolbars":"ΕÏγαλειοθήκες επεξεÏγαστή"},"elementspath":{"eleLabel":"ΔιαδÏομή Στοιχείων","eleTitle":"Στοιχείο %1"},"find":{"find":"ΕÏÏεση","findOptions":"Επιλογές ΕÏÏεσης","findWhat":"ΕÏÏεση για:","matchCase":"ΤαίÏιασμα πεζών/κεφαλαίων","matchCyclic":"ΑναδÏομική εÏÏεση","matchWord":"ΕÏÏεση μόνο πλήÏων λέξεων","notFoundMsg":"Το κείμενο δεν βÏέθηκε.","replace":"Αντικατάσταση","replaceAll":"Αντικατάσταση Όλων","replaceSuccessMsg":"Ο(ι) ÏŒÏος(-οι) αντικαταστήθηκε(-αν) %1 φοÏές.","replaceWith":"Αντικατάσταση με:","title":"ΕÏÏεση και Αντικατάσταση"},"fakeobjects":{"anchor":"ΆγκυÏα","flash":"Ταινία Flash","hiddenfield":"ΚÏυφό Πεδίο","iframe":"IFrame","unknown":"Άγνωστο Αντικείμενο"},"flash":{"access":"ΠÏόσβαση Script","accessAlways":"Πάντα","accessNever":"Ποτέ","accessSameDomain":"Ίδιο όνομα τομέα","alignAbsBottom":"Απόλυτα Κάτω","alignAbsMiddle":"Απόλυτα στη Μέση","alignBaseline":"ΓÏαμμή Βάσης","alignTextTop":"ΚοÏυφή Κειμένου","bgcolor":"ΧÏώμα ΥποβάθÏου","chkFull":"Îα ΕπιτÏέπεται η ΠÏοβολή σε ΠλήÏη Οθόνη","chkLoop":"Επανάληψη","chkMenu":"ΕνεÏγοποίηση Flash Menu","chkPlay":"Αυτόματη Εκτέλεση","flashvars":"Μεταβλητές για Flash","hSpace":"ΟÏιζόντιο Διάστημα","properties":"Ιδιότητες Flash","propertiesTab":"Ιδιότητες","quality":"Ποιότητα","qualityAutoHigh":"Αυτόματη Υψηλή","qualityAutoLow":"Αυτόματη Χαμηλή","qualityBest":"ΚαλÏτεÏη","qualityHigh":"Υψηλή","qualityLow":"Χαμηλή","qualityMedium":"Μεσαία","scale":"Μεγέθυνση","scaleAll":"Εμφάνιση όλων","scaleFit":"ΑκÏιβές Μέγεθος","scaleNoBorder":"ΧωÏίς ΠεÏίγÏαμμα","title":"Ιδιότητες Flash","vSpace":"Κάθετο Διάστημα","validateHSpace":"Το HSpace Ï€Ïέπει να είναι αÏιθμός.","validateSrc":"Εισάγετε την τοποθεσία (URL) του υπεÏσυνδέσμου (Link)","validateVSpace":"Το VSpace Ï€Ïέπει να είναι αÏιθμός.","windowMode":"ΤÏόπος λειτουÏγίας παÏαθÏÏου","windowModeOpaque":"Συμπαγές","windowModeTransparent":"Διάφανο","windowModeWindow":"ΠαÏάθυÏο"},"font":{"fontSize":{"label":"Μέγεθος","voiceLabel":"Μέγεθος ΓÏαμματοσειÏάς","panelTitle":"Μέγεθος ΓÏαμματοσειÏάς"},"label":"ΓÏαμματοσειÏά","panelTitle":"Όνομα ΓÏαμματοσειÏάς","voiceLabel":"ΓÏαμματοσειÏά"},"forms":{"button":{"title":"Ιδιότητες ΚουμπιοÏ","text":"Κείμενο (Τιμή)","type":"ΤÏπος","typeBtn":"Κουμπί","typeSbm":"Υποβολή","typeRst":"ΕπαναφοÏά"},"checkboxAndRadio":{"checkboxTitle":"Ιδιότητες ÎšÎ¿Ï…Ï„Î¹Î¿Ï Î•Ï€Î¹Î»Î¿Î³Î®Ï‚","radioTitle":"Ιδιότητες ÎšÎ¿Ï…Î¼Ï€Î¹Î¿Ï Î•Ï€Î¹Î»Î¿Î³Î®Ï‚","value":"Τιμή","selected":"Επιλεγμένο"},"form":{"title":"Ιδιότητες ΦόÏμας","menu":"Ιδιότητες ΦόÏμας","action":"ΕνέÏγεια","method":"Μέθοδος","encoding":"Κωδικοποίηση"},"hidden":{"title":"Ιδιότητες ΚÏÏ…Ï†Î¿Ï Î ÎµÎ´Î¯Î¿Ï…","name":"Όνομα","value":"Τιμή"},"select":{"title":"Ιδιότητες Πεδίου Επιλογής","selectInfo":"ΠληÏοφοÏίες Πεδίου Επιλογής","opAvail":"Διαθέσιμες Επιλογές","value":"Τιμή","size":"Μέγεθος","lines":"γÏαμμές","chkMulti":"Îα επιτÏέπονται οι πολλαπλές επιλογές","opText":"Κείμενο","opValue":"Τιμή","btnAdd":"ΠÏοσθήκη","btnModify":"ΤÏοποποίηση","btnUp":"Πάνω","btnDown":"Κάτω","btnSetValue":"Θέση ως Ï€Ïοεπιλογή","btnDelete":"ΔιαγÏαφή"},"textarea":{"title":"Ιδιότητες ΠεÏιοχής Κειμένου","cols":"Στήλες","rows":"ΣειÏές"},"textfield":{"title":"Ιδιότητες Πεδίου Κειμένου","name":"Όνομα","value":"Τιμή","charWidth":"Πλάτος ΧαÏακτήÏων","maxChars":"Μέγιστοι χαÏακτήÏες","type":"ΤÏπος","typeText":"Κείμενο","typePass":"Κωδικός","typeEmail":"Email","typeSearch":"Αναζήτηση","typeTel":"ΑÏιθμός Τηλεφώνου","typeUrl":"URL"}},"format":{"label":"ΜοÏφοποίηση","panelTitle":"ΜοÏφοποίηση ΠαÏαγÏάφου","tag_address":"ΔιεÏθυνση","tag_div":"Κανονική (DIV)","tag_h1":"Κεφαλίδα 1","tag_h2":"Κεφαλίδα 2","tag_h3":"Κεφαλίδα 3","tag_h4":"Κεφαλίδα 4","tag_h5":"Κεφαλίδα 5","tag_h6":"Κεφαλίδα 6","tag_p":"Κανονική","tag_pre":"ΠÏο-μοÏφοποιημένη"},"horizontalrule":{"toolbar":"Εισαγωγή ΟÏιζόντιας ΓÏαμμής"},"iframe":{"border":"ΠÏοβολή πεÏιγÏάμματος πλαισίου","noUrl":"ΠαÏακαλοÏμε εισάγεται το URL του iframe","scrolling":"ΕνεÏγοποίηση μπαÏών κÏλισης","title":"Ιδιότητες IFrame","toolbar":"IFrame"},"image":{"alertUrl":"Εισάγετε την τοποθεσία (URL) της εικόνας","alt":"Εναλλακτικό Κείμενο","border":"ΠεÏίγÏαμμα","btnUpload":"Αποστολή στον Διακομιστή","button2Img":"Θέλετε να μετατÏέψετε το επιλεγμένο κουμπί εικόνας σε απλή εικόνα;","hSpace":"HSpace","img2Button":"Θέλετε να μεταμοÏφώσετε την επιλεγμένη εικόνα που είναι πάνω σε ένα κουμπί;","infoTab":"ΠληÏοφοÏίες Εικόνας","linkTab":"ΣÏνδεσμος","lockRatio":"Κλείδωμα Αναλογίας","menu":"Ιδιότητες Εικόνας","resetSize":"ΕπαναφοÏά ΑÏÏ‡Î¹ÎºÎ¿Ï ÎœÎµÎ³Î­Î¸Î¿Ï…Ï‚","title":"Ιδιότητες Εικόνας","titleButton":"Ιδιότητες ÎšÎ¿Ï…Î¼Ï€Î¹Î¿Ï Î•Î¹ÎºÏŒÎ½Î±Ï‚","upload":"Αποστολή","urlMissing":"Το URL πηγής για την εικόνα λείπει.","vSpace":"VSpace","validateBorder":"Το πεÏίγÏαμμα Ï€Ïέπει να είναι ένας ακέÏαιος αÏιθμός.","validateHSpace":"Το HSpace Ï€Ïέπει να είναι ένας ακέÏαιος αÏιθμός.","validateVSpace":"Το VSpace Ï€Ïέπει να είναι ένας ακέÏαιος αÏιθμός."},"indent":{"indent":"ΑÏξηση Εσοχής","outdent":"Μείωση Εσοχής"},"smiley":{"options":"Επιλογές ΦατσοÏλων","title":"Εισάγετε μια ΦατσοÏλα","toolbar":"ΦατσοÏλα"},"justify":{"block":"ΠλήÏης Στοίχιση","center":"Στο ΚέντÏο","left":"Στοίχιση ΑÏιστεÏά","right":"Στοίχιση Δεξιά"},"language":{"button":"Θέση γλώσσας","remove":"ΑφαίÏεση γλώσσας"},"link":{"acccessKey":"Συντόμευση","advanced":"Για ΠÏοχωÏημένους","advisoryContentType":"Ενδεικτικός ΤÏπος ΠεÏιεχομένου","advisoryTitle":"Ενδεικτικός Τίτλος","anchor":{"toolbar":"Εισαγωγή/επεξεÏγασία ΆγκυÏας","menu":"Ιδιότητες άγκυÏας","title":"Ιδιότητες άγκυÏας","name":"Όνομα άγκυÏας","errorName":"ΠαÏακαλοÏμε εισάγετε όνομα άγκυÏας","remove":"ΑφαίÏεση ΆγκυÏας"},"anchorId":"Βάσει του Element Id","anchorName":"Βάσει του Ονόματος ΆγκυÏας","charset":"Κωδικοποίηση ΧαÏακτήÏων ΠÏοσαÏτημένης Πηγής","cssClasses":"Κλάσεις ΦÏλλων Στυλ","emailAddress":"ΔιεÏθυνση E-mail","emailBody":"Κείμενο ΜηνÏματος","emailSubject":"Θέμα ΜηνÏματος","id":"Id","info":"ΠληÏοφοÏίες Συνδέσμου","langCode":"ΚατεÏθυνση Κειμένου","langDir":"ΚατεÏθυνση Κειμένου","langDirLTR":"ΑÏιστεÏά Ï€Ïος Δεξιά (LTR)","langDirRTL":"Δεξιά Ï€Ïος ΑÏιστεÏά (RTL)","menu":"ΕπεξεÏγασία Συνδέσμου","name":"Όνομα","noAnchors":"(Δεν υπάÏχουν άγκυÏες στο κείμενο)","noEmail":"Εισάγετε τη διεÏθυνση ηλεκτÏÎ¿Î½Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου","noUrl":"Εισάγετε την τοποθεσία (URL) του συνδέσμου","other":"<άλλο>","popupDependent":"ΕξαÏτημένο (Netscape)","popupFeatures":"Επιλογές Αναδυόμενου ΠαÏαθÏÏου","popupFullScreen":"ΠλήÏης Οθόνη (IE)","popupLeft":"Θέση ΑÏιστεÏά","popupLocationBar":"ΓÏαμμή Τοποθεσίας","popupMenuBar":"ΓÏαμμή Επιλογών","popupResizable":"ΠÏοσαÏμοζόμενο Μέγεθος","popupScrollBars":"ΜπάÏες ΚÏλισης","popupStatusBar":"ΓÏαμμή Κατάστασης","popupToolbar":"ΕÏγαλειοθήκη","popupTop":"Θέση Πάνω","rel":"Σχέση","selectAnchor":"Επιλέξτε μια ΆγκυÏα","styles":"ΜοÏφή","tabIndex":"ΣειÏά Μεταπήδησης","target":"ΠαÏάθυÏο ΠÏοοÏισμοÏ","targetFrame":"<πλαίσιο>","targetFrameName":"Όνομα Πλαισίου ΠÏοοÏισμοÏ","targetPopup":"<αναδυόμενο παÏάθυÏο>","targetPopupName":"Όνομα Αναδυόμενου ΠαÏαθÏÏου","title":"ΣÏνδεσμος","toAnchor":"ΆγκυÏα σε αυτήν τη σελίδα","toEmail":"E-Mail","toUrl":"URL","toolbar":"ΣÏνδεσμος","type":"ΤÏπος Συνδέσμου","unlink":"ΑφαίÏεση Συνδέσμου","upload":"Αποστολή"},"list":{"bulletedlist":"Εισαγωγή/ΑπομάκÏυνση Λίστας Κουκκίδων","numberedlist":"Εισαγωγή/ΑπομάκÏυνση ΑÏιθμημένης Λίστας"},"liststyle":{"armenian":"ΑÏμενική αÏίθμηση","bulletedTitle":"Ιδιότητες Λίστας Σημείων","circle":"ΚÏκλος","decimal":"Δεκαδική (1, 2, 3, κτλ)","decimalLeadingZero":"Δεκαδική με αÏχικό μηδεν (01, 02, 03, κτλ)","disc":"Δίσκος","georgian":"ΓεωÏγιανή αÏίθμηση (áƒ, ბ, გ, κτλ)","lowerAlpha":"ΜικÏά Λατινικά (a, b, c, d, e, κτλ.)","lowerGreek":"ΜικÏά Ελληνικά (α, β, γ, κτλ)","lowerRoman":"ΜικÏά Ρωμαϊκά (i, ii, iii, iv, v, κτλ)","none":"Καμία","notset":"<δεν έχει οÏιστεί>","numberedTitle":"Ιδιότητες ΑÏιθμημένης Λίστας ","square":"ΤετÏάγωνο","start":"Εκκίνηση","type":"ΤÏπος","upperAlpha":"Κεφαλαία Λατινικά (A, B, C, D, E, κτλ)","upperRoman":"Κεφαλαία Ρωμαϊκά (I, II, III, IV, V, κτλ)","validateStartNumber":"Ο αÏιθμός εκκίνησης της αÏίθμησης Ï€Ïέπει να είναι ακέÏαιος αÏιθμός."},"magicline":{"title":"Εισάγετε παÏάγÏαφο εδώ"},"maximize":{"maximize":"Μεγιστοποίηση","minimize":"Ελαχιστοποίηση"},"newpage":{"toolbar":"Îέα Σελίδα"},"pagebreak":{"alt":"Αλλαγή Σελίδας","toolbar":"Εισαγωγή Τέλους Σελίδας για ΕκτÏπωση"},"pastetext":{"button":"Επικόλληση ως απλό κείμενο","title":"Επικόλληση ως απλό κείμενο"},"pastefromword":{"confirmCleanup":"Το κείμενο που επικολλάται φαίνεται να είναι αντιγÏαμμένο από το Word. Μήπως θα θέλατε να καθαÏιστεί Ï€ÏÎ¿Ï„Î¿Ï ÎµÏ€Î¹ÎºÎ¿Î»Î»Î·Î¸ÎµÎ¯;","error":"Δεν ήταν δυνατό να καθαÏιστοÏν τα δεδομένα λόγω ενός εσωτεÏÎ¹ÎºÎ¿Ï ÏƒÏ†Î¬Î»Î¼Î±Ï„Î¿Ï‚","title":"Επικόλληση από το Word","toolbar":"Επικόλληση από το Word"},"preview":{"preview":"ΠÏοεπισκόπιση"},"print":{"toolbar":"ΕκτÏπωση"},"removeformat":{"toolbar":"ΕκκαθάÏιση ΜοÏφοποίησης"},"save":{"toolbar":"Αποθήκευση"},"selectall":{"toolbar":"Επιλογή όλων"},"showblocks":{"toolbar":"ΠÏοβολή Τμημάτων"},"sourcearea":{"toolbar":"Κώδικας"},"specialchar":{"options":"Επιλογές Ειδικών ΧαÏακτήÏων","title":"Επιλέξτε Έναν Ειδικό ΧαÏακτήÏα","toolbar":"Εισαγωγή Î•Î¹Î´Î¹ÎºÎ¿Ï Î§Î±ÏακτήÏα"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Λεξικά","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Γλώσσες","btn_options":"Επιλογές","text_title":""},"stylescombo":{"label":"ΜοÏφές","panelTitle":"Στυλ ΜοÏφοποίησης","panelTitle1":"Στυλ Τμημάτων","panelTitle2":"Στυλ Εν ΣειÏά","panelTitle3":"Στυλ Αντικειμένων"},"table":{"border":"Πάχος ΠεÏιγÏάμματος","caption":"Λεζάντα","cell":{"menu":"Κελί","insertBefore":"Εισαγωγή ÎšÎµÎ»Î¹Î¿Ï Î Ïιν","insertAfter":"Εισαγωγή ÎšÎµÎ»Î¹Î¿Ï ÎœÎµÏ„Î¬","deleteCell":"ΔιαγÏαφή Κελιών","merge":"Ενοποίηση Κελιών","mergeRight":"Συγχώνευση Με Δεξιά","mergeDown":"Συγχώνευση Με Κάτω","splitHorizontal":"ΟÏιζόντια ΔιαίÏεση ΚελιοÏ","splitVertical":"ΚατακόÏυφη ΔιαίÏεση ΚελιοÏ","title":"Ιδιότητες ΚελιοÏ","cellType":"ΤÏπος ΚελιοÏ","rowSpan":"ΕÏÏος ΓÏαμμών","colSpan":"ΕÏÏος Στηλών","wordWrap":"Αναδίπλωση Λέξεων","hAlign":"ΟÏιζόντια Στοίχιση","vAlign":"Κάθετη Στοίχιση","alignBaseline":"Baseline","bgColor":"ΧÏώμα Φόντου","borderColor":"ΧÏώμα ΠεÏιγÏάμματος","data":"Δεδομένα","header":"Κεφαλίδα","yes":"Îαι","no":"Όχι","invalidWidth":"Το πλάτος του ÎºÎµÎ»Î¹Î¿Ï Ï€Ïέπει να είναι αÏιθμός.","invalidHeight":"Το Ïψος του ÎºÎµÎ»Î¹Î¿Ï Ï€Ïέπει να είναι αÏιθμός.","invalidRowSpan":"Το εÏÏος των γÏαμμών Ï€Ïέπει να είναι ακέÏαιος αÏιθμός.","invalidColSpan":"Το εÏÏος των στηλών Ï€Ïέπει να είναι ακέÏαιος αÏιθμός.","chooseColor":"Επιλέξτε"},"cellPad":"ΑναπλήÏωση κελιών","cellSpace":"Απόσταση κελιών","column":{"menu":"Στήλη","insertBefore":"Εισαγωγή Στήλης ΠÏιν","insertAfter":"Εισαγωγή Στήλης Μετά","deleteColumn":"ΔιαγÏαφή Στηλών"},"columns":"Στήλες","deleteTable":"ΔιαγÏαφή Πίνακα","headers":"Κεφαλίδες","headersBoth":"Και τα δÏο","headersColumn":"ΠÏώτη στήλη","headersNone":"Κανένα","headersRow":"ΠÏώτη ΓÏαμμή","invalidBorder":"Το πάχος του πεÏιγÏάμματος Ï€Ïέπει να είναι ένας αÏιθμός.","invalidCellPadding":"Η αναπλήÏωση των κελιών Ï€Ïέπει να είναι θετικός αÏιθμός.","invalidCellSpacing":"Η απόσταση Î¼ÎµÏ„Î±Î¾Ï Ï„Ï‰Î½ κελιών Ï€Ïέπει να είναι ένας θετικός αÏιθμός.","invalidCols":"Ο αÏιθμός των στηλών Ï€Ïέπει να είναι μεγαλÏτεÏος από 0.","invalidHeight":"Το Ïψος του πίνακα Ï€Ïέπει να είναι αÏιθμός.","invalidRows":"Ο αÏιθμός των σειÏών Ï€Ïέπει να είναι μεγαλÏτεÏος από 0.","invalidWidth":"Το πλάτος του πίνακα Ï€Ïέπει να είναι ένας αÏιθμός.","menu":"Ιδιότητες Πίνακα","row":{"menu":"ΓÏαμμή","insertBefore":"Εισαγωγή ΓÏαμμής ΠÏιν","insertAfter":"Εισαγωγή ΓÏαμμής Μετά","deleteRow":"ΔιαγÏαφή ΓÏαμμών"},"rows":"ΓÏαμμές","summary":"ΠεÏίληψη","title":"Ιδιότητες Πίνακα","toolbar":"Πίνακας","widthPc":"τοις εκατό","widthPx":"pixel","widthUnit":"μονάδα πλάτους"},"undo":{"redo":"Επανάληψη","undo":"ΑναίÏεση"},"wsc":{"btnIgnore":"Αγνόηση","btnIgnoreAll":"Αγνόηση όλων","btnReplace":"Αντικατάσταση","btnReplaceAll":"Αντικατάσταση όλων","btnUndo":"ΑναίÏεση","changeTo":"Αλλαγή σε","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Δεν υπάÏχει εγκατεστημένος οÏθογÏάφος. Θέλετε να τον κατεβάσετε Ï„ÏŽÏα;","manyChanges":"Ο οÏθογÏαφικός έλεγχος ολοκληÏώθηκε: Άλλαξαν %1 λέξεις","noChanges":"Ο οÏθογÏαφικός έλεγχος ολοκληÏώθηκε: Δεν άλλαξαν λέξεις","noMispell":"Ο οÏθογÏαφικός έλεγχος ολοκληÏώθηκε: Δεν βÏέθηκαν λάθη","noSuggestions":"- Δεν υπάÏχουν Ï€Ïοτάσεις -","notAvailable":"Η υπηÏεσία δεν είναι διαθέσιμη αυτήν την στιγμή.","notInDic":"Δεν υπάÏχει στο λεξικό","oneChange":"Ο οÏθογÏαφικός έλεγχος ολοκληÏώθηκε: Άλλαξε μια λέξη","progress":"Γίνεται οÏθογÏαφικός έλεγχος...","title":"ΟÏθογÏαφικός Έλεγχος","toolbar":"ΟÏθογÏαφικός Έλεγχος"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/en-au.js b/wqflask/wqflask/static/packages/ckeditor/lang/en-au.js
deleted file mode 100644
index 1c74e274..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/en-au.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['en-au']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","alignLeft":"Left","alignRight":"Right","alignCenter":"Centre","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Colour","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"More Colours...","panelTitle":"Colors","textColorTitle":"Text Colour"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Templates","emptyListMsg":"(No templates defined)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Please select the template to open in the editor","title":"Content Templates"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"Find","findOptions":"Find Options","findWhat":"Find what:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"The specified text was not found.","replace":"Replace","replaceAll":"Replace All","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Replace with:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Baseline","alignTextTop":"Text Top","bgcolor":"Background colour","chkFull":"Allow Fullscreen","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Scale","scaleAll":"Show all","scaleFit":"Exact Fit","scaleNoBorder":"No Border","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"URL must not be empty.","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"forms":{"button":{"title":"Button Properties","text":"Text (Value)","type":"Type","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Action","method":"Method","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Name","value":"Value"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Value","size":"Size","lines":"lines","chkMulti":"Allow multiple selections","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"Delete"},"textarea":{"title":"Textarea Properties","cols":"Columns","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","type":"Type","typeText":"Text","typePass":"Password","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"smiley":{"options":"Smiley Options","title":"Insert a Smiley","toolbar":"Smiley"},"justify":{"block":"Justify","center":"Centre","left":"Align Left","right":"Align Right"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"New Page"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"preview":{"preview":"Preview"},"print":{"toolbar":"Print"},"removeformat":{"toolbar":"Remove Format"},"save":{"toolbar":"Save"},"selectall":{"toolbar":"Select All"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/en-ca.js b/wqflask/wqflask/static/packages/ckeditor/lang/en-ca.js
deleted file mode 100644
index 5a084f59..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/en-ca.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['en-ca']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","alignLeft":"Left","alignRight":"Right","alignCenter":"Centre","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Colour","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"More Colours...","panelTitle":"Colors","textColorTitle":"Text Colour"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Templates","emptyListMsg":"(No templates defined)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Please select the template to open in the editor","title":"Content Templates"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"Find","findOptions":"Find Options","findWhat":"Find what:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"The specified text was not found.","replace":"Replace","replaceAll":"Replace All","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Replace with:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Baseline","alignTextTop":"Text Top","bgcolor":"Background colour","chkFull":"Allow Fullscreen","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Scale","scaleAll":"Show all","scaleFit":"Exact Fit","scaleNoBorder":"No Border","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"URL must not be empty.","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"forms":{"button":{"title":"Button Properties","text":"Text (Value)","type":"Type","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Action","method":"Method","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Name","value":"Value"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Value","size":"Size","lines":"lines","chkMulti":"Allow multiple selections","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"Delete"},"textarea":{"title":"Textarea Properties","cols":"Columns","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","type":"Type","typeText":"Text","typePass":"Password","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"smiley":{"options":"Smiley Options","title":"Insert a Smiley","toolbar":"Smiley"},"justify":{"block":"Justify","center":"Centre","left":"Align Left","right":"Align Right"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"New Page"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"preview":{"preview":"Preview"},"print":{"toolbar":"Print"},"removeformat":{"toolbar":"Remove Format"},"save":{"toolbar":"Save"},"selectall":{"toolbar":"Select All"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/en-gb.js b/wqflask/wqflask/static/packages/ckeditor/lang/en-gb.js
deleted file mode 100644
index e94862a4..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/en-gb.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['en-gb']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Drag to resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialogue window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Align","alignLeft":"Left","alignRight":"Right","alignCenter":"Centre","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Colour","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Grey","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Grey","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Grey","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Grey","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"More Colours...","panelTitle":"Colours","textColorTitle":"Text Colour"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Colour Options","selected":"Selected Colour","title":"Select colour"},"templates":{"button":"Templates","emptyListMsg":"(No templates defined)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Please select the template to open in the editor","title":"Content Templates"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"Find","findOptions":"Find Options","findWhat":"Find what:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"The specified text was not found.","replace":"Replace","replaceAll":"Replace All","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Replace with:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Baseline","alignTextTop":"Text Top","bgcolor":"Background colour","chkFull":"Allow Fullscreen","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Scale","scaleAll":"Show all","scaleFit":"Exact Fit","scaleNoBorder":"No Border","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"URL must not be empty.","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"forms":{"button":{"title":"Button Properties","text":"Text (Value)","type":"Type","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Action","method":"Method","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Name","value":"Value"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Value","size":"Size","lines":"lines","chkMulti":"Allow multiple selections","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"Delete"},"textarea":{"title":"Textarea Properties","cols":"Columns","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","type":"Type","typeText":"Text","typePass":"Password","typeEmail":"E-mail","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"smiley":{"options":"Smiley Options","title":"Insert a Smiley","toolbar":"Smiley"},"justify":{"block":"Justify","center":"Centre","left":"Align Left","right":"Align Right"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximise","minimize":"Minimise"},"newpage":{"toolbar":"New Page"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"preview":{"preview":"Preview"},"print":{"toolbar":"Print"},"removeformat":{"toolbar":"Remove Format"},"save":{"toolbar":"Save"},"selectall":{"toolbar":"Select All"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a number.","invalidCellSpacing":"Cell spacing must be a number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/en.js b/wqflask/wqflask/static/packages/ckeditor/lang/en.js
deleted file mode 100644
index 30ccb21d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/en.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['en']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","alignLeft":"Left","alignRight":"Right","alignCenter":"Center","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Color","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"More Colors...","panelTitle":"Colors","textColorTitle":"Text Color"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Templates","emptyListMsg":"(No templates defined)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Please select the template to open in the editor","title":"Content Templates"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"Find","findOptions":"Find Options","findWhat":"Find what:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"The specified text was not found.","replace":"Replace","replaceAll":"Replace All","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Replace with:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Baseline","alignTextTop":"Text Top","bgcolor":"Background color","chkFull":"Allow Fullscreen","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Scale","scaleAll":"Show all","scaleFit":"Exact Fit","scaleNoBorder":"No Border","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"URL must not be empty.","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"forms":{"button":{"title":"Button Properties","text":"Text (Value)","type":"Type","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Action","method":"Method","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Name","value":"Value"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Value","size":"Size","lines":"lines","chkMulti":"Allow multiple selections","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"Delete"},"textarea":{"title":"Textarea Properties","cols":"Columns","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","type":"Type","typeText":"Text","typePass":"Password","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"smiley":{"options":"Smiley Options","title":"Insert a Smiley","toolbar":"Smiley"},"justify":{"block":"Justify","center":"Center","left":"Align Left","right":"Align Right"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"New Page"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"preview":{"preview":"Preview"},"print":{"toolbar":"Print"},"removeformat":{"toolbar":"Remove Format"},"save":{"toolbar":"Save"},"selectall":{"toolbar":"Select All"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/eo.js b/wqflask/wqflask/static/packages/ckeditor/lang/eo.js
deleted file mode 100644
index ec00c4d8..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/eo.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['eo']={"editor":"RiĉTeksta Redaktilo","editorPanel":"Panelo de la RiĉTeksta Redaktilo","common":{"editorHelp":"Premu ALT 0 por helpilo","browseServer":"Foliumi en la Servilo","url":"URL","protocol":"Protokolo","upload":"AlÅuti","uploadSubmit":"Sendu al Servilo","image":"Bildo","flash":"FlaÅo","form":"Formularo","checkbox":"Markobutono","radio":"Radiobutono","textField":"Teksta kampo","textarea":"Teksta Areo","hiddenField":"KaÅita Kampo","button":"Butono","select":"Elekta Kampo","imageButton":"Bildbutono","notSet":"<DefaÅ­lta>","id":"Id","name":"Nomo","langDir":"Skribdirekto","langDirLtr":"De maldekstro dekstren (LTR)","langDirRtl":"De dekstro maldekstren (RTL)","langCode":"Lingva Kodo","longDescr":"URL de Longa Priskribo","cssClass":"Klasoj de Stilfolioj","advisoryTitle":"Priskriba Titolo","cssStyle":"Stilo","ok":"Akcepti","cancel":"Rezigni","close":"Fermi","preview":"Vidigi Aspekton","resize":"Movigi por ÅanÄi la grandon","generalTab":"Äœenerala","advancedTab":"Speciala","validateNumberFailed":"Tiu valoro ne estas nombro.","confirmNewPage":"La neregistritaj ÅanÄoj estas perdotaj. Ĉu vi certas, ke vi volas Åargi novan paÄon?","confirmCancel":"Iuj opcioj esta ÅanÄitaj. Ĉu vi certas, ke vi volas fermi la dialogon?","options":"Opcioj","target":"Celo","targetNew":"Nova Fenestro (_blank)","targetTop":"Supra Fenestro (_top)","targetSelf":"Sama Fenestro (_self)","targetParent":"Patra Fenestro (_parent)","langDirLTR":"De maldekstro dekstren (LTR)","langDirRTL":"De dekstro maldekstren (RTL)","styles":"Stilo","cssClasses":"Stilfoliaj Klasoj","width":"LarÄo","height":"Alto","align":"Äœisrandigo","alignLeft":"Maldekstre","alignRight":"Dekstre","alignCenter":"Centre","alignJustify":"Äœisrandigi AmbaÅ­flanke","alignTop":"Supre","alignMiddle":"Centre","alignBottom":"Malsupre","alignNone":"None","invalidValue":"Nevalida Valoro","invalidHeight":"Alto devas esti nombro.","invalidWidth":"LarÄo devas esti nombro.","invalidCssLength":"La valoro indikita por la \"%1\" kampo devas esti pozitiva nombro kun aÅ­ sen valida CSSmezurunuo (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"La valoro indikita por la \"%1\" kampo devas esti pozitiva nombro kun aÅ­ sen valida HTMLmezurunuo (px or %).","invalidInlineStyle":"La valoro indikita por la enlinia stilo devas konsisti el unu aÅ­ pluraj elementoj kun la formato de \"nomo : valoro\", apartigitaj per punktokomoj.","cssLengthTooltip":"Entajpu nombron por rastrumera valoro aÅ­ nombron kun valida CSSunuo (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, nehavebla</span>"},"about":{"copy":"Copyright &copy; $1. Ĉiuj rajtoj rezervitaj.","dlgTitle":"Pri CKEditor","help":"Kontroli $1 por helpo.","moreInfo":"Por informoj pri licenco, bonvolu viziti nian retpaÄaron:","title":"Pri CKEditor","userGuide":"CKEditor Uzindikoj"},"basicstyles":{"bold":"Grasa","italic":"Kursiva","strike":"Trastreko","subscript":"Suba indico","superscript":"Supra indico","underline":"Substreko"},"bidi":{"ltr":"Tekstdirekto de maldekstre dekstren","rtl":"Tekstdirekto de dekstre maldekstren"},"blockquote":{"toolbar":"Citaĵo"},"clipboard":{"copy":"Kopii","copyError":"La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras kopiajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-C).","cut":"Eltondi","cutError":"La sekurecagordo de via TTT-legilo ne permesas, ke la redaktilo faras eltondajn operaciojn. Bonvolu uzi la klavaron por tio (Ctrl/Cmd-X).","paste":"Interglui","pasteArea":"Intergluoareo","pasteMsg":"Bonvolu glui la tekston en la jenan areon per uzado de la klavaro (<strong>Ctrl/Cmd+V</strong>) kaj premu OK","securityMsg":"Pro la sekurecagordo de via TTT-legilo, la redaktilo ne povas rekte atingi viajn datenojn en la poÅo. Bonvolu denove interglui la datenojn en tiun fenestron.","title":"Interglui"},"button":{"selectedLabel":"%1 (Selektita)"},"colorbutton":{"auto":"AÅ­tomata","bgColorTitle":"Fona Koloro","colors":{"000":"Nigra","800000":"KaÅtankolora","8B4513":"Mezbruna","2F4F4F":"Ardezgriza","008080":"Marĉanaskolora","000080":"Maristblua","4B0082":"Indigokolora","696969":"Malhelgriza","B22222":"BrikruÄa","A52A2A":"Bruna","DAA520":"Senbrilorkolora","006400":"Malhelverda","40E0D0":"Turkisblua","0000CD":"ReÄblua","800080":"Purpura","808080":"Griza","F00":"RuÄa","FF8C00":"MalheloranÄkolora","FFD700":"Orkolora","008000":"Verda","0FF":"Verdblua","00F":"Blua","EE82EE":"Viola","A9A9A9":"Mezgriza","FFA07A":"Salmokolora","FFA500":"OranÄkolora","FFFF00":"Flava","00FF00":"Limetkolora","AFEEEE":"Helturkiskolora","ADD8E6":"Helblua","DDA0DD":"Prunkolora","D3D3D3":"Helgriza","FFF0F5":"Lavendkolora vangoÅminko","FAEBD7":"Antikvablanka","FFFFE0":"Helflava","F0FFF0":"Vintromelonkolora","F0FFFF":"Lazura","F0F8FF":"Aliceblua","E6E6FA":"Lavendkolora","FFF":"Blanka"},"more":"Pli da Koloroj...","panelTitle":"Koloroj","textColorTitle":"Teksta Koloro"},"colordialog":{"clear":"Forigi","highlight":"Detaloj","options":"Opcioj pri koloroj","selected":"Selektita koloro","title":"Selekti koloron"},"templates":{"button":"Åœablonoj","emptyListMsg":"(Neniu Åablono difinita)","insertOption":"AnstataÅ­igi la nunan enhavon","options":"Opcioj pri Åablonoj","selectPromptMsg":"Bonvolu selekti la Åablonon por malfermi Äin en la redaktilo","title":"Enhavo de Åablonoj"},"contextmenu":{"options":"Opcioj de Kunteksta Menuo"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Priskriba Titolo","cssClassInputLabel":"Stilfolioklasoj","edit":"Redakti Div","inlineStyleInputLabel":"Enlinia stilo","langDirLTRLabel":"Maldekstre dekstren (angle LTR)","langDirLabel":"Skribdirekto","langDirRTLLabel":"Dekstre maldekstren (angle RTL)","languageCodeInputLabel":" Lingvokodo","remove":"Forigi Div","styleSelectLabel":"Stilo","title":"Krei DIV ujon","toolbar":"Krei DIV ujon"},"toolbar":{"toolbarCollapse":"Faldi la ilbreton","toolbarExpand":"Malfaldi la ilbreton","toolbarGroups":{"document":"Dokumento","clipboard":"PoÅo/Malfari","editing":"Redaktado","forms":"Formularoj","basicstyles":"Bazaj stiloj","paragraph":"Paragrafo","links":"Ligiloj","insert":"Enmeti","styles":"Stiloj","colors":"Koloroj","tools":"Iloj"},"toolbars":"Ilobretoj de la redaktilo"},"elementspath":{"eleLabel":"Vojo al Elementoj","eleTitle":"%1 elementoj"},"find":{"find":"Serĉi","findOptions":"Opcioj pri Serĉado","findWhat":"Serĉi:","matchCase":"Kongruigi Usklecon","matchCyclic":"Cikla Serĉado","matchWord":"Tuta Vorto","notFoundMsg":"La celteksto ne estas trovita.","replace":"AnstataÅ­igi","replaceAll":"AnstataÅ­igi Ĉion","replaceSuccessMsg":"%1 anstataÅ­igita(j) apero(j).","replaceWith":"AnstataÅ­igi per:","title":"Serĉi kaj AnstataÅ­igi"},"fakeobjects":{"anchor":"Ankro","flash":"FlaÅAnimacio","hiddenfield":"KaÅita kampo","iframe":"Enlinia Kadro (IFrame)","unknown":"Nekonata objekto"},"flash":{"access":"Atingi skriptojn","accessAlways":"Ĉiam","accessNever":"Neniam","accessSameDomain":"Sama domajno","alignAbsBottom":"Absoluta Malsupro","alignAbsMiddle":"Absoluta Centro","alignBaseline":"TekstoMalsupro","alignTextTop":"TekstoSupro","bgcolor":"Fona Koloro","chkFull":"Permesi tutekranon","chkLoop":"Iteracio","chkMenu":"Ebligi flaÅmenuon","chkPlay":"AÅ­tomata legado","flashvars":"Variabloj por FlaÅo","hSpace":"Horizontala Spaco","properties":"FlaÅatributoj","propertiesTab":"Atributoj","quality":"Kvalito","qualityAutoHigh":"AÅ­tomate alta","qualityAutoLow":"AÅ­tomate malalta","qualityBest":"Plej bona","qualityHigh":"Alta","qualityLow":"Malalta","qualityMedium":"Meza","scale":"Skalo","scaleAll":"Montri ĉion","scaleFit":"Origina grando","scaleNoBorder":"Neniu bordero","title":"FlaÅatributoj","vSpace":"Vertikala Spaco","validateHSpace":"Horizontala Spaco devas esti nombro.","validateSrc":"Bonvolu entajpi la retadreson (URL)","validateVSpace":"Vertikala Spaco devas esti nombro.","windowMode":"Fenestra reÄimo","windowModeOpaque":"Opaka","windowModeTransparent":"Travidebla","windowModeWindow":"Fenestro"},"font":{"fontSize":{"label":"Grado","voiceLabel":"Tipara grado","panelTitle":"Tipara grado"},"label":"Tiparo","panelTitle":"Tipara nomo","voiceLabel":"Tiparo"},"forms":{"button":{"title":"Butonaj atributoj","text":"Teksto (Valoro)","type":"Tipo","typeBtn":"Butono","typeSbm":"Validigi (submit)","typeRst":"Remeti en la originstaton (Reset)"},"checkboxAndRadio":{"checkboxTitle":"Markobutonaj Atributoj","radioTitle":"Radiobutonaj Atributoj","value":"Valoro","selected":"Selektita"},"form":{"title":"Formularaj Atributoj","menu":"Formularaj Atributoj","action":"Ago","method":"Metodo","encoding":"Kodoprezento"},"hidden":{"title":"Atributoj de KaÅita Kampo","name":"Nomo","value":"Valoro"},"select":{"title":"Atributoj de Elekta Kampo","selectInfo":"Informoj pri la rulummenuo","opAvail":"Elektoj Disponeblaj","value":"Valoro","size":"Grando","lines":"Linioj","chkMulti":"Permesi Plurajn Elektojn","opText":"Teksto","opValue":"Valoro","btnAdd":"Aldoni","btnModify":"Modifi","btnUp":"Supren","btnDown":"Malsupren","btnSetValue":"Agordi kiel Elektitan Valoron","btnDelete":"Forigi"},"textarea":{"title":"Atributoj de Teksta Areo","cols":"Kolumnoj","rows":"Linioj"},"textfield":{"title":"Atributoj de Teksta Kampo","name":"Nomo","value":"Valoro","charWidth":"SignolarÄo","maxChars":"Maksimuma Nombro da Signoj","type":"Tipo","typeText":"Teksto","typePass":"Pasvorto","typeEmail":"retpoÅtadreso","typeSearch":"Serĉi","typeTel":"Telefonnumero","typeUrl":"URL"}},"format":{"label":"Formato","panelTitle":"ParagrafFormato","tag_address":"Adreso","tag_div":"Normala (DIV)","tag_h1":"Titolo 1","tag_h2":"Titolo 2","tag_h3":"Titolo 3","tag_h4":"Titolo 4","tag_h5":"Titolo 5","tag_h6":"Titolo 6","tag_p":"Normala","tag_pre":"Formatita"},"horizontalrule":{"toolbar":"Enmeti Horizontalan Linion"},"iframe":{"border":"Montri borderon de kadro (frame)","noUrl":"Bonvolu entajpi la retadreson de la ligilo al la enlinia kadro (IFrame)","scrolling":"Ebligi rulumskalon","title":"Atributoj de la enlinia kadro (IFrame)","toolbar":"Enlinia kadro (IFrame)"},"image":{"alertUrl":"Bonvolu tajpi la retadreson de la bildo","alt":"AnstataÅ­iga Teksto","border":"Bordero","btnUpload":"Sendu al Servilo","button2Img":"Ĉu vi volas transformi la selektitan bildbutonon en simplan bildon?","hSpace":"Horizontala Spaco","img2Button":"Ĉu vi volas transformi la selektitan bildon en bildbutonon?","infoTab":"Informoj pri Bildo","linkTab":"Ligilo","lockRatio":"Konservi Proporcion","menu":"Atributoj de Bildo","resetSize":"Origina Grando","title":"Atributoj de Bildo","titleButton":"Bildbutonaj Atributoj","upload":"AlÅuti","urlMissing":"La fontretadreso de la bildo mankas.","vSpace":"Vertikala Spaco","validateBorder":"La bordero devas esti entjera nombro.","validateHSpace":"La horizontala spaco devas esti entjera nombro.","validateVSpace":"La vertikala spaco devas esti entjera nombro."},"indent":{"indent":"Pligrandigi KrommarÄenon","outdent":"Malpligrandigi KrommarÄenon"},"smiley":{"options":"Opcioj pri mienvinjetoj","title":"Enmeti Mienvinjeton","toolbar":"Mienvinjeto"},"justify":{"block":"Äœisrandigi AmbaÅ­flanke","center":"Centrigi","left":"Äœisrandigi maldekstren","right":"Äœisrandigi dekstren"},"language":{"button":"Instali lingvon","remove":"Forigi lingvon"},"link":{"acccessKey":"Fulmoklavo","advanced":"Speciala","advisoryContentType":"Enhavotipo","advisoryTitle":"Priskriba Titolo","anchor":{"toolbar":"Ankro","menu":"Enmeti/ÅœanÄi Ankron","title":"Ankraj Atributoj","name":"Ankra Nomo","errorName":"Bv entajpi la ankran nomon","remove":"Forigi Ankron"},"anchorId":"Per Elementidentigilo","anchorName":"Per Ankronomo","charset":"Signaro de la Ligita Rimedo","cssClasses":"Klasoj de Stilfolioj","emailAddress":"RetpoÅto","emailBody":"MesaÄa korpo","emailSubject":"MesaÄa Temo","id":"Id","info":"Informoj pri la Ligilo","langCode":"Lingva Kodo","langDir":"Skribdirekto","langDirLTR":"De maldekstro dekstren (LTR)","langDirRTL":"De dekstro maldekstren (RTL)","menu":"ÅœanÄi Ligilon","name":"Nomo","noAnchors":"<Ne disponeblas ankroj en la dokumento>","noEmail":"Bonvolu entajpi la retpoÅtadreson","noUrl":"Bonvolu entajpi la URL-on","other":"<alia>","popupDependent":"Dependa (Netscape)","popupFeatures":"Atributoj de la Åœprucfenestro","popupFullScreen":"Tutekrane (IE)","popupLeft":"Maldekstra Pozicio","popupLocationBar":"Adresobreto","popupMenuBar":"Menubreto","popupResizable":"DimensiÅanÄebla","popupScrollBars":"Rulumskaloj","popupStatusBar":"Statobreto","popupToolbar":"Ilobreto","popupTop":"Supra Pozicio","rel":"Rilato","selectAnchor":"Elekti Ankron","styles":"Stilo","tabIndex":"Taba Indekso","target":"Celo","targetFrame":"<kadro>","targetFrameName":"Nomo de CelKadro","targetPopup":"<Åprucfenestro>","targetPopupName":"Nomo de Åœprucfenestro","title":"Ligilo","toAnchor":"Ankri en tiu ĉi paÄo","toEmail":"RetpoÅto","toUrl":"URL","toolbar":"Enmeti/ÅœanÄi Ligilon","type":"Tipo de Ligilo","unlink":"Forigi Ligilon","upload":"AlÅuti"},"list":{"bulletedlist":"Bula Listo","numberedlist":"Numera Listo"},"liststyle":{"armenian":"Armena nombrado","bulletedTitle":"Atributoj de Bula Listo","circle":"Cirklo","decimal":"Dekumaj Nombroj (1, 2, 3, ktp.)","decimalLeadingZero":"Dekumaj Nombroj malantaÅ­ nulo (01, 02, 03, ktp.)","disc":"Disko","georgian":"Gruza nombrado (an, ban, gan, ktp.)","lowerAlpha":"Minusklaj Literoj (a, b, c, d, e, ktp.)","lowerGreek":"Grekaj Minusklaj Literoj (alpha, beta, gamma, ktp.)","lowerRoman":"Minusklaj Romanaj Nombroj (i, ii, iii, iv, v, ktp.)","none":"Neniu","notset":"<DefaÅ­lta>","numberedTitle":"Atributoj de Numera Listo","square":"kvadrato","start":"Komenco","type":"Tipo","upperAlpha":"Majusklaj Literoj (A, B, C, D, E, ktp.)","upperRoman":"Majusklaj Romanaj Nombroj (I, II, III, IV, V, ktp.)","validateStartNumber":"La unua listero devas esti entjera nombro."},"magicline":{"title":"Enmeti paragrafon ĉi-tien"},"maximize":{"maximize":"Pligrandigi","minimize":"Malgrandigi"},"newpage":{"toolbar":"Nova PaÄo"},"pagebreak":{"alt":"PaÄavanco","toolbar":"Enmeti PaÄavancon por Presado"},"pastetext":{"button":"Interglui kiel platan tekston","title":"Interglui kiel platan tekston"},"pastefromword":{"confirmCleanup":"La teksto, kiun vi volas interglui, Åajnas esti kopiita el Word. Ĉu vi deziras purigi Äin antaÅ­ intergluo?","error":"Ne eblis purigi la intergluitajn datenojn pro interna eraro","title":"Interglui el Word","toolbar":"Interglui el Word"},"preview":{"preview":"Vidigi Aspekton"},"print":{"toolbar":"Presi"},"removeformat":{"toolbar":"Forigi Formaton"},"save":{"toolbar":"Konservi"},"selectall":{"toolbar":"Elekti ĉion"},"showblocks":{"toolbar":"Montri la blokojn"},"sourcearea":{"toolbar":"Fonto"},"specialchar":{"options":"Opcioj pri Specialaj Signoj","title":"Selekti Specialan Signon","toolbar":"Enmeti Specialan Signon"},"scayt":{"btn_about":"Pri OKDVT","btn_dictionaries":"Vortaroj","btn_disable":"Malebligi OKDVT","btn_enable":"Ebligi OKDVT","btn_langs":"Lingvoj","btn_options":"Opcioj","text_title":""},"stylescombo":{"label":"Stiloj","panelTitle":"Stiloj pri enpaÄigo","panelTitle1":"Stiloj de blokoj","panelTitle2":"Enliniaj Stiloj","panelTitle3":"Stiloj de objektoj"},"table":{"border":"Bordero","caption":"Tabeltitolo","cell":{"menu":"Ĉelo","insertBefore":"Enmeti Ĉelon AntaÅ­","insertAfter":"Enmeti Ĉelon Post","deleteCell":"Forigi la Ĉelojn","merge":"Kunfandi la Ĉelojn","mergeRight":"Kunfandi dekstren","mergeDown":"Kunfandi malsupren ","splitHorizontal":"Horizontale dividi","splitVertical":"Vertikale dividi","title":"Ĉelatributoj","cellType":"Ĉeltipo","rowSpan":"Kunfando de linioj","colSpan":"Kunfando de kolumnoj","wordWrap":"Cezuro","hAlign":"Horizontala Äisrandigo","vAlign":"Vertikala Äisrandigo","alignBaseline":"Malsupro de la teksto","bgColor":"Fonkoloro","borderColor":"Borderkoloro","data":"Datenoj","header":"Supra paÄotitolo","yes":"Jes","no":"No","invalidWidth":"ĈellarÄo devas esti nombro.","invalidHeight":"Ĉelalto devas esti nombro.","invalidRowSpan":"Kunfando de linioj devas esti entjera nombro.","invalidColSpan":"Kunfando de kolumnoj devas esti entjera nombro.","chooseColor":"Elektu"},"cellPad":"Interna MarÄeno de la ĉeloj","cellSpace":"Spaco inter la Ĉeloj","column":{"menu":"Kolumno","insertBefore":"Enmeti kolumnon antaÅ­","insertAfter":"Enmeti kolumnon post","deleteColumn":"Forigi Kolumnojn"},"columns":"Kolumnoj","deleteTable":"Forigi Tabelon","headers":"Supraj PaÄotitoloj","headersBoth":"AmbaÅ­","headersColumn":"Unua kolumno","headersNone":"Neniu","headersRow":"Unua linio","invalidBorder":"La bordergrando devas esti nombro.","invalidCellPadding":"La interna marÄeno en la ĉeloj devas esti pozitiva nombro.","invalidCellSpacing":"La spaco inter la ĉeloj devas esti pozitiva nombro.","invalidCols":"La nombro de la kolumnoj devas superi 0.","invalidHeight":"La tabelalto devas esti nombro.","invalidRows":"La nombro de la linioj devas superi 0.","invalidWidth":"La tabellarÄo devas esti nombro.","menu":"Atributoj de Tabelo","row":{"menu":"Linio","insertBefore":"Enmeti linion antaÅ­","insertAfter":"Enmeti linion post","deleteRow":"Forigi Liniojn"},"rows":"Linioj","summary":"Resumo","title":"Atributoj de Tabelo","toolbar":"Tabelo","widthPc":"elcentoj","widthPx":"Rastrumeroj","widthUnit":"unuo de larÄo"},"undo":{"redo":"Refari","undo":"Malfari"},"wsc":{"btnIgnore":"Ignori","btnIgnoreAll":"Ignori Ĉion","btnReplace":"AnstataÅ­igi","btnReplaceAll":"AnstataÅ­igi Ĉion","btnUndo":"Malfari","changeTo":"ÅœanÄi al","errorLoading":"Eraro en la servoelÅuto el la gastiga komputiko: %s.","ieSpellDownload":"Ortografikontrolilo ne instalita. Ĉu vi volas elÅuti Äin nun?","manyChanges":"Ortografikontrolado finita: %1 vortoj korektitaj","noChanges":"Ortografikontrolado finita: neniu vorto korektita","noMispell":"Ortografikontrolado finita: neniu eraro trovita","noSuggestions":"- Neniu propono -","notAvailable":"BedaÅ­rinde la servo ne funkcias nuntempe.","notInDic":"Ne trovita en la vortaro","oneChange":"Ortografikontrolado finita: unu vorto korektita","progress":"La ortografio estas kontrolata...","title":"Kontroli la ortografion","toolbar":"Kontroli la ortografion"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/es.js b/wqflask/wqflask/static/packages/ckeditor/lang/es.js
deleted file mode 100644
index b1fd2dd1..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/es.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['es']={"editor":"Editor de texto enriquecido","editorPanel":"Panel del Editor de Texto Enriquecido","common":{"editorHelp":"Pulse ALT 0 para ayuda","browseServer":"Ver Servidor","url":"URL","protocol":"Protocolo","upload":"Cargar","uploadSubmit":"Enviar al Servidor","image":"Imagen","flash":"Flash","form":"Formulario","checkbox":"Casilla de Verificación","radio":"Botones de Radio","textField":"Campo de Texto","textarea":"Area de Texto","hiddenField":"Campo Oculto","button":"Botón","select":"Campo de Selección","imageButton":"Botón Imagen","notSet":"<No definido>","id":"Id","name":"Nombre","langDir":"Orientación","langDirLtr":"Izquierda a Derecha (LTR)","langDirRtl":"Derecha a Izquierda (RTL)","langCode":"Cód. de idioma","longDescr":"Descripción larga URL","cssClass":"Clases de hojas de estilo","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Cerrar","preview":"Previsualización","resize":"Arrastre para redimensionar","generalTab":"General","advancedTab":"Avanzado","validateNumberFailed":"El valor no es un número.","confirmNewPage":"Cualquier cambio que no se haya guardado se perderá.\r\n¿Está seguro de querer crear una nueva página?","confirmCancel":"Algunas de las opciones se han cambiado.\r\n¿Está seguro de querer cerrar el diálogo?","options":"Opciones","target":"Destino","targetNew":"Nueva ventana (_blank)","targetTop":"Ventana principal (_top)","targetSelf":"Misma ventana (_self)","targetParent":"Ventana padre (_parent)","langDirLTR":"Izquierda a derecha (LTR)","langDirRTL":"Derecha a izquierda (RTL)","styles":"Estilos","cssClasses":"Clase de la hoja de estilos","width":"Anchura","height":"Altura","align":"Alineación","alignLeft":"Izquierda","alignRight":"Derecha","alignCenter":"Centrado","alignJustify":"Justificado","alignTop":"Tope","alignMiddle":"Centro","alignBottom":"Pie","alignNone":"None","invalidValue":"Valor no válido","invalidHeight":"Altura debe ser un número.","invalidWidth":"Anchura debe ser un número.","invalidCssLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"El valor especificado para el campo \"%1\" debe ser un número positivo, incluyendo optionalmente una unidad de medida HTML válida (px o %).","invalidInlineStyle":"El valor especificado para el estilo debe consistir en uno o más pares con el formato \"nombre: valor\", separados por punto y coma.","cssLengthTooltip":"Introduca un número para el valor en pixels o un número con una unidad de medida CSS válida (px, %, in, cm, mm, em, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, no disponible</span>"},"about":{"copy":"Copyright &copy; $1. Todos los derechos reservados.","dlgTitle":"Acerca de CKEditor","help":"Lea la $1 para resolver sus dudas.","moreInfo":"Para información de licencia, por favor visite nuestro sitio web:","title":"Acerca de CKEditor","userGuide":"Guía de usuario de CKEditor"},"basicstyles":{"bold":"Negrita","italic":"Cursiva","strike":"Tachado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subrayado"},"bidi":{"ltr":"Dirección del texto de izquierda a derecha","rtl":"Dirección del texto de derecha a izquierda"},"blockquote":{"toolbar":"Cita"},"clipboard":{"copy":"Copiar","copyError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de copiado.\r\nPor favor use el teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"La configuración de seguridad de este navegador no permite la ejecución automática de operaciones de cortado.\r\nPor favor use el teclado (Ctrl/Cmd+X).","paste":"Pegar","pasteArea":"Zona de pegado","pasteMsg":"Por favor pegue dentro del cuadro utilizando el teclado (<STRONG>Ctrl/Cmd+V</STRONG>);\r\nluego presione <STRONG>Aceptar</STRONG>.","securityMsg":"Debido a la configuración de seguridad de su navegador, el editor no tiene acceso al portapapeles.\r\nEs necesario que lo pegue de nuevo en esta ventana.","title":"Pegar"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automático","bgColorTitle":"Color de Fondo","colors":{"000":"Negro","800000":"Marrón oscuro","8B4513":"Marrón tierra","2F4F4F":"Pizarra Oscuro","008080":"Azul verdoso","000080":"Azul marino","4B0082":"Añil","696969":"Gris oscuro","B22222":"Ladrillo","A52A2A":"Marrón","DAA520":"Oro oscuro","006400":"Verde oscuro","40E0D0":"Turquesa","0000CD":"Azul medio-oscuro","800080":"Púrpura","808080":"Gris","F00":"Rojo","FF8C00":"Naranja oscuro","FFD700":"Oro","008000":"Verde","0FF":"Cian","00F":"Azul","EE82EE":"Violeta","A9A9A9":"Gris medio","FFA07A":"Salmón claro","FFA500":"Naranja","FFFF00":"Amarillo","00FF00":"Lima","AFEEEE":"Turquesa claro","ADD8E6":"Azul claro","DDA0DD":"Violeta claro","D3D3D3":"Gris claro","FFF0F5":"Lavanda rojizo","FAEBD7":"Blanco antiguo","FFFFE0":"Amarillo claro","F0FFF0":"Miel","F0FFFF":"Azul celeste","F0F8FF":"Azul pálido","E6E6FA":"Lavanda","FFF":"Blanco"},"more":"Más Colores...","panelTitle":"Colores","textColorTitle":"Color de Texto"},"colordialog":{"clear":"Borrar","highlight":"Muestra","options":"Opciones de colores","selected":"Elegido","title":"Elegir color"},"templates":{"button":"Plantillas","emptyListMsg":"(No hay plantillas definidas)","insertOption":"Reemplazar el contenido actual","options":"Opciones de plantillas","selectPromptMsg":"Por favor selecciona la plantilla a abrir en el editor<br>(el contenido actual se perderá):","title":"Contenido de Plantillas"},"contextmenu":{"options":"Opciones del menú contextual"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Título","cssClassInputLabel":"Clase de hoja de estilos","edit":"Editar Div","inlineStyleInputLabel":"Estilo","langDirLTRLabel":"Izquierda a Derecha (LTR)","langDirLabel":"Orientación","langDirRTLLabel":"Derecha a Izquierda (RTL)","languageCodeInputLabel":" Codigo de idioma","remove":"Quitar Div","styleSelectLabel":"Estilo","title":"Crear contenedor DIV","toolbar":"Crear contenedor DIV"},"toolbar":{"toolbarCollapse":"Contraer barra de herramientas","toolbarExpand":"Expandir barra de herramientas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeles/Deshacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Párrafo","links":"Enlaces","insert":"Insertar","styles":"Estilos","colors":"Colores","tools":"Herramientas"},"toolbars":"Barras de herramientas del editor"},"elementspath":{"eleLabel":"Ruta de los elementos","eleTitle":"%1 elemento"},"find":{"find":"Buscar","findOptions":"Opciones de búsqueda","findWhat":"Texto a buscar:","matchCase":"Coincidir may/min","matchCyclic":"Buscar en todo el contenido","matchWord":"Coincidir toda la palabra","notFoundMsg":"El texto especificado no ha sido encontrado.","replace":"Reemplazar","replaceAll":"Reemplazar Todo","replaceSuccessMsg":"La expresión buscada ha sido reemplazada %1 veces.","replaceWith":"Reemplazar con:","title":"Buscar y Reemplazar"},"fakeobjects":{"anchor":"Ancla","flash":"Animación flash","hiddenfield":"Campo oculto","iframe":"IFrame","unknown":"Objeto desconocido"},"flash":{"access":"Acceso de scripts","accessAlways":"Siempre","accessNever":"Nunca","accessSameDomain":"Mismo dominio","alignAbsBottom":"Abs inferior","alignAbsMiddle":"Abs centro","alignBaseline":"Línea de base","alignTextTop":"Tope del texto","bgcolor":"Color de Fondo","chkFull":"Permitir pantalla completa","chkLoop":"Repetir","chkMenu":"Activar Menú Flash","chkPlay":"Autoejecución","flashvars":"Opciones","hSpace":"Esp.Horiz","properties":"Propiedades de Flash","propertiesTab":"Propiedades","quality":"Calidad","qualityAutoHigh":"Auto Alta","qualityAutoLow":"Auto Baja","qualityBest":"La mejor","qualityHigh":"Alta","qualityLow":"Baja","qualityMedium":"Media","scale":"Escala","scaleAll":"Mostrar todo","scaleFit":"Ajustado","scaleNoBorder":"Sin Borde","title":"Propiedades de Flash","vSpace":"Esp.Vert","validateHSpace":"Esp.Horiz debe ser un número.","validateSrc":"Por favor escriba el vínculo URL","validateVSpace":"Esp.Vert debe ser un número.","windowMode":"WindowMode","windowModeOpaque":"Opaco","windowModeTransparent":"Transparente","windowModeWindow":"Ventana"},"font":{"fontSize":{"label":"Tamaño","voiceLabel":"Tamaño de fuente","panelTitle":"Tamaño"},"label":"Fuente","panelTitle":"Fuente","voiceLabel":"Fuente"},"forms":{"button":{"title":"Propiedades de Botón","text":"Texto (Valor)","type":"Tipo","typeBtn":"Boton","typeSbm":"Enviar","typeRst":"Reestablecer"},"checkboxAndRadio":{"checkboxTitle":"Propiedades de Casilla","radioTitle":"Propiedades de Botón de Radio","value":"Valor","selected":"Seleccionado"},"form":{"title":"Propiedades de Formulario","menu":"Propiedades de Formulario","action":"Acción","method":"Método","encoding":"Codificación"},"hidden":{"title":"Propiedades de Campo Oculto","name":"Nombre","value":"Valor"},"select":{"title":"Propiedades de Campo de Selección","selectInfo":"Información","opAvail":"Opciones disponibles","value":"Valor","size":"Tamaño","lines":"Lineas","chkMulti":"Permitir múltiple selección","opText":"Texto","opValue":"Valor","btnAdd":"Agregar","btnModify":"Modificar","btnUp":"Subir","btnDown":"Bajar","btnSetValue":"Establecer como predeterminado","btnDelete":"Eliminar"},"textarea":{"title":"Propiedades de Area de Texto","cols":"Columnas","rows":"Filas"},"textfield":{"title":"Propiedades de Campo de Texto","name":"Nombre","value":"Valor","charWidth":"Caracteres de ancho","maxChars":"Máximo caracteres","type":"Tipo","typeText":"Texto","typePass":"Contraseña","typeEmail":"Correo electrónico","typeSearch":"Buscar","typeTel":"Número de teléfono","typeUrl":"URL"}},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Dirección","tag_div":"Normal (DIV)","tag_h1":"Encabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Con formato"},"horizontalrule":{"toolbar":"Insertar Línea Horizontal"},"iframe":{"border":"Mostrar borde del marco","noUrl":"Por favor, escriba la dirección del iframe","scrolling":"Activar barras de desplazamiento","title":"Propiedades de iframe","toolbar":"IFrame"},"image":{"alertUrl":"Por favor escriba la URL de la imagen","alt":"Texto Alternativo","border":"Borde","btnUpload":"Enviar al Servidor","button2Img":"¿Desea convertir el botón de imagen en una simple imagen?","hSpace":"Esp.Horiz","img2Button":"¿Desea convertir la imagen en un botón de imagen?","infoTab":"Información de Imagen","linkTab":"Vínculo","lockRatio":"Proporcional","menu":"Propiedades de Imagen","resetSize":"Tamaño Original","title":"Propiedades de Imagen","titleButton":"Propiedades de Botón de Imagen","upload":"Cargar","urlMissing":"Debe indicar la URL de la imagen.","vSpace":"Esp.Vert","validateBorder":"El borde debe ser un número.","validateHSpace":"El espaciado horizontal debe ser un número.","validateVSpace":"El espaciado vertical debe ser un número."},"indent":{"indent":"Aumentar Sangría","outdent":"Disminuir Sangría"},"smiley":{"options":"Opciones de emoticonos","title":"Insertar un Emoticon","toolbar":"Emoticonos"},"justify":{"block":"Justificado","center":"Centrar","left":"Alinear a Izquierda","right":"Alinear a Derecha"},"language":{"button":"Fijar lenguaje","remove":"Quitar lenguaje"},"link":{"acccessKey":"Tecla de Acceso","advanced":"Avanzado","advisoryContentType":"Tipo de Contenido","advisoryTitle":"Título","anchor":{"toolbar":"Referencia","menu":"Propiedades de Referencia","title":"Propiedades de Referencia","name":"Nombre de la Referencia","errorName":"Por favor, complete el nombre de la Referencia","remove":"Quitar Referencia"},"anchorId":"Por ID de elemento","anchorName":"Por Nombre de Referencia","charset":"Fuente de caracteres vinculado","cssClasses":"Clases de hojas de estilo","emailAddress":"Dirección de E-Mail","emailBody":"Cuerpo del Mensaje","emailSubject":"Título del Mensaje","id":"Id","info":"Información de Vínculo","langCode":"Código idioma","langDir":"Orientación","langDirLTR":"Izquierda a Derecha (LTR)","langDirRTL":"Derecha a Izquierda (RTL)","menu":"Editar Vínculo","name":"Nombre","noAnchors":"(No hay referencias disponibles en el documento)","noEmail":"Por favor escriba la dirección de e-mail","noUrl":"Por favor escriba el vínculo URL","other":"<otro>","popupDependent":"Dependiente (Netscape)","popupFeatures":"Características de Ventana Emergente","popupFullScreen":"Pantalla Completa (IE)","popupLeft":"Posición Izquierda","popupLocationBar":"Barra de ubicación","popupMenuBar":"Barra de Menú","popupResizable":"Redimensionable","popupScrollBars":"Barras de desplazamiento","popupStatusBar":"Barra de Estado","popupToolbar":"Barra de Herramientas","popupTop":"Posición Derecha","rel":"Relación","selectAnchor":"Seleccionar una referencia","styles":"Estilo","tabIndex":"Indice de tabulación","target":"Destino","targetFrame":"<marco>","targetFrameName":"Nombre del Marco Destino","targetPopup":"<ventana emergente>","targetPopupName":"Nombre de Ventana Emergente","title":"Vínculo","toAnchor":"Referencia en esta página","toEmail":"E-Mail","toUrl":"URL","toolbar":"Insertar/Editar Vínculo","type":"Tipo de vínculo","unlink":"Eliminar Vínculo","upload":"Cargar"},"list":{"bulletedlist":"Viñetas","numberedlist":"Numeración"},"liststyle":{"armenian":"Numeración armenia","bulletedTitle":"Propiedades de viñetas","circle":"Círculo","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal con cero inicial (01, 02, 03, etc.)","disc":"Disco","georgian":"Numeración georgiana (an, ban, gan, etc.)","lowerAlpha":"Alfabeto en minúsculas (a, b, c, d, e, etc.)","lowerGreek":"Letras griegas (alpha, beta, gamma, etc.)","lowerRoman":"Números romanos en minúsculas (i, ii, iii, iv, v, etc.)","none":"Ninguno","notset":"<sin establecer>","numberedTitle":"Propiedades de lista numerada","square":"Cuadrado","start":"Inicio","type":"Tipo","upperAlpha":"Alfabeto en mayúsculas (A, B, C, D, E, etc.)","upperRoman":"Números romanos en mayúsculas (I, II, III, IV, V, etc.)","validateStartNumber":"El Inicio debe ser un número entero."},"magicline":{"title":"Insertar párrafo aquí"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"newpage":{"toolbar":"Nueva Página"},"pagebreak":{"alt":"Salto de página","toolbar":"Insertar Salto de Página"},"pastetext":{"button":"Pegar como Texto Plano","title":"Pegar como Texto Plano"},"pastefromword":{"confirmCleanup":"El texto que desea parece provenir de Word.\r\n¿Desea depurarlo antes de pegarlo?","error":"No ha sido posible limpiar los datos debido a un error interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"preview":{"preview":"Vista Previa"},"print":{"toolbar":"Imprimir"},"removeformat":{"toolbar":"Eliminar Formato"},"save":{"toolbar":"Guardar"},"selectall":{"toolbar":"Seleccionar Todo"},"showblocks":{"toolbar":"Mostrar bloques"},"sourcearea":{"toolbar":"Fuente HTML"},"specialchar":{"options":"Opciones de caracteres especiales","title":"Seleccione un caracter especial","toolbar":"Insertar Caracter Especial"},"scayt":{"btn_about":"Acerca de Corrector","btn_dictionaries":"Diccionarios","btn_disable":"Desactivar Corrector","btn_enable":"Activar Corrector","btn_langs":"Idiomas","btn_options":"Opciones","text_title":""},"stylescombo":{"label":"Estilo","panelTitle":"Estilos para formatear","panelTitle1":"Estilos de párrafo","panelTitle2":"Estilos de carácter","panelTitle3":"Estilos de objeto"},"table":{"border":"Tamaño de Borde","caption":"Título","cell":{"menu":"Celda","insertBefore":"Insertar celda a la izquierda","insertAfter":"Insertar celda a la derecha","deleteCell":"Eliminar Celdas","merge":"Combinar Celdas","mergeRight":"Combinar a la derecha","mergeDown":"Combinar hacia abajo","splitHorizontal":"Dividir la celda horizontalmente","splitVertical":"Dividir la celda verticalmente","title":"Propiedades de celda","cellType":"Tipo de Celda","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Ajustar al contenido","hAlign":"Alineación Horizontal","vAlign":"Alineación Vertical","alignBaseline":"Linea de base","bgColor":"Color de fondo","borderColor":"Color de borde","data":"Datos","header":"Encabezado","yes":"Sí","no":"No","invalidWidth":"La anchura de celda debe ser un número.","invalidHeight":"La altura de celda debe ser un número.","invalidRowSpan":"La expansión de filas debe ser un número entero.","invalidColSpan":"La expansión de columnas debe ser un número entero.","chooseColor":"Elegir"},"cellPad":"Esp. interior","cellSpace":"Esp. e/celdas","column":{"menu":"Columna","insertBefore":"Insertar columna a la izquierda","insertAfter":"Insertar columna a la derecha","deleteColumn":"Eliminar Columnas"},"columns":"Columnas","deleteTable":"Eliminar Tabla","headers":"Encabezados","headersBoth":"Ambas","headersColumn":"Primera columna","headersNone":"Ninguno","headersRow":"Primera fila","invalidBorder":"El tamaño del borde debe ser un número.","invalidCellPadding":"El espaciado interior debe ser un número.","invalidCellSpacing":"El espaciado entre celdas debe ser un número.","invalidCols":"El número de columnas debe ser un número mayor que 0.","invalidHeight":"La altura de tabla debe ser un número.","invalidRows":"El número de filas debe ser un número mayor que 0.","invalidWidth":"La anchura de tabla debe ser un número.","menu":"Propiedades de Tabla","row":{"menu":"Fila","insertBefore":"Insertar fila en la parte superior","insertAfter":"Insertar fila en la parte inferior","deleteRow":"Eliminar Filas"},"rows":"Filas","summary":"Síntesis","title":"Propiedades de Tabla","toolbar":"Tabla","widthPc":"porcentaje","widthPx":"pixeles","widthUnit":"unidad de la anchura"},"undo":{"redo":"Rehacer","undo":"Deshacer"},"wsc":{"btnIgnore":"Ignorar","btnIgnoreAll":"Ignorar Todo","btnReplace":"Reemplazar","btnReplaceAll":"Reemplazar Todo","btnUndo":"Deshacer","changeTo":"Cambiar a","errorLoading":"Error cargando la aplicación del servidor: %s.","ieSpellDownload":"Módulo de Control de Ortografía no instalado.\r\n¿Desea descargarlo ahora?","manyChanges":"Control finalizado: se ha cambiado %1 palabras","noChanges":"Control finalizado: no se ha cambiado ninguna palabra","noMispell":"Control finalizado: no se encontraron errores","noSuggestions":"- No hay sugerencias -","notAvailable":"Lo sentimos pero el servicio no está disponible.","notInDic":"No se encuentra en el Diccionario","oneChange":"Control finalizado: se ha cambiado una palabra","progress":"Control de Ortografía en progreso...","title":"Comprobar ortografía","toolbar":"Ortografía"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/et.js b/wqflask/wqflask/static/packages/ckeditor/lang/et.js
deleted file mode 100644
index fade92cc..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/et.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['et']={"editor":"Rikkalik tekstiredaktor","editorPanel":"Rikkaliku tekstiredaktori paneel","common":{"editorHelp":"Abi saamiseks vajuta ALT 0","browseServer":"Serveri sirvimine","url":"URL","protocol":"Protokoll","upload":"Laadi üles","uploadSubmit":"Saada serverisse","image":"Pilt","flash":"Flash","form":"Vorm","checkbox":"Märkeruut","radio":"Raadionupp","textField":"Tekstilahter","textarea":"Tekstiala","hiddenField":"Varjatud lahter","button":"Nupp","select":"Valiklahter","imageButton":"Piltnupp","notSet":"<määramata>","id":"ID","name":"Nimi","langDir":"Keele suund","langDirLtr":"Vasakult paremale (LTR)","langDirRtl":"Paremalt vasakule (RTL)","langCode":"Keele kood","longDescr":"Pikk kirjeldus URL","cssClass":"Stiilistiku klassid","advisoryTitle":"Soovituslik pealkiri","cssStyle":"Laad","ok":"Olgu","cancel":"Loobu","close":"Sulge","preview":"Eelvaade","resize":"Suuruse muutmiseks lohista","generalTab":"Üldine","advancedTab":"Täpsemalt","validateNumberFailed":"See väärtus pole number.","confirmNewPage":"Kõik salvestamata muudatused lähevad kaotsi. Kas oled kindel, et tahad laadida uue lehe?","confirmCancel":"Mõned valikud on muudetud. Kas oled kindel, et tahad dialoogi sulgeda?","options":"Valikud","target":"Sihtkoht","targetNew":"Uus aken (_blank)","targetTop":"Kõige ülemine aken (_top)","targetSelf":"Sama aken (_self)","targetParent":"Vanemaken (_parent)","langDirLTR":"Vasakult paremale (LTR)","langDirRTL":"Paremalt vasakule (RTL)","styles":"Stiili","cssClasses":"Stiililehe klassid","width":"Laius","height":"Kõrgus","align":"Joondus","alignLeft":"Vasak","alignRight":"Paremale","alignCenter":"Kesk","alignJustify":"Rööpjoondus","alignTop":"Üles","alignMiddle":"Keskele","alignBottom":"Alla","alignNone":"None","invalidValue":"Vigane väärtus.","invalidHeight":"Kõrgus peab olema number.","invalidWidth":"Laius peab olema number.","invalidCssLength":"\"%1\" välja jaoks määratud väärtus peab olema positiivne täisarv CSS ühikuga (px, %, in, cm, mm, em, ex, pt või pc) või ilma.","invalidHtmlLength":"\"%1\" välja jaoks määratud väärtus peab olema positiivne täisarv HTML ühikuga (px või %) või ilma.","invalidInlineStyle":"Reasisese stiili määrangud peavad koosnema paarisväärtustest (tuples), mis on semikoolonitega eraldatult järgnevas vormingus: \"nimi : väärtus\".","cssLengthTooltip":"Sisesta väärtus pikslites või number koos sobiva CSS-i ühikuga (px, %, in, cm, mm, em, ex, pt või pc).","unavailable":"%1<span class=\"cke_accessibility\">, pole saadaval</span>"},"about":{"copy":"Copyright &copy; $1. Kõik õigused kaitstud.","dlgTitle":"CKEditorist","help":"Abi jaoks vaata $1.","moreInfo":"Litsentsi andmed leiab meie veebilehelt:","title":"CKEditorist","userGuide":"CKEditori kasutusjuhendit"},"basicstyles":{"bold":"Paks","italic":"Kursiiv","strike":"Läbijoonitud","subscript":"Allindeks","superscript":"Ülaindeks","underline":"Allajoonitud"},"bidi":{"ltr":"Teksti suund vasakult paremale","rtl":"Teksti suund paremalt vasakule"},"blockquote":{"toolbar":"Blokktsitaat"},"clipboard":{"copy":"Kopeeri","copyError":"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt kopeerida. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+C).","cut":"Lõika","cutError":"Sinu veebisirvija turvaseaded ei luba redaktoril automaatselt lõigata. Palun kasutage selleks klaviatuuri klahvikombinatsiooni (Ctrl/Cmd+X).","paste":"Aseta","pasteArea":"Asetamise ala","pasteMsg":"Palun aseta tekst järgnevasse kasti kasutades klaviatuuri klahvikombinatsiooni (<STRONG>Ctrl/Cmd+V</STRONG>) ja vajuta seejärel <STRONG>OK</STRONG>.","securityMsg":"Sinu veebisirvija turvaseadete tõttu ei oma redaktor otsest ligipääsu lõikelaua andmetele. Sa pead asetama need uuesti siia aknasse.","title":"Asetamine"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automaatne","bgColorTitle":"Tausta värv","colors":{"000":"Must","800000":"Kastanpruun","8B4513":"Sadulapruun","2F4F4F":"Tume paehall","008080":"Sinakasroheline","000080":"Meresinine","4B0082":"Indigosinine","696969":"Tumehall","B22222":"Šamottkivi","A52A2A":"Pruun","DAA520":"Kuldkollane","006400":"Tumeroheline","40E0D0":"Türkiissinine","0000CD":"Keskmine sinine","800080":"Lilla","808080":"Hall","F00":"Punanae","FF8C00":"Tumeoranž","FFD700":"Kuldne","008000":"Roheline","0FF":"Tsüaniidsinine","00F":"Sinine","EE82EE":"Violetne","A9A9A9":"Tuhm hall","FFA07A":"Hele lõhe","FFA500":"Oranž","FFFF00":"Kollane","00FF00":"Lubja hall","AFEEEE":"Kahvatu türkiis","ADD8E6":"Helesinine","DDA0DD":"Ploomililla","D3D3D3":"Helehall","FFF0F5":"Lavendlipunane","FAEBD7":"Antiikvalge","FFFFE0":"Helekollane","F0FFF0":"Meloniroheline","F0FFFF":"Taevasinine","F0F8FF":"Beebisinine","E6E6FA":"Lavendel","FFF":"Valge"},"more":"Rohkem värve...","panelTitle":"Värvid","textColorTitle":"Teksti värv"},"colordialog":{"clear":"Eemalda","highlight":"Näidis","options":"Värvi valikud","selected":"Valitud värv","title":"Värvi valimine"},"templates":{"button":"Mall","emptyListMsg":"(Ühtegi malli ei ole defineeritud)","insertOption":"Praegune sisu asendatakse","options":"Malli valikud","selectPromptMsg":"Palun vali mall, mis avada redaktoris<br />(praegune sisu läheb kaotsi):","title":"Sisumallid"},"contextmenu":{"options":"Kontekstimenüü valikud"},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"Soovitatav pealkiri","cssClassInputLabel":"Stiililehe klassid","edit":"Muuda Div","inlineStyleInputLabel":"Reasisene stiil","langDirLTRLabel":"Vasakult paremale (LTR)","langDirLabel":"Keele suund","langDirRTLLabel":"Paremalt vasakule (RTL)","languageCodeInputLabel":" Keelekood","remove":"Eemalda Div","styleSelectLabel":"Stiil","title":"Div-konteineri loomine","toolbar":"Div-konteineri loomine"},"toolbar":{"toolbarCollapse":"Tööriistariba peitmine","toolbarExpand":"Tööriistariba näitamine","toolbarGroups":{"document":"Dokument","clipboard":"Lõikelaud/tagasivõtmine","editing":"Muutmine","forms":"Vormid","basicstyles":"Põhistiilid","paragraph":"Lõik","links":"Lingid","insert":"Sisesta","styles":"Stiilid","colors":"Värvid","tools":"Tööriistad"},"toolbars":"Redaktori tööriistaribad"},"elementspath":{"eleLabel":"Elementide asukoht","eleTitle":"%1 element"},"find":{"find":"Otsi","findOptions":"Otsingu valikud","findWhat":"Otsitav:","matchCase":"Suur- ja väiketähtede eristamine","matchCyclic":"Jätkatakse algusest","matchWord":"Ainult terved sõnad","notFoundMsg":"Otsitud teksti ei leitud.","replace":"Asenda","replaceAll":"Asenda kõik","replaceSuccessMsg":"%1 vastet asendati.","replaceWith":"Asendus:","title":"Otsimine ja asendamine"},"fakeobjects":{"anchor":"Ankur","flash":"Flashi animatsioon","hiddenfield":"Varjatud väli","iframe":"IFrame","unknown":"Tundmatu objekt"},"flash":{"access":"Skriptide ligipääs","accessAlways":"Kõigile","accessNever":"Mitte ühelegi","accessSameDomain":"Samalt domeenilt","alignAbsBottom":"Abs alla","alignAbsMiddle":"Abs keskele","alignBaseline":"Baasjoonele","alignTextTop":"Tekstist üles","bgcolor":"Tausta värv","chkFull":"Täisekraan lubatud","chkLoop":"Korduv","chkMenu":"Flashi menüü lubatud","chkPlay":"Automaatne start ","flashvars":"Flashi muutujad","hSpace":"H. vaheruum","properties":"Flashi omadused","propertiesTab":"Omadused","quality":"Kvaliteet","qualityAutoHigh":"Automaatne kõrge","qualityAutoLow":"Automaatne madal","qualityBest":"Parim","qualityHigh":"Kõrge","qualityLow":"Madal","qualityMedium":"Keskmine","scale":"Mastaap","scaleAll":"Näidatakse kõike","scaleFit":"Täpne sobivus","scaleNoBorder":"Äärist ei ole","title":"Flashi omadused","vSpace":"V. vaheruum","validateHSpace":"H. vaheruum peab olema number.","validateSrc":"Palun kirjuta lingi URL","validateVSpace":"V. vaheruum peab olema number.","windowMode":"Akna režiim","windowModeOpaque":"Läbipaistmatu","windowModeTransparent":"Läbipaistev","windowModeWindow":"Aken"},"font":{"fontSize":{"label":"Suurus","voiceLabel":"Kirja suurus","panelTitle":"Suurus"},"label":"Kiri","panelTitle":"Kiri","voiceLabel":"Kiri"},"forms":{"button":{"title":"Nupu omadused","text":"Tekst (väärtus)","type":"Liik","typeBtn":"Nupp","typeSbm":"Saada","typeRst":"Lähtesta"},"checkboxAndRadio":{"checkboxTitle":"Märkeruudu omadused","radioTitle":"Raadionupu omadused","value":"Väärtus","selected":"Märgitud"},"form":{"title":"Vormi omadused","menu":"Vormi omadused","action":"Toiming","method":"Meetod","encoding":"Kodeering"},"hidden":{"title":"Varjatud lahtri omadused","name":"Nimi","value":"Väärtus"},"select":{"title":"Valiklahtri omadused","selectInfo":"Info","opAvail":"Võimalikud valikud:","value":"Väärtus","size":"Suurus","lines":"ridu","chkMulti":"Võimalik mitu valikut","opText":"Tekst","opValue":"Väärtus","btnAdd":"Lisa","btnModify":"Muuda","btnUp":"Üles","btnDown":"Alla","btnSetValue":"Määra vaikimisi","btnDelete":"Kustuta"},"textarea":{"title":"Tekstiala omadused","cols":"Veerge","rows":"Ridu"},"textfield":{"title":"Tekstilahtri omadused","name":"Nimi","value":"Väärtus","charWidth":"Laius (tähemärkides)","maxChars":"Maksimaalselt tähemärke","type":"Liik","typeText":"Tekst","typePass":"Parool","typeEmail":"E-mail","typeSearch":"Otsi","typeTel":"Telefon","typeUrl":"URL"}},"format":{"label":"Vorming","panelTitle":"Vorming","tag_address":"Aadress","tag_div":"Tavaline (DIV)","tag_h1":"Pealkiri 1","tag_h2":"Pealkiri 2","tag_h3":"Pealkiri 3","tag_h4":"Pealkiri 4","tag_h5":"Pealkiri 5","tag_h6":"Pealkiri 6","tag_p":"Tavaline","tag_pre":"Vormindatud"},"horizontalrule":{"toolbar":"Horisontaaljoone sisestamine"},"iframe":{"border":"Raami äärise näitamine","noUrl":"Vali iframe URLi liik","scrolling":"Kerimisribade lubamine","title":"IFrame omadused","toolbar":"IFrame"},"image":{"alertUrl":"Palun kirjuta pildi URL","alt":"Alternatiivne tekst","border":"Joon","btnUpload":"Saada serverisse","button2Img":"Kas tahad teisendada valitud pildiga nupu tavaliseks pildiks?","hSpace":"H. vaheruum","img2Button":"Kas tahad teisendada valitud tavalise pildi pildiga nupuks?","infoTab":"Pildi info","linkTab":"Link","lockRatio":"Lukusta kuvasuhe","menu":"Pildi omadused","resetSize":"Lähtesta suurus","title":"Pildi omadused","titleButton":"Piltnupu omadused","upload":"Lae üles","urlMissing":"Pildi lähte-URL on puudu.","vSpace":"V. vaheruum","validateBorder":"Äärise laius peab olema täisarv.","validateHSpace":"Horisontaalne vaheruum peab olema täisarv.","validateVSpace":"Vertikaalne vaheruum peab olema täisarv."},"indent":{"indent":"Taande suurendamine","outdent":"Taande vähendamine"},"smiley":{"options":"Emotikonide valikud","title":"Sisesta emotikon","toolbar":"Emotikon"},"justify":{"block":"Rööpjoondus","center":"Keskjoondus","left":"Vasakjoondus","right":"Paremjoondus"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Juurdepääsu võti","advanced":"Täpsemalt","advisoryContentType":"Juhendava sisu tüüp","advisoryTitle":"Juhendav tiitel","anchor":{"toolbar":"Ankru sisestamine/muutmine","menu":"Ankru omadused","title":"Ankru omadused","name":"Ankru nimi","errorName":"Palun sisesta ankru nimi","remove":"Eemalda ankur"},"anchorId":"Elemendi id järgi","anchorName":"Ankru nime järgi","charset":"Lingitud ressursi märgistik","cssClasses":"Stiilistiku klassid","emailAddress":"E-posti aadress","emailBody":"Sõnumi tekst","emailSubject":"Sõnumi teema","id":"ID","info":"Lingi info","langCode":"Keele suund","langDir":"Keele suund","langDirLTR":"Vasakult paremale (LTR)","langDirRTL":"Paremalt vasakule (RTL)","menu":"Muuda linki","name":"Nimi","noAnchors":"(Selles dokumendis pole ankruid)","noEmail":"Palun kirjuta e-posti aadress","noUrl":"Palun kirjuta lingi URL","other":"<muu>","popupDependent":"Sõltuv (Netscape)","popupFeatures":"Hüpikakna omadused","popupFullScreen":"Täisekraan (IE)","popupLeft":"Vasak asukoht","popupLocationBar":"Aadressiriba","popupMenuBar":"Menüüriba","popupResizable":"Suurust saab muuta","popupScrollBars":"Kerimisribad","popupStatusBar":"Olekuriba","popupToolbar":"Tööriistariba","popupTop":"Ülemine asukoht","rel":"Suhe","selectAnchor":"Vali ankur","styles":"Laad","tabIndex":"Tab indeks","target":"Sihtkoht","targetFrame":"<raam>","targetFrameName":"Sihtmärk raami nimi","targetPopup":"<hüpikaken>","targetPopupName":"Hüpikakna nimi","title":"Link","toAnchor":"Ankur sellel lehel","toEmail":"E-post","toUrl":"URL","toolbar":"Lingi lisamine/muutmine","type":"Lingi liik","unlink":"Lingi eemaldamine","upload":"Lae üles"},"list":{"bulletedlist":"Punktloend","numberedlist":"Numberloend"},"liststyle":{"armenian":"Armeenia numbrid","bulletedTitle":"Punktloendi omadused","circle":"Ring","decimal":"Numbrid (1, 2, 3, jne)","decimalLeadingZero":"Numbrid algusnulliga (01, 02, 03, jne)","disc":"Täpp","georgian":"Gruusia numbrid (an, ban, gan, jne)","lowerAlpha":"Väiketähed (a, b, c, d, e, jne)","lowerGreek":"Kreeka väiketähed (alpha, beta, gamma, jne)","lowerRoman":"Väiksed rooma numbrid (i, ii, iii, iv, v, jne)","none":"Puudub","notset":"<pole määratud>","numberedTitle":"Numberloendi omadused","square":"Ruut","start":"Algus","type":"Liik","upperAlpha":"Suurtähed (A, B, C, D, E, jne)","upperRoman":"Suured rooma numbrid (I, II, III, IV, V, jne)","validateStartNumber":"Loendi algusnumber peab olema täisarv."},"magicline":{"title":"Sisesta siia lõigu tekst"},"maximize":{"maximize":"Maksimeerimine","minimize":"Minimeerimine"},"newpage":{"toolbar":"Uus leht"},"pagebreak":{"alt":"Lehevahetuskoht","toolbar":"Lehevahetuskoha sisestamine"},"pastetext":{"button":"Asetamine tavalise tekstina","title":"Asetamine tavalise tekstina"},"pastefromword":{"confirmCleanup":"Tekst, mida tahad asetada näib pärinevat Wordist. Kas tahad selle enne asetamist puhastada?","error":"Asetatud andmete puhastamine ei olnud sisemise vea tõttu võimalik","title":"Asetamine Wordist","toolbar":"Asetamine Wordist"},"preview":{"preview":"Eelvaade"},"print":{"toolbar":"Printimine"},"removeformat":{"toolbar":"Vormingu eemaldamine"},"save":{"toolbar":"Salvestamine"},"selectall":{"toolbar":"Kõige valimine"},"showblocks":{"toolbar":"Blokkide näitamine"},"sourcearea":{"toolbar":"Lähtekood"},"specialchar":{"options":"Erimärkide valikud","title":"Erimärgi valimine","toolbar":"Erimärgi sisestamine"},"scayt":{"btn_about":"SCAYT-ist lähemalt","btn_dictionaries":"Sõnaraamatud","btn_disable":"SCAYT keelatud","btn_enable":"SCAYT lubatud","btn_langs":"Keeled","btn_options":"Valikud","text_title":""},"stylescombo":{"label":"Stiil","panelTitle":"Vormindusstiilid","panelTitle1":"Blokkstiilid","panelTitle2":"Reasisesed stiilid","panelTitle3":"Objektistiilid"},"table":{"border":"Joone suurus","caption":"Tabeli tiitel","cell":{"menu":"Lahter","insertBefore":"Sisesta lahter enne","insertAfter":"Sisesta lahter peale","deleteCell":"Eemalda lahtrid","merge":"Ühenda lahtrid","mergeRight":"Ühenda paremale","mergeDown":"Ühenda alla","splitHorizontal":"Poolita lahter horisontaalselt","splitVertical":"Poolita lahter vertikaalselt","title":"Lahtri omadused","cellType":"Lahtri liik","rowSpan":"Ridade vahe","colSpan":"Tulpade vahe","wordWrap":"Sõnade murdmine","hAlign":"Horisontaalne joondus","vAlign":"Vertikaalne joondus","alignBaseline":"Baasjoon","bgColor":"Tausta värv","borderColor":"Äärise värv","data":"Andmed","header":"Päis","yes":"Jah","no":"Ei","invalidWidth":"Lahtri laius peab olema number.","invalidHeight":"Lahtri kõrgus peab olema number.","invalidRowSpan":"Ridade vahe peab olema täisarv.","invalidColSpan":"Tulpade vahe peab olema täisarv.","chooseColor":"Vali"},"cellPad":"Lahtri täidis","cellSpace":"Lahtri vahe","column":{"menu":"Veerg","insertBefore":"Sisesta veerg enne","insertAfter":"Sisesta veerg peale","deleteColumn":"Eemalda veerud"},"columns":"Veerud","deleteTable":"Kustuta tabel","headers":"Päised","headersBoth":"Mõlemad","headersColumn":"Esimene tulp","headersNone":"Puudub","headersRow":"Esimene rida","invalidBorder":"Äärise suurus peab olema number.","invalidCellPadding":"Lahtrite polsterdus (padding) peab olema positiivne arv.","invalidCellSpacing":"Lahtrite vahe peab olema positiivne arv.","invalidCols":"Tulpade arv peab olema nullist suurem.","invalidHeight":"Tabeli kõrgus peab olema number.","invalidRows":"Ridade arv peab olema nullist suurem.","invalidWidth":"Tabeli laius peab olema number.","menu":"Tabeli omadused","row":{"menu":"Rida","insertBefore":"Sisesta rida enne","insertAfter":"Sisesta rida peale","deleteRow":"Eemalda read"},"rows":"Read","summary":"Kokkuvõte","title":"Tabeli omadused","toolbar":"Tabel","widthPc":"protsenti","widthPx":"pikslit","widthUnit":"laiuse ühik"},"undo":{"redo":"Toimingu kordamine","undo":"Tagasivõtmine"},"wsc":{"btnIgnore":"Ignoreeri","btnIgnoreAll":"Ignoreeri kõiki","btnReplace":"Asenda","btnReplaceAll":"Asenda kõik","btnUndo":"Võta tagasi","changeTo":"Muuda","errorLoading":"Viga rakenduse teenushosti laadimisel: %s.","ieSpellDownload":"Õigekirja kontrollija ei ole paigaldatud. Soovid sa selle alla laadida?","manyChanges":"Õigekirja kontroll sooritatud: %1 sõna muudetud","noChanges":"Õigekirja kontroll sooritatud: ühtegi sõna ei muudetud","noMispell":"Õigekirja kontroll sooritatud: õigekirjuvigu ei leitud","noSuggestions":"- Soovitused puuduvad -","notAvailable":"Kahjuks ei ole teenus praegu saadaval.","notInDic":"Puudub sõnastikust","oneChange":"Õigekirja kontroll sooritatud: üks sõna muudeti","progress":"Toimub õigekirja kontroll...","title":"Õigekirjakontroll","toolbar":"Õigekirjakontroll"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/eu.js b/wqflask/wqflask/static/packages/ckeditor/lang/eu.js
deleted file mode 100644
index a5a75684..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/eu.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['eu']={"editor":"Testu Aberastuko Editorea","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"ALT 0 sakatu laguntza jasotzeko","browseServer":"Zerbitzaria arakatu","url":"URL","protocol":"Protokoloa","upload":"Gora kargatu","uploadSubmit":"Zerbitzarira bidali","image":"Irudia","flash":"Flasha","form":"Formularioa","checkbox":"Kontrol-laukia","radio":"Aukera-botoia","textField":"Testu Eremua","textarea":"Testu-area","hiddenField":"Ezkutuko Eremua","button":"Botoia","select":"Hautespen Eremua","imageButton":"Irudi Botoia","notSet":"<Ezarri gabe>","id":"Id","name":"Izena","langDir":"Hizkuntzaren Norabidea","langDirLtr":"Ezkerretik Eskumara(LTR)","langDirRtl":"Eskumatik Ezkerrera (RTL)","langCode":"Hizkuntza Kodea","longDescr":"URL Deskribapen Luzea","cssClass":"Estilo-orriko Klaseak","advisoryTitle":"Izenburua","cssStyle":"Estiloa","ok":"Ados","cancel":"Utzi","close":"Itxi","preview":"Aurrebista","resize":"Arrastatu tamaina aldatzeko","generalTab":"Orokorra","advancedTab":"Aurreratua","validateNumberFailed":"Balio hau ez da zenbaki bat.","confirmNewPage":"Eduki honetan gorde gabe dauden aldaketak galduko dira. Ziur zaude orri berri bat kargatu nahi duzula?","confirmCancel":"Aukera batzuk aldatu egin dira. Ziur zaude elkarrizketa-koadroa itxi nahi duzula?","options":"Aukerak","target":"Target (Helburua)","targetNew":"Leiho Berria (_blank)","targetTop":"Goieneko Leihoan (_top)","targetSelf":"Leiho Berdinean (_self)","targetParent":"Leiho Gurasoan (_parent)","langDirLTR":"Ezkerretik Eskumara(LTR)","langDirRTL":"Eskumatik Ezkerrera (RTL)","styles":"Estiloa","cssClasses":"Estilo-orriko Klaseak","width":"Zabalera","height":"Altuera","align":"Lerrokatu","alignLeft":"Ezkerrera","alignRight":"Eskuman","alignCenter":"Erdian","alignJustify":"Justifikatu","alignTop":"Goian","alignMiddle":"Erdian","alignBottom":"Behean","alignNone":"None","invalidValue":"Balio ezegokia.","invalidHeight":"Altuera zenbaki bat izan behar da.","invalidWidth":"Zabalera zenbaki bat izan behar da.","invalidCssLength":"\"%1\" eremurako zehaztutako balioa zenbaki positibo bat izan behar du, aukeran CSS neurri unitate batekin (px, %, in, cm, mm, em, ex, pt edo pc).","invalidHtmlLength":"\"%1\" eremurako zehaztutako balioa zenbaki positibo bat izan behar du, aukeran HTML neurri unitate batekin (px edo %).","invalidInlineStyle":"Lerroko estiloan zehazten dena tupla \"name : value\" formatuko eta puntu eta komaz bereiztutako tupla bat edo gehiago izan behar dira.","cssLengthTooltip":"Zenbakia bakarrik zehazten bada pixeletan egongo da. CSS neurri unitatea ere zehaztu ahal da (px, %, in, cm, mm, em, ex, pt, edo pc).","unavailable":"%1<span class=\"cke_accessibility\">, erabilezina</span>"},"about":{"copy":"Copyright &copy; $1. Eskubide guztiak erreserbaturik.","dlgTitle":"CKEditor(r)i buruz","help":"$1 aztertu laguntza jasotzeko.","moreInfo":"Lizentziari buruzko informazioa gure webgunean:","title":"CKEditor(r)i buruz","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Lodia","italic":"Etzana","strike":"Marratua","subscript":"Azpi-indize","superscript":"Goi-indize","underline":"Azpimarratu"},"bidi":{"ltr":"Testuaren norantza ezkerretik eskuinera","rtl":"Testuaren norantza eskuinetik ezkerrera"},"blockquote":{"toolbar":"Aipamen blokea"},"clipboard":{"copy":"Kopiatu","copyError":"Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki kopiatzea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+C).","cut":"Ebaki","cutError":"Zure web nabigatzailearen segurtasun ezarpenak testuak automatikoki moztea ez dute baimentzen. Mesedez teklatua erabili ezazu (Ctrl/Cmd+X).","paste":"Itsatsi","pasteArea":"Itsasteko Area","pasteMsg":"Mesedez teklatua erabilita (<STRONG>Ctrl/Cmd+V</STRONG>) ondorego eremuan testua itsatsi eta <STRONG>OK</STRONG> sakatu.","securityMsg":"Nabigatzailearen segurtasun ezarpenak direla eta, editoreak ezin du arbela zuzenean erabili. Leiho honetan berriro itsatsi behar duzu.","title":"Itsatsi"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatikoa","bgColorTitle":"Atzeko kolorea","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Kolore gehiago...","panelTitle":"Colors","textColorTitle":"Testu Kolorea"},"colordialog":{"clear":"Garbitu","highlight":"Nabarmendu","options":"Kolore Aukerak","selected":"Hautatutako Kolorea","title":"Kolorea Hautatu"},"templates":{"button":"Txantiloiak","emptyListMsg":"(Ez dago definitutako txantiloirik)","insertOption":"Ordeztu oraingo edukiak","options":"Txantiloi Aukerak","selectPromptMsg":"Mesedez txantiloia aukeratu editorean kargatzeko<br>(orain dauden edukiak galduko dira):","title":"Eduki Txantiloiak"},"contextmenu":{"options":"Testuingurko Menuaren Aukerak"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Izenburua","cssClassInputLabel":"Estilo-orriko Klaseak","edit":"Div-a editatu","inlineStyleInputLabel":"Inline Estiloa","langDirLTRLabel":"Ezkerretik Eskuinera (LTR)","langDirLabel":"Hizkuntzaren Norabidea","langDirRTLLabel":"Eskumatik Ezkerrera (RTL)","languageCodeInputLabel":"Hizkuntza Kodea","remove":"Div-a Kendu","styleSelectLabel":"Estiloa","title":"Div Edukiontzia Sortu","toolbar":"Div Edukiontzia Sortu"},"toolbar":{"toolbarCollapse":"Tresna-barra Txikitu","toolbarExpand":"Tresna-barra Luzatu","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editorearen Tresna-barra"},"elementspath":{"eleLabel":"Elementu bidea","eleTitle":"%1 elementua"},"find":{"find":"Bilatu","findOptions":"Find Options","findWhat":"Zer bilatu:","matchCase":"Maiuskula/minuskula","matchCyclic":"Bilaketa ziklikoa","matchWord":"Esaldi osoa bilatu","notFoundMsg":"Idatzitako testua ez da topatu.","replace":"Ordezkatu","replaceAll":"Ordeztu Guztiak","replaceSuccessMsg":"Zenbat aldiz ordeztua: %1","replaceWith":"Zerekin ordeztu:","title":"Bilatu eta Ordeztu"},"fakeobjects":{"anchor":"Aingura","flash":"Flash Animazioa","hiddenfield":"Ezkutuko Eremua","iframe":"IFrame","unknown":"Objektu ezezaguna"},"flash":{"access":"Scriptak baimendu","accessAlways":"Beti","accessNever":"Inoiz ere ez","accessSameDomain":"Domeinu berdinekoak","alignAbsBottom":"Abs Behean","alignAbsMiddle":"Abs Erdian","alignBaseline":"Oinan","alignTextTop":"Testua Goian","bgcolor":"Atzeko kolorea","chkFull":"Onartu Pantaila osoa","chkLoop":"Begizta","chkMenu":"Flasharen Menua Gaitu","chkPlay":"Automatikoki Erreproduzitu","flashvars":"Flash Aldagaiak","hSpace":"HSpace","properties":"Flasharen Ezaugarriak","propertiesTab":"Ezaugarriak","quality":"Kalitatea","qualityAutoHigh":"Auto Altua","qualityAutoLow":"Auto Baxua","qualityBest":"Hoberena","qualityHigh":"Altua","qualityLow":"Baxua","qualityMedium":"Ertaina","scale":"Eskalatu","scaleAll":"Dena erakutsi","scaleFit":"Doitu","scaleNoBorder":"Ertzik gabe","title":"Flasharen Ezaugarriak","vSpace":"VSpace","validateHSpace":"HSpace zenbaki bat izan behar da.","validateSrc":"Mesedez URL esteka idatzi","validateVSpace":"VSpace zenbaki bat izan behar da.","windowMode":"Leihoaren modua","windowModeOpaque":"Opakoa","windowModeTransparent":"Gardena","windowModeWindow":"Leihoa"},"font":{"fontSize":{"label":"Tamaina","voiceLabel":"Tamaina","panelTitle":"Tamaina"},"label":"Letra-tipoa","panelTitle":"Letra-tipoa","voiceLabel":"Letra-tipoa"},"forms":{"button":{"title":"Botoiaren Ezaugarriak","text":"Testua (Balorea)","type":"Mota","typeBtn":"Botoia","typeSbm":"Bidali","typeRst":"Garbitu"},"checkboxAndRadio":{"checkboxTitle":"Kontrol-laukiko Ezaugarriak","radioTitle":"Aukera-botoiaren Ezaugarriak","value":"Balorea","selected":"Hautatuta"},"form":{"title":"Formularioaren Ezaugarriak","menu":"Formularioaren Ezaugarriak","action":"Ekintza","method":"Metodoa","encoding":"Kodeketa"},"hidden":{"title":"Ezkutuko Eremuaren Ezaugarriak","name":"Izena","value":"Balorea"},"select":{"title":"Hautespen Eremuaren Ezaugarriak","selectInfo":"Informazioa","opAvail":"Aukera Eskuragarriak","value":"Balorea","size":"Tamaina","lines":"lerro kopurura","chkMulti":"Hautaketa anitzak baimendu","opText":"Testua","opValue":"Balorea","btnAdd":"Gehitu","btnModify":"Aldatu","btnUp":"Gora","btnDown":"Behera","btnSetValue":"Aukeratutako balorea ezarri","btnDelete":"Ezabatu"},"textarea":{"title":"Testu-arearen Ezaugarriak","cols":"Zutabeak","rows":"Lerroak"},"textfield":{"title":"Testu Eremuaren Ezaugarriak","name":"Izena","value":"Balorea","charWidth":"Zabalera","maxChars":"Zenbat karaktere gehienez","type":"Mota","typeText":"Testua","typePass":"Pasahitza","typeEmail":"E-posta","typeSearch":"Bilatu","typeTel":"Telefono Zenbakia","typeUrl":"URL"}},"format":{"label":"Formatua","panelTitle":"Formatua","tag_address":"Helbidea","tag_div":"Paragrafoa (DIV)","tag_h1":"Izenburua 1","tag_h2":"Izenburua 2","tag_h3":"Izenburua 3","tag_h4":"Izenburua 4","tag_h5":"Izenburua 5","tag_h6":"Izenburua 6","tag_p":"Arrunta","tag_pre":"Formateatua"},"horizontalrule":{"toolbar":"Txertatu Marra Horizontala"},"iframe":{"border":"Markoaren ertza ikusi","noUrl":"iframe-aren URLa idatzi, mesedez.","scrolling":"Korritze barrak gaitu","title":"IFrame-aren Propietateak","toolbar":"IFrame"},"image":{"alertUrl":"Mesedez Irudiaren URLa idatzi","alt":"Ordezko Testua","border":"Ertza","btnUpload":"Zerbitzarira bidalia","button2Img":"Aukeratutako irudi botoia, irudi normal batean eraldatu nahi duzu?","hSpace":"HSpace","img2Button":"Aukeratutako irudia, irudi botoi batean eraldatu nahi duzu?","infoTab":"Irudi informazioa","linkTab":"Esteka","lockRatio":"Erlazioa Blokeatu","menu":"Irudi Ezaugarriak","resetSize":"Tamaina Berrezarri","title":"Irudi Ezaugarriak","titleButton":"Irudi Botoiaren Ezaugarriak","upload":"Gora Kargatu","urlMissing":"Irudiaren iturburu URL-a falta da.","vSpace":"VSpace","validateBorder":"Ertza zenbaki oso bat izan behar da.","validateHSpace":"HSpace zenbaki oso bat izan behar da.","validateVSpace":"VSpace zenbaki oso bat izan behar da."},"indent":{"indent":"Handitu Koska","outdent":"Txikitu Koska"},"smiley":{"options":"Aurpegiera Aukerak","title":"Aurpegiera Sartu","toolbar":"Aurpegierak"},"justify":{"block":"Justifikatu","center":"Lerrokatu Erdian","left":"Lerrokatu Ezkerrean","right":"Lerrokatu Eskuman"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Sarbide-gakoa","advanced":"Aurreratua","advisoryContentType":"Eduki Mota (Content Type)","advisoryTitle":"Izenburua","anchor":{"toolbar":"Aingura","menu":"Ainguraren Ezaugarriak","title":"Ainguraren Ezaugarriak","name":"Ainguraren Izena","errorName":"Idatzi ainguraren izena","remove":"Remove Anchor"},"anchorId":"Elementuaren ID-gatik","anchorName":"Aingura izenagatik","charset":"Estekatutako Karaktere Multzoa","cssClasses":"Estilo-orriko Klaseak","emailAddress":"ePosta Helbidea","emailBody":"Mezuaren Gorputza","emailSubject":"Mezuaren Gaia","id":"Id","info":"Estekaren Informazioa","langCode":"Hizkuntzaren Norabidea","langDir":"Hizkuntzaren Norabidea","langDirLTR":"Ezkerretik Eskumara(LTR)","langDirRTL":"Eskumatik Ezkerrera (RTL)","menu":"Aldatu Esteka","name":"Izena","noAnchors":"(Ez daude aingurak eskuragarri dokumentuan)","noEmail":"Mesedez ePosta helbidea idatzi","noUrl":"Mesedez URL esteka idatzi","other":"<bestelakoa>","popupDependent":"Menpekoa (Netscape)","popupFeatures":"Popup Leihoaren Ezaugarriak","popupFullScreen":"Pantaila Osoa (IE)","popupLeft":"Ezkerreko Posizioa","popupLocationBar":"Kokaleku Barra","popupMenuBar":"Menu Barra","popupResizable":"Tamaina Aldakorra","popupScrollBars":"Korritze Barrak","popupStatusBar":"Egoera Barra","popupToolbar":"Tresna Barra","popupTop":"Goiko Posizioa","rel":"Erlazioa","selectAnchor":"Aingura bat hautatu","styles":"Estiloa","tabIndex":"Tabulazio Indizea","target":"Target (Helburua)","targetFrame":"<marko>","targetFrameName":"Marko Helburuaren Izena","targetPopup":"<popup leihoa>","targetPopupName":"Popup Leihoaren Izena","title":"Esteka","toAnchor":"Aingura orrialde honetan","toEmail":"ePosta","toUrl":"URL","toolbar":"Txertatu/Editatu Esteka","type":"Esteka Mota","unlink":"Kendu Esteka","upload":"Gora kargatu"},"list":{"bulletedlist":"Buletdun Zerrenda","numberedlist":"Zenbakidun Zerrenda"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Txertatu paragrafoa hemen"},"maximize":{"maximize":"Maximizatu","minimize":"Minimizatu"},"newpage":{"toolbar":"Orrialde Berria"},"pagebreak":{"alt":"Orrialde-jauzia","toolbar":"Txertatu Orrialde-jauzia Inprimatzean"},"pastetext":{"button":"Testu Arrunta bezala Itsatsi","title":"Testu Arrunta bezala Itsatsi"},"pastefromword":{"confirmCleanup":"Itsatsi nahi duzun testua Wordetik hartua dela dirudi. Itsatsi baino lehen garbitu nahi duzu?","error":"Barneko errore bat dela eta ezin izan da testua garbitu","title":"Itsatsi Word-etik","toolbar":"Itsatsi Word-etik"},"preview":{"preview":"Aurrebista"},"print":{"toolbar":"Inprimatu"},"removeformat":{"toolbar":"Kendu Formatua"},"save":{"toolbar":"Gorde"},"selectall":{"toolbar":"Hautatu dena"},"showblocks":{"toolbar":"Blokeak erakutsi"},"sourcearea":{"toolbar":"HTML Iturburua"},"specialchar":{"options":"Karaktere Berezien Aukerak","title":"Karaktere Berezia Aukeratu","toolbar":"Txertatu Karaktere Berezia"},"scayt":{"btn_about":"SCAYTi buruz","btn_dictionaries":"Hiztegiak","btn_disable":"Desgaitu SCAYT","btn_enable":"Gaitu SCAYT","btn_langs":"Hizkuntzak","btn_options":"Aukerak","text_title":""},"stylescombo":{"label":"Estiloa","panelTitle":"Formatu Estiloak","panelTitle1":"Bloke Estiloak","panelTitle2":"Inline Estiloak","panelTitle3":"Objektu Estiloak"},"table":{"border":"Ertzaren Zabalera","caption":"Epigrafea","cell":{"menu":"Gelaxka","insertBefore":"Txertatu Gelaxka Aurretik","insertAfter":"Txertatu Gelaxka Ostean","deleteCell":"Kendu Gelaxkak","merge":"Batu Gelaxkak","mergeRight":"Elkartu Eskumara","mergeDown":"Elkartu Behera","splitHorizontal":"Banatu Gelaxkak Horizontalki","splitVertical":"Banatu Gelaxkak Bertikalki","title":"Gelaxken Ezaugarriak","cellType":"Gelaxka Mota","rowSpan":"Hedatutako Lerroak","colSpan":"Hedatutako Zutabeak","wordWrap":"Itzulbira","hAlign":"Lerrokatze Horizontala","vAlign":"Lerrokatze Bertikala","alignBaseline":"Oinarri-lerroan","bgColor":"Fondoaren Kolorea","borderColor":"Ertzaren Kolorea","data":"Data","header":"Goiburua","yes":"Bai","no":"Ez","invalidWidth":"Gelaxkaren zabalera zenbaki bat izan behar da.","invalidHeight":"Gelaxkaren altuera zenbaki bat izan behar da.","invalidRowSpan":"Lerroen hedapena zenbaki osoa izan behar da.","invalidColSpan":"Zutabeen hedapena zenbaki osoa izan behar da.","chooseColor":"Choose"},"cellPad":"Gelaxken betegarria","cellSpace":"Gelaxka arteko tartea","column":{"menu":"Zutabea","insertBefore":"Txertatu Zutabea Aurretik","insertAfter":"Txertatu Zutabea Ostean","deleteColumn":"Ezabatu Zutabeak"},"columns":"Zutabeak","deleteTable":"Ezabatu Taula","headers":"Goiburuak","headersBoth":"Biak","headersColumn":"Lehen zutabea","headersNone":"Bat ere ez","headersRow":"Lehen lerroa","invalidBorder":"Ertzaren tamaina zenbaki bat izan behar da.","invalidCellPadding":"Gelaxken betegarria zenbaki bat izan behar da.","invalidCellSpacing":"Gelaxka arteko tartea zenbaki bat izan behar da.","invalidCols":"Zutabe kopurua 0 baino handiagoa den zenbakia izan behar da.","invalidHeight":"Taularen altuera zenbaki bat izan behar da.","invalidRows":"Lerro kopurua 0 baino handiagoa den zenbakia izan behar da.","invalidWidth":"Taularen zabalera zenbaki bat izan behar da.","menu":"Taularen Ezaugarriak","row":{"menu":"Lerroa","insertBefore":"Txertatu Lerroa Aurretik","insertAfter":"Txertatu Lerroa Ostean","deleteRow":"Ezabatu Lerroak"},"rows":"Lerroak","summary":"Laburpena","title":"Taularen Ezaugarriak","toolbar":"Taula","widthPc":"ehuneko","widthPx":"pixel","widthUnit":"zabalera unitatea"},"undo":{"redo":"Berregin","undo":"Desegin"},"wsc":{"btnIgnore":"Ezikusi","btnIgnoreAll":"Denak Ezikusi","btnReplace":"Ordezkatu","btnReplaceAll":"Denak Ordezkatu","btnUndo":"Desegin","changeTo":"Honekin ordezkatu","errorLoading":"Errorea gertatu da aplikazioa zerbitzaritik kargatzean: %s.","ieSpellDownload":"Zuzentzaile ortografikoa ez dago instalatuta. Deskargatu nahi duzu?","manyChanges":"Zuzenketa ortografikoa bukatuta: %1 hitz aldatu dira","noChanges":"Zuzenketa ortografikoa bukatuta: Ez da ezer aldatu","noMispell":"Zuzenketa ortografikoa bukatuta: Akatsik ez","noSuggestions":"- Iradokizunik ez -","notAvailable":"Barkatu baina momentu honetan zerbitzua ez dago erabilgarri.","notInDic":"Ez dago hiztegian","oneChange":"Zuzenketa ortografikoa bukatuta: Hitz bat aldatu da","progress":"Zuzenketa ortografikoa martxan...","title":"Ortografia zuzenketa","toolbar":"Ortografia"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/fa.js b/wqflask/wqflask/static/packages/ckeditor/lang/fa.js
deleted file mode 100644
index 04da919c..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/fa.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['fa']={"editor":"ویرایش‌گر متن غنی","editorPanel":"پنل ویرایشگر متن غنی","common":{"editorHelp":"کلید Alt+0 را برای راهنمایی بÙشارید","browseServer":"Ùهرست​نمایی سرور","url":"URL","protocol":"قرارداد","upload":"بالاگذاری","uploadSubmit":"به سرور بÙرست","image":"تصویر","flash":"Ùلش","form":"Ùرم","checkbox":"چک‌باکس","radio":"دکمه‌ی رادیویی","textField":"Ùیلد متنی","textarea":"ناحیهٴ متنی","hiddenField":"Ùیلد پنهان","button":"دکمه","select":"Ùیلد انتخاب چند گزینه​ای","imageButton":"دکمه‌ی تصویری","notSet":"<تعیین‌نشده>","id":"شناسه","name":"نام","langDir":"جهت زبان","langDirLtr":"Ú†Ù¾ به راست","langDirRtl":"راست به Ú†Ù¾","langCode":"کد زبان","longDescr":"URL توصی٠طولانی","cssClass":"کلاس​های شیوه​نامه (Stylesheet)","advisoryTitle":"عنوان Ú©Ù…Ú©ÛŒ","cssStyle":"سبک","ok":"پذیرش","cancel":"انصراÙ","close":"بستن","preview":"پیش‌نمایش","resize":"تغییر اندازه","generalTab":"عمومی","advancedTab":"پیش‌رÙته","validateNumberFailed":"این مقدار یک عدد نیست.","confirmNewPage":"هر تغییر ایجاد شده​ی ذخیره نشده از بین خواهد رÙت. آیا اطمینان دارید Ú©Ù‡ قصد بارگیری صÙحه جدیدی را دارید؟","confirmCancel":"برخی از گزینه‌ها تغییر کرده‌اند. آیا واقعا قصد بستن این پنجره را دارید؟","options":"گزینه​ها","target":"مقصد","targetNew":"پنجره جدید","targetTop":"بالاترین پنجره","targetSelf":"همان پنجره","targetParent":"پنجره والد","langDirLTR":"Ú†Ù¾ به راست","langDirRTL":"راست به Ú†Ù¾","styles":"سبک","cssClasses":"کلاس‌های سبک‌نامه","width":"عرض","height":"طول","align":"چینش","alignLeft":"Ú†Ù¾","alignRight":"راست","alignCenter":"وسط","alignJustify":"بلوک چین","alignTop":"بالا","alignMiddle":"میانه","alignBottom":"پائین","alignNone":"هیچ","invalidValue":"مقدار نامعتبر.","invalidHeight":"ارتÙاع باید یک عدد باشد.","invalidWidth":"عرض باید یک عدد باشد.","invalidCssLength":"عدد تعیین شده برای Ùیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری CSS معتبر باشد (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"عدد تعیین شده برای Ùیلد \"%1\" باید یک عدد مثبت با یا بدون یک واحد اندازه گیری HTML معتبر باشد (px or %).","invalidInlineStyle":"عدد تعیین شده برای سبک درون​خطی -Inline Style- باید دارای یک یا چند چندتایی با Ø´Ú©Ù„ÛŒ شبیه \"name : value\" Ú©Ù‡ باید با یک \";\" از هم جدا شوند.","cssLengthTooltip":"یک عدد برای یک مقدار بر حسب پیکسل Ùˆ یا یک عدد با یک واحد CSS معتبر وارد کنید (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">ØŒ غیر قابل دسترس</span>"},"about":{"copy":"حق نشر &copy; $1. کلیه حقوق محÙوظ است.","dlgTitle":"درباره CKEditor","help":" برای راهنمایی $1 را ملاحظه کنید.","moreInfo":"برای کسب اطلاعات مجوز لطÙا به وب سایت ما مراجعه کنید:","title":"درباره CKEditor","userGuide":"راهنمای کاربران CKEditor"},"basicstyles":{"bold":"درشت","italic":"خمیده","strike":"خط‌خورده","subscript":"زیرنویس","superscript":"بالانویس","underline":"زیرخط‌دار"},"bidi":{"ltr":"جهت متن از Ú†Ù¾ به راست","rtl":"جهت متن از راست به Ú†Ù¾"},"blockquote":{"toolbar":"بلوک نقل قول"},"clipboard":{"copy":"رونوشت","copyError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد Ú©Ù‡ ویرایشگر به طور خودکار عملکردهای Ú©Ù¾ÛŒ کردن را انجام دهد. لطÙا با دکمههای صÙحه کلید این کار را انجام دهید (Ctrl/Cmd+C).","cut":"برش","cutError":"تنظیمات امنیتی مرورگر شما اجازه نمیدهد Ú©Ù‡ ویرایشگر به طور خودکار عملکردهای برش را انجام دهد. لطÙا با دکمههای صÙحه کلید این کار را انجام دهید (Ctrl/Cmd+X).","paste":"چسباندن","pasteArea":"محل چسباندن","pasteMsg":"لطÙا متن را با کلیدهای (<STRONG>Ctrl/Cmd+V</STRONG>) در این جعبهٴ متنی بچسبانید Ùˆ <STRONG>پذیرش</STRONG> را بزنید.","securityMsg":"به خاطر تنظیمات امنیتی مرورگر شما، ویرایشگر نمیتواند دسترسی مستقیم به دادههای clipboard داشته باشد. شما باید دوباره آنرا در این پنجره بچسبانید.","title":"چسباندن"},"button":{"selectedLabel":"%1 (انتخاب شده)"},"colorbutton":{"auto":"خودکار","bgColorTitle":"رنگ پس​زمینه","colors":{"000":"سیاه","800000":"خرمایی","8B4513":"قهوه​ای شکلاتی","2F4F4F":"ارغوانی مایل به خاکستری","008080":"آبی مایل به خاکستری","000080":"آبی سیر","4B0082":"نیلی","696969":"خاکستری تیره","B22222":"آتش آجری","A52A2A":"قهوه​ای","DAA520":"میله​ی طلایی","006400":"سبز تیره","40E0D0":"Ùیروزه​ای","0000CD":"آبی روشن","800080":"ارغوانی","808080":"خاکستری","F00":"قرمز","FF8C00":"نارنجی پررنگ","FFD700":"طلایی","008000":"سبز","0FF":"آبی مایل به سبز","00F":"آبی","EE82EE":"بنÙØ´","A9A9A9":"خاکستری مات","FFA07A":"صورتی کدر روشن","FFA500":"نارنجی","FFFF00":"زرد","00FF00":"ÙسÙری","AFEEEE":"Ùیروزه​ای رنگ پریده","ADD8E6":"آبی کمرنگ","DDA0DD":"آلویی","D3D3D3":"خاکستری روشن","FFF0F5":"بنÙØ´ کمرنگ","FAEBD7":"عتیقه سÙید","FFFFE0":"زرد روشن","F0FFF0":"عسلی","F0FFFF":"لاجوردی","F0F8FF":"آبی براق","E6E6FA":"بنÙØ´ کمرنگ","FFF":"سÙید"},"more":"رنگ​های بیشتر...","panelTitle":"رنگها","textColorTitle":"رنگ متن"},"colordialog":{"clear":"پاک کردن","highlight":"متمایز","options":"گزینه​های رنگ","selected":"رنگ انتخاب شده","title":"انتخاب رنگ"},"templates":{"button":"الگوها","emptyListMsg":"(الگوئی تعری٠نشده است)","insertOption":"محتویات کنونی جایگزین شوند","options":"گزینه‌های الگو","selectPromptMsg":"لطÙاً الگوی مورد نظر را برای بازکردن در ویرایشگر انتخاب کنید","title":"الگوهای محتویات"},"contextmenu":{"options":"گزینه​های منوی زمینه"},"div":{"IdInputLabel":"شناسه","advisoryTitleInputLabel":"عنوان مشاوره","cssClassInputLabel":"کلاس​های شیوه​نامه","edit":"ویرایش Div","inlineStyleInputLabel":"سبک درون​خطی(Inline Style)","langDirLTRLabel":"Ú†Ù¾ به راست (LTR)","langDirLabel":"جهت نوشتاری زبان","langDirRTLLabel":"راست به Ú†Ù¾ (RTL)","languageCodeInputLabel":" کد زبان","remove":"حذ٠Div","styleSelectLabel":"سبک","title":"ایجاد یک محل DIV","toolbar":"ایجاد یک محل DIV"},"toolbar":{"toolbarCollapse":"بستن نوار ابزار","toolbarExpand":"بازکردن نوار ابزار","toolbarGroups":{"document":"سند","clipboard":"حاÙظه موقت/برگشت","editing":"در حال ویرایش","forms":"Ùرم​ها","basicstyles":"سبک‌های پایه","paragraph":"بند","links":"پیوندها","insert":"ورود","styles":"سبک‌ها","colors":"رنگ​ها","tools":"ابزارها"},"toolbars":"نوار ابزارهای ویرایش‌گر"},"elementspath":{"eleLabel":"مسیر عناصر","eleTitle":"%1 عنصر"},"find":{"find":"جستجو","findOptions":"گزینه​های جستجو","findWhat":"Ú†Ù‡ چیز را مییابید:","matchCase":"همسانی در بزرگی Ùˆ Ú©ÙˆÚ†Ú©ÛŒ نویسه​ها","matchCyclic":"همسانی با چرخه","matchWord":"همسانی با واژهٴ کامل","notFoundMsg":"متن موردنظر یاÙت نشد.","replace":"جایگزینی","replaceAll":"جایگزینی همهٴ یاÙته​ها","replaceSuccessMsg":"%1 رخداد جایگزین شد.","replaceWith":"جایگزینی با:","title":"جستجو Ùˆ جایگزینی"},"fakeobjects":{"anchor":"لنگر","flash":"انیمشن Ùلش","hiddenfield":"Ùیلد پنهان","iframe":"IFrame","unknown":"شیء ناشناخته"},"flash":{"access":"دسترسی به اسکریپت","accessAlways":"همیشه","accessNever":"هرگز","accessSameDomain":"همان دامنه","alignAbsBottom":"پائین مطلق","alignAbsMiddle":"وسط مطلق","alignBaseline":"خط پایه","alignTextTop":"متن بالا","bgcolor":"رنگ پس​زمینه","chkFull":"اجازه تمام صÙحه","chkLoop":"اجرای پیاپی","chkMenu":"در دسترس بودن منوی Ùلش","chkPlay":"آغاز خودکار","flashvars":"مقادیر برای Ùلش","hSpace":"Ùاصلهٴ اÙÙ‚ÛŒ","properties":"ویژگی​های Ùلش","propertiesTab":"ویژگی​ها","quality":"Ú©ÛŒÙیت","qualityAutoHigh":"بالا - خودکار","qualityAutoLow":"پایین - خودکار","qualityBest":"بهترین","qualityHigh":"بالا","qualityLow":"پایین","qualityMedium":"متوسط","scale":"مقیاس","scaleAll":"نمایش همه","scaleFit":"جایگیری کامل","scaleNoBorder":"بدون کران","title":"ویژگی​های Ùلش","vSpace":"Ùاصلهٴ عمودی","validateHSpace":"مقدار Ùاصله گذاری اÙÙ‚ÛŒ باید یک عدد باشد.","validateSrc":"لطÙا URL پیوند را بنویسید","validateVSpace":"مقدار Ùاصله گذاری عمودی باید یک عدد باشد.","windowMode":"حالت پنجره","windowModeOpaque":"مات","windowModeTransparent":"Ø´ÙاÙ","windowModeWindow":"پنجره"},"font":{"fontSize":{"label":"اندازه","voiceLabel":"اندازه قلم","panelTitle":"اندازه قلم"},"label":"قلم","panelTitle":"نام قلم","voiceLabel":"قلم"},"forms":{"button":{"title":"ویژگی​های دکمه","text":"متن (مقدار)","type":"نوع","typeBtn":"دکمه","typeSbm":"ثبت","typeRst":"بازنشانی (Reset)"},"checkboxAndRadio":{"checkboxTitle":"ویژگی​های خانهٴ گزینه​ای","radioTitle":"ویژگی​های دکمهٴ رادیویی","value":"مقدار","selected":"برگزیده"},"form":{"title":"ویژگی​های Ùرم","menu":"ویژگی​های Ùرم","action":"رویداد","method":"متد","encoding":"رمزنگاری"},"hidden":{"title":"ویژگی​های Ùیلد پنهان","name":"نام","value":"مقدار"},"select":{"title":"ویژگی​های Ùیلد چندگزینه​ای","selectInfo":"اطلاعات","opAvail":"گزینه​های دردسترس","value":"مقدار","size":"اندازه","lines":"خطوط","chkMulti":"گزینش چندگانه Ùراهم باشد","opText":"متن","opValue":"مقدار","btnAdd":"اÙزودن","btnModify":"ویرایش","btnUp":"بالا","btnDown":"پائین","btnSetValue":"تنظیم به عنوان مقدار برگزیده","btnDelete":"پاککردن"},"textarea":{"title":"ویژگی​های ناحیهٴ متنی","cols":"ستون​ها","rows":"سطرها"},"textfield":{"title":"ویژگی​های Ùیلد متنی","name":"نام","value":"مقدار","charWidth":"پهنای نویسه","maxChars":"بیشینهٴ نویسه​ها","type":"نوع","typeText":"متن","typePass":"گذرواژه","typeEmail":"ایمیل","typeSearch":"جستجو","typeTel":"شماره تلÙÙ†","typeUrl":"URL"}},"format":{"label":"قالب","panelTitle":"قالب بند","tag_address":"نشانی","tag_div":"بند","tag_h1":"سرنویس Û±","tag_h2":"سرنویس Û²","tag_h3":"سرنویس Û³","tag_h4":"سرنویس Û´","tag_h5":"سرنویس Ûµ","tag_h6":"سرنویس Û¶","tag_p":"معمولی","tag_pre":"قالب‌دار"},"horizontalrule":{"toolbar":"گنجاندن خط اÙÙ‚ÛŒ"},"iframe":{"border":"نمایش خطوط frame","noUrl":"لطÙا مسیر URL iframe را درج کنید","scrolling":"نمایش خطکشها","title":"ویژگیهای IFrame","toolbar":"IFrame"},"image":{"alertUrl":"لطÙا URL تصویر را بنویسید","alt":"متن جایگزین","border":"لبه","btnUpload":"به سرور بÙرست","button2Img":"آیا مایلید از یک تصویر ساده روی دکمه تصویری انتخاب شده استÙاده کنید؟","hSpace":"Ùاصلهٴ اÙÙ‚ÛŒ","img2Button":"آیا مایلید از یک دکمه تصویری روی تصویر انتخاب شده استÙاده کنید؟","infoTab":"اطلاعات تصویر","linkTab":"پیوند","lockRatio":"Ù‚ÙÙ„ کردن نسبت","menu":"ویژگی​های تصویر","resetSize":"بازنشانی اندازه","title":"ویژگی​های تصویر","titleButton":"ویژگی​های دکمهٴ تصویری","upload":"انتقال به سرور","urlMissing":"آدرس URL اصلی تصویر یاÙت نشد.","vSpace":"Ùاصلهٴ عمودی","validateBorder":"مقدار خطوط باید یک عدد باشد.","validateHSpace":"مقدار Ùاصله گذاری اÙÙ‚ÛŒ باید یک عدد باشد.","validateVSpace":"مقدار Ùاصله گذاری عمودی باید یک عدد باشد."},"indent":{"indent":"اÙزایش تورÙتگی","outdent":"کاهش تورÙتگی"},"smiley":{"options":"گزینه​های خندانک","title":"گنجاندن خندانک","toolbar":"خندانک"},"justify":{"block":"بلوک چین","center":"میان چین","left":"Ú†Ù¾ چین","right":"راست چین"},"language":{"button":"تعیین زبان","remove":"حذ٠زبان"},"link":{"acccessKey":"کلید دستیابی","advanced":"پیشرÙته","advisoryContentType":"نوع محتوای Ú©Ù…Ú©ÛŒ","advisoryTitle":"عنوان Ú©Ù…Ú©ÛŒ","anchor":{"toolbar":"گنجاندن/ویرایش لنگر","menu":"ویژگی​های لنگر","title":"ویژگی​های لنگر","name":"نام لنگر","errorName":"لطÙا نام لنگر را بنویسید","remove":"حذ٠لنگر"},"anchorId":"با شناسهٴ المان","anchorName":"با نام لنگر","charset":"نویسه​گان منبع پیوند شده","cssClasses":"کلاس​های شیوه​نامه(Stylesheet)","emailAddress":"نشانی پست الکترونیکی","emailBody":"متن پیام","emailSubject":"موضوع پیام","id":"شناسه","info":"اطلاعات پیوند","langCode":"جهت​نمای زبان","langDir":"جهت​نمای زبان","langDirLTR":"Ú†Ù¾ به راست (LTR)","langDirRTL":"راست به Ú†Ù¾ (RTL)","menu":"ویرایش پیوند","name":"نام","noAnchors":"(در این سند لنگری دردسترس نیست)","noEmail":"لطÙا نشانی پست الکترونیکی را بنویسید","noUrl":"لطÙا URL پیوند را بنویسید","other":"<سایر>","popupDependent":"وابسته (Netscape)","popupFeatures":"ویژگی​های پنجرهٴ پاپاپ","popupFullScreen":"تمام صÙحه (IE)","popupLeft":"موقعیت Ú†Ù¾","popupLocationBar":"نوار موقعیت","popupMenuBar":"نوار منو","popupResizable":"قابل تغییر اندازه","popupScrollBars":"میله​های پیمایش","popupStatusBar":"نوار وضعیت","popupToolbar":"نوار ابزار","popupTop":"موقعیت بالا","rel":"وابستگی","selectAnchor":"یک لنگر برگزینید","styles":"شیوه (style)","tabIndex":"نمایهٴ دسترسی با برگه","target":"مقصد","targetFrame":"<Ùریم>","targetFrameName":"نام Ùریم مقصد","targetPopup":"<پنجرهٴ پاپاپ>","targetPopupName":"نام پنجرهٴ پاپاپ","title":"پیوند","toAnchor":"لنگر در همین صÙحه","toEmail":"پست الکترونیکی","toUrl":"URL","toolbar":"گنجاندن/ویرایش پیوند","type":"نوع پیوند","unlink":"برداشتن پیوند","upload":"انتقال به سرور"},"list":{"bulletedlist":"Ùهرست نقطه​ای","numberedlist":"Ùهرست شماره​دار"},"liststyle":{"armenian":"شماره‌گذاری ارمنی","bulletedTitle":"خصوصیات Ùهرست نقطه‌ای","circle":"دایره","decimal":"ده‌دهی (۱، ۲، ۳، ...)","decimalLeadingZero":"دهدهی همراه با صÙر (۰۱، ۰۲، ۰۳، ...)","disc":"صÙحه گرد","georgian":"شمارهگذاری گریگورین (an, ban, gan, etc.)","lowerAlpha":"پانویس الÙبایی (a, b, c, d, e, etc.)","lowerGreek":"پانویس یونانی (alpha, beta, gamma, etc.)","lowerRoman":"پانویس رومی (i, ii, iii, iv, v, etc.)","none":"هیچ","notset":"<تنظیم نشده>","numberedTitle":"ویژگیهای Ùهرست شمارهدار","square":"چهارگوش","start":"شروع","type":"نوع","upperAlpha":"بالانویس الÙبایی (A, B, C, D, E, etc.)","upperRoman":"بالانویس رومی (I, II, III, IV, V, etc.)","validateStartNumber":"Ùهرست شماره شروع باید یک عدد صحیح باشد."},"magicline":{"title":"قرار دادن بند در اینجا"},"maximize":{"maximize":"بیشنه کردن","minimize":"کمینه کردن"},"newpage":{"toolbar":"برگهٴ تازه"},"pagebreak":{"alt":"شکستن صÙحه","toolbar":"گنجاندن شکستگی پایان برگه"},"pastetext":{"button":"چسباندن به عنوان متن ساده","title":"چسباندن به عنوان متن ساده"},"pastefromword":{"confirmCleanup":"متنی Ú©Ù‡ میخواهید بچسبانید به نظر میرسد Ú©Ù‡ از Word Ú©Ù¾ÛŒ شده است. آیا میخواهید قبل از چسباندن آن را پاکسازی کنید؟","error":"به دلیل بروز خطای داخلی امکان پاکسازی اطلاعات بازنشانی شده وجود ندارد.","title":"چسباندن از Word","toolbar":"چسباندن از Word"},"preview":{"preview":"پیشنمایش"},"print":{"toolbar":"چاپ"},"removeformat":{"toolbar":"برداشتن Ùرمت"},"save":{"toolbar":"ذخیره"},"selectall":{"toolbar":"گزینش همه"},"showblocks":{"toolbar":"نمایش بلوک‌ها"},"sourcearea":{"toolbar":"منبع"},"specialchar":{"options":"گزینه‌های نویسه‌های ویژه","title":"گزینش نویسه‌ی ویژه","toolbar":"گنجاندن نویسه‌ی ویژه"},"scayt":{"btn_about":"درباره SCAYT","btn_dictionaries":"دیکشنریها","btn_disable":"غیرÙعالسازی SCAYT","btn_enable":"Ùعالسازی SCAYT","btn_langs":"زبانها","btn_options":"گزینهها","text_title":""},"stylescombo":{"label":"سبک","panelTitle":"سبکهای قالببندی","panelTitle1":"سبکهای بلوک","panelTitle2":"سبکهای درونخطی","panelTitle3":"سبکهای شیء"},"table":{"border":"اندازهٴ لبه","caption":"عنوان","cell":{"menu":"سلول","insertBefore":"اÙزودن سلول قبل از","insertAfter":"اÙزودن سلول بعد از","deleteCell":"حذ٠سلولها","merge":"ادغام سلولها","mergeRight":"ادغام به راست","mergeDown":"ادغام به پایین","splitHorizontal":"جدا کردن اÙÙ‚ÛŒ سلول","splitVertical":"جدا کردن عمودی سلول","title":"ویژگیهای سلول","cellType":"نوع سلول","rowSpan":"محدوده ردیÙها","colSpan":"محدوده ستونها","wordWrap":"شکستن کلمه","hAlign":"چینش اÙÙ‚ÛŒ","vAlign":"چینش عمودی","alignBaseline":"خط مبنا","bgColor":"رنگ زمینه","borderColor":"رنگ خطوط","data":"اطلاعات","header":"سرنویس","yes":"بله","no":"خیر","invalidWidth":"عرض سلول باید یک عدد باشد.","invalidHeight":"ارتÙاع سلول باید عدد باشد.","invalidRowSpan":"مقدار محدوده ردیÙها باید یک عدد باشد.","invalidColSpan":"مقدار محدوده ستونها باید یک عدد باشد.","chooseColor":"انتخاب"},"cellPad":"Ùاصلهٴ پرشده در سلول","cellSpace":"Ùاصلهٴ میان سلولها","column":{"menu":"ستون","insertBefore":"اÙزودن ستون قبل از","insertAfter":"اÙزودن ستون بعد از","deleteColumn":"حذ٠ستونها"},"columns":"ستونها","deleteTable":"پاک کردن جدول","headers":"سرنویسها","headersBoth":"هردو","headersColumn":"اولین ستون","headersNone":"هیچ","headersRow":"اولین ردیÙ","invalidBorder":"مقدار اندازه خطوط باید یک عدد باشد.","invalidCellPadding":"بالشتک سلول باید یک عدد باشد.","invalidCellSpacing":"مقدار Ùاصلهگذاری سلول باید یک عدد باشد.","invalidCols":"تعداد ستونها باید یک عدد بزرگتر از 0 باشد.","invalidHeight":"مقدار ارتÙاع جدول باید یک عدد باشد.","invalidRows":"تعداد ردیÙها باید یک عدد بزرگتر از 0 باشد.","invalidWidth":"مقدار پهنای جدول باید یک عدد باشد.","menu":"ویژگیهای جدول","row":{"menu":"سطر","insertBefore":"اÙزودن سطر قبل از","insertAfter":"اÙزودن سطر بعد از","deleteRow":"حذ٠سطرها"},"rows":"سطرها","summary":"خلاصه","title":"ویژگیهای جدول","toolbar":"جدول","widthPc":"درصد","widthPx":"پیکسل","widthUnit":"واحد پهنا"},"undo":{"redo":"بازچیدن","undo":"واچیدن"},"wsc":{"btnIgnore":"چشمپوشی","btnIgnoreAll":"چشمپوشی همه","btnReplace":"جایگزینی","btnReplaceAll":"جایگزینی همه","btnUndo":"واچینش","changeTo":"تغییر به","errorLoading":"خطا در بارگیری برنامه خدمات میزبان: %s.","ieSpellDownload":"بررسی کنندهٴ املا نصب نشده است. آیا میخواهید آن را هماکنون دریاÙت کنید؟","manyChanges":"بررسی املا انجام شد. %1 واژه تغییر یاÙت","noChanges":"بررسی املا انجام شد. هیچ واژهای تغییر نیاÙت","noMispell":"بررسی املا انجام شد. هیچ غلط املائی یاÙت نشد","noSuggestions":"- پیشنهادی نیست -","notAvailable":"با عرض پوزش خدمات الان در دسترس نیستند.","notInDic":"در واژه~نامه یاÙت نشد","oneChange":"بررسی املا انجام شد. یک واژه تغییر یاÙت","progress":"بررسی املا در حال انجام...","title":"بررسی املا","toolbar":"بررسی املا"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/fi.js b/wqflask/wqflask/static/packages/ckeditor/lang/fi.js
deleted file mode 100644
index afb97a14..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/fi.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['fi']={"editor":"Rikastekstieditori","editorPanel":"Rikastekstieditoripaneeli","common":{"editorHelp":"Paina ALT 0 nähdäksesi ohjeen","browseServer":"Selaa palvelinta","url":"Osoite","protocol":"Protokolla","upload":"Lisää tiedosto","uploadSubmit":"Lähetä palvelimelle","image":"Kuva","flash":"Flash-animaatio","form":"Lomake","checkbox":"Valintaruutu","radio":"Radiopainike","textField":"Tekstikenttä","textarea":"Tekstilaatikko","hiddenField":"Piilokenttä","button":"Painike","select":"Valintakenttä","imageButton":"Kuvapainike","notSet":"<ei asetettu>","id":"Tunniste","name":"Nimi","langDir":"Kielen suunta","langDirLtr":"Vasemmalta oikealle (LTR)","langDirRtl":"Oikealta vasemmalle (RTL)","langCode":"Kielikoodi","longDescr":"Pitkän kuvauksen URL","cssClass":"Tyyliluokat","advisoryTitle":"Avustava otsikko","cssStyle":"Tyyli","ok":"OK","cancel":"Peruuta","close":"Sulje","preview":"Esikatselu","resize":"Raahaa muuttaaksesi kokoa","generalTab":"Yleinen","advancedTab":"Lisäominaisuudet","validateNumberFailed":"Arvon pitää olla numero.","confirmNewPage":"Kaikki tallentamattomat muutokset tähän sisältöön menetetään. Oletko varma, että haluat ladata uuden sivun?","confirmCancel":"Jotkut asetuksista on muuttuneet. Oletko varma, että haluat sulkea valintaikkunan?","options":"Asetukset","target":"Kohde","targetNew":"Uusi ikkuna (_blank)","targetTop":"Päällimmäinen ikkuna (_top)","targetSelf":"Sama ikkuna (_self)","targetParent":"Ylemmän tason ikkuna (_parent)","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","styles":"Tyyli","cssClasses":"Tyylitiedoston luokat","width":"Leveys","height":"Korkeus","align":"Kohdistus","alignLeft":"Vasemmalle","alignRight":"Oikealle","alignCenter":"Keskelle","alignJustify":"Tasaa molemmat reunat","alignTop":"Ylös","alignMiddle":"Keskelle","alignBottom":"Alas","alignNone":"Ei asetettu","invalidValue":"Virheellinen arvo.","invalidHeight":"Korkeuden täytyy olla numero.","invalidWidth":"Leveyden täytyy olla numero.","invalidCssLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku CSS mittayksikön (px, %, in, cm, mm, em, ex, pt tai pc) kanssa tai ilman.","invalidHtmlLength":"Kentän \"%1\" arvon täytyy olla positiivinen luku HTML mittayksikön (px tai %) kanssa tai ilman.","invalidInlineStyle":"Tyylille annetun arvon täytyy koostua yhdestä tai useammasta \"nimi : arvo\" parista, jotka ovat eroteltuna toisistaan puolipisteillä.","cssLengthTooltip":"Anna numeroarvo pikseleinä tai numeroarvo CSS mittayksikön kanssa (px, %, in, cm, mm, em, ex, pt, tai pc).","unavailable":"%1<span class=\"cke_accessibility\">, ei saatavissa</span>"},"about":{"copy":"Copyright &copy; $1. Kaikki oikeuden pidätetään.","dlgTitle":"Tietoa CKEditorista","help":"Katso ohjeet: $1.","moreInfo":"Lisenssitiedot löytyvät kotisivuiltamme:","title":"Tietoa CKEditorista","userGuide":"CKEditorin käyttäjäopas"},"basicstyles":{"bold":"Lihavoitu","italic":"Kursivoitu","strike":"Yliviivattu","subscript":"Alaindeksi","superscript":"Yläindeksi","underline":"Alleviivattu"},"bidi":{"ltr":"Tekstin suunta vasemmalta oikealle","rtl":"Tekstin suunta oikealta vasemmalle"},"blockquote":{"toolbar":"Lainaus"},"clipboard":{"copy":"Kopioi","copyError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa kopioimista. Käytä näppäimistöä kopioimiseen (Ctrl+C).","cut":"Leikkaa","cutError":"Selaimesi turva-asetukset eivät salli editorin toteuttaa leikkaamista. Käytä näppäimistöä leikkaamiseen (Ctrl+X).","paste":"Liitä","pasteArea":"Leikealue","pasteMsg":"Liitä painamalla (<STRONG>Ctrl+V</STRONG>) ja painamalla <STRONG>OK</STRONG>.","securityMsg":"Selaimesi turva-asetukset eivät salli editorin käyttää leikepöytää suoraan. Sinun pitää suorittaa liittäminen tässä ikkunassa.","title":"Liitä"},"button":{"selectedLabel":"%1 (Valittu)"},"colorbutton":{"auto":"Automaattinen","bgColorTitle":"Taustaväri","colors":{"000":"Musta","800000":"Kastanjanruskea","8B4513":"Satulanruskea","2F4F4F":"Tumma liuskekivenharmaa","008080":"Sinivihreä","000080":"Laivastonsininen","4B0082":"Indigonsininen","696969":"Tummanharmaa","B22222":"Tiili","A52A2A":"Ruskea","DAA520":"Kultapiisku","006400":"Tummanvihreä","40E0D0":"Turkoosi","0000CD":"Keskisininen","800080":"Purppura","808080":"Harmaa","F00":"Punainen","FF8C00":"Tumma oranssi","FFD700":"Kulta","008000":"Vihreä","0FF":"Syaani","00F":"Sininen","EE82EE":"Violetti","A9A9A9":"Tummanharmaa","FFA07A":"Vaaleanlohenpunainen","FFA500":"Oranssi","FFFF00":"Keltainen","00FF00":"Limetin vihreä","AFEEEE":"Haalea turkoosi","ADD8E6":"Vaaleansininen","DDA0DD":"Luumu","D3D3D3":"Vaaleanharmaa","FFF0F5":"Laventelinpunainen","FAEBD7":"Antiikinvalkoinen","FFFFE0":"Vaaleankeltainen","F0FFF0":"Hunajameloni","F0FFFF":"Asurinsininen","F0F8FF":"Alice Blue -sininen","E6E6FA":"Lavanteli","FFF":"Valkoinen"},"more":"Lisää värejä...","panelTitle":"Värit","textColorTitle":"Tekstiväri"},"colordialog":{"clear":"Poista","highlight":"Korostus","options":"Värin ominaisuudet","selected":"Valittu","title":"Valitse väri"},"templates":{"button":"Pohjat","emptyListMsg":"(Ei määriteltyjä pohjia)","insertOption":"Korvaa koko sisältö","options":"Sisältöpohjan ominaisuudet","selectPromptMsg":"Valitse editoriin avattava pohja","title":"Sisältöpohjat"},"contextmenu":{"options":"Pikavalikon ominaisuudet"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Ohjeistava otsikko","cssClassInputLabel":"Tyylitiedoston luokat","edit":"Muokkaa Diviä","inlineStyleInputLabel":"Sisätyyli","langDirLTRLabel":"Vasemmalta oikealle (LTR)","langDirLabel":"Kielen suunta","langDirRTLLabel":"Oikealta vasemmalle (RTL)","languageCodeInputLabel":" Kielen koodi","remove":"Poista Div","styleSelectLabel":"Tyyli","title":"Luo div-kehikko","toolbar":"Luo div-kehikko"},"toolbar":{"toolbarCollapse":"Kutista työkalupalkki","toolbarExpand":"Laajenna työkalupalkki","toolbarGroups":{"document":"Dokumentti","clipboard":"Leikepöytä/Kumoa","editing":"Muokkaus","forms":"Lomakkeet","basicstyles":"Perustyylit","paragraph":"Kappale","links":"Linkit","insert":"Lisää","styles":"Tyylit","colors":"Värit","tools":"Työkalut"},"toolbars":"Editorin työkalupalkit"},"elementspath":{"eleLabel":"Elementin polku","eleTitle":"%1 elementti"},"find":{"find":"Etsi","findOptions":"Hakuasetukset","findWhat":"Etsi mitä:","matchCase":"Sama kirjainkoko","matchCyclic":"Kierrä ympäri","matchWord":"Koko sana","notFoundMsg":"Etsittyä tekstiä ei löytynyt.","replace":"Korvaa","replaceAll":"Korvaa kaikki","replaceSuccessMsg":"%1 esiintymä(ä) korvattu.","replaceWith":"Korvaa tällä:","title":"Etsi ja korvaa"},"fakeobjects":{"anchor":"Ankkuri","flash":"Flash animaatio","hiddenfield":"Piilokenttä","iframe":"IFrame-kehys","unknown":"Tuntematon objekti"},"flash":{"access":"Skriptien pääsy","accessAlways":"Aina","accessNever":"Ei koskaan","accessSameDomain":"Sama verkkotunnus","alignAbsBottom":"Aivan alas","alignAbsMiddle":"Aivan keskelle","alignBaseline":"Alas (teksti)","alignTextTop":"Ylös (teksti)","bgcolor":"Taustaväri","chkFull":"Salli kokoruututila","chkLoop":"Toisto","chkMenu":"Näytä Flash-valikko","chkPlay":"Automaattinen käynnistys","flashvars":"Muuttujat Flash:lle","hSpace":"Vaakatila","properties":"Flash-ominaisuudet","propertiesTab":"Ominaisuudet","quality":"Laatu","qualityAutoHigh":"Automaattinen korkea","qualityAutoLow":"Automaattinen matala","qualityBest":"Paras","qualityHigh":"Korkea","qualityLow":"Matala","qualityMedium":"Keskitaso","scale":"Levitä","scaleAll":"Näytä kaikki","scaleFit":"Tarkka koko","scaleNoBorder":"Ei rajaa","title":"Flash ominaisuudet","vSpace":"Pystytila","validateHSpace":"Vaakatilan täytyy olla numero.","validateSrc":"Linkille on kirjoitettava URL","validateVSpace":"Pystytilan täytyy olla numero.","windowMode":"Ikkuna tila","windowModeOpaque":"Läpinäkyvyys","windowModeTransparent":"Läpinäkyvä","windowModeWindow":"Ikkuna"},"font":{"fontSize":{"label":"Koko","voiceLabel":"Kirjaisimen koko","panelTitle":"Koko"},"label":"Kirjaisinlaji","panelTitle":"Kirjaisinlaji","voiceLabel":"Kirjaisinlaji"},"forms":{"button":{"title":"Painikkeen ominaisuudet","text":"Teksti (arvo)","type":"Tyyppi","typeBtn":"Painike","typeSbm":"Lähetä","typeRst":"Tyhjennä"},"checkboxAndRadio":{"checkboxTitle":"Valintaruudun ominaisuudet","radioTitle":"Radiopainikkeen ominaisuudet","value":"Arvo","selected":"Valittu"},"form":{"title":"Lomakkeen ominaisuudet","menu":"Lomakkeen ominaisuudet","action":"Toiminto","method":"Tapa","encoding":"Enkoodaus"},"hidden":{"title":"Piilokentän ominaisuudet","name":"Nimi","value":"Arvo"},"select":{"title":"Valintakentän ominaisuudet","selectInfo":"Info","opAvail":"Ominaisuudet","value":"Arvo","size":"Koko","lines":"Rivit","chkMulti":"Salli usea valinta","opText":"Teksti","opValue":"Arvo","btnAdd":"Lisää","btnModify":"Muuta","btnUp":"Ylös","btnDown":"Alas","btnSetValue":"Aseta valituksi","btnDelete":"Poista"},"textarea":{"title":"Tekstilaatikon ominaisuudet","cols":"Sarakkeita","rows":"Rivejä"},"textfield":{"title":"Tekstikentän ominaisuudet","name":"Nimi","value":"Arvo","charWidth":"Leveys","maxChars":"Maksimi merkkimäärä","type":"Tyyppi","typeText":"Teksti","typePass":"Salasana","typeEmail":"Sähköposti","typeSearch":"Haku","typeTel":"Puhelinnumero","typeUrl":"Osoite"}},"format":{"label":"Muotoilu","panelTitle":"Muotoilu","tag_address":"Osoite","tag_div":"Normaali (DIV)","tag_h1":"Otsikko 1","tag_h2":"Otsikko 2","tag_h3":"Otsikko 3","tag_h4":"Otsikko 4","tag_h5":"Otsikko 5","tag_h6":"Otsikko 6","tag_p":"Normaali","tag_pre":"Muotoiltu"},"horizontalrule":{"toolbar":"Lisää murtoviiva"},"iframe":{"border":"Näytä kehyksen reunat","noUrl":"Anna IFrame-kehykselle lähdeosoite (src)","scrolling":"Näytä vierityspalkit","title":"IFrame-kehyksen ominaisuudet","toolbar":"IFrame-kehys"},"image":{"alertUrl":"Kirjoita kuvan osoite (URL)","alt":"Vaihtoehtoinen teksti","border":"Kehys","btnUpload":"Lähetä palvelimelle","button2Img":"Haluatko muuntaa valitun kuvanäppäimen kuvaksi?","hSpace":"Vaakatila","img2Button":"Haluatko muuntaa valitun kuvan kuvanäppäimeksi?","infoTab":"Kuvan tiedot","linkTab":"Linkki","lockRatio":"Lukitse suhteet","menu":"Kuvan ominaisuudet","resetSize":"Alkuperäinen koko","title":"Kuvan ominaisuudet","titleButton":"Kuvapainikkeen ominaisuudet","upload":"Lisää kuva","urlMissing":"Kuvan lähdeosoite puuttuu.","vSpace":"Pystytila","validateBorder":"Kehyksen täytyy olla kokonaisluku.","validateHSpace":"HSpace-määrityksen täytyy olla kokonaisluku.","validateVSpace":"VSpace-määrityksen täytyy olla kokonaisluku."},"indent":{"indent":"Suurenna sisennystä","outdent":"Pienennä sisennystä"},"smiley":{"options":"Hymiön ominaisuudet","title":"Lisää hymiö","toolbar":"Hymiö"},"justify":{"block":"Tasaa molemmat reunat","center":"Keskitä","left":"Tasaa vasemmat reunat","right":"Tasaa oikeat reunat"},"language":{"button":"Aseta kieli","remove":"Poista kieli"},"link":{"acccessKey":"Pikanäppäin","advanced":"Lisäominaisuudet","advisoryContentType":"Avustava sisällön tyyppi","advisoryTitle":"Avustava otsikko","anchor":{"toolbar":"Lisää ankkuri/muokkaa ankkuria","menu":"Ankkurin ominaisuudet","title":"Ankkurin ominaisuudet","name":"Nimi","errorName":"Ankkurille on kirjoitettava nimi","remove":"Poista ankkuri"},"anchorId":"Ankkurin ID:n mukaan","anchorName":"Ankkurin nimen mukaan","charset":"Linkitetty kirjaimisto","cssClasses":"Tyyliluokat","emailAddress":"Sähköpostiosoite","emailBody":"Viesti","emailSubject":"Aihe","id":"Tunniste","info":"Linkin tiedot","langCode":"Kielen suunta","langDir":"Kielen suunta","langDirLTR":"Vasemmalta oikealle (LTR)","langDirRTL":"Oikealta vasemmalle (RTL)","menu":"Muokkaa linkkiä","name":"Nimi","noAnchors":"(Ei ankkureita tässä dokumentissa)","noEmail":"Kirjoita sähköpostiosoite","noUrl":"Linkille on kirjoitettava URL","other":"<muu>","popupDependent":"Riippuva (Netscape)","popupFeatures":"Popup ikkunan ominaisuudet","popupFullScreen":"Täysi ikkuna (IE)","popupLeft":"Vasemmalta (px)","popupLocationBar":"Osoiterivi","popupMenuBar":"Valikkorivi","popupResizable":"Venytettävä","popupScrollBars":"Vierityspalkit","popupStatusBar":"Tilarivi","popupToolbar":"Vakiopainikkeet","popupTop":"Ylhäältä (px)","rel":"Suhde","selectAnchor":"Valitse ankkuri","styles":"Tyyli","tabIndex":"Tabulaattori indeksi","target":"Kohde","targetFrame":"<kehys>","targetFrameName":"Kohdekehyksen nimi","targetPopup":"<popup ikkuna>","targetPopupName":"Popup ikkunan nimi","title":"Linkki","toAnchor":"Ankkuri tässä sivussa","toEmail":"Sähköposti","toUrl":"Osoite","toolbar":"Lisää linkki/muokkaa linkkiä","type":"Linkkityyppi","unlink":"Poista linkki","upload":"Lisää tiedosto"},"list":{"bulletedlist":"Luettelomerkit","numberedlist":"Numerointi"},"liststyle":{"armenian":"Armeenialainen numerointi","bulletedTitle":"Numeroimattoman listan ominaisuudet","circle":"Ympyrä","decimal":"Desimaalit (1, 2, 3, jne.)","decimalLeadingZero":"Desimaalit, alussa nolla (01, 02, 03, jne.)","disc":"Levy","georgian":"Georgialainen numerointi (an, ban, gan, etc.)","lowerAlpha":"Pienet aakkoset (a, b, c, d, e, jne.)","lowerGreek":"Pienet kreikkalaiset (alpha, beta, gamma, jne.)","lowerRoman":"Pienet roomalaiset (i, ii, iii, iv, v, jne.)","none":"Ei mikään","notset":"<ei asetettu>","numberedTitle":"Numeroidun listan ominaisuudet","square":"Neliö","start":"Alku","type":"Tyyppi","upperAlpha":"Isot aakkoset (A, B, C, D, E, jne.)","upperRoman":"Isot roomalaiset (I, II, III, IV, V, jne.)","validateStartNumber":"Listan ensimmäisen numeron tulee olla kokonaisluku."},"magicline":{"title":"Lisää kappale tähän."},"maximize":{"maximize":"Suurenna","minimize":"Pienennä"},"newpage":{"toolbar":"Tyhjennä"},"pagebreak":{"alt":"Sivunvaihto","toolbar":"Lisää sivunvaihto"},"pastetext":{"button":"Liitä tekstinä","title":"Liitä tekstinä"},"pastefromword":{"confirmCleanup":"Liittämäsi teksti näyttäisi olevan Word-dokumentista. Haluatko siivota sen ennen liittämistä? (Suositus: Kyllä)","error":"Liitetyn tiedon siivoaminen ei onnistunut sisäisen virheen takia","title":"Liitä Word-dokumentista","toolbar":"Liitä Word-dokumentista"},"preview":{"preview":"Esikatsele"},"print":{"toolbar":"Tulosta"},"removeformat":{"toolbar":"Poista muotoilu"},"save":{"toolbar":"Tallenna"},"selectall":{"toolbar":"Valitse kaikki"},"showblocks":{"toolbar":"Näytä elementit"},"sourcearea":{"toolbar":"Koodi"},"specialchar":{"options":"Erikoismerkin ominaisuudet","title":"Valitse erikoismerkki","toolbar":"Lisää erikoismerkki"},"scayt":{"btn_about":"Tietoja oikoluvusta kirjoitetaessa","btn_dictionaries":"Sanakirjat","btn_disable":"Poista käytöstä oikoluku kirjoitetaessa","btn_enable":"Ota käyttöön oikoluku kirjoitettaessa","btn_langs":"Kielet","btn_options":"Asetukset","text_title":""},"stylescombo":{"label":"Tyyli","panelTitle":"Muotoilujen tyylit","panelTitle1":"Lohkojen tyylit","panelTitle2":"Rivinsisäiset tyylit","panelTitle3":"Objektien tyylit"},"table":{"border":"Rajan paksuus","caption":"Otsikko","cell":{"menu":"Solu","insertBefore":"Lisää solu eteen","insertAfter":"Lisää solu perään","deleteCell":"Poista solut","merge":"Yhdistä solut","mergeRight":"Yhdistä oikealla olevan kanssa","mergeDown":"Yhdistä alla olevan kanssa","splitHorizontal":"Jaa solu vaakasuunnassa","splitVertical":"Jaa solu pystysuunnassa","title":"Solun ominaisuudet","cellType":"Solun tyyppi","rowSpan":"Rivin jatkuvuus","colSpan":"Solun jatkuvuus","wordWrap":"Rivitys","hAlign":"Horisontaali kohdistus","vAlign":"Vertikaali kohdistus","alignBaseline":"Alas (teksti)","bgColor":"Taustan väri","borderColor":"Reunan väri","data":"Data","header":"Ylätunniste","yes":"Kyllä","no":"Ei","invalidWidth":"Solun leveyden täytyy olla numero.","invalidHeight":"Solun korkeuden täytyy olla numero.","invalidRowSpan":"Rivin jatkuvuuden täytyy olla kokonaisluku.","invalidColSpan":"Solun jatkuvuuden täytyy olla kokonaisluku.","chooseColor":"Valitse"},"cellPad":"Solujen sisennys","cellSpace":"Solujen väli","column":{"menu":"Sarake","insertBefore":"Lisää sarake vasemmalle","insertAfter":"Lisää sarake oikealle","deleteColumn":"Poista sarakkeet"},"columns":"Sarakkeet","deleteTable":"Poista taulu","headers":"Ylätunnisteet","headersBoth":"Molemmat","headersColumn":"Ensimmäinen sarake","headersNone":"Ei","headersRow":"Ensimmäinen rivi","invalidBorder":"Reunan koon täytyy olla numero.","invalidCellPadding":"Solujen sisennyksen täytyy olla numero.","invalidCellSpacing":"Solujen välin täytyy olla numero.","invalidCols":"Sarakkeiden määrän täytyy olla suurempi kuin 0.","invalidHeight":"Taulun korkeuden täytyy olla numero.","invalidRows":"Rivien määrän täytyy olla suurempi kuin 0.","invalidWidth":"Taulun leveyden täytyy olla numero.","menu":"Taulun ominaisuudet","row":{"menu":"Rivi","insertBefore":"Lisää rivi yläpuolelle","insertAfter":"Lisää rivi alapuolelle","deleteRow":"Poista rivit"},"rows":"Rivit","summary":"Yhteenveto","title":"Taulun ominaisuudet","toolbar":"Taulu","widthPc":"prosenttia","widthPx":"pikseliä","widthUnit":"leveysyksikkö"},"undo":{"redo":"Toista","undo":"Kumoa"},"wsc":{"btnIgnore":"Jätä huomioimatta","btnIgnoreAll":"Jätä kaikki huomioimatta","btnReplace":"Korvaa","btnReplaceAll":"Korvaa kaikki","btnUndo":"Kumoa","changeTo":"Vaihda","errorLoading":"Virhe ladattaessa oikolukupalvelua isännältä: %s.","ieSpellDownload":"Oikeinkirjoituksen tarkistusta ei ole asennettu. Haluatko ladata sen nyt?","manyChanges":"Tarkistus valmis: %1 sanaa muutettiin","noChanges":"Tarkistus valmis: Yhtään sanaa ei muutettu","noMispell":"Tarkistus valmis: Ei virheitä","noSuggestions":"Ei ehdotuksia","notAvailable":"Valitettavasti oikoluku ei ole käytössä tällä hetkellä.","notInDic":"Ei sanakirjassa","oneChange":"Tarkistus valmis: Yksi sana muutettiin","progress":"Tarkistus käynnissä...","title":"Oikoluku","toolbar":"Tarkista oikeinkirjoitus"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/fo.js b/wqflask/wqflask/static/packages/ckeditor/lang/fo.js
deleted file mode 100644
index 482a8b18..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/fo.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['fo']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Trýst ALT og 0 fyri vegleiðing","browseServer":"Ambætarakagi","url":"URL","protocol":"Protokoll","upload":"Send til ambætaran","uploadSubmit":"Send til ambætaran","image":"Myndir","flash":"Flash","form":"Formur","checkbox":"Flugubein","radio":"Radioknøttur","textField":"Tekstteigur","textarea":"Tekstumráði","hiddenField":"Fjaldur teigur","button":"Knøttur","select":"Valskrá","imageButton":"Myndaknøttur","notSet":"<ikki sett>","id":"Id","name":"Navn","langDir":"Tekstkós","langDirLtr":"Frá vinstru til høgru (LTR)","langDirRtl":"Frá høgru til vinstru (RTL)","langCode":"Málkoda","longDescr":"Víðkað URL frágreiðing","cssClass":"Typografi klassar","advisoryTitle":"Vegleiðandi heiti","cssStyle":"Typografi","ok":"Góðkent","cancel":"Avlýst","close":"Lat aftur","preview":"Frumsýn","resize":"Drag fyri at broyta stødd","generalTab":"Generelt","advancedTab":"Fjølbroytt","validateNumberFailed":"Hetta er ikki eitt tal.","confirmNewPage":"Allar ikki goymdar broytingar í hesum innihaldið hvørva. Skal nýggj síða lesast kortini?","confirmCancel":"Nakrir valmøguleikar eru broyttir. Ert tú vísur í, at dialogurin skal latast aftur?","options":"Options","target":"Target","targetNew":"Nýtt vindeyga (_blank)","targetTop":"Vindeyga ovast (_top)","targetSelf":"Sama vindeyga (_self)","targetParent":"Upphavligt vindeyga (_parent)","langDirLTR":"Frá vinstru til høgru (LTR)","langDirRTL":"Frá høgru til vinstru (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Breidd","height":"Hædd","align":"Justering","alignLeft":"Vinstra","alignRight":"Høgra","alignCenter":"Miðsett","alignJustify":"Javnir tekstkantar","alignTop":"Ovast","alignMiddle":"Miðja","alignBottom":"Botnur","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Hædd má vera eitt tal.","invalidWidth":"Breidd má vera eitt tal.","invalidCssLength":"Virðið sett í \"%1\" feltið má vera eitt positivt tal, við ella uttan gyldugum CSS mátieind (px, %, in, cm, mm, em, ex, pt, ella pc).","invalidHtmlLength":"Virðið sett í \"%1\" feltiðield má vera eitt positivt tal, við ella uttan gyldugum CSS mátieind (px ella %).","invalidInlineStyle":"Virði specifiserað fyri inline style má hava eitt ella fleiri pør (tuples) skrivað sum \"name : value\", hvørt parið sundurskilt við semi-colon.","cssLengthTooltip":"Skriva eitt tal fyri eitt virði í pixels ella eitt tal við gyldigum CSS eind (px, %, in, cm, mm, em, ex, pt, ella pc).","unavailable":"%1<span class=\"cke_accessibility\">, ikki tøkt</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"Um CKEditor","help":"Kekka $1 fyri hjálp.","moreInfo":"Licens upplýsingar finnast á heimasíðu okkara:","title":"Um CKEditor","userGuide":"CKEditor Brúkaravegleiðing"},"basicstyles":{"bold":"Feit skrift","italic":"Skráskrift","strike":"Yvirstrikað","subscript":"Lækkað skrift","superscript":"Hækkað skrift","underline":"Undirstrikað"},"bidi":{"ltr":"Tekstkós frá vinstru til høgru","rtl":"Tekstkós frá høgru til vinstru"},"blockquote":{"toolbar":"Blockquote"},"clipboard":{"copy":"Avrita","copyError":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í at avrita tekstin. Vinarliga nýt knappaborðið til at avrita tekstin (Ctrl/Cmd+C).","cut":"Kvett","cutError":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í at kvetta tekstin. Vinarliga nýt knappaborðið til at kvetta tekstin (Ctrl/Cmd+X).","paste":"Innrita","pasteArea":"Avritingarumráði","pasteMsg":"Vinarliga koyr tekstin í hendan rútin við knappaborðinum (<strong>Ctrl/Cmd+V</strong>) og klikk á <strong>Góðtak</strong>.","securityMsg":"Trygdaruppseting alnótskagans forðar tekstviðgeranum í beinleiðis atgongd til avritingarminnið. Tygum mugu royna aftur í hesum rútinum.","title":"Innrita"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatiskt","bgColorTitle":"Bakgrundslitur","colors":{"000":"Svart","800000":"Maroon","8B4513":"Saðilsbrúnt","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Myrkagrátt","B22222":"Fire Brick","A52A2A":"Brúnt","DAA520":"Gullstavur","006400":"Myrkagrønt","40E0D0":"Turquoise","0000CD":"Meðal blátt","800080":"Purple","808080":"Grátt","F00":"Reytt","FF8C00":"Myrkt appelsingult","FFD700":"Gull","008000":"Grønt","0FF":"Cyan","00F":"Blátt","EE82EE":"Violet","A9A9A9":"Døkt grátt","FFA07A":"Ljósur laksur","FFA500":"Appelsingult","FFFF00":"Gult","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Ljósablátt","DDA0DD":"Plum","D3D3D3":"Ljósagrátt","FFF0F5":"Lavender Blush","FAEBD7":"Klassiskt hvítt","FFFFE0":"Ljósagult","F0FFF0":"Hunangsdøggur","F0FFFF":"Azure","F0F8FF":"Alice Blátt","E6E6FA":"Lavender","FFF":"Hvítt"},"more":"Fleiri litir...","panelTitle":"Litir","textColorTitle":"Tekstlitur"},"colordialog":{"clear":"Strika","highlight":"Framheva","options":"Litmøguleikar","selected":"Valdur litur","title":"Vel lit"},"templates":{"button":"Skabelónir","emptyListMsg":"(Ongar skabelónir tøkar)","insertOption":"Yvirskriva núverandi innihald","options":"Møguleikar fyri Template","selectPromptMsg":"Vinarliga vel ta skabelón, ið skal opnast í tekstviðgeranum<br>(Hetta yvirskrivar núverandi innihald):","title":"Innihaldsskabelónir"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Redigera Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Vinstru til høgru (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Høgru til vinstru (RTL)","languageCodeInputLabel":" Language Code","remove":"Strika Div","styleSelectLabel":"Style","title":"Ger Div Container","toolbar":"Ger Div Container"},"toolbar":{"toolbarCollapse":"Lat Toolbar aftur","toolbarExpand":"Vís Toolbar","toolbarGroups":{"document":"Dokument","clipboard":"Clipboard/Undo","editing":"Editering","forms":"Formar","basicstyles":"Grundleggjandi Styles","paragraph":"Reglubrot","links":"Leinkjur","insert":"Set inn","styles":"Styles","colors":"Litir","tools":"Tól"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Slóð til elementir","eleTitle":"%1 element"},"find":{"find":"Leita","findOptions":"Finn møguleikar","findWhat":"Finn:","matchCase":"Munur á stórum og smáum bókstavum","matchCyclic":"Match cyclic","matchWord":"Bert heil orð","notFoundMsg":"Leititeksturin varð ikki funnin","replace":"Yvirskriva","replaceAll":"Yvirskriva alt","replaceSuccessMsg":"%1 úrslit broytt.","replaceWith":"Yvirskriva við:","title":"Finn og broyt"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Fjaldur teigur","iframe":"IFrame","unknown":"Ókent Object"},"flash":{"access":"Script atgongd","accessAlways":"Altíð","accessNever":"Ongantíð","accessSameDomain":"Sama navnaøki","alignAbsBottom":"Abs botnur","alignAbsMiddle":"Abs miðja","alignBaseline":"Basislinja","alignTextTop":"Tekst toppur","bgcolor":"Bakgrundslitur","chkFull":"Loyv fullan skerm","chkLoop":"Endurspæl","chkMenu":"Ger Flash skrá virkna","chkPlay":"Avspælingin byrjar sjálv","flashvars":"Variablar fyri Flash","hSpace":"Høgri breddi","properties":"Flash eginleikar","propertiesTab":"Eginleikar","quality":"Góðska","qualityAutoHigh":"Auto høg","qualityAutoLow":"Auto Lág","qualityBest":"Besta","qualityHigh":"Høg","qualityLow":"Lág","qualityMedium":"Meðal","scale":"Skalering","scaleAll":"Vís alt","scaleFit":"Neyv skalering","scaleNoBorder":"Eingin bordi","title":"Flash eginleikar","vSpace":"Vinstri breddi","validateHSpace":"HSpace má vera eitt tal.","validateSrc":"Vinarliga skriva tilknýti (URL)","validateVSpace":"VSpace má vera eitt tal.","windowMode":"Slag av rúti","windowModeOpaque":"Ikki transparent","windowModeTransparent":"Transparent","windowModeWindow":"Rútur"},"font":{"fontSize":{"label":"Skriftstødd","voiceLabel":"Skriftstødd","panelTitle":"Skriftstødd"},"label":"Skrift","panelTitle":"Skrift","voiceLabel":"Skrift"},"forms":{"button":{"title":"Eginleikar fyri knøtt","text":"Tekstur","type":"Slag","typeBtn":"Knøttur","typeSbm":"Send","typeRst":"Nullstilla"},"checkboxAndRadio":{"checkboxTitle":"Eginleikar fyri flugubein","radioTitle":"Eginleikar fyri radioknøtt","value":"Virði","selected":"Valt"},"form":{"title":"Eginleikar fyri Form","menu":"Eginleikar fyri Form","action":"Hending","method":"Háttur","encoding":"Encoding"},"hidden":{"title":"Eginleikar fyri fjaldan teig","name":"Navn","value":"Virði"},"select":{"title":"Eginleikar fyri valskrá","selectInfo":"Upplýsingar","opAvail":"Tøkir møguleikar","value":"Virði","size":"Stødd","lines":"Linjur","chkMulti":"Loyv fleiri valmøguleikum samstundis","opText":"Tekstur","opValue":"Virði","btnAdd":"Legg afturat","btnModify":"Broyt","btnUp":"Upp","btnDown":"Niður","btnSetValue":"Set sum valt virði","btnDelete":"Strika"},"textarea":{"title":"Eginleikar fyri tekstumráði","cols":"kolonnur","rows":"røðir"},"textfield":{"title":"Eginleikar fyri tekstteig","name":"Navn","value":"Virði","charWidth":"Breidd (sjónlig tekn)","maxChars":"Mest loyvdu tekn","type":"Slag","typeText":"Tekstur","typePass":"Loyniorð","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Skriftsnið","panelTitle":"Skriftsnið","tag_address":"Adressa","tag_div":"Vanligt (DIV)","tag_h1":"Yvirskrift 1","tag_h2":"Yvirskrift 2","tag_h3":"Yvirskrift 3","tag_h4":"Yvirskrift 4","tag_h5":"Yvirskrift 5","tag_h6":"Yvirskrift 6","tag_p":"Vanligt","tag_pre":"Sniðgivið"},"horizontalrule":{"toolbar":"Ger vatnrætta linju"},"iframe":{"border":"Vís frame kant","noUrl":"Vinarliga skriva URL til iframe","scrolling":"Loyv scrollbars","title":"Møguleikar fyri IFrame","toolbar":"IFrame"},"image":{"alertUrl":"Rita slóðina til myndina","alt":"Alternativur tekstur","border":"Bordi","btnUpload":"Send til ambætaran","button2Img":"Skal valdi myndaknøttur gerast til vanliga mynd?","hSpace":"Høgri breddi","img2Button":"Skal valda mynd gerast til myndaknøtt?","infoTab":"Myndaupplýsingar","linkTab":"Tilknýti","lockRatio":"Læs lutfallið","menu":"Myndaeginleikar","resetSize":"Upprunastødd","title":"Myndaeginleikar","titleButton":"Eginleikar fyri myndaknøtt","upload":"Send","urlMissing":"URL til mynd manglar.","vSpace":"Vinstri breddi","validateBorder":"Bordi má vera eitt heiltal.","validateHSpace":"HSpace má vera eitt heiltal.","validateVSpace":"VSpace má vera eitt heiltal."},"indent":{"indent":"Økja reglubrotarinntriv","outdent":"Minka reglubrotarinntriv"},"smiley":{"options":"Møguleikar fyri Smiley","title":"Vel Smiley","toolbar":"Smiley"},"justify":{"block":"Javnir tekstkantar","center":"Miðsett","left":"Vinstrasett","right":"Høgrasett"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Snarvegisknöttur","advanced":"Fjølbroytt","advisoryContentType":"Vegleiðandi innihaldsslag","advisoryTitle":"Vegleiðandi heiti","anchor":{"toolbar":"Ger/broyt marknastein","menu":"Eginleikar fyri marknastein","title":"Eginleikar fyri marknastein","name":"Heiti marknasteinsins","errorName":"Vinarliga rita marknasteinsins heiti","remove":"Strika marknastein"},"anchorId":"Eftir element Id","anchorName":"Eftir navni á marknasteini","charset":"Atknýtt teknsett","cssClasses":"Typografi klassar","emailAddress":"Teldupost-adressa","emailBody":"Breyðtekstur","emailSubject":"Evni","id":"Id","info":"Tilknýtis upplýsingar","langCode":"Tekstkós","langDir":"Tekstkós","langDirLTR":"Frá vinstru til høgru (LTR)","langDirRTL":"Frá høgru til vinstru (RTL)","menu":"Broyt tilknýti","name":"Navn","noAnchors":"(Eingir marknasteinar eru í hesum dokumentið)","noEmail":"Vinarliga skriva teldupost-adressu","noUrl":"Vinarliga skriva tilknýti (URL)","other":"<annað>","popupDependent":"Bundið (Netscape)","popupFeatures":"Popup vindeygans víðkaðu eginleikar","popupFullScreen":"Fullur skermur (IE)","popupLeft":"Frástøða frá vinstru","popupLocationBar":"Adressulinja","popupMenuBar":"Skrábjálki","popupResizable":"Stødd kann broytast","popupScrollBars":"Rullibjálki","popupStatusBar":"Støðufrágreiðingarbjálki","popupToolbar":"Amboðsbjálki","popupTop":"Frástøða frá íerva","rel":"Relatión","selectAnchor":"Vel ein marknastein","styles":"Typografi","tabIndex":"Tabulator indeks","target":"Target","targetFrame":"<ramma>","targetFrameName":"Vís navn vindeygans","targetPopup":"<popup vindeyga>","targetPopupName":"Popup vindeygans navn","title":"Tilknýti","toAnchor":"Tilknýti til marknastein í tekstinum","toEmail":"Teldupostur","toUrl":"URL","toolbar":"Ger/broyt tilknýti","type":"Tilknýtisslag","unlink":"Strika tilknýti","upload":"Send til ambætaran"},"list":{"bulletedlist":"Punktmerktur listi","numberedlist":"Talmerktur listi"},"liststyle":{"armenian":"Armensk talskipan","bulletedTitle":"Eginleikar fyri lista við prikkum","circle":"Sirkul","decimal":"Vanlig tøl (1, 2, 3, etc.)","decimalLeadingZero":"Tøl við null frammanfyri (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgisk talskipan (an, ban, gan, osv.)","lowerAlpha":"Lítlir bókstavir (a, b, c, d, e, etc.)","lowerGreek":"Grikskt við lítlum (alpha, beta, gamma, etc.)","lowerRoman":"Lítil rómaratøl (i, ii, iii, iv, v, etc.)","none":"Einki","notset":"<ikki sett>","numberedTitle":"Eginleikar fyri lista við tølum","square":"Fýrkantur","start":"Byrjan","type":"Slag","upperAlpha":"Stórir bókstavir (A, B, C, D, E, etc.)","upperRoman":"Stór rómaratøl (I, II, III, IV, V, etc.)","validateStartNumber":"Byrjunartalið fyri lista má vera eitt heiltal."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maksimera","minimize":"Minimera"},"newpage":{"toolbar":"Nýggj síða"},"pagebreak":{"alt":"Síðuskift","toolbar":"Ger síðuskift"},"pastetext":{"button":"Innrita som reinan tekst","title":"Innrita som reinan tekst"},"pastefromword":{"confirmCleanup":"Teksturin, tú roynir at seta inn, sýnist at stava frá Word. Skal teksturin reinsast fyrst?","error":"Tað eydnaðist ikki at reinsa tekstin vegna ein internan feil","title":"Innrita frá Word","toolbar":"Innrita frá Word"},"preview":{"preview":"Frumsýning"},"print":{"toolbar":"Prenta"},"removeformat":{"toolbar":"Strika sniðgeving"},"save":{"toolbar":"Goym"},"selectall":{"toolbar":"Markera alt"},"showblocks":{"toolbar":"Vís blokkar"},"sourcearea":{"toolbar":"Kelda"},"specialchar":{"options":"Møguleikar við serteknum","title":"Vel sertekn","toolbar":"Set inn sertekn"},"scayt":{"btn_about":"Um SCAYT","btn_dictionaries":"Orðabøkur","btn_disable":"Nokta SCAYT","btn_enable":"Loyv SCAYT","btn_langs":"Tungumál","btn_options":"Uppseting","text_title":""},"stylescombo":{"label":"Typografi","panelTitle":"Formatterings stílir","panelTitle1":"Blokk stílir","panelTitle2":"Inline stílir","panelTitle3":"Object stílir"},"table":{"border":"Bordabreidd","caption":"Tabellfrágreiðing","cell":{"menu":"Meski","insertBefore":"Set meska inn áðrenn","insertAfter":"Set meska inn aftaná","deleteCell":"Strika meskar","merge":"Flætta meskar","mergeRight":"Flætta meskar til høgru","mergeDown":"Flætta saman","splitHorizontal":"Kloyv meska vatnrætt","splitVertical":"Kloyv meska loddrætt","title":"Mesku eginleikar","cellType":"Mesku slag","rowSpan":"Ræð spenni","colSpan":"Kolonnu spenni","wordWrap":"Orðkloyving","hAlign":"Horisontal plasering","vAlign":"Loddrøtt plasering","alignBaseline":"Basislinja","bgColor":"Bakgrundslitur","borderColor":"Bordalitur","data":"Data","header":"Header","yes":"Ja","no":"Nei","invalidWidth":"Meskubreidd má vera eitt tal.","invalidHeight":"Meskuhædd má vera eitt tal.","invalidRowSpan":"Raðspennið má vera eitt heiltal.","invalidColSpan":"Kolonnuspennið má vera eitt heiltal.","chooseColor":"Vel"},"cellPad":"Meskubreddi","cellSpace":"Fjarstøða millum meskar","column":{"menu":"Kolonna","insertBefore":"Set kolonnu inn áðrenn","insertAfter":"Set kolonnu inn aftaná","deleteColumn":"Strika kolonnur"},"columns":"Kolonnur","deleteTable":"Strika tabell","headers":"Yvirskriftir","headersBoth":"Báðir","headersColumn":"Fyrsta kolonna","headersNone":"Eingin","headersRow":"Fyrsta rað","invalidBorder":"Borda-stødd má vera eitt tal.","invalidCellPadding":"Cell padding má vera eitt tal.","invalidCellSpacing":"Cell spacing má vera eitt tal.","invalidCols":"Talið av kolonnum má vera eitt tal størri enn 0.","invalidHeight":"Tabell-hædd má vera eitt tal.","invalidRows":"Talið av røðum má vera eitt tal størri enn 0.","invalidWidth":"Tabell-breidd má vera eitt tal.","menu":"Eginleikar fyri tabell","row":{"menu":"Rað","insertBefore":"Set rað inn áðrenn","insertAfter":"Set rað inn aftaná","deleteRow":"Strika røðir"},"rows":"Røðir","summary":"Samandráttur","title":"Eginleikar fyri tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"pixels","widthUnit":"breiddar unit"},"undo":{"redo":"Vend aftur","undo":"Angra"},"wsc":{"btnIgnore":"Forfjóna","btnIgnoreAll":"Forfjóna alt","btnReplace":"Yvirskriva","btnReplaceAll":"Yvirskriva alt","btnUndo":"Angra","changeTo":"Broyt til","errorLoading":"Feilur við innlesing av application service host: %s.","ieSpellDownload":"Rættstavarin er ikki tøkur í tekstviðgeranum. Vilt tú heinta hann nú?","manyChanges":"Rættstavarin liðugur: %1 orð broytt","noChanges":"Rættstavarin liðugur: Einki orð varð broytt","noMispell":"Rættstavarin liðugur: Eingin feilur funnin","noSuggestions":"- Einki uppskot -","notAvailable":"Tíverri, ikki tøkt í løtuni.","notInDic":"Finst ikki í orðabókini","oneChange":"Rættstavarin liðugur: Eitt orð er broytt","progress":"Rættstavarin arbeiðir...","title":"Kanna stavseting","toolbar":"Kanna stavseting"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/fr-ca.js b/wqflask/wqflask/static/packages/ckeditor/lang/fr-ca.js
deleted file mode 100644
index 29e18dc8..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/fr-ca.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['fr-ca']={"editor":"Éditeur de texte enrichi","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Appuyez sur 0 pour de l'aide","browseServer":"Parcourir le serveur","url":"URL","protocol":"Protocole","upload":"Envoyer","uploadSubmit":"Envoyer au serveur","image":"Image","flash":"Animation Flash","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ caché","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton image","notSet":"<Par défaut>","id":"Id","name":"Nom","langDir":"Sens d'écriture","langDirLtr":"De gauche à droite (LTR)","langDirRtl":"De droite à gauche (RTL)","langCode":"Code langue","longDescr":"URL de description longue","cssClass":"Classes CSS","advisoryTitle":"Titre","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Redimensionner","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous certain de vouloir charger une nouvelle page?","confirmCancel":"Certaines options ont été modifiées. Êtes-vous certain de vouloir fermer?","options":"Options","target":"Cible","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieur (_top)","targetSelf":"Cette fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"De gauche à droite (LTR)","langDirRTL":"De droite à gauche (RTL)","styles":"Style","cssClasses":"Classe CSS","width":"Largeur","height":"Hauteur","align":"Alignement","alignLeft":"Gauche","alignRight":"Droite","alignCenter":"Centré","alignJustify":"Justifié","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"None","invalidValue":"Valeur invalide.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidCssLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure HTML valide (px ou %).","invalidInlineStyle":"La valeur spécifiée pour le style intégré doit être composée d'un ou plusieurs couples de valeur au format \"nom : valeur\", separés par des points-virgules.","cssLengthTooltip":"Entrer un nombre pour la valeur en pixel ou un nombre avec une unité CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponible</span>"},"about":{"copy":"Copyright &copy; $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor","help":"Consulter $1 pour l'aide.","moreInfo":"Pour les informations de licence, consulter notre site internet:","title":"À propos de CKEditor","userGuide":"Guide utilisateur de CKEditor"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"bidi":{"ltr":"Direction du texte de gauche à droite","rtl":"Direction du texte de droite à gauche"},"blockquote":{"toolbar":"Citation"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de copier automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur empêchent l'éditeur de couper automatiquement vos données. Veuillez utiliser les équivalents claviers (Ctrl/Cmd+X).","paste":"Coller","pasteArea":"Coller la zone","pasteMsg":"Veuillez coller dans la zone ci-dessous en utilisant le clavier (<STRONG>Ctrl/Cmd+V</STRONG>) et appuyer sur <STRONG>OK</STRONG>.","securityMsg":"A cause des paramètres de sécurité de votre navigateur, l'éditeur ne peut accéder au presse-papier directement. Vous devez coller à nouveau le contenu dans cette fenêtre.","title":"Coller"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatique","bgColorTitle":"Couleur de fond","colors":{"000":"Noir","800000":"Marron","8B4513":"Brun foncé","2F4F4F":"Gris ardoise foncé","008080":"Sarcelle","000080":"Marine","4B0082":"Indigo","696969":"Gris foncé","B22222":"Rouge brique","A52A2A":"Brun","DAA520":"Doré","006400":"Vert foncé","40E0D0":"Turquoise","0000CD":"Bleu","800080":"Mauve","808080":"Gris","F00":"Rouge","FF8C00":"Orange foncé","FFD700":"Or","008000":"Vert","0FF":"Cyan","00F":"Bleu","EE82EE":"Violet","A9A9A9":"Gris pâle","FFA07A":"Saumon clair","FFA500":"Orange","FFFF00":"Jaune","00FF00":"Vert lime","AFEEEE":"Turquoise pâle","ADD8E6":"Bleu pâle","DDA0DD":"Prune","D3D3D3":"Gris pâle","FFF0F5":"Bleu lavande","FAEBD7":"Blanc antique","FFFFE0":"Jaune pâle","F0FFF0":"Miel doré","F0FFFF":"Azure","F0F8FF":"Bleu alice","E6E6FA":"Lavande","FFF":"Blanc"},"more":"Plus de couleurs...","panelTitle":"Couleurs","textColorTitle":"Couleur de texte"},"colordialog":{"clear":"Effacer","highlight":"Surligner","options":"Options de couleur","selected":"Couleur sélectionnée","title":"Choisir une couleur"},"templates":{"button":"Modèles","emptyListMsg":"(Aucun modèle disponible)","insertOption":"Remplacer tout le contenu actuel","options":"Options de modèles","selectPromptMsg":"Sélectionner le modèle à ouvrir dans l'éditeur","title":"Modèles de contenu"},"contextmenu":{"options":"Options du menu contextuel"},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"Titre","cssClassInputLabel":"Classes CSS","edit":"Modifier le DIV","inlineStyleInputLabel":"Style en ligne","langDirLTRLabel":"De gauche à droite (LTR)","langDirLabel":"Sens d'écriture","langDirRTLLabel":"De droite à gauche (RTL)","languageCodeInputLabel":"Code de langue","remove":"Supprimer le DIV","styleSelectLabel":"Style","title":"Créer un DIV","toolbar":"Créer un DIV"},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse papier/Annuler","editing":"Édition","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barre d'outils de l'éditeur"},"elementspath":{"eleLabel":"Chemin d'éléments","eleTitle":"element %1"},"find":{"find":"Rechercher","findOptions":"Options de recherche","findWhat":"Rechercher:","matchCase":"Respecter la casse","matchCyclic":"Recherche cyclique","matchWord":"Mot entier","notFoundMsg":"Le texte indiqué est introuvable.","replace":"Remplacer","replaceAll":"Tout remplacer","replaceSuccessMsg":"%1 remplacements.","replaceWith":"Remplacer par:","title":"Rechercher et remplacer"},"fakeobjects":{"anchor":"Ancre","flash":"Animation Flash","hiddenfield":"Champ caché","iframe":"IFrame","unknown":"Objet inconnu"},"flash":{"access":"Accès au script","accessAlways":"Toujours","accessNever":"Jamais","accessSameDomain":"Même domaine","alignAbsBottom":"Bas absolu","alignAbsMiddle":"Milieu absolu","alignBaseline":"Bas du texte","alignTextTop":"Haut du texte","bgcolor":"Couleur de fond","chkFull":"Permettre le plein-écran","chkLoop":"Boucle","chkMenu":"Activer le menu Flash","chkPlay":"Lecture automatique","flashvars":"Variables pour Flash","hSpace":"Espacement horizontal","properties":"Propriétés de l'animation Flash","propertiesTab":"Propriétés","quality":"Qualité","qualityAutoHigh":"Haute auto","qualityAutoLow":"Basse auto","qualityBest":"Meilleur","qualityHigh":"Haute","qualityLow":"Basse","qualityMedium":"Moyenne","scale":"Échelle","scaleAll":"Afficher tout","scaleFit":"Ajuster aux dimensions","scaleNoBorder":"Sans bordure","title":"Propriétés de l'animation Flash","vSpace":"Espacement vertical","validateHSpace":"L'espacement horizontal doit être un entier.","validateSrc":"Veuillez saisir l'URL","validateVSpace":"L'espacement vertical doit être un entier.","windowMode":"Mode de fenêtre","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Fenêtre"},"font":{"fontSize":{"label":"Taille","voiceLabel":"Taille","panelTitle":"Taille"},"label":"Police","panelTitle":"Police","voiceLabel":"Police"},"forms":{"button":{"title":"Propriétés du bouton","text":"Texte (Valeur)","type":"Type","typeBtn":"Bouton","typeSbm":"Soumettre","typeRst":"Réinitialiser"},"checkboxAndRadio":{"checkboxTitle":"Propriétés de la case à cocher","radioTitle":"Propriétés du bouton radio","value":"Valeur","selected":"Sélectionné"},"form":{"title":"Propriétés du formulaire","menu":"Propriétés du formulaire","action":"Action","method":"Méthode","encoding":"Encodage"},"hidden":{"title":"Propriétés du champ caché","name":"Nom","value":"Valeur"},"select":{"title":"Propriétés du champ de sélection","selectInfo":"Info","opAvail":"Options disponibles","value":"Valeur","size":"Taille","lines":"lignes","chkMulti":"Permettre les sélections multiples","opText":"Texte","opValue":"Valeur","btnAdd":"Ajouter","btnModify":"Modifier","btnUp":"Monter","btnDown":"Descendre","btnSetValue":"Valeur sélectionnée","btnDelete":"Supprimer"},"textarea":{"title":"Propriétés de la zone de texte","cols":"Colonnes","rows":"Lignes"},"textfield":{"title":"Propriétés du champ texte","name":"Nom","value":"Valeur","charWidth":"Largeur de caractères","maxChars":"Nombre maximum de caractères","type":"Type","typeText":"Texte","typePass":"Mot de passe","typeEmail":"Courriel","typeSearch":"Recherche","typeTel":"Numéro de téléphone","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"En-tête 1","tag_h2":"En-tête 2","tag_h3":"En-tête 3","tag_h4":"En-tête 4","tag_h5":"En-tête 5","tag_h6":"En-tête 6","tag_p":"Normal","tag_pre":"Formaté"},"horizontalrule":{"toolbar":"Insérer un séparateur horizontale"},"iframe":{"border":"Afficher la bordure du cadre","noUrl":"Veuillez entre l'URL du IFrame","scrolling":"Activer les barres de défilement","title":"Propriétés du IFrame","toolbar":"IFrame"},"image":{"alertUrl":"Veuillez saisir l'URL de l'image","alt":"Texte alternatif","border":"Bordure","btnUpload":"Envoyer sur le serveur","button2Img":"Désirez-vous transformer l'image sélectionnée en image simple?","hSpace":"Espacement horizontal","img2Button":"Désirez-vous transformer l'image sélectionnée en bouton image?","infoTab":"Informations sur l'image","linkTab":"Lien","lockRatio":"Verrouiller les proportions","menu":"Propriétés de l'image","resetSize":"Taille originale","title":"Propriétés de l'image","titleButton":"Propriétés du bouton image","upload":"Téléverser","urlMissing":"L'URL de la source de l'image est manquant.","vSpace":"Espacement vertical","validateBorder":"La bordure doit être un entier.","validateHSpace":"L'espacement horizontal doit être un entier.","validateVSpace":"L'espacement vertical doit être un entier."},"indent":{"indent":"Augmenter le retrait","outdent":"Diminuer le retrait"},"smiley":{"options":"Options d'émoticônes","title":"Insérer un émoticône","toolbar":"Émoticône"},"justify":{"block":"Justifié","center":"Centré","left":"Aligner à gauche","right":"Aligner à Droite"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Touche d'accessibilité","advanced":"Avancé","advisoryContentType":"Type de contenu","advisoryTitle":"Description","anchor":{"toolbar":"Ancre","menu":"Modifier l'ancre","title":"Propriétés de l'ancre","name":"Nom de l'ancre","errorName":"Veuillez saisir le nom de l'ancre","remove":"Supprimer l'ancre"},"anchorId":"Par ID","anchorName":"Par nom","charset":"Encodage de la cible","cssClasses":"Classes CSS","emailAddress":"Courriel","emailBody":"Corps du message","emailSubject":"Objet du message","id":"ID","info":"Informations sur le lien","langCode":"Code de langue","langDir":"Sens d'écriture","langDirLTR":"De gauche à droite (LTR)","langDirRTL":"De droite à gauche (RTL)","menu":"Modifier le lien","name":"Nom","noAnchors":"(Pas d'ancre disponible dans le document)","noEmail":"Veuillez saisir le courriel","noUrl":"Veuillez saisir l'URL","other":"<autre>","popupDependent":"Dépendante (Netscape)","popupFeatures":"Caractéristiques de la fenêtre popup","popupFullScreen":"Plein écran (IE)","popupLeft":"Position de la gauche","popupLocationBar":"Barre d'adresse","popupMenuBar":"Barre de menu","popupResizable":"Redimensionnable","popupScrollBars":"Barres de défilement","popupStatusBar":"Barre d'état","popupToolbar":"Barre d'outils","popupTop":"Position à partir du haut","rel":"Relation","selectAnchor":"Sélectionner une ancre","styles":"Style","tabIndex":"Ordre de tabulation","target":"Destination","targetFrame":"<Cadre>","targetFrameName":"Nom du cadre de destination","targetPopup":"<fenêtre popup>","targetPopupName":"Nom de la fenêtre popup","title":"Lien","toAnchor":"Ancre dans cette page","toEmail":"Courriel","toUrl":"URL","toolbar":"Lien","type":"Type de lien","unlink":"Supprimer le lien","upload":"Téléverser"},"list":{"bulletedlist":"Liste à puces","numberedlist":"Liste numérotée"},"liststyle":{"armenian":"Numération arménienne","bulletedTitle":"Propriété de liste à puce","circle":"Cercle","decimal":"Décimal (1, 2, 3, etc.)","decimalLeadingZero":"Décimal avec zéro (01, 02, 03, etc.)","disc":"Disque","georgian":"Numération géorgienne (an, ban, gan, etc.)","lowerAlpha":"Alphabétique minuscule (a, b, c, d, e, etc.)","lowerGreek":"Grecque minuscule (alpha, beta, gamma, etc.)","lowerRoman":"Romain minuscule (i, ii, iii, iv, v, etc.)","none":"Aucun","notset":"<non défini>","numberedTitle":"Propriété de la liste numérotée","square":"Carré","start":"Début","type":"Type","upperAlpha":"Alphabétique majuscule (A, B, C, D, E, etc.)","upperRoman":"Romain Majuscule (I, II, III, IV, V, etc.)","validateStartNumber":"Le numéro de début de liste doit être un entier."},"magicline":{"title":"Insérer le paragraphe ici"},"maximize":{"maximize":"Maximizer","minimize":"Minimizer"},"newpage":{"toolbar":"Nouvelle page"},"pagebreak":{"alt":"Saut de page","toolbar":"Insérer un saut de page à l'impression"},"pastetext":{"button":"Coller comme texte","title":"Coller comme texte"},"pastefromword":{"confirmCleanup":"Le texte que vous tentez de coller semble provenir de Word. Désirez vous le nettoyer avant de coller?","error":"Il n'a pas été possible de nettoyer les données collées du à une erreur interne","title":"Coller de Word","toolbar":"Coller de Word"},"preview":{"preview":"Prévisualiser"},"print":{"toolbar":"Imprimer"},"removeformat":{"toolbar":"Supprimer le formatage"},"save":{"toolbar":"Sauvegarder"},"selectall":{"toolbar":"Sélectionner tout"},"showblocks":{"toolbar":"Afficher les blocs"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Option des caractères spéciaux","title":"Sélectionner un caractère spécial","toolbar":"Insérer un caractère spécial"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Styles","panelTitle":"Styles de formattage","panelTitle1":"Styles de block","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"table":{"border":"Taille de la bordure","caption":"Titre","cell":{"menu":"Cellule","insertBefore":"Insérer une cellule avant","insertAfter":"Insérer une cellule après","deleteCell":"Supprimer des cellules","merge":"Fusionner les cellules","mergeRight":"Fusionner à droite","mergeDown":"Fusionner en bas","splitHorizontal":"Scinder la cellule horizontalement","splitVertical":"Scinder la cellule verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Fusion de lignes","colSpan":"Fusion de colonnes","wordWrap":"Retour à la ligne","hAlign":"Alignement horizontal","vAlign":"Alignement vertical","alignBaseline":"Bas du texte","bgColor":"Couleur d'arrière plan","borderColor":"Couleur de bordure","data":"Données","header":"En-tête","yes":"Oui","no":"Non","invalidWidth":"La largeur de cellule doit être un nombre.","invalidHeight":"La hauteur de cellule doit être un nombre.","invalidRowSpan":"La fusion de lignes doit être un nombre entier.","invalidColSpan":"La fusion de colonnes doit être un nombre entier.","chooseColor":"Sélectionner"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement des cellules","column":{"menu":"Colonne","insertBefore":"Insérer une colonne avant","insertAfter":"Insérer une colonne après","deleteColumn":"Supprimer des colonnes"},"columns":"Colonnes","deleteTable":"Supprimer le tableau","headers":"En-têtes","headersBoth":"Les deux.","headersColumn":"Première colonne","headersNone":"Aucun","headersRow":"Première ligne","invalidBorder":"La taille de bordure doit être un nombre.","invalidCellPadding":"La marge interne des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement des cellules doit être un nombre positif.","invalidCols":"Le nombre de colonnes doit être supérieur à 0.","invalidHeight":"La hauteur du tableau doit être un nombre.","invalidRows":"Le nombre de lignes doit être supérieur à 0.","invalidWidth":"La largeur du tableau doit être un nombre.","menu":"Propriétés du tableau","row":{"menu":"Ligne","insertBefore":"Insérer une ligne avant","insertAfter":"Insérer une ligne après","deleteRow":"Supprimer des lignes"},"rows":"Lignes","summary":"Résumé","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"pourcentage","widthPx":"pixels","widthUnit":"unité de largeur"},"undo":{"redo":"Refaire","undo":"Annuler"},"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer tout","btnReplace":"Remplacer","btnReplaceAll":"Remplacer tout","btnUndo":"Annuler","changeTo":"Changer en","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Le Correcteur d'orthographe n'est pas installé. Souhaitez-vous le télécharger maintenant?","manyChanges":"Vérification d'orthographe terminée: %1 mots modifiés","noChanges":"Vérification d'orthographe terminée: Pas de modifications","noMispell":"Vérification d'orthographe terminée: pas d'erreur trouvée","noSuggestions":"- Pas de suggestion -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Pas dans le dictionnaire","oneChange":"Vérification d'orthographe terminée: Un mot modifié","progress":"Vérification d'orthographe en cours...","title":"Spell Check","toolbar":"Orthographe"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/fr.js b/wqflask/wqflask/static/packages/ckeditor/lang/fr.js
deleted file mode 100644
index 3392b2e2..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/fr.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['fr']={"editor":"Éditeur de Texte Enrichi","editorPanel":"Tableau de bord de l'éditeur de texte enrichi","common":{"editorHelp":"Appuyez sur ALT-0 pour l'aide","browseServer":"Explorer le serveur","url":"URL","protocol":"Protocole","upload":"Envoyer","uploadSubmit":"Envoyer sur le serveur","image":"Image","flash":"Flash","form":"Formulaire","checkbox":"Case à cocher","radio":"Bouton Radio","textField":"Champ texte","textarea":"Zone de texte","hiddenField":"Champ caché","button":"Bouton","select":"Liste déroulante","imageButton":"Bouton image","notSet":"<non défini>","id":"Id","name":"Nom","langDir":"Sens d'écriture","langDirLtr":"Gauche à droite (LTR)","langDirRtl":"Droite à gauche (RTL)","langCode":"Code de langue","longDescr":"URL de description longue (longdesc => malvoyant)","cssClass":"Classe CSS","advisoryTitle":"Description (title)","cssStyle":"Style","ok":"OK","cancel":"Annuler","close":"Fermer","preview":"Aperçu","resize":"Déplacer pour modifier la taille","generalTab":"Général","advancedTab":"Avancé","validateNumberFailed":"Cette valeur n'est pas un nombre.","confirmNewPage":"Les changements non sauvegardés seront perdus. Êtes-vous sûr de vouloir charger une nouvelle page?","confirmCancel":"Certaines options ont été modifiées. Êtes-vous sûr de vouloir fermer?","options":"Options","target":"Cible (Target)","targetNew":"Nouvelle fenêtre (_blank)","targetTop":"Fenêtre supérieure (_top)","targetSelf":"Même fenêtre (_self)","targetParent":"Fenêtre parent (_parent)","langDirLTR":"Gauche à Droite (LTR)","langDirRTL":"Droite à Gauche (RTL)","styles":"Style","cssClasses":"Classes de style","width":"Largeur","height":"Hauteur","align":"Alignement","alignLeft":"Gauche","alignRight":"Droite","alignCenter":"Centré","alignJustify":"Justifier","alignTop":"Haut","alignMiddle":"Milieu","alignBottom":"Bas","alignNone":"Aucun","invalidValue":"Valeur incorrecte.","invalidHeight":"La hauteur doit être un nombre.","invalidWidth":"La largeur doit être un nombre.","invalidCssLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"La valeur spécifiée pour le champ \"%1\" doit être un nombre positif avec ou sans unité de mesure HTML valide (px ou %).","invalidInlineStyle":"La valeur spécifiée pour le style inline doit être composée d'un ou plusieurs couples de valeur au format \"nom : valeur\", separés par des points-virgules.","cssLengthTooltip":"Entrer un nombre pour une valeur en pixels ou un nombre avec une unité de mesure CSS valide (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, Indisponible</span>"},"about":{"copy":"Copyright &copy; $1. Tous droits réservés.","dlgTitle":"À propos de CKEditor","help":"Consulter $1 pour l'aide.","moreInfo":"Pour les informations de licence, veuillez visiter notre site web:","title":"À propos de CKEditor","userGuide":"Guide de l'utilisateur CKEditor en anglais"},"basicstyles":{"bold":"Gras","italic":"Italique","strike":"Barré","subscript":"Indice","superscript":"Exposant","underline":"Souligné"},"bidi":{"ltr":"Direction du texte de la gauche vers la droite","rtl":"Direction du texte de la droite vers la gauche"},"blockquote":{"toolbar":"Citation"},"clipboard":{"copy":"Copier","copyError":"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement des opérations de copie. Veuillez utiliser le raccourci clavier (Ctrl/Cmd+C).","cut":"Couper","cutError":"Les paramètres de sécurité de votre navigateur ne permettent pas à l'éditeur d'exécuter automatiquement l'opération \"couper\". Veuillez utiliser le raccourci clavier (Ctrl/Cmd+X).","paste":"Coller","pasteArea":"Coller la zone","pasteMsg":"Veuillez coller le texte dans la zone suivante en utilisant le raccourci clavier (<strong>Ctrl/Cmd+V</strong>) et cliquez sur OK.","securityMsg":"A cause des paramètres de sécurité de votre navigateur, l'éditeur n'est pas en mesure d'accéder directement à vos données contenues dans le presse-papier. Vous devriez réessayer de coller les données dans la fenêtre.","title":"Coller"},"button":{"selectedLabel":"%1 (Sélectionné)"},"colorbutton":{"auto":"Automatique","bgColorTitle":"Couleur d'arrière plan","colors":{"000":"Noir","800000":"Marron","8B4513":"Brun moyen","2F4F4F":"Vert sombre","008080":"Canard","000080":"Bleu marine","4B0082":"Indigo","696969":"Gris foncé","B22222":"Rouge brique","A52A2A":"Brun","DAA520":"Or terni","006400":"Vert foncé","40E0D0":"Turquoise","0000CD":"Bleu royal","800080":"Pourpre","808080":"Gris","F00":"Rouge","FF8C00":"Orange foncé","FFD700":"Or","008000":"Vert","0FF":"Cyan","00F":"Bleu","EE82EE":"Violet","A9A9A9":"Gris moyen","FFA07A":"Saumon","FFA500":"Orange","FFFF00":"Jaune","00FF00":"Lime","AFEEEE":"Turquoise clair","ADD8E6":"Bleu clair","DDA0DD":"Prune","D3D3D3":"Gris clair","FFF0F5":"Fard Lavande","FAEBD7":"Blanc antique","FFFFE0":"Jaune clair","F0FFF0":"Honeydew","F0FFFF":"Azur","F0F8FF":"Bleu Alice","E6E6FA":"Lavande","FFF":"Blanc"},"more":"Plus de couleurs...","panelTitle":"Couleurs","textColorTitle":"Couleur de texte"},"colordialog":{"clear":"Effacer","highlight":"Détails","options":"Option des couleurs","selected":"Couleur choisie","title":"Choisir une couleur"},"templates":{"button":"Modèles","emptyListMsg":"(Aucun modèle disponible)","insertOption":"Remplacer le contenu actuel","options":"Options des modèles","selectPromptMsg":"Veuillez sélectionner le modèle pour l'ouvrir dans l'éditeur","title":"Contenu des modèles"},"contextmenu":{"options":"Options du menu contextuel"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Classe CSS","edit":"Éditer la DIV","inlineStyleInputLabel":"Style en ligne","langDirLTRLabel":"Gauche à droite (LTR)","langDirLabel":"Sens d'écriture","langDirRTLLabel":"Droite à gauche (RTL)","languageCodeInputLabel":"Code de langue","remove":"Enlever la DIV","styleSelectLabel":"Style","title":"Créer un container DIV","toolbar":"Créer un container DIV"},"toolbar":{"toolbarCollapse":"Enrouler la barre d'outils","toolbarExpand":"Dérouler la barre d'outils","toolbarGroups":{"document":"Document","clipboard":"Presse-papier/Défaire","editing":"Editer","forms":"Formulaires","basicstyles":"Styles de base","paragraph":"Paragraphe","links":"Liens","insert":"Insérer","styles":"Styles","colors":"Couleurs","tools":"Outils"},"toolbars":"Barre d'outils de l'éditeur"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 éléments"},"find":{"find":"Trouver","findOptions":"Options de recherche","findWhat":"Expression à trouver: ","matchCase":"Respecter la casse","matchCyclic":"Boucler","matchWord":"Mot entier uniquement","notFoundMsg":"Le texte spécifié ne peut être trouvé.","replace":"Remplacer","replaceAll":"Remplacer tout","replaceSuccessMsg":"%1 occurrence(s) replacée(s).","replaceWith":"Remplacer par: ","title":"Trouver et remplacer"},"fakeobjects":{"anchor":"Ancre","flash":"Animation Flash","hiddenfield":"Champ caché","iframe":"IFrame","unknown":"Objet inconnu"},"flash":{"access":"Accès aux scripts","accessAlways":"Toujours","accessNever":"Jamais","accessSameDomain":"Même domaine","alignAbsBottom":"Bas absolu","alignAbsMiddle":"Milieu absolu","alignBaseline":"Bas du texte","alignTextTop":"Haut du texte","bgcolor":"Couleur d'arrière-plan","chkFull":"Permettre le plein écran","chkLoop":"Boucle","chkMenu":"Activer le menu Flash","chkPlay":"Jouer automatiquement","flashvars":"Variables du Flash","hSpace":"Espacement horizontal","properties":"Propriétés du Flash","propertiesTab":"Propriétés","quality":"Qualité","qualityAutoHigh":"Haute Auto","qualityAutoLow":"Basse Auto","qualityBest":"Meilleure","qualityHigh":"Haute","qualityLow":"Basse","qualityMedium":"Moyenne","scale":"Echelle","scaleAll":"Afficher tout","scaleFit":"Taille d'origine","scaleNoBorder":"Pas de bordure","title":"Propriétés du Flash","vSpace":"Espacement vertical","validateHSpace":"L'espacement horizontal doit être un nombre.","validateSrc":"L'adresse ne doit pas être vide.","validateVSpace":"L'espacement vertical doit être un nombre.","windowMode":"Mode fenêtre","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Fenêtre"},"font":{"fontSize":{"label":"Taille","voiceLabel":"Taille de police","panelTitle":"Taille de police"},"label":"Police","panelTitle":"Style de police","voiceLabel":"Police"},"forms":{"button":{"title":"Propriétés du bouton","text":"Texte (Value)","type":"Type","typeBtn":"Bouton","typeSbm":"Validation (submit)","typeRst":"Remise à zéro"},"checkboxAndRadio":{"checkboxTitle":"Propriétés de la case à cocher","radioTitle":"Propriétés du bouton Radio","value":"Valeur","selected":"Sélectionné"},"form":{"title":"Propriétés du formulaire","menu":"Propriétés du formulaire","action":"Action","method":"Méthode","encoding":"Encodage"},"hidden":{"title":"Propriétés du champ caché","name":"Nom","value":"Valeur"},"select":{"title":"Propriétés du menu déroulant","selectInfo":"Informations sur le menu déroulant","opAvail":"Options disponibles","value":"Valeur","size":"Taille","lines":"Lignes","chkMulti":"Permettre les sélections multiples","opText":"Texte","opValue":"Valeur","btnAdd":"Ajouter","btnModify":"Modifier","btnUp":"Haut","btnDown":"Bas","btnSetValue":"Définir comme valeur sélectionnée","btnDelete":"Supprimer"},"textarea":{"title":"Propriétés de la zone de texte","cols":"Colonnes","rows":"Lignes"},"textfield":{"title":"Propriétés du champ texte","name":"Nom","value":"Valeur","charWidth":"Taille des caractères","maxChars":"Nombre maximum de caractères","type":"Type","typeText":"Texte","typePass":"Mot de passe","typeEmail":"E-mail","typeSearch":"Rechercher","typeTel":"Numéro de téléphone","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Format de paragraphe","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Titre 1","tag_h2":"Titre 2","tag_h3":"Titre 3","tag_h4":"Titre 4","tag_h5":"Titre 5","tag_h6":"Titre 6","tag_p":"Normal","tag_pre":"Formaté"},"horizontalrule":{"toolbar":"Ligne horizontale"},"iframe":{"border":"Afficher une bordure de la IFrame","noUrl":"Veuillez entrer l'adresse du lien de la IFrame","scrolling":"Permettre à la barre de défilement","title":"Propriétés de la IFrame","toolbar":"IFrame"},"image":{"alertUrl":"Veuillez entrer l'adresse de l'image","alt":"Texte de remplacement","border":"Bordure","btnUpload":"Envoyer sur le serveur","button2Img":"Voulez-vous transformer le bouton image sélectionné en simple image?","hSpace":"Espacement horizontal","img2Button":"Voulez-vous transformer l'image en bouton image?","infoTab":"Informations sur l'image","linkTab":"Lien","lockRatio":"Conserver les proportions","menu":"Propriétés de l'image","resetSize":"Taille d'origine","title":"Propriétés de l'image","titleButton":"Propriétés du bouton image","upload":"Envoyer","urlMissing":"L'adresse source de l'image est manquante.","vSpace":"Espacement vertical","validateBorder":"Bordure doit être un entier.","validateHSpace":"HSpace doit être un entier.","validateVSpace":"VSpace doit être un entier."},"indent":{"indent":"Augmenter le retrait (tabulation)","outdent":"Diminuer le retrait (tabulation)"},"smiley":{"options":"Options des émoticones","title":"Insérer un émoticone","toolbar":"Émoticones"},"justify":{"block":"Justifier","center":"Centrer","left":"Aligner à gauche","right":"Aligner à droite"},"language":{"button":"Définir la langue","remove":"Supprimer la langue"},"link":{"acccessKey":"Touche d'accessibilité","advanced":"Avancé","advisoryContentType":"Type de contenu (ex: text/html)","advisoryTitle":"Description (title)","anchor":{"toolbar":"Ancre","menu":"Editer l'ancre","title":"Propriétés de l'ancre","name":"Nom de l'ancre","errorName":"Veuillez entrer le nom de l'ancre.","remove":"Supprimer l'ancre"},"anchorId":"Par ID d'élément","anchorName":"Par nom d'ancre","charset":"Charset de la cible","cssClasses":"Classe CSS","emailAddress":"Adresse E-Mail","emailBody":"Corps du message","emailSubject":"Sujet du message","id":"Id","info":"Infos sur le lien","langCode":"Code de langue","langDir":"Sens d'écriture","langDirLTR":"Gauche à droite","langDirRTL":"Droite à gauche","menu":"Editer le lien","name":"Nom","noAnchors":"(Aucune ancre disponible dans ce document)","noEmail":"Veuillez entrer l'adresse e-mail","noUrl":"Veuillez entrer l'adresse du lien","other":"<autre>","popupDependent":"Dépendante (Netscape)","popupFeatures":"Options de la fenêtre popup","popupFullScreen":"Plein écran (IE)","popupLeft":"Position gauche","popupLocationBar":"Barre d'adresse","popupMenuBar":"Barre de menu","popupResizable":"Redimensionnable","popupScrollBars":"Barres de défilement","popupStatusBar":"Barre de status","popupToolbar":"Barre d'outils","popupTop":"Position haute","rel":"Relation","selectAnchor":"Sélectionner l'ancre","styles":"Style","tabIndex":"Index de tabulation","target":"Cible","targetFrame":"<cadre>","targetFrameName":"Nom du Cadre destination","targetPopup":"<fenêtre popup>","targetPopupName":"Nom de la fenêtre popup","title":"Lien","toAnchor":"Transformer le lien en ancre dans le texte","toEmail":"E-mail","toUrl":"URL","toolbar":"Lien","type":"Type de lien","unlink":"Supprimer le lien","upload":"Envoyer"},"list":{"bulletedlist":"Insérer/Supprimer la liste à puces","numberedlist":"Insérer/Supprimer la liste numérotée"},"liststyle":{"armenian":"Numération arménienne","bulletedTitle":"Propriétés de la liste à puces","circle":"Cercle","decimal":"Décimal (1, 2, 3, etc.)","decimalLeadingZero":"Décimal précédé par un 0 (01, 02, 03, etc.)","disc":"Disque","georgian":"Numération géorgienne (an, ban, gan, etc.)","lowerAlpha":"Alphabétique minuscules (a, b, c, d, e, etc.)","lowerGreek":"Grec minuscule (alpha, beta, gamma, etc.)","lowerRoman":"Nombres romains minuscules (i, ii, iii, iv, v, etc.)","none":"Aucun","notset":"<Non défini>","numberedTitle":"Propriétés de la liste numérotée","square":"Carré","start":"Début","type":"Type","upperAlpha":"Alphabétique majuscules (A, B, C, D, E, etc.)","upperRoman":"Nombres romains majuscules (I, II, III, IV, V, etc.)","validateStartNumber":"Le premier élément de la liste doit être un nombre entier."},"magicline":{"title":"Insérez un paragraphe ici"},"maximize":{"maximize":"Agrandir","minimize":"Minimiser"},"newpage":{"toolbar":"Nouvelle page"},"pagebreak":{"alt":"Saut de page","toolbar":"Saut de page"},"pastetext":{"button":"Coller comme texte sans mise en forme","title":"Coller comme texte sans mise en forme"},"pastefromword":{"confirmCleanup":"Le texte à coller semble provenir de Word. Désirez-vous le nettoyer avant de coller?","error":"Il n'a pas été possible de nettoyer les données collées à la suite d'une erreur interne.","title":"Coller depuis Word","toolbar":"Coller depuis Word"},"preview":{"preview":"Aperçu"},"print":{"toolbar":"Imprimer"},"removeformat":{"toolbar":"Supprimer la mise en forme"},"save":{"toolbar":"Enregistrer"},"selectall":{"toolbar":"Tout sélectionner"},"showblocks":{"toolbar":"Afficher les blocs"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Options des caractères spéciaux","title":"Sélectionnez un caractère","toolbar":"Insérer un caractère spécial"},"scayt":{"btn_about":"A propos de SCAYT","btn_dictionaries":"Dictionnaires","btn_disable":"Désactiver SCAYT","btn_enable":"Activer SCAYT","btn_langs":"Langues","btn_options":"Options","text_title":""},"stylescombo":{"label":"Styles","panelTitle":"Styles de mise en page","panelTitle1":"Styles de blocs","panelTitle2":"Styles en ligne","panelTitle3":"Styles d'objet"},"table":{"border":"Taille de la bordure","caption":"Titre du tableau","cell":{"menu":"Cellule","insertBefore":"Insérer une cellule avant","insertAfter":"Insérer une cellule après","deleteCell":"Supprimer les cellules","merge":"Fusionner les cellules","mergeRight":"Fusionner à droite","mergeDown":"Fusionner en bas","splitHorizontal":"Fractionner horizontalement","splitVertical":"Fractionner verticalement","title":"Propriétés de la cellule","cellType":"Type de cellule","rowSpan":"Fusion de lignes","colSpan":"Fusion de colonnes","wordWrap":"Césure","hAlign":"Alignement Horizontal","vAlign":"Alignement Vertical","alignBaseline":"Bas du texte","bgColor":"Couleur d'arrière-plan","borderColor":"Couleur de Bordure","data":"Données","header":"Entête","yes":"Oui","no":"Non","invalidWidth":"La Largeur de Cellule doit être un nombre.","invalidHeight":"La Hauteur de Cellule doit être un nombre.","invalidRowSpan":"La fusion de lignes doit être un nombre entier.","invalidColSpan":"La fusion de colonnes doit être un nombre entier.","chooseColor":"Choisissez"},"cellPad":"Marge interne des cellules","cellSpace":"Espacement des cellules","column":{"menu":"Colonnes","insertBefore":"Insérer une colonne avant","insertAfter":"Insérer une colonne après","deleteColumn":"Supprimer les colonnes"},"columns":"Colonnes","deleteTable":"Supprimer le tableau","headers":"En-Têtes","headersBoth":"Les deux","headersColumn":"Première colonne","headersNone":"Aucunes","headersRow":"Première ligne","invalidBorder":"La taille de la bordure doit être un nombre.","invalidCellPadding":"La marge intérieure des cellules doit être un nombre positif.","invalidCellSpacing":"L'espacement des cellules doit être un nombre positif.","invalidCols":"Le nombre de colonnes doit être supérieur à 0.","invalidHeight":"La hauteur du tableau doit être un nombre.","invalidRows":"Le nombre de lignes doit être supérieur à 0.","invalidWidth":"La largeur du tableau doit être un nombre.","menu":"Propriétés du tableau","row":{"menu":"Ligne","insertBefore":"Insérer une ligne avant","insertAfter":"Insérer une ligne après","deleteRow":"Supprimer les lignes"},"rows":"Lignes","summary":"Résumé (description)","title":"Propriétés du tableau","toolbar":"Tableau","widthPc":"% pourcents","widthPx":"pixels","widthUnit":"unité de largeur"},"undo":{"redo":"Rétablir","undo":"Annuler"},"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer tout","btnReplace":"Remplacer","btnReplaceAll":"Remplacer tout","btnUndo":"Annuler","changeTo":"Modifier pour","errorLoading":"Erreur du chargement du service depuis l'hôte : %s.","ieSpellDownload":"La vérification d'orthographe n'est pas installée. Voulez-vous la télécharger maintenant?","manyChanges":"Vérification de l'orthographe terminée : %1 mots corrigés.","noChanges":"Vérification de l'orthographe terminée : Aucun mot corrigé.","noMispell":"Vérification de l'orthographe terminée : aucune erreur trouvée.","noSuggestions":"- Aucune suggestion -","notAvailable":"Désolé, le service est indisponible actuellement.","notInDic":"N'existe pas dans le dictionnaire.","oneChange":"Vérification de l'orthographe terminée : Un seul mot corrigé.","progress":"Vérification de l'orthographe en cours...","title":"Vérifier l'orthographe","toolbar":"Vérifier l'orthographe"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/gl.js b/wqflask/wqflask/static/packages/ckeditor/lang/gl.js
deleted file mode 100644
index 3ce91007..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/gl.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['gl']={"editor":"Editor de texto mellorado","editorPanel":"Panel do editor de texto mellorado","common":{"editorHelp":"Prema ALT 0 para obter axuda","browseServer":"Examinar o servidor","url":"URL","protocol":"Protocolo","upload":"Enviar","uploadSubmit":"Enviar ao servidor","image":"Imaxe","flash":"Flash","form":"Formulario","checkbox":"Caixa de selección","radio":"Botón de opción","textField":"Campo de texto","textarea":"Ãrea de texto","hiddenField":"Campo agochado","button":"Botón","select":"Campo de selección","imageButton":"Botón de imaxe","notSet":"<sen estabelecer>","id":"ID","name":"Nome","langDir":"Dirección de escritura do idioma","langDirLtr":"Esquerda a dereita (LTR)","langDirRtl":"Dereita a esquerda (RTL)","langCode":"Código do idioma","longDescr":"Descrición completa do URL","cssClass":"Clases da folla de estilos","advisoryTitle":"Título","cssStyle":"Estilo","ok":"Aceptar","cancel":"Cancelar","close":"Pechar","preview":"Vista previa","resize":"Redimensionar","generalTab":"Xeral","advancedTab":"Avanzado","validateNumberFailed":"Este valor non é un número.","confirmNewPage":"Calquera cambio que non gardara neste contido perderase.\r\nConfirma que quere cargar unha páxina nova?","confirmCancel":"Algunhas das opcións foron cambiadas.\r\nConfirma que quere pechar o diálogo?","options":"Opcións","target":"Destino","targetNew":"Nova xanela (_blank)","targetTop":"Xanela principal (_top)","targetSelf":"Mesma xanela (_self)","targetParent":"Xanela superior (_parent)","langDirLTR":"Esquerda a dereita (LTR)","langDirRTL":"Dereita a esquerda (RTL)","styles":"Estilo","cssClasses":"Clases da folla de estilos","width":"Largo","height":"Alto","align":"Aliñamento","alignLeft":"Esquerda","alignRight":"Dereita","alignCenter":"Centro","alignJustify":"Xustificado","alignTop":"Arriba","alignMiddle":"Centro","alignBottom":"Abaixo","alignNone":"None","invalidValue":"Valor incorrecto.","invalidHeight":"O alto debe ser un número.","invalidWidth":"O largo debe ser un número.","invalidCssLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo «%1» debe ser un número positivo con ou sen unha unidade de medida HTML correcta (px ou %).","invalidInlineStyle":"O valor especificado no estilo en liña debe consistir nunha ou máis tuplas co formato «nome : valor», separadas por punto e coma.","cssLengthTooltip":"Escriba un número para o valor en píxeles ou un número cunha unidade CSS correcta (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, non dispoñíbel</span>"},"about":{"copy":"Copyright &copy; $1. Todos os dereitos reservados.","dlgTitle":"Sobre o CKEditor","help":"Consulte $1 para obter axuda.","moreInfo":"Para obter información sobre a licenza, visite o noso sitio web:","title":"Sobre o CKEditor","userGuide":"Guía do usuario do CKEditor"},"basicstyles":{"bold":"Negra","italic":"Cursiva","strike":"Riscado","subscript":"Subíndice","superscript":"Superíndice","underline":"Subliñado"},"bidi":{"ltr":"Dirección do texto de esquerda a dereita","rtl":"Dirección do texto de dereita a esquerda"},"blockquote":{"toolbar":"Cita"},"clipboard":{"copy":"Copiar","copyError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de copia. Use o teclado para iso (Ctrl/Cmd+C).","cut":"Cortar","cutError":"Os axustes de seguranza do seu navegador non permiten que o editor realice automaticamente as tarefas de corte. Use o teclado para iso (Ctrl/Cmd+X).","paste":"Pegar","pasteArea":"Zona de pegado","pasteMsg":"Pegue dentro do seguinte cadro usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e prema en Aceptar","securityMsg":"Por mor da configuración de seguranza do seu navegador, o editor non ten acceso ao portapapeis. É necesario pegalo novamente nesta xanela.","title":"Pegar"},"button":{"selectedLabel":"%1 (seleccionado)"},"colorbutton":{"auto":"Automático","bgColorTitle":"Cor do fondo","colors":{"000":"Negro","800000":"Marrón escuro","8B4513":"Ocre","2F4F4F":"Pizarra escuro","008080":"Verde azulado","000080":"Azul mariño","4B0082":"Ãndigo","696969":"Gris escuro","B22222":"Ladrillo","A52A2A":"Marrón","DAA520":"Dourado escuro","006400":"Verde escuro","40E0D0":"Turquesa","0000CD":"Azul medio","800080":"Púrpura","808080":"Gris","F00":"Vermello","FF8C00":"Laranxa escuro","FFD700":"Dourado","008000":"Verde","0FF":"Cian","00F":"Azul","EE82EE":"Violeta","A9A9A9":"Gris medio","FFA07A":"Salmón claro","FFA500":"Laranxa","FFFF00":"Amarelo","00FF00":"Lima","AFEEEE":"Turquesa pálido","ADD8E6":"Azul claro","DDA0DD":"Violeta pálido","D3D3D3":"Verde claro","FFF0F5":"Lavanda vermello","FAEBD7":"Branco antigo","FFFFE0":"Amarelo claro","F0FFF0":"Mel","F0FFFF":"Azul celeste","F0F8FF":"Azul pálido","E6E6FA":"Lavanda","FFF":"Branco"},"more":"Máis cores...","panelTitle":"Cores","textColorTitle":"Cor do texto"},"colordialog":{"clear":"Limpar","highlight":"Resaltar","options":"Opcións de cor","selected":"Cor seleccionado","title":"Seleccione unha cor"},"templates":{"button":"Modelos","emptyListMsg":"(Non hai modelos definidos)","insertOption":"Substituír o contido actual","options":"Opcións de modelos","selectPromptMsg":"Seleccione o modelo a abrir no editor","title":"Modelos de contido"},"contextmenu":{"options":"Opcións do menú contextual"},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"Título","cssClassInputLabel":"Clases da folla de estilos","edit":"Editar Div","inlineStyleInputLabel":"Estilo de liña","langDirLTRLabel":"Esquerda a dereita (LTR)","langDirLabel":"Dirección de escritura do idioma","langDirRTLLabel":"Dereita a esquerda (RTL)","languageCodeInputLabel":"Código do idioma","remove":"Retirar Div","styleSelectLabel":"Estilo","title":"Crear un contedor Div","toolbar":"Crear un contedor Div"},"toolbar":{"toolbarCollapse":"Contraer a barra de ferramentas","toolbarExpand":"Expandir a barra de ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Portapapeis/desfacer","editing":"Edición","forms":"Formularios","basicstyles":"Estilos básicos","paragraph":"Paragrafo","links":"Ligazóns","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Barras de ferramentas do editor"},"elementspath":{"eleLabel":"Ruta dos elementos","eleTitle":"Elemento %1"},"find":{"find":"Buscar","findOptions":"Buscar opcións","findWhat":"Texto a buscar:","matchCase":"Coincidir Mai./min.","matchCyclic":"Coincidencia cíclica","matchWord":"Coincidencia coa palabra completa","notFoundMsg":"Non se atopou o texto indicado.","replace":"Substituir","replaceAll":"Substituír todo","replaceSuccessMsg":"%1 concorrencia(s) substituída(s).","replaceWith":"Substituír con:","title":"Buscar e substituír"},"fakeobjects":{"anchor":"Ancoraxe","flash":"Animación «Flash»","hiddenfield":"Campo agochado","iframe":"IFrame","unknown":"Obxecto descoñecido"},"flash":{"access":"Acceso de scripts","accessAlways":"Sempre","accessNever":"Nunca","accessSameDomain":"Mesmo dominio","alignAbsBottom":"Abs Inferior","alignAbsMiddle":"Abs centro","alignBaseline":"Liña de base","alignTextTop":"Tope do texto","bgcolor":"Cor do fondo","chkFull":"Permitir pantalla completa","chkLoop":"Repetir","chkMenu":"Activar o menú do «Flash»","chkPlay":"Reprodución auomática","flashvars":"Opcións do «Flash»","hSpace":"Esp. Horiz.","properties":"Propiedades do «Flash»","propertiesTab":"Propiedades","quality":"Calidade","qualityAutoHigh":"Alta, automática","qualityAutoLow":"Baixa, automática","qualityBest":"A mellor","qualityHigh":"Alta","qualityLow":"Baixa","qualityMedium":"Media","scale":"Escalar","scaleAll":"Amosar todo","scaleFit":"Encaixar axustando","scaleNoBorder":"Sen bordo","title":"Propiedades do «Flash»","vSpace":"Esp.Vert.","validateHSpace":"O espazado horizontal debe ser un número.","validateSrc":"O URL non pode estar baleiro.","validateVSpace":"O espazado vertical debe ser un número.","windowMode":"Modo da xanela","windowModeOpaque":"Opaca","windowModeTransparent":"Transparente","windowModeWindow":"Xanela"},"font":{"fontSize":{"label":"Tamaño","voiceLabel":"Tamaño da letra","panelTitle":"Tamaño da letra"},"label":"Tipo de letra","panelTitle":"Nome do tipo de letra","voiceLabel":"Tipo de letra"},"forms":{"button":{"title":"Propiedades do botón","text":"Texto (Valor)","type":"Tipo","typeBtn":"Botón","typeSbm":"Enviar","typeRst":"Restabelever"},"checkboxAndRadio":{"checkboxTitle":"Propiedades da caixa de selección","radioTitle":"Propiedades do botón de opción","value":"Valor","selected":"Seleccionado"},"form":{"title":"Propiedades do formulario","menu":"Propiedades do formulario","action":"Acción","method":"Método","encoding":"Codificación"},"hidden":{"title":"Propiedades do campo agochado","name":"Nome","value":"Valor"},"select":{"title":"Propiedades do campo de selección","selectInfo":"Información","opAvail":"Opcións dispoñíbeis","value":"Valor","size":"Tamaño","lines":"liñas","chkMulti":"Permitir múltiplas seleccións","opText":"Texto","opValue":"Valor","btnAdd":"Engadir","btnModify":"Modificar","btnUp":"Subir","btnDown":"Baixar","btnSetValue":"Estabelecer como valor seleccionado","btnDelete":"Eliminar"},"textarea":{"title":"Propiedades da área de texto","cols":"Columnas","rows":"Filas"},"textfield":{"title":"Propiedades do campo de texto","name":"Nome","value":"Valor","charWidth":"Largo do carácter","maxChars":"Núm. máximo de caracteres","type":"Tipo","typeText":"Texto","typePass":"Contrasinal","typeEmail":"Correo","typeSearch":"Buscar","typeTel":"Número de teléfono","typeUrl":"URL"}},"format":{"label":"Formato","panelTitle":"Formato do parágrafo","tag_address":"Enderezo","tag_div":"Normal (DIV)","tag_h1":"Enacabezado 1","tag_h2":"Encabezado 2","tag_h3":"Encabezado 3","tag_h4":"Encabezado 4","tag_h5":"Encabezado 5","tag_h6":"Encabezado 6","tag_p":"Normal","tag_pre":"Formatado"},"horizontalrule":{"toolbar":"Inserir unha liña horizontal"},"iframe":{"border":"Amosar o bordo do marco","noUrl":"Escriba o enderezo do iframe","scrolling":"Activar as barras de desprazamento","title":"Propiedades do iFrame","toolbar":"IFrame"},"image":{"alertUrl":"Escriba o URL da imaxe","alt":"Texto alternativo","border":"Bordo","btnUpload":"Enviar ao servidor","button2Img":"Quere converter o botón da imaxe seleccionada nunha imaxe sinxela?","hSpace":"Esp.Horiz.","img2Button":"Quere converter a imaxe seleccionada nun botón de imaxe?","infoTab":"Información da imaxe","linkTab":"Ligazón","lockRatio":"Proporcional","menu":"Propiedades da imaxe","resetSize":"Tamaño orixinal","title":"Propiedades da imaxe","titleButton":"Propiedades do botón de imaxe","upload":"Cargar","urlMissing":"Non se atopa o URL da imaxe.","vSpace":"Esp.Vert.","validateBorder":"O bordo debe ser un número.","validateHSpace":"O espazado horizontal debe ser un número.","validateVSpace":"O espazado vertical debe ser un número."},"indent":{"indent":"Aumentar a sangría","outdent":"Reducir a sangría"},"smiley":{"options":"Opcións de emoticonas","title":"Inserir unha emoticona","toolbar":"Emoticona"},"justify":{"block":"Xustificado","center":"Centrado","left":"Aliñar á esquerda","right":"Aliñar á dereita"},"language":{"button":"Estabelezer o idioma","remove":"Retirar o idioma"},"link":{"acccessKey":"Chave de acceso","advanced":"Avanzado","advisoryContentType":"Tipo de contido informativo","advisoryTitle":"Título","anchor":{"toolbar":"Ancoraxe","menu":"Editar a ancoraxe","title":"Propiedades da ancoraxe","name":"Nome da ancoraxe","errorName":"Escriba o nome da ancoraxe","remove":"Retirar a ancoraxe"},"anchorId":"Polo ID do elemento","anchorName":"Polo nome da ancoraxe","charset":"Codificación do recurso ligado","cssClasses":"Clases da folla de estilos","emailAddress":"Enderezo de correo","emailBody":"Corpo da mensaxe","emailSubject":"Asunto da mensaxe","id":"ID","info":"Información da ligazón","langCode":"Código do idioma","langDir":"Dirección de escritura do idioma","langDirLTR":"Esquerda a dereita (LTR)","langDirRTL":"Dereita a esquerda (RTL)","menu":"Editar a ligazón","name":"Nome","noAnchors":"(Non hai ancoraxes dispoñíbeis no documento)","noEmail":"Escriba o enderezo de correo","noUrl":"Escriba a ligazón URL","other":"<outro>","popupDependent":"Dependente (Netscape)","popupFeatures":"Características da xanela emerxente","popupFullScreen":"Pantalla completa (IE)","popupLeft":"Posición esquerda","popupLocationBar":"Barra de localización","popupMenuBar":"Barra do menú","popupResizable":"Redimensionábel","popupScrollBars":"Barras de desprazamento","popupStatusBar":"Barra de estado","popupToolbar":"Barra de ferramentas","popupTop":"Posición superior","rel":"Relación","selectAnchor":"Seleccionar unha ancoraxe","styles":"Estilo","tabIndex":"Ãndice de tabulación","target":"Destino","targetFrame":"<marco>","targetFrameName":"Nome do marco de destino","targetPopup":"<xanela emerxente>","targetPopupName":"Nome da xanela emerxente","title":"Ligazón","toAnchor":"Ligar coa ancoraxe no testo","toEmail":"Correo","toUrl":"URL","toolbar":"Ligazón","type":"Tipo de ligazón","unlink":"Eliminar a ligazón","upload":"Enviar"},"list":{"bulletedlist":"Inserir/retirar lista viñeteada","numberedlist":"Inserir/retirar lista numerada"},"liststyle":{"armenian":"Numeración armenia","bulletedTitle":"Propiedades da lista viñeteada","circle":"Circulo","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal con cero á esquerda (01, 02, 03, etc.)","disc":"Disc","georgian":"Numeración xeorxiana (an, ban, gan, etc.)","lowerAlpha":"Alfabeto en minúsculas (a, b, c, d, e, etc.)","lowerGreek":"Grego en minúsculas (alpha, beta, gamma, etc.)","lowerRoman":"Números romanos en minúsculas (i, ii, iii, iv, v, etc.)","none":"Ningún","notset":"<sen estabelecer>","numberedTitle":"Propiedades da lista numerada","square":"Cadrado","start":"Inicio","type":"Tipo","upperAlpha":"Alfabeto en maiúsculas (A, B, C, D, E, etc.)","upperRoman":"Números romanos en maiúsculas (I, II, III, IV, V, etc.)","validateStartNumber":"O número de inicio da lista debe ser un número enteiro."},"magicline":{"title":"Inserir aquí o parágrafo"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"newpage":{"toolbar":"Páxina nova"},"pagebreak":{"alt":"Quebra de páxina","toolbar":"Inserir quebra de páxina"},"pastetext":{"button":"Pegar como texto simple","title":"Pegar como texto simple"},"pastefromword":{"confirmCleanup":"O texto que quere pegar semella ser copiado desde o Word. Quere depuralo antes de pegalo?","error":"Non foi posíbel depurar os datos pegados por mor dun erro interno","title":"Pegar desde Word","toolbar":"Pegar desde Word"},"preview":{"preview":"Vista previa"},"print":{"toolbar":"Imprimir"},"removeformat":{"toolbar":"Retirar o formato"},"save":{"toolbar":"Gardar"},"selectall":{"toolbar":"Seleccionar todo"},"showblocks":{"toolbar":"Amosar os bloques"},"sourcearea":{"toolbar":"Orixe"},"specialchar":{"options":"Opcións de caracteres especiais","title":"Seleccione un carácter especial","toolbar":"Inserir un carácter especial"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de formatando","panelTitle1":"Estilos de bloque","panelTitle2":"Estilos de carácter","panelTitle3":"Estilos de obxecto"},"table":{"border":"Tamaño do bordo","caption":"Título","cell":{"menu":"Cela","insertBefore":"Inserir a cela á esquerda","insertAfter":"Inserir a cela á dereita","deleteCell":"Eliminar celas","merge":"Combinar celas","mergeRight":"Combinar á dereita","mergeDown":"Combinar cara abaixo","splitHorizontal":"Dividir a cela en horizontal","splitVertical":"Dividir a cela en vertical","title":"Propiedades da cela","cellType":"Tipo de cela","rowSpan":"Expandir filas","colSpan":"Expandir columnas","wordWrap":"Axustar ao contido","hAlign":"Aliñación horizontal","vAlign":"Aliñación vertical","alignBaseline":"Liña de base","bgColor":"Cor do fondo","borderColor":"Cor do bordo","data":"Datos","header":"Cabeceira","yes":"Si","no":"Non","invalidWidth":"O largo da cela debe ser un número.","invalidHeight":"O alto da cela debe ser un número.","invalidRowSpan":"A expansión de filas debe ser un número enteiro.","invalidColSpan":"A expansión de columnas debe ser un número enteiro.","chooseColor":"Escoller"},"cellPad":"Marxe interior da cela","cellSpace":"Marxe entre celas","column":{"menu":"Columna","insertBefore":"Inserir a columna á esquerda","insertAfter":"Inserir a columna á dereita","deleteColumn":"Borrar Columnas"},"columns":"Columnas","deleteTable":"Borrar Táboa","headers":"Cabeceiras","headersBoth":"Ambas","headersColumn":"Primeira columna","headersNone":"Ningún","headersRow":"Primeira fila","invalidBorder":"O tamaño do bordo debe ser un número.","invalidCellPadding":"A marxe interior debe ser un número positivo.","invalidCellSpacing":"A marxe entre celas debe ser un número positivo.","invalidCols":"O número de columnas debe ser un número maior que 0.","invalidHeight":"O alto da táboa debe ser un número.","invalidRows":"O número de filas debe ser un número maior que 0","invalidWidth":"O largo da táboa debe ser un número.","menu":"Propiedades da táboa","row":{"menu":"Fila","insertBefore":"Inserir a fila por riba","insertAfter":"Inserir a fila por baixo","deleteRow":"Eliminar filas"},"rows":"Filas","summary":"Resumo","title":"Propiedades da táboa","toolbar":"Taboa","widthPc":"porcentaxe","widthPx":"píxeles","widthUnit":"unidade do largo"},"undo":{"redo":"Refacer","undo":"Desfacer"},"wsc":{"btnIgnore":"Ignorar","btnIgnoreAll":"Ignorar Todas","btnReplace":"Substituir","btnReplaceAll":"Substituir Todas","btnUndo":"Desfacer","changeTo":"Cambiar a","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"O corrector ortográfico non está instalado. ¿Quere descargalo agora?","manyChanges":"Corrección ortográfica rematada: %1 verbas substituidas","noChanges":"Corrección ortográfica rematada: Non se substituiu nengunha verba","noMispell":"Corrección ortográfica rematada: Non se atoparon erros","noSuggestions":"- Sen candidatos -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Non está no diccionario","oneChange":"Corrección ortográfica rematada: Unha verba substituida","progress":"Corrección ortográfica en progreso...","title":"Spell Check","toolbar":"Corrección Ortográfica"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/gu.js b/wqflask/wqflask/static/packages/ckeditor/lang/gu.js
deleted file mode 100644
index 309ce06f..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/gu.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['gu']={"editor":"રીચ ટેકà«àª·à«àª¤à« àªàª¡à«€àªŸàª°","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"પà«àª°à«‡àª¸ ALT 0 મદદ માટ","browseServer":"સરà«àªµàª° બà«àª°àª¾àª‰àª કરો","url":"URL","protocol":"પà«àª°à«‹àªŸà«‹àª•à«‰àª²","upload":"અપલોડ","uploadSubmit":"આ સરà«àªµàª°àª¨à«‡ મોકલવà«àª‚","image":"ચિતà«àª°","flash":"ફà«àª²à«…શ","form":"ફૉરà«àª®/પતà«àª°àª•","checkbox":"ચેક બોકà«àª¸","radio":"રેડિઓ બટન","textField":"ટેકà«àª¸à«àªŸ ફીલà«àª¡, શબà«àª¦ કà«àª·à«‡àª¤à«àª°","textarea":"ટેકà«àª¸à«àªŸ àªàª°àª¿àª†, શબà«àª¦ વિસà«àª¤àª¾àª°","hiddenField":"ગà«àªªà«àª¤ કà«àª·à«‡àª¤à«àª°","button":"બટન","select":"પસંદગી કà«àª·à«‡àª¤à«àª°","imageButton":"ચિતà«àª° બટન","notSet":"<સેટ નથી>","id":"Id","name":"નામ","langDir":"ભાષા લેખવાની પદà«àª§àª¤àª¿","langDirLtr":"ડાબે થી જમણે (LTR)","langDirRtl":"જમણે થી ડાબે (RTL)","langCode":"ભાષા કોડ","longDescr":"વધારે માહિતી માટે URL","cssClass":"સà«àªŸàª¾àª‡àª²-શીટ કà«àª²àª¾àª¸","advisoryTitle":"મà«àª–à«àª¯ મથાળà«àª‚","cssStyle":"સà«àªŸàª¾àª‡àª²","ok":"ઠીક છે","cancel":"રદ કરવà«àª‚","close":"બંધ કરવà«àª‚","preview":"જોવà«àª‚","resize":"ખેંચી ને યોગà«àª¯ કરવà«àª‚","generalTab":"જનરલ","advancedTab":"અડà«àªµàª¾àª¨à«àª¸àª¡","validateNumberFailed":"આ રકમ આકડો નથી.","confirmNewPage":"સવે કારà«àª¯ વગરનà«àª‚ ફકરો ખોવાઈ જશે. તમને ખાતરી છે કે તમને નવà«àª‚ પાનà«àª‚ ખોલવà«àª‚ છે?","confirmCancel":"ઘણા વિકલà«àªªà«‹ બદલાયા છે. તમારે આ બોકà«àª·à« બંધ કરવà«àª‚ છે?","options":"વિકલà«àªªà«‹","target":"લકà«àª·à«àª¯","targetNew":"નવી વિનà«àª¡à«‹ (_blank)","targetTop":"ઉપરની વિનà«àª¡à«‹ (_top)","targetSelf":"àªàªœ વિનà«àª¡à«‹ (_self)","targetParent":"પેરનટ વિનà«àª¡à«‹ (_parent)","langDirLTR":"ડાબે થી જમણે (LTR)","langDirRTL":"જમણે થી ડાબે (RTL)","styles":"શૈલી","cssClasses":"શૈલી કલાસીસ","width":"પહોળાઈ","height":"ઊંચાઈ","align":"લાઇનદોરીમાં ગોઠવવà«àª‚","alignLeft":"ડાબી બાજૠગોઠવવà«àª‚","alignRight":"જમણી","alignCenter":"મધà«àª¯ સેનà«àªŸàª°","alignJustify":"બà«àª²à«‰àª•, અંતરાય જસà«àªŸàª¿àª«àª¾àª‡","alignTop":"ઉપર","alignMiddle":"વચà«àªšà«‡","alignBottom":"નીચે","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"ઉંચાઈ àªàª• આંકડો હોવો જોઈàª.","invalidWidth":"પોહળ ઈ àªàª• આંકડો હોવો જોઈàª.","invalidCssLength":"\"%1\" ની વેલà«àª¯à« àªàª• પોસીટીવ આંકડો હોવો જોઈઠઅથવા CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc) વગર.","invalidHtmlLength":"\"%1\" ની વેલà«àª¯à« àªàª• પોસીટીવ આંકડો હોવો જોઈઠઅથવા HTML measurement unit (px or %) વગર.","invalidInlineStyle":"ઈનલાઈન સà«àªŸàª¾àªˆàª² ની વેલà«àª¯à« \"name : value\" ના ફોરà«àª®à«‡àªŸ માં હોવી જોઈàª, વચà«àªšà«‡ સેમી-કોલોન જોઈàª.","cssLengthTooltip":"પિકà«àª·à«àª²à« નો આંકડો CSS unit (px, %, in, cm, mm, em, ex, pt, or pc) માં નાખો.","unavailable":"%1<span class=\"cke_accessibility\">, નથી મળતà«àª‚</span>"},"about":{"copy":"કોપીરાઈટ &copy; $1. ઓલ રાઈટà«àª¸ ","dlgTitle":"CKEditor વિષે","help":"મદદ માટે $1 તપાસો","moreInfo":"લાયસનસની માહિતી માટે અમારી વેબ સાઈટ","title":"CKEditor વિષે","userGuide":"CKEditor યà«àªàª°à«àª¸ ગાઈડ"},"basicstyles":{"bold":"બોલà«àª¡/સà«àªªàª·à«àªŸ","italic":"ઇટેલિક, તà«àª°àª¾àª‚સા","strike":"છેકી નાખવà«àª‚","subscript":"àªàª• ચિહà«àª¨àª¨à«€ નીચે કરેલà«àª‚ બીજà«àª‚ ચિહà«àª¨","superscript":"àªàª• ચિહà«àª¨ ઉપર કરેલà«àª‚ બીજà«àª‚ ચિહà«àª¨.","underline":"અનà«àª¡àª°à«àª²àª¾àª‡àª¨, નીચે લીટી"},"bidi":{"ltr":"ટેકà«àª·à«àª¤à« ની દિશા ડાબે થી જમણે","rtl":"ટેકà«àª·à«àª¤à« ની દિશા જમણે થી ડાબે"},"blockquote":{"toolbar":"બà«àª²à«‰àª•-કોટ, અવતરણચિહà«àª¨à«‹"},"clipboard":{"copy":"નકલ","copyError":"તમારા બà«àª°àª¾àª‰àªàª° ની સà«àª°àª•à«àª·àª¿àª¤ સેટિંગસ કોપી કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+C) का पà¥à¤°à¤¯à¥‹à¤— करें।","cut":"કાપવà«àª‚","cutError":"તમારા બà«àª°àª¾àª‰àªàª° ની સà«àª°àª•à«àª·àª¿àª¤ સેટિંગસ કટ કરવાની પરવાનગી નથી આપતી. (Ctrl/Cmd+X) નો ઉપયોગ કરો.","paste":"પેસà«àªŸ","pasteArea":"પેસà«àªŸ કરવાની જગà«àª¯àª¾","pasteMsg":"Ctrl/Cmd+V નો પà«àª°àª¯à«‹àª— કરી પેસà«àªŸ કરો","securityMsg":"તમારા બà«àª°àª¾àª‰àªàª° ની સà«àª°àª•à«àª·àª¿àª¤ સેટિંગસના કારણે,àªàª¡àª¿àªŸàª° તમારા કિલà«àªªàª¬à«‹àª°à«àª¡ ડેટા ને કોપી નથી કરી શકતો. તમારે આ વિનà«àª¡à«‹àª®àª¾àª‚ ફરીથી પેસà«àªŸ કરવà«àª‚ પડશે.","title":"પેસà«àªŸ"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"સà«àªµàªšàª¾àª²àª¿àª¤","bgColorTitle":"બૅકગà«àª°àª¾àª‰àª¨à«àª¡ રંગ,","colors":{"000":"કાળો","800000":"મરà«àª¨","8B4513":"છીક","2F4F4F":"ડારà«àª• સà«àª²à«‡àªŸ ગà«àª°à«‡ ","008080":"ટીલ","000080":"નેવી","4B0082":"જામલી","696969":"ડારà«àª• ગà«àª°à«‡","B22222":"ઈટ","A52A2A":"બà«àª°àª¾àª‰àª¨","DAA520":"ગોલà«àª¡àª¨ રોડ","006400":"ડારà«àª• લીલો","40E0D0":"ટà«àª°àª•à«‹àªˆàª¸","0000CD":"મધà«àª¯àª® વાદળી","800080":"પરà«àªªàª²","808080":"ગà«àª°à«‡","F00":"લાલ","FF8C00":"ડારà«àª• ઓરંજ","FFD700":"ગોલà«àª¡","008000":"ગà«àª°à«€àª¨","0FF":"સાયન","00F":"વાદળી","EE82EE":"વાયોલેટ","A9A9A9":"ડીમ ","FFA07A":"લાઈટ સાલમન","FFA500":"ઓરંજ","FFFF00":"પીળો","00FF00":"લાઈમ","AFEEEE":"પેલ કોઈસ","ADD8E6":"લાઈટ બà«àª²à«","DDA0DD":"પલà«àª®","D3D3D3":"લાઈટ ગà«àª°à«‡","FFF0F5":"લવંડર ","FAEBD7":"àªàª¨à«àªŸà«€àª• સફેદ","FFFFE0":"લાઈટ પીળો","F0FFF0":"હનીડઉય","F0FFFF":"અàªà«àª°à«‡","F0F8FF":"àªàª²à«€àª¸ બà«àª²à«","E6E6FA":"લવંડર","FFF":"સફેદ"},"more":"ઔર રંગ...","panelTitle":"રંગ","textColorTitle":"શબà«àª¦àª¨à«‹ રંગ"},"colordialog":{"clear":"સાફ કરવà«àª‚","highlight":"હાઈઈટ","options":"રંગના વિકલà«àªª","selected":"પસંદ કરેલો રંગ","title":"રંગ પસંદ કરો"},"templates":{"button":"ટેમà«àªªà«àª²à«‡àªŸ","emptyListMsg":"(કોઈ ટેમà«àªªà«àª²à«‡àªŸ ડિફાઇન નથી)","insertOption":"મૂળ શબà«àª¦àª¨à«‡ બદલો","options":"ટેમà«àªªà«àª²à«‡àªŸàª¨àª¾ વિકલà«àªªà«‹","selectPromptMsg":"àªàª¡àª¿àªŸàª°àª®àª¾àª‚ ઓપન કરવા ટેમà«àªªà«àª²à«‡àªŸ પસંદ કરો (વરà«àª¤àª®àª¾àª¨ કનà«àªŸà«‡àª¨à«àªŸ સેવ નહીં થાય):","title":"કનà«àªŸà«‡àª¨à«àªŸ ટેમà«àªªà«àª²à«‡àªŸ"},"contextmenu":{"options":"કોનà«àª¤à«‡àª•à«àª·à«àª¤à« મેનà«àª¨àª¾ વિકલà«àªªà«‹"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"àªàª¡àªµàª¾àªˆàªàª° શીરà«àª·àª•","cssClassInputLabel":"સà«àªŸàª¾àªˆàª²àª¶à«€àªŸ કલાસીસ","edit":"ડીવીમાં ફેરફાર કરવો","inlineStyleInputLabel":"ઈનલાઈન પદà«àª§àª¤àª¿","langDirLTRLabel":"ડાબે થી જમણે (LTR)","langDirLabel":"ભાષાની દિશા","langDirRTLLabel":"જમણે થી ડાબે (RTL)","languageCodeInputLabel":"ભાષાનો કોડ","remove":"ડીવી કાઢી કાઢવà«àª‚","styleSelectLabel":"સà«àªŸàª¾àªˆàª²","title":"Div કનà«àªŸà«‡àª¨àª° બનાવà«àª‚વà«àª‚","toolbar":"Div કનà«àªŸà«‡àª¨àª° બનાવà«àª‚વà«àª‚"},"toolbar":{"toolbarCollapse":"ટૂલબાર નાનà«àª‚ કરવà«àª‚","toolbarExpand":"ટૂલબાર મોટà«àª‚ કરવà«àª‚","toolbarGroups":{"document":"દસà«àª¤àª¾àªµà«‡àªœ","clipboard":"કà«àª²àª¿àªªàª¬à«‹àª°à«àª¡/અન","editing":"àªàª¡à«€àªŸ કરવà«àª‚","forms":"ફોરà«àª®","basicstyles":"બેસિકૠસà«àªŸàª¾àª‡àª²","paragraph":"ફકરો","links":"લીંક","insert":"ઉમેરવà«àª‚","styles":"સà«àªŸàª¾àª‡àª²","colors":"રંગ","tools":"ટૂલà«àª¸"},"toolbars":"àªàª¡à«€àªŸàª° ટૂલ બાર"},"elementspath":{"eleLabel":"àªàª²à«€àª®à«‡àª¨à«àªŸà«àª¸ નો ","eleTitle":"àªàª²à«€àª®à«‡àª¨à«àªŸ %1"},"find":{"find":"શોધવà«àª‚","findOptions":"વીકલà«àªª શોધો","findWhat":"આ શોધો","matchCase":"કેસ સરખા રાખો","matchCyclic":"સરખાવવા બધા","matchWord":"બઘા શબà«àª¦ સરખા રાખો","notFoundMsg":"તમે શોધેલી ટેકà«àª¸à«àªŸ નથી મળી","replace":"રિપà«àª²à«‡àª¸/બદલવà«àª‚","replaceAll":"બઘા બદલી ","replaceSuccessMsg":"%1 ફેરફારો બાદલાયા છે.","replaceWith":"આનાથી બદલો","title":"શોધવà«àª‚ અને બદલવà«àª‚"},"fakeobjects":{"anchor":"અનકર","flash":"ફà«àª²à«‡àª¶ ","hiddenfield":"હિડન ","iframe":"IFrame","unknown":"અનનોન ઓબà«àªœà«‡àª•à«àªŸ"},"flash":{"access":"સà«àª•à«àª°à«€àªªà«àªŸ àªàª•à«àª¸à«‡àª¸","accessAlways":"હમેશાં","accessNever":"નહી","accessSameDomain":"àªàªœ ડોમેન","alignAbsBottom":"Abs નીચે","alignAbsMiddle":"Abs ઉપર","alignBaseline":"આધાર લીટી","alignTextTop":"ટેકà«àª¸à«àªŸ ઉપર","bgcolor":"બૅકગà«àª°àª¾àª‰àª¨à«àª¡ રંગ,","chkFull":"ફૂલ સà«àª•à«àª°à«€àª¨ કરવà«àª‚","chkLoop":"લૂપ","chkMenu":"ફà«àª²à«…શ મેનà«àª¯à«‚ નો પà«àª°àª¯à«‹àª— કરો","chkPlay":"ઑટો/સà«àªµàª¯àª‚ પà«àª²à«‡","flashvars":"ફલેશ ના વિકલà«àªªà«‹","hSpace":"સમસà«àª¤àª°à«€àª¯ જગà«àª¯àª¾","properties":"ફà«àª²à«…શના ગà«àª£","propertiesTab":"ગà«àª£","quality":"ગà«àª£àª§àª°à«àª®","qualityAutoHigh":"ઓટો ઊંચà«àª‚","qualityAutoLow":"ઓટો નીચà«àª‚","qualityBest":"શà«àª°à«‡àª·à«àª ","qualityHigh":"ઊંચà«àª‚","qualityLow":"નીચà«àª‚","qualityMedium":"મધà«àª¯àª®","scale":"સà«àª•à«‡àª²","scaleAll":"સà«àª•à«‡àª² ઓલ/બધૠબતાવો","scaleFit":"સà«àª•à«‡àª² àªàª•àª¦àª® ફીટ","scaleNoBorder":"સà«àª•à«‡àª² બોરà«àª¡àª° વગર","title":"ફà«àª²à«…શ ગà«àª£","vSpace":"લંબરૂપ જગà«àª¯àª¾","validateHSpace":"HSpace આંકડો હોવો જોઈàª.","validateSrc":"લિંક URL ટાઇપ કરો","validateVSpace":"VSpace આંકડો હોવો જોઈàª.","windowMode":"વિનà«àª¡à«‹ મોડ","windowModeOpaque":"અપારદરà«àª¶àª•","windowModeTransparent":"પારદરà«àª¶àª•","windowModeWindow":"વિનà«àª¡à«‹"},"font":{"fontSize":{"label":"ફૉનà«àªŸ સાઇàª/કદ","voiceLabel":"ફોનà«àªŸ સાઈàª","panelTitle":"ફૉનà«àªŸ સાઇàª/કદ"},"label":"ફૉનà«àªŸ","panelTitle":"ફૉનà«àªŸ","voiceLabel":"ફોનà«àªŸ"},"forms":{"button":{"title":"બટનના ગà«àª£","text":"ટેકà«àª¸à«àªŸ (વૅલà«àª¯à«‚)","type":"પà«àª°àª•àª¾àª°","typeBtn":"બટન","typeSbm":"સબà«àª®àª¿àªŸ","typeRst":"રિસેટ"},"checkboxAndRadio":{"checkboxTitle":"ચેક બોકà«àª¸ ગà«àª£","radioTitle":"રેડિઓ બટનના ગà«àª£","value":"વૅલà«àª¯à«‚","selected":"સિલેકà«àªŸà«‡àª¡"},"form":{"title":"ફૉરà«àª®/પતà«àª°àª•àª¨àª¾ ગà«àª£","menu":"ફૉરà«àª®/પતà«àª°àª•àª¨àª¾ ગà«àª£","action":"કà«àª°àª¿àª¯àª¾","method":"પદà«àª§àª¤àª¿","encoding":"અનà«àª•à«‹àª¡à«€àª¨à«àª—"},"hidden":{"title":"ગà«àªªà«àª¤ કà«àª·à«‡àª¤à«àª°àª¨àª¾ ગà«àª£","name":"નામ","value":"વૅલà«àª¯à«‚"},"select":{"title":"પસંદગી કà«àª·à«‡àª¤à«àª°àª¨àª¾ ગà«àª£","selectInfo":"સૂચના","opAvail":"ઉપલબà«àª§ વિકલà«àªª","value":"વૅલà«àª¯à«‚","size":"સાઇàª","lines":"લીટીઓ","chkMulti":"àªàª•àª¥à«€ વધારે પસંદ કરી શકો","opText":"ટેકà«àª¸à«àªŸ","opValue":"વૅલà«àª¯à«‚","btnAdd":"ઉમેરવà«àª‚","btnModify":"બદલવà«àª‚","btnUp":"ઉપર","btnDown":"નીચે","btnSetValue":"પસંદ કરલી વૅલà«àª¯à«‚ સેટ કરો","btnDelete":"રદ કરવà«àª‚"},"textarea":{"title":"ટેકà«àª¸à«àªŸ àªàª…રિઆ, શબà«àª¦ વિસà«àª¤àª¾àª°àª¨àª¾ ગà«àª£","cols":"કૉલમ/ઊભી કટાર","rows":"પંકà«àª¤àª¿àª“"},"textfield":{"title":"ટેકà«àª¸à«àªŸ ફીલà«àª¡, શબà«àª¦ કà«àª·à«‡àª¤à«àª°àª¨àª¾ ગà«àª£","name":"નામ","value":"વૅલà«àª¯à«‚","charWidth":"કેરેકà«àªŸàª°àª¨à«€ પહોળાઈ","maxChars":"અધિકતમ કેરેકà«àªŸàª°","type":"ટાઇપ","typeText":"ટેકà«àª¸à«àªŸ","typePass":"પાસવરà«àª¡","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"ફૉનà«àªŸ ફૉરà«àª®àªŸ, રચનાની શૈલી","panelTitle":"ફૉનà«àªŸ ફૉરà«àª®àªŸ, રચનાની શૈલી","tag_address":"સરનામà«àª‚","tag_div":"શીરà«àª·àª• (DIV)","tag_h1":"શીરà«àª·àª• 1","tag_h2":"શીરà«àª·àª• 2","tag_h3":"શીરà«àª·àª• 3","tag_h4":"શીરà«àª·àª• 4","tag_h5":"શીરà«àª·àª• 5","tag_h6":"શીરà«àª·àª• 6","tag_p":"સામાનà«àª¯","tag_pre":"ફૉરà«àª®àªŸà«‡àª¡"},"horizontalrule":{"toolbar":"સમસà«àª¤àª°à«€àª¯ રેખા ઇનà«àª¸àª°à«àªŸ/દાખલ કરવી"},"iframe":{"border":"ફà«àª°à«‡àª® બોરà«àª¡à«‡àª° બતાવવી","noUrl":"iframe URL ટાઈપૠકરો","scrolling":"સà«àª•à«àª°à«‹àª²àª¬àª¾àª° ચાલૠકરવા","title":"IFrame વિકલà«àªªà«‹","toolbar":"IFrame"},"image":{"alertUrl":"ચિતà«àª°àª¨à«€ URL ટાઇપ કરો","alt":"ઑલà«àªŸàª°à«àª¨àªŸ ટેકà«àª¸à«àªŸ","border":"બોરà«àª¡àª°","btnUpload":"આ સરà«àªµàª°àª¨à«‡ મોકલવà«àª‚","button2Img":"તમારે ઈમેજ બટનને સાદી ઈમેજમાં બદલવà«àª‚ છે.","hSpace":"સમસà«àª¤àª°à«€àª¯ જગà«àª¯àª¾","img2Button":"તમારે સાદી ઈમેજને ઈમેજ બટનમાં બદલવà«àª‚ છે.","infoTab":"ચિતà«àª° ની જાણકારી","linkTab":"લિંક","lockRatio":"લૉક ગà«àª£à«‹àª¤à«àª¤àª°","menu":"ચિતà«àª°àª¨àª¾ ગà«àª£","resetSize":"રીસેટ સાઇàª","title":"ચિતà«àª°àª¨àª¾ ગà«àª£","titleButton":"ચિતà«àª° બટનના ગà«àª£","upload":"અપલોડ","urlMissing":"ઈમેજની મૂળ URL છે નહી.","vSpace":"લંબરૂપ જગà«àª¯àª¾","validateBorder":"બોરà«àª¡à«‡àª° આંકડો હોવો જોઈàª.","validateHSpace":"HSpaceઆંકડો હોવો જોઈàª.","validateVSpace":"VSpace આંકડો હોવો જોઈàª. "},"indent":{"indent":"ઇનà«àª¡à«‡àª¨à«àªŸ, લીટીના આરંભમાં જગà«àª¯àª¾ વધારવી","outdent":"ઇનà«àª¡à«‡àª¨à«àªŸ લીટીના આરંભમાં જગà«àª¯àª¾ ઘટાડવી"},"smiley":{"options":"સમà«àª¯à«àª²à«€ વિકલà«àªªà«‹","title":"સà«àª®àª¾àª‡àª²à«€ પસંદ કરો","toolbar":"સà«àª®àª¾àª‡àª²à«€"},"justify":{"block":"બà«àª²à«‰àª•, અંતરાય જસà«àªŸàª¿àª«àª¾àª‡","center":"સંકેંદà«àª°àª£/સેંટરિંગ","left":"ડાબી બાજà«àª/બાજૠતરફ","right":"જમણી બાજà«àª/બાજૠતરફ"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"àªàª•à«àª¸à«‡àª¸ કી","advanced":"અડà«àªµàª¾àª¨à«àª¸àª¡","advisoryContentType":"મà«àª–à«àª¯ કનà«àªŸà«‡àª¨à«àªŸ પà«àª°àª•àª¾àª°","advisoryTitle":"મà«àª–à«àª¯ મથાળà«àª‚","anchor":{"toolbar":"àªàª‚કર ઇનà«àª¸àª°à«àªŸ/દાખલ કરવી","menu":"àªàª‚કરના ગà«àª£","title":"àªàª‚કરના ગà«àª£","name":"àªàª‚કરનà«àª‚ નામ","errorName":"àªàª‚કરનà«àª‚ નામ ટાઈપ કરો","remove":"સà«àª¥àª¿àª° નકરવà«àª‚"},"anchorId":"àªàª‚કર àªàª²àª¿àª®àª¨à«àªŸ Id થી પસંદ કરો","anchorName":"àªàª‚કર નામથી પસંદ કરો","charset":"લિંક રિસૉરà«àª¸ કૅરિકà«àªŸàª° સેટ","cssClasses":"સà«àªŸàª¾àª‡àª²-શીટ કà«àª²àª¾àª¸","emailAddress":"ઈ-મેલ સરનામà«àª‚","emailBody":"સંદેશ","emailSubject":"ઈ-મેલ વિષય","id":"Id","info":"લિંક ઇનà«àª«à«‰ ટૅબ","langCode":"ભાષા લેખવાની પદà«àª§àª¤àª¿","langDir":"ભાષા લેખવાની પદà«àª§àª¤àª¿","langDirLTR":"ડાબે થી જમણે (LTR)","langDirRTL":"જમણે થી ડાબે (RTL)","menu":" લિંક àªàª¡àª¿àªŸ/માં ફેરફાર કરવો","name":"નામ","noAnchors":"(ડૉકà«àª¯à«àª®àª¨à«àªŸàª®àª¾àª‚ àªàª‚કરની સંખà«àª¯àª¾)","noEmail":"ઈ-મેલ સરનામà«àª‚ ટાઇપ કરો","noUrl":"લિંક URL ટાઇપ કરો","other":"<other> <અનà«àª¯>","popupDependent":"ડિપેનà«àª¡àª¨à«àªŸ (Netscape)","popupFeatures":"પૉપ-અપ વિનà«àª¡à«‹ ફીચરસૅ","popupFullScreen":"ફà«àª² સà«àª•à«àª°à«€àª¨ (IE)","popupLeft":"ડાબી બાજà«","popupLocationBar":"લોકેશન બાર","popupMenuBar":"મેનà«àª¯à«‚ બાર","popupResizable":"રીસાઈàªàªàª¬àª²","popupScrollBars":"સà«àª•à«àª°à«‹àª² બાર","popupStatusBar":"સà«àªŸà«…ટસ બાર","popupToolbar":"ટૂલ બાર","popupTop":"જમણી બાજà«","rel":"સંબંધની સà«àª¥àª¿àª¤àª¿","selectAnchor":"àªàª‚કર પસંદ કરો","styles":"સà«àªŸàª¾àª‡àª²","tabIndex":"ટૅબ ઇનà«àª¡à«‡àª•à«àª¸","target":"ટારà«àª—ેટ/લકà«àª·à«àª¯","targetFrame":"<ફà«àª°à«‡àª®>","targetFrameName":"ટારà«àª—ેટ ફà«àª°à«‡àª® નà«àª‚ નામ","targetPopup":"<પૉપ-અપ વિનà«àª¡à«‹>","targetPopupName":"પૉપ-અપ વિનà«àª¡à«‹ નà«àª‚ નામ","title":"લિંક","toAnchor":"આ પેજનો àªàª‚કર","toEmail":"ઈ-મેલ","toUrl":"URL","toolbar":"લિંક ઇનà«àª¸àª°à«àªŸ/દાખલ કરવી","type":"લિંક પà«àª°àª•àª¾àª°","unlink":"લિંક કાઢવી","upload":"અપલોડ"},"list":{"bulletedlist":"બà«àª²à«‡àªŸ સૂચિ","numberedlist":"સંખà«àª¯àª¾àª‚કન સૂચિ"},"liststyle":{"armenian":"અરમેનિયન આંકડા પદà«àª§àª¤àª¿","bulletedTitle":"બà«àª²à«‡àªŸà«‡àª¡ લીસà«àªŸàª¨àª¾ ગà«àª£","circle":"વરà«àª¤à«àª³","decimal":"આંકડા (1, 2, 3, etc.)","decimalLeadingZero":"સà«àª¨à«àª¯ આગળ આંકડા (01, 02, 03, etc.)","disc":"ડિસà«àª•","georgian":"ગેઓરà«àª—િયન આંકડા પદà«àª§àª¤àª¿ (an, ban, gan, etc.)","lowerAlpha":"આલà«àª«àª¾ નાના (a, b, c, d, e, etc.)","lowerGreek":"ગà«àª°à«€àª• નાના (alpha, beta, gamma, etc.)","lowerRoman":"રોમન નાના (i, ii, iii, iv, v, etc.)","none":"કસૠ","notset":"<સેટ નથી>","numberedTitle":"આંકડાના લીસà«àªŸàª¨àª¾ ગà«àª£","square":"ચોરસ","start":"શરૠકરવà«àª‚","type":"પà«àª°àª•àª¾àª°","upperAlpha":"આલà«àª«àª¾ મોટા (A, B, C, D, E, etc.)","upperRoman":"રોમન મોટા (I, II, III, IV, V, etc.)","validateStartNumber":"લીસà«àªŸàª¨àª¾ સરà«àª†àª¤àª¨à«‹ આંકડો પà«àª°à«‹ હોવો જોઈàª."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"મોટà«àª‚ કરવà«àª‚","minimize":"નાનà«àª‚ કરવà«àª‚"},"newpage":{"toolbar":"નવૠપાનà«àª‚"},"pagebreak":{"alt":"નવà«àª‚ પાનà«àª‚","toolbar":"ઇનà«àª¸àª°à«àªŸ પેજબà«àª°à«‡àª•/પાનાને અલગ કરવà«àª‚/દાખલ કરવà«àª‚"},"pastetext":{"button":"પેસà«àªŸ (ટેકà«àª¸à«àªŸ)","title":"પેસà«àªŸ (ટેકà«àª¸à«àªŸ)"},"pastefromword":{"confirmCleanup":"તમે જે ટેકà«àª·à«àª¤à« કોપી કરી રહà«àª¯àª¾ છો ટે વરà«àª¡ ની છે. કોપી કરતા પેહલા સાફ કરવી છે?","error":"પેસà«àªŸ કરેલો ડેટા ઇનà«àªŸàª°àª¨àª² àªàª°àª° ના લીથે સાફ કરી શકાયો નથી.","title":"પેસà«àªŸ (વડૅ ટેકà«àª¸à«àªŸ)","toolbar":"પેસà«àªŸ (વડૅ ટેકà«àª¸à«àªŸ)"},"preview":{"preview":"પૂરà«àªµàª¦àª°à«àª¶àª¨"},"print":{"toolbar":"પà«àª°àª¿àª¨à«àªŸ"},"removeformat":{"toolbar":"ફૉરà«àª®àªŸ કાઢવà«àª‚"},"save":{"toolbar":"સેવ"},"selectall":{"toolbar":"બઘà«àª‚ પસંદ કરવà«àª‚"},"showblocks":{"toolbar":"બà«àª²à«‰àª• બતાવવà«àª‚"},"sourcearea":{"toolbar":"મૂળ કે પà«àª°àª¾àª¥àª®àª¿àª• દસà«àª¤àª¾àªµà«‡àªœ"},"specialchar":{"options":"સà«àªªà«‡àª¶àª¿àª…લ કરેકà«àªŸàª°àª¨àª¾ વિકલà«àªªà«‹","title":"સà«àªªà«‡àª¶àª¿àª…લ વિશિષà«àªŸ અકà«àª·àª° પસંદ કરો","toolbar":"વિશિષà«àªŸ અકà«àª·àª° ઇનà«àª¸àª°à«àªŸ/દાખલ કરવà«àª‚"},"scayt":{"btn_about":"SCAYT વિષે","btn_dictionaries":"શબà«àª¦àª•à«‹àª¶","btn_disable":"SCAYT ડિસેબલ કરવà«àª‚","btn_enable":"SCAYT àªàª¨à«‡àª¬àª² કરવà«àª‚","btn_langs":"ભાષાઓ","btn_options":"વિકલà«àªªà«‹","text_title":""},"stylescombo":{"label":"શૈલી/રીત","panelTitle":"ફોરà«àª®à«‡àªŸ ","panelTitle1":"બà«àª²à«‹àª• ","panelTitle2":"ઈનલાઈન ","panelTitle3":"ઓબà«àªœà«‡àª•à«àªŸ પદà«àª§àª¤àª¿"},"table":{"border":"કોઠાની બાજà«(બોરà«àª¡àª°) સાઇàª","caption":"મથાળà«àª‚/કૅપà«àª¶àª¨ ","cell":{"menu":"કોષના ખાના","insertBefore":"પહેલાં કોષ ઉમેરવો","insertAfter":"પછી કોષ ઉમેરવો","deleteCell":"કોષ ડિલીટ/કાઢી નાખવો","merge":"કોષ ભેગા કરવા","mergeRight":"જમણી બાજૠભેગા કરવા","mergeDown":"નીચે ભેગા કરવા","splitHorizontal":"કોષને સમસà«àª¤àª°à«€àª¯ વિભાજન કરવà«àª‚","splitVertical":"કોષને સીધà«àª‚ ને ઊભà«àª‚ વિભાજન કરવà«àª‚","title":"સેલના ગà«àª£","cellType":"સેલનો પà«àª°àª•àª¾àª°","rowSpan":"આડી કટારની જગà«àª¯àª¾","colSpan":"ઊભી કતારની જગà«àª¯àª¾","wordWrap":"વરà«àª¡ રેપ","hAlign":"સપાટ લાઈનદોરી","vAlign":"ઊભી લાઈનદોરી","alignBaseline":"બસે લાઈન","bgColor":"પાછાળનો રંગ","borderColor":"બોરà«àª¡à«‡àª° રંગ","data":"સà«àªµà«€àª•à«ƒàª¤ માહિતી","header":"મથાળà«àª‚","yes":"હા","no":"ના","invalidWidth":"સેલની પોહલાઈ આંકડો હોવો જોઈàª.","invalidHeight":"સેલની ઊંચાઈ આંકડો હોવો જોઈàª.","invalidRowSpan":"રો સà«àªªàª¾àª¨ આંકડો હોવો જોઈàª.","invalidColSpan":"કોલમ સà«àªªàª¾àª¨ આંકડો હોવો જોઈàª.","chooseColor":"પસંદ કરવà«àª‚"},"cellPad":"સેલ પૅડિંગ","cellSpace":"સેલ અંતર","column":{"menu":"કૉલમ/ઊભી કટાર","insertBefore":"પહેલાં કૉલમ/ઊભી કટાર ઉમેરવી","insertAfter":"પછી કૉલમ/ઊભી કટાર ઉમેરવી","deleteColumn":"કૉલમ/ઊભી કટાર ડિલીટ/કાઢી નાખવી"},"columns":"કૉલમ/ઊભી કટાર","deleteTable":"કોઠો ડિલીટ/કાઢી નાખવà«àª‚","headers":"મથાળા","headersBoth":"બેવà«àª‚","headersColumn":"પહેલી ઊભી કટાર","headersNone":"નથી ","headersRow":"પહેલી કટાર","invalidBorder":"બોરà«àª¡àª° àªàª• આંકડો હોવો જોઈàª","invalidCellPadding":"સેલની અંદરની જગà«àª¯àª¾ સà«àª¨à«àª¯ કરતા વધારે હોવી જોઈàª.","invalidCellSpacing":"સેલ વચà«àªšà«‡àª¨à«€ જગà«àª¯àª¾ સà«àª¨à«àª¯ કરતા વધારે હોવી જોઈàª.","invalidCols":"ઉભી કટાર, 0 કરતા વધારે હોવી જોઈàª.","invalidHeight":"ટેબલની ઊંચાઈ આંકડો હોવો જોઈàª.","invalidRows":"આડી કટાર, 0 કરતા વધારે હોવી જોઈàª.","invalidWidth":"ટેબલની પોહલાઈ આંકડો હોવો જોઈàª.","menu":"ટેબલ, કોઠાનà«àª‚ મથાળà«àª‚","row":{"menu":"પંકà«àª¤àª¿àª¨àª¾ ખાના","insertBefore":"પહેલાં પંકà«àª¤àª¿ ઉમેરવી","insertAfter":"પછી પંકà«àª¤àª¿ ઉમેરવી","deleteRow":"પંકà«àª¤àª¿àª“ ડિલીટ/કાઢી નાખવી"},"rows":"પંકà«àª¤àª¿àª¨àª¾ ખાના","summary":"ટૂંકો àªàª¹à«‡àªµàª¾àª²","title":"ટેબલ, કોઠાનà«àª‚ મથાળà«àª‚","toolbar":"ટેબલ, કોઠો","widthPc":"પà«àª°àª¤àª¿àª¶àª¤","widthPx":"પિકસલ","widthUnit":"પોહાલાઈ àªàª•àª®"},"undo":{"redo":"રિડૂ; પછી હતી àªàªµà«€ સà«àª¥àª¿àª¤àª¿ પાછી લાવવી","undo":"રદ કરવà«àª‚; પહેલાં હતી àªàªµà«€ સà«àª¥àª¿àª¤àª¿ પાછી લાવવી"},"wsc":{"btnIgnore":"ઇગà«àª¨à«‹àª°/અવગણના કરવી","btnIgnoreAll":"બધાની ઇગà«àª¨à«‹àª°/અવગણના કરવી","btnReplace":"બદલવà«àª‚","btnReplaceAll":"બધા બદલી કરો","btnUndo":"અનà«àª¡à«‚","changeTo":"આનાથી બદલવà«àª‚","errorLoading":"સરà«àªµàª¿àª¸ àªàªªà«àª²à«€àª•à«‡àª¶àª¨ લોડ નથી થ: %s.","ieSpellDownload":"સà«àªªà«‡àª²-ચેકર ઇનà«àª¸à«àªŸà«‹àª² નથી. શà«àª‚ તમે ડાઉનલોડ કરવા માંગો છો?","manyChanges":"શબà«àª¦àª¨à«€ જોડણી/સà«àªªà«‡àª² ચેક પૂરà«àª£: %1 શબà«àª¦ બદલયા છે","noChanges":"શબà«àª¦àª¨à«€ જોડણી/સà«àªªà«‡àª² ચેક પૂરà«àª£: àªàª•àªªàª£ શબà«àª¦ બદલયો નથી","noMispell":"શબà«àª¦àª¨à«€ જોડણી/સà«àªªà«‡àª² ચેક પૂરà«àª£: ખોટી જોડણી મળી નથી","noSuggestions":"- કઇ સજેશન નથી -","notAvailable":"માફ કરશો, આ સà«àªµàª¿àª§àª¾ ઉપલબà«àª§ નથી","notInDic":"શબà«àª¦àª•à«‹àª¶àª®àª¾àª‚ નથી","oneChange":"શબà«àª¦àª¨à«€ જોડણી/સà«àªªà«‡àª² ચેક પૂરà«àª£: àªàª• શબà«àª¦ બદલયો છે","progress":"શબà«àª¦àª¨à«€ જોડણી/સà«àªªà«‡àª² ચેક ચાલૠછે...","title":"સà«àªªà«‡àª² ","toolbar":"જોડણી (સà«àªªà«‡àª²àª¿àª‚ગ) તપાસવી"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/he.js b/wqflask/wqflask/static/packages/ckeditor/lang/he.js
deleted file mode 100644
index 3223f88e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/he.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['he']={"editor":"עורך טקסט עשיר","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"לחץ ×לט ALT + 0 לעזרה","browseServer":"סייר השרת","url":"כתובת (URL)","protocol":"פרוטוקול","upload":"העל××”","uploadSubmit":"שליחה לשרת","image":"תמונה","flash":"פל×ש","form":"טופס","checkbox":"תיבת סימון","radio":"לחצן ×פשרויות","textField":"שדה טקסט","textarea":"×יזור טקסט","hiddenField":"שדה חבוי","button":"כפתור","select":"שדה בחירה","imageButton":"כפתור תמונה","notSet":"<×œ× × ×§×‘×¢>","id":"זיהוי (ID)","name":"ש×","langDir":"כיוון שפה","langDirLtr":"שמ×ל לימין (LTR)","langDirRtl":"ימין לשמ×ל (RTL)","langCode":"קוד שפה","longDescr":"קישור לתי×ור מפורט","cssClass":"מחלקת עיצוב (CSS Class)","advisoryTitle":"כותרת מוצעת","cssStyle":"סגנון","ok":"×ישור","cancel":"ביטול","close":"סגירה","preview":"תצוגה מקדימה","resize":"יש לגרור בכדי לשנות ×ת הגודל","generalTab":"כללי","advancedTab":"×פשרויות מתקדמות","validateNumberFailed":"הערך חייב להיות מספרי.","confirmNewPage":"כל ×”×©×™× ×•×™×™× ×©×œ× × ×©×ž×¨×• ×™×בדו. ×”×× ×œ×”×¢×œ×•×ª דף חדש?","confirmCancel":"חלק מה×פשרויות שונו, ×”×× ×œ×¡×’×•×¨ ×ת הדי×לוג?","options":"×פשרויות","target":"מטרה","targetNew":"חלון חדש (_blank)","targetTop":"החלון העליון ביותר (_top)","targetSelf":"×ותו חלון (_self)","targetParent":"חלון ×”×ב (_parent)","langDirLTR":"שמ×ל לימין (LTR)","langDirRTL":"ימין לשמ×ל (RTL)","styles":"סגנון","cssClasses":"מחלקות גליונות סגנון","width":"רוחב","height":"גובה","align":"יישור","alignLeft":"לשמ×ל","alignRight":"לימין","alignCenter":"מרכז","alignJustify":"יישור לשוליי×","alignTop":"למעלה","alignMiddle":"ל×מצע","alignBottom":"לתחתית","alignNone":"None","invalidValue":"ערך ×œ× ×—×•×§×™.","invalidHeight":"הגובה חייב להיות מספר.","invalidWidth":"הרוחב חייב להיות מספר.","invalidCssLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי ×¢× ×ו ×œ×œ× ×™×—×™×“×ª מידה חוקית של CSS (px, %, in, cm, mm, em, ex, pt, ×ו pc).","invalidHtmlLength":"הערך שצוין לשדה \"%1\" חייב להיות מספר חיובי ×¢× ×ו ×œ×œ× ×™×—×™×“×ª מידה חוקית של HTML (px ×ו %).","invalidInlineStyle":"הערך שצויין לשדה הסגנון חייב להכיל זוג ×¢×¨×›×™× ×חד ×ו יותר בפורמט \"×©× : ערך\", ×ž×•×¤×¨×“×™× ×¢×œ ידי נקודה-פסיק.","cssLengthTooltip":"יש להכניס מספר המייצג ×¤×™×§×¡×œ×™× ×ו מספר ×¢× ×™×—×™×“×ª גליונות סגנון תקינה (px, %, in, cm, mm, em, ex, pt, ×ו pc).","unavailable":"%1<span class=\"cke_accessibility\">, ×œ× ×–×ž×™×Ÿ</span>"},"about":{"copy":"Copyright &copy; $1. כל הזכויות שמורות.","dlgTitle":"×ודות CKEditor","help":"היכנסו ל$1 לעזרה.","moreInfo":"למידע נוסף בקרו ב×תרנו:","title":"×ודות CKEditor","userGuide":"מדריך המשתמש של CKEditor"},"basicstyles":{"bold":"מודגש","italic":"נטוי","strike":"כתיב מחוק","subscript":"כתיב תחתון","superscript":"כתיב עליון","underline":"קו תחתון"},"bidi":{"ltr":"כיוון טקסט משמ×ל לימין (LTR)","rtl":"כיוון טקסט מימין לשמ×ל (RTL)"},"blockquote":{"toolbar":"בלוק ציטוט"},"clipboard":{"copy":"העתקה","copyError":"הגדרות ×”×בטחה בדפדפן שלך ×œ× ×ž×פשרות לעורך לבצע פעולות העתקה ×וטומטיות. יש להשתמש במקלדת ×œ×©× ×›×š (Ctrl/Cmd+C).","cut":"גזירה","cutError":"הגדרות ×”×בטחה בדפדפן שלך ×œ× ×ž×פשרות לעורך לבצע פעולות גזירה ×וטומטיות. יש להשתמש במקלדת ×œ×©× ×›×š (Ctrl/Cmd+X).","paste":"הדבקה","pasteArea":"×יזור הדבקה","pasteMsg":"× × ×œ×”×“×‘×™×§ בתוך הקופסה ב×מצעות (<b>Ctrl/Cmd+V</b>) וללחוץ על <b>×ישור</b>.","securityMsg":"עקב הגדרות ×בטחה בדפדפן, ×œ× × ×™×ª×Ÿ לגשת ×ל לוח ×”×’×–×™×¨×™× (Clipboard) בצורה ישירה. × × ×œ×”×“×‘×™×§ שוב בחלון ×–×”.","title":"הדבקה"},"button":{"selectedLabel":"1% (סומן)"},"colorbutton":{"auto":"×וטומטי","bgColorTitle":"צבע רקע","colors":{"000":"שחור","800000":"סגול ×›×”×”","8B4513":"×—×•× ×‘×”×™×¨","2F4F4F":"×פור צפחה","008080":"כחול-ירוק","000080":"כחול-סגול","4B0082":"×ינדיגו","696969":"×פור מעומע×","B22222":"×דו×-חו×","A52A2A":"חו×","DAA520":"×›×ª×•× ×–×”×‘","006400":"ירוק ×›×”×”","40E0D0":"טורקיז","0000CD":"כחול בינוני","800080":"סגול","808080":"×פור","F00":"×דו×","FF8C00":"×›×ª×•× ×›×”×”","FFD700":"זהב","008000":"ירוק","0FF":"צי×ן","00F":"כחול","EE82EE":"סגלגל","A9A9A9":"×פור ×›×”×”","FFA07A":"כתו×-וורוד","FFA500":"כתו×","FFFF00":"צהוב","00FF00":"ליי×","AFEEEE":"טורקיז בהיר","ADD8E6":"כחול בהיר","DDA0DD":"שזיף","D3D3D3":"×פור בהיר","FFF0F5":"לבנדר מסמיק","FAEBD7":"לבן עתיק","FFFFE0":"צהוב בהיר","F0FFF0":"טל דבש","F0FFFF":"תכלת","F0F8FF":"כחול טיפת מי×","E6E6FA":"לבנדר","FFF":"לבן"},"more":"×¦×‘×¢×™× × ×•×¡×¤×™×...","panelTitle":"צבעי×","textColorTitle":"צבע טקסט"},"colordialog":{"clear":"ניקוי","highlight":"סימון","options":"×פשרויות צבע","selected":"בחירה","title":"בחירת צבע"},"templates":{"button":"תבניות","emptyListMsg":"(×œ× ×”×•×’×“×¨×• תבניות)","insertOption":"החלפת תוכן ממשי","options":"×פשרויות התבניות","selectPromptMsg":"יש לבחור תבנית לפתיחה בעורך.<br />התוכן המקורי ימחק:","title":"תביות תוכן"},"contextmenu":{"options":"×פשרויות תפריט ההקשר"},"div":{"IdInputLabel":"מזהה (ID)","advisoryTitleInputLabel":"כותרת מוצעת","cssClassInputLabel":"מחלקת עיצוב","edit":"עריכת מיכל (Div)","inlineStyleInputLabel":"סגנון פנימי","langDirLTRLabel":"שמ×ל לימין (LTR)","langDirLabel":"כיוון שפה","langDirRTLLabel":"ימין לשמ×ל (RTL)","languageCodeInputLabel":"קוד שפה","remove":"הסרת מיכל (Div)","styleSelectLabel":"סגנון","title":"יצירת מיכל (Div)","toolbar":"יצירת מיכל (Div)"},"toolbar":{"toolbarCollapse":"מזעור סרגל כלי×","toolbarExpand":"הרחבת סרגל כלי×","toolbarGroups":{"document":"מסמך","clipboard":"לוח ×”×’×–×™×¨×™× (Clipboard)/צעד ×חרון","editing":"עריכה","forms":"טפסי×","basicstyles":"עיצוב בסיסי","paragraph":"פסקה","links":"קישורי×","insert":"הכנסה","styles":"עיצוב","colors":"צבעי×","tools":"כלי×"},"toolbars":"סרגלי ×›×œ×™× ×©×œ העורך"},"elementspath":{"eleLabel":"×¢×¥ ×”×למנטי×","eleTitle":"%1 ×למנט"},"find":{"find":"חיפוש","findOptions":"×פשרויות חיפוש","findWhat":"חיפוש מחרוזת:","matchCase":"הבחנה בין ×ותיות רשיות לקטנות (Case)","matchCyclic":"הת×מה מחזורית","matchWord":"הת×מה למילה המל××”","notFoundMsg":"הטקסט המבוקש ×œ× × ×ž×¦×.","replace":"החלפה","replaceAll":"החלפה בכל העמוד","replaceSuccessMsg":"%1 ×˜×§×¡×˜×™× ×”×•×—×œ×¤×•.","replaceWith":"החלפה במחרוזת:","title":"חיפוש והחלפה"},"fakeobjects":{"anchor":"עוגן","flash":"סרטון פל×ש","hiddenfield":"שדה חבוי","iframe":"חלון פנימי (iframe)","unknown":"×ובייקט ×œ× ×™×“×•×¢"},"flash":{"access":"גישת סקריפט","accessAlways":"תמיד","accessNever":"××£ פע×","accessSameDomain":"דומיין ×–×”×”","alignAbsBottom":"לתחתית ×”×בסולוטית","alignAbsMiddle":"מרכוז ×בסולוטי","alignBaseline":"לקו התחתית","alignTextTop":"לר×ש הטקסט","bgcolor":"צבע רקע","chkFull":"×פשר חלון מל×","chkLoop":"לול××”","chkMenu":"×פשר תפריט פל×ש","chkPlay":"ניגון ×וטומטי","flashvars":"×ž×©×ª× ×™× ×œ×¤×œ×ש","hSpace":"מרווח ×ופקי","properties":"מ×פייני פל×ש","propertiesTab":"מ×פייני×","quality":"×יכות","qualityAutoHigh":"גבוהה ×וטומטית","qualityAutoLow":"נמוכה ×וטומטית","qualityBest":"מעולה","qualityHigh":"גבוהה","qualityLow":"נמוכה","qualityMedium":"ממוצעת","scale":"גודל","scaleAll":"הצג הכל","scaleFit":"הת×מה מושלמת","scaleNoBorder":"×œ×œ× ×’×‘×•×œ×•×ª","title":"מ×פיני פל×ש","vSpace":"מרווח ×× ×›×™","validateHSpace":"המרווח ×”×ופקי חייב להיות מספר.","validateSrc":"יש להקליד ×ת כתובת סרטון הפל×ש (URL)","validateVSpace":"המרווח ×”×× ×›×™ חייב להיות מספר.","windowMode":"מצב חלון","windowModeOpaque":"×טו×","windowModeTransparent":"שקוף","windowModeWindow":"חלון"},"font":{"fontSize":{"label":"גודל","voiceLabel":"גודל","panelTitle":"גודל"},"label":"גופן","panelTitle":"גופן","voiceLabel":"גופן"},"forms":{"button":{"title":"מ×פייני כפתור","text":"טקסט (ערך)","type":"סוג","typeBtn":"כפתור","typeSbm":"שליחה","typeRst":"×יפוס"},"checkboxAndRadio":{"checkboxTitle":"מ×פייני תיבת סימון","radioTitle":"מ×פייני לחצן ×פשרויות","value":"ערך","selected":"מסומן"},"form":{"title":"מ×פיני טופס","menu":"מ×פיני טופס","action":"שלח ×ל","method":"סוג שליחה","encoding":"קידוד"},"hidden":{"title":"מ×פיני שדה חבוי","name":"ש×","value":"ערך"},"select":{"title":"מ×פייני שדה בחירה","selectInfo":"מידע","opAvail":"×פשרויות זמינות","value":"ערך","size":"גודל","lines":"שורות","chkMulti":"×יפשור בחירות מרובות","opText":"טקסט","opValue":"ערך","btnAdd":"הוספה","btnModify":"שינוי","btnUp":"למעלה","btnDown":"למטה","btnSetValue":"קביעה כברירת מחדל","btnDelete":"מחיקה"},"textarea":{"title":"מ×פייני ×יזור טקסט","cols":"עמודות","rows":"שורות"},"textfield":{"title":"מ×פייני שדה טקסט","name":"ש×","value":"ערך","charWidth":"רוחב לפי תווי×","maxChars":"×ž×§×¡×™×ž×•× ×ª×•×•×™×","type":"סוג","typeText":"טקסט","typePass":"סיסמה","typeEmail":"דו×\"ל","typeSearch":"חיפוש","typeTel":"מספר טלפון","typeUrl":"כתובת (URL)"}},"format":{"label":"עיצוב","panelTitle":"עיצוב","tag_address":"כתובת","tag_div":"נורמלי (DIV)","tag_h1":"כותרת","tag_h2":"כותרת 2","tag_h3":"כותרת 3","tag_h4":"כותרת 4","tag_h5":"כותרת 5","tag_h6":"כותרת 6","tag_p":"נורמלי","tag_pre":"קוד"},"horizontalrule":{"toolbar":"הוספת קו ×ופקי"},"iframe":{"border":"הר××” מסגרת לחלון","noUrl":"יש להכניס כתובת לחלון.","scrolling":"×פשר פסי גלילה","title":"מ×פייני חלון פנימי (iframe)","toolbar":"חלון פנימי (iframe)"},"image":{"alertUrl":"יש להקליד ×ת כתובת התמונה","alt":"טקסט חלופי","border":"מסגרת","btnUpload":"שליחה לשרת","button2Img":"×”×× ×œ×”×¤×•×š ×ת תמונת הכפתור לתמונה פשוטה?","hSpace":"מרווח ×ופקי","img2Button":"×”×× ×œ×”×¤×•×š ×ת התמונה לכפתור תמונה?","infoTab":"מידע על התמונה","linkTab":"קישור","lockRatio":"נעילת היחס","menu":"תכונות התמונה","resetSize":"×יפוס הגודל","title":"מ×פייני התמונה","titleButton":"מ×פיני כפתור תמונה","upload":"העל××”","urlMissing":"כתובת התמונה חסרה.","vSpace":"מרווח ×× ×›×™","validateBorder":"שדה המסגרת חייב להיות מספר של×.","validateHSpace":"שדה המרווח ×”×ופקי חייב להיות מספר של×.","validateVSpace":"שדה המרווח ×”×× ×›×™ חייב להיות מספר של×."},"indent":{"indent":"הגדלת ×”×–×—×”","outdent":"הקטנת ×”×–×—×”"},"smiley":{"options":"×פשרויות סמיילי×","title":"הוספת סמיילי","toolbar":"סמיילי"},"justify":{"block":"יישור לשוליי×","center":"מרכוז","left":"יישור לשמ×ל","right":"יישור לימין"},"language":{"button":"צור שפה","remove":"הסר שפה"},"link":{"acccessKey":"מקש גישה","advanced":"×פשרויות מתקדמות","advisoryContentType":"Content Type מוצע","advisoryTitle":"כותרת מוצעת","anchor":{"toolbar":"הוספת/עריכת נקודת עיגון","menu":"מ×פייני נקודת עיגון","title":"מ×פייני נקודת עיגון","name":"×©× ×œ× ×§×•×“×ª עיגון","errorName":"יש להקליד ×©× ×œ× ×§×•×“×ª עיגון","remove":"מחיקת נקודת עיגון"},"anchorId":"עפ\"×™ זיהוי (ID) ×”×למנט","anchorName":"עפ\"×™ ×©× ×”×¢×•×’×Ÿ","charset":"קידוד המש×ב המקושר","cssClasses":"גיליונות עיצוב קבוצות","emailAddress":"כתובת הדו×\"ל","emailBody":"גוף ההודעה","emailSubject":"× ×•×©× ×”×”×•×“×¢×”","id":"זיהוי (ID)","info":"מידע על הקישור","langCode":"קוד שפה","langDir":"כיוון שפה","langDirLTR":"שמ×ל לימין (LTR)","langDirRTL":"ימין לשמ×ל (RTL)","menu":"מ×פייני קישור","name":"ש×","noAnchors":"(×ין ×¢×•×’× ×™× ×–×ž×™× ×™× ×‘×“×£)","noEmail":"יש להקליד ×ת כתובת הדו×\"ל","noUrl":"יש להקליד ×ת כתובת הקישור (URL)","other":"<×חר>","popupDependent":"תלוי (Netscape)","popupFeatures":"תכונות החלון הקופץ","popupFullScreen":"מסך ×ž×œ× (IE)","popupLeft":"×ž×™×§×•× ×¦×“ שמ×ל","popupLocationBar":"סרגל כתובת","popupMenuBar":"סרגל תפריט","popupResizable":"שינוי גודל","popupScrollBars":"ניתן לגלילה","popupStatusBar":"סרגל חיווי","popupToolbar":"סרגל הכלי×","popupTop":"×ž×™×§×•× ×¦×“ עליון","rel":"קשר גומלין","selectAnchor":"בחירת עוגן","styles":"סגנון","tabIndex":"מספר ט×ב","target":"מטרה","targetFrame":"<מסגרת>","targetFrameName":"×©× ×ž×¡×’×¨×ª היעד","targetPopup":"<חלון קופץ>","targetPopupName":"×©× ×”×—×œ×•×Ÿ הקופץ","title":"קישור","toAnchor":"עוגן בעמוד ×–×”","toEmail":"דו×\"ל","toUrl":"כתובת (URL)","toolbar":"הוספת/עריכת קישור","type":"סוג קישור","unlink":"הסרת הקישור","upload":"העל××”"},"list":{"bulletedlist":"רשימת נקודות","numberedlist":"רשימה ממוספרת"},"liststyle":{"armenian":"ספרות ×רמניות","bulletedTitle":"תכונות רשימת תבליטי×","circle":"עיגול ריק","decimal":"ספרות (1, 2, 3 וכו')","decimalLeadingZero":"ספרות ×¢× 0 בהתחלה (01, 02, 03 וכו')","disc":"עיגול מל×","georgian":"ספרות ×’×™×ורגיות (an, ban, gan וכו')","lowerAlpha":"×ותיות ×נגליות קטנות (a, b, c, d, e וכו')","lowerGreek":"×ותיות יווניות קטנות (alpha, beta, gamma וכו')","lowerRoman":"ספירה רומית ב×ותיות קטנות (i, ii, iii, iv, v וכו')","none":"לל×","notset":"<×œ× × ×§×‘×¢>","numberedTitle":"תכונות רשימה ממוספרת","square":"ריבוע","start":"תחילת מספור","type":"סוג","upperAlpha":"×ותיות ×נגליות גדולות (A, B, C, D, E וכו')","upperRoman":"ספירה רומיות ב×ותיות גדולות (I, II, III, IV, V וכו')","validateStartNumber":"שדה תחילת המספור חייב להכיל מספר של×."},"magicline":{"title":"הכנס פסקה ×›×ן"},"maximize":{"maximize":"הגדלה למקסימו×","minimize":"הקטנה למינימו×"},"newpage":{"toolbar":"דף חדש"},"pagebreak":{"alt":"שבירת דף","toolbar":"הוספת שבירת דף"},"pastetext":{"button":"הדבקה כטקסט פשוט","title":"הדבקה כטקסט פשוט"},"pastefromword":{"confirmCleanup":"נר××” הטקסט שבכוונתך להדביק מקורו בקובץ וורד. ×”×× ×‘×¨×¦×•× ×š לנקות ×ותו ×˜×¨× ×”×”×“×‘×§×”?","error":"×œ× × ×™×ª×Ÿ ×”×™×” לנקות ×ת המידע בשל תקלה פנימית.","title":"הדבקה מ-Word","toolbar":"הדבקה מ-Word"},"preview":{"preview":"תצוגה מקדימה"},"print":{"toolbar":"הדפסה"},"removeformat":{"toolbar":"הסרת העיצוב"},"save":{"toolbar":"שמירה"},"selectall":{"toolbar":"בחירת הכל"},"showblocks":{"toolbar":"הצגת בלוקי×"},"sourcearea":{"toolbar":"מקור"},"specialchar":{"options":"×פשרויות ×ª×•×•×™× ×ž×™×•×—×“×™×","title":"בחירת תו מיוחד","toolbar":"הוספת תו מיוחד"},"scayt":{"btn_about":"×ודות SCAYT","btn_dictionaries":"מילון","btn_disable":"בטל SCAYT","btn_enable":"×פשר SCAYT","btn_langs":"שפות","btn_options":"×פשרויות","text_title":""},"stylescombo":{"label":"סגנון","panelTitle":"סגנונות פורמט","panelTitle1":"סגנונות בלוק","panelTitle2":"סגנונות רצף","panelTitle3":"סגנונות ×ובייקט"},"table":{"border":"גודל מסגרת","caption":"כיתוב","cell":{"menu":"מ×פייני ת×","insertBefore":"הוספת ×ª× ×œ×¤× ×™","insertAfter":"הוספת ×ª× ×חרי","deleteCell":"מחיקת ת××™×","merge":"מיזוג ת××™×","mergeRight":"מזג ימינה","mergeDown":"מזג למטה","splitHorizontal":"פיצול ×ª× ×ופקית","splitVertical":"פיצול ×ª× ×נכית","title":"תכונות הת×","cellType":"סוג הת×","rowSpan":"מתיחת השורות","colSpan":"מתיחת הת××™×","wordWrap":"מניעת גלישת שורות","hAlign":"יישור ×ופקי","vAlign":"יישור ×× ×›×™","alignBaseline":"שורת בסיס","bgColor":"צבע רקע","borderColor":"צבע מסגרת","data":"מידע","header":"כותרת","yes":"כן","no":"ל×","invalidWidth":"שדה רוחב ×”×ª× ×—×™×™×‘ להיות מספר.","invalidHeight":"שדה גובה ×”×ª× ×—×™×™×‘ להיות מספר.","invalidRowSpan":"שדה מתיחת השורות חייב להיות מספר של×.","invalidColSpan":"שדה מתיחת העמודות חייב להיות מספר של×.","chooseColor":"בחר"},"cellPad":"ריפוד ת×","cellSpace":"מרווח ת×","column":{"menu":"עמודה","insertBefore":"הוספת עמודה לפני","insertAfter":"הוספת עמודה ×חרי","deleteColumn":"מחיקת עמודות"},"columns":"עמודות","deleteTable":"מחק טבלה","headers":"כותרות","headersBoth":"שניה×","headersColumn":"עמודה ר×שונה","headersNone":"×ין","headersRow":"שורה ר×שונה","invalidBorder":"שדה גודל המסגרת חייב להיות מספר.","invalidCellPadding":"שדה ריפוד הת××™× ×—×™×™×‘ להיות מספר חיובי.","invalidCellSpacing":"שדה ריווח הת××™× ×—×™×™×‘ להיות מספר חיובי.","invalidCols":"שדה מספר העמודות חייב להיות מספר גדול מ 0.","invalidHeight":"שדה גובה הטבלה חייב להיות מספר.","invalidRows":"שדה מספר השורות חייב להיות מספר גדול מ 0.","invalidWidth":"שדה רוחב הטבלה חייב להיות מספר.","menu":"מ×פייני טבלה","row":{"menu":"שורה","insertBefore":"הוספת שורה לפני","insertAfter":"הוספת שורה ×חרי","deleteRow":"מחיקת שורות"},"rows":"שורות","summary":"תקציר","title":"מ×פייני טבלה","toolbar":"טבלה","widthPc":"×חוז","widthPx":"פיקסלי×","widthUnit":"יחידת רוחב"},"undo":{"redo":"חזרה על צעד ×חרון","undo":"ביטול צעד ×חרון"},"wsc":{"btnIgnore":"התעלמות","btnIgnoreAll":"התעלמות מהכל","btnReplace":"החלפה","btnReplaceAll":"החלפת הכל","btnUndo":"החזרה","changeTo":"שינוי ל","errorLoading":"שגי××” בהעל×ת השירות: %s.","ieSpellDownload":"בודק ×”×יות ×œ× ×ž×•×ª×§×Ÿ, ×”×× ×œ×”×•×¨×™×“×•?","manyChanges":"בדיקות ×יות הסתיימה: %1 ×ž×™×œ×™× ×©×•× ×•","noChanges":"בדיקות ×יות הסתיימה: ×œ× ×©×•× ×ª×” ××£ מילה","noMispell":"בדיקות ×יות הסתיימה: ×œ× × ×ž×¦×ו שגי×ות כתיב","noSuggestions":"- ×ין הצעות -","notAvailable":"×œ× × ×ž×¦× ×©×™×¨×•×ª זמין.","notInDic":"×œ× × ×ž×¦× ×‘×ž×™×œ×•×Ÿ","oneChange":"בדיקות ×יות הסתיימה: שונתה מילה ×חת","progress":"בודק ×”×יות בתהליך בדיקה....","title":"בדיקת ×יות","toolbar":"בדיקת ×יות"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/hi.js b/wqflask/wqflask/static/packages/ckeditor/lang/hi.js
deleted file mode 100644
index d95a7d05..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/hi.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['hi']={"editor":"रिच टेकà¥à¤¸à¥à¤Ÿ à¤à¤¡à¤¿à¤Ÿà¤°","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"मदद के लिये ALT 0 दबाà¤","browseServer":"सरà¥à¤µà¤° बà¥à¤°à¤¾à¤‰à¥› करें","url":"URL","protocol":"पà¥à¤°à¥‹à¤Ÿà¥‹à¤•à¥‰à¤²","upload":"अपलोड","uploadSubmit":"इसे सरà¥à¤µà¤° को भेजें","image":"तसà¥à¤µà¥€à¤°","flash":"फ़à¥à¤²à¥ˆà¤¶","form":"फ़ॉरà¥à¤®","checkbox":"चॅक बॉकà¥à¤¸","radio":"रेडिओ बटन","textField":"टेकà¥à¤¸à¥à¤Ÿ फ़ीलà¥à¤¡","textarea":"टेकà¥à¤¸à¥à¤Ÿ à¤à¤°à¤¿à¤¯à¤¾","hiddenField":"गà¥à¤ªà¥à¤¤ फ़ीलà¥à¤¡","button":"बटन","select":"चà¥à¤¨à¤¾à¤µ फ़ीलà¥à¤¡","imageButton":"तसà¥à¤µà¥€à¤° बटन","notSet":"<सॅट नहीं>","id":"Id","name":"नाम","langDir":"भाषा लिखने की दिशा","langDirLtr":"बायें से दायें (LTR)","langDirRtl":"दायें से बायें (RTL)","langCode":"भाषा कोड","longDescr":"अधिक विवरण के लिठURL","cssClass":"सà¥à¤Ÿà¤¾à¤‡à¤²-शीट कà¥à¤²à¤¾à¤¸","advisoryTitle":"परामरà¥à¤¶ शीरà¥à¤¶à¤•","cssStyle":"सà¥à¤Ÿà¤¾à¤‡à¤²","ok":"ठीक है","cancel":"रदà¥à¤¦ करें","close":"Close","preview":"पà¥à¤°à¥€à¤µà¥à¤¯à¥‚","resize":"Resize","generalTab":"सामानà¥à¤¯","advancedTab":"à¤à¤¡à¥à¤µà¤¾à¤¨à¥à¤¸à¥à¤¡","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"टारà¥à¤—ेट","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"बायें से दायें (LTR)","langDirRTL":"दायें से बायें (RTL)","styles":"सà¥à¤Ÿà¤¾à¤‡à¤²","cssClasses":"सà¥à¤Ÿà¤¾à¤‡à¤²-शीट कà¥à¤²à¤¾à¤¸","width":"चौड़ाई","height":"ऊà¤à¤šà¤¾à¤ˆ","align":"à¤à¤²à¤¾à¤‡à¤¨","alignLeft":"दायें","alignRight":"दायें","alignCenter":"बीच में","alignJustify":"बà¥à¤²à¥‰à¤• जसà¥à¤Ÿà¥€à¥žà¤¾à¤ˆ","alignTop":"ऊपर","alignMiddle":"मधà¥à¤¯","alignBottom":"नीचे","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"बोलà¥à¤¡","italic":"इटैलिक","strike":"सà¥à¤Ÿà¥à¤°à¤¾à¤‡à¤• थà¥à¤°à¥‚","subscript":"अधोलेख","superscript":"अभिलेख","underline":"रेखांकण"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"बà¥à¤²à¥‰à¤•-कोट"},"clipboard":{"copy":"कॉपी","copyError":"आपके बà¥à¤°à¤¾à¤†à¤‰à¥›à¤° की सà¥à¤°à¤•à¥à¤·à¤¾ सॅटिनà¥à¤—à¥à¤¸ ने कॉपी करने की अनà¥à¤®à¤¤à¤¿ नहीं पà¥à¤°à¤¦à¤¾à¤¨ की है। (Ctrl/Cmd+C) का पà¥à¤°à¤¯à¥‹à¤— करें।","cut":"कट","cutError":"आपके बà¥à¤°à¤¾à¤‰à¥›à¤° की सà¥à¤°à¤•à¥à¤·à¤¾ सॅटिनà¥à¤—à¥à¤¸ ने कट करने की अनà¥à¤®à¤¤à¤¿ नहीं पà¥à¤°à¤¦à¤¾à¤¨ की है। (Ctrl/Cmd+X) का पà¥à¤°à¤¯à¥‹à¤— करें।","paste":"पेसà¥à¤Ÿ","pasteArea":"Paste Area","pasteMsg":"Ctrl/Cmd+V का पà¥à¤°à¤¯à¥‹à¤— करके पेसà¥à¤Ÿ करें और ठीक है करें.","securityMsg":"आपके बà¥à¤°à¤¾à¤‰à¥›à¤° की सà¥à¤°à¤•à¥à¤·à¤¾ आपके बà¥à¤°à¤¾à¤‰à¥›à¤° की सà¥à¤°Kश सैटिंग के कारण, à¤à¤¡à¤¿à¤Ÿà¤° आपके कà¥à¤²à¤¿à¤ªà¤¬à¥‹à¤°à¥à¤¡ डेटा को नहीं पा सकता है. आपको उसे इस विनà¥à¤¡à¥‹ में दोबारा पेसà¥à¤Ÿ करना होगा.","title":"पेसà¥à¤Ÿ"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"सà¥à¤µà¤šà¤¾à¤²à¤¿à¤¤","bgColorTitle":"बैकà¥à¤—à¥à¤°à¤¾à¤‰à¤¨à¥à¤¡ रंग","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"और रंग...","panelTitle":"Colors","textColorTitle":"टेकà¥à¤¸à¥à¤Ÿ रंग"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"टॅमà¥à¤ªà¥à¤²à¥‡à¤Ÿ","emptyListMsg":"(कोई टॅमà¥à¤ªà¥à¤²à¥‡à¤Ÿ डिफ़ाइन नहीं किया गया है)","insertOption":"मूल शबà¥à¤¦à¥‹à¤‚ को बदलें","options":"Template Options","selectPromptMsg":"à¤à¤¡à¤¿à¤Ÿà¤° में ओपन करने हेतॠटॅमà¥à¤ªà¥à¤²à¥‡à¤Ÿ चà¥à¤¨à¥‡à¤‚(वरà¥à¤¤à¤®à¤¾à¤¨ कनà¥à¤Ÿà¥…नà¥à¤Ÿ सेव नहीं होंगे):","title":"कनà¥à¤Ÿà¥‡à¤¨à¥à¤Ÿ टॅमà¥à¤ªà¥à¤²à¥‡à¤Ÿ"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"परामरà¥à¤¶ शीरà¥à¤¶à¤•","cssClassInputLabel":"सà¥à¤Ÿà¤¾à¤‡à¤²-शीट कà¥à¤²à¤¾à¤¸","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"बायें से दायें (LTR)","langDirLabel":"भाषा लिखने की दिशा","langDirRTLLabel":"दायें से बायें (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"सà¥à¤Ÿà¤¾à¤‡à¤²","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"à¤à¤¡à¤¿à¤Ÿà¤° टूलबार"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"खोजें","findOptions":"Find Options","findWhat":"यह खोजें:","matchCase":"केस मिलायें","matchCyclic":"Match cyclic","matchWord":"पूरा शबà¥à¤¦ मिलायें","notFoundMsg":"आपके दà¥à¤µà¤¾à¤°à¤¾ दिया गया टेकà¥à¤¸à¥à¤Ÿ नहीं मिला","replace":"रीपà¥à¤²à¥‡à¤¸","replaceAll":"सभी रिपà¥à¤²à¥‡à¤¸ करें","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"इससे रिपà¥à¤²à¥‡à¤¸ करें:","title":"खोजें और बदलें"},"fakeobjects":{"anchor":"à¤à¤‚कर इनà¥à¤¸à¤°à¥à¤Ÿ/संपादन","flash":"Flash Animation","hiddenfield":"गà¥à¤ªà¥à¤¤ फ़ीलà¥à¤¡","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs नीचे","alignAbsMiddle":"Abs ऊपर","alignBaseline":"मूल रेखा","alignTextTop":"टेकà¥à¤¸à¥à¤Ÿ ऊपर","bgcolor":"बैकà¥à¤—à¥à¤°à¤¾à¤‰à¤¨à¥à¤¡ रंग","chkFull":"Allow Fullscreen","chkLoop":"लूप","chkMenu":"फ़à¥à¤²à¥ˆà¤¶ मॅनà¥à¤¯à¥‚ का पà¥à¤°à¤¯à¥‹à¤— करें","chkPlay":"ऑटो पà¥à¤²à¥‡","flashvars":"Variables for Flash","hSpace":"हॉरिज़ॉनà¥à¤Ÿà¤² सà¥à¤ªà¥‡à¤¸","properties":"फ़à¥à¤²à¥ˆà¤¶ पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"सà¥à¤•à¥‡à¤²","scaleAll":"सभी दिखायें","scaleFit":"बिलà¥à¤•à¥à¤² फ़िट","scaleNoBorder":"कोई बॉरà¥à¤¡à¤° नहीं","title":"फ़à¥à¤²à¥ˆà¤¶ पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","vSpace":"वरà¥à¤Ÿà¤¿à¤•à¤² सà¥à¤ªà¥‡à¤¸","validateHSpace":"HSpace must be a number.","validateSrc":"लिंक URL टाइप करें","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"साइज़","voiceLabel":"Font Size","panelTitle":"साइज़"},"label":"फ़ॉनà¥à¤Ÿ","panelTitle":"फ़ॉनà¥à¤Ÿ","voiceLabel":"फ़ॉनà¥à¤Ÿ"},"forms":{"button":{"title":"बटन पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","text":"टेकà¥à¤¸à¥à¤Ÿ (वैलà¥à¤¯à¥‚)","type":"पà¥à¤°à¤•à¤¾à¤°","typeBtn":"बटन","typeSbm":"सबà¥à¤®à¤¿à¤Ÿ","typeRst":"रिसेट"},"checkboxAndRadio":{"checkboxTitle":"चॅक बॉकà¥à¤¸ पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","radioTitle":"रेडिओ बटन पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","value":"वैलà¥à¤¯à¥‚","selected":"सॅलॅकà¥à¤Ÿà¥…ड"},"form":{"title":"फ़ॉरà¥à¤® पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","menu":"फ़ॉरà¥à¤® पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","action":"कà¥à¤°à¤¿à¤¯à¤¾","method":"तरीका","encoding":"Encoding"},"hidden":{"title":"गà¥à¤ªà¥à¤¤ फ़ीलà¥à¤¡ पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","name":"नाम","value":"वैलà¥à¤¯à¥‚"},"select":{"title":"चà¥à¤¨à¤¾à¤µ फ़ीलà¥à¤¡ पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","selectInfo":"सूचना","opAvail":"उपलबà¥à¤§ विकलà¥à¤ª","value":"वैलà¥à¤¯à¥‚","size":"साइज़","lines":"पंकà¥à¤¤à¤¿à¤¯à¤¾à¤","chkMulti":"à¤à¤• से जà¥à¤¯à¤¾à¤¦à¤¾ विकलà¥à¤ª चà¥à¤¨à¤¨à¥‡ दें","opText":"टेकà¥à¤¸à¥à¤Ÿ","opValue":"वैलà¥à¤¯à¥‚","btnAdd":"जोड़ें","btnModify":"बदलें","btnUp":"ऊपर","btnDown":"नीचे","btnSetValue":"चà¥à¤¨à¥€ गई वैलà¥à¤¯à¥‚ सॅट करें","btnDelete":"डिलीट"},"textarea":{"title":"टेकà¥à¤¸à¥à¤¤ à¤à¤°à¤¿à¤¯à¤¾ पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","cols":"कालम","rows":"पंकà¥à¤¤à¤¿à¤¯à¤¾à¤‚"},"textfield":{"title":"टेकà¥à¤¸à¥à¤Ÿ फ़ीलà¥à¤¡ पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","name":"नाम","value":"वैलà¥à¤¯à¥‚","charWidth":"करॅकà¥à¤Ÿà¤° की चौà¥à¤¾à¤ˆ","maxChars":"अधिकतम करॅकà¥à¤Ÿà¤°","type":"टाइप","typeText":"टेकà¥à¤¸à¥à¤Ÿ","typePass":"पासà¥à¤µà¤°à¥à¤¡","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"फ़ॉरà¥à¤®à¥ˆà¤Ÿ","panelTitle":"फ़ॉरà¥à¤®à¥ˆà¤Ÿ","tag_address":"पता","tag_div":"शीरà¥à¤·à¤• (DIV)","tag_h1":"शीरà¥à¤·à¤• 1","tag_h2":"शीरà¥à¤·à¤• 2","tag_h3":"शीरà¥à¤·à¤• 3","tag_h4":"शीरà¥à¤·à¤• 4","tag_h5":"शीरà¥à¤·à¤• 5","tag_h6":"शीरà¥à¤·à¤• 6","tag_p":"साधारण","tag_pre":"फ़ॉरà¥à¤®à¥ˆà¤Ÿà¥…ड"},"horizontalrule":{"toolbar":"हॉरिज़ॉनà¥à¤Ÿà¤² रेखा इनà¥à¤¸à¤°à¥à¤Ÿ करें"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"तसà¥à¤µà¥€à¤° का URL टाइप करें ","alt":"वैकलà¥à¤ªà¤¿à¤• टेकà¥à¤¸à¥à¤Ÿ","border":"बॉरà¥à¤¡à¤°","btnUpload":"इसे सरà¥à¤µà¤° को भेजें","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"हॉरिज़ॉनà¥à¤Ÿà¤² सà¥à¤ªà¥‡à¤¸","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"तसà¥à¤µà¥€à¤° की जानकारी","linkTab":"लिंक","lockRatio":"लॉक अनà¥à¤ªà¤¾à¤¤","menu":"तसà¥à¤µà¥€à¤° पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","resetSize":"रीसॅट साइज़","title":"तसà¥à¤µà¥€à¤° पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","titleButton":"तसà¥à¤µà¥€à¤° बटन पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","upload":"अपलोड","urlMissing":"Image source URL is missing.","vSpace":"वरà¥à¤Ÿà¤¿à¤•à¤² सà¥à¤ªà¥‡à¤¸","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"इनà¥à¤¡à¥…नà¥à¤Ÿ बà¥à¤¾à¤¯à¥‡à¤‚","outdent":"इनà¥à¤¡à¥…नà¥à¤Ÿ कम करें"},"smiley":{"options":"Smiley Options","title":"सà¥à¤®à¤¾à¤‡à¤²à¥€ इनà¥à¤¸à¤°à¥à¤Ÿ करें","toolbar":"सà¥à¤®à¤¾à¤‡à¤²à¥€"},"justify":{"block":"बà¥à¤²à¥‰à¤• जसà¥à¤Ÿà¥€à¥žà¤¾à¤ˆ","center":"बीच में","left":"बायीं तरफ","right":"दायीं तरफ"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"à¤à¤•à¥à¤¸à¥…स की","advanced":"à¤à¤¡à¥à¤µà¤¾à¤¨à¥à¤¸à¥à¤¡","advisoryContentType":"परामरà¥à¤¶ कनà¥à¤Ÿà¥…नà¥à¤Ÿ पà¥à¤°à¤•à¤¾à¤°","advisoryTitle":"परामरà¥à¤¶ शीरà¥à¤¶à¤•","anchor":{"toolbar":"à¤à¤‚कर इनà¥à¤¸à¤°à¥à¤Ÿ/संपादन","menu":"à¤à¤‚कर पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","title":"à¤à¤‚कर पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","name":"à¤à¤‚कर का नाम","errorName":"à¤à¤‚कर का नाम टाइप करें","remove":"Remove Anchor"},"anchorId":"à¤à¤²à¥€à¤®à¥…नà¥à¤Ÿ Id से","anchorName":"à¤à¤‚कर नाम से","charset":"लिंक रिसोरà¥à¤¸ करॅकà¥à¤Ÿà¤° सॅट","cssClasses":"सà¥à¤Ÿà¤¾à¤‡à¤²-शीट कà¥à¤²à¤¾à¤¸","emailAddress":"ई-मेल पता","emailBody":"संदेश","emailSubject":"संदेश विषय","id":"Id","info":"लिंक ","langCode":"भाषा लिखने की दिशा","langDir":"भाषा लिखने की दिशा","langDirLTR":"बायें से दायें (LTR)","langDirRTL":"दायें से बायें (RTL)","menu":"लिंक संपादन","name":"नाम","noAnchors":"(डॉकà¥à¤¯à¥‚मॅनà¥à¤Ÿ में à¤à¤‚करà¥à¤¸ की संखà¥à¤¯à¤¾)","noEmail":"ई-मेल पता टाइप करें","noUrl":"लिंक URL टाइप करें","other":"<अनà¥à¤¯>","popupDependent":"डिपेनà¥à¤¡à¥…नà¥à¤Ÿ (Netscape)","popupFeatures":"पॉप-अप विनà¥à¤¡à¥‹ फ़ीचरà¥à¤¸","popupFullScreen":"फ़à¥à¤² सà¥à¤•à¥à¤°à¥€à¤¨ (IE)","popupLeft":"बायीं तरफ","popupLocationBar":"लोकेशन बार","popupMenuBar":"मॅनà¥à¤¯à¥‚ बार","popupResizable":"Resizable","popupScrollBars":"सà¥à¤•à¥à¤°à¥‰à¤² बार","popupStatusBar":"सà¥à¤Ÿà¥‡à¤Ÿà¤¸ बार","popupToolbar":"टूल बार","popupTop":"दायीं तरफ","rel":"Relationship","selectAnchor":"à¤à¤‚कर चà¥à¤¨à¥‡à¤‚","styles":"सà¥à¤Ÿà¤¾à¤‡à¤²","tabIndex":"टैब इनà¥à¤¡à¥…कà¥à¤¸","target":"टारà¥à¤—ेट","targetFrame":"<फ़à¥à¤°à¥‡à¤®>","targetFrameName":"टारà¥à¤—ेट फ़à¥à¤°à¥‡à¤® का नाम","targetPopup":"<पॉप-अप विनà¥à¤¡à¥‹>","targetPopupName":"पॉप-अप विनà¥à¤¡à¥‹ का नाम","title":"लिंक","toAnchor":"इस पेज का à¤à¤‚कर","toEmail":"ई-मेल","toUrl":"URL","toolbar":"लिंक इनà¥à¤¸à¤°à¥à¤Ÿ/संपादन","type":"लिंक पà¥à¤°à¤•à¤¾à¤°","unlink":"लिंक हटायें","upload":"अपलोड"},"list":{"bulletedlist":"बà¥à¤²à¥…ट सूची","numberedlist":"अंकीय सूची"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"मेकà¥à¤¸à¤¿à¤®à¤¾à¤ˆà¤œà¤¼","minimize":"मिनिमाईज़"},"newpage":{"toolbar":"नया पेज"},"pagebreak":{"alt":"पेज बà¥à¤°à¥‡à¤•","toolbar":"पेज बà¥à¤°à¥‡à¤• इनà¥à¤¸à¤°à¥à¤Ÿà¥ करें"},"pastetext":{"button":"पेसà¥à¤Ÿ (सादा टॅकà¥à¤¸à¥à¤Ÿ)","title":"पेसà¥à¤Ÿ (सादा टॅकà¥à¤¸à¥à¤Ÿ)"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"पेसà¥à¤Ÿ (वरà¥à¤¡ से)","toolbar":"पेसà¥à¤Ÿ (वरà¥à¤¡ से)"},"preview":{"preview":"पà¥à¤°à¥€à¤µà¥à¤¯à¥‚"},"print":{"toolbar":"पà¥à¤°à¤¿à¤¨à¥à¤Ÿ"},"removeformat":{"toolbar":"फ़ॉरà¥à¤®à¥ˆà¤Ÿ हटायें"},"save":{"toolbar":"सेव"},"selectall":{"toolbar":"सब सॅलॅकà¥à¤Ÿ करें"},"showblocks":{"toolbar":"बà¥à¤²à¥‰à¤• दिखायें"},"sourcearea":{"toolbar":"सोरà¥à¤¸"},"specialchar":{"options":"Special Character Options","title":"विशेष करॅकà¥à¤Ÿà¤° चà¥à¤¨à¥‡à¤‚","toolbar":"विशेष करॅकà¥à¤Ÿà¤° इनà¥à¤¸à¤°à¥à¤Ÿ करें"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"सà¥à¤Ÿà¤¾à¤‡à¤²","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"बॉरà¥à¤¡à¤° साइज़","caption":"शीरà¥à¤·à¤•","cell":{"menu":"खाना","insertBefore":"पहले सैल डालें","insertAfter":"बाद में सैल डालें","deleteCell":"सैल डिलीट करें","merge":"सैल मिलायें","mergeRight":"बाà¤à¤¯à¤¾ विलय","mergeDown":"नीचे विलय करें","splitHorizontal":"सैल को कà¥à¤·à¥ˆà¤¤à¤¿à¤œ सà¥à¤¥à¤¿à¤¤à¤¿ में विभाजित करें","splitVertical":"सैल को लमà¥à¤¬à¤¾à¤•à¤¾à¤° में विभाजित करें","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"सैल पैडिंग","cellSpace":"सैल अंतर","column":{"menu":"कालम","insertBefore":"पहले कालम डालें","insertAfter":"बाद में कालम डालें","deleteColumn":"कालम डिलीट करें"},"columns":"कालम","deleteTable":"टेबल डिलीट करें","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"टेबल पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","row":{"menu":"पंकà¥à¤¤à¤¿","insertBefore":"पहले पंकà¥à¤¤à¤¿ डालें","insertAfter":"बाद में पंकà¥à¤¤à¤¿ डालें","deleteRow":"पंकà¥à¤¤à¤¿à¤¯à¤¾à¤ डिलीट करें"},"rows":"पंकà¥à¤¤à¤¿à¤¯à¤¾à¤","summary":"सारांश","title":"टेबल पà¥à¤°à¥‰à¤ªà¤°à¥à¤Ÿà¥€à¥›","toolbar":"टेबल","widthPc":"पà¥à¤°à¤¤à¤¿à¤¶à¤¤","widthPx":"पिकà¥à¤¸à¥ˆà¤²","widthUnit":"width unit"},"undo":{"redo":"रीडू","undo":"अनà¥à¤¡à¥‚"},"wsc":{"btnIgnore":"इगà¥à¤¨à¥‹à¤°","btnIgnoreAll":"सभी इगà¥à¤¨à¥‹à¤° करें","btnReplace":"रिपà¥à¤²à¥‡à¤¸","btnReplaceAll":"सभी रिपà¥à¤²à¥‡à¤¸ करें","btnUndo":"अनà¥à¤¡à¥‚","changeTo":"इसमें बदलें","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"सà¥à¤ªà¥…ल-चॅकर इनà¥à¤¸à¥à¤Ÿà¤¾à¤² नहीं किया गया है। कà¥à¤¯à¤¾ आप इसे डाउनलोड करना चाहेंगे?","manyChanges":"वरà¥à¤¤à¤¨à¥€ की जाà¤à¤š : %1 शबà¥à¤¦ बदले गये","noChanges":"वरà¥à¤¤à¤¨à¥€ की जाà¤à¤š :कोई शबà¥à¤¦ नहीं बदला गया","noMispell":"वरà¥à¤¤à¤¨à¥€ की जाà¤à¤š : कोई गलत वरà¥à¤¤à¤¨à¥€ (सà¥à¤ªà¥…लिंग) नहीं पाई गई","noSuggestions":"- कोई सà¥à¤à¤¾à¤µ नहीं -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"शबà¥à¤¦à¤•à¥‹à¤¶ में नहीं","oneChange":"वरà¥à¤¤à¤¨à¥€ की जाà¤à¤š : à¤à¤• शबà¥à¤¦ बदला गया","progress":"वरà¥à¤¤à¤¨à¥€ की जाà¤à¤š (सà¥à¤ªà¥…ल-चॅक) जारी है...","title":"Spell Check","toolbar":"वरà¥à¤¤à¤¨à¥€ (सà¥à¤ªà¥‡à¤²à¤¿à¤‚ग) जाà¤à¤š"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/hr.js b/wqflask/wqflask/static/packages/ckeditor/lang/hr.js
deleted file mode 100644
index 5a001bab..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/hr.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['hr']={"editor":"Bogati ureÄ‘ivaÄ teksta, %1","editorPanel":"PloÄa Bogatog UreÄ‘ivaÄa Teksta","common":{"editorHelp":"Pritisni ALT 0 za pomoć","browseServer":"Pretraži server","url":"URL","protocol":"Protokol","upload":"PoÅ¡alji","uploadSubmit":"PoÅ¡alji na server","image":"Slika","flash":"Flash","form":"Forma","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<nije postavljeno>","id":"Id","name":"Naziv","langDir":"Smjer jezika","langDirLtr":"S lijeva na desno (LTR)","langDirRtl":"S desna na lijevo (RTL)","langCode":"Kôd jezika","longDescr":"DugaÄki opis URL","cssClass":"Klase stilova","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"PoniÅ¡ti","close":"Zatvori","preview":"Pregledaj","resize":"Povuci za promjenu veliÄine","generalTab":"Općenito","advancedTab":"Napredno","validateNumberFailed":"Ova vrijednost nije broj.","confirmNewPage":"Sve napravljene promjene će biti izgubljene ukoliko ih niste snimili. Sigurno želite uÄitati novu stranicu?","confirmCancel":"Neke od opcija su promjenjene. Sigurno želite zatvoriti ovaj prozor?","options":"Opcije","target":"OdrediÅ¡te","targetNew":"Novi prozor (_blank)","targetTop":"VrÅ¡ni prozor (_top)","targetSelf":"Isti prozor (_self)","targetParent":"Roditeljski prozor (_parent)","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","styles":"Stil","cssClasses":"Klase stilova","width":"Å irina","height":"Visina","align":"Poravnanje","alignLeft":"Lijevo","alignRight":"Desno","alignCenter":"SrediÅ¡nje","alignJustify":"Blok poravnanje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dolje","alignNone":"None","invalidValue":"Neispravna vrijednost.","invalidHeight":"Visina mora biti broj.","invalidWidth":"Å irina mora biti broj.","invalidCssLength":"Vrijednost odreÄ‘ena za \"%1\" polje mora biti pozitivni broj sa ili bez važećih CSS mjernih jedinica (px, %, in, cm, mm, em, ex, pt ili pc).","invalidHtmlLength":"Vrijednost odreÄ‘ena za \"%1\" polje mora biti pozitivni broj sa ili bez važećih HTML mjernih jedinica (px ili %).","invalidInlineStyle":"Vrijednost za linijski stil mora sadržavati jednu ili viÅ¡e definicija s formatom \"naziv:vrijednost\", odvojenih toÄka-zarezom.","cssLengthTooltip":"Unesite broj za vrijednost u pikselima ili broj s važećim CSS mjernim jedinicama (px, %, in, cm, mm, em, ex, pt ili pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupno</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"O CKEditoru","help":"Provjeri $1 za pomoć.","moreInfo":"Za informacije o licencama posjetite naÅ¡u web stranicu:","title":"O CKEditoru","userGuide":"VodiÄ za CKEditor korisnike"},"basicstyles":{"bold":"Podebljaj","italic":"Ukosi","strike":"Precrtano","subscript":"Subscript","superscript":"Superscript","underline":"Potcrtano"},"bidi":{"ltr":"Smjer teksta s lijeva na desno","rtl":"Smjer teksta s desna na lijevo"},"blockquote":{"toolbar":"Blockquote"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosne postavke VaÅ¡eg pretraživaÄa ne dozvoljavaju operacije automatskog kopiranja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Sigurnosne postavke VaÅ¡eg pretraživaÄa ne dozvoljavaju operacije automatskog izrezivanja. Molimo koristite kraticu na tipkovnici (Ctrl/Cmd+X).","paste":"Zalijepi","pasteArea":"Prostor za ljepljenje","pasteMsg":"Molimo zaljepite unutar doljnjeg okvira koristeći tipkovnicu (<STRONG>Ctrl/Cmd+V</STRONG>) i kliknite <STRONG>OK</STRONG>.","securityMsg":"Zbog sigurnosnih postavki VaÅ¡eg pretraživaÄa, editor nema direktan pristup VaÅ¡em meÄ‘uspremniku. Potrebno je ponovno zalijepiti tekst u ovaj prozor.","title":"Zalijepi"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatski","bgColorTitle":"Boja pozadine","colors":{"000":"Crna","800000":"Kesten","8B4513":"SmeÄ‘a","2F4F4F":"Tamno siva","008080":"Teal","000080":"Mornarska","4B0082":"Indigo","696969":"Tamno siva","B22222":"Vatrena cigla","A52A2A":"SmeÄ‘a","DAA520":"Zlatna","006400":"Tamno zelena","40E0D0":"Tirkizna","0000CD":"Srednje plava","800080":"LjubiÄasta","808080":"Siva","F00":"Crvena","FF8C00":"Tamno naranÄ‘asta","FFD700":"Zlatna","008000":"Zelena","0FF":"Cijan","00F":"Plava","EE82EE":"LjubiÄasta","A9A9A9":"Mutno siva","FFA07A":"Svijetli losos","FFA500":"NaranÄ‘asto","FFFF00":"Žuto","00FF00":"Limun","AFEEEE":"Blijedo tirkizna","ADD8E6":"Svijetlo plava","DDA0DD":"Å ljiva","D3D3D3":"Svijetlo siva","FFF0F5":"Lavanda rumeno","FAEBD7":"Antikno bijela","FFFFE0":"Svijetlo žuta","F0FFF0":"Med","F0FFFF":"Azurna","F0F8FF":"Alice plava","E6E6FA":"Lavanda","FFF":"Bijela"},"more":"ViÅ¡e boja...","panelTitle":"Boje","textColorTitle":"Boja teksta"},"colordialog":{"clear":"OÄisti","highlight":"Istaknuto","options":"Opcije boje","selected":"Odabrana boja","title":"Odaberi boju"},"templates":{"button":"PredloÅ¡ci","emptyListMsg":"(Nema definiranih predložaka)","insertOption":"Zamijeni trenutne sadržaje","options":"Opcije predložaka","selectPromptMsg":"Molimo odaberite predložak koji želite otvoriti<br>(stvarni sadržaj će biti izgubljen):","title":"PredloÅ¡ci sadržaja"},"contextmenu":{"options":"Opcije izbornika"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Savjetodavni naslov","cssClassInputLabel":"Klase stilova","edit":"Uredi DIV","inlineStyleInputLabel":"Stil u liniji","langDirLTRLabel":"S lijeva na desno (LTR)","langDirLabel":"Smjer jezika","langDirRTLLabel":"S desna na lijevo (RTL)","languageCodeInputLabel":"JeziÄni kod","remove":"Ukloni DIV","styleSelectLabel":"Stil","title":"Napravi DIV kontejner","toolbar":"Napravi DIV kontejner"},"toolbar":{"toolbarCollapse":"Smanji alatnu traku","toolbarExpand":"ProÅ¡iri alatnu traku","toolbarGroups":{"document":"Dokument","clipboard":"MeÄ‘uspremnik/PoniÅ¡ti","editing":"UreÄ‘ivanje","forms":"Forme","basicstyles":"Osnovni stilovi","paragraph":"Paragraf","links":"Veze","insert":"Umetni","styles":"Stilovi","colors":"Boje","tools":"Alatke"},"toolbars":"Alatne trake ureÄ‘ivaÄa teksta"},"elementspath":{"eleLabel":"Putanja elemenata","eleTitle":"%1 element"},"find":{"find":"PronaÄ‘i","findOptions":"Opcije traženja","findWhat":"PronaÄ‘i:","matchCase":"Usporedi mala/velika slova","matchCyclic":"Usporedi kružno","matchWord":"Usporedi cijele rijeÄi","notFoundMsg":"Traženi tekst nije pronaÄ‘en.","replace":"Zamijeni","replaceAll":"Zamijeni sve","replaceSuccessMsg":"Zamijenjeno %1 pojmova.","replaceWith":"Zamijeni s:","title":"PronaÄ‘i i zamijeni"},"fakeobjects":{"anchor":"Sidro","flash":"Flash animacija","hiddenfield":"Sakriveno polje","iframe":"IFrame","unknown":"Nepoznati objekt"},"flash":{"access":"Script Access","accessAlways":"Uvijek","accessNever":"Nikad","accessSameDomain":"Ista domena","alignAbsBottom":"Abs dolje","alignAbsMiddle":"Abs sredina","alignBaseline":"Bazno","alignTextTop":"Vrh teksta","bgcolor":"Boja pozadine","chkFull":"Omogući Fullscreen","chkLoop":"Ponavljaj","chkMenu":"Omogući Flash izbornik","chkPlay":"Auto Play","flashvars":"Varijable za Flash","hSpace":"HSpace","properties":"Flash svojstva","propertiesTab":"Svojstva","quality":"Kvaliteta","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Omjer","scaleAll":"Prikaži sve","scaleFit":"ToÄna veliÄina","scaleNoBorder":"Bez okvira","title":"Flash svojstva","vSpace":"VSpace","validateHSpace":"HSpace mora biti broj.","validateSrc":"Molimo upiÅ¡ite URL link","validateVSpace":"VSpace mora biti broj.","windowMode":"Vrsta prozora","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"VeliÄina","voiceLabel":"VeliÄina slova","panelTitle":"VeliÄina"},"label":"Font","panelTitle":"Font","voiceLabel":"Font"},"forms":{"button":{"title":"Button svojstva","text":"Tekst (vrijednost)","type":"Vrsta","typeBtn":"Gumb","typeSbm":"PoÅ¡alji","typeRst":"PoniÅ¡ti"},"checkboxAndRadio":{"checkboxTitle":"Checkbox svojstva","radioTitle":"Radio Button svojstva","value":"Vrijednost","selected":"Odabrano"},"form":{"title":"Form svojstva","menu":"Form svojstva","action":"Akcija","method":"Metoda","encoding":"Encoding"},"hidden":{"title":"Hidden Field svojstva","name":"Ime","value":"Vrijednost"},"select":{"title":"Selection svojstva","selectInfo":"Info","opAvail":"Dostupne opcije","value":"Vrijednost","size":"VeliÄina","lines":"linija","chkMulti":"Dozvoli viÅ¡estruki odabir","opText":"Tekst","opValue":"Vrijednost","btnAdd":"Dodaj","btnModify":"Promijeni","btnUp":"Gore","btnDown":"Dolje","btnSetValue":"Postavi kao odabranu vrijednost","btnDelete":"ObriÅ¡i"},"textarea":{"title":"Textarea svojstva","cols":"Kolona","rows":"Redova"},"textfield":{"title":"Text Field svojstva","name":"Ime","value":"Vrijednost","charWidth":"Å irina","maxChars":"NajviÅ¡e karaktera","type":"Vrsta","typeText":"Tekst","typePass":"Å ifra","typeEmail":"Email","typeSearch":"Traži","typeTel":"Broj telefona","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatirano"},"horizontalrule":{"toolbar":"Ubaci vodoravnu liniju"},"iframe":{"border":"Prikaži okvir IFrame-a","noUrl":"Unesite URL iframe-a","scrolling":"Omogući trake za skrolanje","title":"IFrame svojstva","toolbar":"IFrame"},"image":{"alertUrl":"Unesite URL slike","alt":"Alternativni tekst","border":"Okvir","btnUpload":"PoÅ¡alji na server","button2Img":"Želite li promijeniti odabrani gumb u jednostavnu sliku?","hSpace":"HSpace","img2Button":"Želite li promijeniti odabranu sliku u gumb?","infoTab":"Info slike","linkTab":"Link","lockRatio":"ZakljuÄaj odnos","menu":"Svojstva slika","resetSize":"ObriÅ¡i veliÄinu","title":"Svojstva slika","titleButton":"Image Button svojstva","upload":"PoÅ¡alji","urlMissing":"Nedostaje URL slike.","vSpace":"VSpace","validateBorder":"Okvir mora biti cijeli broj.","validateHSpace":"HSpace mora biti cijeli broj","validateVSpace":"VSpace mora biti cijeli broj."},"indent":{"indent":"Pomakni udesno","outdent":"Pomakni ulijevo"},"smiley":{"options":"Opcije smjeÅ¡ka","title":"Ubaci smjeÅ¡ka","toolbar":"SmjeÅ¡ko"},"justify":{"block":"Blok poravnanje","center":"SrediÅ¡nje poravnanje","left":"Lijevo poravnanje","right":"Desno poravnanje"},"language":{"button":"Namjesti jezik","remove":"Makni jezik"},"link":{"acccessKey":"Pristupna tipka","advanced":"Napredno","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory naslov","anchor":{"toolbar":"Ubaci/promijeni sidro","menu":"Svojstva sidra","title":"Svojstva sidra","name":"Ime sidra","errorName":"Molimo unesite ime sidra","remove":"Ukloni sidro"},"anchorId":"Po Id elementa","anchorName":"Po nazivu sidra","charset":"Kodna stranica povezanih resursa","cssClasses":"Stylesheet klase","emailAddress":"E-Mail adresa","emailBody":"Sadržaj poruke","emailSubject":"Naslov","id":"Id","info":"Link Info","langCode":"Smjer jezika","langDir":"Smjer jezika","langDirLTR":"S lijeva na desno (LTR)","langDirRTL":"S desna na lijevo (RTL)","menu":"Promijeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra)","noEmail":"Molimo upiÅ¡ite e-mail adresu","noUrl":"Molimo upiÅ¡ite URL link","other":"<drugi>","popupDependent":"Ovisno (Netscape)","popupFeatures":"Mogućnosti popup prozora","popupFullScreen":"Cijeli ekran (IE)","popupLeft":"Lijeva pozicija","popupLocationBar":"Traka za lokaciju","popupMenuBar":"Izborna traka","popupResizable":"Promjenjiva veliÄina","popupScrollBars":"Scroll traka","popupStatusBar":"Statusna traka","popupToolbar":"Traka s alatima","popupTop":"Gornja pozicija","rel":"Veza","selectAnchor":"Odaberi sidro","styles":"Stil","tabIndex":"Tab Indeks","target":"Meta","targetFrame":"<okvir>","targetFrameName":"Ime ciljnog okvira","targetPopup":"<popup prozor>","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toolbar":"Ubaci/promijeni link","type":"Link vrsta","unlink":"Ukloni link","upload":"PoÅ¡alji"},"list":{"bulletedlist":"ObiÄna lista","numberedlist":"BrojÄana lista"},"liststyle":{"armenian":"Armenijska numeracija","bulletedTitle":"Svojstva liste","circle":"Krug","decimal":"Decimalna numeracija (1, 2, 3, itd.)","decimalLeadingZero":"Decimalna s vodećom nulom (01, 02, 03, itd)","disc":"Disk","georgian":"Gruzijska numeracija(an, ban, gan, etc.)","lowerAlpha":"Znakovi mala slova (a, b, c, d, e, itd.)","lowerGreek":"GrÄka numeracija mala slova (alfa, beta, gama, itd).","lowerRoman":"Romanska numeracija mala slova (i, ii, iii, iv, v, itd.)","none":"Bez","notset":"<nije odreÄ‘en>","numberedTitle":"Svojstva brojÄane liste","square":"Kvadrat","start":"PoÄetak","type":"Vrsta","upperAlpha":"Znakovi velika slova (A, B, C, D, E, itd.)","upperRoman":"Romanska numeracija velika slova (I, II, III, IV, V, itd.)","validateStartNumber":"PoÄetak brojÄane liste mora biti cijeli broj."},"magicline":{"title":"Ubaci paragraf ovdje"},"maximize":{"maximize":"Povećaj","minimize":"Smanji"},"newpage":{"toolbar":"Nova stranica"},"pagebreak":{"alt":"Prijelom stranice","toolbar":"Ubaci prijelom stranice"},"pastetext":{"button":"Zalijepi kao Äisti tekst","title":"Zalijepi kao Äisti tekst"},"pastefromword":{"confirmCleanup":"Tekst koji želite zalijepiti Äini se da je kopiran iz Worda. Želite li prije oÄistiti tekst?","error":"Nije moguće oÄistiti podatke za ljepljenje zbog interne greÅ¡ke","title":"Zalijepi iz Worda","toolbar":"Zalijepi iz Worda"},"preview":{"preview":"Pregledaj"},"print":{"toolbar":"IspiÅ¡i"},"removeformat":{"toolbar":"Ukloni formatiranje"},"save":{"toolbar":"Snimi"},"selectall":{"toolbar":"Odaberi sve"},"showblocks":{"toolbar":"Prikaži blokove"},"sourcearea":{"toolbar":"Kôd"},"specialchar":{"options":"Opcije specijalnih znakova","title":"Odaberite posebni karakter","toolbar":"Ubaci posebne znakove"},"scayt":{"btn_about":"O SCAYT","btn_dictionaries":"RjeÄnici","btn_disable":"Onemogući SCAYT","btn_enable":"Omogući SCAYT","btn_langs":"Jezici","btn_options":"Opcije","text_title":""},"stylescombo":{"label":"Stil","panelTitle":"Stilovi formatiranja","panelTitle1":"Block stilovi","panelTitle2":"Inline stilovi","panelTitle3":"Object stilovi"},"table":{"border":"VeliÄina okvira","caption":"Naslov","cell":{"menu":"Ćelija","insertBefore":"Ubaci ćeliju prije","insertAfter":"Ubaci ćeliju poslije","deleteCell":"IzbriÅ¡i ćelije","merge":"Spoji ćelije","mergeRight":"Spoji desno","mergeDown":"Spoji dolje","splitHorizontal":"Podijeli ćeliju vodoravno","splitVertical":"Podijeli ćeliju okomito","title":"Svojstva ćelije","cellType":"Vrsta ćelije","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Prelazak u novi red","hAlign":"Vodoravno poravnanje","vAlign":"Okomito poravnanje","alignBaseline":"Osnovna linija","bgColor":"Boja pozadine","borderColor":"Boja ruba","data":"Podatak","header":"Zaglavlje","yes":"Da","no":"ne","invalidWidth":"Å irina ćelije mora biti broj.","invalidHeight":"Visina ćelije mora biti broj.","invalidRowSpan":"Rows span mora biti cijeli broj.","invalidColSpan":"Columns span mora biti cijeli broj.","chooseColor":"Odaberi"},"cellPad":"Razmak ćelija","cellSpace":"Prostornost ćelija","column":{"menu":"Kolona","insertBefore":"Ubaci kolonu prije","insertAfter":"Ubaci kolonu poslije","deleteColumn":"IzbriÅ¡i kolone"},"columns":"Kolona","deleteTable":"IzbriÅ¡i tablicu","headers":"Zaglavlje","headersBoth":"Oba","headersColumn":"Prva kolona","headersNone":"NiÅ¡ta","headersRow":"Prvi red","invalidBorder":"Debljina ruba mora biti broj.","invalidCellPadding":"Razmak ćelija mora biti broj.","invalidCellSpacing":"Prostornost ćelija mora biti broj.","invalidCols":"Broj kolona mora biti broj veći od 0.","invalidHeight":"Visina tablice mora biti broj.","invalidRows":"Broj redova mora biti broj veći od 0.","invalidWidth":"Å irina tablice mora biti broj.","menu":"Svojstva tablice","row":{"menu":"Red","insertBefore":"Ubaci red prije","insertAfter":"Ubaci red poslije","deleteRow":"IzbriÅ¡i redove"},"rows":"Redova","summary":"Sažetak","title":"Svojstva tablice","toolbar":"Tablica","widthPc":"postotaka","widthPx":"piksela","widthUnit":"jedinica Å¡irine"},"undo":{"redo":"Ponovi","undo":"PoniÅ¡ti"},"wsc":{"btnIgnore":"Zanemari","btnIgnoreAll":"Zanemari sve","btnReplace":"Zamijeni","btnReplaceAll":"Zamijeni sve","btnUndo":"Vrati","changeTo":"Promijeni u","errorLoading":"GreÅ¡ka uÄitavanja aplikacije: %s.","ieSpellDownload":"Provjera pravopisa nije instalirana. Želite li skinuti provjeru pravopisa?","manyChanges":"Provjera zavrÅ¡ena: Promijenjeno %1 rijeÄi","noChanges":"Provjera zavrÅ¡ena: Nije napravljena promjena","noMispell":"Provjera zavrÅ¡ena: Nema greÅ¡aka","noSuggestions":"-Nema preporuke-","notAvailable":"Žao nam je, ali usluga trenutno nije dostupna.","notInDic":"Nije u rjeÄniku","oneChange":"Provjera zavrÅ¡ena: Jedna rijeÄ promjenjena","progress":"Provjera u tijeku...","title":"Provjera pravopisa","toolbar":"Provjeri pravopis"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/hu.js b/wqflask/wqflask/static/packages/ckeditor/lang/hu.js
deleted file mode 100644
index 42347bf4..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/hu.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['hu']={"editor":"HTML szerkesztÅ‘","editorPanel":"Rich Text szerkesztÅ‘ panel","common":{"editorHelp":"Segítségért nyomjon ALT 0","browseServer":"Böngészés a szerveren","url":"Hivatkozás","protocol":"Protokoll","upload":"Feltöltés","uploadSubmit":"Küldés a szerverre","image":"Kép","flash":"Flash","form":"Å°rlap","checkbox":"JelölÅ‘négyzet","radio":"Választógomb","textField":"SzövegmezÅ‘","textarea":"Szövegterület","hiddenField":"RejtettmezÅ‘","button":"Gomb","select":"LegördülÅ‘ lista","imageButton":"Képgomb","notSet":"<nincs beállítva>","id":"Azonosító","name":"Név","langDir":"Ãrás iránya","langDirLtr":"Balról jobbra","langDirRtl":"Jobbról balra","langCode":"Nyelv kódja","longDescr":"Részletes leírás webcíme","cssClass":"Stíluskészlet","advisoryTitle":"Súgócimke","cssStyle":"Stílus","ok":"Rendben","cancel":"Mégsem","close":"Bezárás","preview":"ElÅ‘nézet","resize":"Húzza az átméretezéshez","generalTab":"Ãltalános","advancedTab":"További opciók","validateNumberFailed":"A mezÅ‘be csak számokat írhat.","confirmNewPage":"Minden nem mentett változás el fog veszni! Biztosan be szeretné tölteni az oldalt?","confirmCancel":"Az űrlap tartalma megváltozott, ám a változásokat nem rögzítette. Biztosan be szeretné zárni az űrlapot?","options":"Beállítások","target":"Cél","targetNew":"Új ablak (_blank)","targetTop":"LegfelsÅ‘ ablak (_top)","targetSelf":"Aktuális ablakban (_self)","targetParent":"SzülÅ‘ ablak (_parent)","langDirLTR":"Balról jobbra (LTR)","langDirRTL":"Jobbról balra (RTL)","styles":"Stílus","cssClasses":"Stíluslap osztály","width":"Szélesség","height":"Magasság","align":"Igazítás","alignLeft":"Bal","alignRight":"Jobbra","alignCenter":"Középre","alignJustify":"Sorkizárt","alignTop":"Tetejére","alignMiddle":"Középre","alignBottom":"Aljára","alignNone":"None","invalidValue":"Érvénytelen érték.","invalidHeight":"A magasság mezÅ‘be csak számokat írhat.","invalidWidth":"A szélesség mezÅ‘be csak számokat írhat.","invalidCssLength":"\"%1\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes CSS egységgel megjelölve(px, %, in, cm, mm, em, ex, pt vagy pc).","invalidHtmlLength":"\"%1\"-hez megadott érték csakis egy pozitív szám lehet, esetleg egy érvényes HTML egységgel megjelölve(px vagy %).","invalidInlineStyle":"Az inline stílusnak megadott értéknek tartalmaznia kell egy vagy több rekordot a \"name : value\" formátumban, pontosvesszÅ‘vel elválasztva.","cssLengthTooltip":"Adjon meg egy számot értéknek pixelekben vagy egy számot érvényes CSS mértékegységben (px, %, in, cm, mm, em, ex, pt, vagy pc).","unavailable":"%1<span class=\"cke_accessibility\">, nem elérhetÅ‘</span>"},"about":{"copy":"Copyright &copy; $1. Minden jog fenntartva.","dlgTitle":"CKEditor névjegy","help":"Itt találsz segítséget: $1","moreInfo":"Licenszelési információkért kérjük látogassa meg weboldalunkat:","title":"CKEditor névjegy","userGuide":"CKEditor Felhasználói útmutató"},"basicstyles":{"bold":"Félkövér","italic":"DÅ‘lt","strike":"Ãthúzott","subscript":"Alsó index","superscript":"FelsÅ‘ index","underline":"Aláhúzott"},"bidi":{"ltr":"Szöveg iránya balról jobbra","rtl":"Szöveg iránya jobbról balra"},"blockquote":{"toolbar":"Idézet blokk"},"clipboard":{"copy":"Másolás","copyError":"A böngészÅ‘ biztonsági beállításai nem engedélyezik a szerkesztÅ‘nek, hogy végrehajtsa a másolás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).","cut":"Kivágás","cutError":"A böngészÅ‘ biztonsági beállításai nem engedélyezik a szerkesztÅ‘nek, hogy végrehajtsa a kivágás műveletet. Használja az alábbi billentyűkombinációt (Ctrl/Cmd+X).","paste":"Beillesztés","pasteArea":"Beszúrás mezÅ‘","pasteMsg":"Másolja be az alábbi mezÅ‘be a <STRONG>Ctrl/Cmd+V</STRONG> billentyűk lenyomásával, majd nyomjon <STRONG>Rendben</STRONG>-t.","securityMsg":"A böngészÅ‘ biztonsági beállításai miatt a szerkesztÅ‘ nem képes hozzáférni a vágólap adataihoz. Illeszd be újra ebben az ablakban.","title":"Beillesztés"},"button":{"selectedLabel":"%1 (Kiválasztva)"},"colorbutton":{"auto":"Automatikus","bgColorTitle":"Háttérszín","colors":{"000":"Fekete","800000":"Bordó","8B4513":"Barna","2F4F4F":"Sötét türkiz","008080":"Türkiz","000080":"Király kék","4B0082":"Indigó kék","696969":"Szürke","B22222":"Tégla vörös","A52A2A":"Vörös","DAA520":"Arany sárga","006400":"Sötét zöld","40E0D0":"Türkiz","0000CD":"Kék","800080":"Lila","808080":"Szürke","F00":"Piros","FF8C00":"Sötét narancs","FFD700":"Arany","008000":"Zöld","0FF":"Türkiz","00F":"Kék","EE82EE":"Rózsaszín","A9A9A9":"Sötét szürke","FFA07A":"Lazac","FFA500":"Narancs","FFFF00":"Citromsárga","00FF00":"Neon zöld","AFEEEE":"Világos türkiz","ADD8E6":"Világos kék","DDA0DD":"Világos lila","D3D3D3":"Világos szürke","FFF0F5":"Lavender Blush","FAEBD7":"Törtfehér","FFFFE0":"Világos sárga","F0FFF0":"Menta","F0FFFF":"Azúr kék","F0F8FF":"Halvány kék","E6E6FA":"Lavender","FFF":"Fehér"},"more":"További színek...","panelTitle":"Színek","textColorTitle":"Betűszín"},"colordialog":{"clear":"Ãœrítés","highlight":"Nagyítás","options":"Szín opciók","selected":"Kiválasztott","title":"Válasszon színt"},"templates":{"button":"Sablonok","emptyListMsg":"(Nincs sablon megadva)","insertOption":"Kicseréli a jelenlegi tartalmat","options":"Sablon opciók","selectPromptMsg":"Válassza ki melyik sablon nyíljon meg a szerkesztÅ‘ben<br>(a jelenlegi tartalom elveszik):","title":"ElérhetÅ‘ sablonok"},"contextmenu":{"options":"Helyi menü opciók"},"div":{"IdInputLabel":"Azonosító","advisoryTitleInputLabel":"Tipp szöveg","cssClassInputLabel":"Stíluslap osztály","edit":"DIV szerkesztése","inlineStyleInputLabel":"Inline stílus","langDirLTRLabel":"Balról jobbra (LTR)","langDirLabel":"Nyelvi irány","langDirRTLLabel":"Jobbról balra (RTL)","languageCodeInputLabel":" Nyelv kódja","remove":"DIV eltávolítása","styleSelectLabel":"Stílus","title":"DIV tároló létrehozása","toolbar":"DIV tároló létrehozása"},"toolbar":{"toolbarCollapse":"Eszköztár összecsukása","toolbarExpand":"Eszköztár szétnyitása","toolbarGroups":{"document":"Dokumentum","clipboard":"Vágólap/Visszavonás","editing":"Szerkesztés","forms":"Å°rlapok","basicstyles":"Alapstílusok","paragraph":"Bekezdés","links":"Hivatkozások","insert":"Beszúrás","styles":"Stílusok","colors":"Színek","tools":"Eszközök"},"toolbars":"SzerkesztÅ‘ Eszköztár"},"elementspath":{"eleLabel":"Elem utak","eleTitle":"%1 elem"},"find":{"find":"Keresés","findOptions":"Find Options","findWhat":"Keresett szöveg:","matchCase":"kis- és nagybetű megkülönböztetése","matchCyclic":"Ciklikus keresés","matchWord":"csak ha ez a teljes szó","notFoundMsg":"A keresett szöveg nem található.","replace":"Csere","replaceAll":"Az összes cseréje","replaceSuccessMsg":"%1 egyezÅ‘ség cserélve.","replaceWith":"Csere erre:","title":"Keresés és csere"},"fakeobjects":{"anchor":"Horgony","flash":"Flash animáció","hiddenfield":"Rejtett mezõ","iframe":"IFrame","unknown":"Ismeretlen objektum"},"flash":{"access":"Szkript hozzáférés","accessAlways":"Mindig","accessNever":"Soha","accessSameDomain":"Azonos domainrÅ‘l","alignAbsBottom":"Legaljára","alignAbsMiddle":"Közepére","alignBaseline":"Alapvonalhoz","alignTextTop":"Szöveg tetejére","bgcolor":"Háttérszín","chkFull":"Teljes képernyÅ‘ engedélyezése","chkLoop":"Folyamatosan","chkMenu":"Flash menü engedélyezése","chkPlay":"Automata lejátszás","flashvars":"Flash változók","hSpace":"Vízsz. táv","properties":"Flash tulajdonságai","propertiesTab":"Tulajdonságok","quality":"MinÅ‘ség","qualityAutoHigh":"Automata jó","qualityAutoLow":"Automata gyenge","qualityBest":"Legjobb","qualityHigh":"Jó","qualityLow":"Gyenge","qualityMedium":"Közepes","scale":"Méretezés","scaleAll":"Mindent mutat","scaleFit":"Teljes kitöltés","scaleNoBorder":"Keret nélkül","title":"Flash tulajdonságai","vSpace":"Függ. táv","validateHSpace":"A vízszintes távolsűág mezÅ‘be csak számokat írhat.","validateSrc":"Adja meg a hivatkozás webcímét","validateVSpace":"A függÅ‘leges távolsűág mezÅ‘be csak számokat írhat.","windowMode":"Ablak mód","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Méret","voiceLabel":"Betűméret","panelTitle":"Méret"},"label":"Betűtípus","panelTitle":"Betűtípus","voiceLabel":"Betűtípus"},"forms":{"button":{"title":"Gomb tulajdonságai","text":"Szöveg (Érték)","type":"Típus","typeBtn":"Gomb","typeSbm":"Küldés","typeRst":"Alaphelyzet"},"checkboxAndRadio":{"checkboxTitle":"JelölÅ‘négyzet tulajdonságai","radioTitle":"Választógomb tulajdonságai","value":"Érték","selected":"Kiválasztott"},"form":{"title":"Å°rlap tulajdonságai","menu":"Å°rlap tulajdonságai","action":"Adatfeldolgozást végzÅ‘ hivatkozás","method":"Adatküldés módja","encoding":"Kódolás"},"hidden":{"title":"Rejtett mezÅ‘ tulajdonságai","name":"Név","value":"Érték"},"select":{"title":"LegördülÅ‘ lista tulajdonságai","selectInfo":"Alaptulajdonságok","opAvail":"ElérhetÅ‘ opciók","value":"Érték","size":"Méret","lines":"sor","chkMulti":"több sor is kiválasztható","opText":"Szöveg","opValue":"Érték","btnAdd":"Hozzáad","btnModify":"Módosít","btnUp":"Fel","btnDown":"Le","btnSetValue":"Legyen az alapértelmezett érték","btnDelete":"Töröl"},"textarea":{"title":"Szövegterület tulajdonságai","cols":"Karakterek száma egy sorban","rows":"Sorok száma"},"textfield":{"title":"SzövegmezÅ‘ tulajdonságai","name":"Név","value":"Érték","charWidth":"Megjelenített karakterek száma","maxChars":"Maximális karakterszám","type":"Típus","typeText":"Szöveg","typePass":"Jelszó","typeEmail":"Ãmél","typeSearch":"Keresés","typeTel":"Telefonszám","typeUrl":"URL"}},"format":{"label":"Formátum","panelTitle":"Formátum","tag_address":"Címsor","tag_div":"Bekezdés (DIV)","tag_h1":"Fejléc 1","tag_h2":"Fejléc 2","tag_h3":"Fejléc 3","tag_h4":"Fejléc 4","tag_h5":"Fejléc 5","tag_h6":"Fejléc 6","tag_p":"Normál","tag_pre":"Formázott"},"horizontalrule":{"toolbar":"Elválasztóvonal beillesztése"},"iframe":{"border":"Legyen keret","noUrl":"Kérem írja be a iframe URL-t","scrolling":"GördítÅ‘sáv bekapcsolása","title":"IFrame Tulajdonságok","toolbar":"IFrame"},"image":{"alertUrl":"Töltse ki a kép webcímét","alt":"Buborék szöveg","border":"Keret","btnUpload":"Küldés a szerverre","button2Img":"A kiválasztott képgombból sima képet szeretne csinálni?","hSpace":"Vízsz. táv","img2Button":"A kiválasztott képbÅ‘l képgombot szeretne csinálni?","infoTab":"Alaptulajdonságok","linkTab":"Hivatkozás","lockRatio":"Arány megtartása","menu":"Kép tulajdonságai","resetSize":"Eredeti méret","title":"Kép tulajdonságai","titleButton":"Képgomb tulajdonságai","upload":"Feltöltés","urlMissing":"Hiányzik a kép URL-je","vSpace":"Függ. táv","validateBorder":"A keret méretének egész számot kell beírni!","validateHSpace":"Vízszintes távolságnak egész számot kell beírni!","validateVSpace":"FüggÅ‘leges távolságnak egész számot kell beírni!"},"indent":{"indent":"Behúzás növelése","outdent":"Behúzás csökkentése"},"smiley":{"options":"Hangulatjel opciók","title":"Hangulatjel beszúrása","toolbar":"Hangulatjelek"},"justify":{"block":"Sorkizárt","center":"Középre","left":"Balra","right":"Jobbra"},"language":{"button":"Nyelv beállítása","remove":"Nyelv eltávolítása"},"link":{"acccessKey":"Billentyűkombináció","advanced":"További opciók","advisoryContentType":"Súgó tartalomtípusa","advisoryTitle":"Súgócimke","anchor":{"toolbar":"Horgony beillesztése/szerkesztése","menu":"Horgony tulajdonságai","title":"Horgony tulajdonságai","name":"Horgony neve","errorName":"Kérem adja meg a horgony nevét","remove":"Horgony eltávolítása"},"anchorId":"Azonosító szerint","anchorName":"Horgony név szerint","charset":"Hivatkozott tartalom kódlapja","cssClasses":"Stíluskészlet","emailAddress":"E-Mail cím","emailBody":"Ãœzenet","emailSubject":"Ãœzenet tárgya","id":"Id","info":"Alaptulajdonságok","langCode":"Ãrás iránya","langDir":"Ãrás iránya","langDirLTR":"Balról jobbra","langDirRTL":"Jobbról balra","menu":"Hivatkozás módosítása","name":"Név","noAnchors":"(Nincs horgony a dokumentumban)","noEmail":"Adja meg az E-Mail címet","noUrl":"Adja meg a hivatkozás webcímét","other":"<más>","popupDependent":"SzülÅ‘höz kapcsolt (csak Netscape)","popupFeatures":"Felugró ablak jellemzÅ‘i","popupFullScreen":"Teljes képernyÅ‘ (csak IE)","popupLeft":"Bal pozíció","popupLocationBar":"Címsor","popupMenuBar":"Menü sor","popupResizable":"Ãtméretezés","popupScrollBars":"GördítÅ‘sáv","popupStatusBar":"Ãllapotsor","popupToolbar":"Eszköztár","popupTop":"FelsÅ‘ pozíció","rel":"Kapcsolat típusa","selectAnchor":"Horgony választása","styles":"Stílus","tabIndex":"Tabulátor index","target":"Tartalom megjelenítése","targetFrame":"<keretben>","targetFrameName":"Keret neve","targetPopup":"<felugró ablakban>","targetPopupName":"Felugró ablak neve","title":"Hivatkozás tulajdonságai","toAnchor":"Horgony az oldalon","toEmail":"E-Mail","toUrl":"URL","toolbar":"Hivatkozás beillesztése/módosítása","type":"Hivatkozás típusa","unlink":"Hivatkozás törlése","upload":"Feltöltés"},"list":{"bulletedlist":"Felsorolás","numberedlist":"Számozás"},"liststyle":{"armenian":"Örmény számozás","bulletedTitle":"Pontozott lista tulajdonságai","circle":"Kör","decimal":"Arab számozás (1, 2, 3, stb.)","decimalLeadingZero":"Számozás bevezetÅ‘ nullákkal (01, 02, 03, stb.)","disc":"Korong","georgian":"Grúz számozás (an, ban, gan, stb.)","lowerAlpha":"Kisbetűs (a, b, c, d, e, stb.)","lowerGreek":"Görög (alpha, beta, gamma, stb.)","lowerRoman":"Római kisbetűs (i, ii, iii, iv, v, stb.)","none":"Nincs","notset":"<Nincs beállítva>","numberedTitle":"Sorszámozott lista tulajdonságai","square":"Négyzet","start":"KezdÅ‘szám","type":"Típus","upperAlpha":"Nagybetűs (A, B, C, D, E, stb.)","upperRoman":"Római nagybetűs (I, II, III, IV, V, stb.)","validateStartNumber":"A kezdÅ‘szám nem lehet tört érték."},"magicline":{"title":"Szúrja be a bekezdést ide"},"maximize":{"maximize":"Teljes méret","minimize":"Kis méret"},"newpage":{"toolbar":"Új oldal"},"pagebreak":{"alt":"Oldaltörés","toolbar":"Oldaltörés beillesztése"},"pastetext":{"button":"Beillesztés formázatlan szövegként","title":"Beillesztés formázatlan szövegként"},"pastefromword":{"confirmCleanup":"Úgy tűnik a beillesztett szöveget Word-bÅ‘l másolt át. Meg szeretné tisztítani a szöveget? (ajánlott)","error":"Egy belsÅ‘ hiba miatt nem sikerült megtisztítani a szöveget","title":"Beillesztés Word-bÅ‘l","toolbar":"Beillesztés Word-bÅ‘l"},"preview":{"preview":"ElÅ‘nézet"},"print":{"toolbar":"Nyomtatás"},"removeformat":{"toolbar":"Formázás eltávolítása"},"save":{"toolbar":"Mentés"},"selectall":{"toolbar":"Mindent kijelöl"},"showblocks":{"toolbar":"Blokkok megjelenítése"},"sourcearea":{"toolbar":"Forráskód"},"specialchar":{"options":"Speciális karakter opciók","title":"Speciális karakter választása","toolbar":"Speciális karakter beillesztése"},"scayt":{"btn_about":"SCAYT névjegy","btn_dictionaries":"Szótár","btn_disable":"SCAYT letiltása","btn_enable":"SCAYT engedélyezése","btn_langs":"Nyelvek","btn_options":"Beállítások","text_title":""},"stylescombo":{"label":"Stílus","panelTitle":"Formázási stílusok","panelTitle1":"Blokk stílusok","panelTitle2":"Inline stílusok","panelTitle3":"Objektum stílusok"},"table":{"border":"Szegélyméret","caption":"Felirat","cell":{"menu":"Cella","insertBefore":"Beszúrás balra","insertAfter":"Beszúrás jobbra","deleteCell":"Cellák törlése","merge":"Cellák egyesítése","mergeRight":"Cellák egyesítése jobbra","mergeDown":"Cellák egyesítése lefelé","splitHorizontal":"Cellák szétválasztása vízszintesen","splitVertical":"Cellák szétválasztása függÅ‘legesen","title":"Cella tulajdonságai","cellType":"Cella típusa","rowSpan":"FüggÅ‘leges egyesítés","colSpan":"Vízszintes egyesítés","wordWrap":"Hosszú sorok törése","hAlign":"Vízszintes igazítás","vAlign":"FüggÅ‘leges igazítás","alignBaseline":"Alapvonalra","bgColor":"Háttér színe","borderColor":"Keret színe","data":"Adat","header":"Fejléc","yes":"Igen","no":"Nem","invalidWidth":"A szélesség mezÅ‘be csak számokat írhat.","invalidHeight":"A magasság mezÅ‘be csak számokat írhat.","invalidRowSpan":"A függÅ‘leges egyesítés mezÅ‘be csak számokat írhat.","invalidColSpan":"A vízszintes egyesítés mezÅ‘be csak számokat írhat.","chooseColor":"Válasszon"},"cellPad":"Cella belsÅ‘ margó","cellSpace":"Cella térköz","column":{"menu":"Oszlop","insertBefore":"Beszúrás balra","insertAfter":"Beszúrás jobbra","deleteColumn":"Oszlopok törlése"},"columns":"Oszlopok","deleteTable":"Táblázat törlése","headers":"Fejlécek","headersBoth":"MindkettÅ‘","headersColumn":"ElsÅ‘ oszlop","headersNone":"Nincsenek","headersRow":"ElsÅ‘ sor","invalidBorder":"A szegélyméret mezÅ‘be csak számokat írhat.","invalidCellPadding":"A cella belsÅ‘ margó mezÅ‘be csak számokat írhat.","invalidCellSpacing":"A cella térköz mezÅ‘be csak számokat írhat.","invalidCols":"Az oszlopok számának nagyobbnak kell lenni mint 0.","invalidHeight":"A magasság mezÅ‘be csak számokat írhat.","invalidRows":"A sorok számának nagyobbnak kell lenni mint 0.","invalidWidth":"A szélesség mezÅ‘be csak számokat írhat.","menu":"Táblázat tulajdonságai","row":{"menu":"Sor","insertBefore":"Beszúrás fölé","insertAfter":"Beszúrás alá","deleteRow":"Sorok törlése"},"rows":"Sorok","summary":"Leírás","title":"Táblázat tulajdonságai","toolbar":"Táblázat","widthPc":"százalék","widthPx":"képpont","widthUnit":"Szélesség egység"},"undo":{"redo":"Ismétlés","undo":"Visszavonás"},"wsc":{"btnIgnore":"Kihagyja","btnIgnoreAll":"Mindet kihagyja","btnReplace":"Csere","btnReplaceAll":"Összes cseréje","btnUndo":"Visszavonás","changeTo":"Módosítás","errorLoading":"Hiba a szolgáltatás host betöltése közben: %s.","ieSpellDownload":"A helyesírás-ellenÅ‘rzÅ‘ nincs telepítve. Szeretné letölteni most?","manyChanges":"Helyesírás-ellenÅ‘rzés kész: %1 szó cserélve","noChanges":"Helyesírás-ellenÅ‘rzés kész: Nincs változtatott szó","noMispell":"Helyesírás-ellenÅ‘rzés kész: Nem találtam hibát","noSuggestions":"Nincs javaslat","notAvailable":"Sajnálom, de a szolgáltatás jelenleg nem elérhetÅ‘.","notInDic":"Nincs a szótárban","oneChange":"Helyesírás-ellenÅ‘rzés kész: Egy szó cserélve","progress":"Helyesírás-ellenÅ‘rzés folyamatban...","title":"Helyesírás ellenörzÅ‘","toolbar":"Helyesírás-ellenÅ‘rzés"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/id.js b/wqflask/wqflask/static/packages/ckeditor/lang/id.js
deleted file mode 100644
index 15c23427..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/id.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['id']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tekan ALT 0 untuk bantuan.","browseServer":"Jelajah Server","url":"URL","protocol":"Protokol","upload":"Unggah","uploadSubmit":"Kirim ke Server","image":"Gambar","flash":"Flash","form":"Formulir","checkbox":"Kotak Cek","radio":"Tombol Radio","textField":"Kolom Teks","textarea":"Area Teks","hiddenField":"Kolom Tersembunyi","button":"Tombol","select":"Kolom Seleksi","imageButton":"Tombol Gambar","notSet":"<tidak diatur>","id":"Id","name":"Nama","langDir":"Arah Bahasa","langDirLtr":"Kiri ke Kanan (LTR)","langDirRtl":"Kanan ke Kiri","langCode":"Kode Bahasa","longDescr":"Deskripsi URL Panjang","cssClass":"Kelas Stylesheet","advisoryTitle":"Penasehat Judul","cssStyle":"Gaya","ok":"OK","cancel":"Batal","close":"Tutup","preview":"Pratinjau","resize":"Ubah ukuran","generalTab":"Umum","advancedTab":"Advanced","validateNumberFailed":"Nilai ini tidak sebuah angka","confirmNewPage":"Semua perubahan yang tidak disimpan di konten ini akan hilang. Apakah anda yakin ingin memuat halaman baru?","confirmCancel":"Beberapa opsi telah berubah. Apakah anda yakin ingin menutup dialog?","options":"Opsi","target":"Sasaran","targetNew":"Jendela Baru (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Jendela yang Sama (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","styles":"Gaya","cssClasses":"Kelas Stylesheet","width":"Lebar","height":"Tinggi","align":"Penjajaran","alignLeft":"Kiri","alignRight":"Kanan","alignCenter":"Tengah","alignJustify":"Rata kiri-kanan","alignTop":"Atas","alignMiddle":"Tengah","alignBottom":"Bawah","alignNone":"None","invalidValue":"Nilai tidak sah.","invalidHeight":"Tinggi harus sebuah angka.","invalidWidth":"Lebar harus sebuah angka.","invalidCssLength":"Nilai untuk \"%1\" harus sebuah angkat positif dengan atau tanpa pengukuran unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Nilai yang dispesifikasian untuk kolom \"%1\" harus sebuah angka positif dengan atau tanpa sebuah unit pengukuran HTML (px atau %) yang valid.","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Masukkan sebuah angka untuk sebuah nilai dalam pixel atau sebuah angka dengan unit CSS yang sah (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, tidak tersedia</span>"},"about":{"copy":"Hak cipta &copy; $1. All rights reserved.","dlgTitle":"Tentang CKEditor","help":"Cel $1 untuk bantuan.","moreInfo":"Untuk informasi lisensi silahkan kunjungi web site kami:","title":"Tentang CKEditor","userGuide":"Petunjuk Pengguna CKEditor"},"basicstyles":{"bold":"Huruf Tebal","italic":"Huruf Miring","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Garis Bawah"},"bidi":{"ltr":"Arah penulisan dari kiri ke kanan.","rtl":"Arah penulisan dari kanan ke kiri."},"blockquote":{"toolbar":"Kutipan Blok"},"clipboard":{"copy":"Salin","copyError":"Pengaturan keamanan peramban anda tidak mengizinkan editor untuk mengeksekusi operasi menyalin secara otomatis. Mohon gunakan papan tuts (Ctrl/Cmd+C)","cut":"Potong","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Tempel","pasteArea":"Area Tempel","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Tempel"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatic","bgColorTitle":"Warna Latar Belakang","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"More Colors...","panelTitle":"Warna","textColorTitle":"Text Color"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Contoh","emptyListMsg":"(Tidak ada contoh didefinisikan)","insertOption":"Ganti konten sebenarnya","options":"Opsi Contoh","selectPromptMsg":"Mohon pilih contoh untuk dibuka di editor","title":"Contoh Konten"},"contextmenu":{"options":"Opsi Konteks Pilihan"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Penasehat Judul","cssClassInputLabel":"Kelas Stylesheet","edit":"Sunting Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Kiri ke Kanan (LTR)","langDirLabel":"Arah Bahasa","langDirRTLLabel":"Kanan ke Kiri (RTL)","languageCodeInputLabel":"Kode Bahasa","remove":"Hapus Div","styleSelectLabel":"Gaya","title":"Ciptakan Wadah Div","toolbar":"Cipatakan Wadah Div"},"toolbar":{"toolbarCollapse":"Ciutkan Toolbar","toolbarExpand":"Bentangkan Toolbar","toolbarGroups":{"document":"Dokumen","clipboard":"Papan klip / Kembalikan perlakuan","editing":"Sunting","forms":"Formulir","basicstyles":"Gaya Dasar","paragraph":"Paragraf","links":"Tautan","insert":"Sisip","styles":"Gaya","colors":"Warna","tools":"Alat"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"Temukan","findOptions":"Opsi menemukan","findWhat":"Temukan apa:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"The specified text was not found.","replace":"Ganti","replaceAll":"Ganti Semua","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Ganti dengan:","title":"Temukan dan Ganti"},"fakeobjects":{"anchor":"Anchor","flash":"Animasi Flash","hiddenfield":"Kolom Tersembunyi","iframe":"IFrame","unknown":"Obyek Tak Dikenal"},"flash":{"access":"Script Access","accessAlways":"Selalu","accessNever":"Tidak Pernah","accessSameDomain":"Domain yang sama","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Dasar","alignTextTop":"Text Top","bgcolor":"Warna Latar Belakang","chkFull":"Izinkan Layar Penuh","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Mainkan Otomatis","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properti","quality":"Kualitas","qualityAutoHigh":"Tinggi Otomatis","qualityAutoLow":"Rendah Otomatis","qualityBest":"Terbaik","qualityHigh":"Tinggi","qualityLow":"Rendah","qualityMedium":"Sedang","scale":"Scale","scaleAll":"Perlihatkan semua","scaleFit":"Exact Fit","scaleNoBorder":"Tanpa Batas","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace harus sebuah angka","validateSrc":"URL tidak boleh kosong","validateVSpace":"VSpace harus sebuah angka","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparan","windowModeWindow":"Jendela"},"font":{"fontSize":{"label":"Ukuran","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"forms":{"button":{"title":"Button Properties","text":"Teks (Nilai)","type":"Tipe","typeBtn":"Tombol","typeSbm":"Menyerahkan","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Nilai","selected":"Terpilih"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Aksi","method":"Metode","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Nama","value":"Nilai"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Nilai","size":"Ukuran","lines":"garis","chkMulti":"Izinkan pemilihan ganda","opText":"Teks","opValue":"Nilai","btnAdd":"Tambah","btnModify":"Modifikasi","btnUp":"Atas","btnDown":"Bawah","btnSetValue":"Set as selected value","btnDelete":"Hapus"},"textarea":{"title":"Textarea Properties","cols":"Kolom","rows":"Baris"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Nilai","charWidth":"Character Width","maxChars":"Maximum Characters","type":"Tipe","typeText":"Teks","typePass":"Kata kunci","typeEmail":"Surel","typeSearch":"Cari","typeTel":"Nomor Telepon","typeUrl":"URL"}},"format":{"label":"Bentuk","panelTitle":"Bentuk Paragraf","tag_address":"Alamat","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Membentuk"},"horizontalrule":{"toolbar":"Sisip Garis Horisontal"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"Mohon tulis URL gambar","alt":"Teks alternatif","border":"Batas","btnUpload":"Kirim ke Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info Gambar","linkTab":"Tautan","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Unggah","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Tingkatkan Lekuk","outdent":"Kurangi Lekuk"},"smiley":{"options":"Opsi Smiley","title":"Sisip sebuah Smiley","toolbar":"Smiley"},"justify":{"block":"Rata kiri-kanan","center":"Pusat","left":"Align Left","right":"Align Right"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Penasehat Judul","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Kelas Stylesheet","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Kode Bahasa","langDir":"Arah Bahasa","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","menu":"Edit Link","name":"Nama","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Gaya","tabIndex":"Tab Index","target":"Sasaran","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Tautan","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Tautan","type":"Link Type","unlink":"Unlink","upload":"Unggah"},"list":{"bulletedlist":"Sisip/Hapus Daftar Bullet","numberedlist":"Sisip/Hapus Daftar Bernomor"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Lingkaran","decimal":"Desimal (1, 2, 3, dst.)","decimalLeadingZero":"Desimal diawali angka nol (01, 02, 03, dst.)","disc":"Cakram","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Huruf Kecil (a, b, c, d, e, dst.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Angka Romawi (i, ii, iii, iv, v, dst.)","none":"Tidak ada","notset":"<tidak diatur>","numberedTitle":"Numbered List Properties","square":"Persegi","start":"Mulai","type":"Tipe","upperAlpha":"Huruf Besar (A, B, C, D, E, dst.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Masukkan paragraf disini"},"maximize":{"maximize":"Memperbesar","minimize":"Memperkecil"},"newpage":{"toolbar":"Halaman Baru"},"pagebreak":{"alt":"Halaman Istirahat","toolbar":"Sisip Halaman Istirahat untuk Pencetakan "},"pastetext":{"button":"Tempel sebagai teks polos","title":"Tempel sebagai Teks Polos"},"pastefromword":{"confirmCleanup":"Teks yang ingin anda tempel sepertinya di salin dari Word. Apakah anda mau membersihkannya sebelum menempel?","error":"Tidak mungkin membersihkan data yang ditempel dikerenakan kesalahan internal","title":"Tempel dari Word","toolbar":"Tempel dari Word"},"preview":{"preview":"Pratinjau"},"print":{"toolbar":"Cetak"},"removeformat":{"toolbar":"Hapus Format"},"save":{"toolbar":"Simpan"},"selectall":{"toolbar":"Pilih Semua"},"showblocks":{"toolbar":"Perlihatkan Blok"},"sourcearea":{"toolbar":"Sumber"},"specialchar":{"options":"Opsi spesial karakter","title":"Pilih spesial karakter","toolbar":"Sisipkan spesial karakter"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Gaya","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Ukuran batas","caption":"Judul halaman","cell":{"menu":"Sel","insertBefore":"Sisip Sel Sebelum","insertAfter":"Sisip Sel Setelah","deleteCell":"Hapus Sel","merge":"Gabungkan Sel","mergeRight":"Gabungkan ke Kanan","mergeDown":"Gabungkan ke Bawah","splitHorizontal":"Pisahkan Sel Secara Horisontal","splitVertical":"Pisahkan Sel Secara Vertikal","title":"Properti Sel","cellType":"Tipe Sel","rowSpan":"Rentang antar baris","colSpan":"Rentang antar kolom","wordWrap":"Word Wrap","hAlign":"Jajaran Horisontal","vAlign":"Jajaran Vertikal","alignBaseline":"Dasar","bgColor":"Warna Latar Belakang","borderColor":"Warna Batasan","data":"Data","header":"Header","yes":"Ya","no":"Tidak","invalidWidth":"Lebar sel harus sebuah angka.","invalidHeight":"Tinggi sel harus sebuah angka","invalidRowSpan":"Rentang antar baris harus angka seluruhnya.","invalidColSpan":"Rentang antar kolom harus angka seluruhnya","chooseColor":"Pilih"},"cellPad":"Sel spasi dalam","cellSpace":"Spasi antar sel","column":{"menu":"Kolom","insertBefore":"Sisip Kolom Sebelum","insertAfter":"Sisip Kolom Sesudah","deleteColumn":"Hapus Kolom"},"columns":"Kolom","deleteTable":"Hapus Tabel","headers":"Headers","headersBoth":"Keduanya","headersColumn":"Kolom pertama","headersNone":"Tidak ada","headersRow":"Baris Pertama","invalidBorder":"Ukuran batasan harus sebuah angka","invalidCellPadding":"'Spasi dalam' sel harus angka positif.","invalidCellSpacing":"Spasi antar sel harus angka positif.","invalidCols":"Jumlah kolom harus sebuah angka lebih besar dari 0","invalidHeight":"Tinggi tabel harus sebuah angka.","invalidRows":"Jumlah barus harus sebuah angka dan lebih besar dari 0.","invalidWidth":"Lebar tabel harus sebuah angka.","menu":"Properti Tabel","row":{"menu":"Baris","insertBefore":"Sisip Baris Sebelum","insertAfter":"Sisip Baris Sesudah","deleteRow":"Hapus Baris"},"rows":"Baris","summary":"Intisari","title":"Properti Tabel","toolbar":"Tabe","widthPc":"persen","widthPx":"piksel","widthUnit":"lebar satuan"},"undo":{"redo":"Kembali lakukan","undo":"Batalkan perlakuan"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/is.js b/wqflask/wqflask/static/packages/ckeditor/lang/is.js
deleted file mode 100644
index a59622c3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/is.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['is']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Fletta í skjalasafni","url":"Vefslóð","protocol":"Samskiptastaðall","upload":"Senda upp","uploadSubmit":"Hlaða upp","image":"Setja inn mynd","flash":"Flash","form":"Setja inn innsláttarform","checkbox":"Setja inn hökunarreit","radio":"Setja inn valhnapp","textField":"Setja inn textareit","textarea":"Setja inn textasvæði","hiddenField":"Setja inn falið svæði","button":"Setja inn hnapp","select":"Setja inn lista","imageButton":"Setja inn myndahnapp","notSet":"<ekkert valið>","id":"Auðkenni","name":"Nafn","langDir":"Lesstefna","langDirLtr":"Frá vinstri til hægri (LTR)","langDirRtl":"Frá hægri til vinstri (RTL)","langCode":"Tungumálakóði","longDescr":"Nánari lýsing","cssClass":"Stílsniðsflokkur","advisoryTitle":"Titill","cssStyle":"Stíll","ok":"à lagi","cancel":"Hætta við","close":"Close","preview":"Forskoða","resize":"Resize","generalTab":"Almennt","advancedTab":"Tæknilegt","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Mark","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Frá vinstri til hægri (LTR)","langDirRTL":"Frá hægri til vinstri (RTL)","styles":"Stíll","cssClasses":"Stílsniðsflokkur","width":"Breidd","height":"Hæð","align":"Jöfnun","alignLeft":"Vinstri","alignRight":"Hægri","alignCenter":"Miðjað","alignJustify":"Jafna báðum megin","alignTop":"Efst","alignMiddle":"Miðjuð","alignBottom":"Neðst","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Feitletrað","italic":"Skáletrað","strike":"Yfirstrikað","subscript":"Niðurskrifað","superscript":"Uppskrifað","underline":"Undirstrikað"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Inndráttur"},"clipboard":{"copy":"Afrita","copyError":"Öryggisstillingar vafrans þíns leyfa ekki afritun texta með músaraðgerð. Notaðu lyklaborðið í afrita (Ctrl/Cmd+C).","cut":"Klippa","cutError":"Öryggisstillingar vafrans þíns leyfa ekki klippingu texta með músaraðgerð. Notaðu lyklaborðið í klippa (Ctrl/Cmd+X).","paste":"Líma","pasteArea":"Paste Area","pasteMsg":"Límdu í svæðið hér að neðan og (<STRONG>Ctrl/Cmd+V</STRONG>) og smelltu á <STRONG>OK</STRONG>.","securityMsg":"Vegna öryggisstillinga í vafranum þínum fær ritillinn ekki beinan aðgang að klippuborðinu. Þú verður að líma innihaldið aftur inn í þennan glugga.","title":"Líma"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Sjálfval","bgColorTitle":"Bakgrunnslitur","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Fleiri liti...","panelTitle":"Colors","textColorTitle":"Litur texta"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Sniðmát","emptyListMsg":"(Ekkert sniðmát er skilgreint!)","insertOption":"Skipta út raunverulegu innihaldi","options":"Template Options","selectPromptMsg":"Veldu sniðmát til að opna í ritlinum.<br>(Núverandi innihald víkur fyrir því!):","title":"Innihaldssniðmát"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"Leita","findOptions":"Find Options","findWhat":"Leita að:","matchCase":"Gera greinarmun á¡ há¡- og lágstöfum","matchCyclic":"Match cyclic","matchWord":"Aðeins heil orð","notFoundMsg":"Leitartexti fannst ekki!","replace":"Skipta út","replaceAll":"Skipta út allsstaðar","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Skipta út fyrir:","title":"Finna og skipta"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs neðst","alignAbsMiddle":"Abs miðjuð","alignBaseline":"Grunnlína","alignTextTop":"Efri brún texta","bgcolor":"Bakgrunnslitur","chkFull":"Allow Fullscreen","chkLoop":"Endurtekning","chkMenu":"Sýna Flash-valmynd","chkPlay":"Sjálfvirk spilun","flashvars":"Variables for Flash","hSpace":"Vinstri bil","properties":"Eigindi Flash","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Skali","scaleAll":"Sýna allt","scaleFit":"Fella skala að stærð","scaleNoBorder":"Ãn ramma","title":"Eigindi Flash","vSpace":"Hægri bil","validateHSpace":"HSpace must be a number.","validateSrc":"Sláðu inn veffang stiklunnar!","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Leturstærð ","voiceLabel":"Font Size","panelTitle":"Leturstærð "},"label":"Leturgerð ","panelTitle":"Leturgerð ","voiceLabel":"Leturgerð "},"forms":{"button":{"title":"Eigindi hnapps","text":"Texti","type":"Gerð","typeBtn":"Hnappur","typeSbm":"Staðfesta","typeRst":"Hreinsa"},"checkboxAndRadio":{"checkboxTitle":"Eigindi markreits","radioTitle":"Eigindi valhnapps","value":"Gildi","selected":"Valið"},"form":{"title":"Eigindi innsláttarforms","menu":"Eigindi innsláttarforms","action":"Aðgerð","method":"Aðferð","encoding":"Encoding"},"hidden":{"title":"Eigindi falins svæðis","name":"Nafn","value":"Gildi"},"select":{"title":"Eigindi lista","selectInfo":"Upplýsingar","opAvail":"Kostir","value":"Gildi","size":"Stærð","lines":"línur","chkMulti":"Leyfa fleiri kosti","opText":"Texti","opValue":"Gildi","btnAdd":"Bæta við","btnModify":"Breyta","btnUp":"Upp","btnDown":"Niður","btnSetValue":"Merkja sem valið","btnDelete":"Eyða"},"textarea":{"title":"Eigindi textasvæðis","cols":"Dálkar","rows":"Línur"},"textfield":{"title":"Eigindi textareits","name":"Nafn","value":"Gildi","charWidth":"Breidd (leturtákn)","maxChars":"Hámarksfjöldi leturtákna","type":"Gerð","typeText":"Texti","typePass":"Lykilorð","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"Vefslóð"}},"format":{"label":"Stílsnið","panelTitle":"Stílsnið","tag_address":"Vistfang","tag_div":"Venjulegt (DIV)","tag_h1":"Fyrirsögn 1","tag_h2":"Fyrirsögn 2","tag_h3":"Fyrirsögn 3","tag_h4":"Fyrirsögn 4","tag_h5":"Fyrirsögn 5","tag_h6":"Fyrirsögn 6","tag_p":"Venjulegt letur","tag_pre":"Forsniðið"},"horizontalrule":{"toolbar":"Lóðrétt lína"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"Sláðu inn slóðina að myndinni","alt":"Baklægur texti","border":"Rammi","btnUpload":"Hlaða upp","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Vinstri bil","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Almennt","linkTab":"Stikla","lockRatio":"Festa stærðarhlutfall","menu":"Eigindi myndar","resetSize":"Reikna stærð","title":"Eigindi myndar","titleButton":"Eigindi myndahnapps","upload":"Hlaða upp","urlMissing":"Image source URL is missing.","vSpace":"Hægri bil","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Minnka inndrátt","outdent":"Auka inndrátt"},"smiley":{"options":"Smiley Options","title":"Velja svip","toolbar":"Svipur"},"justify":{"block":"Jafna báðum megin","center":"Miðja texta","left":"Vinstrijöfnun","right":"Hægrijöfnun"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Skammvalshnappur","advanced":"Tæknilegt","advisoryContentType":"Tegund innihalds","advisoryTitle":"Titill","anchor":{"toolbar":"Stofna/breyta kaflamerki","menu":"Eigindi kaflamerkis","title":"Eigindi kaflamerkis","name":"Nafn bókamerkis","errorName":"Sláðu inn nafn bókamerkis!","remove":"Remove Anchor"},"anchorId":"Eftir auðkenni einingar","anchorName":"Eftir akkerisnafni","charset":"Táknróf","cssClasses":"Stílsniðsflokkur","emailAddress":"Netfang","emailBody":"Meginmál","emailSubject":"Efni","id":"Auðkenni","info":"Almennt","langCode":"Lesstefna","langDir":"Lesstefna","langDirLTR":"Frá vinstri til hægri (LTR)","langDirRTL":"Frá hægri til vinstri (RTL)","menu":"Breyta stiklu","name":"Nafn","noAnchors":"<Engin bókamerki á skrá>","noEmail":"Sláðu inn netfang!","noUrl":"Sláðu inn veffang stiklunnar!","other":"<annar>","popupDependent":"Háð venslum (Netscape)","popupFeatures":"Eigindi sprettiglugga","popupFullScreen":"Heilskjár (IE)","popupLeft":"Fjarlægð frá vinstri","popupLocationBar":"Fanglína","popupMenuBar":"Vallína","popupResizable":"Resizable","popupScrollBars":"Skrunstikur","popupStatusBar":"Stöðustika","popupToolbar":"Verkfærastika","popupTop":"Fjarlægð frá efri brún","rel":"Relationship","selectAnchor":"Veldu akkeri","styles":"Stíll","tabIndex":"Raðnúmer innsláttarreits","target":"Mark","targetFrame":"<rammi>","targetFrameName":"Nafn markglugga","targetPopup":"<sprettigluggi>","targetPopupName":"Nafn sprettiglugga","title":"Stikla","toAnchor":"Bókamerki á þessari síðu","toEmail":"Netfang","toUrl":"Vefslóð","toolbar":"Stofna/breyta stiklu","type":"Stikluflokkur","unlink":"Fjarlægja stiklu","upload":"Senda upp"},"list":{"bulletedlist":"Punktalisti","numberedlist":"Númeraður listi"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"Ný síða"},"pagebreak":{"alt":"Page Break","toolbar":"Setja inn síðuskil"},"pastetext":{"button":"Líma sem ósniðinn texta","title":"Líma sem ósniðinn texta"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Líma úr Word","toolbar":"Líma úr Word"},"preview":{"preview":"Forskoða"},"print":{"toolbar":"Prenta"},"removeformat":{"toolbar":"Fjarlægja snið"},"save":{"toolbar":"Vista"},"selectall":{"toolbar":"Velja allt"},"showblocks":{"toolbar":"Sýna blokkir"},"sourcearea":{"toolbar":"Kóði"},"specialchar":{"options":"Special Character Options","title":"Velja tákn","toolbar":"Setja inn merki"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Stílflokkur","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Breidd ramma","caption":"Titill","cell":{"menu":"Reitur","insertBefore":"Skjóta inn reiti fyrir aftan","insertAfter":"Skjóta inn reiti fyrir framan","deleteCell":"Fella reit","merge":"Sameina reiti","mergeRight":"Sameina til hægri","mergeDown":"Sameina niður á við","splitHorizontal":"Kljúfa reit lárétt","splitVertical":"Kljúfa reit lóðrétt","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Reitaspássía","cellSpace":"Bil milli reita","column":{"menu":"Dálkur","insertBefore":"Skjóta inn dálki vinstra megin","insertAfter":"Skjóta inn dálki hægra megin","deleteColumn":"Fella dálk"},"columns":"Dálkar","deleteTable":"Fella töflu","headers":"Fyrirsagnir","headersBoth":"Hvort tveggja","headersColumn":"Fyrsti dálkur","headersNone":"Engar","headersRow":"Fyrsta röð","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Eigindi töflu","row":{"menu":"Röð","insertBefore":"Skjóta inn röð fyrir ofan","insertAfter":"Skjóta inn röð fyrir neðan","deleteRow":"Eyða röð"},"rows":"Raðir","summary":"Ãfram","title":"Eigindi töflu","toolbar":"Tafla","widthPc":"prósent","widthPx":"myndeindir","widthUnit":"width unit"},"undo":{"redo":"Hætta við afturköllun","undo":"Afturkalla"},"wsc":{"btnIgnore":"Hunsa","btnIgnoreAll":"Hunsa allt","btnReplace":"Skipta","btnReplaceAll":"Skipta öllu","btnUndo":"Til baka","changeTo":"Tillaga","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Villuleit ekki sett upp.<br>Viltu setja hana upp?","manyChanges":"Villuleit lokið: %1 orðum breytt","noChanges":"Villuleit lokið: Engu orði breytt","noMispell":"Villuleit lokið: Engin villa fannst","noSuggestions":"- engar tillögur -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Ekki í orðabókinni","oneChange":"Villuleit lokið: Einu orði breytt","progress":"Villuleit í gangi...","title":"Spell Check","toolbar":"Villuleit"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/it.js b/wqflask/wqflask/static/packages/ckeditor/lang/it.js
deleted file mode 100644
index 355f9463..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/it.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['it']={"editor":"Rich Text Editor","editorPanel":"Pannello Rich Text Editor","common":{"editorHelp":"Premi ALT 0 per aiuto","browseServer":"Cerca sul server","url":"URL","protocol":"Protocollo","upload":"Carica","uploadSubmit":"Invia al server","image":"Immagine","flash":"Oggetto Flash","form":"Modulo","checkbox":"Checkbox","radio":"Radio Button","textField":"Campo di testo","textarea":"Area di testo","hiddenField":"Campo nascosto","button":"Bottone","select":"Menu di selezione","imageButton":"Bottone immagine","notSet":"<non impostato>","id":"Id","name":"Nome","langDir":"Direzione scrittura","langDirLtr":"Da Sinistra a Destra (LTR)","langDirRtl":"Da Destra a Sinistra (RTL)","langCode":"Codice Lingua","longDescr":"URL descrizione estesa","cssClass":"Nome classe CSS","advisoryTitle":"Titolo","cssStyle":"Stile","ok":"OK","cancel":"Annulla","close":"Chiudi","preview":"Anteprima","resize":"Trascina per ridimensionare","generalTab":"Generale","advancedTab":"Avanzate","validateNumberFailed":"Il valore inserito non è un numero.","confirmNewPage":"Ogni modifica non salvata sarà persa. Sei sicuro di voler caricare una nuova pagina?","confirmCancel":"Alcune delle opzioni sono state cambiate. Sei sicuro di voler chiudere la finestra di dialogo?","options":"Opzioni","target":"Destinazione","targetNew":"Nuova finestra (_blank)","targetTop":"Finestra in primo piano (_top)","targetSelf":"Stessa finestra (_self)","targetParent":"Finestra Padre (_parent)","langDirLTR":"Da sinistra a destra (LTR)","langDirRTL":"Da destra a sinistra (RTL)","styles":"Stile","cssClasses":"Classi di stile","width":"Larghezza","height":"Altezza","align":"Allineamento","alignLeft":"Sinistra","alignRight":"Destra","alignCenter":"Centrato","alignJustify":"Giustifica","alignTop":"In Alto","alignMiddle":"Centrato","alignBottom":"In Basso","alignNone":"Nessuno","invalidValue":"Valore non valido.","invalidHeight":"L'altezza dev'essere un numero","invalidWidth":"La Larghezza dev'essere un numero","invalidCssLength":"Il valore indicato per il campo \"%1\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le classi CSS (px, %, in, cm, mm, em, ex, pt, o pc).","invalidHtmlLength":"Il valore indicato per il campo \"%1\" deve essere un numero positivo con o senza indicazione di una valida unità di misura per le pagine HTML (px o %).","invalidInlineStyle":"Il valore specificato per lo stile inline deve consistere in una o più tuple con il formato di \"name : value\", separati da semicolonne.","cssLengthTooltip":"Inserisci un numero per il valore in pixel oppure un numero con una valida unità CSS (px, %, in, cm, mm, ex, pt, o pc).","unavailable":"%1<span class=\"cke_accessibility\">, non disponibile</span>"},"about":{"copy":"Copyright &copy; $1. Tutti i diritti riservati.","dlgTitle":"Riguardo CKEditor","help":"Vedi $1 per l'aiuto.","moreInfo":"Per le informazioni sulla licenza si prega di visitare il nostro sito:","title":"Riguardo CKEditor","userGuide":"Guida Utente CKEditor"},"basicstyles":{"bold":"Grassetto","italic":"Corsivo","strike":"Barrato","subscript":"Pedice","superscript":"Apice","underline":"Sottolineato"},"bidi":{"ltr":"Direzione del testo da sinistra verso destra","rtl":"Direzione del testo da destra verso sinistra"},"blockquote":{"toolbar":"Citazione"},"clipboard":{"copy":"Copia","copyError":"Le impostazioni di sicurezza del browser non permettono di copiare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+C).","cut":"Taglia","cutError":"Le impostazioni di sicurezza del browser non permettono di tagliare automaticamente il testo. Usa la tastiera (Ctrl/Cmd+X).","paste":"Incolla","pasteArea":"Incolla","pasteMsg":"Incolla il testo all'interno dell'area sottostante usando la scorciatoia di tastiere (<STRONG>Ctrl/Cmd+V</STRONG>) e premi <STRONG>OK</STRONG>.","securityMsg":"A causa delle impostazioni di sicurezza del browser,l'editor non è in grado di accedere direttamente agli appunti. E' pertanto necessario incollarli di nuovo in questa finestra.","title":"Incolla"},"button":{"selectedLabel":"%1 (selezionato)"},"colorbutton":{"auto":"Automatico","bgColorTitle":"Colore sfondo","colors":{"000":"Nero","800000":"Marrone Castagna","8B4513":"Marrone Cuoio","2F4F4F":"Grigio Fumo di Londra","008080":"Acquamarina","000080":"Blu Oceano","4B0082":"Indigo","696969":"Grigio Scuro","B22222":"Giallo Fiamma","A52A2A":"Marrone","DAA520":"Giallo Mimosa","006400":"Verde Scuro","40E0D0":"Turchese","0000CD":"Blue Scuro","800080":"Viola","808080":"Grigio","F00":"Rosso","FF8C00":"Arancio Scuro","FFD700":"Oro","008000":"Verde","0FF":"Ciano","00F":"Blu","EE82EE":"Violetto","A9A9A9":"Grigio Scuro","FFA07A":"Salmone","FFA500":"Arancio","FFFF00":"Giallo","00FF00":"Lime","AFEEEE":"Turchese Chiaro","ADD8E6":"Blu Chiaro","DDA0DD":"Rosso Ciliegia","D3D3D3":"Grigio Chiaro","FFF0F5":"Lavanda Chiara","FAEBD7":"Bianco Antico","FFFFE0":"Giallo Chiaro","F0FFF0":"Verde Mela","F0FFFF":"Azzurro","F0F8FF":"Celeste","E6E6FA":"Lavanda","FFF":"Bianco"},"more":"Altri colori...","panelTitle":"Colori","textColorTitle":"Colore testo"},"colordialog":{"clear":"cancella","highlight":"Evidenzia","options":"Opzioni colore","selected":"Seleziona il colore","title":"Selezionare il colore"},"templates":{"button":"Modelli","emptyListMsg":"(Nessun modello definito)","insertOption":"Cancella il contenuto corrente","options":"Opzioni del Modello","selectPromptMsg":"Seleziona il modello da aprire nell'editor","title":"Contenuto dei modelli"},"contextmenu":{"options":"Opzioni del menù contestuale"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Titolo Avviso","cssClassInputLabel":"Classi di stile","edit":"Modifica DIV","inlineStyleInputLabel":"Stile Inline","langDirLTRLabel":"Da sinistra a destra (LTR)","langDirLabel":"Direzione di scrittura","langDirRTLLabel":"Da destra a sinistra (RTL)","languageCodeInputLabel":"Codice lingua","remove":"Rimuovi DIV","styleSelectLabel":"Stile","title":"Crea DIV contenitore","toolbar":"Crea DIV contenitore"},"toolbar":{"toolbarCollapse":"Minimizza Toolbar","toolbarExpand":"Espandi Toolbar","toolbarGroups":{"document":"Documento","clipboard":"Copia negli appunti/Annulla","editing":"Modifica","forms":"Form","basicstyles":"Stili di base","paragraph":"Paragrafo","links":"Link","insert":"Inserisci","styles":"Stili","colors":"Colori","tools":"Strumenti"},"toolbars":"Editor toolbar"},"elementspath":{"eleLabel":"Percorso degli elementi","eleTitle":"%1 elemento"},"find":{"find":"Trova","findOptions":"Opzioni di ricerca","findWhat":"Trova:","matchCase":"Maiuscole/minuscole","matchCyclic":"Ricerca ciclica","matchWord":"Solo parole intere","notFoundMsg":"L'elemento cercato non è stato trovato.","replace":"Sostituisci","replaceAll":"Sostituisci tutto","replaceSuccessMsg":"%1 occorrenza(e) sostituite.","replaceWith":"Sostituisci con:","title":"Cerca e Sostituisci"},"fakeobjects":{"anchor":"Ancora","flash":"Animazione Flash","hiddenfield":"Campo Nascosto","iframe":"IFrame","unknown":"Oggetto sconosciuto"},"flash":{"access":"Accesso Script","accessAlways":"Sempre","accessNever":"Mai","accessSameDomain":"Solo stesso dominio","alignAbsBottom":"In basso assoluto","alignAbsMiddle":"Centrato assoluto","alignBaseline":"Linea base","alignTextTop":"In alto al testo","bgcolor":"Colore sfondo","chkFull":"Permetti la modalità tutto schermo","chkLoop":"Riavvio automatico","chkMenu":"Abilita Menu di Flash","chkPlay":"Avvio Automatico","flashvars":"Variabili per Flash","hSpace":"HSpace","properties":"Proprietà Oggetto Flash","propertiesTab":"Proprietà","quality":"Qualità","qualityAutoHigh":"Alta Automatica","qualityAutoLow":"Bassa Automatica","qualityBest":"Massima","qualityHigh":"Alta","qualityLow":"Bassa","qualityMedium":"Intermedia","scale":"Ridimensiona","scaleAll":"Mostra Tutto","scaleFit":"Dimensione Esatta","scaleNoBorder":"Senza Bordo","title":"Proprietà Oggetto Flash","vSpace":"VSpace","validateHSpace":"L'HSpace dev'essere un numero.","validateSrc":"Devi inserire l'URL del collegamento","validateVSpace":"Il VSpace dev'essere un numero.","windowMode":"Modalità finestra","windowModeOpaque":"Opaca","windowModeTransparent":"Trasparente","windowModeWindow":"Finestra"},"font":{"fontSize":{"label":"Dimensione","voiceLabel":"Dimensione Carattere","panelTitle":"Dimensione"},"label":"Carattere","panelTitle":"Carattere","voiceLabel":"Carattere"},"forms":{"button":{"title":"Proprietà bottone","text":"Testo (Valore)","type":"Tipo","typeBtn":"Bottone","typeSbm":"Invio","typeRst":"Annulla"},"checkboxAndRadio":{"checkboxTitle":"Proprietà checkbox","radioTitle":"Proprietà radio button","value":"Valore","selected":"Selezionato"},"form":{"title":"Proprietà modulo","menu":"Proprietà modulo","action":"Azione","method":"Metodo","encoding":"Codifica"},"hidden":{"title":"Proprietà campo nascosto","name":"Nome","value":"Valore"},"select":{"title":"Proprietà menu di selezione","selectInfo":"Info","opAvail":"Opzioni disponibili","value":"Valore","size":"Dimensione","lines":"righe","chkMulti":"Permetti selezione multipla","opText":"Testo","opValue":"Valore","btnAdd":"Aggiungi","btnModify":"Modifica","btnUp":"Su","btnDown":"Gi","btnSetValue":"Imposta come predefinito","btnDelete":"Rimuovi"},"textarea":{"title":"Proprietà area di testo","cols":"Colonne","rows":"Righe"},"textfield":{"title":"Proprietà campo di testo","name":"Nome","value":"Valore","charWidth":"Larghezza","maxChars":"Numero massimo di caratteri","type":"Tipo","typeText":"Testo","typePass":"Password","typeEmail":"Email","typeSearch":"Cerca","typeTel":"Numero di telefono","typeUrl":"URL"}},"format":{"label":"Formato","panelTitle":"Formato","tag_address":"Indirizzo","tag_div":"Paragrafo (DIV)","tag_h1":"Titolo 1","tag_h2":"Titolo 2","tag_h3":"Titolo 3","tag_h4":"Titolo 4","tag_h5":"Titolo 5","tag_h6":"Titolo 6","tag_p":"Normale","tag_pre":"Formattato"},"horizontalrule":{"toolbar":"Inserisci riga orizzontale"},"iframe":{"border":"Mostra il bordo","noUrl":"Inserire l'URL del campo IFrame","scrolling":"Abilita scrollbar","title":"Proprietà IFrame","toolbar":"IFrame"},"image":{"alertUrl":"Devi inserire l'URL per l'immagine","alt":"Testo alternativo","border":"Bordo","btnUpload":"Invia al server","button2Img":"Vuoi trasformare il bottone immagine selezionato in un'immagine semplice?","hSpace":"HSpace","img2Button":"Vuoi trasferomare l'immagine selezionata in un bottone immagine?","infoTab":"Informazioni immagine","linkTab":"Collegamento","lockRatio":"Blocca rapporto","menu":"Proprietà immagine","resetSize":"Reimposta dimensione","title":"Proprietà immagine","titleButton":"Proprietà bottone immagine","upload":"Carica","urlMissing":"Manca l'URL dell'immagine.","vSpace":"VSpace","validateBorder":"Il campo Bordo deve essere un numero intero.","validateHSpace":"Il campo HSpace deve essere un numero intero.","validateVSpace":"Il campo VSpace deve essere un numero intero."},"indent":{"indent":"Aumenta rientro","outdent":"Riduci rientro"},"smiley":{"options":"Opzioni Smiley","title":"Inserisci emoticon","toolbar":"Emoticon"},"justify":{"block":"Giustifica","center":"Centra","left":"Allinea a sinistra","right":"Allinea a destra"},"language":{"button":"Imposta lingua","remove":"Rimuovi lingua"},"link":{"acccessKey":"Scorciatoia da tastiera","advanced":"Avanzate","advisoryContentType":"Tipo della risorsa collegata","advisoryTitle":"Titolo","anchor":{"toolbar":"Inserisci/Modifica Ancora","menu":"Proprietà ancora","title":"Proprietà ancora","name":"Nome ancora","errorName":"Inserici il nome dell'ancora","remove":"Rimuovi l'ancora"},"anchorId":"Per id elemento","anchorName":"Per Nome","charset":"Set di caretteri della risorsa collegata","cssClasses":"Nome classe CSS","emailAddress":"Indirizzo E-Mail","emailBody":"Corpo del messaggio","emailSubject":"Oggetto del messaggio","id":"Id","info":"Informazioni collegamento","langCode":"Direzione scrittura","langDir":"Direzione scrittura","langDirLTR":"Da Sinistra a Destra (LTR)","langDirRTL":"Da Destra a Sinistra (RTL)","menu":"Modifica collegamento","name":"Nome","noAnchors":"(Nessuna ancora disponibile nel documento)","noEmail":"Devi inserire un'indirizzo e-mail","noUrl":"Devi inserire l'URL del collegamento","other":"<altro>","popupDependent":"Dipendente (Netscape)","popupFeatures":"Caratteristiche finestra popup","popupFullScreen":"A tutto schermo (IE)","popupLeft":"Posizione da sinistra","popupLocationBar":"Barra degli indirizzi","popupMenuBar":"Barra del menu","popupResizable":"Ridimensionabile","popupScrollBars":"Barre di scorrimento","popupStatusBar":"Barra di stato","popupToolbar":"Barra degli strumenti","popupTop":"Posizione dall'alto","rel":"Relazioni","selectAnchor":"Scegli Ancora","styles":"Stile","tabIndex":"Ordine di tabulazione","target":"Destinazione","targetFrame":"<riquadro>","targetFrameName":"Nome del riquadro di destinazione","targetPopup":"<finestra popup>","targetPopupName":"Nome finestra popup","title":"Collegamento","toAnchor":"Ancora nel testo","toEmail":"E-Mail","toUrl":"URL","toolbar":"Collegamento","type":"Tipo di Collegamento","unlink":"Elimina collegamento","upload":"Carica"},"list":{"bulletedlist":"Inserisci/Rimuovi Elenco Puntato","numberedlist":"Inserisci/Rimuovi Elenco Numerato"},"liststyle":{"armenian":"Numerazione Armena","bulletedTitle":"Proprietà liste puntate","circle":"Cerchio","decimal":"Decimale (1, 2, 3, ecc.)","decimalLeadingZero":"Decimale preceduto da 0 (01, 02, 03, ecc.)","disc":"Disco","georgian":"Numerazione Georgiana (an, ban, gan, ecc.)","lowerAlpha":"Alfabetico minuscolo (a, b, c, d, e, ecc.)","lowerGreek":"Greco minuscolo (alpha, beta, gamma, ecc.)","lowerRoman":"Numerazione Romana minuscola (i, ii, iii, iv, v, ecc.)","none":"Nessuno","notset":"<non impostato>","numberedTitle":"Proprietà liste numerate","square":"Quadrato","start":"Inizio","type":"Tipo","upperAlpha":"Alfabetico maiuscolo (A, B, C, D, E, ecc.)","upperRoman":"Numerazione Romana maiuscola (I, II, III, IV, V, ecc.)","validateStartNumber":"Il numero di inizio di una lista numerata deve essere un numero intero."},"magicline":{"title":"Inserisci paragrafo qui"},"maximize":{"maximize":"Massimizza","minimize":"Minimizza"},"newpage":{"toolbar":"Nuova pagina"},"pagebreak":{"alt":"Interruzione di pagina","toolbar":"Inserisci interruzione di pagina per la stampa"},"pastetext":{"button":"Incolla come testo semplice","title":"Incolla come testo semplice"},"pastefromword":{"confirmCleanup":"Il testo da incollare sembra provenire da Word. Desideri pulirlo prima di incollare?","error":"Non è stato possibile eliminare il testo incollato a causa di un errore interno.","title":"Incolla da Word","toolbar":"Incolla da Word"},"preview":{"preview":"Anteprima"},"print":{"toolbar":"Stampa"},"removeformat":{"toolbar":"Elimina formattazione"},"save":{"toolbar":"Salva"},"selectall":{"toolbar":"Seleziona tutto"},"showblocks":{"toolbar":"Visualizza Blocchi"},"sourcearea":{"toolbar":"Sorgente"},"specialchar":{"options":"Opzioni carattere speciale","title":"Seleziona carattere speciale","toolbar":"Inserisci carattere speciale"},"scayt":{"btn_about":"About COMS","btn_dictionaries":"Dizionari","btn_disable":"Disabilita COMS","btn_enable":"Abilita COMS","btn_langs":"Lingue","btn_options":"Opzioni","text_title":""},"stylescombo":{"label":"Stili","panelTitle":"Stili di formattazione","panelTitle1":"Stili per blocchi","panelTitle2":"Stili in linea","panelTitle3":"Stili per oggetti"},"table":{"border":"Dimensione bordo","caption":"Intestazione","cell":{"menu":"Cella","insertBefore":"Inserisci Cella Prima","insertAfter":"Inserisci Cella Dopo","deleteCell":"Elimina celle","merge":"Unisce celle","mergeRight":"Unisci a Destra","mergeDown":"Unisci in Basso","splitHorizontal":"Dividi Cella Orizzontalmente","splitVertical":"Dividi Cella Verticalmente","title":"Proprietà della cella","cellType":"Tipo di cella","rowSpan":"Su più righe","colSpan":"Su più colonne","wordWrap":"Ritorno a capo","hAlign":"Allineamento orizzontale","vAlign":"Allineamento verticale","alignBaseline":"Linea Base","bgColor":"Colore di Sfondo","borderColor":"Colore del Bordo","data":"Dati","header":"Intestazione","yes":"Si","no":"No","invalidWidth":"La larghezza della cella dev'essere un numero.","invalidHeight":"L'altezza della cella dev'essere un numero.","invalidRowSpan":"Il numero di righe dev'essere un numero intero.","invalidColSpan":"Il numero di colonne dev'essere un numero intero.","chooseColor":"Scegli"},"cellPad":"Padding celle","cellSpace":"Spaziatura celle","column":{"menu":"Colonna","insertBefore":"Inserisci Colonna Prima","insertAfter":"Inserisci Colonna Dopo","deleteColumn":"Elimina colonne"},"columns":"Colonne","deleteTable":"Cancella Tabella","headers":"Intestazione","headersBoth":"Entrambe","headersColumn":"Prima Colonna","headersNone":"Nessuna","headersRow":"Prima Riga","invalidBorder":"La dimensione del bordo dev'essere un numero.","invalidCellPadding":"Il paging delle celle dev'essere un numero","invalidCellSpacing":"La spaziatura tra le celle dev'essere un numero.","invalidCols":"Il numero di colonne dev'essere un numero maggiore di 0.","invalidHeight":"L'altezza della tabella dev'essere un numero.","invalidRows":"Il numero di righe dev'essere un numero maggiore di 0.","invalidWidth":"La larghezza della tabella dev'essere un numero.","menu":"Proprietà tabella","row":{"menu":"Riga","insertBefore":"Inserisci Riga Prima","insertAfter":"Inserisci Riga Dopo","deleteRow":"Elimina righe"},"rows":"Righe","summary":"Indice","title":"Proprietà tabella","toolbar":"Tabella","widthPc":"percento","widthPx":"pixel","widthUnit":"unità larghezza"},"undo":{"redo":"Ripristina","undo":"Annulla"},"wsc":{"btnIgnore":"Ignora","btnIgnoreAll":"Ignora tutto","btnReplace":"Cambia","btnReplaceAll":"Cambia tutto","btnUndo":"Annulla","changeTo":"Cambia in","errorLoading":"Errore nel caricamento dell'host col servizio applicativo: %s.","ieSpellDownload":"Contollo ortografico non installato. Lo vuoi scaricare ora?","manyChanges":"Controllo ortografico completato: %1 parole cambiate","noChanges":"Controllo ortografico completato: nessuna parola cambiata","noMispell":"Controllo ortografico completato: nessun errore trovato","noSuggestions":"- Nessun suggerimento -","notAvailable":"Il servizio non è momentaneamente disponibile.","notInDic":"Non nel dizionario","oneChange":"Controllo ortografico completato: 1 parola cambiata","progress":"Controllo ortografico in corso","title":"Controllo ortografico","toolbar":"Correttore ortografico"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/ja.js b/wqflask/wqflask/static/packages/ckeditor/lang/ja.js
deleted file mode 100644
index f4d2a11e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/ja.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ja']={"editor":"リッãƒãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿","editorPanel":"リッãƒãƒ†ã‚­ã‚¹ãƒˆã‚¨ãƒ‡ã‚£ã‚¿ãƒ‘ãƒãƒ«","common":{"editorHelp":"ヘルプ㯠ALT 0 を押ã—ã¦ãã ã•ã„","browseServer":"サーãƒãƒ–ラウザ","url":"URL","protocol":"プロトコル","upload":"アップロード","uploadSubmit":"サーãƒãƒ¼ã«é€ä¿¡","image":"イメージ","flash":"Flash","form":"フォーム","checkbox":"ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹","radio":"ラジオボタン","textField":"1行テキスト","textarea":"テキストエリア","hiddenField":"ä¸å¯è¦–フィールド","button":"ボタン","select":"é¸æŠžãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰","imageButton":"ç”»åƒãƒœã‚¿ãƒ³","notSet":"<ãªã—>","id":"Id","name":"Name属性","langDir":"文字表記ã®æ–¹å‘","langDirLtr":"å·¦ã‹ã‚‰å³ (LTR)","langDirRtl":"å³ã‹ã‚‰å·¦ (RTL)","langCode":"言語コード","longDescr":"longdesc属性(長文説明)","cssClass":"スタイルシートクラス","advisoryTitle":"Title属性","cssStyle":"スタイルシート","ok":"OK","cancel":"キャンセル","close":"é–‰ã˜ã‚‹","preview":"プレビュー","resize":"ドラッグã—ã¦ãƒªã‚µã‚¤ã‚º","generalTab":"全般","advancedTab":"高度ãªè¨­å®š","validateNumberFailed":"値ãŒæ•°ã§ã¯ã‚ã‚Šã¾ã›ã‚“","confirmNewPage":"変更内容をä¿å­˜ã›ãšã€ æ–°ã—ã„ページを開ã„ã¦ã‚‚よã‚ã—ã„ã§ã—ょã†ã‹ï¼Ÿ","confirmCancel":"オプション設定を変更ã—ã¾ã—ãŸã€‚ダイアログを閉ã˜ã¦ã‚‚よã‚ã—ã„ã§ã—ょã†ã‹ï¼Ÿ","options":"オプション","target":"ターゲット","targetNew":"æ–°ã—ã„ウインドウ (_blank)","targetTop":"最上部ウィンドウ (_top)","targetSelf":"åŒã˜ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ (_self)","targetParent":"親ウィンドウ (_parent)","langDirLTR":"å·¦ã‹ã‚‰å³ (LTR)","langDirRTL":"å³ã‹ã‚‰å·¦ (RTL)","styles":"スタイル","cssClasses":"スタイルシートクラス","width":"å¹…","height":"高ã•","align":"è¡Œæƒãˆ","alignLeft":"å·¦","alignRight":"å³","alignCenter":"中央","alignJustify":"両端æƒãˆ","alignTop":"上","alignMiddle":"中央","alignBottom":"下","alignNone":"ãªã—","invalidValue":"ä¸æ­£ãªå€¤ã§ã™ã€‚","invalidHeight":"高ã•ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。","invalidWidth":"å¹…ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。","invalidCssLength":"入力ã•ã‚ŒãŸ \"%1\" é …ç›®ã®å€¤ã¯ã€CSSã®å¤§ãã•(px, %, in, cm, mm, em, ex, pt, ã¾ãŸã¯ pc)ãŒæ­£ã—ã„ã‚‚ã®ã§ã‚ã‚‹/ãªã„ã«é–¢ã‚らãšã€æ­£ã®å€¤ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚","invalidHtmlLength":"入力ã•ã‚ŒãŸ \"%1\" é …ç›®ã®å€¤ã¯ã€HTMLã®å¤§ãã•(px ã¾ãŸã¯ %)ãŒæ­£ã—ã„ã‚‚ã®ã§ã‚ã‚‹/ãªã„ã«é–¢ã‚らãšã€æ­£ã®å€¤ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚","invalidInlineStyle":"入力ã•ã‚ŒãŸã‚¤ãƒ³ãƒ©ã‚¤ãƒ³ã‚¹ã‚¿ã‚¤ãƒ«ã®å€¤ã¯ã€\"åå‰ : 値\" ã®ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã®ã‚»ãƒƒãƒˆã§ã€è¤‡æ•°ã®å ´åˆã¯ã‚»ãƒŸã‚³ãƒ­ãƒ³ã§åŒºåˆ‡ã‚‰ã‚Œã¦ã„ã‚‹å½¢å¼ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚","cssLengthTooltip":"ピクセル数もã—ãã¯CSSã«ã‚»ãƒƒãƒˆã§ãる数値を入力ã—ã¦ãã ã•ã„。(px,%,in,cm,mm,em,ex,pt,or pc)","unavailable":"%1<span class=\"cke_accessibility\">, 利用ä¸å¯èƒ½</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"CKEditorã«ã¤ã„ã¦","help":"$1 ã®ãƒ˜ãƒ«ãƒ—を見ã¦ãã ã•ã„。","moreInfo":"ライセンス情報ã®è©³ç´°ã¯ã‚¦ã‚§ãƒ–サイトã«ã¦ç¢ºèªã—ã¦ãã ã•ã„:","title":"CKEditorã«ã¤ã„ã¦","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"太字","italic":"斜体","strike":"打ã¡æ¶ˆã—ç·š","subscript":"下付ã","superscript":"上付ã","underline":"下線"},"bidi":{"ltr":"テキストã®å‘ã : å·¦ã‹ã‚‰å³ã¸","rtl":"テキストã®å‘ã : å³ã‹ã‚‰å·¦ã¸"},"blockquote":{"toolbar":"ブロック引用文"},"clipboard":{"copy":"コピー","copyError":"ブラウザーã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£è¨­å®šã«ã‚ˆã‚Šã‚¨ãƒ‡ã‚£ã‚¿ã®ã‚³ãƒ”ーæ“作を自動ã§å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。実行ã™ã‚‹ã«ã¯æ‰‹å‹•ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®(Ctrl/Cmd+C)を使用ã—ã¦ãã ã•ã„。","cut":"切りå–ã‚Š","cutError":"ブラウザーã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£è¨­å®šã«ã‚ˆã‚Šã‚¨ãƒ‡ã‚£ã‚¿ã®åˆ‡ã‚Šå–ã‚Šæ“作を自動ã§å®Ÿè¡Œã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。実行ã™ã‚‹ã«ã¯æ‰‹å‹•ã§ã‚­ãƒ¼ãƒœãƒ¼ãƒ‰ã®(Ctrl/Cmd+X)を使用ã—ã¦ãã ã•ã„。","paste":"貼り付ã‘","pasteArea":"貼り付ã‘場所","pasteMsg":"キーボード(<STRONG>Ctrl/Cmd+V</STRONG>)を使用ã—ã¦ã€æ¬¡ã®å…¥åŠ›ã‚¨ãƒªã‚¢å†…ã§è²¼ã‚Šä»˜ã‘ã¦ã€<STRONG>OK</STRONG>を押ã—ã¦ãã ã•ã„。","securityMsg":"ブラウザã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£è¨­å®šã«ã‚ˆã‚Šã€ã‚¨ãƒ‡ã‚£ã‚¿ã¯ã‚¯ãƒªãƒƒãƒ—ボードデータã«ç›´æŽ¥ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。ã“ã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã¯è²¼ã‚Šä»˜ã‘æ“作を行ã†åº¦ã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚","title":"貼り付ã‘"},"button":{"selectedLabel":"%1 (é¸æŠžä¸­)"},"colorbutton":{"auto":"自動","bgColorTitle":"背景色","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"ãã®ä»–ã®è‰²...","panelTitle":"色","textColorTitle":"文字色"},"colordialog":{"clear":"クリア","highlight":"ãƒã‚¤ãƒ©ã‚¤ãƒˆ","options":"カラーオプション","selected":"é¸æŠžã•ã‚ŒãŸè‰²","title":"色é¸æŠž"},"templates":{"button":"テンプレート","emptyListMsg":"(テンプレートãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“)","insertOption":"ç¾åœ¨ã®ã‚¨ãƒ‡ã‚£ã‚¿ã®å†…容ã¨ç½®ãæ›ãˆã¾ã™","options":"テンプレートオプション","selectPromptMsg":"エディターã§ä½¿ç”¨ã™ã‚‹ãƒ†ãƒ³ãƒ—レートをé¸æŠžã—ã¦ãã ã•ã„。<br>(ç¾åœ¨ã®ã‚¨ãƒ‡ã‚£ã‚¿ã®å†…容ã¯å¤±ã‚ã‚Œã¾ã™):","title":"内容テンプレート"},"contextmenu":{"options":"コンテキストメニューオプション"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Title属性","cssClassInputLabel":"スタイルシートクラス","edit":"Divコンテナを編集","inlineStyleInputLabel":"インラインスタイル","langDirLTRLabel":"å·¦ã‹ã‚‰å³ (LTR)","langDirLabel":"文字表記ã®æ–¹å‘","langDirRTLLabel":"å³ã‹ã‚‰å·¦ (RTL)","languageCodeInputLabel":" 言語コード","remove":"Divコンテナを削除","styleSelectLabel":"スタイル","title":"Divコンテナ","toolbar":"Divコンテナ"},"toolbar":{"toolbarCollapse":"ツールãƒãƒ¼ã‚’é–‰ã˜ã‚‹","toolbarExpand":"ツールãƒãƒ¼ã‚’é–‹ã","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"編集ツールãƒãƒ¼"},"elementspath":{"eleLabel":"è¦ç´ ãƒ‘ス","eleTitle":"%1 è¦ç´ "},"find":{"find":"検索","findOptions":"検索オプション","findWhat":"検索ã™ã‚‹æ–‡å­—列:","matchCase":"大文字ã¨å°æ–‡å­—を区別ã™ã‚‹","matchCyclic":"末尾ã«é€¹ã—ãŸã‚‰å…ˆé ­ã«æˆ»ã‚‹","matchWord":"å˜èªžå˜ä½ã§æŽ¢ã™","notFoundMsg":"指定ã•ã‚ŒãŸæ–‡å­—列ã¯è¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚","replace":"ç½®æ›","replaceAll":"ã™ã¹ã¦ç½®æ›","replaceSuccessMsg":"%1 個置æ›ã—ã¾ã—ãŸã€‚","replaceWith":"ç½®æ›å¾Œã®æ–‡å­—列:","title":"検索ã¨ç½®æ›"},"fakeobjects":{"anchor":"アンカー","flash":"Flash Animation","hiddenfield":"ä¸å¯è¦–フィールド","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"スプリクトアクセス(AllowScriptAccess)","accessAlways":"ã™ã¹ã¦ã®å ´åˆã«é€šä¿¡å¯èƒ½(Always)","accessNever":"ã™ã¹ã¦ã®å ´åˆã«é€šä¿¡ä¸å¯èƒ½(Never)","accessSameDomain":"åŒä¸€ãƒ‰ãƒ¡ã‚¤ãƒ³ã®ã¿ã«é€šä¿¡å¯èƒ½(Same domain)","alignAbsBottom":"下部(絶対的)","alignAbsMiddle":"中央(絶対的)","alignBaseline":"ベースライン","alignTextTop":"テキスト上部","bgcolor":"背景色","chkFull":"フルスクリーン許å¯","chkLoop":"ループå†ç”Ÿ","chkMenu":"Flashメニューå¯èƒ½","chkPlay":"å†ç”Ÿ","flashvars":"フラッシュã«æ¸¡ã™å¤‰æ•°(FlashVars)","hSpace":"横間隔","properties":"Flash プロパティ","propertiesTab":"プロパティ","quality":"画質","qualityAutoHigh":"自動/高","qualityAutoLow":"自動/低","qualityBest":"å“質優先","qualityHigh":"高","qualityLow":"低","qualityMedium":"中","scale":"拡大縮å°è¨­å®š","scaleAll":"ã™ã¹ã¦è¡¨ç¤º","scaleFit":"上下左å³ã«ãƒ•ã‚£ãƒƒãƒˆ","scaleNoBorder":"外ãŒè¦‹ãˆãªã„様ã«æ‹¡å¤§","title":"Flash プロパティ","vSpace":"縦間隔","validateHSpace":"横間隔ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。","validateSrc":"リンクURLを入力ã—ã¦ãã ã•ã„。","validateVSpace":"縦間隔ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。","windowMode":"ウィンドウモード","windowModeOpaque":"背景をä¸é€æ˜Žè¨­å®š","windowModeTransparent":"背景をé€éŽè¨­å®š","windowModeWindow":"標準"},"font":{"fontSize":{"label":"サイズ","voiceLabel":"フォントサイズ","panelTitle":"フォントサイズ"},"label":"フォント","panelTitle":"フォント","voiceLabel":"フォント"},"forms":{"button":{"title":"ボタン プロパティ","text":"テキスト (値)","type":"タイプ","typeBtn":"ボタン","typeSbm":"é€ä¿¡","typeRst":"リセット"},"checkboxAndRadio":{"checkboxTitle":"ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã®ãƒ—ロパティ","radioTitle":"ラジオボタンã®ãƒ—ロパティ","value":"値","selected":"é¸æŠžæ¸ˆã¿"},"form":{"title":"フォームã®ãƒ—ロパティ","menu":"フォームã®ãƒ—ロパティ","action":"アクション (action)","method":"メソッド (method)","encoding":"ã‚¨ãƒ³ã‚³ãƒ¼ãƒ‰æ–¹å¼ (encoding)"},"hidden":{"title":"ä¸å¯è¦–フィールド プロパティ","name":"åå‰ (name)","value":"値 (value)"},"select":{"title":"é¸æŠžãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®ãƒ—ロパティ","selectInfo":"情報","opAvail":"利用å¯èƒ½ãªã‚ªãƒ—ション","value":"é¸æŠžé …目値","size":"サイズ","lines":"è¡Œ","chkMulti":"複数é¸æŠžã‚’許å¯","opText":"é¸æŠžé …ç›®å","opValue":"値","btnAdd":"追加","btnModify":"編集","btnUp":"上ã¸","btnDown":"下ã¸","btnSetValue":"é¸æŠžã—ãŸå€¤ã‚’設定","btnDelete":"削除"},"textarea":{"title":"テキストエリア プロパティ","cols":"列","rows":"è¡Œ"},"textfield":{"title":"1行テキスト プロパティ","name":"åå‰","value":"値","charWidth":"サイズ","maxChars":"最大長","type":"タイプ","typeText":"テキスト","typePass":"パスワード入力","typeEmail":"メール","typeSearch":"検索","typeTel":"電話番å·","typeUrl":"URL"}},"format":{"label":"書å¼","panelTitle":"段è½ã®æ›¸å¼","tag_address":"アドレス","tag_div":"標準 (DIV)","tag_h1":"見出㗠1","tag_h2":"見出㗠2","tag_h3":"見出㗠3","tag_h4":"見出㗠4","tag_h5":"見出㗠5","tag_h6":"見出㗠6","tag_p":"標準","tag_pre":"書å¼ä»˜ã"},"horizontalrule":{"toolbar":"水平線"},"iframe":{"border":"フレームã®æž ã‚’表示","noUrl":"iframeã®URLを入力ã—ã¦ãã ã•ã„。","scrolling":"スクロールãƒãƒ¼ã®è¡¨ç¤ºã‚’許å¯","title":"iFrameã®ãƒ—ロパティ","toolbar":"IFrame"},"image":{"alertUrl":"ç”»åƒã®URLを入力ã—ã¦ãã ã•ã„","alt":"代替テキスト","border":"æž ç·šã®å¹…","btnUpload":"サーãƒãƒ¼ã«é€ä¿¡","button2Img":"é¸æŠžã—ãŸç”»åƒãƒœã‚¿ãƒ³ã‚’ç”»åƒã«å¤‰æ›ã—ã¾ã™ã‹ï¼Ÿ","hSpace":"水平間隔","img2Button":"é¸æŠžã—ãŸç”»åƒã‚’ç”»åƒãƒœã‚¿ãƒ³ã«å¤‰æ›ã—ã¾ã™ã‹ï¼Ÿ","infoTab":"ç”»åƒæƒ…å ±","linkTab":"リンク","lockRatio":"比率を固定","menu":"ç”»åƒã®ãƒ—ロパティ","resetSize":"サイズをリセット","title":"ç”»åƒã®ãƒ—ロパティ","titleButton":"ç”»åƒãƒœã‚¿ãƒ³ã®ãƒ—ロパティ","upload":"アップロード","urlMissing":"ç”»åƒã®URLを入力ã—ã¦ãã ã•ã„。","vSpace":"åž‚ç›´é–“éš”","validateBorder":"æž ç·šã®å¹…ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。","validateHSpace":"水平間隔ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。","validateVSpace":"åž‚ç›´é–“éš”ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。"},"indent":{"indent":"インデント","outdent":"インデント解除"},"smiley":{"options":"絵文字オプション","title":"顔文字挿入","toolbar":"絵文字"},"justify":{"block":"両端æƒãˆ","center":"中央æƒãˆ","left":"å·¦æƒãˆ","right":"å³æƒãˆ"},"language":{"button":"言語を設定","remove":"言語を削除"},"link":{"acccessKey":"アクセスキー","advanced":"高度ãªè¨­å®š","advisoryContentType":"Content Type属性","advisoryTitle":"Title属性","anchor":{"toolbar":"アンカー挿入/編集","menu":"アンカーã®ç·¨é›†","title":"アンカーã®ãƒ—ロパティ","name":"アンカーå","errorName":"アンカーåを入力ã—ã¦ãã ã•ã„。","remove":"アンカーを削除"},"anchorId":"エレメントID","anchorName":"アンカーå","charset":"リンク先ã®charset","cssClasses":"スタイルシートクラス","emailAddress":"E-Mail アドレス","emailBody":"本文","emailSubject":"件å","id":"Id","info":"ãƒã‚¤ãƒ‘ーリンク情報","langCode":"言語コード","langDir":"文字表記ã®æ–¹å‘","langDirLTR":"å·¦ã‹ã‚‰å³ (LTR)","langDirRTL":"å³ã‹ã‚‰å·¦ (RTL)","menu":"リンクを編集","name":"Name属性","noAnchors":"(ã“ã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆå†…ã«ã‚¢ãƒ³ã‚«ãƒ¼ã¯ã‚ã‚Šã¾ã›ã‚“)","noEmail":"メールアドレスを入力ã—ã¦ãã ã•ã„。","noUrl":"リンクURLを入力ã—ã¦ãã ã•ã„。","other":"<ãã®ä»–ã®>","popupDependent":"é–‹ã„ãŸã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã«é€£å‹•ã—ã¦é–‰ã˜ã‚‹ (Netscape)","popupFeatures":"ãƒãƒƒãƒ—アップウィンドウ特徴","popupFullScreen":"全画é¢ãƒ¢ãƒ¼ãƒ‰(IE)","popupLeft":"左端ã‹ã‚‰ã®åº§æ¨™ã§æŒ‡å®š","popupLocationBar":"ロケーションãƒãƒ¼","popupMenuBar":"メニューãƒãƒ¼","popupResizable":"サイズå¯å¤‰","popupScrollBars":"スクロールãƒãƒ¼","popupStatusBar":"ステータスãƒãƒ¼","popupToolbar":"ツールãƒãƒ¼","popupTop":"上端ã‹ã‚‰ã®åº§æ¨™ã§æŒ‡å®š","rel":"関連リンク","selectAnchor":"アンカーをé¸æŠž","styles":"スタイルシート","tabIndex":"タブインデックス","target":"ターゲット","targetFrame":"<フレーム>","targetFrameName":"ターゲットã®ãƒ•ãƒ¬ãƒ¼ãƒ å","targetPopup":"<ãƒãƒƒãƒ—アップウィンドウ>","targetPopupName":"ãƒãƒƒãƒ—アップウィンドウå","title":"ãƒã‚¤ãƒ‘ーリンク","toAnchor":"ページ内ã®ã‚¢ãƒ³ã‚«ãƒ¼","toEmail":"E-Mail","toUrl":"URL","toolbar":"リンク挿入/編集","type":"リンクタイプ","unlink":"リンクを削除","upload":"アップロード"},"list":{"bulletedlist":"番å·ç„¡ã—リスト","numberedlist":"番å·ä»˜ãリスト"},"liststyle":{"armenian":"アルメニア数字","bulletedTitle":"箇æ¡æ›¸ãã®ãƒ—ロパティ","circle":"白丸","decimal":"æ•°å­— (1, 2, 3, etc.)","decimalLeadingZero":"0付ãã®æ•°å­— (01, 02, 03, etc.)","disc":"黒丸","georgian":"グルジア数字 (an, ban, gan, etc.)","lowerAlpha":"å°æ–‡å­—アルファベット (a, b, c, d, e, etc.)","lowerGreek":"å°æ–‡å­—ギリシャ文字 (alpha, beta, gamma, etc.)","lowerRoman":"å°æ–‡å­—ローマ数字 (i, ii, iii, iv, v, etc.)","none":"ãªã—","notset":"<ãªã—>","numberedTitle":"番å·ä»˜ãリストã®ãƒ—ロパティ","square":"四角","start":"開始","type":"種類","upperAlpha":"大文字アルファベット (A, B, C, D, E, etc.)","upperRoman":"大文字ローマ数字 (I, II, III, IV, V, etc.)","validateStartNumber":"リストã®é–‹å§‹ç•ªå·ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。"},"magicline":{"title":"ã“ã“ã«æ®µè½ã‚’挿入"},"maximize":{"maximize":"最大化","minimize":"最å°åŒ–"},"newpage":{"toolbar":"æ–°ã—ã„ページ"},"pagebreak":{"alt":"改ページ","toolbar":"å°åˆ·ã®ç‚ºã«æ”¹ãƒšãƒ¼ã‚¸æŒ¿å…¥"},"pastetext":{"button":"プレーンテキストã¨ã—ã¦è²¼ã‚Šä»˜ã‘","title":"プレーンテキストã¨ã—ã¦è²¼ã‚Šä»˜ã‘"},"pastefromword":{"confirmCleanup":"貼り付ã‘ã‚’è¡Œã†ãƒ†ã‚­ã‚¹ãƒˆã¯ãƒ¯ãƒ¼ãƒ‰æ–‡ç« ã‹ã‚‰ã‚³ãƒ”ーã•ã‚Œã‚ˆã†ã¨ã—ã¦ã„ã¾ã™ã€‚貼り付ã‘ã‚‹å‰ã«ã‚¯ãƒªãƒ¼ãƒ‹ãƒ³ã‚°ã‚’è¡Œã„ã¾ã™ã‹ï¼Ÿ","error":"内部エラーã«ã‚ˆã‚Šè²¼ã‚Šä»˜ã‘ãŸãƒ‡ãƒ¼ã‚¿ã‚’クリアã§ãã¾ã›ã‚“ã§ã—ãŸ","title":"ワード文章ã‹ã‚‰è²¼ã‚Šä»˜ã‘","toolbar":"ワード文章ã‹ã‚‰è²¼ã‚Šä»˜ã‘"},"preview":{"preview":"プレビュー"},"print":{"toolbar":"å°åˆ·"},"removeformat":{"toolbar":"書å¼ã‚’解除"},"save":{"toolbar":"ä¿å­˜"},"selectall":{"toolbar":"ã™ã¹ã¦é¸æŠž"},"showblocks":{"toolbar":"ブロック表示"},"sourcearea":{"toolbar":"ソース"},"specialchar":{"options":"特殊文字オプション","title":"特殊文字ã®é¸æŠž","toolbar":"特殊文字を挿入"},"scayt":{"btn_about":"SCAYTバージョï¾","btn_dictionaries":"辞書","btn_disable":"SCAYT無効","btn_enable":"SCAYT有効","btn_langs":"言語","btn_options":"オプション","text_title":""},"stylescombo":{"label":"スタイル","panelTitle":"スタイル","panelTitle1":"ブロックスタイル","panelTitle2":"インラインスタイル","panelTitle3":"オブジェクトスタイル"},"table":{"border":"æž ç·šã®å¹…","caption":"キャプション","cell":{"menu":"セル","insertBefore":"セルをå‰ã«æŒ¿å…¥","insertAfter":"セルを後ã«æŒ¿å…¥","deleteCell":"セルを削除","merge":"セルをçµåˆ","mergeRight":"å³ã«çµåˆ","mergeDown":"下ã«çµåˆ","splitHorizontal":"セルを水平方å‘ã«åˆ†å‰²","splitVertical":"セルを垂直方å‘ã«åˆ†å‰²","title":"セルã®ãƒ—ロパティ","cellType":"セルã®ç¨®é¡ž","rowSpan":"è¡Œã®çµåˆæ•°","colSpan":"列ã®çµåˆæ•°","wordWrap":"å˜èªžã®æŠ˜ã‚Šè¿”ã—","hAlign":"水平方å‘ã®é…ç½®","vAlign":"åž‚ç›´æ–¹å‘ã®é…ç½®","alignBaseline":"ベースライン","bgColor":"背景色","borderColor":"ボーダーカラー","data":"テーブルデータ (td)","header":"ヘッダ","yes":"ã¯ã„","no":"ã„ã„ãˆ","invalidWidth":"セル幅ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。","invalidHeight":"セル高ã•ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。","invalidRowSpan":"縦幅(行数)ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。","invalidColSpan":"横幅(列数)ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。","chooseColor":"色ã®é¸æŠž"},"cellPad":"セル内間隔","cellSpace":"セル内余白","column":{"menu":"列","insertBefore":"列を左ã«æŒ¿å…¥","insertAfter":"列をå³ã«æŒ¿å…¥","deleteColumn":"列を削除"},"columns":"列数","deleteTable":"表を削除","headers":"ヘッダ (th)","headersBoth":"両方","headersColumn":"最åˆã®åˆ—ã®ã¿","headersNone":"ãªã—","headersRow":"最åˆã®è¡Œã®ã¿","invalidBorder":"æž ç·šã®å¹…ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。","invalidCellPadding":"セル内余白ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。","invalidCellSpacing":"セル間余白ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。","invalidCols":"列数ã¯0より大ããªæ•°å€¤ã‚’入力ã—ã¦ãã ã•ã„。","invalidHeight":"高ã•ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。","invalidRows":"行数ã¯0より大ããªæ•°å€¤ã‚’入力ã—ã¦ãã ã•ã„。","invalidWidth":"å¹…ã¯æ•°å€¤ã§å…¥åŠ›ã—ã¦ãã ã•ã„。","menu":"表ã®ãƒ—ロパティ","row":{"menu":"è¡Œ","insertBefore":"行を上ã«æŒ¿å…¥","insertAfter":"行を下ã«æŒ¿å…¥","deleteRow":"行を削除"},"rows":"行数","summary":"表ã®æ¦‚è¦","title":"表ã®ãƒ—ロパティ","toolbar":"表","widthPc":"パーセント","widthPx":"ピクセル","widthUnit":"å¹…ã®å˜ä½"},"undo":{"redo":"ã‚„ã‚Šç›´ã™","undo":"å…ƒã«æˆ»ã™"},"wsc":{"btnIgnore":"無視","btnIgnoreAll":"ã™ã¹ã¦ç„¡è¦–","btnReplace":"ç½®æ›","btnReplaceAll":"ã™ã¹ã¦ç½®æ›","btnUndo":"ã‚„ã‚Šç›´ã—","changeTo":"変更","errorLoading":"アプリケーションサービスホスト読込ã¿ã‚¨ãƒ©ãƒ¼: %s.","ieSpellDownload":"スペルãƒã‚§ãƒƒã‚«ãƒ¼ãŒã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã•ã‚Œã¦ã„ã¾ã›ã‚“。今ã™ãダウンロードã—ã¾ã™ã‹?","manyChanges":"スペルãƒã‚§ãƒƒã‚¯å®Œäº†: %1 語å¥å¤‰æ›´ã•ã‚Œã¾ã—ãŸ","noChanges":"スペルãƒã‚§ãƒƒã‚¯å®Œäº†: 語å¥ã¯å¤‰æ›´ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸ","noMispell":"スペルãƒã‚§ãƒƒã‚¯å®Œäº†: スペルã®èª¤ã‚Šã¯ã‚ã‚Šã¾ã›ã‚“ã§ã—ãŸ","noSuggestions":"- 該当ãªã— -","notAvailable":"申ã—訳ã‚ã‚Šã¾ã›ã‚“ã€ç¾åœ¨ã‚µãƒ¼ãƒ“スを利用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“","notInDic":"辞書ã«ã‚ã‚Šã¾ã›ã‚“","oneChange":"スペルãƒã‚§ãƒƒã‚¯å®Œäº†: 1語å¥å¤‰æ›´ã•ã‚Œã¾ã—ãŸ","progress":"スペルãƒã‚§ãƒƒã‚¯å‡¦ç†ä¸­...","title":"スペルãƒã‚§ãƒƒã‚¯","toolbar":"スペルãƒã‚§ãƒƒã‚¯"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/ka.js b/wqflask/wqflask/static/packages/ckeditor/lang/ka.js
deleted file mode 100644
index bb340e0c..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/ka.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ka']={"editor":"ტექსტის რედáƒáƒ¥áƒ¢áƒáƒ áƒ˜","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"დáƒáƒáƒ­áƒ˜áƒ áƒ”თ ALT 0-ს დáƒáƒ®áƒ›áƒáƒ áƒ”ბის მისáƒáƒ¦áƒ”ბáƒáƒ“","browseServer":"სერვერზე დáƒáƒ—ვáƒáƒšáƒ˜áƒ”რებáƒ","url":"URL","protocol":"პრáƒáƒ¢áƒáƒ™áƒáƒšáƒ˜","upload":"áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ","uploadSubmit":"სერვერზე გáƒáƒ’ზáƒáƒ•áƒœáƒ","image":"სურáƒáƒ—ი","flash":"Flash","form":"ფáƒáƒ áƒ›áƒ","checkbox":"მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ˜áƒ¡ ღილáƒáƒ™áƒ˜","radio":"áƒáƒ›áƒáƒ áƒ©áƒ”ვის ღილáƒáƒ™áƒ˜","textField":"ტექსტური ველი","textarea":"ტექსტური áƒáƒ áƒ”","hiddenField":"მáƒáƒšáƒ£áƒšáƒ˜ ველი","button":"ღილáƒáƒ™áƒ˜","select":"áƒáƒ áƒ©áƒ”ვის ველი","imageButton":"სურáƒáƒ—იáƒáƒœáƒ˜ ღილáƒáƒ™áƒ˜","notSet":"<áƒáƒ áƒáƒ¤áƒ”რი>","id":"Id","name":"სáƒáƒ®áƒ”ლი","langDir":"ენის მიმáƒáƒ áƒ—ულებáƒ","langDirLtr":"მáƒáƒ áƒªáƒ®áƒœáƒ˜áƒ“áƒáƒœ მáƒáƒ áƒ¯áƒ•áƒœáƒ˜áƒ• (LTR)","langDirRtl":"მáƒáƒ áƒ¯áƒ•áƒœáƒ˜áƒ“áƒáƒœ მáƒáƒ áƒªáƒ®áƒœáƒ˜áƒ• (RTL)","langCode":"ენის კáƒáƒ“ი","longDescr":"დიდი áƒáƒ¦áƒ¬áƒ”რის URL","cssClass":"CSS კლáƒáƒ¡áƒ˜","advisoryTitle":"სáƒáƒ—áƒáƒ£áƒ áƒ˜","cssStyle":"CSS სტილი","ok":"დიáƒáƒ®","cancel":"გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ","close":"დáƒáƒ®áƒ£áƒ áƒ•áƒ","preview":"გáƒáƒ“áƒáƒ®áƒ”დვáƒ","resize":"გáƒáƒ¬áƒ˜áƒ” ზáƒáƒ›áƒ˜áƒ¡ შესáƒáƒªáƒ•áƒšáƒ”ლáƒáƒ“","generalTab":"ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ","advancedTab":"გáƒáƒ¤áƒáƒ áƒ—áƒáƒ”ბული","validateNumberFailed":"ეს მნიშვნელáƒáƒ‘რáƒáƒ áƒáƒ რიცხვი.","confirmNewPage":"áƒáƒ› დáƒáƒ™áƒ£áƒ›áƒ”ნტში ყველრჩáƒáƒ£áƒ¬áƒ”რელი ცვლილებრდáƒáƒ˜áƒ™áƒáƒ áƒ’ებáƒ. დáƒáƒ áƒ¬áƒ›áƒ£áƒœáƒ”ბული ხáƒáƒ áƒ— რáƒáƒ› áƒáƒ®áƒáƒšáƒ˜ გვერდის ჩáƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვრგინდáƒáƒ—?","confirmCancel":"ზáƒáƒ’იერთი პáƒáƒ áƒáƒ›áƒ”ტრი შეცვლილიáƒ, დáƒáƒ áƒ¬áƒ›áƒ£áƒœáƒ”ბულილ ხáƒáƒ áƒ— რáƒáƒ› ფáƒáƒœáƒ¯áƒ áƒ˜áƒ¡ დáƒáƒ®áƒ£áƒ áƒ•áƒ გსურთ?","options":"პáƒáƒ áƒáƒ›áƒ”ტრები","target":"გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ áƒáƒ“გილი","targetNew":"áƒáƒ®áƒáƒšáƒ˜ ფáƒáƒœáƒ¯áƒáƒ áƒ (_blank)","targetTop":"ზედრფáƒáƒœáƒ¯áƒáƒ áƒ (_top)","targetSelf":"იგივე ფáƒáƒœáƒ¯áƒáƒ áƒ (_self)","targetParent":"მშáƒáƒ‘ელი ფáƒáƒœáƒ¯áƒáƒ áƒ (_parent)","langDirLTR":"მáƒáƒ áƒªáƒ®áƒœáƒ˜áƒ“áƒáƒœ მáƒáƒ áƒ¯áƒ•áƒœáƒ˜áƒ• (LTR)","langDirRTL":"მáƒáƒ áƒ¯áƒ•áƒœáƒ˜áƒ“áƒáƒœ მáƒáƒ áƒªáƒ®áƒœáƒ˜áƒ• (RTL)","styles":"სტილი","cssClasses":"CSS კლáƒáƒ¡áƒ˜","width":"სიგáƒáƒœáƒ”","height":"სიმáƒáƒ¦áƒšáƒ”","align":"სწáƒáƒ áƒ”ბáƒ","alignLeft":"მáƒáƒ áƒªáƒ®áƒ”ნáƒ","alignRight":"მáƒáƒ áƒ¯áƒ•áƒ”ნáƒ","alignCenter":"შუáƒ","alignJustify":"両端æƒãˆ","alignTop":"ზემáƒáƒ—áƒ","alignMiddle":"შუáƒ","alignBottom":"ქვემáƒáƒ—áƒ","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"სიმáƒáƒ¦áƒšáƒ” რიცხვით უნდრიყáƒáƒ¡ წáƒáƒ áƒ›áƒáƒ“გენილი.","invalidWidth":"სიგáƒáƒœáƒ” რიცხვით უნდრიყáƒáƒ¡ წáƒáƒ áƒ›áƒáƒ“გენილი.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, მიუწვდáƒáƒ›áƒ”ლიáƒ</span>"},"about":{"copy":"Copyright &copy; $1. ყველრუფლებრდáƒáƒªáƒ£áƒšáƒ˜áƒ.","dlgTitle":"CKEditor-ის შესáƒáƒ®áƒ”ბ","help":"დáƒáƒ®áƒ›áƒáƒ áƒ”ბისთვის იხილეთ $1.","moreInfo":"ლიცენზიის ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ˜áƒ¡áƒ—ვის ეწვიეთ ჩვენს სáƒáƒ˜áƒ¢áƒ¡:","title":"CKEditor-ის შესáƒáƒ®áƒ”ბ","userGuide":"CKEditor-ის მáƒáƒ›áƒ®áƒ›áƒáƒ áƒ”ბლის სáƒáƒ®áƒ”ლმძღვáƒáƒœáƒ”ლáƒ"},"basicstyles":{"bold":"მსხვილი","italic":"დáƒáƒ®áƒ áƒ˜áƒšáƒ˜","strike":"გáƒáƒ“áƒáƒ®áƒáƒ–ული","subscript":"ინდექსი","superscript":"ხáƒáƒ áƒ˜áƒ¡áƒ®áƒ˜","underline":"გáƒáƒ®áƒáƒ–ული"},"bidi":{"ltr":"ტექსტის მიმáƒáƒ áƒ—ულებრმáƒáƒ áƒªáƒ®áƒœáƒ˜áƒ“áƒáƒœ მáƒáƒ áƒ¯áƒ•áƒœáƒ˜áƒ•","rtl":"ტექსტის მიმáƒáƒ áƒ—ულებრმáƒáƒ áƒ¯áƒ•áƒœáƒ˜áƒ“áƒáƒœ მáƒáƒ áƒªáƒ®áƒœáƒ˜áƒ•"},"blockquote":{"toolbar":"ციტáƒáƒ¢áƒ"},"clipboard":{"copy":"áƒáƒ¡áƒšáƒ˜","copyError":"თქვენი ბრáƒáƒ£áƒ–ერის უსáƒáƒ¤áƒ áƒ—ხáƒáƒ”ბის პáƒáƒ áƒáƒ›áƒ”ტრები áƒáƒ  იძლევრáƒáƒ¡áƒšáƒ˜áƒ¡ áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ˜áƒ¡ áƒáƒ•áƒ¢áƒáƒ›áƒáƒ¢áƒ£áƒ áƒáƒ“ გáƒáƒœáƒ®áƒáƒ áƒªáƒ˜áƒ”ლების სáƒáƒ¨áƒ£áƒáƒšáƒ”ბáƒáƒ¡. გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნეთ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒ áƒáƒ›áƒ˜áƒ¡áƒ—ვის (Ctrl/Cmd+C).","cut":"áƒáƒ›áƒáƒ­áƒ áƒ","cutError":"თქვენი ბრáƒáƒ£áƒ–ერის უსáƒáƒ¤áƒ áƒ—ხáƒáƒ”ბის პáƒáƒ áƒáƒ›áƒ”ტრები áƒáƒ  იძლევრáƒáƒ›áƒáƒ­áƒ áƒ˜áƒ¡ áƒáƒžáƒ”რáƒáƒªáƒ˜áƒ˜áƒ¡ áƒáƒ•áƒ¢áƒáƒ›áƒáƒ¢áƒ£áƒ áƒáƒ“ გáƒáƒœáƒ®áƒáƒ áƒªáƒ˜áƒ”ლების სáƒáƒ¨áƒ£áƒáƒšáƒ”ბáƒáƒ¡. გáƒáƒ›áƒáƒ˜áƒ§áƒ”ნეთ კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒ áƒáƒ›áƒ˜áƒ¡áƒ—ვის (Ctrl/Cmd+X).","paste":"ჩáƒáƒ¡áƒ›áƒ","pasteArea":"ჩáƒáƒ¡áƒ›áƒ˜áƒ¡ áƒáƒ áƒ”","pasteMsg":"ჩáƒáƒ¡áƒ•áƒ˜áƒ— áƒáƒ› áƒáƒ áƒ˜áƒ¡ შიგნით კლáƒáƒ•áƒ˜áƒáƒ¢áƒ£áƒ áƒ˜áƒ¡ გáƒáƒ›áƒáƒ§áƒ”ნებით (<strong>Ctrl/Cmd+V</strong>) დრდáƒáƒáƒ­áƒ˜áƒ áƒ”თ OK-ს","securityMsg":"თქვენი ბრáƒáƒ£áƒ–ერის უსáƒáƒ¤áƒ áƒ—ხáƒáƒ”ბის პáƒáƒ áƒáƒ›áƒ”ტრები áƒáƒ  იძლევრclipboard-ის მáƒáƒœáƒáƒªáƒ”მების წვდáƒáƒ›áƒ˜áƒ¡ უფლებáƒáƒ¡. კიდევ უნდრჩáƒáƒ¡áƒ•áƒáƒ— ტექსტი áƒáƒ› ფáƒáƒœáƒ¯áƒáƒ áƒáƒ¨áƒ˜.","title":"ჩáƒáƒ¡áƒ›áƒ"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"áƒáƒ•áƒ¢áƒáƒ›áƒáƒ¢áƒ£áƒ áƒ˜","bgColorTitle":"ფáƒáƒœáƒ˜áƒ¡ ფერი","colors":{"000":"შáƒáƒ•áƒ˜","800000":"მუქი შინდისფერი","8B4513":"ყáƒáƒ•áƒ˜áƒ¡áƒ¤áƒ”რი","2F4F4F":"მáƒáƒšáƒ£áƒ áƒ¯áƒ ნáƒáƒªáƒ áƒ˜áƒ¡áƒ¤áƒ”რი","008080":"ჩáƒáƒ›áƒ¥áƒ áƒáƒšáƒ˜ ლურჯი","000080":"მუქი ლურჯი","4B0082":"იáƒáƒ¡áƒáƒ›áƒœáƒ˜áƒ¡áƒ¤áƒ”რი","696969":"მუქი ნáƒáƒªáƒ áƒ˜áƒ¡áƒ¤áƒ”რი","B22222":"áƒáƒ’ურისფერი","A52A2A":"მუქი ყáƒáƒ•áƒ˜áƒ¡áƒ¤áƒ”რი","DAA520":"მáƒáƒ§áƒ•áƒ˜áƒ—áƒáƒšáƒ","006400":"მუქი მწვáƒáƒœáƒ”","40E0D0":"ცისფერი","0000CD":"ზáƒáƒ›áƒ˜áƒ”რáƒáƒ“ ლურჯი","800080":"იისფერი","808080":"ნáƒáƒªáƒ áƒ˜áƒ¡áƒ¤áƒ”რი","F00":"წითელი","FF8C00":"მუქი სტáƒáƒ¤áƒ˜áƒšáƒáƒ¡áƒ¤áƒ”რი","FFD700":"áƒáƒ¥áƒ áƒáƒ¡áƒ¤áƒ”რი","008000":"მწვáƒáƒœáƒ”","0FF":"ღირცისფერი","00F":"ლურჯი","EE82EE":"იისფერი","A9A9A9":"ბáƒáƒªáƒ˜ ნáƒáƒªáƒ áƒ˜áƒ¡áƒ¤áƒ”რი","FFA07A":"ჩáƒáƒ›áƒ¥áƒ áƒáƒšáƒ˜ ვáƒáƒ áƒ“ისფერი","FFA500":"სტáƒáƒ¤áƒ˜áƒšáƒáƒ¡áƒ¤áƒ”რი","FFFF00":"ყვითელი","00FF00":"ლურჯი","AFEEEE":"ცისფერი","ADD8E6":"ღირლურჯი","DDA0DD":"ღირიისფერი","D3D3D3":"ღირნáƒáƒªáƒ áƒ˜áƒ¡áƒ¤áƒ”რი","FFF0F5":"ღირვáƒáƒ áƒ“ისფერი","FAEBD7":"ღირყáƒáƒ•áƒ˜áƒ¡áƒ¤áƒ”რი","FFFFE0":"ნáƒáƒ—ელი ყვითელი","F0FFF0":"ღირმწვáƒáƒœáƒ”","F0FFFF":"ღირცისფერი 2","F0F8FF":"ღირცისფერი 3","E6E6FA":"ღირიისფერი 2","FFF":"თეთრი"},"more":"მეტი ფერი...","panelTitle":"ფერები","textColorTitle":"ტექსტის ფერი"},"colordialog":{"clear":"გáƒáƒ¡áƒ£áƒ¤áƒ—áƒáƒ•áƒ”ბáƒ","highlight":"ჩვენებáƒ","options":"ფერის პáƒáƒ áƒáƒ›áƒ”ტრები","selected":"áƒáƒ áƒ©áƒ”ული ფერი","title":"ფერის შეცვლáƒ"},"templates":{"button":"თáƒáƒ áƒ’ები","emptyListMsg":"(თáƒáƒ áƒ’ი áƒáƒ áƒáƒ გáƒáƒœáƒ¡áƒáƒ–ღვრული)","insertOption":"მიმდინáƒáƒ áƒ” შეგთáƒáƒ•áƒ¡áƒ˜áƒ¡ შეცვლáƒ","options":"თáƒáƒ áƒ’ების პáƒáƒ áƒáƒ›áƒ”ტრები","selectPromptMsg":"áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ თáƒáƒ áƒ’ი რედáƒáƒ¥áƒ¢áƒáƒ áƒ˜áƒ¡áƒ—ვის","title":"თáƒáƒ áƒ’ები"},"contextmenu":{"options":"კáƒáƒœáƒ¢áƒ”ქსტური მენიუს პáƒáƒ áƒáƒ›áƒ”ტრები"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"სáƒáƒ—áƒáƒ£áƒ áƒ˜","cssClassInputLabel":"CSS კლáƒáƒ¡áƒ”ბი","edit":"Div-ის რედáƒáƒ¥áƒ¢áƒ˜áƒ áƒ”ბáƒ","inlineStyleInputLabel":"თáƒáƒœáƒ“áƒáƒ áƒ—ული სტილი","langDirLTRLabel":"მáƒáƒ áƒªáƒ®áƒœáƒ˜áƒ“áƒáƒœ მáƒáƒ áƒ¯áƒ•áƒœáƒ˜áƒª (LTR)","langDirLabel":"ენის მინáƒáƒ áƒ—ულებáƒ","langDirRTLLabel":"მáƒáƒ áƒ¯áƒ•áƒœáƒ˜áƒ“áƒáƒœ მáƒáƒ áƒªáƒ®áƒœáƒ˜áƒ• (RTL)","languageCodeInputLabel":"ენის კáƒáƒ“ი","remove":"Div-ის წáƒáƒ¨áƒšáƒ","styleSelectLabel":"სტილი","title":"Div კáƒáƒœáƒ¢áƒ”ინერის შექმნáƒ","toolbar":"Div კáƒáƒœáƒ¢áƒ”ინერის შექმნáƒ"},"toolbar":{"toolbarCollapse":"ხელსáƒáƒ¬áƒ§áƒáƒ—რზáƒáƒšáƒ˜áƒ¡ შეწევáƒ","toolbarExpand":"ხელსáƒáƒ¬áƒ§áƒáƒ—რზáƒáƒšáƒ˜áƒ¡ გáƒáƒ›áƒáƒ¬áƒ”ვáƒ","toolbarGroups":{"document":"დáƒáƒ™áƒ£áƒ›áƒ”ნტი","clipboard":"Clipboard/გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ","editing":"რედáƒáƒ¥áƒ¢áƒ˜áƒ áƒ”ბáƒ","forms":"ფáƒáƒ áƒ›áƒ”ბი","basicstyles":"ძირითáƒáƒ“ი სტილები","paragraph":"áƒáƒ‘ზáƒáƒªáƒ˜","links":"ბმულები","insert":"ჩáƒáƒ¡áƒ›áƒ","styles":"სტილები","colors":"ფერები","tools":"ხელსáƒáƒ¬áƒ§áƒáƒ”ბი"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"ელემეტის გზáƒ","eleTitle":"%1 ელემენტი"},"find":{"find":"ძებნáƒ","findOptions":"Find Options","findWhat":"სáƒáƒ«áƒ˜áƒ”ბელი ტექსტი:","matchCase":"დიდი დრპáƒáƒ¢áƒáƒ áƒ áƒáƒ¡áƒáƒ”ბის დáƒáƒ›áƒ—ხვევáƒ","matchCyclic":"დáƒáƒ™áƒ£áƒ›áƒ”ნტის ბáƒáƒšáƒáƒ¨áƒ˜ გáƒáƒ¡áƒ•áƒšáƒ˜áƒ¡ მერე თáƒáƒ•áƒ˜áƒ“áƒáƒœ დáƒáƒ¬áƒ§áƒ”ბáƒ","matchWord":"მთელი სიტყვის დáƒáƒ›áƒ—ხვევáƒ","notFoundMsg":"მითითებული ტექსტი áƒáƒ  მáƒáƒ˜áƒ«áƒ”ბნáƒ.","replace":"შეცვლáƒ","replaceAll":"ყველáƒáƒ¡ შეცვლáƒ","replaceSuccessMsg":"%1 მáƒáƒ«áƒ”ბნილი შეიცვáƒáƒšáƒ.","replaceWith":"შეცვლის ტექსტი:","title":"ძებნრდრშეცვლáƒ"},"fakeobjects":{"anchor":"ღუზáƒ","flash":"Flash áƒáƒœáƒ˜áƒ›áƒáƒªáƒ˜áƒ","hiddenfield":"მáƒáƒšáƒ£áƒšáƒ˜ ველი","iframe":"IFrame","unknown":"უცნáƒáƒ‘ი áƒáƒ‘იექტი"},"flash":{"access":"სკრიპტის წვდáƒáƒ›áƒ","accessAlways":"ყáƒáƒ•áƒ”ლთვის","accessNever":"áƒáƒ áƒáƒ¡áƒ“რáƒáƒ¡","accessSameDomain":"იგივე დáƒáƒ›áƒ”ნი","alignAbsBottom":"ჩáƒáƒ áƒ©áƒáƒ¡ ქვემáƒáƒ—რნáƒáƒ¬áƒ˜áƒšáƒ˜áƒ¡ სწáƒáƒ áƒ”ბრტექსტისთვის","alignAbsMiddle":"ჩáƒáƒ áƒ©áƒáƒ¡ შურნáƒáƒ¬áƒ˜áƒšáƒ˜áƒ¡ სწáƒáƒ áƒ”ბრტექსტისთვის","alignBaseline":"სáƒáƒ‘áƒáƒ–ისრხáƒáƒ–ის სწáƒáƒ áƒ”ბáƒ","alignTextTop":"ტექსტი ზემáƒáƒ“áƒáƒœ","bgcolor":"ფáƒáƒœáƒ˜áƒ¡ ფერი","chkFull":"მთელი ეკრáƒáƒœáƒ˜áƒ¡ დáƒáƒ¨áƒ•áƒ”ბáƒ","chkLoop":"ჩáƒáƒªáƒ˜áƒ™áƒšáƒ•áƒ","chkMenu":"Flash-ის მენიუს დáƒáƒ¨áƒ•áƒ”ბáƒ","chkPlay":"áƒáƒ•áƒ¢áƒ გáƒáƒ¨áƒ•áƒ”ბáƒ","flashvars":"ცვლáƒáƒ“ები Flash-ისთვის","hSpace":"ჰáƒáƒ áƒ˜áƒ–. სივრცე","properties":"Flash-ის პáƒáƒ áƒáƒ›áƒ”ტრები","propertiesTab":"პáƒáƒ áƒáƒ›áƒ”ტრები","quality":"ხáƒáƒ áƒ˜áƒ¡áƒ®áƒ˜","qualityAutoHigh":"მáƒáƒ¦áƒáƒšáƒ˜ (áƒáƒ•áƒ¢áƒáƒ›áƒáƒ¢áƒ£áƒ áƒ˜)","qualityAutoLow":"ძáƒáƒšáƒ˜áƒáƒœ დáƒáƒ‘áƒáƒšáƒ˜","qualityBest":"სáƒáƒ£áƒ™áƒ”თესáƒ","qualityHigh":"მáƒáƒ¦áƒáƒšáƒ˜","qualityLow":"დáƒáƒ‘áƒáƒšáƒ˜","qualityMedium":"სáƒáƒ¨áƒ£áƒáƒšáƒ","scale":"მáƒáƒ¡áƒ¨áƒ¢áƒáƒ‘ირებáƒ","scaleAll":"ყველáƒáƒ¤áƒ áƒ˜áƒ¡ ჩვენებáƒ","scaleFit":"ზუსტი ჩáƒáƒ¡áƒ›áƒ","scaleNoBorder":"ჩáƒáƒ áƒ©áƒáƒ¡ გáƒáƒ áƒ”შე","title":"Flash-ის პáƒáƒ áƒáƒ›áƒ”ტრები","vSpace":"ვერტ. სივრცე","validateHSpace":"ჰáƒáƒ áƒ˜áƒ–áƒáƒœáƒ¢áƒáƒšáƒ£áƒ áƒ˜ სივრცე áƒáƒ  უნდრიყáƒáƒ¡ ცáƒáƒ áƒ˜áƒ”ლი.","validateSrc":"URL áƒáƒ  უნდრიყáƒáƒ¡ ცáƒáƒ áƒ˜áƒ”ლი.","validateVSpace":"ვერტიკáƒáƒšáƒ£áƒ áƒ˜ სივრცე áƒáƒ  უნდრიყáƒáƒ¡ ცáƒáƒ áƒ˜áƒ”ლი.","windowMode":"ფáƒáƒœáƒ¯áƒ áƒ˜áƒ¡ რეჟიმი","windowModeOpaque":"გáƒáƒ£áƒ›áƒ­áƒ•áƒ˜áƒ áƒ•áƒáƒšáƒ”","windowModeTransparent":"გáƒáƒ›áƒ­áƒ•áƒ˜áƒ áƒ•áƒáƒšáƒ”","windowModeWindow":"ფáƒáƒœáƒ¯áƒáƒ áƒ"},"font":{"fontSize":{"label":"ზáƒáƒ›áƒ","voiceLabel":"ტექსტის ზáƒáƒ›áƒ","panelTitle":"ტექსტის ზáƒáƒ›áƒ"},"label":"ფáƒáƒœáƒ¢áƒ˜","panelTitle":"ფáƒáƒœáƒ¢áƒ˜áƒ¡ სáƒáƒ®áƒ”ლი","voiceLabel":"ფáƒáƒœáƒ¢áƒ˜"},"forms":{"button":{"title":"ღილáƒáƒ™áƒ˜áƒ¡ პáƒáƒ áƒáƒ›áƒ”ტრები","text":"ტექსტი","type":"ტიპი","typeBtn":"ღილáƒáƒ™áƒ˜","typeSbm":"გáƒáƒ’ზáƒáƒ•áƒœáƒ","typeRst":"გáƒáƒ¡áƒ£áƒ¤áƒ—áƒáƒ•áƒ”ბáƒ"},"checkboxAndRadio":{"checkboxTitle":"მáƒáƒœáƒ˜áƒ¨áƒ•áƒœáƒ˜áƒ¡ ღილáƒáƒ™áƒ˜áƒ¡ (Checkbox) პáƒáƒ áƒáƒ›áƒ”ტრები","radioTitle":"áƒáƒ¡áƒáƒ áƒ©áƒ”ვი ღილáƒáƒ™áƒ˜áƒ¡ (Radio) პáƒáƒ áƒáƒ›áƒ”ტრები","value":"ტექსტი","selected":"áƒáƒ áƒ©áƒ”ული"},"form":{"title":"ფáƒáƒ áƒ›áƒ˜áƒ¡ პáƒáƒ áƒáƒ›áƒ”ტრები","menu":"ფáƒáƒ áƒ›áƒ˜áƒ¡ პáƒáƒ áƒáƒ›áƒ”ტრები","action":"ქმედებáƒ","method":"მეთáƒáƒ“ი","encoding":"კáƒáƒ“ირებáƒ"},"hidden":{"title":"მáƒáƒšáƒ£áƒšáƒ˜ ველის პáƒáƒ áƒáƒ›áƒ”ტრები","name":"სáƒáƒ®áƒ”ლი","value":"მნიშვნელáƒáƒ‘áƒ"},"select":{"title":"áƒáƒ áƒ©áƒ”ვის ველის პáƒáƒ áƒáƒ›áƒ”ტრები","selectInfo":"ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ","opAvail":"შესáƒáƒ«áƒšáƒ”ბელი ვáƒáƒ áƒ˜áƒáƒœáƒ¢áƒ”ბი","value":"მნიშვნელáƒáƒ‘áƒ","size":"ზáƒáƒ›áƒ","lines":"ხáƒáƒ–ები","chkMulti":"მრáƒáƒ•áƒšáƒáƒ‘ითი áƒáƒ áƒ©áƒ”ვáƒáƒœáƒ˜áƒ¡ სáƒáƒ¨áƒ£áƒáƒšáƒ”ბáƒ","opText":"ტექსტი","opValue":"მნიშვნელáƒáƒ‘áƒ","btnAdd":"დáƒáƒ›áƒáƒ¢áƒ”ბáƒ","btnModify":"შეცვლáƒ","btnUp":"ზემáƒáƒ—","btnDown":"ქვემáƒáƒ—","btnSetValue":"áƒáƒ›áƒáƒ áƒ©áƒ”ულ მნიშვნელáƒáƒ•áƒœáƒáƒ“ დáƒáƒ§áƒ”ნებáƒ","btnDelete":"წáƒáƒ¨áƒšáƒ"},"textarea":{"title":"ტექსტური áƒáƒ áƒ˜áƒ¡ პáƒáƒ áƒáƒ›áƒ”ტრები","cols":"სვეტები","rows":"სტრიქáƒáƒœáƒ”ბი"},"textfield":{"title":"ტექსტური ველის პáƒáƒ áƒáƒ›áƒ”ტრები","name":"სáƒáƒ®áƒ”ლი","value":"მნიშვნელáƒáƒ‘áƒ","charWidth":"სიმბáƒáƒšáƒáƒ¡ ზáƒáƒ›áƒ","maxChars":"áƒáƒ¡áƒáƒ”ბის მáƒáƒ¥áƒ¡áƒ˜áƒ›áƒáƒšáƒ£áƒ áƒ˜ áƒáƒ“ენáƒáƒ‘áƒ","type":"ტიპი","typeText":"ტექსტი","typePass":"პáƒáƒ áƒáƒšáƒ˜","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"ფიáƒáƒ áƒ›áƒáƒ¢áƒ˜áƒ áƒ”ბáƒ","panelTitle":"ფáƒáƒ áƒ›áƒáƒ¢áƒ˜áƒ áƒ”ბáƒ","tag_address":"მისáƒáƒ›áƒáƒ áƒ—ი","tag_div":"ჩვეულებრივი (DIV)","tag_h1":"სáƒáƒ—áƒáƒ£áƒ áƒ˜ 1","tag_h2":"სáƒáƒ—áƒáƒ£áƒ áƒ˜ 2","tag_h3":"სáƒáƒ—áƒáƒ£áƒ áƒ˜ 3","tag_h4":"სáƒáƒ—áƒáƒ£áƒ áƒ˜ 4","tag_h5":"სáƒáƒ—áƒáƒ£áƒ áƒ˜ 5","tag_h6":"სáƒáƒ—áƒáƒ£áƒ áƒ˜ 6","tag_p":"ჩვეულებრივი","tag_pre":"ფáƒáƒ áƒ›áƒáƒ¢áƒ˜áƒ áƒ”ბული"},"horizontalrule":{"toolbar":"ჰáƒáƒ áƒ˜áƒ–áƒáƒœáƒ¢áƒáƒšáƒ£áƒ áƒ˜ ხáƒáƒ–ის ჩáƒáƒ¡áƒ›áƒ"},"iframe":{"border":"ჩáƒáƒ áƒ©áƒáƒ¡ გáƒáƒ›áƒáƒ©áƒ”ნáƒ","noUrl":"áƒáƒ™áƒ áƒ˜áƒ¤áƒ”თ iframe-ის URL","scrolling":"გáƒáƒ“áƒáƒ®áƒ•áƒ”ვის ზáƒáƒšáƒ”ბის დáƒáƒ¨áƒ•áƒ”ბáƒ","title":"IFrame-ის პáƒáƒ áƒáƒ›áƒ”ტრები","toolbar":"IFrame"},"image":{"alertUrl":"áƒáƒ™áƒ áƒ˜áƒ¤áƒ”თ სურáƒáƒ—ის URL","alt":"სáƒáƒœáƒáƒªáƒ•áƒšáƒ ტექსტი","border":"ჩáƒáƒ áƒ©áƒ","btnUpload":"სერვერისთვის გáƒáƒ’ზáƒáƒ•áƒœáƒ","button2Img":"გსურთ áƒáƒ áƒ©áƒ”ული სურáƒáƒ—იáƒáƒœáƒ˜ ღილáƒáƒ™áƒ˜áƒ¡ გáƒáƒ“áƒáƒ¥áƒªáƒ”ვრჩვეულებრივ ღილáƒáƒ™áƒáƒ“?","hSpace":"ჰáƒáƒ áƒ˜áƒ–áƒáƒœáƒ¢áƒáƒšáƒ£áƒ áƒ˜ სივრცე","img2Button":"გსურთ áƒáƒ áƒ©áƒ”ული ჩვეულებრივი ღილáƒáƒ™áƒ˜áƒ¡ გáƒáƒ“áƒáƒ¥áƒªáƒ”ვრსურáƒáƒ—იáƒáƒœ ღილáƒáƒ™áƒáƒ“?","infoTab":"სურáƒáƒ—ის ინფáƒáƒ áƒ›áƒªáƒ˜áƒ","linkTab":"ბმული","lockRatio":"პრáƒáƒžáƒáƒ áƒªáƒ˜áƒ˜áƒ¡ შენáƒáƒ áƒ©áƒ£áƒœáƒ”ბáƒ","menu":"სურáƒáƒ—ის პáƒáƒ áƒáƒ›áƒ”ტრები","resetSize":"ზáƒáƒ›áƒ˜áƒ¡ დáƒáƒ‘რუნებáƒ","title":"სურáƒáƒ—ის პáƒáƒ áƒáƒ›áƒ”ტრები","titleButton":"სურáƒáƒ—იáƒáƒœáƒ˜ ღილáƒáƒ™áƒ˜áƒ¡ პáƒáƒ áƒáƒ›áƒ”ტრები","upload":"áƒáƒ¢áƒ•áƒ˜áƒ áƒ—ვáƒ","urlMissing":"სურáƒáƒ—ის URL áƒáƒ áƒáƒ შევსებული.","vSpace":"ვერტიკáƒáƒšáƒ£áƒ áƒ˜ სივრცე","validateBorder":"ჩáƒáƒ áƒ©áƒ მთელი რიცხვი უნდრიყáƒáƒ¡.","validateHSpace":"ჰáƒáƒ áƒ˜áƒ–áƒáƒœáƒ¢áƒáƒšáƒ£áƒ áƒ˜ სივრცე მთელი რიცხვი უნდრიყáƒáƒ¡.","validateVSpace":"ვერტიკáƒáƒšáƒ£áƒ áƒ˜ სივრცე მთელი რიცხვი უნდრიყáƒáƒ¡."},"indent":{"indent":"მეტáƒáƒ“ შეწევáƒ","outdent":"ნáƒáƒ™áƒšáƒ”ბáƒáƒ“ შეწევáƒ"},"smiley":{"options":"სიცილáƒáƒ™áƒ˜áƒ¡ პáƒáƒ áƒáƒ›áƒ”ტრები","title":"სიცილáƒáƒ™áƒ˜áƒ¡ ჩáƒáƒ¡áƒ›áƒ","toolbar":"სიცილáƒáƒ™áƒ”ბი"},"justify":{"block":"გáƒáƒ“áƒáƒ¡áƒ¬áƒáƒ áƒ”ბáƒ","center":"შუáƒáƒ¨áƒ˜ სწáƒáƒ áƒ”ბáƒ","left":"მáƒáƒ áƒªáƒ®áƒœáƒ˜áƒ• სწáƒáƒ áƒ”ბáƒ","right":"მáƒáƒ áƒ¯áƒ•áƒœáƒ˜áƒ• სწáƒáƒ áƒ”ბáƒ"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"წვდáƒáƒ›áƒ˜áƒ¡ ღილáƒáƒ™áƒ˜","advanced":"დáƒáƒ¬áƒ•áƒ áƒ˜áƒšáƒ”ბით","advisoryContentType":"შიგთáƒáƒ•áƒ¡áƒ˜áƒ¡ ტიპი","advisoryTitle":"სáƒáƒ—áƒáƒ£áƒ áƒ˜","anchor":{"toolbar":"ღუზáƒ","menu":"ღუზის რედáƒáƒ¥áƒ¢áƒ˜áƒ áƒ”ბáƒ","title":"ღუზის პáƒáƒ áƒáƒ›áƒ”ტრები","name":"ღუზუს სáƒáƒ®áƒ”ლი","errorName":"áƒáƒ™áƒ áƒ˜áƒ¤áƒ”თ ღუზის სáƒáƒ®áƒ”ლი","remove":"Remove Anchor"},"anchorId":"ელემენტის Id-თ","anchorName":"ღუზის სáƒáƒ®áƒ”ლით","charset":"კáƒáƒ“ირებáƒ","cssClasses":"CSS კლáƒáƒ¡áƒ˜","emailAddress":"ელფáƒáƒ¡áƒ¢áƒ˜áƒ¡ მისáƒáƒ›áƒáƒ áƒ—ები","emailBody":"წერილის ტექსტი","emailSubject":"წერილის სáƒáƒ—áƒáƒ£áƒ áƒ˜","id":"Id","info":"ბმულის ინფáƒáƒ áƒ›áƒáƒªáƒ˜áƒ","langCode":"ენის კáƒáƒ“ი","langDir":"ენის მიმáƒáƒ áƒ—ულებáƒ","langDirLTR":"მáƒáƒ áƒªáƒ®áƒœáƒ˜áƒ“áƒáƒœ მáƒáƒ áƒ¯áƒ•áƒœáƒ˜áƒ• (LTR)","langDirRTL":"მáƒáƒ áƒ¯áƒ•áƒœáƒ˜áƒ“áƒáƒœ მáƒáƒ áƒªáƒ®áƒœáƒ˜áƒ• (RTL)","menu":"ბმულის რედáƒáƒ¥áƒ¢áƒ˜áƒ áƒ”ბáƒ","name":"სáƒáƒ®áƒ”ლი","noAnchors":"(áƒáƒ› დáƒáƒ™áƒ£áƒ›áƒ”ნტში ღუზრáƒáƒ áƒáƒ)","noEmail":"áƒáƒ™áƒ áƒ˜áƒ¤áƒ”თ ელფáƒáƒ¡áƒ¢áƒ˜áƒ¡ მისáƒáƒ›áƒáƒ áƒ—ი","noUrl":"áƒáƒ™áƒ áƒ˜áƒ¤áƒ”თ ბმულის URL","other":"<სხვáƒ>","popupDependent":"დáƒáƒ›áƒáƒ™áƒ˜áƒ“ებული (Netscape)","popupFeatures":"Popup ფáƒáƒœáƒ¯áƒ áƒ˜áƒ¡ პáƒáƒ áƒáƒ›áƒ”ტრები","popupFullScreen":"მთელი ეკრáƒáƒœáƒ˜ (IE)","popupLeft":"მáƒáƒ áƒªáƒ®áƒ”ნრპáƒáƒ–იციáƒ","popupLocationBar":"ნáƒáƒ•áƒ˜áƒ’áƒáƒªáƒ˜áƒ˜áƒ¡ ზáƒáƒšáƒ˜","popupMenuBar":"მენიუს ზáƒáƒšáƒ˜","popupResizable":"ცვáƒáƒšáƒ”ბáƒáƒ“ი ზáƒáƒ›áƒ˜áƒ—","popupScrollBars":"გáƒáƒ“áƒáƒ®áƒ•áƒ”ვის ზáƒáƒšáƒ”ბი","popupStatusBar":"სტáƒáƒ¢áƒ£áƒ¡áƒ˜áƒ¡ ზáƒáƒšáƒ˜","popupToolbar":"ხელსáƒáƒ¬áƒ§áƒáƒ—რზáƒáƒšáƒ˜","popupTop":"ზედრპáƒáƒ–იციáƒ","rel":"კáƒáƒ•áƒ¨áƒ˜áƒ áƒ˜","selectAnchor":"áƒáƒ˜áƒ áƒ©áƒ˜áƒ”თ ღუზáƒ","styles":"CSS სტილი","tabIndex":"Tab-ის ინდექსი","target":"გáƒáƒ®áƒ¡áƒœáƒ˜áƒ¡ áƒáƒ“გილი","targetFrame":"<frame>","targetFrameName":"Frame-ის სáƒáƒ®áƒ”ლი","targetPopup":"<popup ფáƒáƒœáƒ¯áƒáƒ áƒ>","targetPopupName":"Popup ფáƒáƒœáƒ¯áƒ áƒ˜áƒ¡ სáƒáƒ®áƒ”ლი","title":"ბმული","toAnchor":"ბმული ტექსტში ღუზáƒáƒ–ე","toEmail":"ელფáƒáƒ¡áƒ¢áƒ","toUrl":"URL","toolbar":"ბმული","type":"ბმულის ტიპი","unlink":"ბმულის მáƒáƒ®áƒ¡áƒœáƒ","upload":"áƒáƒ¥áƒáƒ©áƒ•áƒ"},"list":{"bulletedlist":"ღილიáƒáƒœáƒ˜ სიáƒ","numberedlist":"გáƒáƒ“áƒáƒœáƒáƒ›áƒ áƒ˜áƒšáƒ˜ სიáƒ"},"liststyle":{"armenian":"სáƒáƒ›áƒ®áƒ£áƒ áƒ˜ გáƒáƒ“áƒáƒœáƒáƒ›áƒ áƒ•áƒ","bulletedTitle":"ღილებიáƒáƒœáƒ˜ სიის პáƒáƒ áƒáƒ›áƒ”ტრები","circle":"წრეწირი","decimal":"რიცხვებით (1, 2, 3, ..)","decimalLeadingZero":"ნულით დáƒáƒ¬áƒ§áƒ”ბული რიცხვებით (01, 02, 03, ..)","disc":"წრე","georgian":"ქáƒáƒ áƒ—ული გáƒáƒ“áƒáƒœáƒáƒ›áƒ áƒ•áƒ (áƒáƒœ, ბáƒáƒœ, გáƒáƒœ, ..)","lowerAlpha":"პáƒáƒ¢áƒáƒ áƒ ლáƒáƒ—ინური áƒáƒ¡áƒáƒ”ბით (a, b, c, d, e, ..)","lowerGreek":"პáƒáƒ¢áƒáƒ áƒ ბერძნული áƒáƒ¡áƒáƒ”ბით (áƒáƒšáƒ¤áƒ, ბეტáƒ, გáƒáƒ›áƒ, ..)","lowerRoman":"რáƒáƒ›áƒáƒ£áƒšáƒ˜ გáƒáƒ“áƒáƒœáƒáƒ›áƒ áƒ•áƒªáƒ პáƒáƒ¢áƒáƒ áƒ ციფრებით (i, ii, iii, iv, v, ..)","none":"áƒáƒ áƒáƒ¤áƒ”რი","notset":"<áƒáƒ áƒáƒ¤áƒ”რი>","numberedTitle":"გáƒáƒ“áƒáƒœáƒáƒ›áƒ áƒ˜áƒšáƒ˜ სიის პáƒáƒ áƒáƒ›áƒ”ტრები","square":"კვáƒáƒ“რáƒáƒ¢áƒ˜","start":"სáƒáƒ¬áƒ§áƒ˜áƒ¡áƒ˜","type":"ტიპი","upperAlpha":"დიდი ლáƒáƒ—ინური áƒáƒ¡áƒáƒ”ბით (A, B, C, D, E, ..)","upperRoman":"რáƒáƒ›áƒáƒ£áƒšáƒ˜ გáƒáƒ“áƒáƒœáƒáƒ›áƒ áƒ•áƒ დიდი ციფრებით (I, II, III, IV, V, etc.)","validateStartNumber":"სიის სáƒáƒ¬áƒ§áƒ˜áƒ¡áƒ˜ მთელი რიცხვი უნდრიყáƒáƒ¡."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"გáƒáƒ“იდებáƒ","minimize":"დáƒáƒžáƒáƒ¢áƒáƒ áƒáƒ•áƒ”ბáƒ"},"newpage":{"toolbar":"áƒáƒ®áƒáƒšáƒ˜ გვერდი"},"pagebreak":{"alt":"გვერდის წყვეტáƒ","toolbar":"გვერდის წყვეტრბეჭდვისთვის"},"pastetext":{"button":"მხáƒáƒšáƒáƒ“ ტექსტის ჩáƒáƒ¡áƒ›áƒ","title":"მხáƒáƒšáƒáƒ“ ტექსტის ჩáƒáƒ¡áƒ›áƒ"},"pastefromword":{"confirmCleanup":"ჩáƒáƒ¡áƒáƒ¡áƒ›áƒ”ლი ტექსტი ვáƒáƒ áƒ“იდáƒáƒœ გáƒáƒ“მáƒáƒ¢áƒáƒœáƒ˜áƒšáƒ¡ გáƒáƒ•áƒ¡ - გინდáƒáƒ— მისი წინáƒáƒ¡áƒ¬áƒáƒ  გáƒáƒ¬áƒ›áƒ”ნდáƒ?","error":"შიდრშეცდáƒáƒ›áƒ˜áƒ¡ გáƒáƒ›áƒ ვერ მáƒáƒ®áƒ”რხდრტექსტის გáƒáƒ¬áƒ›áƒ”ნდáƒ","title":"ვáƒáƒ áƒ“იდáƒáƒœ ჩáƒáƒ¡áƒ›áƒ","toolbar":"ვáƒáƒ áƒ“იდáƒáƒœ ჩáƒáƒ¡áƒ›áƒ"},"preview":{"preview":"გáƒáƒ“áƒáƒ®áƒ”დვáƒ"},"print":{"toolbar":"ბეჭდვáƒ"},"removeformat":{"toolbar":"ფáƒáƒ áƒ›áƒáƒ¢áƒ˜áƒ áƒ”ბის მáƒáƒ®áƒ¡áƒœáƒ"},"save":{"toolbar":"ჩáƒáƒ¬áƒ”რáƒ"},"selectall":{"toolbar":"ყველáƒáƒ¤áƒ áƒ˜áƒ¡ მáƒáƒœáƒ˜áƒ¨áƒœáƒ•áƒ"},"showblocks":{"toolbar":"áƒáƒ áƒ”ების ჩვენებáƒ"},"sourcearea":{"toolbar":"კáƒáƒ“ები"},"specialchar":{"options":"სპეციáƒáƒšáƒ£áƒ áƒ˜ სიმბáƒáƒšáƒáƒ¡ პáƒáƒ áƒáƒ›áƒ”ტრები","title":"სპეციáƒáƒšáƒ£áƒ áƒ˜ სიმბáƒáƒšáƒáƒ¡ áƒáƒ áƒ©áƒ”ვáƒ","toolbar":"სპეციáƒáƒšáƒ£áƒ áƒ˜ სიმბáƒáƒšáƒáƒ¡ ჩáƒáƒ¡áƒ›áƒ"},"scayt":{"btn_about":"SCAYT-ის შესáƒáƒ®áƒ”ბ","btn_dictionaries":"ლექსიკáƒáƒœáƒ”ბი","btn_disable":"SCAYT-ის გáƒáƒ›áƒáƒ áƒ—ვáƒ","btn_enable":"SCAYT-ის ჩáƒáƒ áƒ—ვáƒ","btn_langs":"ენები","btn_options":"პáƒáƒ áƒáƒ›áƒ”ტრები","text_title":""},"stylescombo":{"label":"სტილები","panelTitle":"ფáƒáƒ áƒ›áƒáƒ¢áƒ˜áƒ áƒ”ბის სტილები","panelTitle1":"áƒáƒ áƒ˜áƒ¡ სტილები","panelTitle2":"თáƒáƒœáƒ“áƒáƒ áƒ—ული სტილები","panelTitle3":"áƒáƒ‘იექტის სტილები"},"table":{"border":"ჩáƒáƒ áƒ©áƒáƒ¡ ზáƒáƒ›áƒ","caption":"სáƒáƒ—áƒáƒ£áƒ áƒ˜","cell":{"menu":"უჯრáƒ","insertBefore":"უჯრის ჩáƒáƒ¡áƒ›áƒ მáƒáƒœáƒáƒ›áƒ“ე","insertAfter":"უჯრის ჩáƒáƒ¡áƒ›áƒ მერე","deleteCell":"უჯრების წáƒáƒ¨áƒšáƒ","merge":"უჯრების შეერთებáƒ","mergeRight":"შეერთებრმáƒáƒ áƒ¯áƒ•áƒ”ნáƒáƒ¡áƒ—áƒáƒœ","mergeDown":"შეერთებრქვემáƒáƒ—áƒáƒ¡áƒ—áƒáƒœ","splitHorizontal":"გáƒáƒ§áƒáƒ¤áƒ ჰáƒáƒ áƒ˜áƒ–áƒáƒœáƒ¢áƒáƒšáƒ£áƒ áƒáƒ“","splitVertical":"გáƒáƒ§áƒáƒ¤áƒ ვერტიკáƒáƒšáƒ£áƒ áƒáƒ“","title":"უჯრის პáƒáƒ áƒáƒ›áƒ”ტრები","cellType":"უჯრის ტიპი","rowSpan":"სტრიქáƒáƒœáƒ”ბის áƒáƒ“ენáƒáƒ‘áƒ","colSpan":"სვეტების áƒáƒ“ენáƒáƒ‘áƒ","wordWrap":"სტრიქáƒáƒœáƒ˜áƒ¡ გáƒáƒ“áƒáƒ¢áƒáƒœáƒ (Word Wrap)","hAlign":"ჰáƒáƒ áƒ˜áƒ–áƒáƒœáƒ¢áƒáƒšáƒ£áƒ áƒ˜ სწáƒáƒ áƒ”ბáƒ","vAlign":"ვერტიკáƒáƒšáƒ£áƒ áƒ˜ სწáƒáƒ áƒ”ბáƒ","alignBaseline":"ძირითáƒáƒ“ი ხáƒáƒ–ის გáƒáƒ¡áƒ¬áƒ•áƒ áƒ˜áƒ•","bgColor":"ფáƒáƒœáƒ˜áƒ¡ ფერი","borderColor":"ჩáƒáƒ áƒ©áƒáƒ¡ ფერი","data":"მáƒáƒœáƒáƒªáƒ”მები","header":"სáƒáƒ—áƒáƒ£áƒ áƒ˜","yes":"დიáƒáƒ®","no":"áƒáƒ áƒ","invalidWidth":"უჯრის სიგáƒáƒœáƒ” რიცხვით უნდრიყáƒáƒ¡ წáƒáƒ áƒ›áƒáƒ“გენილი.","invalidHeight":"უჯრის სიმáƒáƒ¦áƒšáƒ” რიცხვით უნდრიყáƒáƒ¡ წáƒáƒ áƒ›áƒáƒ“გენილი.","invalidRowSpan":"სტრიქáƒáƒœáƒ”ბის რáƒáƒáƒ“ენáƒáƒ‘რმთელი რიცხვი უნდრიყáƒáƒ¡.","invalidColSpan":"სვეტების რáƒáƒáƒ“ენáƒáƒ‘რმთელი რიცხვი უნდრიყáƒáƒ¡.","chooseColor":"áƒáƒ áƒ©áƒ”ვáƒ"},"cellPad":"უჯრის კიდე (padding)","cellSpace":"უჯრის სივრცე (spacing)","column":{"menu":"სვეტი","insertBefore":"სვეტის ჩáƒáƒ›áƒáƒ¢áƒ”ბრწინ","insertAfter":"სვეტის ჩáƒáƒ›áƒáƒ¢áƒ”ბრმერე","deleteColumn":"სვეტების წáƒáƒ¨áƒšáƒ"},"columns":"სვეტი","deleteTable":"ცხრილის წáƒáƒ¨áƒšáƒ","headers":"სáƒáƒ—áƒáƒ£áƒ áƒ”ბი","headersBoth":"áƒáƒ áƒ˜áƒ•áƒ”","headersColumn":"პირველი სვეტი","headersNone":"áƒáƒ áƒáƒ¤áƒ”რი","headersRow":"პირველი სტრიქáƒáƒœáƒ˜","invalidBorder":"ჩáƒáƒ áƒ©áƒáƒ¡ ზáƒáƒ›áƒ რიცხვით უდნრიყáƒáƒ¡ წáƒáƒ áƒ›áƒáƒ“გენილი.","invalidCellPadding":"უჯრის კიდე (padding) რიცხვით უნდრიყáƒáƒ¡ წáƒáƒ áƒ›áƒáƒ“გენილი.","invalidCellSpacing":"უჯრის სივრცე (spacing) რიცხვით უნდრიყáƒáƒ¡ წáƒáƒ áƒ›áƒáƒ“გენილი.","invalidCols":"სვეტების რáƒáƒáƒ“ენáƒáƒ‘რდáƒáƒ“ებითი რიცხვი უნდრიყáƒáƒ¡.","invalidHeight":"ცხრილის სიმáƒáƒ¦áƒšáƒ” რიცხვით უნდრიყáƒáƒ¡ წáƒáƒ áƒ›áƒáƒ“გენილი.","invalidRows":"სტრიქáƒáƒœáƒ”ბის რáƒáƒáƒ“ენáƒáƒ‘რდáƒáƒ“ებითი რიცხვი უნდრიყáƒáƒ¡.","invalidWidth":"ცხრილის სიგáƒáƒœáƒ” რიცხვით უნდრიყáƒáƒ¡ წáƒáƒ áƒ›áƒáƒ“გენილი.","menu":"ცხრილის პáƒáƒ áƒáƒ›áƒ”ტრები","row":{"menu":"სტრიქáƒáƒœáƒ˜","insertBefore":"სტრიქáƒáƒœáƒ˜áƒ¡ ჩáƒáƒ›áƒáƒ¢áƒ”ბრწინ","insertAfter":"სტრიქáƒáƒœáƒ˜áƒ¡ ჩáƒáƒ›áƒáƒ¢áƒ”ბრმერე","deleteRow":"სტრიქáƒáƒœáƒ”ბის წáƒáƒ¨áƒšáƒ"},"rows":"სტრიქáƒáƒœáƒ˜","summary":"შეჯáƒáƒ›áƒ”ბáƒ","title":"ცხრილის პáƒáƒ áƒáƒ›áƒ”ტრები","toolbar":"ცხრილი","widthPc":"პრáƒáƒªáƒ”ნტი","widthPx":"წერტილი","widthUnit":"სáƒáƒ–áƒáƒ›áƒ˜ ერთეული"},"undo":{"redo":"გáƒáƒ›áƒ”áƒáƒ áƒ”ბáƒ","undo":"გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ"},"wsc":{"btnIgnore":"უგულებელყáƒáƒ¤áƒ","btnIgnoreAll":"ყველáƒáƒ¡ უგულებელყáƒáƒ¤áƒ","btnReplace":"შეცვლáƒ","btnReplaceAll":"ყველáƒáƒ¡ შეცვლáƒ","btnUndo":"გáƒáƒ£áƒ¥áƒ›áƒ”ბáƒ","changeTo":"შეცვლელი","errorLoading":"სერვისის გáƒáƒ›áƒáƒ«áƒáƒ®áƒ”ბის შეცდáƒáƒ›áƒ: %s.","ieSpellDownload":"მáƒáƒ áƒ—ლწერის შემáƒáƒ¬áƒ›áƒ”ბრáƒáƒ áƒáƒ დáƒáƒ˜áƒœáƒ¡áƒ¢áƒáƒšáƒ˜áƒ áƒ”ბული. ჩáƒáƒ›áƒáƒ•áƒ¥áƒáƒ©áƒáƒ— ინტერნეტიდáƒáƒœ?","manyChanges":"მáƒáƒ áƒ—ლწერის შემáƒáƒ¬áƒ›áƒ”ბáƒ: %1 სიტყვრშეიცვáƒáƒšáƒ","noChanges":"მáƒáƒ áƒ—ლწერის შემáƒáƒ¬áƒ›áƒ”ბáƒ: áƒáƒ áƒáƒ¤áƒ”რი შეცვლილáƒ","noMispell":"მáƒáƒ áƒ—ლწერის შემáƒáƒ¬áƒ›áƒ”ბáƒ: შეცდáƒáƒ›áƒ áƒáƒ  მáƒáƒ˜áƒ«áƒ”ბნáƒ","noSuggestions":"- áƒáƒ áƒáƒ შემáƒáƒ—áƒáƒ•áƒáƒ–ებრ-","notAvailable":"უკáƒáƒªáƒ áƒáƒ•áƒáƒ“, ეს სერვისი áƒáƒ›áƒŸáƒáƒ›áƒáƒ“ მიუწვდáƒáƒ›áƒ”ლიáƒ.","notInDic":"áƒáƒ áƒáƒ ლექსიკáƒáƒœáƒ¨áƒ˜","oneChange":"მáƒáƒ áƒ—ლწერის შემáƒáƒ¬áƒ›áƒ”ბáƒ: ერთი სიტყვრშეიცვáƒáƒšáƒ","progress":"მიმდინáƒáƒ áƒ”áƒáƒ‘ს მáƒáƒ áƒ—ლწერის შემáƒáƒ¬áƒ›áƒ”ბáƒ...","title":"მáƒáƒ áƒ—ლწერáƒ","toolbar":"მáƒáƒ áƒ—ლწერáƒ"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/km.js b/wqflask/wqflask/static/packages/ckeditor/lang/km.js
deleted file mode 100644
index 0759e892..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/km.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['km']={"editor":"ឧបករណáŸâ€‹ážŸážšážŸáŸážšâ€‹áž¢ážáŸ’ážáž”ទ​សម្បូរ​បែប","editorPanel":"ផ្ទាំង​ឧបករណáŸâ€‹ážŸážšážŸáŸážšâ€‹áž¢ážáŸ’ážáž”ទ​សម្បូរ​បែប","common":{"editorHelp":"ចុច ALT 0 សម្រាប់​ជំនួយ","browseServer":"រក​មើល​ក្នុង​ម៉ាស៊ីន​បម្រើ","url":"URL","protocol":"ពិធីការ","upload":"ផ្ទុក​ឡើង","uploadSubmit":"បញ្ជូនទៅកាន់ម៉ាស៊ីន​បម្រើ","image":"រូបភាព","flash":"Flash","form":"បែបបទ","checkbox":"ប្រអប់​ធីក","radio":"ប៊ូážáž»áž„​មូល","textField":"វាល​អážáŸ’ážáž”áž‘","textarea":"Textarea","hiddenField":"វាល​កំបាំង","button":"ប៊ូážáž»áž„","select":"វាល​ជម្រើស","imageButton":"ប៊ូážáž»áž„​រូបភាព","notSet":"<មិនកំណážáŸ‹>","id":"Id","name":"ឈ្មោះ","langDir":"ទិសដៅភាសា","langDirLtr":"ពីឆ្វáŸáž„ទៅស្ážáž¶áŸ† (LTR)","langDirRtl":"ពីស្ážáž¶áŸ†áž‘ៅឆ្វáŸáž„ (RTL)","langCode":"áž›áŸážâ€‹áž€áž¼ážŠâ€‹áž—ាសា","longDescr":"URL អធិប្បាយ​វែង","cssClass":"Stylesheet Classes","advisoryTitle":"ចំណង​ជើង​ណែនាំ","cssStyle":"រចនាបáž","ok":"ព្រម","cancel":"បោះបង់","close":"បិទ","preview":"មើល​ជា​មុន","resize":"ប្ដូរ​ទំហំ","generalTab":"ទូទៅ","advancedTab":"កម្រិážâ€‹ážáŸ’ពស់","validateNumberFailed":"ážáž˜áŸ’លៃ​នáŸáŸ‡â€‹áž–ុំ​មែន​ជា​លáŸážâ€‹áž‘áŸáŸ”","confirmNewPage":"រាល់​បន្លាស់​ប្ដូរ​នានា​ដែល​មិន​ទាន់​រក្សា​ទុក​ក្នុង​មាážáž·áž€áž¶â€‹áž“áŸáŸ‡ នឹង​ážáŸ’រូវ​បាážáŸ‹â€‹áž”ង់។ ážáž¾â€‹áž¢áŸ’នក​ពិážâ€‹áž‡áž¶â€‹áž…ង់​ផ្ទុក​ទំពáŸážšâ€‹ážáŸ’មី​មែនទáŸ?","confirmCancel":"ការ​កំណážáŸ‹â€‹áž˜áž½áž™â€‹áž…ំនួន​ážáŸ’រូ​វ​បាន​ផ្លាស់​ប្ដូរ។ ážáž¾â€‹áž¢áŸ’នក​ពិážâ€‹áž‡áž¶â€‹áž…ង់​បិទ​ប្រអប់​នáŸáŸ‡â€‹áž˜áŸ‚áž“áž‘áŸ?","options":"ការ​កំណážáŸ‹","target":"គោលដៅ","targetNew":"វីនដូ​ážáŸ’មី (_blank)","targetTop":"វីនដូ​លើ​គ០(_top)","targetSelf":"វីនដូ​ដូច​គ្នា (_self)","targetParent":"វីនដូ​ម០(_parent)","langDirLTR":"ពីឆ្វáŸáž„ទៅស្ážáž¶áŸ†(LTR)","langDirRTL":"ពីស្ážáž¶áŸ†áž‘ៅឆ្វáŸáž„(RTL)","styles":"រចនាបáž","cssClasses":"Stylesheet Classes","width":"ទទឹង","height":"កំពស់","align":"កំណážáŸ‹â€‹áž‘ីážáž¶áŸ†áž„","alignLeft":"ážáž¶áž„ឆ្វង","alignRight":"ážáž¶áž„ស្ážáž¶áŸ†","alignCenter":"កណ្ážáž¶áž›","alignJustify":"両端æƒãˆ","alignTop":"ážáž¶áž„លើ","alignMiddle":"កណ្ážáž¶áž›","alignBottom":"ážáž¶áž„ក្រោម","alignNone":"អážáŸ‹","invalidValue":"ážáž˜áŸ’លៃ​មិន​ážáŸ’រឹម​ážáŸ’រូវ។","invalidHeight":"ážáž˜áŸ’លៃ​កំពស់​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážáŸ”","invalidWidth":"ážáž˜áŸ’លៃ​ទទឹង​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážáŸ”","invalidCssLength":"ážáž˜áŸ’លៃ​កំណážáŸ‹â€‹ážŸáž˜áŸ’រាប់​វាល \"%1\" ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážâ€‹ážœáž·áž‡áŸ’ជមាន​ ដោយ​ភ្ជាប់ឬ​មិន​ភ្ជាប់​ជាមួយ​នឹង​ឯកážáž¶â€‹ážšáž„្វាស់​របស់ CSS (px, %, in, cm, mm, em, ex, pt ឬ pc) ។","invalidHtmlLength":"ážáž˜áŸ’លៃ​កំណážáŸ‹â€‹ážŸáž˜áŸ’រាប់​វាល \"%1\" ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážâ€‹ážœáž·áž‡áŸ’ជមាន ដោយ​ភ្ជាប់​ឬ​មិន​ភ្ជាប់​ជាមួយ​នឹង​ឯកážáž¶â€‹ážšáž„្វាស់​របស់ HTML (px ឬ %) ។","invalidInlineStyle":"ážáž˜áŸ’លៃ​កំណážáŸ‹â€‹ážŸáž˜áŸ’រាប់​រចនាបážâ€‹áž€áŸ’នុង​ážáž½ ážáŸ’រូវ​ážáŸ‚​មាន​មួយ​ឬ​ធាážáž»â€‹áž…្រើន​ដោយ​មាន​ទ្រង់ទ្រាយ​ជា \"ឈ្មោះ : ážáž˜áŸ’លៃ\" ហើយ​ញែក​ចáŸáž‰â€‹áž–ី​គ្នា​ដោយ​ចុច​ក្បៀស។","cssLengthTooltip":"បញ្ចូល​លáŸážâ€‹ážŸáž˜áŸ’រាប់​ážáž˜áŸ’លៃ​ជា​ភិចសែល ឬ​លáŸážâ€‹ážŠáŸ‚ល​មាន​ឯកážáž¶â€‹ážáŸ’រឹមážáŸ’រូវ​របស់ CSS (px, %, in, cm, mm, em, ex, pt ឬ pc) ។","unavailable":"%1<span class=\"cke_accessibility\">, មិន​មាន</span>"},"about":{"copy":"រក្សាសិទ្ធិ &copy; $1។ រក្សា​សិទ្ធិ​គ្រប់​បែប​យ៉ាង។","dlgTitle":"អំពី CKEditor","help":"áž–áž·áž“áž·ážáŸ’áž™ $1 សម្រាប់​ជំនួយ។","moreInfo":"សម្រាប់​ពáŸážáŸŒáž˜áž¶áž“​អំពី​អាជ្ញាបណញណ សូម​មើល​ក្នុង​គáŸáž áž‘ំពáŸážšâ€‹ážšáž”ស់​យើង៖","title":"អំពី CKEditor","userGuide":"វិធី​ប្រើ​ប្រាស់ CKEditor"},"basicstyles":{"bold":"ដិáž","italic":"ទ្រáŸáž","strike":"គូស​បន្ទាážáŸ‹â€‹áž…ំ​កណ្ដាល","subscript":"អក្សរážáž¼áž…ក្រោម","superscript":"អក្សរážáž¼áž…លើ","underline":"គូស​បន្ទាážáŸ‹â€‹áž€áŸ’រោម"},"bidi":{"ltr":"ទិស​ដៅ​អក្សរ​ពី​ឆ្វáŸáž„​ទៅ​ស្ដាំ","rtl":"ទិស​ដៅ​អក្សរ​ពី​ស្ដាំ​ទៅ​ឆ្វáŸáž„"},"blockquote":{"toolbar":"ប្លក់​ពាក្យ​សម្រង់"},"clipboard":{"copy":"ចម្លង","copyError":"ការកំណážáŸ‹ážŸáž»ážœážáŸ’ážáž—ាពរបស់កម្មវិធីរុករករបស់លោកអ្នក áž“áŸáŸ‡â€‹áž˜áž·áž“អាចធ្វើកម្មវិធីážáž¶áž€áŸ‹ážáŸ‚ងអážáŸ’ážáž”áž‘ ចំលងអážáŸ’ážáž”ទយកដោយស្វáŸáž™áž”្រវážáŸ’ážáž”ានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនáŸáŸ‡ (Ctrl/Cmd+C)។","cut":"កាážáŸ‹áž™áž€","cutError":"ការកំណážáŸ‹ážŸáž»ážœážáŸ’ážáž—ាពរបស់កម្មវិធីរុករករបស់លោកអ្នក áž“áŸáŸ‡â€‹áž˜áž·áž“អាចធ្វើកម្មវិធីážáž¶áž€áŸ‹ážáŸ‚ងអážáŸ’ážáž”áž‘ កាážáŸ‹áž¢ážáŸ’ážáž”ទយកដោយស្វáŸáž™áž”្រវážáŸ’ážáž”ានឡើយ ។ សូមប្រើប្រាស់បន្សំ ឃីដូចនáŸáŸ‡ (Ctrl/Cmd+X) ។","paste":"បិទ​ភ្ជាប់","pasteArea":"ážáŸ†áž”ន់​បិទ​ភ្ជាប់","pasteMsg":"សូមចំលងអážáŸ’ážáž”ទទៅដាក់ក្នុងប្រអប់ដូចážáž¶áž„ក្រោមដោយប្រើប្រាស់ ឃី ​(<STRONG>Ctrl/Cmd+V</STRONG>) ហើយចុច <STRONG>OK</STRONG> ។","securityMsg":"ព្រោះážáŸ‚​ការកំណážáŸ‹â€‹ážŸáž»ážœážáŸ’ážáž·áž—ាព ប្រអប់សរសáŸážšâ€‹áž˜áž·áž“​អាចចាប់​យកទិន្ននáŸáž™áž–ីក្ážáž¶ážšážáž˜áŸ’បៀážážáŸ’ទាស់​អ្នក​​ដោយផ្ទាល់​បានទáŸáŸ” អ្នក​ážáŸ’រូវចំលង​ដាក់វាម្ážáž„​ទៀហក្នុងផ្ទាំងនáŸáŸ‡áŸ”","title":"បិទ​ភ្ជាប់"},"button":{"selectedLabel":"%1 (បាន​ជ្រើស​រើស)"},"colorbutton":{"auto":"ស្វáŸáž™áž”្រវážáŸ’ážáž·","bgColorTitle":"ពណ៌ផ្ទៃážáž¶áž„ក្រោយ","colors":{"000":"ážáŸ’មៅ","800000":"ážáŸ’នោážâ€‹áž…ាស់","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"ážáŸ€ážœâ€‹áž…ាស់","4B0082":"ធ្លះ","696969":"ប្រផáŸáŸ‡â€‹áž€áŸ’រាស់","B22222":"Fire Brick","A52A2A":"ážáŸ’នោáž","DAA520":"Golden Rod","006400":"បៃážáž„​ចាស់","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"ប្រផáŸáŸ‡","F00":"ក្រហម","FF8C00":"ទឹក​ក្រូច​ចាស់","FFD700":"មាស","008000":"បៃážáž„","0FF":"Cyan","00F":"ážáŸ€ážœ","EE82EE":"ស្វាយ","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"ទឹក​ក្រូច","FFFF00":"លឿង","00FF00":"ក្រូច​ឆ្មារ","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"លឿង​ស្ដើង","F0FFF0":"Honeydew","F0FFFF":"ផ្ទៃមáŸážƒ","F0F8FF":"Alice Blue","E6E6FA":"ឡាវិនដឺ","FFF":"ស"},"more":"ពណ៌​ផ្សáŸáž„​ទៀáž..","panelTitle":"ពណ៌","textColorTitle":"ពណ៌អក្សរ"},"colordialog":{"clear":"សម្អាáž","highlight":"បន្លិច​ពណ៌","options":"ជម្រើស​ពណ៌","selected":"ពណ៌​ដែល​បាន​រើស","title":"រើស​ពណ៌"},"templates":{"button":"ពុម្ព​គំរូ","emptyListMsg":"(មិន​មាន​ពុម្ព​គំរូ​ážáŸ’រូវ​បាន​កំណážáŸ‹)","insertOption":"ជំនួស​ក្នុង​មាážáž·áž€áž¶â€‹áž”ច្ចុប្បន្ន","options":"ជម្រើស​ពុម្ព​គំរូ","selectPromptMsg":"សូម​រើស​ពុម្ព​គំរូ​ដើម្បី​បើក​ក្នុង​កម្មវិធី​សរសáŸážšâ€‹áž¢ážáŸ’ážáž”áž‘","title":"ពុម្ព​គំរូ​មាážáž·áž€áž¶"},"contextmenu":{"options":"ជម្រើស​ម៉ឺនុយ​បរិបទ"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"ចំណង​ជើង​ប្រឹក្សា","cssClassInputLabel":"Stylesheet Classes","edit":"កែ Div","inlineStyleInputLabel":"ស្ទីល​ក្នុង​បន្ទាážáŸ‹","langDirLTRLabel":"ពីឆ្វáŸáž„ទៅស្ážáž¶áŸ†(LTR)","langDirLabel":"ទិសដៅភាសា","langDirRTLLabel":"ពីស្ážáž¶áŸ†áž‘ៅឆ្វáŸáž„(RTL)","languageCodeInputLabel":"កូដ​ភាសា","remove":"ដក Div áž…áŸáž‰","styleSelectLabel":"ស្ទីល","title":"បង្កើážâ€‹áž¢áŸ’នក​ផ្ទុក Div","toolbar":"បង្កើážâ€‹áž¢áŸ’នក​ផ្ទុក Div"},"toolbar":{"toolbarCollapse":"បង្រួម​របារ​ឧបករណáŸ","toolbarExpand":"ពង្រីក​របារ​ឧបករណáŸ","toolbarGroups":{"document":"ឯកសារ","clipboard":"Clipboard/មិន​ធ្វើ​វិញ","editing":"ការ​កែ​សម្រួល","forms":"បែបបទ","basicstyles":"រចនាបážâ€‹áž˜áž¼áž›ážŠáŸ’ឋាន","paragraph":"កážáž¶ážážŽáŸ’ឌ","links":"ážáŸ†ážŽ","insert":"បញ្ចូល","styles":"រចនាបáž","colors":"ពណ៌","tools":"ឧបករណáŸ"},"toolbars":"របារ​ឧបករណáŸâ€‹áž€áŸ‚​សម្រួល"},"elementspath":{"eleLabel":"ទីážáž¶áŸ†áž„​ធាážáž»","eleTitle":"ធាážáž» %1"},"find":{"find":"ស្វែងរក","findOptions":"ជម្រើស​ស្វែង​រក","findWhat":"ស្វែងរកអ្វី:","matchCase":"ករណី​ដំណូច","matchCyclic":"ážáŸ’រូវ​នឹង cyclic","matchWord":"ដូច​នឹង​ពាក្យ​ទាំង​មូល","notFoundMsg":"រក​មិន​ឃើញ​ពាក្យ​ដែល​បាន​បញ្ជាក់។","replace":"ជំនួស","replaceAll":"ជំនួសទាំងអស់","replaceSuccessMsg":"ការ​ជំនួស​ចំនួន %1 បាន​កើážâ€‹áž¡áž¾áž„។","replaceWith":"ជំនួសជាមួយ:","title":"រក​និង​ជំនួស"},"fakeobjects":{"anchor":"យុážáŸ’កា","flash":"Flash មាន​ចលនា","hiddenfield":"វាល​កំបាំង","iframe":"IFrame","unknown":"ážœážáŸ’ážáž»â€‹áž˜áž·áž“​ស្គាល់"},"flash":{"access":"Script Access","accessAlways":"ជានិច្ច","accessNever":"កុំ","accessSameDomain":"Same domain","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"បន្ទាážáŸ‹áž‡áž¶áž˜áž¼áž›ážŠáŸ’ឋាន","alignTextTop":"លើអážáŸ’ážáž”áž‘","bgcolor":"ពណ៌ផ្ទៃážáž¶áž„ក្រោយ","chkFull":"អនុញ្ញាážâ€‹áž²áŸ’យ​ពáŸáž‰â€‹áž¢áŸáž€áŸ’រង់","chkLoop":"ចំនួនដង","chkMenu":"បង្ហាញ មឺនុយរបស់ Flash","chkPlay":"áž›áŸáž„ដោយស្វáŸáž™áž”្រវážáŸ’áž","flashvars":"អážáŸážš Flash","hSpace":"គំលាážáž‘ទឹង","properties":"ការកំណážáŸ‹ Flash","propertiesTab":"លក្ážážŽáŸˆâ€‹ážŸáž˜áŸ’áž”ážáŸ’ážáž·","quality":"គុណភាព","qualityAutoHigh":"ážáŸ’ពស់​ស្វáŸáž™â€‹áž”្រវážáŸ’ážáž·","qualityAutoLow":"ទាប​ស្វáŸáž™â€‹áž”្រវážáŸ’ážáž·","qualityBest":"ល្អ​បំផុáž","qualityHigh":"ážáŸ’ពស់","qualityLow":"ទាប","qualityMedium":"មធ្យម","scale":"ទំហំ","scaleAll":"បង្ហាញទាំងអស់","scaleFit":"ážáŸ’រូវល្មម","scaleNoBorder":"មិនបង្ហាញស៊ុម","title":"ការកំណážáŸ‹ Flash","vSpace":"គំលាážáž”ណ្ážáŸ„áž™","validateHSpace":"HSpace must be a number.","validateSrc":"សូមសរសáŸážš អាសáŸáž™ážŠáŸ’ឋាន URL","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"ភាព​ážáŸ’លា","windowModeWindow":"វីនដូ"},"font":{"fontSize":{"label":"ទំហំ","voiceLabel":"ទំហំ​អក្សរ","panelTitle":"ទំហំ​អក្សរ"},"label":"ពុម្ព​អក្សរ","panelTitle":"ឈ្មោះ​ពុម្ព​អក្សរ","voiceLabel":"ពុម្ព​អក្សរ"},"forms":{"button":{"title":"លក្ážážŽáŸˆâ€‹áž”៊ូážáž»áž„","text":"អážáŸ’ážáž”áž‘ (ážáž˜áŸ’លៃ)","type":"ប្រភáŸáž‘","typeBtn":"ប៊ូážáž»áž„","typeSbm":"ដាក់ស្នើ","typeRst":"កំណážáŸ‹â€‹áž¡áž¾áž„​វិញ"},"checkboxAndRadio":{"checkboxTitle":"លក្ážážŽáŸˆâ€‹áž”្រអប់​ធីក","radioTitle":"លក្ážáž“ៈ​ប៊ូážáž»áž„​មូល","value":"ážáž˜áŸ’លៃ","selected":"បាន​ជ្រើស"},"form":{"title":"លក្ážážŽáŸˆâ€‹áž”ែបបទ","menu":"លក្ážážŽáŸˆâ€‹áž”ែបបទ","action":"សកម្មភាព","method":"វិធីសាស្ážáŸ’ážš","encoding":"ការ​អ៊ិនកូដ"},"hidden":{"title":"លក្ážážŽáŸˆâ€‹ážœáž¶áž›â€‹áž€áŸ†áž”ាំង","name":"ឈ្មោះ","value":"ážáž˜áŸ’លៃ"},"select":{"title":"លក្ážážŽáŸˆâ€‹ážœáž¶áž›â€‹áž‡áž˜áŸ’រើស","selectInfo":"áž–áŸážáŸŒáž˜áž¶áž“​ជម្រើស","opAvail":"ជម្រើស​ដែល​មាន","value":"ážáž˜áŸ’លៃ","size":"ទំហំ","lines":"បន្ទាážáŸ‹","chkMulti":"អនុញ្ញាážâ€‹áž–ហុ​ជម្រើស","opText":"អážáŸ’ážáž”áž‘","opValue":"ážáž˜áŸ’លៃ","btnAdd":"បន្ážáŸ‚ម","btnModify":"ផ្លាស់ប្ážáž¼ážš","btnUp":"លើ","btnDown":"ក្រោម","btnSetValue":"កំណážáŸ‹â€‹áž‡áž¶â€‹ážáž˜áŸ’លៃ​ដែល​បាន​ជ្រើស","btnDelete":"លុប"},"textarea":{"title":"លក្ážážŽáŸˆâ€‹áž”្រអប់​អážáŸ’ážáž”áž‘","cols":"ជួរឈរ","rows":"ជួរដáŸáž€"},"textfield":{"title":"លក្ážážŽáŸˆâ€‹ážœáž¶áž›â€‹áž¢ážáŸ’ážáž”áž‘","name":"ឈ្មោះ","value":"ážáž˜áŸ’លៃ","charWidth":"ទទឹង​ážáž½â€‹áž¢áž€áŸ’សរ","maxChars":"អក្សរអážáž·áž”រិមា","type":"ប្រភáŸáž‘","typeText":"អážáŸ’ážáž”áž‘","typePass":"ពាក្យសម្ងាážáŸ‹","typeEmail":"អ៊ីមែល","typeSearch":"ស្វែង​រក","typeTel":"áž›áŸážâ€‹áž‘ូរសព្ទ","typeUrl":"URL"}},"format":{"label":"ទម្រង់","panelTitle":"ទម្រង់​កážáž¶ážážŽáŸ’ឌ","tag_address":"អាសយដ្ឋាន","tag_div":"ធម្មážáž¶ (DIV)","tag_h1":"ចំណង​ជើង 1","tag_h2":"ចំណង​ជើង 2","tag_h3":"ចំណង​ជើង 3","tag_h4":"ចំណង​ជើង 4","tag_h5":"ចំណង​ជើង 5","tag_h6":"ចំណង​ជើង 6","tag_p":"ធម្មážáž¶","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"បន្ážáŸ‚មបន្ទាážáŸ‹áž•áŸ’ážáŸáž€"},"iframe":{"border":"បង្ហាញ​បន្ទាážáŸ‹â€‹ážŸáŸŠáž»áž˜","noUrl":"សូម​បញ្ចូល URL របស់ iframe","scrolling":"ប្រើ​របារ​រំកិល","title":"លក្ážážŽáŸˆâ€‹ážŸáž˜áŸ’áž”ážáŸ’ážáž· IFrame","toolbar":"IFrame"},"image":{"alertUrl":"សូម​បញ្ចូល URL រូបភាព","alt":"អážáŸ’ážáž”ទជំនួស","border":"ស៊ុម","btnUpload":"ផ្ញើ​ទៅ​ម៉ាស៊ីន​បម្រើ","button2Img":"ážáž¾â€‹áž¢áŸ’នក​ចង់​ផ្លាស់​ប្ដូរ​ប៊ូážáž»áž„​រូបភាព​ដែល​បាន​ជ្រើស នៅ​លើ​រូបភាព​ធម្មážáž¶â€‹áž˜áž½áž™â€‹áž˜áŸ‚áž“áž‘áŸ?","hSpace":"គម្លាážâ€‹áž•áŸ’ដáŸáž€","img2Button":"ážáž¾â€‹áž¢áŸ’នក​ចង់​ផ្លាស់​ប្ដូរ​រូបភាព​ដែល​បាន​ជ្រើស នៅ​លើ​ប៊ូážáž»áž„​រូបភាព​មែនទáŸ?","infoTab":"áž–ážáŸŒáž˜áž¶áž“អំពីរូបភាព","linkTab":"ážáŸ†ážŽ","lockRatio":"ចាក់​សោ​ផល​ធៀប","menu":"លក្ážážŽáŸˆâ€‹ážšáž¼áž”ភាព","resetSize":"កំណážáŸ‹áž‘ំហំឡើងវិញ","title":"លក្ážážŽáŸˆâ€‹ážšáž¼áž”ភាព","titleButton":"លក្ážážŽáŸˆâ€‹áž”៊ូážáž»áž„​រូបភាព","upload":"ផ្ទុកឡើង","urlMissing":"ážáŸ’វះ URL ប្រភព​រូប​ភាព។","vSpace":"គម្លាážâ€‹áž”ញ្ឈរ","validateBorder":"ស៊ុម​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážáŸ”","validateHSpace":"គម្លាážâ€‹áž•áŸ’ដáŸáž€â€‹ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážáŸ”","validateVSpace":"គម្លាážâ€‹áž”ញ្ឈរ​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážáŸ”"},"indent":{"indent":"បន្ážáŸ‚មការចូលបន្ទាážáŸ‹","outdent":"បន្ážáž™áž€áž¶ážšáž…ូលបន្ទាážáŸ‹"},"smiley":{"options":"ជម្រើស​រូប​សញ្ញា​អារម្មណáŸ","title":"បញ្ចូល​រូប​សញ្ញា​អារម្មណáŸ","toolbar":"រូប​សញ្ញ​អារម្មណáŸ"},"justify":{"block":"ážáž˜áŸ’រឹម​ពáŸáž‰","center":"កណ្ដាល","left":"ážáž˜áŸ’រឹម​ឆ្វáŸáž„","right":"ážáž˜áŸ’រឹម​ស្ដាំ"},"language":{"button":"កំណážáŸ‹â€‹áž—ាសា","remove":"លុប​ភាសា"},"link":{"acccessKey":"សោរ​ចូល","advanced":"កម្រិážâ€‹ážáŸ’ពស់","advisoryContentType":"ប្រភáŸáž‘អážáŸ’ážáž”ទ​ប្រឹក្សា","advisoryTitle":"ចំណងជើង​ប្រឹក្សា","anchor":{"toolbar":"យុážáŸ’កា","menu":"កែ​យុážáŸ’កា","title":"លក្ážážŽáŸˆâ€‹áž™áž»ážáŸ’កា","name":"ឈ្មោះ​យុážáŸ’កា","errorName":"សូម​បញ្ចូល​ឈ្មោះ​យុážáŸ’កា","remove":"ដក​យុážáŸ’កា​ចáŸáž‰"},"anchorId":"ážáž¶áž˜ ID ធាážáž»","anchorName":"ážáž¶áž˜â€‹ážˆáŸ’មោះ​យុážáŸ’កា","charset":"áž›áŸážáž€áž¼ážáž¢áž€áŸ’សររបស់ឈ្នាប់","cssClasses":"Stylesheet Classes","emailAddress":"អាសយដ្ឋាន​អ៊ីមែល","emailBody":"ážáž½â€‹áž¢ážáŸ’ážáž”áž‘","emailSubject":"ប្រធានបទ​សារ","id":"Id","info":"áž–áŸážáŸŒáž˜áž¶áž“​ពី​ážáŸ†ážŽ","langCode":"កូដ​ភាសា","langDir":"ទិសដៅភាសា","langDirLTR":"ពីឆ្វáŸáž„ទៅស្ážáž¶áŸ†(LTR)","langDirRTL":"ពីស្ážáž¶áŸ†áž‘ៅឆ្វáŸáž„(RTL)","menu":"កែ​ážáŸ†ážŽ","name":"ឈ្មោះ","noAnchors":"(មិន​មាន​យុážáŸ’កា​នៅ​ក្នុង​ឯកសារ​អážáŸ’ážážáž”ទ​ទáŸ)","noEmail":"សូម​បញ្ចូល​អាសយដ្ឋាន​អ៊ីមែល","noUrl":"សូម​បញ្ចូល​ážáŸ†ážŽ URL","other":"<ផ្សáŸáž„​ទៀáž>","popupDependent":"Dependent (Netscape)","popupFeatures":"មុážâ€‹áž„ារ​ផុស​ផ្ទាំង​វីនដូ​ឡើង","popupFullScreen":"áž–áŸáž‰â€‹áž¢áŸáž€áŸ’រង់ (IE)","popupLeft":"ទីážáž¶áŸ†áž„ážáž¶áž„ឆ្វáŸáž„","popupLocationBar":"របារ​ទីážáž¶áŸ†áž„","popupMenuBar":"របារ​ម៉ឺនុយ","popupResizable":"អាច​ប្ដូរ​ទំហំ","popupScrollBars":"របារ​រំកិល","popupStatusBar":"របារ​ស្ážáž¶áž“ភាព","popupToolbar":"របារ​ឧបករណáŸ","popupTop":"ទីážáž¶áŸ†áž„​កំពូល","rel":"សម្ពន្ធ​ភាព","selectAnchor":"រើស​យក​យុážáŸ’កា​មួយ","styles":"ស្ទីល","tabIndex":"áž›áŸáž Tab","target":"គោលដៅ","targetFrame":"<ស៊ុម>","targetFrameName":"ឈ្មោះ​ស៊ុម​ជា​គោល​ដៅ","targetPopup":"<វីនដូ​ផុស​ឡើង>","targetPopupName":"ឈ្មោះ​វីនដូážâ€‹áž•áž»ážŸâ€‹áž¡áž¾áž„","title":"ážáŸ†ážŽ","toAnchor":"ážâ€‹áž—្ជាប់​ទៅ​យុážáŸ’កា​ក្នុង​អážáŸ’ážáž”áž‘","toEmail":"អ៊ីមែល","toUrl":"URL","toolbar":"ážáŸ†ážŽ","type":"ប្រភáŸáž‘​ážáŸ†ážŽ","unlink":"ផ្ដាច់​ážáŸ†ážŽ","upload":"ផ្ទុក​ឡើង"},"list":{"bulletedlist":"បញ្ចូល / លុប​បញ្ជី​ជា​ចំណុច​មូល","numberedlist":"បញ្ចូល / លុប​បញ្ជី​ជា​លáŸáž"},"liststyle":{"armenian":"áž›áŸážâ€‹áž¢áž¶ážšáž˜áŸáž“ី","bulletedTitle":"លក្ážážŽáŸˆâ€‹ážŸáž˜áŸ’áž”ážáŸ’ážáž·â€‹áž”ញ្ជី​ជា​ចំណុច","circle":"រង្វង់​មូល","decimal":"áž›áŸážâ€‹áž‘សភាគ (1, 2, 3, ...)","decimalLeadingZero":"ទសភាគ​ចាប់​ផ្ដើម​ពី​សូន្យ (01, 02, 03, ...)","disc":"ážáž¶ážŸ","georgian":"áž›áŸážâ€‹áž…ចជា (an, ban, gan, ...)","lowerAlpha":"ព្យញ្ជនៈ​ážáž¼áž… (a, b, c, d, e, ...)","lowerGreek":"áž›áŸážâ€‹áž€áŸ’រិក​ážáž¼áž… (alpha, beta, gamma, ...)","lowerRoman":"áž›áŸážâ€‹ážšáŸ‰áž¼áž˜áŸ‰áž¶áŸ†áž„​ážáž¼áž… (i, ii, iii, iv, v, ...)","none":"គ្មាន","notset":"<not set>","numberedTitle":"លក្ážážŽáŸˆâ€‹ážŸáž˜áŸ’áž”ážáŸ’ážáž·â€‹áž”ញ្ជី​ជា​លáŸáž","square":"ការáŸ","start":"ចាប់​ផ្ដើម","type":"ប្រភáŸáž‘","upperAlpha":"អក្សរ​ធំ (A, B, C, D, E, ...)","upperRoman":"áž›áŸážâ€‹ážšáŸ‰áž¼áž˜áŸ‰áž¶áŸ†áž„​ធំ (I, II, III, IV, V, ...)","validateStartNumber":"áž›áŸážâ€‹áž…ាប់​ផ្ដើម​បញ្ជី ážáŸ’រូវ​ážáŸ‚​ជា​ážáž½â€‹áž›áŸážâ€‹áž–áž·ážâ€‹áž”្រាកដ។"},"magicline":{"title":"បញ្ចូល​កážáž¶ážážŽáŸ’ឌ​នៅ​ទីនáŸáŸ‡"},"maximize":{"maximize":"ពង្រីក​អážáž·áž”រមា","minimize":"បង្រួម​អប្បបរមា"},"newpage":{"toolbar":"ទំពáŸážšâ€‹ážáŸ’មី"},"pagebreak":{"alt":"បំបែក​ទំពáŸážš","toolbar":"បន្ážáŸ‚ម​ការ​បំបែក​ទំពáŸážšâ€‹áž˜áž»áž“​បោះពុម្ព"},"pastetext":{"button":"បិទ​ភ្ជាប់​ជា​អážáŸ’ážáž”ទ​ធម្មážáž¶","title":"បិទ​ភ្ជាប់​ជា​អážáŸ’ážáž”ទ​ធម្មážáž¶"},"pastefromword":{"confirmCleanup":"អážáŸ’ážáž”ទ​ដែល​អ្នក​ចង់​បិទ​ភ្ជាប់​នáŸáŸ‡ ទំនង​ដូច​ជា​ចម្លង​មក​ពី Word។ ážáž¾â€‹áž¢áŸ’នក​ចង់​សម្អាážâ€‹ážœáž¶â€‹áž˜áž»áž“​បិទ​ភ្ជាប់​ទáŸ?","error":"ដោយ​សារ​មាន​បញ្ហា​ផ្នែក​ក្នុង​ធ្វើ​ឲ្យ​មិន​អាច​សម្អាážâ€‹áž‘ិន្ននáŸáž™â€‹ážŠáŸ‚ល​បាន​បិទ​ភ្ជាប់","title":"បិទ​ភ្ជាប់​ពី Word","toolbar":"បិទ​ភ្ជាប់​ពី Word"},"preview":{"preview":"មើល​ជា​មុន"},"print":{"toolbar":"បោះពុម្ព"},"removeformat":{"toolbar":"ជម្រះ​ទ្រង់​ទ្រាយ"},"save":{"toolbar":"រក្សាទុក"},"selectall":{"toolbar":"រើស​ទាំង​អស់"},"showblocks":{"toolbar":"បង្ហាញ​ប្លក់"},"sourcearea":{"toolbar":"អក្សរ​កូដ"},"specialchar":{"options":"ជម្រើស​ážáž½â€‹áž¢áž€áŸ’សរ​ពិសáŸážŸ","title":"រើស​ážáž½áž¢áž€áŸ’សរ​ពិសáŸážŸ","toolbar":"បន្ážáŸ‚មអក្សរពិសáŸážŸ"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"រចនាបáž","panelTitle":"ទ្រង់ទ្រាយ​រចនាបáž","panelTitle1":"រចនាបážâ€‹áž”្លក់","panelTitle2":"រចនាបážâ€‹áž€áŸ’នុង​ជួរ","panelTitle3":"រចនាបážâ€‹ážœážáŸ’ážáž»"},"table":{"border":"ទំហំ​បន្ទាážáŸ‹â€‹ážŸáŸŠáž»áž˜","caption":"ចំណងជើង","cell":{"menu":"ក្រឡា","insertBefore":"បញ្ចូល​ក្រឡា​ពីមុáž","insertAfter":"បញ្ចូល​ក្រឡា​ពី​ក្រោយ","deleteCell":"លុប​ក្រឡា","merge":"បញ្ចូល​ក្រឡា​ចូល​គ្នា","mergeRight":"បញ្ចូល​គ្នា​ážáž¶áž„​ស្ដាំ","mergeDown":"បញ្ចូល​គ្នា​ចុះ​ក្រោម","splitHorizontal":"ពុះ​ក្រឡា​ផ្ដáŸáž€","splitVertical":"ពុះ​ក្រឡា​បញ្ឈរ","title":"លក្ážážŽáŸˆâ€‹áž€áŸ’រឡា","cellType":"ប្រភáŸáž‘​ក្រឡា","rowSpan":"ចំនួន​ជួរ​ដáŸáž€â€‹áž›áž¶áž™â€‹áž…ូល​គ្នា","colSpan":"ចំនួន​ជួរ​ឈរ​លាយ​ចូល​គ្នា","wordWrap":"រុំ​ពាក្យ","hAlign":"ការ​ážáž˜áŸ’រឹម​ផ្ដáŸáž€","vAlign":"ការ​ážáž˜áŸ’រឹម​បញ្ឈរ","alignBaseline":"ážáŸ’សែ​បន្ទាážáŸ‹â€‹áž‚ោល","bgColor":"ពណ៌​ផ្ទៃ​ក្រោយ","borderColor":"ពណ៌​បន្ទាážáŸ‹â€‹ážŸáŸŠáž»áž˜","data":"ទិន្ននáŸáž™","header":"ក្បាល","yes":"ព្រម","no":"áž‘áŸ","invalidWidth":"ទទឹង​ក្រឡា​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážáŸ”","invalidHeight":"កម្ពស់​ក្រឡា​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážáŸ”","invalidRowSpan":"ចំនួន​ជួរ​ដáŸáž€â€‹áž›áž¶áž™â€‹áž…ូល​គ្នា​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážâ€‹áž‘ាំង​អស់។","invalidColSpan":"ចំនួន​ជួរ​ឈរ​លាយ​ចូល​គ្នា​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážâ€‹áž‘ាំង​អស់។","chooseColor":"រើស"},"cellPad":"ចន្លោះ​ក្រឡា","cellSpace":"គម្លាážâ€‹áž€áŸ’រឡា","column":{"menu":"ជួរ​ឈរ","insertBefore":"បញ្ចូល​ជួរ​ឈរ​ពីមុáž","insertAfter":"បញ្ចូល​ជួរ​ឈរ​ពី​ក្រោយ","deleteColumn":"លុប​ជួរ​ឈរ"},"columns":"ជួរឈរ","deleteTable":"លុប​ážáž¶ážšáž¶áž„","headers":"ក្បាល","headersBoth":"ទាំង​ពីរ","headersColumn":"ជួរ​ឈរ​ដំបូង","headersNone":"មិន​មាន","headersRow":"ជួរ​ដáŸáž€â€‹ážŠáŸ†áž”ូង","invalidBorder":"ទំហំ​បន្ទាážáŸ‹â€‹ážŸáŸŠáž»áž˜â€‹ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážáŸ”","invalidCellPadding":"ចន្លោះ​ក្រឡា​ážáŸ’រូវ​ážáŸ‚ជា​លáŸážâ€‹ážœáž·áž‡áŸ’ជមាន។","invalidCellSpacing":"គម្លាážâ€‹áž€áŸ’រឡា​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážâ€‹ážœáž·áž‡áŸ’ជមាន។","invalidCols":"ចំនួន​ជួរ​ឈរ​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážâ€‹áž’ំ​ជាង 0។","invalidHeight":"កម្ពស់​ážáž¶ážšáž¶áž„​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸáž","invalidRows":"ចំនួន​ជួរ​ដáŸáž€â€‹ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážâ€‹áž’ំ​ជាង 0។","invalidWidth":"ទទឹង​ážáž¶ážšáž¶áž„​ážáŸ’រូវ​ážáŸ‚​ជា​លáŸážáŸ”","menu":"លក្ážážŽáŸˆâ€‹ážáž¶ážšáž¶áž„","row":{"menu":"ជួរ​ដáŸáž€","insertBefore":"បញ្ចូល​ជួរ​ដáŸáž€â€‹áž–ីមុáž","insertAfter":"បញ្ចូល​ជួរ​ដáŸáž€â€‹áž–ី​ក្រោយ","deleteRow":"លុប​ជួរ​ដáŸáž€"},"rows":"ជួរ​ដáŸáž€","summary":"សáŸáž…ក្ážáž¸â€‹ážŸáž„្ážáŸáž”","title":"លក្ážážŽáŸˆâ€‹ážáž¶ážšáž¶áž„","toolbar":"ážáž¶ážšáž¶áž„","widthPc":"ភាគរយ","widthPx":"ភីកសែល","widthUnit":"ឯកážáž¶â€‹áž‘ទឹង"},"undo":{"redo":"ធ្វើ​ឡើង​វិញ","undo":"មិន​ធ្វើ​វិញ"},"wsc":{"btnIgnore":"មិនផ្លាស់ប្ážáž¼ážš","btnIgnoreAll":"មិនផ្លាស់ប្ážáž¼ážš ទាំងអស់","btnReplace":"ជំនួស","btnReplaceAll":"ជំនួសទាំងអស់","btnUndo":"សារឡើងវិញ","changeTo":"ផ្លាស់ប្ážáž¼ážšáž‘ៅ","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"ពុំមានកម្មវិធីពិនិážáŸ’យអក្ážážšáž¶ážœáž·ážšáž»áž‘្ធ ។ ážáž¾áž…ង់ទាញយកពីណា?","manyChanges":"ការពិនិážáŸ’យអក្ážážšáž¶ážœáž·ážšáž»áž‘្ធបានចប់: %1 ពាក្យបានផ្លាស់ប្ážáž¼ážš","noChanges":"ការពិនិážáŸ’យអក្ážážšáž¶ážœáž·ážšáž»áž‘្ធបានចប់: ពុំមានផ្លាស់ប្ážáž¼ážš","noMispell":"ការពិនិážáŸ’យអក្ážážšáž¶ážœáž·ážšáž»áž‘្ធបានចប់: គ្មានកំហុស","noSuggestions":"- គ្មានសំណើរ -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"គ្មានក្នុងវចនានុក្រម","oneChange":"ការពិនិážáŸ’យអក្ážážšáž¶ážœáž·ážšáž»áž‘្ធបានចប់: ពាក្យមួយážáŸ’រូចបានផ្លាស់ប្ážáž¼ážš","progress":"កំពុងពិនិážáŸ’យអក្ážážšáž¶ážœáž·ážšáž»áž‘្ធ...","title":"Spell Check","toolbar":"áž–áž·áž“áž·ážáŸ’យអក្ážážšáž¶ážœáž·ážšáž»áž‘្ធ"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/ko.js b/wqflask/wqflask/static/packages/ckeditor/lang/ko.js
deleted file mode 100644
index fc29f33d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/ko.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ko']={"editor":"리치 í…스트 편집기","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"ë„ì›€ì´ í•„ìš”í•˜ì‹œë©´ ALT 0 ì„ ëˆ„ë¥´ì„¸ìš”","browseServer":"서버 보기","url":"URL","protocol":"프로토콜","upload":"업로드","uploadSubmit":"서버로 전송","image":"ì´ë¯¸ì§€","flash":"플래쉬","form":"í¼","checkbox":"ì²´í¬ë°•ìŠ¤","radio":"ë¼ë””오버튼","textField":"입력필드","textarea":"ìž…ë ¥ì˜ì—­","hiddenField":"숨김필드","button":"버튼","select":"펼침목ë¡","imageButton":"ì´ë¯¸ì§€ë²„튼","notSet":"<설정ë˜ì§€ ì•ŠìŒ>","id":"ID","name":"Name","langDir":"쓰기 ë°©í–¥","langDirLtr":"왼쪽ì—ì„œ 오른쪽 (LTR)","langDirRtl":"오른쪽ì—ì„œ 왼쪽 (RTL)","langCode":"언어 코드","longDescr":"URL 설명","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"예","cancel":"아니오","close":"닫기","preview":"미리보기","resize":"í¬ê¸° ì¡°ì ˆ","generalTab":"ì¼ë°˜","advancedTab":"ìžì„¸ížˆ","validateNumberFailed":"ì´ ê°’ì€ ìˆ«ìžê°€ 아닙니다.","confirmNewPage":"저장하지 ì•Šì€ ëª¨ë“  ë³€ê²½ì‚¬í•­ì€ ìœ ì‹¤ë©ë‹ˆë‹¤. ì •ë§ë¡œ 새로운 페ì´ì§€ë¥¼ 부르겠습니까?","confirmCancel":"ëª‡ëª‡ê°œì˜ ì˜µì…˜ì´ ë°”ê¼ˆìŠµë‹ˆë‹¤. ì •ë§ë¡œ ì°½ì„ ë‹«ìœ¼ì‹œê² ìŠµë‹ˆê¹Œ?","options":"옵션","target":"타겟","targetNew":"새로운 ì°½ (_blank)","targetTop":"최ìƒìœ„ ì°½ (_top)","targetSelf":"ê°™ì€ ì°½ (_self)","targetParent":"부모 ì°½ (_parent)","langDirLTR":"왼쪽ì—ì„œ 오른쪽 (LTR)","langDirRTL":"오른쪽ì—ì„œ 왼쪽 (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"너비","height":"높ì´","align":"ì •ë ¬","alignLeft":"왼쪽","alignRight":"오른쪽","alignCenter":"가운ë°","alignJustify":"両端æƒãˆ","alignTop":"위","alignMiddle":"중간","alignBottom":"아래","alignNone":"None","invalidValue":"ìž˜ëª»ëœ ê°’.","invalidHeight":"높ì´ëŠ” 숫ìžì—¬ì•¼ 합니다.","invalidWidth":"ë„“ì´ëŠ” 숫ìžì—¬ì•¼ 합니다.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, 사용할 수 ì—†ìŒ</span>"},"about":{"copy":"저작권 &copy; $1 . íŒê¶Œ 소유.","dlgTitle":"CKEditor ì— ëŒ€í•˜ì—¬","help":"ë„ì›€ì´ í•„ìš”í•˜ì‹œë©´ $1 를 확ì¸í•˜ì„¸ìš”","moreInfo":"ë¼ì´ì„¼ìŠ¤ì— 대한 정보를 보고싶다면 ìš°ë¦¬ì˜ ì›¹ 사ì´íŠ¸ë¥¼ 방문하세요:","title":"CKEditorì— ëŒ€í•˜ì—¬","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"진하게","italic":"ì´í…”릭","strike":"취소선","subscript":"아래 첨ìž","superscript":"위 첨ìž","underline":"밑줄"},"bidi":{"ltr":"íƒìŠ¤íŠ¸ ë°©í–¥ì´ ì™¼ìª½ì—ì„œ 오른쪽으로 ","rtl":"íƒìŠ¤íŠ¸ ë°©í–¥ì´ ì˜¤ë¥¸ìª½ì—ì„œ 왼쪽으로"},"blockquote":{"toolbar":"ì¸ìš© 블ë¡"},"clipboard":{"copy":"복사하기","copyError":"브ë¼ìš°ì €ì˜ ë³´ì•ˆì„¤ì •ë•Œë¬¸ì— ë³µì‚¬í•˜ê¸° ê¸°ëŠ¥ì„ ì‹¤í–‰í•  수 없습니다. 키보드 ëª…ë ¹ì„ ì‚¬ìš©í•˜ì‹­ì‹œìš”. (Ctrl/Cmd+C).","cut":"잘ë¼ë‚´ê¸°","cutError":"브ë¼ìš°ì €ì˜ ë³´ì•ˆì„¤ì •ë•Œë¬¸ì— ìž˜ë¼ë‚´ê¸° ê¸°ëŠ¥ì„ ì‹¤í–‰í•  수 없습니다. 키보드 ëª…ë ¹ì„ ì‚¬ìš©í•˜ì‹­ì‹œìš”. (Ctrl/Cmd+X).","paste":"붙여넣기","pasteArea":"범위 붙여넣기","pasteMsg":"í‚¤ë³´ë“œì˜ (<STRONG>Ctrl/Cmd+V</STRONG>) 를 ì´ìš©í•´ì„œ ìƒìžì•ˆì— 붙여넣고 <STRONG>OK</STRONG> 를 누르세요.","securityMsg":"브러우저 보안 설정으로 ì¸í•´, í´ë¦½ë³´ë“œì˜ ìžë£Œë¥¼ ì§ì ‘ 접근할 수 없습니다. ì´ ì°½ì— ë‹¤ì‹œ 붙여넣기 하십시오.","title":"붙여넣기"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"기본색ìƒ","bgColorTitle":"ë°°ê²½ 색ìƒ","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"색ìƒì„ íƒ...","panelTitle":"Colors","textColorTitle":"ê¸€ìž ìƒ‰ìƒ"},"colordialog":{"clear":"제거","highlight":"하ì´ë¼ì´íŠ¸","options":"ìƒ‰ìƒ ì˜µì…˜","selected":"ìƒ‰ìƒ ì„ íƒë¨","title":"ìƒ‰ìƒ ì„ íƒ"},"templates":{"button":"템플릿","emptyListMsg":"(í…œí”Œë¦¿ì´ ì—†ìŠµë‹ˆë‹¤.)","insertOption":"현재 ë‚´ìš© 바꾸기","options":"템플릿 옵션","selectPromptMsg":"ì—디터ì—ì„œ 사용할 í…œí”Œë¦¿ì„ ì„ íƒí•˜ì‹­ì‹œìš”.<br>(지금까지 ìž‘ì„±ëœ ë‚´ìš©ì€ ì‚¬ë¼ì§‘니다.):","title":"ë‚´ìš© 템플릿"},"contextmenu":{"options":"컨í…스트 메뉴 옵션"},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Div 태그 수정","inlineStyleInputLabel":"ì¸ë¼ì¸ 스타ì¼","langDirLTRLabel":"왼쪽ì—ì„œ 오른쪽 (LTR)","langDirLabel":"쓰기 ë°©í–¥","langDirRTLLabel":"오른쪽ì—ì„œ 왼쪽 (RTL)","languageCodeInputLabel":"언어 코드","remove":"Div 태그 ì‚­ì œ","styleSelectLabel":"Style","title":"Div 태그 ìƒì„±","toolbar":"Div 태그 ìƒì„±"},"toolbar":{"toolbarCollapse":"툴바 ì‚­ì œ","toolbarExpand":"확장 툴바","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"편집ìžìš© 툴바들"},"elementspath":{"eleLabel":"요소 위치","eleTitle":"%1 요소"},"find":{"find":"찾기","findOptions":"Find Options","findWhat":"ì°¾ì„ ë¬¸ìžì—´:","matchCase":"ëŒ€ì†Œë¬¸ìž êµ¬ë¶„","matchCyclic":"Match cyclic","matchWord":"온전한 단어","notFoundMsg":"문ìžì—´ì„ ì°¾ì„ ìˆ˜ 없습니다.","replace":"바꾸기","replaceAll":"ëª¨ë‘ ë°”ê¾¸ê¸°","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"바꿀 문ìžì—´:","title":"찾기 & 바꾸기"},"fakeobjects":{"anchor":"책갈피 삽입/변경","flash":"Flash Animation","hiddenfield":"숨김필드","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"스í¬ë¦½íŠ¸ 허용","accessAlways":"í•­ìƒ í—ˆìš©","accessNever":"허용 안함","accessSameDomain":"Same domain","alignAbsBottom":"줄아래(Abs Bottom)","alignAbsMiddle":"줄중간(Abs Middle)","alignBaseline":"기준선","alignTextTop":"글ìžìƒë‹¨","bgcolor":"ë°°ê²½ 색ìƒ","chkFull":"전체화면 ","chkLoop":"반복","chkMenu":"플래쉬메뉴 가능","chkPlay":"ìžë™ìž¬ìƒ","flashvars":"Variables for Flash","hSpace":"수í‰ì—¬ë°±","properties":"플래쉬 ì†ì„±","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"ì˜ì—­","scaleAll":"모ë‘보기","scaleFit":"ì˜ì—­ìžë™ì¡°ì ˆ","scaleNoBorder":"경계선없ìŒ","title":"플래쉬 등ë¡ì •ë³´","vSpace":"수ì§ì—¬ë°±","validateHSpace":"HSpace must be a number.","validateSrc":"ë§í¬ URLì„ ìž…ë ¥í•˜ì‹­ì‹œìš”.","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"ê¸€ìž í¬ê¸°","voiceLabel":"Font Size","panelTitle":"ê¸€ìž í¬ê¸°"},"label":"í°íŠ¸","panelTitle":"í°íŠ¸","voiceLabel":"í°íŠ¸"},"forms":{"button":{"title":"버튼 ì†ì„±","text":"버튼글ìž(ê°’)","type":"버튼종류","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"ì²´í¬ë°•ìŠ¤ ì†ì„±","radioTitle":"ë¼ë””오버튼 ì†ì„±","value":"ê°’","selected":"ì„ íƒë¨"},"form":{"title":"í¼ ì†ì„±","menu":"í¼ ì†ì„±","action":"실행경로(Action)","method":"방법(Method)","encoding":"Encoding"},"hidden":{"title":"숨김필드 ì†ì„±","name":"ì´ë¦„","value":"ê°’"},"select":{"title":"íŽ¼ì¹¨ëª©ë¡ ì†ì„±","selectInfo":"ì •ë³´","opAvail":"ì„ íƒì˜µì…˜","value":"ê°’","size":"세로í¬ê¸°","lines":"줄","chkMulti":"여러항목 ì„ íƒ í—ˆìš©","opText":"ì´ë¦„","opValue":"ê°’","btnAdd":"추가","btnModify":"변경","btnUp":"위로","btnDown":"아래로","btnSetValue":"ì„ íƒëœê²ƒìœ¼ë¡œ 설정","btnDelete":"ì‚­ì œ"},"textarea":{"title":"ìž…ë ¥ì˜ì—­ ì†ì„±","cols":"칸수","rows":"줄수"},"textfield":{"title":"입력필드 ì†ì„±","name":"ì´ë¦„","value":"ê°’","charWidth":"ê¸€ìž ë„ˆë¹„","maxChars":"최대 글ìžìˆ˜","type":"종류","typeText":"문ìžì—´","typePass":"비밀번호","typeEmail":"ì´ë©”ì¼","typeSearch":"검색","typeTel":"전화번호","typeUrl":"URL"}},"format":{"label":"í¬ë§·","panelTitle":"í¬ë§·","tag_address":"Address","tag_div":"기본 (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"수í‰ì„  삽입"},"iframe":{"border":"프레임 í…Œë‘리 표시","noUrl":"iframe ëŒ€ì‘ URLì„ ìž…ë ¥í•´ì£¼ì„¸ìš”.","scrolling":"스í¬ë¡¤ë°” 사용","title":"IFrame ì†ì„±","toolbar":"IFrame"},"image":{"alertUrl":"ì´ë¯¸ì§€ URLì„ ìž…ë ¥í•˜ì‹­ì‹œìš”","alt":"ì´ë¯¸ì§€ 설명","border":"í…Œë‘리","btnUpload":"서버로 전송","button2Img":"단순 ì´ë¯¸ì§€ì—ì„œ ì„ íƒí•œ ì´ë¯¸ì§€ ë²„íŠ¼ì„ ë³€í™˜í•˜ì‹œê² ìŠµë‹ˆê¹Œ?","hSpace":"수í‰ì—¬ë°±","img2Button":"ì´ë¯¸ì§€ ë²„íŠ¼ì— ì„ íƒí•œ ì´ë¯¸ì§€ë¥¼ 변환하시겠습니까?","infoTab":"ì´ë¯¸ì§€ ì •ë³´","linkTab":"ë§í¬","lockRatio":"비율 유지","menu":"ì´ë¯¸ì§€ 설정","resetSize":"ì›ëž˜ í¬ê¸°ë¡œ","title":"ì´ë¯¸ì§€ 설정","titleButton":"ì´ë¯¸ì§€ë²„튼 ì†ì„±","upload":"업로드","urlMissing":"ì´ë¯¸ì§€ 소스 URLì´ ì—†ìŠµë‹ˆë‹¤.","vSpace":"수ì§ì—¬ë°±","validateBorder":"í…Œë‘리는 정수여야 합니다.","validateHSpace":"가로 길ì´ëŠ” 정수여야 합니다.","validateVSpace":"세로 길ì´ëŠ” 정수여야 합니다."},"indent":{"indent":"들여쓰기","outdent":"내어쓰기"},"smiley":{"options":"ì´ëª¨í‹°ì½˜ 옵션","title":"ì•„ì´ì½˜ 삽입","toolbar":"ì•„ì´ì½˜"},"justify":{"block":"양쪽 맞춤","center":"ê°€ìš´ë° ì •ë ¬","left":"왼쪽 ì •ë ¬","right":"오른쪽 ì •ë ¬"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"엑세스 키","advanced":"ìžì„¸ížˆ","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"책갈피 삽입/변경","menu":"책갈피 ì†ì„±","title":"책갈피 ì†ì„±","name":"책갈피 ì´ë¦„","errorName":"책갈피 ì´ë¦„ì„ ìž…ë ¥í•˜ì‹­ì‹œìš”.","remove":"Remove Anchor"},"anchorId":"책갈피 ID","anchorName":"책갈피 ì´ë¦„","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"ì´ë©”ì¼ ì£¼ì†Œ","emailBody":"ë‚´ìš©","emailSubject":"제목","id":"ID","info":"ë§í¬ ì •ë³´","langCode":"쓰기 ë°©í–¥","langDir":"쓰기 ë°©í–¥","langDirLTR":"왼쪽ì—ì„œ 오른쪽 (LTR)","langDirRTL":"오른쪽ì—ì„œ 왼쪽 (RTL)","menu":"ë§í¬ 수정","name":"Name","noAnchors":"(ë¬¸ì„œì— ì±…ê°ˆí”¼ê°€ 없습니다.)","noEmail":"ì´ë©”ì¼ì£¼ì†Œë¥¼ 입력하십시요.","noUrl":"ë§í¬ URLì„ ìž…ë ¥í•˜ì‹­ì‹œìš”.","other":"<기타>","popupDependent":"Dependent (Netscape)","popupFeatures":"íŒì—…ì°½ 설정","popupFullScreen":"전체화면 (IE)","popupLeft":"왼쪽 위치","popupLocationBar":"주소표시줄","popupMenuBar":"메뉴바","popupResizable":"í¬ê¸° ì¡°ì ˆ 가능","popupScrollBars":"스í¬ë¡¤ë°”","popupStatusBar":"ìƒíƒœë°”","popupToolbar":"툴바","popupTop":"윗쪽 위치","rel":"관계","selectAnchor":"책갈피 ì„ íƒ","styles":"Style","tabIndex":"탭 순서","target":"타겟","targetFrame":"<프레임>","targetFrameName":"타겟 프레임 ì´ë¦„","targetPopup":"<íŒì—…ì°½>","targetPopupName":"íŒì—…ì°½ ì´ë¦„","title":"ë§í¬","toAnchor":"책갈피","toEmail":"ì´ë©”ì¼","toUrl":"URL","toolbar":"ë§í¬ 삽입/변경","type":"ë§í¬ 종류","unlink":"ë§í¬ ì‚­ì œ","upload":"업로드"},"list":{"bulletedlist":"순서없는 목ë¡","numberedlist":"순서있는 목ë¡"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"ì—¬ê¸°ì— ê·¸ëž˜í”„ 삽입"},"maximize":{"maximize":"최대","minimize":"최소"},"newpage":{"toolbar":"새 문서"},"pagebreak":{"alt":"패ì´ì§€ 나누기","toolbar":"ì¸ì‡„ì‹œ 페ì´ì§€ 나누기 삽입"},"pastetext":{"button":"í…스트로 붙여넣기","title":"í…스트로 붙여넣기"},"pastefromword":{"confirmCleanup":"붙여 넣기 í•  í…스트는 MS Wordì—ì„œ 복사 í•œ 것입니다. 붙여 넣기 ì „ì— MS Word í¬ë©§ì„ ì‚­ì œ 하시겠습니까?","error":"내부 오류로 붙여 ë„£ì€ ë°ì´í„°ë¥¼ 정리 í•  수 없습니다.","title":"MS Word 형ì‹ì—ì„œ 붙여넣기","toolbar":"MS Word 형ì‹ì—ì„œ 붙여넣기"},"preview":{"preview":"미리보기"},"print":{"toolbar":"ì¸ì‡„하기"},"removeformat":{"toolbar":"í¬ë§· 지우기"},"save":{"toolbar":"저장하기"},"selectall":{"toolbar":"ì „ì²´ì„ íƒ"},"showblocks":{"toolbar":"ë¸”ë¡ ë³´ê¸°"},"sourcearea":{"toolbar":"소스"},"specialchar":{"options":"íŠ¹ìˆ˜ë¬¸ìž ì˜µì…˜","title":"íŠ¹ìˆ˜ë¬¸ìž ì„ íƒ","toolbar":"íŠ¹ìˆ˜ë¬¸ìž ì‚½ìž…"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"스타ì¼","panelTitle":"ì „ì²´ 구성 스타ì¼","panelTitle1":"ë¸”ë¡ ìŠ¤íƒ€ì¼","panelTitle2":"ì¸ë¼ì¸ 스타ì¼","panelTitle3":"오브ì íŠ¸ 스타ì¼"},"table":{"border":"í…Œë‘리 í¬ê¸°","caption":"캡션","cell":{"menu":"ì…€/칸(Cell)","insertBefore":"ì•žì— ì…€/칸 삽입","insertAfter":"ë’¤ì— ì…€/칸 삽입","deleteCell":"ì…€ ì‚­ì œ","merge":"ì…€ 합치기","mergeRight":"오른쪽 뭉치기","mergeDown":"왼쪽 뭉치기","splitHorizontal":"ìˆ˜í‰ ë‚˜ëˆ„ê¸°","splitVertical":"ìˆ˜ì§ ë‚˜ëˆ„ê¸°","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"ì…€ 여백","cellSpace":"ì…€ 간격","column":{"menu":"ì—´(Column)","insertBefore":"ì•žì— ì—´ 삽입","insertAfter":"ë’¤ì— ì—´ 삽입","deleteColumn":"세로줄 ì‚­ì œ"},"columns":"세로줄","deleteTable":"í‘œ ì‚­ì œ","headers":"í•´ë”","headersBoth":"모ë‘","headersColumn":"첫 ì—´","headersNone":"None","headersRow":"첫 í–‰","invalidBorder":"í…Œë‘리 í¬ê¸°ëŠ” 숫ìžì—¬ì•¼ 합니다.","invalidCellPadding":"ì…€ ì•ˆìª½ì˜ ì—¬ë°±ì€ 0 ì´ìƒì´ì–´ì•¼ 합니다.","invalidCellSpacing":"ì…€ ê°„ê²©ì€ 0 ì´ìƒì´ì–´ì•¼ 합니다.","invalidCols":"í–‰ 번호는 0보다 í° ìˆ«ìžì—¬ì•¼ 합니다.","invalidHeight":"í‘œ 높ì´ëŠ” 숫ìžì—¬ì•¼ 합니다.","invalidRows":"í–‰ 번호는 0보다 í° ìˆ«ìžì—¬ì•¼ 합니다.","invalidWidth":"í‘œì˜ í­ì€ 숫ìžì—¬ì•¼ 합니다.","menu":"í‘œ 설정","row":{"menu":"í–‰(Row)","insertBefore":"ì•žì— í–‰ 삽입","insertAfter":"ë’¤ì— í–‰ 삽입","deleteRow":"가로줄 ì‚­ì œ"},"rows":"가로줄","summary":"요약","title":"í‘œ 설정","toolbar":"í‘œ","widthPc":"í¼ì„¼íŠ¸","widthPx":"픽셀","widthUnit":"í­ ë‹¨ìœ„"},"undo":{"redo":"재실행","undo":"취소"},"wsc":{"btnIgnore":"건너뜀","btnIgnoreAll":"ëª¨ë‘ ê±´ë„ˆëœ€","btnReplace":"변경","btnReplaceAll":"ëª¨ë‘ ë³€ê²½","btnUndo":"취소","changeTo":"변경할 단어","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"ì² ìž ê²€ì‚¬ê¸°ê°€ 철치ë˜ì§€ 않았습니다. 지금 다운로드하시겠습니까?","manyChanges":"ì² ìžê²€ì‚¬ 완료: %1 단어가 변경ë˜ì—ˆìŠµë‹ˆë‹¤.","noChanges":"ì² ìžê²€ì‚¬ 완료: ë³€ê²½ëœ ë‹¨ì–´ê°€ 없습니다.","noMispell":"ì² ìžê²€ì‚¬ 완료: ìž˜ëª»ëœ ì² ìžê°€ 없습니다.","noSuggestions":"- 추천단어 ì—†ìŒ -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"ì‚¬ì „ì— ì—†ëŠ” 단어","oneChange":"ì² ìžê²€ì‚¬ 완료: 단어가 변경ë˜ì—ˆìŠµë‹ˆë‹¤.","progress":"ì² ìžê²€ì‚¬ë¥¼ 진행중입니다...","title":"Spell Check","toolbar":"ì² ìžê²€ì‚¬"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/ku.js b/wqflask/wqflask/static/packages/ckeditor/lang/ku.js
deleted file mode 100644
index 98670f23..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/ku.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ku']={"editor":"سەرنووسەی دەقی بە پیت","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"کلیکی ALT Ù„Û•Ú¯Û•Úµ 0 بکه‌ بۆ یارمەتی","browseServer":"هێنانی ڕاژە","url":"ناونیشانی بەستەر","protocol":"پڕۆتۆکۆڵ","upload":"بارکردن","uploadSubmit":"ناردنی بۆ ڕاژە","image":"ÙˆÛŽÙ†Û•","flash":"Ùلاش","form":"داڕشتە","checkbox":"خانەی نیشانکردن","radio":"جێگرەوەی دوگمە","textField":"خانەی دەق","textarea":"ڕووبەری دەق","hiddenField":"شاردنەوی خانە","button":"دوگمە","select":"هەڵبژاردەی خانە","imageButton":"دوگمەی ÙˆÛŽÙ†Û•","notSet":"<هیچ دانەدراوە>","id":"ناسنامە","name":"ناو","langDir":"ئاراستەی زمان","langDirLtr":"Ú†Û•Ù¾ بۆ ڕاست (LTR)","langDirRtl":"ڕاست بۆ Ú†Û•Ù¾ (RTL)","langCode":"هێمای زمان","longDescr":"پێناسەی درێژی بەستەر","cssClass":"شێوازی چینی په‌ڕە","advisoryTitle":"ڕاوێژکاری سەردێڕ","cssStyle":"شێواز","ok":"باشە","cancel":"هەڵوەشاندن","close":"داخستن","preview":"پێشبینین","resize":"گۆڕینی ئەندازە","generalTab":"گشتی","advancedTab":"پەرەسەندوو","validateNumberFailed":"ئەم نرخە ژمارە نیە، تکایە نرخێکی ژمارە بنووسە.","confirmNewPage":"سەرجەم گۆڕانکاریەکان Ùˆ پێکهاتەکانی ناووەوە لەدەست دەدەی گەر بێتوو پاشکەوتی Ù†Û•Ú©Û•ÛŒ یەکەم جار، تۆ هەر دڵنیایی لەکردنەوەی پەنجەرەکی نوێ؟","confirmCancel":"هەندێك هەڵبژاردە گۆڕدراوە. تۆ دڵنیایی Ù„Û• داخستنی ئەم دیالۆگە؟","options":"هەڵبژاردەکان","target":"ئامانج","targetNew":"پەنجەرەیەکی نوێ (_blank)","targetTop":"لووتکەی پەنجەرە (_top)","targetSelf":"لەهەمان پەنجەرە (_self)","targetParent":"پەنجەرەی باوان (_parent)","langDirLTR":"Ú†Û•Ù¾ بۆ ڕاست (LTR)","langDirRTL":"ڕاست بۆ Ú†Û•Ù¾ (RTL)","styles":"شێواز","cssClasses":"شێوازی چینی Ù¾Û•Ú•Û•","width":"پانی","height":"درێژی","align":"ڕێککەرەوە","alignLeft":"Ú†Û•Ù¾","alignRight":"ڕاست","alignCenter":"ناوەڕاست","alignJustify":"هاوستوونی","alignTop":"سەرەوە","alignMiddle":"ناوەند","alignBottom":"ژێرەوە","alignNone":"None","invalidValue":"نرخێکی نادرووست.","invalidHeight":"درێژی دەبێت ژمارە بێت.","invalidWidth":"پانی دەبێت ژمارە بێت.","invalidCssLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست بێت یان بێ ناونیشانی ئامرازی (px, %, in, cm, mm, em, ex, pt, یان pc).","invalidHtmlLength":"ئەم نرخەی دراوە بۆ خانەی \"%1\" دەبێت ژمارەکی درووست بێت یان بێ ناونیشانی ئامرازی HTML (px یان %).","invalidInlineStyle":"دانەی نرخی شێوازی ناوهێڵ دەبێت پێکهاتبێت لەیەك یان زیاتری داڕشتە \"ناو : نرخ\", جیاکردنەوەی بە Ùاریزە Ùˆ خاڵ","cssLengthTooltip":"ژمارەیەك بنووسه‌ بۆ نرخی piksel یان ئامرازێکی درووستی CSS (px, %, in, cm, mm, em, ex, pt, یان pc).","unavailable":"%1<span class=\"cke_accessibility\">, ئامادە نیە</span>"},"about":{"copy":"ماÙÛŒ لەبەرگەرتنەوەی &copy; $1. گشتی پارێزراوه. ورگێڕانی بۆ کوردی لەلایەن Ù‡Û†Ú˜Û• کۆیی.","dlgTitle":"دەربارەی CKEditor","help":"سەیری $1 بکه بۆ یارمەتی.","moreInfo":"بۆ زانیاری زیاتر دەربارەی مۆڵەتی بەکارهێنان، تکایه سەردانی ماڵپەڕەکەمان بکه:","title":"دەربارەی CKEditor","userGuide":"ڕێپیشاندەری CKEditors"},"basicstyles":{"bold":"Ù‚Û•ÚµÛ•Ùˆ","italic":"لار","strike":"لێدان","subscript":"ژێرنووس","superscript":"سەرنووس","underline":"ژێرهێڵ"},"bidi":{"ltr":"ئاراستەی نووسە Ù„Û• Ú†Û•Ù¾ بۆ ڕاست","rtl":"ئاراستەی نووسە Ù„Û• ڕاست بۆ Ú†Û•Ù¾"},"blockquote":{"toolbar":"بەربەستکردنی ووتەی وەرگیراو"},"clipboard":{"copy":"لەبەرگرتنەوە","copyError":"پارێزی وێبگەڕەکەت ڕێگەنادات بەسەرنووسەکە Ù„Û• لکاندنی دەقی خۆکارارنە. تکایە لەبری ئەمە ئەم Ùەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+C).","cut":"بڕین","cutError":"پارێزی وێبگەڕەکەت ڕێگەنادات بە سەرنووسەکە لەبڕینی خۆکارانە. تکایە لەبری ئەمە ئەم Ùەرمانە بەکاربهێنە بەداگرتنی کلیلی (Ctrl/Cmd+X).","paste":"لکاندن","pasteArea":"ناوچەی لکاندن","pasteMsg":"تکایە بیلکێنە لەناوەوەی ئەم سنوقە Ù„Û•Ú•ÛŽÛŒ تەختەکلیلەکەت بە بەکارهێنانی کلیلی (<STRONG>Ctrl/Cmd+V</STRONG>) دووای کلیکی باشە بکە.","securityMsg":"بەهۆی شێوەپێدانی پارێزی وێبگەڕەکەت، سەرنووسەکه ناتوانێت دەستبگەیەنێت بەهەڵگیراوەکە ڕاستەوخۆ. بۆیه پێویسته دووباره بیلکێنیت Ù„Û•Ù… پەنجەرەیه.","title":"لکاندن"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"خۆکار","bgColorTitle":"Ú•Û•Ù†Ú¯ÛŒ پاشبنەما","colors":{"000":"Ú•Û•Ø´","800000":"سۆرو ماڕوونی","8B4513":"ماڕوونی","2F4F4F":"سەوزی تاریك","008080":"سەوز Ùˆ شین","000080":"شینی تۆخ","4B0082":"مۆری تۆخ","696969":"ڕەساسی تۆخ","B22222":"سۆری تۆخ","A52A2A":"قاوەیی","DAA520":"قاوەیی بریسکەدار","006400":"سەوزی تۆخ","40E0D0":"شینی ناتۆخی بریسکەدار","0000CD":"شینی مامناوەند","800080":"پەمبەیی","808080":"ڕەساسی","F00":"سۆر","FF8C00":"نارەنجی تۆخ","FFD700":"زەرد","008000":"سەوز","0FF":"شینی ئاسمانی","00F":"شین","EE82EE":"پەمەیی","A9A9A9":"ڕەساسی ناتۆخ","FFA07A":"نارەنجی ناتۆخ","FFA500":"نارەنجی","FFFF00":"زەرد","00FF00":"سەوز","AFEEEE":"شینی ناتۆخ","ADD8E6":"شینی زۆر ناتۆخ","DDA0DD":"پەمەیی ناتۆخ","D3D3D3":"ڕەساسی بریسکەدار","FFF0F5":"جەرگی زۆر ناتۆخ","FAEBD7":"جەرگی ناتۆخ","FFFFE0":"سپی ناتۆخ","F0FFF0":"هەنگوینی ناتۆخ","F0FFFF":"شینێکی زۆر ناتۆخ","F0F8FF":"شینێکی ئاسمانی زۆر ناتۆخ","E6E6FA":"شیری","FFF":"سپی"},"more":"Ú•Û•Ù†Ú¯ÛŒ زیاتر...","panelTitle":"ڕەنگەکان","textColorTitle":"Ú•Û•Ù†Ú¯ÛŒ دەق"},"colordialog":{"clear":"پاکیکەوە","highlight":"نیشانکردن","options":"هەڵبژاردەی ڕەنگەکان","selected":"Ú•Û•Ù†Ú¯ÛŒ هەڵبژێردراو","title":"هەڵبژاردنی Ú•Û•Ù†Ú¯"},"templates":{"button":"ڕووکار","emptyListMsg":"(هیچ ڕووکارێك دیارینەکراوە)","insertOption":"Ù„Û• شوێن دانانی ئەم پێکهاتانەی ئێستا","options":"هەڵبژاردەکانی ڕووکار","selectPromptMsg":"ڕووکارێك هەڵبژێره بۆ کردنەوەی له سەرنووسەر:","title":"پێکهاتەی ڕووکار"},"contextmenu":{"options":"هەڵبژاردەی لیستەی کلیکی دەستی ڕاست"},"div":{"IdInputLabel":"ناسنامە","advisoryTitleInputLabel":"سەردێڕ","cssClassInputLabel":"شێوازی چینی Ù¾Û•Ú•Ù‡","edit":"چاکسازی Div","inlineStyleInputLabel":"شێوازی ناوهێڵ","langDirLTRLabel":"Ú†Û•Ù¾ بۆ ڕاست (LTR)","langDirLabel":"ئاراستەی زمان","langDirRTLLabel":"ڕاست بۆ Ú†Û•Ù¾ (RTL)","languageCodeInputLabel":"هێمای زمان","remove":"لابردنی Div","styleSelectLabel":"شێواز","title":"دروستکردنی لەخۆگری Div","toolbar":"دروستکردنی لەخۆگری Div"},"toolbar":{"toolbarCollapse":"شاردنەوی Ù‡ÛŽÚµÛŒ تووڵامراز","toolbarExpand":"نیشاندانی Ù‡ÛŽÚµÛŒ تووڵامراز","toolbarGroups":{"document":"Ù¾Û•Ú•Ù‡","clipboard":"بڕین/پووچکردنەوە","editing":"چاکسازی","forms":"داڕشتە","basicstyles":"شێوازی بنچینەیی","paragraph":"بڕگە","links":"بەستەر","insert":"خستنە ناو","styles":"شێواز","colors":"ڕەنگەکان","tools":"ئامرازەکان"},"toolbars":"تووڵامرازی دەسکاریکەر"},"elementspath":{"eleLabel":"Ú•ÛŽÚ•Û•ÙˆÛŒ توخمەکان","eleTitle":"%1 توخم"},"find":{"find":"گەڕان","findOptions":"هەڵبژاردەکانی گەڕان","findWhat":"گەڕان بەدووای:","matchCase":"جیاکردنەوه لەنێوان پیتی گەورەو بچووك","matchCyclic":"گەڕان لەهەموو Ù¾Û•Ú•Û•Ú©Ù‡","matchWord":"تەنەا هەموو وشەکه","notFoundMsg":"هیچ دەقه گەڕانێك نەدۆزراوه.","replace":"لەبریدانان","replaceAll":"لەبریدانانی هەمووی","replaceSuccessMsg":" پێشهاتە(ÛŒ) لەبری دانرا. %1","replaceWith":"لەبریدانان به:","title":"گەڕان Ùˆ لەبریدانان"},"fakeobjects":{"anchor":"لەنگەر","flash":"Ùلاش","hiddenfield":"شاردنەوەی خانه","iframe":"لەچوارچێوە","unknown":"بەرکارێکی نەناسراو"},"flash":{"access":"دەستپێگەیشتنی نووسراو","accessAlways":"هەمیشه","accessNever":"هەرگیز","accessSameDomain":"هەمان دۆمەین","alignAbsBottom":"له ژێرەوه","alignAbsMiddle":"لەناوەند","alignBaseline":"هێڵەبنەڕەت","alignTextTop":"دەق لەسەرەوه","bgcolor":"Ú•Û•Ù†Ú¯ÛŒ پاشبنەما","chkFull":"ڕێپێدان بە Ù¾Ú•ÛŒ شاشه","chkLoop":"گرێ","chkMenu":"چالاککردنی لیستەی Ùلاش","chkPlay":"پێکردنی یان لێدانی خۆکار","flashvars":"گۆڕاوەکان بۆ Ùلاش","hSpace":"بۆشایی ئاسۆیی","properties":"خاسیەتی Ùلاش","propertiesTab":"خاسیەت","quality":"جۆرایەتی","qualityAutoHigh":"بەرزی خۆکار","qualityAutoLow":"نزمی خۆکار","qualityBest":"باشترین","qualityHigh":"بەرزی","qualityLow":"نزم","qualityMedium":"مامناوەند","scale":"پێوانه","scaleAll":"نیشاندانی هەموو","scaleFit":"بەوردی بگونجێت","scaleNoBorder":"بێ پەراوێز","title":"خاسیەتی Ùلاش","vSpace":"بۆشایی ئەستونی","validateHSpace":"بۆشایی ئاسۆیی دەبێت ژمارە بێت.","validateSrc":"ناونیشانی بەستەر نابێت خاڵی بێت","validateVSpace":"بۆشایی ئەستونی دەبێت ژماره بێت.","windowMode":"شێوازی پەنجەره","windowModeOpaque":"ناڕوون","windowModeTransparent":"ڕۆشن","windowModeWindow":"پەنجەره"},"font":{"fontSize":{"label":"گەورەیی","voiceLabel":"گەورەیی Ùۆنت","panelTitle":"گەورەیی Ùۆنت"},"label":"Ùۆنت","panelTitle":"ناوی Ùۆنت","voiceLabel":"Ùۆنت"},"forms":{"button":{"title":"خاسیەتی دوگمە","text":"(نرخی) دەق","type":"جۆر","typeBtn":"دوگمە","typeSbm":"بنێرە","typeRst":"ڕێکخستنەوە"},"checkboxAndRadio":{"checkboxTitle":"خاسیەتی چووارگۆشی پشکنین","radioTitle":"خاسیەتی جێگرەوەی دوگمە","value":"نرخ","selected":"هەڵبژاردرا"},"form":{"title":"خاسیەتی داڕشتە","menu":"خاسیەتی داڕشتە","action":"کردار","method":"Ú•ÛŽÚ¯Û•","encoding":"بەکۆدکەر"},"hidden":{"title":"خاسیەتی خانەی شاردراوە","name":"ناو","value":"نرخ"},"select":{"title":"هەڵبژاردەی خاسیەتی خانە","selectInfo":"زانیاری","opAvail":"هەڵبژاردەی لەبەردەستدابوون","value":"نرخ","size":"گەورەیی","lines":"هێڵەکان","chkMulti":"ڕێدان بەÙره هەڵبژارده","opText":"دەق","opValue":"نرخ","btnAdd":"زیادکردن","btnModify":"گۆڕانکاری","btnUp":"سەرەوه","btnDown":"خوارەوە","btnSetValue":"دابنێ ÙˆÛ•Ùƒ نرخێکی هەڵبژێردراو","btnDelete":"سڕینەوه"},"textarea":{"title":"خاسیەتی ڕووبەری دەق","cols":"ستوونەکان","rows":"ڕیزەکان"},"textfield":{"title":"خاسیەتی خانەی دەق","name":"ناو","value":"نرخ","charWidth":"پانی نووسە","maxChars":"ئەوپەڕی نووسە","type":"جۆر","typeText":"دەق","typePass":"پێپەڕەوشە","typeEmail":"ئیمەیل","typeSearch":"گەڕان","typeTel":"ژمارەی تەلەÙÛ†Ù†","typeUrl":"ناونیشانی بەستەر"}},"format":{"label":"ڕازاندنەوە","panelTitle":"بەشی ڕازاندنەوه","tag_address":"ناونیشان","tag_div":"(DIV)-ÛŒ ئاسایی","tag_h1":"سەرنووسەی Ù¡","tag_h2":"سەرنووسەی Ù¢","tag_h3":"سەرنووسەی Ù£","tag_h4":"سەرنووسەی Ù¤","tag_h5":"سەرنووسەی Ù¥","tag_h6":"سەرنووسەی Ù¦","tag_p":"ئاسایی","tag_pre":"شێوازکراو"},"horizontalrule":{"toolbar":"دانانی Ù‡ÛŽÙ„ÛŒ ئاسۆیی"},"iframe":{"border":"نیشاندانی لاکێشه بە چوواردەوری چووارچێوە","noUrl":"تکایه ناونیشانی بەستەر بنووسه بۆ چووارچێوه","scrolling":"چالاککردنی هاتووچۆپێکردن","title":"دیالۆگی چووارچێوه","toolbar":"چووارچێوه"},"image":{"alertUrl":"تکایه ناونیشانی بەستەری وێنه بنووسه","alt":"جێگرەوەی دەق","border":"پەراوێز","btnUpload":"ناردنی بۆ ڕاژه","button2Img":"تۆ دەتەوێت دوگمەی ÙˆÛŽÙ†Û•ÛŒ دیاریکراو بگۆڕیت بۆ وێنەیەکی ئاسایی؟","hSpace":"بۆشایی ئاسۆیی","img2Button":"تۆ دەتەوێت ÙˆÛŽÙ†Û•ÛŒ دیاریکراو بگۆڕیت بۆ دوگمەی وێنه؟","infoTab":"زانیاری وێنه","linkTab":"بەستەر","lockRatio":"داخستنی Ú•ÛŽÚ˜Ù‡","menu":"خاسیەتی وێنه","resetSize":"ڕێکخستنەوەی قەباره","title":"خاسیەتی وێنه","titleButton":"خاسیەتی دوگمەی وێنه","upload":"بارکردن","urlMissing":"سەرچاوەی بەستەری وێنه بزره","vSpace":"بۆشایی ئەستونی","validateBorder":"پەراوێز دەبێت بەتەواوی تەنها ژماره بێت.","validateHSpace":"بۆشایی ئاسۆیی دەبێت بەتەواوی تەنها ژمارە بێت.","validateVSpace":"بۆشایی ئەستونی دەبێت بەتەواوی تەنها ژماره بێت."},"indent":{"indent":"زیادکردنی بۆشایی","outdent":"کەمکردنەوەی بۆشایی"},"smiley":{"options":"هەڵبژاردەی زەردەخەنه","title":"دانانی زەردەخەنەیەك","toolbar":"زەردەخەنه"},"justify":{"block":"هاوستوونی","center":"ناوەڕاست","left":"بەهێڵ کردنی Ú†Û•Ù¾","right":"بەهێڵ کردنی ڕاست"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"کلیلی دەستپێگەیشتن","advanced":"پێشکەوتوو","advisoryContentType":"جۆری ناوەڕۆکی ڕاویژکار","advisoryTitle":"ڕاوێژکاری سەردێڕ","anchor":{"toolbar":"دانان/چاکسازی لەنگەر","menu":"چاکسازی لەنگەر","title":"خاسیەتی لەنگەر","name":"ناوی لەنگەر","errorName":"تکایه ناوی لەنگەر بنووسه","remove":"لابردنی لەنگەر"},"anchorId":"بەپێی ناسنامەی توخم","anchorName":"بەپێی ناوی لەنگەر","charset":"بەستەری سەرچاوەی نووسە","cssClasses":"شێوازی چینی Ù¾Û•Ú•Ù‡","emailAddress":"ناونیشانی ئیمەیل","emailBody":"ناوەڕۆکی نامە","emailSubject":"بابەتی نامە","id":"ناسنامە","info":"زانیاری بەستەر","langCode":"هێمای زمان","langDir":"ئاراستەی زمان","langDirLTR":"Ú†Û•Ù¾ بۆ ڕاست (LTR)","langDirRTL":"ڕاست بۆ Ú†Û•Ù¾ (RTL)","menu":"چاکسازی بەستەر","name":"ناو","noAnchors":"(هیچ جۆرێکی لەنگەر ئامادە نیە Ù„Û•Ù… پەڕەیه)","noEmail":"تکایە ناونیشانی ئیمەیل بنووسە","noUrl":"تکایە ناونیشانی بەستەر بنووسە","other":"<هیتر>","popupDependent":"پێوەبەستراو (Netscape)","popupFeatures":"خاسیەتی پەنجەرەی سەرهەڵدەر","popupFullScreen":"Ù¾Ú• بەپڕی شاشە (IE)","popupLeft":"جێگای Ú†Û•Ù¾","popupLocationBar":"Ù‡ÛŽÚµÛŒ ناونیشانی بەستەر","popupMenuBar":"Ù‡ÛŽÚµÛŒ لیسته","popupResizable":"توانای گۆڕینی قەباره","popupScrollBars":"Ù‡ÛŽÚµÛŒ هاتووچۆپێکردن","popupStatusBar":"Ù‡ÛŽÚµÛŒ دۆخ","popupToolbar":"Ù‡ÛŽÚµÛŒ تووڵامراز","popupTop":"جێگای سەرەوە","rel":"پەیوەندی","selectAnchor":"هەڵبژاردنی لەنگەرێك","styles":"شێواز","tabIndex":"بازدەری تابی ئیندێکس","target":"ئامانج","targetFrame":"<چووارچێوە>","targetFrameName":"ناوی ئامانجی چووارچێوە","targetPopup":"<پەنجەرەی سەرهەڵدەر>","targetPopupName":"ناوی پەنجەرەی سەرهەڵدەر","title":"بەستەر","toAnchor":"بەستەر بۆ لەنگەر له دەق","toEmail":"ئیمەیل","toUrl":"ناونیشانی بەستەر","toolbar":"دانان/ڕێکخستنی بەستەر","type":"جۆری بەستەر","unlink":"لابردنی بەستەر","upload":"بارکردن"},"list":{"bulletedlist":"دانان/لابردنی خاڵی لیست","numberedlist":"دانان/لابردنی ژمارەی لیست"},"liststyle":{"armenian":"ئاراستەی ژمارەی ئەرمەنی","bulletedTitle":"خاسیەتی لیستی خاڵی","circle":"بازنه","decimal":"ژمارە (1, 2, 3, ÙˆÛ• هیتر.)","decimalLeadingZero":"ژمارە سÙÚ•ÛŒ لەپێشەوه (01, 02, 03, ÙˆÛ• هیتر.)","disc":"Ù¾Û•Ù¾Ú©Û•","georgian":"ئاراستەی ژمارەی جۆڕجی (an, ban, gan, ÙˆÛ• هیتر.)","lowerAlpha":"ئەلÙابێی بچووك (a, b, c, d, e, ÙˆÛ• هیتر.)","lowerGreek":"یۆنانی بچووك (alpha, beta, gamma, ÙˆÛ• هیتر.)","lowerRoman":"ژمارەی Ú•Û†Ù…ÛŒ بچووك (i, ii, iii, iv, v, ÙˆÛ• هیتر.)","none":"هیچ","notset":"<دانەندراوه>","numberedTitle":"خاسیەتی لیستی ژمارەیی","square":"چووراگۆشە","start":"دەستپێکردن","type":"جۆر","upperAlpha":"ئەلÙابێی گەوره (A, B, C, D, E, ÙˆÛ• هیتر.)","upperRoman":"ژمارەی Ú•Û†Ù…ÛŒ گەوره (I, II, III, IV, V, ÙˆÛ• هیتر.)","validateStartNumber":"دەستپێکەری لیستی ژمارەیی دەبێت تەنها ژمارە بێت."},"magicline":{"title":"بڕگە لێرە دابنێ"},"maximize":{"maximize":"ئەوپەڕی گەورەیی","minimize":"ئەوپەڕی بچووکی"},"newpage":{"toolbar":"پەڕەیەکی نوێ"},"pagebreak":{"alt":"پشووی Ù¾Û•Ú•Û•","toolbar":"دانانی پشووی Ù¾Û•Ú•Û• بۆ چاپکردن"},"pastetext":{"button":"لکاندنی ÙˆÛ•Ùƒ دەقی ڕوون","title":"لکاندنی ÙˆÛ•Ùƒ دەقی ڕوون"},"pastefromword":{"confirmCleanup":"ئەم دەقەی بەتەمای بیلکێنی پێدەچێت له word هێنرابێت. دەتەوێت پاکی بکەیوه Ù¾ÛŽØ´ ئەوەی بیلکێنی؟","error":"هیچ ڕێگەیەك نەبوو لەلکاندنی دەقەکه بەهۆی هەڵەیەکی ناوەخۆیی","title":"لکاندنی لەلایەن Word","toolbar":"لکاندنی Ù„Û•Ú•ÛŽÛŒ Word"},"preview":{"preview":"پێشبینین"},"print":{"toolbar":"چاپکردن"},"removeformat":{"toolbar":"لابردنی داڕشتەکە"},"save":{"toolbar":"پاشکەوتکردن"},"selectall":{"toolbar":"دیاریکردنی هەمووی"},"showblocks":{"toolbar":"نیشاندانی بەربەستەکان"},"sourcearea":{"toolbar":"سەرچاوە"},"specialchar":{"options":"هەڵبژاردەی نووسەی تایبەتی","title":"هەڵبژاردنی نووسەی تایبەتی","toolbar":"دانانی نووسەی تایبەتی"},"scayt":{"btn_about":"دهربارهی SCAYT","btn_dictionaries":"Ùهرههنگهکان","btn_disable":"ناچالاککردنی SCAYT","btn_enable":"چالاککردنی SCAYT","btn_langs":"زمانهکان","btn_options":"ههڵبژارده","text_title":""},"stylescombo":{"label":"شێواز","panelTitle":"شێوازی ڕازاندنەوە","panelTitle1":"شێوازی خشت","panelTitle2":"شێوازی ناوهێڵ","panelTitle3":"شێوازی بەرکار"},"table":{"border":"گەورەیی پەراوێز","caption":"سەردێڕ","cell":{"menu":"خانه","insertBefore":"دانانی خانه Ù„Û•Ù¾ÛŽØ´","insertAfter":"دانانی خانه لەپاش","deleteCell":"سڕینەوەی خانه","merge":"تێکەڵکردنی خانە","mergeRight":"تێکەڵکردنی Ù„Û•Ú¯Û•Úµ ڕاست","mergeDown":"تێکەڵکردنی Ù„Û•Ú¯Û•Úµ خوارەوە","splitHorizontal":"دابەشکردنی خانەی ئاسۆیی","splitVertical":"دابەشکردنی خانەی ئەستونی","title":"خاسیەتی خانه","cellType":"جۆری خانه","rowSpan":"ماوەی نێوان ڕیز","colSpan":"بستی ئەستونی","wordWrap":"پێچانەوەی وشە","hAlign":"ڕیزکردنی ئاسۆیی","vAlign":"ڕیزکردنی ئەستونی","alignBaseline":"هێڵەبنەڕەت","bgColor":"Ú•Û•Ù†Ú¯ÛŒ پاشبنەما","borderColor":"Ú•Û•Ù†Ú¯ÛŒ پەراوێز","data":"داتا","header":"سەرپەڕه","yes":"بەڵێ","no":"نەخێر","invalidWidth":"پانی خانه دەبێت بەتەواوی ژماره بێت.","invalidHeight":"درێژی خانه بەتەواوی دەبێت ژمارە بێت.","invalidRowSpan":"ماوەی نێوان ڕیز بەتەواوی دەبێت ژمارە بێت.","invalidColSpan":"ماوەی نێوان ئەستونی بەتەواوی دەبێت ژمارە بێت.","chooseColor":"هەڵبژێرە"},"cellPad":"بۆشایی ناوپۆش","cellSpace":"بۆشایی خانه","column":{"menu":"ئەستون","insertBefore":"دانانی ئەستون Ù„Û•Ù¾ÛŽØ´","insertAfter":"دانانی ئەستوون لەپاش","deleteColumn":"سڕینەوەی ئەستوون"},"columns":"ستوونەکان","deleteTable":"سڕینەوەی خشتە","headers":"سەرپەڕه","headersBoth":"هەردووك","headersColumn":"یەکەم ئەستوون","headersNone":"هیچ","headersRow":"یەکەم ڕیز","invalidBorder":"ژمارەی پەراوێز دەبێت تەنها ژماره بێت.","invalidCellPadding":"ناوپۆشی خانه دەبێت ژمارەکی درووست بێت.","invalidCellSpacing":"بۆشایی خانه دەبێت ژمارەکی درووست بێت.","invalidCols":"ژمارەی ئەستوونی دەبێت گەورەتر بێت لەژمارەی 0.","invalidHeight":"درێژی خشته دهبێت تهنها ژماره بێت.","invalidRows":"ژمارەی ڕیز دەبێت گەورەتر بێت لەژمارەی 0.","invalidWidth":"پانی خشته دەبێت تەنها ژماره بێت.","menu":"خاسیەتی خشتە","row":{"menu":"ڕیز","insertBefore":"دانانی ڕیز Ù„Û•Ù¾ÛŽØ´","insertAfter":"دانانی ڕیز لەپاش","deleteRow":"سڕینەوەی ڕیز"},"rows":"ڕیز","summary":"کورتە","title":"خاسیەتی خشتە","toolbar":"خشتە","widthPc":"لەسەدا","widthPx":"وێنەخاڵ - پیکسل","widthUnit":"پانی یەکە"},"undo":{"redo":"هەڵگەڕاندنەوە","undo":"پووچکردنەوە"},"wsc":{"btnIgnore":"پشتگوێ کردن","btnIgnoreAll":"پشتگوێکردنی ههمووی","btnReplace":"لهبریدانن","btnReplaceAll":"لهبریدانانی ههمووی","btnUndo":"پووچکردنهوه","changeTo":"گۆڕینی بۆ","errorLoading":"ههڵه لههێنانی داخوازینامهی خانهخۆێی ڕاژه: %s.","ieSpellDownload":"پشکنینی ڕێنووس دانهمزراوه. دهتهوێت ئێستا دایبگریت?","manyChanges":"پشکنینی ڕێنووس کۆتای هات: لهسهدا %1 ÛŒ وشهکان گۆڕدرا","noChanges":"پشکنینی ڕێنووس کۆتای هات: هیچ وشهیهك نۆگۆڕدرا","noMispell":"پشکنینی ڕێنووس کۆتای هات: هیچ ههڵهیهکی ڕێنووس نهدۆزراوه","noSuggestions":"- هیچ پێشنیارێك -","notAvailable":"ببووره، لهمکاتهدا ڕاژهکه لهبهردهستا نیه.","notInDic":"لهÙهرههنگ دانیه","oneChange":"پشکنینی ڕێنووس کۆتای هات: یهك وشه گۆڕدرا","progress":"پشکنینی ڕێنووس لهبهردهوامبوون دایه...","title":"پشکنینی ڕێنووس","toolbar":"پشکنینی ڕێنووس"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/lt.js b/wqflask/wqflask/static/packages/ckeditor/lang/lt.js
deleted file mode 100644
index d0703895..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/lt.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['lt']={"editor":"Pilnas redaktorius","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Spauskite ALT 0 dÄ—l pagalbos","browseServer":"NarÅ¡yti po serverį","url":"URL","protocol":"Protokolas","upload":"Siųsti","uploadSubmit":"Siųsti į serverį","image":"Vaizdas","flash":"Flash","form":"Forma","checkbox":"Žymimasis langelis","radio":"Žymimoji akutÄ—","textField":"Teksto laukas","textarea":"Teksto sritis","hiddenField":"Nerodomas laukas","button":"Mygtukas","select":"Atrankos laukas","imageButton":"Vaizdinis mygtukas","notSet":"<nÄ—ra nustatyta>","id":"Id","name":"Vardas","langDir":"Teksto kryptis","langDirLtr":"IÅ¡ kairÄ—s į deÅ¡inÄ™ (LTR)","langDirRtl":"IÅ¡ deÅ¡inÄ—s į kairÄ™ (RTL)","langCode":"Kalbos kodas","longDescr":"Ilgas apraÅ¡ymas URL","cssClass":"Stilių lentelÄ—s klasÄ—s","advisoryTitle":"KonsultacinÄ— antraÅ¡tÄ—","cssStyle":"Stilius","ok":"OK","cancel":"Nutraukti","close":"Uždaryti","preview":"PeržiÅ«rÄ—ti","resize":"Pavilkite, kad pakeistumÄ—te dydį","generalTab":"Bendros savybÄ—s","advancedTab":"Papildomas","validateNumberFailed":"Å i reikÅ¡mÄ— nÄ—ra skaiÄius.","confirmNewPage":"Visas neiÅ¡saugotas turinys bus prarastas. Ar tikrai norite įkrauti naujÄ… puslapį?","confirmCancel":"Kai kurie parametrai pasikeitÄ—. Ar tikrai norite užverti langÄ…?","options":"Parametrai","target":"TikslinÄ— nuoroda","targetNew":"Naujas langas (_blank)","targetTop":"VirÅ¡utinis langas (_top)","targetSelf":"Esamas langas (_self)","targetParent":"Paskutinis langas (_parent)","langDirLTR":"IÅ¡ kairÄ—s į deÅ¡inÄ™ (LTR)","langDirRTL":"IÅ¡ deÅ¡inÄ—s į kairÄ™ (RTL)","styles":"Stilius","cssClasses":"Stilių klasÄ—s","width":"Plotis","height":"AukÅ¡tis","align":"Lygiuoti","alignLeft":"KairÄ™","alignRight":"DeÅ¡inÄ™","alignCenter":"CentrÄ…","alignJustify":"Lygiuoti abi puses","alignTop":"VirÅ¡Å«nÄ™","alignMiddle":"Vidurį","alignBottom":"ApaÄiÄ…","alignNone":"None","invalidValue":"Neteisinga reikÅ¡mÄ—.","invalidHeight":"AukÅ¡tis turi bÅ«ti nurodytas skaiÄiais.","invalidWidth":"Plotis turi bÅ«ti nurodytas skaiÄiais.","invalidCssLength":"ReikÅ¡mÄ— nurodyta \"%1\" laukui, turi bÅ«ti teigiamas skaiÄius su arba be tinkamo CSS matavimo vieneto (px, %, in, cm, mm, em, ex, pt arba pc).","invalidHtmlLength":"ReikÅ¡mÄ— nurodyta \"%1\" laukui, turi bÅ«ti teigiamas skaiÄius su arba be tinkamo HTML matavimo vieneto (px arba %).","invalidInlineStyle":"ReikÅ¡mÄ— nurodyta vidiniame stiliuje turi bÅ«ti sudaryta iÅ¡ vieno Å¡ių reikÅ¡mių \"vardas : reikÅ¡mÄ—\", atskirta kabliataÅ¡kiais.","cssLengthTooltip":"Ä®veskite reikÅ¡mÄ™ pikseliais arba skaiÄiais su tinkamu CSS vienetu (px, %, in, cm, mm, em, ex, pt arba pc).","unavailable":"%1<span class=\"cke_accessibility\">, netinkamas</span>"},"about":{"copy":"Copyright &copy; $1. Visos teiss saugomos.","dlgTitle":"Apie CKEditor","help":"Patikrinkite $1 dÄ—l pagalbos.","moreInfo":"DÄ—l licencijavimo apsilankykite mÅ«sų svetainÄ—je:","title":"Apie CKEditor","userGuide":"CKEditor Vartotojo Gidas"},"basicstyles":{"bold":"Pusjuodis","italic":"Kursyvas","strike":"Perbrauktas","subscript":"Apatinis indeksas","superscript":"VirÅ¡utinis indeksas","underline":"Pabrauktas"},"bidi":{"ltr":"Tekstas iÅ¡ kairÄ—s į deÅ¡inÄ™","rtl":"Tekstas iÅ¡ deÅ¡inÄ—s į kairÄ™"},"blockquote":{"toolbar":"Citata"},"clipboard":{"copy":"Kopijuoti","copyError":"JÅ«sų narÅ¡yklÄ—s saugumo nustatymai neleidžia redaktoriui automatiÅ¡kai įvykdyti kopijavimo operacijų. Tam praÅ¡ome naudoti klaviatÅ«rÄ… (Ctrl/Cmd+C).","cut":"IÅ¡kirpti","cutError":"JÅ«sų narÅ¡yklÄ—s saugumo nustatymai neleidžia redaktoriui automatiÅ¡kai įvykdyti iÅ¡kirpimo operacijų. Tam praÅ¡ome naudoti klaviatÅ«rÄ… (Ctrl/Cmd+X).","paste":"Ä®dÄ—ti","pasteArea":"Ä®kelti dalį","pasteMsg":"Žemiau esanÄiame įvedimo lauke įdÄ—kite tekstÄ…, naudodami klaviatÅ«rÄ… (<STRONG>Ctrl/Cmd+V</STRONG>) ir paspauskite mygtukÄ… <STRONG>OK</STRONG>.","securityMsg":"DÄ—l jÅ«sų narÅ¡yklÄ—s saugumo nustatymų, redaktorius negali tiesiogiai pasiekti laikinosios atminties. Jums reikia nukopijuoti dar kartÄ… į šį langÄ….","title":"Ä®dÄ—ti"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatinis","bgColorTitle":"Fono spalva","colors":{"000":"Juoda","800000":"KaÅ¡toninÄ—","8B4513":"Tamsiai ruda","2F4F4F":"Pilka tamsaus Å¡iferio","008080":"Teal","000080":"Karinis","4B0082":"Indigo","696969":"Tamsiai pilka","B22222":"Ugnies","A52A2A":"Ruda","DAA520":"Aukso","006400":"Tamsiai žalia","40E0D0":"Turquoise","0000CD":"VidutinÄ— mÄ—lyna","800080":"VioletinÄ—","808080":"Pilka","F00":"Raudona","FF8C00":"Tamsiai oranžinÄ—","FFD700":"AuksinÄ—","008000":"Žalia","0FF":"Žydra","00F":"MÄ—lyna","EE82EE":"VioletinÄ—","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"OranžinÄ—","FFFF00":"Geltona","00FF00":"Citrinų","AFEEEE":"Pale Turquoise","ADD8E6":"Å viesiai mÄ—lyna","DDA0DD":"Plum","D3D3D3":"Å viesiai pilka","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Å viesiai geltona","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"Balta"},"more":"Daugiau spalvų...","panelTitle":"Spalva","textColorTitle":"Teksto spalva"},"colordialog":{"clear":"IÅ¡valyti","highlight":"ParyÅ¡kinti","options":"Spalvos nustatymai","selected":"Pasirinkta spalva","title":"Pasirinkite spalvÄ…"},"templates":{"button":"Å ablonai","emptyListMsg":"(Å ablonų sÄ…raÅ¡as tuÅ¡Äias)","insertOption":"Pakeisti dabartinį turinį pasirinktu Å¡ablonu","options":"Template Options","selectPromptMsg":"Pasirinkite norimÄ… Å¡ablonÄ…<br>(<b>DÄ—mesio!</b> esamas turinys bus prarastas):","title":"Turinio Å¡ablonai"},"contextmenu":{"options":"Kontekstinio meniu parametrai"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Patariamas pavadinimas","cssClassInputLabel":"Stilių klasÄ—s","edit":"Redaguoti Div","inlineStyleInputLabel":"Vidiniai stiliai","langDirLTRLabel":"IÅ¡ kairÄ—s į deÅ¡inÄ™ (LTR)","langDirLabel":"Kalbos nurodymai","langDirRTLLabel":"IÅ¡ deÅ¡inÄ—s į kairÄ™ (RTL)","languageCodeInputLabel":" Kalbos kodas","remove":"PaÅ¡alinti Div","styleSelectLabel":"Stilius","title":"Sukurti Div elementÄ…","toolbar":"Sukurti Div elementÄ…"},"toolbar":{"toolbarCollapse":"Apjungti įrankių juostÄ…","toolbarExpand":"IÅ¡plÄ—sti įrankių juostÄ…","toolbarGroups":{"document":"Dokumentas","clipboard":"AtmintinÄ—/Atgal","editing":"Redagavimas","forms":"Formos","basicstyles":"Pagrindiniai stiliai","paragraph":"Paragrafas","links":"Nuorodos","insert":"Ä®terpti","styles":"Stiliai","colors":"Spalvos","tools":"Ä®rankiai"},"toolbars":"Redaktoriaus įrankiai"},"elementspath":{"eleLabel":"Elemento kelias","eleTitle":"%1 elementas"},"find":{"find":"Rasti","findOptions":"PaieÅ¡kos nustatymai","findWhat":"Surasti tekstÄ…:","matchCase":"Skirti didžiÄ…sias ir mažąsias raides","matchCyclic":"Sutampantis cikliÅ¡kumas","matchWord":"Atitikti pilnÄ… žodį","notFoundMsg":"Nurodytas tekstas nerastas.","replace":"Pakeisti","replaceAll":"Pakeisti viskÄ…","replaceSuccessMsg":"%1 sutapimas(ų) buvo pakeisti.","replaceWith":"Pakeisti tekstu:","title":"Surasti ir pakeisti"},"fakeobjects":{"anchor":"ŽymÄ—","flash":"Flash animacija","hiddenfield":"PaslÄ—ptas laukas","iframe":"IFrame","unknown":"Nežinomas objektas"},"flash":{"access":"Skripto priÄ—jimas","accessAlways":"Visada","accessNever":"Niekada","accessSameDomain":"Tas pats domenas","alignAbsBottom":"AbsoliuÄiÄ… apaÄiÄ…","alignAbsMiddle":"Absoliutų vidurį","alignBaseline":"ApatinÄ™ linijÄ…","alignTextTop":"Teksto virÅ¡Å«nÄ™","bgcolor":"Fono spalva","chkFull":"Leisti per visÄ… ekranÄ…","chkLoop":"Ciklas","chkMenu":"Leisti Flash meniu","chkPlay":"Automatinis paleidimas","flashvars":"Flash kintamieji","hSpace":"Hor.ErdvÄ—","properties":"Flash savybÄ—s","propertiesTab":"Nustatymai","quality":"KokybÄ—","qualityAutoHigh":"AutomatiÅ¡kai Gera","qualityAutoLow":"AutomatiÅ¡kai Žema","qualityBest":"Geriausia","qualityHigh":"Gera","qualityLow":"Žema","qualityMedium":"VidutinÄ—","scale":"Mastelis","scaleAll":"Rodyti visÄ…","scaleFit":"Tikslus atitikimas","scaleNoBorder":"Be rÄ—melio","title":"Flash savybÄ—s","vSpace":"Vert.ErdvÄ—","validateHSpace":"HSpace turi bÅ«ti skaiÄius.","validateSrc":"PraÅ¡ome įvesti nuorodos URL","validateVSpace":"VSpace turi bÅ«ti skaiÄius.","windowMode":"Lango režimas","windowModeOpaque":"Nepermatomas","windowModeTransparent":"Permatomas","windowModeWindow":"Langas"},"font":{"fontSize":{"label":"Å rifto dydis","voiceLabel":"Å rifto dydis","panelTitle":"Å rifto dydis"},"label":"Å riftas","panelTitle":"Å riftas","voiceLabel":"Å riftas"},"forms":{"button":{"title":"Mygtuko savybÄ—s","text":"Tekstas (ReikÅ¡mÄ—)","type":"Tipas","typeBtn":"Mygtukas","typeSbm":"Siųsti","typeRst":"IÅ¡valyti"},"checkboxAndRadio":{"checkboxTitle":"Žymimojo langelio savybÄ—s","radioTitle":"Žymimosios akutÄ—s savybÄ—s","value":"ReikÅ¡mÄ—","selected":"PažymÄ—tas"},"form":{"title":"Formos savybÄ—s","menu":"Formos savybÄ—s","action":"Veiksmas","method":"Metodas","encoding":"Kodavimas"},"hidden":{"title":"Nerodomo lauko savybÄ—s","name":"Vardas","value":"ReikÅ¡mÄ—"},"select":{"title":"Atrankos lauko savybÄ—s","selectInfo":"Informacija","opAvail":"Galimos parinktys","value":"ReikÅ¡mÄ—","size":"Dydis","lines":"eiluÄių","chkMulti":"Leisti daugeriopÄ… atrankÄ…","opText":"Tekstas","opValue":"ReikÅ¡mÄ—","btnAdd":"Ä®traukti","btnModify":"Modifikuoti","btnUp":"AukÅ¡tyn","btnDown":"Žemyn","btnSetValue":"Laikyti pažymÄ—ta reikÅ¡me","btnDelete":"Trinti"},"textarea":{"title":"Teksto srities savybÄ—s","cols":"Ilgis","rows":"Plotis"},"textfield":{"title":"Teksto lauko savybÄ—s","name":"Vardas","value":"ReikÅ¡mÄ—","charWidth":"Ilgis simboliais","maxChars":"Maksimalus simbolių skaiÄius","type":"Tipas","typeText":"Tekstas","typePass":"Slaptažodis","typeEmail":"El. paÅ¡tas","typeSearch":"PaieÅ¡ka","typeTel":"Telefono numeris","typeUrl":"Nuoroda"}},"format":{"label":"Å rifto formatas","panelTitle":"Å rifto formatas","tag_address":"Kreipinio","tag_div":"Normalus (DIV)","tag_h1":"AntraÅ¡tinis 1","tag_h2":"AntraÅ¡tinis 2","tag_h3":"AntraÅ¡tinis 3","tag_h4":"AntraÅ¡tinis 4","tag_h5":"AntraÅ¡tinis 5","tag_h6":"AntraÅ¡tinis 6","tag_p":"Normalus","tag_pre":"Formuotas"},"horizontalrule":{"toolbar":"Ä®terpti horizontaliÄ… linijÄ…"},"iframe":{"border":"Rodyti rÄ—melį","noUrl":"Nurodykite iframe nuorodÄ…","scrolling":"Ä®jungti slankiklius","title":"IFrame nustatymai","toolbar":"IFrame"},"image":{"alertUrl":"PraÅ¡ome įvesti vaizdo URL","alt":"Alternatyvus Tekstas","border":"RÄ—melis","btnUpload":"Siųsti į serverį","button2Img":"Ar norite mygtukÄ… paversti paprastu paveiksliuku?","hSpace":"Hor.ErdvÄ—","img2Button":"Ar norite paveiksliukÄ… paversti mygtuku?","infoTab":"Vaizdo informacija","linkTab":"Nuoroda","lockRatio":"IÅ¡laikyti proporcijÄ…","menu":"Vaizdo savybÄ—s","resetSize":"Atstatyti dydį","title":"Vaizdo savybÄ—s","titleButton":"Vaizdinio mygtuko savybÄ—s","upload":"Nusiųsti","urlMissing":"Paveiksliuko nuorodos nÄ—ra.","vSpace":"Vert.ErdvÄ—","validateBorder":"ReikÅ¡mÄ— turi bÅ«ti sveikas skaiÄius.","validateHSpace":"ReikÅ¡mÄ— turi bÅ«ti sveikas skaiÄius.","validateVSpace":"ReikÅ¡mÄ— turi bÅ«ti sveikas skaiÄius."},"indent":{"indent":"Padidinti įtraukÄ…","outdent":"Sumažinti įtraukÄ…"},"smiley":{"options":"Å ypsenÄ—lių nustatymai","title":"Ä®terpti veidelį","toolbar":"Veideliai"},"justify":{"block":"Lygiuoti abi puses","center":"Centruoti","left":"Lygiuoti kairÄ™","right":"Lygiuoti deÅ¡inÄ™"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Prieigos raktas","advanced":"Papildomas","advisoryContentType":"Konsultacinio turinio tipas","advisoryTitle":"KonsultacinÄ— antraÅ¡tÄ—","anchor":{"toolbar":"Ä®terpti/modifikuoti žymÄ™","menu":"ŽymÄ—s savybÄ—s","title":"ŽymÄ—s savybÄ—s","name":"ŽymÄ—s vardas","errorName":"PraÅ¡ome įvesti žymÄ—s vardÄ…","remove":"PaÅ¡alinti žymÄ™"},"anchorId":"Pagal žymÄ—s Id","anchorName":"Pagal žymÄ—s vardÄ…","charset":"Susietų iÅ¡teklių simbolių lentelÄ—","cssClasses":"Stilių lentelÄ—s klasÄ—s","emailAddress":"El.paÅ¡to adresas","emailBody":"ŽinutÄ—s turinys","emailSubject":"ŽinutÄ—s tema","id":"Id","info":"Nuorodos informacija","langCode":"Teksto kryptis","langDir":"Teksto kryptis","langDirLTR":"IÅ¡ kairÄ—s į deÅ¡inÄ™ (LTR)","langDirRTL":"IÅ¡ deÅ¡inÄ—s į kairÄ™ (RTL)","menu":"Taisyti nuorodÄ…","name":"Vardas","noAnchors":"(Å iame dokumente žymių nÄ—ra)","noEmail":"PraÅ¡ome įvesti el.paÅ¡to adresÄ…","noUrl":"PraÅ¡ome įvesti nuorodos URL","other":"<kitas>","popupDependent":"Priklausomas (Netscape)","popupFeatures":"IÅ¡skleidžiamo lango savybÄ—s","popupFullScreen":"Visas ekranas (IE)","popupLeft":"KairÄ— pozicija","popupLocationBar":"Adreso juosta","popupMenuBar":"Meniu juosta","popupResizable":"Kintamas dydis","popupScrollBars":"Slinkties juostos","popupStatusBar":"BÅ«senos juosta","popupToolbar":"Mygtukų juosta","popupTop":"VirÅ¡utinÄ— pozicija","rel":"SÄ…sajos","selectAnchor":"Pasirinkite žymÄ™","styles":"Stilius","tabIndex":"Tabuliavimo indeksas","target":"Paskirties vieta","targetFrame":"<kadras>","targetFrameName":"Paskirties kadro vardas","targetPopup":"<iÅ¡skleidžiamas langas>","targetPopupName":"Paskirties lango vardas","title":"Nuoroda","toAnchor":"ŽymÄ— Å¡iame puslapyje","toEmail":"El.paÅ¡tas","toUrl":"Nuoroda","toolbar":"Ä®terpti/taisyti nuorodÄ…","type":"Nuorodos tipas","unlink":"Panaikinti nuorodÄ…","upload":"Siųsti"},"list":{"bulletedlist":"Suženklintas sÄ…raÅ¡as","numberedlist":"Numeruotas sÄ…raÅ¡as"},"liststyle":{"armenian":"ArmÄ—niÅ¡ki skaitmenys","bulletedTitle":"Ženklelinio sÄ…raÅ¡o nustatymai","circle":"Apskritimas","decimal":"DeÅ¡imtainis (1, 2, 3, t.t)","decimalLeadingZero":"DeÅ¡imtainis su nuliu priekyje (01, 02, 03, t.t)","disc":"Diskas","georgian":"GruziniÅ¡ki skaitmenys (an, ban, gan, t.t)","lowerAlpha":"Mažosios Alpha (a, b, c, d, e, t.t)","lowerGreek":"Mažosios Graikų (alpha, beta, gamma, t.t)","lowerRoman":"Mažosios RomÄ—nų (i, ii, iii, iv, v, t.t)","none":"Niekas","notset":"<nenurodytas>","numberedTitle":"Skaitmeninio sÄ…raÅ¡o nustatymai","square":"Kvadratas","start":"Pradžia","type":"RÅ«Å¡is","upperAlpha":"Didžiosios Alpha (A, B, C, D, E, t.t)","upperRoman":"Didžiosios RomÄ—nų (I, II, III, IV, V, t.t)","validateStartNumber":"SÄ…raÅ¡o pradžios skaitmuo turi bÅ«ti sveikas skaiÄius."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"IÅ¡didinti","minimize":"Sumažinti"},"newpage":{"toolbar":"Naujas puslapis"},"pagebreak":{"alt":"Puslapio skirtukas","toolbar":"Ä®terpti puslapių skirtukÄ…"},"pastetext":{"button":"Ä®dÄ—ti kaip grynÄ… tekstÄ…","title":"Ä®dÄ—ti kaip grynÄ… tekstÄ…"},"pastefromword":{"confirmCleanup":"Tekstas, kurį įkeliate yra kopijuojamas iÅ¡ Word. Ar norite jį iÅ¡valyti prieÅ¡ įkeliant?","error":"DÄ—l vidinių sutrikimų, nepavyko iÅ¡valyti įkeliamo teksto","title":"Ä®dÄ—ti iÅ¡ Word","toolbar":"Ä®dÄ—ti iÅ¡ Word"},"preview":{"preview":"PeržiÅ«ra"},"print":{"toolbar":"Spausdinti"},"removeformat":{"toolbar":"Panaikinti formatÄ…"},"save":{"toolbar":"IÅ¡saugoti"},"selectall":{"toolbar":"PažymÄ—ti viskÄ…"},"showblocks":{"toolbar":"Rodyti blokus"},"sourcearea":{"toolbar":"Å altinis"},"specialchar":{"options":"Specialaus simbolio nustatymai","title":"Pasirinkite specialų simbolį","toolbar":"Ä®terpti specialų simbolį"},"scayt":{"btn_about":"Apie SCAYT","btn_dictionaries":"Žodynai","btn_disable":"IÅ¡jungti SCAYT","btn_enable":"Ä®jungti SCAYT","btn_langs":"Kalbos","btn_options":"Parametrai","text_title":""},"stylescombo":{"label":"Stilius","panelTitle":"Stilių formatavimas","panelTitle1":"Blokų stiliai","panelTitle2":"Vidiniai stiliai","panelTitle3":"Objektų stiliai"},"table":{"border":"RÄ—melio dydis","caption":"AntraÅ¡tÄ—","cell":{"menu":"Langelis","insertBefore":"Ä®terpti langelį prieÅ¡","insertAfter":"Ä®terpti langelį po","deleteCell":"Å alinti langelius","merge":"Sujungti langelius","mergeRight":"Sujungti su deÅ¡ine","mergeDown":"Sujungti su apaÄia","splitHorizontal":"Skaidyti langelį horizontaliai","splitVertical":"Skaidyti langelį vertikaliai","title":"Cell nustatymai","cellType":"Cell rÅ«Å¡is","rowSpan":"EiluÄių Span","colSpan":"Stulpelių Span","wordWrap":"Sutraukti raides","hAlign":"Horizontalus lygiavimas","vAlign":"Vertikalus lygiavimas","alignBaseline":"ApatinÄ— linija","bgColor":"Fono spalva","borderColor":"RÄ—melio spalva","data":"Data","header":"AntraÅ¡tÄ—","yes":"Taip","no":"Ne","invalidWidth":"ReikÅ¡mÄ— turi bÅ«ti skaiÄius.","invalidHeight":"ReikÅ¡mÄ— turi bÅ«ti skaiÄius.","invalidRowSpan":"ReikÅ¡mÄ— turi bÅ«ti skaiÄius.","invalidColSpan":"ReikÅ¡mÄ— turi bÅ«ti skaiÄius.","chooseColor":"Pasirinkite"},"cellPad":"Tarpas nuo langelio rÄ—mo iki teksto","cellSpace":"Tarpas tarp langelių","column":{"menu":"Stulpelis","insertBefore":"Ä®terpti stulpelį prieÅ¡","insertAfter":"Ä®terpti stulpelį po","deleteColumn":"Å alinti stulpelius"},"columns":"Stulpeliai","deleteTable":"Å alinti lentelÄ™","headers":"AntraÅ¡tÄ—s","headersBoth":"Abu","headersColumn":"Pirmas stulpelis","headersNone":"NÄ—ra","headersRow":"Pirma eilutÄ—","invalidBorder":"ReikÅ¡mÄ— turi bÅ«ti nurodyta skaiÄiumi.","invalidCellPadding":"ReikÅ¡mÄ— turi bÅ«ti nurodyta skaiÄiumi.","invalidCellSpacing":"ReikÅ¡mÄ— turi bÅ«ti nurodyta skaiÄiumi.","invalidCols":"SkaiÄius turi bÅ«ti didesnis nei 0.","invalidHeight":"ReikÅ¡mÄ— turi bÅ«ti nurodyta skaiÄiumi.","invalidRows":"SkaiÄius turi bÅ«ti didesnis nei 0.","invalidWidth":"ReikÅ¡mÄ— turi bÅ«ti nurodyta skaiÄiumi.","menu":"LentelÄ—s savybÄ—s","row":{"menu":"EilutÄ—","insertBefore":"Ä®terpti eilutÄ™ prieÅ¡","insertAfter":"Ä®terpti eilutÄ™ po","deleteRow":"Å alinti eilutes"},"rows":"EilutÄ—s","summary":"Santrauka","title":"LentelÄ—s savybÄ—s","toolbar":"LentelÄ—","widthPc":"procentais","widthPx":"taÅ¡kais","widthUnit":"ploÄio vienetas"},"undo":{"redo":"Atstatyti","undo":"AtÅ¡aukti"},"wsc":{"btnIgnore":"Ignoruoti","btnIgnoreAll":"Ignoruoti visus","btnReplace":"Pakeisti","btnReplaceAll":"Pakeisti visus","btnUndo":"AtÅ¡aukti","changeTo":"Pakeisti į","errorLoading":"Klaida įkraunant servisÄ…: %s.","ieSpellDownload":"RaÅ¡ybos tikrinimas neinstaliuotas. Ar JÅ«s norite jį dabar atsisiųsti?","manyChanges":"RaÅ¡ybos tikrinimas baigtas: Pakeista %1 žodžių","noChanges":"RaÅ¡ybos tikrinimas baigtas: NÄ—ra pakeistų žodžių","noMispell":"RaÅ¡ybos tikrinimas baigtas: Nerasta raÅ¡ybos klaidų","noSuggestions":"- NÄ—ra pasiÅ«lymų -","notAvailable":"Atleiskite, Å¡iuo metu servisas neprieinamas.","notInDic":"Žodyne nerastas","oneChange":"RaÅ¡ybos tikrinimas baigtas: Vienas žodis pakeistas","progress":"Vyksta raÅ¡ybos tikrinimas...","title":"Tikrinti klaidas","toolbar":"RaÅ¡ybos tikrinimas"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/lv.js b/wqflask/wqflask/static/packages/ckeditor/lang/lv.js
deleted file mode 100644
index d9bbcead..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/lv.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['lv']={"editor":"BagÄtinÄtÄ teksta redaktors","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"PalÄ«dzÄ«bai, nospiediet ALT 0 ","browseServer":"SkatÄ«t servera saturu","url":"URL","protocol":"Protokols","upload":"AugÅ¡upielÄdÄ“t","uploadSubmit":"NosÅ«tÄ«t serverim","image":"AttÄ“ls","flash":"Flash","form":"Forma","checkbox":"AtzÄ«mÄ“Å¡anas kastÄ«te","radio":"IzvÄ“les poga","textField":"Teksta rinda","textarea":"Teksta laukums","hiddenField":"PaslÄ“pta teksta rinda","button":"Poga","select":"IezÄ«mÄ“Å¡anas lauks","imageButton":"AttÄ“lpoga","notSet":"<nav iestatÄ«ts>","id":"Id","name":"Nosaukums","langDir":"Valodas lasÄ«Å¡anas virziens","langDirLtr":"No kreisÄs uz labo (LTR)","langDirRtl":"No labÄs uz kreiso (RTL)","langCode":"Valodas kods","longDescr":"Gara apraksta Hipersaite","cssClass":"Stilu saraksta klases","advisoryTitle":"KonsultatÄ«vs virsraksts","cssStyle":"Stils","ok":"DarÄ«ts!","cancel":"Atcelt","close":"AizvÄ“rt","preview":"PriekÅ¡skatÄ«jums","resize":"MÄ“rogot","generalTab":"VispÄrÄ«gi","advancedTab":"IzvÄ“rstais","validateNumberFailed":"Å Ä« vÄ“rtÄ«ba nav skaitlis","confirmNewPage":"Jebkuras nesaglabÄtÄs izmaiņas tiks zaudÄ“tas. Vai tieÅ¡Äm vÄ“laties atvÄ“rt jaunu lapu?","confirmCancel":"Daži no uzstÄdÄ«jumiem ir mainÄ«ti. Vai tieÅ¡Äm vÄ“laties aizvÄ“rt Å¡o dialogu?","options":"UzstÄdÄ«jumi","target":"MÄ“rÄ·is","targetNew":"Jauns logs (_blank)","targetTop":"VirsÄ“jais logs (_top)","targetSelf":"Tas pats logs (_self)","targetParent":"Avota logs (_parent)","langDirLTR":"Kreisais uz Labo (LTR)","langDirRTL":"Labais uz Kreiso (RTL)","styles":"Stils","cssClasses":"Stilu klases","width":"Platums","height":"Augstums","align":"NolÄ«dzinÄt","alignLeft":"Pa kreisi","alignRight":"Pa labi","alignCenter":"CentrÄ“ti","alignJustify":"IzlÄ«dzinÄt malas","alignTop":"AugÅ¡Ä","alignMiddle":"VertikÄli centrÄ“ts","alignBottom":"ApakÅ¡Ä","alignNone":"None","invalidValue":"Nekorekta vÄ“rtÄ«ba","invalidHeight":"Augstumam jÄbÅ«t skaitlim.","invalidWidth":"Platumam jÄbÅ«t skaitlim","invalidCssLength":"Laukam \"%1\" norÄdÄ«tajai vÄ“rtÄ«bai jÄbÅ«t pozitÄ«vam skaitlim ar vai bez korektÄm CSS mÄ“rvienÄ«bÄm (px, %, in, cm, mm, em, ex, pt, vai pc).","invalidHtmlLength":"Laukam \"%1\" norÄdÄ«tajai vÄ“rtÄ«bai jÄbÅ«t pozitÄ«vam skaitlim ar vai bez korektÄm HTML mÄ“rvienÄ«bÄm (px vai %).","invalidInlineStyle":"IekļautajÄ stilÄ norÄdÄ«tajai vÄ“rtÄ«bai jÄsastÄv no viena vai vairÄkiem pÄriem pÄ“c forma'ta \"nosaukums: vÄ“rtÄ«ba\", atdalÄ«tiem ar semikolu.","cssLengthTooltip":"Ievadiet vÄ“rtÄ«bu pikseļos vai skaitli ar derÄ«gu CSS mÄ“rvienÄ«bu (px, %, in, cm, mm, em, ex, pt, vai pc).","unavailable":"%1<span class=\"cke_accessibility\">, nav pieejams</span>"},"about":{"copy":"KopÄ“Å¡anas tiesÄ«bas &copy; $1. Visas tiesÄ«bas rezervÄ“tas.","dlgTitle":"Par CKEditor","help":"PÄrbaudiet $1 palÄ«dzÄ«bai.","moreInfo":"InformÄcijai par licenzÄ“Å¡anu apmeklÄ“jiet mÅ«su mÄjas lapu:","title":"Par CKEditor","userGuide":"CKEditor LietotÄja pamÄcÄ«ba"},"basicstyles":{"bold":"TrekninÄts","italic":"KursÄ«vs","strike":"PÄrsvÄ«trots","subscript":"ApakÅ¡rakstÄ","superscript":"AugÅ¡rakstÄ","underline":"PasvÄ«trots"},"bidi":{"ltr":"Teksta virziens no kreisÄs uz labo","rtl":"Teksta virziens no labÄs uz kreiso"},"blockquote":{"toolbar":"Bloka citÄts"},"clipboard":{"copy":"KopÄ“t","copyError":"JÅ«su pÄrlÅ«kprogrammas droÅ¡Ä«bas iestatÄ«jumi nepieļauj redaktoram automÄtiski veikt kopÄ“Å¡anas darbÄ«bu. LÅ«dzu, izmantojiet (Ctrl/Cmd+C), lai veiktu Å¡o darbÄ«bu.","cut":"Izgriezt","cutError":"JÅ«su pÄrlÅ«kprogrammas droÅ¡Ä«bas iestatÄ«jumi nepieļauj redaktoram automÄtiski veikt izgriezÅ¡anas darbÄ«bu. LÅ«dzu, izmantojiet (Ctrl/Cmd+X), lai veiktu Å¡o darbÄ«bu.","paste":"IelÄ«mÄ“t","pasteArea":"IelÄ«mÄ“Å¡anas zona","pasteMsg":"LÅ«dzu, ievietojiet tekstu Å¡ajÄ laukumÄ, izmantojot klaviatÅ«ru (<STRONG>Ctrl/Cmd+V</STRONG>) un apstipriniet ar <STRONG>DarÄ«ts!</STRONG>.","securityMsg":"JÅ«su pÄrlÅ«ka droÅ¡Ä«bas uzstÄdÄ«jumu dēļ, nav iespÄ“jams tieÅ¡i piekļūt jÅ«su starpliktuvei. Jums jÄielÄ«mÄ“ atkÄrtoti Å¡ajÄ logÄ.","title":"Ievietot"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"AutomÄtiska","bgColorTitle":"Fona krÄsa","colors":{"000":"Melns","800000":"SarkanbrÅ«ns","8B4513":"Sedlu brÅ«ns","2F4F4F":"TumÅ¡as tÄfeles pelÄ“ks","008080":"Zili-zaļš","000080":"JÅ«ras","4B0082":"Indigo","696969":"TumÅ¡i pelÄ“ks","B22222":"ĶieÄ£eļsarkans","A52A2A":"BrÅ«ns","DAA520":"Zelta","006400":"TumÅ¡i zaļš","40E0D0":"TirkÄ«zs","0000CD":"VidÄ“ji zils","800080":"Purpurs","808080":"PelÄ“ks","F00":"Sarkans","FF8C00":"TumÅ¡i oranžs","FFD700":"Zelta","008000":"Zaļš","0FF":"TumÅ¡zils","00F":"Zils","EE82EE":"Violets","A9A9A9":"PelÄ“ks","FFA07A":"GaiÅ¡i laÅ¡krÄsas","FFA500":"Oranžs","FFFF00":"Dzeltens","00FF00":"Laima","AFEEEE":"GaiÅ¡i tirkÄ«za","ADD8E6":"GaiÅ¡i zils","DDA0DD":"PlÅ«mju","D3D3D3":"GaiÅ¡i pelÄ“ks","FFF0F5":"Lavandas sÄrts","FAEBD7":"AntÄ«ki balts","FFFFE0":"GaiÅ¡i dzeltens","F0FFF0":"Meduspile","F0FFFF":"Debesszils","F0F8FF":"Alises zils","E6E6FA":"Lavanda","FFF":"Balts"},"more":"PlaÅ¡Äka palete...","panelTitle":"KrÄsa","textColorTitle":"Teksta krÄsa"},"colordialog":{"clear":"NotÄ«rÄ«t","highlight":"Paraugs","options":"KrÄsas uzstÄdÄ«jumi","selected":"IzvÄ“lÄ“tÄ krÄsa","title":"IzvÄ“lies krÄsu"},"templates":{"button":"Sagataves","emptyListMsg":"(Nav norÄdÄ«tas sagataves)","insertOption":"Aizvietot paÅ¡reizÄ“jo saturu","options":"Sagataves uzstÄdÄ«jumi","selectPromptMsg":"LÅ«dzu, norÄdiet sagatavi, ko atvÄ“rt editorÄ<br>(patreizÄ“jie dati tiks zaudÄ“ti):","title":"Satura sagataves"},"contextmenu":{"options":"UznirstoÅ¡Äs izvÄ“lnes uzstÄdÄ«jumi"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"KonsultatÄ«vs virsraksts","cssClassInputLabel":"Stilu klases","edit":"Labot Div","inlineStyleInputLabel":"Iekļautais stils","langDirLTRLabel":"Kreisais uz Labo (LTR)","langDirLabel":"Valodas virziens","langDirRTLLabel":"Labais uz kreiso (RTL)","languageCodeInputLabel":"Valodas kods","remove":"Noņemt Div","styleSelectLabel":"Stils","title":"Izveidot div konteineri","toolbar":"Izveidot div konteineri"},"toolbar":{"toolbarCollapse":"AizvÄ“rt rÄ«kjoslu","toolbarExpand":"AtvÄ“rt rÄ«kjoslu","toolbarGroups":{"document":"Dokuments","clipboard":"Starpliktuve/Atcelt","editing":"LaboÅ¡ana","forms":"Formas","basicstyles":"Pamata stili","paragraph":"ParagrÄfs","links":"Saites","insert":"Ievietot","styles":"Stili","colors":"KrÄsas","tools":"RÄ«ki"},"toolbars":"Redaktora rÄ«kjoslas"},"elementspath":{"eleLabel":"Elementa ceļš","eleTitle":"%1 elements"},"find":{"find":"MeklÄ“t","findOptions":"MeklÄ“t uzstÄdÄ«jumi","findWhat":"MeklÄ“t:","matchCase":"ReÄ£istrjÅ«tÄ«gs","matchCyclic":"Sakrist cikliski","matchWord":"JÄsakrÄ«t pilnÄ«bÄ","notFoundMsg":"NorÄdÄ«tÄ frÄze netika atrasta.","replace":"NomainÄ«t","replaceAll":"Aizvietot visu","replaceSuccessMsg":"%1 gadÄ«jums(i) aizvietoti","replaceWith":"NomainÄ«t uz:","title":"MeklÄ“t un aizvietot"},"fakeobjects":{"anchor":"IezÄ«me","flash":"Flash animÄcija","hiddenfield":"SlÄ“pts lauks","iframe":"Iframe","unknown":"NezinÄms objekts"},"flash":{"access":"Skripta pieeja","accessAlways":"VienmÄ“r","accessNever":"Nekad","accessSameDomain":"Tas pats domÄ“ns","alignAbsBottom":"AbsolÅ«ti apakÅ¡Ä","alignAbsMiddle":"AbsolÅ«ti vertikÄli centrÄ“ts","alignBaseline":"PamatrindÄ","alignTextTop":"Teksta augÅ¡Ä","bgcolor":"Fona krÄsa","chkFull":"PilnekrÄns","chkLoop":"NepÄrtraukti","chkMenu":"Atļaut Flash izvÄ“lni","chkPlay":"AutomÄtiska atskaņoÅ¡ana","flashvars":"Flash mainÄ«gie","hSpace":"HorizontÄlÄ telpa","properties":"Flash Ä«paÅ¡Ä«bas","propertiesTab":"UzstÄdÄ«jumi","quality":"KvalitÄte","qualityAutoHigh":"AutomÄtiski Augsta","qualityAutoLow":"AutomÄtiski Zema","qualityBest":"LabÄkÄ","qualityHigh":"Augsta","qualityLow":"Zema","qualityMedium":"VidÄ“ja","scale":"MainÄ«t izmÄ“ru","scaleAll":"RÄdÄ«t visu","scaleFit":"PrecÄ«zs izmÄ“rs","scaleNoBorder":"Bez rÄmja","title":"Flash Ä«paÅ¡Ä«bas","vSpace":"VertikÄlÄ telpa","validateHSpace":"Hspace jÄbÅ«t skaitlim","validateSrc":"LÅ«dzu norÄdi hipersaiti","validateVSpace":"Vspace jÄbÅ«t skaitlim","windowMode":"Loga režīms","windowModeOpaque":"NecaurspÄ«dÄ«gs","windowModeTransparent":"CaurspÄ«dÄ«gs","windowModeWindow":"Logs"},"font":{"fontSize":{"label":"IzmÄ“rs","voiceLabel":"Fonta izmeÅ—s","panelTitle":"IzmÄ“rs"},"label":"Å rifts","panelTitle":"Å rifts","voiceLabel":"Fonts"},"forms":{"button":{"title":"Pogas Ä«paÅ¡Ä«bas","text":"Teksts (vÄ“rtÄ«ba)","type":"Tips","typeBtn":"Poga","typeSbm":"NosÅ«tÄ«t","typeRst":"Atcelt"},"checkboxAndRadio":{"checkboxTitle":"AtzÄ«mÄ“Å¡anas kastÄ«tes Ä«paÅ¡Ä«bas","radioTitle":"IzvÄ“les poga Ä«paÅ¡Ä«bas","value":"VÄ“rtÄ«ba","selected":"IezÄ«mÄ“ts"},"form":{"title":"Formas Ä«paÅ¡Ä«bas","menu":"Formas Ä«paÅ¡Ä«bas","action":"DarbÄ«ba","method":"Metode","encoding":"KodÄ“jums"},"hidden":{"title":"PaslÄ“ptÄs teksta rindas Ä«paÅ¡Ä«bas","name":"Nosaukums","value":"VÄ“rtÄ«ba"},"select":{"title":"IezÄ«mÄ“Å¡anas lauka Ä«paÅ¡Ä«bas","selectInfo":"InformÄcija","opAvail":"PieejamÄs iespÄ“jas","value":"VÄ“rtÄ«ba","size":"IzmÄ“rs","lines":"rindas","chkMulti":"Atļaut vairÄkus iezÄ«mÄ“jumus","opText":"Teksts","opValue":"VÄ“rtÄ«ba","btnAdd":"Pievienot","btnModify":"Veikt izmaiņas","btnUp":"AugÅ¡up","btnDown":"Lejup","btnSetValue":"Noteikt kÄ iezÄ«mÄ“to vÄ“rtÄ«bu","btnDelete":"DzÄ“st"},"textarea":{"title":"Teksta laukuma Ä«paÅ¡Ä«bas","cols":"Kolonnas","rows":"Rindas"},"textfield":{"title":"Teksta rindas Ä«paÅ¡Ä«bas","name":"Nosaukums","value":"VÄ“rtÄ«ba","charWidth":"Simbolu platums","maxChars":"Simbolu maksimÄlais daudzums","type":"Tips","typeText":"Teksts","typePass":"Parole","typeEmail":"Epasts","typeSearch":"MeklÄ“t","typeTel":"TÄlruņa numurs","typeUrl":"Adrese"}},"format":{"label":"FormÄts","panelTitle":"FormÄts","tag_address":"Adrese","tag_div":"Rindkopa (DIV)","tag_h1":"Virsraksts 1","tag_h2":"Virsraksts 2","tag_h3":"Virsraksts 3","tag_h4":"Virsraksts 4","tag_h5":"Virsraksts 5","tag_h6":"Virsraksts 6","tag_p":"NormÄls teksts","tag_pre":"FormatÄ“ts teksts"},"horizontalrule":{"toolbar":"Ievietot horizontÄlu AtdalÄ«tÄjsvÄ«tru"},"iframe":{"border":"RÄdÄ«t rÄmi","noUrl":"NorÄdiet iframe adresi","scrolling":"Atļaut ritjoslas","title":"IFrame uzstÄdÄ«jumi","toolbar":"IFrame"},"image":{"alertUrl":"LÅ«dzu norÄdÄ«t attÄ“la hipersaiti","alt":"AlternatÄ«vais teksts","border":"RÄmis","btnUpload":"NosÅ«tÄ«t serverim","button2Img":"Vai vÄ“laties pÄrveidot izvÄ“lÄ“to attÄ“la pogu uz attÄ“la?","hSpace":"HorizontÄlÄ telpa","img2Button":"Vai vÄ“laties pÄrveidot izvÄ“lÄ“to attÄ“lu uz attÄ“la pogas?","infoTab":"InformÄcija par attÄ“lu","linkTab":"Hipersaite","lockRatio":"NemainÄ«ga Augstuma/Platuma attiecÄ«ba","menu":"AttÄ“la Ä«paÅ¡Ä«bas","resetSize":"Atjaunot sÄkotnÄ“jo izmÄ“ru","title":"AttÄ“la Ä«paÅ¡Ä«bas","titleButton":"AttÄ“lpogas Ä«paÅ¡Ä«bas","upload":"AugÅ¡upielÄdÄ“t","urlMissing":"TrÅ«kst attÄ“la atraÅ¡anÄs adrese.","vSpace":"VertikÄlÄ telpa","validateBorder":"Apmalei jÄbÅ«t veselam skaitlim","validateHSpace":"HSpace jÄbÅ«t veselam skaitlim","validateVSpace":"VSpace jÄbÅ«t veselam skaitlim"},"indent":{"indent":"PalielinÄt atkÄpi","outdent":"SamazinÄt atkÄpi"},"smiley":{"options":"Smaidiņu uzstÄdÄ«jumi","title":"Ievietot smaidiņu","toolbar":"Smaidiņi"},"justify":{"block":"IzlÄ«dzinÄt malas","center":"IzlÄ«dzinÄt pret centru","left":"IzlÄ«dzinÄt pa kreisi","right":"IzlÄ«dzinÄt pa labi"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Pieejas taustiņš","advanced":"IzvÄ“rstais","advisoryContentType":"KonsultatÄ«vs satura tips","advisoryTitle":"KonsultatÄ«vs virsraksts","anchor":{"toolbar":"Ievietot/Labot iezÄ«mi","menu":"Labot iezÄ«mi","title":"IezÄ«mes uzstÄdÄ«jumi","name":"IezÄ«mes nosaukums","errorName":"LÅ«dzu norÄdiet iezÄ«mes nosaukumu","remove":"Noņemt iezÄ«mi"},"anchorId":"PÄ“c elementa ID","anchorName":"PÄ“c iezÄ«mes nosaukuma","charset":"PievienotÄ resursa kodÄ“jums","cssClasses":"Stilu saraksta klases","emailAddress":"E-pasta adrese","emailBody":"Ziņas saturs","emailSubject":"Ziņas tÄ“ma","id":"ID","info":"Hipersaites informÄcija","langCode":"Valodas kods","langDir":"Valodas lasÄ«Å¡anas virziens","langDirLTR":"No kreisÄs uz labo (LTR)","langDirRTL":"No labÄs uz kreiso (RTL)","menu":"Labot hipersaiti","name":"Nosaukums","noAnchors":"(Å ajÄ dokumentÄ nav iezÄ«mju)","noEmail":"LÅ«dzu norÄdi e-pasta adresi","noUrl":"LÅ«dzu norÄdi hipersaiti","other":"<cits>","popupDependent":"AtkarÄ«gs (Netscape)","popupFeatures":"UznirstoÅ¡Ä loga nosaukums Ä«paÅ¡Ä«bas","popupFullScreen":"PilnÄ ekrÄnÄ (IE)","popupLeft":"KreisÄ koordinÄte","popupLocationBar":"AtraÅ¡anÄs vietas josla","popupMenuBar":"IzvÄ“lnes josla","popupResizable":"MÄ“rogojams","popupScrollBars":"Ritjoslas","popupStatusBar":"Statusa josla","popupToolbar":"RÄ«ku josla","popupTop":"AugÅ¡Ä“jÄ koordinÄte","rel":"RelÄcija","selectAnchor":"IzvÄ“lÄ“ties iezÄ«mi","styles":"Stils","tabIndex":"Ciļņu indekss","target":"MÄ“rÄ·is","targetFrame":"<ietvars>","targetFrameName":"MÄ“rÄ·a ietvara nosaukums","targetPopup":"<uznirstoÅ¡Ä logÄ>","targetPopupName":"UznirstoÅ¡Ä loga nosaukums","title":"Hipersaite","toAnchor":"IezÄ«me Å¡ajÄ lapÄ","toEmail":"E-pasts","toUrl":"Adrese","toolbar":"Ievietot/Labot hipersaiti","type":"Hipersaites tips","unlink":"Noņemt hipersaiti","upload":"AugÅ¡upielÄdÄ“t"},"list":{"bulletedlist":"Pievienot/Noņemt vienkÄrÅ¡u sarakstu","numberedlist":"NumurÄ“ts saraksts"},"liststyle":{"armenian":"Armēņu skaitļi","bulletedTitle":"VienkÄrÅ¡a saraksta uzstÄdÄ«jumi","circle":"Aplis","decimal":"DecimÄlie (1, 2, 3, utt)","decimalLeadingZero":"DecimÄlie ar nulli (01, 02, 03, utt)","disc":"Disks","georgian":"Gruzīņu skaitļi (an, ban, gan, utt)","lowerAlpha":"Mazie alfabÄ“ta (a, b, c, d, e, utt)","lowerGreek":"Mazie grieÄ·u (alfa, beta, gamma, utt)","lowerRoman":"Mazie romÄņu (i, ii, iii, iv, v, utt)","none":"Nekas","notset":"<nav norÄdÄ«ts>","numberedTitle":"NumurÄ“ta saraksta uzstÄdÄ«jumi","square":"KvadrÄts","start":"SÄkt","type":"Tips","upperAlpha":"Lielie alfabÄ“ta (A, B, C, D, E, utt)","upperRoman":"Lielie romÄņu (I, II, III, IV, V, utt)","validateStartNumber":"Saraksta sÄkuma numuram jÄbÅ«t veselam skaitlim"},"magicline":{"title":"Ievietot Å¡eit rindkopu"},"maximize":{"maximize":"MaksimizÄ“t","minimize":"MinimizÄ“t"},"newpage":{"toolbar":"Jauna lapa"},"pagebreak":{"alt":"Lapas pÄrnesums","toolbar":"Ievietot lapas pÄrtraukumu drukai"},"pastetext":{"button":"Ievietot kÄ vienkÄrÅ¡u tekstu","title":"Ievietot kÄ vienkÄrÅ¡u tekstu"},"pastefromword":{"confirmCleanup":"Teksts, kuru vÄ“laties ielÄ«mÄ“t, izskatÄs ir nokopÄ“ts no Word. Vai vÄ“laties to iztÄ«rÄ«t pirms ielÄ«mÄ“Å¡anas?","error":"IekÅ¡Ä“jas kļūdas dēļ, neizdevÄs iztÄ«rÄ«t ielÄ«mÄ“tos datus.","title":"Ievietot no Worda","toolbar":"Ievietot no Worda"},"preview":{"preview":"PriekÅ¡skatÄ«t"},"print":{"toolbar":"DrukÄt"},"removeformat":{"toolbar":"Noņemt stilus"},"save":{"toolbar":"SaglabÄt"},"selectall":{"toolbar":"IezÄ«mÄ“t visu"},"showblocks":{"toolbar":"ParÄdÄ«t blokus"},"sourcearea":{"toolbar":"HTML kods"},"specialchar":{"options":"SpeciÄlo simbolu uzstÄdÄ«jumi","title":"Ievietot Ä«paÅ¡u simbolu","toolbar":"Ievietot speciÄlo simbolu"},"scayt":{"btn_about":"Par SCAYT","btn_dictionaries":"VÄrdnÄ«cas","btn_disable":"AtslÄ“gt SCAYT","btn_enable":"IeslÄ“gt SCAYT","btn_langs":"Valodas","btn_options":"UzstÄdÄ«jumi","text_title":""},"stylescombo":{"label":"Stils","panelTitle":"FormatÄ“Å¡anas stili","panelTitle1":"Bloka stili","panelTitle2":"iekļautie stili","panelTitle3":"Objekta stili"},"table":{"border":"RÄmja izmÄ“rs","caption":"LeÄ£enda","cell":{"menu":"Å Å«na","insertBefore":"Pievienot Å¡Å«nu pirms","insertAfter":"Pievienot Å¡Å«nu pÄ“c","deleteCell":"DzÄ“st rÅ«tiņas","merge":"Apvienot rÅ«tiņas","mergeRight":"Apvieno pa labi","mergeDown":"Apvienot uz leju","splitHorizontal":"SadalÄ«t Å¡Å«nu horizontÄli","splitVertical":"SadalÄ«t Å¡Å«nu vertikÄli","title":"Å Å«nas uzstÄdÄ«jumi","cellType":"Å Å«nas tips","rowSpan":"Apvienotas rindas","colSpan":"Apvienotas kolonas","wordWrap":"VÄrdu pÄrnese","hAlign":"HorizontÄlais novietojums","vAlign":"VertikÄlais novietojums","alignBaseline":"Pamatrinda","bgColor":"Fona krÄsa","borderColor":"RÄmja krÄsa","data":"Dati","header":"Virsraksts","yes":"JÄ","no":"NÄ“","invalidWidth":"Å Å«nas platumam jÄbÅ«t skaitlim","invalidHeight":"Å Å«nas augstumam jÄbÅ«t skaitlim","invalidRowSpan":"Apvienojamo rindu skaitam jÄbÅ«t veselam skaitlim","invalidColSpan":"Apvienojamo kolonu skaitam jÄbÅ«t veselam skaitlim","chooseColor":"IzvÄ“lÄ“ties"},"cellPad":"RÅ«tiņu nobÄ«de","cellSpace":"RÅ«tiņu atstatums","column":{"menu":"Kolonna","insertBefore":"Ievietot kolonu pirms","insertAfter":"Ievieto kolonu pÄ“c","deleteColumn":"DzÄ“st kolonnas"},"columns":"Kolonnas","deleteTable":"DzÄ“st tabulu","headers":"Virsraksti","headersBoth":"Abi","headersColumn":"PirmÄ kolona","headersNone":"Nekas","headersRow":"PirmÄ rinda","invalidBorder":"RÄmju izmÄ“ram jÄbÅ«t skaitlim","invalidCellPadding":"Å Å«nu atkÄpÄ“m jÄbÅ«t pozitÄ«vam skaitlim","invalidCellSpacing":"Å Å«nu atstarpÄ“m jÄbÅ«t pozitÄ«vam skaitlim","invalidCols":"Kolonu skaitam jÄbÅ«t lielÄkam par 0","invalidHeight":"Tabulas augstumam jÄbÅ«t skaitlim","invalidRows":"Rindu skaitam jÄbÅ«t lielÄkam par 0","invalidWidth":"Tabulas platumam jÄbÅ«t skaitlim","menu":"Tabulas Ä«paÅ¡Ä«bas","row":{"menu":"Rinda","insertBefore":"Ievietot rindu pirms","insertAfter":"Ievietot rindu pÄ“c","deleteRow":"DzÄ“st rindas"},"rows":"Rindas","summary":"AnotÄcija","title":"Tabulas Ä«paÅ¡Ä«bas","toolbar":"Tabula","widthPc":"procentuÄli","widthPx":"pikseļos","widthUnit":"platuma mÄ“rvienÄ«ba"},"undo":{"redo":"AtkÄrtot","undo":"Atcelt"},"wsc":{"btnIgnore":"IgnorÄ“t","btnIgnoreAll":"IgnorÄ“t visu","btnReplace":"Aizvietot","btnReplaceAll":"Aizvietot visu","btnUndo":"Atcelt","changeTo":"NomainÄ«t uz","errorLoading":"Kļūda ielÄdÄ“jot aplikÄcijas servisa adresi: %s.","ieSpellDownload":"PareizrakstÄ«bas pÄrbaudÄ«tÄjs nav pievienots. Vai vÄ“laties to lejupielÄdÄ“t tagad?","manyChanges":"PareizrakstÄ«bas pÄrbaude pabeigta: %1 vÄrdi tika mainÄ«ti","noChanges":"PareizrakstÄ«bas pÄrbaude pabeigta: nekas netika labots","noMispell":"PareizrakstÄ«bas pÄrbaude pabeigta: kļūdas netika atrastas","noSuggestions":"- Nav ieteikumu -","notAvailable":"Atvainojiet, bet serviss Å¡obrÄ«d nav pieejams.","notInDic":"Netika atrasts vÄrdnÄ«cÄ","oneChange":"PareizrakstÄ«bas pÄrbaude pabeigta: 1 vÄrds izmainÄ«ts","progress":"Notiek pareizrakstÄ«bas pÄrbaude...","title":"PÄrbaudÄ«t gramatiku","toolbar":"PareizrakstÄ«bas pÄrbaude"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/mk.js b/wqflask/wqflask/static/packages/ckeditor/lang/mk.js
deleted file mode 100644
index 6cccf141..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/mk.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['mk']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Send it to the Server","image":"Image","flash":"Flash","form":"Form","checkbox":"Checkbox","radio":"Radio Button","textField":"Text Field","textarea":"Textarea","hiddenField":"Hidden Field","button":"Button","select":"Selection Field","imageButton":"Image Button","notSet":"<not set>","id":"Id","name":"Name","langDir":"Language Direction","langDirLtr":"Left to Right (LTR)","langDirRtl":"Right to Left (RTL)","langCode":"Language Code","longDescr":"Long Description URL","cssClass":"Stylesheet Classes","advisoryTitle":"Advisory Title","cssStyle":"Style","ok":"OK","cancel":"Cancel","close":"Close","preview":"Preview","resize":"Resize","generalTab":"Општо","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Target","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","styles":"Style","cssClasses":"Stylesheet Classes","width":"Width","height":"Height","align":"Alignment","alignLeft":"Left","alignRight":"Right","alignCenter":"Center","alignJustify":"Justify","alignTop":"Top","alignMiddle":"Middle","alignBottom":"Bottom","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Copy","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"Cut","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"Paste","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Paste"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatic","bgColorTitle":"Background Color","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"More Colors...","panelTitle":"Colors","textColorTitle":"Text Color"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Templates","emptyListMsg":"(No templates defined)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Please select the template to open in the editor","title":"Content Templates"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"Find","findOptions":"Find Options","findWhat":"Find what:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"The specified text was not found.","replace":"Replace","replaceAll":"Replace All","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Replace with:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs Bottom","alignAbsMiddle":"Abs Middle","alignBaseline":"Baseline","alignTextTop":"Text Top","bgcolor":"Background color","chkFull":"Allow Fullscreen","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Flash Properties","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Scale","scaleAll":"Show all","scaleFit":"Exact Fit","scaleNoBorder":"No Border","title":"Flash Properties","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"URL must not be empty.","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Size","voiceLabel":"Font Size","panelTitle":"Font Size"},"label":"Font","panelTitle":"Font Name","voiceLabel":"Font"},"forms":{"button":{"title":"Button Properties","text":"Text (Value)","type":"Type","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected"},"form":{"title":"Form Properties","menu":"Form Properties","action":"Action","method":"Method","encoding":"Encoding"},"hidden":{"title":"Hidden Field Properties","name":"Name","value":"Value"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Value","size":"Size","lines":"lines","chkMulti":"Allow multiple selections","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"Delete"},"textarea":{"title":"Textarea Properties","cols":"Columns","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"Name","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","type":"Type","typeText":"Text","typePass":"Password","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Paragraph Format","tag_address":"Address","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Insert Horizontal Line"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"Please type the image URL","alt":"Alternative Text","border":"Border","btnUpload":"Send it to the Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Image Info","linkTab":"Link","lockRatio":"Lock Ratio","menu":"Image Properties","resetSize":"Reset Size","title":"Image Properties","titleButton":"Image Button Properties","upload":"Upload","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Increase Indent","outdent":"Decrease Indent"},"smiley":{"options":"Smiley Options","title":"Insert a Smiley","toolbar":"Smiley"},"justify":{"block":"Justify","center":"Center","left":"Align Left","right":"Align Right"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Access Key","advanced":"Advanced","advisoryContentType":"Advisory Content Type","advisoryTitle":"Advisory Title","anchor":{"toolbar":"Anchor","menu":"Edit Anchor","title":"Anchor Properties","name":"Anchor Name","errorName":"Please type the anchor name","remove":"Remove Anchor"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"Stylesheet Classes","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"Id","info":"Link Info","langCode":"Language Code","langDir":"Language Direction","langDirLTR":"Left to Right (LTR)","langDirRTL":"Right to Left (RTL)","menu":"Edit Link","name":"Name","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"Style","tabIndex":"Tab Index","target":"Target","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Link","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"Link","type":"Link Type","unlink":"Unlink","upload":"Upload"},"list":{"bulletedlist":"Insert/Remove Bulleted List","numberedlist":"Insert/Remove Numbered List"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"New Page"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Paste as plain text","title":"Paste as Plain Text"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Paste from Word","toolbar":"Paste from Word"},"preview":{"preview":"Preview"},"print":{"toolbar":"Print"},"removeformat":{"toolbar":"Remove Format"},"save":{"toolbar":"Save"},"selectall":{"toolbar":"Select All"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"Source"},"specialchar":{"options":"Special Character Options","title":"Select Special Character","toolbar":"Insert Special Character"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Styles","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Border size","caption":"Caption","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Delete Cells","merge":"Merge Cells","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"Columns","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"Redo","undo":"Undo"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/mn.js b/wqflask/wqflask/static/packages/ckeditor/lang/mn.js
deleted file mode 100644
index f8d38706..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/mn.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['mn']={"editor":"Ð¥ÑлбÑрт бичвÑÑ€ боловÑруулагч","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"ҮйлчлÑгч тооцоолуур (ÑервÑÑ€)-ийг үзÑÑ…","url":"цахим хуудаÑны хаÑг (URL)","protocol":"Протокол","upload":"ИлгÑÑж ачаалах","uploadSubmit":"Үүнийг үйлчлÑгч тооцоолуур (Ñервер) лүү илгÑÑÑ…","image":"Зураг","flash":"Флаш хөдөлгөөнтÑй зураг","form":"МаÑгт","checkbox":"ТÑмдÑглÑÑний нүд","radio":"Радио товчлуур","textField":"БичвÑрийн талбар","textarea":"БичвÑрийн зай","hiddenField":"Далд талбар","button":"Товчлуур","select":"Сонголтын талбар","imageButton":"Зургий товчуур","notSet":"<тохируулаагүй>","id":"Id (техникийн нÑÑ€)","name":"ÐÑÑ€","langDir":"Ð¥Ñлний чиглÑл","langDirLtr":"ЗүүнÑÑÑ Ð±Ð°Ñ€ÑƒÑƒÐ½ (LTR)","langDirRtl":"Ð‘Ð°Ñ€ÑƒÑƒÐ½Ð°Ð°Ñ Ð·Ò¯Ò¯Ð½ (RTL)","langCode":"Ð¥Ñлний код","longDescr":"Урт тайлбарын вÑб хаÑг","cssClass":"Ð¥ÑлбÑрийн хуудаÑны ангиуд","advisoryTitle":"Зөвлөх гарчиг","cssStyle":"Загвар","ok":"За","cancel":"Болих","close":"Хаах","preview":"Урьдчилан харах","resize":"Resize","generalTab":"Ерөнхий","advancedTab":"Гүнзгий","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Сонголт","target":"Бай","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Зүүн Ñ‚Ð°Ð»Ð°Ð°Ñ Ð±Ð°Ñ€ÑƒÑƒÐ½ тийшÑÑ (LTR)","langDirRTL":"Баруун Ñ‚Ð°Ð»Ð°Ð°Ñ Ð·Ò¯Ò¯Ð½ тийшÑÑ (RTL)","styles":"Загвар","cssClasses":"Ð¥ÑлбÑрийн хуудаÑны ангиуд","width":"Өргөн","height":"Өндөр","align":"ЭгнÑÑ","alignLeft":"Зүүн","alignRight":"Баруун","alignCenter":"Төвд","alignJustify":"ТÑгшлÑÑ…","alignTop":"ДÑÑд талд","alignMiddle":"Дунд","alignBottom":"Доод талд","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Өндөр нь тоо байх Ñ‘Ñтой.","invalidWidth":"Өргөн нь тоо байх Ñ‘Ñтой.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Тод бүдүүн","italic":"Ðалуу","strike":"Дундуур нь зурааÑтай болгох","subscript":"Суурь болгох","superscript":"ЗÑÑ€Ñг болгох","underline":"Доогуур нь зурааÑтай болгох"},"bidi":{"ltr":"ЗүүнÑÑÑ Ð±Ð°Ñ€ÑƒÑƒÐ½ тийш бичлÑг","rtl":"Ð‘Ð°Ñ€ÑƒÑƒÐ½Ð°Ð°Ñ Ð·Ò¯Ò¯Ð½ тийш бичлÑг"},"blockquote":{"toolbar":"ИшлÑл Ñ…ÑÑÑг"},"clipboard":{"copy":"Хуулах","copyError":"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хуулах үйлдÑлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+C) товчны хоÑлолыг ашиглана уу.","cut":"Хайчлах","cutError":"Таны browser-ын хамгаалалтын тохиргоо editor-д автоматаар хайчлах үйлдÑлийг зөвшөөрөхгүй байна. (Ctrl/Cmd+X) товчны хоÑлолыг ашиглана уу.","paste":"Буулгах","pasteArea":"Paste Area","pasteMsg":"(<strong>Ctrl/Cmd+V</strong>) товчийг ашиглан paste Ñ…Ð¸Ð¹Ð½Ñ Ò¯Ò¯. Мөн <strong>OK</strong> дар.","securityMsg":"Таны үзүүлÑгч/browser/-н хамгаалалтын Ñ‚Ð¾Ñ…Ð¸Ñ€Ð³Ð¾Ð¾Ð½Ð¾Ð¾Ñ Ð±Ð¾Ð»Ð¾Ð¾Ð´ editor clipboard өгөгдөлрүү шууд хандах боломжгүй. Ð­Ð½Ñ Ñ†Ð¾Ð½Ñ…Ð¾Ð´ дахин paste хийхийг оролд.","title":"Буулгах"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Ðвтоматаар","bgColorTitle":"ДÑвÑгÑÑ€ өнгө","colors":{"000":"Хар","800000":"ХүрÑн","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Саарал","F00":"Улаан","FF8C00":"Dark Orange","FFD700":"Ðлт","008000":"Ðогоон","0FF":"ЦÑнхÑÑ€","00F":"Ð¥Ó©Ñ…","EE82EE":"Ягаан","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Улбар шар","FFFF00":"Шар","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Цайвар Ñаарал","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"Цагаан"},"more":"ÐÑмÑлт өнгөнүүд...","panelTitle":"Өнгөнүүд","textColorTitle":"БичвÑрийн өнгө"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Загварууд","emptyListMsg":"(Загвар тодорхойлогдоогүй байна)","insertOption":"Одоогийн агууллагыг дарж бичих","options":"Template Options","selectPromptMsg":"Загварыг нÑÑж editor-Ñ€Ò¯Ò¯ Ñонгож оруулна уу<br />(Одоогийн агууллагыг уÑтаж магадгүй):","title":"Загварын агуулга"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Зөвлөлдөх гарчиг","cssClassInputLabel":"Stylesheet клаÑÑууд","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Зүүн Ñ‚Ð°Ð»Ð°Ð°Ñ Ð±Ð°Ñ€ÑƒÑƒÐ½ тишÑÑ (LTR)","langDirLabel":"Ð¥Ñлний чиглÑл","langDirRTLLabel":"Баруун Ñ‚Ð°Ð»Ð°Ð°Ñ Ð·Ò¯Ò¯Ð½ тишÑÑ (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Загвар","title":"Div гÑдÑг Ñ…ÑÑÑг бий болгох","toolbar":"Div гÑдÑг Ñ…ÑÑÑг бий болгох"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"ХолбооÑууд","insert":"Оруулах","styles":"Загварууд","colors":"Онгөнүүд","tools":"Ð¥ÑÑ€ÑгÑлүүд"},"toolbars":"БолоÑруулагчийн Ñ…ÑÑ€ÑгÑлийн Ñамбар"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"Хайх","findOptions":"Хайх Ñонголтууд","findWhat":"Хайх үг/Ò¯ÑÑг:","matchCase":"ТÑнцÑÑ… төлөв","matchCyclic":"Match cyclic","matchWord":"ТÑнцÑÑ… бүтÑн үг","notFoundMsg":"ХайÑан бичвÑрийг олÑонгүй.","replace":"Орлуулах","replaceAll":"Бүгдийг нь Ñолих","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Солих үг:","title":"Хайж орлуулах"},"fakeobjects":{"anchor":"Зангуу","flash":"Flash Animation","hiddenfield":"Ðууц талбар","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Онцлогууд","accessNever":"Ð¥ÑзÑÑ Ñ‡ үгүй","accessSameDomain":"Байнга","alignAbsBottom":"Abs доод талд","alignAbsMiddle":"Abs Дунд талд","alignBaseline":"Baseline","alignTextTop":"ТекÑÑ‚ дÑÑÑ€","bgcolor":"ДÑвÑгÑÑ€ өнгө","chkFull":"Allow Fullscreen","chkLoop":"Давтах","chkMenu":"Флаш цÑÑ Ð¸Ð´Ð²ÑхжүүлÑÑ…","chkPlay":"Ðвтоматаар тоглох","flashvars":"Variables for Flash","hSpace":"Хөндлөн зай","properties":"Флаш шинж чанар","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Өргөгтгөх","scaleAll":"Бүгдийг харуулах","scaleFit":"Яг тааруулах","scaleNoBorder":"ХүрÑÑгүй","title":"Флаш шинж чанар","vSpace":"БоÑоо зай","validateHSpace":"HSpace must be a number.","validateSrc":"Линк URL-ÑÑ Ñ‚Ó©Ñ€Ó©Ð»Ð¶Ò¯Ò¯Ð»Ð½Ñ Ò¯Ò¯","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Ð¥ÑмжÑÑ","voiceLabel":"Ò®Ñгийн Ñ…ÑмжÑÑ","panelTitle":"Ò®Ñгийн Ñ…ÑмжÑÑ"},"label":"Ò®Ñгийн Ñ…ÑлбÑÑ€","panelTitle":"ҮгÑийн Ñ…ÑлбÑрийн нÑÑ€","voiceLabel":"ҮгÑийн Ñ…ÑлбÑÑ€"},"forms":{"button":{"title":"Товчны шинж чанар","text":"ТÑкÑÑ‚ (Утга)","type":"Төрөл","typeBtn":"Товч","typeSbm":"Submit","typeRst":"Болих"},"checkboxAndRadio":{"checkboxTitle":"ЧекбокÑны шинж чанар","radioTitle":"Радио товчны шинж чанар","value":"Утга","selected":"СонгогдÑон"},"form":{"title":"Форм шинж чанар","menu":"Форм шинж чанар","action":"ҮйлдÑл","method":"Ðрга","encoding":"Encoding"},"hidden":{"title":"Ðууц талбарын шинж чанар","name":"ÐÑÑ€","value":"Утга"},"select":{"title":"Согогч талбарын шинж чанар","selectInfo":"ÐœÑдÑÑлÑл","opAvail":"ИдвÑÑ…Ñ‚Ñй Ñонголт","value":"Утга","size":"Ð¥ÑмжÑÑ","lines":"Мөр","chkMulti":"Олон зүйл зÑÑ€Ñг Ñонгохыг зөвшөөрөх","opText":"ТÑкÑÑ‚","opValue":"Утга","btnAdd":"ÐÑмÑÑ…","btnModify":"Өөрчлөх","btnUp":"ДÑÑш","btnDown":"Доош","btnSetValue":"СонгогдÑан утга оноох","btnDelete":"УÑтгах"},"textarea":{"title":"ТекÑÑ‚ орчны шинж чанар","cols":"Багана","rows":"Мөр"},"textfield":{"title":"ТекÑÑ‚ талбарын шинж чанар","name":"ÐÑÑ€","value":"Утга","charWidth":"ТÑмдÑгтын өргөн","maxChars":"Хамгийн их Ñ‚ÑмдÑгт","type":"Төрөл","typeText":"ТекÑÑ‚","typePass":"Ðууц үг","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"цахим хуудаÑны хаÑг (URL)"}},"format":{"label":"Параргафын загвар","panelTitle":"Параргафын загвар","tag_address":"ХаÑг","tag_div":"Paragraph (DIV)","tag_h1":"Гарчиг 1","tag_h2":"Гарчиг 2","tag_h3":"Гарчиг 3","tag_h4":"Гарчиг 4","tag_h5":"Гарчиг 5","tag_h6":"Гарчиг 6","tag_p":"Ð¥Ñвийн","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"Хөндлөн Ð·ÑƒÑ€Ð°Ð°Ñ Ð¾Ñ€ÑƒÑƒÐ»Ð°Ñ…"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"Зурагны URL-ын төрлийн Ñонгоно уу","alt":"Зургийг орлох бичвÑÑ€","border":"ХүрÑÑ","btnUpload":"Үүнийг ÑервÑррүү илгÑÑ","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Хөндлөн зай","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Зурагны мÑдÑÑлÑл","linkTab":"ХолбооÑ","lockRatio":"Радио түгжих","menu":"Зураг","resetSize":"Ñ…ÑмжÑÑ Ð´Ð°Ñ…Ð¸Ð½ оноох","title":"Зураг","titleButton":"Зурган товчны шинж чанар","upload":"Хуулах","urlMissing":"Зургийн ÑÑ… Ñурвалжийн хаÑг (URL) байхгүй байна.","vSpace":"БоÑоо зай","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Догол мөр хаÑах","outdent":"Догол мөр нÑмÑÑ…"},"smiley":{"options":"Smiley Options","title":"Тодорхойлолт оруулах","toolbar":"Тодорхойлолт"},"justify":{"block":"ТÑгшлÑÑ…","center":"Голлуулах","left":"Зүүн талд тулгах","right":"Баруун талд тулгах"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Холбох түлхүүр","advanced":"ÐÑмÑлт","advisoryContentType":"Зөвлөлдөх төрлийн агуулга","advisoryTitle":"Зөвлөлдөх гарчиг","anchor":{"toolbar":"Зангуу","menu":"Зангууг болоÑруулах","title":"Зангуугийн шинж чанар","name":"Зангуугийн нÑÑ€","errorName":"Зангуугийн нÑрийг оруулна уу","remove":"Зангууг уÑтгах"},"anchorId":"ЭлемÑнтйн Id нÑÑ€ÑÑÑ€","anchorName":"Зангуугийн нÑÑ€ÑÑÑ€","charset":"ТÑмдÑгт оноох нөөцөд холбогдÑон","cssClasses":"Stylesheet клаÑÑууд","emailAddress":"Э-шуудангийн хаÑг","emailBody":"ЗурваÑны их бие","emailSubject":"ЗурваÑны гарчиг","id":"Id","info":"ХолбооÑын тухай мÑдÑÑлÑл","langCode":"Ð¥Ñлний код","langDir":"Ð¥Ñлний чиглÑл","langDirLTR":"ЗүүнÑÑÑ Ð±Ð°Ñ€ÑƒÑƒÐ½ (LTR)","langDirRTL":"Ð‘Ð°Ñ€ÑƒÑƒÐ½Ð°Ð°Ñ Ð·Ò¯Ò¯Ð½ (RTL)","menu":"Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ Ð·Ð°Ñварлах","name":"ÐÑÑ€","noAnchors":"(Баримт бичиг зангуугүй байна)","noEmail":"Э-шуудангий хаÑгаа ÑˆÐ¸Ð²Ð½Ñ Ò¯Ò¯","noUrl":"ХолбооÑны URL хаÑгийг ÑˆÐ¸Ð²Ð½Ñ Ò¯Ò¯","other":"<other>","popupDependent":"Хамаатай (Netscape)","popupFeatures":"Popup цонхны онцлог","popupFullScreen":"Цонх дүүргÑÑ… (Internet Explorer)","popupLeft":"Зүүн байрлал","popupLocationBar":"Location Ñ…ÑÑÑг","popupMenuBar":"ЦÑÑний Ñамбар","popupResizable":"Resizable","popupScrollBars":"Скрол Ñ…ÑÑÑгүүд","popupStatusBar":"Ð¡Ñ‚Ð°Ñ‚ÑƒÑ Ñ…ÑÑÑг","popupToolbar":"Багажны Ñамбар","popupTop":"ДÑÑд байрлал","rel":"Relationship","selectAnchor":"ÐÑг зангууг Ñонгоно уу","styles":"Загвар","tabIndex":"Tab индекÑ","target":"Байрлал","targetFrame":"<Ðгуулах хүрÑÑ>","targetFrameName":"Очих фремын нÑÑ€","targetPopup":"<popup цонх>","targetPopupName":"Popup цонхны нÑÑ€","title":"ХолбооÑ","toAnchor":"Ð­Ð½Ñ Ð±Ð¸Ñ‡Ð²ÑÑ€ дÑÑ… зангуу руу очих холбооÑ","toEmail":"Э-захиа","toUrl":"цахим хуудаÑны хаÑг (URL)","toolbar":"ХолбооÑ","type":"Линкийн төрөл","unlink":"Ð¥Ð¾Ð»Ð±Ð¾Ð¾Ñ Ð°Ð²Ñ‡ хаÑÑ…","upload":"Хуулах"},"list":{"bulletedlist":"ЦÑгтÑй жагÑаалт","numberedlist":"ДугаарлагдÑан жагÑаалт"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Төрөл","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"ДÑлгÑц дүүргÑÑ…","minimize":"Цонхыг багÑгаж харуулах"},"newpage":{"toolbar":"Ð¨Ð¸Ð½Ñ Ñ…ÑƒÑƒÐ´Ð°Ñ"},"pagebreak":{"alt":"Page Break","toolbar":"Ð¥ÑƒÑƒÐ´Ð°Ñ Ñ‚ÑƒÑгаарлагч оруулах"},"pastetext":{"button":"Энгийн бичвÑÑ€ÑÑÑ€ буулгах","title":"Энгийн бичвÑÑ€ÑÑÑ€ буулгах"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Word-Ð¾Ð¾Ñ Ð±ÑƒÑƒÐ»Ð³Ð°Ñ…","toolbar":"Word-Ð¾Ð¾Ñ Ð±ÑƒÑƒÐ»Ð³Ð°Ñ…"},"preview":{"preview":"Уридчлан харах"},"print":{"toolbar":"Ð¥ÑвлÑÑ…"},"removeformat":{"toolbar":"Параргафын загварыг авч хаÑÑ…"},"save":{"toolbar":"Хадгалах"},"selectall":{"toolbar":"Бүгдийг нь Ñонгох"},"showblocks":{"toolbar":"Хавтангуудыг харуулах"},"sourcearea":{"toolbar":"Код"},"specialchar":{"options":"Special Character Options","title":"Онцгой Ñ‚ÑмдÑгт Ñонгох","toolbar":"Онцгой Ñ‚ÑмдÑгт оруулах"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Толь бичгүүд","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Ð¥Ñлүүд","btn_options":"Сонголт","text_title":""},"stylescombo":{"label":"Загвар","panelTitle":"Загвар Ñ…ÑлбÑржүүлÑÑ…","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"ХүрÑÑний Ñ…ÑмжÑÑ","caption":"Тайлбар","cell":{"menu":"Ðүх/зай","insertBefore":"Ðүх/зай өмнө нь оруулах","insertAfter":"Ðүх/зай дараа нь оруулах","deleteCell":"Ðүх уÑтгах","merge":"Ðүх нÑгтÑÑ…","mergeRight":"Баруун тийш нÑгтгÑÑ…","mergeDown":"Доош нÑгтгÑÑ…","splitHorizontal":"Ðүх/зайг боÑоогоор нь туÑгаарлах","splitVertical":"Ðүх/зайг хөндлөнгөөр нь туÑгаарлах","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Ð¥ÑвтÑÑд Ñ‚ÑгшлÑÑ… арга","vAlign":"БоÑоод Ñ‚ÑгшлÑÑ… арга","alignBaseline":"Baseline","bgColor":"ДÑвÑгÑÑ€ өнгө","borderColor":"ХүрÑÑний өнгө","data":"Data","header":"Header","yes":"Тийм","no":"Үгүй","invalidWidth":"Ðүдний өргөн нь тоо байх Ñ‘Ñтой.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Сонгох"},"cellPad":"Ðүх доторлох(padding)","cellSpace":"Ðүх хоорондын зай (spacing)","column":{"menu":"Багана","insertBefore":"Багана өмнө нь оруулах","insertAfter":"Багана дараа нь оруулах","deleteColumn":"Багана уÑтгах"},"columns":"Багана","deleteTable":"Ð¥Ò¯ÑнÑгт уÑтгах","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Ð¥Ò¯ÑнÑгтийн өргөн нь тоо байх Ñ‘Ñтой.","menu":"Ð¥Ò¯ÑнÑгт","row":{"menu":"Мөр","insertBefore":"Мөр өмнө нь оруулах","insertAfter":"Мөр дараа нь оруулах","deleteRow":"Мөр уÑтгах"},"rows":"Мөр","summary":"Тайлбар","title":"Ð¥Ò¯ÑнÑгт","toolbar":"Ð¥Ò¯ÑнÑгт","widthPc":"хувь","widthPx":"цÑг","widthUnit":"өргөний нÑгж"},"undo":{"redo":"Өмнөх үйлдлÑÑ ÑÑргÑÑÑ…","undo":"Хүчингүй болгох"},"wsc":{"btnIgnore":"Зөвшөөрөх","btnIgnoreAll":"Бүгдийг зөвшөөрөх","btnReplace":"Солих","btnReplaceAll":"Бүгдийг Дарж бичих","btnUndo":"Буцаах","changeTo":"Өөрчлөх","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"ДүрÑм шалгагч Ñуугаагүй байна. Татаж авахыг Ñ…Ò¯Ñч байна уу?","manyChanges":"ДүрÑм шалгаад дууÑÑан: %1 үг өөрчлөгдÑөн","noChanges":"ДүрÑм шалгаад дууÑÑан: үг өөрчлөгдөөгүй","noMispell":"ДүрÑм шалгаад дууÑÑан: Ðлдаа олдÑонгүй","noSuggestions":"- Тайлбаргүй -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Толь бичиггүй","oneChange":"ДүрÑм шалгаад дууÑÑан: 1 үг өөрчлөгдÑөн","progress":"ДүрÑм шалгаж байгаа үйл Ñвц...","title":"Spell Check","toolbar":"Үгийн дүрÑÑ… шалгах"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/ms.js b/wqflask/wqflask/static/packages/ckeditor/lang/ms.js
deleted file mode 100644
index 281a7b5d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/ms.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ms']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Browse Server","url":"URL","protocol":"Protokol","upload":"Muat Naik","uploadSubmit":"Hantar ke Server","image":"Gambar","flash":"Flash","form":"Borang","checkbox":"Checkbox","radio":"Butang Radio","textField":"Text Field","textarea":"Textarea","hiddenField":"Field Tersembunyi","button":"Butang","select":"Field Pilihan","imageButton":"Butang Bergambar","notSet":"<tidak di set>","id":"Id","name":"Nama","langDir":"Arah Tulisan","langDirLtr":"Kiri ke Kanan (LTR)","langDirRtl":"Kanan ke Kiri (RTL)","langCode":"Kod Bahasa","longDescr":"Butiran Panjang URL","cssClass":"Kelas-kelas Stylesheet","advisoryTitle":"Tajuk Makluman","cssStyle":"Stail","ok":"OK","cancel":"Batal","close":"Close","preview":"Prebiu","resize":"Resize","generalTab":"General","advancedTab":"Advanced","validateNumberFailed":"This value is not a number.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Options","target":"Sasaran","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","styles":"Stail","cssClasses":"Kelas-kelas Stylesheet","width":"Lebar","height":"Tinggi","align":"Jajaran","alignLeft":"Kiri","alignRight":"Kanan","alignCenter":"Tengah","alignJustify":"Jajaran Blok","alignTop":"Atas","alignMiddle":"Pertengahan","alignBottom":"Bawah","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Bold","italic":"Italic","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"Underline"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Salin","copyError":"Keselamatan perisian browser anda tidak membenarkan operasi salinan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+C).","cut":"Potong","cutError":"Keselamatan perisian browser anda tidak membenarkan operasi suntingan text/imej. Sila gunakan papan kekunci (Ctrl/Cmd+X).","paste":"Tampal","pasteArea":"Paste Area","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Tampal"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Otomatik","bgColorTitle":"Warna Latarbelakang","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Warna lain-lain...","panelTitle":"Colors","textColorTitle":"Warna Text"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Templat","emptyListMsg":"(Tiada Templat Disimpan)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Sila pilih templat untuk dibuka oleh editor<br>(kandungan sebenar akan hilang):","title":"Templat Kandungan"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"Cari","findOptions":"Find Options","findWhat":"Perkataan yang dicari:","matchCase":"Padanan case huruf","matchCyclic":"Match cyclic","matchWord":"Padana Keseluruhan perkataan","notFoundMsg":"Text yang dicari tidak dijumpai.","replace":"Ganti","replaceAll":"Ganti semua","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Diganti dengan:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Bawah Mutlak","alignAbsMiddle":"Pertengahan Mutlak","alignBaseline":"Garis Dasar","alignTextTop":"Atas Text","bgcolor":"Warna Latarbelakang","chkFull":"Allow Fullscreen","chkLoop":"Loop","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"Ruang Melintang","properties":"Flash Properties","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Scale","scaleAll":"Show all","scaleFit":"Exact Fit","scaleNoBorder":"No Border","title":"Flash Properties","vSpace":"Ruang Menegak","validateHSpace":"HSpace must be a number.","validateSrc":"Sila taip sambungan URL","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Saiz","voiceLabel":"Font Size","panelTitle":"Saiz"},"label":"Font","panelTitle":"Font","voiceLabel":"Font"},"forms":{"button":{"title":"Ciri-ciri Butang","text":"Teks (Nilai)","type":"Jenis","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Ciri-ciri Checkbox","radioTitle":"Ciri-ciri Butang Radio","value":"Nilai","selected":"Dipilih"},"form":{"title":"Ciri-ciri Borang","menu":"Ciri-ciri Borang","action":"Tindakan borang","method":"Cara borang dihantar","encoding":"Encoding"},"hidden":{"title":"Ciri-ciri Field Tersembunyi","name":"Nama","value":"Nilai"},"select":{"title":"Ciri-ciri Selection Field","selectInfo":"Select Info","opAvail":"Pilihan sediada","value":"Nilai","size":"Saiz","lines":"garisan","chkMulti":"Benarkan pilihan pelbagai","opText":"Teks","opValue":"Nilai","btnAdd":"Tambah Pilihan","btnModify":"Ubah Pilihan","btnUp":"Naik ke atas","btnDown":"Turun ke bawah","btnSetValue":"Set sebagai nilai terpilih","btnDelete":"Padam"},"textarea":{"title":"Ciri-ciri Textarea","cols":"Lajur","rows":"Baris"},"textfield":{"title":"Ciri-ciri Text Field","name":"Nama","value":"Nilai","charWidth":"Lebar isian","maxChars":"Isian Maksimum","type":"Jenis","typeText":"Teks","typePass":"Kata Laluan","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Format","tag_address":"Alamat","tag_div":"Perenggan (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Telah Diformat"},"horizontalrule":{"toolbar":"Masukkan Garisan Membujur"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"Sila taip URL untuk fail gambar","alt":"Text Alternatif","border":"Border","btnUpload":"Hantar ke Server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"Ruang Melintang","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info Imej","linkTab":"Sambungan","lockRatio":"Tetapkan Nisbah","menu":"Ciri-ciri Imej","resetSize":"Saiz Set Semula","title":"Ciri-ciri Imej","titleButton":"Ciri-ciri Butang Bergambar","upload":"Muat Naik","urlMissing":"Image source URL is missing.","vSpace":"Ruang Menegak","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Tambahkan Inden","outdent":"Kurangkan Inden"},"smiley":{"options":"Smiley Options","title":"Masukkan Smiley","toolbar":"Smiley"},"justify":{"block":"Jajaran Blok","center":"Jajaran Tengah","left":"Jajaran Kiri","right":"Jajaran Kanan"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Kunci Akses","advanced":"Advanced","advisoryContentType":"Jenis Kandungan Makluman","advisoryTitle":"Tajuk Makluman","anchor":{"toolbar":"Masukkan/Sunting Pautan","menu":"Ciri-ciri Pautan","title":"Ciri-ciri Pautan","name":"Nama Pautan","errorName":"Sila taip nama pautan","remove":"Remove Anchor"},"anchorId":"dengan menggunakan ID elemen","anchorName":"dengan menggunakan nama pautan","charset":"Linked Resource Charset","cssClasses":"Kelas-kelas Stylesheet","emailAddress":"Alamat E-Mail","emailBody":"Isi Kandungan Mesej","emailSubject":"Subjek Mesej","id":"Id","info":"Butiran Sambungan","langCode":"Arah Tulisan","langDir":"Arah Tulisan","langDirLTR":"Kiri ke Kanan (LTR)","langDirRTL":"Kanan ke Kiri (RTL)","menu":"Sunting Sambungan","name":"Nama","noAnchors":"(Tiada pautan terdapat dalam dokumen ini)","noEmail":"Sila taip alamat e-mail","noUrl":"Sila taip sambungan URL","other":"<lain>","popupDependent":"Bergantungan (Netscape)","popupFeatures":"Ciri Tetingkap Popup","popupFullScreen":"Skrin Penuh (IE)","popupLeft":"Posisi Kiri","popupLocationBar":"Bar Lokasi","popupMenuBar":"Bar Menu","popupResizable":"Resizable","popupScrollBars":"Bar-bar skrol","popupStatusBar":"Bar Status","popupToolbar":"Toolbar","popupTop":"Posisi Atas","rel":"Relationship","selectAnchor":"Sila pilih pautan","styles":"Stail","tabIndex":"Indeks Tab ","target":"Sasaran","targetFrame":"<bingkai>","targetFrameName":"Nama Bingkai Sasaran","targetPopup":"<tetingkap popup>","targetPopupName":"Nama Tetingkap Popup","title":"Sambungan","toAnchor":"Pautan dalam muka surat ini","toEmail":"E-Mail","toUrl":"URL","toolbar":"Masukkan/Sunting Sambungan","type":"Jenis Sambungan","unlink":"Buang Sambungan","upload":"Muat Naik"},"list":{"bulletedlist":"Senarai tidak bernombor","numberedlist":"Senarai bernombor"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"Helaian Baru"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Tampal sebagai text biasa","title":"Tampal sebagai text biasa"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Tampal dari Word","toolbar":"Tampal dari Word"},"preview":{"preview":"Prebiu"},"print":{"toolbar":"Cetak"},"removeformat":{"toolbar":"Buang Format"},"save":{"toolbar":"Simpan"},"selectall":{"toolbar":"Pilih Semua"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"Sumber"},"specialchar":{"options":"Special Character Options","title":"Sila pilih huruf istimewa","toolbar":"Masukkan Huruf Istimewa"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Stail","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Saiz Border","caption":"Keterangan","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Buangkan Sel-sel","merge":"Cantumkan Sel-sel","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Tambahan Ruang Sel","cellSpace":"Ruangan Antara Sel","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Buangkan Lajur"},"columns":"Jaluran","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"None","headersRow":"First Row","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Ciri-ciri Jadual","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Buangkan Baris"},"rows":"Barisan","summary":"Summary","title":"Ciri-ciri Jadual","toolbar":"Jadual","widthPc":"peratus","widthPx":"piksel-piksel","widthUnit":"width unit"},"undo":{"redo":"Ulangkan","undo":"Batalkan"},"wsc":{"btnIgnore":"Biar","btnIgnoreAll":"Biarkan semua","btnReplace":"Ganti","btnReplaceAll":"Gantikan Semua","btnUndo":"Batalkan","changeTo":"Tukarkan kepada","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Pemeriksa ejaan tidak dipasang. Adakah anda mahu muat turun sekarang?","manyChanges":"Pemeriksaan ejaan siap: %1 perkataan diubah","noChanges":"Pemeriksaan ejaan siap: Tiada perkataan diubah","noMispell":"Pemeriksaan ejaan siap: Tiada salah ejaan","noSuggestions":"- Tiada cadangan -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Tidak terdapat didalam kamus","oneChange":"Pemeriksaan ejaan siap: Satu perkataan telah diubah","progress":"Pemeriksaan ejaan sedang diproses...","title":"Spell Check","toolbar":"Semak Ejaan"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/nb.js b/wqflask/wqflask/static/packages/ckeditor/lang/nb.js
deleted file mode 100644
index 92e84398..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/nb.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['nb']={"editor":"Rikteksteditor","editorPanel":"Panel for rikteksteditor","common":{"editorHelp":"Trykk ALT 0 for hjelp","browseServer":"Bla gjennom tjener","url":"URL","protocol":"Protokoll","upload":"Last opp","uploadSubmit":"Send det til serveren","image":"Bilde","flash":"Flash","form":"Skjema","checkbox":"Avmerkingsboks","radio":"Alternativknapp","textField":"Tekstboks","textarea":"Tekstområde","hiddenField":"Skjult felt","button":"Knapp","select":"Rullegardinliste","imageButton":"Bildeknapp","notSet":"<ikke satt>","id":"Id","name":"Navn","langDir":"Språkretning","langDirLtr":"Venstre til høyre (VTH)","langDirRtl":"Høyre til venstre (HTV)","langCode":"Språkkode","longDescr":"Utvidet beskrivelse","cssClass":"Stilarkklasser","advisoryTitle":"Tittel","cssStyle":"Stil","ok":"OK","cancel":"Avbryt","close":"Lukk","preview":"Forhåndsvis","resize":"Dra for å skalere","generalTab":"Generelt","advancedTab":"Avansert","validateNumberFailed":"Denne verdien er ikke et tall.","confirmNewPage":"Alle ulagrede endringer som er gjort i dette innholdet vil gå tapt. Er du sikker på at du vil laste en ny side?","confirmCancel":"Du har endret noen alternativer. Er du sikker på at du vil lukke dialogvinduet?","options":"Valg","target":"Mål","targetNew":"Nytt vindu (_blank)","targetTop":"Hele vindu (_top)","targetSelf":"Samme vindu (_self)","targetParent":"Foreldrevindu (_parent)","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","styles":"Stil","cssClasses":"Stilarkklasser","width":"Bredde","height":"Høyde","align":"Juster","alignLeft":"Venstre","alignRight":"Høyre","alignCenter":"Midtjuster","alignJustify":"Blokkjuster","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","alignNone":"Ingen","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidCssLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig CSS-målingsenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig HTML-målingsenhet (px eller %).","invalidInlineStyle":"Verdi angitt for inline stil må bestå av en eller flere sett med formatet \"navn : verdi\", separert med semikolon","cssLengthTooltip":"Skriv inn et tall for en piksel-verdi eller et tall med en gyldig CSS-enhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, utilgjenglig</span>"},"about":{"copy":"Copyright &copy; $1. Alle rettigheter reservert.","dlgTitle":"Om CKEditor","help":"Se $1 for hjelp.","moreInfo":"For lisensieringsinformasjon, vennligst besøk vårt nettsted:","title":"Om CKEditor","userGuide":"CKEditors brukerveiledning"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"bidi":{"ltr":"Tekstretning fra venstre til høyre","rtl":"Tekstretning fra høyre til venstre"},"blockquote":{"toolbar":"Blokksitat"},"clipboard":{"copy":"Kopier","copyError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+C).","cut":"Klipp ut","cutError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk tastatursnarveien (Ctrl/Cmd+X).","paste":"Lim inn","pasteArea":"Innlimingsområde","pasteMsg":"Vennligst lim inn i følgende boks med tastaturet (<strong>Ctrl/Cmd+V</strong>) og trykk <strong>OK</strong>.","securityMsg":"Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.","title":"Lim inn"},"button":{"selectedLabel":"%1 (Valgt)"},"colorbutton":{"auto":"Automatisk","bgColorTitle":"Bakgrunnsfarge","colors":{"000":"Svart","800000":"Rødbrun","8B4513":"Salbrun","2F4F4F":"Grønnsvart","008080":"Blågrønn","000080":"Marineblått","4B0082":"Indigo","696969":"Mørk grå","B22222":"Mørkerød","A52A2A":"Brun","DAA520":"Lys brun","006400":"Mørk grønn","40E0D0":"Turkis","0000CD":"Medium blå","800080":"Purpur","808080":"Grå","F00":"Rød","FF8C00":"Mørk oransje","FFD700":"Gull","008000":"Grønn","0FF":"Cyan","00F":"Blå","EE82EE":"Fiolett","A9A9A9":"Svak grå","FFA07A":"Rosa-oransje","FFA500":"Oransje","FFFF00":"Gul","00FF00":"Lime","AFEEEE":"Svak turkis","ADD8E6":"Lys Blå","DDA0DD":"Plomme","D3D3D3":"Lys grå","FFF0F5":"Svak lavendelrosa","FAEBD7":"Antikk-hvit","FFFFE0":"Lys gul","F0FFF0":"Honningmelon","F0FFFF":"Svakt asurblått","F0F8FF":"Svak cyan","E6E6FA":"Lavendel","FFF":"Hvit"},"more":"Flere farger...","panelTitle":"Farger","textColorTitle":"Tekstfarge"},"colordialog":{"clear":"Tøm","highlight":"Merk","options":"Alternativer for farge","selected":"Valgt","title":"Velg farge"},"templates":{"button":"Maler","emptyListMsg":"(Ingen maler definert)","insertOption":"Erstatt gjeldende innhold","options":"Alternativer for mal","selectPromptMsg":"Velg malen du vil åpne i redigeringsverktøyet:","title":"Innholdsmaler"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Tittel","cssClassInputLabel":"Stilark-klasser","edit":"Rediger Div","inlineStyleInputLabel":"Inlinestiler","langDirLTRLabel":"Venstre til høyre (VTH)","langDirLabel":"Språkretning","langDirRTLLabel":"Høyre til venstre (HTV)","languageCodeInputLabel":" Språkkode","remove":"Fjern Div","styleSelectLabel":"Stil","title":"Sett inn Div Container","toolbar":"Sett inn Div Container"},"toolbar":{"toolbarCollapse":"Skjul verktøylinje","toolbarExpand":"Vis verktøylinje","toolbarGroups":{"document":"Dokument","clipboard":"Utklippstavle/Angre","editing":"Redigering","forms":"Skjema","basicstyles":"Basisstiler","paragraph":"Avsnitt","links":"Lenker","insert":"Innsetting","styles":"Stiler","colors":"Farger","tools":"Verktøy"},"toolbars":"Verktøylinjer for editor"},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"find":{"find":"Søk","findOptions":"Søkealternativer","findWhat":"Søk etter:","matchCase":"Skill mellom store og små bokstaver","matchCyclic":"Søk i hele dokumentet","matchWord":"Bare hele ord","notFoundMsg":"Fant ikke søketeksten.","replace":"Erstatt","replaceAll":"Erstatt alle","replaceSuccessMsg":"%1 tilfelle(r) erstattet.","replaceWith":"Erstatt med:","title":"Søk og erstatt"},"fakeobjects":{"anchor":"Anker","flash":"Flash-animasjon","hiddenfield":"Skjult felt","iframe":"IFrame","unknown":"Ukjent objekt"},"flash":{"access":"Scripttilgang","accessAlways":"Alltid","accessNever":"Aldri","accessSameDomain":"Samme domene","alignAbsBottom":"Abs bunn","alignAbsMiddle":"Abs midten","alignBaseline":"Bunnlinje","alignTextTop":"Tekst topp","bgcolor":"Bakgrunnsfarge","chkFull":"Tillat fullskjerm","chkLoop":"Loop","chkMenu":"Slå på Flash-meny","chkPlay":"Autospill","flashvars":"Variabler for flash","hSpace":"HMarg","properties":"Egenskaper for Flash-objekt","propertiesTab":"Egenskaper","quality":"Kvalitet","qualityAutoHigh":"Auto høy","qualityAutoLow":"Auto lav","qualityBest":"Best","qualityHigh":"Høy","qualityLow":"Lav","qualityMedium":"Medium","scale":"Skaler","scaleAll":"Vis alt","scaleFit":"Skaler til å passe","scaleNoBorder":"Ingen ramme","title":"Flash-egenskaper","vSpace":"VMarg","validateHSpace":"HMarg må være et tall.","validateSrc":"Vennligst skriv inn lenkens url.","validateVSpace":"VMarg må være et tall.","windowMode":"Vindumodus","windowModeOpaque":"Opaque","windowModeTransparent":"Gjennomsiktig","windowModeWindow":"Vindu"},"font":{"fontSize":{"label":"Størrelse","voiceLabel":"Skriftstørrelse","panelTitle":"Skriftstørrelse"},"label":"Skrift","panelTitle":"Skrift","voiceLabel":"Font"},"forms":{"button":{"title":"Egenskaper for knapp","text":"Tekst (verdi)","type":"Type","typeBtn":"Knapp","typeSbm":"Send","typeRst":"Nullstill"},"checkboxAndRadio":{"checkboxTitle":"Egenskaper for avmerkingsboks","radioTitle":"Egenskaper for alternativknapp","value":"Verdi","selected":"Valgt"},"form":{"title":"Egenskaper for skjema","menu":"Egenskaper for skjema","action":"Handling","method":"Metode","encoding":"Encoding"},"hidden":{"title":"Egenskaper for skjult felt","name":"Navn","value":"Verdi"},"select":{"title":"Egenskaper for rullegardinliste","selectInfo":"Info","opAvail":"Tilgjenglige alternativer","value":"Verdi","size":"Størrelse","lines":"Linjer","chkMulti":"Tillat flervalg","opText":"Tekst","opValue":"Verdi","btnAdd":"Legg til","btnModify":"Endre","btnUp":"Opp","btnDown":"Ned","btnSetValue":"Sett som valgt","btnDelete":"Slett"},"textarea":{"title":"Egenskaper for tekstområde","cols":"Kolonner","rows":"Rader"},"textfield":{"title":"Egenskaper for tekstfelt","name":"Navn","value":"Verdi","charWidth":"Tegnbredde","maxChars":"Maks antall tegn","type":"Type","typeText":"Tekst","typePass":"Passord","typeEmail":"Epost","typeSearch":"Søk","typeTel":"Telefonnummer","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Avsnittsformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formatert"},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"iframe":{"border":"Viss ramme rundt iframe","noUrl":"Vennligst skriv inn URL for iframe","scrolling":"Aktiver scrollefelt","title":"Egenskaper for IFrame","toolbar":"IFrame"},"image":{"alertUrl":"Vennligst skriv bilde-urlen","alt":"Alternativ tekst","border":"Ramme","btnUpload":"Send det til serveren","button2Img":"Vil du endre den valgte bildeknappen til et vanlig bilde?","hSpace":"HMarg","img2Button":"Vil du endre det valgte bildet til en bildeknapp?","infoTab":"Bildeinformasjon","linkTab":"Lenke","lockRatio":"Lås forhold","menu":"Bildeegenskaper","resetSize":"Tilbakestill størrelse","title":"Bildeegenskaper","titleButton":"Egenskaper for bildeknapp","upload":"Last opp","urlMissing":"Bildets adresse mangler.","vSpace":"VMarg","validateBorder":"Ramme må være et heltall.","validateHSpace":"HMarg må være et heltall.","validateVSpace":"VMarg må være et heltall."},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"smiley":{"options":"Alternativer for smil","title":"Sett inn smil","toolbar":"Smil"},"justify":{"block":"Blokkjuster","center":"Midtstill","left":"Venstrejuster","right":"Høyrejuster"},"language":{"button":"Sett språk","remove":"Fjern språk"},"link":{"acccessKey":"Aksessknapp","advanced":"Avansert","advisoryContentType":"Type","advisoryTitle":"Tittel","anchor":{"toolbar":"Sett inn/Rediger anker","menu":"Egenskaper for anker","title":"Egenskaper for anker","name":"Ankernavn","errorName":"Vennligst skriv inn ankernavnet","remove":"Fjern anker"},"anchorId":"Element etter ID","anchorName":"Anker etter navn","charset":"Lenket tegnsett","cssClasses":"Stilarkklasser","emailAddress":"E-postadresse","emailBody":"Melding","emailSubject":"Meldingsemne","id":"Id","info":"Lenkeinfo","langCode":"Språkkode","langDir":"Språkretning","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","menu":"Rediger lenke","name":"Navn","noAnchors":"(Ingen anker i dokumentet)","noEmail":"Vennligst skriv inn e-postadressen","noUrl":"Vennligst skriv inn lenkens URL","other":"<annen>","popupDependent":"Avhenging (Netscape)","popupFeatures":"Egenskaper for popup-vindu","popupFullScreen":"Fullskjerm (IE)","popupLeft":"Venstre posisjon","popupLocationBar":"Adresselinje","popupMenuBar":"Menylinje","popupResizable":"Skalerbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Verktøylinje","popupTop":"Topp-posisjon","rel":"Relasjon (rel)","selectAnchor":"Velg et anker","styles":"Stil","tabIndex":"Tabindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Målramme","targetPopup":"<popup-vindu>","targetPopupName":"Navn på popup-vindu","title":"Lenke","toAnchor":"Lenke til anker i teksten","toEmail":"E-post","toUrl":"URL","toolbar":"Sett inn/Rediger lenke","type":"Lenketype","unlink":"Fjern lenke","upload":"Last opp"},"list":{"bulletedlist":"Legg til/Fjern punktmerket liste","numberedlist":"Legg til/Fjern nummerert liste"},"liststyle":{"armenian":"Armensk nummerering","bulletedTitle":"Egenskaper for punktmerket liste","circle":"Sirkel","decimal":"Tall (1, 2, 3, osv.)","decimalLeadingZero":"Tall, med førstesiffer null (01, 02, 03, osv.)","disc":"Disk","georgian":"Georgisk nummerering (an, ban, gan, osv.)","lowerAlpha":"Alfabetisk, små (a, b, c, d, e, osv.)","lowerGreek":"Gresk, små (alpha, beta, gamma, osv.)","lowerRoman":"Romertall, små (i, ii, iii, iv, v, osv.)","none":"Ingen","notset":"<ikke satt>","numberedTitle":"Egenskaper for nummerert liste","square":"Firkant","start":"Start","type":"Type","upperAlpha":"Alfabetisk, store (A, B, C, D, E, osv.)","upperRoman":"Romertall, store (I, II, III, IV, V, osv.)","validateStartNumber":"Starten på listen må være et heltall."},"magicline":{"title":"Sett inn nytt avsnitt her"},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"newpage":{"toolbar":"Ny side"},"pagebreak":{"alt":"Sideskift","toolbar":"Sett inn sideskift for utskrift"},"pastetext":{"button":"Lim inn som ren tekst","title":"Lim inn som ren tekst"},"pastefromword":{"confirmCleanup":"Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?","error":"Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil","title":"Lim inn fra Word","toolbar":"Lim inn fra Word"},"preview":{"preview":"Forhåndsvis"},"print":{"toolbar":"Skriv ut"},"removeformat":{"toolbar":"Fjern formatering"},"save":{"toolbar":"Lagre"},"selectall":{"toolbar":"Merk alt"},"showblocks":{"toolbar":"Vis blokker"},"sourcearea":{"toolbar":"Kilde"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"scayt":{"btn_about":"Om SCAYT","btn_dictionaries":"Ordbøker","btn_disable":"Slå av SCAYT","btn_enable":"Slå på SCAYT","btn_langs":"Språk","btn_options":"Valg","text_title":""},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"table":{"border":"Rammestørrelse","caption":"Tittel","cell":{"menu":"Celle","insertBefore":"Sett inn celle før","insertAfter":"Sett inn celle etter","deleteCell":"Slett celler","merge":"Slå sammen celler","mergeRight":"Slå sammen høyre","mergeDown":"Slå sammen ned","splitHorizontal":"Del celle horisontalt","splitVertical":"Del celle vertikalt","title":"Celleegenskaper","cellType":"Celletype","rowSpan":"Radspenn","colSpan":"Kolonnespenn","wordWrap":"Tekstbrytning","hAlign":"Horisontal justering","vAlign":"Vertikal justering","alignBaseline":"Grunnlinje","bgColor":"Bakgrunnsfarge","borderColor":"Rammefarge","data":"Data","header":"Overskrift","yes":"Ja","no":"Nei","invalidWidth":"Cellebredde må være et tall.","invalidHeight":"Cellehøyde må være et tall.","invalidRowSpan":"Radspenn må være et heltall.","invalidColSpan":"Kolonnespenn må være et heltall.","chooseColor":"Velg"},"cellPad":"Cellepolstring","cellSpace":"Cellemarg","column":{"menu":"Kolonne","insertBefore":"Sett inn kolonne før","insertAfter":"Sett inn kolonne etter","deleteColumn":"Slett kolonner"},"columns":"Kolonner","deleteTable":"Slett tabell","headers":"Overskrifter","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første rad","invalidBorder":"Rammestørrelse må være et tall.","invalidCellPadding":"Cellepolstring må være et positivt tall.","invalidCellSpacing":"Cellemarg må være et positivt tall.","invalidCols":"Antall kolonner må være et tall større enn 0.","invalidHeight":"Tabellhøyde må være et tall.","invalidRows":"Antall rader må være et tall større enn 0.","invalidWidth":"Tabellbredde må være et tall.","menu":"Egenskaper for tabell","row":{"menu":"Rader","insertBefore":"Sett inn rad før","insertAfter":"Sett inn rad etter","deleteRow":"Slett rader"},"rows":"Rader","summary":"Sammendrag","title":"Egenskaper for tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"piksler","widthUnit":"Bredde-enhet"},"undo":{"redo":"Gjør om","undo":"Angre"},"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer alle","btnReplace":"Erstatt","btnReplaceAll":"Erstatt alle","btnUndo":"Angre","changeTo":"Endre til","errorLoading":"Feil under lasting av applikasjonstjenestetjener: %s.","ieSpellDownload":"Stavekontroll er ikke installert. Vil du laste den ned nå?","manyChanges":"Stavekontroll fullført: %1 ord endret","noChanges":"Stavekontroll fullført: ingen ord endret","noMispell":"Stavekontroll fullført: ingen feilstavinger funnet","noSuggestions":"- Ingen forslag -","notAvailable":"Beklager, tjenesten er utilgjenglig nå.","notInDic":"Ikke i ordboken","oneChange":"Stavekontroll fullført: Ett ord endret","progress":"Stavekontroll pågår...","title":"Stavekontroll","toolbar":"Stavekontroll"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/nl.js b/wqflask/wqflask/static/packages/ckeditor/lang/nl.js
deleted file mode 100644
index 21947656..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/nl.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['nl']={"editor":"Tekstverwerker","editorPanel":"Tekstverwerker beheerpaneel","common":{"editorHelp":"Druk ALT 0 voor hulp","browseServer":"Bladeren op server","url":"URL","protocol":"Protocol","upload":"Upload","uploadSubmit":"Naar server verzenden","image":"Afbeelding","flash":"Flash","form":"Formulier","checkbox":"Selectievinkje","radio":"Keuzerondje","textField":"Tekstveld","textarea":"Tekstvak","hiddenField":"Verborgen veld","button":"Knop","select":"Selectieveld","imageButton":"Afbeeldingsknop","notSet":"<niet ingevuld>","id":"Id","name":"Naam","langDir":"Schrijfrichting","langDirLtr":"Links naar rechts (LTR)","langDirRtl":"Rechts naar links (RTL)","langCode":"Taalcode","longDescr":"Lange URL-omschrijving","cssClass":"Stylesheet-klassen","advisoryTitle":"Adviserende titel","cssStyle":"Stijl","ok":"OK","cancel":"Annuleren","close":"Sluiten","preview":"Voorbeeld","resize":"Sleep om te herschalen","generalTab":"Algemeen","advancedTab":"Geavanceerd","validateNumberFailed":"Deze waarde is geen geldig getal.","confirmNewPage":"Alle aangebrachte wijzigingen gaan verloren. Weet u zeker dat u een nieuwe pagina wilt openen?","confirmCancel":"Enkele opties zijn gewijzigd. Weet u zeker dat u dit dialoogvenster wilt sluiten?","options":"Opties","target":"Doelvenster","targetNew":"Nieuw venster (_blank)","targetTop":"Hele venster (_top)","targetSelf":"Zelfde venster (_self)","targetParent":"Origineel venster (_parent)","langDirLTR":"Links naar rechts (LTR)","langDirRTL":"Rechts naar links (RTL)","styles":"Stijl","cssClasses":"Stylesheet-klassen","width":"Breedte","height":"Hoogte","align":"Uitlijning","alignLeft":"Links","alignRight":"Rechts","alignCenter":"Centreren","alignJustify":"Uitvullen","alignTop":"Boven","alignMiddle":"Midden","alignBottom":"Onder","alignNone":"Geen","invalidValue":"Ongeldige waarde.","invalidHeight":"De hoogte moet een getal zijn.","invalidWidth":"De breedte moet een getal zijn.","invalidCssLength":"Waarde in veld \"%1\" moet een positief nummer zijn, met of zonder een geldige CSS meeteenheid (px, %, in, cm, mm, em, ex, pt of pc).","invalidHtmlLength":"Waarde in veld \"%1\" moet een positief nummer zijn, met of zonder een geldige HTML meeteenheid (px of %).","invalidInlineStyle":"Waarde voor de online stijl moet bestaan uit een of meerdere tupels met het formaat \"naam : waarde\", gescheiden door puntkomma's.","cssLengthTooltip":"Geef een nummer in voor een waarde in pixels of geef een nummer in met een geldige CSS eenheid (px, %, in, cm, mm, em, ex, pt, of pc).","unavailable":"%1<span class=\"cke_accessibility\">, niet beschikbaar</span>"},"about":{"copy":"Copyright &copy; $1. Alle rechten voorbehouden.","dlgTitle":"Over CKEditor","help":"Bekijk de $1 voor hulp.","moreInfo":"Bezoek onze website voor licentieinformatie:","title":"Over CKEditor","userGuide":"CKEditor gebruiksaanwijzing"},"basicstyles":{"bold":"Vet","italic":"Cursief","strike":"Doorhalen","subscript":"Subscript","superscript":"Superscript","underline":"Onderstrepen"},"bidi":{"ltr":"Schrijfrichting van links naar rechts","rtl":"Schrijfrichting van rechts naar links"},"blockquote":{"toolbar":"Citaatblok"},"clipboard":{"copy":"Kopiëren","copyError":"De beveiligingsinstelling van de browser verhinderen het automatisch kopiëren. Gebruik de sneltoets Ctrl/Cmd+C van het toetsenbord.","cut":"Knippen","cutError":"De beveiligingsinstelling van de browser verhinderen het automatisch knippen. Gebruik de sneltoets Ctrl/Cmd+X van het toetsenbord.","paste":"Plakken","pasteArea":"Plakgebied","pasteMsg":"Plak de tekst in het volgende vak gebruikmakend van uw toetsenbord (<strong>Ctrl/Cmd+V</strong>) en klik op OK.","securityMsg":"Door de beveiligingsinstellingen van uw browser is het niet mogelijk om direct vanuit het klembord in de editor te plakken. Middels opnieuw plakken in dit venster kunt u de tekst alsnog plakken in de editor.","title":"Plakken"},"button":{"selectedLabel":"%1 (Geselecteerd)"},"colorbutton":{"auto":"Automatisch","bgColorTitle":"Achtergrondkleur","colors":{"000":"Zwart","800000":"Kastanjebruin","8B4513":"Chocoladebruin","2F4F4F":"Donkerleigrijs","008080":"Blauwgroen","000080":"Marine","4B0082":"Indigo","696969":"Donkergrijs","B22222":"Baksteen","A52A2A":"Bruin","DAA520":"Donkergeel","006400":"Donkergroen","40E0D0":"Turquoise","0000CD":"Middenblauw","800080":"Paars","808080":"Grijs","F00":"Rood","FF8C00":"Donkeroranje","FFD700":"Goud","008000":"Groen","0FF":"Cyaan","00F":"Blauw","EE82EE":"Violet","A9A9A9":"Donkergrijs","FFA07A":"Lichtzalm","FFA500":"Oranje","FFFF00":"Geel","00FF00":"Felgroen","AFEEEE":"Lichtturquoise","ADD8E6":"Lichtblauw","DDA0DD":"Pruim","D3D3D3":"Lichtgrijs","FFF0F5":"Linnen","FAEBD7":"Ivoor","FFFFE0":"Lichtgeel","F0FFF0":"Honingdauw","F0FFFF":"Azuur","F0F8FF":"Licht hemelsblauw","E6E6FA":"Lavendel","FFF":"Wit"},"more":"Meer kleuren...","panelTitle":"Kleuren","textColorTitle":"Tekstkleur"},"colordialog":{"clear":"Wissen","highlight":"Actief","options":"Kleuropties","selected":"Geselecteerde kleur","title":"Selecteer kleur"},"templates":{"button":"Sjablonen","emptyListMsg":"(Geen sjablonen gedefinieerd)","insertOption":"Vervang de huidige inhoud","options":"Template opties","selectPromptMsg":"Selecteer het sjabloon dat in de editor geopend moet worden (de actuele inhoud gaat verloren):","title":"Inhoud sjablonen"},"contextmenu":{"options":"Contextmenu opties"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Adviserende titel","cssClassInputLabel":"Stylesheet klassen","edit":"Div wijzigen","inlineStyleInputLabel":"Inline stijl","langDirLTRLabel":"Links naar rechts (LTR)","langDirLabel":"Schrijfrichting","langDirRTLLabel":"Rechts naar links (RTL)","languageCodeInputLabel":" Taalcode","remove":"Div verwijderen","styleSelectLabel":"Stijl","title":"Div aanmaken","toolbar":"Div aanmaken"},"toolbar":{"toolbarCollapse":"Werkbalk inklappen","toolbarExpand":"Werkbalk uitklappen","toolbarGroups":{"document":"Document","clipboard":"Klembord/Ongedaan maken","editing":"Bewerken","forms":"Formulieren","basicstyles":"Basisstijlen","paragraph":"Paragraaf","links":"Links","insert":"Invoegen","styles":"Stijlen","colors":"Kleuren","tools":"Toepassingen"},"toolbars":"Werkbalken"},"elementspath":{"eleLabel":"Elementenpad","eleTitle":"%1 element"},"find":{"find":"Zoeken","findOptions":"Zoekopties","findWhat":"Zoeken naar:","matchCase":"Hoofdlettergevoelig","matchCyclic":"Doorlopend zoeken","matchWord":"Hele woord moet voorkomen","notFoundMsg":"De opgegeven tekst is niet gevonden.","replace":"Vervangen","replaceAll":"Alles vervangen","replaceSuccessMsg":"%1 resultaten vervangen.","replaceWith":"Vervangen met:","title":"Zoeken en vervangen"},"fakeobjects":{"anchor":"Interne link","flash":"Flash animatie","hiddenfield":"Verborgen veld","iframe":"IFrame","unknown":"Onbekend object"},"flash":{"access":"Script toegang","accessAlways":"Altijd","accessNever":"Nooit","accessSameDomain":"Zelfde domeinnaam","alignAbsBottom":"Absoluut-onder","alignAbsMiddle":"Absoluut-midden","alignBaseline":"Basislijn","alignTextTop":"Boven tekst","bgcolor":"Achtergrondkleur","chkFull":"Schermvullend toestaan","chkLoop":"Herhalen","chkMenu":"Flashmenu's inschakelen","chkPlay":"Automatisch afspelen","flashvars":"Variabelen voor Flash","hSpace":"HSpace","properties":"Eigenschappen Flash","propertiesTab":"Eigenschappen","quality":"Kwaliteit","qualityAutoHigh":"Automatisch hoog","qualityAutoLow":"Automatisch laag","qualityBest":"Beste","qualityHigh":"Hoog","qualityLow":"Laag","qualityMedium":"Gemiddeld","scale":"Schaal","scaleAll":"Alles tonen","scaleFit":"Precies passend","scaleNoBorder":"Geen rand","title":"Eigenschappen Flash","vSpace":"VSpace","validateHSpace":"De HSpace moet een getal zijn.","validateSrc":"De URL mag niet leeg zijn.","validateVSpace":"De VSpace moet een getal zijn.","windowMode":"Venster modus","windowModeOpaque":"Ondoorzichtig","windowModeTransparent":"Doorzichtig","windowModeWindow":"Venster"},"font":{"fontSize":{"label":"Lettergrootte","voiceLabel":"Lettergrootte","panelTitle":"Lettergrootte"},"label":"Lettertype","panelTitle":"Lettertype","voiceLabel":"Lettertype"},"forms":{"button":{"title":"Eigenschappen knop","text":"Tekst (waarde)","type":"Soort","typeBtn":"Knop","typeSbm":"Versturen","typeRst":"Leegmaken"},"checkboxAndRadio":{"checkboxTitle":"Eigenschappen aanvinkvakje","radioTitle":"Eigenschappen selectievakje","value":"Waarde","selected":"Geselecteerd"},"form":{"title":"Eigenschappen formulier","menu":"Eigenschappen formulier","action":"Actie","method":"Methode","encoding":"Codering"},"hidden":{"title":"Eigenschappen verborgen veld","name":"Naam","value":"Waarde"},"select":{"title":"Eigenschappen selectieveld","selectInfo":"Informatie","opAvail":"Beschikbare opties","value":"Waarde","size":"Grootte","lines":"Regels","chkMulti":"Gecombineerde selecties toestaan","opText":"Tekst","opValue":"Waarde","btnAdd":"Toevoegen","btnModify":"Wijzigen","btnUp":"Omhoog","btnDown":"Omlaag","btnSetValue":"Als geselecteerde waarde instellen","btnDelete":"Verwijderen"},"textarea":{"title":"Eigenschappen tekstvak","cols":"Kolommen","rows":"Rijen"},"textfield":{"title":"Eigenschappen tekstveld","name":"Naam","value":"Waarde","charWidth":"Breedte (tekens)","maxChars":"Maximum aantal tekens","type":"Soort","typeText":"Tekst","typePass":"Wachtwoord","typeEmail":"E-mail","typeSearch":"Zoeken","typeTel":"Telefoonnummer","typeUrl":"URL"}},"format":{"label":"Opmaak","panelTitle":"Opmaak","tag_address":"Adres","tag_div":"Normaal (DIV)","tag_h1":"Kop 1","tag_h2":"Kop 2","tag_h3":"Kop 3","tag_h4":"Kop 4","tag_h5":"Kop 5","tag_h6":"Kop 6","tag_p":"Normaal","tag_pre":"Met opmaak"},"horizontalrule":{"toolbar":"Horizontale lijn invoegen"},"iframe":{"border":"Framerand tonen","noUrl":"Vul de IFrame URL in","scrolling":"Scrollbalken inschakelen","title":"IFrame-eigenschappen","toolbar":"IFrame"},"image":{"alertUrl":"Geef de URL van de afbeelding","alt":"Alternatieve tekst","border":"Rand","btnUpload":"Naar server verzenden","button2Img":"Wilt u de geselecteerde afbeeldingsknop vervangen door een eenvoudige afbeelding?","hSpace":"HSpace","img2Button":"Wilt u de geselecteerde afbeelding vervangen door een afbeeldingsknop?","infoTab":"Informatie afbeelding","linkTab":"Link","lockRatio":"Afmetingen vergrendelen","menu":"Eigenschappen afbeelding","resetSize":"Afmetingen resetten","title":"Eigenschappen afbeelding","titleButton":"Eigenschappen afbeeldingsknop","upload":"Upload","urlMissing":"De URL naar de afbeelding ontbreekt.","vSpace":"VSpace","validateBorder":"Rand moet een heel nummer zijn.","validateHSpace":"HSpace moet een heel nummer zijn.","validateVSpace":"VSpace moet een heel nummer zijn."},"indent":{"indent":"Inspringing vergroten","outdent":"Inspringing verkleinen"},"smiley":{"options":"Smiley opties","title":"Smiley invoegen","toolbar":"Smiley"},"justify":{"block":"Uitvullen","center":"Centreren","left":"Links uitlijnen","right":"Rechts uitlijnen"},"language":{"button":"Taal instellen","remove":"Taal verwijderen"},"link":{"acccessKey":"Toegangstoets","advanced":"Geavanceerd","advisoryContentType":"Aanbevolen content-type","advisoryTitle":"Adviserende titel","anchor":{"toolbar":"Interne link","menu":"Eigenschappen interne link","title":"Eigenschappen interne link","name":"Naam interne link","errorName":"Geef de naam van de interne link op","remove":"Interne link verwijderen"},"anchorId":"Op kenmerk interne link","anchorName":"Op naam interne link","charset":"Karakterset van gelinkte bron","cssClasses":"Stylesheet-klassen","emailAddress":"E-mailadres","emailBody":"Inhoud bericht","emailSubject":"Onderwerp bericht","id":"Id","info":"Linkomschrijving","langCode":"Taalcode","langDir":"Schrijfrichting","langDirLTR":"Links naar rechts (LTR)","langDirRTL":"Rechts naar links (RTL)","menu":"Link wijzigen","name":"Naam","noAnchors":"(Geen interne links in document gevonden)","noEmail":"Geef een e-mailadres","noUrl":"Geef de link van de URL","other":"<ander>","popupDependent":"Afhankelijk (Netscape)","popupFeatures":"Instellingen popupvenster","popupFullScreen":"Volledig scherm (IE)","popupLeft":"Positie links","popupLocationBar":"Locatiemenu","popupMenuBar":"Menubalk","popupResizable":"Herschaalbaar","popupScrollBars":"Schuifbalken","popupStatusBar":"Statusbalk","popupToolbar":"Werkbalk","popupTop":"Positie boven","rel":"Relatie","selectAnchor":"Kies een interne link","styles":"Stijl","tabIndex":"Tabvolgorde","target":"Doelvenster","targetFrame":"<frame>","targetFrameName":"Naam doelframe","targetPopup":"<popupvenster>","targetPopupName":"Naam popupvenster","title":"Link","toAnchor":"Interne link in pagina","toEmail":"E-mail","toUrl":"URL","toolbar":"Link invoegen/wijzigen","type":"Linktype","unlink":"Link verwijderen","upload":"Upload"},"list":{"bulletedlist":"Opsomming invoegen","numberedlist":"Genummerde lijst invoegen"},"liststyle":{"armenian":"Armeense nummering","bulletedTitle":"Eigenschappen lijst met opsommingstekens","circle":"Cirkel","decimal":"Cijfers (1, 2, 3, etc.)","decimalLeadingZero":"Cijfers beginnen met nul (01, 02, 03, etc.)","disc":"Schijf","georgian":"Georgische nummering (an, ban, gan, etc.)","lowerAlpha":"Kleine letters (a, b, c, d, e, etc.)","lowerGreek":"Grieks kleine letters (alpha, beta, gamma, etc.)","lowerRoman":"Romeins kleine letters (i, ii, iii, iv, v, etc.)","none":"Geen","notset":"<niet gezet>","numberedTitle":"Eigenschappen genummerde lijst","square":"Vierkant","start":"Start","type":"Type","upperAlpha":"Hoofdletters (A, B, C, D, E, etc.)","upperRoman":"Romeinse hoofdletters (I, II, III, IV, V, etc.)","validateStartNumber":"Startnummer van de lijst moet een heel nummer zijn."},"magicline":{"title":"Hier paragraaf invoeren"},"maximize":{"maximize":"Maximaliseren","minimize":"Minimaliseren"},"newpage":{"toolbar":"Nieuwe pagina"},"pagebreak":{"alt":"Pagina-einde","toolbar":"Pagina-einde invoegen"},"pastetext":{"button":"Plakken als platte tekst","title":"Plakken als platte tekst"},"pastefromword":{"confirmCleanup":"De tekst die u wilt plakken lijkt gekopieerd te zijn vanuit Word. Wilt u de tekst opschonen voordat deze geplakt wordt?","error":"Het was niet mogelijk om de geplakte tekst op te schonen door een interne fout","title":"Plakken vanuit Word","toolbar":"Plakken vanuit Word"},"preview":{"preview":"Voorbeeld"},"print":{"toolbar":"Afdrukken"},"removeformat":{"toolbar":"Opmaak verwijderen"},"save":{"toolbar":"Opslaan"},"selectall":{"toolbar":"Alles selecteren"},"showblocks":{"toolbar":"Toon blokken"},"sourcearea":{"toolbar":"Broncode"},"specialchar":{"options":"Speciale tekens opties","title":"Selecteer speciaal teken","toolbar":"Speciaal teken invoegen"},"scayt":{"btn_about":"Over SCAYT","btn_dictionaries":"Woordenboeken","btn_disable":"SCAYT uitschakelen","btn_enable":"SCAYT inschakelen","btn_langs":"Talen","btn_options":"Opties","text_title":""},"stylescombo":{"label":"Stijl","panelTitle":"Opmaakstijlen","panelTitle1":"Blok stijlen","panelTitle2":"Inline stijlen","panelTitle3":"Object stijlen"},"table":{"border":"Randdikte","caption":"Onderschrift","cell":{"menu":"Cel","insertBefore":"Voeg cel in voor","insertAfter":"Voeg cel in na","deleteCell":"Cellen verwijderen","merge":"Cellen samenvoegen","mergeRight":"Voeg samen naar rechts","mergeDown":"Voeg samen naar beneden","splitHorizontal":"Splits cel horizontaal","splitVertical":"Splits cel vertikaal","title":"Celeigenschappen","cellType":"Celtype","rowSpan":"Rijen samenvoegen","colSpan":"Kolommen samenvoegen","wordWrap":"Automatische terugloop","hAlign":"Horizontale uitlijning","vAlign":"Verticale uitlijning","alignBaseline":"Tekstregel","bgColor":"Achtergrondkleur","borderColor":"Randkleur","data":"Gegevens","header":"Kop","yes":"Ja","no":"Nee","invalidWidth":"De celbreedte moet een getal zijn.","invalidHeight":"De celhoogte moet een getal zijn.","invalidRowSpan":"Rijen samenvoegen moet een heel getal zijn.","invalidColSpan":"Kolommen samenvoegen moet een heel getal zijn.","chooseColor":"Kies"},"cellPad":"Celopvulling","cellSpace":"Celafstand","column":{"menu":"Kolom","insertBefore":"Voeg kolom in voor","insertAfter":"Voeg kolom in na","deleteColumn":"Kolommen verwijderen"},"columns":"Kolommen","deleteTable":"Tabel verwijderen","headers":"Koppen","headersBoth":"Beide","headersColumn":"Eerste kolom","headersNone":"Geen","headersRow":"Eerste rij","invalidBorder":"De randdikte moet een getal zijn.","invalidCellPadding":"Celopvulling moet een getal zijn.","invalidCellSpacing":"Celafstand moet een getal zijn.","invalidCols":"Het aantal kolommen moet een getal zijn groter dan 0.","invalidHeight":"De tabelhoogte moet een getal zijn.","invalidRows":"Het aantal rijen moet een getal zijn groter dan 0.","invalidWidth":"De tabelbreedte moet een getal zijn.","menu":"Tabeleigenschappen","row":{"menu":"Rij","insertBefore":"Voeg rij in voor","insertAfter":"Voeg rij in na","deleteRow":"Rijen verwijderen"},"rows":"Rijen","summary":"Samenvatting","title":"Tabeleigenschappen","toolbar":"Tabel","widthPc":"procent","widthPx":"pixels","widthUnit":"eenheid breedte"},"undo":{"redo":"Opnieuw uitvoeren","undo":"Ongedaan maken"},"wsc":{"btnIgnore":"Negeren","btnIgnoreAll":"Alles negeren","btnReplace":"Vervangen","btnReplaceAll":"Alles vervangen","btnUndo":"Ongedaan maken","changeTo":"Wijzig in","errorLoading":"Er is een fout opgetreden bij het laden van de dienst: %s.","ieSpellDownload":"De spellingscontrole is niet geïnstalleerd. Wilt u deze nu downloaden?","manyChanges":"Klaar met spellingscontrole: %1 woorden aangepast","noChanges":"Klaar met spellingscontrole: geen woorden aangepast","noMispell":"Klaar met spellingscontrole: geen fouten gevonden","noSuggestions":"- Geen suggesties -","notAvailable":"Excuses, deze dienst is momenteel niet beschikbaar.","notInDic":"Niet in het woordenboek","oneChange":"Klaar met spellingscontrole: één woord aangepast","progress":"Bezig met spellingscontrole...","title":"Spellingscontrole","toolbar":"Spellingscontrole"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/no.js b/wqflask/wqflask/static/packages/ckeditor/lang/no.js
deleted file mode 100644
index b4e02d76..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/no.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['no']={"editor":"Rikteksteditor","editorPanel":"Panel for rikteksteditor","common":{"editorHelp":"Trykk ALT 0 for hjelp","browseServer":"Bla igjennom server","url":"URL","protocol":"Protokoll","upload":"Last opp","uploadSubmit":"Send det til serveren","image":"Bilde","flash":"Flash","form":"Skjema","checkbox":"Avmerkingsboks","radio":"Alternativknapp","textField":"Tekstboks","textarea":"Tekstområde","hiddenField":"Skjult felt","button":"Knapp","select":"Rullegardinliste","imageButton":"Bildeknapp","notSet":"<ikke satt>","id":"Id","name":"Navn","langDir":"Språkretning","langDirLtr":"Venstre til høyre (VTH)","langDirRtl":"Høyre til venstre (HTV)","langCode":"Språkkode","longDescr":"Utvidet beskrivelse","cssClass":"Stilarkklasser","advisoryTitle":"Tittel","cssStyle":"Stil","ok":"OK","cancel":"Avbryt","close":"Lukk","preview":"Forhåndsvis","resize":"Dra for å skalere","generalTab":"Generelt","advancedTab":"Avansert","validateNumberFailed":"Denne verdien er ikke et tall.","confirmNewPage":"Alle ulagrede endringer som er gjort i dette innholdet vil bli tapt. Er du sikker på at du vil laste en ny side?","confirmCancel":"Noen av valgene har blitt endret. Er du sikker på at du vil lukke dialogen?","options":"Valg","target":"Mål","targetNew":"Nytt vindu (_blank)","targetTop":"Hele vindu (_top)","targetSelf":"Samme vindu (_self)","targetParent":"Foreldrevindu (_parent)","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","styles":"Stil","cssClasses":"Stilarkklasser","width":"Bredde","height":"Høyde","align":"Juster","alignLeft":"Venstre","alignRight":"Høyre","alignCenter":"Midtjuster","alignJustify":"Blokkjuster","alignTop":"Topp","alignMiddle":"Midten","alignBottom":"Bunn","alignNone":"Ingen","invalidValue":"Ugyldig verdi.","invalidHeight":"Høyde må være et tall.","invalidWidth":"Bredde må være et tall.","invalidCssLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig CSS-målingsenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Den angitte verdien for feltet \"%1\" må være et positivt tall med eller uten en gyldig HTML-målingsenhet (px eller %).","invalidInlineStyle":"Verdi angitt for inline stil må bestå av en eller flere sett med formatet \"navn : verdi\", separert med semikolon","cssLengthTooltip":"Skriv inn et tall for en piksel-verdi eller et tall med en gyldig CSS-enhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, utilgjenglig</span>"},"about":{"copy":"Copyright &copy; $1. Alle rettigheter reservert.","dlgTitle":"Om CKEditor","help":"Se $1 for hjelp.","moreInfo":"For lisensieringsinformasjon, vennligst besøk vårt nettsted:","title":"Om CKEditor","userGuide":"CKEditors brukerveiledning"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Gjennomstreking","subscript":"Senket skrift","superscript":"Hevet skrift","underline":"Understreking"},"bidi":{"ltr":"Tekstretning fra venstre til høyre","rtl":"Tekstretning fra høyre til venstre"},"blockquote":{"toolbar":"Blokksitat"},"clipboard":{"copy":"Kopier","copyError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk kopiering av tekst. Vennligst bruk snarveien (Ctrl/Cmd+C).","cut":"Klipp ut","cutError":"Din nettlesers sikkerhetsinstillinger tillater ikke automatisk utklipping av tekst. Vennligst bruk snarveien (Ctrl/Cmd+X).","paste":"Lim inn","pasteArea":"Innlimingsområde","pasteMsg":"Vennligst lim inn i følgende boks med tastaturet (<STRONG>Ctrl/Cmd+V</STRONG>) og trykk <STRONG>OK</STRONG>.","securityMsg":"Din nettlesers sikkerhetsinstillinger gir ikke redigeringsverktøyet direkte tilgang til utklippstavlen. Du må derfor lime det inn på nytt i dette vinduet.","title":"Lim inn"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatisk","bgColorTitle":"Bakgrunnsfarge","colors":{"000":"Svart","800000":"Rødbrun","8B4513":"Salbrun","2F4F4F":"Grønnsvart","008080":"Blågrønn","000080":"Marineblått","4B0082":"Indigo","696969":"Mørk grå","B22222":"Mørkerød","A52A2A":"Brun","DAA520":"Lys brun","006400":"Mørk grønn","40E0D0":"Turkis","0000CD":"Medium blå","800080":"Purpur","808080":"Grå","F00":"Rød","FF8C00":"Mørk oransje","FFD700":"Gull","008000":"Grønn","0FF":"Cyan","00F":"Blå","EE82EE":"Fiolett","A9A9A9":"Svak grå","FFA07A":"Rosa-oransje","FFA500":"Oransje","FFFF00":"Gul","00FF00":"Lime","AFEEEE":"Svak turkis","ADD8E6":"Lys Blå","DDA0DD":"Plomme","D3D3D3":"Lys grå","FFF0F5":"Svak lavendelrosa","FAEBD7":"Antikk-hvit","FFFFE0":"Lys gul","F0FFF0":"Honningmelon","F0FFFF":"Svakt asurblått","F0F8FF":"Svak cyan","E6E6FA":"Lavendel","FFF":"Hvit"},"more":"Flere farger...","panelTitle":"Farger","textColorTitle":"Tekstfarge"},"colordialog":{"clear":"Tøm","highlight":"Merk","options":"Alternativer for farge","selected":"Valgt","title":"Velg farge"},"templates":{"button":"Maler","emptyListMsg":"(Ingen maler definert)","insertOption":"Erstatt gjeldende innhold","options":"Alternativer for mal","selectPromptMsg":"Velg malen du vil åpne i redigeringsverktøyet:","title":"Innholdsmaler"},"contextmenu":{"options":"Alternativer for høyreklikkmeny"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Tittel","cssClassInputLabel":"Stilark-klasser","edit":"Rediger Div","inlineStyleInputLabel":"Inlinestiler","langDirLTRLabel":"Venstre til høyre (VTH)","langDirLabel":"Språkretning","langDirRTLLabel":"Høyre til venstre (HTV)","languageCodeInputLabel":" Språkkode","remove":"Fjern Div","styleSelectLabel":"Stil","title":"Sett inn Div Container","toolbar":"Sett inn Div Container"},"toolbar":{"toolbarCollapse":"Skjul verktøylinje","toolbarExpand":"Vis verktøylinje","toolbarGroups":{"document":"Dokument","clipboard":"Utklippstavle/Angre","editing":"Redigering","forms":"Skjema","basicstyles":"Basisstiler","paragraph":"Avsnitt","links":"Lenker","insert":"Innsetting","styles":"Stiler","colors":"Farger","tools":"Verktøy"},"toolbars":"Verktøylinjer for editor"},"elementspath":{"eleLabel":"Element-sti","eleTitle":"%1 element"},"find":{"find":"Søk","findOptions":"Søkealternativer","findWhat":"Søk etter:","matchCase":"Skill mellom store og små bokstaver","matchCyclic":"Søk i hele dokumentet","matchWord":"Bare hele ord","notFoundMsg":"Fant ikke søketeksten.","replace":"Erstatt","replaceAll":"Erstatt alle","replaceSuccessMsg":"%1 tilfelle(r) erstattet.","replaceWith":"Erstatt med:","title":"Søk og erstatt"},"fakeobjects":{"anchor":"Anker","flash":"Flash-animasjon","hiddenfield":"Skjult felt","iframe":"IFrame","unknown":"Ukjent objekt"},"flash":{"access":"Scripttilgang","accessAlways":"Alltid","accessNever":"Aldri","accessSameDomain":"Samme domene","alignAbsBottom":"Abs bunn","alignAbsMiddle":"Abs midten","alignBaseline":"Bunnlinje","alignTextTop":"Tekst topp","bgcolor":"Bakgrunnsfarge","chkFull":"Tillat fullskjerm","chkLoop":"Loop","chkMenu":"Slå på Flash-meny","chkPlay":"Autospill","flashvars":"Variabler for flash","hSpace":"HMarg","properties":"Egenskaper for Flash-objekt","propertiesTab":"Egenskaper","quality":"Kvalitet","qualityAutoHigh":"Auto høy","qualityAutoLow":"Auto lav","qualityBest":"Best","qualityHigh":"Høy","qualityLow":"Lav","qualityMedium":"Medium","scale":"Skaler","scaleAll":"Vis alt","scaleFit":"Skaler til å passe","scaleNoBorder":"Ingen ramme","title":"Flash-egenskaper","vSpace":"VMarg","validateHSpace":"HMarg må være et tall.","validateSrc":"Vennligst skriv inn lenkens url.","validateVSpace":"VMarg må være et tall.","windowMode":"Vindumodus","windowModeOpaque":"Opaque","windowModeTransparent":"Gjennomsiktig","windowModeWindow":"Vindu"},"font":{"fontSize":{"label":"Størrelse","voiceLabel":"Font Størrelse","panelTitle":"Størrelse"},"label":"Skrift","panelTitle":"Skrift","voiceLabel":"Font"},"forms":{"button":{"title":"Egenskaper for knapp","text":"Tekst (verdi)","type":"Type","typeBtn":"Knapp","typeSbm":"Send","typeRst":"Nullstill"},"checkboxAndRadio":{"checkboxTitle":"Egenskaper for avmerkingsboks","radioTitle":"Egenskaper for alternativknapp","value":"Verdi","selected":"Valgt"},"form":{"title":"Egenskaper for skjema","menu":"Egenskaper for skjema","action":"Handling","method":"Metode","encoding":"Encoding"},"hidden":{"title":"Egenskaper for skjult felt","name":"Navn","value":"Verdi"},"select":{"title":"Egenskaper for rullegardinliste","selectInfo":"Info","opAvail":"Tilgjenglige alternativer","value":"Verdi","size":"Størrelse","lines":"Linjer","chkMulti":"Tillat flervalg","opText":"Tekst","opValue":"Verdi","btnAdd":"Legg til","btnModify":"Endre","btnUp":"Opp","btnDown":"Ned","btnSetValue":"Sett som valgt","btnDelete":"Slett"},"textarea":{"title":"Egenskaper for tekstområde","cols":"Kolonner","rows":"Rader"},"textfield":{"title":"Egenskaper for tekstfelt","name":"Navn","value":"Verdi","charWidth":"Tegnbredde","maxChars":"Maks antall tegn","type":"Type","typeText":"Tekst","typePass":"Passord","typeEmail":"Epost","typeSearch":"Søk","typeTel":"Telefonnummer","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Avsnittsformat","tag_address":"Adresse","tag_div":"Normal (DIV)","tag_h1":"Overskrift 1","tag_h2":"Overskrift 2","tag_h3":"Overskrift 3","tag_h4":"Overskrift 4","tag_h5":"Overskrift 5","tag_h6":"Overskrift 6","tag_p":"Normal","tag_pre":"Formatert"},"horizontalrule":{"toolbar":"Sett inn horisontal linje"},"iframe":{"border":"Viss ramme rundt iframe","noUrl":"Vennligst skriv inn URL for iframe","scrolling":"Aktiver scrollefelt","title":"Egenskaper for IFrame","toolbar":"IFrame"},"image":{"alertUrl":"Vennligst skriv bilde-urlen","alt":"Alternativ tekst","border":"Ramme","btnUpload":"Send det til serveren","button2Img":"Vil du endre den valgte bildeknappen til et vanlig bilde?","hSpace":"HMarg","img2Button":"Vil du endre det valgte bildet til en bildeknapp?","infoTab":"Bildeinformasjon","linkTab":"Lenke","lockRatio":"Lås forhold","menu":"Bildeegenskaper","resetSize":"Tilbakestill størrelse","title":"Bildeegenskaper","titleButton":"Egenskaper for bildeknapp","upload":"Last opp","urlMissing":"Bildets adresse mangler.","vSpace":"VMarg","validateBorder":"Ramme må være et heltall.","validateHSpace":"HMarg må være et heltall.","validateVSpace":"VMarg må være et heltall."},"indent":{"indent":"Øk innrykk","outdent":"Reduser innrykk"},"smiley":{"options":"Alternativer for smil","title":"Sett inn smil","toolbar":"Smil"},"justify":{"block":"Blokkjuster","center":"Midtstill","left":"Venstrejuster","right":"Høyrejuster"},"language":{"button":"Sett språk","remove":"Fjern språk"},"link":{"acccessKey":"Aksessknapp","advanced":"Avansert","advisoryContentType":"Type","advisoryTitle":"Tittel","anchor":{"toolbar":"Sett inn/Rediger anker","menu":"Egenskaper for anker","title":"Egenskaper for anker","name":"Ankernavn","errorName":"Vennligst skriv inn ankernavnet","remove":"Fjern anker"},"anchorId":"Element etter ID","anchorName":"Anker etter navn","charset":"Lenket tegnsett","cssClasses":"Stilarkklasser","emailAddress":"E-postadresse","emailBody":"Melding","emailSubject":"Meldingsemne","id":"Id","info":"Lenkeinfo","langCode":"Språkkode","langDir":"Språkretning","langDirLTR":"Venstre til høyre (VTH)","langDirRTL":"Høyre til venstre (HTV)","menu":"Rediger lenke","name":"Navn","noAnchors":"(Ingen anker i dokumentet)","noEmail":"Vennligst skriv inn e-postadressen","noUrl":"Vennligst skriv inn lenkens URL","other":"<annen>","popupDependent":"Avhenging (Netscape)","popupFeatures":"Egenskaper for popup-vindu","popupFullScreen":"Fullskjerm (IE)","popupLeft":"Venstre posisjon","popupLocationBar":"Adresselinje","popupMenuBar":"Menylinje","popupResizable":"Skalerbar","popupScrollBars":"Scrollbar","popupStatusBar":"Statuslinje","popupToolbar":"Verktøylinje","popupTop":"Topp-posisjon","rel":"Relasjon (rel)","selectAnchor":"Velg et anker","styles":"Stil","tabIndex":"Tabindeks","target":"Mål","targetFrame":"<ramme>","targetFrameName":"Målramme","targetPopup":"<popup-vindu>","targetPopupName":"Navn på popup-vindu","title":"Lenke","toAnchor":"Lenke til anker i teksten","toEmail":"E-post","toUrl":"URL","toolbar":"Sett inn/Rediger lenke","type":"Lenketype","unlink":"Fjern lenke","upload":"Last opp"},"list":{"bulletedlist":"Legg til/Fjern punktmerket liste","numberedlist":"Legg til/Fjern nummerert liste"},"liststyle":{"armenian":"Armensk nummerering","bulletedTitle":"Egenskaper for punktmerket liste","circle":"Sirkel","decimal":"Tall (1, 2, 3, osv.)","decimalLeadingZero":"Tall, med førstesiffer null (01, 02, 03, osv.)","disc":"Disk","georgian":"Georgisk nummerering (an, ban, gan, osv.)","lowerAlpha":"Alfabetisk, små (a, b, c, d, e, osv.)","lowerGreek":"Gresk, små (alpha, beta, gamma, osv.)","lowerRoman":"Romertall, små (i, ii, iii, iv, v, osv.)","none":"Ingen","notset":"<ikke satt>","numberedTitle":"Egenskaper for nummerert liste","square":"Firkant","start":"Start","type":"Type","upperAlpha":"Alfabetisk, store (A, B, C, D, E, osv.)","upperRoman":"Romertall, store (I, II, III, IV, V, osv.)","validateStartNumber":"Starten på listen må være et heltall."},"magicline":{"title":"Sett inn nytt avsnitt her"},"maximize":{"maximize":"Maksimer","minimize":"Minimer"},"newpage":{"toolbar":"Ny side"},"pagebreak":{"alt":"Sideskift","toolbar":"Sett inn sideskift for utskrift"},"pastetext":{"button":"Lim inn som ren tekst","title":"Lim inn som ren tekst"},"pastefromword":{"confirmCleanup":"Teksten du limer inn ser ut til å være kopiert fra Word. Vil du renske den før du limer den inn?","error":"Det var ikke mulig å renske den innlimte teksten på grunn av en intern feil","title":"Lim inn fra Word","toolbar":"Lim inn fra Word"},"preview":{"preview":"Forhåndsvis"},"print":{"toolbar":"Skriv ut"},"removeformat":{"toolbar":"Fjern formatering"},"save":{"toolbar":"Lagre"},"selectall":{"toolbar":"Merk alt"},"showblocks":{"toolbar":"Vis blokker"},"sourcearea":{"toolbar":"Kilde"},"specialchar":{"options":"Alternativer for spesialtegn","title":"Velg spesialtegn","toolbar":"Sett inn spesialtegn"},"scayt":{"btn_about":"Om SCAYT","btn_dictionaries":"Ordbøker","btn_disable":"Slå av SCAYT","btn_enable":"Slå på SCAYT","btn_langs":"Språk","btn_options":"Valg","text_title":""},"stylescombo":{"label":"Stil","panelTitle":"Stilformater","panelTitle1":"Blokkstiler","panelTitle2":"Inlinestiler","panelTitle3":"Objektstiler"},"table":{"border":"Rammestørrelse","caption":"Tittel","cell":{"menu":"Celle","insertBefore":"Sett inn celle før","insertAfter":"Sett inn celle etter","deleteCell":"Slett celler","merge":"Slå sammen celler","mergeRight":"Slå sammen høyre","mergeDown":"Slå sammen ned","splitHorizontal":"Del celle horisontalt","splitVertical":"Del celle vertikalt","title":"Celleegenskaper","cellType":"Celletype","rowSpan":"Radspenn","colSpan":"Kolonnespenn","wordWrap":"Tekstbrytning","hAlign":"Horisontal justering","vAlign":"Vertikal justering","alignBaseline":"Grunnlinje","bgColor":"Bakgrunnsfarge","borderColor":"Rammefarge","data":"Data","header":"Overskrift","yes":"Ja","no":"Nei","invalidWidth":"Cellebredde må være et tall.","invalidHeight":"Cellehøyde må være et tall.","invalidRowSpan":"Radspenn må være et heltall.","invalidColSpan":"Kolonnespenn må være et heltall.","chooseColor":"Velg"},"cellPad":"Cellepolstring","cellSpace":"Cellemarg","column":{"menu":"Kolonne","insertBefore":"Sett inn kolonne før","insertAfter":"Sett inn kolonne etter","deleteColumn":"Slett kolonner"},"columns":"Kolonner","deleteTable":"Slett tabell","headers":"Overskrifter","headersBoth":"Begge","headersColumn":"Første kolonne","headersNone":"Ingen","headersRow":"Første rad","invalidBorder":"Rammestørrelse må være et tall.","invalidCellPadding":"Cellepolstring må være et positivt tall.","invalidCellSpacing":"Cellemarg må være et positivt tall.","invalidCols":"Antall kolonner må være et tall større enn 0.","invalidHeight":"Tabellhøyde må være et tall.","invalidRows":"Antall rader må være et tall større enn 0.","invalidWidth":"Tabellbredde må være et tall.","menu":"Egenskaper for tabell","row":{"menu":"Rader","insertBefore":"Sett inn rad før","insertAfter":"Sett inn rad etter","deleteRow":"Slett rader"},"rows":"Rader","summary":"Sammendrag","title":"Egenskaper for tabell","toolbar":"Tabell","widthPc":"prosent","widthPx":"piksler","widthUnit":"Bredde-enhet"},"undo":{"redo":"Gjør om","undo":"Angre"},"wsc":{"btnIgnore":"Ignorer","btnIgnoreAll":"Ignorer alle","btnReplace":"Erstatt","btnReplaceAll":"Erstatt alle","btnUndo":"Angre","changeTo":"Endre til","errorLoading":"Feil under lasting av applikasjonstjenestetjener: %s.","ieSpellDownload":"Stavekontroll er ikke installert. Vil du laste den ned nå?","manyChanges":"Stavekontroll fullført: %1 ord endret","noChanges":"Stavekontroll fullført: ingen ord endret","noMispell":"Stavekontroll fullført: ingen feilstavinger funnet","noSuggestions":"- Ingen forslag -","notAvailable":"Beklager, tjenesten er utilgjenglig nå.","notInDic":"Ikke i ordboken","oneChange":"Stavekontroll fullført: Ett ord endret","progress":"Stavekontroll pågår...","title":"Stavekontroll","toolbar":"Stavekontroll"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/pl.js b/wqflask/wqflask/static/packages/ckeditor/lang/pl.js
deleted file mode 100644
index 9e05ebde..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/pl.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['pl']={"editor":"Edytor tekstu sformatowanego","editorPanel":"Panel edytora tekstu sformatowanego","common":{"editorHelp":"W celu uzyskania pomocy naciÅ›nij ALT 0","browseServer":"PrzeglÄ…daj","url":"Adres URL","protocol":"Protokół","upload":"WyÅ›lij","uploadSubmit":"WyÅ›lij","image":"Obrazek","flash":"Flash","form":"Formularz","checkbox":"Pole wyboru (checkbox)","radio":"Przycisk opcji (radio)","textField":"Pole tekstowe","textarea":"Obszar tekstowy","hiddenField":"Pole ukryte","button":"Przycisk","select":"Lista wyboru","imageButton":"Przycisk graficzny","notSet":"<nie ustawiono>","id":"Id","name":"Nazwa","langDir":"Kierunek tekstu","langDirLtr":"Od lewej do prawej (LTR)","langDirRtl":"Od prawej do lewej (RTL)","langCode":"Kod jÄ™zyka","longDescr":"Adres URL dÅ‚ugiego opisu","cssClass":"Nazwa klasy CSS","advisoryTitle":"Opis obiektu docelowego","cssStyle":"Styl","ok":"OK","cancel":"Anuluj","close":"Zamknij","preview":"PodglÄ…d","resize":"PrzeciÄ…gnij, aby zmienić rozmiar","generalTab":"Ogólne","advancedTab":"Zaawansowane","validateNumberFailed":"Ta wartość nie jest liczbÄ….","confirmNewPage":"Wszystkie niezapisane zmiany zostanÄ… utracone. Czy na pewno wczytać nowÄ… stronÄ™?","confirmCancel":"Pewne opcje zostaÅ‚y zmienione. Czy na pewno zamknąć okno dialogowe?","options":"Opcje","target":"Obiekt docelowy","targetNew":"Nowe okno (_blank)","targetTop":"Okno najwyżej w hierarchii (_top)","targetSelf":"To samo okno (_self)","targetParent":"Okno nadrzÄ™dne (_parent)","langDirLTR":"Od lewej do prawej (LTR)","langDirRTL":"Od prawej do lewej (RTL)","styles":"Style","cssClasses":"Klasy arkusza stylów","width":"Szerokość","height":"Wysokość","align":"Wyrównaj","alignLeft":"Do lewej","alignRight":"Do prawej","alignCenter":"Do Å›rodka","alignJustify":"Wyjustuj","alignTop":"Do góry","alignMiddle":"Do Å›rodka","alignBottom":"Do doÅ‚u","alignNone":"Brak","invalidValue":"NieprawidÅ‚owa wartość.","invalidHeight":"Wysokość musi być liczbÄ….","invalidWidth":"Szerokość musi być liczbÄ….","invalidCssLength":"Wartość podana dla pola \"%1\" musi być liczbÄ… dodatniÄ… bez jednostki lub z poprawnÄ… jednostkÄ… dÅ‚ugoÅ›ci zgodnÄ… z CSS (px, %, in, cm, mm, em, ex, pt lub pc).","invalidHtmlLength":"Wartość podana dla pola \"%1\" musi być liczbÄ… dodatniÄ… bez jednostki lub z poprawnÄ… jednostkÄ… dÅ‚ugoÅ›ci zgodnÄ… z HTML (px lub %).","invalidInlineStyle":"Wartość podana dla stylu musi skÅ‚adać siÄ™ z jednej lub wiÄ™kszej liczby krotek w formacie \"nazwa : wartość\", rozdzielonych Å›rednikami.","cssLengthTooltip":"Wpisz liczbÄ™ dla wartoÅ›ci w pikselach lub liczbÄ™ wraz z jednostkÄ… dÅ‚ugoÅ›ci zgodnÄ… z CSS (px, %, in, cm, mm, em, ex, pt lub pc).","unavailable":"%1<span class=\"cke_accessibility\">, niedostÄ™pne</span>"},"about":{"copy":"Copyright &copy; $1. Wszelkie prawa zastrzeżone.","dlgTitle":"Informacje o programie CKEditor","help":"Pomoc znajdziesz w $1.","moreInfo":"Informacje na temat licencji można znaleźć na naszej stronie:","title":"Informacje o programie CKEditor","userGuide":"podrÄ™czniku użytkownika programu CKEditor"},"basicstyles":{"bold":"Pogrubienie","italic":"Kursywa","strike":"PrzekreÅ›lenie","subscript":"Indeks dolny","superscript":"Indeks górny","underline":"PodkreÅ›lenie"},"bidi":{"ltr":"Kierunek tekstu od lewej strony do prawej","rtl":"Kierunek tekstu od prawej strony do lewej"},"blockquote":{"toolbar":"Cytat"},"clipboard":{"copy":"Kopiuj","copyError":"Ustawienia bezpieczeÅ„stwa Twojej przeglÄ…darki nie pozwalajÄ… na automatyczne kopiowanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+C.","cut":"Wytnij","cutError":"Ustawienia bezpieczeÅ„stwa Twojej przeglÄ…darki nie pozwalajÄ… na automatyczne wycinanie tekstu. Użyj skrótu klawiszowego Ctrl/Cmd+X.","paste":"Wklej","pasteArea":"Obszar wklejania","pasteMsg":"Wklej tekst w poniższym polu, używajÄ…c skrótu klawiaturowego (<STRONG>Ctrl/Cmd+V</STRONG>), i kliknij <STRONG>OK</STRONG>.","securityMsg":"Zabezpieczenia przeglÄ…darki uniemożliwiajÄ… wklejenie danych bezpoÅ›rednio do edytora. ProszÄ™ ponownie wkleić dane w tym oknie.","title":"Wklej"},"button":{"selectedLabel":"%1 (Wybrany)"},"colorbutton":{"auto":"Automatycznie","bgColorTitle":"Kolor tÅ‚a","colors":{"000":"Czarny","800000":"Kasztanowy","8B4513":"Czekoladowy","2F4F4F":"Ciemnografitowy","008080":"Morski","000080":"Granatowy","4B0082":"Indygo","696969":"Ciemnoszary","B22222":"CzerwieÅ„ żelazowa","A52A2A":"BrÄ…zowy","DAA520":"CiemnozÅ‚oty","006400":"Ciemnozielony","40E0D0":"Turkusowy","0000CD":"Ciemnoniebieski","800080":"Purpurowy","808080":"Szary","F00":"Czerwony","FF8C00":"CiemnopomaraÅ„czowy","FFD700":"ZÅ‚oty","008000":"Zielony","0FF":"Cyjan","00F":"Niebieski","EE82EE":"Fioletowy","A9A9A9":"Przygaszony szary","FFA07A":"Åososiowy","FFA500":"PomaraÅ„czowy","FFFF00":"Żółty","00FF00":"Limonkowy","AFEEEE":"Bladoturkusowy","ADD8E6":"Jasnoniebieski","DDA0DD":"Åšliwkowy","D3D3D3":"Jasnoszary","FFF0F5":"Jasnolawendowy","FAEBD7":"KremowobiaÅ‚y","FFFFE0":"Jasnożółty","F0FFF0":"Bladozielony","F0FFFF":"Jasnolazurowy","F0F8FF":"JasnobÅ‚Ä™kitny","E6E6FA":"Lawendowy","FFF":"BiaÅ‚y"},"more":"WiÄ™cej kolorów...","panelTitle":"Kolory","textColorTitle":"Kolor tekstu"},"colordialog":{"clear":"Wyczyść","highlight":"Zaznacz","options":"Opcje koloru","selected":"Wybrany","title":"Wybierz kolor"},"templates":{"button":"Szablony","emptyListMsg":"(Brak zdefiniowanych szablonów)","insertOption":"ZastÄ…p obecnÄ… zawartość","options":"Opcje szablonów","selectPromptMsg":"Wybierz szablon do otwarcia w edytorze<br>(obecna zawartość okna edytora zostanie utracona):","title":"Szablony zawartoÅ›ci"},"contextmenu":{"options":"Opcje menu kontekstowego"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Opis obiektu docelowego","cssClassInputLabel":"Klasy arkusza stylów","edit":"Edytuj pojemnik Div","inlineStyleInputLabel":"Style liniowe","langDirLTRLabel":"Od lewej do prawej (LTR)","langDirLabel":"Kierunek tekstu","langDirRTLLabel":"Od prawej do lewej (RTL)","languageCodeInputLabel":"Kod jÄ™zyka","remove":"UsuÅ„ pojemnik Div","styleSelectLabel":"Styl","title":"Utwórz pojemnik Div","toolbar":"Utwórz pojemnik Div"},"toolbar":{"toolbarCollapse":"ZwiÅ„ pasek narzÄ™dzi","toolbarExpand":"RozwiÅ„ pasek narzÄ™dzi","toolbarGroups":{"document":"Dokument","clipboard":"Schowek/Wstecz","editing":"Edycja","forms":"Formularze","basicstyles":"Style podstawowe","paragraph":"Akapit","links":"HiperÅ‚Ä…cza","insert":"Wstawianie","styles":"Style","colors":"Kolory","tools":"NarzÄ™dzia"},"toolbars":"Paski narzÄ™dzi edytora"},"elementspath":{"eleLabel":"Åšcieżka elementów","eleTitle":"element %1"},"find":{"find":"Znajdź","findOptions":"Opcje wyszukiwania","findWhat":"Znajdź:","matchCase":"UwzglÄ™dnij wielkość liter","matchCyclic":"Cykliczne dopasowanie","matchWord":"CaÅ‚e sÅ‚owa","notFoundMsg":"Nie znaleziono szukanego hasÅ‚a.","replace":"ZamieÅ„","replaceAll":"ZamieÅ„ wszystko","replaceSuccessMsg":"%1 wystÄ…pieÅ„ zastÄ…pionych.","replaceWith":"ZastÄ…p przez:","title":"Znajdź i zamieÅ„"},"fakeobjects":{"anchor":"Kotwica","flash":"Animacja Flash","hiddenfield":"Pole ukryte","iframe":"IFrame","unknown":"Nieznany obiekt"},"flash":{"access":"DostÄ™p skryptów","accessAlways":"Zawsze","accessNever":"Nigdy","accessSameDomain":"Ta sama domena","alignAbsBottom":"Do doÅ‚u","alignAbsMiddle":"Do Å›rodka w pionie","alignBaseline":"Do linii bazowej","alignTextTop":"Do góry tekstu","bgcolor":"Kolor tÅ‚a","chkFull":"Zezwól na peÅ‚ny ekran","chkLoop":"PÄ™tla","chkMenu":"WÅ‚Ä…cz menu","chkPlay":"Autoodtwarzanie","flashvars":"Zmienne obiektu Flash","hSpace":"OdstÄ™p poziomy","properties":"WÅ‚aÅ›ciwoÅ›ci obiektu Flash","propertiesTab":"WÅ‚aÅ›ciwoÅ›ci","quality":"Jakość","qualityAutoHigh":"Auto wysoka","qualityAutoLow":"Auto niska","qualityBest":"Najlepsza","qualityHigh":"Wysoka","qualityLow":"Niska","qualityMedium":"Åšrednia","scale":"Skaluj","scaleAll":"Pokaż wszystko","scaleFit":"DokÅ‚adne dopasowanie","scaleNoBorder":"Bez obramowania","title":"WÅ‚aÅ›ciwoÅ›ci obiektu Flash","vSpace":"OdstÄ™p pionowy","validateHSpace":"OdstÄ™p poziomy musi być liczbÄ….","validateSrc":"Podaj adres URL","validateVSpace":"OdstÄ™p pionowy musi być liczbÄ….","windowMode":"Tryb okna","windowModeOpaque":"Nieprzezroczyste","windowModeTransparent":"Przezroczyste","windowModeWindow":"Okno"},"font":{"fontSize":{"label":"Rozmiar","voiceLabel":"Rozmiar czcionki","panelTitle":"Rozmiar"},"label":"Czcionka","panelTitle":"Czcionka","voiceLabel":"Czcionka"},"forms":{"button":{"title":"WÅ‚aÅ›ciwoÅ›ci przycisku","text":"Tekst (Wartość)","type":"Typ","typeBtn":"Przycisk","typeSbm":"WyÅ›lij","typeRst":"Wyczyść"},"checkboxAndRadio":{"checkboxTitle":"WÅ‚aÅ›ciwoÅ›ci pola wyboru (checkbox)","radioTitle":"WÅ‚aÅ›ciwoÅ›ci przycisku opcji (radio)","value":"Wartość","selected":"Zaznaczone"},"form":{"title":"WÅ‚aÅ›ciwoÅ›ci formularza","menu":"WÅ‚aÅ›ciwoÅ›ci formularza","action":"Akcja","method":"Metoda","encoding":"Kodowanie"},"hidden":{"title":"WÅ‚aÅ›ciwoÅ›ci pola ukrytego","name":"Nazwa","value":"Wartość"},"select":{"title":"WÅ‚aÅ›ciwoÅ›ci listy wyboru","selectInfo":"Informacje","opAvail":"DostÄ™pne opcje","value":"Wartość","size":"Rozmiar","lines":"wierszy","chkMulti":"Wielokrotny wybór","opText":"Tekst","opValue":"Wartość","btnAdd":"Dodaj","btnModify":"ZmieÅ„","btnUp":"Do góry","btnDown":"Do doÅ‚u","btnSetValue":"Ustaw jako zaznaczonÄ…","btnDelete":"UsuÅ„"},"textarea":{"title":"WÅ‚aÅ›ciwoÅ›ci obszaru tekstowego","cols":"Liczba kolumn","rows":"Liczba wierszy"},"textfield":{"title":"WÅ‚aÅ›ciwoÅ›ci pola tekstowego","name":"Nazwa","value":"Wartość","charWidth":"Szerokość w znakach","maxChars":"Szerokość maksymalna","type":"Typ","typeText":"Tekst","typePass":"HasÅ‚o","typeEmail":"Email","typeSearch":"Szukaj","typeTel":"Numer telefonu","typeUrl":"Adres URL"}},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adres","tag_div":"Normalny (DIV)","tag_h1":"Nagłówek 1","tag_h2":"Nagłówek 2","tag_h3":"Nagłówek 3","tag_h4":"Nagłówek 4","tag_h5":"Nagłówek 5","tag_h6":"Nagłówek 6","tag_p":"Normalny","tag_pre":"Tekst sformatowany"},"horizontalrule":{"toolbar":"Wstaw poziomÄ… liniÄ™"},"iframe":{"border":"Pokaż obramowanie obiektu IFrame","noUrl":"Podaj adres URL elementu IFrame","scrolling":"WÅ‚Ä…cz paski przewijania","title":"WÅ‚aÅ›ciwoÅ›ci elementu IFrame","toolbar":"IFrame"},"image":{"alertUrl":"Podaj adres obrazka.","alt":"Tekst zastÄ™pczy","border":"Obramowanie","btnUpload":"WyÅ›lij","button2Img":"Czy chcesz przekonwertować zaznaczony przycisk graficzny do zwykÅ‚ego obrazka?","hSpace":"OdstÄ™p poziomy","img2Button":"Czy chcesz przekonwertować zaznaczony obrazek do przycisku graficznego?","infoTab":"Informacje o obrazku","linkTab":"HiperÅ‚Ä…cze","lockRatio":"Zablokuj proporcje","menu":"WÅ‚aÅ›ciwoÅ›ci obrazka","resetSize":"Przywróć rozmiar","title":"WÅ‚aÅ›ciwoÅ›ci obrazka","titleButton":"WÅ‚aÅ›ciwoÅ›ci przycisku graficznego","upload":"WyÅ›lij","urlMissing":"Podaj adres URL obrazka.","vSpace":"OdstÄ™p pionowy","validateBorder":"Wartość obramowania musi być liczbÄ… caÅ‚kowitÄ….","validateHSpace":"Wartość odstÄ™pu poziomego musi być liczbÄ… caÅ‚kowitÄ….","validateVSpace":"Wartość odstÄ™pu pionowego musi być liczbÄ… caÅ‚kowitÄ…."},"indent":{"indent":"ZwiÄ™ksz wciÄ™cie","outdent":"Zmniejsz wciÄ™cie"},"smiley":{"options":"Opcje emotikonów","title":"Wstaw emotikona","toolbar":"Emotikony"},"justify":{"block":"Wyjustuj","center":"WyÅ›rodkuj","left":"Wyrównaj do lewej","right":"Wyrównaj do prawej"},"language":{"button":"Ustaw jÄ™zyk","remove":"UsuÅ„ jÄ™zyk"},"link":{"acccessKey":"Klawisz dostÄ™pu","advanced":"Zaawansowane","advisoryContentType":"Typ MIME obiektu docelowego","advisoryTitle":"Opis obiektu docelowego","anchor":{"toolbar":"Wstaw/edytuj kotwicÄ™","menu":"WÅ‚aÅ›ciwoÅ›ci kotwicy","title":"WÅ‚aÅ›ciwoÅ›ci kotwicy","name":"Nazwa kotwicy","errorName":"Wpisz nazwÄ™ kotwicy","remove":"UsuÅ„ kotwicÄ™"},"anchorId":"Wg identyfikatora","anchorName":"Wg nazwy","charset":"Kodowanie znaków obiektu docelowego","cssClasses":"Nazwa klasy CSS","emailAddress":"Adres e-mail","emailBody":"Treść","emailSubject":"Temat","id":"Id","info":"Informacje ","langCode":"Kod jÄ™zyka","langDir":"Kierunek tekstu","langDirLTR":"Od lewej do prawej (LTR)","langDirRTL":"Od prawej do lewej (RTL)","menu":"Edytuj odnoÅ›nik","name":"Nazwa","noAnchors":"(W dokumencie nie zdefiniowano żadnych kotwic)","noEmail":"Podaj adres e-mail","noUrl":"Podaj adres URL","other":"<inny>","popupDependent":"Okno zależne (Netscape)","popupFeatures":"WÅ‚aÅ›ciwoÅ›ci wyskakujÄ…cego okna","popupFullScreen":"PeÅ‚ny ekran (IE)","popupLeft":"Pozycja w poziomie","popupLocationBar":"Pasek adresu","popupMenuBar":"Pasek menu","popupResizable":"Skalowalny","popupScrollBars":"Paski przewijania","popupStatusBar":"Pasek statusu","popupToolbar":"Pasek narzÄ™dzi","popupTop":"Pozycja w pionie","rel":"Relacja","selectAnchor":"Wybierz kotwicÄ™","styles":"Styl","tabIndex":"Indeks kolejnoÅ›ci","target":"Obiekt docelowy","targetFrame":"<ramka>","targetFrameName":"Nazwa ramki docelowej","targetPopup":"<wyskakujÄ…ce okno>","targetPopupName":"Nazwa wyskakujÄ…cego okna","title":"OdnoÅ›nik","toAnchor":"OdnoÅ›nik wewnÄ…trz strony (kotwica)","toEmail":"Adres e-mail","toUrl":"Adres URL","toolbar":"Wstaw/edytuj odnoÅ›nik","type":"Typ odnoÅ›nika","unlink":"UsuÅ„ odnoÅ›nik","upload":"WyÅ›lij"},"list":{"bulletedlist":"Lista wypunktowana","numberedlist":"Lista numerowana"},"liststyle":{"armenian":"Numerowanie armeÅ„skie","bulletedTitle":"WÅ‚aÅ›ciwoÅ›ci list wypunktowanych","circle":"KoÅ‚o","decimal":"Liczby (1, 2, 3 itd.)","decimalLeadingZero":"Liczby z poczÄ…tkowym zerem (01, 02, 03 itd.)","disc":"OkrÄ…g","georgian":"Numerowanie gruziÅ„skie (an, ban, gan itd.)","lowerAlpha":"MaÅ‚e litery (a, b, c, d, e itd.)","lowerGreek":"MaÅ‚e litery greckie (alpha, beta, gamma itd.)","lowerRoman":"MaÅ‚e cyfry rzymskie (i, ii, iii, iv, v itd.)","none":"Brak","notset":"<nie ustawiono>","numberedTitle":"WÅ‚aÅ›ciwoÅ›ci list numerowanych","square":"Kwadrat","start":"PoczÄ…tek","type":"Typ punktora","upperAlpha":"Duże litery (A, B, C, D, E itd.)","upperRoman":"Duże cyfry rzymskie (I, II, III, IV, V itd.)","validateStartNumber":"ListÄ™ musi rozpoczynać liczba caÅ‚kowita."},"magicline":{"title":"Wstaw nowy akapit"},"maximize":{"maximize":"Maksymalizuj","minimize":"Minimalizuj"},"newpage":{"toolbar":"Nowa strona"},"pagebreak":{"alt":"Wstaw podziaÅ‚ strony","toolbar":"Wstaw podziaÅ‚ strony"},"pastetext":{"button":"Wklej jako czysty tekst","title":"Wklej jako czysty tekst"},"pastefromword":{"confirmCleanup":"Tekst, który chcesz wkleić, prawdopodobnie pochodzi z programu Microsoft Word. Czy chcesz go wyczyÅ›cić przed wklejeniem?","error":"Wyczyszczenie wklejonych danych nie byÅ‚o możliwe z powodu wystÄ…pienia bÅ‚Ä™du.","title":"Wklej z programu MS Word","toolbar":"Wklej z programu MS Word"},"preview":{"preview":"PodglÄ…d"},"print":{"toolbar":"Drukuj"},"removeformat":{"toolbar":"UsuÅ„ formatowanie"},"save":{"toolbar":"Zapisz"},"selectall":{"toolbar":"Zaznacz wszystko"},"showblocks":{"toolbar":"Pokaż bloki"},"sourcearea":{"toolbar":"ŹródÅ‚o dokumentu"},"specialchar":{"options":"Opcje znaków specjalnych","title":"Wybierz znak specjalny","toolbar":"Wstaw znak specjalny"},"scayt":{"btn_about":"Informacje o SCAYT","btn_dictionaries":"SÅ‚owniki","btn_disable":"WyÅ‚Ä…cz SCAYT","btn_enable":"WÅ‚Ä…cz SCAYT","btn_langs":"JÄ™zyki","btn_options":"Opcje","text_title":""},"stylescombo":{"label":"Styl","panelTitle":"Style formatujÄ…ce","panelTitle1":"Style blokowe","panelTitle2":"Style liniowe","panelTitle3":"Style obiektowe"},"table":{"border":"Grubość obramowania","caption":"TytuÅ‚","cell":{"menu":"Komórka","insertBefore":"Wstaw komórkÄ™ z lewej","insertAfter":"Wstaw komórkÄ™ z prawej","deleteCell":"UsuÅ„ komórki","merge":"PoÅ‚Ä…cz komórki","mergeRight":"PoÅ‚Ä…cz z komórkÄ… z prawej","mergeDown":"PoÅ‚Ä…cz z komórkÄ… poniżej","splitHorizontal":"Podziel komórkÄ™ poziomo","splitVertical":"Podziel komórkÄ™ pionowo","title":"WÅ‚aÅ›ciwoÅ›ci komórki","cellType":"Typ komórki","rowSpan":"Scalenie wierszy","colSpan":"Scalenie komórek","wordWrap":"Zawijanie słów","hAlign":"Wyrównanie poziome","vAlign":"Wyrównanie pionowe","alignBaseline":"Linia bazowa","bgColor":"Kolor tÅ‚a","borderColor":"Kolor obramowania","data":"Dane","header":"Nagłówek","yes":"Tak","no":"Nie","invalidWidth":"Szerokość komórki musi być liczbÄ….","invalidHeight":"Wysokość komórki musi być liczbÄ….","invalidRowSpan":"Scalenie wierszy musi być liczbÄ… caÅ‚kowitÄ….","invalidColSpan":"Scalenie komórek musi być liczbÄ… caÅ‚kowitÄ….","chooseColor":"Wybierz"},"cellPad":"DopeÅ‚nienie komórek","cellSpace":"OdstÄ™p pomiÄ™dzy komórkami","column":{"menu":"Kolumna","insertBefore":"Wstaw kolumnÄ™ z lewej","insertAfter":"Wstaw kolumnÄ™ z prawej","deleteColumn":"UsuÅ„ kolumny"},"columns":"Liczba kolumn","deleteTable":"UsuÅ„ tabelÄ™","headers":"Nagłówki","headersBoth":"Oba","headersColumn":"Pierwsza kolumna","headersNone":"Brak","headersRow":"Pierwszy wiersz","invalidBorder":"Wartość obramowania musi być liczbÄ….","invalidCellPadding":"DopeÅ‚nienie komórek musi być liczbÄ… dodatniÄ….","invalidCellSpacing":"OdstÄ™p pomiÄ™dzy komórkami musi być liczbÄ… dodatniÄ….","invalidCols":"Liczba kolumn musi być wiÄ™ksza niż 0.","invalidHeight":"Wysokość tabeli musi być liczbÄ….","invalidRows":"Liczba wierszy musi być wiÄ™ksza niż 0.","invalidWidth":"Szerokość tabeli musi być liczbÄ….","menu":"WÅ‚aÅ›ciwoÅ›ci tabeli","row":{"menu":"Wiersz","insertBefore":"Wstaw wiersz powyżej","insertAfter":"Wstaw wiersz poniżej","deleteRow":"UsuÅ„ wiersze"},"rows":"Liczba wierszy","summary":"Podsumowanie","title":"WÅ‚aÅ›ciwoÅ›ci tabeli","toolbar":"Tabela","widthPc":"%","widthPx":"piksele","widthUnit":"jednostka szerokoÅ›ci"},"undo":{"redo":"Ponów","undo":"Cofnij"},"wsc":{"btnIgnore":"Ignoruj","btnIgnoreAll":"Ignoruj wszystkie","btnReplace":"ZmieÅ„","btnReplaceAll":"ZmieÅ„ wszystkie","btnUndo":"Cofnij","changeTo":"ZmieÅ„ na","errorLoading":"BÅ‚Ä…d wczytywania hosta aplikacji usÅ‚ugi: %s.","ieSpellDownload":"SÅ‚ownik nie jest zainstalowany. Czy chcesz go pobrać?","manyChanges":"Sprawdzanie zakoÅ„czone: zmieniono %l słów","noChanges":"Sprawdzanie zakoÅ„czone: nie zmieniono żadnego sÅ‚owa","noMispell":"Sprawdzanie zakoÅ„czone: nie znaleziono bÅ‚Ä™dów","noSuggestions":"- Brak sugestii -","notAvailable":"Przepraszamy, ale usÅ‚uga jest obecnie niedostÄ™pna.","notInDic":"SÅ‚owa nie ma w sÅ‚owniku","oneChange":"Sprawdzanie zakoÅ„czone: zmieniono jedno sÅ‚owo","progress":"Trwa sprawdzanie...","title":"Sprawdź pisowniÄ™","toolbar":"Sprawdź pisowniÄ™"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/pt-br.js b/wqflask/wqflask/static/packages/ckeditor/lang/pt-br.js
deleted file mode 100644
index d697b0b0..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/pt-br.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['pt-br']={"editor":"Editor de Rich Text","editorPanel":"Painel do editor de Rich Text","common":{"editorHelp":"Pressione ALT+0 para ajuda","browseServer":"Localizar no Servidor","url":"URL","protocol":"Protocolo","upload":"Enviar ao Servidor","uploadSubmit":"Enviar para o Servidor","image":"Imagem","flash":"Flash","form":"Formulário","checkbox":"Caixa de Seleção","radio":"Botão de Opção","textField":"Caixa de Texto","textarea":"Ãrea de Texto","hiddenField":"Campo Oculto","button":"Botão","select":"Caixa de Listagem","imageButton":"Botão de Imagem","notSet":"<não ajustado>","id":"Id","name":"Nome","langDir":"Direção do idioma","langDirLtr":"Esquerda para Direita (LTR)","langDirRtl":"Direita para Esquerda (RTL)","langCode":"Idioma","longDescr":"Descrição da URL","cssClass":"Classe de CSS","advisoryTitle":"Título","cssStyle":"Estilos","ok":"OK","cancel":"Cancelar","close":"Fechar","preview":"Visualizar","resize":"Arraste para redimensionar","generalTab":"Geral","advancedTab":"Avançado","validateNumberFailed":"Este valor não é um número.","confirmNewPage":"Todas as mudanças não salvas serão perdidas. Tem certeza de que quer abrir uma nova página?","confirmCancel":"Algumas opções foram alteradas. Tem certeza de que quer fechar a caixa de diálogo?","options":"Opções","target":"Destino","targetNew":"Nova Janela (_blank)","targetTop":"Janela de Cima (_top)","targetSelf":"Mesma Janela (_self)","targetParent":"Janela Pai (_parent)","langDirLTR":"Esquerda para Direita (LTR)","langDirRTL":"Direita para Esquerda (RTL)","styles":"Estilo","cssClasses":"Classes","width":"Largura","height":"Altura","align":"Alinhamento","alignLeft":"Esquerda","alignRight":"Direita","alignCenter":"Centralizado","alignJustify":"Justificar","alignTop":"Superior","alignMiddle":"Centralizado","alignBottom":"Inferior","alignNone":"Nenhum","invalidValue":"Valor inválido.","invalidHeight":"A altura tem que ser um número","invalidWidth":"A largura tem que ser um número.","invalidCssLength":"O valor do campo \"%1\" deve ser um número positivo opcionalmente seguido por uma válida unidade de medida de CSS (px, %, in, cm, mm, em, ex, pt ou pc).","invalidHtmlLength":"O valor do campo \"%1\" deve ser um número positivo opcionalmente seguido por uma válida unidade de medida de HTML (px ou %).","invalidInlineStyle":"O valor válido para estilo deve conter uma ou mais tuplas no formato \"nome : valor\", separados por ponto e vírgula.","cssLengthTooltip":"Insira um número para valor em pixels ou um número seguido de uma válida unidade de medida de CSS (px, %, in, cm, mm, em, ex, pt ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>"},"about":{"copy":"Copyright &copy; $1. Todos os direitos reservados.","dlgTitle":"Sobre o CKEditor","help":"Verifique o $1 para obter ajuda.","moreInfo":"Para informações sobre a licença por favor visite o nosso site:","title":"Sobre o CKEditor","userGuide":"Guia do Usuário do CKEditor"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Tachado","subscript":"Subscrito","superscript":"Sobrescrito","underline":"Sublinhado"},"bidi":{"ltr":"Direção do texto da esquerda para a direita","rtl":"Direção do texto da direita para a esquerda"},"blockquote":{"toolbar":"Citação"},"clipboard":{"copy":"Copiar","copyError":"As configurações de segurança do seu navegador não permitem que o editor execute operações de copiar automaticamente. Por favor, utilize o teclado para copiar (Ctrl/Cmd+C).","cut":"Recortar","cutError":"As configurações de segurança do seu navegador não permitem que o editor execute operações de recortar automaticamente. Por favor, utilize o teclado para recortar (Ctrl/Cmd+X).","paste":"Colar","pasteArea":"Ãrea para Colar","pasteMsg":"Transfira o link usado na caixa usando o teclado com (<STRONG>Ctrl/Cmd+V</STRONG>) e <STRONG>OK</STRONG>.","securityMsg":"As configurações de segurança do seu navegador não permitem que o editor acesse os dados da área de transferência diretamente. Por favor cole o conteúdo manualmente nesta janela.","title":"Colar"},"button":{"selectedLabel":"%1 (Selecionado)"},"colorbutton":{"auto":"Automático","bgColorTitle":"Cor do Plano de Fundo","colors":{"000":"Preto","800000":"Foquete","8B4513":"Marrom 1","2F4F4F":"Cinza 1","008080":"Cerceta","000080":"Azul Marinho","4B0082":"Ãndigo","696969":"Cinza 2","B22222":"Tijolo de Fogo","A52A2A":"Marrom 2","DAA520":"Vara Dourada","006400":"Verde Escuro","40E0D0":"Turquesa","0000CD":"Azul Médio","800080":"Roxo","808080":"Cinza 3","F00":"Vermelho","FF8C00":"Laranja Escuro","FFD700":"Dourado","008000":"Verde","0FF":"Ciano","00F":"Azul","EE82EE":"Violeta","A9A9A9":"Cinza Escuro","FFA07A":"Salmão Claro","FFA500":"Laranja","FFFF00":"Amarelo","00FF00":"Lima","AFEEEE":"Turquesa Pálido","ADD8E6":"Azul Claro","DDA0DD":"Ameixa","D3D3D3":"Cinza Claro","FFF0F5":"Lavanda 1","FAEBD7":"Branco Antiguidade","FFFFE0":"Amarelo Claro","F0FFF0":"Orvalho","F0FFFF":"Azure","F0F8FF":"Azul Alice","E6E6FA":"Lavanda 2","FFF":"Branco"},"more":"Mais Cores...","panelTitle":"Cores","textColorTitle":"Cor do Texto"},"colordialog":{"clear":"Limpar","highlight":"Grifar","options":"Opções de Cor","selected":"Cor Selecionada","title":"Selecione uma Cor"},"templates":{"button":"Modelos de layout","emptyListMsg":"(Não foram definidos modelos de layout)","insertOption":"Substituir o conteúdo atual","options":"Opções de Template","selectPromptMsg":"Selecione um modelo de layout para ser aberto no editor<br>(o conteúdo atual será perdido):","title":"Modelo de layout de conteúdo"},"contextmenu":{"options":"Opções Menu de Contexto"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Título Consulta","cssClassInputLabel":"Classes de CSS","edit":"Editar Div","inlineStyleInputLabel":"Estilo Inline","langDirLTRLabel":"Esquerda para Direita (LTR)","langDirLabel":"Direção da Escrita","langDirRTLLabel":"Direita para Esquerda (RTL)","languageCodeInputLabel":"Código de Idioma","remove":"Remover Div","styleSelectLabel":"Estilo","title":"Criar Container de DIV","toolbar":"Criar Container de DIV"},"toolbar":{"toolbarCollapse":"Diminuir Barra de Ferramentas","toolbarExpand":"Aumentar Barra de Ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Clipboard/Desfazer","editing":"Edição","forms":"Formulários","basicstyles":"Estilos Básicos","paragraph":"Paragrafo","links":"Links","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Barra de Ferramentas do Editor"},"elementspath":{"eleLabel":"Caminho dos Elementos","eleTitle":"Elemento %1"},"find":{"find":"Localizar","findOptions":"Opções","findWhat":"Procurar por:","matchCase":"Coincidir Maiúsculas/Minúsculas","matchCyclic":"Coincidir cíclico","matchWord":"Coincidir a palavra inteira","notFoundMsg":"O texto especificado não foi encontrado.","replace":"Substituir","replaceAll":"Substituir Tudo","replaceSuccessMsg":"%1 ocorrência(s) substituída(s).","replaceWith":"Substituir por:","title":"Localizar e Substituir"},"fakeobjects":{"anchor":"Âncora","flash":"Animação em Flash","hiddenfield":"Campo Oculto","iframe":"IFrame","unknown":"Objeto desconhecido"},"flash":{"access":"Acesso ao script","accessAlways":"Sempre","accessNever":"Nunca","accessSameDomain":"Acessar Mesmo Domínio","alignAbsBottom":"Inferior Absoluto","alignAbsMiddle":"Centralizado Absoluto","alignBaseline":"Baseline","alignTextTop":"Superior Absoluto","bgcolor":"Cor do Plano de Fundo","chkFull":"Permitir tela cheia","chkLoop":"Tocar Infinitamente","chkMenu":"Habilita Menu Flash","chkPlay":"Tocar Automaticamente","flashvars":"Variáveis do Flash","hSpace":"HSpace","properties":"Propriedades do Flash","propertiesTab":"Propriedades","quality":"Qualidade","qualityAutoHigh":"Qualidade Alta Automática","qualityAutoLow":"Qualidade Baixa Automática","qualityBest":"Qualidade Melhor","qualityHigh":"Qualidade Alta","qualityLow":"Qualidade Baixa","qualityMedium":"Qualidade Média","scale":"Escala","scaleAll":"Mostrar tudo","scaleFit":"Escala Exata","scaleNoBorder":"Sem Borda","title":"Propriedades do Flash","vSpace":"VSpace","validateHSpace":"O HSpace tem que ser um número","validateSrc":"Por favor, digite o endereço do link","validateVSpace":"O VSpace tem que ser um número.","windowMode":"Modo da janela","windowModeOpaque":"Opaca","windowModeTransparent":"Transparente","windowModeWindow":"Janela"},"font":{"fontSize":{"label":"Tamanho","voiceLabel":"Tamanho da fonte","panelTitle":"Tamanho"},"label":"Fonte","panelTitle":"Fonte","voiceLabel":"Fonte"},"forms":{"button":{"title":"Formatar Botão","text":"Texto (Valor)","type":"Tipo","typeBtn":"Botão","typeSbm":"Enviar","typeRst":"Limpar"},"checkboxAndRadio":{"checkboxTitle":"Formatar Caixa de Seleção","radioTitle":"Formatar Botão de Opção","value":"Valor","selected":"Selecionado"},"form":{"title":"Formatar Formulário","menu":"Formatar Formulário","action":"Ação","method":"Método","encoding":"Codificação"},"hidden":{"title":"Formatar Campo Oculto","name":"Nome","value":"Valor"},"select":{"title":"Formatar Caixa de Listagem","selectInfo":"Informações","opAvail":"Opções disponíveis","value":"Valor","size":"Tamanho","lines":"linhas","chkMulti":"Permitir múltiplas seleções","opText":"Texto","opValue":"Valor","btnAdd":"Adicionar","btnModify":"Modificar","btnUp":"Para cima","btnDown":"Para baixo","btnSetValue":"Definir como selecionado","btnDelete":"Remover"},"textarea":{"title":"Formatar Ãrea de Texto","cols":"Colunas","rows":"Linhas"},"textfield":{"title":"Formatar Caixa de Texto","name":"Nome","value":"Valor","charWidth":"Comprimento (em caracteres)","maxChars":"Número Máximo de Caracteres","type":"Tipo","typeText":"Texto","typePass":"Senha","typeEmail":"Email","typeSearch":"Busca","typeTel":"Número de Telefone","typeUrl":"URL"}},"format":{"label":"Formatação","panelTitle":"Formatação","tag_address":"Endereço","tag_div":"Normal (DIV)","tag_h1":"Título 1","tag_h2":"Título 2","tag_h3":"Título 3","tag_h4":"Título 4","tag_h5":"Título 5","tag_h6":"Título 6","tag_p":"Normal","tag_pre":"Formatado"},"horizontalrule":{"toolbar":"Inserir Linha Horizontal"},"iframe":{"border":"Mostra borda do iframe","noUrl":"Insira a URL do iframe","scrolling":"Abilita scrollbars","title":"Propriedade do IFrame","toolbar":"IFrame"},"image":{"alertUrl":"Por favor, digite a URL da imagem.","alt":"Texto Alternativo","border":"Borda","btnUpload":"Enviar para o Servidor","button2Img":"Deseja transformar o botão de imagem em uma imagem comum?","hSpace":"HSpace","img2Button":"Deseja transformar a imagem em um botão de imagem?","infoTab":"Informações da Imagem","linkTab":"Link","lockRatio":"Travar Proporções","menu":"Formatar Imagem","resetSize":"Redefinir para o Tamanho Original","title":"Formatar Imagem","titleButton":"Formatar Botão de Imagem","upload":"Enviar","urlMissing":"URL da imagem está faltando.","vSpace":"VSpace","validateBorder":"A borda deve ser um número inteiro.","validateHSpace":"O HSpace deve ser um número inteiro.","validateVSpace":"O VSpace deve ser um número inteiro."},"indent":{"indent":"Aumentar Recuo","outdent":"Diminuir Recuo"},"smiley":{"options":"Opções de Emoticons","title":"Inserir Emoticon","toolbar":"Emoticon"},"justify":{"block":"Justificado","center":"Centralizar","left":"Alinhar Esquerda","right":"Alinhar Direita"},"language":{"button":"Configure o Idioma","remove":"Remover Idioma"},"link":{"acccessKey":"Chave de Acesso","advanced":"Avançado","advisoryContentType":"Tipo de Conteúdo","advisoryTitle":"Título","anchor":{"toolbar":"Inserir/Editar Âncora","menu":"Formatar Âncora","title":"Formatar Âncora","name":"Nome da Âncora","errorName":"Por favor, digite o nome da âncora","remove":"Remover Âncora"},"anchorId":"Id da âncora","anchorName":"Nome da âncora","charset":"Charset do Link","cssClasses":"Classe de CSS","emailAddress":"Endereço E-Mail","emailBody":"Corpo da Mensagem","emailSubject":"Assunto da Mensagem","id":"Id","info":"Informações","langCode":"Direção do idioma","langDir":"Direção do idioma","langDirLTR":"Esquerda para Direita (LTR)","langDirRTL":"Direita para Esquerda (RTL)","menu":"Editar Link","name":"Nome","noAnchors":"(Não há âncoras no documento)","noEmail":"Por favor, digite o endereço de e-mail","noUrl":"Por favor, digite o endereço do Link","other":"<outro>","popupDependent":"Dependente (Netscape)","popupFeatures":"Propriedades da Janela Pop-up","popupFullScreen":"Modo Tela Cheia (IE)","popupLeft":"Esquerda","popupLocationBar":"Barra de Endereços","popupMenuBar":"Barra de Menus","popupResizable":"Redimensionável","popupScrollBars":"Barras de Rolagem","popupStatusBar":"Barra de Status","popupToolbar":"Barra de Ferramentas","popupTop":"Topo","rel":"Tipo de Relação","selectAnchor":"Selecione uma âncora","styles":"Estilos","tabIndex":"Ãndice de Tabulação","target":"Destino","targetFrame":"<frame>","targetFrameName":"Nome do Frame de Destino","targetPopup":"<janela popup>","targetPopupName":"Nome da Janela Pop-up","title":"Editar Link","toAnchor":"Âncora nesta página","toEmail":"E-Mail","toUrl":"URL","toolbar":"Inserir/Editar Link","type":"Tipo de hiperlink","unlink":"Remover Link","upload":"Enviar ao Servidor"},"list":{"bulletedlist":"Lista sem números","numberedlist":"Lista numerada"},"liststyle":{"armenian":"Numeração Armêna","bulletedTitle":"Propriedades da Lista sem Numeros","circle":"Círculo","decimal":"Numeração Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Numeração Decimal com zeros (01, 02, 03, etc.)","disc":"Disco","georgian":"Numeração da Geórgia (an, ban, gan, etc.)","lowerAlpha":"Numeração Alfabética minúscula (a, b, c, d, e, etc.)","lowerGreek":"Numeração Grega minúscula (alpha, beta, gamma, etc.)","lowerRoman":"Numeração Romana minúscula (i, ii, iii, iv, v, etc.)","none":"Nenhum","notset":"<não definido>","numberedTitle":"Propriedades da Lista Numerada","square":"Quadrado","start":"Início","type":"Tipo","upperAlpha":"Numeração Alfabética Maiúscula (A, B, C, D, E, etc.)","upperRoman":"Numeração Romana maiúscula (I, II, III, IV, V, etc.)","validateStartNumber":"O número inicial da lista deve ser um número inteiro."},"magicline":{"title":"Insera um parágrafo aqui"},"maximize":{"maximize":"Maximizar","minimize":"Minimize"},"newpage":{"toolbar":"Novo"},"pagebreak":{"alt":"Quebra de Página","toolbar":"Inserir Quebra de Página"},"pastetext":{"button":"Colar como Texto sem Formatação","title":"Colar como Texto sem Formatação"},"pastefromword":{"confirmCleanup":"O texto que você deseja colar parece ter sido copiado do Word. Você gostaria de remover a formatação antes de colar?","error":"Não foi possível limpar os dados colados devido a um erro interno","title":"Colar do Word","toolbar":"Colar do Word"},"preview":{"preview":"Visualizar"},"print":{"toolbar":"Imprimir"},"removeformat":{"toolbar":"Remover Formatação"},"save":{"toolbar":"Salvar"},"selectall":{"toolbar":"Selecionar Tudo"},"showblocks":{"toolbar":"Mostrar blocos de código"},"sourcearea":{"toolbar":"Código-Fonte"},"specialchar":{"options":"Opções de Caractere Especial","title":"Selecione um Caractere Especial","toolbar":"Inserir Caractere Especial"},"scayt":{"btn_about":"Sobre a correção ortográfica durante a digitação","btn_dictionaries":"Dicionários","btn_disable":"Desabilitar correção ortográfica durante a digitação","btn_enable":"Habilitar correção ortográfica durante a digitação","btn_langs":"Idiomas","btn_options":"Opções","text_title":""},"stylescombo":{"label":"Estilo","panelTitle":"Estilos de Formatação","panelTitle1":"Estilos de bloco","panelTitle2":"Estilos de texto corrido","panelTitle3":"Estilos de objeto"},"table":{"border":"Borda","caption":"Legenda","cell":{"menu":"Célula","insertBefore":"Inserir célula a esquerda","insertAfter":"Inserir célula a direita","deleteCell":"Remover Células","merge":"Mesclar Células","mergeRight":"Mesclar com célula a direita","mergeDown":"Mesclar com célula abaixo","splitHorizontal":"Dividir célula horizontalmente","splitVertical":"Dividir célula verticalmente","title":"Propriedades da célula","cellType":"Tipo de célula","rowSpan":"Linhas cobertas","colSpan":"Colunas cobertas","wordWrap":"Quebra de palavra","hAlign":"Alinhamento horizontal","vAlign":"Alinhamento vertical","alignBaseline":"Patamar de alinhamento","bgColor":"Cor de fundo","borderColor":"Cor das bordas","data":"Dados","header":"Cabeçalho","yes":"Sim","no":"Não","invalidWidth":"A largura da célula tem que ser um número.","invalidHeight":"A altura da célula tem que ser um número.","invalidRowSpan":"Linhas cobertas tem que ser um número inteiro.","invalidColSpan":"Colunas cobertas tem que ser um número inteiro.","chooseColor":"Escolher"},"cellPad":"Margem interna","cellSpace":"Espaçamento","column":{"menu":"Coluna","insertBefore":"Inserir coluna a esquerda","insertAfter":"Inserir coluna a direita","deleteColumn":"Remover Colunas"},"columns":"Colunas","deleteTable":"Apagar Tabela","headers":"Cabeçalho","headersBoth":"Ambos","headersColumn":"Primeira coluna","headersNone":"Nenhum","headersRow":"Primeira linha","invalidBorder":"O tamanho da borda tem que ser um número.","invalidCellPadding":"A margem interna das células tem que ser um número.","invalidCellSpacing":"O espaçamento das células tem que ser um número.","invalidCols":"O número de colunas tem que ser um número maior que 0.","invalidHeight":"A altura da tabela tem que ser um número.","invalidRows":"O número de linhas tem que ser um número maior que 0.","invalidWidth":"A largura da tabela tem que ser um número.","menu":"Formatar Tabela","row":{"menu":"Linha","insertBefore":"Inserir linha acima","insertAfter":"Inserir linha abaixo","deleteRow":"Remover Linhas"},"rows":"Linhas","summary":"Resumo","title":"Formatar Tabela","toolbar":"Tabela","widthPc":"%","widthPx":"pixels","widthUnit":"unidade largura"},"undo":{"redo":"Refazer","undo":"Desfazer"},"wsc":{"btnIgnore":"Ignorar uma vez","btnIgnoreAll":"Ignorar Todas","btnReplace":"Alterar","btnReplaceAll":"Alterar Todas","btnUndo":"Desfazer","changeTo":"Alterar para","errorLoading":"Erro carregando servidor de aplicação: %s.","ieSpellDownload":"A verificação ortográfica não foi instalada. Você gostaria de realizar o download agora?","manyChanges":"Verificação ortográfica encerrada: %1 palavras foram alteradas","noChanges":"Verificação ortográfica encerrada: Não houve alterações","noMispell":"Verificação encerrada: Não foram encontrados erros de ortografia","noSuggestions":"-sem sugestões de ortografia-","notAvailable":"Desculpe, o serviço não está disponível no momento.","notInDic":"Não encontrada","oneChange":"Verificação ortográfica encerrada: Uma palavra foi alterada","progress":"Verificação ortográfica em andamento...","title":"Corretor Ortográfico","toolbar":"Verificar Ortografia"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/pt.js b/wqflask/wqflask/static/packages/ckeditor/lang/pt.js
deleted file mode 100644
index fcff7b33..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/pt.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['pt']={"editor":"Rich Text Editor","editorPanel":"Painel do Rich Text Editor","common":{"editorHelp":"Pressione ALT+0 para ajuda","browseServer":"Explorar Servidor","url":"URL","protocol":"Protocolo","upload":"Enviar","uploadSubmit":"Enviá-lo para o Servidor","image":"Imagem","flash":"Flash","form":"Formulário","checkbox":"Caixa de Seleção","radio":"Botão","textField":"Campo do Texto","textarea":"Ãrea do Texto","hiddenField":"Campo Ocultado","button":"Botão","select":"Campo da Seleção","imageButton":"Botão da Imagem","notSet":"<Não definido>","id":"Id.","name":"Nome","langDir":"Direção do Idioma","langDirLtr":"Esquerda para a Direita (EPD)","langDirRtl":"Direita para a Esquerda (DPE)","langCode":"Código do Idioma","longDescr":"Descrição Completa do URL","cssClass":"Classes de Estilo das Folhas","advisoryTitle":"Título Consultivo","cssStyle":"Estilo","ok":"CONFIRMAR","cancel":"Cancelar","close":"Fechar","preview":"Pré-visualização","resize":"Redimensionar","generalTab":"Geral","advancedTab":"Avançado","validateNumberFailed":"Este valor não é um numero.","confirmNewPage":"Irão ser perdidas quaisquer alterações não guardadas. Tem a certeza que deseja carregar a nova página?","confirmCancel":"Foram alteradas algumas das opções. Tem a certeza que deseja fechar a janela?","options":"Opções","target":"Destino","targetNew":"Nova Janela (_blank)","targetTop":"Janela Superior (_top)","targetSelf":"Mesma Janela (_self)","targetParent":"Janela Parente (_parent)","langDirLTR":"Esquerda para a Direita (EPD)","langDirRTL":"Direita para a Esquerda (DPE)","styles":"Estilo","cssClasses":"Classes de Estilo das Folhas","width":"Largura","height":"Altura","align":"Alinhamento","alignLeft":"Esquerda","alignRight":"Direita","alignCenter":"Centrado","alignJustify":"Justificado","alignTop":"Topo","alignMiddle":"Centro","alignBottom":"Base","alignNone":"None","invalidValue":"Valor inválido.","invalidHeight":"A altura deve ser um número.","invalidWidth":"A largura deve ser um número. ","invalidCssLength":"O valor especificado para o campo \"1%\" deve ser um número positivo, com ou sem uma unidade de medida CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).","invalidHtmlLength":"O valor especificado para o campo \"1%\" deve ser um número positivo, com ou sem uma unidade de medida HTML válida (px ou %).","invalidInlineStyle":"O valor especificado para o estilo em linha deve constituir um ou mais conjuntos de valores com o formato de \"nome : valor\", separados por ponto e vírgula.","cssLengthTooltip":"Insira um número para um valor em pontos ou um número com uma unidade CSS válida (px, %, in, cm, mm, em, ex, pt, ou pc).","unavailable":"%1<span class=\"cke_accessibility\">, indisponível</span>"},"about":{"copy":"Direitos de Autor &copy; $1. Todos os direitos reservados.","dlgTitle":"Sobre o CKEditor","help":"Doar $1 para ajudar.","moreInfo":"Para informação sobre o licenciamento, visite o nosso site da web:","title":"Sobre o CKEditor","userGuide":"CKEditor - Guia do Utilizador"},"basicstyles":{"bold":"Negrito","italic":"Itálico","strike":"Rasurado","subscript":"Superior à Linha","superscript":"Inferior à Linha","underline":"Sublinhado"},"bidi":{"ltr":"Direção do texto da esquerda para a direita","rtl":"Direção do texto da direita para a esquerda"},"blockquote":{"toolbar":"Bloco de citação"},"clipboard":{"copy":"Copiar","copyError":"A configuração de segurança do navegador não permite a execução automática de operações de copiar. Por favor use o teclado (Ctrl/Cmd+C).","cut":"Cortar","cutError":"A configuração de segurança do navegador não permite a execução automática de operações de cortar. Por favor use o teclado (Ctrl/Cmd+X).","paste":"Colar","pasteArea":"Colar Ãrea","pasteMsg":"Por favor, cole dentro da seguinte caixa usando o teclado (<STRONG>Ctrl/Cmd+V</STRONG>) e prima <STRONG>OK</STRONG>.","securityMsg":"Devido ás definições de segurança do teu browser, o editor não pode aceder ao clipboard diretamente. É necessário que voltes a colar as informações nesta janela.","title":"Colar"},"button":{"selectedLabel":"%1 (Selecionados)"},"colorbutton":{"auto":"Automático","bgColorTitle":"Cor de Fundo","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Mais Cores...","panelTitle":"Colors","textColorTitle":"Cor do Texto"},"colordialog":{"clear":"Limpar","highlight":"Realçar","options":"Opções da Cor","selected":"Cor Selecionada","title":"Selecionar Cor"},"templates":{"button":"Modelos","emptyListMsg":"(Sem modelos definidos)","insertOption":"Substituir conteúdos actuais","options":"Opções do Modelo","selectPromptMsg":"Por favor, selecione o modelo para abrir no editor","title":"Conteúdo dos Modelos"},"contextmenu":{"options":"Menu de opções de contexto"},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"Título","cssClassInputLabel":"Classes de Estilo de Folhas Classes","edit":"Editar Div","inlineStyleInputLabel":"Estilho em Linha","langDirLTRLabel":"Esquerda à Direita (LTR)","langDirLabel":"Orientação de idioma","langDirRTLLabel":"Direita a Esquerda (RTL)","languageCodeInputLabel":"Codigo do Idioma","remove":"Remover Div","styleSelectLabel":"Estilo","title":"Criar Div","toolbar":"Criar Div"},"toolbar":{"toolbarCollapse":"Ocultar Barra de Ferramentas","toolbarExpand":"Expandir Barra de Ferramentas","toolbarGroups":{"document":"Documento","clipboard":"Ãrea de Transferência/Anular","editing":"Edição","forms":"Formulários","basicstyles":"Estilos Básicos","paragraph":"Parágrafo","links":"Hiperligações","insert":"Inserir","styles":"Estilos","colors":"Cores","tools":"Ferramentas"},"toolbars":"Editor de Barras de Ferramentas"},"elementspath":{"eleLabel":"Camninho dos Elementos","eleTitle":"Elemento %1"},"find":{"find":"Procurar","findOptions":"Find Options","findWhat":"Texto a Procurar:","matchCase":"Maiúsculas/Minúsculas","matchCyclic":"Match cyclic","matchWord":"Coincidir com toda a palavra","notFoundMsg":"O texto especificado não foi encontrado.","replace":"Substituir","replaceAll":"Substituir Tudo","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Substituir por:","title":"Find and Replace"},"fakeobjects":{"anchor":" Inserir/Editar Âncora","flash":"Animação Flash","hiddenfield":"Campo Ocultado","iframe":"IFrame","unknown":"Objeto Desconhecido"},"flash":{"access":"Acesso ao Script","accessAlways":"Sempre","accessNever":"Nunca","accessSameDomain":"Mesmo dominio","alignAbsBottom":"Abs inferior","alignAbsMiddle":"Abs centro","alignBaseline":"Linha de base","alignTextTop":"Topo do texto","bgcolor":"Cor de Fundo","chkFull":"Permitir Ecrã inteiro","chkLoop":"Loop","chkMenu":"Permitir Menu do Flash","chkPlay":"Reproduzir automaticamente","flashvars":"Variaveis para o Flash","hSpace":"Esp.Horiz","properties":"Propriedades do Flash","propertiesTab":"Propriedades","quality":"Qualidade","qualityAutoHigh":"Alta Automaticamente","qualityAutoLow":"Baixa Automaticamente","qualityBest":"Melhor","qualityHigh":"Alta","qualityLow":"Baixa","qualityMedium":"Média","scale":"Escala","scaleAll":"Mostrar tudo","scaleFit":"Tamanho Exacto","scaleNoBorder":"Sem Limites","title":"Propriedades do Flash","vSpace":"Esp.Vert","validateHSpace":"HSpace tem de ser um numero.","validateSrc":"Por favor introduza a hiperligação URL","validateVSpace":"VSpace tem de ser um numero.","windowMode":"Modo de janela","windowModeOpaque":"Opaco","windowModeTransparent":"Transparente","windowModeWindow":"Janela"},"font":{"fontSize":{"label":"Tamanho","voiceLabel":"Tamanho da Letra","panelTitle":"Tamanho da Letra"},"label":"Tipo de Letra","panelTitle":"Nome do Tipo de Letra","voiceLabel":"Tipo de Letra"},"forms":{"button":{"title":"Propriedades do Botão","text":"Texto (Valor)","type":"Tipo","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Propriedades da Caixa de Verificação","radioTitle":"Propriedades do Botão de Opção","value":"Valor","selected":"Seleccionado"},"form":{"title":"Propriedades do Formulário","menu":"Propriedades do Formulário","action":"Acção","method":"Método","encoding":"Encoding"},"hidden":{"title":"Propriedades do Campo Escondido","name":"Nome","value":"Valor"},"select":{"title":"Propriedades da Caixa de Combinação","selectInfo":"Informação","opAvail":"Opções Possíveis","value":"Valor","size":"Tamanho","lines":"linhas","chkMulti":"Permitir selecções múltiplas","opText":"Texto","opValue":"Valor","btnAdd":"Adicionar","btnModify":"Modificar","btnUp":"Para cima","btnDown":"Para baixo","btnSetValue":"Definir um valor por defeito","btnDelete":"Apagar"},"textarea":{"title":"Propriedades da Ãrea de Texto","cols":"Colunas","rows":"Linhas"},"textfield":{"title":"Propriedades do Campo de Texto","name":"Nome","value":"Valor","charWidth":"Tamanho do caracter","maxChars":"Nr. Máximo de Caracteres","type":"Tipo","typeText":"Texto","typePass":"Palavra-chave","typeEmail":"Email","typeSearch":"Pesquisar","typeTel":"Numero de telefone","typeUrl":"URL"}},"format":{"label":"Formatar","panelTitle":"Formatar Parágrafo","tag_address":"Endereço","tag_div":"Normal (DIV)","tag_h1":"Título 1","tag_h2":"Título 2","tag_h3":"Título 3","tag_h4":"Título 4","tag_h5":"Título 5","tag_h6":"Título 6","tag_p":"Normal","tag_pre":"Formatado"},"horizontalrule":{"toolbar":"Inserir Linha Horizontal"},"iframe":{"border":"Mostrar a borda da Frame","noUrl":"Por favor, digite o URL da iframe","scrolling":"Ativar barras de deslocamento","title":"Propriedades da IFrame","toolbar":"IFrame"},"image":{"alertUrl":"Por favor introduza o URL da imagem","alt":"Texto Alternativo","border":"Limite","btnUpload":"Enviar para o Servidor","button2Img":"Deseja transformar o botão com imagem selecionado em uma imagem?","hSpace":"Esp.Horiz","img2Button":"Deseja transformar a imagem selecionada em um botão com imagem?","infoTab":"Informação da Imagem","linkTab":"Hiperligação","lockRatio":"Proporcional","menu":"Propriedades da Imagem","resetSize":"Tamanho Original","title":"Propriedades da Imagem","titleButton":"Propriedades do Botão de imagens","upload":"Carregar","urlMissing":"O URL da fonte da imagem está em falta.","vSpace":"Esp.Vert","validateBorder":"A borda tem de ser um numero.","validateHSpace":"HSpace tem de ser um numero.","validateVSpace":"VSpace tem de ser um numero."},"indent":{"indent":"Aumentar Avanço","outdent":"Diminuir Avanço"},"smiley":{"options":"Opções de Emoticons","title":"Inserir um Emoticon","toolbar":"Emoticons"},"justify":{"block":"Justificado","center":"Alinhar ao Centro","left":"Alinhar à Esquerda","right":"Alinhar à Direita"},"language":{"button":"Definir Idioma","remove":"Remover Idioma"},"link":{"acccessKey":"Chave de Acesso","advanced":"Avançado","advisoryContentType":"Tipo de Conteúdo","advisoryTitle":"Título","anchor":{"toolbar":" Inserir/Editar Âncora","menu":"Propriedades da Âncora","title":"Propriedades da Âncora","name":"Nome da Âncora","errorName":"Por favor, introduza o nome da âncora","remove":"Remove Anchor"},"anchorId":"Por ID de elemento","anchorName":"Por Nome de Referência","charset":"Fonte de caracteres vinculado","cssClasses":"Classes de Estilo de Folhas Classes","emailAddress":"Endereço de E-Mail","emailBody":"Corpo da Mensagem","emailSubject":"Título de Mensagem","id":"ID","info":"Informação de Hiperligação","langCode":"Orientação de idioma","langDir":"Orientação de idioma","langDirLTR":"Esquerda à Direita (LTR)","langDirRTL":"Direita a Esquerda (RTL)","menu":"Editar Hiperligação","name":"Nome","noAnchors":"(Não há referências disponíveis no documento)","noEmail":"Por favor introduza o endereço de e-mail","noUrl":"Por favor introduza a hiperligação URL","other":"<outro>","popupDependent":"Dependente (Netscape)","popupFeatures":"Características de Janela de Popup","popupFullScreen":"Janela Completa (IE)","popupLeft":"Posição Esquerda","popupLocationBar":"Barra de localização","popupMenuBar":"Barra de Menu","popupResizable":"Redimensionável","popupScrollBars":"Barras de deslocamento","popupStatusBar":"Barra de Estado","popupToolbar":"Barra de Ferramentas","popupTop":"Posição Direita","rel":"Relação","selectAnchor":"Seleccionar una referência","styles":"Estilo","tabIndex":"Ãndice de Tubulação","target":"Destino","targetFrame":"<Frame>","targetFrameName":"Nome do Frame Destino","targetPopup":"<Janela de popup>","targetPopupName":"Nome da Janela de Popup","title":"Hiperligação","toAnchor":"Referência a esta página","toEmail":"E-Mail","toUrl":"URL","toolbar":"Inserir/Editar Hiperligação","type":"Tipo de Hiperligação","unlink":"Eliminar Hiperligação","upload":"Carregar"},"list":{"bulletedlist":"Marcas","numberedlist":"Numeração"},"liststyle":{"armenian":"Numeração armênia","bulletedTitle":"Bulleted List Properties","circle":"Círculo","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disco","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"Nenhum","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Quadrado","start":"Iniciar","type":"Tipo","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insira aqui o parágrafo"},"maximize":{"maximize":"Maximizar","minimize":"Minimizar"},"newpage":{"toolbar":"Nova Página"},"pagebreak":{"alt":"Quebra de página","toolbar":"Inserir Quebra de Página"},"pastetext":{"button":"Colar como Texto Simples","title":"Colar como Texto Simples"},"pastefromword":{"confirmCleanup":"O texto que pretende colar parece ter sido copiado do Word. Deseja limpá-lo antes de colar?","error":"Não foi possivel limpar a informação colada decido a um erro interno.","title":"Colar do Word","toolbar":"Colar do Word"},"preview":{"preview":"Pré-visualizar"},"print":{"toolbar":"Imprimir"},"removeformat":{"toolbar":"Eliminar Formato"},"save":{"toolbar":"Guardar"},"selectall":{"toolbar":"Selecionar Tudo"},"showblocks":{"toolbar":"Exibir blocos"},"sourcearea":{"toolbar":"Fonte"},"specialchar":{"options":"Opções de caracteres especiais","title":"Selecione um caracter especial","toolbar":"Inserir Caracter Especial"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Estilos","panelTitle":"Estilos de Formatação","panelTitle1":"Estilos de Bloco","panelTitle2":"Estilos de Linha","panelTitle3":"Estilos de Objeto"},"table":{"border":"Tamanho da Margem","caption":"Título","cell":{"menu":"Célula","insertBefore":"Inserir Célula Antes","insertAfter":"Inserir Célula Depois","deleteCell":"Apagar Células","merge":"Unir Células","mergeRight":"Unir à Direita","mergeDown":"Unir Abaixo","splitHorizontal":"Dividir Célula Horizontalmente","splitVertical":"Dividir Célula Verticalmente","title":"Propriedades da Célula","cellType":"Tipo de Célula","rowSpan":"Filas na Célula","colSpan":"Colunas na Célula","wordWrap":"Continuar","hAlign":"Alinhamento Horizontal","vAlign":"Alinhamento Vertical","alignBaseline":"Base","bgColor":"Cor de Fundo","borderColor":"Cor da Margem","data":"Dados","header":"Cabeçalho","yes":"Sim","no":"Não","invalidWidth":"A largura da célula deve ser um número.","invalidHeight":"A altura da célula deve ser um número.","invalidRowSpan":"As filas da célula deve ter um número inteiro.","invalidColSpan":"As colunas da célula deve ter um número inteiro.","chooseColor":"Escolher"},"cellPad":"Criação de Espaço","cellSpace":"Espaçamento Célula","column":{"menu":"Coluna","insertBefore":"Inserir Coluna Antes","insertAfter":"Inserir Coluna Depois","deleteColumn":"Apagar Colunas"},"columns":"Colunas","deleteTable":"Apagar Tabela","headers":"Cabeçalhos","headersBoth":"Ambos","headersColumn":"Primeira coluna","headersNone":"Nenhum","headersRow":"Primeira Linha","invalidBorder":"O tamanho da margem tem de ser um número.","invalidCellPadding":"A criação do espaço na célula deve ser um número positivo.","invalidCellSpacing":"O espaçamento da célula deve ser um número positivo.","invalidCols":"O número de colunas tem de ser um número maior que 0.","invalidHeight":"A altura da tabela tem de ser um número.","invalidRows":"O número das linhas tem de ser um número maior que 0.","invalidWidth":"A largura da tabela tem de ser um número.","menu":"Propriedades da Tabela","row":{"menu":"Linha","insertBefore":"Inserir Linha Antes","insertAfter":"Inserir Linha Depois","deleteRow":"Apagar Linhas"},"rows":"Linhas","summary":"Sumário","title":"Propriedades da Tabela","toolbar":"Tabela","widthPc":"percentagem","widthPx":"pontos","widthUnit":"unidade da largura"},"undo":{"redo":"Refazer","undo":"Anular"},"wsc":{"btnIgnore":"Ignorar","btnIgnoreAll":"Ignorar Tudo","btnReplace":"Substituir","btnReplaceAll":"Substituir Tudo","btnUndo":"Anular","changeTo":"Mudar para","errorLoading":"Error loading application service host: %s.","ieSpellDownload":" Verificação ortográfica não instalada. Quer descarregar agora?","manyChanges":"Verificação ortográfica completa: %1 palavras alteradas","noChanges":"Verificação ortográfica completa: não houve alteração de palavras","noMispell":"Verificação ortográfica completa: não foram encontrados erros","noSuggestions":"- Sem sugestões -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Não está num directório","oneChange":"Verificação ortográfica completa: uma palavra alterada","progress":"Verificação ortográfica em progresso…","title":"Spell Check","toolbar":"Verificação Ortográfica"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/ro.js b/wqflask/wqflask/static/packages/ckeditor/lang/ro.js
deleted file mode 100644
index 5648bdae..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/ro.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ro']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Apasă ALT 0 pentru ajutor","browseServer":"Răsfoieşte server","url":"URL","protocol":"Protocol","upload":"Încarcă","uploadSubmit":"Trimite la server","image":"Imagine","flash":"Flash","form":"Formular (Form)","checkbox":"Bifă (Checkbox)","radio":"Buton radio (RadioButton)","textField":"Câmp text (TextField)","textarea":"Suprafaţă text (Textarea)","hiddenField":"Câmp ascuns (HiddenField)","button":"Buton","select":"Câmp selecţie (SelectionField)","imageButton":"Buton imagine (ImageButton)","notSet":"<nesetat>","id":"Id","name":"Nume","langDir":"Direcţia cuvintelor","langDirLtr":"stânga-dreapta (LTR)","langDirRtl":"dreapta-stânga (RTL)","langCode":"Codul limbii","longDescr":"Descrierea lungă URL","cssClass":"Clasele cu stilul paginii (CSS)","advisoryTitle":"Titlul consultativ","cssStyle":"Stil","ok":"OK","cancel":"Anulare","close":"Închide","preview":"Previzualizare","resize":"Trage pentru a redimensiona","generalTab":"General","advancedTab":"Avansat","validateNumberFailed":"Această valoare nu este un număr.","confirmNewPage":"Orice modificări nesalvate ale acestui conținut, vor fi pierdute. Sigur doriți încărcarea unei noi pagini?","confirmCancel":"Câteva opțiuni au fost schimbate. Sigur doriți să închideți dialogul?","options":"Opțiuni","target":"Țintă","targetNew":"Fereastră nouă (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"În aceeași fereastră (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"Stânga spre Dreapta (LTR)","langDirRTL":"Dreapta spre Stânga (RTL)","styles":"Stil","cssClasses":"Stylesheet Classes","width":"Lăţime","height":"Înălţime","align":"Aliniere","alignLeft":"Mărește Bara","alignRight":"Dreapta","alignCenter":"Centru","alignJustify":"Aliniere în bloc (Block Justify)","alignTop":"Sus","alignMiddle":"Mijloc","alignBottom":"Jos","alignNone":"None","invalidValue":"Varloare invalida","invalidHeight":"Înălțimea trebuie să fie un număr.","invalidWidth":"Lățimea trebuie să fie un număr.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, nu este disponibil</span>"},"about":{"copy":"Copyright &copy; $1. Toate drepturile rezervate.","dlgTitle":"Despre CKEeditor","help":"Citește $1 pentru ajutor.","moreInfo":"Pentru informații despre licență, vă rugăm vizitați web site-ul nostru:","title":"Despre CKEditor","userGuide":"CKEditor Ghid Utilizator"},"basicstyles":{"bold":"Îngroşat (bold)","italic":"Înclinat (italic)","strike":"Tăiat (strike through)","subscript":"Indice (subscript)","superscript":"Putere (superscript)","underline":"Subliniat (underline)"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Citat"},"clipboard":{"copy":"Copiază","copyError":"Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de copiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+C).","cut":"Taie","cutError":"Setările de securitate ale navigatorului (browser) pe care îl folosiţi nu permit editorului să execute automat operaţiunea de tăiere. Vă rugăm folosiţi tastatura (Ctrl/Cmd+X).","paste":"Adaugă","pasteArea":"Suprafața de adăugare","pasteMsg":"Vă rugăm adăugaţi în căsuţa următoare folosind tastatura (<strong>Ctrl/Cmd+V</strong>) şi apăsaţi OK","securityMsg":"Din cauza setărilor de securitate ale programului dvs. cu care navigaţi pe internet (browser), editorul nu poate accesa direct datele din clipboard. Va trebui să adăugaţi din nou datele în această fereastră.","title":"Adaugă"},"button":{"selectedLabel":"%1 (Selectat)"},"colorbutton":{"auto":"Automatic","bgColorTitle":"Coloarea fundalului","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Mai multe culori...","panelTitle":"Colors","textColorTitle":"Culoarea textului"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Template-uri (şabloane)","emptyListMsg":"(Niciun template (şablon) definit)","insertOption":"Înlocuieşte cuprinsul actual","options":"Opțiuni șabloane","selectPromptMsg":"Vă rugăm selectaţi template-ul (şablonul) ce se va deschide în editor<br>(conţinutul actual va fi pierdut):","title":"Template-uri (şabloane) de conţinut"},"contextmenu":{"options":"Opțiuni Meniu Contextual"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Titlul consultativ","cssClassInputLabel":"Clasele cu stilul paginii (CSS)","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"stânga-dreapta (LTR)","langDirLabel":"Direcţia cuvintelor","langDirRTLLabel":"dreapta-stânga (RTL)","languageCodeInputLabel":"Codul limbii","remove":"Remove Div","styleSelectLabel":"Stil","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"Micșorează Bara","toolbarExpand":"Mărește Bara","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Editează bara de unelte"},"elementspath":{"eleLabel":"Calea elementelor","eleTitle":"%1 element"},"find":{"find":"Găseşte","findOptions":"Find Options","findWhat":"Găseşte:","matchCase":"Deosebeşte majuscule de minuscule (Match case)","matchCyclic":"Potrivește ciclic","matchWord":"Doar cuvintele întregi","notFoundMsg":"Textul specificat nu a fost găsit.","replace":"Înlocuieşte","replaceAll":"Înlocuieşte tot","replaceSuccessMsg":"%1 căutări înlocuite.","replaceWith":"Înlocuieşte cu:","title":"Găseşte şi înlocuieşte"},"fakeobjects":{"anchor":"Inserează/Editează ancoră","flash":"Flash Animation","hiddenfield":"Câmp ascuns (HiddenField)","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Acces script","accessAlways":"Întotdeauna","accessNever":"Niciodată","accessSameDomain":"Același domeniu","alignAbsBottom":"Jos absolut (Abs Bottom)","alignAbsMiddle":"Mijloc absolut (Abs Middle)","alignBaseline":"Linia de jos (Baseline)","alignTextTop":"Text sus","bgcolor":"Coloarea fundalului","chkFull":"Permite pe tot ecranul","chkLoop":"Repetă (Loop)","chkMenu":"Activează meniul flash","chkPlay":"Rulează automat","flashvars":"Variabile pentru flash","hSpace":"HSpace","properties":"Proprietăţile flashului","propertiesTab":"Proprietăți","quality":"Calitate","qualityAutoHigh":"Auto înaltă","qualityAutoLow":"Auto Joasă","qualityBest":"Cea mai bună","qualityHigh":"Înaltă","qualityLow":"Joasă","qualityMedium":"Medie","scale":"Scală","scaleAll":"Arată tot","scaleFit":"Potriveşte","scaleNoBorder":"Fără bordură (No border)","title":"Proprietăţile flashului","vSpace":"VSpace","validateHSpace":"Hspace trebuie să fie un număr.","validateSrc":"Vă rugăm să scrieţi URL-ul","validateVSpace":"VSpace trebuie să fie un număr","windowMode":"Mod fereastră","windowModeOpaque":"Opacă","windowModeTransparent":"Transparentă","windowModeWindow":"Fereastră"},"font":{"fontSize":{"label":"Mărime","voiceLabel":"Font Size","panelTitle":"Mărime"},"label":"Font","panelTitle":"Font","voiceLabel":"Font"},"forms":{"button":{"title":"Proprietăţi buton","text":"Text (Valoare)","type":"Tip","typeBtn":"Buton","typeSbm":"Trimite","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Proprietăţi bifă (Checkbox)","radioTitle":"Proprietăţi buton radio (Radio Button)","value":"Valoare","selected":"Selectat"},"form":{"title":"Proprietăţi formular (Form)","menu":"Proprietăţi formular (Form)","action":"Acţiune","method":"Metodă","encoding":"Encodare"},"hidden":{"title":"Proprietăţi câmp ascuns (Hidden Field)","name":"Nume","value":"Valoare"},"select":{"title":"Proprietăţi câmp selecţie (Selection Field)","selectInfo":"Informaţii","opAvail":"Opţiuni disponibile","value":"Valoare","size":"Mărime","lines":"linii","chkMulti":"Permite selecţii multiple","opText":"Text","opValue":"Valoare","btnAdd":"Adaugă","btnModify":"Modifică","btnUp":"Sus","btnDown":"Jos","btnSetValue":"Setează ca valoare selectată","btnDelete":"Şterge"},"textarea":{"title":"Proprietăţi suprafaţă text (Textarea)","cols":"Coloane","rows":"Linii"},"textfield":{"title":"Proprietăţi câmp text (Text Field)","name":"Nume","value":"Valoare","charWidth":"Lărgimea caracterului","maxChars":"Caractere maxime","type":"Tip","typeText":"Text","typePass":"Parolă","typeEmail":"Email","typeSearch":"Cauta","typeTel":"Numar de telefon","typeUrl":"URL"}},"format":{"label":"Formatare","panelTitle":"Formatare","tag_address":"Adresă","tag_div":"Normal (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatat"},"horizontalrule":{"toolbar":"Inserează linie orizontală"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"Vă rugăm să scrieţi URL-ul imaginii","alt":"Text alternativ","border":"Margine","btnUpload":"Trimite la server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Informaţii despre imagine","linkTab":"Link (Legătură web)","lockRatio":"Păstrează proporţiile","menu":"Proprietăţile imaginii","resetSize":"Resetează mărimea","title":"Proprietăţile imaginii","titleButton":"Proprietăţi buton imagine (Image Button)","upload":"Încarcă","urlMissing":"Sursa URL a imaginii lipsește.","vSpace":"VSpace","validateBorder":"Bordura trebuie să fie un număr întreg.","validateHSpace":"Hspace trebuie să fie un număr întreg.","validateVSpace":"Vspace trebuie să fie un număr întreg."},"indent":{"indent":"Creşte indentarea","outdent":"Scade indentarea"},"smiley":{"options":"Opțiuni figuri expresive","title":"Inserează o figură expresivă (Emoticon)","toolbar":"Figură expresivă (Emoticon)"},"justify":{"block":"Aliniere în bloc (Block Justify)","center":"Aliniere centrală","left":"Aliniere la stânga","right":"Aliniere la dreapta"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Tasta de acces","advanced":"Avansat","advisoryContentType":"Tipul consultativ al titlului","advisoryTitle":"Titlul consultativ","anchor":{"toolbar":"Inserează/Editează ancoră","menu":"Proprietăţi ancoră","title":"Proprietăţi ancoră","name":"Numele ancorei","errorName":"Vă rugăm scrieţi numele ancorei","remove":"Elimină ancora"},"anchorId":"după Id-ul elementului","anchorName":"după numele ancorei","charset":"Setul de caractere al resursei legate","cssClasses":"Clasele cu stilul paginii (CSS)","emailAddress":"Adresă de e-mail","emailBody":"Opțiuni Meniu Contextual","emailSubject":"Subiectul mesajului","id":"Id","info":"Informaţii despre link (Legătură web)","langCode":"Direcţia cuvintelor","langDir":"Direcţia cuvintelor","langDirLTR":"stânga-dreapta (LTR)","langDirRTL":"dreapta-stânga (RTL)","menu":"Editează Link","name":"Nume","noAnchors":"(Nicio ancoră disponibilă în document)","noEmail":"Vă rugăm să scrieţi adresa de e-mail","noUrl":"Vă rugăm să scrieţi URL-ul","other":"<alt>","popupDependent":"Dependent (Netscape)","popupFeatures":"Proprietăţile ferestrei popup","popupFullScreen":"Tot ecranul (Full Screen)(IE)","popupLeft":"Poziţia la stânga","popupLocationBar":"Bara de locaţie","popupMenuBar":"Bara de meniu","popupResizable":"Redimensionabil","popupScrollBars":"Bare de derulare","popupStatusBar":"Bara de status","popupToolbar":"Bara de opţiuni","popupTop":"Poziţia la dreapta","rel":"Relație","selectAnchor":"Selectaţi o ancoră","styles":"Stil","tabIndex":"Indexul tabului","target":"Ţintă (Target)","targetFrame":"<frame>","targetFrameName":"Numele frameului ţintă","targetPopup":"<fereastra popup>","targetPopupName":"Numele ferestrei popup","title":"Link (Legătură web)","toAnchor":"Ancoră în această pagină","toEmail":"E-Mail","toUrl":"URL","toolbar":"Inserează/Editează link (legătură web)","type":"Tipul link-ului (al legăturii web)","unlink":"Înlătură link (legătură web)","upload":"Încarcă"},"list":{"bulletedlist":"Inserează / Elimină Listă cu puncte","numberedlist":"Inserează / Elimină Listă numerotată"},"liststyle":{"armenian":"Numerotare armeniană","bulletedTitle":"Proprietățile listei cu simboluri","circle":"Cerc","decimal":"Decimale (1, 2, 3, etc.)","decimalLeadingZero":"Decimale cu zero în față (01, 02, 03, etc.)","disc":"Disc","georgian":"Numerotare georgiană (an, ban, gan, etc.)","lowerAlpha":"Litere mici (a, b, c, d, e, etc.)","lowerGreek":"Litere grecești mici (alpha, beta, gamma, etc.)","lowerRoman":"Cifre romane mici (i, ii, iii, iv, v, etc.)","none":"Nimic","notset":"<nesetat>","numberedTitle":"Proprietățile listei numerotate","square":"Pătrat","start":"Start","type":"Tip","upperAlpha":"Litere mari (A, B, C, D, E, etc.)","upperRoman":"Cifre romane mari (I, II, III, IV, V, etc.)","validateStartNumber":"Începutul listei trebuie să fie un număr întreg."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Mărește","minimize":"Micșorează"},"newpage":{"toolbar":"Pagină nouă"},"pagebreak":{"alt":"Page Break","toolbar":"Inserează separator de pagină (Page Break)"},"pastetext":{"button":"Adaugă ca text simplu (Plain Text)","title":"Adaugă ca text simplu (Plain Text)"},"pastefromword":{"confirmCleanup":"Textul pe care doriți să-l lipiți este din Word. Doriți curățarea textului înante de a-l adăuga?","error":"Nu a fost posibilă curățarea datelor adăugate datorită unei erori interne","title":"Adaugă din Word","toolbar":"Adaugă din Word"},"preview":{"preview":"Previzualizare"},"print":{"toolbar":"Printează"},"removeformat":{"toolbar":"Înlătură formatarea"},"save":{"toolbar":"Salvează"},"selectall":{"toolbar":"Selectează tot"},"showblocks":{"toolbar":"Arată blocurile"},"sourcearea":{"toolbar":"Sursa"},"specialchar":{"options":"Opțiuni caractere speciale","title":"Selectează caracter special","toolbar":"Inserează caracter special"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Stil","panelTitle":"Formatarea stilurilor","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Mărimea marginii","caption":"Titlu (Caption)","cell":{"menu":"Celulă","insertBefore":"Inserează celulă înainte","insertAfter":"Inserează celulă după","deleteCell":"Şterge celule","merge":"Uneşte celule","mergeRight":"Uneşte la dreapta","mergeDown":"Uneşte jos","splitHorizontal":"Împarte celula pe orizontală","splitVertical":"Împarte celula pe verticală","title":"Proprietăți celulă","cellType":"Tipul celulei","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Aliniament orizontal","vAlign":"Aliniament vertical","alignBaseline":"Baseline","bgColor":"Culoare fundal","borderColor":"Culoare bordură","data":"Data","header":"Antet","yes":"Da","no":"Nu","invalidWidth":"Lățimea celulei trebuie să fie un număr.","invalidHeight":"Înălțimea celulei trebuie să fie un număr.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Alege"},"cellPad":"Spaţiu în cadrul celulei","cellSpace":"Spaţiu între celule","column":{"menu":"Coloană","insertBefore":"Inserează coloană înainte","insertAfter":"Inserează coloană după","deleteColumn":"Şterge celule"},"columns":"Coloane","deleteTable":"Şterge tabel","headers":"Antente","headersBoth":"Ambele","headersColumn":"Prima coloană","headersNone":"Nimic","headersRow":"Primul rând","invalidBorder":"Dimensiunea bordurii trebuie să aibe un număr.","invalidCellPadding":"Spațierea celulei trebuie sa fie un număr pozitiv","invalidCellSpacing":"Spațierea celului trebuie să fie un număr pozitiv.","invalidCols":"Numărul coloanelor trebuie să fie mai mare decât 0.","invalidHeight":"Inaltimea celulei trebuie sa fie un numar.","invalidRows":"Numărul rândurilor trebuie să fie mai mare decât 0.","invalidWidth":"Lățimea tabelului trebuie să fie un număr.","menu":"Proprietăţile tabelului","row":{"menu":"Rând","insertBefore":"Inserează rând înainte","insertAfter":"Inserează rând după","deleteRow":"Şterge rânduri"},"rows":"Rânduri","summary":"Rezumat","title":"Proprietăţile tabelului","toolbar":"Tabel","widthPc":"procente","widthPx":"pixeli","widthUnit":"unitate lățime"},"undo":{"redo":"Starea ulterioară (redo)","undo":"Starea anterioară (undo)"},"wsc":{"btnIgnore":"Ignoră","btnIgnoreAll":"Ignoră toate","btnReplace":"Înlocuieşte","btnReplaceAll":"Înlocuieşte tot","btnUndo":"Starea anterioară (undo)","changeTo":"Schimbă în","errorLoading":"Eroare în lansarea aplicației service host %s.","ieSpellDownload":"Unealta pentru verificat textul (Spell checker) neinstalată. Doriţi să o descărcaţi acum?","manyChanges":"Verificarea textului terminată: 1% cuvinte modificate","noChanges":"Verificarea textului terminată: Niciun cuvânt modificat","noMispell":"Verificarea textului terminată: Nicio greşeală găsită","noSuggestions":"- Fără sugestii -","notAvailable":"Scuzați, dar serviciul nu este disponibil momentan.","notInDic":"Nu e în dicţionar","oneChange":"Verificarea textului terminată: Un cuvânt modificat","progress":"Verificarea textului în desfăşurare...","title":"Spell Check","toolbar":"Verifică scrierea textului"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/ru.js b/wqflask/wqflask/static/packages/ckeditor/lang/ru.js
deleted file mode 100644
index 41551b3b..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/ru.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ru']={"editor":"Визуальный текÑтовый редактор","editorPanel":"Визуальный редактор текÑта","common":{"editorHelp":"Ðажмите ALT-0 Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñправки","browseServer":"Выбор на Ñервере","url":"СÑылка","protocol":"Протокол","upload":"Загрузка файла","uploadSubmit":"Загрузить на Ñервер","image":"Изображение","flash":"Flash","form":"Форма","checkbox":"ЧекбокÑ","radio":"Радиокнопка","textField":"ТекÑтовое поле","textarea":"МногоÑтрочное текÑтовое поле","hiddenField":"Скрытое поле","button":"Кнопка","select":"Выпадающий ÑпиÑок","imageButton":"Кнопка-изображение","notSet":"<не указано>","id":"Идентификатор","name":"ИмÑ","langDir":"Ðаправление текÑта","langDirLtr":"Слева направо (LTR)","langDirRtl":"Справа налево (RTL)","langCode":"Код Ñзыка","longDescr":"Длинное опиÑание ÑÑылки","cssClass":"КлаÑÑ CSS","advisoryTitle":"Заголовок","cssStyle":"Стиль","ok":"ОК","cancel":"Отмена","close":"Закрыть","preview":"ПредпроÑмотр","resize":"Перетащите Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ€Ð°Ð·Ð¼ÐµÑ€Ð°","generalTab":"ОÑновное","advancedTab":"Дополнительно","validateNumberFailed":"Это значение не ÑвлÑетÑÑ Ñ‡Ð¸Ñлом.","confirmNewPage":"ÐеÑохранённые Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ потерÑны! Ð’Ñ‹ дейÑтвительно желаете перейти на другую Ñтраницу?","confirmCancel":"Ðекоторые параметры были изменены. Ð’Ñ‹ уверены, что желаете закрыть без ÑохранениÑ?","options":"Параметры","target":"Цель","targetNew":"Ðовое окно (_blank)","targetTop":"Главное окно (_top)","targetSelf":"Текущее окно (_self)","targetParent":"РодительÑкое окно (_parent)","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","styles":"Стиль","cssClasses":"CSS клаÑÑÑ‹","width":"Ширина","height":"Ð’Ñ‹Ñота","align":"Выравнивание","alignLeft":"По левому краю","alignRight":"По правому краю","alignCenter":"По центру","alignJustify":"По ширине","alignTop":"Поверху","alignMiddle":"ПоÑередине","alignBottom":"Понизу","alignNone":"Ðет","invalidValue":"ÐедопуÑтимое значение.","invalidHeight":"Ð’Ñ‹Ñота задаетÑÑ Ñ‡Ð¸Ñлом.","invalidWidth":"Ширина задаетÑÑ Ñ‡Ð¸Ñлом.","invalidCssLength":"Значение, указанное в поле \"%1\", должно быть положительным целым чиÑлом. ДопуÑкаетÑÑ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ðµ единиц меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","invalidHtmlLength":"Значение, указанное в поле \"%1\", должно быть положительным целым чиÑлом. ДопуÑкаетÑÑ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ðµ единиц меры HTML (px или %).","invalidInlineStyle":"Значение, указанное Ð´Ð»Ñ ÑÑ‚Ð¸Ð»Ñ Ñлемента, должно ÑоÑтоÑÑ‚ÑŒ из одной или неÑкольких пар данных в формате \"параметр : значение\", разделённых точкой Ñ Ð·Ð°Ð¿Ñтой.","cssLengthTooltip":"Введите значение в пикÑелÑÑ…, либо чиÑло Ñ ÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð¾Ð¹ единицей меры CSS (px, %, in, cm, mm, em, ex, pt или pc).","unavailable":"%1<span class=\"cke_accessibility\">, недоÑтупно</span>"},"about":{"copy":"Copyright &copy; $1. Ð’Ñе права защищены.","dlgTitle":"О CKEditor","help":"$1 Ñодержит подробную Ñправку по иÑпользованию.","moreInfo":"Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о лицензии, пожалуйÑта, перейдите на наш Ñайт:","title":"О CKEditor","userGuide":"РуководÑтво Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ CKEditor"},"basicstyles":{"bold":"Полужирный","italic":"КурÑив","strike":"Зачеркнутый","subscript":"ПодÑтрочный индекÑ","superscript":"ÐадÑтрочный индекÑ","underline":"Подчеркнутый"},"bidi":{"ltr":"Ðаправление текÑта Ñлева направо","rtl":"Ðаправление текÑта Ñправа налево"},"blockquote":{"toolbar":"Цитата"},"clipboard":{"copy":"Копировать","copyError":"ÐаÑтройки безопаÑноÑти вашего браузера не разрешают редактору выполнÑÑ‚ÑŒ операции по копированию текÑта. ПожалуйÑта, иÑпользуйте Ð´Ð»Ñ Ñтого клавиатуру (Ctrl/Cmd+C).","cut":"Вырезать","cutError":"ÐаÑтройки безопаÑноÑти вашего браузера не разрешают редактору выполнÑÑ‚ÑŒ операции по вырезке текÑта. ПожалуйÑта, иÑпользуйте Ð´Ð»Ñ Ñтого клавиатуру (Ctrl/Cmd+X).","paste":"Ð’Ñтавить","pasteArea":"Зона Ð´Ð»Ñ Ð²Ñтавки","pasteMsg":"ПожалуйÑта, вÑтавьте текÑÑ‚ в зону ниже, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ ÐºÐ»Ð°Ð²Ð¸Ð°Ñ‚ÑƒÑ€Ñƒ (<strong>Ctrl/Cmd+V</strong>) и нажмите кнопку \"OK\".","securityMsg":"ÐаÑтройки безопаÑноÑти вашего браузера не разрешают редактору напрÑмую обращатьÑÑ Ðº буферу обмена. Ð’Ñ‹ должны вÑтавить текÑÑ‚ Ñнова в Ñто окно.","title":"Ð’Ñтавить"},"button":{"selectedLabel":"%1 (Выбрано)"},"colorbutton":{"auto":"ÐвтоматичеÑки","bgColorTitle":"Цвет фона","colors":{"000":"Чёрный","800000":"Бордовый","8B4513":"Кожано-коричневый","2F4F4F":"Темный Ñиневато-Ñерый","008080":"Сине-зелёный","000080":"Тёмно-Ñиний","4B0082":"Индиго","696969":"Тёмно-Ñерый","B22222":"Кирпичный","A52A2A":"Коричневый","DAA520":"ЗолотиÑто-берёзовый","006400":"Темно-зелёный","40E0D0":"Бирюзовый","0000CD":"Умеренно Ñиний","800080":"Пурпурный","808080":"Серый","F00":"КраÑный","FF8C00":"Темно-оранжевый","FFD700":"ЗолотиÑтый","008000":"Зелёный","0FF":"ВаÑильковый","00F":"Синий","EE82EE":"Фиолетовый","A9A9A9":"ТуÑкло-Ñерый","FFA07A":"Светло-лоÑоÑевый","FFA500":"Оранжевый","FFFF00":"Жёлтый","00FF00":"Лайма","AFEEEE":"Бледно-Ñиний","ADD8E6":"Свелто-голубой","DDA0DD":"Сливовый","D3D3D3":"Светло-Ñерый","FFF0F5":"Розово-лавандовый","FAEBD7":"Ðнтичный белый","FFFFE0":"Светло-жёлтый","F0FFF0":"МедвÑной роÑÑ‹","F0FFFF":"Лазурный","F0F8FF":"Бледно-голубой","E6E6FA":"Лавандовый","FFF":"Белый"},"more":"Ещё цвета...","panelTitle":"Цвета","textColorTitle":"Цвет текÑта"},"colordialog":{"clear":"ОчиÑтить","highlight":"Под курÑором","options":"ÐаÑтройки цвета","selected":"Выбранный цвет","title":"Выберите цвет"},"templates":{"button":"Шаблоны","emptyListMsg":"(не определено ни одного шаблона)","insertOption":"Заменить текущее Ñодержимое","options":"Параметры шаблона","selectPromptMsg":"ПожалуйÑта, выберите, какой шаблон Ñледует открыть в редакторе","title":"Шаблоны Ñодержимого"},"contextmenu":{"options":"Параметры контекÑтного меню"},"div":{"IdInputLabel":"Идентификатор","advisoryTitleInputLabel":"Заголовок","cssClassInputLabel":"КлаÑÑÑ‹ CSS","edit":"Редактировать контейнер","inlineStyleInputLabel":"Стиль Ñлемента","langDirLTRLabel":"Слева направо (LTR)","langDirLabel":"Ðаправление текÑта","langDirRTLLabel":"Справа налево (RTL)","languageCodeInputLabel":"Код Ñзыка","remove":"Удалить контейнер","styleSelectLabel":"Стиль","title":"Создать Div-контейнер","toolbar":"Создать Div-контейнер"},"toolbar":{"toolbarCollapse":"Свернуть панель инÑтрументов","toolbarExpand":"Развернуть панель инÑтрументов","toolbarGroups":{"document":"Документ","clipboard":"Буфер обмена / Отмена дейÑтвий","editing":"Корректировка","forms":"Формы","basicstyles":"ПроÑтые Ñтили","paragraph":"Ðбзац","links":"СÑылки","insert":"Ð’Ñтавка","styles":"Стили","colors":"Цвета","tools":"ИнÑтрументы"},"toolbars":"Панели инÑтрументов редактора"},"elementspath":{"eleLabel":"Путь Ñлементов","eleTitle":"Элемент %1"},"find":{"find":"Ðайти","findOptions":"Опции поиÑка","findWhat":"Ðайти:","matchCase":"Учитывать региÑÑ‚Ñ€","matchCyclic":"По вÑему текÑту","matchWord":"Только Ñлово целиком","notFoundMsg":"ИÑкомый текÑÑ‚ не найден.","replace":"Заменить","replaceAll":"Заменить вÑÑ‘","replaceSuccessMsg":"УÑпешно заменено %1 раз(а).","replaceWith":"Заменить на:","title":"ПоиÑк и замена"},"fakeobjects":{"anchor":"Якорь","flash":"Flash анимациÑ","hiddenfield":"Скрытое поле","iframe":"iFrame","unknown":"ÐеизвеÑтный объект"},"flash":{"access":"ДоÑтуп к Ñкриптам","accessAlways":"Ð’Ñегда","accessNever":"Ðикогда","accessSameDomain":"Ð’ том же домене","alignAbsBottom":"По низу текÑта","alignAbsMiddle":"По Ñередине текÑта","alignBaseline":"По базовой линии","alignTextTop":"По верху текÑта","bgcolor":"Цвет фона","chkFull":"Разрешить полноÑкранный режим","chkLoop":"ПовторÑÑ‚ÑŒ","chkMenu":"Включить меню Flash","chkPlay":"ÐвтоматичеÑкое воÑпроизведение","flashvars":"Переменные Ð´Ð»Ñ Flash","hSpace":"Гориз. отÑтуп","properties":"СвойÑтва Flash","propertiesTab":"СвойÑтва","quality":"КачеÑтво","qualityAutoHigh":"ЗапуÑк на выÑоком","qualityAutoLow":"ЗапуÑк на низком","qualityBest":"Лучшее","qualityHigh":"Ð’Ñ‹Ñокое","qualityLow":"Ðизкое","qualityMedium":"Среднее","scale":"МаÑштабировать","scaleAll":"Пропорционально","scaleFit":"ЗаполнÑÑ‚ÑŒ","scaleNoBorder":"Заходить за границы","title":"СвойÑтва Flash","vSpace":"Вертик. отÑтуп","validateHSpace":"Горизонтальный отÑтуп задаетÑÑ Ñ‡Ð¸Ñлом.","validateSrc":"Ð’Ñ‹ должны ввеÑти ÑÑылку","validateVSpace":"Вертикальный отÑтуп задаетÑÑ Ñ‡Ð¸Ñлом.","windowMode":"ВзаимодейÑтвие Ñ Ð¾ÐºÐ½Ð¾Ð¼","windowModeOpaque":"Ðепрозрачный","windowModeTransparent":"Прозрачный","windowModeWindow":"Обычный"},"font":{"fontSize":{"label":"Размер","voiceLabel":"Размер шрифта","panelTitle":"Размер шрифта"},"label":"Шрифт","panelTitle":"Шрифт","voiceLabel":"Шрифт"},"forms":{"button":{"title":"СвойÑтва кнопки","text":"ТекÑÑ‚ (Значение)","type":"Тип","typeBtn":"Кнопка","typeSbm":"Отправка","typeRst":"СброÑ"},"checkboxAndRadio":{"checkboxTitle":"СвойÑтва флаговой кнопки","radioTitle":"СвойÑтва кнопки выбора","value":"Значение","selected":"Выбрано"},"form":{"title":"СвойÑтва формы","menu":"СвойÑтва формы","action":"ДейÑтвие","method":"Метод","encoding":"Кодировка"},"hidden":{"title":"СвойÑтва Ñкрытого полÑ","name":"ИмÑ","value":"Значение"},"select":{"title":"СвойÑтва ÑпиÑка выбора","selectInfo":"Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ ÑпиÑке выбора","opAvail":"ДоÑтупные варианты","value":"Значение","size":"Размер","lines":"Ñтрок(и)","chkMulti":"Разрешить выбор неÑкольких вариантов","opText":"ТекÑÑ‚","opValue":"Значение","btnAdd":"Добавить","btnModify":"Изменить","btnUp":"ПоднÑÑ‚ÑŒ","btnDown":"ОпуÑтить","btnSetValue":"Пометить как выбранное","btnDelete":"Удалить"},"textarea":{"title":"СвойÑтва многоÑтрочного текÑтового полÑ","cols":"Колонок","rows":"Строк"},"textfield":{"title":"СвойÑтва текÑтового полÑ","name":"ИмÑ","value":"Значение","charWidth":"Ширина Ð¿Ð¾Ð»Ñ (в Ñимволах)","maxChars":"МакÑ. количеÑтво Ñимволов","type":"Тип Ñодержимого","typeText":"ТекÑÑ‚","typePass":"Пароль","typeEmail":"Email","typeSearch":"ПоиÑк","typeTel":"Ðомер телефона","typeUrl":"СÑылка"}},"format":{"label":"Форматирование","panelTitle":"Форматирование","tag_address":"ÐдреÑ","tag_div":"Обычное (div)","tag_h1":"Заголовок 1","tag_h2":"Заголовок 2","tag_h3":"Заголовок 3","tag_h4":"Заголовок 4","tag_h5":"Заголовок 5","tag_h6":"Заголовок 6","tag_p":"Обычное","tag_pre":"Моноширинное"},"horizontalrule":{"toolbar":"Ð’Ñтавить горизонтальную линию"},"iframe":{"border":"Показать границы фрейма","noUrl":"ПожалуйÑта, введите ÑÑылку фрейма","scrolling":"Отображать полоÑÑ‹ прокрутки","title":"СвойÑтва iFrame","toolbar":"iFrame"},"image":{"alertUrl":"ПожалуйÑта, введите ÑÑылку на изображение","alt":"Ðльтернативный текÑÑ‚","border":"Граница","btnUpload":"Загрузить на Ñервер","button2Img":"Ð’Ñ‹ желаете преобразовать Ñто изображение-кнопку в обычное изображение?","hSpace":"Гориз. отÑтуп","img2Button":"Ð’Ñ‹ желаете преобразовать Ñто обычное изображение в изображение-кнопку?","infoTab":"Данные об изображении","linkTab":"СÑылка","lockRatio":"СохранÑÑ‚ÑŒ пропорции","menu":"СвойÑтва изображениÑ","resetSize":"Вернуть обычные размеры","title":"СвойÑтва изображениÑ","titleButton":"СвойÑтва изображениÑ-кнопки","upload":"Загрузить","urlMissing":"Ðе указана ÑÑылка на изображение.","vSpace":"Вертик. отÑтуп","validateBorder":"Размер границ должен быть задан чиÑлом.","validateHSpace":"Горизонтальный отÑтуп должен быть задан чиÑлом.","validateVSpace":"Вертикальный отÑтуп должен быть задан чиÑлом."},"indent":{"indent":"Увеличить отÑтуп","outdent":"Уменьшить отÑтуп"},"smiley":{"options":"Выбор Ñмайла","title":"Ð’Ñтавить Ñмайл","toolbar":"Смайлы"},"justify":{"block":"По ширине","center":"По центру","left":"По левому краю","right":"По правому краю"},"language":{"button":"УÑтановка Ñзыка","remove":"Удалить Ñзык"},"link":{"acccessKey":"Клавиша доÑтупа","advanced":"Дополнительно","advisoryContentType":"Тип Ñодержимого","advisoryTitle":"Заголовок","anchor":{"toolbar":"Ð’Ñтавить / редактировать Ñкорь","menu":"Изменить Ñкорь","title":"СвойÑтва ÑкорÑ","name":"Ð˜Ð¼Ñ ÑкорÑ","errorName":"ПожалуйÑта, введите Ð¸Ð¼Ñ ÑкорÑ","remove":"Удалить Ñкорь"},"anchorId":"По идентификатору","anchorName":"По имени","charset":"Кодировка реÑурÑа","cssClasses":"КлаÑÑÑ‹ CSS","emailAddress":"Email адреÑ","emailBody":"ТекÑÑ‚ ÑообщениÑ","emailSubject":"Тема ÑообщениÑ","id":"Идентификатор","info":"Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ ÑÑылке","langCode":"Код Ñзыка","langDir":"Ðаправление текÑта","langDirLTR":"Слева направо (LTR)","langDirRTL":"Справа налево (RTL)","menu":"Редактировать ÑÑылку","name":"ИмÑ","noAnchors":"(Ð’ документе нет ни одного ÑкорÑ)","noEmail":"ПожалуйÑта, введите email адреÑ","noUrl":"ПожалуйÑта, введите ÑÑылку","other":"<другой>","popupDependent":"ЗавиÑимое (Netscape)","popupFeatures":"Параметры вÑплывающего окна","popupFullScreen":"ПолноÑкранное (IE)","popupLeft":"ОтÑтуп Ñлева","popupLocationBar":"Панель адреÑа","popupMenuBar":"Панель меню","popupResizable":"ИзменÑемый размер","popupScrollBars":"ПолоÑÑ‹ прокрутки","popupStatusBar":"Строка ÑоÑтоÑниÑ","popupToolbar":"Панель инÑтрументов","popupTop":"ОтÑтуп Ñверху","rel":"Отношение","selectAnchor":"Выберите Ñкорь","styles":"Стиль","tabIndex":"ПоÑледовательноÑÑ‚ÑŒ перехода","target":"Цель","targetFrame":"<фрейм>","targetFrameName":"Ð˜Ð¼Ñ Ñ†ÐµÐ»ÐµÐ²Ð¾Ð³Ð¾ фрейма","targetPopup":"<вÑплывающее окно>","targetPopupName":"Ð˜Ð¼Ñ Ð²Ñплывающего окна","title":"СÑылка","toAnchor":"СÑылка на Ñкорь в текÑте","toEmail":"Email","toUrl":"СÑылка","toolbar":"Ð’Ñтавить/Редактировать ÑÑылку","type":"Тип ÑÑылки","unlink":"Убрать ÑÑылку","upload":"Загрузка"},"list":{"bulletedlist":"Ð’Ñтавить / удалить маркированный ÑпиÑок","numberedlist":"Ð’Ñтавить / удалить нумерованный ÑпиÑок"},"liststyle":{"armenian":"ÐрмÑнÑÐºÐ°Ñ Ð½ÑƒÐ¼ÐµÑ€Ð°Ñ†Ð¸Ñ","bulletedTitle":"СвойÑтва маркированного ÑпиÑка","circle":"Круг","decimal":"ДеÑÑтичные (1, 2, 3, и Ñ‚.д.)","decimalLeadingZero":"ДеÑÑтичные Ñ Ð²ÐµÐ´ÑƒÑ‰Ð¸Ð¼ нулём (01, 02, 03, и Ñ‚.д.)","disc":"ОкружноÑÑ‚ÑŒ","georgian":"ГрузинÑÐºÐ°Ñ Ð½ÑƒÐ¼ÐµÑ€Ð°Ñ†Ð¸Ñ (ани, бани, гани, и Ñ‚.д.)","lowerAlpha":"Строчные латинÑкие (a, b, c, d, e, и Ñ‚.д.)","lowerGreek":"Строчные гречеÑкие (альфа, бета, гамма, и Ñ‚.д.)","lowerRoman":"Строчные римÑкие (i, ii, iii, iv, v, и Ñ‚.д.)","none":"Ðет","notset":"<не указано>","numberedTitle":"СвойÑтва нумерованного ÑпиÑка","square":"Квадрат","start":"ÐÐ°Ñ‡Ð¸Ð½Ð°Ñ Ñ","type":"Тип","upperAlpha":"Заглавные латинÑкие (A, B, C, D, E, и Ñ‚.д.)","upperRoman":"Заглавные римÑкие (I, II, III, IV, V, и Ñ‚.д.)","validateStartNumber":"Первый номер ÑпиÑка должен быть задан обычным целым чиÑлом."},"magicline":{"title":"Ð’Ñтавить здеÑÑŒ параграф"},"maximize":{"maximize":"Развернуть","minimize":"Свернуть"},"newpage":{"toolbar":"ÐÐ¾Ð²Ð°Ñ Ñтраница"},"pagebreak":{"alt":"Разрыв Ñтраницы","toolbar":"Ð’Ñтавить разрыв Ñтраницы Ð´Ð»Ñ Ð¿ÐµÑ‡Ð°Ñ‚Ð¸"},"pastetext":{"button":"Ð’Ñтавить только текÑÑ‚","title":"Ð’Ñтавить только текÑÑ‚"},"pastefromword":{"confirmCleanup":"ТекÑÑ‚, который вы желаете вÑтавить, по вÑей видимоÑти, был Ñкопирован из Word. Следует ли очиÑтить его перед вÑтавкой?","error":"Ðевозможно очиÑтить вÑтавленные данные из-за внутренней ошибки","title":"Ð’Ñтавить из Word","toolbar":"Ð’Ñтавить из Word"},"preview":{"preview":"Предварительный проÑмотр"},"print":{"toolbar":"Печать"},"removeformat":{"toolbar":"Убрать форматирование"},"save":{"toolbar":"Сохранить"},"selectall":{"toolbar":"Выделить вÑе"},"showblocks":{"toolbar":"Отображать блоки"},"sourcearea":{"toolbar":"ИÑточник"},"specialchar":{"options":"Выбор Ñпециального Ñимвола","title":"Выберите Ñпециальный Ñимвол","toolbar":"Ð’Ñтавить Ñпециальный Ñимвол"},"scayt":{"btn_about":"О SCAYT","btn_dictionaries":"Словари","btn_disable":"Отключить SCAYT","btn_enable":"Включить SCAYT","btn_langs":"Языки","btn_options":"ÐаÑтройки","text_title":"Проверка орфографии по мере ввода (SCAYT)"},"stylescombo":{"label":"Стили","panelTitle":"Стили форматированиÑ","panelTitle1":"Стили блока","panelTitle2":"Стили Ñлемента","panelTitle3":"Стили объекта"},"table":{"border":"Размер границ","caption":"Заголовок","cell":{"menu":"Ячейка","insertBefore":"Ð’Ñтавить Ñчейку Ñлева","insertAfter":"Ð’Ñтавить Ñчейку Ñправа","deleteCell":"Удалить Ñчейки","merge":"Объединить Ñчейки","mergeRight":"Объединить Ñ Ð¿Ñ€Ð°Ð²Ð¾Ð¹","mergeDown":"Объединить Ñ Ð½Ð¸Ð¶Ð½ÐµÐ¹","splitHorizontal":"Разделить Ñчейку по горизонтали","splitVertical":"Разделить Ñчейку по вертикали","title":"СвойÑтва Ñчейки","cellType":"Тип Ñчейки","rowSpan":"ОбъединÑет Ñтрок","colSpan":"ОбъединÑет колонок","wordWrap":"ÐŸÐµÑ€ÐµÐ½Ð¾Ñ Ð¿Ð¾ Ñловам","hAlign":"Горизонтальное выравнивание","vAlign":"Вертикальное выравнивание","alignBaseline":"По базовой линии","bgColor":"Цвет фона","borderColor":"Цвет границ","data":"Данные","header":"Заголовок","yes":"Да","no":"Ðет","invalidWidth":"Ширина Ñчейки должна быть чиÑлом.","invalidHeight":"Ð’Ñ‹Ñота Ñчейки должна быть чиÑлом.","invalidRowSpan":"КоличеÑтво объединÑемых Ñтрок должно быть задано чиÑлом.","invalidColSpan":"КоличеÑтво объединÑемых колонок должно быть задано чиÑлом.","chooseColor":"Выберите"},"cellPad":"Внутренний отÑтуп Ñчеек","cellSpace":"Внешний отÑтуп Ñчеек","column":{"menu":"Колонка","insertBefore":"Ð’Ñтавить колонку Ñлева","insertAfter":"Ð’Ñтавить колонку Ñправа","deleteColumn":"Удалить колонки"},"columns":"Колонки","deleteTable":"Удалить таблицу","headers":"Заголовки","headersBoth":"Сверху и Ñлева","headersColumn":"Ð›ÐµÐ²Ð°Ñ ÐºÐ¾Ð»Ð¾Ð½ÐºÐ°","headersNone":"Без заголовков","headersRow":"ВерхнÑÑ Ñтрока","invalidBorder":"Размер границ должен быть чиÑлом.","invalidCellPadding":"Внутренний отÑтуп Ñчеек (cellpadding) должен быть чиÑлом.","invalidCellSpacing":"Внешний отÑтуп Ñчеек (cellspacing) должен быть чиÑлом.","invalidCols":"КоличеÑтво Ñтолбцов должно быть больше 0.","invalidHeight":"Ð’Ñ‹Ñота таблицы должна быть чиÑлом.","invalidRows":"КоличеÑтво Ñтрок должно быть больше 0.","invalidWidth":"Ширина таблицы должна быть чиÑлом.","menu":"СвойÑтва таблицы","row":{"menu":"Строка","insertBefore":"Ð’Ñтавить Ñтроку Ñверху","insertAfter":"Ð’Ñтавить Ñтроку Ñнизу","deleteRow":"Удалить Ñтроки"},"rows":"Строки","summary":"Итоги","title":"СвойÑтва таблицы","toolbar":"Таблица","widthPc":"процентов","widthPx":"пикÑелей","widthUnit":"единица измерениÑ"},"undo":{"redo":"Повторить","undo":"Отменить"},"wsc":{"btnIgnore":"ПропуÑтить","btnIgnoreAll":"ПропуÑтить вÑÑ‘","btnReplace":"Заменить","btnReplaceAll":"Заменить вÑÑ‘","btnUndo":"Отменить","changeTo":"Изменить на","errorLoading":"Произошла ошибка при подключении к Ñерверу проверки орфографии: %s.","ieSpellDownload":"Модуль проверки орфографии не уÑтановлен. Хотите Ñкачать его?","manyChanges":"Проверка орфографии завершена. Изменено Ñлов: %1","noChanges":"Проверка орфографии завершена. Ðе изменено ни одного Ñлова","noMispell":"Проверка орфографии завершена. Ошибок не найдено","noSuggestions":"- Варианты отÑутÑтвуют -","notAvailable":"Извините, но в данный момент ÑÐµÑ€Ð²Ð¸Ñ Ð½ÐµÐ´Ð¾Ñтупен.","notInDic":"ОтÑутÑтвует в Ñловаре","oneChange":"Проверка орфографии завершена. Изменено одно Ñлово","progress":"ÐžÑ€Ñ„Ð¾Ð³Ñ€Ð°Ñ„Ð¸Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÑетÑÑ...","title":"Проверка орфографии","toolbar":"Проверить орфографию"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/si.js b/wqflask/wqflask/static/packages/ckeditor/lang/si.js
deleted file mode 100644
index 32734885..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/si.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['si']={"editor":"පොහොසත් වචන සංස්කරණ","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"උදව් ලබ෠ගà·à¶±à·“මට ALT බොත්තම ඔබන්න","browseServer":"සෙවුම් සේවà·à¶¯à·à¶ºà¶šà¶º","url":"URL","protocol":"මුලà·à¶´à¶­à·Šâ€à¶»à¶º","upload":"උඩුගතකිරීම","uploadSubmit":"සේවà·à¶¯à·à¶ºà¶šà¶º වෙත යොමුකිරිම","image":"රුපය","flash":"දීප්තිය","form":"පà·à¶»à¶¸à¶º","checkbox":"ලකුණුකිරීමේ කොටුව","radio":"තේරීම් ","textField":"ලියන ප්â€à¶»à¶¯à·šà·à¶º","textarea":"අකුරු ","hiddenField":"à·ƒà·à¶Ÿà·€à·”ණු ප්â€à¶»à¶¯à·šà·à¶º","button":"බොත්තම","select":"තà·à¶»à¶±à·Šà¶± ","imageButton":"රුප ","notSet":"<යොද෠>","id":"අංකය","name":"නම","langDir":"භà·à·‚෠දිà·à·à·€","langDirLtr":"වමේසිට දකුණුට","langDirRtl":"දකුණේ සිට වමට","langCode":"භà·à·‚෠කේතය","longDescr":"සම්පුර්න පà·à·„à·à¶¯à·’ලි කිරීම","cssClass":"විලà·à· පත්â€à¶» පන්තිය","advisoryTitle":"උපදෙස් ","cssStyle":"විලà·à·ƒà¶º","ok":"නිරදි","cancel":"අවලංගු කිරීම","close":"à·€à·à·ƒà·“ම","preview":"නà·à·€à¶­ ","resize":"විà·à·à¶½à¶­à·Šà·€à¶º නà·à·€à¶­ වෙනස් කිරීම","generalTab":"පොදු කරුණු.","advancedTab":"දීය","validateNumberFailed":"මෙම වටිනà·à¶šà¶¸ අංකයක් නොවේ","confirmNewPage":"ආරක්ෂ෠නොකළ සියලුම දත්තයන් මà·à¶šà·’යනුලà·à¶¶à·š. ඔබට නව පිටුවක් ලබ෠ගà·à¶±à·“මට අවà·à·Šâ€à¶ºà¶¯?","confirmCancel":"ඇතම් විකල්පයන් වෙනස් කර ඇත. ඔබට මින් නික්මීමට අවà·à·Šâ€à¶ºà¶¯?","options":" විකල්ප","target":"අරමුණ","targetNew":"නව කව්ළුව","targetTop":"à·€à·à¶¯à¶œà¶­à·Š කව්ළුව","targetSelf":"එම කව්ළුව(_තම\\\\)","targetParent":"මව් කව්ළුව(_)","langDirLTR":"වමේසිට දකුණුට","langDirRTL":"දකුණේ සිට වමට","styles":"විලà·à·ƒà¶º","cssClasses":"විලà·à·ƒà¶´à¶­à·Šâ€à¶» පන්තිය","width":"පළල","height":"උස","align":"ගà·à¶½à¶´à·”ම","alignLeft":"වම","alignRight":"දකුණ","alignCenter":"මධ්â€à¶º","alignJustify":"Justify","alignTop":"ඉ","alignMiddle":"මà·à¶¯","alignBottom":"පහල","alignNone":"None","invalidValue":"à·€à·à¶»à¶¯à·“ වටිනà·à¶šà¶¸à¶šà·’","invalidHeight":"උස අංකයක් විය යුතුය","invalidWidth":"පළල අංකයක් විය යුතුය","invalidCssLength":"වටිනà·à¶šà¶¸à¶šà·Š නිරූපණය කිරීම \"%1\" ප්â€à¶»à¶¯à·šà·à¶º ධන සංක්â€à¶ºà·à¶­à·Šà¶¸à¶š වටිනà·à¶šà¶¸à¶šà·Š හ෠නිවරදි නොවන CSS මිනුම් එකක(px, %, in, cm, mm, em, ex, pt, pc)","invalidHtmlLength":"වටිනà·à¶šà¶¸à¶šà·Š නිරූපණය කිරීම \"%1\" ප්â€à¶»à¶¯à·šà·à¶º ධන සංක්â€à¶ºà·à¶­à·Šà¶¸à¶š වටිනà·à¶šà¶¸à¶šà·Š හ෠නිවරදි නොවන HTML මිනුම් එකක (px à·„à· %).","invalidInlineStyle":"වටිනà·à¶šà¶¸à¶šà·Š නිරූපණය කිරීම පේළි විලà·à·ƒà¶ºà¶ºà¶§ ආකෘතිය අනතර්ග විය යුතය \"නම : වටිනà·à¶šà¶¸\", තිත් කොමà·à·€à¶šà·’න් වෙන් වෙන ලද.","cssLengthTooltip":"සංක්â€à¶ºà· ඇතුලත් කිරීමේදී වටිනà·à¶šà¶¸ තිත් ප්â€à¶»à¶¸à·à¶«à¶º නිවරදි CSS ඒකක(තිත්, %, අඟල්,සෙමි, mm, em, ex, pt, pc)","unavailable":"%1<span පන්තිය=\"ළඟ෠වියහà·à¶šà·’ ද බලන්න\">, නොමà·à¶­à·’නම්</span>"},"about":{"copy":"පිටපත් අයිතිය සහ පිටපත් කිරීම;$1 .සියලුම හිමිකම් ඇවිරිණි.","dlgTitle":"CKEditor ගà·à¶± විස්තර","help":"උදව් සඳහ෠$1 ","moreInfo":"බලපත්â€à¶» තොරතුරු සදහ෠කරුණà·à¶šà¶» අපගේ විද්â€à¶ºà·”ත් ලිපිනයට පිවිසෙන්න:","title":"CKEditor ගà·à¶± විස්තර","userGuide":"CKEditor භà·à·€à·’ත෠කිරීම පිළිබඳ "},"basicstyles":{"bold":"තද අකුරින් ලියනලද","italic":"බà·à¶°à·“අකුරින් ලියන ලද","strike":"Strike Through","subscript":"Subscript","superscript":"Superscript","underline":"යටින් ඉරි අදින ලද"},"bidi":{"ltr":"වගන්ති දිà·à·à·€ වමේ සිට දකුණට","rtl":"වගන්ති දිà·à·à·€ දකුණේ සිට වමට"},"blockquote":{"toolbar":"උද්ධෘත කොටස"},"clipboard":{"copy":"පිටපත් කරන්න","copyError":"Your browser security settings don't permit the editor to automatically execute copying operations. Please use the keyboard for that (Ctrl/Cmd+C).","cut":"කපà·à¶œà¶±à·Šà¶±","cutError":"Your browser security settings don't permit the editor to automatically execute cutting operations. Please use the keyboard for that (Ctrl/Cmd+X).","paste":"අලවන්න","pasteArea":"අලවන ප්â€à¶»à¶¯à·šà·","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"අලවන්න"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatic","bgColorTitle":"පසුබිම් වර්ණය","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"More Colors...","panelTitle":"වර්ණය","textColorTitle":"අක්ෂර වර්ණ"},"colordialog":{"clear":"පà·à·„à·à¶¯à·’ලි","highlight":"මතුකර පෙන්වන්න","options":"වර්ණ විකල්ප","selected":"තෙරු වර්ණ","title":"වර්ණ තà·à¶»à¶±à·Šà¶±"},"templates":{"button":"අච්චුව","emptyListMsg":"කිසිම අච්චුවක් කලින් තීරණය කර ","insertOption":"සත්â€à¶º අන්තර්ගතයන් ප්â€à¶»à¶­à·’ස්ථà·à¶´à¶±à¶º කරන්න","options":"අච්චු ","selectPromptMsg":"කරුණà·à¶šà¶» සංස්කරණය සදහ෠අච්චුවක් ","title":"අන්තර්ගත් අච්චුන්"},"contextmenu":{"options":"අනතර්ග ලේඛණ විකල්ප"},"div":{"IdInputLabel":"අංකය","advisoryTitleInputLabel":"උපදේà·à·à¶­à·Šà¶¸à¶š නà·à¶¸à¶º","cssClassInputLabel":"විලà·à·ƒà¶´à¶­à·Šâ€à¶» පන්තිය","edit":"වෙනස්කිරීම","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"වමේසිට දකුණුට","langDirLabel":"භà·à·‚෠දිà·à·à·€","langDirRTLLabel":"දකුණේ සිට වමට","languageCodeInputLabel":"භà·à·‚à· ","remove":"ඉවත් කිරීම","styleSelectLabel":"විලà·à·ƒà¶º","title":"නිර්මà·à¶«à¶º ","toolbar":"නිර්මà·à¶«à¶º "},"toolbar":{"toolbarCollapse":"මෙවලම් තීරුව à·„à·à¶šà·”ලුම.","toolbarExpand":"මෙවලම් තීරුව දීගහà·à¶»à·”ම","toolbarGroups":{"document":"ලිපිය","clipboard":"ඇමිණුම වෙනස් කිරීම","editing":"සංස්කරණය","forms":"පà·à¶»à¶¸à¶º","basicstyles":"මුලික විලà·à·ƒà¶º","paragraph":"චේදය","links":"සබà·à¶³à·’ය","insert":"ඇතුලත් කිරීම","styles":"විලà·à·ƒà¶º","colors":"වර්ණය","tools":"මෙවලම්"},"toolbars":"සංස්කරණ මෙවලම් තීරුව"},"elementspath":{"eleLabel":"මුලද්â€à¶»à·€à·Šâ€à¶º මà·à¶»à·Šà¶œà¶º","eleTitle":"%1 මුල"},"find":{"find":"Find","findOptions":"Find Options","findWhat":"Find what:","matchCase":"Match case","matchCyclic":"Match cyclic","matchWord":"Match whole word","notFoundMsg":"The specified text was not found.","replace":"හිලව් කිරීම","replaceAll":"සියල්ලම හිලව් කරන්න","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Replace with:","title":"Find and Replace"},"fakeobjects":{"anchor":"ආධà·à¶»à¶º","flash":"Flash Animation","hiddenfield":"à·ƒà·à¶Ÿà·€à·”ණු ප්â€à¶»à¶¯à·šà·à¶º","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"පිටපත් ප්â€à¶»à·€à·šà·à¶º","accessAlways":"à·„à·à¶¸à·€à·’ටම","accessNever":"කිසිද෠නොවේ","accessSameDomain":"එකම වසමේ","alignAbsBottom":"පතුල","alignAbsMiddle":"Abs ","alignBaseline":"පà·à¶¯ රේඛà·à·€","alignTextTop":"වගන්තිය ඉහල","bgcolor":"පසුබිම් වර්ණය","chkFull":"පුර්ණ තිරය සදහ෠අවසර","chkLoop":"පුඩුව","chkMenu":"සක්â€à¶»à·’ය බබලන මෙනුව","chkPlay":"ස්‌වයංක්â€à¶»à·’ය ක්â€à¶»à·’යà·à¶­à·Šà¶¸à¶š වීම","flashvars":"වෙනස්වන දත්ත","hSpace":"HSpace","properties":"බබලන ගුණ","propertiesTab":"ගුණ","quality":"තත්වය","qualityAutoHigh":"ස්‌වයංක්â€à¶»à·’ය ","qualityAutoLow":" ස්‌වයංක්â€à¶»à·’ය ","qualityBest":"වඩà·à¶­à·Š ගà·à¶½à¶´à·™à¶±","qualityHigh":"ඉහළ","qualityLow":"පහළ","qualityMedium":"මධ්â€à¶º","scale":"පරිමà·à¶«","scaleAll":"සියල්ල ","scaleFit":"හරියටම ගà·à¶½à¶´à·™à¶±","scaleNoBorder":"මà·à¶‰à¶¸à·Š නොමà·à¶­à·’","title":"බබලන ","vSpace":"VSpace","validateHSpace":"HSpace සංක්â€à¶ºà·à·€à¶šà·Š විය යුතුය.","validateSrc":"URL හිස් නොවිය ","validateVSpace":"VSpace සංක්â€à¶ºà·à·€à¶šà·Š විය යුතුය","windowMode":"ජනෙල ක්â€à¶»à¶¸à¶º","windowModeOpaque":"විනිවිද පෙනෙන","windowModeTransparent":"විනිවිද පෙනෙන","windowModeWindow":"ජනෙල"},"font":{"fontSize":{"label":"විà·à·à¶½à¶­à·Šà·€à¶º","voiceLabel":"අක්ෂර විà·à·à¶½à¶­à·Šà·€à¶º","panelTitle":"අක්ෂර විà·à·à¶½à¶­à·Šà·€à¶º"},"label":"අක්ෂරය","panelTitle":"අක්ෂර නà·à¶¸à¶º","voiceLabel":"අක්ෂර"},"forms":{"button":{"title":"බොත්තම් ගුණ","text":"වගන්තිය(වටිනà·à¶šà¶¸)","type":"වර්ගය","typeBtn":"බොත්තම","typeSbm":"යොමුකරනවà·","typeRst":"නà·à·€à¶­ ආරම්භකතත්වයට පත් කරනවà·"},"checkboxAndRadio":{"checkboxTitle":"ලකුණු කිරීමේ කොටුවේ ලක්ෂණ","radioTitle":"Radio Button Properties","value":"Value","selected":"Selected"},"form":{"title":"පà·à¶»à¶¸à¶ºà·š ","menu":"පà·à¶»à¶¸à¶ºà·š ගුණ/","action":"ගන්න෠පියවර","method":"ක්â€à¶»à¶¸à¶º","encoding":"කේතීකරණය"},"hidden":{"title":"à·ƒà·à¶Ÿà·€à·”ණු ප්â€à¶»à¶¯à·šà·à¶ºà·š ","name":"නම","value":"Value"},"select":{"title":"තේරීම් ප්â€à¶»à¶¯à·šà·à¶ºà·š ","selectInfo":"විස්තර තà·à¶»à¶±à·Šà¶±","opAvail":"ඉතුරුවී ඇති වීකල්ප","value":"Value","size":"විà·à·à¶½à¶­à·Šà·€à¶º","lines":"lines","chkMulti":"Allow multiple selections","opText":"Text","opValue":"Value","btnAdd":"Add","btnModify":"Modify","btnUp":"Up","btnDown":"Down","btnSetValue":"Set as selected value","btnDelete":"මක෠දà·à¶¸à·Šà¶¸"},"textarea":{"title":"Textarea Properties","cols":"සිරස් ","rows":"Rows"},"textfield":{"title":"Text Field Properties","name":"නම","value":"Value","charWidth":"Character Width","maxChars":"Maximum Characters","type":"වර්ගය","typeText":"Text","typePass":"Password","typeEmail":"Email","typeSearch":"Search","typeTel":"Telephone Number","typeUrl":"URL"}},"format":{"label":"ආකෘතිය","panelTitle":"චේදයේ ","tag_address":"ලිපිනය","tag_div":"à·ƒà·à¶¸à·à¶±à·Šâ€à¶º(DIV)","tag_h1":"à·à·“ර්ෂය 1","tag_h2":"à·à·“ර්ෂය 2","tag_h3":"à·à·“ර්ෂය 3","tag_h4":"à·à·“ර්ෂය 4","tag_h5":"à·à·“ර්ෂය 5","tag_h6":"à·à·“ර්ෂය 6","tag_p":"à·ƒà·à¶¸à·à¶±à·Šâ€à¶º","tag_pre":"ආකෘතියන්"},"horizontalrule":{"toolbar":"තිරස් රේඛà·à·€à¶šà·Š ඇතුලත් කරන්න"},"iframe":{"border":"à·ƒà·à¶šà·’ල්ලේ කඩයිම් ","noUrl":"කරුණà·à¶šà¶» රුපයේ URL ලියන්න","scrolling":"සක්ක්â€à¶»à·’ය කරන්න","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"කරුණà·à¶šà¶» රුපයේ URL ලියන්න","alt":"විකල්ප ","border":"සීමà·à·€à·€à¶½ ","btnUpload":"සේවà·à¶¯à·à¶ºà¶šà¶º වෙත යොමුකිරිම","button2Img":"ඔබට තà·à¶»à¶± ලද රුපය පරිවර්තනය කිරීමට අවà·à·Šâ€à¶ºà¶¯?","hSpace":"HSpace","img2Button":"ඔබට තà·à¶»à¶± ලද රුපය පරිවර්තනය කිරීමට අවà·à·Šâ€à¶ºà¶¯?","infoTab":"රුපයේ තොරතුරු","linkTab":"සබà·à¶³à·’ය","lockRatio":"නවතන අනුපà·à¶­à¶º ","menu":"රුපයේ ගුණ","resetSize":"නà·à·€à¶­à¶­à·Š විà·à·à¶½à¶­à·Šà·€à¶º වෙනස් කිරීම","title":"රුපයේ ","titleButton":"රුප බොත්තමේ ගුණ","upload":"උඩුගතකිරීම","urlMissing":"රුප මුලà·à·à·Šâ€à¶» URL නà·à¶­.","vSpace":"VSpace","validateBorder":"මà·à¶‰à¶¸à·Š සම්පුර්ණ සංක්â€à¶ºà·à·€à¶šà·Š විය යුතුය.","validateHSpace":"HSpace සම්පුර්ණ සංක්â€à¶ºà·à·€à¶šà·Š විය යුතුය","validateVSpace":"VSpace සම්පුර්ණ සංක්â€à¶ºà·à·€à¶šà·Š විය යුතුය."},"indent":{"indent":"අතර පරතරය à·€à·à¶©à·’කරන්න","outdent":"අතර පරතරය අඩුකරන්න"},"smiley":{"options":"à·„à·à·ƒà·Šâ€à¶º විකල්ප","title":"à·„à·à·ƒà·Šâ€à¶ºà¶±à·Š ඇතුලත් කිරීම","toolbar":"à·„à·à·ƒà·Šâ€à¶ºà¶±à·Š"},"justify":{"block":"Justify","center":"මධ්â€à¶º","left":"Align Left","right":"Align Right"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"ප්â€à¶»à·€à·šà· යතුර","advanced":"දීය","advisoryContentType":"උපදේà·à·à¶­à·Šà¶¸à¶š අන්තර්ගත ආකà·à¶»à¶º","advisoryTitle":"උපදේà·à·à¶­à·Šà¶¸à¶š නà·à¶¸à¶º","anchor":{"toolbar":"ආධà·à¶»à¶º","menu":"ආධà·à¶»à¶º වෙනස් කිරීම","title":"ආධà·à¶»à¶š ","name":"ආධà·à¶»à¶šà¶ºà·š නà·à¶¸à¶º","errorName":"කරුණà·à¶šà¶» ආධà·à¶»à¶šà¶ºà·š නà·à¶¸à¶º ඇතුල් කරන්න","remove":"ආධà·à¶»à¶šà¶º ඉවත් කිරීම"},"anchorId":"By Element Id","anchorName":"By Anchor Name","charset":"Linked Resource Charset","cssClasses":"විලà·à·ƒà¶´à¶­à·Šâ€à¶» පන්තිය","emailAddress":"E-Mail Address","emailBody":"Message Body","emailSubject":"Message Subject","id":"අංකය","info":"Link Info","langCode":"භà·à·‚෠කේතය","langDir":"භà·à·‚෠දිà·à·à·€","langDirLTR":"වමේසිට දකුණුට","langDirRTL":"දකුණේ සිට වමට","menu":"Edit Link","name":"නම","noAnchors":"(No anchors available in the document)","noEmail":"Please type the e-mail address","noUrl":"Please type the link URL","other":"<other>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Relationship","selectAnchor":"Select an Anchor","styles":"විලà·à·ƒà¶º","tabIndex":"Tab Index","target":"අරමුණ","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"සබà·à¶³à·’ය","toAnchor":"Link to anchor in the text","toEmail":"E-mail","toUrl":"URL","toolbar":"සබà·à¶³à·’ය","type":"Link Type","unlink":"Unlink","upload":"උඩුගතකිරීම"},"list":{"bulletedlist":"ඇතුලත් / ඉවත් කිරීම ලඉස්තුව","numberedlist":"ඇතුලත් / ඉවත් කිරීම අන්න්කිත ලඉස්තුව"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"කිසිවක්ම නොවේ","notset":"<යොද෠>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"වර්ගය","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"චේදය ඇතුලත් කරන්න"},"maximize":{"maximize":"විà·à·à¶½ කිරීම","minimize":"කුඩ෠කිරීම"},"newpage":{"toolbar":"නව පිටුවක්"},"pagebreak":{"alt":"පිටු බිදුම","toolbar":"මුද්â€à¶»à¶«à¶º සඳහ෠පිටු බිදුමක් ඇතුලත් කරන්න"},"pastetext":{"button":"à·ƒà·à¶¸à·à¶±à·Šâ€à¶º අක්ෂර ලෙස අලවන්න","title":"à·ƒà·à¶¸à·à¶±à·Šâ€à¶º අක්ෂර ලෙස අලවන්න"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"වචන වලින් අලවන්න","toolbar":"වචන වලින් අලවන්න"},"preview":{"preview":"නà·à·€à¶­ "},"print":{"toolbar":"මුද්â€à¶»à¶«à¶º කරන්න"},"removeformat":{"toolbar":"à·ƒà·à¶šà·ƒà·“ම වෙනස් කරන්න"},"save":{"toolbar":"ආරක්ෂ෠කරන්න"},"selectall":{"toolbar":"සියල්ලම "},"showblocks":{"toolbar":"කොටස පෙන්නන්න"},"sourcearea":{"toolbar":"මුලà·à·à·Šâ€à¶»à¶º"},"specialchar":{"options":"විà·à·šà·‚ ගුණà·à¶‚ග වීකල්ප","title":"විà·à·šà·‚ ගුණà·à¶‚ග ","toolbar":"විà·à·šà·‚ ගුණà·à¶‚ග ඇතුලත් "},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"විලà·à·ƒà¶º","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"සීමà·à·€à·€à¶½ විà·à·à¶½à¶­à·Šà·€à¶º","caption":"Caption","cell":{"menu":"කොටුව","insertBefore":"පෙර කොටුවක් ඇතුල්කිරිම","insertAfter":"පසුව කොටුවක් ඇතුලත් ","deleteCell":"කොටුව මà·à¶šà·“ම","merge":"කොටු එකට යà·à¶šà·’රිම","mergeRight":"දකුණට ","mergeDown":"පහලට ","splitHorizontal":"තිරස්ව කොටු පà·à¶­à·’රීම","splitVertical":"සිරස්ව කොටු පà·à¶­à·’රීම","title":"කොටු ","cellType":"කොටු වර්ගය","rowSpan":"පේළි පළල","colSpan":"සිරස් පළල","wordWrap":"වචන ගà·à¶½à¶´à·”ම","hAlign":"තිරස්ව ","vAlign":"සිරස්ව ","alignBaseline":"පà·à¶¯ රේඛà·à·€","bgColor":"පසුබිම් වර්ණය","borderColor":"මà·à¶ºà·’ම් ","data":"Data","header":"à·à·“ර්ෂක","yes":"ඔව්","no":"නà·à¶­","invalidWidth":"කොටු පළල සංඛ්â€à¶ºà·Šà¶­à·Šà¶¸à¶š වටිනà·à¶šà¶¸à¶šà·Š විය යුතුය","invalidHeight":"කොටු උස සංඛ්â€à¶ºà·Šà¶­à·Šà¶¸à¶š වටිනà·à¶šà¶¸à¶šà·Š විය යුතුය","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"තà·à¶»à¶±à·Šà¶±"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"සිරස් ","deleteTable":"වගුව මකන්න","headers":"à·à·“ර්ෂක","headersBoth":"දෙකම","headersColumn":"පළමූ සිරස් තීරුව","headersNone":"කිසිවක්ම නොවේ","headersRow":"පළමූ පේළිය","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Table Properties","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"Rows","summary":"Summary","title":"Table Properties","toolbar":"Table","widthPc":"percent","widthPx":"pixels","widthUnit":"width unit"},"undo":{"redo":"නà·à·€à¶­ කිරීම","undo":"වෙනස් කිරීම"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/sk.js b/wqflask/wqflask/static/packages/ckeditor/lang/sk.js
deleted file mode 100644
index 93dc9fd2..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/sk.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['sk']={"editor":"Editor formátovaného textu","editorPanel":"Panel editora formátovaného textu","common":{"editorHelp":"StlaÄte ALT 0 pre nápovedu","browseServer":"PrechádzaÅ¥ server","url":"URL","protocol":"Protokol","upload":"OdoslaÅ¥","uploadSubmit":"OdoslaÅ¥ na server","image":"Obrázok","flash":"Flash","form":"Formulár","checkbox":"ZaÅ¡krtávacie políÄko","radio":"PrepínaÄ","textField":"Textové pole","textarea":"Textová oblasÅ¥","hiddenField":"Skryté pole","button":"TlaÄidlo","select":"Rozbaľovací zoznam","imageButton":"Obrázkové tlaÄidlo","notSet":"<nenastavené>","id":"Id","name":"Meno","langDir":"Orientácia jazyka","langDirLtr":"Zľava doprava (LTR)","langDirRtl":"Sprava doľava (RTL)","langCode":"Kód jazyka","longDescr":"Dlhý popis URL","cssClass":"Trieda Å¡týlu","advisoryTitle":"Pomocný titulok","cssStyle":"Å týl","ok":"OK","cancel":"ZruÅ¡iÅ¥","close":"Zatvorit","preview":"Náhľad","resize":"ZmeniÅ¥ veľkosÅ¥","generalTab":"Hlavné","advancedTab":"Rozšírené","validateNumberFailed":"Hodnota nieje Äíslo.","confirmNewPage":"Prajete si naÄítat novú stránku? VÅ¡etky neuložené zmeny budú stratené. ","confirmCancel":"Niektore možnosti boli zmenené. Naozaj chcete zavrieÅ¥ okno?","options":"Možnosti","target":"Cieľ","targetNew":"Nové okno (_blank)","targetTop":"NajvrchnejÅ¡ie okno (_top)","targetSelf":"To isté okno (_self)","targetParent":"RodiÄovské okno (_parent)","langDirLTR":"Zľava doprava (LTR)","langDirRTL":"Sprava doľava (RTL)","styles":"Å týl","cssClasses":"Triedy Å¡týlu","width":"Šírka","height":"Výška","align":"Zarovnanie","alignLeft":"Vľavo","alignRight":"Vpravo","alignCenter":"Na stred","alignJustify":"ZarovnaÅ¥ do bloku","alignTop":"Nahor","alignMiddle":"Na stred","alignBottom":"Dole","alignNone":"Žiadne","invalidValue":"Neplatná hodnota.","invalidHeight":"Výška musí byÅ¥ Äíslo.","invalidWidth":"Šírka musí byÅ¥ Äíslo.","invalidCssLength":"Å pecifikovaná hodnota pre pole \"%1\" musí byÅ¥ kladné Äíslo s alebo bez platnej CSS mernej jednotky (px, %, in, cm, mm, em, ex, pt alebo pc).","invalidHtmlLength":"Å pecifikovaná hodnota pre pole \"%1\" musí byÅ¥ kladné Äíslo s alebo bez platnej HTML mernej jednotky (px alebo %).","invalidInlineStyle":"Zadaná hodnota pre inline Å¡týl musí pozostávaÅ¥ s jedného, alebo viac dvojíc formátu \"názov: hodnota\", oddelených bodkoÄiarkou.","cssLengthTooltip":"Vložte Äíslo pre hodnotu v pixeloch alebo Äíslo so správnou CSS jednotou (px, %, in, cm, mm, em, ex, pt alebo pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedostupný</span>"},"about":{"copy":"Copyright &copy; $1. VÅ¡etky práva vyhradené.","dlgTitle":"O CKEditor-e","help":"ZaÅ¡krtnite $1 pre pomoc.","moreInfo":"Pre informácie o licenciách, prosíme, navÅ¡tívte naÅ¡u web stránku:","title":"O CKEditor-e","userGuide":"Používateľská príruÄka KCEditor-a"},"basicstyles":{"bold":"TuÄné","italic":"Kurzíva","strike":"PreÄiarknuté","subscript":"Dolný index","superscript":"Horný index","underline":"PodÄiarknuté"},"bidi":{"ltr":"Smer textu zľava doprava","rtl":"Smer textu sprava doľava"},"blockquote":{"toolbar":"Citácia"},"clipboard":{"copy":"KopírovaÅ¥","copyError":"BezpeÄnostné nastavenia Vášho prehliadaÄa nedovoľujú editoru automaticky spustiÅ¥ operáciu kopírovania. Prosím, použite na to klávesnicu (Ctrl/Cmd+C).","cut":"Vystrihnúť","cutError":"BezpeÄnostné nastavenia Vášho prehliadaÄa nedovoľujú editoru automaticky spustiÅ¥ operáciu vystrihnutia. Prosím, použite na to klávesnicu (Ctrl/Cmd+X).","paste":"VložiÅ¥","pasteArea":"Miesto pre vloženie","pasteMsg":"Prosím, vložte nasledovný rámÄek použitím klávesnice (<STRONG>Ctrl/Cmd+V</STRONG>) a stlaÄte OK.","securityMsg":"Kvôli vaÅ¡im bezpeÄnostným nastaveniam prehliadaÄa editor nie je schopný pristupovaÅ¥ k vaÅ¡ej schránke na kopírovanie priamo. Vložte to preto do tohto okna.","title":"VložiÅ¥"},"button":{"selectedLabel":"%1 (Vybrané)"},"colorbutton":{"auto":"Automaticky","bgColorTitle":"Farba pozadia","colors":{"000":"ÄŒierna","800000":"Maroon","8B4513":"Sedlová hnedá","2F4F4F":"Tmavo bridlicovo sivá","008080":"Modrozelená","000080":"Tmavomodrá","4B0082":"Indigo","696969":"Tmavá sivá","B22222":"Ohňová tehlová","A52A2A":"Hnedá","DAA520":"Zlatobyľ","006400":"Tmavá zelená","40E0D0":"Tyrkysová","0000CD":"Stredná modrá","800080":"Purpurová","808080":"Sivá","F00":"ÄŒervená","FF8C00":"Tmavá oranžová","FFD700":"Zlatá","008000":"Zelená","0FF":"Azúrová","00F":"Modrá","EE82EE":"Fialová","A9A9A9":"Tmavá sivá","FFA07A":"Svetlo lososová","FFA500":"Oranžová","FFFF00":"Žltá","00FF00":"Vápenná","AFEEEE":"Svetlo tyrkysová","ADD8E6":"Svetlo modrá","DDA0DD":"Slivková","D3D3D3":"Svetlo sivá","FFF0F5":"Levanduľovo Äervená","FAEBD7":"Antická biela","FFFFE0":"Svetlo žltá","F0FFF0":"Medová","F0FFFF":"Azúrová","F0F8FF":"Alicovo modrá","E6E6FA":"Levanduľová","FFF":"Biela"},"more":"Viac farieb...","panelTitle":"Farby","textColorTitle":"Farba textu"},"colordialog":{"clear":"VyÄistiÅ¥","highlight":"ZvýrazniÅ¥","options":"Možnosti farby","selected":"Vybraná farba","title":"Vyberte farbu"},"templates":{"button":"Å ablóny","emptyListMsg":"(Žiadne Å¡ablóny nedefinované)","insertOption":"NahradiÅ¥ aktuálny obsah","options":"Možnosti Å¡ablóny","selectPromptMsg":"Prosím vyberte Å¡ablónu na otvorenie v editore","title":"Å ablóny obsahu"},"contextmenu":{"options":"Možnosti kontextového menu"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Pomocný titulok","cssClassInputLabel":"Triedy Å¡týlu","edit":"UpraviÅ¥ Div","inlineStyleInputLabel":"Inline Å¡týl","langDirLTRLabel":"Zľava doprava (LTR)","langDirLabel":"Smer jazyka","langDirRTLLabel":"Zprava doľava (RTL)","languageCodeInputLabel":"Kód jazyka","remove":"OdstrániÅ¥ Div","styleSelectLabel":"Å týl","title":"VytvoriÅ¥ Div kontajner","toolbar":"VytvoriÅ¥ Div kontajner"},"toolbar":{"toolbarCollapse":"ZbaliÅ¥ liÅ¡tu nástrojov","toolbarExpand":"RozbaliÅ¥ liÅ¡tu nástrojov","toolbarGroups":{"document":"Dokument","clipboard":"Schránka pre kopírovanie/Späť","editing":"Upravovanie","forms":"Formuláre","basicstyles":"Základné Å¡týly","paragraph":"Odstavec","links":"Odkazy","insert":"VložiÅ¥","styles":"Å týly","colors":"Farby","tools":"Nástroje"},"toolbars":"LiÅ¡ty nástrojov editora"},"elementspath":{"eleLabel":"Cesta prvkov","eleTitle":"%1 prvok"},"find":{"find":"HľadaÅ¥","findOptions":"NájsÅ¥ možnosti","findWhat":"ÄŒo hľadaÅ¥:","matchCase":"RozliÅ¡ovaÅ¥ malé a veľké písmená","matchCyclic":"CykliÅ¥ zhodu","matchWord":"Len celé slová","notFoundMsg":"Hľadaný text nebol nájdený.","replace":"NahradiÅ¥","replaceAll":"NahradiÅ¥ vÅ¡etko","replaceSuccessMsg":"%1 výskyt(ov) nahradených.","replaceWith":"Čím nahradiÅ¥:","title":"NájsÅ¥ a nahradiÅ¥"},"fakeobjects":{"anchor":"Kotva","flash":"Flash animácia","hiddenfield":"Skryté pole","iframe":"IFrame","unknown":"Neznámy objekt"},"flash":{"access":"Prístup skriptu","accessAlways":"Vždy","accessNever":"Nikdy","accessSameDomain":"Rovnaká doména","alignAbsBottom":"Úplne dole","alignAbsMiddle":"Do stredu","alignBaseline":"Na základnú Äiaru","alignTextTop":"Na horný okraj textu","bgcolor":"Farba pozadia","chkFull":"PovoliÅ¥ zobrazenie na celú obrazovku (fullscreen)","chkLoop":"Opakovanie","chkMenu":"PovoliÅ¥ Flash Menu","chkPlay":"Automatické prehrávanie","flashvars":"Premenné pre Flash","hSpace":"H-medzera","properties":"Vlastnosti Flashu","propertiesTab":"Vlastnosti","quality":"Kvalita","qualityAutoHigh":"Automaticky vysoká","qualityAutoLow":"Automaticky nízka","qualityBest":"NajlepÅ¡ia","qualityHigh":"Vysoká","qualityLow":"Nízka","qualityMedium":"Stredná","scale":"Mierka","scaleAll":"ZobraziÅ¥ vÅ¡etko","scaleFit":"RoztiahnuÅ¥, aby sedelo presne","scaleNoBorder":"Bez okrajov","title":"Vlastnosti Flashu","vSpace":"V-medzera","validateHSpace":"H-medzera musí byÅ¥ Äíslo.","validateSrc":"URL nesmie byÅ¥ prázdne.","validateVSpace":"V-medzera musí byÅ¥ Äíslo","windowMode":"Mód okna","windowModeOpaque":"Nepriehľadný","windowModeTransparent":"Priehľadný","windowModeWindow":"Okno"},"font":{"fontSize":{"label":"VeľkosÅ¥","voiceLabel":"VeľkosÅ¥ písma","panelTitle":"VeľkosÅ¥ písma"},"label":"Font","panelTitle":"Názov fontu","voiceLabel":"Font"},"forms":{"button":{"title":"Vlastnosti tlaÄidla","text":"Text (Hodnota)","type":"Typ","typeBtn":"TlaÄidlo","typeSbm":"OdoslaÅ¥","typeRst":"ResetovaÅ¥"},"checkboxAndRadio":{"checkboxTitle":"Vlastnosti zaÅ¡krtávacieho políÄka","radioTitle":"Vlastnosti prepínaÄa (radio button)","value":"Hodnota","selected":"Vybrané (selected)"},"form":{"title":"Vlastnosti formulára","menu":"Vlastnosti formulára","action":"Akcia (action)","method":"Metóda (method)","encoding":"Kódovanie (encoding)"},"hidden":{"title":"Vlastnosti skrytého poľa","name":"Názov (name)","value":"Hodnota"},"select":{"title":"Vlastnosti rozbaľovacieho zoznamu","selectInfo":"Informácie o výbere","opAvail":"Dostupné možnosti","value":"Hodnota","size":"VeľkosÅ¥","lines":"riadkov","chkMulti":"PovoliÅ¥ viacnásobný výber","opText":"Text","opValue":"Hodnota","btnAdd":"PridaÅ¥","btnModify":"UpraviÅ¥","btnUp":"Hore","btnDown":"Dole","btnSetValue":"NastaviÅ¥ ako vybranú hodnotu","btnDelete":"VymazaÅ¥"},"textarea":{"title":"Vlastnosti textovej oblasti (textarea)","cols":"Stĺpcov","rows":"Riadkov"},"textfield":{"title":"Vlastnosti textového poľa","name":"Názov (name)","value":"Hodnota","charWidth":"Šírka poľa (podľa znakov)","maxChars":"Maximálny poÄet znakov","type":"Typ","typeText":"Text","typePass":"Heslo","typeEmail":"Email","typeSearch":"HľadaÅ¥","typeTel":"Telefónne Äíslo","typeUrl":"URL"}},"format":{"label":"Formát","panelTitle":"Formát","tag_address":"Adresa","tag_div":"Normálny (DIV)","tag_h1":"Nadpis 1","tag_h2":"Nadpis 2","tag_h3":"Nadpis 3","tag_h4":"Nadpis 4","tag_h5":"Nadpis 5","tag_h6":"Nadpis 6","tag_p":"Normálny","tag_pre":"Formátovaný"},"horizontalrule":{"toolbar":"VložiÅ¥ vodorovnú Äiaru"},"iframe":{"border":"ZobraziÅ¥ rám frame-u","noUrl":"Prosím, vložte URL iframe","scrolling":"PovoliÅ¥ skrolovanie","title":"Vlastnosti IFrame","toolbar":"IFrame"},"image":{"alertUrl":"Zadajte prosím URL obrázka","alt":"Alternatívny text","border":"Rám (border)","btnUpload":"OdoslaÅ¥ to na server","button2Img":"Chcete zmeniÅ¥ vybrané obrázkové tlaÄidlo na jednoduchý obrázok?","hSpace":"H-medzera","img2Button":"Chcete zmeniÅ¥ vybraný obrázok na obrázkové tlaÄidlo?","infoTab":"Informácie o obrázku","linkTab":"Odkaz","lockRatio":"Pomer zámky","menu":"Vlastnosti obrázka","resetSize":"Pôvodná veľkosÅ¥","title":"Vlastnosti obrázka","titleButton":"Vlastnosti obrázkového tlaÄidla","upload":"NahraÅ¥","urlMissing":"Chýba URL zdroja obrázka.","vSpace":"V-medzera","validateBorder":"Rám (border) musí byÅ¥ celé Äíslo.","validateHSpace":"H-medzera musí byÅ¥ celé Äíslo.","validateVSpace":"V-medzera musí byÅ¥ celé Äíslo."},"indent":{"indent":"ZväÄÅ¡iÅ¥ odsadenie","outdent":"ZmenÅ¡iÅ¥ odsadenie"},"smiley":{"options":"Možnosti smajlíkov","title":"VložiÅ¥ smajlíka","toolbar":"Smajlíky"},"justify":{"block":"ZarovnaÅ¥ do bloku","center":"ZarovnaÅ¥ na stred","left":"ZarovnaÅ¥ vľavo","right":"ZarovnaÅ¥ vpravo"},"language":{"button":"NastaviÅ¥ jazyk","remove":"OdstrániÅ¥ jazyk"},"link":{"acccessKey":"Prístupový kľúÄ","advanced":"Rozšírené","advisoryContentType":"Pomocný typ obsahu","advisoryTitle":"Pomocný titulok","anchor":{"toolbar":"Kotva","menu":"UpraviÅ¥ kotvu","title":"Vlastnosti kotvy","name":"Názov kotvy","errorName":"Zadajte prosím názov kotvy","remove":"OdstrániÅ¥ kotvu"},"anchorId":"Podľa Id objektu","anchorName":"Podľa mena kotvy","charset":"Priradená znaková sada","cssClasses":"Triedy Å¡týlu","emailAddress":"E-Mailová adresa","emailBody":"Telo správy","emailSubject":"Predmet správy","id":"Id","info":"Informácie o odkaze","langCode":"Orientácia jazyka","langDir":"Orientácia jazyka","langDirLTR":"Zľava doprava (LTR)","langDirRTL":"Sprava doľava (RTL)","menu":"UpraviÅ¥ odkaz","name":"Názov","noAnchors":"(V dokumente nie sú dostupné žiadne kotvy)","noEmail":"Zadajte prosím e-mailovú adresu","noUrl":"Zadajte prosím URL odkazu","other":"<iný>","popupDependent":"ZávislosÅ¥ (Netscape)","popupFeatures":"Vlastnosti vyskakovacieho okna","popupFullScreen":"Celá obrazovka (IE)","popupLeft":"Ľavý okraj","popupLocationBar":"Panel umiestnenia (location bar)","popupMenuBar":"Panel ponuky (menu bar)","popupResizable":"Meniteľná veľkosÅ¥ (resizable)","popupScrollBars":"Posuvníky (scroll bars)","popupStatusBar":"Stavový riadok (status bar)","popupToolbar":"Panel nástrojov (toolbar)","popupTop":"Horný okraj","rel":"VzÅ¥ah (rel)","selectAnchor":"VybraÅ¥ kotvu","styles":"Å týl","tabIndex":"Poradie prvku (tab index)","target":"Cieľ","targetFrame":"<rámec>","targetFrameName":"Názov rámu cieľa","targetPopup":"<vyskakovacie okno>","targetPopupName":"Názov vyskakovacieho okna","title":"Odkaz","toAnchor":"Odkaz na kotvu v texte","toEmail":"E-mail","toUrl":"URL","toolbar":"Odkaz","type":"Typ odkazu","unlink":"OdstrániÅ¥ odkaz","upload":"NahraÅ¥"},"list":{"bulletedlist":"VložiÅ¥/OdstrániÅ¥ zoznam s odrážkami","numberedlist":"VložiÅ¥/OdstrániÅ¥ Äíslovaný zoznam"},"liststyle":{"armenian":"Arménske Äíslovanie","bulletedTitle":"Vlastnosti odrážkového zoznamu","circle":"Kruh","decimal":"Číselné (1, 2, 3, atÄ.)","decimalLeadingZero":"Číselné s nulou (01, 02, 03, atÄ.)","disc":"Disk","georgian":"Gregoriánske Äíslovanie (an, ban, gan, atÄ.)","lowerAlpha":"Malé latinské (a, b, c, d, e, atÄ.)","lowerGreek":"Malé grécke (alfa, beta, gama, atÄ.)","lowerRoman":"Malé rímske (i, ii, iii, iv, v, atÄ.)","none":"NiÄ","notset":"<nenastavené>","numberedTitle":"Vlastnosti Äíselného zoznamu","square":"Å tvorec","start":"ZaÄiatok","type":"Typ","upperAlpha":"Veľké latinské (A, B, C, D, E, atÄ.)","upperRoman":"Veľké rímske (I, II, III, IV, V, atÄ.)","validateStartNumber":"ZaÄiatoÄné Äíslo Äíselného zoznamu musí byÅ¥ celé Äíslo."},"magicline":{"title":"Sem vložte paragraf"},"maximize":{"maximize":"MaximalizovaÅ¥","minimize":"MinimalizovaÅ¥"},"newpage":{"toolbar":"Nová stránka"},"pagebreak":{"alt":"Zalomenie strany","toolbar":"VložiÅ¥ oddeľovaÄ stránky pre tlaÄ"},"pastetext":{"button":"VložiÅ¥ ako Äistý text","title":"VložiÅ¥ ako Äistý text"},"pastefromword":{"confirmCleanup":"Vkladaný text vyzerá byÅ¥ skopírovaný z Wordu. Chcete ho automaticky vyÄistiÅ¥ pred vkladaním?","error":"Nebolo možné vyÄistiÅ¥ vložené dáta kvôli internej chybe","title":"VložiÅ¥ z Wordu","toolbar":"VložiÅ¥ z Wordu"},"preview":{"preview":"Náhľad"},"print":{"toolbar":"TlaÄ"},"removeformat":{"toolbar":"OdstrániÅ¥ formátovanie"},"save":{"toolbar":"UložiÅ¥"},"selectall":{"toolbar":"VybraÅ¥ vÅ¡etko"},"showblocks":{"toolbar":"UkázaÅ¥ bloky"},"sourcearea":{"toolbar":"Zdroj"},"specialchar":{"options":"Možnosti Å¡peciálneho znaku","title":"Výber Å¡peciálneho znaku","toolbar":"VložiÅ¥ Å¡peciálny znak"},"scayt":{"btn_about":"O KPPP (Kontrola pravopisu poÄas písania)","btn_dictionaries":"Slovníky","btn_disable":"ZakázaÅ¥ KPPP (Kontrola pravopisu poÄas písania)","btn_enable":"PovoliÅ¥ KPPP (Kontrola pravopisu poÄas písania)","btn_langs":"Jazyky","btn_options":"Možnosti","text_title":""},"stylescombo":{"label":"Å týly","panelTitle":"Formátovanie Å¡týlov","panelTitle1":"Å týly bloku","panelTitle2":"Vnútroriadkové (inline) Å¡týly","panelTitle3":"Å týly objeku"},"table":{"border":"Šírka rámu (border)","caption":"Popis","cell":{"menu":"Bunka","insertBefore":"VložiÅ¥ bunku pred","insertAfter":"VložiÅ¥ bunku za","deleteCell":"VymazaÅ¥ bunky","merge":"ZlúÄiÅ¥ bunky","mergeRight":"ZlúÄiÅ¥ doprava","mergeDown":"ZlúÄiÅ¥ dole","splitHorizontal":"RozdeliÅ¥ bunky horizontálne","splitVertical":"RozdeliÅ¥ bunky vertikálne","title":"Vlastnosti bunky","cellType":"Typ bunky","rowSpan":"Rozsah riadkov","colSpan":"Rozsah stĺpcov","wordWrap":"Zalomovanie riadkov","hAlign":"Horizontálne zarovnanie","vAlign":"Vertikálne zarovnanie","alignBaseline":"Základná Äiara (baseline)","bgColor":"Farba pozadia","borderColor":"Farba rámu","data":"Dáta","header":"HlaviÄka","yes":"Ãno","no":"Nie","invalidWidth":"Šírka bunky musí byÅ¥ Äíslo.","invalidHeight":"Výška bunky musí byÅ¥ Äíslo.","invalidRowSpan":"Rozsah riadkov musí byÅ¥ celé Äíslo.","invalidColSpan":"Rozsah stĺpcov musí byÅ¥ celé Äíslo.","chooseColor":"VybraÅ¥"},"cellPad":"Odsadenie obsahu (cell padding)","cellSpace":"VzdialenosÅ¥ buniek (cell spacing)","column":{"menu":"Stĺpec","insertBefore":"VložiÅ¥ stĺpec pred","insertAfter":"VložiÅ¥ stĺpec po","deleteColumn":"ZmazaÅ¥ stĺpce"},"columns":"Stĺpce","deleteTable":"VymazaÅ¥ tabuľku","headers":"HlaviÄka","headersBoth":"Obe","headersColumn":"Prvý stĺpec","headersNone":"Žiadne","headersRow":"Prvý riadok","invalidBorder":"Å irka rámu musí byÅ¥ Äíslo.","invalidCellPadding":"Odsadenie v bunkách (cell padding) musí byÅ¥ kladné Äíslo.","invalidCellSpacing":"Medzera mädzi bunkami (cell spacing) musí byÅ¥ kladné Äíslo.","invalidCols":"PoÄet stĺpcov musí byÅ¥ Äíslo väÄÅ¡ie ako 0.","invalidHeight":"Výška tabuľky musí byÅ¥ Äíslo.","invalidRows":"PoÄet riadkov musí byÅ¥ Äíslo väÄÅ¡ie ako 0.","invalidWidth":"Å irka tabuľky musí byÅ¥ Äíslo.","menu":"Vlastnosti tabuľky","row":{"menu":"Riadok","insertBefore":"VložiÅ¥ riadok pred","insertAfter":"VložiÅ¥ riadok po","deleteRow":"VymazaÅ¥ riadky"},"rows":"Riadky","summary":"Prehľad","title":"Vlastnosti tabuľky","toolbar":"Tabuľka","widthPc":"percent","widthPx":"pixelov","widthUnit":"jednotka šírky"},"undo":{"redo":"Znovu","undo":"Späť"},"wsc":{"btnIgnore":"IgnorovaÅ¥","btnIgnoreAll":"IgnorovaÅ¥ vÅ¡etko","btnReplace":"Prepísat","btnReplaceAll":"Prepísat vÅ¡etko","btnUndo":"Späť","changeTo":"ZmeniÅ¥ na","errorLoading":"Chyba pri naÄítaní slovníka z adresy: %s.","ieSpellDownload":"Kontrola pravopisu nie je naiÅ¡talovaná. Chcete ju teraz stiahnuÅ¥?","manyChanges":"Kontrola pravopisu dokonÄená: Bolo zmenených %1 slov","noChanges":"Kontrola pravopisu dokonÄená: Neboli zmenené žiadne slová","noMispell":"Kontrola pravopisu dokonÄená: Neboli nájdené žiadne chyby pravopisu","noSuggestions":"- Žiadny návrh -","notAvailable":"PrepáÄte, ale služba je momentálne nedostupná.","notInDic":"Nie je v slovníku","oneChange":"Kontrola pravopisu dokonÄená: Bolo zmenené jedno slovo","progress":"Prebieha kontrola pravopisu...","title":"SkontrolovaÅ¥ pravopis","toolbar":"Kontrola pravopisu"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/sl.js b/wqflask/wqflask/static/packages/ckeditor/lang/sl.js
deleted file mode 100644
index 2afeec0f..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/sl.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['sl']={"editor":"Bogat Urejevalnik Besedila","editorPanel":"Rich Text Editor ploÅ¡Äa","common":{"editorHelp":"Pritisnite ALT 0 za pomoÄ","browseServer":"Prebrskaj na strežniku","url":"URL","protocol":"Protokol","upload":"Naloži","uploadSubmit":"PoÅ¡lji na strežnik","image":"Slika","flash":"Flash","form":"Obrazec","checkbox":"Potrditveno polje","radio":"Izbirno polje","textField":"Vnosno polje","textarea":"Vnosno obmoÄje","hiddenField":"Skrito polje","button":"Gumb","select":"Spustno Polje","imageButton":"Slikovni Gumb","notSet":"<ni doloÄen>","id":"Id","name":"Ime","langDir":"Smer jezika","langDirLtr":"Od leve proti desni (LTR)","langDirRtl":"Od desne proti levi (RTL)","langCode":"Koda Jezika","longDescr":"Dolg opis URL-ja","cssClass":"Razred stilne predloge","advisoryTitle":"Predlagani naslov","cssStyle":"Slog","ok":"V redu","cancel":"PrekliÄi","close":"Zapri","preview":"Predogled","resize":"Potegni za spremembo velikosti","generalTab":"SploÅ¡no","advancedTab":"Napredno","validateNumberFailed":"Ta vrednost ni Å¡tevilo.","confirmNewPage":"Vse neshranjene spremembe te vsebine bodo izgubljene. Ali res želite naložiti novo stran?","confirmCancel":"Nekaj možnosti je bilo spremenjenih. Ali res želite zapreti okno?","options":"Možnosti","target":"Cilj","targetNew":"Novo Okno (_blank)","targetTop":"Vrhovno Okno (_top)","targetSelf":"Enako Okno (_self)","targetParent":"MatiÄno Okno (_parent)","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","styles":"Slog","cssClasses":"Razred stilne predloge","width":"Å irina","height":"ViÅ¡ina","align":"Poravnava","alignLeft":"Levo","alignRight":"Desno","alignCenter":"Sredinsko","alignJustify":"Obojestranska poravnava","alignTop":"Na vrh","alignMiddle":"V sredino","alignBottom":"Na dno","alignNone":"Brez poravnave","invalidValue":"Neveljavna vrednost.","invalidHeight":"ViÅ¡ina mora biti Å¡tevilo.","invalidWidth":"Å irina mora biti Å¡tevilo.","invalidCssLength":"Vrednost doloÄena za \"%1\" polje mora biti pozitivna Å¡tevilka z ali brez veljavne CSS enote za merjenje (px, %, in, cm, mm, em, ex, pt, ali pc).","invalidHtmlLength":"Vrednost doloÄena za \"%1\" polje mora biti pozitivna Å¡tevilka z ali brez veljavne HTML enote za merjenje (px ali %).","invalidInlineStyle":"Vrednost doloÄena za inline slog mora biti sestavljena iz ene ali veÄ tork (tuples) z obliko \"ime : vrednost\", loÄenih z podpiÄji.","cssLengthTooltip":"Vnesite Å¡tevilko za vrednost v slikovnih pikah (pixels) ali Å¡tevilko z veljavno CSS enoto (px, %, in, cm, mm, em, ex, pt, ali pc).","unavailable":"%1<span class=\"cke_accessibility\">, nedosegljiv</span>"},"about":{"copy":"Copyright &copy; $1. Vse pravice pridržane.","dlgTitle":"O programu CKEditor","help":"Preverite $1 za pomoÄ.","moreInfo":"Za informacijo o licenci prosim obiÅ¡Äite naÅ¡o spletno stran:","title":"O programu CKEditor","userGuide":"CKEditor Navodila za Uporabo"},"basicstyles":{"bold":"Krepko","italic":"LežeÄe","strike":"PreÄrtano","subscript":"Podpisano","superscript":"Nadpisano","underline":"PodÄrtano"},"bidi":{"ltr":"Smer besedila od leve proti desni","rtl":"Smer besedila od desne proti levi"},"blockquote":{"toolbar":"Citat"},"clipboard":{"copy":"Kopiraj","copyError":"Varnostne nastavitve brskalnika ne dopuÅ¡Äajo samodejnega kopiranja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+C).","cut":"Izreži","cutError":"Varnostne nastavitve brskalnika ne dopuÅ¡Äajo samodejnega izrezovanja. Uporabite kombinacijo tipk na tipkovnici (Ctrl/Cmd+X).","paste":"Prilepi","pasteArea":"Prilepi Prostor","pasteMsg":"Prosim prilepite v sleÄi okvir s pomoÄjo tipkovnice (<STRONG>Ctrl/Cmd+V</STRONG>) in pritisnite <STRONG>V redu</STRONG>.","securityMsg":"Zaradi varnostnih nastavitev vaÅ¡ega brskalnika urejevalnik ne more neposredno dostopati do odložiÅ¡Äa. Vsebino odložiÅ¡Äa ponovno prilepite v to okno.","title":"Prilepi"},"button":{"selectedLabel":"%1 (Izbrano)"},"colorbutton":{"auto":"Samodejno","bgColorTitle":"Barva ozadja","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"VeÄ barv...","panelTitle":"Colors","textColorTitle":"Barva besedila"},"colordialog":{"clear":"PoÄisti","highlight":"Poudarjeno","options":"Barvne Možnosti","selected":"Izbrano","title":"Izberi barvo"},"templates":{"button":"Predloge","emptyListMsg":"(Ni pripravljenih predlog)","insertOption":"Zamenjaj trenutno vsebino","options":"Možnosti Predloge","selectPromptMsg":"Izberite predlogo, ki jo želite odpreti v urejevalniku<br>(trenutna vsebina bo izgubljena):","title":"Vsebinske predloge"},"contextmenu":{"options":"Možnosti Kontekstnega Menija"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Predlagani naslov","cssClassInputLabel":"Razred stilne predloge","edit":"Uredi Div","inlineStyleInputLabel":"Inline Slog","langDirLTRLabel":"Od leve proti desni (LTR)","langDirLabel":"Smer jezika","langDirRTLLabel":"Od desne proti levi (RTL)","languageCodeInputLabel":"Koda Jezika","remove":"Odstrani Div","styleSelectLabel":"Slog","title":"Ustvari Div Posodo","toolbar":"Ustvari Div Posodo"},"toolbar":{"toolbarCollapse":"SkrÄi Orodno Vrstico","toolbarExpand":"RazÅ¡iri Orodno Vrstico","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Urejevalnik orodne vrstice"},"elementspath":{"eleLabel":"Pot elementov","eleTitle":"%1 element"},"find":{"find":"Najdi","findOptions":"Find Options","findWhat":"Najdi:","matchCase":"Razlikuj velike in male Ärke","matchCyclic":"Primerjaj znake v cirilici","matchWord":"Samo cele besede","notFoundMsg":"Navedeno besedilo ni bilo najdeno.","replace":"Zamenjaj","replaceAll":"Zamenjaj vse","replaceSuccessMsg":"%1 pojavitev je bilo zamenjano.","replaceWith":"Zamenjaj z:","title":"Najdi in zamenjaj"},"fakeobjects":{"anchor":"Sidro","flash":"Flash animacija","hiddenfield":"Skrito polje","iframe":"IFrame","unknown":"Neznan objekt"},"flash":{"access":"Dostop skript","accessAlways":"Vedno","accessNever":"Nikoli","accessSameDomain":"Samo ista domena","alignAbsBottom":"Popolnoma na dno","alignAbsMiddle":"Popolnoma v sredino","alignBaseline":"Na osnovno Ärto","alignTextTop":"Besedilo na vrh","bgcolor":"Barva ozadja","chkFull":"Dovoli celozaslonski naÄin","chkLoop":"Ponavljanje","chkMenu":"OmogoÄi Flash Meni","chkPlay":"Samodejno predvajaj","flashvars":"Spremenljivke za Flash","hSpace":"Vodoravni razmik","properties":"Lastnosti Flash","propertiesTab":"Lastnosti","quality":"Kakovost","qualityAutoHigh":"Samodejno visoka","qualityAutoLow":"Samodejno nizka","qualityBest":"NajviÅ¡ja","qualityHigh":"Visoka","qualityLow":"Nizka","qualityMedium":"Srednja","scale":"PoveÄava","scaleAll":"Pokaži vse","scaleFit":"NatanÄno prileganje","scaleNoBorder":"Brez obrobe","title":"Lastnosti Flash","vSpace":"NavpiÄni razmik","validateHSpace":"Vodoravni razmik mora biti Å¡tevilo.","validateSrc":"Vnesite URL povezave","validateVSpace":"NavpiÄni razmik mora biti Å¡tevilo.","windowMode":"Vrsta okna","windowModeOpaque":"Motno","windowModeTransparent":"Prosojno","windowModeWindow":"Okno"},"font":{"fontSize":{"label":"Velikost","voiceLabel":"Velikost","panelTitle":"Velikost"},"label":"Pisava","panelTitle":"Pisava","voiceLabel":"Pisava"},"forms":{"button":{"title":"Lastnosti gumba","text":"Besedilo (Vrednost)","type":"Tip","typeBtn":"Gumb","typeSbm":"Potrdi","typeRst":"Ponastavi"},"checkboxAndRadio":{"checkboxTitle":"Lastnosti potrditvenega polja","radioTitle":"Lastnosti izbirnega polja","value":"Vrednost","selected":"Izbrano"},"form":{"title":"Lastnosti obrazca","menu":"Lastnosti obrazca","action":"Akcija","method":"Metoda","encoding":"Kodiranje znakov"},"hidden":{"title":"Lastnosti skritega polja","name":"Ime","value":"Vrednost"},"select":{"title":"Lastnosti spustnega seznama","selectInfo":"Podatki","opAvail":"Razpoložljive izbire","value":"Vrednost","size":"Velikost","lines":"vrstic","chkMulti":"Dovoli izbor veÄih vrstic","opText":"Besedilo","opValue":"Vrednost","btnAdd":"Dodaj","btnModify":"Spremeni","btnUp":"Gor","btnDown":"Dol","btnSetValue":"Postavi kot privzeto izbiro","btnDelete":"IzbriÅ¡i"},"textarea":{"title":"Lastnosti vnosnega obmoÄja","cols":"Stolpcev","rows":"Vrstic"},"textfield":{"title":"Lastnosti vnosnega polja","name":"Ime","value":"Vrednost","charWidth":"Dolžina","maxChars":"NajveÄje Å¡tevilo znakov","type":"Tip","typeText":"Besedilo","typePass":"Geslo","typeEmail":"E-poÅ¡ta","typeSearch":"Iskanje","typeTel":"Telefonska Å tevilka","typeUrl":"URL"}},"format":{"label":"Oblika","panelTitle":"Oblika","tag_address":"Napis","tag_div":"Navaden (DIV)","tag_h1":"Naslov 1","tag_h2":"Naslov 2","tag_h3":"Naslov 3","tag_h4":"Naslov 4","tag_h5":"Naslov 5","tag_h6":"Naslov 6","tag_p":"Navaden","tag_pre":"Oblikovan"},"horizontalrule":{"toolbar":"Vstavi vodoravno Ärto"},"iframe":{"border":"Pokaži mejo okvira","noUrl":"Prosimo, vnesite iframe URL","scrolling":"OmogoÄi scrollbars","title":"IFrame Lastnosti","toolbar":"IFrame"},"image":{"alertUrl":"Vnesite URL slike","alt":"Nadomestno besedilo","border":"Obroba","btnUpload":"PoÅ¡lji na strežnik","button2Img":"ŽeliÅ¡ pretvoriti izbrani gumb s sliko v preprosto sliko?","hSpace":"Vodoravni razmik","img2Button":"ŽeliÅ¡ pretvoriti izbrano sliko v gumb s sliko?","infoTab":"Podatki o sliki","linkTab":"Povezava","lockRatio":"Zakleni razmerje","menu":"Lastnosti slike","resetSize":"Ponastavi velikost","title":"Lastnosti slike","titleButton":"Lastnosti gumba s sliko","upload":"PoÅ¡lji","urlMissing":"Manjka vir (URL) slike.","vSpace":"NavpiÄni razmik","validateBorder":"Meja mora biti celo Å¡tevilo.","validateHSpace":"HSpace mora biti celo Å¡tevilo.","validateVSpace":"VSpace mora biti celo Å¡tevilo."},"indent":{"indent":"PoveÄaj zamik","outdent":"ZmanjÅ¡aj zamik"},"smiley":{"options":"Možnosti SmeÅ¡ka","title":"Vstavi smeÅ¡ka","toolbar":"SmeÅ¡ko"},"justify":{"block":"Obojestranska poravnava","center":"Sredinska poravnava","left":"Leva poravnava","right":"Desna poravnava"},"language":{"button":"Nastavi jezik","remove":"Odstrani jezik"},"link":{"acccessKey":"Dostopno Geslo","advanced":"Napredno","advisoryContentType":"Predlagani tip vsebine (content-type)","advisoryTitle":"Predlagani naslov","anchor":{"toolbar":"Vstavi/uredi zaznamek","menu":"Lastnosti zaznamka","title":"Lastnosti zaznamka","name":"Ime zaznamka","errorName":"Prosim vnesite ime zaznamka","remove":"Remove Anchor"},"anchorId":"Po ID-ju elementa","anchorName":"Po imenu zaznamka","charset":"Kodna tabela povezanega vira","cssClasses":"Razred stilne predloge","emailAddress":"Elektronski naslov","emailBody":"Vsebina sporoÄila","emailSubject":"Predmet sporoÄila","id":"Id","info":"Podatki o povezavi","langCode":"Smer jezika","langDir":"Smer jezika","langDirLTR":"Od leve proti desni (LTR)","langDirRTL":"Od desne proti levi (RTL)","menu":"Uredi povezavo","name":"Ime","noAnchors":"(V tem dokumentu ni zaznamkov)","noEmail":"Vnesite elektronski naslov","noUrl":"Vnesite URL povezave","other":"<drug>","popupDependent":"Podokno (Netscape)","popupFeatures":"ZnaÄilnosti pojavnega okna","popupFullScreen":"Celozaslonska slika (IE)","popupLeft":"Lega levo","popupLocationBar":"Naslovna vrstica","popupMenuBar":"Menijska vrstica","popupResizable":"Spremenljive velikosti","popupScrollBars":"Drsniki","popupStatusBar":"Vrstica stanja","popupToolbar":"Orodna vrstica","popupTop":"Lega na vrhu","rel":"Odnos","selectAnchor":"Izberi zaznamek","styles":"Slog","tabIndex":"Å tevilka tabulatorja","target":"Cilj","targetFrame":"<okvir>","targetFrameName":"Ime ciljnega okvirja","targetPopup":"<pojavno okno>","targetPopupName":"Ime pojavnega okna","title":"Povezava","toAnchor":"Zaznamek na tej strani","toEmail":"Elektronski naslov","toUrl":"URL","toolbar":"Vstavi/uredi povezavo","type":"Vrsta povezave","unlink":"Odstrani povezavo","upload":"Prenesi"},"list":{"bulletedlist":"OznaÄen seznam","numberedlist":"OÅ¡tevilÄen seznam"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Vstavite odstavek tukaj"},"maximize":{"maximize":"Maksimiraj","minimize":"Minimiraj"},"newpage":{"toolbar":"Nova stran"},"pagebreak":{"alt":"Prelom Strani","toolbar":"Vstavi prelom strani"},"pastetext":{"button":"Prilepi kot golo besedilo","title":"Prilepi kot golo besedilo"},"pastefromword":{"confirmCleanup":"Besedilo, ki ga želite prilepiti je kopirano iz Word-a. Ali ga želite oÄistiti, preden ga prilepite?","error":"Ni bilo mogoÄe oÄistiti prilepljenih podatkov zaradi notranje napake","title":"Prilepi iz Worda","toolbar":"Prilepi iz Worda"},"preview":{"preview":"Predogled"},"print":{"toolbar":"Natisni"},"removeformat":{"toolbar":"Odstrani oblikovanje"},"save":{"toolbar":"Shrani"},"selectall":{"toolbar":"Izberi vse"},"showblocks":{"toolbar":"Prikaži ograde"},"sourcearea":{"toolbar":"Izvorna koda"},"specialchar":{"options":"Možnosti Posebnega Znaka","title":"Izberi Posebni Znak","toolbar":"Vstavi posebni znak"},"scayt":{"btn_about":"O storitvi SCAYT","btn_dictionaries":"Slovarji","btn_disable":"OnemogoÄi SCAYT","btn_enable":"OmogoÄi SCAYT","btn_langs":"Jeziki","btn_options":"Možnosti","text_title":""},"stylescombo":{"label":"Slog","panelTitle":"Oblikovalni Stili","panelTitle1":"Slogi odstavkov","panelTitle2":"Slogi besedila","panelTitle3":"Slogi objektov"},"table":{"border":"Velikost obrobe","caption":"Naslov","cell":{"menu":"Celica","insertBefore":"Vstavi celico pred","insertAfter":"Vstavi celico za","deleteCell":"IzbriÅ¡i celice","merge":"Združi celice","mergeRight":"Združi desno","mergeDown":"Druži navzdol","splitHorizontal":"Razdeli celico vodoravno","splitVertical":"Razdeli celico navpiÄno","title":"Lastnosti celice","cellType":"Vrsta celice","rowSpan":"Razpon vrstic","colSpan":"Razpon stolpcev","wordWrap":"Prelom besedila","hAlign":"Vodoravna poravnava","vAlign":"NavpiÄna poravnava","alignBaseline":"Osnovnica","bgColor":"Barva ozadja","borderColor":"Barva obrobe","data":"Podatki","header":"Glava","yes":"Da","no":"Ne","invalidWidth":"Å irina celice mora biti Å¡tevilo.","invalidHeight":"ViÅ¡ina celice mora biti Å¡tevilo.","invalidRowSpan":"Razpon vrstic mora biti celo Å¡tevilo.","invalidColSpan":"Razpon stolpcev mora biti celo Å¡tevilo.","chooseColor":"Izberi"},"cellPad":"Polnilo med celicami","cellSpace":"Razmik med celicami","column":{"menu":"Stolpec","insertBefore":"Vstavi stolpec pred","insertAfter":"Vstavi stolpec za","deleteColumn":"IzbriÅ¡i stolpce"},"columns":"Stolpci","deleteTable":"IzbriÅ¡i tabelo","headers":"Glave","headersBoth":"Oboje","headersColumn":"Prvi stolpec","headersNone":"Brez","headersRow":"Prva vrstica","invalidBorder":"Å irina obrobe mora biti Å¡tevilo.","invalidCellPadding":"Zamik celic mora biti Å¡tevilo","invalidCellSpacing":"Razmik med celicami mora biti Å¡tevilo.","invalidCols":"Å tevilo stolpcev mora biti veÄje od 0.","invalidHeight":"ViÅ¡ina tabele mora biti Å¡tevilo.","invalidRows":"Å tevilo vrstic mora biti veÄje od 0.","invalidWidth":"Å irina tabele mora biti Å¡tevilo.","menu":"Lastnosti tabele","row":{"menu":"Vrstica","insertBefore":"Vstavi vrstico pred","insertAfter":"Vstavi vrstico za","deleteRow":"IzbriÅ¡i vrstice"},"rows":"Vrstice","summary":"Povzetek","title":"Lastnosti tabele","toolbar":"Tabela","widthPc":"procentov","widthPx":"pik","widthUnit":"enota Å¡irine"},"undo":{"redo":"Ponovi","undo":"Razveljavi"},"wsc":{"btnIgnore":"Prezri","btnIgnoreAll":"Prezri vse","btnReplace":"Zamenjaj","btnReplaceAll":"Zamenjaj vse","btnUndo":"Razveljavi","changeTo":"Spremeni v","errorLoading":"Napaka pri nalaganju storitve programa na naslovu %s.","ieSpellDownload":"ÄŒrkovalnik ni nameÅ¡Äen. Ali ga želite prenesti sedaj?","manyChanges":"ÄŒrkovanje je konÄano: Spremenjenih je bilo %1 besed","noChanges":"ÄŒrkovanje je konÄano: Nobena beseda ni bila spremenjena","noMispell":"ÄŒrkovanje je konÄano: Brez napak","noSuggestions":"- Ni predlogov -","notAvailable":"Oprostite, storitev trenutno ni dosegljiva.","notInDic":"Ni v slovarju","oneChange":"ÄŒrkovanje je konÄano: Spremenjena je bila ena beseda","progress":"Preverjanje Ärkovanja se izvaja...","title":"ÄŒrkovalnik","toolbar":"Preveri Ärkovanje"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/sq.js b/wqflask/wqflask/static/packages/ckeditor/lang/sq.js
deleted file mode 100644
index fff59995..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/sq.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['sq']={"editor":"Redaktues i Pasur Teksti","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Shtyp ALT 0 për ndihmë","browseServer":"Shfleto në Server","url":"URL","protocol":"Protokolli","upload":"Ngarko","uploadSubmit":"Dërgo në server","image":"Imazh","flash":"Objekt flash","form":"Formular","checkbox":"Checkbox","radio":"Buton radio","textField":"Fushë tekst","textarea":"Hapësirë tekst","hiddenField":"Fushë e fshehur","button":"Buton","select":"Menu zgjedhjeje","imageButton":"Buton imazhi","notSet":"<e pazgjedhur>","id":"Id","name":"Emër","langDir":"Kod gjuhe","langDirLtr":"Nga e majta në të djathtë (LTR)","langDirRtl":"Nga e djathta në të majtë (RTL)","langCode":"Kod gjuhe","longDescr":"Përshkrim i hollësishëm","cssClass":"Klasa stili CSS","advisoryTitle":"Titull","cssStyle":"Stil","ok":"OK","cancel":"Anulo","close":"Mbyll","preview":"Parashiko","resize":"Ripërmaso","generalTab":"Të përgjithshme","advancedTab":"Të përparuara","validateNumberFailed":"Vlera e futur nuk është një numër","confirmNewPage":"Çdo ndryshim që nuk është ruajtur do humbasë. Je i sigurtë që dëshiron të krijosh një faqe të re?","confirmCancel":"Disa opsione kanë ndryshuar. Je i sigurtë që dëshiron ta mbyllësh dritaren?","options":"Opsione","target":"Objektivi","targetNew":"Dritare e re (_blank)","targetTop":"Dritare në plan të parë (_top)","targetSelf":"E njëjta dritare (_self)","targetParent":"Dritarja prind (_parent)","langDirLTR":"Nga e majta në të djathë (LTR)","langDirRTL":"Nga e djathta në të majtë (RTL)","styles":"Stil","cssClasses":"Klasa Stili CSS","width":"Gjerësi","height":"Lartësi","align":"Rreshtim","alignLeft":"Majtas","alignRight":"Djathtas","alignCenter":"Qendër","alignJustify":"Zgjero","alignTop":"Lart","alignMiddle":"Në mes","alignBottom":"Poshtë","alignNone":"None","invalidValue":"Vlerë e pavlefshme","invalidHeight":"Lartësia duhet të jetë një numër","invalidWidth":"Gjerësia duhet të jetë një numër","invalidCssLength":"Vlera e fushës \"%1\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme CSS (px, %, in, cm, mm, em, ex, pt ose pc).","invalidHtmlLength":"Vlera e fushës \"%1\" duhet të jetë një numër pozitiv me apo pa njësi matëse të vlefshme HTML (px ose %)","invalidInlineStyle":"Stili inline duhet të jetë një apo disa vlera të formatit \"emër: vlerë\", ndarë nga pikëpresje.","cssLengthTooltip":"Fut një numër për vlerën në pixel apo një numër me një njësi të vlefshme CSS (px, %, in, cm, mm, ex, pt, ose pc).","unavailable":"%1<span class=\"cke_accessibility\">, i padisponueshëm</span>"},"about":{"copy":"Të drejtat e kopjimit &copy; $1. Të gjitha të drejtat e rezervuara.","dlgTitle":"Rreth CKEditor","help":"Kontrollo $1 për ndihmë.","moreInfo":"Për informacione rreth licencave shih faqen tonë:","title":"Rreth CKEditor","userGuide":"Udhëzuesi i Shfrytëzuesit të CKEditor"},"basicstyles":{"bold":"Trash","italic":"Pjerrët","strike":"Nëpërmes","subscript":"Nën-skriptë","superscript":"Super-skriptë","underline":"Nënvijëzuar"},"bidi":{"ltr":"Drejtimi i tekstit nga e majta në të djathtë","rtl":"Drejtimi i tekstit nga e djathta në të majtë"},"blockquote":{"toolbar":"Citatet"},"clipboard":{"copy":"Kopjo","copyError":"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e kopjimit. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+C).","cut":"Preje","cutError":"Të dhënat e sigurisë së shfletuesit tuaj nuk lejojnë që redaktuesi automatikisht të kryej veprimin e prerjes. Ju lutemi shfrytëzoni tastierën për këtë veprim (Ctrl/Cmd+X).","paste":"Hidhe","pasteArea":"Hapësira Hedhëse","pasteMsg":"Ju lutemi hidhni brenda kutizës në vijim duke shfrytëzuar tastierën (<strong>Ctrl/Cmd+V</strong>) dhe shtypni Mirë.","securityMsg":"Për shkak të dhënave të sigurisë së shfletuesit tuaj, redaktuesi nuk është në gjendje të i qaset drejtpërdrejtë të dhanve të tabelës suaj të punës. Ju duhet të hidhni atë përsëri në këtë dritare.","title":"Hidhe"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatik","bgColorTitle":"Ngjyra e Prapavijës","colors":{"000":"E zezë","800000":"Ngjyrë gështenjë","8B4513":"Ngjyrë Shale Kafe","2F4F4F":"Ngjyrë Gri të errët ardëz","008080":"Ngjyrë bajukë","000080":"Ngjyrë Marine","4B0082":"Indigo","696969":"Gri e Errët","B22222":"Tullë në Flakë","A52A2A":"Ngjytë Kafe","DAA520":"Shkop i Artë","006400":"E Gjelbër e Errët","40E0D0":"Ngjyrë e Bruztë","0000CD":"E Kaltër e Mesme","800080":"Vjollcë","808080":"Gri","F00":"E Kuqe","FF8C00":"E Portokalltë e Errët","FFD700":"Ngjyrë Ari","008000":"E Gjelbërt","0FF":"Cyan","00F":"E Kaltër","EE82EE":"Vjollcë","A9A9A9":"Gri e Zbehtë","FFA07A":"Salmon i Ndritur","FFA500":"E Portokalltë","FFFF00":"E Verdhë","00FF00":"Ngjyrë Gëlqere","AFEEEE":"Ngjyrë e Bruztë e Zbehtë","ADD8E6":"E Kaltër e Ndritur","DDA0DD":"Ngjyrë Llokumi","D3D3D3":"Gri e Ndritur","FFF0F5":"Ngjyrë Purpur e Skuqur","FAEBD7":"E Bardhë Antike","FFFFE0":"E verdhë e Ndritur","F0FFF0":"Ngjyrë Nektari","F0FFFF":"Ngjyrë Qielli","F0F8FF":"E Kaltër Alice","E6E6FA":"Ngjyrë Purpur e Zbetë","FFF":"E bardhë"},"more":"Më Shumë Ngjyra...","panelTitle":"Ngjyrat","textColorTitle":"Ngjyra e Tekstit"},"colordialog":{"clear":"Pastro","highlight":"Thekso","options":"Përzgjedhjet e Ngjyrave","selected":"Ngjyra e Përzgjedhur","title":"Përzgjidh një ngjyrë"},"templates":{"button":"Shabllonet","emptyListMsg":"(Asnjë shabllon nuk është paradefinuar)","insertOption":"Zëvendëso përmbajtjen aktuale","options":"Opsionet e Shabllonit","selectPromptMsg":"Përzgjidhni shabllonin për të hapur tek redaktuesi","title":"Përmbajtja e Shabllonit"},"contextmenu":{"options":"Mundësitë e Menysë së Kontekstit"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Titull","cssClassInputLabel":"Klasa stili CSS","edit":"Redakto Div","inlineStyleInputLabel":"Stili i brendshëm","langDirLTRLabel":"Nga e majta në të djathë (LTR)","langDirLabel":"Drejtim teksti","langDirRTLLabel":"Nga e djathta në të majtë (RTL)","languageCodeInputLabel":"Kodi i Gjuhës","remove":"Largo Div","styleSelectLabel":"Stil","title":"Krijo Div Përmbajtës","toolbar":"Krijo Div Përmbajtës"},"toolbar":{"toolbarCollapse":"Zvogëlo Shiritin","toolbarExpand":"Zgjero Shiritin","toolbarGroups":{"document":"Dokument","clipboard":"Tabela Punës/Ribëje","editing":"Duke Redaktuar","forms":"Formular","basicstyles":"Stili Bazë","paragraph":"Paragraf","links":"Nyjet","insert":"Shto","styles":"Stil","colors":"Ngjyrat","tools":"Mjetet"},"toolbars":"Shiritet e Redaktuesit"},"elementspath":{"eleLabel":"Rruga e elementeve","eleTitle":"%1 element"},"find":{"find":"Gjej","findOptions":"Gjejë Alternativat","findWhat":"Gjej çka:","matchCase":"Rasti i përputhjes","matchCyclic":"Përputh ciklikun","matchWord":"Përputh fjalën e tërë","notFoundMsg":"Teksti i caktuar nuk mundej të gjendet.","replace":"Zëvendëso","replaceAll":"Zëvendëso të gjitha","replaceSuccessMsg":"%1 rast(e) u zëvendësua(n).","replaceWith":"Zëvendëso me:","title":"Gjej dhe Zëvendëso"},"fakeobjects":{"anchor":"Spirancë","flash":"Objekt flash","hiddenfield":"Fushë e fshehur","iframe":"IFrame","unknown":"Objekt i Panjohur"},"flash":{"access":"Qasja në Skriptë","accessAlways":"Gjithnjë","accessNever":"Asnjëherë","accessSameDomain":"Fusha e Njëjtë","alignAbsBottom":"Abs në Fund","alignAbsMiddle":"Abs në Mes","alignBaseline":"Baza","alignTextTop":"Koka e Tekstit","bgcolor":"Ngjyra e Prapavijës","chkFull":"Lejo Ekran të Plotë","chkLoop":"Përsëritje","chkMenu":"Lejo Menynë për Flash","chkPlay":"Auto Play","flashvars":"Variablat për Flash","hSpace":"Hapësira Horizontale","properties":"Karakteristikat për Flash","propertiesTab":"Karakteristikat","quality":"Kualiteti","qualityAutoHigh":"Automatikisht i Lartë","qualityAutoLow":"Automatikisht i Ulët","qualityBest":"Më i Miri","qualityHigh":"I Lartë","qualityLow":"Më i Ulti","qualityMedium":"I Mesëm","scale":"Shkalla","scaleAll":"Shfaq të Gjitha","scaleFit":"Përputhje të Plotë","scaleNoBorder":"Pa Kornizë","title":"Rekuizitat për Flash","vSpace":"Hapësira Vertikale","validateHSpace":"Hapësira Horizontale duhet të është numër.","validateSrc":"URL nuk duhet mbetur zbrazur.","validateVSpace":"Hapësira Vertikale duhet të është numër.","windowMode":"Window mode","windowModeOpaque":"Errët","windowModeTransparent":"Tejdukshëm","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Madhësia","voiceLabel":"Madhësia e Shkronjës","panelTitle":"Madhësia e Shkronjës"},"label":"Shkronja","panelTitle":"Emri i Shkronjës","voiceLabel":"Shkronja"},"forms":{"button":{"title":"Rekuizitat e Pullës","text":"Teskti (Vlera)","type":"LLoji","typeBtn":"Buton","typeSbm":"Dërgo","typeRst":"Rikthe"},"checkboxAndRadio":{"checkboxTitle":"Rekuizitat e Kutizë Përzgjedhëse","radioTitle":"Rekuizitat e Pullës","value":"Vlera","selected":"Përzgjedhur"},"form":{"title":"Rekuizitat e Formës","menu":"Rekuizitat e Formës","action":"Veprim","method":"Metoda","encoding":"Kodimi"},"hidden":{"title":"Rekuizitat e Fushës së Fshehur","name":"Emër","value":"Vlera"},"select":{"title":"Rekuizitat e Fushës së Përzgjedhur","selectInfo":"Përzgjidh Informacionin","opAvail":"Opsionet e Mundshme","value":"Vlera","size":"Madhësia","lines":"rreshtat","chkMulti":"Lejo përzgjidhje të shumëfishta","opText":"Teksti","opValue":"Vlera","btnAdd":"Vendos","btnModify":"Ndrysho","btnUp":"Sipër","btnDown":"Poshtë","btnSetValue":"Bëje si vlerë të përzgjedhur","btnDelete":"Grise"},"textarea":{"title":"Rekuzitat e Fushës së Tekstit","cols":"Kolonat","rows":"Rreshtat"},"textfield":{"title":"Rekuizitat e Fushës së Tekstit","name":"Emër","value":"Vlera","charWidth":"Gjerësia e Karakterit","maxChars":"Numri maksimal i karaktereve","type":"LLoji","typeText":"Teksti","typePass":"Fjalëkalimi","typeEmail":"Posta Elektronike","typeSearch":"Kërko","typeTel":"Numri i Telefonit","typeUrl":"URL"}},"format":{"label":"Formati","panelTitle":"Formati i Paragrafit","tag_address":"Adresa","tag_div":"Normal (DIV)","tag_h1":"Titulli 1","tag_h2":"Titulli 2","tag_h3":"Titulli 3","tag_h4":"Titulli 4","tag_h5":"Titulli 5","tag_h6":"Titulli 6","tag_p":"Normal","tag_pre":"Formatuar"},"horizontalrule":{"toolbar":"Vendos Vijë Horizontale"},"iframe":{"border":"Shfaq kufirin e kornizës","noUrl":"Ju lutemi shkruani URL-në e iframe-it","scrolling":"Lejo shiritët zvarritës","title":"Karakteristikat e IFrame","toolbar":"IFrame"},"image":{"alertUrl":"Ju lutemi shkruani URL-në e fotos","alt":"Tekst Alternativ","border":"Korniza","btnUpload":"Dërgo në server","button2Img":"Dëshironi të e ndërroni pullën e fotos së selektuar në një foto të thjeshtë?","hSpace":"HSpace","img2Button":"Dëshironi të ndryshoni foton e përzgjedhur në pullë?","infoTab":"Informacione mbi Fotografinë","linkTab":"Nyja","lockRatio":"Mbyll Racionin","menu":"Karakteristikat e Fotografisë","resetSize":"Rikthe Madhësinë","title":"Karakteristikat e Fotografisë","titleButton":"Karakteristikat e Pullës së Fotografisë","upload":"Ngarko","urlMissing":"Mungon URL e burimit të fotografisë.","vSpace":"Hapësira Vertikale","validateBorder":"Korniza duhet të jetë numër i plotë.","validateHSpace":"Hapësira horizontale duhet të jetë numër i plotë.","validateVSpace":"Hapësira vertikale duhet të jetë numër i plotë."},"indent":{"indent":"Rrite Identin","outdent":"Zvogëlo Identin"},"smiley":{"options":"Opsionet e Ikonave","title":"Vendos Ikonë","toolbar":"Ikona"},"justify":{"block":"Zgjero","center":"Qendër","left":"Rreshto majtas","right":"Rreshto Djathtas"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Sipas ID-së së Elementit","advanced":"Të përparuara","advisoryContentType":"Lloji i Përmbajtjes Këshillimore","advisoryTitle":"Titull","anchor":{"toolbar":"Spirancë","menu":"Redakto Spirancën","title":"Anchor Properties","name":"Emri i Spirancës","errorName":"Ju lutemi shkruani emrin e spirancës","remove":"Largo Spirancën"},"anchorId":"Sipas ID-së së Elementit","anchorName":"Sipas Emrit të Spirancës","charset":"Seti i Karaktereve të Burimeve të Nëdlidhura","cssClasses":"Klasa stili CSS","emailAddress":"Posta Elektronike","emailBody":"Trupi i Porosisë","emailSubject":"Titulli i Porosisë","id":"Id","info":"Informacione të Nyjes","langCode":"Kod gjuhe","langDir":"Drejtim teksti","langDirLTR":"Nga e majta në të djathë (LTR)","langDirRTL":"Nga e djathta në të majtë (RTL)","menu":"Redakto Nyjen","name":"Emër","noAnchors":"(Nuk ka asnjë spirancë në dokument)","noEmail":"Ju lutemi shkruani postën elektronike","noUrl":"Ju lutemi shkruani URL-në e nyjes","other":"<tjetër>","popupDependent":"E Varur (Netscape)","popupFeatures":"Karakteristikat e Dritares së Dialogut","popupFullScreen":"Ekran i Plotë (IE)","popupLeft":"Pozita Majtas","popupLocationBar":"Shiriti i Lokacionit","popupMenuBar":"Shiriti i Menysë","popupResizable":"I ndryshueshëm","popupScrollBars":"Scroll Bars","popupStatusBar":"Shiriti i Statutit","popupToolbar":"Shiriti i Mejteve","popupTop":"Top Pozita","rel":"Marrëdhëniet","selectAnchor":"Përzgjidh një Spirancë","styles":"Stil","tabIndex":"Tab Index","target":"Objektivi","targetFrame":"<frame>","targetFrameName":"Emri i Kornizës së Synuar","targetPopup":"<popup window>","targetPopupName":"Emri i Dritares së Dialogut","title":"Nyja","toAnchor":"Lidhu me spirancën në tekst","toEmail":"Posta Elektronike","toUrl":"URL","toolbar":"Nyja","type":"Lloji i Nyjes","unlink":"Largo Nyjen","upload":"Ngarko"},"list":{"bulletedlist":"Vendos/Largo Listën me Pika","numberedlist":"Vendos/Largo Listën me Numra"},"liststyle":{"armenian":"Numërim armenian","bulletedTitle":"Karakteristikat e Listës me Pulla","circle":"Rreth","decimal":"Decimal (1, 2, 3, etj.)","decimalLeadingZero":"Decimal me zerro udhëheqëse (01, 02, 03, etj.)","disc":"Disk","georgian":"Numërim gjeorgjian (an, ban, gan, etj.)","lowerAlpha":"Të vogla alfa (a, b, c, d, e, etj.)","lowerGreek":"Të vogla greke (alpha, beta, gamma, etj.)","lowerRoman":"Të vogla romake (i, ii, iii, iv, v, etj.)","none":"Asnjë","notset":"<e pazgjedhur>","numberedTitle":"Karakteristikat e Listës me Numra","square":"Katror","start":"Fillimi","type":"LLoji","upperAlpha":"Të mëdha alfa (A, B, C, D, E, etj.)","upperRoman":"Të mëdha romake (I, II, III, IV, V, etj.)","validateStartNumber":"Numri i fillimit të listës duhet të është numër i plotë."},"magicline":{"title":"Vendos paragraf këtu"},"maximize":{"maximize":"Zmadho","minimize":"Zvogëlo"},"newpage":{"toolbar":"Faqe e Re"},"pagebreak":{"alt":"Thyerja e Faqes","toolbar":"Vendos Thyerje Faqeje për Shtyp"},"pastetext":{"button":"Hidhe si tekst të thjeshtë","title":"Hidhe si Tekst të Thjeshtë"},"pastefromword":{"confirmCleanup":"Teksti që dëshironi të e hidhni siç duket është kopjuar nga Word-i. Dëshironi të e pastroni para se të e hidhni?","error":"Nuk ishte e mundur të fshiheshin të dhënat e hedhura për shkak të një gabimi të brendshëm","title":"Hidhe nga Word-i","toolbar":"Hidhe nga Word-i"},"preview":{"preview":"Parashiko"},"print":{"toolbar":"Shtype"},"removeformat":{"toolbar":"Largo Formatin"},"save":{"toolbar":"Ruaje"},"selectall":{"toolbar":"Përzgjidh të Gjitha"},"showblocks":{"toolbar":"Shfaq Blloqet"},"sourcearea":{"toolbar":"Burimi"},"specialchar":{"options":"Mundësitë për Karaktere Speciale","title":"Përzgjidh Karakter Special","toolbar":"Vendos Karakter Special"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Stil","panelTitle":"Stilet e Formatimit","panelTitle1":"Stilet e Bllokut","panelTitle2":"Stili i Brendshëm","panelTitle3":"Stilet e Objektit"},"table":{"border":"Madhësia e kornizave","caption":"Titull","cell":{"menu":"Qeli","insertBefore":"Shto Qeli Para","insertAfter":"Shto Qeli Prapa","deleteCell":"Gris Qelitë","merge":"Bashko Qelitë","mergeRight":"Bashko Djathtas","mergeDown":"Bashko Poshtë","splitHorizontal":"Ndaj Qelinë Horizontalisht","splitVertical":"Ndaj Qelinë Vertikalisht","title":"Rekuizitat e Qelisë","cellType":"Lloji i Qelisë","rowSpan":"Bashko Rreshtat","colSpan":"Bashko Kolonat","wordWrap":"Fund i Fjalës","hAlign":"Bashkimi Horizontal","vAlign":"Bashkimi Vertikal","alignBaseline":"Baza","bgColor":"Ngjyra e Prapavijës","borderColor":"Ngjyra e Kornizave","data":"Të dhënat","header":"Koka","yes":"Po","no":"Jo","invalidWidth":"Gjerësia e qelisë duhet të jetë numër.","invalidHeight":"Lartësia e qelisë duhet të jetë numër.","invalidRowSpan":"Hapësira e rreshtave duhet të jetë numër i plotë.","invalidColSpan":"Hapësira e kolonave duhet të jetë numër i plotë.","chooseColor":"Përzgjidh"},"cellPad":"Mbushja e qelisë","cellSpace":"Hapësira e qelisë","column":{"menu":"Kolona","insertBefore":"Vendos Kolonë Para","insertAfter":"Vendos Kolonë Pas","deleteColumn":"Gris Kolonat"},"columns":"Kolonat","deleteTable":"Gris Tabelën","headers":"Kokat","headersBoth":"Së bashku","headersColumn":"Kolona e parë","headersNone":"Asnjë","headersRow":"Rreshti i Parë","invalidBorder":"Madhësia e kufinjve duhet të jetë numër.","invalidCellPadding":"Mbushja e qelisë duhet të jetë numër pozitiv.","invalidCellSpacing":"Hapësira e qelisë duhet të jetë numër pozitiv.","invalidCols":"Numri i kolonave duhet të jetë numër më i madh se 0.","invalidHeight":"Lartësia e tabelës duhet të jetë numër.","invalidRows":"Numri i rreshtave duhet të jetë numër më i madh se 0.","invalidWidth":"Gjerësia e tabelës duhet të jetë numër.","menu":"Karakteristikat e Tabelës","row":{"menu":"Rreshti","insertBefore":"Shto Rresht Para","insertAfter":"Shto Rresht Prapa","deleteRow":"Gris Rreshtat"},"rows":"Rreshtat","summary":"Përmbledhje","title":"Karakteristikat e Tabelës","toolbar":"Tabela","widthPc":"përqind","widthPx":"piksell","widthUnit":"njësia e gjerësisë"},"undo":{"redo":"Ribëje","undo":"Rizhbëje"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/sr-latn.js b/wqflask/wqflask/static/packages/ckeditor/lang/sr-latn.js
deleted file mode 100644
index c0dcc320..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/sr-latn.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['sr-latn']={"editor":"Bogati ureÄ‘ivaÄ teksta","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Pretraži server","url":"URL","protocol":"Protokol","upload":"PoÅ¡alji","uploadSubmit":"PoÅ¡alji na server","image":"Slika","flash":"FleÅ¡","form":"Forma","checkbox":"Polje za potvrdu","radio":"Radio-dugme","textField":"Tekstualno polje","textarea":"Zona teksta","hiddenField":"Skriveno polje","button":"Dugme","select":"Izborno polje","imageButton":"Dugme sa slikom","notSet":"<nije postavljeno>","id":"Id","name":"Naziv","langDir":"Smer jezika","langDirLtr":"S leva na desno (LTR)","langDirRtl":"S desna na levo (RTL)","langCode":"Kôd jezika","longDescr":"Pun opis URL","cssClass":"Stylesheet klase","advisoryTitle":"Advisory naslov","cssStyle":"Stil","ok":"OK","cancel":"Otkaži","close":"Zatvori","preview":"Izgled stranice","resize":"Resize","generalTab":"OpÅ¡te","advancedTab":"Napredni tagovi","validateNumberFailed":"Ova vrednost nije broj.","confirmNewPage":"NesaÄuvane promene ovog sadržaja će biti izgubljene. Jeste li sigurni da želita da uÄitate novu stranu?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Opcije","target":"Meta","targetNew":"Novi prozor (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Isti prozor (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"S leva na desno (LTR)","langDirRTL":"S desna na levo (RTL)","styles":"Stil","cssClasses":"Stylesheet klase","width":"Å irina","height":"Visina","align":"Ravnanje","alignLeft":"Levo","alignRight":"Desno","alignCenter":"Sredina","alignJustify":"Obostrano ravnanje","alignTop":"Vrh","alignMiddle":"Sredina","alignBottom":"Dole","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Visina mora biti broj.","invalidWidth":"Å irina mora biti broj.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Podebljano","italic":"Kurziv","strike":"Precrtano","subscript":"Indeks","superscript":"Stepen","underline":"PodvuÄeno"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Kopiraj","copyError":"Sigurnosna podeÅ¡avanja VaÅ¡eg pretraživaÄa ne dozvoljavaju operacije automatskog kopiranja teksta. Molimo Vas da koristite preÄicu sa tastature (Ctrl/Cmd+C).","cut":"Iseci","cutError":"Sigurnosna podeÅ¡avanja VaÅ¡eg pretraživaÄa ne dozvoljavaju operacije automatskog isecanja teksta. Molimo Vas da koristite preÄicu sa tastature (Ctrl/Cmd+X).","paste":"Zalepi","pasteArea":"Prostor za lepljenje","pasteMsg":"Molimo Vas da zalepite unutar donje povrine koristeći tastaturnu preÄicu (<STRONG>Ctrl/Cmd+V</STRONG>) i da pritisnete <STRONG>OK</STRONG>.","securityMsg":"Zbog sigurnosnih postavki vaÅ¡eg pregledaÄa, editor nije u mogućnosti da direktno pristupi podacima u klipbordu. Potrebno je da zalepite joÅ¡ jednom u ovom prozoru.","title":"Zalepi"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"Automatski","bgColorTitle":"Boja pozadine","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"ViÅ¡e boja...","panelTitle":"Colors","textColorTitle":"Boja teksta"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"Obrasci","emptyListMsg":"(Nema definisanih obrazaca)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Molimo Vas da odaberete obrazac koji ce biti primenjen na stranicu (trenutni sadržaj ce biti obrisan):","title":"Obrasci za sadržaj"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory naslov","cssClassInputLabel":"Stylesheet klase","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"S leva na desno (LTR)","langDirLabel":"Smer jezika","langDirRTLLabel":"S desna na levo (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Stil","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"Suzi alatnu traku","toolbarExpand":"ProÅ¡iri alatnu traku","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Alatne trake"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"Pretraga","findOptions":"Find Options","findWhat":"Pronadi:","matchCase":"Razlikuj mala i velika slova","matchCyclic":"Match cyclic","matchWord":"Uporedi cele reci","notFoundMsg":"Traženi tekst nije pronaÄ‘en.","replace":"Zamena","replaceAll":"Zameni sve","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Zameni sa:","title":"Find and Replace"},"fakeobjects":{"anchor":"Unesi/izmeni sidro","flash":"Flash Animation","hiddenfield":"Skriveno polje","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs dole","alignAbsMiddle":"Abs sredina","alignBaseline":"Bazno","alignTextTop":"Vrh teksta","bgcolor":"Boja pozadine","chkFull":"Allow Fullscreen","chkLoop":"Ponavljaj","chkMenu":"UkljuÄi fleÅ¡ meni","chkPlay":"Automatski start","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Osobine fleÅ¡a","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Skaliraj","scaleAll":"Prikaži sve","scaleFit":"Popuni povrÅ¡inu","scaleNoBorder":"Bez ivice","title":"Osobine fleÅ¡a","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"Unesite URL linka","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"VeliÄina fonta","voiceLabel":"Font Size","panelTitle":"VeliÄina fonta"},"label":"Font","panelTitle":"Font","voiceLabel":"Font"},"forms":{"button":{"title":"Osobine dugmeta","text":"Tekst (vrednost)","type":"Tip","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Osobine polja za potvrdu","radioTitle":"Osobine radio-dugmeta","value":"Vrednost","selected":"OznaÄeno"},"form":{"title":"Osobine forme","menu":"Osobine forme","action":"Akcija","method":"Metoda","encoding":"Encoding"},"hidden":{"title":"Osobine skrivenog polja","name":"Naziv","value":"Vrednost"},"select":{"title":"Osobine izbornog polja","selectInfo":"Info","opAvail":"Dostupne opcije","value":"Vrednost","size":"VeliÄina","lines":"linija","chkMulti":"Dozvoli viÅ¡estruku selekciju","opText":"Tekst","opValue":"Vrednost","btnAdd":"Dodaj","btnModify":"Izmeni","btnUp":"Gore","btnDown":"Dole","btnSetValue":"Podesi kao oznaÄenu vrednost","btnDelete":"ObriÅ¡i"},"textarea":{"title":"Osobine zone teksta","cols":"Broj kolona","rows":"Broj redova"},"textfield":{"title":"Osobine tekstualnog polja","name":"Naziv","value":"Vrednost","charWidth":"Å irina (karaktera)","maxChars":"Maksimalno karaktera","type":"Tip","typeText":"Tekst","typePass":"Lozinka","typeEmail":"Email","typeSearch":"Pretraži","typeTel":"Broj telefona","typeUrl":"URL"}},"format":{"label":"Format","panelTitle":"Format","tag_address":"Adresa","tag_div":"Normalno (DIV)","tag_h1":"Naslov 1","tag_h2":"Naslov 2","tag_h3":"Naslov 3","tag_h4":"Naslov 4","tag_h5":"Naslov 5","tag_h6":"Naslov 6","tag_p":"Normal","tag_pre":"Formatirano"},"horizontalrule":{"toolbar":"Unesi horizontalnu liniju"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"Unesite URL slike","alt":"Alternativni tekst","border":"Okvir","btnUpload":"PoÅ¡alji na server","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"Info slike","linkTab":"Link","lockRatio":"ZakljuÄaj odnos","menu":"Osobine slika","resetSize":"Resetuj veliÄinu","title":"Osobine slika","titleButton":"Osobine dugmeta sa slikom","upload":"PoÅ¡alji","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"Uvećaj levu marginu","outdent":"Smanji levu marginu"},"smiley":{"options":"Smiley Options","title":"Unesi smajlija","toolbar":"Smajli"},"justify":{"block":"Obostrano ravnanje","center":"Centriran tekst","left":"Levo ravnanje","right":"Desno ravnanje"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"Pristupni taster","advanced":"Napredni tagovi","advisoryContentType":"Advisory vrsta sadržaja","advisoryTitle":"Advisory naslov","anchor":{"toolbar":"Unesi/izmeni sidro","menu":"Osobine sidra","title":"Osobine sidra","name":"Naziv sidra","errorName":"Unesite naziv sidra","remove":"Ukloni sidro"},"anchorId":"Po Id-u elementa","anchorName":"Po nazivu sidra","charset":"Linked Resource Charset","cssClasses":"Stylesheet klase","emailAddress":"E-Mail adresa","emailBody":"Sadržaj poruke","emailSubject":"Naslov","id":"Id","info":"Link Info","langCode":"Smer jezika","langDir":"Smer jezika","langDirLTR":"S leva na desno (LTR)","langDirRTL":"S desna na levo (RTL)","menu":"Izmeni link","name":"Naziv","noAnchors":"(Nema dostupnih sidra)","noEmail":"Otkucajte adresu elektronske pote","noUrl":"Unesite URL linka","other":"<оÑтало>","popupDependent":"Zavisno (Netscape)","popupFeatures":"Mogućnosti popup prozora","popupFullScreen":"Prikaz preko celog ekrana (IE)","popupLeft":"Od leve ivice ekrana (px)","popupLocationBar":"Lokacija","popupMenuBar":"Kontekstni meni","popupResizable":"Promenljive veliÄine","popupScrollBars":"Scroll bar","popupStatusBar":"Statusna linija","popupToolbar":"Toolbar","popupTop":"Od vrha ekrana (px)","rel":"Odnos","selectAnchor":"Odaberi sidro","styles":"Stil","tabIndex":"Tab indeks","target":"Meta","targetFrame":"<okvir>","targetFrameName":"Naziv odrediÅ¡nog frejma","targetPopup":"<popup prozor>","targetPopupName":"Naziv popup prozora","title":"Link","toAnchor":"Sidro na ovoj stranici","toEmail":"E-Mail","toUrl":"URL","toolbar":"Unesi/izmeni link","type":"Vrsta linka","unlink":"Ukloni link","upload":"PoÅ¡alji"},"list":{"bulletedlist":"Nenabrojiva lista","numberedlist":"Nabrojiva lista"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"Nova stranica"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Zalepi kao Äist tekst","title":"Zalepi kao Äist tekst"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Zalepi iz Worda","toolbar":"Zalepi iz Worda"},"preview":{"preview":"Izgled stranice"},"print":{"toolbar":"Å tampa"},"removeformat":{"toolbar":"Ukloni formatiranje"},"save":{"toolbar":"SaÄuvaj"},"selectall":{"toolbar":"OznaÄi sve"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"Kôd"},"specialchar":{"options":"Special Character Options","title":"Odaberite specijalni karakter","toolbar":"Unesi specijalni karakter"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Stil","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"VeliÄina okvira","caption":"Naslov tabele","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"ObriÅ¡i ćelije","merge":"Spoj celije","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Razmak ćelija","cellSpace":"Ćelijski prostor","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"ObriÅ¡i kolone"},"columns":"Kolona","deleteTable":"IzbriÅ¡i tabelu","headers":"Zaglavlja","headersBoth":"Oba","headersColumn":"Prva kolona","headersNone":"None","headersRow":"Prvi red","invalidBorder":"VeliÄina okvira mora biti broj.","invalidCellPadding":"Padding polja mora biti pozitivan broj.","invalidCellSpacing":"Razmak izmeÄ‘u ćelija mora biti pozitivan broj.","invalidCols":"Broj kolona mora biti broj veći od 0.","invalidHeight":"Visina tabele mora biti broj.","invalidRows":"Broj redova mora biti veći od 0.","invalidWidth":"Å irina tabele mora biti broj.","menu":"Osobine tabele","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"ObriÅ¡i redove"},"rows":"Redova","summary":"Sažetak","title":"Osobine tabele","toolbar":"Tabela","widthPc":"procenata","widthPx":"piksela","widthUnit":"jedinica za Å¡irinu"},"undo":{"redo":"Ponovi akciju","undo":"Poni�ti akciju"},"wsc":{"btnIgnore":"IgnoriÅ¡i","btnIgnoreAll":"IgnoriÅ¡i sve","btnReplace":"Zameni","btnReplaceAll":"Zameni sve","btnUndo":"Vrati akciju","changeTo":"Izmeni","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Provera spelovanja nije instalirana. Da li želite da je skinete sa Interneta?","manyChanges":"Provera spelovanja zavrÅ¡ena: %1 reÄ(i) je izmenjeno","noChanges":"Provera spelovanja zavrÅ¡ena: Nije izmenjena nijedna rec","noMispell":"Provera spelovanja zavrÅ¡ena: greÅ¡ke nisu pronadene","noSuggestions":"- Bez sugestija -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Nije u reÄniku","oneChange":"Provera spelovanja zavrÅ¡ena: Izmenjena je jedna reÄ","progress":"Provera spelovanja u toku...","title":"Spell Check","toolbar":"Proveri spelovanje"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/sr.js b/wqflask/wqflask/static/packages/ckeditor/lang/sr.js
deleted file mode 100644
index 0161c16d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/sr.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['sr']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Press ALT 0 for help","browseServer":"Претражи Ñервер","url":"УРЛ","protocol":"Протокол","upload":"Пошаљи","uploadSubmit":"Пошаљи на Ñервер","image":"Слика","flash":"Флеш елемент","form":"Форма","checkbox":"Поље за потврду","radio":"Радио-дугме","textField":"ТекÑтуално поље","textarea":"Зона текÑта","hiddenField":"Скривено поље","button":"Дугме","select":"Изборно поље","imageButton":"Дугме Ñа Ñликом","notSet":"<није поÑтављено>","id":"Ид","name":"Ðазив","langDir":"Смер језика","langDirLtr":"С лева на деÑно (LTR)","langDirRtl":"С деÑна на лево (RTL)","langCode":"Kôд језика","longDescr":"Пун Ð¾Ð¿Ð¸Ñ Ð£Ð Ð›","cssClass":"Stylesheet клаÑе","advisoryTitle":"Advisory наÑлов","cssStyle":"Стил","ok":"OK","cancel":"Oткажи","close":"Затвори","preview":"Изглед Ñтранице","resize":"Resize","generalTab":"Опште","advancedTab":"Ðапредни тагови","validateNumberFailed":"Ова вредноÑÑ‚ није цигра.","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Опције","target":"MeÑ‚a","targetNew":"New Window (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"Same Window (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"С лева на деÑно (LTR)","langDirRTL":"С деÑна на лево (RTL)","styles":"Стил","cssClasses":"Stylesheet клаÑе","width":"Ширина","height":"ВиÑина","align":"Равнање","alignLeft":"Лево","alignRight":"ДеÑно","alignCenter":"Средина","alignJustify":"ОбоÑтрано равнање","alignTop":"Врх","alignMiddle":"Средина","alignBottom":"Доле","alignNone":"None","invalidValue":"Invalid value.","invalidHeight":"Height must be a number.","invalidWidth":"Width must be a number.","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Подебљано","italic":"Курзив","strike":"Прецртано","subscript":"ИндекÑ","superscript":"Степен","underline":"Подвучено"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"Копирај","copyError":"СигурноÑна подешавања Вашег претраживача не дозвољавају операције аутоматÑког копирања текÑта. Молимо Ð’Ð°Ñ Ð´Ð° кориÑтите пречицу Ñа таÑтатуре (Ctrl/Cmd+C).","cut":"ИÑеци","cutError":"СигурноÑна подешавања Вашег претраживача не дозвољавају операције аутоматÑког иÑецања текÑта. Молимо Ð’Ð°Ñ Ð´Ð° кориÑтите пречицу Ñа таÑтатуре (Ctrl/Cmd+X).","paste":"Залепи","pasteArea":"Залепи зону","pasteMsg":"Молимо Ð’Ð°Ñ Ð´Ð° залепите унутар доње површине кориÑтећи таÑтатурну пречицу (<STRONG>Ctrl/Cmd+V</STRONG>) и да притиÑнете <STRONG>OK</STRONG>.","securityMsg":"Због ÑигурноÑних подешавања претраживача, едитор не може да приÑтупи оÑтаву. Требате да га поново залепите у овом прозору.","title":"Залепи"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"ÐутоматÑки","bgColorTitle":"Боја позадине","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"Више боја...","panelTitle":"Colors","textColorTitle":"Боја текÑта"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"ОбраÑци","emptyListMsg":"(Ðема дефиниÑаних образаца)","insertOption":"Replace actual contents","options":"Template Options","selectPromptMsg":"Молимо Ð’Ð°Ñ Ð´Ð° одаберете образац који ће бити примењен на Ñтраницу (тренутни Ñадржај ће бити обриÑан):","title":"ОбраÑци за Ñадржај"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Advisory Title","cssClassInputLabel":"Stylesheet Classes","edit":"Edit Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Left to Right (LTR)","langDirLabel":"Language Direction","langDirRTLLabel":"Right to Left (RTL)","languageCodeInputLabel":" Language Code","remove":"Remove Div","styleSelectLabel":"Style","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"Склопи алатну траку","toolbarExpand":"Прошири алатну траку","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Едитор алатне траке"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"Претрага","findOptions":"Find Options","findWhat":"Пронађи:","matchCase":"Разликуј велика и мала Ñлова","matchCyclic":"Match cyclic","matchWord":"Упореди целе речи","notFoundMsg":"Тражени текÑÑ‚ није пронађен.","replace":"Замена","replaceAll":"Замени Ñве","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"Замени Ñа:","title":"Find and Replace"},"fakeobjects":{"anchor":"Anchor","flash":"Flash Animation","hiddenfield":"Hidden Field","iframe":"IFrame","unknown":"Unknown Object"},"flash":{"access":"Script Access","accessAlways":"Always","accessNever":"Never","accessSameDomain":"Same domain","alignAbsBottom":"Abs доле","alignAbsMiddle":"Abs Ñредина","alignBaseline":"Базно","alignTextTop":"Врх текÑта","bgcolor":"Боја позадине","chkFull":"Allow Fullscreen","chkLoop":"Понављај","chkMenu":"Укључи флеш мени","chkPlay":"ÐутоматÑки Ñтарт","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"ОÑобине Флеша","propertiesTab":"Properties","quality":"Quality","qualityAutoHigh":"Auto High","qualityAutoLow":"Auto Low","qualityBest":"Best","qualityHigh":"High","qualityLow":"Low","qualityMedium":"Medium","scale":"Скалирај","scaleAll":"Прикажи Ñве","scaleFit":"Попуни површину","scaleNoBorder":"Без ивице","title":"ОÑобине флеша","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"УнеÑите УРЛ линка","validateVSpace":"VSpace must be a number.","windowMode":"Window mode","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Window"},"font":{"fontSize":{"label":"Величина фонта","voiceLabel":"Font Size","panelTitle":"Величина фонта"},"label":"Фонт","panelTitle":"Фонт","voiceLabel":"Фонт"},"forms":{"button":{"title":"ОÑобине дугмета","text":"ТекÑÑ‚ (вредноÑÑ‚)","type":"Tип","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"ОÑобине поља за потврду","radioTitle":"ОÑобине радио-дугмета","value":"ВредноÑÑ‚","selected":"Означено"},"form":{"title":"ОÑобине форме","menu":"ОÑобине форме","action":"Aкција","method":"Mетода","encoding":"Encoding"},"hidden":{"title":"ОÑобине Ñкривеног поља","name":"Ðазив","value":"ВредноÑÑ‚"},"select":{"title":"ОÑобине изборног поља","selectInfo":"Инфо","opAvail":"ДоÑтупне опције","value":"ВредноÑÑ‚","size":"Величина","lines":"линија","chkMulti":"Дозволи вишеÑтруку Ñелекцију","opText":"ТекÑÑ‚","opValue":"ВредноÑÑ‚","btnAdd":"Додај","btnModify":"Измени","btnUp":"Горе","btnDown":"Доле","btnSetValue":"ПодеÑи као означену вредноÑÑ‚","btnDelete":"Обриши"},"textarea":{"title":"ОÑобине зоне текÑта","cols":"Број колона","rows":"Број редова"},"textfield":{"title":"ОÑобине текÑтуалног поља","name":"Ðазив","value":"ВредноÑÑ‚","charWidth":"Ширина (карактера)","maxChars":"МакÑимално карактера","type":"Тип","typeText":"ТекÑÑ‚","typePass":"Лозинка","typeEmail":"Е-пошта","typeSearch":"Претрага","typeTel":"Број телефона","typeUrl":"УРЛ"}},"format":{"label":"Формат","panelTitle":"Формат","tag_address":"Adresa","tag_div":"Ðормално (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatirano"},"horizontalrule":{"toolbar":"УнеÑи хоризонталну линију"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"УнеÑите УРЛ Ñлике","alt":"Ðлтернативни текÑÑ‚","border":"Оквир","btnUpload":"Пошаљи на Ñервер","button2Img":"Да ли желите да промените одабрану Ñлику дугмета као једноÑтавну Ñлику?","hSpace":"HSpace","img2Button":"Да ли желите да промените одабрану Ñлику у Ñлику дугмета?","infoTab":"Инфо Ñлике","linkTab":"Линк","lockRatio":"Закључај одноÑ","menu":"ОÑобине Ñлика","resetSize":"РеÑетуј величину","title":"ОÑобине Ñлика","titleButton":"ОÑобине дугмета Ñа Ñликом","upload":"Пошаљи","urlMissing":"ÐедоÑтаје УРЛ Ñлике.","vSpace":"VSpace","validateBorder":"Ивица треба да буде цифра.","validateHSpace":"HSpace треба да буде цифра.","validateVSpace":"VSpace треба да буде цифра."},"indent":{"indent":"Увећај леву маргину","outdent":"Смањи леву маргину"},"smiley":{"options":"Smiley Options","title":"УнеÑи Ñмајлија","toolbar":"Смајли"},"justify":{"block":"ОбоÑтрано равнање","center":"Центриран текÑÑ‚","left":"Лево равнање","right":"ДеÑно равнање"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"ПриÑтупни таÑтер","advanced":"Ðапредни тагови","advisoryContentType":"Advisory врÑта Ñадржаја","advisoryTitle":"Advisory наÑлов","anchor":{"toolbar":"УнеÑи/измени Ñидро","menu":"ОÑобине Ñидра","title":"ОÑобине Ñидра","name":"Име Ñидра","errorName":"Молимо Ð’Ð°Ñ Ð´Ð° унеÑете име Ñидра","remove":"Remove Anchor"},"anchorId":"Пo Ид-jу елемента","anchorName":"По називу Ñидра","charset":"Linked Resource Charset","cssClasses":"Stylesheet клаÑе","emailAddress":"ÐдреÑа електронÑке поште","emailBody":"Садржај поруке","emailSubject":"ÐаÑлов","id":"Ид","info":"Линк инфо","langCode":"Смер језика","langDir":"Смер језика","langDirLTR":"С лева на деÑно (LTR)","langDirRTL":"С деÑна на лево (RTL)","menu":"Промени линк","name":"Ðазив","noAnchors":"(Ðема доÑтупних Ñидра)","noEmail":"Откуцајте адреÑу електронÑке поште","noUrl":"УнеÑите УРЛ линка","other":"<друго>","popupDependent":"ЗавиÑно (Netscape)","popupFeatures":"МогућноÑти иÑкачућег прозора","popupFullScreen":"Приказ преко целог екрана (ИE)","popupLeft":"Од леве ивице екрана (пикÑела)","popupLocationBar":"Локација","popupMenuBar":"КонтекÑтни мени","popupResizable":"Величина Ñе мења","popupScrollBars":"Скрол бар","popupStatusBar":"СтатуÑна линија","popupToolbar":"Toolbar","popupTop":"Од врха екрана (пикÑела)","rel":"ОдноÑ","selectAnchor":"Одабери Ñидро","styles":"Стил","tabIndex":"Таб индекÑ","target":"MeÑ‚a","targetFrame":"<оквир>","targetFrameName":"Ðазив одредишног фрејма","targetPopup":"<иÑкачући прозор>","targetPopupName":"Ðазив иÑкачућег прозора","title":"Линк","toAnchor":"Сидро на овој Ñтраници","toEmail":"EлектронÑка пошта","toUrl":"УРЛ","toolbar":"УнеÑи/измени линк","type":"Ð’Ñ€Ñта линка","unlink":"Уклони линк","upload":"Пошаљи"},"list":{"bulletedlist":"Ðенабројива лиÑта","numberedlist":"Ðабројиву лиÑту"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"Maximize","minimize":"Minimize"},"newpage":{"toolbar":"Ðова Ñтраница"},"pagebreak":{"alt":"Page Break","toolbar":"Insert Page Break for Printing"},"pastetext":{"button":"Залепи као чиÑÑ‚ текÑÑ‚","title":"Залепи као чиÑÑ‚ текÑÑ‚"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Залепи из Worda","toolbar":"Залепи из Worda"},"preview":{"preview":"Изглед Ñтранице"},"print":{"toolbar":"Штампа"},"removeformat":{"toolbar":"Уклони форматирање"},"save":{"toolbar":"Сачувај"},"selectall":{"toolbar":"Означи Ñве"},"showblocks":{"toolbar":"Show Blocks"},"sourcearea":{"toolbar":"Kôд"},"specialchar":{"options":"Опције Ñпецијалног карактера","title":"Одаберите Ñпецијални карактер","toolbar":"УнеÑи Ñпецијални карактер"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Стил","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"Величина оквира","caption":"ÐаÑлов табеле","cell":{"menu":"Cell","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"Обриши ћелије","merge":"Спој ћелије","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"Размак ћелија","cellSpace":"ЋелијÑки проÑтор","column":{"menu":"Column","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Обриши колоне"},"columns":"Kолона","deleteTable":"Обриши таблу","headers":"Поглавља","headersBoth":"Оба","headersColumn":"Прва колона","headersNone":"None","headersRow":"Први ред","invalidBorder":"Величина ивице треба да буде цифра.","invalidCellPadding":"Пуњење ћелије треба да буде позитивна цифра.","invalidCellSpacing":"Размак ћелије треба да буде позитивна цифра.","invalidCols":"Број колона треба да буде цифра већа од 0.","invalidHeight":"ВиÑина табеле треба да буде цифра.","invalidRows":"Број реда треба да буде цифра већа од 0.","invalidWidth":"Ширина табеле треба да буде цифра.","menu":"ОÑобине табеле","row":{"menu":"Row","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Обриши редове"},"rows":"Редова","summary":"Резиме","title":"ОÑобине табеле","toolbar":"Табела","widthPc":"процената","widthPx":"пикÑела","widthUnit":"јединица ширине"},"undo":{"redo":"Понови акцију","undo":"Поништи акцију"},"wsc":{"btnIgnore":"Игнориши","btnIgnoreAll":"Игнориши Ñве","btnReplace":"Замени","btnReplaceAll":"Замени Ñве","btnUndo":"Врати акцију","changeTo":"Измени","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Провера Ñпеловања није инÑталирана. Да ли желите да је Ñкинете Ñа Интернета?","manyChanges":"Провера Ñпеловања завршена: %1 реч(и) је измењено","noChanges":"Провера Ñпеловања завршена: Ðије измењена ниједна реч","noMispell":"Провера Ñпеловања завршена: грешке ниÑу пронађене","noSuggestions":"- Без ÑугеÑтија -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Ðије у речнику","oneChange":"Провера Ñпеловања завршена: Измењена је једна реч","progress":"Провера Ñпеловања у току...","title":"Spell Check","toolbar":"Провери Ñпеловање"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/sv.js b/wqflask/wqflask/static/packages/ckeditor/lang/sv.js
deleted file mode 100644
index cf6c0d59..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/sv.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['sv']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Tryck ALT 0 för hjälp","browseServer":"Bläddra på server","url":"URL","protocol":"Protokoll","upload":"Ladda upp","uploadSubmit":"Skicka till server","image":"Bild","flash":"Flash","form":"Formulär","checkbox":"Kryssruta","radio":"Alternativknapp","textField":"Textfält","textarea":"Textruta","hiddenField":"Dolt fält","button":"Knapp","select":"Flervalslista","imageButton":"Bildknapp","notSet":"<ej angivet>","id":"Id","name":"Namn","langDir":"Språkriktning","langDirLtr":"Vänster till Höger (VTH)","langDirRtl":"Höger till Vänster (HTV)","langCode":"Språkkod","longDescr":"URL-beskrivning","cssClass":"Stilmall","advisoryTitle":"Titel","cssStyle":"Stilmall","ok":"OK","cancel":"Avbryt","close":"Stäng","preview":"Förhandsgranska","resize":"Dra för att ändra storlek","generalTab":"Allmänt","advancedTab":"Avancerad","validateNumberFailed":"Värdet är inte ett nummer.","confirmNewPage":"Alla ändringar i innehållet kommer att förloras. Är du säker på att du vill ladda en ny sida?","confirmCancel":"Några av alternativen har ändrats. Är du säker på att du vill stänga dialogrutan?","options":"Alternativ","target":"Mål","targetNew":"Nytt fönster (_blank)","targetTop":"Översta fönstret (_top)","targetSelf":"Samma fönster (_self)","targetParent":"Föregående fönster (_parent)","langDirLTR":"Vänster till höger (LTR)","langDirRTL":"Höger till vänster (RTL)","styles":"Stil","cssClasses":"Stilmallar","width":"Bredd","height":"Höjd","align":"Justering","alignLeft":"Vänster","alignRight":"Höger","alignCenter":"Centrerad","alignJustify":"Justera till marginaler","alignTop":"Överkant","alignMiddle":"Mitten","alignBottom":"Nederkant","alignNone":"Ingen","invalidValue":"Felaktigt värde.","invalidHeight":"Höjd måste vara ett nummer.","invalidWidth":"Bredd måste vara ett nummer.","invalidCssLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan CSS-mätenheter (px, %, in, cm, mm, em, ex, pt, eller pc).","invalidHtmlLength":"Värdet för fältet \"%1\" måste vara ett positivt nummer med eller utan godkända HTML-mätenheter (px eller %).","invalidInlineStyle":"Det angivna värdet för style måste innehålla en eller flera tupler separerade med semikolon i följande format: \"name : value\"","cssLengthTooltip":"Ange ett nummer i pixlar eller ett nummer men godkänd CSS-mätenhet (px, %, in, cm, mm, em, ex, pt, eller pc).","unavailable":"%1<span class=\"cke_accessibility\">, Ej tillgänglig</span>"},"about":{"copy":"Copyright &copy; $1. Alla rättigheter reserverade.","dlgTitle":"Om CKEditor","help":"Se $1 för hjälp.","moreInfo":"För information av licensiering besök vår hemsida:","title":"Om CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"Fet","italic":"Kursiv","strike":"Genomstruken","subscript":"Nedsänkta tecken","superscript":"Upphöjda tecken","underline":"Understruken"},"bidi":{"ltr":"Text riktning från vänster till höger","rtl":"Text riktning från höger till vänster"},"blockquote":{"toolbar":"Blockcitat"},"clipboard":{"copy":"Kopiera","copyError":"Säkerhetsinställningar i Er webbläsare tillåter inte åtgärden kopiera. Använd (Ctrl/Cmd+C) istället.","cut":"Klipp ut","cutError":"Säkerhetsinställningar i Er webbläsare tillåter inte åtgärden klipp ut. Använd (Ctrl/Cmd+X) istället.","paste":"Klistra in","pasteArea":"Paste Area","pasteMsg":"Var god och klistra in Er text i rutan nedan genom att använda (<strong>Ctrl/Cmd+V</strong>) klicka sen på OK.","securityMsg":"På grund av din webbläsares säkerhetsinställningar kan verktyget inte få åtkomst till urklippsdatan. Var god och använd detta fönster istället.","title":"Klistra in"},"button":{"selectedLabel":"%1 (Vald)"},"colorbutton":{"auto":"Automatisk","bgColorTitle":"Bakgrundsfärg","colors":{"000":"Svart","800000":"Rödbrun","8B4513":"Mörkbrun","2F4F4F":"Skiffergrå","008080":"Kricka","000080":"Marinblå","4B0082":"Indigo","696969":"Mörkgrå","B22222":"Tegelsten","A52A2A":"Brun","DAA520":"Mörk guld","006400":"Mörkgrön","40E0D0":"Turkos","0000CD":"Medium blå","800080":"Lila","808080":"Grå","F00":"Röd","FF8C00":"Mörkorange","FFD700":"Guld","008000":"Grön","0FF":"Turkos","00F":"Blå","EE82EE":"Violett","A9A9A9":"Matt grå","FFA07A":"Laxrosa","FFA500":"Orange","FFFF00":"Gul","00FF00":"Lime","AFEEEE":"Ljusturkos","ADD8E6":"Ljusblå","DDA0DD":"Plommon","D3D3D3":"Ljusgrå","FFF0F5":"Ljus lavendel","FAEBD7":"Antikvit","FFFFE0":"Ljusgul","F0FFF0":"Honungsdagg","F0FFFF":"Azurblå","F0F8FF":"Aliceblå","E6E6FA":"Lavendel","FFF":"Vit"},"more":"Fler färger...","panelTitle":"Färger","textColorTitle":"Textfärg"},"colordialog":{"clear":"Rensa","highlight":"Markera","options":"Färgalternativ","selected":"Vald färg","title":"Välj färg"},"templates":{"button":"Sidmallar","emptyListMsg":"(Ingen mall är vald)","insertOption":"Ersätt aktuellt innehåll","options":"Inställningar för mall","selectPromptMsg":"Var god välj en mall att använda med editorn<br>(allt nuvarande innehåll raderas):","title":"Sidmallar"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Rådgivande titel","cssClassInputLabel":"Stilmallar","edit":"Redigera Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"Vänster till höger (LTR)","langDirLabel":"Språkriktning","langDirRTLLabel":"Höger till vänster (RTL)","languageCodeInputLabel":" Språkkod","remove":"Ta bort Div","styleSelectLabel":"Stil","title":"Skapa Div container","toolbar":"Skapa Div container"},"toolbar":{"toolbarCollapse":"Dölj verktygsfält","toolbarExpand":"Visa verktygsfält","toolbarGroups":{"document":"Dokument","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"Redigera verktygsfält"},"elementspath":{"eleLabel":"Elementets sökväg","eleTitle":"%1 element"},"find":{"find":"Sök","findOptions":"Sökalternativ","findWhat":"Sök efter:","matchCase":"Skiftläge","matchCyclic":"Matcha cykliska","matchWord":"Inkludera hela ord","notFoundMsg":"Angiven text kunde ej hittas.","replace":"Ersätt","replaceAll":"Ersätt alla","replaceSuccessMsg":"%1 förekomst(er) ersatta.","replaceWith":"Ersätt med:","title":"Sök och ersätt"},"fakeobjects":{"anchor":"Ankare","flash":"Flashanimation","hiddenfield":"Gömt fält","iframe":"iFrame","unknown":"Okänt objekt"},"flash":{"access":"Script-tillgång","accessAlways":"Alltid","accessNever":"Aldrig","accessSameDomain":"Samma domän","alignAbsBottom":"Absolut nederkant","alignAbsMiddle":"Absolut centrering","alignBaseline":"Baslinje","alignTextTop":"Text överkant","bgcolor":"Bakgrundsfärg","chkFull":"Tillåt helskärm","chkLoop":"Upprepa/Loopa","chkMenu":"Aktivera Flashmeny","chkPlay":"Automatisk uppspelning","flashvars":"Variabler för Flash","hSpace":"Horis. marginal","properties":"Flashegenskaper","propertiesTab":"Egenskaper","quality":"Kvalitet","qualityAutoHigh":"Auto Hög","qualityAutoLow":"Auto Låg","qualityBest":"Bäst","qualityHigh":"Hög","qualityLow":"Låg","qualityMedium":"Medium","scale":"Skala","scaleAll":"Visa allt","scaleFit":"Exakt passning","scaleNoBorder":"Ingen ram","title":"Flashegenskaper","vSpace":"Vert. marginal","validateHSpace":"HSpace måste vara ett nummer.","validateSrc":"Var god ange länkens URL","validateVSpace":"VSpace måste vara ett nummer.","windowMode":"Fönsterläge","windowModeOpaque":"Opaque","windowModeTransparent":"Transparent","windowModeWindow":"Fönster"},"font":{"fontSize":{"label":"Storlek","voiceLabel":"Teckenstorlek","panelTitle":"Teckenstorlek"},"label":"Typsnitt","panelTitle":"Typsnitt","voiceLabel":"Typsnitt"},"forms":{"button":{"title":"Egenskaper för knapp","text":"Text (värde)","type":"Typ","typeBtn":"Knapp","typeSbm":"Skicka","typeRst":"Återställ"},"checkboxAndRadio":{"checkboxTitle":"Egenskaper för kryssruta","radioTitle":"Egenskaper för alternativknapp","value":"Värde","selected":"Vald"},"form":{"title":"Egenskaper för formulär","menu":"Egenskaper för formulär","action":"Funktion","method":"Metod","encoding":"Kodning"},"hidden":{"title":"Egenskaper för dolt fält","name":"Namn","value":"Värde"},"select":{"title":"Egenskaper för flervalslista","selectInfo":"Information","opAvail":"Befintliga val","value":"Värde","size":"Storlek","lines":"Linjer","chkMulti":"Tillåt flerval","opText":"Text","opValue":"Värde","btnAdd":"Lägg till","btnModify":"Redigera","btnUp":"Upp","btnDown":"Ner","btnSetValue":"Markera som valt värde","btnDelete":"Radera"},"textarea":{"title":"Egenskaper för textruta","cols":"Kolumner","rows":"Rader"},"textfield":{"title":"Egenskaper för textfält","name":"Namn","value":"Värde","charWidth":"Teckenbredd","maxChars":"Max antal tecken","type":"Typ","typeText":"Text","typePass":"Lösenord","typeEmail":"E-post","typeSearch":"Sök","typeTel":"Telefonnummer","typeUrl":"URL"}},"format":{"label":"Teckenformat","panelTitle":"Teckenformat","tag_address":"Adress","tag_div":"Normal (DIV)","tag_h1":"Rubrik 1","tag_h2":"Rubrik 2","tag_h3":"Rubrik 3","tag_h4":"Rubrik 4","tag_h5":"Rubrik 5","tag_h6":"Rubrik 6","tag_p":"Normal","tag_pre":"Formaterad"},"horizontalrule":{"toolbar":"Infoga horisontal linje"},"iframe":{"border":"Visa ramkant","noUrl":"Skriv in URL för iFrame","scrolling":"Aktivera rullningslister","title":"iFrame Egenskaper","toolbar":"iFrame"},"image":{"alertUrl":"Var god och ange bildens URL","alt":"Alternativ text","border":"Kant","btnUpload":"Skicka till server","button2Img":"Vill du omvandla den valda bildknappen på en enkel bild?","hSpace":"Horis. marginal","img2Button":"Vill du omvandla den valda bildknappen på en enkel bild?","infoTab":"Bildinformation","linkTab":"Länk","lockRatio":"Lås höjd/bredd förhållanden","menu":"Bildegenskaper","resetSize":"Återställ storlek","title":"Bildegenskaper","titleButton":"Egenskaper för bildknapp","upload":"Ladda upp","urlMissing":"Bildkällans URL saknas.","vSpace":"Vert. marginal","validateBorder":"Kantlinje måste vara ett heltal.","validateHSpace":"HSpace måste vara ett heltal.","validateVSpace":"VSpace måste vara ett heltal."},"indent":{"indent":"Öka indrag","outdent":"Minska indrag"},"smiley":{"options":"Smileyinställningar","title":"Infoga smiley","toolbar":"Smiley"},"justify":{"block":"Justera till marginaler","center":"Centrera","left":"Vänsterjustera","right":"Högerjustera"},"language":{"button":"Sätt språk","remove":"Ta bort språk"},"link":{"acccessKey":"Behörighetsnyckel","advanced":"Avancerad","advisoryContentType":"Innehållstyp","advisoryTitle":"Titel","anchor":{"toolbar":"Infoga/Redigera ankarlänk","menu":"Egenskaper för ankarlänk","title":"Egenskaper för ankarlänk","name":"Ankarnamn","errorName":"Var god ange ett ankarnamn","remove":"Radera ankare"},"anchorId":"Efter element-id","anchorName":"Efter ankarnamn","charset":"Teckenuppställning","cssClasses":"Stilmall","emailAddress":"E-postadress","emailBody":"Innehåll","emailSubject":"Ämne","id":"Id","info":"Länkinformation","langCode":"Språkkod","langDir":"Språkriktning","langDirLTR":"Vänster till höger (VTH)","langDirRTL":"Höger till vänster (HTV)","menu":"Redigera länk","name":"Namn","noAnchors":"(Inga ankare kunde hittas)","noEmail":"Var god ange e-postadress","noUrl":"Var god ange länkens URL","other":"<annan>","popupDependent":"Beroende (endast Netscape)","popupFeatures":"Popup-fönstrets egenskaper","popupFullScreen":"Helskärm (endast IE)","popupLeft":"Position från vänster","popupLocationBar":"Adressfält","popupMenuBar":"Menyfält","popupResizable":"Resizable","popupScrollBars":"Scrolllista","popupStatusBar":"Statusfält","popupToolbar":"Verktygsfält","popupTop":"Position från sidans topp","rel":"Förhållande","selectAnchor":"Välj ett ankare","styles":"Stilmall","tabIndex":"Tabindex","target":"Mål","targetFrame":"<ram>","targetFrameName":"Målets ramnamn","targetPopup":"<popup-fönster>","targetPopupName":"Popup-fönstrets namn","title":"Länk","toAnchor":"Länk till ankare i texten","toEmail":"E-post","toUrl":"URL","toolbar":"Infoga/Redigera länk","type":"Länktyp","unlink":"Radera länk","upload":"Ladda upp"},"list":{"bulletedlist":"Punktlista","numberedlist":"Numrerad lista"},"liststyle":{"armenian":"Armenisk numrering","bulletedTitle":"Egenskaper för punktlista","circle":"Cirkel","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal nolla (01, 02, 03, etc.)","disc":"Disk","georgian":"Georgisk numrering (an, ban, gan, etc.)","lowerAlpha":"Alpha gemener (a, b, c, d, e, etc.)","lowerGreek":"Grekiska gemener (alpha, beta, gamma, etc.)","lowerRoman":"Romerska gemener (i, ii, iii, iv, v, etc.)","none":"Ingen","notset":"<ej angiven>","numberedTitle":"Egenskaper för punktlista","square":"Fyrkant","start":"Start","type":"Typ","upperAlpha":"Alpha versaler (A, B, C, D, E, etc.)","upperRoman":"Romerska versaler (I, II, III, IV, V, etc.)","validateStartNumber":"Listans startnummer måste vara ett heltal."},"magicline":{"title":"Infoga paragraf här"},"maximize":{"maximize":"Maximera","minimize":"Minimera"},"newpage":{"toolbar":"Ny sida"},"pagebreak":{"alt":"Sidbrytning","toolbar":"Infoga sidbrytning för utskrift"},"pastetext":{"button":"Klistra in som vanlig text","title":"Klistra in som vanlig text"},"pastefromword":{"confirmCleanup":"Texten du vill klistra in verkar vara kopierad från Word. Vill du rensa den innan du klistrar in den?","error":"Det var inte möjligt att städa upp den inklistrade data på grund av ett internt fel","title":"Klistra in från Word","toolbar":"Klistra in från Word"},"preview":{"preview":"Förhandsgranska"},"print":{"toolbar":"Skriv ut"},"removeformat":{"toolbar":"Radera formatering"},"save":{"toolbar":"Spara"},"selectall":{"toolbar":"Markera allt"},"showblocks":{"toolbar":"Visa block"},"sourcearea":{"toolbar":"Källa"},"specialchar":{"options":"Alternativ för utökade tecken","title":"Välj utökat tecken","toolbar":"Klistra in utökat tecken"},"scayt":{"btn_about":"Om SCAYT","btn_dictionaries":"Ordlistor","btn_disable":"Inaktivera SCAYT","btn_enable":"Aktivera SCAYT","btn_langs":"Språk","btn_options":"Inställningar","text_title":""},"stylescombo":{"label":"Anpassad stil","panelTitle":"Formatmallar","panelTitle1":"Blockstil","panelTitle2":"Inbäddad stil","panelTitle3":"Objektets stil"},"table":{"border":"Kantstorlek","caption":"Rubrik","cell":{"menu":"Cell","insertBefore":"Lägg till cell före","insertAfter":"Lägg till cell efter","deleteCell":"Radera celler","merge":"Sammanfoga celler","mergeRight":"Sammanfoga höger","mergeDown":"Sammanfoga ner","splitHorizontal":"Dela cell horisontellt","splitVertical":"Dela cell vertikalt","title":"Egenskaper för cell","cellType":"Celltyp","rowSpan":"Rad spann","colSpan":"Kolumnen spann","wordWrap":"Radbrytning","hAlign":"Horisontell justering","vAlign":"Vertikal justering","alignBaseline":"Baslinje","bgColor":"Bakgrundsfärg","borderColor":"Ramfärg","data":"Data","header":"Rubrik","yes":"Ja","no":"Nej","invalidWidth":"Cellens bredd måste vara ett nummer.","invalidHeight":"Cellens höjd måste vara ett nummer.","invalidRowSpan":"Radutvidgning måste vara ett heltal.","invalidColSpan":"Kolumn måste vara ett heltal.","chooseColor":"Välj"},"cellPad":"Cellutfyllnad","cellSpace":"Cellavstånd","column":{"menu":"Kolumn","insertBefore":"Lägg till kolumn före","insertAfter":"Lägg till kolumn efter","deleteColumn":"Radera kolumn"},"columns":"Kolumner","deleteTable":"Radera tabell","headers":"Rubriker","headersBoth":"Båda","headersColumn":"Första kolumnen","headersNone":"Ingen","headersRow":"Första raden","invalidBorder":"Ram måste vara ett nummer.","invalidCellPadding":"Luft i cell måste vara ett nummer.","invalidCellSpacing":"Luft i cell måste vara ett nummer.","invalidCols":"Antal kolumner måste vara ett nummer större än 0.","invalidHeight":"Tabellens höjd måste vara ett nummer.","invalidRows":"Antal rader måste vara större än 0.","invalidWidth":"Tabell måste vara ett nummer.","menu":"Tabellegenskaper","row":{"menu":"Rad","insertBefore":"Lägg till rad före","insertAfter":"Lägg till rad efter","deleteRow":"Radera rad"},"rows":"Rader","summary":"Sammanfattning","title":"Tabellegenskaper","toolbar":"Tabell","widthPc":"procent","widthPx":"pixlar","widthUnit":"enhet bredd"},"undo":{"redo":"Gör om","undo":"Ångra"},"wsc":{"btnIgnore":"Ignorera","btnIgnoreAll":"Ignorera alla","btnReplace":"Ersätt","btnReplaceAll":"Ersätt alla","btnUndo":"Ångra","changeTo":"Ändra till","errorLoading":"Tjänsten är ej tillgänglig: %s.","ieSpellDownload":"Stavningskontrollen är ej installerad. Vill du göra det nu?","manyChanges":"Stavningskontroll slutförd: %1 ord rättades.","noChanges":"Stavningskontroll slutförd: Inga ord rättades.","noMispell":"Stavningskontroll slutförd: Inga stavfel påträffades.","noSuggestions":"- Förslag saknas -","notAvailable":"Tyvärr är tjänsten ej tillgänglig nu","notInDic":"Saknas i ordlistan","oneChange":"Stavningskontroll slutförd: Ett ord rättades.","progress":"Stavningskontroll pågår...","title":"Kontrollera stavning","toolbar":"Stavningskontroll"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/th.js b/wqflask/wqflask/static/packages/ckeditor/lang/th.js
deleted file mode 100644
index c1456a76..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/th.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['th']={"editor":"Rich Text Editor","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"à¸à¸” ALT 0 หาà¸à¸•à¹‰à¸­à¸‡à¸à¸²à¸£à¸„วามช่วยเหลือ","browseServer":"เปิดหน้าต่างจัดà¸à¸²à¸£à¹„ฟล์อัพโหลด","url":"ที่อยู่อ้างอิง URL","protocol":"โปรโตคอล","upload":"อัพโหลดไฟล์","uploadSubmit":"อัพโหลดไฟล์ไปเà¸à¹‡à¸šà¹„ว้ที่เครื่องà¹à¸¡à¹ˆà¸‚่าย (เซิร์ฟเวอร์)","image":"รูปภาพ","flash":"ไฟล์ Flash","form":"à¹à¸šà¸šà¸Ÿà¸­à¸£à¹Œà¸¡","checkbox":"เช็คบ๊อà¸","radio":"เรดิโอบัตตอน","textField":"เท็à¸à¸‹à¹Œà¸Ÿà¸´à¸¥à¸”์","textarea":"เท็à¸à¸‹à¹Œà¹à¸­à¹€à¸£à¸µà¸¢","hiddenField":"ฮิดเดนฟิลด์","button":"ปุ่ม","select":"à¹à¸–บตัวเลือà¸","imageButton":"ปุ่มà¹à¸šà¸šà¸£à¸¹à¸›à¸ à¸²à¸ž","notSet":"<ไม่ระบุ>","id":"ไอดี","name":"ชื่อ","langDir":"à¸à¸²à¸£à¹€à¸‚ียน-อ่านภาษา","langDirLtr":"จาà¸à¸‹à¹‰à¸²à¸¢à¹„ปขวา (LTR)","langDirRtl":"จาà¸à¸‚วามาซ้าย (RTL)","langCode":"รหัสภาษา","longDescr":"คำอธิบายประà¸à¸­à¸š URL","cssClass":"คลาสของไฟล์à¸à¸³à¸«à¸™à¸”ลัà¸à¸©à¸“ะà¸à¸²à¸£à¹à¸ªà¸”งผล","advisoryTitle":"คำเà¸à¸£à¸´à¹ˆà¸™à¸™à¸³","cssStyle":"ลัà¸à¸©à¸“ะà¸à¸²à¸£à¹à¸ªà¸”งผล","ok":"ตà¸à¸¥à¸‡","cancel":"ยà¸à¹€à¸¥à¸´à¸","close":"ปิด","preview":"ดูหน้าเอà¸à¸ªà¸²à¸£à¸•à¸±à¸§à¸­à¸¢à¹ˆà¸²à¸‡","resize":"ปรับขนาด","generalTab":"ทั่วไป","advancedTab":"ขั้นสูง","validateNumberFailed":"ค่านี้ไม่ใช่ตัวเลข","confirmNewPage":"à¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡à¹ƒà¸”ๆ ในเนื้อหานี้ ที่ไม่ได้ถูà¸à¸šà¸±à¸™à¸—ึà¸à¹„ว้ จะสูà¸à¸«à¸²à¸¢à¸—ั้งหมด คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¸§à¹ˆà¸²à¸ˆà¸°à¹€à¸£à¸µà¸¢à¸à¸«à¸™à¹‰à¸²à¹ƒà¸«à¸¡à¹ˆ?","confirmCancel":"ตัวเลือà¸à¸šà¸²à¸‡à¸•à¸±à¸§à¸¡à¸µà¸à¸²à¸£à¹€à¸›à¸¥à¸µà¹ˆà¸¢à¸™à¹à¸›à¸¥à¸‡ คุณà¹à¸™à¹ˆà¹ƒà¸ˆà¸§à¹ˆà¸²à¸ˆà¸°à¸›à¸´à¸”à¸à¸¥à¹ˆà¸­à¸‡à¹‚ต้ตอบนี้?","options":"ตัวเลือà¸","target":"à¸à¸²à¸£à¹€à¸›à¸´à¸”หน้าลิงค์","targetNew":"หน้าต่างใหม่ (_blank)","targetTop":"Topmost Window (_top)","targetSelf":"หน้าต่างเดียวà¸à¸±à¸™ (_self)","targetParent":"Parent Window (_parent)","langDirLTR":"จาà¸à¸‹à¹‰à¸²à¸¢à¹„ปขวา (LTR)","langDirRTL":"จาà¸à¸‚วามาซ้าย (RTL)","styles":"ลัà¸à¸©à¸“ะà¸à¸²à¸£à¹à¸ªà¸”งผล","cssClasses":"คลาสของไฟล์à¸à¸³à¸«à¸™à¸”ลัà¸à¸©à¸“ะà¸à¸²à¸£à¹à¸ªà¸”งผล","width":"ความà¸à¸§à¹‰à¸²à¸‡","height":"ความสูง","align":"à¸à¸²à¸£à¸ˆà¸±à¸”วาง","alignLeft":"ชิดซ้าย","alignRight":"ชิดขวา","alignCenter":"à¸à¸¶à¹ˆà¸‡à¸à¸¥à¸²à¸‡","alignJustify":"நியாயபà¯à®ªà®Ÿà¯à®¤à¯à®¤à®µà¯à®®à¯","alignTop":"บนสุด","alignMiddle":"à¸à¸¶à¹ˆà¸‡à¸à¸¥à¸²à¸‡à¹à¸™à¸§à¸•à¸±à¹‰à¸‡","alignBottom":"ชิดด้านล่าง","alignNone":"None","invalidValue":"ค่าไม่ถูà¸à¸•à¹‰à¸­à¸‡","invalidHeight":"ความสูงต้องเป็นตัวเลข","invalidWidth":"ความà¸à¸§à¹‰à¸²à¸‡à¸•à¹‰à¸­à¸‡à¹€à¸›à¹‡à¸™à¸•à¸±à¸§à¹€à¸¥à¸‚","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"About CKEditor","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"About CKEditor","userGuide":"CKEditor User's Guide"},"basicstyles":{"bold":"ตัวหนา","italic":"ตัวเอียง","strike":"ตัวขีดเส้นทับ","subscript":"ตัวห้อย","superscript":"ตัวยà¸","underline":"ตัวขีดเส้นใต้"},"bidi":{"ltr":"Text direction from left to right","rtl":"Text direction from right to left"},"blockquote":{"toolbar":"Block Quote"},"clipboard":{"copy":"สำเนา","copyError":"ไม่สามารถสำเนาข้อความที่เลือà¸à¹„ว้ได้เนื่องจาà¸à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าระดับความปลอดภัย. à¸à¸£à¸¸à¸“าใช้ปุ่มลัดเพื่อวางข้อความà¹à¸—น (à¸à¸”ปุ่ม Ctrl/Cmd à¹à¸¥à¸°à¸•à¸±à¸§ C พร้อมà¸à¸±à¸™).","cut":"ตัด","cutError":"ไม่สามารถตัดข้อความที่เลือà¸à¹„ว้ได้เนื่องจาà¸à¸à¸²à¸£à¸à¸³à¸«à¸™à¸”ค่าระดับความปลอดภัย. à¸à¸£à¸¸à¸“าใช้ปุ่มลัดเพื่อวางข้อความà¹à¸—น (à¸à¸”ปุ่ม Ctrl/Cmd à¹à¸¥à¸°à¸•à¸±à¸§ X พร้อมà¸à¸±à¸™).","paste":"วาง","pasteArea":"Paste Area","pasteMsg":"à¸à¸£à¸¸à¸“าใช้คีย์บอร์ดเท่านั้น โดยà¸à¸”ปุ๋ม (<strong>Ctrl/Cmd à¹à¸¥à¸° V</strong>)พร้อมๆà¸à¸±à¸™ à¹à¸¥à¸°à¸à¸” <strong>OK</strong>.","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"วาง"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"สีอัตโนมัติ","bgColorTitle":"สีพื้นหลัง","colors":{"000":"Black","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Brown","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Gray","F00":"Red","FF8C00":"Dark Orange","FFD700":"Gold","008000":"Green","0FF":"Cyan","00F":"Blue","EE82EE":"Violet","A9A9A9":"Dim Gray","FFA07A":"Light Salmon","FFA500":"Orange","FFFF00":"Yellow","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"White"},"more":"เลือà¸à¸ªà¸µà¸­à¸·à¹ˆà¸™à¹†...","panelTitle":"Colors","textColorTitle":"สีตัวอัà¸à¸©à¸£"},"colordialog":{"clear":"Clear","highlight":"Highlight","options":"Color Options","selected":"Selected Color","title":"Select color"},"templates":{"button":"เทมเพลต","emptyListMsg":"(ยังไม่มีà¸à¸²à¸£à¸à¸³à¸«à¸™à¸”เทมเพลต)","insertOption":"à¹à¸—นที่เนื้อหาเว็บไซต์ที่เลือà¸","options":"ตัวเลือà¸à¹€à¸à¸µà¹ˆà¸¢à¸§à¸à¸±à¸šà¹€à¸—มเพลท","selectPromptMsg":"à¸à¸£à¸¸à¸“าเลือภเทมเพลต เพื่อนำไปà¹à¸à¹‰à¹„ขในอีดิตเตอร์<br />(เนื้อหาส่วนนี้จะหายไป):","title":"เทมเพลตของส่วนเนื้อหาเว็บไซต์"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"ไอดี","advisoryTitleInputLabel":"คำเà¸à¸£à¸´à¹ˆà¸™à¸™à¸³","cssClassInputLabel":"คลาสของไฟล์à¸à¸³à¸«à¸™à¸”ลัà¸à¸©à¸“ะà¸à¸²à¸£à¹à¸ªà¸”งผล","edit":"à¹à¸à¹‰à¹„ข Div","inlineStyleInputLabel":"Inline Style","langDirLTRLabel":"จาà¸à¸‹à¹‰à¸²à¸¢à¹„ปขวา (LTR)","langDirLabel":"à¸à¸²à¸£à¹€à¸‚ียน-อ่านภาษา","langDirRTLLabel":"จาà¸à¸‚วามาซ้าย (RTL)","languageCodeInputLabel":"รหัสภาษา","remove":"ลบ Div","styleSelectLabel":"ลัà¸à¸©à¸“ะà¸à¸²à¸£à¹à¸ªà¸”งผล","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"ซ่อนà¹à¸–บเครื่องมือ","toolbarExpand":"เปิดà¹à¸–บเครื่องมือ","toolbarGroups":{"document":"Document","clipboard":"Clipboard/Undo","editing":"Editing","forms":"Forms","basicstyles":"Basic Styles","paragraph":"Paragraph","links":"Links","insert":"Insert","styles":"Styles","colors":"Colors","tools":"Tools"},"toolbars":"à¹à¸–บเครื่องมือช่วยพิมพ์ข้อความ"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"ค้นหา","findOptions":"Find Options","findWhat":"ค้นหาคำว่า:","matchCase":"ตัวโหà¸à¹ˆ-เล็ภต้องตรงà¸à¸±à¸™","matchCyclic":"Match cyclic","matchWord":"ต้องตรงà¸à¸±à¸™à¸—ุà¸à¸„ำ","notFoundMsg":"ไม่พบคำที่ค้นหา.","replace":"ค้นหาà¹à¸¥à¸°à¹à¸—นที่","replaceAll":"à¹à¸—นที่ทั้งหมดที่พบ","replaceSuccessMsg":"%1 occurrence(s) replaced.","replaceWith":"à¹à¸—นที่ด้วย:","title":"Find and Replace"},"fakeobjects":{"anchor":"à¹à¸—รà¸/à¹à¸à¹‰à¹„ข Anchor","flash":"ภาพอนิเมชั่นà¹à¸Ÿà¸¥à¸Š","hiddenfield":"ฮิดเดนฟิลด์","iframe":"IFrame","unknown":"วัตถุไม่ทราบชนิด"},"flash":{"access":"à¸à¸²à¸£à¹€à¸‚้าถึงสคริปต์","accessAlways":"ตลอดไป","accessNever":"ไม่เลย","accessSameDomain":"โดเมนเดียวà¸à¸±à¸™","alignAbsBottom":"ชิดด้านล่างสุด","alignAbsMiddle":"à¸à¸¶à¹ˆà¸‡à¸à¸¥à¸²à¸‡","alignBaseline":"ชิดบรรทัด","alignTextTop":"ใต้ตัวอัà¸à¸©à¸£","bgcolor":"สีพื้นหลัง","chkFull":"อนุà¸à¸²à¸•à¹ƒà¸«à¹‰à¹à¸ªà¸”งเต็มหน้าจอได้","chkLoop":"เล่นวนรอบ Loop","chkMenu":"ให้ใช้งานเมนูของ Flash","chkPlay":"เล่นอัตโนมัติ Auto Play","flashvars":"ตัวà¹à¸›à¸£à¸ªà¸³à¸«à¸£à¸±à¸š Flas","hSpace":"ระยะà¹à¸™à¸§à¸™à¸­à¸™","properties":"คุณสมบัติของไฟล์ Flash","propertiesTab":"คุณสมบัติ","quality":"คุณภาพ","qualityAutoHigh":"ปรับคุณภาพสูงอัตโนมัติ","qualityAutoLow":"ปรับคุณภาพต่ำอัตโนมัติ","qualityBest":"ดีที่สุด","qualityHigh":"สูง","qualityLow":"ต่ำ","qualityMedium":"ปานà¸à¸¥à¸²à¸‡","scale":"อัตราส่วน Scale","scaleAll":"à¹à¸ªà¸”งให้เห็นทั้งหมด Show all","scaleFit":"à¹à¸ªà¸”งให้พอดีà¸à¸±à¸šà¸žà¸·à¹‰à¸™à¸—ี่ Exact Fit","scaleNoBorder":"ไม่à¹à¸ªà¸”งเส้นขอบ No Border","title":"คุณสมบัติของไฟล์ Flash","vSpace":"ระยะà¹à¸™à¸§à¸•à¸±à¹‰à¸‡","validateHSpace":"HSpace ต้องเป็นจำนวนตัวเลข","validateSrc":"à¸à¸£à¸¸à¸“าระบุที่อยู่อ้างอิงออนไลน์ (URL)","validateVSpace":"VSpace ต้องเป็นจำนวนตัวเลข","windowMode":"โหมดหน้าต่าง","windowModeOpaque":"ความทึบà¹à¸ªà¸‡","windowModeTransparent":"ความโปรงà¹à¸ªà¸‡","windowModeWindow":"หน้าต่าง"},"font":{"fontSize":{"label":"ขนาด","voiceLabel":"Font Size","panelTitle":"ขนาด"},"label":"à¹à¸šà¸šà¸­à¸±à¸à¸©à¸£","panelTitle":"à¹à¸šà¸šà¸­à¸±à¸à¸©à¸£","voiceLabel":"à¹à¸šà¸šà¸­à¸±à¸à¸©à¸£"},"forms":{"button":{"title":"รายละเอียดของ ปุ่ม","text":"ข้อความ (ค่าตัวà¹à¸›à¸£)","type":"ข้อความ","typeBtn":"Button","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"คุณสมบัติของ เช็คบ๊อà¸","radioTitle":"คุณสมบัติของ เรดิโอบัตตอน","value":"ค่าตัวà¹à¸›à¸£","selected":"เลือà¸à¹€à¸›à¹‡à¸™à¸„่าเริ่มต้น"},"form":{"title":"คุณสมบัติของ à¹à¸šà¸šà¸Ÿà¸­à¸£à¹Œà¸¡","menu":"คุณสมบัติของ à¹à¸šà¸šà¸Ÿà¸­à¸£à¹Œà¸¡","action":"à¹à¸­à¸„ชั่น","method":"เมธอด","encoding":"Encoding"},"hidden":{"title":"คุณสมบัติของ ฮิดเดนฟิลด์","name":"ชื่อ","value":"ค่าตัวà¹à¸›à¸£"},"select":{"title":"คุณสมบัติของ à¹à¸–บตัวเลือà¸","selectInfo":"อินโฟ","opAvail":"รายà¸à¸²à¸£à¸•à¸±à¸§à¹€à¸¥à¸·à¸­à¸","value":"ค่าตัวà¹à¸›à¸£","size":"ขนาด","lines":"บรรทัด","chkMulti":"เลือà¸à¸«à¸¥à¸²à¸¢à¸„่าได้","opText":"ข้อความ","opValue":"ค่าตัวà¹à¸›à¸£","btnAdd":"เพิ่ม","btnModify":"à¹à¸à¹‰à¹„ข","btnUp":"บน","btnDown":"ล่าง","btnSetValue":"เลือà¸à¹€à¸›à¹‡à¸™à¸„่าเริ่มต้น","btnDelete":"ลบ"},"textarea":{"title":"คุณสมบัติของ เท็à¸à¹à¸­à¹€à¸£à¸µà¸¢","cols":"สดมภ์","rows":"à¹à¸–ว"},"textfield":{"title":"คุณสมบัติของ เท็à¸à¸‹à¹Œà¸Ÿà¸´à¸¥à¸”์","name":"ชื่อ","value":"ค่าตัวà¹à¸›à¸£","charWidth":"ความà¸à¸§à¹‰à¸²à¸‡","maxChars":"จำนวนตัวอัà¸à¸©à¸£à¸ªà¸¹à¸‡à¸ªà¸¸à¸”","type":"ชนิด","typeText":"ข้อความ","typePass":"รหัสผ่าน","typeEmail":"อีเมล","typeSearch":"ค้นหาà¸","typeTel":"หมายเลขโทรศัพท์","typeUrl":"ที่อยู่อ้างอิง URL"}},"format":{"label":"รูปà¹à¸šà¸š","panelTitle":"รูปà¹à¸šà¸š","tag_address":"Address","tag_div":"Paragraph (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Normal","tag_pre":"Formatted"},"horizontalrule":{"toolbar":"à¹à¸—รà¸à¹€à¸ªà¹‰à¸™à¸„ั่นบรรทัด"},"iframe":{"border":"Show frame border","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame Properties","toolbar":"IFrame"},"image":{"alertUrl":"à¸à¸£à¸¸à¸“าระบุที่อยู่อ้างอิงออนไลน์ของไฟล์รูปภาพ (URL)","alt":"คำประà¸à¸­à¸šà¸£à¸¹à¸›à¸ à¸²à¸ž","border":"ขนาดขอบรูป","btnUpload":"อัพโหลดไฟล์ไปเà¸à¹‡à¸šà¹„ว้ที่เครื่องà¹à¸¡à¹ˆà¸‚่าย (เซิร์ฟเวอร์)","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"ระยะà¹à¸™à¸§à¸™à¸­à¸™","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"ข้อมูลของรูปภาพ","linkTab":"ลิ้งค์","lockRatio":"à¸à¸³à¸«à¸™à¸”อัตราส่วน à¸à¸§à¹‰à¸²à¸‡-สูง à¹à¸šà¸šà¸„งที่","menu":"คุณสมบัติของ รูปภาพ","resetSize":"à¸à¸³à¸«à¸™à¸”รูปเท่าขนาดจริง","title":"คุณสมบัติของ รูปภาพ","titleButton":"คุณสมบัติของ ปุ่มà¹à¸šà¸šà¸£à¸¹à¸›à¸ à¸²à¸ž","upload":"อัพโหลดไฟล์","urlMissing":"Image source URL is missing.","vSpace":"ระยะà¹à¸™à¸§à¸•à¸±à¹‰à¸‡","validateBorder":"Border must be a whole number.","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"เพิ่มระยะย่อหน้า","outdent":"ลดระยะย่อหน้า"},"smiley":{"options":"ตัวเลือà¸à¹„อคอนà¹à¸ªà¸”งอารมณ์","title":"à¹à¸—รà¸à¸ªà¸±à¸à¸¥à¸±à¸à¸©à¸“์สื่ออารมณ์","toolbar":"รูปสื่ออารมณ์"},"justify":{"block":"จัดพอดีหน้าà¸à¸£à¸°à¸”าษ","center":"จัดà¸à¸¶à¹ˆà¸‡à¸à¸¥à¸²à¸‡","left":"จัดชิดซ้าย","right":"จัดชิดขวา"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"à¹à¸­à¸„เซส คีย์","advanced":"ขั้นสูง","advisoryContentType":"ชนิดของคำเà¸à¸£à¸´à¹ˆà¸™à¸™à¸³","advisoryTitle":"คำเà¸à¸£à¸´à¹ˆà¸™à¸™à¸³","anchor":{"toolbar":"à¹à¸—รà¸/à¹à¸à¹‰à¹„ข Anchor","menu":"รายละเอียด Anchor","title":"รายละเอียด Anchor","name":"ชื่อ Anchor","errorName":"à¸à¸£à¸¸à¸“าระบุชื่อของ Anchor","remove":"Remove Anchor"},"anchorId":"ไอดี","anchorName":"ชื่อ","charset":"ลิงค์เชื่อมโยงไปยังชุดตัวอัà¸à¸©à¸£","cssClasses":"คลาสของไฟล์à¸à¸³à¸«à¸™à¸”ลัà¸à¸©à¸“ะà¸à¸²à¸£à¹à¸ªà¸”งผล","emailAddress":"อีเมล์ (E-Mail)","emailBody":"ข้อความ","emailSubject":"หัวเรื่อง","id":"ไอดี","info":"รายละเอียด","langCode":"à¸à¸²à¸£à¹€à¸‚ียน-อ่านภาษา","langDir":"à¸à¸²à¸£à¹€à¸‚ียน-อ่านภาษา","langDirLTR":"จาà¸à¸‹à¹‰à¸²à¸¢à¹„ปขวา (LTR)","langDirRTL":"จาà¸à¸‚วามาซ้าย (RTL)","menu":"à¹à¸à¹‰à¹„ข ลิงค์","name":"ชื่อ","noAnchors":"(ยังไม่มีจุดเชื่อมโยงภายในหน้าเอà¸à¸ªà¸²à¸£à¸™à¸µà¹‰)","noEmail":"à¸à¸£à¸¸à¸“าระบุอีเมล์ (E-mail)","noUrl":"à¸à¸£à¸¸à¸“าระบุที่อยู่อ้างอิงออนไลน์ (URL)","other":"<อื่น ๆ>","popupDependent":"à¹à¸ªà¸”งเต็มหน้าจอ (Netscape)","popupFeatures":"คุณสมบัติของหน้าจอเล็ภ(Pop-up)","popupFullScreen":"à¹à¸ªà¸”งเต็มหน้าจอ (IE5.5++ เท่านั้น)","popupLeft":"พิà¸à¸±à¸”ซ้าย (Left Position)","popupLocationBar":"à¹à¸ªà¸”งที่อยู่ของไฟล์","popupMenuBar":"à¹à¸ªà¸”งà¹à¸–บเมนู","popupResizable":"สามารถปรับขนาดได้","popupScrollBars":"à¹à¸ªà¸”งà¹à¸–บเลื่อน","popupStatusBar":"à¹à¸ªà¸”งà¹à¸–บสถานะ","popupToolbar":"à¹à¸ªà¸”งà¹à¸–บเครื่องมือ","popupTop":"พิà¸à¸±à¸”บน (Top Position)","rel":"ความสัมพันธ์","selectAnchor":"ระบุข้อมูลของจุดเชื่อมโยง (Anchor)","styles":"ลัà¸à¸©à¸“ะà¸à¸²à¸£à¹à¸ªà¸”งผล","tabIndex":"ลำดับของ à¹à¸—็บ","target":"à¸à¸²à¸£à¹€à¸›à¸´à¸”หน้าลิงค์","targetFrame":"<เปิดในเฟรม>","targetFrameName":"ชื่อทาร์เà¸à¹‡à¸•à¹€à¸Ÿà¸£à¸¡","targetPopup":"<เปิดหน้าจอเล็ภ(Pop-up)>","targetPopupName":"ระบุชื่อหน้าจอเล็ภ(Pop-up)","title":"ลิงค์เชื่อมโยงเว็บ อีเมล์ รูปภาพ หรือไฟล์อื่นๆ","toAnchor":"จุดเชื่อมโยง (Anchor)","toEmail":"ส่งอีเมล์ (E-Mail)","toUrl":"ที่อยู่อ้างอิง URL","toolbar":"à¹à¸—รà¸/à¹à¸à¹‰à¹„ข ลิงค์","type":"ประเภทของลิงค์","unlink":"ลบ ลิงค์","upload":"อัพโหลดไฟล์"},"list":{"bulletedlist":"ลำดับรายà¸à¸²à¸£à¹à¸šà¸šà¸ªà¸±à¸à¸¥à¸±à¸à¸©à¸“์","numberedlist":"ลำดับรายà¸à¸²à¸£à¹à¸šà¸šà¸•à¸±à¸§à¹€à¸¥à¸‚"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Bulleted List Properties","circle":"Circle","decimal":"Decimal (1, 2, 3, etc.)","decimalLeadingZero":"Decimal leading zero (01, 02, 03, etc.)","disc":"Disc","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"None","notset":"<not set>","numberedTitle":"Numbered List Properties","square":"Square","start":"Start","type":"Type","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Insert paragraph here"},"maximize":{"maximize":"ขยายใหà¸à¹ˆ","minimize":"ย่อขนาด"},"newpage":{"toolbar":"สร้างหน้าเอà¸à¸ªà¸²à¸£à¹ƒà¸«à¸¡à¹ˆ"},"pagebreak":{"alt":"ตัวà¹à¸šà¹ˆà¸‡à¸«à¸™à¹‰à¸²","toolbar":"à¹à¸—รà¸à¸•à¸±à¸§à¹à¸šà¹ˆà¸‡à¸«à¸™à¹‰à¸² Page Break"},"pastetext":{"button":"วางà¹à¸šà¸šà¸•à¸±à¸§à¸­à¸±à¸à¸©à¸£à¸˜à¸£à¸£à¸¡à¸”า","title":"วางà¹à¸šà¸šà¸•à¸±à¸§à¸­à¸±à¸à¸©à¸£à¸˜à¸£à¸£à¸¡à¸”า"},"pastefromword":{"confirmCleanup":"ข้อความที่คุณต้องà¸à¸²à¸£à¸§à¸²à¸‡à¸¥à¸‡à¹„ปเป็นข้อความที่คัดลอà¸à¸¡à¸²à¸ˆà¸²à¸à¹‚ปรà¹à¸à¸£à¸¡à¹„มโครซอฟท์เวิร์ด คุณต้องà¸à¸²à¸£à¸¥à¹‰à¸²à¸‡à¸„่าข้อความดังà¸à¸¥à¹ˆà¸²à¸§à¸à¹ˆà¸­à¸™à¸§à¸²à¸‡à¸¥à¸‡à¹„ปหรือไม่?","error":"ไม่สามารถล้างข้อมูลที่ต้องà¸à¸²à¸£à¸§à¸²à¸‡à¹„ด้เนื่องจาà¸à¹€à¸à¸´à¸”ข้อผิดพลาดภายในระบบ","title":"วางสำเนาจาà¸à¸•à¸±à¸§à¸­à¸±à¸à¸©à¸£à¹€à¸§à¸´à¸£à¹Œà¸”","toolbar":"วางสำเนาจาà¸à¸•à¸±à¸§à¸­à¸±à¸à¸©à¸£à¹€à¸§à¸´à¸£à¹Œà¸”"},"preview":{"preview":"ดูหน้าเอà¸à¸ªà¸²à¸£à¸•à¸±à¸§à¸­à¸¢à¹ˆà¸²à¸‡"},"print":{"toolbar":"สั่งพิมพ์"},"removeformat":{"toolbar":"ล้างรูปà¹à¸šà¸š"},"save":{"toolbar":"บันทึà¸"},"selectall":{"toolbar":"เลือà¸à¸—ั้งหมด"},"showblocks":{"toolbar":"à¹à¸ªà¸”งบล็อคข้อมูล"},"sourcearea":{"toolbar":"ดูรหัส HTML"},"specialchar":{"options":"Special Character Options","title":"à¹à¸—รà¸à¸•à¸±à¸§à¸­à¸±à¸à¸©à¸£à¸žà¸´à¹€à¸¨à¸©","toolbar":"à¹à¸—รà¸à¸•à¸±à¸§à¸­à¸±à¸à¸©à¸£à¸žà¸´à¹€à¸¨à¸©"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"ลัà¸à¸©à¸“ะ","panelTitle":"Formatting Styles","panelTitle1":"Block Styles","panelTitle2":"Inline Styles","panelTitle3":"Object Styles"},"table":{"border":"ขนาดเส้นขอบ","caption":"หัวเรื่องของตาราง","cell":{"menu":"ช่องตาราง","insertBefore":"Insert Cell Before","insertAfter":"Insert Cell After","deleteCell":"ลบช่อง","merge":"ผสานช่อง","mergeRight":"Merge Right","mergeDown":"Merge Down","splitHorizontal":"Split Cell Horizontally","splitVertical":"Split Cell Vertically","title":"Cell Properties","cellType":"Cell Type","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"Word Wrap","hAlign":"Horizontal Alignment","vAlign":"Vertical Alignment","alignBaseline":"Baseline","bgColor":"Background Color","borderColor":"Border Color","data":"Data","header":"Header","yes":"Yes","no":"No","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Choose"},"cellPad":"ระยะà¹à¸™à¸§à¸•à¸±à¹‰à¸‡","cellSpace":"ระยะà¹à¸™à¸§à¸™à¸­à¸™à¸™","column":{"menu":"คอลัมน์","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"ลบสดมน์"},"columns":"สดมน์","deleteTable":"ลบตาราง","headers":"ส่วนหัว","headersBoth":"ทั้งสองอย่าง","headersColumn":"คอลัมน์à¹à¸£à¸","headersNone":"None","headersRow":"à¹à¸–วà¹à¸£à¸","invalidBorder":"ขนาดเส้นà¸à¸£à¸­à¸šà¸•à¹‰à¸­à¸‡à¹€à¸›à¹‡à¸™à¸ˆà¸³à¸™à¸§à¸™à¸•à¸±à¸§à¹€à¸¥à¸‚","invalidCellPadding":"ช่องว่างภายในเซลล์ต้องเลขจำนวนบวà¸","invalidCellSpacing":"ช่องว่างภายในเซลล์ต้องเป็นเลขจำนวนบวà¸","invalidCols":"จำนวนคอลัมน์ต้องเป็นจำนวนมาà¸à¸à¸§à¹ˆà¸² 0","invalidHeight":"ส่วนสูงของตารางต้องเป็นตัวเลข","invalidRows":"จำนวนของà¹à¸–วต้องเป็นจำนวนมาà¸à¸à¸§à¹ˆà¸² 0","invalidWidth":"ความà¸à¸§à¹‰à¸²à¸‡à¸•à¸²à¸£à¸²à¸‡à¸•à¹‰à¸­à¸‡à¹€à¸›à¹‡à¸™à¸•à¸±à¸§à¹€à¸¥à¸‚","menu":"คุณสมบัติของ ตาราง","row":{"menu":"à¹à¸–ว","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"ลบà¹à¸–ว"},"rows":"à¹à¸–ว","summary":"สรุปความ","title":"คุณสมบัติของ ตาราง","toolbar":"ตาราง","widthPc":"เปอร์เซ็น","widthPx":"จุดสี","widthUnit":"หน่วยความà¸à¸§à¹‰à¸²à¸‡"},"undo":{"redo":"ทำซ้ำคำสั่ง","undo":"ยà¸à¹€à¸¥à¸´à¸à¸„ำสั่ง"},"wsc":{"btnIgnore":"ยà¸à¹€à¸§à¹‰à¸™","btnIgnoreAll":"ยà¸à¹€à¸§à¹‰à¸™à¸—ั้งหมด","btnReplace":"à¹à¸—นที่","btnReplaceAll":"à¹à¸—นที่ทั้งหมด","btnUndo":"ยà¸à¹€à¸¥à¸´à¸","changeTo":"à¹à¸à¹‰à¹„ขเป็น","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"ไม่ได้ติดตั้งระบบตรวจสอบคำสะà¸à¸”. ต้องà¸à¸²à¸£à¸•à¸´à¸”ตั้งไหมครับ?","manyChanges":"ตรวจสอบคำสะà¸à¸”เสร็จสิ้น:: à¹à¸à¹‰à¹„ข %1 คำ","noChanges":"ตรวจสอบคำสะà¸à¸”เสร็จสิ้น: ไม่มีà¸à¸²à¸£à¹à¸à¹‰à¸„ำใดๆ","noMispell":"ตรวจสอบคำสะà¸à¸”เสร็จสิ้น: ไม่พบคำสะà¸à¸”ผิด","noSuggestions":"- ไม่มีคำà¹à¸™à¸°à¸™à¸³à¹ƒà¸”ๆ -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"ไม่พบในดิà¸à¸Šà¸±à¸™à¸™à¸²à¸£à¸µ","oneChange":"ตรวจสอบคำสะà¸à¸”เสร็จสิ้น: à¹à¸à¹‰à¹„ข1คำ","progress":"à¸à¸³à¸¥à¸±à¸‡à¸•à¸£à¸§à¸ˆà¸ªà¸­à¸šà¸„ำสะà¸à¸”...","title":"Spell Check","toolbar":"ตรวจà¸à¸²à¸£à¸ªà¸°à¸à¸”คำ"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/tr.js b/wqflask/wqflask/static/packages/ckeditor/lang/tr.js
deleted file mode 100644
index 089b1454..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/tr.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['tr']={"editor":"Zengin Metin Editörü","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Yardım için ALT 0 tuşlarına basın","browseServer":"Sunucuya Gözat","url":"URL","protocol":"Protokol","upload":"Karşıya Yükle","uploadSubmit":"Sunucuya Gönder","image":"Resim","flash":"Flash","form":"Form","checkbox":"Onay Kutusu","radio":"Seçenek Düğmesi","textField":"Metin Kutusu","textarea":"Metin Alanı","hiddenField":"Gizli Alan","button":"Düğme","select":"Seçme Alanı","imageButton":"Resim Düğmesi","notSet":"<tanımlanmamış>","id":"Kimlik","name":"İsim","langDir":"Dil Yönü","langDirLtr":"Soldan Sağa (LTR)","langDirRtl":"Sağdan Sola (RTL)","langCode":"Dil Kodlaması","longDescr":"Uzun Tanımlı URL","cssClass":"Biçem Sayfası Sınıfları","advisoryTitle":"Öneri Başlığı","cssStyle":"Biçem","ok":"Tamam","cancel":"İptal","close":"Kapat","preview":"Önizleme","resize":"Yeniden Boyutlandır","generalTab":"Genel","advancedTab":"Gelişmiş","validateNumberFailed":"Bu değer bir sayı değildir.","confirmNewPage":"Bu içerikle ilgili kaydedilmemiş tüm bilgiler kaybolacaktır. Yeni bir sayfa yüklemek istediğinizden emin misiniz?","confirmCancel":"Bazı seçenekleri değiştirdiniz. İletişim penceresini kapatmak istediğinizden emin misiniz?","options":"Seçenekler","target":"Hedef","targetNew":"Yeni Pencere (_blank)","targetTop":"En Üstteki Pencere (_top)","targetSelf":"Aynı Pencere (_self)","targetParent":"Üst Pencere (_parent)","langDirLTR":"Soldan Sağa (LTR)","langDirRTL":"Sağdan Sola (RTL)","styles":"Biçem","cssClasses":"Biçem Sayfası Sınıfları","width":"Genişlik","height":"Yükseklik","align":"Hizalama","alignLeft":"Sol","alignRight":"Sağ","alignCenter":"Ortala","alignJustify":"İki Kenara Yaslanmış","alignTop":"Üst","alignMiddle":"Orta","alignBottom":"Alt","alignNone":"Hiçbiri","invalidValue":"Geçersiz değer.","invalidHeight":"Yükseklik değeri bir sayı olmalıdır.","invalidWidth":"Genişlik değeri bir sayı olmalıdır.","invalidCssLength":"\"%1\" alanı için verilen değer, geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt, veya pc) içeren veya içermeyen pozitif bir sayı olmalıdır.","invalidHtmlLength":"Belirttiğiniz sayı \"%1\" alanı için pozitif bir sayı HTML birim değeri olmalıdır (px veya %).","invalidInlineStyle":"Satıriçi biçem için verilen değer, \"isim : değer\" biçiminde birbirinden noktalı virgüllerle ayrılan bir veya daha fazla değişkenler grubundan oluşmalıdır.","cssLengthTooltip":"Piksel türünde bir sayı veya geçerli bir CSS ölçü birimi (px, %, in, cm, mm, em, ex, pt veya pc) içeren bir sayı girin.","unavailable":"%1<span class=\"cke_accessibility\">, kullanılamaz</span>"},"about":{"copy":"Copyright &copy; $1. Tüm hakları saklıdır.","dlgTitle":"CKEditor Hakkında","help":"Yardım için $1 kontrol edin.","moreInfo":"Lisanslama hakkında daha fazla bilgi almak için lütfen sitemizi ziyaret edin:","title":"CKEditor Hakkında","userGuide":"CKEditor Kullanıcı Kılavuzu"},"basicstyles":{"bold":"Kalın","italic":"İtalik","strike":"Üstü Çizgili","subscript":"Alt Simge","superscript":"Üst Simge","underline":"Altı Çizgili"},"bidi":{"ltr":"Metin yönü soldan sağa","rtl":"Metin yönü sağdan sola"},"blockquote":{"toolbar":"Blok Oluştur"},"clipboard":{"copy":"Kopyala","copyError":"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kopyalama işlemine izin vermiyor. İşlem için (Ctrl/Cmd+C) tuşlarını kullanın.","cut":"Kes","cutError":"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin otomatik kesme işlemine izin vermiyor. İşlem için (Ctrl/Cmd+X) tuşlarını kullanın.","paste":"Yapıştır","pasteArea":"Yapıştırma Alanı","pasteMsg":"Lütfen aşağıdaki kutunun içine yapıştırın. (<STRONG>Ctrl/Cmd+V</STRONG>) ve <STRONG>Tamam</STRONG> butonunu tıklayın.","securityMsg":"Gezgin yazılımınızın güvenlik ayarları düzenleyicinin direkt olarak panoya erişimine izin vermiyor. Bu pencere içine tekrar yapıştırmalısınız..","title":"Yapıştır"},"button":{"selectedLabel":"%1 (Seçilmiş)"},"colorbutton":{"auto":"Otomatik","bgColorTitle":"Arka Renk","colors":{"000":"Siyah","800000":"Kestane","8B4513":"Koyu Kahverengi","2F4F4F":"Koyu Kurşuni Gri","008080":"Teal","000080":"Mavi","4B0082":"Çivit Mavisi","696969":"Silik Gri","B22222":"Ateş Tuğlası","A52A2A":"Kahverengi","DAA520":"Altun Sırık","006400":"Koyu Yeşil","40E0D0":"Turkuaz","0000CD":"Orta Mavi","800080":"Pembe","808080":"Gri","F00":"Kırmızı","FF8C00":"Koyu Portakal","FFD700":"Altın","008000":"Yeşil","0FF":"Ciyan","00F":"Mavi","EE82EE":"Menekşe","A9A9A9":"Koyu Gri","FFA07A":"Açık Sarımsı","FFA500":"Portakal","FFFF00":"Sarı","00FF00":"Açık Yeşil","AFEEEE":"Sönük Turkuaz","ADD8E6":"Açık Mavi","DDA0DD":"Mor","D3D3D3":"Açık Gri","FFF0F5":"Eflatun Pembe","FAEBD7":"Antik Beyaz","FFFFE0":"Açık Sarı","F0FFF0":"Balsarısı","F0FFFF":"Gök Mavisi","F0F8FF":"Reha Mavi","E6E6FA":"Eflatun","FFF":"Beyaz"},"more":"Diğer renkler...","panelTitle":"Renkler","textColorTitle":"Yazı Rengi"},"colordialog":{"clear":"Temizle","highlight":"İşaretle","options":"Renk Seçenekleri","selected":"Seçilmiş","title":"Renk seç"},"templates":{"button":"Şablonlar","emptyListMsg":"(Belirli bir şablon seçilmedi)","insertOption":"Mevcut içerik ile değiştir","options":"Şablon Seçenekleri","selectPromptMsg":"Düzenleyicide açmak için lütfen bir şablon seçin.<br>(hali hazırdaki içerik kaybolacaktır.):","title":"İçerik Şablonları"},"contextmenu":{"options":"İçerik Menüsü Seçenekleri"},"div":{"IdInputLabel":"Id","advisoryTitleInputLabel":"Tavsiye Başlığı","cssClassInputLabel":"Stilltipi Sınıfı","edit":"Div Düzenle","inlineStyleInputLabel":"Inline Stili","langDirLTRLabel":"Soldan sağa (LTR)","langDirLabel":"Dil Yönü","langDirRTLLabel":"Sağdan sola (RTL)","languageCodeInputLabel":" Dil Kodu","remove":"Div Kaldır","styleSelectLabel":"Stil","title":"Div İçeriği Oluştur","toolbar":"Div İçeriği Oluştur"},"toolbar":{"toolbarCollapse":"Araç çubuklarını topla","toolbarExpand":"Araç çubuklarını aç","toolbarGroups":{"document":"Belge","clipboard":"Pano/Geri al","editing":"Düzenleme","forms":"Formlar","basicstyles":"Temel Stiller","paragraph":"Paragraf","links":"Bağlantılar","insert":"Ekle","styles":"Stiller","colors":"Renkler","tools":"Araçlar"},"toolbars":"Araç çubukları Editörü"},"elementspath":{"eleLabel":"Elementlerin yolu","eleTitle":"%1 elementi"},"find":{"find":"Bul","findOptions":"Seçenekleri Bul","findWhat":"Aranan:","matchCase":"Büyük/küçük harf duyarlı","matchCyclic":"Eşleşen döngü","matchWord":"Kelimenin tamamı uysun","notFoundMsg":"Belirtilen yazı bulunamadı.","replace":"Değiştir","replaceAll":"Tümünü Değiştir","replaceSuccessMsg":"%1 bulunanlardan değiştirildi.","replaceWith":"Bununla değiştir:","title":"Bul ve Değiştir"},"fakeobjects":{"anchor":"Bağlantı","flash":"Flash Animasyonu","hiddenfield":"Gizli Alan","iframe":"IFrame","unknown":"Bilinmeyen Nesne"},"flash":{"access":"Kod İzni","accessAlways":"Herzaman","accessNever":"Asla","accessSameDomain":"Aynı domain","alignAbsBottom":"Tam Altı","alignAbsMiddle":"Tam Ortası","alignBaseline":"Taban Çizgisi","alignTextTop":"Yazı Tepeye","bgcolor":"Arka Renk","chkFull":"Tam ekrana İzinver","chkLoop":"Döngü","chkMenu":"Flash Menüsünü Kullan","chkPlay":"Otomatik Oynat","flashvars":"Flash Değerleri","hSpace":"Yatay Boşluk","properties":"Flash Özellikleri","propertiesTab":"Özellikler","quality":"Kalite","qualityAutoHigh":"Otomatik Yükseklik","qualityAutoLow":"Otomatik Düşüklük","qualityBest":"En iyi","qualityHigh":"Yüksek","qualityLow":"Düşük","qualityMedium":"Orta","scale":"Boyutlandır","scaleAll":"Hepsini Göster","scaleFit":"Tam Sığdır","scaleNoBorder":"Kenar Yok","title":"Flash Özellikleri","vSpace":"Dikey Boşluk","validateHSpace":"HSpace sayı olmalıdır.","validateSrc":"Lütfen köprü URL'sini yazın","validateVSpace":"VSpace sayı olmalıdır.","windowMode":"Pencere modu","windowModeOpaque":"Opak","windowModeTransparent":"Şeffaf","windowModeWindow":"Pencere"},"font":{"fontSize":{"label":"Boyut","voiceLabel":"Font Size","panelTitle":"Boyut"},"label":"Yazı Türü","panelTitle":"Yazı Türü","voiceLabel":"Font"},"forms":{"button":{"title":"Düğme Özellikleri","text":"Metin (Değer)","type":"Tip","typeBtn":"Düğme","typeSbm":"Gönder","typeRst":"Sıfırla"},"checkboxAndRadio":{"checkboxTitle":"Onay Kutusu Özellikleri","radioTitle":"Seçenek Düğmesi Özellikleri","value":"Değer","selected":"Seçili"},"form":{"title":"Form Özellikleri","menu":"Form Özellikleri","action":"İşlem","method":"Yöntem","encoding":"Kodlama"},"hidden":{"title":"Gizli Veri Özellikleri","name":"Ad","value":"Değer"},"select":{"title":"Seçim Menüsü Özellikleri","selectInfo":"Bilgi","opAvail":"Mevcut Seçenekler","value":"Değer","size":"Boyut","lines":"satır","chkMulti":"Çoklu seçime izin ver","opText":"Metin","opValue":"Değer","btnAdd":"Ekle","btnModify":"Düzenle","btnUp":"Yukarı","btnDown":"Aşağı","btnSetValue":"Seçili değer olarak ata","btnDelete":"Sil"},"textarea":{"title":"Çok Satırlı Metin Özellikleri","cols":"Sütunlar","rows":"Satırlar"},"textfield":{"title":"Metin Girişi Özellikleri","name":"Ad","value":"Değer","charWidth":"Karakter Genişliği","maxChars":"En Fazla Karakter","type":"Tür","typeText":"Metin","typePass":"Şifre","typeEmail":"E-posta","typeSearch":"Ara","typeTel":"Telefon Numarası","typeUrl":"URL"}},"format":{"label":"Biçim","panelTitle":"Biçim","tag_address":"Adres","tag_div":"Paragraf (DIV)","tag_h1":"Başlık 1","tag_h2":"Başlık 2","tag_h3":"Başlık 3","tag_h4":"Başlık 4","tag_h5":"Başlık 5","tag_h6":"Başlık 6","tag_p":"Normal","tag_pre":"Biçimli"},"horizontalrule":{"toolbar":"Yatay Satır Ekle"},"iframe":{"border":"Çerceve sınırlarını göster","noUrl":"Lütfen IFrame köprü (URL) bağlantısını yazın","scrolling":"Kaydırma çubuklarını aktif et","title":"IFrame Özellikleri","toolbar":"IFrame"},"image":{"alertUrl":"Lütfen resmin URL'sini yazınız","alt":"Alternatif Yazı","border":"Kenar","btnUpload":"Sunucuya Yolla","button2Img":"Seçili resim butonunu basit resime çevirmek istermisiniz?","hSpace":"Yatay Boşluk","img2Button":"Seçili olan resimi, resimli butona çevirmek istermisiniz?","infoTab":"Resim Bilgisi","linkTab":"Köprü","lockRatio":"Oranı Kilitle","menu":"Resim Özellikleri","resetSize":"Boyutu Başa Döndür","title":"Resim Özellikleri","titleButton":"Resimli Düğme Özellikleri","upload":"Karşıya Yükle","urlMissing":"Resmin URL kaynağı eksiktir.","vSpace":"Dikey Boşluk","validateBorder":"Çerçeve tam sayı olmalıdır.","validateHSpace":"HSpace tam sayı olmalıdır.","validateVSpace":"VSpace tam sayı olmalıdır."},"indent":{"indent":"Sekme Arttır","outdent":"Sekme Azalt"},"smiley":{"options":"İfade Seçenekleri","title":"İfade Ekle","toolbar":"İfade"},"justify":{"block":"İki Kenara Yaslanmış","center":"Ortalanmış","left":"Sola Dayalı","right":"Sağa Dayalı"},"language":{"button":"Dili seç","remove":"Dili kaldır"},"link":{"acccessKey":"Erişim Tuşu","advanced":"Gelişmiş","advisoryContentType":"Danışma İçerik Türü","advisoryTitle":"Danışma Başlığı","anchor":{"toolbar":"Bağlantı Ekle/Düzenle","menu":"Bağlantı Özellikleri","title":"Bağlantı Özellikleri","name":"Bağlantı Adı","errorName":"Lütfen bağlantı için ad giriniz","remove":"Bağlantıyı Kaldır"},"anchorId":"Eleman Kimlik Numarası ile","anchorName":"Bağlantı Adı ile","charset":"Bağlı Kaynak Karakter Gurubu","cssClasses":"Biçem Sayfası Sınıfları","emailAddress":"E-Posta Adresi","emailBody":"İleti Gövdesi","emailSubject":"İleti Konusu","id":"Id","info":"Link Bilgisi","langCode":"Dil Yönü","langDir":"Dil Yönü","langDirLTR":"Soldan Sağa (LTR)","langDirRTL":"Sağdan Sola (RTL)","menu":"Link Düzenle","name":"Ad","noAnchors":"(Bu belgede hiç çapa yok)","noEmail":"Lütfen E-posta adresini yazın","noUrl":"Lütfen Link URL'sini yazın","other":"<diğer>","popupDependent":"Bağımlı (Netscape)","popupFeatures":"Yeni Açılan Pencere Özellikleri","popupFullScreen":"Tam Ekran (IE)","popupLeft":"Sola Göre Konum","popupLocationBar":"Yer Çubuğu","popupMenuBar":"Menü Çubuğu","popupResizable":"Resizable","popupScrollBars":"Kaydırma Çubukları","popupStatusBar":"Durum Çubuğu","popupToolbar":"Araç Çubuğu","popupTop":"Yukarıya Göre Konum","rel":"İlişki","selectAnchor":"Bağlantı Seç","styles":"Biçem","tabIndex":"Sekme İndeksi","target":"Hedef","targetFrame":"<çerçeve>","targetFrameName":"Hedef Çerçeve Adı","targetPopup":"<yeni açılan pencere>","targetPopupName":"Yeni Açılan Pencere Adı","title":"Link","toAnchor":"Bu sayfada çapa","toEmail":"E-Posta","toUrl":"URL","toolbar":"Link Ekle/Düzenle","type":"Link Türü","unlink":"Köprü Kaldır","upload":"Karşıya Yükle"},"list":{"bulletedlist":"Simgeli Liste","numberedlist":"Numaralı Liste"},"liststyle":{"armenian":"Ermenice sayılandırma","bulletedTitle":"Simgeli Liste Özellikleri","circle":"Daire","decimal":"Ondalık (1, 2, 3, vs.)","decimalLeadingZero":"Başı sıfırlı ondalık (01, 02, 03, vs.)","disc":"Disk","georgian":"Gürcüce numaralandırma (an, ban, gan, vs.)","lowerAlpha":"Küçük Alpha (a, b, c, d, e, vs.)","lowerGreek":"Küçük Greek (alpha, beta, gamma, vs.)","lowerRoman":"Küçük Roman (i, ii, iii, iv, v, vs.)","none":"Yok","notset":"<ayarlanmamış>","numberedTitle":"Sayılandırılmış Liste Özellikleri","square":"Kare","start":"Başla","type":"Tipi","upperAlpha":"Büyük Alpha (A, B, C, D, E, vs.)","upperRoman":"Büyük Roman (I, II, III, IV, V, vs.)","validateStartNumber":"Liste başlangıcı tam sayı olmalıdır."},"magicline":{"title":"Parağrafı buraya ekle"},"maximize":{"maximize":"Büyült","minimize":"Küçült"},"newpage":{"toolbar":"Yeni Sayfa"},"pagebreak":{"alt":"Sayfa Sonu","toolbar":"Sayfa Sonu Ekle"},"pastetext":{"button":"Düz Metin Olarak Yapıştır","title":"Düz Metin Olarak Yapıştır"},"pastefromword":{"confirmCleanup":"Yapıştırmaya çalıştığınız metin Word'den kopyalanmıştır. Yapıştırmadan önce silmek istermisiniz?","error":"Yapıştırmadaki veri bilgisi hata düzelene kadar silinmeyecektir","title":"Word'den Yapıştır","toolbar":"Word'den Yapıştır"},"preview":{"preview":"Ön İzleme"},"print":{"toolbar":"Yazdır"},"removeformat":{"toolbar":"Biçimi Kaldır"},"save":{"toolbar":"Kaydet"},"selectall":{"toolbar":"Tümünü Seç"},"showblocks":{"toolbar":"Blokları Göster"},"sourcearea":{"toolbar":"Kaynak"},"specialchar":{"options":"Özel Karakter Seçenekleri","title":"Özel Karakter Seç","toolbar":"Özel Karakter Ekle"},"scayt":{"btn_about":"SCAYT'ı hakkında","btn_dictionaries":"Sözlükler","btn_disable":"SCAYT'ı pasifleştir","btn_enable":"SCAYT'ı etkinleştir","btn_langs":"Diller","btn_options":"Seçenekler","text_title":""},"stylescombo":{"label":"Biçem","panelTitle":"Stilleri Düzenliyor","panelTitle1":"Blok Stilleri","panelTitle2":"Inline Stilleri","panelTitle3":"Nesne Stilleri"},"table":{"border":"Kenar Kalınlığı","caption":"Başlık","cell":{"menu":"Hücre","insertBefore":"Hücre Ekle - Önce","insertAfter":"Hücre Ekle - Sonra","deleteCell":"Hücre Sil","merge":"Hücreleri Birleştir","mergeRight":"Birleştir - Sağdaki İle ","mergeDown":"Birleştir - Aşağıdaki İle ","splitHorizontal":"Hücreyi Yatay Böl","splitVertical":"Hücreyi Dikey Böl","title":"Hücre Özellikleri","cellType":"Hücre Tipi","rowSpan":"Satırlar Mesafesi (Span)","colSpan":"Sütünlar Mesafesi (Span)","wordWrap":"Kelime Kaydırma","hAlign":"Düşey Hizalama","vAlign":"Yataş Hizalama","alignBaseline":"Tabana","bgColor":"Arkaplan Rengi","borderColor":"Çerçeve Rengi","data":"Veri","header":"Başlık","yes":"Evet","no":"Hayır","invalidWidth":"Hücre genişliği sayı olmalıdır.","invalidHeight":"Hücre yüksekliği sayı olmalıdır.","invalidRowSpan":"Satırların mesafesi tam sayı olmalıdır.","invalidColSpan":"Sütünların mesafesi tam sayı olmalıdır.","chooseColor":"Seçiniz"},"cellPad":"Izgara yazı arası","cellSpace":"Izgara kalınlığı","column":{"menu":"Sütun","insertBefore":"Kolon Ekle - Önce","insertAfter":"Kolon Ekle - Sonra","deleteColumn":"Sütun Sil"},"columns":"Sütunlar","deleteTable":"Tabloyu Sil","headers":"Başlıklar","headersBoth":"Her İkisi","headersColumn":"İlk Sütun","headersNone":"Yok","headersRow":"İlk Satır","invalidBorder":"Çerceve büyüklüklüğü sayı olmalıdır.","invalidCellPadding":"Hücre aralığı (padding) sayı olmalıdır.","invalidCellSpacing":"Hücre boşluğu (spacing) sayı olmalıdır.","invalidCols":"Sütün sayısı 0 sayısından büyük olmalıdır.","invalidHeight":"Tablo yüksekliği sayı olmalıdır.","invalidRows":"Satır sayısı 0 sayısından büyük olmalıdır.","invalidWidth":"Tablo genişliği sayı olmalıdır.","menu":"Tablo Özellikleri","row":{"menu":"Satır","insertBefore":"Satır Ekle - Önce","insertAfter":"Satır Ekle - Sonra","deleteRow":"Satır Sil"},"rows":"Satırlar","summary":"Özet","title":"Tablo Özellikleri","toolbar":"Tablo","widthPc":"yüzde","widthPx":"piksel","widthUnit":"genişlik birimi"},"undo":{"redo":"Tekrarla","undo":"Geri Al"},"wsc":{"btnIgnore":"Yoksay","btnIgnoreAll":"Tümünü Yoksay","btnReplace":"Değiştir","btnReplaceAll":"Tümünü Değiştir","btnUndo":"Geri Al","changeTo":"Şuna değiştir:","errorLoading":"Uygulamada yüklerken hata oluştu: %s.","ieSpellDownload":"Yazım denetimi yüklenmemiş. Şimdi yüklemek ister misiniz?","manyChanges":"Yazım denetimi tamamlandı: %1 kelime değiştirildi","noChanges":"Yazım denetimi tamamlandı: Hiçbir kelime değiştirilmedi","noMispell":"Yazım denetimi tamamlandı: Yanlış yazıma rastlanmadı","noSuggestions":"- Öneri Yok -","notAvailable":"Üzügünüz, bu servis şuanda hizmet dışıdır.","notInDic":"Sözlükte Yok","oneChange":"Yazım denetimi tamamlandı: Bir kelime değiştirildi","progress":"Yazım denetimi işlemde...","title":"Yazımı Denetle","toolbar":"Yazım Denetimi"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/tt.js b/wqflask/wqflask/static/packages/ckeditor/lang/tt.js
deleted file mode 100644
index 6811d6b1..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/tt.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['tt']={"editor":"Форматлаулы текÑÑ‚ өлкәÑе","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"Ярдәм өчен ALT 0 баÑыгыз","browseServer":"Сервер карап чыгу","url":"Сылталама","protocol":"Протокол","upload":"Йөкләү","uploadSubmit":"Серверга җибәрү","image":"РәÑем","flash":"Флеш","form":"Форма","checkbox":"ЧекбокÑ","radio":"Радио төймә","textField":"ТекÑÑ‚ кыры","textarea":"ТекÑÑ‚ мәйданы","hiddenField":"Яшерен кыр","button":"Төймə","select":"Сайлау кыры","imageButton":"РәÑемле төймə","notSet":"<билгеләнмәгән>","id":"Id","name":"ИÑем","langDir":"Язылыш юнəлеше","langDirLtr":"Сулдан уңга Ñзылыш (LTR)","langDirRtl":"Уңнан Ñулга Ñзылыш (RTL)","langCode":"Тел коды","longDescr":"Җентекле таÑвирламага Ñылталама","cssClass":"Стильләр клаÑÑлары","advisoryTitle":"Киңәш иÑем","cssStyle":"Стиль","ok":"Тәмам","cancel":"Баш тарту","close":"Чыгу","preview":"Карап алу","resize":"Зурлыкны үзгәртү","generalTab":"Төп","advancedTab":"Киңәйтелгән көйләүләр","validateNumberFailed":"Әлеге кыйммәт Ñан түгел","confirmNewPage":"Any unsaved changes to this content will be lost. Are you sure you want to load new page?","confirmCancel":"You have changed some options. Are you sure you want to close the dialog window?","options":"Үзлекләр","target":"МакÑат","targetNew":"Яңа тәрәзә (_blank)","targetTop":"Ó¨Ñке тәрәзә (_top)","targetSelf":"Шул үк тәрәзә (_self)","targetParent":"Ðна тәрәзә (_parent)","langDirLTR":"Сулдан уңга Ñзылыш (LTR)","langDirRTL":"Уңнан Ñулга Ñзылыш (RTL)","styles":"Стиль","cssClasses":"Стильләр клаÑÑлары","width":"Киңлек","height":"Биеклек","align":"Тигезләү","alignLeft":"Сул Ñкка","alignRight":"Уң Ñкка","alignCenter":"Үзәккә","alignJustify":"Киңлеккә карап тигезләү","alignTop":"Ó¨Ñкә","alignMiddle":"Уртага","alignBottom":"ÐÑка","alignNone":"None","invalidValue":"Ð”Ó©Ñ€ÐµÑ Ð±ÑƒÐ»Ð¼Ð°Ð³Ð°Ð½ кыйммәт","invalidHeight":"Биеклек Ñан булырга тиеш","invalidWidth":"Киңлек Ñан булырга тиеш","invalidCssLength":"Value specified for the \"%1\" field must be a positive number with or without a valid CSS measurement unit (px, %, in, cm, mm, em, ex, pt, or pc).","invalidHtmlLength":"Value specified for the \"%1\" field must be a positive number with or without a valid HTML measurement unit (px or %).","invalidInlineStyle":"Value specified for the inline style must consist of one or more tuples with the format of \"name : value\", separated by semi-colons.","cssLengthTooltip":"Enter a number for a value in pixels or a number with a valid CSS unit (px, %, in, cm, mm, em, ex, pt, or pc).","unavailable":"%1<span class=\"cke_accessibility\">, unavailable</span>"},"about":{"copy":"Copyright &copy; $1. Бар хокуклар Ñакланган","dlgTitle":"CKEditor турында","help":"Check $1 for help.","moreInfo":"For licensing information please visit our web site:","title":"CKEditor турында","userGuide":"CKEditor кулланмаÑÑ‹"},"basicstyles":{"bold":"Калын","italic":"КурÑив","strike":"Сызылган","subscript":"ÐÑкы индекÑ","superscript":"Ó¨Ñке индекÑ","underline":"ÐÑтына Ñызылган"},"bidi":{"ltr":"Сулдан уңга Ñзылыш","rtl":"Уңнан Ñулга Ñзылыш"},"blockquote":{"toolbar":"Өземтә блогы"},"clipboard":{"copy":"Күчермәләү","copyError":"Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне Ñ‚Ñ‹Ñ. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.","cut":"КиÑеп алу","cutError":"Браузерыгызның иминлек үзлекләре автоматик рәвештә күчермәләү үтәүне Ñ‚Ñ‹Ñ. Тиз төймәләрне (Ctrl/Cmd+C) кулланыгыз.","paste":"Ó¨ÑÑ‚Ó™Ò¯","pasteArea":"Ó¨ÑÑ‚Ó™Ò¯ мәйданы","pasteMsg":"Please paste inside the following box using the keyboard (<strong>Ctrl/Cmd+V</strong>) and hit OK","securityMsg":"Because of your browser security settings, the editor is not able to access your clipboard data directly. You are required to paste it again in this window.","title":"Ó¨ÑÑ‚Ó™Ò¯"},"button":{"selectedLabel":"%1 (Сайланган)"},"colorbutton":{"auto":"Ðвтоматик","bgColorTitle":"Фон Ñ‚Ó©Ñе","colors":{"000":"Кара","800000":"Бордо","8B4513":"Дарчин","2F4F4F":"ÐÑпид Ñоры","008080":"Күкле-Ñшелле","000080":"Куе күк","4B0082":"Индиго","696969":"Куе Ñоры","B22222":"Кармин","A52A2A":"Ð§Ð¸Ñ ÐºÑ‹Ð·Ñ‹Ð»","DAA520":"Ðлтын каен","006400":"Үлән","40E0D0":"Фирәзә","0000CD":"ФарÑÑ‹ күк","800080":"Шәмәхә","808080":"Соры","F00":"Кызыл","FF8C00":"Кабак","FFD700":"Ðлтын","008000":"Яшел","0FF":"Ðчык зәңгәр","00F":"Зәңгәр","EE82EE":"Миләүшә","A9A9A9":"Ðчык Ñоры","FFA07A":"Кызгылт Ñары алÑу","FFA500":"Кызгылт Ñары","FFFF00":"Сары","00FF00":"Лайм","AFEEEE":"Тонык күк","ADD8E6":"Тонык күкбаш","DDA0DD":"ÐкÑыл шәмәхә","D3D3D3":"Ðчык Ñоры","FFF0F5":"Ðл ала миләүшә","FAEBD7":"Җитен","FFFFE0":"Ðчык Ñары","F0FFF0":"ÐкÑыл көрән","F0FFFF":"Ðп-ак","F0F8FF":"ÐкÑыл зәңгәр диңгез","E6E6FA":"Ðла миләүшә","FFF":"Ðк"},"more":"Башка Ñ‚Ó©Ñләр","panelTitle":"ТөÑләр","textColorTitle":"ТекÑÑ‚ Ñ‚Ó©Ñе"},"colordialog":{"clear":"Бушату","highlight":"Билгеләү","options":"Ð¢Ó©Ñ ÐºÓ©Ð¹Ð»Ó™Ò¯Ð»Ó™Ñ€Ðµ","selected":"Сайланган Ñ‚Ó©Ñләр","title":"Ð¢Ó©Ñ Ñайлау"},"templates":{"button":"Шаблоннар","emptyListMsg":"(Шаблоннар билгеләнмәгән)","insertOption":"Әлеге Ñчтәлекне алмаштыру","options":"Шаблон үзлекләре","selectPromptMsg":"Please select the template to open in the editor","title":"Эчтәлек шаблоннары"},"contextmenu":{"options":"Context Menu Options"},"div":{"IdInputLabel":"Идентификатор","advisoryTitleInputLabel":"Киңәш иÑем","cssClassInputLabel":"Стильләр клаÑÑлары","edit":"Edit Div","inlineStyleInputLabel":"Эчке Ñтиль","langDirLTRLabel":"Сулдан уңга Ñзылыш (LTR)","langDirLabel":"Язылыш юнəлеше","langDirRTLLabel":"Уңнан Ñулга Ñзылыш (RTL)","languageCodeInputLabel":"Тел коды","remove":"Remove Div","styleSelectLabel":"Стиль","title":"Create Div Container","toolbar":"Create Div Container"},"toolbar":{"toolbarCollapse":"Collapse Toolbar","toolbarExpand":"Expand Toolbar","toolbarGroups":{"document":"Документ","clipboard":"Ðлмашу буферы/Кайтару","editing":"Төзәтү","forms":"Формалар","basicstyles":"Төп Ñтильләр","paragraph":"Параграф","links":"Сылталамалар","insert":"Ó¨ÑÑ‚Ó™Ò¯","styles":"Стильләр","colors":"ТөÑләр","tools":"Кораллар"},"toolbars":"Editor toolbars"},"elementspath":{"eleLabel":"Elements path","eleTitle":"%1 element"},"find":{"find":"Эзләү","findOptions":"Эзләү көйләүләре","findWhat":"ÐәрÑÓ™ Ñзләргә:","matchCase":"Баш һәм юл хәрефләрен иÑәпкә алу","matchCyclic":"Кабатлап Ñзләргә","matchWord":"Сүзләрне тулыÑынча гына Ñзләү","notFoundMsg":"Эзләнгән текÑÑ‚ табылмады.","replace":"Ðлмаштыру","replaceAll":"БарыÑын да алмаштыру","replaceSuccessMsg":"%1 урында(ларда) алмаштырылган.","replaceWith":"ÐәрÑәгә алмаштыру:","title":"Эзләп табу һәм алмаштыру"},"fakeobjects":{"anchor":"Якорь","flash":"Флеш анимациÑÑÑ‹","hiddenfield":"Яшерен кыр","iframe":"IFrame","unknown":"Танылмаган объект"},"flash":{"access":"Script Access","accessAlways":"Һəрвакыт","accessNever":"Беркайчан да","accessSameDomain":"Same domain","alignAbsBottom":"Иң аÑка","alignAbsMiddle":"Төгәл уртада","alignBaseline":"ТаÑныч Ñызыгы","alignTextTop":"Text Top","bgcolor":"Фон Ñ‚Ó©Ñе","chkFull":"Allow Fullscreen","chkLoop":"Әйләнеш","chkMenu":"Enable Flash Menu","chkPlay":"Auto Play","flashvars":"Variables for Flash","hSpace":"HSpace","properties":"Флеш үзлекләре","propertiesTab":"Үзлекләр","quality":"Сыйфат","qualityAutoHigh":"Ðвто югары Ñыйфат","qualityAutoLow":"Ðвто түбән Ñыйфат","qualityBest":"Иң югары Ñыйфат","qualityHigh":"Югары","qualityLow":"Түбəн","qualityMedium":"Уртача","scale":"Scale","scaleAll":"БарыÑын күрÑәтү","scaleFit":"Exact Fit","scaleNoBorder":"ЧикÑез","title":"Флеш үзлекләре","vSpace":"VSpace","validateHSpace":"HSpace must be a number.","validateSrc":"URL must not be empty.","validateVSpace":"VSpace must be a number.","windowMode":"Тəрəзə тәртибе","windowModeOpaque":"Үтә күренмәле","windowModeTransparent":"Үтə күренмəле","windowModeWindow":"Тəрəзə"},"font":{"fontSize":{"label":"Зурлык","voiceLabel":"Шрифт зурлыклары","panelTitle":"Шрифт зурлыклары"},"label":"Шрифт","panelTitle":"Шрифт иÑеме","voiceLabel":"Шрифт"},"forms":{"button":{"title":"Төймә үзлекләре","text":"Text (Value)","type":"Төр","typeBtn":"Төймә","typeSbm":"Submit","typeRst":"Reset"},"checkboxAndRadio":{"checkboxTitle":"Checkbox Properties","radioTitle":"Radio Button Properties","value":"Value","selected":"Сайланган"},"form":{"title":"Форма үзлекләре","menu":"Форма үзлекләре","action":"Гамәл","method":"ЫÑул","encoding":"Кодировка"},"hidden":{"title":"Яшерен кыр үзлекләре","name":"ИÑем","value":"Күләм"},"select":{"title":"Selection Field Properties","selectInfo":"Select Info","opAvail":"Available Options","value":"Күләм","size":"Зурлык","lines":"юллар","chkMulti":"Allow multiple selections","opText":"ТекÑÑ‚","opValue":"Күләм","btnAdd":"Кушу","btnModify":"Үзгәртү","btnUp":"Ó¨Ñкә","btnDown":"ÐÑка","btnSetValue":"Set as selected value","btnDelete":"Бетерү"},"textarea":{"title":"ТекÑÑ‚ мәйданы үзлекләре","cols":"Баганалар","rows":"Юллар"},"textfield":{"title":"ТекÑÑ‚ кыры үзлекләре","name":"ИÑем","value":"Күләм","charWidth":"Символлар киңлеге","maxChars":"Maximum Characters","type":"Төр","typeText":"ТекÑÑ‚","typePass":"Сер Ñүз","typeEmail":"Эл. почта","typeSearch":"Эзләү","typeTel":"Телефон номеры","typeUrl":"Сылталама"}},"format":{"label":"Форматлау","panelTitle":"Параграф форматлавы","tag_address":"ÐдреÑ","tag_div":"Гади (DIV)","tag_h1":"Башлам 1","tag_h2":"Башлам 2","tag_h3":"Башлам 3","tag_h4":"Башлам 4","tag_h5":"Башлам 5","tag_h6":"Башлам 6","tag_p":"Гади","tag_pre":"Форматлаулы"},"horizontalrule":{"toolbar":"Ятма Ñызык Ó©ÑÑ‚Ó™Ò¯"},"iframe":{"border":"Frame чикләрен күрÑәтү","noUrl":"Please type the iframe URL","scrolling":"Enable scrollbars","title":"IFrame үзлекләре","toolbar":"IFrame"},"image":{"alertUrl":"Please type the image URL","alt":"Ðльтернатив текÑÑ‚","border":"Чик","btnUpload":"Серверга җибәрү","button2Img":"Do you want to transform the selected image button on a simple image?","hSpace":"HSpace","img2Button":"Do you want to transform the selected image on a image button?","infoTab":"РәÑем таÑвирламаÑÑ‹","linkTab":"Сылталама","lockRatio":"Lock Ratio","menu":"РәÑем үзлекләре","resetSize":"Reset Size","title":"РәÑем үзлекләре","titleButton":"РәÑемле төймə үзлекләре","upload":"Йөкләү","urlMissing":"Image source URL is missing.","vSpace":"VSpace","validateBorder":"Чик киңлеге Ñан булырга тиеш","validateHSpace":"HSpace must be a whole number.","validateVSpace":"VSpace must be a whole number."},"indent":{"indent":"ОтÑтупны арттыру","outdent":"ОтÑтупны кечерәйтү"},"smiley":{"options":"Смайл көйләүләре","title":"Смайл Ó©ÑÑ‚Ó™Ò¯","toolbar":"Смайл"},"justify":{"block":"Киңлеккә карап тигезләү","center":"Үзәккә тигезләү","left":"Сул Ñк кырыйдан тигезләү","right":"Уң Ñк кырыйдан тигезләү"},"language":{"button":"Тел Ñайлау","remove":"Телне бетерү"},"link":{"acccessKey":"Access Key","advanced":"Киңәйтелгән көйләүләр","advisoryContentType":"Advisory Content Type","advisoryTitle":"Киңәш иÑем","anchor":{"toolbar":"Якорь","menu":"Якорьне үзгәртү","title":"Якорь үзлекләре","name":"Якорь иÑеме","errorName":"Якорьнең иÑемен Ñзыгыз","remove":"Якорьне бетерү"},"anchorId":"Элемент идентификаторы буенча","anchorName":"Якорь иÑеме буенча","charset":"Linked Resource Charset","cssClasses":"Стильләр клаÑÑлары","emailAddress":"Электрон почта адреÑÑ‹","emailBody":"Хат Ñчтәлеге","emailSubject":"Хат темаÑÑ‹","id":"Идентификатор","info":"Сылталама таÑвирламаÑÑ‹","langCode":"Тел коды","langDir":"Язылыш юнəлеше","langDirLTR":"Сулдан уңга Ñзылыш (LTR)","langDirRTL":"Уңнан Ñулга Ñзылыш (RTL)","menu":"Сылталамаyны үзгәртү","name":"ИÑем","noAnchors":"(Әлеге документта Ñкорьләр табылмады)","noEmail":"Электрон почта адреÑын Ñзыгыз","noUrl":"Сылталаманы Ñзыгыз","other":"<бүтән>","popupDependent":"Dependent (Netscape)","popupFeatures":"Popup Window Features","popupFullScreen":"Full Screen (IE)","popupLeft":"Left Position","popupLocationBar":"Location Bar","popupMenuBar":"Menu Bar","popupResizable":"Resizable","popupScrollBars":"Scroll Bars","popupStatusBar":"Status Bar","popupToolbar":"Toolbar","popupTop":"Top Position","rel":"Бәйләнеш","selectAnchor":"Якорьне Ñайлау","styles":"Стиль","tabIndex":"Tab Index","target":"МакÑат","targetFrame":"<frame>","targetFrameName":"Target Frame Name","targetPopup":"<popup window>","targetPopupName":"Popup Window Name","title":"Сылталама","toAnchor":"Якорьне текÑÑ‚ белән бәйләү","toEmail":"Электрон почта","toUrl":"Сылталама","toolbar":"Сылталама","type":"Сылталама төре","unlink":"Сылталаманы бетерү","upload":"Йөкләү"},"list":{"bulletedlist":"Маркерлы тезмә Ó©ÑÑ‚Ó™Ò¯/бетерү","numberedlist":" Ðомерланган тезмә Ó©ÑÑ‚Ó™Ò¯/бетерү"},"liststyle":{"armenian":"Armenian numbering","bulletedTitle":"Маркерлы тезмә үзлекләре","circle":"Түгәрәк","decimal":"Унарлы (1, 2, 3, ...)","decimalLeadingZero":"Ðоль белән башланган унарлы (01, 02, 03, ...)","disc":"ДиÑк","georgian":"Georgian numbering (an, ban, gan, etc.)","lowerAlpha":"Lower Alpha (a, b, c, d, e, etc.)","lowerGreek":"Lower Greek (alpha, beta, gamma, etc.)","lowerRoman":"Lower Roman (i, ii, iii, iv, v, etc.)","none":"Һичбер","notset":"<билгеләнмәгән>","numberedTitle":"Numbered List Properties","square":"Шакмак","start":"Башлау","type":"Төр","upperAlpha":"Upper Alpha (A, B, C, D, E, etc.)","upperRoman":"Upper Roman (I, II, III, IV, V, etc.)","validateStartNumber":"List start number must be a whole number."},"magicline":{"title":"Бирегә параграф Ó©ÑÑ‚Ó™Ò¯"},"maximize":{"maximize":"Зурайту","minimize":"Кечерәйтү"},"newpage":{"toolbar":"Яңа бит"},"pagebreak":{"alt":"Бит бүлгече","toolbar":"БаÑтыру өчен бит бүлгечен Ó©ÑÑ‚Ó™Ò¯"},"pastetext":{"button":"ФорматлауÑыз текÑÑ‚ Ó©ÑÑ‚Ó™Ò¯","title":"ФорматлауÑыз текÑÑ‚ Ó©ÑÑ‚Ó™Ò¯"},"pastefromword":{"confirmCleanup":"The text you want to paste seems to be copied from Word. Do you want to clean it before pasting?","error":"It was not possible to clean up the pasted data due to an internal error","title":"Word'тан Ó©ÑÑ‚Ó™Ò¯","toolbar":"Word'тан Ó©ÑÑ‚Ó™Ò¯"},"preview":{"preview":"Карап алу"},"print":{"toolbar":"БаÑтыру"},"removeformat":{"toolbar":"Форматлауны бетерү"},"save":{"toolbar":"Саклау"},"selectall":{"toolbar":"БарыÑын Ñайлау"},"showblocks":{"toolbar":"Блокларны күрÑәтү"},"sourcearea":{"toolbar":"Чыганак"},"specialchar":{"options":"МахÑÑƒÑ Ñимвол үзлекләре","title":"МахÑÑƒÑ Ñимвол Ñайлау","toolbar":"МахÑÑƒÑ Ñимвол Ó©ÑÑ‚Ó™Ò¯"},"scayt":{"btn_about":"About SCAYT","btn_dictionaries":"Dictionaries","btn_disable":"Disable SCAYT","btn_enable":"Enable SCAYT","btn_langs":"Languages","btn_options":"Options","text_title":""},"stylescombo":{"label":"Стильләр","panelTitle":"Форматлау Ñтильләре","panelTitle1":"Блоклар Ñтильләре","panelTitle2":"Эчке Ñтильләр","panelTitle3":"Объектлар Ñтильләре"},"table":{"border":"Чик калынлыгы","caption":"ИÑем","cell":{"menu":"Күзәнәк","insertBefore":"Ðлдына күзәнәк Ó©ÑÑ‚Ó™Ò¯","insertAfter":"Ðртына күзәнәк Ó©ÑÑ‚Ó™Ò¯","deleteCell":"Күзәнәкләрне бетерү","merge":"Күзәнәкләрне берләштерү","mergeRight":"Уң Ñктагы белән берләштерү","mergeDown":"ÐÑтагы белән берләштерү","splitHorizontal":"Күзәнәкне юлларга бүлү","splitVertical":"Күзәнәкне баганаларга бүлү","title":"Күзәнәк үзлекләре","cellType":"Күзәнәк төре","rowSpan":"Юлларны берләштерү","colSpan":"Баганаларны берләштерү","wordWrap":"ТекÑтны күчерү","hAlign":"Ятма тигезләү","vAlign":"ÐÑма тигезләү","alignBaseline":"ТаÑныч Ñызыгы","bgColor":"Фон Ñ‚Ó©Ñе","borderColor":"Чик Ñ‚Ó©Ñе","data":"Мәгълүмат","header":"Башлык","yes":"Әйе","no":"Юк","invalidWidth":"Cell width must be a number.","invalidHeight":"Cell height must be a number.","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"Сайлау"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"Багана","insertBefore":"Сулдан баганалар Ó©ÑÑ‚Ó™Ò¯","insertAfter":"Уңнан баганалар Ó©ÑÑ‚Ó™Ò¯","deleteColumn":"Баганаларны бетерү"},"columns":"Баганалар","deleteTable":"Таблицаны бетерү","headers":"Башлыклар","headersBoth":"ИкеÑе дә","headersColumn":"Беренче багана","headersNone":"Һичбер","headersRow":"Беренче юл","invalidBorder":"Border size must be a number.","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"Number of columns must be a number greater than 0.","invalidHeight":"Table height must be a number.","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"Table width must be a number.","menu":"Таблица үзлекләре","row":{"menu":"Юл","insertBefore":"Ó¨Ñтән юллар Ó©ÑÑ‚Ó™Ò¯","insertAfter":"ÐÑтан юллар Ó©ÑÑ‚Ó™Ò¯","deleteRow":"Юлларны бетерү"},"rows":"Юллар","summary":"Йомгаклау","title":"Таблица үзлекләре","toolbar":"Таблица","widthPc":"процент","widthPx":"Ðокталар","widthUnit":"киңлек берәмлеге"},"undo":{"redo":"Кабатлау","undo":"Кайтару"},"wsc":{"btnIgnore":"Ignore","btnIgnoreAll":"Ignore All","btnReplace":"Replace","btnReplaceAll":"Replace All","btnUndo":"Undo","changeTo":"Change to","errorLoading":"Error loading application service host: %s.","ieSpellDownload":"Spell checker not installed. Do you want to download it now?","manyChanges":"Spell check complete: %1 words changed","noChanges":"Spell check complete: No words changed","noMispell":"Spell check complete: No misspellings found","noSuggestions":"- No suggestions -","notAvailable":"Sorry, but service is unavailable now.","notInDic":"Not in dictionary","oneChange":"Spell check complete: One word changed","progress":"Spell check in progress...","title":"Spell Check","toolbar":"Check Spelling"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/ug.js b/wqflask/wqflask/static/packages/ckeditor/lang/ug.js
deleted file mode 100644
index 42b93990..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/ug.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['ug']={"editor":"تەھرىرلىگۈچ","editorPanel":"Rich Text Editor panel","common":{"editorHelp":"ALT+0 نى بÛسىپ ياردەمنى كۆرۈڭ","browseServer":"كۆرسىتىش مۇلازىمÛتىر","url":"ئەسلى ھۆججەت","protocol":"ÙƒÛلىشىم","upload":"يۈكلە","uploadSubmit":"مۇلازىمÛتىرغا يۈكلە","image":"سۈرەت","flash":"Flash","form":"جەدۋەل","checkbox":"ÙƒÛ†Ù¾ تاللاش رامكىسى","radio":"يەككە تاللاش توپچىسى","textField":"يەككە قۇر تÛكىست","textarea":"ÙƒÛ†Ù¾ قۇر تÛكىست","hiddenField":"يوشۇرۇن دائىرە","button":"توپچا","select":"تىزىم/تىزىملىك","imageButton":"سۈرەت دائىرە","notSet":"‹تەڭشەلمىگەن›","id":"ID","name":"ئات","langDir":"تىل يۆنىلىشى","langDirLtr":"سولدىن ئوڭغا (LTR)","langDirRtl":"ئوڭدىن سولغا (RTL)","langCode":"تىل كودى","longDescr":"تەپسىلىي چۈشەندۈرۈش ئادرÛسى","cssClass":"ئۇسلۇب خىلىنىڭ ئاتى","advisoryTitle":"ماۋزۇ","cssStyle":"قۇر ئىچىدىكى ئۇسلۇبى","ok":"جەزملە","cancel":"ۋاز ÙƒÛ•Ú†","close":"تاقا","preview":"ئالدىن كۆزەت","resize":"چوڭلۇقىنى ئۆزگەرت","generalTab":"ئادەتتىكى","advancedTab":"ئالىي","validateNumberFailed":"سان پىچىمىدا كىرگۈزۈش زۆرۈر","confirmNewPage":"نۆۋەتتىكى پۈتۈك مەزمۇنى ساقلانمىدى، ÙŠÛÚ­Ù‰ پۈتۈك قۇرامسىز؟","confirmCancel":"قىسمەن ئۆزگەرتىش ساقلانمىدى، بۇ سۆزلەشكۈنى تاقامسىز؟","options":"تاللانما","target":"نىشان كۆزنەك","targetNew":"ÙŠÛÚ­Ù‰ كۆزنەك (_blank)","targetTop":"پۈتۈن بەت (_top)","targetSelf":"مەزكۇر كۆزنەك (_self)","targetParent":"ئاتا كۆزنەك (_parent)","langDirLTR":"سولدىن ئوڭغا (LTR)","langDirRTL":"ئوڭدىن سولغا (RTL)","styles":"ئۇسلۇبلار","cssClasses":"ئۇسلۇب خىللىرى","width":"كەڭلىك","height":"ئÛگىزلىك","align":"توغرىلىنىشى","alignLeft":"سول","alignRight":"ئوڭ","alignCenter":"ئوتتۇرا","alignJustify":"ئىككى تەرەپتىن توغرىلا","alignTop":"ئۈستى","alignMiddle":"ئوتتۇرا","alignBottom":"ئاستى","alignNone":"None","invalidValue":"ئىناۋەتسىز قىممەت.","invalidHeight":"ئÛگىزلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر","invalidWidth":"كەڭلىك چوقۇم رەقەم پىچىمىدا بولۇشى زۆرۈر","invalidCssLength":"بۇ سۆز بۆلىكى چوقۇم مۇۋاپىق بولغان CSS ئۇزۇنلۇق قىممىتى بولۇشى زۆرۈر، بىرلىكى (px, %, in, cm, mm, em, ex, pt ياكى pc)","invalidHtmlLength":"بۇ سۆز بۆلىكى چوقۇم بىرىكمە HTML ئۇزۇنلۇق قىممىتى بولۇشى ÙƒÛرەك. ئۆز ئىچىگە ئالىدىغان بىرلىك (px ياكى %)","invalidInlineStyle":"ئىچكى باغلانما ئۇسلۇبى چوقۇم Ú†Ûكىتلىك Ù¾Û•Ø´ بىلەن ئايرىلغان بىر ياكى ÙƒÛ†Ù¾ «خاسلىق ئاتى:خاسلىق قىممىتى» پىچىمىدا بولۇشى لازىم","cssLengthTooltip":"بۇ سۆز بۆلىكى بىرىكمە CSS ئۇزۇنلۇق قىممىتى بولۇشى ÙƒÛرەك. ئۆز ئىچىگە ئالىدىغان بىرلىك (px, %, in, cm, mm, em, ex, pt ياكى pc)","unavailable":"%1<span class=\\\\\"cke_accessibility\\\\\">ØŒ ئىشلەتكىلى بولمايدۇ</span>"},"about":{"copy":"Copyright &copy; $1. نەشر ھوقۇقىغا ئىگە","dlgTitle":"CKEditor ھەققىدە","help":"$1 نى زىيارەت قىلىپ ياردەمگە ئÛرىشىڭ","moreInfo":"تور تۇرايىمىزنى زىيارەت قىلىپ ÙƒÛلىشىمگە ئائىت تÛخىمۇ ÙƒÛ†Ù¾ ئۇچۇرغا ئÛرىشىڭ","title":"CKEditor ھەققىدە","userGuide":"CKEditor ئىشلەتكۈچى قوللانمىسى"},"basicstyles":{"bold":"توم","italic":"يانتۇ","strike":"ئۆچۈرۈش سىزىقى","subscript":"تۆۋەن ئىندÛكس","superscript":"يۇقىرى ئىندÛكس","underline":"ئاستى سىزىق"},"bidi":{"ltr":"تÛكىست يۆنىلىشى سولدىن ئوڭغا","rtl":"تÛكىست يۆنىلىشى ئوڭدىن سولغا"},"blockquote":{"toolbar":"بۆلەك نەقىل"},"clipboard":{"copy":"نەشر ھوقۇقىغا ئىگە بەلگىسى","copyError":"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كۆچۈر مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تÛز كۇنۇپكا (Ctrl/Cmd+C) ئارقىلىق تاماملاڭ","cut":"كەس","cutError":"تور كۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى تەھرىرلىگۈچنىڭ كەس مەشغۇلاتىنى ئۆزلۈكىدىن ئىجرا قىلىشىغا يول قويمايدۇ، ھەرپتاختا تÛز كۇنۇپكا (Ctrl/Cmd+X) ئارقىلىق تاماملاڭ","paste":"چاپلا","pasteArea":"چاپلاش دائىرىسى","pasteMsg":"ھەرپتاختا تÛز كۇنۇپكا (<STRONG>Ctrl/Cmd+V</STRONG>) نى ئىشلىتىپ مەزمۇننى تۆۋەندىكى رامكىغا كۆچۈرۈڭ، ئاندىن <STRONG>جەزملە</STRONG>نى بÛسىڭ","securityMsg":"توركۆرگۈڭىزنىڭ بىخەتەرلىك تەڭشىكى سەۋەبىدىن بۇ تەھرىرلىگۈچ چاپلاش تاختىسىدىكى مەزمۇننى بىۋاستە زىيارەت قىلالمايدۇ، بۇ كۆزنەكتە قايتا بىر Ù‚Ûتىم چاپلىشىڭىز ÙƒÛرەك.","title":"چاپلا"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"ئۆزلۈكىدىن","bgColorTitle":"تەگلىك رەڭگى","colors":{"000":"قارا","800000":"قىزغۇچ سÛرىق","8B4513":"توق قوڭۇر","2F4F4F":"قارامتۇل ÙŠÛشىل","008080":"كۆكۈش ÙŠÛشىل","000080":"قارامتۇل ÙƒÛ†Ùƒ","4B0082":"كۆكۈش كۈلرەڭ","696969":"قارامتۇل كۈلرەڭ","B22222":"خىش قىزىل","A52A2A":"قوڭۇر","DAA520":"ئالتۇن سÛرىق","006400":"توق ÙŠÛشىل","40E0D0":"ÙƒÛ†ÙƒÛˆÚ† ÙŠÛشىل","0000CD":"ئوتتۇراھال ÙƒÛ†Ùƒ","800080":"بىنەپشە","808080":"كۈلرەڭ","F00":"قىزىل","FF8C00":"توق قىزغۇچ سÛرىق","FFD700":"ئالتۇن","008000":"ÙŠÛشىل","0FF":"ÙŠÛشىل ÙƒÛ†Ùƒ","00F":"ÙƒÛ†Ùƒ","EE82EE":"قىزغۇچ بىنەپشە","A9A9A9":"توق كۈلرەڭ","FFA07A":"كاۋا Ú†Ûچىكى سÛرىق","FFA500":"قىزغۇچ سÛرىق","FFFF00":"سÛرىق","00FF00":"Lime","AFEEEE":"سۇس ھاۋا رەڭ","ADD8E6":"ئوچۇق ÙƒÛ†Ùƒ","DDA0DD":"قىزغۇچ بىنەپشە","D3D3D3":"سۇس ÙƒÛ†ÙƒÛˆÚ† كۈلرەڭ","FFF0F5":"سۇس قىزغۇچ بىنەپشە","FAEBD7":"Antique White","FFFFE0":"سۇس سÛرىق","F0FFF0":"Honeydew","F0FFFF":"ئاسمان كۆكى","F0F8FF":"سۇس ÙƒÛ†Ùƒ","E6E6FA":"سۇس بىنەپشە","FFF":"ئاق"},"more":"باشقا رەڭ","panelTitle":"رەڭ","textColorTitle":"تÛكىست رەڭگى"},"colordialog":{"clear":"تازىلا","highlight":"يورۇت","options":"رەڭ تاللانمىسى","selected":"رەڭ تاللاڭ","title":"رەڭ تاللاڭ"},"templates":{"button":"Ù‚Ûلىپ","emptyListMsg":"(Ù‚Ûلىپ يوق)","insertOption":"نۆۋەتتىكى مەزمۇننى ئالماشتۇر","options":"Ù‚Ûلىپ تاللانمىسى","selectPromptMsg":"تەھرىرلىگۈچنىڭ مەزمۇن Ù‚Ûلىپىنى تاللاڭ:","title":"مەزمۇن Ù‚Ûلىپى"},"contextmenu":{"options":"قىسقا يول تىزىملىك تاللانمىسى"},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"ماۋزۇ","cssClassInputLabel":"ئۇسلۇب تىپىنىڭ ئاتى","edit":"DIV تەھرىر","inlineStyleInputLabel":"قۇر ئىچىدىكى ئۇسلۇبى","langDirLTRLabel":"سولدىن ئوڭغا (LTR)","langDirLabel":"تىل يۆنىلىشى","langDirRTLLabel":"ئوڭدىن سولغا (RTL)","languageCodeInputLabel":"تىل كودى","remove":"DIV چىقىرىۋەت","styleSelectLabel":"ئۇسلۇب","title":"DIV قاچا قۇر","toolbar":"DIV قاچا قۇر"},"toolbar":{"toolbarCollapse":"قورال بالداقنى قاتلا","toolbarExpand":"قورال بالداقنى ياي","toolbarGroups":{"document":"پۈتۈك","clipboard":"چاپلاش تاختىسى/ÙŠÛنىۋال","editing":"تەھرىر","forms":"جەدۋەل","basicstyles":"ئاساسىي ئۇسلۇب","paragraph":"ئابزاس","links":"ئۇلانما","insert":"قىستۇر","styles":"ئۇسلۇب","colors":"رەڭ","tools":"قورال"},"toolbars":"قورال بالداق"},"elementspath":{"eleLabel":"ئÛÙ„ÛÙ…Ûنت يولى","eleTitle":"%1 ئÛÙ„ÛÙ…Ûنت"},"find":{"find":"ئىزدە","findOptions":"ئىزدەش تاللانمىسى","findWhat":"ئىزدە:","matchCase":"Ú†ÙˆÚ­ كىچىك ھەرپنى پەرقلەندۈر","matchCyclic":"ئايلانما ماسلىشىش","matchWord":"پۈتۈن سۆز ماسلىشىش","notFoundMsg":"بەلگىلەنگەن تÛكىستنى تاپالمىدى","replace":"ئالماشتۇر","replaceAll":"ھەممىنى ئالماشتۇر","replaceSuccessMsg":"جەمئى %1 جايدىكى ئالماشتۇرۇش تاماملاندى","replaceWith":"ئالماشتۇر:","title":"ئىزدەپ ئالماشتۇر"},"fakeobjects":{"anchor":"لەڭگەرلىك نۇقتا","flash":"Flash جانلاندۇرۇم","hiddenfield":"يوشۇرۇن دائىرە","iframe":"IFrame","unknown":"يوچۇن Ù†Û•Ú­"},"flash":{"access":"قوليازما زىيارەتكە يول قوي","accessAlways":"ھەمىشە","accessNever":"ھەرگىز","accessSameDomain":"ئوخشاش دائىرىدە","alignAbsBottom":"مۇتلەق ئاستى","alignAbsMiddle":"مۇتلەق ئوتتۇرا","alignBaseline":"ئاساسىي سىزىق","alignTextTop":"تÛكىست ئۈستىدە","bgcolor":"تەگلىك رەڭگى","chkFull":"پۈتۈن ئÛكراننى قوزغات","chkLoop":"دەۋرىي","chkMenu":"Flash تىزىملىكنى قوزغات","chkPlay":"ئۆزلۈكىدىن چال","flashvars":"Flash ئۆزگەرگۈچى","hSpace":"توغرىسىغا ئارىلىق","properties":"Flash خاسلىق","propertiesTab":"خاسلىق","quality":"سۈپەت","qualityAutoHigh":"يۇقىرى (ئاپتوماتىك)","qualityAutoLow":"تۆۋەن (ئاپتوماتىك)","qualityBest":"ئەڭ ياخشى","qualityHigh":"يۇقىرى","qualityLow":"تۆۋەن","qualityMedium":"ئوتتۇرا (ئاپتوماتىك)","scale":"نىسبىتى","scaleAll":"ھەممىنى كۆرسەت","scaleFit":"قەتئىي ماسلىشىش","scaleNoBorder":"گىرۋەك يوق","title":"ماۋزۇ","vSpace":"بويىغا ئارىلىق","validateHSpace":"توغرىسىغا ئارىلىق چوقۇم سان بولىدۇ","validateSrc":"ئەسلى ھۆججەت ئادرÛسىنى كىرگۈزۈڭ","validateVSpace":"بويىغا ئارىلىق چوقۇم سان بولىدۇ","windowMode":"كۆزنەك ھالىتى","windowModeOpaque":"خىرە","windowModeTransparent":"سۈزۈك","windowModeWindow":"كۆزنەك گەۋدىسى"},"font":{"fontSize":{"label":"چوڭلۇقى","voiceLabel":"خەت چوڭلۇقى","panelTitle":"چوڭلۇقى"},"label":"خەت نۇسخا","panelTitle":"خەت نۇسخا","voiceLabel":"خەت نۇسخا"},"forms":{"button":{"title":"توپچا خاسلىقى","text":"بەلگە (قىممەت)","type":"تىپى","typeBtn":"توپچا","typeSbm":"تاپشۇر","typeRst":"ئەسلىگە قايتۇر"},"checkboxAndRadio":{"checkboxTitle":"ÙƒÛ†Ù¾ تاللاش خاسلىقى","radioTitle":"تاق تاللاش توپچا خاسلىقى","value":"تاللىغان قىممەت","selected":"تاللانغان"},"form":{"title":"جەدۋەل خاسلىقى","menu":"جەدۋەل خاسلىقى","action":"مەشغۇلات","method":"ئۇسۇل","encoding":"جەدۋەل كودلىنىشى"},"hidden":{"title":"يوشۇرۇن دائىرە خاسلىقى","name":"ئات","value":"دەسلەپكى قىممىتى"},"select":{"title":"جەدۋەل/تىزىم خاسلىقى","selectInfo":"ئۇچۇر تاللاڭ","opAvail":"تاللاش تۈرلىرى","value":"قىممەت","size":"ئÛگىزلىكى","lines":"قۇر","chkMulti":"ÙƒÛ†Ù¾ تاللاشچان","opText":"تاللانما تÛكىستى","opValue":"تاللانما قىممىتى","btnAdd":"قوش","btnModify":"ئۆزگەرت","btnUp":"ئۈستىگە","btnDown":"ئاستىغا","btnSetValue":"دەسلەپكى تاللانما قىممىتىگە تەڭشە","btnDelete":"ئۆچۈر"},"textarea":{"title":" ÙƒÛ†Ù¾ قۇرلۇق تÛكىست خاسلىقى","cols":"ھەرپ كەڭلىكى","rows":"قۇر سانى"},"textfield":{"title":"تاق قۇرلۇق تÛكىست خاسلىقى","name":"ئات","value":"دەسلەپكى قىممىتى","charWidth":"ھەرپ كەڭلىكى","maxChars":"ئەڭ ÙƒÛ†Ù¾ ھەرپ سانى","type":"تىپى","typeText":"تÛكىست","typePass":"ئىم","typeEmail":"تورخەت","typeSearch":"ئىزدە","typeTel":"تÛÙ„ÛÙون نومۇر","typeUrl":"ئادرÛس"}},"format":{"label":"پىچىم","panelTitle":"پىچىم","tag_address":"ئادرÛس","tag_div":"ئابزاس (DIV)","tag_h1":"ماۋزۇ 1","tag_h2":"ماۋزۇ 2","tag_h3":"ماۋزۇ 3","tag_h4":"ماۋزۇ 4","tag_h5":"ماۋزۇ 5","tag_h6":"ماۋزۇ 6","tag_p":"ئادەتتىكى","tag_pre":"تىزىلغان پىچىم"},"horizontalrule":{"toolbar":"توغرا سىزىق قىستۇر"},"iframe":{"border":"كاندۇك گىرۋەكلىرىنى كۆرسەت","noUrl":"كاندۇكنىڭ ئادرÛسى(Url)نى كىرگۈزۈڭ","scrolling":"دومىلىما سۈرگۈچكە يول قوي","title":"IFrame خاسلىق","toolbar":"IFrame "},"image":{"alertUrl":"سۈرەت ئادرÛسىنى كىرگۈزۈڭ","alt":"تÛكىست ئالماشتۇر","border":"گىرۋەك چوڭلۇقى","btnUpload":"مۇلازىمÛتىرغا يۈكلە","button2Img":"نۆۋەتتىكى توپچىنى سۈرەتكە ئۆزگەرتەمسىز؟","hSpace":"توغرىسىغا ئارىلىقى","img2Button":"نۆۋەتتىكى سۈرەتنى توپچىغا ئۆزگەرتەمسىز؟","infoTab":"سۈرەت","linkTab":"ئۇلانما","lockRatio":"نىسبەتنى قۇلۇپلا","menu":"سۈرەت خاسلىقى","resetSize":"ئەسلى Ú†ÙˆÚ­Ù„Û‡Ù‚","title":"سۈرەت خاسلىقى","titleButton":"سۈرەت دائىرە خاسلىقى","upload":"يۈكلە","urlMissing":"سۈرەتنىڭ ئەسلى ھۆججەت ئادرÛسى ÙƒÛ•Ù…","vSpace":"بويىغا ئارىلىقى","validateBorder":"گىرۋەك چوڭلۇقى چوقۇم سان بولىدۇ","validateHSpace":"توغرىسىغا ئارىلىق چوقۇم پۈتۈن سان بولىدۇ","validateVSpace":"بويىغا ئارىلىق چوقۇم پۈتۈن سان بولىدۇ"},"indent":{"indent":"تارايت","outdent":"كەڭەيت"},"smiley":{"options":"چىراي ئىپادە سىنبەلگە تاللانمىسى","title":"چىراي ئىپادە سىنبەلگە قىستۇر","toolbar":"چىراي ئىپادە"},"justify":{"block":"ئىككى تەرەپتىن توغرىلا","center":"ئوتتۇرىغا توغرىلا","left":"سولغا توغرىلا","right":"ئوڭغا توغرىلا"},"language":{"button":"Set language","remove":"Remove language"},"link":{"acccessKey":"زىيارەت كۇنۇپكا","advanced":"ئالىي","advisoryContentType":"مەزمۇن تىپى","advisoryTitle":"ماۋزۇ","anchor":{"toolbar":"لەڭگەرلىك نۇقتا ئۇلانمىسى قىستۇر/تەھرىرلە","menu":"لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى","title":"لەڭگەرلىك نۇقتا ئۇلانما خاسلىقى","name":"لەڭگەرلىك نۇقتا ئاتى","errorName":"لەڭگەرلىك نۇقتا ئاتىنى كىرگۈزۈڭ","remove":"لەڭگەرلىك نۇقتا ئۆچۈر"},"anchorId":"لەڭگەرلىك نۇقتا ID سى بويىچە","anchorName":"لەڭگەرلىك نۇقتا ئاتى بويىچە","charset":"ھەرپ كودلىنىشى","cssClasses":"ئۇسلۇب خىلى ئاتى","emailAddress":"ئادرÛس","emailBody":"مەزمۇن","emailSubject":"ماۋزۇ","id":"ID","info":"ئۇلانما ئۇچۇرى","langCode":"تىل كودى","langDir":"تىل يۆنىلىشى","langDirLTR":"سولدىن ئوڭغا (LTR)","langDirRTL":"ئوڭدىن سولغا (RTL)","menu":"ئۇلانما تەھرىر","name":"ئات","noAnchors":"(بۇ پۈتۈكتە ئىشلەتكىلى بولىدىغان لەڭگەرلىك نۇقتا يوق)","noEmail":"ئÛلخەت ئادرÛسىنى كىرگۈزۈڭ","noUrl":"ئۇلانما ئادرÛسىنى كىرگۈزۈڭ","other":"‹باشقا›","popupDependent":"تەۋە (NS)","popupFeatures":"قاڭقىش كۆزنەك خاسلىقى","popupFullScreen":"پۈتۈن ئÛكران (IE)","popupLeft":"سول","popupLocationBar":"ئادرÛس بالداق","popupMenuBar":"تىزىملىك بالداق","popupResizable":"چوڭلۇقى ئۆزگەرتىشچان","popupScrollBars":"دومىلىما سۈرگۈچ","popupStatusBar":"ھالەت بالداق","popupToolbar":"قورال بالداق","popupTop":"ئوڭ","rel":"باغلىنىش","selectAnchor":"بىر لەڭگەرلىك نۇقتا تاللاڭ","styles":"قۇر ئىچىدىكى ئۇسلۇبى","tabIndex":"Tab تەرتىپى","target":"نىشان","targetFrame":"‹كاندۇك›","targetFrameName":"نىشان كاندۇك ئاتى","targetPopup":"‹قاڭقىش كۆزنەك›","targetPopupName":"قاڭقىش كۆزنەك ئاتى","title":"ئۇلانما","toAnchor":"بەت ئىچىدىكى لەڭگەرلىك نۇقتا ئۇلانمىسى","toEmail":"ئÛلخەت","toUrl":"ئادرÛس","toolbar":"ئۇلانما قىستۇر/تەھرىرلە","type":"ئۇلانما تىپى","unlink":"ئۇلانما بىكار قىل","upload":"يۈكلە"},"list":{"bulletedlist":"تۈر بەلگە تىزىمى","numberedlist":"تەرتىپ نومۇر تىزىمى"},"liststyle":{"armenian":"قەدىمكى ئەرمىنىيە تەرتىپ نومۇرى شەكلى","bulletedTitle":"تۈر بەلگە تىزىم خاسلىقى","circle":"بوش چەمبەر","decimal":"سان (1, 2, 3 قاتارلىق)","decimalLeadingZero":"نۆلدىن باشلانغان سان بەلگە (01, 02, 03 قاتارلىق)","disc":"تولدۇرۇلغان چەمبەر","georgian":"قەدىمكى جورجىيە تەرتىپ نومۇرى شەكلى (an, ban, gan قاتارلىق)","lowerAlpha":"ئىنگلىزچە كىچىك ھەرپ (a, b, c, d, e قاتارلىق)","lowerGreek":"گرÛÙƒÚ†Û• كىچىك ھەرپ (alpha, beta, gamma قاتارلىق)","lowerRoman":"كىچىك ھەرپلىك رىم رەقىمى (i, ii, iii, iv, v قاتارلىق)","none":"بەلگە يوق","notset":"‹تەڭشەلمىگەن›","numberedTitle":"تەرتىپ نومۇر تىزىم خاسلىقى","square":"تولدۇرۇلغان تۆت چاسا","start":"باشلىنىش نومۇرى","type":"بەلگە تىپى","upperAlpha":"ئىنگلىزچە Ú†ÙˆÚ­ ھەرپ (A, B, C, D, E قاتارلىق)","upperRoman":"Ú†ÙˆÚ­ ھەرپلىك رىم رەقىمى (I, II, III, IV, V قاتارلىق)","validateStartNumber":"تىزىم باشلىنىش تەرتىپ نومۇرى چوقۇم پۈتۈن سان پىچىمىدا بولۇشى لازىم"},"magicline":{"title":"بۇ جايغا ئابزاس قىستۇر"},"maximize":{"maximize":"چوڭايت","minimize":"كىچىكلەت"},"newpage":{"toolbar":"ÙŠÛÚ­Ù‰ بەت"},"pagebreak":{"alt":"بەت ئايرىغۇچ","toolbar":"بەت ئايرىغۇچ قىستۇر"},"pastetext":{"button":"پىچىمى يوق تÛكىست سۈپىتىدە چاپلا","title":"پىچىمى يوق تÛكىست سۈپىتىدە چاپلا"},"pastefromword":{"confirmCleanup":"سىز چاپلىماقچى بولغان مەزمۇن MS Word تىن كەلگەندەك قىلىدۇ، MS Word پىچىمىنى تازىلىۋەتكەندىن ÙƒÛيىن ئاندىن چاپلامدۇ؟","error":"ئىچكى خاتالىق سەۋەبىدىن چاپلايدىغان سانلىق مەلۇماتنى تازىلىيالمايدۇ","title":"MS Word تىن چاپلا","toolbar":"MS Word تىن چاپلا"},"preview":{"preview":"ئالدىن كۆزەت"},"print":{"toolbar":"باس "},"removeformat":{"toolbar":"پىچىمنى چىقىرىۋەت"},"save":{"toolbar":"ساقلا"},"selectall":{"toolbar":"ھەممىنى تاللا"},"showblocks":{"toolbar":"بۆلەكنى كۆرسەت"},"sourcearea":{"toolbar":"مەنبە"},"specialchar":{"options":"ئالاھىدە ھەرپ تاللانمىسى","title":"ئالاھىدە ھەرپ تاللاڭ","toolbar":"ئالاھىدە ھەرپ قىستۇر"},"scayt":{"btn_about":"شۇئان ئىملا تەكشۈرۈش ھەققىدە","btn_dictionaries":"لۇغەت","btn_disable":"شۇئان ئىملا تەكشۈرۈشنى چەكلە","btn_enable":"شۇئان ئىملا تەكشۈرۈشنى قوزغات","btn_langs":"تىل","btn_options":"تاللانما","text_title":""},"stylescombo":{"label":"ئۇسلۇب","panelTitle":"ئۇسلۇب","panelTitle1":"بۆلەك دەرىجىسىدىكى ئÛÙ„ÛÙ…Ûنت ئۇسلۇبى","panelTitle2":"ئىچكى باغلانما ئÛÙ„ÛÙ…Ûنت ئۇسلۇبى","panelTitle3":"Ù†Û•Ú­ (Object) ئÛÙ„ÛÙ…Ûنت ئۇسلۇبى"},"table":{"border":"گىرۋەك","caption":"ماۋزۇ","cell":{"menu":"كاتەكچە","insertBefore":"سولغا كاتەكچە قىستۇر","insertAfter":"ئوڭغا كاتەكچە قىستۇر","deleteCell":"كەتەكچە ئۆچۈر","merge":"كاتەكچە بىرلەشتۈر","mergeRight":"كاتەكچىنى ئوڭغا بىرلەشتۈر","mergeDown":"كاتەكچىنى ئاستىغا بىرلەشتۈر","splitHorizontal":"كاتەكچىنى توغرىسىغا بىرلەشتۈر","splitVertical":"كاتەكچىنى بويىغا بىرلەشتۈر","title":"كاتەكچە خاسلىقى","cellType":"كاتەكچە تىپى","rowSpan":"بويىغا چات ئارىسى قۇر سانى","colSpan":"توغرىسىغا چات ئارىسى ئىستون سانى","wordWrap":"ئۆزلۈكىدىن قۇر قاتلا","hAlign":"توغرىسىغا توغرىلا","vAlign":"بويىغا توغرىلا","alignBaseline":"ئاساسىي سىزىق","bgColor":"تەگلىك رەڭگى","borderColor":"گىرۋەك رەڭگى","data":"سانلىق مەلۇمات","header":"جەدۋەل باشى","yes":"ھەئە","no":"ياق","invalidWidth":"كاتەكچە كەڭلىكى چوقۇم سان بولىدۇ","invalidHeight":"كاتەكچە ئÛگىزلىكى چوقۇم سان بولىدۇ","invalidRowSpan":"قۇر چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ ","invalidColSpan":"ئىستون چات ئارىسى چوقۇم پۈتۈن سان بولىدۇ","chooseColor":"تاللاڭ"},"cellPad":"يان ئارىلىق","cellSpace":"ئارىلىق","column":{"menu":"ئىستون","insertBefore":"سولغا ئىستون قىستۇر","insertAfter":"ئوڭغا ئىستون قىستۇر","deleteColumn":"ئىستون ئۆچۈر"},"columns":"ئىستون سانى","deleteTable":"جەدۋەل ئۆچۈر","headers":"ماۋزۇ كاتەكچە","headersBoth":"بىرىنچى ئىستون Û‹Û• بىرىنچى قۇر","headersColumn":"بىرىنچى ئىستون","headersNone":"يوق","headersRow":"بىرىنچى قۇر","invalidBorder":"گىرۋەك توملۇقى چوقۇم سان بولىدۇ","invalidCellPadding":"كاتەكچىگە چوقۇم سان تولدۇرۇلىدۇ","invalidCellSpacing":"كاتەكچە ئارىلىقى چوقۇم سان بولىدۇ","invalidCols":"بەلگىلەنگەن قۇر سانى چوقۇم نۆلدىن Ú†ÙˆÚ­ بولىدۇ","invalidHeight":"جەدۋەل ئÛگىزلىكى چوقۇم سان بولىدۇ","invalidRows":"بەلگىلەنگەن ئىستون سانى چوقۇم نۆلدىن Ú†ÙˆÚ­ بولىدۇ","invalidWidth":"جەدۋەل كەڭلىكى چوقۇم سان بولىدۇ","menu":"جەدۋەل خاسلىقى","row":{"menu":"قۇر","insertBefore":"ئۈستىگە قۇر قىستۇر","insertAfter":"ئاستىغا قۇر قىستۇر","deleteRow":"قۇر ئۆچۈر"},"rows":"قۇر سانى","summary":"ئۈزۈندە","title":"جەدۋەل خاسلىقى","toolbar":"جەدۋەل","widthPc":"پىرسەنت","widthPx":"پىكسÛÙ„","widthUnit":"كەڭلىك بىرلىكى"},"undo":{"redo":"قايتىلا ","undo":"ÙŠÛنىۋال"},"wsc":{"btnIgnore":"پەرۋا قىلما","btnIgnoreAll":"ھەممىگە پەرۋا قىلما","btnReplace":"ئالماشتۇر","btnReplaceAll":"ھەممىنى ئالماشتۇر","btnUndo":"ÙŠÛنىۋال","changeTo":"ئۆزگەرت","errorLoading":"لازىملىق مۇلازىمÛتىرنى يۈكلىگەندە خاتالىق كۆرۈلدى: %s.","ieSpellDownload":"ئىملا تەكشۈرۈش قىستۇرمىسى تÛخى ئورنىتىلمىغان، ھازىرلا چۈشۈرەمسىز؟","manyChanges":"ئىملا تەكشۈرۈش تامام: %1 سۆزنى ئۆزگەرتتى","noChanges":"ئىملا تەكشۈرۈش تامام: Ú¾Ûچقانداق سۆزنى ئۆزگەرتمىدى","noMispell":"ئىملا تەكشۈرۈش تامام: ئىملا خاتالىقى بايقالمىدى","noSuggestions":"-تەكلىپ يوق-","notAvailable":"كەچۈرۈڭ، مۇلازىمÛتىرنى ۋاقتىنچە ئىشلەتكىلى بولمايدۇ","notInDic":"لۇغەتتە يوق","oneChange":"ئىملا تەكشۈرۈش تامام: بىر سۆزنى ئۆزگەرتتى","progress":"ئىملا تەكشۈرۈۋاتىدۇ…","title":"ئىملا تەكشۈر","toolbar":"ئىملا تەكشۈر"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/uk.js b/wqflask/wqflask/static/packages/ckeditor/lang/uk.js
deleted file mode 100644
index e69e2dea..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/uk.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['uk']={"editor":"ТекÑтовий редактор","editorPanel":"Панель текÑтового редактора","common":{"editorHelp":"натиÑніть ALT 0 Ð´Ð»Ñ Ð´Ð¾Ð²Ñ–Ð´ÐºÐ¸","browseServer":"ОглÑд Сервера","url":"URL","protocol":"Протокол","upload":"ÐадіÑлати","uploadSubmit":"ÐадіÑлати на Ñервер","image":"ЗображеннÑ","flash":"Flash","form":"Форма","checkbox":"Галочка","radio":"Кнопка вибору","textField":"ТекÑтове поле","textarea":"ТекÑтова облаÑÑ‚ÑŒ","hiddenField":"Приховане поле","button":"Кнопка","select":"СпиÑок","imageButton":"Кнопка із зображеннÑм","notSet":"<не визначено>","id":"Ідентифікатор","name":"Ім'Ñ","langDir":"ÐапрÑмок мови","langDirLtr":"Зліва направо (LTR)","langDirRtl":"Справа наліво (RTL)","langCode":"Код мови","longDescr":"Довгий Ð¾Ð¿Ð¸Ñ URL","cssClass":"ÐšÐ»Ð°Ñ CSS","advisoryTitle":"Заголовок","cssStyle":"Стиль CSS","ok":"ОК","cancel":"СкаÑувати","close":"Закрити","preview":"Попередній переглÑд","resize":"ПотÑгніть Ð´Ð»Ñ Ð·Ð¼Ñ–Ð½Ð¸ розмірів","generalTab":"ОÑновне","advancedTab":"Додаткове","validateNumberFailed":"Ð—Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ Ñ” цілим чиÑлом.","confirmNewPage":"Ð’ÑÑ– незбережені зміни будуть втрачені. Ви впевнені, що хочете завантажити нову Ñторінку?","confirmCancel":"ДеÑкі опції змінено. Закрити вікно без Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð½Ñ Ð·Ð¼Ñ–Ð½?","options":"Опції","target":"Ціль","targetNew":"Ðове вікно (_blank)","targetTop":"Поточне вікно (_top)","targetSelf":"Поточний фрейм/вікно (_self)","targetParent":"БатьківÑький фрейм/вікно (_parent)","langDirLTR":"Зліва направо (LTR)","langDirRTL":"Справа наліво (RTL)","styles":"Стиль CSS","cssClasses":"ÐšÐ»Ð°Ñ CSS","width":"Ширина","height":"ВиÑота","align":"ВирівнюваннÑ","alignLeft":"По лівому краю","alignRight":"По правому краю","alignCenter":"По центру","alignJustify":"По ширині","alignTop":"По верхньому краю","alignMiddle":"По Ñередині","alignBottom":"По нижньому краю","alignNone":"Ðема","invalidValue":"Ðевірне значеннÑ.","invalidHeight":"ВиÑота повинна бути цілим чиÑлом.","invalidWidth":"Ширина повинна бути цілим чиÑлом.","invalidCssLength":"ЗначеннÑ, вказане Ð´Ð»Ñ \"%1\" в полі повинно бути позитивним чиÑлом або без дійÑного виміру CSS блоку (px, %, in, cm, mm, em, ex, pt або pc).","invalidHtmlLength":"ЗначеннÑ, вказане Ð´Ð»Ñ \"%1\" в полі повинно бути позитивним чиÑлом або без дійÑного виміру HTML блоку (px або %).","invalidInlineStyle":"ЗначеннÑ, вказане Ð´Ð»Ñ Ð²Ð±ÑƒÐ´Ð¾Ð²Ð°Ð½Ð¾Ð³Ð¾ Ñтилю повинне ÑкладатиÑÑ Ð· одного чи кількох кортежів у форматі \"ім'Ñ : значеннÑ\", розділених крапкою з комою.","cssLengthTooltip":"Введіть номер Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð² пікÑелÑÑ… або чиÑло з дійÑною одиниці CSS (px, %, in, cm, mm, em, ex, pt або pc).","unavailable":"%1<span class=\"cke_accessibility\">, не доÑтупне</span>"},"about":{"copy":"Copyright &copy; $1. Ð’ÑÑ– права заÑтережено.","dlgTitle":"Про CKEditor","help":"Перевірте $1 Ð´Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¸.","moreInfo":"Щодо інформації з Ð»Ñ–Ñ†ÐµÐ½Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð²Ñ–Ñ‚Ð°Ð¹Ñ‚Ðµ на наш Ñайт:","title":"Про CKEditor","userGuide":"ІнÑÑ‚Ñ€ÑƒÐºÑ†Ñ–Ñ ÐšÐ¾Ñ€Ð¸Ñтувача Ð´Ð»Ñ CKEditor"},"basicstyles":{"bold":"Жирний","italic":"КурÑив","strike":"ЗакреÑлений","subscript":"Ðижній індекÑ","superscript":"Верхній індекÑ","underline":"ПідкреÑлений"},"bidi":{"ltr":"ÐапрÑмок текÑту зліва направо","rtl":"ÐапрÑмок текÑту Ñправа наліво"},"blockquote":{"toolbar":"Цитата"},"clipboard":{"copy":"Копіювати","copyError":"ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸ Вашого браузера не дозволÑÑŽÑ‚ÑŒ редактору автоматично виконувати операції копіюваннÑ. Будь лаÑка, викориÑтовуйте клавіатуру Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ (Ctrl/Cmd+C).","cut":"Вирізати","cutError":"ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÐµÐ·Ð¿ÐµÐºÐ¸ Вашого браузера не дозволÑÑŽÑ‚ÑŒ редактору автоматично виконувати операції вирізуваннÑ. Будь лаÑка, викориÑтовуйте клавіатуру Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ (Ctrl/Cmd+X)","paste":"Ð’Ñтавити","pasteArea":"ОблаÑÑ‚ÑŒ вÑтавки","pasteMsg":"Будь лаÑка, вÑтавте інформацію з буфера обміну в цю облаÑÑ‚ÑŒ, кориÑтуючиÑÑŒ комбінацією клавіш (<STRONG>Ctrl/Cmd+V</STRONG>), та натиÑніть <STRONG>OK</STRONG>.","securityMsg":"Редактор не може отримати прÑмий доÑтуп до буферу обміну у зв'Ñзку з налаштуваннÑми Вашого браузера. Вам потрібно вÑтавити інформацію в це вікно.","title":"Ð’Ñтавити"},"button":{"selectedLabel":"%1 (Вибрано)"},"colorbutton":{"auto":"Ðвто","bgColorTitle":"Колір фону","colors":{"000":"Чорний","800000":"Бордовий","8B4513":"Коричневий","2F4F4F":"Темний Ñіро-зелений","008080":"МорÑької хвилі","000080":"Сливовий","4B0082":"Індиго","696969":"ТемноÑірий","B22222":"Темночервоний","A52A2A":"Каштановий","DAA520":"Бежевий","006400":"Темнозелений","40E0D0":"Бірюзовий","0000CD":"ТемноÑиній","800080":"Пурпурний","808080":"Сірий","F00":"Червоний","FF8C00":"Темнооранжевий","FFD700":"Жовтий","008000":"Зелений","0FF":"Синьо-зелений","00F":"Синій","EE82EE":"Фіолетовий","A9A9A9":"СвітлоÑірий","FFA07A":"Рожевий","FFA500":"Оранжевий","FFFF00":"ЯÑкравожовтий","00FF00":"Салатовий","AFEEEE":"Світлобірюзовий","ADD8E6":"Блакитний","DDA0DD":"Світлофіолетовий","D3D3D3":"СріблÑÑтий","FFF0F5":"Світлорожевий","FAEBD7":"Світлооранжевий","FFFFE0":"Світложовтий","F0FFF0":"Світлозелений","F0FFFF":"Світлий Ñиньо-зелений","F0F8FF":"Світлоблакитний","E6E6FA":"Лавандовий","FFF":"Білий"},"more":"Кольори...","panelTitle":"Кольори","textColorTitle":"Колір текÑту"},"colordialog":{"clear":"ОчиÑтити","highlight":"Колір, на Ñкий вказує курÑор","options":"Опції кольорів","selected":"Обраний колір","title":"Обрати колір"},"templates":{"button":"Шаблони","emptyListMsg":"(Ðе знайдено жодного шаблону)","insertOption":"Замінити поточний вміÑÑ‚","options":"Опції шаблону","selectPromptMsg":"Оберіть, будь лаÑка, шаблон Ð´Ð»Ñ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ñ‚Ñ Ð² редакторі<br>(поточний зміÑÑ‚ буде втрачено):","title":"Шаблони зміÑту"},"contextmenu":{"options":"Опції контекÑтного меню"},"div":{"IdInputLabel":"Ідентифікатор","advisoryTitleInputLabel":"ЗміÑÑ‚ випливаючої підказки","cssClassInputLabel":"ÐšÐ»Ð°Ñ CSS","edit":"Редагувати блок","inlineStyleInputLabel":"ВпиÑаний Ñтиль","langDirLTRLabel":"Зліва направо (LTR)","langDirLabel":"ÐапрÑмок мови","langDirRTLLabel":"Справа наліво (RTL)","languageCodeInputLabel":"Код мови","remove":"Видалити блок","styleSelectLabel":"Стиль CSS","title":"Створити блок-контейнер","toolbar":"Створити блок-контейнер"},"toolbar":{"toolbarCollapse":"Згорнути панель інÑтрументів","toolbarExpand":"Розгорнути панель інÑтрументів","toolbarGroups":{"document":"Документ","clipboard":"Буфер обміну / СкаÑувати","editing":"РедагуваннÑ","forms":"Форми","basicstyles":"ОÑновний Стиль","paragraph":"Параграф","links":"ПоÑиланнÑ","insert":"Ð’Ñтавити","styles":"Стилі","colors":"Кольори","tools":"ІнÑтрументи"},"toolbars":"Панель інÑтрументів редактора"},"elementspath":{"eleLabel":"ШлÑÑ…","eleTitle":"%1 елемент"},"find":{"find":"Пошук","findOptions":"Параметри Пошуку","findWhat":"Шукати:","matchCase":"Враховувати регіÑÑ‚Ñ€","matchCyclic":"Циклічна заміна","matchWord":"Збіг цілих Ñлів","notFoundMsg":"Вказаний текÑÑ‚ не знайдено.","replace":"Заміна","replaceAll":"Замінити вÑе","replaceSuccessMsg":"%1 Ñпівпадінь(нÑ) замінено.","replaceWith":"Замінити на:","title":"Знайти Ñ– замінити"},"fakeobjects":{"anchor":"Якір","flash":"Flash-анімаціÑ","hiddenfield":"Приховані ПолÑ","iframe":"IFrame","unknown":"Ðевідомий об'єкт"},"flash":{"access":"ДоÑтуп до Ñкрипта","accessAlways":"Завжди","accessNever":"Ðіколи","accessSameDomain":"З того ж домена","alignAbsBottom":"По нижньому краю (abs)","alignAbsMiddle":"По Ñередині (abs)","alignBaseline":"По базовій лінії","alignTextTop":"ТекÑÑ‚ по верхньому краю","bgcolor":"Колір фону","chkFull":"Дозволити повноекранний переглÑд","chkLoop":"Циклічно","chkMenu":"Дозволити меню Flash","chkPlay":"ÐвтопрограваннÑ","flashvars":"Змінні Flash","hSpace":"Гориз. відÑтуп","properties":"ВлаÑтивоÑÑ‚Ñ– Flash","propertiesTab":"ВлаÑтивоÑÑ‚Ñ–","quality":"ЯкіÑÑ‚ÑŒ","qualityAutoHigh":"Ðвтом. відмінна","qualityAutoLow":"Ðвтом. низька","qualityBest":"Відмінна","qualityHigh":"ВиÑока","qualityLow":"Ðизька","qualityMedium":"СереднÑ","scale":"МаÑштаб","scaleAll":"Показати вÑе","scaleFit":"Поч. розмір","scaleNoBorder":"Без рамки","title":"ВлаÑтивоÑÑ‚Ñ– Flash","vSpace":"Верт. відÑтуп","validateHSpace":"Гориз. відÑтуп повинен бути цілим чиÑлом.","validateSrc":"Будь лаÑка, вкажіть URL поÑиланнÑ","validateVSpace":"Верт. відÑтуп повинен бути цілим чиÑлом.","windowMode":"Віконний режим","windowModeOpaque":"ÐепрозоріÑÑ‚ÑŒ","windowModeTransparent":"ПрозоріÑÑ‚ÑŒ","windowModeWindow":"Вікно"},"font":{"fontSize":{"label":"Розмір","voiceLabel":"Розмір шрифту","panelTitle":"Розмір"},"label":"Шрифт","panelTitle":"Шрифт","voiceLabel":"Шрифт"},"forms":{"button":{"title":"ВлаÑтивоÑÑ‚Ñ– кнопки","text":"ЗначеннÑ","type":"Тип","typeBtn":"Кнопка (button)","typeSbm":"ÐадіÑлати (submit)","typeRst":"ОчиÑтити (reset)"},"checkboxAndRadio":{"checkboxTitle":"ВлаÑтивоÑÑ‚Ñ– галочки","radioTitle":"ВлаÑтивоÑÑ‚Ñ– кнопки вибору","value":"ЗначеннÑ","selected":"Обрана"},"form":{"title":"ВлаÑтивоÑÑ‚Ñ– форми","menu":"ВлаÑтивоÑÑ‚Ñ– форми","action":"ДіÑ","method":"Метод","encoding":"КодуваннÑ"},"hidden":{"title":"ВлаÑтивоÑÑ‚Ñ– прихованого полÑ","name":"Ім'Ñ","value":"ЗначеннÑ"},"select":{"title":"ВлаÑтивоÑÑ‚Ñ– ÑпиÑку","selectInfo":"Інфо","opAvail":"ДоÑтупні варіанти","value":"ЗначеннÑ","size":"КількіÑÑ‚ÑŒ","lines":"видимих позицій у ÑпиÑку","chkMulti":"СпиÑок з мультивибором","opText":"ТекÑÑ‚","opValue":"ЗначеннÑ","btnAdd":"Добавити","btnModify":"Змінити","btnUp":"Вгору","btnDown":"Вниз","btnSetValue":"Ð’Ñтановити Ñк обране значеннÑ","btnDelete":"Видалити"},"textarea":{"title":"ВлаÑтивоÑÑ‚Ñ– текÑтової облаÑÑ‚Ñ–","cols":"Стовбці","rows":"РÑдки"},"textfield":{"title":"ВлаÑтивоÑÑ‚Ñ– текÑтового полÑ","name":"Ім'Ñ","value":"ЗначеннÑ","charWidth":"Ширина","maxChars":"МакÑ. к-Ñ‚ÑŒ Ñимволів","type":"Тип","typeText":"ТекÑÑ‚","typePass":"Пароль","typeEmail":"Пошта","typeSearch":"Пошук","typeTel":"Мобільний","typeUrl":"URL"}},"format":{"label":"ФорматуваннÑ","panelTitle":"Ð¤Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ð°Ñ€Ð°Ð³Ñ€Ð°Ñ„Ð°","tag_address":"ÐдреÑа","tag_div":"Ðормальний (div)","tag_h1":"Заголовок 1","tag_h2":"Заголовок 2","tag_h3":"Заголовок 3","tag_h4":"Заголовок 4","tag_h5":"Заголовок 5","tag_h6":"Заголовок 6","tag_p":"Ðормальний","tag_pre":"Форматований"},"horizontalrule":{"toolbar":"Горизонтальна лініÑ"},"iframe":{"border":"Показати рамки фрейму","noUrl":"Будь лаÑка введіть поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ IFrame","scrolling":"Увімкнути прокрутку","title":"ÐÐ°Ð»Ð°ÑˆÑ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð»Ñ IFrame","toolbar":"IFrame"},"image":{"alertUrl":"Будь лаÑка, вкажіть URL зображеннÑ","alt":"Ðльтернативний текÑÑ‚","border":"Рамка","btnUpload":"ÐадіÑлати на Ñервер","button2Img":"Бажаєте перетворити обрану кнопку-Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð° проÑте зображеннÑ?","hSpace":"Гориз. відÑтуп","img2Button":"Бажаєте перетворити обране Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð½Ñ Ð½Ð° кнопку-зображеннÑ?","infoTab":"Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ñ€Ð¾ зображеннÑ","linkTab":"ПоÑиланнÑ","lockRatio":"Зберегти пропорції","menu":"ВлаÑтивоÑÑ‚Ñ– зображеннÑ","resetSize":"ОчиÑтити Ð¿Ð¾Ð»Ñ Ñ€Ð¾Ð·Ð¼Ñ–Ñ€Ñ–Ð²","title":"ВлаÑтивоÑÑ‚Ñ– зображеннÑ","titleButton":"ВлаÑтивоÑÑ‚Ñ– кнопки із зображеннÑм","upload":"ÐадіÑлати","urlMissing":"Вкажіть URL зображеннÑ.","vSpace":"Верт. відÑтуп","validateBorder":"Ширина рамки повинна бути цілим чиÑлом.","validateHSpace":"Гориз. відÑтуп повинен бути цілим чиÑлом.","validateVSpace":"Верт. відÑтуп повинен бути цілим чиÑлом."},"indent":{"indent":"Збільшити відÑтуп","outdent":"Зменшити відÑтуп"},"smiley":{"options":"Опції Ñмайликів","title":"Ð’Ñтавити Ñмайлик","toolbar":"Смайлик"},"justify":{"block":"По ширині","center":"По центру","left":"По лівому краю","right":"По правому краю"},"language":{"button":"УÑтановити мову","remove":"Вилучити мову"},"link":{"acccessKey":"ГарÑча клавіша","advanced":"Додаткове","advisoryContentType":"Тип вміÑту","advisoryTitle":"Заголовок","anchor":{"toolbar":"Ð’Ñтавити/Редагувати Ñкір","menu":"ВлаÑтивоÑÑ‚Ñ– ÑкорÑ","title":"ВлаÑтивоÑÑ‚Ñ– ÑкорÑ","name":"Ім'Ñ ÑкорÑ","errorName":"Будь лаÑка, вкажіть ім'Ñ ÑкорÑ","remove":"Прибрати Ñкір"},"anchorId":"За ідентифікатором елементу","anchorName":"За ім'Ñм елементу","charset":"КодуваннÑ","cssClasses":"ÐšÐ»Ð°Ñ CSS","emailAddress":"ÐдреÑа ел. пошти","emailBody":"Тіло повідомленнÑ","emailSubject":"Тема лиÑта","id":"Ідентифікатор","info":"Ð†Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð¿Ð¾ÑиланнÑ","langCode":"Код мови","langDir":"ÐапрÑмок мови","langDirLTR":"Зліва направо (LTR)","langDirRTL":"Справа наліво (RTL)","menu":"Ð’Ñтавити поÑиланнÑ","name":"Ім'Ñ","noAnchors":"(Ð’ цьому документі немає Ñкорів)","noEmail":"Будь лаÑка, вкажіть Ð°Ð´Ñ€ÐµÑ ÐµÐ». пошти","noUrl":"Будь лаÑка, вкажіть URL поÑиланнÑ","other":"<інший>","popupDependent":"Залежний (Netscape)","popupFeatures":"ВлаÑтивоÑÑ‚Ñ– випливаючого вікна","popupFullScreen":"Повний екран (IE)","popupLeft":"ÐŸÐ¾Ð·Ð¸Ñ†Ñ–Ñ Ð·Ð»Ñ–Ð²Ð°","popupLocationBar":"Панель локації","popupMenuBar":"Панель меню","popupResizable":"МаÑштабоване","popupScrollBars":"Стрічки прокрутки","popupStatusBar":"РÑдок ÑтатуÑу","popupToolbar":"Панель інÑтрументів","popupTop":"ÐŸÐ¾Ð·Ð¸Ñ†Ñ–Ñ Ð·Ð²ÐµÑ€Ñ…Ñƒ","rel":"Зв'Ñзок","selectAnchor":"Оберіть Ñкір","styles":"Стиль CSS","tabIndex":"ПоÑлідовніÑÑ‚ÑŒ переходу","target":"Ціль","targetFrame":"<фрейм>","targetFrameName":"Ім'Ñ Ñ†Ñ–Ð»ÑŒÐ¾Ð²Ð¾Ð³Ð¾ фрейму","targetPopup":"<випливаюче вікно>","targetPopupName":"Ім'Ñ Ð²Ð¸Ð¿Ð»Ð¸Ð²Ð°ÑŽÑ‡Ð¾Ð³Ð¾ вікна","title":"ПоÑиланнÑ","toAnchor":"Якір на цю Ñторінку","toEmail":"Ел. пошта","toUrl":"URL","toolbar":"Ð’Ñтавити/Редагувати поÑиланнÑ","type":"Тип поÑиланнÑ","unlink":"Видалити поÑиланнÑ","upload":"ÐадіÑлати"},"list":{"bulletedlist":"Маркірований ÑпиÑок","numberedlist":"Ðумерований ÑпиÑок"},"liststyle":{"armenian":"ВірменÑька нумераціÑ","bulletedTitle":"Опції маркованого ÑпиÑку","circle":"Кільце","decimal":"ДеÑÑткові (1, 2, 3 Ñ– Ñ‚.д.)","decimalLeadingZero":"ДеÑÑткові з нулем (01, 02, 03 Ñ– Ñ‚.д.)","disc":"Кружечок","georgian":"ГрузинÑька Ð½ÑƒÐ¼ÐµÑ€Ð°Ñ†Ñ–Ñ (an, ban, gan Ñ– Ñ‚.д.)","lowerAlpha":"Малі лат. букви (a, b, c, d, e Ñ– Ñ‚.д.)","lowerGreek":"Малі гр. букви (альфа, бета, гамма Ñ– Ñ‚.д.)","lowerRoman":"Малі римÑькі (i, ii, iii, iv, v Ñ– Ñ‚.д.)","none":"Ðема","notset":"<не вказано>","numberedTitle":"Опції нумерованого ÑпиÑку","square":"Квадратик","start":"Почати з...","type":"Тип","upperAlpha":"Великі лат. букви (A, B, C, D, E Ñ– Ñ‚.д.)","upperRoman":"Великі римÑькі (I, II, III, IV, V Ñ– Ñ‚.д.)","validateStartNumber":"Початковий номер ÑпиÑку повинен бути цілим чиÑлом."},"magicline":{"title":"Ð’Ñтавити абзац"},"maximize":{"maximize":"МакÑимізувати","minimize":"Мінімізувати"},"newpage":{"toolbar":"Ðова Ñторінка"},"pagebreak":{"alt":"Розрив Сторінки","toolbar":"Ð’Ñтавити розрив Ñторінки"},"pastetext":{"button":"Ð’Ñтавити тільки текÑÑ‚","title":"Ð’Ñтавити тільки текÑÑ‚"},"pastefromword":{"confirmCleanup":"ТекÑÑ‚, що Ви намагаєтеÑÑŒ вÑтавити, Ñхожий на Ñкопійований з Word. Бажаєте очиÑтити його Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ´ вÑтавлÑннÑм?","error":"Ðеможливо очиÑтити Ñ„Ð¾Ñ€Ð¼Ð°Ñ‚ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡ÐµÑ€ÐµÐ· внутрішню помилку.","title":"Ð’Ñтавити з Word","toolbar":"Ð’Ñтавити з Word"},"preview":{"preview":"Попередній переглÑд"},"print":{"toolbar":"Друк"},"removeformat":{"toolbar":"ОчиÑтити форматуваннÑ"},"save":{"toolbar":"Зберегти"},"selectall":{"toolbar":"Виділити вÑе"},"showblocks":{"toolbar":"Показувати блоки"},"sourcearea":{"toolbar":"Джерело"},"specialchar":{"options":"Опції","title":"Оберіть Ñпеціальний Ñимвол","toolbar":"Спеціальний Ñимвол"},"scayt":{"btn_about":"Про SCAYT","btn_dictionaries":"Словники","btn_disable":"Вимкнути SCAYT","btn_enable":"Ввімкнути SCAYT","btn_langs":"Мови","btn_options":"Опції","text_title":""},"stylescombo":{"label":"Стиль","panelTitle":"Стилі форматуваннÑ","panelTitle1":"Блочні Ñтилі","panelTitle2":"РÑдкові Ñтилі","panelTitle3":"Об'єктні Ñтилі"},"table":{"border":"Розмір рамки","caption":"Заголовок таблиці","cell":{"menu":"Комірки","insertBefore":"Ð’Ñтавити комірку перед","insertAfter":"Ð’Ñтавити комірку піÑлÑ","deleteCell":"Видалити комірки","merge":"Об'єднати комірки","mergeRight":"Об'єднати Ñправа","mergeDown":"Об'єднати донизу","splitHorizontal":"Розділити комірку по горизонталі","splitVertical":"Розділити комірку по вертикалі","title":"ВлаÑтивоÑÑ‚Ñ– комірки","cellType":"Тип комірки","rowSpan":"Об'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñ€Ñдків","colSpan":"Об'Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ñтовпців","wordWrap":"ÐвтоперенеÑÐµÐ½Ð½Ñ Ñ‚ÐµÐºÑту","hAlign":"Гориз. вирівнюваннÑ","vAlign":"Верт. вирівнюваннÑ","alignBaseline":"По базовій лінії","bgColor":"Колір фону","borderColor":"Колір рамки","data":"Дані","header":"Заголовок","yes":"Так","no":"ÐÑ–","invalidWidth":"Ширина комірки повинна бути цілим чиÑлом.","invalidHeight":"ВиÑота комірки повинна бути цілим чиÑлом.","invalidRowSpan":"КількіÑÑ‚ÑŒ об'єднуваних Ñ€Ñдків повинна бути цілим чиÑлом.","invalidColSpan":"КількіÑÑ‚ÑŒ об'єднуваних Ñтовбців повинна бути цілим чиÑлом.","chooseColor":"Обрати"},"cellPad":"Внутр. відÑтуп","cellSpace":"Проміжок","column":{"menu":"Стовбці","insertBefore":"Ð’Ñтавити Ñтовбець перед","insertAfter":"Ð’Ñтавити Ñтовбець піÑлÑ","deleteColumn":"Видалити Ñтовбці"},"columns":"Стовбці","deleteTable":"Видалити таблицю","headers":"Заголовки Ñтовбців/Ñ€Ñдків","headersBoth":"Стовбці Ñ– Ñ€Ñдки","headersColumn":"Стовбці","headersNone":"Без заголовків","headersRow":"РÑдки","invalidBorder":"Розмір рамки повинен бути цілим чиÑлом.","invalidCellPadding":"Внутр. відÑтуп комірки повинен бути цілим чиÑлом.","invalidCellSpacing":"Проміжок між комірками повинен бути цілим чиÑлом.","invalidCols":"КількіÑÑ‚ÑŒ Ñтовбців повинна бути більшою 0.","invalidHeight":"ВиÑота таблиці повинна бути цілим чиÑлом.","invalidRows":"КількіÑÑ‚ÑŒ Ñ€Ñдків повинна бути більшою 0.","invalidWidth":"Ширина таблиці повинна бути цілим чиÑлом.","menu":"ВлаÑтивоÑÑ‚Ñ– таблиці","row":{"menu":"РÑдки","insertBefore":"Ð’Ñтавити Ñ€Ñдок перед","insertAfter":"Ð’Ñтавити Ñ€Ñдок піÑлÑ","deleteRow":"Видалити Ñ€Ñдки"},"rows":"РÑдки","summary":"Детальний Ð¾Ð¿Ð¸Ñ Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÑƒ таблиці","title":"ВлаÑтивоÑÑ‚Ñ– таблиці","toolbar":"ТаблицÑ","widthPc":"відÑотків","widthPx":"пікÑелів","widthUnit":"Одиниці вимір."},"undo":{"redo":"Повторити","undo":"Повернути"},"wsc":{"btnIgnore":"ПропуÑтити","btnIgnoreAll":"ПропуÑтити вÑе","btnReplace":"Замінити","btnReplaceAll":"Замінити вÑе","btnUndo":"Ðазад","changeTo":"Замінити на","errorLoading":"Помилка Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ : %s.","ieSpellDownload":"Модуль перевірки орфографії не вÑтановлено. Бажаєте завантажити його зараз?","manyChanges":"Перевірку орфографії завершено: 1% Ñлів(ова) змінено","noChanges":"Перевірку орфографії завершено: жодне Ñлово не змінено","noMispell":"Перевірку орфографії завершено: помилок не знайдено","noSuggestions":"- немає варіантів -","notAvailable":"Вибачте, але ÑÐµÑ€Ð²Ñ–Ñ Ð½Ð°Ñ€Ð°Ð·Ñ– недоÑтупний.","notInDic":"Ðемає в Ñловнику","oneChange":"Перевірку орфографії завершено: змінено одне Ñлово","progress":"ВиконуєтьÑÑ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ° орфографії...","title":"Перевірка орфографії","toolbar":"Перевірити орфографію"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/vi.js b/wqflask/wqflask/static/packages/ckeditor/lang/vi.js
deleted file mode 100644
index 661cd7d3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/vi.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['vi']={"editor":"Bá»™ soạn thảo văn bản có định dạng","editorPanel":"Bảng Ä‘iá»u khiển Rich Text Editor","common":{"editorHelp":"Nhấn ALT + 0 để được giúp đỡ","browseServer":"Duyệt máy chủ","url":"URL","protocol":"Giao thức","upload":"Tải lên","uploadSubmit":"Tải lên máy chủ","image":"Hình ảnh","flash":"Flash","form":"Biểu mẫu","checkbox":"Nút kiểm","radio":"Nút chá»n","textField":"TrÆ°á»ng văn bản","textarea":"Vùng văn bản","hiddenField":"TrÆ°á»ng ẩn","button":"Nút","select":"Ô chá»n","imageButton":"Nút hình ảnh","notSet":"<không thiết lập>","id":"Äịnh danh","name":"Tên","langDir":"HÆ°á»›ng ngôn ngữ","langDirLtr":"Trái sang phải (LTR)","langDirRtl":"Phải sang trái (RTL)","langCode":"Mã ngôn ngữ","longDescr":"Mô tả URL","cssClass":"Lá»›p Stylesheet","advisoryTitle":"Nhan Ä‘á» hÆ°á»›ng dẫn","cssStyle":"Kiểu ","ok":"Äồng ý","cancel":"Bá» qua","close":"Äóng","preview":"Xem trÆ°á»›c","resize":"Kéo rê để thay đổi kích cỡ","generalTab":"Tab chung","advancedTab":"Tab mở rá»™ng","validateNumberFailed":"Giá trị này không phải là số.","confirmNewPage":"Má»i thay đổi không được lÆ°u lại, ná»™i dung này sẽ bị mất. Bạn có chắc chắn muốn tải má»™t trang má»›i?","confirmCancel":"Má»™t vài tùy chá»n đã bị thay đổi. Bạn có chắc chắn muốn đóng há»™p thoại?","options":"Tùy chá»n","target":"Äích đến","targetNew":"Cá»­a sổ má»›i (_blank)","targetTop":"Cá»­a sổ trên cùng (_top)","targetSelf":"Tại trang (_self)","targetParent":"Cá»­a sổ cha (_parent)","langDirLTR":"Trái sang phải (LTR)","langDirRTL":"Phải sang trái (RTL)","styles":"Kiểu","cssClasses":"Lá»›p CSS","width":"Chiá»u rá»™ng","height":"Chiá»u cao","align":"Vị trí","alignLeft":"Trái","alignRight":"Phải","alignCenter":"Giữa","alignJustify":"Sắp chữ","alignTop":"Trên","alignMiddle":"Giữa","alignBottom":"DÆ°á»›i","alignNone":"Không","invalidValue":"Giá trị không hợp lệ.","invalidHeight":"Chiá»u cao phải là số nguyên.","invalidWidth":"Chiá»u rá»™ng phải là số nguyên.","invalidCssLength":"Giá trị quy định cho trÆ°á»ng \"%1\" phải là má»™t số dÆ°Æ¡ng có hoặc không có má»™t Ä‘Æ¡n vị Ä‘o CSS hợp lệ (px, %, in, cm, mm, em, ex, pt, hoặc pc).","invalidHtmlLength":"Giá trị quy định cho trÆ°á»ng \"%1\" phải là má»™t số dÆ°Æ¡ng có hoặc không có má»™t Ä‘Æ¡n vị Ä‘o HTML hợp lệ (px hoặc %).","invalidInlineStyle":"Giá trị quy định cho kiểu ná»™i tuyến phải bao gồm má»™t hoặc nhiá»u dữ liệu vá»›i định dạng \"tên:giá trị\", cách nhau bằng dấu chấm phẩy.","cssLengthTooltip":"Nhập má»™t giá trị theo pixel hoặc má»™t số vá»›i má»™t Ä‘Æ¡n vị CSS hợp lệ (px, %, in, cm, mm, em, ex, pt, hoặc pc).","unavailable":"%1<span class=\"cke_accessibility\">, không có</span>"},"about":{"copy":"Bản quyá»n &copy; $1. Giữ toàn quyá»n.","dlgTitle":"Thông tin vá» CKEditor","help":"Kiểm tra $1 để được giúp đỡ.","moreInfo":"Vui lòng ghé thăm trang web của chúng tôi để có thông tin vá» giấy phép:","title":"Thông tin vá» CKEditor","userGuide":"HÆ°á»›ng dẫn sá»­ dụng CKEditor"},"basicstyles":{"bold":"Äậm","italic":"Nghiêng","strike":"Gạch xuyên ngang","subscript":"Chỉ số dÆ°á»›i","superscript":"Chỉ số trên","underline":"Gạch chân"},"bidi":{"ltr":"Văn bản hÆ°á»›ng từ trái sang phải","rtl":"Văn bản hÆ°á»›ng từ phải sang trái"},"blockquote":{"toolbar":"Khối trích dẫn"},"clipboard":{"copy":"Sao chép","copyError":"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tá»± Ä‘á»™ng thá»±c thi lệnh sao chép. Hãy sá»­ dụng bàn phím cho lệnh này (Ctrl/Cmd+C).","cut":"Cắt","cutError":"Các thiết lập bảo mật của trình duyệt không cho phép trình biên tập tá»± Ä‘á»™ng thá»±c thi lệnh cắt. Hãy sá»­ dụng bàn phím cho lệnh này (Ctrl/Cmd+X).","paste":"Dán","pasteArea":"Khu vá»±c dán","pasteMsg":"Hãy dán ná»™i dung vào trong khung bên dÆ°á»›i, sá»­ dụng tổ hợp phím (<STRONG>Ctrl/Cmd+V</STRONG>) và nhấn vào nút <STRONG>Äồng ý</STRONG>.","securityMsg":"Do thiết lập bảo mật của trình duyệt nên trình biên tập không thể truy cập trá»±c tiếp vào ná»™i dung đã sao chép. Bạn cần phải dán lại ná»™i dung vào cá»­a sổ này.","title":"Dán"},"button":{"selectedLabel":"%1 (Äã chá»n)"},"colorbutton":{"auto":"Tá»± Ä‘á»™ng","bgColorTitle":"Màu ná»n","colors":{"000":"Äen","800000":"Maroon","8B4513":"Saddle Brown","2F4F4F":"Dark Slate Gray","008080":"Teal","000080":"Navy","4B0082":"Indigo","696969":"Dark Gray","B22222":"Fire Brick","A52A2A":"Nâu","DAA520":"Golden Rod","006400":"Dark Green","40E0D0":"Turquoise","0000CD":"Medium Blue","800080":"Purple","808080":"Xám","F00":"Äá»","FF8C00":"Dark Orange","FFD700":"Vàng","008000":"Xanh lá cây","0FF":"Cyan","00F":"Xanh da trá»i","EE82EE":"Tím","A9A9A9":"Xám tối","FFA07A":"Light Salmon","FFA500":"Màu cam","FFFF00":"Vàng","00FF00":"Lime","AFEEEE":"Pale Turquoise","ADD8E6":"Light Blue","DDA0DD":"Plum","D3D3D3":"Light Grey","FFF0F5":"Lavender Blush","FAEBD7":"Antique White","FFFFE0":"Light Yellow","F0FFF0":"Honeydew","F0FFFF":"Azure","F0F8FF":"Alice Blue","E6E6FA":"Lavender","FFF":"Trắng"},"more":"Màu khác...","panelTitle":"Màu sắc","textColorTitle":"Màu chữ"},"colordialog":{"clear":"Xóa bá»","highlight":"Màu chá»n","options":"Tùy chá»n màu","selected":"Màu đã chá»n","title":"Chá»n màu"},"templates":{"button":"Mẫu dá»±ng sẵn","emptyListMsg":"(Không có mẫu dá»±ng sẵn nào được định nghÄ©a)","insertOption":"Thay thế ná»™i dung hiện tại","options":"Tùy chá»n mẫu dá»±ng sẵn","selectPromptMsg":"Hãy chá»n mẫu dá»±ng sẵn để mở trong trình biên tập<br>(ná»™i dung hiện tại sẽ bị mất):","title":"Ná»™i dung Mẫu dá»±ng sẵn"},"contextmenu":{"options":"Tùy chá»n menu bổ xung"},"div":{"IdInputLabel":"Äịnh danh (id)","advisoryTitleInputLabel":"Nhan Ä‘á» hÆ°á»›ng dẫn","cssClassInputLabel":"Các lá»›p CSS","edit":"Chỉnh sá»­a","inlineStyleInputLabel":"Kiểu ná»™i dòng","langDirLTRLabel":"Trái sang phải (LTR)","langDirLabel":"HÆ°á»›ng ngôn ngữ","langDirRTLLabel":"Phải qua trái (RTL)","languageCodeInputLabel":"Mã ngôn ngữ","remove":"Xóa bá»","styleSelectLabel":"Kiểu (style)","title":"Tạo khối các thành phần","toolbar":"Tạo khối các thành phần"},"toolbar":{"toolbarCollapse":"Thu gá»n thanh công cụ","toolbarExpand":"Mở rá»™ng thnah công cụ","toolbarGroups":{"document":"Tài liệu","clipboard":"Clipboard/Undo","editing":"Chỉnh sá»­a","forms":"Bảng biểu","basicstyles":"Kiểu cÆ¡ bản","paragraph":"Äoạn","links":"Liên kết","insert":"Chèn","styles":"Kiểu","colors":"Màu sắc","tools":"Công cụ"},"toolbars":"Thanh công cụ"},"elementspath":{"eleLabel":"Nhãn thành phần","eleTitle":"%1 thành phần"},"find":{"find":"Tìm kiếm","findOptions":"Tìm tùy chá»n","findWhat":"Tìm chuá»—i:","matchCase":"Phân biệt chữ hoa/thÆ°á»ng","matchCyclic":"Giống má»™t phần","matchWord":"Giống toàn bá»™ từ","notFoundMsg":"Không tìm thấy chuá»—i cần tìm.","replace":"Thay thế","replaceAll":"Thay thế tất cả","replaceSuccessMsg":"%1 vị trí đã được thay thế.","replaceWith":"Thay bằng:","title":"Tìm kiếm và thay thế"},"fakeobjects":{"anchor":"Äiểm neo","flash":"Flash","hiddenfield":"TrÆ°á»ng ẩn","iframe":"IFrame","unknown":"Äối tượng không rõ ràng"},"flash":{"access":"Truy cập mã","accessAlways":"Luôn luôn","accessNever":"Không bao giá»","accessSameDomain":"Cùng tên miá»n","alignAbsBottom":"DÆ°á»›i tuyệt đối","alignAbsMiddle":"Giữa tuyệt đối","alignBaseline":"ÄÆ°á»ng cÆ¡ sở","alignTextTop":"Phía trên chữ","bgcolor":"Màu ná»n","chkFull":"Cho phép toàn màn hình","chkLoop":"Lặp","chkMenu":"Cho phép bật menu của Flash","chkPlay":"Tá»± Ä‘á»™ng chạy","flashvars":"Các biến số dành cho Flash","hSpace":"Khoảng đệm ngang","properties":"Thuá»™c tính Flash","propertiesTab":"Thuá»™c tính","quality":"Chất lượng","qualityAutoHigh":"Cao tá»± Ä‘á»™ng","qualityAutoLow":"Thấp tá»± Ä‘á»™ng","qualityBest":"Tốt nhất","qualityHigh":"Cao","qualityLow":"Thấp","qualityMedium":"Trung bình","scale":"Tá»· lệ","scaleAll":"Hiển thị tất cả","scaleFit":"Vừa vặn","scaleNoBorder":"Không Ä‘Æ°á»ng viá»n","title":"Thuá»™c tính Flash","vSpace":"Khoảng đệm dá»c","validateHSpace":"Khoảng đệm ngang phải là số nguyên.","validateSrc":"Hãy Ä‘Æ°a vào Ä‘Æ°á»ng dẫn liên kết","validateVSpace":"Khoảng đệm dá»c phải là số nguyên.","windowMode":"Chế Ä‘á»™ cá»­a sổ","windowModeOpaque":"MỠđục","windowModeTransparent":"Trong suốt","windowModeWindow":"Cá»­a sổ"},"font":{"fontSize":{"label":"Cỡ chữ","voiceLabel":"Kích cỡ phông","panelTitle":"Cỡ chữ"},"label":"Phông","panelTitle":"Phông","voiceLabel":"Phông"},"forms":{"button":{"title":"Thuá»™c tính của nút","text":"Chuá»—i hiển thị (giá trị)","type":"Kiểu","typeBtn":"Nút bấm","typeSbm":"Nút gá»­i","typeRst":"Nút nhập lại"},"checkboxAndRadio":{"checkboxTitle":"Thuá»™c tính nút kiểm","radioTitle":"Thuá»™c tính nút chá»n","value":"Giá trị","selected":"Äược chá»n"},"form":{"title":"Thuá»™c tính biểu mẫu","menu":"Thuá»™c tính biểu mẫu","action":"Hành Ä‘á»™ng","method":"PhÆ°Æ¡ng thức","encoding":"Bảng mã"},"hidden":{"title":"Thuá»™c tính trÆ°á»ng ẩn","name":"Tên","value":"Giá trị"},"select":{"title":"Thuá»™c tính ô chá»n","selectInfo":"Thông tin","opAvail":"Các tùy chá»n có thể sá»­ dụng","value":"Giá trị","size":"Kích cỡ","lines":"dòng","chkMulti":"Cho phép chá»n nhiá»u","opText":"Văn bản","opValue":"Giá trị","btnAdd":"Thêm","btnModify":"Thay đổi","btnUp":"Lên","btnDown":"Xuống","btnSetValue":"Giá trị được chá»n","btnDelete":"Nút xoá"},"textarea":{"title":"Thuá»™c tính vùng văn bản","cols":"Số cá»™t","rows":"Số hàng"},"textfield":{"title":"Thuá»™c tính trÆ°á»ng văn bản","name":"Tên","value":"Giá trị","charWidth":"Äá»™ rá»™ng của ký tá»±","maxChars":"Số ký tá»± tối Ä‘a","type":"Kiểu","typeText":"Ký tá»±","typePass":"Mật khẩu","typeEmail":"Email","typeSearch":"Tìm kiếm","typeTel":"Số Ä‘iện thoại","typeUrl":"URL"}},"format":{"label":"Äịnh dạng","panelTitle":"Äịnh dạng","tag_address":"Address","tag_div":"Bình thÆ°á»ng (DIV)","tag_h1":"Heading 1","tag_h2":"Heading 2","tag_h3":"Heading 3","tag_h4":"Heading 4","tag_h5":"Heading 5","tag_h6":"Heading 6","tag_p":"Bình thÆ°á»ng (P)","tag_pre":"Äã thiết lập"},"horizontalrule":{"toolbar":"Chèn Ä‘Æ°á»ng phân cách ngang"},"iframe":{"border":"Hiển thị viá»n khung","noUrl":"Vui lòng nhập địa chỉ iframe","scrolling":"Kích hoạt thanh cuá»™n","title":"Thuá»™c tính iframe","toolbar":"Iframe"},"image":{"alertUrl":"Hãy Ä‘Æ°a vào Ä‘Æ°á»ng dẫn của ảnh","alt":"Chú thích ảnh","border":"ÄÆ°á»ng viá»n","btnUpload":"Tải lên máy chủ","button2Img":"Bạn có muốn chuyển nút bấm bằng ảnh được chá»n thành ảnh?","hSpace":"Khoảng đệm ngang","img2Button":"Bạn có muốn chuyển đổi ảnh được chá»n thành nút bấm bằng ảnh?","infoTab":"Thông tin của ảnh","linkTab":"Tab liên kết","lockRatio":"Giữ nguyên tá»· lệ","menu":"Thuá»™c tính của ảnh","resetSize":"Kích thÆ°á»›c gốc","title":"Thuá»™c tính của ảnh","titleButton":"Thuá»™c tính nút của ảnh","upload":"Tải lên","urlMissing":"Thiếu Ä‘Æ°á»ng dẫn hình ảnh","vSpace":"Khoảng đệm dá»c","validateBorder":"Chiá»u rá»™ng của Ä‘Æ°á»ng viá»n phải là má»™t số nguyên dÆ°Æ¡ng","validateHSpace":"Khoảng đệm ngang phải là má»™t số nguyên dÆ°Æ¡ng","validateVSpace":"Khoảng đệm dá»c phải là má»™t số nguyên dÆ°Æ¡ng"},"indent":{"indent":"Dịch vào trong","outdent":"Dịch ra ngoài"},"smiley":{"options":"Tùy chá»n hình biểu lá»™ cảm xúc","title":"Chèn hình biểu lá»™ cảm xúc (mặt cÆ°á»i)","toolbar":"Hình biểu lá»™ cảm xúc (mặt cÆ°á»i)"},"justify":{"block":"Canh Ä‘á»u","center":"Canh giữa","left":"Canh trái","right":"Canh phải"},"language":{"button":"Thiết lập ngôn ngữ","remove":"Loại bá» ngôn ngữ"},"link":{"acccessKey":"Phím há»— trợ truy cập","advanced":"Mở rá»™ng","advisoryContentType":"Ná»™i dung hÆ°á»›ng dẫn","advisoryTitle":"Nhan Ä‘á» hÆ°á»›ng dẫn","anchor":{"toolbar":"Chèn/Sá»­a Ä‘iểm neo","menu":"Thuá»™c tính Ä‘iểm neo","title":"Thuá»™c tính Ä‘iểm neo","name":"Tên của Ä‘iểm neo","errorName":"Hãy nhập vào tên của Ä‘iểm neo","remove":"Xóa neo"},"anchorId":"Theo định danh thành phần","anchorName":"Theo tên Ä‘iểm neo","charset":"Bảng mã của tài nguyên được liên kết đến","cssClasses":"Lá»›p Stylesheet","emailAddress":"ThÆ° Ä‘iện tá»­","emailBody":"Ná»™i dung thông Ä‘iệp","emailSubject":"Tiêu Ä‘á» thông Ä‘iệp","id":"Äịnh danh","info":"Thông tin liên kết","langCode":"Mã ngôn ngữ","langDir":"HÆ°á»›ng ngôn ngữ","langDirLTR":"Trái sang phải (LTR)","langDirRTL":"Phải sang trái (RTL)","menu":"Sá»­a liên kết","name":"Tên","noAnchors":"(Không có Ä‘iểm neo nào trong tài liệu)","noEmail":"Hãy Ä‘Æ°a vào địa chỉ thÆ° Ä‘iện tá»­","noUrl":"Hãy Ä‘Æ°a vào Ä‘Æ°á»ng dẫn liên kết (URL)","other":"<khác>","popupDependent":"Phụ thuá»™c (Netscape)","popupFeatures":"Äặc Ä‘iểm của cá»­a sổ Popup","popupFullScreen":"Toàn màn hình (IE)","popupLeft":"Vị trí bên trái","popupLocationBar":"Thanh vị trí","popupMenuBar":"Thanh Menu","popupResizable":"Có thể thay đổi kích cỡ","popupScrollBars":"Thanh cuá»™n","popupStatusBar":"Thanh trạng thái","popupToolbar":"Thanh công cụ","popupTop":"Vị trí phía trên","rel":"Quan hệ","selectAnchor":"Chá»n má»™t Ä‘iểm neo","styles":"Kiểu (style)","tabIndex":"Chỉ số của Tab","target":"Äích","targetFrame":"<khung>","targetFrameName":"Tên khung đích","targetPopup":"<cá»­a sổ popup>","targetPopupName":"Tên cá»­a sổ Popup","title":"Liên kết","toAnchor":"Neo trong trang này","toEmail":"ThÆ° Ä‘iện tá»­","toUrl":"URL","toolbar":"Chèn/Sá»­a liên kết","type":"Kiểu liên kết","unlink":"Xoá liên kết","upload":"Tải lên"},"list":{"bulletedlist":"Chèn/Xoá Danh sách không thứ tá»±","numberedlist":"Chèn/Xoá Danh sách có thứ tá»±"},"liststyle":{"armenian":"Số theo kiểu Armenian","bulletedTitle":"Thuá»™c tính danh sách không thứ tá»±","circle":"Khuyên tròn","decimal":"Kiểu số (1, 2, 3 ...)","decimalLeadingZero":"Kiểu số (01, 02, 03...)","disc":"Hình Ä‘Ä©a","georgian":"Số theo kiểu Georgian (an, ban, gan...)","lowerAlpha":"Kiểu abc thÆ°á»ng (a, b, c, d, e...)","lowerGreek":"Kiểu Hy Lạp (alpha, beta, gamma...)","lowerRoman":"Số La Mã kiểu thÆ°á»ng (i, ii, iii, iv, v...)","none":"Không gì cả","notset":"<không thiết lập>","numberedTitle":"Thuá»™c tính danh sách có thứ tá»±","square":"Hình vuông","start":"Bắt đầu","type":"Kiểu loại","upperAlpha":"Kiểu ABC HOA (A, B, C, D, E...)","upperRoman":"Số La Mã kiểu HOA (I, II, III, IV, V...)","validateStartNumber":"Số bắt đầu danh sách phải là má»™t số nguyên."},"magicline":{"title":"Chèn Ä‘oạn vào đây"},"maximize":{"maximize":"Phóng to tối Ä‘a","minimize":"Thu nhá»"},"newpage":{"toolbar":"Trang má»›i"},"pagebreak":{"alt":"Ngắt trang","toolbar":"Chèn ngắt trang"},"pastetext":{"button":"Dán theo định dạng văn bản thuần","title":"Dán theo định dạng văn bản thuần"},"pastefromword":{"confirmCleanup":"Văn bản bạn muốn dán có kèm định dạng của Word. Bạn có muốn loại bỠđịnh dạng Word trÆ°á»›c khi dán?","error":"Không thể để làm sạch các dữ liệu dán do má»™t lá»—i ná»™i bá»™","title":"Dán vá»›i định dạng Word","toolbar":"Dán vá»›i định dạng Word"},"preview":{"preview":"Xem trÆ°á»›c"},"print":{"toolbar":"In"},"removeformat":{"toolbar":"Xoá định dạng"},"save":{"toolbar":"LÆ°u"},"selectall":{"toolbar":"Chá»n tất cả"},"showblocks":{"toolbar":"Hiển thị các khối"},"sourcearea":{"toolbar":"Mã HTML"},"specialchar":{"options":"Tùy chá»n các ký tá»± đặc biệt","title":"Hãy chá»n ký tá»± đặc biệt","toolbar":"Chèn ký tá»± đặc biệt"},"scayt":{"btn_about":"Thông tin vá» SCAYT","btn_dictionaries":"Từ Ä‘iển","btn_disable":"Tắt SCAYT","btn_enable":"Bật SCAYT","btn_langs":"Ngôn ngữ","btn_options":"Tùy chá»n","text_title":""},"stylescombo":{"label":"Kiểu","panelTitle":"Phong cách định dạng","panelTitle1":"Kiểu khối","panelTitle2":"Kiểu trá»±c tiếp","panelTitle3":"Kiểu đối tượng"},"table":{"border":"Kích thÆ°á»›c Ä‘Æ°á»ng viá»n","caption":"Äầu Ä‘á»","cell":{"menu":"Ô","insertBefore":"Chèn ô Phía trÆ°á»›c","insertAfter":"Chèn ô Phía sau","deleteCell":"Xoá ô","merge":"Kết hợp ô","mergeRight":"Kết hợp sang phải","mergeDown":"Kết hợp xuống dÆ°á»›i","splitHorizontal":"Phân tách ô theo chiá»u ngang","splitVertical":"Phân tách ô theo chiá»u dá»c","title":"Thuá»™c tính của ô","cellType":"Kiểu của ô","rowSpan":"Kết hợp hàng","colSpan":"Kết hợp cá»™t","wordWrap":"Chữ liá»n hàng","hAlign":"Canh lá» ngang","vAlign":"Canh lá» dá»c","alignBaseline":"ÄÆ°á»ng cÆ¡ sở","bgColor":"Màu ná»n","borderColor":"Màu viá»n","data":"Dữ liệu","header":"Äầu Ä‘á»","yes":"Có","no":"Không","invalidWidth":"Chiá»u rá»™ng của ô phải là má»™t số nguyên.","invalidHeight":"Chiá»u cao của ô phải là má»™t số nguyên.","invalidRowSpan":"Số hàng kết hợp phải là má»™t số nguyên.","invalidColSpan":"Số cá»™t kết hợp phải là má»™t số nguyên.","chooseColor":"Chá»n màu"},"cellPad":"Khoảng đệm giữ ô và ná»™i dung","cellSpace":"Khoảng cách giữa các ô","column":{"menu":"Cá»™t","insertBefore":"Chèn cá»™t phía trÆ°á»›c","insertAfter":"Chèn cá»™t phía sau","deleteColumn":"Xoá cá»™t"},"columns":"Số cá»™t","deleteTable":"Xóa bảng","headers":"Äầu Ä‘á»","headersBoth":"Cả hai","headersColumn":"Cá»™t đầu tiên","headersNone":"Không có","headersRow":"Hàng đầu tiên","invalidBorder":"Kích cỡ của Ä‘Æ°á»ng biên phải là má»™t số nguyên.","invalidCellPadding":"Khoảng đệm giữa ô và ná»™i dung phải là má»™t số nguyên.","invalidCellSpacing":"Khoảng cách giữa các ô phải là má»™t số nguyên.","invalidCols":"Số lượng cá»™t phải là má»™t số lá»›n hÆ¡n 0.","invalidHeight":"Chiá»u cao của bảng phải là má»™t số nguyên.","invalidRows":"Số lượng hàng phải là má»™t số lá»›n hÆ¡n 0.","invalidWidth":"Chiá»u rá»™ng của bảng phải là má»™t số nguyên.","menu":"Thuá»™c tính bảng","row":{"menu":"Hàng","insertBefore":"Chèn hàng phía trÆ°á»›c","insertAfter":"Chèn hàng phía sau","deleteRow":"Xoá hàng"},"rows":"Số hàng","summary":"Tóm lược","title":"Thuá»™c tính bảng","toolbar":"Bảng","widthPc":"Phần trăm (%)","widthPx":"Äiểm ảnh (px)","widthUnit":"ÄÆ¡n vị"},"undo":{"redo":"Làm lại thao tác","undo":"Khôi phục thao tác"},"wsc":{"btnIgnore":"Bá» qua","btnIgnoreAll":"Bá» qua tất cả","btnReplace":"Thay thế","btnReplaceAll":"Thay thế tất cả","btnUndo":"Phục hồi lại","changeTo":"Chuyển thành","errorLoading":"Lá»—i khi Ä‘ang nạp dịch vụ ứng dụng: %s.","ieSpellDownload":"Chức năng kiểm tra chính tả chÆ°a được cài đặt. Bạn có muốn tải vá» ngay bây giá»?","manyChanges":"Hoàn tất kiểm tra chính tả: %1 từ đã được thay đổi","noChanges":"Hoàn tất kiểm tra chính tả: Không có từ nào được thay đổi","noMispell":"Hoàn tất kiểm tra chính tả: Không có lá»—i chính tả","noSuggestions":"- Không Ä‘Æ°a ra gợi ý vá» từ -","notAvailable":"Xin lá»—i, dịch vụ này hiện tại không có.","notInDic":"Không có trong từ Ä‘iển","oneChange":"Hoàn tất kiểm tra chính tả: Má»™t từ đã được thay đổi","progress":"Äang tiến hành kiểm tra chính tả...","title":"Kiểm tra chính tả","toolbar":"Kiểm tra chính tả"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/zh-cn.js b/wqflask/wqflask/static/packages/ckeditor/lang/zh-cn.js
deleted file mode 100644
index d16e960f..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/zh-cn.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['zh-cn']={"editor":"所è§å³æ‰€å¾—编辑器","editorPanel":"所è§å³æ‰€å¾—编辑器é¢æ¿","common":{"editorHelp":"按 ALT+0 获得帮助","browseServer":"æµè§ˆæœåŠ¡å™¨","url":"URL","protocol":"åè®®","upload":"上传","uploadSubmit":"上传到æœåŠ¡å™¨","image":"图åƒ","flash":"Flash","form":"表å•","checkbox":"å¤é€‰æ¡†","radio":"å•é€‰æŒ‰é’®","textField":"å•è¡Œæ–‡æœ¬","textarea":"多行文本","hiddenField":"éšè—域","button":"按钮","select":"列表/èœå•","imageButton":"图åƒæŒ‰é’®","notSet":"<没有设置>","id":"ID","name":"å称","langDir":"语言方å‘","langDirLtr":"ä»Žå·¦åˆ°å³ (LTR)","langDirRtl":"从å³åˆ°å·¦ (RTL)","langCode":"语言代ç ","longDescr":"详细说明 URL","cssClass":"æ ·å¼ç±»å称","advisoryTitle":"标题","cssStyle":"行内样å¼","ok":"确定","cancel":"å–消","close":"关闭","preview":"预览","resize":"拖拽以改å˜å¤§å°","generalTab":"常规","advancedTab":"高级","validateNumberFailed":"需è¦è¾“入数字格å¼","confirmNewPage":"当å‰æ–‡æ¡£å†…容未ä¿å­˜ï¼Œæ˜¯å¦ç¡®è®¤æ–°å»ºæ–‡æ¡£ï¼Ÿ","confirmCancel":"部分修改尚未ä¿å­˜ï¼Œæ˜¯å¦ç¡®è®¤å…³é—­å¯¹è¯æ¡†ï¼Ÿ","options":"选项","target":"目标窗å£","targetNew":"æ–°çª—å£ (_blank)","targetTop":"整页 (_top)","targetSelf":"æœ¬çª—å£ (_self)","targetParent":"çˆ¶çª—å£ (_parent)","langDirLTR":"ä»Žå·¦åˆ°å³ (LTR)","langDirRTL":"从å³åˆ°å·¦ (RTL)","styles":"æ ·å¼","cssClasses":"æ ·å¼ç±»","width":"宽度","height":"高度","align":"对é½æ–¹å¼","alignLeft":"左对é½","alignRight":"å³å¯¹é½","alignCenter":"居中","alignJustify":"两端对é½","alignTop":"顶端","alignMiddle":"居中","alignBottom":"底部","alignNone":"None","invalidValue":"无效的值。","invalidHeight":"高度必须为数字格å¼","invalidWidth":"宽度必须为数字格å¼","invalidCssLength":"此“%1â€å­—段的值必须为正数,å¯ä»¥åŒ…å«æˆ–ä¸åŒ…å«ä¸€ä¸ªæœ‰æ•ˆçš„ CSS 长度å•ä½(px, %, in, cm, mm, em, ex, pt 或 pc)","invalidHtmlLength":"此“%1â€å­—段的值必须为正数,å¯ä»¥åŒ…å«æˆ–ä¸åŒ…å«ä¸€ä¸ªæœ‰æ•ˆçš„ HTML 长度å•ä½(px 或 %)","invalidInlineStyle":"内è”æ ·å¼å¿…须为格å¼æ˜¯ä»¥åˆ†å·åˆ†éš”的一个或多个“属性å : 属性值â€ã€‚","cssLengthTooltip":"输入一个表示åƒç´ å€¼çš„数字,或加上一个有效的 CSS 长度å•ä½(px, %, in, cm, mm, em, ex, pt 或 pc)。","unavailable":"%1<span class=\"cke_accessibility\">,ä¸å¯ç”¨</span>"},"about":{"copy":"版æƒæ‰€æœ‰ &copy; $1。<br />ä¿ç•™æ‰€æœ‰æƒåˆ©ã€‚","dlgTitle":"关于 CKEditor","help":"访问 $1 以获å–帮助。","moreInfo":"相关授æƒè®¸å¯ä¿¡æ¯è¯·è®¿é—®æˆ‘们的网站:","title":"关于 CKEditor","userGuide":"CKEditor 用户å‘导"},"basicstyles":{"bold":"加粗","italic":"倾斜","strike":"删除线","subscript":"下标","superscript":"上标","underline":"下划线"},"bidi":{"ltr":"文字方å‘为从左至å³","rtl":"文字方å‘为从å³è‡³å·¦"},"blockquote":{"toolbar":"å—引用"},"clipboard":{"copy":"å¤åˆ¶","copyError":"您的æµè§ˆå™¨å®‰å…¨è®¾ç½®ä¸å…许编辑器自动执行å¤åˆ¶æ“作,请使用键盘快æ·é”®(Ctrl/Cmd+C)æ¥å®Œæˆã€‚","cut":"剪切","cutError":"您的æµè§ˆå™¨å®‰å…¨è®¾ç½®ä¸å…许编辑器自动执行剪切æ“作,请使用键盘快æ·é”®(Ctrl/Cmd+X)æ¥å®Œæˆã€‚","paste":"粘贴","pasteArea":"粘贴区域","pasteMsg":"请使用键盘快æ·é”®(<STRONG>Ctrl/Cmd+V</STRONG>)把内容粘贴到下é¢çš„方框里,å†æŒ‰ <STRONG>确定</STRONG>","securityMsg":"因为您的æµè§ˆå™¨çš„安全设置原因,本编辑器ä¸èƒ½ç›´æŽ¥è®¿é—®æ‚¨çš„剪贴æ¿å†…容,你需è¦åœ¨æœ¬çª—å£é‡æ–°ç²˜è´´ä¸€æ¬¡ã€‚","title":"粘贴"},"button":{"selectedLabel":"已选中 %1 项"},"colorbutton":{"auto":"自动","bgColorTitle":"背景颜色","colors":{"000":"黑","800000":"è¤çº¢","8B4513":"æ·±è¤","2F4F4F":"墨绿","008080":"绿æ¾çŸ³","000080":"海军è“","4B0082":"é›è“","696969":"æš—ç°","B22222":"砖红","A52A2A":"è¤","DAA520":"金黄","006400":"深绿","40E0D0":"è“绿","0000CD":"中è“","800080":"ç´«","808080":"ç°","F00":"红","FF8C00":"深橙","FFD700":"金","008000":"绿","0FF":"é’","00F":"è“","EE82EE":"ç´«ç½—å…°","A9A9A9":"æ·±ç°","FFA07A":"亮橙","FFA500":"æ©™","FFFF00":"黄","00FF00":"水绿","AFEEEE":"粉è“","ADD8E6":"亮è“","DDA0DD":"梅红","D3D3D3":"æ·¡ç°","FFF0F5":"淡紫红","FAEBD7":"å¤è‘£ç™½","FFFFE0":"淡黄","F0FFF0":"蜜白","F0FFFF":"天è“","F0F8FF":"æ·¡è“","E6E6FA":"æ·¡ç´«","FFF":"白"},"more":"其它颜色...","panelTitle":"颜色","textColorTitle":"文本颜色"},"colordialog":{"clear":"清除","highlight":"高亮","options":"颜色选项","selected":"选择颜色","title":"选择颜色"},"templates":{"button":"模æ¿","emptyListMsg":"(没有模æ¿)","insertOption":"替æ¢å½“å‰å†…容","options":"模æ¿é€‰é¡¹","selectPromptMsg":"请选择è¦åœ¨ç¼–辑器中使用的模æ¿ï¼š","title":"内容模æ¿"},"contextmenu":{"options":"å¿«æ·èœå•é€‰é¡¹"},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"标题","cssClassInputLabel":"æ ·å¼ç±»å称","edit":"编辑 DIV","inlineStyleInputLabel":"行内样å¼","langDirLTRLabel":"ä»Žå·¦åˆ°å³ (LTR)","langDirLabel":"语言方å‘","langDirRTLLabel":"从å³åˆ°å·¦ (RTL)","languageCodeInputLabel":"语言代ç ","remove":"移除 DIV","styleSelectLabel":"æ ·å¼","title":"创建 DIV 容器","toolbar":"创建 DIV 容器"},"toolbar":{"toolbarCollapse":"折å å·¥å…·æ ","toolbarExpand":"展开工具æ ","toolbarGroups":{"document":"文档","clipboard":"剪贴æ¿/撤销","editing":"编辑","forms":"表å•","basicstyles":"基本格å¼","paragraph":"段è½","links":"链接","insert":"æ’å…¥","styles":"æ ·å¼","colors":"颜色","tools":"工具"},"toolbars":"工具æ "},"elementspath":{"eleLabel":"元素路径","eleTitle":"%1 元素"},"find":{"find":"查找","findOptions":"查找选项","findWhat":"查找:","matchCase":"区分大å°å†™","matchCyclic":"循环匹é…","matchWord":"全字匹é…","notFoundMsg":"指定的文本没有找到。","replace":"替æ¢","replaceAll":"全部替æ¢","replaceSuccessMsg":"å…±å®Œæˆ %1 处替æ¢ã€‚","replaceWith":"替æ¢:","title":"查找和替æ¢"},"fakeobjects":{"anchor":"锚点","flash":"Flash 动画","hiddenfield":"éšè—域","iframe":"IFrame","unknown":"未知对象"},"flash":{"access":"å…许脚本访问","accessAlways":"总是","accessNever":"从ä¸","accessSameDomain":"åŒåŸŸ","alignAbsBottom":"ç»å¯¹åº•éƒ¨","alignAbsMiddle":"ç»å¯¹å±…中","alignBaseline":"基线","alignTextTop":"文本上方","bgcolor":"背景颜色","chkFull":"å¯ç”¨å…¨å±","chkLoop":"循环","chkMenu":"å¯ç”¨ Flash èœå•","chkPlay":"自动播放","flashvars":"Flash å˜é‡","hSpace":"水平间è·","properties":"Flash 属性","propertiesTab":"属性","quality":"è´¨é‡","qualityAutoHigh":"高(自动)","qualityAutoLow":"低(自动)","qualityBest":"最好","qualityHigh":"高","qualityLow":"低","qualityMedium":"中(自动)","scale":"缩放","scaleAll":"全部显示","scaleFit":"严格匹é…","scaleNoBorder":"无边框","title":"标题","vSpace":"åž‚ç›´é—´è·","validateHSpace":"水平间è·å¿…须为数字格å¼","validateSrc":"请输入æºæ–‡ä»¶åœ°å€","validateVSpace":"åž‚ç›´é—´è·å¿…须为数字格å¼","windowMode":"窗体模å¼","windowModeOpaque":"ä¸é€æ˜Ž","windowModeTransparent":"é€æ˜Ž","windowModeWindow":"窗体"},"font":{"fontSize":{"label":"大å°","voiceLabel":"文字大å°","panelTitle":"大å°"},"label":"字体","panelTitle":"字体","voiceLabel":"字体"},"forms":{"button":{"title":"按钮属性","text":"标签(值)","type":"类型","typeBtn":"按钮","typeSbm":"æ交","typeRst":"é‡è®¾"},"checkboxAndRadio":{"checkboxTitle":"å¤é€‰æ¡†å±žæ€§","radioTitle":"å•é€‰æŒ‰é’®å±žæ€§","value":"选定值","selected":"已勾选"},"form":{"title":"表å•å±žæ€§","menu":"表å•å±žæ€§","action":"动作","method":"方法","encoding":"表å•ç¼–ç "},"hidden":{"title":"éšè—域属性","name":"å称","value":"åˆå§‹å€¼"},"select":{"title":"èœå•/列表属性","selectInfo":"选择信æ¯","opAvail":"å¯é€‰é¡¹","value":"值","size":"高度","lines":"è¡Œ","chkMulti":"å…许多选","opText":"选项文本","opValue":"选项值","btnAdd":"添加","btnModify":"修改","btnUp":"上移","btnDown":"下移","btnSetValue":"设为åˆå§‹é€‰å®š","btnDelete":"删除"},"textarea":{"title":"多行文本属性","cols":"字符宽度","rows":"行数"},"textfield":{"title":"å•è¡Œæ–‡æœ¬å±žæ€§","name":"å称","value":"åˆå§‹å€¼","charWidth":"字符宽度","maxChars":"最多字符数","type":"类型","typeText":"文本","typePass":"密ç ","typeEmail":"Email","typeSearch":"æœç´¢","typeTel":"电è¯å·ç ","typeUrl":"地å€"}},"format":{"label":"æ ¼å¼","panelTitle":"æ ¼å¼","tag_address":"地å€","tag_div":"段è½(DIV)","tag_h1":"标题 1","tag_h2":"标题 2","tag_h3":"标题 3","tag_h4":"标题 4","tag_h5":"标题 5","tag_h6":"标题 6","tag_p":"普通","tag_pre":"已编排格å¼"},"horizontalrule":{"toolbar":"æ’入水平线"},"iframe":{"border":"显示框架边框","noUrl":"请输入框架的 URL","scrolling":"å…许滚动æ¡","title":"IFrame 属性","toolbar":"IFrame"},"image":{"alertUrl":"请输入图åƒåœ°å€","alt":"替æ¢æ–‡æœ¬","border":"边框大å°","btnUpload":"上传到æœåŠ¡å™¨","button2Img":"确定è¦æŠŠå½“å‰å›¾åƒæŒ‰é’®è½¬æ¢ä¸ºæ™®é€šå›¾åƒå—?","hSpace":"水平间è·","img2Button":"确定è¦æŠŠå½“å‰å›¾åƒæ”¹å˜ä¸ºå›¾åƒæŒ‰é’®å—?","infoTab":"图åƒä¿¡æ¯","linkTab":"链接","lockRatio":"é”定比例","menu":"图åƒå±žæ€§","resetSize":"原始尺寸","title":"图åƒå±žæ€§","titleButton":"图åƒåŸŸå±žæ€§","upload":"上传","urlMissing":"缺少图åƒæºæ–‡ä»¶åœ°å€","vSpace":"åž‚ç›´é—´è·","validateBorder":"边框大å°å¿…须为整数格å¼","validateHSpace":"水平间è·å¿…须为整数格å¼","validateVSpace":"åž‚ç›´é—´è·å¿…须为整数格å¼"},"indent":{"indent":"增加缩进é‡","outdent":"å‡å°‘缩进é‡"},"smiley":{"options":"表情图标选项","title":"æ’入表情图标","toolbar":"表情符"},"justify":{"block":"两端对é½","center":"居中","left":"左对é½","right":"å³å¯¹é½"},"language":{"button":"设置语言","remove":"移除语言"},"link":{"acccessKey":"访问键","advanced":"高级","advisoryContentType":"内容类型","advisoryTitle":"标题","anchor":{"toolbar":"æ’å…¥/编辑锚点链接","menu":"锚点链接属性","title":"锚点链接属性","name":"锚点å称","errorName":"请输入锚点å称","remove":"删除锚点"},"anchorId":"按锚点 ID","anchorName":"按锚点å称","charset":"字符编ç ","cssClasses":"æ ·å¼ç±»å称","emailAddress":"地å€","emailBody":"内容","emailSubject":"主题","id":"ID","info":"超链接信æ¯","langCode":"语言代ç ","langDir":"语言方å‘","langDirLTR":"ä»Žå·¦åˆ°å³ (LTR)","langDirRTL":"从å³åˆ°å·¦ (RTL)","menu":"编辑超链接","name":"å称","noAnchors":"(此文档没有å¯ç”¨çš„锚点)","noEmail":"请输入电å­é‚®ä»¶åœ°å€","noUrl":"请输入超链接地å€","other":"<其他>","popupDependent":"ä¾é™„ (NS)","popupFeatures":"弹出窗å£å±žæ€§","popupFullScreen":"å…¨å± (IE)","popupLeft":"å·¦","popupLocationBar":"地å€æ ","popupMenuBar":"èœå•æ ","popupResizable":"å¯ç¼©æ”¾","popupScrollBars":"滚动æ¡","popupStatusBar":"状æ€æ ","popupToolbar":"工具æ ","popupTop":"å³","rel":"å…³è”","selectAnchor":"选择一个锚点","styles":"行内样å¼","tabIndex":"Tab 键次åº","target":"目标","targetFrame":"<框架>","targetFrameName":"目标框架å称","targetPopup":"<弹出窗å£>","targetPopupName":"弹出窗å£å称","title":"超链接","toAnchor":"页内锚点链接","toEmail":"电å­é‚®ä»¶","toUrl":"地å€","toolbar":"æ’å…¥/编辑超链接","type":"超链接类型","unlink":"å–消超链接","upload":"上传"},"list":{"bulletedlist":"项目列表","numberedlist":"ç¼–å·åˆ—表"},"liststyle":{"armenian":"传统的亚美尼亚编å·æ–¹å¼","bulletedTitle":"项目列表属性","circle":"空心圆","decimal":"æ•°å­— (1, 2, 3, ç­‰)","decimalLeadingZero":"0开头的数字标记(01, 02, 03, ç­‰)","disc":"实心圆","georgian":"传统的乔治亚编å·æ–¹å¼(an, ban, gan, ç­‰)","lowerAlpha":"å°å†™è‹±æ–‡å­—æ¯(a, b, c, d, e, ç­‰)","lowerGreek":"å°å†™å¸Œè…Šå­—æ¯(alpha, beta, gamma, ç­‰)","lowerRoman":"å°å†™ç½—马数字(i, ii, iii, iv, v, ç­‰)","none":"无标记","notset":"<没有设置>","numberedTitle":"ç¼–å·åˆ—表属性","square":"实心方å—","start":"开始åºå·","type":"标记类型","upperAlpha":"大写英文字æ¯(A, B, C, D, E, ç­‰)","upperRoman":"大写罗马数字(I, II, III, IV, V, ç­‰)","validateStartNumber":"列表开始åºå·å¿…须为整数格å¼"},"magicline":{"title":"在这æ’入段è½"},"maximize":{"maximize":"å…¨å±","minimize":"最å°åŒ–"},"newpage":{"toolbar":"新建"},"pagebreak":{"alt":"分页符","toolbar":"æ’入打å°åˆ†é¡µç¬¦"},"pastetext":{"button":"粘贴为无格å¼æ–‡æœ¬","title":"粘贴为无格å¼æ–‡æœ¬"},"pastefromword":{"confirmCleanup":"您è¦ç²˜è´´çš„内容好åƒæ˜¯æ¥è‡ª MS Word,是å¦è¦æ¸…除 MS Word æ ¼å¼åŽå†ç²˜è´´ï¼Ÿ","error":"由于内部错误无法清ç†è¦ç²˜è´´çš„æ•°æ®","title":"从 MS Word 粘贴","toolbar":"从 MS Word 粘贴"},"preview":{"preview":"预览"},"print":{"toolbar":"打å°"},"removeformat":{"toolbar":"清除格å¼"},"save":{"toolbar":"ä¿å­˜"},"selectall":{"toolbar":"全选"},"showblocks":{"toolbar":"显示区å—"},"sourcearea":{"toolbar":"æºç "},"specialchar":{"options":"特殊符å·é€‰é¡¹","title":"选择特殊符å·","toolbar":"æ’入特殊符å·"},"scayt":{"btn_about":"关于å³æ—¶æ‹¼å†™æ£€æŸ¥","btn_dictionaries":"å­—å…¸","btn_disable":"ç¦ç”¨å³æ—¶æ‹¼å†™æ£€æŸ¥","btn_enable":"å¯ç”¨å³æ—¶æ‹¼å†™æ£€æŸ¥","btn_langs":"语言","btn_options":"选项","text_title":""},"stylescombo":{"label":"æ ·å¼","panelTitle":"æ ·å¼","panelTitle1":"å—级元素样å¼","panelTitle2":"内è”元素样å¼","panelTitle3":"对象元素样å¼"},"table":{"border":"边框","caption":"标题","cell":{"menu":"å•å…ƒæ ¼","insertBefore":"在左侧æ’å…¥å•å…ƒæ ¼","insertAfter":"在å³ä¾§æ’å…¥å•å…ƒæ ¼","deleteCell":"删除å•å…ƒæ ¼","merge":"åˆå¹¶å•å…ƒæ ¼","mergeRight":"å‘å³åˆå¹¶å•å…ƒæ ¼","mergeDown":"å‘下åˆå¹¶å•å…ƒæ ¼","splitHorizontal":"水平拆分å•å…ƒæ ¼","splitVertical":"垂直拆分å•å…ƒæ ¼","title":"å•å…ƒæ ¼å±žæ€§","cellType":"å•å…ƒæ ¼ç±»åž‹","rowSpan":"纵跨行数","colSpan":"横跨列数","wordWrap":"自动æ¢è¡Œ","hAlign":"水平对é½","vAlign":"垂直对é½","alignBaseline":"基线","bgColor":"背景颜色","borderColor":"边框颜色","data":"æ•°æ®","header":"表头","yes":"是","no":"å¦","invalidWidth":"å•å…ƒæ ¼å®½åº¦å¿…须为数字格å¼","invalidHeight":"å•å…ƒæ ¼é«˜åº¦å¿…须为数字格å¼","invalidRowSpan":"行跨度必须为整数格å¼","invalidColSpan":"列跨度必须为整数格å¼","chooseColor":"选择"},"cellPad":"è¾¹è·","cellSpace":"é—´è·","column":{"menu":"列","insertBefore":"在左侧æ’入列","insertAfter":"在å³ä¾§æ’入列","deleteColumn":"删除列"},"columns":"列数","deleteTable":"删除表格","headers":"标题å•å…ƒæ ¼","headersBoth":"第一列和第一行","headersColumn":"第一列","headersNone":"æ— ","headersRow":"第一行","invalidBorder":"边框粗细必须为数字格å¼","invalidCellPadding":"å•å…ƒæ ¼å¡«å……必须为数字格å¼","invalidCellSpacing":"å•å…ƒæ ¼é—´è·å¿…须为数字格å¼","invalidCols":"指定的行数必须大于零","invalidHeight":"表格高度必须为数字格å¼","invalidRows":"指定的列数必须大于零","invalidWidth":"表格宽度必须为数字格å¼","menu":"表格属性","row":{"menu":"è¡Œ","insertBefore":"在上方æ’入行","insertAfter":"在下方æ’入行","deleteRow":"删除行"},"rows":"行数","summary":"摘è¦","title":"表格属性","toolbar":"表格","widthPc":"百分比","widthPx":"åƒç´ ","widthUnit":"宽度å•ä½"},"undo":{"redo":"é‡åš","undo":"撤消"},"wsc":{"btnIgnore":"忽略","btnIgnoreAll":"全部忽略","btnReplace":"替æ¢","btnReplaceAll":"全部替æ¢","btnUndo":"撤消","changeTo":"更改为","errorLoading":"加载应该æœåŠ¡ä¸»æœºæ—¶å‡ºé”™: %s.","ieSpellDownload":"拼写检查æ’件还没安装, 您是å¦æƒ³çŽ°åœ¨å°±ä¸‹è½½?","manyChanges":"拼写检查完æˆ: 更改了 %1 个å•è¯","noChanges":"拼写检查完æˆ: 没有更改任何å•è¯","noMispell":"拼写检查完æˆ: 没有å‘现拼写错误","noSuggestions":"- 没有建议 -","notAvailable":"抱歉, æœåŠ¡ç›®å‰æš‚ä¸å¯ç”¨","notInDic":"没有在字典里","oneChange":"拼写检查完æˆ: 更改了一个å•è¯","progress":"正在进行拼写检查...","title":"拼写检查","toolbar":"拼写检查"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/lang/zh.js b/wqflask/wqflask/static/packages/ckeditor/lang/zh.js
deleted file mode 100644
index 65490f2f..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/lang/zh.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.lang['zh']={"editor":"RTF 編輯器","editorPanel":"RTF 編輯器é¢æ¿","common":{"editorHelp":"按下 ALT 0 å–得說明。","browseServer":"ç€è¦½ä¼ºæœå™¨","url":"URL","protocol":"通訊å”定","upload":"上傳","uploadSubmit":"傳é€è‡³ä¼ºæœå™¨","image":"圖åƒ","flash":"Flash","form":"表格","checkbox":"æ ¸å–方塊","radio":"é¸é …按鈕","textField":"文字欄ä½","textarea":"文字å€åŸŸ","hiddenField":"éš±è—欄ä½","button":"按鈕","select":"é¸å–欄ä½","imageButton":"å½±åƒæŒ‰éˆ•","notSet":"<未設定>","id":"ID","name":"å稱","langDir":"語言方å‘","langDirLtr":"ç”±å·¦è‡³å³ (LTR)","langDirRtl":"ç”±å³è‡³å·¦ (RTL)","langCode":"語言代碼","longDescr":"完整æè¿° URL","cssClass":"樣å¼è¡¨é¡žåˆ¥","advisoryTitle":"標題","cssStyle":"樣å¼","ok":"確定","cancel":"å–消","close":"關閉","preview":"é è¦½","resize":"調整大å°","generalTab":"一般","advancedTab":"進階","validateNumberFailed":"此值ä¸æ˜¯æ•¸å€¼ã€‚","confirmNewPage":"ç¾å­˜çš„修改尚未儲存,è¦é–‹æ–°æª”案?","confirmCancel":"部份é¸é …尚未儲存,è¦é—œé–‰å°è©±æ¡†ï¼Ÿ","options":"é¸é …","target":"目標","targetNew":"開新視窗 (_blank)","targetTop":"最上層視窗 (_top)","targetSelf":"相åŒè¦–窗 (_self)","targetParent":"父視窗 (_parent)","langDirLTR":"ç”±å·¦è‡³å³ (LTR)","langDirRTL":"ç”±å³è‡³å·¦ (RTL)","styles":"樣å¼","cssClasses":"樣å¼è¡¨é¡žåˆ¥","width":"寬度","height":"高度","align":"å°é½Šæ–¹å¼","alignLeft":"é å·¦å°é½Š","alignRight":"é å³å°é½Š","alignCenter":"置中å°é½Š","alignJustify":"å·¦å³å°é½Š","alignTop":"頂端","alignMiddle":"中間å°é½Š","alignBottom":"底端","alignNone":"ç„¡","invalidValue":"無效值。","invalidHeight":"高度必須為數字。","invalidWidth":"寬度必須為數字。","invalidCssLength":"「%1ã€çš„值應為正數,並å¯åŒ…å«æœ‰æ•ˆçš„ CSS å–®ä½ (px, %, in, cm, mm, em, ex, pt, 或 pc)。","invalidHtmlLength":"「%1ã€çš„值應為正數,並å¯åŒ…å«æœ‰æ•ˆçš„ HTML å–®ä½ (px 或 %)。","invalidInlineStyle":"行內樣å¼çš„值應包å«ä¸€å€‹ä»¥ä¸Šçš„變數值組,其格å¼å¦‚「å稱:值ã€ï¼Œä¸¦ä»¥åˆ†è™Ÿå€éš”之。","cssLengthTooltip":"請輸入數值,單ä½æ˜¯åƒç´ æˆ–有效的 CSS å–®ä½ (px, %, in, cm, mm, em, ex, pt, 或 pc)。","unavailable":"%1<span class=\"cke_accessibility\">,無法使用</span>"},"about":{"copy":"Copyright &copy; $1. All rights reserved.","dlgTitle":"關於 CKEditor","help":"檢閱 $1 尋求幫助。","moreInfo":"關於授權資訊,請åƒé–±æˆ‘們的網站:","title":"關於 CKEditor","userGuide":"CKEditor 使用者手冊"},"basicstyles":{"bold":"ç²—é«”","italic":"斜體","strike":"刪除線","subscript":"下標","superscript":"上標","underline":"底線"},"bidi":{"ltr":"文字方å‘從左至å³","rtl":"文字方å‘從å³è‡³å·¦"},"blockquote":{"toolbar":"引用段è½"},"clipboard":{"copy":"複製","copyError":"ç€è¦½å™¨çš„安全性設定ä¸å…許編輯器自動執行複製動作。請使用éµç›¤å¿«æ·éµ (Ctrl/Cmd+C) 複製。","cut":"剪下","cutError":"ç€è¦½å™¨çš„安全性設定ä¸å…許編輯器自動執行剪下動作。請使用é盤快æ·éµ (Ctrl/Cmd+X) 剪下。","paste":"貼上","pasteArea":"貼上å€","pasteMsg":"請使用éµç›¤å¿«æ·éµ (<strong>Ctrl/Cmd+V</strong>) 貼到下方å€åŸŸä¸­ä¸¦æŒ‰ä¸‹ã€Œç¢ºå®šã€ã€‚","securityMsg":"因為ç€è¦½å™¨çš„安全性設定,本編輯器無法直接存å–您的剪貼簿資料,請您自行在本視窗進行貼上動作。","title":"貼上"},"button":{"selectedLabel":"%1 (Selected)"},"colorbutton":{"auto":"自動","bgColorTitle":"背景é¡è‰²","colors":{"000":"黑色","800000":"栗色","8B4513":"éžè¤è‰²","2F4F4F":"暗瓦ç°è‰²","008080":"水壓色","000080":"丈é’æ¾€","4B0082":"é›é’","696969":"æ·±ç°è‰²","B22222":"磚紅色","A52A2A":"è¤è‰²","DAA520":"金黃色","006400":"深綠色","40E0D0":"é’綠色","0000CD":"è—色","800080":"紫色","808080":"ç°è‰²","F00":"紅色","FF8C00":"深橘色","FFD700":"金色","008000":"綠色","0FF":"è—綠色","00F":"è—色","EE82EE":"紫色","A9A9A9":"æš—ç°è‰²","FFA07A":"亮鮭紅","FFA500":"橘色","FFFF00":"黃色","00FF00":"鮮綠色","AFEEEE":"綠æ¾è‰²","ADD8E6":"æ·ºè—色","DDA0DD":"枚紅色","D3D3D3":"æ·ºç°è‰²","FFF0F5":"淺紫色","FAEBD7":"骨董白","FFFFE0":"淺黃色","F0FFF0":"蜜瓜綠","F0FFFF":"天è—色","F0F8FF":"愛麗斯蘭","E6E6FA":"淺紫色","FFF":"白色"},"more":"更多é¡è‰²","panelTitle":"é¡è‰²","textColorTitle":"文字é¡è‰²"},"colordialog":{"clear":"清除","highlight":"高亮","options":"色彩é¸é …","selected":"é¸å–的色彩","title":"é¸å–色彩"},"templates":{"button":"範本","emptyListMsg":"(尚未定義任何範本)","insertOption":"替代實際內容","options":"範本é¸é …","selectPromptMsg":"è«‹é¸æ“‡è¦åœ¨ç·¨è¼¯å™¨ä¸­é–‹å•Ÿçš„範本。","title":"內容範本"},"contextmenu":{"options":"內容功能表é¸é …"},"div":{"IdInputLabel":"ID","advisoryTitleInputLabel":"標題","cssClassInputLabel":"樣å¼è¡¨é¡žåˆ¥","edit":"編輯 Div","inlineStyleInputLabel":"行內樣å¼","langDirLTRLabel":"ç”±å·¦è‡³å³ (LTR)","langDirLabel":"語言方å‘","langDirRTLLabel":"ç”±å³è‡³å·¦ (RTL)","languageCodeInputLabel":"語言碼","remove":"移除 Div","styleSelectLabel":"樣å¼","title":"建立 Div 容器","toolbar":"建立 Div 容器"},"toolbar":{"toolbarCollapse":"摺疊工具列","toolbarExpand":"展開工具列","toolbarGroups":{"document":"文件","clipboard":"剪貼簿/復原","editing":"編輯é¸é …","forms":"æ ¼å¼","basicstyles":"基本樣å¼","paragraph":"段è½","links":"連çµ","insert":"æ’å…¥","styles":"樣å¼","colors":"é¡è‰²","tools":"工具"},"toolbars":"編輯器工具列"},"elementspath":{"eleLabel":"元件路徑","eleTitle":"%1 個元件"},"find":{"find":"尋找","findOptions":"尋找é¸é …","findWhat":"尋找目標:","matchCase":"大å°å¯«é ˆç›¸ç¬¦","matchCyclic":"循環æœå°‹","matchWord":"全字拼寫須相符","notFoundMsg":"找ä¸åˆ°æŒ‡å®šçš„文字。","replace":"å–代","replaceAll":"全部å–代","replaceSuccessMsg":"å·²å–代 %1 個指定項目。","replaceWith":"å–代æˆï¼š","title":"尋找åŠå–代"},"fakeobjects":{"anchor":"錨點","flash":"Flash å‹•ç•«","hiddenfield":"éš±è—欄ä½","iframe":"IFrame","unknown":"無法辨識的物件"},"flash":{"access":"腳本存å–","accessAlways":"æ°¸é ","accessNever":"從ä¸","accessSameDomain":"相åŒç¶²åŸŸ","alignAbsBottom":"絕å°ä¸‹æ–¹","alignAbsMiddle":"絕å°ç½®ä¸­","alignBaseline":"基準線","alignTextTop":"上層文字","bgcolor":"背景é¡è‰²","chkFull":"å…許全螢幕","chkLoop":"é‡è¤‡æ’­æ”¾","chkMenu":"啟用 Flash é¸å–®","chkPlay":"自動播放","flashvars":"Flash 變數","hSpace":"HSpace","properties":"Flash 屬性​​","propertiesTab":"屬性","quality":"å“質","qualityAutoHigh":"自動高","qualityAutoLow":"自動低","qualityBest":"最佳","qualityHigh":"高","qualityLow":"低","qualityMedium":"中","scale":"縮放比例","scaleAll":"全部顯示","scaleFit":"最é©åŒ–","scaleNoBorder":"無框線","title":"Flash 屬性​​","vSpace":"VSpace","validateHSpace":"HSpace 必須為數字。","validateSrc":"URL ä¸å¯ç‚ºç©ºç™½ã€‚","validateVSpace":"VSpace 必須為數字。","windowMode":"視窗模å¼","windowModeOpaque":"ä¸é€æ˜Ž","windowModeTransparent":"é€æ˜Ž","windowModeWindow":"視窗"},"font":{"fontSize":{"label":"大å°","voiceLabel":"字型大å°","panelTitle":"字型大å°"},"label":"å­—åž‹","panelTitle":"å­—åž‹å稱","voiceLabel":"å­—åž‹"},"forms":{"button":{"title":"按鈕內容","text":"顯示文字 (值)","type":"é¡žåž‹","typeBtn":"按鈕","typeSbm":"é€å‡º","typeRst":"é‡è¨­"},"checkboxAndRadio":{"checkboxTitle":"æ ¸å–方塊內容","radioTitle":"é¸é …按鈕內容","value":"數值","selected":"å·²é¸"},"form":{"title":"表單內容","menu":"表單內容","action":"動作","method":"æ–¹å¼","encoding":"編碼"},"hidden":{"title":"éš±è—欄ä½å…§å®¹","name":"å稱","value":"數值"},"select":{"title":"é¸å–欄ä½å…§å®¹","selectInfo":"é¸æ“‡è³‡è¨Š","opAvail":"å¯ç”¨é¸é …","value":"數值","size":"大å°","lines":"行數","chkMulti":"å…許多é¸","opText":"文字","opValue":"數值","btnAdd":"新增","btnModify":"修改","btnUp":"å‘上","btnDown":"å‘下","btnSetValue":"設為已é¸","btnDelete":"刪除"},"textarea":{"title":"文字å€åŸŸå…§å®¹","cols":"列","rows":"è¡Œ"},"textfield":{"title":"文字欄ä½å…§å®¹","name":"åå­—","value":"數值","charWidth":"字元寬度","maxChars":"最大字元數","type":"é¡žåž‹","typeText":"文字","typePass":"密碼","typeEmail":"é›»å­éƒµä»¶","typeSearch":"æœå°‹","typeTel":"電話號碼","typeUrl":"URL"}},"format":{"label":"æ ¼å¼","panelTitle":"段è½æ ¼å¼","tag_address":"地å€","tag_div":"標準 (DIV)","tag_h1":"標題 1","tag_h2":"標題 2","tag_h3":"標題 3","tag_h4":"標題 4","tag_h5":"標題 5","tag_h6":"標題 6","tag_p":"標準","tag_pre":"æ ¼å¼è¨­å®š"},"horizontalrule":{"toolbar":"æ’入水平線"},"iframe":{"border":"顯示框架框線","noUrl":"請輸入 iframe URL","scrolling":"啟用æ²è»¸åˆ—","title":"IFrame 屬性","toolbar":"IFrame"},"image":{"alertUrl":"請輸入圖片 URL","alt":"替代文字","border":"框線","btnUpload":"傳é€åˆ°ä¼ºæœå™¨","button2Img":"è«‹å•æ‚¨ç¢ºå®šè¦å°‡ã€Œåœ–片按鈕ã€è½‰æ›æˆã€Œåœ–片ã€å—Žï¼Ÿ","hSpace":"HSpace","img2Button":"è«‹å•æ‚¨ç¢ºå®šè¦å°‡ã€Œåœ–片ã€è½‰æ›æˆã€Œåœ–片按鈕ã€å—Žï¼Ÿ","infoTab":"å½±åƒè³‡è¨Š","linkTab":"連çµ","lockRatio":"固定比例","menu":"å½±åƒå±¬æ€§","resetSize":"é‡è¨­å¤§å°","title":"å½±åƒå±¬æ€§","titleButton":"å½±åƒæŒ‰éˆ•å±¬æ€§","upload":"上傳","urlMissing":"éºå¤±åœ–片來æºä¹‹ URL ","vSpace":"VSpace","validateBorder":"框線必須是整數。","validateHSpace":"HSpace 必須是整數。","validateVSpace":"VSpace 必須是整數。"},"indent":{"indent":"增加縮排","outdent":"減少縮排"},"smiley":{"options":"表情符號é¸é …","title":"æ’入表情符號","toolbar":"表情符號"},"justify":{"block":"å·¦å³å°é½Š","center":"置中","left":"é å·¦å°é½Š","right":"é å³å°é½Š"},"language":{"button":"設定語言","remove":"移除語言"},"link":{"acccessKey":"便æ·éµ","advanced":"進階","advisoryContentType":"建議內容類型","advisoryTitle":"標題","anchor":{"toolbar":"錨點","menu":"編輯錨點","title":"錨點內容","name":"錨點å稱","errorName":"請輸入錨點å稱","remove":"移除錨點"},"anchorId":"ä¾å…ƒä»¶ç·¨è™Ÿ","anchorName":"ä¾éŒ¨é»žå稱","charset":"連çµè³‡æºçš„字元集","cssClasses":"樣å¼è¡¨é¡žåˆ¥","emailAddress":"é›»å­éƒµä»¶åœ°å€","emailBody":"郵件本文","emailSubject":"郵件主旨","id":"ID","info":"連çµè³‡è¨Š","langCode":"語言碼","langDir":"語言方å‘","langDirLTR":"ç”±å·¦è‡³å³ (LTR)","langDirRTL":"ç”±å³è‡³å·¦ (RTL)","menu":"編輯連çµ","name":"å稱","noAnchors":"(本文件中無å¯ç”¨ä¹‹éŒ¨é»ž)","noEmail":"請輸入電å­éƒµä»¶","noUrl":"è«‹è¼¸å…¥é€£çµ URL","other":"<其他>","popupDependent":"ç¨ç«‹ (Netscape)","popupFeatures":"快顯視窗功能","popupFullScreen":"全螢幕 (IE)","popupLeft":"å·¦å´ä½ç½®","popupLocationBar":"ä½ç½®åˆ—","popupMenuBar":"功能表列","popupResizable":"å¯èª¿å¤§å°","popupScrollBars":"æ²è»¸","popupStatusBar":"狀態列","popupToolbar":"工具列","popupTop":"頂端ä½ç½®","rel":"關係","selectAnchor":"é¸å–一個錨點","styles":"樣å¼","tabIndex":"定ä½é †åº","target":"目標","targetFrame":"<框架>","targetFrameName":"目標框架å稱","targetPopup":"<快顯視窗>","targetPopupName":"快顯視窗å稱","title":"連çµ","toAnchor":"文字中的錨點連çµ","toEmail":"é›»å­éƒµä»¶","toUrl":"網å€","toolbar":"連çµ","type":"連çµé¡žåž‹","unlink":"å–消連çµ","upload":"上傳"},"list":{"bulletedlist":"æ’å…¥/移除項目符號清單","numberedlist":"æ’å…¥/移除編號清單清單"},"liststyle":{"armenian":"亞美尼亞數字","bulletedTitle":"項目符號清單屬性","circle":"圓圈","decimal":"å°æ•¸é»ž (1, 2, 3, etc.)","decimalLeadingZero":"å‰ç¶´ 0 åä½æ•¸å­— (01, 02, 03, ç­‰)","disc":"圓點","georgian":"喬治王時代數字 (an, ban, gan, ç­‰)","lowerAlpha":"å°å¯«å­—æ¯ (a, b, c, d, e ç­‰)","lowerGreek":"å°å¯«å¸Œè‡˜å­—æ¯ (alpha, beta, gamma, ç­‰)","lowerRoman":"å°å¯«ç¾…馬數字 (i, ii, iii, iv, v ç­‰)","none":"ç„¡","notset":"<未設定>","numberedTitle":"編號清單屬性","square":"方塊","start":"開始","type":"é¡žåž‹","upperAlpha":"å¤§å¯«å­—æ¯ (A, B, C, D, E ç­‰)","upperRoman":"大寫羅馬數字 (I, II, III, IV, V ç­‰)","validateStartNumber":"清單起始號碼須為一完整數字。"},"magicline":{"title":"在此æ’入段è½"},"maximize":{"maximize":"最大化","minimize":"最å°åŒ–"},"newpage":{"toolbar":"新增網é "},"pagebreak":{"alt":"æ›é ","toolbar":"æ’å…¥æ›é ç¬¦è™Ÿä»¥ä¾¿åˆ—å°"},"pastetext":{"button":"è²¼æˆç´”文字","title":"è²¼æˆç´”文字"},"pastefromword":{"confirmCleanup":"您想貼上的文字似乎是自 Word 複製而來,請å•æ‚¨æ˜¯å¦è¦å…ˆæ¸…除 Word çš„æ ¼å¼å¾Œå†è¡Œè²¼ä¸Šï¼Ÿ","error":"由於發生內部錯誤,無法清除清除 Word çš„æ ¼å¼ã€‚","title":"自 Word 貼上","toolbar":"自 Word 貼上"},"preview":{"preview":"é è¦½"},"print":{"toolbar":"列å°"},"removeformat":{"toolbar":"移除格å¼"},"save":{"toolbar":"儲存"},"selectall":{"toolbar":"å…¨é¸"},"showblocks":{"toolbar":"顯示å€å¡Š"},"sourcearea":{"toolbar":"原始碼"},"specialchar":{"options":"特殊字元é¸é …","title":"é¸å–特殊字元","toolbar":"æ’入特殊字元"},"scayt":{"btn_about":"關於å³æ™‚拼寫檢查","btn_dictionaries":"å­—å…¸","btn_disable":"關閉å³æ™‚拼寫檢查","btn_enable":"啟用å³æ™‚拼寫檢查","btn_langs":"語言","btn_options":"é¸é …","text_title":""},"stylescombo":{"label":"樣å¼","panelTitle":"Formatting Styles","panelTitle1":"å€å¡Šæ¨£å¼","panelTitle2":"內嵌樣å¼","panelTitle3":"物件樣å¼"},"table":{"border":"框線大å°","caption":"標題","cell":{"menu":"儲存格","insertBefore":"å‰æ–¹æ’入儲存格","insertAfter":"後方æ’入儲存格","deleteCell":"刪除儲存格","merge":"åˆä½µå„²å­˜æ ¼","mergeRight":"å‘å³åˆä½µ","mergeDown":"å‘下åˆä½µ","splitHorizontal":"水平分割儲存格","splitVertical":"垂直分割儲存格","title":"儲存格屬性","cellType":"儲存格類型","rowSpan":"Rows Span","colSpan":"Columns Span","wordWrap":"自動斷行","hAlign":"æ°´å¹³å°é½Š","vAlign":"åž‚ç›´å°é½Š","alignBaseline":"基準線","bgColor":"背景é¡è‰²","borderColor":"框線é¡è‰²","data":"資料","header":"Header","yes":"是","no":"å¦","invalidWidth":"儲存格寬度必須為數字。","invalidHeight":"儲存格高度必須為數字。","invalidRowSpan":"Rows span must be a whole number.","invalidColSpan":"Columns span must be a whole number.","chooseColor":"é¸æ“‡"},"cellPad":"Cell padding","cellSpace":"Cell spacing","column":{"menu":"è¡Œ","insertBefore":"Insert Column Before","insertAfter":"Insert Column After","deleteColumn":"Delete Columns"},"columns":"è¡Œ","deleteTable":"Delete Table","headers":"Headers","headersBoth":"Both","headersColumn":"First column","headersNone":"ç„¡","headersRow":"First Row","invalidBorder":"框線大å°å¿…須是整數。","invalidCellPadding":"Cell padding must be a positive number.","invalidCellSpacing":"Cell spacing must be a positive number.","invalidCols":"行數須為大於 0 的正整數。","invalidHeight":"表格高度必須為數字。","invalidRows":"Number of rows must be a number greater than 0.","invalidWidth":"表格寬度必須為數字。","menu":"表格屬性","row":{"menu":"列","insertBefore":"Insert Row Before","insertAfter":"Insert Row After","deleteRow":"Delete Rows"},"rows":"列","summary":"Summary","title":"表格屬性","toolbar":"表格","widthPc":"百分比","widthPx":"åƒç´ ","widthUnit":"寬度單ä½"},"undo":{"redo":"å–消復原","undo":"復原"},"wsc":{"btnIgnore":"忽略","btnIgnoreAll":"全部忽略","btnReplace":"å–代","btnReplaceAll":"全部å–代","btnUndo":"復原","changeTo":"更改為","errorLoading":"無法è¯ç³»ä¾æœå™¨: %s.","ieSpellDownload":"尚未安è£æ‹¼å­—檢查元件。您是å¦æƒ³è¦ç¾åœ¨ä¸‹è¼‰ï¼Ÿ","manyChanges":"拼字檢查完æˆï¼šæ›´æ”¹äº† %1 個單字","noChanges":"拼字檢查完æˆï¼šæœªæ›´æ”¹ä»»ä½•å–®å­—","noMispell":"拼字檢查完æˆï¼šæœªç™¼ç¾æ‹¼å­—錯誤","noSuggestions":"- 無建議值 -","notAvailable":"抱歉,æœå‹™ç›®å‰æš«ä¸å¯ç”¨","notInDic":"ä¸åœ¨å­—典中","oneChange":"拼字檢查完æˆï¼šæ›´æ”¹äº† 1 個單字","progress":"進行拼字檢查中…","title":"拼字檢查","toolbar":"拼字檢查"}}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js
deleted file mode 100644
index 32c14faf..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("a11yHelp",function(j){var a=j.lang.a11yhelp,l=CKEDITOR.tools.getNextId(),e={8:a.backspace,9:a.tab,13:a.enter,16:a.shift,17:a.ctrl,18:a.alt,19:a.pause,20:a.capslock,27:a.escape,33:a.pageUp,34:a.pageDown,35:a.end,36:a.home,37:a.leftArrow,38:a.upArrow,39:a.rightArrow,40:a.downArrow,45:a.insert,46:a["delete"],91:a.leftWindowKey,92:a.rightWindowKey,93:a.selectKey,96:a.numpad0,97:a.numpad1,98:a.numpad2,99:a.numpad3,100:a.numpad4,101:a.numpad5,102:a.numpad6,103:a.numpad7,104:a.numpad8,
-105:a.numpad9,106:a.multiply,107:a.add,109:a.subtract,110:a.decimalPoint,111:a.divide,112:a.f1,113:a.f2,114:a.f3,115:a.f4,116:a.f5,117:a.f6,118:a.f7,119:a.f8,120:a.f9,121:a.f10,122:a.f11,123:a.f12,144:a.numLock,145:a.scrollLock,186:a.semiColon,187:a.equalSign,188:a.comma,189:a.dash,190:a.period,191:a.forwardSlash,192:a.graveAccent,219:a.openBracket,220:a.backSlash,221:a.closeBracket,222:a.singleQuote};e[CKEDITOR.ALT]=a.alt;e[CKEDITOR.SHIFT]=a.shift;e[CKEDITOR.CTRL]=a.ctrl;var f=[CKEDITOR.ALT,CKEDITOR.SHIFT,
-CKEDITOR.CTRL],m=/\$\{(.*?)\}/g,p=function(){var a=j.keystrokeHandler.keystrokes,g={},c;for(c in a)g[a[c]]=c;return function(a,c){var b;if(g[c]){b=g[c];for(var h,i,k=[],d=0;d<f.length;d++)i=f[d],h=b/f[d],1<h&&2>=h&&(b-=i,k.push(e[i]));k.push(e[b]||String.fromCharCode(b));b=k.join("+")}else b=a;return b}}();return{title:a.title,minWidth:600,minHeight:400,contents:[{id:"info",label:j.lang.common.generalTab,expand:!0,elements:[{type:"html",id:"legends",style:"white-space:normal;",focus:function(){this.getElement().focus()},
-html:function(){for(var e='<div class="cke_accessibility_legend" role="document" aria-labelledby="'+l+'_arialbl" tabIndex="-1">%1</div><span id="'+l+'_arialbl" class="cke_voice_label">'+a.contents+" </span>",g=[],c=a.legend,j=c.length,f=0;f<j;f++){for(var b=c[f],h=[],i=b.items,k=i.length,d=0;d<k;d++){var n=i[d],o=n.legend.replace(m,p);o.match(m)||h.push("<dt>%1</dt><dd>%2</dd>".replace("%1",n.name).replace("%2",o))}g.push("<h1>%1</h1><dl>%2</dl>".replace("%1",b.name).replace("%2",h.join("")))}return e.replace("%1",
-g.join(""))}()+'<style type="text/css">.cke_accessibility_legend{width:600px;height:400px;padding-right:5px;overflow-y:auto;overflow-x:hidden;}.cke_browser_quirks .cke_accessibility_legend,{height:390px}.cke_accessibility_legend *{white-space:normal;}.cke_accessibility_legend h1{font-size: 20px;border-bottom: 1px solid #AAA;margin: 5px 0px 15px;}.cke_accessibility_legend dl{margin-left: 5px;}.cke_accessibility_legend dt{font-size: 13px;font-weight: bold;}.cke_accessibility_legend dd{margin:10px}</style>'}]}],
-buttons:[CKEDITOR.dialog.cancelButton]}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt
deleted file mode 100644
index c760b6f9..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt
+++ /dev/null
@@ -1,25 +0,0 @@
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-
-cs.js Found: 30 Missing: 0
-cy.js Found: 30 Missing: 0
-da.js Found: 12 Missing: 18
-de.js Found: 30 Missing: 0
-el.js Found: 25 Missing: 5
-eo.js Found: 30 Missing: 0
-fa.js Found: 30 Missing: 0
-fi.js Found: 30 Missing: 0
-fr.js Found: 30 Missing: 0
-gu.js Found: 12 Missing: 18
-he.js Found: 30 Missing: 0
-it.js Found: 30 Missing: 0
-mk.js Found: 5 Missing: 25
-nb.js Found: 30 Missing: 0
-nl.js Found: 30 Missing: 0
-no.js Found: 30 Missing: 0
-pt-br.js Found: 30 Missing: 0
-ro.js Found: 6 Missing: 24
-tr.js Found: 30 Missing: 0
-ug.js Found: 27 Missing: 3
-vi.js Found: 6 Missing: 24
-zh-cn.js Found: 30 Missing: 0
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js
deleted file mode 100644
index 49f816f1..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","ar",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"عام",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"إضاÙØ©",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"تقسيم",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Ùاصلة",dash:"Dash",period:"نقطة",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js
deleted file mode 100644
index bddf534f..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","bg",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Общо",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js
deleted file mode 100644
index 04f705ba..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","ca",{title:"Instruccions d'Accessibilitat",contents:"Continguts de l'Ajuda. Per tancar aquest quadre de diàleg premi ESC.",legend:[{name:"General",items:[{name:"Editor de barra d'eines",legend:"Premi ${toolbarFocus} per desplaçar-se per la barra d'eines. Vagi en el següent i anterior grup de barra d'eines amb TAB i SHIFT-TAB. Vagi en el següent i anterior botó de la barra d'eines amb RIGHT ARROW i LEFT ARROW. Premi SPACE o ENTER per activar el botó de la barra d'eines."},
-{name:"Editor de quadre de diàleg",legend:"Dins d'un quadre de diàleg, premi la tecla TAB per desplaçar-se al següent camp del quadre de diàleg, premi SHIFT + TAB per desplaçar-se a l'anterior camp, premi ENTER per acceptar el quadre de diàleg, premi ESC per cancel·lar el quadre de diàleg. Per els quadres de diàleg que tenen diverses pestanyes, premi ALT + F10 per anar a la llista de pestanyes. Després podrà desplaçar-se a la següent pestanya amb TAB o RIGHT ARROW. Anar a la pestanya anterior amb SHIFT + TAB o LEFT ARROW. Premi SPACE o ENTER per seleccionar la pestanya."},
-{name:"Editor de menú contextual",legend:"Premi ${contextMenu} o APPLICATION KEY per obrir el menú contextual. Després desplacis a la següent opció del menú amb TAB o DOWN ARROW. Desplacis a l'anterior opció amb SHIFT+TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció del menú. Obri el submenú de l'actual opció utilitzant SPACE o ENTER o RIGHT ARROW. Pot tornar a l'opció del menú pare amb ESC o LEFT ARROW. Tanqui el menú contextual amb ESC."},{name:"Editor de caixa de llista",legend:"Dins d'un quadre de llista, desplacis al següent element de la llista amb TAB o DOWN ARROW. Desplacis a l'anterior element de la llista amb SHIFT + TAB o UP ARROW. Premi SPACE o ENTER per seleccionar l'opció de la llista. Premi ESC per tancar el quadre de llista."},
-{name:"Editor de barra de ruta de l'element",legend:"Premi ${elementsPathFocus} per anar als elements de la barra de ruta. Desplacis al botó de l'element següent amb TAB o RIGHT ARROW. Desplacis a l'anterior botó amb SHIFT+TAB o LEFT ARROW. Premi SPACE o ENTER per seleccionar l'element a l'editor."}]},{name:"Ordres",items:[{name:"Desfer ordre",legend:"Premi ${undo}"},{name:"Refer ordre",legend:"Premi ${redo}"},{name:"Ordre negreta",legend:"Premi ${bold}"},{name:"Ordre cursiva",legend:"Premi ${italic}"},
-{name:"Ordre subratllat",legend:"Premi ${underline}"},{name:"Ordre enllaç",legend:"Premi ${link}"},{name:"Ordre amagar barra d'eines",legend:"Premi ${toolbarCollapse}"},{name:"Ordre per accedir a l'anterior espai enfocat",legend:"Premi ${accessPreviousSpace} per accedir a l'enfocament d'espai més proper inabastable abans del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants."},{name:"Ordre per accedir al següent espai enfocat",
-legend:"Premi ${accessNextSpace} per accedir a l'enfocament d'espai més proper inabastable després del símbol d'intercalació, per exemple: dos elements HR adjacents. Repetiu la combinació de tecles per arribar a enfocaments d'espais distants."},{name:"Ajuda d'accessibilitat",legend:"Premi ${a11yHelp}"}]}],backspace:"Retrocés",tab:"Tabulació",enter:"Intro",shift:"Majúscules",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloqueig de majúscules",escape:"Escape",pageUp:"Pàgina Amunt",pageDown:"Pàgina Avall",
-end:"Fi",home:"Inici",leftArrow:"Fletxa Esquerra",upArrow:"Fletxa Amunt",rightArrow:"Fletxa Dreta",downArrow:"Fletxa Avall",insert:"Inserir","delete":"Eliminar",leftWindowKey:"Tecla Windows Esquerra",rightWindowKey:"Tecla Windows Dreta",selectKey:"Tecla Seleccionar",numpad0:"Teclat Numèric 0",numpad1:"Teclat Numèric 1",numpad2:"Teclat Numèric 2",numpad3:"Teclat Numèric 3",numpad4:"Teclat Numèric 4",numpad5:"Teclat Numèric 5",numpad6:"Teclat Numèric 6",numpad7:"Teclat Numèric 7",numpad8:"Teclat Numèric 8",
-numpad9:"Teclat Numèric 9",multiply:"Multiplicació",add:"Suma",subtract:"Resta",decimalPoint:"Punt Decimal",divide:"Divisió",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloqueig Teclat Numèric",scrollLock:"Bloqueig de Desplaçament",semiColon:"Punt i Coma",equalSign:"Símbol Igual",comma:"Coma",dash:"Guió",period:"Punt",forwardSlash:"Barra Diagonal",graveAccent:"Accent Obert",openBracket:"Claudàtor Obert",backSlash:"Barra Invertida",
-closeBracket:"Claudàtor Tancat",singleQuote:"Cometa Simple"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js
deleted file mode 100644
index ed61622e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","cs",{title:"Instrukce pro přístupnost",contents:"Obsah nápovÄ›dy. Pro uzavÅ™ení tohoto dialogu stisknÄ›te klávesu ESC.",legend:[{name:"Obecné",items:[{name:"Panel nástrojů editoru",legend:"StisknÄ›te${toolbarFocus} k procházení panelu nástrojů. PÅ™ejdÄ›te na další a pÅ™edchozí skupiny pomocí TAB a SHIFT-TAB. PÅ™echod na další a pÅ™edchozí tlaÄítko panelu nástrojů je pomocí Å IPKA VPRAVO nebo Å IPKA VLEVO. Stisknutím mezerníku nebo klávesy ENTER tlaÄítko aktivujete."},{name:"Dialogové okno editoru",
-legend:"UvnitÅ™ dialogového okna stisknÄ›te TAB pro pÅ™esunutí na další pole, stisknÄ›te SHIFT + TAB pro pÅ™esun na pÅ™edchozí pole, stisknÄ›te ENTER pro odeslání dialogu, stisknÄ›te ESC pro jeho zruÅ¡ení. Pro dialogová okna, která mají mnoho karet stisknÄ›te ALT + F10 pr oprocházení seznamu karet. Pak se pÅ™esuňte na další kartu pomocí TAB nebo Å IPKA VPRAVO. Pro pÅ™esun na pÅ™edchozí stisknÄ›te SHIFT + TAB nebo Å IPKA VLEVO. StisknÄ›te MEZERNÃK nebo ENTER pro vybrání stránky karet."},{name:"Kontextové menu editoru",
-legend:"StisknÄ›te ${contextMenu} nebo klávesu APPLICATION k otevÅ™ení kontextového menu. Pak se pÅ™esuňte na další možnost menu pomocí TAB nebo Å IPKY DOLÅ®. PÅ™esuňte se na pÅ™edchozí možnost pomocí SHIFT+TAB nebo Å IPKY NAHORU. StisknÄ›te MEZERNÃK nebo ENTER pro zvolení možnosti menu. Podmenu souÄasné možnosti otevÅ™ete pomocí MEZERNÃKU nebo ENTER Äi Å IPKY DOLEVA. Kontextové menu uzavÅ™ete stiskem ESC."},{name:"RámeÄek seznamu editoru",legend:"UvnitÅ™ rámeÄku seznamu se pÅ™esunete na další položku menu pomocí TAB nebo Å IPKA DOLÅ®. Na pÅ™edchozí položku se pÅ™esunete SHIFT + TAB nebo Å IPKA NAHORU. StisknÄ›te MEZERNÃK nebo ENTER pro zvolení možnosti seznamu. StisknÄ›te ESC pro uzavÅ™ení seznamu."},
-{name:"LiÅ¡ta cesty prvku v editoru",legend:"StisknÄ›te ${elementsPathFocus} pro procházení liÅ¡ty cesty prvku. Na další tlaÄítko prvku se pÅ™esunete pomocí TAB nebo Å IPKA VPRAVO. Na pÅ™edchozí položku se pÅ™esunete pomocí SHIFT + TAB nebo Å IPKA VLEVO. StisknÄ›te MEZERNÃK nebo ENTER pro vybrání prvku v editoru."}]},{name:"Příkazy",items:[{name:" Příkaz ZpÄ›t",legend:"StisknÄ›te ${undo}"},{name:" Příkaz Znovu",legend:"StisknÄ›te ${redo}"},{name:" Příkaz TuÄné",legend:"StisknÄ›te ${bold}"},{name:" Příkaz Kurzíva",
-legend:"Stiskněte ${italic}"},{name:" Příkaz Podtržení",legend:"Stiskněte ${underline}"},{name:" Příkaz Odkaz",legend:"Stiskněte ${link}"},{name:" Příkaz Skrýt panel nástrojů",legend:"Stiskněte ${toolbarCollapse}"},{name:"Příkaz pro přístup k předchozímu prostoru zaměření",legend:"Stiskněte ${accessPreviousSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření před stříškou, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte."},{name:"Příkaz pro přístup k dalšímu prostoru zaměření",
-legend:"Stiskněte ${accessNextSpace} pro přístup k nejbližšímu nedosažitelnému prostoru zaměření po stříšce, například: dva přilehlé prvky HR. Pro dosažení vzdálených prostorů zaměření tuto kombinaci kláves opakujte."},{name:" Nápověda přístupnosti",legend:"Stiskněte ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tabulátor",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pauza",capslock:"Caps lock",escape:"Escape",pageUp:"Stránka nahoru",pageDown:"Stránka dolů",end:"Konec",home:"Domů",leftArrow:"Šipka vlevo",
-upArrow:"Šipka nahoru",rightArrow:"Šipka vpravo",downArrow:"Šipka dolů",insert:"Vložit","delete":"Smazat",leftWindowKey:"Levá klávesa Windows",rightWindowKey:"Pravá klávesa Windows",selectKey:"Vyberte klávesu",numpad0:"Numerická klávesa 0",numpad1:"Numerická klávesa 1",numpad2:"Numerická klávesa 2",numpad3:"Numerická klávesa 3",numpad4:"Numerická klávesa 4",numpad5:"Numerická klávesa 5",numpad6:"Numerická klávesa 6",numpad7:"Numerická klávesa 7",numpad8:"Numerická klávesa 8",numpad9:"Numerická klávesa 9",
-multiply:"Numerická klávesa násobení",add:"PÅ™idat",subtract:"Numerická klávesa odeÄítání",decimalPoint:"Desetinná teÄka",divide:"Numerická klávesa dÄ›lení",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num lock",scrollLock:"Scroll lock",semiColon:"StÅ™edník",equalSign:"Rovnítko",comma:"Čárka",dash:"PomlÄka",period:"TeÄka",forwardSlash:"Lomítko",graveAccent:"Přízvuk",openBracket:"OtevÅ™ená hranatá závorka",backSlash:"Obrácené lomítko",closeBracket:"UzavÅ™ená hranatá závorka",
-singleQuote:"Jednoduchá uvozovka"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js
deleted file mode 100644
index 86bd79d7..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","cy",{title:"Canllawiau Hygyrchedd",contents:"Cynnwys Cymorth. I gau y deialog hwn, pwyswch ESC.",legend:[{name:"Cyffredinol",items:[{name:"Bar Offer y Golygydd",legend:"Pwyswch $ {toolbarFocus} i fynd at y bar offer. Symudwch i'r grŵp bar offer nesaf a blaenorol gyda TAB a SHIFT-TAB. Symudwch i'r botwm bar offer nesaf a blaenorol gyda SAETH DDE neu SAETH CHWITH. Pwyswch SPACE neu ENTER i wneud botwm y bar offer yn weithredol."},{name:"Deialog y Golygydd",legend:"Tu mewn i'r deialog, pwyswch TAB i fynd i'r maes nesaf ar y deialog, pwyswch SHIFT + TAB i symud i faes blaenorol, pwyswch ENTER i gyflwyno'r deialog, pwyswch ESC i ddiddymu'r deialog. Ar gyfer deialogau sydd â thudalennau aml-tab, pwyswch ALT + F10 i lywio'r tab-restr. Yna symudwch i'r tab nesaf gyda TAB neu SAETH DDE. Symudwch i dab blaenorol gyda SHIFT + TAB neu'r SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis y dudalen tab."},
-{name:"Dewislen Cyd-destun y Golygydd",legend:"Pwyswch $ {contextMenu} neu'r ALLWEDD 'APPLICATION' i agor y ddewislen cyd-destun. Yna symudwch i'r opsiwn ddewislen nesaf gyda'r TAB neu'r SAETH I LAWR. Symudwch i'r opsiwn blaenorol gyda SHIFT + TAB neu'r SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn ddewislen. Agorwch is-dewislen yr opsiwn cyfredol gyda SPACE neu ENTER neu SAETH DDE. Ewch yn ôl i'r eitem ar y ddewislen uwch gydag ESC neu SAETH CHWITH. Ceuwch y ddewislen cyd-destun gydag ESC."},
-{name:"Blwch Rhestr y Golygydd",legend:"Tu mewn y blwch rhestr, ewch i'r eitem rhestr nesaf gyda TAB neu'r SAETH I LAWR. Symudwch i restr eitem flaenorol gyda SHIFT + TAB neu SAETH I FYNY. Pwyswch SPACE neu ENTER i ddewis yr opsiwn o'r rhestr. Pwyswch ESC i gau'r rhestr."},{name:"Bar Llwybr Elfen y Golygydd",legend:"Pwyswch ${elementsPathFocus} i fynd i'r bar llwybr elfennau. Symudwch i fotwm yr elfen nesaf gyda TAB neu SAETH DDE. Symudwch i fotwm blaenorol gyda SHIFT + TAB neu SAETH CHWITH. Pwyswch SPACE neu ENTER i ddewis yr elfen yn y golygydd."}]},
-{name:"Gorchmynion",items:[{name:"Gorchymyn dadwneud",legend:"Pwyswch ${undo}"},{name:"Gorchymyn ailadrodd",legend:"Pwyswch ${redo}"},{name:"Gorchymyn Bras",legend:"Pwyswch ${bold}"},{name:"Gorchymyn italig",legend:"Pwyswch ${italig}"},{name:"Gorchymyn tanlinellu",legend:"Pwyso ${underline}"},{name:"Gorchymyn dolen",legend:"Pwyswch ${link}"},{name:"Gorchymyn Cwympo'r Dewislen",legend:"Pwyswch ${toolbarCollapse}"},{name:"Myned i orchymyn bwlch ffocws blaenorol",legend:"Pwyswch ${accessPreviousSpace} i fyned i'r \"blwch ffocws sydd methu ei gyrraedd\" cyn y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. AIladroddwch y cyfuniad allwedd i gyrraedd bylchau ffocws pell."},
-{name:"Ewch i'r gorchymyn blwch ffocws nesaf",legend:"Pwyswch ${accessNextSpace} i fyned i'r blwch ffocws agosaf nad oes modd ei gyrraedd ar ôl y caret, er enghraifft: dwy elfen HR drws nesaf i'w gilydd. Ailadroddwch y cyfuniad allwedd i gyrraedd blychau ffocws pell."},{name:"Cymorth Hygyrchedd",legend:"Pwyswch ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
-end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",
-divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/da.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/da.js
deleted file mode 100644
index 2be9ece1..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/da.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","da",{title:"Tilgængelighedsinstrukser",contents:"Onlinehjælp. For at lukke dette vindue klik ESC",legend:[{name:"Generelt",items:[{name:"Editor værktøjslinje",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Kommandoer",items:[{name:"Fortryd kommando",legend:"Klik på ${undo}"},{name:"Gentag kommando",legend:"Klik ${redo}"},{name:" Bold command",legend:"Klik ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Klik ${underline}"},{name:" Link command",legend:"Klik ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Kilk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/de.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/de.js
deleted file mode 100644
index 2a1e6f49..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/de.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","de",{title:"Barrierefreiheitinformationen",contents:"Hilfeinhalt. Um den Dialog zu schliessen die Taste 'ESC' drücken.",legend:[{name:"Allgemein",items:[{name:"Editor Symbolleiste",legend:"Drücken Sie ${toolbarFocus} auf der Symbolleiste. Gehen Sie zur nächsten oder vorherigen Symbolleistengruppe mit TAB und SHIFT-TAB. Gehen Sie zur nächsten oder vorherigen Symbolleiste auf die Schaltfläche mit dem RECHTS- oder LINKS-Pfeil. Drücken Sie die Leertaste oder Eingabetaste, um die Schaltfläche in der Symbolleiste aktivieren."},
-{name:"Editor Dialog",legend:"Innerhalb des Dialogs drücken Sie TAB um zum nächsten Dialogfeld zu gelangen, drücken Sie SHIFT-TAG um zum vorherigen Feld zu wechseln, drücken Sie ENTER um den Dialog abzusenden und ESC um den Dialog zu abzubrechen. Um zwischen den Reitern innerhalb eines Dialogs zu wechseln drücken sie ALT-F10. Um zum nächsten Reiter zu gelangen können Sie TAB oder die rechte Pfeiltaste. Zurück gelangt man mit SHIFT-TAB oder der linken Pfeiltaste. Mit der Leertaste oder Enter kann man den Reiter auswählen."},
-{name:"Editor Kontextmenü",legend:"Dürcken Sie ${contextMenu} oder die Anwendungstaste um das Kontextmenü zu öffnen. Man kann die Pfeiltasten zum Wechsel benutzen. Mit der Leertaste oder der Enter-Taste kann man den Menüpunkt aufrufen. Schliessen Sie das Kontextmenü mit der ESC-Taste."},{name:"Editor Listen",legend:"Innerhalb einer Listenbox kann man mit der TAB-Taste oder den Pfeilrunter-Taste den nächsten Menüeintrag wählen. Mit der Shift-TAB Tastenkombination oder der Pfeilhoch-Taste gelangt man zum vorherigen Menüpunkt. Mit der Leertaste oder Enter kann man den Menüpunkt auswählen. Drücken Sie ESC zum Verlassen des Menüs."},
-{name:"Editor Elementpfadleiste",legend:"Drücken Sie ${elementsPathFocus} um sich durch die Pfadleiste zu bewegen. Um zum nächsten Element zu gelangen drücken Sie TAB oder die Pfeilrechts-Taste. Zum vorherigen Element gelangen Sie mit der SHIFT-TAB oder der Pfeillinks-Taste. Drücken Sie die Leertaste oder Enter um das Element auszuwählen."}]},{name:"Befehle",items:[{name:"Wiederholen Befehl",legend:"Drücken Sie ${undo}"},{name:"Rückgängig Befehl",legend:"Drücken Sie ${redo}"},{name:"Fettschrift Befehl",
-legend:"Drücken Sie ${bold}"},{name:"Italic Befehl",legend:"Drücken Sie ${italic}"},{name:"Unterstreichung Befehl",legend:"Drücken Sie ${underline}"},{name:"Link Befehl",legend:"Drücken Sie ${link}"},{name:"Symbolleiste zuammenklappen Befehl",legend:"Drücken Sie ${toolbarCollapse}"},{name:"Zugang bisheriger Fokussierung Raumbefehl ",legend:"Drücken Sie ${accessPreviousSpace} auf den am nächsten nicht erreichbar Fokus-Abstand vor die Einfügemarke zugreifen: zwei benachbarte HR-Elemente. Wiederholen Sie die Tastenkombination um entfernte Fokusräume zu erreichen. "},
-{name:"Zugang nächster Schwerpunkt Raumbefehl ",legend:"Drücken Sie $ { accessNextSpace }, um den nächsten unerreichbar Fokus Leerzeichen nach dem Cursor zum Beispiel auf: zwei benachbarten HR Elemente. Wiederholen Sie die Tastenkombination zum fernen Fokus Bereiche zu erreichen. "},{name:"Eingabehilfen",legend:"Drücken Sie ${a11yHelp}"}]}],backspace:"Rücklöschtaste",tab:"Tab",enter:"Eingabe",shift:"Umschalt",ctrl:"Strg",alt:"Alt",pause:"Pause",capslock:"Feststell",escape:"Escape",pageUp:"Bild auf",
-pageDown:"Bild ab",end:"Ende",home:"Pos1",leftArrow:"Linke Pfeiltaste",upArrow:"Obere Pfeiltaste",rightArrow:"Rechte Pfeiltaste",downArrow:"Untere Pfeiltaste",insert:"Einfügen","delete":"Entfernen",leftWindowKey:"Linke Windowstaste",rightWindowKey:"Rechte Windowstaste",selectKey:"Taste auswählen",numpad0:"Ziffernblock 0",numpad1:"Ziffernblock 1",numpad2:"Ziffernblock 2",numpad3:"Ziffernblock 3",numpad4:"Ziffernblock 4",numpad5:"Ziffernblock 5",numpad6:"Ziffernblock 6",numpad7:"Ziffernblock 7",numpad8:"Ziffernblock 8",
-numpad9:"Ziffernblock 9",multiply:"Multiplizieren",add:"Addieren",subtract:"Subtrahieren",decimalPoint:"Punkt",divide:"Dividieren",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Ziffernblock feststellen",scrollLock:"Rollen",semiColon:"Semikolon",equalSign:"Gleichheitszeichen",comma:"Komma",dash:"Bindestrich",period:"Punkt",forwardSlash:"Schrägstrich",graveAccent:"Gravis",openBracket:"Öffnende eckige Klammer",backSlash:"Rückwärtsgewandter Schrägstrich",
-closeBracket:"Schließende eckige Klammer",singleQuote:"Einfaches Anführungszeichen"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/el.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/el.js
deleted file mode 100644
index f2065da4..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/el.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","el",{title:"Οδηγίες ΠÏοσβασιμότητας",contents:"ΠεÏιεχόμενα Βοήθειας. Πατήστε ESC για κλείσιμο.",legend:[{name:"Γενικά",items:[{name:"ΕÏγαλειοθήκη ΕπεξεÏγαστή",legend:"Πατήστε ${toolbarFocus} για να πεÏιηγηθείτε στην γÏαμμή εÏγαλείων. Μετακινηθείτε ανάμεσα στις ομάδες της γÏαμμής εÏγαλείων με TAB και SHIFT-TAB. Μετακινηθείτε ανάμεσα στα κουμπιά εÏγαλείων με το ΔΕΞΙ ή ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να ενεÏγοποιήσετε το ενεÏγό κουμπί εÏγαλείου."},{name:"ΠαÏάθυÏο Διαλόγου ΕπεξεÏγαστή",
-legend:"Μέσα σε ένα παÏάθυÏο διαλόγου, πατήστε TAB για να μεταβείτε στο επόμενο πεδίο ή SHIFT + TAB για να μεταβείτε στο Ï€ÏοηγοÏμενο. Πατήστε ENTER για να υποβάλετε την φόÏμα. Πατήστε ESC για να ακυÏώσετε την διαδικασία της φόÏμας. Για παÏάθυÏα διαλόγων που έχουν πολλές σελίδες σε καÏτέλες πατήστε ALT + F10 για να μεταβείτε στην λίστα των καÏτελών. Στην συνέχεια μποÏείτε να μεταβείτε στην επόμενη καÏτέλα πατώντας το TAB ή το ΔΕΞΙ ΒΕΛΑΚΙ. ΜποÏείτε να μεταβείτε στην Ï€ÏοηγοÏμενη καÏτέλα πατώντας SHIFT + TAB ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξτε την καÏτέλα για Ï€Ïοβολή."},
-{name:"Αναδυόμενο ÎœÎµÎ½Î¿Ï Î•Ï€ÎµÎ¾ÎµÏγαστή",legend:"Πατήστε ${contextMenu} ή APPLICATION KEY για να ανοίξετε το αναδυόμενο μενοÏ. Μετά μετακινηθείτε στην επόμενη επιλογή του Î¼ÎµÎ½Î¿Ï Î¼Îµ TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στην Ï€ÏοηγοÏμενη επιλογή με SHIFT+TAB ή το ΠΑÎΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξτε το Ï„Ïέχων στοιχείο. Ανοίξτε το αναδυόμενο Î¼ÎµÎ½Î¿Ï Ï„Î·Ï‚ Ï„Ïέχουσας επιλογής με ΔΙΑΣΤΗΜΑ ή ENTER ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μεταβείτε πίσω στο αÏχικό στοιχείο Î¼ÎµÎ½Î¿Ï Î¼Îµ το ESC ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Κλείστε το αναδυόμενο Î¼ÎµÎ½Î¿Ï Î¼Îµ ESC."},
-{name:"Κουτί Λίστας ΕπεξεÏγαστών",legend:"Μέσα σε ένα κουτί λίστας, μετακινηθείτε στο επόμενο στοιχείο με TAB ή ΚΑΤΩ ΒΕΛΑΚΙ. Μετακινηθείτε στο Ï€ÏοηγοÏμενο στοιχείο με SHIFT + TAB ή το ΠΑÎΩ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε ένα στοιχείο. Πατήστε ESC για να κλείσετε το κουτί της λίστας."},{name:"ΜπάÏα ΔιαδÏομών Στοιχείων ΕπεξεÏγαστή",legend:"Πατήστε ${elementsPathFocus} για να πεÏιηγηθείτε στην μπάÏα διαδÏομών στοιχείων του επεξεÏγαστή. Μετακινηθείτε στο κουμπί του επόμενου στοιχείου με το TAB ή το ΔΕΞΙ ΒΕΛΑΚΙ. Μετακινηθείτε στο κουμπί του Ï€ÏοηγοÏμενου στοιχείου με το SHIFT+TAB ή το ΑΡΙΣΤΕΡΟ ΒΕΛΑΚΙ. Πατήστε ΔΙΑΣΤΗΜΑ ή ENTER για να επιλέξετε το στοιχείο στον επεξεÏγαστή."}]},
-{name:"Εντολές",items:[{name:"Εντολή αναίÏεσης",legend:"Πατήστε ${undo}"},{name:"Εντολή επανάληψης",legend:"Πατήστε ${redo}"},{name:"Εντολή έντονης γÏαφής",legend:"Πατήστε ${bold}"},{name:"Εντολή πλάγιας γÏαφής",legend:"Πατήστε ${italic}"},{name:"Εντολή υπογÏάμμισης",legend:"Πατήστε ${underline}"},{name:"Εντολή συνδέσμου",legend:"Πατήστε ${link}"},{name:"Εντολή ΣÏμπτηξης ΕÏγαλειοθήκης",legend:"Πατήστε ${toolbarCollapse}"},{name:"ΠÏόσβαση στην Ï€ÏοηγοÏμενη εντολή του χώÏου εστίασης ",legend:"Πατήστε ${accessPreviousSpace} για να έχετε Ï€Ïόσβαση στον πιο κοντινό χώÏο εστίασης Ï€Ïιν το δÏομέα, για παÏάδειγμα: δÏο παÏακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτÏων για να φθάσετε στους χώÏους μακÏινής εστίασης. "},
-{name:"ΠÏόσβαση στην επόμενη εντολή του χώÏου εστίασης",legend:"Πατήστε ${accessNextSpace} για να έχετε Ï€Ïόσβαση στον πιο κοντινό χώÏο εστίασης μετά το δÏομέα, για παÏάδειγμα: δÏο παÏακείμενα στοιχεία ΥΕ. Επαναλάβετε το συνδυασμό πλήκτÏων για τους χώÏους μακÏινής εστίασης. "},{name:"Βοήθεια ΠÏοσβασιμότητας",legend:"Πατήστε ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
-end:"End",home:"Home",leftArrow:"ΑÏιστεÏÏŒ Βέλος",upArrow:"Πάνω Βέλος",rightArrow:"Δεξί Βέλος",downArrow:"Κάτω Βέλος",insert:"Insert ","delete":"Delete",leftWindowKey:"ΑÏιστεÏÏŒ ΠλήκτÏο Windows",rightWindowKey:"Δεξί ΠλήκτÏο Windows",selectKey:"ΠλήκτÏο Select",numpad0:"ΑÏιθμητικό πληκτÏολόγιο 0",numpad1:"ΑÏιθμητικό ΠληκτÏολόγιο 1",numpad2:"ΑÏιθμητικό πληκτÏολόγιο 2",numpad3:"ΑÏιθμητικό πληκτÏολόγιο 3",numpad4:"ΑÏιθμητικό πληκτÏολόγιο 4",numpad5:"ΑÏιθμητικό πληκτÏολόγιο 5",numpad6:"ΑÏιθμητικό πληκτÏολόγιο 6",
-numpad7:"ΑÏιθμητικό πληκτÏολόγιο 7",numpad8:"ΑÏιθμητικό πληκτÏολόγιο 8",numpad9:"ΑÏιθμητικό πληκτÏολόγιο 9",multiply:"Πολλαπλασιασμός",add:"ΠÏόσθεση",subtract:"ΑφαίÏεση",decimalPoint:"Υποδιαστολή",divide:"ΔιαίÏεση",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"6",f7:"7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"ΕÏωτηματικό",equalSign:"ΣÏμβολο Ισότητας",comma:"Κόμμα",dash:"ΠαÏλα",period:"Τελεία",forwardSlash:"Κάθετος",graveAccent:"ΒαÏεία",openBracket:"Άνοιγμα ΠαÏένθεσης",
-backSlash:"ΑνάστÏοφη Κάθετος",closeBracket:"Κλείσιμο ΠαÏένθεσης",singleQuote:"ΑπόστÏοφος"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js
deleted file mode 100644
index 4182e6c2..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","en-gb",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/en.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/en.js
deleted file mode 100644
index ae9b3385..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/en.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","en",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"General",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js
deleted file mode 100644
index 081cc7e7..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","eo",{title:"Uzindikoj pri atingeblo",contents:"Helpilenhavo. Por fermi tiun dialogon, premu la ESKAPAN klavon.",legend:[{name:"Äœeneralaĵoj",items:[{name:"Ilbreto de la redaktilo",legend:"Premu ${toolbarFocus} por atingi la ilbreton. MoviÄu al la sekva aÅ­ antaÅ­a grupoj de la ilbreto per la klavoj TABA kaj MAJUSKLIGA-TABA. MoviÄu al la sekva aÅ­ antaÅ­a butonoj de la ilbreto per la klavoj SAGO DEKSTREN kaj SAGO MALDEKSTREN. Premu la SPACETklavon aÅ­ la ENENklavon por aktivigi la ilbretbutonon."},
-{name:"Redaktildialogo",legend:"En dialogo, premu la TABAN klavon por navigi al la sekva dialogkampo, premu la MAJUSKLIGAN + TABAN klavojn por reveni al la antaÅ­a kampo, premu la ENENklavon por sendi la dialogon, premu la ESKAPAN klavon por nuligi la dialogon. Por dialogoj kun pluraj retpaÄoj sub langetoj, premu ALT + F10 por navigi al la langetlisto. Poste moviÄu al la sekva langeto per la klavo TABA aÅ­ SAGO DEKSTREN. MoviÄu al la antaÅ­a langeto per la klavoj MAJUSKLIGA + TABA aÅ­ SAGO MALDEKSTREN. Premu la SPACETklavon aÅ­ la ENENklavon por selekti la langetretpaÄon."},
-{name:"Kunteksta menuo de la redaktilo",legend:"Premu ${contextMenu} aÅ­ entajpu la KLAVKOMBINAÄ´ON por malfermi la kuntekstan menuon. Poste moviÄu al la sekva opcio de la menuo per la klavoj TABA aÅ­ SAGO SUBEN. MoviÄu al la antaÅ­a opcio per la klavoj MAJUSKLGA + TABA aÅ­ SAGO SUPREN. Premu la SPACETklavon aÅ­ ENENklavon por selekti la menuopcion. Malfermu la submenuon de la kuranta opcio per la SPACETklavo aÅ­ la ENENklavo aÅ­ la SAGO DEKSTREN. Revenu al la elemento de la patra menuo per la klavoj ESKAPA aÅ­ SAGO MALDEKSTREN. Fermu la kuntekstan menuon per la ESKAPA klavo."},
-{name:"Fallisto de la redaktilo",legend:"En fallisto, moviÄu al la sekva listelemento per la klavoj TABA aÅ­ SAGO SUBEN. MoviÄu al la antaÅ­a listelemento per la klavoj MAJUSKLIGA + TABA aÅ­ SAGO SUPREN. Premu la SPACETklavon aÅ­ ENENklavon por selekti la opcion en la listo. Premu la ESKAPAN klavon por fermi la falmenuon."},{name:"Breto indikanta la vojon al la redaktilelementoj",legend:"Premu ${elementsPathFocus} por navigi al la breto indikanta la vojon al la redaktilelementoj. MoviÄu al la butono de la sekva elemento per la klavoj TABA aÅ­ SAGO DEKSTREN. MoviÄu al la butono de la antaÅ­a elemento per la klavoj MAJUSKLIGA + TABA aÅ­ SAGO MALDEKSTREN. Premu la SPACETklavon aÅ­ ENENklavon por selekti la elementon en la redaktilo."}]},
-{name:"Komandoj",items:[{name:"Komando malfari",legend:"Premu ${undo}"},{name:"Komando refari",legend:"Premu ${redo}"},{name:"Komando grasa",legend:"Premu ${bold}"},{name:"Komando kursiva",legend:"Premu ${italic}"},{name:"Komando substreki",legend:"Premu ${underline}"},{name:"Komando ligilo",legend:"Premu ${link}"},{name:"Komando faldi la ilbreton",legend:"Premu ${toolbarCollapse}"},{name:"Komando por atingi la antaÅ­an fokusan spacon",legend:"Press ${accessPreviousSpace} por atingi la plej proksiman neatingeblan fokusan spacon antaÅ­ la kursoro, ekzemple : du kuntuÅiÄajn HR elementojn. Ripetu la klavkombinaĵon por atingi malproksimajn fokusajn spacojn."},
-{name:"Komando por atingi la sekvan fokusan spacon",legend:"Press ${accessNextSpace} por atingi la plej proksiman neatingeblan fokusan spacon post la kursoro, ekzemple : du kuntuÅiÄajn HR elementojn. Ripetu la klavkombinajôn por atingi malproksimajn fokusajn spacojn"},{name:"Helpilo pri atingeblo",legend:"Premu ${a11yHelp}"}]}],backspace:"RetropaÅo",tab:"Tabo",enter:"Enigi",shift:"Registrumo",ctrl:"Stirklavo",alt:"Alt-klavo",pause:"PaÅ­zo",capslock:"Majuskla baskulo",escape:"Eskapa klavo",pageUp:"AntaÅ­a PaÄo",
-pageDown:"Sekva PaÄo",end:"Fino",home:"Hejmo",leftArrow:"Sago Maldekstren",upArrow:"Sago Supren",rightArrow:"Sago Dekstren",downArrow:"Sago Suben",insert:"Enmeti","delete":"Forigi",leftWindowKey:"Maldekstra Windows-klavo",rightWindowKey:"Dekstra Windows-klavo",selectKey:"Selektklavo",numpad0:"Nombra Klavaro 0",numpad1:"Nombra Klavaro 1",numpad2:"Nombra Klavaro 2",numpad3:"Nombra Klavaro 3",numpad4:"Nombra Klavaro 4",numpad5:"Nombra Klavaro 5",numpad6:"Nombra Klavaro 6",numpad7:"Nombra Klavaro 7",
-numpad8:"Nombra Klavaro 8",numpad9:"Nombra Klavaro 9",multiply:"Obligi",add:"Almeti",subtract:"Subtrahi",decimalPoint:"Dekuma Punkto",divide:"Dividi",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Nombra Baskulo",scrollLock:"Ruluma Baskulo",semiColon:"Punktokomo",equalSign:"Egalsigno",comma:"Komo",dash:"Haltostreko",period:"Punkto",forwardSlash:"Oblikvo",graveAccent:"Malakuto",openBracket:"Malferma Krampo",backSlash:"Retroklino",closeBracket:"Ferma Krampo",
-singleQuote:"Citilo"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/es.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/es.js
deleted file mode 100644
index eb30d5ee..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/es.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","es",{title:"Instrucciones de accesibilidad",contents:"Ayuda. Para cerrar presione ESC.",legend:[{name:"General",items:[{name:"Barra de herramientas del editor",legend:'Presiona ${toolbarFocus} para navegar por la barra de herramientas. Para moverse por los distintos grupos de herramientas usa las teclas TAB y MAY-TAB. Para moverse por las distintas herramientas usa FLECHA DERECHA o FECHA IZQUIERDA. Presiona "espacio" o "intro" para activar la herramienta.'},{name:"Editor de diálogo",
-legend:"Dentro de un cuadro de diálogo, presione la tecla TAB para desplazarse al campo siguiente del cuadro de diálogo, pulse SHIFT + TAB para desplazarse al campo anterior, pulse ENTER para presentar cuadro de diálogo, pulse la tecla ESC para cancelar el diálogo. Para los diálogos que tienen varias páginas, presione ALT + F10 para navegar a la pestaña de la lista. Luego pasar a la siguiente pestaña con TAB o FLECHA DERECHA. Para ir a la ficha anterior con SHIFT + TAB o FLECHA IZQUIERDA. Presione ESPACIO o ENTRAR para seleccionar la página de ficha."},
-{name:"Editor del menú contextual",legend:"Presiona ${contextMenu} o TECLA MENÚ para abrir el menú contextual. Entonces muévete a la siguiente opción del menú con TAB o FLECHA ABAJO. Muévete a la opción previa con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para seleccionar la opción del menú. Abre el submenú de la opción actual con ESPACIO o ENTER o FLECHA DERECHA. Regresa al elemento padre del menú con ESC o FLECHA IZQUIERDA. Cierra el menú contextual con ESC."},{name:"Lista del Editor",
-legend:"Dentro de una lista, te mueves al siguiente elemento de la lista con TAB o FLECHA ABAJO. Te mueves al elemento previo de la lista con SHIFT + TAB o FLECHA ARRIBA. Presiona ESPACIO o ENTER para elegir la opción de la lista. Presiona ESC para cerrar la lista."},{name:"Barra de Ruta del Elemento en el Editor",legend:"Presiona ${elementsPathFocus} para navegar a los elementos de la barra de ruta. Te mueves al siguiente elemento botón con TAB o FLECHA DERECHA. Te mueves al botón previo con SHIFT + TAB o FLECHA IZQUIERDA. Presiona ESPACIO o ENTER para seleccionar el elemento en el editor."}]},
-{name:"Comandos",items:[{name:"Comando deshacer",legend:"Presiona ${undo}"},{name:"Comando rehacer",legend:"Presiona ${redo}"},{name:"Comando negrita",legend:"Presiona ${bold}"},{name:"Comando itálica",legend:"Presiona ${italic}"},{name:"Comando subrayar",legend:"Presiona ${underline}"},{name:"Comando liga",legend:"Presiona ${liga}"},{name:"Comando colapsar barra de herramientas",legend:"Presiona ${toolbarCollapse}"},{name:"Comando accesar el anterior espacio de foco",legend:"Presiona ${accessPreviousSpace} para accesar el espacio de foco no disponible más cercano anterior al cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."},
-{name:"Comando accesar el siguiente spacio de foco",legend:"Presiona ${accessNextSpace} para accesar el espacio de foco no disponible más cercano después del cursor, por ejemplo: dos elementos HR adyacentes. Repite la combinación de teclas para alcanzar espacios de foco distantes."},{name:"Ayuda de Accesibilidad",legend:"Presiona ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
-end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",
-divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/et.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/et.js
deleted file mode 100644
index 4a893b0e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/et.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","et",{title:"Accessibility Instructions",contents:"Abi sisu. Selle dialoogi sulgemiseks vajuta ESC klahvi.",legend:[{name:"Ãœldine",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js
deleted file mode 100644
index a0a8ae55..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","fa",{title:"دستورالعمل‌های دسترسی",contents:"راهنمای Ùهرست مطالب. برای بستن این کادر محاوره‌ای ESC را Ùشار دهید.",legend:[{name:"عمومی",items:[{name:"نوار ابزار ویرایشگر",legend:"${toolbarFocus} را برای باز کردن نوار ابزار بÙشارید. با کلید Tab Ùˆ Shif-Tab در مجموعه نوار ابزار بعدی Ùˆ قبلی حرکت کنید. برای حرکت در کلید نوار ابزار قبلی Ùˆ بعدی با کلید جهت‌نمای راست Ùˆ Ú†Ù¾ جابجا شوید. کلید Space یا Enter را برای Ùعال کردن کلید نوار ابزار بÙشارید."},{name:"پنجره محاورهای ویرایشگر",
-legend:"در داخل یک پنجره محاورهای، کلید Tab را بÙشارید تا به پنجرهی بعدی بروید، Shift+Tab برای حرکت به Ùیلد قبلی، Ùشردن Enter برای ثبت اطلاعات پنجره، Ùشردن Esc برای لغو پنجره محاورهای Ùˆ برای پنجرههایی Ú©Ù‡ چندین برگه دارند، Ùشردن Alt+F10 جهت رÙتن به Tab-List. در نهایت حرکت به برگه بعدی با Tab یا کلید جهتنمای راست. حرکت به برگه قبلی با Shift+Tab یا کلید جهتنمای Ú†Ù¾. Ùشردن Space یا Enter برای انتخاب یک برگه."},{name:"منوی متنی ویرایشگر",legend:"${contextMenu} یا کلید برنامههای کاربردی را برای باز کردن منوی متن را بÙشارید. سپس میتوانید برای حرکت به گزینه بعدی منو با کلید Tab Ùˆ یا کلید جهتنمای پایین جابجا شوید. حرکت به گزینه قبلی با Shift+Tab یا کلید جهتنمای بالا. Ùشردن Space یا Enter برای انتخاب یک گزینه از منو. باز کردن زیر شاخه گزینه منو جاری با کلید Space یا Enter Ùˆ یا کلید جهتنمای راست Ùˆ Ú†Ù¾. بازگشت به منوی والد با کلید Esc یا کلید جهتنمای Ú†Ù¾. بستن منوی متن با Esc."},
-{name:"جعبه Ùهرست ویرایشگر",legend:"در داخل جعبه لیست، قلم دوم از اقلام لیست بعدی را با TAB Ùˆ یا Arrow Down حرکت دهید. انتقال به قلم دوم از اقلام لیست قبلی را با SHIFT + TAB یا UP ARROW. کلید Space یا ENTER را برای انتخاب گزینه لیست بÙشارید. کلید ESC را برای بستن جعبه لیست بÙشارید."},{name:"ویرایشگر عنصر نوار راه",legend:"برای رÙتن به مسیر عناصر ${elementsPathFocus} را بÙشارید. حرکت به کلید عنصر بعدی با کلید Tab یا کلید جهت‌نمای راست. برگشت به کلید قبلی با Shift+Tab یا کلید جهت‌نمای Ú†Ù¾. Ùشردن Space یا Enter برای انتخاب یک عنصر در ویرایشگر."}]},
-{name:"Ùرمان‌ها",items:[{name:"بازگشت به آخرین Ùرمان",legend:"Ùشردن ${undo}"},{name:"انجام مجدد Ùرمان",legend:"Ùشردن ${redo}"},{name:"Ùرمان درشت کردن متن",legend:"Ùشردن ${bold}"},{name:"Ùرمان کج کردن متن",legend:"Ùشردن ${italic}"},{name:"Ùرمان زیرخطدار کردن متن",legend:"Ùشردن ${underline}"},{name:"Ùرمان پیوند دادن",legend:"Ùشردن ${link}"},{name:"بستن نوار ابزار Ùرمان",legend:"Ùشردن ${toolbarCollapse}"},{name:"دسترسی به Ùرمان محل تمرکز قبلی",legend:"Ùشردن ${accessPreviousSpace} برای دسترسی به نزدیک‌ترین Ùضای قابل دسترسی تمرکز قبل از هشتک، برای مثال: دو عنصر مجاور HR -خط اÙÙ‚ÛŒ-. تکرار کلید ترکیبی برای رسیدن به Ùضاهای تمرکز از راه دور."},
-{name:"دسترسی به Ùضای دستور بعدی",legend:"برای دسترسی به نزدیک‌ترین Ùضای تمرکز غیر قابل دسترس، ${accessNextSpace} را پس از علامت هشتک بÙشارید، برای مثال: دو عنصر مجاور HR -خط اÙÙ‚ÛŒ-. کلید ترکیبی را برای رسیدن به Ùضای تمرکز تکرار کنید."},{name:"راهنمای دسترسی",legend:"Ùشردن ${a11yHelp}"}]}],backspace:"عقبگرد",tab:"برگه",enter:"ورود",shift:"تعویض",ctrl:"کنترل",alt:"دگرساز",pause:"توقÙ",capslock:"Caps Lock",escape:"گریز",pageUp:"صÙحه به بالا",pageDown:"صÙحه به پایین",end:"پایان",home:"خانه",leftArrow:"پیکان Ú†Ù¾",
-upArrow:"پیکان بالا",rightArrow:"پیکان راست",downArrow:"پیکان پایین",insert:"ورود","delete":"حذÙ",leftWindowKey:"کلید Ú†Ù¾ ویندوز",rightWindowKey:"کلید راست ویندوز",selectKey:"انتخاب کلید",numpad0:"کلید شماره 0",numpad1:"کلید شماره 1",numpad2:"کلید شماره 2",numpad3:"کلید شماره 3",numpad4:"کلید شماره 4",numpad5:"کلید شماره 5",numpad6:"کلید شماره 6",numpad7:"کلید شماره 7",numpad8:"کلید شماره 8",numpad9:"کلید شماره 9",multiply:"ضرب",add:"اÙزودن",subtract:"تÙریق",decimalPoint:"نقطه‌ی اعشار",divide:"جدا کردن",
-f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"علامت تساوی",comma:"کاما",dash:"خط تیره",period:"دوره",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js
deleted file mode 100644
index 644d45bd..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","fi",{title:"Saavutettavuus ohjeet",contents:"Ohjeen sisällöt. Sulkeaksesi tämän dialogin paina ESC.",legend:[{name:"Yleinen",items:[{name:"Editorin työkalupalkki",legend:"Paina ${toolbarFocus} siirtyäksesi työkalupalkkiin. Siirry seuraavaan ja edelliseen työkalupalkin ryhmään TAB ja SHIFT-TAB näppäimillä. Siirry seuraavaan ja edelliseen työkalupainikkeeseen käyttämällä NUOLI OIKEALLE tai NUOLI VASEMMALLE näppäimillä. Paina VÄLILYÖNTI tai ENTER näppäintä aktivoidaksesi työkalupainikkeen."},
-{name:"Editorin dialogi",legend:"Dialogin sisällä, painamalla TAB siirryt seuraavaan dialogin kenttään, painamalla SHIFT+TAB siirryt aiempaan kenttään, painamalla ENTER lähetät dialogin, painamalla ESC peruutat dialogin. Dialogeille joissa on useita välilehtiä, paina ALT+F10 siirtyäksesi välillehtilistaan. Siirtyäksesi seuraavaan välilehteen paina TAB tai NUOLI OIKEALLE. Siirry edelliseen välilehteen painamalla SHIFT+TAB tai nuoli vasemmalle. Paina VÄLILYÖNTI tai ENTER valitaksesi välilehden."},{name:"Editorin oheisvalikko",
-legend:"Paina ${contextMenu} tai SOVELLUSPAINIKETTA avataksesi oheisvalikon. Liiku seuraavaan valikon vaihtoehtoon TAB tai NUOLI ALAS näppäimillä. Siirry edelliseen vaihtoehtoon SHIFT+TAB tai NUOLI YLÖS näppäimillä. Paina VÄLILYÖNTI tai ENTER valitaksesi valikon kohdan. Avataksesi nykyisen kohdan alivalikon paina VÄLILYÖNTI tai ENTER tai NUOLI OIKEALLE painiketta. Siirtyäksesi takaisin valikon ylemmälle tasolle paina ESC tai NUOLI vasemmalle. Oheisvalikko suljetaan ESC painikkeella."},{name:"Editorin listalaatikko",
-legend:"Listalaatikon sisällä siirry seuraavaan listan kohtaan TAB tai NUOLI ALAS painikkeilla. Siirry edelliseen listan kohtaan SHIFT+TAB tai NUOLI YLÖS painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi listan vaihtoehdon. Paina ESC sulkeaksesi listalaatikon."},{name:"Editorin elementtipolun palkki",legend:"Paina ${elementsPathFocus} siirtyäksesi elementtipolun palkkiin. Siirry seuraavaan elementtipainikkeeseen TAB tai NUOLI OIKEALLE painikkeilla. Siirry aiempaan painikkeeseen SHIFT+TAB tai NUOLI VASEMMALLE painikkeilla. Paina VÄLILYÖNTI tai ENTER valitaksesi elementin editorissa."}]},
-{name:"Komennot",items:[{name:"Peruuta komento",legend:"Paina ${undo}"},{name:"Tee uudelleen komento",legend:"Paina ${redo}"},{name:"Lihavoi komento",legend:"Paina ${bold}"},{name:"Kursivoi komento",legend:"Paina ${italic}"},{name:"Alleviivaa komento",legend:"Paina ${underline}"},{name:"Linkki komento",legend:"Paina ${link}"},{name:"Pienennä työkalupalkki komento",legend:"Paina ${toolbarCollapse}"},{name:"Siirry aiempaan fokustilaan komento",legend:"Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin edellä olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin."},
-{name:"Siirry seuraavaan fokustilaan komento",legend:"Paina ${accessPreviousSpace} siiryäksesi lähimpään kursorin jälkeen olevaan saavuttamattomaan fokustilaan, esimerkiksi: kaksi vierekkäistä HR elementtiä. Toista näppäinyhdistelmää päästäksesi kauempana oleviin fokustiloihin."},{name:"Saavutettavuus ohjeet",legend:"Paina ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
-end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numeronäppäimistö 0",numpad1:"Numeronäppäimistö 1",numpad2:"Numeronäppäimistö 2",numpad3:"Numeronäppäimistö 3",numpad4:"Numeronäppäimistö 4",numpad5:"Numeronäppäimistö 5",numpad6:"Numeronäppäimistö 6",numpad7:"Numeronäppäimistö 7",numpad8:"Numeronäppäimistö 8",
-numpad9:"Numeronäppäimistö 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Puolipiste",equalSign:"Equal Sign",comma:"Pilkku",dash:"Dash",period:"Piste",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js
deleted file mode 100644
index 15c3c4eb..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","fr-ca",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer cette fenêtre, appuyez sur ESC.",legend:[{name:"Général",items:[{name:"Barre d'outil de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches TAB et SHIFT-TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour activer le bouton de barre d'outils."},
-{name:"Dialogue de l'éditeur",legend:"A l'intérieur d'un dialogue, appuyer sur la touche TAB pour naviguer jusqu'au champ de dalogue suivant, appuyez sur les touches SHIFT + TAB pour revenir au champ précédent, appuyez sur la touche ENTRER pour soumettre le dialogue, appuyer sur la touche ESC pour annuler le dialogue. Pour les dialogues avec plusieurs pages d'onglets, appuyer sur ALT + F10 pour naviguer jusqu'à la liste des onglets. Puis se déplacer vers l'onglet suivant avec la touche TAB ou FLECHE DROITE. Se déplacer vers l'onglet précédent avec les touches SHIFT + TAB ou FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour sélectionner la page de l'onglet."},
-{name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l'option précédente avec les touches SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTREE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l'élément de menu parent avec les touches ESC ou FLECHE GAUCHE. Fermer le menu contextuel avec ESC."},
-{name:"Menu déroulant de l'éditeur",legend:"A l'intérieur d'une liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches SHIFT + TAB ou FLECHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant."},{name:"Barre d'emplacement des éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de léditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches SHIFT+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'élément dans l'éditeur."}]},
-{name:"Commandes",items:[{name:"Annuler",legend:"Appuyer sur ${undo}"},{name:"Refaire",legend:"Appuyer sur ${redo}"},{name:"Gras",legend:"Appuyer sur ${bold}"},{name:"Italique",legend:"Appuyer sur ${italic}"},{name:"Souligné",legend:"Appuyer sur ${underline}"},{name:"Lien",legend:"Appuyer sur ${link}"},{name:"Enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Accéder à l'objet de focus précédent",legend:"Appuyer ${accessPreviousSpace} pour accéder au prochain espace disponible avant le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d'espaces distantes."},
-{name:"Accéder au prochain objet de focus",legend:"Appuyer ${accessNextSpace} pour accéder au prochain espace disponible après le curseur, par exemple: deux éléments HR adjacents. Répéter la combinaison pour joindre les éléments d'espaces distantes."},{name:"Aide d'accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",
-leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",
-f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js
deleted file mode 100644
index a7de279a..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","fr",{title:"Instructions d'accessibilité",contents:"Contenu de l'aide. Pour fermer ce dialogue, appuyez sur la touche Ech (Echappement).",legend:[{name:"Général",items:[{name:"Barre d'outils de l'éditeur",legend:"Appuyer sur ${toolbarFocus} pour accéder à la barre d'outils. Se déplacer vers les groupes suivant ou précédent de la barre d'outil avec les touches TAB et SHIFT-TAB. Se déplacer vers les boutons suivant ou précédent de la barre d'outils avec les touches FLECHE DROITE et FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour activer le bouton de barre d'outils."},
-{name:"Dialogue de l'éditeur",legend:"A l'intérieur d'un dialogue, appuyer sur la touche TAB pour naviguer jusqu'au champ de dalogue suivant, appuyez sur les touches SHIFT + TAB pour revenir au champ précédent, appuyez sur la touche ENTRER pour soumettre le dialogue, appuyer sur la touche ESC pour annuler le dialogue. Pour les dialogues avec plusieurs pages d'onglets, appuyer sur ALT + F10 pour naviguer jusqu'à la liste des onglets. Puis se déplacer vers l'onglet suivant avec la touche TAB ou FLECHE DROITE. Se déplacer vers l'onglet précédent avec les touches SHIFT + TAB ou FLECHE GAUCHE. Appuyer sur la barre d'espace ou la touche ENTRER pour sélectionner la page de l'onglet."},
-{name:"Menu contextuel de l'éditeur",legend:"Appuyer sur ${contextMenu} ou entrer le RACCOURCI CLAVIER pour ouvrir le menu contextuel. Puis se déplacer vers l'option suivante du menu avec les touches TAB ou FLECHE BAS. Se déplacer vers l'option précédente avec les touches SHIFT+TAB ou FLECHE HAUT. appuyer sur la BARRE D'ESPACE ou la touche ENTREE pour sélectionner l'option du menu. Oovrir le sous-menu de l'option courante avec la BARRE D'ESPACE ou les touches ENTREE ou FLECHE DROITE. Revenir à l'élément de menu parent avec les touches Ech ou FLECHE GAUCHE. Fermer le menu contextuel avec Ech."},
-{name:"Zone de liste de l'éditeur",legend:"Dans la liste en menu déroulant, se déplacer vers l'élément suivant de la liste avec les touches TAB ou FLECHE BAS. Se déplacer vers l'élément précédent de la liste avec les touches MAJ + TAB ou FLECHE HAUT. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'option dans la liste. Appuyer sur ESC pour fermer le menu déroulant."},{name:"Barre d'emplacement des éléments de l'éditeur",legend:"Appuyer sur ${elementsPathFocus} pour naviguer vers la barre d'emplacement des éléments de l'éditeur. Se déplacer vers le bouton d'élément suivant avec les touches TAB ou FLECHE DROITE. Se déplacer vers le bouton d'élément précédent avec les touches MAJ+TAB ou FLECHE GAUCHE. Appuyer sur la BARRE D'ESPACE ou sur ENTREE pour sélectionner l'élément dans l'éditeur."}]},
-{name:"Commandes",items:[{name:" Annuler la commande",legend:"Appuyer sur ${undo}"},{name:"Refaire la commande",legend:"Appuyer sur ${redo}"},{name:" Commande gras",legend:"Appuyer sur ${bold}"},{name:" Commande italique",legend:"Appuyer sur ${italic}"},{name:" Commande souligné",legend:"Appuyer sur ${underline}"},{name:" Commande lien",legend:"Appuyer sur ${link}"},{name:" Commande enrouler la barre d'outils",legend:"Appuyer sur ${toolbarCollapse}"},{name:"Accéder à la précédente commande d'espace de mise au point",
-legend:"Appuyez sur ${accessPreviousSpace} pour accéder à l'espace hors d'atteinte le plus proche avant le caret, par exemple: deux éléments HR adjacents. Répétez la combinaison de touches pour atteindre les espaces de mise au point distants."},{name:"Accès à la prochaine commande de l'espace de mise au point",legend:"Appuyez sur ${accessNextSpace} pour accéder au plus proche espace de mise au point hors d'atteinte après le caret, par exemple: deux éléments HR adjacents. répétez la combinaison de touches pour atteindre les espace de mise au point distants."},
-{name:" Aide Accessibilité",legend:"Appuyer sur ${a11yHelp}"}]}],backspace:"Retour arrière",tab:"Tabulation",enter:"Entrée",shift:"Majuscule",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Verr. Maj.",escape:"Echap",pageUp:"Page supérieure",pageDown:"Page inférieure",end:"Fin",home:"Retour",leftArrow:"Flèche gauche",upArrow:"Flèche haute",rightArrow:"Flèche droite",downArrow:"Flèche basse",insert:"Insertion","delete":"Supprimer",leftWindowKey:"Touche Windows gauche",rightWindowKey:"Touche Windows droite",
-selectKey:"Touche menu",numpad0:"Pavé numérique 0",numpad1:"Pavé numérique 1",numpad2:"Pavé numérique 2",numpad3:"Pavé numérique 3",numpad4:"Pavé numérique 4",numpad5:"Pavé numérique 5",numpad6:"Pavé numérique 6",numpad7:"Pavé numérique 7",numpad8:"Pavé numérique 8",numpad9:"Pavé numérique 9",multiply:"Multiplier",add:"Addition",subtract:"Soustraire",decimalPoint:"Point décimal",divide:"Diviser",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",
-numLock:"Verrouillage numérique",scrollLock:"Arrêt défilement",semiColon:"Point virgule",equalSign:"Signe égal",comma:"Virgule",dash:"Tiret",period:"Point",forwardSlash:"Barre oblique",graveAccent:"Accent grave",openBracket:"Parenthèse ouvrante",backSlash:"Barre oblique inverse",closeBracket:"Parenthèse fermante",singleQuote:"Apostrophe"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js
deleted file mode 100644
index 37fea83b..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","gl",{title:"Instrucións de accesibilidade",contents:"Axuda. Para pechar este diálogo prema ESC.",legend:[{name:"Xeral",items:[{name:"Barra de ferramentas do editor",legend:"Prema ${toolbarFocus} para navegar pola barra de ferramentas. Para moverse polos distintos grupos de ferramentas use as teclas TAB e MAIÚS+TAB. Para moverse polas distintas ferramentas use FRECHA DEREITA ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para activar o botón da barra de ferramentas."},
-{name:"Editor de diálogo",legend:"Dentro dun cadro de diálogo, prema a tecla TAB para desprazarse ao campo seguinte do cadro de diálogo, prema MAIÚS + TAB para desprazarse ao campo anterior, prema INTRO para presentar o cadro de diálogo, prema a tecla ESC para cancelar o diálogo. Para os diálogos que teñen varias páxinas, prema ALT + F10 para navegar á lapela da lista. Despois pasar á seguinte lapela con TAB ou FRECHA DEREITA. Para ir á lapela anterior con SHIFT + TAB ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para seleccionar a lapela da páxina."},
-{name:"Editor do menú contextual",legend:"Prema ${contextMenu} ou a TECLA MENÚ para abrir o menú contextual. A seguir móvase á seguinte opción do menú con TAB ou FRECHA ABAIXO. Móvase á opción anterior con MAIÚS + TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para seleccionar a opción do menú. Abra o submenú da opción actual con ESPAZO ou INTRO ou FRECHA DEREITA. Regrese ao elemento principal do menú con ESC ou FRECHA ESQUERDA. Peche o menú contextual con ESC."},{name:"Lista do editor",legend:"Dentro dunha lista, móvase ao seguinte elemento da lista con TAB ou FRECHA ABAIXO. Móvase ao elemento anterior da lista con MAIÚS + TAB ou FRECHA ARRIBA. Prema ESPAZO ou INTRO para escoller a opción da lista. Prema ESC para pechar a lista."},
-{name:"Barra da ruta ao elemento no editor",legend:"Prema ${elementsPathFocus} para navegar ata os elementos da barra de ruta. Móvase ao seguinte elemento botón con TAB ou FRECHA DEREITA. Móvase ao botón anterior con MAIÚS + TAB ou FRECHA ESQUERDA. Prema ESPAZO ou INTRO para seleccionar o elemento no editor."}]},{name:"Ordes",items:[{name:"Orde «desfacer»",legend:"Prema ${undo}"},{name:"Orde «refacer»",legend:"Prema ${redo}"},{name:"Orde «negra»",legend:"Prema ${bold}"},{name:"Orde «cursiva»",legend:"Prema ${italic}"},
-{name:"Orde «subliñar»",legend:"Prema ${underline}"},{name:"Orde «ligazón»",legend:"Prema ${link}"},{name:"Orde «contraer a barra de ferramentas»",legend:"Prema ${toolbarCollapse}"},{name:"Orde «acceder ao anterior espazo en foco»",legend:"Prema ${accessPreviousSpace} para acceder ao espazo máis próximo de foco inalcanzábel anterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes."},{name:"Orde «acceder ao seguinte espazo en foco»",
-legend:"Prema ${accessNextSpace} para acceder ao espazo máis próximo de foco inalcanzábel posterior ao cursor, por exemplo: dous elementos HR adxacentes. Repita a combinación de teclas para chegar a espazos de foco distantes."},{name:"Axuda da accesibilidade",legend:"Prema ${a11yHelp}"}]}],backspace:"Ir atrás",tab:"Tabulador",enter:"Intro",shift:"Maiús",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloq. Maiús",escape:"Escape",pageUp:"Páxina arriba",pageDown:"Páxina abaixo",end:"Fin",home:"Inicio",
-leftArrow:"Frecha esquerda",upArrow:"Frecha arriba",rightArrow:"Frecha dereita",downArrow:"Frecha abaixo",insert:"Inserir","delete":"Supr",leftWindowKey:"Tecla Windows esquerda",rightWindowKey:"Tecla Windows dereita",selectKey:"Escolla a tecla",numpad0:"Tec. numérico 0",numpad1:"Tec. numérico 1",numpad2:"Tec. numérico 2",numpad3:"Tec. numérico 3",numpad4:"Tec. numérico 4",numpad5:"Tec. numérico 5",numpad6:"Tec. numérico 6",numpad7:"Tec. numérico 7",numpad8:"Tec. numérico 8",numpad9:"Tec. numérico 9",
-multiply:"Multiplicar",add:"Sumar",subtract:"Restar",decimalPoint:"Punto decimal",divide:"Dividir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloq. num.",scrollLock:"Bloq. despraz.",semiColon:"Punto e coma",equalSign:"Signo igual",comma:"Coma",dash:"Guión",period:"Punto",forwardSlash:"Barra inclinada",graveAccent:"Acento grave",openBracket:"Abrir corchete",backSlash:"Barra invertida",closeBracket:"Pechar corchete",singleQuote:"Comiña simple"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js
deleted file mode 100644
index 2982b4f7..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","gu",{title:"àªàª•à«àª•à«àª·à«‡àª¬àª¿àª²àª¿àªŸà«€ ની વિગતો",contents:"હેલà«àªª. આ બંધ કરવા ESC દબાવો.",legend:[{name:"જનરલ",items:[{name:"àªàª¡àª¿àªŸàª° ટૂલબાર",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"àªàª¡àª¿àªŸàª° ડાયલોગ",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"કમાંડસ",items:[{name:"અનà«àª¡à«àª‚ કમાંડ",legend:"$ દબાવો {undo}"},{name:"ફરી કરો કમાંડ",legend:"$ દબાવો {redo}"},{name:"બોલà«àª¦àª¨à«‹ કમાંડ",legend:"$ દબાવો {bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/he.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/he.js
deleted file mode 100644
index 6be2191c..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/he.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","he",{title:"הור×ות נגישות",contents:"הור×ות נגישות. לסגירה לחץ ×סקייפ (ESC).",legend:[{name:"כללי",items:[{name:"סרגל הכלי×",legend:"לחץ על ${toolbarFocus} כדי לנווט לסרגל הכלי×. עבור לכפתור ×”×‘× ×¢× ×ž×§×© הט×ב (TAB) ×ו ×—×¥ שמ×לי. עבור לכפתור ×”×§×•×“× ×¢× ×ž×§×© השיפט (SHIFT) + ט×ב (TAB) ×ו ×—×¥ ימני. לחץ רווח ×ו ×נטר (ENTER) כדי להפעיל ×ת הכפתור הנבחר."},{name:"די××œ×•×’×™× (חלונות תש×ול)",legend:"בתוך די×לוג, לחץ ט×ב (TAB) כדי לנווט לשדה הב×, לחץ שיפט (SHIFT) + ט×ב (TAB) כדי לנווט לשדה הקוד×, לחץ ×נטר (ENTER) כדי לשלוח ×ת הדי×לוג, לחץ ×סקייפ (ESC) כדי לבטל. בתוך די××œ×•×’×™× ×‘×¢×œ×™ מספר ט××‘×™× (לשוניות), לחץ ×לט (ALT) + F10 כדי לנווט לשורת הט×בי×. נווט לט×ב ×”×‘× ×¢× ×˜×ב (TAB) ×ו ×—×¥ שמ×לי. עבור לט×ב ×”×§×•×“× ×¢× ×©×™×¤×˜ (SHIFT) + ט×ב (TAB) ×ו ×—×¥ שמ×לי. לחץ רווח ×ו ×נטר (ENTER) כדי להיכנס לט×ב."},
-{name:"תפריט ההקשר (Context Menu)",legend:"לחץ ${contextMenu} ×ו APPLICATION KEYכדי לפתוח ×ת תפריט ההקשר. עבור ל×פשרות הב××” ×¢× ×˜×ב (TAB) ×ו ×—×¥ למטה. עבור ל×פשרות הקודמת ×¢× ×©×™×¤×˜ (SHIFT) + ט×ב (TAB) ×ו ×—×¥ למעלה. לחץ רווח ×ו ×נטר (ENTER) כדי לבחור ×ת ×”×פשרות. פתח ×ת תת התפריט (Sub-menu) של ×”×פשרות הנוכחית ×¢× ×¨×•×•×— ×ו ×נטר (ENTER) ×ו ×—×¥ שמ×לי. חזור לתפריט ×”×ב ×¢× ×סקייפ (ESC) ×ו ×—×¥ שמ×לי. סגור ×ת תפריט ההקשר ×¢× ×סקייפ (ESC)."},{name:"×ª×¤×¨×™×˜×™× ×¦×¤×™× (List boxes)",legend:"בתוך תפריט צף, עבור לפריט ×”×‘× ×¢× ×˜×ב (TAB) ×ו ×—×¥ למטה. עבור לתפריט ×”×§×•×“× ×¢× ×©×™×¤×˜ (SHIFT) + ט×ב (TAB) or ×—×¥ עליון. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"×¢×¥ ××œ×ž× ×˜×™× (Elements Path)",legend:"לחץ ${elementsPathFocus} כדי לנווט לעץ ×”×למנטי×. עבור לפריט ×”×‘× ×¢× ×˜×ב (TAB) ×ו ×—×¥ ימני. עבור לפריט ×”×§×•×“× ×¢× ×©×™×¤×˜ (SHIFT) + ט×ב (TAB) ×ו ×—×¥ שמ×לי. לחץ רווח ×ו ×נטר (ENTER) כדי לבחור ×ת ×”×למנט בעורך."}]},{name:"פקודות",items:[{name:" ביטול צעד ×חרון",legend:"לחץ ${undo}"},{name:" חזרה על צעד ×חרון",legend:"לחץ ${redo}"},{name:" הדגשה",legend:"לחץ ${bold}"},{name:" הטייה",legend:"לחץ ${italic}"},{name:" הוספת קו תחתון",legend:"לחץ ${underline}"},{name:" הוספת לינק",
-legend:"לחץ ${link}"},{name:" כיווץ סרגל הכלי×",legend:"לחץ ${toolbarCollapse}"},{name:"גישה ×œ×ž×™×§×•× ×”×ž×™×§×•×“ הקוד×",legend:"לחץ ${accessPreviousSpace} כדי לגשת ×œ×ž×™×§×•× ×”×ž×™×§×•×“ הל×-נגיש הקרוב לפני הסמן, למשל בין שני ××œ×ž× ×˜×™× ×¡×ž×•×›×™× ×ž×¡×•×’ HR. חזור על צירוף ×ž×§×©×™× ×–×” כדי להגיע למקומות מיקוד ×¨×—×•×§×™× ×™×•×ª×¨."},{name:"גישה ×œ×ž×™×§×•× ×”×ž×™×§×•×“ הב×",legend:"לחץ ${accessNextSpace} כדי לגשת ×œ×ž×™×§×•× ×”×ž×™×§×•×“ הל×-נגיש הקרוב ×חרי הסמן, למשל בין שני ××œ×ž× ×˜×™× ×¡×ž×•×›×™× ×ž×¡×•×’ HR. חזור על צירוף ×ž×§×©×™× ×–×” כדי להגיע למקומות מיקוד ×¨×—×•×§×™× ×™×•×ª×¨."},
-{name:" הור×ות נגישות",legend:"לחץ ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"×—×¥ שמ×לה",upArrow:"×—×¥ למעלה",rightArrow:"×—×¥ ימינה",downArrow:"×—×¥ למטה",insert:"הכנס","delete":"מחק",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"בחר מקש",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",
-numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"הוסף",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"סל×ש",graveAccent:"Grave Accent",
-openBracket:"Open Bracket",backSlash:"סל×ש הפוך",closeBracket:"Close Bracket",singleQuote:"ציטוט יחיד"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js
deleted file mode 100644
index 2e50a82a..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","hi",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"सामानà¥à¤¯",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js
deleted file mode 100644
index 3cf43663..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","hr",{title:"Upute dostupnosti",contents:"Sadržaj pomoći. Za zatvaranje pritisnite ESC.",legend:[{name:"Općenito",items:[{name:"Alatna traka",legend:"Pritisni ${toolbarFocus} za navigaciju do alatne trake. Pomicanje do prethodne ili sljedeće alatne grupe vrši se pomoću SHIFT-TAB i TAB. Pomicanje do prethodnog ili sljedećeg gumba u alatnoj traci vrši se pomoću lijeve i desne strelice kursora. Pritisnite SPACE ili ENTER za aktivaciju alatne trake."},{name:"Dijalog",
-legend:"Unutar dijaloga, pritisnite TAB za navigaciju do sljedećeg polja, pritisnite SHIFT + TAB za vraćanje na prethodno polje, pritisnite ENTER za slanje dijaloga ili ESC za zatvaranje dijaloga. Za dijaloge koji imaju višestruke kartice, pritisnite ALT + F10 za na navigaciju i zatim TAB ili lijeva strelica kursora ili SHIFT + TAB i desna strelica kursora. SPACE ili ENTER odabiru karticu."},{name:"Kontekstni izbornik",legend:"Pritisnite ${contextMenu} ili APPLICATION tipku za otvaranje kontekstnog izbornika. Pomicanje se vrši TAB ili strelicom kursora prema dolje ili SHIFT+TAB ili strelica kursora prema gore. SPACE ili ENTER odabiru opciju izbornika. Otvorite podizbornik trenutne opcije sa SPACE, ENTER ili desna strelica kursora. Povratak na prethodni izbornik vrši se sa ESC ili lijevom strelicom kursora. Zatvaranje se vrši pritiskom na tipku ESC."},
-{name:"Lista",legend:"Unutar list-boxa, pomicanje na sljedeću stavku vrši se sa TAB ili strelica kursora prema dolje. Na prethodnu sa SHIFT + TAB ili strelica prema gore. Pritiskom na SPACE ili ENTER odabire se stavka ili ESC za zatvaranje."},{name:"Traka putanje elemenata",legend:"Pritisnite ${elementsPathFocus} za navigaciju po putanji elemenata. Pritisnite TAB ili desnu strelicu kursora za pomicanje na sljedeći element ili SHIFT + TAB ili lijeva strelica kursora za pomicanje na prethodni element. Pritiskom na SPACE ili ENTER vrši se odabir elementa."}]},
-{name:"Naredbe",items:[{name:"Vrati naredbu",legend:"Pritisni ${undo}"},{name:"Ponovi naredbu",legend:"Pritisni ${redo}"},{name:"Bold naredba",legend:"Pritisni ${bold}"},{name:"Italic naredba",legend:"Pritisni ${italic}"},{name:"Underline naredba",legend:"Pritisni ${underline}"},{name:"Link naredba",legend:"Pritisni ${link}"},{name:"Smanji alatnu traku naredba",legend:"Pritisni ${toolbarCollapse}"},{name:"Access previous focus space naredba",legend:"Pritisni ${accessPreviousSpace} za pristup najbližem nedostupnom razmaku prije kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak."},
-{name:"Access next focus space naredba",legend:"Pritisni ${accessNextSpace} za pristup najbližem nedostupnom razmaku nakon kursora, npr.: dva spojena HR elementa. Ponovnim pritiskom dohvatiti će se sljedeći nedostupni razmak."},{name:"Pomoć za dostupnost",legend:"Pritisni ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",
-upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",
-f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js
deleted file mode 100644
index 41d64897..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","hu",{title:"KisegítÅ‘ utasítások",contents:"Súgó tartalmak. A párbeszédablak bezárásához nyomjon ESC-et.",legend:[{name:"Ãltalános",items:[{name:"SzerkesztÅ‘ Eszköztár",legend:"Nyomjon ${toolbarFocus} hogy kijelölje az eszköztárat. A következÅ‘ és elÅ‘zÅ‘ eszköztár csoporthoz a TAB és SHIFT TAB-al juthat el. A következÅ‘ és elÅ‘zÅ‘ eszköztár gombhoz a BAL NYÃL vagy JOBB NYÃL gombbal juthat el. Nyomjon SPACE-t vagy ENTER-t hogy aktiválja az eszköztár gombot."},{name:"SzerkeszÅ‘ párbeszéd ablak",
-legend:"Párbeszédablakban nyomjon TAB-ot a következÅ‘ párbeszédmezÅ‘höz ugráshoz, nyomjon SHIFT + TAB-ot az elÅ‘zÅ‘ mezÅ‘höz ugráshoz, nyomjon ENTER-t a párbeszédablak elfogadásához, nyomjon ESC-et a párbeszédablak elvetéséhez. Azokhoz a párbeszédablakokhoz, amik több fület tartalmaznak, nyomjon ALT + F10-et hogy a fülekre ugorjon. Ezután a TAB-al vagy a JOBB NYÃLLAL a következÅ‘ fülre ugorhat. Az elÅ‘zÅ‘ fülre ugráshoz használja a SHIFT + TAB-ot vagy a BAL NYILAT. Nyomjon SPACE-t vagy ENTER-t hogy kijelölje a fület."},
-{name:"SzerkesztÅ‘ helyi menü",legend:"Nyomjon ${contextMenu}-t vagy ALKALMAZÃS BILLENTYÅ°T a helyi menü megnyitásához. Ezután a következÅ‘ menüpontra léphet a TAB vagy LEFELÉ NYÃLLAL. Az elÅ‘zÅ‘ opciót a SHIFT+TAB vagy FELFELÉ NYÃLLAL érheti el. Nyomjon SPACE-t vagy ENTER-t a menüpont kiválasztásához. A jelenlegi menüpont almenüjének megnyitásához nyomjon SPACE-t vagy ENTER-t, vagy JOBB NYILAT. A fÅ‘menühöz való visszatéréshez nyomjon ESC-et vagy BAL NYILAT. A helyi menü bezárása az ESC billentyűvel lehetséges."},
-{name:"SzerkesztÅ‘ lista",legend:"A listán belül a következÅ‘ elemre a TAB vagy LEFELÉ NYÃLLAL mozoghat. Az elÅ‘zÅ‘ elem kiválasztásához nyomjon SHIFT+TAB-ot vagy FELFELÉ NYILAT. Nyomjon SPACE-t vagy ENTER-t az elem kiválasztásához. Az ESC billentyű megnyomásával bezárhatja a listát."},{name:"SzerkesztÅ‘ elem utak sáv",legend:"Nyomj ${elementsPathFocus} hogy kijelöld a elemek út sávját. A következÅ‘ elem gombhoz a TAB-al vagy a JOBB NYÃLLAL juthatsz el. Az elÅ‘zÅ‘ gombhoz a SHIFT+TAB vagy BAL NYÃLLAL mehetsz. A SPACE vagy ENTER billentyűvel kiválaszthatod az elemet a szerkesztÅ‘ben."}]},
-{name:"Parancsok",items:[{name:"Parancs visszavonása",legend:"Nyomj ${undo}"},{name:"Parancs megismétlése",legend:"Nyomjon ${redo}"},{name:"Félkövér parancs",legend:"Nyomjon ${bold}"},{name:"Dőlt parancs",legend:"Nyomjon ${italic}"},{name:"Aláhúzott parancs",legend:"Nyomjon ${underline}"},{name:"Link parancs",legend:"Nyomjon ${link}"},{name:"Szerkesztősáv összecsukása parancs",legend:"Nyomjon ${toolbarCollapse}"},{name:"Hozzáférés az előző fókusz helyhez parancs",legend:"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel előtt, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket."},
-{name:"Hozzáférés a következő fókusz helyhez parancs",legend:"Nyomj ${accessNextSpace} hogy hozzáférj a legközelebbi elérhetetlen fókusz helyhez a hiányjel után, például: két szomszédos HR elemhez. Ismételd meg a billentyűkombinációt hogy megtaláld a távolabbi fókusz helyeket."},{name:"Kisegítő súgó",legend:"Nyomjon ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
-end:"End",home:"Home",leftArrow:"balra nyíl",upArrow:"felfelé nyíl",rightArrow:"jobbra nyíl",downArrow:"lefelé nyíl",insert:"Insert","delete":"Delete",leftWindowKey:"bal Windows-billentyű",rightWindowKey:"jobb Windows-billentyű",selectKey:"Billentyű választása",numpad0:"Számbillentyűk 0",numpad1:"Számbillentyűk 1",numpad2:"Számbillentyűk 2",numpad3:"Számbillentyűk 3",numpad4:"Számbillentyűk 4",numpad5:"Számbillentyűk 5",numpad6:"Számbillentyűk 6",numpad7:"Számbillentyűk 7",numpad8:"Számbillentyűk 8",
-numpad9:"Számbillentyűk 9",multiply:"Szorzás",add:"Hozzáadás",subtract:"Kivonás",decimalPoint:"Tizedespont",divide:"Osztás",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Pontosvessző",equalSign:"Egyenlőségjel",comma:"Vessző",dash:"Kötőjel",period:"Pont",forwardSlash:"Perjel",graveAccent:"Visszafelé dőlő ékezet",openBracket:"Nyitó szögletes zárójel",backSlash:"fordított perjel",closeBracket:"Záró szögletes zárójel",
-singleQuote:"szimpla idézőjel"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/id.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/id.js
deleted file mode 100644
index bf14b8a3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/id.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","id",{title:"Accessibility Instructions",contents:"Bantuan. Tekan ESC untuk menutup dialog ini.",legend:[{name:"Umum",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/it.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/it.js
deleted file mode 100644
index 4166252b..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/it.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","it",{title:"Istruzioni di Accessibilità",contents:"Contenuti di Aiuto. Per chiudere questa finestra premi ESC.",legend:[{name:"Generale",items:[{name:"Barra degli strumenti Editor",legend:"Premi ${toolbarFocus} per navigare fino alla barra degli strumenti. Muoviti tra i gruppi della barra degli strumenti con i tasti Tab e Maiusc-Tab. Spostati tra il successivo ed il precedente pulsante della barra degli strumenti usando le frecce direzionali Destra e Sinistra. Premi Spazio o Invio per attivare il pulsante della barra degli strumenti."},
-{name:"Finestra Editor",legend:"All'interno di una finestra di dialogo, premi Tab per navigare fino al campo successivo della finestra di dialogo, premi Maiusc-Tab per tornare al campo precedente, premi Invio per inviare la finestra di dialogo, premi Esc per uscire. Per le finestre che hanno schede multiple, premi Alt+F10 per navigare nella lista delle schede. Quindi spostati alla scheda successiva con il tasto Tab oppure con la Freccia Destra. Torna alla scheda precedente con Maiusc+Tab oppure con la Freccia Sinistra. Premi Spazio o Invio per scegliere la scheda."},
-{name:"Menù contestuale Editor",legend:"Premi ${contextMenu} o TASTO APPLICAZIONE per aprire il menu contestuale. Dunque muoviti all'opzione successiva del menu con il tasto TAB o con la Freccia Sotto. Muoviti all'opzione precedente con MAIUSC+TAB o con Freccia Sopra. Premi SPAZIO o INVIO per scegliere l'opzione di menu. Apri il sottomenu dell'opzione corrente con SPAZIO o INVIO oppure con la Freccia Destra. Torna indietro al menu superiore con ESC oppure Freccia Sinistra. Chiudi il menu contestuale con ESC."},
-{name:"Box Lista Editor",legend:"Dentro un box-lista, muoviti al prossimo elemento della lista con TAB o con la Freccia direzionale giù. Spostati all'elemento precedente con MAIUSC+TAB oppure con Freccia direzionale sopra. Premi SPAZIO o INVIO per scegliere l'opzione della lista. Premi ESC per chiudere il box-lista."},{name:"Barra percorso elementi editor",legend:"Premi ${elementsPathFocus} per navigare tra gli elementi della barra percorso. Muoviti al prossimo pulsante di elemento con TAB o la Freccia direzionale destra. Muoviti al pulsante precedente con MAIUSC+TAB o la Freccia Direzionale Sinistra. Premi SPAZIO o INVIO per scegliere l'elemento nell'editor."}]},
-{name:"Comandi",items:[{name:" Annulla comando",legend:"Premi ${undo}"},{name:" Ripeti comando",legend:"Premi ${redo}"},{name:" Comando Grassetto",legend:"Premi ${bold}"},{name:" Comando Corsivo",legend:"Premi ${italic}"},{name:" Comando Sottolineato",legend:"Premi ${underline}"},{name:" Comando Link",legend:"Premi ${link}"},{name:" Comando riduci barra degli strumenti",legend:"Premi ${toolbarCollapse}"},{name:"Comando di accesso al precedente spazio di focus",legend:"Premi ${accessPreviousSpace} per accedere il più vicino spazio di focus non raggiungibile prima del simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti."},
-{name:"Comando di accesso al prossimo spazio di focus",legend:"Premi ${accessNextSpace} per accedere il più vicino spazio di focus non raggiungibile dopo il simbolo caret, per esempio due elementi HR adiacenti. Ripeti la combinazione di tasti per raggiungere spazi di focus distanti."},{name:" Aiuto Accessibilità",legend:"Premi ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Invio",shift:"Maiusc",ctrl:"Ctrl",alt:"Alt",pause:"Pausa",capslock:"Bloc Maiusc",escape:"Esc",pageUp:"Pagina sù",pageDown:"Pagina giù",
-end:"Fine",home:"Inizio",leftArrow:"Freccia sinistra",upArrow:"Freccia su",rightArrow:"Freccia destra",downArrow:"Freccia giù",insert:"Ins","delete":"Canc",leftWindowKey:"Tasto di Windows sinistro",rightWindowKey:"Tasto di Windows destro",selectKey:"Tasto di selezione",numpad0:"0 sul tastierino numerico",numpad1:"1 sul tastierino numerico",numpad2:"2 sul tastierino numerico",numpad3:"3 sul tastierino numerico",numpad4:"4 sul tastierino numerico",numpad5:"5 sul tastierino numerico",numpad6:"6 sul tastierino numerico",
-numpad7:"7 sul tastierino numerico",numpad8:"8 sul tastierino numerico",numpad9:"9 sul tastierino numerico",multiply:"Moltiplicazione",add:"Più",subtract:"Sottrazione",decimalPoint:"Punto decimale",divide:"Divisione",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Bloc Num",scrollLock:"Bloc Scorr",semiColon:"Punto-e-virgola",equalSign:"Segno di uguale",comma:"Virgola",dash:"Trattino",period:"Punto",forwardSlash:"Barra",graveAccent:"Accento grave",
-openBracket:"Parentesi quadra aperta",backSlash:"Barra rovesciata",closeBracket:"Parentesi quadra chiusa",singleQuote:"Apostrofo"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js
deleted file mode 100644
index 4a6b4c7a..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","ja",{title:"ユーザー補助ã®èª¬æ˜Ž",contents:"ヘルプ ã“ã®ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã‚’é–‰ã˜ã‚‹ã«ã¯ ESCを押ã—ã¦ãã ã•ã„。",legend:[{name:"全般",items:[{name:"エディターツールãƒãƒ¼",legend:"${toolbarFocus} を押ã™ã¨ãƒ„ールãƒãƒ¼ã®ã‚ªãƒ³/オフæ“作ãŒã§ãã¾ã™ã€‚カーソルをツールãƒãƒ¼ã®ã‚°ãƒ«ãƒ¼ãƒ—ã§ç§»å‹•ã•ã›ã‚‹ã«ã¯Tabã‹SHIFT+Tabを押ã—ã¾ã™ã€‚グループ内ã§ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã•ã›ã‚‹ã«ã¯ã€å³ã‚«ãƒ¼ã‚½ãƒ«ã‹å·¦ã‚«ãƒ¼ã‚½ãƒ«ã‚’押ã—ã¾ã™ã€‚スペースキーやエンターを押ã™ã¨ãƒœã‚¿ãƒ³ã‚’有効/無効ã«ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚"},{name:"編集ダイアログ",legend:"ダイヤログ内ã§ã¯ã€ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã®æ¬¡ã®é¸æŠžè‚¢ã«ç§»å‹•ã™ã‚‹ã«ã¯Tabを押ã—ã¾ã™ã€‚å‰ã®é¸æŠžè‚¢ã«ç§»å‹•ã™ã‚‹ã«ã¯ã€SHIFT+Tabを押ã—ã¾ã™ã€‚ダイアログを決定ã™ã‚‹ã«ã¯ã€ENTERを押ã—ã¾ã™ã€‚ESCã§ãƒ€ã‚¤ã‚¢ãƒ­ã‚°ã‚’キャンセルã§ãã¾ã™ã€‚複数ã®ã‚¿ãƒ–ãŒã‚るダイアログã§ã¯ã‚¿ãƒ–リストをæ“作ã™ã‚‹ã«ã¯ALT+F10を押ã—ã¾ã™ã€‚次ã®ã‚¿ãƒ–ã«ç§»å‹•ã™ã‚‹ã«ã¯Tabã‹å³ã‚«ãƒ¼ã‚½ãƒ«ã€å‰ã®ã‚¿ãƒ–ã«æˆ»ã‚‹ã«ã¯SHIFT+Tabã‹å·¦ã‚«ãƒ¼ã‚½ãƒ«ã§ã™ã€‚タブページを決定ã™ã‚‹ã«ã¯ã‚¹ãƒšãƒ¼ã‚¹ã‚‚ã—ãã¯ã€ENTERキーを押ã—ã¦ãã ã•ã„。"},
-{name:"エディターã®ãƒ¡ãƒ‹ãƒ¥ãƒ¼",legend:"${contextMenu} キーã‹APPLICATION KEYを押ã™ã¨ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãƒ¡ãƒ‹ãƒ¥ãƒ¼ãŒé–‹ãã¾ã™ã€‚Tabã‹ä¸‹ã‚«ãƒ¼ã‚½ãƒ«ã§ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã®ã‚ªãƒ—ションé¸æŠžãŒä¸‹ã«ç§»å‹•ã—ã¾ã™ã€‚戻るã«ã¯ã€SHIFT+Tabã‹ä¸Šã‚«ãƒ¼ã‚½ãƒ«ã§ã™ã€‚スペースもã—ãã¯ENTERキーã§ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã‚ªãƒ—ションを決定ã§ãã¾ã™ã€‚ç¾åœ¨é¸ã‚“ã§ã„るオプションã®ã‚µãƒ–メニューを開ãã«ã¯ã€ã‚¹ãƒšãƒ¼ã‚¹ã€ã‚‚ã—ãã¯å³ã‚«ãƒ¼ã‚½ãƒ«ã‚’押ã—ã¾ã™ã€‚サブメニューã‹ã‚‰è¦ªãƒ¡ãƒ‹ãƒ¥ãƒ¼ã«æˆ»ã‚‹ã«ã¯ã€ESCã‹å·¦ã‚«ãƒ¼ã‚½ãƒ«ã‚’押ã—ã¦ãã ã•ã„。ESCã§ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆãƒ¡ãƒ‹ãƒ¥ãƒ¼è‡ªä½“をキャンセルã§ãã¾ã™ã€‚"},{name:"エディターリストボックス",legend:"リストボックス内ã§ç§»å‹•ã™ã‚‹ã«ã¯ã€Tabã‹ä¸‹ã‚«ãƒ¼ã‚½ãƒ«ã§æ¬¡ã®ã‚¢ã‚¤ãƒ†ãƒ ã¸ç§»å‹•ã—ã¾ã™ã€‚SHIFT+Tabã§å‰ã®ã‚¢ã‚¤ãƒ†ãƒ ã«æˆ»ã‚Šã¾ã™ã€‚リストã®ã‚ªãƒ—ションをé¸æŠžã™ã‚‹ã«ã¯ã€ã‚¹ãƒšãƒ¼ã‚¹ã‚‚ã—ãã¯ã€ENTERを押ã—ã¦ãã ã•ã„。リストボックスを閉ã˜ã‚‹ã«ã¯ã€ESCを押ã—ã¦ãã ã•ã„。"},{name:"エディターè¦ç´ ãƒ‘スãƒãƒ¼",legend:"${elementsPathFocus} を押ã™ã¨ã‚¨ãƒ¬ãƒ¡ãƒ³ãƒˆãƒ‘スãƒãƒ¼ã‚’æ“作出æ¥ã¾ã™ã€‚Tabã‹å³ã‚«ãƒ¼ã‚½ãƒ«ã§æ¬¡ã®ã‚¨ãƒ¬ãƒ¡ãƒ³ãƒˆã‚’é¸æŠžã§ãã¾ã™ã€‚å‰ã®ã‚¨ãƒ¬ãƒ¡ãƒ³ãƒˆã‚’é¸æŠžã™ã‚‹ã«ã¯ã€SHIFT+Tabã‹å·¦ã‚«ãƒ¼ã‚½ãƒ«ã§ã™ã€‚スペースもã—ãã¯ã€ENTERã§ã‚¨ãƒ‡ã‚£ã‚¿å†…ã®å¯¾è±¡ã‚¨ãƒ¬ãƒ¡ãƒ³ãƒˆã‚’é¸æŠžå‡ºæ¥ã¾ã™ã€‚"}]},
-{name:"コマンド",items:[{name:"å…ƒã«æˆ»ã™",legend:"${undo} をクリック"},{name:"ã‚„ã‚Šç›´ã—",legend:"${redo} をクリック"},{name:"太字",legend:"${bold} をクリック"},{name:"斜体 ",legend:"${italic} をクリック"},{name:"下線",legend:"${underline} をクリック"},{name:"リンク",legend:"${link} をクリック"},{name:"ツールãƒãƒ¼ã‚’縮ã‚ã‚‹",legend:"${toolbarCollapse} をクリック"},{name:"å‰ã®ã‚«ãƒ¼ã‚½ãƒ«ç§»å‹•ã®ã§ããªã„ãƒã‚¤ãƒ³ãƒˆã¸",legend:"${accessPreviousSpace} を押ã™ã¨ã‚«ãƒ¼ã‚½ãƒ«ã‚ˆã‚Šå‰ã«ã‚るカーソルキーã§å…¥ã‚Šè¾¼ã‚ãªã„スペースã¸ç§»å‹•ã§ãã¾ã™ã€‚例ãˆã°ã€HRエレメントãŒ2ã¤æŽ¥ã—ã¦ã„ã‚‹å ´åˆãªã©ã§ã™ã€‚離れãŸå ´æ‰€ã¸ã¯ã€è¤‡æ•°å›žã‚­ãƒ¼ã‚’押ã—ã¾ã™ã€‚"},{name:"次ã®ã‚«ãƒ¼ã‚½ãƒ«ç§»å‹•ã®ã§ããªã„ãƒã‚¤ãƒ³ãƒˆã¸",legend:"${accessNextSpace} を押ã™ã¨ã‚«ãƒ¼ã‚½ãƒ«ã‚ˆã‚Šå¾Œã‚ã«ã‚るカーソルキーã§å…¥ã‚Šè¾¼ã‚ãªã„スペースã¸ç§»å‹•ã§ãã¾ã™ã€‚例ãˆã°ã€HRエレメントãŒ2ã¤æŽ¥ã—ã¦ã„ã‚‹å ´åˆãªã©ã§ã™ã€‚離れãŸå ´æ‰€ã¸ã¯ã€è¤‡æ•°å›žã‚­ãƒ¼ã‚’押ã—ã¾ã™ã€‚"},
-{name:"ユーザー補助ヘルプ",legend:"${a11yHelp} をクリック"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"左矢å°",upArrow:"上矢å°",rightArrow:"å³çŸ¢å°",downArrow:"下矢å°",insert:"Insert","delete":"Delete",leftWindowKey:"å·¦Windowキー",rightWindowKey:"å³ã®Windowキー",selectKey:"Select",numpad0:"Num 0",numpad1:"Num 1",numpad2:"Num 2",numpad3:"Num 3",numpad4:"Num 4",numpad5:"Num 5",
-numpad6:"Num 6",numpad7:"Num 7",numpad8:"Num 8",numpad9:"Num 9",multiply:"掛ã‘ã‚‹",add:"足ã™",subtract:"引ã",decimalPoint:"å°æ•°ç‚¹",divide:"割る",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"セミコロン",equalSign:"イコール記å·",comma:"カンマ",dash:"ダッシュ",period:"ピリオド",forwardSlash:"フォワードスラッシュ",graveAccent:"グレイヴアクセント",openBracket:"é–‹ãカッコ",backSlash:"ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥",closeBracket:"é–‰ã˜ã‚«ãƒƒã‚³",singleQuote:"シングルクォート"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/km.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/km.js
deleted file mode 100644
index 649e5054..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/km.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","km",{title:"Accessibility Instructions",contents:"មាážáž·áž€áž¶â€‹áž‡áŸ†áž“ួយ។ ដើម្បី​បិទ​ផ្ទាំង​នáŸáŸ‡ សូម​ចុច ESC ។",legend:[{name:"ទូទៅ",items:[{name:"របារ​ឧបករណáŸâ€‹áž€áž˜áŸ’មវិធី​និពន្ធ",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"ផ្ទាំង​កម្មវិធីនិពន្ធ",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"ម៉ីនុយបរិបទអ្នកកែសម្រួល",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"ប្រអប់បញ្ជីអ្នកកែសម្រួល",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"ពាក្យបញ្ជា",items:[{name:"ការ​បញ្ជា​មិនធ្វើវិញ",legend:"ចុច ${undo}"},{name:"ការបញ្ជា​ធ្វើវិញ",legend:"ចុច ${redo}"},{name:"ការបញ្ជា​អក្សរ​ដិáž",legend:"ចុច ${bold}"},{name:"ការបញ្ជា​អក្សរ​ទ្រáŸáž",legend:"ចុច ${italic}"},{name:"ពាក្យបញ្ជា​បន្ទាážáŸ‹â€‹áž–ីក្រោម",
-legend:"ចុច ${underline}"},{name:"ពាក្យបញ្ជា​ážáŸ†ážŽ",legend:"ចុច ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:"ជំនួយ​ពី​ភាព​ងាយស្រួល",legend:"ជួយ ${a11yHelp}"}]}],backspace:"លុបážáž™áž€áŸ’រោយ",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"ផ្អាក",capslock:"Caps Lock",escape:"ចាកចáŸáž‰",pageUp:"ទំពáŸážšâ€‹áž›áž¾",pageDown:"ទំពáŸážšâ€‹áž€áŸ’រោម",end:"ចុង",home:"ផ្ទះ",leftArrow:"ព្រួញ​ឆ្វáŸáž„",upArrow:"ព្រួញ​លើ",rightArrow:"ព្រួញ​ស្ដាំ",downArrow:"ព្រួញ​ក្រោម",insert:"បញ្ចូល","delete":"លុប",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"ជ្រើស​គ្រាប់​ចុច",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"គុណ",add:"បន្ážáŸ‚ម",subtract:"ដក",decimalPoint:"ចំណុចទសភាគ",divide:"ចែក",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"បិទ​រំកិល",semiColon:"ចុច​ក្បៀស",equalSign:"សញ្ញា​អឺរ៉ូ",comma:"ក្បៀស",dash:"Dash",period:"ចុច",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",
-openBracket:"ážáž„្កៀប​បើក",backSlash:"Backslash",closeBracket:"ážáž„្កៀប​បិទ",singleQuote:"បន្ážáž€áŸ‹â€‹áž˜áž½áž™"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js
deleted file mode 100644
index 8337ee88..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","ko",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"ì¼ë°˜",items:[{name:"편집기 툴바",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"편집기 다ì´ì–¼ë¡œê·¸",legend:"다ì´ì–¼ë¡œê·¸ 내부ì—ì„œ TAB"},{name:"편집기 환경 메뉴",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},
-{name:"편집기 ëª©ë¡ ë°•ìŠ¤",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},
-{name:"명령",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",
-upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",
-f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js
deleted file mode 100644
index 96412248..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","ku",{title:"ڕێنمای لەبەردەستدابوون",contents:"پێکهاتەی یارمەتی. کلیك ESC بۆ داخستنی ئەم دیالۆگه.",legend:[{name:"گشتی",items:[{name:"تووڵامرازی دەستكاریكەر",legend:"کلیك ${toolbarFocus} بۆ ڕابەری تووڵامراز. بۆ گواستنەوەی پێشوو داهاتووی گرووپی تووڵامرازی داگرتنی کلیلی TAB لەگەڵ‌ SHIFT-TAB. بۆ گواستنەوەی پێشوو داهاتووی دووگمەی تووڵامرازی لەڕێی کلیلی تیری دەستی ڕاست یان کلیلی تیری دەستی چەپ. کلیکی کلیلی SPACE یان ENTER بۆ چالاککردنی دووگمەی تووڵامراز."},{name:"دیالۆگی دەستكاریكەر",
-legend:"لەهەمانکاتدا کە تۆ لەدیالۆگی, کلیکی کلیلی TAB بۆ ڕابەری خانەی دیالۆگێکی تر, داگرتنی کلیلی SHIFT + TAB بۆ گواستنەوەی بۆ خانەی پێشووتر, کلیكی کلیلی ENTER بۆ ڕازیکردنی دیالۆگەکە, کلیكی کلیلی ESC بۆ هەڵوەشاندنەوەی دیالۆگەکە. بۆ دیالۆگی لەبازدەری (تابی) زیاتر, کلیكی کلیلی ALT + F10 بۆ ڕابەری لیستی بازدەرەکان. بۆ چوونە بازدەری تابی داهاتوو کلیكی کلیلی TAB یان کلیلی تیری دەستی ڕاست. بۆچوونە بازدەری تابی پێشوو داگرتنی کلیلی SHIFT + TAB یان کلیلی تیری دەستی چەپ. کلیی کلیلی SPACE یان ENTER بۆ هه‌ڵبژاردنی بازدەر (تاب)."},
-{name:"پێڕستی سەرنووسەر",legend:"کلیك ${contextMenu} یان دوگمەی لیسته‌(Menu) بۆ کردنەوەی لیستەی دەق. بۆ چوونە هەڵبژاردەیەکی تر له‌ لیسته‌ کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوارەوه‌ بۆ چوون بۆ هەڵبژاردەی پێشوو کلیکی کلیلی SHIFT+TAB یان کلیلی تیری ڕوو له‌ سەرەوە. داگرتنی کلیلی SPACE یان ENTER بۆ هەڵبژاردنی هەڵبژاردەی لیسته‌. بۆ کردنەوەی لقی ژێر لیسته‌ لەهەڵبژاردەی لیستە کلیکی کلیلی SPACE یان ENTER یان کلیلی تیری دەستی ڕاست. بۆ گەڕانەوه بۆ سەرەوەی لیسته‌ کلیکی کلیلی ESC یان کلیلی تیری دەستی چەپ. بۆ داخستنی لیستە کلیكی کلیلی ESC بکە."},
-{name:"لیستی سنووقی سەرنووسەر",legend:"لەناو سنوقی لیست, چۆن بۆ هەڵنبژاردەی لیستێکی تر کلیکی کلیلی TAB یان کلیلی تیری ڕوو لەخوار. چوون بۆ هەڵبژاردەی لیستی پێشوو کلیکی کلیلی SHIFT + TAB یان کلیلی تیری ڕوو لەسەرەوه‌. کلیکی کلیلی SPACE یان ENTER بۆ دیاریکردنی ‌هەڵبژاردەی لیست. کلیکی کلیلی ESC بۆ داخستنی سنوقی لیست."},{name:"تووڵامرازی توخم",legend:"کلیك ${elementsPathFocus} بۆ ڕابەری تووڵامرازی توخمەکان. چوون بۆ دوگمەی توخمێکی تر کلیکی کلیلی TAB یان کلیلی تیری دەستی ڕاست. چوون بۆ دوگمەی توخمی پێشوو کلیلی SHIFT+TAB یان کلیکی کلیلی تیری دەستی چەپ. داگرتنی کلیلی SPACE یان ENTER بۆ دیاریکردنی توخمەکه‌ لەسەرنووسه."}]},
-{name:"Ùەرمانەکان",items:[{name:"پووچکردنەوەی Ùەرمان",legend:"کلیك ${undo}"},{name:"هەڵگەڕانەوەی Ùەرمان",legend:"کلیك ${redo}"},{name:"Ùەرمانی دەقی Ù‚Û•ÚµÛ•Ùˆ",legend:"کلیك ${bold}"},{name:"Ùەرمانی دەقی لار",legend:"کلیك ${italic}"},{name:"Ùەرمانی ژێرهێڵ",legend:"کلیك ${underline}"},{name:"Ùەرمانی به‌ستەر",legend:"کلیك ${link}"},{name:"شاردەنەوەی تووڵامراز",legend:"کلیك ${toolbarCollapse}"},{name:"چوونەناو سەرنجدانی پێشوی Ùەرمانی بۆشایی",legend:"کلیک ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:"چوونەناو سەرنجدانی داهاتووی Ùەرمانی بۆشایی",legend:"کلیک ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"دەستپێگەیشتنی یارمەتی",legend:"کلیك ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",
-upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",
-f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js
deleted file mode 100644
index 04d50a94..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","lt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Bendros savybÄ—s",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js
deleted file mode 100644
index 36ad0cdb..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","lv",{title:"PieejamÄ«bas instrukcija",contents:"PalÄ«dzÄ«bas saturs. Lai aizvÄ“rtu ciet Å¡o dialogu nospiediet ESC.",legend:[{name:"Galvenais",items:[{name:"Redaktora rÄ«kjosla",legend:"Nospiediet ${toolbarFocus} lai pÄrvietotos uz rÄ«kjoslu. Lai pÄrvietotos uz nÄkoÅ¡o vai iepriekÅ¡Ä“jo rÄ«kjoslas grupu izmantojiet pogu TAB un SHIFT+TAB. Lai pÄrvietotos uz nÄkoÅ¡o vai iepriekÅ¡Ä“jo rÄ«kjoslas pogu izmantojiet Kreiso vai Labo bultiņu. Nospiediet Atstarpi vai ENTER lai aktivizÄ“tu rÄ«kjosla pogu."},
-{name:"Redaktora dialoga logs",legend:"Dialoga logÄ nospiediet pogu TAB lai pÄrvietotos uz nÄkoÅ¡o dialoga loga lauku, nospiediet SHIFT+TAB lai atgrieztos iepriekÅ¡Ä“jÄ laukÄ, nospiediet ENTER lai apstiprinÄtu dialoga datus, nospiediet ESC lai aizvÄ“rtu Å¡o dialogu. Dialogam kuram ir vairÄkas cilnes, nospiediet ALT+F10 lai pÄrvietotos uz nepiecieÅ¡amo cilni. Lai pÄrvietotos uz nÄkoÅ¡o cilni izmantojiet pogu TAB vai Labo bultiņu. Lai pÄrvietotos uz iepriekÅ¡Ä“jo cilni nospiediet SHIFT+TAB vai kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvÄ“lÄ“tos lapas cilni."},
-{name:"Redaktora satura izvÄ“le",legend:"Nospiediet ${contextMenu} vai APPLICATION KEY lai atvÄ“rtu satura izvÄ“lni. Lai pÄrvietotos uz nÄkoÅ¡o izvÄ“lnes opciju izmantojiet pogu TAB vai pogu Bultiņu uz leju. Lai pÄrvietotos uz iepriekÅ¡Ä“jo opciju izmantojiet SHIFT+TAB vai pogu Bultiņa uz augÅ¡u. Nospiediet SPACE vai ENTER lai izvelÄ“tos izvÄ“lnes opciju. Atveriet tekoÅ¡ajÄ opcija apakÅ¡izvÄ“lni ar SAPCE vai ENTER ka ari to var izdarÄ«t ar Labo bultiņu. Lai atgrieztos atpakaļ uz sakuma izvÄ“lni nospiediet ESC vai Kreiso bultiņu. Lai aizvÄ“rtu ciet izvÄ“lnes saturu nospiediet ESC."},
-{name:"Redaktora saraksta lauks",legend:"Saraksta laukÄ, lai pÄrvietotos uz nÄkoÅ¡o saraksta elementu nospiediet TAB vai pogu Bultiņa uz leju. Lai pÄrvietotos uz iepriekÅ¡Ä“jo saraksta elementu nospiediet SHIFT+TAB vai pogu Bultiņa uz augÅ¡u. Nospiediet SPACE vai ENTER lai izvÄ“lÄ“tos saraksta opcijas. Nospiediet ESC lai aizvÄ“rtu saraksta lauku. "},{name:"Redaktora elementa ceļa josla",legend:"Nospiediet ${elementsPathFocus} lai pÄrvietotos uz elementa ceļa joslu. Lai pÄrvietotos uz nÄkoÅ¡o elementa pogu izmantojiet TAB vai Labo bultiņu. Lai pÄrvietotos uz iepriekÅ¡Ä“jo elementa pogu izmantojiet SHIFT + TAB vai Kreiso bultiņu. Nospiediet SPACE vai ENTER lai izvÄ“lÄ“tos elementu redaktorÄ."}]},
-{name:"Komandas",items:[{name:"Komanda atcelt darbÄ«bu",legend:"Nospiediet ${undo}"},{name:"Komanda atkÄrtot darbÄ«bu",legend:"Nospiediet ${redo}"},{name:"Treknraksta komanda",legend:"Nospiediet ${bold}"},{name:"KursÄ«va komanda",legend:"Nospiediet ${italic}"},{name:"ApakÅ¡svÄ«tras komanda ",legend:"Nospiediet ${underline}"},{name:"Hipersaites komanda",legend:"Nospiediet ${link}"},{name:"RÄ«kjoslas aizvÄ“rÅ¡anas komanda",legend:"Nospiediet ${toolbarCollapse}"},{name:"Piekļūt iepriekÅ¡Ä“jai fokusa vietas komandai",
-legend:"Nospiediet ${accessPreviousSpace} lai piekļūtu tuvÄkajai nepieejamajai fokusa vietai pirms kursora. PiemÄ“ram: diviem blakus esoÅ¡iem lÄ«nijas HR elementiem. AtkÄrtojiet taustiņu kombinÄciju lai piekļūtu pie tÄlÄkÄm vietÄm."},{name:"Piekļūt nÄkoÅ¡Ä fokusa apgabala komandai",legend:"Nospiediet ${accessNextSpace} lai piekļūtu tuvÄkajai nepieejamajai fokusa vietai pÄ“c kursora. PiemÄ“ram: diviem blakus esoÅ¡iem lÄ«nijas HR elementiem. AtkÄrtojiet taustiņu kombinÄciju lai piekļūtu pie tÄlÄkÄm vietÄm."},
-{name:"Pieejamības palīdzība",legend:"Nospiediet ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js
deleted file mode 100644
index fa1b2ef3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","mk",{title:"ИнÑтрукции за приÑтапноÑÑ‚",contents:"Содржина на делот за помош. За да го затворите овој дијалот притиÑнете ESC.",legend:[{name:"Општо",items:[{name:"Мени за едиторот",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Дијалот за едиторот",
-legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},
-{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},
-{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",
-upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",
-f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js
deleted file mode 100644
index d40e4d3d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","mn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Ерөнхий",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js
deleted file mode 100644
index c86ef4ab..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","nb",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT-TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor",
-legend:"Mens du er i en dialog, trykk TAB for å navigere til neste dialogfelt, press SHIFT + TAB for å flytte til forrige felt, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. For dialoger med flere faner, trykk ALT + F10 for å navigere til listen over faner. Gå til neste fane med TAB eller HØYRE PILTAST. Gå til forrige fane med SHIFT + TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge fanen."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."},
-{name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT + TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]},
-{name:"Hurtigtaster",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Lenke",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:"Gå til forrige fokusområde",legend:"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},
-{name:"Gå til neste fokusområde",legend:"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tabulator",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",
-pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Venstre piltast",upArrow:"Opp-piltast",rightArrow:"Høyre piltast",downArrow:"Ned-piltast",insert:"Insert","delete":"Delete",leftWindowKey:"Venstre Windows-tast",rightWindowKey:"Høyre Windows-tast",selectKey:"Select key",numpad0:"Numerisk tastatur 0",numpad1:"Numerisk tastatur 1",numpad2:"Numerisk tastatur 2",numpad3:"Numerisk tastatur 3",numpad4:"Numerisk tastatur 4",numpad5:"Numerisk tastatur 5",numpad6:"Numerisk tastatur 6",numpad7:"Numerisk tastatur 7",
-numpad8:"Numerisk tastatur 8",numpad9:"Numerisk tastatur 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Likhetstegn",comma:"Komma",dash:"Bindestrek",period:"Punktum",forwardSlash:"Forover skråstrek",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Bakover skråstrek",
-closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js
deleted file mode 100644
index 21944803..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","nl",{title:"Toegankelijkheidsinstructies",contents:"Help-inhoud. Druk op ESC om dit dialoog te sluiten.",legend:[{name:"Algemeen",items:[{name:"Werkbalk tekstverwerker",legend:"Druk op ${toolbarFocus} om naar de werkbalk te navigeren. Om te schakelen naar de volgende en vorige werkbalkgroep, gebruik TAB en SHIFT+TAB. Om te schakelen naar de volgende en vorige werkbalkknop, gebruik de PIJL RECHTS en PIJL LINKS. Druk op SPATIE of ENTER om een werkbalkknop te activeren."},
-{name:"Dialoog tekstverwerker",legend:"In een dialoogvenster, druk op TAB om te navigeren naar het volgende veld. Druk op SHIFT+TAB om naar het vorige veld te navigeren. Druk op ENTER om het dialoogvenster te verzenden. Druk op ESC om het dialoogvenster te sluiten. Voor dialoogvensters met meerdere tabbladen, druk op ALT+F10 om naar de tabset te navigeren. Schakel naar het volgende tabblad met TAB of PIJL RECHTS. Schakel naar het vorige tabblad met SHIFT+TAB of PIJL LINKS. Druk op SPATIE of ENTER om het tabblad te selecteren."},
-{name:"Contextmenu tekstverwerker",legend:"Druk op ${contextMenu} of APPLICATION KEY om het contextmenu te openen. Schakel naar de volgende menuoptie met TAB of PIJL OMLAAG. Schakel naar de vorige menuoptie met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om een menuoptie te selecteren. Op een submenu van de huidige optie met SPATIE, ENTER of PIJL RECHTS. Ga terug naar de bovenliggende menuoptie met ESC of PIJL LINKS. Sluit het contextmenu met ESC."},{name:"Keuzelijst tekstverwerker",legend:"In een keuzelijst, schakel naar het volgende item met TAB of PIJL OMLAAG. Schakel naar het vorige item met SHIFT+TAB of PIJL OMHOOG. Druk op SPATIE of ENTER om het item te selecteren. Druk op ESC om de keuzelijst te sluiten."},
-{name:"Elementenpad werkbalk tekstverwerker",legend:"Druk op ${elementsPathFocus} om naar het elementenpad te navigeren. Om te schakelen naar het volgende element, gebruik TAB of PIJL RECHTS. Om te schakelen naar het vorige element, gebruik SHIFT+TAB or PIJL LINKS. Druk op SPATIE of ENTER om een element te selecteren in de tekstverwerker."}]},{name:"Opdrachten",items:[{name:"Ongedaan maken opdracht",legend:"Druk op ${undo}"},{name:"Opnieuw uitvoeren opdracht",legend:"Druk op ${redo}"},{name:"Vetgedrukt opdracht",
-legend:"Druk op ${bold}"},{name:"Cursief opdracht",legend:"Druk op ${italic}"},{name:"Onderstrepen opdracht",legend:"Druk op ${underline}"},{name:"Link opdracht",legend:"Druk op ${link}"},{name:"Werkbalk inklappen opdracht",legend:"Druk op ${toolbarCollapse}"},{name:"Ga naar vorige focus spatie commando",legend:"Druk ${accessPreviousSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie voor de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken."},
-{name:"Ga naar volgende focus spatie commando",legend:"Druk ${accessNextSpace} om toegang te verkrijgen tot de dichtstbijzijnde onbereikbare focus spatie na de caret, bijvoorbeeld: twee aangrenzende HR elementen. Herhaal de toetscombinatie om de verste focus spatie te bereiken."},{name:"Toegankelijkheidshulp",legend:"Druk op ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
-end:"End",home:"Home",leftArrow:"Pijl naar links",upArrow:"Pijl omhoog",rightArrow:"Pijl naar rechts",downArrow:"Pijl naar beneden",insert:"Invoegen","delete":"Verwijderen",leftWindowKey:"Linker Windows-toets",rightWindowKey:"Rechter Windows-toets",selectKey:"Selecteer toets",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Vermenigvuldigen",add:"Toevoegen",
-subtract:"Aftrekken",decimalPoint:"Decimaalteken",divide:"Delen",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Puntkomma",equalSign:"Is gelijk-teken",comma:"Komma",dash:"Koppelteken",period:"Punt",forwardSlash:"Slash",graveAccent:"Accent grave",openBracket:"Vierkant haakje openen",backSlash:"Backslash",closeBracket:"Vierkant haakje sluiten",singleQuote:"Apostrof"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/no.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/no.js
deleted file mode 100644
index 6c696647..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/no.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","no",{title:"Instruksjoner for tilgjengelighet",contents:"Innhold for hjelp. Trykk ESC for å lukke denne dialogen.",legend:[{name:"Generelt",items:[{name:"Verktøylinje for editor",legend:"Trykk ${toolbarFocus} for å navigere til verktøylinjen. Flytt til neste og forrige verktøylinjegruppe med TAB og SHIFT-TAB. Flytt til neste og forrige verktøylinjeknapp med HØYRE PILTAST og VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å aktivere verktøylinjeknappen."},{name:"Dialog for editor",
-legend:"Mens du er i en dialog, trykk TAB for å navigere til neste dialogfelt, press SHIFT + TAB for å flytte til forrige felt, trykk ENTER for å akseptere dialogen, trykk ESC for å avbryte dialogen. For dialoger med flere faner, trykk ALT + F10 for å navigere til listen over faner. Gå til neste fane med TAB eller HØYRE PILTAST. Gå til forrige fane med SHIFT + TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge fanen."},{name:"Kontekstmeny for editor",legend:"Trykk ${contextMenu} eller MENYKNAPP for å åpne kontekstmeny. Gå til neste alternativ i menyen med TAB eller PILTAST NED. Gå til forrige alternativ med SHIFT+TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge menyalternativet. Åpne undermenyen på valgt alternativ med MELLOMROM eller ENTER eller HØYRE PILTAST. Gå tilbake til overordnet menyelement med ESC eller VENSTRE PILTAST. Lukk kontekstmenyen med ESC."},
-{name:"Listeboks for editor",legend:"I en listeboks, gå til neste alternativ i listen med TAB eller PILTAST NED. Gå til forrige alternativ i listen med SHIFT + TAB eller PILTAST OPP. Trykk MELLOMROM eller ENTER for å velge alternativet i listen. Trykk ESC for å lukke listeboksen."},{name:"Verktøylinje for elementsti",legend:"Trykk ${elementsPathFocus} for å navigere til verktøylinjen som viser elementsti. Gå til neste elementknapp med TAB eller HØYRE PILTAST. Gå til forrige elementknapp med SHIFT+TAB eller VENSTRE PILTAST. Trykk MELLOMROM eller ENTER for å velge elementet i editoren."}]},
-{name:"Kommandoer",items:[{name:"Angre",legend:"Trykk ${undo}"},{name:"Gjør om",legend:"Trykk ${redo}"},{name:"Fet tekst",legend:"Trykk ${bold}"},{name:"Kursiv tekst",legend:"Trykk ${italic}"},{name:"Understreking",legend:"Trykk ${underline}"},{name:"Link",legend:"Trykk ${link}"},{name:"Skjul verktøylinje",legend:"Trykk ${toolbarCollapse}"},{name:"Gå til forrige fokusområde",legend:"Trykk ${accessPreviousSpace} for å komme til nærmeste fokusområde før skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},
-{name:"Gå til neste fokusområde",legend:"Trykk ${accessNextSpace} for å komme til nærmeste fokusområde etter skrivemarkøren som ikke kan nås på vanlig måte, for eksempel to tilstøtende HR-elementer. Gjenta tastekombinasjonen for å komme til fokusområder lenger unna i dokumentet."},{name:"Hjelp for tilgjengelighet",legend:"Trykk ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",
-end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",
-divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js
deleted file mode 100644
index 664b1276..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","pl",{title:"Instrukcje dotyczÄ…ce dostÄ™pnoÅ›ci",contents:"Zawartość pomocy. WciÅ›nij ESC, aby zamknąć to okno.",legend:[{name:"Informacje ogólne",items:[{name:"Pasek narzÄ™dzi edytora",legend:"WciÅ›nij ${toolbarFocus} aby przejść do paska narzÄ™dzi. Przejdź do nastÄ™pnej i poprzedniej grupy narzÄ™dzi używajÄ…c TAB oraz SHIFT-TAB. Przejdź do nastÄ™pnego i poprzedniego narzÄ™dzia używajÄ…c STRZAÅKI W PRAWO lub STRZAÅKI W LEWO. WciÅ›nij SPACJĘ lub ENTER, aby aktywować zaznaczone narzÄ™dzie."},
-{name:"Okno dialogowe edytora",legend:"BÄ™dÄ…c w oknie dialogowym wciÅ›nij TAB aby przejść do nastÄ™pnego pola dialogowego, wciÅ›nij SHIFT + TAB aby przejść do poprzedniego pola, wciÅ›nij ENTER aby wysÅ‚ać dialog, wciÅ›nij ESC aby anulować dialog. Dla okien dialogowych z wieloma zakÅ‚adkami, wciÅ›nij ALT + F10 aby przejść do listy zakÅ‚adek. Gdy to zrobisz przejdź do nastÄ™pnej zakÅ‚adki wciskajÄ…c TAB lub STRZAÅKĘ W PRAWO. Przejdź do poprzedniej zakÅ‚adki wciskajÄ…c SHIFT + TAB lub STRZAÅKĘ W LEWO. WciÅ›nij SPACJĘ lub ENTER aby wybrać zakÅ‚adkÄ™."},
-{name:"Menu kontekstowe edytora",legend:"WciÅ›nij ${contextMenu} lub PRZYCISK APLIKACJI aby otworzyć menu kontekstowe. Przejdź do nastÄ™pnej pozycji menu wciskajÄ…c TAB lub STRZAÅKĘ W DÓÅ. Przejdź do poprzedniej pozycji menu wciskajÄ…c SHIFT + TAB lub STRZAÅKĘ W GÓRĘ. WciÅ›nij SPACJĘ lub ENTER aby wygrać pozycjÄ™ menu. Otwórz pod-menu obecnej pozycji wciskajÄ…c SPACJĘ lub ENTER lub STRZAÅKĘ W PRAWO. Wróć do pozycji nadrzÄ™dnego menu wciskajÄ…c ESC lub STRZAÅKĘ W LEWO. Zamknij menu wciskajÄ…c ESC."},{name:"Lista w edytorze",
-legend:"W polu listy możesz przechodzić do nastÄ™pnego elementu za pomocÄ… klawisza TAB lub STRZAÅKI W DÓÅ. Poprzedni element osiÄ…gniesz za pomocÄ… SHIFT+TAB lub STRZAÅKI W GÓRĘ. Za pomocÄ… SPACJI lub ENTERA wybierzesz danÄ… opcjÄ™ z listy, a za pomocÄ… klawisza ESC opuÅ›cisz listÄ™."},{name:"Pasek Å›cieżki elementów edytora",legend:"NaciÅ›nij ${elementsPathFocus} w celu przejÅ›cia do paska Å›cieżki elementów edytora. W celu przejÅ›cia do kolejnego elementu naciÅ›nij klawisz Tab lub StrzaÅ‚ki w prawo. W celu przejÅ›cia do poprzedniego elementu naciÅ›nij klawisze Shift+Tab lub StrzaÅ‚ki w lewo. By wybrać element w edytorze, użyj klawisza Spacji lub Enter."}]},
-{name:"Polecenia",items:[{name:"Polecenie Cofnij",legend:"Naciśnij ${undo}"},{name:"Polecenie Ponów",legend:"Naciśnij ${redo}"},{name:"Polecenie Pogrubienie",legend:"Naciśnij ${bold}"},{name:"Polecenie Kursywa",legend:"Naciśnij ${italic}"},{name:"Polecenie Podkreślenie",legend:"Naciśnij ${underline}"},{name:"Polecenie Wstaw/ edytuj odnośnik",legend:"Naciśnij ${link}"},{name:"Polecenie schowaj pasek narzędzi",legend:"Naciśnij ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Pomoc dotycząca dostępności",legend:"Naciśnij ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Strzałka w lewo",
-upArrow:"Strzałka w górę",rightArrow:"Strzałka w prawo",downArrow:"Strzałka w dół",insert:"Insert","delete":"Delete",leftWindowKey:"Lewy klawisz Windows",rightWindowKey:"Prawy klawisz Windows",selectKey:"Klawisz wyboru",numpad0:"Klawisz 0 na klawiaturze numerycznej",numpad1:"Klawisz 1 na klawiaturze numerycznej",numpad2:"Klawisz 2 na klawiaturze numerycznej",numpad3:"Klawisz 3 na klawiaturze numerycznej",numpad4:"Klawisz 4 na klawiaturze numerycznej",numpad5:"Klawisz 5 na klawiaturze numerycznej",
-numpad6:"Klawisz 6 na klawiaturze numerycznej",numpad7:"Klawisz 7 na klawiaturze numerycznej",numpad8:"Klawisz 8 na klawiaturze numerycznej",numpad9:"Klawisz 9 na klawiaturze numerycznej",multiply:"Przemnóż",add:"Plus",subtract:"Minus",decimalPoint:"Separator dziesiętny",divide:"Podziel",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Średnik",equalSign:"Znak równości",comma:"Przecinek",dash:"Pauza",
-period:"Kropka",forwardSlash:"Ukośnik prawy",graveAccent:"Akcent słaby",openBracket:"Nawias kwadratowy otwierający",backSlash:"Ukośnik lewy",closeBracket:"Nawias kwadratowy zamykający",singleQuote:"Apostrof"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js
deleted file mode 100644
index 1557459c..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","pt-br",{title:"Instruções de Acessibilidade",contents:"Conteúdo da Ajuda. Para fechar este diálogo pressione ESC.",legend:[{name:"Geral",items:[{name:"Barra de Ferramentas do Editor",legend:"Pressione ${toolbarFocus} para navegar para a barra de ferramentas. Mova para o anterior ou próximo grupo de ferramentas com TAB e SHIFT-TAB. Mova para o anterior ou próximo botão com SETA PARA DIREITA or SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."},
-{name:"Diálogo do Editor",legend:"Dentro de um diálogo, pressione TAB para navegar para o próximo campo, pressione SHIFT + TAB para mover para o campo anterior, pressione ENTER para enviar o diálogo, pressione ESC para cancelar o diálogo. Para diálogos que tem múltiplas abas, pressione ALT + F10 para navegar para a lista de abas, então mova para a próxima aba com SHIFT + TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar a aba."},{name:"Menu de Contexto do Editor",legend:"Pressione ${contextMenu} ou TECLA DE MENU para abrir o menu de contexto, então mova para a próxima opção com TAB ou SETA PARA BAIXO. Mova para a anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO ou ENTER ou SETA PARA DIREITA. Volte para o menu pai com ESC ou SETA PARA ESQUERDA. Feche o menu de contexto com ESC."},
-{name:"Caixa de Lista do Editor",legend:"Dentro de uma caixa de lista, mova para o próximo item com TAB ou SETA PARA BAIXO. Mova para o item anterior com SHIFT + TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar uma opção na lista. Pressione ESC para fechar a caixa de lista."},{name:"Barra de Caminho do Elementos do Editor",legend:"Pressione ${elementsPathFocus} para a barra de caminho dos elementos. Mova para o próximo botão de elemento com TAB ou SETA PARA DIREITA. Mova para o botão anterior com SHIFT+TAB ou SETA PARA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor."}]},
-{name:"Comandos",items:[{name:" Comando Desfazer",legend:"Pressione ${undo}"},{name:" Comando Refazer",legend:"Pressione ${redo}"},{name:" Comando Negrito",legend:"Pressione ${bold}"},{name:" Comando Itálico",legend:"Pressione ${italic}"},{name:" Comando Sublinhado",legend:"Pressione ${underline}"},{name:" Comando Link",legend:"Pressione ${link}"},{name:" Comando Fechar Barra de Ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Acessar o comando anterior de spaço de foco",legend:"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo antes do cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes."},
-{name:"Acessar próximo fomando de spaço de foco",legend:"Pressione ${accessNextSpace} para acessar o espaço de foco não alcançável mais próximo após o cursor, por exemplo: dois elementos HR adjacentes. Repita a combinação de teclas para alcançar espaços de foco distantes."},{name:" Ajuda de Acessibilidade",legend:"Pressione ${a11yHelp}"}]}],backspace:"Tecla Backspace",tab:"Tecla Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",
-pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Seta à Esquerda",upArrow:"Seta à Cima",rightArrow:"Seta à Direita",downArrow:"Seta à Baixo",insert:"Insert","delete":"Delete",leftWindowKey:"Tecla do Windows Esquerda",rightWindowKey:"Tecla do Windows Direita",selectKey:"Tecla Selecionar",numpad0:"0 do Teclado Numérico",numpad1:"1 do Teclado Numérico",numpad2:"2 do Teclado Numérico",numpad3:"3 do Teclado Numérico",numpad4:"4 do Teclado Numérico",numpad5:"5 do Teclado Numérico",numpad6:"6 do Teclado Numérico",
-numpad7:"7 do Teclado Numérico",numpad8:"8 do Teclado Numérico",numpad9:"9 do Teclado Numérico",multiply:"Multiplicar",add:"Mais",subtract:"Subtrair",decimalPoint:"Ponto",divide:"Dividir",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Ponto-e-vírgula",equalSign:"Igual",comma:"Vírgula",dash:"Hífen",period:"Ponto",forwardSlash:"Barra",graveAccent:"Acento Grave",openBracket:"Abrir Conchetes",
-backSlash:"Contra-barra",closeBracket:"Fechar Colchetes",singleQuote:"Aspas Simples"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js
deleted file mode 100644
index c7cd0701..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","pt",{title:"Instruções de Acessibilidade",contents:"Conteúdos da Ajuda. Pressione em 'ESC' para fechar esta janela.",legend:[{name:"Geral",items:[{name:"Barra de Ferramentas do Editor",legend:"Clique em ${toolbarFocus} para navegar para a barra de ferramentas. Vá para o grupo da barra de ferramentas anterior e seguinte com TAB e SHIFT+TAB. Vá para o botão da barra de ferramentas anterior com a SETA DIREITA ou ESQUERDA. Pressione ESPAÇO ou ENTER para ativar o botão da barra de ferramentas."},
-{name:"Janela do Editor",legend:"Dentro de uma janela, pressione TAB para navigar para o campo da janela seguinte, pressione SHIFT + TAB para mover para o campo anterior, pressione ENTER para submeter a janela, pressione ESC para cancelar a janela. Para as janelas que têm múltiplos páginas com separadores, pressione ALT + F10 para navegar para a lista do separador. Depois mova para o seguinte separador com TAB ou SETA DIREITA. Mover para o separador anterior com SHIFT + TAB ou SETA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o separador da página."},
-{name:"Menu de Contexto do Editor",legend:"Clique em ${contextMenu} ou TECLA APLICAÇÃO para abrir o menu de contexto. Depois vá para a opção do menu seguinte com TAB ou SETA PARA BAIXO. Vá para a opção anterior com SHIFT+TAB ou SETA PARA CIMA. Pressione ESPAÇO ou ENTER para selecionar a opção do menu. Abra o submenu da opção atual com ESPAÇO, ENTER ou SETA DIREITA. GVá para o item do menu parente com ESC ou SETA ESQUERDA. Feche o menu de contexto com ESC."},{name:"Caixa Lista Editor",legend:"Dentro da caixa da lista, vá para o itemda lista seguinte com TAB ou SETA PARA BAIXO. Move Vá parao item da lista anterior com SHIFT+TAB ou SETA PARA BAIXO. Pressione ESPAÇO ou ENTER para selecionar a opção da lista. Pressione ESC para fechar a caisa da lista."},
-{name:"Caminho Barra Elemento Editor",legend:"Clique em ${elementsPathFocus} para navegar para a barra do caminho dos elementos. Vá para o botão do elemento seguinte com TAB ou SETA DIREITA. Vá para o botão anterior com SHIFT+TAB ou SETA ESQUERDA. Pressione ESPAÇO ou ENTER para selecionar o elemento no editor."}]},{name:"Comandos",items:[{name:"Comando de Anular",legend:"Pressione ${undo}"},{name:"Comando de Refazer",legend:"Pressione ${redo}"},{name:"Comando de Negrito",legend:"Pressione ${bold}"},
-{name:"Comando de Itálico",legend:"Pressione ${italic}"},{name:"Comando de Sublinhado",legend:"Pressione ${underline}"},{name:"Comando de Hiperligação",legend:"Pressione ${link}"},{name:"Comando de Ocultar Barra de Ferramentas",legend:"Pressione ${toolbarCollapse}"},{name:"Acesso comando do espaço focus anterior",legend:"Clique em ${accessPreviousSpace} para aceder ao espaço do focos inalcançável mais perto antes do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."},
-{name:"Acesso comando do espaço focus seguinte",legend:"Pressione ${accessNextSpace} para aceder ao espaço do focos inalcançável mais perto depois do sinal de omissão, por exemplo: dois elementos HR adjacentes. Repetir a combinação da chave para alcançar os espaços dos focos distantes."},{name:"Ajuda de Acessibilidade",legend:"Pressione ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",
-pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",
-divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js
deleted file mode 100644
index 1d1479a3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","ro",{title:"Instrucțiuni de accesibilitate",contents:"Cuprins. Pentru a închide acest dialog, apăsați tasta ESC.",legend:[{name:"General",items:[{name:"Editează bara instrumente.",legend:"Apasă ${toolbarFocus} pentru a naviga prin bara de instrumente. Pentru a te mișca prin grupurile de instrumente folosește tastele TAB și SHIFT-TAB. Pentru a te mișca intre diverse instrumente folosește tastele SĂGEATĂ DREAPTA sau SĂGEATĂ STÂNGA. Apasă butonul SPAȚIU sau ENTER pentru activarea instrumentului."},
-{name:"Dialog editor",legend:"Într-un dialog, apasă TAB pentru a naviga spre câmpul următor de dialog, apasă SHIFT + TAB pentru a te duce la câmpul anterior, apasă ENTER pentru a trimite dialogul, apasă ESC pentru a anula dialogul. Pentru dialoguri care au mai multe subferestre, apasă ALT + F10 pentr a naviga în lista de subferestre. Treci la subferestrea următoare cu TAB sau SĂGEATĂ DREAPTA. Treci la subfereastra anterioară cu SHIFT + TAB sau SĂGEATĂ STÂNGA. Apasă SPAȚIU sau ENTER pentru a selecta subfereastra."},
-{name:"Editor meniu contextual",legend:"Apasă ${contextMenu} sau TASTA MENIU pentru a deschide meniul contextual. Treci la următoarea opțiune din meniu cu TAB sau SĂGEATĂ JOS. Treci la opțiunea anterioară cu SHIFT+TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din meniu. Deschide sub-meniul opțiunii curente cu SPAȚIU sau ENTER sau SĂGEATĂ DREAPTA. Revino la elementul din meniul părinte cu ESC sau SĂGEATĂ STÂNGA. Închide meniul de context cu ESC."},{name:"Editor Casetă Listă",
-legend:"În interiorul unei liste, treci la următorull element cu TAB sau SĂGEATĂ JOS. Treci la elementul anterior din listă cu SHIFT + TAB sau SĂGEATĂ SUS. Apasă SPAȚIU sau ENTER pentru a selecta opțiunea din listă. Apasă ESC pentru a închide lista."},{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},
-{name:"Comenzi",items:[{name:" Undo command",legend:"Apasă ${undo}"},{name:"Comanda precedentă",legend:"Apasă ${redo}"},{name:"Comanda Îngroșat",legend:"Apasă ${bold}"},{name:"Comanda Inclinat",legend:"Apasă ${italic}"},{name:"Comanda Subliniere",legend:"Apasă ${underline}"},{name:"Comanda Legatură",legend:"Apasă ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",
-upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",
-f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js
deleted file mode 100644
index 0c0e31a3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","ru",{title:"ГорÑчие клавиши",contents:"Помощь. Ð”Ð»Ñ Ð·Ð°ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñтого окна нажмите ESC.",legend:[{name:"ОÑновное",items:[{name:"Панель инÑтрументов",legend:"Ðажмите ${toolbarFocus} Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° к панели инÑтрументов. Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ группами панели инÑтрументов иÑпользуйте TAB и SHIFT-TAB. Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÑ‰ÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñƒ кнопками панели иÑтрументов иÑпользуйте кнопки ВПРÐВО или ВЛЕВО. Ðажмите ПРОБЕЛ или ENTER Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑка кнопки панели инÑтрументов."},{name:"Диалоги",legend:"Ð’ диалоговом окне, нажмите клавишу TAB Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° к Ñледующему диалоговому полю, нажмите клавиши SHIFT + TAB, чтобы перейти к предыдущему полю, нажмите ENTER, чтобы отправить данные, нажмите клавишу ESC, Ð´Ð»Ñ Ð¾Ñ‚Ð¼ÐµÐ½Ñ‹. Ð”Ð»Ñ Ð¾ÐºÐ¾Ð½, которые имеют неÑколько вкладок, нажмите ALT + F10 Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ð° к ÑпиÑку вкладок. Переход к Ñледующей вкладке TAB ИЛИ ПРÐВУЮ СТРЕЛКУ. Переход к предыдущей вкладке Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ SHIFT + TAB или ЛЕВÐЯ СТРЕЛКÐ. Ðажмите ПРОБЕЛ или ENTER, чтобы выбрать вкладку."},
-{name:"КонтекÑтное меню",legend:'Ðажмите ${contextMenu} или клавишу APPLICATION, чтобы открыть контекÑтное меню. Затем перейдите к Ñледующему пункту меню Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ TAB или Ñтрелкой "Ð’ÐИЗ". Переход к предыдущей опции - SHIFT+TAB или Ñтрелкой "ВВЕРХ". Ðажмите SPACE, или ENTER, чтобы задейÑтвовать опцию меню. Открыть подменю текущей опции - SPACE или ENTER или Ñтрелкой "ВПРÐВО". Возврат к родительÑкому пункту меню - ESC или Ñтрелкой "ВЛЕВО". Закрытие контекÑтного меню - ESC.'},{name:"Редактор ÑпиÑка",
-legend:'Внутри окна ÑпиÑка, переход к Ñледующему пункту ÑпиÑка - TAB или Ñтрелкой "Ð’ÐИЗ". Переход к предыдущему пункту ÑпиÑка - SHIFT + TAB или Ñтрелкой "ВВЕРХ". Ðажмите SPACE, или ENTER, чтобы задейÑтвовать опцию ÑпиÑка. Ðажмите ESC, чтобы закрыть окно ÑпиÑка.'},{name:"Путь к Ñлементу",legend:'Ðажмите ${elementsPathFocus}, чтобы перейти к панели пути Ñлементов. Переход к Ñледующей кнопке Ñлемента - TAB или Ñтрелкой "ВПРÐВО". Переход к предыдущей кнопку - SHIFT+TAB или Ñтрелкой "ВЛЕВО". Ðажмите SPACE, или ENTER, чтобы выбрать Ñлемент в редакторе.'}]},
-{name:"Команды",items:[{name:"Отменить",legend:"Ðажмите ${undo}"},{name:"Повторить",legend:"Ðажмите ${redo}"},{name:"Полужирный",legend:"Ðажмите ${bold}"},{name:"КурÑив",legend:"Ðажмите ${italic}"},{name:"Подчеркнутый",legend:"Ðажмите ${underline}"},{name:"ГиперÑÑылка",legend:"Ðажмите ${link}"},{name:"Свернуть панель инÑтрументов",legend:"Ðажмите ${toolbarCollapse}"},{name:"Команды доÑтупа к предыдущему фокуÑному проÑтранÑтву",legend:'Ðажмите ${accessPreviousSpace}, чтобы обратитьÑÑ Ðº ближайшему недоÑтижимому фокуÑному проÑтранÑтву перед Ñимволом "^", например: два Ñмежных HR Ñлемента. Повторите комбинацию клавиш, чтобы доÑтичь отдаленных фокуÑных проÑтранÑтв.'},
-{name:"Команды доÑтупа к Ñледующему фокуÑному проÑтранÑтву",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:"Справка по горÑчим клавишам",legend:"Ðажмите ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",end:"End",
-home:"Home",leftArrow:"Стрелка влево",upArrow:"Стрелка вверх",rightArrow:"Стрелка вправо",downArrow:"Стрелка вниз",insert:"Insert","delete":"Delete",leftWindowKey:"Ð›ÐµÐ²Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° Windows",rightWindowKey:"ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÐ»Ð°Ð²Ð¸ÑˆÐ° Windows",selectKey:"Выбрать",numpad0:"Цифра 0",numpad1:"Цифра 1",numpad2:"Цифра 2",numpad3:"Цифра 3",numpad4:"Цифра 4",numpad5:"Цифра 5",numpad6:"Цифра 6",numpad7:"Цифра 7",numpad8:"Цифра 8",numpad9:"Цифра 9",multiply:"Умножить",add:"ПлюÑ",subtract:"ВычеÑÑ‚ÑŒ",decimalPoint:"ДеÑÑÑ‚Ð¸Ñ‡Ð½Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ°",
-divide:"Делить",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Точка Ñ Ð·Ð°Ð¿Ñтой",equalSign:"Равно",comma:"ЗапÑтаÑ",dash:"Тире",period:"Точка",forwardSlash:"ÐÐ°ÐºÐ»Ð¾Ð½Ð½Ð°Ñ Ñ‡ÐµÑ€Ñ‚Ð°",graveAccent:"ÐпоÑтроф",openBracket:"Открыть Ñкобку",backSlash:"ÐžÐ±Ñ€Ð°Ñ‚Ð½Ð°Ñ Ð½Ð°ÐºÐ»Ð¾Ð½Ð½Ð°Ñ Ñ‡ÐµÑ€Ñ‚Ð°",closeBracket:"Закрыть Ñкобку",singleQuote:"ÐžÐ´Ð¸Ð½Ð°Ñ€Ð½Ð°Ñ ÐºÐ°Ð²Ñ‹Ñ‡ÐºÐ°"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/si.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/si.js
deleted file mode 100644
index b5616dd0..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/si.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","si",{title:"ළඟ෠වියහà·à¶šà·’ ",contents:"උදව් සඳහ෠අන්තර්ගතය.නික්මයෙමට ESC බොත්තම ඔබන්න",legend:[{name:"පොදු කරුණු",items:[{name:"සංස්කරණ මෙවලම් ",legend:"ඔබන්න ${මෙවලම් තීරු අවධà·à¶±à¶º} මෙවලම් තීරුවේ එහ෠මෙහ෠යෑමට.ඉදිරියට යෑමට හ෠ආපසු යෑමට මෙවලම් තීරුකà·à¶«à·Šà¶©à¶º à·„à· TAB à·„à· SHIFT-TAB .ඉදිරියට යෑමට හ෠ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW à·„à· LEFT ARROW.මෙවලම් තීරු බොත්තම සක්â€à¶»à·’ය කර ගà·à¶±à·“මට SPACE à·„à· ENTER බොත්තම ඔබන්න."},{name:"සංස්කරණ ",legend:"දෙබසක් තුළ, ඊළඟ දෙබස් පෙදෙසට යෑමට TAB බොත්තම ඔබන්න, කලින් පෙදෙසට යෑමට SHIFT + TAB බොත්තම ද, දෙබස් ඉදිරිපත් කිරීමට ENTER බොත්තම ද, දෙබස් නà·à·€à¶­à·“මට ESCබොත්තම ද, දෙබස් සහිත ගොනු, පිටු à·€à·à¶©à·’ සංක්â€à¶ºà¶ºà·à·€à¶šà·Š ලබ෠ගෙනිමට,ගොනු තුළ එහà·à¶¸à·™à·„෠යෑමට ALT + F10 බොත්තම් ද, ඊළඟ ගොනුවට යෑමට TAB à·„à· RIGTH ARROW බොත්තම ඔබන්න. පෙර ගොනුවට යෑමට SHIFT + TAB à·„à· LEFT ARROW බොත්තම් ද ,ගොනු පිටු තේරීමට SPACE à·„à· ENTER බොත්තම් ද ඔබන්න."},
-{name:"සංස්කරණ අඩංගුවට ",legend:"ඔබන්න ${අන්තර්ගත මෙනුව} à·„à· APPLICATION KEY අන්තර්ගත-මෙනුව විවුරතකිරීමට. ඊළඟ මෙනුව-ව්කල්පයන්ට යෑමට TAB à·„à· DOWN ARROW බොත්තම ද, පෙර විකල්පයන්ටයෑමට SHIFT+TAB à·„à· UP ARROW බොත්තම ද, මෙනුව-ව්කල්පයන් තේරීමට SPACE à·„à· ENTER බොත්තම ද, දà·à¶±à¶§ විවුර්තව ඇති උප-මෙනුවක වීකල්ප තේරීමට SPACE à·„à· ENTER à·„à· RIGHT ARROW ද, නà·à·€à¶­ පෙර ප්â€à¶»à¶°à·à¶± මෙනුවට යෑමට ESC à·„à· LEFT ARROW බොත්තම ද. අන්තර්ගත-මෙනුව à·€à·à·ƒà·“මට ESC බොත්තම ද ඔබන්න."},{name:"සංස්කරණ තේරුම් ",legend:"තේරුම් කොටුව තුළ , ඊළඟ අයිතමයට යෑමට TAB à·„à· DOWN ARROW , පෙර අයිතමයට යෑමට SHIFT + TAB à·„à· UP ARROW . අයිතම විකල්පයන් තේරීමට SPACE à·„à· ENTER ,තේරුම් කොටුව à·€à·à·ƒà·“මට ESC බොත්තම් ද ඔබන්න."},
-{name:"සංස්කරණ අංග සහිත ",legend:"ඔබන්න ${මෙවලම් තීරු අවධà·à¶±à¶º} මෙවලම් තීරුවේ එහ෠මෙහ෠යෑමට.ඉදිරියට යෑමට හ෠ආපසු යෑමට මෙවලම් තීරුකà·à¶«à·Šà¶©à¶º à·„à· TAB à·„à· SHIFT-TAB .ඉදිරියට යෑමට හ෠ආපසු යෑමට මෙවලම් තීරු බොත්තම සමග RIGHT ARROW à·„à· LEFT ARROW.මෙවලම් තීරු බොත්තම සක්â€à¶»à·’ය කර ගà·à¶±à·“මට SPACE à·„à· ENTER බොත්තම ඔබන්න."}]},{name:"විධà·à¶±",items:[{name:"විධà·à¶±à¶º වෙනස් ",legend:"ඔබන්න ${වෙනස් කිරීම}"},{name:"විධà·à¶± නà·à·€à¶­à·Š පෙර පරිදිම වෙනස්කර ගà·à¶±à·“ම.",legend:"ඔබන්න ${නà·à·€à¶­à·Š පෙර පරිදිම වෙනස්කර ගà·à¶±à·“ම}"},{name:"තද අකුරින් විධà·à¶±",legend:"ඔබන්න ${තද }"},
-{name:"බà·à¶°à·“ අකුරු විධà·à¶±",legend:"ඔබන්න ${බà·à¶°à·“ අකුරු }"},{name:"යටින් ඉරි ඇද ඇති විධà·à¶±.",legend:"ඔබන්න ${යටින් ඉරි ඇද ඇති}"},{name:"සම්බන්ධිත විධà·à¶±",legend:"ඔබන්න ${සම්බන්ධ }"},{name:"මෙවලම් තීරු à·„à·à¶šà·”ලුම් විධà·à¶±",legend:"ඔබන්න ${මෙවලම් තීරු à·„à·à¶šà·”ලුම් }"},{name:"යොමුවීමට පෙර à·€à·à¶¯à¶œà¶­à·Š විධà·à¶±",legend:"ඔබන්න ${යොමුවීමට ඊළඟ }"},{name:"යොමුවීමට ඊළග à·€à·à¶¯à¶œà¶­à·Š විධà·à¶±",legend:"ඔබන්න ${යොමුවීමට ඊළඟ }"},{name:"ප්â€à¶»à·€à·šà· ",legend:"ඔබන්න ${a11y }"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",
-alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",
-numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js
deleted file mode 100644
index 083236c4..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","sk",{title:"InÅ¡trukcie prístupnosti",contents:"Pomocný obsah. Pre zatvorenie tohto okna, stlaÄte ESC.",legend:[{name:"VÅ¡eobecne",items:[{name:"LiÅ¡ta nástrojov editora",legend:"StlaÄte ${toolbarFocus} pre navigáciu na liÅ¡tu nástrojov. Medzi ÄalÅ¡ou a predchádzajúcou liÅ¡tou nástrojov sa pohybujete s TAB a SHIFT-TAB. Medzi Äalším a predchádzajúcim tlaÄidlom na liÅ¡te nástrojov sa pohybujete s pravou šípkou a ľavou šípkou. StlaÄte medzerník alebo ENTER pre aktiváciu tlaÄidla liÅ¡ty nástrojov."},
-{name:"Editorový dialóg",legend:"V dialogu, stlaÄte TAB pre navigáciu na ÄalÅ¡ie dialógové pole, stlaÄte STIFT + TAB pre presun na predchádzajúce pole, stlaÄte ENTER pre odoslanie dialógu, stlaÄte ESC pre zruÅ¡enie dialógu. Pre dialógy, ktoré majú viac záložiek, stlaÄte ALT + F10 pre navigácou do zoznamu záložiek. Potom sa posúvajte k ÄalÅ¡ej žáložke pomocou TAB alebo pravou šípkou. Pre presun k predchádzajúcej záložke, stlaÄte SHIFT + TAB alebo ľavú šípku. StlaÄte medzerník alebo ENTER pre vybranie záložky."},
-{name:"Editorové kontextové menu",legend:"StlaÄte ${contextMenu} alebo APPLICATION KEY pre otvorenie kontextového menu. Potom sa presúvajte na ÄalÅ¡ie možnosti menu s TAB alebo dolnou šípkou. Presunte sa k predchádzajúcej možnosti s SHIFT + TAB alebo hornou šípkou. StlaÄte medzerník alebo ENTER pre výber možnosti menu. Otvorte pod-menu danej možnosti s medzerníkom, alebo ENTER, alebo pravou šípkou. Vráťte sa späť do položky rodiÄovského menu s ESC alebo ľavou šípkou. Zatvorte kontextové menu s ESC."},
-{name:"Editorov box zoznamu",legend:"V boxe zoznamu, presuňte sa na ÄalÅ¡iu položku v zozname s TAB alebo dolnou šípkou. Presuňte sa k predchádzajúcej položke v zozname so SHIFT + TAB alebo hornou šípkou. StlaÄte medzerník alebo ENTER pre výber možnosti zoznamu. StlaÄte ESC pre zatvorenie boxu zoznamu."},{name:"Editorove pásmo cesty prvku",legend:"StlaÄte ${elementsPathFocus} pre navigovanie na pásmo cesty elementu. Presuňte sa na tlaÄidlo ÄalÅ¡ieho prvku s TAB alebo pravou šípkou. Presuňte sa k predchádzajúcemu tlaÄidlu s SHIFT + TAB alebo ľavou šípkou. StlaÄte medzerník alebo ENTER pre výber prvku v editore."}]},
-{name:"Príkazy",items:[{name:"VrátiÅ¥ príkazy",legend:"StlaÄte ${undo}"},{name:"Nanovo vrátiÅ¥ príkaz",legend:"StlaÄte ${redo}"},{name:"Príkaz na stuÄnenie",legend:"StlaÄte ${bold}"},{name:"Príkaz na kurzívu",legend:"StlaÄte ${italic}"},{name:"Príkaz na podÄiarknutie",legend:"StlaÄte ${underline}"},{name:"Príkaz na odkaz",legend:"StlaÄte ${link}"},{name:"Príkaz na zbalenie liÅ¡ty nástrojov",legend:"StlaÄte ${toolbarCollapse}"},{name:"PrejsÅ¥ na predchádzajúcu zamerateľnú medzeru príkazu",legend:"StlaÄte ${accessPreviousSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery pred vsuvkuo. Napríklad: dve za sebou idúce horizontálne Äiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier."},
-{name:"PrejsÅ¥ na Äalší ",legend:"StlaÄte ${accessNextSpace} pre prístup na najbližšie nedosiahnuteľné zamerateľné medzery po vsuvke. Napríklad: dve za sebou idúce horizontálne Äiary. Opakujte kombináciu klávesov pre dosiahnutie vzdialených zamerateľných medzier."},{name:"Pomoc prístupnosti",legend:"StlaÄte ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Stránka hore",pageDown:"Stránka dole",
-end:"End",home:"Home",leftArrow:"Šípka naľavo",upArrow:"Šípka hore",rightArrow:"Šípka napravo",downArrow:"Šípka dole",insert:"Insert","delete":"Delete",leftWindowKey:"Ľavé Windows tlaÄidlo",rightWindowKey:"Pravé Windows tlaÄidlo",selectKey:"TlaÄidlo Select",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Násobenie",add:"SÄítanie",subtract:"OdÄítanie",
-decimalPoint:"Desatinná Äiarka",divide:"Delenie",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"BodkoÄiarka",equalSign:"Rovná sa",comma:"ÄŒiarka",dash:"PomĺÄka",period:"Bodka",forwardSlash:"Lomítko",graveAccent:"Zdôrazňovanie prízvuku",openBracket:"Hranatá zátvorka otváracia",backSlash:"Backslash",closeBracket:"Hranatá zátvorka zatváracia",singleQuote:"Jednoduché úvodzovky"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js
deleted file mode 100644
index f99db09b..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","sl",{title:"Navodila Dostopnosti",contents:"Vsebina PomoÄi. ÄŒe želite zapreti to pogovorno okno pritisnite ESC.",legend:[{name:"SploÅ¡no",items:[{name:"Urejevalna Orodna Vrstica",legend:"Pritisnite ${toolbarFocus} za pomik v orodno vrstico. Z TAB in SHIFT-TAB se pomikate na naslednjo in prejÅ¡njo skupino orodne vrstice. Z DESNO PUÅ ÄŒICO ali LEVO PUÅ ÄŒICO se pomikate na naslednji in prejÅ¡nji gumb orodne vrstice. Pritisnite SPACE ali ENTER, da aktivirate gumb orodne vrstice."},
-{name:"Urejevalno Pogovorno Okno",legend:"Znotraj pogovornega okna, pritisnite tipko TAB za pomik na naslednjo pogovorno polje, pritisnite SHIFT + TAB za pomik v prejÅ¡nje polje, pritisnite tipko ENTER za predložitev pogovornega okna, pritisnite tipko ESC, da prekliÄete okno. Za okna, ki imajo veÄ zavihkov, pritisnite ALT + F10, da pojdete na seznam zavihkov. Na naslednji zavihek se premaknete s tipko TAB ali DESNO PUÅ ÄŒICO. Z SHIFT + TAB ali LEVO PUÅ ÄŒICO pa se premaknete na prejÅ¡nji zavihek. Pritisnite tipko SPACE ali ENTER za izbiro zavihka."},
-{name:"Urejevalni Kontekstni Meni",legend:"Pritisnite ${contextMenu} ali APPLICATION KEY, da odprete kontekstni meni. Nato se premaknite na naslednjo možnost menija s tipko TAB ali PUÅ ÄŒICA DOL. Premakniti se na prejÅ¡njo možnost z SHIFT + TAB ali PUÅ ÄŒICA GOR. Pritisnite SPACE ali ENTER za izbiro možnosti menija. Odprite podmeni trenutne možnosti menija s tipko SPACE ali ENTER ali DESNA PUÅ ÄŒICA. Vrnite se na matiÄni element menija s tipko ESC ali LEVA PUÅ ÄŒICA. Zaprite kontekstni meni z ESC."},{name:"Urejevalno Seznamsko Polje",
-legend:"Znotraj seznama, se premaknete na naslednji element seznama s tipko TAB ali PUŠČICO DOL. Z SHIFT + TAB ali PUŠČICO GOR se premaknete na prejšnji element seznama. Pritisnite tipko SPACE ali ENTER za izbiro elementa. Pritisnite tipko ESC, da zaprete seznam."},{name:"Urejevalna vrstica poti elementa",legend:"Pritisnite ${elementsPathFocus} za pomikanje po vrstici elementnih poti. S TAB ali DESNA PUŠČICA se premaknete na naslednji gumb elementa. Z SHIFT + TAB ali LEVO PUŠČICO se premaknete na prejšnji gumb elementa. Pritisnite SPACE ali ENTER za izbiro elementa v urejevalniku."}]},
-{name:"Ukazi",items:[{name:"Razveljavi ukaz",legend:"Pritisnite ${undo}"},{name:"Ponovi ukaz",legend:"Pritisnite ${redo}"},{name:"Krepki ukaz",legend:"Pritisnite ${bold}"},{name:"LežeÄi ukaz",legend:"Pritisnite ${italic}"},{name:"Poudarni ukaz",legend:"Pritisnite ${underline}"},{name:"Ukaz povezave",legend:"Pritisnite ${link}"},{name:"SkrÄi Orodno Vrstico Ukaz",legend:"Pritisnite ${toolbarCollapse}"},{name:"Dostop do prejÅ¡njega ukaza ostrenja",legend:"Pritisnite ${accessPreviousSpace} za dostop do najbližjega nedosegljivega osredotoÄenega prostora pred streÅ¡ico, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotoÄene prostore."},
-{name:"Dostop do naslednjega ukaza ostrenja",legend:"Pritisnite ${accessNextSpace} za dostop do najbližjega nedosegljivega osredotoÄenega prostora po streÅ¡ici, npr.: dva sosednja HR elementa. Ponovite kombinacijo tipk, da dosežete oddaljene osredotoÄene prostore."},{name:"PomoÄ Dostopnosti",legend:"Pritisnite ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",
-home:"Home",leftArrow:"Levo puÅ¡Äica",upArrow:"Gor puÅ¡Äica",rightArrow:"Desno puÅ¡Äica",downArrow:"Dol puÅ¡Äica",insert:"Insert","delete":"Delete",leftWindowKey:"Leva Windows tipka",rightWindowKey:"Desna Windows tipka",selectKey:"Select tipka",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Zmnoži",add:"Dodaj",subtract:"OdÅ¡tej",decimalPoint:"Decimalna vejica",
-divide:"Deli",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"PodpiÄje",equalSign:"enaÄaj",comma:"Vejica",dash:"Vezaj",period:"Pika",forwardSlash:"Desna poÅ¡evnica",graveAccent:"Krativec",openBracket:"Oklepaj",backSlash:"Leva poÅ¡evnica",closeBracket:"Oklepaj",singleQuote:"OpuÅ¡Äaj"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js
deleted file mode 100644
index 7bcd7690..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","sq",{title:"Udhëzimet e Qasjes",contents:"Përmbajtja ndihmëse. Për ta mbyllur dialogun shtyp ESC.",legend:[{name:"Të përgjithshme",items:[{name:"Shiriti i Redaktuesit",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Dialogu i Redaktuesit",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Komandat",items:[{name:"Rikthe komandën",legend:"Shtyp ${undo}"},{name:"Ribëj komandën",legend:"Shtyp ${redo}"},{name:"Komanda e trashjes së tekstit",legend:"Shtyp ${bold}"},{name:"Komanda kursive",legend:"Shtyp ${italic}"},
-{name:"Komanda e nënvijëzimit",legend:"Shtyp ${underline}"},{name:"Komanda e Nyjes",legend:"Shtyp ${link}"},{name:" Toolbar Collapse command",legend:"Shtyp ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:"Ndihmë Qasjeje",legend:"Shtyp ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",
-numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",
-openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js
deleted file mode 100644
index e1a720b1..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","sr-latn",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Opšte",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js
deleted file mode 100644
index a75fdd4d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","sr",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Опште",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Commands",items:[{name:" Undo command",legend:"Press ${undo}"},{name:" Redo command",legend:"Press ${redo}"},{name:" Bold command",legend:"Press ${bold}"},{name:" Italic command",legend:"Press ${italic}"},{name:" Underline command",
-legend:"Press ${underline}"},{name:" Link command",legend:"Press ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js
deleted file mode 100644
index 49f9293d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","sv",{title:"Hjälpmedelsinstruktioner",contents:"Hjälpinnehåll. För att stänga denna dialogruta trycker du på ESC.",legend:[{name:"Allmänt",items:[{name:"Editor verktygsfält",legend:"Tryck på ${toolbarFocus} för att navigera till verktygsfältet. Flytta till nästa och föregående verktygsfältsgrupp med TAB och SHIFT-TAB. Flytta till nästa och föregående knapp i verktygsfältet med HÖGERPIL eller VÄNSTERPIL. Tryck Space eller ENTER för att aktivera knappen i verktygsfältet."},
-{name:"Dialogeditor",legend:"Inuti en dialogruta, tryck TAB för att navigera till nästa fält i dialogrutan. Du trycker SKIFT + TAB för att flytta till föregående fält. Tryck ENTER för att skicka. Du avbryter och stänger dialogen med ESC. För dialogrutor som har flera flikar, tryck ALT + F10 navigera till fliklistan. Flytta sedan till nästa flik med HÖGERPIL. Flytta till föregående flik med SHIFT + TAB eller VÄNSTERPIL. Tryck Space eller ENTER för att välja fliken."},{name:"Editor för innehållsmeny",
-legend:"Tryck på $ {contextMenu} eller PROGRAMTANGENTEN för att öppna snabbmenyn. Flytta sedan till nästa menyalternativ med TAB eller NEDPIL. Flytta till föregående alternativ med SHIFT + TABB eller UPPIL. Tryck Space eller ENTER för att välja menyalternativ. Öppna undermeny av nuvarande alternativ med SPACE eller ENTER eller HÖGERPIL. Gå tillbaka till överordnade menyalternativ med ESC eller VÄNSTERPIL. Stäng snabbmenyn med ESC."},{name:"Editor för List Box",legend:"Inuti en list-box, gå till nästa listobjekt med TAB eller NEDPIL. Flytta till föregående listobjekt med SHIFT + TAB eller UPPIL. Tryck Space eller ENTER för att välja listan alternativet. Tryck ESC för att stänga listan-boxen."},
-{name:"Editor för elementens sökväg",legend:"Tryck på $ {elementsPathFocus} för att navigera till verktygsfältet för elementens sökvägar. Flytta till nästa elementknapp med TAB eller HÖGERPIL. Flytta till föregående knapp med SKIFT + TAB eller VÄNSTERPIL. Tryck Space eller ENTER för att välja element i redigeraren."}]},{name:"Kommandon",items:[{name:"Kommandot ångra",legend:"Tryck på ${undo}"},{name:"Kommandot gör om",legend:"Tryck på ${redo}"},{name:"Kommandot fet stil",legend:"Tryck på ${bold}"},
-{name:"Kommandot kursiv",legend:"Tryck på ${italic}"},{name:"Kommandot understruken",legend:"Tryck på ${underline}"},{name:"Kommandot länk",legend:"Tryck på ${link}"},{name:"Verktygsfält Dölj kommandot",legend:"Tryck på ${toolbarCollapse}"},{name:"Gå till föregående fokus plats",legend:"Tryck på ${accessPreviousSpace} för att gå till närmast onåbara utrymme före markören, exempel: två intilliggande HR element. Repetera tangentkombinationen för att gå till nästa."},{name:"Tillgå nästa fokuskommandots utrymme",
-legend:"Tryck ${accessNextSpace} på för att komma åt den närmaste onåbar fokus utrymme efter cirkumflex, till exempel: två intilliggande HR element. Upprepa tangentkombinationen för att nå avlägsna fokus utrymmen."},{name:"Hjälp om tillgänglighet",legend:"Tryck ${a11yHelp}"}]}],backspace:"Backsteg",tab:"Tab",enter:"Retur",shift:"Skift",ctrl:"Ctrl",alt:"Alt",pause:"Paus",capslock:"Caps lock",escape:"Escape",pageUp:"Sida Up",pageDown:"Sida Ned",end:"Slut",home:"Hem",leftArrow:"Vänsterpil",upArrow:"Uppil",
-rightArrow:"Högerpil",downArrow:"Nedåtpil",insert:"Infoga","delete":"Radera",leftWindowKey:"Vänster Windowstangent",rightWindowKey:"Höger Windowstangent",selectKey:"Välj tangent",numpad0:"Nummer 0",numpad1:"Nummer 1",numpad2:"Nummer 2",numpad3:"Nummer 3",numpad4:"Nummer 4",numpad5:"Nummer 5",numpad6:"Nummer 6",numpad7:"Nummer 7",numpad8:"Nummer 8",numpad9:"Nummer 9",multiply:"Multiplicera",add:"Addera",subtract:"Minus",decimalPoint:"Decimalpunkt",divide:"Dividera",f1:"F1",f2:"F2",f3:"F3",f4:"F4",
-f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semikolon",equalSign:"Lika med tecken",comma:"Komma",dash:"Minus",period:"Punkt",forwardSlash:"Snedstreck framåt",graveAccent:"Accent",openBracket:"Öppningsparentes",backSlash:"Snedstreck bakåt",closeBracket:"Slutparentes",singleQuote:"Enkelt Citattecken"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/th.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/th.js
deleted file mode 100644
index 4e7c3e0a..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/th.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","th",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"ทั่วไป",items:[{name:"à¹à¸–บเครื่องมือสำหรับเครื่องมือช่วยพิมพ์",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"คำสั่ง",items:[{name:"เลิà¸à¸—ำคำสั่ง",legend:"วาง ${undo}"},{name:"คำสั่งสำหรับทำซ้ำ",legend:"วาง ${redo}"},{name:"คำสั่งสำหรับตัวหนา",legend:"วาง ${bold}"},{name:"คำสั่งสำหรับตัวเอียง",legend:"วาง ${italic}"},{name:"คำสั่งสำหรับขีดเส้นใต้",
-legend:"วาง ${underline}"},{name:"คำสั่งสำหรับลิงà¸à¹Œ",legend:"วาง ${link}"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"Press ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js
deleted file mode 100644
index 57fd77a2..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","tr",{title:"Erişilebilirlik Talimatları",contents:"Yardım içeriği. Bu pencereyi kapatmak için ESC tuşuna basın.",legend:[{name:"Genel",items:[{name:"Düzenleyici Araç Çubuğu",legend:"Araç çubuğunda gezinmek için ${toolbarFocus} basın. TAB ve SHIFT-TAB ile önceki ve sonraki araç çubuğu grubuna taşıyın. SAĞ OK veya SOL OK ile önceki ve sonraki bir araç çubuğu düğmesini hareket ettirin. SPACE tuşuna basın veya araç çubuğu düğmesini etkinleştirmek için ENTER tuşna basın."},
-{name:"Diyalog Düzenleyici",legend:"Dialog penceresi içinde, sonraki iletişim alanına gitmek için SEKME tuşuna basın, önceki alana geçmek için SHIFT + TAB tuşuna basın, pencereyi göndermek için ENTER tuşuna basın, dialog penceresini iptal etmek için ESC tuşuna basın. Birden çok sekme sayfaları olan diyalogların, sekme listesine gitmek için ALT + F10 tuşlarına basın. Sonra TAB veya SAĞ OK sonraki sekmeye taşıyın. SHIFT + TAB veya SOL OK ile önceki sekmeye geçin. Sekme sayfayı seçmek için SPACE veya ENTER tuşuna basın."},
-{name:"İçerik Menü Editörü",legend:"İçerik menüsünü açmak için ${contextMenu} veya UYGULAMA TUŞU'na basın. Daha sonra SEKME veya AŞAĞI OK ile bir sonraki menü seçeneği taşıyın. SHIFT + TAB veya YUKARI OK ile önceki seçeneğe gider. Menü seçeneğini seçmek için SPACE veya ENTER tuşuna basın. Seçili seçeneğin alt menüsünü SPACE ya da ENTER veya SAĞ OK açın. Üst menü öğesini geçmek için ESC veya SOL OK ile geri dönün. ESC ile bağlam menüsünü kapatın."},{name:"Liste Kutusu Editörü",legend:"Liste kutusu içinde, bir sonraki liste öğesine SEKME VEYA AŞAĞI OK ile taşıyın. SHIFT + TAB veya YUKARI önceki liste öğesi taşıyın. Liste seçeneği seçmek için SPACE veya ENTER tuşuna basın. Liste kutusunu kapatmak için ESC tuşuna basın."},
-{name:"Element Yol Çubuğu Editörü",legend:"Elementlerin yol çubuğunda gezinmek için ${ElementsPathFocus} basın. SEKME veya SAĞ OK ile sonraki element düğmesine taşıyın. SHIFT + TAB veya SOL OK önceki düğmeye hareket ettirin. Editör içindeki elementi seçmek için ENTER veya SPACE tuşuna basın."}]},{name:"Komutlar",items:[{name:"Komutu geri al",legend:"$(undo)'ya basın"},{name:"Komutu geri al",legend:"${redo} basın"},{name:" Kalın komut",legend:"${bold} basın"},{name:" İtalik komutu",legend:"${italic} basın"},
-{name:" Alttan çizgi komutu",legend:"${underline} basın"},{name:" Bağlantı komutu",legend:"${link} basın"},{name:" Araç çubuğu Toplama komutu",legend:"${toolbarCollapse} basın"},{name:"Önceki komut alanına odaklan",legend:"Düzeltme imleçinden önce, en yakın uzaktaki alana erişmek için ${accessPreviousSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın."},{name:"Sonraki komut alanına odaklan",legend:"Düzeltme imleçinden sonra, en yakın uzaktaki alana erişmek için ${accessNextSpace} basın, örneğin: iki birleşik HR elementleri. Aynı tuş kombinasyonu tekrarıyla diğer alanlarada ulaşın."},
-{name:"Erişilebilirlik Yardımı",legend:"${a11yHelp}'e basın"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Sayfa Yukarı",pageDown:"Sayfa Aşağı",end:"End",home:"Home",leftArrow:"Sol ok",upArrow:"Yukarı ok",rightArrow:"Sağ ok",downArrow:"Aşağı ok",insert:"Insert","delete":"Silme",leftWindowKey:"Sol windows tuşu",rightWindowKey:"Sağ windows tuşu",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Çarpma",add:"Toplama",subtract:"Çıkarma",decimalPoint:"Ondalık işareti",divide:"Bölme",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Noktalı virgül",equalSign:"Eşittir",comma:"Virgül",dash:"Eksi",period:"Nokta",forwardSlash:"Forward Slash",
-graveAccent:"Grave Accent",openBracket:"Parantez aç",backSlash:"Backslash",closeBracket:"Parantez kapa",singleQuote:"Tek tırnak"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js
deleted file mode 100644
index 12cb6a88..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","tt",{title:"Accessibility Instructions",contents:"Help Contents. To close this dialog press ESC.",legend:[{name:"Гомуми",items:[{name:"Editor Toolbar",legend:"Press ${toolbarFocus} to navigate to the toolbar. Move to the next and previous toolbar group with TAB and SHIFT-TAB. Move to the next and previous toolbar button with RIGHT ARROW or LEFT ARROW. Press SPACE or ENTER to activate the toolbar button."},{name:"Editor Dialog",legend:"Inside a dialog, press TAB to navigate to next dialog field, press SHIFT + TAB to move to previous field, press ENTER to submit dialog, press ESC to cancel dialog. For dialogs that have multiple tab pages, press ALT + F10 to navigate to tab-list. Then move to next tab with TAB OR RIGTH ARROW. Move to previous tab with SHIFT + TAB or LEFT ARROW. Press SPACE or ENTER to select the tab page."},
-{name:"Editor Context Menu",legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Then move to next menu option with TAB or DOWN ARROW. Move to previous option with SHIFT+TAB or UP ARROW. Press SPACE or ENTER to select the menu option. Open sub-menu of current option with SPACE or ENTER or RIGHT ARROW. Go back to parent menu item with ESC or LEFT ARROW. Close context menu with ESC."},{name:"Editor List Box",legend:"Inside a list-box, move to next list item with TAB OR DOWN ARROW. Move to previous list item with SHIFT + TAB or UP ARROW. Press SPACE or ENTER to select the list option. Press ESC to close the list-box."},
-{name:"Editor Element Path Bar",legend:"Press ${elementsPathFocus} to navigate to the elements path bar. Move to next element button with TAB or RIGHT ARROW. Move to previous button with SHIFT+TAB or LEFT ARROW. Press SPACE or ENTER to select the element in editor."}]},{name:"Командалар",items:[{name:"Кайтару",legend:"${undo} баÑыгыз"},{name:"Кабатлау",legend:"${redo} баÑыгыз"},{name:"Калын",legend:"${bold} баÑыгыз"},{name:"КурÑив",legend:"${italic} баÑыгыз"},{name:"ÐÑтына Ñызылган",legend:"${underline} баÑыгыз"},
-{name:"Сылталама",legend:"${link} баÑыгыз"},{name:" Toolbar Collapse command",legend:"Press ${toolbarCollapse}"},{name:" Access previous focus space command",legend:"Press ${accessPreviousSpace} to access the closest unreachable focus space before the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},{name:" Access next focus space command",legend:"Press ${accessNextSpace} to access the closest unreachable focus space after the caret, for example: two adjacent HR elements. Repeat the key combination to reach distant focus spaces."},
-{name:" Accessibility Help",legend:"${a11yHelp} баÑыгыз"}]}],backspace:"Кайтару",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Тыныш",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Сул Ñкка ук",upArrow:"Ó¨Ñкә таба ук",rightArrow:"Уң Ñкка ук",downArrow:"ÐÑка таба ук",insert:"Ó¨ÑÑ‚Ó™Ò¯","delete":"Бетерү",leftWindowKey:"Сул Windows төймəÑе",rightWindowKey:"Уң Windows төймəÑе",selectKey:"Select төймəÑе",numpad0:"Numpad 0",numpad1:"Numpad 1",
-numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Тапкырлау",add:"Кушу",subtract:"Ðлу",decimalPoint:"Унарлы нокта",divide:"Бүлү",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Ðокталы өтер",equalSign:"Тигезлек билгеÑе",comma:"Өтер",dash:"Сызык",period:"Дәрәҗә",forwardSlash:"Кыек Ñызык",
-graveAccent:"ГравиÑ",openBracket:"Ò–Ó™Ñ Ð°Ñ‡Ñƒ",backSlash:"Кире кыек Ñызык",closeBracket:"Ò–Ó™Ñ Ñбу",singleQuote:"Бер иңле куштырнаклар"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js
deleted file mode 100644
index c7ab77c6..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","ug",{title:"قوشۇمچە چۈشەندۈرۈش",contents:"ياردەم مەزمۇنى. بۇ سۆزلەشكۈنى ياپماقچى بولسىڭىز ESC نى بÛسىڭ.",legend:[{name:"ئادەتتىكى",items:[{name:"قورال بالداق تەھرىر",legend:"${toolbarFocus} بÛسىلسا قورال بالداققا ÙŠÛتەكلەيدۇ، TAB ياكى SHIFT+TAB ئارقىلىق قورال بالداق گۇرۇپپىسى تاللىنىدۇ، ئوڭ سول يا ئوقتا توپچا تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تاللانغان توپچىنى قوللىنىدۇ."},{name:"تەھرىرلىگۈچ سۆزلەشكۈسى",legend:"سۆزلەشكۈدە TAB كۇنۇپكىسىدا ÙƒÛيىنكى سۆز بۆلىكىگە يۆتكىلىدۇ، SHIFT + TAB بىرىكمە كۇنۇپكىسىدا ئالدىنقى سۆز بۆلىكىگە يۆتكىلىدۇ، ENTER كۇنۇپكىسىدا سۆزلەشكۈنى تاپشۇرىدۇ، ESC كۇنۇپكىسى سۆزلەشكۈدىن ۋاز ÙƒÛچىدۇ. ÙƒÛ†Ù¾ بەتكۈچلۈك سۆزلەشكۈگە نىسبەتەن، ALT + F10 دا بەتكۈچ تىزىمىغا يۆتكەيدۇ. ئاندىن TAB كۇنۇپكىسى ياكى ئوڭ يا ئوق كۇنۇپكىسى ÙƒÛيىنكى بەتكۈچكە يۆتكەيدۇ؛ SHIFT + TAB كۇنۇپكىسى ياكى سول يا ئوق كۇنۇپكىسى ئالدىنقى بەتكۈچكە يۆتكەيدۇ. بوشلۇق كۇنۇپكىسى ياكى ENTER كۇنۇپكىسى بەتكۈچنى تاللايدۇ."},
-{name:"تەھرىرلىگۈچ تىل مۇھىت تىزىملىكى",legend:"${contextMenu} ياكى ئەپ كۇنۇپكىسىدا تىل مۇھىت تىزىملىكىنى ئاچىدۇ. ئاندىن TAB ياكى ئاستى يا ئوق كۇنۇپكىسىدا ÙƒÛيىنكى تىزىملىك تۈرىگە يۆتكەيدۇ؛ SHIFT+TAB ياكى ئۈستى يا ئوق كۇنۇپكىسىدا ئالدىنقى تىزىملىك تۈرىگە يۆتكەيدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىملىك تۈرىنى تاللايدۇ. بوشلۇق، ENTER ياكى ئوڭ يا ئوق كۇنۇپكىسىدا تارماق تىزىملىكنى ئاچىدۇ. قايتىش تىزىملىكىگە ESC ياكى سول يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ESC كۇنۇپكىسىدا تىل مۇھىت تىزىملىكى تاقىلىدۇ."},{name:"تەھرىرلىگۈچ تىزىمى",
-legend:"تىزىم قۇتىسىدا، ÙƒÛيىنكى تىزىم تۈرىگە يۆتكەشتە TAB ياكى ئاستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. ئالدىنقى تىزىم تۈرىگە يۆتكەشتە SHIFT + TAB ياكى ئۈستى يا ئوق كۇنۇپكىسى ئىشلىتىلىدۇ. بوشلۇق ياكى ENTER كۇنۇپكىسىدا تىزىم تۈرىنى تاللايدۇ.ESC كۇنۇپكىسىدا تىزىم قۇتىسىنى يىغىدۇ."},{name:"تەھرىرلىگۈچ ئÛÙ„ÛÙ…Ûنت يول بالداق",legend:"${elementsPathFocus} بÛسىلسا ئÛÙ„ÛÙ…Ûنت يول بالداققا ÙŠÛتەكلەيدۇ، TAB ياكى ئوڭ يا ئوقتا ÙƒÛيىنكى ئÛÙ„ÛÙ…Ûنت تاللىنىدۇ، SHIFT+TAB ياكى سول يا ئوقتا ئالدىنقى ئÛÙ„ÛÙ…Ûنت تاللىنىدۇ، بوشلۇق ياكى Enter كۇنۇپكىسىدا تەھرىرلىگۈچتىكى ئÛÙ„ÛÙ…Ûنت تاللىنىدۇ."}]},
-{name:"بۇيرۇق",items:[{name:"بۇيرۇقتىن ÙŠÛنىۋال",legend:"${undo} نى بÛسىڭ"},{name:"قايتىلاش بۇيرۇقى",legend:"${redo} نى بÛسىڭ"},{name:"توملىتىش بۇيرۇقى",legend:"${bold} نى بÛسىڭ"},{name:"يانتۇ بۇيرۇقى",legend:"${italic} نى بÛسىڭ"},{name:"ئاستى سىزىق بۇيرۇقى",legend:"${underline} نى بÛسىڭ"},{name:"ئۇلانما بۇيرۇقى",legend:"${link} نى بÛسىڭ"},{name:"قورال بالداق قاتلاش بۇيرۇقى",legend:"${toolbarCollapse} نى بÛسىڭ"},{name:"ئالدىنقى Ùوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق",legend:"${accessPreviousSpace} بÛسىپ ^ بەلگىسىگە ئەڭ ÙŠÛقىن زىيارەت قىلغىلى بولمايدىغان Ùوكۇس نۇقتا رايونىنىڭ ئالدىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئÛÙ„ÛÙ…Ûنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى Ùوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ."},
-{name:"ÙƒÛيىنكى Ùوكۇس نۇقتىسىنى زىيارەت قىلىدىغان بۇيرۇق",legend:"${accessNextSpace} بÛسىپ ^ بەلگىسىگە ئەڭ ÙŠÛقىن زىيارەت قىلغىلى بولمايدىغان Ùوكۇس نۇقتا رايونىنىڭ كەينىنى زىيارەت قىلىدۇ، مەسىلەن: ئۆز ئارا قوشنا ئىككى HR ئÛÙ„ÛÙ…Ûنت. بۇ بىرىكمە كۇنۇپكا تەكرارلانسا يىراقتىكى Ùوكۇس نۇقتا رايونىغا يەتكىلى بولىدۇ."},{name:"توسالغۇسىز لايىھە چۈشەندۈرۈشى",legend:"${a11yHelp} نى بÛسىڭ"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",
-pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Left Arrow",upArrow:"Up Arrow",rightArrow:"Right Arrow",downArrow:"Down Arrow",insert:"Insert","delete":"Delete",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"Add",subtract:"Subtract",
-decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"Equal Sign",comma:"Comma",dash:"Dash",period:"Period",forwardSlash:"Forward Slash",graveAccent:"Grave Accent",openBracket:"Open Bracket",backSlash:"Backslash",closeBracket:"Close Bracket",singleQuote:"Single Quote"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js
deleted file mode 100644
index 7c8f9098..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","uk",{title:"Спеціальні ІнÑтрукції",contents:"Довідка. ÐатиÑніть ESC Ñ– вона зникне.",legend:[{name:"ОÑновне",items:[{name:"Панель Редактора",legend:"ÐатиÑніть ${toolbarFocus} Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ñƒ до панелі інÑтрументів. Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¼Ñ–Ð¶ групами панелі інÑтрументів викориÑтовуйте TAB Ñ– SHIFT-TAB. Ð”Ð»Ñ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¼Ñ–Ð¶ кнопками панелі Ñ–Ñтрументів викориÑтовуйте кнопки СТРІЛКРВПРÐВО або ВЛІВО. ÐатиÑніть ПРОПУСК або ENTER Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку кнопки панелі інÑтрументів"},{name:"Діалог Редактора",
-legend:"У діалозі натиÑніть клавішу TAB Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ñƒ до наÑтупного полÑ, натиÑніть SHIFT + TAB, щоб перейти до попереднього полÑ, натиÑніть ENTER, щоб відправити дані, натиÑніть ESC, щоб ÑкаÑувати. Ð”Ð»Ñ Ð²Ñ–ÐºÐ¾Ð½, Ñкі мають кілька вкладок, натиÑніть ALT + F10 Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ…Ð¾Ð´Ñƒ до ÑпиÑку вкладок. Перехід до наÑтупної вкладки TAB ÐБО СТРІЛКРВПРÐВО. Перехід до попередньої вкладки за допомогою SHIFT + TAB або СТРІЛКРВЛІВО. ÐатиÑніть ПРОПУСК або ENTER, щоб вибрати вкладку."},{name:"КонтекÑтне Меню Редактора",
-legend:"Press ${contextMenu} or APPLICATION KEY to open context-menu. Потім перейдіть до наÑтупного пункту меню за допомогою TAB або СТРІЛКИ Ð’ÐИЗ. ÐатиÑніть ПРОПУСК або ENTER Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ параметру меню. Відкрийте підменю поточного параметру, натиÑнувши ПРОПУСК або ENTER або СТРІЛКУ ВПРÐВО. Перейдіть до батьківÑького елемента меню, натиÑнувши ESC або СТРІЛКУ ВЛІВО. Закрийте контекÑтне меню, натиÑнувши ESC."},{name:"Скринька СпиÑків Редактора",legend:"Ð’Ñередині ÑпиÑку переходимо до наÑтупного пункту ÑпиÑку клавішею TAB або СТРІЛКРВÐИЗ. Перейти до попереднього елемента ÑпиÑку можна SHIFT + TAB або СТРІЛКРВГОРУ. ÐатиÑніть ПРОПУСК або ENTER, щоб вибрати параметр ÑпиÑку. ÐатиÑніть клавішу ESC, щоб закрити ÑпиÑок."},
-{name:"ШлÑÑ… до елемента редактора",legend:"ÐатиÑніть ${elementsPathFocus} Ð´Ð»Ñ Ð½Ð°Ð²Ñ–Ð³Ð°Ñ†Ñ–Ñ— між елементами панелі. Перейдіть до наÑтупного елемента кнопкою TAB або СТРІЛКРВПРÐВО. Перейдіть до попереднього елемента кнопкою SHIFT+TAB або СТРІЛКРВЛІВО. ÐатиÑніть ПРОПУСК або ENTER Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ елемента в редакторі."}]},{name:"Команди",items:[{name:"Відмінити команду",legend:"ÐатиÑніть ${undo}"},{name:"Повторити",legend:"ÐатиÑніть ${redo}"},{name:"Жирний",legend:"ÐатиÑніть ${bold}"},{name:"КурÑив",legend:"ÐатиÑніть ${italic}"},
-{name:"ПідкреÑлений",legend:"ÐатиÑніть ${underline}"},{name:"ПоÑиланнÑ",legend:"ÐатиÑніть ${link}"},{name:"Згорнути панель інÑтрументів",legend:"ÐатиÑніть ${toolbarCollapse}"},{name:"ДоÑтуп до попереднього міÑÑ†Ñ Ñ„Ð¾ÐºÑƒÑуваннÑ",legend:"ÐатиÑніть ${accessNextSpace} Ð´Ð»Ñ Ð´Ð¾Ñтупу до найближчої недоÑÑжної облаÑÑ‚Ñ– фокуÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ´ кареткою, наприклад: два ÑуÑідні елементи HR. Повторіть комбінацію клавіш Ð´Ð»Ñ Ð´Ð¾ÑÑÐ³Ð½ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¸Ñ… облаÑтей фокуÑуваннÑ."},{name:"ДоÑтуп до наÑтупного міÑÑ†Ñ Ñ„Ð¾ÐºÑƒÑуваннÑ",legend:"ÐатиÑніть ${accessNextSpace} Ð´Ð»Ñ Ð´Ð¾Ñтупу до найближчої недоÑÑжної облаÑÑ‚Ñ– фокуÑÑƒÐ²Ð°Ð½Ð½Ñ Ð¿Ñ–ÑÐ»Ñ ÐºÐ°Ñ€ÐµÑ‚ÐºÐ¸, наприклад: два ÑуÑідні елементи HR. Повторіть комбінацію клавіш Ð´Ð»Ñ Ð´Ð¾ÑÑÐ³Ð½ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¸Ñ… облаÑтей фокуÑуваннÑ."},
-{name:"Допомога з доÑтупноÑÑ‚Ñ–",legend:"ÐатиÑніть ${a11yHelp}"}]}],backspace:"Backspace",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Esc",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"Ліва Ñтрілка",upArrow:"Стрілка вгору",rightArrow:"Права Ñтрілка",downArrow:"Стрілка вниз",insert:"Ð’Ñтавити","delete":"Видалити",leftWindowKey:"Ліва клавіша Windows",rightWindowKey:"Права клавіша Windows",selectKey:"Виберіть клавішу",numpad0:"Numpad 0",
-numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"МноженнÑ",add:"Додати",subtract:"ВідніманнÑ",decimalPoint:"ДеÑÑткова кома",divide:"ДіленнÑ",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Крапка з комою",equalSign:"Знак рівноÑÑ‚Ñ–",comma:"Кома",dash:"Тире",period:"Період",
-forwardSlash:"КоÑа риÑка",graveAccent:"ГравіÑ",openBracket:"Відкрити дужку",backSlash:"Зворотна коÑа риÑка",closeBracket:"Закрити дужку",singleQuote:"Одинарні лапки"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js
deleted file mode 100644
index e82e39a1..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","vi",{title:"HÆ°á»›ng dẫn trợ năng",contents:"Ná»™i dung Há»— trợ. Nhấn ESC để đóng há»™p thoại.",legend:[{name:"Chung",items:[{name:"Thanh công cụ soạn thảo",legend:"Nhấn ${toolbarFocus} để Ä‘iá»u hÆ°á»›ng đến thanh công cụ. Nhấn TAB và SHIFT-TAB để chuyển đến nhóm thanh công cụ khác. Nhấn MŨI TÊN PHẢI hoặc MŨI TÊN TRÃI để chuyển sang nút khác trên thanh công cụ. Nhấn PHÃM CÃCH hoặc ENTER để kích hoạt nút trên thanh công cụ."},{name:"Há»™p thoại Biên t",legend:"Bên trong má»™t há»™p thoại, nhấn TAB để chuyển sang trÆ°á»ng tiếp theo, nhấn SHIFT + TAB để quay lại trÆ°á»ng phía trÆ°á»›c, nhấn ENTER để chấp nhận, nhấn ESC để đóng há»™p thoại. Äối vá»›i các há»™p thoại có nhiá»u tab, nhấn ALT + F10 để chuyển đến danh sách các tab. Sau đó nhấn TAB hoặc MŨI TÊN SANG PHẢI để chuyển sang tab tiếp theo. Nhấn SHIFT + TAB hoặc MŨI TÊN SANG TRÃI để chuyển sang tab trÆ°á»›c đó. Nhấn DẤU CÃCH hoặc ENTER để chá»n tab."},
-{name:"Trình Ä‘Æ¡n Ngữ cảnh cBá»™ soạn thảo",legend:"Nhấn ${contextMenu} hoặc PHÃM ỨNG DỤNG để mở thá»±c Ä‘Æ¡n ngữ cảnh. Sau đó nhấn TAB hoặc MŨI TÊN XUá»NG để di chuyển đến tuỳ chá»n tiếp theo của thá»±c Ä‘Æ¡n. Nhấn SHIFT+TAB hoặc MŨI TÊN LÊN để quay lại tuỳ chá»n trÆ°á»›c. Nhấn DẤU CÃCH hoặc ENTER để chá»n tuỳ chá»n của thá»±c Ä‘Æ¡n. Nhấn DẤU CÃCH hoặc ENTER hoặc MŨI TÊN SANG PHẢI để mở thá»±c Ä‘Æ¡n con của tuỳ chá»n hiện tại. Nhấn ESC hoặc MŨI TÊN SANG TRÃI để quay trở lại thá»±c Ä‘Æ¡n gốc. Nhấn ESC để đóng thá»±c Ä‘Æ¡n ngữ cảnh."},
-{name:"Há»™p danh sách trình biên tập",legend:"Trong má»™t danh sách chá»n, di chuyển đối tượng tiếp theo vá»›i phím Tab hoặc phím mÅ©i tên hÆ°á»›ng xuống. Di chuyển đến đối tượng trÆ°á»›c đó bằng cách nhấn tổ hợp phím Shift+Tab hoặc mÅ©i tên hÆ°á»›ng lên. Phím khoảng cách hoặc phím Enter để chá»n các tùy chá»n trong danh sách. Nhấn phím Esc để đóng lại danh sách chá»n."},{name:"Thanh Ä‘Æ°á»ng dẫn các đối tượng",legend:"Nhấn ${elementsPathFocus} để Ä‘iá»u hÆ°á»›ng các đối tượng trong thanh Ä‘Æ°á»ng dẫn. Di chuyển đến đối tượng tiếp theo bằng phím Tab hoặc phím mÅ©i tên bên phải. Di chuyển đến đối tượng trÆ°á»›c đó bằng tổ hợp phím Shift+Tab hoặc phím mÅ©i tên bên trái. Nhấn phím khoảng cách hoặc Enter để chá»n đối tượng trong trình soạn thảo."}]},
-{name:"Lệnh",items:[{name:"Làm lại lện",legend:"Ấn ${undo}"},{name:"Làm lại lệnh",legend:"Ấn ${redo}"},{name:"Lệnh in đậm",legend:"Ấn ${bold}"},{name:"Lệnh in nghiêng",legend:"Ấn ${italic}"},{name:"Lệnh gạch dÆ°á»›i",legend:"Ấn ${underline}"},{name:"Lệnh liên kết",legend:"Nhấn ${link}"},{name:"Lệnh hiển thị thanh công cụ",legend:"Nhấn${toolbarCollapse}"},{name:"Truy cập đến lệnh tập trung vào khoảng cách trÆ°á»›c đó",legend:"Ấn ${accessPreviousSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác Ä‘á»™ng đến được , thí dụ: hai yếu tố Ä‘iá»u chỉnh HR. Lặp lại các phím kết há»ep này để vÆ°Æ¡n đến phần khoảng cách."},
-{name:"Truy cập phần đối tượng lệnh khoảng trống",legend:"Ấn ${accessNextSpace} để truy cập đến phần tập trung khoảng cách sau phần còn sót lại của khoảng cách gần nhất vốn không tác Ä‘á»™ng đến được , thí dụ: hai yếu tố Ä‘iá»u chỉnh HR. Lặp lại các phím kết há»ep này để vÆ°Æ¡n đến phần khoảng cách."},{name:"Trợ giúp liên quan",legend:"Nhấn ${a11yHelp}"}]}],backspace:"Phím Backspace",tab:"Phím Tab",enter:"Phím Tab",shift:"Phím Shift",ctrl:"Phím Ctrl",alt:"Phím Alt",pause:"Phím Pause",capslock:"Phím Caps Lock",
-escape:"Phím Escape",pageUp:"Phím Page Up",pageDown:"Phím Page Down",end:"Phím End",home:"Phím Home",leftArrow:"Phím Left Arrow",upArrow:"Phím Up Arrow",rightArrow:"Phím Right Arrow",downArrow:"Phím Down Arrow",insert:"Chèn","delete":"Xóa",leftWindowKey:"Phím Left Windows",rightWindowKey:"Phím Right Windows ",selectKey:"Chá»n phím",numpad0:"Phím 0",numpad1:"Phím 1",numpad2:"Phím 2",numpad3:"Phím 3",numpad4:"Phím 4",numpad5:"Phím 5",numpad6:"Phím 6",numpad7:"Phím 7",numpad8:"Phím 8",numpad9:"Phím 9",
-multiply:"Nhân",add:"Thêm",subtract:"Trừ",decimalPoint:"Äiểm số thập phân",divide:"Chia",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Dấu chấm phẩy",equalSign:"Äăng nhập bằng",comma:"Dấu phẩy",dash:"Dấu gạch ngang",period:"Phím .",forwardSlash:"Phím /",graveAccent:"Phím `",openBracket:"Open Bracket",backSlash:"Dấu gạch chéo ngược",closeBracket:"Gần giá đỡ",singleQuote:"Trích dẫn"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js
deleted file mode 100644
index fe2cab0d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","zh-cn",{title:"辅助功能说明",contents:"帮助内容。è¦å…³é—­æ­¤å¯¹è¯æ¡†è¯·æŒ‰ ESC 键。",legend:[{name:"常规",items:[{name:"编辑器工具æ ",legend:"按 ${toolbarFocus} 导航到工具æ ï¼Œä½¿ç”¨ TAB 键和 SHIFT+TAB 组åˆé”®ç§»åŠ¨åˆ°ä¸Šä¸€ä¸ªå’Œä¸‹ä¸€ä¸ªå·¥å…·æ ç»„。使用左å³ç®­å¤´é”®ç§»åŠ¨åˆ°ä¸Šä¸€ä¸ªå’Œä¸‹ä¸€ä¸ªå·¥å…·æ æŒ‰é’®ã€‚按空格键或回车键以选中工具æ æŒ‰é’®ã€‚"},{name:"编辑器对è¯æ¡†",legend:"在对è¯æ¡†å†…,TAB 键移动到下一个字段,SHIFT + TAB 组åˆé”®ç§»åŠ¨åˆ°ä¸Šä¸€ä¸ªå­—段,ENTER é”®æ交对è¯æ¡†ï¼ŒESC é”®å–消对è¯æ¡†ã€‚对于有多选项å¡çš„对è¯æ¡†ï¼Œç”¨ALT + F10æ¥ç§»åˆ°é€‰é¡¹å¡åˆ—表。然åŽç”¨ TAB 键或者å‘å³ç®­å¤´æ¥ç§»åŠ¨åˆ°ä¸‹ä¸€ä¸ªé€‰é¡¹å¡ï¼›SHIFT + TAB 组åˆé”®æˆ–者å‘左箭头移动到上一个选项å¡ã€‚用 SPACE 键或者 ENTER 键选择选项å¡ã€‚"},{name:"编辑器上下文èœå•",legend:"用 ${contextMenu} 或者“应用程åºé”®â€æ‰“开上下文èœå•ã€‚然åŽç”¨ TAB 键或者下箭头键æ¥ç§»åŠ¨åˆ°ä¸‹ä¸€ä¸ªèœå•é¡¹ï¼›SHIFT + TAB 组åˆé”®æˆ–者上箭头键移动到上一个èœå•é¡¹ã€‚用 SPACE 键或者 ENTER 键选择èœå•é¡¹ã€‚用 SPACE 键,ENTER 键或者å³ç®­å¤´é”®æ‰“å¼€å­èœå•ã€‚返回èœå•ç”¨ ESC 键或者左箭头键。用 ESC 键关闭上下文èœå•ã€‚"},
-{name:"编辑器列表框",legend:"在列表框中,移到下一列表项用 TAB 键或者下箭头键。移到上一列表项用SHIFT + TAB 组åˆé”®æˆ–者上箭头键,用 SPACE 键或者 ENTER 键选择列表项。用 ESC 键收起列表框。"},{name:"编辑器元素路径æ ",legend:"按 ${elementsPathFocus} 以导航到元素路径æ ï¼Œä½¿ç”¨ TAB 键或å³ç®­å¤´é”®é€‰æ‹©ä¸‹ä¸€ä¸ªå…ƒç´ ï¼Œä½¿ç”¨ SHIFT+TAB 组åˆé”®æˆ–左箭头键选择上一个元素,按空格键或回车键以选定编辑器里的元素。"}]},{name:"命令",items:[{name:" 撤消命令",legend:"按 ${undo}"},{name:" é‡åšå‘½ä»¤",legend:"按 ${redo}"},{name:" 加粗命令",legend:"按 ${bold}"},{name:" 倾斜命令",legend:"按 ${italic}"},{name:" 下划线命令",legend:"按 ${underline}"},{name:" 链接命令",legend:"按 ${link}"},{name:" 工具æ æŠ˜å å‘½ä»¤",legend:"按 ${toolbarCollapse}"},
-{name:"访问å‰ä¸€ä¸ªç„¦ç‚¹åŒºåŸŸçš„命令",legend:"按 ${accessPreviousSpace} 访问^符å·å‰æœ€è¿‘çš„ä¸å¯è®¿é—®çš„焦点区域,例如:两个相邻的 HR 元素。é‡å¤æ­¤ç»„åˆæŒ‰é”®å¯ä»¥åˆ°è¾¾è¿œå¤„的焦点区域。"},{name:"访问下一个焦点区域命令",legend:"按 ${accessNextSpace} 以访问^符å·åŽæœ€è¿‘çš„ä¸å¯è®¿é—®çš„焦点区域。例如:两个相邻的 HR 元素。é‡å¤æ­¤ç»„åˆæŒ‰é”®å¯ä»¥åˆ°è¾¾è¿œå¤„的焦点区域。"},{name:"辅助功能帮助",legend:"按 ${a11yHelp}"}]}],backspace:"退格键",tab:"Tab é”®",enter:"回车键",shift:"Shift é”®",ctrl:"Ctrl é”®",alt:"Alt é”®",pause:"æš‚åœé”®",capslock:"大写é”定键",escape:"Esc é”®",pageUp:"上翻页键",pageDown:"下翻页键",end:"行尾键",home:"行首键",leftArrow:"å‘左箭头键",upArrow:"å‘上箭头键",rightArrow:"å‘å³ç®­å¤´é”®",downArrow:"å‘下箭头键",
-insert:"æ’入键","delete":"删除键",leftWindowKey:"å·¦ WIN é”®",rightWindowKey:"å³ WIN é”®",selectKey:"选择键",numpad0:"å°é”®ç›˜ 0 é”®",numpad1:"å°é”®ç›˜ 1 é”®",numpad2:"å°é”®ç›˜ 2 é”®",numpad3:"å°é”®ç›˜ 3 é”®",numpad4:"å°é”®ç›˜ 4 é”®",numpad5:"å°é”®ç›˜ 5 é”®",numpad6:"å°é”®ç›˜ 6 é”®",numpad7:"å°é”®ç›˜ 7 é”®",numpad8:"å°é”®ç›˜ 8 é”®",numpad9:"å°é”®ç›˜ 9 é”®",multiply:"星å·é”®",add:"加å·é”®",subtract:"å‡å·é”®",decimalPoint:"å°æ•°ç‚¹é”®",divide:"除å·é”®",f1:"F1 é”®",f2:"F2 é”®",f3:"F3 é”®",f4:"F4 é”®",f5:"F5 é”®",f6:"F6 é”®",f7:"F7 é”®",f8:"F8 é”®",f9:"F9 é”®",f10:"F10 é”®",f11:"F11 é”®",f12:"F12 é”®",numLock:"æ•°å­—é”定键",scrollLock:"滚动é”定键",
-semiColon:"分å·é”®",equalSign:"ç­‰å·é”®",comma:"逗å·é”®",dash:"短划线键",period:"å¥å·é”®",forwardSlash:"æ–œæ é”®",graveAccent:"é‡éŸ³ç¬¦é”®",openBracket:"左中括å·é”®",backSlash:"åæ–œæ é”®",closeBracket:"å³ä¸­æ‹¬å·é”®",singleQuote:"å•å¼•å·é”®"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js b/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js
deleted file mode 100644
index 1521763d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("a11yhelp","zh",{title:"輔助工具指å—",contents:"說明內容。若è¦é—œé–‰æ­¤å°è©±æ¡†è«‹æŒ‰ã€ŒESCã€ã€‚",legend:[{name:"一般",items:[{name:"編輯器工具列",legend:"請按「${toolbarFocus}ã€ä»¥ç€è¦½å·¥å…·åˆ—。\r\n利用「TABã€æˆ–「SHIFT+TABã€ä»¥ä¾¿ç§»å‹•åˆ°ä¸‹ä¸€å€‹æˆ–å‰ä¸€å€‹å·¥å…·åˆ—群組。\r\n利用「→ã€æˆ–「â†ã€ä»¥ä¾¿ç§»å‹•åˆ°ä¸‹ä¸€å€‹æˆ–å‰ä¸€å€‹å·¥å…·åˆ—按鈕。\r\n請按下「空白éµã€æˆ–「ENTERã€éµå•Ÿå‹•å·¥å…·åˆ—按鈕。"},{name:"編輯器å°è©±æ–¹å¡Š",legend:"在å°è©±æ¡†ä¸­ï¼Œè«‹æŒ‰ TAB éµä»¥ä¾¿ç§»å‹•åˆ°ä¸‹å€‹æ¬„ä½ï¼Œè«‹æŒ‰ SHIFT + TAB 以便移動到å‰å€‹æ¬„ä½ï¼›è«‹æŒ‰ ENTER 以æ交å°è©±æ¡†è³‡æ–™ï¼Œæˆ–按下 ESC å–消å°è©±æ¡†ã€‚\r\n若是有多個é æ¡†çš„å°è©±æ¡†ï¼Œè«‹æŒ‰ ALT + F10 以移動到é æ¡†åˆ—表,並以 TAB 或是 → æ–¹å‘éµç§»å‹•åˆ°ä¸‹å€‹é æ¡†ã€‚以 SHIFT + TAB 或是 ↠方å‘éµç§»å‹•åˆ°å‰å€‹é æ¡†ã€‚按下 ç©ºç™½éµ æˆ–æ˜¯ ENTER 以é¸å–é æ¡†ã€‚"},{name:"編輯器內容功能表",
-legend:"請按下「${contextMenu}ã€æˆ–是「應用程å¼éµã€ä»¥é–‹å•Ÿå…§å®¹é¸å–®ã€‚以「TABã€æˆ–是「↓ã€éµç§»å‹•åˆ°ä¸‹ä¸€å€‹é¸å–®é¸é …。以「SHIFT + TABã€æˆ–是「↑ã€éµç§»å‹•åˆ°ä¸Šä¸€å€‹é¸å–®é¸é …。按下「空白éµã€æˆ–是「ENTERã€éµä»¥é¸å–é¸å–®é¸é …。以「空白éµã€æˆ–「ENTERã€æˆ–「→ã€é–‹å•Ÿç›®å‰é¸é …之å­é¸å–®ã€‚以「ESCã€æˆ–「â†ã€å›žåˆ°çˆ¶é¸å–®ã€‚以「ESCã€éµé—œé–‰å…§å®¹é¸å–®ã€ã€‚"},{name:"編輯器清單方塊",legend:"在列表中,請利用 TAB 或 ↓ æ–¹å‘éµä»¥ç§»å‹•åˆ°ä¸‹ä¸€å€‹é …目;或利用 SHIFT + TAB 或 ↑ æ–¹å‘éµç§»å‹•åˆ°å‰ä¸€å€‹é …目。請按下 ç©ºç™½éµ æˆ–æ˜¯ ENTER 以é¸å–項目。請按 ESC 關閉列表。"},{name:"編輯器元件路徑工具列",legend:"請按「${elementsPathFocus}ã€ä»¥ç€è¦½å…ƒç´ è·¯å¾‘工具列。\r\n利用「TABã€æˆ–「→ã€ä»¥ä¾¿ç§»å‹•åˆ°ä¸‹ä¸€å€‹å…ƒç´ æŒ‰éˆ•ã€‚\r\n利用「SHIFT+TABã€æˆ–「â†ã€ä»¥ä¾¿ç§»å‹•åˆ°å‰ä¸€å€‹å…ƒç´ æŒ‰éˆ•ã€‚\r\n請按下「空白éµã€æˆ–「ENTERã€éµé¸æ“‡ç·¨è¼¯å™¨ä¸­çš„元素。"}]},{name:"命令",items:[{name:"復原命令",
-legend:"請按下「${undo}ã€"},{name:"é‡è¤‡å‘½ä»¤",legend:"請按下「 ${redo}ã€"},{name:"粗體命令",legend:"請按下「${bold}ã€"},{name:"斜體",legend:"請按下「${italic}ã€"},{name:"底線命令",legend:"請按下「${underline}ã€"},{name:"連çµ",legend:"請按下「${link}ã€"},{name:"éš±è—工具列",legend:"請按下「${toolbarCollapse}ã€"},{name:"å­˜å–å‰ä¸€å€‹ç„¦é»žç©ºé–“命令",legend:"請按下 ${accessPreviousSpace} 以存å–最近但無法é è¿‘之æ’字符號å‰çš„焦點空間。舉例:二個相鄰的 HR 元素。\r\né‡è¤‡æŒ‰éµä»¥å­˜å–較é çš„焦點空間。"},{name:"å­˜å–下一個焦點空間命令",legend:"請按下 ${accessNextSpace} 以存å–最近但無法é è¿‘之æ’字符號後的焦點空間。舉例:二個相鄰的 HR 元素。\r\né‡è¤‡æŒ‰éµä»¥å­˜å–較é çš„焦點空間。"},{name:"å”助工具說明",legend:"請按下「${a11yHelp}ã€"}]}],
-backspace:"退格éµ",tab:"Tab",enter:"Enter",shift:"Shift",ctrl:"Ctrl",alt:"Alt",pause:"Pause",capslock:"Caps Lock",escape:"Escape",pageUp:"Page Up",pageDown:"Page Down",end:"End",home:"Home",leftArrow:"å‘左箭號",upArrow:"å‘上éµè™Ÿ",rightArrow:"å‘å³éµè™Ÿ",downArrow:"å‘下éµè™Ÿ",insert:"æ’å…¥","delete":"刪除",leftWindowKey:"Left Windows key",rightWindowKey:"Right Windows key",selectKey:"Select key",numpad0:"Numpad 0",numpad1:"Numpad 1",numpad2:"Numpad 2",numpad3:"Numpad 3",numpad4:"Numpad 4",numpad5:"Numpad 5",numpad6:"Numpad 6",
-numpad7:"Numpad 7",numpad8:"Numpad 8",numpad9:"Numpad 9",multiply:"Multiply",add:"新增",subtract:"Subtract",decimalPoint:"Decimal Point",divide:"Divide",f1:"F1",f2:"F2",f3:"F3",f4:"F4",f5:"F5",f6:"F6",f7:"F7",f8:"F8",f9:"F9",f10:"F10",f11:"F11",f12:"F12",numLock:"Num Lock",scrollLock:"Scroll Lock",semiColon:"Semicolon",equalSign:"等號",comma:"逗號",dash:"虛線",period:"å¥é»ž",forwardSlash:"斜線",graveAccent:"抑音符號",openBracket:"左方括號",backSlash:"å斜線",closeBracket:"å³æ–¹æ‹¬è™Ÿ",singleQuote:"單引號"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/about.js b/wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/about.js
deleted file mode 100644
index ee5473a0..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/about.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("about",function(a){var a=a.lang.about,b=CKEDITOR.getUrl(CKEDITOR.plugins.get("about").path+"dialogs/"+(CKEDITOR.env.hidpi?"hidpi/":"")+"logo_ckeditor.png");return{title:CKEDITOR.env.ie?a.dlgTitle:a.title,minWidth:390,minHeight:230,contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[{type:"html",html:'<style type="text/css">.cke_about_container{color:#000 !important;padding:10px 10px 0;margin-top:5px}.cke_about_container p{margin: 0 0 10px;}.cke_about_container .cke_about_logo{height:81px;background-color:#fff;background-image:url('+
-b+");"+(CKEDITOR.env.hidpi?"background-size:163px 58px;":"")+'background-position:center; background-repeat:no-repeat;margin-bottom:10px;}.cke_about_container a{cursor:pointer !important;color:#00B2CE !important;text-decoration:underline !important;}</style><div class="cke_about_container"><div class="cke_about_logo"></div><p>CKEditor '+CKEDITOR.version+" (revision "+CKEDITOR.revision+')<br><a target="_blank" href="http://ckeditor.com/">http://ckeditor.com</a></p><p>'+a.help.replace("$1",'<a target="_blank" href="http://docs.ckeditor.com/user">'+
-a.userGuide+"</a>")+"</p><p>"+a.moreInfo+'<br><a target="_blank" href="http://ckeditor.com/about/license">http://ckeditor.com/about/license</a></p><p>'+a.copy.replace("$1",'<a target="_blank" href="http://cksource.com/">CKSource</a> - Frederico Knabben')+"</p></div>"}]}],buttons:[CKEDITOR.dialog.cancelButton]}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png b/wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png
deleted file mode 100644
index 10cc7368..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/logo_ckeditor.png b/wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/logo_ckeditor.png
deleted file mode 100644
index f186eb87..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/about/dialogs/logo_ckeditor.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/clipboard/dialogs/paste.js b/wqflask/wqflask/static/packages/ckeditor/plugins/clipboard/dialogs/paste.js
deleted file mode 100644
index fd793e94..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/clipboard/dialogs/paste.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("paste",function(c){function h(a){var b=new CKEDITOR.dom.document(a.document),f=b.getBody(),d=b.getById("cke_actscrpt");d&&d.remove();f.setAttribute("contenteditable",!0);if(CKEDITOR.env.ie&&8>CKEDITOR.env.version)b.getWindow().on("blur",function(){b.$.selection.empty()});b.on("keydown",function(a){var a=a.data,b;switch(a.getKeystroke()){case 27:this.hide();b=1;break;case 9:case CKEDITOR.SHIFT+9:this.changeFocus(1),b=1}b&&a.preventDefault()},this);c.fire("ariaWidget",new CKEDITOR.dom.element(a.frameElement));
-b.getWindow().getFrame().removeCustomData("pendingFocus")&&f.focus()}var e=c.lang.clipboard;c.on("pasteDialogCommit",function(a){a.data&&c.fire("paste",{type:"auto",dataValue:a.data})},null,null,1E3);return{title:e.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?370:350,minHeight:CKEDITOR.env.quirks?250:245,onShow:function(){this.parts.dialog.$.offsetHeight;this.setupContent();this.parts.title.setHtml(this.customTitle||e.title);this.customTitle=null},onLoad:function(){(CKEDITOR.env.ie7Compat||
-CKEDITOR.env.ie6Compat)&&"rtl"==c.lang.dir&&this.parts.contents.setStyle("overflow","hidden")},onOk:function(){this.commitContent()},contents:[{id:"general",label:c.lang.common.generalTab,elements:[{type:"html",id:"securityMsg",html:'<div style="white-space:normal;width:340px">'+e.securityMsg+"</div>"},{type:"html",id:"pasteMsg",html:'<div style="white-space:normal;width:340px">'+e.pasteMsg+"</div>"},{type:"html",id:"editing_area",style:"width:100%;height:100%",html:"",focus:function(){var a=this.getInputElement(),
-b=a.getFrameDocument().getBody();!b||b.isReadOnly()?a.setCustomData("pendingFocus",1):b.focus()},setup:function(){var a=this.getDialog(),b='<html dir="'+c.config.contentsLangDirection+'" lang="'+(c.config.contentsLanguage||c.langCode)+'"><head><style>body{margin:3px;height:95%}</style></head><body><script id="cke_actscrpt" type="text/javascript">window.parent.CKEDITOR.tools.callFunction('+CKEDITOR.tools.addFunction(h,a)+",this);<\/script></body></html>",f=CKEDITOR.env.air?"javascript:void(0)":CKEDITOR.env.ie?
-"javascript:void((function(){"+encodeURIComponent("document.open();("+CKEDITOR.tools.fixDomain+")();document.close();")+'})())"':"",d=CKEDITOR.dom.element.createFromHtml('<iframe class="cke_pasteframe" frameborder="0" allowTransparency="true" src="'+f+'" role="region" aria-label="'+e.pasteArea+'" aria-describedby="'+a.getContentElement("general","pasteMsg").domId+'" aria-multiple="true"></iframe>');d.on("load",function(a){a.removeListener();a=d.getFrameDocument();a.write(b);c.focusManager.add(a.getBody());
-CKEDITOR.env.air&&h.call(this,a.getWindow().$)},a);d.setCustomData("dialog",a);a=this.getElement();a.setHtml("");a.append(d);if(CKEDITOR.env.ie){var g=CKEDITOR.dom.element.createFromHtml('<span tabindex="-1" style="position:absolute" role="presentation"></span>');g.on("focus",function(){setTimeout(function(){d.$.contentWindow.focus()})});a.append(g);this.focus=function(){g.focus();this.fire("focus")}}this.getInputElement=function(){return d};CKEDITOR.env.ie&&(a.setStyle("display","block"),a.setStyle("height",
-d.$.offsetHeight+2+"px"))},commit:function(){var a=this.getDialog().getParentEditor(),b=this.getInputElement().getFrameDocument().getBody(),c=b.getBogus(),d;c&&c.remove();d=b.getHtml();setTimeout(function(){a.fire("pasteDialogCommit",d)},0)}}]}]}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/colordialog/dialogs/colordialog.js b/wqflask/wqflask/static/packages/ckeditor/plugins/colordialog/dialogs/colordialog.js
deleted file mode 100644
index d91dcc65..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/colordialog/dialogs/colordialog.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("colordialog",function(t){function n(){f.getById(o).removeStyle("background-color");p.getContentElement("picker","selectedColor").setValue("");j&&j.removeAttribute("aria-selected");j=null}function u(a){var a=a.data.getTarget(),b;if("td"==a.getName()&&(b=a.getChild(0).getHtml()))j=a,j.setAttribute("aria-selected",!0),p.getContentElement("picker","selectedColor").setValue(b)}function y(a){for(var a=a.replace(/^#/,""),b=0,c=[];2>=b;b++)c[b]=parseInt(a.substr(2*b,2),16);return"#"+
-(165<=0.2126*c[0]+0.7152*c[1]+0.0722*c[2]?"000":"fff")}function v(a){!a.name&&(a=new CKEDITOR.event(a));var b=!/mouse/.test(a.name),c=a.data.getTarget(),e;if("td"==c.getName()&&(e=c.getChild(0).getHtml()))q(a),b?g=c:w=c,b&&(c.setStyle("border-color",y(e)),c.setStyle("border-style","dotted")),f.getById(k).setStyle("background-color",e),f.getById(l).setHtml(e)}function q(a){if(a=!/mouse/.test(a.name)&&g){var b=a.getChild(0).getHtml();a.setStyle("border-color",b);a.setStyle("border-style","solid")}!g&&
-!w&&(f.getById(k).removeStyle("background-color"),f.getById(l).setHtml("&nbsp;"))}function z(a){var b=a.data,c=b.getTarget(),e=b.getKeystroke(),d="rtl"==t.lang.dir;switch(e){case 38:if(a=c.getParent().getPrevious())a=a.getChild([c.getIndex()]),a.focus();b.preventDefault();break;case 40:if(a=c.getParent().getNext())(a=a.getChild([c.getIndex()]))&&1==a.type&&a.focus();b.preventDefault();break;case 32:case 13:u(a);b.preventDefault();break;case d?37:39:if(a=c.getNext())1==a.type&&(a.focus(),b.preventDefault(!0));
-else if(a=c.getParent().getNext())if((a=a.getChild([0]))&&1==a.type)a.focus(),b.preventDefault(!0);break;case d?39:37:if(a=c.getPrevious())a.focus(),b.preventDefault(!0);else if(a=c.getParent().getPrevious())a=a.getLast(),a.focus(),b.preventDefault(!0)}}var r=CKEDITOR.dom.element,f=CKEDITOR.document,h=t.lang.colordialog,p,x={type:"html",html:"&nbsp;"},j,g,w,m=function(a){return CKEDITOR.tools.getNextId()+"_"+a},k=m("hicolor"),l=m("hicolortext"),o=m("selhicolor"),i;(function(){function a(a,d){for(var s=
-a;s<a+3;s++){var e=new r(i.$.insertRow(-1));e.setAttribute("role","row");for(var f=d;f<d+3;f++)for(var g=0;6>g;g++)b(e.$,"#"+c[f]+c[g]+c[s])}}function b(a,c){var b=new r(a.insertCell(-1));b.setAttribute("class","ColorCell");b.setAttribute("tabIndex",-1);b.setAttribute("role","gridcell");b.on("keydown",z);b.on("click",u);b.on("focus",v);b.on("blur",q);b.setStyle("background-color",c);b.setStyle("border","1px solid "+c);b.setStyle("width","14px");b.setStyle("height","14px");var d=m("color_table_cell");
-b.setAttribute("aria-labelledby",d);b.append(CKEDITOR.dom.element.createFromHtml('<span id="'+d+'" class="cke_voice_label">'+c+"</span>",CKEDITOR.document))}i=CKEDITOR.dom.element.createFromHtml('<table tabIndex="-1" aria-label="'+h.options+'" role="grid" style="border-collapse:separate;" cellspacing="0"><caption class="cke_voice_label">'+h.options+'</caption><tbody role="presentation"></tbody></table>');i.on("mouseover",v);i.on("mouseout",q);var c="00 33 66 99 cc ff".split(" ");a(0,0);a(3,0);a(0,
-3);a(3,3);var e=new r(i.$.insertRow(-1));e.setAttribute("role","row");for(var d=0;6>d;d++)b(e.$,"#"+c[d]+c[d]+c[d]);for(d=0;12>d;d++)b(e.$,"#000000")})();return{title:h.title,minWidth:360,minHeight:220,onLoad:function(){p=this},onHide:function(){n();var a=g.getChild(0).getHtml();g.setStyle("border-color",a);g.setStyle("border-style","solid");f.getById(k).removeStyle("background-color");f.getById(l).setHtml("&nbsp;");g=null},contents:[{id:"picker",label:h.title,accessKey:"I",elements:[{type:"hbox",
-padding:0,widths:["70%","10%","30%"],children:[{type:"html",html:"<div></div>",onLoad:function(){CKEDITOR.document.getById(this.domId).append(i)},focus:function(){(g||this.getElement().getElementsByTag("td").getItem(0)).focus()}},x,{type:"vbox",padding:0,widths:["70%","5%","25%"],children:[{type:"html",html:"<span>"+h.highlight+'</span>\t\t\t\t\t\t\t\t\t\t\t\t<div id="'+k+'" style="border: 1px solid; height: 74px; width: 74px;"></div>\t\t\t\t\t\t\t\t\t\t\t\t<div id="'+l+'">&nbsp;</div><span>'+h.selected+
-'</span>\t\t\t\t\t\t\t\t\t\t\t\t<div id="'+o+'" style="border: 1px solid; height: 20px; width: 74px;"></div>'},{type:"text",label:h.selected,labelStyle:"display:none",id:"selectedColor",style:"width: 76px;margin-top:4px",onChange:function(){try{f.getById(o).setStyle("background-color",this.getValue())}catch(a){n()}}},x,{type:"button",id:"clear",label:h.clear,onClick:n}]}]}]}]}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/dialog/dialogDefinition.js b/wqflask/wqflask/static/packages/ckeditor/plugins/dialog/dialogDefinition.js
deleted file mode 100644
index 67d361ce..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/dialog/dialogDefinition.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/div/dialogs/div.js b/wqflask/wqflask/static/packages/ckeditor/plugins/div/dialogs/div.js
deleted file mode 100644
index 80bb959e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/div/dialogs/div.js
+++ /dev/null
@@ -1,9 +0,0 @@
-(function(){function p(a,k,o){if(!k.is||!k.getCustomData("block_processed"))k.is&&CKEDITOR.dom.element.setMarker(o,k,"block_processed",!0),a.push(k)}function n(a,k){function o(){this.foreach(function(a){if(/^(?!vbox|hbox)/.test(a.type)&&(a.setup||(a.setup=function(c){a.setValue(c.getAttribute(a.id)||"",1)}),!a.commit))a.commit=function(c){var g=this.getValue();"dir"==a.id&&c.getComputedStyle("direction")==g||(g?c.setAttribute(a.id,g):c.removeAttribute(a.id))}})}var n=function(){var f=CKEDITOR.tools.extend({},
-CKEDITOR.dtd.$blockLimit);a.config.div_wrapTable&&(delete f.td,delete f.th);return f}(),q=CKEDITOR.dtd.div,l={},m=[];return{title:a.lang.div.title,minWidth:400,minHeight:165,contents:[{id:"info",label:a.lang.common.generalTab,title:a.lang.common.generalTab,elements:[{type:"hbox",widths:["50%","50%"],children:[{id:"elementStyle",type:"select",style:"width: 100%;",label:a.lang.div.styleSelectLabel,"default":"",items:[[a.lang.common.notSet,""]],onChange:function(){var f=["info:elementStyle","info:class",
-"advanced:dir","advanced:style"],c=this.getDialog(),g=c._element&&c._element.clone()||new CKEDITOR.dom.element("div",a.document);this.commit(g,!0);for(var f=[].concat(f),b=f.length,i,e=0;e<b;e++)(i=c.getContentElement.apply(c,f[e].split(":")))&&i.setup&&i.setup(g,!0)},setup:function(f){for(var c in l)l[c].checkElementRemovable(f,!0,a)&&this.setValue(c,1)},commit:function(f){var c;(c=this.getValue())?l[c].applyToObject(f,a):f.removeAttribute("style")}},{id:"class",type:"text",requiredContent:"div(cke-xyz)",
-label:a.lang.common.cssClass,"default":""}]}]},{id:"advanced",label:a.lang.common.advancedTab,title:a.lang.common.advancedTab,elements:[{type:"vbox",padding:1,children:[{type:"hbox",widths:["50%","50%"],children:[{type:"text",id:"id",requiredContent:"div[id]",label:a.lang.common.id,"default":""},{type:"text",id:"lang",requiredContent:"div[lang]",label:a.lang.common.langCode,"default":""}]},{type:"hbox",children:[{type:"text",id:"style",requiredContent:"div{cke-xyz}",style:"width: 100%;",label:a.lang.common.cssStyle,
-"default":"",commit:function(a){a.setAttribute("style",this.getValue())}}]},{type:"hbox",children:[{type:"text",id:"title",requiredContent:"div[title]",style:"width: 100%;",label:a.lang.common.advisoryTitle,"default":""}]},{type:"select",id:"dir",requiredContent:"div[dir]",style:"width: 100%;",label:a.lang.common.langDir,"default":"",items:[[a.lang.common.notSet,""],[a.lang.common.langDirLtr,"ltr"],[a.lang.common.langDirRtl,"rtl"]]}]}]}],onLoad:function(){o.call(this);var f=this,c=this.getContentElement("info",
-"elementStyle");a.getStylesSet(function(g){var b,i;if(g)for(var e=0;e<g.length;e++)i=g[e],i.element&&"div"==i.element&&(b=i.name,l[b]=i=new CKEDITOR.style(i),a.filter.check(i)&&(c.items.push([b,b]),c.add(b,b)));c[1<c.items.length?"enable":"disable"]();setTimeout(function(){f._element&&c.setup(f._element)},0)})},onShow:function(){"editdiv"==k&&this.setupContent(this._element=CKEDITOR.plugins.div.getSurroundDiv(a))},onOk:function(){if("editdiv"==k)m=[this._element];else{var f=[],c={},g=[],b,i=a.getSelection(),
-e=i.getRanges(),l=i.createBookmarks(),h,j;for(h=0;h<e.length;h++)for(j=e[h].createIterator();b=j.getNextParagraph();)if(b.getName()in n&&!b.isReadOnly()){var d=b.getChildren();for(b=0;b<d.count();b++)p(g,d.getItem(b),c)}else{for(;!q[b.getName()]&&!b.equals(e[h].root);)b=b.getParent();p(g,b,c)}CKEDITOR.dom.element.clearAllMarkers(c);e=[];h=null;for(j=0;j<g.length;j++)b=g[j],d=a.elementPath(b).blockLimit,d.isReadOnly()&&(d=d.getParent()),a.config.div_wrapTable&&d.is(["td","th"])&&(d=a.elementPath(d.getParent()).blockLimit),
-d.equals(h)||(h=d,e.push([])),e[e.length-1].push(b);for(h=0;h<e.length;h++){d=e[h][0];g=d.getParent();for(b=1;b<e[h].length;b++)g=g.getCommonAncestor(e[h][b]);j=new CKEDITOR.dom.element("div",a.document);for(b=0;b<e[h].length;b++){for(d=e[h][b];!d.getParent().equals(g);)d=d.getParent();e[h][b]=d}for(b=0;b<e[h].length;b++)if(d=e[h][b],!d.getCustomData||!d.getCustomData("block_processed"))d.is&&CKEDITOR.dom.element.setMarker(c,d,"block_processed",!0),b||j.insertBefore(d),j.append(d);CKEDITOR.dom.element.clearAllMarkers(c);
-f.push(j)}i.selectBookmarks(l);m=f}f=m.length;for(c=0;c<f;c++)this.commitContent(m[c]),!m[c].getAttribute("style")&&m[c].removeAttribute("style");this.hide()},onHide:function(){"editdiv"==k&&this._element.removeCustomData("elementStyle");delete this._element}}}CKEDITOR.dialog.add("creatediv",function(a){return n(a,"creatediv")});CKEDITOR.dialog.add("editdiv",function(a){return n(a,"editdiv")})})(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/find/dialogs/find.js b/wqflask/wqflask/static/packages/ckeditor/plugins/find/dialogs/find.js
deleted file mode 100644
index 0ad6a589..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/find/dialogs/find.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-(function(){function y(c){return c.type==CKEDITOR.NODE_TEXT&&0<c.getLength()&&(!o||!c.isReadOnly())}function s(c){return!(c.type==CKEDITOR.NODE_ELEMENT&&c.isBlockBoundary(CKEDITOR.tools.extend({},CKEDITOR.dtd.$empty,CKEDITOR.dtd.$nonEditable)))}var o,t=function(){return{textNode:this.textNode,offset:this.offset,character:this.textNode?this.textNode.getText().charAt(this.offset):null,hitMatchBoundary:this._.matchBoundary}},u=["find","replace"],p=[["txtFindFind","txtFindReplace"],["txtFindCaseChk",
-"txtReplaceCaseChk"],["txtFindWordChk","txtReplaceWordChk"],["txtFindCyclic","txtReplaceCyclic"]],n=function(c,g){function n(a,b){var d=c.createRange();d.setStart(a.textNode,b?a.offset:a.offset+1);d.setEndAt(c.editable(),CKEDITOR.POSITION_BEFORE_END);return d}function q(a){var b=c.getSelection(),d=c.editable();b&&!a?(a=b.getRanges()[0].clone(),a.collapse(!0)):(a=c.createRange(),a.setStartAt(d,CKEDITOR.POSITION_AFTER_START));a.setEndAt(d,CKEDITOR.POSITION_BEFORE_END);return a}var v=new CKEDITOR.style(CKEDITOR.tools.extend({attributes:{"data-cke-highlight":1},
-fullMatch:1,ignoreReadonly:1,childRule:function(){return 0}},c.config.find_highlight,!0)),l=function(a,b){var d=this,c=new CKEDITOR.dom.walker(a);c.guard=b?s:function(a){!s(a)&&(d._.matchBoundary=!0)};c.evaluator=y;c.breakOnFalse=1;a.startContainer.type==CKEDITOR.NODE_TEXT&&(this.textNode=a.startContainer,this.offset=a.startOffset-1);this._={matchWord:b,walker:c,matchBoundary:!1}};l.prototype={next:function(){return this.move()},back:function(){return this.move(!0)},move:function(a){var b=this.textNode;
-if(null===b)return t.call(this);this._.matchBoundary=!1;if(b&&a&&0<this.offset)this.offset--;else if(b&&this.offset<b.getLength()-1)this.offset++;else{for(b=null;!b&&!(b=this._.walker[a?"previous":"next"].call(this._.walker),this._.matchWord&&!b||this._.walker._.end););this.offset=(this.textNode=b)?a?b.getLength()-1:0:0}return t.call(this)}};var r=function(a,b){this._={walker:a,cursors:[],rangeLength:b,highlightRange:null,isMatched:0}};r.prototype={toDomRange:function(){var a=c.createRange(),b=this._.cursors;
-if(1>b.length){var d=this._.walker.textNode;if(d)a.setStartAfter(d);else return null}else d=b[0],b=b[b.length-1],a.setStart(d.textNode,d.offset),a.setEnd(b.textNode,b.offset+1);return a},updateFromDomRange:function(a){var b=new l(a);this._.cursors=[];do a=b.next(),a.character&&this._.cursors.push(a);while(a.character);this._.rangeLength=this._.cursors.length},setMatched:function(){this._.isMatched=!0},clearMatched:function(){this._.isMatched=!1},isMatched:function(){return this._.isMatched},highlight:function(){if(!(1>
-this._.cursors.length)){this._.highlightRange&&this.removeHighlight();var a=this.toDomRange(),b=a.createBookmark();v.applyToRange(a,c);a.moveToBookmark(b);this._.highlightRange=a;b=a.startContainer;b.type!=CKEDITOR.NODE_ELEMENT&&(b=b.getParent());b.scrollIntoView();this.updateFromDomRange(a)}},removeHighlight:function(){if(this._.highlightRange){var a=this._.highlightRange.createBookmark();v.removeFromRange(this._.highlightRange,c);this._.highlightRange.moveToBookmark(a);this.updateFromDomRange(this._.highlightRange);
-this._.highlightRange=null}},isReadOnly:function(){return!this._.highlightRange?0:this._.highlightRange.startContainer.isReadOnly()},moveBack:function(){var a=this._.walker.back(),b=this._.cursors;a.hitMatchBoundary&&(this._.cursors=b=[]);b.unshift(a);b.length>this._.rangeLength&&b.pop();return a},moveNext:function(){var a=this._.walker.next(),b=this._.cursors;a.hitMatchBoundary&&(this._.cursors=b=[]);b.push(a);b.length>this._.rangeLength&&b.shift();return a},getEndCharacter:function(){var a=this._.cursors;
-return 1>a.length?null:a[a.length-1].character},getNextCharacterRange:function(a){var b,d;d=this._.cursors;d=(b=d[d.length-1])&&b.textNode?new l(n(b)):this._.walker;return new r(d,a)},getCursors:function(){return this._.cursors}};var w=function(a,b){var d=[-1];b&&(a=a.toLowerCase());for(var c=0;c<a.length;c++)for(d.push(d[c]+1);0<d[c+1]&&a.charAt(c)!=a.charAt(d[c+1]-1);)d[c+1]=d[d[c+1]-1]+1;this._={overlap:d,state:0,ignoreCase:!!b,pattern:a}};w.prototype={feedCharacter:function(a){for(this._.ignoreCase&&
-(a=a.toLowerCase());;){if(a==this._.pattern.charAt(this._.state))return this._.state++,this._.state==this._.pattern.length?(this._.state=0,2):1;if(this._.state)this._.state=this._.overlap[this._.state];else return 0}return null},reset:function(){this._.state=0}};var z=/[.,"'?!;: \u0085\u00a0\u1680\u280e\u2028\u2029\u202f\u205f\u3000]/,x=function(a){if(!a)return!0;var b=a.charCodeAt(0);return 9<=b&&13>=b||8192<=b&&8202>=b||z.test(a)},e={searchRange:null,matchRange:null,find:function(a,b,d,f,e,A){this.matchRange?
-(this.matchRange.removeHighlight(),this.matchRange=this.matchRange.getNextCharacterRange(a.length)):this.matchRange=new r(new l(this.searchRange),a.length);for(var i=new w(a,!b),j=0,k="%";null!==k;){for(this.matchRange.moveNext();k=this.matchRange.getEndCharacter();){j=i.feedCharacter(k);if(2==j)break;this.matchRange.moveNext().hitMatchBoundary&&i.reset()}if(2==j){if(d){var h=this.matchRange.getCursors(),m=h[h.length-1],h=h[0],g=c.createRange();g.setStartAt(c.editable(),CKEDITOR.POSITION_AFTER_START);
-g.setEnd(h.textNode,h.offset);h=g;m=n(m);h.trim();m.trim();h=new l(h,!0);m=new l(m,!0);if(!x(h.back().character)||!x(m.next().character))continue}this.matchRange.setMatched();!1!==e&&this.matchRange.highlight();return!0}}this.matchRange.clearMatched();this.matchRange.removeHighlight();return f&&!A?(this.searchRange=q(1),this.matchRange=null,arguments.callee.apply(this,Array.prototype.slice.call(arguments).concat([!0]))):!1},replaceCounter:0,replace:function(a,b,d,f,e,g,i){o=1;a=0;if(this.matchRange&&
-this.matchRange.isMatched()&&!this.matchRange._.isReplaced&&!this.matchRange.isReadOnly()){this.matchRange.removeHighlight();b=this.matchRange.toDomRange();d=c.document.createText(d);if(!i){var j=c.getSelection();j.selectRanges([b]);c.fire("saveSnapshot")}b.deleteContents();b.insertNode(d);i||(j.selectRanges([b]),c.fire("saveSnapshot"));this.matchRange.updateFromDomRange(b);i||this.matchRange.highlight();this.matchRange._.isReplaced=!0;this.replaceCounter++;a=1}else a=this.find(b,f,e,g,!i);o=0;return a}},
-f=c.lang.find;return{title:f.title,resizable:CKEDITOR.DIALOG_RESIZE_NONE,minWidth:350,minHeight:170,buttons:[CKEDITOR.dialog.cancelButton(c,{label:c.lang.common.close})],contents:[{id:"find",label:f.find,title:f.find,accessKey:"",elements:[{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtFindFind",label:f.findWhat,isChanged:!1,labelLayout:"horizontal",accessKey:"F"},{type:"button",id:"btnFind",align:"left",style:"width:100%",label:f.find,onClick:function(){var a=this.getDialog();
-e.find(a.getValueOf("find","txtFindFind"),a.getValueOf("find","txtFindCaseChk"),a.getValueOf("find","txtFindWordChk"),a.getValueOf("find","txtFindCyclic"))||alert(f.notFoundMsg)}}]},{type:"fieldset",label:CKEDITOR.tools.htmlEncode(f.findOptions),style:"margin-top:29px",children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"txtFindCaseChk",isChanged:!1,label:f.matchCase},{type:"checkbox",id:"txtFindWordChk",isChanged:!1,label:f.matchWord},{type:"checkbox",id:"txtFindCyclic",isChanged:!1,"default":!0,
-label:f.matchCyclic}]}]}]},{id:"replace",label:f.replace,accessKey:"M",elements:[{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtFindReplace",label:f.findWhat,isChanged:!1,labelLayout:"horizontal",accessKey:"F"},{type:"button",id:"btnFindReplace",align:"left",style:"width:100%",label:f.replace,onClick:function(){var a=this.getDialog();e.replace(a,a.getValueOf("replace","txtFindReplace"),a.getValueOf("replace","txtReplace"),a.getValueOf("replace","txtReplaceCaseChk"),a.getValueOf("replace",
-"txtReplaceWordChk"),a.getValueOf("replace","txtReplaceCyclic"))||alert(f.notFoundMsg)}}]},{type:"hbox",widths:["230px","90px"],children:[{type:"text",id:"txtReplace",label:f.replaceWith,isChanged:!1,labelLayout:"horizontal",accessKey:"R"},{type:"button",id:"btnReplaceAll",align:"left",style:"width:100%",label:f.replaceAll,isChanged:!1,onClick:function(){var a=this.getDialog();e.replaceCounter=0;e.searchRange=q(1);e.matchRange&&(e.matchRange.removeHighlight(),e.matchRange=null);for(c.fire("saveSnapshot");e.replace(a,
-a.getValueOf("replace","txtFindReplace"),a.getValueOf("replace","txtReplace"),a.getValueOf("replace","txtReplaceCaseChk"),a.getValueOf("replace","txtReplaceWordChk"),!1,!0););e.replaceCounter?(alert(f.replaceSuccessMsg.replace(/%1/,e.replaceCounter)),c.fire("saveSnapshot")):alert(f.notFoundMsg)}}]},{type:"fieldset",label:CKEDITOR.tools.htmlEncode(f.findOptions),children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"txtReplaceCaseChk",isChanged:!1,label:f.matchCase},{type:"checkbox",id:"txtReplaceWordChk",
-isChanged:!1,label:f.matchWord},{type:"checkbox",id:"txtReplaceCyclic",isChanged:!1,"default":!0,label:f.matchCyclic}]}]}]}],onLoad:function(){var a=this,b,c=0;this.on("hide",function(){c=0});this.on("show",function(){c=1});this.selectPage=CKEDITOR.tools.override(this.selectPage,function(f){return function(e){f.call(a,e);var g=a._.tabs[e],i;i="find"===e?"txtFindWordChk":"txtReplaceWordChk";b=a.getContentElement(e,"find"===e?"txtFindFind":"txtFindReplace");a.getContentElement(e,i);g.initialized||(CKEDITOR.document.getById(b._.inputId),
-g.initialized=!0);if(c){var j,e="find"===e?1:0,g=1-e,k,h=p.length;for(k=0;k<h;k++)i=this.getContentElement(u[e],p[k][e]),j=this.getContentElement(u[g],p[k][g]),j.setValue(i.getValue())}}})},onShow:function(){e.searchRange=q();var a=this.getParentEditor().getSelection().getSelectedText(),b=this.getContentElement(g,"find"==g?"txtFindFind":"txtFindReplace");b.setValue(a);b.select();this.selectPage(g);this[("find"==g&&this._.editor.readOnly?"hide":"show")+"Page"]("replace")},onHide:function(){var a;e.matchRange&&
-e.matchRange.isMatched()&&(e.matchRange.removeHighlight(),c.focus(),(a=e.matchRange.toDomRange())&&c.getSelection().selectRanges([a]));delete e.matchRange},onFocus:function(){return"replace"==g?this.getContentElement("replace","txtFindReplace"):this.getContentElement("find","txtFindFind")}}};CKEDITOR.dialog.add("find",function(c){return n(c,"find")});CKEDITOR.dialog.add("replace",function(c){return n(c,"replace")})})(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/flash/dialogs/flash.js b/wqflask/wqflask/static/packages/ckeditor/plugins/flash/dialogs/flash.js
deleted file mode 100644
index 6592f8e4..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/flash/dialogs/flash.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-(function(){function b(a,b,c){var k=n[this.id];if(k)for(var f=this instanceof CKEDITOR.ui.dialog.checkbox,e=0;e<k.length;e++){var d=k[e];switch(d.type){case g:if(!a)continue;if(null!==a.getAttribute(d.name)){a=a.getAttribute(d.name);f?this.setValue("true"==a.toLowerCase()):this.setValue(a);return}f&&this.setValue(!!d["default"]);break;case o:if(!a)continue;if(d.name in c){a=c[d.name];f?this.setValue("true"==a.toLowerCase()):this.setValue(a);return}f&&this.setValue(!!d["default"]);break;case i:if(!b)continue;
-if(b.getAttribute(d.name)){a=b.getAttribute(d.name);f?this.setValue("true"==a.toLowerCase()):this.setValue(a);return}f&&this.setValue(!!d["default"])}}}function c(a,b,c){var k=n[this.id];if(k)for(var f=""===this.getValue(),e=this instanceof CKEDITOR.ui.dialog.checkbox,d=0;d<k.length;d++){var h=k[d];switch(h.type){case g:if(!a||"data"==h.name&&b&&!a.hasAttribute("data"))continue;var l=this.getValue();f||e&&l===h["default"]?a.removeAttribute(h.name):a.setAttribute(h.name,l);break;case o:if(!a)continue;
-l=this.getValue();if(f||e&&l===h["default"])h.name in c&&c[h.name].remove();else if(h.name in c)c[h.name].setAttribute("value",l);else{var p=CKEDITOR.dom.element.createFromHtml("<cke:param></cke:param>",a.getDocument());p.setAttributes({name:h.name,value:l});1>a.getChildCount()?p.appendTo(a):p.insertBefore(a.getFirst())}break;case i:if(!b)continue;l=this.getValue();f||e&&l===h["default"]?b.removeAttribute(h.name):b.setAttribute(h.name,l)}}}for(var g=1,o=2,i=4,n={id:[{type:g,name:"id"}],classid:[{type:g,
-name:"classid"}],codebase:[{type:g,name:"codebase"}],pluginspage:[{type:i,name:"pluginspage"}],src:[{type:o,name:"movie"},{type:i,name:"src"},{type:g,name:"data"}],name:[{type:i,name:"name"}],align:[{type:g,name:"align"}],"class":[{type:g,name:"class"},{type:i,name:"class"}],width:[{type:g,name:"width"},{type:i,name:"width"}],height:[{type:g,name:"height"},{type:i,name:"height"}],hSpace:[{type:g,name:"hSpace"},{type:i,name:"hSpace"}],vSpace:[{type:g,name:"vSpace"},{type:i,name:"vSpace"}],style:[{type:g,
-name:"style"},{type:i,name:"style"}],type:[{type:i,name:"type"}]},m="play loop menu quality scale salign wmode bgcolor base flashvars allowScriptAccess allowFullScreen".split(" "),j=0;j<m.length;j++)n[m[j]]=[{type:i,name:m[j]},{type:o,name:m[j]}];m=["play","loop","menu"];for(j=0;j<m.length;j++)n[m[j]][0]["default"]=n[m[j]][1]["default"]=!0;CKEDITOR.dialog.add("flash",function(a){var g=!a.config.flashEmbedTagOnly,i=a.config.flashAddEmbedTag||a.config.flashEmbedTagOnly,k,f="<div>"+CKEDITOR.tools.htmlEncode(a.lang.common.preview)+
-'<br><div id="cke_FlashPreviewLoader'+CKEDITOR.tools.getNextNumber()+'" style="display:none"><div class="loading">&nbsp;</div></div><div id="cke_FlashPreviewBox'+CKEDITOR.tools.getNextNumber()+'" class="FlashPreviewBox"></div></div>';return{title:a.lang.flash.title,minWidth:420,minHeight:310,onShow:function(){this.fakeImage=this.objectNode=this.embedNode=null;k=new CKEDITOR.dom.element("embed",a.document);var e=this.getSelectedElement();if(e&&e.data("cke-real-element-type")&&"flash"==e.data("cke-real-element-type")){this.fakeImage=
-e;var d=a.restoreRealElement(e),h=null,b=null,c={};if("cke:object"==d.getName()){h=d;d=h.getElementsByTag("embed","cke");0<d.count()&&(b=d.getItem(0));for(var d=h.getElementsByTag("param","cke"),g=0,i=d.count();g<i;g++){var f=d.getItem(g),j=f.getAttribute("name"),f=f.getAttribute("value");c[j]=f}}else"cke:embed"==d.getName()&&(b=d);this.objectNode=h;this.embedNode=b;this.setupContent(h,b,c,e)}},onOk:function(){var e=null,d=null,b=null;if(this.fakeImage)e=this.objectNode,d=this.embedNode;else if(g&&
-(e=CKEDITOR.dom.element.createFromHtml("<cke:object></cke:object>",a.document),e.setAttributes({classid:"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000",codebase:"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"})),i)d=CKEDITOR.dom.element.createFromHtml("<cke:embed></cke:embed>",a.document),d.setAttributes({type:"application/x-shockwave-flash",pluginspage:"http://www.macromedia.com/go/getflashplayer"}),e&&d.appendTo(e);if(e)for(var b={},c=e.getElementsByTag("param",
-"cke"),f=0,j=c.count();f<j;f++)b[c.getItem(f).getAttribute("name")]=c.getItem(f);c={};f={};this.commitContent(e,d,b,c,f);e=a.createFakeElement(e||d,"cke_flash","flash",!0);e.setAttributes(f);e.setStyles(c);this.fakeImage?(e.replace(this.fakeImage),a.getSelection().selectElement(e)):a.insertElement(e)},onHide:function(){this.preview&&this.preview.setHtml("")},contents:[{id:"info",label:a.lang.common.generalTab,accessKey:"I",elements:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["280px","110px"],
-align:"right",children:[{id:"src",type:"text",label:a.lang.common.url,required:!0,validate:CKEDITOR.dialog.validate.notEmpty(a.lang.flash.validateSrc),setup:b,commit:c,onLoad:function(){var a=this.getDialog(),b=function(b){k.setAttribute("src",b);a.preview.setHtml('<embed height="100%" width="100%" src="'+CKEDITOR.tools.htmlEncode(k.getAttribute("src"))+'" type="application/x-shockwave-flash"></embed>')};a.preview=a.getContentElement("info","preview").getElement().getChild(3);this.on("change",function(a){a.data&&
-a.data.value&&b(a.data.value)});this.getInputElement().on("change",function(){b(this.getValue())},this)}},{type:"button",id:"browse",filebrowser:"info:src",hidden:!0,style:"display:inline-block;margin-top:14px;",label:a.lang.common.browseServer}]}]},{type:"hbox",widths:["25%","25%","25%","25%","25%"],children:[{type:"text",id:"width",requiredContent:"embed[width]",style:"width:95px",label:a.lang.common.width,validate:CKEDITOR.dialog.validate.htmlLength(a.lang.common.invalidHtmlLength.replace("%1",
-a.lang.common.width)),setup:b,commit:c},{type:"text",id:"height",requiredContent:"embed[height]",style:"width:95px",label:a.lang.common.height,validate:CKEDITOR.dialog.validate.htmlLength(a.lang.common.invalidHtmlLength.replace("%1",a.lang.common.height)),setup:b,commit:c},{type:"text",id:"hSpace",requiredContent:"embed[hspace]",style:"width:95px",label:a.lang.flash.hSpace,validate:CKEDITOR.dialog.validate.integer(a.lang.flash.validateHSpace),setup:b,commit:c},{type:"text",id:"vSpace",requiredContent:"embed[vspace]",
-style:"width:95px",label:a.lang.flash.vSpace,validate:CKEDITOR.dialog.validate.integer(a.lang.flash.validateVSpace),setup:b,commit:c}]},{type:"vbox",children:[{type:"html",id:"preview",style:"width:95%;",html:f}]}]},{id:"Upload",hidden:!0,filebrowser:"uploadButton",label:a.lang.common.upload,elements:[{type:"file",id:"upload",label:a.lang.common.upload,size:38},{type:"fileButton",id:"uploadButton",label:a.lang.common.uploadSubmit,filebrowser:"info:src","for":["Upload","upload"]}]},{id:"properties",
-label:a.lang.flash.propertiesTab,elements:[{type:"hbox",widths:["50%","50%"],children:[{id:"scale",type:"select",requiredContent:"embed[scale]",label:a.lang.flash.scale,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.scaleAll,"showall"],[a.lang.flash.scaleNoBorder,"noborder"],[a.lang.flash.scaleFit,"exactfit"]],setup:b,commit:c},{id:"allowScriptAccess",type:"select",requiredContent:"embed[allowscriptaccess]",label:a.lang.flash.access,"default":"",style:"width : 100%;",
-items:[[a.lang.common.notSet,""],[a.lang.flash.accessAlways,"always"],[a.lang.flash.accessSameDomain,"samedomain"],[a.lang.flash.accessNever,"never"]],setup:b,commit:c}]},{type:"hbox",widths:["50%","50%"],children:[{id:"wmode",type:"select",requiredContent:"embed[wmode]",label:a.lang.flash.windowMode,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.windowModeWindow,"window"],[a.lang.flash.windowModeOpaque,"opaque"],[a.lang.flash.windowModeTransparent,"transparent"]],
-setup:b,commit:c},{id:"quality",type:"select",requiredContent:"embed[quality]",label:a.lang.flash.quality,"default":"high",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.flash.qualityBest,"best"],[a.lang.flash.qualityHigh,"high"],[a.lang.flash.qualityAutoHigh,"autohigh"],[a.lang.flash.qualityMedium,"medium"],[a.lang.flash.qualityAutoLow,"autolow"],[a.lang.flash.qualityLow,"low"]],setup:b,commit:c}]},{type:"hbox",widths:["50%","50%"],children:[{id:"align",type:"select",requiredContent:"object[align]",
-label:a.lang.common.align,"default":"",style:"width : 100%;",items:[[a.lang.common.notSet,""],[a.lang.common.alignLeft,"left"],[a.lang.flash.alignAbsBottom,"absBottom"],[a.lang.flash.alignAbsMiddle,"absMiddle"],[a.lang.flash.alignBaseline,"baseline"],[a.lang.common.alignBottom,"bottom"],[a.lang.common.alignMiddle,"middle"],[a.lang.common.alignRight,"right"],[a.lang.flash.alignTextTop,"textTop"],[a.lang.common.alignTop,"top"]],setup:b,commit:function(a,b,f,g,i){var j=this.getValue();c.apply(this,arguments);
-j&&(i.align=j)}},{type:"html",html:"<div></div>"}]},{type:"fieldset",label:CKEDITOR.tools.htmlEncode(a.lang.flash.flashvars),children:[{type:"vbox",padding:0,children:[{type:"checkbox",id:"menu",label:a.lang.flash.chkMenu,"default":!0,setup:b,commit:c},{type:"checkbox",id:"play",label:a.lang.flash.chkPlay,"default":!0,setup:b,commit:c},{type:"checkbox",id:"loop",label:a.lang.flash.chkLoop,"default":!0,setup:b,commit:c},{type:"checkbox",id:"allowFullScreen",label:a.lang.flash.chkFull,"default":!0,
-setup:b,commit:c}]}]}]},{id:"advanced",label:a.lang.common.advancedTab,elements:[{type:"hbox",children:[{type:"text",id:"id",requiredContent:"object[id]",label:a.lang.common.id,setup:b,commit:c}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",id:"bgcolor",requiredContent:"embed[bgcolor]",label:a.lang.flash.bgcolor,setup:b,commit:c},{type:"text",id:"class",requiredContent:"embed(cke-xyz)",label:a.lang.common.cssClass,setup:b,commit:c}]},{type:"text",id:"style",requiredContent:"embed{cke-xyz}",
-validate:CKEDITOR.dialog.validate.inlineStyle(a.lang.common.invalidInlineStyle),label:a.lang.common.cssStyle,setup:b,commit:c}]}]}})})(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/flash/images/placeholder.png b/wqflask/wqflask/static/packages/ckeditor/plugins/flash/images/placeholder.png
deleted file mode 100644
index 0bc6caa7..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/flash/images/placeholder.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/button.js b/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/button.js
deleted file mode 100644
index 56a4efdd..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/button.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("button",function(b){function d(a){var b=this.getValue();b?(a.attributes[this.id]=b,"name"==this.id&&(a.attributes["data-cke-saved-name"]=b)):(delete a.attributes[this.id],"name"==this.id&&delete a.attributes["data-cke-saved-name"])}return{title:b.lang.forms.button.title,minWidth:350,minHeight:150,onShow:function(){delete this.button;var a=this.getParentEditor().getSelection().getSelectedElement();a&&a.is("input")&&a.getAttribute("type")in{button:1,reset:1,submit:1}&&(this.button=
-a,this.setupContent(a))},onOk:function(){var a=this.getParentEditor(),b=this.button,d=!b,c=b?CKEDITOR.htmlParser.fragment.fromHtml(b.getOuterHtml()).children[0]:new CKEDITOR.htmlParser.element("input");this.commitContent(c);var e=new CKEDITOR.htmlParser.basicWriter;c.writeHtml(e);c=CKEDITOR.dom.element.createFromHtml(e.getHtml(),a.document);d?a.insertElement(c):(c.replace(b),a.getSelection().selectElement(c))},contents:[{id:"info",label:b.lang.forms.button.title,title:b.lang.forms.button.title,elements:[{id:"name",
-type:"text",label:b.lang.common.name,"default":"",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:d},{id:"value",type:"text",label:b.lang.forms.button.text,accessKey:"V","default":"",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:d},{id:"type",type:"select",label:b.lang.forms.button.type,"default":"button",accessKey:"T",items:[[b.lang.forms.button.typeBtn,"button"],[b.lang.forms.button.typeSbm,"submit"],[b.lang.forms.button.typeRst,
-"reset"]],setup:function(a){this.setValue(a.getAttribute("type")||"")},commit:d}]}]}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/checkbox.js b/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/checkbox.js
deleted file mode 100644
index 65f1be60..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/checkbox.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("checkbox",function(d){return{title:d.lang.forms.checkboxAndRadio.checkboxTitle,minWidth:350,minHeight:140,onShow:function(){delete this.checkbox;var a=this.getParentEditor().getSelection().getSelectedElement();a&&"checkbox"==a.getAttribute("type")&&(this.checkbox=a,this.setupContent(a))},onOk:function(){var a,b=this.checkbox;b||(a=this.getParentEditor(),b=a.document.createElement("input"),b.setAttribute("type","checkbox"),a.insertElement(b));this.commitContent({element:b})},contents:[{id:"info",
-label:d.lang.forms.checkboxAndRadio.checkboxTitle,title:d.lang.forms.checkboxAndRadio.checkboxTitle,startupFocus:"txtName",elements:[{id:"txtName",type:"text",label:d.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"txtValue",type:"text",label:d.lang.forms.checkboxAndRadio.value,
-"default":"",accessKey:"V",setup:function(a){a=a.getAttribute("value");this.setValue(CKEDITOR.env.ie&&"on"==a?"":a)},commit:function(a){var b=a.element,c=this.getValue();c&&!(CKEDITOR.env.ie&&"on"==c)?b.setAttribute("value",c):CKEDITOR.env.ie?(c=new CKEDITOR.dom.element("input",b.getDocument()),b.copyAttributes(c,{value:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c):b.removeAttribute("value")}},{id:"cmbSelected",type:"checkbox",label:d.lang.forms.checkboxAndRadio.selected,"default":"",
-accessKey:"S",value:"checked",setup:function(a){this.setValue(a.getAttribute("checked"))},commit:function(a){var b=a.element;if(CKEDITOR.env.ie){var c=!!b.getAttribute("checked"),e=!!this.getValue();c!=e&&(c=CKEDITOR.dom.element.createFromHtml('<input type="checkbox"'+(e?' checked="checked"':"")+"/>",d.document),b.copyAttributes(c,{type:1,checked:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c)}else this.getValue()?b.setAttribute("checked","checked"):b.removeAttribute("checked")}}]}]}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/form.js b/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/form.js
deleted file mode 100644
index 86267185..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/form.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("form",function(a){var d={action:1,id:1,method:1,enctype:1,target:1};return{title:a.lang.forms.form.title,minWidth:350,minHeight:200,onShow:function(){delete this.form;var b=this.getParentEditor().elementPath().contains("form",1);b&&(this.form=b,this.setupContent(b))},onOk:function(){var b,a=this.form,c=!a;c&&(b=this.getParentEditor(),a=b.document.createElement("form"),a.appendBogus());c&&b.insertElement(a);this.commitContent(a)},onLoad:function(){function a(b){this.setValue(b.getAttribute(this.id)||
-"")}function e(a){this.getValue()?a.setAttribute(this.id,this.getValue()):a.removeAttribute(this.id)}this.foreach(function(c){d[c.id]&&(c.setup=a,c.commit=e)})},contents:[{id:"info",label:a.lang.forms.form.title,title:a.lang.forms.form.title,elements:[{id:"txtName",type:"text",label:a.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",
-!1),a.removeAttribute("name"))}},{id:"action",type:"text",label:a.lang.forms.form.action,"default":"",accessKey:"T"},{type:"hbox",widths:["45%","55%"],children:[{id:"id",type:"text",label:a.lang.common.id,"default":"",accessKey:"I"},{id:"enctype",type:"select",label:a.lang.forms.form.encoding,style:"width:100%",accessKey:"E","default":"",items:[[""],["text/plain"],["multipart/form-data"],["application/x-www-form-urlencoded"]]}]},{type:"hbox",widths:["45%","55%"],children:[{id:"target",type:"select",
-label:a.lang.common.target,style:"width:100%",accessKey:"M","default":"",items:[[a.lang.common.notSet,""],[a.lang.common.targetNew,"_blank"],[a.lang.common.targetTop,"_top"],[a.lang.common.targetSelf,"_self"],[a.lang.common.targetParent,"_parent"]]},{id:"method",type:"select",label:a.lang.forms.form.method,accessKey:"M","default":"GET",items:[["GET","get"],["POST","post"]]}]}]}]}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/hiddenfield.js b/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/hiddenfield.js
deleted file mode 100644
index f4699b7d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/hiddenfield.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("hiddenfield",function(d){return{title:d.lang.forms.hidden.title,hiddenField:null,minWidth:350,minHeight:110,onShow:function(){delete this.hiddenField;var a=this.getParentEditor(),b=a.getSelection(),c=b.getSelectedElement();c&&(c.data("cke-real-element-type")&&"hiddenfield"==c.data("cke-real-element-type"))&&(this.hiddenField=c,c=a.restoreRealElement(this.hiddenField),this.setupContent(c),b.selectElement(this.hiddenField))},onOk:function(){var a=this.getValueOf("info","_cke_saved_name");
-this.getValueOf("info","value");var b=this.getParentEditor(),a=CKEDITOR.env.ie&&!(8<=CKEDITOR.document.$.documentMode)?b.document.createElement('<input name="'+CKEDITOR.tools.htmlEncode(a)+'">'):b.document.createElement("input");a.setAttribute("type","hidden");this.commitContent(a);a=b.createFakeElement(a,"cke_hidden","hiddenfield");this.hiddenField?(a.replace(this.hiddenField),b.getSelection().selectElement(a)):b.insertElement(a);return!0},contents:[{id:"info",label:d.lang.forms.hidden.title,title:d.lang.forms.hidden.title,
-elements:[{id:"_cke_saved_name",type:"text",label:d.lang.forms.hidden.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.setAttribute("name",this.getValue()):a.removeAttribute("name")}},{id:"value",type:"text",label:d.lang.forms.hidden.value,"default":"",accessKey:"V",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:function(a){this.getValue()?a.setAttribute("value",this.getValue()):
-a.removeAttribute("value")}}]}]}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/radio.js b/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/radio.js
deleted file mode 100644
index 1af693e1..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/radio.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("radio",function(d){return{title:d.lang.forms.checkboxAndRadio.radioTitle,minWidth:350,minHeight:140,onShow:function(){delete this.radioButton;var a=this.getParentEditor().getSelection().getSelectedElement();a&&("input"==a.getName()&&"radio"==a.getAttribute("type"))&&(this.radioButton=a,this.setupContent(a))},onOk:function(){var a,b=this.radioButton,c=!b;c&&(a=this.getParentEditor(),b=a.document.createElement("input"),b.setAttribute("type","radio"));c&&a.insertElement(b);this.commitContent({element:b})},
-contents:[{id:"info",label:d.lang.forms.checkboxAndRadio.radioTitle,title:d.lang.forms.checkboxAndRadio.radioTitle,elements:[{id:"name",type:"text",label:d.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"value",type:"text",label:d.lang.forms.checkboxAndRadio.value,"default":"",
-accessKey:"V",setup:function(a){this.setValue(a.getAttribute("value")||"")},commit:function(a){a=a.element;this.getValue()?a.setAttribute("value",this.getValue()):a.removeAttribute("value")}},{id:"checked",type:"checkbox",label:d.lang.forms.checkboxAndRadio.selected,"default":"",accessKey:"S",value:"checked",setup:function(a){this.setValue(a.getAttribute("checked"))},commit:function(a){var b=a.element;if(CKEDITOR.env.ie){var c=b.getAttribute("checked"),e=!!this.getValue();c!=e&&(c=CKEDITOR.dom.element.createFromHtml('<input type="radio"'+
-(e?' checked="checked"':"")+"></input>",d.document),b.copyAttributes(c,{type:1,checked:1}),c.replace(b),d.getSelection().selectElement(c),a.element=c)}else this.getValue()?b.setAttribute("checked","checked"):b.removeAttribute("checked")}}]}]}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/select.js b/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/select.js
deleted file mode 100644
index a6c50e20..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/select.js
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("select",function(c){function h(a,b,e,d,c){a=f(a);d=d?d.createElement("OPTION"):document.createElement("OPTION");if(a&&d&&"option"==d.getName())CKEDITOR.env.ie?(isNaN(parseInt(c,10))?a.$.options.add(d.$):a.$.options.add(d.$,c),d.$.innerHTML=0<b.length?b:"",d.$.value=e):(null!==c&&c<a.getChildCount()?a.getChild(0>c?0:c).insertBeforeMe(d):a.append(d),d.setText(0<b.length?b:""),d.setValue(e));else return!1;return d}function m(a){for(var a=f(a),b=g(a),e=a.getChildren().count()-1;0<=
-e;e--)a.getChild(e).$.selected&&a.getChild(e).remove();i(a,b)}function n(a,b,e,d){a=f(a);if(0>b)return!1;a=a.getChild(b);a.setText(e);a.setValue(d);return a}function k(a){for(a=f(a);a.getChild(0)&&a.getChild(0).remove(););}function j(a,b,e){var a=f(a),d=g(a);if(0>d)return!1;b=d+b;b=0>b?0:b;b=b>=a.getChildCount()?a.getChildCount()-1:b;if(d==b)return!1;var d=a.getChild(d),c=d.getText(),o=d.getValue();d.remove();d=h(a,c,o,!e?null:e,b);i(a,b);return d}function g(a){return(a=f(a))?a.$.selectedIndex:-1}
-function i(a,b){a=f(a);if(0>b)return null;var e=a.getChildren().count();a.$.selectedIndex=b>=e?e-1:b;return a}function l(a){return(a=f(a))?a.getChildren():!1}function f(a){return a&&a.domId&&a.getInputElement().$?a.getInputElement():a&&a.$?a:!1}return{title:c.lang.forms.select.title,minWidth:CKEDITOR.env.ie?460:395,minHeight:CKEDITOR.env.ie?320:300,onShow:function(){delete this.selectBox;this.setupContent("clear");var a=this.getParentEditor().getSelection().getSelectedElement();if(a&&"select"==a.getName()){this.selectBox=
-a;this.setupContent(a.getName(),a);for(var a=l(a),b=0;b<a.count();b++)this.setupContent("option",a.getItem(b))}},onOk:function(){var a=this.getParentEditor(),b=this.selectBox,e=!b;e&&(b=a.document.createElement("select"));this.commitContent(b);if(e&&(a.insertElement(b),CKEDITOR.env.ie)){var d=a.getSelection(),c=d.createBookmarks();setTimeout(function(){d.selectBookmarks(c)},0)}},contents:[{id:"info",label:c.lang.forms.select.selectInfo,title:c.lang.forms.select.selectInfo,accessKey:"",elements:[{id:"txtName",
-type:"text",widths:["25%","75%"],labelLayout:"horizontal",label:c.lang.common.name,"default":"",accessKey:"N",style:"width:350px",setup:function(a,b){"clear"==a?this.setValue(this["default"]||""):"select"==a&&this.setValue(b.data("cke-saved-name")||b.getAttribute("name")||"")},commit:function(a){this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"txtValue",type:"text",widths:["25%","75%"],labelLayout:"horizontal",label:c.lang.forms.select.value,
-style:"width:350px","default":"",className:"cke_disabled",onLoad:function(){this.getInputElement().setAttribute("readOnly",!0)},setup:function(a,b){"clear"==a?this.setValue(""):"option"==a&&b.getAttribute("selected")&&this.setValue(b.$.value)}},{type:"hbox",widths:["175px","170px"],children:[{id:"txtSize",type:"text",labelLayout:"horizontal",label:c.lang.forms.select.size,"default":"",accessKey:"S",style:"width:175px",validate:function(){var a=CKEDITOR.dialog.validate.integer(c.lang.common.validateNumberFailed);
-return""===this.getValue()||a.apply(this)},setup:function(a,b){"select"==a&&this.setValue(b.getAttribute("size")||"");CKEDITOR.env.webkit&&this.getInputElement().setStyle("width","86px")},commit:function(a){this.getValue()?a.setAttribute("size",this.getValue()):a.removeAttribute("size")}},{type:"html",html:"<span>"+CKEDITOR.tools.htmlEncode(c.lang.forms.select.lines)+"</span>"}]},{type:"html",html:"<span>"+CKEDITOR.tools.htmlEncode(c.lang.forms.select.opAvail)+"</span>"},{type:"hbox",widths:["115px",
-"115px","100px"],children:[{type:"vbox",children:[{id:"txtOptName",type:"text",label:c.lang.forms.select.opText,style:"width:115px",setup:function(a){"clear"==a&&this.setValue("")}},{type:"select",id:"cmbName",label:"",title:"",size:5,style:"width:115px;height:75px",items:[],onChange:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbValue"),e=a.getContentElement("info","txtOptName"),a=a.getContentElement("info","txtOptValue"),d=g(this);i(b,d);e.setValue(this.getValue());a.setValue(b.getValue())},
-setup:function(a,b){"clear"==a?k(this):"option"==a&&h(this,b.getText(),b.getText(),this.getDialog().getParentEditor().document)},commit:function(a){var b=this.getDialog(),e=l(this),d=l(b.getContentElement("info","cmbValue")),c=b.getContentElement("info","txtValue").getValue();k(a);for(var f=0;f<e.count();f++){var g=h(a,e.getItem(f).getValue(),d.getItem(f).getValue(),b.getParentEditor().document);d.getItem(f).getValue()==c&&(g.setAttribute("selected","selected"),g.selected=!0)}}}]},{type:"vbox",children:[{id:"txtOptValue",
-type:"text",label:c.lang.forms.select.opValue,style:"width:115px",setup:function(a){"clear"==a&&this.setValue("")}},{type:"select",id:"cmbValue",label:"",size:5,style:"width:115px;height:75px",items:[],onChange:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbName"),e=a.getContentElement("info","txtOptName"),a=a.getContentElement("info","txtOptValue"),d=g(this);i(b,d);e.setValue(b.getValue());a.setValue(this.getValue())},setup:function(a,b){if("clear"==a)k(this);else if("option"==
-a){var e=b.getValue();h(this,e,e,this.getDialog().getParentEditor().document);"selected"==b.getAttribute("selected")&&this.getDialog().getContentElement("info","txtValue").setValue(e)}}}]},{type:"vbox",padding:5,children:[{type:"button",id:"btnAdd",style:"",label:c.lang.forms.select.btnAdd,title:c.lang.forms.select.btnAdd,style:"width:100%;",onClick:function(){var a=this.getDialog();a.getParentEditor();var b=a.getContentElement("info","txtOptName"),e=a.getContentElement("info","txtOptValue"),d=a.getContentElement("info",
-"cmbName"),c=a.getContentElement("info","cmbValue");h(d,b.getValue(),b.getValue(),a.getParentEditor().document);h(c,e.getValue(),e.getValue(),a.getParentEditor().document);b.setValue("");e.setValue("")}},{type:"button",id:"btnModify",label:c.lang.forms.select.btnModify,title:c.lang.forms.select.btnModify,style:"width:100%;",onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","txtOptName"),e=a.getContentElement("info","txtOptValue"),d=a.getContentElement("info","cmbName"),a=a.getContentElement("info",
-"cmbValue"),c=g(d);0<=c&&(n(d,c,b.getValue(),b.getValue()),n(a,c,e.getValue(),e.getValue()))}},{type:"button",id:"btnUp",style:"width:100%;",label:c.lang.forms.select.btnUp,title:c.lang.forms.select.btnUp,onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbName"),c=a.getContentElement("info","cmbValue");j(b,-1,a.getParentEditor().document);j(c,-1,a.getParentEditor().document)}},{type:"button",id:"btnDown",style:"width:100%;",label:c.lang.forms.select.btnDown,title:c.lang.forms.select.btnDown,
-onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbName"),c=a.getContentElement("info","cmbValue");j(b,1,a.getParentEditor().document);j(c,1,a.getParentEditor().document)}}]}]},{type:"hbox",widths:["40%","20%","40%"],children:[{type:"button",id:"btnSetValue",label:c.lang.forms.select.btnSetValue,title:c.lang.forms.select.btnSetValue,onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbValue");a.getContentElement("info","txtValue").setValue(b.getValue())}},
-{type:"button",id:"btnDelete",label:c.lang.forms.select.btnDelete,title:c.lang.forms.select.btnDelete,onClick:function(){var a=this.getDialog(),b=a.getContentElement("info","cmbName"),c=a.getContentElement("info","cmbValue"),d=a.getContentElement("info","txtOptName"),a=a.getContentElement("info","txtOptValue");m(b);m(c);d.setValue("");a.setValue("")}},{id:"chkMulti",type:"checkbox",label:c.lang.forms.select.chkMulti,"default":"",accessKey:"M",value:"checked",setup:function(a,b){"select"==a&&this.setValue(b.getAttribute("multiple"));
-CKEDITOR.env.webkit&&this.getElement().getParent().setStyle("vertical-align","middle")},commit:function(a){this.getValue()?a.setAttribute("multiple",this.getValue()):a.removeAttribute("multiple")}}]}]}]}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/textarea.js b/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/textarea.js
deleted file mode 100644
index de8b3187..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/textarea.js
+++ /dev/null
@@ -1,8 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("textarea",function(b){return{title:b.lang.forms.textarea.title,minWidth:350,minHeight:220,onShow:function(){delete this.textarea;var a=this.getParentEditor().getSelection().getSelectedElement();a&&"textarea"==a.getName()&&(this.textarea=a,this.setupContent(a))},onOk:function(){var a,b=this.textarea,c=!b;c&&(a=this.getParentEditor(),b=a.document.createElement("textarea"));this.commitContent(b);c&&a.insertElement(b)},contents:[{id:"info",label:b.lang.forms.textarea.title,title:b.lang.forms.textarea.title,
-elements:[{id:"_cke_saved_name",type:"text",label:b.lang.common.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{type:"hbox",widths:["50%","50%"],children:[{id:"cols",type:"text",label:b.lang.forms.textarea.cols,"default":"",accessKey:"C",style:"width:50px",validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed),
-setup:function(a){this.setValue(a.hasAttribute("cols")&&a.getAttribute("cols")||"")},commit:function(a){this.getValue()?a.setAttribute("cols",this.getValue()):a.removeAttribute("cols")}},{id:"rows",type:"text",label:b.lang.forms.textarea.rows,"default":"",accessKey:"R",style:"width:50px",validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed),setup:function(a){this.setValue(a.hasAttribute("rows")&&a.getAttribute("rows")||"")},commit:function(a){this.getValue()?a.setAttribute("rows",
-this.getValue()):a.removeAttribute("rows")}}]},{id:"value",type:"textarea",label:b.lang.forms.textfield.value,"default":"",setup:function(a){this.setValue(a.$.defaultValue)},commit:function(a){a.$.value=a.$.defaultValue=this.getValue()}}]}]}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/textfield.js b/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/textfield.js
deleted file mode 100644
index 46b006e2..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/dialogs/textfield.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("textfield",function(b){function e(a){var a=a.element,c=this.getValue();c?a.setAttribute(this.id,c):a.removeAttribute(this.id)}function f(a){this.setValue(a.hasAttribute(this.id)&&a.getAttribute(this.id)||"")}var g={email:1,password:1,search:1,tel:1,text:1,url:1};return{title:b.lang.forms.textfield.title,minWidth:350,minHeight:150,onShow:function(){delete this.textField;var a=this.getParentEditor().getSelection().getSelectedElement();if(a&&"input"==a.getName()&&(g[a.getAttribute("type")]||
-!a.getAttribute("type")))this.textField=a,this.setupContent(a)},onOk:function(){var a=this.getParentEditor(),c=this.textField,b=!c;b&&(c=a.document.createElement("input"),c.setAttribute("type","text"));c={element:c};b&&a.insertElement(c.element);this.commitContent(c);b||a.getSelection().selectElement(c.element)},onLoad:function(){this.foreach(function(a){if(a.getValue&&(a.setup||(a.setup=f),!a.commit))a.commit=e})},contents:[{id:"info",label:b.lang.forms.textfield.title,title:b.lang.forms.textfield.title,
-elements:[{type:"hbox",widths:["50%","50%"],children:[{id:"_cke_saved_name",type:"text",label:b.lang.forms.textfield.name,"default":"",accessKey:"N",setup:function(a){this.setValue(a.data("cke-saved-name")||a.getAttribute("name")||"")},commit:function(a){a=a.element;this.getValue()?a.data("cke-saved-name",this.getValue()):(a.data("cke-saved-name",!1),a.removeAttribute("name"))}},{id:"value",type:"text",label:b.lang.forms.textfield.value,"default":"",accessKey:"V",commit:function(a){if(CKEDITOR.env.ie&&
-!this.getValue()){var c=a.element,d=new CKEDITOR.dom.element("input",b.document);c.copyAttributes(d,{value:1});d.replace(c);a.element=d}else e.call(this,a)}}]},{type:"hbox",widths:["50%","50%"],children:[{id:"size",type:"text",label:b.lang.forms.textfield.charWidth,"default":"",accessKey:"C",style:"width:50px",validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed)},{id:"maxLength",type:"text",label:b.lang.forms.textfield.maxChars,"default":"",accessKey:"M",style:"width:50px",
-validate:CKEDITOR.dialog.validate.integer(b.lang.common.validateNumberFailed)}],onLoad:function(){CKEDITOR.env.ie7Compat&&this.getElement().setStyle("zoom","100%")}},{id:"type",type:"select",label:b.lang.forms.textfield.type,"default":"text",accessKey:"M",items:[[b.lang.forms.textfield.typeEmail,"email"],[b.lang.forms.textfield.typePass,"password"],[b.lang.forms.textfield.typeSearch,"search"],[b.lang.forms.textfield.typeTel,"tel"],[b.lang.forms.textfield.typeText,"text"],[b.lang.forms.textfield.typeUrl,
-"url"]],setup:function(a){this.setValue(a.getAttribute("type"))},commit:function(a){var c=a.element;if(CKEDITOR.env.ie){var d=c.getAttribute("type"),e=this.getValue();d!=e&&(d=CKEDITOR.dom.element.createFromHtml('<input type="'+e+'"></input>',b.document),c.copyAttributes(d,{type:1}),d.replace(c),a.element=d)}else c.setAttribute("type",this.getValue())}}]}]}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/images/hiddenfield.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/forms/images/hiddenfield.gif
deleted file mode 100644
index 953f643b..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/forms/images/hiddenfield.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/icons.png b/wqflask/wqflask/static/packages/ckeditor/plugins/icons.png
deleted file mode 100644
index 1ec992d9..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/icons.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/icons_hidpi.png b/wqflask/wqflask/static/packages/ckeditor/plugins/icons_hidpi.png
deleted file mode 100644
index 6e103c05..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/icons_hidpi.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/iframe/dialogs/iframe.js b/wqflask/wqflask/static/packages/ckeditor/plugins/iframe/dialogs/iframe.js
deleted file mode 100644
index dba1e930..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/iframe/dialogs/iframe.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-(function(){function c(b){var c=this instanceof CKEDITOR.ui.dialog.checkbox;b.hasAttribute(this.id)&&(b=b.getAttribute(this.id),c?this.setValue(e[this.id]["true"]==b.toLowerCase()):this.setValue(b))}function d(b){var c=""===this.getValue(),a=this instanceof CKEDITOR.ui.dialog.checkbox,d=this.getValue();c?b.removeAttribute(this.att||this.id):a?b.setAttribute(this.id,e[this.id][d]):b.setAttribute(this.att||this.id,d)}var e={scrolling:{"true":"yes","false":"no"},frameborder:{"true":"1","false":"0"}};
-CKEDITOR.dialog.add("iframe",function(b){var f=b.lang.iframe,a=b.lang.common,e=b.plugins.dialogadvtab;return{title:f.title,minWidth:350,minHeight:260,onShow:function(){this.fakeImage=this.iframeNode=null;var a=this.getSelectedElement();a&&(a.data("cke-real-element-type")&&"iframe"==a.data("cke-real-element-type"))&&(this.fakeImage=a,this.iframeNode=a=b.restoreRealElement(a),this.setupContent(a))},onOk:function(){var a;a=this.fakeImage?this.iframeNode:new CKEDITOR.dom.element("iframe");var c={},d=
-{};this.commitContent(a,c,d);a=b.createFakeElement(a,"cke_iframe","iframe",!0);a.setAttributes(d);a.setStyles(c);this.fakeImage?(a.replace(this.fakeImage),b.getSelection().selectElement(a)):b.insertElement(a)},contents:[{id:"info",label:a.generalTab,accessKey:"I",elements:[{type:"vbox",padding:0,children:[{id:"src",type:"text",label:a.url,required:!0,validate:CKEDITOR.dialog.validate.notEmpty(f.noUrl),setup:c,commit:d}]},{type:"hbox",children:[{id:"width",type:"text",requiredContent:"iframe[width]",
-style:"width:100%",labelLayout:"vertical",label:a.width,validate:CKEDITOR.dialog.validate.htmlLength(a.invalidHtmlLength.replace("%1",a.width)),setup:c,commit:d},{id:"height",type:"text",requiredContent:"iframe[height]",style:"width:100%",labelLayout:"vertical",label:a.height,validate:CKEDITOR.dialog.validate.htmlLength(a.invalidHtmlLength.replace("%1",a.height)),setup:c,commit:d},{id:"align",type:"select",requiredContent:"iframe[align]","default":"",items:[[a.notSet,""],[a.alignLeft,"left"],[a.alignRight,
-"right"],[a.alignTop,"top"],[a.alignMiddle,"middle"],[a.alignBottom,"bottom"]],style:"width:100%",labelLayout:"vertical",label:a.align,setup:function(a,b){c.apply(this,arguments);if(b){var d=b.getAttribute("align");this.setValue(d&&d.toLowerCase()||"")}},commit:function(a,b,c){d.apply(this,arguments);this.getValue()&&(c.align=this.getValue())}}]},{type:"hbox",widths:["50%","50%"],children:[{id:"scrolling",type:"checkbox",requiredContent:"iframe[scrolling]",label:f.scrolling,setup:c,commit:d},{id:"frameborder",
-type:"checkbox",requiredContent:"iframe[frameborder]",label:f.border,setup:c,commit:d}]},{type:"hbox",widths:["50%","50%"],children:[{id:"name",type:"text",requiredContent:"iframe[name]",label:a.name,setup:c,commit:d},{id:"title",type:"text",requiredContent:"iframe[title]",label:a.advisoryTitle,setup:c,commit:d}]},{id:"longdesc",type:"text",requiredContent:"iframe[longdesc]",label:a.longDescr,setup:c,commit:d}]},e&&e.createAdvancedTab(b,{id:1,classes:1,styles:1},"iframe")]}})})(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/iframe/images/placeholder.png b/wqflask/wqflask/static/packages/ckeditor/plugins/iframe/images/placeholder.png
deleted file mode 100644
index 4af09565..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/iframe/images/placeholder.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/image/dialogs/image.js b/wqflask/wqflask/static/packages/ckeditor/plugins/image/dialogs/image.js
deleted file mode 100644
index c84ecdc3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/image/dialogs/image.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-(function(){var r=function(c,j){function r(){var a=arguments,b=this.getContentElement("advanced","txtdlgGenStyle");b&&b.commit.apply(b,a);this.foreach(function(b){b.commit&&"txtdlgGenStyle"!=b.id&&b.commit.apply(b,a)})}function i(a){if(!s){s=1;var b=this.getDialog(),d=b.imageElement;if(d){this.commit(f,d);for(var a=[].concat(a),e=a.length,c,g=0;g<e;g++)(c=b.getContentElement.apply(b,a[g].split(":")))&&c.setup(f,d)}s=0}}var f=1,k=/^\s*(\d+)((px)|\%)?\s*$/i,v=/(^\s*(\d+)((px)|\%)?\s*$)|^$/i,o=/^\d+px$/,
-w=function(){var a=this.getValue(),b=this.getDialog(),d=a.match(k);d&&("%"==d[2]&&l(b,!1),a=d[1]);b.lockRatio&&(d=b.originalElement,"true"==d.getCustomData("isReady")&&("txtHeight"==this.id?(a&&"0"!=a&&(a=Math.round(d.$.width*(a/d.$.height))),isNaN(a)||b.setValueOf("info","txtWidth",a)):(a&&"0"!=a&&(a=Math.round(d.$.height*(a/d.$.width))),isNaN(a)||b.setValueOf("info","txtHeight",a))));g(b)},g=function(a){if(!a.originalElement||!a.preview)return 1;a.commitContent(4,a.preview);return 0},s,l=function(a,
-b){if(!a.getContentElement("info","ratioLock"))return null;var d=a.originalElement;if(!d)return null;if("check"==b){if(!a.userlockRatio&&"true"==d.getCustomData("isReady")){var e=a.getValueOf("info","txtWidth"),c=a.getValueOf("info","txtHeight"),d=1E3*d.$.width/d.$.height,f=1E3*e/c;a.lockRatio=!1;!e&&!c?a.lockRatio=!0:!isNaN(d)&&!isNaN(f)&&Math.round(d)==Math.round(f)&&(a.lockRatio=!0)}}else void 0!=b?a.lockRatio=b:(a.userlockRatio=1,a.lockRatio=!a.lockRatio);e=CKEDITOR.document.getById(p);a.lockRatio?
-e.removeClass("cke_btn_unlocked"):e.addClass("cke_btn_unlocked");e.setAttribute("aria-checked",a.lockRatio);CKEDITOR.env.hc&&e.getChild(0).setHtml(a.lockRatio?CKEDITOR.env.ie?"â– ":"â–£":CKEDITOR.env.ie?"â–¡":"â–¢");return a.lockRatio},x=function(a){var b=a.originalElement;if("true"==b.getCustomData("isReady")){var d=a.getContentElement("info","txtWidth"),e=a.getContentElement("info","txtHeight");d&&d.setValue(b.$.width);e&&e.setValue(b.$.height)}g(a)},y=function(a,b){function d(a,b){var d=a.match(k);return d?
-("%"==d[2]&&(d[1]+="%",l(e,!1)),d[1]):b}if(a==f){var e=this.getDialog(),c="",g="txtWidth"==this.id?"width":"height",h=b.getAttribute(g);h&&(c=d(h,c));c=d(b.getStyle(g),c);this.setValue(c)}},t,q=function(){var a=this.originalElement,b=CKEDITOR.document.getById(m);a.setCustomData("isReady","true");a.removeListener("load",q);a.removeListener("error",h);a.removeListener("abort",h);b&&b.setStyle("display","none");this.dontResetSize||x(this);this.firstLoad&&CKEDITOR.tools.setTimeout(function(){l(this,"check")},
-0,this);this.dontResetSize=this.firstLoad=!1},h=function(){var a=this.originalElement,b=CKEDITOR.document.getById(m);a.removeListener("load",q);a.removeListener("error",h);a.removeListener("abort",h);a=CKEDITOR.getUrl(CKEDITOR.plugins.get("image").path+"images/noimage.png");this.preview&&this.preview.setAttribute("src",a);b&&b.setStyle("display","none");l(this,!1)},n=function(a){return CKEDITOR.tools.getNextId()+"_"+a},p=n("btnLockSizes"),u=n("btnResetSize"),m=n("ImagePreviewLoader"),A=n("previewLink"),
-z=n("previewImage");return{title:c.lang.image["image"==j?"title":"titleButton"],minWidth:420,minHeight:360,onShow:function(){this.linkEditMode=this.imageEditMode=this.linkElement=this.imageElement=!1;this.lockRatio=!0;this.userlockRatio=0;this.dontResetSize=!1;this.firstLoad=!0;this.addLink=!1;var a=this.getParentEditor(),b=a.getSelection(),d=(b=b&&b.getSelectedElement())&&a.elementPath(b).contains("a",1),c=CKEDITOR.document.getById(m);c&&c.setStyle("display","none");t=new CKEDITOR.dom.element("img",
-a.document);this.preview=CKEDITOR.document.getById(z);this.originalElement=a.document.createElement("img");this.originalElement.setAttribute("alt","");this.originalElement.setCustomData("isReady","false");if(d){this.linkElement=d;this.linkEditMode=!0;c=d.getChildren();if(1==c.count()){var g=c.getItem(0).getName();if("img"==g||"input"==g)this.imageElement=c.getItem(0),"img"==this.imageElement.getName()?this.imageEditMode="img":"input"==this.imageElement.getName()&&(this.imageEditMode="input")}"image"==
-j&&this.setupContent(2,d)}if(this.customImageElement)this.imageEditMode="img",this.imageElement=this.customImageElement,delete this.customImageElement;else if(b&&"img"==b.getName()&&!b.data("cke-realelement")||b&&"input"==b.getName()&&"image"==b.getAttribute("type"))this.imageEditMode=b.getName(),this.imageElement=b;this.imageEditMode?(this.cleanImageElement=this.imageElement,this.imageElement=this.cleanImageElement.clone(!0,!0),this.setupContent(f,this.imageElement)):this.imageElement=a.document.createElement("img");
-l(this,!0);CKEDITOR.tools.trim(this.getValueOf("info","txtUrl"))||(this.preview.removeAttribute("src"),this.preview.setStyle("display","none"))},onOk:function(){if(this.imageEditMode){var a=this.imageEditMode;"image"==j&&"input"==a&&confirm(c.lang.image.button2Img)?(this.imageElement=c.document.createElement("img"),this.imageElement.setAttribute("alt",""),c.insertElement(this.imageElement)):"image"!=j&&"img"==a&&confirm(c.lang.image.img2Button)?(this.imageElement=c.document.createElement("input"),
-this.imageElement.setAttributes({type:"image",alt:""}),c.insertElement(this.imageElement)):(this.imageElement=this.cleanImageElement,delete this.cleanImageElement)}else"image"==j?this.imageElement=c.document.createElement("img"):(this.imageElement=c.document.createElement("input"),this.imageElement.setAttribute("type","image")),this.imageElement.setAttribute("alt","");this.linkEditMode||(this.linkElement=c.document.createElement("a"));this.commitContent(f,this.imageElement);this.commitContent(2,this.linkElement);
-this.imageElement.getAttribute("style")||this.imageElement.removeAttribute("style");this.imageEditMode?!this.linkEditMode&&this.addLink?(c.insertElement(this.linkElement),this.imageElement.appendTo(this.linkElement)):this.linkEditMode&&!this.addLink&&(c.getSelection().selectElement(this.linkElement),c.insertElement(this.imageElement)):this.addLink?this.linkEditMode?c.insertElement(this.imageElement):(c.insertElement(this.linkElement),this.linkElement.append(this.imageElement,!1)):c.insertElement(this.imageElement)},
-onLoad:function(){"image"!=j&&this.hidePage("Link");var a=this._.element.getDocument();this.getContentElement("info","ratioLock")&&(this.addFocusable(a.getById(u),5),this.addFocusable(a.getById(p),5));this.commitContent=r},onHide:function(){this.preview&&this.commitContent(8,this.preview);this.originalElement&&(this.originalElement.removeListener("load",q),this.originalElement.removeListener("error",h),this.originalElement.removeListener("abort",h),this.originalElement.remove(),this.originalElement=
-!1);delete this.imageElement},contents:[{id:"info",label:c.lang.image.infoTab,accessKey:"I",elements:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["280px","110px"],align:"right",children:[{id:"txtUrl",type:"text",label:c.lang.common.url,required:!0,onChange:function(){var a=this.getDialog(),b=this.getValue();if(0<b.length){var a=this.getDialog(),d=a.originalElement;a.preview&&a.preview.removeStyle("display");d.setCustomData("isReady","false");var c=CKEDITOR.document.getById(m);c&&c.setStyle("display",
-"");d.on("load",q,a);d.on("error",h,a);d.on("abort",h,a);d.setAttribute("src",b);a.preview&&(t.setAttribute("src",b),a.preview.setAttribute("src",t.$.src),g(a))}else a.preview&&(a.preview.removeAttribute("src"),a.preview.setStyle("display","none"))},setup:function(a,b){if(a==f){var d=b.data("cke-saved-src")||b.getAttribute("src");this.getDialog().dontResetSize=!0;this.setValue(d);this.setInitValue()}},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())?(b.data("cke-saved-src",this.getValue()),
-b.setAttribute("src",this.getValue())):8==a&&(b.setAttribute("src",""),b.removeAttribute("src"))},validate:CKEDITOR.dialog.validate.notEmpty(c.lang.image.urlMissing)},{type:"button",id:"browse",style:"display:inline-block;margin-top:14px;",align:"center",label:c.lang.common.browseServer,hidden:!0,filebrowser:"info:txtUrl"}]}]},{id:"txtAlt",type:"text",label:c.lang.image.alt,accessKey:"T","default":"",onChange:function(){g(this.getDialog())},setup:function(a,b){a==f&&this.setValue(b.getAttribute("alt"))},
-commit:function(a,b){a==f?(this.getValue()||this.isChanged())&&b.setAttribute("alt",this.getValue()):4==a?b.setAttribute("alt",this.getValue()):8==a&&b.removeAttribute("alt")}},{type:"hbox",children:[{id:"basic",type:"vbox",children:[{type:"hbox",requiredContent:"img{width,height}",widths:["50%","50%"],children:[{type:"vbox",padding:1,children:[{type:"text",width:"45px",id:"txtWidth",label:c.lang.common.width,onKeyUp:w,onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:function(){var a=
-this.getValue().match(v);(a=!!(a&&0!==parseInt(a[1],10)))||alert(c.lang.common.invalidWidth);return a},setup:y,commit:function(a,b,d){var e=this.getValue();a==f?(e&&c.activeFilter.check("img{width,height}")?b.setStyle("width",CKEDITOR.tools.cssLength(e)):b.removeStyle("width"),!d&&b.removeAttribute("width")):4==a?e.match(k)?b.setStyle("width",CKEDITOR.tools.cssLength(e)):(a=this.getDialog().originalElement,"true"==a.getCustomData("isReady")&&b.setStyle("width",a.$.width+"px")):8==a&&(b.removeAttribute("width"),
-b.removeStyle("width"))}},{type:"text",id:"txtHeight",width:"45px",label:c.lang.common.height,onKeyUp:w,onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:function(){var a=this.getValue().match(v);(a=!!(a&&0!==parseInt(a[1],10)))||alert(c.lang.common.invalidHeight);return a},setup:y,commit:function(a,b,d){var e=this.getValue();a==f?(e&&c.activeFilter.check("img{width,height}")?b.setStyle("height",CKEDITOR.tools.cssLength(e)):b.removeStyle("height"),!d&&b.removeAttribute("height")):
-4==a?e.match(k)?b.setStyle("height",CKEDITOR.tools.cssLength(e)):(a=this.getDialog().originalElement,"true"==a.getCustomData("isReady")&&b.setStyle("height",a.$.height+"px")):8==a&&(b.removeAttribute("height"),b.removeStyle("height"))}}]},{id:"ratioLock",type:"html",style:"margin-top:30px;width:40px;height:40px;",onLoad:function(){var a=CKEDITOR.document.getById(u),b=CKEDITOR.document.getById(p);a&&(a.on("click",function(a){x(this);a.data&&a.data.preventDefault()},this.getDialog()),a.on("mouseover",
-function(){this.addClass("cke_btn_over")},a),a.on("mouseout",function(){this.removeClass("cke_btn_over")},a));b&&(b.on("click",function(a){l(this);var b=this.originalElement,c=this.getValueOf("info","txtWidth");if(b.getCustomData("isReady")=="true"&&c){b=b.$.height/b.$.width*c;if(!isNaN(b)){this.setValueOf("info","txtHeight",Math.round(b));g(this)}}a.data&&a.data.preventDefault()},this.getDialog()),b.on("mouseover",function(){this.addClass("cke_btn_over")},b),b.on("mouseout",function(){this.removeClass("cke_btn_over")},
-b))},html:'<div><a href="javascript:void(0)" tabindex="-1" title="'+c.lang.image.lockRatio+'" class="cke_btn_locked" id="'+p+'" role="checkbox"><span class="cke_icon"></span><span class="cke_label">'+c.lang.image.lockRatio+'</span></a><a href="javascript:void(0)" tabindex="-1" title="'+c.lang.image.resetSize+'" class="cke_btn_reset" id="'+u+'" role="button"><span class="cke_label">'+c.lang.image.resetSize+"</span></a></div>"}]},{type:"vbox",padding:1,children:[{type:"text",id:"txtBorder",requiredContent:"img{border-width}",
-width:"60px",label:c.lang.image.border,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateBorder),setup:function(a,b){if(a==f){var d;d=(d=(d=b.getStyle("border-width"))&&d.match(/^(\d+px)(?: \1 \1 \1)?$/))&&parseInt(d[1],10);isNaN(parseInt(d,10))&&(d=b.getAttribute("border"));this.setValue(d)}},commit:function(a,b,d){var c=parseInt(this.getValue(),10);a==f||4==a?(isNaN(c)?!c&&
-this.isChanged()&&b.removeStyle("border"):(b.setStyle("border-width",CKEDITOR.tools.cssLength(c)),b.setStyle("border-style","solid")),!d&&a==f&&b.removeAttribute("border")):8==a&&(b.removeAttribute("border"),b.removeStyle("border-width"),b.removeStyle("border-style"),b.removeStyle("border-color"))}},{type:"text",id:"txtHSpace",requiredContent:"img{margin-left,margin-right}",width:"60px",label:c.lang.image.hSpace,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,
-"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateHSpace),setup:function(a,b){if(a==f){var d,c;d=b.getStyle("margin-left");c=b.getStyle("margin-right");d=d&&d.match(o);c=c&&c.match(o);d=parseInt(d,10);c=parseInt(c,10);d=d==c&&d;isNaN(parseInt(d,10))&&(d=b.getAttribute("hspace"));this.setValue(d)}},commit:function(a,b,d){var c=parseInt(this.getValue(),10);a==f||4==a?(isNaN(c)?!c&&this.isChanged()&&(b.removeStyle("margin-left"),b.removeStyle("margin-right")):
-(b.setStyle("margin-left",CKEDITOR.tools.cssLength(c)),b.setStyle("margin-right",CKEDITOR.tools.cssLength(c))),!d&&a==f&&b.removeAttribute("hspace")):8==a&&(b.removeAttribute("hspace"),b.removeStyle("margin-left"),b.removeStyle("margin-right"))}},{type:"text",id:"txtVSpace",requiredContent:"img{margin-top,margin-bottom}",width:"60px",label:c.lang.image.vSpace,"default":"",onKeyUp:function(){g(this.getDialog())},onChange:function(){i.call(this,"advanced:txtdlgGenStyle")},validate:CKEDITOR.dialog.validate.integer(c.lang.image.validateVSpace),
-setup:function(a,b){if(a==f){var c,e;c=b.getStyle("margin-top");e=b.getStyle("margin-bottom");c=c&&c.match(o);e=e&&e.match(o);c=parseInt(c,10);e=parseInt(e,10);c=c==e&&c;isNaN(parseInt(c,10))&&(c=b.getAttribute("vspace"));this.setValue(c)}},commit:function(a,b,c){var e=parseInt(this.getValue(),10);a==f||4==a?(isNaN(e)?!e&&this.isChanged()&&(b.removeStyle("margin-top"),b.removeStyle("margin-bottom")):(b.setStyle("margin-top",CKEDITOR.tools.cssLength(e)),b.setStyle("margin-bottom",CKEDITOR.tools.cssLength(e))),
-!c&&a==f&&b.removeAttribute("vspace")):8==a&&(b.removeAttribute("vspace"),b.removeStyle("margin-top"),b.removeStyle("margin-bottom"))}},{id:"cmbAlign",requiredContent:"img{float}",type:"select",widths:["35%","65%"],style:"width:90px",label:c.lang.common.align,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.alignLeft,"left"],[c.lang.common.alignRight,"right"]],onChange:function(){g(this.getDialog());i.call(this,"advanced:txtdlgGenStyle")},setup:function(a,b){if(a==f){var c=b.getStyle("float");
-switch(c){case "inherit":case "none":c=""}!c&&(c=(b.getAttribute("align")||"").toLowerCase());this.setValue(c)}},commit:function(a,b,c){var e=this.getValue();if(a==f||4==a){if(e?b.setStyle("float",e):b.removeStyle("float"),!c&&a==f)switch(e=(b.getAttribute("align")||"").toLowerCase(),e){case "left":case "right":b.removeAttribute("align")}}else 8==a&&b.removeStyle("float")}}]}]},{type:"vbox",height:"250px",children:[{type:"html",id:"htmlPreview",style:"width:95%;",html:"<div>"+CKEDITOR.tools.htmlEncode(c.lang.common.preview)+
-'<br><div id="'+m+'" class="ImagePreviewLoader" style="display:none"><div class="loading">&nbsp;</div></div><div class="ImagePreviewBox"><table><tr><td><a href="javascript:void(0)" target="_blank" onclick="return false;" id="'+A+'"><img id="'+z+'" alt="" /></a>'+(c.config.image_previewText||"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas feugiat consequat diam. Maecenas metus. Vivamus diam purus, cursus a, commodo non, facilisis vitae, nulla. Aenean dictum lacinia tortor. Nunc iaculis, nibh non iaculis aliquam, orci felis euismod neque, sed ornare massa mauris sed velit. Nulla pretium mi et risus. Fusce mi pede, tempor id, cursus ac, ullamcorper nec, enim. Sed tortor. Curabitur molestie. Duis velit augue, condimentum at, ultrices a, luctus ut, orci. Donec pellentesque egestas eros. Integer cursus, augue in cursus faucibus, eros pede bibendum sem, in tempus tellus justo quis ligula. Etiam eget tortor. Vestibulum rutrum, est ut placerat elementum, lectus nisl aliquam velit, tempor aliquam eros nunc nonummy metus. In eros metus, gravida a, gravida sed, lobortis id, turpis. Ut ultrices, ipsum at venenatis fringilla, sem nulla lacinia tellus, eget aliquet turpis mauris non enim. Nam turpis. Suspendisse lacinia. Curabitur ac tortor ut ipsum egestas elementum. Nunc imperdiet gravida mauris.")+
-"</td></tr></table></div></div>"}]}]}]},{id:"Link",requiredContent:"a[href]",label:c.lang.image.linkTab,padding:0,elements:[{id:"txtUrl",type:"text",label:c.lang.common.url,style:"width: 100%","default":"",setup:function(a,b){if(2==a){var c=b.data("cke-saved-href");c||(c=b.getAttribute("href"));this.setValue(c)}},commit:function(a,b){if(2==a&&(this.getValue()||this.isChanged())){var d=this.getValue();b.data("cke-saved-href",d);b.setAttribute("href",d);if(this.getValue()||!c.config.image_removeLinkByEmptyURL)this.getDialog().addLink=
-!0}}},{type:"button",id:"browse",filebrowser:{action:"Browse",target:"Link:txtUrl",url:c.config.filebrowserImageBrowseLinkUrl},style:"float:right",hidden:!0,label:c.lang.common.browseServer},{id:"cmbTarget",type:"select",requiredContent:"a[target]",label:c.lang.common.target,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.targetNew,"_blank"],[c.lang.common.targetTop,"_top"],[c.lang.common.targetSelf,"_self"],[c.lang.common.targetParent,"_parent"]],setup:function(a,b){2==a&&this.setValue(b.getAttribute("target")||
-"")},commit:function(a,b){2==a&&(this.getValue()||this.isChanged())&&b.setAttribute("target",this.getValue())}}]},{id:"Upload",hidden:!0,filebrowser:"uploadButton",label:c.lang.image.upload,elements:[{type:"file",id:"upload",label:c.lang.image.btnUpload,style:"height:40px",size:38},{type:"fileButton",id:"uploadButton",filebrowser:"info:txtUrl",label:c.lang.image.btnUpload,"for":["Upload","upload"]}]},{id:"advanced",label:c.lang.common.advancedTab,elements:[{type:"hbox",widths:["50%","25%","25%"],
-children:[{type:"text",id:"linkId",requiredContent:"img[id]",label:c.lang.common.id,setup:function(a,b){a==f&&this.setValue(b.getAttribute("id"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("id",this.getValue())}},{id:"cmbLangDir",type:"select",requiredContent:"img[dir]",style:"width : 100px;",label:c.lang.common.langDir,"default":"",items:[[c.lang.common.notSet,""],[c.lang.common.langDirLtr,"ltr"],[c.lang.common.langDirRtl,"rtl"]],setup:function(a,b){a==f&&this.setValue(b.getAttribute("dir"))},
-commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("dir",this.getValue())}},{type:"text",id:"txtLangCode",requiredContent:"img[lang]",label:c.lang.common.langCode,"default":"",setup:function(a,b){a==f&&this.setValue(b.getAttribute("lang"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("lang",this.getValue())}}]},{type:"text",id:"txtGenLongDescr",requiredContent:"img[longdesc]",label:c.lang.common.longDescr,setup:function(a,b){a==f&&this.setValue(b.getAttribute("longDesc"))},
-commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("longDesc",this.getValue())}},{type:"hbox",widths:["50%","50%"],children:[{type:"text",id:"txtGenClass",requiredContent:"img(cke-xyz)",label:c.lang.common.cssClass,"default":"",setup:function(a,b){a==f&&this.setValue(b.getAttribute("class"))},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("class",this.getValue())}},{type:"text",id:"txtGenTitle",requiredContent:"img[title]",label:c.lang.common.advisoryTitle,
-"default":"",onChange:function(){g(this.getDialog())},setup:function(a,b){a==f&&this.setValue(b.getAttribute("title"))},commit:function(a,b){a==f?(this.getValue()||this.isChanged())&&b.setAttribute("title",this.getValue()):4==a?b.setAttribute("title",this.getValue()):8==a&&b.removeAttribute("title")}}]},{type:"text",id:"txtdlgGenStyle",requiredContent:"img{cke-xyz}",label:c.lang.common.cssStyle,validate:CKEDITOR.dialog.validate.inlineStyle(c.lang.common.invalidInlineStyle),"default":"",setup:function(a,
-b){if(a==f){var c=b.getAttribute("style");!c&&b.$.style.cssText&&(c=b.$.style.cssText);this.setValue(c);var e=b.$.style.height,c=b.$.style.width,e=(e?e:"").match(k),c=(c?c:"").match(k);this.attributesInStyle={height:!!e,width:!!c}}},onChange:function(){i.call(this,"info:cmbFloat info:cmbAlign info:txtVSpace info:txtHSpace info:txtBorder info:txtWidth info:txtHeight".split(" "));g(this)},commit:function(a,b){a==f&&(this.getValue()||this.isChanged())&&b.setAttribute("style",this.getValue())}}]}]}};
-CKEDITOR.dialog.add("image",function(c){return r(c,"image")});CKEDITOR.dialog.add("imagebutton",function(c){return r(c,"imagebutton")})})(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/image/images/noimage.png b/wqflask/wqflask/static/packages/ckeditor/plugins/image/images/noimage.png
deleted file mode 100644
index 15981130..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/image/images/noimage.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/link/dialogs/anchor.js b/wqflask/wqflask/static/packages/ckeditor/plugins/link/dialogs/anchor.js
deleted file mode 100644
index e0192b27..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/link/dialogs/anchor.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("anchor",function(c){function d(a,b){return a.createFakeElement(a.document.createElement("a",{attributes:b}),"cke_anchor","anchor")}return{title:c.lang.link.anchor.title,minWidth:300,minHeight:60,onOk:function(){var a=CKEDITOR.tools.trim(this.getValueOf("info","txtName")),a={id:a,name:a,"data-cke-saved-name":a};if(this._.selectedElement)this._.selectedElement.data("cke-realelement")?(a=d(c,a),a.replace(this._.selectedElement),CKEDITOR.env.ie&&c.getSelection().selectElement(a)):
-this._.selectedElement.setAttributes(a);else{var b=c.getSelection(),b=b&&b.getRanges()[0];b.collapsed?(a=d(c,a),b.insertNode(a)):(CKEDITOR.env.ie&&9>CKEDITOR.env.version&&(a["class"]="cke_anchor"),a=new CKEDITOR.style({element:"a",attributes:a}),a.type=CKEDITOR.STYLE_INLINE,c.applyStyle(a))}},onHide:function(){delete this._.selectedElement},onShow:function(){var a=c.getSelection(),b=a.getSelectedElement(),d=b&&b.data("cke-realelement"),e=d?CKEDITOR.plugins.link.tryRestoreFakeAnchor(c,b):CKEDITOR.plugins.link.getSelectedLink(c);
-e&&(this._.selectedElement=e,this.setValueOf("info","txtName",e.data("cke-saved-name")||""),!d&&a.selectElement(e),b&&(this._.selectedElement=b));this.getContentElement("info","txtName").focus()},contents:[{id:"info",label:c.lang.link.anchor.title,accessKey:"I",elements:[{type:"text",id:"txtName",label:c.lang.link.anchor.name,required:!0,validate:function(){return!this.getValue()?(alert(c.lang.link.anchor.errorName),!1):!0}}]}]}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/link/dialogs/link.js b/wqflask/wqflask/static/packages/ckeditor/plugins/link/dialogs/link.js
deleted file mode 100644
index 312fb7bc..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/link/dialogs/link.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-(function(){CKEDITOR.dialog.add("link",function(g){var l=CKEDITOR.plugins.link,m=function(){var a=this.getDialog(),b=a.getContentElement("target","popupFeatures"),a=a.getContentElement("target","linkTargetName"),k=this.getValue();if(b&&a)switch(b=b.getElement(),b.hide(),a.setValue(""),k){case "frame":a.setLabel(g.lang.link.targetFrameName);a.getElement().show();break;case "popup":b.show();a.setLabel(g.lang.link.targetPopupName);a.getElement().show();break;default:a.setValue(k),a.getElement().hide()}},
-f=function(a){a.target&&this.setValue(a.target[this.id]||"")},h=function(a){a.advanced&&this.setValue(a.advanced[this.id]||"")},i=function(a){a.target||(a.target={});a.target[this.id]=this.getValue()||""},j=function(a){a.advanced||(a.advanced={});a.advanced[this.id]=this.getValue()||""},c=g.lang.common,b=g.lang.link,d;return{title:b.title,minWidth:350,minHeight:230,contents:[{id:"info",label:b.info,title:b.info,elements:[{id:"linkType",type:"select",label:b.type,"default":"url",items:[[b.toUrl,"url"],
-[b.toAnchor,"anchor"],[b.toEmail,"email"]],onChange:function(){var a=this.getDialog(),b=["urlOptions","anchorOptions","emailOptions"],k=this.getValue(),e=a.definition.getContents("upload"),e=e&&e.hidden;"url"==k?(g.config.linkShowTargetTab&&a.showPage("target"),e||a.showPage("upload")):(a.hidePage("target"),e||a.hidePage("upload"));for(e=0;e<b.length;e++){var c=a.getContentElement("info",b[e]);c&&(c=c.getElement().getParent().getParent(),b[e]==k+"Options"?c.show():c.hide())}a.layout()},setup:function(a){this.setValue(a.type||
-"url")},commit:function(a){a.type=this.getValue()}},{type:"vbox",id:"urlOptions",children:[{type:"hbox",widths:["25%","75%"],children:[{id:"protocol",type:"select",label:c.protocol,"default":"http://",items:[["http://‎","http://"],["https://‎","https://"],["ftp://‎","ftp://"],["news://‎","news://"],[b.other,""]],setup:function(a){a.url&&this.setValue(a.url.protocol||"")},commit:function(a){a.url||(a.url={});a.url.protocol=this.getValue()}},{type:"text",id:"url",label:c.url,required:!0,onLoad:function(){this.allowOnChange=
-!0},onKeyUp:function(){this.allowOnChange=!1;var a=this.getDialog().getContentElement("info","protocol"),b=this.getValue(),k=/^((javascript:)|[#\/\.\?])/i,c=/^(http|https|ftp|news):\/\/(?=.)/i.exec(b);c?(this.setValue(b.substr(c[0].length)),a.setValue(c[0].toLowerCase())):k.test(b)&&a.setValue("");this.allowOnChange=!0},onChange:function(){if(this.allowOnChange)this.onKeyUp()},validate:function(){var a=this.getDialog();return a.getContentElement("info","linkType")&&"url"!=a.getValueOf("info","linkType")?
-!0:!g.config.linkJavaScriptLinksAllowed&&/javascript\:/.test(this.getValue())?(alert(c.invalidValue),!1):this.getDialog().fakeObj?!0:CKEDITOR.dialog.validate.notEmpty(b.noUrl).apply(this)},setup:function(a){this.allowOnChange=!1;a.url&&this.setValue(a.url.url);this.allowOnChange=!0},commit:function(a){this.onChange();a.url||(a.url={});a.url.url=this.getValue();this.allowOnChange=!1}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().show()}},{type:"button",
-id:"browse",hidden:"true",filebrowser:"info:url",label:c.browseServer}]},{type:"vbox",id:"anchorOptions",width:260,align:"center",padding:0,children:[{type:"fieldset",id:"selectAnchorText",label:b.selectAnchor,setup:function(){d=l.getEditorAnchors(g);this.getElement()[d&&d.length?"show":"hide"]()},children:[{type:"hbox",id:"selectAnchor",children:[{type:"select",id:"anchorName","default":"",label:b.anchorName,style:"width: 100%;",items:[[""]],setup:function(a){this.clear();this.add("");if(d)for(var b=
-0;b<d.length;b++)d[b].name&&this.add(d[b].name);a.anchor&&this.setValue(a.anchor.name);(a=this.getDialog().getContentElement("info","linkType"))&&"email"==a.getValue()&&this.focus()},commit:function(a){a.anchor||(a.anchor={});a.anchor.name=this.getValue()}},{type:"select",id:"anchorId","default":"",label:b.anchorId,style:"width: 100%;",items:[[""]],setup:function(a){this.clear();this.add("");if(d)for(var b=0;b<d.length;b++)d[b].id&&this.add(d[b].id);a.anchor&&this.setValue(a.anchor.id)},commit:function(a){a.anchor||
-(a.anchor={});a.anchor.id=this.getValue()}}],setup:function(){this.getElement()[d&&d.length?"show":"hide"]()}}]},{type:"html",id:"noAnchors",style:"text-align: center;",html:'<div role="note" tabIndex="-1">'+CKEDITOR.tools.htmlEncode(b.noAnchors)+"</div>",focus:!0,setup:function(){this.getElement()[d&&d.length?"hide":"show"]()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}},{type:"vbox",id:"emailOptions",padding:1,children:[{type:"text",id:"emailAddress",
-label:b.emailAddress,required:!0,validate:function(){var a=this.getDialog();return!a.getContentElement("info","linkType")||"email"!=a.getValueOf("info","linkType")?!0:CKEDITOR.dialog.validate.notEmpty(b.noEmail).apply(this)},setup:function(a){a.email&&this.setValue(a.email.address);(a=this.getDialog().getContentElement("info","linkType"))&&"email"==a.getValue()&&this.select()},commit:function(a){a.email||(a.email={});a.email.address=this.getValue()}},{type:"text",id:"emailSubject",label:b.emailSubject,
-setup:function(a){a.email&&this.setValue(a.email.subject)},commit:function(a){a.email||(a.email={});a.email.subject=this.getValue()}},{type:"textarea",id:"emailBody",label:b.emailBody,rows:3,"default":"",setup:function(a){a.email&&this.setValue(a.email.body)},commit:function(a){a.email||(a.email={});a.email.body=this.getValue()}}],setup:function(){this.getDialog().getContentElement("info","linkType")||this.getElement().hide()}}]},{id:"target",requiredContent:"a[target]",label:b.target,title:b.target,
-elements:[{type:"hbox",widths:["50%","50%"],children:[{type:"select",id:"linkTargetType",label:c.target,"default":"notSet",style:"width : 100%;",items:[[c.notSet,"notSet"],[b.targetFrame,"frame"],[b.targetPopup,"popup"],[c.targetNew,"_blank"],[c.targetTop,"_top"],[c.targetSelf,"_self"],[c.targetParent,"_parent"]],onChange:m,setup:function(a){a.target&&this.setValue(a.target.type||"notSet");m.call(this)},commit:function(a){a.target||(a.target={});a.target.type=this.getValue()}},{type:"text",id:"linkTargetName",
-label:b.targetFrameName,"default":"",setup:function(a){a.target&&this.setValue(a.target.name)},commit:function(a){a.target||(a.target={});a.target.name=this.getValue().replace(/\W/gi,"")}}]},{type:"vbox",width:"100%",align:"center",padding:2,id:"popupFeatures",children:[{type:"fieldset",label:b.popupFeatures,children:[{type:"hbox",children:[{type:"checkbox",id:"resizable",label:b.popupResizable,setup:f,commit:i},{type:"checkbox",id:"status",label:b.popupStatusBar,setup:f,commit:i}]},{type:"hbox",
-children:[{type:"checkbox",id:"location",label:b.popupLocationBar,setup:f,commit:i},{type:"checkbox",id:"toolbar",label:b.popupToolbar,setup:f,commit:i}]},{type:"hbox",children:[{type:"checkbox",id:"menubar",label:b.popupMenuBar,setup:f,commit:i},{type:"checkbox",id:"fullscreen",label:b.popupFullScreen,setup:f,commit:i}]},{type:"hbox",children:[{type:"checkbox",id:"scrollbars",label:b.popupScrollBars,setup:f,commit:i},{type:"checkbox",id:"dependent",label:b.popupDependent,setup:f,commit:i}]},{type:"hbox",
-children:[{type:"text",widths:["50%","50%"],labelLayout:"horizontal",label:c.width,id:"width",setup:f,commit:i},{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:b.popupLeft,id:"left",setup:f,commit:i}]},{type:"hbox",children:[{type:"text",labelLayout:"horizontal",widths:["50%","50%"],label:c.height,id:"height",setup:f,commit:i},{type:"text",labelLayout:"horizontal",label:b.popupTop,widths:["50%","50%"],id:"top",setup:f,commit:i}]}]}]}]},{id:"upload",label:b.upload,title:b.upload,hidden:!0,
-filebrowser:"uploadButton",elements:[{type:"file",id:"upload",label:c.upload,style:"height:40px",size:29},{type:"fileButton",id:"uploadButton",label:c.uploadSubmit,filebrowser:"info:url","for":["upload","upload"]}]},{id:"advanced",label:b.advanced,title:b.advanced,elements:[{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",id:"advId",requiredContent:"a[id]",label:b.id,setup:h,commit:j},{type:"select",id:"advLangDir",requiredContent:"a[dir]",label:b.langDir,
-"default":"",style:"width:110px",items:[[c.notSet,""],[b.langDirLTR,"ltr"],[b.langDirRTL,"rtl"]],setup:h,commit:j},{type:"text",id:"advAccessKey",requiredContent:"a[accesskey]",width:"80px",label:b.acccessKey,maxLength:1,setup:h,commit:j}]},{type:"hbox",widths:["45%","35%","20%"],children:[{type:"text",label:b.name,id:"advName",requiredContent:"a[name]",setup:h,commit:j},{type:"text",label:b.langCode,id:"advLangCode",requiredContent:"a[lang]",width:"110px","default":"",setup:h,commit:j},{type:"text",
-label:b.tabIndex,id:"advTabIndex",requiredContent:"a[tabindex]",width:"80px",maxLength:5,setup:h,commit:j}]}]},{type:"vbox",padding:1,children:[{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.advisoryTitle,requiredContent:"a[title]","default":"",id:"advTitle",setup:h,commit:j},{type:"text",label:b.advisoryContentType,requiredContent:"a[type]","default":"",id:"advContentType",setup:h,commit:j}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.cssClasses,requiredContent:"a(cke-xyz)",
-"default":"",id:"advCSSClasses",setup:h,commit:j},{type:"text",label:b.charset,requiredContent:"a[charset]","default":"",id:"advCharset",setup:h,commit:j}]},{type:"hbox",widths:["45%","55%"],children:[{type:"text",label:b.rel,requiredContent:"a[rel]","default":"",id:"advRel",setup:h,commit:j},{type:"text",label:b.styles,requiredContent:"a{cke-xyz}","default":"",id:"advStyles",validate:CKEDITOR.dialog.validate.inlineStyle(g.lang.common.invalidInlineStyle),setup:h,commit:j}]}]}]}],onShow:function(){var a=
-this.getParentEditor(),b=a.getSelection(),c=null;(c=l.getSelectedLink(a))&&c.hasAttribute("href")?b.getSelectedElement()||b.selectElement(c):c=null;a=l.parseLinkAttributes(a,c);this._.selectedElement=c;this.setupContent(a)},onOk:function(){var a={};this.commitContent(a);var b=g.getSelection(),c=l.getLinkAttributes(g,a);if(this._.selectedElement){var e=this._.selectedElement,d=e.data("cke-saved-href"),f=e.getHtml();e.setAttributes(c.set);e.removeAttributes(c.removed);if(d==f||"email"==a.type&&-1!=
-f.indexOf("@"))e.setHtml("email"==a.type?a.email.address:c.set["data-cke-saved-href"]),b.selectElement(e);delete this._.selectedElement}else b=b.getRanges()[0],b.collapsed&&(a=new CKEDITOR.dom.text("email"==a.type?a.email.address:c.set["data-cke-saved-href"],g.document),b.insertNode(a),b.selectNodeContents(a)),c=new CKEDITOR.style({element:"a",attributes:c.set}),c.type=CKEDITOR.STYLE_INLINE,c.applyToRange(b,g),b.select()},onLoad:function(){g.config.linkShowAdvancedTab||this.hidePage("advanced");g.config.linkShowTargetTab||
-this.hidePage("target")},onFocus:function(){var a=this.getContentElement("info","linkType");a&&"url"==a.getValue()&&(a=this.getContentElement("info","url"),a.select())}}})})(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/link/images/anchor.png b/wqflask/wqflask/static/packages/ckeditor/plugins/link/images/anchor.png
deleted file mode 100644
index 6d861a0e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/link/images/anchor.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/link/images/hidpi/anchor.png b/wqflask/wqflask/static/packages/ckeditor/plugins/link/images/hidpi/anchor.png
deleted file mode 100644
index f5048430..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/link/images/hidpi/anchor.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/liststyle/dialogs/liststyle.js b/wqflask/wqflask/static/packages/ckeditor/plugins/liststyle/dialogs/liststyle.js
deleted file mode 100644
index 2b130e71..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/liststyle/dialogs/liststyle.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-(function(){function d(c,d){var b;try{b=c.getSelection().getRanges()[0]}catch(f){return null}b.shrink(CKEDITOR.SHRINK_TEXT);return c.elementPath(b.getCommonAncestor()).contains(d,1)}function e(c,e){var b=c.lang.liststyle;if("bulletedListStyle"==e)return{title:b.bulletedTitle,minWidth:300,minHeight:50,contents:[{id:"info",accessKey:"I",elements:[{type:"select",label:b.type,id:"type",align:"center",style:"width:150px",items:[[b.notset,""],[b.circle,"circle"],[b.disc,"disc"],[b.square,"square"]],setup:function(a){this.setValue(a.getStyle("list-style-type")||
-h[a.getAttribute("type")]||a.getAttribute("type")||"")},commit:function(a){var b=this.getValue();b?a.setStyle("list-style-type",b):a.removeStyle("list-style-type")}}]}],onShow:function(){var a=this.getParentEditor();(a=d(a,"ul"))&&this.setupContent(a)},onOk:function(){var a=this.getParentEditor();(a=d(a,"ul"))&&this.commitContent(a)}};if("numberedListStyle"==e){var g=[[b.notset,""],[b.lowerRoman,"lower-roman"],[b.upperRoman,"upper-roman"],[b.lowerAlpha,"lower-alpha"],[b.upperAlpha,"upper-alpha"],
-[b.decimal,"decimal"]];(!CKEDITOR.env.ie||7<CKEDITOR.env.version)&&g.concat([[b.armenian,"armenian"],[b.decimalLeadingZero,"decimal-leading-zero"],[b.georgian,"georgian"],[b.lowerGreek,"lower-greek"]]);return{title:b.numberedTitle,minWidth:300,minHeight:50,contents:[{id:"info",accessKey:"I",elements:[{type:"hbox",widths:["25%","75%"],children:[{label:b.start,type:"text",id:"start",validate:CKEDITOR.dialog.validate.integer(b.validateStartNumber),setup:function(a){this.setValue(a.getFirst(f).getAttribute("value")||
-a.getAttribute("start")||1)},commit:function(a){var b=a.getFirst(f),c=b.getAttribute("value")||a.getAttribute("start")||1;a.getFirst(f).removeAttribute("value");var d=parseInt(this.getValue(),10);isNaN(d)?a.removeAttribute("start"):a.setAttribute("start",d);a=b;b=c;for(d=isNaN(d)?1:d;(a=a.getNext(f))&&b++;)a.getAttribute("value")==b&&a.setAttribute("value",d+b-c)}},{type:"select",label:b.type,id:"type",style:"width: 100%;",items:g,setup:function(a){this.setValue(a.getStyle("list-style-type")||h[a.getAttribute("type")]||
-a.getAttribute("type")||"")},commit:function(a){var b=this.getValue();b?a.setStyle("list-style-type",b):a.removeStyle("list-style-type")}}]}]}],onShow:function(){var a=this.getParentEditor();(a=d(a,"ol"))&&this.setupContent(a)},onOk:function(){var a=this.getParentEditor();(a=d(a,"ol"))&&this.commitContent(a)}}}}var f=function(c){return c.type==CKEDITOR.NODE_ELEMENT&&c.is("li")},h={a:"lower-alpha",A:"upper-alpha",i:"lower-roman",I:"upper-roman",1:"decimal",disc:"disc",circle:"circle",square:"square"};
-CKEDITOR.dialog.add("numberedListStyle",function(c){return e(c,"numberedListStyle")});CKEDITOR.dialog.add("bulletedListStyle",function(c){return e(c,"bulletedListStyle")})})(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png b/wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png
deleted file mode 100644
index 4a8d2bfd..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/hidpi/icon-rtl.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/hidpi/icon.png b/wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/hidpi/icon.png
deleted file mode 100644
index b981bb5c..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/hidpi/icon.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/icon-rtl.png b/wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/icon-rtl.png
deleted file mode 100644
index 55b5b5f9..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/icon-rtl.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/icon.png b/wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/icon.png
deleted file mode 100644
index e0634336..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/magicline/images/icon.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/pagebreak/images/pagebreak.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/pagebreak/images/pagebreak.gif
deleted file mode 100644
index 8d1cffd6..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/pagebreak/images/pagebreak.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/pastefromword/filter/default.js b/wqflask/wqflask/static/packages/ckeditor/plugins/pastefromword/filter/default.js
deleted file mode 100644
index 899ed21b..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/pastefromword/filter/default.js
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-(function(){function y(a){for(var a=a.toUpperCase(),c=z.length,b=0,f=0;f<c;++f)for(var d=z[f],e=d[1].length;a.substr(0,e)==d[1];a=a.substr(e))b+=d[0];return b}function A(a){for(var a=a.toUpperCase(),c=B.length,b=1,f=1;0<a.length;f*=c)b+=B.indexOf(a.charAt(a.length-1))*f,a=a.substr(0,a.length-1);return b}var C=CKEDITOR.htmlParser.fragment.prototype,o=CKEDITOR.htmlParser.element.prototype;C.onlyChild=o.onlyChild=function(){var a=this.children;return 1==a.length&&a[0]||null};o.removeAnyChildWithName=
-function(a){for(var c=this.children,b=[],f,d=0;d<c.length;d++)f=c[d],f.name&&(f.name==a&&(b.push(f),c.splice(d--,1)),b=b.concat(f.removeAnyChildWithName(a)));return b};o.getAncestor=function(a){for(var c=this.parent;c&&(!c.name||!c.name.match(a));)c=c.parent;return c};C.firstChild=o.firstChild=function(a){for(var c,b=0;b<this.children.length;b++)if(c=this.children[b],a(c)||c.name&&(c=c.firstChild(a)))return c;return null};o.addStyle=function(a,c,b){var f="";if("string"==typeof c)f+=a+":"+c+";";else{if("object"==
-typeof a)for(var d in a)a.hasOwnProperty(d)&&(f+=d+":"+a[d]+";");else f+=a;b=c}this.attributes||(this.attributes={});a=this.attributes.style||"";a=(b?[f,a]:[a,f]).join(";");this.attributes.style=a.replace(/^;+|;(?=;)/g,"")};o.getStyle=function(a){var c=this.attributes.style;if(c)return c=CKEDITOR.tools.parseCssText(c,1),c[a]};CKEDITOR.dtd.parentOf=function(a){var c={},b;for(b in this)-1==b.indexOf("$")&&this[b][a]&&(c[b]=1);return c};var H=/^([.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz){1}?/i,
-D=/^(?:\b0[^\s]*\s*){1,4}$/,x={ol:{decimal:/\d+/,"lower-roman":/^m{0,4}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$/,"upper-roman":/^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$/,"lower-alpha":/^[a-z]+$/,"upper-alpha":/^[A-Z]+$/},ul:{disc:/[l\u00B7\u2002]/,circle:/[\u006F\u00D8]/,square:/[\u006E\u25C6]/}},z=[[1E3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]],B="ABCDEFGHIJKLMNOPQRSTUVWXYZ",s=0,t=null,w,E=CKEDITOR.plugins.pastefromword=
-{utils:{createListBulletMarker:function(a,c){var b=new CKEDITOR.htmlParser.element("cke:listbullet");b.attributes={"cke:listsymbol":a[0]};b.add(new CKEDITOR.htmlParser.text(c));return b},isListBulletIndicator:function(a){if(/mso-list\s*:\s*Ignore/i.test(a.attributes&&a.attributes.style))return!0},isContainingOnlySpaces:function(a){var c;return(c=a.onlyChild())&&/^(:?\s|&nbsp;)+$/.test(c.value)},resolveList:function(a){var c=a.attributes,b;if((b=a.removeAnyChildWithName("cke:listbullet"))&&b.length&&
-(b=b[0]))return a.name="cke:li",c.style&&(c.style=E.filters.stylesFilter([["text-indent"],["line-height"],[/^margin(:?-left)?$/,null,function(a){a=a.split(" ");a=CKEDITOR.tools.convertToPx(a[3]||a[1]||a[0]);!s&&(null!==t&&a>t)&&(s=a-t);t=a;c["cke:indent"]=s&&Math.ceil(a/s)+1||1}],[/^mso-list$/,null,function(a){var a=a.split(" "),b=Number(a[0].match(/\d+/)),a=Number(a[1].match(/\d+/));1==a&&(b!==w&&(c["cke:reset"]=1),w=b);c["cke:indent"]=a}]])(c.style,a)||""),c["cke:indent"]||(t=0,c["cke:indent"]=
-1),CKEDITOR.tools.extend(c,b.attributes),!0;w=t=s=null;return!1},getStyleComponents:function(){var a=CKEDITOR.dom.element.createFromHtml('<div style="position:absolute;left:-9999px;top:-9999px;"></div>',CKEDITOR.document);CKEDITOR.document.getBody().append(a);return function(c,b,f){a.setStyle(c,b);for(var c={},b=f.length,d=0;d<b;d++)c[f[d]]=a.getStyle(f[d]);return c}}(),listDtdParents:CKEDITOR.dtd.parentOf("ol")},filters:{flattenList:function(a,c){var c="number"==typeof c?c:1,b=a.attributes,f;switch(b.type){case "a":f=
-"lower-alpha";break;case "1":f="decimal"}for(var d=a.children,e,h=0;h<d.length;h++)if(e=d[h],e.name in CKEDITOR.dtd.$listItem){var j=e.attributes,g=e.children,m=g[g.length-1];m.name in CKEDITOR.dtd.$list&&(a.add(m,h+1),--g.length||d.splice(h--,1));e.name="cke:li";b.start&&!h&&(j.value=b.start);E.filters.stylesFilter([["tab-stops",null,function(a){(a=a.split(" ")[1].match(H))&&(t=CKEDITOR.tools.convertToPx(a[0]))}],1==c?["mso-list",null,function(a){a=a.split(" ");a=Number(a[0].match(/\d+/));a!==w&&
-(j["cke:reset"]=1);w=a}]:null])(j.style);j["cke:indent"]=c;j["cke:listtype"]=a.name;j["cke:list-style-type"]=f}else if(e.name in CKEDITOR.dtd.$list){arguments.callee.apply(this,[e,c+1]);d=d.slice(0,h).concat(e.children).concat(d.slice(h+1));a.children=[];e=0;for(g=d.length;e<g;e++)a.add(d[e]);d=a.children}delete a.name;b["cke:list"]=1},assembleList:function(a){for(var c=a.children,b,f,d,e,h,j,a=[],g,m,i,l,k,p,n=0;n<c.length;n++)if(b=c[n],"cke:li"==b.name)if(b.name="li",f=b.attributes,i=(i=f["cke:listsymbol"])&&
-i.match(/^(?:[(]?)([^\s]+?)([.)]?)$/),l=k=p=null,f["cke:ignored"])c.splice(n--,1);else{f["cke:reset"]&&(j=e=h=null);d=Number(f["cke:indent"]);d!=e&&(m=g=null);if(i){if(m&&x[m][g].test(i[1]))l=m,k=g;else for(var q in x)for(var u in x[q])if(x[q][u].test(i[1]))if("ol"==q&&/alpha|roman/.test(u)){if(g=/roman/.test(u)?y(i[1]):A(i[1]),!p||g<p)p=g,l=q,k=u}else{l=q;k=u;break}!l&&(l=i[2]?"ol":"ul")}else l=f["cke:listtype"]||"ol",k=f["cke:list-style-type"];m=l;g=k||("ol"==l?"decimal":"disc");k&&k!=("ol"==l?
-"decimal":"disc")&&b.addStyle("list-style-type",k);if("ol"==l&&i){switch(k){case "decimal":p=Number(i[1]);break;case "lower-roman":case "upper-roman":p=y(i[1]);break;case "lower-alpha":case "upper-alpha":p=A(i[1])}b.attributes.value=p}if(j){if(d>e)a.push(j=new CKEDITOR.htmlParser.element(l)),j.add(b),h.add(j);else{if(d<e){e-=d;for(var r;e--&&(r=j.parent);)j=r.parent}j.add(b)}c.splice(n--,1)}else a.push(j=new CKEDITOR.htmlParser.element(l)),j.add(b),c[n]=j;h=b;e=d}else j&&(j=e=h=null);for(n=0;n<a.length;n++)if(j=
-a[n],q=j.children,g=g=void 0,u=j.children.length,r=g=void 0,c=/list-style-type:(.*?)(?:;|$)/,e=CKEDITOR.plugins.pastefromword.filters.stylesFilter,g=j.attributes,!c.exec(g.style)){for(h=0;h<u;h++)if(g=q[h],g.attributes.value&&Number(g.attributes.value)==h+1&&delete g.attributes.value,g=c.exec(g.attributes.style))if(g[1]==r||!r)r=g[1];else{r=null;break}if(r){for(h=0;h<u;h++)g=q[h].attributes,g.style&&(g.style=e([["list-style-type"]])(g.style)||"");j.addStyle("list-style-type",r)}}w=t=s=null},falsyFilter:function(){return!1},
-stylesFilter:function(a,c){return function(b,f){var d=[];(b||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(b,e,g){e=e.toLowerCase();"font-family"==e&&(g=g.replace(/["']/g,""));for(var m,i,l,k=0;k<a.length;k++)if(a[k]&&(b=a[k][0],m=a[k][1],i=a[k][2],l=a[k][3],e.match(b)&&(!m||g.match(m)))){e=l||e;c&&(i=i||g);"function"==typeof i&&(i=i(g,f,e));i&&i.push&&(e=i[0],i=i[1]);"string"==typeof i&&d.push([e,i]);return}!c&&d.push([e,g])});for(var e=0;e<d.length;e++)d[e]=
-d[e].join(":");return d.length?d.join(";")+";":!1}},elementMigrateFilter:function(a,c){return a?function(b){var f=c?(new CKEDITOR.style(a,c))._.definition:a;b.name=f.element;CKEDITOR.tools.extend(b.attributes,CKEDITOR.tools.clone(f.attributes));b.addStyle(CKEDITOR.style.getStyleText(f))}:function(){}},styleMigrateFilter:function(a,c){var b=this.elementMigrateFilter;return a?function(f,d){var e=new CKEDITOR.htmlParser.element(null),h={};h[c]=f;b(a,h)(e);e.children=d.children;d.children=[e];e.filter=
-function(){};e.parent=d}:function(){}},bogusAttrFilter:function(a,c){if(-1==c.name.indexOf("cke:"))return!1},applyStyleFilter:null},getRules:function(a,c){var b=CKEDITOR.dtd,f=CKEDITOR.tools.extend({},b.$block,b.$listItem,b.$tableContent),d=a.config,e=this.filters,h=e.falsyFilter,j=e.stylesFilter,g=e.elementMigrateFilter,m=CKEDITOR.tools.bind(this.filters.styleMigrateFilter,this.filters),i=this.utils.createListBulletMarker,l=e.flattenList,k=e.assembleList,p=this.utils.isListBulletIndicator,n=this.utils.isContainingOnlySpaces,
-q=this.utils.resolveList,u=function(a){a=CKEDITOR.tools.convertToPx(a);return isNaN(a)?a:a+"px"},r=this.utils.getStyleComponents,t=this.utils.listDtdParents,o=!1!==d.pasteFromWordRemoveFontStyles,s=!1!==d.pasteFromWordRemoveStyles;return{elementNames:[[/meta|link|script/,""]],root:function(a){a.filterChildren(c);k(a)},elements:{"^":function(a){var c;CKEDITOR.env.gecko&&(c=e.applyStyleFilter)&&c(a)},$:function(a){var v=a.name||"",e=a.attributes;v in f&&e.style&&(e.style=j([[/^(:?width|height)$/,null,
-u]])(e.style)||"");if(v.match(/h\d/)){a.filterChildren(c);if(q(a))return;g(d["format_"+v])(a)}else if(v in b.$inline)a.filterChildren(c),n(a)&&delete a.name;else if(-1!=v.indexOf(":")&&-1==v.indexOf("cke")){a.filterChildren(c);if("v:imagedata"==v){if(v=a.attributes["o:href"])a.attributes.src=v;a.name="img";return}delete a.name}v in t&&(a.filterChildren(c),k(a))},style:function(a){if(CKEDITOR.env.gecko){var a=(a=a.onlyChild().value.match(/\/\* Style Definitions \*\/([\s\S]*?)\/\*/))&&a[1],c={};a&&
-(a.replace(/[\n\r]/g,"").replace(/(.+?)\{(.+?)\}/g,function(a,b,F){for(var b=b.split(","),a=b.length,d=0;d<a;d++)CKEDITOR.tools.trim(b[d]).replace(/^(\w+)(\.[\w-]+)?$/g,function(a,b,d){b=b||"*";d=d.substring(1,d.length);d.match(/MsoNormal/)||(c[b]||(c[b]={}),d?c[b][d]=F:c[b]=F)})}),e.applyStyleFilter=function(a){var b=c["*"]?"*":a.name,d=a.attributes&&a.attributes["class"];b in c&&(b=c[b],"object"==typeof b&&(b=b[d]),b&&a.addStyle(b,!0))})}return!1},p:function(a){if(/MsoListParagraph/i.exec(a.attributes["class"])||
-a.getStyle("mso-list")){var b=a.firstChild(function(a){return a.type==CKEDITOR.NODE_TEXT&&!n(a.parent)});(b=b&&b.parent)&&b.addStyle("mso-list","Ignore")}a.filterChildren(c);q(a)||(d.enterMode==CKEDITOR.ENTER_BR?(delete a.name,a.add(new CKEDITOR.htmlParser.element("br"))):g(d["format_"+(d.enterMode==CKEDITOR.ENTER_P?"p":"div")])(a))},div:function(a){var c=a.onlyChild();if(c&&"table"==c.name){var b=a.attributes;c.attributes=CKEDITOR.tools.extend(c.attributes,b);b.style&&c.addStyle(b.style);c=new CKEDITOR.htmlParser.element("div");
-c.addStyle("clear","both");a.add(c);delete a.name}},td:function(a){a.getAncestor("thead")&&(a.name="th")},ol:l,ul:l,dl:l,font:function(a){if(p(a.parent))delete a.name;else{a.filterChildren(c);var b=a.attributes,d=b.style,e=a.parent;"font"==e.name?(CKEDITOR.tools.extend(e.attributes,a.attributes),d&&e.addStyle(d),delete a.name):(d=(d||"").split(";"),b.color&&("#000000"!=b.color&&d.push("color:"+b.color),delete b.color),b.face&&(d.push("font-family:"+b.face),delete b.face),b.size&&(d.push("font-size:"+
-(3<b.size?"large":3>b.size?"small":"medium")),delete b.size),a.name="span",a.addStyle(d.join(";")))}},span:function(a){if(p(a.parent))return!1;a.filterChildren(c);if(n(a))return delete a.name,null;if(p(a)){var b=a.firstChild(function(a){return a.value||"img"==a.name}),e=(b=b&&(b.value||"l."))&&b.match(/^(?:[(]?)([^\s]+?)([.)]?)$/);if(e)return b=i(e,b),(a=a.getAncestor("span"))&&/ mso-hide:\s*all|display:\s*none /.test(a.attributes.style)&&(b.attributes["cke:ignored"]=1),b}if(e=(b=a.attributes)&&b.style)b.style=
-j([["line-height"],[/^font-family$/,null,!o?m(d.font_style,"family"):null],[/^font-size$/,null,!o?m(d.fontSize_style,"size"):null],[/^color$/,null,!o?m(d.colorButton_foreStyle,"color"):null],[/^background-color$/,null,!o?m(d.colorButton_backStyle,"color"):null]])(e,a)||"";b.style||delete b.style;CKEDITOR.tools.isEmpty(b)&&delete a.name;return null},b:g(d.coreStyles_bold),i:g(d.coreStyles_italic),u:g(d.coreStyles_underline),s:g(d.coreStyles_strike),sup:g(d.coreStyles_superscript),sub:g(d.coreStyles_subscript),
-a:function(a){a=a.attributes;a.href&&a.href.match(/^file:\/\/\/[\S]+#/i)&&(a.href=a.href.replace(/^file:\/\/\/[^#]+/i,""))},"cke:listbullet":function(a){a.getAncestor(/h\d/)&&!d.pasteFromWordNumberedHeadingToList&&delete a.name}},attributeNames:[[/^onmouse(:?out|over)/,""],[/^onload$/,""],[/(?:v|o):\w+/,""],[/^lang/,""]],attributes:{style:j(s?[[/^list-style-type$/,null],[/^margin$|^margin-(?!bottom|top)/,null,function(a,b,c){if(b.name in{p:1,div:1}){b="ltr"==d.contentsLangDirection?"margin-left":
-"margin-right";if("margin"==c)a=r(c,a,[b])[b];else if(c!=b)return null;if(a&&!D.test(a))return[b,a]}return null}],[/^clear$/],[/^border.*|margin.*|vertical-align|float$/,null,function(a,b){if("img"==b.name)return a}],[/^width|height$/,null,function(a,b){if(b.name in{table:1,td:1,th:1,img:1})return a}]]:[[/^mso-/],[/-color$/,null,function(a){if("transparent"==a)return!1;if(CKEDITOR.env.gecko)return a.replace(/-moz-use-text-color/g,"transparent")}],[/^margin$/,D],["text-indent","0cm"],["page-break-before"],
-["tab-stops"],["display","none"],o?[/font-?/]:null],s),width:function(a,c){if(c.name in b.$tableContent)return!1},border:function(a,c){if(c.name in b.$tableContent)return!1},"class":h,bgcolor:h,valign:s?h:function(a,b){b.addStyle("vertical-align",a);return!1}},comment:!CKEDITOR.env.ie?function(a,b){var c=a.match(/<img.*?>/),d=a.match(/^\[if !supportLists\]([\s\S]*?)\[endif\]$/);return d?(d=(c=d[1]||c&&"l.")&&c.match(/>(?:[(]?)([^\s]+?)([.)]?)</),i(d,c)):CKEDITOR.env.gecko&&c?(c=CKEDITOR.htmlParser.fragment.fromHtml(c[0]).children[0],
-(d=(d=(d=b.previous)&&d.value.match(/<v:imagedata[^>]*o:href=['"](.*?)['"]/))&&d[1])&&(c.attributes.src=d),c):!1}:h}}},G=function(){this.dataFilter=new CKEDITOR.htmlParser.filter};G.prototype={toHtml:function(a){var a=CKEDITOR.htmlParser.fragment.fromHtml(a),c=new CKEDITOR.htmlParser.basicWriter;a.writeHtml(c,this.dataFilter);return c.getHtml(!0)}};CKEDITOR.cleanWord=function(a,c){CKEDITOR.env.gecko&&(a=a.replace(/(<\!--\[if[^<]*?\])--\>([\S\s]*?)<\!--(\[endif\]--\>)/gi,"$1$2$3"));CKEDITOR.env.webkit&&
-(a=a.replace(/(class="MsoListParagraph[^>]+><\!--\[if !supportLists\]--\>)([^<]+<span[^<]+<\/span>)(<\!--\[endif\]--\>)/gi,"$1<span>$2</span>$3"));var b=new G,f=b.dataFilter;f.addRules(CKEDITOR.plugins.pastefromword.getRules(c,f));c.fire("beforeCleanWord",{filter:f});try{a=b.toHtml(a)}catch(d){alert(c.lang.pastefromword.error)}a=a.replace(/cke:.*?".*?"/g,"");a=a.replace(/style=""/g,"");return a=a.replace(/<span>/g,"")}})(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/preview/preview.html b/wqflask/wqflask/static/packages/ckeditor/plugins/preview/preview.html
deleted file mode 100644
index 8c028262..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/preview/preview.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<script>
-
-// Prevent from DOM clobbering.
-if ( typeof window.opener._cke_htmlToLoad == 'string' ) {
- var doc = document;
- doc.open();
- doc.write( window.opener._cke_htmlToLoad );
- doc.close();
-
- delete window.opener._cke_htmlToLoad;
-}
-
-</script>
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/LICENSE.md b/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/LICENSE.md
deleted file mode 100644
index 844ab4de..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/LICENSE.md
+++ /dev/null
@@ -1,28 +0,0 @@
-Software License Agreement
-==========================
-
-**CKEditor SCAYT Plugin**
-Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved.
-
-Licensed under the terms of any of the following licenses at your choice:
-
-* GNU General Public License Version 2 or later (the "GPL"):
- http://www.gnu.org/licenses/gpl.html
-
-* GNU Lesser General Public License Version 2.1 or later (the "LGPL"):
- http://www.gnu.org/licenses/lgpl.html
-
-* Mozilla Public License Version 1.1 or later (the "MPL"):
- http://www.mozilla.org/MPL/MPL-1.1.html
-
-You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice.
-
-Sources of Intellectual Property Included in this plugin
---------------------------------------------------------
-
-Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission.
-
-Trademarks
-----------
-
-CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/README.md b/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/README.md
deleted file mode 100644
index 1231d91e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/README.md
+++ /dev/null
@@ -1,25 +0,0 @@
-CKEditor SCAYT Plugin
-=====================
-
-This plugin brings Spell Check As You Type (SCAYT) into up to CKEditor 4+.
-
-SCAYT is a "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution.
-
-Installation
-------------
-
-1. Clone/copy this repository contents in a new "plugins/scayt" folder in your CKEditor installation.
-2. Enable the "scayt" plugin in the CKEditor configuration file (config.js):
-
- config.extraPlugins = 'scayt';
-
-That's all. SCAYT will appear on the editor toolbar and will be ready to use.
-
-License
--------
-
-Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html).
-
-See LICENSE.md for more information.
-
-Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/).
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/dialogs/options.js b/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/dialogs/options.js
deleted file mode 100644
index aec9a1c9..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/dialogs/options.js
+++ /dev/null
@@ -1,17 +0,0 @@
-CKEDITOR.dialog.add("scaytDialog",function(f){var g=f.scayt,k='<p><img src="'+g.getLogo()+'" /></p><p>'+g.getLocal("version")+g.getVersion()+"</p><p>"+g.getLocal("text_copyrights")+"</p>",l=CKEDITOR.document,i={isChanged:function(){return null===this.newLang||this.currentLang===this.newLang?!1:!0},currentLang:g.getLang(),newLang:null,reset:function(){this.currentLang=g.getLang();this.newLang=null},id:"lang"},k=[{id:"options",label:g.getLocal("tab_options"),onShow:function(){},elements:[{type:"vbox",
-id:"scaytOptions",children:function(){var a=g.getApplicationConfig(),e=[],b={"ignore-all-caps-words":"label_allCaps","ignore-domain-names":"label_ignoreDomainNames","ignore-words-with-mixed-cases":"label_mixedCase","ignore-words-with-numbers":"label_mixedWithDigits"},d;for(d in a){var c={type:"checkbox"};c.id=d;c.label=g.getLocal(b[d]);e.push(c)}return e}(),onShow:function(){this.getChild();for(var a=f.scayt,e=0;e<this.getChild().length;e++)this.getChild()[e].setValue(a.getApplicationConfig()[this.getChild()[e].id])}}]},
-{id:"langs",label:g.getLocal("tab_languages"),elements:[{id:"leftLangColumn",type:"vbox",align:"left",widths:["100"],children:[{type:"html",id:"langBox",style:"overflow: hidden; white-space: normal;",html:'<form><div style="float:left;width:45%;margin-left:5px;" id="left-col-'+f.name+'"></div><div style="float:left;width:45%;margin-left:15px;" id="right-col-'+f.name+'"></div></form>',onShow:function(){var a=f.scayt.getLang();l.getById("scaytLang_"+a).$.checked=!0}}]}]},{id:"dictionaries",label:g.getLocal("tab_dictionaries"),
-elements:[{type:"vbox",id:"rightCol_col__left",children:[{type:"html",id:"dictionaryNote",html:""},{type:"text",id:"dictionaryName",label:g.getLocal("label_fieldNameDic")||"Dictionary name",onShow:function(a){var e=a.sender,b=f.scayt;setTimeout(function(){e.getContentElement("dictionaries","dictionaryNote").getElement().setText("");null!=b.getUserDictionaryName()&&""!=b.getUserDictionaryName()&&e.getContentElement("dictionaries","dictionaryName").setValue(b.getUserDictionaryName())},0)}},{type:"hbox",
-id:"notExistDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"createDic",label:g.getLocal("btn_createDic"),title:g.getLocal("btn_createDic"),onClick:function(){var a=this.getDialog(),e=j,b=f.scayt,d=a.getContentElement("dictionaries","dictionaryName").getValue();b.createUserDictionary(d,function(c){c.error||e.toggleDictionaryButtons.call(a,!0);c.dialog=a;c.command="create";c.name=d;f.fire("scaytUserDictionaryAction",c)},function(c){c.dialog=a;c.command="create";
-c.name=d;f.fire("scaytUserDictionaryActionError",c)})}},{type:"button",id:"restoreDic",label:g.getLocal("btn_restoreDic"),title:g.getLocal("btn_restoreDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=j,d=a.getContentElement("dictionaries","dictionaryName").getValue();e.restoreUserDictionary(d,function(c){c.dialog=a;c.error||b.toggleDictionaryButtons.call(a,!0);c.command="restore";c.name=d;f.fire("scaytUserDictionaryAction",c)},function(c){c.dialog=a;c.command="restore";c.name=d;f.fire("scaytUserDictionaryActionError",
-c)})}}]},{type:"hbox",id:"existDic",align:"left",style:"width:auto;",widths:["50%","50%"],children:[{type:"button",id:"removeDic",label:g.getLocal("btn_deleteDic"),title:g.getLocal("btn_deleteDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=j,d=a.getContentElement("dictionaries","dictionaryName"),c=d.getValue();e.removeUserDictionary(c,function(e){d.setValue("");e.error||b.toggleDictionaryButtons.call(a,!1);e.dialog=a;e.command="remove";e.name=c;f.fire("scaytUserDictionaryAction",e)},function(b){b.dialog=
-a;b.command="remove";b.name=c;f.fire("scaytUserDictionaryActionError",b)})}},{type:"button",id:"renameDic",label:g.getLocal("btn_renameDic"),title:g.getLocal("btn_renameDic"),onClick:function(){var a=this.getDialog(),e=f.scayt,b=a.getContentElement("dictionaries","dictionaryName").getValue();e.renameUserDictionary(b,function(d){d.dialog=a;d.command="rename";d.name=b;f.fire("scaytUserDictionaryAction",d)},function(d){d.dialog=a;d.command="rename";d.name=b;f.fire("scaytUserDictionaryActionError",d)})}}]},
-{type:"html",id:"dicInfo",html:'<div id="dic_info_editor1" style="margin:5px auto; width:95%;white-space:normal;">'+g.getLocal("text_descriptionDic")+"</div>"}]}]},{id:"about",label:g.getLocal("tab_about"),elements:[{type:"html",id:"about",style:"margin: 5px 5px;",html:'<div><div id="scayt_about_">'+k+"</div></div>"}]}];f.on("scaytUserDictionaryAction",function(a){var e=a.data.dialog,b=e.getContentElement("dictionaries","dictionaryNote").getElement(),d=a.editor.scayt,c;void 0===a.data.error?(c=d.getLocal("message_success_"+
-a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c),SCAYT.$(b.$).css({color:"blue"})):(""===a.data.name?b.setText(d.getLocal("message_info_emptyDic")):(c=d.getLocal("message_error_"+a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c)),SCAYT.$(b.$).css({color:"red"}),null!=d.getUserDictionaryName()&&""!=d.getUserDictionaryName()?e.getContentElement("dictionaries","dictionaryName").setValue(d.getUserDictionaryName()):e.getContentElement("dictionaries","dictionaryName").setValue(""))});
-f.on("scaytUserDictionaryActionError",function(a){var e=a.data.dialog,b=e.getContentElement("dictionaries","dictionaryNote").getElement(),d=a.editor.scayt,c;""===a.data.name?b.setText(d.getLocal("message_info_emptyDic")):(c=d.getLocal("message_error_"+a.data.command+"Dic"),c=c.replace("%s",a.data.name),b.setText(c));SCAYT.$(b.$).css({color:"red"});null!=d.getUserDictionaryName()&&""!=d.getUserDictionaryName()?e.getContentElement("dictionaries","dictionaryName").setValue(d.getUserDictionaryName()):
-e.getContentElement("dictionaries","dictionaryName").setValue("")});var j={title:g.getLocal("text_title"),resizable:CKEDITOR.DIALOG_RESIZE_BOTH,minWidth:340,minHeight:260,onLoad:function(){if(0!=f.config.scayt_uiTabs[1]){var a=j,e=a.getLangBoxes.call(this);e.getParent().setStyle("white-space","normal");a.renderLangList(e);this.definition.minWidth=this.getSize().width;this.resize(this.definition.minWidth,this.definition.minHeight)}},onCancel:function(){i.reset()},onHide:function(){f.unlockSelection()},
-onShow:function(){f.fire("scaytDialogShown",this);if(0!=f.config.scayt_uiTabs[2]){var a=f.scayt,e=this.getContentElement("dictionaries","dictionaryName"),b=this.getContentElement("dictionaries","existDic").getElement().getParent(),d=this.getContentElement("dictionaries","notExistDic").getElement().getParent();b.hide();d.hide();null!=a.getUserDictionaryName()&&""!=a.getUserDictionaryName()?(this.getContentElement("dictionaries","dictionaryName").setValue(a.getUserDictionaryName()),b.show()):(e.setValue(""),
-d.show())}},onOk:function(){var a=j,e=f.scayt;this.getContentElement("options","scaytOptions");a=a.getChangedOption.call(this);e.commitOption({changedOptions:a})},toggleDictionaryButtons:function(a){var e=this.getContentElement("dictionaries","existDic").getElement().getParent(),b=this.getContentElement("dictionaries","notExistDic").getElement().getParent();a?(e.show(),b.hide()):(e.hide(),b.show())},getChangedOption:function(){var a={};if(1==f.config.scayt_uiTabs[0])for(var e=this.getContentElement("options",
-"scaytOptions").getChild(),b=0;b<e.length;b++)e[b].isChanged()&&(a[e[b].id]=e[b].getValue());i.isChanged()&&(a[i.id]=f.config.scayt_sLang=i.currentLang=i.newLang);return a},buildRadioInputs:function(a,e){var b=new CKEDITOR.dom.element("div");CKEDITOR.document.createElement("div");var d="scaytLang_"+e,c=CKEDITOR.dom.element.createFromHtml('<input id="'+d+'" type="radio" value="'+e+'" name="scayt_lang" />'),g=new CKEDITOR.dom.element("label"),h=f.scayt;b.setStyles({"white-space":"normal",position:"relative"});
-c.on("click",function(a){i.newLang=a.sender.getValue()});g.appendText(a);g.setAttribute("for",d);b.append(c);b.append(g);e===h.getLang()&&(c.setAttribute("checked",!0),c.setAttribute("defaultChecked","defaultChecked"));return b},renderLangList:function(a){var e=a.find("#left-col-"+f.name).getItem(0),a=a.find("#right-col-"+f.name).getItem(0),b=g.getLangList(),d={},c=[],i=0,h;for(h in b.ltr)d[h]=b.ltr[h];for(h in b.rtl)d[h]=b.rtl[h];for(h in d)c.push([h,d[h]]);c.sort(function(a,b){var c=0;a[1]>b[1]?
-c=1:a[1]<b[1]&&(c=-1);return c});d={};for(b=0;b<c.length;b++)d[c[b][0]]=c[b][1];c=Math.round(c.length/2);for(h in d)i++,this.buildRadioInputs(d[h],h).appendTo(i<=c?e:a)},getLangBoxes:function(){return this.getContentElement("langs","langBox").getElement()},contents:function(a,e){var b=[],d=e.config.scayt_uiTabs;if(d){for(var c in d)1==d[c]&&b.push(a[c]);b.push(a[a.length-1])}else return a;return b}(k,f)};return j}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/dialogs/toolbar.css b/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/dialogs/toolbar.css
deleted file mode 100644
index ecabdac9..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/scayt/dialogs/toolbar.css
+++ /dev/null
@@ -1,71 +0,0 @@
-a
-{
- text-decoration:none;
- padding: 2px 4px 4px 6px;
- display : block;
- border-width: 1px;
- border-style: solid;
- margin : 0px;
-}
-
-a.cke_scayt_toogle:hover,
-a.cke_scayt_toogle:focus,
-a.cke_scayt_toogle:active
-{
- border-color: #316ac5;
- background-color: #dff1ff;
- color : #000;
- cursor: pointer;
- margin : 0px;
-}
-a.cke_scayt_toogle {
- color : #316ac5;
- border-color: #fff;
-}
-.scayt_enabled a.cke_scayt_item {
- color : #316ac5;
- border-color: #fff;
- margin : 0px;
-}
-.scayt_disabled a.cke_scayt_item {
- color : gray;
- border-color : #fff;
-}
-.scayt_enabled a.cke_scayt_item:hover,
-.scayt_enabled a.cke_scayt_item:focus,
-.scayt_enabled a.cke_scayt_item:active
-{
- border-color: #316ac5;
- background-color: #dff1ff;
- color : #000;
- cursor: pointer;
-}
-.scayt_disabled a.cke_scayt_item:hover,
-.scayt_disabled a.cke_scayt_item:focus,
-.scayt_disabled a.cke_scayt_item:active
-{
- border-color: gray;
- background-color: #dff1ff;
- color : gray;
- cursor: no-drop;
-}
-.cke_scayt_set_on, .cke_scayt_set_off
-{
- display: none;
-}
-.scayt_enabled .cke_scayt_set_on
-{
- display: none;
-}
-.scayt_disabled .cke_scayt_set_on
-{
- display: inline;
-}
-.scayt_disabled .cke_scayt_set_off
-{
- display: none;
-}
-.scayt_enabled .cke_scayt_set_off
-{
- display: inline;
-}
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_address.png b/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_address.png
deleted file mode 100644
index 5abdae12..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_address.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_blockquote.png b/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_blockquote.png
deleted file mode 100644
index a8f49735..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_blockquote.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_div.png b/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_div.png
deleted file mode 100644
index 87b3c171..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_div.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h1.png b/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h1.png
deleted file mode 100644
index 3933325c..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h1.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h2.png b/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h2.png
deleted file mode 100644
index c99894c2..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h2.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h3.png b/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h3.png
deleted file mode 100644
index cb73d679..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h3.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h4.png b/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h4.png
deleted file mode 100644
index 7af6bb49..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h4.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h5.png b/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h5.png
deleted file mode 100644
index ce5bec16..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h5.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h6.png b/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h6.png
deleted file mode 100644
index e67b9829..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_h6.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_p.png b/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_p.png
deleted file mode 100644
index 63a58202..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_p.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_pre.png b/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_pre.png
deleted file mode 100644
index 955a8689..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/showblocks/images/block_pre.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/dialogs/smiley.js b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/dialogs/smiley.js
deleted file mode 100644
index b202d3ee..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/dialogs/smiley.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("smiley",function(f){for(var e=f.config,a=f.lang.smiley,h=e.smiley_images,g=e.smiley_columns||8,i,k=function(j){var c=j.data.getTarget(),b=c.getName();if("a"==b)c=c.getChild(0);else if("img"!=b)return;var b=c.getAttribute("cke_src"),a=c.getAttribute("title"),c=f.document.createElement("img",{attributes:{src:b,"data-cke-saved-src":b,title:a,alt:a,width:c.$.width,height:c.$.height}});f.insertElement(c);i.hide();j.data.preventDefault()},n=CKEDITOR.tools.addFunction(function(a,c){var a=
-new CKEDITOR.dom.event(a),c=new CKEDITOR.dom.element(c),b;b=a.getKeystroke();var d="rtl"==f.lang.dir;switch(b){case 38:if(b=c.getParent().getParent().getPrevious())b=b.getChild([c.getParent().getIndex(),0]),b.focus();a.preventDefault();break;case 40:if(b=c.getParent().getParent().getNext())(b=b.getChild([c.getParent().getIndex(),0]))&&b.focus();a.preventDefault();break;case 32:k({data:a});a.preventDefault();break;case d?37:39:if(b=c.getParent().getNext())b=b.getChild(0),b.focus(),a.preventDefault(!0);
-else if(b=c.getParent().getParent().getNext())(b=b.getChild([0,0]))&&b.focus(),a.preventDefault(!0);break;case d?39:37:if(b=c.getParent().getPrevious())b=b.getChild(0),b.focus(),a.preventDefault(!0);else if(b=c.getParent().getParent().getPrevious())b=b.getLast().getChild(0),b.focus(),a.preventDefault(!0)}}),d=CKEDITOR.tools.getNextId()+"_smiley_emtions_label",d=['<div><span id="'+d+'" class="cke_voice_label">'+a.options+"</span>",'<table role="listbox" aria-labelledby="'+d+'" style="width:100%;height:100%;border-collapse:separate;" cellspacing="2" cellpadding="2"',
-CKEDITOR.env.ie&&CKEDITOR.env.quirks?' style="position:absolute;"':"","><tbody>"],l=h.length,a=0;a<l;a++){0===a%g&&d.push('<tr role="presentation">');var m="cke_smile_label_"+a+"_"+CKEDITOR.tools.getNextNumber();d.push('<td class="cke_dark_background cke_centered" style="vertical-align: middle;" role="presentation"><a href="javascript:void(0)" role="option"',' aria-posinset="'+(a+1)+'"',' aria-setsize="'+l+'"',' aria-labelledby="'+m+'"',' class="cke_smile cke_hand" tabindex="-1" onkeydown="CKEDITOR.tools.callFunction( ',
-n,', event, this );">','<img class="cke_hand" title="',e.smiley_descriptions[a],'" cke_src="',CKEDITOR.tools.htmlEncode(e.smiley_path+h[a]),'" alt="',e.smiley_descriptions[a],'"',' src="',CKEDITOR.tools.htmlEncode(e.smiley_path+h[a]),'"',CKEDITOR.env.ie?" onload=\"this.setAttribute('width', 2); this.removeAttribute('width');\" ":"",'><span id="'+m+'" class="cke_voice_label">'+e.smiley_descriptions[a]+"</span></a>","</td>");a%g==g-1&&d.push("</tr>")}if(a<g-1){for(;a<g-1;a++)d.push("<td></td>");d.push("</tr>")}d.push("</tbody></table></div>");
-e={type:"html",id:"smileySelector",html:d.join(""),onLoad:function(a){i=a.sender},focus:function(){var a=this;setTimeout(function(){a.getElement().getElementsByTag("a").getItem(0).focus()},0)},onClick:k,style:"width: 100%; border-collapse: separate;"};return{title:f.lang.smiley.title,minWidth:270,minHeight:120,contents:[{id:"tab1",label:"",title:"",expand:!0,padding:0,elements:[e]}],buttons:[CKEDITOR.dialog.cancelButton]}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angel_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angel_smile.gif
deleted file mode 100644
index 21f81a2f..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angel_smile.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angel_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angel_smile.png
deleted file mode 100644
index 559e5e71..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angel_smile.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angry_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angry_smile.gif
deleted file mode 100644
index c912d99b..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angry_smile.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angry_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angry_smile.png
deleted file mode 100644
index c05d2be3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/angry_smile.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/broken_heart.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/broken_heart.gif
deleted file mode 100644
index 4162a7b2..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/broken_heart.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/broken_heart.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/broken_heart.png
deleted file mode 100644
index a711c0d8..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/broken_heart.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/confused_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/confused_smile.gif
deleted file mode 100644
index 0e420cba..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/confused_smile.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/confused_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/confused_smile.png
deleted file mode 100644
index e0b8e5c6..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/confused_smile.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/cry_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/cry_smile.gif
deleted file mode 100644
index b5133427..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/cry_smile.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/cry_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/cry_smile.png
deleted file mode 100644
index a1891a34..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/cry_smile.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/devil_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/devil_smile.gif
deleted file mode 100644
index 9b2a1005..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/devil_smile.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/devil_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/devil_smile.png
deleted file mode 100644
index 53247a88..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/devil_smile.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embaressed_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embaressed_smile.gif
deleted file mode 100644
index 8d39f252..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embaressed_smile.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embarrassed_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embarrassed_smile.gif
deleted file mode 100644
index 8d39f252..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embarrassed_smile.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embarrassed_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embarrassed_smile.png
deleted file mode 100644
index 34904b66..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/embarrassed_smile.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/envelope.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/envelope.gif
deleted file mode 100644
index 5294ec48..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/envelope.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/envelope.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/envelope.png
deleted file mode 100644
index 44398ad1..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/envelope.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/heart.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/heart.gif
deleted file mode 100644
index 160be8ef..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/heart.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/heart.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/heart.png
deleted file mode 100644
index df409e62..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/heart.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/kiss.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/kiss.gif
deleted file mode 100644
index ffb23db0..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/kiss.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/kiss.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/kiss.png
deleted file mode 100644
index a4f2f363..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/kiss.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/lightbulb.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/lightbulb.gif
deleted file mode 100644
index ceb6e2d9..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/lightbulb.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/lightbulb.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/lightbulb.png
deleted file mode 100644
index 0c4a9240..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/lightbulb.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/omg_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/omg_smile.gif
deleted file mode 100644
index 3177355f..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/omg_smile.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/omg_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/omg_smile.png
deleted file mode 100644
index abc4e2d0..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/omg_smile.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/regular_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/regular_smile.gif
deleted file mode 100644
index fdcf5c33..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/regular_smile.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/regular_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/regular_smile.png
deleted file mode 100644
index 0f2649b7..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/regular_smile.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/sad_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/sad_smile.gif
deleted file mode 100644
index cca0729d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/sad_smile.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/sad_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/sad_smile.png
deleted file mode 100644
index f20f3bf3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/sad_smile.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/shades_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/shades_smile.gif
deleted file mode 100644
index 7d93474c..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/shades_smile.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/shades_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/shades_smile.png
deleted file mode 100644
index fdaa28b7..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/shades_smile.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/teeth_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/teeth_smile.gif
deleted file mode 100644
index 44c37996..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/teeth_smile.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/teeth_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/teeth_smile.png
deleted file mode 100644
index 5e63785e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/teeth_smile.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_down.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_down.gif
deleted file mode 100644
index 5c8bee30..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_down.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_down.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_down.png
deleted file mode 100644
index 1823481f..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_down.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_up.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_up.gif
deleted file mode 100644
index 9cc37029..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_up.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_up.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_up.png
deleted file mode 100644
index d4e8b22a..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/thumbs_up.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tongue_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tongue_smile.gif
deleted file mode 100644
index 81e05b0f..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tongue_smile.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tongue_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tongue_smile.png
deleted file mode 100644
index 56553fbe..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tongue_smile.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tounge_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tounge_smile.gif
deleted file mode 100644
index 81e05b0f..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/tounge_smile.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif
deleted file mode 100644
index eef4fc00..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png
deleted file mode 100644
index f9714d1b..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/wink_smile.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/wink_smile.gif
deleted file mode 100644
index 6d3d64bd..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/wink_smile.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/wink_smile.png b/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/wink_smile.png
deleted file mode 100644
index 7c99c3fc..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/smiley/images/wink_smile.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt
deleted file mode 100644
index baadd2b7..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-
-cs.js Found: 118 Missing: 0
-cy.js Found: 118 Missing: 0
-de.js Found: 118 Missing: 0
-el.js Found: 16 Missing: 102
-eo.js Found: 118 Missing: 0
-et.js Found: 31 Missing: 87
-fa.js Found: 24 Missing: 94
-fi.js Found: 23 Missing: 95
-fr.js Found: 118 Missing: 0
-hr.js Found: 23 Missing: 95
-it.js Found: 118 Missing: 0
-nb.js Found: 118 Missing: 0
-nl.js Found: 118 Missing: 0
-no.js Found: 118 Missing: 0
-tr.js Found: 118 Missing: 0
-ug.js Found: 39 Missing: 79
-zh-cn.js Found: 118 Missing: 0
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ar.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ar.js
deleted file mode 100644
index acb6c923..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ar.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","ar",{euro:"رمز اليورو",lsquo:"علامة تنصيص Ùردية علي اليسار",rsquo:"علامة تنصيص Ùردية علي اليمين",ldquo:"علامة تنصيص مزدوجة علي اليسار",rdquo:"علامة تنصيص مزدوجة علي اليمين",ndash:"En dash",mdash:"Em dash",iexcl:"علامة تعجب مقلوبة",cent:"رمز السنت",pound:"رمز الاسترليني",curren:"رمز العملة",yen:"رمز الين",brvbar:"شريط مقطوع",sect:"رمز القسم",uml:"Diaeresis",copy:"علامة حقوق الطبع",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
-not:"ليست علامة",reg:"علامة مسجّلة",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"علامة الإستÙهام غير صحيحة",Agrave:"Latin capital letter A with grave accent",
-Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
-Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
-Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
-aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
-ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
-yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
-trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/bg.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/bg.js
deleted file mode 100644
index 0bf8749e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/bg.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","bg",{euro:"Евро знак",lsquo:"ЛÑва маркировка за цитат",rsquo:"ДÑÑна маркировка за цитат",ldquo:"ЛÑва двойна кавичка за цитат",rdquo:"ДÑÑна двойна кавичка за цитат",ndash:"\\\\",mdash:"/",iexcl:"Обърната питанка",cent:"Знак за цент",pound:"Знак за паунд",curren:"Валутен знак",yen:"Знак за йена",brvbar:"ПрекъÑната линиÑ",sect:"Знак за ÑекциÑ",uml:"Diaeresis",copy:"Знак за Copyright",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
-not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
-Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
-Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
-Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
-aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
-ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
-yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
-trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ca.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ca.js
deleted file mode 100644
index e6504372..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ca.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","ca",{euro:"Símbol d'euro",lsquo:"Signe de cometa simple esquerra",rsquo:"Signe de cometa simple dreta",ldquo:"Signe de cometa doble esquerra",rdquo:"Signe de cometa doble dreta",ndash:"Guió",mdash:"Guió baix",iexcl:"Signe d'exclamació inversa",cent:"Símbol de percentatge",pound:"Símbol de lliura",curren:"Símbol de moneda",yen:"Símbol de Yen",brvbar:"Barra trencada",sect:"Símbol de secció",uml:"Dièresi",copy:"Símbol de Copyright",ordf:"Indicador ordinal femení",
-laquo:"Signe de cometes angulars esquerra",not:"Símbol de negació",reg:"Símbol registrat",macr:"Macron",deg:"Símbol de grau",sup2:"Superíndex dos",sup3:"Superíndex tres",acute:"Accent agut",micro:"Símbol de micro",para:"Símbol de calderó",middot:"Punt volat",cedil:"Ce trencada",sup1:"Superíndex u",ordm:"Indicador ordinal masculí",raquo:"Signe de cometes angulars dreta",frac14:"Fracció vulgar un quart",frac12:"Fracció vulgar una meitat",frac34:"Fracció vulgar tres quarts",iquest:"Símbol d'interrogació invertit",
-Agrave:"Lletra majúscula llatina A amb accent greu",Aacute:"Lletra majúscula llatina A amb accent agut",Acirc:"Lletra majúscula llatina A amb circumflex",Atilde:"Lletra majúscula llatina A amb titlla",Auml:"Lletra majúscula llatina A amb dièresi",Aring:"Lletra majúscula llatina A amb anell superior",AElig:"Lletra majúscula llatina Æ",Ccedil:"Lletra majúscula llatina C amb ce trencada",Egrave:"Lletra majúscula llatina E amb accent greu",Eacute:"Lletra majúscula llatina E amb accent agut",Ecirc:"Lletra majúscula llatina E amb circumflex",
-Euml:"Lletra majúscula llatina E amb dièresi",Igrave:"Lletra majúscula llatina I amb accent greu",Iacute:"Lletra majúscula llatina I amb accent agut",Icirc:"Lletra majúscula llatina I amb circumflex",Iuml:"Lletra majúscula llatina I amb dièresi",ETH:"Lletra majúscula llatina Eth",Ntilde:"Lletra majúscula llatina N amb titlla",Ograve:"Lletra majúscula llatina O amb accent greu",Oacute:"Lletra majúscula llatina O amb accent agut",Ocirc:"Lletra majúscula llatina O amb circumflex",Otilde:"Lletra majúscula llatina O amb titlla",
-Ouml:"Lletra majúscula llatina O amb dièresi",times:"Símbol de multiplicació",Oslash:"Lletra majúscula llatina O amb barra",Ugrave:"Lletra majúscula llatina U amb accent greu",Uacute:"Lletra majúscula llatina U amb accent agut",Ucirc:"Lletra majúscula llatina U amb circumflex",Uuml:"Lletra majúscula llatina U amb dièresi",Yacute:"Lletra majúscula llatina Y amb accent agut",THORN:"Lletra majúscula llatina Thorn",szlig:"Lletra minúscula llatina sharp s",agrave:"Lletra minúscula llatina a amb accent greu",
-aacute:"Lletra minúscula llatina a amb accent agut",acirc:"Lletra minúscula llatina a amb circumflex",atilde:"Lletra minúscula llatina a amb titlla",auml:"Lletra minúscula llatina a amb dièresi",aring:"Lletra minúscula llatina a amb anell superior",aelig:"Lletra minúscula llatina æ",ccedil:"Lletra minúscula llatina c amb ce trencada",egrave:"Lletra minúscula llatina e amb accent greu",eacute:"Lletra minúscula llatina e amb accent agut",ecirc:"Lletra minúscula llatina e amb circumflex",euml:"Lletra minúscula llatina e amb dièresi",
-igrave:"Lletra minúscula llatina i amb accent greu",iacute:"Lletra minúscula llatina i amb accent agut",icirc:"Lletra minúscula llatina i amb circumflex",iuml:"Lletra minúscula llatina i amb dièresi",eth:"Lletra minúscula llatina eth",ntilde:"Lletra minúscula llatina n amb titlla",ograve:"Lletra minúscula llatina o amb accent greu",oacute:"Lletra minúscula llatina o amb accent agut",ocirc:"Lletra minúscula llatina o amb circumflex",otilde:"Lletra minúscula llatina o amb titlla",ouml:"Lletra minúscula llatina o amb dièresi",
-divide:"Símbol de divisió",oslash:"Lletra minúscula llatina o amb barra",ugrave:"Lletra minúscula llatina u amb accent greu",uacute:"Lletra minúscula llatina u amb accent agut",ucirc:"Lletra minúscula llatina u amb circumflex",uuml:"Lletra minúscula llatina u amb dièresi",yacute:"Lletra minúscula llatina y amb accent agut",thorn:"Lletra minúscula llatina thorn",yuml:"Lletra minúscula llatina y amb dièresi",OElig:"Lligadura majúscula llatina OE",oelig:"Lligadura minúscula llatina oe",372:"Lletra majúscula llatina W amb circumflex",
-374:"Lletra majúscula llatina Y amb circumflex",373:"Lletra minúscula llatina w amb circumflex",375:"Lletra minúscula llatina y amb circumflex",sbquo:"Signe de cita simple baixa-9",8219:"Signe de cita simple alta-invertida-9",bdquo:"Signe de cita doble baixa-9",hellip:"Punts suspensius",trade:"Símbol de marca registrada",9658:"Punter negre apuntant cap a la dreta",bull:"Vinyeta",rarr:"Fletxa cap a la dreta",rArr:"Doble fletxa cap a la dreta",hArr:"Doble fletxa esquerra dreta",diams:"Vestit negre diamant",
-asymp:"Gairebé igual a"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/cs.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/cs.js
deleted file mode 100644
index c2b38f0f..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/cs.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","cs",{euro:"Znak eura",lsquo:"PoÄáteÄní uvozovka jednoduchá",rsquo:"Koncová uvozovka jednoduchá",ldquo:"PoÄáteÄní uvozovka dvojitá",rdquo:"Koncová uvozovka dvojitá",ndash:"En pomlÄka",mdash:"Em pomlÄka",iexcl:"Obrácený vykÅ™iÄník",cent:"Znak centu",pound:"Znak libry",curren:"Znak mÄ›ny",yen:"Znak jenu",brvbar:"PÅ™eruÅ¡ená svislá Äára",sect:"Znak oddílu",uml:"PÅ™ehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených uvozovek vlevo",
-not:"Logistický zápor",reg:"Znak registrace",macr:"PomlÄka nad",deg:"Znak stupnÄ›",sup2:"Dvojka jako horní index",sup3:"Trojka jako horní index",acute:"Čárka nad vpravo",micro:"Znak mikro",para:"Znak odstavce",middot:"TeÄka uprostÅ™ed",cedil:"Ocásek vlevo",sup1:"JedniÄka jako horní index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených uvozovek vpravo",frac14:"ObyÄejný zlomek jedna Ätvrtina",frac12:"ObyÄejný zlomek jedna polovina",frac34:"ObyÄejný zlomek tÅ™i Ätvrtiny",iquest:"Znak obráceného otazníku",
-Agrave:"Velké písmeno latinky A s Äárkou nad vlevo",Aacute:"Velké písmeno latinky A s Äárkou nad vpravo",Acirc:"Velké písmeno latinky A s vokánÄ›m",Atilde:"Velké písmeno latinky A s tildou",Auml:"Velké písmeno latinky A s dvÄ›ma teÄkami",Aring:"Velké písmeno latinky A s kroužkem nad",AElig:"Velké písmeno latinky Ae",Ccedil:"Velké písmeno latinky C s ocáskem vlevo",Egrave:"Velké písmeno latinky E s Äárkou nad vlevo",Eacute:"Velké písmeno latinky E s Äárkou nad vpravo",Ecirc:"Velké písmeno latinky E s vokánÄ›m",
-Euml:"Velké písmeno latinky E s dvÄ›ma teÄkami",Igrave:"Velké písmeno latinky I s Äárkou nad vlevo",Iacute:"Velké písmeno latinky I s Äárkou nad vpravo",Icirc:"Velké písmeno latinky I s vokánÄ›m",Iuml:"Velké písmeno latinky I s dvÄ›ma teÄkami",ETH:"Velké písmeno latinky Eth",Ntilde:"Velké písmeno latinky N s tildou",Ograve:"Velké písmeno latinky O s Äárkou nad vlevo",Oacute:"Velké písmeno latinky O s Äárkou nad vpravo",Ocirc:"Velké písmeno latinky O s vokánÄ›m",Otilde:"Velké písmeno latinky O s tildou",
-Ouml:"Velké písmeno latinky O s dvÄ›ma teÄkami",times:"Znak násobení",Oslash:"Velké písmeno latinky O pÅ™eÅ¡krtnuté",Ugrave:"Velké písmeno latinky U s Äárkou nad vlevo",Uacute:"Velké písmeno latinky U s Äárkou nad vpravo",Ucirc:"Velké písmeno latinky U s vokánÄ›m",Uuml:"Velké písmeno latinky U s dvÄ›ma teÄkami",Yacute:"Velké písmeno latinky Y s Äárkou nad vpravo",THORN:"Velké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s Äárkou nad vlevo",aacute:"Malé písmeno latinky a s Äárkou nad vpravo",
-acirc:"Malé písmeno latinky a s vokánÄ›m",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvÄ›ma teÄkami",aring:"Malé písmeno latinky a s kroužkem nad",aelig:"Malé písmeno latinky ae",ccedil:"Malé písmeno latinky c s ocáskem vlevo",egrave:"Malé písmeno latinky e s Äárkou nad vlevo",eacute:"Malé písmeno latinky e s Äárkou nad vpravo",ecirc:"Malé písmeno latinky e s vokánÄ›m",euml:"Malé písmeno latinky e s dvÄ›ma teÄkami",igrave:"Malé písmeno latinky i s Äárkou nad vlevo",iacute:"Malé písmeno latinky i s Äárkou nad vpravo",
-icirc:"Malé písmeno latinky i s vokánÄ›m",iuml:"Malé písmeno latinky i s dvÄ›ma teÄkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s Äárkou nad vlevo",oacute:"Malé písmeno latinky o s Äárkou nad vpravo",ocirc:"Malé písmeno latinky o s vokánÄ›m",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvÄ›ma teÄkami",divide:"Znak dÄ›lení",oslash:"Malé písmeno latinky o pÅ™eÅ¡krtnuté",ugrave:"Malé písmeno latinky u s Äárkou nad vlevo",
-uacute:"Malé písmeno latinky u s Äárkou nad vpravo",ucirc:"Malé písmeno latinky u s vokánÄ›m",uuml:"Malé písmeno latinky u s dvÄ›ma teÄkami",yacute:"Malé písmeno latinky y s Äárkou nad vpravo",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvÄ›ma teÄkami",OElig:"Velká ligatura latinky OE",oelig:"Malá ligatura latinky OE",372:"Velké písmeno latinky W s vokánÄ›m",374:"Velké písmeno latinky Y s vokánÄ›m",373:"Malé písmeno latinky w s vokánÄ›m",375:"Malé písmeno latinky y s vokánÄ›m",sbquo:"Dolní 9 uvozovka jednoduchá",
-8219:"Horní obrácená 9 uvozovka jednoduchá",bdquo:"Dolní 9 uvozovka dvojitá",hellip:"TrojteÄkový úvod",trade:"Obchodní znaÄka",9658:"ÄŒerný ukazatel směřující vpravo",bull:"KoleÄko",rarr:"Å ipka vpravo",rArr:"Dvojitá Å¡ipka vpravo",hArr:"Dvojitá Å¡ipka vlevo a vpravo",diams:"ÄŒerné piky",asymp:"Téměř se rovná"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/cy.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/cy.js
deleted file mode 100644
index 77f59f61..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/cy.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","cy",{euro:"Arwydd yr Ewro",lsquo:"Dyfynnod chwith unigol",rsquo:"Dyfynnod dde unigol",ldquo:"Dyfynnod chwith dwbl",rdquo:"Dyfynnod dde dwbl",ndash:"Cysylltnod en",mdash:"Cysylltnod em",iexcl:"Ebychnod gwrthdro",cent:"Arwydd sent",pound:"Arwydd punt",curren:"Arwydd arian cyfred",yen:"Arwydd yen",brvbar:"Bar toriedig",sect:"Arwydd adran",uml:"Didolnod",copy:"Arwydd hawlfraint",ordf:"Dangosydd benywaidd",laquo:"Dyfynnod dwbl ar ongl i'r chwith",not:"Arwydd Nid",
-reg:"Arwydd cofrestredig",macr:"Macron",deg:"Arwydd gradd",sup2:"Dau uwchsgript",sup3:"Tri uwchsgript",acute:"Acen ddyrchafedig",micro:"Arwydd micro",para:"Arwydd pilcrow",middot:"Dot canol",cedil:"Sedila",sup1:"Un uwchsgript",ordm:"Dangosydd gwrywaidd",raquo:"Dyfynnod dwbl ar ongl i'r dde",frac14:"Ffracsiwn cyffredin un cwarter",frac12:"Ffracsiwn cyffredin un hanner",frac34:"Ffracsiwn cyffredin tri chwarter",iquest:"Marc cwestiwn gwrthdroëdig",Agrave:"Priflythyren A Lladinaidd gydag acen ddisgynedig",
-Aacute:"Priflythyren A Lladinaidd gydag acen ddyrchafedig",Acirc:"Priflythyren A Lladinaidd gydag acen grom",Atilde:"Priflythyren A Lladinaidd gyda thild",Auml:"Priflythyren A Lladinaidd gyda didolnod",Aring:"Priflythyren A Lladinaidd gyda chylch uwchben",AElig:"Priflythyren Æ Lladinaidd",Ccedil:"Priflythyren C Lladinaidd gyda sedila",Egrave:"Priflythyren E Lladinaidd gydag acen ddisgynedig",Eacute:"Priflythyren E Lladinaidd gydag acen ddyrchafedig",Ecirc:"Priflythyren E Lladinaidd gydag acen grom",
-Euml:"Priflythyren E Lladinaidd gyda didolnod",Igrave:"Priflythyren I Lladinaidd gydag acen ddisgynedig",Iacute:"Priflythyren I Lladinaidd gydag acen ddyrchafedig",Icirc:"Priflythyren I Lladinaidd gydag acen grom",Iuml:"Priflythyren I Lladinaidd gyda didolnod",ETH:"Priflythyren Eth",Ntilde:"Priflythyren N Lladinaidd gyda thild",Ograve:"Priflythyren O Lladinaidd gydag acen ddisgynedig",Oacute:"Priflythyren O Lladinaidd gydag acen ddyrchafedig",Ocirc:"Priflythyren O Lladinaidd gydag acen grom",Otilde:"Priflythyren O Lladinaidd gyda thild",
-Ouml:"Priflythyren O Lladinaidd gyda didolnod",times:"Arwydd lluosi",Oslash:"Priflythyren O Lladinaidd gyda strôc",Ugrave:"Priflythyren U Lladinaidd gydag acen ddisgynedig",Uacute:"Priflythyren U Lladinaidd gydag acen ddyrchafedig",Ucirc:"Priflythyren U Lladinaidd gydag acen grom",Uuml:"Priflythyren U Lladinaidd gyda didolnod",Yacute:"Priflythyren Y Lladinaidd gydag acen ddyrchafedig",THORN:"Priflythyren Thorn",szlig:"Llythyren s fach Lladinaidd siarp ",agrave:"Llythyren a fach Lladinaidd gydag acen ddisgynedig",
-aacute:"Llythyren a fach Lladinaidd gydag acen ddyrchafedig",acirc:"Llythyren a fach Lladinaidd gydag acen grom",atilde:"Llythyren a fach Lladinaidd gyda thild",auml:"Llythyren a fach Lladinaidd gyda didolnod",aring:"Llythyren a fach Lladinaidd gyda chylch uwchben",aelig:"Llythyren æ fach Lladinaidd",ccedil:"Llythyren c fach Lladinaidd gyda sedila",egrave:"Llythyren e fach Lladinaidd gydag acen ddisgynedig",eacute:"Llythyren e fach Lladinaidd gydag acen ddyrchafedig",ecirc:"Llythyren e fach Lladinaidd gydag acen grom",
-euml:"Llythyren e fach Lladinaidd gyda didolnod",igrave:"Llythyren i fach Lladinaidd gydag acen ddisgynedig",iacute:"Llythyren i fach Lladinaidd gydag acen ddyrchafedig",icirc:"Llythyren i fach Lladinaidd gydag acen grom",iuml:"Llythyren i fach Lladinaidd gyda didolnod",eth:"Llythyren eth fach",ntilde:"Llythyren n fach Lladinaidd gyda thild",ograve:"Llythyren o fach Lladinaidd gydag acen ddisgynedig",oacute:"Llythyren o fach Lladinaidd gydag acen ddyrchafedig",ocirc:"Llythyren o fach Lladinaidd gydag acen grom",
-otilde:"Llythyren o fach Lladinaidd gyda thild",ouml:"Llythyren o fach Lladinaidd gyda didolnod",divide:"Arwydd rhannu",oslash:"Llythyren o fach Lladinaidd gyda strôc",ugrave:"Llythyren u fach Lladinaidd gydag acen ddisgynedig",uacute:"Llythyren u fach Lladinaidd gydag acen ddyrchafedig",ucirc:"Llythyren u fach Lladinaidd gydag acen grom",uuml:"Llythyren u fach Lladinaidd gyda didolnod",yacute:"Llythyren y fach Lladinaidd gydag acen ddisgynedig",thorn:"Llythyren o fach Lladinaidd gyda strôc",yuml:"Llythyren y fach Lladinaidd gyda didolnod",
-OElig:"Priflythyren cwlwm OE Lladinaidd ",oelig:"Priflythyren cwlwm oe Lladinaidd ",372:"Priflythyren W gydag acen grom",374:"Priflythyren Y gydag acen grom",373:"Llythyren w fach gydag acen grom",375:"Llythyren y fach gydag acen grom",sbquo:"Dyfynnod sengl 9-isel",8219:"Dyfynnod sengl 9-uchel cildro",bdquo:"Dyfynnod dwbl 9-isel",hellip:"Coll geiriau llorweddol",trade:"Arwydd marc masnachol",9658:"Pwyntydd du i'r dde",bull:"Bwled",rarr:"Saeth i'r dde",rArr:"Saeth ddwbl i'r dde",hArr:"Saeth ddwbl i'r chwith",
-diams:"Siwt diemwnt du",asymp:"Bron yn hafal iddo"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/de.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/de.js
deleted file mode 100644
index 6b3ce87e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/de.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","de",{euro:"Euro Zeichen",lsquo:"Hochkomma links",rsquo:"Hochkomma rechts",ldquo:"Anführungszeichen links",rdquo:"Anführungszeichen rechts",ndash:"kleiner Strich",mdash:"mittlerer Strich",iexcl:"invertiertes Ausrufezeichen",cent:"Cent",pound:"Pfund",curren:"Währung",yen:"Yen",brvbar:"gestrichelte Linie",sect:"§ Zeichen",uml:"Diäresis",copy:"Copyright",ordf:"Feminine ordinal Anzeige",laquo:"Nach links zeigenden Doppel-Winkel Anführungszeichen",not:"Not-Zeichen",
-reg:"Registriert",macr:"Längezeichen",deg:"Grad",sup2:"Hoch 2",sup3:"Hoch 3",acute:"Akzentzeichen ",micro:"Micro",para:"Pilcrow-Zeichen",middot:"Mittelpunkt",cedil:"Cedilla",sup1:"Hoch 1",ordm:"Männliche Ordnungszahl Anzeige",raquo:"Nach rechts zeigenden Doppel-Winkel Anführungszeichen",frac14:"ein Viertel",frac12:"Hälfte",frac34:"Dreiviertel",iquest:"Umgekehrtes Fragezeichen",Agrave:"Lateinischer Buchstabe A mit AkzentGrave",Aacute:"Lateinischer Buchstabe A mit Akutakzent",Acirc:"Lateinischer Buchstabe A mit Zirkumflex",
-Atilde:"Lateinischer Buchstabe A mit Tilde",Auml:"Lateinischer Buchstabe A mit Trema",Aring:"Lateinischer Buchstabe A mit Ring oben",AElig:"Lateinischer Buchstabe Æ",Ccedil:"Lateinischer Buchstabe C mit Cedille",Egrave:"Lateinischer Buchstabe E mit AkzentGrave",Eacute:"Lateinischer Buchstabe E mit Akutakzent",Ecirc:"Lateinischer Buchstabe E mit Zirkumflex",Euml:"Lateinischer Buchstabe E Trema",Igrave:"Lateinischer Buchstabe I mit AkzentGrave",Iacute:"Lateinischer Buchstabe I mit Akutakzent",Icirc:"Lateinischer Buchstabe I mit Zirkumflex",
-Iuml:"Lateinischer Buchstabe I mit Trema",ETH:"Lateinischer Buchstabe Eth",Ntilde:"Lateinischer Buchstabe N mit Tilde",Ograve:"Lateinischer Buchstabe O mit AkzentGrave",Oacute:"Lateinischer Buchstabe O mit Akutakzent",Ocirc:"Lateinischer Buchstabe O mit Zirkumflex",Otilde:"Lateinischer Buchstabe O mit Tilde",Ouml:"Lateinischer Buchstabe O mit Trema",times:"Multiplikation",Oslash:"Lateinischer Buchstabe O durchgestrichen",Ugrave:"Lateinischer Buchstabe U mit Akzentgrave",Uacute:"Lateinischer Buchstabe U mit Akutakzent",
-Ucirc:"Lateinischer Buchstabe U mit Zirkumflex",Uuml:"Lateinischer Buchstabe a mit Trema",Yacute:"Lateinischer Buchstabe a mit Akzent",THORN:"Lateinischer Buchstabe mit Dorn",szlig:"Kleiner lateinischer Buchstabe scharfe s",agrave:"Kleiner lateinischer Buchstabe a mit Accent grave",aacute:"Kleiner lateinischer Buchstabe a mit Akut",acirc:"Lateinischer Buchstabe a mit Zirkumflex",atilde:"Lateinischer Buchstabe a mit Tilde",auml:"Kleiner lateinischer Buchstabe a mit Trema",aring:"Kleiner lateinischer Buchstabe a mit Ring oben",
-aelig:"Lateinischer Buchstabe æ",ccedil:"Kleiner lateinischer Buchstabe c mit Cedille",egrave:"Kleiner lateinischer Buchstabe e mit Accent grave",eacute:"Kleiner lateinischer Buchstabe e mit Akut",ecirc:"Kleiner lateinischer Buchstabe e mit Zirkumflex",euml:"Kleiner lateinischer Buchstabe e mit Trema",igrave:"Kleiner lateinischer Buchstabe i mit AkzentGrave",iacute:"Kleiner lateinischer Buchstabe i mit Akzent",icirc:"Kleiner lateinischer Buchstabe i mit Zirkumflex",iuml:"Kleiner lateinischer Buchstabe i mit Trema",
-eth:"Kleiner lateinischer Buchstabe eth",ntilde:"Kleiner lateinischer Buchstabe n mit Tilde",ograve:"Kleiner lateinischer Buchstabe o mit Accent grave",oacute:"Kleiner lateinischer Buchstabe o mit Akzent",ocirc:"Kleiner lateinischer Buchstabe o mit Zirkumflex",otilde:"Lateinischer Buchstabe i mit Tilde",ouml:"Kleiner lateinischer Buchstabe o mit Trema",divide:"Divisionszeichen",oslash:"Kleiner lateinischer Buchstabe o durchgestrichen",ugrave:"Kleiner lateinischer Buchstabe u mit Accent grave",uacute:"Kleiner lateinischer Buchstabe u mit Akut",
-ucirc:"Kleiner lateinischer Buchstabe u mit Zirkumflex",uuml:"Kleiner lateinischer Buchstabe u mit Trema",yacute:"Kleiner lateinischer Buchstabe y mit Akut",thorn:"Kleiner lateinischer Buchstabe Dorn",yuml:"Kleiner lateinischer Buchstabe y mit Trema",OElig:"Lateinischer Buchstabe Ligatur OE",oelig:"Kleiner lateinischer Buchstabe Ligatur OE",372:"Lateinischer Buchstabe W mit Zirkumflex",374:"Lateinischer Buchstabe Y mit Zirkumflex",373:"Kleiner lateinischer Buchstabe w mit Zirkumflex",375:"Kleiner lateinischer Buchstabe y mit Zirkumflex",
-sbquo:"Tiefergestelltes Komma",8219:"Rumgedrehtes Komma",bdquo:"Doppeltes Anführungszeichen unten",hellip:"horizontale Auslassungspunkte",trade:"Handelszeichen",9658:"Dreickspfeil rechts",bull:"Bullet",rarr:"Pfeil rechts",rArr:"Doppelpfeil rechts",hArr:"Doppelpfeil links",diams:"Karo",asymp:"Ungefähr"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/el.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/el.js
deleted file mode 100644
index e7c2a219..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/el.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","el",{euro:"ΣÏμβολο ΕυÏÏŽ",lsquo:"ΑÏιστεÏός χαÏακτήÏας Î¼Î¿Î½Î¿Ï ÎµÎ¹ÏƒÎ±Î³Ï‰Î³Î¹ÎºÎ¿Ï",rsquo:"Δεξιός χαÏακτήÏας Î¼Î¿Î½Î¿Ï ÎµÎ¹ÏƒÎ±Î³Ï‰Î³Î¹ÎºÎ¿Ï",ldquo:"ΑÏιστεÏός χαÏακτήÏας Î´Î¹Ï€Î»Î¿Ï ÎµÎ¹ÏƒÎ±Î³Ï‰Î³Î¹ÎºÎ¿Ï",rdquo:"Δεξιός χαÏακτήÏας Î´Î¹Ï€Î»Î¿Ï ÎµÎ¹ÏƒÎ±Î³Ï‰Î³Î¹ÎºÎ¿Ï",ndash:"ΠαÏλα en",mdash:"ΠαÏλα em",iexcl:"Ανάποδο θαυμαστικό",cent:"ΣÏμβολο σεντ",pound:"ΣÏμβολο λίÏας",curren:"ΣÏμβολο συναλλαγματικής μονάδας",yen:"ΣÏμβολο Γιεν",brvbar:"Σπασμένη μπάÏα",sect:"ΣÏμβολο τμήματος",uml:"ΔιαίÏεση",copy:"ΣÏμβολο πνευματικών δικαιωμάτων",
-ordf:"Feminine ordinal indicator",laquo:"ΑÏιστεÏός χαÏακτήÏας Î´Î¹Ï€Î»Î¿Ï ÎµÎ¹ÏƒÎ±Î³Ï‰Î³Î¹ÎºÎ¿Ï",not:"Not sign",reg:"ΣÏμβολο σημάτων κατατεθέν",macr:"ΜακÏόν",deg:"ΣÏμβολο βαθμοÏ",sup2:"Εκτεθειμένο δÏο",sup3:"Εκτεθειμένο Ï„Ïία",acute:"Οξεία",micro:"ΣÏμβολο μικÏοÏ",para:"ΣÏμβολο παÏαγÏάφου",middot:"Μέση τελεία",cedil:"ΥπογεγÏαμμένη",sup1:"Εκτεθειμένο ένα",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Γνήσιο κλάσμα ενός τετάÏτου",frac12:"Γνήσιο κλάσμα ενός δεÏτεÏου",frac34:"Γνήσιο κλάσμα Ï„Ïιών τετάÏτων",
-iquest:"Ανάποδο θαυμαστικό",Agrave:"Λατινικό κεφαλαίο γÏάμμα A με βαÏεία",Aacute:"Λατινικό κεφαλαίο γÏάμμα A με οξεία",Acirc:"Λατινικό κεφαλαίο γÏάμμα A με πεÏισπωμένη",Atilde:"Λατινικό κεφαλαίο γÏάμμα A με πεÏισπωμένη",Auml:"Λατινικό κεφαλαίο γÏάμμα A με διαλυτικά",Aring:"Λατινικό κεφαλαίο γÏάμμα A με δακτÏλιο επάνω",AElig:"Λατινικό κεφαλαίο γÏάμμα Æ",Ccedil:"Λατινικό κεφαλαίο γÏάμμα C με υπογεγÏαμμένη",Egrave:"Λατινικό κεφαλαίο γÏάμμα E με βαÏεία",Eacute:"Λατινικό κεφαλαίο γÏάμμα E με οξεία",Ecirc:"Λατινικό κεφαλαίο γÏάμμα Ε με πεÏισπωμένη ",
-Euml:"Λατινικό κεφαλαίο γÏάμμα Ε με διαλυτικά",Igrave:"Λατινικό κεφαλαίο γÏάμμα I με βαÏεία",Iacute:"Λατινικό κεφαλαίο γÏάμμα I με οξεία",Icirc:"Λατινικό κεφαλαίο γÏάμμα I με πεÏισπωμένη",Iuml:"Λατινικό κεφαλαίο γÏάμμα I με διαλυτικά ",ETH:"Λατινικό κεφαλαίο γÏάμμα Eth",Ntilde:"Λατινικό κεφαλαίο γÏάμμα N με πεÏισπωμένη",Ograve:"Λατινικό κεφαλαίο γÏάμμα O με βαÏεία",Oacute:"Λατινικό κεφαλαίο γÏάμμα O με οξεία",Ocirc:"Λατινικό κεφαλαίο γÏάμμα O με πεÏισπωμένη ",Otilde:"Λατινικό κεφαλαίο γÏάμμα O με πεÏισπωμένη",
-Ouml:"Λατινικό κεφαλαίο γÏάμμα O με διαλυτικά",times:"ΣÏμβολο πολλαπλασιασμοÏ",Oslash:"Λατινικό κεφαλαίο γÏάμμα O με μολυβιά",Ugrave:"Λατινικό κεφαλαίο γÏάμμα U με βαÏεία",Uacute:"Λατινικό κεφαλαίο γÏάμμα U με οξεία",Ucirc:"Λατινικό κεφαλαίο γÏάμμα U με πεÏισπωμένη",Uuml:"Λατινικό κεφαλαίο γÏάμμα U με διαλυτικά",Yacute:"Λατινικό κεφαλαίο γÏάμμα Y με οξεία",THORN:"Λατινικό κεφαλαίο γÏάμμα Thorn",szlig:"Λατινικό μικÏÏŒ γÏάμμα απότομο s",agrave:"Λατινικό μικÏÏŒ γÏάμμα a με βαÏεία",aacute:"Λατινικό μικÏÏŒ γÏάμμα a με οξεία",
-acirc:"Λατινικό μικÏÏŒ γÏάμμα a με πεÏισπωμένη",atilde:"Λατινικό μικÏÏŒ γÏάμμα a με πεÏισπωμένη",auml:"Λατινικό μικÏÏŒ γÏάμμα a με διαλυτικά",aring:"Λατινικό μικÏÏŒ γÏάμμα a με δακτÏλιο πάνω",aelig:"Λατινικό μικÏÏŒ γÏάμμα æ",ccedil:"Λατινικό μικÏÏŒ γÏάμμα c με υπογεγÏαμμένη",egrave:"Λατινικό μικÏÏŒ γÏάμμα ε με βαÏεία",eacute:"Λατινικό μικÏÏŒ γÏάμμα e με οξεία",ecirc:"Λατινικό μικÏÏŒ γÏάμμα e με πεÏισπωμένη",euml:"Λατινικό μικÏÏŒ γÏάμμα e με διαλυτικά",igrave:"Λατινικό μικÏÏŒ γÏάμμα i με βαÏεία",iacute:"Λατινικό μικÏÏŒ γÏάμμα i με οξεία",
-icirc:"Λατινικό μικÏÏŒ γÏάμμα i με πεÏισπωμένη",iuml:"Λατινικό μικÏÏŒ γÏάμμα i με διαλυτικά",eth:"Λατινικό μικÏÏŒ γÏάμμα eth",ntilde:"Λατινικό μικÏÏŒ γÏάμμα n με πεÏισπωμένη",ograve:"Λατινικό μικÏÏŒ γÏάμμα o με βαÏεία",oacute:"Λατινικό μικÏÏŒ γÏάμμα o με οξεία ",ocirc:"Λατινικό πεζό γÏάμμα o με πεÏισπωμένη",otilde:"Λατινικό μικÏÏŒ γÏάμμα o με πεÏισπωμένη ",ouml:"Λατινικό μικÏÏŒ γÏάμμα o με διαλυτικά",divide:"ΣÏμβολο διαίÏεσης",oslash:"Λατινικό μικÏÏŒ γÏάμμα o με πεÏισπωμένη",ugrave:"Λατινικό μικÏÏŒ γÏάμμα u με βαÏεία",
-uacute:"Λατινικό μικÏÏŒ γÏάμμα u με οξεία",ucirc:"Λατινικό μικÏÏŒ γÏάμμα u με πεÏισπωμένη",uuml:"Λατινικό μικÏÏŒ γÏάμμα u με διαλυτικά",yacute:"Λατινικό μικÏÏŒ γÏάμμα y με οξεία",thorn:"Λατινικό μικÏÏŒ γÏάμμα thorn",yuml:"Λατινικό μικÏÏŒ γÏάμμα y με διαλυτικά",OElig:"Λατινικό κεφαλαίο σÏμπλεγμα ΟΕ",oelig:"Λατινικό μικÏÏŒ σÏμπλεγμα oe",372:"Λατινικό κεφαλαίο γÏάμμα W με πεÏισπωμένη",374:"Λατινικό κεφαλαίο γÏάμμα Y με πεÏισπωμένη",373:"Λατινικό μικÏÏŒ γÏάμμα w με πεÏισπωμένη",375:"Λατινικό μικÏÏŒ γÏάμμα y με πεÏισπωμένη",
-sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"ΟÏιζόντια αποσιωπητικά",trade:"ΣÏμβολο εμποÏÎ¹ÎºÎ¿Ï ÎºÎ±Ï„Î±Ï„ÎµÎ¸Î­Î½",9658:"ΜαÏÏος δείκτης που δείχνει Ï€Ïος τα δεξιά",bull:"Κουκκίδα",rarr:"Δεξί βελάκι",rArr:"Διπλό δεξί βελάκι",hArr:"Διπλό βελάκι αÏιστεÏά-δεξιά",diams:"ΜαÏÏο διαμάντι",asymp:"Σχεδόν ίσο με"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js
deleted file mode 100644
index 5a147863..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","en-gb",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
-not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
-Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
-Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
-Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
-aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
-ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
-yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
-trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/en.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/en.js
deleted file mode 100644
index 26f61c2e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/en.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","en",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Yen sign",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
-not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
-Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
-Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
-Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
-aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
-ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
-yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
-trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/eo.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/eo.js
deleted file mode 100644
index d44b0d2e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/eo.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","eo",{euro:"Eŭrosigno",lsquo:"Supra 6-citilo",rsquo:"Supra 9-citilo",ldquo:"Supra 66-citilo",rdquo:"Supra 99-citilo",ndash:"Streketo",mdash:"Substreko",iexcl:"Renversita krisigno",cent:"Cendosigno",pound:"Pundosigno",curren:"Monersigno",yen:"Enosigno",brvbar:"Rompita vertikala streko",sect:"Kurba paragrafo",uml:"Tremao",copy:"Kopirajtosigno",ordf:"Adjektiva numerfinaĵo",laquo:"Duobla malplio-citilo",not:"Negohoko",reg:"Registrita marko",macr:"Superstreko",deg:"Gradosigno",
-sup2:"Supra indico 2",sup3:"Supra indico 3",acute:"Dekstra korno",micro:"Mikrosigno",para:"Rekta paragrafo",middot:"Meza punkto",cedil:"Zoeto",sup1:"Supra indico 1",ordm:"Substantiva numerfinaĵo",raquo:"Duobla plio-citilo",frac14:"Kvaronosigno",frac12:"Duonosigno",frac34:"Trikvaronosigno",iquest:"renversita demandosigno",Agrave:"Latina ĉeflitero A kun liva korno",Aacute:"Latina ĉeflitero A kun dekstra korno",Acirc:"Latina ĉeflitero A kun ĉapelo",Atilde:"Latina ĉeflitero A kun tildo",Auml:"Latina ĉeflitero A kun tremao",
-Aring:"Latina ĉeflitero A kun superringo",AElig:"Latina ĉeflitera ligaturo Æ",Ccedil:"Latina ĉeflitero C kun zoeto",Egrave:"Latina ĉeflitero E kun liva korno",Eacute:"Latina ĉeflitero E kun dekstra korno",Ecirc:"Latina ĉeflitero E kun ĉapelo",Euml:"Latina ĉeflitero E kun tremao",Igrave:"Latina ĉeflitero I kun liva korno",Iacute:"Latina ĉeflitero I kun dekstra korno",Icirc:"Latina ĉeflitero I kun ĉapelo",Iuml:"Latina ĉeflitero I kun tremao",ETH:"Latina ĉeflitero islanda edo",Ntilde:"Latina ĉeflitero N kun tildo",
-Ograve:"Latina ĉeflitero O kun liva korno",Oacute:"Latina ĉeflitero O kun dekstra korno",Ocirc:"Latina ĉeflitero O kun ĉapelo",Otilde:"Latina ĉeflitero O kun tildo",Ouml:"Latina ĉeflitero O kun tremao",times:"Multipliko",Oslash:"Latina ĉeflitero O trastrekita",Ugrave:"Latina ĉeflitero U kun liva korno",Uacute:"Latina ĉeflitero U kun dekstra korno",Ucirc:"Latina ĉeflitero U kun ĉapelo",Uuml:"Latina ĉeflitero U kun tremao",Yacute:"Latina ĉeflitero Y kun dekstra korno",THORN:"Latina ĉeflitero islanda dorno",
-szlig:"Latina etlitero germana sozo (akra s)",agrave:"Latina etlitero a kun liva korno",aacute:"Latina etlitero a kun dekstra korno",acirc:"Latina etlitero a kun ĉapelo",atilde:"Latina etlitero a kun tildo",auml:"Latina etlitero a kun tremao",aring:"Latina etlitero a kun superringo",aelig:"Latina etlitera ligaturo æ",ccedil:"Latina etlitero c kun zoeto",egrave:"Latina etlitero e kun liva korno",eacute:"Latina etlitero e kun dekstra korno",ecirc:"Latina etlitero e kun ĉapelo",euml:"Latina etlitero e kun tremao",
-igrave:"Latina etlitero i kun liva korno",iacute:"Latina etlitero i kun dekstra korno",icirc:"Latina etlitero i kun ĉapelo",iuml:"Latina etlitero i kun tremao",eth:"Latina etlitero islanda edo",ntilde:"Latina etlitero n kun tildo",ograve:"Latina etlitero o kun liva korno",oacute:"Latina etlitero o kun dekstra korno",ocirc:"Latina etlitero o kun ĉapelo",otilde:"Latina etlitero o kun tildo",ouml:"Latina etlitero o kun tremao",divide:"Dividosigno",oslash:"Latina etlitero o trastrekita",ugrave:"Latina etlitero u kun liva korno",
-uacute:"Latina etlitero u kun dekstra korno",ucirc:"Latina etlitero u kun ĉapelo",uuml:"Latina etlitero u kun tremao",yacute:"Latina etlitero y kun dekstra korno",thorn:"Latina etlitero islanda dorno",yuml:"Latina etlitero y kun tremao",OElig:"Latina ĉeflitera ligaturo Œ",oelig:"Latina etlitera ligaturo œ",372:"Latina ĉeflitero W kun ĉapelo",374:"Latina ĉeflitero Y kun ĉapelo",373:"Latina etlitero w kun ĉapelo",375:"Latina etlitero y kun ĉapelo",sbquo:"Suba 9-citilo",8219:"Supra renversita 9-citilo",
-bdquo:"Suba 99-citilo",hellip:"Tripunkto",trade:"Varmarka signo",9658:"Nigra sago dekstren",bull:"Bulmarko",rarr:"Sago dekstren",rArr:"Duobla sago dekstren",hArr:"Duobla sago maldekstren",diams:"Nigra kvadrato",asymp:"PreskaÅ­ egala"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/es.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/es.js
deleted file mode 100644
index 79d437f9..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/es.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","es",{euro:"Símbolo de euro",lsquo:"Comilla simple izquierda",rsquo:"Comilla simple derecha",ldquo:"Comilla doble izquierda",rdquo:"Comilla doble derecha",ndash:"Guión corto",mdash:"Guión medio largo",iexcl:"Signo de admiración invertido",cent:"Símbolo centavo",pound:"Símbolo libra",curren:"Símbolo moneda",yen:"Símbolo yen",brvbar:"Barra vertical rota",sect:"Símbolo sección",uml:"Diéresis",copy:"Signo de derechos de autor",ordf:"Indicador ordinal femenino",laquo:"Abre comillas angulares",
-not:"Signo negación",reg:"Signo de marca registrada",macr:"Guión alto",deg:"Signo de grado",sup2:"Superíndice dos",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice uno",ordm:"Indicador orginal masculino",raquo:"Cierra comillas angulares",frac14:"Fracción ordinaria de un quarto",frac12:"Fracción ordinaria de una mitad",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina mayúscula con acento grave",
-Aacute:"Letra A latina mayúscula con acento agudo",Acirc:"Letra A latina mayúscula con acento circunflejo",Atilde:"Letra A latina mayúscula con tilde",Auml:"Letra A latina mayúscula con diéresis",Aring:"Letra A latina mayúscula con aro arriba",AElig:"Letra Æ latina mayúscula",Ccedil:"Letra C latina mayúscula con cedilla",Egrave:"Letra E latina mayúscula con acento grave",Eacute:"Letra E latina mayúscula con acento agudo",Ecirc:"Letra E latina mayúscula con acento circunflejo",Euml:"Letra E latina mayúscula con diéresis",
-Igrave:"Letra I latina mayúscula con acento grave",Iacute:"Letra I latina mayúscula con acento agudo",Icirc:"Letra I latina mayúscula con acento circunflejo",Iuml:"Letra I latina mayúscula con diéresis",ETH:"Letra Eth latina mayúscula",Ntilde:"Letra N latina mayúscula con tilde",Ograve:"Letra O latina mayúscula con acento grave",Oacute:"Letra O latina mayúscula con acento agudo",Ocirc:"Letra O latina mayúscula con acento circunflejo",Otilde:"Letra O latina mayúscula con tilde",Ouml:"Letra O latina mayúscula con diéresis",
-times:"Signo de multiplicación",Oslash:"Letra O latina mayúscula con barra inclinada",Ugrave:"Letra U latina mayúscula con acento grave",Uacute:"Letra U latina mayúscula con acento agudo",Ucirc:"Letra U latina mayúscula con acento circunflejo",Uuml:"Letra U latina mayúscula con diéresis",Yacute:"Letra Y latina mayúscula con acento agudo",THORN:"Letra Thorn latina mayúscula",szlig:"Letra s latina fuerte pequeña",agrave:"Letra a latina pequeña con acento grave",aacute:"Letra a latina pequeña con acento agudo",
-acirc:"Letra a latina pequeña con acento circunflejo",atilde:"Letra a latina pequeña con tilde",auml:"Letra a latina pequeña con diéresis",aring:"Letra a latina pequeña con aro arriba",aelig:"Letra æ latina pequeña",ccedil:"Letra c latina pequeña con cedilla",egrave:"Letra e latina pequeña con acento grave",eacute:"Letra e latina pequeña con acento agudo",ecirc:"Letra e latina pequeña con acento circunflejo",euml:"Letra e latina pequeña con diéresis",igrave:"Letra i latina pequeña con acento grave",
-iacute:"Letra i latina pequeña con acento agudo",icirc:"Letra i latina pequeña con acento circunflejo",iuml:"Letra i latina pequeña con diéresis",eth:"Letra eth latina pequeña",ntilde:"Letra n latina pequeña con tilde",ograve:"Letra o latina pequeña con acento grave",oacute:"Letra o latina pequeña con acento agudo",ocirc:"Letra o latina pequeña con acento circunflejo",otilde:"Letra o latina pequeña con tilde",ouml:"Letra o latina pequeña con diéresis",divide:"Signo de división",oslash:"Letra o latina minúscula con barra inclinada",
-ugrave:"Letra u latina pequeña con acento grave",uacute:"Letra u latina pequeña con acento agudo",ucirc:"Letra u latina pequeña con acento circunflejo",uuml:"Letra u latina pequeña con diéresis",yacute:"Letra u latina pequeña con acento agudo",thorn:"Letra thorn latina minúscula",yuml:"Letra y latina pequeña con diéresis",OElig:"Diptongo OE latino en mayúscula",oelig:"Diptongo oe latino en minúscula",372:"Letra W latina mayúscula con acento circunflejo",374:"Letra Y latina mayúscula con acento circunflejo",
-373:"Letra w latina pequeña con acento circunflejo",375:"Letra y latina pequeña con acento circunflejo",sbquo:"Comilla simple baja-9",8219:"Comilla simple alta invertida-9",bdquo:"Comillas dobles bajas-9",hellip:"Puntos suspensivos horizontales",trade:"Signo de marca registrada",9658:"Apuntador negro apuntando a la derecha",bull:"Viñeta",rarr:"Flecha a la derecha",rArr:"Flecha doble a la derecha",hArr:"Flecha izquierda derecha doble",diams:"Diamante negro",asymp:"Casi igual a"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/et.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/et.js
deleted file mode 100644
index 22c90561..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/et.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","et",{euro:"Euromärk",lsquo:"Alustav ühekordne jutumärk",rsquo:"Lõpetav ühekordne jutumärk",ldquo:"Alustav kahekordne jutumärk",rdquo:"Lõpetav kahekordne jutumärk",ndash:"Enn-kriips",mdash:"Emm-kriips",iexcl:"Pööratud hüüumärk",cent:"Sendimärk",pound:"Naela märk",curren:"Valuutamärk",yen:"Jeeni märk",brvbar:"Katkestatud kriips",sect:"Lõigu märk",uml:"Täpid",copy:"Autoriõiguse märk",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
-not:"Ei-märk",reg:"Registered sign",macr:"Macron",deg:"Kraadimärk",sup2:"Ülaindeks kaks",sup3:"Ülaindeks kolm",acute:"Acute accent",micro:"Mikro-märk",para:"Pilcrow sign",middot:"Keskpunkt",cedil:"Cedilla",sup1:"Ülaindeks üks",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
-Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Ladina suur A tildega",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
-Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Täppidega ladina suur O",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
-Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Kandilise katusega suur ladina U",Uuml:"Täppidega ladina suur U",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Ladina väike terav s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Kandilise katusega ladina väike a",atilde:"Tildega ladina väike a",auml:"Täppidega ladina väike a",aring:"Latin small letter a with ring above",
-aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",
-ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jagamismärk",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",
-thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Kaubamärgi märk",9658:"Black right-pointing pointer",
-bull:"Kuul",rarr:"Nool paremale",rArr:"Topeltnool paremale",hArr:"Topeltnool vasakule",diams:"Black diamond suit",asymp:"Ligikaudu võrdne"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fa.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fa.js
deleted file mode 100644
index e0b27c59..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fa.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","fa",{euro:"نشان یورو",lsquo:"علامت نقل قول تکی چپ",rsquo:"علامت نقل قول تکی راست",ldquo:"علامت نقل قول دوتایی چپ",rdquo:"علامت نقل قول دوتایی راست",ndash:"خط تیره En",mdash:"خط تیره Em",iexcl:"علامت تعجب وارونه",cent:"نشان سنت",pound:"نشان پوند",curren:"نشان ارز",yen:"نشان ین",brvbar:"نوار شکسته",sect:"نشان بخش",uml:"نشان سواگیری",copy:"نشان کپی رایت",ordf:"شاخص ترتیبی مونث",laquo:"اشاره چپ مکرر برای زاویه علامت نقل قول",not:"نشان ثبت نشده",reg:"نشان ثبت شده",
-macr:"نشان خط بالای حرÙ",deg:"نشان درجه",sup2:"بالانویس دو",sup3:"بالانویس سه",acute:"لهجه غلیظ",micro:"نشان مایکرو",para:"نشان محل بند",middot:"نقطه میانی",cedil:"سدیل",sup1:"بالانویس 1",ordm:"شاخص ترتیبی مذکر",raquo:"نشان زاویه‌دار دوتایی نقل قول راست چین",frac14:"واحد عامیانه 1/4",frac12:"واحد عامینه نصÙ",frac34:"واحد عامیانه 3/4",iquest:"علامت سوال معکوس",Agrave:"حر٠A بزرگ لاتین با تلÙظ غلیظ",Aacute:"حر٠A بزرگ لاتین با تلÙظ شدید",Acirc:"حر٠A بزرگ لاتین با دور",Atilde:"حر٠A بزرگ لاتین با صدای کامی",
-Auml:"حر٠A بزرگ لاتین با نشان سواگیری",Aring:"حر٠A بزرگ لاتین با حلقه بالا",AElig:"حر٠Æ بزرگ لاتین",Ccedil:"حر٠C بزرگ لاتین با نشان سواگیری",Egrave:"حر٠E بزرگ لاتین با تلÙظ درشت",Eacute:"حر٠E بزرگ لاتین با تلÙظ زیر",Ecirc:"حر٠E بزرگ لاتین با خمان",Euml:"حر٠E بزرگ لاتین با نشان سواگیری",Igrave:"حر٠I بزرگ لاتین با تلÙظ درشت",Iacute:"حر٠I بزرگ لاتین با تلÙظ ریز",Icirc:"حر٠I بزرگ لاتین با خمان",Iuml:"حر٠I بزرگ لاتین با نشان سواگیری",ETH:"حر٠لاتین بزرگ واکه ترتیبی",Ntilde:"حر٠N بزرگ لاتین با مد",
-Ograve:"حر٠O بزرگ لاتین با تلÙظ درشت",Oacute:"حر٠O بزرگ لاتین با تلÙظ ریز",Ocirc:"حر٠O بزرگ لاتین با خمان",Otilde:"حر٠O بزرگ لاتین با مد",Ouml:"حر٠O بزرگ لاتین با نشان سواگیری",times:"نشان ضربدر",Oslash:"حر٠O بزرگ لاتین با میان خط",Ugrave:"حر٠U بزرگ لاتین با تلÙظ درشت",Uacute:"حر٠U بزرگ لاتین با تلÙظ ریز",Ucirc:"حر٠U بزرگ لاتین با خمان",Uuml:"حر٠U بزرگ لاتین با نشان سواگیری",Yacute:"حر٠Y بزرگ لاتین با تلÙظ ریز",THORN:"حر٠بزرگ لاتین خاردار",szlig:"حر٠کوچک لاتین شارپ s",agrave:"حر٠a Ú©ÙˆÚ†Ú© لاتین با تلÙظ درشت",
-aacute:"حر٠a Ú©ÙˆÚ†Ú© لاتین با تلÙظ ریز",acirc:"حر٠a Ú©ÙˆÚ†Ú© لاتین با خمان",atilde:"حر٠a Ú©ÙˆÚ†Ú© لاتین با صدای کامی",auml:"حر٠a Ú©ÙˆÚ†Ú© لاتین با نشان سواگیری",aring:"حر٠a Ú©ÙˆÚ†Ú© لاتین گوشواره دار",aelig:"حر٠کوچک لاتین æ",ccedil:"حر٠c Ú©ÙˆÚ†Ú© لاتین با نشان سدیل",egrave:"حر٠e Ú©ÙˆÚ†Ú© لاتین با تلÙظ درشت",eacute:"حر٠e Ú©ÙˆÚ†Ú© لاتین با تلÙظ ریز",ecirc:"حر٠e Ú©ÙˆÚ†Ú© لاتین با خمان",euml:"حر٠e Ú©ÙˆÚ†Ú© لاتین با نشان سواگیری",igrave:"حر٠i Ú©ÙˆÚ†Ú© لاتین با تلÙظ درشت",iacute:"حر٠i Ú©ÙˆÚ†Ú© لاتین با تلÙظ ریز",icirc:"حر٠i Ú©ÙˆÚ†Ú© لاتین با خمان",
-iuml:"حر٠i Ú©ÙˆÚ†Ú© لاتین با نشان سواگیری",eth:"حر٠کوچک لاتین eth",ntilde:"حر٠n Ú©ÙˆÚ†Ú© لاتین با صدای کامی",ograve:"حر٠o Ú©ÙˆÚ†Ú© لاتین با تلÙظ درشت",oacute:"حر٠o Ú©ÙˆÚ†Ú© لاتین با تلÙظ زیر",ocirc:"حر٠o Ú©ÙˆÚ†Ú© لاتین با خمان",otilde:"حر٠o Ú©ÙˆÚ†Ú© لاتین با صدای کامی",ouml:"حر٠o Ú©ÙˆÚ†Ú© لاتین با نشان سواگیری",divide:"نشان بخش",oslash:"حر٠o Ú©ÙˆÚ†Ú© لاتین با میان خط",ugrave:"حر٠u Ú©ÙˆÚ†Ú© لاتین با تلÙظ درشت",uacute:"حر٠u Ú©ÙˆÚ†Ú© لاتین با تلÙظ ریز",ucirc:"حر٠u Ú©ÙˆÚ†Ú© لاتین با خمان",uuml:"حر٠u Ú©ÙˆÚ†Ú© لاتین با نشان سواگیری",yacute:"حر٠y Ú©ÙˆÚ†Ú© لاتین با تلÙظ ریز",
-thorn:"حر٠کوچک لاتین خاردار",yuml:"حر٠y Ú©ÙˆÚ†Ú© لاتین با نشان سواگیری",OElig:"بند بزرگ لاتین OE",oelig:"بند Ú©ÙˆÚ†Ú© لاتین oe",372:"حر٠W بزرگ لاتین با خمان",374:"حر٠Y بزرگ لاتین با خمان",373:"حر٠w Ú©ÙˆÚ†Ú© لاتین با خمان",375:"حر٠y Ú©ÙˆÚ†Ú© لاتین با خمان",sbquo:"نشان نقل قول تکی زیر-9",8219:"نشان نقل قول تکی high-reversed-9",bdquo:"نقل قول دوتایی پایین-9",hellip:"حذ٠اÙÙ‚ÛŒ",trade:"نشان تجاری",9658:"نشانگر سیاه جهت راست",bull:"گلوله",rarr:"Ùلش راست",rArr:"Ùلش دوتایی راست",hArr:"Ùلش دوتایی Ú†Ù¾ راست",diams:"نشان الماس سیاه",
-asymp:"تقریبا برابر با"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fi.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fi.js
deleted file mode 100644
index 6d701e3c..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fi.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","fi",{euro:"Euron merkki",lsquo:"Vasen yksittäinen lainausmerkki",rsquo:"Oikea yksittäinen lainausmerkki",ldquo:"Vasen kaksoislainausmerkki",rdquo:"Oikea kaksoislainausmerkki",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Sentin merkki",pound:"Punnan merkki",curren:"Valuuttamerkki",yen:"Yenin merkki",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
-not:"Not sign",reg:"Rekisteröity merkki",macr:"Macron",deg:"Asteen merkki",sup2:"Yläindeksi kaksi",sup3:"Yläindeksi kolme",acute:"Acute accent",micro:"Mikron merkki",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Yläindeksi yksi",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Ylösalaisin oleva kysymysmerkki",Agrave:"Latin capital letter A with grave accent",
-Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
-Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Kertomerkki",Oslash:"Latin capital letter O with stroke",
-Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
-aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
-ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Jakomerkki",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
-yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
-trade:"Tavaramerkki merkki",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Nuoli oikealle",rArr:"Kaksoisnuoli oikealle",hArr:"Kaksoisnuoli oikealle ja vasemmalle",diams:"Black diamond suit",asymp:"Noin"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js
deleted file mode 100644
index d19e2e42..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","fr-ca",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret",iexcl:"Point d'exclamation inversé",cent:"Symbole de cent",pound:"Symbole de Livre Sterling",curren:"Symbole monétaire",yen:"Symbole du Yen",brvbar:"Barre scindée",sect:"Symbole de section",uml:"Tréma",copy:"Symbole de copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant",
-not:"Indicateur de négation",reg:"Symbole de marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"Exposant 3",acute:"Accent aigüe",micro:"Symbole micro",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"Exposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Une demi",frac34:"Trois quart",iquest:"Point d'interrogation inversé",Agrave:"A accent grave",Aacute:"A accent aigüe",Acirc:"A circonflexe",Atilde:"A tilde",Auml:"A tréma",
-Aring:"A avec un rond au dessus",AElig:"Æ majuscule",Ccedil:"C cédille",Egrave:"E accent grave",Eacute:"E accent aigüe",Ecirc:"E accent circonflexe",Euml:"E tréma",Igrave:"I accent grave",Iacute:"I accent aigüe",Icirc:"I accent circonflexe",Iuml:"I tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N tilde",Ograve:"O accent grave",Oacute:"O accent aigüe",Ocirc:"O accent circonflexe",Otilde:"O tilde",Ouml:"O tréma",times:"Symbole de multiplication",Oslash:"O barré",Ugrave:"U accent grave",Uacute:"U accent aigüe",
-Ucirc:"U accent circonflexe",Uuml:"U tréma",Yacute:"Y accent aigüe",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a accent grave",aacute:"a accent aigüe",acirc:"a accent circonflexe",atilde:"a tilde",auml:"a tréma",aring:"a avec un cercle au dessus",aelig:"æ",ccedil:"c cédille",egrave:"e accent grave",eacute:"e accent aigüe",ecirc:"e accent circonflexe",euml:"e tréma",igrave:"i accent grave",iacute:"i accent aigüe",icirc:"i accent circonflexe",iuml:"i tréma",
-eth:"Lettre minuscule islandaise ED",ntilde:"n tilde",ograve:"o accent grave",oacute:"o accent aigüe",ocirc:"O accent circonflexe",otilde:"O tilde",ouml:"O tréma",divide:"Symbole de division",oslash:"o barré",ugrave:"u accent grave",uacute:"u accent aigüe",ucirc:"u accent circonflexe",uuml:"u tréma",yacute:"y accent aigüe",thorn:"Lettre islandaise thorn minuscule",yuml:"y tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W accent circonflexe",374:"Y accent circonflexe",
-373:"w accent circonflexe",375:"y accent circonflexe",sbquo:"Guillemet simple fermant",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Symbole de marque déposée",9658:"Flèche noire pointant vers la droite",bull:"Puce",rarr:"Flèche vers la droite",rArr:"Flèche double vers la droite",hArr:"Flèche double vers la gauche",diams:"Carreau",asymp:"Presque égal"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fr.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fr.js
deleted file mode 100644
index 2d1ad096..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/fr.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","fr",{euro:"Symbole Euro",lsquo:"Guillemet simple ouvrant",rsquo:"Guillemet simple fermant",ldquo:"Guillemet double ouvrant",rdquo:"Guillemet double fermant",ndash:"Tiret haut",mdash:"Tiret cadratin",iexcl:"Point d'exclamation inversé",cent:"Symbole Cent",pound:"Symbole Livre Sterling",curren:"Symbole monétaire",yen:"Symbole Yen",brvbar:"Barre verticale scindée",sect:"Section",uml:"Tréma",copy:"Symbole Copyright",ordf:"Indicateur ordinal féminin",laquo:"Guillemet français ouvrant",
-not:"Crochet de négation",reg:"Marque déposée",macr:"Macron",deg:"Degré",sup2:"Exposant 2",sup3:"\\tExposant 3",acute:"Accent aigu",micro:"Omicron",para:"Paragraphe",middot:"Point médian",cedil:"Cédille",sup1:"\\tExposant 1",ordm:"Indicateur ordinal masculin",raquo:"Guillemet français fermant",frac14:"Un quart",frac12:"Un demi",frac34:"Trois quarts",iquest:"Point d'interrogation inversé",Agrave:"A majuscule accent grave",Aacute:"A majuscule accent aigu",Acirc:"A majuscule accent circonflexe",Atilde:"A majuscule avec caron",
-Auml:"A majuscule tréma",Aring:"A majuscule avec un rond au-dessus",AElig:"Æ majuscule ligaturés",Ccedil:"C majuscule cédille",Egrave:"E majuscule accent grave",Eacute:"E majuscule accent aigu",Ecirc:"E majuscule accent circonflexe",Euml:"E majuscule tréma",Igrave:"I majuscule accent grave",Iacute:"I majuscule accent aigu",Icirc:"I majuscule accent circonflexe",Iuml:"I majuscule tréma",ETH:"Lettre majuscule islandaise ED",Ntilde:"N majuscule avec caron",Ograve:"O majuscule accent grave",Oacute:"O majuscule accent aigu",
-Ocirc:"O majuscule accent circonflexe",Otilde:"O majuscule avec caron",Ouml:"O majuscule tréma",times:"Multiplication",Oslash:"O majuscule barré",Ugrave:"U majuscule accent grave",Uacute:"U majuscule accent aigu",Ucirc:"U majuscule accent circonflexe",Uuml:"U majuscule tréma",Yacute:"Y majuscule accent aigu",THORN:"Lettre islandaise Thorn majuscule",szlig:"Lettre minuscule allemande s dur",agrave:"a minuscule accent grave",aacute:"a minuscule accent aigu",acirc:"a minuscule accent circonflexe",atilde:"a minuscule avec caron",
-auml:"a minuscule tréma",aring:"a minuscule avec un rond au-dessus",aelig:"æ minuscule ligaturés",ccedil:"c minuscule cédille",egrave:"e minuscule accent grave",eacute:"e minuscule accent aigu",ecirc:"e minuscule accent circonflexe",euml:"e minuscule tréma",igrave:"i minuscule accent grave",iacute:"i minuscule accent aigu",icirc:"i minuscule accent circonflexe",iuml:"i minuscule tréma",eth:"Lettre minuscule islandaise ED",ntilde:"n minuscule avec caron",ograve:"o minuscule accent grave",oacute:"o minuscule accent aigu",
-ocirc:"o minuscule accent circonflexe",otilde:"o minuscule avec caron",ouml:"o minuscule tréma",divide:"Division",oslash:"o minuscule barré",ugrave:"u minuscule accent grave",uacute:"u minuscule accent aigu",ucirc:"u minuscule accent circonflexe",uuml:"u minuscule tréma",yacute:"y minuscule accent aigu",thorn:"Lettre islandaise thorn minuscule",yuml:"y minuscule tréma",OElig:"ligature majuscule latine Œ",oelig:"ligature minuscule latine œ",372:"W majuscule accent circonflexe",374:"Y majuscule accent circonflexe",
-373:"w minuscule accent circonflexe",375:"y minuscule accent circonflexe",sbquo:"Guillemet simple fermant (anglais)",8219:"Guillemet-virgule supérieur culbuté",bdquo:"Guillemet-virgule double inférieur",hellip:"Points de suspension",trade:"Marque commerciale (trade mark)",9658:"Flèche noire pointant vers la droite",bull:"Gros point médian",rarr:"Flèche vers la droite",rArr:"Double flèche vers la droite",hArr:"Double flèche vers la gauche",diams:"Carreau noir",asymp:"Presque égal"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/gl.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/gl.js
deleted file mode 100644
index f16d3667..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/gl.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","gl",{euro:"Símbolo do euro",lsquo:"Comiña simple esquerda",rsquo:"Comiña simple dereita",ldquo:"Comiñas dobres esquerda",rdquo:"Comiñas dobres dereita",ndash:"Guión",mdash:"Raia",iexcl:"Signo de admiración invertido",cent:"Símbolo do centavo",pound:"Símbolo da libra",curren:"Símbolo de moeda",yen:"Símbolo do yen",brvbar:"Barra vertical rota",sect:"Símbolo de sección",uml:"Diérese",copy:"Símbolo de dereitos de autoría",ordf:"Indicador ordinal feminino",laquo:"Comiñas latinas, apertura",
-not:"Signo negación",reg:"Símbolo de marca rexistrada",macr:"Guión alto",deg:"Signo de grao",sup2:"Superíndice dous",sup3:"Superíndice tres",acute:"Acento agudo",micro:"Signo de micro",para:"Signo de pi",middot:"Punto medio",cedil:"Cedilla",sup1:"Superíndice un",ordm:"Indicador ordinal masculino",raquo:"Comiñas latinas, peche",frac14:"Fracción ordinaria de un cuarto",frac12:"Fracción ordinaria de un medio",frac34:"Fracción ordinaria de tres cuartos",iquest:"Signo de interrogación invertido",Agrave:"Letra A latina maiúscula con acento grave",
-Aacute:"Letra A latina maiúscula con acento agudo",Acirc:"Letra A latina maiúscula con acento circunflexo",Atilde:"Letra A latina maiúscula con til",Auml:"Letra A latina maiúscula con diérese",Aring:"Letra A latina maiúscula con aro enriba",AElig:"Letra Æ latina maiúscula",Ccedil:"Letra C latina maiúscula con cedilla",Egrave:"Letra E latina maiúscula con acento grave",Eacute:"Letra E latina maiúscula con acento agudo",Ecirc:"Letra E latina maiúscula con acento circunflexo",Euml:"Letra E latina maiúscula con diérese",
-Igrave:"Letra I latina maiúscula con acento grave",Iacute:"Letra I latina maiúscula con acento agudo",Icirc:"Letra I latina maiúscula con acento circunflexo",Iuml:"Letra I latina maiúscula con diérese",ETH:"Letra Ed latina maiúscula",Ntilde:"Letra N latina maiúscula con til",Ograve:"Letra O latina maiúscula con acento grave",Oacute:"Letra O latina maiúscula con acento agudo",Ocirc:"Letra O latina maiúscula con acento circunflexo",Otilde:"Letra O latina maiúscula con til",Ouml:"Letra O latina maiúscula con diérese",
-times:"Signo de multiplicación",Oslash:"Letra O latina maiúscula con barra transversal",Ugrave:"Letra U latina maiúscula con acento grave",Uacute:"Letra U latina maiúscula con acento agudo",Ucirc:"Letra U latina maiúscula con acento circunflexo",Uuml:"Letra U latina maiúscula con diérese",Yacute:"Letra Y latina maiúscula con acento agudo",THORN:"Letra Thorn latina maiúscula",szlig:"Letra s latina forte minúscula",agrave:"Letra a latina minúscula con acento grave",aacute:"Letra a latina minúscula con acento agudo",
-acirc:"Letra a latina minúscula con acento circunflexo",atilde:"Letra a latina minúscula con til",auml:"Letra a latina minúscula con diérese",aring:"Letra a latina minúscula con aro enriba",aelig:"Letra æ latina minúscula",ccedil:"Letra c latina minúscula con cedilla",egrave:"Letra e latina minúscula con acento grave",eacute:"Letra e latina minúscula con acento agudo",ecirc:"Letra e latina minúscula con acento circunflexo",euml:"Letra e latina minúscula con diérese",igrave:"Letra i latina minúscula con acento grave",
-iacute:"Letra i latina minúscula con acento agudo",icirc:"Letra i latina minúscula con acento circunflexo",iuml:"Letra i latina minúscula con diérese",eth:"Letra ed latina minúscula",ntilde:"Letra n latina minúscula con til",ograve:"Letra o latina minúscula con acento grave",oacute:"Letra o latina minúscula con acento agudo",ocirc:"Letra o latina minúscula con acento circunflexo",otilde:"Letra o latina minúscula con til",ouml:"Letra o latina minúscula con diérese",divide:"Signo de división",oslash:"Letra o latina minúscula con barra transversal",
-ugrave:"Letra u latina minúscula con acento grave",uacute:"Letra u latina minúscula con acento agudo",ucirc:"Letra u latina minúscula con acento circunflexo",uuml:"Letra u latina minúscula con diérese",yacute:"Letra y latina minúscula con acento agudo",thorn:"Letra Thorn latina minúscula",yuml:"Letra y latina minúscula con diérese",OElig:"Ligadura OE latina maiúscula",oelig:"Ligadura oe latina minúscula",372:"Letra W latina maiúscula con acento circunflexo",374:"Letra Y latina maiúscula con acento circunflexo",
-373:"Letra w latina minúscula con acento circunflexo",375:"Letra y latina minúscula con acento circunflexo",sbquo:"Comiña simple baixa, de apertura",8219:"Comiña simple alta, de peche",bdquo:"Comiñas dobres baixas, de apertura",hellip:"Elipse, puntos suspensivos",trade:"Signo de marca rexistrada",9658:"Apuntador negro apuntando á dereita",bull:"Viñeta",rarr:"Frecha á dereita",rArr:"Frecha dobre á dereita",hArr:"Frecha dobre da esquerda á dereita",diams:"Diamante negro",asymp:"Case igual a"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/he.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/he.js
deleted file mode 100644
index dcfc50f0..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/he.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","he",{euro:"יורו",lsquo:"סימן ציטוט יחיד שמ×לי",rsquo:"סימן ציטוט יחיד ימני",ldquo:"סימן ציטוט כפול שמ×לי",rdquo:"סימן ציטוט כפול ימני",ndash:"קו מפריד קצר",mdash:"קו מפריד ×רוך",iexcl:"סימן קרי××” הפוך",cent:"סנט",pound:"פ×ונד",curren:"מטבע",yen:"ין",brvbar:"קו שבור",sect:"סימן מקטע",uml:"שתי נקודות ×ופקיות (Diaeresis)",copy:"סימן זכויות ×™×•×¦×¨×™× (Copyright)",ordf:"סימן ×ורדינ×לי נקבי",laquo:"סימן ציטוט זווית כפולה לשמ×ל",not:"סימן שלילה מתמטי",reg:"סימן רשו×",
-macr:"מקרון (×”×’×™×” ×רוכה)",deg:"מעלות",sup2:"2 בכתיב עילי",sup3:"3 בכתיב עילי",acute:"סימן דגוש (Acute)",micro:"מיקרו",para:"סימון פסקה",middot:"נקודה ×מצעית",cedil:"סדיליה",sup1:"1 בכתיב עילי",ordm:"סימן ×ורדינ×לי זכרי",raquo:"סימן ציטוט זווית כפולה לימין",frac14:"רבע בשבר פשוט",frac12:"חצי בשבר פשוט",frac34:"שלושה ×¨×‘×¢×™× ×‘×©×‘×¨ פשוט",iquest:"סימן ש×לה הפוך",Agrave:"×ות לטינית A ×¢× ×’×¨×© (Grave)",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",
-Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"×ות לטינית Æ גדולה",Ccedil:"Latin capital letter C with cedilla",Egrave:"×ות לטינית E ×¢× ×’×¨×© (Grave)",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"×ות לטינית I ×¢× ×’×¨×© (Grave)",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",
-ETH:"×ות לטינית Eth גדולה",Ntilde:"Latin capital letter N with tilde",Ograve:"×ות לטינית O ×¢× ×’×¨×© (Grave)",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"סימן כפל",Oslash:"Latin capital letter O with stroke",Ugrave:"×ות לטינית U ×¢× ×’×¨×© (Grave)",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",
-Yacute:"Latin capital letter Y with acute accent",THORN:"×ות לטינית Thorn גדולה",szlig:"×ות לטינית s חדה קטנה",agrave:"×ות לטינית a ×¢× ×’×¨×© (Grave)",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"×ות לטינית æ קטנה",ccedil:"Latin small letter c with cedilla",egrave:"×ות לטינית e ×¢× ×’×¨×© (Grave)",eacute:"Latin small letter e with acute accent",
-ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"×ות לטינית i ×¢× ×’×¨×© (Grave)",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"×ות לטינית eth קטנה",ntilde:"Latin small letter n with tilde",ograve:"×ות לטינית o ×¢× ×’×¨×© (Grave)",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",
-divide:"סימן חלוקה",oslash:"Latin small letter o with stroke",ugrave:"×ות לטינית u ×¢× ×’×¨×© (Grave)",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"×ות לטינית thorn קטנה",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",
-373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"סימן ציטוט נמוך יחיד",8219:"סימן ציטוט",bdquo:"סימן ציטוט נמוך כפול",hellip:"שלוש נקודות",trade:"סימן טריידמ×רק",9658:"סמן שחור לצד ימין",bull:"תבליט (רשימה)",rarr:"×—×¥ לימין",rArr:"×—×¥ כפול לימין",hArr:"×—×¥ כפול לימין ושמ×ל",diams:"×™×”×œ×•× ×ž×œ×",asymp:"כמעט שווה"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/hr.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/hr.js
deleted file mode 100644
index af10255d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/hr.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","hr",{euro:"Euro znak",lsquo:"Lijevi jednostruki navodnik",rsquo:"Desni jednostruki navodnik",ldquo:"Lijevi dvostruki navodnik",rdquo:"Desni dvostruki navodnik",ndash:"En crtica",mdash:"Em crtica",iexcl:"Naopaki uskliÄnik",cent:"Cent znak",pound:"Funta znak",curren:"Znak valute",yen:"Yen znak",brvbar:"Potrgana preÄka",sect:"Znak odjeljka",uml:"Prijeglasi",copy:"Copyright znak",ordf:"Feminine ordinal indicator",laquo:"Lijevi dvostruki uglati navodnik",not:"Not znak",
-reg:"Registered znak",macr:"Macron",deg:"Stupanj znak",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Mikro znak",para:"Pilcrow sign",middot:"Srednja toÄka",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Desni dvostruku uglati navodnik",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Naopaki upitnik",Agrave:"Veliko latinsko slovo A s akcentom",Aacute:"LatiniÄno veliko slovo A sa oÅ¡trim naglaskom",
-Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",
-Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",
-Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",
-aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",
-ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",
-thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",
-bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/hu.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/hu.js
deleted file mode 100644
index 79483051..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/hu.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","hu",{euro:"Euró jel",lsquo:"Bal szimpla idézőjel",rsquo:"Jobb szimpla idézőjel",ldquo:"Bal dupla idézőjel",rdquo:"Jobb dupla idézőjel",ndash:"Rövid gondolatjel",mdash:"Hosszú gondolatjel",iexcl:"Fordított felkiáltójel",cent:"Cent jel",pound:"Font jel",curren:"Valuta jel",yen:"Yen jel",brvbar:"Hosszú kettőspont",sect:"Paragrafus jel",uml:"Kettős hangzó jel",copy:"Szerzői jog jel",ordf:"Női sorrend mutatója",laquo:"Balra mutató duplanyíl",not:"Feltételes kötőjel",
-reg:"Bejegyzett védjegy jele",macr:"Hosszúsági jel",deg:"Fok jel",sup2:"Négyzeten jel",sup3:"Köbön jel",acute:"Éles ékezet",micro:"Mikro-jel",para:"Bekezdés jel",middot:"Közép pont",cedil:"Cédille",sup1:"Elsőn jel",ordm:"Férfi sorrend mutatója",raquo:"Jobbra mutató duplanyíl",frac14:"Egy negyed jel",frac12:"Egy ketted jel",frac34:"Három negyed jel",iquest:"Fordított kérdőjel",Agrave:"Latin nagy A fordított ékezettel",Aacute:"Latin nagy A normál ékezettel",Acirc:"Latin nagy A hajtott ékezettel",Atilde:"Latin nagy A hullámjellel",
-Auml:"Latin nagy A kettőspont ékezettel",Aring:"Latin nagy A gyűrű ékezettel",AElig:"Latin nagy Æ betű",Ccedil:"Latin nagy C cedillával",Egrave:"Latin nagy E fordított ékezettel",Eacute:"Latin nagy E normál ékezettel",Ecirc:"Latin nagy E hajtott ékezettel",Euml:"Latin nagy E dupla kettőspont ékezettel",Igrave:"Latin nagy I fordított ékezettel",Iacute:"Latin nagy I normál ékezettel",Icirc:"Latin nagy I hajtott ékezettel",Iuml:"Latin nagy I kettőspont ékezettel",ETH:"Latin nagy Eth betű",Ntilde:"Latin nagy N hullámjellel",
-Ograve:"Latin nagy O fordított ékezettel",Oacute:"Latin nagy O normál ékezettel",Ocirc:"Latin nagy O hajtott ékezettel",Otilde:"Latin nagy O hullámjellel",Ouml:"Latin nagy O kettőspont ékezettel",times:"Szorzás jel",Oslash:"Latin O betű áthúzással",Ugrave:"Latin nagy U fordított ékezettel",Uacute:"Latin nagy U normál ékezettel",Ucirc:"Latin nagy U hajtott ékezettel",Uuml:"Latin nagy U kettőspont ékezettel",Yacute:"Latin nagy Y normál ékezettel",THORN:"Latin nagy Thorn betű",szlig:"Latin kis s betű",
-agrave:"Latin kis a fordított ékezettel",aacute:"Latin kis a normál ékezettel",acirc:"Latin kis a hajtott ékezettel",atilde:"Latin kis a hullámjellel",auml:"Latin kis a kettőspont ékezettel",aring:"Latin kis a gyűrű ékezettel",aelig:"Latin kis æ betű",ccedil:"Latin kis c cedillával",egrave:"Latin kis e fordított ékezettel",eacute:"Latin kis e normál ékezettel",ecirc:"Latin kis e hajtott ékezettel",euml:"Latin kis e dupla kettőspont ékezettel",igrave:"Latin kis i fordított ékezettel",iacute:"Latin kis i normál ékezettel",
-icirc:"Latin kis i hajtott ékezettel",iuml:"Latin kis i kettőspont ékezettel",eth:"Latin kis eth betű",ntilde:"Latin kis n hullámjellel",ograve:"Latin kis o fordított ékezettel",oacute:"Latin kis o normál ékezettel",ocirc:"Latin kis o hajtott ékezettel",otilde:"Latin kis o hullámjellel",ouml:"Latin kis o kettőspont ékezettel",divide:"Osztásjel",oslash:"Latin kis o betű áthúzással",ugrave:"Latin kis u fordított ékezettel",uacute:"Latin kis u normál ékezettel",ucirc:"Latin kis u hajtott ékezettel",
-uuml:"Latin kis u kettőspont ékezettel",yacute:"Latin kis y normál ékezettel",thorn:"Latin kis thorn jel",yuml:"Latin kis y kettőspont ékezettel",OElig:"Latin nagy OE-jel",oelig:"Latin kis oe-jel",372:"Latin nagy W hajtott ékezettel",374:"Latin nagy Y hajtott ékezettel",373:"Latin kis w hajtott ékezettel",375:"Latin kis y hajtott ékezettel",sbquo:"Nyitó nyomdai szimpla idézőjel",8219:"Záró nyomdai záró idézőjel",bdquo:"Nyitó nyomdai dupla idézőjel",hellip:"Három pont",trade:"Kereskedelmi védjegy jele",
-9658:"Jobbra mutató fekete mutató",bull:"Golyó",rarr:"Jobbra mutató nyíl",rArr:"Jobbra mutató duplanyíl",hArr:"Bal-jobb duplanyíl",diams:"Fekete gyémánt jel",asymp:"Majdnem egyenlő jel"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/id.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/id.js
deleted file mode 100644
index 4928f400..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/id.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","id",{euro:"Tanda Euro",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"Currency sign",yen:"Tanda Yen",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Tanda Hak Cipta",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
-not:"Not sign",reg:"Tanda Telah Terdaftar",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
-Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
-Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
-Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
-aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
-ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
-yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
-trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/it.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/it.js
deleted file mode 100644
index 894b56ce..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/it.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","it",{euro:"Simbolo Euro",lsquo:"Virgoletta singola sinistra",rsquo:"Virgoletta singola destra",ldquo:"Virgolette aperte",rdquo:"Virgolette chiuse",ndash:"Trattino",mdash:"Trattino lungo",iexcl:"Punto esclavamativo invertito",cent:"Simbolo Cent",pound:"Simbolo Sterlina",curren:"Simbolo Moneta",yen:"Simbolo Yen",brvbar:"Barra interrotta",sect:"Simbolo di sezione",uml:"Dieresi",copy:"Simbolo Copyright",ordf:"Indicatore ordinale femminile",laquo:"Virgolette basse aperte",
-not:"Nessun segno",reg:"Simbolo Registrato",macr:"Macron",deg:"Simbolo Grado",sup2:"Apice Due",sup3:"Apice Tre",acute:"Accento acuto",micro:"Simbolo Micro",para:"Simbolo Paragrafo",middot:"Punto centrale",cedil:"Cediglia",sup1:"Apice Uno",ordm:"Indicatore ordinale maschile",raquo:"Virgolette basse chiuse",frac14:"Frazione volgare un quarto",frac12:"Frazione volgare un mezzo",frac34:"Frazione volgare tre quarti",iquest:"Punto interrogativo invertito",Agrave:"Lettera maiuscola latina A con accento grave",
-Aacute:"Lettera maiuscola latina A con accento acuto",Acirc:"Lettera maiuscola latina A con accento circonflesso",Atilde:"Lettera maiuscola latina A con tilde",Auml:"Lettera maiuscola latina A con dieresi",Aring:"Lettera maiuscola latina A con anello sopra",AElig:"Lettera maiuscola latina AE",Ccedil:"Lettera maiuscola latina C con cediglia",Egrave:"Lettera maiuscola latina E con accento grave",Eacute:"Lettera maiuscola latina E con accento acuto",Ecirc:"Lettera maiuscola latina E con accento circonflesso",
-Euml:"Lettera maiuscola latina E con dieresi",Igrave:"Lettera maiuscola latina I con accento grave",Iacute:"Lettera maiuscola latina I con accento acuto",Icirc:"Lettera maiuscola latina I con accento circonflesso",Iuml:"Lettera maiuscola latina I con dieresi",ETH:"Lettera maiuscola latina Eth",Ntilde:"Lettera maiuscola latina N con tilde",Ograve:"Lettera maiuscola latina O con accento grave",Oacute:"Lettera maiuscola latina O con accento acuto",Ocirc:"Lettera maiuscola latina O con accento circonflesso",
-Otilde:"Lettera maiuscola latina O con tilde",Ouml:"Lettera maiuscola latina O con dieresi",times:"Simbolo di moltiplicazione",Oslash:"Lettera maiuscola latina O barrata",Ugrave:"Lettera maiuscola latina U con accento grave",Uacute:"Lettera maiuscola latina U con accento acuto",Ucirc:"Lettera maiuscola latina U con accento circonflesso",Uuml:"Lettera maiuscola latina U con accento circonflesso",Yacute:"Lettera maiuscola latina Y con accento acuto",THORN:"Lettera maiuscola latina Thorn",szlig:"Lettera latina minuscola doppia S",
-agrave:"Lettera minuscola latina a con accento grave",aacute:"Lettera minuscola latina a con accento acuto",acirc:"Lettera minuscola latina a con accento circonflesso",atilde:"Lettera minuscola latina a con tilde",auml:"Lettera minuscola latina a con dieresi",aring:"Lettera minuscola latina a con anello superiore",aelig:"Lettera minuscola latina ae",ccedil:"Lettera minuscola latina c con cediglia",egrave:"Lettera minuscola latina e con accento grave",eacute:"Lettera minuscola latina e con accento acuto",
-ecirc:"Lettera minuscola latina e con accento circonflesso",euml:"Lettera minuscola latina e con dieresi",igrave:"Lettera minuscola latina i con accento grave",iacute:"Lettera minuscola latina i con accento acuto",icirc:"Lettera minuscola latina i con accento circonflesso",iuml:"Lettera minuscola latina i con dieresi",eth:"Lettera minuscola latina eth",ntilde:"Lettera minuscola latina n con tilde",ograve:"Lettera minuscola latina o con accento grave",oacute:"Lettera minuscola latina o con accento acuto",
-ocirc:"Lettera minuscola latina o con accento circonflesso",otilde:"Lettera minuscola latina o con tilde",ouml:"Lettera minuscola latina o con dieresi",divide:"Simbolo di divisione",oslash:"Lettera minuscola latina o barrata",ugrave:"Lettera minuscola latina u con accento grave",uacute:"Lettera minuscola latina u con accento acuto",ucirc:"Lettera minuscola latina u con accento circonflesso",uuml:"Lettera minuscola latina u con dieresi",yacute:"Lettera minuscola latina y con accento acuto",thorn:"Lettera minuscola latina thorn",
-yuml:"Lettera minuscola latina y con dieresi",OElig:"Legatura maiuscola latina OE",oelig:"Legatura minuscola latina oe",372:"Lettera maiuscola latina W con accento circonflesso",374:"Lettera maiuscola latina Y con accento circonflesso",373:"Lettera minuscola latina w con accento circonflesso",375:"Lettera minuscola latina y con accento circonflesso",sbquo:"Singola virgoletta bassa low-9",8219:"Singola virgoletta bassa low-9 inversa",bdquo:"Doppia virgoletta bassa low-9",hellip:"Ellissi orizzontale",
-trade:"Simbolo TM",9658:"Puntatore nero rivolto verso destra",bull:"Punto",rarr:"Freccia verso destra",rArr:"Doppia freccia verso destra",hArr:"Doppia freccia sinistra destra",diams:"Simbolo nero diamante",asymp:"Quasi uguale a"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ja.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ja.js
deleted file mode 100644
index 84fb8fa2..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ja.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","ja",{euro:"ユーロ記å·",lsquo:"左シングル引用符",rsquo:"å³ã‚·ãƒ³ã‚°ãƒ«å¼•ç”¨ç¬¦",ldquo:"左ダブル引用符",rdquo:"å³ãƒ€ãƒ–ル引用符",ndash:"åŠè§’ダッシュ",mdash:"全角ダッシュ",iexcl:"逆ã•æ„Ÿå˜†ç¬¦",cent:"セント記å·",pound:"ãƒãƒ³ãƒ‰è¨˜å·",curren:"通貨記å·",yen:"円記å·",brvbar:"上下ã«åˆ†ã‹ã‚ŒãŸç¸¦æ£’",sect:"節記å·",uml:"分音記å·(ウムラウト)",copy:"著作権表示記å·",ordf:"女性åºæ•°æ¨™è­˜",laquo:" 始ã‚二é‡å±±æ‹¬å¼§å¼•ç”¨è¨˜å·",not:"è«–ç†å¦å®šè¨˜å·",reg:"登録商標記å·",macr:"長音符",deg:"度記å·",sup2:"上ã¤ã2, 2ä¹—",sup3:"上ã¤ã3, 3ä¹—",acute:"æšéŸ³ç¬¦",micro:"ミクロン記å·",para:"段è½è¨˜å·",middot:"中黒",cedil:"セディラ",sup1:"上ã¤ã1",ordm:"男性åºæ•°æ¨™è­˜",raquo:"終ã‚り二é‡å±±æ‹¬å¼§å¼•ç”¨è¨˜å·",
-frac14:"四分ã®ä¸€",frac12:"二分ã®ä¸€",frac34:"四分ã®ä¸‰",iquest:"逆疑å•ç¬¦",Agrave:"抑音符ã¤ã大文字A",Aacute:"æšéŸ³ç¬¦ã¤ã大文字A",Acirc:"曲折アクセントã¤ã大文字A",Atilde:"ãƒãƒ«ãƒ€ã¤ã大文字A",Auml:"分音記å·ã¤ã大文字A",Aring:"リングã¤ã大文字A",AElig:"Aã¨Eã®åˆå­—",Ccedil:"セディラã¤ã大文字C",Egrave:"抑音符ã¤ã大文字E",Eacute:"æšéŸ³ç¬¦ã¤ã大文字E",Ecirc:"曲折アクセントã¤ã大文字E",Euml:"分音記å·ã¤ã大文字E",Igrave:"抑音符ã¤ã大文字I",Iacute:"æšéŸ³ç¬¦ã¤ã大文字I",Icirc:"曲折アクセントã¤ã大文字I",Iuml:"分音記å·ã¤ã大文字I",ETH:"[アイスランド語]大文字ETH",Ntilde:"ãƒãƒ«ãƒ€ã¤ã大文字N",Ograve:"抑音符ã¤ã大文字O",Oacute:"æšéŸ³ç¬¦ã¤ã大文字O",Ocirc:"曲折アクセントã¤ã大文字O",Otilde:"ãƒãƒ«ãƒ€ã¤ã大文字O",Ouml:" 分音記å·ã¤ã大文字O",
-times:"乗算記å·",Oslash:"打ã¡æ¶ˆã—ç·šã¤ã大文字O",Ugrave:"抑音符ã¤ã大文字U",Uacute:"æšéŸ³ç¬¦ã¤ã大文字U",Ucirc:"曲折アクセントã¤ã大文字U",Uuml:"分音記å·ã¤ã大文字U",Yacute:"æšéŸ³ç¬¦ã¤ã大文字Y",THORN:"[アイスランド語]大文字THORN",szlig:"ドイツ語エスツェット",agrave:"抑音符ã¤ãå°æ–‡å­—a",aacute:"æšéŸ³ç¬¦ã¤ãå°æ–‡å­—a",acirc:"曲折アクセントã¤ãå°æ–‡å­—a",atilde:"ãƒãƒ«ãƒ€ã¤ãå°æ–‡å­—a",auml:"分音記å·ã¤ãå°æ–‡å­—a",aring:"リングã¤ãå°æ–‡å­—a",aelig:"aã¨eã®åˆå­—",ccedil:"セディラã¤ãå°æ–‡å­—c",egrave:"抑音符ã¤ãå°æ–‡å­—e",eacute:"æšéŸ³ç¬¦ã¤ãå°æ–‡å­—e",ecirc:"曲折アクセントã¤ãå°æ–‡å­—e",euml:"分音記å·ã¤ãå°æ–‡å­—e",igrave:"抑音符ã¤ãå°æ–‡å­—i",iacute:"æšéŸ³ç¬¦ã¤ãå°æ–‡å­—i",icirc:"曲折アクセントã¤ãå°æ–‡å­—i",iuml:"分音記å·ã¤ãå°æ–‡å­—i",eth:"アイスランド語å°æ–‡å­—eth",
-ntilde:"ãƒãƒ«ãƒ€ã¤ãå°æ–‡å­—n",ograve:"抑音符ã¤ãå°æ–‡å­—o",oacute:"æšéŸ³ç¬¦ã¤ãå°æ–‡å­—o",ocirc:"曲折アクセントã¤ãå°æ–‡å­—o",otilde:"ãƒãƒ«ãƒ€ã¤ãå°æ–‡å­—o",ouml:"分音記å·ã¤ãå°æ–‡å­—o",divide:"除算記å·",oslash:"打ã¡æ¶ˆã—ç·šã¤ãå°æ–‡å­—o",ugrave:"抑音符ã¤ãå°æ–‡å­—u",uacute:"æšéŸ³ç¬¦ã¤ãå°æ–‡å­—u",ucirc:"曲折アクセントã¤ãå°æ–‡å­—u",uuml:"分音記å·ã¤ãå°æ–‡å­—u",yacute:"æšéŸ³ç¬¦ã¤ãå°æ–‡å­—y",thorn:"アイスランド語å°æ–‡å­—thorn",yuml:"分音記å·ã¤ãå°æ–‡å­—y",OElig:"Oã¨Eã®åˆå­—",oelig:"oã¨eã®åˆå­—",372:"曲折アクセントã¤ã大文字W",374:"曲折アクセントã¤ã大文字Y",373:"曲折アクセントã¤ãå°æ–‡å­—w",375:"曲折アクセントã¤ãå°æ–‡å­—y",sbquo:"シングル下引用符",8219:"å·¦å³é€†ã®å·¦å¼•ç”¨ç¬¦",bdquo:"ダブル下引用符",hellip:"三点リーダ",trade:"商標記å·",9658:"å³é»’三角ãƒã‚¤ãƒ³ã‚¿",bull:"黒丸",
-rarr:"å³çŸ¢å°",rArr:"å³äºŒé‡çŸ¢å°",hArr:"å·¦å³äºŒé‡çŸ¢å°",diams:"ダイヤ",asymp:"漸近"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/km.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/km.js
deleted file mode 100644
index 65a7518d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/km.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","km",{euro:"សញ្ញា​អឺរ៉ូ",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"សញ្ញា​សáŸáž“",pound:"សញ្ញា​ផោន",curren:"សញ្ញា​រូបិយបណ្ណ",yen:"សញ្ញា​យ៉áŸáž“",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"សញ្ញា​រក្សា​សិទ្ធិ",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
-not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"សញ្ញា​ដឺក្រáŸ",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"សញ្ញា​មីក្រូ",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
-Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
-Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
-Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
-aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
-ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
-yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
-trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ku.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ku.js
deleted file mode 100644
index 4917d4ad..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ku.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","ku",{euro:"نیشانەی یۆرۆ",lsquo:"نیشانەی Ùاریزەی سەرووژێری تاکی Ú†Û•Ù¾",rsquo:"نیشانەی Ùاریزەی سەرووژێری تاکی ڕاست",ldquo:"نیشانەی Ùاریزەی سەرووژێری دووهێندەی چه‌پ",rdquo:"نیشانەی Ùاریزەی سەرووژێری دووهێندەی ڕاست",ndash:"تەقەڵی کورت",mdash:"تەقەڵی درێژ",iexcl:"نیشانەی Ù‡Û•ÚµÛ•ÙˆÚ¯ÛŽÚ•ÛŒ سەرسوڕهێنەر",cent:"نیشانەی سەنت",pound:"نیشانەی پاوەند",curren:"نیشانەی دراو",yen:"نیشانەی یەنی ژاپۆنی",brvbar:"شریتی ئەستوونی پچڕاو",sect:"نیشانەی دوو s لەسەریەک",uml:"خاڵ",copy:"نیشانەی ماÙÛŒ چاپ",
-ordf:"Ù‡ÛŽÚµ لەسەر پیتی a",laquo:"دوو تیری بەدووایەکی Ú†Û•Ù¾",not:"نیشانەی نەخێر",reg:"نیشانەی R لەناو بازنەدا",macr:"ماکڕۆن",deg:"نیشانەی پلە",sup2:"سەرنووسی دوو",sup3:"سەرنووسی سێ",acute:"لاری تیژ",micro:"نیشانەی u لق درێژی Ú†Û•Ù¾ÛŒ خواروو",para:"نیشانەی پەڕەگراÙ",middot:"ناوەڕاستی خاڵ",cedil:"نیشانەی c ژێر چووکرە",sup1:"سەرنووسی یەک",ordm:"Ù‡ÛŽÚµ لەژێر پیتی o",raquo:"دوو تیری بەدووایەکی ڕاست",frac14:"یەک لەسەر چووار",frac12:"یەک لەسەر دوو",frac34:"سێ لەسەر چووار",iquest:"هێمای هەڵەوگێری پرسیار",Agrave:"پیتی لاتینی A-ÛŒ گەورە Ù„Û•Ú¯Û•Úµ ڕوومەتداری لار",
-Aacute:"پیتی لاتینی A-ی گەورە لەگەڵ ڕوومەتداری تیژ",Acirc:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Atilde:"پیتی لاتینی A-ی گەورە لەگەڵ زەڕە",Auml:"پیتی لاتینی A-ی گەورە لەگەڵ نیشانە لەسەری",Aring:"پیتی لاتینی گەورەی Å",AElig:"پیتی لاتینی گەورەی Æ",Ccedil:"پیتی لاتینی C-ی گەورە لەگەڵ ژێر چووکرە",Egrave:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری لار",Eacute:"پیتی لاتینی E-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ecirc:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری",Euml:"پیتی لاتینی E-ی گەورە لەگەڵ نیشانە لەسەری",
-Igrave:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری لار",Iacute:"پیتی لاتینی I-ی گەورە لەگەڵ ڕوومەتداری تیژ",Icirc:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",Iuml:"پیتی لاتینی I-ی گەورە لەگەڵ نیشانە لەسەری",ETH:"پیتی لاتینی E-ی گەورەی",Ntilde:"پیتی لاتینی N-ی گەورە لەگەڵ زەڕە",Ograve:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری لار",Oacute:"پیتی لاتینی O-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ocirc:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری",Otilde:"پیتی لاتینی O-ی گەورە لەگەڵ زەڕە",Ouml:"پیتی لاتینی O-ی گەورە لەگەڵ نیشانە لەسەری",
-times:"نیشانەی لێکدان",Oslash:"پیتی لاتینی گەورەی Ø لەگەڵ هێمای دڵ وەستان",Ugrave:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری لار",Uacute:"پیتی لاتینی U-ی گەورە لەگەڵ ڕوومەتداری تیژ",Ucirc:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Uuml:"پیتی لاتینی U-ی گەورە لەگەڵ نیشانە لەسەری",Yacute:"پیتی لاتینی Y-ی گەورە لەگەڵ ڕوومەتداری تیژ",THORN:"پیتی لاتینی دڕکی گەورە",szlig:"پیتی لاتنی نووک تیژی s",agrave:"پیتی لاتینی a-ی بچووک لەگەڵ ڕوومەتداری لار",aacute:"پیتی لاتینی a-ی بچووك لەگەڵ ڕوومەتداری تیژ",acirc:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری",
-atilde:"پیتی لاتینی a-ی بچووك لەگەڵ زەڕە",auml:"پیتی لاتینی a-ی بچووك لەگەڵ نیشانە لەسەری",aring:"پیتی لاتینی å-ی بچووك",aelig:"پیتی لاتینی æ-ی بچووك",ccedil:"پیتی لاتینی c-ی بچووك لەگەڵ ژێر چووکرە",egrave:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری لار",eacute:"پیتی لاتینی e-ی بچووك لەگەڵ ڕوومەتداری تیژ",ecirc:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",euml:"پیتی لاتینی e-ی بچووك لەگەڵ نیشانە لەسەری",igrave:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری لار",iacute:"پیتی لاتینی i-ی بچووك لەگەڵ ڕوومەتداری تیژ",
-icirc:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",iuml:"پیتی لاتینی i-ی بچووك لەگەڵ نیشانە لەسەری",eth:"پیتی لاتینی e-ی بچووك",ntilde:"پیتی لاتینی n-ی بچووك لەگەڵ زەڕە",ograve:"پیتی لاتینی o-ی بچووك لەگەڵ ڕوومەتداری لار",oacute:"پیتی لاتینی o-ی بچووك له‌گەڵ ڕوومەتداری تیژ",ocirc:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",otilde:"پیتی لاتینی o-ی بچووك لەگەڵ زەڕە",ouml:"پیتی لاتینی o-ی بچووك لەگەڵ نیشانە لەسەری",divide:"نیشانەی دابەش",oslash:"پیتی لاتینی گەورەی ø لەگەڵ هێمای دڵ وەستان",ugrave:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری لار",
-uacute:"پیتی لاتینی u-ی بچووك لەگەڵ ڕوومەتداری تیژ",ucirc:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",uuml:"پیتی لاتینی u-ی بچووك لەگەڵ نیشانە لەسەری",yacute:"پیتی لاتینی y-ی بچووك لەگەڵ ڕوومەتداری تیژ",thorn:"پیتی لاتینی دڕکی بچووك",yuml:"پیتی لاتینی y-ی بچووك لەگەڵ نیشانە لەسەری",OElig:"پیتی لاتینی گەورەی پێکەوەنووسراوی OE",oelig:"پیتی لاتینی بچووکی پێکەوەنووسراوی oe",372:"پیتی لاتینی W-ی گەورە لەگەڵ نیشانە لەسەری",374:"پیتی لاتینی Y-ی گەورە لەگەڵ نیشانە لەسەری",373:"پیتی لاتینی w-ی بچووکی لەگەڵ نیشانە لەسەری",
-375:"پیتی لاتینی y-ÛŒ بچووکی Ù„Û•Ú¯Û•Úµ نیشانە لەسەری",sbquo:"نیشانەی Ùاریزەی نزم",8219:"نیشانەی Ùاریزەی بەرزی پێچەوانە",bdquo:"دوو Ùاریزەی تەنیش یەك",hellip:"ئاسۆیی بازنە",trade:"نیشانەی بازرگانی",9658:"ئاراستەی Ú•Û•Ø´ÛŒ دەستی ڕاست",bull:"Ùیشەك",rarr:"تیری دەستی ڕاست",rArr:"دووتیری دەستی ڕاست",hArr:"دوو تیری ڕاست Ùˆ Ú†Û•Ù¾",diams:"Ú•Û•Ø´ÛŒ پاقڵاوەیی",asymp:"نیشانەی یەکسانە"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/lv.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/lv.js
deleted file mode 100644
index 50a77d36..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/lv.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","lv",{euro:"Euro zÄ«me",lsquo:"KreisÄ vienkÄrtÄ«ga pÄ“diņa",rsquo:"LabÄ vienkÄrtÄ«ga pÄ“diņa",ldquo:"KreisÄ dubult pÄ“diņa",rdquo:"LabÄ dubult pÄ“diņa",ndash:"En svÄ«tra",mdash:"Em svÄ«tra",iexcl:"Apgriezta izsaukuma zÄ«me",cent:"Centu naudas zÄ«me",pound:"Sterliņu mÄrciņu naudas zÄ«me",curren:"ValÅ«tas zÄ«me",yen:"Jenu naudas zÄ«me",brvbar:"VertikÄla pÄrrauta lÄ«nija",sect:"ParagrÄfa zÄ«me",uml:"Diakritiska zÄ«me",copy:"AutortiesÄ«bu zÄ«me",ordf:"SieviÅ¡Ä·as kÄrtas rÄdÄ«tÄjs",
-laquo:"KreisÄ dubult stÅ«ra pÄ“diņu zÄ«me",not:"NeparakstÄ«ts",reg:"ReÄ£istrÄ“ta zÄ«me",macr:"GarumzÄ«me",deg:"GrÄdu zÄ«me",sup2:"AugÅ¡raksts divi",sup3:"AugÅ¡raksts trÄ«s",acute:"AkÅ«ta uzsvara zÄ«me",micro:"Mikro zÄ«me",para:"Rindkopas zÄ«me ",middot:"VidÄ“js punkts",cedil:"Āķītis zem burta",sup1:"AugÅ¡raksts viens",ordm:"VÄ«riÅ¡Ä·Ä«gas kÄrtas rÄdÄ«tÄjs",raquo:"LabÄ dubult stÅ«ra pÄ“diņu zÄ«me",frac14:"VulgÄra frakcija 1/4",frac12:"VulgÄra frakcija 1/2",frac34:"VulgÄra frakcija 3/4",iquest:"Apgriezta jautÄjuma zÄ«me",Agrave:"Lielais latīņu burts A ar uzsvara zÄ«mi",
-Aacute:"Lielais latīņu burts A ar akÅ«tu uzsvara zÄ«mi",Acirc:"Lielais latīņu burts A ar diakritisku zÄ«mi",Atilde:"Lielais latīņu burts A ar tildi ",Auml:"Lielais latīņu burts A ar diakritisko zÄ«mi",Aring:"Lielais latīņu burts A ar aplÄ«ti augÅ¡Ä",AElig:"Lielais latīņu burts Æ",Ccedil:"Lielais latīņu burts C ar ÄÄ·Ä«ti zem burta",Egrave:"Lielais latīņu burts E ar apostrofu",Eacute:"Lielais latīņu burts E ar akÅ«tu uzsvara zÄ«mi",Ecirc:"Lielais latīņu burts E ar diakritisko zÄ«mi",Euml:"Lielais latīņu burts E ar diakritisko zÄ«mi",
-Igrave:"Lielais latīņu burts I ar uzsvaras zīmi",Iacute:"Lielais latīņu burts I ar akūtu uzsvara zīmi",Icirc:"Lielais latīņu burts I ar diakritisko zīmi",Iuml:"Lielais latīņu burts I ar diakritisko zīmi",ETH:"Lielais latīņu burts Eth",Ntilde:"Lielais latīņu burts N ar tildi",Ograve:"Lielais latīņu burts O ar uzsvara zīmi",Oacute:"Lielais latīņu burts O ar akūto uzsvara zīmi",Ocirc:"Lielais latīņu burts O ar diakritisko zīmi",Otilde:"Lielais latīņu burts O ar tildi",Ouml:"Lielais latīņu burts O ar diakritisko zīmi",
-times:"ReizinÄÅ¡anas zÄ«me ",Oslash:"Lielais latīņu burts O ar iesvÄ«trojumu",Ugrave:"Lielais latīņu burts U ar uzsvaras zÄ«mi",Uacute:"Lielais latīņu burts U ar akÅ«to uzsvars zÄ«mi",Ucirc:"Lielais latīņu burts U ar diakritisko zÄ«mi",Uuml:"Lielais latīņu burts U ar diakritisko zÄ«mi",Yacute:"Lielais latīņu burts Y ar akÅ«to uzsvaras zÄ«mi",THORN:"Lielais latīņu burts torn",szlig:"Mazs latīņu burts ar ligatÅ«ru",agrave:"Mazs latīņu burts a ar uzsvara zÄ«mi",aacute:"Mazs latīņu burts a ar akÅ«to uzsvara zÄ«mi",
-acirc:"Mazs latīņu burts a ar diakritisko zÄ«mi",atilde:"Mazs latīņu burts a ar tildi",auml:"Mazs latīņu burts a ar diakritisko zÄ«mi",aring:"Mazs latīņu burts a ar aplÄ«ti augÅ¡Ä",aelig:"Mazs latīņu burts æ",ccedil:"Mazs latīņu burts c ar ÄÄ·Ä«ti zem burta",egrave:"Mazs latīņu burts e ar uzsvara zÄ«mi ",eacute:"Mazs latīņu burts e ar akÅ«tu uzsvara zÄ«mi",ecirc:"Mazs latīņu burts e ar diakritisko zÄ«mi",euml:"Mazs latīņu burts e ar diakritisko zÄ«mi",igrave:"Mazs latīņu burts i ar uzsvara zÄ«mi ",iacute:"Mazs latīņu burts i ar akÅ«tu uzsvara zÄ«mi",
-icirc:"Mazs latīņu burts i ar diakritisko zīmi",iuml:"Mazs latīņu burts i ar diakritisko zīmi",eth:"Mazs latīņu burts eth",ntilde:"Mazs latīņu burts n ar tildi",ograve:"Mazs latīņu burts o ar uzsvara zīmi ",oacute:"Mazs latīņu burts o ar akūtu uzsvara zīmi",ocirc:"Mazs latīņu burts o ar diakritisko zīmi",otilde:"Mazs latīņu burts o ar tildi",ouml:"Mazs latīņu burts o ar diakritisko zīmi",divide:"Dalīšanas zīme",oslash:"Mazs latīņu burts o ar iesvītrojumu",ugrave:"Mazs latīņu burts u ar uzsvara zīmi ",
-uacute:"Mazs latīņu burts u ar akūtu uzsvara zīmi",ucirc:"Mazs latīņu burts u ar diakritisko zīmi",uuml:"Mazs latīņu burts u ar diakritisko zīmi",yacute:"Mazs latīņu burts y ar akūtu uzsvaras zīmi",thorn:"Mazs latīņu burts torns",yuml:"Mazs latīņu burts y ar diakritisko zīmi",OElig:"Liela latīņu ligatūra OE",oelig:"Maza latīņu ligatūra oe",372:"Liels latīņu burts W ar diakritisko zīmi ",374:"Liels latīņu burts Y ar diakritisko zīmi ",373:"Mazs latīņu burts w ar diakritisko zīmi ",375:"Mazs latīņu burts y ar diakritisko zīmi ",
-sbquo:"Mazas-9 vienkÄrtÄ«gas pÄ“diņas",8219:"Lielas-9 vienkÄrtÄ«gas apgrieztas pÄ“diņas",bdquo:"Mazas-9 dubultas pÄ“diņas",hellip:"HorizontÄli daudzpunkti",trade:"PreÄu zÄ«mes zÄ«me",9658:"Melns pa labi pagriezts radÄ«tÄjs",bull:"Lode",rarr:"Bulta pa labi",rArr:"Dubulta Bulta pa labi",hArr:"Bulta pa kreisi",diams:"Dubulta Bulta pa kreisi",asymp:"GandrÄ«z vienÄds ar"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/nb.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/nb.js
deleted file mode 100644
index 0cdcde20..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/nb.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","nb",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn",
-reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde",
-Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel",
-times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent",
-ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks",
-uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil",
-rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/nl.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/nl.js
deleted file mode 100644
index 68edf37f..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/nl.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","nl",{euro:"Euro-teken",lsquo:"Linker enkel aanhalingsteken",rsquo:"Rechter enkel aanhalingsteken",ldquo:"Linker dubbel aanhalingsteken",rdquo:"Rechter dubbel aanhalingsteken",ndash:"En dash",mdash:"Em dash",iexcl:"Omgekeerd uitroepteken",cent:"Cent-teken",pound:"Pond-teken",curren:"Valuta-teken",yen:"Yen-teken",brvbar:"Gebroken streep",sect:"Paragraaf-teken",uml:"Trema",copy:"Copyright-teken",ordf:"Vrouwelijk ordinaal",laquo:"Linker guillemet",not:"Ongelijk-teken",
-reg:"Geregistreerd handelsmerk-teken",macr:"Macron",deg:"Graden-teken",sup2:"Superscript twee",sup3:"Superscript drie",acute:"Accent aigu",micro:"Micro-teken",para:"Alinea-teken",middot:"Halfhoge punt",cedil:"Cedille",sup1:"Superscript een",ordm:"Mannelijk ordinaal",raquo:"Rechter guillemet",frac14:"Breuk kwart",frac12:"Breuk half",frac34:"Breuk driekwart",iquest:"Omgekeerd vraagteken",Agrave:"Latijnse hoofdletter A met een accent grave",Aacute:"Latijnse hoofdletter A met een accent aigu",Acirc:"Latijnse hoofdletter A met een circonflexe",
-Atilde:"Latijnse hoofdletter A met een tilde",Auml:"Latijnse hoofdletter A met een trema",Aring:"Latijnse hoofdletter A met een corona",AElig:"Latijnse hoofdletter Æ",Ccedil:"Latijnse hoofdletter C met een cedille",Egrave:"Latijnse hoofdletter E met een accent grave",Eacute:"Latijnse hoofdletter E met een accent aigu",Ecirc:"Latijnse hoofdletter E met een circonflexe",Euml:"Latijnse hoofdletter E met een trema",Igrave:"Latijnse hoofdletter I met een accent grave",Iacute:"Latijnse hoofdletter I met een accent aigu",
-Icirc:"Latijnse hoofdletter I met een circonflexe",Iuml:"Latijnse hoofdletter I met een trema",ETH:"Latijnse hoofdletter Eth",Ntilde:"Latijnse hoofdletter N met een tilde",Ograve:"Latijnse hoofdletter O met een accent grave",Oacute:"Latijnse hoofdletter O met een accent aigu",Ocirc:"Latijnse hoofdletter O met een circonflexe",Otilde:"Latijnse hoofdletter O met een tilde",Ouml:"Latijnse hoofdletter O met een trema",times:"Maal-teken",Oslash:"Latijnse hoofdletter O met een schuine streep",Ugrave:"Latijnse hoofdletter U met een accent grave",
-Uacute:"Latijnse hoofdletter U met een accent aigu",Ucirc:"Latijnse hoofdletter U met een circonflexe",Uuml:"Latijnse hoofdletter U met een trema",Yacute:"Latijnse hoofdletter Y met een accent aigu",THORN:"Latijnse hoofdletter Thorn",szlig:"Latijnse kleine ringel-s",agrave:"Latijnse kleine letter a met een accent grave",aacute:"Latijnse kleine letter a met een accent aigu",acirc:"Latijnse kleine letter a met een circonflexe",atilde:"Latijnse kleine letter a met een tilde",auml:"Latijnse kleine letter a met een trema",
-aring:"Latijnse kleine letter a met een corona",aelig:"Latijnse kleine letter æ",ccedil:"Latijnse kleine letter c met een cedille",egrave:"Latijnse kleine letter e met een accent grave",eacute:"Latijnse kleine letter e met een accent aigu",ecirc:"Latijnse kleine letter e met een circonflexe",euml:"Latijnse kleine letter e met een trema",igrave:"Latijnse kleine letter i met een accent grave",iacute:"Latijnse kleine letter i met een accent aigu",icirc:"Latijnse kleine letter i met een circonflexe",
-iuml:"Latijnse kleine letter i met een trema",eth:"Latijnse kleine letter eth",ntilde:"Latijnse kleine letter n met een tilde",ograve:"Latijnse kleine letter o met een accent grave",oacute:"Latijnse kleine letter o met een accent aigu",ocirc:"Latijnse kleine letter o met een circonflexe",otilde:"Latijnse kleine letter o met een tilde",ouml:"Latijnse kleine letter o met een trema",divide:"Deel-teken",oslash:"Latijnse kleine letter o met een schuine streep",ugrave:"Latijnse kleine letter u met een accent grave",
-uacute:"Latijnse kleine letter u met een accent aigu",ucirc:"Latijnse kleine letter u met een circonflexe",uuml:"Latijnse kleine letter u met een trema",yacute:"Latijnse kleine letter y met een accent aigu",thorn:"Latijnse kleine letter thorn",yuml:"Latijnse kleine letter y met een trema",OElig:"Latijnse hoofdletter Å’",oelig:"Latijnse kleine letter Å“",372:"Latijnse hoofdletter W met een circonflexe",374:"Latijnse hoofdletter Y met een circonflexe",373:"Latijnse kleine letter w met een circonflexe",
-375:"Latijnse kleine letter y met een circonflexe",sbquo:"Lage enkele aanhalingsteken",8219:"Hoge omgekeerde enkele aanhalingsteken",bdquo:"Lage dubbele aanhalingsteken",hellip:"Beletselteken",trade:"Trademark-teken",9658:"Zwarte driehoek naar rechts",bull:"Bullet",rarr:"Pijl naar rechts",rArr:"Dubbele pijl naar rechts",hArr:"Dubbele pijl naar links",diams:"Zwart ruitje",asymp:"Benaderingsteken"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/no.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/no.js
deleted file mode 100644
index eecc56c9..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/no.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","no",{euro:"Eurosymbol",lsquo:"Venstre enkelt anførselstegn",rsquo:"Høyre enkelt anførselstegn",ldquo:"Venstre dobbelt anførselstegn",rdquo:"Høyre anførsesltegn",ndash:"Kort tankestrek",mdash:"Lang tankestrek",iexcl:"Omvendt utropstegn",cent:"Centsymbol",pound:"Pundsymbol",curren:"Valutategn",yen:"Yensymbol",brvbar:"Brutt loddrett strek",sect:"Paragraftegn",uml:"Tøddel",copy:"Copyrighttegn",ordf:"Feminin ordensindikator",laquo:"Venstre anførselstegn",not:"Negasjonstegn",
-reg:"Registrert varemerke-tegn",macr:"Makron",deg:"Gradsymbol",sup2:"Hevet totall",sup3:"Hevet tretall",acute:"Akutt aksent",micro:"Mikrosymbol",para:"Avsnittstegn",middot:"Midtstilt prikk",cedil:"Cedille",sup1:"Hevet ettall",ordm:"Maskulin ordensindikator",raquo:"Høyre anførselstegn",frac14:"Fjerdedelsbrøk",frac12:"Halvbrøk",frac34:"Tre fjerdedelers brøk",iquest:"Omvendt spørsmålstegn",Agrave:"Stor A med grav aksent",Aacute:"Stor A med akutt aksent",Acirc:"Stor A med cirkumfleks",Atilde:"Stor A med tilde",
-Auml:"Stor A med tøddel",Aring:"Stor Å",AElig:"Stor Æ",Ccedil:"Stor C med cedille",Egrave:"Stor E med grav aksent",Eacute:"Stor E med akutt aksent",Ecirc:"Stor E med cirkumfleks",Euml:"Stor E med tøddel",Igrave:"Stor I med grav aksent",Iacute:"Stor I med akutt aksent",Icirc:"Stor I med cirkumfleks",Iuml:"Stor I med tøddel",ETH:"Stor Edd/stungen D",Ntilde:"Stor N med tilde",Ograve:"Stor O med grav aksent",Oacute:"Stor O med akutt aksent",Ocirc:"Stor O med cirkumfleks",Otilde:"Stor O med tilde",Ouml:"Stor O med tøddel",
-times:"Multiplikasjonstegn",Oslash:"Stor Ø",Ugrave:"Stor U med grav aksent",Uacute:"Stor U med akutt aksent",Ucirc:"Stor U med cirkumfleks",Uuml:"Stor U med tøddel",Yacute:"Stor Y med akutt aksent",THORN:"Stor Thorn",szlig:"Liten dobbelt-s/Eszett",agrave:"Liten a med grav aksent",aacute:"Liten a med akutt aksent",acirc:"Liten a med cirkumfleks",atilde:"Liten a med tilde",auml:"Liten a med tøddel",aring:"Liten å",aelig:"Liten æ",ccedil:"Liten c med cedille",egrave:"Liten e med grav aksent",eacute:"Liten e med akutt aksent",
-ecirc:"Liten e med cirkumfleks",euml:"Liten e med tøddel",igrave:"Liten i med grav aksent",iacute:"Liten i med akutt aksent",icirc:"Liten i med cirkumfleks",iuml:"Liten i med tøddel",eth:"Liten edd/stungen d",ntilde:"Liten n med tilde",ograve:"Liten o med grav aksent",oacute:"Liten o med akutt aksent",ocirc:"Liten o med cirkumfleks",otilde:"Liten o med tilde",ouml:"Liten o med tøddel",divide:"Divisjonstegn",oslash:"Liten ø",ugrave:"Liten u med grav aksent",uacute:"Liten u med akutt aksent",ucirc:"Liten u med cirkumfleks",
-uuml:"Liten u med tøddel",yacute:"Liten y med akutt aksent",thorn:"Liten thorn",yuml:"Liten y med tøddel",OElig:"Stor ligatur av O og E",oelig:"Liten ligatur av o og e",372:"Stor W med cirkumfleks",374:"Stor Y med cirkumfleks",373:"Liten w med cirkumfleks",375:"Liten y med cirkumfleks",sbquo:"Enkelt lavt 9-anførselstegn",8219:"Enkelt høyt reversert 9-anførselstegn",bdquo:"Dobbelt lavt 9-anførselstegn",hellip:"Ellipse",trade:"Varemerkesymbol",9658:"Svart høyrevendt peker",bull:"Tykk interpunkt",rarr:"Høyrevendt pil",
-rArr:"Dobbel høyrevendt pil",hArr:"Dobbel venstrevendt pil",diams:"Svart ruter",asymp:"Omtrent likhetstegn"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pl.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pl.js
deleted file mode 100644
index f21a09db..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pl.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","pl",{euro:"Znak euro",lsquo:"Cudzysłów pojedynczy otwierający",rsquo:"Cudzysłów pojedynczy zamykający",ldquo:"Cudzysłów apostrofowy otwierający",rdquo:"Cudzysłów apostrofowy zamykający",ndash:"Półpauza",mdash:"Pauza",iexcl:"Odwrócony wykrzyknik",cent:"Znak centa",pound:"Znak funta",curren:"Znak waluty",yen:"Znak jena",brvbar:"Przerwana pionowa kreska",sect:"Paragraf",uml:"Diereza",copy:"Znak praw autorskich",ordf:"Wskaźnik rodzaju żeńskiego liczebnika porządkowego",
-laquo:"Lewy cudzysłów ostrokątny",not:"Znak negacji",reg:"Zastrzeżony znak towarowy",macr:"Makron",deg:"Znak stopnia",sup2:"Druga potęga",sup3:"Trzecia potęga",acute:"Akcent ostry",micro:"Znak mikro",para:"Znak akapitu",middot:"Kropka środkowa",cedil:"Cedylla",sup1:"Pierwsza potęga",ordm:"Wskaźnik rodzaju męskiego liczebnika porządkowego",raquo:"Prawy cudzysłów ostrokątny",frac14:"Ułamek zwykły jedna czwarta",frac12:"Ułamek zwykły jedna druga",frac34:"Ułamek zwykły trzy czwarte",iquest:"Odwrócony znak zapytania",
-Agrave:"Wielka litera A z akcentem ciężkim",Aacute:"Wielka litera A z akcentem ostrym",Acirc:"Wielka litera A z akcentem przeciągłym",Atilde:"Wielka litera A z tyldą",Auml:"Wielka litera A z dierezą",Aring:"Wielka litera A z kółkiem",AElig:"Wielka ligatura Æ",Ccedil:"Wielka litera C z cedyllą",Egrave:"Wielka litera E z akcentem ciężkim",Eacute:"Wielka litera E z akcentem ostrym",Ecirc:"Wielka litera E z akcentem przeciągłym",Euml:"Wielka litera E z dierezą",Igrave:"Wielka litera I z akcentem ciężkim",
-Iacute:"Wielka litera I z akcentem ostrym",Icirc:"Wielka litera I z akcentem przeciągłym",Iuml:"Wielka litera I z dierezą",ETH:"Wielka litera Eth",Ntilde:"Wielka litera N z tyldą",Ograve:"Wielka litera O z akcentem ciężkim",Oacute:"Wielka litera O z akcentem ostrym",Ocirc:"Wielka litera O z akcentem przeciągłym",Otilde:"Wielka litera O z tyldą",Ouml:"Wielka litera O z dierezą",times:"Znak mnożenia wektorowego",Oslash:"Wielka litera O z przekreśleniem",Ugrave:"Wielka litera U z akcentem ciężkim",Uacute:"Wielka litera U z akcentem ostrym",
-Ucirc:"Wielka litera U z akcentem przeciągłym",Uuml:"Wielka litera U z dierezą",Yacute:"Wielka litera Y z akcentem ostrym",THORN:"Wielka litera Thorn",szlig:"Mała litera ostre s (eszet)",agrave:"Mała litera a z akcentem ciężkim",aacute:"Mała litera a z akcentem ostrym",acirc:"Mała litera a z akcentem przeciągłym",atilde:"Mała litera a z tyldą",auml:"Mała litera a z dierezą",aring:"Mała litera a z kółkiem",aelig:"Mała ligatura æ",ccedil:"Mała litera c z cedyllą",egrave:"Mała litera e z akcentem ciężkim",
-eacute:"Mała litera e z akcentem ostrym",ecirc:"Mała litera e z akcentem przeciągłym",euml:"Mała litera e z dierezą",igrave:"Mała litera i z akcentem ciężkim",iacute:"Mała litera i z akcentem ostrym",icirc:"Mała litera i z akcentem przeciągłym",iuml:"Mała litera i z dierezą",eth:"Mała litera eth",ntilde:"Mała litera n z tyldą",ograve:"Mała litera o z akcentem ciężkim",oacute:"Mała litera o z akcentem ostrym",ocirc:"Mała litera o z akcentem przeciągłym",otilde:"Mała litera o z tyldą",ouml:"Mała litera o z dierezą",
-divide:"Anglosaski znak dzielenia",oslash:"Mała litera o z przekreśleniem",ugrave:"Mała litera u z akcentem ciężkim",uacute:"Mała litera u z akcentem ostrym",ucirc:"Mała litera u z akcentem przeciągłym",uuml:"Mała litera u z dierezą",yacute:"Mała litera y z akcentem ostrym",thorn:"Mała litera thorn",yuml:"Mała litera y z dierezą",OElig:"Wielka ligatura OE",oelig:"Mała ligatura oe",372:"Wielka litera W z akcentem przeciągłym",374:"Wielka litera Y z akcentem przeciągłym",373:"Mała litera w z akcentem przeciągłym",
-375:"Mała litera y z akcentem przeciągłym",sbquo:"Pojedynczy apostrof dolny",8219:"Pojedynczy apostrof górny",bdquo:"Podwójny apostrof dolny",hellip:"Wielokropek",trade:"Znak towarowy",9658:"Czarny wskaźnik wskazujący w prawo",bull:"Punktor",rarr:"Strzałka w prawo",rArr:"Podwójna strzałka w prawo",hArr:"Podwójna strzałka w lewo",diams:"Czarny znak karo",asymp:"Znak prawie równe"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js
deleted file mode 100644
index e3f78319..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","pt-br",{euro:"Euro",lsquo:"Aspas simples esquerda",rsquo:"Aspas simples direita",ldquo:"Aspas duplas esquerda",rdquo:"Aspas duplas direita",ndash:"Traço",mdash:"Travessão",iexcl:"Ponto de exclamação invertido",cent:"Cent",pound:"Cerquilha",curren:"Dinheiro",yen:"Yen",brvbar:"Bara interrompida",sect:"Símbolo de Parágrafo",uml:"Trema",copy:"Direito de Cópia",ordf:"Indicador ordinal feminino",laquo:"Aspas duplas angulares esquerda",not:"Negação",reg:"Marca Registrada",
-macr:"Mácron",deg:"Grau",sup2:"2 Superscrito",sup3:"3 Superscrito",acute:"Acento agudo",micro:"Micro",para:"Pé de mosca",middot:"Ponto mediano",cedil:"Cedilha",sup1:"1 Superscrito",ordm:"Indicador ordinal masculino",raquo:"Aspas duplas angulares direita",frac14:"Um quarto",frac12:"Um meio",frac34:"Três quartos",iquest:"Interrogação invertida",Agrave:"A maiúsculo com acento grave",Aacute:"A maiúsculo com acento agudo",Acirc:"A maiúsculo com acento circunflexo",Atilde:"A maiúsculo com til",Auml:"A maiúsculo com trema",
-Aring:"A maiúsculo com anel acima",AElig:"Æ maiúsculo",Ccedil:"Ç maiúlculo",Egrave:"E maiúsculo com acento grave",Eacute:"E maiúsculo com acento agudo",Ecirc:"E maiúsculo com acento circumflexo",Euml:"E maiúsculo com trema",Igrave:"I maiúsculo com acento grave",Iacute:"I maiúsculo com acento agudo",Icirc:"I maiúsculo com acento circunflexo",Iuml:"I maiúsculo com crase",ETH:"Eth maiúsculo",Ntilde:"N maiúsculo com til",Ograve:"O maiúsculo com acento grave",Oacute:"O maiúsculo com acento agudo",Ocirc:"O maiúsculo com acento circunflexo",
-Otilde:"O maiúsculo com til",Ouml:"O maiúsculo com trema",times:"Multiplicação",Oslash:"Diâmetro",Ugrave:"U maiúsculo com acento grave",Uacute:"U maiúsculo com acento agudo",Ucirc:"U maiúsculo com acento circunflexo",Uuml:"U maiúsculo com trema",Yacute:"Y maiúsculo com acento agudo",THORN:"Thorn maiúsculo",szlig:"Eszett minúsculo",agrave:"a minúsculo com acento grave",aacute:"a minúsculo com acento agudo",acirc:"a minúsculo com acento circunflexo",atilde:"a minúsculo com til",auml:"a minúsculo com trema",
-aring:"a minúsculo com anel acima",aelig:"æ minúsculo",ccedil:"ç minúsculo",egrave:"e minúsculo com acento grave",eacute:"e minúsculo com acento agudo",ecirc:"e minúsculo com acento circunflexo",euml:"e minúsculo com trema",igrave:"i minúsculo com acento grave",iacute:"i minúsculo com acento agudo",icirc:"i minúsculo com acento circunflexo",iuml:"i minúsculo com trema",eth:"eth minúsculo",ntilde:"n minúsculo com til",ograve:"o minúsculo com acento grave",oacute:"o minúsculo com acento agudo",ocirc:"o minúsculo com acento circunflexo",
-otilde:"o minúsculo com til",ouml:"o minúsculo com trema",divide:"Divisão",oslash:"o minúsculo com cortado ou diâmetro",ugrave:"u minúsculo com acento grave",uacute:"u minúsculo com acento agudo",ucirc:"u minúsculo com acento circunflexo",uuml:"u minúsculo com trema",yacute:"y minúsculo com acento agudo",thorn:"thorn minúsculo",yuml:"y minúsculo com trema",OElig:"Ligação tipográfica OE maiúscula",oelig:"Ligação tipográfica oe minúscula",372:"W maiúsculo com acento circunflexo",374:"Y maiúsculo com acento circunflexo",
-373:"w minúsculo com acento circunflexo",375:"y minúsculo com acento circunflexo",sbquo:"Aspas simples inferior direita",8219:"Aspas simples superior esquerda",bdquo:"Aspas duplas inferior direita",hellip:"Reticências",trade:"Trade mark",9658:"Ponta de seta preta para direita",bull:"Ponto lista",rarr:"Seta para direita",rArr:"Seta dupla para direita",hArr:"Seta dupla direita e esquerda",diams:"Ouros",asymp:"Aproximadamente"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pt.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pt.js
deleted file mode 100644
index 11ef746a..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/pt.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","pt",{euro:"Símbolo do Euro",lsquo:"Aspa esquerda simples",rsquo:"Aspa direita simples",ldquo:"Aspa esquerda dupla",rdquo:"Aspa direita dupla",ndash:"Travessão Simples",mdash:"Travessão Longo",iexcl:"Ponto de exclamação invertido",cent:"Símbolo do Cêntimo",pound:"Símbolo da Libra",curren:"Símbolo de Moeda",yen:"Símbolo do Iene",brvbar:"Barra quebrada",sect:"Símbolo de Secção",uml:"Trema",copy:"Símbolo dos Direitos de Autor",ordf:"Indicador ordinal feminino",
-laquo:"Aspa esquerda ângulo duplo",not:"Não Símbolo",reg:"Símbolo de Registado",macr:"Mácron",deg:"Símbolo de Grau",sup2:"Expoente 2",sup3:"Expoente 3",acute:"Acento agudo",micro:"Símbolo de Micro",para:"Símbolo de Parágrafo",middot:"Ponto do Meio",cedil:"Cedilha",sup1:"Expoente 1",ordm:"Indicador ordinal masculino",raquo:"Aspas ângulo duplo pra Direita",frac14:"Fração vulgar 1/4",frac12:"Fração vulgar 1/2",frac34:"Fração vulgar 3/4",iquest:"Ponto de interrugação invertido",Agrave:"Letra maiúscula latina A com acento grave",
-Aacute:"Letra maiúscula latina A com acento agudo",Acirc:"Letra maiúscula latina A com circunflexo",Atilde:"Letra maiúscula latina A com til",Auml:"Letra maiúscula latina A com trema",Aring:"Letra maiúscula latina A com sinal diacrítico",AElig:"Letra Maiúscula Latina Æ",Ccedil:"Letra maiúscula latina C com cedilha",Egrave:"Letra maiúscula latina E com acento grave",Eacute:"Letra maiúscula latina E com acento agudo",Ecirc:"Letra maiúscula latina E com circunflexo",Euml:"Letra maiúscula latina E com trema",
-Igrave:"Letra maiúscula latina I com acento grave",Iacute:"Letra maiúscula latina I com acento agudo",Icirc:"Letra maiúscula latina I com cincunflexo",Iuml:"Letra maiúscula latina I com trema",ETH:"Letra maiúscula latina Eth (Ãð)",Ntilde:"Letra maiúscula latina N com til",Ograve:"Letra maiúscula latina O com acento grave",Oacute:"Letra maiúscula latina O com acento agudo",Ocirc:"Letra maiúscula latina I com circunflexo",Otilde:"Letra maiúscula latina O com til",Ouml:"Letra maiúscula latina O com trema",
-times:"Símbolo de Multiplicação",Oslash:"Letra maiúscula O com barra",Ugrave:"Letra maiúscula latina U com acento grave",Uacute:"Letra maiúscula latina U com acento agudo",Ucirc:"Letra maiúscula latina U com circunflexo",Uuml:"Letra maiúscula latina E com trema",Yacute:"Letra maiúscula latina Y com acento agudo",THORN:"Letra maiúscula latina Rúnico",szlig:"Letra minúscula latina s forte",agrave:"Letra minúscula latina a com acento grave",aacute:"Letra minúscula latina a com acento agudo",acirc:"Letra minúscula latina a com circunflexo",
-atilde:"Letra minúscula latina a com til",auml:"Letra minúscula latina a com trema",aring:"Letra minúscula latina a com sinal diacrítico",aelig:"Letra minúscula latina æ",ccedil:"Letra minúscula latina c com cedilha",egrave:"Letra minúscula latina e com acento grave",eacute:"Letra minúscula latina e com acento agudo",ecirc:"Letra minúscula latina e com circunflexo",euml:"Letra minúscula latina e com trema",igrave:"Letra minúscula latina i com acento grave",iacute:"Letra minúscula latina i com acento agudo",
-icirc:"Letra minúscula latina i com circunflexo",iuml:"Letra pequena latina i com trema",eth:"Letra minúscula latina eth",ntilde:"Letra minúscula latina n com til",ograve:"Letra minúscula latina o com acento grave",oacute:"Letra minúscula latina o com acento agudo",ocirc:"Letra minúscula latina o com circunflexo",otilde:"Letra minúscula latina o com til",ouml:"Letra minúscula latina o com trema",divide:"Símbolo de Divisão",oslash:"Letra minúscula latina o com barra",ugrave:"Letra minúscula latina u com acento grave",
-uacute:"Letra minúscula latina u com acento agudo",ucirc:"Letra minúscula latina u com circunflexo",uuml:"Letra minúscula latina u com trema",yacute:"Letra minúscula latina y com acento agudo",thorn:"Letra minúscula latina Rúnico",yuml:"Letra minúscula latina y com trema",OElig:"Ligadura maiúscula latina OE",oelig:"Ligadura minúscula latina oe",372:"Letra maiúscula latina W com circunflexo",374:"Letra maiúscula latina Y com circunflexo",373:"Letra minúscula latina w com circunflexo",375:"Letra minúscula latina y com circunflexo",
-sbquo:"Aspa Simples inferior-9",8219:"Aspa Simples superior invertida-9",bdquo:"Aspa Duplas inferior-9",hellip:"Elipse Horizontal ",trade:"Símbolo de Marca Registada",9658:"Ponteiro preto direito",bull:"Marca",rarr:"Seta para a direita",rArr:"Seta dupla para a direita",hArr:"Seta dupla direita esquerda",diams:"Naipe diamante preto",asymp:"Quase igual a "}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ru.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ru.js
deleted file mode 100644
index 866e8659..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ru.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","ru",{euro:"Знак евро",lsquo:"Ð›ÐµÐ²Ð°Ñ Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð°Ñ ÐºÐ°Ð²Ñ‹Ñ‡ÐºÐ°",rsquo:"ÐŸÑ€Ð°Ð²Ð°Ñ Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð°Ñ ÐºÐ°Ð²Ñ‹Ñ‡ÐºÐ°",ldquo:"Ð›ÐµÐ²Ð°Ñ Ð´Ð²Ð¾Ð¹Ð½Ð°Ñ ÐºÐ°Ð²Ñ‹Ñ‡ÐºÐ°",rdquo:"Ð›ÐµÐ²Ð°Ñ Ð´Ð²Ð¾Ð¹Ð½Ð°Ñ ÐºÐ°Ð²Ñ‹Ñ‡ÐºÐ°",ndash:"Среднее тире",mdash:"Длинное тире",iexcl:"перевёрнутый воÑклицательный знак",cent:"Цент",pound:"Фунт",curren:"Знак валюты",yen:"Йена",brvbar:"Ð’ÐµÑ€Ñ‚Ð¸ÐºÐ°Ð»ÑŒÐ½Ð°Ñ Ñ‡ÐµÑ€Ñ‚Ð° Ñ Ñ€Ð°Ð·Ñ€Ñ‹Ð²Ð¾Ð¼",sect:"Знак параграфа",uml:"Умлаут",copy:"Знак охраны авторÑкого права",ordf:"Указатель Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ Ð¶ÐµÐ½Ñкого рода ...аÑ",laquo:"Ð›ÐµÐ²Ð°Ñ ÐºÐ°Ð²Ñ‹Ñ‡ÐºÐ°-«ёлочка»",
-not:"Отрицание",reg:"Знак охраны Ñмежных прав\\t",macr:"Макрон",deg:"ГрадуÑ",sup2:"ÐадÑтрочное два",sup3:"ÐадÑтрочное три",acute:"Ðкут",micro:"Микро",para:"Ðбзац",middot:"Интерпункт",cedil:"Седиль",sup1:"ÐадÑÑ‚Ñ€Ð¾Ñ‡Ð½Ð°Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ†Ð°",ordm:"ПорÑдковое чиÑлительное",raquo:"ÐŸÑ€Ð°Ð²Ð°Ñ ÐºÐ°Ð²Ñ‹Ñ‡ÐºÐ°-«ёлочка»",frac14:"Одна четвертаÑ",frac12:"Одна втораÑ",frac34:"Три четвёртых",iquest:"Перевёрнутый вопроÑительный знак",Agrave:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° Ð Ñ Ð°Ð¿Ð¾Ñтрофом",Aacute:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° A Ñ ÑƒÐ´Ð°Ñ€ÐµÐ½Ð¸ÐµÐ¼",Acirc:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° Ð Ñ Ñ†Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑом",
-Atilde:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° Ð Ñ Ñ‚Ð¸Ð»ÑŒÐ´Ð¾Ð¹",Auml:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° Ð Ñ Ñ‚Ñ€ÐµÐ¼Ð¾Ð¹",Aring:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° Ð Ñ ÐºÐ¾Ð»ÑŒÑ†Ð¾Ð¼ над ней",AElig:"ЛатинÑÐºÐ°Ñ Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ð±ÑƒÐºÐ²Ð° Æ",Ccedil:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° C Ñ Ñедилью",Egrave:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° Е Ñ Ð°Ð¿Ð¾Ñтрофом",Eacute:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° Е Ñ ÑƒÐ´Ð°Ñ€ÐµÐ½Ð¸ÐµÐ¼",Ecirc:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° Е Ñ Ñ†Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑом",Euml:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° Е Ñ Ñ‚Ñ€ÐµÐ¼Ð¾Ð¹",Igrave:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° I Ñ Ð°Ð¿Ð¾Ñтрофом",Iacute:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° I Ñ ÑƒÐ´Ð°Ñ€ÐµÐ½Ð¸ÐµÐ¼",
-Icirc:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° I Ñ Ñ†Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑом",Iuml:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° I Ñ Ñ‚Ñ€ÐµÐ¼Ð¾Ð¹",ETH:"ЛатинÑÐºÐ°Ñ Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ð±ÑƒÐºÐ²Ð° Eth",Ntilde:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° N Ñ Ñ‚Ð¸Ð»ÑŒÐ´Ð¾Ð¹",Ograve:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° O Ñ Ð°Ð¿Ð¾Ñтрофом",Oacute:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° O Ñ ÑƒÐ´Ð°Ñ€ÐµÐ½Ð¸ÐµÐ¼",Ocirc:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° O Ñ Ñ†Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑом",Otilde:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° O Ñ Ñ‚Ð¸Ð»ÑŒÐ´Ð¾Ð¹",Ouml:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° O Ñ Ñ‚Ñ€ÐµÐ¼Ð¾Ð¹",times:"Знак умножениÑ",Oslash:"ЛатинÑÐºÐ°Ñ Ð±Ð¾Ð»ÑŒÑˆÐ°Ñ Ð¿ÐµÑ€ÐµÑ‡ÐµÑ€ÐºÐ½ÑƒÑ‚Ð°Ñ O",Ugrave:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° U Ñ Ð°Ð¿Ð¾Ñтрофом",
-Uacute:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° U Ñ ÑƒÐ´Ð°Ñ€ÐµÐ½Ð¸ÐµÐ¼",Ucirc:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° U Ñ Ñ†Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑом",Uuml:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° U Ñ Ñ‚Ñ€ÐµÐ¼Ð¾Ð¹",Yacute:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° Y Ñ ÑƒÐ´Ð°Ñ€ÐµÐ½Ð¸ÐµÐ¼",THORN:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° Thorn",szlig:"Знак диеза",agrave:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° a Ñ Ð°Ð¿Ð¾Ñтрофом",aacute:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° a Ñ ÑƒÐ´Ð°Ñ€ÐµÐ½Ð¸ÐµÐ¼",acirc:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° a Ñ Ñ†Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑом",atilde:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° a Ñ Ñ‚Ð¸Ð»ÑŒÐ´Ð¾Ð¹",auml:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° a Ñ Ñ‚Ñ€ÐµÐ¼Ð¾Ð¹",aring:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° a Ñ ÐºÐ¾Ð»ÑŒÑ†Ð¾Ð¼",
-aelig:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° æ",ccedil:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° Ñ Ñ Ñедилью",egrave:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° е Ñ Ð°Ð¿Ð¾Ñтрофом",eacute:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° е Ñ ÑƒÐ´Ð°Ñ€ÐµÐ½Ð¸ÐµÐ¼",ecirc:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° е Ñ Ñ†Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑом",euml:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° е Ñ Ñ‚Ñ€ÐµÐ¼Ð¾Ð¹",igrave:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° i Ñ Ð°Ð¿Ð¾Ñтрофом",iacute:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° i Ñ ÑƒÐ´Ð°Ñ€ÐµÐ½Ð¸ÐµÐ¼",icirc:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° i Ñ Ñ†Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑом",iuml:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° i Ñ Ñ‚Ñ€ÐµÐ¼Ð¾Ð¹",eth:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° eth",
-ntilde:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° n Ñ Ñ‚Ð¸Ð»ÑŒÐ´Ð¾Ð¹",ograve:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° o Ñ Ð°Ð¿Ð¾Ñтрофом",oacute:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° o Ñ ÑƒÐ´Ð°Ñ€ÐµÐ½Ð¸ÐµÐ¼",ocirc:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° o Ñ Ñ†Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑом",otilde:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° o Ñ Ñ‚Ð¸Ð»ÑŒÐ´Ð¾Ð¹",ouml:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° o Ñ Ñ‚Ñ€ÐµÐ¼Ð¾Ð¹",divide:"Знак делениÑ",oslash:"ЛатинÑÐºÐ°Ñ ÑÑ‚Ñ€Ð¾Ñ‡Ð½Ð°Ñ Ð¿ÐµÑ€ÐµÑ‡ÐµÑ€ÐºÐ½ÑƒÑ‚Ð°Ñ o",ugrave:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° u Ñ Ð°Ð¿Ð¾Ñтрофом",uacute:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° u Ñ ÑƒÐ´Ð°Ñ€ÐµÐ½Ð¸ÐµÐ¼",ucirc:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° u Ñ Ñ†Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑом",
-uuml:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° u Ñ Ñ‚Ñ€ÐµÐ¼Ð¾Ð¹",yacute:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° y Ñ ÑƒÐ´Ð°Ñ€ÐµÐ½Ð¸ÐµÐ¼",thorn:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° thorn",yuml:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° y Ñ Ñ‚Ñ€ÐµÐ¼Ð¾Ð¹",OElig:"ЛатинÑÐºÐ°Ñ Ð¿Ñ€Ð¾Ð¿Ð¸ÑÐ½Ð°Ñ Ð»Ð¸Ð³Ð°Ñ‚ÑƒÑ€Ð° OE",oelig:"ЛатинÑÐºÐ°Ñ ÑÑ‚Ñ€Ð¾Ñ‡Ð½Ð°Ñ Ð»Ð¸Ð³Ð°Ñ‚ÑƒÑ€Ð° oe",372:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° W Ñ Ñ†Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑом",374:"ЛатинÑÐºÐ°Ñ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð°Ñ Ð±ÑƒÐºÐ²Ð° Y Ñ Ñ†Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑом",373:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° w Ñ Ñ†Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑом",375:"ЛатинÑÐºÐ°Ñ Ð¼Ð°Ð»ÐµÐ½ÑŒÐºÐ°Ñ Ð±ÑƒÐºÐ²Ð° y Ñ Ñ†Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑом",sbquo:"ÐижнÑÑ Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð°Ñ ÐºÐ°Ð²Ñ‹Ñ‡ÐºÐ°",8219:"ÐŸÑ€Ð°Ð²Ð°Ñ Ð¾Ð´Ð¸Ð½Ð°Ñ€Ð½Ð°Ñ ÐºÐ°Ð²Ñ‹Ñ‡ÐºÐ°",
-bdquo:"Ð›ÐµÐ²Ð°Ñ Ð´Ð²Ð¾Ð¹Ð½Ð°Ñ ÐºÐ°Ð²Ñ‹Ñ‡ÐºÐ°",hellip:"Горизонтальное многоточие",trade:"Товарный знак",9658:"Черный указатель вправо",bull:"Маркер ÑпиÑка",rarr:"Стрелка вправо",rArr:"Ð”Ð²Ð¾Ð¹Ð½Ð°Ñ Ñтрелка вправо",hArr:"Ð”Ð²Ð¾Ð¹Ð½Ð°Ñ Ñтрелка влево-вправо",diams:"Черный ромб",asymp:"Примерно равно"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/si.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/si.js
deleted file mode 100644
index 1255a350..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/si.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","si",{euro:"යුර෠සලකුණ",lsquo:"වමේ තනි උපුට෠දක්වීම ",rsquo:"දකුණේ තනි උපුට෠දක්වීම ",ldquo:"වමේ දිත්ව උපුට෠දක්වීම ",rdquo:"දකුණේ දිත්ව උපුට෠දක්වීම ",ndash:"En dash",mdash:"Em dash",iexcl:"යටිකුරු හර්ෂදී ",cent:"Cent sign",pound:"Pound sign",curren:"මුල්â€à¶ºà¶¸à¶º ",yen:"යෙන් ",brvbar:"Broken bar",sect:"තෙරේම් ",uml:"Diaeresis",copy:"පිටපත් අයිතිය ",ordf:"දර්à·à¶šà¶º",laquo:"Left-pointing double angle quotation mark",not:"සලකුණක් නොවේ",reg:"සලකුණක් ලියà·à¶´à¶¯à·’ංචි කිරීම",
-macr:"මුද්â€à¶»à·’ත ",deg:"සලකුණේ ",sup2:"උඩු ලකුණු දෙක",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent",
-Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",
-Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",
-Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",
-aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",
-ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",
-thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",
-bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sk.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sk.js
deleted file mode 100644
index 2d226d06..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sk.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","sk",{euro:"Znak eura",lsquo:"Ľavá jednoduchá úvodzovka",rsquo:"Pravá jednoduchá úvodzovka",ldquo:"Pravá dvojitá úvodzovka",rdquo:"Pravá dvojitá úvodzovka",ndash:"En pomlÄka",mdash:"Em pomlÄka",iexcl:"Obrátený výkriÄník",cent:"Znak centu",pound:"Znak libry",curren:"Znak meny",yen:"Znak jenu",brvbar:"PreruÅ¡ená zvislá Äiara",sect:"Znak odseku",uml:"Prehláska",copy:"Znak copyrightu",ordf:"Ženský indikátor rodu",laquo:"Znak dvojitých lomených úvodzoviek vľavo",not:"Logistický zápor",
-reg:"Znak registrácie",macr:"PomlÄka nad",deg:"Znak stupňa",sup2:"Dvojka ako horný index",sup3:"Trojka ako horný index",acute:"Dĺžeň",micro:"Znak mikro",para:"Znak odstavca",middot:"Bodka uprostred",cedil:"Chvost vľavo",sup1:"Jednotka ako horný index",ordm:"Mužský indikátor rodu",raquo:"Znak dvojitých lomených úvodzoviek vpravo",frac14:"ObyÄajný zlomok jedna Å¡tvrtina",frac12:"ObyÄajný zlomok jedna polovica",frac34:"ObyÄajný zlomok tri Å¡tvrtiny",iquest:"OtoÄený otáznik",Agrave:"Veľké písmeno latinky A s accentom",
-Aacute:"Veľké písmeno latinky A s dĺžňom",Acirc:"Veľké písmeno latinky A s mäkÄeňom",Atilde:"Veľké písmeno latinky A s tildou",Auml:"Veľké písmeno latinky A s dvoma bodkami",Aring:"Veľké písmeno latinky A s krúžkom nad",AElig:"Veľké písmeno latinky Æ",Ccedil:"Veľké písmeno latinky C s chvostom vľavo",Egrave:"Veľké písmeno latinky E s accentom",Eacute:"Veľké písmeno latinky E s dĺžňom",Ecirc:"Veľké písmeno latinky E s mäkÄeňom",Euml:"Veľké písmeno latinky E s dvoma bodkami",Igrave:"Veľké písmeno latinky I s accentom",
-Iacute:"Veľké písmeno latinky I s dĺžňom",Icirc:"Veľké písmeno latinky I s mäkÄeňom",Iuml:"Veľké písmeno latinky I s dvoma bodkami",ETH:"Veľké písmeno latinky Eth",Ntilde:"Veľké písmeno latinky N s tildou",Ograve:"Veľké písmeno latinky O s accentom",Oacute:"Veľké písmeno latinky O s dĺžňom",Ocirc:"Veľké písmeno latinky O s mäkÄeňom",Otilde:"Veľké písmeno latinky O s tildou",Ouml:"Veľké písmeno latinky O s dvoma bodkami",times:"Znak násobenia",Oslash:"Veľké písmeno latinky O preÅ¡krtnuté",Ugrave:"Veľké písmeno latinky U s accentom",
-Uacute:"Veľké písmeno latinky U s dĺžňom",Ucirc:"Veľké písmeno latinky U s mäkÄeňom",Uuml:"Veľké písmeno latinky U s dvoma bodkami",Yacute:"Veľké písmeno latinky Y s dĺžňom",THORN:"Veľké písmeno latinky Thorn",szlig:"Malé písmeno latinky ostré s",agrave:"Malé písmeno latinky a s accentom",aacute:"Malé písmeno latinky a s dĺžňom",acirc:"Malé písmeno latinky a s mäkÄeňom",atilde:"Malé písmeno latinky a s tildou",auml:"Malé písmeno latinky a s dvoma bodkami",aring:"Malé písmeno latinky a s krúžkom nad",
-aelig:"Malé písmeno latinky æ",ccedil:"Malé písmeno latinky c s chvostom vľavo",egrave:"Malé písmeno latinky e s accentom",eacute:"Malé písmeno latinky e s dĺžňom",ecirc:"Malé písmeno latinky e s mäkÄeňom",euml:"Malé písmeno latinky e s dvoma bodkami",igrave:"Malé písmeno latinky i s accentom",iacute:"Malé písmeno latinky i s dĺžňom",icirc:"Malé písmeno latinky i s mäkÄeňom",iuml:"Malé písmeno latinky i s dvoma bodkami",eth:"Malé písmeno latinky eth",ntilde:"Malé písmeno latinky n s tildou",ograve:"Malé písmeno latinky o s accentom",
-oacute:"Malé písmeno latinky o s dĺžňom",ocirc:"Malé písmeno latinky o s mäkÄeňom",otilde:"Malé písmeno latinky o s tildou",ouml:"Malé písmeno latinky o s dvoma bodkami",divide:"Znak delenia",oslash:"Malé písmeno latinky o preÅ¡krtnuté",ugrave:"Malé písmeno latinky u s accentom",uacute:"Malé písmeno latinky u s dĺžňom",ucirc:"Malé písmeno latinky u s mäkÄeňom",uuml:"Malé písmeno latinky u s dvoma bodkami",yacute:"Malé písmeno latinky y s dĺžňom",thorn:"Malé písmeno latinky thorn",yuml:"Malé písmeno latinky y s dvoma bodkami",
-OElig:"Veľká ligatúra latinky OE",oelig:"Malá ligatúra latinky OE",372:"Veľké písmeno latinky W s mäkÄeňom",374:"Veľké písmeno latinky Y s mäkÄeňom",373:"Malé písmeno latinky w s mäkÄeňom",375:"Malé písmeno latinky y s mäkÄeňom",sbquo:"Dolná jednoduchá 9-úvodzovka",8219:"Horná jednoduchá otoÄená 9-úvodzovka",bdquo:"Dolná dvojitá 9-úvodzovka",hellip:"Trojbodkový úvod",trade:"Znak ibchodnej znaÄky",9658:"ÄŒierny ukazovateľ smerujúci vpravo",bull:"Kruh",rarr:"Šípka vpravo",rArr:"Dvojitá Å¡ipka vpravo",
-hArr:"Dvojitá šipka vľavo a vpravo",diams:"Čierne piky",asymp:"Skoro sa rovná"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sl.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sl.js
deleted file mode 100644
index 84759b62..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sl.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","sl",{euro:"Evro znak",lsquo:"Levi enojni narekovaj",rsquo:"Desni enojni narekovaj",ldquo:"Levi dvojni narekovaj",rdquo:"Desni dvojni narekovaj",ndash:"En pomiÅ¡ljaj",mdash:"Em pomiÅ¡ljaj",iexcl:"Obrnjen klicaj",cent:"Cent znak",pound:"Funt znak",curren:"Znak valute",yen:"Jen znak",brvbar:"Zlomljena Ärta",sect:"Znak oddelka",uml:"Diaeresis",copy:"Znak avtorskih pravic",ordf:"Ženski zaporedni kazalnik",laquo:"Levi obrnjen dvojni kotni narekovaj",not:"Ne znak",reg:"Registrirani znak",
-macr:"Macron",deg:"Znak stopinj",sup2:"Nadpisano dva",sup3:"Nadpisano tri",acute:"Ostrivec",micro:"Mikro znak",para:"Pilcrow znak",middot:"Sredinska pika",cedil:"Cedilla",sup1:"Nadpisano ena",ordm:"MoÅ¡ki zaporedni kazalnik",raquo:"Desno obrnjen dvojni kotni narekovaj",frac14:"Ena Äetrtina",frac12:"Ena polovica",frac34:"Tri Äetrtine",iquest:"Obrnjen vpraÅ¡aj",Agrave:"Velika latinska Ärka A s krativcem",Aacute:"Velika latinska Ärka A z ostrivcem",Acirc:"Velika latinska Ärka A s streÅ¡ico",Atilde:"Velika latinska Ärka A z tildo",
-Auml:"Velika latinska Ärka A z diaeresis-om",Aring:"Velika latinska Ärka A z obroÄem",AElig:"Velika latinska Ärka Æ",Ccedil:"Velika latinska Ärka C s cedillo",Egrave:"Velika latinska Ärka E s krativcem",Eacute:"Velika latinska Ärka E z ostrivcem",Ecirc:"Velika latinska Ärka E s streÅ¡ico",Euml:"Velika latinska Ärka E z diaeresis-om",Igrave:"Velika latinska Ärka I s krativcem",Iacute:"Velika latinska Ärka I z ostrivcem",Icirc:"Velika latinska Ärka I s streÅ¡ico",Iuml:"Velika latinska Ärka I z diaeresis-om",
-ETH:"Velika latinska Ärka Eth",Ntilde:"Velika latinska Ärka N s tildo",Ograve:"Velika latinska Ärka O s krativcem",Oacute:"Velika latinska Ärka O z ostrivcem",Ocirc:"Velika latinska Ärka O s streÅ¡ico",Otilde:"Velika latinska Ärka O s tildo",Ouml:"Velika latinska Ärka O z diaeresis-om",times:"Znak za množenje",Oslash:"Velika preÄrtana latinska Ärka O",Ugrave:"Velika latinska Ärka U s krativcem",Uacute:"Velika latinska Ärka U z ostrivcem",Ucirc:"Velika latinska Ärka U s streÅ¡ico",Uuml:"Velika latinska Ärka U z diaeresis-om",
-Yacute:"Velika latinska Ärka Y z ostrivcem",THORN:"Velika latinska Ärka Thorn",szlig:"Mala ostra latinska Ärka s",agrave:"Mala latinska Ärka a s krativcem",aacute:"Mala latinska Ärka a z ostrivcem",acirc:"Mala latinska Ärka a s streÅ¡ico",atilde:"Mala latinska Ärka a s tildo",auml:"Mala latinska Ärka a z diaeresis-om",aring:"Mala latinska Ärka a z obroÄem",aelig:"Mala latinska Ärka æ",ccedil:"Mala latinska Ärka c s cedillo",egrave:"Mala latinska Ärka e s krativcem",eacute:"Mala latinska Ärka e z ostrivcem",
-ecirc:"Mala latinska Ärka e s streÅ¡ico",euml:"Mala latinska Ärka e z diaeresis-om",igrave:"Mala latinska Ärka i s krativcem",iacute:"Mala latinska Ärka i z ostrivcem",icirc:"Mala latinska Ärka i s streÅ¡ico",iuml:"Mala latinska Ärka i z diaeresis-om",eth:"Mala latinska Ärka eth",ntilde:"Mala latinska Ärka n s tildo",ograve:"Mala latinska Ärka o s krativcem",oacute:"Mala latinska Ärka o z ostrivcem",ocirc:"Mala latinska Ärka o s streÅ¡ico",otilde:"Mala latinska Ärka o s tildo",ouml:"Mala latinska Ärka o z diaeresis-om",
-divide:"Znak za deljenje",oslash:"Mala preÄrtana latinska Ärka o",ugrave:"Mala latinska Ärka u s krativcem",uacute:"Mala latinska Ärka u z ostrivcem",ucirc:"Mala latinska Ärka u s streÅ¡ico",uuml:"Mala latinska Ärka u z diaeresis-om",yacute:"Mala latinska Ärka y z ostrivcem",thorn:"Mala latinska Ärka thorn",yuml:"Mala latinska Ärka y z diaeresis-om",OElig:"Velika latinska ligatura OE",oelig:"Mala latinska ligatura oe",372:"Velika latinska Ärka W s streÅ¡ico",374:"Velika latinska Ärka Y s streÅ¡ico",
-373:"Mala latinska Ärka w s streÅ¡ico",375:"Mala latinska Ärka y s streÅ¡ico",sbquo:"Enojni nizki-9 narekovaj",8219:"Enojni visoki-obrnjen-9 narekovaj",bdquo:"Dvojni nizki-9 narekovaj",hellip:"Horizontalni izpust",trade:"Znak blagovne znamke",9658:"ÄŒrni desno-usmerjen kazalec",bull:"Krogla",rarr:"Desno-usmerjena puÅ¡Äica",rArr:"Desno-usmerjena dvojna puÅ¡Äica",hArr:"Leva in desna dvojna puÅ¡Äica",diams:"ÄŒrna kara",asymp:"Skoraj enako"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sq.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sq.js
deleted file mode 100644
index c7098005..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sq.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","sq",{euro:"Shenja e Euros",lsquo:"Thonjëza majtas me një vi",rsquo:"Thonjëza djathtas me një vi",ldquo:"Thonjëza majtas",rdquo:"Thonjëza djathtas",ndash:"En viza lidhëse",mdash:"Em viza lidhëse",iexcl:"Pikëçuditëse e përmbysur",cent:"Shenja e Centit",pound:"Shejna e Funtit",curren:"Shenja e valutës",yen:"Shenja e Jenit",brvbar:"Viza e këputur",sect:"Shenja e pjesës",uml:"Diaeresis",copy:"Shenja e të drejtave të kopjimit",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
-not:"Nuk ka shenjë",reg:"Shenja e të regjistruarit",macr:"Macron",deg:"Shenja e shkallës",sup2:"Super-skripta dy",sup3:"Super-skripta tre",acute:"Theks i mprehtë",micro:"Shjenja e Mikros",para:"Pilcrow sign",middot:"Pika e Mesme",cedil:"Hark nën shkronja",sup1:"Super-skripta një",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Thyesa një të katrat",frac12:"Thyesa një të dytat",frac34:"Thyesa tre të katrat",iquest:"Pikëpyetje e përmbysur",Agrave:"Shkronja e madhe latine A me theks të rëndë",
-Aacute:"Shkronja e madhe latine A me theks akute",Acirc:"Shkronja e madhe latine A me theks lakor",Atilde:"Shkronja e madhe latine A me tildë",Auml:"Shkronja e madhe latine A me dy pika",Aring:"Shkronja e madhe latine A me unazë mbi",AElig:"Shkronja e madhe latine Æ",Ccedil:"Shkronja e madhe latine C me hark poshtë",Egrave:"Shkronja e madhe latine E me theks të rëndë",Eacute:"Shkronja e madhe latine E me theks akute",Ecirc:"Shkronja e madhe latine E me theks lakor",Euml:"Shkronja e madhe latine E me dy pika",
-Igrave:"Shkronja e madhe latine I me theks të rëndë",Iacute:"Shkronja e madhe latine I me theks akute",Icirc:"Shkronja e madhe latine I me theks lakor",Iuml:"Shkronja e madhe latine I me dy pika",ETH:"Shkronja e madhe latine Eth",Ntilde:"Shkronja e madhe latine N me tildë",Ograve:"Shkronja e madhe latine O me theks të rëndë",Oacute:"Shkronja e madhe latine O me theks akute",Ocirc:"Shkronja e madhe latine O me theks lakor",Otilde:"Shkronja e madhe latine O me tildë",Ouml:"Shkronja e madhe latine O me dy pika",
-times:"Shenja e shumëzimit",Oslash:"Shkronja e madhe latine O me vizë në mes",Ugrave:"Shkronja e madhe latine U me theks të rëndë",Uacute:"Shkronja e madhe latine U me theks akute",Ucirc:"Shkronja e madhe latine U me theks lakor",Uuml:"Shkronja e madhe latine U me dy pika",Yacute:"Shkronja e madhe latine Y me theks akute",THORN:"Shkronja e madhe latine Thorn",szlig:"Shkronja e vogë latine s e mprehtë",agrave:"Shkronja e vogë latine a me theks të rëndë",aacute:"Shkronja e vogë latine a me theks të mprehtë",
-acirc:"Shkronja e vogël latine a me theks lakor",atilde:"Shkronja e vogël latine a me tildë",auml:"Shkronja e vogël latine a me dy pika",aring:"Shkronja e vogë latine a me unazë mbi",aelig:"Shkronja e vogë latine æ",ccedil:"Shkronja e vogël latine c me hark poshtë",egrave:"Shkronja e vogë latine e me theks të rëndë",eacute:"Shkronja e vogë latine e me theks të mprehtë",ecirc:"Shkronja e vogël latine e me theks lakor",euml:"Shkronja e vogël latine e me dy pika",igrave:"Shkronja e vogë latine i me theks të rëndë",
-iacute:"Shkronja e vogë latine i me theks të mprehtë",icirc:"Shkronja e vogël latine i me theks lakor",iuml:"Shkronja e vogël latine i me dy pika",eth:"Shkronja e vogë latine eth",ntilde:"Shkronja e vogël latine n me tildë",ograve:"Shkronja e vogë latine o me theks të rëndë",oacute:"Shkronja e vogë latine o me theks të mprehtë",ocirc:"Shkronja e vogël latine o me theks lakor",otilde:"Shkronja e vogël latine o me tildë",ouml:"Shkronja e vogël latine o me dy pika",divide:"Shenja ndarëse",oslash:"Shkronja e vogël latine o me vizë në mes",
-ugrave:"Shkronja e vogë latine u me theks të rëndë",uacute:"Shkronja e vogë latine u me theks të mprehtë",ucirc:"Shkronja e vogël latine u me theks lakor",uuml:"Shkronja e vogël latine u me dy pika",yacute:"Shkronja e vogë latine y me theks të mprehtë",thorn:"Shkronja e vogël latine thorn",yuml:"Shkronja e vogël latine y me dy pika",OElig:"Shkronja e madhe e bashkuar latine OE",oelig:"Shkronja e vogël e bashkuar latine oe",372:"Shkronja e madhe latine W me theks lakor",374:"Shkronja e madhe latine Y me theks lakor",
-373:"Shkronja e vogël latine w me theks lakor",375:"Shkronja e vogël latine y me theks lakor",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"Shenja e Simbolit Tregtarë",9658:"Black right-pointing pointer",bull:"Pulla",rarr:"Shigjeta djathtas",rArr:"Shenja të dyfishta djathtas",hArr:"Shigjeta e dyfishë majtas-djathtas",diams:"Black diamond suit",asymp:"Gati e barabar me"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sv.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sv.js
deleted file mode 100644
index 8f741b93..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/sv.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","sv",{euro:"Eurotecken",lsquo:"Enkelt vänster citattecken",rsquo:"Enkelt höger citattecken",ldquo:"Dubbelt vänster citattecken",rdquo:"Dubbelt höger citattecken",ndash:"Snedstreck",mdash:"Långt tankstreck",iexcl:"Inverterad utropstecken",cent:"Centtecken",pound:"Pundtecken",curren:"Valutatecken",yen:"Yentecken",brvbar:"Brutet lodrätt streck",sect:"Paragraftecken",uml:"Diaeresis",copy:"Upphovsrättstecken",ordf:"Feminit ordningstalsindikator",laquo:"Vänsterställt dubbelt vinkelcitationstecken",
-not:"Icke-tecken",reg:"Registrerad",macr:"Macron",deg:"Grader",sup2:"Upphöjt två",sup3:"Upphöjt tre",acute:"Akut accent",micro:"Mikrotecken",para:"Alinea",middot:"Centrerad prick",cedil:"Cedilj",sup1:"Upphöjt en",ordm:"Maskulina ordningsändelsen",raquo:"Högerställt dubbelt vinkelcitationstecken",frac14:"Bråktal - en kvart",frac12:"Bråktal - en halv",frac34:"Bråktal - tre fjärdedelar",iquest:"Inverterat frågetecken",Agrave:"Stort A med grav accent",Aacute:"Stort A med akutaccent",Acirc:"Stort A med circumflex",
-Atilde:"Stort A med tilde",Auml:"Stort A med diaresis",Aring:"Stort A med ring ovan",AElig:"Stort Æ",Ccedil:"Stort C med cedilj",Egrave:"Stort E med grav accent",Eacute:"Stort E med aktuaccent",Ecirc:"Stort E med circumflex",Euml:"Stort E med diaeresis",Igrave:"Stort I med grav accent",Iacute:"Stort I med akutaccent",Icirc:"Stort I med circumflex",Iuml:"Stort I med diaeresis",ETH:"Stort Eth",Ntilde:"Stort N med tilde",Ograve:"Stort O med grav accent",Oacute:"Stort O med aktuaccent",Ocirc:"Stort O med circumflex",
-Otilde:"Stort O med tilde",Ouml:"Stort O med diaeresis",times:"Multiplicera",Oslash:"Stor Ø",Ugrave:"Stort U med grav accent",Uacute:"Stort U med akutaccent",Ucirc:"Stort U med circumflex",Uuml:"Stort U med diaeresis",Yacute:"Stort Y med akutaccent",THORN:"Stort Thorn",szlig:"Litet dubbel-s/Eszett",agrave:"Litet a med grav accent",aacute:"Litet a med akutaccent",acirc:"Litet a med circumflex",atilde:"Litet a med tilde",auml:"Litet a med diaeresis",aring:"Litet a med ring ovan",aelig:"Bokstaven æ",
-ccedil:"Litet c med cedilj",egrave:"Litet e med grav accent",eacute:"Litet e med akutaccent",ecirc:"Litet e med circumflex",euml:"Litet e med diaeresis",igrave:"Litet i med grav accent",iacute:"Litet i med akutaccent",icirc:"LItet i med circumflex",iuml:"Litet i med didaeresis",eth:"Litet eth",ntilde:"Litet n med tilde",ograve:"LItet o med grav accent",oacute:"LItet o med akutaccent",ocirc:"Litet o med circumflex",otilde:"LItet o med tilde",ouml:"Litet o med diaeresis",divide:"Division",oslash:"ø",
-ugrave:"Litet u med grav accent",uacute:"Litet u med akutaccent",ucirc:"LItet u med circumflex",uuml:"Litet u med diaeresis",yacute:"Litet y med akutaccent",thorn:"Litet thorn",yuml:"Litet y med diaeresis",OElig:"Stor ligatur av OE",oelig:"Liten ligatur av oe",372:"Stort W med circumflex",374:"Stort Y med circumflex",373:"Litet w med circumflex",375:"Litet y med circumflex",sbquo:"Enkelt lågt 9-citationstecken",8219:"Enkelt högt bakvänt 9-citationstecken",bdquo:"Dubbelt lågt 9-citationstecken",hellip:"Horisontellt uteslutningstecken",
-trade:"Varumärke",9658:"Svart högervänd pekare",bull:"Listpunkt",rarr:"Högerpil",rArr:"Dubbel högerpil",hArr:"Dubbel vänsterpil",diams:"Svart ruter",asymp:"Ungefär lika med"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/th.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/th.js
deleted file mode 100644
index ae0b00e5..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/th.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","th",{euro:"Euro sign",lsquo:"Left single quotation mark",rsquo:"Right single quotation mark",ldquo:"Left double quotation mark",rdquo:"Right double quotation mark",ndash:"En dash",mdash:"Em dash",iexcl:"Inverted exclamation mark",cent:"Cent sign",pound:"Pound sign",curren:"สัà¸à¸¥à¸±à¸à¸©à¸“์สà¸à¸¸à¸¥à¹€à¸‡à¸´à¸™",yen:"สัà¸à¸¥à¸±à¸à¸©à¸“์เงินเยน",brvbar:"Broken bar",sect:"Section sign",uml:"Diaeresis",copy:"Copyright sign",ordf:"Feminine ordinal indicator",laquo:"Left-pointing double angle quotation mark",
-not:"Not sign",reg:"Registered sign",macr:"Macron",deg:"Degree sign",sup2:"Superscript two",sup3:"Superscript three",acute:"Acute accent",micro:"Micro sign",para:"Pilcrow sign",middot:"Middle dot",cedil:"Cedilla",sup1:"Superscript one",ordm:"Masculine ordinal indicator",raquo:"Right-pointing double angle quotation mark",frac14:"Vulgar fraction one quarter",frac12:"Vulgar fraction one half",frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",
-Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",
-Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",
-Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",
-aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",
-ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",
-yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",
-trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"สัà¸à¸¥à¸±à¸à¸©à¸“์หัวข้อย่อย",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/tr.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/tr.js
deleted file mode 100644
index 3dd220a3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/tr.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","tr",{euro:"Euro işareti",lsquo:"Sol tek tırnak işareti",rsquo:"Sağ tek tırnak işareti",ldquo:"Sol çift tırnak işareti",rdquo:"Sağ çift tırnak işareti",ndash:"En tire",mdash:"Em tire",iexcl:"Ters ünlem işareti",cent:"Cent işareti",pound:"Pound işareti",curren:"Para birimi işareti",yen:"Yen işareti",brvbar:"Kırık bar",sect:"Bölüm işareti",uml:"İki sesli harfin ayrılması",copy:"Telif hakkı işareti",ordf:"Dişil sıralı gösterge",laquo:"Sol-işaret çift açı tırnak işareti",
-not:"Not işareti",reg:"Kayıtlı işareti",macr:"Makron",deg:"Derece işareti",sup2:"İkili üstsimge",sup3:"Üçlü üstsimge",acute:"Aksan işareti",micro:"Mikro işareti",para:"Pilcrow işareti",middot:"Orta nokta",cedil:"Kedilla",sup1:"Üstsimge",ordm:"Eril sıralı gösterge",raquo:"Sağ işaret çift açı tırnak işareti",frac14:"Bayağı kesrin dörtte biri",frac12:"Bayağı kesrin bir yarım",frac34:"Bayağı kesrin dörtte üç",iquest:"Ters soru işareti",Agrave:"Aksanlı latin harfi",Aacute:"Aşırı aksanıyla Latin harfi",
-Acirc:"Çarpık Latin harfi",Atilde:"Tilde latin harfi",Auml:"Sesli harf ayrılımlıı latin harfi",Aring:"Halkalı latin büyük A harfi",AElig:"Latin büyük Æ harfi",Ccedil:"Latin büyük C harfi ile kedilla",Egrave:"Aksanlı latin büyük E harfi",Eacute:"Aşırı vurgulu latin büyük E harfi",Ecirc:"Çarpık latin büyük E harfi",Euml:"Sesli harf ayrılımlıı latin büyük E harfi",Igrave:"Aksanlı latin büyük I harfi",Iacute:"Aşırı aksanlı latin büyük I harfi",Icirc:"Çarpık latin büyük I harfi",Iuml:"Sesli harf ayrılımlıı latin büyük I harfi",
-ETH:"Latin büyük Eth harfi",Ntilde:"Tildeli latin büyük N harfi",Ograve:"Aksanlı latin büyük O harfi",Oacute:"Aşırı aksanlı latin büyük O harfi",Ocirc:"Çarpık latin büyük O harfi",Otilde:"Tildeli latin büyük O harfi",Ouml:"Sesli harf ayrılımlı latin büyük O harfi",times:"Çarpma işareti",Oslash:"Vurgulu latin büyük O harfi",Ugrave:"Aksanlı latin büyük U harfi",Uacute:"Aşırı aksanlı latin büyük U harfi",Ucirc:"Çarpık latin büyük U harfi",Uuml:"Sesli harf ayrılımlı latin büyük U harfi",Yacute:"Aşırı aksanlı latin büyük Y harfi",
-THORN:"Latin büyük Thorn harfi",szlig:"Latin küçük keskin s harfi",agrave:"Aksanlı latin küçük a harfi",aacute:"Aşırı aksanlı latin küçük a harfi",acirc:"Çarpık latin küçük a harfi",atilde:"Tildeli latin küçük a harfi",auml:"Sesli harf ayrılımlı latin küçük a harfi",aring:"Halkalı latin küçük a harfi",aelig:"Latin büyük æ harfi",ccedil:"Kedillalı latin küçük c harfi",egrave:"Aksanlı latin küçük e harfi",eacute:"Aşırı aksanlı latin küçük e harfi",ecirc:"Çarpık latin küçük e harfi",euml:"Sesli harf ayrılımlı latin küçük e harfi",
-igrave:"Aksanlı latin küçük i harfi",iacute:"Aşırı aksanlı latin küçük i harfi",icirc:"Çarpık latin küçük i harfi",iuml:"Sesli harf ayrılımlı latin küçük i harfi",eth:"Latin küçük eth harfi",ntilde:"Tildeli latin küçük n harfi",ograve:"Aksanlı latin küçük o harfi",oacute:"Aşırı aksanlı latin küçük o harfi",ocirc:"Çarpık latin küçük o harfi",otilde:"Tildeli latin küçük o harfi",ouml:"Sesli harf ayrılımlı latin küçük o harfi",divide:"Bölme işareti",oslash:"Vurgulu latin küçük o harfi",ugrave:"Aksanlı latin küçük u harfi",
-uacute:"Aşırı aksanlı latin küçük u harfi",ucirc:"Çarpık latin küçük u harfi",uuml:"Sesli harf ayrılımlı latin küçük u harfi",yacute:"Aşırı aksanlı latin küçük y harfi",thorn:"Latin küçük thorn harfi",yuml:"Sesli harf ayrılımlı latin küçük y harfi",OElig:"Latin büyük bağlı OE harfi",oelig:"Latin küçük bağlı oe harfi",372:"Çarpık latin büyük W harfi",374:"Çarpık latin büyük Y harfi",373:"Çarpık latin küçük w harfi",375:"Çarpık latin küçük y harfi",sbquo:"Tek düşük-9 tırnak işareti",8219:"Tek yüksek-ters-9 tırnak işareti",
-bdquo:"Çift düşük-9 tırnak işareti",hellip:"Yatay elips",trade:"Marka tescili işareti",9658:"Siyah sağ işaret işaretçisi",bull:"Koyu nokta",rarr:"Sağa doğru ok",rArr:"Sağa doğru çift ok",hArr:"Sol, sağ çift ok",diams:"Siyah elmas takımı",asymp:"Hemen hemen eşit"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/tt.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/tt.js
deleted file mode 100644
index 2eadb9f7..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/tt.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","tt",{euro:"Евро тамгаÑÑ‹",lsquo:"Сул бер иңле куштырнаклар",rsquo:"Уң бер иңле куштырнаклар",ldquo:"Сул ике иңле куштырнаклар",rdquo:"Уң ике иңле куштырнаклар",ndash:"КыÑка Ñызык",mdash:"Озын Ñызык",iexcl:"Әйләндерелгән өндәү билгеÑе",cent:"Цент тамгаÑÑ‹",pound:"Фунт тамгаÑÑ‹",curren:"Ðкча берәмлеге тамгаÑÑ‹",yen:"Иена тамгаÑÑ‹",brvbar:"Broken bar",sect:"Section sign",uml:"ДиерезиÑ",copy:"Хокук иÑÑе булу билгеÑе",ordf:"Feminine ordinal indicator",laquo:"Ðчылучы чыршыÑыман Ò—Ó™Ñ",
-not:"Not sign",reg:"Теркәләнгән булу билгеÑе",macr:"Макрон",deg:"Ð“Ñ€Ð°Ð´ÑƒÑ Ð±Ð¸Ð»Ð³ÐµÑе",sup2:"Икенче Ó©Ñке индекÑ",sup3:"Өченче Ó©Ñке индекÑ",acute:"БаÑым билгеÑе",micro:"Микро билгеÑе",para:"Параграф билгеÑе",middot:"Middle dot",cedil:"Седиль",sup1:"Беренче Ó©Ñке индекÑ",ordm:"Masculine ordinal indicator",raquo:"Ябылучы чыршыÑыман Ò—Ó™Ñ",frac14:"Гади дүрттән бер билгеÑе",frac12:"Гади икедән бер билгеÑе",frac34:"Гади дүрттән өч билгеÑе",iquest:"Әйләндерелгән өндәү билгеÑе",Agrave:"Ð“Ñ€Ð°Ð²Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин A баш хәрефе",
-Aacute:"БаÑым билгеÑе белән латин A баш хәрефе",Acirc:"Ð¦Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑ Ð±ÐµÐ»Ó™Ð½ латин A баш хәрефе",Atilde:"Тильда белән латин A баш хәрефе",Auml:"Ð”Ð¸ÐµÑ€ÐµÐ·Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин A баш хәрефе",Aring:"Ó¨Ñтендә боҗра булган латин A баш хәрефе",AElig:"Латин Æ баш хәрефе",Ccedil:"Седиль белән латин C баш хәрефе",Egrave:"Ð“Ñ€Ð°Ð²Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин E баш хәрефе",Eacute:"БаÑым билгеÑе белән латин E баш хәрефе",Ecirc:"Ð¦Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑ Ð±ÐµÐ»Ó™Ð½ латин E баш хәрефе",Euml:"Ð”Ð¸ÐµÑ€ÐµÐ·Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин E баш хәрефе",Igrave:"Ð“Ñ€Ð°Ð²Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин I баш хәрефе",
-Iacute:"БаÑым билгеÑе белән латин I баш хәрефе",Icirc:"Ð¦Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑ Ð±ÐµÐ»Ó™Ð½ латин I баш хәрефе",Iuml:"Ð”Ð¸ÐµÑ€ÐµÐ·Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин I баш хәрефе",ETH:"Латин Eth баш хәрефе",Ntilde:"Тильда белән латин N баш хәрефе",Ograve:"Ð“Ñ€Ð°Ð²Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин O баш хәрефе",Oacute:"БаÑым билгеÑе белән латин O баш хәрефе",Ocirc:"Ð¦Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑ Ð±ÐµÐ»Ó™Ð½ латин O баш хәрефе",Otilde:"Тильда белән латин O баш хәрефе",Ouml:"Ð”Ð¸ÐµÑ€ÐµÐ·Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин O баш хәрефе",times:"Тапкырлау билгеÑе",Oslash:"Сызык белән латин O баш хәрефе",Ugrave:"Ð“Ñ€Ð°Ð²Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин U баш хәрефе",
-Uacute:"БаÑым билгеÑе белән латин U баш хәрефе",Ucirc:"Ð¦Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑ Ð±ÐµÐ»Ó™Ð½ латин U баш хәрефе",Uuml:"Ð”Ð¸ÐµÑ€ÐµÐ·Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин U баш хәрефе",Yacute:"БаÑым билгеÑе белән латин Y баш хәрефе",THORN:"Латин Thorn баш хәрефе",szlig:"Латин beta юл хәрефе",agrave:"Ð“Ñ€Ð°Ð²Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин a юл хәрефе",aacute:"БаÑым билгеÑе белән латин a юл хәрефе",acirc:"Ð¦Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑ Ð±ÐµÐ»Ó™Ð½ латин a юл хәрефе",atilde:"Тильда белән латин a юл хәрефе",auml:"Ð”Ð¸ÐµÑ€ÐµÐ·Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин a юл хәрефе",aring:"Ó¨Ñтендә боҗра булган латин a юл хәрефе",aelig:"Латин æ юл хәрефе",
-ccedil:"Седиль белән латин c юл хәрефе",egrave:"Ð“Ñ€Ð°Ð²Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин e юл хәрефе",eacute:"БаÑым билгеÑе белән латин e юл хәрефе",ecirc:"Ð¦Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑ Ð±ÐµÐ»Ó™Ð½ латин e юл хәрефе",euml:"Ð”Ð¸ÐµÑ€ÐµÐ·Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин e юл хәрефе",igrave:"Ð“Ñ€Ð°Ð²Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин i юл хәрефе",iacute:"БаÑым билгеÑе белән латин i юл хәрефе",icirc:"Ð¦Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑ Ð±ÐµÐ»Ó™Ð½ латин i юл хәрефе",iuml:"Ð”Ð¸ÐµÑ€ÐµÐ·Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин i юл хәрефе",eth:"Латин eth юл хәрефе",ntilde:"Тильда белән латин n юл хәрефе",ograve:"Ð“Ñ€Ð°Ð²Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин o юл хәрефе",oacute:"БаÑым билгеÑе белән латин o юл хәрефе",
-ocirc:"Ð¦Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑ Ð±ÐµÐ»Ó™Ð½ латин o юл хәрефе",otilde:"Тильда белән латин o юл хәрефе",ouml:"Ð”Ð¸ÐµÑ€ÐµÐ·Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин o юл хәрефе",divide:"Бүлү билгеÑе",oslash:"Сызык белән латин o юл хәрефе",ugrave:"Ð“Ñ€Ð°Ð²Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин u юл хәрефе",uacute:"БаÑым билгеÑе белән латин u юл хәрефе",ucirc:"Ð¦Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑ Ð±ÐµÐ»Ó™Ð½ латин u юл хәрефе",uuml:"Ð”Ð¸ÐµÑ€ÐµÐ·Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин u юл хәрефе",yacute:"БаÑым билгеÑе белән латин y юл хәрефе",thorn:"Латин thorn юл хәрефе",yuml:"Ð”Ð¸ÐµÑ€ÐµÐ·Ð¸Ñ Ð±ÐµÐ»Ó™Ð½ латин y юл хәрефе",OElig:"Латин лигатура OE баш хәрефе",
-oelig:"Латин лигатура oe юл хәрефе",372:"Ð¦Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑ Ð±ÐµÐ»Ó™Ð½ латин W баш хәрефе",374:"Ð¦Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑ Ð±ÐµÐ»Ó™Ð½ латин Y баш хәрефе",373:"Ð¦Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑ Ð±ÐµÐ»Ó™Ð½ латин w юл хәрефе",375:"Ð¦Ð¸Ñ€ÐºÑƒÐ¼Ñ„Ð»ÐµÐºÑ Ð±ÐµÐ»Ó™Ð½ латин y юл хәрефе",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Ятма ÑллипÑ",trade:"Сәүдә маркаÑÑ‹ билгеÑе",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",
-diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ug.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ug.js
deleted file mode 100644
index 51f4c1d9..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/ug.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","ug",{euro:"ياۋرو بەلگىسى",lsquo:"يالاڭ Ù¾Û•Ø´ سول",rsquo:"يالاڭ Ù¾Û•Ø´ ئوڭ",ldquo:"قوش Ù¾Û•Ø´ سول",rdquo:"قوش Ù¾Û•Ø´ ئوڭ",ndash:"سىزىقچە",mdash:"سىزىق",iexcl:"ئۈندەش",cent:"تىيىن بەلگىسى",pound:"Ùوند ستÛرلىڭ",curren:"Ù¾Û‡Ù„ بەلگىسى",yen:"ياپونىيە يىنى",brvbar:"ئۈزۈك بالداق",sect:"پاراگرا٠بەلگىسى",uml:"تاۋۇش ئايرىش بەلگىسى",copy:"نەشر ھوقۇقى بەلگىسى",ordf:"Feminine ordinal indicator",laquo:"قوش تىرناق سول",not:"غەيرى بەلگە",reg:"خەتلەتكەن تاۋار ماركىسى",macr:"سوزۇش بەلگىسى",
-deg:"گىرادۇس بەلگىسى",sup2:"يۇقىرى ئىندÛكىس 2",sup3:"يۇقىرى ئىندÛكىس 3",acute:"ئۇرغۇ بەلگىسى",micro:"Micro sign",para:"ئابزاس بەلگىسى",middot:"ئوتتۇرا Ú†Ûكىت",cedil:"ئاستىغا قوشۇلىدىغان بەلگە",sup1:"يۇقىرى ئىندÛكىس 1",ordm:"Masculine ordinal indicator",raquo:"قوش تىرناق ئوڭ",frac14:"ئاددىي كەسىر تۆتتىن بىر",frac12:"ئاددىي كەسىر ئىككىدىن بىر",frac34:"ئاددىي كەسىر ئۈچتىن تۆرت",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent",
-Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"Latin capital letter A with diaeresis",Aring:"Latin capital letter A with ring above",AElig:"Latin Capital letter Æ",Ccedil:"Latin capital letter C with cedilla",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",
-Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"قوش پەش ئوڭ",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",times:"Multiplication sign",Oslash:"Latin capital letter O with stroke",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",
-Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",
-ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",eth:"Latin small letter eth",ntilde:"تىك موللاق سوئال بەلگىسى",ograve:"Latin small letter o with grave accent",
-oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"بۆلۈش بەلگىسى",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",
-yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",hellip:"Horizontal ellipsis",trade:"خەتلەتكەن تاۋار ماركىسى بەلگىسى",9658:"Black right-pointing pointer",
-bull:"Bullet",rarr:"ئوڭ يا ئوق",rArr:"ئوڭ قوش سىزىق يا ئوق",hArr:"ئوڭ سول قوش سىزىق يا ئوق",diams:"ئۇيۇل غىچ",asymp:"تەخمىنەن تەڭ"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/uk.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/uk.js
deleted file mode 100644
index 845e7524..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/uk.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","uk",{euro:"Знак євро",lsquo:"Ліві одинарні лапки",rsquo:"Праві одинарні лапки",ldquo:"Ліві подвійні лапки",rdquo:"Праві подвійні лапки",ndash:"Середнє тире",mdash:"Довге тире",iexcl:"Перевернутий знак оклику",cent:"Знак цента",pound:"Знак фунта",curren:"Знак валюти",yen:"Знак єни",brvbar:"ПереривчаÑта вертикальна лініÑ",sect:"Знак параграфу",uml:"Умлаут",copy:"Знак авторÑьких прав",ordf:"Жіночий порÑдковий вказівник",laquo:"ліві вказівні подвійні кутові дужки",
-not:"ЗапереченнÑ",reg:"Знак охорони Ñуміжних прав",macr:"Макрон",deg:"Знак градуÑа",sup2:"два у верхньому індекÑÑ–",sup3:"три у верхньому індекÑÑ–",acute:"Знак акута",micro:"Знак мікро",para:"Знак абзацу",middot:"Інтерпункт",cedil:"Седиль",sup1:"Один у верхньому індекÑÑ–",ordm:"Чоловічий порÑдковий вказівник",raquo:"праві вказівні подвійні кутові дужки",frac14:"Одна четвертина",frac12:"Одна друга",frac34:"три четвертих",iquest:"Перевернутий знак питаннÑ",Agrave:"Велика латинÑька A з гравіÑом",Aacute:"Велика латинÑька Рз акутом",
-Acirc:"Велика латинÑька Рз циркумфлекÑом",Atilde:"Велика латинÑька Рз тильдою",Auml:"Велике латинÑьке Рз умлаутом",Aring:"Велика латинÑька A з кільцем згори",AElig:"Велика латинÑька Æ",Ccedil:"Велика латинÑька C з Ñедиллю",Egrave:"Велика латинÑька E з гравіÑом",Eacute:"Велика латинÑька E з акутом",Ecirc:"Велика латинÑька E з циркумфлекÑом",Euml:"Велика латинÑька Рз умлаутом",Igrave:"Велика латинÑька I з гравіÑом",Iacute:"Велика латинÑька I з акутом",Icirc:"Велика латинÑька I з циркумфлекÑом",
-Iuml:"Велика латинÑька І з умлаутом",ETH:"Велика латинÑька Eth",Ntilde:"Велика латинÑька N з тильдою",Ograve:"Велика латинÑька O з гравіÑом",Oacute:"Велика латинÑька O з акутом",Ocirc:"Велика латинÑька O з циркумфлекÑом",Otilde:"Велика латинÑька O з тильдою",Ouml:"Велика латинÑька О з умлаутом",times:"Знак множеннÑ",Oslash:"Велика латинÑька перекреÑлена O ",Ugrave:"Велика латинÑька U з гравіÑом",Uacute:"Велика латинÑька U з акутом",Ucirc:"Велика латинÑька U з циркумфлекÑом",Uuml:"Велика латинÑька U з умлаутом",
-Yacute:"Велика латинÑька Y з акутом",THORN:"Велика латинÑька Торн",szlig:"Мала латинÑька еÑцет",agrave:"Мала латинÑька a з гравіÑом",aacute:"Мала латинÑька a з акутом",acirc:"Мала латинÑька a з циркумфлекÑом",atilde:"Мала латинÑька a з тильдою",auml:"Мала латинÑька a з умлаутом",aring:"Мала латинÑька a з кільцем згори",aelig:"Мала латинÑька æ",ccedil:"Мала латинÑька C з Ñедиллю",egrave:"Мала латинÑька e з гравіÑом",eacute:"Мала латинÑька e з акутом",ecirc:"Мала латинÑька e з циркумфлекÑом",euml:"Мала латинÑька e з умлаутом",
-igrave:"Мала латинÑька i з гравіÑом",iacute:"Мала латинÑька i з акутом",icirc:"Мала латинÑька i з циркумфлекÑом",iuml:"Мала латинÑька i з умлаутом",eth:"Мала латинÑька Eth",ntilde:"Мала латинÑька n з тильдою",ograve:"Мала латинÑька o з гравіÑом",oacute:"Мала латинÑька o з акутом",ocirc:"Мала латинÑька o з циркумфлекÑом",otilde:"Мала латинÑька o з тильдою",ouml:"Мала латинÑька o з умлаутом",divide:"Знак діленнÑ",oslash:"Мала латинÑька перекреÑлена o",ugrave:"Мала латинÑька u з гравіÑом",uacute:"Мала латинÑька u з акутом",
-ucirc:"Мала латинÑька u з циркумфлекÑом",uuml:"Мала латинÑька u з умлаутом",yacute:"Мала латинÑька y з акутом",thorn:"Мала латинÑька торн",yuml:"Мала латинÑька y з умлаутом",OElig:"Велика латинÑька лігатура OE",oelig:"Мала латинÑька лігатура oe",372:"Велика латинÑька W з циркумфлекÑом",374:"Велика латинÑька Y з циркумфлекÑом",373:"Мала латинÑька w з циркумфлекÑом",375:"Мала латинÑька y з циркумфлекÑом",sbquo:"Одиничні нижні лабки",8219:"Верхні одиничні обернені лабки",bdquo:"Подвійні нижні лабки",
-hellip:"Три крапки",trade:"Знак торгової марки",9658:"Чорний правий вказівник",bull:"Маркер ÑпиÑку",rarr:"Стрілка вправо",rArr:"Подвійна Ñтрілка вправо",hArr:"Подвійна Ñтрілка вліво-вправо",diams:"Чорний діамонт",asymp:"Ðаближено дорівнює"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/vi.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/vi.js
deleted file mode 100644
index d4e4d37a..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/vi.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","vi",{euro:"Ký hiệu Euro",lsquo:"Dấu ngoặc Ä‘Æ¡n trái",rsquo:"Dấu ngoặc Ä‘Æ¡n phải",ldquo:"Dấu ngoặc đôi trái",rdquo:"Dấu ngoặc đôi phải",ndash:"Gạch ngang tiếng anh",mdash:"Gạch ngang Em",iexcl:"Chuyển đổi dấu chấm than",cent:"Ký tá»± tiá»n Mỹ",pound:"Ký tá»± tiá»n Anh",curren:"Ký tá»± tiá»n tệ",yen:"Ký tá»± tiá»n Yên Nhật",brvbar:"Thanh há»ng",sect:"Ký tá»± khu vá»±c",uml:"Dấu tách đôi",copy:"Ký tá»± bản quyá»n",ordf:"Phần chỉ thị giống cái",laquo:"Chá»n dấu ngoặc đôi trái",not:"Không có ký tá»±",
-reg:"Ký tá»± đăng ký",macr:"Dấu nguyên âm dài",deg:"Ký tá»± Ä‘á»™",sup2:"Chữ trồi lên trên dạng 2",sup3:"Chữ trồi lên trên dạng 3",acute:"Dấu trá»ng âm",micro:"Ký tá»± micro",para:"Ký tá»± Ä‘oạn văn",middot:"Dấu chấm tròn",cedil:"Dấu móc lÆ°á»›i",sup1:"Ký tá»± trồi lên cấp 1",ordm:"Ký tá»± biểu hiện giống Ä‘á»±c",raquo:"Chá»n dấu ngoặc đôi phải",frac14:"Tỉ lệ má»™t phần tÆ°",frac12:"Tỉ lệ má»™t ná»­a",frac34:"Tỉ lệ ba phần tÆ°",iquest:"Chuyển đổi dấu chấm há»i",Agrave:"Ký tá»± la-tinh viết hoa A vá»›i dấu huyá»n",Aacute:"Ký tá»± la-tinh viết hoa A vá»›i dấu sắc",
-Acirc:"Ký tá»± la-tinh viết hoa A vá»›i dấu mÅ©",Atilde:"Ký tá»± la-tinh viết hoa A vá»›i dấu ngã",Auml:"Ký tá»± la-tinh viết hoa A vá»›i dấu hai chấm trên đầu",Aring:"Ký tá»± la-tinh viết hoa A vá»›i biểu tượng vòng tròn trên đầu",AElig:"Ký tá»± la-tinh viết hoa của Æ",Ccedil:"Ký tá»± la-tinh viết hoa C vá»›i dấu móc bên dÆ°á»›i",Egrave:"Ký tá»± la-tinh viết hoa E vá»›i dấu huyá»n",Eacute:"Ký tá»± la-tinh viết hoa E vá»›i dấu sắc",Ecirc:"Ký tá»± la-tinh viết hoa E vá»›i dấu mÅ©",Euml:"Ký tá»± la-tinh viết hoa E vá»›i dấu hai chấm trên đầu",
-Igrave:"Ký tá»± la-tinh viết hoa I vá»›i dấu huyá»n",Iacute:"Ký tá»± la-tinh viết hoa I vá»›i dấu sắc",Icirc:"Ký tá»± la-tinh viết hoa I vá»›i dấu mÅ©",Iuml:"Ký tá»± la-tinh viết hoa I vá»›i dấu hai chấm trên đầu",ETH:"Viết hoa của ký tá»± Eth",Ntilde:"Ký tá»± la-tinh viết hoa N vá»›i dấu ngã",Ograve:"Ký tá»± la-tinh viết hoa O vá»›i dấu huyá»n",Oacute:"Ký tá»± la-tinh viết hoa O vá»›i dấu sắc",Ocirc:"Ký tá»± la-tinh viết hoa O vá»›i dấu mÅ©",Otilde:"Ký tá»± la-tinh viết hoa O vá»›i dấu ngã",Ouml:"Ký tá»± la-tinh viết hoa O vá»›i dấu hai chấm trên đầu",
-times:"Ký tá»± phép toán nhân",Oslash:"Ký tá»± la-tinh viết hoa A vá»›i dấu ngã xuống",Ugrave:"Ký tá»± la-tinh viết hoa U vá»›i dấu huyá»n",Uacute:"Ký tá»± la-tinh viết hoa U vá»›i dấu sắc",Ucirc:"Ký tá»± la-tinh viết hoa U vá»›i dấu mÅ©",Uuml:"Ký tá»± la-tinh viết hoa U vá»›i dấu hai chấm trên đầu",Yacute:"Ký tá»± la-tinh viết hoa Y vá»›i dấu sắc",THORN:"Phần viết hoa của ký tá»± Thorn",szlig:"Ký tá»± viết nhá» la-tinh của chữ s",agrave:"Ký tá»± la-tinh thÆ°á»ng vá»›i dấu huyá»n",aacute:"Ký tá»± la-tinh thÆ°á»ng vá»›i dấu sắc",acirc:"Ký tá»± la-tinh thÆ°á»ng vá»›i dấu mÅ©",
-atilde:"Ký tá»± la-tinh thÆ°á»ng vá»›i dấu ngã",auml:"Ký tá»± la-tinh thÆ°á»ng vá»›i dấu hai chấm trên đầu",aring:"Ký tá»± la-tinh viết thÆ°á»ng vá»›i biểu tượng vòng tròn trên đầu",aelig:"Ký tá»± la-tinh viết thÆ°á»ng của æ",ccedil:"Ký tá»± la-tinh viết thÆ°á»ng của c vá»›i dấu móc bên dÆ°á»›i",egrave:"Ký tá»± la-tinh viết thÆ°á»ng e vá»›i dấu huyá»n",eacute:"Ký tá»± la-tinh viết thÆ°á»ng e vá»›i dấu sắc",ecirc:"Ký tá»± la-tinh viết thÆ°á»ng e vá»›i dấu mÅ©",euml:"Ký tá»± la-tinh viết thÆ°á»ng e vá»›i dấu hai chấm trên đầu",igrave:"Ký tá»± la-tinh viết thÆ°á»ng i vá»›i dấu huyá»n",
-iacute:"Ký tá»± la-tinh viết thÆ°á»ng i vá»›i dấu sắc",icirc:"Ký tá»± la-tinh viết thÆ°á»ng i vá»›i dấu mÅ©",iuml:"Ký tá»± la-tinh viết thÆ°á»ng i vá»›i dấu hai chấm trên đầu",eth:"Ký tá»± la-tinh viết thÆ°á»ng của eth",ntilde:"Ký tá»± la-tinh viết thÆ°á»ng n vá»›i dấu ngã",ograve:"Ký tá»± la-tinh viết thÆ°á»ng o vá»›i dấu huyá»n",oacute:"Ký tá»± la-tinh viết thÆ°á»ng o vá»›i dấu sắc",ocirc:"Ký tá»± la-tinh viết thÆ°á»ng o vá»›i dấu mÅ©",otilde:"Ký tá»± la-tinh viết thÆ°á»ng o vá»›i dấu ngã",ouml:"Ký tá»± la-tinh viết thÆ°á»ng o vá»›i dấu hai chấm trên đầu",
-divide:"Ký hiệu phép tính chia",oslash:"Ký tá»± la-tinh viết thÆ°á»ng o vá»›i dấu ngã",ugrave:"Ký tá»± la-tinh viết thÆ°á»ng u vá»›i dấu huyá»n",uacute:"Ký tá»± la-tinh viết thÆ°á»ng u vá»›i dấu sắc",ucirc:"Ký tá»± la-tinh viết thÆ°á»ng u vá»›i dấu mÅ©",uuml:"Ký tá»± la-tinh viết thÆ°á»ng u vá»›i dấu hai chấm trên đầu",yacute:"Ký tá»± la-tinh viết thÆ°á»ng y vá»›i dấu sắc",thorn:"Ký tá»± la-tinh viết thÆ°á»ng của chữ thorn",yuml:"Ký tá»± la-tinh viết thÆ°á»ng y vá»›i dấu hai chấm trên đầu",OElig:"Ký tá»± la-tinh viết hoa gạch nối OE",oelig:"Ký tá»± la-tinh viết thÆ°á»ng gạch nối OE",
-372:"Ký tá»± la-tinh viết hoa W vá»›i dấu mÅ©",374:"Ký tá»± la-tinh viết hoa Y vá»›i dấu mÅ©",373:"Ký tá»± la-tinh viết thÆ°á»ng w vá»›i dấu mÅ©",375:"Ký tá»± la-tinh viết thÆ°á»ng y vá»›i dấu mÅ©",sbquo:"Dấu ngoặc Ä‘Æ¡n thấp số-9",8219:"Dấu ngoặc Ä‘Æ¡n đảo ngược số-9",bdquo:"Gấp đôi dấu ngoặc Ä‘Æ¡n số-9",hellip:"TÄ©nh dược chiá»u ngang",trade:"Ký tá»± thÆ°Æ¡ng hiệu",9658:"Ký tá»± trá» vá» hÆ°á»›ng bên phải màu Ä‘en",bull:"Ký hiệu",rarr:"MÅ©i tên hÆ°á»›ng bên phải",rArr:"MÅ©i tên hÆ°á»›ng bên phải dạng đôi",hArr:"MÅ©i tên hÆ°á»›ng bên trái dạng đôi",diams:"Ký hiệu hình thoi",
-asymp:"Gần bằng với"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js
deleted file mode 100644
index 6896e912..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","zh-cn",{euro:"欧元符å·",lsquo:"å·¦å•å¼•å·",rsquo:"å³å•å¼•å·",ldquo:"å·¦åŒå¼•å·",rdquo:"å³åŒå¼•å·",ndash:"短划线",mdash:"长划线",iexcl:"ç«–ç¿»å¹å·",cent:"分å¸ç¬¦å·",pound:"英镑符å·",curren:"è´§å¸ç¬¦å·",yen:"日元符å·",brvbar:"é—´æ–­æ¡",sect:"节标记",uml:"分音符",copy:"版æƒæ‰€æœ‰æ ‡è®°",ordf:"阴性顺åºæŒ‡ç¤ºç¬¦",laquo:"左指åŒå°–引å·",not:"éžæ ‡è®°",reg:"注册标记",macr:"长音符",deg:"度标记",sup2:"上标二",sup3:"上标三",acute:"é”音符",micro:"微符",para:"段è½æ ‡è®°",middot:"中间点",cedil:"下加符",sup1:"上标一",ordm:"阳性顺åºæŒ‡ç¤ºç¬¦",raquo:"å³æŒ‡åŒå°–引å·",frac14:"普通分数四分之一",frac12:"普通分数二分之一",frac34:"普通分数四分之三",iquest:"竖翻问å·",
-Agrave:"带抑音符的拉ä¸æ–‡å¤§å†™å­—æ¯ A",Aacute:"带é”音符的拉ä¸æ–‡å¤§å†™å­—æ¯ A",Acirc:"带扬抑符的拉ä¸æ–‡å¤§å†™å­—æ¯ A",Atilde:"带颚化符的拉ä¸æ–‡å¤§å†™å­—æ¯ A",Auml:"带分音符的拉ä¸æ–‡å¤§å†™å­—æ¯ A",Aring:"带上圆圈的拉ä¸æ–‡å¤§å†™å­—æ¯ A",AElig:"拉ä¸æ–‡å¤§å†™å­—æ¯ Ae",Ccedil:"带下加符的拉ä¸æ–‡å¤§å†™å­—æ¯ C",Egrave:"带抑音符的拉ä¸æ–‡å¤§å†™å­—æ¯ E",Eacute:"带é”音符的拉ä¸æ–‡å¤§å†™å­—æ¯ E",Ecirc:"带扬抑符的拉ä¸æ–‡å¤§å†™å­—æ¯ E",Euml:"带分音符的拉ä¸æ–‡å¤§å†™å­—æ¯ E",Igrave:"带抑音符的拉ä¸æ–‡å¤§å†™å­—æ¯ I",Iacute:"带é”音符的拉ä¸æ–‡å¤§å†™å­—æ¯ I",Icirc:"带扬抑符的拉ä¸æ–‡å¤§å†™å­—æ¯ I",Iuml:"带分音符的拉ä¸æ–‡å¤§å†™å­—æ¯ I",ETH:"拉ä¸æ–‡å¤§å†™å­—æ¯ Eth",Ntilde:"带颚化符的拉ä¸æ–‡å¤§å†™å­—æ¯ N",Ograve:"带抑音符的拉ä¸æ–‡å¤§å†™å­—æ¯ O",Oacute:"带é”音符的拉ä¸æ–‡å¤§å†™å­—æ¯ O",Ocirc:"带扬抑符的拉ä¸æ–‡å¤§å†™å­—æ¯ O",Otilde:"带颚化符的拉ä¸æ–‡å¤§å†™å­—æ¯ O",
-Ouml:"带分音符的拉ä¸æ–‡å¤§å†™å­—æ¯ O",times:"乘å·",Oslash:"带粗线的拉ä¸æ–‡å¤§å†™å­—æ¯ O",Ugrave:"带抑音符的拉ä¸æ–‡å¤§å†™å­—æ¯ U",Uacute:"带é”音符的拉ä¸æ–‡å¤§å†™å­—æ¯ U",Ucirc:"带扬抑符的拉ä¸æ–‡å¤§å†™å­—æ¯ U",Uuml:"带分音符的拉ä¸æ–‡å¤§å†™å­—æ¯ U",Yacute:"带抑音符的拉ä¸æ–‡å¤§å†™å­—æ¯ Y",THORN:"拉ä¸æ–‡å¤§å†™å­—æ¯ Thorn",szlig:"拉ä¸æ–‡å°å†™å­—æ¯æ¸…音 S",agrave:"带抑音符的拉ä¸æ–‡å°å†™å­—æ¯ A",aacute:"带é”音符的拉ä¸æ–‡å°å†™å­—æ¯ A",acirc:"带扬抑符的拉ä¸æ–‡å°å†™å­—æ¯ A",atilde:"带颚化符的拉ä¸æ–‡å°å†™å­—æ¯ A",auml:"带分音符的拉ä¸æ–‡å°å†™å­—æ¯ A",aring:"带上圆圈的拉ä¸æ–‡å°å†™å­—æ¯ A",aelig:"拉ä¸æ–‡å°å†™å­—æ¯ Ae",ccedil:"带下加符的拉ä¸æ–‡å°å†™å­—æ¯ C",egrave:"带抑音符的拉ä¸æ–‡å°å†™å­—æ¯ E",eacute:"带é”音符的拉ä¸æ–‡å°å†™å­—æ¯ E",ecirc:"带扬抑符的拉ä¸æ–‡å°å†™å­—æ¯ E",euml:"带分音符的拉ä¸æ–‡å°å†™å­—æ¯ E",igrave:"带抑音符的拉ä¸æ–‡å°å†™å­—æ¯ I",
-iacute:"带é”音符的拉ä¸æ–‡å°å†™å­—æ¯ I",icirc:"带扬抑符的拉ä¸æ–‡å°å†™å­—æ¯ I",iuml:"带分音符的拉ä¸æ–‡å°å†™å­—æ¯ I",eth:"拉ä¸æ–‡å°å†™å­—æ¯ Eth",ntilde:"带颚化符的拉ä¸æ–‡å°å†™å­—æ¯ N",ograve:"带抑音符的拉ä¸æ–‡å°å†™å­—æ¯ O",oacute:"带é”音符的拉ä¸æ–‡å°å†™å­—æ¯ O",ocirc:"带扬抑符的拉ä¸æ–‡å°å†™å­—æ¯ O",otilde:"带颚化符的拉ä¸æ–‡å°å†™å­—æ¯ O",ouml:"带分音符的拉ä¸æ–‡å°å†™å­—æ¯ O",divide:"除å·",oslash:"带粗线的拉ä¸æ–‡å°å†™å­—æ¯ O",ugrave:"带抑音符的拉ä¸æ–‡å°å†™å­—æ¯ U",uacute:"带é”音符的拉ä¸æ–‡å°å†™å­—æ¯ U",ucirc:"带扬抑符的拉ä¸æ–‡å°å†™å­—æ¯ U",uuml:"带分音符的拉ä¸æ–‡å°å†™å­—æ¯ U",yacute:"带抑音符的拉ä¸æ–‡å°å†™å­—æ¯ Y",thorn:"拉ä¸æ–‡å°å†™å­—æ¯ Thorn",yuml:"带分音符的拉ä¸æ–‡å°å†™å­—æ¯ Y",OElig:"拉ä¸æ–‡å¤§å†™è¿žå­— Oe",oelig:"拉ä¸æ–‡å°å†™è¿žå­— Oe",372:"带扬抑符的拉ä¸æ–‡å¤§å†™å­—æ¯ W",374:"带扬抑符的拉ä¸æ–‡å¤§å†™å­—æ¯ Y",
-373:"带扬抑符的拉ä¸æ–‡å°å†™å­—æ¯ W",375:"带扬抑符的拉ä¸æ–‡å°å†™å­—æ¯ Y",sbquo:"å•ä¸‹ 9 形引å·",8219:"å•é«˜æ¨ªç¿» 9 形引å·",bdquo:"åŒä¸‹ 9 形引å·",hellip:"æ°´å¹³çœç•¥å·",trade:"商标标志",9658:"实心å³æŒ‡æŒ‡é’ˆ",bull:"加é‡å·",rarr:"å‘å³ç®­å¤´",rArr:"å‘å³åŒçº¿ç®­å¤´",hArr:"å·¦å³åŒçº¿ç®­å¤´",diams:"实心方å—纸牌",asymp:"约等于"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/zh.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/zh.js
deleted file mode 100644
index 7bc2b556..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/lang/zh.js
+++ /dev/null
@@ -1,12 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.plugins.setLang("specialchar","zh",{euro:"æ­å…ƒç¬¦è™Ÿ",lsquo:"左單引號",rsquo:"å³å–®å¼•è™Ÿ",ldquo:"左雙引號",rdquo:"å³é›™å¼•è™Ÿ",ndash:"短破折號",mdash:"長破折號",iexcl:"倒置的驚嘆號",cent:"美分符號",pound:"英鎊符號",curren:"貨幣符號",yen:"日圓符號",brvbar:"Broken bar",sect:"章節符號",uml:"分音符號",copy:"版權符號",ordf:"雌性符號",laquo:"左雙角括號",not:"Not 符號",reg:"註冊商標符號",macr:"長音符號",deg:"度數符號",sup2:"上標字 2",sup3:"上標字 3",acute:"尖音符號",micro:"Micro sign",para:"段è½ç¬¦è™Ÿ",middot:"中間點",cedil:"å­—æ¯ C 下é¢çš„尾型符號 ",sup1:"上標",ordm:"雄性符號",raquo:"å³é›™è§’括號",frac14:"四分之一符號",frac12:"Vulgar fraction one half",
-frac34:"Vulgar fraction three quarters",iquest:"Inverted question mark",Agrave:"Latin capital letter A with grave accent",Aacute:"Latin capital letter A with acute accent",Acirc:"Latin capital letter A with circumflex",Atilde:"Latin capital letter A with tilde",Auml:"拉ä¸å¤§å¯«å­—æ¯ E 帶分音符號",Aring:"拉ä¸å¤§å¯«å­—æ¯ A 帶上圓圈",AElig:"拉ä¸å¤§å¯«å­—æ¯ Ã†",Ccedil:"拉ä¸å¤§å¯«å­—æ¯ C 帶下尾符號",Egrave:"Latin capital letter E with grave accent",Eacute:"Latin capital letter E with acute accent",Ecirc:"Latin capital letter E with circumflex",Euml:"Latin capital letter E with diaeresis",
-Igrave:"Latin capital letter I with grave accent",Iacute:"Latin capital letter I with acute accent",Icirc:"Latin capital letter I with circumflex",Iuml:"Latin capital letter I with diaeresis",ETH:"Latin capital letter Eth",Ntilde:"Latin capital letter N with tilde",Ograve:"Latin capital letter O with grave accent",Oacute:"Latin capital letter O with acute accent",Ocirc:"Latin capital letter O with circumflex",Otilde:"Latin capital letter O with tilde",Ouml:"Latin capital letter O with diaeresis",
-times:"乘號",Oslash:"拉ä¸å¤§å¯«å­—æ¯ O 帶粗線符號",Ugrave:"Latin capital letter U with grave accent",Uacute:"Latin capital letter U with acute accent",Ucirc:"Latin capital letter U with circumflex",Uuml:"Latin capital letter U with diaeresis",Yacute:"Latin capital letter Y with acute accent",THORN:"Latin capital letter Thorn",szlig:"Latin small letter sharp s",agrave:"Latin small letter a with grave accent",aacute:"Latin small letter a with acute accent",acirc:"Latin small letter a with circumflex",atilde:"Latin small letter a with tilde",
-auml:"Latin small letter a with diaeresis",aring:"Latin small letter a with ring above",aelig:"Latin small letter æ",ccedil:"Latin small letter c with cedilla",egrave:"Latin small letter e with grave accent",eacute:"Latin small letter e with acute accent",ecirc:"Latin small letter e with circumflex",euml:"Latin small letter e with diaeresis",igrave:"Latin small letter i with grave accent",iacute:"Latin small letter i with acute accent",icirc:"Latin small letter i with circumflex",iuml:"Latin small letter i with diaeresis",
-eth:"Latin small letter eth",ntilde:"Latin small letter n with tilde",ograve:"Latin small letter o with grave accent",oacute:"Latin small letter o with acute accent",ocirc:"Latin small letter o with circumflex",otilde:"Latin small letter o with tilde",ouml:"Latin small letter o with diaeresis",divide:"Division sign",oslash:"Latin small letter o with stroke",ugrave:"Latin small letter u with grave accent",uacute:"Latin small letter u with acute accent",ucirc:"Latin small letter u with circumflex",
-uuml:"Latin small letter u with diaeresis",yacute:"Latin small letter y with acute accent",thorn:"Latin small letter thorn",yuml:"Latin small letter y with diaeresis",OElig:"Latin capital ligature OE",oelig:"Latin small ligature oe",372:"Latin capital letter W with circumflex",374:"Latin capital letter Y with circumflex",373:"Latin small letter w with circumflex",375:"Latin small letter y with circumflex",sbquo:"Single low-9 quotation mark",8219:"Single high-reversed-9 quotation mark",bdquo:"Double low-9 quotation mark",
-hellip:"Horizontal ellipsis",trade:"Trade mark sign",9658:"Black right-pointing pointer",bull:"Bullet",rarr:"Rightwards arrow",rArr:"Rightwards double arrow",hArr:"Left right double arrow",diams:"Black diamond suit",asymp:"Almost equal to"}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/specialchar.js b/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/specialchar.js
deleted file mode 100644
index c4d1696b..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/specialchar/dialogs/specialchar.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("specialchar",function(i){var e,l=i.lang.specialchar,k=function(c){var b,c=c.data?c.data.getTarget():new CKEDITOR.dom.element(c);if("a"==c.getName()&&(b=c.getChild(0).getHtml()))c.removeClass("cke_light_background"),e.hide(),c=i.document.createElement("span"),c.setHtml(b),i.insertText(c.getText())},m=CKEDITOR.tools.addFunction(k),j,g=function(c,b){var a,b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());if("a"==b.getName()&&(a=b.getChild(0).getHtml())){j&&d(null,j);
-var f=e.getContentElement("info","htmlPreview").getElement();e.getContentElement("info","charPreview").getElement().setHtml(a);f.setHtml(CKEDITOR.tools.htmlEncode(a));b.getParent().addClass("cke_light_background");j=b}},d=function(c,b){b=b||c.data.getTarget();"span"==b.getName()&&(b=b.getParent());"a"==b.getName()&&(e.getContentElement("info","charPreview").getElement().setHtml("&nbsp;"),e.getContentElement("info","htmlPreview").getElement().setHtml("&nbsp;"),b.getParent().removeClass("cke_light_background"),
-j=void 0)},n=CKEDITOR.tools.addFunction(function(c){var c=new CKEDITOR.dom.event(c),b=c.getTarget(),a;a=c.getKeystroke();var f="rtl"==i.lang.dir;switch(a){case 38:if(a=b.getParent().getParent().getPrevious())a=a.getChild([b.getParent().getIndex(),0]),a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 40:if(a=b.getParent().getParent().getNext())if((a=a.getChild([b.getParent().getIndex(),0]))&&1==a.type)a.focus(),d(null,b),g(null,a);c.preventDefault();break;case 32:k({data:c});c.preventDefault();
-break;case f?37:39:if(a=b.getParent().getNext())a=a.getChild(0),1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);else if(a=b.getParent().getParent().getNext())(a=a.getChild([0,0]))&&1==a.type?(a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):d(null,b);break;case f?39:37:(a=b.getParent().getPrevious())?(a=a.getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):(a=b.getParent().getParent().getPrevious())?(a=a.getLast().getChild(0),a.focus(),d(null,b),g(null,a),c.preventDefault(!0)):
-d(null,b)}});return{title:l.title,minWidth:430,minHeight:280,buttons:[CKEDITOR.dialog.cancelButton],charColumns:17,onLoad:function(){for(var c=this.definition.charColumns,b=i.config.specialChars,a=CKEDITOR.tools.getNextId()+"_specialchar_table_label",f=['<table role="listbox" aria-labelledby="'+a+'" style="width: 320px; height: 100%; border-collapse: separate;" align="center" cellspacing="2" cellpadding="2" border="0">'],d=0,g=b.length,h,e;d<g;){f.push('<tr role="presentation">');for(var j=0;j<c;j++,
-d++){if(h=b[d]){h instanceof Array?(e=h[1],h=h[0]):(e=h.replace("&","").replace(";","").replace("#",""),e=l[e]||h);var k="cke_specialchar_label_"+d+"_"+CKEDITOR.tools.getNextNumber();f.push('<td class="cke_dark_background" style="cursor: default" role="presentation"><a href="javascript: void(0);" role="option" aria-posinset="'+(d+1)+'"',' aria-setsize="'+g+'"',' aria-labelledby="'+k+'"',' class="cke_specialchar" title="',CKEDITOR.tools.htmlEncode(e),'" onkeydown="CKEDITOR.tools.callFunction( '+n+
-', event, this )" onclick="CKEDITOR.tools.callFunction('+m+', this); return false;" tabindex="-1"><span style="margin: 0 auto;cursor: inherit">'+h+'</span><span class="cke_voice_label" id="'+k+'">'+e+"</span></a>")}else f.push('<td class="cke_dark_background">&nbsp;');f.push("</td>")}f.push("</tr>")}f.push("</tbody></table>",'<span id="'+a+'" class="cke_voice_label">'+l.options+"</span>");this.getContentElement("info","charContainer").getElement().setHtml(f.join(""))},contents:[{id:"info",label:i.lang.common.generalTab,
-title:i.lang.common.generalTab,padding:0,align:"top",elements:[{type:"hbox",align:"top",widths:["320px","90px"],children:[{type:"html",id:"charContainer",html:"",onMouseover:g,onMouseout:d,focus:function(){var c=this.getElement().getElementsByTag("a").getItem(0);setTimeout(function(){c.focus();g(null,c)},0)},onShow:function(){var c=this.getElement().getChild([0,0,0,0,0]);setTimeout(function(){c.focus();g(null,c)},0)},onLoad:function(c){e=c.sender}},{type:"hbox",align:"top",widths:["100%"],children:[{type:"vbox",
-align:"top",children:[{type:"html",html:"<div></div>"},{type:"html",id:"charPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",html:"<div>&nbsp;</div>"},{type:"html",id:"htmlPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:'Microsoft Sans Serif',Arial,Helvetica,Verdana;text-align:center;",
-html:"<div>&nbsp;</div>"}]}]}]}]}]}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/table/dialogs/table.js b/wqflask/wqflask/static/packages/ckeditor/plugins/table/dialogs/table.js
deleted file mode 100644
index 6f656817..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/table/dialogs/table.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-(function(){function r(a){for(var e=0,l=0,k=0,m,g=a.$.rows.length;k<g;k++){m=a.$.rows[k];for(var d=e=0,c,b=m.cells.length;d<b;d++)c=m.cells[d],e+=c.colSpan;e>l&&(l=e)}return l}function o(a){return function(){var e=this.getValue(),e=!!(CKEDITOR.dialog.validate.integer()(e)&&0<e);e||(alert(a),this.select());return e}}function n(a,e){var l=function(g){return new CKEDITOR.dom.element(g,a.document)},n=a.editable(),m=a.plugins.dialogadvtab;return{title:a.lang.table.title,minWidth:310,minHeight:CKEDITOR.env.ie?
-310:280,onLoad:function(){var g=this,a=g.getContentElement("advanced","advStyles");if(a)a.on("change",function(){var a=this.getStyle("width",""),b=g.getContentElement("info","txtWidth");b&&b.setValue(a,!0);a=this.getStyle("height","");(b=g.getContentElement("info","txtHeight"))&&b.setValue(a,!0)})},onShow:function(){var g=a.getSelection(),d=g.getRanges(),c,b=this.getContentElement("info","txtRows"),h=this.getContentElement("info","txtCols"),p=this.getContentElement("info","txtWidth"),f=this.getContentElement("info",
-"txtHeight");"tableProperties"==e&&((g=g.getSelectedElement())&&g.is("table")?c=g:0<d.length&&(CKEDITOR.env.webkit&&d[0].shrink(CKEDITOR.NODE_ELEMENT),c=a.elementPath(d[0].getCommonAncestor(!0)).contains("table",1)),this._.selectedElement=c);c?(this.setupContent(c),b&&b.disable(),h&&h.disable()):(b&&b.enable(),h&&h.enable());p&&p.onChange();f&&f.onChange()},onOk:function(){var g=a.getSelection(),d=this._.selectedElement&&g.createBookmarks(),c=this._.selectedElement||l("table"),b={};this.commitContent(b,
-c);if(b.info){b=b.info;if(!this._.selectedElement)for(var h=c.append(l("tbody")),e=parseInt(b.txtRows,10)||0,f=parseInt(b.txtCols,10)||0,i=0;i<e;i++)for(var j=h.append(l("tr")),k=0;k<f;k++)j.append(l("td")).appendBogus();e=b.selHeaders;if(!c.$.tHead&&("row"==e||"both"==e)){j=new CKEDITOR.dom.element(c.$.createTHead());h=c.getElementsByTag("tbody").getItem(0);h=h.getElementsByTag("tr").getItem(0);for(i=0;i<h.getChildCount();i++)f=h.getChild(i),f.type==CKEDITOR.NODE_ELEMENT&&!f.data("cke-bookmark")&&
-(f.renameNode("th"),f.setAttribute("scope","col"));j.append(h.remove())}if(null!==c.$.tHead&&!("row"==e||"both"==e)){j=new CKEDITOR.dom.element(c.$.tHead);h=c.getElementsByTag("tbody").getItem(0);for(k=h.getFirst();0<j.getChildCount();){h=j.getFirst();for(i=0;i<h.getChildCount();i++)f=h.getChild(i),f.type==CKEDITOR.NODE_ELEMENT&&(f.renameNode("td"),f.removeAttribute("scope"));h.insertBefore(k)}j.remove()}if(!this.hasColumnHeaders&&("col"==e||"both"==e))for(j=0;j<c.$.rows.length;j++)f=new CKEDITOR.dom.element(c.$.rows[j].cells[0]),
-f.renameNode("th"),f.setAttribute("scope","row");if(this.hasColumnHeaders&&!("col"==e||"both"==e))for(i=0;i<c.$.rows.length;i++)j=new CKEDITOR.dom.element(c.$.rows[i]),"tbody"==j.getParent().getName()&&(f=new CKEDITOR.dom.element(j.$.cells[0]),f.renameNode("td"),f.removeAttribute("scope"));b.txtHeight?c.setStyle("height",b.txtHeight):c.removeStyle("height");b.txtWidth?c.setStyle("width",b.txtWidth):c.removeStyle("width");c.getAttribute("style")||c.removeAttribute("style")}if(this._.selectedElement)try{g.selectBookmarks(d)}catch(m){}else a.insertElement(c),
-setTimeout(function(){var g=new CKEDITOR.dom.element(c.$.rows[0].cells[0]),b=a.createRange();b.moveToPosition(g,CKEDITOR.POSITION_AFTER_START);b.select()},0)},contents:[{id:"info",label:a.lang.table.title,elements:[{type:"hbox",widths:[null,null],styles:["vertical-align:top"],children:[{type:"vbox",padding:0,children:[{type:"text",id:"txtRows","default":3,label:a.lang.table.rows,required:!0,controlStyle:"width:5em",validate:o(a.lang.table.invalidRows),setup:function(a){this.setValue(a.$.rows.length)},
-commit:k},{type:"text",id:"txtCols","default":2,label:a.lang.table.columns,required:!0,controlStyle:"width:5em",validate:o(a.lang.table.invalidCols),setup:function(a){this.setValue(r(a))},commit:k},{type:"html",html:"&nbsp;"},{type:"select",id:"selHeaders",requiredContent:"th","default":"",label:a.lang.table.headers,items:[[a.lang.table.headersNone,""],[a.lang.table.headersRow,"row"],[a.lang.table.headersColumn,"col"],[a.lang.table.headersBoth,"both"]],setup:function(a){var d=this.getDialog();d.hasColumnHeaders=
-!0;for(var c=0;c<a.$.rows.length;c++){var b=a.$.rows[c].cells[0];if(b&&"th"!=b.nodeName.toLowerCase()){d.hasColumnHeaders=!1;break}}null!==a.$.tHead?this.setValue(d.hasColumnHeaders?"both":"row"):this.setValue(d.hasColumnHeaders?"col":"")},commit:k},{type:"text",id:"txtBorder",requiredContent:"table[border]","default":a.filter.check("table[border]")?1:0,label:a.lang.table.border,controlStyle:"width:3em",validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidBorder),setup:function(a){this.setValue(a.getAttribute("border")||
-"")},commit:function(a,d){this.getValue()?d.setAttribute("border",this.getValue()):d.removeAttribute("border")}},{id:"cmbAlign",type:"select",requiredContent:"table[align]","default":"",label:a.lang.common.align,items:[[a.lang.common.notSet,""],[a.lang.common.alignLeft,"left"],[a.lang.common.alignCenter,"center"],[a.lang.common.alignRight,"right"]],setup:function(a){this.setValue(a.getAttribute("align")||"")},commit:function(a,d){this.getValue()?d.setAttribute("align",this.getValue()):d.removeAttribute("align")}}]},
-{type:"vbox",padding:0,children:[{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtWidth",requiredContent:"table{width}",controlStyle:"width:5em",label:a.lang.common.width,title:a.lang.common.cssLengthTooltip,"default":a.filter.check("table{width}")?500>n.getSize("width")?"100%":500:0,getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.width)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");a&&
-a.updateStyle("width",this.getValue())},setup:function(a){this.setValue(a.getStyle("width"))},commit:k}]},{type:"hbox",widths:["5em"],children:[{type:"text",id:"txtHeight",requiredContent:"table{height}",controlStyle:"width:5em",label:a.lang.common.height,title:a.lang.common.cssLengthTooltip,"default":"",getValue:q,validate:CKEDITOR.dialog.validate.cssLength(a.lang.common.invalidCssLength.replace("%1",a.lang.common.height)),onChange:function(){var a=this.getDialog().getContentElement("advanced","advStyles");
-a&&a.updateStyle("height",this.getValue())},setup:function(a){(a=a.getStyle("height"))&&this.setValue(a)},commit:k}]},{type:"html",html:"&nbsp;"},{type:"text",id:"txtCellSpace",requiredContent:"table[cellspacing]",controlStyle:"width:3em",label:a.lang.table.cellSpace,"default":a.filter.check("table[cellspacing]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellSpacing),setup:function(a){this.setValue(a.getAttribute("cellSpacing")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellSpacing",
-this.getValue()):d.removeAttribute("cellSpacing")}},{type:"text",id:"txtCellPad",requiredContent:"table[cellpadding]",controlStyle:"width:3em",label:a.lang.table.cellPad,"default":a.filter.check("table[cellpadding]")?1:0,validate:CKEDITOR.dialog.validate.number(a.lang.table.invalidCellPadding),setup:function(a){this.setValue(a.getAttribute("cellPadding")||"")},commit:function(a,d){this.getValue()?d.setAttribute("cellPadding",this.getValue()):d.removeAttribute("cellPadding")}}]}]},{type:"html",align:"right",
-html:""},{type:"vbox",padding:0,children:[{type:"text",id:"txtCaption",requiredContent:"caption",label:a.lang.table.caption,setup:function(a){this.enable();a=a.getElementsByTag("caption");if(0<a.count()){var a=a.getItem(0),d=a.getFirst(CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT));d&&!d.equals(a.getBogus())?(this.disable(),this.setValue(a.getText())):(a=CKEDITOR.tools.trim(a.getText()),this.setValue(a))}},commit:function(e,d){if(this.isEnabled()){var c=this.getValue(),b=d.getElementsByTag("caption");
-if(c)0<b.count()?(b=b.getItem(0),b.setHtml("")):(b=new CKEDITOR.dom.element("caption",a.document),d.getChildCount()?b.insertBefore(d.getFirst()):b.appendTo(d)),b.append(new CKEDITOR.dom.text(c,a.document));else if(0<b.count())for(c=b.count()-1;0<=c;c--)b.getItem(c).remove()}}},{type:"text",id:"txtSummary",requiredContent:"table[summary]",label:a.lang.table.summary,setup:function(a){this.setValue(a.getAttribute("summary")||"")},commit:function(a,d){this.getValue()?d.setAttribute("summary",this.getValue()):
-d.removeAttribute("summary")}}]}]},m&&m.createAdvancedTab(a,null,"table")]}}var q=CKEDITOR.tools.cssLength,k=function(a){var e=this.id;a.info||(a.info={});a.info[e]=this.getValue()};CKEDITOR.dialog.add("table",function(a){return n(a,"table")});CKEDITOR.dialog.add("tableProperties",function(a){return n(a,"tableProperties")})})(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/tabletools/dialogs/tableCell.js b/wqflask/wqflask/static/packages/ckeditor/plugins/tabletools/dialogs/tableCell.js
deleted file mode 100644
index fb8e99ad..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/tabletools/dialogs/tableCell.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("cellProperties",function(g){function d(a){return function(b){for(var c=a(b[0]),d=1;d<b.length;d++)if(a(b[d])!==c){c=null;break}"undefined"!=typeof c&&(this.setValue(c),CKEDITOR.env.gecko&&("select"==this.type&&!c)&&(this.getInputElement().$.selectedIndex=-1))}}function j(a){if(a=l.exec(a.getStyle("width")||a.getAttribute("width")))return a[2]}var h=g.lang.table,c=h.cell,e=g.lang.common,i=CKEDITOR.dialog.validate,l=/^(\d+(?:\.\d+)?)(px|%)$/,f={type:"html",html:"&nbsp;"},m="rtl"==
-g.lang.dir,k=g.plugins.colordialog;return{title:c.title,minWidth:CKEDITOR.env.ie&&CKEDITOR.env.quirks?450:410,minHeight:CKEDITOR.env.ie&&(CKEDITOR.env.ie7Compat||CKEDITOR.env.quirks)?230:220,contents:[{id:"info",label:c.title,accessKey:"I",elements:[{type:"hbox",widths:["40%","5%","40%"],children:[{type:"vbox",padding:0,children:[{type:"hbox",widths:["70%","30%"],children:[{type:"text",id:"width",width:"100px",label:e.width,validate:i.number(c.invalidWidth),onLoad:function(){var a=this.getDialog().getContentElement("info",
-"widthType").getElement(),b=this.getInputElement(),c=b.getAttribute("aria-labelledby");b.setAttribute("aria-labelledby",[c,a.$.id].join(" "))},setup:d(function(a){var b=parseInt(a.getAttribute("width"),10),a=parseInt(a.getStyle("width"),10);return!isNaN(a)?a:!isNaN(b)?b:""}),commit:function(a){var b=parseInt(this.getValue(),10),c=this.getDialog().getValueOf("info","widthType")||j(a);isNaN(b)?a.removeStyle("width"):a.setStyle("width",b+c);a.removeAttribute("width")},"default":""},{type:"select",id:"widthType",
-label:g.lang.table.widthUnit,labelStyle:"visibility:hidden","default":"px",items:[[h.widthPx,"px"],[h.widthPc,"%"]],setup:d(j)}]},{type:"hbox",widths:["70%","30%"],children:[{type:"text",id:"height",label:e.height,width:"100px","default":"",validate:i.number(c.invalidHeight),onLoad:function(){var a=this.getDialog().getContentElement("info","htmlHeightType").getElement(),b=this.getInputElement(),c=b.getAttribute("aria-labelledby");b.setAttribute("aria-labelledby",[c,a.$.id].join(" "))},setup:d(function(a){var b=
-parseInt(a.getAttribute("height"),10),a=parseInt(a.getStyle("height"),10);return!isNaN(a)?a:!isNaN(b)?b:""}),commit:function(a){var b=parseInt(this.getValue(),10);isNaN(b)?a.removeStyle("height"):a.setStyle("height",CKEDITOR.tools.cssLength(b));a.removeAttribute("height")}},{id:"htmlHeightType",type:"html",html:"<br />"+h.widthPx}]},f,{type:"select",id:"wordWrap",label:c.wordWrap,"default":"yes",items:[[c.yes,"yes"],[c.no,"no"]],setup:d(function(a){var b=a.getAttribute("noWrap");if("nowrap"==a.getStyle("white-space")||
-b)return"no"}),commit:function(a){"no"==this.getValue()?a.setStyle("white-space","nowrap"):a.removeStyle("white-space");a.removeAttribute("noWrap")}},f,{type:"select",id:"hAlign",label:c.hAlign,"default":"",items:[[e.notSet,""],[e.alignLeft,"left"],[e.alignCenter,"center"],[e.alignRight,"right"],[e.alignJustify,"justify"]],setup:d(function(a){var b=a.getAttribute("align");return a.getStyle("text-align")||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("text-align",b):a.removeStyle("text-align");
-a.removeAttribute("align")}},{type:"select",id:"vAlign",label:c.vAlign,"default":"",items:[[e.notSet,""],[e.alignTop,"top"],[e.alignMiddle,"middle"],[e.alignBottom,"bottom"],[c.alignBaseline,"baseline"]],setup:d(function(a){var b=a.getAttribute("vAlign"),a=a.getStyle("vertical-align");switch(a){case "top":case "middle":case "bottom":case "baseline":break;default:a=""}return a||b||""}),commit:function(a){var b=this.getValue();b?a.setStyle("vertical-align",b):a.removeStyle("vertical-align");a.removeAttribute("vAlign")}}]},
-f,{type:"vbox",padding:0,children:[{type:"select",id:"cellType",label:c.cellType,"default":"td",items:[[c.data,"td"],[c.header,"th"]],setup:d(function(a){return a.getName()}),commit:function(a){a.renameNode(this.getValue())}},f,{type:"text",id:"rowSpan",label:c.rowSpan,"default":"",validate:i.integer(c.invalidRowSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("rowSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("rowSpan",this.getValue()):
-a.removeAttribute("rowSpan")}},{type:"text",id:"colSpan",label:c.colSpan,"default":"",validate:i.integer(c.invalidColSpan),setup:d(function(a){if((a=parseInt(a.getAttribute("colSpan"),10))&&1!=a)return a}),commit:function(a){var b=parseInt(this.getValue(),10);b&&1!=b?a.setAttribute("colSpan",this.getValue()):a.removeAttribute("colSpan")}},f,{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"bgColor",label:c.bgColor,"default":"",setup:d(function(a){var b=a.getAttribute("bgColor");
-return a.getStyle("background-color")||b}),commit:function(a){this.getValue()?a.setStyle("background-color",this.getValue()):a.removeStyle("background-color");a.removeAttribute("bgColor")}},k?{type:"button",id:"bgColorChoose","class":"colorChooser",label:c.chooseColor,onLoad:function(){this.getElement().getParent().setStyle("vertical-align","bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","bgColor").setValue(a);this.focus()},this)}}:f]},f,
-{type:"hbox",padding:0,widths:["60%","40%"],children:[{type:"text",id:"borderColor",label:c.borderColor,"default":"",setup:d(function(a){var b=a.getAttribute("borderColor");return a.getStyle("border-color")||b}),commit:function(a){this.getValue()?a.setStyle("border-color",this.getValue()):a.removeStyle("border-color");a.removeAttribute("borderColor")}},k?{type:"button",id:"borderColorChoose","class":"colorChooser",label:c.chooseColor,style:(m?"margin-right":"margin-left")+": 10px",onLoad:function(){this.getElement().getParent().setStyle("vertical-align",
-"bottom")},onClick:function(){g.getColorFromDialog(function(a){a&&this.getDialog().getContentElement("info","borderColor").setValue(a);this.focus()},this)}}:f]}]}]}]}],onShow:function(){this.cells=CKEDITOR.plugins.tabletools.getSelectedCells(this._.editor.getSelection());this.setupContent(this.cells)},onOk:function(){for(var a=this._.editor.getSelection(),b=a.createBookmarks(),c=this.cells,d=0;d<c.length;d++)this.commitContent(c[d]);this._.editor.forceNextSelectionCheck();a.selectBookmarks(b);this._.editor.selectionChange()},
-onLoad:function(){var a={};this.foreach(function(b){b.setup&&b.commit&&(b.setup=CKEDITOR.tools.override(b.setup,function(c){return function(){c.apply(this,arguments);a[b.id]=b.getValue()}}),b.commit=CKEDITOR.tools.override(b.commit,function(c){return function(){a[b.id]!==b.getValue()&&c.apply(this,arguments)}}))})}}}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/dialogs/templates.css b/wqflask/wqflask/static/packages/ckeditor/plugins/templates/dialogs/templates.css
deleted file mode 100644
index 66bc388e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/dialogs/templates.css
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-
-.cke_tpl_list
-{
- border: #dcdcdc 2px solid;
- background-color: #ffffff;
- overflow-y: auto;
- overflow-x: hidden;
- width: 100%;
- height: 220px;
-}
-
-.cke_tpl_item
-{
- margin: 5px;
- padding: 7px;
- border: #eeeeee 1px solid;
- *width: 88%;
-}
-
-.cke_tpl_preview
-{
- border-collapse: separate;
- text-indent:0;
- width: 100%;
-}
-.cke_tpl_preview td
-{
- padding: 2px;
- vertical-align: middle;
-}
-.cke_tpl_preview .cke_tpl_preview_img
-{
- width: 100px;
-}
-.cke_tpl_preview span
-{
- white-space: normal;
-}
-
-.cke_tpl_title
-{
- font-weight: bold;
-}
-
-.cke_tpl_list a:hover .cke_tpl_item,
-.cke_tpl_list a:focus .cke_tpl_item,
-.cke_tpl_list a:active .cke_tpl_item
-{
- border: #ff9933 1px solid;
- background-color: #fffacd;
-}
-
-.cke_tpl_list a:hover *,
-.cke_tpl_list a:focus *,
-.cke_tpl_list a:active *
-{
- cursor: pointer;
-}
-
-/* IE Quirks contextual selectors children will not get :hover transition until
- the hover style of the link itself contains certain CSS declarations. */
-.cke_browser_quirks .cke_tpl_list a:active,
-.cke_browser_quirks .cke_tpl_list a:hover,
-.cke_browser_quirks .cke_tpl_list a:focus
-{
- background-position: 0 0;
-}
-
-.cke_hc .cke_tpl_list a:hover .cke_tpl_item,
-.cke_hc .cke_tpl_list a:focus .cke_tpl_item,
-.cke_hc .cke_tpl_list a:active .cke_tpl_item
-{
- border-width: 3px;
-}
-
-.cke_tpl_empty, .cke_tpl_loading
-{
- text-align: center;
- padding: 5px;
-}
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/dialogs/templates.js b/wqflask/wqflask/static/packages/ckeditor/plugins/templates/dialogs/templates.js
deleted file mode 100644
index bd7832d6..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/dialogs/templates.js
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-(function(){CKEDITOR.dialog.add("templates",function(c){function o(a,b){var k=CKEDITOR.dom.element.createFromHtml('<a href="javascript:void(0)" tabIndex="-1" role="option" ><div class="cke_tpl_item"></div></a>'),d='<table style="width:350px;" class="cke_tpl_preview" role="presentation"><tr>';a.image&&b&&(d+='<td class="cke_tpl_preview_img"><img src="'+CKEDITOR.getUrl(b+a.image)+'"'+(CKEDITOR.env.ie6Compat?' onload="this.width=this.width"':"")+' alt="" title=""></td>');d+='<td style="white-space:normal;"><span class="cke_tpl_title">'+
-a.title+"</span><br/>";a.description&&(d+="<span>"+a.description+"</span>");k.getFirst().setHtml(d+"</td></tr></table>");k.on("click",function(){p(a.html)});return k}function p(a){var b=CKEDITOR.dialog.getCurrent();b.getValueOf("selectTpl","chkInsertOpt")?(c.fire("saveSnapshot"),c.setData(a,function(){b.hide();var a=c.createRange();a.moveToElementEditStart(c.editable());a.select();setTimeout(function(){c.fire("saveSnapshot")},0)})):(c.insertHtml(a),b.hide())}function i(a){var b=a.data.getTarget(),
-c=g.equals(b);if(c||g.contains(b)){var d=a.data.getKeystroke(),f=g.getElementsByTag("a"),e;if(f){if(c)e=f.getItem(0);else switch(d){case 40:e=b.getNext();break;case 38:e=b.getPrevious();break;case 13:case 32:b.fire("click")}e&&(e.focus(),a.data.preventDefault())}}}var h=CKEDITOR.plugins.get("templates");CKEDITOR.document.appendStyleSheet(CKEDITOR.getUrl(h.path+"dialogs/templates.css"));var g,h="cke_tpl_list_label_"+CKEDITOR.tools.getNextNumber(),f=c.lang.templates,l=c.config;return{title:c.lang.templates.title,
-minWidth:CKEDITOR.env.ie?440:400,minHeight:340,contents:[{id:"selectTpl",label:f.title,elements:[{type:"vbox",padding:5,children:[{id:"selectTplText",type:"html",html:"<span>"+f.selectPromptMsg+"</span>"},{id:"templatesList",type:"html",focus:!0,html:'<div class="cke_tpl_list" tabIndex="-1" role="listbox" aria-labelledby="'+h+'"><div class="cke_tpl_loading"><span></span></div></div><span class="cke_voice_label" id="'+h+'">'+f.options+"</span>"},{id:"chkInsertOpt",type:"checkbox",label:f.insertOption,
-"default":l.templates_replaceContent}]}]}],buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var a=this.getContentElement("selectTpl","templatesList");g=a.getElement();CKEDITOR.loadTemplates(l.templates_files,function(){var b=(l.templates||"default").split(",");if(b.length){var c=g;c.setHtml("");for(var d=0,h=b.length;d<h;d++)for(var e=CKEDITOR.getTemplates(b[d]),i=e.imagesPath,e=e.templates,n=e.length,j=0;j<n;j++){var m=o(e[j],i);m.setAttribute("aria-posinset",j+1);m.setAttribute("aria-setsize",
-n);c.append(m)}a.focus()}else g.setHtml('<div class="cke_tpl_empty"><span>'+f.emptyListMsg+"</span></div>")});this._.element.on("keydown",i)},onHide:function(){this._.element.removeListener("keydown",i)}}})})(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/default.js b/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/default.js
deleted file mode 100644
index d8c172e3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/default.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-CKEDITOR.addTemplates("default",{imagesPath:CKEDITOR.getUrl(CKEDITOR.plugins.getPath("templates")+"templates/images/"),templates:[{title:"Image and Title",image:"template1.gif",description:"One main image with a title and text that surround the image.",html:'<h3><img src=" " alt="" style="margin-right: 10px" height="100" width="100" align="left" />Type the title here</h3><p>Type the text here</p>'},{title:"Strange Template",image:"template2.gif",description:"A template that defines two colums, each one with a title, and some text.",
-html:'<table cellspacing="0" cellpadding="0" style="width:100%" border="0"><tr><td style="width:50%"><h3>Title 1</h3></td><td></td><td style="width:50%"><h3>Title 2</h3></td></tr><tr><td>Text 1</td><td></td><td>Text 2</td></tr></table><p>More text goes here.</p>'},{title:"Text and Table",image:"template3.gif",description:"A title with some text and a table.",html:'<div style="width: 80%"><h3>Title goes here</h3><table style="width:150px;float: right" cellspacing="0" cellpadding="0" border="1"><caption style="border:solid 1px black"><strong>Table title</strong></caption><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr><tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr></table><p>Type the text here</p></div>'}]}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template1.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template1.gif
deleted file mode 100644
index efdabbeb..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template1.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template2.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template2.gif
deleted file mode 100644
index d1cebb3a..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template2.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template3.gif b/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template3.gif
deleted file mode 100644
index db41cb4f..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/templates/templates/images/template3.gif
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/LICENSE.md b/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/LICENSE.md
deleted file mode 100644
index 6096de23..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/LICENSE.md
+++ /dev/null
@@ -1,28 +0,0 @@
-Software License Agreement
-==========================
-
-**CKEditor WSC Plugin**
-Copyright &copy; 2012, [CKSource](http://cksource.com) - Frederico Knabben. All rights reserved.
-
-Licensed under the terms of any of the following licenses at your choice:
-
-* GNU General Public License Version 2 or later (the "GPL"):
- http://www.gnu.org/licenses/gpl.html
-
-* GNU Lesser General Public License Version 2.1 or later (the "LGPL"):
- http://www.gnu.org/licenses/lgpl.html
-
-* Mozilla Public License Version 1.1 or later (the "MPL"):
- http://www.mozilla.org/MPL/MPL-1.1.html
-
-You are not required to, but if you want to explicitly declare the license you have chosen to be bound to when using, reproducing, modifying and distributing this software, just include a text file titled "legal.txt" in your version of this software, indicating your license choice.
-
-Sources of Intellectual Property Included in this plugin
---------------------------------------------------------
-
-Where not otherwise indicated, all plugin content is authored by CKSource engineers and consists of CKSource-owned intellectual property. In some specific instances, the plugin will incorporate work done by developers outside of CKSource with their express permission.
-
-Trademarks
-----------
-
-CKEditor is a trademark of CKSource - Frederico Knabben. All other brand and product names are trademarks, registered trademarks or service marks of their respective holders.
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/README.md b/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/README.md
deleted file mode 100644
index 346e2ab1..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/README.md
+++ /dev/null
@@ -1,25 +0,0 @@
-CKEditor WebSpellChecker Plugin
-===============================
-
-This plugin brings Web Spell Checker (WSC) into CKEditor.
-
-WSC is "installation-less", using the web-services of [WebSpellChecker.net](http://www.webspellchecker.net/). It's an out of the box solution.
-
-Installation
-------------
-
-1. Clone/copy this repository contents in a new "plugins/wsc" folder in your CKEditor installation.
-2. Enable the "wsc" plugin in the CKEditor configuration file (config.js):
-
- config.extraPlugins = 'wsc';
-
-That's all. WSC will appear on the editor toolbar and will be ready to use.
-
-License
--------
-
-Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html).
-
-See LICENSE.md for more information.
-
-Developed in cooperation with [WebSpellChecker.net](http://www.webspellchecker.net/).
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/ciframe.html b/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/ciframe.html
deleted file mode 100644
index 8e0a10df..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/ciframe.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
--->
-<html>
-<head>
- <title></title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <script type="text/javascript">
-
-function gup( name )
-{
- name = name.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' ) ;
- var regexS = '[\\?&]' + name + '=([^&#]*)' ;
- var regex = new RegExp( regexS ) ;
- var results = regex.exec( window.location.href ) ;
-
- if ( results )
- return results[ 1 ] ;
- else
- return '' ;
-}
-
-var interval;
-
-function sendData2Master()
-{
- var destination = window.parent.parent ;
- try
- {
- if ( destination.XDTMaster )
- {
- var t = destination.XDTMaster.read( [ gup( 'cmd' ), gup( 'data' ) ] ) ;
- window.clearInterval( interval ) ;
- }
- }
- catch (e) {}
-}
-
-function OnMessage (event) {
- var message = event.data;
- var destination = window.parent.parent;
- destination.XDTMaster.read( [ 'end', message, 'fpm' ] ) ;
-}
-
-function listenPostMessage() {
- if (window.addEventListener) { // all browsers except IE before version 9
- window.addEventListener ("message", OnMessage, false);
- }else {
- if (window.attachEvent) { // IE before version 9
- window.attachEvent("onmessage", OnMessage);
- }
- }
-}
-
-function onLoad()
-{
- interval = window.setInterval( sendData2Master, 100 );
- listenPostMessage();
-}
-
-</script>
-</head>
-<body onload="onLoad()"><p></p></body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/tmpFrameset.html b/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/tmpFrameset.html
deleted file mode 100644
index 61203e03..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/tmpFrameset.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
--->
-<html>
-<head>
- <title></title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <script type="text/javascript">
-
-function doLoadScript( url )
-{
- if ( !url )
- return false ;
-
- var s = document.createElement( "script" ) ;
- s.type = "text/javascript" ;
- s.src = url ;
- document.getElementsByTagName( "head" )[ 0 ].appendChild( s ) ;
-
- return true ;
-}
-
-var opener;
-function tryLoad()
-{
- opener = window.parent;
-
- // get access to global parameters
- var oParams = window.opener.oldFramesetPageParams;
-
- // make frameset rows string prepare
- var sFramesetRows = ( parseInt( oParams.firstframeh, 10 ) || '30') + ",*," + ( parseInt( oParams.thirdframeh, 10 ) || '150' ) + ',0' ;
- document.getElementById( 'itFrameset' ).rows = sFramesetRows ;
-
- // dynamic including init frames and crossdomain transport code
- // from config sproxy_js_frameset url
- var addScriptUrl = oParams.sproxy_js_frameset ;
- doLoadScript( addScriptUrl ) ;
-}
-
- </script>
-</head>
-
-<frameset id="itFrameset" onload="tryLoad();" border="0" rows="30,*,*,0">
- <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="2" src="" name="navbar"></frame>
- <frame scrolling="auto" framespacing="0" frameborder="0" noresize="noresize" marginheight="0" marginwidth="0" src="" name="mid"></frame>
- <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="bot"></frame>
- <frame scrolling="no" framespacing="0" frameborder="0" noresize="noresize" marginheight="1" marginwidth="1" src="" name="spellsuggestall"></frame>
-</frameset>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc.css b/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc.css
deleted file mode 100644
index da2f1743..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc.css
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-
-html, body
-{
- background-color: transparent;
- margin: 0px;
- padding: 0px;
-}
-
-body
-{
- padding: 10px;
-}
-
-body, td, input, select, textarea
-{
- font-size: 11px;
- font-family: 'Microsoft Sans Serif' , Arial, Helvetica, Verdana;
-}
-
-.midtext
-{
- padding:0px;
- margin:10px;
-}
-
-.midtext p
-{
- padding:0px;
- margin:10px;
-}
-
-.Button
-{
- border: #737357 1px solid;
- color: #3b3b1f;
- background-color: #c7c78f;
-}
-
-.PopupTabArea
-{
- color: #737357;
- background-color: #e3e3c7;
-}
-
-.PopupTitleBorder
-{
- border-bottom: #d5d59d 1px solid;
-}
-.PopupTabEmptyArea
-{
- padding-left: 10px;
- border-bottom: #d5d59d 1px solid;
-}
-
-.PopupTab, .PopupTabSelected
-{
- border-right: #d5d59d 1px solid;
- border-top: #d5d59d 1px solid;
- border-left: #d5d59d 1px solid;
- padding: 3px 5px 3px 5px;
- color: #737357;
-}
-
-.PopupTab
-{
- margin-top: 1px;
- border-bottom: #d5d59d 1px solid;
- cursor: pointer;
-}
-
-.PopupTabSelected
-{
- font-weight: bold;
- cursor: default;
- padding-top: 4px;
- border-bottom: #f1f1e3 1px solid;
- background-color: #f1f1e3;
-}
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc.js b/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc.js
deleted file mode 100644
index 443145c9..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-(function(){function y(a){if(!a)throw"Languages-by-groups list are required for construct selectbox";var c=[],d="",f;for(f in a)for(var g in a[f]){var h=a[f][g];"en_US"==h?d=h:c.push(h)}c.sort();d&&c.unshift(d);return{getCurrentLangGroup:function(c){a:{for(var d in a)for(var f in a[d])if(f.toUpperCase()===c.toUpperCase()){c=d;break a}c=""}return c},setLangList:function(){var c={},d;for(d in a)for(var f in a[d])c[a[d][f]]=f;return c}()}}var e=function(){var a=function(a,b,f){var f=f||{},g=f.expires;
-if("number"==typeof g&&g){var h=new Date;h.setTime(h.getTime()+1E3*g);g=f.expires=h}g&&g.toUTCString&&(f.expires=g.toUTCString());var b=encodeURIComponent(b),a=a+"="+b,e;for(e in f)b=f[e],a+="; "+e,!0!==b&&(a+="="+b);document.cookie=a};return{postMessage:{init:function(a){window.addEventListener?window.addEventListener("message",a,!1):window.attachEvent("onmessage",a)},send:function(a){var b=Object.prototype.toString,f=a.fn||null,g=a.id||"",e=a.target||window,i=a.message||{id:g};a.message&&"[object Object]"==
-b.call(a.message)&&(a.message.id||(a.message.id=g),i=a.message);a=window.JSON.stringify(i,f);e.postMessage(a,"*")},unbindHandler:function(a){window.removeEventListener?window.removeEventListener("message",a,!1):window.detachEvent("onmessage",a)}},hash:{create:function(){},parse:function(){}},cookie:{set:a,get:function(a){return(a=document.cookie.match(RegExp("(?:^|; )"+a.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,"\\$1")+"=([^;]*)")))?decodeURIComponent(a[1]):void 0},remove:function(c){a(c,"",{expires:-1})}},
-misc:{findFocusable:function(a){var b=null;a&&(b=a.find("a[href], area[href], input, select, textarea, button, *[tabindex], *[contenteditable]"));return b},isVisible:function(a){return!(0===a.offsetWidth||0==a.offsetHeight||"none"===(document.defaultView&&document.defaultView.getComputedStyle?document.defaultView.getComputedStyle(a,null).display:a.currentStyle?a.currentStyle.display:a.style.display))},hasClass:function(a,b){return!(!a.className||!a.className.match(RegExp("(\\s|^)"+b+"(\\s|$)")))}}}}(),
-a=a||{};a.TextAreaNumber=null;a.load=!0;a.cmd={SpellTab:"spell",Thesaurus:"thes",GrammTab:"grammar"};a.dialog=null;a.optionNode=null;a.selectNode=null;a.grammerSuggest=null;a.textNode={};a.iframeMain=null;a.dataTemp="";a.div_overlay=null;a.textNodeInfo={};a.selectNode={};a.selectNodeResponce={};a.langList=null;a.langSelectbox=null;a.banner="";a.show_grammar=null;a.div_overlay_no_check=null;a.targetFromFrame={};a.onLoadOverlay=null;a.LocalizationComing={};a.OverlayPlace=null;a.LocalizationButton={ChangeTo:{instance:null,
-text:"Change to"},ChangeAll:{instance:null,text:"Change All"},IgnoreWord:{instance:null,text:"Ignore word"},IgnoreAllWords:{instance:null,text:"Ignore all words"},Options:{instance:null,text:"Options",optionsDialog:{instance:null}},AddWord:{instance:null,text:"Add word"},FinishChecking:{instance:null,text:"Finish Checking"}};a.LocalizationLabel={ChangeTo:{instance:null,text:"Change to"},Suggestions:{instance:null,text:"Suggestions"}};var z=function(b){var c,d;for(d in b)c=b[d].instance.getElement().getFirst()||
-b[d].instance.getElement(),c.setText(a.LocalizationComing[d])},A=function(b){for(var c in b){if(!b[c].instance.setLabel)break;b[c].instance.setLabel(a.LocalizationComing[c])}},j,q;a.framesetHtml=function(b){return"<iframe id="+a.iframeNumber+"_"+b+' frameborder="0" allowtransparency="1" style="width:100%;border: 1px solid #AEB3B9;overflow: auto;background:#fff; border-radius: 3px;"></iframe>'};a.setIframe=function(b,c){var d;d=a.framesetHtml(c);var f=a.iframeNumber+"_"+c;b.getElement().setHtml(d);
-d=document.getElementById(f);d=d.contentWindow?d.contentWindow:d.contentDocument.document?d.contentDocument.document:d.contentDocument;d.document.open();d.document.write('<!DOCTYPE html><html><head><meta charset="UTF-8"><title>iframe</title><style>html,body{margin: 0;height: 100%;font: 13px/1.555 "Trebuchet MS", sans-serif;}a{color: #888;font-weight: bold;text-decoration: none;border-bottom: 1px solid #888;}.main-box {color:#252525;padding: 3px 5px;text-align: justify;}.main-box p{margin: 0 0 14px;}.main-box .cerr{color: #f00000;border-bottom-color: #f00000;}</style></head><body><div id="content" class="main-box"></div><iframe src="" frameborder="0" id="spelltext" name="spelltext" style="display:none; width: 100%" ></iframe><iframe src="" frameborder="0" id="loadsuggestfirst" name="loadsuggestfirst" style="display:none; width: 100%" ></iframe><iframe src="" frameborder="0" id="loadspellsuggestall" name="loadspellsuggestall" style="display:none; width: 100%" ></iframe><iframe src="" frameborder="0" id="loadOptionsForm" name="loadOptionsForm" style="display:none; width: 100%" ></iframe><script>(function(window) {var ManagerPostMessage = function() {var _init = function(handler) {if (document.addEventListener) {window.addEventListener("message", handler, false);} else {window.attachEvent("onmessage", handler);};};var _sendCmd = function(o) {var str,type = Object.prototype.toString,fn = o.fn || null,id = o.id || "",target = o.target || window,message = o.message || { "id": id };if (o.message && type.call(o.message) == "[object Object]") {(o.message["id"]) ? o.message["id"] : o.message["id"] = id;message = o.message;};str = JSON.stringify(message, fn);target.postMessage(str, "*");};return {init: _init,send: _sendCmd};};var manageMessageTmp = new ManagerPostMessage;var appString = (function(){var spell = parent.CKEDITOR.config.wsc.DefaultParams.scriptPath;var serverUrl = parent.CKEDITOR.config.wsc.DefaultParams.serviceHost;return serverUrl + spell;})();function loadScript(src, callback) {var scriptTag = document.createElement("script");scriptTag.type = "text/javascript";callback ? callback : callback = function() {};if(scriptTag.readyState) {scriptTag.onreadystatechange = function() {if (scriptTag.readyState == "loaded" ||scriptTag.readyState == "complete") {scriptTag.onreadystatechange = null;setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);callback();}};}else{scriptTag.onload = function() {setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);callback();};};scriptTag.src = src;document.getElementsByTagName("head")[0].appendChild(scriptTag);};window.onload = function(){loadScript(appString, function(){manageMessageTmp.send({"id": "iframeOnload","target": window.parent});});}})(this);<\/script></body></html>');
-d.document.close()};a.setCurrentIframe=function(b){a.setIframe(a.dialog._.contents[b].Content,b)};a.setHeightBannerFrame=function(){var b=a.dialog.getContentElement("SpellTab","banner").getElement(),c=a.dialog.getContentElement("GrammTab","banner").getElement(),d=a.dialog.getContentElement("Thesaurus","banner").getElement();b.setStyle("height","90px");c.setStyle("height","90px");d.setStyle("height","90px")};a.setHeightFrame=function(){document.getElementById(a.iframeNumber+"_"+a.dialog._.currentTabId).style.height=
-"240px"};a.sendData=function(b){var c=b._.currentTabId,d=b._.contents[c].Content,f,g;a.setIframe(d,c);var e=function(e){e=e||window.event;e.data.getTarget().is("a")&&c!=b._.currentTabId&&(c=b._.currentTabId,d=b._.contents[c].Content,f=a.iframeNumber+"_"+c,a.div_overlay.setEnable(),d.getElement().getChildCount()?u(a.targetFromFrame[f],a.cmd[c]):(a.setIframe(d,c),g=document.getElementById(f),a.targetFromFrame[f]=g.contentWindow))};b.parts.tabs.removeListener("click",e);b.parts.tabs.on("click",e)};a.buildSelectLang=
-function(a){var c=new CKEDITOR.dom.element("div"),d=new CKEDITOR.dom.element("select"),a="wscLang"+a;c.addClass("cke_dialog_ui_input_select");c.setAttribute("role","presentation");c.setStyles({height:"auto",position:"absolute",right:"0",top:"-1px",width:"160px","white-space":"normal"});d.setAttribute("id",a);d.addClass("cke_dialog_ui_input_select");d.setStyles({width:"160px"});c.append(d);return c};a.buildOptionLang=function(b,c){var d=document.getElementById("wscLang"+c),f=document.createDocumentFragment(),
-g,e,i=[];if(0===d.options.length){for(g in b)i.push([g,b[g]]);i.sort();for(var k=0;k<i.length;k++)g=document.createElement("option"),g.setAttribute("value",i[k][1]),e=document.createTextNode(i[k][0]),g.appendChild(e),i[k][1]==a.selectingLang&&g.setAttribute("selected","selected"),f.appendChild(g);d.appendChild(f)}};a.buildOptionSynonyms=function(b){b=a.selectNodeResponce[b];a.selectNode.synonyms.clear();for(var c=0;c<b.length;c++)a.selectNode.synonyms.add(b[c],b[c]);a.selectNode.synonyms.getInputElement().$.firstChild.selected=
-!0;a.textNode.Thesaurus.setValue(a.selectNode.synonyms.getInputElement().getValue())};var r=function(a){var c=document,d=a.target||c.body,f=a.id||"overlayBlock",e=a.opacity||"0.9",a=a.background||"#f1f1f1",h=c.getElementById(f),i=h||c.createElement("div");i.style.cssText="position: absolute;top:30px;bottom:41px;left:1px;right:1px;z-index: 10020;padding:0;margin:0;background:"+a+";opacity: "+e+";filter: alpha(opacity="+100*e+");display: none;";i.id=f;h||d.appendChild(i);return{setDisable:function(){i.style.display=
-"none"},setEnable:function(){i.style.display="block"}}},B=function(b,c,d){var f=new CKEDITOR.dom.element("div"),e=new CKEDITOR.dom.element("input"),h=new CKEDITOR.dom.element("label"),i="wscGrammerSuggest"+b+"_"+c;f.addClass("cke_dialog_ui_input_radio");f.setAttribute("role","presentation");f.setStyles({width:"97%",padding:"5px","white-space":"normal"});e.setAttributes({type:"radio",value:c,name:"wscGrammerSuggest",id:i});e.setStyles({"float":"left"});e.on("click",function(b){a.textNode.GrammTab.setValue(b.sender.getValue())});
-d&&e.setAttribute("checked",!0);e.addClass("cke_dialog_ui_radio_input");h.appendText(b);h.setAttribute("for",i);h.setStyles({display:"block","line-height":"16px","margin-left":"18px","white-space":"normal"});f.append(e);f.append(h);return f},v=function(a){a=a||"true";null!==a&&"false"==a&&m()},n=function(b){var c=new y(b),b="wscLang"+a.dialog.getParentEditor().name,b=document.getElementById(b),d=a.iframeNumber+"_"+a.dialog._.currentTabId;a.buildOptionLang(c.setLangList,a.dialog.getParentEditor().name);
-w[c.getCurrentLangGroup(a.selectingLang)]();v(a.show_grammar);b.onchange=function(){w[c.getCurrentLangGroup(this.value)]();v(a.show_grammar);a.div_overlay.setEnable();a.selectingLang=this.value;e.postMessage.send({message:{changeLang:a.selectingLang,text:a.dataTemp},target:a.targetFromFrame[d],id:"selectionLang_outer__page"})}},C=function(b){if("no_any_suggestions"==b){b="No suggestions";a.LocalizationButton.ChangeTo.instance.disable();a.LocalizationButton.ChangeAll.instance.disable();var c=function(b){b=
-a.LocalizationButton[b].instance;b.getElement().hasClass("cke_disabled")?b.getElement().setStyle("color","#a0a0a0"):b.disable()};c("ChangeTo");c("ChangeAll")}else a.LocalizationButton.ChangeTo.instance.enable(),a.LocalizationButton.ChangeAll.instance.enable(),a.LocalizationButton.ChangeTo.instance.getElement().setStyle("color","#333"),a.LocalizationButton.ChangeAll.instance.getElement().setStyle("color","#333");return b},E={iframeOnload:function(){a.div_overlay.setEnable();var b=a.dialog._.currentTabId;
-u(a.targetFromFrame[a.iframeNumber+"_"+b],a.cmd[b])},suggestlist:function(b){delete b.id;a.div_overlay_no_check.setDisable();s();n(a.langList);var c=C(b.word),d="";c instanceof Array&&(c=b.word[0]);d=c=c.split(",");q.clear();a.textNode.SpellTab.setValue(d[0]);for(b=0;b<d.length;b++)q.add(d[b],d[b]);l();a.div_overlay.setDisable()},grammerSuggest:function(b){delete b.id;delete b.mocklangs;s();n(a.langList);var c=b.grammSuggest[0];a.grammerSuggest.getElement().setHtml("");a.textNode.GrammTab.reset();
-a.textNode.GrammTab.setValue(c);a.textNodeInfo.GrammTab.getElement().setHtml("");a.textNodeInfo.GrammTab.getElement().setText(b.info);for(var b=b.grammSuggest,c=b.length,d=!0,f=0;f<c;f++)a.grammerSuggest.getElement().append(B(b[f],b[f],d)),d=!1;l();a.div_overlay.setDisable()},thesaurusSuggest:function(b){delete b.id;delete b.mocklangs;s();n(a.langList);a.selectNodeResponce=b;a.textNode.Thesaurus.reset();a.selectNode.categories.clear();for(var c in b)a.selectNode.categories.add(c,c);b=a.selectNode.categories.getInputElement().getChildren().$[0].value;
-a.selectNode.categories.getInputElement().getChildren().$[0].selected=!0;a.buildOptionSynonyms(b);l();a.div_overlay.setDisable()},finish:function(b){delete b.id;D();b=a.dialog.getContentElement(a.dialog._.currentTabId,"BlockFinishChecking").getElement();b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.show();a.div_overlay.setDisable()},settext:function(b){delete b.id;a.dialog.getParentEditor().getCommand("checkspell");var c=a.dialog.getParentEditor();try{c.focus()}catch(d){}c.setData(b.text,
-function(){a.dataTemp="";c.unlockSelection();c.fire("saveSnapshot");a.dialog.hide()})},ReplaceText:function(b){delete b.id;a.div_overlay.setEnable();a.dataTemp=b.text;a.selectingLang=b.currentLang;window.setTimeout(function(){try{a.div_overlay.setDisable()}catch(b){}},500);z(a.LocalizationButton);A(a.LocalizationLabel)},options_checkbox_send:function(b){delete b.id;b={osp:e.cookie.get("osp"),udn:e.cookie.get("udn"),cust_dic_ids:a.cust_dic_ids};e.postMessage.send({message:b,target:a.targetFromFrame[a.iframeNumber+
-"_"+a.dialog._.currentTabId],id:"options_outer__page"})},getOptions:function(b){var c=b.DefOptions.udn;a.LocalizationComing=b.DefOptions.localizationButtonsAndText;a.show_grammar=b.show_grammar;a.langList=b.lang;if(a.bnr=b.bannerId){a.setHeightBannerFrame();var d=b.banner;a.dialog.getContentElement(a.dialog._.currentTabId,"banner").getElement().setHtml(d)}else a.setHeightFrame();"undefined"==c&&(a.userDictionaryName?(c=a.userDictionaryName,d={osp:e.cookie.get("osp"),udn:a.userDictionaryName,cust_dic_ids:a.cust_dic_ids,
-id:"options_dic_send",udnCmd:"create"},e.postMessage.send({message:d,target:a.targetFromFrame[void 0]})):c="");e.cookie.set("osp",b.DefOptions.osp);e.cookie.set("udn",c);e.cookie.set("cust_dic_ids",b.DefOptions.cust_dic_ids);e.postMessage.send({id:"giveOptions"})},options_dic_send:function(){var b={osp:e.cookie.get("osp"),udn:e.cookie.get("udn"),cust_dic_ids:a.cust_dic_ids,id:"options_dic_send",udnCmd:e.cookie.get("udnCmd")};e.postMessage.send({message:b,target:a.targetFromFrame[a.iframeNumber+"_"+
-a.dialog._.currentTabId]})},data:function(a){delete a.id},giveOptions:function(){},setOptionsConfirmF:function(){},setOptionsConfirmT:function(){j.setValue("")},clickBusy:function(){a.div_overlay.setEnable()},suggestAllCame:function(){a.div_overlay.setDisable();a.div_overlay_no_check.setDisable()},TextCorrect:function(){n(a.langList)}},x=function(a){a=a||window.event;if((a=window.JSON.parse(a.data))&&a.id)E[a.id](a)},u=function(b,c,d,f){c=c||CKEDITOR.config.wsc_cmd;d=d||a.dataTemp;e.postMessage.send({message:{customerId:a.wsc_customerId,
-text:d,txt_ctrl:a.TextAreaNumber,cmd:c,cust_dic_ids:a.cust_dic_ids,udn:a.userDictionaryName,slang:a.selectingLang,reset_suggest:f||!1},target:b,id:"data_outer__page"});a.div_overlay.setEnable()},w={superset:function(){a.dialog.showPage("Thesaurus");a.dialog.showPage("GrammTab");o()},usual:function(){t();m();o()},rtl:function(){t();m();o()}},F=function(b){var c=new function(a){var b={};return{getCmdByTab:function(c){for(var e in a)b[a[e]]=e;return b[c]}}}(a.cmd);b.selectPage(c.getCmdByTab(CKEDITOR.config.wsc_cmd));
-a.sendData(b)},t=function(){a.dialog.hidePage("Thesaurus")},m=function(){a.dialog.hidePage("GrammTab")},o=function(){a.dialog.showPage("SpellTab")},l=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId,"bottomGroup").getElement();b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.show()},D=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId,"bottomGroup").getElement(),c=document.activeElement,d;b.setStyles({display:"block",position:"absolute",
-left:"-9999px"});setTimeout(function(){b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.hide();a.dialog._.editor.focusManager.currentActive.focusNext();d=e.misc.findFocusable(a.dialog.parts.contents);if(!e.misc.hasClass(c,"cke_dialog_tab")&&!e.misc.hasClass(c,"cke_dialog_contents_body")&&e.misc.isVisible(c))try{c.focus()}catch(f){}else for(var g=0,h;g<d.count();g++)if(h=d.getItem(g),e.misc.isVisible(h.$)){try{h.$.focus()}catch(i){}break}},0)},s=function(){var b=a.dialog.getContentElement(a.dialog._.currentTabId,
-"BlockFinishChecking").getElement(),c=document.activeElement,d;b.setStyles({display:"block",position:"absolute",left:"-9999px"});setTimeout(function(){b.removeStyle("display");b.removeStyle("position");b.removeStyle("left");b.hide();a.dialog._.editor.focusManager.currentActive.focusNext();d=e.misc.findFocusable(a.dialog.parts.contents);if(!e.misc.hasClass(c,"cke_dialog_tab")&&!e.misc.hasClass(c,"cke_dialog_contents_body")&&e.misc.isVisible(c))try{c.focus()}catch(f){}else for(var g=0,h;g<d.count();g++)if(h=
-d.getItem(g),e.misc.isVisible(h.$)){try{h.$.focus()}catch(i){}break}},0)};CKEDITOR.dialog.add("checkspell",function(b){var c=function(){this.getElement().focus();a.div_overlay.setEnable();var c=a.dialog._.currentTabId,f=a.iframeNumber+"_"+c,g=a.textNode[c].getValue(),h=this.getElement().getAttribute("title-cmd");e.postMessage.send({message:{cmd:h,tabId:c,new_word:g},target:a.targetFromFrame[f],id:"cmd_outer__page"});("ChangeTo"==h||"ChangeAll"==h)&&b.fire("saveSnapshot");"FinishChecking"==h&&b.config.wsc_onFinish.call(CKEDITOR.document.getWindow().getFrame())};
-return{title:b.config.wsc_dialogTitle||b.lang.wsc.title,minWidth:560,minHeight:444,buttons:[CKEDITOR.dialog.cancelButton],onLoad:function(){a.dialog=this;t();m();o()},onShow:function(){b.lockSelection(b.getSelection());a.TextAreaNumber="cke_textarea_"+CKEDITOR.currentInstance.name;e.postMessage.init(x);a.dataTemp=CKEDITOR.currentInstance.getData();a.OverlayPlace=a.dialog.parts.tabs.getParent().$;if(CKEDITOR&&CKEDITOR.config){a.wsc_customerId=b.config.wsc_customerId;a.cust_dic_ids=b.config.wsc_customDictionaryIds;
-a.userDictionaryName=b.config.wsc_userDictionaryName;a.defaultLanguage=CKEDITOR.config.defaultLanguage;var c="file:"==document.location.protocol?"http:":document.location.protocol;CKEDITOR.scriptLoader.load(b.config.wsc_customLoaderScript||c+"//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin=fck2&customerid="+a.wsc_customerId+"&cmd=script&doc=wsc&schema=22",function(c){CKEDITOR.config&&CKEDITOR.config.wsc&&CKEDITOR.config.wsc.DefaultParams?(a.serverLocationHash=CKEDITOR.config.wsc.DefaultParams.serviceHost,
-a.logotype=CKEDITOR.config.wsc.DefaultParams.logoPath,a.loadIcon=CKEDITOR.config.wsc.DefaultParams.iconPath,a.loadIconEmptyEditor=CKEDITOR.config.wsc.DefaultParams.iconPathEmptyEditor,a.LangComparer=new CKEDITOR.config.wsc.DefaultParams._SP_FCK_LangCompare):(a.serverLocationHash=DefaultParams.serviceHost,a.logotype=DefaultParams.logoPath,a.loadIcon=DefaultParams.iconPath,a.loadIconEmptyEditor=DefaultParams.iconPathEmptyEditor,a.LangComparer=new _SP_FCK_LangCompare);a.pluginPath=CKEDITOR.getUrl(b.plugins.wsc.path);
-a.iframeNumber=a.TextAreaNumber;a.templatePath=a.pluginPath+"dialogs/tmp.html";a.LangComparer.setDefaulLangCode(a.defaultLanguage);a.currentLang=b.config.wsc_lang||a.LangComparer.getSPLangCode(b.langCode);a.selectingLang=a.currentLang;a.div_overlay=new r({opacity:"1",background:"#fff url("+a.loadIcon+") no-repeat 50% 50%",target:a.OverlayPlace});var d=a.dialog.parts.tabs.getId(),d=CKEDITOR.document.getById(d);d.setStyle("width","97%");d.getElementsByTag("DIV").count()||d.append(a.buildSelectLang(a.dialog.getParentEditor().name));
-a.div_overlay_no_check=new r({opacity:"1",id:"no_check_over",background:"#fff url("+a.loadIconEmptyEditor+") no-repeat 50% 50%",target:a.OverlayPlace});c&&(F(a.dialog),a.dialog.setupContent(a.dialog))})}else a.dialog.hide()},onHide:function(){var c=CKEDITOR.plugins.scayt,f=b.scayt;b.unlockSelection();c&&(f&&c.state[b.name]&&f.setMarkupPaused)&&f.setMarkupPaused(!1);a.dataTemp="";e.postMessage.unbindHandler(x)},contents:[{id:"SpellTab",label:"SpellChecker",accessKey:"S",elements:[{type:"html",id:"banner",
-label:"banner",style:"",html:"<div></div>"},{type:"html",id:"Content",label:"spellContent",html:"",setup:function(b){var b=a.iframeNumber+"_"+b._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"hbox",id:"bottomGroup",style:"width:560px; margin: 0 auto;",widths:["50%","50%"],children:[{type:"hbox",id:"leftCol",align:"left",width:"50%",children:[{type:"vbox",id:"rightCol1",widths:["50%","50%"],children:[{type:"text",id:"text",label:a.LocalizationLabel.ChangeTo.text+
-":",labelLayout:"horizontal",labelStyle:"font: 12px/25px arial, sans-serif;",width:"140px","default":"",onShow:function(){a.textNode.SpellTab=this;a.LocalizationLabel.ChangeTo.instance=this},onHide:function(){this.reset()}},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"text",id:"labelSuggestions",label:a.LocalizationLabel.Suggestions.text+":",onShow:function(){a.LocalizationLabel.Suggestions.instance=this;this.getInputElement().setStyles({display:"block",
-position:"absolute",left:"-9999px"})}},{type:"html",id:"logo",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"left"})}}]},{type:"select",id:"list_of_suggestions",labelStyle:"font: 12px/25px arial, sans-serif;",size:"6",inputStyle:"width: 140px; height: auto;",items:[["loading..."]],onShow:function(){q=
-this},onHide:function(){this.clear()},onChange:function(){a.textNode.SpellTab.setValue(this.getValue())}}]}]}]},{type:"hbox",id:"rightCol",align:"right",width:"50%",children:[{type:"vbox",id:"rightCol_col__left",widths:["50%","50%","50%","50%"],children:[{type:"button",id:"ChangeTo",label:a.LocalizationButton.ChangeTo.text,title:"Change to",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.ChangeTo.instance=this},onClick:c},{type:"button",
-id:"ChangeAll",label:a.LocalizationButton.ChangeAll.text,title:"Change All",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.ChangeAll.instance=this},onClick:c},{type:"button",id:"AddWord",label:a.LocalizationButton.AddWord.text,title:"Add word",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.AddWord.instance=this},onClick:c},{type:"button",id:"FinishChecking",label:a.LocalizationButton.FinishChecking.text,
-title:"Finish Checking",style:"width: 100%;margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.FinishChecking.instance=this},onClick:c}]},{type:"vbox",id:"rightCol_col__right",widths:["50%","50%","50%"],children:[{type:"button",id:"IgnoreWord",label:a.LocalizationButton.IgnoreWord.text,title:"Ignore word",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.IgnoreWord.instance=this},
-onClick:c},{type:"button",id:"IgnoreAllWords",label:a.LocalizationButton.IgnoreAllWords.text,title:"Ignore all words",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id);a.LocalizationButton.IgnoreAllWords.instance=this},onClick:c},{type:"button",id:"option",label:a.LocalizationButton.Options.text,title:"Option",style:"width: 100%;",onLoad:function(){a.LocalizationButton.Options.instance=this;"file:"==document.location.protocol&&this.disable()},onClick:function(){this.getElement().focus();
-"file:"==document.location.protocol?alert("WSC: Options functionality is disabled when runing from file system"):(p=document.activeElement,b.openDialog("options"))}}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().setStyles({display:"block",position:"absolute",left:"-9999px"})},onHide:l,children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",id:"rightCol1",setup:function(){this.getChild()[0].getElement().$.src=
-a.logotype;this.getChild()[0].getElement().getParent().setStyles({"text-align":"center"})},children:[{type:"html",id:"logo",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">'}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"Option_button",label:a.LocalizationButton.Options.text,title:"Option",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",
-this.id);"file:"==document.location.protocol&&this.disable()},onClick:function(){this.getElement().focus();"file:"==document.location.protocol?alert("WSC: Options functionality is disabled when runing from file system"):(p=document.activeElement,b.openDialog("options"))}},{type:"button",id:"FinishChecking",label:a.LocalizationButton.FinishChecking.text,title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]},{id:"GrammTab",
-label:"Grammar",accessKey:"G",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"<div></div>"},{type:"html",id:"Content",label:"GrammarContent",html:"",setup:function(){var b=a.iframeNumber+"_"+a.dialog._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"vbox",id:"bottomGroup",style:"width:560px; margin: 0 auto;",children:[{type:"hbox",id:"leftCol",widths:["66%","34%"],children:[{type:"vbox",children:[{type:"text",id:"text",label:"Change to:",labelLayout:"horizontal",
-labelStyle:"font: 12px/25px arial, sans-serif;",inputStyle:"float: right; width: 200px;","default":"",onShow:function(){a.textNode.GrammTab=this},onHide:function(){this.reset()}},{type:"html",id:"html_text",html:"<div style='min-height: 17px; line-height: 17px; padding: 5px; text-align: left;background: #F1F1F1;color: #595959; white-space: normal!important;'></div>",onShow:function(){a.textNodeInfo.GrammTab=this}},{type:"html",id:"radio",html:"",onShow:function(){a.grammerSuggest=this}}]},{type:"vbox",
-children:[{type:"button",id:"ChangeTo",label:"Change to",title:"Change to",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c},{type:"button",id:"IgnoreWord",label:"Ignore word",title:"Ignore word",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c},{type:"button",id:"IgnoreAllWords",label:"Ignore Problem",title:"Ignore Problem",style:"width: 133px; float: right;",onLoad:function(){this.getElement().setAttribute("title-cmd",
-this.id)},onClick:c},{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 133px; float: right; margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().setStyles({display:"block",position:"absolute",left:"-9999px"})},onHide:l,children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",
-children:[{type:"vbox",id:"rightCol1",children:[{type:"html",id:"logo",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"FinishChecking",label:"Finish Checking",
-title:"Finish Checking",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]},{id:"Thesaurus",label:"Thesaurus",accessKey:"T",elements:[{type:"html",id:"banner",label:"banner",style:"",html:"<div></div>"},{type:"html",id:"Content",label:"spellContent",html:"",setup:function(){var b=a.iframeNumber+"_"+a.dialog._.currentTabId,c=document.getElementById(b);a.targetFromFrame[b]=c.contentWindow}},{type:"vbox",id:"bottomGroup",style:"width:560px; margin: -10px auto; overflow: hidden;",
-children:[{type:"hbox",widths:["75%","25%"],children:[{type:"vbox",children:[{type:"hbox",widths:["65%","35%"],children:[{type:"text",id:"ChangeTo",label:"Change to:",labelLayout:"horizontal",inputStyle:"width: 160px;",labelStyle:"font: 12px/25px arial, sans-serif;","default":"",onShow:function(){a.textNode.Thesaurus=this},onHide:function(){this.reset()}},{type:"button",id:"ChangeTo",label:"Change to",title:"Change to",style:"width: 121px; margin-top: 1px;",onLoad:function(){this.getElement().setAttribute("title-cmd",
-this.id)},onClick:c}]},{type:"hbox",children:[{type:"select",id:"categories",label:"Categories:",labelStyle:"font: 12px/25px arial, sans-serif;",size:"5",inputStyle:"width: 180px; height: auto;",items:[],onShow:function(){a.selectNode.categories=this},onHide:function(){this.clear()},onChange:function(){a.buildOptionSynonyms(this.getValue())}},{type:"select",id:"synonyms",label:"Synonyms:",labelStyle:"font: 12px/25px arial, sans-serif;",size:"5",inputStyle:"width: 180px; height: auto;",items:[],onShow:function(){a.selectNode.synonyms=
-this;a.textNode.Thesaurus.setValue(this.getValue())},onHide:function(){this.clear()},onChange:function(){a.textNode.Thesaurus.setValue(this.getValue())}}]}]},{type:"vbox",width:"120px",style:"margin-top:46px;",children:[{type:"html",id:"logotype",label:"WebSpellChecker.net",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}},
-{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",style:"width: 121px; float: right; margin-top: 9px;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]},{type:"hbox",id:"BlockFinishChecking",style:"width:560px; margin: 0 auto;",widths:["70%","30%"],onShow:function(){this.getElement().setStyles({display:"block",position:"absolute",left:"-9999px"})},children:[{type:"hbox",id:"leftCol",align:"left",width:"70%",children:[{type:"vbox",
-id:"rightCol1",children:[{type:"html",id:"logo",html:'<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',setup:function(){this.getElement().$.src=a.logotype;this.getElement().getParent().setStyles({"text-align":"center"})}}]}]},{type:"hbox",id:"rightCol",align:"right",width:"30%",children:[{type:"vbox",id:"rightCol_col__left",children:[{type:"button",id:"FinishChecking",label:"Finish Checking",title:"Finish Checking",
-style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onClick:c}]}]}]}]}]}});var p=null;CKEDITOR.dialog.add("options",function(){var b=null,c={},d={},f=null,g=null;e.cookie.get("udn");e.cookie.get("osp");var h=function(){g=this.getElement().getAttribute("title-cmd");var a=[];a[0]=d.IgnoreAllCapsWords;a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,"");e.cookie.set("osp",a);e.cookie.set("udnCmd",g?g:"ignore");
-"delete"!=g&&(a="",""!==j.getValue()&&(a=j.getValue()),e.cookie.set("udn",a));e.postMessage.send({id:"options_dic_send"})},i=function(){f.getElement().setHtml(a.LocalizationComing.error);f.getElement().show()};return{title:a.LocalizationComing.Options,minWidth:430,minHeight:130,resizable:CKEDITOR.DIALOG_RESIZE_NONE,contents:[{id:"OptionsTab",label:"Options",accessKey:"O",elements:[{type:"hbox",id:"options_error",children:[{type:"html",style:"display: block;text-align: center;white-space: normal!important; font-size: 12px;color:red",
-html:"<div></div>",onShow:function(){f=this}}]},{type:"vbox",id:"Options_content",children:[{type:"hbox",id:"Options_manager",widths:["52%","48%"],children:[{type:"fieldset",label:"Spell Checking Options",style:"border: none;margin-top: 13px;padding: 10px 0 10px 10px",onShow:function(){this.getInputElement().$.children[0].innerHTML=a.LocalizationComing.SpellCheckingOptions},children:[{type:"vbox",id:"Options_checkbox",children:[{type:"checkbox",id:"IgnoreAllCapsWords",label:"Ignore All-Caps Words",
-labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox",id:"IgnoreWordsNumbers",label:"Ignore Words with Numbers",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox",
-id:"IgnoreMixedCaseWords",label:"Ignore Mixed-Case Words",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=!this.getValue()?0:1}},{type:"checkbox",id:"IgnoreDomainNames",label:"Ignore Domain Names",labelStyle:"margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;",style:"float:left; min-height: 16px;","default":"",onClick:function(){d[this.id]=
-!this.getValue()?0:1}}]}]},{type:"vbox",id:"Options_DictionaryName",children:[{type:"text",id:"DictionaryName",style:"margin-bottom: 10px",label:"Dictionary Name:",labelLayout:"vertical",labelStyle:"font: 12px/25px arial, sans-serif;","default":"",onLoad:function(){j=this;this.setValue(a.userDictionaryName?a.userDictionaryName:(e.cookie.get("udn"),this.getValue()))},onShow:function(){j=this;this.setValue(!e.cookie.get("udn")?this.getValue():e.cookie.get("udn"));this.setLabel(a.LocalizationComing.DictionaryName)},
-onHide:function(){this.reset()}},{type:"hbox",id:"Options_buttons",children:[{type:"vbox",id:"Options_leftCol_col",widths:["50%","50%"],children:[{type:"button",id:"create",label:"Create",title:"Create",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Create)},onClick:h},{type:"button",id:"restore",label:"Restore",title:"Restore",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",
-this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Restore)},onClick:h}]},{type:"vbox",id:"Options_rightCol_col",widths:["50%","50%"],children:[{type:"button",id:"rename",label:"Rename",title:"Rename",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Rename)},onClick:h},{type:"button",id:"delete",label:"Remove",
-title:"Remove",style:"width: 100%;",onLoad:function(){this.getElement().setAttribute("title-cmd",this.id)},onShow:function(){(this.getElement().getFirst()||this.getElement()).setText(a.LocalizationComing.Remove)},onClick:h}]}]}]}]},{type:"hbox",id:"Options_text",children:[{type:"html",style:"text-align: justify;margin-top: 15px;white-space: normal!important; font-size: 12px;color:#777;",html:"<div>"+a.LocalizationComing.OptionsTextIntro+"</div>",onShow:function(){this.getElement().setText(a.LocalizationComing.OptionsTextIntro)}}]}]}]}],
-buttons:[CKEDITOR.dialog.okButton,CKEDITOR.dialog.cancelButton],onOk:function(){var a=[];a[0]=d.IgnoreAllCapsWords;a[1]=d.IgnoreWordsNumbers;a[2]=d.IgnoreMixedCaseWords;a[3]=d.IgnoreDomainNames;a=a.toString().replace(/,/g,"");e.cookie.set("osp",a);e.cookie.set("udn",j.getValue());e.postMessage.send({id:"options_checkbox_send"});f.getElement().hide();f.getElement().setHtml(" ")},onLoad:function(){b=this;c.IgnoreAllCapsWords=b.getContentElement("OptionsTab","IgnoreAllCapsWords");c.IgnoreWordsNumbers=
-b.getContentElement("OptionsTab","IgnoreWordsNumbers");c.IgnoreMixedCaseWords=b.getContentElement("OptionsTab","IgnoreMixedCaseWords");c.IgnoreDomainNames=b.getContentElement("OptionsTab","IgnoreDomainNames")},onShow:function(){e.postMessage.init(i);var b=e.cookie.get("osp").split("");d.IgnoreAllCapsWords=b[0];d.IgnoreWordsNumbers=b[1];d.IgnoreMixedCaseWords=b[2];d.IgnoreDomainNames=b[3];!parseInt(d.IgnoreAllCapsWords,10)?c.IgnoreAllCapsWords.setValue("",!1):c.IgnoreAllCapsWords.setValue("checked",
-!1);!parseInt(d.IgnoreWordsNumbers,10)?c.IgnoreWordsNumbers.setValue("",!1):c.IgnoreWordsNumbers.setValue("checked",!1);!parseInt(d.IgnoreMixedCaseWords,10)?c.IgnoreMixedCaseWords.setValue("",!1):c.IgnoreMixedCaseWords.setValue("checked",!1);!parseInt(d.IgnoreDomainNames,10)?c.IgnoreDomainNames.setValue("",!1):c.IgnoreDomainNames.setValue("checked",!1);d.IgnoreAllCapsWords=!c.IgnoreAllCapsWords.getValue()?0:1;d.IgnoreWordsNumbers=!c.IgnoreWordsNumbers.getValue()?0:1;d.IgnoreMixedCaseWords=!c.IgnoreMixedCaseWords.getValue()?
-0:1;d.IgnoreDomainNames=!c.IgnoreDomainNames.getValue()?0:1;c.IgnoreAllCapsWords.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreAllCapsWords;c.IgnoreWordsNumbers.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreWordsWithNumbers;c.IgnoreMixedCaseWords.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreMixedCaseWords;c.IgnoreDomainNames.getElement().$.lastChild.innerHTML=a.LocalizationComing.IgnoreDomainNames},onHide:function(){e.postMessage.unbindHandler(i);if(p)try{p.focus()}catch(a){}}}});
-CKEDITOR.dialog.on("resize",function(b){var b=b.data,c=b.dialog,d=CKEDITOR.document.getById(a.iframeNumber+"_"+c._.currentTabId);"checkspell"==c._.name&&(a.bnr?d&&d.setSize("height",b.height-310):d&&d.setSize("height",b.height-220))});CKEDITOR.on("dialogDefinition",function(b){if("checkspell"===b.data.name){var c=b.data.definition;a.onLoadOverlay=new r({opacity:"1",background:"#fff",target:c.dialog.parts.tabs.getParent().$});a.onLoadOverlay.setEnable();c.dialog.on("cancel",function(){c.dialog.getParentEditor().config.wsc_onClose.call(this.document.getWindow().getFrame());
-a.div_overlay.setDisable();a.onLoadOverlay.setDisable();return!1},this,null,-1)}})})(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc_ie.js b/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc_ie.js
deleted file mode 100644
index 10487d16..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/plugins/wsc/dialogs/wsc_ie.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-CKEDITOR.dialog.add("checkspell",function(a){function c(a,c){var d=0;return function(){"function"==typeof window.doSpell?("undefined"!=typeof e&&window.clearInterval(e),j(a)):180==d++&&window._cancelOnError(c)}}function j(c){var f=new window._SP_FCK_LangCompare,b=CKEDITOR.getUrl(a.plugins.wsc.path+"dialogs/"),e=b+"tmpFrameset.html";window.gFCKPluginName="wsc";f.setDefaulLangCode(a.config.defaultLanguage);window.doSpell({ctrl:g,lang:a.config.wsc_lang||f.getSPLangCode(a.langCode),intLang:a.config.wsc_uiLang||
-f.getSPLangCode(a.langCode),winType:d,onCancel:function(){c.hide()},onFinish:function(b){a.focus();c.getParentEditor().setData(b.value);c.hide()},staticFrame:e,framesetPath:e,iframePath:b+"ciframe.html",schemaURI:b+"wsc.css",userDictionaryName:a.config.wsc_userDictionaryName,customDictionaryName:a.config.wsc_customDictionaryIds&&a.config.wsc_customDictionaryIds.split(","),domainName:a.config.wsc_domainName});CKEDITOR.document.getById(h).setStyle("display","none");CKEDITOR.document.getById(d).setStyle("display",
-"block")}var b=CKEDITOR.tools.getNextNumber(),d="cke_frame_"+b,g="cke_data_"+b,h="cke_error_"+b,e,b=document.location.protocol||"http:",i=a.lang.wsc.notAvailable,k='<textarea style="display: none" id="'+g+'" rows="10" cols="40"> </textarea><div id="'+h+'" style="display:none;color:red;font-size:16px;font-weight:bold;padding-top:160px;text-align:center;z-index:11;"></div><iframe src="" style="width:100%;background-color:#f1f1e3;" frameborder="0" name="'+d+'" id="'+d+'" allowtransparency="1"></iframe>',
-l=a.config.wsc_customLoaderScript||b+"//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin=fck2&customerid="+a.config.wsc_customerId+"&cmd=script&doc=wsc&schema=22";a.config.wsc_customLoaderScript&&(i+='<p style="color:#000;font-size:11px;font-weight: normal;text-align:center;padding-top:10px">'+a.lang.wsc.errorLoading.replace(/%s/g,a.config.wsc_customLoaderScript)+"</p>");window._cancelOnError=function(c){if("undefined"==typeof window.WSC_Error){CKEDITOR.document.getById(d).setStyle("display",
-"none");var b=CKEDITOR.document.getById(h);b.setStyle("display","block");b.setHtml(c||a.lang.wsc.notAvailable)}};return{title:a.config.wsc_dialogTitle||a.lang.wsc.title,minWidth:485,minHeight:380,buttons:[CKEDITOR.dialog.cancelButton],onShow:function(){var b=this.getContentElement("general","content").getElement();b.setHtml(k);b.getChild(2).setStyle("height",this._.contentSize.height+"px");"function"!=typeof window.doSpell&&CKEDITOR.document.getHead().append(CKEDITOR.document.createElement("script",
-{attributes:{type:"text/javascript",src:l}}));b=a.getData();CKEDITOR.document.getById(g).setValue(b);e=window.setInterval(c(this,i),250)},onHide:function(){window.ooo=void 0;window.int_framsetLoaded=void 0;window.framesetLoaded=void 0;window.is_window_opened=!1},contents:[{id:"general",label:a.config.wsc_dialogTitle||a.lang.wsc.title,padding:0,elements:[{type:"html",id:"content",html:""}]}]}});
-CKEDITOR.dialog.on("resize",function(a){var a=a.data,c=a.dialog;"checkspell"==c._.name&&((c=(c=c.getContentElement("general","content").getElement())&&c.getChild(2))&&c.setSize("height",a.height),c&&c.setSize("width",a.width))}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/ajax.html b/wqflask/wqflask/static/packages/ckeditor/samples/ajax.html
deleted file mode 100644
index 59333eb1..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/ajax.html
+++ /dev/null
@@ -1,82 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Ajax &mdash; CKEditor Sample</title>
- <script src="../ckeditor.js"></script>
- <link rel="stylesheet" href="sample.css">
- <script>
-
- var editor, html = '';
-
- function createEditor() {
- if ( editor )
- return;
-
- // Create a new editor inside the <div id="editor">, setting its value to html
- var config = {};
- editor = CKEDITOR.appendTo( 'editor', config, html );
- }
-
- function removeEditor() {
- if ( !editor )
- return;
-
- // Retrieve the editor contents. In an Ajax application, this data would be
- // sent to the server or used in any other way.
- document.getElementById( 'editorcontents' ).innerHTML = html = editor.getData();
- document.getElementById( 'contents' ).style.display = '';
-
- // Destroy the editor.
- editor.destroy();
- editor = null;
- }
-
- </script>
-</head>
-<body>
- <h1 class="samples">
- <a href="index.html">CKEditor Samples</a> &raquo; Create and Destroy Editor Instances for Ajax Applications
- </h1>
- <div class="description">
- <p>
- This sample shows how to create and destroy CKEditor instances on the fly. After the removal of CKEditor the content created inside the editing
- area will be displayed in a <code>&lt;div&gt;</code> element.
- </p>
- <p>
- For details of how to create this setup check the source code of this sample page
- for JavaScript code responsible for the creation and destruction of a CKEditor instance.
- </p>
- </div>
- <p>Click the buttons to create and remove a CKEditor instance.</p>
- <p>
- <input onclick="createEditor();" type="button" value="Create Editor">
- <input onclick="removeEditor();" type="button" value="Remove Editor">
- </p>
- <!-- This div will hold the editor. -->
- <div id="editor">
- </div>
- <div id="contents" style="display: none">
- <p>
- Edited Contents:
- </p>
- <!-- This div will be used to display the editor contents. -->
- <div id="editorcontents">
- </div>
- </div>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/api.html b/wqflask/wqflask/static/packages/ckeditor/samples/api.html
deleted file mode 100644
index a957eed0..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/api.html
+++ /dev/null
@@ -1,207 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>API Usage &mdash; CKEditor Sample</title>
- <script src="../ckeditor.js"></script>
- <link href="sample.css" rel="stylesheet">
- <script>
-
-// The instanceReady event is fired, when an instance of CKEditor has finished
-// its initialization.
-CKEDITOR.on( 'instanceReady', function( ev ) {
- // Show the editor name and description in the browser status bar.
- document.getElementById( 'eMessage' ).innerHTML = 'Instance <code>' + ev.editor.name + '<\/code> loaded.';
-
- // Show this sample buttons.
- document.getElementById( 'eButtons' ).style.display = 'block';
-});
-
-function InsertHTML() {
- // Get the editor instance that we want to interact with.
- var editor = CKEDITOR.instances.editor1;
- var value = document.getElementById( 'htmlArea' ).value;
-
- // Check the active editing mode.
- if ( editor.mode == 'wysiwyg' )
- {
- // Insert HTML code.
- // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertHtml
- editor.insertHtml( value );
- }
- else
- alert( 'You must be in WYSIWYG mode!' );
-}
-
-function InsertText() {
- // Get the editor instance that we want to interact with.
- var editor = CKEDITOR.instances.editor1;
- var value = document.getElementById( 'txtArea' ).value;
-
- // Check the active editing mode.
- if ( editor.mode == 'wysiwyg' )
- {
- // Insert as plain text.
- // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-insertText
- editor.insertText( value );
- }
- else
- alert( 'You must be in WYSIWYG mode!' );
-}
-
-function SetContents() {
- // Get the editor instance that we want to interact with.
- var editor = CKEDITOR.instances.editor1;
- var value = document.getElementById( 'htmlArea' ).value;
-
- // Set editor contents (replace current contents).
- // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setData
- editor.setData( value );
-}
-
-function GetContents() {
- // Get the editor instance that you want to interact with.
- var editor = CKEDITOR.instances.editor1;
-
- // Get editor contents
- // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-getData
- alert( editor.getData() );
-}
-
-function ExecuteCommand( commandName ) {
- // Get the editor instance that we want to interact with.
- var editor = CKEDITOR.instances.editor1;
-
- // Check the active editing mode.
- if ( editor.mode == 'wysiwyg' )
- {
- // Execute the command.
- // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-execCommand
- editor.execCommand( commandName );
- }
- else
- alert( 'You must be in WYSIWYG mode!' );
-}
-
-function CheckDirty() {
- // Get the editor instance that we want to interact with.
- var editor = CKEDITOR.instances.editor1;
- // Checks whether the current editor contents present changes when compared
- // to the contents loaded into the editor at startup
- // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-checkDirty
- alert( editor.checkDirty() );
-}
-
-function ResetDirty() {
- // Get the editor instance that we want to interact with.
- var editor = CKEDITOR.instances.editor1;
- // Resets the "dirty state" of the editor (see CheckDirty())
- // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-resetDirty
- editor.resetDirty();
- alert( 'The "IsDirty" status has been reset' );
-}
-
-function Focus() {
- CKEDITOR.instances.editor1.focus();
-}
-
-function onFocus() {
- document.getElementById( 'eMessage' ).innerHTML = '<b>' + this.name + ' is focused </b>';
-}
-
-function onBlur() {
- document.getElementById( 'eMessage' ).innerHTML = this.name + ' lost focus';
-}
-
- </script>
-
-</head>
-<body>
- <h1 class="samples">
- <a href="index.html">CKEditor Samples</a> &raquo; Using CKEditor JavaScript API
- </h1>
- <div class="description">
- <p>
- This sample shows how to use the
- <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.editor">CKEditor JavaScript API</a>
- to interact with the editor at runtime.
- </p>
- <p>
- For details on how to create this setup check the source code of this sample page.
- </p>
- </div>
-
- <!-- This <div> holds alert messages to be display in the sample page. -->
- <div id="alerts">
- <noscript>
- <p>
- <strong>CKEditor requires JavaScript to run</strong>. In a browser with no JavaScript
- support, like yours, you should still see the contents (HTML data) and you should
- be able to edit it normally, without a rich editor interface.
- </p>
- </noscript>
- </div>
- <form action="../../../samples/sample_posteddata.php" method="post">
- <textarea cols="100" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
-
- <script>
- // Replace the <textarea id="editor1"> with an CKEditor instance.
- CKEDITOR.replace( 'editor1', {
- on: {
- focus: onFocus,
- blur: onBlur,
-
- // Check for availability of corresponding plugins.
- pluginsLoaded: function( evt ) {
- var doc = CKEDITOR.document, ed = evt.editor;
- if ( !ed.getCommand( 'bold' ) )
- doc.getById( 'exec-bold' ).hide();
- if ( !ed.getCommand( 'link' ) )
- doc.getById( 'exec-link' ).hide();
- }
- }
- });
- </script>
-
- <p id="eMessage">
- </p>
-
- <div id="eButtons" style="display: none">
- <input id="exec-bold" onclick="ExecuteCommand('bold');" type="button" value="Execute &quot;bold&quot; Command">
- <input id="exec-link" onclick="ExecuteCommand('link');" type="button" value="Execute &quot;link&quot; Command">
- <input onclick="Focus();" type="button" value="Focus">
- <br><br>
- <input onclick="InsertHTML();" type="button" value="Insert HTML">
- <input onclick="SetContents();" type="button" value="Set Editor Contents">
- <input onclick="GetContents();" type="button" value="Get Editor Contents (HTML)">
- <br>
- <textarea cols="100" id="htmlArea" rows="3">&lt;h2&gt;Test&lt;/h2&gt;&lt;p&gt;This is some &lt;a href="/Test1.html"&gt;sample&lt;/a&gt; HTML code.&lt;/p&gt;</textarea>
- <br>
- <br>
- <input onclick="InsertText();" type="button" value="Insert Text">
- <br>
- <textarea cols="100" id="txtArea" rows="3"> First line with some leading whitespaces.
-
-Second line of text preceded by two line breaks.</textarea>
- <br>
- <br>
- <input onclick="CheckDirty();" type="button" value="checkDirty()">
- <input onclick="ResetDirty();" type="button" value="resetDirty()">
- </div>
- </form>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/appendto.html b/wqflask/wqflask/static/packages/ckeditor/samples/appendto.html
deleted file mode 100644
index b8467702..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/appendto.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Append To Page Element Using JavaScript Code &mdash; CKEditor Sample</title>
- <script src="../ckeditor.js"></script>
- <link rel="stylesheet" href="sample.css">
-</head>
-<body>
- <h1 class="samples">
- <a href="index.html">CKEditor Samples</a> &raquo; Append To Page Element Using JavaScript Code
- </h1>
- <div id="section1">
- <div class="description">
- <p>
- The <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR-method-appendTo">CKEDITOR.appendTo()</a></code> method serves to to place editors inside existing DOM elements. Unlike <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR-method-replace">CKEDITOR.replace()</a></code>,
- a target container to be replaced is no longer necessary. A new editor
- instance is inserted directly wherever it is desired.
- </p>
-<pre class="samples">CKEDITOR.appendTo( '<em>container_id</em>',
- { /* Configuration options to be used. */ }
- 'Editor content to be used.'
-);</pre>
- </div>
- <script>
-
- // This call can be placed at any point after the
- // DOM element to append CKEditor to or inside the <head><script>
- // in a window.onload event handler.
-
- // Append a CKEditor instance using the default configuration and the
- // provided content to the <div> element of ID "section1".
- CKEDITOR.appendTo( 'section1',
- null,
- '<p>This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.</p>'
- );
-
- </script>
- </div>
- <br>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/assets/inlineall/logo.png b/wqflask/wqflask/static/packages/ckeditor/samples/assets/inlineall/logo.png
deleted file mode 100644
index b4d5979e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/assets/inlineall/logo.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/assets/outputxhtml/outputxhtml.css b/wqflask/wqflask/static/packages/ckeditor/samples/assets/outputxhtml/outputxhtml.css
deleted file mode 100644
index fa0ff379..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/assets/outputxhtml/outputxhtml.css
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md or http://ckeditor.com/license
- *
- * Styles used by the XHTML 1.1 sample page (xhtml.html).
- */
-
-/**
- * Basic definitions for the editing area.
- */
-body
-{
- font-family: Arial, Verdana, sans-serif;
- font-size: 80%;
- color: #000000;
- background-color: #ffffff;
- padding: 5px;
- margin: 0px;
-}
-
-/**
- * Core styles.
- */
-
-.Bold
-{
- font-weight: bold;
-}
-
-.Italic
-{
- font-style: italic;
-}
-
-.Underline
-{
- text-decoration: underline;
-}
-
-.StrikeThrough
-{
- text-decoration: line-through;
-}
-
-.Subscript
-{
- vertical-align: sub;
- font-size: smaller;
-}
-
-.Superscript
-{
- vertical-align: super;
- font-size: smaller;
-}
-
-/**
- * Font faces.
- */
-
-.FontComic
-{
- font-family: 'Comic Sans MS';
-}
-
-.FontCourier
-{
- font-family: 'Courier New';
-}
-
-.FontTimes
-{
- font-family: 'Times New Roman';
-}
-
-/**
- * Font sizes.
- */
-
-.FontSmaller
-{
- font-size: smaller;
-}
-
-.FontLarger
-{
- font-size: larger;
-}
-
-.FontSmall
-{
- font-size: 8pt;
-}
-
-.FontBig
-{
- font-size: 14pt;
-}
-
-.FontDouble
-{
- font-size: 200%;
-}
-
-/**
- * Font colors.
- */
-.FontColor1
-{
- color: #ff9900;
-}
-
-.FontColor2
-{
- color: #0066cc;
-}
-
-.FontColor3
-{
- color: #ff0000;
-}
-
-.FontColor1BG
-{
- background-color: #ff9900;
-}
-
-.FontColor2BG
-{
- background-color: #0066cc;
-}
-
-.FontColor3BG
-{
- background-color: #ff0000;
-}
-
-/**
- * Indentation.
- */
-
-.Indent1
-{
- margin-left: 40px;
-}
-
-.Indent2
-{
- margin-left: 80px;
-}
-
-.Indent3
-{
- margin-left: 120px;
-}
-
-/**
- * Alignment.
- */
-
-.JustifyLeft
-{
- text-align: left;
-}
-
-.JustifyRight
-{
- text-align: right;
-}
-
-.JustifyCenter
-{
- text-align: center;
-}
-
-.JustifyFull
-{
- text-align: justify;
-}
-
-/**
- * Other.
- */
-
-code
-{
- font-family: courier, monospace;
- background-color: #eeeeee;
- padding-left: 1px;
- padding-right: 1px;
- border: #c0c0c0 1px solid;
-}
-
-kbd
-{
- padding: 0px 1px 0px 1px;
- border-width: 1px 2px 2px 1px;
- border-style: solid;
-}
-
-blockquote
-{
- color: #808080;
-}
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/assets/posteddata.php b/wqflask/wqflask/static/packages/ckeditor/samples/assets/posteddata.php
deleted file mode 100644
index 6b26aae3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/assets/posteddata.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<!DOCTYPE html>
-<?php
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-?>
-<html>
-<head>
- <meta charset="utf-8">
- <title>Sample &mdash; CKEditor</title>
- <link rel="stylesheet" href="sample.css">
-</head>
-<body>
- <h1 class="samples">
- CKEditor &mdash; Posted Data
- </h1>
- <table border="1" cellspacing="0" id="outputSample">
- <colgroup><col width="120"></colgroup>
- <thead>
- <tr>
- <th>Field&nbsp;Name</th>
- <th>Value</th>
- </tr>
- </thead>
-<?php
-
-if (!empty($_POST))
-{
- foreach ( $_POST as $key => $value )
- {
- if ( ( !is_string($value) && !is_numeric($value) ) || !is_string($key) )
- continue;
-
- if ( get_magic_quotes_gpc() )
- $value = htmlspecialchars( stripslashes((string)$value) );
- else
- $value = htmlspecialchars( (string)$value );
-?>
- <tr>
- <th style="vertical-align: top"><?php echo htmlspecialchars( (string)$key ); ?></th>
- <td><pre class="samples"><?php echo $value; ?></pre></td>
- </tr>
- <?php
- }
-}
-?>
- </table>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/assets/sample.jpg b/wqflask/wqflask/static/packages/ckeditor/samples/assets/sample.jpg
deleted file mode 100644
index 9498271c..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/assets/sample.jpg
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/assets/uilanguages/languages.js b/wqflask/wqflask/static/packages/ckeditor/samples/assets/uilanguages/languages.js
deleted file mode 100644
index 3f7ff624..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/assets/uilanguages/languages.js
+++ /dev/null
@@ -1,7 +0,0 @@
-/*
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-var CKEDITOR_LANGS=function(){var c={af:"Afrikaans",ar:"Arabic",bg:"Bulgarian",bn:"Bengali/Bangla",bs:"Bosnian",ca:"Catalan",cs:"Czech",cy:"Welsh",da:"Danish",de:"German",el:"Greek",en:"English","en-au":"English (Australia)","en-ca":"English (Canadian)","en-gb":"English (United Kingdom)",eo:"Esperanto",es:"Spanish",et:"Estonian",eu:"Basque",fa:"Persian",fi:"Finnish",fo:"Faroese",fr:"French","fr-ca":"French (Canada)",gl:"Galician",gu:"Gujarati",he:"Hebrew",hi:"Hindi",hr:"Croatian",hu:"Hungarian",id:"Indonesian",
-is:"Icelandic",it:"Italian",ja:"Japanese",ka:"Georgian",km:"Khmer",ko:"Korean",ku:"Kurdish",lt:"Lithuanian",lv:"Latvian",mk:"Macedonian",mn:"Mongolian",ms:"Malay",nb:"Norwegian Bokmal",nl:"Dutch",no:"Norwegian",pl:"Polish",pt:"Portuguese (Portugal)","pt-br":"Portuguese (Brazil)",ro:"Romanian",ru:"Russian",si:"Sinhala",sk:"Slovak",sq:"Albanian",sl:"Slovenian",sr:"Serbian (Cyrillic)","sr-latn":"Serbian (Latin)",sv:"Swedish",th:"Thai",tr:"Turkish",tt:"Tatar",ug:"Uighur",uk:"Ukrainian",vi:"Vietnamese",
-zh:"Chinese Traditional","zh-cn":"Chinese Simplified"},b=[],a;for(a in CKEDITOR.lang.languages)b.push({code:a,name:c[a]||a});b.sort(function(a,b){return a.name<b.name?-1:1});return b}(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/datafiltering.html b/wqflask/wqflask/static/packages/ckeditor/samples/datafiltering.html
deleted file mode 100644
index 7f2f2a73..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/datafiltering.html
+++ /dev/null
@@ -1,401 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Data Filtering &mdash; CKEditor Sample</title>
- <script src="../ckeditor.js"></script>
- <link rel="stylesheet" href="sample.css">
- <script>
- // Remove advanced tabs for all editors.
- CKEDITOR.config.removeDialogTabs = 'image:advanced;link:advanced;flash:advanced;creatediv:advanced;editdiv:advanced';
- </script>
-</head>
-<body>
- <h1 class="samples">
- <a href="index.html">CKEditor Samples</a> &raquo; Data Filtering and Features Activation
- </h1>
- <div class="description">
- <p>
- This sample page demonstrates the idea of Advanced Content Filter
- (<abbr title="Advanced Content Filter">ACF</abbr>), a sophisticated
- tool that takes control over what kind of data is accepted by the editor and what
- kind of output is produced.
- </p>
- <h2>When and what is being filtered?</h2>
- <p>
- <abbr title="Advanced Content Filter">ACF</abbr> controls
- <strong>every single source of data</strong> that comes to the editor.
- It process both HTML that is inserted manually (i.e. pasted by the user)
- and programmatically like:
- </p>
-<pre class="samples">
-editor.setData( '&lt;p&gt;Hello world!&lt;/p&gt;' );
-</pre>
- <p>
- <abbr title="Advanced Content Filter">ACF</abbr> discards invalid,
- useless HTML tags and attributes so the editor remains "clean" during
- runtime. <abbr title="Advanced Content Filter">ACF</abbr> behaviour
- can be configured and adjusted for a particular case to prevent the
- output HTML (i.e. in CMS systems) from being polluted.
-
- This kind of filtering is a first, client-side line of defense
- against "<a href="http://en.wikipedia.org/wiki/Tag_soup">tag soups</a>",
- the tool that precisely restricts which tags, attributes and styles
- are allowed (desired). When properly configured, <abbr title="Advanced Content Filter">ACF</abbr>
- is an easy and fast way to produce a high-quality, intentionally filtered HTML.
- </p>
-
- <h3>How to configure or disable ACF?</h3>
- <p>
- Advanced Content Filter is enabled by default, working in "automatic mode", yet
- it provides a set of easy rules that allow adjusting filtering rules
- and disabling the entire feature when necessary. The config property
- responsible for this feature is <code><a class="samples"
- href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent">config.allowedContent</a></code>.
- </p>
- <p>
- By "automatic mode" is meant that loaded plugins decide which kind
- of content is enabled and which is not. For example, if the link
- plugin is loaded it implies that <code>&lt;a&gt;</code> tag is
- automatically allowed. Each plugin is given a set
- of predefined <abbr title="Advanced Content Filter">ACF</abbr> rules
- that control the editor until <code><a class="samples"
- href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent">
- config.allowedContent</a></code>
- is defined manually.
- </p>
- <p>
- Let's assume our intention is to restrict the editor to accept (produce) <strong>paragraphs
- only: no attributes, no styles, no other tags</strong>.
- With <abbr title="Advanced Content Filter">ACF</abbr>
- this is very simple. Basically set <code><a class="samples"
- href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent">
- config.allowedContent</a></code> to <code>'p'</code>:
- </p>
-<pre class="samples">
-var editor = CKEDITOR.replace( <em>textarea_id</em>, {
- <strong>allowedContent: 'p'</strong>
-} );
-</pre>
- <p>
- Now try to play with allowed content:
- </p>
-<pre class="samples">
-// Trying to insert disallowed tag and attribute.
-editor.setData( '&lt;p <strong>style="color: red"</strong>&gt;Hello <strong>&lt;em&gt;world&lt;/em&gt;</strong>!&lt;/p&gt;' );
-alert( editor.getData() );
-
-// Filtered data is returned.
-"&lt;p&gt;Hello world!&lt;/p&gt;"
-</pre>
- <p>
- What happened? Since <code>config.allowedContent: 'p'</code> is set the editor assumes
- that only plain <code>&lt;p&gt;</code> are accepted. Nothing more. This is why
- <code>style</code> attribute and <code>&lt;em&gt;</code> tag are gone. The same
- filtering would happen if we pasted disallowed HTML into this editor.
- </p>
- <p>
- This is just a small sample of what <abbr title="Advanced Content Filter">ACF</abbr>
- can do. To know more, please refer to the sample section below and
- <a href="http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter">the official Advanced Content Filter guide</a>.
- </p>
- <p>
- You may, of course, want CKEditor to avoid filtering of any kind.
- To get rid of <abbr title="Advanced Content Filter">ACF</abbr>,
- basically set <code><a class="samples"
- href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent">
- config.allowedContent</a></code> to <code>true</code> like this:
- </p>
-<pre class="samples">
-CKEDITOR.replace( <em>textarea_id</em>, {
- <strong>allowedContent: true</strong>
-} );
-</pre>
-
- <h2>Beyond data flow: Features activation</h2>
- <p>
- <abbr title="Advanced Content Filter">ACF</abbr> is far more than
- <abbr title="Input/Output">I/O</abbr> control: the entire
- <abbr title="User Interface">UI</abbr> of the editor is adjusted to what
- filters restrict. For example: if <code>&lt;a&gt;</code> tag is
- <strong>disallowed</strong>
- by <abbr title="Advanced Content Filter">ACF</abbr>,
- then accordingly <code>link</code> command, toolbar button and link dialog
- are also disabled. Editor is smart: it knows which features must be
- removed from the interface to match filtering rules.
- </p>
- <p>
- CKEditor can be far more specific. If <code>&lt;a&gt;</code> tag is
- <strong>allowed</strong> by filtering rules to be used but it is restricted
- to have only one attribute (<code>href</code>)
- <code>config.allowedContent = 'a[!href]'</code>, then
- "Target" tab of the link dialog is automatically disabled as <code>target</code>
- attribute isn't included in <abbr title="Advanced Content Filter">ACF</abbr> rules
- for <code>&lt;a&gt;</code>. This behaviour applies to dialog fields, context
- menus and toolbar buttons.
- </p>
-
- <h2>Sample configurations</h2>
- <p>
- There are several editor instances below that present different
- <abbr title="Advanced Content Filter">ACF</abbr> setups. <strong>All of them,
- except the last inline instance, share the same HTML content</strong> to visualize
- how different filtering rules affect the same input data.
- </p>
- </div>
-
- <div>
- <label for="editor1">
- Editor 1:
- </label>
- <div class="description">
- <p>
- This editor is using default configuration ("automatic mode"). It means that
- <code><a class="samples"
- href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent">
- config.allowedContent</a></code> is defined by loaded plugins.
- Each plugin extends filtering rules to make it's own associated content
- available for the user.
- </p>
- </div>
- <textarea cols="80" id="editor1" name="editor1" rows="10">
- &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
- </textarea>
-
- <script>
-
- CKEDITOR.replace( 'editor1' );
-
- </script>
- </div>
-
- <br>
-
- <div>
- <label for="editor2">
- Editor 2:
- </label>
- <div class="description">
- <p>
- This editor is using a custom configuration for
- <abbr title="Advanced Content Filter">ACF</abbr>:
- </p>
-<pre class="samples">
-CKEDITOR.replace( 'editor2', {
- allowedContent:
- 'h1 h2 h3 p blockquote strong em;' +
- 'a[!href];' +
- 'img(left,right)[!src,alt,width,height];' +
- 'table tr th td caption;' +
- 'span{!font-family};' +'
- 'span{!color};' +
- 'span(!marker);' +
- 'del ins'
-} );
-</pre>
- <p>
- The following rules may require additional explanation:
- </p>
- <ul>
- <li>
- <code>h1 h2 h3 p blockquote strong em</code> - These tags
- are accepted by the editor. Any tag attributes will be discarded.
- </li>
- <li>
- <code>a[!href]</code> - <code>href</code> attribute is obligatory
- for <code>&lt;a&gt;</code> tag. Tags without this attribute
- are disarded. No other attribute will be accepted.
- </li>
- <li>
- <code>img(left,right)[!src,alt,width,height]</code> - <code>src</code>
- attribute is obligatory for <code>&lt;img&gt;</code> tag.
- <code>alt</code>, <code>width</code>, <code>height</code>
- and <code>class</code> attributes are accepted but
- <code>class</code> must be either <code>class="left"</code>
- or <code>class="right"</code>
- </li>
- <li>
- <code>table tr th td caption</code> - These tags
- are accepted by the editor. Any tag attributes will be discarded.
- </li>
- <li>
- <code>span{!font-family}</code>, <code>span{!color}</code>,
- <code>span(!marker)</code> - <code>&lt;span&gt;</code> tags
- will be accepted if either <code>font-family</code> or
- <code>color</code> style is set or <code>class="marker"</code>
- is present.
- </li>
- <li>
- <code>del ins</code> - These tags
- are accepted by the editor. Any tag attributes will be discarded.
- </li>
- </ul>
- <p>
- Please note that <strong><abbr title="User Interface">UI</abbr> of the
- editor is different</strong>. It's a response to what happened to the filters.
- Since <code>text-align</code> isn't allowed, the align toolbar is gone.
- The same thing happened to subscript/superscript, strike, underline
- (<code>&lt;u&gt;</code>, <code>&lt;sub&gt;</code>, <code>&lt;sup&gt;</code>
- are disallowed by <code><a class="samples"
- href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-allowedContent">
- config.allowedContent</a></code>) and many other buttons.
- </p>
- </div>
- <textarea cols="80" id="editor2" name="editor2" rows="10">
- &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
- </textarea>
- <script>
-
- CKEDITOR.replace( 'editor2', {
- allowedContent:
- 'h1 h2 h3 p blockquote strong em;' +
- 'a[!href];' +
- 'img(left,right)[!src,alt,width,height];' +
- 'table tr th td caption;' +
- 'span{!font-family};' +
- 'span{!color};' +
- 'span(!marker);' +
- 'del ins'
- } );
-
- </script>
- </div>
-
- <br>
-
- <div>
- <label for="editor3">
- Editor 3:
- </label>
- <div class="description">
- <p>
- This editor is using a custom configuration for
- <abbr title="Advanced Content Filter">ACF</abbr>.
- Note that filters can be configured as an object literal
- as an alternative to a string-based definition.
- </p>
-<pre class="samples">
-CKEDITOR.replace( 'editor3', {
- allowedContent: {
- 'b i ul ol big small': true,
- 'h1 h2 h3 p blockquote li': {
- styles: 'text-align'
- },
- a: { attributes: '!href,target' },
- img: {
- attributes: '!src,alt',
- styles: 'width,height',
- classes: 'left,right'
- }
- }
-} );
-</pre>
- </div>
- <textarea cols="80" id="editor3" name="editor3" rows="10">
- &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
- </textarea>
- <script>
-
- CKEDITOR.replace( 'editor3', {
- allowedContent: {
- 'b i ul ol big small': true,
- 'h1 h2 h3 p blockquote li': {
- styles: 'text-align'
- },
- a: { attributes: '!href,target' },
- img: {
- attributes: '!src,alt',
- styles: 'width,height',
- classes: 'left,right'
- }
- }
- } );
-
- </script>
- </div>
-
- <br>
-
- <div>
- <label for="editor4">
- Editor 4:
- </label>
- <div class="description">
- <p>
- This editor is using a custom set of plugins and buttons.
- </p>
-<pre class="samples">
-CKEDITOR.replace( 'editor4', {
- removePlugins: 'bidi,font,forms,flash,horizontalrule,iframe,justify,table,tabletools,smiley',
- removeButtons: 'Anchor,Underline,Strike,Subscript,Superscript,Image',
- format_tags: 'p;h1;h2;h3;pre;address'
-} );
-</pre>
- <p>
- As you can see, removing plugins and buttons implies filtering.
- Several tags are not allowed in the editor because there's no
- plugin/button that is responsible for creating and editing this
- kind of content (for example: the image is missing because
- of <code>removeButtons: 'Image'</code>). The conclusion is that
- <abbr title="Advanced Content Filter">ACF</abbr> works "backwards"
- as well: <strong>modifying <abbr title="User Interface">UI</abbr>
- elements is changing allowed content rules</strong>.
- </p>
- </div>
- <textarea cols="80" id="editor4" name="editor4" rows="10">
- &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
- </textarea>
- <script>
-
- CKEDITOR.replace( 'editor4', {
- removePlugins: 'bidi,div,font,forms,flash,horizontalrule,iframe,justify,table,tabletools,smiley',
- removeButtons: 'Anchor,Underline,Strike,Subscript,Superscript,Image',
- format_tags: 'p;h1;h2;h3;pre;address'
- } );
-
- </script>
- </div>
-
- <br>
-
- <div>
- <label for="editor5">
- Editor 5:
- </label>
- <div class="description">
- <p>
- This editor is built on editable <code>&lt;h1&gt;</code> element.
- <abbr title="Advanced Content Filter">ACF</abbr> takes care of
- what can be included in <code>&lt;h1&gt;</code>. Note that there
- are no block styles in Styles combo. Also why lists, indentation,
- blockquote, div, form and other buttons are missing.
- </p>
- <p>
- <abbr title="Advanced Content Filter">ACF</abbr> makes sure that
- no disallowed tags will come to <code>&lt;h1&gt;</code> so the final
- markup is valid. If the user tried to paste some invalid HTML
- into this editor (let's say a list), it would be automatically
- converted into plain text.
- </p>
- </div>
- <h1 id="editor5" contenteditable="true">
- <em>Apollo 11</em> was the spaceflight that landed the first humans, Americans <a href="http://en.wikipedia.org/wiki/Neil_Armstrong" title="Neil Armstrong">Neil Armstrong</a> and <a href="http://en.wikipedia.org/wiki/Buzz_Aldrin" title="Buzz Aldrin">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC.
- </h1>
- </div>
-
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/divreplace.html b/wqflask/wqflask/static/packages/ckeditor/samples/divreplace.html
deleted file mode 100644
index 873c8c2e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/divreplace.html
+++ /dev/null
@@ -1,141 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Replace DIV &mdash; CKEditor Sample</title>
- <script src="../ckeditor.js"></script>
- <link href="sample.css" rel="stylesheet">
- <style>
-
- div.editable
- {
- border: solid 2px transparent;
- padding-left: 15px;
- padding-right: 15px;
- }
-
- div.editable:hover
- {
- border-color: black;
- }
-
- </style>
- <script>
-
- // Uncomment the following code to test the "Timeout Loading Method".
- // CKEDITOR.loadFullCoreTimeout = 5;
-
- window.onload = function() {
- // Listen to the double click event.
- if ( window.addEventListener )
- document.body.addEventListener( 'dblclick', onDoubleClick, false );
- else if ( window.attachEvent )
- document.body.attachEvent( 'ondblclick', onDoubleClick );
-
- };
-
- function onDoubleClick( ev ) {
- // Get the element which fired the event. This is not necessarily the
- // element to which the event has been attached.
- var element = ev.target || ev.srcElement;
-
- // Find out the div that holds this element.
- var name;
-
- do {
- element = element.parentNode;
- }
- while ( element && ( name = element.nodeName.toLowerCase() ) &&
- ( name != 'div' || element.className.indexOf( 'editable' ) == -1 ) && name != 'body' );
-
- if ( name == 'div' && element.className.indexOf( 'editable' ) != -1 )
- replaceDiv( element );
- }
-
- var editor;
-
- function replaceDiv( div ) {
- if ( editor )
- editor.destroy();
-
- editor = CKEDITOR.replace( div );
- }
-
- </script>
-</head>
-<body>
- <h1 class="samples">
- <a href="index.html">CKEditor Samples</a> &raquo; Replace DIV with CKEditor on the Fly
- </h1>
- <div class="description">
- <p>
- This sample shows how to automatically replace <code>&lt;div&gt;</code> elements
- with a CKEditor instance on the fly, following user's doubleclick. The content
- that was previously placed inside the <code>&lt;div&gt;</code> element will now
- be moved into CKEditor editing area.
- </p>
- <p>
- For details on how to create this setup check the source code of this sample page.
- </p>
- </div>
- <p>
- Double-click any of the following <code>&lt;div&gt;</code> elements to transform them into
- editor instances.
- </p>
- <div class="editable">
- <h3>
- Part 1
- </h3>
- <p>
- Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi
- semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna
- rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla
- nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce
- eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus.
- </p>
- </div>
- <div class="editable">
- <h3>
- Part 2
- </h3>
- <p>
- Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi
- semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna
- rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla
- nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce
- eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus.
- </p>
- <p>
- Donec velit. Mauris massa. Vestibulum non nulla. Nam suscipit arcu nec elit. Phasellus
- sollicitudin iaculis ante. Ut non mauris et sapien tincidunt adipiscing. Vestibulum
- vitae leo. Suspendisse nec mi tristique nulla laoreet vulputate.
- </p>
- </div>
- <div class="editable">
- <h3>
- Part 3
- </h3>
- <p>
- Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras et ipsum quis mi
- semper accumsan. Integer pretium dui id massa. Suspendisse in nisl sit amet urna
- rutrum imperdiet. Nulla eu tellus. Donec ante nisi, ullamcorper quis, fringilla
- nec, sagittis eleifend, pede. Nulla commodo interdum massa. Donec id metus. Fusce
- eu ipsum. Suspendisse auctor. Phasellus fermentum porttitor risus.
- </p>
- </div>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/index.html b/wqflask/wqflask/static/packages/ckeditor/samples/index.html
deleted file mode 100644
index 09e08bde..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/index.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>CKEditor Samples</title>
- <link rel="stylesheet" href="sample.css">
-</head>
-<body>
- <h1 class="samples">
- CKEditor Samples
- </h1>
- <div class="twoColumns">
- <div class="twoColumnsLeft">
- <h2 class="samples">
- Basic Samples
- </h2>
- <dl class="samples">
- <dt><a class="samples" href="replacebyclass.html">Replace textarea elements by class name</a></dt>
- <dd>Automatic replacement of all textarea elements of a given class with a CKEditor instance.</dd>
-
- <dt><a class="samples" href="replacebycode.html">Replace textarea elements by code</a></dt>
- <dd>Replacement of textarea elements with CKEditor instances by using a JavaScript call.</dd>
-
- <dt><a class="samples" href="jquery.html">Create editors with jQuery</a></dt>
- <dd>Creating standard and inline CKEditor instances with jQuery adapter.</dd>
- </dl>
-
- <h2 class="samples">
- Basic Customization
- </h2>
- <dl class="samples">
- <dt><a class="samples" href="uicolor.html">User Interface color</a></dt>
- <dd>Changing CKEditor User Interface color and adding a toolbar button that lets the user set the UI color.</dd>
-
- <dt><a class="samples" href="uilanguages.html">User Interface languages</a></dt>
- <dd>Changing CKEditor User Interface language and adding a drop-down list that lets the user choose the UI language.</dd>
- </dl>
-
-
- <h2 class="samples">Plugins</h2>
-<dl class="samples">
-<dt><a class="samples" href="plugins/magicline/magicline.html">Magicline plugin</a></dt>
-<dd>Using the Magicline plugin to access difficult focus spaces.</dd>
-
-<dt><a class="samples" href="plugins/wysiwygarea/fullpage.html">Full page support</a></dt>
-<dd>CKEditor inserted with a JavaScript call and used to edit the whole page from &lt;html&gt; to &lt;/html&gt;.</dd>
-</dl>
- </div>
- <div class="twoColumnsRight">
- <h2 class="samples">
- Inline Editing
- </h2>
- <dl class="samples">
- <dt><a class="samples" href="inlineall.html">Massive inline editor creation</a></dt>
- <dd>Turn all elements with <code>contentEditable = true</code> attribute into inline editors.</dd>
-
- <dt><a class="samples" href="inlinebycode.html">Convert element into an inline editor by code</a></dt>
- <dd>Conversion of DOM elements into inline CKEditor instances by using a JavaScript call.</dd>
-
- <dt><a class="samples" href="inlinetextarea.html">Replace textarea with inline editor</a> <span class="new">New!</span></dt>
- <dd>A form with a textarea that is replaced by an inline editor at runtime.</dd>
-
-
- </dl>
-
- <h2 class="samples">
- Advanced Samples
- </h2>
- <dl class="samples">
- <dt><a class="samples" href="datafiltering.html">Data filtering and features activation</a> <span class="new">New!</span></dt>
- <dd>Data filtering and automatic features activation basing on configuration.</dd>
-
- <dt><a class="samples" href="divreplace.html">Replace DIV elements on the fly</a></dt>
- <dd>Transforming a <code>div</code> element into an instance of CKEditor with a mouse click.</dd>
-
- <dt><a class="samples" href="appendto.html">Append editor instances</a></dt>
- <dd>Appending editor instances to existing DOM elements.</dd>
-
- <dt><a class="samples" href="ajax.html">Create and destroy editor instances for Ajax applications</a></dt>
- <dd>Creating and destroying CKEditor instances on the fly and saving the contents entered into the editor window.</dd>
-
- <dt><a class="samples" href="api.html">Basic usage of the API</a></dt>
- <dd>Using the CKEditor JavaScript API to interact with the editor at runtime.</dd>
-
- <dt><a class="samples" href="xhtmlstyle.html">XHTML-compliant style</a></dt>
- <dd>Configuring CKEditor to produce XHTML 1.1 compliant attributes and styles.</dd>
-
- <dt><a class="samples" href="readonly.html">Read-only mode</a></dt>
- <dd>Using the readOnly API to block introducing changes to the editor contents.</dd>
-
- <dt><a class="samples" href="tabindex.html">"Tab" key-based navigation</a></dt>
- <dd>Navigating among editor instances with tab key.</dd>
-
-
-
-<dt><a class="samples" href="plugins/dialog/dialog.html">Using the JavaScript API to customize dialog windows</a></dt>
-<dd>Using the dialog windows API to customize dialog windows without changing the original editor code.</dd>
-
-<dt><a class="samples" href="plugins/enterkey/enterkey.html">Using the &quot;Enter&quot; key in CKEditor</a></dt>
-<dd>Configuring the behavior of <em>Enter</em> and <em>Shift+Enter</em> keys.</dd>
-
-<dt><a class="samples" href="plugins/htmlwriter/outputforflash.html">Output for Flash</a></dt>
-<dd>Configuring CKEditor to produce HTML code that can be used with Adobe Flash.</dd>
-
-<dt><a class="samples" href="plugins/htmlwriter/outputhtml.html">Output HTML</a></dt>
-<dd>Configuring CKEditor to produce legacy HTML 4 code.</dd>
-
-<dt><a class="samples" href="plugins/toolbar/toolbar.html">Toolbar Configurations</a></dt>
-<dd>Configuring CKEditor to display full or custom toolbar layout.</dd>
-
- </dl>
- </div>
- </div>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/inlineall.html b/wqflask/wqflask/static/packages/ckeditor/samples/inlineall.html
deleted file mode 100644
index f82af1db..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/inlineall.html
+++ /dev/null
@@ -1,311 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Massive inline editing &mdash; CKEditor Sample</title>
- <script src="../ckeditor.js"></script>
- <script>
-
- // This code is generally not necessary, but it is here to demonstrate
- // how to customize specific editor instances on the fly. This fits well
- // this demo because we have editable elements (like headers) that
- // require less features.
-
- // The "instanceCreated" event is fired for every editor instance created.
- CKEDITOR.on( 'instanceCreated', function( event ) {
- var editor = event.editor,
- element = editor.element;
-
- // Customize editors for headers and tag list.
- // These editors don't need features like smileys, templates, iframes etc.
- if ( element.is( 'h1', 'h2', 'h3' ) || element.getAttribute( 'id' ) == 'taglist' ) {
- // Customize the editor configurations on "configLoaded" event,
- // which is fired after the configuration file loading and
- // execution. This makes it possible to change the
- // configurations before the editor initialization takes place.
- editor.on( 'configLoaded', function() {
-
- // Remove unnecessary plugins to make the editor simpler.
- editor.config.removePlugins = 'colorbutton,find,flash,font,' +
- 'forms,iframe,image,newpage,removeformat,' +
- 'smiley,specialchar,stylescombo,templates';
-
- // Rearrange the layout of the toolbar.
- editor.config.toolbarGroups = [
- { name: 'editing', groups: [ 'basicstyles', 'links' ] },
- { name: 'undo' },
- { name: 'clipboard', groups: [ 'selection', 'clipboard' ] },
- { name: 'about' }
- ];
- });
- }
- });
-
- </script>
- <link href="sample.css" rel="stylesheet">
- <style>
-
- /* The following styles are just to make the page look nice. */
-
- /* Workaround to show Arial Black in Firefox. */
- @font-face
- {
- font-family: 'arial-black';
- src: local('Arial Black');
- }
-
- *[contenteditable="true"]
- {
- padding: 10px;
- }
-
- #container
- {
- width: 960px;
- margin: 30px auto 0;
- }
-
- #header
- {
- overflow: hidden;
- padding: 0 0 30px;
- border-bottom: 5px solid #05B2D2;
- position: relative;
- }
-
- #headerLeft,
- #headerRight
- {
- width: 49%;
- overflow: hidden;
- }
-
- #headerLeft
- {
- float: left;
- padding: 10px 1px 1px;
- }
-
- #headerLeft h2,
- #headerLeft h3
- {
- text-align: right;
- margin: 0;
- overflow: hidden;
- font-weight: normal;
- }
-
- #headerLeft h2
- {
- font-family: "Arial Black",arial-black;
- font-size: 4.6em;
- line-height: 1.1;
- text-transform: uppercase;
- }
-
- #headerLeft h3
- {
- font-size: 2.3em;
- line-height: 1.1;
- margin: .2em 0 0;
- color: #666;
- }
-
- #headerRight
- {
- float: right;
- padding: 1px;
- }
-
- #headerRight p
- {
- line-height: 1.8;
- text-align: justify;
- margin: 0;
- }
-
- #headerRight p + p
- {
- margin-top: 20px;
- }
-
- #headerRight > div
- {
- padding: 20px;
- margin: 0 0 0 30px;
- font-size: 1.4em;
- color: #666;
- }
-
- #columns
- {
- color: #333;
- overflow: hidden;
- padding: 20px 0;
- }
-
- #columns > div
- {
- float: left;
- width: 33.3%;
- }
-
- #columns #column1 > div
- {
- margin-left: 1px;
- }
-
- #columns #column3 > div
- {
- margin-right: 1px;
- }
-
- #columns > div > div
- {
- margin: 0px 10px;
- padding: 10px 20px;
- }
-
- #columns blockquote
- {
- margin-left: 15px;
- }
-
- #tagLine
- {
- border-top: 5px solid #05B2D2;
- padding-top: 20px;
- }
-
- #taglist {
- display: inline-block;
- margin-left: 20px;
- font-weight: bold;
- margin: 0 0 0 20px;
- }
-
- </style>
-</head>
-<body>
-<div>
- <h1 class="samples"><a href="index.html">CKEditor Samples</a> &raquo; Massive inline editing</h1>
- <div class="description">
- <p>This sample page demonstrates the inline editing feature - CKEditor instances will be created automatically from page elements with <strong>contentEditable</strong> attribute set to value <strong>true</strong>:</p>
- <pre class="samples">&lt;div <strong>contenteditable="true</strong>" &gt; ... &lt;/div&gt;</pre>
- <p>Click inside of any element below to start editing.</p>
- </div>
-</div>
-<div id="container">
- <div id="header">
- <div id="headerLeft">
- <h2 id="sampleTitle" contenteditable="true">
- CKEditor<br> Goes Inline!
- </h2>
- <h3 contenteditable="true">
- Lorem ipsum dolor sit amet dolor duis blandit vestibulum faucibus a, tortor.
- </h3>
- </div>
- <div id="headerRight">
- <div contenteditable="true">
- <p>
- Lorem ipsum dolor sit amet enim. Etiam ullamcorper. Suspendisse a pellentesque dui, non felis. Maecenas malesuada elit lectus felis, malesuada ultricies.
- </p>
- <p>
- Curabitur et ligula. Ut molestie a, ultricies porta urna. Vestibulum commodo volutpat a, convallis ac, laoreet enim. Phasellus fermentum in, dolor. Pellentesque facilisis. Nulla imperdiet sit amet magna. Vestibulum dapibus, mauris nec malesuada fames ac.
- </p>
- </div>
- </div>
- </div>
- <div id="columns">
- <div id="column1">
- <div contenteditable="true">
- <h3>
- Fusce vitae porttitor
- </h3>
- <p>
- <strong>
- Lorem ipsum dolor sit amet dolor. Duis blandit vestibulum faucibus a, tortor.
- </strong>
- </p>
- <p>
- Proin nunc justo felis mollis tincidunt, risus risus pede, posuere cubilia Curae, Nullam euismod, enim. Etiam nibh ultricies dolor ac dignissim erat volutpat. Vivamus fermentum <a href="http://ckeditor.com/">nisl nulla sem in</a> metus. Maecenas wisi. Donec nec erat volutpat.
- </p>
- <blockquote>
- <p>
- Fusce vitae porttitor a, euismod convallis nisl, blandit risus tortor, pretium.
- Vehicula vitae, imperdiet vel, ornare enim vel sodales rutrum
- </p>
- </blockquote>
- <blockquote>
- <p>
- Libero nunc, rhoncus ante ipsum non ipsum. Nunc eleifend pede turpis id sollicitudin fringilla. Phasellus ultrices, velit ac arcu.
- </p>
- </blockquote>
- <p>Pellentesque nunc. Donec suscipit erat. Pellentesque habitant morbi tristique ullamcorper.</p>
- <p><s>Mauris mattis feugiat lectus nec mauris. Nullam vitae ante.</s></p>
- </div>
- </div>
- <div id="column2">
- <div contenteditable="true">
- <h3>
- Integer condimentum sit amet
- </h3>
- <p>
- <strong>Aenean nonummy a, mattis varius. Cras aliquet.</strong>
- Praesent <a href="http://ckeditor.com/">magna non mattis ac, rhoncus nunc</a>, rhoncus eget, cursus pulvinar mollis.</p>
- <p>Proin id nibh. Sed eu libero posuere sed, lectus. Phasellus dui gravida gravida feugiat mattis ac, felis.</p>
- <p>Integer condimentum sit amet, tempor elit odio, a dolor non ante at sapien. Sed ac lectus. Nulla ligula quis eleifend mi, id leo velit pede cursus arcu id nulla ac lectus. Phasellus vestibulum. Nunc viverra enim quis diam.</p>
- </div>
- <div contenteditable="true">
- <h3>
- Praesent wisi accumsan sit amet nibh
- </h3>
- <p>Donec ullamcorper, risus tortor, pretium porttitor. Morbi quam quis lectus non leo.</p>
- <p style="margin-left: 40px; ">Integer faucibus scelerisque. Proin faucibus at, aliquet vulputate, odio at eros. Fusce <a href="http://ckeditor.com/">gravida, erat vitae augue</a>. Fusce urna fringilla gravida.</p>
- <p>In hac habitasse platea dictumst. Praesent wisi accumsan sit amet nibh. Maecenas orci luctus a, lacinia quam sem, posuere commodo, odio condimentum tempor, pede semper risus. Suspendisse pede. In hac habitasse platea dictumst. Nam sed laoreet sit amet erat. Integer.</p>
- </div>
- </div>
- <div id="column3">
- <div contenteditable="true">
- <p>
- <img src="assets/inlineall/logo.png" alt="CKEditor logo" style="float:left">
- </p>
- <p>Quisque justo neque, mattis sed, fermentum ultrices <strong>posuere cubilia Curae</strong>, Vestibulum elit metus, quis placerat ut, lectus. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi.</p>
- <h3>
- Nullam laoreet vel consectetuer tellus suscipit
- </h3>
- <ul>
- <li>Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis.</li>
- <li>Fusce porttitor, nulla quis turpis. Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi.</li>
- <li>Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.</li>
- </ul>
- <p>Quisque justo neque, mattis sed, <a href="http://ckeditor.com/">fermentum ultrices posuere cubilia</a> Curae, Vestibulum elit metus, quis placerat ut, lectus.</p>
- <p>Nullam laoreet vel, consectetuer tellus suscipit ultricies, hendrerit wisi. Ut sagittis, nunc libero, egestas consequat lobortis velit rutrum ut, faucibus turpis. Fusce porttitor, nulla quis turpis.</p>
- <p>Donec odio nec velit ac nunc sit amet, accumsan cursus aliquet. Vestibulum ante sit amet sagittis mi. Sed in nonummy faucibus turpis. Mauris eget tellus. Donec non felis. Nam eget dolor. Vestibulum enim. Donec.</p>
- </div>
- </div>
- </div>
- <div id="tagLine">
- Tags of this article:
- <p id="taglist" contenteditable="true">
- inline, editing, floating, CKEditor
- </p>
- </div>
-</div>
-<div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">
- http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a>
- - Frederico Knabben. All rights reserved.
- </p>
-</div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/inlinebycode.html b/wqflask/wqflask/static/packages/ckeditor/samples/inlinebycode.html
deleted file mode 100644
index 4e475367..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/inlinebycode.html
+++ /dev/null
@@ -1,121 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Inline Editing by Code &mdash; CKEditor Sample</title>
- <script src="../ckeditor.js"></script>
- <link href="sample.css" rel="stylesheet">
- <style>
-
- #editable
- {
- padding: 10px;
- float: left;
- }
-
- </style>
-</head>
-<body>
- <h1 class="samples">
- <a href="index.html">CKEditor Samples</a> &raquo; Inline Editing by Code
- </h1>
- <div class="description">
- <p>
- This sample shows how to create an inline editor instance of CKEditor. It is created
- with a JavaScript call using the following code:
- </p>
-<pre class="samples">
-// This property tells CKEditor to not activate every element with contenteditable=true element.
-CKEDITOR.disableAutoInline = true;
-
-var editor = CKEDITOR.inline( document.getElementById( 'editable' ) );
-</pre>
- <p>
- Note that <code>editable</code> in the code above is the <code>id</code>
- attribute of the <code>&lt;div&gt;</code> element to be converted into an inline instance.
- </p>
- </div>
- <div id="editable" contenteditable="true">
- <h1><img alt="Saturn V carrying Apollo 11" class="right" src="assets/sample.jpg" /> Apollo 11</h1>
-
- <p><b>Apollo 11</b> was the spaceflight that landed the first humans, Americans <a href="http://en.wikipedia.org/wiki/Neil_Armstrong" title="Neil Armstrong">Neil Armstrong</a> and <a href="http://en.wikipedia.org/wiki/Buzz_Aldrin" title="Buzz Aldrin">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.</p>
-
- <p>Armstrong spent about <s>three and a half</s> two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&nbsp;kg) of lunar material for return to Earth. A third member of the mission, <a href="http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)" title="Michael Collins (astronaut)">Michael Collins</a>, piloted the <a href="http://en.wikipedia.org/wiki/Apollo_Command/Service_Module" title="Apollo Command/Service Module">command</a> spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.</p>
-
- <h2>Broadcasting and <em>quotes</em> <a id="quotes" name="quotes"></a></h2>
-
- <p>Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:</p>
-
- <blockquote>
- <p>One small step for [a] man, one giant leap for mankind.</p>
- </blockquote>
-
- <p>Apollo 11 effectively ended the <a href="http://en.wikipedia.org/wiki/Space_Race" title="Space Race">Space Race</a> and fulfilled a national goal proposed in 1961 by the late U.S. President <a href="http://en.wikipedia.org/wiki/John_F._Kennedy" title="John F. Kennedy">John F. Kennedy</a> in a speech before the United States Congress:</p>
-
- <blockquote>
- <p>[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.</p>
- </blockquote>
-
- <h2>Technical details <a id="tech-details" name="tech-details"></a></h2>
-
- <table align="right" border="1" bordercolor="#ccc" cellpadding="5" cellspacing="0" style="border-collapse:collapse;margin:10px 0 10px 15px;">
- <caption><strong>Mission crew</strong></caption>
- <thead>
- <tr>
- <th scope="col">Position</th>
- <th scope="col">Astronaut</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>Commander</td>
- <td>Neil A. Armstrong</td>
- </tr>
- <tr>
- <td>Command Module Pilot</td>
- <td>Michael Collins</td>
- </tr>
- <tr>
- <td>Lunar Module Pilot</td>
- <td>Edwin &quot;Buzz&quot; E. Aldrin, Jr.</td>
- </tr>
- </tbody>
- </table>
-
- <p>Launched by a <strong>Saturn V</strong> rocket from <a href="http://en.wikipedia.org/wiki/Kennedy_Space_Center" title="Kennedy Space Center">Kennedy Space Center</a> in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of <a href="http://en.wikipedia.org/wiki/NASA" title="NASA">NASA</a>&#39;s Apollo program. The Apollo spacecraft had three parts:</p>
-
- <ol>
- <li><strong>Command Module</strong> with a cabin for the three astronauts which was the only part which landed back on Earth</li>
- <li><strong>Service Module</strong> which supported the Command Module with propulsion, electrical power, oxygen and water</li>
- <li><strong>Lunar Module</strong> for landing on the Moon.</li>
- </ol>
-
- <p>After being sent to the Moon by the Saturn V&#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the <a href="http://en.wikipedia.org/wiki/Mare_Tranquillitatis" title="Mare Tranquillitatis">Sea of Tranquility</a>. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the <a href="http://en.wikipedia.org/wiki/Pacific_Ocean" title="Pacific Ocean">Pacific Ocean</a> on July 24.</p>
-
- <hr />
- <p style="text-align: right;"><small>Source: <a href="http://en.wikipedia.org/wiki/Apollo_11">Wikipedia.org</a></small></p>
- </div>
-
- <script>
- // We need to turn off the automatic editor creation first.
- CKEDITOR.disableAutoInline = true;
-
- var editor = CKEDITOR.inline( 'editable' );
- </script>
- <div id="footer">
- <hr>
- <p contenteditable="true">
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">
- http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a>
- - Frederico Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/inlinetextarea.html b/wqflask/wqflask/static/packages/ckeditor/samples/inlinetextarea.html
deleted file mode 100644
index fd27c0f1..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/inlinetextarea.html
+++ /dev/null
@@ -1,110 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Replace Textarea with Inline Editor &mdash; CKEditor Sample</title>
- <script src="../ckeditor.js"></script>
- <link href="sample.css" rel="stylesheet">
- <style>
-
- /* Style the CKEditor element to look like a textfield */
- .cke_textarea_inline
- {
- padding: 10px;
- height: 200px;
- overflow: auto;
-
- border: 1px solid gray;
- -webkit-appearance: textfield;
- }
-
- </style>
-</head>
-<body>
- <h1 class="samples">
- <a href="index.html">CKEditor Samples</a> &raquo; Replace Textarea with Inline Editor
- </h1>
- <div class="description">
- <p>
- You can also create an inline editor from a <code>textarea</code>
- element. In this case the <code>textarea</code> will be replaced
- by a <code>div</code> element with inline editing enabled.
- </p>
-<pre class="samples">
-// "article-body" is the name of a textarea element.
-var editor = CKEDITOR.inline( 'article-body' );
-</pre>
- </div>
- <form action="sample_posteddata.php" method="post">
- <h2>This is a sample form with some fields</h2>
- <p>
- Title:<br>
- <input type="text" name="title" value="Sample Form"></p>
- <p>
- Article Body (Textarea converted to CKEditor):<br>
- <textarea name="article-body" style="height: 200px">
- &lt;h2&gt;Technical details &lt;a id="tech-details" name="tech-details"&gt;&lt;/a&gt;&lt;/h2&gt;
-
- &lt;table align="right" border="1" bordercolor="#ccc" cellpadding="5" cellspacing="0" style="border-collapse:collapse;margin:10px 0 10px 15px;"&gt;
- &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt;
- &lt;thead&gt;
- &lt;tr&gt;
- &lt;th scope="col"&gt;Position&lt;/th&gt;
- &lt;th scope="col"&gt;Astronaut&lt;/th&gt;
- &lt;/tr&gt;
- &lt;/thead&gt;
- &lt;tbody&gt;
- &lt;tr&gt;
- &lt;td&gt;Commander&lt;/td&gt;
- &lt;td&gt;Neil A. Armstrong&lt;/td&gt;
- &lt;/tr&gt;
- &lt;tr&gt;
- &lt;td&gt;Command Module Pilot&lt;/td&gt;
- &lt;td&gt;Michael Collins&lt;/td&gt;
- &lt;/tr&gt;
- &lt;tr&gt;
- &lt;td&gt;Lunar Module Pilot&lt;/td&gt;
- &lt;td&gt;Edwin &quot;Buzz&quot; E. Aldrin, Jr.&lt;/td&gt;
- &lt;/tr&gt;
- &lt;/tbody&gt;
- &lt;/table&gt;
-
- &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href="http://en.wikipedia.org/wiki/Kennedy_Space_Center" title="Kennedy Space Center"&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href="http://en.wikipedia.org/wiki/NASA" title="NASA"&gt;NASA&lt;/a&gt;&#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt;
-
- &lt;ol&gt;
- &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt;
- &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt;
- &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt;
- &lt;/ol&gt;
-
- &lt;p&gt;After being sent to the Moon by the Saturn V&#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href="http://en.wikipedia.org/wiki/Mare_Tranquillitatis" title="Mare Tranquillitatis"&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href="http://en.wikipedia.org/wiki/Pacific_Ocean" title="Pacific Ocean"&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt;
-
- &lt;hr /&gt;
- &lt;p style="text-align: right;"&gt;&lt;small&gt;Source: &lt;a href="http://en.wikipedia.org/wiki/Apollo_11"&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
- </textarea>
- </p>
- <p>
- <input type="submit" value="Submit">
- </p>
- </form>
-
- <script>
- CKEDITOR.inline( 'article-body' );
- </script>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">
- http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a>
- - Frederico Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/jquery.html b/wqflask/wqflask/static/packages/ckeditor/samples/jquery.html
deleted file mode 100644
index 380b8284..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/jquery.html
+++ /dev/null
@@ -1,100 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>jQuery Adapter &mdash; CKEditor Sample</title>
- <script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
- <script src="../ckeditor.js"></script>
- <script src="../adapters/jquery.js"></script>
- <link href="sample.css" rel="stylesheet">
- <style>
-
- #editable
- {
- padding: 10px;
- float: left;
- }
-
- </style>
- <script>
-
- CKEDITOR.disableAutoInline = true;
-
- $( document ).ready( function() {
- $( '#editor1' ).ckeditor(); // Use CKEDITOR.replace() if element is <textarea>.
- $( '#editable' ).ckeditor(); // Use CKEDITOR.inline().
- } );
-
- function setValue() {
- $( '#editor1' ).val( $( 'input#val' ).val() );
- }
-
- </script>
-</head>
-<body>
- <h1 class="samples">
- <a href="index.html" id="a-test">CKEditor Samples</a> &raquo; Create Editors with jQuery
- </h1>
- <form action="sample_posteddata.php" method="post">
- <div class="description">
- <p>
- This sample shows how to use the <a href="http://docs.ckeditor.com/#!/guide/dev_jquery">jQuery adapter</a>.
- Note that you have to include both CKEditor and jQuery scripts before including the adapter.
- </p>
-
-<pre class="samples">
-&lt;script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"&gt;&lt;/script&gt;
-&lt;script src="/ckeditor/ckeditor.js"&gt;&lt;/script&gt;
-&lt;script src="/ckeditor/adapters/jquery.js"&gt;&lt;/script&gt;
-</pre>
-
- <p>Then you can replace HTML elements with a CKEditor instance using the <code>ckeditor()</code> method.</p>
-
-<pre class="samples">
-$( document ).ready( function() {
- $( 'textarea#editor1' ).ckeditor();
-} );
-</pre>
- </div>
-
- <h2 class="samples">Inline Example</h2>
-
- <div id="editable" contenteditable="true">
- <p><img alt="Saturn V carrying Apollo 11" class="right" src="assets/sample.jpg"/><b>Apollo 11</b> was the spaceflight that landed the first humans, Americans <a href="http://en.wikipedia.org/wiki/Neil_Armstrong" title="Neil Armstrong">Neil Armstrong</a> and <a href="http://en.wikipedia.org/wiki/Buzz_Aldrin" title="Buzz Aldrin">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.</p>
- <p>Armstrong spent about <s>three and a half</s> two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&nbsp;kg) of lunar material for return to Earth. A third member of the mission, <a href="http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)" title="Michael Collins (astronaut)">Michael Collins</a>, piloted the <a href="http://en.wikipedia.org/wiki/Apollo_Command/Service_Module" title="Apollo Command/Service Module">command</a> spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.
- <p>Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:</p>
- <blockquote><p>One small step for [a] man, one giant leap for mankind.</p></blockquote> <p>Apollo 11 effectively ended the <a href="http://en.wikipedia.org/wiki/Space_Race" title="Space Race">Space Race</a> and fulfilled a national goal proposed in 1961 by the late U.S. President <a href="http://en.wikipedia.org/wiki/John_F._Kennedy" title="John F. Kennedy">John F. Kennedy</a> in a speech before the United States Congress:</p> <blockquote><p>[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.</p></blockquote>
- </div>
-
- <br style="clear: both">
-
- <h2 class="samples">Classic (iframe-based) Example</h2>
-
- <textarea cols="80" id="editor1" name="editor1" rows="10">
- &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
- </textarea>
-
- <p style="overflow: hidden">
- <input style="float: left" type="submit" value="Submit">
- <span style="float: right">
- <input type="text" id="val" value="I'm using jQuery val()!" size="30">
- <input onclick="setValue();" type="button" value="Set value">
- </span>
- </p>
- </form>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/assets/my_dialog.js b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/assets/my_dialog.js
deleted file mode 100644
index 3edd0728..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/assets/my_dialog.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/**
- * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md or http://ckeditor.com/license
- */
-
-CKEDITOR.dialog.add( 'myDialog', function( editor ) {
- return {
- title: 'My Dialog',
- minWidth: 400,
- minHeight: 200,
- contents: [
- {
- id: 'tab1',
- label: 'First Tab',
- title: 'First Tab',
- elements: [
- {
- id: 'input1',
- type: 'text',
- label: 'Text Field'
- },
- {
- id: 'select1',
- type: 'select',
- label: 'Select Field',
- items: [
- [ 'option1', 'value1' ],
- [ 'option2', 'value2' ]
- ]
- }
- ]
- },
- {
- id: 'tab2',
- label: 'Second Tab',
- title: 'Second Tab',
- elements: [
- {
- id: 'button1',
- type: 'button',
- label: 'Button Field'
- }
- ]
- }
- ]
- };
-} );
-
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/dialog.html b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/dialog.html
deleted file mode 100644
index df09d25b..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/dialog/dialog.html
+++ /dev/null
@@ -1,187 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Using API to Customize Dialog Windows &mdash; CKEditor Sample</title>
- <script src="../../../ckeditor.js"></script>
- <link rel="stylesheet" href="../../../samples/sample.css">
- <meta name="ckeditor-sample-name" content="Using the JavaScript API to customize dialog windows">
- <meta name="ckeditor-sample-group" content="Advanced Samples">
- <meta name="ckeditor-sample-description" content="Using the dialog windows API to customize dialog windows without changing the original editor code.">
- <style>
-
- .cke_button__mybutton_icon
- {
- display: none !important;
- }
-
- .cke_button__mybutton_label
- {
- display: inline !important;
- }
-
- </style>
- <script>
-
- CKEDITOR.on( 'instanceCreated', function( ev ){
- var editor = ev.editor;
-
- // Listen for the "pluginsLoaded" event, so we are sure that the
- // "dialog" plugin has been loaded and we are able to do our
- // customizations.
- editor.on( 'pluginsLoaded', function() {
-
- // If our custom dialog has not been registered, do that now.
- if ( !CKEDITOR.dialog.exists( 'myDialog' ) ) {
- // We need to do the following trick to find out the dialog
- // definition file URL path. In the real world, you would simply
- // point to an absolute path directly, like "/mydir/mydialog.js".
- var href = document.location.href.split( '/' );
- href.pop();
- href.push( 'assets/my_dialog.js' );
- href = href.join( '/' );
-
- // Finally, register the dialog.
- CKEDITOR.dialog.add( 'myDialog', href );
- }
-
- // Register the command used to open the dialog.
- editor.addCommand( 'myDialogCmd', new CKEDITOR.dialogCommand( 'myDialog' ) );
-
- // Add the a custom toolbar buttons, which fires the above
- // command..
- editor.ui.add( 'MyButton', CKEDITOR.UI_BUTTON, {
- label: 'My Dialog',
- command: 'myDialogCmd'
- });
- });
- });
-
- // When opening a dialog, its "definition" is created for it, for
- // each editor instance. The "dialogDefinition" event is then
- // fired. We should use this event to make customizations to the
- // definition of existing dialogs.
- CKEDITOR.on( 'dialogDefinition', function( ev ) {
- // Take the dialog name and its definition from the event data.
- var dialogName = ev.data.name;
- var dialogDefinition = ev.data.definition;
-
- // Check if the definition is from the dialog we're
- // interested on (the "Link" dialog).
- if ( dialogName == 'myDialog' && ev.editor.name == 'editor2' ) {
- // Get a reference to the "Link Info" tab.
- var infoTab = dialogDefinition.getContents( 'tab1' );
-
- // Add a new text field to the "tab1" tab page.
- infoTab.add( {
- type: 'text',
- label: 'My Custom Field',
- id: 'customField',
- 'default': 'Sample!',
- validate: function() {
- if ( ( /\d/ ).test( this.getValue() ) )
- return 'My Custom Field must not contain digits';
- }
- });
-
- // Remove the "select1" field from the "tab1" tab.
- infoTab.remove( 'select1' );
-
- // Set the default value for "input1" field.
- var input1 = infoTab.get( 'input1' );
- input1[ 'default' ] = 'www.example.com';
-
- // Remove the "tab2" tab page.
- dialogDefinition.removeContents( 'tab2' );
-
- // Add a new tab to the "Link" dialog.
- dialogDefinition.addContents( {
- id: 'customTab',
- label: 'My Tab',
- accessKey: 'M',
- elements: [
- {
- id: 'myField1',
- type: 'text',
- label: 'My Text Field'
- },
- {
- id: 'myField2',
- type: 'text',
- label: 'Another Text Field'
- }
- ]
- });
-
- // Provide the focus handler to start initial focus in "customField" field.
- dialogDefinition.onFocus = function() {
- var urlField = this.getContentElement( 'tab1', 'customField' );
- urlField.select();
- };
- }
- });
-
- var config = {
- extraPlugins: 'dialog',
- toolbar: [ [ 'MyButton' ] ]
- };
-
- </script>
-</head>
-<body>
- <h1 class="samples">
- <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using CKEditor Dialog API
- </h1>
- <div class="description">
- <p>
- This sample shows how to use the
- <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.dialog">CKEditor Dialog API</a>
- to customize CKEditor dialog windows without changing the original editor code.
- The following customizations are being done in the example below:
- </p>
- <p>
- For details on how to create this setup check the source code of this sample page.
- </p>
- </div>
- <p>A custom dialog is added to the editors using the <code>pluginsLoaded</code> event, from an external <a target="_blank" href="assets/my_dialog.js">dialog definition file</a>:</p>
- <ol>
- <li><strong>Creating a custom dialog window</strong> &ndash; "My Dialog" dialog window opened with the "My Dialog" toolbar button.</li>
- <li><strong>Creating a custom button</strong> &ndash; Add button to open the dialog with "My Dialog" toolbar button.</li>
- </ol>
- <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
- <script>
- // Replace the <textarea id="editor1"> with an CKEditor instance.
- CKEDITOR.replace( 'editor1', config );
- </script>
- <p>The below editor modify the dialog definition of the above added dialog using the <code>dialogDefinition</code> event:</p>
- <ol>
- <li><strong>Adding dialog tab</strong> &ndash; Add new tab "My Tab" to dialog window.</li>
- <li><strong>Removing a dialog window tab</strong> &ndash; Remove "Second Tab" page from the dialog window.</li>
- <li><strong>Adding dialog window fields</strong> &ndash; Add "My Custom Field" to the dialog window.</li>
- <li><strong>Removing dialog window field</strong> &ndash; Remove "Select Field" selection field from the dialog window.</li>
- <li><strong>Setting default values for dialog window fields</strong> &ndash; Set default value of "Text Field" text field. </li>
- <li><strong>Setup initial focus for dialog window</strong> &ndash; Put initial focus on "My Custom Field" text field. </li>
- </ol>
- <textarea cols="80" id="editor2" name="editor2" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
- <script>
-
- // Replace the <textarea id="editor1"> with an CKEditor instance.
- CKEDITOR.replace( 'editor2', config );
-
- </script>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/enterkey/enterkey.html b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/enterkey/enterkey.html
deleted file mode 100644
index 2d515012..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/enterkey/enterkey.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>ENTER Key Configuration &mdash; CKEditor Sample</title>
- <script src="../../../ckeditor.js"></script>
- <link href="../../../samples/sample.css" rel="stylesheet">
- <meta name="ckeditor-sample-name" content="Using the &quot;Enter&quot; key in CKEditor">
- <meta name="ckeditor-sample-group" content="Advanced Samples">
- <meta name="ckeditor-sample-description" content="Configuring the behavior of &lt;em&gt;Enter&lt;/em&gt; and &lt;em&gt;Shift+Enter&lt;/em&gt; keys.">
- <script>
-
- var editor;
-
- function changeEnter() {
- // If we already have an editor, let's destroy it first.
- if ( editor )
- editor.destroy( true );
-
- // Create the editor again, with the appropriate settings.
- editor = CKEDITOR.replace( 'editor1', {
- extraPlugins: 'enterkey',
- enterMode: Number( document.getElementById( 'xEnter' ).value ),
- shiftEnterMode: Number( document.getElementById( 'xShiftEnter' ).value )
- });
- }
-
- window.onload = changeEnter;
-
- </script>
-</head>
-<body>
- <h1 class="samples">
- <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; ENTER Key Configuration
- </h1>
- <div class="description">
- <p>
- This sample shows how to configure the <em>Enter</em> and <em>Shift+Enter</em> keys
- to perform actions specified in the
- <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-enterMode"><code>enterMode</code></a>
- and <a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-shiftEnterMode"><code>shiftEnterMode</code></a>
- parameters, respectively.
- You can choose from the following options:
- </p>
- <ul class="samples">
- <li><strong><code>ENTER_P</code></strong> &ndash; new <code>&lt;p&gt;</code> paragraphs are created;</li>
- <li><strong><code>ENTER_BR</code></strong> &ndash; lines are broken with <code>&lt;br&gt;</code> elements;</li>
- <li><strong><code>ENTER_DIV</code></strong> &ndash; new <code>&lt;div&gt;</code> blocks are created.</li>
- </ul>
- <p>
- The sample code below shows how to configure CKEditor to create a <code>&lt;div&gt;</code> block when <em>Enter</em> key is pressed.
- </p>
-<pre class="samples">
-CKEDITOR.replace( '<em>textarea_id</em>', {
- <strong>enterMode: CKEDITOR.ENTER_DIV</strong>
-});</pre>
- <p>
- Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of
- the <code>&lt;textarea&gt;</code> element to be replaced.
- </p>
- </div>
- <div style="float: left; margin-right: 20px">
- When <em>Enter</em> is pressed:<br>
- <select id="xEnter" onchange="changeEnter();">
- <option selected="selected" value="1">Create a new &lt;P&gt; (recommended)</option>
- <option value="3">Create a new &lt;DIV&gt;</option>
- <option value="2">Break the line with a &lt;BR&gt;</option>
- </select>
- </div>
- <div style="float: left">
- When <em>Shift+Enter</em> is pressed:<br>
- <select id="xShiftEnter" onchange="changeEnter();">
- <option value="1">Create a new &lt;P&gt;</option>
- <option value="3">Create a new &lt;DIV&gt;</option>
- <option selected="selected" value="2">Break the line with a &lt;BR&gt; (recommended)</option>
- </select>
- </div>
- <br style="clear: both">
- <form action="../../../samples/sample_posteddata.php" method="post">
- <p>
- <br>
- <textarea cols="80" id="editor1" name="editor1" rows="10">This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.</textarea>
- </p>
- <p>
- <input type="submit" value="Submit">
- </p>
- </form>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla
deleted file mode 100644
index 27e68ccd..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf
deleted file mode 100644
index dbe17b6b..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js
deleted file mode 100644
index 95fdf0a7..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js
+++ /dev/null
@@ -1,18 +0,0 @@
-var swfobject=function(){function u(){if(!s){try{var a=d.getElementsByTagName("body")[0].appendChild(d.createElement("span"));a.parentNode.removeChild(a)}catch(b){return}s=!0;for(var a=x.length,c=0;c<a;c++)x[c]()}}function L(a){s?a():x[x.length]=a}function M(a){if(typeof m.addEventListener!=i)m.addEventListener("load",a,!1);else if(typeof d.addEventListener!=i)d.addEventListener("load",a,!1);else if(typeof m.attachEvent!=i)U(m,"onload",a);else if("function"==typeof m.onload){var b=m.onload;m.onload=
-function(){b();a()}}else m.onload=a}function V(){var a=d.getElementsByTagName("body")[0],b=d.createElement(r);b.setAttribute("type",y);var c=a.appendChild(b);if(c){var f=0;(function(){if(typeof c.GetVariable!=i){var g=c.GetVariable("$version");g&&(g=g.split(" ")[1].split(","),e.pv=[parseInt(g[0],10),parseInt(g[1],10),parseInt(g[2],10)])}else if(10>f){f++;setTimeout(arguments.callee,10);return}a.removeChild(b);c=null;D()})()}else D()}function D(){var a=p.length;if(0<a)for(var b=0;b<a;b++){var c=p[b].id,
-f=p[b].callbackFn,g={success:!1,id:c};if(0<e.pv[0]){var d=n(c);if(d)if(z(p[b].swfVersion)&&!(e.wk&&312>e.wk))t(c,!0),f&&(g.success=!0,g.ref=E(c),f(g));else if(p[b].expressInstall&&F()){g={};g.data=p[b].expressInstall;g.width=d.getAttribute("width")||"0";g.height=d.getAttribute("height")||"0";d.getAttribute("class")&&(g.styleclass=d.getAttribute("class"));d.getAttribute("align")&&(g.align=d.getAttribute("align"));for(var h={},d=d.getElementsByTagName("param"),j=d.length,k=0;k<j;k++)"movie"!=d[k].getAttribute("name").toLowerCase()&&
-(h[d[k].getAttribute("name")]=d[k].getAttribute("value"));G(g,h,c,f)}else W(d),f&&f(g)}else if(t(c,!0),f){if((c=E(c))&&typeof c.SetVariable!=i)g.success=!0,g.ref=c;f(g)}}}function E(a){var b=null;if((a=n(a))&&"OBJECT"==a.nodeName)typeof a.SetVariable!=i?b=a:(a=a.getElementsByTagName(r)[0])&&(b=a);return b}function F(){return!A&&z("6.0.65")&&(e.win||e.mac)&&!(e.wk&&312>e.wk)}function G(a,b,c,f){A=!0;H=f||null;N={success:!1,id:c};var g=n(c);if(g){"OBJECT"==g.nodeName?(w=I(g),B=null):(w=g,B=c);a.id=
-O;if(typeof a.width==i||!/%$/.test(a.width)&&310>parseInt(a.width,10))a.width="310";if(typeof a.height==i||!/%$/.test(a.height)&&137>parseInt(a.height,10))a.height="137";d.title=d.title.slice(0,47)+" - Flash Player Installation";f=e.ie&&e.win?"ActiveX":"PlugIn";f="MMredirectURL="+m.location.toString().replace(/&/g,"%26")+"&MMplayerType="+f+"&MMdoctitle="+d.title;b.flashvars=typeof b.flashvars!=i?b.flashvars+("&"+f):f;e.ie&&(e.win&&4!=g.readyState)&&(f=d.createElement("div"),c+="SWFObjectNew",f.setAttribute("id",
-c),g.parentNode.insertBefore(f,g),g.style.display="none",function(){g.readyState==4?g.parentNode.removeChild(g):setTimeout(arguments.callee,10)}());J(a,b,c)}}function W(a){if(e.ie&&e.win&&4!=a.readyState){var b=d.createElement("div");a.parentNode.insertBefore(b,a);b.parentNode.replaceChild(I(a),b);a.style.display="none";(function(){4==a.readyState?a.parentNode.removeChild(a):setTimeout(arguments.callee,10)})()}else a.parentNode.replaceChild(I(a),a)}function I(a){var b=d.createElement("div");if(e.win&&
-e.ie)b.innerHTML=a.innerHTML;else if(a=a.getElementsByTagName(r)[0])if(a=a.childNodes)for(var c=a.length,f=0;f<c;f++)!(1==a[f].nodeType&&"PARAM"==a[f].nodeName)&&8!=a[f].nodeType&&b.appendChild(a[f].cloneNode(!0));return b}function J(a,b,c){var f,g=n(c);if(e.wk&&312>e.wk)return f;if(g)if(typeof a.id==i&&(a.id=c),e.ie&&e.win){var o="",h;for(h in a)a[h]!=Object.prototype[h]&&("data"==h.toLowerCase()?b.movie=a[h]:"styleclass"==h.toLowerCase()?o+=' class="'+a[h]+'"':"classid"!=h.toLowerCase()&&(o+=" "+
-h+'="'+a[h]+'"'));h="";for(var j in b)b[j]!=Object.prototype[j]&&(h+='<param name="'+j+'" value="'+b[j]+'" />');g.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+o+">"+h+"</object>";C[C.length]=a.id;f=n(a.id)}else{j=d.createElement(r);j.setAttribute("type",y);for(var k in a)a[k]!=Object.prototype[k]&&("styleclass"==k.toLowerCase()?j.setAttribute("class",a[k]):"classid"!=k.toLowerCase()&&j.setAttribute(k,a[k]));for(o in b)b[o]!=Object.prototype[o]&&"movie"!=o.toLowerCase()&&
-(a=j,h=o,k=b[o],c=d.createElement("param"),c.setAttribute("name",h),c.setAttribute("value",k),a.appendChild(c));g.parentNode.replaceChild(j,g);f=j}return f}function P(a){var b=n(a);b&&"OBJECT"==b.nodeName&&(e.ie&&e.win?(b.style.display="none",function(){if(4==b.readyState){var c=n(a);if(c){for(var f in c)"function"==typeof c[f]&&(c[f]=null);c.parentNode.removeChild(c)}}else setTimeout(arguments.callee,10)}()):b.parentNode.removeChild(b))}function n(a){var b=null;try{b=d.getElementById(a)}catch(c){}return b}
-function U(a,b,c){a.attachEvent(b,c);v[v.length]=[a,b,c]}function z(a){var b=e.pv,a=a.split(".");a[0]=parseInt(a[0],10);a[1]=parseInt(a[1],10)||0;a[2]=parseInt(a[2],10)||0;return b[0]>a[0]||b[0]==a[0]&&b[1]>a[1]||b[0]==a[0]&&b[1]==a[1]&&b[2]>=a[2]?!0:!1}function Q(a,b,c,f){if(!e.ie||!e.mac){var g=d.getElementsByTagName("head")[0];if(g){c=c&&"string"==typeof c?c:"screen";f&&(K=l=null);if(!l||K!=c)f=d.createElement("style"),f.setAttribute("type","text/css"),f.setAttribute("media",c),l=g.appendChild(f),
-e.ie&&(e.win&&typeof d.styleSheets!=i&&0<d.styleSheets.length)&&(l=d.styleSheets[d.styleSheets.length-1]),K=c;e.ie&&e.win?l&&typeof l.addRule==r&&l.addRule(a,b):l&&typeof d.createTextNode!=i&&l.appendChild(d.createTextNode(a+" {"+b+"}"))}}}function t(a,b){if(R){var c=b?"visible":"hidden";s&&n(a)?n(a).style.visibility=c:Q("#"+a,"visibility:"+c)}}function S(a){return null!=/[\\\"<>\.;]/.exec(a)&&typeof encodeURIComponent!=i?encodeURIComponent(a):a}var i="undefined",r="object",y="application/x-shockwave-flash",
-O="SWFObjectExprInst",m=window,d=document,q=navigator,T=!1,x=[function(){T?V():D()}],p=[],C=[],v=[],w,B,H,N,s=!1,A=!1,l,K,R=!0,e=function(){var a=typeof d.getElementById!=i&&typeof d.getElementsByTagName!=i&&typeof d.createElement!=i,b=q.userAgent.toLowerCase(),c=q.platform.toLowerCase(),f=c?/win/.test(c):/win/.test(b),c=c?/mac/.test(c):/mac/.test(b),b=/webkit/.test(b)?parseFloat(b.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):!1,g=!+"\v1",e=[0,0,0],h=null;if(typeof q.plugins!=i&&typeof q.plugins["Shockwave Flash"]==
-r){if((h=q.plugins["Shockwave Flash"].description)&&!(typeof q.mimeTypes!=i&&q.mimeTypes[y]&&!q.mimeTypes[y].enabledPlugin))T=!0,g=!1,h=h.replace(/^.*\s+(\S+\s+\S+$)/,"$1"),e[0]=parseInt(h.replace(/^(.*)\..*$/,"$1"),10),e[1]=parseInt(h.replace(/^.*\.(.*)\s.*$/,"$1"),10),e[2]=/[a-zA-Z]/.test(h)?parseInt(h.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}else if(typeof m.ActiveXObject!=i)try{var j=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");if(j&&(h=j.GetVariable("$version")))g=!0,h=h.split(" ")[1].split(","),
-e=[parseInt(h[0],10),parseInt(h[1],10),parseInt(h[2],10)]}catch(k){}return{w3:a,pv:e,wk:b,ie:g,win:f,mac:c}}();(function(){e.w3&&((typeof d.readyState!=i&&"complete"==d.readyState||typeof d.readyState==i&&(d.getElementsByTagName("body")[0]||d.body))&&u(),s||(typeof d.addEventListener!=i&&d.addEventListener("DOMContentLoaded",u,!1),e.ie&&e.win&&(d.attachEvent("onreadystatechange",function(){"complete"==d.readyState&&(d.detachEvent("onreadystatechange",arguments.callee),u())}),m==top&&function(){if(!s){try{d.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,
-0);return}u()}}()),e.wk&&function(){s||(/loaded|complete/.test(d.readyState)?u():setTimeout(arguments.callee,0))}(),M(u)))})();(function(){e.ie&&e.win&&window.attachEvent("onunload",function(){for(var a=v.length,b=0;b<a;b++)v[b][0].detachEvent(v[b][1],v[b][2]);a=C.length;for(b=0;b<a;b++)P(C[b]);for(var c in e)e[c]=null;e=null;for(var f in swfobject)swfobject[f]=null;swfobject=null})})();return{registerObject:function(a,b,c,f){if(e.w3&&a&&b){var d={};d.id=a;d.swfVersion=b;d.expressInstall=c;d.callbackFn=
-f;p[p.length]=d;t(a,!1)}else f&&f({success:!1,id:a})},getObjectById:function(a){if(e.w3)return E(a)},embedSWF:function(a,b,c,d,g,o,h,j,k,m){var n={success:!1,id:b};e.w3&&!(e.wk&&312>e.wk)&&a&&b&&c&&d&&g?(t(b,!1),L(function(){c+="";d+="";var e={};if(k&&typeof k===r)for(var l in k)e[l]=k[l];e.data=a;e.width=c;e.height=d;l={};if(j&&typeof j===r)for(var p in j)l[p]=j[p];if(h&&typeof h===r)for(var q in h)l.flashvars=typeof l.flashvars!=i?l.flashvars+("&"+q+"="+h[q]):q+"="+h[q];if(z(g))p=J(e,l,b),e.id==
-b&&t(b,!0),n.success=!0,n.ref=p;else{if(o&&F()){e.data=o;G(e,l,b,m);return}t(b,!0)}m&&m(n)})):m&&m(n)},switchOffAutoHideShow:function(){R=!1},ua:e,getFlashPlayerVersion:function(){return{major:e.pv[0],minor:e.pv[1],release:e.pv[2]}},hasFlashPlayerVersion:z,createSWF:function(a,b,c){if(e.w3)return J(a,b,c)},showExpressInstall:function(a,b,c,d){e.w3&&F()&&G(a,b,c,d)},removeSWF:function(a){e.w3&&P(a)},createCSS:function(a,b,c,d){e.w3&&Q(a,b,c,d)},addDomLoadEvent:L,addLoadEvent:M,getQueryParamValue:function(a){var b=
-d.location.search||d.location.hash;if(b){/\?/.test(b)&&(b=b.split("?")[1]);if(null==a)return S(b);for(var b=b.split("&"),c=0;c<b.length;c++)if(b[c].substring(0,b[c].indexOf("="))==a)return S(b[c].substring(b[c].indexOf("=")+1))}return""},expressInstallCallback:function(){if(A){var a=n(O);a&&w&&(a.parentNode.replaceChild(w,a),B&&(t(B,!0),e.ie&&e.win&&(w.style.display="block")),H&&H(N));A=!1}}}}(); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/outputforflash.html b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/outputforflash.html
deleted file mode 100644
index 738ad667..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/outputforflash.html
+++ /dev/null
@@ -1,280 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Output for Flash &mdash; CKEditor Sample</title>
- <script src="../../../ckeditor.js"></script>
- <script src="../../../samples/sample.js"></script>
- <script src="assets/outputforflash/swfobject.js"></script>
- <link href="../../../samples/sample.css" rel="stylesheet">
- <meta name="ckeditor-sample-required-plugins" content="sourcearea">
- <meta name="ckeditor-sample-name" content="Output for Flash">
- <meta name="ckeditor-sample-group" content="Advanced Samples">
- <meta name="ckeditor-sample-description" content="Configuring CKEditor to produce HTML code that can be used with Adobe Flash.">
- <style>
-
- .alert
- {
- background: #ffa84c;
- padding: 10px 15px;
- font-weight: bold;
- display: block;
- margin-bottom: 20px;
- }
-
- </style>
-</head>
-<body>
- <h1 class="samples">
- <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Producing Flash Compliant HTML Output
- </h1>
- <div class="description">
- <p>
- This sample shows how to configure CKEditor to output
- HTML code that can be used with
- <a class="samples" href="http://www.adobe.com/livedocs/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&amp;file=00000922.html">
- Adobe Flash</a>.
- The code will contain a subset of standard HTML elements like <code>&lt;b&gt;</code>,
- <code>&lt;i&gt;</code>, and <code>&lt;p&gt;</code> as well as HTML attributes.
- </p>
- <p>
- To add a CKEditor instance outputting Flash compliant HTML code, load the editor using a standard
- JavaScript call, and define CKEditor features to use HTML elements and attributes.
- </p>
- <p>
- For details on how to create this setup check the source code of this sample page.
- </p>
- </div>
- <p>
- To see how it works, create some content in the editing area of CKEditor on the left
- and send it to the Flash object on the right side of the page by using the
- <strong>Send to Flash</strong> button.
- </p>
- <table style="width: 100%; border-spacing: 0; border-collapse:collapse;">
- <tr>
- <td style="width: 100%">
- <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;&lt;b&gt;&lt;font size=&quot;18&quot; style=&quot;font-size:18px;&quot;&gt;Flash and HTML&lt;/font&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;It is possible to have &lt;a href=&quot;http://ckeditor.com&quot;&gt;CKEditor&lt;/a&gt; creating content that will be later loaded inside &lt;b&gt;Flash&lt;/b&gt; objects and animations.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Flash has a few limitations when dealing with HTML:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;It has limited support on tags.&lt;/li&gt;&lt;li&gt;There is no margin between block elements, like paragraphs.&lt;/li&gt;&lt;/ul&gt;</textarea>
- <script>
-
- if ( document.location.protocol == 'file:' )
- alert( 'Warning: This samples does not work when loaded from local filesystem' +
- 'due to security restrictions implemented in Flash.' +
- '\n\nPlease load the sample from a web server instead.' );
-
- var editor = CKEDITOR.replace( 'editor1', {
- /*
- * Ensure that htmlwriter plugin, which is required for this sample, is loaded.
- */
- extraPlugins: 'htmlwriter',
-
- height: 290,
- width: '100%',
- toolbar: [
- [ 'Source', '-', 'Bold', 'Italic', 'Underline', '-', 'BulletedList', '-', 'Link', 'Unlink' ],
- [ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock' ],
- '/',
- [ 'Font', 'FontSize' ],
- [ 'TextColor', '-', 'About' ]
- ],
-
- /*
- * Style sheet for the contents
- */
- contentsCss: 'body {color:#000; background-color#FFF; font-family: Arial; font-size:80%;} p, ol, ul {margin-top: 0px; margin-bottom: 0px;}',
-
- /*
- * Quirks doctype
- */
- docType: '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">',
-
- /*
- * Core styles.
- */
- coreStyles_bold: { element: 'b' },
- coreStyles_italic: { element: 'i' },
- coreStyles_underline: { element: 'u' },
-
- /*
- * Font face.
- */
-
- // Define the way font elements will be applied to the document. The "font"
- // element will be used.
- font_style: {
- element: 'font',
- attributes: { 'face': '#(family)' }
- },
-
- /*
- * Font sizes.
- */
-
- // The CSS part of the font sizes isn't used by Flash, it is there to get the
- // font rendered correctly in CKEditor.
- fontSize_sizes: '8px/8;9px/9;10px/10;11px/11;12px/12;14px/14;16px/16;18px/18;20px/20;22px/22;24px/24;26px/26;28px/28;36px/36;48px/48;72px/72',
- fontSize_style: {
- element: 'font',
- attributes: { 'size': '#(size)' },
- styles: { 'font-size': '#(size)px' }
- } ,
-
- /*
- * Font colors.
- */
- colorButton_enableMore: true,
-
- colorButton_foreStyle: {
- element: 'font',
- attributes: { 'color': '#(color)' }
- },
-
- colorButton_backStyle: {
- element: 'font',
- styles: { 'background-color': '#(color)' }
- },
-
- on: { 'instanceReady': configureFlashOutput }
- });
-
- /*
- * Adjust the behavior of the dataProcessor to match the
- * requirements of Flash
- */
- function configureFlashOutput( ev ) {
- var editor = ev.editor,
- dataProcessor = editor.dataProcessor,
- htmlFilter = dataProcessor && dataProcessor.htmlFilter;
-
- // Out self closing tags the HTML4 way, like <br>.
- dataProcessor.writer.selfClosingEnd = '>';
-
- // Make output formatting match Flash expectations
- var dtd = CKEDITOR.dtd;
- for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) {
- dataProcessor.writer.setRules( e, {
- indent: false,
- breakBeforeOpen: false,
- breakAfterOpen: false,
- breakBeforeClose: false,
- breakAfterClose: false
- });
- }
- dataProcessor.writer.setRules( 'br', {
- indent: false,
- breakBeforeOpen: false,
- breakAfterOpen: false,
- breakBeforeClose: false,
- breakAfterClose: false
- });
-
- // Output properties as attributes, not styles.
- htmlFilter.addRules( {
- elements: {
- $: function( element ) {
- var style, match, width, height, align;
-
- // Output dimensions of images as width and height
- if ( element.name == 'img' ) {
- style = element.attributes.style;
-
- if ( style ) {
- // Get the width from the style.
- match = ( /(?:^|\s)width\s*:\s*(\d+)px/i ).exec( style );
- width = match && match[1];
-
- // Get the height from the style.
- match = ( /(?:^|\s)height\s*:\s*(\d+)px/i ).exec( style );
- height = match && match[1];
-
- if ( width ) {
- element.attributes.style = element.attributes.style.replace( /(?:^|\s)width\s*:\s*(\d+)px;?/i , '' );
- element.attributes.width = width;
- }
-
- if ( height ) {
- element.attributes.style = element.attributes.style.replace( /(?:^|\s)height\s*:\s*(\d+)px;?/i , '' );
- element.attributes.height = height;
- }
- }
- }
-
- // Output alignment of paragraphs using align
- if ( element.name == 'p' ) {
- style = element.attributes.style;
-
- if ( style ) {
- // Get the align from the style.
- match = ( /(?:^|\s)text-align\s*:\s*(\w*);?/i ).exec( style );
- align = match && match[1];
-
- if ( align ) {
- element.attributes.style = element.attributes.style.replace( /(?:^|\s)text-align\s*:\s*(\w*);?/i , '' );
- element.attributes.align = align;
- }
- }
- }
-
- if ( element.attributes.style === '' )
- delete element.attributes.style;
-
- return element;
- }
- }
- });
- }
-
- function sendToFlash() {
- var html = CKEDITOR.instances.editor1.getData() ;
-
- // Quick fix for link color.
- html = html.replace( /<a /g, '<font color="#0000FF"><u><a ' )
- html = html.replace( /<\/a>/g, '</a></u></font>' )
-
- var flash = document.getElementById( 'ckFlashContainer' ) ;
- flash.setData( html ) ;
- }
-
- CKEDITOR.domReady( function() {
- if ( !swfobject.hasFlashPlayerVersion( '8' ) ) {
- CKEDITOR.dom.element.createFromHtml( '<span class="alert">' +
- 'At least Adobe Flash Player 8 is required to run this sample. ' +
- 'You can download it from <a href="http://get.adobe.com/flashplayer">Adobe\'s website</a>.' +
- '</span>' ).insertBefore( editor.element );
- }
-
- swfobject.embedSWF(
- 'assets/outputforflash/outputforflash.swf',
- 'ckFlashContainer',
- '550',
- '400',
- '8',
- { wmode: 'transparent' }
- );
- });
-
- </script>
- <p>
- <input type="button" value="Send to Flash" onclick="sendToFlash();">
- </p>
- </td>
- <td style="vertical-align: top; padding-left: 20px">
- <div id="ckFlashContainer"></div>
- </td>
- </tr>
- </table>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/outputhtml.html b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/outputhtml.html
deleted file mode 100644
index f25697df..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/htmlwriter/outputhtml.html
+++ /dev/null
@@ -1,221 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>HTML Compliant Output &mdash; CKEditor Sample</title>
- <script src="../../../ckeditor.js"></script>
- <script src="../../../samples/sample.js"></script>
- <link href="../../../samples/sample.css" rel="stylesheet">
- <meta name="ckeditor-sample-required-plugins" content="sourcearea">
- <meta name="ckeditor-sample-name" content="Output HTML">
- <meta name="ckeditor-sample-group" content="Advanced Samples">
- <meta name="ckeditor-sample-description" content="Configuring CKEditor to produce legacy HTML 4 code.">
-</head>
-<body>
- <h1 class="samples">
- <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Producing HTML Compliant Output
- </h1>
- <div class="description">
- <p>
- This sample shows how to configure CKEditor to output valid
- <a class="samples" href="http://www.w3.org/TR/html401/">HTML 4.01</a> code.
- Traditional HTML elements like <code>&lt;b&gt;</code>,
- <code>&lt;i&gt;</code>, and <code>&lt;font&gt;</code> are used in place of
- <code>&lt;strong&gt;</code>, <code>&lt;em&gt;</code>, and CSS styles.
- </p>
- <p>
- To add a CKEditor instance outputting legacy HTML 4.01 code, load the editor using a standard
- JavaScript call, and define CKEditor features to use the HTML compliant elements and attributes.
- </p>
- <p>
- A snippet of the configuration code can be seen below; check the source of this page for
- full definition:
- </p>
-<pre class="samples">
-CKEDITOR.replace( '<em>textarea_id</em>', {
- coreStyles_bold: { element: 'b' },
- coreStyles_italic: { element: 'i' },
-
- fontSize_style: {
- element: 'font',
- attributes: { 'size': '#(size)' }
- }
-
- ...
-});</pre>
- </div>
- <form action="../../../samples/sample_posteddata.php" method="post">
- <p>
- <label for="editor1">
- Editor 1:
- </label>
- <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;b&gt;sample text&lt;/b&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
- <script>
-
- CKEDITOR.replace( 'editor1', {
- /*
- * Ensure that htmlwriter plugin, which is required for this sample, is loaded.
- */
- extraPlugins: 'htmlwriter',
-
- /*
- * Style sheet for the contents
- */
- contentsCss: 'body {color:#000; background-color#:FFF;}',
-
- /*
- * Simple HTML5 doctype
- */
- docType: '<!DOCTYPE HTML>',
-
- /*
- * Allowed content rules which beside limiting allowed HTML
- * will also take care of transforming styles to attributes
- * (currently only for img - see transformation rules defined below).
- *
- * Read more: http://docs.ckeditor.com/#!/guide/dev_advanced_content_filter
- */
- allowedContent:
- 'h1 h2 h3 p pre[align]; ' +
- 'blockquote code kbd samp var del ins cite q b i u strike ul ol li hr table tbody tr td th caption; ' +
- 'img[!src,alt,align,width,height]; font[!face]; font[!family]; font[!color]; font[!size]; font{!background-color}; a[!href]; a[!name]',
-
- /*
- * Core styles.
- */
- coreStyles_bold: { element: 'b' },
- coreStyles_italic: { element: 'i' },
- coreStyles_underline: { element: 'u' },
- coreStyles_strike: { element: 'strike' },
-
- /*
- * Font face.
- */
-
- // Define the way font elements will be applied to the document.
- // The "font" element will be used.
- font_style: {
- element: 'font',
- attributes: { 'face': '#(family)' }
- },
-
- /*
- * Font sizes.
- */
- fontSize_sizes: 'xx-small/1;x-small/2;small/3;medium/4;large/5;x-large/6;xx-large/7',
- fontSize_style: {
- element: 'font',
- attributes: { 'size': '#(size)' }
- },
-
- /*
- * Font colors.
- */
-
- colorButton_foreStyle: {
- element: 'font',
- attributes: { 'color': '#(color)' }
- },
-
- colorButton_backStyle: {
- element: 'font',
- styles: { 'background-color': '#(color)' }
- },
-
- /*
- * Styles combo.
- */
- stylesSet: [
- { name: 'Computer Code', element: 'code' },
- { name: 'Keyboard Phrase', element: 'kbd' },
- { name: 'Sample Text', element: 'samp' },
- { name: 'Variable', element: 'var' },
- { name: 'Deleted Text', element: 'del' },
- { name: 'Inserted Text', element: 'ins' },
- { name: 'Cited Work', element: 'cite' },
- { name: 'Inline Quotation', element: 'q' }
- ],
-
- on: {
- pluginsLoaded: configureTransformations,
- loaded: configureHtmlWriter
- }
- });
-
- /*
- * Add missing content transformations.
- */
- function configureTransformations( evt ) {
- var editor = evt.editor;
-
- editor.dataProcessor.htmlFilter.addRules( {
- attributes: {
- style: function( value, element ) {
- // Return #RGB for background and border colors
- return CKEDITOR.tools.convertRgbToHex( value );
- }
- }
- } );
-
- // Default automatic content transformations do not yet take care of
- // align attributes on blocks, so we need to add our own transformation rules.
- function alignToAttribute( element ) {
- if ( element.styles[ 'text-align' ] ) {
- element.attributes.align = element.styles[ 'text-align' ];
- delete element.styles[ 'text-align' ];
- }
- }
- editor.filter.addTransformations( [
- [ { element: 'p', right: alignToAttribute } ],
- [ { element: 'h1', right: alignToAttribute } ],
- [ { element: 'h2', right: alignToAttribute } ],
- [ { element: 'h3', right: alignToAttribute } ],
- [ { element: 'pre', right: alignToAttribute } ]
- ] );
- }
-
- /*
- * Adjust the behavior of htmlWriter to make it output HTML like FCKeditor.
- */
- function configureHtmlWriter( evt ) {
- var editor = evt.editor,
- dataProcessor = editor.dataProcessor;
-
- // Out self closing tags the HTML4 way, like <br>.
- dataProcessor.writer.selfClosingEnd = '>';
-
- // Make output formatting behave similar to FCKeditor.
- var dtd = CKEDITOR.dtd;
- for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) {
- dataProcessor.writer.setRules( e, {
- indent: true,
- breakBeforeOpen: true,
- breakAfterOpen: false,
- breakBeforeClose: !dtd[ e ][ '#' ],
- breakAfterClose: true
- });
- }
- }
-
- </script>
- </p>
- <p>
- <input type="submit" value="Submit">
- </p>
- </form>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/magicline/magicline.html b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/magicline/magicline.html
deleted file mode 100644
index 800fbb3b..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/magicline/magicline.html
+++ /dev/null
@@ -1,206 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Using Magicline plugin &mdash; CKEditor Sample</title>
- <script src="../../../ckeditor.js"></script>
- <link rel="stylesheet" href="../../../samples/sample.css">
- <meta name="ckeditor-sample-name" content="Magicline plugin">
- <meta name="ckeditor-sample-group" content="Plugins">
- <meta name="ckeditor-sample-description" content="Using the Magicline plugin to access difficult focus spaces.">
-</head>
-<body>
- <h1 class="samples">
- <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using Magicline plugin
- </h1>
- <div class="description">
- <p>
- This sample shows the advantages of <strong>Magicline</strong> plugin
- which is to enhance the editing process. Thanks to this plugin,
- a number of difficult focus spaces which are inaccessible due to
- browser issues can now be focused.
- </p>
- <p>
- <strong>Magicline</strong> plugin shows a red line with a handler
- which, when clicked, inserts a paragraph and allows typing. To see this,
- focus an editor and move your mouse above the focus space you want
- to access. The plugin is enabled by default so no additional
- configuration is necessary.
- </p>
- </div>
- <div>
- <label for="editor1">
- Editor 1:
- </label>
- <div class="description">
- <p>
- This editor uses a default <strong>Magicline</strong> setup.
- </p>
- </div>
- <textarea cols="80" id="editor1" name="editor1" rows="10">
- &lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt;
- &lt;tbody&gt;
- &lt;tr&gt;
- &lt;td&gt;This table&lt;/td&gt;
- &lt;td&gt;is the&lt;/td&gt;
- &lt;td&gt;very first&lt;/td&gt;
- &lt;td&gt;element of the document.&lt;/td&gt;
- &lt;/tr&gt;
- &lt;tr&gt;
- &lt;td&gt;We are still&lt;/td&gt;
- &lt;td&gt;able to acces&lt;/td&gt;
- &lt;td&gt;the space before it.&lt;/td&gt;
- &lt;td&gt;
- &lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt;
- &lt;tbody&gt;
- &lt;tr&gt;
- &lt;td&gt;This table is inside of a cell of another table.&lt;/td&gt;
- &lt;/tr&gt;
- &lt;tr&gt;
- &lt;td&gt;We can type&amp;nbsp;either before or after it though.&lt;/td&gt;
- &lt;/tr&gt;
- &lt;/tbody&gt;
- &lt;/table&gt;
- &lt;/td&gt;
- &lt;/tr&gt;
- &lt;/tbody&gt;
- &lt;/table&gt;
-
- &lt;p&gt;Two succesive horizontal lines (&lt;tt&gt;HR&lt;/tt&gt; tags). We can access the space in between:&lt;/p&gt;
-
- &lt;hr /&gt;
- &lt;hr /&gt;
- &lt;ol&gt;
- &lt;li&gt;This numbered list...&lt;/li&gt;
- &lt;li&gt;...is a neighbour of a horizontal line...&lt;/li&gt;
- &lt;li&gt;...and another list.&lt;/li&gt;
- &lt;/ol&gt;
-
- &lt;ul&gt;
- &lt;li&gt;We can type between the lists...&lt;/li&gt;
- &lt;li&gt;...thanks to &lt;strong&gt;Magicline&lt;/strong&gt;.&lt;/li&gt;
- &lt;/ul&gt;
-
- &lt;p&gt;Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.&lt;/p&gt;
-
- &lt;p&gt;Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.&lt;/p&gt;
-
- &lt;p&gt;Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.&lt;/p&gt;
-
- &lt;div style=&quot;border: 2px dashed green; background: #ddd; text-align: center;&quot;&gt;
- &lt;p&gt;This text is wrapped in a&amp;nbsp;&lt;tt&gt;DIV&lt;/tt&gt;&amp;nbsp;element. We can type after this element though.&lt;/p&gt;
- &lt;/div&gt;
- </textarea>
- <script>
-
- // This call can be placed at any point after the
- // <textarea>, or inside a <head><script> in a
- // window.onload event handler.
-
- CKEDITOR.replace( 'editor1', {
- extraPlugins: 'magicline', // Ensure that magicline plugin, which is required for this sample, is loaded.
- allowedContent: true // Switch off the ACF, so very complex content created to
- // show magicline's power isn't filtered.
- } );
-
- </script>
- </div>
- <br>
- <div>
- <label for="editor2">
- Editor 2:
- </label>
- <div class="description">
- <p>
- This editor is using a blue line.
- </p>
-<pre class="samples">
-CKEDITOR.replace( 'editor2', {
- magicline_color: 'blue'
-});</pre>
- </div>
- <textarea cols="80" id="editor2" name="editor2" rows="10">
- &lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt;
- &lt;tbody&gt;
- &lt;tr&gt;
- &lt;td&gt;This table&lt;/td&gt;
- &lt;td&gt;is the&lt;/td&gt;
- &lt;td&gt;very first&lt;/td&gt;
- &lt;td&gt;element of the document.&lt;/td&gt;
- &lt;/tr&gt;
- &lt;tr&gt;
- &lt;td&gt;We are still&lt;/td&gt;
- &lt;td&gt;able to acces&lt;/td&gt;
- &lt;td&gt;the space before it.&lt;/td&gt;
- &lt;td&gt;
- &lt;table border=&quot;1&quot; cellpadding=&quot;1&quot; cellspacing=&quot;1&quot; style=&quot;width: 100%; &quot;&gt;
- &lt;tbody&gt;
- &lt;tr&gt;
- &lt;td&gt;This table is inside of a cell of another table.&lt;/td&gt;
- &lt;/tr&gt;
- &lt;tr&gt;
- &lt;td&gt;We can type&amp;nbsp;either before or after it though.&lt;/td&gt;
- &lt;/tr&gt;
- &lt;/tbody&gt;
- &lt;/table&gt;
- &lt;/td&gt;
- &lt;/tr&gt;
- &lt;/tbody&gt;
- &lt;/table&gt;
-
- &lt;p&gt;Two succesive horizontal lines (&lt;tt&gt;HR&lt;/tt&gt; tags). We can access the space in between:&lt;/p&gt;
-
- &lt;hr /&gt;
- &lt;hr /&gt;
- &lt;ol&gt;
- &lt;li&gt;This numbered list...&lt;/li&gt;
- &lt;li&gt;...is a neighbour of a horizontal line...&lt;/li&gt;
- &lt;li&gt;...and another list.&lt;/li&gt;
- &lt;/ol&gt;
-
- &lt;ul&gt;
- &lt;li&gt;We can type between the lists...&lt;/li&gt;
- &lt;li&gt;...thanks to &lt;strong&gt;Magicline&lt;/strong&gt;.&lt;/li&gt;
- &lt;/ul&gt;
-
- &lt;p&gt;Lorem ipsum dolor sit amet dui. Morbi vel turpis. Nullam et leo. Etiam rutrum, urna tellus dui vel tincidunt mattis egestas, justo fringilla vel, massa. Phasellus.&lt;/p&gt;
-
- &lt;p&gt;Quisque iaculis, dui lectus varius vitae, tortor. Proin lacus. Pellentesque ac lacus. Aenean nonummy commodo nec, pede. Etiam blandit risus elit.&lt;/p&gt;
-
- &lt;p&gt;Ut pretium. Vestibulum rutrum in, adipiscing elit. Sed in quam in purus sem vitae pede. Pellentesque bibendum, urna sem vel risus. Vivamus posuere metus. Aliquam gravida iaculis nisl. Nam enim. Aliquam erat ac lacus tellus ac felis.&lt;/p&gt;
-
- &lt;div style=&quot;border: 2px dashed green; background: #ddd; text-align: center;&quot;&gt;
- &lt;p&gt;This text is wrapped in a&amp;nbsp;&lt;tt&gt;DIV&lt;/tt&gt;&amp;nbsp;element. We can type after this element though.&lt;/p&gt;
- &lt;/div&gt;
- </textarea>
- <script>
-
- // This call can be placed at any point after the
- // <textarea>, or inside a <head><script> in a
- // window.onload event handler.
-
- CKEDITOR.replace( 'editor2', {
- extraPlugins: 'magicline', // Ensure that magicline plugin, which is required for this sample, is loaded.
- magicline_color: 'blue', // Blue line
- allowedContent: true // Switch off the ACF, so very complex content created to
- // show magicline's power isn't filtered.
- });
-
- </script>
- </div>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/toolbar/toolbar.html b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/toolbar/toolbar.html
deleted file mode 100644
index 6cf2ddf1..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/toolbar/toolbar.html
+++ /dev/null
@@ -1,232 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Toolbar Configuration &mdash; CKEditor Sample</title>
- <meta name="ckeditor-sample-name" content="Toolbar Configurations">
- <meta name="ckeditor-sample-group" content="Advanced Samples">
- <meta name="ckeditor-sample-description" content="Configuring CKEditor to display full or custom toolbar layout.">
- <script src="../../../ckeditor.js"></script>
- <link href="../../../samples/sample.css" rel="stylesheet">
-</head>
-<body>
- <h1 class="samples">
- <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Toolbar Configuration
- </h1>
- <div class="description">
- <p>
- This sample page demonstrates editor with loaded <a href="#fullToolbar">full toolbar</a> (all registered buttons) and, if
- current editor's configuration modifies default settings, also editor with <a href="#currentToolbar">modified toolbar</a>.
- </p>
-
- <p>Since CKEditor 4 there are two ways to configure toolbar buttons.</p>
-
- <h2 class="samples">By <a href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-toolbar">config.toolbar</a></h2>
-
- <p>
- You can explicitly define which buttons are displayed in which groups and in which order.
- This is the more precise setting, but less flexible. If newly added plugin adds its
- own button you'll have to add it manually to your <code>config.toolbar</code> setting as well.
- </p>
-
- <p>To add a CKEditor instance with custom toolbar setting, insert the following JavaScript call to your code:</p>
-
- <pre class="samples">
-CKEDITOR.replace( <em>'textarea_id'</em>, {
- <strong>toolbar:</strong> [
- { name: 'document', items: [ 'Source', '-', 'NewPage', 'Preview', '-', 'Templates' ] }, // Defines toolbar group with name (used to create voice label) and items in 3 subgroups.
- [ 'Cut', 'Copy', 'Paste', 'PasteText', 'PasteFromWord', '-', 'Undo', 'Redo' ], // Defines toolbar group without name.
- '/', // Line break - next group will be placed in new line.
- { name: 'basicstyles', items: [ 'Bold', 'Italic' ] }
- ]
-});</pre>
-
- <h2 class="samples">By <a href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-toolbarGroups">config.toolbarGroups</a></h2>
-
- <p>
- You can define which groups of buttons (like e.g. <code>basicstyles</code>, <code>clipboard</code>
- and <code>forms</code>) are displayed and in which order. Registered buttons are associated
- with toolbar groups by <code>toolbar</code> property in their definition.
- This setting's advantage is that you don't have to modify toolbar configuration
- when adding/removing plugins which register their own buttons.
- </p>
-
- <p>To add a CKEditor instance with custom toolbar groups setting, insert the following JavaScript call to your code:</p>
-
- <pre class="samples">
-CKEDITOR.replace( <em>'textarea_id'</em>, {
- <strong>toolbarGroups:</strong> [
- { name: 'document', groups: [ 'mode', 'document' ] }, // Displays document group with its two subgroups.
- { name: 'clipboard', groups: [ 'clipboard', 'undo' ] }, // Group's name will be used to create voice label.
- '/', // Line break - next group will be placed in new line.
- { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
- { name: 'links' }
- ]
-
- // NOTE: Remember to leave 'toolbar' property with the default value (null).
-});</pre>
- </div>
-
- <div id="currentToolbar" style="display: none">
- <h2 class="samples">Current toolbar configuration</h2>
- <p>Below you can see editor with current toolbar definition.</p>
- <textarea cols="80" id="editorCurrent" name="editorCurrent" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
- <pre id="editorCurrentCfg" class="samples"></pre>
- </div>
-
- <div id="fullToolbar">
- <h2 class="samples">Full toolbar configuration</h2>
- <p>Below you can see editor with full toolbar, generated automatically by the editor.</p>
- <p>
- <strong>Note</strong>: To create editor instance with full toolbar you don't have to set anything.
- Just leave <code>toolbar</code> and <code>toolbarGroups</code> with the default, <code>null</code> values.
- </p>
- <textarea cols="80" id="editorFull" name="editorFull" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
- <pre id="editorFullCfg" class="samples"></pre>
- </div>
-
- <script>
-
-(function() {
- 'use strict';
-
- var buttonsNames;
-
- CKEDITOR.config.extraPlugins = 'toolbar';
-
- CKEDITOR.on( 'instanceReady', function( evt ) {
- var editor = evt.editor,
- editorCurrent = editor.name == 'editorCurrent',
- defaultToolbar = !( editor.config.toolbar || editor.config.toolbarGroups || editor.config.removeButtons ),
- pre = CKEDITOR.document.getById( editor.name + 'Cfg' ),
- output = '';
-
- if ( editorCurrent ) {
- // If default toolbar configuration has been modified, show "current toolbar" section.
- if ( !defaultToolbar )
- CKEDITOR.document.getById( 'currentToolbar' ).show();
- else
- return;
- }
-
- if ( !buttonsNames )
- buttonsNames = createButtonsNamesHash( editor.ui.items );
-
- // Toolbar isn't set explicitly, so it was created automatically from toolbarGroups.
- if ( !editor.config.toolbar ) {
- output +=
- '// Toolbar configuration generated automatically by the editor based on config.toolbarGroups.\n' +
- dumpToolbarConfiguration( editor ) +
- '\n\n' +
- '// Toolbar groups configuration.\n' +
- dumpToolbarConfiguration( editor, true )
- }
- // Toolbar groups doesn't count in this case - print only toolbar.
- else {
- output += '// Toolbar configuration.\n' +
- dumpToolbarConfiguration( editor );
- }
-
- // Recreate to avoid old IE from loosing whitespaces on filling <pre> content.
- var preOutput = pre.getOuterHtml().replace( /(?=<\/)/, output );
- CKEDITOR.dom.element.createFromHtml( preOutput ).replace( pre );
- } );
-
- CKEDITOR.replace( 'editorCurrent', { height: 100 } );
- CKEDITOR.replace( 'editorFull', {
- // Reset toolbar settings, so full toolbar will be generated automatically.
- toolbar: null,
- toolbarGroups: null,
- removeButtons: null,
- height: 100
- } );
-
- function dumpToolbarConfiguration( editor, printGroups ) {
- var output = [],
- toolbar = editor.toolbar;
-
- for ( var i = 0; i < toolbar.length; ++i ) {
- var group = dumpToolbarGroup( toolbar[ i ], printGroups );
- if ( group )
- output.push( group );
- }
-
- return 'config.toolbar' + ( printGroups ? 'Groups' : '' ) + ' = [\n\t' + output.join( ',\n\t' ) + '\n];';
- }
-
- function dumpToolbarGroup( group, printGroups ) {
- var output = [];
-
- if ( typeof group == 'string' )
- return '\'' + group + '\'';
- if ( CKEDITOR.tools.isArray( group ) )
- return dumpToolbarItems( group );
- // Skip group when printing entire toolbar configuration and there are no items in this group.
- if ( !printGroups && !group.items )
- return;
-
- if ( group.name )
- output.push( 'name: \'' + group.name + '\'' );
-
- if ( group.groups )
- output.push( 'groups: ' + dumpToolbarItems( group.groups ) );
-
- if ( !printGroups )
- output.push( 'items: ' + dumpToolbarItems( group.items ) );
-
- return '{ ' + output.join( ', ' ) + ' }';
- }
-
- function dumpToolbarItems( items ) {
- if ( typeof items == 'string' )
- return '\'' + items + '\'';
-
- var names = [],
- i, item;
-
- for ( var i = 0; i < items.length; ++i ) {
- item = items[ i ];
- if ( typeof item == 'string' )
- names.push( item );
- else {
- if ( item.type == CKEDITOR.UI_SEPARATOR )
- names.push( '-' );
- else
- names.push( buttonsNames[ item.name ] );
- }
- }
-
- return '[ \'' + names.join( '\', \'' ) + '\' ]';
- }
-
- // Creates { 'lowercased': 'LowerCased' } buttons names hash.
- function createButtonsNamesHash( items ) {
- var hash = {},
- name;
-
- for ( name in items ) {
- hash[ items[ name ].name ] = name;
- }
-
- return hash;
- }
-
-})();
- </script>
-
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/wysiwygarea/fullpage.html b/wqflask/wqflask/static/packages/ckeditor/samples/plugins/wysiwygarea/fullpage.html
deleted file mode 100644
index 174a25f3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/plugins/wysiwygarea/fullpage.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Full Page Editing &mdash; CKEditor Sample</title>
- <script src="../../../ckeditor.js"></script>
- <script src="../../../samples/sample.js"></script>
- <link rel="stylesheet" href="../../../samples/sample.css">
- <meta name="ckeditor-sample-required-plugins" content="sourcearea">
- <meta name="ckeditor-sample-name" content="Full page support">
- <meta name="ckeditor-sample-group" content="Plugins">
- <meta name="ckeditor-sample-description" content="CKEditor inserted with a JavaScript call and used to edit the whole page from &lt;html&gt; to &lt;/html&gt;.">
-</head>
-<body>
- <h1 class="samples">
- <a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Full Page Editing
- </h1>
- <div class="description">
- <p>
- This sample shows how to configure CKEditor to edit entire HTML pages, from the
- <code>&lt;html&gt;</code> tag to the <code>&lt;/html&gt;</code> tag.
- </p>
- <p>
- The CKEditor instance below is inserted with a JavaScript call using the following code:
- </p>
-<pre class="samples">
-CKEDITOR.replace( '<em>textarea_id</em>', {
- <strong>fullPage: true</strong>,
- <strong>allowedContent: true</strong>
-});
-</pre>
- <p>
- Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of
- the <code>&lt;textarea&gt;</code> element to be replaced.
- </p>
- <p>
- The <code><em>allowedContent</em></code> in the code above is set to <code>true</code> to disable content filtering.
- Setting this option is not obligatory, but in full page mode there is a strong chance that one may want be able to freely enter any HTML content in source mode without any limitations.
- </p>
- </div>
- <form action="../../../samples/sample_posteddata.php" method="post">
- <label for="editor1">
- CKEditor output the entire page including content outside of
- <code>&lt;body&gt;</code> element, so content like meta and title can be changed:
- </label>
- <textarea cols="80" id="editor1" name="editor1" rows="10">
- &lt;h1&gt;&lt;img align=&quot;right&quot; alt=&quot;Saturn V carrying Apollo 11&quot; src=&quot;../../../samples/assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
- </textarea>
- <script>
-
- CKEDITOR.replace( 'editor1', {
- fullPage: true,
- allowedContent: true,
- extraPlugins: 'wysiwygarea'
- });
-
- </script>
- <p>
- <input type="submit" value="Submit">
- </p>
- </form>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/readonly.html b/wqflask/wqflask/static/packages/ckeditor/samples/readonly.html
deleted file mode 100644
index 58f97069..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/readonly.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Using the CKEditor Read-Only API &mdash; CKEditor Sample</title>
- <script src="../ckeditor.js"></script>
- <link rel="stylesheet" href="sample.css">
- <script>
-
- var editor;
-
- // The instanceReady event is fired, when an instance of CKEditor has finished
- // its initialization.
- CKEDITOR.on( 'instanceReady', function( ev ) {
- editor = ev.editor;
-
- // Show this "on" button.
- document.getElementById( 'readOnlyOn' ).style.display = '';
-
- // Event fired when the readOnly property changes.
- editor.on( 'readOnly', function() {
- document.getElementById( 'readOnlyOn' ).style.display = this.readOnly ? 'none' : '';
- document.getElementById( 'readOnlyOff' ).style.display = this.readOnly ? '' : 'none';
- });
- });
-
- function toggleReadOnly( isReadOnly ) {
- // Change the read-only state of the editor.
- // http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly
- editor.setReadOnly( isReadOnly );
- }
-
- </script>
-</head>
-<body>
- <h1 class="samples">
- <a href="index.html">CKEditor Samples</a> &raquo; Using the CKEditor Read-Only API
- </h1>
- <div class="description">
- <p>
- This sample shows how to use the
- <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.editor-method-setReadOnly">setReadOnly</a></code>
- API to put editor into the read-only state that makes it impossible for users to change the editor contents.
- </p>
- <p>
- For details on how to create this setup check the source code of this sample page.
- </p>
- </div>
- <form action="sample_posteddata.php" method="post">
- <p>
- <textarea class="ckeditor" id="editor1" name="editor1" cols="100" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
- </p>
- <p>
- <input id="readOnlyOn" onclick="toggleReadOnly();" type="button" value="Make it read-only" style="display:none">
- <input id="readOnlyOff" onclick="toggleReadOnly( false );" type="button" value="Make it editable again" style="display:none">
- </p>
- </form>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/replacebyclass.html b/wqflask/wqflask/static/packages/ckeditor/samples/replacebyclass.html
deleted file mode 100644
index 6fc3e6fe..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/replacebyclass.html
+++ /dev/null
@@ -1,57 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Replace Textareas by Class Name &mdash; CKEditor Sample</title>
- <script src="../ckeditor.js"></script>
- <link rel="stylesheet" href="sample.css">
-</head>
-<body>
- <h1 class="samples">
- <a href="index.html">CKEditor Samples</a> &raquo; Replace Textarea Elements by Class Name
- </h1>
- <div class="description">
- <p>
- This sample shows how to automatically replace all <code>&lt;textarea&gt;</code> elements
- of a given class with a CKEditor instance.
- </p>
- <p>
- To replace a <code>&lt;textarea&gt;</code> element, simply assign it the <code>ckeditor</code>
- class, as in the code below:
- </p>
-<pre class="samples">
-&lt;textarea <strong>class="ckeditor</strong>" name="editor1"&gt;&lt;/textarea&gt;
-</pre>
- <p>
- Note that other <code>&lt;textarea&gt;</code> attributes (like <code>id</code> or <code>name</code>) need to be adjusted to your document.
- </p>
- </div>
- <form action="sample_posteddata.php" method="post">
- <p>
- <label for="editor1">
- Editor 1:
- </label>
- <textarea class="ckeditor" cols="80" id="editor1" name="editor1" rows="10">
- &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
- </textarea>
- </p>
- <p>
- <input type="submit" value="Submit">
- </p>
- </form>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/replacebycode.html b/wqflask/wqflask/static/packages/ckeditor/samples/replacebycode.html
deleted file mode 100644
index e5a4c5ba..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/replacebycode.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>Replace Textarea by Code &mdash; CKEditor Sample</title>
- <script src="../ckeditor.js"></script>
- <link href="sample.css" rel="stylesheet">
-</head>
-<body>
- <h1 class="samples">
- <a href="index.html">CKEditor Samples</a> &raquo; Replace Textarea Elements Using JavaScript Code
- </h1>
- <form action="sample_posteddata.php" method="post">
- <div class="description">
- <p>
- This editor is using an <code>&lt;iframe&gt;</code> element-based editing area, provided by the <strong>Wysiwygarea</strong> plugin.
- </p>
-<pre class="samples">
-CKEDITOR.replace( '<em>textarea_id</em>' )
-</pre>
- </div>
- <textarea cols="80" id="editor1" name="editor1" rows="10">
- &lt;h1&gt;&lt;img alt=&quot;Saturn V carrying Apollo 11&quot; class=&quot;right&quot; src=&quot;assets/sample.jpg&quot;/&gt; Apollo 11&lt;/h1&gt; &lt;p&gt;&lt;b&gt;Apollo 11&lt;/b&gt; was the spaceflight that landed the first humans, Americans &lt;a href=&quot;http://en.wikipedia.org/wiki/Neil_Armstrong&quot; title=&quot;Neil Armstrong&quot;&gt;Neil Armstrong&lt;/a&gt; and &lt;a href=&quot;http://en.wikipedia.org/wiki/Buzz_Aldrin&quot; title=&quot;Buzz Aldrin&quot;&gt;Buzz Aldrin&lt;/a&gt;, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.&lt;/p&gt; &lt;p&gt;Armstrong spent about &lt;s&gt;three and a half&lt;/s&gt; two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&amp;nbsp;kg) of lunar material for return to Earth. A third member of the mission, &lt;a href=&quot;http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)&quot; title=&quot;Michael Collins (astronaut)&quot;&gt;Michael Collins&lt;/a&gt;, piloted the &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_Command/Service_Module&quot; title=&quot;Apollo Command/Service Module&quot;&gt;command&lt;/a&gt; spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.&lt;/p&gt; &lt;h2&gt;Broadcasting and &lt;em&gt;quotes&lt;/em&gt; &lt;a id=&quot;quotes&quot; name=&quot;quotes&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;p&gt;Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;One small step for [a] man, one giant leap for mankind.&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;Apollo 11 effectively ended the &lt;a href=&quot;http://en.wikipedia.org/wiki/Space_Race&quot; title=&quot;Space Race&quot;&gt;Space Race&lt;/a&gt; and fulfilled a national goal proposed in 1961 by the late U.S. President &lt;a href=&quot;http://en.wikipedia.org/wiki/John_F._Kennedy&quot; title=&quot;John F. Kennedy&quot;&gt;John F. Kennedy&lt;/a&gt; in a speech before the United States Congress:&lt;/p&gt; &lt;blockquote&gt;&lt;p&gt;[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.&lt;/p&gt;&lt;/blockquote&gt; &lt;h2&gt;Technical details &lt;a id=&quot;tech-details&quot; name=&quot;tech-details&quot;&gt;&lt;/a&gt;&lt;/h2&gt; &lt;table align=&quot;right&quot; border=&quot;1&quot; bordercolor=&quot;#ccc&quot; cellpadding=&quot;5&quot; cellspacing=&quot;0&quot; style=&quot;border-collapse:collapse;margin:10px 0 10px 15px;&quot;&gt; &lt;caption&gt;&lt;strong&gt;Mission crew&lt;/strong&gt;&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th scope=&quot;col&quot;&gt;Position&lt;/th&gt; &lt;th scope=&quot;col&quot;&gt;Astronaut&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Commander&lt;/td&gt; &lt;td&gt;Neil A. Armstrong&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Command Module Pilot&lt;/td&gt; &lt;td&gt;Michael Collins&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Lunar Module Pilot&lt;/td&gt; &lt;td&gt;Edwin &amp;quot;Buzz&amp;quot; E. Aldrin, Jr.&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;Launched by a &lt;strong&gt;Saturn V&lt;/strong&gt; rocket from &lt;a href=&quot;http://en.wikipedia.org/wiki/Kennedy_Space_Center&quot; title=&quot;Kennedy Space Center&quot;&gt;Kennedy Space Center&lt;/a&gt; in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of &lt;a href=&quot;http://en.wikipedia.org/wiki/NASA&quot; title=&quot;NASA&quot;&gt;NASA&lt;/a&gt;&amp;#39;s Apollo program. The Apollo spacecraft had three parts:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Command Module&lt;/strong&gt; with a cabin for the three astronauts which was the only part which landed back on Earth&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Service Module&lt;/strong&gt; which supported the Command Module with propulsion, electrical power, oxygen and water&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Lunar Module&lt;/strong&gt; for landing on the Moon.&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;After being sent to the Moon by the Saturn V&amp;#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Mare_Tranquillitatis&quot; title=&quot;Mare Tranquillitatis&quot;&gt;Sea of Tranquility&lt;/a&gt;. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the &lt;a href=&quot;http://en.wikipedia.org/wiki/Pacific_Ocean&quot; title=&quot;Pacific Ocean&quot;&gt;Pacific Ocean&lt;/a&gt; on July 24.&lt;/p&gt; &lt;hr/&gt; &lt;p style=&quot;text-align: right;&quot;&gt;&lt;small&gt;Source: &lt;a href=&quot;http://en.wikipedia.org/wiki/Apollo_11&quot;&gt;Wikipedia.org&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;
- </textarea>
- <script>
-
- // This call can be placed at any point after the
- // <textarea>, or inside a <head><script> in a
- // window.onload event handler.
-
- // Replace the <textarea id="editor"> with an CKEditor
- // instance, using default configurations.
-
- CKEDITOR.replace( 'editor1' );
-
- </script>
- <p>
- <input type="submit" value="Submit">
- </p>
- </form>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/sample.css b/wqflask/wqflask/static/packages/ckeditor/samples/sample.css
deleted file mode 100644
index 8fd71aaa..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/sample.css
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-
-html, body, h1, h2, h3, h4, h5, h6, div, span, blockquote, p, address, form, fieldset, img, ul, ol, dl, dt, dd, li, hr, table, td, th, strong, em, sup, sub, dfn, ins, del, q, cite, var, samp, code, kbd, tt, pre
-{
- line-height: 1.5;
-}
-
-body
-{
- padding: 10px 30px;
-}
-
-input, textarea, select, option, optgroup, button, td, th
-{
- font-size: 100%;
-}
-
-pre
-{
- -moz-tab-size: 4;
- -o-tab-size: 4;
- -webkit-tab-size: 4;
- tab-size: 4;
-}
-
-pre, code, kbd, samp, tt
-{
- font-family: monospace,monospace;
- font-size: 1em;
-}
-
-body {
- width: 960px;
- margin: 0 auto;
-}
-
-code
-{
- background: #f3f3f3;
- border: 1px solid #ddd;
- padding: 1px 4px;
-
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
-}
-
-abbr
-{
- border-bottom: 1px dotted #555;
- cursor: pointer;
-}
-
-.new, .beta
-{
- text-transform: uppercase;
- font-size: 10px;
- font-weight: bold;
- padding: 1px 4px;
- margin: 0 0 0 5px;
- color: #fff;
- float: right;
-
- -moz-border-radius: 3px;
- -webkit-border-radius: 3px;
- border-radius: 3px;
-}
-
-.new
-{
- background: #FF7E00;
- border: 1px solid #DA8028;
- text-shadow: 0 1px 0 #C97626;
-
- -moz-box-shadow: 0 2px 3px 0 #FFA54E inset;
- -webkit-box-shadow: 0 2px 3px 0 #FFA54E inset;
- box-shadow: 0 2px 3px 0 #FFA54E inset;
-}
-
-.beta
-{
- background: #18C0DF;
- border: 1px solid #19AAD8;
- text-shadow: 0 1px 0 #048CAD;
- font-style: italic;
-
- -moz-box-shadow: 0 2px 3px 0 #50D4FD inset;
- -webkit-box-shadow: 0 2px 3px 0 #50D4FD inset;
- box-shadow: 0 2px 3px 0 #50D4FD inset;
-}
-
-h1.samples
-{
- color: #0782C1;
- font-size: 200%;
- font-weight: normal;
- margin: 0;
- padding: 0;
-}
-
-h1.samples a
-{
- color: #0782C1;
- text-decoration: none;
- border-bottom: 1px dotted #0782C1;
-}
-
-.samples a:hover
-{
- border-bottom: 1px dotted #0782C1;
-}
-
-h2.samples
-{
- color: #000000;
- font-size: 130%;
- margin: 15px 0 0 0;
- padding: 0;
-}
-
-p, blockquote, address, form, pre, dl, h1.samples, h2.samples
-{
- margin-bottom: 15px;
-}
-
-ul.samples
-{
- margin-bottom: 15px;
-}
-
-.clear
-{
- clear: both;
-}
-
-fieldset
-{
- margin: 0;
- padding: 10px;
-}
-
-body, input, textarea
-{
- color: #333333;
- font-family: Arial, Helvetica, sans-serif;
-}
-
-body
-{
- font-size: 75%;
-}
-
-a.samples
-{
- color: #189DE1;
- text-decoration: none;
-}
-
-form
-{
- margin: 0;
- padding: 0;
-}
-
-pre.samples
-{
- background-color: #F7F7F7;
- border: 1px solid #D7D7D7;
- overflow: auto;
- padding: 0.25em;
- white-space: pre-wrap; /* CSS 2.1 */
- word-wrap: break-word; /* IE7 */
-}
-
-#footer
-{
- clear: both;
- padding-top: 10px;
-}
-
-#footer hr
-{
- margin: 10px 0 15px 0;
- height: 1px;
- border: solid 1px gray;
- border-bottom: none;
-}
-
-#footer p
-{
- margin: 0 10px 10px 10px;
- float: left;
-}
-
-#footer #copy
-{
- float: right;
-}
-
-#outputSample
-{
- width: 100%;
- table-layout: fixed;
-}
-
-#outputSample thead th
-{
- color: #dddddd;
- background-color: #999999;
- padding: 4px;
- white-space: nowrap;
-}
-
-#outputSample tbody th
-{
- vertical-align: top;
- text-align: left;
-}
-
-#outputSample pre
-{
- margin: 0;
- padding: 0;
-}
-
-.description
-{
- border: 1px dotted #B7B7B7;
- margin-bottom: 10px;
- padding: 10px 10px 0;
- overflow: hidden;
-}
-
-label
-{
- display: block;
- margin-bottom: 6px;
-}
-
-/**
- * CKEditor editables are automatically set with the "cke_editable" class
- * plus cke_editable_(inline|themed) depending on the editor type.
- */
-
-/* Style a bit the inline editables. */
-.cke_editable.cke_editable_inline
-{
- cursor: pointer;
-}
-
-/* Once an editable element gets focused, the "cke_focus" class is
- added to it, so we can style it differently. */
-.cke_editable.cke_editable_inline.cke_focus
-{
- box-shadow: inset 0px 0px 20px 3px #ddd, inset 0 0 1px #000;
- outline: none;
- background: #eee;
- cursor: text;
-}
-
-/* Avoid pre-formatted overflows inline editable. */
-.cke_editable_inline pre
-{
- white-space: pre-wrap;
- word-wrap: break-word;
-}
-
-/**
- * Samples index styles.
- */
-
-.twoColumns,
-.twoColumnsLeft,
-.twoColumnsRight
-{
- overflow: hidden;
-}
-
-.twoColumnsLeft,
-.twoColumnsRight
-{
- width: 45%;
-}
-
-.twoColumnsLeft
-{
- float: left;
-}
-
-.twoColumnsRight
-{
- float: right;
-}
-
-dl.samples
-{
- padding: 0 0 0 40px;
-}
-dl.samples > dt
-{
- display: list-item;
- list-style-type: disc;
- list-style-position: outside;
- margin: 0 0 3px;
-}
-dl.samples > dd
-{
- margin: 0 0 3px;
-}
-.warning
-{
- color: #ff0000;
- background-color: #FFCCBA;
- border: 2px dotted #ff0000;
- padding: 15px 10px;
- margin: 10px 0;
-}
-
-/* Used on inline samples */
-
-blockquote
-{
- font-style: italic;
- font-family: Georgia, Times, "Times New Roman", serif;
- padding: 2px 0;
- border-style: solid;
- border-color: #ccc;
- border-width: 0;
-}
-
-.cke_contents_ltr blockquote
-{
- padding-left: 20px;
- padding-right: 8px;
- border-left-width: 5px;
-}
-
-.cke_contents_rtl blockquote
-{
- padding-left: 8px;
- padding-right: 20px;
- border-right-width: 5px;
-}
-
-img.right {
- border: 1px solid #ccc;
- float: right;
- margin-left: 15px;
- padding: 5px;
-}
-
-img.left {
- border: 1px solid #ccc;
- float: left;
- margin-right: 15px;
- padding: 5px;
-}
-
-.marker
-{
- background-color: Yellow;
-}
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/sample.js b/wqflask/wqflask/static/packages/ckeditor/samples/sample.js
deleted file mode 100644
index b25482d3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/sample.js
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md or http://ckeditor.com/license
- */
-
-// Tool scripts for the sample pages.
-// This file can be ignored and is not required to make use of CKEditor.
-
-( function() {
- CKEDITOR.on( 'instanceReady', function( ev ) {
- // Check for sample compliance.
- var editor = ev.editor,
- meta = CKEDITOR.document.$.getElementsByName( 'ckeditor-sample-required-plugins' ),
- requires = meta.length ? CKEDITOR.dom.element.get( meta[ 0 ] ).getAttribute( 'content' ).split( ',' ) : [],
- missing = [],
- i;
-
- if ( requires.length ) {
- for ( i = 0; i < requires.length; i++ ) {
- if ( !editor.plugins[ requires[ i ] ] )
- missing.push( '<code>' + requires[ i ] + '</code>' );
- }
-
- if ( missing.length ) {
- var warn = CKEDITOR.dom.element.createFromHtml(
- '<div class="warning">' +
- '<span>To fully experience this demo, the ' + missing.join( ', ' ) + ' plugin' + ( missing.length > 1 ? 's are' : ' is' ) + ' required.</span>' +
- '</div>'
- );
- warn.insertBefore( editor.container );
- }
- }
-
- // Set icons.
- var doc = new CKEDITOR.dom.document( document ),
- icons = doc.find( '.button_icon' );
-
- for ( i = 0; i < icons.count(); i++ ) {
- var icon = icons.getItem( i ),
- name = icon.getAttribute( 'data-icon' ),
- style = CKEDITOR.skin.getIconStyle( name, ( CKEDITOR.lang.dir == 'rtl' ) );
-
- icon.addClass( 'cke_button_icon' );
- icon.addClass( 'cke_button__' + name + '_icon' );
- icon.setAttribute( 'style', style );
- icon.setStyle( 'float', 'none' );
-
- }
- } );
-} )();
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/sample_posteddata.php b/wqflask/wqflask/static/packages/ckeditor/samples/sample_posteddata.php
deleted file mode 100644
index e4869b7c..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/sample_posteddata.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php /* <body><pre>
-
--------------------------------------------------------------------------------------------
- CKEditor - Posted Data
-
- We are sorry, but your Web server does not support the PHP language used in this script.
-
- Please note that CKEditor can be used with any other server-side language than just PHP.
- To save the content created with CKEditor you need to read the POST data on the server
- side and write it to a file or the database.
-
- Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- For licensing, see LICENSE.md or <a href="http://ckeditor.com/license">http://ckeditor.com/license</a>
--------------------------------------------------------------------------------------------
-
-</pre><div style="display:none"></body> */ include "assets/posteddata.php"; ?>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/tabindex.html b/wqflask/wqflask/static/packages/ckeditor/samples/tabindex.html
deleted file mode 100644
index 89521668..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/tabindex.html
+++ /dev/null
@@ -1,75 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>TAB Key-Based Navigation &mdash; CKEditor Sample</title>
- <script src="../ckeditor.js"></script>
- <link href="sample.css" rel="stylesheet">
- <style>
-
- .cke_focused,
- .cke_editable.cke_focused
- {
- outline: 3px dotted blue !important;
- *border: 3px dotted blue !important; /* For IE7 */
- }
-
- </style>
- <script>
-
- CKEDITOR.on( 'instanceReady', function( evt ) {
- var editor = evt.editor;
- editor.setData( 'This editor has it\'s tabIndex set to <strong>' + editor.tabIndex + '</strong>' );
-
- // Apply focus class name.
- editor.on( 'focus', function() {
- editor.container.addClass( 'cke_focused' );
- });
- editor.on( 'blur', function() {
- editor.container.removeClass( 'cke_focused' );
- });
-
- // Put startup focus on the first editor in tab order.
- if ( editor.tabIndex == 1 )
- editor.focus();
- });
-
- </script>
-</head>
-<body>
- <h1 class="samples">
- <a href="index.html">CKEditor Samples</a> &raquo; TAB Key-Based Navigation
- </h1>
- <div class="description">
- <p>
- This sample shows how tab key navigation among editor instances is
- affected by the <code>tabIndex</code> attribute from
- the original page element. Use TAB key to move between the editors.
- </p>
- </div>
- <p>
- <textarea class="ckeditor" cols="80" id="editor4" rows="10" tabindex="1"></textarea>
- </p>
- <div class="ckeditor" contenteditable="true" id="editor1" tabindex="4"></div>
- <p>
- <textarea class="ckeditor" cols="80" id="editor2" rows="10" tabindex="2"></textarea>
- </p>
- <p>
- <textarea class="ckeditor" cols="80" id="editor3" rows="10" tabindex="3"></textarea>
- </p>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/uicolor.html b/wqflask/wqflask/static/packages/ckeditor/samples/uicolor.html
deleted file mode 100644
index ce4b2a26..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/uicolor.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>UI Color Picker &mdash; CKEditor Sample</title>
- <script src="../ckeditor.js"></script>
- <link rel="stylesheet" href="sample.css">
-</head>
-<body>
- <h1 class="samples">
- <a href="index.html">CKEditor Samples</a> &raquo; UI Color
- </h1>
- <div class="description">
- <p>
- This sample shows how to automatically replace <code>&lt;textarea&gt;</code> elements
- with a CKEditor instance with an option to change the color of its user interface.<br>
- <strong>Note:</strong>The UI skin color feature depends on the CKEditor skin
- compatibility. The Moono and Kama skins are examples of skins that work with it.
- </p>
- </div>
- <form action="sample_posteddata.php" method="post">
- <p>
- This editor instance has a UI color value defined in configuration to change the skin color,
- To specify the color of the user interface, set the <code>uiColor</code> property:
- </p>
- <pre class="samples">
-CKEDITOR.replace( '<em>textarea_id</em>', {
- <strong>uiColor: '#14B8C4'</strong>
-});</pre>
- <p>
- Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of
- the <code>&lt;textarea&gt;</code> element to be replaced.
- </p>
- <p>
- <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
- <script>
-
- // Replace the <textarea id="editor"> with an CKEditor
- // instance, using default configurations.
- CKEDITOR.replace( 'editor1', {
- uiColor: '#14B8C4',
- toolbar: [
- [ 'Bold', 'Italic', '-', 'NumberedList', 'BulletedList', '-', 'Link', 'Unlink' ],
- [ 'FontSize', 'TextColor', 'BGColor' ]
- ]
- });
-
- </script>
- </p>
- <p>
- <input type="submit" value="Submit">
- </p>
- </form>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/uilanguages.html b/wqflask/wqflask/static/packages/ckeditor/samples/uilanguages.html
deleted file mode 100644
index 66acca43..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/uilanguages.html
+++ /dev/null
@@ -1,119 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>User Interface Globalization &mdash; CKEditor Sample</title>
- <script src="../ckeditor.js"></script>
- <script src="assets/uilanguages/languages.js"></script>
- <link rel="stylesheet" href="sample.css">
-</head>
-<body>
- <h1 class="samples">
- <a href="index.html">CKEditor Samples</a> &raquo; User Interface Languages
- </h1>
- <div class="description">
- <p>
- This sample shows how to automatically replace <code>&lt;textarea&gt;</code> elements
- with a CKEditor instance with an option to change the language of its user interface.
- </p>
- <p>
- It pulls the language list from CKEditor <code>_languages.js</code> file that contains the list of supported languages and creates
- a drop-down list that lets the user change the UI language.
- </p>
- <p>
- By default, CKEditor automatically localizes the editor to the language of the user.
- The UI language can be controlled with two configuration options:
- <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-language">language</a></code> and
- <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-defaultLanguage">
- defaultLanguage</a></code>. The <code>defaultLanguage</code> setting specifies the
- default CKEditor language to be used when a localization suitable for user's settings is not available.
- </p>
- <p>
- To specify the user interface language that will be used no matter what language is
- specified in user's browser or operating system, set the <code>language</code> property:
- </p>
-<pre class="samples">
-CKEDITOR.replace( '<em>textarea_id</em>', {
- // Load the German interface.
- <strong>language: 'de'</strong>
-});</pre>
- <p>
- Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of
- the <code>&lt;textarea&gt;</code> element to be replaced.
- </p>
- </div>
- <form action="sample_posteddata.php" method="post">
- <p>
- Available languages (<span id="count"> </span> languages!):<br>
- <script>
-
- document.write( '<select disabled="disabled" id="languages" onchange="createEditor( this.value );">' );
-
- // Get the language list from the _languages.js file.
- for ( var i = 0 ; i < window.CKEDITOR_LANGS.length ; i++ ) {
- document.write(
- '<option value="' + window.CKEDITOR_LANGS[i].code + '">' +
- window.CKEDITOR_LANGS[i].name +
- '</option>' );
- }
-
- document.write( '</select>' );
-
- </script>
- <br>
- <span style="color: #888888">
- (You may see strange characters if your system does not support the selected language)
- </span>
- </p>
- <p>
- <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;strong&gt;sample text&lt;/strong&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
- <script>
-
- // Set the number of languages.
- document.getElementById( 'count' ).innerHTML = window.CKEDITOR_LANGS.length;
-
- var editor;
-
- function createEditor( languageCode ) {
- if ( editor )
- editor.destroy();
-
- // Replace the <textarea id="editor"> with an CKEditor
- // instance, using default configurations.
- editor = CKEDITOR.replace( 'editor1', {
- language: languageCode,
-
- on: {
- instanceReady: function() {
- // Wait for the editor to be ready to set
- // the language combo.
- var languages = document.getElementById( 'languages' );
- languages.value = this.langCode;
- languages.disabled = false;
- }
- }
- });
- }
-
- // At page startup, load the default language:
- createEditor( '' );
-
- </script>
- </p>
- </form>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/samples/xhtmlstyle.html b/wqflask/wqflask/static/packages/ckeditor/samples/xhtmlstyle.html
deleted file mode 100644
index f219d11d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/samples/xhtmlstyle.html
+++ /dev/null
@@ -1,231 +0,0 @@
-<!DOCTYPE html>
-<!--
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
--->
-<html>
-<head>
- <meta charset="utf-8">
- <title>XHTML Compliant Output &mdash; CKEditor Sample</title>
- <meta name="ckeditor-sample-required-plugins" content="sourcearea">
- <script src="../ckeditor.js"></script>
- <script src="../samples/sample.js"></script>
- <link href="sample.css" rel="stylesheet">
-</head>
-<body>
- <h1 class="samples">
- <a href="index.html">CKEditor Samples</a> &raquo; Producing XHTML Compliant Output
- </h1>
- <div class="description">
- <p>
- This sample shows how to configure CKEditor to output valid
- <a class="samples" href="http://www.w3.org/TR/xhtml11/">XHTML 1.1</a> code.
- Deprecated elements (<code>&lt;font&gt;</code>, <code>&lt;u&gt;</code>) or attributes
- (<code>size</code>, <code>face</code>) will be replaced with XHTML compliant code.
- </p>
- <p>
- To add a CKEditor instance outputting valid XHTML code, load the editor using a standard
- JavaScript call and define CKEditor features to use the XHTML compliant elements and styles.
- </p>
- <p>
- A snippet of the configuration code can be seen below; check the source of this page for
- full definition:
- </p>
-<pre class="samples">
-CKEDITOR.replace( '<em>textarea_id</em>', {
- contentsCss: 'assets/outputxhtml.css',
-
- coreStyles_bold: {
- element: 'span',
- attributes: { 'class': 'Bold' }
- },
- coreStyles_italic: {
- element: 'span',
- attributes: { 'class': 'Italic' }
- },
-
- ...
-});</pre>
- </div>
- <form action="sample_posteddata.php" method="post">
- <p>
- <label for="editor1">
- Editor 1:
- </label>
- <textarea cols="80" id="editor1" name="editor1" rows="10">&lt;p&gt;This is some &lt;span class="Bold"&gt;sample text&lt;/span&gt;. You are using &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt;.&lt;/p&gt;</textarea>
- <script>
-
- CKEDITOR.replace( 'editor1', {
- /*
- * Style sheet for the contents
- */
- contentsCss: 'assets/outputxhtml/outputxhtml.css',
-
- /*
- * Special allowed content rules for spans used by
- * font face, size, and color buttons.
- *
- * Note: all rules have been written separately so
- * it was possible to specify required classes.
- */
- extraAllowedContent: 'span(!FontColor1);span(!FontColor2);span(!FontColor3);' +
- 'span(!FontColor1BG);span(!FontColor2BG);span(!FontColor3BG);' +
- 'span(!FontComic);span(!FontCourier);span(!FontTimes);' +
- 'span(!FontSmaller);span(!FontLarger);span(!FontSmall);span(!FontBig);span(!FontDouble)',
-
- /*
- * Core styles.
- */
- coreStyles_bold: {
- element: 'span',
- attributes: { 'class': 'Bold' }
- },
- coreStyles_italic: {
- element: 'span',
- attributes: { 'class': 'Italic' }
- },
- coreStyles_underline: {
- element: 'span',
- attributes: { 'class': 'Underline' }
- },
- coreStyles_strike: {
- element: 'span',
- attributes: { 'class': 'StrikeThrough' },
- overrides: 'strike'
- },
- coreStyles_subscript: {
- element: 'span',
- attributes: { 'class': 'Subscript' },
- overrides: 'sub'
- },
- coreStyles_superscript: {
- element: 'span',
- attributes: { 'class': 'Superscript' },
- overrides: 'sup'
- },
-
- /*
- * Font face.
- */
-
- // List of fonts available in the toolbar combo. Each font definition is
- // separated by a semi-colon (;). We are using class names here, so each font
- // is defined by {Combo Label}/{Class Name}.
- font_names: 'Comic Sans MS/FontComic;Courier New/FontCourier;Times New Roman/FontTimes',
-
- // Define the way font elements will be applied to the document. The "span"
- // element will be used. When a font is selected, the font name defined in the
- // above list is passed to this definition with the name "Font", being it
- // injected in the "class" attribute.
- // We must also instruct the editor to replace span elements that are used to
- // set the font (Overrides).
- font_style: {
- element: 'span',
- attributes: { 'class': '#(family)' },
- overrides: [
- {
- element: 'span',
- attributes: {
- 'class': /^Font(?:Comic|Courier|Times)$/
- }
- }
- ]
- },
-
- /*
- * Font sizes.
- */
- fontSize_sizes: 'Smaller/FontSmaller;Larger/FontLarger;8pt/FontSmall;14pt/FontBig;Double Size/FontDouble',
- fontSize_style: {
- element: 'span',
- attributes: { 'class': '#(size)' },
- overrides: [
- {
- element: 'span',
- attributes: {
- 'class': /^Font(?:Smaller|Larger|Small|Big|Double)$/
- }
- }
- ]
- } ,
-
- /*
- * Font colors.
- */
- colorButton_enableMore: false,
-
- colorButton_colors: 'FontColor1/FF9900,FontColor2/0066CC,FontColor3/F00',
- colorButton_foreStyle: {
- element: 'span',
- attributes: { 'class': '#(color)' },
- overrides: [
- {
- element: 'span',
- attributes: {
- 'class': /^FontColor(?:1|2|3)$/
- }
- }
- ]
- },
-
- colorButton_backStyle: {
- element: 'span',
- attributes: { 'class': '#(color)BG' },
- overrides: [
- {
- element: 'span',
- attributes: {
- 'class': /^FontColor(?:1|2|3)BG$/
- }
- }
- ]
- },
-
- /*
- * Indentation.
- */
- indentClasses: [ 'Indent1', 'Indent2', 'Indent3' ],
-
- /*
- * Paragraph justification.
- */
- justifyClasses: [ 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyFull' ],
-
- /*
- * Styles combo.
- */
- stylesSet: [
- { name: 'Strong Emphasis', element: 'strong' },
- { name: 'Emphasis', element: 'em' },
-
- { name: 'Computer Code', element: 'code' },
- { name: 'Keyboard Phrase', element: 'kbd' },
- { name: 'Sample Text', element: 'samp' },
- { name: 'Variable', element: 'var' },
-
- { name: 'Deleted Text', element: 'del' },
- { name: 'Inserted Text', element: 'ins' },
-
- { name: 'Cited Work', element: 'cite' },
- { name: 'Inline Quotation', element: 'q' }
- ]
- });
-
- </script>
- </p>
- <p>
- <input type="submit" value="Submit">
- </p>
- </form>
- <div id="footer">
- <hr>
- <p>
- CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
- </p>
- <p id="copy">
- Copyright &copy; 2003-2014, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
- Knabben. All rights reserved.
- </p>
- </div>
-</body>
-</html>
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog.css
deleted file mode 100644
index 1504938d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie.css
deleted file mode 100644
index 93cf7aed..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie7.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie7.css
deleted file mode 100644
index 4b98ae57..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie7.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_title{zoom:1}.cke_dialog_footer{border-top:1px solid #bfbfbf}.cke_dialog_footer_buttons{position:static}.cke_dialog_footer_buttons a.cke_dialog_ui_button{vertical-align:top}.cke_dialog .cke_resizer_ltr{padding-left:4px}.cke_dialog .cke_resizer_rtl{padding-right:4px}.cke_dialog_ui_input_text,.cke_dialog_ui_input_password,.cke_dialog_ui_input_textarea,.cke_dialog_ui_input_select{padding:0!important}.cke_dialog_ui_checkbox_input,.cke_dialog_ui_ratio_input,.cke_btn_reset,.cke_btn_locked,.cke_btn_unlocked{border:1px solid transparent!important} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie8.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie8.css
deleted file mode 100644
index 4f2edca9..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_ie8.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{display:block} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_iequirks.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_iequirks.css
deleted file mode 100644
index bb36a95d..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/dialog_iequirks.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-.cke_dialog{visibility:visible}.cke_dialog_body{z-index:1;background:#eaeaea;border:1px solid #b2b2b2;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_dialog strong{font-weight:bold}.cke_dialog_title{font-weight:bold;font-size:13px;cursor:move;position:relative;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #999;padding:6px 10px;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_dialog_contents{background-color:#fff;overflow:auto;padding:15px 10px 5px 10px;margin-top:30px;border-top:1px solid #bfbfbf;-moz-border-radius:0 0 3px 3px;-webkit-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px}.cke_dialog_contents_body{overflow:auto;padding:17px 10px 5px 10px;margin-top:22px}.cke_dialog_footer{text-align:right;position:relative;border:0;outline:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;-moz-border-radius:0 0 2px 2px;-webkit-border-radius:0 0 2px 2px;border-radius:0 0 2px 2px;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_rtl .cke_dialog_footer{text-align:left}.cke_hc .cke_dialog_footer{outline:0;border-top:1px solid #fff}.cke_dialog .cke_resizer{margin-top:22px}.cke_dialog .cke_resizer_rtl{margin-left:5px}.cke_dialog .cke_resizer_ltr{margin-right:5px}.cke_dialog_tabs{height:24px;display:inline-block;margin:5px 0 0;position:absolute;z-index:2;left:10px}.cke_rtl .cke_dialog_tabs{right:10px}a.cke_dialog_tab{height:16px;padding:4px 8px;margin-right:3px;display:inline-block;cursor:pointer;line-height:16px;outline:0;color:#595959;border:1px solid #bfbfbf;-moz-border-radius:3px 3px 0 0;-webkit-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;background:#d4d4d4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fafafa),to(#ededed));background-image:-moz-linear-gradient(top,#fafafa,#ededed);background-image:-webkit-linear-gradient(top,#fafafa,#ededed);background-image:-o-linear-gradient(top,#fafafa,#ededed);background-image:-ms-linear-gradient(top,#fafafa,#ededed);background-image:linear-gradient(top,#fafafa,#ededed);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#fafafa',endColorstr='#ededed')}.cke_rtl a.cke_dialog_tab{margin-right:0;margin-left:3px}a.cke_dialog_tab:hover{background:#ebebeb;background:-moz-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ebebeb),color-stop(100%,#dfdfdf));background:-webkit-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-o-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:-ms-linear-gradient(top,#ebebeb 0,#dfdfdf 100%);background:linear-gradient(to bottom,#ebebeb 0,#dfdfdf 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ebebeb',endColorstr='#dfdfdf',GradientType=0)}a.cke_dialog_tab_selected{background:#fff;color:#383838;border-bottom-color:#fff;cursor:default;filter:none}a.cke_dialog_tab_selected:hover{background:#ededed;background:-moz-linear-gradient(top,#ededed 0,#fff 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#ededed),color-stop(100%,#fff));background:-webkit-linear-gradient(top,#ededed 0,#fff 100%);background:-o-linear-gradient(top,#ededed 0,#fff 100%);background:-ms-linear-gradient(top,#ededed 0,#fff 100%);background:linear-gradient(to bottom,#ededed 0,#fff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed',endColorstr='#ffffff',GradientType=0)}.cke_hc a.cke_dialog_tab:hover,.cke_hc a.cke_dialog_tab_selected{border:3px solid;padding:2px 6px}a.cke_dialog_tab_disabled{color:#bababa;cursor:default}.cke_single_page .cke_dialog_tabs{display:none}.cke_single_page .cke_dialog_contents{padding-top:5px;margin-top:0;border-top:0}.cke_dialog_close_button{background-image:url(images/close.png);background-repeat:no-repeat;background-position:50%;position:absolute;cursor:pointer;text-align:center;height:20px;width:20px;top:5px;z-index:5;opacity:.8;filter:alpha(opacity = 80)}.cke_dialog_close_button:hover{opacity:1;filter:alpha(opacity = 100)}.cke_hidpi .cke_dialog_close_button{background-image:url(images/hidpi/close.png);background-size:16px}.cke_dialog_close_button span{display:none}.cke_hc .cke_dialog_close_button span{display:inline;cursor:pointer;font-weight:bold;position:relative;top:3px}.cke_ltr .cke_dialog_close_button{right:5px}.cke_rtl .cke_dialog_close_button{left:6px}.cke_dialog_close_button{top:4px}div.cke_disabled .cke_dialog_ui_labeled_content div *{background-color:#ddd;cursor:default}.cke_dialog_ui_vbox table,.cke_dialog_ui_hbox table{margin:auto}.cke_dialog_ui_vbox_child{padding:5px 0}.cke_dialog_ui_hbox{width:100%}.cke_dialog_ui_hbox_first,.cke_dialog_ui_hbox_child,.cke_dialog_ui_hbox_last{vertical-align:top}.cke_ltr .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_ui_hbox_child{padding-right:10px}.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_child{padding-left:10px}.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_ltr .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-right:5px}.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_footer_buttons .cke_dialog_ui_hbox_child{padding-left:5px;padding-right:0}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:1px solid}textarea.cke_dialog_ui_input_textarea{overflow:auto;resize:none}input.cke_dialog_ui_input_text,input.cke_dialog_ui_input_password,textarea.cke_dialog_ui_input_textarea{background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:4px 6px;outline:0;width:100%;*width:95%;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}input.cke_dialog_ui_input_text:hover,input.cke_dialog_ui_input_password:hover,textarea.cke_dialog_ui_input_textarea:hover{border:1px solid #aeb3b9;border-top-color:#a0a6ad}input.cke_dialog_ui_input_text:focus,input.cke_dialog_ui_input_password:focus,textarea.cke_dialog_ui_input_textarea:focus,select.cke_dialog_ui_input_select:focus{outline:0;border:1px solid #139ff7;border-top-color:#1392e9}a.cke_dialog_ui_button{display:inline-block;*display:inline;*zoom:1;padding:4px 0;margin:0;text-align:center;color:#333;vertical-align:middle;cursor:pointer;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}span.cke_dialog_ui_button{padding:0 10px}a.cke_dialog_ui_button:hover{border-color:#9e9e9e;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}a.cke_dialog_ui_button:focus,a.cke_dialog_ui_button:active{border-color:#969696;outline:0;-moz-box-shadow:0 0 6px rgba(0,0,0,.4) inset;-webkit-box-shadow:0 0 6px rgba(0,0,0,.4) inset;box-shadow:0 0 6px rgba(0,0,0,.4) inset}.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button:focus,.cke_hc a.cke_dialog_ui_button:active{border:3px solid;padding-top:1px;padding-bottom:1px}.cke_hc a.cke_dialog_ui_button:hover span,.cke_hc a.cke_dialog_ui_button:focus span,.cke_hc a.cke_dialog_ui_button:active span{padding-left:10px;padding-right:10px}.cke_dialog_footer_buttons a.cke_dialog_ui_button span{color:inherit;font-size:12px;font-weight:bold;line-height:18px;padding:0 12px}a.cke_dialog_ui_button_ok{color:#fff;text-shadow:0 -1px 0 #55830c;border-color:#62a60a #62a60a #4d9200;background:#69b10b;background-image:-webkit-gradient(linear,0 0,0 100%,from(#9ad717),to(#69b10b));background-image:-webkit-linear-gradient(top,#9ad717,#69b10b);background-image:-o-linear-gradient(top,#9ad717,#69b10b);background-image:linear-gradient(to bottom,#9ad717,#69b10b);background-image:-moz-linear-gradient(top,#9ad717,#69b10b);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#9ad717',endColorstr='#69b10b')}a.cke_dialog_ui_button_ok:hover{border-color:#5b9909 #5b9909 #478500;background:#88be14;background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#88be14),color-stop(100%,#5d9c0a));background:-webkit-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:-o-linear-gradient(top,#88be14 0,#5d9c0a 100%);background:linear-gradient(to bottom,#88be14 0,#5d9c0a 100%);background:-moz-linear-gradient(top,#88be14 0,#5d9c0a 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#88be14',endColorstr='#5d9c0a',GradientType=0)}a.cke_dialog_ui_button span{text-shadow:0 1px 0 #fff}a.cke_dialog_ui_button_ok span{text-shadow:0 -1px 0 #55830c}span.cke_dialog_ui_button{cursor:pointer}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active,a.cke_dialog_ui_button_cancel:focus,a.cke_dialog_ui_button_cancel:active{border-width:2px;padding:3px 0}a.cke_dialog_ui_button_ok:focus,a.cke_dialog_ui_button_ok:active{border-color:#568c0a}a.cke_dialog_ui_button_ok:focus span,a.cke_dialog_ui_button_ok:active span,a.cke_dialog_ui_button_cancel:focus span,a.cke_dialog_ui_button_cancel:active span{padding:0 11px}.cke_dialog_footer_buttons{display:inline-table;margin:5px;width:auto;position:relative;vertical-align:middle}div.cke_dialog_ui_input_select{display:table}select.cke_dialog_ui_input_select{height:25px;line-height:25px;background-color:#fff;border:1px solid #c9cccf;border-top-color:#aeb3b9;padding:3px 3px 3px 6px;outline:0;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.15) inset;box-shadow:0 1px 2px rgba(0,0,0,.15) inset}.cke_dialog_ui_input_file{width:100%;height:25px}.cke_hc .cke_dialog_ui_labeled_content input:focus,.cke_hc .cke_dialog_ui_labeled_content select:focus,.cke_hc .cke_dialog_ui_labeled_content textarea:focus{outline:1px dotted}.cke_dialog .cke_dark_background{background-color:#dedede}.cke_dialog .cke_light_background{background-color:#ebebeb}.cke_dialog .cke_centered{text-align:center}.cke_dialog a.cke_btn_reset{float:right;background:url(images/refresh.png) top left no-repeat;width:16px;height:16px;border:1px none;font-size:1px}.cke_hidpi .cke_dialog a.cke_btn_reset{background-size:16px;background-image:url(images/hidpi/refresh.png)}.cke_rtl .cke_dialog a.cke_btn_reset{float:left}.cke_dialog a.cke_btn_locked,.cke_dialog a.cke_btn_unlocked{float:left;width:16px;height:16px;background-repeat:no-repeat;border:none 1px;font-size:1px}.cke_dialog a.cke_btn_locked .cke_icon{display:none}.cke_rtl .cke_dialog a.cke_btn_locked,.cke_rtl .cke_dialog a.cke_btn_unlocked{float:right}.cke_dialog a.cke_btn_locked{background-image:url(images/lock.png)}.cke_dialog a.cke_btn_unlocked{background-image:url(images/lock-open.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked,.cke_hidpi .cke_dialog a.cke_btn_locked{background-size:16px}.cke_hidpi .cke_dialog a.cke_btn_locked{background-image:url(images/hidpi/lock.png)}.cke_hidpi .cke_dialog a.cke_btn_unlocked{background-image:url(images/hidpi/lock-open.png)}.cke_dialog .cke_btn_over{border:outset 1px;cursor:pointer}.cke_dialog .ImagePreviewBox{border:2px ridge black;overflow:scroll;height:200px;width:300px;padding:2px;background-color:white}.cke_dialog .ImagePreviewBox table td{white-space:normal}.cke_dialog .ImagePreviewLoader{position:absolute;white-space:normal;overflow:hidden;height:160px;width:230px;margin:2px;padding:2px;opacity:.9;filter:alpha(opacity = 90);background-color:#e4e4e4}.cke_dialog .FlashPreviewBox{white-space:normal;border:2px ridge black;overflow:auto;height:160px;width:390px;padding:2px;background-color:white}.cke_dialog .cke_pastetext{width:346px;height:170px}.cke_dialog .cke_pastetext textarea{width:340px;height:170px;resize:none}.cke_dialog iframe.cke_pasteframe{width:346px;height:130px;background-color:white;border:1px solid #aeb3b9;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px}.cke_dialog .cke_hand{cursor:pointer}.cke_disabled{color:#a0a0a0}.cke_dialog_body .cke_label{display:none}.cke_dialog_body label{display:inline;margin-bottom:auto;cursor:default}.cke_dialog_body label.cke_required{font-weight:bold}a.cke_smile{overflow:hidden;display:block;text-align:center;padding:.3em 0}a.cke_smile img{vertical-align:middle}a.cke_specialchar{cursor:inherit;display:block;height:1.25em;padding:.2em .3em;text-align:center}a.cke_smile,a.cke_specialchar{border:1px solid transparent}a.cke_smile:hover,a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:hover,a.cke_specialchar:focus,a.cke_specialchar:active{background:#fff;outline:0}a.cke_smile:hover,a.cke_specialchar:hover{border-color:#888}a.cke_smile:focus,a.cke_smile:active,a.cke_specialchar:focus,a.cke_specialchar:active{border-color:#139ff7}.cke_dialog_contents a.colorChooser{display:block;margin-top:6px;margin-left:10px;width:80px}.cke_rtl .cke_dialog_contents a.colorChooser{margin-right:10px}.cke_dialog_ui_checkbox_input:focus,.cke_dialog_ui_radio_input:focus,.cke_btn_over{outline:1px dotted #696969}.cke_iframe_shim{display:block;position:absolute;top:0;left:0;z-index:-1;filter:alpha(opacity = 0);width:100%;height:100%}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{padding-right:2px}.cke_rtl div.cke_dialog_ui_input_text,.cke_rtl div.cke_dialog_ui_input_password{padding-left:2px}.cke_rtl div.cke_dialog_ui_input_text{padding-right:1px}.cke_rtl .cke_dialog_ui_vbox_child,.cke_rtl .cke_dialog_ui_hbox_child,.cke_rtl .cke_dialog_ui_hbox_first,.cke_rtl .cke_dialog_ui_hbox_last{padding-right:2px!important}.cke_hc .cke_dialog_title,.cke_hc .cke_dialog_footer,.cke_hc a.cke_dialog_tab,.cke_hc a.cke_dialog_ui_button,.cke_hc a.cke_dialog_ui_button:hover,.cke_hc a.cke_dialog_ui_button_ok,.cke_hc a.cke_dialog_ui_button_ok:hover{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_hc div.cke_dialog_ui_input_text,.cke_hc div.cke_dialog_ui_input_password,.cke_hc div.cke_dialog_ui_input_textarea,.cke_hc div.cke_dialog_ui_input_select,.cke_hc div.cke_dialog_ui_input_file{border:0}.cke_dialog_footer{filter:""} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor.css
deleted file mode 100644
index 324526ce..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_gecko.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_gecko.css
deleted file mode 100644
index 22df7efb..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_gecko.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}.cke_bottom{padding-bottom:3px}.cke_combo_text{margin-bottom:-1px;margin-top:1px}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie.css
deleted file mode 100644
index 42119784..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie7.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie7.css
deleted file mode 100644
index a6607e88..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie7.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_toolbox{display:inline-block;padding-bottom:5px;height:100%}.cke_rtl .cke_toolbox{padding-bottom:0}.cke_toolbar{margin-bottom:5px}.cke_rtl .cke_toolbar{margin-bottom:0}.cke_toolgroup{height:26px}.cke_toolgroup,.cke_combo{position:relative}a.cke_button{float:none;vertical-align:top}.cke_toolbar_separator{display:inline-block;float:none;vertical-align:top;background-color:#c0c0c0}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_rtl .cke_button_arrow{padding-top:8px;margin-right:2px}.cke_rtl .cke_combo_inlinelabel{display:table-cell;vertical-align:middle}.cke_menubutton{display:block;height:24px}.cke_menubutton_inner{display:block;position:relative}.cke_menubutton_icon{height:16px;width:16px}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:inline-block}.cke_menubutton_label{width:auto;vertical-align:top;line-height:24px;height:24px;margin:0 10px 0 0}.cke_menuarrow{width:5px;height:6px;padding:0;position:absolute;right:8px;top:10px;background-position:0 0}.cke_rtl .cke_menubutton_icon{position:absolute;right:0;top:0}.cke_rtl .cke_menubutton_label{float:right;clear:both;margin:0 24px 0 10px}.cke_hc .cke_rtl .cke_menubutton_label{margin-right:0}.cke_rtl .cke_menuarrow{left:8px;right:auto;background-position:0 -24px}.cke_hc .cke_menuarrow{top:5px;padding:0 5px}.cke_rtl input.cke_dialog_ui_input_text,.cke_rtl input.cke_dialog_ui_input_password{position:relative}.cke_wysiwyg_div{padding-top:0!important;padding-bottom:0!important}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie8.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie8.css
deleted file mode 100644
index c10fce39..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_ie8.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_toolbox_collapser .cke_arrow{border-width:4px}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{border-width:3px}.cke_toolbox_collapser .cke_arrow{margin-top:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_iequirks.css b/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_iequirks.css
deleted file mode 100644
index 61637ae7..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/editor_iequirks.css
+++ /dev/null
@@ -1,5 +0,0 @@
-/*
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.md or http://ckeditor.com/license
-*/
-.cke_reset{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none}.cke_reset_all,.cke_reset_all *{margin:0;padding:0;border:0;background:transparent;text-decoration:none;width:auto;height:auto;vertical-align:baseline;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;position:static;-webkit-transition:none;-moz-transition:none;-ms-transition:none;transition:none;border-collapse:collapse;font:normal normal normal 12px Arial,Helvetica,Tahoma,Verdana,Sans-Serif;color:#000;text-align:left;white-space:nowrap;cursor:auto;float:none}.cke_reset_all .cke_rtl *{text-align:right}.cke_reset_all iframe{vertical-align:inherit}.cke_reset_all textarea{white-space:pre}.cke_reset_all textarea,.cke_reset_all input[type="text"],.cke_reset_all input[type="password"]{cursor:text}.cke_reset_all textarea[disabled],.cke_reset_all input[type="text"][disabled],.cke_reset_all input[type="password"][disabled]{cursor:default}.cke_reset_all fieldset{padding:10px;border:2px groove #e0dfe3}.cke_reset_all select{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.cke_chrome{display:block;border:1px solid #b6b6b6;padding:0;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_inner{display:block;-webkit-touch-callout:none;background:#fff;padding:0}.cke_float{border:0}.cke_float .cke_inner{padding-bottom:0}.cke_top,.cke_contents,.cke_bottom{display:block;overflow:hidden}.cke_top{border-bottom:1px solid #b6b6b6;padding:6px 8px 2px;white-space:normal;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_float .cke_top{border:1px solid #b6b6b6;border-bottom-color:#999}.cke_bottom{padding:6px 8px 2px;position:relative;border-top:1px solid #bfbfbf;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#ebebeb),to(#cfd1cf));background-image:-moz-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-webkit-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-o-linear-gradient(top,#ebebeb,#cfd1cf);background-image:-ms-linear-gradient(top,#ebebeb,#cfd1cf);background-image:linear-gradient(top,#ebebeb,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ebebeb',endColorstr='#cfd1cf')}.cke_browser_ios .cke_contents{overflow-y:auto;-webkit-overflow-scrolling:touch}.cke_resizer{width:0;height:0;overflow:hidden;width:0;height:0;overflow:hidden;border-width:10px 10px 0 0;border-color:transparent #666 transparent transparent;border-style:dashed solid dashed dashed;font-size:0;vertical-align:bottom;margin-top:6px;margin-bottom:2px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,.3);box-shadow:0 1px 0 rgba(255,255,255,.3)}.cke_hc .cke_resizer{font-size:15px;width:auto;height:auto;border-width:0}.cke_resizer_ltr{cursor:se-resize;float:right;margin-right:-4px}.cke_resizer_rtl{border-width:10px 0 0 10px;border-color:transparent transparent transparent #a5a5a5;border-style:dashed dashed dashed solid;cursor:sw-resize;float:left;margin-left:-4px;right:auto}.cke_wysiwyg_div{display:block;height:100%;overflow:auto;padding:0 8px;outline-style:none;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}.cke_panel{visibility:visible;width:120px;height:100px;overflow:hidden;background-color:#fff;border:1px solid #b6b6b6;border-bottom-color:#999;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 0 3px rgba(0,0,0,.15);-webkit-box-shadow:0 0 3px rgba(0,0,0,.15);box-shadow:0 0 3px rgba(0,0,0,.15)}.cke_menu_panel{padding:0;margin:0}.cke_combopanel{width:150px;height:170px}.cke_panel_frame{width:100%;height:100%;font-size:12px;overflow:auto;overflow-x:hidden}.cke_panel_container{overflow-y:auto;overflow-x:hidden}.cke_panel_list{list-style-type:none;margin:3px;padding:0;white-space:nowrap}.cke_panel_listItem{margin:0;padding-bottom:1px}.cke_panel_listItem a{padding:3px 4px;display:block;border:1px solid #fff;color:inherit!important;text-decoration:none;overflow:hidden;text-overflow:ellipsis;-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px}* html .cke_panel_listItem a{width:100%;color:#000}*:first-child+html .cke_panel_listItem a{color:#000}.cke_panel_listItem.cke_selected a{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_panel_listItem a:hover,.cke_panel_listItem a:focus,.cke_panel_listItem a:active{border-color:#dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_hc .cke_panel_listItem a{border-style:none}.cke_hc .cke_panel_listItem a:hover,.cke_hc .cke_panel_listItem a:focus,.cke_hc .cke_panel_listItem a:active{border:2px solid;padding:1px 2px}.cke_panel_grouptitle{cursor:default;font-size:11px;font-weight:bold;white-space:nowrap;margin:0;padding:4px 6px;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.75);border-bottom:1px solid #b6b6b6;-moz-border-radius:2px 2px 0 0;-webkit-border-radius:2px 2px 0 0;border-radius:2px 2px 0 0;-moz-box-shadow:0 1px 0 #fff inset;-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset;background:#cfd1cf;background-image:-webkit-gradient(linear,left top,left bottom,from(#f5f5f5),to(#cfd1cf));background-image:-moz-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-webkit-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-o-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:-ms-linear-gradient(top,#f5f5f5,#cfd1cf);background-image:linear-gradient(top,#f5f5f5,#cfd1cf);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f5f5f5',endColorstr='#cfd1cf')}.cke_panel_listItem p,.cke_panel_listItem h1,.cke_panel_listItem h2,.cke_panel_listItem h3,.cke_panel_listItem h4,.cke_panel_listItem h5,.cke_panel_listItem h6,.cke_panel_listItem pre{margin-top:0;margin-bottom:0}.cke_colorblock{padding:3px;font-size:11px;font-family:'Microsoft Sans Serif',Tahoma,Arial,Verdana,Sans-Serif}.cke_colorblock,.cke_colorblock a{text-decoration:none;color:#000}span.cke_colorbox{width:10px;height:10px;border:#808080 1px solid;float:left}.cke_rtl span.cke_colorbox{float:right}a.cke_colorbox{border:#fff 1px solid;padding:2px;float:left;width:12px;height:12px}.cke_rtl a.cke_colorbox{float:right}a:hover.cke_colorbox,a:focus.cke_colorbox,a:active.cke_colorbox{border:#b6b6b6 1px solid;background-color:#e5e5e5}a.cke_colorauto,a.cke_colormore{border:#fff 1px solid;padding:2px;display:block;cursor:pointer}a:hover.cke_colorauto,a:hover.cke_colormore,a:focus.cke_colorauto,a:focus.cke_colormore,a:active.cke_colorauto,a:active.cke_colormore{border:#b6b6b6 1px solid;background-color:#e5e5e5}.cke_toolbar{float:left}.cke_rtl .cke_toolbar{float:right}.cke_toolgroup{float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_hc .cke_toolgroup{border:0;margin-right:10px;margin-bottom:10px}.cke_rtl .cke_toolgroup{float:right;margin-left:6px;margin-right:0}a.cke_button{display:inline-block;height:18px;padding:4px 6px;outline:0;cursor:default;float:left;border:0}.cke_ltr .cke_button:last-child,.cke_rtl .cke_button:first-child{-moz-border-radius:0 2px 2px 0;-webkit-border-radius:0 2px 2px 0;border-radius:0 2px 2px 0}.cke_ltr .cke_button:first-child,.cke_rtl .cke_button:last-child{-moz-border-radius:2px 0 0 2px;-webkit-border-radius:2px 0 0 2px;border-radius:2px 0 0 2px}.cke_rtl .cke_button{float:right}.cke_hc .cke_button{border:1px solid black;padding:3px 5px;margin:-2px 4px 0 -2px}.cke_button_on{-moz-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 5px rgba(0,0,0,.6) inset,0 1px 0 rgba(0,0,0,.2);background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc a.cke_button_disabled:hover,.cke_hc a.cke_button_disabled:focus,.cke_hc a.cke_button_disabled:active{border-width:3px;padding:1px 3px}.cke_button_disabled .cke_button_icon{opacity:.3}.cke_hc .cke_button_disabled{opacity:.5}a.cke_button_on:hover,a.cke_button_on:focus,a.cke_button_on:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}a.cke_button_off:hover,a.cke_button_off:focus,a.cke_button_off:active,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{-moz-box-shadow:0 0 1px rgba(0,0,0,.3) inset;-webkit-box-shadow:0 0 1px rgba(0,0,0,.3) inset;box-shadow:0 0 1px rgba(0,0,0,.3) inset;background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_button_icon{cursor:inherit;background-repeat:no-repeat;margin-top:1px;width:16px;height:16px;float:left;display:inline-block}.cke_rtl .cke_button_icon{float:right}.cke_hc .cke_button_icon{display:none}.cke_button_label{display:none;padding-left:3px;margin-top:1px;line-height:17px;vertical-align:middle;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5)}.cke_rtl .cke_button_label{padding-right:3px;padding-left:0;float:right}.cke_hc .cke_button_label{padding:0;display:inline-block;font-size:12px}.cke_button_arrow{display:inline-block;margin:8px 0 0 1px;width:0;height:0;cursor:default;vertical-align:top;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_rtl .cke_button_arrow{margin-right:5px;margin-left:0}.cke_hc .cke_button_arrow{font-size:10px;margin:3px -2px 0 3px;width:auto;border:0}.cke_toolbar_separator{float:left;background-color:#c0c0c0;background-color:rgba(0,0,0,.2);margin:5px 2px 0;height:18px;width:1px;-webkit-box-shadow:1px 0 1px rgba(255,255,255,.5);-moz-box-shadow:1px 0 1px rgba(255,255,255,.5);box-shadow:1px 0 1px rgba(255,255,255,.5)}.cke_rtl .cke_toolbar_separator{float:right;-webkit-box-shadow:-1px 0 1px rgba(255,255,255,.1);-moz-box-shadow:-1px 0 1px rgba(255,255,255,.1);box-shadow:-1px 0 1px rgba(255,255,255,.1)}.cke_hc .cke_toolbar_separator{width:0;border-left:1px solid;margin:1px 5px 0 0}.cke_toolbar_break{display:block;clear:left}.cke_rtl .cke_toolbar_break{clear:right}.cke_toolbox_collapser{width:12px;height:11px;float:right;margin:11px 0 0;font-size:0;cursor:default;text-align:center;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_toolbox_collapser:hover{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc')}.cke_toolbox_collapser.cke_toolbox_collapser_min{margin:0 2px 4px}.cke_rtl .cke_toolbox_collapser{float:left}.cke_toolbox_collapser .cke_arrow{display:inline-block;height:0;width:0;font-size:0;margin-top:1px;border-left:3px solid transparent;border-right:3px solid transparent;border-bottom:3px solid #474747;border-top:3px solid transparent}.cke_toolbox_collapser.cke_toolbox_collapser_min .cke_arrow{margin-top:4px;border-bottom-color:transparent;border-top-color:#474747}.cke_hc .cke_toolbox_collapser .cke_arrow{font-size:8px;width:auto;border:0;margin-top:0;margin-right:2px}.cke_menubutton{display:block}.cke_menuitem span{cursor:default}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#d3d3d3;display:block}.cke_hc .cke_menubutton{padding:2px}.cke_hc .cke_menubutton:hover,.cke_hc .cke_menubutton:focus,.cke_hc .cke_menubutton:active{border:2px solid;padding:0}.cke_menubutton_inner{display:table-row}.cke_menubutton_icon,.cke_menubutton_label,.cke_menuarrow{display:table-cell}.cke_menubutton_icon{background-color:#d7d8d7;opacity:.70;filter:alpha(opacity=70);padding:4px}.cke_hc .cke_menubutton_icon{height:16px;width:0;padding:4px 0}.cke_menubutton:hover .cke_menubutton_icon,.cke_menubutton:focus .cke_menubutton_icon,.cke_menubutton:active .cke_menubutton_icon{background-color:#d0d2d0}.cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_label{padding:0 5px;background-color:transparent;width:100%;vertical-align:middle}.cke_menubutton_disabled .cke_menubutton_label{opacity:.3;filter:alpha(opacity=30)}.cke_menubutton_on{border:1px solid #dedede;background-color:#f2f2f2;-moz-box-shadow:0 0 2px rgba(0,0,0,.1) inset;-webkit-box-shadow:0 0 2px rgba(0,0,0,.1) inset;box-shadow:0 0 2px rgba(0,0,0,.1) inset}.cke_menubutton_on .cke_menubutton_icon{padding-right:3px}.cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active{background-color:#eff0ef}.cke_panel_frame .cke_menubutton_label{display:none}.cke_menuseparator{background-color:#d3d3d3;height:1px;filter:alpha(opacity=70);opacity:.70}.cke_menuarrow{background-image:url(images/arrow.png);background-position:0 10px;background-repeat:no-repeat;padding:0 5px}.cke_rtl .cke_menuarrow{background-position:5px -13px;background-repeat:no-repeat}.cke_menuarrow span{display:none}.cke_hc .cke_menuarrow span{vertical-align:middle;display:inline}.cke_combo{display:inline-block;float:left}.cke_rtl .cke_combo{float:right}.cke_hc .cke_combo{margin-top:-2px}.cke_combo_label{display:none;float:left;line-height:26px;vertical-align:top;margin-right:5px}.cke_rtl .cke_combo_label{float:right;margin-left:5px;margin-right:0}.cke_combo_button{cursor:default;display:inline-block;float:left;margin:0 6px 5px 0;border:1px solid #a6a6a6;border-bottom-color:#979797;-moz-border-radius:3px;-webkit-border-radius:3px;border-radius:3px;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 0 2px rgba(255,255,255,.15) inset,0 1px 0 rgba(255,255,255,.15) inset;background:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,from(#fff),to(#e4e4e4));background-image:-moz-linear-gradient(top,#fff,#e4e4e4);background-image:-webkit-linear-gradient(top,#fff,#e4e4e4);background-image:-o-linear-gradient(top,#fff,#e4e4e4);background-image:-ms-linear-gradient(top,#fff,#e4e4e4);background-image:linear-gradient(top,#fff,#e4e4e4);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#ffffff',endColorstr='#e4e4e4')}.cke_combo_off a.cke_combo_button:hover,.cke_combo_off a.cke_combo_button:focus{background:#ccc;background-image:-webkit-gradient(linear,left top,left bottom,from(#f2f2f2),to(#ccc));background-image:-moz-linear-gradient(top,#f2f2f2,#ccc);background-image:-webkit-linear-gradient(top,#f2f2f2,#ccc);background-image:-o-linear-gradient(top,#f2f2f2,#ccc);background-image:-ms-linear-gradient(top,#f2f2f2,#ccc);background-image:linear-gradient(top,#f2f2f2,#ccc);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#f2f2f2',endColorstr='#cccccc');outline:0}.cke_combo_off a.cke_combo_button:active,.cke_combo_on a.cke_combo_button{border:1px solid #777;-moz-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;-webkit-box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;box-shadow:0 1px 0 rgba(255,255,255,.5),0 1px 5px rgba(0,0,0,.6) inset;background:#b5b5b5;background-image:-webkit-gradient(linear,left top,left bottom,from(#aaa),to(#cacaca));background-image:-moz-linear-gradient(top,#aaa,#cacaca);background-image:-webkit-linear-gradient(top,#aaa,#cacaca);background-image:-o-linear-gradient(top,#aaa,#cacaca);background-image:-ms-linear-gradient(top,#aaa,#cacaca);background-image:linear-gradient(top,#aaa,#cacaca);filter:progid:DXImageTransform.Microsoft.gradient(gradientType=0,startColorstr='#aaaaaa',endColorstr='#cacaca')}.cke_combo_on a.cke_combo_button:hover,.cke_combo_on a.cke_combo_button:focus,.cke_combo_on a.cke_combo_button:active{-moz-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);-webkit-box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2);box-shadow:0 1px 6px rgba(0,0,0,.7) inset,0 1px 0 rgba(0,0,0,.2)}.cke_rtl .cke_combo_button{float:right;margin-left:5px;margin-right:0}.cke_hc a.cke_combo_button{padding:3px}.cke_hc .cke_combo_on a.cke_combo_button,.cke_hc .cke_combo_off a.cke_combo_button:hover,.cke_hc .cke_combo_off a.cke_combo_button:focus,.cke_hc .cke_combo_off a.cke_combo_button:active{border-width:3px;padding:1px}.cke_combo_text{line-height:26px;padding-left:10px;text-overflow:ellipsis;overflow:hidden;float:left;cursor:default;color:#474747;text-shadow:0 1px 0 rgba(255,255,255,.5);width:60px}.cke_rtl .cke_combo_text{float:right;text-align:right;padding-left:0;padding-right:10px}.cke_hc .cke_combo_text{line-height:18px;font-size:12px}.cke_combo_open{cursor:default;display:inline-block;font-size:0;height:19px;line-height:17px;margin:1px 7px 1px;width:5px}.cke_hc .cke_combo_open{height:12px}.cke_combo_arrow{cursor:default;margin:11px 0 0;float:left;height:0;width:0;font-size:0;border-left:3px solid transparent;border-right:3px solid transparent;border-top:3px solid #474747}.cke_hc .cke_combo_arrow{font-size:10px;width:auto;border:0;margin-top:3px}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{opacity:.3}.cke_path{float:left;margin:-2px 0 2px}.cke_path_item,.cke_path_empty{display:inline-block;float:left;padding:3px 4px;margin-right:2px;cursor:default;text-decoration:none;outline:0;border:0;color:#4c4c4c;text-shadow:0 1px 0 #fff;font-weight:bold;font-size:11px}.cke_rtl .cke_path,.cke_rtl .cke_path_item,.cke_rtl .cke_path_empty{float:right}a.cke_path_item:hover,a.cke_path_item:focus,a.cke_path_item:active{background-color:#bfbfbf;color:#333;text-shadow:0 1px 0 rgba(255,255,255,.5);-moz-border-radius:2px;-webkit-border-radius:2px;border-radius:2px;-moz-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);-webkit-box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5);box-shadow:0 0 4px rgba(0,0,0,.5) inset,0 1px 0 rgba(255,255,255,.5)}.cke_hc a.cke_path_item:hover,.cke_hc a.cke_path_item:focus,.cke_hc a.cke_path_item:active{border:2px solid;padding:1px 2px}.cke_button__source_label,.cke_button__sourcedialog_label{display:inline}.cke_combo__fontsize .cke_combo_text{width:30px}.cke_combopanel__fontsize{width:120px}.cke_source{font-family:'Courier New',Monospace;font-size:small;background-color:#fff;white-space:pre}.cke_wysiwyg_frame,.cke_wysiwyg_div{background-color:#fff}.cke_chrome{visibility:inherit}.cke_voice_label{display:none}legend.cke_voice_label{display:none}a.cke_button_disabled,a.cke_button_disabled:hover,a.cke_button_disabled:focus,a.cke_button_disabled:active{filter:alpha(opacity = 30)}.cke_button_disabled .cke_button_icon{filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#00ffffff,endColorstr=#00ffffff)}.cke_button_off:hover,.cke_button_off:focus,.cke_button_off:active{filter:alpha(opacity = 100)}.cke_combo_disabled .cke_combo_inlinelabel,.cke_combo_disabled .cke_combo_open{filter:alpha(opacity = 30)}.cke_toolbox_collapser{border:1px solid #a6a6a6}.cke_toolbox_collapser .cke_arrow{margin-top:1px}.cke_hc .cke_top,.cke_hc .cke_bottom,.cke_hc .cke_combo_button,.cke_hc a.cke_combo_button:hover,.cke_hc a.cke_combo_button:focus,.cke_hc .cke_toolgroup,.cke_hc .cke_button_on,.cke_hc a.cke_button_off:hover,.cke_hc a.cke_button_off:focus,.cke_hc a.cke_button_off:active,.cke_hc .cke_toolbox_collapser,.cke_hc .cke_toolbox_collapser:hover,.cke_hc .cke_panel_grouptitle{filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.cke_top,.cke_contents,.cke_bottom{width:100%}.cke_button_arrow{font-size:0}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_button,.cke_rtl .cke_button *,.cke_rtl .cke_combo,.cke_rtl .cke_combo *,.cke_rtl .cke_path_item,.cke_rtl .cke_path_item *,.cke_rtl .cke_path_empty{float:none}.cke_rtl .cke_toolgroup,.cke_rtl .cke_toolbar_separator,.cke_rtl .cke_combo_button,.cke_rtl .cke_combo_button *,.cke_rtl .cke_button,.cke_rtl .cke_button_icon{display:inline-block;vertical-align:top}.cke_rtl .cke_button_icon{float:none}.cke_resizer{width:10px}.cke_source{white-space:normal}.cke_bottom{position:static}.cke_colorbox{font-size:0}.cke_button__about_icon {background: url(icons.png) no-repeat 0 -0px !important;}.cke_button__bold_icon {background: url(icons.png) no-repeat 0 -24px !important;}.cke_button__italic_icon {background: url(icons.png) no-repeat 0 -48px !important;}.cke_button__strike_icon {background: url(icons.png) no-repeat 0 -72px !important;}.cke_button__subscript_icon {background: url(icons.png) no-repeat 0 -96px !important;}.cke_button__superscript_icon {background: url(icons.png) no-repeat 0 -120px !important;}.cke_button__underline_icon {background: url(icons.png) no-repeat 0 -144px !important;}.cke_button__bidiltr_icon {background: url(icons.png) no-repeat 0 -168px !important;}.cke_button__bidirtl_icon {background: url(icons.png) no-repeat 0 -192px !important;}.cke_button__blockquote_icon {background: url(icons.png) no-repeat 0 -216px !important;}.cke_rtl .cke_button__copy_icon, .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -240px !important;}.cke_ltr .cke_button__copy_icon {background: url(icons.png) no-repeat 0 -264px !important;}.cke_rtl .cke_button__cut_icon, .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -288px !important;}.cke_ltr .cke_button__cut_icon {background: url(icons.png) no-repeat 0 -312px !important;}.cke_rtl .cke_button__paste_icon, .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -336px !important;}.cke_ltr .cke_button__paste_icon {background: url(icons.png) no-repeat 0 -360px !important;}.cke_button__bgcolor_icon {background: url(icons.png) no-repeat 0 -384px !important;}.cke_button__textcolor_icon {background: url(icons.png) no-repeat 0 -408px !important;}.cke_rtl .cke_button__templates_icon, .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -432px !important;}.cke_ltr .cke_button__templates_icon {background: url(icons.png) no-repeat 0 -456px !important;}.cke_button__creatediv_icon {background: url(icons.png) no-repeat 0 -480px !important;}.cke_rtl .cke_button__find_icon, .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons.png) no-repeat 0 -504px !important;}.cke_ltr .cke_button__find_icon {background: url(icons.png) no-repeat 0 -528px !important;}.cke_button__replace_icon {background: url(icons.png) no-repeat 0 -552px !important;}.cke_button__flash_icon {background: url(icons.png) no-repeat 0 -576px !important;}.cke_button__button_icon {background: url(icons.png) no-repeat 0 -600px !important;}.cke_button__checkbox_icon {background: url(icons.png) no-repeat 0 -624px !important;}.cke_button__form_icon {background: url(icons.png) no-repeat 0 -648px !important;}.cke_button__hiddenfield_icon {background: url(icons.png) no-repeat 0 -672px !important;}.cke_button__imagebutton_icon {background: url(icons.png) no-repeat 0 -696px !important;}.cke_button__radio_icon {background: url(icons.png) no-repeat 0 -720px !important;}.cke_rtl .cke_button__select_icon, .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons.png) no-repeat 0 -744px !important;}.cke_ltr .cke_button__select_icon {background: url(icons.png) no-repeat 0 -768px !important;}.cke_rtl .cke_button__textarea_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -792px !important;}.cke_ltr .cke_button__textarea_icon {background: url(icons.png) no-repeat 0 -816px !important;}.cke_rtl .cke_button__textfield_icon, .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -840px !important;}.cke_ltr .cke_button__textfield_icon {background: url(icons.png) no-repeat 0 -864px !important;}.cke_button__horizontalrule_icon {background: url(icons.png) no-repeat 0 -888px !important;}.cke_button__iframe_icon {background: url(icons.png) no-repeat 0 -912px !important;}.cke_button__image_icon {background: url(icons.png) no-repeat 0 -936px !important;}.cke_rtl .cke_button__indent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -960px !important;}.cke_ltr .cke_button__indent_icon {background: url(icons.png) no-repeat 0 -984px !important;}.cke_rtl .cke_button__outdent_icon, .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1008px !important;}.cke_ltr .cke_button__outdent_icon {background: url(icons.png) no-repeat 0 -1032px !important;}.cke_button__smiley_icon {background: url(icons.png) no-repeat 0 -1056px !important;}.cke_button__justifyblock_icon {background: url(icons.png) no-repeat 0 -1080px !important;}.cke_button__justifycenter_icon {background: url(icons.png) no-repeat 0 -1104px !important;}.cke_button__justifyleft_icon {background: url(icons.png) no-repeat 0 -1128px !important;}.cke_button__justifyright_icon {background: url(icons.png) no-repeat 0 -1152px !important;}.cke_button__language_icon {background: url(icons.png) no-repeat 0 -1176px !important;}.cke_rtl .cke_button__anchor_icon, .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1200px !important;}.cke_ltr .cke_button__anchor_icon {background: url(icons.png) no-repeat 0 -1224px !important;}.cke_button__link_icon {background: url(icons.png) no-repeat 0 -1248px !important;}.cke_button__unlink_icon {background: url(icons.png) no-repeat 0 -1272px !important;}.cke_rtl .cke_button__bulletedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1296px !important;}.cke_ltr .cke_button__bulletedlist_icon {background: url(icons.png) no-repeat 0 -1320px !important;}.cke_rtl .cke_button__numberedlist_icon, .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1344px !important;}.cke_ltr .cke_button__numberedlist_icon {background: url(icons.png) no-repeat 0 -1368px !important;}.cke_button__maximize_icon {background: url(icons.png) no-repeat 0 -1392px !important;}.cke_rtl .cke_button__newpage_icon, .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1416px !important;}.cke_ltr .cke_button__newpage_icon {background: url(icons.png) no-repeat 0 -1440px !important;}.cke_rtl .cke_button__pagebreak_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1464px !important;}.cke_ltr .cke_button__pagebreak_icon {background: url(icons.png) no-repeat 0 -1488px !important;}.cke_rtl .cke_button__pastetext_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1512px !important;}.cke_ltr .cke_button__pastetext_icon {background: url(icons.png) no-repeat 0 -1536px !important;}.cke_rtl .cke_button__pastefromword_icon, .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1560px !important;}.cke_ltr .cke_button__pastefromword_icon {background: url(icons.png) no-repeat 0 -1584px !important;}.cke_rtl .cke_button__preview_icon, .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1608px !important;}.cke_ltr .cke_button__preview_icon {background: url(icons.png) no-repeat 0 -1632px !important;}.cke_button__print_icon {background: url(icons.png) no-repeat 0 -1656px !important;}.cke_button__removeformat_icon {background: url(icons.png) no-repeat 0 -1680px !important;}.cke_button__save_icon {background: url(icons.png) no-repeat 0 -1704px !important;}.cke_button__selectall_icon {background: url(icons.png) no-repeat 0 -1728px !important;}.cke_rtl .cke_button__showblocks_icon, .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1752px !important;}.cke_ltr .cke_button__showblocks_icon {background: url(icons.png) no-repeat 0 -1776px !important;}.cke_rtl .cke_button__source_icon, .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1800px !important;}.cke_ltr .cke_button__source_icon {background: url(icons.png) no-repeat 0 -1824px !important;}.cke_button__specialchar_icon {background: url(icons.png) no-repeat 0 -1848px !important;}.cke_button__scayt_icon {background: url(icons.png) no-repeat 0 -1872px !important;}.cke_button__table_icon {background: url(icons.png) no-repeat 0 -1896px !important;}.cke_rtl .cke_button__redo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1920px !important;}.cke_ltr .cke_button__redo_icon {background: url(icons.png) no-repeat 0 -1944px !important;}.cke_rtl .cke_button__undo_icon, .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1968px !important;}.cke_ltr .cke_button__undo_icon {background: url(icons.png) no-repeat 0 -1992px !important;}.cke_button__spellchecker_icon {background: url(icons.png) no-repeat 0 -2016px !important;}.cke_hidpi .cke_button__about_icon {background: url(icons_hidpi.png) no-repeat 0 -0px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bold_icon {background: url(icons_hidpi.png) no-repeat 0 -24px !important;background-size: 16px !important;}.cke_hidpi .cke_button__italic_icon {background: url(icons_hidpi.png) no-repeat 0 -48px !important;background-size: 16px !important;}.cke_hidpi .cke_button__strike_icon {background: url(icons_hidpi.png) no-repeat 0 -72px !important;background-size: 16px !important;}.cke_hidpi .cke_button__subscript_icon {background: url(icons_hidpi.png) no-repeat 0 -96px !important;background-size: 16px !important;}.cke_hidpi .cke_button__superscript_icon {background: url(icons_hidpi.png) no-repeat 0 -120px !important;background-size: 16px !important;}.cke_hidpi .cke_button__underline_icon {background: url(icons_hidpi.png) no-repeat 0 -144px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidiltr_icon {background: url(icons_hidpi.png) no-repeat 0 -168px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bidirtl_icon {background: url(icons_hidpi.png) no-repeat 0 -192px !important;background-size: 16px !important;}.cke_hidpi .cke_button__blockquote_icon {background: url(icons_hidpi.png) no-repeat 0 -216px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__copy_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -240px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__copy_icon,.cke_ltr.cke_hidpi .cke_button__copy_icon {background: url(icons_hidpi.png) no-repeat 0 -264px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__cut_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -288px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__cut_icon,.cke_ltr.cke_hidpi .cke_button__cut_icon {background: url(icons_hidpi.png) no-repeat 0 -312px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__paste_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -336px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__paste_icon,.cke_ltr.cke_hidpi .cke_button__paste_icon {background: url(icons_hidpi.png) no-repeat 0 -360px !important;background-size: 16px !important;}.cke_hidpi .cke_button__bgcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -384px !important;background-size: 16px !important;}.cke_hidpi .cke_button__textcolor_icon {background: url(icons_hidpi.png) no-repeat 0 -408px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__templates_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -432px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__templates_icon,.cke_ltr.cke_hidpi .cke_button__templates_icon {background: url(icons_hidpi.png) no-repeat 0 -456px !important;background-size: 16px !important;}.cke_hidpi .cke_button__creatediv_icon {background: url(icons_hidpi.png) no-repeat 0 -480px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__find_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -504px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__find_icon,.cke_ltr.cke_hidpi .cke_button__find_icon {background: url(icons_hidpi.png) no-repeat 0 -528px !important;background-size: 16px !important;}.cke_hidpi .cke_button__replace_icon {background: url(icons_hidpi.png) no-repeat 0 -552px !important;background-size: 16px !important;}.cke_hidpi .cke_button__flash_icon {background: url(icons_hidpi.png) no-repeat 0 -576px !important;background-size: 16px !important;}.cke_hidpi .cke_button__button_icon {background: url(icons_hidpi.png) no-repeat 0 -600px !important;background-size: 16px !important;}.cke_hidpi .cke_button__checkbox_icon {background: url(icons_hidpi.png) no-repeat 0 -624px !important;background-size: 16px !important;}.cke_hidpi .cke_button__form_icon {background: url(icons_hidpi.png) no-repeat 0 -648px !important;background-size: 16px !important;}.cke_hidpi .cke_button__hiddenfield_icon {background: url(icons_hidpi.png) no-repeat 0 -672px !important;background-size: 16px !important;}.cke_hidpi .cke_button__imagebutton_icon {background: url(icons_hidpi.png) no-repeat 0 -696px !important;background-size: 16px !important;}.cke_hidpi .cke_button__radio_icon {background: url(icons_hidpi.png) no-repeat 0 -720px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__select_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -744px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__select_icon,.cke_ltr.cke_hidpi .cke_button__select_icon {background: url(icons_hidpi.png) no-repeat 0 -768px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textarea_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -792px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textarea_icon,.cke_ltr.cke_hidpi .cke_button__textarea_icon {background: url(icons_hidpi.png) no-repeat 0 -816px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__textfield_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -840px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__textfield_icon,.cke_ltr.cke_hidpi .cke_button__textfield_icon {background: url(icons_hidpi.png) no-repeat 0 -864px !important;background-size: 16px !important;}.cke_hidpi .cke_button__horizontalrule_icon {background: url(icons_hidpi.png) no-repeat 0 -888px !important;background-size: 16px !important;}.cke_hidpi .cke_button__iframe_icon {background: url(icons_hidpi.png) no-repeat 0 -912px !important;background-size: 16px !important;}.cke_hidpi .cke_button__image_icon {background: url(icons_hidpi.png) no-repeat 0 -936px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__indent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -960px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__indent_icon,.cke_ltr.cke_hidpi .cke_button__indent_icon {background: url(icons_hidpi.png) no-repeat 0 -984px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__outdent_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1008px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__outdent_icon,.cke_ltr.cke_hidpi .cke_button__outdent_icon {background: url(icons_hidpi.png) no-repeat 0 -1032px !important;background-size: 16px !important;}.cke_hidpi .cke_button__smiley_icon {background: url(icons_hidpi.png) no-repeat 0 -1056px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyblock_icon {background: url(icons_hidpi.png) no-repeat 0 -1080px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifycenter_icon {background: url(icons_hidpi.png) no-repeat 0 -1104px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyleft_icon {background: url(icons_hidpi.png) no-repeat 0 -1128px !important;background-size: 16px !important;}.cke_hidpi .cke_button__justifyright_icon {background: url(icons_hidpi.png) no-repeat 0 -1152px !important;background-size: 16px !important;}.cke_hidpi .cke_button__language_icon {background: url(icons_hidpi.png) no-repeat 0 -1176px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__anchor_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1200px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__anchor_icon,.cke_ltr.cke_hidpi .cke_button__anchor_icon {background: url(icons_hidpi.png) no-repeat 0 -1224px !important;background-size: 16px !important;}.cke_hidpi .cke_button__link_icon {background: url(icons_hidpi.png) no-repeat 0 -1248px !important;background-size: 16px !important;}.cke_hidpi .cke_button__unlink_icon {background: url(icons_hidpi.png) no-repeat 0 -1272px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__bulletedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1296px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__bulletedlist_icon,.cke_ltr.cke_hidpi .cke_button__bulletedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1320px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__numberedlist_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1344px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__numberedlist_icon,.cke_ltr.cke_hidpi .cke_button__numberedlist_icon {background: url(icons_hidpi.png) no-repeat 0 -1368px !important;background-size: 16px !important;}.cke_hidpi .cke_button__maximize_icon {background: url(icons_hidpi.png) no-repeat 0 -1392px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__newpage_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1416px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__newpage_icon,.cke_ltr.cke_hidpi .cke_button__newpage_icon {background: url(icons_hidpi.png) no-repeat 0 -1440px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pagebreak_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1464px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pagebreak_icon,.cke_ltr.cke_hidpi .cke_button__pagebreak_icon {background: url(icons_hidpi.png) no-repeat 0 -1488px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastetext_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1512px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastetext_icon,.cke_ltr.cke_hidpi .cke_button__pastetext_icon {background: url(icons_hidpi.png) no-repeat 0 -1536px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__pastefromword_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1560px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__pastefromword_icon,.cke_ltr.cke_hidpi .cke_button__pastefromword_icon {background: url(icons_hidpi.png) no-repeat 0 -1584px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__preview_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1608px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__preview_icon,.cke_ltr.cke_hidpi .cke_button__preview_icon {background: url(icons_hidpi.png) no-repeat 0 -1632px !important;background-size: 16px !important;}.cke_hidpi .cke_button__print_icon {background: url(icons_hidpi.png) no-repeat 0 -1656px !important;background-size: 16px !important;}.cke_hidpi .cke_button__removeformat_icon {background: url(icons_hidpi.png) no-repeat 0 -1680px !important;background-size: 16px !important;}.cke_hidpi .cke_button__save_icon {background: url(icons_hidpi.png) no-repeat 0 -1704px !important;background-size: 16px !important;}.cke_hidpi .cke_button__selectall_icon {background: url(icons_hidpi.png) no-repeat 0 -1728px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__showblocks_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1752px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__showblocks_icon,.cke_ltr.cke_hidpi .cke_button__showblocks_icon {background: url(icons_hidpi.png) no-repeat 0 -1776px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__source_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1800px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__source_icon,.cke_ltr.cke_hidpi .cke_button__source_icon {background: url(icons_hidpi.png) no-repeat 0 -1824px !important;background-size: 16px !important;}.cke_hidpi .cke_button__specialchar_icon {background: url(icons_hidpi.png) no-repeat 0 -1848px !important;background-size: 16px !important;}.cke_hidpi .cke_button__scayt_icon {background: url(icons_hidpi.png) no-repeat 0 -1872px !important;background-size: 16px !important;}.cke_hidpi .cke_button__table_icon {background: url(icons_hidpi.png) no-repeat 0 -1896px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__redo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1920px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__redo_icon,.cke_ltr.cke_hidpi .cke_button__redo_icon {background: url(icons_hidpi.png) no-repeat 0 -1944px !important;background-size: 16px !important;}.cke_rtl.cke_hidpi .cke_button__undo_icon, .cke_hidpi .cke_mixed_dir_content .cke_rtl .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1968px !important;background-size: 16px !important;}.cke_hidpi .cke_ltr .cke_button__undo_icon,.cke_ltr.cke_hidpi .cke_button__undo_icon {background: url(icons_hidpi.png) no-repeat 0 -1992px !important;background-size: 16px !important;}.cke_hidpi .cke_button__spellchecker_icon {background: url(icons_hidpi.png) no-repeat 0 -2016px !important;background-size: 16px !important;} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/icons.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/icons.png
deleted file mode 100644
index 1ec992d9..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/icons.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/icons_hidpi.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/icons_hidpi.png
deleted file mode 100644
index 6e103c05..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/icons_hidpi.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/arrow.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/arrow.png
deleted file mode 100644
index d72b5f3b..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/arrow.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/close.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/close.png
deleted file mode 100644
index 6a04ab52..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/close.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/close.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/close.png
deleted file mode 100644
index e406c2c3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/close.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/lock-open.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/lock-open.png
deleted file mode 100644
index edbd12f3..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/lock-open.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/lock.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/lock.png
deleted file mode 100644
index 1b87bbb7..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/lock.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/refresh.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/refresh.png
deleted file mode 100644
index c6c2b86e..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/hidpi/refresh.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/lock-open.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/lock-open.png
deleted file mode 100644
index 04769877..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/lock-open.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/lock.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/lock.png
deleted file mode 100644
index c5a14400..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/lock.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/refresh.png b/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/refresh.png
deleted file mode 100644
index 1ff63c30..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/images/refresh.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/ckeditor/skins/moono/readme.md b/wqflask/wqflask/static/packages/ckeditor/skins/moono/readme.md
deleted file mode 100644
index d086fe9b..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/skins/moono/readme.md
+++ /dev/null
@@ -1,51 +0,0 @@
-"Moono" Skin
-====================
-
-This skin has been chosen for the **default skin** of CKEditor 4.x, elected from the CKEditor
-[skin contest](http://ckeditor.com/blog/new_ckeditor_4_skin) and further shaped by
-the CKEditor team. "Moono" is maintained by the core developers.
-
-For more information about skins, please check the [CKEditor Skin SDK](http://docs.cksource.com/CKEditor_4.x/Skin_SDK)
-documentation.
-
-Features
--------------------
-"Moono" is a monochromatic skin, which offers a modern look coupled with gradients and transparency.
-It comes with the following features:
-
-- Chameleon feature with brightness,
-- high-contrast compatibility,
-- graphics source provided in SVG.
-
-Directory Structure
--------------------
-
-CSS parts:
-- **editor.css**: the main CSS file. It's simply loading several other files, for easier maintenance,
-- **mainui.css**: the file contains styles of entire editor outline structures,
-- **toolbar.css**: the file contains styles of the editor toolbar space (top),
-- **richcombo.css**: the file contains styles of the rich combo ui elements on toolbar,
-- **panel.css**: the file contains styles of the rich combo drop-down, it's not loaded
-until the first panel open up,
-- **elementspath.css**: the file contains styles of the editor elements path bar (bottom),
-- **menu.css**: the file contains styles of all editor menus including context menu and button drop-down,
-it's not loaded until the first menu open up,
-- **dialog.css**: the CSS files for the dialog UI, it's not loaded until the first dialog open,
-- **reset.css**: the file defines the basis of style resets among all editor UI spaces,
-- **preset.css**: the file defines the default styles of some UI elements reflecting the skin preference,
-- **editor_XYZ.css** and **dialog_XYZ.css**: browser specific CSS hacks.
-
-Other parts:
-- **skin.js**: the only JavaScript part of the skin that registers the skin, its browser specific files and its icons and defines the Chameleon feature,
-- **icons/**: contains all skin defined icons,
-- **images/**: contains a fill general used images,
-- **dev/**: contains SVG source of the skin icons.
-
-License
--------
-
-Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
-
-Licensed under the terms of any of the following licenses at your choice: [GPL](http://www.gnu.org/licenses/gpl.html), [LGPL](http://www.gnu.org/licenses/lgpl.html) and [MPL](http://www.mozilla.org/MPL/MPL-1.1.html).
-
-See LICENSE.md for more information.
diff --git a/wqflask/wqflask/static/packages/ckeditor/styles.js b/wqflask/wqflask/static/packages/ckeditor/styles.js
deleted file mode 100644
index 18e4316b..00000000
--- a/wqflask/wqflask/static/packages/ckeditor/styles.js
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- * Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
- * For licensing, see LICENSE.md or http://ckeditor.com/license
- */
-
-// This file contains style definitions that can be used by CKEditor plugins.
-//
-// The most common use for it is the "stylescombo" plugin, which shows a combo
-// in the editor toolbar, containing all styles. Other plugins instead, like
-// the div plugin, use a subset of the styles on their feature.
-//
-// If you don't have plugins that depend on this file, you can simply ignore it.
-// Otherwise it is strongly recommended to customize this file to match your
-// website requirements and design properly.
-
-CKEDITOR.stylesSet.add( 'default', [
- /* Block Styles */
-
- // These styles are already available in the "Format" combo ("format" plugin),
- // so they are not needed here by default. You may enable them to avoid
- // placing the "Format" combo in the toolbar, maintaining the same features.
- /*
- { name: 'Paragraph', element: 'p' },
- { name: 'Heading 1', element: 'h1' },
- { name: 'Heading 2', element: 'h2' },
- { name: 'Heading 3', element: 'h3' },
- { name: 'Heading 4', element: 'h4' },
- { name: 'Heading 5', element: 'h5' },
- { name: 'Heading 6', element: 'h6' },
- { name: 'Preformatted Text',element: 'pre' },
- { name: 'Address', element: 'address' },
- */
-
- { name: 'Italic Title', element: 'h2', styles: { 'font-style': 'italic' } },
- { name: 'Subtitle', element: 'h3', styles: { 'color': '#aaa', 'font-style': 'italic' } },
- {
- name: 'Special Container',
- element: 'div',
- styles: {
- padding: '5px 10px',
- background: '#eee',
- border: '1px solid #ccc'
- }
- },
-
- /* Inline Styles */
-
- // These are core styles available as toolbar buttons. You may opt enabling
- // some of them in the Styles combo, removing them from the toolbar.
- // (This requires the "stylescombo" plugin)
- /*
- { name: 'Strong', element: 'strong', overrides: 'b' },
- { name: 'Emphasis', element: 'em' , overrides: 'i' },
- { name: 'Underline', element: 'u' },
- { name: 'Strikethrough', element: 'strike' },
- { name: 'Subscript', element: 'sub' },
- { name: 'Superscript', element: 'sup' },
- */
-
- { name: 'Marker', element: 'span', attributes: { 'class': 'marker' } },
-
- { name: 'Big', element: 'big' },
- { name: 'Small', element: 'small' },
- { name: 'Typewriter', element: 'tt' },
-
- { name: 'Computer Code', element: 'code' },
- { name: 'Keyboard Phrase', element: 'kbd' },
- { name: 'Sample Text', element: 'samp' },
- { name: 'Variable', element: 'var' },
-
- { name: 'Deleted Text', element: 'del' },
- { name: 'Inserted Text', element: 'ins' },
-
- { name: 'Cited Work', element: 'cite' },
- { name: 'Inline Quotation', element: 'q' },
-
- { name: 'Language: RTL', element: 'span', attributes: { 'dir': 'rtl' } },
- { name: 'Language: LTR', element: 'span', attributes: { 'dir': 'ltr' } },
-
- /* Object Styles */
-
- {
- name: 'Styled image (left)',
- element: 'img',
- attributes: { 'class': 'left' }
- },
-
- {
- name: 'Styled image (right)',
- element: 'img',
- attributes: { 'class': 'right' }
- },
-
- {
- name: 'Compact table',
- element: 'table',
- attributes: {
- cellpadding: '5',
- cellspacing: '0',
- border: '1',
- bordercolor: '#ccc'
- },
- styles: {
- 'border-collapse': 'collapse'
- }
- },
-
- { name: 'Borderless Table', element: 'table', styles: { 'border-style': 'hidden', 'background-color': '#E6E6FA' } },
- { name: 'Square Bulleted List', element: 'ul', styles: { 'list-style-type': 'square' } }
-] );
-
diff --git a/wqflask/wqflask/static/packages/cytoscape/css/cytoscape.js-panzoom.css b/wqflask/wqflask/static/packages/cytoscape/css/cytoscape.js-panzoom.css
deleted file mode 100644
index a7cb7740..00000000
--- a/wqflask/wqflask/static/packages/cytoscape/css/cytoscape.js-panzoom.css
+++ /dev/null
@@ -1,220 +0,0 @@
-.cy-panzoom {
- position: absolute;
- font-size: 12px;
- color: #fff;
- font-family: arial, helvetica, sans-serif;
- line-height: 1;
- color: #666;
- font-size: 11px;
- z-index: 99999;
- box-sizing: content-box;
-}
-
-.cy-panzoom-zoom-button {
- cursor: pointer;
- padding: 3px;
- text-align: center;
- position: absolute;
- border-radius: 3px;
- width: 10px;
- height: 10px;
- left: 16px;
- background: #fff;
- border: 1px solid #999;
- margin-left: -1px;
- margin-top: -1px;
- z-index: 1;
- box-sizing: content-box;
-}
-
-.cy-panzoom-zoom-button:active,
-.cy-panzoom-slider-handle:active,
-.cy-panzoom-slider-handle.active {
- background: #ddd;
- box-sizing: content-box;
-}
-
-.cy-panzoom-pan-button {
- position: absolute;
- z-index: 1;
- height: 16px;
- width: 16px;
- box-sizing: content-box;
-}
-
-.cy-panzoom-reset {
- top: 55px;
- box-sizing: content-box;
-}
-
-.cy-panzoom-zoom-in {
- top: 80px;
- box-sizing: content-box;
-}
-
-.cy-panzoom-zoom-out {
- top: 197px;
- box-sizing: content-box;
-}
-
-.cy-panzoom-pan-up {
- top: 0;
- left: 50%;
- margin-left: -5px;
- width: 0;
- height: 0;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-bottom: 5px solid #666;
- box-sizing: content-box;
-}
-
-.cy-panzoom-pan-down {
- bottom: 0;
- left: 50%;
- margin-left: -5px;
- width: 0;
- height: 0;
- border-left: 5px solid transparent;
- border-right: 5px solid transparent;
- border-top: 5px solid #666;
- box-sizing: content-box;
-}
-
-.cy-panzoom-pan-left {
- top: 50%;
- left: 0;
- margin-top: -5px;
- width: 0;
- height: 0;
- border-top: 5px solid transparent;
- border-bottom: 5px solid transparent;
- border-right: 5px solid #666;
- box-sizing: content-box;
-}
-
-.cy-panzoom-pan-right {
- top: 50%;
- right: 0;
- margin-top: -5px;
- width: 0;
- height: 0;
- border-top: 5px solid transparent;
- border-bottom: 5px solid transparent;
- border-left: 5px solid #666;
- box-sizing: content-box;
-}
-
-.cy-panzoom-pan-indicator {
- position: absolute;
- left: 0;
- top: 0;
- width: 8px;
- height: 8px;
- border-radius: 8px;
- background: #000;
- border-radius: 8px;
- margin-left: -5px;
- margin-top: -5px;
- display: none;
- z-index: 999;
- opacity: 0.6;
- box-sizing: content-box;
-}
-
-.cy-panzoom-slider {
- position: absolute;
- top: 97px;
- left: 17px;
- height: 100px;
- width: 15px;
- box-sizing: content-box;
-}
-
-.cy-panzoom-slider-background {
- position: absolute;
- top: 0;
- width: 2px;
- height: 100px;
- left: 5px;
- background: #fff;
- border-left: 1px solid #999;
- border-right: 1px solid #999;
- box-sizing: content-box;
-}
-
-.cy-panzoom-slider-handle {
- position: absolute;
- width: 16px;
- height: 8px;
- background: #fff;
- border: 1px solid #999;
- border-radius: 2px;
- margin-left: -2px;
- z-index: 999;
- line-height: 8px;
- cursor: default;
- box-sizing: content-box;
-}
-
-.cy-panzoom-slider-handle .icon {
- margin: 0 4px;
- line-height: 10px;
- box-sizing: content-box;
-}
-
-.cy-panzoom-no-zoom-tick {
- position: absolute;
- background: #666;
- border: 1px solid #fff;
- border-radius: 2px;
- margin-left: -1px;
- width: 8px;
- height: 2px;
- left: 3px;
- z-index: 1;
- margin-top: 3px;
- box-sizing: content-box;
-}
-
-.cy-panzoom-panner {
- position: absolute;
- left: 5px;
- top: 5px;
- height: 40px;
- width: 40px;
- background: #fff;
- border: 1px solid #999;
- border-radius: 40px;
- margin-left: -1px;
- box-sizing: content-box;
-}
-
-.cy-panzoom-panner-handle {
- position: absolute;
- left: 0;
- top: 0;
- outline: none;
- height: 40px;
- width: 40px;
- position: absolute;
- z-index: 999;
- box-sizing: content-box;
-}
-
-.cy-panzoom-zoom-only .cy-panzoom-slider,
-.cy-panzoom-zoom-only .cy-panzoom-panner {
- display: none;
-}
-
-.cy-panzoom-zoom-only .cy-panzoom-reset {
- top: 20px;
-}
-
-.cy-panzoom-zoom-only .cy-panzoom-zoom-in {
- top: 45px;
-}
-
-.cy-panzoom-zoom-only .cy-panzoom-zoom-out {
- top: 70px;
-}
diff --git a/wqflask/wqflask/static/packages/cytoscape/js/min/AC_OETags.min.js b/wqflask/wqflask/static/packages/cytoscape/js/min/AC_OETags.min.js
deleted file mode 100644
index 2f6b122a..00000000
--- a/wqflask/wqflask/static/packages/cytoscape/js/min/AC_OETags.min.js
+++ /dev/null
@@ -1 +0,0 @@
-var isIE=(navigator.appVersion.indexOf("MSIE")!=-1)?true:false;var isWin=(navigator.appVersion.toLowerCase().indexOf("win")!=-1)?true:false;var isOpera=(navigator.userAgent.indexOf("Opera")!=-1)?true:false;function ControlVersion(){var a;var b;var c;try{b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");a=b.GetVariable("$version")}catch(c){}if(!a){try{b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");a="WIN 6,0,21,0";b.AllowScriptAccess="always";a=b.GetVariable("$version")}catch(c){}}if(!a){try{b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");a=b.GetVariable("$version")}catch(c){}}if(!a){try{b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");a="WIN 3,0,18,0"}catch(c){}}if(!a){try{b=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");a="WIN 2,0,0,11"}catch(c){a=-1}}return a}function GetSwfVer(){var g=-1;if(navigator.plugins!=null&&navigator.plugins.length>0){if(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]){var f=navigator.plugins["Shockwave Flash 2.0"]?" 2.0":"";var a=navigator.plugins["Shockwave Flash"+f].description;var e=a.split(" ");var c=e[2].split(".");var h=c[0];var b=c[1];var d=e[3];if(d==""){d=e[4]}if(d[0]=="d"){d=d.substring(1)}else{if(d[0]=="r"){d=d.substring(1);if(d.indexOf("d")>0){d=d.substring(0,d.indexOf("d"))}}else{if(d[0]=="b"){d=d.substring(1)}}}var g=h+"."+b+"."+d}}else{if(navigator.userAgent.toLowerCase().indexOf("webtv/2.6")!=-1){g=4}else{if(navigator.userAgent.toLowerCase().indexOf("webtv/2.5")!=-1){g=3}else{if(navigator.userAgent.toLowerCase().indexOf("webtv")!=-1){g=2}else{if(isIE&&isWin&&!isOpera){g=ControlVersion()}}}}}return g}function DetectFlashVer(f,d,c){versionStr=GetSwfVer();if(versionStr==-1){return false}else{if(versionStr!=0){if(isIE&&isWin&&!isOpera){tempArray=versionStr.split(" ");tempString=tempArray[1];versionArray=tempString.split(",")}else{versionArray=versionStr.split(".")}var e=versionArray[0];var a=versionArray[1];var b=versionArray[2];if(e>parseFloat(f)){return true}else{if(e==parseFloat(f)){if(a>parseFloat(d)){return true}else{if(a==parseFloat(d)){if(b>=parseFloat(c)){return true}}}}}return false}}}function AC_AddExtension(b,a){if(b.indexOf("?")!=-1){return b.replace(/\?/,a+"?")}else{return b+a}}function AC_Generateobj(e,d,a){var c="";if(isIE&&isWin&&!isOpera){c+="<object ";for(var b in e){c+=b+'="'+e[b]+'" '}c+=">";for(var b in d){c+='<param name="'+b+'" value="'+d[b]+'" /> '}c+="</object>"}else{c+="<embed ";for(var b in a){c+=b+'="'+a[b]+'" '}c+="> </embed>"}document.write(c)}function AC_FL_RunContent(){var a=AC_GetArgs(arguments,".swf","movie","clsid:d27cdb6e-ae6d-11cf-96b8-444553540000","application/x-shockwave-flash");AC_Generateobj(a.objAttrs,a.params,a.embedAttrs)}function AC_GetArgs(b,e,g,d,h){var a=new Object();a.embedAttrs=new Object();a.params=new Object();a.objAttrs=new Object();for(var c=0;c<b.length;c=c+2){var f=b[c].toLowerCase();switch(f){case"classid":break;case"pluginspage":a.embedAttrs[b[c]]=b[c+1];break;case"src":case"movie":b[c+1]=AC_AddExtension(b[c+1],e);a.embedAttrs.src=b[c+1];a.params[g]=b[c+1];break;case"onafterupdate":case"onbeforeupdate":case"onblur":case"oncellchange":case"onclick":case"ondblClick":case"ondrag":case"ondragend":case"ondragenter":case"ondragleave":case"ondragover":case"ondrop":case"onfinish":case"onfocus":case"onhelp":case"onmousedown":case"onmouseup":case"onmouseover":case"onmousemove":case"onmouseout":case"onkeypress":case"onkeydown":case"onkeyup":case"onload":case"onlosecapture":case"onpropertychange":case"onreadystatechange":case"onrowsdelete":case"onrowenter":case"onrowexit":case"onrowsinserted":case"onstart":case"onscroll":case"onbeforeeditfocus":case"onactivate":case"onbeforedeactivate":case"ondeactivate":case"type":case"codebase":a.objAttrs[b[c]]=b[c+1];break;case"id":case"width":case"height":case"align":case"vspace":case"hspace":case"class":case"title":case"accesskey":case"name":case"tabindex":a.embedAttrs[b[c]]=a.objAttrs[b[c]]=b[c+1];break;default:a.embedAttrs[b[c]]=a.params[b[c]]=b[c+1]}}a.objAttrs.classid=d;if(h){a.embedAttrs.type=h}return a}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/cytoscape/js/min/cytoscape.min.js b/wqflask/wqflask/static/packages/cytoscape/js/min/cytoscape.min.js
deleted file mode 100644
index fb608c6d..00000000
--- a/wqflask/wqflask/static/packages/cytoscape/js/min/cytoscape.min.js
+++ /dev/null
@@ -1,62 +0,0 @@
-!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.cytoscape=e()}}(function(){var define,module,exports;return function e(t,r,n){function i(o,s){if(!r[o]){if(!t[o]){var l="function"==typeof require&&require;if(!s&&l)return l(o,!0);if(a)return a(o,!0);var u=new Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var c=r[o]={exports:{}};t[o][0].call(c.exports,function(e){var r=t[o][1][e];return i(r?r:e)},c,c.exports,e,t,r,n)}return r[o].exports}for(var a="function"==typeof require&&require,o=0;o<n.length;o++)i(n[o]);return i}({1:[function(e,t,r){/*!
-
-Cytoscape.js 2.7.8 (MIT licensed)
-
-Copyright (c) The Cytoscape Consortium
-
-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.
-
-*/
-"use strict"},{}],2:[function(e,t,r){"use strict";var n=e("./util"),i=e("./is"),a=e("./promise"),o=function(e,t,r){if(!(this instanceof o))return new o(e,t,r);var a=this._private=n.extend({duration:1e3},t,r);a.target=e,a.style=a.style||a.css,a.started=!1,a.playing=!1,a.hooked=!1,a.applying=!1,a.progress=0,a.completes=[],a.frames=[],a.complete&&i.fn(a.complete)&&a.completes.push(a.complete),this.length=1,this[0]=this},s=o.prototype;n.extend(s,{instanceString:function(){return"animation"},hook:function(){var e=this._private;if(!e.hooked){var t,r=e.target._private.animation;t=e.queue?r.queue:r.current,t.push(this),i.elementOrCollection(e.target)&&e.target.cy().addToAnimationPool(e.target),e.hooked=!0}return this},play:function(){var e=this._private;return 1===e.progress&&(e.progress=0),e.playing=!0,e.started=!1,e.stopped=!1,this.hook(),this},playing:function(){return this._private.playing},apply:function(){var e=this._private;return e.applying=!0,e.started=!1,e.stopped=!1,this.hook(),this},applying:function(){return this._private.applying},pause:function(){var e=this._private;return e.playing=!1,e.started=!1,this},stop:function(){var e=this._private;return e.playing=!1,e.started=!1,e.stopped=!0,this},rewind:function(){return this.progress(0)},fastforward:function(){return this.progress(1)},time:function(e){var t=this._private;return void 0===e?t.progress*t.duration:this.progress(e/t.duration)},progress:function(e){var t=this._private,r=t.playing;return void 0===e?t.progress:(r&&this.pause(),t.progress=e,t.started=!1,r&&this.play(),this)},completed:function(){return 1===this._private.progress},reverse:function(){var e=this._private,t=e.playing;t&&this.pause(),e.progress=1-e.progress,e.started=!1;var r=function(t,r){var n=e[t];e[t]=e[r],e[r]=n};r("zoom","startZoom"),r("pan","startPan"),r("position","startPosition");for(var n=0;n<e.style.length;n++){var i=e.style[n],a=i.name,o=e.startStyle[a];e.startStyle[a]=i,e.style[n]=o}return t&&this.play(),this},promise:function(e){var t,r=this._private;switch(e){case"frame":t=r.frames;break;default:case"complete":case"completed":t=r.completes}return new a(function(e,r){t.push(function(){e()})})}}),s.complete=s.completed,t.exports=o},{"./is":83,"./promise":86,"./util":100}],3:[function(e,t,r){"use strict";var n=e("../../is"),i={aStar:function(e){var t=this;e=e||{};var r=function(e,t,n,i){if(e==t)return i.push(a.getElementById(t)),i;if(t in n){var o=n[t],s=f[t];return i.push(a.getElementById(t)),i.push(a.getElementById(s)),r(e,o,n,i)}},i=function(e,t){if(0!==e.length){for(var r=0,n=t[e[0]],i=1;i<e.length;i++){var a=t[e[i]];n>a&&(n=a,r=i)}return r}},a=this._private.cy;if(null!=e&&null!=e.root){var o=n.string(e.root)?this.filter(e.root)[0]:e.root[0];if(null!=e.goal){var s=n.string(e.goal)?this.filter(e.goal)[0]:e.goal[0];if(null!=e.heuristic&&n.fn(e.heuristic))var l=e.heuristic;else var l=function(){return 0};if(null!=e.weight&&n.fn(e.weight))var u=e.weight;else var u=function(e){return 1};if(null!=e.directed)var c=e.directed;else var c=!1;var d=[],h=[o.id()],p={},f={},v={},g={};v[o.id()]=0,g[o.id()]=l(o);for(var y=this.edges().stdFilter(function(e){return!e.isLoop()}),m=this.nodes(),b=0;h.length>0;){var x=i(h,g),w=a.getElementById(h[x]);if(b++,w.id()==s.id()){var E=r(o.id(),s.id(),p,[]);return E.reverse(),{found:!0,distance:v[w.id()],path:t.spawn(E),steps:b}}d.push(w.id()),h.splice(x,1);var _=w.connectedEdges();c&&(_=_.stdFilter(function(e){return e.data("source")===w.id()})),_=_.intersect(y);for(var P=0;P<_.length;P++){var S=_[P],k=S.connectedNodes().stdFilter(function(e){return e.id()!==w.id()}).intersect(m);if(-1==d.indexOf(k.id())){var T=v[w.id()]+u.apply(S,[S]);-1!=h.indexOf(k.id())?T<v[k.id()]&&(v[k.id()]=T,g[k.id()]=T+l(k),p[k.id()]=w.id()):(v[k.id()]=T,g[k.id()]=T+l(k),h.push(k.id()),p[k.id()]=w.id(),f[k.id()]=S.id())}}}return{found:!1,distance:void 0,path:void 0,steps:b}}}}};t.exports=i},{"../../is":83}],4:[function(e,t,r){"use strict";var n=e("../../is"),i=e("../../util"),a={bellmanFord:function(e){var t=this;if(e=e||{},null!=e.weight&&n.fn(e.weight))var r=e.weight;else var r=function(e){return 1};if(null!=e.directed)var a=e.directed;else var a=!1;if(null!=e.root){if(n.string(e.root))var o=this.filter(e.root)[0];else var o=e.root[0];for(var s=this._private.cy,l=this.edges().stdFilter(function(e){return!e.isLoop()}),u=this.nodes(),c=u.length,d={},h=0;c>h;h++)d[u[h].id()]=h;for(var p=[],f=[],v=[],h=0;c>h;h++)u[h].id()===o.id()?p[h]=0:p[h]=1/0,f[h]=void 0;for(var g=!1,h=1;c>h;h++){g=!1;for(var y=0;y<l.length;y++){var m=d[l[y].source().id()],b=d[l[y].target().id()],x=r.apply(l[y],[l[y]]),w=p[m]+x;if(w<p[b]&&(p[b]=w,f[b]=m,v[b]=l[y],g=!0),!a){var w=p[b]+x;w<p[m]&&(p[m]=w,f[m]=b,v[m]=l[y],g=!0)}}if(!g)break}if(g)for(var y=0;y<l.length;y++){var m=d[l[y].source().id()],b=d[l[y].target().id()],x=r.apply(l[y],[l[y]]);if(p[m]+x<p[b])return i.error("Graph contains a negative weight cycle for Bellman-Ford"),{pathTo:void 0,distanceTo:void 0,hasNegativeWeightCycle:!0}}for(var E=[],h=0;c>h;h++)E.push(u[h].id());var _={distanceTo:function(e){if(n.string(e))var t=s.filter(e)[0].id();else var t=e.id();return p[d[t]]},pathTo:function(e){var r=function(e,t,r,n,i,a){for(;;){if(i.push(s.getElementById(n[r])),i.push(a[r]),t===r)return i;var o=e[r];if("undefined"==typeof o)return;r=o}};if(n.string(e))var i=s.filter(e)[0].id();else var i=e.id();var a=[],l=r(f,d[o.id()],d[i],E,a,v);return null!=l&&l.reverse(),t.spawn(l)},hasNegativeWeightCycle:!1};return _}}};t.exports=a},{"../../is":83,"../../util":100}],5:[function(e,t,r){"use strict";var n=e("../../is"),i=e("../../heap"),a={betweennessCentrality:function(e){e=e||{};var t,r;n.fn(e.weight)?(r=e.weight,t=!0):t=!1;for(var a,o=null!=e.directed?e.directed:!1,s=this._private.cy,l=this.nodes(),u={},c={},d={set:function(e,t){c[e]=t,t>a&&(a=t)},get:function(e){return c[e]}},h=0;h<l.length;h++){var p=l[h],f=p.id();o?u[f]=p.outgoers().nodes():u[f]=p.openNeighborhood().nodes(),d.set(f,0)}for(var v=0;v<l.length;v++){for(var g=l[v].id(),y=[],m={},b={},x={},w=new i(function(e,t){return x[e]-x[t]}),h=0;h<l.length;h++){var f=l[h].id();m[f]=[],b[f]=0,x[f]=1/0}for(b[g]=1,x[g]=0,w.push(g);!w.empty();){var p=w.pop();if(y.push(p),t)for(var E=0;E<u[p].length;E++){var _,P=u[p][E],S=s.getElementById(p);_=S.edgesTo(P).length>0?S.edgesTo(P)[0]:P.edgesTo(S)[0];var k=r.apply(_,[_]);P=P.id(),x[P]>x[p]+k&&(x[P]=x[p]+k,w.nodes.indexOf(P)<0?w.push(P):w.updateItem(P),b[P]=0,m[P]=[]),x[P]==x[p]+k&&(b[P]=b[P]+b[p],m[P].push(p))}else for(var E=0;E<u[p].length;E++){var P=u[p][E].id();x[P]==1/0&&(w.push(P),x[P]=x[p]+1),x[P]==x[p]+1&&(b[P]=b[P]+b[p],m[P].push(p))}}for(var T={},h=0;h<l.length;h++)T[l[h].id()]=0;for(;y.length>0;)for(var P=y.pop(),E=0;E<m[P].length;E++){var p=m[P][E];T[p]=T[p]+b[p]/b[P]*(1+T[P]),P!=l[v].id()&&d.set(P,d.get(P)+T[P])}}var D={betweenness:function(e){if(n.string(e))var e=s.filter(e).id();else var e=e.id();return d.get(e)},betweennessNormalized:function(e){if(n.string(e))var e=s.filter(e).id();else var e=e.id();return d.get(e)/a}};return D.betweennessNormalised=D.betweennessNormalized,D}};a.bc=a.betweennessCentrality,t.exports=a},{"../../heap":81,"../../is":83}],6:[function(e,t,r){"use strict";var n=e("../../is"),i=function(e){return e={bfs:e.bfs||!e.dfs,dfs:e.dfs||!e.bfs},function(t,r,i){var a,o,s;n.plainObject(t)&&!n.elementOrCollection(t)&&(a=t,t=a.roots||a.root,r=a.visit,i=a.directed,o=a.std,s=a.thisArg),i=2!==arguments.length||n.fn(r)?i:r,r=n.fn(r)?r:function(){};for(var l,u=this._private.cy,c=t=n.string(t)?this.filter(t):t,d=[],h=[],p={},f={},v={},g=0,y=this.nodes(),m=this.edges(),b=0;b<c.length;b++)c[b].isNode()&&(d.unshift(c[b]),e.bfs&&(v[c[b].id()]=!0,h.push(c[b])),f[c[b].id()]=0);for(;0!==d.length;){var c=e.bfs?d.shift():d.pop();if(e.dfs){if(v[c.id()])continue;v[c.id()]=!0,h.push(c)}var x,w=f[c.id()],E=p[c.id()],_=null==E?void 0:E.connectedNodes().not(c)[0];if(x=o?r.call(s,c,E,_,g++,w):r.call(c,g++,w,c,E,_),x===!0){l=c;break}if(x===!1)break;for(var P=c.connectedEdges(i?function(){return this.data("source")===c.id()}:void 0).intersect(m),b=0;b<P.length;b++){var S=P[b],k=S.connectedNodes(function(){return this.id()!==c.id()}).intersect(y);0===k.length||v[k.id()]||(k=k[0],d.push(k),e.bfs&&(v[k.id()]=!0,h.push(k)),p[k.id()]=S,f[k.id()]=f[c.id()]+1)}}for(var T=[],b=0;b<h.length;b++){var D=h[b],C=p[D.id()];C&&T.push(C),T.push(D)}return{path:u.collection(T,{unique:!0}),found:u.collection(l)}}},a={breadthFirstSearch:i({bfs:!0}),depthFirstSearch:i({dfs:!0})};a.bfs=a.breadthFirstSearch,a.dfs=a.depthFirstSearch,t.exports=a},{"../../is":83}],7:[function(e,t,r){"use strict";var n=e("../../is"),i={closenessCentralityNormalized:function(e){e=e||{};var t=this.cy(),r=e.harmonic;void 0===r&&(r=!0);for(var i={},a=0,o=this.nodes(),s=this.floydWarshall({weight:e.weight,directed:e.directed}),l=0;l<o.length;l++){for(var u=0,c=0;c<o.length;c++)if(l!=c){var d=s.distance(o[l],o[c]);u+=r?1/d:d}r||(u=1/u),u>a&&(a=u),i[o[l].id()]=u}return{closeness:function(e){if(n.string(e))var e=t.filter(e)[0].id();else var e=e.id();return i[e]/a}}},closenessCentrality:function(e){if(e=e||{},null!=e.root){if(n.string(e.root))var t=this.filter(e.root)[0];else var t=e.root[0];if(null!=e.weight&&n.fn(e.weight))var r=e.weight;else var r=function(){return 1};if(null!=e.directed&&n.bool(e.directed))var i=e.directed;else var i=!1;var a=e.harmonic;void 0===a&&(a=!0);for(var o=this.dijkstra({root:t,weight:r,directed:i}),s=0,l=this.nodes(),u=0;u<l.length;u++)if(l[u].id()!=t.id()){var c=o.distanceTo(l[u]);s+=a?1/c:c}return a?s:1/s}}};i.cc=i.closenessCentrality,i.ccn=i.closenessCentralityNormalised=i.closenessCentralityNormalized,t.exports=i},{"../../is":83}],8:[function(e,t,r){"use strict";var n=e("../../is"),i=e("../../util"),a={degreeCentralityNormalized:function(e){e=e||{};var t=this.cy();if(null!=e.directed)var r=e.directed;else var r=!1;var a=this.nodes(),o=a.length;if(r){for(var s={},l={},u=0,c=0,d=0;o>d;d++){var h=a[d],p=this.degreeCentrality(i.extend({},e,{root:h}));u<p.indegree&&(u=p.indegree),c<p.outdegree&&(c=p.outdegree),s[h.id()]=p.indegree,l[h.id()]=p.outdegree}return{indegree:function(e){if(n.string(e))var e=t.filter(e)[0].id();else var e=e.id();return s[e]/u},outdegree:function(e){if(n.string(e))var e=t.filter(e)[0].id();else var e=e.id();return l[e]/c}}}for(var f={},v=0,d=0;o>d;d++){var h=a[d],p=this.degreeCentrality(i.extend({},e,{root:h}));v<p.degree&&(v=p.degree),f[h.id()]=p.degree}return{degree:function(e){if(n.string(e))var e=t.filter(e)[0].id();else var e=e.id();return f[e]/v}}},degreeCentrality:function(e){e=e||{};var t=this;if(null!=e&&null!=e.root){var r=n.string(e.root)?this.filter(e.root)[0]:e.root[0];if(null!=e.weight&&n.fn(e.weight))var i=e.weight;else var i=function(e){return 1};if(null!=e.directed)var a=e.directed;else var a=!1;if(null!=e.alpha&&n.number(e.alpha))var o=e.alpha;else o=0;if(a){for(var s=r.connectedEdges('edge[target = "'+r.id()+'"]').intersection(t),l=r.connectedEdges('edge[source = "'+r.id()+'"]').intersection(t),u=s.length,c=l.length,d=0,h=0,p=0;p<s.length;p++){var f=s[p];d+=i.apply(f,[f])}for(var p=0;p<l.length;p++){var f=l[p];h+=i.apply(f,[f])}return{indegree:Math.pow(u,1-o)*Math.pow(d,o),outdegree:Math.pow(c,1-o)*Math.pow(h,o)}}for(var v=r.connectedEdges().intersection(t),g=v.length,y=0,p=0;p<v.length;p++){var f=v[p];y+=i.apply(f,[f])}return{degree:Math.pow(g,1-o)*Math.pow(y,o)}}}};a.dc=a.degreeCentrality,a.dcn=a.degreeCentralityNormalised=a.degreeCentralityNormalized,t.exports=a},{"../../is":83,"../../util":100}],9:[function(e,t,r){"use strict";var n=e("../../is"),i=e("../../heap"),a={dijkstra:function(e,t,r){var a;n.plainObject(e)&&!n.elementOrCollection(e)&&(a=e,e=a.root,t=a.weight,r=a.directed);var o=this._private.cy;t=n.fn(t)?t:function(){return 1};for(var s=n.string(e)?this.filter(e)[0]:e[0],l={},u={},c={},d=this.edges().filter(function(){return!this.isLoop()}),h=this.nodes(),p=function(e){return l[e.id()]},f=function(e,t){l[e.id()]=t,v.updateItem(e)},v=new i(function(e,t){return p(e)-p(t)}),g=0;g<h.length;g++){var y=h[g];l[y.id()]=y.same(s)?0:1/0,v.push(y)}for(var m=function(e,n){for(var i,a=(r?e.edgesTo(n):e.edgesWith(n)).intersect(d),o=1/0,s=0;s<a.length;s++){var l=a[s],u=t.apply(l,[l]);(o>u||!i)&&(o=u,i=l)}return{edge:i,dist:o}};v.size()>0;){var b=v.pop(),x=p(b),w=b.id();if(c[w]=x,x===Math.Infinite)break;for(var E=b.neighborhood().intersect(h),g=0;g<E.length;g++){var _=E[g],P=_.id(),S=m(b,_),k=x+S.dist;k<p(_)&&(f(_,k),u[P]={node:b,edge:S.edge})}}return{distanceTo:function(e){var t=n.string(e)?h.filter(e)[0]:e[0];return c[t.id()]},pathTo:function(e){var t=n.string(e)?h.filter(e)[0]:e[0],r=[],i=t;if(t.length>0)for(r.unshift(t);u[i.id()];){var a=u[i.id()];r.unshift(a.edge),r.unshift(a.node),i=a.node}return o.collection(r)}}}};t.exports=a},{"../../heap":81,"../../is":83}],10:[function(e,t,r){"use strict";var n=e("../../is"),i={floydWarshall:function(e){e=e||{};var t=this.cy();if(null!=e.weight&&n.fn(e.weight))var r=e.weight;else var r=function(e){return 1};if(null!=e.directed)var i=e.directed;else var i=!1;for(var a=this.edges().stdFilter(function(e){return!e.isLoop()}),o=this.nodes(),s=o.length,l={},u=0;s>u;u++)l[o[u].id()]=u;for(var c=[],u=0;s>u;u++){for(var d=new Array(s),h=0;s>h;h++)u==h?d[h]=0:d[h]=1/0;c.push(d)}var p=[],f=[],v=function(e){for(var t=0;s>t;t++){for(var r=new Array(s),n=0;s>n;n++)r[n]=void 0;e.push(r)}};v(p),v(f);for(var u=0;u<a.length;u++){var g=l[a[u].source().id()],y=l[a[u].target().id()],m=r.apply(a[u],[a[u]]);c[g][y]>m&&(c[g][y]=m,p[g][y]=y,f[g][y]=a[u])}if(!i)for(var u=0;u<a.length;u++){var g=l[a[u].target().id()],y=l[a[u].source().id()],m=r.apply(a[u],[a[u]]);c[g][y]>m&&(c[g][y]=m,p[g][y]=y,f[g][y]=a[u])}for(var b=0;s>b;b++)for(var u=0;s>u;u++)for(var h=0;s>h;h++)c[u][b]+c[b][h]<c[u][h]&&(c[u][h]=c[u][b]+c[b][h],p[u][h]=p[u][b]);for(var x=[],u=0;s>u;u++)x.push(o[u].id());var w={distance:function(e,r){if(n.string(e))var i=t.filter(e)[0].id();else var i=e.id();if(n.string(r))var a=t.filter(r)[0].id();else var a=r.id();return c[l[i]][l[a]]},path:function(e,r){var i=function(e,r,n,i,a){if(e===r)return t.getElementById(i[e]);if(void 0!==n[e][r]){for(var o=[t.getElementById(i[e])],s=e;e!==r;){s=e,e=n[e][r];var l=a[s][e];o.push(l),o.push(t.getElementById(i[e]))}return o}};if(n.string(e))var a=t.filter(e)[0].id();else var a=e.id();if(n.string(r))var o=t.filter(r)[0].id();else var o=r.id();var s=i(l[a],l[o],p,x,f);return t.collection(s)}};return w}};t.exports=i},{"../../is":83}],11:[function(e,t,r){"use strict";var n=e("../../util"),i={};[e("./bfs-dfs"),e("./dijkstra"),e("./kruskal"),e("./a-star"),e("./floyd-warshall"),e("./bellman-ford"),e("./kerger-stein"),e("./page-rank"),e("./degree-centrality"),e("./closeness-centrality"),e("./betweenness-centrality")].forEach(function(e){n.extend(i,e)}),t.exports=i},{"../../util":100,"./a-star":3,"./bellman-ford":4,"./betweenness-centrality":5,"./bfs-dfs":6,"./closeness-centrality":7,"./degree-centrality":8,"./dijkstra":9,"./floyd-warshall":10,"./kerger-stein":12,"./kruskal":13,"./page-rank":14}],12:[function(e,t,r){"use strict";var n=e("../../util"),i={kargerStein:function(e){var t=this;e=e||{};var r=function(e,t,r){for(var n=r[e],i=n[1],a=n[2],o=t[i],s=t[a],l=r.filter(function(e){return t[e[1]]===o&&t[e[2]]===s?!1:t[e[1]]!==s||t[e[2]]!==o}),u=0;u<l.length;u++){var c=l[u];c[1]===s?(l[u]=c.slice(0),l[u][1]=o):c[2]===s&&(l[u]=c.slice(0),l[u][2]=o)}for(var u=0;u<t.length;u++)t[u]===s&&(t[u]=o);return l},i=function(e,t,n,a){if(a>=n)return t;var o=Math.floor(Math.random()*t.length),s=r(o,e,t);return i(e,s,n-1,a)},a=this._private.cy,o=this.edges().stdFilter(function(e){return!e.isLoop()}),s=this.nodes(),l=s.length,u=o.length,c=Math.ceil(Math.pow(Math.log(l)/Math.LN2,2)),d=Math.floor(l/Math.sqrt(2));if(2>l)return void n.error("At least 2 nodes are required for Karger-Stein algorithm");for(var h={},p=0;l>p;p++)h[s[p].id()]=p;for(var f=[],p=0;u>p;p++){var v=o[p];f.push([p,h[v.source().id()],h[v.target().id()]])}for(var g,y=1/0,m=[],p=0;l>p;p++)m.push(p);for(var b=0;c>=b;b++){var x=m.slice(0),w=i(x,f,l,d),E=x.slice(0),_=i(x,w,d,2),P=i(E,w,d,2);_.length<=P.length&&_.length<y?(y=_.length,g=[_,x]):P.length<=_.length&&P.length<y&&(y=P.length,g=[P,E])}for(var S=g[0].map(function(e){return o[e[0]]}),k=[],T=[],D=g[1][0],p=0;p<g[1].length;p++){var C=g[1][p];C===D?k.push(s[p]):T.push(s[p])}var M={cut:t.spawn(a,S),partition1:t.spawn(k),partition2:t.spawn(T)};return M}};t.exports=i},{"../../util":100}],13:[function(e,t,r){"use strict";var n=e("../../is"),i={kruskal:function(e){function t(e){for(var t=0;t<a.length;t++){var r=a[t];if(r.anySame(e))return{eles:r,index:t}}}var r=this.cy();e=n.fn(e)?e:function(){return 1};for(var i=r.collection(r,[]),a=[],o=this.nodes(),s=0;s<o.length;s++)a.push(o[s].collection());for(var l=this.edges(),u=l.toArray().sort(function(t,r){var n=e.call(t,t),i=e.call(r,r);return n-i}),s=0;s<u.length;s++){var c=u[s],d=c.source()[0],h=c.target()[0],p=t(d),f=t(h);p.index!==f.index&&(i=i.add(c),a[p.index]=p.eles.add(f.eles),a.splice(f.index,1))}return o.add(i)}};t.exports=i},{"../../is":83}],14:[function(e,t,r){"use strict";var n=e("../../is"),i={pageRank:function(e){e=e||{};var t=function(e){for(var t=e.length,r=0,n=0;t>n;n++)r+=e[n];for(var n=0;t>n;n++)e[n]=e[n]/r};if(null!=e&&null!=e.dampingFactor)var r=e.dampingFactor;else var r=.8;if(null!=e&&null!=e.precision)var i=e.precision;else var i=1e-6;if(null!=e&&null!=e.iterations)var a=e.iterations;else var a=200;if(null!=e&&null!=e.weight&&n.fn(e.weight))var o=e.weight;else var o=function(e){return 1};for(var s=this._private.cy,l=this.edges().stdFilter(function(e){return!e.isLoop()}),u=this.nodes(),c=u.length,d=l.length,h={},p=0;c>p;p++)h[u[p].id()]=p;for(var f=[],v=[],g=(1-r)/c,p=0;c>p;p++){for(var y=[],m=0;c>m;m++)y.push(0);f.push(y),v.push(0)}for(var p=0;d>p;p++){var b=l[p],x=h[b.source().id()],w=h[b.target().id()],E=o.apply(b,[b]);f[w][x]+=E,v[x]+=E}for(var _=1/c+g,m=0;c>m;m++)if(0===v[m])for(var p=0;c>p;p++)f[p][m]=_;else for(var p=0;c>p;p++)f[p][m]=f[p][m]/v[m]+g;for(var P,S=[],k=[],p=0;c>p;p++)S.push(1),k.push(0);for(var T=0;a>T;T++){for(var D=k.slice(0),p=0;c>p;p++)for(var m=0;c>m;m++)D[p]+=f[p][m]*S[m];t(D),P=S,S=D;for(var C=0,p=0;c>p;p++)C+=Math.pow(P[p]-S[p],2);if(i>C)break}var M={rank:function(e){if(n.string(e))var t=s.filter(e)[0].id();else var t=e.id();return S[h[t]]}};return M}};t.exports=i},{"../../is":83}],15:[function(e,t,r){"use strict";var n=e("../define"),i={animate:n.animate(),animation:n.animation(),animated:n.animated(),clearQueue:n.clearQueue(),delay:n.delay(),delayAnimation:n.delayAnimation(),stop:n.stop()};t.exports=i},{"../define":44}],16:[function(e,t,r){"use strict";var n=e("../util"),i={classes:function(e){e=e.match(/\S+/g)||[];for(var t=this,r=[],i={},a=0;a<e.length;a++){var o=e[a];i[o]=!0}for(var s=0;s<t.length;s++){for(var l=t[s],u=l._private,c=u.classes,d=!1,a=0;a<e.length;a++){var o=e[a],h=c[o];if(!h){d=!0;break}}if(!d)for(var e=Object.keys(c),a=0;a<e.length;a++){var p=e[a],h=c[p],f=i[p];if(h&&!f){d=!0;break}}d&&(u.classes=n.copy(i),r.push(l))}return r.length>0&&this.spawn(r).updateStyle().trigger("class"),t},addClass:function(e){return this.toggleClass(e,!0)},hasClass:function(e){var t=this[0];return!(null==t||!t._private.classes[e])},toggleClass:function(e,t){for(var r=e.match(/\S+/g)||[],n=this,i=[],a=0,o=n.length;o>a;a++)for(var s=n[a],l=!1,u=0;u<r.length;u++){var c=r[u],d=s._private.classes,h=d[c],p=t||void 0===t&&!h;p?(d[c]=!0,h||l||(i.push(s),l=!0)):(d[c]=!1,h&&!l&&(i.push(s),l=!0))}return i.length>0&&this.spawn(i).updateStyle().trigger("class"),n},removeClass:function(e){return this.toggleClass(e,!1)},flashClass:function(e,t){var r=this;if(null==t)t=250;else if(0===t)return r;return r.addClass(e),setTimeout(function(){r.removeClass(e)},t),r}};t.exports=i},{"../util":100}],17:[function(e,t,r){"use strict";var n={allAre:function(e){return this.filter(e).length===this.length},is:function(e){return this.filter(e).length>0},some:function(e,t){for(var r=0;r<this.length;r++){var n=t?e.apply(t,[this[r],r,this]):e(this[r],r,this);if(n)return!0}return!1},every:function(e,t){for(var r=0;r<this.length;r++){var n=t?e.apply(t,[this[r],r,this]):e(this[r],r,this);if(!n)return!1}return!0},same:function(e){return e=this.cy().collection(e),this.length!==e.length?!1:this.intersect(e).length===this.length},anySame:function(e){return e=this.cy().collection(e),this.intersect(e).length>0},allAreNeighbors:function(e){return e=this.cy().collection(e),this.neighborhood().intersect(e).length===e.length}};n.allAreNeighbours=n.allAreNeighbors,t.exports=n},{}],18:[function(e,t,r){"use strict";var n={parent:function(e){for(var t=[],r=this._private.cy,n=0;n<this.length;n++){var i=this[n],a=r.getElementById(i._private.data.parent);a.size()>0&&t.push(a)}return this.spawn(t,{unique:!0}).filter(e)},parents:function(e){for(var t=[],r=this.parent();r.nonempty();){for(var n=0;n<r.length;n++){var i=r[n];t.push(i)}r=r.parent()}return this.spawn(t,{unique:!0}).filter(e)},commonAncestors:function(e){for(var t,r=0;r<this.length;r++){var n=this[r],i=n.parents();t=t||i,t=t.intersect(i)}return t.filter(e)},orphans:function(e){return this.stdFilter(function(e){return e.isNode()&&e.parent().empty()}).filter(e)},nonorphans:function(e){return this.stdFilter(function(e){return e.isNode()&&e.parent().nonempty()}).filter(e)},children:function(e){for(var t=[],r=0;r<this.length;r++){var n=this[r];t=t.concat(n._private.children)}return this.spawn(t,{unique:!0}).filter(e)},siblings:function(e){return this.parent().children().not(this).filter(e)},isParent:function(){var e=this[0];return e?0!==e._private.children.length:void 0},isChild:function(){var e=this[0];return e?void 0!==e._private.data.parent&&0!==e.parent().length:void 0},descendants:function(e){function t(e){for(var n=0;n<e.length;n++){var i=e[n];r.push(i),i.children().nonempty()&&t(i.children())}}var r=[];return t(this.children()),this.spawn(r,{unique:!0}).filter(e)}};n.ancestors=n.parents,t.exports=n},{}],19:[function(e,t,r){"use strict";var n,i,a=e("../define");n=i={data:a.data({field:"data",bindingEvent:"data",allowBinding:!0,allowSetting:!0,settingEvent:"data",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),removeData:a.removeData({field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!0,immutableKeys:{id:!0,source:!0,target:!0,parent:!0},updateStyle:!0}),scratch:a.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0,updateStyle:!0}),removeScratch:a.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0,updateStyle:!0}),rscratch:a.data({field:"rscratch",allowBinding:!1,allowSetting:!0,settingTriggersEvent:!1,allowGetting:!0}),removeRscratch:a.removeData({field:"rscratch",triggerEvent:!1}),id:function(){var e=this[0];return e?e._private.data.id:void 0}},n.attr=n.data,n.removeAttr=n.removeData,t.exports=i},{"../define":44}],20:[function(e,t,r){"use strict";function n(e){return function(t){var r=this;if(void 0===t&&(t=!0),0!==r.length&&r.isNode()&&!r.removed()){for(var n=0,i=r[0],a=i._private.edges,o=0;o<a.length;o++){var s=a[o];!t&&s.isLoop()||(n+=e(i,s))}return n}}}function i(e,t){return function(r){for(var n,i=this.nodes(),a=0;a<i.length;a++){var o=i[a],s=o[e](r);void 0===s||void 0!==n&&!t(s,n)||(n=s)}return n}}var a=e("../util"),o={};a.extend(o,{degree:n(function(e,t){return t.source().same(t.target())?2:1}),indegree:n(function(e,t){return t.target().same(e)?1:0}),outdegree:n(function(e,t){return t.source().same(e)?1:0})}),a.extend(o,{minDegree:i("degree",function(e,t){return t>e}),maxDegree:i("degree",function(e,t){return e>t}),minIndegree:i("indegree",function(e,t){return t>e}),maxIndegree:i("indegree",function(e,t){return e>t}),minOutdegree:i("outdegree",function(e,t){return t>e}),maxOutdegree:i("outdegree",function(e,t){return e>t})}),a.extend(o,{totalDegree:function(e){for(var t=0,r=this.nodes(),n=0;n<r.length;n++)t+=r[n].degree(e);return t}}),t.exports=o},{"../util":100}],21:[function(e,t,r){"use strict";var n,i,a=e("../define"),o=e("../is"),s=e("../util"),l=e("../math");n=i={position:a.data({field:"position",bindingEvent:"position",allowBinding:!0,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!0,triggerFnName:"rtrigger",allowGetting:!0,validKeys:["x","y"],onSet:function(e){var t=e.updateCompoundBounds();t.rtrigger("position")},canSet:function(e){return!e.locked()&&!e.isParent()}}),silentPosition:a.data({field:"position",bindingEvent:"position",allowBinding:!1,allowSetting:!0,settingEvent:"position",settingTriggersEvent:!1,triggerFnName:"trigger",allowGetting:!0,validKeys:["x","y"],onSet:function(e){e.updateCompoundBounds()},canSet:function(e){return!e.locked()&&!e.isParent()}}),positions:function(e,t){if(o.plainObject(e))this.position(e);else if(o.fn(e)){for(var r=e,n=0;n<this.length;n++){var i=this[n],e=r.apply(i,[n,i]);if(e&&!i.locked()&&!i.isParent()){var a=i._private.position;a.x=e.x,a.y=e.y}}var s=this.updateCompoundBounds(),l=s.length>0?this.add(s):this;t?l.trigger("position"):l.rtrigger("position")}return this},silentPositions:function(e){return this.positions(e,!0)},renderedPosition:function(e,t){var r=this[0],n=this.cy(),i=n.zoom(),a=n.pan(),s=o.plainObject(e)?e:void 0,l=void 0!==s||void 0!==t&&o.string(e);if(r&&r.isNode()){if(!l){var u=r._private.position;return s={x:u.x*i+a.x,y:u.y*i+a.y},void 0===e?s:s[e]}for(var c=0;c<this.length;c++){var r=this[c];void 0!==t?r._private.position[e]=(t-a[e])/i:void 0!==s&&(r._private.position={x:(s.x-a.x)/i,y:(s.y-a.y)/i})}this.rtrigger("position")}else if(!l)return;return this},relativePosition:function(e,t){var r=this[0],n=this.cy(),i=o.plainObject(e)?e:void 0,a=void 0!==i||void 0!==t&&o.string(e),s=n.hasCompoundNodes();if(r&&r.isNode()){if(!a){var l=r._private.position,u=s?r.parent():null,c=u&&u.length>0,d=c;c&&(u=u[0]);var h=d?u._private.position:{x:0,y:0};return i={x:l.x-h.x,y:l.y-h.y},void 0===e?i:i[e]}for(var p=0;p<this.length;p++){var r=this[p],u=s?r.parent():null,c=u&&u.length>0,d=c;c&&(u=u[0]);var h=d?u._private.position:{x:0,y:0};void 0!==t?r._private.position[e]=t+h[e]:void 0!==i&&(r._private.position={x:i.x+h.x,y:i.y+h.y})}this.rtrigger("position")}else if(!a)return;return this},renderedBoundingBox:function(e){var t=this.boundingBox(e),r=this.cy(),n=r.zoom(),i=r.pan(),a=t.x1*n+i.x,o=t.x2*n+i.x,s=t.y1*n+i.y,l=t.y2*n+i.y;return{x1:a,x2:o,y1:s,y2:l,w:o-a,h:l-s}},updateCompoundBounds:function(){function e(e){if(e.isParent()){var t=e._private,n=e.children(),i="include"===e.pstyle("compound-sizing-wrt-labels").value,a=n.boundingBox({includeLabels:i,includeShadows:!1,includeOverlays:!1,useCache:!1}),o={top:e.pstyle("padding-top").pfValue,bottom:e.pstyle("padding-bottom").pfValue,left:e.pstyle("padding-left").pfValue,right:e.pstyle("padding-right").pfValue},s=t.position;t.autoWidth=a.w,s.x=(a.x1+a.x2-o.left+o.right)/2,t.autoHeight=a.h,s.y=(a.y1+a.y2-o.top+o.bottom)/2,r.push(e)}}var t=this.cy();if(!t.styleEnabled()||!t.hasCompoundNodes())return t.collection();for(var r=[],n=this;n.nonempty();){for(var i=0;i<n.length;i++){var a=n[i];e(a)}n=n.parent()}return this.spawn(r)}};var u=function(e){return e===1/0||e===-(1/0)?0:e},c=function(e,t,r,n,i){n-t!==0&&i-r!==0&&(e.x1=t<e.x1?t:e.x1,e.x2=n>e.x2?n:e.x2,e.y1=r<e.y1?r:e.y1,e.y2=i>e.y2?i:e.y2)},d=function(e,t){return c(e,t.x1,t.y1,t.x2,t.y2)},h=function(e,t,r){return s.getPrefixedProperty(e,t,r)},p=function(e,t,r,n){var i,a,o=t._private,s=o.rstyle,l=s.arrowWidth/2,u=t.pstyle(r+"-arrow-shape").value;"none"!==u&&("source"===r?(i=s.srcX,a=s.srcY):"target"===r?(i=s.tgtX,a=s.tgtY):(i=s.midX,a=s.midY),c(e,i-l,a-l,i+l,a+l))},f=function(e,t,r,n){var i;i=r?r+"-":"";var a=t._private,o=a.rstyle,s=t.pstyle(i+"label").strValue;if(s){var l,u,d,p,f=t.pstyle("text-halign"),v=t.pstyle("text-valign"),g=h(o,"labelWidth",r),y=h(o,"labelHeight",r),m=h(o,"labelX",r),b=h(o,"labelY",r),x=t.pstyle(i+"text-margin-x").pfValue,w=t.pstyle(i+"text-margin-y").pfValue,E=t.isEdge(),_=t.pstyle(i+"text-rotation"),P=t.pstyle("text-shadow-blur").pfValue/2,S=t.pstyle("text-shadow-offset-x").pfValue,k=t.pstyle("text-shadow-offset-y").pfValue,T=t.pstyle("text-shadow-opacity").value,D=t.pstyle("text-outline-width").pfValue,C=t.pstyle("text-border-width").pfValue,M=C/2,N=y,B=g,z=B/2,I=N/2;if(E)l=m-z,u=m+z,d=b-I,p=b+I;else{switch(f.value){case"left":l=m-B,u=m;break;case"center":l=m-z,u=m+z;break;case"right":l=m,u=m+B}switch(v.value){case"top":d=b-N,p=b;break;case"center":d=b-I,p=b+I;break;case"bottom":d=b,p=b+N}}var L=E&&"autorotate"===_.strValue,O=null!=_.pfValue&&0!==_.pfValue;if(L||O){var A=L?h(a.rstyle,"labelAngle",r):_.pfValue,R=Math.cos(A),q=Math.sin(A),V=function(e,t){return e-=m,t-=b,{x:e*R-t*q+m,y:e*q+t*R+b}},F=V(l,d),j=V(l,p),X=V(u,d),Y=V(u,p);l=Math.min(F.x,j.x,X.x,Y.x),u=Math.max(F.x,j.x,X.x,Y.x),d=Math.min(F.y,j.y,X.y,Y.y),p=Math.max(F.y,j.y,X.y,Y.y)}l+=x-Math.max(D,M),u+=x+Math.max(D,M),d+=w-Math.max(D,M),p+=w+Math.max(D,M),c(e,l,d,u,p),n.includeShadows&&T>0&&(l+=-P+S,u+=+P+S,d+=-P+k,p+=+P+k,c(e,l,d,u,p))}return e},v=function(e,t){var r,n,i,a,o,s,d=e._private.cy,h=d._private,v=h.styleEnabled,g={x1:1/0,y1:1/0,x2:-(1/0),y2:-(1/0)},y=e._private,m=v?e.pstyle("display").value:"element",b=e.isNode(),x=e.isEdge(),w="none"!==m;if(w){var E=0,_=0;v&&t.includeOverlays&&(E=e.pstyle("overlay-opacity").value,0!==E&&(_=e.pstyle("overlay-padding").value));var P=0,S=0;if(v&&(P=e.pstyle("width").pfValue,S=P/2),b&&t.includeNodes){var k=y.position;o=k.x,s=k.y;var P=e.outerWidth(),T=P/2,D=e.outerHeight(),C=D/2;r=o-T-_,n=o+T+_,i=s-C-_,a=s+C+_,c(g,r,i,n,a)}else if(x&&t.includeEdges){var M=y.rstyle||{};if(v&&(r=Math.min(M.srcX,M.midX,M.tgtX),n=Math.max(M.srcX,M.midX,M.tgtX),i=Math.min(M.srcY,M.midY,M.tgtY),a=Math.max(M.srcY,M.midY,M.tgtY),r-=S,n+=S,i-=S,a+=S,c(g,r,i,n,a)),v&&"haystack"===e.pstyle("curve-style").strValue){var N=M.haystackPts;if(r=N[0].x,i=N[0].y,n=N[1].x,a=N[1].y,r>n){var B=r;r=n,n=B}if(i>a){var B=i;i=a,a=B}c(g,r-S,i-S,n+S,a+S)}else{for(var z=M.bezierPts||M.linePts||[],I=0;I<z.length;I++){var L=z[I];r=L.x-S,n=L.x+S,i=L.y-S,a=L.y+S,c(g,r,i,n,a)}if(0===z.length){var O=y.source,A=O._private,R=A.position,q=y.target,V=q._private,F=V.position;if(r=R.x,n=F.x,i=R.y,a=F.y,r>n){var B=r;r=n,n=B}if(i>a){var B=i;i=a,a=B}r-=S,n+=S,i-=S,a+=S,c(g,r,i,n,a)}}}if(v){if(r=g.x1,n=g.x2,i=g.y1,a=g.y2,t.includeShadows&&e.pstyle("shadow-opacity").value>0){var j=e.pstyle("shadow-blur").pfValue/2,X=e.pstyle("shadow-offset-x").pfValue,Y=e.pstyle("shadow-offset-y").pfValue;c(g,r-j+X,i-j+Y,n+j+X,a+j+Y)}c(g,r-_,i-_,n+_,a+_)}v&&t.includeEdges&&x&&(p(g,e,"mid-source",t),p(g,e,"mid-target",t),p(g,e,"source",t),p(g,e,"target",t)),v&&t.includeLabels&&(f(g,e,null,t),x&&(f(g,e,"source",t),f(g,e,"target",t)))}return g.x1=u(g.x1),g.y1=u(g.y1),g.x2=u(g.x2),g.y2=u(g.y2),g.w=u(g.x2-g.x1),g.h=u(g.y2-g.y1),g.w>0&&g.h>0&&w&&l.expandBoundingBox(g,1),g},g=function(e){return e?"t":"f"},y=function(e){var t="";return t+=g(e.incudeNodes),t+=g(e.includeEdges),t+=g(e.includeLabels),t+=g(e.includeShadows),t+=g(e.includeOverlays)},m=function(e,t){var r,n=e._private,i=e.cy().headless(),a=t===b?x:y(t);return t.useCache&&!i&&n.bbCache&&n.bbCache[a]?r=n.bbCache[a]:(r=v(e,t),i||(n.bbCache=n.bbCache||{},n.bbCache[a]=r)),r},b={includeNodes:!0,includeEdges:!0,includeLabels:!0,includeShadows:!0,includeOverlays:!0,useCache:!0},x=y(b);i.boundingBox=function(e){if(1===this.length&&this[0]._private.bbCache&&(void 0===e||void 0===e.useCache||e.useCache===!0))return void 0===e&&(e=b),m(this[0],e);var t={x1:1/0,y1:1/0,x2:-(1/0),y2:-(1/0)};e=e||s.staticEmptyObject();var r={includeNodes:s["default"](e.includeNodes,b.includeNodes),includeEdges:s["default"](e.includeEdges,b.includeEdges),includeLabels:s["default"](e.includeLabels,b.includeLabels),includeShadows:s["default"](e.includeShadows,b.includeShadows),includeOverlays:s["default"](e.includeOverlays,b.includeOverlays),useCache:s["default"](e.useCache,b.useCache)},n=this,i=n.cy(),a=n.cy().renderer(),o=i.styleEnabled();
-o&&a.recalculateRenderedStyle(n,r.useCache);for(var l=0;l<n.length;l++){var c=n[l];o&&c.isEdge()&&"bezier"===c.pstyle("curve-style").strValue&&a.recalculateRenderedStyle(c.parallelEdges(),r.useCache),d(t,m(c,r))}return t.x1=u(t.x1),t.y1=u(t.y1),t.x2=u(t.x2),t.y2=u(t.y2),t.w=u(t.x2-t.x1),t.h=u(t.y2-t.y1),t};var w=function(e){e.uppercaseName=s.capitalize(e.name),e.autoName="auto"+e.uppercaseName,e.labelName="label"+e.uppercaseName,e.outerName="outer"+e.uppercaseName,e.uppercaseOuterName=s.capitalize(e.outerName),n[e.name]=function(){var t=this[0],r=t._private,n=r.cy,i=n._private.styleEnabled;if(t){if(!i)return 1;if(t.isParent())return r[e.autoName]||0;var a=t.pstyle(e.name);switch(a.strValue){case"label":return r.rstyle[e.labelName]||0;default:return a.pfValue}}},n["outer"+e.uppercaseName]=function(){var t=this[0],r=t._private,n=r.cy,i=n._private.styleEnabled;if(t){if(i){var a=t[e.name](),o=t.pstyle("border-width").pfValue,s=t.pstyle(e.paddings[0]).pfValue+t.pstyle(e.paddings[1]).pfValue;return a+o+s}return 1}},n["rendered"+e.uppercaseName]=function(){var t=this[0];if(t){var r=t[e.name]();return r*this.cy().zoom()}},n["rendered"+e.uppercaseOuterName]=function(){var t=this[0];if(t){var r=t[e.outerName]();return r*this.cy().zoom()}}};w({name:"width",paddings:["padding-left","padding-right"]}),w({name:"height",paddings:["padding-top","padding-bottom"]}),n.modelPosition=n.point=n.position,n.modelPositions=n.points=n.positions,n.renderedPoint=n.renderedPosition,n.relativePoint=n.relativePosition,n.boundingbox=n.boundingBox,n.renderedBoundingbox=n.renderedBoundingBox,t.exports=i},{"../define":44,"../is":83,"../math":85,"../util":100}],22:[function(e,t,r){"use strict";var n=e("../util"),i=e("../is"),a=function(e,t,r){var a=this;if(r=!(void 0!==r&&!r),void 0===e||void 0===t||!i.core(e))return void n.error("An element must have a core reference and parameters set");var o=t.group;if(null==o&&(o=t.data&&null!=t.data.source&&null!=t.data.target?"edges":"nodes"),"nodes"!==o&&"edges"!==o)return void n.error("An element must be of type `nodes` or `edges`; you specified `"+o+"`");if(this.length=1,this[0]=this,this._private={cy:e,single:!0,data:t.data||{},position:t.position||{},autoWidth:void 0,autoHeight:void 0,listeners:[],group:o,style:{},rstyle:{},styleCxts:[],removed:!0,selected:!!t.selected,selectable:void 0===t.selectable?!0:!!t.selectable,locked:!!t.locked,grabbed:!1,grabbable:void 0===t.grabbable?!0:!!t.grabbable,active:!1,classes:{},animation:{current:[],queue:[]},rscratch:{},scratch:t.scratch||{},edges:[],children:[],traversalCache:{}},t.renderedPosition){var s=t.renderedPosition,l=e.pan(),u=e.zoom();this._private.position={x:(s.x-l.x)/u,y:(s.y-l.y)/u}}if(i.string(t.classes))for(var c=t.classes.split(/\s+/),d=0,h=c.length;h>d;d++){var p=c[d];p&&""!==p&&(a._private.classes[p]=!0)}(t.style||t.css)&&e.style().applyBypass(this,t.style||t.css),(void 0===r||r)&&this.restore()};t.exports=a},{"../is":83,"../util":100}],23:[function(e,t,r){"use strict";var n=e("../define"),i={on:n.on(),one:n.on({unbindSelfOnTrigger:!0}),once:n.on({unbindAllBindersOnTrigger:!0}),off:n.off(),trigger:n.trigger(),rtrigger:function(e,t){return 0!==this.length?(this.cy().notify({type:e,eles:this}),this.trigger(e,t),this):void 0}};n.eventAliasesOn(i),t.exports=i},{"../define":44}],24:[function(e,t,r){"use strict";var n=e("../is"),i=e("../selector"),a={nodes:function(e){return this.filter(function(e,t){return t.isNode()}).filter(e)},edges:function(e){return this.filter(function(e,t){return t.isEdge()}).filter(e)},filter:function(e){if(void 0===e)return this;if(n.string(e)||n.elementOrCollection(e))return i(e).filter(this);if(n.fn(e)){for(var t=[],r=0;r<this.length;r++){var a=this[r];e.apply(a,[r,a])&&t.push(a)}return this.spawn(t)}return this.spawn()},not:function(e){if(e){n.string(e)&&(e=this.filter(e));for(var t=[],r=0;r<this.length;r++){var i=this[r],a=e._private.ids[i.id()];a||t.push(i)}return this.spawn(t)}return this},absoluteComplement:function(){var e=this._private.cy;return e.mutableElements().not(this)},intersect:function(e){if(n.string(e)){var t=e;return this.filter(t)}for(var r=[],i=this,a=e,o=this.length<e.length,s=o?a._private.ids:i._private.ids,l=o?i:a,u=0;u<l.length;u++){var c=l[u]._private.data.id,d=s[c];d&&r.push(d)}return this.spawn(r)},xor:function(e){var t=this._private.cy;n.string(e)&&(e=t.$(e));var r=[],i=this,a=e,o=function(e,t){for(var n=0;n<e.length;n++){var i=e[n],a=i._private.data.id,o=t._private.ids[a];o||r.push(i)}};return o(i,a),o(a,i),this.spawn(r)},diff:function(e){var t=this._private.cy;n.string(e)&&(e=t.$(e));var r=[],i=[],a=[],o=this,s=e,l=function(e,t,r){for(var n=0;n<e.length;n++){var i=e[n],o=i._private.data.id,s=t._private.ids[o];s?a.push(i):r.push(i)}};return l(o,s,r),l(s,o,i),{left:this.spawn(r,{unique:!0}),right:this.spawn(i,{unique:!0}),both:this.spawn(a,{unique:!0})}},add:function(e){var t=this._private.cy;if(!e)return this;if(n.string(e)){var r=e;e=t.mutableElements().filter(r)}for(var i=[],a=0;a<this.length;a++)i.push(this[a]);for(var a=0;a<e.length;a++){var o=!this._private.ids[e[a].id()];o&&i.push(e[a])}return this.spawn(i)},merge:function(e){var t=this._private,r=t.cy;if(!e)return this;if(e&&n.string(e)){var i=e;e=r.mutableElements().filter(i)}for(var a=0;a<e.length;a++){var o=e[a],s=o._private.data.id,l=!t.ids[s];if(l){var u=this.length++;this[u]=o,t.ids[s]=o,t.indexes[s]=u}else{var u=t.indexes[s];this[u]=o,t.ids[s]=o}}return this},unmergeOne:function(e){e=e[0];var t=this._private,r=e._private.data.id,n=t.indexes[r];if(null==n)return this;this[n]=void 0,t.ids[r]=void 0,t.indexes[r]=void 0;var i=n===this.length-1;if(this.length>1&&!i){var a=this.length-1,o=this[a],s=o._private.data.id;this[a]=void 0,this[n]=o,t.indexes[s]=n}return this.length--,this},unmerge:function(e){var t=this._private.cy;if(!e)return this;if(e&&n.string(e)){var r=e;e=t.mutableElements().filter(r)}for(var i=0;i<e.length;i++)this.unmergeOne(e[i]);return this},map:function(e,t){for(var r=[],n=this,i=0;i<n.length;i++){var a=n[i],o=t?e.apply(t,[a,i,n]):e(a,i,n);r.push(o)}return r},stdFilter:function(e,t){for(var r=[],n=this,i=0;i<n.length;i++){var a=n[i],o=t?e.apply(t,[a,i,n]):e(a,i,n);o&&r.push(a)}return this.spawn(r)},max:function(e,t){for(var r,n=-(1/0),i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);s>n&&(n=s,r=o)}return{value:n,ele:r}},min:function(e,t){for(var r,n=1/0,i=this,a=0;a<i.length;a++){var o=i[a],s=t?e.apply(t,[o,a,i]):e(o,a,i);n>s&&(n=s,r=o)}return{value:n,ele:r}}},o=a;o.u=o["|"]=o["+"]=o.union=o.or=o.add,o["\\"]=o["!"]=o["-"]=o.difference=o.relativeComplement=o.subtract=o.not,o.n=o["&"]=o["."]=o.and=o.intersection=o.intersect,o["^"]=o["(+)"]=o["(-)"]=o.symmetricDifference=o.symdiff=o.xor,o.fnFilter=o.filterFn=o.stdFilter,o.complement=o.abscomp=o.absoluteComplement,t.exports=a},{"../is":83,"../selector":87}],25:[function(e,t,r){"use strict";var n={isNode:function(){return"nodes"===this.group()},isEdge:function(){return"edges"===this.group()},isLoop:function(){return this.isEdge()&&this.source().id()===this.target().id()},isSimple:function(){return this.isEdge()&&this.source().id()!==this.target().id()},group:function(){var e=this[0];return e?e._private.group:void 0}};t.exports=n},{}],26:[function(e,t,r){"use strict";var n=e("../util"),i=e("../is"),a=e("./element"),o={generate:function(e,t,r){for(var i=null!=r?r:n.uuid();e.hasElementWithId(i);)i=n.uuid();return i}},s=function(e,t,r){if(void 0===e||!i.core(e))return void n.error("A collection must have a reference to the core");var s={},l={},u=!1;if(t){if(t.length>0&&i.plainObject(t[0])&&!i.element(t[0])){u=!0;for(var c=[],d={},h=0,p=t.length;p>h;h++){var f=t[h];null==f.data&&(f.data={});var v=f.data;if(null==v.id)v.id=o.generate(e,f);else if(e.hasElementWithId(v.id)||d[v.id])continue;var g=new a(e,f,!1);c.push(g),d[v.id]=!0}t=c}}else t=[];this.length=0;for(var h=0,p=t.length;p>h;h++){var y=t[h];if(y){var m=y._private.data.id;(!r||r.unique&&!s[m])&&(s[m]=y,l[m]=this.length,this[this.length]=y,this.length++)}}this._private={cy:e,ids:s,indexes:l},u&&this.restore()},l=a.prototype=s.prototype;l.instanceString=function(){return"collection"},l.spawn=function(e,t,r){return i.core(e)||(r=t,t=e,e=this.cy()),new s(e,t,r)},l.spawnSelf=function(){return this.spawn(this)},l.cy=function(){return this._private.cy},l.element=function(){return this[0]},l.collection=function(){return i.collection(this)?this:new s(this._private.cy,[this])},l.unique=function(){return new s(this._private.cy,this,{unique:!0})},l.hasElementWithId=function(e){return!!this._private.ids[e]},l.getElementById=function(e){var t=this._private.cy,r=this._private.ids[e];return r?r:new s(t)},l.poolIndex=function(){var e=this._private.cy,t=e._private.elements,r=this._private.data.id;return t._private.indexes[r]},l.json=function(e){var t=this.element(),r=this.cy();if(null==t&&e)return this;if(null!=t){var a=t._private;if(i.plainObject(e)){r.startBatch(),e.data&&t.data(e.data),e.position&&t.position(e.position);var o=function(r,n,i){var o=e[r];null!=o&&o!==a[r]&&(o?t[n]():t[i]())};return o("removed","remove","restore"),o("selected","select","unselect"),o("selectable","selectify","unselectify"),o("locked","lock","unlock"),o("grabbable","grabify","ungrabify"),null!=e.classes&&t.classes(e.classes),r.endBatch(),this}if(void 0===e){var s={data:n.copy(a.data),position:n.copy(a.position),group:a.group,removed:a.removed,selected:a.selected,selectable:a.selectable,locked:a.locked,grabbable:a.grabbable,classes:null};return s.classes=Object.keys(a.classes).filter(function(e){return a.classes[e]}).join(" "),s}}},l.jsons=function(){for(var e=[],t=0;t<this.length;t++){var r=this[t],n=r.json();e.push(n)}return e},l.clone=function(){for(var e=this.cy(),t=[],r=0;r<this.length;r++){var n=this[r],i=n.json(),o=new a(e,i,!1);t.push(o)}return new s(e,t)},l.copy=l.clone,l.restore=function(e){var t=this,r=t.cy(),a=r._private;void 0===e&&(e=!0);for(var l,u=[],c=[],d=0,h=t.length;h>d;d++){var p=t[d];p.removed()&&(p.isNode()?u.push(p):c.push(p))}l=u.concat(c);var d,f=function(){l.splice(d,1),d--};for(d=0;d<l.length;d++){var p=l[d],v=p._private,g=v.data;if(v.traversalCache=null,void 0===g.id)g.id=o.generate(r,p);else if(i.number(g.id))g.id=""+g.id;else{if(i.emptyString(g.id)||!i.string(g.id)){n.error("Can not create element with invalid string ID `"+g.id+"`"),f();continue}if(r.hasElementWithId(g.id)){n.error("Can not create second element with ID `"+g.id+"`"),f();continue}}var y=g.id;if(p.isNode()){var m=p,b=v.position;null==b.x&&(b.x=0),null==b.y&&(b.y=0)}if(p.isEdge()){for(var x=p,w=["source","target"],E=w.length,_=!1,P=0;E>P;P++){var S=w[P],k=g[S];i.number(k)&&(k=g[S]=""+g[S]),null==k||""===k?(n.error("Can not create edge `"+y+"` with unspecified "+S),_=!0):r.hasElementWithId(k)||(n.error("Can not create edge `"+y+"` with nonexistant "+S+" `"+k+"`"),_=!0)}if(_){f();continue}var T=r.getElementById(g.source),D=r.getElementById(g.target);T._private.edges.push(x),D._private.edges.push(x),x._private.source=T,x._private.target=D}v.ids={},v.ids[y]=p,v.indexes={},v.indexes[y]=p,v.removed=!1,r.addToPool(p)}for(var d=0;d<u.length;d++){var m=u[d],g=m._private.data;i.number(g.parent)&&(g.parent=""+g.parent);var C=g.parent,M=null!=C;if(M){var N=r.getElementById(C);if(N.empty())g.parent=void 0;else{for(var B=!1,z=N;!z.empty();){if(m.same(z)){B=!0,g.parent=void 0;break}z=z.parent()}B||(N[0]._private.children.push(m),m._private.parent=N[0],a.hasCompoundNodes=!0)}}}if(l.length>0){for(var I=new s(r,l),d=0;d<I.length;d++){var p=I[d];if(!p.isNode()){for(var L=p.parallelEdges(),P=0;P<L.length;P++)L[P]._private.traversalCache=null;p.source()[0]._private.traversalCache=null,p.target()[0]._private.traversalCache=null}}var O;O=a.hasCompoundNodes?I.add(I.connectedNodes()).add(I.parent()):I,O.updateStyle(e),e?I.rtrigger("add"):I.trigger("add")}return t},l.removed=function(){var e=this[0];return e&&e._private.removed},l.inside=function(){var e=this[0];return e&&!e._private.removed},l.remove=function(e){function t(e){for(var t=e._private.edges,r=0;r<t.length;r++)i(t[r])}function r(e){for(var t=e._private.children,r=0;r<t.length;r++)i(t[r])}function i(e){var n=h[e.id()];n||(h[e.id()]=!0,e.isNode()?(d.push(e),t(e),r(e)):d.unshift(e))}function a(e,t){var r=e._private.edges;n.removeFromArray(r,t),e._private.traversalCache=null}function o(e){for(var t=e.parallelEdges(),r=0;r<t.length;r++)t[r]._private.traversalCache=null}function l(e,t){t=t[0],e=e[0];var r=e._private.children,i=e.id();n.removeFromArray(r,t),y.ids[i]||(y.ids[i]=!0,y.push(e))}var u=this,c=[],d=[],h={},p=u._private.cy;void 0===e&&(e=!0);for(var f=0,v=u.length;v>f;f++){var g=u[f];i(g)}var y=[];y.ids={},p.removeFromPool(d);for(var f=0;f<d.length;f++){var g=d[f];if(g._private.removed=!0,c.push(g),g.isEdge()){var m=g.source()[0],b=g.target()[0];a(m,g),a(b,g),o(g)}else{var x=g.parent();0!==x.length&&l(x,g)}}var w=p._private.elements;p._private.hasCompoundNodes=!1;for(var f=0;f<w.length;f++){var g=w[f];if(g.isParent()){p._private.hasCompoundNodes=!0;break}}var E=new s(this.cy(),c);E.size()>0&&(e&&this.cy().notify({type:"remove",eles:E}),E.trigger("remove"));for(var f=0;f<y.length;f++){var g=y[f];g.removed()||g.updateStyle()}return new s(p,c)},l.move=function(e){var t=this._private.cy;if(void 0!==e.source||void 0!==e.target){var r=e.source,n=e.target,i=t.hasElementWithId(r),a=t.hasElementWithId(n);if(i||a){var o=this.jsons();this.remove();for(var s=0;s<o.length;s++){var l=o[s],u=this[s];"edges"===l.group&&(i&&(l.data.source=r),a&&(l.data.target=n),l.scratch=u._private.scratch)}return t.add(o)}}else if(void 0!==e.parent){var c=e.parent,d=null===c||t.hasElementWithId(c);if(d){var o=this.jsons(),h=this.descendants(),p=h.union(h.union(this).connectedEdges());this.remove();for(var s=0;s<this.length;s++){var l=o[s],u=this[s];"nodes"===l.group&&(l.data.parent=null===c?void 0:c,l.scratch=u._private.scratch)}return t.add(o).union(p.restore())}}return this},[e("./algorithms"),e("./animation"),e("./class"),e("./comparators"),e("./compounds"),e("./data"),e("./degree"),e("./dimensions"),e("./events"),e("./filter"),e("./group"),e("./index"),e("./iteration"),e("./layout"),e("./style"),e("./switch-functions"),e("./traversing")].forEach(function(e){n.extend(l,e)}),t.exports=s},{"../is":83,"../util":100,"./algorithms":11,"./animation":15,"./class":16,"./comparators":17,"./compounds":18,"./data":19,"./degree":20,"./dimensions":21,"./element":22,"./events":23,"./filter":24,"./group":25,"./index":26,"./iteration":27,"./layout":28,"./style":29,"./switch-functions":30,"./traversing":31}],27:[function(e,t,r){"use strict";var n=e("../is"),i=e("./zsort"),a={each:function(e){if(n.fn(e))for(var t=0;t<this.length;t++){var r=this[t],i=e.apply(r,[t,r]);if(i===!1)break}return this},forEach:function(e,t){if(n.fn(e))for(var r=0;r<this.length;r++){var i=this[r],a=t?e.apply(t,[i,r,this]):e(i,r,this);if(a===!1)break}return this},toArray:function(){for(var e=[],t=0;t<this.length;t++)e.push(this[t]);return e},slice:function(e,t){var r=[],n=this.length;null==t&&(t=n),null==e&&(e=0),0>e&&(e=n+e),0>t&&(t=n+t);for(var i=e;i>=0&&t>i&&n>i;i++)r.push(this[i]);return this.spawn(r)},size:function(){return this.length},eq:function(e){return this[e]||this.spawn()},first:function(){return this[0]||this.spawn()},last:function(){return this[this.length-1]||this.spawn()},empty:function(){return 0===this.length},nonempty:function(){return!this.empty()},sort:function(e){if(!n.fn(e))return this;var t=this.toArray().sort(e);return this.spawn(t)},sortByZIndex:function(){return this.sort(i)},zDepth:function(){var e=this[0];if(e){var t=e._private,r=t.group;if("nodes"===r){var n=t.data.parent?e.parents().size():0;return e.isParent()?n:Number.MAX_VALUE}var i=t.source,a=t.target,o=i.zDepth(),s=a.zDepth();return Math.max(o,s,0)}}};t.exports=a},{"../is":83,"./zsort":32}],28:[function(e,t,r){"use strict";var n=e("../is"),i=e("../util"),a=e("../promise"),o={layoutPositions:function(e,t,r){var i=this.nodes(),o=this.cy();if(e.trigger({type:"layoutstart",layout:e}),e.animations=[],t.animate){for(var s=0;s<i.length;s++){var l=i[s],u=r.call(l,s,l),c=l.position();n.number(c.x)&&n.number(c.y)||l.silentPosition({x:0,y:0});var d=l.animation({position:u,duration:t.animationDuration,easing:t.animationEasing});e.animations.push(d),d.play()}var h;o.on("step.*",h=function(){t.fit&&o.fit(t.eles,t.padding)}),e.one("layoutstop",function(){o.off("step.*",h)}),e.one("layoutready",t.ready),e.trigger({type:"layoutready",layout:e}),a.all(e.animations.map(function(e){return e.promise()})).then(function(){o.off("step.*",h),null!=t.zoom&&o.zoom(t.zoom),t.pan&&o.pan(t.pan),t.fit&&o.fit(t.eles,t.padding),e.one("layoutstop",t.stop),e.trigger({type:"layoutstop",layout:e})})}else i.positions(r),t.fit&&o.fit(t.eles,t.padding),null!=t.zoom&&o.zoom(t.zoom),t.pan&&o.pan(t.pan),e.one("layoutready",t.ready),e.trigger({type:"layoutready",layout:e}),e.one("layoutstop",t.stop),e.trigger({type:"layoutstop",layout:e});return this},layout:function(e){var t=this.cy();return t.layout(i.extend({},e,{eles:this})),this},makeLayout:function(e){var t=this.cy();return t.makeLayout(i.extend({},e,{eles:this}))}};o.createLayout=o.makeLayout,t.exports=o},{"../is":83,"../promise":86,"../util":100}],29:[function(e,t,r){"use strict";var n=e("../is"),i={updateStyle:function(e){var t=this._private.cy;if(!t.styleEnabled())return this;if(t._private.batchingStyle){var r=t._private.batchStyleEles;return r.merge(this),this}var n=t.style();e=!(!e&&void 0!==e),n.apply(this);var i=this.updateCompoundBounds(),a=i.length>0?this.add(i):this;return e?a.rtrigger("style"):a.trigger("style"),this},updateMappers:function(e){var t=this._private.cy,r=t.style();if(e=!(!e&&void 0!==e),!t.styleEnabled())return this;r.updateMappers(this);var n=this.updateCompoundBounds(),i=n.length>0?this.add(n):this;return e?i.rtrigger("style"):i.trigger("style"),this},parsedStyle:function(e){var t=this[0];if(t.cy().styleEnabled())return t?t._private.style[e]||t.cy().style().getDefaultProperty(e):void 0},renderedStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var r=this[0];if(r){var n=r.cy().style().getRenderedStyle(r);return void 0===e?n:n[e]}},style:function(e,t){var r=this.cy();if(!r.styleEnabled())return this;var i=!1,a=r.style();if(n.plainObject(e)){var o=e;a.applyBypass(this,o,i);var s=this.updateCompoundBounds(),l=s.length>0?this.add(s):this;l.rtrigger("style")}else if(n.string(e)){if(void 0===t){var u=this[0];return u?a.getStylePropertyValue(u,e):void 0}a.applyBypass(this,e,t,i);var s=this.updateCompoundBounds(),l=s.length>0?this.add(s):this;l.rtrigger("style")}else if(void 0===e){var u=this[0];return u?a.getRawStyle(u):void 0}return this},removeStyle:function(e){var t=this.cy();if(!t.styleEnabled())return this;var r=!1,n=t.style(),i=this;if(void 0===e)for(var a=0;a<i.length;a++){var o=i[a];n.removeAllBypasses(o,r)}else{e=e.split(/\s+/);for(var a=0;a<i.length;a++){var o=i[a];n.removeBypasses(o,e,r)}}var s=this.updateCompoundBounds(),l=s.length>0?this.add(s):this;return l.rtrigger("style"),this},show:function(){return this.css("display","element"),this},hide:function(){return this.css("display","none"),this},visible:function(){var e=this.cy();if(!e.styleEnabled())return!0;var t=this[0],r=e.hasCompoundNodes();if(t){if("visible"!==t.pstyle("visibility").value||"element"!==t.pstyle("display").value)return!1;if("nodes"===t._private.group){if(!r)return!0;var n=t._private.data.parent?t.parents():null;if(n)for(var i=0;i<n.length;i++){var a=n[i],o=a.pstyle("visibility").value,s=a.pstyle("display").value;if("visible"!==o||"element"!==s)return!1}return!0}var l=t._private.source,u=t._private.target;return l.visible()&&u.visible()}},hidden:function(){var e=this[0];return e?!e.visible():void 0},effectiveOpacity:function(){var e=this.cy();if(!e.styleEnabled())return 1;var t=e.hasCompoundNodes(),r=this[0];if(r){var n=r._private,i=r.pstyle("opacity").value;if(!t)return i;var a=n.data.parent?r.parents():null;if(a)for(var o=0;o<a.length;o++){var s=a[o],l=s.pstyle("opacity").value;i=l*i}return i}},transparent:function(){var e=this.cy();if(!e.styleEnabled())return!1;var t=this[0],r=t.cy().hasCompoundNodes();return t?r?0===t.effectiveOpacity():0===t.pstyle("opacity").value:void 0},backgrounding:function(){var e=this.cy();if(!e.styleEnabled())return!1;var t=this[0];return!!t._private.backgrounding}};i.bypass=i.css=i.style,i.renderedCss=i.renderedStyle,i.removeBypass=i.removeCss=i.removeStyle,i.pstyle=i.parsedStyle,t.exports=i},{"../is":83}],30:[function(e,t,r){"use strict";function n(e){return function(){var t=arguments,r=[];if(2===t.length){var n=t[0],i=t[1];this.on(e.event,n,i)}else if(1===t.length){var i=t[0];this.on(e.event,i)}else if(0===t.length){for(var a=0;a<this.length;a++){var o=this[a],s=!e.ableField||o._private[e.ableField],l=o._private[e.field]!=e.value;if(e.overrideAble){var u=e.overrideAble(o);if(void 0!==u&&(s=u,!u))return this}s&&(o._private[e.field]=e.value,l&&r.push(o))}var c=this.spawn(r);c.updateStyle(),c.trigger(e.event)}return this}}function i(e){a[e.field]=function(){var t=this[0];if(t){if(e.overrideField){var r=e.overrideField(t);if(void 0!==r)return r}return t._private[e.field]}},a[e.on]=n({event:e.on,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!0}),a[e.off]=n({event:e.off,field:e.field,ableField:e.ableField,overrideAble:e.overrideAble,value:!1})}var a={};i({field:"locked",overrideField:function(e){return e.cy().autolock()?!0:void 0},on:"lock",off:"unlock"}),i({field:"grabbable",overrideField:function(e){return e.cy().autoungrabify()?!1:void 0},on:"grabify",off:"ungrabify"}),i({field:"selected",ableField:"selectable",overrideAble:function(e){return e.cy().autounselectify()?!1:void 0},on:"select",off:"unselect"}),i({field:"selectable",overrideField:function(e){return e.cy().autounselectify()?!1:void 0},on:"selectify",off:"unselectify"}),a.deselect=a.unselect,a.grabbed=function(){var e=this[0];return e?e._private.grabbed:void 0},i({field:"active",on:"activate",off:"unactivate"}),a.inactive=function(){var e=this[0];return e?!e._private.active:void 0},t.exports=a},{}],31:[function(e,t,r){"use strict";function n(e){return function(t){for(var r=[],n=0;n<this.length;n++){var i=this[n],a=i._private[e.attr];a&&r.push(a)}return this.spawn(r,{unique:!0}).filter(t)}}function i(e){return function(t){var r=[],n=this._private.cy,i=e||{};s.string(t)&&(t=n.$(t));for(var a=this._private.ids,o=t._private.ids,l=0;l<t.length;l++)for(var u=t[l]._private.edges,c=0;c<u.length;c++){var d=u[c],h=d._private.data,p=a[h.source]&&o[h.target],f=o[h.source]&&a[h.target],v=p||f;if(v){if(i.thisIsSrc||i.thisIsTgt){if(i.thisIsSrc&&!p)continue;if(i.thisIsTgt&&!f)continue}r.push(d)}}return this.spawn(r,{unique:!0})}}function a(e){var t={codirected:!1};return e=o.extend({},t,e),function(t){for(var r=[],n=this.edges(),i=e,a=0;a<n.length;a++)for(var o=n[a],s=o._private,l=s.source,u=l._private.data.id,c=s.data.target,d=l._private.edges,h=0;h<d.length;h++){var p=d[h],f=p._private.data,v=f.target,g=f.source,y=v===c&&g===u,m=u===v&&c===g;(i.codirected&&y||!i.codirected&&(y||m))&&r.push(p)}return this.spawn(r,{unique:!0}).filter(t)}}var o=e("../util"),s=e("../is"),l={},u=function(e,t){return function(r,n,i,a){var o,l=r,u=this;if(null==l?o="null":s.elementOrCollection(l)&&1===l.length&&(o="#"+l.id()),1===u.length&&o){var c=u[0]._private,d=c.traversalCache=c.traversalCache||{},h=d[t]=d[t]||{},p=h[o];return p?p:h[o]=e.call(u,r,n,i,a)}return e.call(u,r,n,i,a)}},c=function(e){return function(t){for(var r=this,n=[],i=0;i<r.length;i++){var a=r[i];if(a.isNode()){for(var o=!1,s=a.connectedEdges(),l=0;l<s.length;l++){var u=s[l],c=u.source(),d=u.target();if(e.noIncomingEdges&&d===a&&c!==a||e.noOutgoingEdges&&c===a&&d!==a){o=!0;break}}o||n.push(a)}}return this.spawn(n,{unique:!0}).filter(t)}},d=function(e){return function(t){for(var r=this,n=[],i=0;i<r.length;i++){var a=r[i];if(a.isNode())for(var o=a.connectedEdges(),s=0;s<o.length;s++){var l=o[s],u=l.source(),c=l.target();e.outgoing&&u===a?(n.push(l),n.push(c)):e.incoming&&c===a&&(n.push(l),n.push(u))}}return this.spawn(n,{unique:!0}).filter(t)}},h=function(e){return function(t){for(var r=this,n=[],i={};;){var a=e.outgoing?r.outgoers():r.incomers();if(0===a.length)break;for(var o=!1,s=0;s<a.length;s++){var l=a[s],u=l.id();i[u]||(i[u]=!0,n.push(l),o=!0)}if(!o)break;r=a}return this.spawn(n,{unique:!0}).filter(t)}};o.extend(l,{roots:c({noIncomingEdges:!0}),leaves:c({noOutgoingEdges:!0}),outgoers:u(d({outgoing:!0}),"outgoers"),successors:h({outgoing:!0}),incomers:u(d({incoming:!0}),"incomers"),predecessors:h({incoming:!0})}),o.extend(l,{neighborhood:u(function(e){for(var t=[],r=this.nodes(),n=0;n<r.length;n++)for(var i=r[n],a=i.connectedEdges(),o=0;o<a.length;o++){var s=a[o],l=s.source(),u=s.target(),c=i===l?u:l;c.length>0&&t.push(c[0]),t.push(s[0])}return this.spawn(t,{unique:!0}).filter(e)},"neighborhood"),closedNeighborhood:function(e){return this.neighborhood().add(this).filter(e)},openNeighborhood:function(e){return this.neighborhood(e)}}),l.neighbourhood=l.neighborhood,l.closedNeighbourhood=l.closedNeighborhood,l.openNeighbourhood=l.openNeighborhood,o.extend(l,{source:u(function(e){var t,r=this[0];return r&&(t=r._private.source||r.cy().collection()),t&&e?t.filter(e):t},"source"),target:u(function(e){var t,r=this[0];return r&&(t=r._private.target||r.cy().collection()),t&&e?t.filter(e):t},"target"),sources:n({attr:"source"}),targets:n({attr:"target"})}),o.extend(l,{edgesWith:u(i(),"edgesWith",!0),edgesTo:u(i({thisIsSrc:!0}),"edgesTo",!0)}),o.extend(l,{connectedEdges:u(function(e){for(var t=[],r=this,n=0;n<r.length;n++){var i=r[n];if(i.isNode())for(var a=i._private.edges,o=0;o<a.length;o++){var s=a[o];t.push(s)}}return this.spawn(t,{unique:!0}).filter(e)},"connectedEdges"),connectedNodes:u(function(e){for(var t=[],r=this,n=0;n<r.length;n++){var i=r[n];i.isEdge()&&(t.push(i.source()[0]),t.push(i.target()[0]))}return this.spawn(t,{unique:!0}).filter(e)},"connectedNodes"),parallelEdges:u(a(),"parallelEdges"),codirectedEdges:u(a({codirected:!0}),"codirectedEdges")}),o.extend(l,{components:function(){var e=this,t=e.cy(),r=e.spawn(),n=e.nodes().spawnSelf(),i=[],a=function(e,t){r.merge(e),n.unmerge(e),t.merge(e)};if(n.empty())return e.spawn();do{var o=t.collection();i.push(o);var s=n[0];a(s,o),e.bfs({directed:!1,roots:s,visit:function(e,t,r,n,i){a(r,o)}})}while(n.length>0);return i.map(function(e){var t=e.connectedEdges().stdFilter(function(t){return e.anySame(t.source())&&e.anySame(t.target())});return e.union(t)})}}),t.exports=l},{"../is":83,"../util":100}],32:[function(e,t,r){"use strict";var n=function(e,t){var r=e.cy(),n=e.pstyle("z-index").value-t.pstyle("z-index").value,i=0,a=0,o=r.hasCompoundNodes(),s=e.isNode(),l=!s,u=t.isNode(),c=!u;o&&(i=e.zDepth(),a=t.zDepth());var d=i-a,h=0===d;return h?s&&c?1:l&&u?-1:0===n?e.poolIndex()-t.poolIndex():n:d};t.exports=n},{}],33:[function(e,t,r){"use strict";var n=e("../is"),i=e("../util"),a=e("../collection"),o=e("../collection/element"),s={add:function(e){var t,r=this;if(n.elementOrCollection(e)){var s=e;if(s._private.cy===r)t=s.restore();else{for(var l=[],u=0;u<s.length;u++){var c=s[u];l.push(c.json())}t=new a(r,l)}}else if(n.array(e)){var l=e;t=new a(r,l)}else if(n.plainObject(e)&&(n.array(e.nodes)||n.array(e.edges))){for(var d=e,l=[],h=["nodes","edges"],u=0,p=h.length;p>u;u++){var f=h[u],v=d[f];if(n.array(v))for(var g=0,y=v.length;y>g;g++){var m=i.extend({group:f},v[g]);l.push(m)}}t=new a(r,l)}else{var m=e;t=new o(r,m).collection()}return t},remove:function(e){if(n.elementOrCollection(e));else if(n.string(e)){var t=e;e=this.$(t)}return e.remove()},load:function(e,t,r){var a=this;a.notifications(!1);var o=a.mutableElements();o.length>0&&o.remove(),null!=e&&(n.plainObject(e)||n.array(e))&&a.add(e),a.one("layoutready",function(e){a.notifications(!0),a.trigger(e),a.notify({type:"load",eles:a.mutableElements()}),a.one("load",t),a.trigger("load")}).one("layoutstop",function(){a.one("done",r),a.trigger("done")});var s=i.extend({},a._private.options.layout);return s.eles=a.elements(),a.layout(s),this}};t.exports=s},{"../collection":26,"../collection/element":22,"../is":83,"../util":100}],34:[function(e,t,r){"use strict";var n=e("../define"),i=e("../util"),a=e("../is"),o={animate:n.animate(),animation:n.animation(),animated:n.animated(),clearQueue:n.clearQueue(),delay:n.delay(),delayAnimation:n.delayAnimation(),stop:n.stop(),addToAnimationPool:function(e){var t=this;t.styleEnabled()&&t._private.aniEles.merge(e)},stopAnimationLoop:function(){this._private.animationsRunning=!1},startAnimationLoop:function(){function e(){c._private.animationsRunning&&i.requestAnimationFrame(function(r){t(r),e()})}function t(e){function t(t,i){var s=t._private,l=s.animation.current,u=s.animation.queue,c=!1;if(0===l.length){var d=u.shift();d&&l.push(d)}for(var h=function(e){for(var t=e.length-1;t>=0;t--){var r=e[t];r()}e.splice(0,e.length)},p=l.length-1;p>=0;p--){var f=l[p],v=f._private;v.stopped?(l.splice(p,1),v.hooked=!1,v.playing=!1,v.started=!1,h(v.frames)):(v.playing||v.applying)&&(v.playing&&v.applying&&(v.applying=!1),v.started||r(t,f,e),n(t,f,e,i),a.fn(v.step)&&v.step.call(t,e),v.applying&&(v.applying=!1),h(v.frames),f.completed()&&(l.splice(p,1),v.hooked=!1,v.playing=!1,v.started=!1,h(v.completes)),c=!0)}return i||0!==l.length||0!==u.length||o.push(t),c}for(var i=c._private.aniEles,o=[],s=!1,l=0;l<i.length;l++){var u=i[l],d=t(u);s=s||d}var h=t(c,!0);if(s||h)if(i.length>0){var p=i.updateCompoundBounds().spawnSelf().merge(i);c.notify({type:"draw",eles:p})}else c.notify({type:"draw"});i.unmerge(o),c.trigger("step")}function r(e,t,r){var n=a.core(e),i=!n,o=e,s=c._private.style,l=t._private;if(i){var u=o._private.position;l.startPosition=l.startPosition||{x:u.x,y:u.y},l.startStyle=l.startStyle||s.getAnimationStartStyle(o,l.style)}if(n){var d=c._private.pan;l.startPan=l.startPan||{x:d.x,y:d.y},l.startZoom=null!=l.startZoom?l.startZoom:c._private.zoom}l.started=!0,l.startTime=r-l.progress*l.duration}function n(e,t,r,n){var i=c._private.style,s=!n,l=e._private,d=t._private,h=d.easing,f=d.startTime;if(!d.easingImpl)if(null==h)d.easingImpl=p.linear;else{var v;if(a.string(h)){var g=i.parse("transition-timing-function",h);v=g.value}else v=h;var y,m;a.string(v)?(y=v,m=[]):(y=v[1],m=v.slice(2).map(function(e){return+e})),m.length>0?("spring"===y&&m.push(d.duration),d.easingImpl=p[y].apply(null,m)):d.easingImpl=p[y]}var b,x=d.easingImpl;if(b=0===d.duration?1:(r-f)/d.duration,d.applying&&(b=d.progress),0>b?b=0:b>1&&(b=1),null==d.delay){var w=d.startPosition,E=d.position,_=l.position;E&&s&&(o(w.x,E.x)&&(_.x=u(w.x,E.x,b,x)),o(w.y,E.y)&&(_.y=u(w.y,E.y,b,x)),e.trigger("position"));var P=d.startPan,S=d.pan,k=l.pan,T=null!=S&&n;T&&(o(P.x,S.x)&&(k.x=u(P.x,S.x,b,x)),o(P.y,S.y)&&(k.y=u(P.y,S.y,b,x)),e.trigger("pan"));var D=d.startZoom,C=d.zoom,M=null!=C&&n;M&&(o(D,C)&&(l.zoom=u(D,C,b,x)),e.trigger("zoom")),(T||M)&&e.trigger("viewport");var N=d.style;if(N&&N.length>0&&s){for(var B=0;B<N.length;B++){var z=N[B],y=z.name,I=z,L=d.startStyle[y],O=u(L,I,b,x);i.overrideBypass(e,y,O)}e.trigger("style")}}return d.progress=b,b}function o(e,t){return null==e||null==t?!1:a.number(e)&&a.number(t)?!0:!(!e||!t)}function s(e,t,r){var n=1-r,i=r*r;return 3*n*n*r*e+3*n*i*t+i*r}function l(e,t){return function(r,n,i){return r+(n-r)*s(e,t,i)}}function u(e,t,r,n){0>r?r=0:r>1&&(r=1);var i,o;if(i=null!=e.pfValue||null!=e.value?null!=e.pfValue?e.pfValue:e.value:e,o=null!=t.pfValue||null!=t.value?null!=t.pfValue?t.pfValue:t.value:t,a.number(i)&&a.number(o))return n(i,o,r);if(a.array(i)&&a.array(o)){for(var s=[],l=0;l<o.length;l++){var u=i[l],c=o[l];if(null!=u&&null!=c){var d=n(u,c,r);e.roundValue&&(d=Math.round(d)),s.push(d)}else s.push(c)}return s}}var c=this;if(c._private.animationsRunning=!0,c.styleEnabled()){var d=c.renderer();d&&d.beforeRender?d.beforeRender(function(e,r){t(r)},d.beforeRenderPriorities.animations):e();/*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */
-/* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass
- then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */
-var h=function(){function e(e){return-e.tension*e.x-e.friction*e.v}function t(t,r,n){var i={x:t.x+n.dx*r,v:t.v+n.dv*r,tension:t.tension,friction:t.friction};return{dx:i.v,dv:e(i)}}function r(r,n){var i={dx:r.v,dv:e(r)},a=t(r,.5*n,i),o=t(r,.5*n,a),s=t(r,n,o),l=1/6*(i.dx+2*(a.dx+o.dx)+s.dx),u=1/6*(i.dv+2*(a.dv+o.dv)+s.dv);return r.x=r.x+l*n,r.v=r.v+u*n,r}return function n(e,t,i){var a,o,s,l={x:-1,v:0,tension:null,friction:null},u=[0],c=0,d=1e-4,h=.016;for(e=parseFloat(e)||500,t=parseFloat(t)||20,i=i||null,l.tension=e,l.friction=t,a=null!==i,a?(c=n(e,t),o=c/i*h):o=h;;)if(s=r(s||l,o),u.push(1+s.x),c+=16,!(Math.abs(s.x)>d&&Math.abs(s.v)>d))break;return a?function(e){return u[e*(u.length-1)|0]}:c}}(),p={linear:function(e,t,r){return e+(t-e)*r},ease:l(.25,.1,.25,1),"ease-in":l(.42,0,1,1),"ease-out":l(0,0,.58,1),"ease-in-out":l(.42,0,.58,1),"ease-in-sine":l(.47,0,.745,.715),"ease-out-sine":l(.39,.575,.565,1),"ease-in-out-sine":l(.445,.05,.55,.95),"ease-in-quad":l(.55,.085,.68,.53),"ease-out-quad":l(.25,.46,.45,.94),"ease-in-out-quad":l(.455,.03,.515,.955),"ease-in-cubic":l(.55,.055,.675,.19),"ease-out-cubic":l(.215,.61,.355,1),"ease-in-out-cubic":l(.645,.045,.355,1),"ease-in-quart":l(.895,.03,.685,.22),"ease-out-quart":l(.165,.84,.44,1),"ease-in-out-quart":l(.77,0,.175,1),"ease-in-quint":l(.755,.05,.855,.06),"ease-out-quint":l(.23,1,.32,1),"ease-in-out-quint":l(.86,0,.07,1),"ease-in-expo":l(.95,.05,.795,.035),"ease-out-expo":l(.19,1,.22,1),"ease-in-out-expo":l(1,0,0,1),"ease-in-circ":l(.6,.04,.98,.335),"ease-out-circ":l(.075,.82,.165,1),"ease-in-out-circ":l(.785,.135,.15,.86),spring:function(e,t,r){if(0===r)return p.linear;var n=h(e,t,r);return function(e,t,r){return e+(t-e)*n(r)}},"cubic-bezier":function(e,t,r,n){return l(e,t,r,n)}}}}};t.exports=o},{"../define":44,"../is":83,"../util":100}],35:[function(e,t,r){"use strict";var n=e("../define"),i={on:n.on(),one:n.on({unbindSelfOnTrigger:!0}),once:n.on({unbindAllBindersOnTrigger:!0}),off:n.off(),trigger:n.trigger()};n.eventAliasesOn(i),t.exports=i},{"../define":44}],36:[function(e,t,r){"use strict";var n={png:function(e){var t=this._private.renderer;return e=e||{},t.png(e)},jpg:function(e){var t=this._private.renderer;return e=e||{},e.bg=e.bg||"#fff",t.jpg(e)}};n.jpeg=n.jpg,t.exports=n},{}],37:[function(e,t,r){"use strict";var n=e("../window"),i=e("../util"),a=e("../collection"),o=e("../is"),s=e("../promise"),l=e("../define"),u=function(e){var t=this;e=i.extend({},e);var r=e.container;r&&!o.htmlElement(r)&&o.htmlElement(r[0])&&(r=r[0]);var l=r?r._cyreg:null;l=l||{},l&&l.cy&&(l.cy.destroy(),l={});var u=l.readies=l.readies||[];r&&(r._cyreg=l),l.cy=t;var c=void 0!==n&&void 0!==r&&!e.headless,d=e;d.layout=i.extend({name:c?"grid":"null"},d.layout),d.renderer=i.extend({name:c?"canvas":"null"},d.renderer);var h=function(e,t,r){return void 0!==t?t:void 0!==r?r:e},p=this._private={container:r,ready:!1,initrender:!1,options:d,elements:new a(this),listeners:[],aniEles:new a(this),scratch:{},layout:null,renderer:null,notificationsEnabled:!0,minZoom:1e-50,maxZoom:1e50,zoomingEnabled:h(!0,d.zoomingEnabled),userZoomingEnabled:h(!0,d.userZoomingEnabled),panningEnabled:h(!0,d.panningEnabled),userPanningEnabled:h(!0,d.userPanningEnabled),boxSelectionEnabled:h(!0,d.boxSelectionEnabled),autolock:h(!1,d.autolock,d.autolockNodes),autoungrabify:h(!1,d.autoungrabify,d.autoungrabifyNodes),autounselectify:h(!1,d.autounselectify),styleEnabled:void 0===d.styleEnabled?c:d.styleEnabled,zoom:o.number(d.zoom)?d.zoom:1,pan:{x:o.plainObject(d.pan)&&o.number(d.pan.x)?d.pan.x:0,y:o.plainObject(d.pan)&&o.number(d.pan.y)?d.pan.y:0},animation:{current:[],queue:[]},hasCompoundNodes:!1},f=d.selectionType;void 0===f||"additive"!==f&&"single"!==f?p.selectionType="single":p.selectionType=f,o.number(d.minZoom)&&o.number(d.maxZoom)&&d.minZoom<d.maxZoom?(p.minZoom=d.minZoom,p.maxZoom=d.maxZoom):o.number(d.minZoom)&&void 0===d.maxZoom?p.minZoom=d.minZoom:o.number(d.maxZoom)&&void 0===d.minZoom&&(p.maxZoom=d.maxZoom);var v=function(e,t){var r=e.some(o.promise);return r?s.all(e).then(t):void t(e)};t.initRenderer(i.extend({hideEdgesOnViewport:d.hideEdgesOnViewport,textureOnViewport:d.textureOnViewport,wheelSensitivity:o.number(d.wheelSensitivity)&&d.wheelSensitivity>0?d.wheelSensitivity:1,motionBlur:void 0===d.motionBlur?!1:d.motionBlur,motionBlurOpacity:void 0===d.motionBlurOpacity?.05:d.motionBlurOpacity,pixelRatio:o.number(d.pixelRatio)&&d.pixelRatio>0?d.pixelRatio:void 0,desktopTapThreshold:void 0===d.desktopTapThreshold?4:d.desktopTapThreshold,touchTapThreshold:void 0===d.touchTapThreshold?8:d.touchTapThreshold},d.renderer)),v([d.style,d.elements],function(e){var r=e[0],n=e[1];p.styleEnabled&&t.setStyle(r),d.initrender&&(t.on("initrender",d.initrender),t.on("initrender",function(){p.initrender=!0})),t.load(n,function(){t.startAnimationLoop(),p.ready=!0,o.fn(d.ready)&&t.on("ready",d.ready);for(var e=0;e<u.length;e++){var r=u[e];t.on("ready",r)}l&&(l.readies=[]),t.trigger("ready")},d.done)})},c=u.prototype;i.extend(c,{instanceString:function(){return"core"},isReady:function(){return this._private.ready},ready:function(e){return this.isReady()?this.trigger("ready",[],e):this.on("ready",e),this},initrender:function(){return this._private.initrender},destroy:function(){var e=this;return e.stopAnimationLoop(),e.destroyRenderer(),e},hasElementWithId:function(e){return this._private.elements.hasElementWithId(e)},getElementById:function(e){return this._private.elements.getElementById(e)},selectionType:function(){return this._private.selectionType},hasCompoundNodes:function(){return this._private.hasCompoundNodes},headless:function(){return"null"===this._private.options.renderer.name},styleEnabled:function(){return this._private.styleEnabled},addToPool:function(e){return this._private.elements.merge(e),this},removeFromPool:function(e){return this._private.elements.unmerge(e),this},container:function(){return this._private.container},options:function(){return i.copy(this._private.options)},json:function(e){var t=this,r=t._private,n=t.mutableElements();if(o.plainObject(e)){if(t.startBatch(),e.elements){var a={},s=function(e,r){for(var n=0;n<e.length;n++){var o=e[n],s=o.data.id,l=t.getElementById(s);a[s]=!0,0!==l.length?l.json(o):r?t.add(i.extend({group:r},o)):t.add(o)}};if(o.array(e.elements))s(e.elements);else for(var l=["nodes","edges"],u=0;u<l.length;u++){var c=l[u],d=e.elements[c];o.array(d)&&s(d,c)}n.stdFilter(function(e){return!a[e.id()]}).remove()}e.style&&t.style(e.style),null!=e.zoom&&e.zoom!==r.zoom&&t.zoom(e.zoom),e.pan&&(e.pan.x===r.pan.x&&e.pan.y===r.pan.y||t.pan(e.pan));for(var h=["minZoom","maxZoom","zoomingEnabled","userZoomingEnabled","panningEnabled","userPanningEnabled","boxSelectionEnabled","autolock","autoungrabify","autounselectify"],u=0;u<h.length;u++){var p=h[u];null!=e[p]&&t[p](e[p])}return t.endBatch(),this}if(void 0===e){var f={};return f.elements={},n.forEach(function(e){var t=e.group();f.elements[t]||(f.elements[t]=[]),f.elements[t].push(e.json())}),this._private.styleEnabled&&(f.style=t.style().json()),f.zoomingEnabled=t._private.zoomingEnabled,f.userZoomingEnabled=t._private.userZoomingEnabled,f.zoom=t._private.zoom,f.minZoom=t._private.minZoom,f.maxZoom=t._private.maxZoom,f.panningEnabled=t._private.panningEnabled,f.userPanningEnabled=t._private.userPanningEnabled,f.pan=i.copy(t._private.pan),f.boxSelectionEnabled=t._private.boxSelectionEnabled,f.renderer=i.copy(t._private.options.renderer),f.hideEdgesOnViewport=t._private.options.hideEdgesOnViewport,f.textureOnViewport=t._private.options.textureOnViewport,f.wheelSensitivity=t._private.options.wheelSensitivity,f.motionBlur=t._private.options.motionBlur,f}},scratch:l.data({field:"scratch",bindingEvent:"scratch",allowBinding:!0,allowSetting:!0,settingEvent:"scratch",settingTriggersEvent:!0,triggerFnName:"trigger",allowGetting:!0}),removeScratch:l.removeData({field:"scratch",event:"scratch",triggerFnName:"trigger",triggerEvent:!0})}),[e("./add-remove"),e("./animation"),e("./events"),e("./export"),e("./layout"),e("./notification"),e("./renderer"),e("./search"),e("./style"),e("./viewport")].forEach(function(e){i.extend(c,e)}),t.exports=u},{"../collection":26,"../define":44,"../is":83,"../promise":86,"../util":100,"../window":107,"./add-remove":33,"./animation":34,"./events":35,"./export":36,"./layout":38,"./notification":39,"./renderer":40,"./search":41,"./style":42,"./viewport":43}],38:[function(e,t,r){"use strict";var n=e("../util"),i=e("../is"),a={layout:function(e){var t=this._private.prevLayout=null==e?this._private.prevLayout:this.makeLayout(e);return t.run(),this},makeLayout:function(e){var t=this;if(null==e)return void n.error("Layout options must be specified to make a layout");if(null==e.name)return void n.error("A `name` must be specified to make a layout");var r=e.name,a=t.extension("layout",r);if(null==a)return void n.error("Can not apply layout: No such layout `"+r+"` found; did you include its JS file?");var o;o=i.string(e.eles)?t.$(e.eles):null!=e.eles?e.eles:t.$();var s=new a(n.extend({},e,{cy:t,eles:o}));return s}};a.createLayout=a.makeLayout,t.exports=a},{"../is":83,"../util":100}],39:[function(e,t,r){"use strict";var n={notify:function(e){var t=this._private;if(t.batchingNotify){var r=t.batchNotifyEles,n=t.batchNotifyTypes;return e.eles&&r.merge(e.eles),void(n.ids[e.type]||(n.push(e.type),n.ids[e.type]=!0))}if(t.notificationsEnabled){var i=this.renderer();i.notify(e)}},notifications:function(e){var t=this._private;return void 0===e?t.notificationsEnabled:void(t.notificationsEnabled=!!e)},noNotifications:function(e){this.notifications(!1),e(),this.notifications(!0)},startBatch:function(){var e=this._private;return null==e.batchCount&&(e.batchCount=0),0===e.batchCount&&(e.batchingStyle=e.batchingNotify=!0,e.batchStyleEles=this.collection(),e.batchNotifyEles=this.collection(),e.batchNotifyTypes=[],e.batchNotifyTypes.ids={}),e.batchCount++,this},endBatch:function(){var e=this._private;return e.batchCount--,0===e.batchCount&&(e.batchingStyle=!1,e.batchStyleEles.updateStyle(),e.batchingNotify=!1,this.notify({type:e.batchNotifyTypes,eles:e.batchNotifyEles})),this},batch:function(e){return this.startBatch(),e(),this.endBatch(),this},batchData:function(e){var t=this;return this.batch(function(){for(var r=Object.keys(e),n=0;n<r.length;n++){var i=r[n],a=e[i],o=t.getElementById(i);o.data(a)}})}};t.exports=n},{}],40:[function(e,t,r){"use strict";var n=e("../util"),i={renderTo:function(e,t,r,n){var i=this._private.renderer;return i.renderTo(e,t,r,n),this},renderer:function(){return this._private.renderer},forceRender:function(){return this.notify({type:"draw"}),this},resize:function(){return this.invalidateSize(),this.notify({type:"resize"}),this.trigger("resize"),this},initRenderer:function(e){var t=this,r=t.extension("renderer",e.name);if(null==r)return void n.error("Can not initialise: No such renderer `%s` found; did you include its JS file?",e.name);var i=n.extend({},e,{cy:t});t._private.renderer=new r(i)},destroyRenderer:function(){var e=this;e.notify({type:"destroy"});var t=e.container();if(t)for(t._cyreg=null;t.childNodes.length>0;)t.removeChild(t.childNodes[0]);e._private.renderer=null},onRender:function(e){return this.on("render",e)},offRender:function(e){return this.off("render",e)}};i.invalidateDimensions=i.resize,t.exports=i},{"../util":100}],41:[function(e,t,r){"use strict";var n=e("../is"),i=e("../collection"),a={collection:function(e,t){return n.string(e)?this.$(e):n.elementOrCollection(e)?e.collection():n.array(e)?new i(this,e,t):new i(this)},nodes:function(e){var t=this.$(function(){return this.isNode()});return e?t.filter(e):t},edges:function(e){var t=this.$(function(){return this.isEdge()});return e?t.filter(e):t},$:function(e){var t=this._private.elements;return e?t.filter(e):t.spawnSelf()},mutableElements:function(){return this._private.elements}};a.elements=a.filter=a.$,t.exports=a},{"../collection":26,"../is":83}],42:[function(e,t,r){"use strict";var n=e("../is"),i=e("../style"),a={style:function(e){if(e){var t=this.setStyle(e);t.update()}return this._private.style},setStyle:function(e){var t=this._private;return n.stylesheet(e)?t.style=e.generateStyle(this):n.array(e)?t.style=i.fromJson(this,e):n.string(e)?t.style=i.fromString(this,e):t.style=i(this),t.style}};t.exports=a},{"../is":83,"../style":92}],43:[function(e,t,r){"use strict";var n=e("../is"),i={autolock:function(e){return void 0===e?this._private.autolock:(this._private.autolock=!!e,this)},autoungrabify:function(e){return void 0===e?this._private.autoungrabify:(this._private.autoungrabify=!!e,this)},autounselectify:function(e){return void 0===e?this._private.autounselectify:(this._private.autounselectify=!!e,this)},panningEnabled:function(e){return void 0===e?this._private.panningEnabled:(this._private.panningEnabled=!!e,this)},userPanningEnabled:function(e){return void 0===e?this._private.userPanningEnabled:(this._private.userPanningEnabled=!!e,this)},zoomingEnabled:function(e){return void 0===e?this._private.zoomingEnabled:(this._private.zoomingEnabled=!!e,this)},userZoomingEnabled:function(e){return void 0===e?this._private.userZoomingEnabled:(this._private.userZoomingEnabled=!!e,this)},boxSelectionEnabled:function(e){return void 0===e?this._private.boxSelectionEnabled:(this._private.boxSelectionEnabled=!!e,this)},pan:function(){var e,t,r,i,a,o=arguments,s=this._private.pan;switch(o.length){case 0:return s;case 1:if(n.string(o[0]))return e=o[0],s[e];if(n.plainObject(o[0])){if(!this._private.panningEnabled)return this;r=o[0],i=r.x,a=r.y,n.number(i)&&(s.x=i),n.number(a)&&(s.y=a),this.trigger("pan viewport")}break;case 2:if(!this._private.panningEnabled)return this;e=o[0],t=o[1],"x"!==e&&"y"!==e||!n.number(t)||(s[e]=t),this.trigger("pan viewport")}return this.notify({type:"viewport"}),this},panBy:function(e){var t,r,i,a,o,s=arguments,l=this._private.pan;if(!this._private.panningEnabled)return this;switch(s.length){case 1:n.plainObject(s[0])&&(i=s[0],a=i.x,o=i.y,n.number(a)&&(l.x+=a),n.number(o)&&(l.y+=o),this.trigger("pan viewport"));break;case 2:t=s[0],r=s[1],"x"!==t&&"y"!==t||!n.number(r)||(l[t]+=r),this.trigger("pan viewport")}return this.notify({type:"viewport"}),this},fit:function(e,t){var r=this.getFitViewport(e,t);if(r){var n=this._private;n.zoom=r.zoom,n.pan=r.pan,this.trigger("pan zoom viewport"),this.notify({type:"viewport"})}return this},getFitViewport:function(e,t){if(n.number(e)&&void 0===t&&(t=e,e=void 0),this._private.panningEnabled&&this._private.zoomingEnabled){var r;if(n.string(e)){var i=e;e=this.$(i)}else if(n.boundingBox(e)){var a=e;r={x1:a.x1,y1:a.y1,x2:a.x2,y2:a.y2},r.w=r.x2-r.x1,r.h=r.y2-r.y1}else n.elementOrCollection(e)||(e=this.mutableElements());r=r||e.boundingBox();var o,s=this.width(),l=this.height();if(t=n.number(t)?t:0,!isNaN(s)&&!isNaN(l)&&s>0&&l>0&&!isNaN(r.w)&&!isNaN(r.h)&&r.w>0&&r.h>0){o=Math.min((s-2*t)/r.w,(l-2*t)/r.h),o=o>this._private.maxZoom?this._private.maxZoom:o,o=o<this._private.minZoom?this._private.minZoom:o;var u={x:(s-o*(r.x1+r.x2))/2,y:(l-o*(r.y1+r.y2))/2};return{zoom:o,pan:u}}}},minZoom:function(e){return void 0===e?this._private.minZoom:(n.number(e)&&(this._private.minZoom=e),this)},maxZoom:function(e){return void 0===e?this._private.maxZoom:(n.number(e)&&(this._private.maxZoom=e),this)},zoom:function(e){var t,r;if(void 0===e)return this._private.zoom;if(n.number(e))r=e;else if(n.plainObject(e)){if(r=e.level,e.position){var i=e.position,a=this._private.pan,o=this._private.zoom;t={x:i.x*o+a.x,y:i.y*o+a.y}}else e.renderedPosition&&(t=e.renderedPosition);if(t&&!this._private.panningEnabled)return this}if(!this._private.zoomingEnabled)return this;if(!n.number(r)||t&&(!n.number(t.x)||!n.number(t.y)))return this;if(r=r>this._private.maxZoom?this._private.maxZoom:r,r=r<this._private.minZoom?this._private.minZoom:r,t){var s=this._private.pan,l=this._private.zoom,u=r,c={x:-u/l*(t.x-s.x)+t.x,y:-u/l*(t.y-s.y)+t.y};this._private.zoom=r,this._private.pan=c;var d=s.x!==c.x||s.y!==c.y;this.trigger(" zoom "+(d?" pan ":"")+" viewport ")}else this._private.zoom=r,this.trigger("zoom viewport");return this.notify({type:"viewport"}),this},viewport:function(e){var t=this._private,r=!0,i=!0,a=[],o=!1,s=!1;if(!e)return this;if(n.number(e.zoom)||(r=!1),n.plainObject(e.pan)||(i=!1),!r&&!i)return this;if(r){var l=e.zoom;l<t.minZoom||l>t.maxZoom||!t.zoomingEnabled?o=!0:(t.zoom=l,a.push("zoom"))}if(i&&(!o||!e.cancelOnFailedZoom)&&t.panningEnabled){var u=e.pan;n.number(u.x)&&(t.pan.x=u.x,s=!1),n.number(u.y)&&(t.pan.y=u.y,s=!1),s||a.push("pan")}return a.length>0&&(a.push("viewport"),this.trigger(a.join(" ")),this.notify({type:"viewport"})),this},center:function(e){var t=this.getCenterPan(e);return t&&(this._private.pan=t,this.trigger("pan viewport"),this.notify({type:"viewport"})),this},getCenterPan:function(e,t){if(this._private.panningEnabled){if(n.string(e)){var r=e;e=this.mutableElements().filter(r)}else n.elementOrCollection(e)||(e=this.mutableElements());var i=e.boundingBox(),a=this.width(),o=this.height();t=void 0===t?this._private.zoom:t;var s={x:(a-t*(i.x1+i.x2))/2,y:(o-t*(i.y1+i.y2))/2};return s}},reset:function(){return this._private.panningEnabled&&this._private.zoomingEnabled?(this.viewport({pan:{x:0,y:0},zoom:1}),this):this},invalidateSize:function(){this._private.sizeCache=null},size:function(){var e=this._private,t=e.container;return e.sizeCache=e.sizeCache||(t?{width:t.clientWidth,height:t.clientHeight}:{width:1,height:1})},width:function(){return this.size().width},height:function(){return this.size().height},extent:function(){var e=this._private.pan,t=this._private.zoom,r=this.renderedExtent(),n={x1:(r.x1-e.x)/t,x2:(r.x2-e.x)/t,y1:(r.y1-e.y)/t,y2:(r.y2-e.y)/t};return n.w=n.x2-n.x1,n.h=n.y2-n.y1,n},renderedExtent:function(){var e=this.width(),t=this.height();return{x1:0,y1:0,x2:e,y2:t,w:e,h:t}}};i.centre=i.center,i.autolockNodes=i.autolock,i.autoungrabifyNodes=i.autoungrabify,t.exports=i},{"../is":83}],44:[function(e,t,r){"use strict";var n=e("./util"),i=e("./is"),a=e("./selector"),o=e("./promise"),s=e("./event"),l=e("./animation"),u={data:function(e){var t={field:"data",bindingEvent:"data",allowBinding:!1,allowSetting:!1,allowGetting:!1,settingEvent:"data",settingTriggersEvent:!1,triggerFnName:"trigger",immutableKeys:{},updateStyle:!1,onSet:function(e){},canSet:function(e){return!0}};return e=n.extend({},t,e),function(t,r){var n=e,a=this,o=void 0!==a.length,s=o?a:[a],l=o?a[0]:a;if(i.string(t)){if(n.allowGetting&&void 0===r){var u;return l&&(u=l._private[n.field][t]),u}if(n.allowSetting&&void 0!==r){var c=!n.immutableKeys[t];if(c){for(var d=0,h=s.length;h>d;d++)n.canSet(s[d])&&(s[d]._private[n.field][t]=r);n.updateStyle&&a.updateStyle(),n.onSet(a),n.settingTriggersEvent&&a[n.triggerFnName](n.settingEvent)}}}else if(n.allowSetting&&i.plainObject(t)){for(var p,f,v=t,g=Object.keys(v),d=0;d<g.length;d++){p=g[d],f=v[p];var c=!n.immutableKeys[p];if(c)for(var y=0;y<s.length;y++){var m=s[y];n.canSet(m)&&(m._private[n.field][p]=f)}}n.updateStyle&&a.updateStyle(),n.onSet(a),n.settingTriggersEvent&&a[n.triggerFnName](n.settingEvent)}else if(n.allowBinding&&i.fn(t)){var b=t;a.on(n.bindingEvent,b)}else if(n.allowGetting&&void 0===t){var u;return l&&(u=l._private[n.field]),u}return a}},removeData:function(e){var t={field:"data",event:"data",triggerFnName:"trigger",triggerEvent:!1,immutableKeys:{}};return e=n.extend({},t,e),function(t){var r=e,n=this,a=void 0!==n.length,o=a?n:[n];if(i.string(t)){for(var s=t.split(/\s+/),l=s.length,u=0;l>u;u++){var c=s[u];if(!i.emptyString(c)){var d=!r.immutableKeys[c];if(d)for(var h=0,p=o.length;p>h;h++)o[h]._private[r.field][c]=void 0}}r.triggerEvent&&n[r.triggerFnName](r.event)}else if(void 0===t){for(var h=0,p=o.length;p>h;h++)for(var f=o[h]._private[r.field],s=Object.keys(f),u=0;u<s.length;u++){var c=s[u],v=!r.immutableKeys[c];v&&(f[c]=void 0)}r.triggerEvent&&n[r.triggerFnName](r.event)}return n}},event:{regex:/(\w+)(\.(?:\w+|\*))?/,universalNamespace:".*",optionalTypeRegex:/(\w+)?(\.(?:\w+|\*))?/,falseCallback:function(){return!1}},on:function(e){var t={unbindSelfOnTrigger:!1,unbindAllBindersOnTrigger:!1};return e=n.extend({},t,e),function(t,r,n,o){var s=this,l=void 0!==s.length,c=l?s:[s],d=i.string(t),h=e;if(i.plainObject(r)?(o=n,n=r,r=void 0):(i.fn(r)||r===!1)&&(o=r,n=void 0,r=void 0),(i.fn(n)||n===!1)&&(o=n,n=void 0),!i.fn(o)&&o!==!1&&d)return s;if(d){var p={};p[t]=o,t=p}for(var f=Object.keys(t),v=0;v<f.length;v++){var g=f[v];if(o=t[g],o===!1&&(o=u.event.falseCallback),i.fn(o)){g=g.split(/\s+/);for(var y=0;y<g.length;y++){var m=g[y];if(!i.emptyString(m)){var b=m.match(u.event.regex);if(b)for(var x=b[1],w=b[2]?b[2]:void 0,E={callback:o,data:n,delegated:!!r,selector:r,selObj:new a(r),type:x,namespace:w,unbindSelfOnTrigger:h.unbindSelfOnTrigger,unbindAllBindersOnTrigger:h.unbindAllBindersOnTrigger,binders:c},_=0;_<c.length;_++){var P=c[_]._private=c[_]._private||{};P.listeners=P.listeners||[],P.listeners.push(E)}}}}}return s}},eventAliasesOn:function(e){var t=e;t.addListener=t.listen=t.bind=t.on,t.removeListener=t.unlisten=t.unbind=t.off,t.emit=t.trigger,t.pon=t.promiseOn=function(e,t){var r=this,n=Array.prototype.slice.call(arguments,0);return new o(function(e,t){var i=function(t){r.off.apply(r,o),e(t)},a=n.concat([i]),o=a.concat([]);r.on.apply(r,a)})}},off:function(e){var t={};return e=n.extend({},t,e),function(e,t,r){var n=this,a=void 0!==n.length,o=a?n:[n],s=i.string(e);if(0===arguments.length){for(var l=0;l<o.length;l++)o[l]._private=o[l]._private||{},b.listeners=[];return n}if((i.fn(t)||t===!1)&&(r=t,t=void 0),s){var c={};c[e]=r,e=c}for(var d=Object.keys(e),h=0;h<d.length;h++){var p=d[h];r=e[p],r===!1&&(r=u.event.falseCallback),p=p.split(/\s+/);for(var f=0;f<p.length;f++){var v=p[f];if(!i.emptyString(v)){var g=v.match(u.event.optionalTypeRegex);if(g)for(var y=g[1]?g[1]:void 0,m=g[2]?g[2]:void 0,l=0;l<o.length;l++)for(var b=o[l]._private=o[l]._private||{},x=b.listeners=b.listeners||[],w=0;w<x.length;w++){var E=x[w],_=!m||m===E.namespace,P=!y||E.type===y,S=!r||r===E.callback,k=_&&P&&S;k&&(x.splice(w,1),w--)}}}}return n}},trigger:function(e){var t={};return e=n.extend({},t,e),function(t,r,n){var a=this,o=void 0!==a.length,l=o?a:[a],c=i.string(t),d=i.plainObject(t),h=i.event(t),p=this._private=this._private||{},f=p.cy||(i.core(this)?this:null),v=f?f.hasCompoundNodes():!1;if(c){var g=t.split(/\s+/);t=[];for(var y=0;y<g.length;y++){var m=g[y];if(!i.emptyString(m)){var b=m.match(u.event.regex),x=b[1],w=b[2]?b[2]:void 0;t.push({type:x,namespace:w})}}}else if(d){var E=t;t=[E]}r?i.array(r)||(r=[r]):r=[];for(var y=0;y<t.length;y++)for(var _=t[y],P=0;P<l.length;P++){var m,S=l[P],p=S._private=S._private||{},k=p.listeners=p.listeners||[],T=i.element(S),D=T||e.layout;if(h?(m=_,m.cyTarget=m.cyTarget||S,m.cy=m.cy||f):m=new s(_,{cyTarget:S,cy:f,namespace:_.namespace}),_.layout&&(m.layout=_.layout),e.layout&&(m.layout=S),m.cyPosition){var C=m.cyPosition,M=f.zoom(),N=f.pan();m.cyRenderedPosition={x:C.x*M+N.x,y:C.y*M+N.y}}n&&(k=[{namespace:m.namespace,type:m.type,callback:n}]);for(var B=0;B<k.length;B++){var z=k[B],I=!z.namespace||z.namespace===m.namespace||z.namespace===u.event.universalNamespace,L=z.type===m.type,O=z.delegated?S!==m.cyTarget&&i.element(m.cyTarget)&&z.selObj.matches(m.cyTarget):!0,A=I&&L&&O;if(A){var R=[m];if(R=R.concat(r),z.data?m.data=z.data:m.data=void 0,(z.unbindSelfOnTrigger||z.unbindAllBindersOnTrigger)&&(k.splice(B,1),B--),z.unbindAllBindersOnTrigger)for(var q=z.binders,V=0;V<q.length;V++){var F=q[V];if(F&&F!==S)for(var j=F._private.listeners,X=0;X<j.length;X++){var Y=j[X];Y===z&&(j.splice(X,1),X--)}}var W=z.delegated?m.cyTarget:S,$=z.callback.apply(W,R);($===!1||m.isPropagationStopped())&&(D=!1,$===!1&&(m.stopPropagation(),m.preventDefault()))}}if(D){var H=v?S._private.parent:null,U=null!=H&&0!==H.length;U?(H=H[0],H.trigger(m)):f.trigger(m)}}return a}},animated:function(e){var t={};return e=n.extend({},t,e),function(){var e=this,t=void 0!==e.length,r=t?e:[e],n=this._private.cy||this;if(!n.styleEnabled())return!1;var i=r[0];return i?i._private.animation.current.length>0:void 0}},clearQueue:function(e){var t={};return e=n.extend({},t,e),function(){var e=this,t=void 0!==e.length,r=t?e:[e],n=this._private.cy||this;if(!n.styleEnabled())return this;for(var i=0;i<r.length;i++){var a=r[i];a._private.animation.queue=[]}return this}},delay:function(e){var t={};return e=n.extend({},t,e),function(e,t){var r=this._private.cy||this;return r.styleEnabled()?this.animate({delay:e,duration:e,complete:t}):this}},delayAnimation:function(e){var t={};return e=n.extend({},t,e),function(e,t){var r=this._private.cy||this;return r.styleEnabled()?this.animation({delay:e,duration:e,complete:t}):this}},animation:function(e){var t={};return e=n.extend({},t,e),function(e,t){var r=this,i=void 0!==r.length,a=i?r:[r],o=this._private.cy||this,s=!i,u=!s;if(!o.styleEnabled())return this;var c=o.style();switch(e=n.extend({},e,t),void 0===e.duration&&(e.duration=400),e.duration){case"slow":e.duration=600;break;case"fast":e.duration=200}var d=0===Object.keys(e).length;if(d)return new l(a[0],e);if(u&&(e.style=c.getPropsList(e.style||e.css),e.css=void 0),e.renderedPosition&&u){var h=e.renderedPosition,p=o.pan(),f=o.zoom();e.position={x:(h.x-p.x)/f,y:(h.y-p.y)/f}}if(e.panBy&&s){var v=e.panBy,g=o.pan();e.pan={x:g.x+v.x,y:g.y+v.y}}var y=e.center||e.centre;if(y&&s){var m=o.getCenterPan(y.eles,e.zoom);m&&(e.pan=m)}if(e.fit&&s){var b=e.fit,x=o.getFitViewport(b.eles||b.boundingBox,b.padding);x&&(e.pan=x.pan,e.zoom=x.zoom)}return new l(a[0],e)}},animate:function(e){var t={};return e=n.extend({},t,e),function(e,t){var r=this,i=void 0!==r.length,a=i?r:[r],o=this._private.cy||this;if(!o.styleEnabled())return this;t&&(e=n.extend({},e,t));for(var s=0;s<a.length;s++){var l=a[s],u=l.animated()&&(void 0===e.queue||e.queue),c=l.animation(e,u?{queue:!0}:void 0);c.play()}return this}},stop:function(e){var t={};return e=n.extend({},t,e),function(e,t){var r=this,n=void 0!==r.length,i=n?r:[r],a=this._private.cy||this;if(!a.styleEnabled())return this;for(var o=0;o<i.length;o++){for(var s=i[o],l=s._private,u=l.animation.current,c=0;c<u.length;c++){var d=u[c],h=d._private;t&&(h.duration=0)}e&&(l.animation.queue=[]),t||(l.animation.current=[])}return a.notify({eles:this,type:"draw"}),this}}};t.exports=u},{"./animation":2,"./event":45,"./is":83,"./promise":86,"./selector":87,"./util":100}],45:[function(e,t,r){"use strict";function n(){return!1}function i(){return!0}/*!
-Event object based on jQuery events, MIT license
-
-https://jquery.org/license/
-https://tldrlegal.com/license/mit-license
-https://github.com/jquery/jquery/blob/master/src/event.js
-*/
-var a=function(e,t){return this instanceof a?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented?i:n):this.type=e,t&&(this.type=void 0!==t.type?t.type:this.type,this.cy=t.cy,this.cyTarget=t.cyTarget,this.cyPosition=t.cyPosition,this.cyRenderedPosition=t.cyRenderedPosition,this.namespace=t.namespace,this.layout=t.layout,this.data=t.data,this.message=t.message),void(this.timeStamp=e&&e.timeStamp||Date.now())):new a(e,t)};a.prototype={instanceString:function(){return"event"},preventDefault:function(){this.isDefaultPrevented=i;var e=this.originalEvent;e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){this.isPropagationStopped=i;var e=this.originalEvent;e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i,this.stopPropagation()},isDefaultPrevented:n,isPropagationStopped:n,isImmediatePropagationStopped:n},t.exports=a},{}],46:[function(e,t,r){"use strict";function n(e,t,r){var n=r,a=function(r){s.error("Can not register `"+t+"` for `"+e+"` since `"+r+"` already exists in the prototype and can not be overridden")};if("core"===e){if(c.prototype[t])return a(t);c.prototype[t]=r}else if("collection"===e){if(u.prototype[t])return a(t);u.prototype[t]=r}else if("layout"===e){for(var o=function(e){this.options=e,r.call(this,e),h.plainObject(this._private)||(this._private={}),this._private.cy=e.cy,this._private.listeners=[]},d=o.prototype=Object.create(r.prototype),f=[],v=0;v<f.length;v++){var g=f[v];d[g]=d[g]||function(){return this}}d.start&&!d.run?d.run=function(){return this.start(),this}:!d.start&&d.run&&(d.start=function(){return this.run(),this}),d.stop||(d.stop=function(){var e=this.options;if(e&&e.animate)for(var t=this.animations,r=0;r<t.length;r++)t[r].stop();return this.trigger("layoutstop"),this}),d.destroy||(d.destroy=function(){return this}),d.on=l.on({layout:!0}),d.one=l.on({layout:!0,unbindSelfOnTrigger:!0}),d.once=l.on({layout:!0,unbindAllBindersOnTrigger:!0}),d.off=l.off({layout:!0}),d.trigger=l.trigger({layout:!0}),l.eventAliasesOn(d),n=o}else if("renderer"===e&&"null"!==t&&"base"!==t){var y=i("renderer","base"),m=y.prototype,b=r,x=r.prototype,w=function(){y.apply(this,arguments),b.apply(this,arguments)},E=w.prototype;for(var _ in m){var P=m[_],S=null!=x[_];if(S)return a(_);E[_]=P}for(var _ in x)E[_]=x[_];m.clientFunctions.forEach(function(e){E[e]=E[e]||function(){s.error("Renderer does not implement `renderer."+e+"()` on its prototype")}}),n=w}return s.setMap({map:p,keys:[e,t],value:n})}function i(e,t){return s.getMap({map:p,keys:[e,t]})}function a(e,t,r,n,i){return s.setMap({map:f,keys:[e,t,r,n],value:i})}function o(e,t,r,n){return s.getMap({map:f,keys:[e,t,r,n]})}var s=e("./util"),l=e("./define"),u=e("./collection"),c=e("./core"),d=e("./extensions"),h=e("./is"),p={},f={},v=function(){return 2===arguments.length?i.apply(null,arguments):3===arguments.length?n.apply(null,arguments):4===arguments.length?o.apply(null,arguments):5===arguments.length?a.apply(null,arguments):void s.error("Invalid extension access syntax")};c.prototype.extension=v,d.forEach(function(e){e.extensions.forEach(function(t){n(e.type,t.name,t.impl)})}),t.exports=v},{"./collection":26,"./core":37,"./define":44,"./extensions":47,"./is":83,"./util":100}],47:[function(e,t,r){"use strict";t.exports=[{type:"layout",extensions:e("./layout")},{type:"renderer",extensions:e("./renderer")}]},{"./layout":53,"./renderer":78}],48:[function(e,t,r){"use strict";function n(e){this.options=i.extend({},s,e)}var i=e("../../util"),a=e("../../math"),o=e("../../is"),s={fit:!0,directed:!1,padding:30,circle:!1,spacingFactor:1.75,boundingBox:void 0,avoidOverlap:!0,roots:void 0,maximalAdjustments:0,animate:!1,animationDuration:500,animationEasing:void 0,ready:void 0,stop:void 0};n.prototype.run=function(){var e,t=this.options,r=t,n=t.cy,i=r.eles,s=i.nodes().not(":parent"),l=i,u=a.makeBoundingBox(r.boundingBox?r.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()});if(o.elementOrCollection(r.roots))e=r.roots;else if(o.array(r.roots)){for(var c=[],d=0;d<r.roots.length;d++){var h=r.roots[d],p=n.getElementById(h);c.push(p)}e=n.collection(c)}else if(o.string(r.roots))e=n.$(r.roots);else if(r.directed)e=s.roots();else{for(var f=[],v=s;v.length>0;){var g=n.collection();i.bfs({roots:v[0],visit:function(e,t,r,n,i){g=g.add(r)},directed:!1}),v=v.not(g),f.push(g)}e=n.collection();for(var d=0;d<f.length;d++){var y=f[d],m=y.maxDegree(!1),b=y.filter(function(){return this.degree(!1)===m});e=e.add(b)}}var x=[],w={},E={},_={},P={},S={};l.bfs({roots:e,directed:r.directed,visit:function(e,t,r,n,i){var a=this[0],o=a.id();if(x[t]||(x[t]=[]),x[t].push(a),w[o]=!0,E[o]=t,_[o]=i,P[o]=n,i){var s=i.id(),l=S[s]=S[s]||[];l.push(r)}}});for(var k=[],d=0;d<s.length;d++){var p=s[d];w[p.id()]||k.push(p)}for(var T=3*k.length,D=0;0!==k.length&&T>D;){for(var C=k.shift(),M=C.neighborhood().nodes(),N=!1,d=0;d<M.length;d++){var B=E[M[d].id()];if(void 0!==B){x[B].push(C),N=!0;break}}N||k.push(C),D++}for(;0!==k.length;){var C=k.shift(),N=!1;N||(0===x.length&&x.push([]),x[0].push(C))}var z=function(){for(var e=0;e<x.length;e++)for(var t=x[e],r=0;r<t.length;r++){var n=t[r];n._private.scratch.breadthfirst={depth:e,index:r}}};z();for(var I=function(e){for(var t,r=e.connectedEdges(function(){return this.data("target")===e.id()}),n=e._private.scratch.breadthfirst,i=0,a=0;a<r.length;a++){var o=r[a],s=o.source()[0],l=s._private.scratch.breadthfirst;n.depth<=l.depth&&i<l.depth&&(i=l.depth,t=s)}return t},L=0;L<r.maximalAdjustments;L++){for(var O=x.length,A=[],d=0;O>d;d++)for(var B=x[d],R=B.length,q=0;R>q;q++){var p=B[q],V=p._private.scratch.breadthfirst,F=I(p);F&&(V.intEle=F,A.push(p))}for(var d=0;d<A.length;d++){var p=A[d],V=p._private.scratch.breadthfirst,F=V.intEle,j=F._private.scratch.breadthfirst;x[V.depth].splice(V.index,1);for(var X=j.depth+1;X>x.length-1;)x.push([]);x[X].push(p),V.depth=X,V.index=x[X].length-1}z()}var Y=0;if(r.avoidOverlap){for(var d=0;d<s.length;d++){var W=s[d],$=W.boundingBox(),H=$.w,U=$.h;Y=Math.max(Y,H,U)}Y*=r.spacingFactor}for(var Z={},G=function(e){if(Z[e.id()])return Z[e.id()];for(var t=e._private.scratch.breadthfirst.depth,r=e.neighborhood().nodes().not(":parent"),n=0,i=0,a=0;a<r.length;a++){var o=r[a],s=o._private.scratch.breadthfirst,l=s.index,u=s.depth,c=x[u].length;(t>u||0===t)&&(n+=l/c,i++)}return i=Math.max(1,i),n/=i,0===i&&(n=void 0),Z[e.id()]=n,n},Q=function(e,t){var r=G(e),n=G(t);return r-n},K=0;3>K;K++){for(var d=0;d<x.length;d++)x[d]=x[d].sort(Q);z()}for(var J=0,d=0;d<x.length;d++)J=Math.max(x[d].length,J);for(var ee={x:u.x1+u.w/2,y:u.x1+u.h/2},te=function(e,t){var n=e._private.scratch.breadthfirst,i=n.depth,a=n.index,o=x[i].length,s=Math.max(u.w/(o+1),Y),l=Math.max(u.h/(x.length+1),Y),c=Math.min(u.w/2/x.length,u.h/2/x.length);if(c=Math.max(c,Y),r.circle){if(r.circle){var d=c*i+c-(x.length>0&&x[0].length<=3?c/2:0),h=2*Math.PI/x[i].length*a;return 0===i&&1===x[0].length&&(d=1),{x:ee.x+d*Math.cos(h),y:ee.y+d*Math.sin(h)}}return{x:ee.x+(a+1-(o+1)/2)*s,y:(i+1)*l}}var p={x:ee.x+(a+1-(o+1)/2)*s,y:(i+1)*l};return t?p:p},re={},d=x.length-1;d>=0;d--)for(var B=x[d],q=0;q<B.length;q++){var C=B[q];re[C.id()]=te(C,d===x.length-1)}return s.layoutPositions(this,r,function(){return re[this.id()]}),this},t.exports=n},{"../../is":83,"../../math":85,"../../util":100}],49:[function(e,t,r){"use strict";function n(e){this.options=i.extend({},s,e)}var i=e("../../util"),a=e("../../math"),o=e("../../is"),s={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,radius:void 0,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,ready:void 0,stop:void 0};n.prototype.run=function(){var e=this.options,t=e,r=e.cy,n=t.eles,i=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,s=n.nodes().not(":parent");t.sort&&(s=s.sort(t.sort));for(var l,u=a.makeBoundingBox(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()}),c={x:u.x1+u.w/2,y:u.y1+u.h/2},d=void 0===t.sweep?2*Math.PI-2*Math.PI/s.length:t.sweep,h=d/Math.max(1,s.length-1),p=0,f=0;f<s.length;f++){var v=s[f],g=v.boundingBox(),y=g.w,m=g.h;p=Math.max(p,y,m)}if(l=o.number(t.radius)?t.radius:s.length<=1?0:Math.min(u.h,u.w)/2-p,s.length>1&&t.avoidOverlap){p*=1.75;var b=Math.cos(h)-Math.cos(0),x=Math.sin(h)-Math.sin(0),w=Math.sqrt(p*p/(b*b+x*x));l=Math.max(w,l)}var E=function(e,r){var n=t.startAngle+e*h*(i?1:-1),a=l*Math.cos(n),o=l*Math.sin(n),s={x:c.x+a,y:c.y+o};return s};return s.layoutPositions(this,t,E),this},t.exports=n},{"../../is":83,"../../math":85,"../../util":100}],50:[function(e,t,r){"use strict";function n(e){this.options=i.extend({},o,e)}var i=e("../../util"),a=e("../../math"),o={fit:!0,padding:30,startAngle:1.5*Math.PI,sweep:void 0,clockwise:!0,equidistant:!1,minNodeSpacing:10,boundingBox:void 0,avoidOverlap:!0,height:void 0,width:void 0,concentric:function(e){return e.degree()},levelWidth:function(e){return e.maxDegree()/4},animate:!1,animationDuration:500,animationEasing:void 0,ready:void 0,stop:void 0};n.prototype.run=function(){for(var e=this.options,t=e,r=void 0!==t.counterclockwise?!t.counterclockwise:t.clockwise,n=e.cy,i=t.eles,o=i.nodes().not(":parent"),s=a.makeBoundingBox(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:n.width(),h:n.height()}),l={x:s.x1+s.w/2,y:s.y1+s.h/2},u=[],c=t.startAngle,d=0,h=0;h<o.length;h++){var p,f=o[h];p=t.concentric.apply(f,[f]),u.push({value:p,node:f}),f._private.scratch.concentric=p}o.updateStyle();for(var h=0;h<o.length;h++){var f=o[h],v=f.boundingBox();d=Math.max(d,v.w,v.h)}u.sort(function(e,t){return t.value-e.value});for(var g=t.levelWidth(o),y=[[]],m=y[0],h=0;h<u.length;h++){var b=u[h];if(m.length>0){var x=Math.abs(m[0].value-b.value);x>=g&&(m=[],y.push(m))}m.push(b)}var w=d+t.minNodeSpacing;if(!t.avoidOverlap){var E=y.length>0&&y[0].length>1,_=Math.min(s.w,s.h)/2-w,P=_/(y.length+E?1:0);w=Math.min(w,P)}for(var S=0,h=0;h<y.length;h++){var k=y[h],T=void 0===t.sweep?2*Math.PI-2*Math.PI/k.length:t.sweep,D=k.dTheta=T/Math.max(1,k.length-1);if(k.length>1&&t.avoidOverlap){var C=Math.cos(D)-Math.cos(0),M=Math.sin(D)-Math.sin(0),N=Math.sqrt(w*w/(C*C+M*M));S=Math.max(N,S)}k.r=S,S+=w}if(t.equidistant){for(var B=0,S=0,h=0;h<y.length;h++){var k=y[h],z=k.r-S;B=Math.max(B,z)}S=0;for(var h=0;h<y.length;h++){var k=y[h];0===h&&(S=k.r),k.r=S,S+=B}}for(var I={},h=0;h<y.length;h++)for(var k=y[h],D=k.dTheta,S=k.r,L=0;L<k.length;L++){var b=k[L],c=t.startAngle+(r?1:-1)*D*L,O={x:l.x+S*Math.cos(c),y:l.y+S*Math.sin(c)};I[b.node.id()]=O}return o.layoutPositions(this,t,function(){var e=this.id();return I[e]}),this},t.exports=n},{"../../math":85,"../../util":100}],51:[function(e,t,r){"use strict";function n(e){this.options=a.extend({},u,e),this.options.layout=this}var i,a=e("../../util"),o=e("../../math"),s=e("../../thread"),l=e("../../is"),u={ready:function(){},stop:function(){},animate:!0,animationThreshold:250,refresh:20,fit:!0,padding:30,boundingBox:void 0,componentSpacing:100,nodeRepulsion:function(e){return 4e5},nodeOverlap:10,idealEdgeLength:function(e){return 10},edgeElasticity:function(e){return 100},nestingFactor:5,gravity:80,numIter:1e3,initialTemp:200,coolingFactor:.95,minTemp:1,useMultitasking:!0};n.prototype.run=function(){var e=this.options,t=e.cy,r=this,n=this.thread;n&&!n.stopped()||(n=this.thread=s({disabled:!e.useMultitasking})),r.stopped=!1,r.trigger({type:"layoutstart",layout:r}),i=!0===e.debug;var o=c(t,r,e);i&&p(o),f(o,t);var l=Date.now(),u=!1,d=function(r){r=r||{},u&&!r.next||!r.force&&Date.now()-l<e.animationThreshold||(u=!0,a.requestAnimationFrame(function(){v(o,t,e),!0===e.fit&&t.fit(e.padding),u=!1,r.next&&r.next()}))};n.on("message",function(e){var t=e.message;o.layoutNodes=t,d()}),n.pass({layoutInfo:o,options:{animate:e.animate,refresh:e.refresh,componentSpacing:e.componentSpacing,nodeOverlap:e.nodeOverlap,nestingFactor:e.nestingFactor,gravity:e.gravity,numIter:e.numIter,initialTemp:e.initialTemp,coolingFactor:e.coolingFactor,minTemp:e.minTemp}}).run(function(e){var t,r=e.layoutInfo,n=e.options,i=!1,a=function(e,t,r){o(e,t),c(e,t),d(e,t),h(e,t),p(e,t)},o=function(e,t){for(var r=0;r<e.graphSet.length;r++)for(var n=e.graphSet[r],i=n.length,a=0;i>a;a++)for(var o=e.layoutNodes[e.idToIndex[n[a]]],l=a+1;i>l;l++){var u=e.layoutNodes[e.idToIndex[n[l]]];s(o,u,e,t)}},s=function(e,t,r,n){var i=e.cmptId,a=t.cmptId;if(i===a||r.isCompound){var o=t.positionX-e.positionX,s=t.positionY-e.positionY;if(0!==o||0!==s){var c=l(e,t,o,s);if(c>0)var d=n.nodeOverlap*c,h=Math.sqrt(o*o+s*s),p=d*o/h,f=d*s/h;else var v=u(e,o,s),g=u(t,-1*o,-1*s),y=g.x-v.x,m=g.y-v.y,b=y*y+m*m,h=Math.sqrt(b),d=(e.nodeRepulsion+t.nodeRepulsion)/b,p=d*y/h,f=d*m/h;e.isLocked||(e.offsetX-=p,e.offsetY-=f),t.isLocked||(t.offsetX+=p,t.offsetY+=f)}}},l=function(e,t,r,n){if(r>0)var i=e.maxX-t.minX;else var i=t.maxX-e.minX;if(n>0)var a=e.maxY-t.minY;else var a=t.maxY-e.minY;return i>=0&&a>=0?Math.sqrt(i*i+a*a):0},u=function(e,t,r){var n=e.positionX,i=e.positionY,a=e.height||1,o=e.width||1,s=r/t,l=a/o,u={};do{if(0===t&&r>0){u.x=n,u.y=i+a/2;break}if(0===t&&0>r){u.x=n,u.y=i+a/2;break}if(t>0&&s>=-1*l&&l>=s){u.x=n+o/2,u.y=i+o*r/2/t;break}if(0>t&&s>=-1*l&&l>=s){u.x=n-o/2,u.y=i-o*r/2/t;break}if(r>0&&(-1*l>=s||s>=l)){u.x=n+a*t/2/r,u.y=i+a/2;break}if(0>r&&(-1*l>=s||s>=l)){u.x=n-a*t/2/r,u.y=i-a/2;break}}while(!1);return u},c=function(e,t){for(var r=0;r<e.edgeSize;r++){var n=e.layoutEdges[r],i=e.idToIndex[n.sourceId],a=e.layoutNodes[i],o=e.idToIndex[n.targetId],s=e.layoutNodes[o],l=s.positionX-a.positionX,c=s.positionY-a.positionY;if(0===l&&0===c)return;var d=u(a,l,c),h=u(s,-1*l,-1*c),p=h.x-d.x,f=h.y-d.y,v=Math.sqrt(p*p+f*f),g=Math.pow(n.idealLength-v,2)/n.elasticity;if(0!==v)var y=g*p/v,m=g*f/v;else var y=0,m=0;a.isLocked||(a.offsetX+=y,a.offsetY+=m),s.isLocked||(s.offsetX-=y,s.offsetY-=m)}},d=function(e,t){for(var r=1,n=0;n<e.graphSet.length;n++){var i=e.graphSet[n],a=i.length;if(0===n)var o=e.clientHeight/2,s=e.clientWidth/2;else var l=e.layoutNodes[e.idToIndex[i[0]]],u=e.layoutNodes[e.idToIndex[l.parentId]],o=u.positionX,s=u.positionY;for(var c=0;a>c;c++){var d=e.layoutNodes[e.idToIndex[i[c]]];if(!d.isLocked){var h=o-d.positionX,p=s-d.positionY,f=Math.sqrt(h*h+p*p);if(f>r){var v=t.gravity*h/f,g=t.gravity*p/f;d.offsetX+=v,d.offsetY+=g}}}}},h=function(e,t){var r=[],n=0,i=-1;for(r.push.apply(r,e.graphSet[0]),i+=e.graphSet[0].length;i>=n;){var a=r[n++],o=e.idToIndex[a],s=e.layoutNodes[o],l=s.children;if(0<l.length&&!s.isLocked){for(var u=s.offsetX,c=s.offsetY,d=0;d<l.length;d++){var h=e.layoutNodes[e.idToIndex[l[d]]];h.offsetX+=u,h.offsetY+=c,r[++i]=l[d]}s.offsetX=0,s.offsetY=0}}},p=function(e,t){for(var r=0;r<e.nodeSize;r++){var n=e.layoutNodes[r];0<n.children.length&&(n.maxX=void 0,n.minX=void 0,n.maxY=void 0,n.minY=void 0)}for(var r=0;r<e.nodeSize;r++){var n=e.layoutNodes[r];if(!(0<n.children.length||n.isLocked)){var i=f(n.offsetX,n.offsetY,e.temperature);n.positionX+=i.x,n.positionY+=i.y,n.offsetX=0,n.offsetY=0,n.minX=n.positionX-n.width,n.maxX=n.positionX+n.width,n.minY=n.positionY-n.height,n.maxY=n.positionY+n.height,v(n,e)}}for(var r=0;r<e.nodeSize;r++){var n=e.layoutNodes[r];0<n.children.length&&!n.isLocked&&(n.positionX=(n.maxX+n.minX)/2,n.positionY=(n.maxY+n.minY)/2,n.width=n.maxX-n.minX,n.height=n.maxY-n.minY)}},f=function(e,t,r){var n=Math.sqrt(e*e+t*t);if(n>r)var i={x:r*e/n,y:r*t/n};else var i={x:e,y:t};return i},v=function(e,t){var r=e.parentId;if(null!=r){var n=t.layoutNodes[t.idToIndex[r]],i=!1;return(null==n.maxX||e.maxX+n.padRight>n.maxX)&&(n.maxX=e.maxX+n.padRight,i=!0),(null==n.minX||e.minX-n.padLeft<n.minX)&&(n.minX=e.minX-n.padLeft,i=!0),(null==n.maxY||e.maxY+n.padBottom>n.maxY)&&(n.maxY=e.maxY+n.padBottom,i=!0),(null==n.minY||e.minY-n.padTop<n.minY)&&(n.minY=e.minY-n.padTop,i=!0),i?v(n,t):void 0}},g=function(e,t){for(var n=r.layoutNodes,i=[],a=0;a<n.length;a++){var o=n[a],s=o.cmptId,l=i[s]=i[s]||[];l.push(o)}for(var u=0,a=0;a<i.length;a++){var c=i[a];if(c){c.x1=1/0,c.x2=-(1/0),c.y1=1/0,c.y2=-(1/0);for(var d=0;d<c.length;d++){var h=c[d];c.x1=Math.min(c.x1,h.positionX-h.width/2),c.x2=Math.max(c.x2,h.positionX+h.width/2),c.y1=Math.min(c.y1,h.positionY-h.height/2),c.y2=Math.max(c.y2,h.positionY+h.height/2)}c.w=c.x2-c.x1,c.h=c.y2-c.y1,u+=c.w*c.h}}i.sort(function(e,t){return t.w*t.h-e.w*e.h});for(var p=0,f=0,v=0,g=0,y=Math.sqrt(u)*r.clientWidth/r.clientHeight,a=0;a<i.length;a++){var c=i[a];if(c){for(var d=0;d<c.length;d++){var h=c[d];h.isLocked||(h.positionX+=p,h.positionY+=f)}p+=c.w+t.componentSpacing,v+=c.w+t.componentSpacing,g=Math.max(g,c.h),v>y&&(f+=g+t.componentSpacing,p=0,v=0,g=0)}}},y=function(e){return i?!1:(a(r,n,e),r.temperature=r.temperature*n.coolingFactor,!(r.temperature<n.minTemp))},m=0;do{for(var b=0;b<n.refresh&&m<n.numIter;){var t=y(m);if(!t)break;b++,m++}n.animate&&broadcast(r.layoutNodes)}while(t&&m+1<n.numIter);return g(r,n),r}).then(function(e){o.layoutNodes=e.layoutNodes,n.stop(),h()});var h=function(){d({force:!0,next:function(){r.one("layoutstop",e.stop),r.trigger({type:"layoutstop",layout:r})}})};return this},n.prototype.stop=function(){return this.stopped=!0,this.thread&&this.thread.stop(),this.trigger("layoutstop"),this},n.prototype.destroy=function(){return this.thread&&this.thread.stop(),this};var c=function(e,t,r){for(var n=r.eles.edges(),i=r.eles.nodes(),a={isCompound:e.hasCompoundNodes(),layoutNodes:[],idToIndex:{},nodeSize:i.size(),graphSet:[],indexToGraph:[],layoutEdges:[],edgeSize:n.size(),temperature:r.initialTemp,clientWidth:e.width(),clientHeight:e.width(),boundingBox:o.makeBoundingBox(r.boundingBox?r.boundingBox:{x1:0,y1:0,w:e.width(),h:e.height()})},s=r.eles.components(),u={},c=0;c<s.length;c++)for(var h=s[c],p=0;p<h.length;p++){var f=h[p];u[f.id()]=c}for(var c=0;c<a.nodeSize;c++){var v=i[c],g=v.boundingBox(),y={};y.isLocked=v.locked(),y.id=v.data("id"),y.parentId=v.data("parent"),y.cmptId=u[v.id()],y.children=[],y.positionX=v.position("x"),y.positionY=v.position("y"),y.offsetX=0,y.offsetY=0,y.height=g.w,y.width=g.h,y.maxX=y.positionX+y.width/2,y.minX=y.positionX-y.width/2,y.maxY=y.positionY+y.height/2,y.minY=y.positionY-y.height/2,y.padLeft=parseFloat(v.style("padding-left")),y.padRight=parseFloat(v.style("padding-right")),y.padTop=parseFloat(v.style("padding-top")),y.padBottom=parseFloat(v.style("padding-bottom")),y.nodeRepulsion=l.fn(r.nodeRepulsion)?r.nodeRepulsion.call(v,v):r.nodeRepulsion,a.layoutNodes.push(y),a.idToIndex[y.id]=c}for(var m=[],b=0,x=-1,w=[],c=0;c<a.nodeSize;c++){var v=a.layoutNodes[c],E=v.parentId;null!=E?a.layoutNodes[a.idToIndex[E]].children.push(v.id):(m[++x]=v.id,w.push(v.id))}for(a.graphSet.push(w);x>=b;){var _=m[b++],P=a.idToIndex[_],f=a.layoutNodes[P],S=f.children;if(S.length>0){a.graphSet.push(S);for(var c=0;c<S.length;c++)m[++x]=S[c]}}for(var c=0;c<a.graphSet.length;c++)for(var k=a.graphSet[c],p=0;p<k.length;p++){var T=a.idToIndex[k[p]];a.indexToGraph[T]=c}for(var c=0;c<a.edgeSize;c++){var D=n[c],C={};C.id=D.data("id"),C.sourceId=D.data("source"),C.targetId=D.data("target");var M=l.fn(r.idealEdgeLength)?r.idealEdgeLength.call(D,D):r.idealEdgeLength,N=l.fn(r.edgeElasticity)?r.edgeElasticity.call(D,D):r.edgeElasticity,B=a.idToIndex[C.sourceId],z=a.idToIndex[C.targetId],I=a.indexToGraph[B],L=a.indexToGraph[z];if(I!=L){for(var O=d(C.sourceId,C.targetId,a),A=a.graphSet[O],R=0,y=a.layoutNodes[B];-1===A.indexOf(y.id);)y=a.layoutNodes[a.idToIndex[y.parentId]],R++;for(y=a.layoutNodes[z];-1===A.indexOf(y.id);)y=a.layoutNodes[a.idToIndex[y.parentId]],R++;M*=R*r.nestingFactor}C.idealLength=M,C.elasticity=N,a.layoutEdges.push(C)}return a},d=function(e,t,r){var n=h(e,t,0,r);return 2>n.count?0:n.graph},h=function(e,t,r,n){var i=n.graphSet[r];if(-1<i.indexOf(e)&&-1<i.indexOf(t))return{count:2,graph:r};for(var a=0,o=0;o<i.length;o++){var s=i[o],l=n.idToIndex[s],u=n.layoutNodes[l].children;if(0!==u.length){var c=n.indexToGraph[n.idToIndex[u[0]]],d=h(e,t,c,n);if(0!==d.count){if(1!==d.count)return d;if(a++,2===a)break}}}return{count:a,graph:r}},p=function(e){if(i){console.debug("layoutNodes:");for(var t=0;t<e.nodeSize;t++){var r=e.layoutNodes[t],n="\nindex: "+t+"\nId: "+r.id+"\nChildren: "+r.children.toString()+"\nparentId: "+r.parentId+"\npositionX: "+r.positionX+"\npositionY: "+r.positionY+"\nOffsetX: "+r.offsetX+"\nOffsetY: "+r.offsetY+"\npadLeft: "+r.padLeft+"\npadRight: "+r.padRight+"\npadTop: "+r.padTop+"\npadBottom: "+r.padBottom;console.debug(n)}console.debug("idToIndex");for(var t in e.idToIndex)console.debug("Id: "+t+"\nIndex: "+e.idToIndex[t]);console.debug("Graph Set");for(var a=e.graphSet,t=0;t<a.length;t++)console.debug("Set : "+t+": "+a[t].toString());for(var n="IndexToGraph",t=0;t<e.indexToGraph.length;t++)n+="\nIndex : "+t+" Graph: "+e.indexToGraph[t];console.debug(n),n="Layout Edges";for(var t=0;t<e.layoutEdges.length;t++){var o=e.layoutEdges[t];n+="\nEdge Index: "+t+" ID: "+o.id+" SouceID: "+o.sourceId+" TargetId: "+o.targetId+" Ideal Length: "+o.idealLength}console.debug(n),n="nodeSize: "+e.nodeSize,n+="\nedgeSize: "+e.edgeSize,n+="\ntemperature: "+e.temperature,console.debug(n)}},f=function(e,t){for(var r=e.clientWidth,n=e.clientHeight,i=0;i<e.nodeSize;i++){var a=e.layoutNodes[i];0!==a.children.length||a.isLocked||(a.positionX=Math.random()*r,a.positionY=Math.random()*n)}},v=function(e,t,r){var n=r.layout,i=r.eles.nodes(),a=e.boundingBox,o={x1:1/0,x2:-(1/0),y1:1/0,y2:-(1/0)};r.boundingBox&&(i.forEach(function(t){var r=e.layoutNodes[e.idToIndex[t.data("id")]];o.x1=Math.min(o.x1,r.positionX),o.x2=Math.max(o.x2,r.positionX),o.y1=Math.min(o.y1,r.positionY),o.y2=Math.max(o.y2,r.positionY)}),o.w=o.x2-o.x1,o.h=o.y2-o.y1),i.positions(function(t,n){var i=e.layoutNodes[e.idToIndex[n.data("id")]];if(r.boundingBox){var s=(i.positionX-o.x1)/o.w,l=(i.positionY-o.y1)/o.h;return{x:a.x1+s*a.w,y:a.y1+l*a.h}}return{x:i.positionX,y:i.positionY}}),!0!==e.ready&&(e.ready=!0,n.one("layoutready",r.ready),n.trigger({type:"layoutready",layout:this}))};t.exports=n},{"../../is":83,"../../math":85,"../../thread":98,"../../util":100}],52:[function(e,t,r){"use strict";function n(e){this.options=i.extend({},o,e)}var i=e("../../util"),a=e("../../math"),o={fit:!0,padding:30,boundingBox:void 0,avoidOverlap:!0,avoidOverlapPadding:10,condense:!1,rows:void 0,cols:void 0,position:function(e){},sort:void 0,animate:!1,animationDuration:500,animationEasing:void 0,ready:void 0,stop:void 0};n.prototype.run=function(){var e=this.options,t=e,r=e.cy,n=t.eles,i=n.nodes().not(":parent");t.sort&&(i=i.sort(t.sort));var o=a.makeBoundingBox(t.boundingBox?t.boundingBox:{x1:0,y1:0,w:r.width(),h:r.height()});if(0===o.h||0===o.w)i.layoutPositions(this,t,function(){return{x:o.x1,y:o.y1}});else{var s=i.size(),l=Math.sqrt(s*o.h/o.w),u=Math.round(l),c=Math.round(o.w/o.h*l),d=function(e){if(null==e)return Math.min(u,c);var t=Math.min(u,c);t==u?u=e:c=e},h=function(e){if(null==e)return Math.max(u,c);var t=Math.max(u,c);t==u?u=e:c=e},p=t.rows,f=null!=t.cols?t.cols:t.columns;if(null!=p&&null!=f)u=p,c=f;else if(null!=p&&null==f)u=p,c=Math.ceil(s/u);else if(null==p&&null!=f)c=f,u=Math.ceil(s/c);else if(c*u>s){var v=d(),g=h();(v-1)*g>=s?d(v-1):(g-1)*v>=s&&h(g-1)}else for(;s>c*u;){var v=d(),g=h();(g+1)*v>=s?h(g+1):d(v+1)}var y=o.w/c,m=o.h/u;if(t.condense&&(y=0,m=0),t.avoidOverlap)for(var b=0;b<i.length;b++){var x=i[b],w=x._private.position;null!=w.x&&null!=w.y||(w.x=0,w.y=0);var E=x.boundingBox(),_=t.avoidOverlapPadding,P=E.w+_,S=E.h+_;y=Math.max(y,P),m=Math.max(m,S)}for(var k={},T=function(e,t){return!!k["c-"+e+"-"+t]},D=function(e,t){k["c-"+e+"-"+t]=!0},C=0,M=0,N=function(){M++,M>=c&&(M=0,C++)},B={},b=0;b<i.length;b++){var x=i[b],z=t.position(x);if(z&&(void 0!==z.row||void 0!==z.col)){var w={row:z.row,col:z.col};if(void 0===w.col)for(w.col=0;T(w.row,w.col);)w.col++;else if(void 0===w.row)for(w.row=0;T(w.row,w.col);)w.row++;B[x.id()]=w,D(w.row,w.col)}}var I=function(e,t){var r,n;if(t.locked()||t.isParent())return!1;var i=B[t.id()];if(i)r=i.col*y+y/2+o.x1,n=i.row*m+m/2+o.y1;else{for(;T(C,M);)N();r=M*y+y/2+o.x1,n=C*m+m/2+o.y1,D(C,M),N()}return{x:r,y:n}};i.layoutPositions(this,t,I)}return this},t.exports=n},{"../../math":85,"../../util":100}],53:[function(e,t,r){"use strict";t.exports=[{name:"breadthfirst",impl:e("./breadthfirst")},{name:"circle",impl:e("./circle")},{name:"concentric",impl:e("./concentric")},{name:"cose",impl:e("./cose")},{name:"grid",impl:e("./grid")},{name:"null",impl:e("./null")},{name:"preset",impl:e("./preset")},{name:"random",impl:e("./random")}]},{"./breadthfirst":48,"./circle":49,"./concentric":50,"./cose":51,"./grid":52,"./null":54,"./preset":55,"./random":56}],54:[function(e,t,r){"use strict";function n(e){this.options=i.extend({},a,e)}var i=e("../../util"),a={ready:function(){},stop:function(){}};n.prototype.run=function(){var e=this.options,t=e.eles,r=this;e.cy;return r.trigger("layoutstart"),t.nodes().positions(function(){return{x:0,y:0}}),r.one("layoutready",e.ready),r.trigger("layoutready"),r.one("layoutstop",e.stop),r.trigger("layoutstop"),this},n.prototype.stop=function(){return this},t.exports=n},{"../../util":100}],55:[function(e,t,r){"use strict";function n(e){this.options=i.extend({},o,e)}var i=e("../../util"),a=e("../../is"),o={positions:void 0,zoom:void 0,pan:void 0,fit:!0,padding:30,animate:!1,animationDuration:500,animationEasing:void 0,ready:void 0,stop:void 0};n.prototype.run=function(){function e(e){if(null==t.positions)return null;if(i)return t.positions.apply(e,[e]);var r=t.positions[e._private.data.id];return null==r?null:r}var t=this.options,r=t.eles,n=r.nodes(),i=a.fn(t.positions);return n.layoutPositions(this,t,function(t,r){var n=e(r);return r.locked()||null==n?!1:n}),this},t.exports=n},{"../../is":83,"../../util":100}],56:[function(e,t,r){"use strict";function n(e){this.options=i.extend({},o,e)}var i=e("../../util"),a=e("../../math"),o={fit:!0,padding:30,boundingBox:void 0,animate:!1,animationDuration:500,animationEasing:void 0,ready:void 0,stop:void 0};n.prototype.run=function(){var e=this.options,t=e.cy,r=e.eles,n=r.nodes().not(":parent"),i=a.makeBoundingBox(e.boundingBox?e.boundingBox:{x1:0,y1:0,w:t.width(),h:t.height()}),o=function(e,t){return{x:i.x1+Math.round(Math.random()*i.w),y:i.y1+Math.round(Math.random()*i.h)}};return n.layoutPositions(this,e,o),this},t.exports=n},{"../../math":85,"../../util":100}],57:[function(e,t,r){"use strict";var n=e("../../../math"),i=e("../../../is"),a=e("../../../util"),o={};o.arrowShapeWidth=.3,o.registerArrowShapes=function(){var e=this.arrowShapes={},t=this,r=function(e,t,r,n,i,a){var o=i.x-r/2-a,s=i.x+r/2+a,l=i.y-r/2-a,u=i.y+r/2+a,c=e>=o&&s>=e&&t>=l&&u>=t;return c},o=function(e,t,r,n,i){var a=e*Math.cos(n)-t*Math.sin(n),o=e*Math.sin(n)+t*Math.cos(n),s=a*r,l=o*r,u=s+i.x,c=l+i.y;return{x:u,y:c}},s=function(e,t,r,n){for(var i=[],a=0;a<e.length;a+=2){var s=e[a],l=e[a+1];i.push(o(s,l,t,r,n))}return i},l=function(e){for(var t=[],r=0;r<e.length;r++){var n=e[r];t.push(n.x,n.y)}return t},u=function(o,u){i.string(u)&&(u=e[u]),e[o]=a.extend({name:o,points:[-.15,-.3,.15,-.3,.15,.3,-.15,.3],collide:function(e,t,r,i,a,o){var u=l(s(this.points,r+2*o,i,a)),c=n.pointInsidePolygonPoints(e,t,u);return c},roughCollide:r,draw:function(e,r,n,i){var a=s(this.points,r,n,i);t.arrowShapeImpl("polygon")(e,a)},spacing:function(e){return 0},gap:function(e){return 2*e.pstyle("width").pfValue}},u)};u("none",{collide:a.falsify,roughCollide:a.falsify,draw:a.noop,spacing:a.zeroify,gap:a.zeroify}),u("triangle",{points:[-.15,-.3,0,0,.15,-.3]}),u("arrow","triangle"),u("triangle-backcurve",{points:e.triangle.points,controlPoint:[0,-.15],roughCollide:r,draw:function(e,r,n,i){var a=s(this.points,r,n,i),l=this.controlPoint,u=o(l[0],l[1],r,n,i);t.arrowShapeImpl(this.name)(e,a,u)},gap:function(e){return e.pstyle("width").pfValue}}),u("triangle-tee",{points:[-.15,-.3,0,0,.15,-.3,-.15,-.3],pointsTee:[-.15,-.4,-.15,-.5,.15,-.5,.15,-.4],collide:function(e,t,r,i,a,o){var u=l(s(this.points,r+2*o,i,a)),c=l(s(this.pointsTee,r+2*o,i,a)),d=n.pointInsidePolygonPoints(e,t,u)||n.pointInsidePolygonPoints(e,t,c);return d},draw:function(e,r,n,i){var a=s(this.points,r,n,i),o=s(this.pointsTee,r,n,i);t.arrowShapeImpl(this.name)(e,a,o)}}),u("vee",{points:[-.15,-.3,0,0,.15,-.3,0,-.15],gap:function(e){return e.pstyle("width").pfValue}}),u("circle",{radius:.15,collide:function(e,t,r,n,i,a){var o=i,s=Math.pow(o.x-e,2)+Math.pow(o.y-t,2)<=Math.pow((r+2*a)*this.radius,2);return s},draw:function(e,r,n,i){t.arrowShapeImpl(this.name)(e,i.x,i.y,this.radius*r)},spacing:function(e){return t.getArrowWidth(e.pstyle("width").pfValue)*this.radius}}),u("inhibitor",{points:[-.15,0,-.15,-.1,.15,-.1,.15,0],spacing:function(e){return 1},gap:function(e){return 1}}),u("tee","inhibitor"),u("square",{points:[-.15,0,.15,0,.15,-.3,-.15,-.3]}),u("diamond",{points:[-.15,-.15,0,-.3,.15,-.15,0,0],gap:function(e){return e.pstyle("width").pfValue}})},t.exports=o},{"../../../is":83,"../../../math":85,"../../../util":100}],58:[function(e,t,r){"use strict";function n(e,t,r){for(var n=function(e,t,r,n){return i.qbezierAt(e,t,r,n)},a=t._private,o=a.rstyle.bezierPts,s=0;s<e.bezierProjPcts.length;s++){var l=e.bezierProjPcts[s];o.push({x:n(r[0],r[2],r[4],l),y:n(r[1],r[3],r[5],l)})}}var i=e("../../../math"),a=e("../../../is"),o=e("../../../util"),s=e("../../../collection/zsort"),l={};l.registerCalculationListeners=function(){var e=this.cy,t=e.collection(),r=this,n=function(e,r){t.merge(e);for(var n=0;n<e.length;n++){var i=e[n],a=i._private,o=a.rstyle;o.clean=!1,a.bbCache=null;var s=o.dirtyEvents=o.dirtyEvents||{length:0};s[r.type]||(s[r.type]=!0,s.length++)}};r.binder(e).on("position.* style.* free.*","node",function(t){var r=t.cyTarget;if(n(r,t),n(r.connectedEdges(),t),e.hasCompoundNodes()){var i=r.parents();n(i,t),n(i.connectedEdges(),t)}}).on("add.* background.*","node",function(e){var t=e.cyTarget;n(t,e)}).on("add.* style.*","edge",function(e){var t=e.cyTarget;n(t,e),n(t.parallelEdges(),e)}).on("remove.*","edge",function(e){for(var t=e.cyTarget,r=t.parallelEdges(),i=0;i<r.length;i++){var a=r[i];a.removed()||n(a,e)}});var i=function(n){if(n){var i=r.onUpdateEleCalcsFns;if(i)for(var a=0;a<i.length;a++){var o=i[a];o(n,t)}r.recalculateRenderedStyle(t,!1);for(var a=0;a<t.length;a++)t[a]._private.rstyle.dirtyEvents=null;t=e.collection()}};r.beforeRender(i,r.beforeRenderPriorities.eleCalcs)},l.onUpdateEleCalcs=function(e){var t=this.onUpdateEleCalcsFns=this.onUpdateEleCalcsFns||[];t.push(e)},l.recalculateRenderedStyle=function(e,t){var r=[],n=[];void 0===t&&(t=!0);for(var i=0;i<e.length;i++){var a=e[i],o=a._private,s=o.rstyle;if(!(t&&s.clean||a.removed())){if("nodes"===o.group){var l=o.position;n.push(a),s.nodeX=l.x,s.nodeY=l.y,s.nodeW=a.pstyle("width").pfValue,s.nodeH=a.pstyle("height").pfValue}else r.push(a);s.clean=!0}}this.recalculateEdgeProjections(r),this.recalculateLabelProjections(n,r);for(var i=0;i<r.length;i++){var a=r[i],o=a._private,s=o.rstyle,u=o.rscratch;s.srcX=u.arrowStartX,s.srcY=u.arrowStartY,s.tgtX=u.arrowEndX,s.tgtY=u.arrowEndY,s.midX=u.midX,s.midY=u.midY,s.labelAngle=u.labelAngle,s.sourceLabelAngle=u.sourceLabelAngle,s.targetLabelAngle=u.targetLabelAngle}},l.projectIntoViewport=function(e,t){var r=this.findContainerClientCoords(),n=r[0],i=r[1],a=e-n,o=t-i;return a-=this.cy.pan().x,o-=this.cy.pan().y,a/=this.cy.zoom(),o/=this.cy.zoom(),[a,o]},l.findContainerClientCoords=function(){var e=this.container,t=this.containerBB=this.containerBB||e.getBoundingClientRect();return[t.left,t.top,t.right-t.left,t.bottom-t.top]},l.invalidateContainerClientCoordsCache=function(){this.containerBB=null},l.findNearestElement=function(e,t,r,n){return this.findNearestElements(e,t,r,n)[0]},l.findNearestElements=function(e,t,r,n){function a(e,t){if(e.isNode()){if(h)return;h=e,g.push(e)}if(e.isEdge()&&(null==t||E>t))if(d){if(d.pstyle("z-index").value===e.pstyle("z-index").value)for(var r=0;r<g.length;r++)if(g[r].isEdge()){g[r]=e,d=e,E=null!=t?t:E;break}}else g.push(e),d=e,E=null!=t?t:E}function s(n){var i=n._private;if("no"!==n.pstyle("events").strValue){var o=n.outerWidth()+2*x,s=n.outerHeight()+2*x,l=o/2,u=s/2,c=i.position;if(c.x-l<=e&&e<=c.x+l&&c.y-u<=t&&t<=c.y+u){
-var d=!r||n.visible()&&!n.transparent();if(r&&!d)return;var h=f.nodeShapes[p.getNodeShape(n)];h.checkPoint(e,t,0,o,s,c.x,c.y)&&a(n,0)}}}function l(n){var o=n._private;if("no"!==n.pstyle("events").strValue){var l,u,c=o.rscratch,d=n.pstyle("width").pfValue/2+b,h=d*d,v=2*d,y=o.source,x=o.target,w=!1,E=function(){if(void 0!==u)return u;if(!r)return u=!0,!0;var e=n.visible()&&!n.transparent();return e?(u=!0,!0):(u=!1,!1)};if("segments"===c.edgeType||"straight"===c.edgeType||"haystack"===c.edgeType)for(var _=c.allpts,P=0;P+3<_.length;P+=2)(w=i.inLineVicinity(e,t,_[P],_[P+1],_[P+2],_[P+3],v))&&E()&&h>(l=i.sqdistToFiniteLine(e,t,_[P],_[P+1],_[P+2],_[P+3]))&&a(n,l);else if("bezier"===c.edgeType||"multibezier"===c.edgeType||"self"===c.edgeType||"compound"===c.edgeType)for(var _=c.allpts,P=0;P+5<c.allpts.length;P+=4)(w=i.inBezierVicinity(e,t,_[P],_[P+1],_[P+2],_[P+3],_[P+4],_[P+5],v))&&E()&&h>(l=i.sqdistToQuadraticBezier(e,t,_[P],_[P+1],_[P+2],_[P+3],_[P+4],_[P+5]))&&a(n,l);if(w&&E())for(var y=y||o.source,x=x||o.target,S=n.pstyle("width").pfValue,k=p.getArrowWidth(S),T=[{name:"source",x:c.arrowStartX,y:c.arrowStartY,angle:c.srcArrowAngle},{name:"target",x:c.arrowEndX,y:c.arrowEndY,angle:c.tgtArrowAngle},{name:"mid-source",x:c.midX,y:c.midY,angle:c.midsrcArrowAngle},{name:"mid-target",x:c.midX,y:c.midY,angle:c.midtgtArrowAngle}],P=0;P<T.length;P++){var D=T[P],C=f.arrowShapes[n.pstyle(D.name+"-arrow-shape").value];if(C.roughCollide(e,t,k,D.angle,{x:D.x,y:D.y},b)&&C.collide(e,t,k,D.angle,{x:D.x,y:D.y},b)){a(n);break}}m&&g.length>0&&(s(y),s(x))}}function u(e,t,r){return o.getPrefixedProperty(e,t,r)}function c(r,n){var o,s=r._private,l=w;if(o=n?n+"-":"","no"!==r.pstyle("text-events").strValue){var c=r.pstyle(o+"text-rotation");if("autorotate"===c.strValue||c.pfValue){var d=s.rstyle,h=r.pstyle("text-border-width").pfValue,p=u(d,"labelWidth",n)+h/2+2*l,f=u(d,"labelHeight",n)+h/2+2*l,v=u(d,"labelX",n),g=u(d,"labelY",n),y=u(s.rscratch,"labelAngle",n),m=Math.cos(y),b=Math.sin(y),x=function(e,t){return e-=v,t-=g,{x:e*m-t*b+v,y:e*b+t*m+g}},E=v-p/2,_=v+p/2,P=g-f/2,S=g+f/2,k=x(E,P),T=x(E,S),D=x(_,P),C=x(_,S),M=[k.x,k.y,D.x,D.y,C.x,C.y,T.x,T.y];i.pointInsidePolygonPoints(e,t,M)&&a(r)}else{var N=r.boundingBox({includeLabels:!0,includeNodes:!1,includeEdges:!1});N.x1-=l,N.y1-=l,N.x2+=l,N.y2+=l,N.w=N.x2-N.x1,N.h=N.y2-N.y1,i.inBoundingBox(N,e,t)&&a(r)}}}for(var d,h,p=this,f=this,v=f.getCachedZSortedEles(),g=[],y=f.cy.zoom(),m=f.cy.hasCompoundNodes(),b=(n?24:8)/y,x=(n?8:2)/y,w=(n?8:2)/y,E=1/0,_=v.length-1;_>=0;_--){var P=v[_];P.isNode()?(s(P),c(P)):(l(P),c(P),c(P,"source"),c(P,"target"))}return g},l.getAllInBox=function(e,t,r,n){var a=this.getCachedZSortedEles(),o=a.nodes,s=a.edges,l=[],u=Math.min(e,r),c=Math.max(e,r),d=Math.min(t,n),h=Math.max(t,n);e=u,r=c,t=d,n=h;for(var p=i.makeBoundingBox({x1:e,y1:t,x2:r,y2:n}),f=0;f<o.length;f++){var v=o[f],g=v.boundingBox({includeNodes:!0,includeEdges:!1,includeLabels:!1,includeShadows:!1});i.boundingBoxesIntersect(p,g)&&l.push(o[f])}for(var y=0;y<s.length;y++){var m=s[y],b=m._private,x=b.rscratch;if((null==x.startX||null==x.startY||i.inBoundingBox(p,x.startX,x.startY))&&(null==x.endX||null==x.endY||i.inBoundingBox(p,x.endX,x.endY)))if("bezier"===x.edgeType||"multibezier"===x.edgeType||"self"===x.edgeType||"compound"===x.edgeType||"segments"===x.edgeType||"haystack"===x.edgeType){for(var w=b.rstyle.bezierPts||b.rstyle.linePts||b.rstyle.haystackPts,E=!0,f=0;f<w.length;f++)if(!i.pointInBoundingBox(p,w[f])){E=!1;break}E&&l.push(m)}else"haystack"!==x.edgeType&&"straight"!==x.edgeType||l.push(m)}return l},l.getNodeShape=function(e){var t=this,r=e.pstyle("shape").value;if(e.isParent())return"rectangle"===r||"roundrectangle"===r?r:"rectangle";if("polygon"===r){var n=e.pstyle("shape-polygon-points").value;return t.nodeShapes.makePolygon(n).name}return r},l.updateCachedZSortedEles=function(){this.getCachedZSortedEles(!0)},l.updateCachedGrabbedEles=function(){var e=this.cachedZSortedEles;e.drag=[],e.nondrag=[];for(var t,r=0;r<e.length;r++){var n=e[r],i=n._private.rscratch;i.isGrabTarget&&!n.isParent()?t=n:i.inDragLayer?e.drag.push(n):e.nondrag.push(n)}t&&e.drag.push(t)},l.getCachedZSortedEles=function(e){if(e||!this.cachedZSortedEles){var t=this.cy.mutableElements(),r=[];r.nodes=[],r.edges=[];for(var n=0;n<t.length;n++){var i=t[n];(i.animated()||i.visible()&&!i.transparent())&&(r.push(i),i.isNode()?r.nodes.push(i):r.edges.push(i))}r.sort(s),this.cachedZSortedEles=r,this.updateCachedGrabbedEles()}else r=this.cachedZSortedEles;return r},l.projectLines=function(e){var t=e._private,r=t.rscratch,i=r.edgeType;if(t.rstyle.bezierPts=null,t.rstyle.linePts=null,t.rstyle.haystackPts=null,"multibezier"===i||"bezier"===i||"self"===i||"compound"===i)for(var a=(t.rstyle.bezierPts=[],0);a+5<r.allpts.length;a+=4)n(this,e,r.allpts.slice(a,a+6));else if("segments"===i)for(var o=t.rstyle.linePts=[],a=0;a+1<r.allpts.length;a+=2)o.push({x:r.allpts[a],y:r.allpts[a+1]});else if("haystack"===i){var s=r.haystackPts;t.rstyle.haystackPts=[{x:s[0],y:s[1]},{x:s[2],y:s[3]}]}t.rstyle.arrowWidth=this.getArrowWidth(e.pstyle("width").pfValue)*this.arrowShapeWidth},l.projectBezier=l.projectLines,l.recalculateNodeLabelProjection=function(e){var t=e.pstyle("label").strValue;if(!a.emptyString(t)){var r,n,i=e._private,o=e.width(),s=e.height(),l=e.pstyle("padding-left").pfValue,u=e.pstyle("padding-right").pfValue,c=e.pstyle("padding-top").pfValue,d=e.pstyle("padding-bottom").pfValue,h=i.position,p=e.pstyle("text-halign").strValue,f=e.pstyle("text-valign").strValue,v=i.rscratch,g=i.rstyle;switch(p){case"left":r=h.x-o/2-l;break;case"right":r=h.x+o/2+u;break;default:r=h.x}switch(f){case"top":n=h.y-s/2-c;break;case"bottom":n=h.y+s/2+d;break;default:n=h.y}v.labelX=r,v.labelY=n,g.labelX=r,g.labelY=n,this.applyLabelDimensions(e)}},l.recalculateEdgeLabelProjections=function(e){var t,r=e._private,n=r.rscratch,a=this,s={mid:e.pstyle("label").strValue,source:e.pstyle("source-label").strValue,target:e.pstyle("target-label").strValue};if(s.mid||s.source||s.target){t={x:n.midX,y:n.midY};var l=function(e,t,n){o.setPrefixedProperty(r.rscratch,e,t,n),o.setPrefixedProperty(r.rstyle,e,t,n)};l("labelX",null,t.x),l("labelY",null,t.y);var u=function(){function e(e,t,r,n,a){var o=i.dist(t,r),s=e.segments[e.segments.length-1],l={p0:t,p1:r,t0:n,t1:a,startDist:s?s.startDist+s.length:0,length:o};e.segments.push(l),e.length+=o}if(u.cache)return u.cache;for(var t=[],o=0;o+5<n.allpts.length;o+=4){var s={x:n.allpts[o],y:n.allpts[o+1]},l={x:n.allpts[o+2],y:n.allpts[o+3]},c={x:n.allpts[o+4],y:n.allpts[o+5]};t.push({p0:s,p1:l,p2:c,startDist:0,length:0,segments:[]})}for(var d=r.rstyle.bezierPts,h=a.bezierProjPcts.length,o=0;o<t.length;o++){var p=t[o],f=t[o-1];f&&(p.startDist=f.startDist+f.length),e(p,p.p0,d[o*h],0,a.bezierProjPcts[0]);for(var v=0;h-1>v;v++)e(p,d[o*h+v],d[o*h+v+1],a.bezierProjPcts[v],a.bezierProjPcts[v+1]);e(p,d[o*h+h-1],p.p2,a.bezierProjPcts[h-1],1)}return u.cache=t},c=function(r){var a,o="source"===r;if(s[r]){var c=e.pstyle(r+"-text-offset").pfValue,d=function(e,t){var r=t.x-e.x,n=t.y-e.y;return Math.atan(n/r)},h=function(e,t,r,n){var a=i.bound(0,n-.001,1),o=i.bound(0,n+.001,1),s=i.qbezierPtAt(e,t,r,a),l=i.qbezierPtAt(e,t,r,o);return d(s,l)};switch(n.edgeType){case"self":case"compound":case"bezier":case"multibezier":for(var p,f=u(),v=0,g=0,y=0;y<f.length;y++){for(var m=f[o?y:f.length-1-y],b=0;b<m.segments.length;b++){var x=m.segments[o?b:m.segments.length-1-b],w=y===f.length-1&&b===m.segments.length-1;if(v=g,g+=x.length,g>=c||w){p={cp:m,segment:x};break}}if(p)break}var m=p.cp,x=p.segment,E=(c-v)/x.length,_=x.t1-x.t0,P=o?x.t0+_*E:x.t1-_*E;P=i.bound(0,P,1),t=i.qbezierPtAt(m.p0,m.p1,m.p2,P),a=h(m.p0,m.p1,m.p2,P,t);break;case"straight":case"segments":case"haystack":for(var S,k,T,D,C=0,M=n.allpts.length,y=0;M>y+3&&(o?(T={x:n.allpts[y],y:n.allpts[y+1]},D={x:n.allpts[y+2],y:n.allpts[y+3]}):(T={x:n.allpts[M-2-y],y:n.allpts[M-1-y]},D={x:n.allpts[M-4-y],y:n.allpts[M-3-y]}),S=i.dist(T,D),k=C,C+=S,!(C>=c));y+=2);var N=c-k,P=N/S;P=i.bound(0,P,1),t=i.lineAt(T,D,P),a=d(T,D)}l("labelX",r,t.x),l("labelY",r,t.y),l("labelAutoAngle",r,a)}};c("source"),c("target"),this.applyLabelDimensions(e)}},l.applyLabelDimensions=function(e){this.applyPrefixedLabelDimensions(e),e.isEdge()&&(this.applyPrefixedLabelDimensions(e,"source"),this.applyPrefixedLabelDimensions(e,"target"))},l.applyPrefixedLabelDimensions=function(e,t){var r=e._private,n=this.getLabelText(e,t),i=this.calculateLabelDimensions(e,n);o.setPrefixedProperty(r.rstyle,"labelWidth",t,i.width),o.setPrefixedProperty(r.rscratch,"labelWidth",t,i.width),o.setPrefixedProperty(r.rstyle,"labelHeight",t,i.height),o.setPrefixedProperty(r.rscratch,"labelHeight",t,i.height)},l.getLabelText=function(e,t){var r=e._private,n=t?t+"-":"",i=e.pstyle(n+"label").strValue,a=e.pstyle("text-transform").value,s=function(e,n){return n?(o.setPrefixedProperty(r.rscratch,e,t,n),n):o.getPrefixedProperty(r.rscratch,e,t)};if("none"==a||("uppercase"==a?i=i.toUpperCase():"lowercase"==a&&(i=i.toLowerCase())),"wrap"===e.pstyle("text-wrap").value){var l=s("labelKey");if(l&&s("labelWrapKey")===l)return s("labelWrapCachedText");for(var u=i.split("\n"),c=e.pstyle("text-max-width").pfValue,d=[],h=0;h<u.length;h++){var p=u[h],f=this.calculateLabelDimensions(e,p,"line="+p),v=f.width;if(v>c){for(var g=p.split(/\s+/),y="",m=0;m<g.length;m++){var b=g[m],x=0===y.length?b:y+" "+b,w=this.calculateLabelDimensions(e,x,"testLine="+x),E=w.width;c>=E?y+=b+" ":(d.push(y),y=b+" ")}y.match(/^\s+$/)||d.push(y)}else d.push(p)}s("labelWrapCachedLines",d),i=s("labelWrapCachedText",d.join("\n")),s("labelWrapKey",l)}return i},l.calculateLabelDimensions=function(e,t,r){var n=this,i=e._private.labelStyleKey+"$@$"+t;r&&(i+="$@$"+r);var a=n.labelDimCache||(n.labelDimCache={});if(a[i])return a[i];var o=1,s=e.pstyle("font-style").strValue,l=o*e.pstyle("font-size").pfValue+"px",u=e.pstyle("font-family").strValue,c=e.pstyle("font-weight").strValue,d=this.labelCalcDiv;d||(d=this.labelCalcDiv=document.createElement("div"),document.body.appendChild(d));var h=d.style;return h.fontFamily=u,h.fontStyle=s,h.fontSize=l,h.fontWeight=c,h.position="absolute",h.left="-9999px",h.top="-9999px",h.zIndex="-1",h.visibility="hidden",h.pointerEvents="none",h.padding="0",h.lineHeight="1","wrap"===e.pstyle("text-wrap").value?h.whiteSpace="pre":h.whiteSpace="normal",d.textContent=t,a[i]={width:Math.ceil(d.clientWidth/o),height:Math.ceil(d.clientHeight/o)},a[i]},l.recalculateLabelProjections=function(e,t){for(var r=0;r<e.length;r++)this.recalculateNodeLabelProjection(e[r]);for(var r=0;r<t.length;r++)this.recalculateEdgeLabelProjections(t[r])},l.recalculateEdgeProjections=function(e){this.findEdgeControlPoints(e)},l.findEdgeControlPoints=function(e){if(e&&0!==e.length){for(var t,r=this,n=r.cy,o=n.hasCompoundNodes(),s={},l=[],u=[],c=0;c<e.length;c++){var d=e[c],h=d._private,p=h.data,f=d.pstyle("curve-style").value,v="unbundled-bezier"===f||"segments"===f;if("none"!==d.pstyle("display").value)if("haystack"!==f){var g=p.source,y=p.target;t=g>y?y+"$-$"+g:g+"$-$"+y,v&&(t="unbundled$-$"+p.id),null==s[t]&&(s[t]=[],l.push(t)),s[t].push(d),v&&(s[t].hasUnbundled=!0)}else u.push(d)}for(var m,b,x,w,E,_,P,S,k,T,D,C,M,N,B=0;B<l.length;B++){t=l[B];var z=s[t];if(z.sort(function(e,t){return e.poolIndex()-t.poolIndex()}),m=z[0]._private.source,b=z[0]._private.target,!z.hasUnbundled&&m.id()>b.id()){var I=m;m=b,b=I}if(x=m._private,w=b._private,E=x.position,_=w.position,P=m.outerWidth(),S=m.outerHeight(),k=b.outerWidth(),T=b.outerHeight(),D=r.nodeShapes[this.getNodeShape(m)],C=r.nodeShapes[this.getNodeShape(b)],N=!1,z.length>1&&m!==b||z.hasUnbundled){var L=D.intersectLine(E.x,E.y,P,S,_.x,_.y,0),O=C.intersectLine(_.x,_.y,k,T,E.x,E.y,0),A={x1:L[0],x2:O[0],y1:L[1],y2:O[1]},R={x1:E.x,x2:_.x,y1:E.y,y2:_.y},q=O[1]-L[1],V=O[0]-L[0],F=Math.sqrt(V*V+q*q),j={x:V,y:q},X={x:j.x/F,y:j.y/F};M={x:-X.y,y:X.x},C.checkPoint(L[0],L[1],0,k,T,_.x,_.y)&&D.checkPoint(O[0],O[1],0,P,S,E.x,E.y)&&(M={},N=!0)}for(var d,Y,W,c=0;c<z.length;c++){d=z[c],Y=d._private,W=Y.rscratch;var $=W.lastEdgeIndex,H=c,U=W.lastNumEdges,Z=z.length,f=d.pstyle("curve-style").value,G=d.pstyle("control-point-distances"),Q=d.pstyle("control-point-weights"),K=G&&Q?Math.min(G.value.length,Q.value.length):1,J=d.pstyle("control-point-step-size").pfValue,ee=G?G.pfValue[0]:void 0,te=Q.value[0],v="unbundled-bezier"===f||"segments"===f,re=W.lastSrcCtlPtX,ne=E.x,ie=W.lastSrcCtlPtY,ae=E.y,oe=W.lastSrcCtlPtW,se=m.outerWidth(),le=W.lastSrcCtlPtH,ue=m.outerHeight(),ce=W.lastTgtCtlPtX,de=_.x,he=W.lastTgtCtlPtY,pe=_.y,fe=W.lastTgtCtlPtW,ve=b.outerWidth(),ge=W.lastTgtCtlPtH,ye=b.outerHeight(),me=W.lastW,be=d.pstyle("control-point-step-size").pfValue,xe=d.pstyle("edge-distances").value;if(N?W.badBezier=!0:W.badBezier=!1,re!==ne||ie!==ae||oe!==se||le!==ue||ce!==de||he!==pe||fe!==ve||ge!==ye||me!==be||!($===H&&U===Z||v)){if(W.lastSrcCtlPtX=ne,W.lastSrcCtlPtY=ae,W.lastSrcCtlPtW=se,W.lastSrcCtlPtH=ue,W.lastTgtCtlPtX=de,W.lastTgtCtlPtY=pe,W.lastTgtCtlPtW=ve,W.lastTgtCtlPtH=ye,W.lastEdgeIndex=H,W.lastNumEdges=Z,W.lastWidth=be,m===b){W.edgeType="self";var we=c,Ee=J;v&&(we=0,Ee=ee),W.ctrlpts=[E.x,E.y-(1+Math.pow(S,1.12)/100)*Ee*(we/3+1),E.x-(1+Math.pow(P,1.12)/100)*Ee*(we/3+1),E.y]}else if(o&&(m.isParent()||m.isChild()||b.isParent()||b.isChild())&&(m.parents().anySame(b)||b.parents().anySame(m))){W.edgeType="compound",W.badBezier=!1;var we=c,Ee=J;v&&(we=0,Ee=ee);var _e=50,Pe={x:E.x-P/2,y:E.y-S/2},Se={x:_.x-k/2,y:_.y-T/2},ke={x:Math.min(Pe.x,Se.x),y:Math.min(Pe.y,Se.y)},Te=.5,De=Math.max(Te,Math.log(.01*P)),Ce=Math.max(Te,Math.log(.01*k));W.ctrlpts=[ke.x,ke.y-(1+Math.pow(_e,1.12)/100)*Ee*(we/3+1)*De,ke.x-(1+Math.pow(_e,1.12)/100)*Ee*(we/3+1)*Ce,ke.y]}else if("segments"===f){W.edgeType="segments",W.segpts=[];for(var Me=d.pstyle("segment-weights").pfValue,Ne=d.pstyle("segment-distances").pfValue,Be=Math.min(Me.length,Ne.length),ze=0;Be>ze;ze++){var Ie=Me[ze],Le=Ne[ze],Oe=1-Ie,Ae=Ie,Re="node-position"===xe?R:A,qe={x:Re.x1*Oe+Re.x2*Ae,y:Re.y1*Oe+Re.y2*Ae};W.segpts.push(qe.x+M.x*Le,qe.y+M.y*Le)}}else if(z.length%2!==1||c!==Math.floor(z.length/2)||v){var Ve=v;W.edgeType=Ve?"multibezier":"bezier",W.ctrlpts=[];for(var Fe=0;K>Fe;Fe++){var je,Xe=(.5-z.length/2+c)*J,Ye=i.signum(Xe);Ve&&(ee=G?G.pfValue[Fe]:J,te=Q.value[Fe]),je=v?ee:void 0!==ee?Ye*ee:void 0;var We=void 0!==je?je:Xe,Oe=1-te,Ae=te,Re="node-position"===xe?R:A,qe={x:Re.x1*Oe+Re.x2*Ae,y:Re.y1*Oe+Re.y2*Ae};W.ctrlpts.push(qe.x+M.x*We,qe.y+M.y*We)}}else W.edgeType="straight";this.findEndpoints(d);var $e=!a.number(W.startX)||!a.number(W.startY),He=!a.number(W.arrowStartX)||!a.number(W.arrowStartY),Ue=!a.number(W.endX)||!a.number(W.endY),Ze=!a.number(W.arrowEndX)||!a.number(W.arrowEndY),Ge=3,Qe=this.getArrowWidth(d.pstyle("width").pfValue)*this.arrowShapeWidth,Ke=Ge*Qe;if("bezier"===W.edgeType){var Je=i.dist({x:W.ctrlpts[0],y:W.ctrlpts[1]},{x:W.startX,y:W.startY}),et=Ke>Je,tt=i.dist({x:W.ctrlpts[0],y:W.ctrlpts[1]},{x:W.endX,y:W.endY}),rt=Ke>tt,nt=!1;if($e||He||et){nt=!0;var it={x:W.ctrlpts[0]-E.x,y:W.ctrlpts[1]-E.y},at=Math.sqrt(it.x*it.x+it.y*it.y),ot={x:it.x/at,y:it.y/at},st=Math.max(P,S),lt={x:W.ctrlpts[0]+2*ot.x*st,y:W.ctrlpts[1]+2*ot.y*st},ut=D.intersectLine(E.x,E.y,P,S,lt.x,lt.y,0);et?(W.ctrlpts[0]=W.ctrlpts[0]+ot.x*(Ke-Je),W.ctrlpts[1]=W.ctrlpts[1]+ot.y*(Ke-Je)):(W.ctrlpts[0]=ut[0]+ot.x*Ke,W.ctrlpts[1]=ut[1]+ot.y*Ke)}if(Ue||Ze||rt){nt=!0;var it={x:W.ctrlpts[0]-_.x,y:W.ctrlpts[1]-_.y},at=Math.sqrt(it.x*it.x+it.y*it.y),ot={x:it.x/at,y:it.y/at},st=Math.max(P,S),lt={x:W.ctrlpts[0]+2*ot.x*st,y:W.ctrlpts[1]+2*ot.y*st},ct=C.intersectLine(_.x,_.y,k,T,lt.x,lt.y,0);rt?(W.ctrlpts[0]=W.ctrlpts[0]+ot.x*(Ke-tt),W.ctrlpts[1]=W.ctrlpts[1]+ot.y*(Ke-tt)):(W.ctrlpts[0]=ct[0]+ot.x*Ke,W.ctrlpts[1]=ct[1]+ot.y*Ke)}nt&&this.findEndpoints(d)}if("multibezier"===W.edgeType||"bezier"===W.edgeType||"self"===W.edgeType||"compound"===W.edgeType){W.allpts=[],W.allpts.push(W.startX,W.startY);for(var Fe=0;Fe+1<W.ctrlpts.length;Fe+=2)W.allpts.push(W.ctrlpts[Fe],W.ctrlpts[Fe+1]),Fe+3<W.ctrlpts.length&&W.allpts.push((W.ctrlpts[Fe]+W.ctrlpts[Fe+2])/2,(W.ctrlpts[Fe+1]+W.ctrlpts[Fe+3])/2);W.allpts.push(W.endX,W.endY);var dt,ht;W.ctrlpts.length/2%2===0?(dt=W.allpts.length/2-1,W.midX=W.allpts[dt],W.midY=W.allpts[dt+1]):(dt=W.allpts.length/2-3,ht=.5,W.midX=i.qbezierAt(W.allpts[dt],W.allpts[dt+2],W.allpts[dt+4],ht),W.midY=i.qbezierAt(W.allpts[dt+1],W.allpts[dt+3],W.allpts[dt+5],ht))}else if("straight"===W.edgeType)W.allpts=[W.startX,W.startY,W.endX,W.endY],W.midX=(W.startX+W.endX+W.arrowStartX+W.arrowEndX)/4,W.midY=(W.startY+W.endY+W.arrowStartY+W.arrowEndY)/4;else if("segments"===W.edgeType)if(W.allpts=[],W.allpts.push(W.startX,W.startY),W.allpts.push.apply(W.allpts,W.segpts),W.allpts.push(W.endX,W.endY),W.segpts.length%4===0){var pt=W.segpts.length/2,ft=pt-2;W.midX=(W.segpts[ft]+W.segpts[pt])/2,W.midY=(W.segpts[ft+1]+W.segpts[pt+1])/2}else{var ft=W.segpts.length/2-1;W.midX=W.segpts[ft],W.midY=W.segpts[ft+1]}this.projectLines(d),this.calculateArrowAngles(d),this.recalculateEdgeLabelProjections(d),this.calculateLabelAngles(d)}}}for(var c=0;c<u.length;c++){var d=u[c],h=d._private,vt=h.rscratch,W=vt;if(!vt.haystack){var gt=2*Math.random()*Math.PI;vt.source={x:Math.cos(gt),y:Math.sin(gt)};var gt=2*Math.random()*Math.PI;vt.target={x:Math.cos(gt),y:Math.sin(gt)}}var m=h.source,b=h.target,E=m._private.position,_=b._private.position,P=m.width(),k=b.width(),S=m.height(),T=b.height(),st=d.pstyle("haystack-radius").value,yt=st/2;W.haystackPts=W.allpts=[W.source.x*P*yt+E.x,W.source.y*S*yt+E.y,W.target.x*k*yt+_.x,W.target.y*T*yt+_.y],W.midX=(W.allpts[0]+W.allpts[2])/2,W.midY=(W.allpts[1]+W.allpts[3])/2,vt.edgeType="haystack",vt.haystack=!0,this.projectLines(d),this.calculateArrowAngles(d),this.recalculateEdgeLabelProjections(d),this.calculateLabelAngles(d)}return s}};var u=function(e,t){return Math.atan2(t,e)-Math.PI/2};l.calculateArrowAngles=function(e){var t,r,n,a,o,s,l=e._private.rscratch,c="haystack"===l.edgeType,d="multibezier"===l.edgeType,h="segments"===l.edgeType,p="compound"===l.edgeType,f="self"===l.edgeType,v=e._private.source._private.position,g=e._private.target._private.position;c?(n=l.haystackPts[0],a=l.haystackPts[1],o=l.haystackPts[2],s=l.haystackPts[3]):(n=l.arrowStartX,a=l.arrowStartY,o=l.arrowEndX,s=l.arrowEndY),t=v.x-n,r=v.y-a,l.srcArrowAngle=u(t,r);var y=l.midX,m=l.midY;if(c&&(y=(n+o)/2,m=(a+s)/2),t=o-n,r=s-a,f)t=-1,r=1;else if(h){var b=l.allpts;if(b.length/2%2===0){var x=b.length/2,w=x-2;t=b[x]-b[w],r=b[x+1]-b[w+1]}else{var x=b.length/2-1,w=x-2,E=x+2;t=b[x]-b[w],r=b[x+1]-b[w+1]}}else if(d||p){var _,P,S,k,b=l.allpts,T=l.ctrlpts;if(T.length/2%2===0){var D=b.length/2-1,C=D+2,M=C+2;_=i.qbezierAt(b[D],b[C],b[M],0),P=i.qbezierAt(b[D+1],b[C+1],b[M+1],0),S=i.qbezierAt(b[D],b[C],b[M],1e-4),k=i.qbezierAt(b[D+1],b[C+1],b[M+1],1e-4)}else{var C=b.length/2-1,D=C-2,M=C+2;_=i.qbezierAt(b[D],b[C],b[M],.4999),P=i.qbezierAt(b[D+1],b[C+1],b[M+1],.4999),S=i.qbezierAt(b[D],b[C],b[M],.5),k=i.qbezierAt(b[D+1],b[C+1],b[M+1],.5)}t=S-_,r=k-P}if(l.midtgtArrowAngle=u(t,r),l.midDispX=t,l.midDispY=r,t*=-1,r*=-1,h){var b=l.allpts;if(b.length/2%2===0);else{var x=b.length/2-1,E=x+2;t=-(b[E]-b[x]),r=-(b[E+1]-b[x+1])}}l.midsrcArrowAngle=u(t,r),t=g.x-o,r=g.y-s,l.tgtArrowAngle=u(t,r)},l.calculateLabelAngles=function(e){var t=e._private,r=t.rscratch,n=e.isEdge(),i=e.pstyle("text-rotation"),a=i.strValue;"none"===a?r.labelAngle=r.sourceLabelAngle=r.targetLabelAngle=0:n&&"autorotate"===a?(r.labelAngle=Math.atan(r.midDispY/r.midDispX),r.sourceLabelAngle=r.sourceLabelAutoAngle,r.targetLabelAngle=r.targetLabelAutoAngle):"autorotate"===a?r.labelAngle=r.sourceLabelAngle=r.targetLabelAngle=0:r.labelAngle=r.sourceLabelAngle=r.targetLabelAngle=i.pfValue},l.findEndpoints=function(e){var t,r,n,o=this,s=e.source()[0],l=e.target()[0],u=s._private,c=l._private,d=u.position,h=c.position,p=e.pstyle("target-arrow-shape").value,f=e.pstyle("source-arrow-shape").value,v=e._private.rscratch,g=v.edgeType,y="bezier"===g||"multibezier"===g||"self"===g||"compound"===g,m="bezier"!==g,b="straight"===g||"segments"===g,x="segments"===g,w=y||m||b;if(y){var E=[v.ctrlpts[0],v.ctrlpts[1]],_=m?[v.ctrlpts[v.ctrlpts.length-2],v.ctrlpts[v.ctrlpts.length-1]]:E;r=_,n=E}else if(b){var P=x?v.segpts.slice(0,2):[h.x,h.y],S=x?v.segpts.slice(v.segpts.length-2):[d.x,d.y];r=S,n=P}t=o.nodeShapes[this.getNodeShape(l)].intersectLine(h.x,h.y,l.outerWidth(),l.outerHeight(),r[0],r[1],0);var k=i.shortenIntersection(t,r,o.arrowShapes[p].spacing(e)),T=i.shortenIntersection(t,r,o.arrowShapes[p].gap(e));v.endX=T[0],v.endY=T[1],v.arrowEndX=k[0],v.arrowEndY=k[1],t=o.nodeShapes[this.getNodeShape(s)].intersectLine(d.x,d.y,s.outerWidth(),s.outerHeight(),n[0],n[1],0);var D=i.shortenIntersection(t,n,o.arrowShapes[f].spacing(e)),C=i.shortenIntersection(t,n,o.arrowShapes[f].gap(e));v.startX=C[0],v.startY=C[1],v.arrowStartX=D[0],v.arrowStartY=D[1],w&&(a.number(v.startX)&&a.number(v.startY)&&a.number(v.endX)&&a.number(v.endY)?v.badLine=!1:v.badLine=!0)},l.getArrowWidth=l.getArrowHeight=function(e){var t=this.arrowWidthCache=this.arrowWidthCache||{},r=t[e];return r?r:(r=Math.max(Math.pow(13.37*e,.9),29),t[e]=r,r)},t.exports=l},{"../../../collection/zsort":32,"../../../is":83,"../../../math":85,"../../../util":100}],59:[function(e,t,r){"use strict";var n={};n.getCachedImage=function(e,t){var r=this,n=r.imageCache=r.imageCache||{};if(n[e]&&n[e].image)return n[e].image;var i=n[e]=n[e]||{},a=i.image=new Image;return a.addEventListener("load",t),a.crossOrigin="Anonymous",a.src=e,a},t.exports=n},{}],60:[function(e,t,r){"use strict";var n=e("../../../is"),i=e("../../../util"),a=function(e){this.init(e)},o=a,s=o.prototype;s.clientFunctions=["redrawHint","render","renderTo","matchCanvasSize","nodeShapeImpl","arrowShapeImpl"],s.init=function(e){var t=this;t.options=e,t.cy=e.cy,t.container=e.cy.container(),t.selection=[void 0,void 0,void 0,void 0,0],t.bezierProjPcts=[.05,.225,.4,.5,.6,.775,.95],t.hoverData={down:null,last:null,downTime:null,triggerMode:null,dragging:!1,initialPan:[null,null],capture:!1},t.dragData={possibleDragElements:[]},t.touchData={start:null,capture:!1,startPosition:[null,null,null,null,null,null],singleTouchStartTime:null,singleTouchMoved:!0,now:[null,null,null,null,null,null],earlier:[null,null,null,null,null,null]},t.redraws=0,t.showFps=e.showFps,t.hideEdgesOnViewport=e.hideEdgesOnViewport,t.hideLabelsOnViewport=e.hideLabelsOnViewport,t.textureOnViewport=e.textureOnViewport,t.wheelSensitivity=e.wheelSensitivity,t.motionBlurEnabled=e.motionBlur,t.forcedPixelRatio=e.pixelRatio,t.motionBlur=e.motionBlur,t.motionBlurOpacity=e.motionBlurOpacity,t.motionBlurTransparency=1-t.motionBlurOpacity,t.motionBlurPxRatio=1,t.mbPxRBlurry=1,t.minMbLowQualFrames=4,t.fullQualityMb=!1,t.clearedForMotionBlur=[],t.desktopTapThreshold=e.desktopTapThreshold,t.desktopTapThreshold2=e.desktopTapThreshold*e.desktopTapThreshold,t.touchTapThreshold=e.touchTapThreshold,t.touchTapThreshold2=e.touchTapThreshold*e.touchTapThreshold,t.tapholdDuration=500,t.bindings=[],t.beforeRenderCallbacks=[],t.beforeRenderPriorities={animations:400,eleCalcs:300,eleTxrDeq:200,lyrTxrDeq:100},t.registerNodeShapes(),t.registerArrowShapes(),t.registerCalculationListeners(),t.load()},s.notify=function(e){var t,r=this;t=n.array(e.type)?e.type:[e.type];for(var i={},a=0;a<t.length;a++){var o=t[a];i[o]=!0}return i.destroy?void r.destroy():((i.add||i.remove||i.load||i.style)&&r.updateCachedZSortedEles(),i.viewport&&r.redrawHint("select",!0),(i.load||i.resize)&&(r.invalidateContainerClientCoordsCache(),r.matchCanvasSize(r.container)),r.redrawHint("eles",!0),r.redrawHint("drag",!0),this.startRenderLoop(),void this.redraw())},s.destroy=function(){var e=this;e.destroyed=!0,e.cy.stopAnimationLoop();for(var t=0;t<e.bindings.length;t++){var r=e.bindings[t],n=r,i=n.target;(i.off||i.removeEventListener).apply(i,n.args)}if(e.bindings=[],e.beforeRenderCallbacks=[],e.onUpdateEleCalcsFns=[],e.removeObserver&&e.removeObserver.disconnect(),e.styleObserver&&e.styleObserver.disconnect(),e.labelCalcDiv)try{document.body.removeChild(e.labelCalcDiv)}catch(a){}},[e("./arrow-shapes"),e("./coord-ele-math"),e("./images"),e("./load-listeners"),e("./node-shapes"),e("./redraw")].forEach(function(e){i.extend(s,e)}),t.exports=o},{"../../../is":83,"../../../util":100,"./arrow-shapes":57,"./coord-ele-math":58,"./images":59,"./load-listeners":61,"./node-shapes":62,"./redraw":63}],61:[function(e,t,r){"use strict";var n=e("../../../is"),i=e("../../../util"),a=e("../../../math"),o=e("../../../event"),s={};s.registerBinding=function(e,t,r,n){var i=Array.prototype.slice.apply(arguments,[1]),a=this.binder(e);return a.on.apply(a,i)},s.binder=function(e){var t=this,r=function(){var r=arguments;return t.bindings.push({target:e,args:r}),(e.addEventListener||e.on).apply(e,r),this};return{on:r,addEventListener:r,addListener:r,bind:r}},s.nodeIsDraggable=function(e){return e&&e.isNode()&&!e.locked()&&e.grabbable()},s.nodeIsGrabbable=function(e){return this.nodeIsDraggable(e)&&0!==e.pstyle("opacity").value&&"visible"===e.pstyle("visibility").value&&"element"===e.pstyle("display").value},s.load=function(){var e=this,t=function(t,r,n,a){null==t&&(t=e.cy);for(var s=0;s<r.length;s++){var l=r[s],u=new o(n,i.extend({type:l},a));t.trigger(u)}},r=function(e){return e.shiftKey||e.metaKey||e.ctrlKey},s=function(t,r){var n=!0;if(e.cy.hasCompoundNodes()&&t&&t.isEdge())for(var i=0;r&&i<r.length;i++){var t=r[i];if(t.isNode()&&t.isParent()){n=!1;break}}else n=!0;return n},l=function(t){var r;if(t.addToList&&e.cy.hasCompoundNodes()){if(!t.addToList.hasId){t.addToList.hasId={};for(var n=0;n<t.addToList.length;n++){var i=t.addToList[n];t.addToList.hasId[i.id()]=!0}}r=t.addToList.hasId}return r||{}},u=function(e){e[0]._private.grabbed=!0},c=function(e){e[0]._private.grabbed=!1},d=function(e){e[0]._private.rscratch.inDragLayer=!0},h=function(e){e[0]._private.rscratch.inDragLayer=!1},p=function(e){e[0]._private.rscratch.isGrabTarget=!0},f=function(e){e[0]._private.rscratch.isGrabTarget=!1},v=function(e,t){var r=l(t);r[e.id()]||(t.addToList.push(e),r[e.id()]=!0,u(e))},g=function(e,t){if(e.cy().hasCompoundNodes()&&(null!=t.inDragLayer||null!=t.addToList)){var r=e.descendants();t.inDragLayer&&(r.forEach(d),r.connectedEdges().forEach(d)),t.addToList&&r.forEach(function(e){v(e,t)})}},y=function(t,r){r=r||{};var n=t.cy().hasCompoundNodes();r.inDragLayer&&(t.forEach(d),t.neighborhood().stdFilter(function(e){return!n||e.isEdge()}).forEach(d)),r.addToList&&t.forEach(function(e){v(e,r)}),g(t,r),x(t,{inDragLayer:r.inDragLayer}),e.updateCachedGrabbedEles()},m=y,b=function(t){t&&(t.hasId={},e.getCachedZSortedEles().forEach(function(e){c(e),h(e),f(e)}),e.updateCachedGrabbedEles())},x=function(e,t){if((null!=t.inDragLayer||null!=t.addToList)&&e.cy().hasCompoundNodes()){var r=e.ancestors().orphans();if(!r.same(e)){var n=r.descendants().spawnSelf().merge(r).unmerge(e).unmerge(e.descendants()),i=n.connectedEdges();t.inDragLayer&&(i.forEach(d),n.forEach(d)),t.addToList&&n.forEach(function(e){v(e,t)})}}},w="undefined"!=typeof MutationObserver;w?(e.removeObserver=new MutationObserver(function(t){for(var r=0;r<t.length;r++){var n=t[r],i=n.removedNodes;if(i)for(var a=0;a<i.length;a++){var o=i[a];if(o===e.container){e.destroy();break}}}}),e.container.parentNode&&e.removeObserver.observe(e.container.parentNode,{childList:!0})):e.registerBinding(e.container,"DOMNodeRemoved",function(t){e.destroy()});var E=i.debounce(function(){e.cy.invalidateSize(),e.invalidateContainerClientCoordsCache(),e.matchCanvasSize(e.container),e.redrawHint("eles",!0),e.redrawHint("drag",!0),e.redraw()},100);w&&(e.styleObserver=new MutationObserver(E),e.styleObserver.observe(e.container,{attributes:!0})),e.registerBinding(window,"resize",E);for(var _=function(t){e.registerBinding(t,"scroll",function(t){e.invalidateContainerClientCoordsCache()})},P=e.cy.container();_(P),P.parentNode;)P=P.parentNode;e.registerBinding(e.container,"contextmenu",function(e){e.preventDefault()});var S=function(){return 0!==e.selection[4]};e.registerBinding(e.container,"mousedown",function(r){r.preventDefault(),e.hoverData.capture=!0,e.hoverData.which=r.which;var n=e.cy,i=[r.clientX,r.clientY],a=e.projectIntoViewport(i[0],i[1]),s=e.selection,l=e.findNearestElements(a[0],a[1],!0,!1),u=l[0],c=e.dragData.possibleDragElements;e.hoverData.mdownPos=a,e.hoverData.mdownGPos=i;var d=function(){e.hoverData.tapholdCancelled=!1,clearTimeout(e.hoverData.tapholdTimeout),e.hoverData.tapholdTimeout=setTimeout(function(){if(!e.hoverData.tapholdCancelled){var t=e.hoverData.down;t?t.trigger(new o(r,{type:"taphold",cyPosition:{x:a[0],y:a[1]}})):n.trigger(new o(r,{type:"taphold",cyPosition:{x:a[0],y:a[1]}}))}},e.tapholdDuration)};if(3==r.which){e.hoverData.cxtStarted=!0;var h=new o(r,{type:"cxttapstart",cyPosition:{x:a[0],y:a[1]}});u?(u.activate(),u.trigger(h),e.hoverData.down=u):n.trigger(h),e.hoverData.downTime=(new Date).getTime(),e.hoverData.cxtDragged=!1}else if(1==r.which){if(u&&u.activate(),null!=u&&e.nodeIsGrabbable(u)){var f=new o(r,{type:"grab",cyPosition:{x:a[0],y:a[1]}});if(p(u),u.selected()){if(u.selected()){c=e.dragData.possibleDragElements=[];var v=n.$(function(){return this.isNode()&&this.selected()&&e.nodeIsGrabbable(this)});y(v,{addToList:c}),u.trigger(f)}}else c=e.dragData.possibleDragElements=[],m(u,{addToList:c}),u.trigger(f);e.redrawHint("eles",!0),e.redrawHint("drag",!0)}e.hoverData.down=u,e.hoverData.downs=l,e.hoverData.downTime=(new Date).getTime(),t(u,["mousedown","tapstart","vmousedown"],r,{cyPosition:{x:a[0],y:a[1]}}),null==u?(s[4]=1,e.data.bgActivePosistion={x:a[0],y:a[1]},e.redrawHint("select",!0),e.redraw()):u.isEdge()&&(s[4]=1),d()}s[0]=s[2]=a[0],s[1]=s[3]=a[1]},!1),e.registerBinding(window,"mousemove",function(i){var l=!1,u=e.hoverData.capture;if(!u){var c=e.findContainerClientCoords();if(!(i.clientX>c[0]&&i.clientX<c[0]+e.canvasWidth&&i.clientY>c[1]&&i.clientY<c[1]+e.canvasHeight))return;for(var d=e.container,h=i.target,p=h.parentNode,f=!1;p;){if(p===d){f=!0;break}p=p.parentNode}if(!f)return}var v=e.cy,g=v.zoom(),m=[i.clientX,i.clientY],b=e.projectIntoViewport(m[0],m[1]),x=e.hoverData.mdownPos,w=e.hoverData.mdownGPos,E=e.selection,_=null;e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.selecting||(_=e.findNearestElement(b[0],b[1],!0,!1));var P,S=e.hoverData.last,k=e.hoverData.down,T=[b[0]-E[2],b[1]-E[3]],D=e.dragData.possibleDragElements;if(w){var C=m[0]-w[0],M=C*C,N=m[1]-w[1],B=N*N,z=M+B;P=z>=e.desktopTapThreshold2}var I=r(i);P&&(e.hoverData.tapholdCancelled=!0);var L=function(){var t=e.hoverData.dragDelta=e.hoverData.dragDelta||[];0===t.length?(t.push(T[0]),t.push(T[1])):(t[0]+=T[0],t[1]+=T[1])};if(l=!0,t(_,["mousemove","vmousemove","tapdrag"],i,{cyPosition:{x:b[0],y:b[1]}}),3===e.hoverData.which){if(P){var O=new o(i,{type:"cxtdrag",cyPosition:{x:b[0],y:b[1]}});k?k.trigger(O):v.trigger(O),e.hoverData.cxtDragged=!0,e.hoverData.cxtOver&&_===e.hoverData.cxtOver||(e.hoverData.cxtOver&&e.hoverData.cxtOver.trigger(new o(i,{type:"cxtdragout",cyPosition:{x:b[0],y:b[1]}})),e.hoverData.cxtOver=_,_&&_.trigger(new o(i,{type:"cxtdragover",cyPosition:{x:b[0],y:b[1]}})))}}else if(e.hoverData.dragging){if(l=!0,v.panningEnabled()&&v.userPanningEnabled()){var A;if(e.hoverData.justStartedPan){var R=e.hoverData.mdownPos;A={x:(b[0]-R[0])*g,y:(b[1]-R[1])*g},e.hoverData.justStartedPan=!1}else A={x:T[0]*g,y:T[1]*g};v.panBy(A),e.hoverData.dragged=!0}b=e.projectIntoViewport(i.clientX,i.clientY)}else if(1!=E[4]||null!=k&&!k.isEdge()){if(k&&k.isEdge()&&k.active()&&k.unactivate(),k&&k.grabbed()||_==S||(S&&t(S,["mouseout","tapdragout"],i,{cyPosition:{x:b[0],y:b[1]}}),_&&t(_,["mouseover","tapdragover"],i,{cyPosition:{x:b[0],y:b[1]}}),e.hoverData.last=_),k&&e.nodeIsDraggable(k))if(P){var q=!e.dragData.didDrag;q&&e.redrawHint("eles",!0),e.dragData.didDrag=!0;var V=[];e.hoverData.draggingEles||y(v.collection(D),{inDragLayer:!0});for(var F=0;F<D.length;F++){var j=D[F];if(e.nodeIsDraggable(j)&&j.grabbed()){var X=j._private.position;if(V.push(j),n.number(T[0])&&n.number(T[1])){var Y=!j.isParent();
-if(Y&&(X.x+=T[0],X.y+=T[1]),q){var W=e.hoverData.dragDelta;Y&&W&&n.number(W[0])&&n.number(W[1])&&(X.x+=W[0],X.y+=W[1])}}}}e.hoverData.draggingEles=!0;var $=v.collection(V);$.updateCompoundBounds(),$.trigger("position drag"),e.redrawHint("drag",!0),e.redraw()}else L();l=!0}else if(P){if(e.hoverData.dragging||!v.boxSelectionEnabled()||!I&&v.panningEnabled()&&v.userPanningEnabled()){if(!e.hoverData.selecting&&v.panningEnabled()&&v.userPanningEnabled()){var H=s(k,e.hoverData.downs);H&&(e.hoverData.dragging=!0,e.hoverData.justStartedPan=!0,E[4]=0,e.data.bgActivePosistion=a.array2point(x),e.redrawHint("select",!0),e.redraw())}}else e.data.bgActivePosistion=void 0,e.hoverData.selecting||v.trigger("boxstart"),e.hoverData.selecting=!0,e.redrawHint("select",!0),e.redraw();k&&k.isEdge()&&k.active()&&k.unactivate()}return E[2]=b[0],E[3]=b[1],l?(i.stopPropagation&&i.stopPropagation(),i.preventDefault&&i.preventDefault(),!1):void 0},!1),e.registerBinding(window,"mouseup",function(n){var i=e.hoverData.capture;if(i){e.hoverData.capture=!1;var a=e.cy,s=e.projectIntoViewport(n.clientX,n.clientY),l=e.selection,u=e.findNearestElement(s[0],s[1],!0,!1),c=e.dragData.possibleDragElements,d=e.hoverData.down,h=r(n);if(e.data.bgActivePosistion&&(e.redrawHint("select",!0),e.redraw()),e.hoverData.tapholdCancelled=!0,e.data.bgActivePosistion=void 0,d&&d.unactivate(),3===e.hoverData.which){var p=new o(n,{type:"cxttapend",cyPosition:{x:s[0],y:s[1]}});if(d?d.trigger(p):a.trigger(p),!e.hoverData.cxtDragged){var f=new o(n,{type:"cxttap",cyPosition:{x:s[0],y:s[1]}});d?d.trigger(f):a.trigger(f)}e.hoverData.cxtDragged=!1,e.hoverData.which=null}else if(1===e.hoverData.which){if(null!=d||e.dragData.didDrag||e.hoverData.selecting||e.hoverData.dragged||r(n)||(a.$(function(){return this.selected()}).unselect(),c.length>0&&e.redrawHint("eles",!0),e.dragData.possibleDragElements=c=[]),t(u,["mouseup","tapend","vmouseup"],n,{cyPosition:{x:s[0],y:s[1]}}),e.dragData.didDrag||e.hoverData.dragged||e.hoverData.selecting||t(d,["click","tap","vclick"],n,{cyPosition:{x:s[0],y:s[1]}}),u!=d||e.dragData.didDrag||e.hoverData.selecting||null!=u&&u._private.selectable&&(e.hoverData.dragging||("additive"===a.selectionType()||h?u.selected()?u.unselect():u.select():h||(a.$(":selected").unmerge(u).unselect(),u.select())),e.redrawHint("eles",!0)),e.hoverData.selecting){var v=a.collection(e.getAllInBox(l[0],l[1],l[2],l[3]));e.redrawHint("select",!0),v.length>0&&e.redrawHint("eles",!0),a.trigger("boxend");var g=function(e){return e.selectable()&&!e.selected()};"additive"===a.selectionType()?v.trigger("box").stdFilter(g).select().trigger("boxselect"):(h||a.$(":selected").unmerge(v).unselect(),v.trigger("box").stdFilter(g).select().trigger("boxselect")),e.redraw()}if(e.hoverData.dragging&&(e.hoverData.dragging=!1,e.redrawHint("select",!0),e.redrawHint("eles",!0),e.redraw()),!l[4]){e.redrawHint("drag",!0),e.redrawHint("eles",!0);var y=d&&d.grabbed();b(c),y&&d.trigger("free")}}l[4]=0,e.hoverData.down=null,e.hoverData.cxtStarted=!1,e.hoverData.draggingEles=!1,e.hoverData.selecting=!1,e.dragData.didDrag=!1,e.hoverData.dragged=!1,e.hoverData.dragDelta=[],e.hoverData.mdownPos=null,e.hoverData.mdownGPos=null}},!1);var k=function(t){if(!e.scrollingPage){var r=e.cy,n=e.projectIntoViewport(t.clientX,t.clientY),i=[n[0]*r.zoom()+r.pan().x,n[1]*r.zoom()+r.pan().y];if(e.hoverData.draggingEles||e.hoverData.dragging||e.hoverData.cxtStarted||S())return void t.preventDefault();if(r.panningEnabled()&&r.userPanningEnabled()&&r.zoomingEnabled()&&r.userZoomingEnabled()){t.preventDefault(),e.data.wheelZooming=!0,clearTimeout(e.data.wheelTimeout),e.data.wheelTimeout=setTimeout(function(){e.data.wheelZooming=!1,e.redrawHint("eles",!0),e.redraw()},150);var a=t.deltaY/-250||t.wheelDeltaY/1e3||t.wheelDelta/1e3;a*=e.wheelSensitivity;var o=1===t.deltaMode;o&&(a*=33),r.zoom({level:r.zoom()*Math.pow(10,a),renderedPosition:{x:i[0],y:i[1]}})}}};e.registerBinding(e.container,"wheel",k,!0),e.registerBinding(window,"scroll",function(t){e.scrollingPage=!0,clearTimeout(e.scrollingPageTimeout),e.scrollingPageTimeout=setTimeout(function(){e.scrollingPage=!1},250)},!0),e.registerBinding(e.container,"mouseout",function(t){var r=e.projectIntoViewport(t.clientX,t.clientY);e.cy.trigger(new o(t,{type:"mouseout",cyPosition:{x:r[0],y:r[1]}}))},!1),e.registerBinding(e.container,"mouseover",function(t){var r=e.projectIntoViewport(t.clientX,t.clientY);e.cy.trigger(new o(t,{type:"mouseover",cyPosition:{x:r[0],y:r[1]}}))},!1);var T,D,C,M,N,B,z,I,L,O,A,R,q,V,F=function(e,t,r,n){return Math.sqrt((r-e)*(r-e)+(n-t)*(n-t))},j=function(e,t,r,n){return(r-e)*(r-e)+(n-t)*(n-t)};e.registerBinding(e.container,"touchstart",V=function(r){e.touchData.capture=!0,e.data.bgActivePosistion=void 0;var n=e.cy,i=e.touchData.now,a=e.touchData.earlier;if(r.touches[0]){var s=e.projectIntoViewport(r.touches[0].clientX,r.touches[0].clientY);i[0]=s[0],i[1]=s[1]}if(r.touches[1]){var s=e.projectIntoViewport(r.touches[1].clientX,r.touches[1].clientY);i[2]=s[0],i[3]=s[1]}if(r.touches[2]){var s=e.projectIntoViewport(r.touches[2].clientX,r.touches[2].clientY);i[4]=s[0],i[5]=s[1]}if(r.touches[1]){b(e.dragData.touchDragEles);var l=e.findContainerClientCoords();L=l[0],O=l[1],A=l[2],R=l[3],T=r.touches[0].clientX-L,D=r.touches[0].clientY-O,C=r.touches[1].clientX-L,M=r.touches[1].clientY-O,q=T>=0&&A>=T&&C>=0&&A>=C&&D>=0&&R>=D&&M>=0&&R>=M;var u=n.pan(),c=n.zoom();N=F(T,D,C,M),B=j(T,D,C,M),z=[(T+C)/2,(D+M)/2],I=[(z[0]-u.x)/c,(z[1]-u.y)/c];var d=200,h=d*d;if(h>B&&!r.touches[2]){var f=e.findNearestElement(i[0],i[1],!0,!0),v=e.findNearestElement(i[2],i[3],!0,!0);return f&&f.isNode()?(f.activate().trigger(new o(r,{type:"cxttapstart",cyPosition:{x:i[0],y:i[1]}})),e.touchData.start=f):v&&v.isNode()?(v.activate().trigger(new o(r,{type:"cxttapstart",cyPosition:{x:i[0],y:i[1]}})),e.touchData.start=v):(n.trigger(new o(r,{type:"cxttapstart",cyPosition:{x:i[0],y:i[1]}})),e.touchData.start=null),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!0,e.touchData.cxtDragged=!1,e.data.bgActivePosistion=void 0,void e.redraw()}}if(r.touches[2]);else if(r.touches[1]);else if(r.touches[0]){var g=e.findNearestElements(i[0],i[1],!0,!0),x=g[0];if(null!=x&&(x.activate(),e.touchData.start=x,e.touchData.starts=g,e.nodeIsGrabbable(x))){var w=e.dragData.touchDragEles=[];if(e.redrawHint("eles",!0),e.redrawHint("drag",!0),x.selected()){var E=n.$(function(){return this.selected()&&e.nodeIsGrabbable(this)});y(E,{addToList:w})}else m(x,{addToList:w});p(x),x.trigger(new o(r,{type:"grab",cyPosition:{x:i[0],y:i[1]}}))}t(x,["touchstart","tapstart","vmousedown"],r,{cyPosition:{x:i[0],y:i[1]}}),null==x&&(e.data.bgActivePosistion={x:s[0],y:s[1]},e.redrawHint("select",!0),e.redraw()),e.touchData.startPosition=[];for(var _=0;_<i.length;_++)a[_]=i[_],e.touchData.startPosition[_]=i[_];e.touchData.startGPosition=[r.touches[0].clientX,r.touches[0].clientY],e.touchData.singleTouchMoved=!1,e.touchData.singleTouchStartTime=+new Date,clearTimeout(e.touchData.tapholdTimeout),e.touchData.tapholdTimeout=setTimeout(function(){e.touchData.singleTouchMoved!==!1||e.pinching||e.touchData.selecting||(t(e.touchData.start,["taphold"],r,{cyPosition:{x:i[0],y:i[1]}}),e.touchData.start||n.$(":selected").unselect())},e.tapholdDuration)}},!1);var X;e.registerBinding(window,"touchmove",X=function(r){var i=e.selection,l=e.touchData.capture,u=e.cy,c=e.touchData.now,d=e.touchData.earlier,h=u.zoom();if(r.touches[0]){var p=e.projectIntoViewport(r.touches[0].clientX,r.touches[0].clientY);c[0]=p[0],c[1]=p[1]}if(r.touches[1]){var p=e.projectIntoViewport(r.touches[1].clientX,r.touches[1].clientY);c[2]=p[0],c[3]=p[1]}if(r.touches[2]){var p=e.projectIntoViewport(r.touches[2].clientX,r.touches[2].clientY);c[4]=p[0],c[5]=p[1]}var f;if(l&&r.touches[0]){for(var v=[],g=0;g<c.length;g++)v[g]=c[g]-d[g];var m=e.touchData.startGPosition,x=r.touches[0].clientX-m[0],w=x*x,E=r.touches[0].clientY-m[1],_=E*E,P=w+_;f=P>=e.touchTapThreshold2}if(l&&e.touchData.cxt){r.preventDefault();var S=r.touches[0].clientX-L,k=r.touches[0].clientY-O,z=r.touches[1].clientX-L,A=r.touches[1].clientY-O,R=j(S,k,z,A),V=R/B,X=150,Y=X*X,W=1.5,$=W*W;if(V>=$||R>=Y){e.touchData.cxt=!1,e.touchData.start&&(e.touchData.start.unactivate(),e.touchData.start=null),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var H=new o(r,{type:"cxttapend",cyPosition:{x:c[0],y:c[1]}});e.touchData.start?e.touchData.start.trigger(H):u.trigger(H)}}if(l&&e.touchData.cxt){var H=new o(r,{type:"cxtdrag",cyPosition:{x:c[0],y:c[1]}});e.data.bgActivePosistion=void 0,e.redrawHint("select",!0),e.touchData.start?e.touchData.start.trigger(H):u.trigger(H),e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxtDragged=!0;var U=e.findNearestElement(c[0],c[1],!0,!0);e.touchData.cxtOver&&U===e.touchData.cxtOver||(e.touchData.cxtOver&&e.touchData.cxtOver.trigger(new o(r,{type:"cxtdragout",cyPosition:{x:c[0],y:c[1]}})),e.touchData.cxtOver=U,U&&U.trigger(new o(r,{type:"cxtdragover",cyPosition:{x:c[0],y:c[1]}})))}else if(l&&r.touches[2]&&u.boxSelectionEnabled())r.preventDefault(),e.data.bgActivePosistion=void 0,this.lastThreeTouch=+new Date,e.touchData.selecting||u.trigger("boxstart"),e.touchData.selecting=!0,e.redrawHint("select",!0),i&&0!==i.length&&void 0!==i[0]?(i[2]=(c[0]+c[2]+c[4])/3,i[3]=(c[1]+c[3]+c[5])/3):(i[0]=(c[0]+c[2]+c[4])/3,i[1]=(c[1]+c[3]+c[5])/3,i[2]=(c[0]+c[2]+c[4])/3+1,i[3]=(c[1]+c[3]+c[5])/3+1),i[4]=1,e.touchData.selecting=!0,e.redraw();else if(l&&r.touches[1]&&u.zoomingEnabled()&&u.panningEnabled()&&u.userZoomingEnabled()&&u.userPanningEnabled()){r.preventDefault(),e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var Z=e.dragData.touchDragEles;if(Z){e.redrawHint("drag",!0);for(var G=0;G<Z.length;G++)Z[G]._private.grabbed=!1,Z[G]._private.rscratch.inDragLayer=!1}var S=r.touches[0].clientX-L,k=r.touches[0].clientY-O,z=r.touches[1].clientX-L,A=r.touches[1].clientY-O,Q=F(S,k,z,A),K=Q/N;if(1!=K&&q){var J=S-T,ee=k-D,te=z-C,re=A-M,ne=(J+te)/2,ie=(ee+re)/2,ae=u.zoom(),oe=ae*K,se=u.pan(),le=I[0]*ae+se.x,ue=I[1]*ae+se.y,ce={x:-oe/ae*(le-se.x-ne)+le,y:-oe/ae*(ue-se.y-ie)+ue};if(e.touchData.start){var Z=e.dragData.touchDragEles;b(Z),e.redrawHint("drag",!0),e.redrawHint("eles",!0),e.touchData.start.trigger("free").unactivate()}u.viewport({zoom:oe,pan:ce,cancelOnFailedZoom:!0}),N=Q,T=S,D=k,C=z,M=A,e.pinching=!0}if(r.touches[0]){var p=e.projectIntoViewport(r.touches[0].clientX,r.touches[0].clientY);c[0]=p[0],c[1]=p[1]}if(r.touches[1]){var p=e.projectIntoViewport(r.touches[1].clientX,r.touches[1].clientY);c[2]=p[0],c[3]=p[1]}if(r.touches[2]){var p=e.projectIntoViewport(r.touches[2].clientX,r.touches[2].clientY);c[4]=p[0],c[5]=p[1]}}else if(r.touches[0]){var U,de=e.touchData.start,he=e.touchData.last;if(e.hoverData.draggingEles||e.swipePanning||(U=e.findNearestElement(c[0],c[1],!0,!0)),l&&null!=de&&r.preventDefault(),l&&null!=de&&e.nodeIsDraggable(de))if(f){var Z=e.dragData.touchDragEles,pe=!e.dragData.didDrag;pe&&y(u.collection(Z),{inDragLayer:!0});for(var fe=0;fe<Z.length;fe++){var ve=Z[fe];if(e.nodeIsDraggable(ve)&&ve.grabbed()){e.dragData.didDrag=!0;var ge=ve._private.position,ye=!ve.isParent();if(ye&&n.number(v[0])&&n.number(v[1])&&(ge.x+=v[0],ge.y+=v[1]),pe){e.redrawHint("eles",!0);var me=e.touchData.dragDelta;ye&&me&&n.number(me[0])&&n.number(me[1])&&(ge.x+=me[0],ge.y+=me[1])}}}var be=u.collection(Z);be.updateCompoundBounds(),be.trigger("position drag"),e.hoverData.draggingEles=!0,e.redrawHint("drag",!0),e.touchData.startPosition[0]==d[0]&&e.touchData.startPosition[1]==d[1]&&e.redrawHint("eles",!0),e.redraw()}else{var me=e.touchData.dragDelta=e.touchData.dragDelta||[];0===me.length?(me.push(v[0]),me.push(v[1])):(me[0]+=v[0],me[1]+=v[1])}if(t(de||U,["touchmove","tapdrag","vmousemove"],r,{cyPosition:{x:c[0],y:c[1]}}),de&&de.grabbed()||U==he||(he&&he.trigger(new o(r,{type:"tapdragout",cyPosition:{x:c[0],y:c[1]}})),U&&U.trigger(new o(r,{type:"tapdragover",cyPosition:{x:c[0],y:c[1]}}))),e.touchData.last=U,l)for(var G=0;G<c.length;G++)c[G]&&e.touchData.startPosition[G]&&f&&(e.touchData.singleTouchMoved=!0);if(l&&(null==de||de.isEdge())&&u.panningEnabled()&&u.userPanningEnabled()){var xe=s(de,e.touchData.starts);xe&&(r.preventDefault(),e.swipePanning?u.panBy({x:v[0]*h,y:v[1]*h}):f&&(e.swipePanning=!0,u.panBy({x:x*h,y:E*h}),de&&(de.unactivate(),e.data.bgActivePosistion||(e.data.bgActivePosistion=a.array2point(e.touchData.startPosition)),e.redrawHint("select",!0),e.touchData.start=null)));var p=e.projectIntoViewport(r.touches[0].clientX,r.touches[0].clientY);c[0]=p[0],c[1]=p[1]}}for(var g=0;g<c.length;g++)d[g]=c[g]},!1);var Y;e.registerBinding(window,"touchcancel",Y=function(t){var r=e.touchData.start;e.touchData.capture=!1,r&&r.unactivate()});var W;if(e.registerBinding(window,"touchend",W=function(r){var n=e.touchData.start,i=e.touchData.capture;if(i){e.touchData.capture=!1,r.preventDefault();var a=e.selection;e.swipePanning=!1,e.hoverData.draggingEles=!1;var s=e.cy,l=s.zoom(),u=e.touchData.now,c=e.touchData.earlier;if(r.touches[0]){var d=e.projectIntoViewport(r.touches[0].clientX,r.touches[0].clientY);u[0]=d[0],u[1]=d[1]}if(r.touches[1]){var d=e.projectIntoViewport(r.touches[1].clientX,r.touches[1].clientY);u[2]=d[0],u[3]=d[1]}if(r.touches[2]){var d=e.projectIntoViewport(r.touches[2].clientX,r.touches[2].clientY);u[4]=d[0],u[5]=d[1]}n&&n.unactivate();var h;if(e.touchData.cxt){if(h=new o(r,{type:"cxttapend",cyPosition:{x:u[0],y:u[1]}}),n?n.trigger(h):s.trigger(h),!e.touchData.cxtDragged){var p=new o(r,{type:"cxttap",cyPosition:{x:u[0],y:u[1]}});n?n.trigger(p):s.trigger(p)}return e.touchData.start&&(e.touchData.start._private.grabbed=!1),e.touchData.cxt=!1,e.touchData.start=null,void e.redraw()}if(!r.touches[2]&&s.boxSelectionEnabled()&&e.touchData.selecting){e.touchData.selecting=!1;var f=s.collection(e.getAllInBox(a[0],a[1],a[2],a[3]));a[0]=void 0,a[1]=void 0,a[2]=void 0,a[3]=void 0,a[4]=0,e.redrawHint("select",!0),s.trigger("boxend");var v=function(e){return e.selectable()&&!e.selected()};f.trigger("box").stdFilter(v).select().trigger("boxselect"),f.nonempty()&&e.redrawHint("eles",!0),e.redraw()}if(null!=n&&n.unactivate(),r.touches[2])e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);else if(r.touches[1]);else if(r.touches[0]);else if(!r.touches[0]){e.data.bgActivePosistion=void 0,e.redrawHint("select",!0);var g=e.dragData.touchDragEles;if(null!=n){var y=n._private.grabbed;b(g),e.redrawHint("drag",!0),e.redrawHint("eles",!0),y&&n.trigger("free"),t(n,["touchend","tapend","vmouseup","tapdragout"],r,{cyPosition:{x:u[0],y:u[1]}}),n.unactivate(),e.touchData.start=null}else{var m=e.findNearestElement(u[0],u[1],!0,!0);t(m,["touchend","tapend","vmouseup","tapdragout"],r,{cyPosition:{x:u[0],y:u[1]}})}var x=e.touchData.startPosition[0]-u[0],w=x*x,E=e.touchData.startPosition[1]-u[1],_=E*E,P=w+_,S=P*l*l;null!=n&&!e.dragData.didDrag&&n._private.selectable&&S<e.touchTapThreshold2&&!e.pinching&&("single"===s.selectionType()?(s.$(":selected").unmerge(n).unselect(),n.select()):n.selected()?n.unselect():n.select(),e.redrawHint("eles",!0)),e.touchData.singleTouchMoved||t(n,["tap","vclick"],r,{cyPosition:{x:u[0],y:u[1]}}),e.touchData.singleTouchMoved=!0}for(var k=0;k<u.length;k++)c[k]=u[k];e.dragData.didDrag=!1,0===r.touches.length&&(e.touchData.dragDelta=[],e.touchData.startPosition=null,e.touchData.startGPosition=null),r.touches.length<2&&(e.pinching=!1,e.redrawHint("eles",!0),e.redraw())}},!1),"undefined"==typeof TouchEvent){var $=[],H=function(e){return{clientX:e.clientX,clientY:e.clientY,force:1,identifier:e.pointerId,pageX:e.pageX,pageY:e.pageY,radiusX:e.width/2,radiusY:e.height/2,screenX:e.screenX,screenY:e.screenY,target:e.target}},U=function(e){return{event:e,touch:H(e)}},Z=function(e){$.push(U(e))},G=function(e){for(var t=0;t<$.length;t++){var r=$[t];if(r.event.pointerId===e.pointerId)return void $.splice(t,1)}},Q=function(e){var t=$.filter(function(t){return t.event.pointerId===e.pointerId})[0];t.event=e,t.touch=H(e)},K=function(e){e.touches=$.map(function(e){return e.touch})};e.registerBinding(e.container,"pointerdown",function(e){"mouse"!==e.pointerType&&(e.preventDefault(),Z(e),K(e),V(e))}),e.registerBinding(e.container,"pointerup",function(e){"mouse"!==e.pointerType&&(G(e),K(e),W(e))}),e.registerBinding(e.container,"pointercancel",function(e){"mouse"!==e.pointerType&&(G(e),K(e),Y(e))}),e.registerBinding(e.container,"pointermove",function(e){"mouse"!==e.pointerType&&(e.preventDefault(),Q(e),K(e),X(e))})}},t.exports=s},{"../../../event":45,"../../../is":83,"../../../math":85,"../../../util":100}],62:[function(e,t,r){"use strict";var n=e("../../../math"),i={};i.generatePolygon=function(e,t){return this.nodeShapes[e]={renderer:this,name:e,points:t,draw:function(e,t,r,n,i){this.renderer.nodeShapeImpl("polygon",e,t,r,n,i,this.points)},intersectLine:function(e,t,r,i,a,o,s){return n.polygonIntersectLine(a,o,this.points,e,t,r/2,i/2,s)},checkPoint:function(e,t,r,i,a,o,s){return n.pointInsidePolygon(e,t,this.points,o,s,i,a,[0,-1],r)}}},i.generateEllipse=function(){return this.nodeShapes.ellipse={renderer:this,name:"ellipse",draw:function(e,t,r,n,i){this.renderer.nodeShapeImpl(this.name,e,t,r,n,i)},intersectLine:function(e,t,r,i,a,o,s){return n.intersectLineEllipse(a,o,e,t,r/2+s,i/2+s)},checkPoint:function(e,t,r,n,i,a,o){return e-=a,t-=o,e/=n/2+r,t/=i/2+r,1>=e*e+t*t}}},i.generateRoundRectangle=function(){return this.nodeShapes.roundrectangle={renderer:this,name:"roundrectangle",points:n.generateUnitNgonPointsFitToSquare(4,0),draw:function(e,t,r,n,i){this.renderer.nodeShapeImpl(this.name,e,t,r,n,i)},intersectLine:function(e,t,r,i,a,o,s){return n.roundRectangleIntersectLine(a,o,e,t,r,i,s)},checkPoint:function(e,t,r,i,a,o,s){var l=n.getRoundRectangleRadius(i,a);if(n.pointInsidePolygon(e,t,this.points,o,s,i,a-2*l,[0,-1],r))return!0;if(n.pointInsidePolygon(e,t,this.points,o,s,i-2*l,a,[0,-1],r))return!0;var u=function(e,t,r,n,i,a,o){return e-=r,t-=n,e/=i/2+o,t/=a/2+o,1>=e*e+t*t};return u(e,t,o-i/2+l,s-a/2+l,2*l,2*l,r)?!0:u(e,t,o+i/2-l,s-a/2+l,2*l,2*l,r)?!0:u(e,t,o+i/2-l,s+a/2-l,2*l,2*l,r)?!0:!!u(e,t,o-i/2+l,s+a/2-l,2*l,2*l,r)}}},i.registerNodeShapes=function(){var e=this.nodeShapes={},t=this;this.generateEllipse(),this.generatePolygon("triangle",n.generateUnitNgonPointsFitToSquare(3,0)),this.generatePolygon("rectangle",n.generateUnitNgonPointsFitToSquare(4,0)),e.square=e.rectangle,this.generateRoundRectangle(),this.generatePolygon("diamond",[0,1,1,0,0,-1,-1,0]),this.generatePolygon("pentagon",n.generateUnitNgonPointsFitToSquare(5,0)),this.generatePolygon("hexagon",n.generateUnitNgonPointsFitToSquare(6,0)),this.generatePolygon("heptagon",n.generateUnitNgonPointsFitToSquare(7,0)),this.generatePolygon("octagon",n.generateUnitNgonPointsFitToSquare(8,0));var r=new Array(20),i=n.generateUnitNgonPoints(5,0),a=n.generateUnitNgonPoints(5,Math.PI/5),o=.5*(3-Math.sqrt(5));o*=1.57;for(var s=0;s<a.length/2;s++)a[2*s]*=o,a[2*s+1]*=o;for(var s=0;5>s;s++)r[4*s]=i[2*s],r[4*s+1]=i[2*s+1],r[4*s+2]=a[2*s],r[4*s+3]=a[2*s+1];r=n.fitPolygonToSquare(r),this.generatePolygon("star",r),this.generatePolygon("vee",[-1,-1,0,-.333,1,-1,0,1]),this.generatePolygon("rhomboid",[-1,-1,.333,-1,1,1,-.333,1]),e.makePolygon=function(e){var r,n=e.join("$"),i="polygon-"+n;return(r=this[i])?r:t.generatePolygon(i,e)}},t.exports=i},{"../../../math":85}],63:[function(e,t,r){"use strict";var n=e("../../../util"),i={};i.timeToRender=function(){return this.redrawTotalTime/this.redrawCount},i.redraw=function(e){e=e||n.staticEmptyObject();var t=this;void 0===t.averageRedrawTime&&(t.averageRedrawTime=0),void 0===t.lastRedrawTime&&(t.lastRedrawTime=0),void 0===t.lastDrawTime&&(t.lastDrawTime=0),t.requestedFrame=!0,t.renderOptions=e},i.beforeRender=function(e,t){t=t||0;var r=this.beforeRenderCallbacks;r.push({fn:e,priority:t}),r.sort(function(e,t){return t.priority-e.priority})};var a=function(e,t,r){for(var n=e.beforeRenderCallbacks,i=0;i<n.length;i++)n[i].fn(t,r)};i.startRenderLoop=function(){var e=this;if(!e.renderLoopStarted){e.renderLoopStarted=!0;var t=function(r){if(!e.destroyed){if(e.requestedFrame&&!e.skipFrame){a(e,!0,r);var i=n.performanceNow();e.render(e.renderOptions);var o=e.lastDrawTime=n.performanceNow();void 0===e.averageRedrawTime&&(e.averageRedrawTime=o-i),void 0===e.redrawCount&&(e.redrawCount=0),e.redrawCount++,void 0===e.redrawTotalTime&&(e.redrawTotalTime=0);var s=o-i;e.redrawTotalTime+=s,e.lastRedrawTime=s,e.averageRedrawTime=e.averageRedrawTime/2+s/2,e.requestedFrame=!1}else a(e,!1,r);e.skipFrame=!1,n.requestAnimationFrame(t)}};n.requestAnimationFrame(t)}},t.exports=i},{"../../../util":100}],64:[function(e,t,r){"use strict";var n,i={};i.arrowShapeImpl=function(e){return(n||(n={polygon:function(e,t){for(var r=0;r<t.length;r++){var n=t[r];e.lineTo(n.x,n.y)}},"triangle-backcurve":function(e,t,r){for(var n,i=0;i<t.length;i++){var a=t[i];0===i&&(n=a),e.lineTo(a.x,a.y)}e.quadraticCurveTo(r.x,r.y,n.x,n.y)},"triangle-tee":function(e,t,r){e.beginPath&&e.beginPath();for(var n=t,i=0;i<n.length;i++){var a=n[i];e.lineTo(a.x,a.y)}e.closePath&&e.closePath(),e.beginPath&&e.beginPath();var o=r,s=r[0];e.moveTo(s.x,s.y);for(var i=0;i<o.length;i++){var a=o[i];e.lineTo(a.x,a.y)}e.closePath&&e.closePath()},circle:function(e,t,r,n){e.arc(t,r,n,0,2*Math.PI,!1)}}))[e]},t.exports=i},{}],65:[function(e,t,r){"use strict";var n={};n.drawEdge=function(e,t,r,n,i){var a=t._private.rscratch,o=this.usePaths();if(!(a.badLine||isNaN(a.allpts[0])||t.pstyle("width").pfValue<=0)){var s;r&&(s=r,e.translate(-s.x1,-s.y1));var l=t.pstyle("overlay-padding").pfValue,u=t.pstyle("overlay-opacity").value,c=t.pstyle("overlay-color").value;if(i){if(0===u)return;this.strokeStyle(e,c[0],c[1],c[2],u),e.lineCap="round","self"!=a.edgeType||o||(e.lineCap="butt")}else{var d=t.pstyle("line-color").value;this.strokeStyle(e,d[0],d[1],d[2],t.pstyle("opacity").value),e.lineCap="butt"}e.lineJoin="round";var h=t.pstyle("width").pfValue+(i?2*l:0),p=i?"solid":t.pstyle("line-style").value;e.lineWidth=h;var f=t.pstyle("shadow-blur").pfValue,v=t.pstyle("shadow-opacity").value,g=t.pstyle("shadow-color").value,y=t.pstyle("shadow-offset-x").pfValue,m=t.pstyle("shadow-offset-y").pfValue;this.shadowStyle(e,g,i?0:v,f,y,m),this.drawEdgePath(t,e,a.allpts,p,h),this.drawArrowheads(e,t,i),this.shadowStyle(e,"transparent",0),i||this.drawEdge(e,t,!1,n,!0),this.drawElementText(e,t,n),r&&e.translate(s.x1,s.y1)}},n.drawEdgePath=function(e,t,r,n,i){var a,o=e._private.rscratch,s=t,l=!1,u=this.usePaths();if(u){var c=r.join("$"),d=o.pathCacheKey&&o.pathCacheKey===c;d?(a=t=o.pathCache,l=!0):(a=t=new Path2D,o.pathCacheKey=c,o.pathCache=a)}if(s.setLineDash)switch(n){case"dotted":s.setLineDash([1,1]);break;case"dashed":s.setLineDash([6,3]);break;case"solid":s.setLineDash([])}if(!l&&!o.badLine)switch(t.beginPath&&t.beginPath(),t.moveTo(r[0],r[1]),o.edgeType){case"bezier":case"self":case"compound":case"multibezier":for(var h=2;h+3<r.length;h+=4)t.quadraticCurveTo(r[h],r[h+1],r[h+2],r[h+3]);break;case"straight":case"segments":case"haystack":for(var h=2;h+1<r.length;h+=2)t.lineTo(r[h],r[h+1])}t=s,u?t.stroke(a):t.stroke(),t.setLineDash&&t.setLineDash([])},n.drawArrowheads=function(e,t,r){if(!r){var n=t._private.rscratch,i="haystack"===n.edgeType;i||this.drawArrowhead(e,t,"source",n.arrowStartX,n.arrowStartY,n.srcArrowAngle),this.drawArrowhead(e,t,"mid-target",n.midX,n.midY,n.midtgtArrowAngle),this.drawArrowhead(e,t,"mid-source",n.midX,n.midY,n.midsrcArrowAngle),i||this.drawArrowhead(e,t,"target",n.arrowEndX,n.arrowEndY,n.tgtArrowAngle)}},n.drawArrowhead=function(e,t,r,n,i,a){if(!(isNaN(n)||null==n||isNaN(i)||null==i||isNaN(a)||null==a)){var o=this,s=t.pstyle(r+"-arrow-shape").value;if("none"!==s){var l=e.globalCompositeOperation,u="hollow"===t.pstyle(r+"-arrow-fill").value?"both":"filled",c=t.pstyle(r+"-arrow-fill").value,d=t.pstyle("opacity").value;"half-triangle-overshot"===s&&(c="hollow",u="hollow"),1===d&&"hollow"!==c||(e.globalCompositeOperation="destination-out",o.fillStyle(e,255,255,255,1),o.strokeStyle(e,255,255,255,1),o.drawArrowShape(t,r,e,u,t.pstyle("width").pfValue,t.pstyle(r+"-arrow-shape").value,n,i,a),e.globalCompositeOperation=l);var h=t.pstyle(r+"-arrow-color").value;o.fillStyle(e,h[0],h[1],h[2],d),o.strokeStyle(e,h[0],h[1],h[2],d),o.drawArrowShape(t,r,e,c,t.pstyle("width").pfValue,t.pstyle(r+"-arrow-shape").value,n,i,a)}}},n.drawArrowShape=function(e,t,r,n,i,a,o,s,l){var u,c=this,d=this.usePaths(),h=e._private.rscratch,p=!1,f=r,v={x:o,y:s},g=this.getArrowWidth(i),y=c.arrowShapes[a];if(d){var m=g+"$"+a+"$"+l+"$"+o+"$"+s;h.arrowPathCacheKey=h.arrowPathCacheKey||{},h.arrowPathCache=h.arrowPathCache||{};var b=h.arrowPathCacheKey[t]===m;b?(u=r=h.arrowPathCache[t],p=!0):(u=r=new Path2D,h.arrowPathCacheKey[t]=m,h.arrowPathCache[t]=u)}r.beginPath&&r.beginPath(),p||y.draw(r,g,l,v),!y.leavePathOpen&&r.closePath&&r.closePath(),r=f,"filled"!==n&&"both"!==n||(d?r.fill(u):r.fill()),"hollow"!==n&&"both"!==n||(r.lineWidth=y.matchEdgeWidth?i:1,r.lineJoin="miter",d?r.stroke(u):r.stroke())},t.exports=n},{}],66:[function(e,t,r){"use strict";var n=e("../../../math"),i={};i.drawElement=function(e,t,r,n){var i=this;t.isNode()?i.drawNode(e,t,r,n):i.drawEdge(e,t,r,n)},i.drawCachedElement=function(e,t,r,i){var a=this,o=t.boundingBox();if(!i||n.boundingBoxesIntersect(o,i)){var s=a.data.eleTxrCache.getElement(t,o,r);s?e.drawImage(s.texture.canvas,s.x,0,s.width,s.height,o.x1,o.y1,o.w,o.h):a.drawElement(e,t)}},i.drawElements=function(e,t){for(var r=this,n=0;n<t.length;n++){var i=t[n];r.drawElement(e,i)}},i.drawCachedElements=function(e,t,r,n){for(var i=this,a=0;a<t.length;a++){var o=t[a];i.drawCachedElement(e,o,r,n)}},i.drawCachedNodes=function(e,t,r,n){for(var i=this,a=0;a<t.length;a++){var o=t[a];o.isNode()&&i.drawCachedElement(e,o,r,n)}},i.drawLayeredElements=function(e,t,r,n){var i=this,a=i.data.lyrTxrCache.getLayers(t,r);if(a)for(var o=0;o<a.length;o++){var s=a[o],l=s.bb;e.drawImage(s.canvas,l.x1,l.y1,l.w,l.h)}else i.drawCachedElements(e,t,r,n)},t.exports=i},{"../../../math":85}],67:[function(e,t,r){"use strict";var n={};n.safeDrawImage=function(e,t,r,n,i,a,o,s,l,u){var c=this;try{e.drawImage(t,r,n,i,a,o,s,l,u)}catch(d){c.redrawHint("eles",!0),c.redrawHint("drag",!0),c.drawingImage=!0,c.redraw()}},n.drawInscribedImage=function(e,t,r){var n=this,i=r._private.position.x,a=r._private.position.y,o=r.pstyle("background-fit").value,s=r.pstyle("background-position-x"),l=r.pstyle("background-position-y"),u=r.pstyle("background-repeat").value,c=r.width(),d=r.height(),h=r._private.rscratch,p=r.pstyle("background-clip").value,f="node"===p,v=r.pstyle("background-image-opacity").value,g=t.width||t.cachedW,y=t.height||t.cachedH;null!=g&&null!=y||(document.body.appendChild(t),g=t.cachedW=t.width||t.offsetWidth,y=t.cachedH=t.height||t.offsetHeight,document.body.removeChild(t));var m=g,b=y,x=r.pstyle("background-width");"auto"!==x.value&&(m="%"===x.units?x.value/100*c:x.pfValue);var w=r.pstyle("background-height");if("auto"!==w.value&&(b="%"===w.units?w.value/100*d:w.pfValue),0!==m&&0!==b){if("contain"===o){var E=Math.min(c/m,d/b);m*=E,b*=E}else if("cover"===o){var E=Math.max(c/m,d/b);m*=E,b*=E}var _=i-c/2;_+="%"===s.units?(c-m)*s.value/100:s.pfValue;var P=a-d/2;P+="%"===l.units?(d-b)*l.value/100:l.pfValue,h.pathCache&&(_-=i,P-=a,i=0,a=0);var S=e.globalAlpha;if(e.globalAlpha=v,"no-repeat"===u)f&&(e.save(),h.pathCache?e.clip(h.pathCache):(n.nodeShapes[n.getNodeShape(r)].draw(e,i,a,c,d),e.clip())),n.safeDrawImage(e,t,0,0,g,y,_,P,m,b),f&&e.restore();else{var k=e.createPattern(t,u);e.fillStyle=k,n.nodeShapes[n.getNodeShape(r)].draw(e,i,a,c,d),e.translate(_,P),e.fill(),e.translate(-_,-P)}e.globalAlpha=S}},t.exports=n},{}],68:[function(e,t,r){"use strict";function n(e,t,r,n,i,a){var a=a||5;e.beginPath(),e.moveTo(t+a,r),e.lineTo(t+n-a,r),e.quadraticCurveTo(t+n,r,t+n,r+a),e.lineTo(t+n,r+i-a),e.quadraticCurveTo(t+n,r+i,t+n-a,r+i),e.lineTo(t+a,r+i),e.quadraticCurveTo(t,r+i,t,r+i-a),e.lineTo(t,r+a),e.quadraticCurveTo(t,r,t+a,r),e.closePath(),e.fill()}var i=e("../../../util"),a=e("../../../math"),o={};o.eleTextBiggerThanMin=function(e,t){if(!t){var r=e.cy().zoom(),n=this.getPixelRatio(),i=Math.ceil(a.log2(r*n));t=Math.pow(2,i)}var o=e.pstyle("font-size").pfValue*t,s=e.pstyle("min-zoomed-font-size").pfValue;return!(s>o)},o.drawElementText=function(e,t,r){var n=this;if(void 0===r){if(!n.eleTextBiggerThanMin(t))return}else if(!r)return;if(t.isNode()){var i=t.pstyle("label");if(!i||!i.value)return;var a=t.pstyle("text-halign").strValue;t.pstyle("text-valign").strValue;switch(a){case"left":e.textAlign="right";break;case"right":e.textAlign="left";break;default:e.textAlign="center"}e.textBaseline="bottom"}else{var i=t.pstyle("label"),o=t.pstyle("source-label"),s=t.pstyle("target-label");if(!(i&&i.value||o&&o.value||s&&s.value))return;e.textAlign="center",e.textBaseline="bottom"}n.drawText(e,t),t.isEdge()&&(n.drawText(e,t,"source"),n.drawText(e,t,"target"))},o.drawNodeText=o.drawEdgeText=o.drawElementText,o.getFontCache=function(e){var t;this.fontCaches=this.fontCaches||[];for(var r=0;r<this.fontCaches.length;r++)if(t=this.fontCaches[r],t.context===e)return t;return t={context:e},this.fontCaches.push(t),t},o.setupTextStyle=function(e,t){var r=t.effectiveOpacity(),n=t.pstyle("font-style").strValue,i=t.pstyle("font-size").pfValue+"px",a=t.pstyle("font-family").strValue,o=t.pstyle("font-weight").strValue,s=t.pstyle("text-opacity").value*t.pstyle("opacity").value*r,l=t.pstyle("text-outline-opacity").value*s,u=t.pstyle("color").value,c=t.pstyle("text-outline-color").value,d=t.pstyle("text-shadow-blur").pfValue,h=t.pstyle("text-shadow-opacity").value,p=t.pstyle("text-shadow-color").value,f=t.pstyle("text-shadow-offset-x").pfValue,v=t.pstyle("text-shadow-offset-y").pfValue,g=t._private.fontKey,y=this.getFontCache(e);y.key!==g&&(e.font=n+" "+o+" "+i+" "+a,y.key=g),e.lineJoin="round",this.fillStyle(e,u[0],u[1],u[2],s),this.strokeStyle(e,c[0],c[1],c[2],l),this.shadowStyle(e,p,h,d,f,v)},o.drawText=function(e,t,r){var a=t._private,o=a.rscratch,s=t.effectiveOpacity();if(0!==s&&0!==t.pstyle("text-opacity").value){var l=i.getPrefixedProperty(o,"labelX",r),u=i.getPrefixedProperty(o,"labelY",r),c=this.getLabelText(t,r);if(null!=c&&""!==c&&!isNaN(l)&&!isNaN(u)){this.setupTextStyle(e,t);var d=r?r+"-":"",h=i.getPrefixedProperty(o,"labelWidth",r),p=i.getPrefixedProperty(o,"labelHeight",r),f=i.getPrefixedProperty(o,"labelAngle",r),v=t.pstyle(d+"text-margin-x").pfValue,g=t.pstyle(d+"text-margin-y").pfValue,y=t.isEdge(),m=t.isNode(),b=t.pstyle("text-halign").value,x=t.pstyle("text-valign").value;y&&(b="center",x="center"),l+=v,u+=g;var w,E=t.pstyle("text-rotation");if(w="autorotate"===E.strValue?y?f:0:"none"===E.strValue?0:E.pfValue,0!==w){var _=l,P=u;e.translate(_,P),e.rotate(w),l=0,u=0}if(m){var S=t.pstyle("padding-left").pfValue,k=t.pstyle("padding-right").pfValue,T=t.pstyle("padding-top").pfValue,D=t.pstyle("padding-bottom").pfValue;l+=S/2,l-=k/2,u+=T/2,u-=D/2}switch(x){case"top":break;case"center":u+=p/2;break;case"bottom":u+=p}var C=t.pstyle("text-background-opacity").value,M=t.pstyle("text-border-opacity").value,N=t.pstyle("text-border-width").pfValue;if(C>0||N>0&&M>0){var B=l;switch(b){case"left":B-=h;break;case"center":B-=h/2;break;case"right":}var z=u;switch(x){case"top":z-=p;break;case"center":z-=p/2;break;case"bottom":}if(C>0){var I=e.fillStyle,L=t.pstyle("text-background-color").value;e.fillStyle="rgba("+L[0]+","+L[1]+","+L[2]+","+C*s+")";var O=t.pstyle("text-background-shape").strValue;"roundrectangle"==O?n(e,B,z,h,p,2):e.fillRect(B,z,h,p),e.fillStyle=I}if(N>0&&M>0){var A=e.strokeStyle,R=e.lineWidth,q=t.pstyle("text-border-color").value,V=t.pstyle("text-border-style").value;if(e.strokeStyle="rgba("+q[0]+","+q[1]+","+q[2]+","+M*s+")",e.lineWidth=N,e.setLineDash)switch(V){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"double":e.lineWidth=N/4,e.setLineDash([]);break;case"solid":e.setLineDash([])}if(e.strokeRect(B,z,h,p),"double"===V){var F=N/2;e.strokeRect(B+F,z+F,h-2*F,p-2*F)}e.setLineDash&&e.setLineDash([]),
-e.lineWidth=R,e.strokeStyle=A}}var j=2*t.pstyle("text-outline-width").pfValue;if(j>0&&(e.lineWidth=j),"wrap"===t.pstyle("text-wrap").value){var X=o.labelWrapCachedLines,Y=p/X.length;switch(x){case"top":u-=(X.length-1)*Y;break;case"bottom":break;default:case"center":u-=(X.length-1)*Y/2}for(var W=0;W<X.length;W++)j>0&&e.strokeText(X[W],l,u),e.fillText(X[W],l,u),u+=Y}else j>0&&e.strokeText(c,l,u),e.fillText(c,l,u);0!==w&&(e.rotate(-w),e.translate(-_,-P)),this.shadowStyle(e,"transparent",0)}}},t.exports=o},{"../../../math":85,"../../../util":100}],69:[function(e,t,r){"use strict";var n=e("../../../is"),i={};i.drawNode=function(e,t,r,i){var a,o,s=this,l=t._private.rscratch,u=t._private,c=c||u.position;if(n.number(c.x)&&n.number(c.y)){var d,h=this.usePaths(),p=!1,f=t.effectiveOpacity();if(0!==f){a=t.width()+t.pstyle("padding-left").pfValue+t.pstyle("padding-right").pfValue,o=t.height()+t.pstyle("padding-top").pfValue+t.pstyle("padding-bottom").pfValue,e.lineWidth=t.pstyle("border-width").pfValue;var v;r&&(v=r,e.translate(-v.x1,-v.y1));var g,y=t.pstyle("background-image"),m=y.value[2]||y.value[1];if(void 0!==m){g=this.getCachedImage(m,function(){t.trigger("background"),s.redrawHint("eles",!0),s.redrawHint("drag",!0),s.drawingImage=!0,s.redraw()});var b=u.backgrounding;u.backgrounding=!g.complete,b!==u.backgrounding&&t.updateStyle(!1)}var x=t.pstyle("background-color").value,w=t.pstyle("border-color").value,E=t.pstyle("border-style").value;this.fillStyle(e,x[0],x[1],x[2],t.pstyle("background-opacity").value*f),this.strokeStyle(e,w[0],w[1],w[2],t.pstyle("border-opacity").value*f);var _=t.pstyle("shadow-blur").pfValue,P=t.pstyle("shadow-opacity").value,S=t.pstyle("shadow-color").value,k=t.pstyle("shadow-offset-x").pfValue,T=t.pstyle("shadow-offset-y").pfValue;if(this.shadowStyle(e,S,P,_,k,T),e.lineJoin="miter",e.setLineDash)switch(E){case"dotted":e.setLineDash([1,1]);break;case"dashed":e.setLineDash([4,2]);break;case"solid":case"double":e.setLineDash([])}var D=t.pstyle("shape").strValue,C=t.pstyle("shape-polygon-points").pfValue;if(h){var M=D+"$"+a+"$"+o+("polygon"===D?"$"+C.join("$"):"");e.translate(c.x,c.y),l.pathCacheKey===M?(d=l.pathCache,p=!0):(d=new Path2D,l.pathCacheKey=M,l.pathCache=d)}if(!p){var N=c;h&&(N={x:0,y:0}),s.nodeShapes[this.getNodeShape(t)].draw(d||e,N.x,N.y,a,o)}h?e.fill(d):e.fill(),this.shadowStyle(e,"transparent",0),void 0!==m&&g.complete&&this.drawInscribedImage(e,g,t);var B=t.pstyle("background-blacken").value,z=t.pstyle("border-width").pfValue;if(this.hasPie(t)&&(this.drawPie(e,t,f),0===B&&0===z||h||s.nodeShapes[this.getNodeShape(t)].draw(e,c.x,c.y,a,o)),B>0?(this.fillStyle(e,0,0,0,B),h?e.fill(d):e.fill()):0>B&&(this.fillStyle(e,255,255,255,-B),h?e.fill(d):e.fill()),z>0&&(h?e.stroke(d):e.stroke(),"double"===E)){e.lineWidth=t.pstyle("border-width").pfValue/3;var I=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",h?e.stroke(d):e.stroke(),e.globalCompositeOperation=I}h&&e.translate(-c.x,-c.y),e.setLineDash&&e.setLineDash([]),s.drawElementText(e,t,i);var L=t.pstyle("overlay-padding").pfValue,O=t.pstyle("overlay-opacity").value,A=t.pstyle("overlay-color").value;O>0&&(this.fillStyle(e,A[0],A[1],A[2],O),s.nodeShapes.roundrectangle.draw(e,t._private.position.x,t._private.position.y,a+2*L,o+2*L),e.fill()),r&&e.translate(v.x1,v.y1)}}},i.hasPie=function(e){return e=e[0],e._private.hasPie},i.drawPie=function(e,t,r,n){t=t[0];var i=t._private,a=t.cy().style(),o=t.pstyle("pie-size"),s=t.width(),l=t.height(),n=n||i.position,u=n.x,c=n.y,d=Math.min(s,l)/2,h=0,p=this.usePaths();p&&(u=0,c=0),"%"===o.units?d=d*o.value/100:void 0!==o.pfValue&&(d=o.pfValue/2);for(var f=1;f<=a.pieBackgroundN;f++){var v=t.pstyle("pie-"+f+"-background-size").value,g=t.pstyle("pie-"+f+"-background-color").value,y=t.pstyle("pie-"+f+"-background-opacity").value*r,m=v/100;m+h>1&&(m=1-h);var b=1.5*Math.PI+2*Math.PI*h,x=2*Math.PI*m,w=b+x;0===v||h>=1||h+m>1||(e.beginPath(),e.moveTo(u,c),e.arc(u,c,d,b,w),e.closePath(),this.fillStyle(e,g[0],g[1],g[2],y),e.fill(),h+=m)}},t.exports=i},{"../../../is":83}],70:[function(e,t,r){"use strict";var n={},i=e("../../../util"),a=100;n.getPixelRatio=function(){var e=this.data.contexts[0];if(null!=this.forcedPixelRatio)return this.forcedPixelRatio;var t=e.backingStorePixelRatio||e.webkitBackingStorePixelRatio||e.mozBackingStorePixelRatio||e.msBackingStorePixelRatio||e.oBackingStorePixelRatio||e.backingStorePixelRatio||1;return(window.devicePixelRatio||1)/t},n.paintCache=function(e){for(var t,r=this.paintCaches=this.paintCaches||[],n=!0,i=0;i<r.length;i++)if(t=r[i],t.context===e){n=!1;break}return n&&(t={context:e},r.push(t)),t},n.fillStyle=function(e,t,r,n,i){e.fillStyle="rgba("+t+","+r+","+n+","+i+")"},n.strokeStyle=function(e,t,r,n,i){e.strokeStyle="rgba("+t+","+r+","+n+","+i+")"},n.shadowStyle=function(e,t,r,n,i,a){var o=this.cy.zoom();r>0?(e.shadowBlur=n*o,e.shadowColor="rgba("+t[0]+","+t[1]+","+t[2]+","+r+")",e.shadowOffsetX=i*o,e.shadowOffsetY=a*o):(e.shadowBlur=0,e.shadowColor="transparent",e.shadowOffsetX=0,e.shadowOffsetY=0)},n.matchCanvasSize=function(e){var t=this,r=t.data,n=e.clientWidth,i=e.clientHeight,a=t.getPixelRatio(),o=t.motionBlurPxRatio;e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_NODE]&&e!==t.data.bufferCanvases[t.MOTIONBLUR_BUFFER_DRAG]||(a=o);var s,l=n*a,u=i*a;if(l!==t.canvasWidth||u!==t.canvasHeight){t.fontCaches=null;var c=r.canvasContainer;c.style.width=n+"px",c.style.height=i+"px";for(var d=0;d<t.CANVAS_LAYERS;d++)s=r.canvases[d],s.width===l&&s.height===u||(s.width=l,s.height=u,s.style.width=n+"px",s.style.height=i+"px");for(var d=0;d<t.BUFFER_COUNT;d++)s=r.bufferCanvases[d],s.width===l&&s.height===u||(s.width=l,s.height=u,s.style.width=n+"px",s.style.height=i+"px");t.textureMult=1,1>=a&&(s=r.bufferCanvases[t.TEXTURE_BUFFER],t.textureMult=2,s.width=l*t.textureMult,s.height=u*t.textureMult),t.canvasWidth=l,t.canvasHeight=u}},n.renderTo=function(e,t,r,n){this.render({forcedContext:e,forcedZoom:t,forcedPan:r,drawAllLayers:!0,forcedPxRatio:n})},n.render=function(e){function t(e,t,r,n,i){var a=e.globalCompositeOperation;e.globalCompositeOperation="destination-out",c.fillStyle(e,255,255,255,c.motionBlurTransparency),e.fillRect(t,r,n,i),e.globalCompositeOperation=a}function r(e,r){var i,a,s,d;c.clearingMotionBlur||e!==p.bufferContexts[c.MOTIONBLUR_BUFFER_NODE]&&e!==p.bufferContexts[c.MOTIONBLUR_BUFFER_DRAG]?(i=k,a=P,s=c.canvasWidth,d=c.canvasHeight):(i={x:S.x*y,y:S.y*y},a=_*y,s=c.canvasWidth*y,d=c.canvasHeight*y),e.setTransform(1,0,0,1,0,0),"motionBlur"===r?t(e,0,0,s,d):n||void 0!==r&&!r||e.clearRect(0,0,s,d),o||(e.translate(i.x,i.y),e.scale(a,a)),u&&e.translate(u.x,u.y),l&&e.scale(l,l)}e=e||i.staticEmptyObject();var n=e.forcedContext,o=e.drawAllLayers,s=e.drawOnlyNodeLayer,l=e.forcedZoom,u=e.forcedPan,c=this,d=void 0===e.forcedPxRatio?this.getPixelRatio():e.forcedPxRatio,h=c.cy,p=c.data,f=p.canvasNeedsRedraw,v=c.textureOnViewport&&!n&&(c.pinching||c.hoverData.dragging||c.swipePanning||c.data.wheelZooming),g=void 0!==e.motionBlur?e.motionBlur:c.motionBlur,y=c.motionBlurPxRatio,m=h.hasCompoundNodes(),b=c.hoverData.draggingEles,x=!(!c.hoverData.selecting&&!c.touchData.selecting);g=g&&!n&&c.motionBlurEnabled&&!x;var w=g;n||(c.prevPxRatio!==d&&(c.invalidateContainerClientCoordsCache(),c.matchCanvasSize(c.container),c.redrawHint("eles",!0),c.redrawHint("drag",!0)),c.prevPxRatio=d),!n&&c.motionBlurTimeout&&clearTimeout(c.motionBlurTimeout),g&&(null==c.mbFrames&&(c.mbFrames=0),c.drawingImage||c.mbFrames++,c.mbFrames<3&&(w=!1),c.mbFrames>c.minMbLowQualFrames&&(c.motionBlurPxRatio=c.mbPxRBlurry)),c.clearingMotionBlur&&(c.motionBlurPxRatio=1),c.textureDrawLastFrame&&!v&&(f[c.NODE]=!0,f[c.SELECT_BOX]=!0);var E=h.style()._private.coreStyle,_=h.zoom(),P=void 0!==l?l:_,S=h.pan(),k={x:S.x,y:S.y},T={zoom:_,pan:{x:S.x,y:S.y}},D=c.prevViewport,C=void 0===D||T.zoom!==D.zoom||T.pan.x!==D.pan.x||T.pan.y!==D.pan.y;C||b&&!m||(c.motionBlurPxRatio=1),u&&(k=u),P*=d,k.x*=d,k.y*=d;var M=c.getCachedZSortedEles();if(v||(c.textureDrawLastFrame=!1),v){c.textureDrawLastFrame=!0;var N;if(!c.textureCache){c.textureCache={},N=c.textureCache.bb=h.mutableElements().boundingBox(),c.textureCache.texture=c.data.bufferCanvases[c.TEXTURE_BUFFER];var B=c.data.bufferContexts[c.TEXTURE_BUFFER];B.setTransform(1,0,0,1,0,0),B.clearRect(0,0,c.canvasWidth*c.textureMult,c.canvasHeight*c.textureMult),c.render({forcedContext:B,drawOnlyNodeLayer:!0,forcedPxRatio:d*c.textureMult});var T=c.textureCache.viewport={zoom:h.zoom(),pan:h.pan(),width:c.canvasWidth,height:c.canvasHeight};T.mpan={x:(0-T.pan.x)/T.zoom,y:(0-T.pan.y)/T.zoom}}f[c.DRAG]=!1,f[c.NODE]=!1;var z=p.contexts[c.NODE],I=c.textureCache.texture,T=c.textureCache.viewport;N=c.textureCache.bb,z.setTransform(1,0,0,1,0,0),g?t(z,0,0,T.width,T.height):z.clearRect(0,0,T.width,T.height);var L=E["outside-texture-bg-color"].value,O=E["outside-texture-bg-opacity"].value;c.fillStyle(z,L[0],L[1],L[2],O),z.fillRect(0,0,T.width,T.height);var _=h.zoom();r(z,!1),z.clearRect(T.mpan.x,T.mpan.y,T.width/T.zoom/d,T.height/T.zoom/d),z.drawImage(I,T.mpan.x,T.mpan.y,T.width/T.zoom/d,T.height/T.zoom/d)}else c.textureOnViewport&&!n&&(c.textureCache=null);var A=h.extent(),R=c.pinching||c.hoverData.dragging||c.swipePanning||c.data.wheelZooming||c.hoverData.draggingEles,q=c.hideEdgesOnViewport&&R,V=[];if(V[c.NODE]=!f[c.NODE]&&g&&!c.clearedForMotionBlur[c.NODE]||c.clearingMotionBlur,V[c.NODE]&&(c.clearedForMotionBlur[c.NODE]=!0),V[c.DRAG]=!f[c.DRAG]&&g&&!c.clearedForMotionBlur[c.DRAG]||c.clearingMotionBlur,V[c.DRAG]&&(c.clearedForMotionBlur[c.DRAG]=!0),f[c.NODE]||o||s||V[c.NODE]){var F=g&&!V[c.NODE]&&1!==y,z=n||(F?c.data.bufferContexts[c.MOTIONBLUR_BUFFER_NODE]:p.contexts[c.NODE]),j=g&&!F?"motionBlur":void 0;r(z,j),q?c.drawCachedNodes(z,M.nondrag,d,A):c.drawLayeredElements(z,M.nondrag,d,A),o||g||(f[c.NODE]=!1)}if(!s&&(f[c.DRAG]||o||V[c.DRAG])){var F=g&&!V[c.DRAG]&&1!==y,z=n||(F?c.data.bufferContexts[c.MOTIONBLUR_BUFFER_DRAG]:p.contexts[c.DRAG]);r(z,g&&!F?"motionBlur":void 0),q?c.drawCachedNodes(z,M.drag,d,A):c.drawCachedElements(z,M.drag,d,A),o||g||(f[c.DRAG]=!1)}if(c.showFps||!s&&f[c.SELECT_BOX]&&!o){var z=n||p.contexts[c.SELECT_BOX];if(r(z),1==c.selection[4]&&(c.hoverData.selecting||c.touchData.selecting)){var _=c.cy.zoom(),X=E["selection-box-border-width"].value/_;z.lineWidth=X,z.fillStyle="rgba("+E["selection-box-color"].value[0]+","+E["selection-box-color"].value[1]+","+E["selection-box-color"].value[2]+","+E["selection-box-opacity"].value+")",z.fillRect(c.selection[0],c.selection[1],c.selection[2]-c.selection[0],c.selection[3]-c.selection[1]),X>0&&(z.strokeStyle="rgba("+E["selection-box-border-color"].value[0]+","+E["selection-box-border-color"].value[1]+","+E["selection-box-border-color"].value[2]+","+E["selection-box-opacity"].value+")",z.strokeRect(c.selection[0],c.selection[1],c.selection[2]-c.selection[0],c.selection[3]-c.selection[1]))}if(p.bgActivePosistion&&!c.hoverData.selecting){var _=c.cy.zoom(),Y=p.bgActivePosistion;z.fillStyle="rgba("+E["active-bg-color"].value[0]+","+E["active-bg-color"].value[1]+","+E["active-bg-color"].value[2]+","+E["active-bg-opacity"].value+")",z.beginPath(),z.arc(Y.x,Y.y,E["active-bg-size"].pfValue/_,0,2*Math.PI),z.fill()}var W=c.lastRedrawTime;if(c.showFps&&W){W=Math.round(W);var $=Math.round(1e3/W);z.setTransform(1,0,0,1,0,0),z.fillStyle="rgba(255, 0, 0, 0.75)",z.strokeStyle="rgba(255, 0, 0, 0.75)",z.lineWidth=1,z.fillText("1 frame = "+W+" ms = "+$+" fps",0,20);var H=60;z.strokeRect(0,30,250,20),z.fillRect(0,30,250*Math.min($/H,1),20)}o||(f[c.SELECT_BOX]=!1)}if(g&&1!==y){var U=p.contexts[c.NODE],Z=c.data.bufferCanvases[c.MOTIONBLUR_BUFFER_NODE],G=p.contexts[c.DRAG],Q=c.data.bufferCanvases[c.MOTIONBLUR_BUFFER_DRAG],K=function(e,r,n){e.setTransform(1,0,0,1,0,0),n||!w?e.clearRect(0,0,c.canvasWidth,c.canvasHeight):t(e,0,0,c.canvasWidth,c.canvasHeight);var i=y;e.drawImage(r,0,0,c.canvasWidth*i,c.canvasHeight*i,0,0,c.canvasWidth,c.canvasHeight)};(f[c.NODE]||V[c.NODE])&&(K(U,Z,V[c.NODE]),f[c.NODE]=!1),(f[c.DRAG]||V[c.DRAG])&&(K(G,Q,V[c.DRAG]),f[c.DRAG]=!1)}c.prevViewport=T,c.clearingMotionBlur&&(c.clearingMotionBlur=!1,c.motionBlurCleared=!0,c.motionBlur=!0),g&&(c.motionBlurTimeout=setTimeout(function(){c.motionBlurTimeout=null,c.clearedForMotionBlur[c.NODE]=!1,c.clearedForMotionBlur[c.DRAG]=!1,c.motionBlur=!1,c.clearingMotionBlur=!v,c.mbFrames=0,f[c.NODE]=!0,f[c.DRAG]=!0,c.redraw()},a)),c.drawingImage=!1,n||c.initrender||(c.initrender=!0,h.trigger("initrender")),n||h.trigger("render")},t.exports=n},{"../../../util":100}],71:[function(e,t,r){"use strict";var n=e("../../../math"),i={};i.drawPolygonPath=function(e,t,r,n,i,a){var o=n/2,s=i/2;e.beginPath&&e.beginPath(),e.moveTo(t+o*a[0],r+s*a[1]);for(var l=1;l<a.length/2;l++)e.lineTo(t+o*a[2*l],r+s*a[2*l+1]);e.closePath()},i.drawRoundRectanglePath=function(e,t,r,i,a){var o=i/2,s=a/2,l=n.getRoundRectangleRadius(i,a);e.beginPath&&e.beginPath(),e.moveTo(t,r-s),e.arcTo(t+o,r-s,t+o,r,l),e.arcTo(t+o,r+s,t,r+s,l),e.arcTo(t-o,r+s,t-o,r,l),e.arcTo(t-o,r-s,t,r-s,l),e.lineTo(t,r-s),e.closePath()};for(var a=Math.sin(0),o=Math.cos(0),s={},l={},u=Math.PI/40,c=0*Math.PI;c<2*Math.PI;c+=u)s[c]=Math.sin(c),l[c]=Math.cos(c);i.drawEllipsePath=function(e,t,r,n,i){if(e.beginPath&&e.beginPath(),e.ellipse)e.ellipse(t,r,n/2,i/2,0,0,2*Math.PI);else for(var c,d,h=n/2,p=i/2,f=0*Math.PI;f<2*Math.PI;f+=u)c=t-h*s[f]*a+h*l[f]*o,d=r+p*l[f]*a+p*s[f]*o,0===f?e.moveTo(c,d):e.lineTo(c,d);e.closePath()},t.exports=i},{"../../../math":85}],72:[function(e,t,r){"use strict";var n=e("../../../math"),i=e("../../../util"),a=e("../../../heap"),o=e("./texture-cache-defs"),s=25,l=50,u=-4,c=2,d=3.99,h=8,p=1024,f=1024,v=1024,g=.5,y=.8,m=10,b=!1,x=!1,w=.15,E=.1,_=.9,P=.9,S=100,k=1,T={dequeue:"dequeue",downscale:"downscale",highQuality:"highQuality"},D=function(e){var t=this;t.renderer=e,t.onDequeues=[],t.setupDequeueing()},C=D.prototype;C.reasons=T,C.getTextureQueue=function(e){var t=this;return t.eleImgCaches=t.eleImgCaches||{},t.eleImgCaches[e]=t.eleImgCaches[e]||[]},C.getRetiredTextureQueue=function(e){var t=this,r=t.eleImgCaches.retired=t.eleImgCaches.retired||{},n=r[e]=r[e]||[];return n},C.getElementQueue=function(){var e=this,t=e.eleCacheQueue=e.eleCacheQueue||new a(function(e,t){return t.reqs-e.reqs});return t},C.getElementIdToQueue=function(){var e=this,t=e.eleIdToCacheQueue=e.eleIdToCacheQueue||{};return t},C.getElement=function(e,t,r,i,a){var o=this,p=this.renderer,g=e._private.rscratch,y=p.cy.zoom();if(null==i&&(i=Math.ceil(n.log2(y*r))),u>i)i=u;else if(y>=d||i>c)return null;var m=Math.pow(2,i),w=t.h*m,E=t.w*m,_=g.imgCaches=g.imgCaches||{},P=_[i];if(P)return P;var S;if(S=s>=w?s:l>=w?l:Math.ceil(w/l)*l,w>v||E>f||!b&&e.isEdge()||!x&&e.isParent())return null;var k=o.getTextureQueue(S),D=k[k.length-2],C=function(){return o.recycleTexture(S,E)||o.addTexture(S,E)};D||(D=k[k.length-1]),D||(D=C()),D.width-D.usedWidth<E&&(D=C());for(var M,N=p.eleTextBiggerThanMin(e,m),B=function(e){return e&&e.scaledLabelShown===N},z=a&&a===T.dequeue,I=a&&a===T.highQuality,L=a&&a===T.downscale,O=i+1;c>=O;O++){var A=_[O];if(A){M=A;break}}var R=M&&M.level===i+1?M:null,q=function(){D.context.drawImage(R.texture.canvas,R.x,0,R.width,R.height,D.usedWidth,0,E,w)};if(B(R))q();else if(B(M)){if(!I)return o.queueElement(e,t,M.level-1),M;for(var O=M.level;O>i;O--)R=o.getElement(e,t,r,O,T.downscale);q()}else{var V;if(!z&&!I&&!L)for(var O=i-1;O>=u;O--){var A=_[O];if(A){V=A;break}}if(B(V))return o.queueElement(e,t,i),V;D.context.translate(D.usedWidth,0),D.context.scale(m,m),p.drawElement(D.context,e,t,N),D.context.scale(1/m,1/m),D.context.translate(-D.usedWidth,0)}return P=_[i]={ele:e,x:D.usedWidth,texture:D,level:i,scale:m,width:E,height:w,scaledLabelShown:N},D.usedWidth+=Math.ceil(E+h),D.eleCaches.push(P),o.checkTextureFullness(D),P},C.invalidateElement=function(e){var t=this,r=e._private.rscratch.imgCaches;if(r)for(var n=u;c>=n;n++){var a=r[n];if(a){var o=a.texture;o.invalidatedWidth+=a.width,r[n]=null,i.removeFromArray(o.eleCaches,a),t.checkTextureUtility(o)}}},C.checkTextureUtility=function(e){e.invalidatedWidth>=g*e.width&&this.retireTexture(e)},C.checkTextureFullness=function(e){var t=this,r=t.getTextureQueue(e.height);e.usedWidth/e.width>y&&e.fullnessChecks>=m?i.removeFromArray(r,e):e.fullnessChecks++},C.retireTexture=function(e){var t=this,r=e.height,n=t.getTextureQueue(r);i.removeFromArray(n,e),e.retired=!0;for(var a=e.eleCaches,o=0;o<a.length;o++){var s=a[o],l=s.ele,u=s.level,c=l._private.rscratch.imgCaches;c&&(c[u]=null)}i.clearArray(a);var d=t.getRetiredTextureQueue(r);d.push(e)},C.addTexture=function(e,t){var r=this,n=r.getTextureQueue(e),i={};return n.push(i),i.eleCaches=[],i.height=e,i.width=Math.max(p,t),i.usedWidth=0,i.invalidatedWidth=0,i.fullnessChecks=0,i.canvas=document.createElement("canvas"),i.canvas.width=i.width,i.canvas.height=i.height,i.context=i.canvas.getContext("2d"),i},C.recycleTexture=function(e,t){for(var r=this,n=r.getTextureQueue(e),a=r.getRetiredTextureQueue(e),o=0;o<a.length;o++){var s=a[o];if(s.width>=t)return s.retired=!1,s.usedWidth=0,s.invalidatedWidth=0,s.fullnessChecks=0,i.clearArray(s.eleCaches),s.context.clearRect(0,0,s.width,s.height),i.removeFromArray(a,s),n.push(s),s}},C.queueElement=function(e,t,r){var i=this,a=i.getElementQueue(),o=i.getElementIdToQueue(),s=e.id(),l=o[s];if(l)l.level=Math.max(l.level,r),l.reqs++,a.updateItem(l);else{var u={ele:e,bb:t,position:n.copyPosition(e.position()),level:r,reqs:1};e.isEdge()&&(u.positions={source:n.copyPosition(e.source().position()),target:n.copyPosition(e.target().position())}),a.push(u),o[s]=u}},C.dequeue=function(e,t){for(var r=this,i=r.getElementQueue(),a=r.getElementIdToQueue(),o=[],s=0;k>s&&i.size()>0;s++){var l=i.pop();a[l.ele.id()]=null,o.push(l);var u,c=l.ele;u=(!c.isEdge()||n.arePositionsSame(c.source().position(),l.positions.source)&&n.arePositionsSame(c.target().position(),l.positions.target))&&n.arePositionsSame(c.position(),l.position)?l.bb:c.boundingBox(),r.getElement(l.ele,u,e,l.level,T.dequeue)}return o},C.onDequeue=function(e){this.onDequeues.push(e)},C.offDequeue=function(e){i.removeFromArray(this.onDequeues,e)},C.setupDequeueing=o.setupDequeueing({deqRedrawThreshold:S,deqCost:w,deqAvgCost:E,deqNoDrawCost:_,deqFastCost:P,deq:function(e,t,r){return e.dequeue(t,r)},onDeqd:function(e,t){for(var r=0;r<e.onDequeues.length;r++){var n=e.onDequeues[r];n(t)}},shouldRedraw:function(e,t,r,i){for(var a=0;a<t.length;a++){var o=t[a].bb;if(n.boundingBoxesIntersect(o,i))return!0}return!1},priority:function(e){return e.renderer.beforeRenderPriorities.eleTxrDeq}}),t.exports=D},{"../../../heap":81,"../../../math":85,"../../../util":100,"./texture-cache-defs":77}],73:[function(e,t,r){"use strict";var n=e("../../../is"),i={};i.createBuffer=function(e,t){var r=document.createElement("canvas");return r.width=e,r.height=t,[r,r.getContext("2d")]},i.bufferCanvasImage=function(e){var t=this.cy,r=t.mutableElements(),i=r.boundingBox(),a=e.full?Math.ceil(i.w):this.container.clientWidth,o=e.full?Math.ceil(i.h):this.container.clientHeight,s=n.number(e.maxWidth)||n.number(e.maxHeight),l=this.getPixelRatio(),u=1;if(void 0!==e.scale)a*=e.scale,o*=e.scale,u=e.scale;else if(s){var c=1/0,d=1/0;n.number(e.maxWidth)&&(c=u*e.maxWidth/a),n.number(e.maxHeight)&&(d=u*e.maxHeight/o),u=Math.min(c,d),a*=u,o*=u}s||(a*=l,o*=l,u*=l);var h=document.createElement("canvas");h.width=a,h.height=o,h.style.width=a+"px",h.style.height=o+"px";var p=h.getContext("2d");if(a>0&&o>0){p.clearRect(0,0,a,o),e.bg&&(p.fillStyle=e.bg,p.rect(0,0,a,o),p.fill()),p.globalCompositeOperation="source-over";var f=this.getCachedZSortedEles();if(e.full)p.translate(-i.x1*u,-i.y1*u),p.scale(u,u),this.drawElements(p,f);else{var v=t.pan(),g={x:v.x*u,y:v.y*u};u*=t.zoom(),p.translate(g.x,g.y),p.scale(u,u),this.drawElements(p,f)}}return h},i.png=function(e){return this.bufferCanvasImage(e).toDataURL("image/png")},i.jpg=function(e){return this.bufferCanvasImage(e).toDataURL("image/jpeg")},t.exports=i},{"../../../is":83}],74:[function(e,t,r){"use strict";function n(e){var t=this;t.data={canvases:new Array(u.CANVAS_LAYERS),contexts:new Array(u.CANVAS_LAYERS),canvasNeedsRedraw:new Array(u.CANVAS_LAYERS),bufferCanvases:new Array(u.BUFFER_COUNT),bufferContexts:new Array(u.CANVAS_LAYERS)},t.data.canvasContainer=document.createElement("div");var r=t.data.canvasContainer.style;t.data.canvasContainer.setAttribute("style","-webkit-tap-highlight-color: rgba(0,0,0,0);"),r.position="relative",r.zIndex="0",r.overflow="hidden";var n=e.cy.container();n.appendChild(t.data.canvasContainer),n.setAttribute("style",(n.getAttribute("style")||"")+"-webkit-tap-highlight-color: rgba(0,0,0,0);");for(var i=0;i<u.CANVAS_LAYERS;i++){var l=t.data.canvases[i]=document.createElement("canvas");t.data.contexts[i]=l.getContext("2d"),l.setAttribute("style","-webkit-user-select: none; -moz-user-select: -moz-none; user-select: none; -webkit-tap-highlight-color: rgba(0,0,0,0); outline-style: none;"+(a.ms()?" -ms-touch-action: none; touch-action: none; ":"")),l.style.position="absolute",l.setAttribute("data-id","layer"+i),l.style.zIndex=String(u.CANVAS_LAYERS-i),t.data.canvasContainer.appendChild(l),t.data.canvasNeedsRedraw[i]=!1}t.data.topCanvas=t.data.canvases[0],t.data.canvases[u.NODE].setAttribute("data-id","layer"+u.NODE+"-node"),t.data.canvases[u.SELECT_BOX].setAttribute("data-id","layer"+u.SELECT_BOX+"-selectbox"),t.data.canvases[u.DRAG].setAttribute("data-id","layer"+u.DRAG+"-drag");for(var i=0;i<u.BUFFER_COUNT;i++)t.data.bufferCanvases[i]=document.createElement("canvas"),t.data.bufferContexts[i]=t.data.bufferCanvases[i].getContext("2d"),t.data.bufferCanvases[i].style.position="absolute",t.data.bufferCanvases[i].setAttribute("data-id","buffer"+i),t.data.bufferCanvases[i].style.zIndex=String(-i-1),t.data.bufferCanvases[i].style.visibility="hidden";t.pathsEnabled=!0,t.data.eleTxrCache=new o(t),t.data.lyrTxrCache=new s(t,t.data.eleTxrCache),t.onUpdateEleCalcs(function(e,r){for(var n=0;n<r.length;n++){var i=r[n],a=i._private.rstyle,o=a.dirtyEvents;i.isNode()&&o&&1===o.length&&o.position||t.data.eleTxrCache.invalidateElement(i)}r.length>0&&t.data.lyrTxrCache.invalidateElements(r)})}var i=e("../../../util"),a=e("../../../is"),o=e("./ele-texture-cache"),s=e("./layered-texture-cache"),l=n,u=n.prototype;u.CANVAS_LAYERS=3,u.SELECT_BOX=0,u.DRAG=1,u.NODE=2,u.BUFFER_COUNT=3,u.TEXTURE_BUFFER=0,u.MOTIONBLUR_BUFFER_NODE=1,u.MOTIONBLUR_BUFFER_DRAG=2,u.redrawHint=function(e,t){var r=this;switch(e){case"eles":r.data.canvasNeedsRedraw[u.NODE]=t;break;case"drag":r.data.canvasNeedsRedraw[u.DRAG]=t;break;case"select":r.data.canvasNeedsRedraw[u.SELECT_BOX]=t}};var c="undefined"!=typeof Path2D;u.path2dEnabled=function(e){return void 0===e?this.pathsEnabled:void(this.pathsEnabled=!!e)},u.usePaths=function(){return c&&this.pathsEnabled},[e("./arrow-shapes"),e("./drawing-elements"),e("./drawing-edges"),e("./drawing-images"),e("./drawing-label-text"),e("./drawing-nodes"),e("./drawing-redraw"),e("./drawing-shapes"),e("./export-image"),e("./node-shapes")].forEach(function(e){i.extend(u,e)}),t.exports=l},{"../../../is":83,"../../../util":100,"./arrow-shapes":64,"./drawing-edges":65,"./drawing-elements":66,"./drawing-images":67,"./drawing-label-text":68,"./drawing-nodes":69,"./drawing-redraw":70,"./drawing-shapes":71,"./ele-texture-cache":72,"./export-image":73,"./layered-texture-cache":75,"./node-shapes":76}],75:[function(e,t,r){"use strict";function n(e,t){null!=e.imageSmoothingEnabled?e.imageSmoothingEnabled=t:(e.webkitImageSmoothingEnabled=t,e.mozImageSmoothingEnabled=t,e.msImageSmoothingEnabled=t)}var i=e("../../../util"),a=e("../../../math"),o=e("../../../heap"),s=e("../../../is"),l=e("./texture-cache-defs"),u=1,c=-4,d=2,h=3.99,p=50,f=50,v=!0,g=.15,y=.1,m=.9,b=.9,x=1,w=250,E=16e6,_=!0,P=!0,S=!0,k=function(e,t){var r=this,n=r.renderer=e;r.layersByLevel={},r.firstGet=!0,r.lastInvalidationTime=i.performanceNow()-2*w,r.skipping=!1,n.beforeRender(function(e,t){t-r.lastInvalidationTime<=w?r.skipping=!0:r.skipping=!1});var a=function(e,t){return t.reqs-e.reqs};r.layersQueue=new o(a),r.eleTxrCache=t,r.setupEleCacheInvalidation(),r.setupDequeueing()},T=k.prototype,D=0,C=Math.pow(2,53)-1;T.makeLayer=function(e,t){var r=Math.pow(2,t),n=Math.ceil(e.w*r),i=Math.ceil(e.h*r),a=document.createElement("canvas");a.width=n,a.height=i;var o={id:D=++D%C,bb:e,level:t,width:n,height:i,canvas:a,context:a.getContext("2d"),eles:[],elesQueue:[],reqs:0},s=o.context,l=-o.bb.x1,u=-o.bb.y1;return s.scale(r,r),s.translate(l,u),o},T.getLayers=function(e,t,r){var n=this,o=n.renderer,s=o.cy,l=s.zoom(),p=n.firstGet;if(n.firstGet=!1,null==r)if(r=Math.ceil(a.log2(l*t)),c>r)r=c;else if(l>=h||r>d)return null;n.validateLayersElesOrdering(r,e);var f,v,g=n.layersByLevel,y=Math.pow(2,r),m=g[r]=g[r]||[],b=n.levelIsComplete(r,e),x=function(){var t=function(t){return n.validateLayersElesOrdering(t,e),n.levelIsComplete(t,e)?(v=g[t],!0):void 0},a=function(e){if(!v)for(var n=r+e;n>=c&&d>=n&&!t(n);n+=e);};a(1),a(-1);for(var o=m.length-1;o>=0;o--){var s=m[o];s.invalid&&i.removeFromArray(m,s)}};if(b)return m;x();var w=function(){if(!f){f=a.makeBoundingBox();for(var t=0;t<e.length;t++)a.updateBoundingBox(f,e[t].boundingBox())}return f},P=function(e){e=e||{};var t=e.after;w();var i=f.w*y*(f.h*y);if(i>E)return null;var a=n.makeLayer(f,r);if(null!=t){var o=m.indexOf(t)+1;m.splice(o,0,a)}else(void 0===e.insert||e.insert)&&m.unshift(a);return a};if(n.skipping&&!p)return null;for(var S=null,k=e.length/u,T=_&&!p,D=0;D<e.length;D++){var C=e[D],M=C._private.rscratch,N=M.imgLayerCaches=M.imgLayerCaches||{},B=N[r];if(B)S=B;else{if((!S||S.eles.length>=k||u>1&&!a.boundingBoxInBoundingBox(S.bb,C.boundingBox()))&&(S=P({insert:!0,after:S}),!S))return null;v||T?n.queueLayer(S,C):n.drawEleInLayer(S,C,r,t),S.eles.push(C),N[r]=S}}return v?v:T?null:m},T.getEleLevelForLayerLevel=function(e,t){return e},T.drawEleInLayer=function(e,t,r,i){var a=this,o=this.renderer,s=e.context,l=t.boundingBox(),u=a.eleTxrCache,c=P?u.reasons.highQuality:void 0;r=a.getEleLevelForLayerLevel(r,i);var d=S?u.getElement(t,l,null,r,c):null;d?(v&&n(s,!1),s.drawImage(d.texture.canvas,d.x,0,d.width,d.height,l.x1,l.y1,l.w,l.h),v&&n(s,!0)):o.drawElement(s,t)},T.levelIsComplete=function(e,t){var r=this,n=r.layersByLevel[e];if(!n||0===n.length)return!1;for(var i=0,a=0;a<n.length;a++){var o=n[a];if(o.reqs>0)return!1;if(o.invalid)return!1;i+=o.eles.length}return i===t.length},T.validateLayersElesOrdering=function(e,t){var r=this.layersByLevel[e];if(r)for(var n=0;n<r.length;n++){for(var i=r[n],a=-1,o=0;o<t.length;o++)if(i.eles[0]===t[o]){a=o;break}if(0>a)this.invalidateLayer(i);else for(var s=a,o=0;o<i.eles.length;o++)if(i.eles[o]!==t[s+o]){this.invalidateLayer(i);break}}},T.updateElementsInLayers=function(e,t){for(var r=this,n=s.element(e[0]),i=0;i<e.length;i++)for(var a=n?null:e[i],o=n?e[i]:e[i].ele,l=o._private.rscratch,u=l.imgLayerCaches=l.imgLayerCaches||{},h=c;d>=h;h++){var p=u[h];p&&(a&&r.getEleLevelForLayerLevel(p.level)!==a.level||t(p,o,a))}},T.haveLayers=function(){for(var e=this,t=!1,r=c;d>=r;r++){var n=e.layersByLevel[r];if(n&&n.length>0){t=!0;break}}return t},T.invalidateElements=function(e){var t=this;t.lastInvalidationTime=i.performanceNow(),0!==e.length&&t.haveLayers()&&t.updateElementsInLayers(e,function(e,r,n){t.invalidateLayer(e)})},T.invalidateLayer=function(e){if(this.lastInvalidationTime=i.performanceNow(),!e.invalid){var t=e.level,r=e.eles,n=this.layersByLevel[t];i.removeFromArray(n,e),e.elesQueue=[],e.invalid=!0,e.replacement&&(e.replacement.invalid=!0);for(var a=0;a<r.length;a++){var o=r[a]._private.rscratch.imgLayerCaches;o&&(o[t]=null)}}},T.refineElementTextures=function(e){var t=this;t.updateElementsInLayers(e,function(e,r,n){var i=e.replacement;if(i||(i=e.replacement=t.makeLayer(e.bb,e.level),i.replaces=e,i.eles=e.eles),!i.reqs)for(var a=0;a<i.eles.length;a++)t.queueLayer(i,i.eles[a])})},T.setupEleCacheInvalidation=function(){var e=this,t=[];if(S){var r=i.debounce(function(){e.refineElementTextures(t),t=[]},f);e.eleTxrCache.onDequeue(function(e){for(var n=0;n<e.length;n++)t.push(e[n]);r()})}},T.queueLayer=function(e,t){var r=this,n=r.layersQueue,i=e.elesQueue,a=i.hasId=i.hasId||{};if(!e.replacement){if(t){if(a[t.id()])return;i.push(t),a[t.id()]=!0}e.reqs?(e.reqs++,n.updateItem(e)):(e.reqs=1,n.push(e))}},T.dequeue=function(e){for(var t=this,r=t.layersQueue,n=[],i=0;x>i&&0!==r.size();){var a=r.peek();if(a.replacement)r.pop();else if(a.replaces&&a!==a.replaces.replacement)r.pop();else if(a.invalid)r.pop();else{var o=a.elesQueue.shift();o&&(t.drawEleInLayer(a,o,a.level,e),i++),0===n.length&&n.push(!0),0===a.elesQueue.length&&(r.pop(),a.reqs=0,a.replaces&&t.applyLayerReplacement(a),t.requestRedraw())}}return n},T.applyLayerReplacement=function(e){var t=this,r=t.layersByLevel[e.level],n=e.replaces,i=r.indexOf(n);if(!(0>i||n.invalid)){r[i]=e;for(var a=0;a<e.eles.length;a++){var o=e.eles[a]._private,s=o.imgLayerCaches=o.imgLayerCaches||{};s&&(s[e.level]=e)}t.requestRedraw()}},T.requestRedraw=i.debounce(function(){var e=this.renderer;e.redrawHint("eles",!0),e.redrawHint("drag",!0),e.redraw()},100),T.setupDequeueing=l.setupDequeueing({deqRedrawThreshold:p,deqCost:g,deqAvgCost:y,deqNoDrawCost:m,deqFastCost:b,deq:function(e,t){return e.dequeue(t)},onDeqd:i.noop,shouldRedraw:i.trueify,priority:function(e){return e.renderer.beforeRenderPriorities.lyrTxrDeq}}),t.exports=k},{"../../../heap":81,"../../../is":83,"../../../math":85,"../../../util":100,"./texture-cache-defs":77}],76:[function(e,t,r){"use strict";var n={};n.nodeShapeImpl=function(e,t,r,n,i,a,o){switch(e){case"ellipse":return this.drawEllipsePath(t,r,n,i,a);case"polygon":return this.drawPolygonPath(t,r,n,i,a,o);case"roundrectangle":return this.drawRoundRectanglePath(t,r,n,i,a)}},t.exports=n},{}],77:[function(e,t,r){"use strict";var n=e("../../../util"),i=1e3/60;t.exports={setupDequeueing:function(e){return function(){var t=this,r=this.renderer;if(!t.dequeueingSetup){t.dequeueingSetup=!0;var a=n.debounce(function(){r.redrawHint("eles",!0),r.redrawHint("drag",!0),r.redraw()},e.deqRedrawThreshold),o=function(o,s){for(var l=n.performanceNow(),u=r.averageRedrawTime,c=r.lastRedrawTime,d=[],h=r.cy.extent(),p=r.getPixelRatio();;){var f=n.performanceNow(),v=f-l,g=f-s;if(i>c){var y=i-(o?u:0);if(g>=e.deqFastCost*y)break}else if(o){if(v>=e.deqCost*c||v>=e.deqAvgCost*u)break}else if(g>=e.deqNoDrawCost*i)break;var m=e.deq(t,p,h);if(!(m.length>0))break;for(var b=0;b<m.length;b++)d.push(m[b])}d.length>0&&(e.onDeqd(t,d),!o&&e.shouldRedraw(t,d,p,h)&&a())},s=e.priority||n.noop;r.beforeRender(o,s(t))}}}}},{"../../../util":100}],78:[function(e,t,r){"use strict";t.exports=[{name:"null",impl:e("./null")},{name:"base",impl:e("./base")},{name:"canvas",impl:e("./canvas")}]},{"./base":60,"./canvas":74,"./null":79}],79:[function(e,t,r){"use strict";function n(e){this.options=e,this.notifications=0}var i=function(){};n.prototype={recalculateRenderedStyle:i,notify:function(){this.notifications++},init:i},t.exports=n},{}],80:[function(e,t,r){/*! Weaver licensed under MIT (https://tldrlegal.com/license/mit-license), copyright Max Franz */
-"use strict";var n=e("./is"),i=e("./util"),a=e("./thread"),o=e("./promise"),s=e("./define"),l=function(t){if(!(this instanceof l))return new l(t);this._private={pass:[]};var r=4;if(n.number(t),"undefined"!=typeof navigator&&null!=navigator.hardwareConcurrency)t=navigator.hardwareConcurrency;else try{t=e("os").cpus().length}catch(i){t=r}for(var o=0;t>o;o++)this[o]=new a;this.length=t},u=l.prototype;i.extend(u,{instanceString:function(){return"fabric"},require:function(e,t){for(var r=0;r<this.length;r++){var n=this[r];n.require(e,t)}return this},random:function(){var e=Math.round((this.length-1)*Math.random()),t=this[e];return t},run:function(e){var t=this._private.pass.shift();return this.random().pass(t).run(e)},message:function(e){return this.random().message(e)},broadcast:function(e){for(var t=0;t<this.length;t++){var r=this[t];r.message(e)}return this},stop:function(){for(var e=0;e<this.length;e++){var t=this[e];t.stop()}return this},pass:function(e){var t=this._private.pass;if(!n.array(e))throw"Only arrays may be used with fabric.pass()";return t.push(e),this},spreadSize:function(){var e=Math.ceil(this._private.pass[0].length/this.length);return e=Math.max(1,e)},spread:function(e){for(var t=this,r=t._private,n=t.spreadSize(),i=r.pass.shift().concat([]),a=[],s=0;s<this.length;s++){var l=this[s],u=i.splice(0,n),c=l.pass(u).run(e);a.push(c);var d=0===i.length;if(d)break}return o.all(a).then(function(e){for(var t=[],r=0,n=0;n<e.length;n++)for(var i=e[n],a=0;a<i.length;a++){var o=i[a];t[r++]=o}return t})},map:function(e){var t=this;return t.require(e,"_$_$_fabmap"),t.spread(function(e){var t=[],r=resolve;resolve=function(e){t.push(e)};for(var n=0;n<e.length;n++){var i=t.length,a=_$_$_fabmap(e[n]),o=i===t.length;o&&t.push(a)}return resolve=r,t})},filter:function(e){var t=this._private,r=t.pass[0];return this.map(e).then(function(e){for(var t=[],n=0;n<r.length;n++){var i=r[n],a=e[n];a&&t.push(i)}return t})},sort:function(e){var t=this,r=this._private.pass[0].length,n=this.spreadSize();return e=e||function(e,t){return t>e?-1:e>t?1:0},t.require(e,"_$_$_cmp"),t.spread(function(e){var t=e.sort(_$_$_cmp);resolve(t)}).then(function(t){for(var i=function(n,i,a){i=Math.min(i,r),a=Math.min(a,r);for(var o=n,s=i,l=[],u=o;a>u;u++){var c=t[n],d=t[i];s>n&&(i>=a||e(c,d)<=0)?(l.push(c),n++):(l.push(d),i++)}for(var u=0;u<l.length;u++){var h=o+u;t[h]=l[u]}},a=n;r>a;a*=2)for(var o=0;r>o;o+=2*a)i(o,o+a,o+2*a);return t})}});var c=function(e){return e=e||{},function(t,r){var n=this._private.pass.shift();return this.random().pass(n)[e.threadFn](t,r)}};i.extend(u,{randomMap:c({threadFn:"map"}),reduce:c({threadFn:"reduce"}),reduceRight:c({threadFn:"reduceRight"})});var d=u;d.promise=d.run,d.terminate=d.halt=d.stop,d.include=d.require,i.extend(u,{on:s.on(),one:s.on({unbindSelfOnTrigger:!0}),off:s.off(),trigger:s.trigger()}),s.eventAliasesOn(u),t.exports=l},{"./define":44,"./is":83,"./promise":86,"./thread":98,"./util":100,os:void 0}],81:[function(e,t,r){/*!
-Ported by Xueqiao Xu <xueqiaoxu@gmail.com>;
-
-PSF LICENSE AGREEMENT FOR PYTHON 2.7.2
-
-1. This LICENSE AGREEMENT is between the Python Software Foundation (“PSFâ€), and the Individual or Organization (“Licenseeâ€) accessing and otherwise using Python 2.7.2 software in source or binary form and its associated documentation.
-2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 2.7.2 alone or in any derivative version, provided, however, that PSF’s License Agreement and PSF’s notice of copyright, i.e., “Copyright © 2001-2012 Python Software Foundation; All Rights Reserved†are retained in Python 2.7.2 alone or in any derivative version prepared by Licensee.
-3. In the event Licensee prepares a derivative work that is based on or incorporates Python 2.7.2 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 2.7.2.
-4. PSF is making Python 2.7.2 available to Licensee on an “AS IS†basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.7.2 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
-5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 2.7.2 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.7.2, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
-6. This License Agreement will automatically terminate upon a material breach of its terms and conditions.
-7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party.
-8. By copying, installing or otherwise using Python 2.7.2, Licensee agrees to be bound by the terms and conditions of this License Agreement.
-*/
-"use strict";(function(){var e,n,i,a,o,s,l,u,c,d,h,p,f,v,g;i=Math.floor,d=Math.min,n=function(e,t){return t>e?-1:e>t?1:0},c=function(e,t,r,a,o){var s;if(null==r&&(r=0),null==o&&(o=n),0>r)throw new Error("lo must be non-negative");for(null==a&&(a=e.length);a>r;)s=i((r+a)/2),o(t,e[s])<0?a=s:r=s+1;return[].splice.apply(e,[r,r-r].concat(t)),t},s=function(e,t,r){return null==r&&(r=n),e.push(t),v(e,0,e.length-1,r)},o=function(e,t){var r,i;return null==t&&(t=n),r=e.pop(),e.length?(i=e[0],e[0]=r,g(e,0,t)):i=r,i},u=function(e,t,r){var i;return null==r&&(r=n),i=e[0],e[0]=t,g(e,0,r),i},l=function(e,t,r){var i;return null==r&&(r=n),e.length&&r(e[0],t)<0&&(i=[e[0],t],t=i[0],e[0]=i[1],g(e,0,r)),t},a=function(e,t){var r,a,o,s,l,u;for(null==t&&(t=n),s=function(){u=[];for(var t=0,r=i(e.length/2);r>=0?r>t:t>r;r>=0?t++:t--)u.push(t);return u}.apply(this).reverse(),l=[],a=0,o=s.length;o>a;a++)r=s[a],l.push(g(e,r,t));return l},f=function(e,t,r){var i;return null==r&&(r=n),i=e.indexOf(t),-1!==i?(v(e,0,i,r),g(e,i,r)):void 0},h=function(e,t,r){var i,o,s,u,c;if(null==r&&(r=n),o=e.slice(0,t),!o.length)return o;for(a(o,r),c=e.slice(t),s=0,u=c.length;u>s;s++)i=c[s],l(o,i,r);return o.sort(r).reverse()},p=function(e,t,r){var i,s,l,u,h,p,f,v,g,y;if(null==r&&(r=n),10*t<=e.length){if(u=e.slice(0,t).sort(r),!u.length)return u;for(l=u[u.length-1],v=e.slice(t),h=0,f=v.length;f>h;h++)i=v[h],r(i,l)<0&&(c(u,i,0,null,r),u.pop(),l=u[u.length-1]);return u}for(a(e,r),y=[],s=p=0,g=d(t,e.length);g>=0?g>p:p>g;s=g>=0?++p:--p)y.push(o(e,r));return y},v=function(e,t,r,i){var a,o,s;for(null==i&&(i=n),a=e[r];r>t&&(s=r-1>>1,o=e[s],i(a,o)<0);)e[r]=o,r=s;return e[r]=a},g=function(e,t,r){var i,a,o,s,l;for(null==r&&(r=n),a=e.length,l=t,o=e[t],i=2*t+1;a>i;)s=i+1,a>s&&!(r(e[i],e[s])<0)&&(i=s),e[t]=e[i],t=i,i=2*t+1;return e[t]=o,v(e,l,t,r)},e=function(){function e(e){this.cmp=null!=e?e:n,this.nodes=[]}return e.push=s,e.pop=o,e.replace=u,e.pushpop=l,e.heapify=a,e.updateItem=f,e.nlargest=h,e.nsmallest=p,e.prototype.push=function(e){return s(this.nodes,e,this.cmp)},e.prototype.pop=function(){return o(this.nodes,this.cmp)},e.prototype.peek=function(){return this.nodes[0]},e.prototype.contains=function(e){return-1!==this.nodes.indexOf(e)},e.prototype.replace=function(e){return u(this.nodes,e,this.cmp)},e.prototype.pushpop=function(e){return l(this.nodes,e,this.cmp)},e.prototype.heapify=function(){return a(this.nodes,this.cmp)},e.prototype.updateItem=function(e){return f(this.nodes,e,this.cmp)},e.prototype.clear=function(){return this.nodes=[]},e.prototype.empty=function(){return 0===this.nodes.length},e.prototype.size=function(){return this.nodes.length},e.prototype.clone=function(){var t;return t=new e,t.nodes=this.nodes.slice(0),t},e.prototype.toArray=function(){return this.nodes.slice(0)},e.prototype.insert=e.prototype.push,e.prototype.top=e.prototype.peek,e.prototype.front=e.prototype.peek,e.prototype.has=e.prototype.contains,e.prototype.copy=e.prototype.clone,e}(),function(e,n){return"function"==typeof define&&define.amd?define([],n):"object"==typeof r?t.exports=n():e.Heap=n()}(this,function(){return e})}).call(this)},{}],82:[function(e,t,r){"use strict";e("./-preamble");var n=e("./window"),i=e("./is"),a=e("./core"),o=e("./extension"),s=e("./jquery-plugin"),l=e("./stylesheet"),u=e("./thread"),c=e("./fabric"),d=function(e){return void 0===e&&(e={}),i.plainObject(e)?new a(e):i.string(e)?o.apply(o,arguments):void 0};d.version=e("./version.json"),n&&n.jQuery&&s(n.jQuery,d),d.registerJquery=function(e){s(e,d)},d.stylesheet=d.Stylesheet=l,d.thread=d.Thread=u,d.fabric=d.Fabric=c,t.exports=d},{"./-preamble":1,"./core":37,"./extension":46,"./fabric":80,"./is":83,"./jquery-plugin":84,"./stylesheet":97,"./thread":98,"./version.json":106,"./window":107}],83:[function(e,t,r){"use strict";var n=e("./window"),i=n?n.navigator:null,a=n?n.document:null,o="string",s=typeof{},l="function",u=typeof HTMLElement,c=function(e){return e&&e.instanceString&&d.fn(e.instanceString)?e.instanceString():null},d={defined:function(e){return null!=e},string:function(e){return null!=e&&typeof e==o},fn:function(e){return null!=e&&typeof e===l},array:function(e){return Array.isArray?Array.isArray(e):null!=e&&e instanceof Array},plainObject:function(e){return null!=e&&typeof e===s&&!d.array(e)&&e.constructor===Object},object:function(e){return null!=e&&typeof e===s},number:function(e){return null!=e&&"number"==typeof e&&!isNaN(e)},integer:function(e){return d.number(e)&&Math.floor(e)===e},bool:function(e){return null!=e&&typeof e==typeof!0},htmlElement:function(e){return"undefined"===u?void 0:null!=e&&e instanceof HTMLElement},elementOrCollection:function(e){return d.element(e)||d.collection(e)},element:function(e){return"collection"===c(e)&&e._private.single},collection:function(e){return"collection"===c(e)&&!e._private.single},core:function(e){return"core"===c(e)},style:function(e){return"style"===c(e)},stylesheet:function(e){return"stylesheet"===c(e)},event:function(e){return"event"===c(e)},thread:function(e){return"thread"===c(e)},fabric:function(e){return"fabric"===c(e)},emptyString:function(e){return void 0===e||null===e?!0:!(""!==e&&!e.match(/^\s+$/))},nonemptyString:function(e){return!(!e||!d.string(e)||""===e||e.match(/^\s+$/))},domElement:function(e){return"undefined"==typeof HTMLElement?!1:e instanceof HTMLElement},boundingBox:function(e){return d.plainObject(e)&&d.number(e.x1)&&d.number(e.x2)&&d.number(e.y1)&&d.number(e.y2)},promise:function(e){return d.object(e)&&d.fn(e.then)},touch:function(){return n&&("ontouchstart"in n||n.DocumentTouch&&a instanceof DocumentTouch)},gecko:function(){return n&&("undefined"!=typeof InstallTrigger||"MozAppearance"in a.documentElement.style)},webkit:function(){return n&&("undefined"!=typeof webkitURL||"WebkitAppearance"in a.documentElement.style)},chromium:function(){return n&&"undefined"!=typeof chrome},khtml:function(){return i&&i.vendor.match(/kde/i)},khtmlEtc:function(){return d.khtml()||d.webkit()||d.chromium()},ms:function(){return i&&i.userAgent.match(/msie|trident|edge/i)},windows:function(){return i&&i.appVersion.match(/Win/i)},mac:function(){return i&&i.appVersion.match(/Mac/i)},linux:function(){return i&&i.appVersion.match(/Linux/i)},unix:function(){return i&&i.appVersion.match(/X11/i)}};t.exports=d},{"./window":107}],84:[function(e,t,r){"use strict";var n=e("./is"),i=function(e){var t=e[0]._cyreg=e[0]._cyreg||{};return t},a=function(e,t){e&&(e.fn.cytoscape||(e.fn.cytoscape=function(r){var a=e(this);if("get"===r)return i(a).cy;if(n.fn(r)){var o=r,s=i(a).cy;if(s&&s.isReady())s.trigger("ready",[],o);else{var l=i(a),u=l.readies=l.readies||[];u.push(o)}}else if(n.plainObject(r))return a.each(function(){var n=e.extend({},r,{container:e(this)[0]});t(n)})},e.cytoscape=t,null==e.fn.cy&&null==e.cy&&(e.fn.cy=e.fn.cytoscape,e.cy=e.cytoscape)))};t.exports=a},{"./is":83}],85:[function(e,t,r){"use strict";var n={};n.arePositionsSame=function(e,t){return e.x===t.x&&e.y===t.y},n.copyPosition=function(e){return{x:e.x,y:e.y}},n.array2point=function(e){return{x:e[0],y:e[1]}},n.deg2rad=function(e){return Math.PI*e/180},n.log2=Math.log2||function(e){return Math.log(e)/Math.log(2)},n.signum=function(e){return e>0?1:0>e?-1:0},n.dist=function(e,t){return Math.sqrt(n.sqdist(e,t))},n.sqdist=function(e,t){var r=t.x-e.x,n=t.y-e.y;return r*r+n*n},n.qbezierAt=function(e,t,r,n){return(1-n)*(1-n)*e+2*(1-n)*n*t+n*n*r},n.qbezierPtAt=function(e,t,r,i){return{x:n.qbezierAt(e.x,t.x,r.x,i),y:n.qbezierAt(e.y,t.y,r.y,i)}},n.lineAt=function(e,t,r,i){var a={x:t.x-e.x,y:t.y-e.y},o=n.dist(e,t),s={x:a.x/o,y:a.y/o};r=null==r?0:r;var i=null!=i?i:r*o;return{x:e.x+s.x*i,y:e.y+s.y*i}},n.lineAtDist=function(e,t,r){return n.lineAt(e,t,void 0,r)},n.triangleAngle=function(e,t,r){var i=n.dist(t,r),a=n.dist(e,r),o=n.dist(e,t);return Math.acos((i*i+a*a-o*o)/(2*i*a))},n.bound=function(e,t,r){return Math.max(e,Math.min(r,t))},n.makeBoundingBox=function(e){if(null==e)return{x1:1/0,y1:1/0,x2:-(1/0),y2:-(1/0),w:0,h:0};if(null!=e.x1&&null!=e.y1){if(null!=e.x2&&null!=e.y2&&e.x2>=e.x1&&e.y2>=e.y1)return{x1:e.x1,y1:e.y1,x2:e.x2,y2:e.y2,w:e.x2-e.x1,h:e.y2-e.y1};if(null!=e.w&&null!=e.h&&e.w>=0&&e.h>=0)return{x1:e.x1,y1:e.y1,x2:e.x1+e.w,y2:e.y1+e.h,w:e.w,h:e.h}}},n.updateBoundingBox=function(e,t){e.x1=Math.min(e.x1,t.x1),e.x2=Math.max(e.x2,t.x2),e.w=e.x2-e.x1,e.y1=Math.min(e.y1,t.y1),e.y2=Math.max(e.y2,t.y2),e.h=e.y2-e.y1},n.expandBoundingBox=function(e,t){return e.x1-=t,e.x2+=t,e.y1-=t,e.y2+=t,e.w=e.x2-e.x1,e.h=e.y2-e.y1,e},n.boundingBoxesIntersect=function(e,t){return e.x1>t.x2?!1:t.x1>e.x2?!1:e.x2<t.x1?!1:t.x2<e.x1?!1:e.y2<t.y1?!1:t.y2<e.y1?!1:e.y1>t.y2?!1:!(t.y1>e.y2)},n.inBoundingBox=function(e,t,r){return e.x1<=t&&t<=e.x2&&e.y1<=r&&r<=e.y2},n.pointInBoundingBox=function(e,t){return this.inBoundingBox(e,t.x,t.y)},n.boundingBoxInBoundingBox=function(e,t){return n.inBoundingBox(e,t.x1,t.y1)&&n.inBoundingBox(e,t.x2,t.y2)},n.roundRectangleIntersectLine=function(e,t,r,n,i,a,o){var s,l=this.getRoundRectangleRadius(i,a),u=i/2,c=a/2,d=r-u+l-o,h=n-c-o,p=r+u-l+o,f=h;if(s=this.finiteLinesIntersect(e,t,r,n,d,h,p,f,!1),s.length>0)return s;var v=r+u+o,g=n-c+l-o,y=v,m=n+c-l+o;if(s=this.finiteLinesIntersect(e,t,r,n,v,g,y,m,!1),s.length>0)return s;var b=r-u+l-o,x=n+c+o,w=r+u-l+o,E=x;if(s=this.finiteLinesIntersect(e,t,r,n,b,x,w,E,!1),s.length>0)return s;var _=r-u-o,P=n-c+l-o,S=_,k=n+c-l+o;if(s=this.finiteLinesIntersect(e,t,r,n,_,P,S,k,!1),s.length>0)return s;var T,D=r-u+l,C=n-c+l;if(T=this.intersectLineCircle(e,t,r,n,D,C,l+o),T.length>0&&T[0]<=D&&T[1]<=C)return[T[0],T[1]];var M=r+u-l,N=n-c+l;if(T=this.intersectLineCircle(e,t,r,n,M,N,l+o),T.length>0&&T[0]>=M&&T[1]<=N)return[T[0],T[1]];var B=r+u-l,z=n+c-l;if(T=this.intersectLineCircle(e,t,r,n,B,z,l+o),T.length>0&&T[0]>=B&&T[1]>=z)return[T[0],T[1]];var I=r-u+l,L=n+c-l;return T=this.intersectLineCircle(e,t,r,n,I,L,l+o),T.length>0&&T[0]<=I&&T[1]>=L?[T[0],T[1]]:[]},n.inLineVicinity=function(e,t,r,n,i,a,o){var s=o,l=Math.min(r,i),u=Math.max(r,i),c=Math.min(n,a),d=Math.max(n,a);return e>=l-s&&u+s>=e&&t>=c-s&&d+s>=t},n.inBezierVicinity=function(e,t,r,n,i,a,o,s,l){var u={x1:Math.min(r,o,i)-l,x2:Math.max(r,o,i)+l,y1:Math.min(n,s,a)-l,y2:Math.max(n,s,a)+l};return!(e<u.x1||e>u.x2||t<u.y1||t>u.y2)},n.solveCubic=function(e,t,r,n,i){t/=e,r/=e,n/=e;var a,o,s,l,u,c,d,h;return o=(3*r-t*t)/9,s=-(27*n)+t*(9*r-2*(t*t)),s/=54,a=o*o*o+s*s,i[1]=0,d=t/3,a>0?(u=s+Math.sqrt(a),u=0>u?-Math.pow(-u,1/3):Math.pow(u,1/3),c=s-Math.sqrt(a),c=0>c?-Math.pow(-c,1/3):Math.pow(c,1/3),i[0]=-d+u+c,d+=(u+c)/2,i[4]=i[2]=-d,d=Math.sqrt(3)*(-c+u)/2,i[3]=d,void(i[5]=-d)):(i[5]=i[3]=0,0===a?(h=0>s?-Math.pow(-s,1/3):Math.pow(s,1/3),i[0]=-d+2*h,void(i[4]=i[2]=-(h+d))):(o=-o,l=o*o*o,l=Math.acos(s/Math.sqrt(l)),h=2*Math.sqrt(o),i[0]=-d+h*Math.cos(l/3),i[2]=-d+h*Math.cos((l+2*Math.PI)/3),void(i[4]=-d+h*Math.cos((l+4*Math.PI)/3))))},n.sqdistToQuadraticBezier=function(e,t,r,n,i,a,o,s){var l=1*r*r-4*r*i+2*r*o+4*i*i-4*i*o+o*o+n*n-4*n*a+2*n*s+4*a*a-4*a*s+s*s,u=9*r*i-3*r*r-3*r*o-6*i*i+3*i*o+9*n*a-3*n*n-3*n*s-6*a*a+3*a*s,c=3*r*r-6*r*i+r*o-r*e+2*i*i+2*i*e-o*e+3*n*n-6*n*a+n*s-n*t+2*a*a+2*a*t-s*t,d=1*r*i-r*r+r*e-i*e+n*a-n*n+n*t-a*t,h=[];this.solveCubic(l,u,c,d,h);for(var p=1e-7,f=[],v=0;6>v;v+=2)Math.abs(h[v+1])<p&&h[v]>=0&&h[v]<=1&&f.push(h[v]);f.push(1),f.push(0);for(var g,y,m,b,x=-1,w=0;w<f.length;w++)y=Math.pow(1-f[w],2)*r+2*(1-f[w])*f[w]*i+f[w]*f[w]*o,m=Math.pow(1-f[w],2)*n+2*(1-f[w])*f[w]*a+f[w]*f[w]*s,b=Math.pow(y-e,2)+Math.pow(m-t,2),x>=0?x>b&&(x=b,g=f[w]):(x=b,g=f[w]);return x},n.sqdistToFiniteLine=function(e,t,r,n,i,a){var o=[e-r,t-n],s=[i-r,a-n],l=s[0]*s[0]+s[1]*s[1],u=o[0]*o[0]+o[1]*o[1],c=o[0]*s[0]+o[1]*s[1],d=c*c/l;return 0>c?u:d>l?(e-i)*(e-i)+(t-a)*(t-a):u-d},n.pointInsidePolygonPoints=function(e,t,r){for(var n,i,a,o,s,l=0,u=0,c=0;c<r.length/2;c++)if(n=r[2*c],i=r[2*c+1],c+1<r.length/2?(a=r[2*(c+1)],o=r[2*(c+1)+1]):(a=r[2*(c+1-r.length/2)],o=r[2*(c+1-r.length/2)+1]),n==e&&a==e);else{if(!(n>=e&&e>=a||e>=n&&a>=e))continue;s=(e-n)/(a-n)*(o-i)+i,s>t&&l++,t>s&&u++}return l%2!==0},n.pointInsidePolygon=function(e,t,r,i,a,o,s,l,u){var c,d=new Array(r.length);null!=l[0]?(c=Math.atan(l[1]/l[0]),l[0]<0?c+=Math.PI/2:c=-c-Math.PI/2):c=l;for(var h=Math.cos(-c),p=Math.sin(-c),f=0;f<d.length/2;f++)d[2*f]=o/2*(r[2*f]*h-r[2*f+1]*p),d[2*f+1]=s/2*(r[2*f+1]*h+r[2*f]*p),d[2*f]+=i,d[2*f+1]+=a;var v;if(u>0){var g=this.expandPolygon(d,-u);v=this.joinLines(g)}else v=d;return n.pointInsidePolygonPoints(e,t,v)},n.joinLines=function(e){for(var t,r,n,i,a,o,s,l,u=new Array(e.length/2),c=0;c<e.length/4;c++){t=e[4*c],r=e[4*c+1],n=e[4*c+2],i=e[4*c+3],c<e.length/4-1?(a=e[4*(c+1)],o=e[4*(c+1)+1],s=e[4*(c+1)+2],l=e[4*(c+1)+3]):(a=e[0],o=e[1],s=e[2],l=e[3]);var d=this.finiteLinesIntersect(t,r,n,i,a,o,s,l,!0);u[2*c]=d[0],u[2*c+1]=d[1]}return u},n.expandPolygon=function(e,t){for(var r,n,i,a,o=new Array(2*e.length),s=0;s<e.length/2;s++){r=e[2*s],n=e[2*s+1],s<e.length/2-1?(i=e[2*(s+1)],a=e[2*(s+1)+1]):(i=e[0],a=e[1]);var l=a-n,u=-(i-r),c=Math.sqrt(l*l+u*u),d=l/c,h=u/c;o[4*s]=r+d*t,o[4*s+1]=n+h*t,o[4*s+2]=i+d*t,o[4*s+3]=a+h*t}return o},n.intersectLineEllipse=function(e,t,r,n,i,a){var o=r-e,s=n-t;o/=i,s/=a;var l=Math.sqrt(o*o+s*s),u=l-1;if(0>u)return[];var c=u/l;return[(r-e)*c+e,(n-t)*c+t]},n.intersectLineCircle=function(e,t,r,n,i,a,o){var s=[r-e,n-t],l=[i,a],u=[e-i,t-a],c=s[0]*s[0]+s[1]*s[1],d=2*(u[0]*s[0]+u[1]*s[1]),l=u[0]*u[0]+u[1]*u[1]-o*o,h=d*d-4*c*l;if(0>h)return[];var p=(-d+Math.sqrt(h))/(2*c),f=(-d-Math.sqrt(h))/(2*c),v=Math.min(p,f),g=Math.max(p,f),y=[];if(v>=0&&1>=v&&y.push(v),g>=0&&1>=g&&y.push(g),0===y.length)return[];var m=y[0]*s[0]+e,b=y[0]*s[1]+t;if(y.length>1){if(y[0]==y[1])return[m,b];var x=y[1]*s[0]+e,w=y[1]*s[1]+t;return[m,b,x,w]}return[m,b]},n.findCircleNearPoint=function(e,t,r,n,i){var a=n-e,o=i-t,s=Math.sqrt(a*a+o*o),l=a/s,u=o/s;return[e+l*r,t+u*r]},n.findMaxSqDistanceToOrigin=function(e){for(var t,r=1e-6,n=0;n<e.length/2;n++)t=e[2*n]*e[2*n]+e[2*n+1]*e[2*n+1],t>r&&(r=t);return r},n.midOfThree=function(e,t,r){return e>=t&&r>=e||e>=r&&t>=e?e:t>=e&&r>=t||t>=r&&e>=t?t:r},n.finiteLinesIntersect=function(e,t,r,n,i,a,o,s,l){var u=e-i,c=r-e,d=o-i,h=t-a,p=n-t,f=s-a,v=d*h-f*u,g=c*h-p*u,y=f*c-d*p;if(0!==y){var m=v/y,b=g/y,x=.001,w=0-x,E=1+x;return m>=w&&E>=m&&b>=w&&E>=b?[e+m*c,t+m*p]:l?[e+m*c,t+m*p]:[]}return 0===v||0===g?this.midOfThree(e,r,o)===o?[o,s]:this.midOfThree(e,r,i)===i?[i,a]:this.midOfThree(i,o,r)===r?[r,n]:[]:[]},n.polygonIntersectLine=function(e,t,r,i,a,o,s,l){for(var u,c=[],d=new Array(r.length),h=0;h<d.length/2;h++)d[2*h]=r[2*h]*o+i,d[2*h+1]=r[2*h+1]*s+a;var p;if(l>0){var f=n.expandPolygon(d,-l);p=n.joinLines(f)}else p=d;for(var v,g,y,m,h=0;h<p.length/2;h++)v=p[2*h],g=p[2*h+1],h<p.length/2-1?(y=p[2*(h+1)],m=p[2*(h+1)+1]):(y=p[0],m=p[1]),u=this.finiteLinesIntersect(e,t,i,a,v,g,y,m),0!==u.length&&c.push(u[0],u[1]);return c},n.shortenIntersection=function(e,t,r){var n=[e[0]-t[0],e[1]-t[1]],i=Math.sqrt(n[0]*n[0]+n[1]*n[1]),a=(i-r)/i;return 0>a&&(a=1e-5),[t[0]+a*n[0],t[1]+a*n[1]]},n.generateUnitNgonPointsFitToSquare=function(e,t){var r=n.generateUnitNgonPoints(e,t);return r=n.fitPolygonToSquare(r)},n.fitPolygonToSquare=function(e){for(var t,r,n=e.length/2,i=1/0,a=1/0,o=-(1/0),s=-(1/0),l=0;n>l;l++)t=e[2*l],r=e[2*l+1],i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,r),s=Math.max(s,r);for(var u=2/(o-i),c=2/(s-a),l=0;n>l;l++)t=e[2*l]=e[2*l]*u,r=e[2*l+1]=e[2*l+1]*c,i=Math.min(i,t),o=Math.max(o,t),a=Math.min(a,r),s=Math.max(s,r);if(-1>a)for(var l=0;n>l;l++)r=e[2*l+1]=e[2*l+1]+(-1-a);return e},n.generateUnitNgonPoints=function(e,t){var r=1/e*2*Math.PI,n=e%2===0?Math.PI/2+r/2:Math.PI/2;n+=t;for(var i,a,o,s=new Array(2*e),l=0;e>l;l++)i=l*r+n,a=s[2*l]=Math.cos(i),o=s[2*l+1]=Math.sin(-i);return s},n.getRoundRectangleRadius=function(e,t){return Math.min(e/4,t/4,8)},t.exports=n},{}],86:[function(e,t,r){/*!
-Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable
-Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com)
-Licensed under The MIT License (http://opensource.org/licenses/MIT)
-*/
-"use strict";var n=0,i=1,a=2,o=function(e){return this instanceof o?(this.id="Thenable/1.0.7",this.state=n,this.fulfillValue=void 0,this.rejectReason=void 0,this.onFulfilled=[],this.onRejected=[],this.proxy={then:this.then.bind(this)},void("function"==typeof e&&e.call(this,this.fulfill.bind(this),this.reject.bind(this)))):new o(e)};o.prototype={fulfill:function(e){return s(this,i,"fulfillValue",e)},reject:function(e){return s(this,a,"rejectReason",e)},then:function(e,t){var r=this,n=new o;return r.onFulfilled.push(c(e,n,"fulfill")),r.onRejected.push(c(t,n,"reject")),l(r),n.proxy}};var s=function(e,t,r,i){return e.state===n&&(e.state=t,e[r]=i,l(e)),e},l=function(e){e.state===i?u(e,"onFulfilled",e.fulfillValue):e.state===a&&u(e,"onRejected",e.rejectReason)},u=function(e,t,r){if(0!==e[t].length){var n=e[t];e[t]=[];var i=function(){for(var e=0;e<n.length;e++)n[e](r)};"function"==typeof setImmediate?setImmediate(i):setTimeout(i,0)}},c=function(e,t,r){return function(n){if("function"!=typeof e)t[r].call(t,n);else{var i;try{i=e(n)}catch(a){return void t.reject(a)}d(t,i)}}},d=function(e,t){if(e===t||e.proxy===t)return void e.reject(new TypeError("cannot resolve promise with itself"));var r;if("object"==typeof t&&null!==t||"function"==typeof t)try{r=t.then}catch(n){return void e.reject(n)}if("function"!=typeof r)e.fulfill(t);else{var i=!1;try{r.call(t,function(r){i||(i=!0,r===t?e.reject(new TypeError("circular thenable chain")):d(e,r))},function(t){i||(i=!0,e.reject(t))})}catch(n){i||e.reject(n)}}};o.all=function(e){return new o(function(t,r){for(var n=new Array(e.length),i=0,a=function(r,a){n[r]=a,i++,i===e.length&&t(n)},o=0;o<e.length;o++)!function(t){var n=e[t],i=null!=n&&null!=n.then;if(i)n.then(function(e){a(t,e)},function(e){r(e)});else{var o=n;a(t,o)}}(o)})},o.resolve=function(e){return new o(function(t,r){t(e)})},o.reject=function(e){return new o(function(t,r){r(e)})},t.exports="undefined"!=typeof Promise?Promise:o},{}],87:[function(e,t,r){"use strict";var n=e("./is"),i=e("./util"),a=function(e){if(!(this instanceof a))return new a(e);var t=this;t._private={selectorText:null,invalid:!0};var r=function(){return{classes:[],colonSelectors:[],data:[],group:null,ids:[],meta:[],collection:null,filter:null,parent:null,ancestor:null,subject:null,child:null,descendant:null}};if(!e||n.string(e)&&e.match(/^\s*$/))t.length=0;else if("*"===e||"edge"===e||"node"===e)t[0]=r(),t[0].group="*"===e?e:e+"s",t[0].groupOnly=!0,t._private.invalid=!1,t._private.selectorText=e,t.length=1;else if(n.elementOrCollection(e)){var o=e.collection();t[0]=r(),t[0].collection=o,t.length=1}else if(n.fn(e))t[0]=r(),t[0].filter=e,t.length=1;else{if(!n.string(e))return void i.error("A selector must be created from a string; found "+e);var s=null,l={metaChar:"[\\!\\\"\\#\\$\\%\\&\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]",comparatorOp:"=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=",boolOp:"\\?|\\!|\\^",string:'"(?:\\\\"|[^"])+"|'+"'(?:\\\\'|[^'])+'",number:i.regex.number,meta:"degree|indegree|outdegree",separator:"\\s*,\\s*",descendant:"\\s+",child:"\\s+>\\s+",subject:"\\$"};l.variable="(?:[\\w-]|(?:\\\\"+l.metaChar+"))+",l.value=l.string+"|"+l.number,l.className=l.variable,l.id=l.variable;for(var u=function(e){return e.replace(new RegExp("\\\\("+l.metaChar+")","g"),function(e,t,r,n){return t})},c=l.comparatorOp.split("|"),d=0;d<c.length;d++){var h=c[d];l.comparatorOp+="|@"+h}for(var c=l.comparatorOp.split("|"),d=0;d<c.length;d++){var h=c[d];h.indexOf("!")>=0||"="!==h&&(l.comparatorOp+="|\\!"+h)}var p=[{name:"group",query:!0,regex:"(node|edge|\\*)",populate:function(e){this.group="*"===e?e:e+"s"}},{name:"state",query:!0,regex:"(:selected|:unselected|:locked|:unlocked|:visible|:hidden|:transparent|:grabbed|:free|:removed|:inside|:grabbable|:ungrabbable|:animated|:unanimated|:selectable|:unselectable|:orphan|:nonorphan|:parent|:child|:loop|:simple|:active|:inactive|:touch|:backgrounding|:nonbackgrounding)",populate:function(e){this.colonSelectors.push(e)}},{name:"id",query:!0,regex:"\\#("+l.id+")",populate:function(e){this.ids.push(u(e))}},{name:"className",query:!0,regex:"\\.("+l.className+")",populate:function(e){this.classes.push(u(e))}},{name:"dataExists",query:!0,regex:"\\[\\s*("+l.variable+")\\s*\\]",populate:function(e){this.data.push({field:u(e)})}},{name:"dataCompare",query:!0,regex:"\\[\\s*("+l.variable+")\\s*("+l.comparatorOp+")\\s*("+l.value+")\\s*\\]",populate:function(e,t,r){var n=null!=new RegExp("^"+l.string+"$").exec(r);r=n?r.substring(1,r.length-1):parseFloat(r),this.data.push({field:u(e),operator:t,value:r})}},{name:"dataBool",query:!0,regex:"\\[\\s*("+l.boolOp+")\\s*("+l.variable+")\\s*\\]",populate:function(e,t){this.data.push({field:u(t),operator:e})}},{name:"metaCompare",query:!0,regex:"\\[\\[\\s*("+l.meta+")\\s*("+l.comparatorOp+")\\s*("+l.number+")\\s*\\]\\]",populate:function(e,t,r){this.meta.push({field:u(e),operator:t,value:parseFloat(r)})}},{name:"nextQuery",separator:!0,regex:l.separator,populate:function(){t[++d]=r(),s=null}},{name:"child",separator:!0,regex:l.child,populate:function(){var e=r();e.parent=this,e.subject=s,t[d]=e}},{name:"descendant",separator:!0,regex:l.descendant,populate:function(){var e=r();e.ancestor=this,e.subject=s,t[d]=e}},{name:"subject",modifier:!0,regex:l.subject,populate:function(){return null!=s&&this.subject!=this?(i.error("Redefinition of subject in selector `"+e+"`"),!1):(s=this,void(this.subject=this))}}];t._private.selectorText=e;var f=e,d=0,v=function(e){for(var t,r,i,a=0;a<p.length;a++){var o=p[a],s=o.name;if(!n.fn(e)||e(s,o)){var l=f.match(new RegExp("^"+o.regex));if(null!=l){r=l,t=o,i=s;var u=l[0];f=f.substring(u.length);break}}}return{expr:t,match:r,name:i}},g=function(){var e=f.match(/^\s+/);if(e){var t=e[0];f=f.substring(t.length)}};for(t[0]=r(),g();;){var y=v();if(null==y.expr)return void i.error("The selector `"+e+"`is invalid");for(var m=[],b=1;b<y.match.length;b++)m.push(y.match[b]);var x=y.expr.populate.apply(t[d],m);if(x===!1)return;if(f.match(/^\s*$/))break}t.length=d+1;for(var b=0;b<t.length;b++){var w=t[b];if(null!=w.subject){for(;w.subject!=w;)if(null!=w.parent){var E=w.parent,_=w;_.parent=null,E.child=_,w=E}else{if(null==w.ancestor){i.error("When adjusting references for the selector `"+w+"`, neither parent nor ancestor was found");break}var P=w.ancestor,S=w;S.ancestor=null,P.descendant=S,w=P}t[b]=w.subject}}}t._private.invalid=!1},o=a.prototype;o.size=function(){return this.length},o.eq=function(e){return this[e]};var s=function(e,t){var r=t._private;if(e.groupOnly)return"*"===e.group||e.group===r.group;if(null!=e.group&&"*"!=e.group&&e.group!=r.group)return!1;for(var i=t.cy(),a=!0,o=0;o<e.colonSelectors.length;o++){var l=e.colonSelectors[o];switch(l){case":selected":a=t.selected();break;case":unselected":a=!t.selected();break;case":selectable":a=t.selectable();break;case":unselectable":a=!t.selectable();break;case":locked":a=t.locked();break;case":unlocked":a=!t.locked();break;case":visible":a=t.visible();break;case":hidden":a=!t.visible();break;case":transparent":a=t.transparent();break;case":grabbed":a=t.grabbed();break;case":free":a=!t.grabbed();break;case":removed":a=t.removed();break;case":inside":a=!t.removed();break;case":grabbable":a=t.grabbable();break;case":ungrabbable":a=!t.grabbable();break;case":animated":a=t.animated();break;case":unanimated":a=!t.animated();break;case":parent":a=t.isNode()&&t.children().nonempty();break;case":child":case":nonorphan":a=t.isNode()&&t.parent().nonempty();break;case":orphan":a=t.isNode()&&t.parent().empty();break;case":loop":a=t.isEdge()&&t.data("source")===t.data("target");break;case":simple":a=t.isEdge()&&t.data("source")!==t.data("target");break;case":active":a=t.active();break;case":inactive":a=!t.active();break;case":touch":a=n.touch();break;case":backgrounding":a=t.backgrounding();break;case":nonbackgrounding":a=!t.backgrounding()}if(!a)break}if(!a)return!1;for(var u=!0,o=0;o<e.ids.length;o++){var c=e.ids[o],d=r.data.id;if(u=u&&c==d,!u)break}if(!u)return!1;for(var h=!0,o=0;o<e.classes.length;o++){var p=e.classes[o];if(h=h&&t.hasClass(p),!h)break}if(!h)return!1;var f=function(t){for(var r=!0,i=0;i<e[t.name].length;i++){var a,o=e[t.name][i],s=o.operator,l=o.value,u=o.field;if(null!=s&&null!=l){var c=t.fieldValue(u),d=n.string(c)||n.number(c)?""+c:"",h=""+l,p=!1;s.indexOf("@")>=0&&(d=d.toLowerCase(),h=h.toLowerCase(),s=s.replace("@",""),p=!0);var f=!1;s.indexOf("!")>=0&&(s=s.replace("!",""),f=!0),p&&(l=h.toLowerCase(),c=d.toLowerCase());var v=!1;switch(s){case"*=":a=d.indexOf(h)>=0;break;case"$=":a=d.indexOf(h,d.length-h.length)>=0;break;case"^=":a=0===d.indexOf(h);break;case"=":a=c===l;break;case">":v=!0,a=c>l;break;case">=":v=!0,a=c>=l;break;case"<":v=!0,a=l>c;break;case"<=":v=!0,a=l>=c;break;default:a=!1}!f||null==c&&v||(a=!a)}else if(null!=s)switch(s){case"?":a=t.fieldTruthy(u);break;case"!":a=!t.fieldTruthy(u);break;case"^":a=t.fieldUndefined(u)}else a=!t.fieldUndefined(u);if(!a){r=!1;break}}return r},v=f({name:"data",fieldValue:function(e){return r.data[e]},fieldUndefined:function(e){return void 0===r.data[e]},fieldTruthy:function(e){return!!r.data[e]}});if(!v)return!1;var g=f({name:"meta",fieldValue:function(e){return t[e]()},fieldUndefined:function(e){return null==t[e]()},fieldTruthy:function(e){return!!t[e]()}});if(!g)return!1;if(null!=e.collection){var y=e.collection.hasElementWithId(t.id());if(!y)return!1}if(null!=e.filter&&0===t.collection().filter(e.filter).size())return!1;var m=function(e,t){if(null!=e){var r=!1;if(!i.hasCompoundNodes())return!1;t=t();for(var n=0;n<t.length;n++)if(s(e,t[n])){r=!0;break}return r}return!0};return m(e.parent,function(){return t.parent()})&&m(e.ancestor,function(){return t.parents()})&&m(e.child,function(){return t.children()})?!!m(e.descendant,function(){return t.descendants()}):!1};o.filter=function(e){var t=this,r=e.cy();if(t._private.invalid)return r.collection();var n=function(e,r){for(var n=0;n<t.length;n++){var i=t[n];if(s(i,r))return!0}return!1};null==t._private.selectorText&&(n=function(){return!0});var i=e.filter(n);return i},o.matches=function(e){var t=this;if(t._private.invalid)return!1;for(var r=0;r<t.length;r++){var n=t[r];if(s(n,e))return!0}return!1},o.toString=o.selector=function(){for(var e="",t=function(e,t){return n.string(e)?t?'"'+e+'"':e:""},r=function(e){var n="";e.subject===e&&(n+="$");var a=t(e.group);n+=a.substring(0,a.length-1);for(var o=0;o<e.data.length;o++){var s=e.data[o];n+=s.value?"["+s.field+t(s.operator)+t(s.value,!0)+"]":"["+t(s.operator)+s.field+"]"}for(var o=0;o<e.meta.length;o++){var l=e.meta[o];n+="[["+l.field+t(l.operator)+t(l.value,!0)+"]]"}for(var o=0;o<e.colonSelectors.length;o++){var u=e.colonSelectors[i];n+=u}for(var o=0;o<e.ids.length;o++){var u="#"+e.ids[i];n+=u}for(var o=0;o<e.classes.length;o++){var u="."+e.classes[o];n+=u}return null!=e.parent&&(n=r(e.parent)+" > "+n),null!=e.ancestor&&(n=r(e.ancestor)+" "+n),null!=e.child&&(n+=" > "+r(e.child)),null!=e.descendant&&(n+=" "+r(e.descendant)),n},i=0;i<this.length;i++){var a=this[i];e+=r(a),this.length>1&&i<this.length-1&&(e+=", ")}return e},t.exports=a},{"./is":83,"./util":100}],88:[function(e,t,r){"use strict";var n=e("../util"),i=e("../is"),a={};a.apply=function(e){var t=this,r=t._private;r.newStyle&&(r.contextStyles={},r.propDiffs={},t.cleanElements(e,!0));for(var n=0;n<e.length;n++){var i=e[n],a=t.getContextMeta(i),o=t.getContextStyle(a),s=t.applyContextStyle(a,o,i);t.updateTransitions(i,s.diffProps),t.updateStyleHints(i)}r.newStyle=!1},a.getPropertiesDiff=function(e,t){var r=this,n=r._private.propDiffs=r._private.propDiffs||{},i=e+"-"+t,a=n[i];if(a)return a;for(var o=[],s={},l=0;l<r.length;l++){var u=r[l],c="t"===e[l],d="t"===t[l],h=c!==d,p=u.mappedProperties.length>0;if(h||p){var f;h&&p?f=u.properties:h?f=u.properties:p&&(f=u.mappedProperties);for(var v=0;v<f.length;v++){for(var g=f[v],y=g.name,m=!1,b=l+1;b<r.length;b++){var x=r[b],w="t"===t[b];if(w&&(m=null!=x.properties[g.name]))break}s[y]||m||(s[y]=!0,o.push(y))}}}return n[i]=o,o},a.getContextMeta=function(e){var t,r=this,n="",i=e._private.styleCxtKey||"";r._private.newStyle&&(i="");for(var a=0;a<r.length;a++){var o=r[a],s=o.selector&&o.selector.matches(e);n+=s?"t":"f"}return t=r.getPropertiesDiff(i,n),e._private.styleCxtKey=n,{key:n,diffPropNames:t}},a.getContextStyle=function(e){var t=e.key,r=this,n=this._private.contextStyles=this._private.contextStyles||{};if(n[t])return n[t];for(var i={_private:{key:t}},a=0;a<r.length;a++){var o=r[a],s="t"===t[a];if(s)for(var l=0;l<o.properties.length;l++){var u=o.properties[l],c=i[u.name]=u;c.context=o}}return n[t]=i,i},a.applyContextStyle=function(e,t,r){for(var n=this,i=e.diffPropNames,a={},o=0;o<i.length;o++){var s=i[o],l=t[s],u=r.pstyle(s);if(l||(l=u.bypass?{name:s,deleteBypassed:!0}:{name:s,"delete":!0}),u!==l){var c=a[s]={prev:u};n.applyParsedProperty(r,l),c.next=r.pstyle(s),c.next&&c.next.bypass&&(c.next=c.next.bypassed)}}return{diffProps:a}},a.updateStyleHints=function(e){var t=e._private,r=this;if(!e.removed()){var n=!1;if("nodes"===t.group)for(var i=1;i<=r.pieBackgroundN;i++){var a=e.pstyle("pie-"+i+"-background-size").value;if(a>0){n=!0;break}}t.hasPie=n;var o=e.pstyle("text-transform").strValue,s=e.pstyle("label").strValue,l=e.pstyle("source-label").strValue,u=e.pstyle("target-label").strValue,c=e.pstyle("font-style").strValue,a=e.pstyle("font-size").pfValue+"px",d=e.pstyle("font-family").strValue,h=e.pstyle("font-weight").strValue,p=e.pstyle("text-valign").strValue,f=e.pstyle("text-valign").strValue,v=e.pstyle("text-outline-width").pfValue,g=e.pstyle("text-wrap").strValue,y=e.pstyle("text-max-width").pfValue,m=c+"$"+a+"$"+d+"$"+h+"$"+o+"$"+p+"$"+f+"$"+v+"$"+g+"$"+y;t.labelStyleKey=m,t.sourceLabelKey=m+"$"+l,t.targetLabelKey=m+"$"+u,t.labelKey=m+"$"+s,t.fontKey=c+"$"+h+"$"+a+"$"+d,t.styleKey=Date.now()}},a.applyParsedProperty=function(e,t){var r,a,o=this,s=t,l=e._private.style,u=o.types,c=o.properties[s.name].type,d=s.bypass,h=l[s.name],p=h&&h.bypass,f=e._private;if("curve-style"===t.name&&"haystack"===t.value&&e.isEdge()&&(e.isLoop()||e.source().isParent()||e.target().isParent())&&(s=t=this.parse(t.name,"bezier",d)),s["delete"])return l[s.name]=void 0,!0;if(s.deleteBypassed)return h?h.bypass?(h.bypassed=void 0,!0):!1:!0;if(s.deleteBypass)return h?h.bypass?(l[s.name]=h.bypassed,!0):!1:!0;var v=function(){n.error("Do not assign mappings to elements without corresponding data (e.g. ele `"+e.id()+"` for property `"+s.name+"` with data field `"+s.field+"`); try a `["+s.field+"]` selector to limit scope to elements with `"+s.field+"` defined")};switch(s.mapped){case u.mapData:case u.mapLayoutData:case u.mapScratch:var r,g=s.mapped===u.mapLayoutData,y=s.mapped===u.mapScratch,m=s.field.split(".");r=y||g?f.scratch:f.data;for(var b=0;b<m.length&&r;b++){var x=m[b];r=r[x]}var w;if(w=i.number(r)?(r-s.fieldMin)/(s.fieldMax-s.fieldMin):0,0>w?w=0:w>1&&(w=1),c.color){var E=s.valueMin[0],_=s.valueMax[0],P=s.valueMin[1],S=s.valueMax[1],k=s.valueMin[2],T=s.valueMax[2],D=null==s.valueMin[3]?1:s.valueMin[3],C=null==s.valueMax[3]?1:s.valueMax[3],M=[Math.round(E+(_-E)*w),Math.round(P+(S-P)*w),Math.round(k+(T-k)*w),Math.round(D+(C-D)*w)];a={bypass:s.bypass,name:s.name,value:M,strValue:"rgb("+M[0]+", "+M[1]+", "+M[2]+")"}}else{if(!c.number)return!1;var N=s.valueMin+(s.valueMax-s.valueMin)*w;a=this.parse(s.name,N,s.bypass,!0)}a||(a=this.parse(s.name,h.strValue,s.bypass,!0)),a||v(),a.mapping=s,s=a;break;case u.data:case u.layoutData:case u.scratch:var r,g=s.mapped===u.layoutData,y=s.mapped===u.scratch,m=s.field.split(".");if(r=y||g?f.scratch:f.data)for(var b=0;b<m.length;b++){var x=m[b];r=r[x]}if(a=this.parse(s.name,r,s.bypass,!0),!a){var B=h?h.strValue:"";a=this.parse(s.name,B,s.bypass,!0)}a||v(),a.mapping=s,s=a;break;case u.fn:var z=s.value,I=z(e);a=this.parse(s.name,I,s.bypass,!0),a.mapping=s,s=a;break;case void 0:break;default:return!1}return d?(p?s.bypassed=h.bypassed:s.bypassed=h,l[s.name]=s):p?h.bypassed=s:l[s.name]=s,!0},a.cleanElements=function(e,t){for(var r=this,n=r.properties,i=0;i<e.length;i++){var a=e[i];if(t)for(var o=a._private.style,s=0;s<n.length;s++){var l=n[s],u=o[l.name];u&&(u.bypass?u.bypassed=null:o[l.name]=null)}else a._private.style={}}},a.update=function(){var e=this._private.cy,t=e.mutableElements();t.updateStyle()},a.updateMappers=function(e){for(var t=this,r=0;r<e.length;r++){for(var n=e[r],i=n._private.style,a=0;a<t.properties.length;a++){var o=t.properties[a],s=i[o.name];if(s&&s.mapping){var l=s.mapping;this.applyParsedProperty(n,l)}}this.updateStyleHints(n)}},a.updateTransitions=function(e,t,r){var n=this,a=e._private,o=e.pstyle("transition-property").value,s=e.pstyle("transition-duration").pfValue,l=e.pstyle("transition-delay").pfValue;if(o.length>0&&s>0){for(var u={},c=!1,d=0;d<o.length;d++){var h=o[d],p=e.pstyle(h),f=t[h];if(f){var v,g=f.prev,y=g,m=null!=f.next?f.next:p,b=!1,x=1e-6;y&&(i.number(y.pfValue)&&i.number(m.pfValue)?(b=m.pfValue-y.pfValue,v=y.pfValue+x*b):i.number(y.value)&&i.number(m.value)?(b=m.value-y.value,v=y.value+x*b):i.array(y.value)&&i.array(m.value)&&(b=y.value[0]!==m.value[0]||y.value[1]!==m.value[1]||y.value[2]!==m.value[2],v=y.strValue),b&&(u[h]=m.strValue,this.applyBypass(e,h,v),c=!0))}}if(!c)return;a.transitioning=!0,e.stop(),l>0&&e.delay(l),e.animate({css:u},{duration:s,easing:e.pstyle("transition-timing-function").value,queue:!1,complete:function(){r||n.removeBypasses(e,o),a.transitioning=!1}})}else a.transitioning&&(e.stop(),this.removeBypasses(e,o),a.transitioning=!1)},t.exports=a},{"../is":83,"../util":100}],89:[function(e,t,r){"use strict";var n=e("../is"),i=e("../util"),a={};a.applyBypass=function(e,t,r,a){var o=this,s=[],l=!0;if("*"===t||"**"===t){if(void 0!==r)for(var u=0;u<o.properties.length;u++){var c=o.properties[u],t=c.name,d=this.parse(t,r,!0);d&&s.push(d)}}else if(n.string(t)){var d=this.parse(t,r,!0);d&&s.push(d)}else{if(!n.plainObject(t))return!1;var h=t;a=r;for(var u=0;u<o.properties.length;u++){var c=o.properties[u],t=c.name,r=h[t];if(void 0===r&&(r=h[i.dash2camel(t)]),void 0!==r){var d=this.parse(t,r,!0);d&&s.push(d)}}}if(0===s.length)return!1;for(var p=!1,u=0;u<e.length;u++){for(var f,v=e[u],g={},y=0;y<s.length;y++){var c=s[y];if(a){var m=v.pstyle(c.name);f=g[c.name]={prev:m}}p=this.applyParsedProperty(v,c)||p,a&&(f.next=v.pstyle(c.name))}p&&this.updateStyleHints(v),a&&this.updateTransitions(v,g,l)}return p},a.overrideBypass=function(e,t,r){t=i.camel2dash(t);for(var n=0;n<e.length;n++){var a=e[n],o=a._private.style[t],s=this.properties[t].type,l=s.color,u=s.mutiple;o&&o.bypass?(o.value=r,null!=o.pfValue&&(o.pfValue=r),l?o.strValue="rgb("+r.join(",")+")":u?o.strValue=r.join(" "):o.strValue=""+r):this.applyBypass(a,t,r)}},a.removeAllBypasses=function(e,t){return this.removeBypasses(e,this.propertyNames,t)},a.removeBypasses=function(e,t,r){for(var n=!0,i=0;i<e.length;i++){for(var a=e[i],o={},s=0;s<t.length;s++){var l=t[s],u=this.properties[l],c=a.pstyle(u.name);if(c&&c.bypass){var d="",h=this.parse(l,d,!0),p=o[u.name]={prev:c};this.applyParsedProperty(a,h),p.next=a.pstyle(u.name)}}this.updateStyleHints(a),r&&this.updateTransitions(a,o,n)}},t.exports=a},{"../is":83,"../util":100}],90:[function(e,t,r){"use strict";var n=e("../window"),i={};i.getEmSizeInPixels=function(){var e=this.containerCss("font-size");return null!=e?parseFloat(e):1},i.containerCss=function(e){var t=this._private.cy,r=t.container();return n&&r&&n.getComputedStyle?n.getComputedStyle(r).getPropertyValue(e):void 0},t.exports=i},{"../window":107}],91:[function(e,t,r){"use strict";var n=e("../util"),i=e("../is"),a={};a.getRenderedStyle=function(e){return this.getRawStyle(e,!0)},a.getRawStyle=function(e,t){var r=this,e=e[0];if(e){for(var i={},a=0;a<r.properties.length;a++){var o=r.properties[a],s=r.getStylePropertyValue(e,o.name,t);s&&(i[o.name]=s,i[n.dash2camel(o.name)]=s)}return i}},a.getStylePropertyValue=function(e,t,r){var n=this,e=e[0];if(e){var i=n.properties[t],a=i.type,o=e.pstyle(i.name),s=e.cy().zoom();if(o){var l=o.units?a.implicitUnits||"px":null,u=l?[].concat(o.pfValue).map(function(e){return e*(r?s:1)+l}).join(" "):o.strValue;return u}}},a.getAnimationStartStyle=function(e,t){for(var r={},n=0;n<t.length;n++){var a=t[n],o=a.name,s=e.pstyle(o);void 0!==s&&(s=i.plainObject(s)?this.parse(o,s.strValue):this.parse(o,s)),s&&(r[o]=s)}return r},a.getPropsList=function(e){var t=this,r=[],i=e,a=t.properties;if(i)for(var o=Object.keys(i),s=0;s<o.length;s++){var l=o[s],u=i[l],c=a[l]||a[n.camel2dash(l)],d=this.parse(c.name,u);r.push(d)}return r},t.exports=a},{"../is":83,"../util":100}],92:[function(e,t,r){"use strict";var n=e("../is"),i=e("../util"),a=e("../selector"),o=function(e){return this instanceof o?n.core(e)?(this._private={cy:e,coreStyle:{}},this.length=0,void this.resetToDefault()):void i.error("A style must have a core reference"):new o(e)},s=o.prototype;s.instanceString=function(){return"style"},s.clear=function(){for(var e=0;e<this.length;e++)this[e]=void 0;this.length=0;var t=this._private;return t.newStyle=!0,this},s.resetToDefault=function(){return this.clear(),this.addDefaultStylesheet(),this},s.core=function(){return this._private.coreStyle},s.selector=function(e){var t="core"===e?null:new a(e),r=this.length++;return this[r]={selector:t,properties:[],mappedProperties:[],index:r},this},s.css=function(){var e=this,t=arguments;switch(t.length){case 1:for(var r=t[0],n=0;n<e.properties.length;n++){var a=e.properties[n],o=r[a.name];void 0===o&&(o=r[i.dash2camel(a.name)]),void 0!==o&&this.cssRule(a.name,o)}break;case 2:this.cssRule(t[0],t[1])}return this},s.style=s.css,s.cssRule=function(e,t){var r=this.parse(e,t);if(r){var n=this.length-1;this[n].properties.push(r),this[n].properties[r.name]=r,r.name.match(/pie-(\d+)-background-size/)&&r.value&&(this._private.hasPie=!0),r.mapped&&this[n].mappedProperties.push(r);var i=!this[n].selector;i&&(this._private.coreStyle[r.name]=r)}return this},o.fromJson=function(e,t){var r=new o(e);return r.fromJson(t),r},o.fromString=function(e,t){return new o(e).fromString(t)},[e("./apply"),e("./bypass"),e("./container"),e("./get-for-ele"),e("./json"),e("./string-sheet"),e("./properties"),e("./parse")].forEach(function(e){i.extend(s,e)}),o.types=s.types,o.properties=s.properties,t.exports=o},{"../is":83,"../selector":87,"../util":100,"./apply":88,"./bypass":89,"./container":90,"./get-for-ele":91,"./json":93,"./parse":94,"./properties":95,"./string-sheet":96}],93:[function(e,t,r){"use strict";var n={};n.applyFromJson=function(e){for(var t=this,r=0;r<e.length;r++){var n=e[r],i=n.selector,a=n.style||n.css,o=Object.keys(a);t.selector(i);for(var s=0;s<o.length;s++){var l=o[s],u=a[l];t.css(l,u)}}return t},n.fromJson=function(e){var t=this;return t.resetToDefault(),t.applyFromJson(e),t},n.json=function(){for(var e=[],t=this.defaultLength;t<this.length;t++){for(var r=this[t],n=r.selector,i=r.properties,a={},o=0;o<i.length;o++){var s=i[o];a[s.name]=s.strValue}e.push({selector:n?n.toString():"core",style:a})}return e},t.exports=n},{}],94:[function(e,t,r){"use strict";var n=e("../util"),i=e("../is"),a=e("../math"),o={};o.parse=function(e,t,r,a){var o=this;if(i.fn(t))return o.parseImpl(e,t,r,a);var s,l=[e,t,r,a].join("$"),u=o.propCache=o.propCache||{};return(s=u[l])||(s=u[l]=o.parseImpl(e,t,r,a)),s=n.copy(s),s&&(s.value=n.copy(s.value)),s};var s=function(e,t,r,o){var s=this;e=n.camel2dash(e);var l=s.properties[e],u=t,c=s.types;if(!l)return null;if(void 0===t||null===t)return null;l.alias&&(l=l.pointsTo,e=l.name);var d=i.string(t);d&&(t=t.trim());var h=l.type;if(!h)return null;if(r&&(""===t||null===t))return{name:e,value:t,bypass:!0,deleteBypass:!0};if(i.fn(t))return{name:e,value:t,strValue:"fn",mapped:c.fn,bypass:r};var p,f,v,g,y,m;if(!d||o);else{if((p=new RegExp(c.data.regex).exec(t))||(v=new RegExp(c.layoutData.regex).exec(t))||(y=new RegExp(c.scratch.regex).exec(t))){if(r)return!1;var b;return b=p?c.data:v?c.layoutData:c.scratch,p=p||v||y,{name:e,value:p,strValue:""+t,mapped:b,field:p[1],bypass:r}}if((f=new RegExp(c.mapData.regex).exec(t))||(g=new RegExp(c.mapLayoutData.regex).exec(t))||(m=new RegExp(c.mapScratch.regex).exec(t))){if(r)return!1;if(h.multiple)return!1;var b;if(b=f?c.mapData:g?c.mapLayoutData:c.mapScratch,f=f||g||m,!h.color&&!h.number)return!1;var x=this.parse(e,f[4]);if(!x||x.mapped)return!1;var w=this.parse(e,f[5]);if(!w||w.mapped)return!1;if(x.value===w.value)return!1;if(h.color){var E=x.value,_=w.value,P=!(E[0]!==_[0]||E[1]!==_[1]||E[2]!==_[2]||E[3]!==_[3]&&(null!=E[3]&&1!==E[3]||null!=_[3]&&1!==_[3]));if(P)return!1}return{name:e,value:f,strValue:""+t,mapped:b,field:f[1],fieldMin:parseFloat(f[2]),fieldMax:parseFloat(f[3]),valueMin:x.value,valueMax:w.value,bypass:r}}}if(h.multiple&&"multiple"!==o){var S;if(S=d?t.split(/\s+/):i.array(t)?t:[t],h.evenMultiple&&S.length%2!==0)return null;var k=S.map(function(t){var n=s.parse(e,t,r,"multiple");return null!=n.pfValue?n.pfValue:n.value});return{name:e,value:k,pfValue:k,strValue:k.join(" "),bypass:r,units:h.number&&!h.unitless?h.implicitUnits||"px":void 0}}var T=function(){for(var n=0;n<h.enums.length;n++){var i=h.enums[n];if(i===t)return{name:e,value:t,strValue:""+t,bypass:r}}return null};if(h.number){var D,C="px";if(h.units&&(D=h.units),h.implicitUnits&&(C=h.implicitUnits),!h.unitless)if(d){var M="px|em"+(h.allowPercent?"|\\%":"");D&&(M=D);var N=t.match("^("+n.regex.number+")("+M+")?$");N&&(t=N[1],D=N[2]||C)}else D&&!h.implicitUnits||(D=C);if(t=parseFloat(t),isNaN(t)&&void 0===h.enums)return null;if(isNaN(t)&&void 0!==h.enums)return t=u,T();if(h.integer&&!i.integer(t))return null;if(void 0!==h.min&&t<h.min||void 0!==h.max&&t>h.max)return null;var B={name:e,value:t,strValue:""+t+(D?D:""),units:D,bypass:r};return h.unitless||"px"!==D&&"em"!==D?B.pfValue=t:B.pfValue="px"!==D&&D?this.getEmSizeInPixels()*t:t,"ms"!==D&&"s"!==D||(B.pfValue="ms"===D?t:1e3*t),"deg"!==D&&"rad"!==D||(B.pfValue="rad"===D?t:a.deg2rad(t)),B}if(h.propList){var z=[],I=""+t;if("none"===I);else{for(var L=I.split(","),O=0;O<L.length;O++){var A=L[O].trim();s.properties[A]&&z.push(A)}if(0===z.length)return null}return{name:e,value:z,strValue:0===z.length?"none":z.join(", "),bypass:r}}if(h.color){var R=n.color2tuple(t);return R?{name:e,value:R,strValue:""+t,bypass:r,roundValue:!0}:null}if(h.regex||h.regexes){if(h.enums){var q=T();if(q)return q}for(var V=h.regexes?h.regexes:[h.regex],O=0;O<V.length;O++){var F=new RegExp(V[O]),j=F.exec(t);if(j)return{name:e,value:j,strValue:""+t,bypass:r}}return null}return h.string?{name:e,value:t,strValue:""+t,bypass:r}:h.enums?T():null};o.parseImpl=s,t.exports=o},{"../is":83,"../math":85,"../util":100}],95:[function(e,t,r){"use strict";var n=e("../util"),i={};!function(){var e=n.regex.number,t=n.regex.rgbaNoBackRefs,r=n.regex.hslaNoBackRefs,a=n.regex.hex3,o=n.regex.hex6,s=function(e){return"^"+e+"\\s*\\(\\s*([\\w\\.]+)\\s*\\)$"},l=function(n){var i=e+"|\\w+|"+t+"|"+r+"|"+a+"|"+o;return"^"+n+"\\s*\\(([\\w\\.]+)\\s*\\,\\s*("+e+")\\s*\\,\\s*("+e+")\\s*,\\s*("+i+")\\s*\\,\\s*("+i+")\\)$"};i.types={time:{number:!0,min:0,units:"s|ms",implicitUnits:"ms"},percent:{number:!0,min:0,max:100,units:"%",implicitUnits:"%"},zeroOneNumber:{number:!0,min:0,max:1,unitless:!0},nOneOneNumber:{number:!0,min:-1,max:1,unitless:!0},nonNegativeInt:{number:!0,min:0,integer:!0,unitless:!0},position:{enums:["parent","origin"]},nodeSize:{number:!0,min:0,enums:["label"]},number:{number:!0,unitless:!0},numbers:{number:!0,unitless:!0,multiple:!0},size:{number:!0,min:0},bidirectionalSize:{number:!0},bidirectionalSizes:{number:!0,multiple:!0},bgSize:{number:!0,min:0,allowPercent:!0},bgWH:{number:!0,min:0,allowPercent:!0,enums:["auto"]},bgPos:{number:!0,allowPercent:!0},bgRepeat:{enums:["repeat","repeat-x","repeat-y","no-repeat"]},bgFit:{enums:["none","contain","cover"]},bgClip:{enums:["none","node"]},color:{color:!0},bool:{enums:["yes","no"]},lineStyle:{enums:["solid","dotted","dashed"]},borderStyle:{enums:["solid","dotted","dashed","double"]},curveStyle:{enums:["bezier","unbundled-bezier","haystack","segments"]},fontFamily:{regex:'^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$'},fontVariant:{enums:["small-caps","normal"]},fontStyle:{enums:["italic","normal","oblique"]},fontWeight:{enums:["normal","bold","bolder","lighter","100","200","300","400","500","600","800","900",100,200,300,400,500,600,700,800,900]},textDecoration:{enums:["none","underline","overline","line-through"]},textTransform:{enums:["none","uppercase","lowercase"]},textWrap:{enums:["none","wrap"]},textBackgroundShape:{enums:["rectangle","roundrectangle"]},nodeShape:{enums:["rectangle","roundrectangle","ellipse","triangle","square","pentagon","hexagon","heptagon","octagon","star","diamond","vee","rhomboid","polygon"]},compoundIncludeLabels:{enums:["include","exclude"]},arrowShape:{enums:["tee","triangle","triangle-tee","triangle-backcurve","half-triangle-overshot","vee","square","circle","diamond","none"]},arrowFill:{enums:["filled","hollow"]},display:{enums:["element","none"]},visibility:{enums:["hidden","visible"]},valign:{enums:["top","center","bottom"]},halign:{enums:["left","center","right"]},text:{string:!0},data:{mapping:!0,regex:s("data")},layoutData:{mapping:!0,regex:s("layoutData")},scratch:{mapping:!0,regex:s("scratch")},mapData:{mapping:!0,regex:l("mapData")},mapLayoutData:{mapping:!0,regex:l("mapLayoutData")},mapScratch:{mapping:!0,regex:l("mapScratch")},fn:{mapping:!0,fn:!0},url:{regex:"^url\\s*\\(\\s*([^\\s]+)\\s*\\s*\\)|none|(.+)$"},propList:{propList:!0},angle:{number:!0,units:"deg|rad",implicitUnits:"rad"},textRotation:{number:!0,units:"deg|rad",implicitUnits:"rad",enums:["none","autorotate"]},polygonPointList:{number:!0,multiple:!0,evenMultiple:!0,min:-1,max:1,unitless:!0},edgeDistances:{enums:["intersection","node-position"]},easing:{regexes:["^(spring)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$","^(cubic-bezier)\\s*\\(\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*,\\s*("+e+")\\s*\\)$"],enums:["linear","ease","ease-in","ease-out","ease-in-out","ease-in-sine","ease-out-sine","ease-in-out-sine","ease-in-quad","ease-out-quad","ease-in-out-quad","ease-in-cubic","ease-out-cubic","ease-in-out-cubic","ease-in-quart","ease-out-quart","ease-in-out-quart","ease-in-quint","ease-out-quint","ease-in-out-quint","ease-in-expo","ease-out-expo","ease-in-out-expo","ease-in-circ","ease-out-circ","ease-in-out-circ"]}};var u=i.types,c=i.properties=[{name:"label",type:u.text},{name:"text-rotation",type:u.textRotation},{name:"text-margin-x",type:u.bidirectionalSize},{name:"text-margin-y",type:u.bidirectionalSize},{name:"source-label",type:u.text},{name:"source-text-rotation",type:u.textRotation},{name:"source-text-margin-x",type:u.bidirectionalSize},{name:"source-text-margin-y",type:u.bidirectionalSize},{name:"source-text-offset",type:u.size},{name:"target-label",type:u.text},{name:"target-text-rotation",type:u.textRotation},{name:"target-text-margin-x",type:u.bidirectionalSize},{name:"target-text-margin-y",type:u.bidirectionalSize},{name:"target-text-offset",type:u.size},{name:"text-valign",type:u.valign},{name:"text-halign",type:u.halign},{name:"color",type:u.color},{name:"text-outline-color",type:u.color},{name:"text-outline-width",type:u.size},{name:"text-outline-opacity",type:u.zeroOneNumber},{name:"text-opacity",type:u.zeroOneNumber},{name:"text-background-color",type:u.color},{name:"text-background-margin",type:u.size},{name:"text-background-opacity",type:u.zeroOneNumber},{name:"text-border-opacity",type:u.zeroOneNumber},{name:"text-border-color",type:u.color},{name:"text-border-width",type:u.size},{name:"text-border-style",type:u.borderStyle},{name:"text-background-shape",type:u.textBackgroundShape},{name:"text-transform",type:u.textTransform},{name:"text-wrap",type:u.textWrap},{name:"text-max-width",type:u.size},{name:"text-events",type:u.bool},{name:"font-family",type:u.fontFamily},{name:"font-style",type:u.fontStyle},{name:"font-weight",type:u.fontWeight},{name:"font-size",type:u.size},{name:"min-zoomed-font-size",type:u.size},{name:"events",type:u.bool},{name:"display",type:u.display},{name:"visibility",
-type:u.visibility},{name:"opacity",type:u.zeroOneNumber},{name:"z-index",type:u.nonNegativeInt},{name:"overlay-padding",type:u.size},{name:"overlay-color",type:u.color},{name:"overlay-opacity",type:u.zeroOneNumber},{name:"shadow-blur",type:u.size},{name:"shadow-color",type:u.color},{name:"shadow-opacity",type:u.zeroOneNumber},{name:"shadow-offset-x",type:u.bidirectionalSize},{name:"shadow-offset-y",type:u.bidirectionalSize},{name:"text-shadow-blur",type:u.size},{name:"text-shadow-color",type:u.color},{name:"text-shadow-opacity",type:u.zeroOneNumber},{name:"text-shadow-offset-x",type:u.bidirectionalSize},{name:"text-shadow-offset-y",type:u.bidirectionalSize},{name:"transition-property",type:u.propList},{name:"transition-duration",type:u.time},{name:"transition-delay",type:u.time},{name:"transition-timing-function",type:u.easing},{name:"height",type:u.nodeSize},{name:"width",type:u.nodeSize},{name:"shape",type:u.nodeShape},{name:"shape-polygon-points",type:u.polygonPointList},{name:"background-color",type:u.color},{name:"background-opacity",type:u.zeroOneNumber},{name:"background-blacken",type:u.nOneOneNumber},{name:"padding-left",type:u.size},{name:"padding-right",type:u.size},{name:"padding-top",type:u.size},{name:"padding-bottom",type:u.size},{name:"border-color",type:u.color},{name:"border-opacity",type:u.zeroOneNumber},{name:"border-width",type:u.size},{name:"border-style",type:u.borderStyle},{name:"background-image",type:u.url},{name:"background-image-opacity",type:u.zeroOneNumber},{name:"background-position-x",type:u.bgPos},{name:"background-position-y",type:u.bgPos},{name:"background-repeat",type:u.bgRepeat},{name:"background-fit",type:u.bgFit},{name:"background-clip",type:u.bgClip},{name:"background-width",type:u.bgWH},{name:"background-height",type:u.bgWH},{name:"position",type:u.position},{name:"compound-sizing-wrt-labels",type:u.compoundIncludeLabels},{name:"line-style",type:u.lineStyle},{name:"line-color",type:u.color},{name:"curve-style",type:u.curveStyle},{name:"haystack-radius",type:u.zeroOneNumber},{name:"control-point-step-size",type:u.size},{name:"control-point-distances",type:u.bidirectionalSizes},{name:"control-point-weights",type:u.numbers},{name:"segment-distances",type:u.bidirectionalSizes},{name:"segment-weights",type:u.numbers},{name:"edge-distances",type:u.edgeDistances},{name:"selection-box-color",type:u.color},{name:"selection-box-opacity",type:u.zeroOneNumber},{name:"selection-box-border-color",type:u.color},{name:"selection-box-border-width",type:u.size},{name:"active-bg-color",type:u.color},{name:"active-bg-opacity",type:u.zeroOneNumber},{name:"active-bg-size",type:u.size},{name:"outside-texture-bg-color",type:u.color},{name:"outside-texture-bg-opacity",type:u.zeroOneNumber}],d=i.aliases=[{name:"content",pointsTo:"label"},{name:"control-point-distance",pointsTo:"control-point-distances"},{name:"control-point-weight",pointsTo:"control-point-weights"},{name:"edge-text-rotation",pointsTo:"text-rotation"}];i.pieBackgroundN=16,c.push({name:"pie-size",type:u.bgSize});for(var h=1;h<=i.pieBackgroundN;h++)c.push({name:"pie-"+h+"-background-color",type:u.color}),c.push({name:"pie-"+h+"-background-size",type:u.percent}),c.push({name:"pie-"+h+"-background-opacity",type:u.zeroOneNumber});var p=i.arrowPrefixes=["source","mid-source","target","mid-target"];[{name:"arrow-shape",type:u.arrowShape},{name:"arrow-color",type:u.color},{name:"arrow-fill",type:u.arrowFill}].forEach(function(e){p.forEach(function(t){var r=t+"-"+e.name,n=e.type;c.push({name:r,type:n})})},{}),i.propertyNames=c.map(function(e){return e.name});for(var h=0;h<c.length;h++){var f=c[h];c[f.name]=f}for(var h=0;h<d.length;h++){var v=d[h],g=c[v.pointsTo],y={name:v.name,alias:!0,pointsTo:g};c.push(y),c[v.name]=y}}(),i.getDefaultProperty=function(e){return this.getDefaultProperties()[e]},i.getDefaultProperties=n.memoize(function(){for(var e=n.extend({events:"yes","text-events":"no","text-valign":"top","text-halign":"center",color:"#000","text-outline-color":"#000","text-outline-width":0,"text-outline-opacity":1,"text-opacity":1,"text-decoration":"none","text-transform":"none","text-wrap":"none","text-max-width":9999,"text-background-color":"#000","text-background-opacity":0,"text-background-margin":0,"text-border-opacity":0,"text-border-width":0,"text-border-style":"solid","text-border-color":"#000","text-background-shape":"rectangle","font-family":"Helvetica Neue, Helvetica, sans-serif","font-style":"normal","font-weight":"normal","font-size":16,"min-zoomed-font-size":0,"text-rotation":"none","source-text-rotation":"none","target-text-rotation":"none",visibility:"visible",display:"element",opacity:1,"z-index":0,label:"","text-margin-x":0,"text-margin-y":0,"source-label":"","source-text-offset":0,"source-text-margin-x":0,"source-text-margin-y":0,"target-label":"","target-text-offset":0,"target-text-margin-x":0,"target-text-margin-y":0,"overlay-opacity":0,"overlay-color":"#000","overlay-padding":10,"shadow-opacity":0,"shadow-color":"#000","shadow-blur":10,"shadow-offset-x":0,"shadow-offset-y":0,"text-shadow-opacity":0,"text-shadow-color":"#000","text-shadow-blur":5,"text-shadow-offset-x":0,"text-shadow-offset-y":0,"transition-property":"none","transition-duration":0,"transition-delay":0,"transition-timing-function":"linear","background-blacken":0,"background-color":"#999","background-opacity":1,"background-image":"none","background-image-opacity":1,"background-position-x":"50%","background-position-y":"50%","background-repeat":"no-repeat","background-fit":"none","background-clip":"node","background-width":"auto","background-height":"auto","border-color":"#000","border-opacity":1,"border-width":0,"border-style":"solid",height:30,width:30,shape:"ellipse","shape-polygon-points":"-1, -1, 1, -1, 1, 1, -1, 1","padding-top":0,"padding-bottom":0,"padding-left":0,"padding-right":0,position:"origin","compound-sizing-wrt-labels":"include"},{"pie-size":"100%"},[{name:"pie-{{i}}-background-color",value:"black"},{name:"pie-{{i}}-background-size",value:"0%"},{name:"pie-{{i}}-background-opacity",value:1}].reduce(function(e,t){for(var r=1;r<=i.pieBackgroundN;r++){var n=t.name.replace("{{i}}",r),a=t.value;e[n]=a}return e},{}),{"line-style":"solid","line-color":"#999","control-point-step-size":40,"control-point-weights":.5,"segment-weights":.5,"segment-distances":20,"edge-distances":"intersection","curve-style":"bezier","haystack-radius":0},[{name:"arrow-shape",value:"none"},{name:"arrow-color",value:"#999"},{name:"arrow-fill",value:"filled"}].reduce(function(e,t){return i.arrowPrefixes.forEach(function(r){var n=r+"-"+t.name,i=t.value;e[n]=i}),e},{})),t={},r=0;r<this.properties.length;r++){var a=this.properties[r];if(!a.pointsTo){var o=a.name,s=e[o],l=this.parse(o,s);t[o]=l}}return t}),i.addDefaultStylesheet=function(){this.selector("$node > node").css({shape:"rectangle","padding-top":10,"padding-right":10,"padding-left":10,"padding-bottom":10,"background-color":"#eee","border-color":"#ccc","border-width":1}).selector("edge").css({width:3,"curve-style":"haystack"}).selector(":selected").css({"background-color":"#0169D9","line-color":"#0169D9","source-arrow-color":"#0169D9","target-arrow-color":"#0169D9","mid-source-arrow-color":"#0169D9","mid-target-arrow-color":"#0169D9"}).selector("node:parent:selected").css({"background-color":"#CCE1F9","border-color":"#aec8e5"}).selector(":active").css({"overlay-color":"black","overlay-padding":10,"overlay-opacity":.25}).selector("core").css({"selection-box-color":"#ddd","selection-box-opacity":.65,"selection-box-border-color":"#aaa","selection-box-border-width":1,"active-bg-color":"black","active-bg-opacity":.15,"active-bg-size":30,"outside-texture-bg-color":"#000","outside-texture-bg-opacity":.125}),this.defaultLength=this.length},t.exports=i},{"../util":100}],96:[function(e,t,r){"use strict";var n=e("../util"),i=e("../selector"),a={};a.applyFromString=function(e){function t(){c=c.length>a.length?c.substr(a.length):""}function r(){o=o.length>s.length?o.substr(s.length):""}var a,o,s,l=this,u=this,c=""+e;for(c=c.replace(/[\/][*](\s|.)+?[*][\/]/g,"");;){var d=c.match(/^\s*$/);if(d)break;var h=c.match(/^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/);if(!h){n.error("Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: "+c);break}a=h[0];var p=h[1];if("core"!==p){var f=new i(p);if(f._private.invalid){n.error("Skipping parsing of block: Invalid selector found in string stylesheet: "+p),t();continue}}var v=h[2],g=!1;o=v;for(var y=[];;){var d=o.match(/^\s*$/);if(d)break;var m=o.match(/^\s*(.+?)\s*:\s*(.+?)\s*;/);if(!m){n.error("Skipping parsing of block: Invalid formatting of style property and value definitions found in:"+v),g=!0;break}s=m[0];var b=m[1],x=m[2],w=l.properties[b];if(w){var E=u.parse(b,x);E?(y.push({name:b,val:x}),r()):(n.error("Skipping property: Invalid property definition in: "+s),r())}else n.error("Skipping property: Invalid property name in: "+s),r()}if(g){t();break}u.selector(p);for(var _=0;_<y.length;_++){var w=y[_];u.css(w.name,w.val)}t()}return u},a.fromString=function(e){var t=this;return t.resetToDefault(),t.applyFromString(e),t},t.exports=a},{"../selector":87,"../util":100}],97:[function(e,t,r){"use strict";var n=e("./is"),i=e("./util"),a=e("./style"),o=function(){return this instanceof o?void(this.length=0):new o},s=o.prototype;s.instanceString=function(){return"stylesheet"},s.selector=function(e){var t=this.length++;return this[t]={selector:e,properties:[]},this},s.css=function(e,t){var r=this.length-1;if(n.string(e))this[r].properties.push({name:e,value:t});else if(n.plainObject(e))for(var o=e,s=0;s<a.properties.length;s++){var l=a.properties[s],u=o[l.name];if(void 0===u&&(u=o[i.dash2camel(l.name)]),void 0!==u){var e=l.name,t=u;this[r].properties.push({name:e,value:t})}}return this},s.style=s.css,s.generateStyle=function(e){for(var t=new a(e),r=0;r<this.length;r++){var n=this[r],i=n.selector,o=n.properties;t.selector(i);for(var s=0;s<o.length;s++){var l=o[s];t.css(l.name,l.value)}}return t},t.exports=o},{"./is":83,"./style":92,"./util":100}],98:[function(_dereq_,module,exports){/*! Weaver licensed under MIT (https://tldrlegal.com/license/mit-license), copyright Max Franz */
-"use strict";var window=_dereq_("./window"),util=_dereq_("./util"),Promise=_dereq_("./promise"),Event=_dereq_("./event"),define=_dereq_("./define"),is=_dereq_("./is"),Thread=function(e){if(!(this instanceof Thread))return new Thread(e);var t=this._private={requires:[],files:[],queue:null,pass:[],disabled:!1};is.plainObject(e)&&null!=e.disabled&&(t.disabled=!!e.disabled)},thdfn=Thread.prototype,stringifyFieldVal=function(e){var t=is.fn(e)?e.toString():"JSON.parse('"+JSON.stringify(e)+"')";return t},fnAsRequire=function(e){var t,r;is.object(e)&&e.fn?(t=fnAs(e.fn,e.name),r=e.name,e=e.fn):is.fn(e)?(t=e.toString(),r=e.name):is.string(e)?t=e:is.object(e)&&(t=e.proto?"":e.name+" = {};",r=e.name,e=e.obj),t+="\n";var n=function(e,r){if(e.prototype){var n=!1;for(var i in e.prototype){n=!0;break}n&&(t+=fnAsRequire({name:r,obj:e,proto:!0},e))}};if(e.prototype&&null!=r)for(var i in e.prototype){var a="",o=e.prototype[i],s=stringifyFieldVal(o),l=r+".prototype."+i;a+=l+" = "+s+";\n",a&&(t+=a),n(o,l)}if(!is.string(e))for(var i in e){var u="";if(e.hasOwnProperty(i)){var o=e[i],s=stringifyFieldVal(o),l=r+'["'+i+'"]';u+=l+" = "+s+";\n"}u&&(t+=u),n(o,l)}return t},isPathStr=function(e){return is.string(e)&&e.match(/\.js$/)};util.extend(thdfn,{instanceString:function(){return"thread"},require:function(e,t){var r=this._private.requires;if(isPathStr(e))return this._private.files.push(e),this;if(t)e=is.fn(e)?{name:t,fn:e}:{name:t,obj:e};else if(is.fn(e)){if(!e.name)throw'The function name could not be automatically determined. Use thread.require( someFunction, "someFunction" )';e={name:e.name,fn:e}}return r.push(e),this},pass:function(e){return this._private.pass.push(e),this},run:function(fn,pass){var self=this,_p=this._private;if(pass=pass||_p.pass.shift(),_p.stopped)throw"Attempted to run a stopped thread! Start a new thread or do not stop the existing thread and reuse it.";if(_p.running)return _p.queue=_p.queue.then(function(){return self.run(fn,pass)});var useWW=null!=window&&!_p.disabled,useNode=!window&&"undefined"!=typeof module&&!_p.disabled;self.trigger("run");var runP=new Promise(function(resolve,reject){_p.running=!0;var threadTechAlreadyExists=_p.ran,fnImplStr=is.string(fn)?fn:fn.toString(),fnStr="\n"+_p.requires.map(function(e){return fnAsRequire(e)}).concat(_p.files.map(function(e){if(useWW){var t=function(e){return e.match(/^\.\//)||e.match(/^\.\./)?window.location.origin+window.location.pathname+e:e.match(/^\//)?window.location.origin+"/"+e:e};return'importScripts("'+t(e)+'");'}if(useNode)return'eval( require("fs").readFileSync("'+e+'", { encoding: "utf8" }) );';throw"External file `"+e+"` can not be required without any threading technology."})).concat(["( function(){","var ret = ("+fnImplStr+")("+JSON.stringify(pass)+");","if( ret !== undefined ){ resolve(ret); }","} )()\n"]).join("\n");if(_p.requires=[],_p.files=[],useWW){var fnBlob,fnUrl;if(!threadTechAlreadyExists){var fnPre=fnStr+"";fnStr=["function _ref_(o){ return eval(o); };","function broadcast(m){ return message(m); };","function message(m){ postMessage(m); };","function listen(fn){",' self.addEventListener("message", function(m){ ',' if( typeof m === "object" && (m.data.$$eval || m.data === "$$start") ){'," } else { "," fn( m.data );"," }"," });","};",'self.addEventListener("message", function(m){ if( m.data.$$eval ){ eval( m.data.$$eval ); } });',"function resolve(v){ postMessage({ $$resolve: v }); };","function reject(v){ postMessage({ $$reject: v }); };"].join("\n"),fnStr+=fnPre,fnBlob=new Blob([fnStr],{type:"application/javascript"}),fnUrl=window.URL.createObjectURL(fnBlob)}var ww=_p.webworker=_p.webworker||new Worker(fnUrl);threadTechAlreadyExists&&ww.postMessage({$$eval:fnStr});var cb;ww.addEventListener("message",cb=function(e){var t=is.object(e)&&is.object(e.data);t&&"$$resolve"in e.data?(ww.removeEventListener("message",cb),resolve(e.data.$$resolve)):t&&"$$reject"in e.data?(ww.removeEventListener("message",cb),reject(e.data.$$reject)):self.trigger(new Event(e,{type:"message",message:e.data}))},!1),threadTechAlreadyExists||ww.postMessage("$$start")}else if(useNode){_p.child||(_p.child=_dereq_("child_process").fork(_dereq_("path").join(__dirname,"thread-node-fork")));var child=_p.child,cb;child.on("message",cb=function(e){is.object(e)&&"$$resolve"in e?(child.removeListener("message",cb),resolve(e.$$resolve)):is.object(e)&&"$$reject"in e?(child.removeListener("message",cb),reject(e.$$reject)):self.trigger(new Event({},{type:"message",message:e}))}),child.send({$$eval:fnStr})}else{var promiseResolve=resolve,promiseReject=reject,timer=_p.timer=_p.timer||{listeners:[],exec:function(){fnStr=["function _ref_(o){ return eval(o); };","function broadcast(m){ return message(m); };",'function message(m){ self.trigger( new Event({}, { type: "message", message: m }) ); };',"function listen(fn){ timer.listeners.push( fn ); };","function resolve(v){ promiseResolve(v); };","function reject(v){ promiseReject(v); };"].join("\n")+fnStr,eval(fnStr)},message:function(e){for(var t=timer.listeners,r=0;r<t.length;r++){var n=t[r];n(e)}}};timer.exec()}}).then(function(e){return _p.running=!1,_p.ran=!0,self.trigger("ran"),e});return null==_p.queue&&(_p.queue=runP),runP},message:function(e){var t=this._private;return t.webworker&&t.webworker.postMessage(e),t.child&&t.child.send(e),t.timer&&t.timer.message(e),this},stop:function(){var e=this._private;return e.webworker&&e.webworker.terminate(),e.child&&e.child.kill(),e.timer,e.stopped=!0,this.trigger("stop")},stopped:function(){return this._private.stopped}});var fnAs=function(e,t){var r=e.toString();return r=r.replace(/function\s*?\S*?\s*?\(/,"function "+t+"(")},defineFnal=function(e){return e=e||{},function(t,r){var n=fnAs(t,"_$_$_"+e.name);return this.require(n),this.run(["function( data ){"," var origResolve = resolve;"," var res = [];"," "," resolve = function( val ){"," res.push( val );"," };"," "," var ret = data."+e.name+"( _$_$_"+e.name+(arguments.length>1?", "+JSON.stringify(r):"")+" );"," "," resolve = origResolve;"," resolve( res.length > 0 ? res : ret );","}"].join("\n"))}};util.extend(thdfn,{reduce:defineFnal({name:"reduce"}),reduceRight:defineFnal({name:"reduceRight"}),map:defineFnal({name:"map"})});var fn=thdfn;fn.promise=fn.run,fn.terminate=fn.halt=fn.stop,fn.include=fn.require,util.extend(thdfn,{on:define.on(),one:define.on({unbindSelfOnTrigger:!0}),off:define.off(),trigger:define.trigger()}),define.eventAliasesOn(thdfn),module.exports=Thread},{"./define":44,"./event":45,"./is":83,"./promise":86,"./util":100,"./window":107,child_process:void 0,path:void 0}],99:[function(e,t,r){"use strict";var n=e("../is");t.exports={hex2tuple:function(e){if((4===e.length||7===e.length)&&"#"===e[0]){var t,r,n,i=4===e.length,a=16;return i?(t=parseInt(e[1]+e[1],a),r=parseInt(e[2]+e[2],a),n=parseInt(e[3]+e[3],a)):(t=parseInt(e[1]+e[2],a),r=parseInt(e[3]+e[4],a),n=parseInt(e[5]+e[6],a)),[t,r,n]}},hsl2tuple:function(e){function t(e,t,r){return 0>r&&(r+=1),r>1&&(r-=1),1/6>r?e+6*(t-e)*r:.5>r?t:2/3>r?e+(t-e)*(2/3-r)*6:e}var r,n,i,a,o,s,l,u,c=new RegExp("^"+this.regex.hsla+"$").exec(e);if(c){if(n=parseInt(c[1]),0>n?n=(360- -1*n%360)%360:n>360&&(n%=360),n/=360,i=parseFloat(c[2]),0>i||i>100)return;if(i/=100,a=parseFloat(c[3]),0>a||a>100)return;if(a/=100,o=c[4],void 0!==o&&(o=parseFloat(o),0>o||o>1))return;if(0===i)s=l=u=Math.round(255*a);else{var d=.5>a?a*(1+i):a+i-a*i,h=2*a-d;s=Math.round(255*t(h,d,n+1/3)),l=Math.round(255*t(h,d,n)),u=Math.round(255*t(h,d,n-1/3))}r=[s,l,u,o]}return r},rgb2tuple:function(e){var t,r=new RegExp("^"+this.regex.rgba+"$").exec(e);if(r){t=[];for(var n=[],i=1;3>=i;i++){var a=r[i];if("%"===a[a.length-1]&&(n[i]=!0),a=parseFloat(a),n[i]&&(a=a/100*255),0>a||a>255)return;t.push(Math.floor(a))}var o=n[1]||n[2]||n[3],s=n[1]&&n[2]&&n[3];if(o&&!s)return;var l=r[4];if(void 0!==l){if(l=parseFloat(l),0>l||l>1)return;t.push(l)}}return t},colorname2tuple:function(e){return this.colors[e.toLowerCase()]},color2tuple:function(e){return(n.array(e)?e:null)||this.colorname2tuple(e)||this.hex2tuple(e)||this.rgb2tuple(e)||this.hsl2tuple(e)},colors:{transparent:[0,0,0,0],aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],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],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],grey:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}}},{"../is":83}],100:[function(e,t,r){"use strict";var n=e("../is"),i=e("../math"),a={trueify:function(){return!0},falsify:function(){return!1},zeroify:function(){return 0},noop:function(){},error:function(e){console.error?(console.error.apply(console,arguments),console.trace&&console.trace()):(console.log.apply(console,arguments),console.trace&&console.trace())},clone:function(e){return this.extend({},e)},copy:function(e){return null==e?e:n.array(e)?e.slice():n.plainObject(e)?this.clone(e):e},uuid:function(e,t){for(t=e="";e++<36;t+=51*e&52?(15^e?8^Math.random()*(20^e?16:4):4).toString(16):"-");return t}};a.makeBoundingBox=i.makeBoundingBox.bind(i),a._staticEmptyObject={},a.staticEmptyObject=function(){return a._staticEmptyObject},a.extend=null!=Object.assign?Object.assign:function(e){for(var t=arguments,r=1;r<t.length;r++){var n=t[r];if(n)for(var i=Object.keys(n),a=0;a<i.length;a++){var o=i[a];e[o]=n[o]}}return e},a["default"]=function(e,t){return void 0===e?t:e},a.removeFromArray=function(e,t,r){for(var n=e.length;n>=0&&(e[n]!==t||(e.splice(n,1),r));n--);},a.clearArray=function(e){e.splice(0,e.length)},a.getPrefixedProperty=function(e,t,r){return r&&(t=this.prependCamel(r,t)),e[t]},a.setPrefixedProperty=function(e,t,r,n){r&&(t=this.prependCamel(r,t)),e[t]=n},[e("./colors"),e("./maps"),{memoize:e("./memoize")},e("./regex"),e("./strings"),e("./timing")].forEach(function(e){a.extend(a,e)}),t.exports=a},{"../is":83,"../math":85,"./colors":99,"./maps":101,"./memoize":102,"./regex":103,"./strings":104,"./timing":105}],101:[function(e,t,r){"use strict";var n=e("../is");t.exports={mapEmpty:function(e){var t=!0;return null!=e?0===Object.keys(e).length:t},pushMap:function(e){var t=this.getMap(e);null==t?this.setMap(this.extend({},e,{value:[e.value]})):t.push(e.value)},setMap:function(e){for(var t,r=e.map,i=e.keys,a=i.length,o=0;a>o;o++){var t=i[o];n.plainObject(t)&&this.error("Tried to set map with object key"),o<i.length-1?(null==r[t]&&(r[t]={}),r=r[t]):r[t]=e.value}},getMap:function(e){for(var t=e.map,r=e.keys,i=r.length,a=0;i>a;a++){var o=r[a];if(n.plainObject(o)&&this.error("Tried to get map with object key"),t=t[o],null==t)return t}return t},deleteMap:function(e){for(var t=e.map,r=e.keys,i=r.length,a=e.keepChildren,o=0;i>o;o++){var s=r[o];n.plainObject(s)&&this.error("Tried to delete map with object key");var l=o===e.keys.length-1;if(l)if(a)for(var u=Object.keys(t),c=0;c<u.length;c++){var d=u[c];a[d]||(t[d]=void 0)}else t[s]=void 0;else t=t[s]}}}},{"../is":83}],102:[function(e,t,r){"use strict";t.exports=function(e,t){t||(t=function(){if(1===arguments.length)return arguments[0];if(0===arguments.length)return"undefined";for(var e=[],t=0;t<arguments.length;t++)e.push(arguments[t]);return e.join("$")});var r=function(){var n,i=this,a=arguments,o=t.apply(i,a),s=r.cache;return(n=s[o])||(n=s[o]=e.apply(i,a)),n};return r.cache={},r}},{}],103:[function(e,t,r){"use strict";var n="(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))",i="rgb[a]?\\(("+n+"[%]?)\\s*,\\s*("+n+"[%]?)\\s*,\\s*("+n+"[%]?)(?:\\s*,\\s*("+n+"))?\\)",a="rgb[a]?\\((?:"+n+"[%]?)\\s*,\\s*(?:"+n+"[%]?)\\s*,\\s*(?:"+n+"[%]?)(?:\\s*,\\s*(?:"+n+"))?\\)",o="hsl[a]?\\(("+n+")\\s*,\\s*("+n+"[%])\\s*,\\s*("+n+"[%])(?:\\s*,\\s*("+n+"))?\\)",s="hsl[a]?\\((?:"+n+")\\s*,\\s*(?:"+n+"[%])\\s*,\\s*(?:"+n+"[%])(?:\\s*,\\s*(?:"+n+"))?\\)",l="\\#[0-9a-fA-F]{3}",u="\\#[0-9a-fA-F]{6}";t.exports={regex:{number:n,rgba:i,rgbaNoBackRefs:a,hsla:o,hslaNoBackRefs:s,hex3:l,hex6:u}}},{}],104:[function(e,t,r){"use strict";var n=e("./memoize"),i=e("../is");t.exports={camel2dash:n(function(e){return e.replace(/([A-Z])/g,function(e){return"-"+e.toLowerCase()})}),dash2camel:n(function(e){return e.replace(/(-\w)/g,function(e){return e[1].toUpperCase()})}),prependCamel:n(function(e,t){return e+t[0].toUpperCase()+t.substring(1)},function(e,t){return e+"$"+t}),capitalize:function(e){return i.emptyString(e)?e:e.charAt(0).toUpperCase()+e.substring(1)}}},{"../is":83,"./memoize":102}],105:[function(e,t,r){"use strict";var n=e("../window"),i=e("../is"),a=n?n.performance:null,o={},s=n?n.requestAnimationFrame||n.mozRequestAnimationFrame||n.webkitRequestAnimationFrame||n.msRequestAnimationFrame:null;s=s||function(e){e&&setTimeout(function(){e(l())},1e3/60)},o.requestAnimationFrame=function(e){s(e)};var l=a&&a.now?function(){return a.now()}:function(){return Date.now()};o.performanceNow=l,o.throttle=function(e,t,r){var n=!0,a=!0;return r===!1?n=!1:i.plainObject(r)&&(n="leading"in r?r.leading:n,a="trailing"in r?r.trailing:a),r=r||{},r.leading=n,r.maxWait=t,r.trailing=a,o.debounce(e,t,r)},o.now=function(){return Date.now()},o.debounce=function(e,t,r){var n,a,o,s,l,u,c,d=this,h=0,p=!1,f=!0;if(i.fn(e)){if(t=Math.max(0,t)||0,r===!0){var v=!0;f=!1}else i.plainObject(r)&&(v=r.leading,p="maxWait"in r&&(Math.max(t,r.maxWait)||0),f="trailing"in r?r.trailing:f);var g=function(){var r=t-(d.now()-s);if(0>=r){a&&clearTimeout(a);var i=c;a=u=c=void 0,i&&(h=d.now(),o=e.apply(l,n),u||a||(n=l=null))}else u=setTimeout(g,r)},y=function(){u&&clearTimeout(u),a=u=c=void 0,(f||p!==t)&&(h=d.now(),o=e.apply(l,n),u||a||(n=l=null))};return function(){if(n=arguments,s=d.now(),l=this,c=f&&(u||!v),p===!1)var r=v&&!u;else{a||v||(h=s);var i=p-(s-h),m=0>=i;m?(a&&(a=clearTimeout(a)),h=s,o=e.apply(l,n)):a||(a=setTimeout(y,i))}return m&&u?u=clearTimeout(u):u||t===p||(u=setTimeout(g,t)),r&&(m=!0,o=e.apply(l,n)),!m||u||a||(n=l=null),o}}},t.exports=o},{"../is":83,"../window":107}],106:[function(e,t,r){t.exports="2.7.8"},{}],107:[function(e,t,r){t.exports="undefined"==typeof window?null:window},{}]},{},[82])(82)}); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/cytoscape/js/min/json2.min.js b/wqflask/wqflask/static/packages/cytoscape/js/min/json2.min.js
deleted file mode 100644
index 273eca0f..00000000
--- a/wqflask/wqflask/static/packages/cytoscape/js/min/json2.min.js
+++ /dev/null
@@ -1 +0,0 @@
-if(!this.JSON){this.JSON={}}(function(){function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||"null"}v=partial.length===0?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]";gap=mind;return v}if(rep&&typeof rep==="object"){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==="string"){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}v=partial.length===0?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}";gap=mind;return v}}if(typeof JSON.stringify!=="function"){JSON.stringify=function(value,replacer,space){var i;gap="";indent="";if(typeof space==="number"){for(i=0;i<space;i+=1){indent+=" "}}else{if(typeof space==="string"){indent=space}}rep=replacer;if(replacer&&typeof replacer!=="function"&&(typeof replacer!=="object"||typeof replacer.length!=="number")){throw new Error("JSON.stringify")}return str("",{"":value})}}if(typeof JSON.parse!=="function"){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==="object"){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("JSON.parse")}}}()); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/cytoscape/js/src/AC_OETags.js b/wqflask/wqflask/static/packages/cytoscape/js/src/AC_OETags.js
deleted file mode 100644
index de66406e..00000000
--- a/wqflask/wqflask/static/packages/cytoscape/js/src/AC_OETags.js
+++ /dev/null
@@ -1,278 +0,0 @@
-// Flash Player Version Detection - Rev 1.6
-// Detect Client Browser type
-// Copyright(c) 2005-2006 Adobe Macromedia Software, LLC. All rights reserved.
-var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
-var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
-var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
-
-function ControlVersion()
-{
- var version;
- var axo;
- var e;
-
- // NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
-
- try {
- // version will be set for 7.X or greater players
- axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
- version = axo.GetVariable("$version");
- } catch (e) {
- }
-
- if (!version)
- {
- try {
- // version will be set for 6.X players only
- axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
-
- // installed player is some revision of 6.0
- // GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
- // so we have to be careful.
-
- // default to the first public version
- version = "WIN 6,0,21,0";
-
- // throws if AllowScripAccess does not exist (introduced in 6.0r47)
- axo.AllowScriptAccess = "always";
-
- // safe to call for 6.0r47 or greater
- version = axo.GetVariable("$version");
-
- } catch (e) {
- }
- }
-
- if (!version)
- {
- try {
- // version will be set for 4.X or 5.X player
- axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
- version = axo.GetVariable("$version");
- } catch (e) {
- }
- }
-
- if (!version)
- {
- try {
- // version will be set for 3.X player
- axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
- version = "WIN 3,0,18,0";
- } catch (e) {
- }
- }
-
- if (!version)
- {
- try {
- // version will be set for 2.X player
- axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
- version = "WIN 2,0,0,11";
- } catch (e) {
- version = -1;
- }
- }
-
- return version;
-}
-
-// JavaScript helper required to detect Flash Player PlugIn version information
-function GetSwfVer(){
- // NS/Opera version >= 3 check for Flash plugin in plugin array
- var flashVer = -1;
-
- if (navigator.plugins != null && navigator.plugins.length > 0) {
- if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
- var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
- var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
- var descArray = flashDescription.split(" ");
- var tempArrayMajor = descArray[2].split(".");
- var versionMajor = tempArrayMajor[0];
- var versionMinor = tempArrayMajor[1];
- var versionRevision = descArray[3];
- if (versionRevision == "") {
- versionRevision = descArray[4];
- }
- if (versionRevision[0] == "d") {
- versionRevision = versionRevision.substring(1);
- } else if (versionRevision[0] == "r") {
- versionRevision = versionRevision.substring(1);
- if (versionRevision.indexOf("d") > 0) {
- versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
- }
- } else if (versionRevision[0] == "b") {
- versionRevision = versionRevision.substring(1);
- }
- var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
- }
- }
- // MSN/WebTV 2.6 supports Flash 4
- else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
- // WebTV 2.5 supports Flash 3
- else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
- // older WebTV supports Flash 2
- else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
- else if ( isIE && isWin && !isOpera ) {
- flashVer = ControlVersion();
- }
- return flashVer;
-}
-
-// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
-function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
-{
- versionStr = GetSwfVer();
- if (versionStr == -1 ) {
- return false;
- } else if (versionStr != 0) {
- if(isIE && isWin && !isOpera) {
- // Given "WIN 2,0,0,11"
- tempArray = versionStr.split(" "); // ["WIN", "2,0,0,11"]
- tempString = tempArray[1]; // "2,0,0,11"
- versionArray = tempString.split(","); // ['2', '0', '0', '11']
- } else {
- versionArray = versionStr.split(".");
- }
- var versionMajor = versionArray[0];
- var versionMinor = versionArray[1];
- var versionRevision = versionArray[2];
-
- // is the major.revision >= requested major.revision AND the minor version >= requested minor
- if (versionMajor > parseFloat(reqMajorVer)) {
- return true;
- } else if (versionMajor == parseFloat(reqMajorVer)) {
- if (versionMinor > parseFloat(reqMinorVer))
- return true;
- else if (versionMinor == parseFloat(reqMinorVer)) {
- if (versionRevision >= parseFloat(reqRevision))
- return true;
- }
- }
- return false;
- }
-}
-
-function AC_AddExtension(src, ext)
-{
- if (src.indexOf('?') != -1)
- return src.replace(/\?/, ext+'?');
- else
- return src + ext;
-}
-
-function AC_Generateobj(objAttrs, params, embedAttrs)
-{
- var str = '';
- if (isIE && isWin && !isOpera)
- {
- str += '<object ';
- for (var i in objAttrs)
- str += i + '="' + objAttrs[i] + '" ';
- str += '>';
- for (var i in params)
- str += '<param name="' + i + '" value="' + params[i] + '" /> ';
- str += '</object>';
- } else {
- str += '<embed ';
- for (var i in embedAttrs)
- str += i + '="' + embedAttrs[i] + '" ';
- str += '> </embed>';
- }
-
- document.write(str);
-}
-
-function AC_FL_RunContent(){
- var ret =
- AC_GetArgs
- ( arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
- , "application/x-shockwave-flash"
- );
- AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
-}
-
-function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
- var ret = new Object();
- ret.embedAttrs = new Object();
- ret.params = new Object();
- ret.objAttrs = new Object();
- for (var i=0; i < args.length; i=i+2){
- var currArg = args[i].toLowerCase();
-
- switch (currArg){
- case "classid":
- break;
- case "pluginspage":
- ret.embedAttrs[args[i]] = args[i+1];
- break;
- case "src":
- case "movie":
- args[i+1] = AC_AddExtension(args[i+1], ext);
- ret.embedAttrs["src"] = args[i+1];
- ret.params[srcParamName] = args[i+1];
- break;
- case "onafterupdate":
- case "onbeforeupdate":
- case "onblur":
- case "oncellchange":
- case "onclick":
- case "ondblClick":
- case "ondrag":
- case "ondragend":
- case "ondragenter":
- case "ondragleave":
- case "ondragover":
- case "ondrop":
- case "onfinish":
- case "onfocus":
- case "onhelp":
- case "onmousedown":
- case "onmouseup":
- case "onmouseover":
- case "onmousemove":
- case "onmouseout":
- case "onkeypress":
- case "onkeydown":
- case "onkeyup":
- case "onload":
- case "onlosecapture":
- case "onpropertychange":
- case "onreadystatechange":
- case "onrowsdelete":
- case "onrowenter":
- case "onrowexit":
- case "onrowsinserted":
- case "onstart":
- case "onscroll":
- case "onbeforeeditfocus":
- case "onactivate":
- case "onbeforedeactivate":
- case "ondeactivate":
- case "type":
- case "codebase":
- ret.objAttrs[args[i]] = args[i+1];
- break;
- case "id":
- case "width":
- case "height":
- case "align":
- case "vspace":
- case "hspace":
- case "class":
- case "title":
- case "accesskey":
- case "name":
- case "tabindex":
- ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
- break;
- default:
- ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
- }
- }
- ret.objAttrs["classid"] = classid;
- if (mimeType) ret.embedAttrs["type"] = mimeType;
- return ret;
-}
-
-
diff --git a/wqflask/wqflask/static/packages/cytoscape/js/src/cytoscape-panzoom.js b/wqflask/wqflask/static/packages/cytoscape/js/src/cytoscape-panzoom.js
deleted file mode 100644
index 3024cda5..00000000
--- a/wqflask/wqflask/static/packages/cytoscape/js/src/cytoscape-panzoom.js
+++ /dev/null
@@ -1,594 +0,0 @@
-/*!
-Copyright (c) The Cytoscape Consortium
-
-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.
-*/
-
-;(function(){ 'use strict';
-
- // registers the extension on a cytoscape lib ref
- var register = function( cytoscape, $ ){
- if( !cytoscape ){ return; } // can't register if cytoscape unspecified
-
- $.fn.cyPanzoom = $.fn.cytoscapePanzoom = function( options ){
- panzoom.apply( this, [ options, $ ] );
-
- return this; // chainability
- };
-
- // if you want a core extension
- cytoscape('core', 'panzoom', function( options ){ // could use options object, but args are up to you
- var cy = this;
-
- panzoom.apply( cy.container(), [ options, $ ] );
-
- return this; // chainability
- });
-
- };
-
- var defaults = {
- zoomFactor: 0.05, // zoom factor per zoom tick
- zoomDelay: 45, // how many ms between zoom ticks
- minZoom: 0.1, // min zoom level
- maxZoom: 10, // max zoom level
- fitPadding: 50, // padding when fitting
- panSpeed: 10, // how many ms in between pan ticks
- panDistance: 10, // max pan distance per tick
- panDragAreaSize: 75, // the length of the pan drag box in which the vector for panning is calculated (bigger = finer control of pan speed and direction)
- panMinPercentSpeed: 0.25, // the slowest speed we can pan by (as a percent of panSpeed)
- panInactiveArea: 8, // radius of inactive area in pan drag box
- panIndicatorMinOpacity: 0.5, // min opacity of pan indicator (the draggable nib); scales from this to 1.0
- zoomOnly: false, // a minimal version of the ui only with zooming (useful on systems with bad mousewheel resolution)
- fitSelector: undefined, // selector of elements to fit
- animateOnFit: function(){ // whether to animate on fit
- return false;
- },
- fitAnimationDuration: 1000, // duration of animation on fit
-
- // icon class names
- sliderHandleIcon: 'fa fa-minus',
- zoomInIcon: 'fa fa-plus',
- zoomOutIcon: 'fa fa-minus',
- resetIcon: 'fa fa-expand'
- };
-
- var panzoom = function( params, $ ){
- var options = $.extend(true, {}, defaults, params);
- var fn = params;
-
- var functions = {
- destroy: function(){
- var $this = $(this);
- var $pz = $this.find(".cy-panzoom");
-
- $pz.data('winbdgs').forEach(function( l ){
- $(window).unbind( l.evt, l.fn );
- });
-
- $pz.data('cybdgs').forEach(function( l ){
- $this.cytoscape('get').off( l.evt, l.fn );
- });
-
- $pz.remove();
- },
-
- init: function(){
- var browserIsMobile = 'ontouchstart' in window;
-
- return $(this).each(function(){
- var $container = $(this);
-
- var winbdgs = [];
- var $win = $(window);
-
- var windowBind = function( evt, fn ){
- winbdgs.push({ evt: evt, fn: fn });
-
- $win.bind( evt, fn );
- };
-
- var windowUnbind = function( evt, fn ){
- for( var i = 0; i < winbdgs.length; i++ ){
- var l = winbdgs[i];
-
- if( l.evt === evt && l.fn === fn ){
- winbdgs.splice( i, 1 );
- break;
- }
- }
-
- $win.unbind( evt, fn );
- };
-
- var cybdgs = [];
- var cy = $container.cytoscape('get');
-
- var cyOn = function( evt, fn ){
- cybdgs.push({ evt: evt, fn: fn });
-
- cy.on( evt, fn );
- };
-
- var cyOff = function( evt, fn ){
- for( var i = 0; i < cybdgs.length; i++ ){
- var l = cybdgs[i];
-
- if( l.evt === evt && l.fn === fn ){
- cybdgs.splice( i, 1 );
- break;
- }
- }
-
- cy.off( evt, fn );
- };
-
- var $panzoom = $('<div class="cy-panzoom"></div>');
- $container.prepend( $panzoom );
-
- $panzoom.css('position', 'absolute'); // must be absolute regardless of stylesheet
-
- $panzoom.data('winbdgs', winbdgs);
- $panzoom.data('cybdgs', cybdgs);
-
- if( options.zoomOnly ){
- $panzoom.addClass("cy-panzoom-zoom-only");
- }
-
- // add base html elements
- /////////////////////////
-
- var $zoomIn = $('<div class="cy-panzoom-zoom-in cy-panzoom-zoom-button"><span class="icon '+ options.zoomInIcon +'"></span></div>');
- $panzoom.append( $zoomIn );
-
- var $zoomOut = $('<div class="cy-panzoom-zoom-out cy-panzoom-zoom-button"><span class="icon ' + options.zoomOutIcon + '"></span></div>');
- $panzoom.append( $zoomOut );
-
- var $reset = $('<div class="cy-panzoom-reset cy-panzoom-zoom-button"><span class="icon ' + options.resetIcon + '"></span></div>');
- $panzoom.append( $reset );
-
- var $slider = $('<div class="cy-panzoom-slider"></div>');
- $panzoom.append( $slider );
-
- $slider.append('<div class="cy-panzoom-slider-background"></div>');
-
- var $sliderHandle = $('<div class="cy-panzoom-slider-handle"><span class="icon ' + options.sliderHandleIcon + '"></span></div>');
- $slider.append( $sliderHandle );
-
- var $noZoomTick = $('<div class="cy-panzoom-no-zoom-tick"></div>');
- $slider.append( $noZoomTick );
-
- var $panner = $('<div class="cy-panzoom-panner"></div>');
- $panzoom.append( $panner );
-
- var $pHandle = $('<div class="cy-panzoom-panner-handle"></div>');
- $panner.append( $pHandle );
-
- var $pUp = $('<div class="cy-panzoom-pan-up cy-panzoom-pan-button"></div>');
- var $pDown = $('<div class="cy-panzoom-pan-down cy-panzoom-pan-button"></div>');
- var $pLeft = $('<div class="cy-panzoom-pan-left cy-panzoom-pan-button"></div>');
- var $pRight = $('<div class="cy-panzoom-pan-right cy-panzoom-pan-button"></div>');
- $panner.append( $pUp ).append( $pDown ).append( $pLeft ).append( $pRight );
-
- var $pIndicator = $('<div class="cy-panzoom-pan-indicator"></div>');
- $panner.append( $pIndicator );
-
- // functions for calculating panning
- ////////////////////////////////////
-
- function handle2pan(e){
- var v = {
- x: e.originalEvent.pageX - $panner.offset().left - $panner.width()/2,
- y: e.originalEvent.pageY - $panner.offset().top - $panner.height()/2
- }
-
- var r = options.panDragAreaSize;
- var d = Math.sqrt( v.x*v.x + v.y*v.y );
- var percent = Math.min( d/r, 1 );
-
- if( d < options.panInactiveArea ){
- return {
- x: NaN,
- y: NaN
- };
- }
-
- v = {
- x: v.x/d,
- y: v.y/d
- };
-
- percent = Math.max( options.panMinPercentSpeed, percent );
-
- var vnorm = {
- x: -1 * v.x * (percent * options.panDistance),
- y: -1 * v.y * (percent * options.panDistance)
- };
-
- return vnorm;
- }
-
- function donePanning(){
- clearInterval(panInterval);
- windowUnbind("mousemove", handler);
-
- $pIndicator.hide();
- }
-
- function positionIndicator(pan){
- var v = pan;
- var d = Math.sqrt( v.x*v.x + v.y*v.y );
- var vnorm = {
- x: -1 * v.x/d,
- y: -1 * v.y/d
- };
-
- var w = $panner.width();
- var h = $panner.height();
- var percent = d/options.panDistance;
- var opacity = Math.max( options.panIndicatorMinOpacity, percent );
- var color = 255 - Math.round( opacity * 255 );
-
- $pIndicator.show().css({
- left: w/2 * vnorm.x + w/2,
- top: h/2 * vnorm.y + h/2,
- background: "rgb(" + color + ", " + color + ", " + color + ")"
- });
- }
-
- function calculateZoomCenterPoint(){
- var cy = $container.cytoscape("get");
- var pan = cy.pan();
- var zoom = cy.zoom();
-
- zx = $container.width()/2;
- zy = $container.height()/2;
- }
-
- var zooming = false;
- function startZooming(){
- zooming = true;
-
- calculateZoomCenterPoint();
- }
-
-
- function endZooming(){
- zooming = false;
- }
-
- var zx, zy;
- function zoomTo(level){
- var cy = $container.cytoscape("get");
-
- if( !zooming ){ // for non-continuous zooming (e.g. click slider at pt)
- calculateZoomCenterPoint();
- }
-
- cy.zoom({
- level: level,
- renderedPosition: { x: zx, y: zy }
- });
- }
-
- var panInterval;
-
- var handler = function(e){
- e.stopPropagation(); // don't trigger dragging of panzoom
- e.preventDefault(); // don't cause text selection
- clearInterval(panInterval);
-
- var pan = handle2pan(e);
-
- if( isNaN(pan.x) || isNaN(pan.y) ){
- $pIndicator.hide();
- return;
- }
-
- positionIndicator(pan);
- panInterval = setInterval(function(){
- $container.cytoscape("get").panBy(pan);
- }, options.panSpeed);
- };
-
- $pHandle.bind("mousedown", function(e){
- // handle click of icon
- handler(e);
-
- // update on mousemove
- windowBind("mousemove", handler);
- });
-
- $pHandle.bind("mouseup", function(){
- donePanning();
- });
-
- windowBind("mouseup blur", function(){
- donePanning();
- });
-
-
-
- // set up slider behaviour
- //////////////////////////
-
- $slider.bind('mousedown', function(){
- return false; // so we don't pan close to the slider handle
- });
-
- var sliderVal;
- var sliding = false;
- var sliderPadding = 2;
-
- function setSliderFromMouse(evt, handleOffset){
- if( handleOffset === undefined ){
- handleOffset = 0;
- }
-
- var padding = sliderPadding;
- var min = 0 + padding;
- var max = $slider.height() - $sliderHandle.height() - 2*padding;
- var top = evt.pageY - $slider.offset().top - handleOffset;
-
- // constrain to slider bounds
- if( top < min ){ top = min }
- if( top > max ){ top = max }
-
- var percent = 1 - (top - min) / ( max - min );
-
- // move the handle
- $sliderHandle.css('top', top);
-
- var zmin = options.minZoom;
- var zmax = options.maxZoom;
-
- // assume (zoom = zmax ^ p) where p ranges on (x, 1) with x negative
- var x = Math.log(zmin) / Math.log(zmax);
- var p = (1 - x)*percent + x;
-
- // change the zoom level
- var z = Math.pow( zmax, p );
-
- // bound the zoom value in case of floating pt rounding error
- if( z < zmin ){
- z = zmin;
- } else if( z > zmax ){
- z = zmax;
- }
-
- zoomTo( z );
- }
-
- var sliderMdownHandler, sliderMmoveHandler;
- $sliderHandle.bind('mousedown', sliderMdownHandler = function( mdEvt ){
- var handleOffset = mdEvt.target === $sliderHandle[0] ? mdEvt.offsetY : 0;
- sliding = true;
-
- startZooming();
- $sliderHandle.addClass("active");
-
- var lastMove = 0;
- windowBind('mousemove', sliderMmoveHandler = function( mmEvt ){
- var now = +new Date;
-
- // throttle the zooms every 10 ms so we don't call zoom too often and cause lag
- if( now > lastMove + 10 ){
- lastMove = now;
- } else {
- return false;
- }
-
- setSliderFromMouse(mmEvt, handleOffset);
-
- return false;
- });
-
- // unbind when
- windowBind('mouseup', function(){
- windowUnbind('mousemove', sliderMmoveHandler);
- sliding = false;
-
- $sliderHandle.removeClass("active");
- endZooming();
- });
-
- return false;
- });
-
- $slider.bind('mousedown', function(e){
- if( e.target !== $sliderHandle[0] ){
- sliderMdownHandler(e);
- setSliderFromMouse(e);
- }
- });
-
- function positionSliderFromZoom(){
- var cy = $container.cytoscape("get");
- var z = cy.zoom();
- var zmin = options.minZoom;
- var zmax = options.maxZoom;
-
- // assume (zoom = zmax ^ p) where p ranges on (x, 1) with x negative
- var x = Math.log(zmin) / Math.log(zmax);
- var p = Math.log(z) / Math.log(zmax);
- var percent = 1 - (p - x) / (1 - x); // the 1- bit at the front b/c up is in the -ve y direction
-
- var min = sliderPadding;
- var max = $slider.height() - $sliderHandle.height() - 2*sliderPadding;
- var top = percent * ( max - min );
-
- // constrain to slider bounds
- if( top < min ){ top = min }
- if( top > max ){ top = max }
-
- // move the handle
- $sliderHandle.css('top', top);
- }
-
- positionSliderFromZoom();
-
- cyOn('zoom', function(){
- if( !sliding ){
- positionSliderFromZoom();
- }
- });
-
- // set the position of the zoom=1 tick
- (function(){
- var z = 1;
- var zmin = options.minZoom;
- var zmax = options.maxZoom;
-
- // assume (zoom = zmax ^ p) where p ranges on (x, 1) with x negative
- var x = Math.log(zmin) / Math.log(zmax);
- var p = Math.log(z) / Math.log(zmax);
- var percent = 1 - (p - x) / (1 - x); // the 1- bit at the front b/c up is in the -ve y direction
-
- if( percent > 1 || percent < 0 ){
- $noZoomTick.hide();
- return;
- }
-
- var min = sliderPadding;
- var max = $slider.height() - $sliderHandle.height() - 2*sliderPadding;
- var top = percent * ( max - min );
-
- // constrain to slider bounds
- if( top < min ){ top = min }
- if( top > max ){ top = max }
-
- $noZoomTick.css('top', top);
- })();
-
- // set up zoom in/out buttons
- /////////////////////////////
-
- function bindButton($button, factor){
- var zoomInterval;
-
- $button.bind("mousedown", function(e){
- e.preventDefault();
- e.stopPropagation();
-
- if( e.button != 0 ){
- return;
- }
-
- var cy = $container.cytoscape("get");
- var doZoom = function(){
- var zoom = cy.zoom();
- var lvl = cy.zoom() * factor;
-
- if( lvl < options.minZoom ){
- lvl = options.minZoom;
- }
-
- if( lvl > options.maxZoom ){
- lvl = options.maxZoom;
- }
-
- if( (lvl == options.maxZoom && zoom == options.maxZoom) ||
- (lvl == options.minZoom && zoom == options.minZoom)
- ){
- return;
- }
-
- zoomTo(lvl);
- };
-
- startZooming();
- doZoom();
- zoomInterval = setInterval(doZoom, options.zoomDelay);
-
- return false;
- });
-
- windowBind("mouseup blur", function(){
- clearInterval(zoomInterval);
- endZooming();
- });
- }
-
- bindButton( $zoomIn, (1 + options.zoomFactor) );
- bindButton( $zoomOut, (1 - options.zoomFactor) );
-
- $reset.bind("mousedown", function(e){
- if( e.button != 0 ){
- return;
- }
-
- var cy = $container.cytoscape("get");
- var elesToFit = options.fitSelector?cy.elements(options.fitSelector):cy.elements();
-
- if( elesToFit.size() === 0 ){
- cy.reset();
- } else {
- var animateOnFit = typeof options.animateOnFit === 'function' ? options.animateOnFit.call() : options.animateOnFit;
- if(animateOnFit){
- cy.animate({
- fit: {
- eles: elesToFit,
- padding: options.fitPadding
- }
- }, {
- duration: options.fitAnimationDuration
- });
- }
- else{
- cy.fit( elesToFit, options.fitPadding );
- }
-
- }
-
- return false;
- });
-
-
-
- });
- }
- };
-
- if( functions[fn] ){
- return functions[fn].apply(this, Array.prototype.slice.call( arguments, 1 ));
- } else if( typeof fn == 'object' || !fn ) {
- return functions.init.apply( this, arguments );
- } else {
- $.error("No such function `"+ fn +"` for jquery.cytoscapePanzoom");
- }
-
- return $(this);
- };
-
-
- if( typeof module !== 'undefined' && module.exports ){ // expose as a commonjs module
- module.exports = register;
- }
-
- if( typeof define !== 'undefined' && define.amd ){ // expose as an amd/requirejs module
- define('cytoscape-panzoom', function(){
- return register;
- });
- }
-
- if( typeof cytoscape !== 'undefined' && typeof jQuery !== 'undefined' ){ // expose to global cytoscape (i.e. window.cytoscape)
- register( cytoscape, jQuery );
- }
-
-})();
diff --git a/wqflask/wqflask/static/packages/cytoscape/js/src/cytoscape-qtip.js b/wqflask/wqflask/static/packages/cytoscape/js/src/cytoscape-qtip.js
deleted file mode 100644
index 9527279c..00000000
--- a/wqflask/wqflask/static/packages/cytoscape/js/src/cytoscape-qtip.js
+++ /dev/null
@@ -1,398 +0,0 @@
-/*!
-Copyright (c) The Cytoscape Consortium
-
-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.
-*/
-
-;(function( $, $$ ){ 'use strict';
-
- var isObject = function(o){
- return o != null && typeof o === 'object';
- };
-
- var isFunction = function(o){
- return o != null && typeof o === 'function';
- };
-
- var isNumber = function(o){
- return o != null && typeof o === 'number';
- };
-
- var isString = function(o){
- return o != null && typeof o === 'string';
- };
-
- var isUndef = function(o){
- return o === undefined;
- };
-
- var wrap = function(obj, target) {
- if( isFunction(obj) ) {
- return function(event, api){
- return obj.apply( target, [event, api] );
- };
- } else {
- return obj;
- }
- };
-
- var throttle = function(func, wait, options) {
- var leading = true,
- trailing = true;
-
- if (options === false) {
- leading = false;
- } else if (isObject(options)) {
- leading = 'leading' in options ? options.leading : leading;
- trailing = 'trailing' in options ? options.trailing : trailing;
- }
- options = options || {};
- options.leading = leading;
- options.maxWait = wait;
- options.trailing = trailing;
-
- return debounce(func, wait, options);
- };
-
- var debounce = function(func, wait, options) { // ported lodash debounce function
- var args,
- maxTimeoutId,
- result,
- stamp,
- thisArg,
- timeoutId,
- trailingCall,
- lastCalled = 0,
- maxWait = false,
- trailing = true;
-
- if (!isFunction(func)) {
- return;
- }
- wait = Math.max(0, wait) || 0;
- if (options === true) {
- var leading = true;
- trailing = false;
- } else if (isObject(options)) {
- leading = options.leading;
- maxWait = 'maxWait' in options && (Math.max(wait, options.maxWait) || 0);
- trailing = 'trailing' in options ? options.trailing : trailing;
- }
- var delayed = function() {
- var remaining = wait - (Date.now() - stamp);
- if (remaining <= 0) {
- if (maxTimeoutId) {
- clearTimeout(maxTimeoutId);
- }
- var isCalled = trailingCall;
- maxTimeoutId = timeoutId = trailingCall = undefined;
- if (isCalled) {
- lastCalled = Date.now();
- result = func.apply(thisArg, args);
- if (!timeoutId && !maxTimeoutId) {
- args = thisArg = null;
- }
- }
- } else {
- timeoutId = setTimeout(delayed, remaining);
- }
- };
-
- var maxDelayed = function() {
- if (timeoutId) {
- clearTimeout(timeoutId);
- }
- maxTimeoutId = timeoutId = trailingCall = undefined;
- if (trailing || (maxWait !== wait)) {
- lastCalled = Date.now();
- result = func.apply(thisArg, args);
- if (!timeoutId && !maxTimeoutId) {
- args = thisArg = null;
- }
- }
- };
-
- return function() {
- args = arguments;
- stamp = Date.now();
- thisArg = this;
- trailingCall = trailing && (timeoutId || !leading);
-
- if (maxWait === false) {
- var leadingCall = leading && !timeoutId;
- } else {
- if (!maxTimeoutId && !leading) {
- lastCalled = stamp;
- }
- var remaining = maxWait - (stamp - lastCalled),
- isCalled = remaining <= 0;
-
- if (isCalled) {
- if (maxTimeoutId) {
- maxTimeoutId = clearTimeout(maxTimeoutId);
- }
- lastCalled = stamp;
- result = func.apply(thisArg, args);
- }
- else if (!maxTimeoutId) {
- maxTimeoutId = setTimeout(maxDelayed, remaining);
- }
- }
- if (isCalled && timeoutId) {
- timeoutId = clearTimeout(timeoutId);
- }
- else if (!timeoutId && wait !== maxWait) {
- timeoutId = setTimeout(delayed, wait);
- }
- if (leadingCall) {
- isCalled = true;
- result = func.apply(thisArg, args);
- }
- if (isCalled && !timeoutId && !maxTimeoutId) {
- args = thisArg = null;
- }
- return result;
- };
- };
-
- function register( $$, $ ){
-
- // use a single dummy dom ele as target for every qtip
- var $qtipContainer = $('<div></div>');
- var viewportDebounceRate = 250;
-
- function generateOpts( target, passedOpts ){
- var qtip = target.scratch().qtip;
- var opts = $.extend( {}, passedOpts );
-
- if( !opts.id ){
- opts.id = 'cy-qtip-target-' + ( Date.now() + Math.round( Math.random() * 10000) );
- }
-
- if( !qtip.$domEle ){
- qtip.$domEle = $qtipContainer;
- }
-
- // qtip should be positioned relative to cy dom container
- opts.position = opts.position || {};
- opts.position.container = opts.position.container || $( document.body );
- opts.position.viewport = opts.position.viewport || $( document.body );
- opts.position.target = [0, 0];
- opts.position.my = opts.position.my || 'top center';
- opts.position.at = opts.position.at || 'bottom center';
-
- // adjust
- var adjust = opts.position.adjust = opts.position.adjust || {};
- adjust.method = adjust.method || 'flip';
- adjust.mouse = false;
-
- if( isUndef(adjust.cyAdjustToEleBB) ){
- adjust.cyAdjustToEleBB = true;
- }
-
- // default show event
- opts.show = opts.show || {};
-
- if( isUndef(opts.show.event) ){
- opts.show.event = 'tap';
- }
-
- // default hide event
- opts.hide = opts.hide || {};
- opts.hide.cyViewport = opts.hide.cyViewport === undefined ? true : opts.hide.cyViewport;
-
- if( isUndef(opts.hide.event) ){
- opts.hide.event = 'unfocus';
- }
-
- // so multiple qtips can exist at once (only works on recent qtip2 versions)
- opts.overwrite = false;
-
- if( opts.content ){
- if ( isFunction(opts.content) || isString(opts.content) ){
- opts.content = wrap( opts.content, target );
- } else {
- opts.content = {
- text: wrap( opts.content.text, target ),
- title: wrap( opts.content.title, target )
- };
- }
- }
-
- return opts;
- }
-
- $$('collection', 'qtip', function( passedOpts ){
- var eles = this;
- var cy = this.cy();
- var container = cy.container();
-
- if( passedOpts === 'api' ){
- return this.scratch().qtip.api;
- }
-
- eles.each(function(i, ele){
- var scratch = ele.scratch();
- var qtip = scratch.qtip = scratch.qtip || {};
- var opts = generateOpts( ele, passedOpts );
- var adjNums = opts.position.adjust;
-
-
- qtip.$domEle.qtip( opts );
- var qtipApi = qtip.api = qtip.$domEle.qtip('api'); // save api ref
- qtip.$domEle.removeData('qtip'); // remove qtip dom/api ref to be safe
-
- var updatePosition = function(e){
- var cOff = container.getBoundingClientRect();
- var pos = ele.renderedPosition() || ( e ? e.cyRenderedPosition : undefined );
- if( !pos || pos.x == null || isNaN(pos.x) ){ return; }
-
- if( opts.position.adjust.cyAdjustToEleBB && ele.isNode() ){
- var my = opts.position.my.toLowerCase();
- var at = opts.position.at.toLowerCase();
- var z = cy.zoom();
- var w = ele.outerWidth() * z;
- var h = ele.outerHeight() * z;
-
- if( at.match('top') ){
- pos.y -= h/2;
- } else if( at.match('bottom') ){
- pos.y += h/2;
- }
-
- if( at.match('left') ){
- pos.x -= w/2;
- } else if( at.match('right') ){
- pos.x += w/2;
- }
-
- if( isNumber(adjNums.x) ){
- pos.x += adjNums.x;
- }
-
- if( isNumber(adjNums.y) ){
- pos.y += adjNums.y;
- }
- }
-
- qtipApi.set('position.adjust.x', cOff.left + pos.x + window.pageXOffset);
- qtipApi.set('position.adjust.y', cOff.top + pos.y + window.pageYOffset);
- };
- updatePosition();
-
- ele.on( opts.show.event, function(e){
- updatePosition(e);
-
- qtipApi.show();
- } );
-
- ele.on( opts.hide.event, function(e){
- qtipApi.hide();
- } );
-
- if( opts.hide.cyViewport ){
- cy.on('viewport', debounce(function(){
- qtipApi.hide();
- }, viewportDebounceRate, { leading: true }) );
- }
-
- if( opts.position.adjust.cyViewport ){
- cy.on('pan zoom', debounce(function(e){
- updatePosition(e);
-
- qtipApi.reposition();
- }, viewportDebounceRate, { trailing: true }) );
- }
-
- });
-
- return this; // chainability
-
- });
-
- $$('core', 'qtip', function( passedOpts ){
- var cy = this;
- var container = cy.container();
-
- if( passedOpts === 'api' ){
- return this.scratch().qtip.api;
- }
-
- var scratch = cy.scratch();
- var qtip = scratch.qtip = scratch.qtip || {};
- var opts = generateOpts( cy, passedOpts );
-
-
- qtip.$domEle.qtip( opts );
- var qtipApi = qtip.api = qtip.$domEle.qtip('api'); // save api ref
- qtip.$domEle.removeData('qtip'); // remove qtip dom/api ref to be safe
-
- var updatePosition = function(e){
- var cOff = container.getBoundingClientRect();
- var pos = e.cyRenderedPosition;
- if( !pos || pos.x == null || isNaN(pos.x) ){ return; }
-
- qtipApi.set('position.adjust.x', cOff.left + pos.x + window.pageXOffset);
- qtipApi.set('position.adjust.y', cOff.top + pos.y + window.pageYOffset);
- };
-
- cy.on( opts.show.event, function(e){
- if( !opts.show.cyBgOnly || (opts.show.cyBgOnly && e.cyTarget === cy) ){
- updatePosition(e);
-
- qtipApi.show();
- }
- } );
-
- cy.on( opts.hide.event, function(e){
- if( !opts.hide.cyBgOnly || (opts.hide.cyBgOnly && e.cyTarget === cy) ){
- qtipApi.hide();
- }
- } );
-
- if( opts.hide.cyViewport ){
- cy.on('viewport', debounce(function(){
- qtipApi.hide();
- }, viewportDebounceRate, { leading: true }) );
- }
-
- return this; // chainability
-
- });
-
- }
-
- if( typeof module !== 'undefined' && module.exports ){ // expose as a commonjs module
- module.exports = register;
- }
-
- if( typeof define !== 'undefined' && define.amd ){ // expose as an amd/requirejs module
- define('cytoscape-qtip', function(){
- return register;
- });
- }
-
- if( $ && $$ ){
- register( $$, $ );
- }
-
-})(
- typeof jQuery !== 'undefined' ? jQuery : null,
- typeof cytoscape !== 'undefined' ? cytoscape : null
-);
diff --git a/wqflask/wqflask/static/packages/cytoscape/js/src/cytoscape.js b/wqflask/wqflask/static/packages/cytoscape/js/src/cytoscape.js
deleted file mode 100644
index 8267b7f2..00000000
--- a/wqflask/wqflask/static/packages/cytoscape/js/src/cytoscape.js
+++ /dev/null
@@ -1,26998 +0,0 @@
-(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.cytoscape = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(_dereq_,module,exports){
-
-/*!
-
-Cytoscape.js 2.7.8 (MIT licensed)
-
-Copyright (c) The Cytoscape Consortium
-
-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.
-
-*/
-
-'use strict';
-
-},{}],2:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( './util' );
-var is = _dereq_( './is' );
-var Promise = _dereq_( './promise' );
-
-var Animation = function( target, opts, opts2 ){
- if( !(this instanceof Animation) ){
- return new Animation( target, opts, opts2 );
- }
-
- var _p = this._private = util.extend( {
- duration: 1000
- }, opts, opts2 );
-
- _p.target = target;
- _p.style = _p.style || _p.css;
- _p.started = false;
- _p.playing = false;
- _p.hooked = false;
- _p.applying = false;
- _p.progress = 0;
- _p.completes = [];
- _p.frames = [];
-
- if( _p.complete && is.fn( _p.complete ) ){
- _p.completes.push( _p.complete );
- }
-
- // for future timeline/animations impl
- this.length = 1;
- this[0] = this;
-};
-
-var anifn = Animation.prototype;
-
-util.extend( anifn, {
-
- instanceString: function(){ return 'animation'; },
-
- hook: function(){
- var _p = this._private;
-
- if( !_p.hooked ){
- // add to target's animation queue
- var q;
- var tAni = _p.target._private.animation;
- if( _p.queue ){
- q = tAni.queue;
- } else {
- q = tAni.current;
- }
- q.push( this );
-
- // add to the animation loop pool
- if( is.elementOrCollection( _p.target ) ){
- _p.target.cy().addToAnimationPool( _p.target );
- }
-
- _p.hooked = true;
- }
-
- return this;
- },
-
- play: function(){
- var _p = this._private;
-
- // autorewind
- if( _p.progress === 1 ){
- _p.progress = 0;
- }
-
- _p.playing = true;
- _p.started = false; // needs to be started by animation loop
- _p.stopped = false;
-
- this.hook();
-
- // the animation loop will start the animation...
-
- return this;
- },
-
- playing: function(){
- return this._private.playing;
- },
-
- apply: function(){
- var _p = this._private;
-
- _p.applying = true;
- _p.started = false; // needs to be started by animation loop
- _p.stopped = false;
-
- this.hook();
-
- // the animation loop will apply the animation at this progress
-
- return this;
- },
-
- applying: function(){
- return this._private.applying;
- },
-
- pause: function(){
- var _p = this._private;
-
- _p.playing = false;
- _p.started = false;
-
- return this;
- },
-
- stop: function(){
- var _p = this._private;
-
- _p.playing = false;
- _p.started = false;
- _p.stopped = true; // to be removed from animation queues
-
- return this;
- },
-
- rewind: function(){
- return this.progress( 0 );
- },
-
- fastforward: function(){
- return this.progress( 1 );
- },
-
- time: function( t ){
- var _p = this._private;
-
- if( t === undefined ){
- return _p.progress * _p.duration;
- } else {
- return this.progress( t / _p.duration );
- }
- },
-
- progress: function( p ){
- var _p = this._private;
- var wasPlaying = _p.playing;
-
- if( p === undefined ){
- return _p.progress;
- } else {
- if( wasPlaying ){
- this.pause();
- }
-
- _p.progress = p;
- _p.started = false;
-
- if( wasPlaying ){
- this.play();
- }
- }
-
- return this;
- },
-
- completed: function(){
- return this._private.progress === 1;
- },
-
- reverse: function(){
- var _p = this._private;
- var wasPlaying = _p.playing;
-
- if( wasPlaying ){
- this.pause();
- }
-
- _p.progress = 1 - _p.progress;
- _p.started = false;
-
- var swap = function( a, b ){
- var _pa = _p[ a ];
-
- _p[ a ] = _p[ b ];
- _p[ b ] = _pa;
- };
-
- swap( 'zoom', 'startZoom' );
- swap( 'pan', 'startPan' );
- swap( 'position', 'startPosition' );
-
- // swap styles
- for( var i = 0; i < _p.style.length; i++ ){
- var prop = _p.style[ i ];
- var name = prop.name;
- var startStyleProp = _p.startStyle[ name ];
-
- _p.startStyle[ name ] = prop;
- _p.style[ i ] = startStyleProp;
- }
-
- if( wasPlaying ){
- this.play();
- }
-
- return this;
- },
-
- promise: function( type ){
- var _p = this._private;
-
- var arr;
-
- switch( type ){
- case 'frame':
- arr = _p.frames;
- break;
- default:
- case 'complete':
- case 'completed':
- arr = _p.completes;
- }
-
- return new Promise( function( resolve, reject ){
- arr.push( function(){
- resolve();
- } );
- } );
- }
-
-} );
-
-anifn.complete = anifn.completed;
-
-module.exports = Animation;
-
-},{"./is":83,"./promise":86,"./util":100}],3:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../../is' );
-
-var elesfn = ({
-
- // Implemented from pseudocode from wikipedia
- aStar: function( options ){
- var eles = this;
-
- options = options || {};
-
- // Reconstructs the path from Start to End, acumulating the result in pathAcum
- var reconstructPath = function( start, end, cameFromMap, pathAcum ){
- // Base case
- if( start == end ){
- pathAcum.push( cy.getElementById( end ) );
- return pathAcum;
- }
-
- if( end in cameFromMap ){
- // We know which node is before the last one
- var previous = cameFromMap[ end ];
- var previousEdge = cameFromEdge[ end ];
-
- pathAcum.push( cy.getElementById( end ) );
- pathAcum.push( cy.getElementById( previousEdge ) );
-
-
- return reconstructPath( start,
- previous,
- cameFromMap,
- pathAcum );
- }
-
- // We should not reach here!
- return undefined;
- };
-
- // Returns the index of the element in openSet which has minimum fScore
- var findMin = function( openSet, fScore ){
- if( openSet.length === 0 ){
- // Should never be the case
- return undefined;
- }
- var minPos = 0;
- var tempScore = fScore[ openSet[0] ];
- for( var i = 1; i < openSet.length; i++ ){
- var s = fScore[ openSet[ i ] ];
- if( s < tempScore ){
- tempScore = s;
- minPos = i;
- }
- }
- return minPos;
- };
-
- var cy = this._private.cy;
-
- // root - mandatory!
- if( options != null && options.root != null ){
- var source = is.string( options.root ) ?
- // use it as a selector, e.g. "#rootID
- this.filter( options.root )[0] :
- options.root[0];
- } else {
- return undefined;
- }
-
- // goal - mandatory!
- if( options.goal != null ){
- var target = is.string( options.goal ) ?
- // use it as a selector, e.g. "#goalID
- this.filter( options.goal )[0] :
- options.goal[0];
- } else {
- return undefined;
- }
-
- // Heuristic function - optional
- if( options.heuristic != null && is.fn( options.heuristic ) ){
- var heuristic = options.heuristic;
- } else {
- var heuristic = function(){ return 0; }; // use constant if unspecified
- }
-
- // Weight function - optional
- if( options.weight != null && is.fn( options.weight ) ){
- var weightFn = options.weight;
- } else {
- // If not specified, assume each edge has equal weight (1)
- var weightFn = function( e ){return 1;};
- }
-
- // directed - optional
- if( options.directed != null ){
- var directed = options.directed;
- } else {
- var directed = false;
- }
-
- var closedSet = [];
- var openSet = [ source.id() ];
- var cameFrom = {};
- var cameFromEdge = {};
- var gScore = {};
- var fScore = {};
-
- gScore[ source.id() ] = 0;
- fScore[ source.id() ] = heuristic( source );
-
- var edges = this.edges().stdFilter( function( e ){ return !e.isLoop(); } );
- var nodes = this.nodes();
-
- // Counter
- var steps = 0;
-
- // Main loop
- while( openSet.length > 0 ){
- var minPos = findMin( openSet, fScore );
- var cMin = cy.getElementById( openSet[ minPos ] );
- steps++;
-
- // If we've found our goal, then we are done
- if( cMin.id() == target.id() ){
- var rPath = reconstructPath( source.id(), target.id(), cameFrom, [] );
- rPath.reverse();
- return {
- found: true,
- distance: gScore[ cMin.id() ],
- path: eles.spawn( rPath ),
- steps: steps
- };
- }
-
- // Add cMin to processed nodes
- closedSet.push( cMin.id() );
- // Remove cMin from boundary nodes
- openSet.splice( minPos, 1 );
-
- // Update scores for neighbors of cMin
- // Take into account if graph is directed or not
- var vwEdges = cMin.connectedEdges();
- if( directed ){ vwEdges = vwEdges.stdFilter( function( ele ){ return ele.data( 'source' ) === cMin.id(); } ); }
- vwEdges = vwEdges.intersect( edges );
-
- for( var i = 0; i < vwEdges.length; i++ ){
- var e = vwEdges[ i ];
- var w = e.connectedNodes().stdFilter( function( n ){ return n.id() !== cMin.id(); } ).intersect( nodes );
-
- // if node is in closedSet, ignore it
- if( closedSet.indexOf( w.id() ) != -1 ){
- continue;
- }
-
- // New tentative score for node w
- var tempScore = gScore[ cMin.id() ] + weightFn.apply( e, [ e ] );
-
- // Update gScore for node w if:
- // w not present in openSet
- // OR
- // tentative gScore is less than previous value
-
- // w not in openSet
- if( openSet.indexOf( w.id() ) == -1 ){
- gScore[ w.id() ] = tempScore;
- fScore[ w.id() ] = tempScore + heuristic( w );
- openSet.push( w.id() ); // Add node to openSet
- cameFrom[ w.id() ] = cMin.id();
- cameFromEdge[ w.id() ] = e.id();
- continue;
- }
- // w already in openSet, but with greater gScore
- if( tempScore < gScore[ w.id() ] ){
- gScore[ w.id() ] = tempScore;
- fScore[ w.id() ] = tempScore + heuristic( w );
- cameFrom[ w.id() ] = cMin.id();
- }
-
- } // End of neighbors update
-
- } // End of main loop
-
- // If we've reached here, then we've not reached our goal
- return {
- found: false,
- distance: undefined,
- path: undefined,
- steps: steps
- };
- }
-
-}); // elesfn
-
-
-module.exports = elesfn;
-
-},{"../../is":83}],4:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../../is' );
-var util = _dereq_( '../../util' );
-
-var elesfn = ({
-
- // Implemented from pseudocode from wikipedia
- bellmanFord: function( options ){
- var eles = this;
-
- options = options || {};
-
- // Weight function - optional
- if( options.weight != null && is.fn( options.weight ) ){
- var weightFn = options.weight;
- } else {
- // If not specified, assume each edge has equal weight (1)
- var weightFn = function( e ){return 1;};
- }
-
- // directed - optional
- if( options.directed != null ){
- var directed = options.directed;
- } else {
- var directed = false;
- }
-
- // root - mandatory!
- if( options.root != null ){
- if( is.string( options.root ) ){
- // use it as a selector, e.g. "#rootID
- var source = this.filter( options.root )[0];
- } else {
- var source = options.root[0];
- }
- } else {
- return undefined;
- }
-
- var cy = this._private.cy;
- var edges = this.edges().stdFilter( function( e ){ return !e.isLoop(); } );
- var nodes = this.nodes();
- var numNodes = nodes.length;
-
- // mapping: node id -> position in nodes array
- var id2position = {};
- for( var i = 0; i < numNodes; i++ ){
- id2position[ nodes[ i ].id() ] = i;
- }
-
- // Initializations
- var cost = [];
- var predecessor = [];
- var predEdge = [];
-
- for( var i = 0; i < numNodes; i++ ){
- if( nodes[ i ].id() === source.id() ){
- cost[ i ] = 0;
- } else {
- cost[ i ] = Infinity;
- }
- predecessor[ i ] = undefined;
- }
-
- // Edges relaxation
- var flag = false;
- for( var i = 1; i < numNodes; i++ ){
- flag = false;
- for( var e = 0; e < edges.length; e++ ){
- var sourceIndex = id2position[ edges[ e ].source().id() ];
- var targetIndex = id2position[ edges[ e ].target().id() ];
- var weight = weightFn.apply( edges[ e ], [ edges[ e ] ] );
-
- var temp = cost[ sourceIndex ] + weight;
- if( temp < cost[ targetIndex ] ){
- cost[ targetIndex ] = temp;
- predecessor[ targetIndex ] = sourceIndex;
- predEdge[ targetIndex ] = edges[ e ];
- flag = true;
- }
-
- // If undirected graph, we need to take into account the 'reverse' edge
- if( !directed ){
- var temp = cost[ targetIndex ] + weight;
- if( temp < cost[ sourceIndex ] ){
- cost[ sourceIndex ] = temp;
- predecessor[ sourceIndex ] = targetIndex;
- predEdge[ sourceIndex ] = edges[ e ];
- flag = true;
- }
- }
- }
-
- if( !flag ){
- break;
- }
- }
-
- if( flag ){
- // Check for negative weight cycles
- for( var e = 0; e < edges.length; e++ ){
- var sourceIndex = id2position[ edges[ e ].source().id() ];
- var targetIndex = id2position[ edges[ e ].target().id() ];
- var weight = weightFn.apply( edges[ e ], [ edges[ e ] ] );
-
- if( cost[ sourceIndex ] + weight < cost[ targetIndex ] ){
- util.error( 'Graph contains a negative weight cycle for Bellman-Ford' );
- return { pathTo: undefined,
- distanceTo: undefined,
- hasNegativeWeightCycle: true};
- }
- }
- }
-
- // Build result object
- var position2id = [];
- for( var i = 0; i < numNodes; i++ ){
- position2id.push( nodes[ i ].id() );
- }
-
-
- var res = {
- distanceTo: function( to ){
- if( is.string( to ) ){
- // to is a selector string
- var toId = (cy.filter( to )[0]).id();
- } else {
- // to is a node
- var toId = to.id();
- }
-
- return cost[ id2position[ toId ] ];
- },
-
- pathTo: function( to ){
-
- var reconstructPathAux = function( predecessor, fromPos, toPos, position2id, acumPath, predEdge ){
- for( ;; ){
- // Add toId to path
- acumPath.push( cy.getElementById( position2id[ toPos ] ) );
- acumPath.push( predEdge[ toPos ] );
-
- if( fromPos === toPos ){
- // reached starting node
- return acumPath;
- }
-
- // If no path exists, discart acumulated path and return undefined
- var predPos = predecessor[ toPos ];
- if( typeof predPos === 'undefined' ){
- return undefined;
- }
-
- toPos = predPos;
- }
-
- };
-
- if( is.string( to ) ){
- // to is a selector string
- var toId = (cy.filter( to )[0]).id();
- } else {
- // to is a node
- var toId = to.id();
- }
- var path = [];
-
- // This returns a reversed path
- var res = reconstructPathAux( predecessor,
- id2position[ source.id() ],
- id2position[ toId ],
- position2id,
- path,
- predEdge );
-
- // Get it in the correct order and return it
- if( res != null ){
- res.reverse();
- }
-
- return eles.spawn( res );
- },
-
- hasNegativeWeightCycle: false
- };
-
- return res;
-
- } // bellmanFord
-
-}); // elesfn
-
-module.exports = elesfn;
-
-},{"../../is":83,"../../util":100}],5:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../../is' );
-var Heap = _dereq_( '../../heap' );
-
-var elesfn = ({
-
- // Implemented from the algorithm in the paper "On Variants of Shortest-Path Betweenness Centrality and their Generic Computation" by Ulrik Brandes
- betweennessCentrality: function( options ){
- options = options || {};
-
- // Weight - optional
- var weighted, weightFn;
- if( is.fn( options.weight ) ){
- weightFn = options.weight;
- weighted = true;
- } else {
- weighted = false;
- }
-
- // Directed - default false
- var directed = options.directed != null ? options.directed : false;
-
- var cy = this._private.cy;
-
- // starting
- var V = this.nodes();
- var A = {};
- var _C = {};
- var max;
- var C = {
- set: function( key, val ){
- _C[ key ] = val;
-
- if( val > max ){ max = val; }
- },
-
- get: function( key ){ return _C[ key ]; }
- };
-
- // A contains the neighborhoods of every node
- for( var i = 0; i < V.length; i++ ){
- var v = V[ i ];
- var vid = v.id();
-
- if( directed ){
- A[ vid ] = v.outgoers().nodes(); // get outgoers of every node
- } else {
- A[ vid ] = v.openNeighborhood().nodes(); // get neighbors of every node
- }
-
- C.set( vid, 0 );
- }
-
- for( var s = 0; s < V.length; s++ ){
- var sid = V[s].id();
- var S = []; // stack
- var P = {};
- var g = {};
- var d = {};
- var Q = new Heap(function( a, b ){
- return d[a] - d[b];
- }); // queue
-
- // init dictionaries
- for( var i = 0; i < V.length; i++ ){
- var vid = V[ i ].id();
-
- P[ vid ] = [];
- g[ vid ] = 0;
- d[ vid ] = Infinity;
- }
-
- g[ sid ] = 1; // sigma
- d[ sid ] = 0; // distance to s
-
- Q.push( sid );
-
- while( !Q.empty() ){
- var v = Q.pop();
-
- S.push( v );
-
- if( weighted ){
- for( var j = 0; j < A[v].length; j++ ){
- var w = A[v][j];
- var vEle = cy.getElementById( v );
-
- var edge;
- if( vEle.edgesTo( w ).length > 0 ){
- edge = vEle.edgesTo( w )[0];
- } else {
- edge = w.edgesTo( vEle )[0];
- }
-
- var edgeWeight = weightFn.apply( edge, [ edge ] );
-
- w = w.id();
-
- if( d[w] > d[v] + edgeWeight ){
- d[w] = d[v] + edgeWeight;
-
- if( Q.nodes.indexOf( w ) < 0 ){ //if w is not in Q
- Q.push( w );
- } else { // update position if w is in Q
- Q.updateItem( w );
- }
-
- g[w] = 0;
- P[w] = [];
- }
-
- if( d[w] == d[v] + edgeWeight ){
- g[w] = g[w] + g[v];
- P[w].push( v );
- }
- }
- } else {
- for( var j = 0; j < A[v].length; j++ ){
- var w = A[v][j].id();
-
- if( d[w] == Infinity ){
- Q.push( w );
-
- d[w] = d[v] + 1;
- }
-
- if( d[w] == d[v] + 1 ){
- g[w] = g[w] + g[v];
- P[w].push( v );
- }
- }
- }
- }
-
- var e = {};
- for( var i = 0; i < V.length; i++ ){
- e[ V[ i ].id() ] = 0;
- }
-
- while( S.length > 0 ){
- var w = S.pop();
-
- for( var j = 0; j < P[w].length; j++ ){
- var v = P[w][j];
-
- e[v] = e[v] + (g[v] / g[w]) * (1 + e[w]);
-
- if( w != V[s].id() ){
- C.set( w, C.get( w ) + e[w] );
- }
- }
- }
- }
-
- var ret = {
- betweenness: function( node ){
- if( is.string( node ) ){
- var node = cy.filter( node ).id();
- } else {
- var node = node.id();
- }
-
- return C.get( node );
- },
-
- betweennessNormalized: function( node ){
- if( is.string( node ) ){
- var node = cy.filter( node ).id();
- } else {
- var node = node.id();
- }
-
- return C.get( node ) / max;
- }
- };
-
- // alias
- ret.betweennessNormalised = ret.betweennessNormalized;
-
- return ret;
- } // betweennessCentrality
-
-}); // elesfn
-
-// nice, short mathemathical alias
-elesfn.bc = elesfn.betweennessCentrality;
-
-module.exports = elesfn;
-
-},{"../../heap":81,"../../is":83}],6:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../../is' );
-
-var defineSearch = function( params ){
- params = {
- bfs: params.bfs || !params.dfs,
- dfs: params.dfs || !params.bfs
- };
-
- // from pseudocode on wikipedia
- return function searchFn( roots, fn, directed ){
- var options;
- var std;
- var thisArg;
- if( is.plainObject( roots ) && !is.elementOrCollection( roots ) ){
- options = roots;
- roots = options.roots || options.root;
- fn = options.visit;
- directed = options.directed;
- std = options.std;
- thisArg = options.thisArg;
- }
-
- directed = arguments.length === 2 && !is.fn( fn ) ? fn : directed;
- fn = is.fn( fn ) ? fn : function(){};
-
- var cy = this._private.cy;
- var v = roots = is.string( roots ) ? this.filter( roots ) : roots;
- var Q = [];
- var connectedNodes = [];
- var connectedBy = {};
- var id2depth = {};
- var V = {};
- var j = 0;
- var found;
- var nodes = this.nodes();
- var edges = this.edges();
-
- // enqueue v
- for( var i = 0; i < v.length; i++ ){
- if( v[ i ].isNode() ){
- Q.unshift( v[ i ] );
-
- if( params.bfs ){
- V[ v[ i ].id() ] = true;
-
- connectedNodes.push( v[ i ] );
- }
-
- id2depth[ v[ i ].id() ] = 0;
- }
- }
-
- while( Q.length !== 0 ){
- var v = params.bfs ? Q.shift() : Q.pop();
-
- if( params.dfs ){
- if( V[ v.id() ] ){ continue; }
-
- V[ v.id() ] = true;
-
- connectedNodes.push( v );
- }
-
- var depth = id2depth[ v.id() ];
- var prevEdge = connectedBy[ v.id() ];
- var prevNode = prevEdge == null ? undefined : prevEdge.connectedNodes().not( v )[0];
- var ret;
-
- if( std ){
- ret = fn.call( thisArg, v, prevEdge, prevNode, j++, depth );
- } else {
- ret = fn.call( v, j++, depth, v, prevEdge, prevNode );
- }
-
- if( ret === true ){
- found = v;
- break;
- }
-
- if( ret === false ){
- break;
- }
-
- var vwEdges = v.connectedEdges( directed ? function(){ return this.data( 'source' ) === v.id(); } : undefined ).intersect( edges );
- for( var i = 0; i < vwEdges.length; i++ ){
- var e = vwEdges[ i ];
- var w = e.connectedNodes( function(){ return this.id() !== v.id(); } ).intersect( nodes );
-
- if( w.length !== 0 && !V[ w.id() ] ){
- w = w[0];
-
- Q.push( w );
-
- if( params.bfs ){
- V[ w.id() ] = true;
-
- connectedNodes.push( w );
- }
-
- connectedBy[ w.id() ] = e;
-
- id2depth[ w.id() ] = id2depth[ v.id() ] + 1;
- }
- }
-
- }
-
- var connectedEles = [];
-
- for( var i = 0; i < connectedNodes.length; i++ ){
- var node = connectedNodes[ i ];
- var edge = connectedBy[ node.id() ];
-
- if( edge ){
- connectedEles.push( edge );
- }
-
- connectedEles.push( node );
- }
-
- return {
- path: cy.collection( connectedEles, { unique: true } ),
- found: cy.collection( found )
- };
- };
-};
-
-// search, spanning trees, etc
-var elesfn = ({
- breadthFirstSearch: defineSearch( { bfs: true } ),
- depthFirstSearch: defineSearch( { dfs: true } )
-});
-
-// nice, short mathemathical alias
-elesfn.bfs = elesfn.breadthFirstSearch;
-elesfn.dfs = elesfn.depthFirstSearch;
-
-module.exports = elesfn;
-
-},{"../../is":83}],7:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../../is' );
-
-var elesfn = ({
-
- closenessCentralityNormalized: function( options ){
- options = options || {};
-
- var cy = this.cy();
-
- var harmonic = options.harmonic;
- if( harmonic === undefined ){
- harmonic = true;
- }
-
- var closenesses = {};
- var maxCloseness = 0;
- var nodes = this.nodes();
- var fw = this.floydWarshall( { weight: options.weight, directed: options.directed } );
-
- // Compute closeness for every node and find the maximum closeness
- for( var i = 0; i < nodes.length; i++ ){
- var currCloseness = 0;
- for( var j = 0; j < nodes.length; j++ ){
- if( i != j ){
- var d = fw.distance( nodes[ i ], nodes[ j ] );
-
- if( harmonic ){
- currCloseness += 1 / d;
- } else {
- currCloseness += d;
- }
- }
- }
-
- if( !harmonic ){
- currCloseness = 1 / currCloseness;
- }
-
- if( maxCloseness < currCloseness ){
- maxCloseness = currCloseness;
- }
-
- closenesses[ nodes[ i ].id() ] = currCloseness;
- }
-
- return {
- closeness: function( node ){
- if( is.string( node ) ){
- // from is a selector string
- var node = (cy.filter( node )[0]).id();
- } else {
- // from is a node
- var node = node.id();
- }
-
- return closenesses[ node ] / maxCloseness;
- }
- };
- },
-
- // Implemented from pseudocode from wikipedia
- closenessCentrality: function( options ){
- options = options || {};
-
- // root - mandatory!
- if( options.root != null ){
- if( is.string( options.root ) ){
- // use it as a selector, e.g. "#rootID
- var root = this.filter( options.root )[0];
- } else {
- var root = options.root[0];
- }
- } else {
- return undefined;
- }
-
- // weight - optional
- if( options.weight != null && is.fn( options.weight ) ){
- var weight = options.weight;
- } else {
- var weight = function(){return 1;};
- }
-
- // directed - optional
- if( options.directed != null && is.bool( options.directed ) ){
- var directed = options.directed;
- } else {
- var directed = false;
- }
-
- var harmonic = options.harmonic;
- if( harmonic === undefined ){
- harmonic = true;
- }
-
- // we need distance from this node to every other node
- var dijkstra = this.dijkstra( {
- root: root,
- weight: weight,
- directed: directed
- } );
- var totalDistance = 0;
-
- var nodes = this.nodes();
- for( var i = 0; i < nodes.length; i++ ){
- if( nodes[ i ].id() != root.id() ){
- var d = dijkstra.distanceTo( nodes[ i ] );
-
- if( harmonic ){
- totalDistance += 1 / d;
- } else {
- totalDistance += d;
- }
- }
- }
-
- return harmonic ? totalDistance : 1 / totalDistance;
- } // closenessCentrality
-
-}); // elesfn
-
-// nice, short mathemathical alias
-elesfn.cc = elesfn.closenessCentrality;
-elesfn.ccn = elesfn.closenessCentralityNormalised = elesfn.closenessCentralityNormalized;
-
-module.exports = elesfn;
-
-},{"../../is":83}],8:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../../is' );
-var util = _dereq_( '../../util' );
-
-var elesfn = ({
-
- degreeCentralityNormalized: function( options ){
- options = options || {};
-
- var cy = this.cy();
-
- // directed - optional
- if( options.directed != null ){
- var directed = options.directed;
- } else {
- var directed = false;
- }
-
- var nodes = this.nodes();
- var numNodes = nodes.length;
-
- if( !directed ){
- var degrees = {};
- var maxDegree = 0;
-
- for( var i = 0; i < numNodes; i++ ){
- var node = nodes[ i ];
- // add current node to the current options object and call degreeCentrality
- var currDegree = this.degreeCentrality( util.extend( {}, options, {root: node} ) );
- if( maxDegree < currDegree.degree )
- maxDegree = currDegree.degree;
-
- degrees[ node.id() ] = currDegree.degree;
- }
-
- return {
- degree: function( node ){
- if( is.string( node ) ){
- // from is a selector string
- var node = (cy.filter( node )[0]).id();
- } else {
- // from is a node
- var node = node.id();
- }
-
- return degrees[ node ] / maxDegree;
- }
- };
- } else {
- var indegrees = {};
- var outdegrees = {};
- var maxIndegree = 0;
- var maxOutdegree = 0;
-
- for( var i = 0; i < numNodes; i++ ){
- var node = nodes[ i ];
- // add current node to the current options object and call degreeCentrality
- var currDegree = this.degreeCentrality( util.extend( {}, options, {root: node} ) );
-
- if( maxIndegree < currDegree.indegree )
- maxIndegree = currDegree.indegree;
-
- if( maxOutdegree < currDegree.outdegree )
- maxOutdegree = currDegree.outdegree;
-
- indegrees[ node.id() ] = currDegree.indegree;
- outdegrees[ node.id() ] = currDegree.outdegree;
- }
-
- return {
- indegree: function( node ){
- if( is.string( node ) ){
- // from is a selector string
- var node = (cy.filter( node )[0]).id();
- } else {
- // from is a node
- var node = node.id();
- }
-
- return indegrees[ node ] / maxIndegree;
- },
- outdegree: function( node ){
- if( is.string( node ) ){
- // from is a selector string
- var node = (cy.filter( node )[0]).id();
- } else {
- // from is a node
- var node = node.id();
- }
-
- return outdegrees[ node ] / maxOutdegree;
- }
-
- };
- }
-
- }, // degreeCentralityNormalized
-
- // Implemented from the algorithm in Opsahl's paper
- // "Node centrality in weighted networks: Generalizing degree and shortest paths"
- // check the heading 2 "Degree"
- degreeCentrality: function( options ){
- options = options || {};
-
- var callingEles = this;
-
- // root - mandatory!
- if( options != null && options.root != null ){
- var root = is.string( options.root ) ? this.filter( options.root )[0] : options.root[0];
- } else {
- return undefined;
- }
-
- // weight - optional
- if( options.weight != null && is.fn( options.weight ) ){
- var weightFn = options.weight;
- } else {
- // If not specified, assume each edge has equal weight (1)
- var weightFn = function( e ){
- return 1;
- };
- }
-
- // directed - optional
- if( options.directed != null ){
- var directed = options.directed;
- } else {
- var directed = false;
- }
-
- // alpha - optional
- if( options.alpha != null && is.number( options.alpha ) ){
- var alpha = options.alpha;
- } else {
- alpha = 0;
- }
-
-
- if( !directed ){
- var connEdges = root.connectedEdges().intersection( callingEles );
- var k = connEdges.length;
- var s = 0;
-
- // Now, sum edge weights
- for( var i = 0; i < connEdges.length; i++ ){
- var edge = connEdges[ i ];
- s += weightFn.apply( edge, [ edge ] );
- }
-
- return {
- degree: Math.pow( k, 1 - alpha ) * Math.pow( s, alpha )
- };
- } else {
- var incoming = root.connectedEdges( 'edge[target = "' + root.id() + '"]' ).intersection( callingEles );
- var outgoing = root.connectedEdges( 'edge[source = "' + root.id() + '"]' ).intersection( callingEles );
- var k_in = incoming.length;
- var k_out = outgoing.length;
- var s_in = 0;
- var s_out = 0;
-
- // Now, sum incoming edge weights
- for( var i = 0; i < incoming.length; i++ ){
- var edge = incoming[ i ];
- s_in += weightFn.apply( edge, [ edge ] );
- }
-
- // Now, sum outgoing edge weights
- for( var i = 0; i < outgoing.length; i++ ){
- var edge = outgoing[ i ];
- s_out += weightFn.apply( edge, [ edge ] );
- }
-
- return {
- indegree: Math.pow( k_in, 1 - alpha ) * Math.pow( s_in, alpha ),
- outdegree: Math.pow( k_out, 1 - alpha ) * Math.pow( s_out, alpha )
- };
- }
- } // degreeCentrality
-
-}); // elesfn
-
-// nice, short mathemathical alias
-elesfn.dc = elesfn.degreeCentrality;
-elesfn.dcn = elesfn.degreeCentralityNormalised = elesfn.degreeCentralityNormalized;
-
-module.exports = elesfn;
-
-},{"../../is":83,"../../util":100}],9:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../../is' );
-var Heap = _dereq_( '../../heap' );
-
-var elesfn = ({
-
- dijkstra: function( root, weightFn, directed ){
- var options;
- if( is.plainObject( root ) && !is.elementOrCollection( root ) ){
- options = root;
- root = options.root;
- weightFn = options.weight;
- directed = options.directed;
- }
-
- var cy = this._private.cy;
- weightFn = is.fn( weightFn ) ? weightFn : function(){ return 1; }; // if not specified, assume each edge has equal weight (1)
-
- var source = is.string( root ) ? this.filter( root )[0] : root[0];
- var dist = {};
- var prev = {};
- var knownDist = {};
-
- var edges = this.edges().filter( function(){ return !this.isLoop(); } );
- var nodes = this.nodes();
-
- var getDist = function( node ){
- return dist[ node.id() ];
- };
-
- var setDist = function( node, d ){
- dist[ node.id() ] = d;
-
- Q.updateItem( node );
- };
-
- var Q = new Heap( function( a, b ){
- return getDist( a ) - getDist( b );
- } );
-
- for( var i = 0; i < nodes.length; i++ ){
- var node = nodes[ i ];
-
- dist[ node.id() ] = node.same( source ) ? 0 : Infinity;
- Q.push( node );
- }
-
- var distBetween = function( u, v ){
- var uvs = ( directed ? u.edgesTo( v ) : u.edgesWith( v ) ).intersect( edges );
- var smallestDistance = Infinity;
- var smallestEdge;
-
- for( var i = 0; i < uvs.length; i++ ){
- var edge = uvs[ i ];
- var weight = weightFn.apply( edge, [ edge ] );
-
- if( weight < smallestDistance || !smallestEdge ){
- smallestDistance = weight;
- smallestEdge = edge;
- }
- }
-
- return {
- edge: smallestEdge,
- dist: smallestDistance
- };
- };
-
- while( Q.size() > 0 ){
- var u = Q.pop();
- var smalletsDist = getDist( u );
- var uid = u.id();
-
- knownDist[ uid ] = smalletsDist;
-
- if( smalletsDist === Math.Infinite ){
- break;
- }
-
- var neighbors = u.neighborhood().intersect( nodes );
- for( var i = 0; i < neighbors.length; i++ ){
- var v = neighbors[ i ];
- var vid = v.id();
- var vDist = distBetween( u, v );
-
- var alt = smalletsDist + vDist.dist;
-
- if( alt < getDist( v ) ){
- setDist( v, alt );
-
- prev[ vid ] = {
- node: u,
- edge: vDist.edge
- };
- }
- } // for
- } // while
-
- return {
- distanceTo: function( node ){
- var target = is.string( node ) ? nodes.filter( node )[0] : node[0];
-
- return knownDist[ target.id() ];
- },
-
- pathTo: function( node ){
- var target = is.string( node ) ? nodes.filter( node )[0] : node[0];
- var S = [];
- var u = target;
-
- if( target.length > 0 ){
- S.unshift( target );
-
- while( prev[ u.id() ] ){
- var p = prev[ u.id() ];
-
- S.unshift( p.edge );
- S.unshift( p.node );
-
- u = p.node;
- }
- }
-
- return cy.collection( S );
- }
- };
- }
-});
-
-module.exports = elesfn;
-
-},{"../../heap":81,"../../is":83}],10:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../../is' );
-
-var elesfn = ({
-
- // Implemented from pseudocode from wikipedia
- floydWarshall: function( options ){
- options = options || {};
-
- var cy = this.cy();
-
- // Weight function - optional
- if( options.weight != null && is.fn( options.weight ) ){
- var weightFn = options.weight;
- } else {
- // If not specified, assume each edge has equal weight (1)
- var weightFn = function( e ){return 1;};
- }
-
- // directed - optional
- if( options.directed != null ){
- var directed = options.directed;
- } else {
- var directed = false;
- }
-
- var edges = this.edges().stdFilter( function( e ){ return !e.isLoop(); } );
- var nodes = this.nodes();
- var numNodes = nodes.length;
-
- // mapping: node id -> position in nodes array
- var id2position = {};
- for( var i = 0; i < numNodes; i++ ){
- id2position[ nodes[ i ].id() ] = i;
- }
-
- // Initialize distance matrix
- var dist = [];
- for( var i = 0; i < numNodes; i++ ){
- var newRow = new Array( numNodes );
- for( var j = 0; j < numNodes; j++ ){
- if( i == j ){
- newRow[ j ] = 0;
- } else {
- newRow[ j ] = Infinity;
- }
- }
- dist.push( newRow );
- }
-
- // Initialize matrix used for path reconstruction
- // Initialize distance matrix
- var next = [];
- var edgeNext = [];
-
- var initMatrix = function( next ){
- for( var i = 0; i < numNodes; i++ ){
- var newRow = new Array( numNodes );
- for( var j = 0; j < numNodes; j++ ){
- newRow[ j ] = undefined;
- }
- next.push( newRow );
- }
- };
-
- initMatrix( next );
- initMatrix( edgeNext );
-
- // Process edges
- for( var i = 0; i < edges.length ; i++ ){
- var sourceIndex = id2position[ edges[ i ].source().id() ];
- var targetIndex = id2position[ edges[ i ].target().id() ];
- var weight = weightFn.apply( edges[ i ], [ edges[ i ] ] );
-
- // Check if already process another edge between same 2 nodes
- if( dist[ sourceIndex ][ targetIndex ] > weight ){
- dist[ sourceIndex ][ targetIndex ] = weight;
- next[ sourceIndex ][ targetIndex ] = targetIndex;
- edgeNext[ sourceIndex ][ targetIndex ] = edges[ i ];
- }
- }
-
- // If undirected graph, process 'reversed' edges
- if( !directed ){
- for( var i = 0; i < edges.length ; i++ ){
- var sourceIndex = id2position[ edges[ i ].target().id() ];
- var targetIndex = id2position[ edges[ i ].source().id() ];
- var weight = weightFn.apply( edges[ i ], [ edges[ i ] ] );
-
- // Check if already process another edge between same 2 nodes
- if( dist[ sourceIndex ][ targetIndex ] > weight ){
- dist[ sourceIndex ][ targetIndex ] = weight;
- next[ sourceIndex ][ targetIndex ] = targetIndex;
- edgeNext[ sourceIndex ][ targetIndex ] = edges[ i ];
- }
- }
- }
-
- // Main loop
- for( var k = 0; k < numNodes; k++ ){
- for( var i = 0; i < numNodes; i++ ){
- for( var j = 0; j < numNodes; j++ ){
- if( dist[ i ][ k ] + dist[ k ][ j ] < dist[ i ][ j ] ){
- dist[ i ][ j ] = dist[ i ][ k ] + dist[ k ][ j ];
- next[ i ][ j ] = next[ i ][ k ];
- }
- }
- }
- }
-
- // Build result object
- var position2id = [];
- for( var i = 0; i < numNodes; i++ ){
- position2id.push( nodes[ i ].id() );
- }
-
- var res = {
- distance: function( from, to ){
- if( is.string( from ) ){
- // from is a selector string
- var fromId = (cy.filter( from )[0]).id();
- } else {
- // from is a node
- var fromId = from.id();
- }
-
- if( is.string( to ) ){
- // to is a selector string
- var toId = (cy.filter( to )[0]).id();
- } else {
- // to is a node
- var toId = to.id();
- }
-
- return dist[ id2position[ fromId ] ][ id2position[ toId ] ];
- },
-
- path: function( from, to ){
- var reconstructPathAux = function( from, to, next, position2id, edgeNext ){
- if( from === to ){
- return cy.getElementById( position2id[ from ] );
- }
- if( next[ from ][ to ] === undefined ){
- return undefined;
- }
-
- var path = [ cy.getElementById( position2id[ from ] ) ];
- var prev = from;
- while( from !== to ){
- prev = from;
- from = next[ from ][ to ];
-
- var edge = edgeNext[ prev ][ from ];
- path.push( edge );
-
- path.push( cy.getElementById( position2id[ from ] ) );
- }
- return path;
- };
-
- if( is.string( from ) ){
- // from is a selector string
- var fromId = (cy.filter( from )[0]).id();
- } else {
- // from is a node
- var fromId = from.id();
- }
-
- if( is.string( to ) ){
- // to is a selector string
- var toId = (cy.filter( to )[0]).id();
- } else {
- // to is a node
- var toId = to.id();
- }
-
- var pathArr = reconstructPathAux( id2position[ fromId ],
- id2position[ toId ],
- next,
- position2id,
- edgeNext );
-
- return cy.collection( pathArr );
- }
- };
-
- return res;
-
- } // floydWarshall
-
-}); // elesfn
-
-module.exports = elesfn;
-
-},{"../../is":83}],11:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../../util' );
-
-var elesfn = {};
-
-[
- _dereq_( './bfs-dfs' ),
- _dereq_( './dijkstra' ),
- _dereq_( './kruskal' ),
- _dereq_( './a-star' ),
- _dereq_( './floyd-warshall' ),
- _dereq_( './bellman-ford' ),
- _dereq_( './kerger-stein' ),
- _dereq_( './page-rank' ),
- _dereq_( './degree-centrality' ),
- _dereq_( './closeness-centrality' ),
- _dereq_( './betweenness-centrality' )
-].forEach( function( props ){
- util.extend( elesfn, props );
-} );
-
-module.exports = elesfn;
-
-},{"../../util":100,"./a-star":3,"./bellman-ford":4,"./betweenness-centrality":5,"./bfs-dfs":6,"./closeness-centrality":7,"./degree-centrality":8,"./dijkstra":9,"./floyd-warshall":10,"./kerger-stein":12,"./kruskal":13,"./page-rank":14}],12:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../../util' );
-
-var elesfn = ({
-
- // Computes the minimum cut of an undirected graph
- // Returns the correct answer with high probability
- kargerStein: function( options ){
- var eles = this;
-
- options = options || {};
-
- // Function which colapses 2 (meta) nodes into one
- // Updates the remaining edge lists
- // Receives as a paramater the edge which causes the collapse
- var colapse = function( edgeIndex, nodeMap, remainingEdges ){
- var edgeInfo = remainingEdges[ edgeIndex ];
- var sourceIn = edgeInfo[1];
- var targetIn = edgeInfo[2];
- var partition1 = nodeMap[ sourceIn ];
- var partition2 = nodeMap[ targetIn ];
-
- // Delete all edges between partition1 and partition2
- var newEdges = remainingEdges.filter( function( edge ){
- if( nodeMap[ edge[1] ] === partition1 && nodeMap[ edge[2] ] === partition2 ){
- return false;
- }
- if( nodeMap[ edge[1] ] === partition2 && nodeMap[ edge[2] ] === partition1 ){
- return false;
- }
- return true;
- } );
-
- // All edges pointing to partition2 should now point to partition1
- for( var i = 0; i < newEdges.length; i++ ){
- var edge = newEdges[ i ];
- if( edge[1] === partition2 ){ // Check source
- newEdges[ i ] = edge.slice( 0 );
- newEdges[ i ][1] = partition1;
- } else if( edge[2] === partition2 ){ // Check target
- newEdges[ i ] = edge.slice( 0 );
- newEdges[ i ][2] = partition1;
- }
- }
-
- // Move all nodes from partition2 to partition1
- for( var i = 0; i < nodeMap.length; i++ ){
- if( nodeMap[ i ] === partition2 ){
- nodeMap[ i ] = partition1;
- }
- }
-
- return newEdges;
- };
-
-
- // Contracts a graph until we reach a certain number of meta nodes
- var contractUntil = function( metaNodeMap,
- remainingEdges,
- size,
- sizeLimit ){
- // Stop condition
- if( size <= sizeLimit ){
- return remainingEdges;
- }
-
- // Choose an edge randomly
- var edgeIndex = Math.floor( (Math.random() * remainingEdges.length) );
-
- // Colapse graph based on edge
- var newEdges = colapse( edgeIndex, metaNodeMap, remainingEdges );
-
- return contractUntil( metaNodeMap,
- newEdges,
- size - 1,
- sizeLimit );
- };
-
- var cy = this._private.cy;
- var edges = this.edges().stdFilter( function( e ){ return !e.isLoop(); } );
- var nodes = this.nodes();
- var numNodes = nodes.length;
- var numEdges = edges.length;
- var numIter = Math.ceil( Math.pow( Math.log( numNodes ) / Math.LN2, 2 ) );
- var stopSize = Math.floor( numNodes / Math.sqrt( 2 ) );
-
- if( numNodes < 2 ){
- util.error( 'At least 2 nodes are required for Karger-Stein algorithm' );
- return undefined;
- }
-
- // Create numerical identifiers for each node
- // mapping: node id -> position in nodes array
- // for reverse mapping, simply use nodes array
- var id2position = {};
- for( var i = 0; i < numNodes; i++ ){
- id2position[ nodes[ i ].id() ] = i;
- }
-
- // Now store edge destination as indexes
- // Format for each edge (edge index, source node index, target node index)
- var edgeIndexes = [];
- for( var i = 0; i < numEdges; i++ ){
- var e = edges[ i ];
- edgeIndexes.push( [ i, id2position[ e.source().id() ], id2position[ e.target().id() ] ] );
- }
-
- // We will store the best cut found here
- var minCutSize = Infinity;
- var minCut;
-
- // Initial meta node partition
- var originalMetaNode = [];
- for( var i = 0; i < numNodes; i++ ){
- originalMetaNode.push( i );
- }
-
- // Main loop
- for( var iter = 0; iter <= numIter; iter++ ){
- // Create new meta node partition
- var metaNodeMap = originalMetaNode.slice( 0 );
-
- // Contract until stop point (stopSize nodes)
- var edgesState = contractUntil( metaNodeMap, edgeIndexes, numNodes, stopSize );
-
- // Create a copy of the colapsed nodes state
- var metaNodeMap2 = metaNodeMap.slice( 0 );
-
- // Run 2 iterations starting in the stop state
- var res1 = contractUntil( metaNodeMap, edgesState, stopSize, 2 );
- var res2 = contractUntil( metaNodeMap2, edgesState, stopSize, 2 );
-
- // Is any of the 2 results the best cut so far?
- if( res1.length <= res2.length && res1.length < minCutSize ){
- minCutSize = res1.length;
- minCut = [ res1, metaNodeMap ];
- } else if( res2.length <= res1.length && res2.length < minCutSize ){
- minCutSize = res2.length;
- minCut = [ res2, metaNodeMap2 ];
- }
- } // end of main loop
-
-
- // Construct result
- var resEdges = (minCut[0]).map( function( e ){ return edges[ e[0] ]; } );
- var partition1 = [];
- var partition2 = [];
-
- // traverse metaNodeMap for best cut
- var witnessNodePartition = minCut[1][0];
- for( var i = 0; i < minCut[1].length; i++ ){
- var partitionId = minCut[1][ i ];
- if( partitionId === witnessNodePartition ){
- partition1.push( nodes[ i ] );
- } else {
- partition2.push( nodes[ i ] );
- }
- }
-
- var ret = {
- cut: eles.spawn( cy, resEdges ),
- partition1: eles.spawn( partition1 ),
- partition2: eles.spawn( partition2 )
- };
-
- return ret;
- }
-}); // elesfn
-
-
-module.exports = elesfn;
-
-},{"../../util":100}],13:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../../is' );
-
-// search, spanning trees, etc
-var elesfn = ({
-
- // kruskal's algorithm (finds min spanning tree, assuming undirected graph)
- // implemented from pseudocode from wikipedia
- kruskal: function( weightFn ){
- var cy = this.cy();
-
- weightFn = is.fn( weightFn ) ? weightFn : function(){ return 1; }; // if not specified, assume each edge has equal weight (1)
-
- function findSet( ele ){
- for( var i = 0; i < forest.length; i++ ){
- var eles = forest[ i ];
-
- if( eles.anySame( ele ) ){
- return {
- eles: eles,
- index: i
- };
- }
- }
- }
-
- var A = cy.collection( cy, [] );
- var forest = [];
- var nodes = this.nodes();
-
- for( var i = 0; i < nodes.length; i++ ){
- forest.push( nodes[ i ].collection() );
- }
-
- var edges = this.edges();
- var S = edges.toArray().sort( function( a, b ){
- var weightA = weightFn.call( a, a );
- var weightB = weightFn.call( b, b );
-
- return weightA - weightB;
- } );
-
- for( var i = 0; i < S.length; i++ ){
- var edge = S[ i ];
- var u = edge.source()[0];
- var v = edge.target()[0];
- var setU = findSet( u );
- var setV = findSet( v );
-
- if( setU.index !== setV.index ){
- A = A.add( edge );
-
- // combine forests for u and v
- forest[ setU.index ] = setU.eles.add( setV.eles );
- forest.splice( setV.index, 1 );
- }
- }
-
- return nodes.add( A );
- }
-});
-
-module.exports = elesfn;
-
-},{"../../is":83}],14:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../../is' );
-
-var elesfn = ({
-
- pageRank: function( options ){
- options = options || {};
-
- var normalizeVector = function( vector ){
- var length = vector.length;
-
- // First, get sum of all elements
- var total = 0;
- for( var i = 0; i < length; i++ ){
- total += vector[ i ];
- }
-
- // Now, divide each by the sum of all elements
- for( var i = 0; i < length; i++ ){
- vector[ i ] = vector[ i ] / total;
- }
- };
-
- // dampingFactor - optional
- if( options != null &&
- options.dampingFactor != null ){
- var dampingFactor = options.dampingFactor;
- } else {
- var dampingFactor = 0.8; // Default damping factor
- }
-
- // desired precision - optional
- if( options != null &&
- options.precision != null ){
- var epsilon = options.precision;
- } else {
- var epsilon = 0.000001; // Default precision
- }
-
- // Max number of iterations - optional
- if( options != null &&
- options.iterations != null ){
- var numIter = options.iterations;
- } else {
- var numIter = 200; // Default number of iterations
- }
-
- // Weight function - optional
- if( options != null &&
- options.weight != null &&
- is.fn( options.weight ) ){
- var weightFn = options.weight;
- } else {
- // If not specified, assume each edge has equal weight (1)
- var weightFn = function( e ){return 1;};
- }
-
- var cy = this._private.cy;
- var edges = this.edges().stdFilter( function( e ){ return !e.isLoop(); } );
- var nodes = this.nodes();
- var numNodes = nodes.length;
- var numEdges = edges.length;
-
- // Create numerical identifiers for each node
- // mapping: node id -> position in nodes array
- // for reverse mapping, simply use nodes array
- var id2position = {};
- for( var i = 0; i < numNodes; i++ ){
- id2position[ nodes[ i ].id() ] = i;
- }
-
- // Construct transposed adjacency matrix
- // First lets have a zeroed matrix of the right size
- // We'll also keep track of the sum of each column
- var matrix = [];
- var columnSum = [];
- var additionalProb = (1 - dampingFactor) / numNodes;
-
- // Create null matric
- for( var i = 0; i < numNodes; i++ ){
- var newRow = [];
- for( var j = 0; j < numNodes; j++ ){
- newRow.push( 0.0 );
- }
- matrix.push( newRow );
- columnSum.push( 0.0 );
- }
-
- // Now, process edges
- for( var i = 0; i < numEdges; i++ ){
- var edge = edges[ i ];
- var s = id2position[ edge.source().id() ];
- var t = id2position[ edge.target().id() ];
- var w = weightFn.apply( edge, [ edge ] );
-
- // Update matrix
- matrix[ t ][ s ] += w;
-
- // Update column sum
- columnSum[ s ] += w;
- }
-
- // Add additional probability based on damping factor
- // Also, take into account columns that have sum = 0
- var p = 1.0 / numNodes + additionalProb; // Shorthand
- // Traverse matrix, column by column
- for( var j = 0; j < numNodes; j++ ){
- if( columnSum[ j ] === 0 ){
- // No 'links' out from node jth, assume equal probability for each possible node
- for( var i = 0; i < numNodes; i++ ){
- matrix[ i ][ j ] = p;
- }
- } else {
- // Node jth has outgoing link, compute normalized probabilities
- for( var i = 0; i < numNodes; i++ ){
- matrix[ i ][ j ] = matrix[ i ][ j ] / columnSum[ j ] + additionalProb;
- }
- }
- }
-
- // Compute dominant eigenvector using power method
- var eigenvector = [];
- var nullVector = [];
- var previous;
-
- // Start with a vector of all 1's
- // Also, initialize a null vector which will be used as shorthand
- for( var i = 0; i < numNodes; i++ ){
- eigenvector.push( 1.0 );
- nullVector.push( 0.0 );
- }
-
- for( var iter = 0; iter < numIter; iter++ ){
- // New array with all 0's
- var temp = nullVector.slice( 0 );
-
- // Multiply matrix with previous result
- for( var i = 0; i < numNodes; i++ ){
- for( var j = 0; j < numNodes; j++ ){
- temp[ i ] += matrix[ i ][ j ] * eigenvector[ j ];
- }
- }
-
- normalizeVector( temp );
- previous = eigenvector;
- eigenvector = temp;
-
- var diff = 0;
- // Compute difference (squared module) of both vectors
- for( var i = 0; i < numNodes; i++ ){
- diff += Math.pow( previous[ i ] - eigenvector[ i ], 2 );
- }
-
- // If difference is less than the desired threshold, stop iterating
- if( diff < epsilon ){
- break;
- }
- }
-
- // Construct result
- var res = {
- rank: function( node ){
- if( is.string( node ) ){
- // is a selector string
- var nodeId = (cy.filter( node )[0]).id();
- } else {
- // is a node object
- var nodeId = node.id();
- }
- return eigenvector[ id2position[ nodeId ] ];
- }
- };
-
-
- return res;
- } // pageRank
-
-}); // elesfn
-
-module.exports = elesfn;
-
-},{"../../is":83}],15:[function(_dereq_,module,exports){
-'use strict';
-
-var define = _dereq_( '../define' );
-
-var elesfn = ({
- animate: define.animate(),
- animation: define.animation(),
- animated: define.animated(),
- clearQueue: define.clearQueue(),
- delay: define.delay(),
- delayAnimation: define.delayAnimation(),
- stop: define.stop()
-});
-
-module.exports = elesfn;
-
-},{"../define":44}],16:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../util' );
-
-var elesfn = ({
- classes: function( classes ){
- classes = classes.match( /\S+/g ) || [];
- var self = this;
- var changed = [];
- var classesMap = {};
-
- // fill in classes map
- for( var i = 0; i < classes.length; i++ ){
- var cls = classes[ i ];
-
- classesMap[ cls ] = true;
- }
-
- // check and update each ele
- for( var j = 0; j < self.length; j++ ){
- var ele = self[ j ];
- var _p = ele._private;
- var eleClasses = _p.classes;
- var changedEle = false;
-
- // check if ele has all of the passed classes
- for( var i = 0; i < classes.length; i++ ){
- var cls = classes[ i ];
- var eleHasClass = eleClasses[ cls ];
-
- if( !eleHasClass ){
- changedEle = true;
- break;
- }
- }
-
- // check if ele has classes outside of those passed
- if( !changedEle ){
- var classes = Object.keys( eleClasses );
-
- for( var i = 0; i < classes.length; i++ ){
- var eleCls = classes[i];
- var eleHasClass = eleClasses[ eleCls ];
- var specdClass = classesMap[ eleCls ]; // i.e. this class is passed to the function
-
- if( eleHasClass && !specdClass ){
- changedEle = true;
- break;
- }
- }
- }
-
- if( changedEle ){
- _p.classes = util.copy( classesMap );
-
- changed.push( ele );
- }
- }
-
- // trigger update style on those eles that had class changes
- if( changed.length > 0 ){
- this.spawn( changed )
- .updateStyle()
- .trigger( 'class' )
- ;
- }
-
- return self;
- },
-
- addClass: function( classes ){
- return this.toggleClass( classes, true );
- },
-
- hasClass: function( className ){
- var ele = this[0];
- return ( ele != null && ele._private.classes[ className ] ) ? true : false;
- },
-
- toggleClass: function( classesStr, toggle ){
- var classes = classesStr.match( /\S+/g ) || [];
- var self = this;
- var changed = []; // eles who had classes changed
-
- for( var i = 0, il = self.length; i < il; i++ ){
- var ele = self[ i ];
- var changedEle = false;
-
- for( var j = 0; j < classes.length; j++ ){
- var cls = classes[ j ];
- var eleClasses = ele._private.classes;
- var hasClass = eleClasses[ cls ];
- var shouldAdd = toggle || (toggle === undefined && !hasClass);
-
- if( shouldAdd ){
- eleClasses[ cls ] = true;
-
- if( !hasClass && !changedEle ){
- changed.push( ele );
- changedEle = true;
- }
- } else { // then remove
- eleClasses[ cls ] = false;
-
- if( hasClass && !changedEle ){
- changed.push( ele );
- changedEle = true;
- }
- }
-
- } // for j classes
- } // for i eles
-
- // trigger update style on those eles that had class changes
- if( changed.length > 0 ){
- this.spawn( changed )
- .updateStyle()
- .trigger( 'class' )
- ;
- }
-
- return self;
- },
-
- removeClass: function( classes ){
- return this.toggleClass( classes, false );
- },
-
- flashClass: function( classes, duration ){
- var self = this;
-
- if( duration == null ){
- duration = 250;
- } else if( duration === 0 ){
- return self; // nothing to do really
- }
-
- self.addClass( classes );
- setTimeout( function(){
- self.removeClass( classes );
- }, duration );
-
- return self;
- }
-});
-
-module.exports = elesfn;
-
-},{"../util":100}],17:[function(_dereq_,module,exports){
-'use strict';
-
-var elesfn = ({
- allAre: function( selector ){
- return this.filter( selector ).length === this.length;
- },
-
- is: function( selector ){
- return this.filter( selector ).length > 0;
- },
-
- some: function( fn, thisArg ){
- for( var i = 0; i < this.length; i++ ){
- var ret = !thisArg ? fn( this[ i ], i, this ) : fn.apply( thisArg, [ this[ i ], i, this ] );
-
- if( ret ){
- return true;
- }
- }
-
- return false;
- },
-
- every: function( fn, thisArg ){
- for( var i = 0; i < this.length; i++ ){
- var ret = !thisArg ? fn( this[ i ], i, this ) : fn.apply( thisArg, [ this[ i ], i, this ] );
-
- if( !ret ){
- return false;
- }
- }
-
- return true;
- },
-
- same: function( collection ){
- collection = this.cy().collection( collection );
-
- // cheap extra check
- if( this.length !== collection.length ){
- return false;
- }
-
- return this.intersect( collection ).length === this.length;
- },
-
- anySame: function( collection ){
- collection = this.cy().collection( collection );
-
- return this.intersect( collection ).length > 0;
- },
-
- allAreNeighbors: function( collection ){
- collection = this.cy().collection( collection );
-
- return this.neighborhood().intersect( collection ).length === collection.length;
- }
-});
-
-elesfn.allAreNeighbours = elesfn.allAreNeighbors;
-
-module.exports = elesfn;
-
-},{}],18:[function(_dereq_,module,exports){
-'use strict';
-
-var elesfn = ({
- parent: function( selector ){
- var parents = [];
- var cy = this._private.cy;
-
- for( var i = 0; i < this.length; i++ ){
- var ele = this[ i ];
- var parent = cy.getElementById( ele._private.data.parent );
-
- if( parent.size() > 0 ){
- parents.push( parent );
- }
- }
-
- return this.spawn( parents, { unique: true } ).filter( selector );
- },
-
- parents: function( selector ){
- var parents = [];
-
- var eles = this.parent();
- while( eles.nonempty() ){
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
- parents.push( ele );
- }
-
- eles = eles.parent();
- }
-
- return this.spawn( parents, { unique: true } ).filter( selector );
- },
-
- commonAncestors: function( selector ){
- var ancestors;
-
- for( var i = 0; i < this.length; i++ ){
- var ele = this[ i ];
- var parents = ele.parents();
-
- ancestors = ancestors || parents;
-
- ancestors = ancestors.intersect( parents ); // current list must be common with current ele parents set
- }
-
- return ancestors.filter( selector );
- },
-
- orphans: function( selector ){
- return this.stdFilter( function( ele ){
- return ele.isNode() && ele.parent().empty();
- } ).filter( selector );
- },
-
- nonorphans: function( selector ){
- return this.stdFilter( function( ele ){
- return ele.isNode() && ele.parent().nonempty();
- } ).filter( selector );
- },
-
- children: function( selector ){
- var children = [];
-
- for( var i = 0; i < this.length; i++ ){
- var ele = this[ i ];
- children = children.concat( ele._private.children );
- }
-
- return this.spawn( children, { unique: true } ).filter( selector );
- },
-
- siblings: function( selector ){
- return this.parent().children().not( this ).filter( selector );
- },
-
- isParent: function(){
- var ele = this[0];
-
- if( ele ){
- return ele._private.children.length !== 0;
- }
- },
-
- isChild: function(){
- var ele = this[0];
-
- if( ele ){
- return ele._private.data.parent !== undefined && ele.parent().length !== 0;
- }
- },
-
- descendants: function( selector ){
- var elements = [];
-
- function add( eles ){
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
-
- elements.push( ele );
-
- if( ele.children().nonempty() ){
- add( ele.children() );
- }
- }
- }
-
- add( this.children() );
-
- return this.spawn( elements, { unique: true } ).filter( selector );
- }
-});
-
-// aliases
-elesfn.ancestors = elesfn.parents;
-
-module.exports = elesfn;
-
-},{}],19:[function(_dereq_,module,exports){
-'use strict';
-
-var define = _dereq_( '../define' );
-var fn, elesfn;
-
-fn = elesfn = ({
-
- data: define.data( {
- field: 'data',
- bindingEvent: 'data',
- allowBinding: true,
- allowSetting: true,
- settingEvent: 'data',
- settingTriggersEvent: true,
- triggerFnName: 'trigger',
- allowGetting: true,
- immutableKeys: {
- 'id': true,
- 'source': true,
- 'target': true,
- 'parent': true
- },
- updateStyle: true
- } ),
-
- removeData: define.removeData( {
- field: 'data',
- event: 'data',
- triggerFnName: 'trigger',
- triggerEvent: true,
- immutableKeys: {
- 'id': true,
- 'source': true,
- 'target': true,
- 'parent': true
- },
- updateStyle: true
- } ),
-
- scratch: define.data( {
- field: 'scratch',
- bindingEvent: 'scratch',
- allowBinding: true,
- allowSetting: true,
- settingEvent: 'scratch',
- settingTriggersEvent: true,
- triggerFnName: 'trigger',
- allowGetting: true,
- updateStyle: true
- } ),
-
- removeScratch: define.removeData( {
- field: 'scratch',
- event: 'scratch',
- triggerFnName: 'trigger',
- triggerEvent: true,
- updateStyle: true
- } ),
-
- rscratch: define.data( {
- field: 'rscratch',
- allowBinding: false,
- allowSetting: true,
- settingTriggersEvent: false,
- allowGetting: true
- } ),
-
- removeRscratch: define.removeData( {
- field: 'rscratch',
- triggerEvent: false
- } ),
-
- id: function(){
- var ele = this[0];
-
- if( ele ){
- return ele._private.data.id;
- }
- }
-
-});
-
-// aliases
-fn.attr = fn.data;
-fn.removeAttr = fn.removeData;
-
-module.exports = elesfn;
-
-},{"../define":44}],20:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../util' );
-
-var elesfn = {};
-
-function defineDegreeFunction( callback ){
- return function( includeLoops ){
- var self = this;
-
- if( includeLoops === undefined ){
- includeLoops = true;
- }
-
- if( self.length === 0 ){ return; }
-
- if( self.isNode() && !self.removed() ){
- var degree = 0;
- var node = self[0];
- var connectedEdges = node._private.edges;
-
- for( var i = 0; i < connectedEdges.length; i++ ){
- var edge = connectedEdges[ i ];
-
- if( !includeLoops && edge.isLoop() ){
- continue;
- }
-
- degree += callback( node, edge );
- }
-
- return degree;
- } else {
- return;
- }
- };
-}
-
-util.extend( elesfn, {
- degree: defineDegreeFunction( function( node, edge ){
- if( edge.source().same( edge.target() ) ){
- return 2;
- } else {
- return 1;
- }
- } ),
-
- indegree: defineDegreeFunction( function( node, edge ){
- if( edge.target().same( node ) ){
- return 1;
- } else {
- return 0;
- }
- } ),
-
- outdegree: defineDegreeFunction( function( node, edge ){
- if( edge.source().same( node ) ){
- return 1;
- } else {
- return 0;
- }
- } )
-} );
-
-function defineDegreeBoundsFunction( degreeFn, callback ){
- return function( includeLoops ){
- var ret;
- var nodes = this.nodes();
-
- for( var i = 0; i < nodes.length; i++ ){
- var ele = nodes[ i ];
- var degree = ele[ degreeFn ]( includeLoops );
- if( degree !== undefined && (ret === undefined || callback( degree, ret )) ){
- ret = degree;
- }
- }
-
- return ret;
- };
-}
-
-util.extend( elesfn, {
- minDegree: defineDegreeBoundsFunction( 'degree', function( degree, min ){
- return degree < min;
- } ),
-
- maxDegree: defineDegreeBoundsFunction( 'degree', function( degree, max ){
- return degree > max;
- } ),
-
- minIndegree: defineDegreeBoundsFunction( 'indegree', function( degree, min ){
- return degree < min;
- } ),
-
- maxIndegree: defineDegreeBoundsFunction( 'indegree', function( degree, max ){
- return degree > max;
- } ),
-
- minOutdegree: defineDegreeBoundsFunction( 'outdegree', function( degree, min ){
- return degree < min;
- } ),
-
- maxOutdegree: defineDegreeBoundsFunction( 'outdegree', function( degree, max ){
- return degree > max;
- } )
-} );
-
-util.extend( elesfn, {
- totalDegree: function( includeLoops ){
- var total = 0;
- var nodes = this.nodes();
-
- for( var i = 0; i < nodes.length; i++ ){
- total += nodes[ i ].degree( includeLoops );
- }
-
- return total;
- }
-} );
-
-module.exports = elesfn;
-
-},{"../util":100}],21:[function(_dereq_,module,exports){
-'use strict';
-
-var define = _dereq_( '../define' );
-var is = _dereq_( '../is' );
-var util = _dereq_( '../util' );
-var math = _dereq_( '../math' );
-var fn, elesfn;
-
-fn = elesfn = ({
-
- position: define.data( {
- field: 'position',
- bindingEvent: 'position',
- allowBinding: true,
- allowSetting: true,
- settingEvent: 'position',
- settingTriggersEvent: true,
- triggerFnName: 'rtrigger',
- allowGetting: true,
- validKeys: [ 'x', 'y' ],
- onSet: function( eles ){
- var updatedEles = eles.updateCompoundBounds();
- updatedEles.rtrigger( 'position' );
- },
- canSet: function( ele ){
- return !ele.locked() && !ele.isParent();
- }
- } ),
-
- // position but no notification to renderer
- silentPosition: define.data( {
- field: 'position',
- bindingEvent: 'position',
- allowBinding: false,
- allowSetting: true,
- settingEvent: 'position',
- settingTriggersEvent: false,
- triggerFnName: 'trigger',
- allowGetting: true,
- validKeys: [ 'x', 'y' ],
- onSet: function( eles ){
- eles.updateCompoundBounds();
- },
- canSet: function( ele ){
- return !ele.locked() && !ele.isParent();
- }
- } ),
-
- positions: function( pos, silent ){
- if( is.plainObject( pos ) ){
- this.position( pos );
-
- } else if( is.fn( pos ) ){
- var fn = pos;
-
- for( var i = 0; i < this.length; i++ ){
- var ele = this[ i ];
-
- var pos = fn.apply( ele, [ i, ele ] );
-
- if( pos && !ele.locked() && !ele.isParent() ){
- var elePos = ele._private.position;
- elePos.x = pos.x;
- elePos.y = pos.y;
- }
- }
-
- var updatedEles = this.updateCompoundBounds();
- var toTrigger = updatedEles.length > 0 ? this.add( updatedEles ) : this;
-
- if( silent ){
- toTrigger.trigger( 'position' );
- } else {
- toTrigger.rtrigger( 'position' );
- }
- }
-
- return this; // chaining
- },
-
- silentPositions: function( pos ){
- return this.positions( pos, true );
- },
-
- // get/set the rendered (i.e. on screen) positon of the element
- renderedPosition: function( dim, val ){
- var ele = this[0];
- var cy = this.cy();
- var zoom = cy.zoom();
- var pan = cy.pan();
- var rpos = is.plainObject( dim ) ? dim : undefined;
- var setting = rpos !== undefined || ( val !== undefined && is.string( dim ) );
-
- if( ele && ele.isNode() ){ // must have an element and must be a node to return position
- if( setting ){
- for( var i = 0; i < this.length; i++ ){
- var ele = this[ i ];
-
- if( val !== undefined ){ // set one dimension
- ele._private.position[ dim ] = ( val - pan[ dim ] ) / zoom;
- } else if( rpos !== undefined ){ // set whole position
- ele._private.position = {
- x: ( rpos.x - pan.x ) / zoom,
- y: ( rpos.y - pan.y ) / zoom
- };
- }
- }
-
- this.rtrigger( 'position' );
- } else { // getting
- var pos = ele._private.position;
- rpos = {
- x: pos.x * zoom + pan.x,
- y: pos.y * zoom + pan.y
- };
-
- if( dim === undefined ){ // then return the whole rendered position
- return rpos;
- } else { // then return the specified dimension
- return rpos[ dim ];
- }
- }
- } else if( !setting ){
- return undefined; // for empty collection case
- }
-
- return this; // chaining
- },
-
- // get/set the position relative to the parent
- relativePosition: function( dim, val ){
- var ele = this[0];
- var cy = this.cy();
- var ppos = is.plainObject( dim ) ? dim : undefined;
- var setting = ppos !== undefined || ( val !== undefined && is.string( dim ) );
- var hasCompoundNodes = cy.hasCompoundNodes();
-
- if( ele && ele.isNode() ){ // must have an element and must be a node to return position
- if( setting ){
- for( var i = 0; i < this.length; i++ ){
- var ele = this[ i ];
- var parent = hasCompoundNodes ? ele.parent() : null;
- var hasParent = parent && parent.length > 0;
- var relativeToParent = hasParent;
-
- if( hasParent ){
- parent = parent[0];
- }
-
- var origin = relativeToParent ? parent._private.position : { x: 0, y: 0 };
-
- if( val !== undefined ){ // set one dimension
- ele._private.position[ dim ] = val + origin[ dim ];
- } else if( ppos !== undefined ){ // set whole position
- ele._private.position = {
- x: ppos.x + origin.x,
- y: ppos.y + origin.y
- };
- }
- }
-
- this.rtrigger( 'position' );
-
- } else { // getting
- var pos = ele._private.position;
- var parent = hasCompoundNodes ? ele.parent() : null;
- var hasParent = parent && parent.length > 0;
- var relativeToParent = hasParent;
-
- if( hasParent ){
- parent = parent[0];
- }
-
- var origin = relativeToParent ? parent._private.position : { x: 0, y: 0 };
-
- ppos = {
- x: pos.x - origin.x,
- y: pos.y - origin.y
- };
-
- if( dim === undefined ){ // then return the whole rendered position
- return ppos;
- } else { // then return the specified dimension
- return ppos[ dim ];
- }
- }
- } else if( !setting ){
- return undefined; // for empty collection case
- }
-
- return this; // chaining
- },
-
- renderedBoundingBox: function( options ){
- var bb = this.boundingBox( options );
- var cy = this.cy();
- var zoom = cy.zoom();
- var pan = cy.pan();
-
- var x1 = bb.x1 * zoom + pan.x;
- var x2 = bb.x2 * zoom + pan.x;
- var y1 = bb.y1 * zoom + pan.y;
- var y2 = bb.y2 * zoom + pan.y;
-
- return {
- x1: x1,
- x2: x2,
- y1: y1,
- y2: y2,
- w: x2 - x1,
- h: y2 - y1
- };
- },
-
- updateCompoundBounds: function(){
- var cy = this.cy();
-
- // save cycles for non compound graphs or when style disabled
- if( !cy.styleEnabled() || !cy.hasCompoundNodes() ){ return cy.collection(); }
-
- var updated = [];
-
- function update( parent ){
- if( !parent.isParent() ){ return; }
-
- var _p = parent._private;
- var children = parent.children();
- var includeLabels = parent.pstyle( 'compound-sizing-wrt-labels' ).value === 'include';
- var bb = children.boundingBox( {
- includeLabels: includeLabels,
- includeShadows: false,
- includeOverlays: false,
-
- // updating the compound bounds happens outside of the regular
- // cache cycle (i.e. before fired events)
- useCache: false
- } );
- var padding = {
- top: parent.pstyle( 'padding-top' ).pfValue,
- bottom: parent.pstyle( 'padding-bottom' ).pfValue,
- left: parent.pstyle( 'padding-left' ).pfValue,
- right: parent.pstyle( 'padding-right' ).pfValue
- };
- var pos = _p.position;
-
- _p.autoWidth = bb.w;
- pos.x = (bb.x1 + bb.x2 - padding.left + padding.right) / 2;
-
- _p.autoHeight = bb.h;
- pos.y = (bb.y1 + bb.y2 - padding.top + padding.bottom) / 2;
-
- updated.push( parent );
- }
-
- // go up, level by level
- var eles = this;
- while( eles.nonempty() ){
-
- // update each parent node in this level
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
-
- update( ele );
- }
-
- // next level
- eles = eles.parent();
- }
-
- // return changed
- return this.spawn( updated );
- }
-});
-
-var noninf = function( x ){
- if( x === Infinity || x === -Infinity ){
- return 0;
- }
-
- return x;
-};
-
-var updateBounds = function( b, x1, y1, x2, y2 ){
- // don't update with zero area boxes
- if( x2 - x1 === 0 || y2 - y1 === 0 ){ return; }
-
- b.x1 = x1 < b.x1 ? x1 : b.x1;
- b.x2 = x2 > b.x2 ? x2 : b.x2;
- b.y1 = y1 < b.y1 ? y1 : b.y1;
- b.y2 = y2 > b.y2 ? y2 : b.y2;
-};
-
-var updateBoundsFromBox = function( b, b2 ){
- return updateBounds( b, b2.x1, b2.y1, b2.x2, b2.y2 );
-};
-
-var prefixedProperty = function( obj, field, prefix ){
- return util.getPrefixedProperty( obj, field, prefix );
-};
-
-var updateBoundsFromArrow = function( bounds, ele, prefix, options ){
- var _p = ele._private;
- var rstyle = _p.rstyle;
- var halfArW = rstyle.arrowWidth / 2;
- var arrowType = ele.pstyle( prefix + '-arrow-shape' ).value;
- var x;
- var y;
-
- if( arrowType !== 'none' ){
- if( prefix === 'source' ){
- x = rstyle.srcX;
- y = rstyle.srcY;
- } else if( prefix === 'target' ){
- x = rstyle.tgtX;
- y = rstyle.tgtY;
- } else {
- x = rstyle.midX;
- y = rstyle.midY;
- }
-
- updateBounds( bounds, x - halfArW, y - halfArW, x + halfArW, y + halfArW );
- }
-};
-
-var updateBoundsFromLabel = function( bounds, ele, prefix, options ){
- var prefixDash;
-
- if( prefix ){
- prefixDash = prefix + '-';
- } else {
- prefixDash = '';
- }
-
- var _p = ele._private;
- var rstyle = _p.rstyle;
- var label = ele.pstyle( prefixDash + 'label' ).strValue;
-
- if( label ){
- var halign = ele.pstyle( 'text-halign' );
- var valign = ele.pstyle( 'text-valign' );
- var labelWidth = prefixedProperty( rstyle, 'labelWidth', prefix );
- var labelHeight = prefixedProperty( rstyle, 'labelHeight', prefix );
- var labelX = prefixedProperty( rstyle, 'labelX', prefix );
- var labelY = prefixedProperty( rstyle, 'labelY', prefix );
- var marginX = ele.pstyle( prefixDash + 'text-margin-x' ).pfValue;
- var marginY = ele.pstyle( prefixDash + 'text-margin-y' ).pfValue;
- var isEdge = ele.isEdge();
- var rotation = ele.pstyle( prefixDash + 'text-rotation' );
- var shadowR = ele.pstyle( 'text-shadow-blur' ).pfValue / 2;
- var shadowX = ele.pstyle( 'text-shadow-offset-x' ).pfValue;
- var shadowY = ele.pstyle( 'text-shadow-offset-y' ).pfValue;
- var shadowOpacity = ele.pstyle( 'text-shadow-opacity' ).value;
- var outlineWidth = ele.pstyle( 'text-outline-width' ).pfValue;
- var borderWidth = ele.pstyle( 'text-border-width' ).pfValue;
- var halfBorderWidth = borderWidth / 2;
-
- var lh = labelHeight;
- var lw = labelWidth;
- var lw_2 = lw / 2;
- var lh_2 = lh / 2;
- var lx1, lx2, ly1, ly2;
-
- if( isEdge ){
- lx1 = labelX - lw_2;
- lx2 = labelX + lw_2;
- ly1 = labelY - lh_2;
- ly2 = labelY + lh_2;
- } else {
- switch( halign.value ){
- case 'left':
- lx1 = labelX - lw;
- lx2 = labelX;
- break;
-
- case 'center':
- lx1 = labelX - lw_2;
- lx2 = labelX + lw_2;
- break;
-
- case 'right':
- lx1 = labelX;
- lx2 = labelX + lw;
- break;
- }
-
- switch( valign.value ){
- case 'top':
- ly1 = labelY - lh;
- ly2 = labelY;
- break;
-
- case 'center':
- ly1 = labelY - lh_2;
- ly2 = labelY + lh_2;
- break;
-
- case 'bottom':
- ly1 = labelY;
- ly2 = labelY + lh;
- break;
- }
- }
-
- var isAutorotate = ( isEdge && rotation.strValue === 'autorotate' );
- var isPfValue = ( rotation.pfValue != null && rotation.pfValue !== 0 );
-
- if( isAutorotate || isPfValue ){
- var theta = isAutorotate ? prefixedProperty( _p.rstyle, 'labelAngle', prefix ) : rotation.pfValue;
- var cos = Math.cos( theta );
- var sin = Math.sin( theta );
-
- var rotate = function( x, y ){
- x = x - labelX;
- y = y - labelY;
-
- return {
- x: x * cos - y * sin + labelX,
- y: x * sin + y * cos + labelY
- };
- };
-
- var px1y1 = rotate( lx1, ly1 );
- var px1y2 = rotate( lx1, ly2 );
- var px2y1 = rotate( lx2, ly1 );
- var px2y2 = rotate( lx2, ly2 );
-
- lx1 = Math.min( px1y1.x, px1y2.x, px2y1.x, px2y2.x );
- lx2 = Math.max( px1y1.x, px1y2.x, px2y1.x, px2y2.x );
- ly1 = Math.min( px1y1.y, px1y2.y, px2y1.y, px2y2.y );
- ly2 = Math.max( px1y1.y, px1y2.y, px2y1.y, px2y2.y );
- }
-
- lx1 += marginX - Math.max( outlineWidth, halfBorderWidth );
- lx2 += marginX + Math.max( outlineWidth, halfBorderWidth );
- ly1 += marginY - Math.max( outlineWidth, halfBorderWidth );
- ly2 += marginY + Math.max( outlineWidth, halfBorderWidth );
-
- updateBounds( bounds, lx1, ly1, lx2, ly2 );
-
- if( options.includeShadows && shadowOpacity > 0 ){
- lx1 += - shadowR + shadowX;
- lx2 += + shadowR + shadowX;
- ly1 += - shadowR + shadowY;
- ly2 += + shadowR + shadowY;
-
- updateBounds( bounds, lx1, ly1, lx2, ly2 );
- }
- }
-
- return bounds;
-};
-
-// get the bounding box of the elements (in raw model position)
-var boundingBoxImpl = function( ele, options ){
- var cy = ele._private.cy;
- var cy_p = cy._private;
- var styleEnabled = cy_p.styleEnabled;
-
- var bounds = {
- x1: Infinity,
- y1: Infinity,
- x2: -Infinity,
- y2: -Infinity
- };
-
- var _p = ele._private;
- var display = styleEnabled ? ele.pstyle( 'display' ).value : 'element';
- var isNode = ele.isNode();
- var isEdge = ele.isEdge();
- var ex1, ex2, ey1, ey2, x, y;
- var displayed = display !== 'none';
-
- if( displayed ){
- var overlayOpacity = 0;
- var overlayPadding = 0;
-
- if( styleEnabled && options.includeOverlays ){
- overlayOpacity = ele.pstyle( 'overlay-opacity' ).value;
-
- if( overlayOpacity !== 0 ){
- overlayPadding = ele.pstyle( 'overlay-padding' ).value;
- }
- }
-
- var w = 0;
- var wHalf = 0;
-
- if( styleEnabled ){
- w = ele.pstyle( 'width' ).pfValue;
- wHalf = w / 2;
- }
-
- if( isNode && options.includeNodes ){
- var pos = _p.position;
- x = pos.x;
- y = pos.y;
- var w = ele.outerWidth();
- var halfW = w / 2;
- var h = ele.outerHeight();
- var halfH = h / 2;
-
- // handle node dimensions
- /////////////////////////
-
- ex1 = x - halfW - overlayPadding;
- ex2 = x + halfW + overlayPadding;
- ey1 = y - halfH - overlayPadding;
- ey2 = y + halfH + overlayPadding;
-
- updateBounds( bounds, ex1, ey1, ex2, ey2 );
-
- } else if( isEdge && options.includeEdges ){
- var rstyle = _p.rstyle || {};
-
- // handle edge dimensions (rough box estimate)
- //////////////////////////////////////////////
- if( styleEnabled ){
- ex1 = Math.min( rstyle.srcX, rstyle.midX, rstyle.tgtX );
- ex2 = Math.max( rstyle.srcX, rstyle.midX, rstyle.tgtX );
- ey1 = Math.min( rstyle.srcY, rstyle.midY, rstyle.tgtY );
- ey2 = Math.max( rstyle.srcY, rstyle.midY, rstyle.tgtY );
-
- // take into account edge width
- ex1 -= wHalf;
- ex2 += wHalf;
- ey1 -= wHalf;
- ey2 += wHalf;
-
- updateBounds( bounds, ex1, ey1, ex2, ey2 );
- }
-
- // precise haystacks
- ////////////////////
- if( styleEnabled && ele.pstyle( 'curve-style' ).strValue === 'haystack' ){
- var hpts = rstyle.haystackPts;
-
- ex1 = hpts[0].x;
- ey1 = hpts[0].y;
- ex2 = hpts[1].x;
- ey2 = hpts[1].y;
-
- if( ex1 > ex2 ){
- var temp = ex1;
- ex1 = ex2;
- ex2 = temp;
- }
-
- if( ey1 > ey2 ){
- var temp = ey1;
- ey1 = ey2;
- ey2 = temp;
- }
-
- updateBounds( bounds, ex1 - wHalf, ey1 - wHalf, ex2 + wHalf, ey2 + wHalf );
-
- // handle points along edge
- ///////////////////////////
- } else {
- var pts = rstyle.bezierPts || rstyle.linePts || [];
-
- for( var j = 0; j < pts.length; j++ ){
- var pt = pts[ j ];
-
- ex1 = pt.x - wHalf;
- ex2 = pt.x + wHalf;
- ey1 = pt.y - wHalf;
- ey2 = pt.y + wHalf;
-
- updateBounds( bounds, ex1, ey1, ex2, ey2 );
- }
-
- // fallback on source and target positions
- //////////////////////////////////////////
- if( pts.length === 0 ){
- var n1 = _p.source;
- var n1_p = n1._private;
- var n1pos = n1_p.position;
-
- var n2 = _p.target;
- var n2_p = n2._private;
- var n2pos = n2_p.position;
-
- ex1 = n1pos.x;
- ex2 = n2pos.x;
- ey1 = n1pos.y;
- ey2 = n2pos.y;
-
- if( ex1 > ex2 ){
- var temp = ex1;
- ex1 = ex2;
- ex2 = temp;
- }
-
- if( ey1 > ey2 ){
- var temp = ey1;
- ey1 = ey2;
- ey2 = temp;
- }
-
- // take into account edge width
- ex1 -= wHalf;
- ex2 += wHalf;
- ey1 -= wHalf;
- ey2 += wHalf;
-
- updateBounds( bounds, ex1, ey1, ex2, ey2 );
- }
- }
-
- } // edges
-
- // shadow and overlay
- /////////////////////
-
- if( styleEnabled ){
-
- ex1 = bounds.x1;
- ex2 = bounds.x2;
- ey1 = bounds.y1;
- ey2 = bounds.y2;
-
- if( options.includeShadows && ele.pstyle('shadow-opacity').value > 0 ){
- var r = ele.pstyle('shadow-blur').pfValue / 2;
- var ox = ele.pstyle('shadow-offset-x').pfValue;
- var oy = ele.pstyle('shadow-offset-y').pfValue;
-
- updateBounds( bounds, ex1 - r + ox, ey1 - r + oy, ex2 + r + ox, ey2 + r + oy );
- }
-
- updateBounds( bounds, ex1 - overlayPadding, ey1 - overlayPadding, ex2 + overlayPadding, ey2 + overlayPadding );
- }
-
- // handle edge arrow size
- /////////////////////////
-
- if( styleEnabled && options.includeEdges && isEdge ){
- updateBoundsFromArrow( bounds, ele, 'mid-source', options );
- updateBoundsFromArrow( bounds, ele, 'mid-target', options );
- updateBoundsFromArrow( bounds, ele, 'source', options );
- updateBoundsFromArrow( bounds, ele, 'target', options );
- }
-
- // handle label dimensions
- //////////////////////////
-
- if( styleEnabled && options.includeLabels ){
- updateBoundsFromLabel( bounds, ele, null, options );
-
- if( isEdge ){
- updateBoundsFromLabel( bounds, ele, 'source', options );
- updateBoundsFromLabel( bounds, ele, 'target', options );
- }
- } // style enabled for labels
- } // if displayed
-
- bounds.x1 = noninf( bounds.x1 );
- bounds.y1 = noninf( bounds.y1 );
- bounds.x2 = noninf( bounds.x2 );
- bounds.y2 = noninf( bounds.y2 );
- bounds.w = noninf( bounds.x2 - bounds.x1 );
- bounds.h = noninf( bounds.y2 - bounds.y1 );
-
- // expand bounds by 1 because antialiasing can increase the visual/effective size by 1 on all sides
- if( bounds.w > 0 && bounds.h > 0 && displayed ){
- math.expandBoundingBox( bounds, 1 );
- }
-
- return bounds;
-};
-
-var tf = function( val ){
- if( val ){
- return 't';
- } else {
- return 'f';
- }
-};
-
-var getKey = function( opts ){
- var key = '';
-
- key += tf( opts.incudeNodes );
- key += tf( opts.includeEdges );
- key += tf( opts.includeLabels );
- key += tf( opts.includeShadows );
- key += tf( opts.includeOverlays );
-
- return key;
-};
-
-var cachedBoundingBoxImpl = function( ele, opts ){
- var _p = ele._private;
- var bb;
- var headless = ele.cy().headless();
- var key = opts === defBbOpts ? defBbOptsKey : getKey( opts );
-
- if( !opts.useCache || headless || !_p.bbCache || !_p.bbCache[key] ){
- bb = boundingBoxImpl( ele, opts );
-
- if( !headless ){
- _p.bbCache = _p.bbCache || {};
- _p.bbCache[key] = bb;
- }
- } else {
- bb = _p.bbCache[key];
- }
-
- return bb;
-};
-
-var defBbOpts = {
- includeNodes: true,
- includeEdges: true,
- includeLabels: true,
- includeShadows: true,
- includeOverlays: true,
- useCache: true
-};
-
-var defBbOptsKey = getKey( defBbOpts );
-
-elesfn.boundingBox = function( options ){
- // the main usecase is ele.boundingBox() for a single element with no/def options
- // specified s.t. the cache is used, so check for this case to make it faster by
- // avoiding the overhead of the rest of the function
- if( this.length === 1 && this[0]._private.bbCache && (options === undefined || options.useCache === undefined || options.useCache === true) ){
- if( options === undefined ){
- options = defBbOpts;
- }
-
- return cachedBoundingBoxImpl( this[0], options );
- }
-
- var bounds = {
- x1: Infinity,
- y1: Infinity,
- x2: -Infinity,
- y2: -Infinity
- };
-
- options = options || util.staticEmptyObject();
-
- var opts = {
- includeNodes: util.default( options.includeNodes, defBbOpts.includeNodes ),
- includeEdges: util.default( options.includeEdges, defBbOpts.includeEdges ),
- includeLabels: util.default( options.includeLabels, defBbOpts.includeLabels ),
- includeShadows: util.default( options.includeShadows, defBbOpts.includeShadows ),
- includeOverlays: util.default( options.includeOverlays, defBbOpts.includeOverlays ),
- useCache: util.default( options.useCache, defBbOpts.useCache )
- };
-
- var eles = this;
- var cy = eles.cy();
- var renderer = eles.cy().renderer();
- var styleEnabled = cy.styleEnabled();
-
- if( styleEnabled ){
- renderer.recalculateRenderedStyle( eles, opts.useCache );
- }
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[i];
-
- if( styleEnabled && ele.isEdge() && ele.pstyle('curve-style').strValue === 'bezier' ){
- renderer.recalculateRenderedStyle( ele.parallelEdges(), opts.useCache ); // n.b. ele.parallelEdges() single is cached
- }
-
- updateBoundsFromBox( bounds, cachedBoundingBoxImpl( ele, opts ) );
- }
-
- bounds.x1 = noninf( bounds.x1 );
- bounds.y1 = noninf( bounds.y1 );
- bounds.x2 = noninf( bounds.x2 );
- bounds.y2 = noninf( bounds.y2 );
- bounds.w = noninf( bounds.x2 - bounds.x1 );
- bounds.h = noninf( bounds.y2 - bounds.y1 );
-
- return bounds;
-};
-
-var defineDimFns = function( opts ){
- opts.uppercaseName = util.capitalize( opts.name );
- opts.autoName = 'auto' + opts.uppercaseName;
- opts.labelName = 'label' + opts.uppercaseName;
- opts.outerName = 'outer' + opts.uppercaseName;
- opts.uppercaseOuterName = util.capitalize( opts.outerName );
-
- fn[ opts.name ] = function dimImpl(){
- var ele = this[0];
- var _p = ele._private;
- var cy = _p.cy;
- var styleEnabled = cy._private.styleEnabled;
-
- if( ele ){
- if( styleEnabled ){
- if( ele.isParent() ){
- return _p[ opts.autoName ] || 0;
- }
-
- var d = ele.pstyle( opts.name );
-
- switch( d.strValue ){
- case 'label':
- return _p.rstyle[ opts.labelName ] || 0;
- default:
- return d.pfValue;
- }
- } else {
- return 1;
- }
- }
- };
-
- fn[ 'outer' + opts.uppercaseName ] = function outerDimImpl(){
- var ele = this[0];
- var _p = ele._private;
- var cy = _p.cy;
- var styleEnabled = cy._private.styleEnabled;
-
- if( ele ){
- if( styleEnabled ){
- var dim = ele[ opts.name ]();
- var border = ele.pstyle( 'border-width' ).pfValue;
- var padding = ele.pstyle( opts.paddings[0] ).pfValue + ele.pstyle( opts.paddings[1] ).pfValue;
-
- return dim + border + padding;
- } else {
- return 1;
- }
- }
- };
-
- fn[ 'rendered' + opts.uppercaseName ] = function renderedDimImpl(){
- var ele = this[0];
-
- if( ele ){
- var d = ele[ opts.name ]();
- return d * this.cy().zoom();
- }
- };
-
- fn[ 'rendered' + opts.uppercaseOuterName ] = function renderedOuterDimImpl(){
- var ele = this[0];
-
- if( ele ){
- var od = ele[ opts.outerName ]();
- return od * this.cy().zoom();
- }
- };
-};
-
-defineDimFns( {
- name: 'width',
- paddings: [ 'padding-left', 'padding-right' ]
-} );
-
-defineDimFns( {
- name: 'height',
- paddings: [ 'padding-top', 'padding-bottom' ]
-} );
-
-// aliases
-fn.modelPosition = fn.point = fn.position;
-fn.modelPositions = fn.points = fn.positions;
-fn.renderedPoint = fn.renderedPosition;
-fn.relativePoint = fn.relativePosition;
-fn.boundingbox = fn.boundingBox;
-fn.renderedBoundingbox = fn.renderedBoundingBox;
-
-module.exports = elesfn;
-
-},{"../define":44,"../is":83,"../math":85,"../util":100}],22:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../util' );
-var is = _dereq_( '../is' );
-
-// represents a node or an edge
-var Element = function( cy, params, restore ){
- var self = this;
- restore = (restore === undefined || restore ? true : false);
-
- if( cy === undefined || params === undefined || !is.core( cy ) ){
- util.error( 'An element must have a core reference and parameters set' );
- return;
- }
-
- var group = params.group;
-
- // try to automatically infer the group if unspecified
- if( group == null ){
- if( params.data && params.data.source != null && params.data.target != null ){
- group = 'edges';
- } else {
- group = 'nodes';
- }
- }
-
- // validate group
- if( group !== 'nodes' && group !== 'edges' ){
- util.error( 'An element must be of type `nodes` or `edges`; you specified `' + group + '`' );
- return;
- }
-
- // make the element array-like, just like a collection
- this.length = 1;
- this[0] = this;
-
- // NOTE: when something is added here, add also to ele.json()
- this._private = {
- cy: cy,
- single: true, // indicates this is an element
- data: params.data || {}, // data object
- position: params.position || {}, // (x, y) position pair
- autoWidth: undefined, // width and height of nodes calculated by the renderer when set to special 'auto' value
- autoHeight: undefined,
- listeners: [], // array of bound listeners
- group: group, // string; 'nodes' or 'edges'
- style: {}, // properties as set by the style
- rstyle: {}, // properties for style sent from the renderer to the core
- styleCxts: [], // applied style contexts from the styler
- removed: true, // whether it's inside the vis; true if removed (set true here since we call restore)
- selected: params.selected ? true : false, // whether it's selected
- selectable: params.selectable === undefined ? true : ( params.selectable ? true : false ), // whether it's selectable
- locked: params.locked ? true : false, // whether the element is locked (cannot be moved)
- grabbed: false, // whether the element is grabbed by the mouse; renderer sets this privately
- grabbable: params.grabbable === undefined ? true : ( params.grabbable ? true : false ), // whether the element can be grabbed
- active: false, // whether the element is active from user interaction
- classes: {}, // map ( className => true )
- animation: { // object for currently-running animations
- current: [],
- queue: []
- },
- rscratch: {}, // object in which the renderer can store information
- scratch: params.scratch || {}, // scratch objects
- edges: [], // array of connected edges
- children: [], // array of children
- traversalCache: {} // cache of output of traversal functions
- };
-
- // renderedPosition overrides if specified
- if( params.renderedPosition ){
- var rpos = params.renderedPosition;
- var pan = cy.pan();
- var zoom = cy.zoom();
-
- this._private.position = {
- x: (rpos.x - pan.x) / zoom,
- y: (rpos.y - pan.y) / zoom
- };
- }
-
- if( is.string( params.classes ) ){
- var classes = params.classes.split( /\s+/ );
- for( var i = 0, l = classes.length; i < l; i++ ){
- var cls = classes[ i ];
- if( !cls || cls === '' ){ continue; }
-
- self._private.classes[ cls ] = true;
- }
- }
-
- if( params.style || params.css ){
- cy.style().applyBypass( this, params.style || params.css );
- }
-
- if( restore === undefined || restore ){
- this.restore();
- }
-
-};
-
-module.exports = Element;
-
-},{"../is":83,"../util":100}],23:[function(_dereq_,module,exports){
-'use strict';
-
-var define = _dereq_( '../define' );
-
-var elesfn = ({
- on: define.on(), // .on( events [, selector] [, data], handler)
- one: define.on( { unbindSelfOnTrigger: true } ),
- once: define.on( { unbindAllBindersOnTrigger: true } ),
- off: define.off(), // .off( events [, selector] [, handler] )
- trigger: define.trigger(), // .trigger( events [, extraParams] )
-
- rtrigger: function( event, extraParams ){ // for internal use only
- if( this.length === 0 ){ return; } // empty collections don't need to notify anything
-
- // notify renderer
- this.cy().notify( {
- type: event,
- eles: this
- } );
-
- this.trigger( event, extraParams );
- return this;
- }
-});
-
-// aliases:
-define.eventAliasesOn( elesfn );
-
-module.exports = elesfn;
-
-},{"../define":44}],24:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../is' );
-var Selector = _dereq_( '../selector' );
-
-var elesfn = ({
- nodes: function( selector ){
- return this.filter( function( i, element ){
- return element.isNode();
- } ).filter( selector );
- },
-
- edges: function( selector ){
- return this.filter( function( i, element ){
- return element.isEdge();
- } ).filter( selector );
- },
-
- filter: function( filter ){
- if( filter === undefined ){ // check this first b/c it's the most common/performant case
- return this;
- } else if( is.string( filter ) || is.elementOrCollection( filter ) ){
- return Selector( filter ).filter( this );
- } else if( is.fn( filter ) ){
- var elements = [];
-
- for( var i = 0; i < this.length; i++ ){
- var ele = this[ i ];
-
- if( filter.apply( ele, [ i, ele ] ) ){
- elements.push( ele );
- }
- }
-
- return this.spawn( elements );
- }
-
- return this.spawn(); // if not handled by above, give 'em an empty collection
- },
-
- not: function( toRemove ){
- if( !toRemove ){
- return this;
- } else {
-
- if( is.string( toRemove ) ){
- toRemove = this.filter( toRemove );
- }
-
- var elements = [];
-
- for( var i = 0; i < this.length; i++ ){
- var element = this[ i ];
-
- var remove = toRemove._private.ids[ element.id() ];
- if( !remove ){
- elements.push( element );
- }
- }
-
- return this.spawn( elements );
- }
-
- },
-
- absoluteComplement: function(){
- var cy = this._private.cy;
-
- return cy.mutableElements().not( this );
- },
-
- intersect: function( other ){
- // if a selector is specified, then filter by it instead
- if( is.string( other ) ){
- var selector = other;
- return this.filter( selector );
- }
-
- var elements = [];
- var col1 = this;
- var col2 = other;
- var col1Smaller = this.length < other.length;
- // var ids1 = col1Smaller ? col1._private.ids : col2._private.ids;
- var ids2 = col1Smaller ? col2._private.ids : col1._private.ids;
- var col = col1Smaller ? col1 : col2;
-
- for( var i = 0; i < col.length; i++ ){
- var id = col[ i ]._private.data.id;
- var ele = ids2[ id ];
-
- if( ele ){
- elements.push( ele );
- }
- }
-
- return this.spawn( elements );
- },
-
- xor: function( other ){
- var cy = this._private.cy;
-
- if( is.string( other ) ){
- other = cy.$( other );
- }
-
- var elements = [];
- var col1 = this;
- var col2 = other;
-
- var add = function( col, other ){
-
- for( var i = 0; i < col.length; i++ ){
- var ele = col[ i ];
- var id = ele._private.data.id;
- var inOther = other._private.ids[ id ];
-
- if( !inOther ){
- elements.push( ele );
- }
- }
-
- };
-
- add( col1, col2 );
- add( col2, col1 );
-
- return this.spawn( elements );
- },
-
- diff: function( other ){
- var cy = this._private.cy;
-
- if( is.string( other ) ){
- other = cy.$( other );
- }
-
- var left = [];
- var right = [];
- var both = [];
- var col1 = this;
- var col2 = other;
-
- var add = function( col, other, retEles ){
-
- for( var i = 0; i < col.length; i++ ){
- var ele = col[ i ];
- var id = ele._private.data.id;
- var inOther = other._private.ids[ id ];
-
- if( inOther ){
- both.push( ele );
- } else {
- retEles.push( ele );
- }
- }
-
- };
-
- add( col1, col2, left );
- add( col2, col1, right );
-
- return {
- left: this.spawn( left, { unique: true } ),
- right: this.spawn( right, { unique: true } ),
- both: this.spawn( both, { unique: true } )
- };
- },
-
- add: function( toAdd ){
- var cy = this._private.cy;
-
- if( !toAdd ){
- return this;
- }
-
- if( is.string( toAdd ) ){
- var selector = toAdd;
- toAdd = cy.mutableElements().filter( selector );
- }
-
- var elements = [];
-
- for( var i = 0; i < this.length; i++ ){
- elements.push( this[ i ] );
- }
-
- for( var i = 0; i < toAdd.length; i++ ){
-
- var add = !this._private.ids[ toAdd[ i ].id() ];
- if( add ){
- elements.push( toAdd[ i ] );
- }
- }
-
- return this.spawn( elements );
- },
-
- // in place merge on calling collection
- merge: function( toAdd ){
- var _p = this._private;
- var cy = _p.cy;
-
- if( !toAdd ){
- return this;
- }
-
- if( toAdd && is.string( toAdd ) ){
- var selector = toAdd;
- toAdd = cy.mutableElements().filter( selector );
- }
-
- for( var i = 0; i < toAdd.length; i++ ){
- var toAddEle = toAdd[ i ];
- var id = toAddEle._private.data.id;
- var add = !_p.ids[ id ];
-
- if( add ){
- var index = this.length++;
-
- this[ index ] = toAddEle;
- _p.ids[ id ] = toAddEle;
- _p.indexes[ id ] = index;
- } else { // replace
- var index = _p.indexes[ id ];
-
- this[ index ] = toAddEle;
- _p.ids[ id ] = toAddEle;
- }
- }
-
- return this; // chaining
- },
-
- // remove single ele in place in calling collection
- unmergeOne: function( ele ){
- ele = ele[0];
-
- var _p = this._private;
- var id = ele._private.data.id;
- var i = _p.indexes[ id ];
-
- if( i == null ){
- return this; // no need to remove
- }
-
- // remove ele
- this[ i ] = undefined;
- _p.ids[ id ] = undefined;
- _p.indexes[ id ] = undefined;
-
- var unmergedLastEle = i === this.length - 1;
-
- // replace empty spot with last ele in collection
- if( this.length > 1 && !unmergedLastEle ){
- var lastEleI = this.length - 1;
- var lastEle = this[ lastEleI ];
- var lastEleId = lastEle._private.data.id;
-
- this[ lastEleI ] = undefined;
- this[ i ] = lastEle;
- _p.indexes[ lastEleId ] = i;
- }
-
- // the collection is now 1 ele smaller
- this.length--;
-
- return this;
- },
-
- // remove eles in place on calling collection
- unmerge: function( toRemove ){
- var cy = this._private.cy;
-
- if( !toRemove ){
- return this;
- }
-
- if( toRemove && is.string( toRemove ) ){
- var selector = toRemove;
- toRemove = cy.mutableElements().filter( selector );
- }
-
- for( var i = 0; i < toRemove.length; i++ ){
- this.unmergeOne( toRemove[ i ] );
- }
-
- return this; // chaining
- },
-
- map: function( mapFn, thisArg ){
- var arr = [];
- var eles = this;
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
- var ret = thisArg ? mapFn.apply( thisArg, [ ele, i, eles ] ) : mapFn( ele, i, eles );
-
- arr.push( ret );
- }
-
- return arr;
- },
-
- stdFilter: function( fn, thisArg ){
- var filterEles = [];
- var eles = this;
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
- var include = thisArg ? fn.apply( thisArg, [ ele, i, eles ] ) : fn( ele, i, eles );
-
- if( include ){
- filterEles.push( ele );
- }
- }
-
- return this.spawn( filterEles );
- },
-
- max: function( valFn, thisArg ){
- var max = -Infinity;
- var maxEle;
- var eles = this;
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
- var val = thisArg ? valFn.apply( thisArg, [ ele, i, eles ] ) : valFn( ele, i, eles );
-
- if( val > max ){
- max = val;
- maxEle = ele;
- }
- }
-
- return {
- value: max,
- ele: maxEle
- };
- },
-
- min: function( valFn, thisArg ){
- var min = Infinity;
- var minEle;
- var eles = this;
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
- var val = thisArg ? valFn.apply( thisArg, [ ele, i, eles ] ) : valFn( ele, i, eles );
-
- if( val < min ){
- min = val;
- minEle = ele;
- }
- }
-
- return {
- value: min,
- ele: minEle
- };
- }
-});
-
-// aliases
-var fn = elesfn;
-fn[ 'u' ] = fn[ '|' ] = fn[ '+' ] = fn.union = fn.or = fn.add;
-fn[ '\\' ] = fn[ '!' ] = fn[ '-' ] = fn.difference = fn.relativeComplement = fn.subtract = fn.not;
-fn[ 'n' ] = fn[ '&' ] = fn[ '.' ] = fn.and = fn.intersection = fn.intersect;
-fn[ '^' ] = fn[ '(+)' ] = fn[ '(-)' ] = fn.symmetricDifference = fn.symdiff = fn.xor;
-fn.fnFilter = fn.filterFn = fn.stdFilter;
-fn.complement = fn.abscomp = fn.absoluteComplement;
-
-module.exports = elesfn;
-
-},{"../is":83,"../selector":87}],25:[function(_dereq_,module,exports){
-'use strict';
-
-var elesfn = ({
- isNode: function(){
- return this.group() === 'nodes';
- },
-
- isEdge: function(){
- return this.group() === 'edges';
- },
-
- isLoop: function(){
- return this.isEdge() && this.source().id() === this.target().id();
- },
-
- isSimple: function(){
- return this.isEdge() && this.source().id() !== this.target().id();
- },
-
- group: function(){
- var ele = this[0];
-
- if( ele ){
- return ele._private.group;
- }
- }
-});
-
-
-module.exports = elesfn;
-
-},{}],26:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../util' );
-var is = _dereq_( '../is' );
-
-var Element = _dereq_( './element' );
-
-// factory for generating edge ids when no id is specified for a new element
-var idFactory = {
- generate: function( cy, element, tryThisId ){
- var id = tryThisId != null ? tryThisId : util.uuid();
-
- while( cy.hasElementWithId( id ) ){
- id = util.uuid();
- }
-
- return id;
- }
-};
-
-// represents a set of nodes, edges, or both together
-var Collection = function( cy, elements, options ){
- if( cy === undefined || !is.core( cy ) ){
- util.error( 'A collection must have a reference to the core' );
- return;
- }
-
- var ids = {};
- var indexes = {};
- var createdElements = false;
-
- if( !elements ){
- elements = [];
- } else if( elements.length > 0 && is.plainObject( elements[0] ) && !is.element( elements[0] ) ){
- createdElements = true;
-
- // make elements from json and restore all at once later
- var eles = [];
- var elesIds = {};
-
- for( var i = 0, l = elements.length; i < l; i++ ){
- var json = elements[ i ];
-
- if( json.data == null ){
- json.data = {};
- }
-
- var data = json.data;
-
- // make sure newly created elements have valid ids
- if( data.id == null ){
- data.id = idFactory.generate( cy, json );
- } else if( cy.hasElementWithId( data.id ) || elesIds[ data.id ] ){
- continue; // can't create element if prior id already exists
- }
-
- var ele = new Element( cy, json, false );
- eles.push( ele );
- elesIds[ data.id ] = true;
- }
-
- elements = eles;
- }
-
- this.length = 0;
-
- for( var i = 0, l = elements.length; i < l; i++ ){
- var element = elements[ i ];
- if( !element ){ continue; }
-
- var id = element._private.data.id;
-
- if( !options || (options.unique && !ids[ id ] ) ){
- ids[ id ] = element;
- indexes[ id ] = this.length;
-
- this[ this.length ] = element;
- this.length++;
- }
- }
-
- this._private = {
- cy: cy,
- ids: ids,
- indexes: indexes
- };
-
- // restore the elements if we created them from json
- if( createdElements ){
- this.restore();
- }
-};
-
-// Functions
-////////////////////////////////////////////////////////////////////////////////////////////////////
-
-// keep the prototypes in sync (an element has the same functions as a collection)
-// and use elefn and elesfn as shorthands to the prototypes
-var elesfn = Element.prototype = Collection.prototype;
-
-elesfn.instanceString = function(){
- return 'collection';
-};
-
-elesfn.spawn = function( cy, eles, opts ){
- if( !is.core( cy ) ){ // cy is optional
- opts = eles;
- eles = cy;
- cy = this.cy();
- }
-
- return new Collection( cy, eles, opts );
-};
-
-elesfn.spawnSelf = function(){
- return this.spawn( this );
-};
-
-elesfn.cy = function(){
- return this._private.cy;
-};
-
-elesfn.element = function(){
- return this[0];
-};
-
-elesfn.collection = function(){
- if( is.collection( this ) ){
- return this;
- } else { // an element
- return new Collection( this._private.cy, [ this ] );
- }
-};
-
-elesfn.unique = function(){
- return new Collection( this._private.cy, this, { unique: true } );
-};
-
-elesfn.hasElementWithId = function( id ){
- return !!this._private.ids[ id ];
-};
-
-elesfn.getElementById = function( id ){
- var cy = this._private.cy;
- var ele = this._private.ids[ id ];
-
- return ele ? ele : new Collection( cy ); // get ele or empty collection
-};
-
-elesfn.poolIndex = function(){
- var cy = this._private.cy;
- var eles = cy._private.elements;
- var id = this._private.data.id;
-
- return eles._private.indexes[ id ];
-};
-
-elesfn.json = function( obj ){
- var ele = this.element();
- var cy = this.cy();
-
- if( ele == null && obj ){ return this; } // can't set to no eles
-
- if( ele == null ){ return undefined; } // can't get from no eles
-
- var p = ele._private;
-
- if( is.plainObject( obj ) ){ // set
-
- cy.startBatch();
-
- if( obj.data ){
- ele.data( obj.data );
- }
-
- if( obj.position ){
- ele.position( obj.position );
- }
-
- // ignore group -- immutable
-
- var checkSwitch = function( k, trueFnName, falseFnName ){
- var obj_k = obj[ k ];
-
- if( obj_k != null && obj_k !== p[ k ] ){
- if( obj_k ){
- ele[ trueFnName ]();
- } else {
- ele[ falseFnName ]();
- }
- }
- };
-
- checkSwitch( 'removed', 'remove', 'restore' );
-
- checkSwitch( 'selected', 'select', 'unselect' );
-
- checkSwitch( 'selectable', 'selectify', 'unselectify' );
-
- checkSwitch( 'locked', 'lock', 'unlock' );
-
- checkSwitch( 'grabbable', 'grabify', 'ungrabify' );
-
- if( obj.classes != null ){
- ele.classes( obj.classes );
- }
-
- cy.endBatch();
-
- return this;
-
- } else if( obj === undefined ){ // get
-
- var json = {
- data: util.copy( p.data ),
- position: util.copy( p.position ),
- group: p.group,
- removed: p.removed,
- selected: p.selected,
- selectable: p.selectable,
- locked: p.locked,
- grabbable: p.grabbable,
- classes: null
- };
-
- json.classes = Object.keys( p.classes ).filter(function( cls ){
- return p.classes[cls];
- }).join(' ');
-
- return json;
- }
-};
-
-elesfn.jsons = function(){
- var jsons = [];
-
- for( var i = 0; i < this.length; i++ ){
- var ele = this[ i ];
- var json = ele.json();
-
- jsons.push( json );
- }
-
- return jsons;
-};
-
-elesfn.clone = function(){
- var cy = this.cy();
- var elesArr = [];
-
- for( var i = 0; i < this.length; i++ ){
- var ele = this[ i ];
- var json = ele.json();
- var clone = new Element( cy, json, false ); // NB no restore
-
- elesArr.push( clone );
- }
-
- return new Collection( cy, elesArr );
-};
-elesfn.copy = elesfn.clone;
-
-elesfn.restore = function( notifyRenderer ){
- var self = this;
- var cy = self.cy();
- var cy_p = cy._private;
-
- if( notifyRenderer === undefined ){
- notifyRenderer = true;
- }
-
- // create arrays of nodes and edges, since we need to
- // restore the nodes first
- var nodes = [];
- var edges = [];
- var elements;
- for( var i = 0, l = self.length; i < l; i++ ){
- var ele = self[ i ];
-
- if( !ele.removed() ){
- // don't need to handle this ele
- continue;
- }
-
- // keep nodes first in the array and edges after
- if( ele.isNode() ){ // put to front of array if node
- nodes.push( ele );
- } else { // put to end of array if edge
- edges.push( ele );
- }
- }
-
- elements = nodes.concat( edges );
-
- var i;
- var removeFromElements = function(){
- elements.splice( i, 1 );
- i--;
- };
-
- // now, restore each element
- for( i = 0; i < elements.length; i++ ){
- var ele = elements[ i ];
-
- var _private = ele._private;
- var data = _private.data;
-
- // the traversal cache should start fresh when ele is added
- _private.traversalCache = null;
-
- // set id and validate
- if( data.id === undefined ){
- data.id = idFactory.generate( cy, ele );
-
- } else if( is.number( data.id ) ){
- data.id = '' + data.id; // now it's a string
-
- } else if( is.emptyString( data.id ) || !is.string( data.id ) ){
- util.error( 'Can not create element with invalid string ID `' + data.id + '`' );
-
- // can't create element if it has empty string as id or non-string id
- removeFromElements();
- continue;
- } else if( cy.hasElementWithId( data.id ) ){
- util.error( 'Can not create second element with ID `' + data.id + '`' );
-
- // can't create element if one already has that id
- removeFromElements();
- continue;
- }
-
- var id = data.id; // id is finalised, now let's keep a ref
-
- if( ele.isNode() ){ // extra checks for nodes
- var node = ele;
- var pos = _private.position;
-
- // make sure the nodes have a defined position
-
- if( pos.x == null ){
- pos.x = 0;
- }
-
- if( pos.y == null ){
- pos.y = 0;
- }
- }
-
- if( ele.isEdge() ){ // extra checks for edges
-
- var edge = ele;
- var fields = [ 'source', 'target' ];
- var fieldsLength = fields.length;
- var badSourceOrTarget = false;
- for( var j = 0; j < fieldsLength; j++ ){
-
- var field = fields[ j ];
- var val = data[ field ];
-
- if( is.number( val ) ){
- val = data[ field ] = '' + data[ field ]; // now string
- }
-
- if( val == null || val === '' ){
- // can't create if source or target is not defined properly
- util.error( 'Can not create edge `' + id + '` with unspecified ' + field );
- badSourceOrTarget = true;
- } else if( !cy.hasElementWithId( val ) ){
- // can't create edge if one of its nodes doesn't exist
- util.error( 'Can not create edge `' + id + '` with nonexistant ' + field + ' `' + val + '`' );
- badSourceOrTarget = true;
- }
- }
-
- if( badSourceOrTarget ){ removeFromElements(); continue; } // can't create this
-
- var src = cy.getElementById( data.source );
- var tgt = cy.getElementById( data.target );
-
- src._private.edges.push( edge );
- tgt._private.edges.push( edge );
-
- edge._private.source = src;
- edge._private.target = tgt;
- } // if is edge
-
- // create mock ids / indexes maps for element so it can be used like collections
- _private.ids = {};
- _private.ids[ id ] = ele;
- _private.indexes = {};
- _private.indexes[ id ] = ele;
-
- _private.removed = false;
- cy.addToPool( ele );
- } // for each element
-
- // do compound node sanity checks
- for( var i = 0; i < nodes.length; i++ ){ // each node
- var node = nodes[ i ];
- var data = node._private.data;
-
- if( is.number( data.parent ) ){ // then automake string
- data.parent = '' + data.parent;
- }
-
- var parentId = data.parent;
-
- var specifiedParent = parentId != null;
-
- if( specifiedParent ){
- var parent = cy.getElementById( parentId );
-
- if( parent.empty() ){
- // non-existant parent; just remove it
- data.parent = undefined;
- } else {
- var selfAsParent = false;
- var ancestor = parent;
- while( !ancestor.empty() ){
- if( node.same( ancestor ) ){
- // mark self as parent and remove from data
- selfAsParent = true;
- data.parent = undefined; // remove parent reference
-
- // exit or we loop forever
- break;
- }
-
- ancestor = ancestor.parent();
- }
-
- if( !selfAsParent ){
- // connect with children
- parent[0]._private.children.push( node );
- node._private.parent = parent[0];
-
- // let the core know we have a compound graph
- cy_p.hasCompoundNodes = true;
- }
- } // else
- } // if specified parent
- } // for each node
-
- if( elements.length > 0 ){
- var restored = new Collection( cy, elements );
-
- for( var i = 0; i < restored.length; i++ ){
- var ele = restored[i];
-
- if( ele.isNode() ){ continue; }
-
- // adding an edge invalidates the traversal caches for the parallel edges
- var pedges = ele.parallelEdges();
- for( var j = 0; j < pedges.length; j++ ){
- pedges[j]._private.traversalCache = null;
- }
-
- // adding an edge invalidates the traversal cache for the connected nodes
- ele.source()[0]._private.traversalCache = null;
- ele.target()[0]._private.traversalCache = null;
- }
-
- var toUpdateStyle;
-
- if( cy_p.hasCompoundNodes ){
- toUpdateStyle = restored.add( restored.connectedNodes() ).add( restored.parent() );
- } else {
- toUpdateStyle = restored;
- }
-
- toUpdateStyle.updateStyle( notifyRenderer );
-
- if( notifyRenderer ){
- restored.rtrigger( 'add' );
- } else {
- restored.trigger( 'add' );
- }
- }
-
- return self; // chainability
-};
-
-elesfn.removed = function(){
- var ele = this[0];
- return ele && ele._private.removed;
-};
-
-elesfn.inside = function(){
- var ele = this[0];
- return ele && !ele._private.removed;
-};
-
-elesfn.remove = function( notifyRenderer ){
- var self = this;
- var removed = [];
- var elesToRemove = [];
- var elesToRemoveIds = {};
- var cy = self._private.cy;
-
- if( notifyRenderer === undefined ){
- notifyRenderer = true;
- }
-
- // add connected edges
- function addConnectedEdges( node ){
- var edges = node._private.edges;
- for( var i = 0; i < edges.length; i++ ){
- add( edges[ i ] );
- }
- }
-
-
- // add descendant nodes
- function addChildren( node ){
- var children = node._private.children;
-
- for( var i = 0; i < children.length; i++ ){
- add( children[ i ] );
- }
- }
-
- function add( ele ){
- var alreadyAdded = elesToRemoveIds[ ele.id() ];
- if( alreadyAdded ){
- return;
- } else {
- elesToRemoveIds[ ele.id() ] = true;
- }
-
- if( ele.isNode() ){
- elesToRemove.push( ele ); // nodes are removed last
-
- addConnectedEdges( ele );
- addChildren( ele );
- } else {
- elesToRemove.unshift( ele ); // edges are removed first
- }
- }
-
- // make the list of elements to remove
- // (may be removing more than specified due to connected edges etc)
-
- for( var i = 0, l = self.length; i < l; i++ ){
- var ele = self[ i ];
-
- add( ele );
- }
-
- function removeEdgeRef( node, edge ){
- var connectedEdges = node._private.edges;
-
- util.removeFromArray( connectedEdges, edge );
-
- // removing an edges invalidates the traversal cache for its nodes
- node._private.traversalCache = null;
- }
-
- function removeParallelRefs( edge ){
- // removing an edge invalidates the traversal caches for the parallel edges
- var pedges = edge.parallelEdges();
- for( var j = 0; j < pedges.length; j++ ){
- pedges[j]._private.traversalCache = null;
- }
- }
-
- var alteredParents = [];
- alteredParents.ids = {};
-
- function removeChildRef( parent, ele ){
- ele = ele[0];
- parent = parent[0];
-
- var children = parent._private.children;
- var pid = parent.id();
-
- util.removeFromArray( children, ele );
-
- if( !alteredParents.ids[ pid ] ){
- alteredParents.ids[ pid ] = true;
- alteredParents.push( parent );
- }
- }
-
- // remove from core pool
- cy.removeFromPool( elesToRemove );
-
- for( var i = 0; i < elesToRemove.length; i++ ){
- var ele = elesToRemove[ i ];
-
- // mark as removed
- ele._private.removed = true;
-
- // add to list of removed elements
- removed.push( ele );
-
- if( ele.isEdge() ){ // remove references to this edge in its connected nodes
- var src = ele.source()[0];
- var tgt = ele.target()[0];
-
- removeEdgeRef( src, ele );
- removeEdgeRef( tgt, ele );
- removeParallelRefs( ele );
-
- } else { // remove reference to parent
- var parent = ele.parent();
-
- if( parent.length !== 0 ){
- removeChildRef( parent, ele );
- }
- }
- }
-
- // check to see if we have a compound graph or not
- var elesStillInside = cy._private.elements;
- cy._private.hasCompoundNodes = false;
- for( var i = 0; i < elesStillInside.length; i++ ){
- var ele = elesStillInside[ i ];
-
- if( ele.isParent() ){
- cy._private.hasCompoundNodes = true;
- break;
- }
- }
-
- var removedElements = new Collection( this.cy(), removed );
- if( removedElements.size() > 0 ){
- // must manually notify since trigger won't do this automatically once removed
-
- if( notifyRenderer ){
- this.cy().notify( {
- type: 'remove',
- eles: removedElements
- } );
- }
-
- removedElements.trigger( 'remove' );
- }
-
- // the parents who were modified by the removal need their style updated
- for( var i = 0; i < alteredParents.length; i++ ){
- var ele = alteredParents[ i ];
-
- if( !ele.removed() ){
- ele.updateStyle();
- }
- }
-
- return new Collection( cy, removed );
-};
-
-elesfn.move = function( struct ){
- var cy = this._private.cy;
-
- if( struct.source !== undefined || struct.target !== undefined ){
- var srcId = struct.source;
- var tgtId = struct.target;
- var srcExists = cy.hasElementWithId( srcId );
- var tgtExists = cy.hasElementWithId( tgtId );
-
- if( srcExists || tgtExists ){
- var jsons = this.jsons();
-
- this.remove();
-
- for( var i = 0; i < jsons.length; i++ ){
- var json = jsons[i];
- var ele = this[i];
-
- if( json.group === 'edges' ){
- if( srcExists ){ json.data.source = srcId; }
-
- if( tgtExists ){ json.data.target = tgtId; }
-
- json.scratch = ele._private.scratch;
- }
- }
-
- return cy.add( jsons );
- }
-
- } else if( struct.parent !== undefined ){ // move node to new parent
- var parentId = struct.parent;
- var parentExists = parentId === null || cy.hasElementWithId( parentId );
-
- if( parentExists ){
- var jsons = this.jsons();
- var descs = this.descendants();
- var descsEtc = descs.union( descs.union( this ).connectedEdges() );
-
- this.remove(); // NB: also removes descendants and their connected edges
-
- for( var i = 0; i < this.length; i++ ){
- var json = jsons[i];
- var ele = this[i];
-
- if( json.group === 'nodes' ){
- json.data.parent = parentId === null ? undefined : parentId;
-
- json.scratch = ele._private.scratch;
- }
- }
-
- return cy.add( jsons ).union( descsEtc.restore() );
- }
- }
-
- return this; // if nothing done
-};
-
-[
- _dereq_( './algorithms' ),
- _dereq_( './animation' ),
- _dereq_( './class' ),
- _dereq_( './comparators' ),
- _dereq_( './compounds' ),
- _dereq_( './data' ),
- _dereq_( './degree' ),
- _dereq_( './dimensions' ),
- _dereq_( './events' ),
- _dereq_( './filter' ),
- _dereq_( './group' ),
- _dereq_( './index' ),
- _dereq_( './iteration' ),
- _dereq_( './layout' ),
- _dereq_( './style' ),
- _dereq_( './switch-functions' ),
- _dereq_( './traversing' )
-].forEach( function( props ){
- util.extend( elesfn, props );
-} );
-
-module.exports = Collection;
-
-},{"../is":83,"../util":100,"./algorithms":11,"./animation":15,"./class":16,"./comparators":17,"./compounds":18,"./data":19,"./degree":20,"./dimensions":21,"./element":22,"./events":23,"./filter":24,"./group":25,"./index":26,"./iteration":27,"./layout":28,"./style":29,"./switch-functions":30,"./traversing":31}],27:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../is' );
-var zIndexSort = _dereq_( './zsort' );
-
-var elesfn = ({
- each: function( fn ){
- if( is.fn( fn ) ){
- for( var i = 0; i < this.length; i++ ){
- var ele = this[ i ];
- var ret = fn.apply( ele, [ i, ele ] );
-
- if( ret === false ){ break; } // exit each early on return false
- }
- }
- return this;
- },
-
- forEach: function( fn, thisArg ){
- if( is.fn( fn ) ){
-
- for( var i = 0; i < this.length; i++ ){
- var ele = this[ i ];
- var ret = thisArg ? fn.apply( thisArg, [ ele, i, this ] ) : fn( ele, i, this );
-
- if( ret === false ){ break; } // exit each early on return false
- }
- }
-
- return this;
- },
-
- toArray: function(){
- var array = [];
-
- for( var i = 0; i < this.length; i++ ){
- array.push( this[ i ] );
- }
-
- return array;
- },
-
- slice: function( start, end ){
- var array = [];
- var thisSize = this.length;
-
- if( end == null ){
- end = thisSize;
- }
-
- if( start == null ){
- start = 0;
- }
-
- if( start < 0 ){
- start = thisSize + start;
- }
-
- if( end < 0 ){
- end = thisSize + end;
- }
-
- for( var i = start; i >= 0 && i < end && i < thisSize; i++ ){
- array.push( this[ i ] );
- }
-
- return this.spawn( array );
- },
-
- size: function(){
- return this.length;
- },
-
- eq: function( i ){
- return this[ i ] || this.spawn();
- },
-
- first: function(){
- return this[0] || this.spawn();
- },
-
- last: function(){
- return this[ this.length - 1 ] || this.spawn();
- },
-
- empty: function(){
- return this.length === 0;
- },
-
- nonempty: function(){
- return !this.empty();
- },
-
- sort: function( sortFn ){
- if( !is.fn( sortFn ) ){
- return this;
- }
-
- var sorted = this.toArray().sort( sortFn );
-
- return this.spawn( sorted );
- },
-
- sortByZIndex: function(){
- return this.sort( zIndexSort );
- },
-
- zDepth: function(){
- var ele = this[0];
- if( !ele ){ return undefined; }
-
- // var cy = ele.cy();
- var _p = ele._private;
- var group = _p.group;
-
- if( group === 'nodes' ){
- var depth = _p.data.parent ? ele.parents().size() : 0;
-
- if( !ele.isParent() ){
- return Number.MAX_VALUE; // childless nodes always on top
- }
-
- return depth;
- } else {
- var src = _p.source;
- var tgt = _p.target;
- var srcDepth = src.zDepth();
- var tgtDepth = tgt.zDepth();
-
- return Math.max( srcDepth, tgtDepth, 0 ); // depth of deepest parent
- }
- }
-});
-
-module.exports = elesfn;
-
-},{"../is":83,"./zsort":32}],28:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../is' );
-var util = _dereq_( '../util' );
-var Promise = _dereq_('../promise');
-
-var elesfn = ({
-
- // using standard layout options, apply position function (w/ or w/o animation)
- layoutPositions: function( layout, options, fn ){
- var nodes = this.nodes();
- var cy = this.cy();
-
- layout.trigger( { type: 'layoutstart', layout: layout } );
-
- layout.animations = [];
-
- if( options.animate ){
- for( var i = 0; i < nodes.length; i++ ){
- var node = nodes[ i ];
-
- var newPos = fn.call( node, i, node );
- var pos = node.position();
-
- if( !is.number( pos.x ) || !is.number( pos.y ) ){
- node.silentPosition( { x: 0, y: 0 } );
- }
-
- var ani = node.animation( {
- position: newPos,
- duration: options.animationDuration,
- easing: options.animationEasing
- } );
-
- layout.animations.push( ani );
-
- ani.play();
- }
-
- var onStep;
- cy.on( 'step.*', ( onStep = function(){
- if( options.fit ){
- cy.fit( options.eles, options.padding );
- }
- }) );
-
- layout.one('layoutstop', function(){
- cy.off('step.*', onStep);
- });
-
- layout.one( 'layoutready', options.ready );
- layout.trigger( { type: 'layoutready', layout: layout } );
-
- Promise.all( layout.animations.map(function( ani ){
- return ani.promise();
- }) ).then(function(){
- cy.off('step.*', onStep);
-
- if( options.zoom != null ){
- cy.zoom( options.zoom );
- }
-
- if( options.pan ){
- cy.pan( options.pan );
- }
-
- if( options.fit ){
- cy.fit( options.eles, options.padding );
- }
-
- layout.one( 'layoutstop', options.stop );
- layout.trigger( { type: 'layoutstop', layout: layout } );
- });
- } else {
- nodes.positions( fn );
-
- if( options.fit ){
- cy.fit( options.eles, options.padding );
- }
-
- if( options.zoom != null ){
- cy.zoom( options.zoom );
- }
-
- if( options.pan ){
- cy.pan( options.pan );
- }
-
- layout.one( 'layoutready', options.ready );
- layout.trigger( { type: 'layoutready', layout: layout } );
-
- layout.one( 'layoutstop', options.stop );
- layout.trigger( { type: 'layoutstop', layout: layout } );
- }
-
- return this; // chaining
- },
-
- layout: function( options ){
- var cy = this.cy();
-
- cy.layout( util.extend( {}, options, {
- eles: this
- } ) );
-
- return this;
- },
-
- makeLayout: function( options ){
- var cy = this.cy();
-
- return cy.makeLayout( util.extend( {}, options, {
- eles: this
- } ) );
- }
-
-});
-
-// aliases:
-elesfn.createLayout = elesfn.makeLayout;
-
-module.exports = elesfn;
-
-},{"../is":83,"../promise":86,"../util":100}],29:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../is' );
-
-var elesfn = ({
-
- // fully updates (recalculates) the style for the elements
- updateStyle: function( notifyRenderer ){
- var cy = this._private.cy;
-
- if( !cy.styleEnabled() ){ return this; }
-
- if( cy._private.batchingStyle ){
- var bEles = cy._private.batchStyleEles;
-
- bEles.merge( this );
-
- return this; // chaining and exit early when batching
- }
-
- var style = cy.style();
- notifyRenderer = notifyRenderer || notifyRenderer === undefined ? true : false;
-
- style.apply( this );
-
- var updatedCompounds = this.updateCompoundBounds();
- var toNotify = updatedCompounds.length > 0 ? this.add( updatedCompounds ) : this;
-
- if( notifyRenderer ){
- toNotify.rtrigger( 'style' ); // let renderer know we changed style
- } else {
- toNotify.trigger( 'style' ); // just fire the event
- }
- return this; // chaining
- },
-
- // just update the mappers in the elements' styles; cheaper than eles.updateStyle()
- updateMappers: function( notifyRenderer ){
- var cy = this._private.cy;
- var style = cy.style();
- notifyRenderer = notifyRenderer || notifyRenderer === undefined ? true : false;
-
- if( !cy.styleEnabled() ){ return this; }
-
- style.updateMappers( this );
-
- var updatedCompounds = this.updateCompoundBounds();
- var toNotify = updatedCompounds.length > 0 ? this.add( updatedCompounds ) : this;
-
- if( notifyRenderer ){
- toNotify.rtrigger( 'style' ); // let renderer know we changed style
- } else {
- toNotify.trigger( 'style' ); // just fire the event
- }
- return this; // chaining
- },
-
- // get the internal parsed style object for the specified property
- parsedStyle: function( property ){
- var ele = this[0];
- if( !ele.cy().styleEnabled() ){ return; }
-
- if( ele ){
- return ele._private.style[ property ] || ele.cy().style().getDefaultProperty( property );
- }
- },
-
- // get the specified css property as a rendered value (i.e. on-screen value)
- // or get the whole rendered style if no property specified (NB doesn't allow setting)
- renderedStyle: function( property ){
- var cy = this.cy();
- if( !cy.styleEnabled() ){ return this; }
-
- var ele = this[0];
-
- if( ele ){
- var renstyle = ele.cy().style().getRenderedStyle( ele );
-
- if( property === undefined ){
- return renstyle;
- } else {
- return renstyle[ property ];
- }
- }
- },
-
- // read the calculated css style of the element or override the style (via a bypass)
- style: function( name, value ){
- var cy = this.cy();
-
- if( !cy.styleEnabled() ){ return this; }
-
- var updateTransitions = false;
- var style = cy.style();
-
- if( is.plainObject( name ) ){ // then extend the bypass
- var props = name;
- style.applyBypass( this, props, updateTransitions );
-
- var updatedCompounds = this.updateCompoundBounds();
- var toNotify = updatedCompounds.length > 0 ? this.add( updatedCompounds ) : this;
- toNotify.rtrigger( 'style' ); // let the renderer know we've updated style
-
- } else if( is.string( name ) ){
-
- if( value === undefined ){ // then get the property from the style
- var ele = this[0];
-
- if( ele ){
- return style.getStylePropertyValue( ele, name );
- } else { // empty collection => can't get any value
- return;
- }
-
- } else { // then set the bypass with the property value
- style.applyBypass( this, name, value, updateTransitions );
-
- var updatedCompounds = this.updateCompoundBounds();
- var toNotify = updatedCompounds.length > 0 ? this.add( updatedCompounds ) : this;
- toNotify.rtrigger( 'style' ); // let the renderer know we've updated style
- }
-
- } else if( name === undefined ){
- var ele = this[0];
-
- if( ele ){
- return style.getRawStyle( ele );
- } else { // empty collection => can't get any value
- return;
- }
- }
-
- return this; // chaining
- },
-
- removeStyle: function( names ){
- var cy = this.cy();
-
- if( !cy.styleEnabled() ){ return this; }
-
- var updateTransitions = false;
- var style = cy.style();
- var eles = this;
-
- if( names === undefined ){
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
-
- style.removeAllBypasses( ele, updateTransitions );
- }
- } else {
- names = names.split( /\s+/ );
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
-
- style.removeBypasses( ele, names, updateTransitions );
- }
- }
-
- var updatedCompounds = this.updateCompoundBounds();
- var toNotify = updatedCompounds.length > 0 ? this.add( updatedCompounds ) : this;
- toNotify.rtrigger( 'style' ); // let the renderer know we've updated style
-
- return this; // chaining
- },
-
- show: function(){
- this.css( 'display', 'element' );
- return this; // chaining
- },
-
- hide: function(){
- this.css( 'display', 'none' );
- return this; // chaining
- },
-
- visible: function(){
- var cy = this.cy();
- if( !cy.styleEnabled() ){ return true; }
-
- var ele = this[0];
- var hasCompoundNodes = cy.hasCompoundNodes();
-
- if( ele ){
- if(
- ele.pstyle( 'visibility' ).value !== 'visible'
- || ele.pstyle( 'display' ).value !== 'element'
- ){
- return false;
- }
-
- if( ele._private.group === 'nodes' ){
- if( !hasCompoundNodes ){ return true; }
-
- var parents = ele._private.data.parent ? ele.parents() : null;
-
- if( parents ){
- for( var i = 0; i < parents.length; i++ ){
- var parent = parents[ i ];
- var pVis = parent.pstyle( 'visibility' ).value;
- var pDis = parent.pstyle( 'display' ).value;
-
- if( pVis !== 'visible' || pDis !== 'element' ){
- return false;
- }
- }
- }
-
- return true;
- } else {
- var src = ele._private.source;
- var tgt = ele._private.target;
-
- return src.visible() && tgt.visible();
- }
-
- }
- },
-
- hidden: function(){
- var ele = this[0];
-
- if( ele ){
- return !ele.visible();
- }
- },
-
- effectiveOpacity: function(){
- var cy = this.cy();
- if( !cy.styleEnabled() ){ return 1; }
-
- var hasCompoundNodes = cy.hasCompoundNodes();
- var ele = this[0];
-
- if( ele ){
- var _p = ele._private;
- var parentOpacity = ele.pstyle( 'opacity' ).value;
-
- if( !hasCompoundNodes ){ return parentOpacity; }
-
- var parents = !_p.data.parent ? null : ele.parents();
-
- if( parents ){
- for( var i = 0; i < parents.length; i++ ){
- var parent = parents[ i ];
- var opacity = parent.pstyle( 'opacity' ).value;
-
- parentOpacity = opacity * parentOpacity;
- }
- }
-
- return parentOpacity;
- }
- },
-
- transparent: function(){
- var cy = this.cy();
- if( !cy.styleEnabled() ){ return false; }
-
- var ele = this[0];
- var hasCompoundNodes = ele.cy().hasCompoundNodes();
-
- if( ele ){
- if( !hasCompoundNodes ){
- return ele.pstyle( 'opacity' ).value === 0;
- } else {
- return ele.effectiveOpacity() === 0;
- }
- }
- },
-
- backgrounding: function(){
- var cy = this.cy();
- if( !cy.styleEnabled() ){ return false; }
-
- var ele = this[0];
-
- return ele._private.backgrounding ? true : false;
- }
-
-});
-
-
-elesfn.bypass = elesfn.css = elesfn.style;
-elesfn.renderedCss = elesfn.renderedStyle;
-elesfn.removeBypass = elesfn.removeCss = elesfn.removeStyle;
-elesfn.pstyle = elesfn.parsedStyle;
-
-module.exports = elesfn;
-
-},{"../is":83}],30:[function(_dereq_,module,exports){
-'use strict';
-
-var elesfn = {};
-
-function defineSwitchFunction( params ){
- return function(){
- var args = arguments;
- var changedEles = [];
-
- // e.g. cy.nodes().select( data, handler )
- if( args.length === 2 ){
- var data = args[0];
- var handler = args[1];
- this.on( params.event, data, handler );
- }
-
- // e.g. cy.nodes().select( handler )
- else if( args.length === 1 ){
- var handler = args[0];
- this.on( params.event, handler );
- }
-
- // e.g. cy.nodes().select()
- else if( args.length === 0 ){
- for( var i = 0; i < this.length; i++ ){
- var ele = this[ i ];
- var able = !params.ableField || ele._private[ params.ableField ];
- var changed = ele._private[ params.field ] != params.value;
-
- if( params.overrideAble ){
- var overrideAble = params.overrideAble( ele );
-
- if( overrideAble !== undefined ){
- able = overrideAble;
-
- if( !overrideAble ){ return this; } // to save cycles assume not able for all on override
- }
- }
-
- if( able ){
- ele._private[ params.field ] = params.value;
-
- if( changed ){
- changedEles.push( ele );
- }
- }
- }
-
- var changedColl = this.spawn( changedEles );
- changedColl.updateStyle(); // change of state => possible change of style
- changedColl.trigger( params.event );
- }
-
- return this;
- };
-}
-
-function defineSwitchSet( params ){
- elesfn[ params.field ] = function(){
- var ele = this[0];
-
- if( ele ){
- if( params.overrideField ){
- var val = params.overrideField( ele );
-
- if( val !== undefined ){
- return val;
- }
- }
-
- return ele._private[ params.field ];
- }
- };
-
- elesfn[ params.on ] = defineSwitchFunction( {
- event: params.on,
- field: params.field,
- ableField: params.ableField,
- overrideAble: params.overrideAble,
- value: true
- } );
-
- elesfn[ params.off ] = defineSwitchFunction( {
- event: params.off,
- field: params.field,
- ableField: params.ableField,
- overrideAble: params.overrideAble,
- value: false
- } );
-}
-
-defineSwitchSet( {
- field: 'locked',
- overrideField: function( ele ){
- return ele.cy().autolock() ? true : undefined;
- },
- on: 'lock',
- off: 'unlock'
-} );
-
-defineSwitchSet( {
- field: 'grabbable',
- overrideField: function( ele ){
- return ele.cy().autoungrabify() ? false : undefined;
- },
- on: 'grabify',
- off: 'ungrabify'
-} );
-
-defineSwitchSet( {
- field: 'selected',
- ableField: 'selectable',
- overrideAble: function( ele ){
- return ele.cy().autounselectify() ? false : undefined;
- },
- on: 'select',
- off: 'unselect'
-} );
-
-defineSwitchSet( {
- field: 'selectable',
- overrideField: function( ele ){
- return ele.cy().autounselectify() ? false : undefined;
- },
- on: 'selectify',
- off: 'unselectify'
-} );
-
-elesfn.deselect = elesfn.unselect;
-
-elesfn.grabbed = function(){
- var ele = this[0];
- if( ele ){
- return ele._private.grabbed;
- }
-};
-
-defineSwitchSet( {
- field: 'active',
- on: 'activate',
- off: 'unactivate'
-} );
-
-elesfn.inactive = function(){
- var ele = this[0];
- if( ele ){
- return !ele._private.active;
- }
-};
-
-module.exports = elesfn;
-
-},{}],31:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../util' );
-var is = _dereq_( '../is' );
-
-var elesfn = {};
-
-var cache = function( fn, name ){
- return function traversalCache( arg1, arg2, arg3, arg4 ){
- var selectorOrEles = arg1;
- var eles = this;
- var key;
-
- if( selectorOrEles == null ){
- key = 'null';
- } else if( is.elementOrCollection( selectorOrEles ) && selectorOrEles.length === 1 ){
- key = '#' + selectorOrEles.id();
- }
-
- if( eles.length === 1 && key ){
- var _p = eles[0]._private;
- var tch = _p.traversalCache = _p.traversalCache || {};
- var ch = tch[ name ] = tch[ name ] || {};
- var cacheHit = ch[ key ];
-
- if( cacheHit ){
- return cacheHit;
- } else {
- return ( ch[ key ] = fn.call( eles, arg1, arg2, arg3, arg4 ) );
- }
- } else {
- return fn.call( eles, arg1, arg2, arg3, arg4 );
- }
- };
-};
-
-// DAG functions
-////////////////
-
-var defineDagExtremity = function( params ){
- return function dagExtremityImpl( selector ){
- var eles = this;
- var ret = [];
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
- if( !ele.isNode() ){
- continue;
- }
-
- var disqualified = false;
- var edges = ele.connectedEdges();
-
- for( var j = 0; j < edges.length; j++ ){
- var edge = edges[j];
- var src = edge.source();
- var tgt = edge.target();
-
- if(
- ( params.noIncomingEdges && tgt === ele && src !== ele )
- || ( params.noOutgoingEdges && src === ele && tgt !== ele )
- ){
- disqualified = true;
- break;
- }
- }
-
- if( !disqualified ){
- ret.push( ele );
- }
- }
-
- return this.spawn( ret, { unique: true } ).filter( selector );
- };
-};
-
-var defineDagOneHop = function( params ){
- return function( selector ){
- var eles = this;
- var oEles = [];
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
-
- if( !ele.isNode() ){ continue; }
-
- var edges = ele.connectedEdges();
- for( var j = 0; j < edges.length; j++ ){
- var edge = edges[ j ];
- var src = edge.source();
- var tgt = edge.target();
-
- if( params.outgoing && src === ele ){
- oEles.push( edge );
- oEles.push( tgt );
- } else if( params.incoming && tgt === ele ){
- oEles.push( edge );
- oEles.push( src );
- }
- }
- }
-
- return this.spawn( oEles, { unique: true } ).filter( selector );
- };
-};
-
-var defineDagAllHops = function( params ){
- return function( selector ){
- var eles = this;
- var sEles = [];
- var sElesIds = {};
-
- for( ;; ){
- var next = params.outgoing ? eles.outgoers() : eles.incomers();
-
- if( next.length === 0 ){ break; } // done if none left
-
- var newNext = false;
- for( var i = 0; i < next.length; i++ ){
- var n = next[ i ];
- var nid = n.id();
-
- if( !sElesIds[ nid ] ){
- sElesIds[ nid ] = true;
- sEles.push( n );
- newNext = true;
- }
- }
-
- if( !newNext ){ break; } // done if touched all outgoers already
-
- eles = next;
- }
-
- return this.spawn( sEles, { unique: true } ).filter( selector );
- };
-};
-
-util.extend( elesfn, {
- // get the root nodes in the DAG
- roots: defineDagExtremity({ noIncomingEdges: true }),
-
- // get the leaf nodes in the DAG
- leaves: defineDagExtremity({ noOutgoingEdges: true }),
-
- // normally called children in graph theory
- // these nodes =edges=> outgoing nodes
- outgoers: cache( defineDagOneHop({ outgoing: true }) , 'outgoers' ),
-
- // aka DAG descendants
- successors: defineDagAllHops({ outgoing: true }),
-
- // normally called parents in graph theory
- // these nodes <=edges= incoming nodes
- incomers: cache( defineDagOneHop({ incoming: true }), 'incomers' ),
-
- // aka DAG ancestors
- predecessors: defineDagAllHops({ incoming: true })
-} );
-
-
-// Neighbourhood functions
-//////////////////////////
-
-util.extend( elesfn, {
- neighborhood: cache(function( selector ){
- var elements = [];
- var nodes = this.nodes();
-
- for( var i = 0; i < nodes.length; i++ ){ // for all nodes
- var node = nodes[ i ];
- var connectedEdges = node.connectedEdges();
-
- // for each connected edge, add the edge and the other node
- for( var j = 0; j < connectedEdges.length; j++ ){
- var edge = connectedEdges[ j ];
- var src = edge.source();
- var tgt = edge.target();
- var otherNode = node === src ? tgt : src;
-
- // need check in case of loop
- if( otherNode.length > 0 ){
- elements.push( otherNode[0] ); // add node 1 hop away
- }
-
- // add connected edge
- elements.push( edge[0] );
- }
-
- }
-
- return ( this.spawn( elements, { unique: true } ) ).filter( selector );
- }, 'neighborhood'),
-
- closedNeighborhood: function( selector ){
- return this.neighborhood().add( this ).filter( selector );
- },
-
- openNeighborhood: function( selector ){
- return this.neighborhood( selector );
- }
-} );
-
-// aliases
-elesfn.neighbourhood = elesfn.neighborhood;
-elesfn.closedNeighbourhood = elesfn.closedNeighborhood;
-elesfn.openNeighbourhood = elesfn.openNeighborhood;
-
-// Edge functions
-/////////////////
-
-util.extend( elesfn, {
- source: cache(function sourceImpl( selector ){
- var ele = this[0];
- var src;
-
- if( ele ){
- src = ele._private.source || ele.cy().collection();
- }
-
- return src && selector ? src.filter( selector ) : src;
- }, 'source'),
-
- target: cache(function targetImpl( selector ){
- var ele = this[0];
- var tgt;
-
- if( ele ){
- tgt = ele._private.target || ele.cy().collection();
- }
-
- return tgt && selector ? tgt.filter( selector ) : tgt;
- }, 'target'),
-
- sources: defineSourceFunction( {
- attr: 'source'
- } ),
-
- targets: defineSourceFunction( {
- attr: 'target'
- } )
-} );
-
-function defineSourceFunction( params ){
- return function sourceImpl( selector ){
- var sources = [];
-
- for( var i = 0; i < this.length; i++ ){
- var ele = this[ i ];
- var src = ele._private[ params.attr ];
-
- if( src ){
- sources.push( src );
- }
- }
-
- return this.spawn( sources, { unique: true } ).filter( selector );
- };
-}
-
-util.extend( elesfn, {
- edgesWith: cache( defineEdgesWithFunction(), 'edgesWith', true ),
-
- edgesTo: cache( defineEdgesWithFunction( {
- thisIsSrc: true
- } ), 'edgesTo', true )
-} );
-
-function defineEdgesWithFunction( params ){
-
- return function edgesWithImpl( otherNodes ){
- var elements = [];
- var cy = this._private.cy;
- var p = params || {};
-
- // get elements if a selector is specified
- if( is.string( otherNodes ) ){
- otherNodes = cy.$( otherNodes );
- }
-
- var thisIds = this._private.ids;
- var otherIds = otherNodes._private.ids;
-
- for( var h = 0; h < otherNodes.length; h++ ){
- var edges = otherNodes[ h ]._private.edges;
-
- for( var i = 0; i < edges.length; i++ ){
- var edge = edges[ i ];
- var edgeData = edge._private.data;
- var thisToOther = thisIds[ edgeData.source ] && otherIds[ edgeData.target ];
- var otherToThis = otherIds[ edgeData.source ] && thisIds[ edgeData.target ];
- var edgeConnectsThisAndOther = thisToOther || otherToThis;
-
- if( !edgeConnectsThisAndOther ){ continue; }
-
- if( p.thisIsSrc || p.thisIsTgt ){
- if( p.thisIsSrc && !thisToOther ){ continue; }
-
- if( p.thisIsTgt && !otherToThis ){ continue; }
- }
-
- elements.push( edge );
- }
- }
-
- return this.spawn( elements, { unique: true } );
- };
-}
-
-util.extend( elesfn, {
- connectedEdges: cache(function( selector ){
- var retEles = [];
-
- var eles = this;
- for( var i = 0; i < eles.length; i++ ){
- var node = eles[ i ];
- if( !node.isNode() ){ continue; }
-
- var edges = node._private.edges;
-
- for( var j = 0; j < edges.length; j++ ){
- var edge = edges[ j ];
- retEles.push( edge );
- }
- }
-
- return this.spawn( retEles, { unique: true } ).filter( selector );
- }, 'connectedEdges'),
-
- connectedNodes: cache(function( selector ){
- var retEles = [];
-
- var eles = this;
- for( var i = 0; i < eles.length; i++ ){
- var edge = eles[ i ];
- if( !edge.isEdge() ){ continue; }
-
- retEles.push( edge.source()[0] );
- retEles.push( edge.target()[0] );
- }
-
- return this.spawn( retEles, { unique: true } ).filter( selector );
- }, 'connectedNodes'),
-
- parallelEdges: cache( defineParallelEdgesFunction(), 'parallelEdges' ),
-
- codirectedEdges: cache( defineParallelEdgesFunction( {
- codirected: true
- } ), 'codirectedEdges' )
-} );
-
-function defineParallelEdgesFunction( params ){
- var defaults = {
- codirected: false
- };
- params = util.extend( {}, defaults, params );
-
- return function parallelEdgesImpl( selector ){ // micro-optimised for renderer
- var elements = [];
- var edges = this.edges();
- var p = params;
-
- // look at all the edges in the collection
- for( var i = 0; i < edges.length; i++ ){
- var edge1 = edges[ i ];
- var edge1_p = edge1._private;
- var src1 = edge1_p.source;
- var srcid1 = src1._private.data.id;
- var tgtid1 = edge1_p.data.target;
- var srcEdges1 = src1._private.edges;
-
- // look at edges connected to the src node of this edge
- for( var j = 0; j < srcEdges1.length; j++ ){
- var edge2 = srcEdges1[ j ];
- var edge2data = edge2._private.data;
- var tgtid2 = edge2data.target;
- var srcid2 = edge2data.source;
-
- var codirected = tgtid2 === tgtid1 && srcid2 === srcid1;
- var oppdirected = srcid1 === tgtid2 && tgtid1 === srcid2;
-
- if( (p.codirected && codirected) || (!p.codirected && (codirected || oppdirected)) ){
- elements.push( edge2 );
- }
- }
- }
-
- return this.spawn( elements, { unique: true } ).filter( selector );
- };
-
-}
-
-// Misc functions
-/////////////////
-
-util.extend( elesfn, {
- components: function(){
- var self = this;
- var cy = self.cy();
- var visited = self.spawn();
- var unvisited = self.nodes().spawnSelf();
- var components = [];
-
- var visitInComponent = function( node, component ){
- visited.merge( node );
- unvisited.unmerge( node );
- component.merge( node );
- };
-
- if( unvisited.empty() ){ return self.spawn(); }
-
- do {
- var component = cy.collection();
- components.push( component );
-
- var root = unvisited[0];
- visitInComponent( root, component );
-
- self.bfs({
- directed: false,
- roots: root,
- visit: function( i, depth, v, e, u ){
- visitInComponent( v, component );
- }
- } );
-
- } while( unvisited.length > 0 );
-
- return components.map(function( component ){
- var connectedEdges = component.connectedEdges().stdFilter(function( edge ){
- return component.anySame( edge.source() ) && component.anySame( edge.target() );
- });
-
- return component.union( connectedEdges );
- });
- }
-} );
-
-module.exports = elesfn;
-
-},{"../is":83,"../util":100}],32:[function(_dereq_,module,exports){
-'use strict';
-
-var zIndexSort = function( a, b ){
- var cy = a.cy();
- var zDiff = a.pstyle( 'z-index' ).value - b.pstyle( 'z-index' ).value;
- var depthA = 0;
- var depthB = 0;
- var hasCompoundNodes = cy.hasCompoundNodes();
- var aIsNode = a.isNode();
- var aIsEdge = !aIsNode;
- var bIsNode = b.isNode();
- var bIsEdge = !bIsNode;
-
- // no need to calculate element depth if there is no compound node
- if( hasCompoundNodes ){
- depthA = a.zDepth();
- depthB = b.zDepth();
- }
-
- var depthDiff = depthA - depthB;
- var sameDepth = depthDiff === 0;
-
- if( sameDepth ){
-
- if( aIsNode && bIsEdge ){
- return 1; // 'a' is a node, it should be drawn later
-
- } else if( aIsEdge && bIsNode ){
- return -1; // 'a' is an edge, it should be drawn first
-
- } else { // both nodes or both edges
- if( zDiff === 0 ){ // same z-index => compare indices in the core (order added to graph w/ last on top)
- return a.poolIndex() - b.poolIndex();
- } else {
- return zDiff;
- }
- }
-
- // elements on different level
- } else {
- return depthDiff; // deeper element should be drawn later
- }
-
-};
-
-module.exports = zIndexSort;
-
-},{}],33:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../is' );
-var util = _dereq_( '../util' );
-var Collection = _dereq_( '../collection' );
-var Element = _dereq_( '../collection/element' );
-
-var corefn = {
- add: function( opts ){
-
- var elements;
- var cy = this;
-
- // add the elements
- if( is.elementOrCollection( opts ) ){
- var eles = opts;
-
- if( eles._private.cy === cy ){ // same instance => just restore
- elements = eles.restore();
-
- } else { // otherwise, copy from json
- var jsons = [];
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
- jsons.push( ele.json() );
- }
-
- elements = new Collection( cy, jsons );
- }
- }
-
- // specify an array of options
- else if( is.array( opts ) ){
- var jsons = opts;
-
- elements = new Collection( cy, jsons );
- }
-
- // specify via opts.nodes and opts.edges
- else if( is.plainObject( opts ) && (is.array( opts.nodes ) || is.array( opts.edges )) ){
- var elesByGroup = opts;
- var jsons = [];
-
- var grs = [ 'nodes', 'edges' ];
- for( var i = 0, il = grs.length; i < il; i++ ){
- var group = grs[ i ];
- var elesArray = elesByGroup[ group ];
-
- if( is.array( elesArray ) ){
-
- for( var j = 0, jl = elesArray.length; j < jl; j++ ){
- var json = util.extend( { group: group }, elesArray[ j ] );
-
- jsons.push( json );
- }
- }
- }
-
- elements = new Collection( cy, jsons );
- }
-
- // specify options for one element
- else {
- var json = opts;
- elements = (new Element( cy, json )).collection();
- }
-
- return elements;
- },
-
- remove: function( collection ){
- if( is.elementOrCollection( collection ) ){
- // already have right ref
- } else if( is.string( collection ) ){
- var selector = collection;
- collection = this.$( selector );
- }
-
- return collection.remove();
- },
-
- load: function( elements, onload, ondone ){
- var cy = this;
-
- cy.notifications( false );
-
- // remove old elements
- var oldEles = cy.mutableElements();
- if( oldEles.length > 0 ){
- oldEles.remove();
- }
-
- if( elements != null ){
- if( is.plainObject( elements ) || is.array( elements ) ){
- cy.add( elements );
- }
- }
-
- cy.one( 'layoutready', function( e ){
- cy.notifications( true );
- cy.trigger( e ); // we missed this event by turning notifications off, so pass it on
-
- cy.notify( {
- type: 'load',
- eles: cy.mutableElements()
- } );
-
- cy.one( 'load', onload );
- cy.trigger( 'load' );
- } ).one( 'layoutstop', function(){
- cy.one( 'done', ondone );
- cy.trigger( 'done' );
- } );
-
- var layoutOpts = util.extend( {}, cy._private.options.layout );
- layoutOpts.eles = cy.elements();
-
- cy.layout( layoutOpts );
-
- return this;
- }
-};
-
-module.exports = corefn;
-
-},{"../collection":26,"../collection/element":22,"../is":83,"../util":100}],34:[function(_dereq_,module,exports){
-'use strict';
-
-var define = _dereq_( '../define' );
-var util = _dereq_( '../util' );
-var is = _dereq_( '../is' );
-
-var corefn = ({
-
- // pull in animation functions
- animate: define.animate(),
- animation: define.animation(),
- animated: define.animated(),
- clearQueue: define.clearQueue(),
- delay: define.delay(),
- delayAnimation: define.delayAnimation(),
- stop: define.stop(),
-
- addToAnimationPool: function( eles ){
- var cy = this;
-
- if( !cy.styleEnabled() ){ return; } // save cycles when no style used
-
- cy._private.aniEles.merge( eles );
- },
-
- stopAnimationLoop: function(){
- this._private.animationsRunning = false;
- },
-
- startAnimationLoop: function(){
- var cy = this;
-
- cy._private.animationsRunning = true;
-
- if( !cy.styleEnabled() ){ return; } // save cycles when no style used
-
- // NB the animation loop will exec in headless environments if style enabled
- // and explicit cy.destroy() is necessary to stop the loop
-
- function globalAnimationStep(){
- if( !cy._private.animationsRunning ){ return; }
-
- util.requestAnimationFrame( function animationStep( now ){
- handleElements( now );
- globalAnimationStep();
- } );
- }
-
- var renderer = cy.renderer();
-
- if( renderer && renderer.beforeRender ){ // let the renderer schedule animations
- renderer.beforeRender( function rendererAnimationStep( willDraw, now ){
- handleElements( now );
- }, renderer.beforeRenderPriorities.animations );
- } else { // manage the animation loop ourselves
- globalAnimationStep(); // first call
- }
-
- function handleElements( now ){
- var eles = cy._private.aniEles;
- var doneEles = [];
-
- function handleElement( ele, isCore ){
- var _p = ele._private;
- var current = _p.animation.current;
- var queue = _p.animation.queue;
- var ranAnis = false;
-
- // if nothing currently animating, get something from the queue
- if( current.length === 0 ){
- var next = queue.shift();
-
- if( next ){
- current.push( next );
- }
- }
-
- var callbacks = function( callbacks ){
- for( var j = callbacks.length - 1; j >= 0; j-- ){
- var cb = callbacks[ j ];
-
- cb();
- }
-
- callbacks.splice( 0, callbacks.length );
- };
-
- // step and remove if done
- for( var i = current.length - 1; i >= 0; i-- ){
- var ani = current[ i ];
- var ani_p = ani._private;
-
- if( ani_p.stopped ){
- current.splice( i, 1 );
-
- ani_p.hooked = false;
- ani_p.playing = false;
- ani_p.started = false;
-
- callbacks( ani_p.frames );
-
- continue;
- }
-
- if( !ani_p.playing && !ani_p.applying ){ continue; }
-
- // an apply() while playing shouldn't do anything
- if( ani_p.playing && ani_p.applying ){
- ani_p.applying = false;
- }
-
- if( !ani_p.started ){
- startAnimation( ele, ani, now );
- }
-
- step( ele, ani, now, isCore );
-
- if( is.fn( ani_p.step ) ){
- ani_p.step.call( ele, now );
- }
-
- if( ani_p.applying ){
- ani_p.applying = false;
- }
-
- callbacks( ani_p.frames );
-
- if( ani.completed() ){
- current.splice( i, 1 );
-
- ani_p.hooked = false;
- ani_p.playing = false;
- ani_p.started = false;
-
- callbacks( ani_p.completes );
- }
-
- ranAnis = true;
- }
-
- if( !isCore && current.length === 0 && queue.length === 0 ){
- doneEles.push( ele );
- }
-
- return ranAnis;
- } // handleElement
-
- // handle all eles
- var ranEleAni = false;
- for( var e = 0; e < eles.length; e++ ){
- var ele = eles[ e ];
- var handledThisEle = handleElement( ele );
-
- ranEleAni = ranEleAni || handledThisEle;
- } // each element
-
- var ranCoreAni = handleElement( cy, true );
-
- // notify renderer
- if( ranEleAni || ranCoreAni ){
- if( eles.length > 0 ){
- var updatedEles = eles.updateCompoundBounds().spawnSelf().merge( eles );
-
- cy.notify({
- type: 'draw',
- eles: updatedEles
- });
- } else {
- cy.notify({
- type: 'draw'
- });
- }
- }
-
- // remove elements from list of currently animating if its queues are empty
- eles.unmerge( doneEles );
-
- cy.trigger('step');
-
- } // handleElements
-
- function startAnimation( self, ani, now ){
- var isCore = is.core( self );
- var isEles = !isCore;
- var ele = self;
- var style = cy._private.style;
- var ani_p = ani._private;
-
- if( isEles ){
- var pos = ele._private.position;
-
- ani_p.startPosition = ani_p.startPosition || {
- x: pos.x,
- y: pos.y
- };
-
- ani_p.startStyle = ani_p.startStyle || style.getAnimationStartStyle( ele, ani_p.style );
- }
-
- if( isCore ){
- var pan = cy._private.pan;
-
- ani_p.startPan = ani_p.startPan || {
- x: pan.x,
- y: pan.y
- };
-
- ani_p.startZoom = ani_p.startZoom != null ? ani_p.startZoom : cy._private.zoom;
- }
-
- ani_p.started = true;
- ani_p.startTime = now - ani_p.progress * ani_p.duration;
- }
-
- function step( self, ani, now, isCore ){
- var style = cy._private.style;
- var isEles = !isCore;
- var _p = self._private;
- var ani_p = ani._private;
- var pEasing = ani_p.easing;
- var startTime = ani_p.startTime;
-
- if( !ani_p.easingImpl ){
-
- if( pEasing == null ){ // use default
- ani_p.easingImpl = easings[ 'linear' ];
-
- } else { // then define w/ name
- var easingVals;
-
- if( is.string( pEasing ) ){
- var easingProp = style.parse( 'transition-timing-function', pEasing );
-
- easingVals = easingProp.value;
-
- } else { // then assume preparsed array
- easingVals = pEasing;
- }
-
- var name, args;
-
- if( is.string( easingVals ) ){
- name = easingVals;
- args = [];
- } else {
- name = easingVals[1];
- args = easingVals.slice( 2 ).map( function( n ){ return +n; } );
- }
-
- if( args.length > 0 ){ // create with args
- if( name === 'spring' ){
- args.push( ani_p.duration ); // need duration to generate spring
- }
-
- ani_p.easingImpl = easings[ name ].apply( null, args );
- } else { // static impl by name
- ani_p.easingImpl = easings[ name ];
- }
- }
-
- }
-
- var easing = ani_p.easingImpl;
- var percent;
-
- if( ani_p.duration === 0 ){
- percent = 1;
- } else {
- percent = (now - startTime) / ani_p.duration;
- }
-
- if( ani_p.applying ){
- percent = ani_p.progress;
- }
-
- if( percent < 0 ){
- percent = 0;
- } else if( percent > 1 ){
- percent = 1;
- }
-
- if( ani_p.delay == null ){ // then update
-
- var startPos = ani_p.startPosition;
- var endPos = ani_p.position;
- var pos = _p.position;
- if( endPos && isEles ){
- if( valid( startPos.x, endPos.x ) ){
- pos.x = ease( startPos.x, endPos.x, percent, easing );
- }
-
- if( valid( startPos.y, endPos.y ) ){
- pos.y = ease( startPos.y, endPos.y, percent, easing );
- }
-
- self.trigger('position');
- }
-
- var startPan = ani_p.startPan;
- var endPan = ani_p.pan;
- var pan = _p.pan;
- var animatingPan = endPan != null && isCore;
- if( animatingPan ){
- if( valid( startPan.x, endPan.x ) ){
- pan.x = ease( startPan.x, endPan.x, percent, easing );
- }
-
- if( valid( startPan.y, endPan.y ) ){
- pan.y = ease( startPan.y, endPan.y, percent, easing );
- }
-
- self.trigger( 'pan' );
- }
-
- var startZoom = ani_p.startZoom;
- var endZoom = ani_p.zoom;
- var animatingZoom = endZoom != null && isCore;
- if( animatingZoom ){
- if( valid( startZoom, endZoom ) ){
- _p.zoom = ease( startZoom, endZoom, percent, easing );
- }
-
- self.trigger( 'zoom' );
- }
-
- if( animatingPan || animatingZoom ){
- self.trigger( 'viewport' );
- }
-
- var props = ani_p.style;
- if( props && props.length > 0 && isEles ){
- for( var i = 0; i < props.length; i++ ){
- var prop = props[ i ];
- var name = prop.name;
- var end = prop;
-
- var start = ani_p.startStyle[ name ];
- var easedVal = ease( start, end, percent, easing );
-
- style.overrideBypass( self, name, easedVal );
- } // for props
-
- self.trigger('style');
-
- } // if
-
- }
-
- ani_p.progress = percent;
-
- return percent;
- }
-
- function valid( start, end ){
- if( start == null || end == null ){
- return false;
- }
-
- if( is.number( start ) && is.number( end ) ){
- return true;
- } else if( (start) && (end) ){
- return true;
- }
-
- return false;
- }
-
- // assumes p0 = 0, p3 = 1
- function evalCubicBezier( p1, p2, t ){
- var one_t = 1 - t;
- var tsq = t * t;
-
- return ( 3 * one_t * one_t * t * p1 ) + ( 3 * one_t * tsq * p2 ) + tsq * t;
- }
-
- function cubicBezier( p1, p2 ){
- return function( start, end, percent ){
- return start + (end - start) * evalCubicBezier( p1, p2, percent );
- };
- }
-
- /*! Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */
- /* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass
- then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */
- var generateSpringRK4 = (function(){
- function springAccelerationForState( state ){
- return (-state.tension * state.x) - (state.friction * state.v);
- }
-
- function springEvaluateStateWithDerivative( initialState, dt, derivative ){
- var state = {
- x: initialState.x + derivative.dx * dt,
- v: initialState.v + derivative.dv * dt,
- tension: initialState.tension,
- friction: initialState.friction
- };
-
- return { dx: state.v, dv: springAccelerationForState( state ) };
- }
-
- function springIntegrateState( state, dt ){
- var a = {
- dx: state.v,
- dv: springAccelerationForState( state )
- },
- b = springEvaluateStateWithDerivative( state, dt * 0.5, a ),
- c = springEvaluateStateWithDerivative( state, dt * 0.5, b ),
- d = springEvaluateStateWithDerivative( state, dt, c ),
- dxdt = 1.0 / 6.0 * (a.dx + 2.0 * (b.dx + c.dx) + d.dx),
- dvdt = 1.0 / 6.0 * (a.dv + 2.0 * (b.dv + c.dv) + d.dv);
-
- state.x = state.x + dxdt * dt;
- state.v = state.v + dvdt * dt;
-
- return state;
- }
-
- return function springRK4Factory( tension, friction, duration ){
-
- var initState = {
- x: -1,
- v: 0,
- tension: null,
- friction: null
- },
- path = [0],
- time_lapsed = 0,
- tolerance = 1 / 10000,
- DT = 16 / 1000,
- have_duration, dt, last_state;
-
- tension = parseFloat( tension ) || 500;
- friction = parseFloat( friction ) || 20;
- duration = duration || null;
-
- initState.tension = tension;
- initState.friction = friction;
-
- have_duration = duration !== null;
-
- /* Calculate the actual time it takes for this animation to complete with the provided conditions. */
- if( have_duration ){
- /* Run the simulation without a duration. */
- time_lapsed = springRK4Factory( tension, friction );
- /* Compute the adjusted time delta. */
- dt = time_lapsed / duration * DT;
- } else {
- dt = DT;
- }
-
- while( true ){
- /* Next/step function .*/
- last_state = springIntegrateState( last_state || initState, dt );
- /* Store the position. */
- path.push( 1 + last_state.x );
- time_lapsed += 16;
- /* If the change threshold is reached, break. */
- if( !(Math.abs( last_state.x ) > tolerance && Math.abs( last_state.v ) > tolerance) ){
- break;
- }
- }
-
- /* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the
- computed path and returns a snapshot of the position according to a given percentComplete. */
- return !have_duration ? time_lapsed : function( percentComplete ){ return path[ (percentComplete * (path.length - 1)) | 0 ]; };
- };
- }());
-
- var easings = {
- 'linear': function( start, end, percent ){
- return start + (end - start) * percent;
- },
-
- // default easings
- 'ease': cubicBezier( 0.25, 0.1, 0.25, 1 ),
- 'ease-in': cubicBezier( 0.42, 0, 1, 1 ),
- 'ease-out': cubicBezier( 0, 0, 0.58, 1 ),
- 'ease-in-out': cubicBezier( 0.42, 0, 0.58, 1 ),
-
- // sine
- 'ease-in-sine': cubicBezier( 0.47, 0, 0.745, 0.715 ),
- 'ease-out-sine': cubicBezier( 0.39, 0.575, 0.565, 1 ),
- 'ease-in-out-sine': cubicBezier( 0.445, 0.05, 0.55, 0.95 ),
-
- // quad
- 'ease-in-quad': cubicBezier( 0.55, 0.085, 0.68, 0.53 ),
- 'ease-out-quad': cubicBezier( 0.25, 0.46, 0.45, 0.94 ),
- 'ease-in-out-quad': cubicBezier( 0.455, 0.03, 0.515, 0.955 ),
-
- // cubic
- 'ease-in-cubic': cubicBezier( 0.55, 0.055, 0.675, 0.19 ),
- 'ease-out-cubic': cubicBezier( 0.215, 0.61, 0.355, 1 ),
- 'ease-in-out-cubic': cubicBezier( 0.645, 0.045, 0.355, 1 ),
-
- // quart
- 'ease-in-quart': cubicBezier( 0.895, 0.03, 0.685, 0.22 ),
- 'ease-out-quart': cubicBezier( 0.165, 0.84, 0.44, 1 ),
- 'ease-in-out-quart': cubicBezier( 0.77, 0, 0.175, 1 ),
-
- // quint
- 'ease-in-quint': cubicBezier( 0.755, 0.05, 0.855, 0.06 ),
- 'ease-out-quint': cubicBezier( 0.23, 1, 0.32, 1 ),
- 'ease-in-out-quint': cubicBezier( 0.86, 0, 0.07, 1 ),
-
- // expo
- 'ease-in-expo': cubicBezier( 0.95, 0.05, 0.795, 0.035 ),
- 'ease-out-expo': cubicBezier( 0.19, 1, 0.22, 1 ),
- 'ease-in-out-expo': cubicBezier( 1, 0, 0, 1 ),
-
- // circ
- 'ease-in-circ': cubicBezier( 0.6, 0.04, 0.98, 0.335 ),
- 'ease-out-circ': cubicBezier( 0.075, 0.82, 0.165, 1 ),
- 'ease-in-out-circ': cubicBezier( 0.785, 0.135, 0.15, 0.86 ),
-
-
- // user param easings...
-
- 'spring': function( tension, friction, duration ){
- if( duration === 0 ){ // can't get a spring w/ duration 0
- return easings.linear; // duration 0 => jump to end so impl doesn't matter
- }
-
- var spring = generateSpringRK4( tension, friction, duration );
-
- return function( start, end, percent ){
- return start + (end - start) * spring( percent );
- };
- },
-
- 'cubic-bezier': function( x1, y1, x2, y2 ){
- return cubicBezier( x1, y1, x2, y2 );
- }
- };
-
- function ease( startProp, endProp, percent, easingFn ){
- if( percent < 0 ){
- percent = 0;
- } else if( percent > 1 ){
- percent = 1;
- }
-
- var start, end;
-
- if( startProp.pfValue != null || startProp.value != null ){
- start = startProp.pfValue != null ? startProp.pfValue : startProp.value;
- } else {
- start = startProp;
- }
-
- if( endProp.pfValue != null || endProp.value != null ){
- end = endProp.pfValue != null ? endProp.pfValue : endProp.value;
- } else {
- end = endProp;
- }
-
- if( is.number( start ) && is.number( end ) ){
- return easingFn( start, end, percent );
-
- } else if( is.array( start ) && is.array( end ) ){
- var easedArr = [];
-
- for( var i = 0; i < end.length; i++ ){
- var si = start[ i ];
- var ei = end[ i ];
-
- if( si != null && ei != null ){
- var val = easingFn( si, ei, percent );
-
- if( startProp.roundValue ){ val = Math.round( val ); }
-
- easedArr.push( val );
- } else {
- easedArr.push( ei );
- }
- }
-
- return easedArr;
- }
-
- return undefined;
- }
-
- }
-
-});
-
-module.exports = corefn;
-
-},{"../define":44,"../is":83,"../util":100}],35:[function(_dereq_,module,exports){
-'use strict';
-
-var define = _dereq_( '../define' );
-
-var corefn = ({
- on: define.on(), // .on( events [, selector] [, data], handler)
- one: define.on( { unbindSelfOnTrigger: true } ),
- once: define.on( { unbindAllBindersOnTrigger: true } ),
- off: define.off(), // .off( events [, selector] [, handler] )
- trigger: define.trigger() // .trigger( events [, extraParams] )
-});
-
-define.eventAliasesOn( corefn );
-
-module.exports = corefn;
-
-},{"../define":44}],36:[function(_dereq_,module,exports){
-'use strict';
-
-var corefn = ({
-
- png: function( options ){
- var renderer = this._private.renderer;
- options = options || {};
-
- return renderer.png( options );
- },
-
- jpg: function( options ){
- var renderer = this._private.renderer;
- options = options || {};
-
- options.bg = options.bg || '#fff';
-
- return renderer.jpg( options );
- }
-
-});
-
-corefn.jpeg = corefn.jpg;
-
-module.exports = corefn;
-
-},{}],37:[function(_dereq_,module,exports){
-'use strict';
-
-var window = _dereq_( '../window' );
-var util = _dereq_( '../util' );
-var Collection = _dereq_( '../collection' );
-var is = _dereq_( '../is' );
-var Promise = _dereq_( '../promise' );
-var define = _dereq_( '../define' );
-
-var Core = function( opts ){
- var cy = this;
-
- opts = util.extend( {}, opts );
-
- var container = opts.container;
-
- // allow for passing a wrapped jquery object
- // e.g. cytoscape({ container: $('#cy') })
- if( container && !is.htmlElement( container ) && is.htmlElement( container[0] ) ){
- container = container[0];
- }
-
- var reg = container ? container._cyreg : null; // e.g. already registered some info (e.g. readies) via jquery
- reg = reg || {};
-
- if( reg && reg.cy ){
- reg.cy.destroy();
-
- reg = {}; // old instance => replace reg completely
- }
-
- var readies = reg.readies = reg.readies || [];
-
- if( container ){ container._cyreg = reg; } // make sure container assoc'd reg points to this cy
- reg.cy = cy;
-
- var head = window !== undefined && container !== undefined && !opts.headless;
- var options = opts;
- options.layout = util.extend( { name: head ? 'grid' : 'null' }, options.layout );
- options.renderer = util.extend( { name: head ? 'canvas' : 'null' }, options.renderer );
-
- var defVal = function( def, val, altVal ){
- if( val !== undefined ){
- return val;
- } else if( altVal !== undefined ){
- return altVal;
- } else {
- return def;
- }
- };
-
- var _p = this._private = {
- container: container, // html dom ele container
- ready: false, // whether ready has been triggered
- initrender: false, // has initrender has been triggered
- options: options, // cached options
- elements: new Collection( this ), // elements in the graph
- listeners: [], // list of listeners
- aniEles: new Collection( this ), // elements being animated
- scratch: {}, // scratch object for core
- layout: null,
- renderer: null,
- notificationsEnabled: true, // whether notifications are sent to the renderer
- minZoom: 1e-50,
- maxZoom: 1e50,
- zoomingEnabled: defVal( true, options.zoomingEnabled ),
- userZoomingEnabled: defVal( true, options.userZoomingEnabled ),
- panningEnabled: defVal( true, options.panningEnabled ),
- userPanningEnabled: defVal( true, options.userPanningEnabled ),
- boxSelectionEnabled: defVal( true, options.boxSelectionEnabled ),
- autolock: defVal( false, options.autolock, options.autolockNodes ),
- autoungrabify: defVal( false, options.autoungrabify, options.autoungrabifyNodes ),
- autounselectify: defVal( false, options.autounselectify ),
- styleEnabled: options.styleEnabled === undefined ? head : options.styleEnabled,
- zoom: is.number( options.zoom ) ? options.zoom : 1,
- pan: {
- x: is.plainObject( options.pan ) && is.number( options.pan.x ) ? options.pan.x : 0,
- y: is.plainObject( options.pan ) && is.number( options.pan.y ) ? options.pan.y : 0
- },
- animation: { // object for currently-running animations
- current: [],
- queue: []
- },
- hasCompoundNodes: false
- };
-
- // set selection type
- var selType = options.selectionType;
- if( selType === undefined || (selType !== 'additive' && selType !== 'single') ){
- // then set default
-
- _p.selectionType = 'single';
- } else {
- _p.selectionType = selType;
- }
-
- // init zoom bounds
- if( is.number( options.minZoom ) && is.number( options.maxZoom ) && options.minZoom < options.maxZoom ){
- _p.minZoom = options.minZoom;
- _p.maxZoom = options.maxZoom;
- } else if( is.number( options.minZoom ) && options.maxZoom === undefined ){
- _p.minZoom = options.minZoom;
- } else if( is.number( options.maxZoom ) && options.minZoom === undefined ){
- _p.maxZoom = options.maxZoom;
- }
-
- var loadExtData = function( extData, next ){
- var anyIsPromise = extData.some( is.promise );
-
- if( anyIsPromise ){
- return Promise.all( extData ).then( next ); // load all data asynchronously, then exec rest of init
- } else {
- next( extData ); // exec synchronously for convenience
- }
- };
-
- // create the renderer
- cy.initRenderer( util.extend( {
- hideEdgesOnViewport: options.hideEdgesOnViewport,
- textureOnViewport: options.textureOnViewport,
- wheelSensitivity: is.number( options.wheelSensitivity ) && options.wheelSensitivity > 0 ? options.wheelSensitivity : 1,
- motionBlur: options.motionBlur === undefined ? false : options.motionBlur, // off by default
- motionBlurOpacity: options.motionBlurOpacity === undefined ? 0.05 : options.motionBlurOpacity,
- pixelRatio: is.number( options.pixelRatio ) && options.pixelRatio > 0 ? options.pixelRatio : undefined,
- desktopTapThreshold: options.desktopTapThreshold === undefined ? 4 : options.desktopTapThreshold,
- touchTapThreshold: options.touchTapThreshold === undefined ? 8 : options.touchTapThreshold
- }, options.renderer ) );
-
- loadExtData([ options.style, options.elements ], function( thens ){
- var initStyle = thens[0];
- var initEles = thens[1];
-
- // init style
- if( _p.styleEnabled ){
- cy.setStyle( initStyle );
- }
-
- // trigger the passed function for the `initrender` event
- if( options.initrender ){
- cy.on( 'initrender', options.initrender );
- cy.on( 'initrender', function(){
- _p.initrender = true;
- } );
- }
-
- // initial load
- cy.load( initEles, function(){ // onready
- cy.startAnimationLoop();
- _p.ready = true;
-
- // if a ready callback is specified as an option, the bind it
- if( is.fn( options.ready ) ){
- cy.on( 'ready', options.ready );
- }
-
- // bind all the ready handlers registered before creating this instance
- for( var i = 0; i < readies.length; i++ ){
- var fn = readies[ i ];
- cy.on( 'ready', fn );
- }
- if( reg ){ reg.readies = []; } // clear b/c we've bound them all and don't want to keep it around in case a new core uses the same div etc
-
- cy.trigger( 'ready' );
- }, options.done );
-
- } );
-};
-
-var corefn = Core.prototype; // short alias
-
-util.extend( corefn, {
- instanceString: function(){
- return 'core';
- },
-
- isReady: function(){
- return this._private.ready;
- },
-
- ready: function( fn ){
- if( this.isReady() ){
- this.trigger( 'ready', [], fn ); // just calls fn as though triggered via ready event
- } else {
- this.on( 'ready', fn );
- }
-
- return this;
- },
-
- initrender: function(){
- return this._private.initrender;
- },
-
- destroy: function(){
- var cy = this;
-
- cy.stopAnimationLoop();
-
- cy.destroyRenderer();
-
- return cy;
- },
-
- hasElementWithId: function( id ){
- return this._private.elements.hasElementWithId( id );
- },
-
- getElementById: function( id ){
- return this._private.elements.getElementById( id );
- },
-
- selectionType: function(){
- return this._private.selectionType;
- },
-
- hasCompoundNodes: function(){
- return this._private.hasCompoundNodes;
- },
-
- headless: function(){
- return this._private.options.renderer.name === 'null';
- },
-
- styleEnabled: function(){
- return this._private.styleEnabled;
- },
-
- addToPool: function( eles ){
- this._private.elements.merge( eles );
-
- return this; // chaining
- },
-
- removeFromPool: function( eles ){
- this._private.elements.unmerge( eles );
-
- return this;
- },
-
- container: function(){
- return this._private.container;
- },
-
- options: function(){
- return util.copy( this._private.options );
- },
-
- json: function( obj ){
- var cy = this;
- var _p = cy._private;
- var eles = cy.mutableElements();
-
- if( is.plainObject( obj ) ){ // set
-
- cy.startBatch();
-
- if( obj.elements ){
- var idInJson = {};
-
- var updateEles = function( jsons, gr ){
- for( var i = 0; i < jsons.length; i++ ){
- var json = jsons[ i ];
- var id = json.data.id;
- var ele = cy.getElementById( id );
-
- idInJson[ id ] = true;
-
- if( ele.length !== 0 ){ // existing element should be updated
- ele.json( json );
- } else { // otherwise should be added
- if( gr ){
- cy.add( util.extend( { group: gr }, json ) );
- } else {
- cy.add( json );
- }
- }
- }
- };
-
- if( is.array( obj.elements ) ){ // elements: []
- updateEles( obj.elements );
-
- } else { // elements: { nodes: [], edges: [] }
- var grs = [ 'nodes', 'edges' ];
- for( var i = 0; i < grs.length; i++ ){
- var gr = grs[ i ];
- var elements = obj.elements[ gr ];
-
- if( is.array( elements ) ){
- updateEles( elements, gr );
- }
- }
- }
-
- // elements not specified in json should be removed
- eles.stdFilter( function( ele ){
- return !idInJson[ ele.id() ];
- } ).remove();
- }
-
- if( obj.style ){
- cy.style( obj.style );
- }
-
- if( obj.zoom != null && obj.zoom !== _p.zoom ){
- cy.zoom( obj.zoom );
- }
-
- if( obj.pan ){
- if( obj.pan.x !== _p.pan.x || obj.pan.y !== _p.pan.y ){
- cy.pan( obj.pan );
- }
- }
-
- var fields = [
- 'minZoom', 'maxZoom', 'zoomingEnabled', 'userZoomingEnabled',
- 'panningEnabled', 'userPanningEnabled',
- 'boxSelectionEnabled',
- 'autolock', 'autoungrabify', 'autounselectify'
- ];
-
- for( var i = 0; i < fields.length; i++ ){
- var f = fields[ i ];
-
- if( obj[ f ] != null ){
- cy[ f ]( obj[ f ] );
- }
- }
-
- cy.endBatch();
-
- return this; // chaining
- } else if( obj === undefined ){ // get
- var json = {};
-
- json.elements = {};
- eles.forEach( function( ele ){
- var group = ele.group();
-
- if( !json.elements[ group ] ){
- json.elements[ group ] = [];
- }
-
- json.elements[ group ].push( ele.json() );
- } );
-
- if( this._private.styleEnabled ){
- json.style = cy.style().json();
- }
-
- json.zoomingEnabled = cy._private.zoomingEnabled;
- json.userZoomingEnabled = cy._private.userZoomingEnabled;
- json.zoom = cy._private.zoom;
- json.minZoom = cy._private.minZoom;
- json.maxZoom = cy._private.maxZoom;
- json.panningEnabled = cy._private.panningEnabled;
- json.userPanningEnabled = cy._private.userPanningEnabled;
- json.pan = util.copy( cy._private.pan );
- json.boxSelectionEnabled = cy._private.boxSelectionEnabled;
- json.renderer = util.copy( cy._private.options.renderer );
- json.hideEdgesOnViewport = cy._private.options.hideEdgesOnViewport;
- json.textureOnViewport = cy._private.options.textureOnViewport;
- json.wheelSensitivity = cy._private.options.wheelSensitivity;
- json.motionBlur = cy._private.options.motionBlur;
-
- return json;
- }
- },
-
- scratch: define.data( {
- field: 'scratch',
- bindingEvent: 'scratch',
- allowBinding: true,
- allowSetting: true,
- settingEvent: 'scratch',
- settingTriggersEvent: true,
- triggerFnName: 'trigger',
- allowGetting: true
- } ),
-
- removeScratch: define.removeData( {
- field: 'scratch',
- event: 'scratch',
- triggerFnName: 'trigger',
- triggerEvent: true
- } )
-
-} );
-
-[
- _dereq_( './add-remove' ),
- _dereq_( './animation' ),
- _dereq_( './events' ),
- _dereq_( './export' ),
- _dereq_( './layout' ),
- _dereq_( './notification' ),
- _dereq_( './renderer' ),
- _dereq_( './search' ),
- _dereq_( './style' ),
- _dereq_( './viewport' )
-].forEach( function( props ){
- util.extend( corefn, props );
-} );
-
-module.exports = Core;
-
-},{"../collection":26,"../define":44,"../is":83,"../promise":86,"../util":100,"../window":107,"./add-remove":33,"./animation":34,"./events":35,"./export":36,"./layout":38,"./notification":39,"./renderer":40,"./search":41,"./style":42,"./viewport":43}],38:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../util' );
-var is = _dereq_( '../is' );
-
-var corefn = ({
-
- layout: function( params ){
- var layout = this._private.prevLayout = ( params == null ? this._private.prevLayout : this.makeLayout( params ) );
-
- layout.run();
-
- return this; // chaining
- },
-
- makeLayout: function( options ){
- var cy = this;
-
- if( options == null ){
- util.error( 'Layout options must be specified to make a layout' );
- return;
- }
-
- if( options.name == null ){
- util.error( 'A `name` must be specified to make a layout' );
- return;
- }
-
- var name = options.name;
- var Layout = cy.extension( 'layout', name );
-
- if( Layout == null ){
- util.error( 'Can not apply layout: No such layout `' + name + '` found; did you include its JS file?' );
- return;
- }
-
- var eles;
- if( is.string( options.eles ) ){
- eles = cy.$( options.eles );
- } else {
- eles = options.eles != null ? options.eles : cy.$();
- }
-
- var layout = new Layout( util.extend( {}, options, {
- cy: cy,
- eles: eles
- } ) );
-
- return layout;
- }
-
-});
-
-corefn.createLayout = corefn.makeLayout;
-
-module.exports = corefn;
-
-},{"../is":83,"../util":100}],39:[function(_dereq_,module,exports){
-'use strict';
-
-var corefn = ({
- notify: function( params ){
- var _p = this._private;
-
- if( _p.batchingNotify ){
- var bEles = _p.batchNotifyEles;
- var bTypes = _p.batchNotifyTypes;
-
- if( params.eles ){
- bEles.merge( params.eles );
- }
-
- if( !bTypes.ids[ params.type ] ){
- bTypes.push( params.type );
- bTypes.ids[ params.type ] = true;
- }
-
- return; // notifications are disabled during batching
- }
-
- if( !_p.notificationsEnabled ){ return; } // exit on disabled
-
- var renderer = this.renderer();
-
- renderer.notify( params );
- },
-
- notifications: function( bool ){
- var p = this._private;
-
- if( bool === undefined ){
- return p.notificationsEnabled;
- } else {
- p.notificationsEnabled = bool ? true : false;
- }
- },
-
- noNotifications: function( callback ){
- this.notifications( false );
- callback();
- this.notifications( true );
- },
-
- startBatch: function(){
- var _p = this._private;
-
- if( _p.batchCount == null ){
- _p.batchCount = 0;
- }
-
- if( _p.batchCount === 0 ){
- _p.batchingStyle = _p.batchingNotify = true;
- _p.batchStyleEles = this.collection();
- _p.batchNotifyEles = this.collection();
- _p.batchNotifyTypes = [];
- _p.batchNotifyTypes.ids = {};
- }
-
- _p.batchCount++;
-
- return this;
- },
-
- endBatch: function(){
- var _p = this._private;
-
- _p.batchCount--;
-
- if( _p.batchCount === 0 ){
- // update style for dirty eles
- _p.batchingStyle = false;
- _p.batchStyleEles.updateStyle();
-
- // notify the renderer of queued eles and event types
- _p.batchingNotify = false;
- this.notify( {
- type: _p.batchNotifyTypes,
- eles: _p.batchNotifyEles
- } );
- }
-
- return this;
- },
-
- batch: function( callback ){
- this.startBatch();
- callback();
- this.endBatch();
-
- return this;
- },
-
- // for backwards compatibility
- batchData: function( map ){
- var cy = this;
-
- return this.batch( function(){
- var ids = Object.keys( map );
-
- for( var i = 0; i < ids.length; i++ ){
- var id = ids[i];
- var data = map[ id ];
- var ele = cy.getElementById( id );
-
- ele.data( data );
- }
- } );
- }
-});
-
-module.exports = corefn;
-
-},{}],40:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../util' );
-
-var corefn = ({
-
- renderTo: function( context, zoom, pan, pxRatio ){
- var r = this._private.renderer;
-
- r.renderTo( context, zoom, pan, pxRatio );
- return this;
- },
-
- renderer: function(){
- return this._private.renderer;
- },
-
- forceRender: function(){
- this.notify( {
- type: 'draw'
- } );
-
- return this;
- },
-
- resize: function(){
- this.invalidateSize();
-
- this.notify( {
- type: 'resize'
- } );
-
- this.trigger( 'resize' );
-
- return this;
- },
-
- initRenderer: function( options ){
- var cy = this;
-
- var RendererProto = cy.extension( 'renderer', options.name );
- if( RendererProto == null ){
- util.error( 'Can not initialise: No such renderer `%s` found; did you include its JS file?', options.name );
- return;
- }
-
- var rOpts = util.extend( {}, options, {
- cy: cy
- } );
-
- cy._private.renderer = new RendererProto( rOpts );
- },
-
- destroyRenderer: function(){
- var cy = this;
-
- cy.notify( { type: 'destroy' } ); // destroy the renderer
-
- var domEle = cy.container();
- if( domEle ){
- domEle._cyreg = null;
-
- while( domEle.childNodes.length > 0 ){
- domEle.removeChild( domEle.childNodes[0] );
- }
- }
-
- cy._private.renderer = null; // to be extra safe, remove the ref
- },
-
- onRender: function( fn ){
- return this.on('render', fn);
- },
-
- offRender: function( fn ){
- return this.off('render', fn);
- }
-
-});
-
-corefn.invalidateDimensions = corefn.resize;
-
-module.exports = corefn;
-
-},{"../util":100}],41:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../is' );
-var Collection = _dereq_( '../collection' );
-
-var corefn = ({
-
- // get a collection
- // - empty collection on no args
- // - collection of elements in the graph on selector arg
- // - guarantee a returned collection when elements or collection specified
- collection: function( eles, opts ){
-
- if( is.string( eles ) ){
- return this.$( eles );
-
- } else if( is.elementOrCollection( eles ) ){
- return eles.collection();
-
- } else if( is.array( eles ) ){
- return new Collection( this, eles, opts );
- }
-
- return new Collection( this );
- },
-
- nodes: function( selector ){
- var nodes = this.$( function(){
- return this.isNode();
- } );
-
- if( selector ){
- return nodes.filter( selector );
- }
-
- return nodes;
- },
-
- edges: function( selector ){
- var edges = this.$( function(){
- return this.isEdge();
- } );
-
- if( selector ){
- return edges.filter( selector );
- }
-
- return edges;
- },
-
- // search the graph like jQuery
- $: function( selector ){
- var eles = this._private.elements;
-
- if( selector ){
- return eles.filter( selector );
- } else {
- return eles.spawnSelf();
- }
- },
-
- mutableElements: function(){
- return this._private.elements;
- }
-
-});
-
-// aliases
-corefn.elements = corefn.filter = corefn.$;
-
-module.exports = corefn;
-
-},{"../collection":26,"../is":83}],42:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../is' );
-var Style = _dereq_( '../style' );
-
-var corefn = ({
-
- style: function( newStyle ){
- if( newStyle ){
- var s = this.setStyle( newStyle );
-
- s.update();
- }
-
- return this._private.style;
- },
-
- setStyle: function( style ){
- var _p = this._private;
-
- if( is.stylesheet( style ) ){
- _p.style = style.generateStyle( this );
-
- } else if( is.array( style ) ){
- _p.style = Style.fromJson( this, style );
-
- } else if( is.string( style ) ){
- _p.style = Style.fromString( this, style );
-
- } else {
- _p.style = Style( this );
- }
-
- return _p.style;
- }
-});
-
-module.exports = corefn;
-
-},{"../is":83,"../style":92}],43:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../is' );
-
-var corefn = ({
-
- autolock: function( bool ){
- if( bool !== undefined ){
- this._private.autolock = bool ? true : false;
- } else {
- return this._private.autolock;
- }
-
- return this; // chaining
- },
-
- autoungrabify: function( bool ){
- if( bool !== undefined ){
- this._private.autoungrabify = bool ? true : false;
- } else {
- return this._private.autoungrabify;
- }
-
- return this; // chaining
- },
-
- autounselectify: function( bool ){
- if( bool !== undefined ){
- this._private.autounselectify = bool ? true : false;
- } else {
- return this._private.autounselectify;
- }
-
- return this; // chaining
- },
-
- panningEnabled: function( bool ){
- if( bool !== undefined ){
- this._private.panningEnabled = bool ? true : false;
- } else {
- return this._private.panningEnabled;
- }
-
- return this; // chaining
- },
-
- userPanningEnabled: function( bool ){
- if( bool !== undefined ){
- this._private.userPanningEnabled = bool ? true : false;
- } else {
- return this._private.userPanningEnabled;
- }
-
- return this; // chaining
- },
-
- zoomingEnabled: function( bool ){
- if( bool !== undefined ){
- this._private.zoomingEnabled = bool ? true : false;
- } else {
- return this._private.zoomingEnabled;
- }
-
- return this; // chaining
- },
-
- userZoomingEnabled: function( bool ){
- if( bool !== undefined ){
- this._private.userZoomingEnabled = bool ? true : false;
- } else {
- return this._private.userZoomingEnabled;
- }
-
- return this; // chaining
- },
-
- boxSelectionEnabled: function( bool ){
- if( bool !== undefined ){
- this._private.boxSelectionEnabled = bool ? true : false;
- } else {
- return this._private.boxSelectionEnabled;
- }
-
- return this; // chaining
- },
-
- pan: function(){
- var args = arguments;
- var pan = this._private.pan;
- var dim, val, dims, x, y;
-
- switch( args.length ){
- case 0: // .pan()
- return pan;
-
- case 1:
-
- if( is.string( args[0] ) ){ // .pan('x')
- dim = args[0];
- return pan[ dim ];
-
- } else if( is.plainObject( args[0] ) ){ // .pan({ x: 0, y: 100 })
- if( !this._private.panningEnabled ){
- return this;
- }
-
- dims = args[0];
- x = dims.x;
- y = dims.y;
-
- if( is.number( x ) ){
- pan.x = x;
- }
-
- if( is.number( y ) ){
- pan.y = y;
- }
-
- this.trigger( 'pan viewport' );
- }
- break;
-
- case 2: // .pan('x', 100)
- if( !this._private.panningEnabled ){
- return this;
- }
-
- dim = args[0];
- val = args[1];
-
- if( (dim === 'x' || dim === 'y') && is.number( val ) ){
- pan[ dim ] = val;
- }
-
- this.trigger( 'pan viewport' );
- break;
-
- default:
- break; // invalid
- }
-
- this.notify( { // notify the renderer that the viewport changed
- type: 'viewport'
- } );
-
- return this; // chaining
- },
-
- panBy: function( params ){
- var args = arguments;
- var pan = this._private.pan;
- var dim, val, dims, x, y;
-
- if( !this._private.panningEnabled ){
- return this;
- }
-
- switch( args.length ){
- case 1:
-
- if( is.plainObject( args[0] ) ){ // .panBy({ x: 0, y: 100 })
- dims = args[0];
- x = dims.x;
- y = dims.y;
-
- if( is.number( x ) ){
- pan.x += x;
- }
-
- if( is.number( y ) ){
- pan.y += y;
- }
-
- this.trigger( 'pan viewport' );
- }
- break;
-
- case 2: // .panBy('x', 100)
- dim = args[0];
- val = args[1];
-
- if( (dim === 'x' || dim === 'y') && is.number( val ) ){
- pan[ dim ] += val;
- }
-
- this.trigger( 'pan viewport' );
- break;
-
- default:
- break; // invalid
- }
-
- this.notify( { // notify the renderer that the viewport changed
- type: 'viewport'
- } );
-
- return this; // chaining
- },
-
- fit: function( elements, padding ){
- var viewportState = this.getFitViewport( elements, padding );
-
- if( viewportState ){
- var _p = this._private;
- _p.zoom = viewportState.zoom;
- _p.pan = viewportState.pan;
-
- this.trigger( 'pan zoom viewport' );
-
- this.notify( { // notify the renderer that the viewport changed
- type: 'viewport'
- } );
- }
-
- return this; // chaining
- },
-
- getFitViewport: function( elements, padding ){
- if( is.number( elements ) && padding === undefined ){ // elements is optional
- padding = elements;
- elements = undefined;
- }
-
- if( !this._private.panningEnabled || !this._private.zoomingEnabled ){
- return;
- }
-
- var bb;
-
- if( is.string( elements ) ){
- var sel = elements;
- elements = this.$( sel );
-
- } else if( is.boundingBox( elements ) ){ // assume bb
- var bbe = elements;
- bb = {
- x1: bbe.x1,
- y1: bbe.y1,
- x2: bbe.x2,
- y2: bbe.y2
- };
-
- bb.w = bb.x2 - bb.x1;
- bb.h = bb.y2 - bb.y1;
-
- } else if( !is.elementOrCollection( elements ) ){
- elements = this.mutableElements();
- }
-
- bb = bb || elements.boundingBox();
-
- var w = this.width();
- var h = this.height();
- var zoom;
- padding = is.number( padding ) ? padding : 0;
-
- if( !isNaN( w ) && !isNaN( h ) && w > 0 && h > 0 && !isNaN( bb.w ) && !isNaN( bb.h ) && bb.w > 0 && bb.h > 0 ){
- zoom = Math.min( (w - 2 * padding) / bb.w, (h - 2 * padding) / bb.h );
-
- // crop zoom
- zoom = zoom > this._private.maxZoom ? this._private.maxZoom : zoom;
- zoom = zoom < this._private.minZoom ? this._private.minZoom : zoom;
-
- var pan = { // now pan to middle
- x: (w - zoom * ( bb.x1 + bb.x2 )) / 2,
- y: (h - zoom * ( bb.y1 + bb.y2 )) / 2
- };
-
- return {
- zoom: zoom,
- pan: pan
- };
- }
-
- return;
- },
-
- minZoom: function( zoom ){
- if( zoom === undefined ){
- return this._private.minZoom;
- } else if( is.number( zoom ) ){
- this._private.minZoom = zoom;
- }
-
- return this;
- },
-
- maxZoom: function( zoom ){
- if( zoom === undefined ){
- return this._private.maxZoom;
- } else if( is.number( zoom ) ){
- this._private.maxZoom = zoom;
- }
-
- return this;
- },
-
- zoom: function( params ){
- var pos; // in rendered px
- var zoom;
-
- if( params === undefined ){ // then get the zoom
- return this._private.zoom;
-
- } else if( is.number( params ) ){ // then set the zoom
- zoom = params;
-
- } else if( is.plainObject( params ) ){ // then zoom about a point
- zoom = params.level;
-
- if( params.position ){
- var p = params.position;
- var pan = this._private.pan;
- var z = this._private.zoom;
-
- pos = { // convert to rendered px
- x: p.x * z + pan.x,
- y: p.y * z + pan.y
- };
- } else if( params.renderedPosition ){
- pos = params.renderedPosition;
- }
-
- if( pos && !this._private.panningEnabled ){
- return this; // panning disabled
- }
- }
-
- if( !this._private.zoomingEnabled ){
- return this; // zooming disabled
- }
-
- if( !is.number( zoom ) || ( pos && (!is.number( pos.x ) || !is.number( pos.y )) ) ){
- return this; // can't zoom with invalid params
- }
-
- // crop zoom
- zoom = zoom > this._private.maxZoom ? this._private.maxZoom : zoom;
- zoom = zoom < this._private.minZoom ? this._private.minZoom : zoom;
-
- if( pos ){ // set zoom about position
- var pan1 = this._private.pan;
- var zoom1 = this._private.zoom;
- var zoom2 = zoom;
-
- var pan2 = {
- x: -zoom2 / zoom1 * (pos.x - pan1.x) + pos.x,
- y: -zoom2 / zoom1 * (pos.y - pan1.y) + pos.y
- };
-
- this._private.zoom = zoom;
- this._private.pan = pan2;
-
- var posChanged = pan1.x !== pan2.x || pan1.y !== pan2.y;
- this.trigger( ' zoom ' + (posChanged ? ' pan ' : '') + ' viewport ' );
-
- } else { // just set the zoom
- this._private.zoom = zoom;
- this.trigger( 'zoom viewport' );
- }
-
- this.notify( { // notify the renderer that the viewport changed
- type: 'viewport'
- } );
-
- return this; // chaining
- },
-
- viewport: function( opts ){
- var _p = this._private;
- var zoomDefd = true;
- var panDefd = true;
- var events = []; // to trigger
- var zoomFailed = false;
- var panFailed = false;
-
- if( !opts ){ return this; }
- if( !is.number( opts.zoom ) ){ zoomDefd = false; }
- if( !is.plainObject( opts.pan ) ){ panDefd = false; }
- if( !zoomDefd && !panDefd ){ return this; }
-
- if( zoomDefd ){
- var z = opts.zoom;
-
- if( z < _p.minZoom || z > _p.maxZoom || !_p.zoomingEnabled ){
- zoomFailed = true;
-
- } else {
- _p.zoom = z;
-
- events.push( 'zoom' );
- }
- }
-
- if( panDefd && (!zoomFailed || !opts.cancelOnFailedZoom) && _p.panningEnabled ){
- var p = opts.pan;
-
- if( is.number( p.x ) ){
- _p.pan.x = p.x;
- panFailed = false;
- }
-
- if( is.number( p.y ) ){
- _p.pan.y = p.y;
- panFailed = false;
- }
-
- if( !panFailed ){
- events.push( 'pan' );
- }
- }
-
- if( events.length > 0 ){
- events.push( 'viewport' );
- this.trigger( events.join( ' ' ) );
-
- this.notify( {
- type: 'viewport'
- } );
- }
-
- return this; // chaining
- },
-
- center: function( elements ){
- var pan = this.getCenterPan( elements );
-
- if( pan ){
- this._private.pan = pan;
-
- this.trigger( 'pan viewport' );
-
- this.notify( { // notify the renderer that the viewport changed
- type: 'viewport'
- } );
- }
-
- return this; // chaining
- },
-
- getCenterPan: function( elements, zoom ){
- if( !this._private.panningEnabled ){
- return;
- }
-
- if( is.string( elements ) ){
- var selector = elements;
- elements = this.mutableElements().filter( selector );
- } else if( !is.elementOrCollection( elements ) ){
- elements = this.mutableElements();
- }
-
- var bb = elements.boundingBox();
- var w = this.width();
- var h = this.height();
- zoom = zoom === undefined ? this._private.zoom : zoom;
-
- var pan = { // middle
- x: (w - zoom * ( bb.x1 + bb.x2 )) / 2,
- y: (h - zoom * ( bb.y1 + bb.y2 )) / 2
- };
-
- return pan;
- },
-
- reset: function(){
- if( !this._private.panningEnabled || !this._private.zoomingEnabled ){
- return this;
- }
-
- this.viewport( {
- pan: { x: 0, y: 0 },
- zoom: 1
- } );
-
- return this; // chaining
- },
-
- invalidateSize: function(){
- this._private.sizeCache = null;
- },
-
- size: function(){
- var _p = this._private;
- var container = _p.container;
-
- return ( _p.sizeCache = _p.sizeCache || ( container ? {
- width: container.clientWidth,
- height: container.clientHeight
- } : { // fallback if no container (not 0 b/c can be used for dividing etc)
- width: 1,
- height: 1
- } ) );
- },
-
- width: function(){
- return this.size().width;
- },
-
- height: function(){
- return this.size().height;
- },
-
- extent: function(){
- var pan = this._private.pan;
- var zoom = this._private.zoom;
- var rb = this.renderedExtent();
-
- var b = {
- x1: ( rb.x1 - pan.x ) / zoom,
- x2: ( rb.x2 - pan.x ) / zoom,
- y1: ( rb.y1 - pan.y ) / zoom,
- y2: ( rb.y2 - pan.y ) / zoom
- };
-
- b.w = b.x2 - b.x1;
- b.h = b.y2 - b.y1;
-
- return b;
- },
-
- renderedExtent: function(){
- var width = this.width();
- var height = this.height();
-
- return {
- x1: 0,
- y1: 0,
- x2: width,
- y2: height,
- w: width,
- h: height
- };
- }
-});
-
-// aliases
-corefn.centre = corefn.center;
-
-// backwards compatibility
-corefn.autolockNodes = corefn.autolock;
-corefn.autoungrabifyNodes = corefn.autoungrabify;
-
-module.exports = corefn;
-
-},{"../is":83}],44:[function(_dereq_,module,exports){
-'use strict';
-
-// use this module to cherry pick functions into your prototype
-// (useful for functions shared between the core and collections, for example)
-
-// e.g.
-// var foo = define.foo({ /* params... */ })
-
-var util = _dereq_( './util' );
-var is = _dereq_( './is' );
-var Selector = _dereq_( './selector' );
-var Promise = _dereq_( './promise' );
-var Event = _dereq_( './event' );
-var Animation = _dereq_( './animation' );
-
-var define = {
-
- // access data field
- data: function( params ){
- var defaults = {
- field: 'data',
- bindingEvent: 'data',
- allowBinding: false,
- allowSetting: false,
- allowGetting: false,
- settingEvent: 'data',
- settingTriggersEvent: false,
- triggerFnName: 'trigger',
- immutableKeys: {}, // key => true if immutable
- updateStyle: false,
- onSet: function( self ){},
- canSet: function( self ){ return true; }
- };
- params = util.extend( {}, defaults, params );
-
- return function dataImpl( name, value ){
- var p = params;
- var self = this;
- var selfIsArrayLike = self.length !== undefined;
- var all = selfIsArrayLike ? self : [ self ]; // put in array if not array-like
- var single = selfIsArrayLike ? self[0] : self;
-
- // .data('foo', ...)
- if( is.string( name ) ){ // set or get property
-
- // .data('foo')
- if( p.allowGetting && value === undefined ){ // get
-
- var ret;
- if( single ){
- ret = single._private[ p.field ][ name ];
- }
- return ret;
-
- // .data('foo', 'bar')
- } else if( p.allowSetting && value !== undefined ){ // set
- var valid = !p.immutableKeys[ name ];
- if( valid ){
- for( var i = 0, l = all.length; i < l; i++ ){
- if( p.canSet( all[ i ] ) ){
- all[ i ]._private[ p.field ][ name ] = value;
- }
- }
-
- // update mappers if asked
- if( p.updateStyle ){ self.updateStyle(); }
-
- // call onSet callback
- p.onSet( self );
-
- if( p.settingTriggersEvent ){
- self[ p.triggerFnName ]( p.settingEvent );
- }
- }
- }
-
- // .data({ 'foo': 'bar' })
- } else if( p.allowSetting && is.plainObject( name ) ){ // extend
- var obj = name;
- var k, v;
- var keys = Object.keys( obj );
-
- for( var i = 0; i < keys.length; i++ ){
- k = keys[ i ];
- v = obj[ k ];
-
- var valid = !p.immutableKeys[ k ];
- if( valid ){
- for( var j = 0; j < all.length; j++ ){
- var ele = all[j];
-
- if( p.canSet( ele ) ){
- ele._private[ p.field ][ k ] = v;
- }
- }
- }
- }
-
- // update mappers if asked
- if( p.updateStyle ){ self.updateStyle(); }
-
- // call onSet callback
- p.onSet( self );
-
- if( p.settingTriggersEvent ){
- self[ p.triggerFnName ]( p.settingEvent );
- }
-
- // .data(function(){ ... })
- } else if( p.allowBinding && is.fn( name ) ){ // bind to event
- var fn = name;
- self.on( p.bindingEvent, fn );
-
- // .data()
- } else if( p.allowGetting && name === undefined ){ // get whole object
- var ret;
- if( single ){
- ret = single._private[ p.field ];
- }
- return ret;
- }
-
- return self; // maintain chainability
- }; // function
- }, // data
-
- // remove data field
- removeData: function( params ){
- var defaults = {
- field: 'data',
- event: 'data',
- triggerFnName: 'trigger',
- triggerEvent: false,
- immutableKeys: {} // key => true if immutable
- };
- params = util.extend( {}, defaults, params );
-
- return function removeDataImpl( names ){
- var p = params;
- var self = this;
- var selfIsArrayLike = self.length !== undefined;
- var all = selfIsArrayLike ? self : [ self ]; // put in array if not array-like
-
- // .removeData('foo bar')
- if( is.string( names ) ){ // then get the list of keys, and delete them
- var keys = names.split( /\s+/ );
- var l = keys.length;
-
- for( var i = 0; i < l; i++ ){ // delete each non-empty key
- var key = keys[ i ];
- if( is.emptyString( key ) ){ continue; }
-
- var valid = !p.immutableKeys[ key ]; // not valid if immutable
- if( valid ){
- for( var i_a = 0, l_a = all.length; i_a < l_a; i_a++ ){
- all[ i_a ]._private[ p.field ][ key ] = undefined;
- }
- }
- }
-
- if( p.triggerEvent ){
- self[ p.triggerFnName ]( p.event );
- }
-
- // .removeData()
- } else if( names === undefined ){ // then delete all keys
-
- for( var i_a = 0, l_a = all.length; i_a < l_a; i_a++ ){
- var _privateFields = all[ i_a ]._private[ p.field ];
- var keys = Object.keys( _privateFields );
-
- for( var i = 0; i < keys.length; i++ ){
- var key = keys[i];
- var validKeyToDelete = !p.immutableKeys[ key ];
-
- if( validKeyToDelete ){
- _privateFields[ key ] = undefined;
- }
- }
- }
-
- if( p.triggerEvent ){
- self[ p.triggerFnName ]( p.event );
- }
- }
-
- return self; // maintain chaining
- }; // function
- }, // removeData
-
- // event function reusable stuff
- event: {
- regex: /(\w+)(\.(?:\w+|\*))?/, // regex for matching event strings (e.g. "click.namespace")
- universalNamespace: '.*', // matches as if no namespace specified and prevents users from unbinding accidentally
- optionalTypeRegex: /(\w+)?(\.(?:\w+|\*))?/,
- falseCallback: function(){ return false; }
- },
-
- // event binding
- on: function( params ){
- var defaults = {
- unbindSelfOnTrigger: false,
- unbindAllBindersOnTrigger: false
- };
- params = util.extend( {}, defaults, params );
-
- return function onImpl( events, selector, data, callback ){
- var self = this;
- var selfIsArrayLike = self.length !== undefined;
- var all = selfIsArrayLike ? self : [ self ]; // put in array if not array-like
- var eventsIsString = is.string( events );
- var p = params;
-
- if( is.plainObject( selector ) ){ // selector is actually data
- callback = data;
- data = selector;
- selector = undefined;
- } else if( is.fn( selector ) || selector === false ){ // selector is actually callback
- callback = selector;
- data = undefined;
- selector = undefined;
- }
-
- if( is.fn( data ) || data === false ){ // data is actually callback
- callback = data;
- data = undefined;
- }
-
- // if there isn't a callback, we can't really do anything
- // (can't speak for mapped events arg version)
- if( !(is.fn( callback ) || callback === false) && eventsIsString ){
- return self; // maintain chaining
- }
-
- if( eventsIsString ){ // then convert to map
- var map = {};
- map[ events ] = callback;
- events = map;
- }
-
- var keys = Object.keys( events );
-
- for( var k = 0; k < keys.length; k++ ){
- var evts = keys[k];
-
- callback = events[ evts ];
- if( callback === false ){
- callback = define.event.falseCallback;
- }
-
- if( !is.fn( callback ) ){ continue; }
-
- evts = evts.split( /\s+/ );
- for( var i = 0; i < evts.length; i++ ){
- var evt = evts[ i ];
- if( is.emptyString( evt ) ){ continue; }
-
- var match = evt.match( define.event.regex ); // type[.namespace]
-
- if( match ){
- var type = match[1];
- var namespace = match[2] ? match[2] : undefined;
-
- var listener = {
- callback: callback, // callback to run
- data: data, // extra data in eventObj.data
- delegated: selector ? true : false, // whether the evt is delegated
- selector: selector, // the selector to match for delegated events
- selObj: new Selector( selector ), // cached selector object to save rebuilding
- type: type, // the event type (e.g. 'click')
- namespace: namespace, // the event namespace (e.g. ".foo")
- unbindSelfOnTrigger: p.unbindSelfOnTrigger,
- unbindAllBindersOnTrigger: p.unbindAllBindersOnTrigger,
- binders: all // who bound together
- };
-
- for( var j = 0; j < all.length; j++ ){
- var _p = all[ j ]._private = all[ j ]._private || {};
-
- _p.listeners = _p.listeners || [];
- _p.listeners.push( listener );
- }
- }
- } // for events array
- } // for events map
-
- return self; // maintain chaining
- }; // function
- }, // on
-
- eventAliasesOn: function( proto ){
- var p = proto;
-
- p.addListener = p.listen = p.bind = p.on;
- p.removeListener = p.unlisten = p.unbind = p.off;
- p.emit = p.trigger;
-
- // this is just a wrapper alias of .on()
- p.pon = p.promiseOn = function( events, selector ){
- var self = this;
- var args = Array.prototype.slice.call( arguments, 0 );
-
- return new Promise( function( resolve, reject ){
- var callback = function( e ){
- self.off.apply( self, offArgs );
-
- resolve( e );
- };
-
- var onArgs = args.concat( [ callback ] );
- var offArgs = onArgs.concat( [] );
-
- self.on.apply( self, onArgs );
- } );
- };
- },
-
- off: function offImpl( params ){
- var defaults = {
- };
- params = util.extend( {}, defaults, params );
-
- return function( events, selector, callback ){
- var self = this;
- var selfIsArrayLike = self.length !== undefined;
- var all = selfIsArrayLike ? self : [ self ]; // put in array if not array-like
- var eventsIsString = is.string( events );
-
- if( arguments.length === 0 ){ // then unbind all
-
- for( var i = 0; i < all.length; i++ ){
- all[ i ]._private = all[ i ]._private || {};
-
- _p.listeners = [];
- }
-
- return self; // maintain chaining
- }
-
- if( is.fn( selector ) || selector === false ){ // selector is actually callback
- callback = selector;
- selector = undefined;
- }
-
- if( eventsIsString ){ // then convert to map
- var map = {};
- map[ events ] = callback;
- events = map;
- }
-
- var keys = Object.keys( events );
-
- for( var k = 0; k < keys.length; k++ ){
- var evts = keys[k];
-
- callback = events[ evts ];
-
- if( callback === false ){
- callback = define.event.falseCallback;
- }
-
- evts = evts.split( /\s+/ );
- for( var h = 0; h < evts.length; h++ ){
- var evt = evts[ h ];
- if( is.emptyString( evt ) ){ continue; }
-
- var match = evt.match( define.event.optionalTypeRegex ); // [type][.namespace]
- if( match ){
- var type = match[1] ? match[1] : undefined;
- var namespace = match[2] ? match[2] : undefined;
-
- for( var i = 0; i < all.length; i++ ){ //
- var _p = all[ i ]._private = all[ i ]._private || {};
- var listeners = _p.listeners = _p.listeners || [];
-
- for( var j = 0; j < listeners.length; j++ ){
- var listener = listeners[ j ];
- var nsMatches = !namespace || namespace === listener.namespace;
- var typeMatches = !type || listener.type === type;
- var cbMatches = !callback || callback === listener.callback;
- var listenerMatches = nsMatches && typeMatches && cbMatches;
-
- // delete listener if it matches
- if( listenerMatches ){
- listeners.splice( j, 1 );
- j--;
- }
- } // for listeners
- } // for all
- } // if match
- } // for events array
-
- } // for events map
-
- return self; // maintain chaining
- }; // function
- }, // off
-
- trigger: function( params ){
- var defaults = {};
- params = util.extend( {}, defaults, params );
-
- return function triggerImpl( events, extraParams, fnToTrigger ){
- var self = this;
- var selfIsArrayLike = self.length !== undefined;
- var all = selfIsArrayLike ? self : [ self ]; // put in array if not array-like
- var eventsIsString = is.string( events );
- var eventsIsObject = is.plainObject( events );
- var eventsIsEvent = is.event( events );
- var _p = this._private = this._private || {};
- var cy = _p.cy || ( is.core( this ) ? this : null );
- var hasCompounds = cy ? cy.hasCompoundNodes() : false;
-
- if( eventsIsString ){ // then make a plain event object for each event name
- var evts = events.split( /\s+/ );
- events = [];
-
- for( var i = 0; i < evts.length; i++ ){
- var evt = evts[ i ];
- if( is.emptyString( evt ) ){ continue; }
-
- var match = evt.match( define.event.regex ); // type[.namespace]
- var type = match[1];
- var namespace = match[2] ? match[2] : undefined;
-
- events.push( {
- type: type,
- namespace: namespace
- } );
- }
- } else if( eventsIsObject ){ // put in length 1 array
- var eventArgObj = events;
-
- events = [ eventArgObj ];
- }
-
- if( extraParams ){
- if( !is.array( extraParams ) ){ // make sure extra params are in an array if specified
- extraParams = [ extraParams ];
- }
- } else { // otherwise, we've got nothing
- extraParams = [];
- }
-
- for( var i = 0; i < events.length; i++ ){ // trigger each event in order
- var evtObj = events[ i ];
-
- for( var j = 0; j < all.length; j++ ){ // for each
- var triggerer = all[ j ];
- var _p = triggerer._private = triggerer._private || {};
- var listeners = _p.listeners = _p.listeners || [];
- var triggererIsElement = is.element( triggerer );
- var bubbleUp = triggererIsElement || params.layout;
-
- // create the event for this element from the event object
- var evt;
-
- if( eventsIsEvent ){ // then just get the object
- evt = evtObj;
-
- evt.cyTarget = evt.cyTarget || triggerer;
- evt.cy = evt.cy || cy;
-
- } else { // then we have to make one
- evt = new Event( evtObj, {
- cyTarget: triggerer,
- cy: cy,
- namespace: evtObj.namespace
- } );
- }
-
- // if a layout was specified, then put it in the typed event
- if( evtObj.layout ){
- evt.layout = evtObj.layout;
- }
-
- // if triggered by layout, put in event
- if( params.layout ){
- evt.layout = triggerer;
- }
-
- // create a rendered position based on the passed position
- if( evt.cyPosition ){
- var pos = evt.cyPosition;
- var zoom = cy.zoom();
- var pan = cy.pan();
-
- evt.cyRenderedPosition = {
- x: pos.x * zoom + pan.x,
- y: pos.y * zoom + pan.y
- };
- }
-
- if( fnToTrigger ){ // then override the listeners list with just the one we specified
- listeners = [ {
- namespace: evt.namespace,
- type: evt.type,
- callback: fnToTrigger
- } ];
- }
-
- for( var k = 0; k < listeners.length; k++ ){ // check each listener
- var lis = listeners[ k ];
- var nsMatches = !lis.namespace || lis.namespace === evt.namespace || lis.namespace === define.event.universalNamespace;
- var typeMatches = lis.type === evt.type;
- var targetMatches = lis.delegated ? ( triggerer !== evt.cyTarget && is.element( evt.cyTarget ) && lis.selObj.matches( evt.cyTarget ) ) : (true); // we're not going to validate the hierarchy; that's too expensive
- var listenerMatches = nsMatches && typeMatches && targetMatches;
-
- if( listenerMatches ){ // then trigger it
- var args = [ evt ];
- args = args.concat( extraParams ); // add extra params to args list
-
- if( lis.data ){ // add on data plugged into binding
- evt.data = lis.data;
- } else { // or clear it in case the event obj is reused
- evt.data = undefined;
- }
-
- if( lis.unbindSelfOnTrigger || lis.unbindAllBindersOnTrigger ){ // then remove listener
- listeners.splice( k, 1 );
- k--;
- }
-
- if( lis.unbindAllBindersOnTrigger ){ // then delete the listener for all binders
- var binders = lis.binders;
- for( var l = 0; l < binders.length; l++ ){
- var binder = binders[ l ];
- if( !binder || binder === triggerer ){ continue; } // already handled triggerer or we can't handle it
-
- var binderListeners = binder._private.listeners;
- for( var m = 0; m < binderListeners.length; m++ ){
- var binderListener = binderListeners[ m ];
-
- if( binderListener === lis ){ // delete listener from list
- binderListeners.splice( m, 1 );
- m--;
- }
- }
- }
- }
-
- // run the callback
- var context = lis.delegated ? evt.cyTarget : triggerer;
- var ret = lis.callback.apply( context, args );
-
- if( ret === false || evt.isPropagationStopped() ){
- // then don't bubble
- bubbleUp = false;
-
- if( ret === false ){
- // returning false is a shorthand for stopping propagation and preventing the def. action
- evt.stopPropagation();
- evt.preventDefault();
- }
- }
- } // if listener matches
- } // for each listener
-
- // bubble up event for elements
- if( bubbleUp ){
- var parent = hasCompounds ? triggerer._private.parent : null;
- var hasParent = parent != null && parent.length !== 0;
-
- if( hasParent ){ // then bubble up to parent
- parent = parent[0];
- parent.trigger( evt );
- } else { // otherwise, bubble up to the core
- cy.trigger( evt );
- }
- }
-
- } // for each of all
- } // for each event
-
- return self; // maintain chaining
- }; // function
- }, // trigger
-
- animated: function( fnParams ){
- var defaults = {};
- fnParams = util.extend( {}, defaults, fnParams );
-
- return function animatedImpl(){
- var self = this;
- var selfIsArrayLike = self.length !== undefined;
- var all = selfIsArrayLike ? self : [ self ]; // put in array if not array-like
- var cy = this._private.cy || this;
-
- if( !cy.styleEnabled() ){ return false; }
-
- var ele = all[0];
-
- if( ele ){
- return ele._private.animation.current.length > 0;
- }
- };
- }, // animated
-
- clearQueue: function( fnParams ){
- var defaults = {};
- fnParams = util.extend( {}, defaults, fnParams );
-
- return function clearQueueImpl(){
- var self = this;
- var selfIsArrayLike = self.length !== undefined;
- var all = selfIsArrayLike ? self : [ self ]; // put in array if not array-like
- var cy = this._private.cy || this;
-
- if( !cy.styleEnabled() ){ return this; }
-
- for( var i = 0; i < all.length; i++ ){
- var ele = all[ i ];
- ele._private.animation.queue = [];
- }
-
- return this;
- };
- }, // clearQueue
-
- delay: function( fnParams ){
- var defaults = {};
- fnParams = util.extend( {}, defaults, fnParams );
-
- return function delayImpl( time, complete ){
- var cy = this._private.cy || this;
-
- if( !cy.styleEnabled() ){ return this; }
-
- return this.animate( {
- delay: time,
- duration: time,
- complete: complete
- } );
- };
- }, // delay
-
- delayAnimation: function( fnParams ){
- var defaults = {};
- fnParams = util.extend( {}, defaults, fnParams );
-
- return function delayAnimationImpl( time, complete ){
- var cy = this._private.cy || this;
-
- if( !cy.styleEnabled() ){ return this; }
-
- return this.animation( {
- delay: time,
- duration: time,
- complete: complete
- } );
- };
- }, // delay
-
- animation: function( fnParams ){
- var defaults = {};
- fnParams = util.extend( {}, defaults, fnParams );
-
- return function animationImpl( properties, params ){
- var self = this;
- var selfIsArrayLike = self.length !== undefined;
- var all = selfIsArrayLike ? self : [ self ]; // put in array if not array-like
- var cy = this._private.cy || this;
- var isCore = !selfIsArrayLike;
- var isEles = !isCore;
-
- if( !cy.styleEnabled() ){ return this; }
-
- var style = cy.style();
-
- properties = util.extend( {}, properties, params );
-
- if( properties.duration === undefined ){
- properties.duration = 400;
- }
-
- switch( properties.duration ){
- case 'slow':
- properties.duration = 600;
- break;
- case 'fast':
- properties.duration = 200;
- break;
- }
-
- var propertiesEmpty = Object.keys( properties ).length === 0;
-
- if( propertiesEmpty ){
- return new Animation( all[0], properties ); // nothing to animate
- }
-
- if( isEles ){
- properties.style = style.getPropsList( properties.style || properties.css );
-
- properties.css = undefined;
- }
-
- if( properties.renderedPosition && isEles ){
- var rpos = properties.renderedPosition;
- var pan = cy.pan();
- var zoom = cy.zoom();
-
- properties.position = {
- x: ( rpos.x - pan.x ) / zoom,
- y: ( rpos.y - pan.y ) / zoom
- };
- }
-
- // override pan w/ panBy if set
- if( properties.panBy && isCore ){
- var panBy = properties.panBy;
- var cyPan = cy.pan();
-
- properties.pan = {
- x: cyPan.x + panBy.x,
- y: cyPan.y + panBy.y
- };
- }
-
- // override pan w/ center if set
- var center = properties.center || properties.centre;
- if( center && isCore ){
- var centerPan = cy.getCenterPan( center.eles, properties.zoom );
-
- if( centerPan ){
- properties.pan = centerPan;
- }
- }
-
- // override pan & zoom w/ fit if set
- if( properties.fit && isCore ){
- var fit = properties.fit;
- var fitVp = cy.getFitViewport( fit.eles || fit.boundingBox, fit.padding );
-
- if( fitVp ){
- properties.pan = fitVp.pan;
- properties.zoom = fitVp.zoom;
- }
- }
-
- return new Animation( all[0], properties );
- };
- }, // animate
-
- animate: function( fnParams ){
- var defaults = {};
- fnParams = util.extend( {}, defaults, fnParams );
-
- return function animateImpl( properties, params ){
- var self = this;
- var selfIsArrayLike = self.length !== undefined;
- var all = selfIsArrayLike ? self : [ self ]; // put in array if not array-like
- var cy = this._private.cy || this;
-
- if( !cy.styleEnabled() ){ return this; }
-
- if( params ){
- properties = util.extend( {}, properties, params );
- }
-
- // manually hook and run the animation
- for( var i = 0; i < all.length; i++ ){
- var ele = all[ i ];
- var queue = ele.animated() && (properties.queue === undefined || properties.queue);
-
- var ani = ele.animation( properties, (queue ? { queue: true } : undefined) );
-
- ani.play();
- }
-
- return this; // chaining
- };
- }, // animate
-
- stop: function( fnParams ){
- var defaults = {};
- fnParams = util.extend( {}, defaults, fnParams );
-
- return function stopImpl( clearQueue, jumpToEnd ){
- var self = this;
- var selfIsArrayLike = self.length !== undefined;
- var all = selfIsArrayLike ? self : [ self ]; // put in array if not array-like
- var cy = this._private.cy || this;
-
- if( !cy.styleEnabled() ){ return this; }
-
- for( var i = 0; i < all.length; i++ ){
- var ele = all[ i ];
- var _p = ele._private;
- var anis = _p.animation.current;
-
- for( var j = 0; j < anis.length; j++ ){
- var ani = anis[ j ];
- var ani_p = ani._private;
-
- if( jumpToEnd ){
- // next iteration of the animation loop, the animation
- // will go straight to the end and be removed
- ani_p.duration = 0;
- }
- }
-
- // clear the queue of future animations
- if( clearQueue ){
- _p.animation.queue = [];
- }
-
- if( !jumpToEnd ){
- _p.animation.current = [];
- }
- }
-
- // we have to notify (the animation loop doesn't do it for us on `stop`)
- cy.notify( {
- eles: this,
- type: 'draw'
- } );
-
- return this;
- };
- } // stop
-
-}; // define
-
-module.exports = define;
-
-},{"./animation":2,"./event":45,"./is":83,"./promise":86,"./selector":87,"./util":100}],45:[function(_dereq_,module,exports){
-'use strict';
-
-/*!
-Event object based on jQuery events, MIT license
-
-https://jquery.org/license/
-https://tldrlegal.com/license/mit-license
-https://github.com/jquery/jquery/blob/master/src/event.js
-*/
-
-var Event = function( src, props ){
- // Allow instantiation without the 'new' keyword
- if( !(this instanceof Event) ){
- return new Event( src, props );
- }
-
- // Event object
- if( src && src.type ){
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = ( src.defaultPrevented ) ? returnTrue : returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if( props ){
- // util.extend( this, props );
-
- // more efficient to manually copy fields we use
- this.type = props.type !== undefined ? props.type : this.type;
- this.cy = props.cy;
- this.cyTarget = props.cyTarget;
- this.cyPosition = props.cyPosition;
- this.cyRenderedPosition = props.cyRenderedPosition;
- this.namespace = props.namespace;
- this.layout = props.layout;
- this.data = props.data;
- this.message = props.message;
- }
-
- // Create a timestamp if incoming event doesn't have one
- this.timeStamp = src && src.timeStamp || Date.now();
-};
-
-function returnFalse(){
- return false;
-}
-
-function returnTrue(){
- return true;
-}
-
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-Event.prototype = {
- instanceString: function(){
- return 'event';
- },
-
- preventDefault: function(){
- this.isDefaultPrevented = returnTrue;
-
- var e = this.originalEvent;
- if( !e ){
- return;
- }
-
- // if preventDefault exists run it on the original event
- if( e.preventDefault ){
- e.preventDefault();
- }
- },
-
- stopPropagation: function(){
- this.isPropagationStopped = returnTrue;
-
- var e = this.originalEvent;
- if( !e ){
- return;
- }
-
- // if stopPropagation exists run it on the original event
- if( e.stopPropagation ){
- e.stopPropagation();
- }
- },
-
- stopImmediatePropagation: function(){
- this.isImmediatePropagationStopped = returnTrue;
- this.stopPropagation();
- },
-
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse
-};
-
-module.exports = Event;
-
-},{}],46:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( './util' );
-var define = _dereq_( './define' );
-var Collection = _dereq_( './collection' );
-var Core = _dereq_( './core' );
-var incExts = _dereq_( './extensions' );
-var is = _dereq_( './is' );
-
-// registered extensions to cytoscape, indexed by name
-var extensions = {};
-
-// registered modules for extensions, indexed by name
-var modules = {};
-
-function setExtension( type, name, registrant ){
-
- var ext = registrant;
-
- var overrideErr = function( field ){
- util.error( 'Can not register `' + name + '` for `' + type + '` since `' + field + '` already exists in the prototype and can not be overridden' );
- };
-
- if( type === 'core' ){
- if( Core.prototype[ name ] ){
- return overrideErr( name );
- } else {
- Core.prototype[ name ] = registrant;
- }
-
- } else if( type === 'collection' ){
- if( Collection.prototype[ name ] ){
- return overrideErr( name );
- } else {
- Collection.prototype[ name ] = registrant;
- }
-
- } else if( type === 'layout' ){
- // fill in missing layout functions in the prototype
-
- var Layout = function( options ){
- this.options = options;
-
- registrant.call( this, options );
-
- // make sure layout has _private for use w/ std apis like .on()
- if( !is.plainObject( this._private ) ){
- this._private = {};
- }
-
- this._private.cy = options.cy;
- this._private.listeners = [];
- };
-
- var layoutProto = Layout.prototype = Object.create( registrant.prototype );
-
- var optLayoutFns = [];
-
- for( var i = 0; i < optLayoutFns.length; i++ ){
- var fnName = optLayoutFns[ i ];
-
- layoutProto[ fnName ] = layoutProto[ fnName ] || function(){ return this; };
- }
-
- // either .start() or .run() is defined, so autogen the other
- if( layoutProto.start && !layoutProto.run ){
- layoutProto.run = function(){ this.start(); return this; };
- } else if( !layoutProto.start && layoutProto.run ){
- layoutProto.start = function(){ this.run(); return this; };
- }
-
- if( !layoutProto.stop ){
- layoutProto.stop = function(){
- var opts = this.options;
-
- if( opts && opts.animate ){
- var anis = this.animations;
- for( var i = 0; i < anis.length; i++ ){
- anis[ i ].stop();
- }
- }
-
- this.trigger( 'layoutstop' );
-
- return this;
- };
- }
-
- if( !layoutProto.destroy ){
- layoutProto.destroy = function(){
- return this;
- };
- }
-
- layoutProto.on = define.on( { layout: true } );
- layoutProto.one = define.on( { layout: true, unbindSelfOnTrigger: true } );
- layoutProto.once = define.on( { layout: true, unbindAllBindersOnTrigger: true } );
- layoutProto.off = define.off( { layout: true } );
- layoutProto.trigger = define.trigger( { layout: true } );
-
- define.eventAliasesOn( layoutProto );
-
- ext = Layout; // replace with our wrapped layout
-
- } else if( type === 'renderer' && name !== 'null' && name !== 'base' ){
- // user registered renderers inherit from base
-
- var BaseRenderer = getExtension( 'renderer', 'base' );
- var bProto = BaseRenderer.prototype;
- var RegistrantRenderer = registrant;
- var rProto = registrant.prototype;
-
- var Renderer = function(){
- BaseRenderer.apply( this, arguments );
- RegistrantRenderer.apply( this, arguments );
- };
-
- var proto = Renderer.prototype;
-
- for( var pName in bProto ){
- var pVal = bProto[ pName ];
- var existsInR = rProto[ pName ] != null;
-
- if( existsInR ){
- return overrideErr( pName );
- }
-
- proto[ pName ] = pVal; // take impl from base
- }
-
- for( var pName in rProto ){
- proto[ pName ] = rProto[ pName ]; // take impl from registrant
- }
-
- bProto.clientFunctions.forEach( function( name ){
- proto[ name ] = proto[ name ] || function(){
- util.error( 'Renderer does not implement `renderer.' + name + '()` on its prototype' );
- };
- } );
-
- ext = Renderer;
-
- }
-
- return util.setMap( {
- map: extensions,
- keys: [ type, name ],
- value: ext
- } );
-}
-
-function getExtension( type, name ){
- return util.getMap( {
- map: extensions,
- keys: [ type, name ]
- } );
-}
-
-function setModule( type, name, moduleType, moduleName, registrant ){
- return util.setMap( {
- map: modules,
- keys: [ type, name, moduleType, moduleName ],
- value: registrant
- } );
-}
-
-function getModule( type, name, moduleType, moduleName ){
- return util.getMap( {
- map: modules,
- keys: [ type, name, moduleType, moduleName ]
- } );
-}
-
-var extension = function(){
- // e.g. extension('renderer', 'svg')
- if( arguments.length === 2 ){
- return getExtension.apply( null, arguments );
- }
-
- // e.g. extension('renderer', 'svg', { ... })
- else if( arguments.length === 3 ){
- return setExtension.apply( null, arguments );
- }
-
- // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse')
- else if( arguments.length === 4 ){
- return getModule.apply( null, arguments );
- }
-
- // e.g. extension('renderer', 'svg', 'nodeShape', 'ellipse', { ... })
- else if( arguments.length === 5 ){
- return setModule.apply( null, arguments );
- }
-
- else {
- util.error( 'Invalid extension access syntax' );
- }
-
-};
-
-// allows a core instance to access extensions internally
-Core.prototype.extension = extension;
-
-// included extensions
-incExts.forEach( function( group ){
- group.extensions.forEach( function( ext ){
- setExtension( group.type, ext.name, ext.impl );
- } );
-} );
-
-module.exports = extension;
-
-},{"./collection":26,"./core":37,"./define":44,"./extensions":47,"./is":83,"./util":100}],47:[function(_dereq_,module,exports){
-'use strict';
-
-module.exports = [
- {
- type: 'layout',
- extensions: _dereq_( './layout' )
- },
-
- {
- type: 'renderer',
- extensions: _dereq_( './renderer' )
- }
-];
-
-},{"./layout":53,"./renderer":78}],48:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../../util' );
-var math = _dereq_( '../../math' );
-var is = _dereq_( '../../is' );
-
-var defaults = {
- fit: true, // whether to fit the viewport to the graph
- directed: false, // whether the tree is directed downwards (or edges can point in any direction if false)
- padding: 30, // padding on fit
- circle: false, // put depths in concentric circles if true, put depths top down if false
- spacingFactor: 1.75, // positive spacing factor, larger => more space between nodes (N.B. n/a if causes overlap)
- boundingBox: undefined, // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }
- avoidOverlap: true, // prevents node overlap, may overflow boundingBox if not enough space
- roots: undefined, // the roots of the trees
- maximalAdjustments: 0, // how many times to try to position the nodes in a maximal way (i.e. no backtracking)
- animate: false, // whether to transition the node positions
- animationDuration: 500, // duration of animation in ms if enabled
- animationEasing: undefined, // easing of animation if enabled
- ready: undefined, // callback on layoutready
- stop: undefined // callback on layoutstop
-};
-
-function BreadthFirstLayout( options ){
- this.options = util.extend( {}, defaults, options );
-}
-
-BreadthFirstLayout.prototype.run = function(){
- var params = this.options;
- var options = params;
-
- var cy = params.cy;
- var eles = options.eles;
- var nodes = eles.nodes().not( ':parent' );
- var graph = eles;
-
- var bb = math.makeBoundingBox( options.boundingBox ? options.boundingBox : {
- x1: 0, y1: 0, w: cy.width(), h: cy.height()
- } );
-
- var roots;
- if( is.elementOrCollection( options.roots ) ){
- roots = options.roots;
- } else if( is.array( options.roots ) ){
- var rootsArray = [];
-
- for( var i = 0; i < options.roots.length; i++ ){
- var id = options.roots[ i ];
- var ele = cy.getElementById( id );
- rootsArray.push( ele );
- }
-
- roots = cy.collection( rootsArray );
- } else if( is.string( options.roots ) ){
- roots = cy.$( options.roots );
-
- } else {
- if( options.directed ){
- roots = nodes.roots();
- } else {
- var components = [];
- var unhandledNodes = nodes;
-
- while( unhandledNodes.length > 0 ){
- var currComp = cy.collection();
-
- eles.bfs( {
- roots: unhandledNodes[0],
- visit: function( i, depth, node, edge, pNode ){
- currComp = currComp.add( node );
- },
- directed: false
- } );
-
- unhandledNodes = unhandledNodes.not( currComp );
- components.push( currComp );
- }
-
- roots = cy.collection();
- for( var i = 0; i < components.length; i++ ){
- var comp = components[ i ];
- var maxDegree = comp.maxDegree( false );
- var compRoots = comp.filter( function(){
- return this.degree( false ) === maxDegree;
- } );
-
- roots = roots.add( compRoots );
- }
-
- }
- }
-
-
- var depths = [];
- var foundByBfs = {};
- var id2depth = {};
- var prevNode = {};
- var prevEdge = {};
- var successors = {};
-
- // find the depths of the nodes
- graph.bfs( {
- roots: roots,
- directed: options.directed,
- visit: function( i, depth, node, edge, pNode ){
- var ele = this[0];
- var id = ele.id();
-
- if( !depths[ depth ] ){
- depths[ depth ] = [];
- }
-
- depths[ depth ].push( ele );
- foundByBfs[ id ] = true;
- id2depth[ id ] = depth;
- prevNode[ id ] = pNode;
- prevEdge[ id ] = edge;
-
- if( pNode ){
- var prevId = pNode.id();
- var succ = successors[ prevId ] = successors[ prevId ] || [];
-
- succ.push( node );
- }
- }
- } );
-
- // check for nodes not found by bfs
- var orphanNodes = [];
- for( var i = 0; i < nodes.length; i++ ){
- var ele = nodes[ i ];
-
- if( foundByBfs[ ele.id() ] ){
- continue;
- } else {
- orphanNodes.push( ele );
- }
- }
-
- // assign orphan nodes a depth from their neighborhood
- var maxChecks = orphanNodes.length * 3;
- var checks = 0;
- while( orphanNodes.length !== 0 && checks < maxChecks ){
- var node = orphanNodes.shift();
- var neighbors = node.neighborhood().nodes();
- var assignedDepth = false;
-
- for( var i = 0; i < neighbors.length; i++ ){
- var depth = id2depth[ neighbors[ i ].id() ];
-
- if( depth !== undefined ){
- depths[ depth ].push( node );
- assignedDepth = true;
- break;
- }
- }
-
- if( !assignedDepth ){
- orphanNodes.push( node );
- }
-
- checks++;
- }
-
- // assign orphan nodes that are still left to the depth of their subgraph
- while( orphanNodes.length !== 0 ){
- var node = orphanNodes.shift();
- //var subgraph = graph.bfs( node ).path;
- var assignedDepth = false;
-
- // for( var i = 0; i < subgraph.length; i++ ){
- // var depth = id2depth[ subgraph[i].id() ];
-
- // if( depth !== undefined ){
- // depths[depth].push( node );
- // assignedDepth = true;
- // break;
- // }
- // }
-
- if( !assignedDepth ){ // worst case if the graph really isn't tree friendly, then just dump it in 0
- if( depths.length === 0 ){
- depths.push( [] );
- }
-
- depths[0].push( node );
- }
- }
-
- // assign the nodes a depth and index
- var assignDepthsToEles = function(){
- for( var i = 0; i < depths.length; i++ ){
- var eles = depths[ i ];
-
- for( var j = 0; j < eles.length; j++ ){
- var ele = eles[ j ];
-
- ele._private.scratch.breadthfirst = {
- depth: i,
- index: j
- };
- }
- }
- };
- assignDepthsToEles();
-
-
- var intersectsDepth = function( node ){ // returns true if has edges pointing in from a higher depth
- var edges = node.connectedEdges( function(){
- return this.data( 'target' ) === node.id();
- } );
- var thisInfo = node._private.scratch.breadthfirst;
- var highestDepthOfOther = 0;
- var highestOther;
- for( var i = 0; i < edges.length; i++ ){
- var edge = edges[ i ];
- var otherNode = edge.source()[0];
- var otherInfo = otherNode._private.scratch.breadthfirst;
-
- if( thisInfo.depth <= otherInfo.depth && highestDepthOfOther < otherInfo.depth ){
- highestDepthOfOther = otherInfo.depth;
- highestOther = otherNode;
- }
- }
-
- return highestOther;
- };
-
- // make maximal if so set by adjusting depths
- for( var adj = 0; adj < options.maximalAdjustments; adj++ ){
-
- var nDepths = depths.length;
- var elesToMove = [];
- for( var i = 0; i < nDepths; i++ ){
- var depth = depths[ i ];
-
- var nDepth = depth.length;
- for( var j = 0; j < nDepth; j++ ){
- var ele = depth[ j ];
- var info = ele._private.scratch.breadthfirst;
- var intEle = intersectsDepth( ele );
-
- if( intEle ){
- info.intEle = intEle;
- elesToMove.push( ele );
- }
- }
- }
-
- for( var i = 0; i < elesToMove.length; i++ ){
- var ele = elesToMove[ i ];
- var info = ele._private.scratch.breadthfirst;
- var intEle = info.intEle;
- var intInfo = intEle._private.scratch.breadthfirst;
-
- depths[ info.depth ].splice( info.index, 1 ); // remove from old depth & index
-
- // add to end of new depth
- var newDepth = intInfo.depth + 1;
- while( newDepth > depths.length - 1 ){
- depths.push( [] );
- }
- depths[ newDepth ].push( ele );
-
- info.depth = newDepth;
- info.index = depths[ newDepth ].length - 1;
- }
-
- assignDepthsToEles();
- }
-
- // find min distance we need to leave between nodes
- var minDistance = 0;
- if( options.avoidOverlap ){
- for( var i = 0; i < nodes.length; i++ ){
- var n = nodes[ i ];
- var nbb = n.boundingBox();
- var w = nbb.w;
- var h = nbb.h;
-
- minDistance = Math.max( minDistance, w, h );
- }
- minDistance *= options.spacingFactor; // just to have some nice spacing
- }
-
- // get the weighted percent for an element based on its connectivity to other levels
- var cachedWeightedPercent = {};
- var getWeightedPercent = function( ele ){
- if( cachedWeightedPercent[ ele.id() ] ){
- return cachedWeightedPercent[ ele.id() ];
- }
-
- var eleDepth = ele._private.scratch.breadthfirst.depth;
- var neighbors = ele.neighborhood().nodes().not( ':parent' );
- var percent = 0;
- var samples = 0;
-
- for( var i = 0; i < neighbors.length; i++ ){
- var neighbor = neighbors[ i ];
- var bf = neighbor._private.scratch.breadthfirst;
- var index = bf.index;
- var depth = bf.depth;
- var nDepth = depths[ depth ].length;
-
- if( eleDepth > depth || eleDepth === 0 ){ // only get influenced by elements above
- percent += index / nDepth;
- samples++;
- }
- }
-
- samples = Math.max( 1, samples );
- percent = percent / samples;
-
- if( samples === 0 ){ // so lone nodes have a "don't care" state in sorting
- percent = undefined;
- }
-
- cachedWeightedPercent[ ele.id() ] = percent;
- return percent;
- };
-
-
- // rearrange the indices in each depth level based on connectivity
-
- var sortFn = function( a, b ){
- var apct = getWeightedPercent( a );
- var bpct = getWeightedPercent( b );
-
- return apct - bpct;
- };
-
- for( var times = 0; times < 3; times++ ){ // do it a few times b/c the depths are dynamic and we want a more stable result
-
- for( var i = 0; i < depths.length; i++ ){
- depths[ i ] = depths[ i ].sort( sortFn );
- }
- assignDepthsToEles(); // and update
-
- }
-
- var biggestDepthSize = 0;
- for( var i = 0; i < depths.length; i++ ){
- biggestDepthSize = Math.max( depths[ i ].length, biggestDepthSize );
- }
-
- var center = {
- x: bb.x1 + bb.w / 2,
- y: bb.x1 + bb.h / 2
- };
-
- var getPosition = function( ele, isBottomDepth ){
- var info = ele._private.scratch.breadthfirst;
- var depth = info.depth;
- var index = info.index;
- var depthSize = depths[ depth ].length;
-
- var distanceX = Math.max( bb.w / (depthSize + 1), minDistance );
- var distanceY = Math.max( bb.h / (depths.length + 1), minDistance );
- var radiusStepSize = Math.min( bb.w / 2 / depths.length, bb.h / 2 / depths.length );
- radiusStepSize = Math.max( radiusStepSize, minDistance );
-
- if( !options.circle ){
-
- var epos = {
- x: center.x + (index + 1 - (depthSize + 1) / 2) * distanceX,
- y: (depth + 1) * distanceY
- };
-
- if( isBottomDepth ){
- return epos;
- }
-
- // var succs = successors[ ele.id() ];
- // if( succs ){
- // epos.x = 0;
- //
- // for( var i = 0 ; i < succs.length; i++ ){
- // var spos = pos[ succs[i].id() ];
- //
- // epos.x += spos.x;
- // }
- //
- // epos.x /= succs.length;
- // } else {
- // //debugger;
- // }
-
- return epos;
-
- } else {
- if( options.circle ){
- var radius = radiusStepSize * depth + radiusStepSize - (depths.length > 0 && depths[0].length <= 3 ? radiusStepSize / 2 : 0);
- var theta = 2 * Math.PI / depths[ depth ].length * index;
-
- if( depth === 0 && depths[0].length === 1 ){
- radius = 1;
- }
-
- return {
- x: center.x + radius * Math.cos( theta ),
- y: center.y + radius * Math.sin( theta )
- };
-
- } else {
- return {
- x: center.x + (index + 1 - (depthSize + 1) / 2) * distanceX,
- y: (depth + 1) * distanceY
- };
- }
- }
-
- };
-
- // get positions in reverse depth order
- var pos = {};
- for( var i = depths.length - 1; i >= 0; i-- ){
- var depth = depths[ i ];
-
- for( var j = 0; j < depth.length; j++ ){
- var node = depth[ j ];
-
- pos[ node.id() ] = getPosition( node, i === depths.length - 1 );
- }
- }
-
- nodes.layoutPositions( this, options, function(){
- return pos[ this.id() ];
- } );
-
- return this; // chaining
-};
-
-module.exports = BreadthFirstLayout;
-
-},{"../../is":83,"../../math":85,"../../util":100}],49:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../../util' );
-var math = _dereq_( '../../math' );
-var is = _dereq_( '../../is' );
-
-var defaults = {
- fit: true, // whether to fit the viewport to the graph
- padding: 30, // the padding on fit
- boundingBox: undefined, // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }
- avoidOverlap: true, // prevents node overlap, may overflow boundingBox and radius if not enough space
- radius: undefined, // the radius of the circle
- startAngle: 3 / 2 * Math.PI, // where nodes start in radians
- sweep: undefined, // how many radians should be between the first and last node (defaults to full circle)
- clockwise: true, // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false)
- sort: undefined, // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') }
- animate: false, // whether to transition the node positions
- animationDuration: 500, // duration of animation in ms if enabled
- animationEasing: undefined, // easing of animation if enabled
- ready: undefined, // callback on layoutready
- stop: undefined // callback on layoutstop
-};
-
-function CircleLayout( options ){
- this.options = util.extend( {}, defaults, options );
-}
-
-CircleLayout.prototype.run = function(){
- var params = this.options;
- var options = params;
-
- var cy = params.cy;
- var eles = options.eles;
-
- var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise;
-
- var nodes = eles.nodes().not( ':parent' );
-
- if( options.sort ){
- nodes = nodes.sort( options.sort );
- }
-
- var bb = math.makeBoundingBox( options.boundingBox ? options.boundingBox : {
- x1: 0, y1: 0, w: cy.width(), h: cy.height()
- } );
-
- var center = {
- x: bb.x1 + bb.w / 2,
- y: bb.y1 + bb.h / 2
- };
-
- var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / nodes.length : options.sweep;
-
- var dTheta = sweep / ( Math.max( 1, nodes.length - 1 ) );
- var r;
-
- var minDistance = 0;
- for( var i = 0; i < nodes.length; i++ ){
- var n = nodes[ i ];
- var nbb = n.boundingBox();
- var w = nbb.w;
- var h = nbb.h;
-
- minDistance = Math.max( minDistance, w, h );
- }
-
- if( is.number( options.radius ) ){
- r = options.radius;
- } else if( nodes.length <= 1 ){
- r = 0;
- } else {
- r = Math.min( bb.h, bb.w ) / 2 - minDistance;
- }
-
- // calculate the radius
- if( nodes.length > 1 && options.avoidOverlap ){ // but only if more than one node (can't overlap)
- minDistance *= 1.75; // just to have some nice spacing
-
- var dcos = Math.cos( dTheta ) - Math.cos( 0 );
- var dsin = Math.sin( dTheta ) - Math.sin( 0 );
- var rMin = Math.sqrt( minDistance * minDistance / ( dcos * dcos + dsin * dsin ) ); // s.t. no nodes overlapping
- r = Math.max( rMin, r );
- }
-
- var getPos = function( i, ele ){
- var theta = options.startAngle + i * dTheta * ( clockwise ? 1 : -1 );
-
- var rx = r * Math.cos( theta );
- var ry = r * Math.sin( theta );
- var pos = {
- x: center.x + rx,
- y: center.y + ry
- };
-
- return pos;
- };
-
- nodes.layoutPositions( this, options, getPos );
-
- return this; // chaining
-};
-
-module.exports = CircleLayout;
-
-},{"../../is":83,"../../math":85,"../../util":100}],50:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../../util' );
-var math = _dereq_( '../../math' );
-
-var defaults = {
- fit: true, // whether to fit the viewport to the graph
- padding: 30, // the padding on fit
- startAngle: 3 / 2 * Math.PI, // where nodes start in radians
- sweep: undefined, // how many radians should be between the first and last node (defaults to full circle)
- clockwise: true, // whether the layout should go clockwise (true) or counterclockwise/anticlockwise (false)
- equidistant: false, // whether levels have an equal radial distance betwen them, may cause bounding box overflow
- minNodeSpacing: 10, // min spacing between outside of nodes (used for radius adjustment)
- boundingBox: undefined, // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }
- avoidOverlap: true, // prevents node overlap, may overflow boundingBox if not enough space
- height: undefined, // height of layout area (overrides container height)
- width: undefined, // width of layout area (overrides container width)
- concentric: function( node ){ // returns numeric value for each node, placing higher nodes in levels towards the centre
- return node.degree();
- },
- levelWidth: function( nodes ){ // the variation of concentric values in each level
- return nodes.maxDegree() / 4;
- },
- animate: false, // whether to transition the node positions
- animationDuration: 500, // duration of animation in ms if enabled
- animationEasing: undefined, // easing of animation if enabled
- ready: undefined, // callback on layoutready
- stop: undefined // callback on layoutstop
-};
-
-function ConcentricLayout( options ){
- this.options = util.extend( {}, defaults, options );
-}
-
-ConcentricLayout.prototype.run = function(){
- var params = this.options;
- var options = params;
-
- var clockwise = options.counterclockwise !== undefined ? !options.counterclockwise : options.clockwise;
-
- var cy = params.cy;
-
- var eles = options.eles;
- var nodes = eles.nodes().not( ':parent' );
-
- var bb = math.makeBoundingBox( options.boundingBox ? options.boundingBox : {
- x1: 0, y1: 0, w: cy.width(), h: cy.height()
- } );
-
- var center = {
- x: bb.x1 + bb.w / 2,
- y: bb.y1 + bb.h / 2
- };
-
- var nodeValues = []; // { node, value }
- var theta = options.startAngle;
- var maxNodeSize = 0;
-
- for( var i = 0; i < nodes.length; i++ ){
- var node = nodes[ i ];
- var value;
-
- // calculate the node value
- value = options.concentric.apply( node, [ node ] );
- nodeValues.push( {
- value: value,
- node: node
- } );
-
- // for style mapping
- node._private.scratch.concentric = value;
- }
-
- // in case we used the `concentric` in style
- nodes.updateStyle();
-
- // calculate max size now based on potentially updated mappers
- for( var i = 0; i < nodes.length; i++ ){
- var node = nodes[ i ];
- var nbb = node.boundingBox();
-
- maxNodeSize = Math.max( maxNodeSize, nbb.w, nbb.h );
- }
-
- // sort node values in descreasing order
- nodeValues.sort( function( a, b ){
- return b.value - a.value;
- } );
-
- var levelWidth = options.levelWidth( nodes );
-
- // put the values into levels
- var levels = [ [] ];
- var currentLevel = levels[0];
- for( var i = 0; i < nodeValues.length; i++ ){
- var val = nodeValues[ i ];
-
- if( currentLevel.length > 0 ){
- var diff = Math.abs( currentLevel[0].value - val.value );
-
- if( diff >= levelWidth ){
- currentLevel = [];
- levels.push( currentLevel );
- }
- }
-
- currentLevel.push( val );
- }
-
- // create positions from levels
-
- var minDist = maxNodeSize + options.minNodeSpacing; // min dist between nodes
-
- if( !options.avoidOverlap ){ // then strictly constrain to bb
- var firstLvlHasMulti = levels.length > 0 && levels[0].length > 1;
- var maxR = ( Math.min( bb.w, bb.h ) / 2 - minDist );
- var rStep = maxR / ( levels.length + firstLvlHasMulti ? 1 : 0 );
-
- minDist = Math.min( minDist, rStep );
- }
-
- // find the metrics for each level
- var r = 0;
- for( var i = 0; i < levels.length; i++ ){
- var level = levels[ i ];
- var sweep = options.sweep === undefined ? 2 * Math.PI - 2 * Math.PI / level.length : options.sweep;
- var dTheta = level.dTheta = sweep / ( Math.max( 1, level.length - 1 ) );
-
- // calculate the radius
- if( level.length > 1 && options.avoidOverlap ){ // but only if more than one node (can't overlap)
- var dcos = Math.cos( dTheta ) - Math.cos( 0 );
- var dsin = Math.sin( dTheta ) - Math.sin( 0 );
- var rMin = Math.sqrt( minDist * minDist / ( dcos * dcos + dsin * dsin ) ); // s.t. no nodes overlapping
-
- r = Math.max( rMin, r );
- }
-
- level.r = r;
-
- r += minDist;
- }
-
- if( options.equidistant ){
- var rDeltaMax = 0;
- var r = 0;
-
- for( var i = 0; i < levels.length; i++ ){
- var level = levels[ i ];
- var rDelta = level.r - r;
-
- rDeltaMax = Math.max( rDeltaMax, rDelta );
- }
-
- r = 0;
- for( var i = 0; i < levels.length; i++ ){
- var level = levels[ i ];
-
- if( i === 0 ){
- r = level.r;
- }
-
- level.r = r;
-
- r += rDeltaMax;
- }
- }
-
- // calculate the node positions
- var pos = {}; // id => position
- for( var i = 0; i < levels.length; i++ ){
- var level = levels[ i ];
- var dTheta = level.dTheta;
- var r = level.r;
-
- for( var j = 0; j < level.length; j++ ){
- var val = level[ j ];
- var theta = options.startAngle + (clockwise ? 1 : -1) * dTheta * j;
-
- var p = {
- x: center.x + r * Math.cos( theta ),
- y: center.y + r * Math.sin( theta )
- };
-
- pos[ val.node.id() ] = p;
- }
- }
-
- // position the nodes
- nodes.layoutPositions( this, options, function(){
- var id = this.id();
-
- return pos[ id ];
- } );
-
- return this; // chaining
-};
-
-module.exports = ConcentricLayout;
-
-},{"../../math":85,"../../util":100}],51:[function(_dereq_,module,exports){
-'use strict';
-
-/*
-The CoSE layout was written by Gerardo Huck.
-https://www.linkedin.com/in/gerardohuck/
-
-Based on the following article:
-http://dl.acm.org/citation.cfm?id=1498047
-
-Modifications tracked on Github.
-*/
-
-var util = _dereq_( '../../util' );
-var math = _dereq_( '../../math' );
-var Thread = _dereq_( '../../thread' );
-var is = _dereq_( '../../is' );
-
-var DEBUG;
-
-/**
- * @brief : default layout options
- */
-var defaults = {
- // Called on `layoutready`
- ready: function(){},
-
- // Called on `layoutstop`
- stop: function(){},
-
- // Whether to animate while running the layout
- animate: true,
-
- // The layout animates only after this many milliseconds
- // (prevents flashing on fast runs)
- animationThreshold: 250,
-
- // Number of iterations between consecutive screen positions update
- // (0 -> only updated on the end)
- refresh: 20,
-
- // Whether to fit the network view after when done
- fit: true,
-
- // Padding on fit
- padding: 30,
-
- // Constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }
- boundingBox: undefined,
-
- // Extra spacing between components in non-compound graphs
- componentSpacing: 100,
-
- // Node repulsion (non overlapping) multiplier
- nodeRepulsion: function( node ){ return 400000; },
-
- // Node repulsion (overlapping) multiplier
- nodeOverlap: 10,
-
- // Ideal edge (non nested) length
- idealEdgeLength: function( edge ){ return 10; },
-
- // Divisor to compute edge forces
- edgeElasticity: function( edge ){ return 100; },
-
- // Nesting factor (multiplier) to compute ideal edge length for nested edges
- nestingFactor: 5,
-
- // Gravity force (constant)
- gravity: 80,
-
- // Maximum number of iterations to perform
- numIter: 1000,
-
- // Initial temperature (maximum node displacement)
- initialTemp: 200,
-
- // Cooling factor (how the temperature is reduced between consecutive iterations
- coolingFactor: 0.95,
-
- // Lower temperature threshold (below this point the layout will end)
- minTemp: 1.0,
-
- // Whether to use threading to speed up the layout
- useMultitasking: true
-};
-
-
-/**
- * @brief : constructor
- * @arg options : object containing layout options
- */
-function CoseLayout( options ){
- this.options = util.extend( {}, defaults, options );
-
- this.options.layout = this;
-}
-
-
-/**
- * @brief : runs the layout
- */
-CoseLayout.prototype.run = function(){
- var options = this.options;
- var cy = options.cy;
- var layout = this;
- var thread = this.thread;
-
- if( !thread || thread.stopped() ){
- thread = this.thread = Thread( { disabled: !options.useMultitasking } );
- }
-
- layout.stopped = false;
-
- layout.trigger( { type: 'layoutstart', layout: layout } );
-
- // Set DEBUG - Global variable
- if( true === options.debug ){
- DEBUG = true;
- } else {
- DEBUG = false;
- }
-
- // Initialize layout info
- var layoutInfo = createLayoutInfo( cy, layout, options );
-
- // Show LayoutInfo contents if debugging
- if( DEBUG ){
- printLayoutInfo( layoutInfo );
- }
-
- // If required, randomize node positions
- // if (true === options.randomize) {
- randomizePositions( layoutInfo, cy );
- // }
-
- var startTime = Date.now();
- var refreshRequested = false;
- var refresh = function( rOpts ){
- rOpts = rOpts || {};
-
- if( refreshRequested && !rOpts.next ){
- return;
- }
-
- if( !rOpts.force && Date.now() - startTime < options.animationThreshold ){
- return;
- }
-
- refreshRequested = true;
-
- util.requestAnimationFrame( function(){
- refreshPositions( layoutInfo, cy, options );
-
- // Fit the graph if necessary
- if( true === options.fit ){
- cy.fit( options.padding );
- }
-
- refreshRequested = false;
-
- if( rOpts.next ){ rOpts.next(); }
- });
- };
-
- thread.on( 'message', function( e ){
- var layoutNodes = e.message;
-
- layoutInfo.layoutNodes = layoutNodes;
- refresh();
- } );
-
- thread.pass( {
- layoutInfo: layoutInfo,
- options: {
- animate: options.animate,
- refresh: options.refresh,
- componentSpacing: options.componentSpacing,
- nodeOverlap: options.nodeOverlap,
- nestingFactor: options.nestingFactor,
- gravity: options.gravity,
- numIter: options.numIter,
- initialTemp: options.initialTemp,
- coolingFactor: options.coolingFactor,
- minTemp: options.minTemp
- }
- } ).run( function( pass ){
- var layoutInfo = pass.layoutInfo;
- var options = pass.options;
- var stopped = false;
-
- /**
- * @brief : Performs one iteration of the physical simulation
- * @arg layoutInfo : LayoutInfo object already initialized
- * @arg cy : Cytoscape object
- * @arg options : Layout options
- */
- var step = function( layoutInfo, options, step ){
- // var s = "\n\n###############################";
- // s += "\nSTEP: " + step;
- // s += "\n###############################\n";
- // logDebug(s);
-
- // Calculate node repulsions
- calculateNodeForces( layoutInfo, options );
- // Calculate edge forces
- calculateEdgeForces( layoutInfo, options );
- // Calculate gravity forces
- calculateGravityForces( layoutInfo, options );
- // Propagate forces from parent to child
- propagateForces( layoutInfo, options );
- // Update positions based on calculated forces
- updatePositions( layoutInfo, options );
- };
-
- /**
- * @brief : Computes the node repulsion forces
- */
- var calculateNodeForces = function( layoutInfo, options ){
- // Go through each of the graphs in graphSet
- // Nodes only repel each other if they belong to the same graph
- // var s = 'calculateNodeForces';
- // logDebug(s);
- for( var i = 0; i < layoutInfo.graphSet.length; i ++ ){
- var graph = layoutInfo.graphSet[ i ];
- var numNodes = graph.length;
-
- // s = "Set: " + graph.toString();
- // logDebug(s);
-
- // Now get all the pairs of nodes
- // Only get each pair once, (A, B) = (B, A)
- for( var j = 0; j < numNodes; j++ ){
- var node1 = layoutInfo.layoutNodes[ layoutInfo.idToIndex[ graph[ j ] ] ];
-
- for( var k = j + 1; k < numNodes; k++ ){
- var node2 = layoutInfo.layoutNodes[ layoutInfo.idToIndex[ graph[ k ] ] ];
-
- nodeRepulsion( node1, node2, layoutInfo, options );
- }
- }
- }
- };
-
- /**
- * @brief : Compute the node repulsion forces between a pair of nodes
- */
- var nodeRepulsion = function( node1, node2, layoutInfo, options ){
- // var s = "Node repulsion. Node1: " + node1.id + " Node2: " + node2.id;
-
- var cmptId1 = node1.cmptId;
- var cmptId2 = node2.cmptId;
-
- if( cmptId1 !== cmptId2 && !layoutInfo.isCompound ){ return; }
-
- // Get direction of line connecting both node centers
- var directionX = node2.positionX - node1.positionX;
- var directionY = node2.positionY - node1.positionY;
- // s += "\ndirectionX: " + directionX + ", directionY: " + directionY;
-
- // If both centers are the same, apply a random force
- if( 0 === directionX && 0 === directionY ){
- // s += "\nNodes have the same position.";
- return; // TODO could be improved with random force
- }
-
- var overlap = nodesOverlap( node1, node2, directionX, directionY );
-
- if( overlap > 0 ){
- // s += "\nNodes DO overlap.";
- // s += "\nOverlap: " + overlap;
- // If nodes overlap, repulsion force is proportional
- // to the overlap
- var force = options.nodeOverlap * overlap;
-
- // Compute the module and components of the force vector
- var distance = Math.sqrt( directionX * directionX + directionY * directionY );
- // s += "\nDistance: " + distance;
- var forceX = force * directionX / distance;
- var forceY = force * directionY / distance;
-
- } else {
- // s += "\nNodes do NOT overlap.";
- // If there's no overlap, force is inversely proportional
- // to squared distance
-
- // Get clipping points for both nodes
- var point1 = findClippingPoint( node1, directionX, directionY );
- var point2 = findClippingPoint( node2, -1 * directionX, -1 * directionY );
-
- // Use clipping points to compute distance
- var distanceX = point2.x - point1.x;
- var distanceY = point2.y - point1.y;
- var distanceSqr = distanceX * distanceX + distanceY * distanceY;
- var distance = Math.sqrt( distanceSqr );
- // s += "\nDistance: " + distance;
-
- // Compute the module and components of the force vector
- var force = ( node1.nodeRepulsion + node2.nodeRepulsion ) / distanceSqr;
- var forceX = force * distanceX / distance;
- var forceY = force * distanceY / distance;
- }
-
- // Apply force
- if( !node1.isLocked ){
- node1.offsetX -= forceX;
- node1.offsetY -= forceY;
- }
-
- if( !node2.isLocked ){
- node2.offsetX += forceX;
- node2.offsetY += forceY;
- }
-
- // s += "\nForceX: " + forceX + " ForceY: " + forceY;
- // logDebug(s);
-
- return;
- };
-
- /**
- * @brief : Determines whether two nodes overlap or not
- * @return : Amount of overlapping (0 => no overlap)
- */
- var nodesOverlap = function( node1, node2, dX, dY ){
-
- if( dX > 0 ){
- var overlapX = node1.maxX - node2.minX;
- } else {
- var overlapX = node2.maxX - node1.minX;
- }
-
- if( dY > 0 ){
- var overlapY = node1.maxY - node2.minY;
- } else {
- var overlapY = node2.maxY - node1.minY;
- }
-
- if( overlapX >= 0 && overlapY >= 0 ){
- return Math.sqrt( overlapX * overlapX + overlapY * overlapY );
- } else {
- return 0;
- }
- };
-
- /**
- * @brief : Finds the point in which an edge (direction dX, dY) intersects
- * the rectangular bounding box of it's source/target node
- */
- var findClippingPoint = function( node, dX, dY ){
-
- // Shorcuts
- var X = node.positionX;
- var Y = node.positionY;
- var H = node.height || 1;
- var W = node.width || 1;
- var dirSlope = dY / dX;
- var nodeSlope = H / W;
-
- // var s = 'Computing clipping point of node ' + node.id +
- // " . Height: " + H + ", Width: " + W +
- // "\nDirection " + dX + ", " + dY;
- //
- // Compute intersection
- var res = {};
- do {
- // Case: Vertical direction (up)
- if( 0 === dX && 0 < dY ){
- res.x = X;
- // s += "\nUp direction";
- res.y = Y + H / 2;
- break;
- }
-
- // Case: Vertical direction (down)
- if( 0 === dX && 0 > dY ){
- res.x = X;
- res.y = Y + H / 2;
- // s += "\nDown direction";
- break;
- }
-
- // Case: Intersects the right border
- if( 0 < dX &&
- -1 * nodeSlope <= dirSlope &&
- dirSlope <= nodeSlope ){
- res.x = X + W / 2;
- res.y = Y + (W * dY / 2 / dX);
- // s += "\nRightborder";
- break;
- }
-
- // Case: Intersects the left border
- if( 0 > dX &&
- -1 * nodeSlope <= dirSlope &&
- dirSlope <= nodeSlope ){
- res.x = X - W / 2;
- res.y = Y - (W * dY / 2 / dX);
- // s += "\nLeftborder";
- break;
- }
-
- // Case: Intersects the top border
- if( 0 < dY &&
- ( dirSlope <= -1 * nodeSlope ||
- dirSlope >= nodeSlope ) ){
- res.x = X + (H * dX / 2 / dY);
- res.y = Y + H / 2;
- // s += "\nTop border";
- break;
- }
-
- // Case: Intersects the bottom border
- if( 0 > dY &&
- ( dirSlope <= -1 * nodeSlope ||
- dirSlope >= nodeSlope ) ){
- res.x = X - (H * dX / 2 / dY);
- res.y = Y - H / 2;
- // s += "\nBottom border";
- break;
- }
-
- } while( false);
-
- // s += "\nClipping point found at " + res.x + ", " + res.y;
- // logDebug(s);
- return res;
- };
-
- /**
- * @brief : Calculates all edge forces
- */
- var calculateEdgeForces = function( layoutInfo, options ){
- // Iterate over all edges
- for( var i = 0; i < layoutInfo.edgeSize; i++ ){
- // Get edge, source & target nodes
- var edge = layoutInfo.layoutEdges[ i ];
- var sourceIx = layoutInfo.idToIndex[ edge.sourceId ];
- var source = layoutInfo.layoutNodes[ sourceIx ];
- var targetIx = layoutInfo.idToIndex[ edge.targetId ];
- var target = layoutInfo.layoutNodes[ targetIx ];
-
- // Get direction of line connecting both node centers
- var directionX = target.positionX - source.positionX;
- var directionY = target.positionY - source.positionY;
-
- // If both centers are the same, do nothing.
- // A random force has already been applied as node repulsion
- if( 0 === directionX && 0 === directionY ){
- return;
- }
-
- // Get clipping points for both nodes
- var point1 = findClippingPoint( source, directionX, directionY );
- var point2 = findClippingPoint( target, -1 * directionX, -1 * directionY );
-
-
- var lx = point2.x - point1.x;
- var ly = point2.y - point1.y;
- var l = Math.sqrt( lx * lx + ly * ly );
-
- var force = Math.pow( edge.idealLength - l, 2 ) / edge.elasticity;
-
- if( 0 !== l ){
- var forceX = force * lx / l;
- var forceY = force * ly / l;
- } else {
- var forceX = 0;
- var forceY = 0;
- }
-
- // Add this force to target and source nodes
- if( !source.isLocked ){
- source.offsetX += forceX;
- source.offsetY += forceY;
- }
-
- if( !target.isLocked ){
- target.offsetX -= forceX;
- target.offsetY -= forceY;
- }
-
- // var s = 'Edge force between nodes ' + source.id + ' and ' + target.id;
- // s += "\nDistance: " + l + " Force: (" + forceX + ", " + forceY + ")";
- // logDebug(s);
- }
- };
-
- /**
- * @brief : Computes gravity forces for all nodes
- */
- var calculateGravityForces = function( layoutInfo, options ){
- var distThreshold = 1;
-
- // var s = 'calculateGravityForces';
- // logDebug(s);
- for( var i = 0; i < layoutInfo.graphSet.length; i ++ ){
- var graph = layoutInfo.graphSet[ i ];
- var numNodes = graph.length;
-
- // s = "Set: " + graph.toString();
- // logDebug(s);
-
- // Compute graph center
- if( 0 === i ){
- var centerX = layoutInfo.clientHeight / 2;
- var centerY = layoutInfo.clientWidth / 2;
- } else {
- // Get Parent node for this graph, and use its position as center
- var temp = layoutInfo.layoutNodes[ layoutInfo.idToIndex[ graph[0] ] ];
- var parent = layoutInfo.layoutNodes[ layoutInfo.idToIndex[ temp.parentId ] ];
- var centerX = parent.positionX;
- var centerY = parent.positionY;
- }
- // s = "Center found at: " + centerX + ", " + centerY;
- // logDebug(s);
-
- // Apply force to all nodes in graph
- for( var j = 0; j < numNodes; j++ ){
- var node = layoutInfo.layoutNodes[ layoutInfo.idToIndex[ graph[ j ] ] ];
- // s = "Node: " + node.id;
-
- if( node.isLocked ){ continue; }
-
- var dx = centerX - node.positionX;
- var dy = centerY - node.positionY;
- var d = Math.sqrt( dx * dx + dy * dy );
- if( d > distThreshold ){
- var fx = options.gravity * dx / d;
- var fy = options.gravity * dy / d;
- node.offsetX += fx;
- node.offsetY += fy;
- // s += ": Applied force: " + fx + ", " + fy;
- } else {
- // s += ": skypped since it's too close to center";
- }
- // logDebug(s);
- }
- }
- };
-
- /**
- * @brief : This function propagates the existing offsets from
- * parent nodes to its descendents.
- * @arg layoutInfo : layoutInfo Object
- * @arg cy : cytoscape Object
- * @arg options : Layout options
- */
- var propagateForces = function( layoutInfo, options ){
- // Inline implementation of a queue, used for traversing the graph in BFS order
- var queue = [];
- var start = 0; // Points to the start the queue
- var end = -1; // Points to the end of the queue
-
- // logDebug('propagateForces');
-
- // Start by visiting the nodes in the root graph
- queue.push.apply( queue, layoutInfo.graphSet[0] );
- end += layoutInfo.graphSet[0].length;
-
- // Traverse the graph, level by level,
- while( start <= end ){
- // Get the node to visit and remove it from queue
- var nodeId = queue[ start++ ];
- var nodeIndex = layoutInfo.idToIndex[ nodeId ];
- var node = layoutInfo.layoutNodes[ nodeIndex ];
- var children = node.children;
-
- // We only need to process the node if it's compound
- if( 0 < children.length && !node.isLocked ){
- var offX = node.offsetX;
- var offY = node.offsetY;
-
- // var s = "Propagating offset from parent node : " + node.id +
- // ". OffsetX: " + offX + ". OffsetY: " + offY;
- // s += "\n Children: " + children.toString();
- // logDebug(s);
-
- for( var i = 0; i < children.length; i++ ){
- var childNode = layoutInfo.layoutNodes[ layoutInfo.idToIndex[ children[ i ] ] ];
- // Propagate offset
- childNode.offsetX += offX;
- childNode.offsetY += offY;
- // Add children to queue to be visited
- queue[ ++end ] = children[ i ];
- }
-
- // Reset parent offsets
- node.offsetX = 0;
- node.offsetY = 0;
- }
-
- }
- };
-
- /**
- * @brief : Updates the layout model positions, based on
- * the accumulated forces
- */
- var updatePositions = function( layoutInfo, options ){
- // var s = 'Updating positions';
- // logDebug(s);
-
- // Reset boundaries for compound nodes
- for( var i = 0; i < layoutInfo.nodeSize; i++ ){
- var n = layoutInfo.layoutNodes[ i ];
- if( 0 < n.children.length ){
- // logDebug("Resetting boundaries of compound node: " + n.id);
- n.maxX = undefined;
- n.minX = undefined;
- n.maxY = undefined;
- n.minY = undefined;
- }
- }
-
- for( var i = 0; i < layoutInfo.nodeSize; i++ ){
- var n = layoutInfo.layoutNodes[ i ];
- if( 0 < n.children.length || n.isLocked ){
- // No need to set compound or locked node position
- // logDebug("Skipping position update of node: " + n.id);
- continue;
- }
- // s = "Node: " + n.id + " Previous position: (" +
- // n.positionX + ", " + n.positionY + ").";
-
- // Limit displacement in order to improve stability
- var tempForce = limitForce( n.offsetX, n.offsetY, layoutInfo.temperature );
- n.positionX += tempForce.x;
- n.positionY += tempForce.y;
- n.offsetX = 0;
- n.offsetY = 0;
- n.minX = n.positionX - n.width;
- n.maxX = n.positionX + n.width;
- n.minY = n.positionY - n.height;
- n.maxY = n.positionY + n.height;
- // s += " New Position: (" + n.positionX + ", " + n.positionY + ").";
- // logDebug(s);
-
- // Update ancestry boudaries
- updateAncestryBoundaries( n, layoutInfo );
- }
-
- // Update size, position of compund nodes
- for( var i = 0; i < layoutInfo.nodeSize; i++ ){
- var n = layoutInfo.layoutNodes[ i ];
- if( 0 < n.children.length && !n.isLocked ){
- n.positionX = (n.maxX + n.minX) / 2;
- n.positionY = (n.maxY + n.minY) / 2;
- n.width = n.maxX - n.minX;
- n.height = n.maxY - n.minY;
- // s = "Updating position, size of compound node " + n.id;
- // s += "\nPositionX: " + n.positionX + ", PositionY: " + n.positionY;
- // s += "\nWidth: " + n.width + ", Height: " + n.height;
- // logDebug(s);
- }
- }
- };
-
- /**
- * @brief : Limits a force (forceX, forceY) to be not
- * greater (in modulo) than max.
- 8 Preserves force direction.
- */
- var limitForce = function( forceX, forceY, max ){
- // var s = "Limiting force: (" + forceX + ", " + forceY + "). Max: " + max;
- var force = Math.sqrt( forceX * forceX + forceY * forceY );
-
- if( force > max ){
- var res = {
- x: max * forceX / force,
- y: max * forceY / force
- };
-
- } else {
- var res = {
- x: forceX,
- y: forceY
- };
- }
-
- // s += ".\nResult: (" + res.x + ", " + res.y + ")";
- // logDebug(s);
-
- return res;
- };
-
- /**
- * @brief : Function used for keeping track of compound node
- * sizes, since they should bound all their subnodes.
- */
- var updateAncestryBoundaries = function( node, layoutInfo ){
- // var s = "Propagating new position/size of node " + node.id;
- var parentId = node.parentId;
- if( null == parentId ){
- // If there's no parent, we are done
- // s += ". No parent node.";
- // logDebug(s);
- return;
- }
-
- // Get Parent Node
- var p = layoutInfo.layoutNodes[ layoutInfo.idToIndex[ parentId ] ];
- var flag = false;
-
- // MaxX
- if( null == p.maxX || node.maxX + p.padRight > p.maxX ){
- p.maxX = node.maxX + p.padRight;
- flag = true;
- // s += "\nNew maxX for parent node " + p.id + ": " + p.maxX;
- }
-
- // MinX
- if( null == p.minX || node.minX - p.padLeft < p.minX ){
- p.minX = node.minX - p.padLeft;
- flag = true;
- // s += "\nNew minX for parent node " + p.id + ": " + p.minX;
- }
-
- // MaxY
- if( null == p.maxY || node.maxY + p.padBottom > p.maxY ){
- p.maxY = node.maxY + p.padBottom;
- flag = true;
- // s += "\nNew maxY for parent node " + p.id + ": " + p.maxY;
- }
-
- // MinY
- if( null == p.minY || node.minY - p.padTop < p.minY ){
- p.minY = node.minY - p.padTop;
- flag = true;
- // s += "\nNew minY for parent node " + p.id + ": " + p.minY;
- }
-
- // If updated boundaries, propagate changes upward
- if( flag ){
- // logDebug(s);
- return updateAncestryBoundaries( p, layoutInfo );
- }
-
- // s += ". No changes in boundaries/position of parent node " + p.id;
- // logDebug(s);
- return;
- };
-
- var separateComponents = function( layutInfo, options ){
- var nodes = layoutInfo.layoutNodes;
- var components = [];
-
- for( var i = 0; i < nodes.length; i++ ){
- var node = nodes[ i ];
- var cid = node.cmptId;
- var component = components[ cid ] = components[ cid ] || [];
-
- component.push( node );
- }
-
- var totalA = 0;
-
- for( var i = 0; i < components.length; i++ ){
- var c = components[ i ];
-
- if( !c ){ continue; }
-
- c.x1 = Infinity;
- c.x2 = -Infinity;
- c.y1 = Infinity;
- c.y2 = -Infinity;
-
- for( var j = 0; j < c.length; j++ ){
- var n = c[ j ];
-
- c.x1 = Math.min( c.x1, n.positionX - n.width / 2 );
- c.x2 = Math.max( c.x2, n.positionX + n.width / 2 );
- c.y1 = Math.min( c.y1, n.positionY - n.height / 2 );
- c.y2 = Math.max( c.y2, n.positionY + n.height / 2 );
- }
-
- c.w = c.x2 - c.x1;
- c.h = c.y2 - c.y1;
-
- totalA += c.w * c.h;
- }
-
- components.sort( function( c1, c2 ){
- return c2.w * c2.h - c1.w * c1.h;
- } );
-
- var x = 0;
- var y = 0;
- var usedW = 0;
- var rowH = 0;
- var maxRowW = Math.sqrt( totalA ) * layoutInfo.clientWidth / layoutInfo.clientHeight;
-
- for( var i = 0; i < components.length; i++ ){
- var c = components[ i ];
-
- if( !c ){ continue; }
-
- for( var j = 0; j < c.length; j++ ){
- var n = c[ j ];
-
- if( !n.isLocked ){
- n.positionX += x;
- n.positionY += y;
- }
- }
-
- x += c.w + options.componentSpacing;
- usedW += c.w + options.componentSpacing;
- rowH = Math.max( rowH, c.h );
-
- if( usedW > maxRowW ){
- y += rowH + options.componentSpacing;
- x = 0;
- usedW = 0;
- rowH = 0;
- }
- }
- };
-
- var mainLoop = function( i ){
- if( stopped ){
- // logDebug("Layout manually stopped. Stopping computation in step " + i);
- return false;
- }
-
- // Do one step in the phisical simulation
- step( layoutInfo, options, i );
-
- // Update temperature
- layoutInfo.temperature = layoutInfo.temperature * options.coolingFactor;
- // logDebug("New temperature: " + layoutInfo.temperature);
-
- if( layoutInfo.temperature < options.minTemp ){
- // logDebug("Temperature drop below minimum threshold. Stopping computation in step " + i);
- return false;
- }
-
- return true;
- };
-
- var i = 0;
- var loopRet;
-
- do {
- var f = 0;
-
- while( f < options.refresh && i < options.numIter ){
- var loopRet = mainLoop( i );
- if( !loopRet ){ break; }
-
- f++;
- i++;
- }
-
- if( options.animate ){
- broadcast( layoutInfo.layoutNodes ); // eslint-disable-line no-undef
- }
-
- } while( loopRet && i + 1 < options.numIter );
-
- separateComponents( layoutInfo, options );
-
- return layoutInfo;
- } ).then( function( layoutInfoUpdated ){
- layoutInfo.layoutNodes = layoutInfoUpdated.layoutNodes; // get the positions
-
- thread.stop();
- done();
- } );
-
- var done = function(){
- refresh({
- force: true,
- next: function(){
- // Layout has finished
- layout.one('layoutstop', options.stop);
- layout.trigger({ type: 'layoutstop', layout: layout });
- }
- });
- };
-
- return this; // chaining
-};
-
-
-/**
- * @brief : called on continuous layouts to stop them before they finish
- */
-CoseLayout.prototype.stop = function(){
- this.stopped = true;
-
- if( this.thread ){
- this.thread.stop();
- }
-
- this.trigger( 'layoutstop' );
-
- return this; // chaining
-};
-
-CoseLayout.prototype.destroy = function(){
- if( this.thread ){
- this.thread.stop();
- }
-
- return this; // chaining
-};
-
-
-/**
- * @brief : Creates an object which is contains all the data
- * used in the layout process
- * @arg cy : cytoscape.js object
- * @return : layoutInfo object initialized
- */
-var createLayoutInfo = function( cy, layout, options ){
- // Shortcut
- var edges = options.eles.edges();
- var nodes = options.eles.nodes();
-
- var layoutInfo = {
- isCompound: cy.hasCompoundNodes(),
- layoutNodes: [],
- idToIndex: {},
- nodeSize: nodes.size(),
- graphSet: [],
- indexToGraph: [],
- layoutEdges: [],
- edgeSize: edges.size(),
- temperature: options.initialTemp,
- clientWidth: cy.width(),
- clientHeight: cy.width(),
- boundingBox: math.makeBoundingBox( options.boundingBox ? options.boundingBox : {
- x1: 0, y1: 0, w: cy.width(), h: cy.height()
- } )
- };
-
- var components = options.eles.components();
- var id2cmptId = {};
-
- for( var i = 0; i < components.length; i++ ){
- var component = components[ i ];
-
- for( var j = 0; j < component.length; j++ ){
- var node = component[ j ];
-
- id2cmptId[ node.id() ] = i;
- }
- }
-
- // Iterate over all nodes, creating layout nodes
- for( var i = 0; i < layoutInfo.nodeSize; i++ ){
- var n = nodes[ i ];
- var nbb = n.boundingBox();
-
- var tempNode = {};
- tempNode.isLocked = n.locked();
- tempNode.id = n.data( 'id' );
- tempNode.parentId = n.data( 'parent' );
- tempNode.cmptId = id2cmptId[ n.id() ];
- tempNode.children = [];
- tempNode.positionX = n.position( 'x' );
- tempNode.positionY = n.position( 'y' );
- tempNode.offsetX = 0;
- tempNode.offsetY = 0;
- tempNode.height = nbb.w;
- tempNode.width = nbb.h;
- tempNode.maxX = tempNode.positionX + tempNode.width / 2;
- tempNode.minX = tempNode.positionX - tempNode.width / 2;
- tempNode.maxY = tempNode.positionY + tempNode.height / 2;
- tempNode.minY = tempNode.positionY - tempNode.height / 2;
- tempNode.padLeft = parseFloat( n.style( 'padding-left' ) );
- tempNode.padRight = parseFloat( n.style( 'padding-right' ) );
- tempNode.padTop = parseFloat( n.style( 'padding-top' ) );
- tempNode.padBottom = parseFloat( n.style( 'padding-bottom' ) );
-
- // forces
- tempNode.nodeRepulsion = is.fn( options.nodeRepulsion ) ? options.nodeRepulsion.call( n, n ) : options.nodeRepulsion;
-
- // Add new node
- layoutInfo.layoutNodes.push( tempNode );
- // Add entry to id-index map
- layoutInfo.idToIndex[ tempNode.id ] = i;
- }
-
- // Inline implementation of a queue, used for traversing the graph in BFS order
- var queue = [];
- var start = 0; // Points to the start the queue
- var end = -1; // Points to the end of the queue
-
- var tempGraph = [];
-
- // Second pass to add child information and
- // initialize queue for hierarchical traversal
- for( var i = 0; i < layoutInfo.nodeSize; i++ ){
- var n = layoutInfo.layoutNodes[ i ];
- var p_id = n.parentId;
- // Check if node n has a parent node
- if( null != p_id ){
- // Add node Id to parent's list of children
- layoutInfo.layoutNodes[ layoutInfo.idToIndex[ p_id ] ].children.push( n.id );
- } else {
- // If a node doesn't have a parent, then it's in the root graph
- queue[ ++end ] = n.id;
- tempGraph.push( n.id );
- }
- }
-
- // Add root graph to graphSet
- layoutInfo.graphSet.push( tempGraph );
-
- // Traverse the graph, level by level,
- while( start <= end ){
- // Get the node to visit and remove it from queue
- var node_id = queue[ start++ ];
- var node_ix = layoutInfo.idToIndex[ node_id ];
- var node = layoutInfo.layoutNodes[ node_ix ];
- var children = node.children;
- if( children.length > 0 ){
- // Add children nodes as a new graph to graph set
- layoutInfo.graphSet.push( children );
- // Add children to que queue to be visited
- for( var i = 0; i < children.length; i++ ){
- queue[ ++end ] = children[ i ];
- }
- }
- }
-
- // Create indexToGraph map
- for( var i = 0; i < layoutInfo.graphSet.length; i++ ){
- var graph = layoutInfo.graphSet[ i ];
- for( var j = 0; j < graph.length; j++ ){
- var index = layoutInfo.idToIndex[ graph[ j ] ];
- layoutInfo.indexToGraph[ index ] = i;
- }
- }
-
- // Iterate over all edges, creating Layout Edges
- for( var i = 0; i < layoutInfo.edgeSize; i++ ){
- var e = edges[ i ];
- var tempEdge = {};
- tempEdge.id = e.data( 'id' );
- tempEdge.sourceId = e.data( 'source' );
- tempEdge.targetId = e.data( 'target' );
-
- // Compute ideal length
- var idealLength = is.fn( options.idealEdgeLength ) ? options.idealEdgeLength.call( e, e ) : options.idealEdgeLength;
- var elasticity = is.fn( options.edgeElasticity ) ? options.edgeElasticity.call( e, e ) : options.edgeElasticity;
-
- // Check if it's an inter graph edge
- var sourceIx = layoutInfo.idToIndex[ tempEdge.sourceId ];
- var targetIx = layoutInfo.idToIndex[ tempEdge.targetId ];
- var sourceGraph = layoutInfo.indexToGraph[ sourceIx ];
- var targetGraph = layoutInfo.indexToGraph[ targetIx ];
-
- if( sourceGraph != targetGraph ){
- // Find lowest common graph ancestor
- var lca = findLCA( tempEdge.sourceId, tempEdge.targetId, layoutInfo );
-
- // Compute sum of node depths, relative to lca graph
- var lcaGraph = layoutInfo.graphSet[ lca ];
- var depth = 0;
-
- // Source depth
- var tempNode = layoutInfo.layoutNodes[ sourceIx ];
- while( -1 === lcaGraph.indexOf( tempNode.id ) ){
- tempNode = layoutInfo.layoutNodes[ layoutInfo.idToIndex[ tempNode.parentId ] ];
- depth++;
- }
-
- // Target depth
- tempNode = layoutInfo.layoutNodes[ targetIx ];
- while( -1 === lcaGraph.indexOf( tempNode.id ) ){
- tempNode = layoutInfo.layoutNodes[ layoutInfo.idToIndex[ tempNode.parentId ] ];
- depth++;
- }
-
- // logDebug('LCA of nodes ' + tempEdge.sourceId + ' and ' + tempEdge.targetId +
- // ". Index: " + lca + " Contents: " + lcaGraph.toString() +
- // ". Depth: " + depth);
-
- // Update idealLength
- idealLength *= depth * options.nestingFactor;
- }
-
- tempEdge.idealLength = idealLength;
- tempEdge.elasticity = elasticity;
-
- layoutInfo.layoutEdges.push( tempEdge );
- }
-
- // Finally, return layoutInfo object
- return layoutInfo;
-};
-
-
-/**
- * @brief : This function finds the index of the lowest common
- * graph ancestor between 2 nodes in the subtree
- * (from the graph hierarchy induced tree) whose
- * root is graphIx
- *
- * @arg node1: node1's ID
- * @arg node2: node2's ID
- * @arg layoutInfo: layoutInfo object
- *
- */
-var findLCA = function( node1, node2, layoutInfo ){
- // Find their common ancester, starting from the root graph
- var res = findLCA_aux( node1, node2, 0, layoutInfo );
- if( 2 > res.count ){
- // If aux function couldn't find the common ancester,
- // then it is the root graph
- return 0;
- } else {
- return res.graph;
- }
-};
-
-
-/**
- * @brief : Auxiliary function used for LCA computation
- *
- * @arg node1 : node1's ID
- * @arg node2 : node2's ID
- * @arg graphIx : subgraph index
- * @arg layoutInfo : layoutInfo object
- *
- * @return : object of the form {count: X, graph: Y}, where:
- * X is the number of ancesters (max: 2) found in
- * graphIx (and it's subgraphs),
- * Y is the graph index of the lowest graph containing
- * all X nodes
- */
-var findLCA_aux = function( node1, node2, graphIx, layoutInfo ){
- var graph = layoutInfo.graphSet[ graphIx ];
- // If both nodes belongs to graphIx
- if( -1 < graph.indexOf( node1 ) && -1 < graph.indexOf( node2 ) ){
- return {count: 2, graph: graphIx};
- }
-
- // Make recursive calls for all subgraphs
- var c = 0;
- for( var i = 0; i < graph.length; i++ ){
- var nodeId = graph[ i ];
- var nodeIx = layoutInfo.idToIndex[ nodeId ];
- var children = layoutInfo.layoutNodes[ nodeIx ].children;
-
- // If the node has no child, skip it
- if( 0 === children.length ){
- continue;
- }
-
- var childGraphIx = layoutInfo.indexToGraph[ layoutInfo.idToIndex[ children[0] ] ];
- var result = findLCA_aux( node1, node2, childGraphIx, layoutInfo );
- if( 0 === result.count ){
- // Neither node1 nor node2 are present in this subgraph
- continue;
- } else if( 1 === result.count ){
- // One of (node1, node2) is present in this subgraph
- c++;
- if( 2 === c ){
- // We've already found both nodes, no need to keep searching
- break;
- }
- } else {
- // Both nodes are present in this subgraph
- return result;
- }
- }
-
- return {count: c, graph: graphIx};
-};
-
-
-/**
- * @brief: printsLayoutInfo into js console
- * Only used for debbuging
- */
-var printLayoutInfo = function( layoutInfo ){
- /* eslint-disable */
-
- if( !DEBUG ){
- return;
- }
- console.debug( 'layoutNodes:' );
- for( var i = 0; i < layoutInfo.nodeSize; i++ ){
- var n = layoutInfo.layoutNodes[ i ];
- var s =
- '\nindex: ' + i +
- '\nId: ' + n.id +
- '\nChildren: ' + n.children.toString() +
- '\nparentId: ' + n.parentId +
- '\npositionX: ' + n.positionX +
- '\npositionY: ' + n.positionY +
- '\nOffsetX: ' + n.offsetX +
- '\nOffsetY: ' + n.offsetY +
- '\npadLeft: ' + n.padLeft +
- '\npadRight: ' + n.padRight +
- '\npadTop: ' + n.padTop +
- '\npadBottom: ' + n.padBottom;
-
- console.debug( s );
- }
-
- console.debug( 'idToIndex' );
- for( var i in layoutInfo.idToIndex ){
- console.debug( 'Id: ' + i + '\nIndex: ' + layoutInfo.idToIndex[ i ] );
- }
-
- console.debug( 'Graph Set' );
- var set = layoutInfo.graphSet;
- for( var i = 0; i < set.length; i ++ ){
- console.debug( 'Set : ' + i + ': ' + set[ i ].toString() );
- }
-
- var s = 'IndexToGraph';
- for( var i = 0; i < layoutInfo.indexToGraph.length; i ++ ){
- s += '\nIndex : ' + i + ' Graph: ' + layoutInfo.indexToGraph[ i ];
- }
- console.debug( s );
-
- s = 'Layout Edges';
- for( var i = 0; i < layoutInfo.layoutEdges.length; i++ ){
- var e = layoutInfo.layoutEdges[ i ];
- s += '\nEdge Index: ' + i + ' ID: ' + e.id +
- ' SouceID: ' + e.sourceId + ' TargetId: ' + e.targetId +
- ' Ideal Length: ' + e.idealLength;
- }
- console.debug( s );
-
- s = 'nodeSize: ' + layoutInfo.nodeSize;
- s += '\nedgeSize: ' + layoutInfo.edgeSize;
- s += '\ntemperature: ' + layoutInfo.temperature;
- console.debug( s );
-
- return;
- /* eslint-enable */
-};
-
-
-/**
- * @brief : Randomizes the position of all nodes
- */
-var randomizePositions = function( layoutInfo, cy ){
- var width = layoutInfo.clientWidth;
- var height = layoutInfo.clientHeight;
-
- for( var i = 0; i < layoutInfo.nodeSize; i++ ){
- var n = layoutInfo.layoutNodes[ i ];
-
- // No need to randomize compound nodes or locked nodes
- if( 0 === n.children.length && !n.isLocked ){
- n.positionX = Math.random() * width;
- n.positionY = Math.random() * height;
- }
- }
-};
-
-
-/**
- * @brief : Updates the positions of nodes in the network
- * @arg layoutInfo : LayoutInfo object
- * @arg cy : Cytoscape object
- * @arg options : Layout options
- */
-var refreshPositions = function( layoutInfo, cy, options ){
- // var s = 'Refreshing positions';
- // logDebug(s);
-
- var layout = options.layout;
- var nodes = options.eles.nodes();
- var bb = layoutInfo.boundingBox;
- var coseBB = { x1: Infinity, x2: -Infinity, y1: Infinity, y2: -Infinity };
-
- if( options.boundingBox ){
- nodes.forEach( function( node ){
- var lnode = layoutInfo.layoutNodes[ layoutInfo.idToIndex[ node.data( 'id' ) ] ];
-
- coseBB.x1 = Math.min( coseBB.x1, lnode.positionX );
- coseBB.x2 = Math.max( coseBB.x2, lnode.positionX );
-
- coseBB.y1 = Math.min( coseBB.y1, lnode.positionY );
- coseBB.y2 = Math.max( coseBB.y2, lnode.positionY );
- } );
-
- coseBB.w = coseBB.x2 - coseBB.x1;
- coseBB.h = coseBB.y2 - coseBB.y1;
- }
-
- nodes.positions( function( i, ele ){
- var lnode = layoutInfo.layoutNodes[ layoutInfo.idToIndex[ ele.data( 'id' ) ] ];
- // s = "Node: " + lnode.id + ". Refreshed position: (" +
- // lnode.positionX + ", " + lnode.positionY + ").";
- // logDebug(s);
-
- if( options.boundingBox ){ // then add extra bounding box constraint
- var pctX = (lnode.positionX - coseBB.x1) / coseBB.w;
- var pctY = (lnode.positionY - coseBB.y1) / coseBB.h;
-
- return {
- x: bb.x1 + pctX * bb.w,
- y: bb.y1 + pctY * bb.h
- };
- } else {
- return {
- x: lnode.positionX,
- y: lnode.positionY
- };
- }
- } );
-
- // Trigger layoutReady only on first call
- if( true !== layoutInfo.ready ){
- // s = 'Triggering layoutready';
- // logDebug(s);
- layoutInfo.ready = true;
- layout.one( 'layoutready', options.ready );
- layout.trigger( { type: 'layoutready', layout: this } );
- }
-};
-
-/**
- * @brief : Logs a debug message in JS console, if DEBUG is ON
- */
-// var logDebug = function(text) {
-// if (DEBUG) {
-// console.debug(text);
-// }
-// };
-
-module.exports = CoseLayout;
-
-},{"../../is":83,"../../math":85,"../../thread":98,"../../util":100}],52:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../../util' );
-var math = _dereq_( '../../math' );
-
-var defaults = {
- fit: true, // whether to fit the viewport to the graph
- padding: 30, // padding used on fit
- boundingBox: undefined, // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }
- avoidOverlap: true, // prevents node overlap, may overflow boundingBox if not enough space
- avoidOverlapPadding: 10, // extra spacing around nodes when avoidOverlap: true
- condense: false, // uses all available space on false, uses minimal space on true
- rows: undefined, // force num of rows in the grid
- cols: undefined, // force num of columns in the grid
- position: function( node ){}, // returns { row, col } for element
- sort: undefined, // a sorting function to order the nodes; e.g. function(a, b){ return a.data('weight') - b.data('weight') }
- animate: false, // whether to transition the node positions
- animationDuration: 500, // duration of animation in ms if enabled
- animationEasing: undefined, // easing of animation if enabled
- ready: undefined, // callback on layoutready
- stop: undefined // callback on layoutstop
-};
-
-function GridLayout( options ){
- this.options = util.extend( {}, defaults, options );
-}
-
-GridLayout.prototype.run = function(){
- var params = this.options;
- var options = params;
-
- var cy = params.cy;
- var eles = options.eles;
- var nodes = eles.nodes().not( ':parent' );
-
- if( options.sort ){
- nodes = nodes.sort( options.sort );
- }
-
- var bb = math.makeBoundingBox( options.boundingBox ? options.boundingBox : {
- x1: 0, y1: 0, w: cy.width(), h: cy.height()
- } );
-
- if( bb.h === 0 || bb.w === 0 ){
- nodes.layoutPositions( this, options, function(){
- return { x: bb.x1, y: bb.y1 };
- } );
-
- } else {
-
- // width/height * splits^2 = cells where splits is number of times to split width
- var cells = nodes.size();
- var splits = Math.sqrt( cells * bb.h / bb.w );
- var rows = Math.round( splits );
- var cols = Math.round( bb.w / bb.h * splits );
-
- var small = function( val ){
- if( val == null ){
- return Math.min( rows, cols );
- } else {
- var min = Math.min( rows, cols );
- if( min == rows ){
- rows = val;
- } else {
- cols = val;
- }
- }
- };
-
- var large = function( val ){
- if( val == null ){
- return Math.max( rows, cols );
- } else {
- var max = Math.max( rows, cols );
- if( max == rows ){
- rows = val;
- } else {
- cols = val;
- }
- }
- };
-
- var oRows = options.rows;
- var oCols = options.cols != null ? options.cols : options.columns;
-
- // if rows or columns were set in options, use those values
- if( oRows != null && oCols != null ){
- rows = oRows;
- cols = oCols;
- } else if( oRows != null && oCols == null ){
- rows = oRows;
- cols = Math.ceil( cells / rows );
- } else if( oRows == null && oCols != null ){
- cols = oCols;
- rows = Math.ceil( cells / cols );
- }
-
- // otherwise use the automatic values and adjust accordingly
-
- // if rounding was up, see if we can reduce rows or columns
- else if( cols * rows > cells ){
- var sm = small();
- var lg = large();
-
- // reducing the small side takes away the most cells, so try it first
- if( (sm - 1) * lg >= cells ){
- small( sm - 1 );
- } else if( (lg - 1) * sm >= cells ){
- large( lg - 1 );
- }
- } else {
-
- // if rounding was too low, add rows or columns
- while( cols * rows < cells ){
- var sm = small();
- var lg = large();
-
- // try to add to larger side first (adds less in multiplication)
- if( (lg + 1) * sm >= cells ){
- large( lg + 1 );
- } else {
- small( sm + 1 );
- }
- }
- }
-
- var cellWidth = bb.w / cols;
- var cellHeight = bb.h / rows;
-
- if( options.condense ){
- cellWidth = 0;
- cellHeight = 0;
- }
-
- if( options.avoidOverlap ){
- for( var i = 0; i < nodes.length; i++ ){
- var node = nodes[ i ];
- var pos = node._private.position;
-
- if( pos.x == null || pos.y == null ){ // for bb
- pos.x = 0;
- pos.y = 0;
- }
-
- var nbb = node.boundingBox();
- var p = options.avoidOverlapPadding;
-
- var w = nbb.w + p;
- var h = nbb.h + p;
-
- cellWidth = Math.max( cellWidth, w );
- cellHeight = Math.max( cellHeight, h );
- }
- }
-
- var cellUsed = {}; // e.g. 'c-0-2' => true
-
- var used = function( row, col ){
- return cellUsed[ 'c-' + row + '-' + col ] ? true : false;
- };
-
- var use = function( row, col ){
- cellUsed[ 'c-' + row + '-' + col ] = true;
- };
-
- // to keep track of current cell position
- var row = 0;
- var col = 0;
- var moveToNextCell = function(){
- col++;
- if( col >= cols ){
- col = 0;
- row++;
- }
- };
-
- // get a cache of all the manual positions
- var id2manPos = {};
- for( var i = 0; i < nodes.length; i++ ){
- var node = nodes[ i ];
- var rcPos = options.position( node );
-
- if( rcPos && (rcPos.row !== undefined || rcPos.col !== undefined) ){ // must have at least row or col def'd
- var pos = {
- row: rcPos.row,
- col: rcPos.col
- };
-
- if( pos.col === undefined ){ // find unused col
- pos.col = 0;
-
- while( used( pos.row, pos.col ) ){
- pos.col++;
- }
- } else if( pos.row === undefined ){ // find unused row
- pos.row = 0;
-
- while( used( pos.row, pos.col ) ){
- pos.row++;
- }
- }
-
- id2manPos[ node.id() ] = pos;
- use( pos.row, pos.col );
- }
- }
-
- var getPos = function( i, element ){
- var x, y;
-
- if( element.locked() || element.isParent() ){
- return false;
- }
-
- // see if we have a manual position set
- var rcPos = id2manPos[ element.id() ];
- if( rcPos ){
- x = rcPos.col * cellWidth + cellWidth / 2 + bb.x1;
- y = rcPos.row * cellHeight + cellHeight / 2 + bb.y1;
-
- } else { // otherwise set automatically
-
- while( used( row, col ) ){
- moveToNextCell();
- }
-
- x = col * cellWidth + cellWidth / 2 + bb.x1;
- y = row * cellHeight + cellHeight / 2 + bb.y1;
- use( row, col );
-
- moveToNextCell();
- }
-
- return { x: x, y: y };
-
- };
-
- nodes.layoutPositions( this, options, getPos );
- }
-
- return this; // chaining
-
-};
-
-module.exports = GridLayout;
-
-},{"../../math":85,"../../util":100}],53:[function(_dereq_,module,exports){
-'use strict';
-
-module.exports = [
- { name: 'breadthfirst', impl: _dereq_( './breadthfirst' ) },
- { name: 'circle', impl: _dereq_( './circle' ) },
- { name: 'concentric',impl: _dereq_( './concentric' ) },
- { name: 'cose', impl: _dereq_( './cose' ) },
- { name: 'grid', impl: _dereq_( './grid' ) },
- { name: 'null', impl: _dereq_( './null' ) },
- { name: 'preset', impl: _dereq_( './preset' ) },
- { name: 'random', impl: _dereq_( './random' ) }
-];
-
-},{"./breadthfirst":48,"./circle":49,"./concentric":50,"./cose":51,"./grid":52,"./null":54,"./preset":55,"./random":56}],54:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../../util' );
-
-// default layout options
-var defaults = {
- ready: function(){}, // on layoutready
- stop: function(){} // on layoutstop
-};
-
-// constructor
-// options : object containing layout options
-function NullLayout( options ){
- this.options = util.extend( {}, defaults, options );
-}
-
-// runs the layout
-NullLayout.prototype.run = function(){
- var options = this.options;
- var eles = options.eles; // elements to consider in the layout
- var layout = this;
-
- // cy is automatically populated for us in the constructor
- var cy = options.cy; // jshint ignore:line
-
- layout.trigger( 'layoutstart' );
-
- // puts all nodes at (0, 0)
- eles.nodes().positions( function(){
- return {
- x: 0,
- y: 0
- };
- } );
-
- // trigger layoutready when each node has had its position set at least once
- layout.one( 'layoutready', options.ready );
- layout.trigger( 'layoutready' );
-
- // trigger layoutstop when the layout stops (e.g. finishes)
- layout.one( 'layoutstop', options.stop );
- layout.trigger( 'layoutstop' );
-
- return this; // chaining
-};
-
-// called on continuous layouts to stop them before they finish
-NullLayout.prototype.stop = function(){
- return this; // chaining
-};
-
-module.exports = NullLayout;
-
-},{"../../util":100}],55:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../../util' );
-var is = _dereq_( '../../is' );
-
-var defaults = {
- positions: undefined, // map of (node id) => (position obj); or function(node){ return somPos; }
- zoom: undefined, // the zoom level to set (prob want fit = false if set)
- pan: undefined, // the pan level to set (prob want fit = false if set)
- fit: true, // whether to fit to viewport
- padding: 30, // padding on fit
- animate: false, // whether to transition the node positions
- animationDuration: 500, // duration of animation in ms if enabled
- animationEasing: undefined, // easing of animation if enabled
- ready: undefined, // callback on layoutready
- stop: undefined // callback on layoutstop
-};
-
-function PresetLayout( options ){
- this.options = util.extend( {}, defaults, options );
-}
-
-PresetLayout.prototype.run = function(){
- var options = this.options;
- var eles = options.eles;
-
- var nodes = eles.nodes();
- var posIsFn = is.fn( options.positions );
-
- function getPosition( node ){
- if( options.positions == null ){
- return null;
- }
-
- if( posIsFn ){
- return options.positions.apply( node, [ node ] );
- }
-
- var pos = options.positions[ node._private.data.id ];
-
- if( pos == null ){
- return null;
- }
-
- return pos;
- }
-
- nodes.layoutPositions( this, options, function( i, node ){
- var position = getPosition( node );
-
- if( node.locked() || position == null ){
- return false;
- }
-
- return position;
- } );
-
- return this; // chaining
-};
-
-module.exports = PresetLayout;
-
-},{"../../is":83,"../../util":100}],56:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../../util' );
-var math = _dereq_( '../../math' );
-
-var defaults = {
- fit: true, // whether to fit to viewport
- padding: 30, // fit padding
- boundingBox: undefined, // constrain layout bounds; { x1, y1, x2, y2 } or { x1, y1, w, h }
- animate: false, // whether to transition the node positions
- animationDuration: 500, // duration of animation in ms if enabled
- animationEasing: undefined, // easing of animation if enabled
- ready: undefined, // callback on layoutready
- stop: undefined // callback on layoutstop
-};
-
-function RandomLayout( options ){
- this.options = util.extend( {}, defaults, options );
-}
-
-RandomLayout.prototype.run = function(){
- var options = this.options;
- var cy = options.cy;
- var eles = options.eles;
- var nodes = eles.nodes().not( ':parent' );
-
- var bb = math.makeBoundingBox( options.boundingBox ? options.boundingBox : {
- x1: 0, y1: 0, w: cy.width(), h: cy.height()
- } );
-
- var getPos = function( i, node ){
- return {
- x: bb.x1 + Math.round( Math.random() * bb.w ),
- y: bb.y1 + Math.round( Math.random() * bb.h )
- };
- };
-
- nodes.layoutPositions( this, options, getPos );
-
- return this; // chaining
-};
-
-module.exports = RandomLayout;
-
-},{"../../math":85,"../../util":100}],57:[function(_dereq_,module,exports){
-'use strict';
-
-var math = _dereq_( '../../../math' );
-var is = _dereq_( '../../../is' );
-var util = _dereq_( '../../../util' );
-
-var BRp = {};
-
-BRp.arrowShapeWidth = 0.3;
-
-BRp.registerArrowShapes = function(){
- var arrowShapes = this.arrowShapes = {};
- var renderer = this;
-
- // Contract for arrow shapes:
- // 0, 0 is arrow tip
- // (0, 1) is direction towards node
- // (1, 0) is right
- //
- // functional api:
- // collide: check x, y in shape
- // roughCollide: called before collide, no false negatives
- // draw: draw
- // spacing: dist(arrowTip, nodeBoundary)
- // gap: dist(edgeTip, nodeBoundary), edgeTip may != arrowTip
-
- var bbCollide = function( x, y, size, angle, translation, padding ){
- var x1 = translation.x - size / 2 - padding;
- var x2 = translation.x + size / 2 + padding;
- var y1 = translation.y - size / 2 - padding;
- var y2 = translation.y + size / 2 + padding;
-
- var inside = (x1 <= x && x <= x2) && (y1 <= y && y <= y2);
-
- return inside;
- };
-
- var transform = function( x, y, size, angle, translation ){
- var xRotated = x * Math.cos( angle ) - y * Math.sin( angle );
- var yRotated = x * Math.sin( angle ) + y * Math.cos( angle );
-
- var xScaled = xRotated * size;
- var yScaled = yRotated * size;
-
- var xTranslated = xScaled + translation.x;
- var yTranslated = yScaled + translation.y;
-
- return {
- x: xTranslated,
- y: yTranslated
- };
- };
-
- var transformPoints = function( pts, size, angle, translation ){
- var retPts = [];
-
- for( var i = 0; i < pts.length; i += 2 ){
- var x = pts[ i ];
- var y = pts[ i + 1];
-
- retPts.push( transform( x, y, size, angle, translation ) );
- }
-
- return retPts;
- };
-
- var pointsToArr = function( pts ){
- var ret = [];
-
- for( var i = 0; i < pts.length; i++ ){
- var p = pts[ i ];
-
- ret.push( p.x, p.y );
- }
-
- return ret;
- };
-
- var defineArrowShape = function( name, defn ){
- if( is.string( defn ) ){
- defn = arrowShapes[ defn ];
- }
-
- arrowShapes[ name ] = util.extend( {
- name: name,
-
- points: [
- -0.15, -0.3,
- 0.15, -0.3,
- 0.15, 0.3,
- -0.15, 0.3
- ],
-
- collide: function( x, y, size, angle, translation, padding ){
- var points = pointsToArr( transformPoints( this.points, size + 2 * padding, angle, translation ) );
- var inside = math.pointInsidePolygonPoints( x, y, points );
-
- return inside;
- },
-
- roughCollide: bbCollide,
-
- draw: function( context, size, angle, translation ){
- var points = transformPoints( this.points, size, angle, translation );
-
- renderer.arrowShapeImpl( 'polygon' )( context, points );
- },
-
- spacing: function( edge ){
- return 0;
- },
-
- gap: function( edge ){
- return edge.pstyle( 'width' ).pfValue * 2;
- }
- }, defn );
- };
-
- defineArrowShape( 'none', {
- collide: util.falsify,
-
- roughCollide: util.falsify,
-
- draw: util.noop,
-
- spacing: util.zeroify,
-
- gap: util.zeroify
- } );
-
- defineArrowShape( 'triangle', {
- points: [
- -0.15, -0.3,
- 0, 0,
- 0.15, -0.3
- ]
- } );
-
- defineArrowShape( 'arrow', 'triangle' );
-
- defineArrowShape( 'triangle-backcurve', {
- points: arrowShapes[ 'triangle' ].points,
-
- controlPoint: [ 0, -0.15 ],
-
- roughCollide: bbCollide,
-
- draw: function( context, size, angle, translation ){
- var ptsTrans = transformPoints( this.points, size, angle, translation );
- var ctrlPt = this.controlPoint;
- var ctrlPtTrans = transform( ctrlPt[0], ctrlPt[1], size, angle, translation );
-
- renderer.arrowShapeImpl( this.name )( context, ptsTrans, ctrlPtTrans );
- },
-
- gap: function( edge ){
- return edge.pstyle( 'width' ).pfValue;
- }
- } );
-
-
- defineArrowShape( 'triangle-tee', {
- points: [
- -0.15, -0.3,
- 0, 0,
- 0.15, -0.3,
- -0.15, -0.3
- ],
-
- pointsTee: [
- -0.15, -0.4,
- -0.15, -0.5,
- 0.15, -0.5,
- 0.15, -0.4
- ],
-
- collide: function( x, y, size, angle, translation, padding ){
- var triPts = pointsToArr( transformPoints( this.points, size + 2 * padding, angle, translation ) );
- var teePts = pointsToArr( transformPoints( this.pointsTee, size + 2 * padding, angle, translation ) );
-
- var inside = math.pointInsidePolygonPoints( x, y, triPts ) || math.pointInsidePolygonPoints( x, y, teePts );
-
- return inside;
- },
-
- draw: function( context, size, angle, translation ){
- var triPts = transformPoints( this.points, size, angle, translation );
- var teePts = transformPoints( this.pointsTee, size, angle, translation );
-
- renderer.arrowShapeImpl( this.name )( context, triPts, teePts );
- }
- } );
-
- defineArrowShape( 'vee', {
- points: [
- -0.15, -0.3,
- 0, 0,
- 0.15, -0.3,
- 0, -0.15
- ],
-
- gap: function( edge ){
- return edge.pstyle( 'width' ).pfValue;
- }
- } );
-
- defineArrowShape( 'circle', {
- radius: 0.15,
-
- collide: function( x, y, size, angle, translation, padding ){
- var t = translation;
- var inside = ( Math.pow( t.x - x, 2 ) + Math.pow( t.y - y, 2 ) <= Math.pow( (size + 2 * padding) * this.radius, 2 ) );
-
- return inside;
- },
-
- draw: function( context, size, angle, translation ){
- renderer.arrowShapeImpl( this.name )( context, translation.x, translation.y, this.radius * size );
- },
-
- spacing: function( edge ){
- return renderer.getArrowWidth( edge.pstyle( 'width' ).pfValue )
- * this.radius;
- }
- } );
-
- defineArrowShape( 'inhibitor', {
- points: [
- -0.15, 0,
- -0.15, -0.1,
- 0.15, -0.1,
- 0.15, 0
- ],
-
- spacing: function( edge ){
- return 1;
- },
-
- gap: function( edge ){
- return 1;
- }
- } );
-
- defineArrowShape( 'tee', 'inhibitor' );
-
- defineArrowShape( 'square', {
- points: [
- -0.15, 0.00,
- 0.15, 0.00,
- 0.15, -0.3,
- -0.15, -0.3
- ]
- } );
-
- defineArrowShape( 'diamond', {
- points: [
- -0.15, -0.15,
- 0, -0.3,
- 0.15, -0.15,
- 0, 0
- ],
-
- gap: function( edge ){
- return edge.pstyle( 'width' ).pfValue;
- }
- } );
-
-};
-
-module.exports = BRp;
-
-},{"../../../is":83,"../../../math":85,"../../../util":100}],58:[function(_dereq_,module,exports){
-'use strict';
-
-var math = _dereq_( '../../../math' );
-var is = _dereq_( '../../../is' );
-var util = _dereq_( '../../../util' );
-var zIndexSort = _dereq_( '../../../collection/zsort' );
-
-var BRp = {};
-
-BRp.registerCalculationListeners = function(){
- var cy = this.cy;
- var elesToUpdate = cy.collection();
- var r = this;
-
- var enqueue = function( eles, e ){
- elesToUpdate.merge( eles );
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[i];
- var _p = ele._private;
- var rstyle = _p.rstyle;
-
- rstyle.clean = false;
- _p.bbCache = null;
-
- var evts = rstyle.dirtyEvents = rstyle.dirtyEvents || { length: 0 };
-
- if( !evts[ e.type ] ){
- evts[ e.type ] = true;
- evts.length++;
-//
- // elesToUpdate.merge( ele );
- }
- }
- };
-
- r.binder( cy )
- // nodes
-
- .on('position.* style.* free.*', 'node', function onDirtyModNode( e ){
- var node = e.cyTarget;
-
- enqueue( node, e );
- enqueue( node.connectedEdges(), e );
-
- if( cy.hasCompoundNodes() ){
- var parents = node.parents();
-
- enqueue( parents, e );
- enqueue( parents.connectedEdges(), e );
- }
- })
-
- .on('add.* background.*', 'node', function onDirtyAddNode( e ){
- var ele = e.cyTarget;
-
- enqueue( ele, e );
- })
-
- // edges
-
- .on('add.* style.*', 'edge', function onDirtyEdge( e ){
- var edge = e.cyTarget;
-
- enqueue( edge, e );
- enqueue( edge.parallelEdges(), e );
- })
-
- .on('remove.*', 'edge', function onDirtyRemoveEdge( e ){
- var edge = e.cyTarget;
- var pEdges = edge.parallelEdges();
-
- for( var i = 0; i < pEdges.length; i++ ){
- var pEdge = pEdges[i];
-
- if( !pEdge.removed() ){
- enqueue( pEdge, e );
- }
- }
- })
- ;
-
- var updateEleCalcs = function( willDraw ){
- if( willDraw ){
- var fns = r.onUpdateEleCalcsFns;
-
- if( fns ){ for( var i = 0; i < fns.length; i++ ){
- var fn = fns[i];
-
- fn( willDraw, elesToUpdate );
- } }
-
- r.recalculateRenderedStyle( elesToUpdate, false );
-
- for( var i = 0; i < elesToUpdate.length; i++ ){
- elesToUpdate[i]._private.rstyle.dirtyEvents = null;
- }
-
- elesToUpdate = cy.collection();
- }
- };
-
- r.beforeRender( updateEleCalcs, r.beforeRenderPriorities.eleCalcs );
-};
-
-BRp.onUpdateEleCalcs = function( fn ){
- var fns = this.onUpdateEleCalcsFns = this.onUpdateEleCalcsFns || [];
-
- fns.push( fn );
-};
-
-BRp.recalculateRenderedStyle = function( eles, useCache ){
- var edges = [];
- var nodes = [];
-
- // use cache by default for perf
- if( useCache === undefined ){ useCache = true; }
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
- var _p = ele._private;
- var rstyle = _p.rstyle;
-
- // only update if dirty and in graph
- if( (useCache && rstyle.clean) || ele.removed() ){ continue; }
-
- if( _p.group === 'nodes' ){
- var pos = _p.position;
-
- nodes.push( ele );
-
- rstyle.nodeX = pos.x;
- rstyle.nodeY = pos.y;
- rstyle.nodeW = ele.pstyle( 'width' ).pfValue;
- rstyle.nodeH = ele.pstyle( 'height' ).pfValue;
- } else { // edges
-
- edges.push( ele );
-
- } // if edges
-
- rstyle.clean = true;
- // rstyle.dirtyEvents = null;
- }
-
- this.recalculateEdgeProjections( edges );
- this.recalculateLabelProjections( nodes, edges );
-
- // update edge data from projections
- for( var i = 0; i < edges.length; i++ ){
- var ele = edges[ i ];
- var _p = ele._private;
- var rstyle = _p.rstyle;
- var rs = _p.rscratch;
-
- // update rstyle positions
- rstyle.srcX = rs.arrowStartX;
- rstyle.srcY = rs.arrowStartY;
- rstyle.tgtX = rs.arrowEndX;
- rstyle.tgtY = rs.arrowEndY;
- rstyle.midX = rs.midX;
- rstyle.midY = rs.midY;
- rstyle.labelAngle = rs.labelAngle;
- rstyle.sourceLabelAngle = rs.sourceLabelAngle;
- rstyle.targetLabelAngle = rs.targetLabelAngle;
- }
-};
-
-// Project mouse
-BRp.projectIntoViewport = function( clientX, clientY ){
- var offsets = this.findContainerClientCoords();
- var offsetLeft = offsets[0];
- var offsetTop = offsets[1];
-
- var x = clientX - offsetLeft;
- var y = clientY - offsetTop;
-
- x -= this.cy.pan().x; y -= this.cy.pan().y; x /= this.cy.zoom(); y /= this.cy.zoom();
- return [ x, y ];
-};
-
-BRp.findContainerClientCoords = function(){
- var container = this.container;
-
- var bb = this.containerBB = this.containerBB || container.getBoundingClientRect();
-
- return [ bb.left, bb.top, bb.right - bb.left, bb.bottom - bb.top ];
-};
-
-BRp.invalidateContainerClientCoordsCache = function(){
- this.containerBB = null;
-};
-
-BRp.findNearestElement = function( x, y, visibleElementsOnly, isTouch ){
- return this.findNearestElements( x, y, visibleElementsOnly, isTouch )[0];
-};
-
-BRp.findNearestElements = function( x, y, visibleElementsOnly, isTouch ){
- var self = this;
- var r = this;
- var eles = r.getCachedZSortedEles();
- var near = []; // 1 node max, 1 edge max
- var zoom = r.cy.zoom();
- var hasCompounds = r.cy.hasCompoundNodes();
- var edgeThreshold = (isTouch ? 24 : 8) / zoom;
- var nodeThreshold = (isTouch ? 8 : 2) / zoom;
- var labelThreshold = (isTouch ? 8 : 2) / zoom;
- var minSqDist = Infinity;
- var nearEdge;
- var nearNode;
-
- function addEle( ele, sqDist ){
- if( ele.isNode() ){
- if( nearNode ){
- return; // can't replace node
- } else {
- nearNode = ele;
- near.push( ele );
- }
- }
-
- if( ele.isEdge() && ( sqDist == null || sqDist < minSqDist ) ){
- if( nearEdge ){ // then replace existing edge
- // can replace only if same z-index
- if( nearEdge.pstyle( 'z-index' ).value === ele.pstyle('z-index').value ){
- for( var i = 0; i < near.length; i++ ){
- if( near[i].isEdge() ){
- near[i] = ele;
- nearEdge = ele;
- minSqDist = sqDist != null ? sqDist : minSqDist;
- break;
- }
- }
- }
- } else {
- near.push( ele );
- nearEdge = ele;
- minSqDist = sqDist != null ? sqDist : minSqDist;
- }
- }
- }
-
- function checkNode( node ){
- var _p = node._private;
-
- if( node.pstyle( 'events' ).strValue === 'no' ){ return; }
-
- var width = node.outerWidth() + 2 * nodeThreshold;
- var height = node.outerHeight() + 2 * nodeThreshold;
- var hw = width / 2;
- var hh = height / 2;
- var pos = _p.position;
-
- if(
- pos.x - hw <= x && x <= pos.x + hw // bb check x
- &&
- pos.y - hh <= y && y <= pos.y + hh // bb check y
- ){
- var visible = !visibleElementsOnly || ( node.visible() && !node.transparent() );
-
- // exit early if invisible edge and must be visible
- if( visibleElementsOnly && !visible ){
- return;
- }
-
- var shape = r.nodeShapes[ self.getNodeShape( node ) ];
-
- if(
- shape.checkPoint( x, y, 0, width, height, pos.x, pos.y )
- ){
- addEle( node, 0 );
- }
-
- }
- }
-
- function checkEdge( edge ){
- var _p = edge._private;
-
- if( edge.pstyle('events').strValue === 'no' ){ return; }
-
- var rs = _p.rscratch;
- var width = edge.pstyle( 'width' ).pfValue / 2 + edgeThreshold; // more like a distance radius from centre
- var widthSq = width * width;
- var width2 = width * 2;
- var src = _p.source;
- var tgt = _p.target;
- var inEdgeBB = false;
- var sqDist;
-
- // exit early if invisible edge and must be visible
- var passedVisibilityCheck;
- var passesVisibilityCheck = function(){
- if( passedVisibilityCheck !== undefined ){
- return passedVisibilityCheck;
- }
-
- if( !visibleElementsOnly ){
- passedVisibilityCheck = true;
- return true;
- }
-
- var visible = edge.visible() && !edge.transparent();
- if( visible ){
- passedVisibilityCheck = true;
- return true;
- }
-
- passedVisibilityCheck = false;
- return false;
- };
-
- if( rs.edgeType === 'segments' || rs.edgeType === 'straight' || rs.edgeType === 'haystack' ){
- var pts = rs.allpts;
-
- for( var i = 0; i + 3 < pts.length; i += 2 ){
- if(
- (inEdgeBB = math.inLineVicinity( x, y, pts[ i ], pts[ i + 1], pts[ i + 2], pts[ i + 3], width2 ))
- && passesVisibilityCheck() &&
- widthSq > ( sqDist = math.sqdistToFiniteLine( x, y, pts[ i ], pts[ i + 1], pts[ i + 2], pts[ i + 3] ) )
- ){
- addEle( edge, sqDist );
- }
- }
-
- } else if( rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound' ){
- var pts = rs.allpts;
- for( var i = 0; i + 5 < rs.allpts.length; i += 4 ){
- if(
- (inEdgeBB = math.inBezierVicinity( x, y, pts[ i ], pts[ i + 1], pts[ i + 2], pts[ i + 3], pts[ i + 4], pts[ i + 5], width2 ))
- && passesVisibilityCheck() &&
- (widthSq > (sqDist = math.sqdistToQuadraticBezier( x, y, pts[ i ], pts[ i + 1], pts[ i + 2], pts[ i + 3], pts[ i + 4], pts[ i + 5] )) )
- ){
- addEle( edge, sqDist );
- }
- }
- }
-
- // if we're close to the edge but didn't hit it, maybe we hit its arrows
- if( inEdgeBB && passesVisibilityCheck() ){
- var src = src || _p.source;
- var tgt = tgt || _p.target;
-
- var eWidth = edge.pstyle( 'width' ).pfValue;
- var arSize = self.getArrowWidth( eWidth );
-
- var arrows = [
- { name: 'source', x: rs.arrowStartX, y: rs.arrowStartY, angle: rs.srcArrowAngle },
- { name: 'target', x: rs.arrowEndX, y: rs.arrowEndY, angle: rs.tgtArrowAngle },
- { name: 'mid-source', x: rs.midX, y: rs.midY, angle: rs.midsrcArrowAngle },
- { name: 'mid-target', x: rs.midX, y: rs.midY, angle: rs.midtgtArrowAngle }
- ];
-
- for( var i = 0; i < arrows.length; i++ ){
- var ar = arrows[ i ];
- var shape = r.arrowShapes[ edge.pstyle( ar.name + '-arrow-shape' ).value ];
-
- if(
- shape.roughCollide( x, y, arSize, ar.angle, { x: ar.x, y: ar.y }, edgeThreshold )
- &&
- shape.collide( x, y, arSize, ar.angle, { x: ar.x, y: ar.y }, edgeThreshold )
- ){
- addEle( edge );
- break;
- }
- }
- }
-
- // for compound graphs, hitting edge may actually want a connected node instead (b/c edge may have greater z-index precedence)
- if( hasCompounds && near.length > 0 ){
- checkNode( src );
- checkNode( tgt );
- }
- }
-
- function preprop( obj, name, pre ){
- return util.getPrefixedProperty( obj, name, pre );
- }
-
- function checkLabel( ele, prefix ){
- var _p = ele._private;
- var th = labelThreshold;
-
- var prefixDash;
- if( prefix ){
- prefixDash = prefix + '-';
- } else {
- prefixDash = '';
- }
-
- if( ele.pstyle( 'text-events' ).strValue === 'no' ){ return; }
-
- var rotation = ele.pstyle( prefixDash + 'text-rotation' );
-
- // adjust bb w/ angle
- if( rotation.strValue === 'autorotate' || !!rotation.pfValue ){
-
- var rstyle = _p.rstyle;
- var bw = ele.pstyle('text-border-width').pfValue;
- var lw = preprop( rstyle, 'labelWidth', prefix ) + bw/2 + 2*th;
- var lh = preprop( rstyle, 'labelHeight', prefix ) + bw/2 + 2*th;
- var lx = preprop( rstyle, 'labelX', prefix );
- var ly = preprop( rstyle, 'labelY', prefix );
-
- var theta = preprop( _p.rscratch, 'labelAngle', prefix );
- var cos = Math.cos( theta );
- var sin = Math.sin( theta );
-
- var rotate = function( x, y ){
- x = x - lx;
- y = y - ly;
-
- return {
- x: x * cos - y * sin + lx,
- y: x * sin + y * cos + ly
- };
- };
-
- var lx1 = lx - lw / 2;
- var lx2 = lx + lw / 2;
- var ly1 = ly - lh / 2;
- var ly2 = ly + lh / 2;
-
- var px1y1 = rotate( lx1, ly1 );
- var px1y2 = rotate( lx1, ly2 );
- var px2y1 = rotate( lx2, ly1 );
- var px2y2 = rotate( lx2, ly2 );
-
- var points = [
- px1y1.x, px1y1.y,
- px2y1.x, px2y1.y,
- px2y2.x, px2y2.y,
- px1y2.x, px1y2.y
- ];
-
- if( math.pointInsidePolygonPoints( x, y, points ) ){
- addEle( ele );
- }
-
- } else {
- var bb = ele.boundingBox( {
- includeLabels: true,
- includeNodes: false,
- includeEdges: false
- } );
-
- // adjust bb w/ threshold
- bb.x1 -= th;
- bb.y1 -= th;
- bb.x2 += th;
- bb.y2 += th;
- bb.w = bb.x2 - bb.x1;
- bb.h = bb.y2 - bb.y1;
-
- if( math.inBoundingBox( bb, x, y ) ){
- addEle( ele );
- }
- }
-
- }
-
- for( var i = eles.length - 1; i >= 0; i-- ){ // reverse order for precedence
- var ele = eles[ i ];
-
- if( ele.isNode() ){
- checkNode( ele );
-
- checkLabel( ele );
-
- } else { // then edge
- checkEdge( ele );
-
- checkLabel( ele );
- checkLabel( ele, 'source' );
- checkLabel( ele, 'target' );
- }
- }
-
- return near;
-};
-
-// 'Give me everything from this box'
-BRp.getAllInBox = function( x1, y1, x2, y2 ){
- var eles = this.getCachedZSortedEles();
- var nodes = eles.nodes;
- var edges = eles.edges;
- var box = [];
-
- var x1c = Math.min( x1, x2 );
- var x2c = Math.max( x1, x2 );
- var y1c = Math.min( y1, y2 );
- var y2c = Math.max( y1, y2 );
-
- x1 = x1c;
- x2 = x2c;
- y1 = y1c;
- y2 = y2c;
-
- var boxBb = math.makeBoundingBox( {
- x1: x1, y1: y1,
- x2: x2, y2: y2
- } );
-
- for( var i = 0; i < nodes.length; i++ ){
- var node = nodes[ i ];
- var nodeBb = node.boundingBox( {
- includeNodes: true,
- includeEdges: false,
- includeLabels: false,
- includeShadows: false
- } );
-
- if( math.boundingBoxesIntersect( boxBb, nodeBb ) ){
- box.push( nodes[ i ] );
- }
- }
-
- for( var e = 0; e < edges.length; e++ ){
- var edge = edges[ e ];
- var _p = edge._private;
- var rs = _p.rscratch;
-
- if( rs.startX != null && rs.startY != null && !math.inBoundingBox( boxBb, rs.startX, rs.startY ) ){ continue; }
- if( rs.endX != null && rs.endY != null && !math.inBoundingBox( boxBb, rs.endX, rs.endY ) ){ continue; }
-
- if( rs.edgeType === 'bezier' || rs.edgeType === 'multibezier' || rs.edgeType === 'self' || rs.edgeType === 'compound' || rs.edgeType === 'segments' || rs.edgeType === 'haystack' ){
-
- var pts = _p.rstyle.bezierPts || _p.rstyle.linePts || _p.rstyle.haystackPts;
- var allInside = true;
-
- for( var i = 0; i < pts.length; i++ ){
- if( !math.pointInBoundingBox( boxBb, pts[ i ] ) ){
- allInside = false;
- break;
- }
- }
-
- if( allInside ){
- box.push( edge );
- }
-
- } else if( rs.edgeType === 'haystack' || rs.edgeType === 'straight' ){
- box.push( edge );
- }
-
- }
-
- return box;
-};
-
-
-/**
- * Returns the shape of the given node. If the height or width of the given node
- * is set to auto, the node is considered to be a compound.
- *
- * @param node a node
- * @return {String} shape of the node
- */
-BRp.getNodeShape = function( node ){
- var r = this;
- var shape = node.pstyle( 'shape' ).value;
-
- if( node.isParent() ){
- if( shape === 'rectangle' || shape === 'roundrectangle' ){
- return shape;
- } else {
- return 'rectangle';
- }
- }
-
- if( shape === 'polygon' ){
- var points = node.pstyle( 'shape-polygon-points' ).value;
-
- return r.nodeShapes.makePolygon( points ).name;
- }
-
- return shape;
-};
-
-BRp.updateCachedZSortedEles = function(){
- this.getCachedZSortedEles( true );
-};
-
-BRp.updateCachedGrabbedEles = function(){
- var eles = this.cachedZSortedEles;
-
- eles.drag = [];
- eles.nondrag = [];
-
- var grabTarget;
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[i];
- var rs = ele._private.rscratch;
-
- if( rs.isGrabTarget && !ele.isParent() ){
- grabTarget = ele;
- } else if( rs.inDragLayer ){
- eles.drag.push( ele );
- } else {
- eles.nondrag.push( ele );
- }
- }
-
- // put the grab target node last so it's on top of its neighbourhood
- if( grabTarget ){
- eles.drag.push( grabTarget );
- }
-};
-
-BRp.getCachedZSortedEles = function( forceRecalc ){
- if( forceRecalc || !this.cachedZSortedEles ){
- //console.time('cachezorder')
-
- var cyEles = this.cy.mutableElements();
- var eles = [];
-
- eles.nodes = [];
- eles.edges = [];
-
- for( var i = 0; i < cyEles.length; i++ ){
- var ele = cyEles[i];
-
- if( ele.animated() || (ele.visible() && !ele.transparent()) ){
- eles.push( ele );
-
- if( ele.isNode() ){
- eles.nodes.push( ele );
- } else {
- eles.edges.push( ele );
- }
- }
- }
-
- eles.sort( zIndexSort );
-
- this.cachedZSortedEles = eles;
-
- this.updateCachedGrabbedEles();
-
- //console.log('make cache')
-
- //console.timeEnd('cachezorder')
- } else {
- eles = this.cachedZSortedEles;
- //console.log('read cache')
- }
-
- return eles;
-};
-
-function pushBezierPts( r, edge, pts ){
- var qbezierAt = function( p1, p2, p3, t ){ return math.qbezierAt( p1, p2, p3, t ); };
- var _p = edge._private;
- var bpts = _p.rstyle.bezierPts;
-
- for( var i = 0; i < r.bezierProjPcts.length; i++ ){
- var p = r.bezierProjPcts[i];
-
- bpts.push( {
- x: qbezierAt( pts[0], pts[2], pts[4], p ),
- y: qbezierAt( pts[1], pts[3], pts[5], p )
- } );
- }
-}
-
-BRp.projectLines = function( edge ){
- var _p = edge._private;
- var rs = _p.rscratch;
- var et = rs.edgeType;
-
- // clear the cached points state
- _p.rstyle.bezierPts = null;
- _p.rstyle.linePts = null;
- _p.rstyle.haystackPts = null;
-
- if( et === 'multibezier' || et === 'bezier' || et === 'self' || et === 'compound' ){
- var bpts = _p.rstyle.bezierPts = []; // jshint ignore:line
-
- for( var i = 0; i + 5 < rs.allpts.length; i += 4 ){
- pushBezierPts( this, edge, rs.allpts.slice( i, i + 6 ) );
- }
- } else if( et === 'segments' ){
- var lpts = _p.rstyle.linePts = [];
-
- for( var i = 0; i + 1 < rs.allpts.length; i += 2 ){
- lpts.push( {
- x: rs.allpts[ i ],
- y: rs.allpts[ i + 1]
- } );
- }
- } else if( et === 'haystack' ){
- var hpts = rs.haystackPts;
-
- _p.rstyle.haystackPts = [
- { x: hpts[0], y: hpts[1] },
- { x: hpts[2], y: hpts[3] }
- ];
- }
-
- _p.rstyle.arrowWidth = this.getArrowWidth( edge.pstyle('width').pfValue ) * this.arrowShapeWidth;
-};
-
-BRp.projectBezier = BRp.projectLines;
-
-BRp.recalculateNodeLabelProjection = function( node ){
- var content = node.pstyle( 'label' ).strValue;
-
- if( is.emptyString(content) ){ return; }
-
- var textX, textY;
- var _p = node._private;
- var nodeWidth = node.width();
- var nodeHeight = node.height();
- var paddingLeft = node.pstyle('padding-left').pfValue;
- var paddingRight = node.pstyle('padding-right').pfValue;
- var paddingTop = node.pstyle('padding-top').pfValue;
- var paddingBottom = node.pstyle('padding-bottom').pfValue;
- var nodePos = _p.position;
- var textHalign = node.pstyle( 'text-halign' ).strValue;
- var textValign = node.pstyle( 'text-valign' ).strValue;
- var rs = _p.rscratch;
- var rstyle = _p.rstyle;
-
- switch( textHalign ){
- case 'left':
- textX = nodePos.x - nodeWidth / 2 - paddingLeft;
- break;
-
- case 'right':
- textX = nodePos.x + nodeWidth / 2 + paddingRight;
- break;
-
- default: // e.g. center
- textX = nodePos.x;
- }
-
- switch( textValign ){
- case 'top':
- textY = nodePos.y - nodeHeight / 2 - paddingTop;
- break;
-
- case 'bottom':
- textY = nodePos.y + nodeHeight / 2 + paddingBottom;
- break;
-
- default: // e.g. middle
- textY = nodePos.y;
- }
-
- rs.labelX = textX;
- rs.labelY = textY;
- rstyle.labelX = textX;
- rstyle.labelY = textY;
-
- this.applyLabelDimensions( node );
-};
-
-BRp.recalculateEdgeLabelProjections = function( edge ){
- var p;
- var _p = edge._private;
- var rs = _p.rscratch;
- var r = this;
- var content = {
- mid: edge.pstyle('label').strValue,
- source: edge.pstyle('source-label').strValue,
- target: edge.pstyle('target-label').strValue
- };
-
- if( content.mid || content.source || content.target ){
- // then we have to calculate...
- } else {
- return; // no labels => no calcs
- }
-
- // add center point to style so bounding box calculations can use it
- //
- p = {
- x: rs.midX,
- y: rs.midY
- };
-
- var setRs = function( propName, prefix, value ){
- util.setPrefixedProperty( _p.rscratch, propName, prefix, value );
- util.setPrefixedProperty( _p.rstyle, propName, prefix, value );
- };
-
- setRs( 'labelX', null, p.x );
- setRs( 'labelY', null, p.y );
-
- var createControlPointInfo = function(){
- if( createControlPointInfo.cache ){ return createControlPointInfo.cache; } // use cache so only 1x per edge
-
- var ctrlpts = [];
-
- // store each ctrlpt info init
- for( var i = 0; i + 5 < rs.allpts.length; i += 4 ){
- var p0 = { x: rs.allpts[i], y: rs.allpts[i+1] };
- var p1 = { x: rs.allpts[i+2], y: rs.allpts[i+3] }; // ctrlpt
- var p2 = { x: rs.allpts[i+4], y: rs.allpts[i+5] };
-
- ctrlpts.push({
- p0: p0,
- p1: p1,
- p2: p2,
- startDist: 0,
- length: 0,
- segments: []
- });
- }
-
- var bpts = _p.rstyle.bezierPts;
- var nProjs = r.bezierProjPcts.length;
-
- function addSegment( cp, p0, p1, t0, t1 ){
- var length = math.dist( p0, p1 );
- var prevSegment = cp.segments[ cp.segments.length - 1 ];
- var segment = {
- p0: p0,
- p1: p1,
- t0: t0,
- t1: t1,
- startDist: prevSegment ? prevSegment.startDist + prevSegment.length : 0,
- length: length
- };
-
- cp.segments.push( segment );
-
- cp.length += length;
- }
-
- // update each ctrlpt with segment info
- for( var i = 0; i < ctrlpts.length; i++ ){
- var cp = ctrlpts[i];
- var prevCp = ctrlpts[i - 1];
-
- if( prevCp ){
- cp.startDist = prevCp.startDist + prevCp.length;
- }
-
- addSegment(
- cp,
- cp.p0, bpts[ i * nProjs ],
- 0, r.bezierProjPcts[ 0 ]
- ); // first
-
- for( var j = 0; j < nProjs - 1; j++ ){
- addSegment(
- cp,
- bpts[ i * nProjs + j ], bpts[ i * nProjs + j + 1 ],
- r.bezierProjPcts[ j ], r.bezierProjPcts[ j + 1 ]
- );
- }
-
- addSegment(
- cp,
- bpts[ i * nProjs + nProjs - 1 ], cp.p2,
- r.bezierProjPcts[ nProjs - 1 ], 1
- ); // last
- }
-
- return ( createControlPointInfo.cache = ctrlpts );
- };
-
- var calculateEndProjection = function( prefix ){
- var angle;
- var isSrc = prefix === 'source';
-
- if( !content[ prefix ] ){ return; }
-
- var offset = edge.pstyle(prefix+'-text-offset').pfValue;
-
- var lineAngle = function( p0, p1 ){
- var dx = p1.x - p0.x;
- var dy = p1.y - p0.y;
-
- return Math.atan( dy / dx );
- };
-
- var bezierAngle = function( p0, p1, p2, t ){
- var t0 = math.bound( 0, t - 0.001, 1 );
- var t1 = math.bound( 0, t + 0.001, 1 );
-
- var lp0 = math.qbezierPtAt( p0, p1, p2, t0 );
- var lp1 = math.qbezierPtAt( p0, p1, p2, t1 );
-
- return lineAngle( lp0, lp1 );
- };
-
- switch( rs.edgeType ){
- case 'self':
- case 'compound':
- case 'bezier':
- case 'multibezier':
- var cps = createControlPointInfo();
- var selected;
- var startDist = 0;
- var totalDist = 0;
-
- // find the segment we're on
- for( var i = 0; i < cps.length; i++ ){
- var cp = cps[ isSrc ? i : cps.length - 1 - i ];
-
- for( var j = 0; j < cp.segments.length; j++ ){
- var seg = cp.segments[ isSrc ? j : cp.segments.length - 1 - j ];
- var lastSeg = i === cps.length - 1 && j === cp.segments.length - 1;
-
- startDist = totalDist;
- totalDist += seg.length;
-
- if( totalDist >= offset || lastSeg ){
- selected = { cp: cp, segment: seg };
- break;
- }
- }
-
- if( selected ){ break; }
- }
-
- var cp = selected.cp;
- var seg = selected.segment;
- var tSegment = ( offset - startDist ) / ( seg.length );
- var segDt = seg.t1 - seg.t0;
- var t = isSrc ? seg.t0 + segDt * tSegment : seg.t1 - segDt * tSegment;
-
- t = math.bound( 0, t, 1 );
- p = math.qbezierPtAt( cp.p0, cp.p1, cp.p2, t );
- angle = bezierAngle( cp.p0, cp.p1, cp.p2, t, p );
-
- break;
-
- case 'straight':
- case 'segments':
- case 'haystack':
- var d = 0, di, d0;
- var p0, p1;
- var l = rs.allpts.length;
-
- for( var i = 0; i + 3 < l; i += 2 ){
- if( isSrc ){
- p0 = { x: rs.allpts[i], y: rs.allpts[i+1] };
- p1 = { x: rs.allpts[i+2], y: rs.allpts[i+3] };
- } else {
- p0 = { x: rs.allpts[l-2-i], y: rs.allpts[l-1-i] };
- p1 = { x: rs.allpts[l-4-i], y: rs.allpts[l-3-i] };
- }
-
- di = math.dist( p0, p1 );
- d0 = d;
- d += di;
-
- if( d >= offset ){ break; }
- }
-
- var pD = offset - d0;
- var t = pD / di;
-
- t = math.bound( 0, t, 1 );
- p = math.lineAt( p0, p1, t );
- angle = lineAngle( p0, p1 );
-
- break;
- }
-
- setRs( 'labelX', prefix, p.x );
- setRs( 'labelY', prefix, p.y );
- setRs( 'labelAutoAngle', prefix, angle );
- };
-
- calculateEndProjection( 'source' );
- calculateEndProjection( 'target' );
-
- this.applyLabelDimensions( edge );
-};
-
-BRp.applyLabelDimensions = function( ele ){
- this.applyPrefixedLabelDimensions( ele );
-
- if( ele.isEdge() ){
- this.applyPrefixedLabelDimensions( ele, 'source' );
- this.applyPrefixedLabelDimensions( ele, 'target' );
- }
-};
-
-BRp.applyPrefixedLabelDimensions = function( ele, prefix ){
- var _p = ele._private;
-
- var text = this.getLabelText( ele, prefix );
- var labelDims = this.calculateLabelDimensions( ele, text );
-
- util.setPrefixedProperty( _p.rstyle, 'labelWidth', prefix, labelDims.width );
- util.setPrefixedProperty( _p.rscratch, 'labelWidth', prefix, labelDims.width );
-
- util.setPrefixedProperty( _p.rstyle, 'labelHeight', prefix, labelDims.height );
- util.setPrefixedProperty( _p.rscratch, 'labelHeight', prefix, labelDims.height );
-};
-
-BRp.getLabelText = function( ele, prefix ){
- var _p = ele._private;
- var pfd = prefix ? prefix + '-' : '';
- var text = ele.pstyle( pfd + 'label' ).strValue;
- var textTransform = ele.pstyle( 'text-transform' ).value;
- var rscratch = function( propName, value ){
- if( value ){
- util.setPrefixedProperty( _p.rscratch, propName, prefix, value );
- return value;
- } else {
- return util.getPrefixedProperty( _p.rscratch, propName, prefix );
- }
- };
-
- if( textTransform == 'none' ){
- // passthrough
- } else if( textTransform == 'uppercase' ){
- text = text.toUpperCase();
- } else if( textTransform == 'lowercase' ){
- text = text.toLowerCase();
- }
-
- if( ele.pstyle( 'text-wrap' ).value === 'wrap' ){
- //console.log('wrap');
-
- var labelKey = rscratch( 'labelKey' );
-
- // save recalc if the label is the same as before
- if( labelKey && rscratch( 'labelWrapKey' ) === labelKey ){
- // console.log('wrap cache hit');
- return rscratch( 'labelWrapCachedText' );
- }
- // console.log('wrap cache miss');
-
- var lines = text.split( '\n' );
- var maxW = ele.pstyle( 'text-max-width' ).pfValue;
- var wrappedLines = [];
-
- for( var l = 0; l < lines.length; l++ ){
- var line = lines[ l ];
- var lineDims = this.calculateLabelDimensions( ele, line, 'line=' + line );
- var lineW = lineDims.width;
-
- if( lineW > maxW ){ // line is too long
- var words = line.split( /\s+/ ); // NB: assume collapsed whitespace into single space
- var subline = '';
-
- for( var w = 0; w < words.length; w++ ){
- var word = words[ w ];
- var testLine = subline.length === 0 ? word : subline + ' ' + word;
- var testDims = this.calculateLabelDimensions( ele, testLine, 'testLine=' + testLine );
- var testW = testDims.width;
-
- if( testW <= maxW ){ // word fits on current line
- subline += word + ' ';
- } else { // word starts new line
- wrappedLines.push( subline );
- subline = word + ' ';
- }
- }
-
- // if there's remaining text, put it in a wrapped line
- if( !subline.match( /^\s+$/ ) ){
- wrappedLines.push( subline );
- }
- } else { // line is already short enough
- wrappedLines.push( line );
- }
- } // for
-
- rscratch( 'labelWrapCachedLines', wrappedLines );
- text = rscratch( 'labelWrapCachedText', wrappedLines.join( '\n' ) );
- rscratch( 'labelWrapKey', labelKey );
-
- // console.log(text)
- } // if wrap
-
- return text;
-};
-
-BRp.calculateLabelDimensions = function( ele, text, extraKey ){
- var r = this;
-
- var cacheKey = ele._private.labelStyleKey + '$@$' + text;
-
- if( extraKey ){
- cacheKey += '$@$' + extraKey;
- }
-
- var cache = r.labelDimCache || (r.labelDimCache = {});
-
- if( cache[ cacheKey ] ){
- return cache[ cacheKey ];
- }
-
- var sizeMult = 1; // increase the scale to increase accuracy w.r.t. zoomed text
- var fStyle = ele.pstyle( 'font-style' ).strValue;
- var size = ( sizeMult * ele.pstyle( 'font-size' ).pfValue ) + 'px';
- var family = ele.pstyle( 'font-family' ).strValue;
- var weight = ele.pstyle( 'font-weight' ).strValue;
-
- var div = this.labelCalcDiv;
-
- if( !div ){
- div = this.labelCalcDiv = document.createElement( 'div' ); // eslint-disable-line no-undef
- document.body.appendChild( div ); // eslint-disable-line no-undef
- }
-
- var ds = div.style;
-
- // from ele style
- ds.fontFamily = family;
- ds.fontStyle = fStyle;
- ds.fontSize = size;
- ds.fontWeight = weight;
-
- // forced style
- ds.position = 'absolute';
- ds.left = '-9999px';
- ds.top = '-9999px';
- ds.zIndex = '-1';
- ds.visibility = 'hidden';
- ds.pointerEvents = 'none';
- ds.padding = '0';
- ds.lineHeight = '1';
-
- if( ele.pstyle( 'text-wrap' ).value === 'wrap' ){
- ds.whiteSpace = 'pre'; // so newlines are taken into account
- } else {
- ds.whiteSpace = 'normal';
- }
-
- // put label content in div
- div.textContent = text;
-
- cache[ cacheKey ] = {
- width: Math.ceil( div.clientWidth / sizeMult ),
- height: Math.ceil( div.clientHeight / sizeMult )
- };
-
- return cache[ cacheKey ];
-};
-
-BRp.recalculateLabelProjections = function( nodes, edges ){
- for( var i = 0; i < nodes.length; i++ ){
- this.recalculateNodeLabelProjection( nodes[ i ] );
- }
-
- for( var i = 0; i < edges.length; i++ ){
- this.recalculateEdgeLabelProjections( edges[ i ] );
- }
-};
-
-BRp.recalculateEdgeProjections = function( edges ){
- this.findEdgeControlPoints( edges );
-};
-
-
-// Find edge control points
-BRp.findEdgeControlPoints = function( edges ){
- if( !edges || edges.length === 0 ){ return; }
-
- var r = this;
- var cy = r.cy;
- var hasCompounds = cy.hasCompoundNodes();
- var hashTable = {};
- var pairIds = [];
- var haystackEdges = [];
-
- // create a table of edge (src, tgt) => list of edges between them
- var pairId;
- for( var i = 0; i < edges.length; i++ ){
- var edge = edges[ i ];
- var _p = edge._private;
- var data = _p.data;
- var curveStyle = edge.pstyle( 'curve-style' ).value;
- var edgeIsUnbundled = curveStyle === 'unbundled-bezier' || curveStyle === 'segments';
-
- // ignore edges who are not to be displayed
- // they shouldn't take up space
- if( edge.pstyle( 'display').value === 'none' ){
- continue;
- }
-
- if( curveStyle === 'haystack' ){
- haystackEdges.push( edge );
- continue;
- }
-
- var srcId = data.source;
- var tgtId = data.target;
-
- pairId = srcId > tgtId ?
- tgtId + '$-$' + srcId :
- srcId + '$-$' + tgtId ;
-
- if( edgeIsUnbundled ){
- pairId = 'unbundled' + '$-$' + data.id;
- }
-
- if( hashTable[ pairId ] == null ){
- hashTable[ pairId ] = [];
- pairIds.push( pairId );
- }
-
- hashTable[ pairId ].push( edge );
-
- if( edgeIsUnbundled ){
- hashTable[ pairId ].hasUnbundled = true;
- }
- }
-
- var src, tgt, src_p, tgt_p, srcPos, tgtPos, srcW, srcH, tgtW, tgtH, srcShape, tgtShape;
- var vectorNormInverse;
- var badBezier;
-
- // for each pair (src, tgt), create the ctrl pts
- // Nested for loop is OK; total number of iterations for both loops = edgeCount
- for( var p = 0; p < pairIds.length; p++ ){
- pairId = pairIds[ p ];
- var pairEdges = hashTable[ pairId ];
-
- // for each pair id, the edges should be sorted by index
- pairEdges.sort( function( edge1, edge2 ){
- return edge1.poolIndex() - edge2.poolIndex();
- } );
-
- src = pairEdges[0]._private.source;
- tgt = pairEdges[0]._private.target;
-
- // make sure src/tgt distinction is consistent for bundled edges
- if( !pairEdges.hasUnbundled && src.id() > tgt.id() ){
- var temp = src;
- src = tgt;
- tgt = temp;
- }
-
- src_p = src._private;
- tgt_p = tgt._private;
-
- srcPos = src_p.position;
- tgtPos = tgt_p.position;
-
- srcW = src.outerWidth();
- srcH = src.outerHeight();
-
- tgtW = tgt.outerWidth();
- tgtH = tgt.outerHeight();
-
- srcShape = r.nodeShapes[ this.getNodeShape( src ) ];
- tgtShape = r.nodeShapes[ this.getNodeShape( tgt ) ];
-
- badBezier = false;
-
-
- if( (pairEdges.length > 1 && src !== tgt) || pairEdges.hasUnbundled ){
-
- // pt outside src shape to calc distance/displacement from src to tgt
- var srcOutside = srcShape.intersectLine(
- srcPos.x,
- srcPos.y,
- srcW,
- srcH,
- tgtPos.x,
- tgtPos.y,
- 0
- );
-
- // pt outside tgt shape to calc distance/displacement from src to tgt
- var tgtOutside = tgtShape.intersectLine(
- tgtPos.x,
- tgtPos.y,
- tgtW,
- tgtH,
- srcPos.x,
- srcPos.y,
- 0
- );
-
- var midptSrcPts = {
- x1: srcOutside[0],
- x2: tgtOutside[0],
- y1: srcOutside[1],
- y2: tgtOutside[1]
- };
-
- var posPts = {
- x1: srcPos.x,
- x2: tgtPos.x,
- y1: srcPos.y,
- y2: tgtPos.y
- };
-
- var dy = ( tgtOutside[1] - srcOutside[1] );
- var dx = ( tgtOutside[0] - srcOutside[0] );
- var l = Math.sqrt( dx * dx + dy * dy );
-
- var vector = {
- x: dx,
- y: dy
- };
-
- var vectorNorm = {
- x: vector.x / l,
- y: vector.y / l
- };
- vectorNormInverse = {
- x: -vectorNorm.y,
- y: vectorNorm.x
- };
-
-
- // if node shapes overlap, then no ctrl pts to draw
- if(
- tgtShape.checkPoint( srcOutside[0], srcOutside[1], 0, tgtW, tgtH, tgtPos.x, tgtPos.y ) &&
- srcShape.checkPoint( tgtOutside[0], tgtOutside[1], 0, srcW, srcH, srcPos.x, srcPos.y )
- ){
- vectorNormInverse = {};
- badBezier = true;
- }
-
- }
-
- var edge;
- var edge_p;
- var rs;
-
- for( var i = 0; i < pairEdges.length; i++ ){
- edge = pairEdges[ i ];
- edge_p = edge._private;
- rs = edge_p.rscratch;
-
- var edgeIndex1 = rs.lastEdgeIndex;
- var edgeIndex2 = i;
-
- var numEdges1 = rs.lastNumEdges;
- var numEdges2 = pairEdges.length;
-
- var curveStyle = edge.pstyle( 'curve-style' ).value;
- var ctrlptDists = edge.pstyle( 'control-point-distances' );
- var ctrlptWs = edge.pstyle( 'control-point-weights' );
- var bezierN = ctrlptDists && ctrlptWs ? Math.min( ctrlptDists.value.length, ctrlptWs.value.length ) : 1;
- var stepSize = edge.pstyle( 'control-point-step-size' ).pfValue;
- var ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[0] : undefined;
- var ctrlptWeight = ctrlptWs.value[0];
- var edgeIsUnbundled = curveStyle === 'unbundled-bezier' || curveStyle === 'segments';
-
- var srcX1 = rs.lastSrcCtlPtX;
- var srcX2 = srcPos.x;
- var srcY1 = rs.lastSrcCtlPtY;
- var srcY2 = srcPos.y;
- var srcW1 = rs.lastSrcCtlPtW;
- var srcW2 = src.outerWidth();
- var srcH1 = rs.lastSrcCtlPtH;
- var srcH2 = src.outerHeight();
-
- var tgtX1 = rs.lastTgtCtlPtX;
- var tgtX2 = tgtPos.x;
- var tgtY1 = rs.lastTgtCtlPtY;
- var tgtY2 = tgtPos.y;
- var tgtW1 = rs.lastTgtCtlPtW;
- var tgtW2 = tgt.outerWidth();
- var tgtH1 = rs.lastTgtCtlPtH;
- var tgtH2 = tgt.outerHeight();
-
- var width1 = rs.lastW;
- var width2 = edge.pstyle( 'control-point-step-size' ).pfValue;
-
- var edgeDistances = edge.pstyle('edge-distances').value;
-
- if( badBezier ){
- rs.badBezier = true;
- } else {
- rs.badBezier = false;
- }
-
- if( srcX1 === srcX2 && srcY1 === srcY2 && srcW1 === srcW2 && srcH1 === srcH2
- && tgtX1 === tgtX2 && tgtY1 === tgtY2 && tgtW1 === tgtW2 && tgtH1 === tgtH2
- && width1 === width2
- && ((edgeIndex1 === edgeIndex2 && numEdges1 === numEdges2) || edgeIsUnbundled) ){
- // console.log('edge ctrl pt cache HIT')
- continue; // then the control points haven't changed and we can skip calculating them
- } else {
- rs.lastSrcCtlPtX = srcX2;
- rs.lastSrcCtlPtY = srcY2;
- rs.lastSrcCtlPtW = srcW2;
- rs.lastSrcCtlPtH = srcH2;
- rs.lastTgtCtlPtX = tgtX2;
- rs.lastTgtCtlPtY = tgtY2;
- rs.lastTgtCtlPtW = tgtW2;
- rs.lastTgtCtlPtH = tgtH2;
- rs.lastEdgeIndex = edgeIndex2;
- rs.lastNumEdges = numEdges2;
- rs.lastWidth = width2;
- // console.log('edge ctrl pt cache MISS')
- }
-
- if( src === tgt ){
- // Self-edge
-
- rs.edgeType = 'self';
-
- var j = i;
- var loopDist = stepSize;
-
- if( edgeIsUnbundled ){
- j = 0;
- loopDist = ctrlptDist;
- }
-
- rs.ctrlpts = [
- srcPos.x,
- srcPos.y - (1 + Math.pow( srcH, 1.12 ) / 100) * loopDist * (j / 3 + 1),
-
- srcPos.x - (1 + Math.pow( srcW, 1.12 ) / 100) * loopDist * (j / 3 + 1),
- srcPos.y
- ];
-
- } else if(
- hasCompounds &&
- ( src.isParent() || src.isChild() || tgt.isParent() || tgt.isChild() ) &&
- ( src.parents().anySame( tgt ) || tgt.parents().anySame( src ) )
- ){
- // Compound edge
-
- rs.edgeType = 'compound';
-
- // because the line approximation doesn't apply for compound beziers
- // (loop/self edges are already elided b/c of cheap src==tgt check)
- rs.badBezier = false;
-
- var j = i;
- var loopDist = stepSize;
-
- if( edgeIsUnbundled ){
- j = 0;
- loopDist = ctrlptDist;
- }
-
- var loopW = 50;
-
- var loopaPos = {
- x: srcPos.x - srcW / 2,
- y: srcPos.y - srcH / 2
- };
-
- var loopbPos = {
- x: tgtPos.x - tgtW / 2,
- y: tgtPos.y - tgtH / 2
- };
-
- var loopPos = {
- x: Math.min( loopaPos.x, loopbPos.x ),
- y: Math.min( loopaPos.y, loopbPos.y )
- };
-
- // avoids cases with impossible beziers
- var minCompoundStretch = 0.5;
- var compoundStretchA = Math.max( minCompoundStretch, Math.log( srcW * 0.01 ) );
- var compoundStretchB = Math.max( minCompoundStretch, Math.log( tgtW * 0.01 ) );
-
- rs.ctrlpts = [
- loopPos.x,
- loopPos.y - (1 + Math.pow( loopW, 1.12 ) / 100) * loopDist * (j / 3 + 1) * compoundStretchA,
-
- loopPos.x - (1 + Math.pow( loopW, 1.12 ) / 100) * loopDist * (j / 3 + 1) * compoundStretchB,
- loopPos.y
- ];
-
- } else if( curveStyle === 'segments' ){
- // Segments (multiple straight lines)
-
- rs.edgeType = 'segments';
- rs.segpts = [];
-
- var segmentWs = edge.pstyle( 'segment-weights' ).pfValue;
- var segmentDs = edge.pstyle( 'segment-distances' ).pfValue;
- var segmentsN = Math.min( segmentWs.length, segmentDs.length );
-
- for( var s = 0; s < segmentsN; s++ ){
- var w = segmentWs[ s ];
- var d = segmentDs[ s ];
-
- var w1 = 1 - w;
- var w2 = w;
-
- var midptPts = edgeDistances === 'node-position' ? posPts : midptSrcPts;
-
- var adjustedMidpt = {
- x: midptPts.x1 * w1 + midptPts.x2 * w2,
- y: midptPts.y1 * w1 + midptPts.y2 * w2
- };
-
- rs.segpts.push(
- adjustedMidpt.x + vectorNormInverse.x * d,
- adjustedMidpt.y + vectorNormInverse.y * d
- );
- }
-
- // Straight edge
- } else if(
- pairEdges.length % 2 === 1
- && i === Math.floor( pairEdges.length / 2 )
- && !edgeIsUnbundled
- ){
-
- rs.edgeType = 'straight';
-
- } else {
- // (Multi)bezier
-
- var multi = edgeIsUnbundled;
-
- rs.edgeType = multi ? 'multibezier' : 'bezier';
- rs.ctrlpts = [];
-
- for( var b = 0; b < bezierN; b++ ){
- var normctrlptDist = (0.5 - pairEdges.length / 2 + i) * stepSize;
- var manctrlptDist;
- var sign = math.signum( normctrlptDist );
-
- if( multi ){
- ctrlptDist = ctrlptDists ? ctrlptDists.pfValue[ b ] : stepSize; // fall back on step size
- ctrlptWeight = ctrlptWs.value[ b ];
- }
-
- if( edgeIsUnbundled ){ // multi or single unbundled
- manctrlptDist = ctrlptDist;
- } else {
- manctrlptDist = ctrlptDist !== undefined ? sign * ctrlptDist : undefined;
- }
-
- var distanceFromMidpoint = manctrlptDist !== undefined ? manctrlptDist : normctrlptDist;
-
- var w1 = 1 - ctrlptWeight;
- var w2 = ctrlptWeight;
-
- var midptPts = edgeDistances === 'node-position' ? posPts : midptSrcPts;
-
- var adjustedMidpt = {
- x: midptPts.x1 * w1 + midptPts.x2 * w2,
- y: midptPts.y1 * w1 + midptPts.y2 * w2
- };
-
- rs.ctrlpts.push(
- adjustedMidpt.x + vectorNormInverse.x * distanceFromMidpoint,
- adjustedMidpt.y + vectorNormInverse.y * distanceFromMidpoint
- );
- }
-
- }
-
- // find endpts for edge
- this.findEndpoints( edge );
-
- var badStart = !is.number( rs.startX ) || !is.number( rs.startY );
- var badAStart = !is.number( rs.arrowStartX ) || !is.number( rs.arrowStartY );
- var badEnd = !is.number( rs.endX ) || !is.number( rs.endY );
- var badAEnd = !is.number( rs.arrowEndX ) || !is.number( rs.arrowEndY );
-
- var minCpADistFactor = 3;
- var arrowW = this.getArrowWidth( edge.pstyle( 'width' ).pfValue ) * this.arrowShapeWidth;
- var minCpADist = minCpADistFactor * arrowW;
-
- if( rs.edgeType === 'bezier' ){
- var startACpDist = math.dist( { x: rs.ctrlpts[0], y: rs.ctrlpts[1] }, { x: rs.startX, y: rs.startY } );
- var closeStartACp = startACpDist < minCpADist;
- var endACpDist = math.dist( { x: rs.ctrlpts[0], y: rs.ctrlpts[1] }, { x: rs.endX, y: rs.endY } );
- var closeEndACp = endACpDist < minCpADist;
-
- var overlapping = false;
-
- if( badStart || badAStart || closeStartACp ){
- overlapping = true;
-
- // project control point along line from src centre to outside the src shape
- // (otherwise intersection will yield nothing)
- var cpD = { // delta
- x: rs.ctrlpts[0] - srcPos.x,
- y: rs.ctrlpts[1] - srcPos.y
- };
- var cpL = Math.sqrt( cpD.x * cpD.x + cpD.y * cpD.y ); // length of line
- var cpM = { // normalised delta
- x: cpD.x / cpL,
- y: cpD.y / cpL
- };
- var radius = Math.max( srcW, srcH );
- var cpProj = { // *2 radius guarantees outside shape
- x: rs.ctrlpts[0] + cpM.x * 2 * radius,
- y: rs.ctrlpts[1] + cpM.y * 2 * radius
- };
-
- var srcCtrlPtIntn = srcShape.intersectLine(
- srcPos.x,
- srcPos.y,
- srcW,
- srcH,
- cpProj.x,
- cpProj.y,
- 0
- );
-
- if( closeStartACp ){
- rs.ctrlpts[0] = rs.ctrlpts[0] + cpM.x * (minCpADist - startACpDist);
- rs.ctrlpts[1] = rs.ctrlpts[1] + cpM.y * (minCpADist - startACpDist);
- } else {
- rs.ctrlpts[0] = srcCtrlPtIntn[0] + cpM.x * minCpADist;
- rs.ctrlpts[1] = srcCtrlPtIntn[1] + cpM.y * minCpADist;
- }
- }
-
- if( badEnd || badAEnd || closeEndACp ){
- overlapping = true;
-
- // project control point along line from tgt centre to outside the tgt shape
- // (otherwise intersection will yield nothing)
- var cpD = { // delta
- x: rs.ctrlpts[0] - tgtPos.x,
- y: rs.ctrlpts[1] - tgtPos.y
- };
- var cpL = Math.sqrt( cpD.x * cpD.x + cpD.y * cpD.y ); // length of line
- var cpM = { // normalised delta
- x: cpD.x / cpL,
- y: cpD.y / cpL
- };
- var radius = Math.max( srcW, srcH );
- var cpProj = { // *2 radius guarantees outside shape
- x: rs.ctrlpts[0] + cpM.x * 2 * radius,
- y: rs.ctrlpts[1] + cpM.y * 2 * radius
- };
-
- var tgtCtrlPtIntn = tgtShape.intersectLine(
- tgtPos.x,
- tgtPos.y,
- tgtW,
- tgtH,
- cpProj.x,
- cpProj.y,
- 0
- );
-
- if( closeEndACp ){
- rs.ctrlpts[0] = rs.ctrlpts[0] + cpM.x * (minCpADist - endACpDist);
- rs.ctrlpts[1] = rs.ctrlpts[1] + cpM.y * (minCpADist - endACpDist);
- } else {
- rs.ctrlpts[0] = tgtCtrlPtIntn[0] + cpM.x * minCpADist;
- rs.ctrlpts[1] = tgtCtrlPtIntn[1] + cpM.y * minCpADist;
- }
-
- }
-
- if( overlapping ){
- // recalc endpts
- this.findEndpoints( edge );
- }
-
- }
-
- if( rs.edgeType === 'multibezier' || rs.edgeType === 'bezier' || rs.edgeType === 'self' || rs.edgeType === 'compound' ){
- rs.allpts = [];
-
- rs.allpts.push( rs.startX, rs.startY );
-
- for( var b = 0; b + 1 < rs.ctrlpts.length; b += 2 ){
- // ctrl pt itself
- rs.allpts.push( rs.ctrlpts[ b ], rs.ctrlpts[ b + 1] );
-
- // the midpt between ctrlpts as intermediate destination pts
- if( b + 3 < rs.ctrlpts.length ){
- rs.allpts.push( (rs.ctrlpts[ b ] + rs.ctrlpts[ b + 2]) / 2, (rs.ctrlpts[ b + 1] + rs.ctrlpts[ b + 3]) / 2 );
- }
- }
-
- rs.allpts.push( rs.endX, rs.endY );
-
- var m, mt;
- if( rs.ctrlpts.length / 2 % 2 === 0 ){
- m = rs.allpts.length / 2 - 1;
-
- rs.midX = rs.allpts[ m ];
- rs.midY = rs.allpts[ m + 1];
- } else {
- m = rs.allpts.length / 2 - 3;
- mt = 0.5;
-
- rs.midX = math.qbezierAt( rs.allpts[ m ], rs.allpts[ m + 2], rs.allpts[ m + 4], mt );
- rs.midY = math.qbezierAt( rs.allpts[ m + 1], rs.allpts[ m + 3], rs.allpts[ m + 5], mt );
- }
-
- } else if( rs.edgeType === 'straight' ){
- // need to calc these after endpts
- rs.allpts = [ rs.startX, rs.startY, rs.endX, rs.endY ];
-
- // default midpt for labels etc
- rs.midX = ( rs.startX + rs.endX + rs.arrowStartX + rs.arrowEndX ) / 4;
- rs.midY = ( rs.startY + rs.endY + rs.arrowStartY + rs.arrowEndY ) / 4;
-
- } else if( rs.edgeType === 'segments' ){
- rs.allpts = [];
- rs.allpts.push( rs.startX, rs.startY );
- rs.allpts.push.apply( rs.allpts, rs.segpts );
- rs.allpts.push( rs.endX, rs.endY );
-
- if( rs.segpts.length % 4 === 0 ){
- var i2 = rs.segpts.length / 2;
- var i1 = i2 - 2;
-
- rs.midX = ( rs.segpts[ i1 ] + rs.segpts[ i2 ] ) / 2;
- rs.midY = ( rs.segpts[ i1 + 1] + rs.segpts[ i2 + 1] ) / 2;
- } else {
- var i1 = rs.segpts.length / 2 - 1;
-
- rs.midX = rs.segpts[ i1 ];
- rs.midY = rs.segpts[ i1 + 1];
- }
-
-
- }
-
- this.projectLines( edge );
- this.calculateArrowAngles( edge );
- this.recalculateEdgeLabelProjections( edge );
- this.calculateLabelAngles( edge );
-
- } // for pair edges
- } // for pair ids
-
- for( var i = 0; i < haystackEdges.length; i++ ){
- var edge = haystackEdges[ i ];
- var _p = edge._private;
- var rscratch = _p.rscratch;
- var rs = rscratch;
-
- if( !rscratch.haystack ){
- var angle = Math.random() * 2 * Math.PI;
-
- rscratch.source = {
- x: Math.cos( angle ),
- y: Math.sin( angle )
- };
-
- var angle = Math.random() * 2 * Math.PI;
-
- rscratch.target = {
- x: Math.cos( angle ),
- y: Math.sin( angle )
- };
-
- }
-
- var src = _p.source;
- var tgt = _p.target;
- var srcPos = src._private.position;
- var tgtPos = tgt._private.position;
- var srcW = src.width();
- var tgtW = tgt.width();
- var srcH = src.height();
- var tgtH = tgt.height();
- var radius = edge.pstyle( 'haystack-radius' ).value;
- var halfRadius = radius / 2; // b/c have to half width/height
-
- rs.haystackPts = rs.allpts = [
- rs.source.x * srcW * halfRadius + srcPos.x,
- rs.source.y * srcH * halfRadius + srcPos.y,
- rs.target.x * tgtW * halfRadius + tgtPos.x,
- rs.target.y * tgtH * halfRadius + tgtPos.y
- ];
-
- rs.midX = (rs.allpts[0] + rs.allpts[2]) / 2;
- rs.midY = (rs.allpts[1] + rs.allpts[3]) / 2;
-
- // always override as haystack in case set to different type previously
- rscratch.edgeType = 'haystack';
- rscratch.haystack = true;
-
- this.projectLines( edge );
- this.calculateArrowAngles( edge );
- this.recalculateEdgeLabelProjections( edge );
- this.calculateLabelAngles( edge );
- }
-
- return hashTable;
-};
-
-var getAngleFromDisp = function( dispX, dispY ){
- return Math.atan2( dispY, dispX ) - Math.PI / 2;
-};
-
-BRp.calculateArrowAngles = function( edge ){
- var rs = edge._private.rscratch;
- var isHaystack = rs.edgeType === 'haystack';
- var isMultibezier = rs.edgeType === 'multibezier';
- var isSegments = rs.edgeType === 'segments';
- var isCompound = rs.edgeType === 'compound';
- var isSelf = rs.edgeType === 'self';
-
- // Displacement gives direction for arrowhead orientation
- var dispX, dispY;
- var startX, startY, endX, endY;
-
- var srcPos = edge._private.source._private.position;
- var tgtPos = edge._private.target._private.position;
-
- if( isHaystack ){
- startX = rs.haystackPts[0];
- startY = rs.haystackPts[1];
- endX = rs.haystackPts[2];
- endY = rs.haystackPts[3];
- } else {
- startX = rs.arrowStartX;
- startY = rs.arrowStartY;
- endX = rs.arrowEndX;
- endY = rs.arrowEndY;
- }
-
- // source
- //
-
- dispX = srcPos.x - startX;
- dispY = srcPos.y - startY;
-
- rs.srcArrowAngle = getAngleFromDisp( dispX, dispY );
-
- // mid target
- //
-
- var midX = rs.midX;
- var midY = rs.midY;
-
- if( isHaystack ){
- midX = ( startX + endX ) / 2;
- midY = ( startY + endY ) / 2;
- }
-
- dispX = endX - startX;
- dispY = endY - startY;
-
- if( isSelf ){
- dispX = -1;
- dispY = 1;
- } else if( isSegments ){
- var pts = rs.allpts;
-
- if( pts.length / 2 % 2 === 0 ){
- var i2 = pts.length / 2;
- var i1 = i2 - 2;
-
- dispX = ( pts[ i2 ] - pts[ i1 ] );
- dispY = ( pts[ i2 + 1] - pts[ i1 + 1] );
- } else {
- var i2 = pts.length / 2 - 1;
- var i1 = i2 - 2;
- var i3 = i2 + 2;
-
- dispX = ( pts[ i2 ] - pts[ i1 ] );
- dispY = ( pts[ i2 + 1] - pts[ i1 + 1] );
- }
- } else if( isMultibezier || isCompound ){
- var pts = rs.allpts;
- var cpts = rs.ctrlpts;
- var bp0x, bp0y;
- var bp1x, bp1y;
-
- if( cpts.length / 2 % 2 === 0 ){
- var p0 = pts.length / 2 - 1; // startpt
- var ic = p0 + 2;
- var p1 = ic + 2;
-
- bp0x = math.qbezierAt( pts[ p0 ], pts[ ic ], pts[ p1 ], 0.0 );
- bp0y = math.qbezierAt( pts[ p0 + 1], pts[ ic + 1], pts[ p1 + 1], 0.0 );
-
- bp1x = math.qbezierAt( pts[ p0 ], pts[ ic ], pts[ p1 ], 0.0001 );
- bp1y = math.qbezierAt( pts[ p0 + 1], pts[ ic + 1], pts[ p1 + 1], 0.0001 );
- } else {
- var ic = pts.length / 2 - 1; // ctrpt
- var p0 = ic - 2; // startpt
- var p1 = ic + 2; // endpt
-
- bp0x = math.qbezierAt( pts[ p0 ], pts[ ic ], pts[ p1 ], 0.4999 );
- bp0y = math.qbezierAt( pts[ p0 + 1], pts[ ic + 1], pts[ p1 + 1], 0.4999 );
-
- bp1x = math.qbezierAt( pts[ p0 ], pts[ ic ], pts[ p1 ], 0.5 );
- bp1y = math.qbezierAt( pts[ p0 + 1], pts[ ic + 1], pts[ p1 + 1], 0.5 );
- }
-
- dispX = ( bp1x - bp0x );
- dispY = ( bp1y - bp0y );
- }
-
- rs.midtgtArrowAngle = getAngleFromDisp( dispX, dispY );
-
- rs.midDispX = dispX;
- rs.midDispY = dispY;
-
- // mid source
- //
-
- dispX *= -1;
- dispY *= -1;
-
- if( isSegments ){
- var pts = rs.allpts;
-
- if( pts.length / 2 % 2 === 0 ){
- // already ok
- } else {
- var i2 = pts.length / 2 - 1;
- var i3 = i2 + 2;
-
- dispX = -( pts[ i3 ] - pts[ i2 ] );
- dispY = -( pts[ i3 + 1] - pts[ i2 + 1] );
- }
- }
-
- rs.midsrcArrowAngle = getAngleFromDisp( dispX, dispY );
-
- // target
- //
-
- dispX = tgtPos.x - endX;
- dispY = tgtPos.y - endY;
-
- rs.tgtArrowAngle = getAngleFromDisp( dispX, dispY );
-};
-
-BRp.calculateLabelAngles = function( ele ){
- var _p = ele._private;
- var rs = _p.rscratch;
- var isEdge = ele.isEdge();
- var rot = ele.pstyle( 'text-rotation' );
- var rotStr = rot.strValue;
-
- if( rotStr === 'none' ){
- rs.labelAngle = rs.sourceLabelAngle = rs.targetLabelAngle = 0;
- } else if( isEdge && rotStr === 'autorotate' ){
- rs.labelAngle = Math.atan( rs.midDispY / rs.midDispX );
- rs.sourceLabelAngle = rs.sourceLabelAutoAngle;
- rs.targetLabelAngle = rs.targetLabelAutoAngle;
- } else if( rotStr === 'autorotate' ){
- rs.labelAngle = rs.sourceLabelAngle = rs.targetLabelAngle = 0;
- } else {
- rs.labelAngle = rs.sourceLabelAngle = rs.targetLabelAngle = rot.pfValue;
- }
-};
-
-
-BRp.findEndpoints = function( edge ){
- var r = this;
- var intersect;
-
- var source = edge.source()[0];
- var target = edge.target()[0];
-
- var src_p = source._private;
- var tgt_p = target._private;
-
- var srcPos = src_p.position;
- var tgtPos = tgt_p.position;
-
- var tgtArShape = edge.pstyle( 'target-arrow-shape' ).value;
- var srcArShape = edge.pstyle( 'source-arrow-shape' ).value;
-
- var rs = edge._private.rscratch;
-
- var et = rs.edgeType;
- var bezier = et === 'bezier' || et === 'multibezier' || et === 'self' || et === 'compound';
- var multi = et !== 'bezier';
- var lines = et === 'straight' || et === 'segments';
- var segments = et === 'segments';
- var hasEndpts = bezier || multi || lines;
-
- var p1, p2;
-
- if( bezier ){
- var cpStart = [ rs.ctrlpts[0], rs.ctrlpts[1] ];
- var cpEnd = multi ? [ rs.ctrlpts[ rs.ctrlpts.length - 2], rs.ctrlpts[ rs.ctrlpts.length - 1] ] : cpStart;
-
- p1 = cpEnd;
- p2 = cpStart;
- } else if( lines ){
- var srcArrowFromPt = !segments ? [ tgtPos.x, tgtPos.y ] : rs.segpts.slice( 0, 2 );
- var tgtArrowFromPt = !segments ? [ srcPos.x, srcPos.y ] : rs.segpts.slice( rs.segpts.length - 2 );
-
- p1 = tgtArrowFromPt;
- p2 = srcArrowFromPt;
- }
-
- intersect = r.nodeShapes[ this.getNodeShape( target ) ].intersectLine(
- tgtPos.x,
- tgtPos.y,
- target.outerWidth(),
- target.outerHeight(),
- p1[0],
- p1[1],
- 0
- );
-
- var arrowEnd = math.shortenIntersection( intersect, p1,
- r.arrowShapes[ tgtArShape ].spacing( edge ) );
- var edgeEnd = math.shortenIntersection( intersect, p1,
- r.arrowShapes[ tgtArShape ].gap( edge ) );
-
- rs.endX = edgeEnd[0];
- rs.endY = edgeEnd[1];
-
- rs.arrowEndX = arrowEnd[0];
- rs.arrowEndY = arrowEnd[1];
-
- intersect = r.nodeShapes[ this.getNodeShape( source ) ].intersectLine(
- srcPos.x,
- srcPos.y,
- source.outerWidth(),
- source.outerHeight(),
- p2[0],
- p2[1],
- 0
- );
-
- var arrowStart = math.shortenIntersection(
- intersect, p2,
- r.arrowShapes[ srcArShape ].spacing( edge )
- );
- var edgeStart = math.shortenIntersection(
- intersect, p2,
- r.arrowShapes[ srcArShape ].gap( edge )
- );
-
- rs.startX = edgeStart[0];
- rs.startY = edgeStart[1];
-
- rs.arrowStartX = arrowStart[0];
- rs.arrowStartY = arrowStart[1];
-
- if( hasEndpts ){
- if( !is.number( rs.startX ) || !is.number( rs.startY ) || !is.number( rs.endX ) || !is.number( rs.endY ) ){
- rs.badLine = true;
- } else {
- rs.badLine = false;
- }
- }
-};
-
-BRp.getArrowWidth = BRp.getArrowHeight = function( edgeWidth ){
- var cache = this.arrowWidthCache = this.arrowWidthCache || {};
-
- var cachedVal = cache[ edgeWidth ];
- if( cachedVal ){
- return cachedVal;
- }
-
- cachedVal = Math.max( Math.pow( edgeWidth * 13.37, 0.9 ), 29 );
- cache[ edgeWidth ] = cachedVal;
-
- return cachedVal;
-};
-
-module.exports = BRp;
-
-},{"../../../collection/zsort":32,"../../../is":83,"../../../math":85,"../../../util":100}],59:[function(_dereq_,module,exports){
-'use strict';
-
-var BRp = {};
-
-BRp.getCachedImage = function( url, onLoad ){
- var r = this;
- var imageCache = r.imageCache = r.imageCache || {};
-
- if( imageCache[ url ] && imageCache[ url ].image ){
- return imageCache[ url ].image;
- }
-
- var cache = imageCache[ url ] = imageCache[ url ] || {};
-
- var image = cache.image = new Image(); // eslint-disable-line no-undef
- image.addEventListener('load', onLoad);
- image.crossOrigin = 'Anonymous'; // prevent tainted canvas
- image.src = url;
-
- return image;
-};
-
-module.exports = BRp;
-
-},{}],60:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../../../is' );
-var util = _dereq_( '../../../util' );
-
-var BaseRenderer = function( options ){ this.init( options ); };
-var BR = BaseRenderer;
-var BRp = BR.prototype;
-
-BRp.clientFunctions = [ 'redrawHint', 'render', 'renderTo', 'matchCanvasSize', 'nodeShapeImpl', 'arrowShapeImpl' ];
-
-BRp.init = function( options ){
- var r = this;
-
- r.options = options;
-
- r.cy = options.cy;
-
- r.container = options.cy.container();
-
- r.selection = [ undefined, undefined, undefined, undefined, 0]; // Coordinates for selection box, plus enabled flag
-
- r.bezierProjPcts = [ 0.05, 0.225, 0.4, 0.5, 0.6, 0.775, 0.95 ];
-
- //--Pointer-related data
- r.hoverData = {down: null, last: null,
- downTime: null, triggerMode: null,
- dragging: false,
- initialPan: [ null, null ], capture: false};
-
- r.dragData = {possibleDragElements: []};
-
- r.touchData = {
- start: null, capture: false,
-
- // These 3 fields related to tap, taphold events
- startPosition: [ null, null, null, null, null, null ],
- singleTouchStartTime: null,
- singleTouchMoved: true,
-
- now: [ null, null, null, null, null, null ],
- earlier: [ null, null, null, null, null, null ]
- };
-
- r.redraws = 0;
- r.showFps = options.showFps;
-
- r.hideEdgesOnViewport = options.hideEdgesOnViewport;
- r.hideLabelsOnViewport = options.hideLabelsOnViewport;
- r.textureOnViewport = options.textureOnViewport;
- r.wheelSensitivity = options.wheelSensitivity;
- r.motionBlurEnabled = options.motionBlur; // on by default
- r.forcedPixelRatio = options.pixelRatio;
- r.motionBlur = options.motionBlur; // for initial kick off
- r.motionBlurOpacity = options.motionBlurOpacity;
- r.motionBlurTransparency = 1 - r.motionBlurOpacity;
- r.motionBlurPxRatio = 1;
- r.mbPxRBlurry = 1; //0.8;
- r.minMbLowQualFrames = 4;
- r.fullQualityMb = false;
- r.clearedForMotionBlur = [];
- r.desktopTapThreshold = options.desktopTapThreshold;
- r.desktopTapThreshold2 = options.desktopTapThreshold * options.desktopTapThreshold;
- r.touchTapThreshold = options.touchTapThreshold;
- r.touchTapThreshold2 = options.touchTapThreshold * options.touchTapThreshold;
- r.tapholdDuration = 500;
-
- r.bindings = [];
- r.beforeRenderCallbacks = [];
- r.beforeRenderPriorities = { // higher priority execs before lower one
- animations: 400,
- eleCalcs: 300,
- eleTxrDeq: 200,
- lyrTxrDeq: 100
- };
-
- r.registerNodeShapes();
- r.registerArrowShapes();
- r.registerCalculationListeners();
- r.load();
-};
-
-BRp.notify = function( params ){
- var types;
- var r = this;
-
- if( is.array( params.type ) ){
- types = params.type;
-
- } else {
- types = [ params.type ];
- }
-
- var has = {};
- for( var i = 0; i < types.length; i++ ){
- var type = types[ i ];
-
- has[ type ] = true;
- } // for
-
- if( has['destroy'] ){
- r.destroy();
- return;
- }
-
- if( has['add'] || has['remove'] || has['load'] || has['style'] ){
- r.updateCachedZSortedEles();
- }
-
- if( has['viewport'] ){
- r.redrawHint( 'select', true );
- }
-
- if( has['load'] || has['resize'] ){
- r.invalidateContainerClientCoordsCache();
- r.matchCanvasSize( r.container );
- }
-
- r.redrawHint( 'eles', true );
- r.redrawHint( 'drag', true );
-
- this.startRenderLoop();
-
- this.redraw();
-};
-
-BRp.destroy = function(){
- var r = this;
-
- r.destroyed = true;
-
- r.cy.stopAnimationLoop();
-
- for( var i = 0; i < r.bindings.length; i++ ){
- var binding = r.bindings[ i ];
- var b = binding;
- var tgt = b.target;
-
- ( tgt.off || tgt.removeEventListener ).apply( tgt, b.args );
- }
-
- r.bindings = [];
- r.beforeRenderCallbacks = [];
- r.onUpdateEleCalcsFns = [];
-
- if( r.removeObserver ){
- r.removeObserver.disconnect();
- }
-
- if( r.styleObserver ){
- r.styleObserver.disconnect();
- }
-
- if( r.labelCalcDiv ){
- try {
- document.body.removeChild( r.labelCalcDiv ); // eslint-disable-line no-undef
- } catch( e ){
- // ie10 issue #1014
- }
- }
-};
-
-[
- _dereq_( './arrow-shapes' ),
- _dereq_( './coord-ele-math' ),
- _dereq_( './images' ),
- _dereq_( './load-listeners' ),
- _dereq_( './node-shapes' ),
- _dereq_( './redraw' )
-].forEach( function( props ){
- util.extend( BRp, props );
-} );
-
-module.exports = BR;
-
-},{"../../../is":83,"../../../util":100,"./arrow-shapes":57,"./coord-ele-math":58,"./images":59,"./load-listeners":61,"./node-shapes":62,"./redraw":63}],61:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../../../is' );
-var util = _dereq_( '../../../util' );
-var math = _dereq_( '../../../math' );
-var Event = _dereq_( '../../../event' );
-
-var BRp = {};
-
-BRp.registerBinding = function( target, event, handler, useCapture ){
- var args = Array.prototype.slice.apply( arguments, [1] ); // copy
- var b = this.binder( target );
-
- return b.on.apply( b, args );
-};
-
-BRp.binder = function( tgt ){
- var r = this;
-
- var on = function(){
- var args = arguments;
-
- r.bindings.push({
- target: tgt,
- args: args
- });
-
- ( tgt.addEventListener || tgt.on ).apply( tgt, args );
-
- return this;
- };
-
- return {
- on: on,
- addEventListener: on,
- addListener: on,
- bind: on
- };
-};
-
-BRp.nodeIsDraggable = function( node ){
- return (
- node
- && node.isNode()
- && !node.locked()
- && node.grabbable()
- );
-};
-
-BRp.nodeIsGrabbable = function( node ){
- return (
- this.nodeIsDraggable( node )
- && node.pstyle( 'opacity' ).value !== 0
- && node.pstyle( 'visibility' ).value === 'visible'
- && node.pstyle( 'display' ).value === 'element'
- );
-};
-
-BRp.load = function(){
- var r = this;
-
- var triggerEvents = function( target, names, e, props ){
- if( target == null ){
- target = r.cy;
- }
-
- for( var i = 0; i < names.length; i++ ){
- var name = names[ i ];
-
- var event = new Event( e, util.extend( { type: name }, props ) );
- target.trigger( event );
- }
- };
-
- var isMultSelKeyDown = function( e ){
- return e.shiftKey || e.metaKey || e.ctrlKey; // maybe e.altKey
- };
-
- var allowPanningPassthrough = function( down, downs ){
- var allowPassthrough = true;
-
- if( r.cy.hasCompoundNodes() && down && down.isEdge() ){
- // a compound node below the edge => no passthrough panning
- for( var i = 0; downs && i < downs.length; i++ ){
- var down = downs[i];
-
- if( down.isNode() && down.isParent() ){
- allowPassthrough = false;
- break;
- }
- }
- } else {
- allowPassthrough = true;
- }
-
- return allowPassthrough;
- };
-
- var getDragListIds = function( opts ){
- var listHasId;
-
- if( opts.addToList && r.cy.hasCompoundNodes() ){ // only needed for compound graphs
- if( !opts.addToList.hasId ){ // build ids lookup if doesn't already exist
- opts.addToList.hasId = {};
-
- for( var i = 0; i < opts.addToList.length; i++ ){
- var ele = opts.addToList[ i ];
-
- opts.addToList.hasId[ ele.id() ] = true;
- }
- }
-
- listHasId = opts.addToList.hasId;
- }
-
- return listHasId || {};
- };
-
- var setGrabbed = function( ele ){
- ele[0]._private.grabbed = true;
- };
-
- var setFreed = function( ele ){
- ele[0]._private.grabbed = false;
- };
-
- var setInDragLayer = function( ele ){
- ele[0]._private.rscratch.inDragLayer = true;
- };
-
- var setOutDragLayer = function( ele ){
- ele[0]._private.rscratch.inDragLayer = false;
- };
-
- var setGrabTarget = function( ele ){
- ele[0]._private.rscratch.isGrabTarget = true;
- };
-
- var removeGrabTarget = function( ele ){
- ele[0]._private.rscratch.isGrabTarget = false;
- };
-
- var addToDragList = function( ele, opts ){
- var listHasId = getDragListIds( opts );
-
- if( !listHasId[ ele.id() ] ){
- opts.addToList.push( ele );
- listHasId[ ele.id() ] = true;
-
- setGrabbed( ele );
- }
- };
-
- // helper function to determine which child nodes and inner edges
- // of a compound node to be dragged as well as the grabbed and selected nodes
- var addDescendantsToDrag = function( node, opts ){
- if( !node.cy().hasCompoundNodes() ){
- return;
- }
-
- if( opts.inDragLayer == null && opts.addToList == null ){ return; } // nothing to do
-
- var innerNodes = node.descendants();
-
- if( opts.inDragLayer ){
- innerNodes.forEach( setInDragLayer );
- innerNodes.connectedEdges().forEach( setInDragLayer );
- }
-
- if( opts.addToList ){
- innerNodes.forEach(function( ele ){
- addToDragList( ele, opts );
- });
- }
- };
-
- // adds the given nodes and its neighbourhood to the drag layer
- var addNodesToDrag = function( nodes, opts ){
- opts = opts || {};
-
- var hasCompoundNodes = nodes.cy().hasCompoundNodes();
-
- if( opts.inDragLayer ){
- nodes.forEach( setInDragLayer );
-
- nodes.neighborhood().stdFilter(function( ele ){
- return !hasCompoundNodes || ele.isEdge();
- }).forEach( setInDragLayer );
- }
-
- if( opts.addToList ){
- nodes.forEach(function( ele ){
- addToDragList( ele, opts );
- });
- }
-
- addDescendantsToDrag( nodes, opts ); // always add to drag
-
- // also add nodes and edges related to the topmost ancestor
- updateAncestorsInDragLayer( nodes, {
- inDragLayer: opts.inDragLayer
- } );
-
- r.updateCachedGrabbedEles();
- };
-
- var addNodeToDrag = addNodesToDrag;
-
- var freeDraggedElements = function( grabbedEles ){
- if( !grabbedEles ){ return; }
-
- grabbedEles.hasId = {}; // clear the id list
-
- // just go over all elements rather than doing a bunch of (possibly expensive) traversals
- r.getCachedZSortedEles().forEach(function( ele ){
- setFreed( ele );
- setOutDragLayer( ele );
- removeGrabTarget( ele );
- });
-
- r.updateCachedGrabbedEles();
- };
-
- // helper function to determine which ancestor nodes and edges should go
- // to the drag layer (or should be removed from drag layer).
- var updateAncestorsInDragLayer = function( node, opts ){
-
- if( opts.inDragLayer == null && opts.addToList == null ){ return; } // nothing to do
-
- if( !node.cy().hasCompoundNodes() ){
- return;
- }
-
- // find top-level parent
- var parent = node.ancestors().orphans();
-
- // no parent node: no nodes to add to the drag layer
- if( parent.same( node ) ){
- return;
- }
-
- var nodes = parent.descendants().spawnSelf()
- .merge( parent )
- .unmerge( node )
- .unmerge( node.descendants() )
- ;
-
- var edges = nodes.connectedEdges();
-
- if( opts.inDragLayer ){
- edges.forEach( setInDragLayer );
- nodes.forEach( setInDragLayer );
- }
-
- if( opts.addToList ){
- nodes.forEach(function( ele ){
- addToDragList( ele, opts );
- });
- }
- };
-
- var haveMutationsApi = typeof MutationObserver !== 'undefined';
-
- // watch for when the cy container is removed from the dom
- if( haveMutationsApi ){
- r.removeObserver = new MutationObserver( function( mutns ){ // eslint-disable-line no-undef
- for( var i = 0; i < mutns.length; i++ ){
- var mutn = mutns[ i ];
- var rNodes = mutn.removedNodes;
-
- if( rNodes ){ for( var j = 0; j < rNodes.length; j++ ){
- var rNode = rNodes[ j ];
-
- if( rNode === r.container ){
- r.destroy();
- break;
- }
- } }
- }
- } );
-
- if( r.container.parentNode ){
- r.removeObserver.observe( r.container.parentNode, { childList: true } );
- }
- } else {
- r.registerBinding( r.container, 'DOMNodeRemoved', function( e ){
- r.destroy();
- } );
- }
-
- var onResize = util.debounce( function(){
- r.cy.invalidateSize();
- r.invalidateContainerClientCoordsCache();
-
- r.matchCanvasSize( r.container );
- r.redrawHint( 'eles', true );
- r.redrawHint( 'drag', true );
- r.redraw();
- }, 100 );
-
- if( haveMutationsApi ){
- r.styleObserver = new MutationObserver( onResize ); // eslint-disable-line no-undef
-
- r.styleObserver.observe( r.container, { attributes: true } );
- }
-
- // auto resize
- r.registerBinding( window, 'resize', onResize ); // eslint-disable-line no-undef
-
- var invalCtnrBBOnScroll = function( domEle ){
- r.registerBinding( domEle, 'scroll', function( e ){
- r.invalidateContainerClientCoordsCache();
- } );
- };
-
- var bbCtnr = r.cy.container();
-
- for( ;; ){
-
- invalCtnrBBOnScroll( bbCtnr );
-
- if( bbCtnr.parentNode ){
- bbCtnr = bbCtnr.parentNode;
- } else {
- break;
- }
-
- }
-
- // stop right click menu from appearing on cy
- r.registerBinding( r.container, 'contextmenu', function( e ){
- e.preventDefault();
- } );
-
- var inBoxSelection = function(){
- return r.selection[4] !== 0;
- };
-
- // Primary key
- r.registerBinding( r.container, 'mousedown', function mousedownHandler( e ){
- e.preventDefault();
- r.hoverData.capture = true;
- r.hoverData.which = e.which;
-
- var cy = r.cy;
- var gpos = [ e.clientX, e.clientY ];
- var pos = r.projectIntoViewport( gpos[0], gpos[1] );
- var select = r.selection;
- var nears = r.findNearestElements( pos[0], pos[1], true, false );
- var near = nears[0];
- var draggedElements = r.dragData.possibleDragElements;
-
- r.hoverData.mdownPos = pos;
- r.hoverData.mdownGPos = gpos;
-
- var checkForTaphold = function(){
- r.hoverData.tapholdCancelled = false;
-
- clearTimeout( r.hoverData.tapholdTimeout );
-
- r.hoverData.tapholdTimeout = setTimeout( function(){
-
- if( r.hoverData.tapholdCancelled ){
- return;
- } else {
- var ele = r.hoverData.down;
-
- if( ele ){
- ele.trigger( new Event( e, {
- type: 'taphold',
- cyPosition: { x: pos[0], y: pos[1] }
- } ) );
- } else {
- cy.trigger( new Event( e, {
- type: 'taphold',
- cyPosition: { x: pos[0], y: pos[1] }
- } ) );
- }
- }
-
- }, r.tapholdDuration );
- };
-
- // Right click button
- if( e.which == 3 ){
-
- r.hoverData.cxtStarted = true;
-
- var cxtEvt = new Event( e, {
- type: 'cxttapstart',
- cyPosition: { x: pos[0], y: pos[1] }
- } );
-
- if( near ){
- near.activate();
- near.trigger( cxtEvt );
-
- r.hoverData.down = near;
- } else {
- cy.trigger( cxtEvt );
- }
-
- r.hoverData.downTime = (new Date()).getTime();
- r.hoverData.cxtDragged = false;
-
- // Primary button
- } else if( e.which == 1 ){
-
- if( near ){
- near.activate();
- }
-
- // Element dragging
- {
- // If something is under the cursor and it is draggable, prepare to grab it
- if( near != null ){
-
- if( r.nodeIsGrabbable( near ) ){
-
- var grabEvent = new Event( e, {
- type: 'grab',
- cyPosition: { x: pos[0], y: pos[1] }
- } );
-
- setGrabTarget( near );
-
- if( !near.selected() ){
-
- draggedElements = r.dragData.possibleDragElements = [];
- addNodeToDrag( near, { addToList: draggedElements } );
-
- near.trigger( grabEvent );
-
- } else if( near.selected() ){
- draggedElements = r.dragData.possibleDragElements = [ ];
-
- var selectedNodes = cy.$( function(){ return this.isNode() && this.selected() && r.nodeIsGrabbable( this ); } );
-
- addNodesToDrag( selectedNodes, { addToList: draggedElements } );
-
- near.trigger( grabEvent );
- }
-
- r.redrawHint( 'eles', true );
- r.redrawHint( 'drag', true );
-
- }
-
- }
-
- r.hoverData.down = near;
- r.hoverData.downs = nears;
- r.hoverData.downTime = (new Date()).getTime();
- }
-
- triggerEvents( near, [ 'mousedown', 'tapstart', 'vmousedown' ], e, {
- cyPosition: { x: pos[0], y: pos[1] }
- } );
-
- if( near == null ){
- select[4] = 1;
-
- r.data.bgActivePosistion = {
- x: pos[0],
- y: pos[1]
- };
-
- r.redrawHint( 'select', true );
-
- r.redraw();
- } else if( near.isEdge() ){
- select[4] = 1; // for future pan
- }
-
- checkForTaphold();
-
- }
-
- // Initialize selection box coordinates
- select[0] = select[2] = pos[0];
- select[1] = select[3] = pos[1];
-
- }, false );
-
- r.registerBinding( window, 'mousemove', function mousemoveHandler( e ){ // eslint-disable-line no-undef
- var preventDefault = false;
- var capture = r.hoverData.capture;
-
- // save cycles if mouse events aren't to be captured
- if( !capture ){
- var containerPageCoords = r.findContainerClientCoords();
-
- if( e.clientX > containerPageCoords[0] && e.clientX < containerPageCoords[0] + r.canvasWidth
- && e.clientY > containerPageCoords[1] && e.clientY < containerPageCoords[1] + r.canvasHeight
- ){
- // inside container bounds so OK
- } else {
- return;
- }
-
- var cyContainer = r.container;
- var target = e.target;
- var tParent = target.parentNode;
- var containerIsTarget = false;
-
- while( tParent ){
- if( tParent === cyContainer ){
- containerIsTarget = true;
- break;
- }
-
- tParent = tParent.parentNode;
- }
-
- if( !containerIsTarget ){ return; } // if target is outisde cy container, then this event is not for us
- }
-
- var cy = r.cy;
- var zoom = cy.zoom();
- var gpos = [ e.clientX, e.clientY ];
- var pos = r.projectIntoViewport( gpos[0], gpos[1] );
- var mdownPos = r.hoverData.mdownPos;
- var mdownGPos = r.hoverData.mdownGPos;
- var select = r.selection;
-
- var near = null;
- if( !r.hoverData.draggingEles && !r.hoverData.dragging && !r.hoverData.selecting ){
- near = r.findNearestElement( pos[0], pos[1], true, false );
- }
- var last = r.hoverData.last;
- var down = r.hoverData.down;
-
- var disp = [ pos[0] - select[2], pos[1] - select[3] ];
-
- var draggedElements = r.dragData.possibleDragElements;
-
- var isOverThresholdDrag;
-
- if( mdownGPos ){
- var dx = gpos[0] - mdownGPos[0];
- var dx2 = dx * dx;
- var dy = gpos[1] - mdownGPos[1];
- var dy2 = dy * dy;
- var dist2 = dx2 + dy2;
-
- isOverThresholdDrag = dist2 >= r.desktopTapThreshold2;
- }
-
- var multSelKeyDown = isMultSelKeyDown( e );
-
- if (isOverThresholdDrag) {
- r.hoverData.tapholdCancelled = true;
- }
-
- var updateDragDelta = function(){
- var dragDelta = r.hoverData.dragDelta = r.hoverData.dragDelta || [];
-
- if( dragDelta.length === 0 ){
- dragDelta.push( disp[0] );
- dragDelta.push( disp[1] );
- } else {
- dragDelta[0] += disp[0];
- dragDelta[1] += disp[1];
- }
- };
-
-
- preventDefault = true;
-
- triggerEvents( near, [ 'mousemove', 'vmousemove', 'tapdrag' ], e, {
- cyPosition: { x: pos[0], y: pos[1] }
- } );
-
- // trigger context drag if rmouse down
- if( r.hoverData.which === 3 ){
- // but only if over threshold
- if( isOverThresholdDrag ){
- var cxtEvt = new Event( e, {
- type: 'cxtdrag',
- cyPosition: { x: pos[0], y: pos[1] }
- } );
-
- if( down ){
- down.trigger( cxtEvt );
- } else {
- cy.trigger( cxtEvt );
- }
-
- r.hoverData.cxtDragged = true;
-
- if( !r.hoverData.cxtOver || near !== r.hoverData.cxtOver ){
-
- if( r.hoverData.cxtOver ){
- r.hoverData.cxtOver.trigger( new Event( e, {
- type: 'cxtdragout',
- cyPosition: { x: pos[0], y: pos[1] }
- } ) );
- }
-
- r.hoverData.cxtOver = near;
-
- if( near ){
- near.trigger( new Event( e, {
- type: 'cxtdragover',
- cyPosition: { x: pos[0], y: pos[1] }
- } ) );
- }
-
- }
- }
-
- // Check if we are drag panning the entire graph
- } else if( r.hoverData.dragging ){
- preventDefault = true;
-
- if( cy.panningEnabled() && cy.userPanningEnabled() ){
- var deltaP;
-
- if( r.hoverData.justStartedPan ){
- var mdPos = r.hoverData.mdownPos;
-
- deltaP = {
- x: ( pos[0] - mdPos[0] ) * zoom,
- y: ( pos[1] - mdPos[1] ) * zoom
- };
-
- r.hoverData.justStartedPan = false;
-
- } else {
- deltaP = {
- x: disp[0] * zoom,
- y: disp[1] * zoom
- };
-
- }
-
- cy.panBy( deltaP );
-
- r.hoverData.dragged = true;
- }
-
- // Needs reproject due to pan changing viewport
- pos = r.projectIntoViewport( e.clientX, e.clientY );
-
- // Checks primary button down & out of time & mouse not moved much
- } else if(
- select[4] == 1 && (down == null || down.isEdge())
- ){
-
- if( isOverThresholdDrag ){
-
- if( !r.hoverData.dragging && cy.boxSelectionEnabled() && ( multSelKeyDown || !cy.panningEnabled() || !cy.userPanningEnabled() ) ){
- r.data.bgActivePosistion = undefined;
-
- if( !r.hoverData.selecting ){
- cy.trigger('boxstart');
- }
-
- r.hoverData.selecting = true;
-
- r.redrawHint( 'select', true );
- r.redraw();
-
- } else if( !r.hoverData.selecting && cy.panningEnabled() && cy.userPanningEnabled() ){
- var allowPassthrough = allowPanningPassthrough( down, r.hoverData.downs );
-
- if( allowPassthrough ){
- r.hoverData.dragging = true;
- r.hoverData.justStartedPan = true;
- select[4] = 0;
-
- r.data.bgActivePosistion = math.array2point( mdownPos );
-
- r.redrawHint( 'select', true );
- r.redraw();
- }
- }
-
- if( down && down.isEdge() && down.active() ){ down.unactivate(); }
-
- }
-
- } else {
- if( down && down.isEdge() && down.active() ){ down.unactivate(); }
-
- if( ( !down || !down.grabbed() ) && near != last ){
-
- if( last ){
- triggerEvents( last, [ 'mouseout', 'tapdragout' ], e, {
- cyPosition: { x: pos[0], y: pos[1] }
- } );
- }
-
- if( near ){
- triggerEvents( near, [ 'mouseover', 'tapdragover' ], e, {
- cyPosition: { x: pos[0], y: pos[1] }
- } );
- }
-
- r.hoverData.last = near;
- }
-
- if( down && r.nodeIsDraggable( down ) ){
-
- if( isOverThresholdDrag ){ // then drag
-
- var justStartedDrag = !r.dragData.didDrag;
-
- if( justStartedDrag ){
- r.redrawHint( 'eles', true );
- }
-
- r.dragData.didDrag = true; // indicate that we actually did drag the node
-
- var toTrigger = [];
-
- // now, add the elements to the drag layer if not done already
- if( !r.hoverData.draggingEles ){
- addNodesToDrag( cy.collection( draggedElements ), { inDragLayer: true } );
- }
-
- for( var i = 0; i < draggedElements.length; i++ ){
- var dEle = draggedElements[ i ];
-
- // Locked nodes not draggable, as well as non-visible nodes
- if( r.nodeIsDraggable( dEle ) && dEle.grabbed() ){
- var dPos = dEle._private.position;
-
- toTrigger.push( dEle );
-
- if( is.number( disp[0] ) && is.number( disp[1] ) ){
- var updatePos = !dEle.isParent();
-
- if( updatePos ){
- dPos.x += disp[0];
- dPos.y += disp[1];
- }
-
- if( justStartedDrag ){
- var dragDelta = r.hoverData.dragDelta;
-
- if( updatePos && dragDelta && is.number( dragDelta[0] ) && is.number( dragDelta[1] ) ){
- dPos.x += dragDelta[0];
- dPos.y += dragDelta[1];
- }
- }
- }
-
- }
- }
-
- r.hoverData.draggingEles = true;
-
- var tcol = cy.collection( toTrigger );
-
- tcol.updateCompoundBounds();
- tcol.trigger( 'position drag' );
-
- r.redrawHint( 'drag', true );
- r.redraw();
-
- } else { // otherwise save drag delta for when we actually start dragging so the relative grab pos is constant
- updateDragDelta();
- }
- }
-
- // prevent the dragging from triggering text selection on the page
- preventDefault = true;
- }
-
- select[2] = pos[0]; select[3] = pos[1];
-
- if( preventDefault ){
- if( e.stopPropagation ) e.stopPropagation();
- if( e.preventDefault ) e.preventDefault();
- return false;
- }
- }, false );
-
- r.registerBinding( window, 'mouseup', function mouseupHandler( e ){ // eslint-disable-line no-undef
- var capture = r.hoverData.capture;
- if( !capture ){ return; }
- r.hoverData.capture = false;
-
- var cy = r.cy; var pos = r.projectIntoViewport( e.clientX, e.clientY ); var select = r.selection;
- var near = r.findNearestElement( pos[0], pos[1], true, false );
- var draggedElements = r.dragData.possibleDragElements; var down = r.hoverData.down;
- var multSelKeyDown = isMultSelKeyDown( e );
-
- if( r.data.bgActivePosistion ){
- r.redrawHint( 'select', true );
- r.redraw();
- }
-
- r.hoverData.tapholdCancelled = true;
-
- r.data.bgActivePosistion = undefined; // not active bg now
-
- if( down ){
- down.unactivate();
- }
-
- if( r.hoverData.which === 3 ){
- var cxtEvt = new Event( e, {
- type: 'cxttapend',
- cyPosition: { x: pos[0], y: pos[1] }
- } );
-
- if( down ){
- down.trigger( cxtEvt );
- } else {
- cy.trigger( cxtEvt );
- }
-
- if( !r.hoverData.cxtDragged ){
- var cxtTap = new Event( e, {
- type: 'cxttap',
- cyPosition: { x: pos[0], y: pos[1] }
- } );
-
- if( down ){
- down.trigger( cxtTap );
- } else {
- cy.trigger( cxtTap );
- }
- }
-
- r.hoverData.cxtDragged = false;
- r.hoverData.which = null;
-
- } else if( r.hoverData.which === 1 ){
-
- // Deselect all elements if nothing is currently under the mouse cursor and we aren't dragging something
- if( (down == null) // not mousedown on node
- && !r.dragData.didDrag // didn't move the node around
- && !r.hoverData.selecting // not box selection
- && !r.hoverData.dragged // didn't pan
- && !isMultSelKeyDown( e )
- ){
-
- cy.$( function(){
- return this.selected();
- } ).unselect();
-
- if( draggedElements.length > 0 ){
- r.redrawHint( 'eles', true );
- }
-
- r.dragData.possibleDragElements = draggedElements = [];
- }
-
- triggerEvents( near, [ 'mouseup', 'tapend', 'vmouseup' ], e, {
- cyPosition: { x: pos[0], y: pos[1] }
- } );
-
- if(
- !r.dragData.didDrag // didn't move a node around
- && !r.hoverData.dragged // didn't pan
- && !r.hoverData.selecting // not box selection
- ){
- triggerEvents( down, ['click', 'tap', 'vclick'], e, {
- cyPosition: { x: pos[0], y: pos[1] }
- } );
- }
-
- // Single selection
- if( near == down && !r.dragData.didDrag && !r.hoverData.selecting ){
- if( near != null && near._private.selectable ){
-
- if( r.hoverData.dragging ){
- // if panning, don't change selection state
- } else if( cy.selectionType() === 'additive' || multSelKeyDown ){
- if( near.selected() ){
- near.unselect();
- } else {
- near.select();
- }
- } else {
- if( !multSelKeyDown ){
- cy.$( ':selected' ).unmerge( near ).unselect();
- near.select();
- }
- }
-
- r.redrawHint( 'eles', true );
- }
- }
-
- if( r.hoverData.selecting ){
- var box = cy.collection( r.getAllInBox( select[0], select[1], select[2], select[3] ) );
-
- r.redrawHint( 'select', true );
-
- if( box.length > 0 ){
- r.redrawHint( 'eles', true );
- }
-
- cy.trigger('boxend');
-
- var eleWouldBeSelected = function( ele ){ return ele.selectable() && !ele.selected(); };
-
- if( cy.selectionType() === 'additive' ){
- box
- .trigger('box')
- .stdFilter( eleWouldBeSelected )
- .select()
- .trigger('boxselect')
- ;
- } else {
- if( !multSelKeyDown ){
- cy.$( ':selected' ).unmerge( box ).unselect();
- }
-
- box
- .trigger('box')
- .stdFilter( eleWouldBeSelected )
- .select()
- .trigger('boxselect')
- ;
- }
-
- // always need redraw in case eles unselectable
- r.redraw();
-
- }
-
- // Cancel drag pan
- if( r.hoverData.dragging ){
- r.hoverData.dragging = false;
-
- r.redrawHint( 'select', true );
- r.redrawHint( 'eles', true );
-
- r.redraw();
- }
-
- if( !select[4] ) {
- r.redrawHint('drag', true);
- r.redrawHint('eles', true);
-
- var downWasGrabbed = down && down.grabbed();
-
- freeDraggedElements( draggedElements );
-
- if( downWasGrabbed ){ down.trigger('free'); }
- }
-
- } // else not right mouse
-
- select[4] = 0; r.hoverData.down = null;
-
- r.hoverData.cxtStarted = false;
- r.hoverData.draggingEles = false;
- r.hoverData.selecting = false;
- r.dragData.didDrag = false;
- r.hoverData.dragged = false;
- r.hoverData.dragDelta = [];
- r.hoverData.mdownPos = null;
- r.hoverData.mdownGPos = null;
-
- }, false );
-
- var wheelHandler = function( e ){
-
-
- if( r.scrollingPage ){ return; } // while scrolling, ignore wheel-to-zoom
-
- var cy = r.cy;
- var pos = r.projectIntoViewport( e.clientX, e.clientY );
- var rpos = [ pos[0] * cy.zoom() + cy.pan().x,
- pos[1] * cy.zoom() + cy.pan().y ];
-
- if( r.hoverData.draggingEles || r.hoverData.dragging || r.hoverData.cxtStarted || inBoxSelection() ){ // if pan dragging or cxt dragging, wheel movements make no zoom
- e.preventDefault();
- return;
- }
-
- if( cy.panningEnabled() && cy.userPanningEnabled() && cy.zoomingEnabled() && cy.userZoomingEnabled() ){
- e.preventDefault();
-
- r.data.wheelZooming = true;
- clearTimeout( r.data.wheelTimeout );
- r.data.wheelTimeout = setTimeout( function(){
- r.data.wheelZooming = false;
-
- r.redrawHint( 'eles', true );
- r.redraw();
- }, 150 );
-
- var diff = e.deltaY / -250 || e.wheelDeltaY / 1000 || e.wheelDelta / 1000;
- diff = diff * r.wheelSensitivity;
-
- var needsWheelFix = e.deltaMode === 1;
- if( needsWheelFix ){ // fixes slow wheel events on ff/linux and ff/windows
- diff *= 33;
- }
-
- cy.zoom( {
- level: cy.zoom() * Math.pow( 10, diff ),
- renderedPosition: { x: rpos[0], y: rpos[1] }
- } );
- }
-
- };
-
- // Functions to help with whether mouse wheel should trigger zooming
- // --
- r.registerBinding( r.container, 'wheel', wheelHandler, true );
-
- // disable nonstandard wheel events
- // r.registerBinding(r.container, 'mousewheel', wheelHandler, true);
- // r.registerBinding(r.container, 'DOMMouseScroll', wheelHandler, true);
- // r.registerBinding(r.container, 'MozMousePixelScroll', wheelHandler, true); // older firefox
-
- r.registerBinding( window, 'scroll', function scrollHandler( e ){ // eslint-disable-line no-undef
- r.scrollingPage = true;
-
- clearTimeout( r.scrollingPageTimeout );
- r.scrollingPageTimeout = setTimeout( function(){
- r.scrollingPage = false;
- }, 250 );
- }, true );
-
- // Functions to help with handling mouseout/mouseover on the Cytoscape container
- // Handle mouseout on Cytoscape container
- r.registerBinding( r.container, 'mouseout', function mouseOutHandler( e ){
- var pos = r.projectIntoViewport( e.clientX, e.clientY );
-
- r.cy.trigger( new Event( e, {
- type: 'mouseout',
- cyPosition: { x: pos[0], y: pos[1] }
- } ) );
- }, false );
-
- r.registerBinding( r.container, 'mouseover', function mouseOverHandler( e ){
- var pos = r.projectIntoViewport( e.clientX, e.clientY );
-
- r.cy.trigger( new Event( e, {
- type: 'mouseover',
- cyPosition: { x: pos[0], y: pos[1] }
- } ) );
- }, false );
-
- var f1x1, f1y1, f2x1, f2y1; // starting points for pinch-to-zoom
- var distance1, distance1Sq; // initial distance between finger 1 and finger 2 for pinch-to-zoom
- var center1, modelCenter1; // center point on start pinch to zoom
- var offsetLeft, offsetTop;
- var containerWidth, containerHeight;
- var twoFingersStartInside;
-
- var distance = function( x1, y1, x2, y2 ){
- return Math.sqrt( (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) );
- };
-
- var distanceSq = function( x1, y1, x2, y2 ){
- return (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1);
- };
-
- var touchstartHandler;
- r.registerBinding( r.container, 'touchstart', touchstartHandler = function( e ){
- r.touchData.capture = true;
- r.data.bgActivePosistion = undefined;
-
- var cy = r.cy;
- var now = r.touchData.now;
- var earlier = r.touchData.earlier;
-
- if( e.touches[0] ){ var pos = r.projectIntoViewport( e.touches[0].clientX, e.touches[0].clientY ); now[0] = pos[0]; now[1] = pos[1]; }
- if( e.touches[1] ){ var pos = r.projectIntoViewport( e.touches[1].clientX, e.touches[1].clientY ); now[2] = pos[0]; now[3] = pos[1]; }
- if( e.touches[2] ){ var pos = r.projectIntoViewport( e.touches[2].clientX, e.touches[2].clientY ); now[4] = pos[0]; now[5] = pos[1]; }
-
- // record starting points for pinch-to-zoom
- if( e.touches[1] ){
-
- freeDraggedElements( r.dragData.touchDragEles );
-
- var offsets = r.findContainerClientCoords();
- offsetLeft = offsets[0];
- offsetTop = offsets[1];
- containerWidth = offsets[2];
- containerHeight = offsets[3];
-
- f1x1 = e.touches[0].clientX - offsetLeft;
- f1y1 = e.touches[0].clientY - offsetTop;
-
- f2x1 = e.touches[1].clientX - offsetLeft;
- f2y1 = e.touches[1].clientY - offsetTop;
-
- twoFingersStartInside =
- 0 <= f1x1 && f1x1 <= containerWidth
- && 0 <= f2x1 && f2x1 <= containerWidth
- && 0 <= f1y1 && f1y1 <= containerHeight
- && 0 <= f2y1 && f2y1 <= containerHeight
- ;
-
- var pan = cy.pan();
- var zoom = cy.zoom();
-
- distance1 = distance( f1x1, f1y1, f2x1, f2y1 );
- distance1Sq = distanceSq( f1x1, f1y1, f2x1, f2y1 );
- center1 = [ (f1x1 + f2x1) / 2, (f1y1 + f2y1) / 2 ];
- modelCenter1 = [
- (center1[0] - pan.x) / zoom,
- (center1[1] - pan.y) / zoom
- ];
-
- // consider context tap
- var cxtDistThreshold = 200;
- var cxtDistThresholdSq = cxtDistThreshold * cxtDistThreshold;
- if( distance1Sq < cxtDistThresholdSq && !e.touches[2] ){
-
- var near1 = r.findNearestElement( now[0], now[1], true, true );
- var near2 = r.findNearestElement( now[2], now[3], true, true );
-
- if( near1 && near1.isNode() ){
- near1.activate().trigger( new Event( e, {
- type: 'cxttapstart',
- cyPosition: { x: now[0], y: now[1] }
- } ) );
- r.touchData.start = near1;
-
- } else if( near2 && near2.isNode() ){
- near2.activate().trigger( new Event( e, {
- type: 'cxttapstart',
- cyPosition: { x: now[0], y: now[1] }
- } ) );
- r.touchData.start = near2;
-
- } else {
- cy.trigger( new Event( e, {
- type: 'cxttapstart',
- cyPosition: { x: now[0], y: now[1] }
- } ) );
- r.touchData.start = null;
- }
-
- if( r.touchData.start ){ r.touchData.start._private.grabbed = false; }
- r.touchData.cxt = true;
- r.touchData.cxtDragged = false;
- r.data.bgActivePosistion = undefined;
-
- r.redraw();
- return;
-
- }
-
- }
-
- if( e.touches[2] ){
- // ignore
- } else if( e.touches[1] ){
- // ignore
- } else if( e.touches[0] ){
- var nears = r.findNearestElements( now[0], now[1], true, true );
- var near = nears[0];
-
- if( near != null ){
- near.activate();
-
- r.touchData.start = near;
- r.touchData.starts = nears;
-
- if( r.nodeIsGrabbable( near ) ){
-
- var draggedEles = r.dragData.touchDragEles = [];
-
- r.redrawHint( 'eles', true );
- r.redrawHint( 'drag', true );
-
- if( near.selected() ){
- // reset drag elements, since near will be added again
-
- var selectedNodes = cy.$( function(){
- return this.selected() && r.nodeIsGrabbable( this );
- } );
-
- addNodesToDrag( selectedNodes, { addToList: draggedEles } );
- } else {
- addNodeToDrag( near, { addToList: draggedEles } );
- }
-
- setGrabTarget( near );
-
- near.trigger( new Event( e, {
- type: 'grab',
- cyPosition: { x: now[0], y: now[1] }
- } ) );
- }
- }
-
- triggerEvents( near, [ 'touchstart', 'tapstart', 'vmousedown' ], e, {
- cyPosition: { x: now[0], y: now[1] }
- } );
-
- if( near == null ){
- r.data.bgActivePosistion = {
- x: pos[0],
- y: pos[1]
- };
-
- r.redrawHint( 'select', true );
- r.redraw();
- }
-
-
- // Tap, taphold
- // -----
-
- r.touchData.startPosition = [];
- for (var i=0; i<now.length; i++) {
- earlier[i] = now[i];
- r.touchData.startPosition[i] = now[i];
- }
-
- r.touchData.startGPosition = [ e.touches[0].clientX, e.touches[0].clientY ];
-
- r.touchData.singleTouchMoved = false;
- r.touchData.singleTouchStartTime = +new Date();
-
- clearTimeout( r.touchData.tapholdTimeout );
- r.touchData.tapholdTimeout = setTimeout( function(){
- if(
- r.touchData.singleTouchMoved === false
- && !r.pinching // if pinching, then taphold unselect shouldn't take effect
- && !r.touchData.selecting // box selection shouldn't allow taphold through
- ){
- triggerEvents( r.touchData.start, [ 'taphold' ], e, {
- cyPosition: { x: now[0], y: now[1] }
- } );
-
- if( !r.touchData.start ){
- cy.$( ':selected' ).unselect();
- }
-
- }
- }, r.tapholdDuration );
- }
-
- }, false );
-
- var touchmoveHandler;
- r.registerBinding(window, 'touchmove', touchmoveHandler = function(e) { // eslint-disable-line no-undef
- var select = r.selection;
- var capture = r.touchData.capture;
- var cy = r.cy;
- var now = r.touchData.now;
- var earlier = r.touchData.earlier;
- var zoom = cy.zoom();
-
- if( e.touches[0] ){ var pos = r.projectIntoViewport( e.touches[0].clientX, e.touches[0].clientY ); now[0] = pos[0]; now[1] = pos[1]; }
- if( e.touches[1] ){ var pos = r.projectIntoViewport( e.touches[1].clientX, e.touches[1].clientY ); now[2] = pos[0]; now[3] = pos[1]; }
- if( e.touches[2] ){ var pos = r.projectIntoViewport( e.touches[2].clientX, e.touches[2].clientY ); now[4] = pos[0]; now[5] = pos[1]; }
-
- var isOverThresholdDrag;
-
- if( capture && e.touches[0] ){
- var disp = []; for (var j=0;j<now.length;j++) { disp[j] = now[j] - earlier[j]; }
- var startGPos = r.touchData.startGPosition;
- var dx = e.touches[0].clientX - startGPos[0];
- var dx2 = dx * dx;
- var dy = e.touches[0].clientY - startGPos[1];
- var dy2 = dy * dy;
- var dist2 = dx2 + dy2;
-
- isOverThresholdDrag = dist2 >= r.touchTapThreshold2;
- }
-
- // context swipe cancelling
- if( capture && r.touchData.cxt ){
- e.preventDefault();
-
- var f1x2 = e.touches[0].clientX - offsetLeft, f1y2 = e.touches[0].clientY - offsetTop;
- var f2x2 = e.touches[1].clientX - offsetLeft, f2y2 = e.touches[1].clientY - offsetTop;
- // var distance2 = distance( f1x2, f1y2, f2x2, f2y2 );
- var distance2Sq = distanceSq( f1x2, f1y2, f2x2, f2y2 );
- var factorSq = distance2Sq / distance1Sq;
-
- var distThreshold = 150;
- var distThresholdSq = distThreshold * distThreshold;
- var factorThreshold = 1.5;
- var factorThresholdSq = factorThreshold * factorThreshold;
-
- // cancel ctx gestures if the distance b/t the fingers increases
- if( factorSq >= factorThresholdSq || distance2Sq >= distThresholdSq ){
- r.touchData.cxt = false;
- if( r.touchData.start ){ r.touchData.start.unactivate(); r.touchData.start = null; }
- r.data.bgActivePosistion = undefined;
- r.redrawHint( 'select', true );
-
- var cxtEvt = new Event( e, {
- type: 'cxttapend',
- cyPosition: { x: now[0], y: now[1] }
- } );
- if( r.touchData.start ){
- r.touchData.start.trigger( cxtEvt );
- } else {
- cy.trigger( cxtEvt );
- }
- }
-
- }
-
- // context swipe
- if( capture && r.touchData.cxt ){
- var cxtEvt = new Event( e, {
- type: 'cxtdrag',
- cyPosition: { x: now[0], y: now[1] }
- } );
- r.data.bgActivePosistion = undefined;
- r.redrawHint( 'select', true );
-
- if( r.touchData.start ){
- r.touchData.start.trigger( cxtEvt );
- } else {
- cy.trigger( cxtEvt );
- }
-
- if( r.touchData.start ){ r.touchData.start._private.grabbed = false; }
- r.touchData.cxtDragged = true;
-
- var near = r.findNearestElement( now[0], now[1], true, true );
-
- if( !r.touchData.cxtOver || near !== r.touchData.cxtOver ){
-
- if( r.touchData.cxtOver ){
- r.touchData.cxtOver.trigger( new Event( e, {
- type: 'cxtdragout',
- cyPosition: { x: now[0], y: now[1] }
- } ) );
- }
-
- r.touchData.cxtOver = near;
-
- if( near ){
- near.trigger( new Event( e, {
- type: 'cxtdragover',
- cyPosition: { x: now[0], y: now[1] }
- } ) );
-
- }
-
- }
-
- // box selection
- } else if( capture && e.touches[2] && cy.boxSelectionEnabled() ){
- e.preventDefault();
-
- r.data.bgActivePosistion = undefined;
-
- this.lastThreeTouch = +new Date();
-
- if( !r.touchData.selecting ){
- cy.trigger('boxstart');
- }
-
- r.touchData.selecting = true;
-
- r.redrawHint( 'select', true );
-
- if( !select || select.length === 0 || select[0] === undefined ){
- select[0] = (now[0] + now[2] + now[4]) / 3;
- select[1] = (now[1] + now[3] + now[5]) / 3;
- select[2] = (now[0] + now[2] + now[4]) / 3 + 1;
- select[3] = (now[1] + now[3] + now[5]) / 3 + 1;
- } else {
- select[2] = (now[0] + now[2] + now[4]) / 3;
- select[3] = (now[1] + now[3] + now[5]) / 3;
- }
-
- select[4] = 1;
- r.touchData.selecting = true;
-
- r.redraw();
-
- // pinch to zoom
- } else if( capture && e.touches[1] && cy.zoomingEnabled() && cy.panningEnabled() && cy.userZoomingEnabled() && cy.userPanningEnabled() ){ // two fingers => pinch to zoom
- e.preventDefault();
-
- r.data.bgActivePosistion = undefined;
- r.redrawHint( 'select', true );
-
- var draggedEles = r.dragData.touchDragEles;
- if( draggedEles ){
- r.redrawHint( 'drag', true );
-
- for( var i = 0; i < draggedEles.length; i++ ){
- draggedEles[ i ]._private.grabbed = false;
- draggedEles[ i ]._private.rscratch.inDragLayer = false;
- }
- }
-
- // (x2, y2) for fingers 1 and 2
- var f1x2 = e.touches[0].clientX - offsetLeft, f1y2 = e.touches[0].clientY - offsetTop;
- var f2x2 = e.touches[1].clientX - offsetLeft, f2y2 = e.touches[1].clientY - offsetTop;
-
-
- var distance2 = distance( f1x2, f1y2, f2x2, f2y2 );
- // var distance2Sq = distanceSq( f1x2, f1y2, f2x2, f2y2 );
- // var factor = Math.sqrt( distance2Sq ) / Math.sqrt( distance1Sq );
- var factor = distance2 / distance1;
-
- if( factor != 1 && twoFingersStartInside ){
- // delta finger1
- var df1x = f1x2 - f1x1;
- var df1y = f1y2 - f1y1;
-
- // delta finger 2
- var df2x = f2x2 - f2x1;
- var df2y = f2y2 - f2y1;
-
- // translation is the normalised vector of the two fingers movement
- // i.e. so pinching cancels out and moving together pans
- var tx = (df1x + df2x) / 2;
- var ty = (df1y + df2y) / 2;
-
- // adjust factor by the speed multiplier
- // var speed = 1.5;
- // if( factor > 1 ){
- // factor = (factor - 1) * speed + 1;
- // } else {
- // factor = 1 - (1 - factor) * speed;
- // }
-
- // now calculate the zoom
- var zoom1 = cy.zoom();
- var zoom2 = zoom1 * factor;
- var pan1 = cy.pan();
-
- // the model center point converted to the current rendered pos
- var ctrx = modelCenter1[0] * zoom1 + pan1.x;
- var ctry = modelCenter1[1] * zoom1 + pan1.y;
-
- var pan2 = {
- x: -zoom2 / zoom1 * (ctrx - pan1.x - tx) + ctrx,
- y: -zoom2 / zoom1 * (ctry - pan1.y - ty) + ctry
- };
-
- // remove dragged eles
- if( r.touchData.start ){
- var draggedEles = r.dragData.touchDragEles;
-
- freeDraggedElements( draggedEles );
-
- r.redrawHint( 'drag', true );
- r.redrawHint( 'eles', true );
-
- r.touchData.start
- .trigger( 'free' )
- .unactivate()
- ;
- }
-
- cy.viewport( {
- zoom: zoom2,
- pan: pan2,
- cancelOnFailedZoom: true
- } );
-
- distance1 = distance2;
- f1x1 = f1x2;
- f1y1 = f1y2;
- f2x1 = f2x2;
- f2y1 = f2y2;
-
- r.pinching = true;
- }
-
- // Re-project
- if( e.touches[0] ){ var pos = r.projectIntoViewport( e.touches[0].clientX, e.touches[0].clientY ); now[0] = pos[0]; now[1] = pos[1]; }
- if( e.touches[1] ){ var pos = r.projectIntoViewport( e.touches[1].clientX, e.touches[1].clientY ); now[2] = pos[0]; now[3] = pos[1]; }
- if( e.touches[2] ){ var pos = r.projectIntoViewport( e.touches[2].clientX, e.touches[2].clientY ); now[4] = pos[0]; now[5] = pos[1]; }
-
- } else if( e.touches[0] ){
- var start = r.touchData.start;
- var last = r.touchData.last;
- var near;
-
- if( !r.hoverData.draggingEles && !r.swipePanning ){
- near = r.findNearestElement( now[0], now[1], true, true );
- }
-
- if( capture && start != null ){
- e.preventDefault();
- }
-
- // dragging nodes
- if( capture && start != null && r.nodeIsDraggable( start ) ){
-
- if( isOverThresholdDrag ){ // then dragging can happen
- var draggedEles = r.dragData.touchDragEles;
- var justStartedDrag = !r.dragData.didDrag;
-
- if( justStartedDrag ){
- addNodesToDrag( cy.collection( draggedEles ), { inDragLayer: true } );
- }
-
- for( var k = 0; k < draggedEles.length; k++ ){
- var draggedEle = draggedEles[ k ];
-
- if( r.nodeIsDraggable( draggedEle ) && draggedEle.grabbed() ){
- r.dragData.didDrag = true;
- var dPos = draggedEle._private.position;
- var updatePos = !draggedEle.isParent();
-
- if( updatePos && is.number( disp[0] ) && is.number( disp[1] ) ){
- dPos.x += disp[0];
- dPos.y += disp[1];
- }
-
- if( justStartedDrag ){
- r.redrawHint( 'eles', true );
-
- var dragDelta = r.touchData.dragDelta;
-
- if( updatePos && dragDelta && is.number( dragDelta[0] ) && is.number( dragDelta[1] ) ){
- dPos.x += dragDelta[0];
- dPos.y += dragDelta[1];
- }
-
- }
- }
- }
-
- var tcol = cy.collection( draggedEles );
-
- tcol.updateCompoundBounds();
- tcol.trigger( 'position drag' );
-
- r.hoverData.draggingEles = true;
-
- r.redrawHint( 'drag', true );
-
- if(
- r.touchData.startPosition[0] == earlier[0]
- && r.touchData.startPosition[1] == earlier[1]
- ){
-
- r.redrawHint( 'eles', true );
- }
-
- r.redraw();
- } else { // otherise keep track of drag delta for later
- var dragDelta = r.touchData.dragDelta = r.touchData.dragDelta || [];
-
- if( dragDelta.length === 0 ){
- dragDelta.push( disp[0] );
- dragDelta.push( disp[1] );
- } else {
- dragDelta[0] += disp[0];
- dragDelta[1] += disp[1];
- }
- }
- }
-
- // touchmove
- {
- triggerEvents( (start || near), [ 'touchmove', 'tapdrag', 'vmousemove' ], e, {
- cyPosition: { x: now[0], y: now[1] }
- } );
-
- if( ( !start || !start.grabbed() ) && near != last ){
- if( last ){ last.trigger( new Event( e, { type: 'tapdragout', cyPosition: { x: now[0], y: now[1] } } ) ); }
- if( near ){ near.trigger( new Event( e, { type: 'tapdragover', cyPosition: { x: now[0], y: now[1] } } ) ); }
- }
-
- r.touchData.last = near;
- }
-
- // check to cancel taphold
- if( capture ){
- for( var i = 0; i < now.length; i++ ){
- if( now[ i ]
- && r.touchData.startPosition[ i ]
- && isOverThresholdDrag ){
-
- r.touchData.singleTouchMoved = true;
- }
- }
- }
-
- // panning
- if(
- capture
- && ( start == null || start.isEdge() )
- && cy.panningEnabled() && cy.userPanningEnabled()
- ){
-
- var allowPassthrough = allowPanningPassthrough( start, r.touchData.starts );
-
- if( allowPassthrough ){
- e.preventDefault();
-
- if( r.swipePanning ){
- cy.panBy( {
- x: disp[0] * zoom,
- y: disp[1] * zoom
- } );
-
- } else if( isOverThresholdDrag ){
- r.swipePanning = true;
-
- cy.panBy( {
- x: dx * zoom,
- y: dy * zoom
- } );
-
- if( start ){
- start.unactivate();
-
- if( !r.data.bgActivePosistion ){
- r.data.bgActivePosistion = math.array2point( r.touchData.startPosition );
- }
-
- r.redrawHint( 'select', true );
-
- r.touchData.start = null;
- }
- }
-
- }
-
- // Re-project
- var pos = r.projectIntoViewport( e.touches[0].clientX, e.touches[0].clientY );
- now[0] = pos[0]; now[1] = pos[1];
- }
- }
-
- for( var j = 0; j < now.length; j++ ){ earlier[ j ] = now[ j ]; }
- //r.redraw();
-
- }, false );
-
- var touchcancelHandler;
- r.registerBinding( window, 'touchcancel', touchcancelHandler = function( e ){ // eslint-disable-line no-undef
- var start = r.touchData.start;
-
- r.touchData.capture = false;
-
- if( start ){
- start.unactivate();
- }
- } );
-
- var touchendHandler;
- r.registerBinding( window, 'touchend', touchendHandler = function( e ){ // eslint-disable-line no-undef
- var start = r.touchData.start;
-
- var capture = r.touchData.capture;
-
- if( capture ){
- r.touchData.capture = false;
-
- e.preventDefault();
- } else {
- return;
- }
-
- var select = r.selection;
-
- r.swipePanning = false;
- r.hoverData.draggingEles = false;
-
- var cy = r.cy;
- var zoom = cy.zoom();
- var now = r.touchData.now;
- var earlier = r.touchData.earlier;
-
- if( e.touches[0] ){ var pos = r.projectIntoViewport( e.touches[0].clientX, e.touches[0].clientY ); now[0] = pos[0]; now[1] = pos[1]; }
- if( e.touches[1] ){ var pos = r.projectIntoViewport( e.touches[1].clientX, e.touches[1].clientY ); now[2] = pos[0]; now[3] = pos[1]; }
- if( e.touches[2] ){ var pos = r.projectIntoViewport( e.touches[2].clientX, e.touches[2].clientY ); now[4] = pos[0]; now[5] = pos[1]; }
-
- if( start ){
- start.unactivate();
- }
-
- var ctxTapend;
- if( r.touchData.cxt ){
- ctxTapend = new Event( e, {
- type: 'cxttapend',
- cyPosition: { x: now[0], y: now[1] }
- } );
-
- if( start ){
- start.trigger( ctxTapend );
- } else {
- cy.trigger( ctxTapend );
- }
-
- if( !r.touchData.cxtDragged ){
- var ctxTap = new Event( e, {
- type: 'cxttap',
- cyPosition: { x: now[0], y: now[1] }
- } );
-
- if( start ){
- start.trigger( ctxTap );
- } else {
- cy.trigger( ctxTap );
- }
-
- }
-
- if( r.touchData.start ){ r.touchData.start._private.grabbed = false; }
- r.touchData.cxt = false;
- r.touchData.start = null;
-
- r.redraw();
- return;
- }
-
- // no more box selection if we don't have three fingers
- if( !e.touches[2] && cy.boxSelectionEnabled() && r.touchData.selecting ){
- r.touchData.selecting = false;
-
- var box = cy.collection( r.getAllInBox( select[0], select[1], select[2], select[3] ) );
-
- select[0] = undefined;
- select[1] = undefined;
- select[2] = undefined;
- select[3] = undefined;
- select[4] = 0;
-
- r.redrawHint( 'select', true );
-
- cy.trigger('boxend');
-
- var eleWouldBeSelected = function( ele ){ return ele.selectable() && !ele.selected(); };
-
- box
- .trigger('box')
- .stdFilter( eleWouldBeSelected )
- .select()
- .trigger('boxselect')
- ;
-
- if( box.nonempty() ){
- r.redrawHint( 'eles', true );
- }
-
- r.redraw();
- }
-
- if( start != null ){
- start.unactivate();
- }
-
- if( e.touches[2] ){
- r.data.bgActivePosistion = undefined;
- r.redrawHint( 'select', true );
- } else if( e.touches[1] ){
- // ignore
- } else if( e.touches[0] ){
- // ignore
-
- // Last touch released
- } else if( !e.touches[0] ){
-
- r.data.bgActivePosistion = undefined;
- r.redrawHint( 'select', true );
-
- var draggedEles = r.dragData.touchDragEles;
-
- if( start != null ){
-
- var startWasGrabbed = start._private.grabbed;
-
- freeDraggedElements( draggedEles );
-
- r.redrawHint( 'drag', true );
- r.redrawHint( 'eles', true );
-
- if( startWasGrabbed ){
- start.trigger( 'free' );
- }
-
- triggerEvents( start, [ 'touchend', 'tapend', 'vmouseup', 'tapdragout' ], e, {
- cyPosition: { x: now[0], y: now[1] }
- } );
-
- start.unactivate();
-
- r.touchData.start = null;
-
- } else {
- var near = r.findNearestElement( now[0], now[1], true, true );
-
- triggerEvents( near, [ 'touchend', 'tapend', 'vmouseup', 'tapdragout' ], e, {
- cyPosition: { x: now[0], y: now[1] }
- } );
-
- }
-
- var dx = r.touchData.startPosition[0] - now[0];
- var dx2 = dx * dx;
- var dy = r.touchData.startPosition[1] - now[1];
- var dy2 = dy * dy;
- var dist2 = dx2 + dy2;
- var rdist2 = dist2 * zoom * zoom;
-
- // Prepare to select the currently touched node, only if it hasn't been dragged past a certain distance
- if( start != null
- && !r.dragData.didDrag // didn't drag nodes around
- && start._private.selectable
- && rdist2 < r.touchTapThreshold2
- && !r.pinching // pinch to zoom should not affect selection
- ){
-
- if( cy.selectionType() === 'single' ){
- cy.$( ':selected' ).unmerge( start ).unselect();
- start.select();
- } else {
- if( start.selected() ){
- start.unselect();
- } else {
- start.select();
- }
- }
-
- r.redrawHint( 'eles', true );
- }
-
- // Tap event, roughly same as mouse click event for touch
- if( !r.touchData.singleTouchMoved ){
- triggerEvents( start, [ 'tap', 'vclick' ], e, {
- cyPosition: { x: now[0], y: now[1] }
- } );
- }
-
- r.touchData.singleTouchMoved = true;
- }
-
- for( var j = 0; j < now.length; j++ ){ earlier[ j ] = now[ j ]; }
-
- r.dragData.didDrag = false; // reset for next mousedown
-
- if( e.touches.length === 0 ){
- r.touchData.dragDelta = [];
- r.touchData.startPosition = null;
- r.touchData.startGPosition = null;
- }
-
- if( e.touches.length < 2 ){
- r.pinching = false;
- r.redrawHint( 'eles', true );
- r.redraw();
- }
-
- //r.redraw();
-
- }, false );
-
- // fallback compatibility layer for ms pointer events
- if( typeof TouchEvent === 'undefined' ){
-
- var pointers = [];
-
- var makeTouch = function( e ){
- return {
- clientX: e.clientX,
- clientY: e.clientY,
- force: 1,
- identifier: e.pointerId,
- pageX: e.pageX,
- pageY: e.pageY,
- radiusX: e.width / 2,
- radiusY: e.height / 2,
- screenX: e.screenX,
- screenY: e.screenY,
- target: e.target
- };
- };
-
- var makePointer = function( e ){
- return {
- event: e,
- touch: makeTouch( e )
- };
- };
-
- var addPointer = function( e ){
- pointers.push( makePointer( e ) );
- };
-
- var removePointer = function( e ){
- for( var i = 0; i < pointers.length; i++ ){
- var p = pointers[ i ];
-
- if( p.event.pointerId === e.pointerId ){
- pointers.splice( i, 1 );
- return;
- }
- }
- };
-
- var updatePointer = function( e ){
- var p = pointers.filter( function( p ){
- return p.event.pointerId === e.pointerId;
- } )[0];
-
- p.event = e;
- p.touch = makeTouch( e );
- };
-
- var addTouchesToEvent = function( e ){
- e.touches = pointers.map( function( p ){
- return p.touch;
- } );
- };
-
- r.registerBinding( r.container, 'pointerdown', function( e ){
- if( e.pointerType === 'mouse' ){ return; } // mouse already handled
-
- e.preventDefault();
-
- addPointer( e );
-
- addTouchesToEvent( e );
- touchstartHandler( e );
- } );
-
- r.registerBinding( r.container, 'pointerup', function( e ){
- if( e.pointerType === 'mouse' ){ return; } // mouse already handled
-
- removePointer( e );
-
- addTouchesToEvent( e );
- touchendHandler( e );
- } );
-
- r.registerBinding( r.container, 'pointercancel', function( e ){
- if( e.pointerType === 'mouse' ){ return; } // mouse already handled
-
- removePointer( e );
-
- addTouchesToEvent( e );
- touchcancelHandler( e );
- } );
-
- r.registerBinding( r.container, 'pointermove', function( e ){
- if( e.pointerType === 'mouse' ){ return; } // mouse already handled
-
- e.preventDefault();
-
- updatePointer( e );
-
- addTouchesToEvent( e );
- touchmoveHandler( e );
- } );
-
- }
-};
-
-module.exports = BRp;
-
-},{"../../../event":45,"../../../is":83,"../../../math":85,"../../../util":100}],62:[function(_dereq_,module,exports){
-'use strict';
-
-var math = _dereq_( '../../../math' );
-
-var BRp = {};
-
-BRp.generatePolygon = function( name, points ){
- return ( this.nodeShapes[ name ] = {
- renderer: this,
-
- name: name,
-
- points: points,
-
- draw: function( context, centerX, centerY, width, height ){
- this.renderer.nodeShapeImpl( 'polygon', context, centerX, centerY, width, height, this.points );
- },
-
- intersectLine: function( nodeX, nodeY, width, height, x, y, padding ){
- return math.polygonIntersectLine(
- x, y,
- this.points,
- nodeX,
- nodeY,
- width / 2, height / 2,
- padding )
- ;
- },
-
- checkPoint: function( x, y, padding, width, height, centerX, centerY ){
- return math.pointInsidePolygon( x, y, this.points,
- centerX, centerY, width, height, [0, -1], padding )
- ;
- }
- } );
-};
-
-BRp.generateEllipse = function(){
- return ( this.nodeShapes['ellipse'] = {
- renderer: this,
-
- name: 'ellipse',
-
- draw: function( context, centerX, centerY, width, height ){
- this.renderer.nodeShapeImpl( this.name, context, centerX, centerY, width, height );
- },
-
- intersectLine: function( nodeX, nodeY, width, height, x, y, padding ){
- return math.intersectLineEllipse(
- x, y,
- nodeX,
- nodeY,
- width / 2 + padding,
- height / 2 + padding )
- ;
- },
-
- checkPoint: function( x, y, padding, width, height, centerX, centerY ){
- x -= centerX;
- y -= centerY;
-
- x /= (width / 2 + padding);
- y /= (height / 2 + padding);
-
- return x * x + y * y <= 1;
- }
- } );
-};
-
-BRp.generateRoundRectangle = function(){
- return ( this.nodeShapes['roundrectangle'] = {
- renderer: this,
-
- name: 'roundrectangle',
-
- points: math.generateUnitNgonPointsFitToSquare( 4, 0 ),
-
- draw: function( context, centerX, centerY, width, height ){
- this.renderer.nodeShapeImpl( this.name, context, centerX, centerY, width, height );
- },
-
- intersectLine: function( nodeX, nodeY, width, height, x, y, padding ){
- return math.roundRectangleIntersectLine(
- x, y,
- nodeX,
- nodeY,
- width, height,
- padding )
- ;
- },
-
- // Looks like the width passed into this function is actually the total width / 2
- checkPoint: function(
- x, y, padding, width, height, centerX, centerY ){
-
- var cornerRadius = math.getRoundRectangleRadius( width, height );
-
- // Check hBox
- if( math.pointInsidePolygon( x, y, this.points,
- centerX, centerY, width, height - 2 * cornerRadius, [0, -1], padding ) ){
- return true;
- }
-
- // Check vBox
- if( math.pointInsidePolygon( x, y, this.points,
- centerX, centerY, width - 2 * cornerRadius, height, [0, -1], padding ) ){
- return true;
- }
-
- var checkInEllipse = function( x, y, centerX, centerY, width, height, padding ){
- x -= centerX;
- y -= centerY;
-
- x /= (width / 2 + padding);
- y /= (height / 2 + padding);
-
- return (x * x + y * y <= 1);
- };
-
-
- // Check top left quarter circle
- if( checkInEllipse( x, y,
- centerX - width / 2 + cornerRadius,
- centerY - height / 2 + cornerRadius,
- cornerRadius * 2, cornerRadius * 2, padding ) ){
-
- return true;
- }
-
- // Check top right quarter circle
- if( checkInEllipse( x, y,
- centerX + width / 2 - cornerRadius,
- centerY - height / 2 + cornerRadius,
- cornerRadius * 2, cornerRadius * 2, padding ) ){
-
- return true;
- }
-
- // Check bottom right quarter circle
- if( checkInEllipse( x, y,
- centerX + width / 2 - cornerRadius,
- centerY + height / 2 - cornerRadius,
- cornerRadius * 2, cornerRadius * 2, padding ) ){
-
- return true;
- }
-
- // Check bottom left quarter circle
- if( checkInEllipse( x, y,
- centerX - width / 2 + cornerRadius,
- centerY + height / 2 - cornerRadius,
- cornerRadius * 2, cornerRadius * 2, padding ) ){
-
- return true;
- }
-
- return false;
- }
- } );
-};
-
-BRp.registerNodeShapes = function(){
- var nodeShapes = this.nodeShapes = {};
- var renderer = this;
-
- this.generateEllipse();
-
- this.generatePolygon( 'triangle', math.generateUnitNgonPointsFitToSquare( 3, 0 ) );
-
- this.generatePolygon( 'rectangle', math.generateUnitNgonPointsFitToSquare( 4, 0 ) );
- nodeShapes[ 'square' ] = nodeShapes[ 'rectangle' ];
-
- this.generateRoundRectangle();
-
- this.generatePolygon( 'diamond', [
- 0, 1,
- 1, 0,
- 0, -1,
- -1, 0
- ] );
-
- this.generatePolygon( 'pentagon', math.generateUnitNgonPointsFitToSquare( 5, 0 ) );
-
- this.generatePolygon( 'hexagon', math.generateUnitNgonPointsFitToSquare( 6, 0 ) );
-
- this.generatePolygon( 'heptagon', math.generateUnitNgonPointsFitToSquare( 7, 0 ) );
-
- this.generatePolygon( 'octagon', math.generateUnitNgonPointsFitToSquare( 8, 0 ) );
-
- var star5Points = new Array( 20 );
- {
- var outerPoints = math.generateUnitNgonPoints( 5, 0 );
- var innerPoints = math.generateUnitNgonPoints( 5, Math.PI / 5 );
-
- // Outer radius is 1; inner radius of star is smaller
- var innerRadius = 0.5 * (3 - Math.sqrt( 5 ));
- innerRadius *= 1.57;
-
- for( var i = 0;i < innerPoints.length / 2;i++ ){
- innerPoints[ i * 2] *= innerRadius;
- innerPoints[ i * 2 + 1] *= innerRadius;
- }
-
- for( var i = 0;i < 20 / 4;i++ ){
- star5Points[ i * 4] = outerPoints[ i * 2];
- star5Points[ i * 4 + 1] = outerPoints[ i * 2 + 1];
-
- star5Points[ i * 4 + 2] = innerPoints[ i * 2];
- star5Points[ i * 4 + 3] = innerPoints[ i * 2 + 1];
- }
- }
-
- star5Points = math.fitPolygonToSquare( star5Points );
-
- this.generatePolygon( 'star', star5Points );
-
- this.generatePolygon( 'vee', [
- -1, -1,
- 0, -0.333,
- 1, -1,
- 0, 1
- ] );
-
- this.generatePolygon( 'rhomboid', [
- -1, -1,
- 0.333, -1,
- 1, 1,
- -0.333, 1
- ] );
-
- nodeShapes.makePolygon = function( points ){
-
- // use caching on user-specified polygons so they are as fast as native shapes
-
- var key = points.join( '$' );
- var name = 'polygon-' + key;
- var shape;
-
- if( (shape = this[ name ]) ){ // got cached shape
- return shape;
- }
-
- // create and cache new shape
- return renderer.generatePolygon( name, points );
- };
-
-};
-
-module.exports = BRp;
-
-},{"../../../math":85}],63:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../../../util' );
-
-var BRp = {};
-
-BRp.timeToRender = function(){
- return this.redrawTotalTime / this.redrawCount;
-};
-
-BRp.redraw = function( options ){
- options = options || util.staticEmptyObject();
-
- var r = this;
-
- if( r.averageRedrawTime === undefined ){ r.averageRedrawTime = 0; }
- if( r.lastRedrawTime === undefined ){ r.lastRedrawTime = 0; }
- if( r.lastDrawTime === undefined ){ r.lastDrawTime = 0; }
-
- r.requestedFrame = true;
- r.renderOptions = options;
-};
-
-BRp.beforeRender = function( fn, priority ){
- priority = priority || 0;
-
- var cbs = this.beforeRenderCallbacks;
-
- cbs.push({ fn: fn, priority: priority });
-
- // higher priority callbacks executed first
- cbs.sort(function( a, b ){ return b.priority - a.priority; });
-};
-
-var beforeRenderCallbacks = function( r, willDraw, startTime ){
- var cbs = r.beforeRenderCallbacks;
-
- for( var i = 0; i < cbs.length; i++ ){
- cbs[i].fn( willDraw, startTime );
- }
-};
-
-BRp.startRenderLoop = function(){
- var r = this;
-
- if( r.renderLoopStarted ){
- return;
- } else {
- r.renderLoopStarted = true;
- }
-
- var renderFn = function( requestTime ){
- if( r.destroyed ){ return; }
-
- if( r.requestedFrame && !r.skipFrame ){
- beforeRenderCallbacks( r, true, requestTime );
-
- var startTime = util.performanceNow();
-
- r.render( r.renderOptions );
-
- var endTime = r.lastDrawTime = util.performanceNow();
-
- if( r.averageRedrawTime === undefined ){
- r.averageRedrawTime = endTime - startTime;
- }
-
- if( r.redrawCount === undefined ){
- r.redrawCount = 0;
- }
-
- r.redrawCount++;
-
- if( r.redrawTotalTime === undefined ){
- r.redrawTotalTime = 0;
- }
-
- var duration = endTime - startTime;
-
- r.redrawTotalTime += duration;
- r.lastRedrawTime = duration;
-
- // use a weighted average with a bias from the previous average so we don't spike so easily
- r.averageRedrawTime = r.averageRedrawTime / 2 + duration / 2;
-
- r.requestedFrame = false;
- } else {
- beforeRenderCallbacks( r, false, requestTime );
- }
-
- r.skipFrame = false;
-
- util.requestAnimationFrame( renderFn );
- };
-
- util.requestAnimationFrame( renderFn );
-
-};
-
-module.exports = BRp;
-
-},{"../../../util":100}],64:[function(_dereq_,module,exports){
-'use strict';
-
-var CRp = {};
-
-var impl;
-
-CRp.arrowShapeImpl = function( name ){
- return ( impl || (impl = {
- 'polygon': function( context, points ){
- for( var i = 0; i < points.length; i++ ){
- var pt = points[ i ];
-
- context.lineTo( pt.x, pt.y );
- }
- },
-
- 'triangle-backcurve': function( context, points, controlPoint ){
- var firstPt;
-
- for( var i = 0; i < points.length; i++ ){
- var pt = points[ i ];
-
- if( i === 0 ){
- firstPt = pt;
- }
-
- context.lineTo( pt.x, pt.y );
- }
-
- context.quadraticCurveTo( controlPoint.x, controlPoint.y, firstPt.x, firstPt.y );
- },
-
- 'triangle-tee': function( context, trianglePoints, teePoints ){
- if( context.beginPath ){ context.beginPath(); }
-
- var triPts = trianglePoints;
- for( var i = 0; i < triPts.length; i++ ){
- var pt = triPts[ i ];
-
- context.lineTo( pt.x, pt.y );
- }
-
- if( context.closePath ){ context.closePath(); }
-
- if( context.beginPath ){ context.beginPath(); }
-
- var teePts = teePoints;
- var firstTeePt = teePoints[0];
- context.moveTo( firstTeePt.x, firstTeePt.y );
-
- for( var i = 0; i < teePts.length; i++ ){
- var pt = teePts[ i ];
-
- context.lineTo( pt.x, pt.y );
- }
-
- if( context.closePath ){ context.closePath(); }
- },
-
- 'circle': function( context, rx, ry, r ){
- context.arc( rx, ry, r, 0, Math.PI * 2, false );
- }
- }) )[ name ];
-};
-
-module.exports = CRp;
-
-},{}],65:[function(_dereq_,module,exports){
-'use strict';
-
-var CRp = {};
-
-CRp.drawEdge = function( context, edge, shiftToOriginWithBb, drawLabel, drawOverlayInstead ){
- var rs = edge._private.rscratch;
- var usePaths = this.usePaths();
-
- // if bezier ctrl pts can not be calculated, then die
- if( rs.badLine || isNaN(rs.allpts[0]) ){ // isNaN in case edge is impossible and browser bugs (e.g. safari)
- return;
- }
-
- // Edge line width
- if( edge.pstyle( 'width' ).pfValue <= 0 ){
- return;
- }
-
- var bb;
- if( shiftToOriginWithBb ){
- bb = shiftToOriginWithBb;
-
- context.translate( -bb.x1, -bb.y1 );
- }
-
- var overlayPadding = edge.pstyle( 'overlay-padding' ).pfValue;
- var overlayOpacity = edge.pstyle( 'overlay-opacity' ).value;
- var overlayColor = edge.pstyle( 'overlay-color' ).value;
-
- // Edge color & opacity
- if( drawOverlayInstead ){
-
- if( overlayOpacity === 0 ){ // exit early if no overlay
- return;
- }
-
- this.strokeStyle( context, overlayColor[0], overlayColor[1], overlayColor[2], overlayOpacity );
- context.lineCap = 'round';
-
- if( rs.edgeType == 'self' && !usePaths ){
- context.lineCap = 'butt';
- }
-
- } else {
- var lineColor = edge.pstyle( 'line-color' ).value;
-
- this.strokeStyle( context, lineColor[0], lineColor[1], lineColor[2], edge.pstyle( 'opacity' ).value );
-
- context.lineCap = 'butt';
- }
-
- context.lineJoin = 'round';
-
- var edgeWidth = edge.pstyle( 'width' ).pfValue + (drawOverlayInstead ? 2 * overlayPadding : 0);
- var lineStyle = drawOverlayInstead ? 'solid' : edge.pstyle( 'line-style' ).value;
- context.lineWidth = edgeWidth;
-
- var shadowBlur = edge.pstyle( 'shadow-blur' ).pfValue;
- var shadowOpacity = edge.pstyle( 'shadow-opacity' ).value;
- var shadowColor = edge.pstyle( 'shadow-color' ).value;
- var shadowOffsetX = edge.pstyle( 'shadow-offset-x' ).pfValue;
- var shadowOffsetY = edge.pstyle( 'shadow-offset-y' ).pfValue;
-
- this.shadowStyle( context, shadowColor, drawOverlayInstead ? 0 : shadowOpacity, shadowBlur, shadowOffsetX, shadowOffsetY );
-
- this.drawEdgePath(
- edge,
- context,
- rs.allpts,
- lineStyle,
- edgeWidth
- );
-
- this.drawArrowheads( context, edge, drawOverlayInstead );
-
- this.shadowStyle( context, 'transparent', 0 ); // reset for next guy
-
- if( !drawOverlayInstead ){
- this.drawEdge( context, edge, false, drawLabel, true );
- }
-
- this.drawElementText( context, edge, drawLabel );
-
- if( shiftToOriginWithBb ){
- context.translate( bb.x1, bb.y1 );
- }
-};
-
-
-CRp.drawEdgePath = function( edge, context, pts, type, width ){
- var rs = edge._private.rscratch;
- var canvasCxt = context;
- var path;
- var pathCacheHit = false;
- var usePaths = this.usePaths();
-
- if( usePaths ){
- var pathCacheKey = pts.join( '$' );
- var keyMatches = rs.pathCacheKey && rs.pathCacheKey === pathCacheKey;
-
- if( keyMatches ){
- path = context = rs.pathCache;
- pathCacheHit = true;
- } else {
- path = context = new Path2D(); // eslint-disable-line no-undef
- rs.pathCacheKey = pathCacheKey;
- rs.pathCache = path;
- }
- }
-
- if( canvasCxt.setLineDash ){ // for very outofdate browsers
- switch( type ){
- case 'dotted':
- canvasCxt.setLineDash( [ 1, 1 ] );
- break;
-
- case 'dashed':
- canvasCxt.setLineDash( [ 6, 3 ] );
- break;
-
- case 'solid':
- canvasCxt.setLineDash( [ ] );
- break;
- }
- }
-
- if( !pathCacheHit && !rs.badLine ){
- if( context.beginPath ){ context.beginPath(); }
- context.moveTo( pts[0], pts[1] );
-
- switch( rs.edgeType ){
- case 'bezier':
- case 'self':
- case 'compound':
- case 'multibezier':
- for( var i = 2; i + 3 < pts.length; i += 4 ){
- context.quadraticCurveTo( pts[ i ], pts[ i + 1], pts[ i + 2], pts[ i + 3] );
- }
- break;
-
- case 'straight':
- case 'segments':
- case 'haystack':
- for( var i = 2; i + 1 < pts.length; i += 2 ){
- context.lineTo( pts[ i ], pts[ i + 1] );
- }
- break;
- }
- }
-
- context = canvasCxt;
- if( usePaths ){
- context.stroke( path );
- } else {
- context.stroke();
- }
-
- // reset any line dashes
- if( context.setLineDash ){ // for very outofdate browsers
- context.setLineDash( [ ] );
- }
-
-};
-
-CRp.drawArrowheads = function( context, edge, drawOverlayInstead ){
- if( drawOverlayInstead ){ return; } // don't do anything for overlays
-
- var rs = edge._private.rscratch;
- var isHaystack = rs.edgeType === 'haystack';
-
- if( !isHaystack ){
- this.drawArrowhead( context, edge, 'source', rs.arrowStartX, rs.arrowStartY, rs.srcArrowAngle );
- }
-
- this.drawArrowhead( context, edge, 'mid-target', rs.midX, rs.midY, rs.midtgtArrowAngle );
-
- this.drawArrowhead( context, edge, 'mid-source', rs.midX, rs.midY, rs.midsrcArrowAngle );
-
- if( !isHaystack ){
- this.drawArrowhead( context, edge, 'target', rs.arrowEndX, rs.arrowEndY, rs.tgtArrowAngle );
- }
-};
-
-CRp.drawArrowhead = function( context, edge, prefix, x, y, angle ){
- if( isNaN( x ) || x == null || isNaN( y ) || y == null || isNaN( angle ) || angle == null ){ return; }
-
- var self = this;
- var arrowShape = edge.pstyle( prefix + '-arrow-shape' ).value;
-
- if( arrowShape === 'none' ){
- return;
- }
-
- var gco = context.globalCompositeOperation;
-
- var arrowClearFill = edge.pstyle( prefix + '-arrow-fill' ).value === 'hollow' ? 'both' : 'filled';
- var arrowFill = edge.pstyle( prefix + '-arrow-fill' ).value;
- var opacity = edge.pstyle( 'opacity' ).value;
-
- if( arrowShape === 'half-triangle-overshot' ){
- arrowFill = 'hollow';
- arrowClearFill = 'hollow';
- }
-
- if( opacity !== 1 || arrowFill === 'hollow' ){ // then extra clear is needed
- context.globalCompositeOperation = 'destination-out';
-
- self.fillStyle( context, 255, 255, 255, 1 );
- self.strokeStyle( context, 255, 255, 255, 1 );
-
- self.drawArrowShape( edge, prefix, context,
- arrowClearFill, edge.pstyle( 'width' ).pfValue, edge.pstyle( prefix + '-arrow-shape' ).value,
- x, y, angle
- );
-
- context.globalCompositeOperation = gco;
- } // otherwise, the opaque arrow clears it for free :)
-
- var color = edge.pstyle( prefix + '-arrow-color' ).value;
- self.fillStyle( context, color[0], color[1], color[2], opacity );
- self.strokeStyle( context, color[0], color[1], color[2], opacity );
-
- self.drawArrowShape( edge, prefix, context,
- arrowFill, edge.pstyle( 'width' ).pfValue, edge.pstyle( prefix + '-arrow-shape' ).value,
- x, y, angle
- );
-};
-
-CRp.drawArrowShape = function( edge, arrowType, context, fill, edgeWidth, shape, x, y, angle ){
- var r = this;
- var usePaths = this.usePaths();
- var rs = edge._private.rscratch;
- var pathCacheHit = false;
- var path;
- var canvasContext = context;
- var translation = { x: x, y: y };
- var size = this.getArrowWidth( edgeWidth );
- var shapeImpl = r.arrowShapes[ shape ];
-
- if( usePaths ){
- var pathCacheKey = size + '$' + shape + '$' + angle + '$' + x + '$' + y;
- rs.arrowPathCacheKey = rs.arrowPathCacheKey || {};
- rs.arrowPathCache = rs.arrowPathCache || {};
-
- var alreadyCached = rs.arrowPathCacheKey[ arrowType ] === pathCacheKey;
- if( alreadyCached ){
- path = context = rs.arrowPathCache[ arrowType ];
- pathCacheHit = true;
- } else {
- path = context = new Path2D(); // eslint-disable-line no-undef
- rs.arrowPathCacheKey[ arrowType ] = pathCacheKey;
- rs.arrowPathCache[ arrowType ] = path;
- }
- }
-
- if( context.beginPath ){ context.beginPath(); }
-
- if( !pathCacheHit ){
- shapeImpl.draw( context, size, angle, translation );
- }
-
- if( !shapeImpl.leavePathOpen && context.closePath ){
- context.closePath();
- }
-
- context = canvasContext;
-
- if( fill === 'filled' || fill === 'both' ){
- if( usePaths ){
- context.fill( path );
- } else {
- context.fill();
- }
- }
-
- if( fill === 'hollow' || fill === 'both' ){
- context.lineWidth = ( shapeImpl.matchEdgeWidth ? edgeWidth : 1 );
- context.lineJoin = 'miter';
-
- if( usePaths ){
- context.stroke( path );
- } else {
- context.stroke();
- }
-
- }
-};
-
-module.exports = CRp;
-
-},{}],66:[function(_dereq_,module,exports){
-'use strict';
-
-var math = _dereq_( '../../../math' );
-
-var CRp = {};
-
-CRp.drawElement = function( context, ele, shiftToOriginWithBb, showLabel ){
- var r = this;
-
- if( ele.isNode() ){
- r.drawNode( context, ele, shiftToOriginWithBb, showLabel );
- } else {
- r.drawEdge( context, ele, shiftToOriginWithBb, showLabel );
- }
-};
-
-CRp.drawCachedElement = function( context, ele, pxRatio, extent ){
- var r = this;
- var bb = ele.boundingBox();
-
- if( !extent || math.boundingBoxesIntersect( bb, extent ) ){
- var cache = r.data.eleTxrCache.getElement( ele, bb, pxRatio );
-
- if( cache ){
- context.drawImage( cache.texture.canvas, cache.x, 0, cache.width, cache.height, bb.x1, bb.y1, bb.w, bb.h );
- } else { // if the element is not cacheable, then draw directly
- r.drawElement( context, ele );
- }
- }
-};
-
-CRp.drawElements = function( context, eles ){
- var r = this;
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
-
- r.drawElement( context, ele );
- }
-};
-
-CRp.drawCachedElements = function( context, eles, pxRatio, extent ){
- var r = this;
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
-
- r.drawCachedElement( context, ele, pxRatio, extent );
- }
-};
-
-CRp.drawCachedNodes = function( context, eles, pxRatio, extent ){
- var r = this;
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
-
- if( !ele.isNode() ){ continue; }
-
- r.drawCachedElement( context, ele, pxRatio, extent );
- }
-};
-
-CRp.drawLayeredElements = function( context, eles, pxRatio, extent ){
- var r = this;
-
- var layers = r.data.lyrTxrCache.getLayers( eles, pxRatio );
-
- if( layers ){
- for( var i = 0; i < layers.length; i++ ){
- var layer = layers[i];
- var bb = layer.bb;
-
- context.drawImage( layer.canvas, bb.x1, bb.y1, bb.w, bb.h );
- }
- } else { // fall back on plain caching if no layers
- r.drawCachedElements( context, eles, pxRatio, extent );
- }
-};
-
-module.exports = CRp;
-
-},{"../../../math":85}],67:[function(_dereq_,module,exports){
-'use strict';
-
-var CRp = {};
-
-CRp.safeDrawImage = function( context, img, ix, iy, iw, ih, x, y, w, h ){
- var r = this;
-
- try {
- context.drawImage( img, ix, iy, iw, ih, x, y, w, h );
- } catch( e ){
- r.redrawHint( 'eles', true );
- r.redrawHint( 'drag', true );
-
- r.drawingImage = true;
-
- r.redraw();
- }
-};
-
-CRp.drawInscribedImage = function( context, img, node ){
- var r = this;
- var nodeX = node._private.position.x;
- var nodeY = node._private.position.y;
- var fit = node.pstyle( 'background-fit' ).value;
- var xPos = node.pstyle( 'background-position-x' );
- var yPos = node.pstyle( 'background-position-y' );
- var repeat = node.pstyle( 'background-repeat' ).value;
- var nodeW = node.width();
- var nodeH = node.height();
- var rs = node._private.rscratch;
- var clip = node.pstyle( 'background-clip' ).value;
- var shouldClip = clip === 'node';
- var imgOpacity = node.pstyle( 'background-image-opacity' ).value;
-
- var imgW = img.width || img.cachedW;
- var imgH = img.height || img.cachedH;
-
- // workaround for broken browsers like ie
- if( null == imgW || null == imgH ){
- document.body.appendChild( img ); // eslint-disable-line no-undef
-
- imgW = img.cachedW = img.width || img.offsetWidth;
- imgH = img.cachedH = img.height || img.offsetHeight;
-
- document.body.removeChild( img ); // eslint-disable-line no-undef
- }
-
- var w = imgW;
- var h = imgH;
-
- var bgW = node.pstyle( 'background-width' );
- if( bgW.value !== 'auto' ){
- if( bgW.units === '%' ){
- w = bgW.value / 100 * nodeW;
- } else {
- w = bgW.pfValue;
- }
- }
-
- var bgH = node.pstyle( 'background-height' );
- if( bgH.value !== 'auto' ){
- if( bgH.units === '%' ){
- h = bgH.value / 100 * nodeH;
- } else {
- h = bgH.pfValue;
- }
- }
-
- if( w === 0 || h === 0 ){
- return; // no point in drawing empty image (and chrome is broken in this case)
- }
-
- if( fit === 'contain' ){
- var scale = Math.min( nodeW / w, nodeH / h );
-
- w *= scale;
- h *= scale;
-
- } else if( fit === 'cover' ){
- var scale = Math.max( nodeW / w, nodeH / h );
-
- w *= scale;
- h *= scale;
- }
-
- var x = (nodeX - nodeW / 2); // left
- if( xPos.units === '%' ){
- x += (nodeW - w) * xPos.value / 100;
- } else {
- x += xPos.pfValue;
- }
-
- var y = (nodeY - nodeH / 2); // top
- if( yPos.units === '%' ){
- y += (nodeH - h) * yPos.value / 100;
- } else {
- y += yPos.pfValue;
- }
-
- if( rs.pathCache ){
- x -= nodeX;
- y -= nodeY;
-
- nodeX = 0;
- nodeY = 0;
- }
-
- var gAlpha = context.globalAlpha;
-
- context.globalAlpha = imgOpacity;
-
- if( repeat === 'no-repeat' ){
-
- if( shouldClip ){
- context.save();
-
- if( rs.pathCache ){
- context.clip( rs.pathCache );
- } else {
- r.nodeShapes[ r.getNodeShape( node ) ].draw(
- context,
- nodeX, nodeY,
- nodeW, nodeH );
-
- context.clip();
- }
- }
-
- r.safeDrawImage( context, img, 0, 0, imgW, imgH, x, y, w, h );
-
- if( shouldClip ){
- context.restore();
- }
- } else {
- var pattern = context.createPattern( img, repeat );
- context.fillStyle = pattern;
-
- r.nodeShapes[ r.getNodeShape( node ) ].draw(
- context,
- nodeX, nodeY,
- nodeW, nodeH );
-
- context.translate( x, y );
- context.fill();
- context.translate( -x, -y );
- }
-
- context.globalAlpha = gAlpha;
-
-};
-
-module.exports = CRp;
-
-},{}],68:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../../../util' );
-var math = _dereq_( '../../../math' );
-
-var CRp = {};
-
-CRp.eleTextBiggerThanMin = function( ele, scale ){
- if( !scale ){
- var zoom = ele.cy().zoom();
- var pxRatio = this.getPixelRatio();
- var lvl = Math.ceil( math.log2( zoom * pxRatio ) ); // the effective texture level
-
- scale = Math.pow( 2, lvl );
- }
-
- var computedSize = ele.pstyle( 'font-size' ).pfValue * scale;
- var minSize = ele.pstyle( 'min-zoomed-font-size' ).pfValue;
-
- if( computedSize < minSize ){
- return false;
- }
-
- return true;
-};
-
-CRp.drawElementText = function( context, ele, force ){
- var r = this;
-
- if( force === undefined ){
- if( !r.eleTextBiggerThanMin( ele ) ){ return; }
- } else {
- if( !force ){ return; }
- }
-
- if( ele.isNode() ){
- var label = ele.pstyle( 'label' );
-
- if( !label || !label.value ){ return; }
-
- var textHalign = ele.pstyle( 'text-halign' ).strValue;
- var textValign = ele.pstyle( 'text-valign' ).strValue;
-
- switch( textHalign ){
- case 'left':
- context.textAlign = 'right';
- break;
-
- case 'right':
- context.textAlign = 'left';
- break;
-
- default: // e.g. center
- context.textAlign = 'center';
- }
-
- context.textBaseline = 'bottom';
- } else {
- var label = ele.pstyle( 'label' );
- var srcLabel = ele.pstyle( 'source-label' );
- var tgtLabel = ele.pstyle( 'target-label' );
-
- if(
- ( !label || !label.value )
- && ( !srcLabel || !srcLabel.value )
- && ( !tgtLabel || !tgtLabel.value )
- ){
- return;
- }
-
- context.textAlign = 'center';
- context.textBaseline = 'bottom';
- }
-
-
- r.drawText( context, ele );
-
- if( ele.isEdge() ){
- r.drawText( context, ele, 'source' );
-
- r.drawText( context, ele, 'target' );
- }
-};
-
-CRp.drawNodeText = CRp.drawEdgeText = CRp.drawElementText;
-
-CRp.getFontCache = function( context ){
- var cache;
-
- this.fontCaches = this.fontCaches || [];
-
- for( var i = 0; i < this.fontCaches.length; i++ ){
- cache = this.fontCaches[ i ];
-
- if( cache.context === context ){
- return cache;
- }
- }
-
- cache = {
- context: context
- };
- this.fontCaches.push( cache );
-
- return cache;
-};
-
-// set up canvas context with font
-// returns transformed text string
-CRp.setupTextStyle = function( context, ele ){
- // Font style
- var parentOpacity = ele.effectiveOpacity();
- var labelStyle = ele.pstyle( 'font-style' ).strValue;
- var labelSize = ele.pstyle( 'font-size' ).pfValue + 'px';
- var labelFamily = ele.pstyle( 'font-family' ).strValue;
- var labelWeight = ele.pstyle( 'font-weight' ).strValue;
- var opacity = ele.pstyle( 'text-opacity' ).value * ele.pstyle( 'opacity' ).value * parentOpacity;
- var outlineOpacity = ele.pstyle( 'text-outline-opacity' ).value * opacity;
- var color = ele.pstyle( 'color' ).value;
- var outlineColor = ele.pstyle( 'text-outline-color' ).value;
- var shadowBlur = ele.pstyle( 'text-shadow-blur' ).pfValue;
- var shadowOpacity = ele.pstyle( 'text-shadow-opacity' ).value;
- var shadowColor = ele.pstyle( 'text-shadow-color' ).value;
- var shadowOffsetX = ele.pstyle( 'text-shadow-offset-x' ).pfValue;
- var shadowOffsetY = ele.pstyle( 'text-shadow-offset-y' ).pfValue;
-
- var fontCacheKey = ele._private.fontKey;
- var cache = this.getFontCache( context );
-
- if( cache.key !== fontCacheKey ){
- context.font = labelStyle + ' ' + labelWeight + ' ' + labelSize + ' ' + labelFamily;
-
- cache.key = fontCacheKey;
- }
-
- // Calculate text draw position based on text alignment
-
- // so text outlines aren't jagged
- context.lineJoin = 'round';
-
- this.fillStyle( context, color[ 0 ], color[ 1 ], color[ 2 ], opacity );
-
- this.strokeStyle( context, outlineColor[ 0 ], outlineColor[ 1 ], outlineColor[ 2 ], outlineOpacity );
-
- this.shadowStyle( context, shadowColor, shadowOpacity, shadowBlur, shadowOffsetX, shadowOffsetY );
-};
-
-function roundRect( ctx, x, y, width, height, radius ){
- var radius = radius || 5;
- ctx.beginPath();
- ctx.moveTo( x + radius, y );
- ctx.lineTo( x + width - radius, y );
- ctx.quadraticCurveTo( x + width, y, x + width, y + radius );
- ctx.lineTo( x + width, y + height - radius );
- ctx.quadraticCurveTo( x + width, y + height, x + width - radius, y + height );
- ctx.lineTo( x + radius, y + height );
- ctx.quadraticCurveTo( x, y + height, x, y + height - radius );
- ctx.lineTo( x, y + radius );
- ctx.quadraticCurveTo( x, y, x + radius, y );
- ctx.closePath();
- ctx.fill();
-}
-
-// Draw text
-CRp.drawText = function( context, ele, prefix ){
- var _p = ele._private;
- var rscratch = _p.rscratch;
- var parentOpacity = ele.effectiveOpacity();
- if( parentOpacity === 0 || ele.pstyle( 'text-opacity' ).value === 0 ){
- return;
- }
-
- var textX = util.getPrefixedProperty( rscratch, 'labelX', prefix );
- var textY = util.getPrefixedProperty( rscratch, 'labelY', prefix );
- var text = this.getLabelText( ele, prefix );
-
- if( text != null && text !== '' && !isNaN( textX ) && !isNaN( textY ) ){
- this.setupTextStyle( context, ele );
-
- var pdash = prefix ? prefix + '-' : '';
- var textW = util.getPrefixedProperty( rscratch, 'labelWidth', prefix );
- var textH = util.getPrefixedProperty( rscratch, 'labelHeight', prefix );
- var textAngle = util.getPrefixedProperty( rscratch, 'labelAngle', prefix );
- var marginX = ele.pstyle( pdash + 'text-margin-x' ).pfValue;
- var marginY = ele.pstyle( pdash + 'text-margin-y' ).pfValue;
-
- var isEdge = ele.isEdge();
- var isNode = ele.isNode();
-
- var halign = ele.pstyle( 'text-halign' ).value;
- var valign = ele.pstyle( 'text-valign' ).value;
-
- if( isEdge ){
- halign = 'center';
- valign = 'center';
- }
-
- textX += marginX;
- textY += marginY;
-
- var rotation = ele.pstyle( 'text-rotation' );
- var theta;
-
- if( rotation.strValue === 'autorotate' ){
- theta = isEdge ? textAngle : 0;
- } else if( rotation.strValue === 'none' ){
- theta = 0;
- } else {
- theta = rotation.pfValue;
- }
-
- if( theta !== 0 ){
- var orgTextX = textX;
- var orgTextY = textY;
-
- context.translate( orgTextX, orgTextY );
- context.rotate( theta );
-
- textX = 0;
- textY = 0;
- }
-
- if( isNode ){
- var pLeft = ele.pstyle( 'padding-left' ).pfValue;
- var pRight = ele.pstyle( 'padding-right' ).pfValue;
- var pTop = ele.pstyle( 'padding-top' ).pfValue;
- var pBottom = ele.pstyle( 'padding-bottom' ).pfValue;
-
- textX += pLeft / 2;
- textX -= pRight / 2;
-
- textY += pTop / 2;
- textY -= pBottom / 2;
- }
-
- switch( valign ){
- case 'top':
- break;
- case 'center':
- textY += textH / 2;
- break;
- case 'bottom':
- textY += textH;
- break;
- }
-
- var backgroundOpacity = ele.pstyle( 'text-background-opacity' ).value;
- var borderOpacity = ele.pstyle( 'text-border-opacity' ).value;
- var textBorderWidth = ele.pstyle( 'text-border-width' ).pfValue;
-
- if( backgroundOpacity > 0 || ( textBorderWidth > 0 && borderOpacity > 0 ) ){
- var bgX = textX;
-
- switch( halign ){
- case 'left':
- bgX -= textW;
- break;
- case 'center':
- bgX -= textW / 2;
- break;
- case 'right':
- break;
- }
-
- var bgY = textY;
-
- switch( valign ){
- case 'top':
- bgY -= textH;
- break;
- case 'center':
- bgY -= textH / 2;
- break;
- case 'bottom':
- break;
- }
-
- if( backgroundOpacity > 0 ){
- var textFill = context.fillStyle;
- var textBackgroundColor = ele.pstyle( 'text-background-color' ).value;
-
- context.fillStyle = 'rgba(' + textBackgroundColor[ 0 ] + ',' + textBackgroundColor[ 1 ] + ',' + textBackgroundColor[ 2 ] + ',' + backgroundOpacity * parentOpacity + ')';
- var styleShape = ele.pstyle( 'text-background-shape' ).strValue;
- if( styleShape == 'roundrectangle' ){
- roundRect( context, bgX, bgY, textW, textH, 2 );
- } else {
- context.fillRect( bgX, bgY, textW, textH );
- }
- context.fillStyle = textFill;
- }
-
- if( textBorderWidth > 0 && borderOpacity > 0 ){
- var textStroke = context.strokeStyle;
- var textLineWidth = context.lineWidth;
- var textBorderColor = ele.pstyle( 'text-border-color' ).value;
- var textBorderStyle = ele.pstyle( 'text-border-style' ).value;
-
- context.strokeStyle = 'rgba(' + textBorderColor[ 0 ] + ',' + textBorderColor[ 1 ] + ',' + textBorderColor[ 2 ] + ',' + borderOpacity * parentOpacity + ')';
- context.lineWidth = textBorderWidth;
-
- if( context.setLineDash ){ // for very outofdate browsers
- switch( textBorderStyle ){
- case 'dotted':
- context.setLineDash( [ 1, 1 ] );
- break;
- case 'dashed':
- context.setLineDash( [ 4, 2 ] );
- break;
- case 'double':
- context.lineWidth = textBorderWidth / 4; // 50% reserved for white between the two borders
- context.setLineDash( [] );
- break;
- case 'solid':
- context.setLineDash( [] );
- break;
- }
- }
-
- context.strokeRect( bgX, bgY, textW, textH );
-
- if( textBorderStyle === 'double' ){
- var whiteWidth = textBorderWidth / 2;
-
- context.strokeRect( bgX + whiteWidth, bgY + whiteWidth, textW - whiteWidth * 2, textH - whiteWidth * 2 );
- }
-
- if( context.setLineDash ){ // for very outofdate browsers
- context.setLineDash( [] );
- }
- context.lineWidth = textLineWidth;
- context.strokeStyle = textStroke;
- }
-
- }
-
- var lineWidth = 2 * ele.pstyle( 'text-outline-width' ).pfValue; // *2 b/c the stroke is drawn centred on the middle
-
- if( lineWidth > 0 ){
- context.lineWidth = lineWidth;
- }
-
- if( ele.pstyle( 'text-wrap' ).value === 'wrap' ){
- var lines = rscratch.labelWrapCachedLines;
- var lineHeight = textH / lines.length;
-
- switch( valign ){
- case 'top':
- textY -= ( lines.length - 1 ) * lineHeight;
- break;
-
- case 'bottom':
- // nothing required
- break;
-
- default:
- case 'center':
- textY -= ( lines.length - 1 ) * lineHeight / 2;
- }
-
- for( var l = 0; l < lines.length; l++ ){
- if( lineWidth > 0 ){
- context.strokeText( lines[ l ], textX, textY );
- }
-
- context.fillText( lines[ l ], textX, textY );
-
- textY += lineHeight;
- }
-
- } else {
- if( lineWidth > 0 ){
- context.strokeText( text, textX, textY );
- }
-
- context.fillText( text, textX, textY );
- }
-
- if( theta !== 0 ){
- context.rotate( -theta );
- context.translate( -orgTextX, -orgTextY );
- }
-
- this.shadowStyle( context, 'transparent', 0 ); // reset for next guy
- }
-};
-
-module.exports = CRp;
-
-},{"../../../math":85,"../../../util":100}],69:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../../../is' );
-
-var CRp = {};
-
-CRp.drawNode = function( context, node, shiftToOriginWithBb, drawLabel ){
- var r = this;
- var nodeWidth, nodeHeight;
- var rs = node._private.rscratch;
- var _p = node._private;
- var pos = pos || _p.position;
-
- if( !is.number( pos.x ) || !is.number( pos.y ) ){
- return; // can't draw node with undefined position
- }
-
- var usePaths = this.usePaths();
- var path;
- var pathCacheHit = false;
-
- var parentOpacity = node.effectiveOpacity();
- if( parentOpacity === 0 ){ return; }
-
- nodeWidth = node.width() + node.pstyle( 'padding-left' ).pfValue + node.pstyle( 'padding-right' ).pfValue;
- nodeHeight = node.height() + node.pstyle( 'padding-top' ).pfValue + node.pstyle( 'padding-bottom' ).pfValue;
-
- context.lineWidth = node.pstyle( 'border-width' ).pfValue;
-
- //
- // setup shift
-
- var bb;
- if( shiftToOriginWithBb ){
- bb = shiftToOriginWithBb;
-
- context.translate( -bb.x1, -bb.y1 );
- }
-
- //
- // load bg image
-
- var bgImgProp = node.pstyle( 'background-image' );
- var url = bgImgProp.value[2] || bgImgProp.value[1];
- var image;
-
- if( url !== undefined ){
-
- // get image, and if not loaded then ask to redraw when later loaded
- image = this.getCachedImage( url, function(){
- node.trigger('background');
-
- r.redrawHint( 'eles', true );
- r.redrawHint( 'drag', true );
-
- r.drawingImage = true;
-
- r.redraw();
- } );
-
- var prevBging = _p.backgrounding;
- _p.backgrounding = !image.complete;
-
- if( prevBging !== _p.backgrounding ){ // update style b/c :backgrounding state changed
- node.updateStyle( false );
- }
- }
-
- //
- // setup styles
-
- var bgColor = node.pstyle( 'background-color' ).value;
- var borderColor = node.pstyle( 'border-color' ).value;
- var borderStyle = node.pstyle( 'border-style' ).value;
-
- this.fillStyle( context, bgColor[0], bgColor[1], bgColor[2], node.pstyle( 'background-opacity' ).value * parentOpacity );
-
- this.strokeStyle( context, borderColor[0], borderColor[1], borderColor[2], node.pstyle( 'border-opacity' ).value * parentOpacity );
-
- var shadowBlur = node.pstyle( 'shadow-blur' ).pfValue;
- var shadowOpacity = node.pstyle( 'shadow-opacity' ).value;
- var shadowColor = node.pstyle( 'shadow-color' ).value;
- var shadowOffsetX = node.pstyle( 'shadow-offset-x' ).pfValue;
- var shadowOffsetY = node.pstyle( 'shadow-offset-y' ).pfValue;
-
- this.shadowStyle( context, shadowColor, shadowOpacity, shadowBlur, shadowOffsetX, shadowOffsetY );
-
- context.lineJoin = 'miter'; // so borders are square with the node shape
-
- if( context.setLineDash ){ // for very outofdate browsers
- switch( borderStyle ){
- case 'dotted':
- context.setLineDash( [ 1, 1 ] );
- break;
-
- case 'dashed':
- context.setLineDash( [ 4, 2 ] );
- break;
-
- case 'solid':
- case 'double':
- context.setLineDash( [ ] );
- break;
- }
- }
-
-
- //
- // draw shape
-
- var styleShape = node.pstyle('shape').strValue;
- var shapePts = node.pstyle('shape-polygon-points').pfValue;
-
- if( usePaths ){
- var pathCacheKey = styleShape + '$' + nodeWidth + '$' + nodeHeight + ( styleShape === 'polygon' ? '$' + shapePts.join('$') : '' );
-
- context.translate( pos.x, pos.y );
-
- if( rs.pathCacheKey === pathCacheKey ){
- path = rs.pathCache;
- pathCacheHit = true;
- } else {
- path = new Path2D(); // eslint-disable-line no-undef
- rs.pathCacheKey = pathCacheKey;
- rs.pathCache = path;
- }
- }
-
- if( !pathCacheHit ){
-
- var npos = pos;
-
- if( usePaths ){
- npos = {
- x: 0,
- y: 0
- };
- }
-
- r.nodeShapes[ this.getNodeShape( node ) ].draw(
- ( path || context ),
- npos.x,
- npos.y,
- nodeWidth,
- nodeHeight );
- }
-
- if( usePaths ){
- context.fill( path );
- } else {
- context.fill();
- }
-
- this.shadowStyle( context, 'transparent', 0 ); // reset for next guy
-
- //
- // bg image
-
- if( url !== undefined ){
- if( image.complete ){
- this.drawInscribedImage( context, image, node );
- }
- }
-
- //
- // pie
-
- var darkness = node.pstyle( 'background-blacken' ).value;
- var borderWidth = node.pstyle( 'border-width' ).pfValue;
-
- if( this.hasPie( node ) ){
- this.drawPie( context, node, parentOpacity );
-
- // redraw path for blacken and border
- if( darkness !== 0 || borderWidth !== 0 ){
-
- if( !usePaths ){
- r.nodeShapes[ this.getNodeShape( node ) ].draw(
- context,
- pos.x,
- pos.y,
- nodeWidth,
- nodeHeight );
- }
- }
- }
-
- //
- // darken/lighten
-
- if( darkness > 0 ){
- this.fillStyle( context, 0, 0, 0, darkness );
-
- if( usePaths ){
- context.fill( path );
- } else {
- context.fill();
- }
-
- } else if( darkness < 0 ){
- this.fillStyle( context, 255, 255, 255, -darkness );
-
- if( usePaths ){
- context.fill( path );
- } else {
- context.fill();
- }
- }
-
- //
- // border
-
- if( borderWidth > 0 ){
-
- if( usePaths ){
- context.stroke( path );
- } else {
- context.stroke();
- }
-
- if( borderStyle === 'double' ){
- context.lineWidth = node.pstyle( 'border-width' ).pfValue / 3;
-
- var gco = context.globalCompositeOperation;
- context.globalCompositeOperation = 'destination-out';
-
- if( usePaths ){
- context.stroke( path );
- } else {
- context.stroke();
- }
-
- context.globalCompositeOperation = gco;
- }
-
- }
-
- if( usePaths ){
- context.translate( -pos.x, -pos.y );
- }
-
- // reset in case we changed the border style
- if( context.setLineDash ){ // for very outofdate browsers
- context.setLineDash( [ ] );
- }
-
- //
- // label
-
- r.drawElementText( context, node, drawLabel );
-
- //
- // overlay
-
- var overlayPadding = node.pstyle( 'overlay-padding' ).pfValue;
- var overlayOpacity = node.pstyle( 'overlay-opacity' ).value;
- var overlayColor = node.pstyle( 'overlay-color' ).value;
-
- if( overlayOpacity > 0 ){
- this.fillStyle( context, overlayColor[0], overlayColor[1], overlayColor[2], overlayOpacity );
-
- r.nodeShapes[ 'roundrectangle' ].draw(
- context,
- node._private.position.x,
- node._private.position.y,
- nodeWidth + overlayPadding * 2,
- nodeHeight + overlayPadding * 2
- );
-
- context.fill();
- }
-
- //
- // clean up shift
-
- if( shiftToOriginWithBb ){
- context.translate( bb.x1, bb.y1 );
- }
-
-};
-
-// does the node have at least one pie piece?
-CRp.hasPie = function( node ){
- node = node[0]; // ensure ele ref
-
- return node._private.hasPie;
-};
-
-CRp.drawPie = function( context, node, nodeOpacity, pos ){
- node = node[0]; // ensure ele ref
-
- var _p = node._private;
- var cyStyle = node.cy().style();
- var pieSize = node.pstyle( 'pie-size' );
- var nodeW = node.width();
- var nodeH = node.height();
- var pos = pos || _p.position;
- var x = pos.x;
- var y = pos.y;
- var radius = Math.min( nodeW, nodeH ) / 2; // must fit in node
- var lastPercent = 0; // what % to continue drawing pie slices from on [0, 1]
- var usePaths = this.usePaths();
-
- if( usePaths ){
- x = 0;
- y = 0;
- }
-
- if( pieSize.units === '%' ){
- radius = radius * pieSize.value / 100;
- } else if( pieSize.pfValue !== undefined ){
- radius = pieSize.pfValue / 2;
- }
-
- for( var i = 1; i <= cyStyle.pieBackgroundN; i++ ){ // 1..N
- var size = node.pstyle( 'pie-' + i + '-background-size' ).value;
- var color = node.pstyle( 'pie-' + i + '-background-color' ).value;
- var opacity = node.pstyle( 'pie-' + i + '-background-opacity' ).value * nodeOpacity;
- var percent = size / 100; // map integer range [0, 100] to [0, 1]
-
- // percent can't push beyond 1
- if( percent + lastPercent > 1 ){
- percent = 1 - lastPercent;
- }
-
- var angleStart = 1.5 * Math.PI + 2 * Math.PI * lastPercent; // start at 12 o'clock and go clockwise
- var angleDelta = 2 * Math.PI * percent;
- var angleEnd = angleStart + angleDelta;
-
- // ignore if
- // - zero size
- // - we're already beyond the full circle
- // - adding the current slice would go beyond the full circle
- if( size === 0 || lastPercent >= 1 || lastPercent + percent > 1 ){
- continue;
- }
-
- context.beginPath();
- context.moveTo( x, y );
- context.arc( x, y, radius, angleStart, angleEnd );
- context.closePath();
-
- this.fillStyle( context, color[0], color[1], color[2], opacity );
-
- context.fill();
-
- lastPercent += percent;
- }
-
-};
-
-
-module.exports = CRp;
-
-},{"../../../is":83}],70:[function(_dereq_,module,exports){
-'use strict';
-
-var CRp = {};
-
-var util = _dereq_( '../../../util' );
-
-var motionBlurDelay = 100;
-
-// var isFirefox = typeof InstallTrigger !== 'undefined';
-
-CRp.getPixelRatio = function(){
- var context = this.data.contexts[0];
-
- if( this.forcedPixelRatio != null ){
- return this.forcedPixelRatio;
- }
-
- var backingStore = context.backingStorePixelRatio ||
- context.webkitBackingStorePixelRatio ||
- context.mozBackingStorePixelRatio ||
- context.msBackingStorePixelRatio ||
- context.oBackingStorePixelRatio ||
- context.backingStorePixelRatio || 1;
-
- return (window.devicePixelRatio || 1) / backingStore; // eslint-disable-line no-undef
-};
-
-CRp.paintCache = function( context ){
- var caches = this.paintCaches = this.paintCaches || [];
- var needToCreateCache = true;
- var cache;
-
- for( var i = 0; i < caches.length; i++ ){
- cache = caches[ i ];
-
- if( cache.context === context ){
- needToCreateCache = false;
- break;
- }
- }
-
- if( needToCreateCache ){
- cache = {
- context: context
- };
- caches.push( cache );
- }
-
- return cache;
-};
-
-CRp.fillStyle = function( context, r, g, b, a ){
- context.fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';
-
- // turn off for now, seems context does its own caching
-
- // var cache = this.paintCache(context);
-
- // var fillStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';
-
- // if( cache.fillStyle !== fillStyle ){
- // context.fillStyle = cache.fillStyle = fillStyle;
- // }
-};
-
-CRp.strokeStyle = function( context, r, g, b, a ){
- context.strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';
-
- // turn off for now, seems context does its own caching
-
- // var cache = this.paintCache(context);
-
- // var strokeStyle = 'rgba(' + r + ',' + g + ',' + b + ',' + a + ')';
-
- // if( cache.strokeStyle !== strokeStyle ){
- // context.strokeStyle = cache.strokeStyle = strokeStyle;
- // }
-};
-
-CRp.shadowStyle = function( context, color, opacity, blur, offsetX, offsetY ){
- var zoom = this.cy.zoom();
-
- // var cache = this.paintCache( context );
- //
- // // don't make expensive changes to the shadow style if it's not used
- // if( cache.shadowOpacity === 0 && opacity === 0 ){
- // return;
- // }
- //
- // cache.shadowOpacity = opacity;
-
- if( opacity > 0 ){
- context.shadowBlur = blur * zoom;
- context.shadowColor = 'rgba(' + color[0] + ',' + color[1] + ',' + color[2] + ',' + opacity + ')';
- context.shadowOffsetX = offsetX * zoom;
- context.shadowOffsetY = offsetY * zoom;
- } else {
- context.shadowBlur = 0;
- context.shadowColor = 'transparent';
- context.shadowOffsetX = 0;
- context.shadowOffsetY = 0;
- }
-};
-
-// Resize canvas
-CRp.matchCanvasSize = function( container ){
- var r = this;
- var data = r.data;
- var width = container.clientWidth;
- var height = container.clientHeight;
- var pixelRatio = r.getPixelRatio();
- var mbPxRatio = r.motionBlurPxRatio;
-
- if(
- container === r.data.bufferCanvases[ r.MOTIONBLUR_BUFFER_NODE ] ||
- container === r.data.bufferCanvases[ r.MOTIONBLUR_BUFFER_DRAG ]
- ){
- pixelRatio = mbPxRatio;
- }
-
- var canvasWidth = width * pixelRatio;
- var canvasHeight = height * pixelRatio;
- var canvas;
-
- if( canvasWidth === r.canvasWidth && canvasHeight === r.canvasHeight ){
- return; // save cycles if same
- }
-
- r.fontCaches = null; // resizing resets the style
-
- var canvasContainer = data.canvasContainer;
- canvasContainer.style.width = width + 'px';
- canvasContainer.style.height = height + 'px';
-
- for( var i = 0; i < r.CANVAS_LAYERS; i++ ){
-
- canvas = data.canvases[ i ];
-
- if( canvas.width !== canvasWidth || canvas.height !== canvasHeight ){
-
- canvas.width = canvasWidth;
- canvas.height = canvasHeight;
-
- canvas.style.width = width + 'px';
- canvas.style.height = height + 'px';
- }
- }
-
- for( var i = 0; i < r.BUFFER_COUNT; i++ ){
-
- canvas = data.bufferCanvases[ i ];
-
- if( canvas.width !== canvasWidth || canvas.height !== canvasHeight ){
-
- canvas.width = canvasWidth;
- canvas.height = canvasHeight;
-
- canvas.style.width = width + 'px';
- canvas.style.height = height + 'px';
- }
- }
-
- r.textureMult = 1;
- if( pixelRatio <= 1 ){
- canvas = data.bufferCanvases[ r.TEXTURE_BUFFER ];
-
- r.textureMult = 2;
- canvas.width = canvasWidth * r.textureMult;
- canvas.height = canvasHeight * r.textureMult;
- }
-
- r.canvasWidth = canvasWidth;
- r.canvasHeight = canvasHeight;
-
-};
-
-CRp.renderTo = function( cxt, zoom, pan, pxRatio ){
- this.render( {
- forcedContext: cxt,
- forcedZoom: zoom,
- forcedPan: pan,
- drawAllLayers: true,
- forcedPxRatio: pxRatio
- } );
-};
-
-CRp.render = function( options ){
- options = options || util.staticEmptyObject();
-
- var forcedContext = options.forcedContext;
- var drawAllLayers = options.drawAllLayers;
- var drawOnlyNodeLayer = options.drawOnlyNodeLayer;
- var forcedZoom = options.forcedZoom;
- var forcedPan = options.forcedPan;
- var r = this;
- var pixelRatio = options.forcedPxRatio === undefined ? this.getPixelRatio() : options.forcedPxRatio;
- var cy = r.cy; var data = r.data;
- var needDraw = data.canvasNeedsRedraw;
- var textureDraw = r.textureOnViewport && !forcedContext && (r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming);
- var motionBlur = options.motionBlur !== undefined ? options.motionBlur : r.motionBlur;
- var mbPxRatio = r.motionBlurPxRatio;
- var hasCompoundNodes = cy.hasCompoundNodes();
- var inNodeDragGesture = r.hoverData.draggingEles;
- var inBoxSelection = r.hoverData.selecting || r.touchData.selecting ? true : false;
- motionBlur = motionBlur && !forcedContext && r.motionBlurEnabled && !inBoxSelection;
- var motionBlurFadeEffect = motionBlur;
-
- if( !forcedContext ){
- if( r.prevPxRatio !== pixelRatio ){
- r.invalidateContainerClientCoordsCache();
- r.matchCanvasSize( r.container );
-
- r.redrawHint('eles', true);
- r.redrawHint('drag', true);
- }
-
- r.prevPxRatio = pixelRatio;
- }
-
- if( !forcedContext && r.motionBlurTimeout ){
- clearTimeout( r.motionBlurTimeout );
- }
-
- if( motionBlur ){
- if( r.mbFrames == null ){
- r.mbFrames = 0;
- }
-
- if( !r.drawingImage ){ // image loading frames don't count towards motion blur blurry frames
- r.mbFrames++;
- }
-
- if( r.mbFrames < 3 ){ // need several frames before even high quality motionblur
- motionBlurFadeEffect = false;
- }
-
- // go to lower quality blurry frames when several m/b frames have been rendered (avoids flashing)
- if( r.mbFrames > r.minMbLowQualFrames ){
- //r.fullQualityMb = false;
- r.motionBlurPxRatio = r.mbPxRBlurry;
- }
- }
-
- if( r.clearingMotionBlur ){
- r.motionBlurPxRatio = 1;
- }
-
- // b/c drawToContext() may be async w.r.t. redraw(), keep track of last texture frame
- // because a rogue async texture frame would clear needDraw
- if( r.textureDrawLastFrame && !textureDraw ){
- needDraw[ r.NODE ] = true;
- needDraw[ r.SELECT_BOX ] = true;
- }
-
- var coreStyle = cy.style()._private.coreStyle;
-
- var zoom = cy.zoom();
- var effectiveZoom = forcedZoom !== undefined ? forcedZoom : zoom;
- var pan = cy.pan();
- var effectivePan = {
- x: pan.x,
- y: pan.y
- };
-
- var vp = {
- zoom: zoom,
- pan: {
- x: pan.x,
- y: pan.y
- }
- };
- var prevVp = r.prevViewport;
- var viewportIsDiff = prevVp === undefined || vp.zoom !== prevVp.zoom || vp.pan.x !== prevVp.pan.x || vp.pan.y !== prevVp.pan.y;
-
- // we want the low quality motionblur only when the viewport is being manipulated etc (where it's not noticed)
- if( !viewportIsDiff && !(inNodeDragGesture && !hasCompoundNodes) ){
- r.motionBlurPxRatio = 1;
- }
-
- if( forcedPan ){
- effectivePan = forcedPan;
- }
-
- // apply pixel ratio
-
- effectiveZoom *= pixelRatio;
- effectivePan.x *= pixelRatio;
- effectivePan.y *= pixelRatio;
-
- var eles = r.getCachedZSortedEles();
-
- function mbclear( context, x, y, w, h ){
- var gco = context.globalCompositeOperation;
-
- context.globalCompositeOperation = 'destination-out';
- r.fillStyle( context, 255, 255, 255, r.motionBlurTransparency );
- context.fillRect( x, y, w, h );
-
- context.globalCompositeOperation = gco;
- }
-
- function setContextTransform( context, clear ){
- var ePan, eZoom, w, h;
-
- if( !r.clearingMotionBlur && (context === data.bufferContexts[ r.MOTIONBLUR_BUFFER_NODE ] || context === data.bufferContexts[ r.MOTIONBLUR_BUFFER_DRAG ]) ){
- ePan = {
- x: pan.x * mbPxRatio,
- y: pan.y * mbPxRatio
- };
-
- eZoom = zoom * mbPxRatio;
-
- w = r.canvasWidth * mbPxRatio;
- h = r.canvasHeight * mbPxRatio;
- } else {
- ePan = effectivePan;
- eZoom = effectiveZoom;
-
- w = r.canvasWidth;
- h = r.canvasHeight;
- }
-
- context.setTransform( 1, 0, 0, 1, 0, 0 );
-
- if( clear === 'motionBlur' ){
- mbclear( context, 0, 0, w, h );
- } else if( !forcedContext && (clear === undefined || clear) ){
- context.clearRect( 0, 0, w, h );
- }
-
- if( !drawAllLayers ){
- context.translate( ePan.x, ePan.y );
- context.scale( eZoom, eZoom );
- }
- if( forcedPan ){
- context.translate( forcedPan.x, forcedPan.y );
- }
- if( forcedZoom ){
- context.scale( forcedZoom, forcedZoom );
- }
- }
-
- if( !textureDraw ){
- r.textureDrawLastFrame = false;
- }
-
- if( textureDraw ){
- r.textureDrawLastFrame = true;
-
- var bb;
-
- if( !r.textureCache ){
- r.textureCache = {};
-
- bb = r.textureCache.bb = cy.mutableElements().boundingBox();
-
- r.textureCache.texture = r.data.bufferCanvases[ r.TEXTURE_BUFFER ];
-
- var cxt = r.data.bufferContexts[ r.TEXTURE_BUFFER ];
-
- cxt.setTransform( 1, 0, 0, 1, 0, 0 );
- cxt.clearRect( 0, 0, r.canvasWidth * r.textureMult, r.canvasHeight * r.textureMult );
-
- r.render( {
- forcedContext: cxt,
- drawOnlyNodeLayer: true,
- forcedPxRatio: pixelRatio * r.textureMult
- } );
-
- var vp = r.textureCache.viewport = {
- zoom: cy.zoom(),
- pan: cy.pan(),
- width: r.canvasWidth,
- height: r.canvasHeight
- };
-
- vp.mpan = {
- x: (0 - vp.pan.x) / vp.zoom,
- y: (0 - vp.pan.y) / vp.zoom
- };
- }
-
- needDraw[ r.DRAG ] = false;
- needDraw[ r.NODE ] = false;
-
- var context = data.contexts[ r.NODE ];
-
- var texture = r.textureCache.texture;
- var vp = r.textureCache.viewport;
- bb = r.textureCache.bb;
-
- context.setTransform( 1, 0, 0, 1, 0, 0 );
-
- if( motionBlur ){
- mbclear( context, 0, 0, vp.width, vp.height );
- } else {
- context.clearRect( 0, 0, vp.width, vp.height );
- }
-
- var outsideBgColor = coreStyle[ 'outside-texture-bg-color' ].value;
- var outsideBgOpacity = coreStyle[ 'outside-texture-bg-opacity' ].value;
- r.fillStyle( context, outsideBgColor[0], outsideBgColor[1], outsideBgColor[2], outsideBgOpacity );
- context.fillRect( 0, 0, vp.width, vp.height );
-
- var zoom = cy.zoom();
-
- setContextTransform( context, false );
-
- context.clearRect( vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio );
- context.drawImage( texture, vp.mpan.x, vp.mpan.y, vp.width / vp.zoom / pixelRatio, vp.height / vp.zoom / pixelRatio );
-
- } else if( r.textureOnViewport && !forcedContext ){ // clear the cache since we don't need it
- r.textureCache = null;
- }
-
- var extent = cy.extent();
- var vpManip = (r.pinching || r.hoverData.dragging || r.swipePanning || r.data.wheelZooming || r.hoverData.draggingEles);
- var hideEdges = r.hideEdgesOnViewport && vpManip;
-
- var needMbClear = [];
-
- needMbClear[ r.NODE ] = !needDraw[ r.NODE ] && motionBlur && !r.clearedForMotionBlur[ r.NODE ] || r.clearingMotionBlur;
- if( needMbClear[ r.NODE ] ){ r.clearedForMotionBlur[ r.NODE ] = true; }
-
- needMbClear[ r.DRAG ] = !needDraw[ r.DRAG ] && motionBlur && !r.clearedForMotionBlur[ r.DRAG ] || r.clearingMotionBlur;
- if( needMbClear[ r.DRAG ] ){ r.clearedForMotionBlur[ r.DRAG ] = true; }
-
- if( needDraw[ r.NODE ] || drawAllLayers || drawOnlyNodeLayer || needMbClear[ r.NODE ] ){
- var useBuffer = motionBlur && !needMbClear[ r.NODE ] && mbPxRatio !== 1;
- var context = forcedContext || ( useBuffer ? r.data.bufferContexts[ r.MOTIONBLUR_BUFFER_NODE ] : data.contexts[ r.NODE ] );
- var clear = motionBlur && !useBuffer ? 'motionBlur' : undefined;
-
- setContextTransform( context, clear );
-
- if( hideEdges ){
- r.drawCachedNodes( context, eles.nondrag, pixelRatio, extent );
- } else {
- r.drawLayeredElements( context, eles.nondrag, pixelRatio, extent );
- }
-
- if( !drawAllLayers && !motionBlur ){
- needDraw[ r.NODE ] = false;
- }
- }
-
- if( !drawOnlyNodeLayer && (needDraw[ r.DRAG ] || drawAllLayers || needMbClear[ r.DRAG ]) ){
- var useBuffer = motionBlur && !needMbClear[ r.DRAG ] && mbPxRatio !== 1;
- var context = forcedContext || ( useBuffer ? r.data.bufferContexts[ r.MOTIONBLUR_BUFFER_DRAG ] : data.contexts[ r.DRAG ] );
-
- setContextTransform( context, motionBlur && !useBuffer ? 'motionBlur' : undefined );
-
- if( hideEdges ){
- r.drawCachedNodes( context, eles.drag, pixelRatio, extent );
- } else {
- r.drawCachedElements( context, eles.drag, pixelRatio, extent );
- }
-
- if( !drawAllLayers && !motionBlur ){
- needDraw[ r.DRAG ] = false;
- }
- }
-
- if( r.showFps || (!drawOnlyNodeLayer && (needDraw[ r.SELECT_BOX ] && !drawAllLayers)) ){
- var context = forcedContext || data.contexts[ r.SELECT_BOX ];
-
- setContextTransform( context );
-
- if( r.selection[4] == 1 && ( r.hoverData.selecting || r.touchData.selecting ) ){
- var zoom = r.cy.zoom();
- var borderWidth = coreStyle[ 'selection-box-border-width' ].value / zoom;
-
- context.lineWidth = borderWidth;
- context.fillStyle = 'rgba('
- + coreStyle[ 'selection-box-color' ].value[0] + ','
- + coreStyle[ 'selection-box-color' ].value[1] + ','
- + coreStyle[ 'selection-box-color' ].value[2] + ','
- + coreStyle[ 'selection-box-opacity' ].value + ')';
-
- context.fillRect(
- r.selection[0],
- r.selection[1],
- r.selection[2] - r.selection[0],
- r.selection[3] - r.selection[1] );
-
- if( borderWidth > 0 ){
- context.strokeStyle = 'rgba('
- + coreStyle[ 'selection-box-border-color' ].value[0] + ','
- + coreStyle[ 'selection-box-border-color' ].value[1] + ','
- + coreStyle[ 'selection-box-border-color' ].value[2] + ','
- + coreStyle[ 'selection-box-opacity' ].value + ')';
-
- context.strokeRect(
- r.selection[0],
- r.selection[1],
- r.selection[2] - r.selection[0],
- r.selection[3] - r.selection[1] );
- }
- }
-
- if( data.bgActivePosistion && !r.hoverData.selecting ){
- var zoom = r.cy.zoom();
- var pos = data.bgActivePosistion;
-
- context.fillStyle = 'rgba('
- + coreStyle[ 'active-bg-color' ].value[0] + ','
- + coreStyle[ 'active-bg-color' ].value[1] + ','
- + coreStyle[ 'active-bg-color' ].value[2] + ','
- + coreStyle[ 'active-bg-opacity' ].value + ')';
-
- context.beginPath();
- context.arc( pos.x, pos.y, coreStyle[ 'active-bg-size' ].pfValue / zoom, 0, 2 * Math.PI );
- context.fill();
- }
-
- var timeToRender = r.lastRedrawTime;
- if( r.showFps && timeToRender ){
- timeToRender = Math.round( timeToRender );
- var fps = Math.round( 1000 / timeToRender );
-
- context.setTransform( 1, 0, 0, 1, 0, 0 );
-
- context.fillStyle = 'rgba(255, 0, 0, 0.75)';
- context.strokeStyle = 'rgba(255, 0, 0, 0.75)';
- context.lineWidth = 1;
- context.fillText( '1 frame = ' + timeToRender + ' ms = ' + fps + ' fps', 0, 20 );
-
- var maxFps = 60;
- context.strokeRect( 0, 30, 250, 20 );
- context.fillRect( 0, 30, 250 * Math.min( fps / maxFps, 1 ), 20 );
- }
-
- if( !drawAllLayers ){
- needDraw[ r.SELECT_BOX ] = false;
- }
- }
-
- // motionblur: blit rendered blurry frames
- if( motionBlur && mbPxRatio !== 1 ){
- var cxtNode = data.contexts[ r.NODE ];
- var txtNode = r.data.bufferCanvases[ r.MOTIONBLUR_BUFFER_NODE ];
-
- var cxtDrag = data.contexts[ r.DRAG ];
- var txtDrag = r.data.bufferCanvases[ r.MOTIONBLUR_BUFFER_DRAG ];
-
- var drawMotionBlur = function( cxt, txt, needClear ){
- cxt.setTransform( 1, 0, 0, 1, 0, 0 );
-
- if( needClear || !motionBlurFadeEffect ){
- cxt.clearRect( 0, 0, r.canvasWidth, r.canvasHeight );
- } else {
- mbclear( cxt, 0, 0, r.canvasWidth, r.canvasHeight );
- }
-
- var pxr = mbPxRatio;
-
- cxt.drawImage(
- txt, // img
- 0, 0, // sx, sy
- r.canvasWidth * pxr, r.canvasHeight * pxr, // sw, sh
- 0, 0, // x, y
- r.canvasWidth, r.canvasHeight // w, h
- );
- };
-
- if( needDraw[ r.NODE ] || needMbClear[ r.NODE ] ){
- drawMotionBlur( cxtNode, txtNode, needMbClear[ r.NODE ] );
- needDraw[ r.NODE ] = false;
- }
-
- if( needDraw[ r.DRAG ] || needMbClear[ r.DRAG ] ){
- drawMotionBlur( cxtDrag, txtDrag, needMbClear[ r.DRAG ] );
- needDraw[ r.DRAG ] = false;
- }
- }
-
- r.prevViewport = vp;
-
- if( r.clearingMotionBlur ){
- r.clearingMotionBlur = false;
- r.motionBlurCleared = true;
- r.motionBlur = true;
- }
-
- if( motionBlur ){
- r.motionBlurTimeout = setTimeout( function(){
- r.motionBlurTimeout = null;
-
- r.clearedForMotionBlur[ r.NODE ] = false;
- r.clearedForMotionBlur[ r.DRAG ] = false;
- r.motionBlur = false;
- r.clearingMotionBlur = !textureDraw;
- r.mbFrames = 0;
-
- needDraw[ r.NODE ] = true;
- needDraw[ r.DRAG ] = true;
-
- r.redraw();
- }, motionBlurDelay );
- }
-
- r.drawingImage = false;
-
-
- if( !forcedContext && !r.initrender ){
- r.initrender = true;
- cy.trigger( 'initrender' );
- }
-
- if( !forcedContext ){
- cy.trigger('render');
- }
-
-};
-
-module.exports = CRp;
-
-},{"../../../util":100}],71:[function(_dereq_,module,exports){
-'use strict';
-
-var math = _dereq_( '../../../math' );
-
-var CRp = {};
-
-// @O Polygon drawing
-CRp.drawPolygonPath = function(
- context, x, y, width, height, points ){
-
- var halfW = width / 2;
- var halfH = height / 2;
-
- if( context.beginPath ){ context.beginPath(); }
-
- context.moveTo( x + halfW * points[0], y + halfH * points[1] );
-
- for( var i = 1; i < points.length / 2; i++ ){
- context.lineTo( x + halfW * points[ i * 2], y + halfH * points[ i * 2 + 1] );
- }
-
- context.closePath();
-};
-
-// Round rectangle drawing
-CRp.drawRoundRectanglePath = function(
- context, x, y, width, height ){
-
- var halfWidth = width / 2;
- var halfHeight = height / 2;
- var cornerRadius = math.getRoundRectangleRadius( width, height );
-
- if( context.beginPath ){ context.beginPath(); }
-
- // Start at top middle
- context.moveTo( x, y - halfHeight );
- // Arc from middle top to right side
- context.arcTo( x + halfWidth, y - halfHeight, x + halfWidth, y, cornerRadius );
- // Arc from right side to bottom
- context.arcTo( x + halfWidth, y + halfHeight, x, y + halfHeight, cornerRadius );
- // Arc from bottom to left side
- context.arcTo( x - halfWidth, y + halfHeight, x - halfWidth, y, cornerRadius );
- // Arc from left side to topBorder
- context.arcTo( x - halfWidth, y - halfHeight, x, y - halfHeight, cornerRadius );
- // Join line
- context.lineTo( x, y - halfHeight );
-
-
- context.closePath();
-};
-
-var sin0 = Math.sin( 0 );
-var cos0 = Math.cos( 0 );
-
-var sin = {};
-var cos = {};
-
-var ellipseStepSize = Math.PI / 40;
-
-for( var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize ){
- sin[ i ] = Math.sin( i );
- cos[ i ] = Math.cos( i );
-}
-
-CRp.drawEllipsePath = function( context, centerX, centerY, width, height ){
- if( context.beginPath ){ context.beginPath(); }
-
- if( context.ellipse ){
- context.ellipse( centerX, centerY, width / 2, height / 2, 0, 0, 2 * Math.PI );
- } else {
- var xPos, yPos;
- var rw = width / 2;
- var rh = height / 2;
- for( var i = 0 * Math.PI; i < 2 * Math.PI; i += ellipseStepSize ){
- xPos = centerX - (rw * sin[ i ]) * sin0 + (rw * cos[ i ]) * cos0;
- yPos = centerY + (rh * cos[ i ]) * sin0 + (rh * sin[ i ]) * cos0;
-
- if( i === 0 ){
- context.moveTo( xPos, yPos );
- } else {
- context.lineTo( xPos, yPos );
- }
- }
- }
-
- context.closePath();
- };
-
-module.exports = CRp;
-
-},{"../../../math":85}],72:[function(_dereq_,module,exports){
-'use strict';
-
-var math = _dereq_( '../../../math' );
-var util = _dereq_( '../../../util' );
-var Heap = _dereq_( '../../../heap' );
-var defs = _dereq_( './texture-cache-defs' );
-
-var minTxrH = 25; // the size of the texture cache for small height eles (special case)
-var txrStepH = 50; // the min size of the regular cache, and the size it increases with each step up
-var minLvl = -4; // when scaling smaller than that we don't need to re-render
-var maxLvl = 2; // when larger than this scale just render directly (caching is not helpful)
-var maxZoom = 3.99; // beyond this zoom level, layered textures are not used
-var eleTxrSpacing = 8; // spacing between elements on textures to avoid blitting overlaps
-var defTxrWidth = 1024; // default/minimum texture width
-var maxTxrW = 1024; // the maximum width of a texture
-var maxTxrH = 1024; // the maximum height of a texture
-var minUtility = 0.5; // if usage of texture is less than this, it is retired
-var maxFullness = 0.8; // fullness of texture after which queue removal is checked
-var maxFullnessChecks = 10; // dequeued after this many checks
-var allowEdgeTxrCaching = false; // whether edges can be cached as textures (TODO maybe better on if webgl supported?)
-var allowParentTxrCaching = false; // whether parent nodes can be cached as textures (TODO maybe better on if webgl supported?)
-var deqCost = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame
-var deqAvgCost = 0.1; // % of add'l rendering cost compared to average overall redraw time
-var deqNoDrawCost = 0.9; // % of avg frame time that can be used for dequeueing when not drawing
-var deqFastCost = 0.9; // % of frame time to be used when >60fps
-var deqRedrawThreshold = 100; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile
-var maxDeqSize = 1; // number of eles to dequeue and render at higher texture in each batch
-
-var getTxrReasons = {
- dequeue: 'dequeue',
- downscale: 'downscale',
- highQuality: 'highQuality'
-};
-
-var ElementTextureCache = function( renderer ){
- var self = this;
-
- self.renderer = renderer;
- self.onDequeues = [];
-
- self.setupDequeueing();
-};
-
-var ETCp = ElementTextureCache.prototype;
-
-ETCp.reasons = getTxrReasons;
-
-// the list of textures in which new subtextures for elements can be placed
-ETCp.getTextureQueue = function( txrH ){
- var self = this;
- self.eleImgCaches = self.eleImgCaches || {};
-
- return ( self.eleImgCaches[ txrH ] = self.eleImgCaches[ txrH ] || [] );
-};
-
-// the list of usused textures which can be recycled (in use in texture queue)
-ETCp.getRetiredTextureQueue = function( txrH ){
- var self = this;
-
- var rtxtrQs = self.eleImgCaches.retired = self.eleImgCaches.retired || {};
- var rtxtrQ = rtxtrQs[ txrH ] = rtxtrQs[ txrH ] || [];
-
- return rtxtrQ;
-};
-
-// queue of element draw requests at different scale levels
-ETCp.getElementQueue = function(){
- var self = this;
-
- var q = self.eleCacheQueue = self.eleCacheQueue || new Heap(function( a, b ){
- return b.reqs - a.reqs;
- });
-
- return q;
-};
-
-// queue of element draw requests at different scale levels (element id lookup)
-ETCp.getElementIdToQueue = function(){
- var self = this;
-
- var id2q = self.eleIdToCacheQueue = self.eleIdToCacheQueue || {};
-
- return id2q;
-};
-
-ETCp.getElement = function( ele, bb, pxRatio, lvl, reason ){
- var self = this;
- var r = this.renderer;
- var rs = ele._private.rscratch;
- var zoom = r.cy.zoom();
-
- if( lvl == null ){
- lvl = Math.ceil( math.log2( zoom * pxRatio ) );
- }
-
- if( lvl < minLvl ){
- lvl = minLvl;
- } else if( zoom >= maxZoom || lvl > maxLvl ){
- return null;
- }
-
- var scale = Math.pow( 2, lvl );
- var eleScaledH = bb.h * scale;
- var eleScaledW = bb.w * scale;
- var caches = rs.imgCaches = rs.imgCaches || {};
- var eleCache = caches[lvl];
-
- if( eleCache ){
- return eleCache;
- }
-
- var txrH; // which texture height this ele belongs to
-
- if( eleScaledH <= minTxrH ){
- txrH = minTxrH;
- } else if( eleScaledH <= txrStepH ){
- txrH = txrStepH;
- } else {
- txrH = Math.ceil( eleScaledH / txrStepH ) * txrStepH;
- }
-
- if(
- eleScaledH > maxTxrH
- || eleScaledW > maxTxrW
- || ( !allowEdgeTxrCaching && ele.isEdge() )
- || ( !allowParentTxrCaching && ele.isParent() )
- ){
- return null; // caching large elements is not efficient
- }
-
- var txrQ = self.getTextureQueue( txrH );
-
- // first try the second last one in case it has space at the end
- var txr = txrQ[ txrQ.length - 2 ];
-
- var addNewTxr = function(){
- return self.recycleTexture( txrH, eleScaledW ) || self.addTexture( txrH, eleScaledW );
- };
-
- // try the last one if there is no second last one
- if( !txr ){
- txr = txrQ[ txrQ.length - 1 ];
- }
-
- // if the last one doesn't exist, we need a first one
- if( !txr ){
- txr = addNewTxr();
- }
-
- // if there's no room in the current texture, we need a new one
- if( txr.width - txr.usedWidth < eleScaledW ){
- txr = addNewTxr();
- }
-
- var scaledLabelShown = r.eleTextBiggerThanMin( ele, scale );
- var scalableFrom = function( otherCache ){
- return otherCache && otherCache.scaledLabelShown === scaledLabelShown;
- };
-
- var deqing = reason && reason === getTxrReasons.dequeue;
- var highQualityReq = reason && reason === getTxrReasons.highQuality;
- var downscaleReq = reason && reason === getTxrReasons.downscale;
-
- var higherCache; // the nearest cache with a higher level
- for( var l = lvl + 1; l <= maxLvl; l++ ){
- var c = caches[l];
-
- if( c ){ higherCache = c; break; }
- }
-
- var oneUpCache = higherCache && higherCache.level === lvl + 1 ? higherCache : null;
-
- var downscale = function(){
- txr.context.drawImage(
- oneUpCache.texture.canvas,
- oneUpCache.x, 0,
- oneUpCache.width, oneUpCache.height,
- txr.usedWidth, 0,
- eleScaledW, eleScaledH
- );
- };
-
- if( scalableFrom(oneUpCache) ){
- // then we can relatively cheaply rescale the existing image w/o rerendering
- downscale();
-
- } else if( scalableFrom(higherCache) ){
- // then use the higher cache for now and queue the next level down
- // to cheaply scale towards the smaller level
-
- if( highQualityReq ){
- for( var l = higherCache.level; l > lvl; l-- ){
- oneUpCache = self.getElement( ele, bb, pxRatio, l, getTxrReasons.downscale );
- }
-
- downscale();
-
- } else {
- self.queueElement( ele, bb, higherCache.level - 1 );
-
- return higherCache;
- }
- } else {
-
- var lowerCache; // the nearest cache with a lower level
- if( !deqing && !highQualityReq && !downscaleReq ){
- for( var l = lvl - 1; l >= minLvl; l-- ){
- var c = caches[l];
-
- if( c ){ lowerCache = c; break; }
- }
- }
-
- if( scalableFrom(lowerCache) ){
- // then use the lower quality cache for now and queue the better one for later
-
- self.queueElement( ele, bb, lvl );
-
- return lowerCache;
- }
-
- txr.context.translate( txr.usedWidth, 0 );
- txr.context.scale( scale, scale );
-
- r.drawElement( txr.context, ele, bb, scaledLabelShown );
-
- txr.context.scale( 1/scale, 1/scale );
- txr.context.translate( -txr.usedWidth, 0 );
- }
-
- eleCache = caches[lvl] = {
- ele: ele,
- x: txr.usedWidth,
- texture: txr,
- level: lvl,
- scale: scale,
- width: eleScaledW,
- height: eleScaledH,
- scaledLabelShown: scaledLabelShown
- };
-
- txr.usedWidth += Math.ceil( eleScaledW + eleTxrSpacing );
-
- txr.eleCaches.push( eleCache );
-
- self.checkTextureFullness( txr );
-
- return eleCache;
-};
-
-ETCp.invalidateElement = function( ele ){
- var self = this;
- var caches = ele._private.rscratch.imgCaches;
-
- if( caches ){
- for( var lvl = minLvl; lvl <= maxLvl; lvl++ ){
- var cache = caches[ lvl ];
-
- if( cache ){
- var txr = cache.texture;
-
- // remove space from the texture it belongs to
- txr.invalidatedWidth += cache.width;
-
- // remove refs with the element
- caches[ lvl ] = null;
- util.removeFromArray( txr.eleCaches, cache );
-
- // might have to remove the entire texture if it's not efficiently using its space
- self.checkTextureUtility( txr );
- }
- }
- }
-};
-
-ETCp.checkTextureUtility = function( txr ){
- // invalidate all entries in the cache if the cache size is small
- if( txr.invalidatedWidth >= minUtility * txr.width ){
- this.retireTexture( txr );
- }
-};
-
-ETCp.checkTextureFullness = function( txr ){
- // if texture has been mostly filled and passed over several times, remove
- // it from the queue so we don't need to waste time looking at it to put new things
-
- var self = this;
- var txrQ = self.getTextureQueue( txr.height );
-
- if( txr.usedWidth / txr.width > maxFullness && txr.fullnessChecks >= maxFullnessChecks ){
- util.removeFromArray( txrQ, txr );
- } else {
- txr.fullnessChecks++;
- }
-};
-
-ETCp.retireTexture = function( txr ){
- var self = this;
- var txrH = txr.height;
- var txrQ = self.getTextureQueue( txrH );
-
- // retire the texture from the active / searchable queue:
-
- util.removeFromArray( txrQ, txr );
-
- txr.retired = true;
-
- // remove the refs from the eles to the caches:
-
- var eleCaches = txr.eleCaches;
-
- for( var i = 0; i < eleCaches.length; i++ ){
- var eleCache = eleCaches[i];
- var ele = eleCache.ele;
- var lvl = eleCache.level;
- var imgCaches = ele._private.rscratch.imgCaches;
-
- if( imgCaches ){
- imgCaches[ lvl ] = null;
- }
- }
-
- util.clearArray( eleCaches );
-
- // add the texture to a retired queue so it can be recycled in future:
-
- var rtxtrQ = self.getRetiredTextureQueue( txrH );
-
- rtxtrQ.push( txr );
-};
-
-ETCp.addTexture = function( txrH, minW ){
- var self = this;
- var txrQ = self.getTextureQueue( txrH );
- var txr = {};
-
- txrQ.push( txr );
-
- txr.eleCaches = [];
-
- txr.height = txrH;
- txr.width = Math.max( defTxrWidth, minW );
- txr.usedWidth = 0;
- txr.invalidatedWidth = 0;
- txr.fullnessChecks = 0;
-
- txr.canvas = document.createElement('canvas'); // eslint-disable-line no-undef
- txr.canvas.width = txr.width;
- txr.canvas.height = txr.height;
-
- txr.context = txr.canvas.getContext('2d');
-
- return txr;
-};
-
-ETCp.recycleTexture = function( txrH, minW ){
- var self = this;
- var txrQ = self.getTextureQueue( txrH );
- var rtxtrQ = self.getRetiredTextureQueue( txrH );
-
- for( var i = 0; i < rtxtrQ.length; i++ ){
- var txr = rtxtrQ[i];
-
- if( txr.width >= minW ){
- txr.retired = false;
-
- txr.usedWidth = 0;
- txr.invalidatedWidth = 0;
- txr.fullnessChecks = 0;
-
- util.clearArray( txr.eleCaches );
-
- txr.context.clearRect( 0, 0, txr.width, txr.height );
-
- util.removeFromArray( rtxtrQ, txr );
- txrQ.push( txr );
-
- return txr;
- }
- }
-};
-
-ETCp.queueElement = function( ele, bb, lvl ){
- var self = this;
- var q = self.getElementQueue();
- var id2q = self.getElementIdToQueue();
- var id = ele.id();
- var existingReq = id2q[ id ];
-
- if( existingReq ){ // use the max lvl b/c in between lvls are cheap to make
- existingReq.level = Math.max( existingReq.level, lvl );
- existingReq.reqs++;
-
- q.updateItem( existingReq );
- } else {
- var req = {
- ele: ele,
- bb: bb,
- position: math.copyPosition( ele.position() ),
- level: lvl,
- reqs: 1
- };
-
- if( ele.isEdge() ){
- req.positions = {
- source: math.copyPosition( ele.source().position() ),
- target: math.copyPosition( ele.target().position() )
- };
- }
-
- q.push( req );
-
- id2q[ id ] = req;
- }
-};
-
-ETCp.dequeue = function( pxRatio, extent ){
- var self = this;
- var q = self.getElementQueue();
- var id2q = self.getElementIdToQueue();
- var dequeued = [];
-
- for( var i = 0; i < maxDeqSize; i++ ){
- if( q.size() > 0 ){
- var req = q.pop();
-
- id2q[ req.ele.id() ] = null;
-
- dequeued.push( req );
-
- var ele = req.ele;
- var bb;
-
- if(
- ( ele.isEdge()
- && (
- !math.arePositionsSame( ele.source().position(), req.positions.source )
- || !math.arePositionsSame( ele.target().position(), req.positions.target )
- )
- )
- || ( !math.arePositionsSame( ele.position(), req.position ) )
- ){
- bb = ele.boundingBox();
- } else {
- bb = req.bb;
- }
-
- self.getElement( req.ele, bb, pxRatio, req.level, getTxrReasons.dequeue );
- } else {
- break;
- }
- }
-
- return dequeued;
-};
-
-ETCp.onDequeue = function( fn ){ this.onDequeues.push( fn ); };
-ETCp.offDequeue = function( fn ){ util.removeFromArray( this.onDequeues, fn ); };
-
-ETCp.setupDequeueing = defs.setupDequeueing({
- deqRedrawThreshold: deqRedrawThreshold,
- deqCost: deqCost,
- deqAvgCost: deqAvgCost,
- deqNoDrawCost: deqNoDrawCost,
- deqFastCost: deqFastCost,
- deq: function( self, pxRatio, extent ){
- return self.dequeue( pxRatio, extent );
- },
- onDeqd: function( self, deqd ){
- for( var i = 0; i < self.onDequeues.length; i++ ){
- var fn = self.onDequeues[i];
-
- fn( deqd );
- }
- },
- shouldRedraw: function( self, deqd, pxRatio, extent ){
- for( var i = 0; i < deqd.length; i++ ){
- var bb = deqd[i].bb;
-
- if( math.boundingBoxesIntersect( bb, extent ) ){
- return true;
- }
- }
-
- return false;
- },
- priority: function( self ){
- return self.renderer.beforeRenderPriorities.eleTxrDeq;
- }
-});
-
-module.exports = ElementTextureCache;
-
-},{"../../../heap":81,"../../../math":85,"../../../util":100,"./texture-cache-defs":77}],73:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../../../is' );
-
-var CRp = {};
-
-CRp.createBuffer = function( w, h ){
- var buffer = document.createElement( 'canvas' ); // eslint-disable-line no-undef
- buffer.width = w;
- buffer.height = h;
-
- return [ buffer, buffer.getContext( '2d' ) ];
-};
-
-CRp.bufferCanvasImage = function( options ){
- var cy = this.cy;
- var eles = cy.mutableElements();
- var bb = eles.boundingBox();
- var width = options.full ? Math.ceil( bb.w ) : this.container.clientWidth;
- var height = options.full ? Math.ceil( bb.h ) : this.container.clientHeight;
- var specdMaxDims = is.number( options.maxWidth ) || is.number( options.maxHeight );
- var pxRatio = this.getPixelRatio();
- var scale = 1;
-
- if( options.scale !== undefined ){
- width *= options.scale;
- height *= options.scale;
-
- scale = options.scale;
- } else if( specdMaxDims ){
- var maxScaleW = Infinity;
- var maxScaleH = Infinity;
-
- if( is.number( options.maxWidth ) ){
- maxScaleW = scale * options.maxWidth / width;
- }
-
- if( is.number( options.maxHeight ) ){
- maxScaleH = scale * options.maxHeight / height;
- }
-
- scale = Math.min( maxScaleW, maxScaleH );
-
- width *= scale;
- height *= scale;
- }
-
- if( !specdMaxDims ){
- width *= pxRatio;
- height *= pxRatio;
- scale *= pxRatio;
- }
-
- var buffCanvas = document.createElement( 'canvas' ); // eslint-disable-line no-undef
-
- buffCanvas.width = width;
- buffCanvas.height = height;
-
- buffCanvas.style.width = width + 'px';
- buffCanvas.style.height = height + 'px';
-
- var buffCxt = buffCanvas.getContext( '2d' );
-
- // Rasterize the layers, but only if container has nonzero size
- if( width > 0 && height > 0 ){
-
- buffCxt.clearRect( 0, 0, width, height );
-
- if( options.bg ){
- buffCxt.fillStyle = options.bg;
- buffCxt.rect( 0, 0, width, height );
- buffCxt.fill();
- }
-
- buffCxt.globalCompositeOperation = 'source-over';
-
- var zsortedEles = this.getCachedZSortedEles();
-
- if( options.full ){ // draw the full bounds of the graph
- buffCxt.translate( -bb.x1 * scale, -bb.y1 * scale );
- buffCxt.scale( scale, scale );
-
- this.drawElements( buffCxt, zsortedEles );
- } else { // draw the current view
- var pan = cy.pan();
-
- var translation = {
- x: pan.x * scale,
- y: pan.y * scale
- };
-
- scale *= cy.zoom();
-
- buffCxt.translate( translation.x, translation.y );
- buffCxt.scale( scale, scale );
-
- this.drawElements( buffCxt, zsortedEles );
- }
- }
-
- return buffCanvas;
-};
-
-CRp.png = function( options ){
- return this.bufferCanvasImage( options ).toDataURL( 'image/png' );
-};
-
-CRp.jpg = function( options ){
- return this.bufferCanvasImage( options ).toDataURL( 'image/jpeg' );
-};
-
-module.exports = CRp;
-
-},{"../../../is":83}],74:[function(_dereq_,module,exports){
-/*
-The canvas renderer was written by Yue Dong.
-
-Modifications tracked on Github.
-*/
-
-'use strict';
-
-var util = _dereq_( '../../../util' );
-var is = _dereq_( '../../../is' );
-var ElementTextureCache = _dereq_('./ele-texture-cache');
-var LayeredTextureCache = _dereq_('./layered-texture-cache');
-
-var CR = CanvasRenderer;
-var CRp = CanvasRenderer.prototype;
-
-CRp.CANVAS_LAYERS = 3;
-//
-CRp.SELECT_BOX = 0;
-CRp.DRAG = 1;
-CRp.NODE = 2;
-
-CRp.BUFFER_COUNT = 3;
-//
-CRp.TEXTURE_BUFFER = 0;
-CRp.MOTIONBLUR_BUFFER_NODE = 1;
-CRp.MOTIONBLUR_BUFFER_DRAG = 2;
-
-function CanvasRenderer( options ){
- var r = this;
-
- r.data = {
- canvases: new Array( CRp.CANVAS_LAYERS ),
- contexts: new Array( CRp.CANVAS_LAYERS ),
- canvasNeedsRedraw: new Array( CRp.CANVAS_LAYERS ),
-
- bufferCanvases: new Array( CRp.BUFFER_COUNT ),
- bufferContexts: new Array( CRp.CANVAS_LAYERS ),
- };
-
- r.data.canvasContainer = document.createElement( 'div' ); // eslint-disable-line no-undef
- var containerStyle = r.data.canvasContainer.style;
- r.data.canvasContainer.setAttribute( 'style', '-webkit-tap-highlight-color: rgba(0,0,0,0);' );
- containerStyle.position = 'relative';
- containerStyle.zIndex = '0';
- containerStyle.overflow = 'hidden';
-
- var container = options.cy.container();
- container.appendChild( r.data.canvasContainer );
- container.setAttribute( 'style', ( container.getAttribute( 'style' ) || '' ) + '-webkit-tap-highlight-color: rgba(0,0,0,0);' );
-
- for( var i = 0; i < CRp.CANVAS_LAYERS; i++ ){
- var canvas = r.data.canvases[ i ] = document.createElement( 'canvas' ); // eslint-disable-line no-undef
- r.data.contexts[ i ] = canvas.getContext( '2d' );
- canvas.setAttribute( 'style', '-webkit-user-select: none; -moz-user-select: -moz-none; user-select: none; -webkit-tap-highlight-color: rgba(0,0,0,0); outline-style: none;' + ( is.ms() ? ' -ms-touch-action: none; touch-action: none; ' : '' ) );
- canvas.style.position = 'absolute';
- canvas.setAttribute( 'data-id', 'layer' + i );
- canvas.style.zIndex = String( CRp.CANVAS_LAYERS - i );
- r.data.canvasContainer.appendChild( canvas );
-
- r.data.canvasNeedsRedraw[ i ] = false;
- }
- r.data.topCanvas = r.data.canvases[0];
-
- r.data.canvases[ CRp.NODE ].setAttribute( 'data-id', 'layer' + CRp.NODE + '-node' );
- r.data.canvases[ CRp.SELECT_BOX ].setAttribute( 'data-id', 'layer' + CRp.SELECT_BOX + '-selectbox' );
- r.data.canvases[ CRp.DRAG ].setAttribute( 'data-id', 'layer' + CRp.DRAG + '-drag' );
-
- for( var i = 0; i < CRp.BUFFER_COUNT; i++ ){
- r.data.bufferCanvases[ i ] = document.createElement( 'canvas' ); // eslint-disable-line no-undef
- r.data.bufferContexts[ i ] = r.data.bufferCanvases[ i ].getContext( '2d' );
- r.data.bufferCanvases[ i ].style.position = 'absolute';
- r.data.bufferCanvases[ i ].setAttribute( 'data-id', 'buffer' + i );
- r.data.bufferCanvases[ i ].style.zIndex = String( -i - 1 );
- r.data.bufferCanvases[ i ].style.visibility = 'hidden';
- //r.data.canvasContainer.appendChild(r.data.bufferCanvases[i]);
- }
-
- r.pathsEnabled = true;
-
- r.data.eleTxrCache = new ElementTextureCache( r );
- r.data.lyrTxrCache = new LayeredTextureCache( r, r.data.eleTxrCache );
-
- r.onUpdateEleCalcs(function invalidateTextureCaches( willDraw, eles ){
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[i];
- var rs = ele._private.rstyle;
- var de = rs.dirtyEvents;
-
- if( ele.isNode() && de && de.length === 1 && de['position'] ){
- // then keep cached ele texture
- } else {
- r.data.eleTxrCache.invalidateElement( ele );
- }
- }
-
- if( eles.length > 0 ){
- r.data.lyrTxrCache.invalidateElements( eles );
- }
- });
-}
-
-CRp.redrawHint = function( group, bool ){
- var r = this;
-
- switch( group ){
- case 'eles':
- r.data.canvasNeedsRedraw[ CRp.NODE ] = bool;
- break;
- case 'drag':
- r.data.canvasNeedsRedraw[ CRp.DRAG ] = bool;
- break;
- case 'select':
- r.data.canvasNeedsRedraw[ CRp.SELECT_BOX ] = bool;
- break;
- }
-};
-
-// whether to use Path2D caching for drawing
-var pathsImpld = typeof Path2D !== 'undefined';
-
-CRp.path2dEnabled = function( on ){
- if( on === undefined ){
- return this.pathsEnabled;
- }
-
- this.pathsEnabled = on ? true : false;
-};
-
-CRp.usePaths = function(){
- return pathsImpld && this.pathsEnabled;
-};
-
-[
- _dereq_( './arrow-shapes' ),
- _dereq_( './drawing-elements' ),
- _dereq_( './drawing-edges' ),
- _dereq_( './drawing-images' ),
- _dereq_( './drawing-label-text' ),
- _dereq_( './drawing-nodes' ),
- _dereq_( './drawing-redraw' ),
- _dereq_( './drawing-shapes' ),
- _dereq_( './export-image' ),
- _dereq_( './node-shapes' )
-].forEach( function( props ){
- util.extend( CRp, props );
-} );
-
-module.exports = CR;
-
-},{"../../../is":83,"../../../util":100,"./arrow-shapes":64,"./drawing-edges":65,"./drawing-elements":66,"./drawing-images":67,"./drawing-label-text":68,"./drawing-nodes":69,"./drawing-redraw":70,"./drawing-shapes":71,"./ele-texture-cache":72,"./export-image":73,"./layered-texture-cache":75,"./node-shapes":76}],75:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../../../util' );
-var math = _dereq_( '../../../math' );
-var Heap = _dereq_( '../../../heap' );
-var is = _dereq_( '../../../is' );
-var defs = _dereq_( './texture-cache-defs' );
-
-var defNumLayers = 1; // default number of layers to use
-var minLvl = -4; // when scaling smaller than that we don't need to re-render
-var maxLvl = 2; // when larger than this scale just render directly (caching is not helpful)
-var maxZoom = 3.99; // beyond this zoom level, layered textures are not used
-var deqRedrawThreshold = 50; // time to batch redraws together from dequeueing to allow more dequeueing calcs to happen in the meanwhile
-var refineEleDebounceTime = 50; // time to debounce sharper ele texture updates
-var disableEleImgSmoothing = true; // when drawing eles on layers from an ele cache ; crisper and more performant when true
-var deqCost = 0.15; // % of add'l rendering cost allowed for dequeuing ele caches each frame
-var deqAvgCost = 0.1; // % of add'l rendering cost compared to average overall redraw time
-var deqNoDrawCost = 0.9; // % of avg frame time that can be used for dequeueing when not drawing
-var deqFastCost = 0.9; // % of frame time to be used when >60fps
-var maxDeqSize = 1; // number of eles to dequeue and render at higher texture in each batch
-var invalidThreshold = 250; // time threshold for disabling b/c of invalidations
-var maxLayerArea = 4000 * 4000; // layers can't be bigger than this
-var alwaysQueue = true; // never draw all the layers in a level on a frame; draw directly until all dequeued
-var useHighQualityEleTxrReqs = true; // whether to use high quality ele txr requests (generally faster and cheaper in the longterm)
-
-var useEleTxrCaching = true; // whether to use individual ele texture caching underneath this cache
-
-// var log = function(){ console.log.apply( console, arguments ); };
-
-var LayeredTextureCache = function( renderer, eleTxrCache ){
- var self = this;
-
- var r = self.renderer = renderer;
-
- self.layersByLevel = {}; // e.g. 2 => [ layer1, layer2, ..., layerN ]
-
- self.firstGet = true;
-
- self.lastInvalidationTime = util.performanceNow() - 2*invalidThreshold;
-
- self.skipping = false;
-
- r.beforeRender(function( willDraw, now ){
- if( now - self.lastInvalidationTime <= invalidThreshold ){
- self.skipping = true;
- } else {
- self.skipping = false;
- }
- });
-
- var qSort = function(a, b){
- return b.reqs - a.reqs;
- };
-
- self.layersQueue = new Heap( qSort );
-
- self.eleTxrCache = eleTxrCache;
-
- self.setupEleCacheInvalidation();
-
- self.setupDequeueing();
-};
-
-var LTCp = LayeredTextureCache.prototype;
-
-var layerIdPool = 0;
-var MAX_INT = Math.pow(2, 53) - 1;
-
-LTCp.makeLayer = function( bb, lvl ){
- var scale = Math.pow( 2, lvl );
-
- var w = Math.ceil( bb.w * scale );
- var h = Math.ceil( bb.h * scale );
-
- var canvas = document.createElement('canvas'); // eslint-disable-line no-undef
-
- canvas.width = w;
- canvas.height = h;
-
- var layer = {
- id: (layerIdPool = ++layerIdPool % MAX_INT ),
- bb: bb,
- level: lvl,
- width: w,
- height: h,
- canvas: canvas,
- context: canvas.getContext('2d'),
- eles: [],
- elesQueue: [],
- reqs: 0
- };
-
- // log('make layer %s with w %s and h %s and lvl %s', layer.id, layer.width, layer.height, layer.level);
-
- var cxt = layer.context;
- var dx = -layer.bb.x1;
- var dy = -layer.bb.y1;
-
- // do the transform on creation to save cycles (it's the same for all eles)
- cxt.scale( scale, scale );
- cxt.translate( dx, dy );
-
- return layer;
-};
-
-LTCp.getLayers = function( eles, pxRatio, lvl ){
- var self = this;
- var r = self.renderer;
- var cy = r.cy;
- var zoom = cy.zoom();
- var firstGet = self.firstGet;
-
- self.firstGet = false;
-
- // log('--\nget layers with %s eles', eles.length);
- //log eles.map(function(ele){ return ele.id() }) );
-
- if( lvl == null ){
- lvl = Math.ceil( math.log2( zoom * pxRatio ) );
-
- if( lvl < minLvl ){
- lvl = minLvl;
- } else if( zoom >= maxZoom || lvl > maxLvl ){
- return null;
- }
- }
-
- self.validateLayersElesOrdering( lvl, eles );
-
- var layersByLvl = self.layersByLevel;
- var scale = Math.pow( 2, lvl );
- var layers = layersByLvl[ lvl ] = layersByLvl[ lvl ] || [];
- var bb;
-
- var lvlComplete = self.levelIsComplete( lvl, eles );
- var tmpLayers;
-
- var checkTempLevels = function(){
- var canUseAsTmpLvl = function( l ){
- self.validateLayersElesOrdering( l, eles );
-
- if( self.levelIsComplete( l, eles ) ){
- tmpLayers = layersByLvl[l];
- return true;
- }
- };
-
- var checkLvls = function( dir ){
- if( tmpLayers ){ return; }
-
- for( var l = lvl + dir; minLvl <= l && l <= maxLvl; l += dir ){
- if( canUseAsTmpLvl(l) ){ break; }
- }
- };
-
- checkLvls( +1 );
- checkLvls( -1 );
-
- // remove the invalid layers; they will be replaced as needed later in this function
- for( var i = layers.length - 1; i >= 0; i-- ){
- var layer = layers[i];
-
- if( layer.invalid ){
- util.removeFromArray( layers, layer );
- }
- }
- };
-
- if( !lvlComplete ){
- // if the current level is incomplete, then use the closest, best quality layerset temporarily
- // and later queue the current layerset so we can get the proper quality level soon
-
- checkTempLevels();
-
- } else {
- // log('level complete, using existing layers\n--');
- return layers;
- }
-
- var getBb = function(){
- if( !bb ){
- bb = math.makeBoundingBox();
-
- for( var i = 0; i < eles.length; i++ ){
- math.updateBoundingBox( bb, eles[i].boundingBox() );
- }
- }
-
- return bb;
- };
-
- var makeLayer = function( opts ){
- opts = opts || {};
-
- var after = opts.after;
-
- getBb();
-
- var area = ( bb.w * scale ) * ( bb.h * scale );
-
- if( area > maxLayerArea ){
- return null;
- }
-
- var layer = self.makeLayer( bb, lvl );
-
- if( after != null ){
- var index = layers.indexOf( after ) + 1;
-
- layers.splice( index, 0, layer );
- } else if( opts.insert === undefined || opts.insert ){
- // no after specified => first layer made so put at start
- layers.unshift( layer );
- }
-
- // if( tmpLayers ){
- //self.queueLayer( layer );
- // }
-
- return layer;
- };
-
- if( self.skipping && !firstGet ){
- // log('skip layers');
- return null;
- }
-
- // log('do layers');
-
- var layer = null;
- var maxElesPerLayer = eles.length / defNumLayers;
- var allowLazyQueueing = alwaysQueue && !firstGet;
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[i];
- var rs = ele._private.rscratch;
- var caches = rs.imgLayerCaches = rs.imgLayerCaches || {};
-
- // log('look at ele', ele.id());
-
- var existingLayer = caches[ lvl ];
-
- if( existingLayer ){
- // reuse layer for later eles
- // log('reuse layer for', ele.id());
- layer = existingLayer;
- continue;
- }
-
- if(
- !layer
- || layer.eles.length >= maxElesPerLayer
- || ( defNumLayers > 1 && !math.boundingBoxInBoundingBox( layer.bb, ele.boundingBox() ) )
- ){
- // log('make new layer for ele %s', ele.id());
-
- layer = makeLayer({ insert: true, after: layer });
-
- // if now layer can be built then we can't use layers at this level
- if( !layer ){ return null; }
-
- // log('new layer with id %s', layer.id);
- }
-
- if( tmpLayers || allowLazyQueueing ){
- // log('queue ele %s in layer %s', ele.id(), layer.id);
- self.queueLayer( layer, ele );
- } else {
- // log('draw ele %s in layer %s', ele.id(), layer.id);
- self.drawEleInLayer( layer, ele, lvl, pxRatio );
- }
-
- layer.eles.push( ele );
-
- caches[ lvl ] = layer;
- }
-
- // log('--');
-
- if( tmpLayers ){ // then we only queued the current layerset and can't draw it yet
- return tmpLayers;
- }
-
- if( allowLazyQueueing ){
- // log('lazy queue level', lvl);
- return null;
- }
-
- return layers;
-};
-
-// a layer may want to use an ele cache of a higher level to avoid blurriness
-// so the layer level might not equal the ele level
-LTCp.getEleLevelForLayerLevel = function( lvl, pxRatio ){
- return lvl;
-};
-
-function imgSmoothing( context, bool ){
- if( context.imageSmoothingEnabled != null ){
- context.imageSmoothingEnabled = bool;
- } else {
- context.webkitImageSmoothingEnabled = bool;
- context.mozImageSmoothingEnabled = bool;
- context.msImageSmoothingEnabled = bool;
- }
-}
-
-LTCp.drawEleInLayer = function( layer, ele, lvl, pxRatio ){
- var self = this;
- var r = this.renderer;
- var context = layer.context;
- var bb = ele.boundingBox();
- var eleCache = self.eleTxrCache;
- var reason = useHighQualityEleTxrReqs ? eleCache.reasons.highQuality : undefined;
-
- lvl = self.getEleLevelForLayerLevel( lvl, pxRatio );
-
- var cache = useEleTxrCaching ? eleCache.getElement( ele, bb, null, lvl, reason ) : null;
-
- if( cache ){
- if( disableEleImgSmoothing ){ imgSmoothing( context, false ); }
-
- context.drawImage( cache.texture.canvas, cache.x, 0, cache.width, cache.height, bb.x1, bb.y1, bb.w, bb.h );
-
- if( disableEleImgSmoothing ){ imgSmoothing( context, true ); }
- } else { // if the element is not cacheable, then draw directly
- r.drawElement( context, ele );
- }
-};
-
-LTCp.levelIsComplete = function( lvl, eles ){
- var self = this;
- var layers = self.layersByLevel[ lvl ];
-
- if( !layers || layers.length === 0 ){ return false; }
-
- var numElesInLayers = 0;
-
- for( var i = 0; i < layers.length; i++ ){
- var layer = layers[i];
-
- // if there are any eles needed to be drawn yet, the level is not complete
- if( layer.reqs > 0 ){ return false; }
-
- // if the layer is invalid, the level is not complete
- if( layer.invalid ){ return false; }
-
- numElesInLayers += layer.eles.length;
- }
-
- // we should have exactly the number of eles passed in to be complete
- if( numElesInLayers !== eles.length ){ return false; }
-
- return true;
-};
-
-LTCp.validateLayersElesOrdering = function( lvl, eles ){
- var layers = this.layersByLevel[ lvl ];
-
- if( !layers ){ return; }
-
- // if in a layer the eles are not in the same order, then the layer is invalid
- // (i.e. there is an ele in between the eles in the layer)
-
- for( var i = 0; i < layers.length; i++ ){
- var layer = layers[i];
- var offset = -1;
-
- // find the offset
- for( var j = 0; j < eles.length; j++ ){
- if( layer.eles[0] === eles[j] ){
- offset = j;
- break;
- }
- }
-
- if( offset < 0 ){
- // then the layer has nonexistant elements and is invalid
- this.invalidateLayer( layer );
- continue;
- }
-
- // the eles in the layer must be in the same continuous order, else the layer is invalid
-
- var o = offset;
-
- for( var j = 0; j < layer.eles.length; j++ ){
- if( layer.eles[j] !== eles[o+j] ){
- // log('invalidate based on ordering', layer.id);
-
- this.invalidateLayer( layer );
- break;
- }
- }
- }
-};
-
-LTCp.updateElementsInLayers = function( eles, update ){
- var self = this;
- var isEles = is.element( eles[0] );
-
- // collect udpated elements (cascaded from the layers) and update each
- // layer itself along the way
- for( var i = 0; i < eles.length; i++ ){
- var req = isEles ? null : eles[i];
- var ele = isEles ? eles[i] : eles[i].ele;
- var rs = ele._private.rscratch;
- var caches = rs.imgLayerCaches = rs.imgLayerCaches || {};
-
- for( var l = minLvl; l <= maxLvl; l++ ){
- var layer = caches[l];
-
- if( !layer ){ continue; }
-
- // if update is a request from the ele cache, then it affects only
- // the matching level
- if( req && self.getEleLevelForLayerLevel( layer.level ) !== req.level ){
- continue;
- }
-
- update( layer, ele, req );
- }
- }
-};
-
-LTCp.haveLayers = function(){
- var self = this;
- var haveLayers = false;
-
- for( var l = minLvl; l <= maxLvl; l++ ){
- var layers = self.layersByLevel[l];
-
- if( layers && layers.length > 0 ){
- haveLayers = true;
- break;
- }
- }
-
- return haveLayers;
-};
-
-LTCp.invalidateElements = function( eles ){
- var self = this;
-
- self.lastInvalidationTime = util.performanceNow();
-
- // log('update invalidate layer time from eles');
-
- if( eles.length === 0 || !self.haveLayers() ){ return; }
-
- self.updateElementsInLayers( eles, function invalAssocLayers( layer, ele, req ){
- self.invalidateLayer( layer );
- } );
-};
-
-LTCp.invalidateLayer = function( layer ){
- // log('update invalidate layer time');
-
- this.lastInvalidationTime = util.performanceNow();
-
- if( layer.invalid ){ return; } // save cycles
-
- var lvl = layer.level;
- var eles = layer.eles;
- var layers = this.layersByLevel[ lvl ];
-
- // log('invalidate layer', layer.id );
-
- util.removeFromArray( layers, layer );
- // layer.eles = [];
-
- layer.elesQueue = [];
-
- layer.invalid = true;
-
- if( layer.replacement ){
- layer.replacement.invalid = true;
- }
-
- for( var i = 0; i < eles.length; i++ ){
- var caches = eles[i]._private.rscratch.imgLayerCaches;
-
- if( caches ){
- caches[ lvl ] = null;
- }
- }
-};
-
-LTCp.refineElementTextures = function( eles ){
- var self = this;
-
- // log('refine', eles.length);
-
- self.updateElementsInLayers( eles, function refineEachEle( layer, ele, req ){
- var rLyr = layer.replacement;
-
- if( !rLyr ){
- rLyr = layer.replacement = self.makeLayer( layer.bb, layer.level );
- rLyr.replaces = layer;
- rLyr.eles = layer.eles;
-
- // log('make replacement layer %s for %s with level %s', rLyr.id, layer.id, rLyr.level);
- }
-
- if( !rLyr.reqs ){
- for( var i = 0; i < rLyr.eles.length; i++ ){
- self.queueLayer( rLyr, rLyr.eles[i] );
- }
-
- // log('queue replacement layer refinement', rLyr.id);
- }
- } );
-};
-
-LTCp.setupEleCacheInvalidation = function(){
- var self = this;
- var eleDeqs = [];
-
- if( !useEleTxrCaching ){ return; }
-
- var updatedElesInLayers = util.debounce( function(){
- self.refineElementTextures( eleDeqs );
-
- eleDeqs = [];
- }, refineEleDebounceTime );
-
- self.eleTxrCache.onDequeue(function( reqs ){
- for( var i = 0; i < reqs.length; i++ ){
- eleDeqs.push( reqs[i] );
- }
-
- updatedElesInLayers();
- });
-};
-
-LTCp.queueLayer = function( layer, ele ){
- var self = this;
- var q = self.layersQueue;
- var elesQ = layer.elesQueue;
- var hasId = elesQ.hasId = elesQ.hasId || {};
-
- // if a layer is going to be replaced, queuing is a waste of time
- if( layer.replacement ){ return; }
-
- if( ele ){
- if( hasId[ ele.id() ] ){
- return;
- }
-
- elesQ.push( ele );
- hasId[ ele.id() ] = true;
- }
-
- if( layer.reqs ){
- layer.reqs++;
-
- q.updateItem( layer );
- } else {
- layer.reqs = 1;
-
- q.push( layer );
- }
-};
-
-LTCp.dequeue = function( pxRatio ){
- var self = this;
- var q = self.layersQueue;
- var deqd = [];
- var eleDeqs = 0;
-
- while( eleDeqs < maxDeqSize ){
- if( q.size() === 0 ){ break; }
-
- var layer = q.peek();
-
- // if a layer has been or will be replaced, then don't waste time with it
- if( layer.replacement ){
- // log('layer %s in queue skipped b/c it already has a replacement', layer.id);
- q.pop();
- continue;
- }
-
- // if this is a replacement layer that has been superceded, then forget it
- if( layer.replaces && layer !== layer.replaces.replacement ){
- // log('layer is no longer the most uptodate replacement; dequeued', layer.id)
- q.pop();
- continue;
- }
-
- if( layer.invalid ){
- // log('replacement layer %s is invalid; dequeued', layer.id);
- q.pop();
- continue;
- }
-
- var ele = layer.elesQueue.shift();
-
- if( ele ){
- // log('dequeue layer %s', layer.id);
-
- self.drawEleInLayer( layer, ele, layer.level, pxRatio );
-
- eleDeqs++;
- }
-
- if( deqd.length === 0 ){
- // we need only one entry in deqd to queue redrawing etc
- deqd.push( true );
- }
-
- // if the layer has all its eles done, then remove from the queue
- if( layer.elesQueue.length === 0 ){
- q.pop();
-
- layer.reqs = 0;
-
- // log('dequeue of layer %s complete', layer.id);
-
- // when a replacement layer is dequeued, it replaces the old layer in the level
- if( layer.replaces ){
- self.applyLayerReplacement( layer );
- }
-
- self.requestRedraw();
- }
- }
-
- return deqd;
-};
-
-LTCp.applyLayerReplacement = function( layer ){
- var self = this;
- var layersInLevel = self.layersByLevel[ layer.level ];
- var replaced = layer.replaces;
- var index = layersInLevel.indexOf( replaced );
-
- // if the replaced layer is not in the active list for the level, then replacing
- // refs would be a mistake (i.e. overwriting the true active layer)
- if( index < 0 || replaced.invalid ){
- // log('replacement layer would have no effect', layer.id);
- return;
- }
-
- layersInLevel[ index ] = layer; // replace level ref
-
- // replace refs in eles
- for( var i = 0; i < layer.eles.length; i++ ){
- var _p = layer.eles[i]._private;
- var cache = _p.imgLayerCaches = _p.imgLayerCaches || {};
-
- if( cache ){
- cache[ layer.level ] = layer;
- }
- }
-
- // log('apply replacement layer %s over %s', layer.id, replaced.id);
-
- self.requestRedraw();
-};
-
-LTCp.requestRedraw = util.debounce( function(){
- var r = this.renderer;
-
- r.redrawHint( 'eles', true );
- r.redrawHint( 'drag', true );
- r.redraw();
-}, 100 );
-
-LTCp.setupDequeueing = defs.setupDequeueing({
- deqRedrawThreshold: deqRedrawThreshold,
- deqCost: deqCost,
- deqAvgCost: deqAvgCost,
- deqNoDrawCost: deqNoDrawCost,
- deqFastCost: deqFastCost,
- deq: function( self, pxRatio ){
- return self.dequeue( pxRatio );
- },
- onDeqd: util.noop,
- shouldRedraw: util.trueify,
- priority: function( self ){
- return self.renderer.beforeRenderPriorities.lyrTxrDeq;
- }
-});
-
-module.exports = LayeredTextureCache;
-
-},{"../../../heap":81,"../../../is":83,"../../../math":85,"../../../util":100,"./texture-cache-defs":77}],76:[function(_dereq_,module,exports){
-'use strict';
-
-var CRp = {};
-
-CRp.nodeShapeImpl = function( name, context, centerX, centerY, width, height, points ){
- switch( name ){
- case 'ellipse':
- return this.drawEllipsePath( context, centerX, centerY, width, height );
- case 'polygon':
- return this.drawPolygonPath( context, centerX, centerY, width, height, points );
- case 'roundrectangle':
- return this.drawRoundRectanglePath( context, centerX, centerY, width, height );
- }
-};
-
-module.exports = CRp;
-
-},{}],77:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../../../util' );
-
-var fullFpsTime = 1000/60; // assume 60 frames per second
-
-module.exports = {
- setupDequeueing: function( opts ){
- return function setupDequeueingImpl(){
- var self = this;
- var r = this.renderer;
-
- if( self.dequeueingSetup ){
- return;
- } else {
- self.dequeueingSetup = true;
- }
-
- var queueRedraw = util.debounce( function(){
- r.redrawHint( 'eles', true );
- r.redrawHint( 'drag', true );
-
- r.redraw();
- }, opts.deqRedrawThreshold );
-
- var dequeue = function( willDraw, frameStartTime ){
- var startTime = util.performanceNow();
- var avgRenderTime = r.averageRedrawTime;
- var renderTime = r.lastRedrawTime;
- var deqd = [];
- var extent = r.cy.extent();
- var pixelRatio = r.getPixelRatio();
-
- while( true ){
- var now = util.performanceNow();
- var duration = now - startTime;
- var frameDuration = now - frameStartTime;
-
- if( renderTime < fullFpsTime ){
- // if we're rendering faster than the ideal fps, then do dequeueing
- // during all of the remaining frame time
-
- var timeAvailable = fullFpsTime - ( willDraw ? avgRenderTime : 0 );
-
- if( frameDuration >= opts.deqFastCost * timeAvailable ){
- break;
- }
- } else {
- if( willDraw ){
- if(
- duration >= opts.deqCost * renderTime
- || duration >= opts.deqAvgCost * avgRenderTime
- ){
- break;
- }
- } else if( frameDuration >= opts.deqNoDrawCost * fullFpsTime ){
- break;
- }
- }
-
- var thisDeqd = opts.deq( self, pixelRatio, extent );
-
- if( thisDeqd.length > 0 ){
- for( var i = 0; i < thisDeqd.length; i++ ){
- deqd.push( thisDeqd[i] );
- }
- } else {
- break;
- }
- }
-
- // callbacks on dequeue
- if( deqd.length > 0 ){
- opts.onDeqd( self, deqd );
-
- if( !willDraw && opts.shouldRedraw( self, deqd, pixelRatio, extent ) ){
- queueRedraw();
- }
- }
- };
-
- var priority = opts.priority || util.noop;
-
- r.beforeRender( dequeue, priority( self ) );
- };
- }
-};
-
-},{"../../../util":100}],78:[function(_dereq_,module,exports){
-'use strict';
-
-module.exports = [
- { name: 'null', impl: _dereq_( './null' ) },
- { name: 'base', impl: _dereq_( './base' ) },
- { name: 'canvas', impl: _dereq_( './canvas' ) }
-];
-
-},{"./base":60,"./canvas":74,"./null":79}],79:[function(_dereq_,module,exports){
-'use strict';
-
-function NullRenderer( options ){
- this.options = options;
- this.notifications = 0; // for testing
-}
-
-var noop = function(){};
-
-NullRenderer.prototype = {
- recalculateRenderedStyle: noop,
- notify: function(){ this.notifications++; },
- init: noop
-};
-
-module.exports = NullRenderer;
-
-},{}],80:[function(_dereq_,module,exports){
-/*! Weaver licensed under MIT (https://tldrlegal.com/license/mit-license), copyright Max Franz */
-
-'use strict';
-
-var is = _dereq_('./is');
-var util = _dereq_('./util');
-var Thread = _dereq_('./thread');
-var Promise = _dereq_('./promise');
-var define = _dereq_('./define');
-
-var Fabric = function( N ){
- if( !(this instanceof Fabric) ){
- return new Fabric( N );
- }
-
- this._private = {
- pass: []
- };
-
- var defN = 4;
-
- if( is.number(N) ){
- // then use the specified number of threads
- } if( typeof navigator !== 'undefined' && navigator.hardwareConcurrency != null ){
- N = navigator.hardwareConcurrency;
- } else {
- try{
- N = _dereq_('os').cpus().length;
- } catch( err ){
- N = defN;
- }
- } // TODO could use an estimation here but would the additional expense be worth it?
-
- for( var i = 0; i < N; i++ ){
- this[i] = new Thread();
- }
-
- this.length = N;
-};
-
-var fabfn = Fabric.prototype; // short alias
-
-util.extend(fabfn, {
-
- instanceString: function(){ return 'fabric'; },
-
- // require fn in all threads
- require: function( fn, as ){
- for( var i = 0; i < this.length; i++ ){
- var thread = this[i];
-
- thread.require( fn, as );
- }
-
- return this;
- },
-
- // get a random thread
- random: function(){
- var i = Math.round( (this.length - 1) * Math.random() );
- var thread = this[i];
-
- return thread;
- },
-
- // run on random thread
- run: function( fn ){
- var pass = this._private.pass.shift();
-
- return this.random().pass( pass ).run( fn );
- },
-
- // sends a random thread a message
- message: function( m ){
- return this.random().message( m );
- },
-
- // send all threads a message
- broadcast: function( m ){
- for( var i = 0; i < this.length; i++ ){
- var thread = this[i];
-
- thread.message( m );
- }
-
- return this; // chaining
- },
-
- // stop all threads
- stop: function(){
- for( var i = 0; i < this.length; i++ ){
- var thread = this[i];
-
- thread.stop();
- }
-
- return this; // chaining
- },
-
- // pass data to be used with .spread() etc.
- pass: function( data ){
- var pass = this._private.pass;
-
- if( is.array(data) ){
- pass.push( data );
- } else {
- throw 'Only arrays may be used with fabric.pass()';
- }
-
- return this; // chaining
- },
-
- spreadSize: function(){
- var subsize = Math.ceil( this._private.pass[0].length / this.length );
-
- subsize = Math.max( 1, subsize ); // don't pass less than one ele to each thread
-
- return subsize;
- },
-
- // split the data into slices to spread the data equally among threads
- spread: function( fn ){
- var self = this;
- var _p = self._private;
- var subsize = self.spreadSize(); // number of pass eles to handle in each thread
- var pass = _p.pass.shift().concat([]); // keep a copy
- var runPs = [];
-
- for( var i = 0; i < this.length; i++ ){
- var thread = this[i];
- var slice = pass.splice( 0, subsize );
-
- var runP = thread.pass( slice ).run( fn );
-
- runPs.push( runP );
-
- var doneEarly = pass.length === 0;
- if( doneEarly ){ break; }
- }
-
- return Promise.all( runPs ).then(function( thens ){
- var postpass = [];
- var p = 0;
-
- // fill postpass with the total result joined from all threads
- for( var i = 0; i < thens.length; i++ ){
- var then = thens[i]; // array result from thread i
-
- for( var j = 0; j < then.length; j++ ){
- var t = then[j]; // array element
-
- postpass[ p++ ] = t;
- }
- }
-
- return postpass;
- });
- },
-
- // parallel version of array.map()
- map: function( fn ){
- var self = this;
-
- self.require( fn, '_$_$_fabmap' );
-
- return self.spread(function( split ){
- var mapped = [];
- var origResolve = resolve; // jshint ignore:line
-
- resolve = function( val ){ // jshint ignore:line
- mapped.push( val );
- };
-
- for( var i = 0; i < split.length; i++ ){
- var oldLen = mapped.length;
- var ret = _$_$_fabmap( split[i] ); // jshint ignore:line
- var nothingInsdByResolve = oldLen === mapped.length;
-
- if( nothingInsdByResolve ){
- mapped.push( ret );
- }
- }
-
- resolve = origResolve; // jshint ignore:line
-
- return mapped;
- });
-
- },
-
- // parallel version of array.filter()
- filter: function( fn ){
- var _p = this._private;
- var pass = _p.pass[0];
-
- return this.map( fn ).then(function( include ){
- var ret = [];
-
- for( var i = 0; i < pass.length; i++ ){
- var datum = pass[i];
- var incDatum = include[i];
-
- if( incDatum ){
- ret.push( datum );
- }
- }
-
- return ret;
- });
- },
-
- // sorts the passed array using a divide and conquer strategy
- sort: function( cmp ){
- var self = this;
- var P = this._private.pass[0].length;
- var subsize = this.spreadSize();
-
- cmp = cmp || function( a, b ){ // default comparison function
- if( a < b ){
- return -1;
- } else if( a > b ){
- return 1;
- }
-
- return 0;
- };
-
- self.require( cmp, '_$_$_cmp' );
-
- return self.spread(function( split ){ // sort each split normally
- var sortedSplit = split.sort( _$_$_cmp ); // jshint ignore:line
- resolve( sortedSplit ); // jshint ignore:line
-
- }).then(function( joined ){
- // do all the merging in the main thread to minimise data transfer
-
- // TODO could do merging in separate threads but would incur add'l cost of data transfer
- // for each level of the merge
-
- var merge = function( i, j, max ){
- // don't overflow array
- j = Math.min( j, P );
- max = Math.min( max, P );
-
- // left and right sides of merge
- var l = i;
- var r = j;
-
- var sorted = [];
-
- for( var k = l; k < max; k++ ){
-
- var eleI = joined[i];
- var eleJ = joined[j];
-
- if( i < r && ( j >= max || cmp(eleI, eleJ) <= 0 ) ){
- sorted.push( eleI );
- i++;
- } else {
- sorted.push( eleJ );
- j++;
- }
-
- }
-
- // in the array proper, put the sorted values
- for( var k = 0; k < sorted.length; k++ ){ // kth sorted item
- var index = l + k;
-
- joined[ index ] = sorted[k];
- }
- };
-
- for( var splitL = subsize; splitL < P; splitL *= 2 ){ // merge until array is "split" as 1
-
- for( var i = 0; i < P; i += 2*splitL ){
- merge( i, i + splitL, i + 2*splitL );
- }
-
- }
-
- return joined;
- });
- }
-
-
-});
-
-var defineRandomPasser = function( opts ){
- opts = opts || {};
-
- return function( fn, arg1 ){
- var pass = this._private.pass.shift();
-
- return this.random().pass( pass )[ opts.threadFn ]( fn, arg1 );
- };
-};
-
-util.extend(fabfn, {
- randomMap: defineRandomPasser({ threadFn: 'map' }),
-
- reduce: defineRandomPasser({ threadFn: 'reduce' }),
-
- reduceRight: defineRandomPasser({ threadFn: 'reduceRight' })
-});
-
-// aliases
-var fn = fabfn;
-fn.promise = fn.run;
-fn.terminate = fn.halt = fn.stop;
-fn.include = fn.require;
-
-// pull in event apis
-util.extend(fabfn, {
- on: define.on(),
- one: define.on({ unbindSelfOnTrigger: true }),
- off: define.off(),
- trigger: define.trigger()
-});
-
-define.eventAliasesOn( fabfn );
-
-module.exports = Fabric;
-
-},{"./define":44,"./is":83,"./promise":86,"./thread":98,"./util":100,"os":undefined}],81:[function(_dereq_,module,exports){
-/*!
-Ported by Xueqiao Xu <xueqiaoxu@gmail.com>;
-
-PSF LICENSE AGREEMENT FOR PYTHON 2.7.2
-
-1. This LICENSE AGREEMENT is between the Python Software Foundation (“PSFâ€), and the Individual or Organization (“Licenseeâ€) accessing and otherwise using Python 2.7.2 software in source or binary form and its associated documentation.
-2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 2.7.2 alone or in any derivative version, provided, however, that PSF’s License Agreement and PSF’s notice of copyright, i.e., “Copyright © 2001-2012 Python Software Foundation; All Rights Reserved†are retained in Python 2.7.2 alone or in any derivative version prepared by Licensee.
-3. In the event Licensee prepares a derivative work that is based on or incorporates Python 2.7.2 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 2.7.2.
-4. PSF is making Python 2.7.2 available to Licensee on an “AS IS†basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.7.2 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.
-5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 2.7.2 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.7.2, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.
-6. This License Agreement will automatically terminate upon a material breach of its terms and conditions.
-7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party.
-8. By copying, installing or otherwise using Python 2.7.2, Licensee agrees to be bound by the terms and conditions of this License Agreement.
-*/
-
-'use strict';
-/* jshint ignore:start */
-
-// Generated by CoffeeScript 1.8.0
-(function(){
- var Heap, defaultCmp, floor, heapify, heappop, heappush, heappushpop, heapreplace, insort, min, nlargest, nsmallest, updateItem, _siftdown, _siftup;
-
- floor = Math.floor, min = Math.min;
-
-
- /*
- Default comparison function to be used
- */
-
- defaultCmp = function( x, y ){
- if( x < y ){
- return -1;
- }
- if( x > y ){
- return 1;
- }
- return 0;
- };
-
-
- /*
- Insert item x in list a, and keep it sorted assuming a is sorted.
-
- If x is already in a, insert it to the right of the rightmost x.
-
- Optional args lo (default 0) and hi (default a.length) bound the slice
- of a to be searched.
- */
-
- insort = function( a, x, lo, hi, cmp ){
- var mid;
- if( lo == null ){
- lo = 0;
- }
- if( cmp == null ){
- cmp = defaultCmp;
- }
- if( lo < 0 ){
- throw new Error( 'lo must be non-negative' );
- }
- if( hi == null ){
- hi = a.length;
- }
- while( lo < hi ){
- mid = floor( (lo + hi) / 2 );
- if( cmp( x, a[ mid ] ) < 0 ){
- hi = mid;
- } else {
- lo = mid + 1;
- }
- }
- return ([].splice.apply( a, [ lo, lo - lo ].concat( x ) ), x);
- };
-
-
- /*
- Push item onto heap, maintaining the heap invariant.
- */
-
- heappush = function( array, item, cmp ){
- if( cmp == null ){
- cmp = defaultCmp;
- }
- array.push( item );
- return _siftdown( array, 0, array.length - 1, cmp );
- };
-
-
- /*
- Pop the smallest item off the heap, maintaining the heap invariant.
- */
-
- heappop = function( array, cmp ){
- var lastelt, returnitem;
- if( cmp == null ){
- cmp = defaultCmp;
- }
- lastelt = array.pop();
- if( array.length ){
- returnitem = array[0];
- array[0] = lastelt;
- _siftup( array, 0, cmp );
- } else {
- returnitem = lastelt;
- }
- return returnitem;
- };
-
-
- /*
- Pop and return the current smallest value, and add the new item.
-
- This is more efficient than heappop() followed by heappush(), and can be
- more appropriate when using a fixed size heap. Note that the value
- returned may be larger than item! That constrains reasonable use of
- this routine unless written as part of a conditional replacement:
- if item > array[0]
- item = heapreplace(array, item)
- */
-
- heapreplace = function( array, item, cmp ){
- var returnitem;
- if( cmp == null ){
- cmp = defaultCmp;
- }
- returnitem = array[0];
- array[0] = item;
- _siftup( array, 0, cmp );
- return returnitem;
- };
-
-
- /*
- Fast version of a heappush followed by a heappop.
- */
-
- heappushpop = function( array, item, cmp ){
- var _ref;
- if( cmp == null ){
- cmp = defaultCmp;
- }
- if( array.length && cmp( array[0], item ) < 0 ){
- _ref = [ array[0], item ], item = _ref[0], array[0] = _ref[1];
- _siftup( array, 0, cmp );
- }
- return item;
- };
-
-
- /*
- Transform list into a heap, in-place, in O(array.length) time.
- */
-
- heapify = function( array, cmp ){
- var i, _i, _j, _len, _ref, _ref1, _results, _results1;
- if( cmp == null ){
- cmp = defaultCmp;
- }
- _ref1 = (function(){
- _results1 = [];
- for( var _j = 0, _ref = floor( array.length / 2 ); 0 <= _ref ? _j < _ref : _j > _ref; 0 <= _ref ? _j++ : _j-- ){ _results1.push( _j ); }
- return _results1;
- }).apply( this ).reverse();
- _results = [];
- for( _i = 0, _len = _ref1.length; _i < _len; _i++ ){
- i = _ref1[ _i ];
- _results.push( _siftup( array, i, cmp ) );
- }
- return _results;
- };
-
-
- /*
- Update the position of the given item in the heap.
- This function should be called every time the item is being modified.
- */
-
- updateItem = function( array, item, cmp ){
- var pos;
- if( cmp == null ){
- cmp = defaultCmp;
- }
- pos = array.indexOf( item );
- if( pos === -1 ){
- return;
- }
- _siftdown( array, 0, pos, cmp );
- return _siftup( array, pos, cmp );
- };
-
-
- /*
- Find the n largest elements in a dataset.
- */
-
- nlargest = function( array, n, cmp ){
- var elem, result, _i, _len, _ref;
- if( cmp == null ){
- cmp = defaultCmp;
- }
- result = array.slice( 0, n );
- if( !result.length ){
- return result;
- }
- heapify( result, cmp );
- _ref = array.slice( n );
- for( _i = 0, _len = _ref.length; _i < _len; _i++ ){
- elem = _ref[ _i ];
- heappushpop( result, elem, cmp );
- }
- return result.sort( cmp ).reverse();
- };
-
-
- /*
- Find the n smallest elements in a dataset.
- */
-
- nsmallest = function( array, n, cmp ){
- var elem, i, los, result, _i, _j, _len, _ref, _ref1, _results;
- if( cmp == null ){
- cmp = defaultCmp;
- }
- if( n * 10 <= array.length ){
- result = array.slice( 0, n ).sort( cmp );
- if( !result.length ){
- return result;
- }
- los = result[ result.length - 1];
- _ref = array.slice( n );
- for( _i = 0, _len = _ref.length; _i < _len; _i++ ){
- elem = _ref[ _i ];
- if( cmp( elem, los ) < 0 ){
- insort( result, elem, 0, null, cmp );
- result.pop();
- los = result[ result.length - 1];
- }
- }
- return result;
- }
- heapify( array, cmp );
- _results = [];
- for( i = _j = 0, _ref1 = min( n, array.length ); 0 <= _ref1 ? _j < _ref1 : _j > _ref1; i = 0 <= _ref1 ? ++_j : --_j ){
- _results.push( heappop( array, cmp ) );
- }
- return _results;
- };
-
- _siftdown = function( array, startpos, pos, cmp ){
- var newitem, parent, parentpos;
- if( cmp == null ){
- cmp = defaultCmp;
- }
- newitem = array[ pos ];
- while( pos > startpos ){
- parentpos = (pos - 1) >> 1;
- parent = array[ parentpos ];
- if( cmp( newitem, parent ) < 0 ){
- array[ pos ] = parent;
- pos = parentpos;
- continue;
- }
- break;
- }
- return array[ pos ] = newitem;
- };
-
- _siftup = function( array, pos, cmp ){
- var childpos, endpos, newitem, rightpos, startpos;
- if( cmp == null ){
- cmp = defaultCmp;
- }
- endpos = array.length;
- startpos = pos;
- newitem = array[ pos ];
- childpos = 2 * pos + 1;
- while( childpos < endpos ){
- rightpos = childpos + 1;
- if( rightpos < endpos && !(cmp( array[ childpos ], array[ rightpos ] ) < 0) ){
- childpos = rightpos;
- }
- array[ pos ] = array[ childpos ];
- pos = childpos;
- childpos = 2 * pos + 1;
- }
- array[ pos ] = newitem;
- return _siftdown( array, startpos, pos, cmp );
- };
-
- Heap = (function(){
- Heap.push = heappush;
-
- Heap.pop = heappop;
-
- Heap.replace = heapreplace;
-
- Heap.pushpop = heappushpop;
-
- Heap.heapify = heapify;
-
- Heap.updateItem = updateItem;
-
- Heap.nlargest = nlargest;
-
- Heap.nsmallest = nsmallest;
-
- function Heap( cmp ){
- this.cmp = cmp != null ? cmp : defaultCmp;
- this.nodes = [];
- }
-
- Heap.prototype.push = function( x ){
- return heappush( this.nodes, x, this.cmp );
- };
-
- Heap.prototype.pop = function(){
- return heappop( this.nodes, this.cmp );
- };
-
- Heap.prototype.peek = function(){
- return this.nodes[0];
- };
-
- Heap.prototype.contains = function( x ){
- return this.nodes.indexOf( x ) !== -1;
- };
-
- Heap.prototype.replace = function( x ){
- return heapreplace( this.nodes, x, this.cmp );
- };
-
- Heap.prototype.pushpop = function( x ){
- return heappushpop( this.nodes, x, this.cmp );
- };
-
- Heap.prototype.heapify = function(){
- return heapify( this.nodes, this.cmp );
- };
-
- Heap.prototype.updateItem = function( x ){
- return updateItem( this.nodes, x, this.cmp );
- };
-
- Heap.prototype.clear = function(){
- return this.nodes = [];
- };
-
- Heap.prototype.empty = function(){
- return this.nodes.length === 0;
- };
-
- Heap.prototype.size = function(){
- return this.nodes.length;
- };
-
- Heap.prototype.clone = function(){
- var heap;
- heap = new Heap();
- heap.nodes = this.nodes.slice( 0 );
- return heap;
- };
-
- Heap.prototype.toArray = function(){
- return this.nodes.slice( 0 );
- };
-
- Heap.prototype.insert = Heap.prototype.push;
-
- Heap.prototype.top = Heap.prototype.peek;
-
- Heap.prototype.front = Heap.prototype.peek;
-
- Heap.prototype.has = Heap.prototype.contains;
-
- Heap.prototype.copy = Heap.prototype.clone;
-
- return Heap;
-
- })();
-
- (function( root, factory ){
- if( typeof define === 'function' && define.amd ){ // eslint-disable-line no-undef
- return define( [], factory ); // eslint-disable-line no-undef
- } else if( typeof exports === 'object' ){
- return module.exports = factory();
- } else {
- return root.Heap = factory();
- }
- })( this, function(){
- return Heap;
- } );
-
-}).call( this );
-
-/* jshint ignore:end */
-
-},{}],82:[function(_dereq_,module,exports){
-'use strict';
-
-_dereq_('./-preamble');
-
-var window = _dereq_( './window' );
-var is = _dereq_( './is' );
-var Core = _dereq_( './core' );
-var extension = _dereq_( './extension' );
-var registerJquery = _dereq_( './jquery-plugin' );
-var Stylesheet = _dereq_( './stylesheet' );
-var Thread = _dereq_( './thread' );
-var Fabric = _dereq_( './fabric' );
-
-var cytoscape = function( options ){ // jshint ignore:line
- // if no options specified, use default
- if( options === undefined ){
- options = {};
- }
-
- // create instance
- if( is.plainObject( options ) ){
- return new Core( options );
- }
-
- // allow for registration of extensions
- else if( is.string( options ) ){
- return extension.apply( extension, arguments );
- }
-};
-
-// replaced by build system
-cytoscape.version = _dereq_('./version.json');
-
-// try to register w/ jquery
-if( window && window.jQuery ){
- registerJquery( window.jQuery, cytoscape );
-}
-
-// expose register api
-cytoscape.registerJquery = function( jQuery ){
- registerJquery( jQuery, cytoscape );
-};
-
-// expose public apis (mostly for extensions)
-cytoscape.stylesheet = cytoscape.Stylesheet = Stylesheet;
-cytoscape.thread = cytoscape.Thread = Thread;
-cytoscape.fabric = cytoscape.Fabric = Fabric;
-
-module.exports = cytoscape;
-
-},{"./-preamble":1,"./core":37,"./extension":46,"./fabric":80,"./is":83,"./jquery-plugin":84,"./stylesheet":97,"./thread":98,"./version.json":106,"./window":107}],83:[function(_dereq_,module,exports){
-'use strict';
-
-/*global HTMLElement DocumentTouch */
-
-var window = _dereq_( './window' );
-var navigator = window ? window.navigator : null;
-var document = window ? window.document : null;
-
-var typeofstr = typeof '';
-var typeofobj = typeof {};
-var typeoffn = typeof function(){};
-var typeofhtmlele = typeof HTMLElement;
-
-var instanceStr = function( obj ){
- return obj && obj.instanceString && is.fn( obj.instanceString ) ? obj.instanceString() : null;
-};
-
-var is = {
- defined: function( obj ){
- return obj != null; // not undefined or null
- },
-
- string: function( obj ){
- return obj != null && typeof obj == typeofstr;
- },
-
- fn: function( obj ){
- return obj != null && typeof obj === typeoffn;
- },
-
- array: function( obj ){
- return Array.isArray ? Array.isArray( obj ) : obj != null && obj instanceof Array;
- },
-
- plainObject: function( obj ){
- return obj != null && typeof obj === typeofobj && !is.array( obj ) && obj.constructor === Object;
- },
-
- object: function( obj ){
- return obj != null && typeof obj === typeofobj;
- },
-
- number: function( obj ){
- return obj != null && typeof obj === typeof 1 && !isNaN( obj );
- },
-
- integer: function( obj ){
- return is.number( obj ) && Math.floor( obj ) === obj;
- },
-
- bool: function( obj ){
- return obj != null && typeof obj === typeof true;
- },
-
- htmlElement: function( obj ){
- if( 'undefined' === typeofhtmlele ){
- return undefined;
- } else {
- return null != obj && obj instanceof HTMLElement;
- }
- },
-
- elementOrCollection: function( obj ){
- return is.element( obj ) || is.collection( obj );
- },
-
- element: function( obj ){
- return instanceStr( obj ) === 'collection' && obj._private.single;
- },
-
- collection: function( obj ){
- return instanceStr( obj ) === 'collection' && !obj._private.single;
- },
-
- core: function( obj ){
- return instanceStr( obj ) === 'core';
- },
-
- style: function( obj ){
- return instanceStr( obj ) === 'style';
- },
-
- stylesheet: function( obj ){
- return instanceStr( obj ) === 'stylesheet';
- },
-
- event: function( obj ){
- return instanceStr( obj ) === 'event';
- },
-
- thread: function( obj ){
- return instanceStr( obj ) === 'thread';
- },
-
- fabric: function( obj ){
- return instanceStr( obj ) === 'fabric';
- },
-
- emptyString: function( obj ){
- if( obj === undefined || obj === null ){ // null is empty
- return true;
- } else if( obj === '' || obj.match( /^\s+$/ ) ){
- return true; // empty string is empty
- }
-
- return false; // otherwise, we don't know what we've got
- },
-
- nonemptyString: function( obj ){
- if( obj && is.string( obj ) && obj !== '' && !obj.match( /^\s+$/ ) ){
- return true;
- }
-
- return false;
- },
-
- domElement: function( obj ){
- if( typeof HTMLElement === 'undefined' ){
- return false; // we're not in a browser so it doesn't matter
- } else {
- return obj instanceof HTMLElement;
- }
- },
-
- boundingBox: function( obj ){
- return is.plainObject( obj ) &&
- is.number( obj.x1 ) && is.number( obj.x2 ) &&
- is.number( obj.y1 ) && is.number( obj.y2 )
- ;
- },
-
- promise: function( obj ){
- return is.object( obj ) && is.fn( obj.then );
- },
-
- touch: function(){
- return window && ( ('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch );
- },
-
- gecko: function(){
- return window && ( typeof InstallTrigger !== 'undefined' || ('MozAppearance' in document.documentElement.style) );
- },
-
- webkit: function(){
- return window && ( typeof webkitURL !== 'undefined' || ('WebkitAppearance' in document.documentElement.style) );
- },
-
- chromium: function(){
- return window && ( typeof chrome !== 'undefined' );
- },
-
- khtml: function(){
- return navigator && navigator.vendor.match( /kde/i ); // probably a better way to detect this...
- },
-
- khtmlEtc: function(){
- return is.khtml() || is.webkit() || is.chromium();
- },
-
- ms: function(){
- return navigator && navigator.userAgent.match( /msie|trident|edge/i ); // probably a better way to detect this...
- },
-
- windows: function(){
- return navigator && navigator.appVersion.match( /Win/i );
- },
-
- mac: function(){
- return navigator && navigator.appVersion.match( /Mac/i );
- },
-
- linux: function(){
- return navigator && navigator.appVersion.match( /Linux/i );
- },
-
- unix: function(){
- return navigator && navigator.appVersion.match( /X11/i );
- }
-};
-
-module.exports = is;
-
-},{"./window":107}],84:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( './is' );
-
-var cyReg = function( $ele ){
- var d = $ele[0]._cyreg = $ele[0]._cyreg || {};
-
- return d;
-};
-
-var registerJquery = function( $, cytoscape ){
- if( !$ ){ return; } // no jquery => don't need this
-
- if( $.fn.cytoscape ){ return; } // already registered
-
- // allow calls on a jQuery selector by proxying calls to $.cytoscape
- // e.g. $("#foo").cytoscape(options) => $.cytoscape(options) on #foo
- $.fn.cytoscape = function( opts ){
- var $this = $( this );
-
- // get object
- if( opts === 'get' ){
- return cyReg( $this ).cy;
- }
-
- // bind to ready
- else if( is.fn( opts ) ){
-
- var ready = opts;
- var cy = cyReg( $this ).cy;
-
- if( cy && cy.isReady() ){ // already ready so just trigger now
- cy.trigger( 'ready', [], ready );
-
- } else { // not yet ready, so add to readies list
- var data = cyReg( $this );
- var readies = data.readies = data.readies || [];
-
- readies.push( ready );
- }
-
- }
-
- // proxy to create instance
- else if( is.plainObject( opts ) ){
- return $this.each( function(){
- var options = $.extend( {}, opts, {
- container: $( this )[0]
- } );
-
- cytoscape( options );
- } );
- }
- };
-
- // allow access to the global cytoscape object under jquery for legacy reasons
- $.cytoscape = cytoscape;
-
- // use short alias (cy) if not already defined
- if( $.fn.cy == null && $.cy == null ){
- $.fn.cy = $.fn.cytoscape;
- $.cy = $.cytoscape;
- }
-};
-
-module.exports = registerJquery;
-
-},{"./is":83}],85:[function(_dereq_,module,exports){
-'use strict';
-
-var math = {};
-
-math.arePositionsSame = function( p1, p2 ){
- return p1.x === p2.x && p1.y === p2.y;
-};
-
-math.copyPosition = function( p ){
- return { x: p.x, y: p.y };
-};
-
-math.array2point = function( arr ){
- return {
- x: arr[0],
- y: arr[1]
- };
-};
-
-math.deg2rad = function( deg ){
- return Math.PI * deg / 180;
-};
-
-math.log2 = Math.log2 || function( n ){
- return Math.log( n ) / Math.log( 2 );
-};
-
-math.signum = function( x ){
- if( x > 0 ){
- return 1;
- } else if( x < 0 ){
- return -1;
- } else {
- return 0;
- }
-};
-
-math.dist = function( p1, p2 ){
- return Math.sqrt( math.sqdist( p1, p2 ) );
-};
-
-math.sqdist = function( p1, p2 ){
- var dx = p2.x - p1.x;
- var dy = p2.y - p1.y;
-
- return dx * dx + dy * dy;
-};
-
-// from http://en.wikipedia.org/wiki/Bézier_curve#Quadratic_curves
-math.qbezierAt = function( p0, p1, p2, t ){
- return (1 - t) * (1 - t) * p0 + 2 * (1 - t) * t * p1 + t * t * p2;
-};
-
-math.qbezierPtAt = function( p0, p1, p2, t ){
- return {
- x: math.qbezierAt( p0.x, p1.x, p2.x, t ),
- y: math.qbezierAt( p0.y, p1.y, p2.y, t )
- };
-};
-
-math.lineAt = function( p0, p1, t, d ){
- var vec = {
- x: p1.x - p0.x,
- y: p1.y - p0.y
- };
-
- var vecDist = math.dist( p0, p1 );
-
- var normVec = {
- x: vec.x / vecDist,
- y: vec.y / vecDist
- };
-
- t = t == null ? 0 : t;
-
- var d = d != null ? d : t * vecDist;
-
- return {
- x: p0.x + normVec.x * d,
- y: p0.y + normVec.y * d
- };
-};
-
-math.lineAtDist = function( p0, p1, d ){
- return math.lineAt( p0, p1, undefined, d );
-};
-
-// get angle at A via cosine law
-math.triangleAngle = function( A, B, C ){
- var a = math.dist( B, C );
- var b = math.dist( A, C );
- var c = math.dist( A, B );
-
- return Math.acos( (a*a + b*b - c*c)/(2*a*b) );
-};
-
-math.bound = function( min, val, max ){
- return Math.max( min, Math.min( max, val ) );
-};
-
-// makes a full bb (x1, y1, x2, y2, w, h) from implicit params
-math.makeBoundingBox = function( bb ){
- if( bb == null ){
- return {
- x1: Infinity,
- y1: Infinity,
- x2: -Infinity,
- y2: -Infinity,
- w: 0,
- h: 0
- };
- } else if( bb.x1 != null && bb.y1 != null ){
- if( bb.x2 != null && bb.y2 != null && bb.x2 >= bb.x1 && bb.y2 >= bb.y1 ){
- return {
- x1: bb.x1,
- y1: bb.y1,
- x2: bb.x2,
- y2: bb.y2,
- w: bb.x2 - bb.x1,
- h: bb.y2 - bb.y1
- };
- } else if( bb.w != null && bb.h != null && bb.w >= 0 && bb.h >= 0 ){
- return {
- x1: bb.x1,
- y1: bb.y1,
- x2: bb.x1 + bb.w,
- y2: bb.y1 + bb.h,
- w: bb.w,
- h: bb.h
- };
- }
- }
-};
-
-math.updateBoundingBox = function( bb1, bb2 ){
- // update bb1 with bb2 bounds
-
- bb1.x1 = Math.min( bb1.x1, bb2.x1 );
- bb1.x2 = Math.max( bb1.x2, bb2.x2 );
- bb1.w = bb1.x2 - bb1.x1;
-
- bb1.y1 = Math.min( bb1.y1, bb2.y1 );
- bb1.y2 = Math.max( bb1.y2, bb2.y2 );
- bb1.h = bb1.y2 - bb1.y1;
-};
-
-math.expandBoundingBox = function( bb, padding ){
- bb.x1 -= padding;
- bb.x2 += padding;
- bb.y1 -= padding;
- bb.y2 += padding;
- bb.w = bb.x2 - bb.x1;
- bb.h = bb.y2 - bb.y1;
-
- return bb;
-};
-
-math.boundingBoxesIntersect = function( bb1, bb2 ){
- // case: one bb to right of other
- if( bb1.x1 > bb2.x2 ){ return false; }
- if( bb2.x1 > bb1.x2 ){ return false; }
-
- // case: one bb to left of other
- if( bb1.x2 < bb2.x1 ){ return false; }
- if( bb2.x2 < bb1.x1 ){ return false; }
-
- // case: one bb above other
- if( bb1.y2 < bb2.y1 ){ return false; }
- if( bb2.y2 < bb1.y1 ){ return false; }
-
- // case: one bb below other
- if( bb1.y1 > bb2.y2 ){ return false; }
- if( bb2.y1 > bb1.y2 ){ return false; }
-
- // otherwise, must have some overlap
- return true;
-};
-
-math.inBoundingBox = function( bb, x, y ){
- return bb.x1 <= x && x <= bb.x2 && bb.y1 <= y && y <= bb.y2;
-};
-
-math.pointInBoundingBox = function( bb, pt ){
- return this.inBoundingBox( bb, pt.x, pt.y );
-};
-
-math.boundingBoxInBoundingBox = function( bb1, bb2 ){
- return (
- math.inBoundingBox( bb1, bb2.x1, bb2.y1 )
- && math.inBoundingBox( bb1, bb2.x2, bb2.y2 )
- );
-};
-
-math.roundRectangleIntersectLine = function(
- x, y, nodeX, nodeY, width, height, padding ){
-
- var cornerRadius = this.getRoundRectangleRadius( width, height );
-
- var halfWidth = width / 2;
- var halfHeight = height / 2;
-
- // Check intersections with straight line segments
- var straightLineIntersections;
-
- // Top segment, left to right
- {
- var topStartX = nodeX - halfWidth + cornerRadius - padding;
- var topStartY = nodeY - halfHeight - padding;
- var topEndX = nodeX + halfWidth - cornerRadius + padding;
- var topEndY = topStartY;
-
- straightLineIntersections = this.finiteLinesIntersect(
- x, y, nodeX, nodeY, topStartX, topStartY, topEndX, topEndY, false );
-
- if( straightLineIntersections.length > 0 ){
- return straightLineIntersections;
- }
- }
-
- // Right segment, top to bottom
- {
- var rightStartX = nodeX + halfWidth + padding;
- var rightStartY = nodeY - halfHeight + cornerRadius - padding;
- var rightEndX = rightStartX;
- var rightEndY = nodeY + halfHeight - cornerRadius + padding;
-
- straightLineIntersections = this.finiteLinesIntersect(
- x, y, nodeX, nodeY, rightStartX, rightStartY, rightEndX, rightEndY, false );
-
- if( straightLineIntersections.length > 0 ){
- return straightLineIntersections;
- }
- }
-
- // Bottom segment, left to right
- {
- var bottomStartX = nodeX - halfWidth + cornerRadius - padding;
- var bottomStartY = nodeY + halfHeight + padding;
- var bottomEndX = nodeX + halfWidth - cornerRadius + padding;
- var bottomEndY = bottomStartY;
-
- straightLineIntersections = this.finiteLinesIntersect(
- x, y, nodeX, nodeY, bottomStartX, bottomStartY, bottomEndX, bottomEndY, false );
-
- if( straightLineIntersections.length > 0 ){
- return straightLineIntersections;
- }
- }
-
- // Left segment, top to bottom
- {
- var leftStartX = nodeX - halfWidth - padding;
- var leftStartY = nodeY - halfHeight + cornerRadius - padding;
- var leftEndX = leftStartX;
- var leftEndY = nodeY + halfHeight - cornerRadius + padding;
-
- straightLineIntersections = this.finiteLinesIntersect(
- x, y, nodeX, nodeY, leftStartX, leftStartY, leftEndX, leftEndY, false );
-
- if( straightLineIntersections.length > 0 ){
- return straightLineIntersections;
- }
- }
-
- // Check intersections with arc segments
- var arcIntersections;
-
- // Top Left
- {
- var topLeftCenterX = nodeX - halfWidth + cornerRadius;
- var topLeftCenterY = nodeY - halfHeight + cornerRadius;
- arcIntersections = this.intersectLineCircle(
- x, y, nodeX, nodeY,
- topLeftCenterX, topLeftCenterY, cornerRadius + padding );
-
- // Ensure the intersection is on the desired quarter of the circle
- if( arcIntersections.length > 0
- && arcIntersections[0] <= topLeftCenterX
- && arcIntersections[1] <= topLeftCenterY ){
- return [ arcIntersections[0], arcIntersections[1] ];
- }
- }
-
- // Top Right
- {
- var topRightCenterX = nodeX + halfWidth - cornerRadius;
- var topRightCenterY = nodeY - halfHeight + cornerRadius;
- arcIntersections = this.intersectLineCircle(
- x, y, nodeX, nodeY,
- topRightCenterX, topRightCenterY, cornerRadius + padding );
-
- // Ensure the intersection is on the desired quarter of the circle
- if( arcIntersections.length > 0
- && arcIntersections[0] >= topRightCenterX
- && arcIntersections[1] <= topRightCenterY ){
- return [ arcIntersections[0], arcIntersections[1] ];
- }
- }
-
- // Bottom Right
- {
- var bottomRightCenterX = nodeX + halfWidth - cornerRadius;
- var bottomRightCenterY = nodeY + halfHeight - cornerRadius;
- arcIntersections = this.intersectLineCircle(
- x, y, nodeX, nodeY,
- bottomRightCenterX, bottomRightCenterY, cornerRadius + padding );
-
- // Ensure the intersection is on the desired quarter of the circle
- if( arcIntersections.length > 0
- && arcIntersections[0] >= bottomRightCenterX
- && arcIntersections[1] >= bottomRightCenterY ){
- return [ arcIntersections[0], arcIntersections[1] ];
- }
- }
-
- // Bottom Left
- {
- var bottomLeftCenterX = nodeX - halfWidth + cornerRadius;
- var bottomLeftCenterY = nodeY + halfHeight - cornerRadius;
- arcIntersections = this.intersectLineCircle(
- x, y, nodeX, nodeY,
- bottomLeftCenterX, bottomLeftCenterY, cornerRadius + padding );
-
- // Ensure the intersection is on the desired quarter of the circle
- if( arcIntersections.length > 0
- && arcIntersections[0] <= bottomLeftCenterX
- && arcIntersections[1] >= bottomLeftCenterY ){
- return [ arcIntersections[0], arcIntersections[1] ];
- }
- }
-
- return []; // if nothing
-};
-
-math.inLineVicinity = function( x, y, lx1, ly1, lx2, ly2, tolerance ){
- var t = tolerance;
-
- var x1 = Math.min( lx1, lx2 );
- var x2 = Math.max( lx1, lx2 );
- var y1 = Math.min( ly1, ly2 );
- var y2 = Math.max( ly1, ly2 );
-
- return x1 - t <= x && x <= x2 + t
- && y1 - t <= y && y <= y2 + t;
-};
-
-math.inBezierVicinity = function(
- x, y, x1, y1, x2, y2, x3, y3, tolerance ){
-
- var bb = {
- x1: Math.min( x1, x3, x2 ) - tolerance,
- x2: Math.max( x1, x3, x2 ) + tolerance,
- y1: Math.min( y1, y3, y2 ) - tolerance,
- y2: Math.max( y1, y3, y2 ) + tolerance
- };
-
- // if outside the rough bounding box for the bezier, then it can't be a hit
- if( x < bb.x1 || x > bb.x2 || y < bb.y1 || y > bb.y2 ){
- // console.log('bezier out of rough bb')
- return false;
- } else {
- // console.log('do more expensive check');
- return true;
- }
-
-};
-
-math.solveCubic = function( a, b, c, d, result ){
-
- // Solves a cubic function, returns root in form [r1, i1, r2, i2, r3, i3], where
- // r is the real component, i is the imaginary component
-
- // An implementation of the Cardano method from the year 1545
- // http://en.wikipedia.org/wiki/Cubic_function#The_nature_of_the_roots
-
- b /= a;
- c /= a;
- d /= a;
-
- var discriminant, q, r, dum1, s, t, term1, r13;
-
- q = (3.0 * c - (b * b)) / 9.0;
- r = -(27.0 * d) + b * (9.0 * c - 2.0 * (b * b));
- r /= 54.0;
-
- discriminant = q * q * q + r * r;
- result[1] = 0;
- term1 = (b / 3.0);
-
- if( discriminant > 0 ){
- s = r + Math.sqrt( discriminant );
- s = ((s < 0) ? -Math.pow( -s, (1.0 / 3.0) ) : Math.pow( s, (1.0 / 3.0) ));
- t = r - Math.sqrt( discriminant );
- t = ((t < 0) ? -Math.pow( -t, (1.0 / 3.0) ) : Math.pow( t, (1.0 / 3.0) ));
- result[0] = -term1 + s + t;
- term1 += (s + t) / 2.0;
- result[4] = result[2] = -term1;
- term1 = Math.sqrt( 3.0 ) * (-t + s) / 2;
- result[3] = term1;
- result[5] = -term1;
- return;
- }
-
- result[5] = result[3] = 0;
-
- if( discriminant === 0 ){
- r13 = ((r < 0) ? -Math.pow( -r, (1.0 / 3.0) ) : Math.pow( r, (1.0 / 3.0) ));
- result[0] = -term1 + 2.0 * r13;
- result[4] = result[2] = -(r13 + term1);
- return;
- }
-
- q = -q;
- dum1 = q * q * q;
- dum1 = Math.acos( r / Math.sqrt( dum1 ) );
- r13 = 2.0 * Math.sqrt( q );
- result[0] = -term1 + r13 * Math.cos( dum1 / 3.0 );
- result[2] = -term1 + r13 * Math.cos( (dum1 + 2.0 * Math.PI) / 3.0 );
- result[4] = -term1 + r13 * Math.cos( (dum1 + 4.0 * Math.PI) / 3.0 );
-
- return;
-};
-
-math.sqdistToQuadraticBezier = function(
- x, y, x1, y1, x2, y2, x3, y3 ){
-
- // Find minimum distance by using the minimum of the distance
- // function between the given point and the curve
-
- // This gives the coefficients of the resulting cubic equation
- // whose roots tell us where a possible minimum is
- // (Coefficients are divided by 4)
-
- var a = 1.0 * x1 * x1 - 4 * x1 * x2 + 2 * x1 * x3 + 4 * x2 * x2 - 4 * x2 * x3 + x3 * x3
- + y1 * y1 - 4 * y1 * y2 + 2 * y1 * y3 + 4 * y2 * y2 - 4 * y2 * y3 + y3 * y3;
-
- var b = 1.0 * 9 * x1 * x2 - 3 * x1 * x1 - 3 * x1 * x3 - 6 * x2 * x2 + 3 * x2 * x3
- + 9 * y1 * y2 - 3 * y1 * y1 - 3 * y1 * y3 - 6 * y2 * y2 + 3 * y2 * y3;
-
- var c = 1.0 * 3 * x1 * x1 - 6 * x1 * x2 + x1 * x3 - x1 * x + 2 * x2 * x2 + 2 * x2 * x - x3 * x
- + 3 * y1 * y1 - 6 * y1 * y2 + y1 * y3 - y1 * y + 2 * y2 * y2 + 2 * y2 * y - y3 * y;
-
- var d = 1.0 * x1 * x2 - x1 * x1 + x1 * x - x2 * x
- + y1 * y2 - y1 * y1 + y1 * y - y2 * y;
-
- // debug("coefficients: " + a / a + ", " + b / a + ", " + c / a + ", " + d / a);
-
- var roots = [];
-
- // Use the cubic solving algorithm
- this.solveCubic( a, b, c, d, roots );
-
- var zeroThreshold = 0.0000001;
-
- var params = [];
-
- for( var index = 0; index < 6; index += 2 ){
- if( Math.abs( roots[ index + 1] ) < zeroThreshold
- && roots[ index ] >= 0
- && roots[ index ] <= 1.0 ){
- params.push( roots[ index ] );
- }
- }
-
- params.push( 1.0 );
- params.push( 0.0 );
-
- var minDistanceSquared = -1;
- var closestParam;
-
- var curX, curY, distSquared;
- for( var i = 0; i < params.length; i++ ){
- curX = Math.pow( 1.0 - params[ i ], 2.0 ) * x1
- + 2.0 * (1 - params[ i ]) * params[ i ] * x2
- + params[ i ] * params[ i ] * x3;
-
- curY = Math.pow( 1 - params[ i ], 2.0 ) * y1
- + 2 * (1.0 - params[ i ]) * params[ i ] * y2
- + params[ i ] * params[ i ] * y3;
-
- distSquared = Math.pow( curX - x, 2 ) + Math.pow( curY - y, 2 );
- // debug('distance for param ' + params[i] + ": " + Math.sqrt(distSquared));
- if( minDistanceSquared >= 0 ){
- if( distSquared < minDistanceSquared ){
- minDistanceSquared = distSquared;
- closestParam = params[ i ];
- }
- } else {
- minDistanceSquared = distSquared;
- closestParam = params[ i ];
- }
- }
-
- return minDistanceSquared;
-};
-
-math.sqdistToFiniteLine = function( x, y, x1, y1, x2, y2 ){
- var offset = [ x - x1, y - y1 ];
- var line = [ x2 - x1, y2 - y1 ];
-
- var lineSq = line[0] * line[0] + line[1] * line[1];
- var hypSq = offset[0] * offset[0] + offset[1] * offset[1];
-
- var dotProduct = offset[0] * line[0] + offset[1] * line[1];
- var adjSq = dotProduct * dotProduct / lineSq;
-
- if( dotProduct < 0 ){
- return hypSq;
- }
-
- if( adjSq > lineSq ){
- return (x - x2) * (x - x2) + (y - y2) * (y - y2);
- }
-
- return hypSq - adjSq;
-};
-
-math.pointInsidePolygonPoints = function( x, y, points ){
- var x1, y1, x2, y2;
- var y3;
-
- // Intersect with vertical line through (x, y)
- var up = 0;
- var down = 0;
- for( var i = 0; i < points.length / 2; i++ ){
-
- x1 = points[ i * 2];
- y1 = points[ i * 2 + 1];
-
- if( i + 1 < points.length / 2 ){
- x2 = points[ (i + 1) * 2];
- y2 = points[ (i + 1) * 2 + 1];
- } else {
- x2 = points[ (i + 1 - points.length / 2) * 2];
- y2 = points[ (i + 1 - points.length / 2) * 2 + 1];
- }
-
- if( x1 == x && x2 == x ){
- // then ignore
- } else if( (x1 >= x && x >= x2)
- || (x1 <= x && x <= x2) ){
-
- y3 = (x - x1) / (x2 - x1) * (y2 - y1) + y1;
-
- if( y3 > y ){
- up++;
- }
-
- if( y3 < y ){
- down++;
- }
-
- } else {
- continue;
- }
-
- }
-
- if( up % 2 === 0 ){
- return false;
- } else {
- return true;
- }
-};
-
-math.pointInsidePolygon = function(
- x, y, basePoints, centerX, centerY, width, height, direction, padding ){
-
- //var direction = arguments[6];
- var transformedPoints = new Array( basePoints.length );
-
- // Gives negative angle
- var angle;
-
- if( direction[0] != null ){
- angle = Math.atan( direction[1] / direction[0] );
-
- if( direction[0] < 0 ){
- angle = angle + Math.PI / 2;
- } else {
- angle = -angle - Math.PI / 2;
- }
- } else {
- angle = direction;
- }
-
- var cos = Math.cos( -angle );
- var sin = Math.sin( -angle );
-
- // console.log("base: " + basePoints);
- for( var i = 0; i < transformedPoints.length / 2; i++ ){
- transformedPoints[ i * 2] =
- width / 2 * (basePoints[ i * 2] * cos
- - basePoints[ i * 2 + 1] * sin);
-
- transformedPoints[ i * 2 + 1] =
- height / 2 * (basePoints[ i * 2 + 1] * cos
- + basePoints[ i * 2] * sin);
-
- transformedPoints[ i * 2] += centerX;
- transformedPoints[ i * 2 + 1] += centerY;
- }
-
- var points;
-
- if( padding > 0 ){
- var expandedLineSet = this.expandPolygon(
- transformedPoints,
- -padding );
-
- points = this.joinLines( expandedLineSet );
- } else {
- points = transformedPoints;
- }
-
- return math.pointInsidePolygonPoints( x, y, points );
-};
-
-math.joinLines = function( lineSet ){
-
- var vertices = new Array( lineSet.length / 2 );
-
- var currentLineStartX, currentLineStartY, currentLineEndX, currentLineEndY;
- var nextLineStartX, nextLineStartY, nextLineEndX, nextLineEndY;
-
- for( var i = 0; i < lineSet.length / 4; i++ ){
- currentLineStartX = lineSet[ i * 4];
- currentLineStartY = lineSet[ i * 4 + 1];
- currentLineEndX = lineSet[ i * 4 + 2];
- currentLineEndY = lineSet[ i * 4 + 3];
-
- if( i < lineSet.length / 4 - 1 ){
- nextLineStartX = lineSet[ (i + 1) * 4];
- nextLineStartY = lineSet[ (i + 1) * 4 + 1];
- nextLineEndX = lineSet[ (i + 1) * 4 + 2];
- nextLineEndY = lineSet[ (i + 1) * 4 + 3];
- } else {
- nextLineStartX = lineSet[0];
- nextLineStartY = lineSet[1];
- nextLineEndX = lineSet[2];
- nextLineEndY = lineSet[3];
- }
-
- var intersection = this.finiteLinesIntersect(
- currentLineStartX, currentLineStartY,
- currentLineEndX, currentLineEndY,
- nextLineStartX, nextLineStartY,
- nextLineEndX, nextLineEndY,
- true );
-
- vertices[ i * 2] = intersection[0];
- vertices[ i * 2 + 1] = intersection[1];
- }
-
- return vertices;
-};
-
-math.expandPolygon = function( points, pad ){
-
- var expandedLineSet = new Array( points.length * 2 );
-
- var currentPointX, currentPointY, nextPointX, nextPointY;
-
- for( var i = 0; i < points.length / 2; i++ ){
- currentPointX = points[ i * 2];
- currentPointY = points[ i * 2 + 1];
-
- if( i < points.length / 2 - 1 ){
- nextPointX = points[ (i + 1) * 2];
- nextPointY = points[ (i + 1) * 2 + 1];
- } else {
- nextPointX = points[0];
- nextPointY = points[1];
- }
-
- // Current line: [currentPointX, currentPointY] to [nextPointX, nextPointY]
-
- // Assume CCW polygon winding
-
- var offsetX = (nextPointY - currentPointY);
- var offsetY = -(nextPointX - currentPointX);
-
- // Normalize
- var offsetLength = Math.sqrt( offsetX * offsetX + offsetY * offsetY );
- var normalizedOffsetX = offsetX / offsetLength;
- var normalizedOffsetY = offsetY / offsetLength;
-
- expandedLineSet[ i * 4] = currentPointX + normalizedOffsetX * pad;
- expandedLineSet[ i * 4 + 1] = currentPointY + normalizedOffsetY * pad;
- expandedLineSet[ i * 4 + 2] = nextPointX + normalizedOffsetX * pad;
- expandedLineSet[ i * 4 + 3] = nextPointY + normalizedOffsetY * pad;
- }
-
- return expandedLineSet;
-};
-
-math.intersectLineEllipse = function(
- x, y, centerX, centerY, ellipseWradius, ellipseHradius ){
-
- var dispX = centerX - x;
- var dispY = centerY - y;
-
- dispX /= ellipseWradius;
- dispY /= ellipseHradius;
-
- var len = Math.sqrt( dispX * dispX + dispY * dispY );
-
- var newLength = len - 1;
-
- if( newLength < 0 ){
- return [];
- }
-
- var lenProportion = newLength / len;
-
- return [ (centerX - x) * lenProportion + x, (centerY - y) * lenProportion + y ];
-};
-
-// Returns intersections of increasing distance from line's start point
-math.intersectLineCircle = function(
- x1, y1, x2, y2, centerX, centerY, radius ){
-
- // Calculate d, direction vector of line
- var d = [ x2 - x1, y2 - y1 ]; // Direction vector of line
- var c = [ centerX, centerY ]; // Center of circle
- var f = [ x1 - centerX, y1 - centerY ];
-
- var a = d[0] * d[0] + d[1] * d[1];
- var b = 2 * (f[0] * d[0] + f[1] * d[1]);
- var c = (f[0] * f[0] + f[1] * f[1]) - radius * radius ;
-
- var discriminant = b * b - 4 * a * c;
-
- if( discriminant < 0 ){
- return [];
- }
-
- var t1 = (-b + Math.sqrt( discriminant )) / (2 * a);
- var t2 = (-b - Math.sqrt( discriminant )) / (2 * a);
-
- var tMin = Math.min( t1, t2 );
- var tMax = Math.max( t1, t2 );
- var inRangeParams = [];
-
- if( tMin >= 0 && tMin <= 1 ){
- inRangeParams.push( tMin );
- }
-
- if( tMax >= 0 && tMax <= 1 ){
- inRangeParams.push( tMax );
- }
-
- if( inRangeParams.length === 0 ){
- return [];
- }
-
- var nearIntersectionX = inRangeParams[0] * d[0] + x1;
- var nearIntersectionY = inRangeParams[0] * d[1] + y1;
-
- if( inRangeParams.length > 1 ){
-
- if( inRangeParams[0] == inRangeParams[1] ){
- return [ nearIntersectionX, nearIntersectionY ];
- } else {
-
- var farIntersectionX = inRangeParams[1] * d[0] + x1;
- var farIntersectionY = inRangeParams[1] * d[1] + y1;
-
- return [ nearIntersectionX, nearIntersectionY, farIntersectionX, farIntersectionY ];
- }
-
- } else {
- return [ nearIntersectionX, nearIntersectionY ];
- }
-
-};
-
-math.findCircleNearPoint = function( centerX, centerY,
- radius, farX, farY ){
-
- var displacementX = farX - centerX;
- var displacementY = farY - centerY;
- var distance = Math.sqrt( displacementX * displacementX
- + displacementY * displacementY );
-
- var unitDisplacementX = displacementX / distance;
- var unitDisplacementY = displacementY / distance;
-
- return [ centerX + unitDisplacementX * radius,
- centerY + unitDisplacementY * radius ];
-};
-
-math.findMaxSqDistanceToOrigin = function( points ){
- var maxSqDistance = 0.000001;
- var sqDistance;
-
- for( var i = 0; i < points.length / 2; i++ ){
-
- sqDistance = points[ i * 2] * points[ i * 2]
- + points[ i * 2 + 1] * points[ i * 2 + 1];
-
- if( sqDistance > maxSqDistance ){
- maxSqDistance = sqDistance;
- }
- }
-
- return maxSqDistance;
-};
-
-math.midOfThree = function( a, b, c ){
- if( (b <= a && a <= c) || (c <= a && a <= b) ){
- return a;
- } else if( (a <= b && b <= c) || (c <= b && b <= a) ){
- return b;
- } else {
- return c;
- }
-};
-
-math.finiteLinesIntersect = function( x1, y1, x2, y2, x3, y3, x4, y4, infiniteLines ){
-
- var dx13 = x1 - x3;
- var dx21 = x2 - x1;
- var dx43 = x4 - x3;
-
- var dy13 = y1 - y3;
- var dy21 = y2 - y1;
- var dy43 = y4 - y3;
-
- var ua_t = dx43 * dy13 - dy43 * dx13;
- var ub_t = dx21 * dy13 - dy21 * dx13;
- var u_b = dy43 * dx21 - dx43 * dy21;
-
- if( u_b !== 0 ){
- var ua = ua_t / u_b;
- var ub = ub_t / u_b;
-
- var flptThreshold = 0.001;
- var min = 0 - flptThreshold;
- var max = 1 + flptThreshold;
-
- if( min <= ua && ua <= max && min <= ub && ub <= max ){
- return [ x1 + ua * dx21, y1 + ua * dy21 ];
-
- } else {
- if( !infiniteLines ){
- return [];
- } else {
- return [ x1 + ua * dx21, y1 + ua * dy21 ];
- }
- }
- } else {
- if( ua_t === 0 || ub_t === 0 ){
-
- // Parallel, coincident lines. Check if overlap
-
- // Check endpoint of second line
- if( this.midOfThree( x1, x2, x4 ) === x4 ){
- return [ x4, y4 ];
- }
-
- // Check start point of second line
- if( this.midOfThree( x1, x2, x3 ) === x3 ){
- return [ x3, y3 ];
- }
-
- // Endpoint of first line
- if( this.midOfThree( x3, x4, x2 ) === x2 ){
- return [ x2, y2 ];
- }
-
- return [];
- } else {
-
- // Parallel, non-coincident
- return [];
- }
- }
-};
-
-math.polygonIntersectLine = function(
- x, y, basePoints, centerX, centerY, width, height, padding ){
-
- var intersections = [];
- var intersection;
-
- var transformedPoints = new Array( basePoints.length );
-
- for( var i = 0; i < transformedPoints.length / 2; i++ ){
- transformedPoints[ i * 2] = basePoints[ i * 2] * width + centerX;
- transformedPoints[ i * 2 + 1] = basePoints[ i * 2 + 1] * height + centerY;
- }
-
- var points;
-
- if( padding > 0 ){
- var expandedLineSet = math.expandPolygon(
- transformedPoints,
- -padding );
-
- points = math.joinLines( expandedLineSet );
- } else {
- points = transformedPoints;
- }
- // var points = transformedPoints;
-
- var currentX, currentY, nextX, nextY;
-
- for( var i = 0; i < points.length / 2; i++ ){
-
- currentX = points[ i * 2];
- currentY = points[ i * 2 + 1];
-
- if( i < points.length / 2 - 1 ){
- nextX = points[ (i + 1) * 2];
- nextY = points[ (i + 1) * 2 + 1];
- } else {
- nextX = points[0];
- nextY = points[1];
- }
-
- intersection = this.finiteLinesIntersect(
- x, y, centerX, centerY,
- currentX, currentY,
- nextX, nextY );
-
- if( intersection.length !== 0 ){
- intersections.push( intersection[0], intersection[1] );
- }
- }
-
- return intersections;
-};
-
-math.shortenIntersection = function(
- intersection, offset, amount ){
-
- var disp = [ intersection[0] - offset[0], intersection[1] - offset[1] ];
-
- var length = Math.sqrt( disp[0] * disp[0] + disp[1] * disp[1] );
-
- var lenRatio = (length - amount) / length;
-
- if( lenRatio < 0 ){
- lenRatio = 0.00001;
- }
-
- return [ offset[0] + lenRatio * disp[0], offset[1] + lenRatio * disp[1] ];
-};
-
-math.generateUnitNgonPointsFitToSquare = function( sides, rotationRadians ){
- var points = math.generateUnitNgonPoints( sides, rotationRadians );
- points = math.fitPolygonToSquare( points );
-
- return points;
-};
-
-math.fitPolygonToSquare = function( points ){
- var x, y;
- var sides = points.length / 2;
- var minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
-
- for( var i = 0; i < sides; i++ ){
- x = points[2 * i ];
- y = points[2 * i + 1];
-
- minX = Math.min( minX, x );
- maxX = Math.max( maxX, x );
- minY = Math.min( minY, y );
- maxY = Math.max( maxY, y );
- }
-
- // stretch factors
- var sx = 2 / (maxX - minX);
- var sy = 2 / (maxY - minY);
-
- for( var i = 0; i < sides; i++ ){
- x = points[2 * i ] = points[2 * i ] * sx;
- y = points[2 * i + 1] = points[2 * i + 1] * sy;
-
- minX = Math.min( minX, x );
- maxX = Math.max( maxX, x );
- minY = Math.min( minY, y );
- maxY = Math.max( maxY, y );
- }
-
- if( minY < -1 ){
- for( var i = 0; i < sides; i++ ){
- y = points[2 * i + 1] = points[2 * i + 1] + (-1 - minY);
- }
- }
-
- return points;
-};
-
-math.generateUnitNgonPoints = function( sides, rotationRadians ){
-
- var increment = 1.0 / sides * 2 * Math.PI;
- var startAngle = sides % 2 === 0 ?
- Math.PI / 2.0 + increment / 2.0 : Math.PI / 2.0;
- // console.log(nodeShapes['square']);
- startAngle += rotationRadians;
-
- var points = new Array( sides * 2 );
-
- var currentAngle, x, y;
- for( var i = 0; i < sides; i++ ){
- currentAngle = i * increment + startAngle;
-
- x = points[2 * i ] = Math.cos( currentAngle );// * (1 + i/2);
- y = points[2 * i + 1] = Math.sin( -currentAngle );// * (1 + i/2);
- }
-
- return points;
-};
-
-math.getRoundRectangleRadius = function( width, height ){
-
- // Set the default radius, unless half of width or height is smaller than default
- return Math.min( width / 4, height / 4, 8 );
-};
-
-module.exports = math;
-
-},{}],86:[function(_dereq_,module,exports){
-/*!
-Embeddable Minimum Strictly-Compliant Promises/A+ 1.1.1 Thenable
-Copyright (c) 2013-2014 Ralf S. Engelschall (http://engelschall.com)
-Licensed under The MIT License (http://opensource.org/licenses/MIT)
-*/
-
-'use strict';
-
-/* promise states [Promises/A+ 2.1] */
-var STATE_PENDING = 0; /* [Promises/A+ 2.1.1] */
-var STATE_FULFILLED = 1; /* [Promises/A+ 2.1.2] */
-var STATE_REJECTED = 2; /* [Promises/A+ 2.1.3] */
-
-/* promise object constructor */
-var api = function( executor ){
- /* optionally support non-constructor/plain-function call */
- if( !(this instanceof api) )
- return new api( executor );
-
- /* initialize object */
- this.id = 'Thenable/1.0.7';
- this.state = STATE_PENDING; /* initial state */
- this.fulfillValue = undefined; /* initial value */ /* [Promises/A+ 1.3, 2.1.2.2] */
- this.rejectReason = undefined; /* initial reason */ /* [Promises/A+ 1.5, 2.1.3.2] */
- this.onFulfilled = []; /* initial handlers */
- this.onRejected = []; /* initial handlers */
-
- /* provide optional information-hiding proxy */
- this.proxy = {
- then: this.then.bind( this )
- };
-
- /* support optional executor function */
- if( typeof executor === 'function' )
- executor.call( this, this.fulfill.bind( this ), this.reject.bind( this ) );
-};
-
-/* promise API methods */
-api.prototype = {
- /* promise resolving methods */
- fulfill: function( value ){ return deliver( this, STATE_FULFILLED, 'fulfillValue', value ); },
- reject: function( value ){ return deliver( this, STATE_REJECTED, 'rejectReason', value ); },
-
- /* "The then Method" [Promises/A+ 1.1, 1.2, 2.2] */
- then: function( onFulfilled, onRejected ){
- var curr = this;
- var next = new api(); /* [Promises/A+ 2.2.7] */
- curr.onFulfilled.push(
- resolver( onFulfilled, next, 'fulfill' ) ); /* [Promises/A+ 2.2.2/2.2.6] */
- curr.onRejected.push(
- resolver( onRejected, next, 'reject' ) ); /* [Promises/A+ 2.2.3/2.2.6] */
- execute( curr );
- return next.proxy; /* [Promises/A+ 2.2.7, 3.3] */
- }
-};
-
-/* deliver an action */
-var deliver = function( curr, state, name, value ){
- if( curr.state === STATE_PENDING ){
- curr.state = state; /* [Promises/A+ 2.1.2.1, 2.1.3.1] */
- curr[ name ] = value; /* [Promises/A+ 2.1.2.2, 2.1.3.2] */
- execute( curr );
- }
- return curr;
-};
-
-/* execute all handlers */
-var execute = function( curr ){
- if( curr.state === STATE_FULFILLED )
- execute_handlers( curr, 'onFulfilled', curr.fulfillValue );
- else if( curr.state === STATE_REJECTED )
- execute_handlers( curr, 'onRejected', curr.rejectReason );
-};
-
-/* execute particular set of handlers */
-var execute_handlers = function( curr, name, value ){
- /* global setImmediate: true */
- /* global setTimeout: true */
-
- /* short-circuit processing */
- if( curr[ name ].length === 0 )
- return;
-
- /* iterate over all handlers, exactly once */
- var handlers = curr[ name ];
- curr[ name ] = []; /* [Promises/A+ 2.2.2.3, 2.2.3.3] */
- var func = function(){
- for( var i = 0; i < handlers.length; i++ )
- handlers[ i ]( value ); /* [Promises/A+ 2.2.5] */
- };
-
- /* execute procedure asynchronously */ /* [Promises/A+ 2.2.4, 3.1] */
- if( typeof setImmediate === 'function' )
- setImmediate( func );
- else
- setTimeout( func, 0 );
-};
-
-/* generate a resolver function */
-var resolver = function( cb, next, method ){
- return function( value ){
- if( typeof cb !== 'function' ) /* [Promises/A+ 2.2.1, 2.2.7.3, 2.2.7.4] */
- next[ method ].call( next, value ); /* [Promises/A+ 2.2.7.3, 2.2.7.4] */
- else {
- var result;
- try { result = cb( value ); } /* [Promises/A+ 2.2.2.1, 2.2.3.1, 2.2.5, 3.2] */
- catch( e ){
- next.reject( e ); /* [Promises/A+ 2.2.7.2] */
- return;
- }
- resolve( next, result ); /* [Promises/A+ 2.2.7.1] */
- }
- };
-};
-
-/* "Promise Resolution Procedure" */ /* [Promises/A+ 2.3] */
-var resolve = function( promise, x ){
- /* sanity check arguments */ /* [Promises/A+ 2.3.1] */
- if( promise === x || promise.proxy === x ){
- promise.reject( new TypeError( 'cannot resolve promise with itself' ) );
- return;
- }
-
- /* surgically check for a "then" method
- (mainly to just call the "getter" of "then" only once) */
- var then;
- if( (typeof x === 'object' && x !== null) || typeof x === 'function' ){
- try { then = x.then; } /* [Promises/A+ 2.3.3.1, 3.5] */
- catch( e ){
- promise.reject( e ); /* [Promises/A+ 2.3.3.2] */
- return;
- }
- }
-
- /* handle own Thenables [Promises/A+ 2.3.2]
- and similar "thenables" [Promises/A+ 2.3.3] */
- if( typeof then === 'function' ){
- var resolved = false;
- try {
- /* call retrieved "then" method */ /* [Promises/A+ 2.3.3.3] */
- then.call( x,
- /* resolvePromise */ /* [Promises/A+ 2.3.3.3.1] */
- function( y ){
- if( resolved ) return; resolved = true; /* [Promises/A+ 2.3.3.3.3] */
- if( y === x ) /* [Promises/A+ 3.6] */
- promise.reject( new TypeError( 'circular thenable chain' ) );
- else
- resolve( promise, y );
- },
-
- /* rejectPromise */ /* [Promises/A+ 2.3.3.3.2] */
- function( r ){
- if( resolved ) return; resolved = true; /* [Promises/A+ 2.3.3.3.3] */
- promise.reject( r );
- }
- );
- }
- catch( e ){
- if( !resolved ) /* [Promises/A+ 2.3.3.3.3] */
- promise.reject( e ); /* [Promises/A+ 2.3.3.3.4] */
- }
- return;
- }
-
- /* handle other values */
- promise.fulfill( x ); /* [Promises/A+ 2.3.4, 2.3.3.4] */
-};
-
-// so we always have Promise.all()
-api.all = function( ps ){
- return new api(function( resolveAll, rejectAll ){
- var vals = new Array( ps.length );
- var doneCount = 0;
-
- var fulfill = function( i, val ){
- vals[ i ] = val;
- doneCount++;
-
- if( doneCount === ps.length ){
- resolveAll( vals );
- }
- };
-
- for( var i = 0; i < ps.length; i++ ){
- (function( i ){
- var p = ps[i];
- var isPromise = p != null && p.then != null;
-
- if( isPromise ){
- p.then( function( val ){
- fulfill( i, val );
- }, function( err ){
- rejectAll( err );
- } );
- } else {
- var val = p;
- fulfill( i, val );
- }
- })( i );
- }
-
- } );
-};
-
-api.resolve = function( val ){
- return new api(function( resolve, reject ){ resolve( val ); });
-};
-
-api.reject = function( val ){
- return new api(function( resolve, reject ){ reject( val ); });
-};
-
-module.exports = typeof Promise !== 'undefined' ? Promise : api; // eslint-disable-line no-undef
-
-},{}],87:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( './is' );
-var util = _dereq_( './util' );
-
-var Selector = function( selector ){
-
- if( !(this instanceof Selector) ){
- return new Selector( selector );
- }
-
- var self = this;
-
- self._private = {
- selectorText: null,
- invalid: true
- };
-
- // storage for parsed queries
- var newQuery = function(){
- return {
- classes: [],
- colonSelectors: [],
- data: [],
- group: null,
- ids: [],
- meta: [],
-
- // fake selectors
- collection: null, // a collection to match against
- filter: null, // filter function
-
- // these are defined in the upward direction rather than down (e.g. child)
- // because we need to go up in Selector.filter()
- parent: null, // parent query obj
- ancestor: null, // ancestor query obj
- subject: null, // defines subject in compound query (subject query obj; points to self if subject)
-
- // use these only when subject has been defined
- child: null,
- descendant: null
- };
- };
-
- if( !selector || ( is.string( selector ) && selector.match( /^\s*$/ ) ) ){
-
- self.length = 0;
-
- } else if( selector === '*' || selector === 'edge' || selector === 'node' ){
-
- // make single, group-only selectors cheap to make and cheap to filter
-
- self[0] = newQuery();
- self[0].group = selector === '*' ? selector : selector + 's';
- self[0].groupOnly = true;
- self._private.invalid = false;
- self._private.selectorText = selector;
- self.length = 1;
-
- } else if( is.elementOrCollection( selector ) ){
-
- var collection = selector.collection();
-
- self[0] = newQuery();
- self[0].collection = collection;
- self.length = 1;
-
- } else if( is.fn( selector ) ){
-
- self[0] = newQuery();
- self[0].filter = selector;
- self.length = 1;
-
- } else if( is.string( selector ) ){
-
- // the current subject in the query
- var currentSubject = null;
-
- // tokens in the query language
- var tokens = {
- metaChar: '[\\!\\"\\#\\$\\%\\&\\\'\\(\\)\\*\\+\\,\\.\\/\\:\\;\\<\\=\\>\\?\\@\\[\\]\\^\\`\\{\\|\\}\\~]', // chars we need to escape in var names, etc
- comparatorOp: '=|\\!=|>|>=|<|<=|\\$=|\\^=|\\*=', // binary comparison op (used in data selectors)
- boolOp: '\\?|\\!|\\^', // boolean (unary) operators (used in data selectors)
- string: '"(?:\\\\"|[^"])+"' + '|' + "'(?:\\\\'|[^'])+'", // string literals (used in data selectors) -- doublequotes | singlequotes
- number: util.regex.number, // number literal (used in data selectors) --- e.g. 0.1234, 1234, 12e123
- meta: 'degree|indegree|outdegree', // allowed metadata fields (i.e. allowed functions to use from Collection)
- separator: '\\s*,\\s*', // queries are separated by commas, e.g. edge[foo = 'bar'], node.someClass
- descendant: '\\s+',
- child: '\\s+>\\s+',
- subject: '\\$'
- };
- tokens.variable = '(?:[\\w-]|(?:\\\\' + tokens.metaChar + '))+'; // a variable name
- tokens.value = tokens.string + '|' + tokens.number; // a value literal, either a string or number
- tokens.className = tokens.variable; // a class name (follows variable conventions)
- tokens.id = tokens.variable; // an element id (follows variable conventions)
-
- // when a token like a variable has escaped meta characters, we need to clean the backslashes out
- // so that values get compared properly in Selector.filter()
- var cleanMetaChars = function( str ){
- return str.replace( new RegExp( '\\\\(' + tokens.metaChar + ')', 'g' ), function( match, $1, offset, original ){
- return $1;
- } );
- };
-
- // add @ variants to comparatorOp
- var ops = tokens.comparatorOp.split( '|' );
- for( var i = 0; i < ops.length; i++ ){
- var op = ops[ i ];
- tokens.comparatorOp += '|@' + op;
- }
-
- // add ! variants to comparatorOp
- var ops = tokens.comparatorOp.split( '|' );
- for( var i = 0; i < ops.length; i++ ){
- var op = ops[ i ];
-
- if( op.indexOf( '!' ) >= 0 ){ continue; } // skip ops that explicitly contain !
- if( op === '=' ){ continue; } // skip = b/c != is explicitly defined
-
- tokens.comparatorOp += '|\\!' + op;
- }
-
- // NOTE: add new expression syntax here to have it recognised by the parser;
- // - a query contains all adjacent (i.e. no separator in between) expressions;
- // - the current query is stored in self[i] --- you can use the reference to `this` in the populate function;
- // - you need to check the query objects in Selector.filter() for it actually filter properly, but that's pretty straight forward
- // - when you add something here, also add to Selector.toString()
- var exprs = [
- {
- name: 'group',
- query: true,
- regex: '(node|edge|\\*)',
- populate: function( group ){
- this.group = group === '*' ? group : group + 's';
- }
- },
-
- {
- name: 'state',
- query: true,
- // NB: if one colon selector is a substring of another from its start, place the longer one first
- // e.g. :foobar|:foo
- regex: '(:selected|:unselected|:locked|:unlocked|:visible|:hidden|:transparent|:grabbed|:free|:removed|:inside|:grabbable|:ungrabbable|:animated|:unanimated|:selectable|:unselectable|:orphan|:nonorphan|:parent|:child|:loop|:simple|:active|:inactive|:touch|:backgrounding|:nonbackgrounding)',
- populate: function( state ){
- this.colonSelectors.push( state );
- }
- },
-
- {
- name: 'id',
- query: true,
- regex: '\\#(' + tokens.id + ')',
- populate: function( id ){
- this.ids.push( cleanMetaChars( id ) );
- }
- },
-
- {
- name: 'className',
- query: true,
- regex: '\\.(' + tokens.className + ')',
- populate: function( className ){
- this.classes.push( cleanMetaChars( className ) );
- }
- },
-
- {
- name: 'dataExists',
- query: true,
- regex: '\\[\\s*(' + tokens.variable + ')\\s*\\]',
- populate: function( variable ){
- this.data.push( {
- field: cleanMetaChars( variable )
- } );
- }
- },
-
- {
- name: 'dataCompare',
- query: true,
- regex: '\\[\\s*(' + tokens.variable + ')\\s*(' + tokens.comparatorOp + ')\\s*(' + tokens.value + ')\\s*\\]',
- populate: function( variable, comparatorOp, value ){
- var valueIsString = new RegExp( '^' + tokens.string + '$' ).exec( value ) != null;
-
- if( valueIsString ){
- value = value.substring( 1, value.length - 1 );
- } else {
- value = parseFloat( value );
- }
-
- this.data.push( {
- field: cleanMetaChars( variable ),
- operator: comparatorOp,
- value: value
- } );
- }
- },
-
- {
- name: 'dataBool',
- query: true,
- regex: '\\[\\s*(' + tokens.boolOp + ')\\s*(' + tokens.variable + ')\\s*\\]',
- populate: function( boolOp, variable ){
- this.data.push( {
- field: cleanMetaChars( variable ),
- operator: boolOp
- } );
- }
- },
-
- {
- name: 'metaCompare',
- query: true,
- regex: '\\[\\[\\s*(' + tokens.meta + ')\\s*(' + tokens.comparatorOp + ')\\s*(' + tokens.number + ')\\s*\\]\\]',
- populate: function( meta, comparatorOp, number ){
- this.meta.push( {
- field: cleanMetaChars( meta ),
- operator: comparatorOp,
- value: parseFloat( number )
- } );
- }
- },
-
- {
- name: 'nextQuery',
- separator: true,
- regex: tokens.separator,
- populate: function(){
- // go on to next query
- self[ ++i ] = newQuery();
- currentSubject = null;
- }
- },
-
- {
- name: 'child',
- separator: true,
- regex: tokens.child,
- populate: function(){
- // this query is the parent of the following query
- var childQuery = newQuery();
- childQuery.parent = this;
- childQuery.subject = currentSubject;
-
- // we're now populating the child query with expressions that follow
- self[ i ] = childQuery;
- }
- },
-
- {
- name: 'descendant',
- separator: true,
- regex: tokens.descendant,
- populate: function(){
- // this query is the ancestor of the following query
- var descendantQuery = newQuery();
- descendantQuery.ancestor = this;
- descendantQuery.subject = currentSubject;
-
- // we're now populating the descendant query with expressions that follow
- self[ i ] = descendantQuery;
- }
- },
-
- {
- name: 'subject',
- modifier: true,
- regex: tokens.subject,
- populate: function(){
- if( currentSubject != null && this.subject != this ){
- util.error( 'Redefinition of subject in selector `' + selector + '`' );
- return false;
- }
-
- currentSubject = this;
- this.subject = this;
- }
-
- }
- ];
-
- self._private.selectorText = selector;
- var remaining = selector;
- var i = 0;
-
- // of all the expressions, find the first match in the remaining text
- var consumeExpr = function( expectation ){
- var expr;
- var match;
- var name;
-
- for( var j = 0; j < exprs.length; j++ ){
- var e = exprs[ j ];
- var n = e.name;
-
- // ignore this expression if it doesn't meet the expectation function
- if( is.fn( expectation ) && !expectation( n, e ) ){ continue; }
-
- var m = remaining.match( new RegExp( '^' + e.regex ) );
-
- if( m != null ){
- match = m;
- expr = e;
- name = n;
-
- var consumed = m[0];
- remaining = remaining.substring( consumed.length );
-
- break; // we've consumed one expr, so we can return now
- }
- }
-
- return {
- expr: expr,
- match: match,
- name: name
- };
- };
-
- // consume all leading whitespace
- var consumeWhitespace = function(){
- var match = remaining.match( /^\s+/ );
-
- if( match ){
- var consumed = match[0];
- remaining = remaining.substring( consumed.length );
- }
- };
-
- self[0] = newQuery(); // get started
-
- consumeWhitespace(); // get rid of leading whitespace
- for( ;; ){
- var check = consumeExpr();
-
- if( check.expr == null ){
- util.error( 'The selector `' + selector + '`is invalid' );
- return;
- } else {
- var args = [];
- for( var j = 1; j < check.match.length; j++ ){
- args.push( check.match[ j ] );
- }
-
- // let the token populate the selector object (i.e. in self[i])
- var ret = check.expr.populate.apply( self[ i ], args );
-
- if( ret === false ){ return; } // exit if population failed
- }
-
- // we're done when there's nothing left to parse
- if( remaining.match( /^\s*$/ ) ){
- break;
- }
- }
-
- self.length = i + 1;
-
- // adjust references for subject
- for( var j = 0; j < self.length; j++ ){
- var query = self[ j ];
-
- if( query.subject != null ){
- // go up the tree until we reach the subject
- for( ;; ){
- if( query.subject == query ){ break; } // done if subject is self
-
- if( query.parent != null ){ // swap parent/child reference
- var parent = query.parent;
- var child = query;
-
- child.parent = null;
- parent.child = child;
-
- query = parent; // go up the tree
- } else if( query.ancestor != null ){ // swap ancestor/descendant
- var ancestor = query.ancestor;
- var descendant = query;
-
- descendant.ancestor = null;
- ancestor.descendant = descendant;
-
- query = ancestor; // go up the tree
- } else {
- util.error( 'When adjusting references for the selector `' + query + '`, neither parent nor ancestor was found' );
- break;
- }
- } // for
-
- self[ j ] = query.subject; // subject should be the root query
- } // if
- } // for
-
- } else {
- util.error( 'A selector must be created from a string; found ' + selector );
- return;
- }
-
- self._private.invalid = false;
-
-};
-
-var selfn = Selector.prototype;
-
-selfn.size = function(){
- return this.length;
-};
-
-selfn.eq = function( i ){
- return this[ i ];
-};
-
-var queryMatches = function( query, ele ){
- var ele_p = ele._private;
-
- // make single group-only selectors really cheap to check since they're the most common ones
- if( query.groupOnly ){
- return query.group === '*' || query.group === ele_p.group;
- }
-
- // check group
- if( query.group != null && query.group != '*' && query.group != ele_p.group ){
- return false;
- }
-
- var cy = ele.cy();
-
- // check colon selectors
- var allColonSelectorsMatch = true;
- for( var k = 0; k < query.colonSelectors.length; k++ ){
- var sel = query.colonSelectors[ k ];
-
- switch( sel ){
- case ':selected':
- allColonSelectorsMatch = ele.selected();
- break;
- case ':unselected':
- allColonSelectorsMatch = !ele.selected();
- break;
- case ':selectable':
- allColonSelectorsMatch = ele.selectable();
- break;
- case ':unselectable':
- allColonSelectorsMatch = !ele.selectable();
- break;
- case ':locked':
- allColonSelectorsMatch = ele.locked();
- break;
- case ':unlocked':
- allColonSelectorsMatch = !ele.locked();
- break;
- case ':visible':
- allColonSelectorsMatch = ele.visible();
- break;
- case ':hidden':
- allColonSelectorsMatch = !ele.visible();
- break;
- case ':transparent':
- allColonSelectorsMatch = ele.transparent();
- break;
- case ':grabbed':
- allColonSelectorsMatch = ele.grabbed();
- break;
- case ':free':
- allColonSelectorsMatch = !ele.grabbed();
- break;
- case ':removed':
- allColonSelectorsMatch = ele.removed();
- break;
- case ':inside':
- allColonSelectorsMatch = !ele.removed();
- break;
- case ':grabbable':
- allColonSelectorsMatch = ele.grabbable();
- break;
- case ':ungrabbable':
- allColonSelectorsMatch = !ele.grabbable();
- break;
- case ':animated':
- allColonSelectorsMatch = ele.animated();
- break;
- case ':unanimated':
- allColonSelectorsMatch = !ele.animated();
- break;
- case ':parent':
- allColonSelectorsMatch = ele.isNode() && ele.children().nonempty();
- break;
- case ':child':
- case ':nonorphan':
- allColonSelectorsMatch = ele.isNode() && ele.parent().nonempty();
- break;
- case ':orphan':
- allColonSelectorsMatch = ele.isNode() && ele.parent().empty();
- break;
- case ':loop':
- allColonSelectorsMatch = ele.isEdge() && ele.data( 'source' ) === ele.data( 'target' );
- break;
- case ':simple':
- allColonSelectorsMatch = ele.isEdge() && ele.data( 'source' ) !== ele.data( 'target' );
- break;
- case ':active':
- allColonSelectorsMatch = ele.active();
- break;
- case ':inactive':
- allColonSelectorsMatch = !ele.active();
- break;
- case ':touch':
- allColonSelectorsMatch = is.touch();
- break;
- case ':backgrounding':
- allColonSelectorsMatch = ele.backgrounding();
- break;
- case ':nonbackgrounding':
- allColonSelectorsMatch = !ele.backgrounding();
- break;
- }
-
- if( !allColonSelectorsMatch ) break;
- }
- if( !allColonSelectorsMatch ) return false;
-
- // check id
- var allIdsMatch = true;
- for( var k = 0; k < query.ids.length; k++ ){
- var id = query.ids[ k ];
- var actualId = ele_p.data.id;
-
- allIdsMatch = allIdsMatch && (id == actualId);
-
- if( !allIdsMatch ) break;
- }
- if( !allIdsMatch ) return false;
-
- // check classes
- var allClassesMatch = true;
- for( var k = 0; k < query.classes.length; k++ ){
- var cls = query.classes[ k ];
-
- allClassesMatch = allClassesMatch && ele.hasClass( cls );
-
- if( !allClassesMatch ) break;
- }
- if( !allClassesMatch ) return false;
-
- // generic checking for data/metadata
- var operandsMatch = function( params ){
- var allDataMatches = true;
- for( var k = 0; k < query[ params.name ].length; k++ ){
- var data = query[ params.name ][ k ];
- var operator = data.operator;
- var value = data.value;
- var field = data.field;
- var matches;
-
- if( operator != null && value != null ){
-
- var fieldVal = params.fieldValue( field );
- var fieldStr = !is.string( fieldVal ) && !is.number( fieldVal ) ? '' : '' + fieldVal;
- var valStr = '' + value;
-
- var caseInsensitive = false;
- if( operator.indexOf( '@' ) >= 0 ){
- fieldStr = fieldStr.toLowerCase();
- valStr = valStr.toLowerCase();
-
- operator = operator.replace( '@', '' );
- caseInsensitive = true;
- }
-
- var notExpr = false;
- if( operator.indexOf( '!' ) >= 0 ){
- operator = operator.replace( '!', '' );
- notExpr = true;
- }
-
- // if we're doing a case insensitive comparison, then we're using a STRING comparison
- // even if we're comparing numbers
- if( caseInsensitive ){
- value = valStr.toLowerCase();
- fieldVal = fieldStr.toLowerCase();
- }
-
- var isIneqCmp = false;
-
- switch( operator ){
- case '*=':
- matches = fieldStr.indexOf( valStr ) >= 0;
- break;
- case '$=':
- matches = fieldStr.indexOf( valStr, fieldStr.length - valStr.length ) >= 0;
- break;
- case '^=':
- matches = fieldStr.indexOf( valStr ) === 0;
- break;
- case '=':
- matches = fieldVal === value;
- break;
- case '>':
- isIneqCmp = true;
- matches = fieldVal > value;
- break;
- case '>=':
- isIneqCmp = true;
- matches = fieldVal >= value;
- break;
- case '<':
- isIneqCmp = true;
- matches = fieldVal < value;
- break;
- case '<=':
- isIneqCmp = true;
- matches = fieldVal <= value;
- break;
- default:
- matches = false;
- break;
- }
-
- // apply the not op, but null vals for inequalities should always stay non-matching
- if( notExpr && ( fieldVal != null || !isIneqCmp ) ){
- matches = !matches;
- }
- } else if( operator != null ){
- switch( operator ){
- case '?':
- matches = params.fieldTruthy( field );
- break;
- case '!':
- matches = !params.fieldTruthy( field );
- break;
- case '^':
- matches = params.fieldUndefined( field );
- break;
- }
- } else {
- matches = !params.fieldUndefined( field );
- }
-
- if( !matches ){
- allDataMatches = false;
- break;
- }
- } // for
-
- return allDataMatches;
- }; // operandsMatch
-
- // check data matches
- var allDataMatches = operandsMatch( {
- name: 'data',
- fieldValue: function( field ){
- return ele_p.data[ field ];
- },
- fieldUndefined: function( field ){
- return ele_p.data[ field ] === undefined;
- },
- fieldTruthy: function( field ){
- if( ele_p.data[ field ] ){
- return true;
- }
- return false;
- }
- } );
-
- if( !allDataMatches ){
- return false;
- }
-
- // check metadata matches
- var allMetaMatches = operandsMatch( {
- name: 'meta',
- fieldValue: function( field ){
- return ele[ field ]();
- },
- fieldUndefined: function( field ){
- return ele[ field ]() == null;
- },
- fieldTruthy: function( field ){
- if( ele[ field ]() ){
- return true;
- }
- return false;
- }
- } );
-
- if( !allMetaMatches ){
- return false;
- }
-
- // check collection
- if( query.collection != null ){
- var matchesAny = query.collection.hasElementWithId( ele.id() );
-
- if( !matchesAny ){
- return false;
- }
- }
-
- // check filter function
- if( query.filter != null && ele.collection().filter( query.filter ).size() === 0 ){
- return false;
- }
-
- // check parent/child relations
- var confirmRelations = function( query, eles ){
- if( query != null ){
- var matches = false;
-
- if( !cy.hasCompoundNodes() ){
- return false;
- }
-
- eles = eles(); // save cycles if query == null
-
- // query must match for at least one element (may be recursive)
- for( var i = 0; i < eles.length; i++ ){
- if( queryMatches( query, eles[ i ] ) ){
- matches = true;
- break;
- }
- }
-
- return matches;
- } else {
- return true;
- }
- };
-
- if( !confirmRelations( query.parent, function(){
- return ele.parent();
- } ) ){ return false; }
-
- if( !confirmRelations( query.ancestor, function(){
- return ele.parents();
- } ) ){ return false; }
-
- if( !confirmRelations( query.child, function(){
- return ele.children();
- } ) ){ return false; }
-
- if( !confirmRelations( query.descendant, function(){
- return ele.descendants();
- } ) ){ return false; }
-
- // we've reached the end, so we've matched everything for this query
- return true;
-}; // queryMatches
-
-// filter an existing collection
-selfn.filter = function( collection ){
- var self = this;
- var cy = collection.cy();
-
- // don't bother trying if it's invalid
- if( self._private.invalid ){
- return cy.collection();
- }
-
- var selectorFunction = function( i, element ){
- for( var j = 0; j < self.length; j++ ){
- var query = self[ j ];
-
- if( queryMatches( query, element ) ){
- return true;
- }
- }
-
- return false;
- };
-
- if( self._private.selectorText == null ){
- selectorFunction = function(){ return true; };
- }
-
- var filteredCollection = collection.filter( selectorFunction );
-
- return filteredCollection;
-}; // filter
-
-// does selector match a single element?
-selfn.matches = function( ele ){
- var self = this;
-
- // don't bother trying if it's invalid
- if( self._private.invalid ){
- return false;
- }
-
- for( var j = 0; j < self.length; j++ ){
- var query = self[ j ];
-
- if( queryMatches( query, ele ) ){
- return true;
- }
- }
-
- return false;
-}; // filter
-
-// ith query to string
-selfn.toString = selfn.selector = function(){
-
- var str = '';
-
- var clean = function( obj, isValue ){
- if( is.string( obj ) ){
- return isValue ? '"' + obj + '"' : obj;
- }
- return '';
- };
-
- var queryToString = function( query ){
- var str = '';
-
- if( query.subject === query ){
- str += '$';
- }
-
- var group = clean( query.group );
- str += group.substring( 0, group.length - 1 );
-
- for( var j = 0; j < query.data.length; j++ ){
- var data = query.data[ j ];
-
- if( data.value ){
- str += '[' + data.field + clean( data.operator ) + clean( data.value, true ) + ']';
- } else {
- str += '[' + clean( data.operator ) + data.field + ']';
- }
- }
-
- for( var j = 0; j < query.meta.length; j++ ){
- var meta = query.meta[ j ];
- str += '[[' + meta.field + clean( meta.operator ) + clean( meta.value, true ) + ']]';
- }
-
- for( var j = 0; j < query.colonSelectors.length; j++ ){
- var sel = query.colonSelectors[ i ];
- str += sel;
- }
-
- for( var j = 0; j < query.ids.length; j++ ){
- var sel = '#' + query.ids[ i ];
- str += sel;
- }
-
- for( var j = 0; j < query.classes.length; j++ ){
- var sel = '.' + query.classes[ j ];
- str += sel;
- }
-
- if( query.parent != null ){
- str = queryToString( query.parent ) + ' > ' + str;
- }
-
- if( query.ancestor != null ){
- str = queryToString( query.ancestor ) + ' ' + str;
- }
-
- if( query.child != null ){
- str += ' > ' + queryToString( query.child );
- }
-
- if( query.descendant != null ){
- str += ' ' + queryToString( query.descendant );
- }
-
- return str;
- };
-
- for( var i = 0; i < this.length; i++ ){
- var query = this[ i ];
-
- str += queryToString( query );
-
- if( this.length > 1 && i < this.length - 1 ){
- str += ', ';
- }
- }
-
- return str;
-};
-
-module.exports = Selector;
-
-},{"./is":83,"./util":100}],88:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../util' );
-var is = _dereq_( '../is' );
-
-var styfn = {};
-
-// (potentially expensive calculation)
-// apply the style to the element based on
-// - its bypass
-// - what selectors match it
-styfn.apply = function( eles ){
- var self = this;
- var _p = self._private;
-
- if( _p.newStyle ){ // clear style caches
- _p.contextStyles = {};
- _p.propDiffs = {};
-
- self.cleanElements( eles, true );
- }
-
- for( var ie = 0; ie < eles.length; ie++ ){
- var ele = eles[ ie ];
-
- var cxtMeta = self.getContextMeta( ele );
- var cxtStyle = self.getContextStyle( cxtMeta );
- var app = self.applyContextStyle( cxtMeta, cxtStyle, ele );
-
- self.updateTransitions( ele, app.diffProps );
- self.updateStyleHints( ele );
-
- } // for elements
-
- _p.newStyle = false;
-};
-
-styfn.getPropertiesDiff = function( oldCxtKey, newCxtKey ){
- var self = this;
- var cache = self._private.propDiffs = self._private.propDiffs || {};
- var dualCxtKey = oldCxtKey + '-' + newCxtKey;
- var cachedVal = cache[ dualCxtKey ];
-
- if( cachedVal ){
- return cachedVal;
- }
-
- var diffProps = [];
- var addedProp = {};
-
- for( var i = 0; i < self.length; i++ ){
- var cxt = self[ i ];
- var oldHasCxt = oldCxtKey[ i ] === 't';
- var newHasCxt = newCxtKey[ i ] === 't';
- var cxtHasDiffed = oldHasCxt !== newHasCxt;
- var cxtHasMappedProps = cxt.mappedProperties.length > 0;
-
- if( cxtHasDiffed || cxtHasMappedProps ){
- var props;
-
- if( cxtHasDiffed && cxtHasMappedProps ){
- props = cxt.properties; // suffices b/c mappedProperties is a subset of properties
- } else if( cxtHasDiffed ){
- props = cxt.properties; // need to check them all
- } else if( cxtHasMappedProps ){
- props = cxt.mappedProperties; // only need to check mapped
- }
-
- for( var j = 0; j < props.length; j++ ){
- var prop = props[ j ];
- var name = prop.name;
-
- // if a later context overrides this property, then the fact that this context has switched/diffed doesn't matter
- // (semi expensive check since it makes this function O(n^2) on context length, but worth it since overall result
- // is cached)
- var laterCxtOverrides = false;
- for( var k = i + 1; k < self.length; k++ ){
- var laterCxt = self[ k ];
- var hasLaterCxt = newCxtKey[ k ] === 't';
-
- if( !hasLaterCxt ){ continue; } // can't override unless the context is active
-
- laterCxtOverrides = laterCxt.properties[ prop.name ] != null;
-
- if( laterCxtOverrides ){ break; } // exit early as long as one later context overrides
- }
-
- if( !addedProp[ name ] && !laterCxtOverrides ){
- addedProp[ name ] = true;
- diffProps.push( name );
- }
- } // for props
- } // if
-
- } // for contexts
-
- cache[ dualCxtKey ] = diffProps;
- return diffProps;
-};
-
-styfn.getContextMeta = function( ele ){
- var self = this;
- var cxtKey = '';
- var diffProps;
- var prevKey = ele._private.styleCxtKey || '';
-
- if( self._private.newStyle ){
- prevKey = ''; // since we need to apply all style if a fresh stylesheet
- }
-
- // get the cxt key
- for( var i = 0; i < self.length; i++ ){
- var context = self[ i ];
- var contextSelectorMatches = context.selector && context.selector.matches( ele ); // NB: context.selector may be null for 'core'
-
- if( contextSelectorMatches ){
- cxtKey += 't';
- } else {
- cxtKey += 'f';
- }
- } // for context
-
- diffProps = self.getPropertiesDiff( prevKey, cxtKey );
-
- ele._private.styleCxtKey = cxtKey;
-
- return {
- key: cxtKey,
- diffPropNames: diffProps
- };
-};
-
-// gets a computed ele style object based on matched contexts
-styfn.getContextStyle = function( cxtMeta ){
- var cxtKey = cxtMeta.key;
- var self = this;
- var cxtStyles = this._private.contextStyles = this._private.contextStyles || {};
-
- // if already computed style, returned cached copy
- if( cxtStyles[ cxtKey ] ){ return cxtStyles[ cxtKey ]; }
-
- var style = {
- _private: {
- key: cxtKey
- }
- };
-
- for( var i = 0; i < self.length; i++ ){
- var cxt = self[ i ];
- var hasCxt = cxtKey[ i ] === 't';
-
- if( !hasCxt ){ continue; }
-
- for( var j = 0; j < cxt.properties.length; j++ ){
- var prop = cxt.properties[ j ];
- var styProp = style[ prop.name ] = prop;
-
- styProp.context = cxt;
- }
- }
-
- cxtStyles[ cxtKey ] = style;
- return style;
-};
-
-styfn.applyContextStyle = function( cxtMeta, cxtStyle, ele ){
- var self = this;
- var diffProps = cxtMeta.diffPropNames;
- var retDiffProps = {};
-
- for( var i = 0; i < diffProps.length; i++ ){
- var diffPropName = diffProps[ i ];
- var cxtProp = cxtStyle[ diffPropName ];
- var eleProp = ele.pstyle( diffPropName );
-
- if( !cxtProp ){ // no context prop means delete
- if( eleProp.bypass ){
- cxtProp = { name: diffPropName, deleteBypassed: true };
- } else {
- cxtProp = { name: diffPropName, delete: true };
- }
- }
-
- // save cycles when the context prop doesn't need to be applied
- if( eleProp === cxtProp ){ continue; }
-
- var retDiffProp = retDiffProps[ diffPropName ] = {
- prev: eleProp
- };
-
- self.applyParsedProperty( ele, cxtProp );
-
- retDiffProp.next = ele.pstyle( diffPropName );
-
- if( retDiffProp.next && retDiffProp.next.bypass ){
- retDiffProp.next = retDiffProp.next.bypassed;
- }
- }
-
- return {
- diffProps: retDiffProps
- };
-};
-
-styfn.updateStyleHints = function(ele){
- var _p = ele._private;
- var self = this;
-
- if( ele.removed() ){ return; }
-
- // set whether has pie or not; for greater efficiency
- var hasPie = false;
- if( _p.group === 'nodes' ){
- for( var i = 1; i <= self.pieBackgroundN; i++ ){ // 1..N
- var size = ele.pstyle( 'pie-' + i + '-background-size' ).value;
-
- if( size > 0 ){
- hasPie = true;
- break;
- }
- }
- }
-
- _p.hasPie = hasPie;
-
- var transform = ele.pstyle( 'text-transform' ).strValue;
- var content = ele.pstyle( 'label' ).strValue;
- var srcContent = ele.pstyle( 'source-label' ).strValue;
- var tgtContent = ele.pstyle( 'target-label' ).strValue;
- var fStyle = ele.pstyle( 'font-style' ).strValue;
- var size = ele.pstyle( 'font-size' ).pfValue + 'px';
- var family = ele.pstyle( 'font-family' ).strValue;
- // var variant = style['font-variant'].strValue;
- var weight = ele.pstyle( 'font-weight' ).strValue;
- var valign = ele.pstyle( 'text-valign' ).strValue;
- var halign = ele.pstyle( 'text-valign' ).strValue;
- var oWidth = ele.pstyle( 'text-outline-width' ).pfValue;
- var wrap = ele.pstyle( 'text-wrap' ).strValue;
- var wrapW = ele.pstyle( 'text-max-width' ).pfValue;
- var labelStyleKey = fStyle + '$' + size + '$' + family + '$' + weight + '$' + transform + '$' + valign + '$' + halign + '$' + oWidth + '$' + wrap + '$' + wrapW;
- _p.labelStyleKey = labelStyleKey;
- _p.sourceLabelKey = labelStyleKey + '$' + srcContent;
- _p.targetLabelKey = labelStyleKey + '$' + tgtContent;
- _p.labelKey = labelStyleKey + '$' + content;
- _p.fontKey = fStyle + '$' + weight + '$' + size + '$' + family;
-
- _p.styleKey = Date.now();
-};
-
-// apply a property to the style (for internal use)
-// returns whether application was successful
-//
-// now, this function flattens the property, and here's how:
-//
-// for parsedProp:{ bypass: true, deleteBypass: true }
-// no property is generated, instead the bypass property in the
-// element's style is replaced by what's pointed to by the `bypassed`
-// field in the bypass property (i.e. restoring the property the
-// bypass was overriding)
-//
-// for parsedProp:{ mapped: truthy }
-// the generated flattenedProp:{ mapping: prop }
-//
-// for parsedProp:{ bypass: true }
-// the generated flattenedProp:{ bypassed: parsedProp }
-styfn.applyParsedProperty = function( ele, parsedProp ){
- var self = this;
- var prop = parsedProp;
- var style = ele._private.style;
- var fieldVal, flatProp;
- var types = self.types;
- var type = self.properties[ prop.name ].type;
- var propIsBypass = prop.bypass;
- var origProp = style[ prop.name ];
- var origPropIsBypass = origProp && origProp.bypass;
- var _p = ele._private;
-
- // edges connected to compound nodes can not be haystacks
- if(
- parsedProp.name === 'curve-style'
- && parsedProp.value === 'haystack'
- && ele.isEdge()
- && ( ele.isLoop() || ele.source().isParent() || ele.target().isParent() )
- ){
- prop = parsedProp = this.parse( parsedProp.name, 'bezier', propIsBypass );
- }
-
- if( prop.delete ){ // delete the property and use the default value on falsey value
- style[ prop.name ] = undefined;
-
- return true;
- }
-
- if( prop.deleteBypassed ){ // delete the property that the
- if( !origProp ){
- return true; // can't delete if no prop
-
- } else if( origProp.bypass ){ // delete bypassed
- origProp.bypassed = undefined;
- return true;
-
- } else {
- return false; // we're unsuccessful deleting the bypassed
- }
- }
-
- // check if we need to delete the current bypass
- if( prop.deleteBypass ){ // then this property is just here to indicate we need to delete
- if( !origProp ){
- return true; // property is already not defined
-
- } else if( origProp.bypass ){ // then replace the bypass property with the original
- // because the bypassed property was already applied (and therefore parsed), we can just replace it (no reapplying necessary)
- style[ prop.name ] = origProp.bypassed;
- return true;
-
- } else {
- return false; // we're unsuccessful deleting the bypass
- }
- }
-
- var printMappingErr = function(){
- util.error( 'Do not assign mappings to elements without corresponding data (e.g. ele `' + ele.id() + '` for property `' + prop.name + '` with data field `' + prop.field + '`); try a `[' + prop.field + ']` selector to limit scope to elements with `' + prop.field + '` defined' );
- };
-
- // put the property in the style objects
- switch( prop.mapped ){ // flatten the property if mapped
- case types.mapData:
- case types.mapLayoutData:
- case types.mapScratch:
-
- var isLayout = prop.mapped === types.mapLayoutData;
- var isScratch = prop.mapped === types.mapScratch;
-
- // flatten the field (e.g. data.foo.bar)
- var fields = prop.field.split( '.' );
- var fieldVal;
-
- if( isScratch || isLayout ){
- fieldVal = _p.scratch;
- } else {
- fieldVal = _p.data;
- }
-
- for( var i = 0; i < fields.length && fieldVal; i++ ){
- var field = fields[ i ];
- fieldVal = fieldVal[ field ];
- }
-
- var percent;
- if( !is.number( fieldVal ) ){ // then keep the mapping but assume 0% for now
- percent = 0;
- } else {
- percent = (fieldVal - prop.fieldMin) / (prop.fieldMax - prop.fieldMin);
- }
-
- // make sure to bound percent value
- if( percent < 0 ){
- percent = 0;
- } else if( percent > 1 ){
- percent = 1;
- }
-
- if( type.color ){
- var r1 = prop.valueMin[0];
- var r2 = prop.valueMax[0];
- var g1 = prop.valueMin[1];
- var g2 = prop.valueMax[1];
- var b1 = prop.valueMin[2];
- var b2 = prop.valueMax[2];
- var a1 = prop.valueMin[3] == null ? 1 : prop.valueMin[3];
- var a2 = prop.valueMax[3] == null ? 1 : prop.valueMax[3];
-
- var clr = [
- Math.round( r1 + (r2 - r1) * percent ),
- Math.round( g1 + (g2 - g1) * percent ),
- Math.round( b1 + (b2 - b1) * percent ),
- Math.round( a1 + (a2 - a1) * percent )
- ];
-
- flatProp = { // colours are simple, so just create the flat property instead of expensive string parsing
- bypass: prop.bypass, // we're a bypass if the mapping property is a bypass
- name: prop.name,
- value: clr,
- strValue: 'rgb(' + clr[0] + ', ' + clr[1] + ', ' + clr[2] + ')'
- };
-
- } else if( type.number ){
- var calcValue = prop.valueMin + (prop.valueMax - prop.valueMin) * percent;
- flatProp = this.parse( prop.name, calcValue, prop.bypass, true );
-
- } else {
- return false; // can only map to colours and numbers
- }
-
- if( !flatProp ){ // if we can't flatten the property, then use the origProp so we still keep the mapping itself
- flatProp = this.parse( prop.name, origProp.strValue, prop.bypass, true );
- }
-
- if( !flatProp ){ printMappingErr(); }
- flatProp.mapping = prop; // keep a reference to the mapping
- prop = flatProp; // the flattened (mapped) property is the one we want
-
- break;
-
- // direct mapping
- case types.data:
- case types.layoutData:
- case types.scratch:
- var isLayout = prop.mapped === types.layoutData;
- var isScratch = prop.mapped === types.scratch;
-
- // flatten the field (e.g. data.foo.bar)
- var fields = prop.field.split( '.' );
- var fieldVal;
-
- if( isScratch || isLayout ){
- fieldVal = _p.scratch;
- } else {
- fieldVal = _p.data;
- }
-
- if( fieldVal ){ for( var i = 0; i < fields.length; i++ ){
- var field = fields[ i ];
- fieldVal = fieldVal[ field ];
- } }
-
- flatProp = this.parse( prop.name, fieldVal, prop.bypass, true );
-
- if( !flatProp ){ // if we can't flatten the property, then use the origProp so we still keep the mapping itself
- var flatPropVal = origProp ? origProp.strValue : '';
-
- flatProp = this.parse( prop.name, flatPropVal, prop.bypass, true );
- }
-
- if( !flatProp ){ printMappingErr(); }
- flatProp.mapping = prop; // keep a reference to the mapping
- prop = flatProp; // the flattened (mapped) property is the one we want
-
- break;
-
- case types.fn:
- var fn = prop.value;
- var fnRetVal = fn( ele );
-
- flatProp = this.parse( prop.name, fnRetVal, prop.bypass, true );
- flatProp.mapping = prop; // keep a reference to the mapping
- prop = flatProp; // the flattened (mapped) property is the one we want
-
- break;
-
- case undefined:
- break; // just set the property
-
- default:
- return false; // not a valid mapping
- }
-
- // if the property is a bypass property, then link the resultant property to the original one
- if( propIsBypass ){
- if( origPropIsBypass ){ // then this bypass overrides the existing one
- prop.bypassed = origProp.bypassed; // steal bypassed prop from old bypass
- } else { // then link the orig prop to the new bypass
- prop.bypassed = origProp;
- }
-
- style[ prop.name ] = prop; // and set
-
- } else { // prop is not bypass
- if( origPropIsBypass ){ // then keep the orig prop (since it's a bypass) and link to the new prop
- origProp.bypassed = prop;
- } else { // then just replace the old prop with the new one
- style[ prop.name ] = prop;
- }
- }
-
- return true;
-};
-
-styfn.cleanElements = function( eles, keepBypasses ){
- var self = this;
- var props = self.properties;
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[i];
-
- if( !keepBypasses ){
- ele._private.style = {};
- } else {
- var style = ele._private.style;
-
- for( var j = 0; j < props.length; j++ ){
- var prop = props[j];
- var eleProp = style[ prop.name ];
-
- if( eleProp ){
- if( eleProp.bypass ){
- eleProp.bypassed = null;
- } else {
- style[ prop.name ] = null;
- }
- }
- }
- }
- }
-};
-
-// updates the visual style for all elements (useful for manual style modification after init)
-styfn.update = function(){
- var cy = this._private.cy;
- var eles = cy.mutableElements();
-
- eles.updateStyle();
-};
-
-// just update the functional properties (i.e. mappings) in the elements'
-// styles (less expensive than recalculation)
-styfn.updateMappers = function( eles ){
- var self = this;
-
- for( var i = 0; i < eles.length; i++ ){ // for each ele
- var ele = eles[ i ];
- var style = ele._private.style;
-
- for( var j = 0; j < self.properties.length; j++ ){ // for each prop
- var prop = self.properties[ j ];
- var propInStyle = style[ prop.name ];
-
- if( propInStyle && propInStyle.mapping ){
- var mapping = propInStyle.mapping;
- this.applyParsedProperty( ele, mapping ); // reapply the mapping property
- }
- }
-
- this.updateStyleHints( ele );
- }
-};
-
-// diffProps : { name => { prev, next } }
-styfn.updateTransitions = function( ele, diffProps, isBypass ){
- var self = this;
- var _p = ele._private;
- var props = ele.pstyle( 'transition-property' ).value;
- var duration = ele.pstyle( 'transition-duration' ).pfValue;
- var delay = ele.pstyle( 'transition-delay' ).pfValue;
-
- if( props.length > 0 && duration > 0 ){
-
- var css = {};
-
- // build up the style to animate towards
- var anyPrev = false;
- for( var i = 0; i < props.length; i++ ){
- var prop = props[ i ];
- var styProp = ele.pstyle( prop );
- var diffProp = diffProps[ prop ];
-
- if( !diffProp ){ continue; }
-
- var prevProp = diffProp.prev;
- var fromProp = prevProp;
- var toProp = diffProp.next != null ? diffProp.next : styProp;
- var diff = false;
- var initVal;
- var initDt = 0.000001; // delta time % value for initVal (allows animating out of init zero opacity)
-
- if( !fromProp ){ continue; }
-
- // consider px values
- if( is.number( fromProp.pfValue ) && is.number( toProp.pfValue ) ){
- diff = toProp.pfValue - fromProp.pfValue; // nonzero is truthy
- initVal = fromProp.pfValue + initDt * diff;
-
- // consider numerical values
- } else if( is.number( fromProp.value ) && is.number( toProp.value ) ){
- diff = toProp.value - fromProp.value; // nonzero is truthy
- initVal = fromProp.value + initDt * diff;
-
- // consider colour values
- } else if( is.array( fromProp.value ) && is.array( toProp.value ) ){
- diff = fromProp.value[0] !== toProp.value[0]
- || fromProp.value[1] !== toProp.value[1]
- || fromProp.value[2] !== toProp.value[2]
- ;
-
- initVal = fromProp.strValue;
- }
-
- // the previous value is good for an animation only if it's different
- if( diff ){
- css[ prop ] = toProp.strValue; // to val
- this.applyBypass( ele, prop, initVal ); // from val
- anyPrev = true;
- }
-
- } // end if props allow ani
-
- // can't transition if there's nothing previous to transition from
- if( !anyPrev ){ return; }
-
- _p.transitioning = true;
-
- ele.stop();
-
- if( delay > 0 ){
- ele.delay( delay );
- }
-
- ele.animate( {
- css: css
- }, {
- duration: duration,
- easing: ele.pstyle( 'transition-timing-function' ).value,
- queue: false,
- complete: function(){
- if( !isBypass ){
- self.removeBypasses( ele, props );
- }
-
- _p.transitioning = false;
- }
- } );
-
- } else if( _p.transitioning ){
- ele.stop();
-
- this.removeBypasses( ele, props );
-
- _p.transitioning = false;
- }
-};
-
-module.exports = styfn;
-
-},{"../is":83,"../util":100}],89:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../is' );
-var util = _dereq_( '../util' );
-
-var styfn = {};
-
-// bypasses are applied to an existing style on an element, and just tacked on temporarily
-// returns true iff application was successful for at least 1 specified property
-styfn.applyBypass = function( eles, name, value, updateTransitions ){
- var self = this;
- var props = [];
- var isBypass = true;
-
- // put all the properties (can specify one or many) in an array after parsing them
- if( name === '*' || name === '**' ){ // apply to all property names
-
- if( value !== undefined ){
- for( var i = 0; i < self.properties.length; i++ ){
- var prop = self.properties[ i ];
- var name = prop.name;
-
- var parsedProp = this.parse( name, value, true );
-
- if( parsedProp ){
- props.push( parsedProp );
- }
- }
- }
-
- } else if( is.string( name ) ){ // then parse the single property
- var parsedProp = this.parse( name, value, true );
-
- if( parsedProp ){
- props.push( parsedProp );
- }
- } else if( is.plainObject( name ) ){ // then parse each property
- var specifiedProps = name;
- updateTransitions = value;
-
- for( var i = 0; i < self.properties.length; i++ ){
- var prop = self.properties[ i ];
- var name = prop.name;
- var value = specifiedProps[ name ];
-
- if( value === undefined ){ // try camel case name too
- value = specifiedProps[ util.dash2camel( name ) ];
- }
-
- if( value !== undefined ){
- var parsedProp = this.parse( name, value, true );
-
- if( parsedProp ){
- props.push( parsedProp );
- }
- }
- }
- } else { // can't do anything without well defined properties
- return false;
- }
-
- // we've failed if there are no valid properties
- if( props.length === 0 ){ return false; }
-
- // now, apply the bypass properties on the elements
- var ret = false; // return true if at least one succesful bypass applied
- for( var i = 0; i < eles.length; i++ ){ // for each ele
- var ele = eles[ i ];
- var diffProps = {};
- var diffProp;
-
- for( var j = 0; j < props.length; j++ ){ // for each prop
- var prop = props[ j ];
-
- if( updateTransitions ){
- var prevProp = ele.pstyle( prop.name );
- diffProp = diffProps[ prop.name ] = { prev: prevProp };
- }
-
- ret = this.applyParsedProperty( ele, prop ) || ret;
-
- if( updateTransitions ){
- diffProp.next = ele.pstyle( prop.name );
- }
-
- } // for props
-
- if( ret ){
- this.updateStyleHints( ele );
- }
-
- if( updateTransitions ){
- this.updateTransitions( ele, diffProps, isBypass );
- }
- } // for eles
-
- return ret;
-};
-
-// only useful in specific cases like animation
-styfn.overrideBypass = function( eles, name, value ){
- name = util.camel2dash( name );
-
- for( var i = 0; i < eles.length; i++ ){
- var ele = eles[ i ];
- var prop = ele._private.style[ name ];
- var type = this.properties[ name ].type;
- var isColor = type.color;
- var isMulti = type.mutiple;
-
- if( !prop || !prop.bypass ){ // need a bypass if one doesn't exist
- this.applyBypass( ele, name, value );
- continue;
- }
-
- prop.value = value;
-
- if( prop.pfValue != null ){
- prop.pfValue = value;
- }
-
- if( isColor ){
- prop.strValue = 'rgb(' + value.join( ',' ) + ')';
- } else if( isMulti ){
- prop.strValue = value.join( ' ' );
- } else {
- prop.strValue = '' + value;
- }
- }
-};
-
-styfn.removeAllBypasses = function( eles, updateTransitions ){
- return this.removeBypasses( eles, this.propertyNames, updateTransitions );
-};
-
-styfn.removeBypasses = function( eles, props, updateTransitions ){
- var isBypass = true;
-
- for( var j = 0; j < eles.length; j++ ){
- var ele = eles[ j ];
- var diffProps = {};
-
- for( var i = 0; i < props.length; i++ ){
- var name = props[ i ];
- var prop = this.properties[ name ];
- var prevProp = ele.pstyle( prop.name );
-
- if( !prevProp || !prevProp.bypass ){
- // if a bypass doesn't exist for the prop, nothing needs to be removed
- continue;
- }
-
- var value = ''; // empty => remove bypass
- var parsedProp = this.parse( name, value, true );
- var diffProp = diffProps[ prop.name ] = { prev: prevProp };
-
- this.applyParsedProperty( ele, parsedProp );
-
- diffProp.next = ele.pstyle( prop.name );
- } // for props
-
- this.updateStyleHints( ele );
-
- if( updateTransitions ){
- this.updateTransitions( ele, diffProps, isBypass );
- }
- } // for eles
-};
-
-module.exports = styfn;
-
-},{"../is":83,"../util":100}],90:[function(_dereq_,module,exports){
-'use strict';
-
-var window = _dereq_( '../window' );
-
-var styfn = {};
-
-// gets what an em size corresponds to in pixels relative to a dom element
-styfn.getEmSizeInPixels = function(){
- var px = this.containerCss( 'font-size' );
-
- if( px != null ){
- return parseFloat( px );
- } else {
- return 1; // for headless
- }
-};
-
-// gets css property from the core container
-styfn.containerCss = function( propName ){
- var cy = this._private.cy;
- var domElement = cy.container();
-
- if( window && domElement && window.getComputedStyle ){
- return window.getComputedStyle( domElement ).getPropertyValue( propName );
- }
-};
-
-module.exports = styfn;
-
-},{"../window":107}],91:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../util' );
-var is = _dereq_( '../is' );
-
-var styfn = {};
-
-// gets the rendered style for an element
-styfn.getRenderedStyle = function( ele ){
- return this.getRawStyle( ele, true );
-};
-
-// gets the raw style for an element
-styfn.getRawStyle = function( ele, isRenderedVal ){
- var self = this;
- var ele = ele[0]; // insure it's an element
-
- if( ele ){
- var rstyle = {};
-
- for( var i = 0; i < self.properties.length; i++ ){
- var prop = self.properties[ i ];
- var val = self.getStylePropertyValue( ele, prop.name, isRenderedVal );
-
- if( val ){
- rstyle[ prop.name ] = val;
- rstyle[ util.dash2camel( prop.name ) ] = val;
- }
- }
-
- return rstyle;
- }
-};
-
-styfn.getStylePropertyValue = function( ele, propName, isRenderedVal ){
- var self = this;
- var ele = ele[0]; // insure it's an element
-
- if( ele ){
- var prop = self.properties[ propName ];
- var type = prop.type;
- var styleProp = ele.pstyle( prop.name );
- var zoom = ele.cy().zoom();
-
- if( styleProp ){
- var units = styleProp.units ? type.implicitUnits || 'px' : null;
- var val = units ? [].concat( styleProp.pfValue ).map( function( pfValue ){
- return ( pfValue * (isRenderedVal ? zoom : 1) ) + units;
- } ).join( ' ' ) : styleProp.strValue;
-
- return val;
- }
- }
-};
-
-styfn.getAnimationStartStyle = function( ele, aniProps ){
- var rstyle = {};
-
- for( var i = 0; i < aniProps.length; i++ ){
- var aniProp = aniProps[ i ];
- var name = aniProp.name;
-
- var styleProp = ele.pstyle( name );
-
- if( styleProp !== undefined ){ // then make a prop of it
- if( is.plainObject( styleProp ) ){
- styleProp = this.parse( name, styleProp.strValue );
- } else {
- styleProp = this.parse( name, styleProp );
- }
- }
-
- if( styleProp ){
- rstyle[ name ] = styleProp;
- }
- }
-
- return rstyle;
-};
-
-styfn.getPropsList = function( propsObj ){
- var self = this;
- var rstyle = [];
- var style = propsObj;
- var props = self.properties;
-
- if( style ){
- var names = Object.keys( style );
-
- for( var i = 0; i < names.length; i++ ){
- var name = names[i];
- var val = style[ name ];
- var prop = props[ name ] || props[ util.camel2dash( name ) ];
- var styleProp = this.parse( prop.name, val );
-
- rstyle.push( styleProp );
- }
- }
-
- return rstyle;
-};
-
-module.exports = styfn;
-
-},{"../is":83,"../util":100}],92:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../is' );
-var util = _dereq_( '../util' );
-var Selector = _dereq_( '../selector' );
-
-var Style = function( cy ){
-
- if( !(this instanceof Style) ){
- return new Style( cy );
- }
-
- if( !is.core( cy ) ){
- util.error( 'A style must have a core reference' );
- return;
- }
-
- this._private = {
- cy: cy,
- coreStyle: {}
- };
-
- this.length = 0;
-
- this.resetToDefault();
-};
-
-var styfn = Style.prototype;
-
-styfn.instanceString = function(){
- return 'style';
-};
-
-// remove all contexts
-styfn.clear = function(){
- for( var i = 0; i < this.length; i++ ){
- this[ i ] = undefined;
- }
- this.length = 0;
-
- var _p = this._private;
-
- _p.newStyle = true;
-
- return this; // chaining
-};
-
-styfn.resetToDefault = function(){
- this.clear();
- this.addDefaultStylesheet();
-
- return this;
-};
-
-// builds a style object for the 'core' selector
-styfn.core = function(){
- return this._private.coreStyle;
-};
-
-// create a new context from the specified selector string and switch to that context
-styfn.selector = function( selectorStr ){
- // 'core' is a special case and does not need a selector
- var selector = selectorStr === 'core' ? null : new Selector( selectorStr );
-
- var i = this.length++; // new context means new index
- this[ i ] = {
- selector: selector,
- properties: [],
- mappedProperties: [],
- index: i
- };
-
- return this; // chaining
-};
-
-// add one or many css rules to the current context
-styfn.css = function(){
- var self = this;
- var args = arguments;
-
- switch( args.length ){
- case 1:
- var map = args[0];
-
- for( var i = 0; i < self.properties.length; i++ ){
- var prop = self.properties[ i ];
- var mapVal = map[ prop.name ];
-
- if( mapVal === undefined ){
- mapVal = map[ util.dash2camel( prop.name ) ];
- }
-
- if( mapVal !== undefined ){
- this.cssRule( prop.name, mapVal );
- }
- }
-
- break;
-
- case 2:
- this.cssRule( args[0], args[1] );
- break;
-
- default:
- break; // do nothing if args are invalid
- }
-
- return this; // chaining
-};
-styfn.style = styfn.css;
-
-// add a single css rule to the current context
-styfn.cssRule = function( name, value ){
- // name-value pair
- var property = this.parse( name, value );
-
- // add property to current context if valid
- if( property ){
- var i = this.length - 1;
- this[ i ].properties.push( property );
- this[ i ].properties[ property.name ] = property; // allow access by name as well
-
- if( property.name.match( /pie-(\d+)-background-size/ ) && property.value ){
- this._private.hasPie = true;
- }
-
- if( property.mapped ){
- this[ i ].mappedProperties.push( property );
- }
-
- // add to core style if necessary
- var currentSelectorIsCore = !this[ i ].selector;
- if( currentSelectorIsCore ){
- this._private.coreStyle[ property.name ] = property;
- }
- }
-
- return this; // chaining
-};
-
-// static function
-Style.fromJson = function( cy, json ){
- var style = new Style( cy );
-
- style.fromJson( json );
-
- return style;
-};
-
-Style.fromString = function( cy, string ){
- return new Style( cy ).fromString( string );
-};
-
-[
- _dereq_( './apply' ),
- _dereq_( './bypass' ),
- _dereq_( './container' ),
- _dereq_( './get-for-ele' ),
- _dereq_( './json' ),
- _dereq_( './string-sheet' ),
- _dereq_( './properties' ),
- _dereq_( './parse' )
-].forEach( function( props ){
- util.extend( styfn, props );
-} );
-
-
-Style.types = styfn.types;
-Style.properties = styfn.properties;
-
-module.exports = Style;
-
-},{"../is":83,"../selector":87,"../util":100,"./apply":88,"./bypass":89,"./container":90,"./get-for-ele":91,"./json":93,"./parse":94,"./properties":95,"./string-sheet":96}],93:[function(_dereq_,module,exports){
-'use strict';
-
-var styfn = {};
-
-styfn.applyFromJson = function( json ){
- var style = this;
-
- for( var i = 0; i < json.length; i++ ){
- var context = json[ i ];
- var selector = context.selector;
- var props = context.style || context.css;
- var names = Object.keys( props );
-
- style.selector( selector ); // apply selector
-
- for( var j = 0; j < names.length; j++ ){
- var name = names[j];
- var value = props[ name ];
-
- style.css( name, value ); // apply property
- }
- }
-
- return style;
-};
-
-// accessible cy.style() function
-styfn.fromJson = function( json ){
- var style = this;
-
- style.resetToDefault();
- style.applyFromJson( json );
-
- return style;
-};
-
-// get json from cy.style() api
-styfn.json = function(){
- var json = [];
-
- for( var i = this.defaultLength; i < this.length; i++ ){
- var cxt = this[ i ];
- var selector = cxt.selector;
- var props = cxt.properties;
- var css = {};
-
- for( var j = 0; j < props.length; j++ ){
- var prop = props[ j ];
- css[ prop.name ] = prop.strValue;
- }
-
- json.push( {
- selector: !selector ? 'core' : selector.toString(),
- style: css
- } );
- }
-
- return json;
-};
-
-module.exports = styfn;
-
-},{}],94:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../util' );
-var is = _dereq_( '../is' );
-var math = _dereq_( '../math' );
-
-var styfn = {};
-
-// a caching layer for property parsing
-styfn.parse = function( name, value, propIsBypass, propIsFlat ){
- var self = this;
-
- // function values can't be cached in all cases, and there isn't much benefit of caching them anyway
- if( is.fn( value ) ){
- return self.parseImpl( name, value, propIsBypass, propIsFlat );
- }
-
- var argHash = [ name, value, propIsBypass, propIsFlat ].join( '$' );
- var propCache = self.propCache = self.propCache || {};
- var ret;
-
- if( !(ret = propCache[ argHash ]) ){
- ret = propCache[ argHash ] = self.parseImpl( name, value, propIsBypass, propIsFlat );
- }
-
- // always need a copy since props are mutated later in their lifecycles
- ret = util.copy( ret );
-
- if( ret ){
- ret.value = util.copy( ret.value ); // because it could be an array, e.g. colour
- }
-
- return ret;
-};
-
-// parse a property; return null on invalid; return parsed property otherwise
-// fields :
-// - name : the name of the property
-// - value : the parsed, native-typed value of the property
-// - strValue : a string value that represents the property value in valid css
-// - bypass : true iff the property is a bypass property
-var parseImpl = function( name, value, propIsBypass, propIsFlat ){
- var self = this;
-
- name = util.camel2dash( name ); // make sure the property name is in dash form (e.g. 'property-name' not 'propertyName')
-
- var property = self.properties[ name ];
- var passedValue = value;
- var types = self.types;
-
- if( !property ){ return null; } // return null on property of unknown name
- if( value === undefined || value === null ){ return null; } // can't assign null
-
- // the property may be an alias
- if( property.alias ){
- property = property.pointsTo;
- name = property.name;
- }
-
- var valueIsString = is.string( value );
- if( valueIsString ){ // trim the value to make parsing easier
- value = value.trim();
- }
-
- var type = property.type;
- if( !type ){ return null; } // no type, no luck
-
- // check if bypass is null or empty string (i.e. indication to delete bypass property)
- if( propIsBypass && (value === '' || value === null) ){
- return {
- name: name,
- value: value,
- bypass: true,
- deleteBypass: true
- };
- }
-
- // check if value is a function used as a mapper
- if( is.fn( value ) ){
- return {
- name: name,
- value: value,
- strValue: 'fn',
- mapped: types.fn,
- bypass: propIsBypass
- };
- }
-
- // check if value is mapped
- var data, mapData, layoutData, mapLayoutData, scratch, mapScratch;
- if( !valueIsString || propIsFlat ){
- // then don't bother to do the expensive regex checks
-
- } else if(
- ( data = new RegExp( types.data.regex ).exec( value ) ) ||
- ( layoutData = new RegExp( types.layoutData.regex ).exec( value ) ) ||
- ( scratch = new RegExp( types.scratch.regex ).exec( value ) )
- ){
- if( propIsBypass ){ return false; } // mappers not allowed in bypass
-
- var mapped;
- if( data ){
- mapped = types.data;
- } else if( layoutData ){
- mapped = types.layoutData;
- } else {
- mapped = types.scratch;
- }
-
- data = data || layoutData || scratch;
-
- return {
- name: name,
- value: data,
- strValue: '' + value,
- mapped: mapped,
- field: data[1],
- bypass: propIsBypass
- };
-
- } else if(
- ( mapData = new RegExp( types.mapData.regex ).exec( value ) ) ||
- ( mapLayoutData = new RegExp( types.mapLayoutData.regex ).exec( value ) ) ||
- ( mapScratch = new RegExp( types.mapScratch.regex ).exec( value ) )
- ){
- if( propIsBypass ){ return false; } // mappers not allowed in bypass
- if( type.multiple ){ return false; } // impossible to map to num
-
- var mapped;
- if( mapData ){
- mapped = types.mapData;
- } else if( mapLayoutData ){
- mapped = types.mapLayoutData;
- } else {
- mapped = types.mapScratch;
- }
-
- mapData = mapData || mapLayoutData || mapScratch;
-
- // we can map only if the type is a colour or a number
- if( !(type.color || type.number) ){ return false; }
-
- var valueMin = this.parse( name, mapData[4] ); // parse to validate
- if( !valueMin || valueMin.mapped ){ return false; } // can't be invalid or mapped
-
- var valueMax = this.parse( name, mapData[5] ); // parse to validate
- if( !valueMax || valueMax.mapped ){ return false; } // can't be invalid or mapped
-
- // check if valueMin and valueMax are the same
- if( valueMin.value === valueMax.value ){
- return false; // can't make much of a mapper without a range
-
- } else if( type.color ){
- var c1 = valueMin.value;
- var c2 = valueMax.value;
-
- var same = c1[0] === c2[0] // red
- && c1[1] === c2[1] // green
- && c1[2] === c2[2] // blue
- && ( // optional alpha
- c1[3] === c2[3] // same alpha outright
- || (
- (c1[3] == null || c1[3] === 1) // full opacity for colour 1?
- &&
- (c2[3] == null || c2[3] === 1) // full opacity for colour 2?
- )
- )
- ;
-
- if( same ){ return false; } // can't make a mapper without a range
- }
-
- return {
- name: name,
- value: mapData,
- strValue: '' + value,
- mapped: mapped,
- field: mapData[1],
- fieldMin: parseFloat( mapData[2] ), // min & max are numeric
- fieldMax: parseFloat( mapData[3] ),
- valueMin: valueMin.value,
- valueMax: valueMax.value,
- bypass: propIsBypass
- };
- }
-
- if( type.multiple && propIsFlat !== 'multiple' ){
- var vals;
-
- if( valueIsString ){
- vals = value.split( /\s+/ );
- } else if( is.array( value ) ){
- vals = value;
- } else {
- vals = [ value ];
- }
-
- if( type.evenMultiple && vals.length % 2 !== 0 ){ return null; }
-
- var valArr = vals.map( function( v ){
- var p = self.parse( name, v, propIsBypass, 'multiple' );
-
- if( p.pfValue != null ){
- return p.pfValue;
- } else {
- return p.value;
- }
- } );
-
- return {
- name: name,
- value: valArr,
- pfValue: valArr,
- strValue: valArr.join( ' ' ),
- bypass: propIsBypass,
- units: type.number && !type.unitless ? type.implicitUnits || 'px' : undefined
- };
- }
-
- // several types also allow enums
- var checkEnums = function(){
- for( var i = 0; i < type.enums.length; i++ ){
- var en = type.enums[ i ];
-
- if( en === value ){
- return {
- name: name,
- value: value,
- strValue: '' + value,
- bypass: propIsBypass
- };
- }
- }
-
- return null;
- };
-
- // check the type and return the appropriate object
- if( type.number ){
- var units;
- var implicitUnits = 'px'; // not set => px
-
- if( type.units ){ // use specified units if set
- units = type.units;
- }
-
- if( type.implicitUnits ){
- implicitUnits = type.implicitUnits;
- }
-
- if( !type.unitless ){
- if( valueIsString ){
- var unitsRegex = 'px|em' + (type.allowPercent ? '|\\%' : '');
- if( units ){ unitsRegex = units; } // only allow explicit units if so set
- var match = value.match( '^(' + util.regex.number + ')(' + unitsRegex + ')?' + '$' );
-
- if( match ){
- value = match[1];
- units = match[2] || implicitUnits;
- }
-
- } else if( !units || type.implicitUnits ){
- units = implicitUnits; // implicitly px if unspecified
- }
- }
-
- value = parseFloat( value );
-
- // if not a number and enums not allowed, then the value is invalid
- if( isNaN( value ) && type.enums === undefined ){
- return null;
- }
-
- // check if this number type also accepts special keywords in place of numbers
- // (i.e. `left`, `auto`, etc)
- if( isNaN( value ) && type.enums !== undefined ){
- value = passedValue;
-
- return checkEnums();
- }
-
- // check if value must be an integer
- if( type.integer && !is.integer( value ) ){
- return null;
- }
-
- // check value is within range
- if( (type.min !== undefined && value < type.min)
- || (type.max !== undefined && value > type.max)
- ){
- return null;
- }
-
- var ret = {
- name: name,
- value: value,
- strValue: '' + value + (units ? units : ''),
- units: units,
- bypass: propIsBypass
- };
-
- // normalise value in pixels
- if( type.unitless || (units !== 'px' && units !== 'em') ){
- ret.pfValue = value;
- } else {
- ret.pfValue = ( units === 'px' || !units ? (value) : (this.getEmSizeInPixels() * value) );
- }
-
- // normalise value in ms
- if( units === 'ms' || units === 's' ){
- ret.pfValue = units === 'ms' ? value : 1000 * value;
- }
-
- // normalise value in rad
- if( units === 'deg' || units === 'rad' ){
- ret.pfValue = units === 'rad' ? value : math.deg2rad( value );
- }
-
- return ret;
-
- } else if( type.propList ){
-
- var props = [];
- var propsStr = '' + value;
-
- if( propsStr === 'none' ){
- // leave empty
-
- } else { // go over each prop
-
- var propsSplit = propsStr.split( ',' );
- for( var i = 0; i < propsSplit.length; i++ ){
- var propName = propsSplit[ i ].trim();
-
- if( self.properties[ propName ] ){
- props.push( propName );
- }
- }
-
- if( props.length === 0 ){ return null; }
- }
-
- return {
- name: name,
- value: props,
- strValue: props.length === 0 ? 'none' : props.join( ', ' ),
- bypass: propIsBypass
- };
-
- } else if( type.color ){
- var tuple = util.color2tuple( value );
-
- if( !tuple ){ return null; }
-
- return {
- name: name,
- value: tuple,
- strValue: '' + value,
- bypass: propIsBypass,
- roundValue: true
- };
-
- } else if( type.regex || type.regexes ){
-
- // first check enums
- if( type.enums ){
- var enumProp = checkEnums();
-
- if( enumProp ){ return enumProp; }
- }
-
- var regexes = type.regexes ? type.regexes : [ type.regex ];
-
- for( var i = 0; i < regexes.length; i++ ){
- var regex = new RegExp( regexes[ i ] ); // make a regex from the type string
- var m = regex.exec( value );
-
- if( m ){ // regex matches
- return {
- name: name,
- value: m,
- strValue: '' + value,
- bypass: propIsBypass
- };
-
- }
- }
-
- return null; // didn't match any
-
- } else if( type.string ){
- // just return
- return {
- name: name,
- value: value,
- strValue: '' + value,
- bypass: propIsBypass
- };
-
- } else if( type.enums ){ // check enums last because it's a combo type in others
- return checkEnums();
-
- } else {
- return null; // not a type we can handle
- }
-
-};
-styfn.parseImpl = parseImpl;
-
-module.exports = styfn;
-
-},{"../is":83,"../math":85,"../util":100}],95:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../util' );
-
-var styfn = {};
-
-(function(){
- var number = util.regex.number;
- var rgba = util.regex.rgbaNoBackRefs;
- var hsla = util.regex.hslaNoBackRefs;
- var hex3 = util.regex.hex3;
- var hex6 = util.regex.hex6;
- var data = function( prefix ){ return '^' + prefix + '\\s*\\(\\s*([\\w\\.]+)\\s*\\)$'; };
- var mapData = function( prefix ){
- var mapArg = number + '|\\w+|' + rgba + '|' + hsla + '|' + hex3 + '|' + hex6;
- return '^' + prefix + '\\s*\\(([\\w\\.]+)\\s*\\,\\s*(' + number + ')\\s*\\,\\s*(' + number + ')\\s*,\\s*(' + mapArg + ')\\s*\\,\\s*(' + mapArg + ')\\)$';
- };
-
- // each visual style property has a type and needs to be validated according to it
- styfn.types = {
- time: { number: true, min: 0, units: 's|ms', implicitUnits: 'ms' },
- percent: { number: true, min: 0, max: 100, units: '%', implicitUnits: '%' },
- zeroOneNumber: { number: true, min: 0, max: 1, unitless: true },
- nOneOneNumber: { number: true, min: -1, max: 1, unitless: true },
- nonNegativeInt: { number: true, min: 0, integer: true, unitless: true },
- position: { enums: [ 'parent', 'origin' ] },
- nodeSize: { number: true, min: 0, enums: [ 'label' ] },
- number: { number: true, unitless: true },
- numbers: { number: true, unitless: true, multiple: true },
- size: { number: true, min: 0 },
- bidirectionalSize: { number: true }, // allows negative
- bidirectionalSizes: { number: true, multiple: true }, // allows negative
- bgSize: { number: true, min: 0, allowPercent: true },
- bgWH: { number: true, min: 0, allowPercent: true, enums: [ 'auto' ] },
- bgPos: { number: true, allowPercent: true },
- bgRepeat: { enums: [ 'repeat', 'repeat-x', 'repeat-y', 'no-repeat' ] },
- bgFit: { enums: [ 'none', 'contain', 'cover' ] },
- bgClip: { enums: [ 'none', 'node' ] },
- color: { color: true },
- bool: { enums: [ 'yes', 'no' ] },
- lineStyle: { enums: [ 'solid', 'dotted', 'dashed' ] },
- borderStyle: { enums: [ 'solid', 'dotted', 'dashed', 'double' ] },
- curveStyle: { enums: [ 'bezier', 'unbundled-bezier', 'haystack', 'segments' ] },
- fontFamily: { regex: '^([\\w- \\"]+(?:\\s*,\\s*[\\w- \\"]+)*)$' },
- fontVariant: { enums: [ 'small-caps', 'normal' ] },
- fontStyle: { enums: [ 'italic', 'normal', 'oblique' ] },
- fontWeight: { enums: [ 'normal', 'bold', 'bolder', 'lighter', '100', '200', '300', '400', '500', '600', '800', '900', 100, 200, 300, 400, 500, 600, 700, 800, 900 ] },
- textDecoration: { enums: [ 'none', 'underline', 'overline', 'line-through' ] },
- textTransform: { enums: [ 'none', 'uppercase', 'lowercase' ] },
- textWrap: { enums: [ 'none', 'wrap' ] },
- textBackgroundShape: { enums: [ 'rectangle', 'roundrectangle' ]},
- nodeShape: { enums: [ 'rectangle', 'roundrectangle', 'ellipse', 'triangle', 'square', 'pentagon', 'hexagon', 'heptagon', 'octagon', 'star', 'diamond', 'vee', 'rhomboid', 'polygon' ] },
- compoundIncludeLabels: { enums: [ 'include', 'exclude' ] },
- arrowShape: { enums: [ 'tee', 'triangle', 'triangle-tee', 'triangle-backcurve', 'half-triangle-overshot', 'vee', 'square', 'circle', 'diamond', 'none' ] },
- arrowFill: { enums: [ 'filled', 'hollow' ] },
- display: { enums: [ 'element', 'none' ] },
- visibility: { enums: [ 'hidden', 'visible' ] },
- valign: { enums: [ 'top', 'center', 'bottom' ] },
- halign: { enums: [ 'left', 'center', 'right' ] },
- text: { string: true },
- data: { mapping: true, regex: data( 'data' ) },
- layoutData: { mapping: true, regex: data( 'layoutData' ) },
- scratch: { mapping: true, regex: data( 'scratch' ) },
- mapData: { mapping: true, regex: mapData( 'mapData' ) },
- mapLayoutData: { mapping: true, regex: mapData( 'mapLayoutData' ) },
- mapScratch: { mapping: true, regex: mapData( 'mapScratch' ) },
- fn: { mapping: true, fn: true },
- url: { regex: '^url\\s*\\(\\s*([^\\s]+)\\s*\\s*\\)|none|(.+)$' },
- propList: { propList: true },
- angle: { number: true, units: 'deg|rad', implicitUnits: 'rad' },
- textRotation: { number: true, units: 'deg|rad', implicitUnits: 'rad', enums: [ 'none', 'autorotate' ] },
- polygonPointList: { number: true, multiple: true, evenMultiple: true, min: -1, max: 1, unitless: true },
- edgeDistances: { enums: ['intersection', 'node-position'] },
- easing: {
- regexes: [
- '^(spring)\\s*\\(\\s*(' + number + ')\\s*,\\s*(' + number + ')\\s*\\)$',
- '^(cubic-bezier)\\s*\\(\\s*(' + number + ')\\s*,\\s*(' + number + ')\\s*,\\s*(' + number + ')\\s*,\\s*(' + number + ')\\s*\\)$'
- ],
- enums: [
- 'linear',
- 'ease', 'ease-in', 'ease-out', 'ease-in-out',
- 'ease-in-sine', 'ease-out-sine', 'ease-in-out-sine',
- 'ease-in-quad', 'ease-out-quad', 'ease-in-out-quad',
- 'ease-in-cubic', 'ease-out-cubic', 'ease-in-out-cubic',
- 'ease-in-quart', 'ease-out-quart', 'ease-in-out-quart',
- 'ease-in-quint', 'ease-out-quint', 'ease-in-out-quint',
- 'ease-in-expo', 'ease-out-expo', 'ease-in-out-expo',
- 'ease-in-circ', 'ease-out-circ', 'ease-in-out-circ'
- ]
- }
- };
-
- // define visual style properties
- var t = styfn.types;
- var props = styfn.properties = [
- // main label
- { name: 'label', type: t.text },
- { name: 'text-rotation', type: t.textRotation },
- { name: 'text-margin-x', type: t.bidirectionalSize },
- { name: 'text-margin-y', type: t.bidirectionalSize },
-
- // source label
- { name: 'source-label', type: t.text },
- { name: 'source-text-rotation', type: t.textRotation },
- { name: 'source-text-margin-x', type: t.bidirectionalSize },
- { name: 'source-text-margin-y', type: t.bidirectionalSize },
- { name: 'source-text-offset', type: t.size },
-
- // target label
- { name: 'target-label', type: t.text },
- { name: 'target-text-rotation', type: t.textRotation },
- { name: 'target-text-margin-x', type: t.bidirectionalSize },
- { name: 'target-text-margin-y', type: t.bidirectionalSize },
- { name: 'target-text-offset', type: t.size },
-
- // common label style
- { name: 'text-valign', type: t.valign },
- { name: 'text-halign', type: t.halign },
- { name: 'color', type: t.color },
- { name: 'text-outline-color', type: t.color },
- { name: 'text-outline-width', type: t.size },
- { name: 'text-outline-opacity', type: t.zeroOneNumber },
- { name: 'text-opacity', type: t.zeroOneNumber },
- { name: 'text-background-color', type: t.color },
- { name: 'text-background-margin', type: t.size },
- { name: 'text-background-opacity', type: t.zeroOneNumber },
- { name: 'text-border-opacity', type: t.zeroOneNumber },
- { name: 'text-border-color', type: t.color },
- { name: 'text-border-width', type: t.size },
- { name: 'text-border-style', type: t.borderStyle },
- { name: 'text-background-shape', type: t.textBackgroundShape},
- // { name: 'text-decoration', type: t.textDecoration }, // not supported in canvas
- { name: 'text-transform', type: t.textTransform },
- { name: 'text-wrap', type: t.textWrap },
- { name: 'text-max-width', type: t.size },
- { name: 'text-events', type: t.bool },
- { name: 'font-family', type: t.fontFamily },
- { name: 'font-style', type: t.fontStyle },
- // { name: 'font-variant', type: t.fontVariant }, // not useful
- { name: 'font-weight', type: t.fontWeight },
- { name: 'font-size', type: t.size },
- { name: 'min-zoomed-font-size', type: t.size },
-
- // behaviour
- { name: 'events', type: t.bool },
-
- // visibility
- { name: 'display', type: t.display },
- { name: 'visibility', type: t.visibility },
- { name: 'opacity', type: t.zeroOneNumber },
- { name: 'z-index', type: t.nonNegativeInt },
-
- // overlays
- { name: 'overlay-padding', type: t.size },
- { name: 'overlay-color', type: t.color },
- { name: 'overlay-opacity', type: t.zeroOneNumber },
-
- // shadows
- { name: 'shadow-blur', type: t.size },
- { name: 'shadow-color', type: t.color },
- { name: 'shadow-opacity', type: t.zeroOneNumber },
- { name: 'shadow-offset-x', type: t.bidirectionalSize },
- { name: 'shadow-offset-y', type: t.bidirectionalSize },
-
- // label shadows
- { name: 'text-shadow-blur', type: t.size },
- { name: 'text-shadow-color', type: t.color },
- { name: 'text-shadow-opacity', type: t.zeroOneNumber },
- { name: 'text-shadow-offset-x', type: t.bidirectionalSize },
- { name: 'text-shadow-offset-y', type: t.bidirectionalSize },
-
- // transition anis
- { name: 'transition-property', type: t.propList },
- { name: 'transition-duration', type: t.time },
- { name: 'transition-delay', type: t.time },
- { name: 'transition-timing-function', type: t.easing },
-
- // node body
- { name: 'height', type: t.nodeSize },
- { name: 'width', type: t.nodeSize },
- { name: 'shape', type: t.nodeShape },
- { name: 'shape-polygon-points', type: t.polygonPointList },
- { name: 'background-color', type: t.color },
- { name: 'background-opacity', type: t.zeroOneNumber },
- { name: 'background-blacken', type: t.nOneOneNumber },
- { name: 'padding-left', type: t.size },
- { name: 'padding-right', type: t.size },
- { name: 'padding-top', type: t.size },
- { name: 'padding-bottom', type: t.size },
-
- // node border
- { name: 'border-color', type: t.color },
- { name: 'border-opacity', type: t.zeroOneNumber },
- { name: 'border-width', type: t.size },
- { name: 'border-style', type: t.borderStyle },
-
- // node background images
- { name: 'background-image', type: t.url },
- { name: 'background-image-opacity', type: t.zeroOneNumber },
- { name: 'background-position-x', type: t.bgPos },
- { name: 'background-position-y', type: t.bgPos },
- { name: 'background-repeat', type: t.bgRepeat },
- { name: 'background-fit', type: t.bgFit },
- { name: 'background-clip', type: t.bgClip },
- { name: 'background-width', type: t.bgWH },
- { name: 'background-height', type: t.bgWH },
-
- // compound props
- { name: 'position', type: t.position },
- { name: 'compound-sizing-wrt-labels', type: t.compoundIncludeLabels },
-
- // edge line
- { name: 'line-style', type: t.lineStyle },
- { name: 'line-color', type: t.color },
- { name: 'curve-style', type: t.curveStyle },
- { name: 'haystack-radius', type: t.zeroOneNumber },
- { name: 'control-point-step-size', type: t.size },
- { name: 'control-point-distances', type: t.bidirectionalSizes },
- { name: 'control-point-weights', type: t.numbers },
- { name: 'segment-distances', type: t.bidirectionalSizes },
- { name: 'segment-weights', type: t.numbers },
- { name: 'edge-distances', type: t.edgeDistances },
-
- // these are just for the core
- { name: 'selection-box-color', type: t.color },
- { name: 'selection-box-opacity', type: t.zeroOneNumber },
- { name: 'selection-box-border-color', type: t.color },
- { name: 'selection-box-border-width', type: t.size },
- { name: 'active-bg-color', type: t.color },
- { name: 'active-bg-opacity', type: t.zeroOneNumber },
- { name: 'active-bg-size', type: t.size },
- { name: 'outside-texture-bg-color', type: t.color },
- { name: 'outside-texture-bg-opacity', type: t.zeroOneNumber }
- ];
-
- // define aliases
- var aliases = styfn.aliases = [
- { name: 'content', pointsTo: 'label' },
- { name: 'control-point-distance', pointsTo: 'control-point-distances' },
- { name: 'control-point-weight', pointsTo: 'control-point-weights' },
- { name: 'edge-text-rotation', pointsTo: 'text-rotation' }
- ];
-
- // pie backgrounds for nodes
- styfn.pieBackgroundN = 16; // because the pie properties are numbered, give access to a constant N (for renderer use)
- props.push( { name: 'pie-size', type: t.bgSize } );
- for( var i = 1; i <= styfn.pieBackgroundN; i++ ){
- props.push( { name: 'pie-' + i + '-background-color', type: t.color } );
- props.push( { name: 'pie-' + i + '-background-size', type: t.percent } );
- props.push( { name: 'pie-' + i + '-background-opacity', type: t.zeroOneNumber } );
- }
-
- // edge arrows
- var arrowPrefixes = styfn.arrowPrefixes = [ 'source', 'mid-source', 'target', 'mid-target' ];
- [
- { name: 'arrow-shape', type: t.arrowShape },
- { name: 'arrow-color', type: t.color },
- { name: 'arrow-fill', type: t.arrowFill }
- ].forEach( function( prop ){
- arrowPrefixes.forEach( function( prefix ){
- var name = prefix + '-' + prop.name;
- var type = prop.type;
-
- props.push( { name: name, type: type } );
- } );
- }, {} );
-
- // list of property names
- styfn.propertyNames = props.map( function( p ){ return p.name; } );
-
- // allow access of properties by name ( e.g. style.properties.height )
- for( var i = 0; i < props.length; i++ ){
- var prop = props[ i ];
-
- props[ prop.name ] = prop; // allow lookup by name
- }
-
- // map aliases
- for( var i = 0; i < aliases.length; i++ ){
- var alias = aliases[ i ];
- var pointsToProp = props[ alias.pointsTo ];
- var aliasProp = {
- name: alias.name,
- alias: true,
- pointsTo: pointsToProp
- };
-
- // add alias prop for parsing
- props.push( aliasProp );
-
- props[ alias.name ] = aliasProp; // allow lookup by name
- }
-})();
-
-styfn.getDefaultProperty = function( name ){
- return this.getDefaultProperties()[ name ];
-};
-
-styfn.getDefaultProperties = util.memoize( function(){
- var rawProps = util.extend( {
- 'events': 'yes',
- 'text-events': 'no',
- 'text-valign': 'top',
- 'text-halign': 'center',
- 'color': '#000',
- 'text-outline-color': '#000',
- 'text-outline-width': 0,
- 'text-outline-opacity': 1,
- 'text-opacity': 1,
- 'text-decoration': 'none',
- 'text-transform': 'none',
- 'text-wrap': 'none',
- 'text-max-width': 9999,
- 'text-background-color': '#000',
- 'text-background-opacity': 0,
- 'text-background-margin': 0,
- 'text-border-opacity': 0,
- 'text-border-width': 0,
- 'text-border-style': 'solid',
- 'text-border-color': '#000',
- 'text-background-shape': 'rectangle',
- 'font-family': 'Helvetica Neue, Helvetica, sans-serif',
- 'font-style': 'normal',
- // 'font-variant': fontVariant,
- 'font-weight': 'normal',
- 'font-size': 16,
- 'min-zoomed-font-size': 0,
- 'text-rotation': 'none',
- 'source-text-rotation': 'none',
- 'target-text-rotation': 'none',
- 'visibility': 'visible',
- 'display': 'element',
- 'opacity': 1,
- 'z-index': 0,
- 'label': '',
- 'text-margin-x': 0,
- 'text-margin-y': 0,
- 'source-label': '',
- 'source-text-offset': 0,
- 'source-text-margin-x': 0,
- 'source-text-margin-y': 0,
- 'target-label': '',
- 'target-text-offset': 0,
- 'target-text-margin-x': 0,
- 'target-text-margin-y': 0,
- 'overlay-opacity': 0,
- 'overlay-color': '#000',
- 'overlay-padding': 10,
- 'shadow-opacity': 0,
- 'shadow-color': '#000',
- 'shadow-blur': 10,
- 'shadow-offset-x': 0,
- 'shadow-offset-y': 0,
- 'text-shadow-opacity': 0,
- 'text-shadow-color': '#000',
- 'text-shadow-blur': 5,
- 'text-shadow-offset-x': 0,
- 'text-shadow-offset-y': 0,
- 'transition-property': 'none',
- 'transition-duration': 0,
- 'transition-delay': 0,
- 'transition-timing-function': 'linear',
-
- // node props
- 'background-blacken': 0,
- 'background-color': '#999',
- 'background-opacity': 1,
- 'background-image': 'none',
- 'background-image-opacity': 1,
- 'background-position-x': '50%',
- 'background-position-y': '50%',
- 'background-repeat': 'no-repeat',
- 'background-fit': 'none',
- 'background-clip': 'node',
- 'background-width': 'auto',
- 'background-height': 'auto',
- 'border-color': '#000',
- 'border-opacity': 1,
- 'border-width': 0,
- 'border-style': 'solid',
- 'height': 30,
- 'width': 30,
- 'shape': 'ellipse',
- 'shape-polygon-points': '-1, -1, 1, -1, 1, 1, -1, 1',
-
- // compound props
- 'padding-top': 0,
- 'padding-bottom': 0,
- 'padding-left': 0,
- 'padding-right': 0,
- 'position': 'origin',
- 'compound-sizing-wrt-labels': 'include'
- }, {
- // node pie bg
- 'pie-size': '100%'
- }, [
- { name: 'pie-{{i}}-background-color', value: 'black' },
- { name: 'pie-{{i}}-background-size', value: '0%' },
- { name: 'pie-{{i}}-background-opacity', value: 1 }
- ].reduce( function( css, prop ){
- for( var i = 1; i <= styfn.pieBackgroundN; i++ ){
- var name = prop.name.replace( '{{i}}', i );
- var val = prop.value;
-
- css[ name ] = val;
- }
-
- return css;
- }, {} ), {
- // edge props
- 'line-style': 'solid',
- 'line-color': '#999',
- 'control-point-step-size': 40,
- 'control-point-weights': 0.5,
- 'segment-weights': 0.5,
- 'segment-distances': 20,
- 'edge-distances': 'intersection',
- 'curve-style': 'bezier',
- 'haystack-radius': 0
- }, [
- { name: 'arrow-shape', value: 'none' },
- { name: 'arrow-color', value: '#999' },
- { name: 'arrow-fill', value: 'filled' }
- ].reduce( function( css, prop ){
- styfn.arrowPrefixes.forEach( function( prefix ){
- var name = prefix + '-' + prop.name;
- var val = prop.value;
-
- css[ name ] = val;
- } );
-
- return css;
- }, {} ) );
-
- var parsedProps = {};
-
- for( var i = 0; i < this.properties.length; i++ ){
- var prop = this.properties[i];
-
- if( prop.pointsTo ){ continue; }
-
- var name = prop.name;
- var val = rawProps[ name ];
- var parsedProp = this.parse( name, val );
-
- parsedProps[ name ] = parsedProp;
- }
-
- return parsedProps;
-} );
-
-styfn.addDefaultStylesheet = function(){
- this
- .selector( '$node > node' ) // compound (parent) node properties
- .css( {
- 'shape': 'rectangle',
- 'padding-top': 10,
- 'padding-right': 10,
- 'padding-left': 10,
- 'padding-bottom': 10,
- 'background-color': '#eee',
- 'border-color': '#ccc',
- 'border-width': 1
- } )
- .selector( 'edge' ) // just edge properties
- .css( {
- 'width': 3,
- 'curve-style': 'haystack'
- } )
- .selector( ':selected' )
- .css( {
- 'background-color': '#0169D9',
- 'line-color': '#0169D9',
- 'source-arrow-color': '#0169D9',
- 'target-arrow-color': '#0169D9',
- 'mid-source-arrow-color': '#0169D9',
- 'mid-target-arrow-color': '#0169D9'
- } )
- .selector( 'node:parent:selected' )
- .css( {
- 'background-color': '#CCE1F9',
- 'border-color': '#aec8e5'
- } )
- .selector( ':active' )
- .css( {
- 'overlay-color': 'black',
- 'overlay-padding': 10,
- 'overlay-opacity': 0.25
- } )
- .selector( 'core' ) // just core properties
- .css( {
- 'selection-box-color': '#ddd',
- 'selection-box-opacity': 0.65,
- 'selection-box-border-color': '#aaa',
- 'selection-box-border-width': 1,
- 'active-bg-color': 'black',
- 'active-bg-opacity': 0.15,
- 'active-bg-size': 30,
- 'outside-texture-bg-color': '#000',
- 'outside-texture-bg-opacity': 0.125
- } )
- ;
-
- this.defaultLength = this.length;
-};
-
-module.exports = styfn;
-
-},{"../util":100}],96:[function(_dereq_,module,exports){
-'use strict';
-
-var util = _dereq_( '../util' );
-var Selector = _dereq_( '../selector' );
-
-var styfn = {};
-
-styfn.applyFromString = function( string ){
- var self = this;
- var style = this;
- var remaining = '' + string;
- var selAndBlockStr;
- var blockRem;
- var propAndValStr;
-
- // remove comments from the style string
- remaining = remaining.replace( /[/][*](\s|.)+?[*][/]/g, '' );
-
- function removeSelAndBlockFromRemaining(){
- // remove the parsed selector and block from the remaining text to parse
- if( remaining.length > selAndBlockStr.length ){
- remaining = remaining.substr( selAndBlockStr.length );
- } else {
- remaining = '';
- }
- }
-
- function removePropAndValFromRem(){
- // remove the parsed property and value from the remaining block text to parse
- if( blockRem.length > propAndValStr.length ){
- blockRem = blockRem.substr( propAndValStr.length );
- } else {
- blockRem = '';
- }
- }
-
- while( true ){
- var nothingLeftToParse = remaining.match( /^\s*$/ );
- if( nothingLeftToParse ){ break; }
-
- var selAndBlock = remaining.match( /^\s*((?:.|\s)+?)\s*\{((?:.|\s)+?)\}/ );
-
- if( !selAndBlock ){
- util.error( 'Halting stylesheet parsing: String stylesheet contains more to parse but no selector and block found in: ' + remaining );
- break;
- }
-
- selAndBlockStr = selAndBlock[0];
-
- // parse the selector
- var selectorStr = selAndBlock[1];
- if( selectorStr !== 'core' ){
- var selector = new Selector( selectorStr );
- if( selector._private.invalid ){
- util.error( 'Skipping parsing of block: Invalid selector found in string stylesheet: ' + selectorStr );
-
- // skip this selector and block
- removeSelAndBlockFromRemaining();
- continue;
- }
- }
-
- // parse the block of properties and values
- var blockStr = selAndBlock[2];
- var invalidBlock = false;
- blockRem = blockStr;
- var props = [];
-
- while( true ){
- var nothingLeftToParse = blockRem.match( /^\s*$/ );
- if( nothingLeftToParse ){ break; }
-
- var propAndVal = blockRem.match( /^\s*(.+?)\s*:\s*(.+?)\s*;/ );
-
- if( !propAndVal ){
- util.error( 'Skipping parsing of block: Invalid formatting of style property and value definitions found in:' + blockStr );
- invalidBlock = true;
- break;
- }
-
- propAndValStr = propAndVal[0];
- var propStr = propAndVal[1];
- var valStr = propAndVal[2];
-
- var prop = self.properties[ propStr ];
- if( !prop ){
- util.error( 'Skipping property: Invalid property name in: ' + propAndValStr );
-
- // skip this property in the block
- removePropAndValFromRem();
- continue;
- }
-
- var parsedProp = style.parse( propStr, valStr );
-
- if( !parsedProp ){
- util.error( 'Skipping property: Invalid property definition in: ' + propAndValStr );
-
- // skip this property in the block
- removePropAndValFromRem();
- continue;
- }
-
- props.push( {
- name: propStr,
- val: valStr
- } );
- removePropAndValFromRem();
- }
-
- if( invalidBlock ){
- removeSelAndBlockFromRemaining();
- break;
- }
-
- // put the parsed block in the style
- style.selector( selectorStr );
- for( var i = 0; i < props.length; i++ ){
- var prop = props[ i ];
- style.css( prop.name, prop.val );
- }
-
- removeSelAndBlockFromRemaining();
- }
-
- return style;
-};
-
-styfn.fromString = function( string ){
- var style = this;
-
- style.resetToDefault();
- style.applyFromString( string );
-
- return style;
-};
-
-module.exports = styfn;
-
-},{"../selector":87,"../util":100}],97:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( './is' );
-var util = _dereq_( './util' );
-var Style = _dereq_( './style' );
-
-// a dummy stylesheet object that doesn't need a reference to the core
-// (useful for init)
-var Stylesheet = function(){
- if( !(this instanceof Stylesheet) ){
- return new Stylesheet();
- }
-
- this.length = 0;
-};
-
-var sheetfn = Stylesheet.prototype;
-
-sheetfn.instanceString = function(){
- return 'stylesheet';
-};
-
-// just store the selector to be parsed later
-sheetfn.selector = function( selector ){
- var i = this.length++;
-
- this[ i ] = {
- selector: selector,
- properties: []
- };
-
- return this; // chaining
-};
-
-// just store the property to be parsed later
-sheetfn.css = function( name, value ){
- var i = this.length - 1;
-
- if( is.string( name ) ){
- this[ i ].properties.push( {
- name: name,
- value: value
- } );
- } else if( is.plainObject( name ) ){
- var map = name;
-
- for( var j = 0; j < Style.properties.length; j++ ){
- var prop = Style.properties[ j ];
- var mapVal = map[ prop.name ];
-
- if( mapVal === undefined ){ // also try camel case name
- mapVal = map[ util.dash2camel( prop.name ) ];
- }
-
- if( mapVal !== undefined ){
- var name = prop.name;
- var value = mapVal;
-
- this[ i ].properties.push( {
- name: name,
- value: value
- } );
- }
- }
- }
-
- return this; // chaining
-};
-
-sheetfn.style = sheetfn.css;
-
-// generate a real style object from the dummy stylesheet
-sheetfn.generateStyle = function( cy ){
- var style = new Style( cy );
-
- for( var i = 0; i < this.length; i++ ){
- var context = this[ i ];
- var selector = context.selector;
- var props = context.properties;
-
- style.selector( selector ); // apply selector
-
- for( var j = 0; j < props.length; j++ ){
- var prop = props[ j ];
-
- style.css( prop.name, prop.value ); // apply property
- }
- }
-
- return style;
-};
-
-module.exports = Stylesheet;
-
-},{"./is":83,"./style":92,"./util":100}],98:[function(_dereq_,module,exports){
-/*! Weaver licensed under MIT (https://tldrlegal.com/license/mit-license), copyright Max Franz */
-
-// cross-env thread/worker
-// NB : uses (heavyweight) processes on nodejs so best not to create too many threads
-
-'use strict';
-
-var window = _dereq_('./window');
-var util = _dereq_('./util');
-var Promise = _dereq_('./promise');
-var Event = _dereq_('./event');
-var define = _dereq_('./define');
-var is = _dereq_('./is');
-
-var Thread = function( opts ){
- if( !(this instanceof Thread) ){
- return new Thread( opts );
- }
-
- var _p = this._private = {
- requires: [],
- files: [],
- queue: null,
- pass: [],
- disabled: false
- };
-
- if( is.plainObject(opts) ){
- if( opts.disabled != null ){
- _p.disabled = !!opts.disabled;
- }
- }
-
-};
-
-var thdfn = Thread.prototype; // short alias
-
-var stringifyFieldVal = function( val ){
- var valStr = is.fn( val ) ? val.toString() : "JSON.parse('" + JSON.stringify(val) + "')";
-
- return valStr;
-};
-
-// allows for requires with prototypes and subobjs etc
-var fnAsRequire = function( fn ){
- var req;
- var fnName;
-
- if( is.object(fn) && fn.fn ){ // manual fn
- req = fnAs( fn.fn, fn.name );
- fnName = fn.name;
- fn = fn.fn;
- } else if( is.fn(fn) ){ // auto fn
- req = fn.toString();
- fnName = fn.name;
- } else if( is.string(fn) ){ // stringified fn
- req = fn;
- } else if( is.object(fn) ){ // plain object
- if( fn.proto ){
- req = '';
- } else {
- req = fn.name + ' = {};';
- }
-
- fnName = fn.name;
- fn = fn.obj;
- }
-
- req += '\n';
-
- var protoreq = function( val, subname ){
- if( val.prototype ){
- var protoNonempty = false;
- for( var prop in val.prototype ){ protoNonempty = true; break; } // jshint ignore:line
-
- if( protoNonempty ){
- req += fnAsRequire( {
- name: subname,
- obj: val,
- proto: true
- }, val );
- }
- }
- };
-
- // pull in prototype
- if( fn.prototype && fnName != null ){
-
- for( var name in fn.prototype ){
- var protoStr = '';
-
- var val = fn.prototype[ name ];
- var valStr = stringifyFieldVal( val );
- var subname = fnName + '.prototype.' + name;
-
- protoStr += subname + ' = ' + valStr + ';\n';
-
- if( protoStr ){
- req += protoStr;
- }
-
- protoreq( val, subname ); // subobject with prototype
- }
-
- }
-
- // pull in properties for obj/fns
- if( !is.string(fn) ){ for( var name in fn ){
- var propsStr = '';
-
- if( fn.hasOwnProperty(name) ){
- var val = fn[ name ];
- var valStr = stringifyFieldVal( val );
- var subname = fnName + '["' + name + '"]';
-
- propsStr += subname + ' = ' + valStr + ';\n';
- }
-
- if( propsStr ){
- req += propsStr;
- }
-
- protoreq( val, subname ); // subobject with prototype
- } }
-
- return req;
-};
-
-var isPathStr = function( str ){
- return is.string(str) && str.match(/\.js$/);
-};
-
-util.extend(thdfn, {
-
- instanceString: function(){ return 'thread'; },
-
- require: function( fn, as ){
- var requires = this._private.requires;
-
- if( isPathStr(fn) ){
- this._private.files.push( fn );
-
- return this;
- }
-
- if( as ){
- if( is.fn(fn) ){
- fn = { name: as, fn: fn };
- } else {
- fn = { name: as, obj: fn };
- }
- } else {
- if( is.fn(fn) ){
- if( !fn.name ){
- throw 'The function name could not be automatically determined. Use thread.require( someFunction, "someFunction" )';
- }
-
- fn = { name: fn.name, fn: fn };
- }
- }
-
- requires.push( fn );
-
- return this; // chaining
- },
-
- pass: function( data ){
- this._private.pass.push( data );
-
- return this; // chaining
- },
-
- run: function( fn, pass ){ // fn used like main()
- var self = this;
- var _p = this._private;
- pass = pass || _p.pass.shift();
-
- if( _p.stopped ){
- throw 'Attempted to run a stopped thread! Start a new thread or do not stop the existing thread and reuse it.';
- }
-
- if( _p.running ){
- return ( _p.queue = _p.queue.then(function(){ // inductive step
- return self.run( fn, pass );
- }) );
- }
-
- var useWW = window != null && !_p.disabled;
- var useNode = !window && typeof module !== 'undefined' && !_p.disabled;
-
- self.trigger('run');
-
- var runP = new Promise(function( resolve, reject ){
-
- _p.running = true;
-
- var threadTechAlreadyExists = _p.ran;
-
- var fnImplStr = is.string( fn ) ? fn : fn.toString();
-
- // worker code to exec
- var fnStr = '\n' + ( _p.requires.map(function( r ){
- return fnAsRequire( r );
- }) ).concat( _p.files.map(function( f ){
- if( useWW ){
- var wwifyFile = function( file ){
- if( file.match(/^\.\//) || file.match(/^\.\./) ){
- return window.location.origin + window.location.pathname + file;
- } else if( file.match(/^\//) ){
- return window.location.origin + '/' + file;
- }
- return file;
- };
-
- return 'importScripts("' + wwifyFile(f) + '");';
- } else if( useNode ) {
- return 'eval( require("fs").readFileSync("' + f + '", { encoding: "utf8" }) );';
- } else {
- throw 'External file `' + f + '` can not be required without any threading technology.';
- }
- }) ).concat([
- '( function(){',
- 'var ret = (' + fnImplStr + ')(' + JSON.stringify(pass) + ');',
- 'if( ret !== undefined ){ resolve(ret); }', // assume if ran fn returns defined value (incl. null), that we want to resolve to it
- '} )()\n'
- ]).join('\n');
-
- // because we've now consumed the requires, empty the list so we don't dupe on next run()
- _p.requires = [];
- _p.files = [];
-
- if( useWW ){
- var fnBlob, fnUrl;
-
- // add normalised thread api functions
- if( !threadTechAlreadyExists ){
- var fnPre = fnStr + '';
-
- fnStr = [
- 'function _ref_(o){ return eval(o); };',
- 'function broadcast(m){ return message(m); };', // alias
- 'function message(m){ postMessage(m); };',
- 'function listen(fn){',
- ' self.addEventListener("message", function(m){ ',
- ' if( typeof m === "object" && (m.data.$$eval || m.data === "$$start") ){',
- ' } else { ',
- ' fn( m.data );',
- ' }',
- ' });',
- '};',
- 'self.addEventListener("message", function(m){ if( m.data.$$eval ){ eval( m.data.$$eval ); } });',
- 'function resolve(v){ postMessage({ $$resolve: v }); };',
- 'function reject(v){ postMessage({ $$reject: v }); };'
- ].join('\n');
-
- fnStr += fnPre;
-
- fnBlob = new Blob([ fnStr ], {
- type: 'application/javascript'
- });
- fnUrl = window.URL.createObjectURL( fnBlob );
- }
- // create webworker and let it exec the serialised code
- var ww = _p.webworker = _p.webworker || new Worker( fnUrl );
-
- if( threadTechAlreadyExists ){ // then just exec new run() code
- ww.postMessage({
- $$eval: fnStr
- });
- }
-
- // worker messages => events
- var cb;
- ww.addEventListener('message', cb = function( m ){
- var isObject = is.object(m) && is.object( m.data );
-
- if( isObject && ('$$resolve' in m.data) ){
- ww.removeEventListener('message', cb); // done listening b/c resolve()
-
- resolve( m.data.$$resolve );
- } else if( isObject && ('$$reject' in m.data) ){
- ww.removeEventListener('message', cb); // done listening b/c reject()
-
- reject( m.data.$$reject );
- } else {
- self.trigger( new Event(m, { type: 'message', message: m.data }) );
- }
- }, false);
-
- if( !threadTechAlreadyExists ){
- ww.postMessage('$$start'); // start up the worker
- }
-
- } else if( useNode ){
- // create a new process
-
- if( !_p.child ){
- _p.child = ( _dereq_('child_process').fork( _dereq_('path').join(__dirname, 'thread-node-fork') ) );
- }
-
- var child = _p.child;
-
- // child process messages => events
- var cb;
- child.on('message', cb = function( m ){
- if( is.object(m) && ('$$resolve' in m) ){
- child.removeListener('message', cb); // done listening b/c resolve()
-
- resolve( m.$$resolve );
- } else if( is.object(m) && ('$$reject' in m) ){
- child.removeListener('message', cb); // done listening b/c reject()
-
- reject( m.$$reject );
- } else {
- self.trigger( new Event({}, { type: 'message', message: m }) );
- }
- });
-
- // ask the child process to eval the worker code
- child.send({
- $$eval: fnStr
- });
-
- } else { // use a fallback mechanism using a timeout
-
- var promiseResolve = resolve;
- var promiseReject = reject;
-
- var timer = _p.timer = _p.timer || {
-
- listeners: [],
-
- exec: function(){
- // as a string so it can't be mangled by minifiers and processors
- fnStr = [
- 'function _ref_(o){ return eval(o); };',
- 'function broadcast(m){ return message(m); };',
- 'function message(m){ self.trigger( new Event({}, { type: "message", message: m }) ); };',
- 'function listen(fn){ timer.listeners.push( fn ); };',
- 'function resolve(v){ promiseResolve(v); };',
- 'function reject(v){ promiseReject(v); };'
- ].join('\n') + fnStr;
-
- // the .run() code
- eval( fnStr ); // jshint ignore:line
- },
-
- message: function( m ){
- var ls = timer.listeners;
-
- for( var i = 0; i < ls.length; i++ ){
- var fn = ls[i];
-
- fn( m );
- }
- }
-
- };
-
- timer.exec();
- }
-
- }).then(function( v ){
- _p.running = false;
- _p.ran = true;
-
- self.trigger('ran');
-
- return v;
- });
-
- if( _p.queue == null ){
- _p.queue = runP; // i.e. first step of inductive promise chain (for queue)
- }
-
- return runP;
- },
-
- // send the thread a message
- message: function( m ){
- var _p = this._private;
-
- if( _p.webworker ){
- _p.webworker.postMessage( m );
- }
-
- if( _p.child ){
- _p.child.send( m );
- }
-
- if( _p.timer ){
- _p.timer.message( m );
- }
-
- return this; // chaining
- },
-
- stop: function(){
- var _p = this._private;
-
- if( _p.webworker ){
- _p.webworker.terminate();
- }
-
- if( _p.child ){
- _p.child.kill();
- }
-
- if( _p.timer ){
- // nothing we can do if we've run a timeout
- }
-
- _p.stopped = true;
-
- return this.trigger('stop'); // chaining
- },
-
- stopped: function(){
- return this._private.stopped;
- }
-
-});
-
-// turns a stringified function into a (re)named function
-var fnAs = function( fn, name ){
- var fnStr = fn.toString();
- fnStr = fnStr.replace(/function\s*?\S*?\s*?\(/, 'function ' + name + '(');
-
- return fnStr;
-};
-
-var defineFnal = function( opts ){
- opts = opts || {};
-
- return function fnalImpl( fn, arg1 ){
- var fnStr = fnAs( fn, '_$_$_' + opts.name );
-
- this.require( fnStr );
-
- return this.run( [
- 'function( data ){',
- ' var origResolve = resolve;',
- ' var res = [];',
- ' ',
- ' resolve = function( val ){',
- ' res.push( val );',
- ' };',
- ' ',
- ' var ret = data.' + opts.name + '( _$_$_' + opts.name + ( arguments.length > 1 ? ', ' + JSON.stringify(arg1) : '' ) + ' );',
- ' ',
- ' resolve = origResolve;',
- ' resolve( res.length > 0 ? res : ret );',
- '}'
- ].join('\n') );
- };
-};
-
-util.extend(thdfn, {
- reduce: defineFnal({ name: 'reduce' }),
-
- reduceRight: defineFnal({ name: 'reduceRight' }),
-
- map: defineFnal({ name: 'map' })
-});
-
-// aliases
-var fn = thdfn;
-fn.promise = fn.run;
-fn.terminate = fn.halt = fn.stop;
-fn.include = fn.require;
-
-// pull in event apis
-util.extend(thdfn, {
- on: define.on(),
- one: define.on({ unbindSelfOnTrigger: true }),
- off: define.off(),
- trigger: define.trigger()
-});
-
-define.eventAliasesOn( thdfn );
-
-module.exports = Thread;
-
-},{"./define":44,"./event":45,"./is":83,"./promise":86,"./util":100,"./window":107,"child_process":undefined,"path":undefined}],99:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../is' );
-
-module.exports = {
- // get [r, g, b] from #abc or #aabbcc
- hex2tuple: function( hex ){
- if( !(hex.length === 4 || hex.length === 7) || hex[0] !== '#' ){ return; }
-
- var shortHex = hex.length === 4;
- var r, g, b;
- var base = 16;
-
- if( shortHex ){
- r = parseInt( hex[1] + hex[1], base );
- g = parseInt( hex[2] + hex[2], base );
- b = parseInt( hex[3] + hex[3], base );
- } else {
- r = parseInt( hex[1] + hex[2], base );
- g = parseInt( hex[3] + hex[4], base );
- b = parseInt( hex[5] + hex[6], base );
- }
-
- return [ r, g, b ];
- },
-
- // get [r, g, b, a] from hsl(0, 0, 0) or hsla(0, 0, 0, 0)
- hsl2tuple: function( hsl ){
- var ret;
- var h, s, l, a, r, g, b;
- function hue2rgb( p, q, t ){
- if( t < 0 ) t += 1;
- if( t > 1 ) t -= 1;
- if( t < 1 / 6 ) return p + (q - p) * 6 * t;
- if( t < 1 / 2 ) return q;
- if( t < 2 / 3 ) return p + (q - p) * (2 / 3 - t) * 6;
- return p;
- }
-
- var m = new RegExp( '^' + this.regex.hsla + '$' ).exec( hsl );
- if( m ){
-
- // get hue
- h = parseInt( m[1] );
- if( h < 0 ){
- h = ( 360 - (-1 * h % 360) ) % 360;
- } else if( h > 360 ){
- h = h % 360;
- }
- h /= 360; // normalise on [0, 1]
-
- s = parseFloat( m[2] );
- if( s < 0 || s > 100 ){ return; } // saturation is [0, 100]
- s = s / 100; // normalise on [0, 1]
-
- l = parseFloat( m[3] );
- if( l < 0 || l > 100 ){ return; } // lightness is [0, 100]
- l = l / 100; // normalise on [0, 1]
-
- a = m[4];
- if( a !== undefined ){
- a = parseFloat( a );
-
- if( a < 0 || a > 1 ){ return; } // alpha is [0, 1]
- }
-
- // now, convert to rgb
- // code from http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript
- if( s === 0 ){
- r = g = b = Math.round( l * 255 ); // achromatic
- } else {
- var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
- var p = 2 * l - q;
- r = Math.round( 255 * hue2rgb( p, q, h + 1 / 3 ) );
- g = Math.round( 255 * hue2rgb( p, q, h ) );
- b = Math.round( 255 * hue2rgb( p, q, h - 1 / 3 ) );
- }
-
- ret = [ r, g, b, a ];
- }
-
- return ret;
- },
-
- // get [r, g, b, a] from rgb(0, 0, 0) or rgba(0, 0, 0, 0)
- rgb2tuple: function( rgb ){
- var ret;
-
- var m = new RegExp( '^' + this.regex.rgba + '$' ).exec( rgb );
- if( m ){
- ret = [];
-
- var isPct = [];
- for( var i = 1; i <= 3; i++ ){
- var channel = m[ i ];
-
- if( channel[ channel.length - 1 ] === '%' ){
- isPct[ i ] = true;
- }
- channel = parseFloat( channel );
-
- if( isPct[ i ] ){
- channel = channel / 100 * 255; // normalise to [0, 255]
- }
-
- if( channel < 0 || channel > 255 ){ return; } // invalid channel value
-
- ret.push( Math.floor( channel ) );
- }
-
- var atLeastOneIsPct = isPct[1] || isPct[2] || isPct[3];
- var allArePct = isPct[1] && isPct[2] && isPct[3];
- if( atLeastOneIsPct && !allArePct ){ return; } // must all be percent values if one is
-
- var alpha = m[4];
- if( alpha !== undefined ){
- alpha = parseFloat( alpha );
-
- if( alpha < 0 || alpha > 1 ){ return; } // invalid alpha value
-
- ret.push( alpha );
- }
- }
-
- return ret;
- },
-
- colorname2tuple: function( color ){
- return this.colors[ color.toLowerCase() ];
- },
-
- color2tuple: function( color ){
- return ( is.array( color ) ? color : null )
- || this.colorname2tuple( color )
- || this.hex2tuple( color )
- || this.rgb2tuple( color )
- || this.hsl2tuple( color );
- },
-
- colors: {
- // special colour names
- transparent: [0, 0, 0, 0], // NB alpha === 0
-
- // regular colours
- aliceblue: [ 240, 248, 255 ],
- antiquewhite: [ 250, 235, 215 ],
- aqua: [0, 255, 255 ],
- aquamarine: [ 127, 255, 212 ],
- azure: [ 240, 255, 255 ],
- beige: [ 245, 245, 220 ],
- bisque: [ 255, 228, 196 ],
- black: [0, 0, 0],
- blanchedalmond: [ 255, 235, 205 ],
- blue: [0, 0, 255 ],
- blueviolet: [ 138, 43, 226 ],
- brown: [ 165, 42, 42 ],
- burlywood: [ 222, 184, 135 ],
- cadetblue: [ 95, 158, 160 ],
- chartreuse: [ 127, 255, 0],
- chocolate: [ 210, 105, 30 ],
- coral: [ 255, 127, 80 ],
- cornflowerblue: [ 100, 149, 237 ],
- cornsilk: [ 255, 248, 220 ],
- crimson: [ 220, 20, 60 ],
- cyan: [0, 255, 255 ],
- darkblue: [0, 0, 139 ],
- darkcyan: [0, 139, 139 ],
- darkgoldenrod: [ 184, 134, 11 ],
- darkgray: [ 169, 169, 169 ],
- darkgreen: [0, 100, 0],
- darkgrey: [ 169, 169, 169 ],
- 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 ],
- darkseagreen: [ 143, 188, 143 ],
- darkslateblue: [ 72, 61, 139 ],
- darkslategray: [ 47, 79, 79 ],
- darkslategrey: [ 47, 79, 79 ],
- darkturquoise: [0, 206, 209 ],
- darkviolet: [ 148, 0, 211 ],
- deeppink: [ 255, 20, 147 ],
- deepskyblue: [0, 191, 255 ],
- dimgray: [ 105, 105, 105 ],
- dimgrey: [ 105, 105, 105 ],
- dodgerblue: [ 30, 144, 255 ],
- firebrick: [ 178, 34, 34 ],
- floralwhite: [ 255, 250, 240 ],
- forestgreen: [ 34, 139, 34 ],
- fuchsia: [ 255, 0, 255 ],
- gainsboro: [ 220, 220, 220 ],
- ghostwhite: [ 248, 248, 255 ],
- gold: [ 255, 215, 0],
- goldenrod: [ 218, 165, 32 ],
- gray: [ 128, 128, 128 ],
- grey: [ 128, 128, 128 ],
- green: [0, 128, 0],
- greenyellow: [ 173, 255, 47 ],
- honeydew: [ 240, 255, 240 ],
- hotpink: [ 255, 105, 180 ],
- indianred: [ 205, 92, 92 ],
- indigo: [ 75, 0, 130 ],
- ivory: [ 255, 255, 240 ],
- khaki: [ 240, 230, 140 ],
- lavender: [ 230, 230, 250 ],
- lavenderblush: [ 255, 240, 245 ],
- lawngreen: [ 124, 252, 0],
- lemonchiffon: [ 255, 250, 205 ],
- lightblue: [ 173, 216, 230 ],
- lightcoral: [ 240, 128, 128 ],
- lightcyan: [ 224, 255, 255 ],
- lightgoldenrodyellow: [ 250, 250, 210 ],
- lightgray: [ 211, 211, 211 ],
- lightgreen: [ 144, 238, 144 ],
- lightgrey: [ 211, 211, 211 ],
- lightpink: [ 255, 182, 193 ],
- lightsalmon: [ 255, 160, 122 ],
- lightseagreen: [ 32, 178, 170 ],
- lightskyblue: [ 135, 206, 250 ],
- lightslategray: [ 119, 136, 153 ],
- lightslategrey: [ 119, 136, 153 ],
- lightsteelblue: [ 176, 196, 222 ],
- lightyellow: [ 255, 255, 224 ],
- lime: [0, 255, 0],
- limegreen: [ 50, 205, 50 ],
- linen: [ 250, 240, 230 ],
- magenta: [ 255, 0, 255 ],
- maroon: [ 128, 0, 0],
- mediumaquamarine: [ 102, 205, 170 ],
- mediumblue: [0, 0, 205 ],
- mediumorchid: [ 186, 85, 211 ],
- mediumpurple: [ 147, 112, 219 ],
- mediumseagreen: [ 60, 179, 113 ],
- mediumslateblue: [ 123, 104, 238 ],
- mediumspringgreen: [0, 250, 154 ],
- mediumturquoise: [ 72, 209, 204 ],
- mediumvioletred: [ 199, 21, 133 ],
- midnightblue: [ 25, 25, 112 ],
- mintcream: [ 245, 255, 250 ],
- mistyrose: [ 255, 228, 225 ],
- moccasin: [ 255, 228, 181 ],
- navajowhite: [ 255, 222, 173 ],
- navy: [0, 0, 128 ],
- oldlace: [ 253, 245, 230 ],
- olive: [ 128, 128, 0],
- olivedrab: [ 107, 142, 35 ],
- orange: [ 255, 165, 0],
- orangered: [ 255, 69, 0],
- orchid: [ 218, 112, 214 ],
- palegoldenrod: [ 238, 232, 170 ],
- palegreen: [ 152, 251, 152 ],
- paleturquoise: [ 175, 238, 238 ],
- palevioletred: [ 219, 112, 147 ],
- papayawhip: [ 255, 239, 213 ],
- peachpuff: [ 255, 218, 185 ],
- peru: [ 205, 133, 63 ],
- pink: [ 255, 192, 203 ],
- plum: [ 221, 160, 221 ],
- powderblue: [ 176, 224, 230 ],
- purple: [ 128, 0, 128 ],
- red: [ 255, 0, 0],
- rosybrown: [ 188, 143, 143 ],
- royalblue: [ 65, 105, 225 ],
- saddlebrown: [ 139, 69, 19 ],
- salmon: [ 250, 128, 114 ],
- sandybrown: [ 244, 164, 96 ],
- seagreen: [ 46, 139, 87 ],
- seashell: [ 255, 245, 238 ],
- sienna: [ 160, 82, 45 ],
- silver: [ 192, 192, 192 ],
- skyblue: [ 135, 206, 235 ],
- slateblue: [ 106, 90, 205 ],
- slategray: [ 112, 128, 144 ],
- slategrey: [ 112, 128, 144 ],
- snow: [ 255, 250, 250 ],
- springgreen: [0, 255, 127 ],
- steelblue: [ 70, 130, 180 ],
- tan: [ 210, 180, 140 ],
- teal: [0, 128, 128 ],
- thistle: [ 216, 191, 216 ],
- tomato: [ 255, 99, 71 ],
- turquoise: [ 64, 224, 208 ],
- violet: [ 238, 130, 238 ],
- wheat: [ 245, 222, 179 ],
- white: [ 255, 255, 255 ],
- whitesmoke: [ 245, 245, 245 ],
- yellow: [ 255, 255, 0],
- yellowgreen: [ 154, 205, 50 ]
- }
-};
-
-},{"../is":83}],100:[function(_dereq_,module,exports){
-'use strict';
-
-/*global console */
-
-var is = _dereq_( '../is' );
-var math = _dereq_( '../math' );
-
-var util = {
-
- trueify: function(){ return true; },
-
- falsify: function(){ return false; },
-
- zeroify: function(){ return 0; },
-
- noop: function(){},
-
- error: function( msg ){
- /* eslint-disable */
- if( console.error ){
- console.error.apply( console, arguments );
-
- if( console.trace ){ console.trace(); }
- } else {
- console.log.apply( console, arguments );
-
- if( console.trace ){ console.trace(); }
- }
- /* eslint-enable */
- },
-
- clone: function( obj ){
- return this.extend( {}, obj );
- },
-
- // gets a shallow copy of the argument
- copy: function( obj ){
- if( obj == null ){
- return obj;
- } if( is.array( obj ) ){
- return obj.slice();
- } else if( is.plainObject( obj ) ){
- return this.clone( obj );
- } else {
- return obj;
- }
- },
-
- uuid: function(
- a,b // placeholders
- ){
- for( // loop :)
- b=a=''; // b - result , a - numeric variable
- a++<36; //
- b+=a*51&52 // if "a" is not 9 or 14 or 19 or 24
- ? // return a random number or 4
- (
- a^15 // if "a" is not 15
- ? // genetate a random number from 0 to 15
- 8^Math.random()*
- (a^20?16:4) // unless "a" is 20, in which case a random number from 8 to 11
- :
- 4 // otherwise 4
- ).toString(16)
- :
- '-' // in other cases (if "a" is 9,14,19,24) insert "-"
- );
- return b;
- }
-
-};
-
-util.makeBoundingBox = math.makeBoundingBox.bind( math );
-
-util._staticEmptyObject = {};
-
-util.staticEmptyObject = function(){
- return util._staticEmptyObject;
-};
-
-util.extend = Object.assign != null ? Object.assign : function( tgt ){
- var args = arguments;
-
- for( var i = 1; i < args.length; i++ ){
- var obj = args[ i ];
-
- if( !obj ){ continue; }
-
- var keys = Object.keys( obj );
-
- for( var j = 0; j < keys.length; j++ ){
- var k = keys[j];
-
- tgt[ k ] = obj[ k ];
- }
- }
-
- return tgt;
-};
-
-util.default = function( val, def ){
- if( val === undefined ){
- return def;
- } else {
- return val;
- }
-};
-
-util.removeFromArray = function( arr, ele, manyCopies ){
- for( var i = arr.length; i >= 0; i-- ){
- if( arr[i] === ele ){
- arr.splice( i, 1 );
-
- if( !manyCopies ){ break; }
- }
- }
-};
-
-util.clearArray = function( arr ){
- arr.splice( 0, arr.length );
-};
-
-util.getPrefixedProperty = function( obj, propName, prefix ){
- if( prefix ){
- propName = this.prependCamel( prefix, propName ); // e.g. (labelWidth, source) => sourceLabelWidth
- }
-
- return obj[ propName ];
-};
-
-util.setPrefixedProperty = function( obj, propName, prefix, value ){
- if( prefix ){
- propName = this.prependCamel( prefix, propName ); // e.g. (labelWidth, source) => sourceLabelWidth
- }
-
- obj[ propName ] = value;
-};
-
-[
- _dereq_( './colors' ),
- _dereq_( './maps' ),
- { memoize: _dereq_( './memoize' ) },
- _dereq_( './regex' ),
- _dereq_( './strings' ),
- _dereq_( './timing' )
-].forEach( function( req ){
- util.extend( util, req );
-} );
-
-module.exports = util;
-
-},{"../is":83,"../math":85,"./colors":99,"./maps":101,"./memoize":102,"./regex":103,"./strings":104,"./timing":105}],101:[function(_dereq_,module,exports){
-'use strict';
-
-var is = _dereq_( '../is' );
-
-module.exports = {
- // has anything been set in the map
- mapEmpty: function( map ){
- var empty = true;
-
- if( map != null ){
- return Object.keys( map ).length === 0;
- }
-
- return empty;
- },
-
- // pushes to the array at the end of a map (map may not be built)
- pushMap: function( options ){
- var array = this.getMap( options );
-
- if( array == null ){ // if empty, put initial array
- this.setMap( this.extend( {}, options, {
- value: [ options.value ]
- } ) );
- } else {
- array.push( options.value );
- }
- },
-
- // sets the value in a map (map may not be built)
- setMap: function( options ){
- var obj = options.map;
- var key;
- var keys = options.keys;
- var l = keys.length;
-
- for( var i = 0; i < l; i++ ){
- var key = keys[ i ];
-
- if( is.plainObject( key ) ){
- this.error( 'Tried to set map with object key' );
- }
-
- if( i < keys.length - 1 ){
-
- // extend the map if necessary
- if( obj[ key ] == null ){
- obj[ key ] = {};
- }
-
- obj = obj[ key ];
- } else {
- // set the value
- obj[ key ] = options.value;
- }
- }
- },
-
- // gets the value in a map even if it's not built in places
- getMap: function( options ){
- var obj = options.map;
- var keys = options.keys;
- var l = keys.length;
-
- for( var i = 0; i < l; i++ ){
- var key = keys[ i ];
-
- if( is.plainObject( key ) ){
- this.error( 'Tried to get map with object key' );
- }
-
- obj = obj[ key ];
-
- if( obj == null ){
- return obj;
- }
- }
-
- return obj;
- },
-
- // deletes the entry in the map
- deleteMap: function( options ){
- var obj = options.map;
- var keys = options.keys;
- var l = keys.length;
- var keepChildren = options.keepChildren;
-
- for( var i = 0; i < l; i++ ){
- var key = keys[ i ];
-
- if( is.plainObject( key ) ){
- this.error( 'Tried to delete map with object key' );
- }
-
- var lastKey = i === options.keys.length - 1;
- if( lastKey ){
-
- if( keepChildren ){ // then only delete child fields not in keepChildren
- var children = Object.keys( obj );
-
- for( var j = 0; j < children.length; j++ ){
- var child = children[j];
-
- if( !keepChildren[ child ] ){
- obj[ child ] = undefined;
- }
- }
- } else {
- obj[ key ] = undefined;
- }
-
- } else {
- obj = obj[ key ];
- }
- }
- }
-};
-
-},{"../is":83}],102:[function(_dereq_,module,exports){
-'use strict';
-
-module.exports = function memoize( fn, keyFn ){
- if( !keyFn ){
- keyFn = function(){
- if( arguments.length === 1 ){
- return arguments[0];
- } else if( arguments.length === 0 ){
- return 'undefined';
- }
-
- var args = [];
-
- for( var i = 0; i < arguments.length; i++ ){
- args.push( arguments[ i ] );
- }
-
- return args.join( '$' );
- };
- }
-
- var memoizedFn = function(){
- var self = this;
- var args = arguments;
- var ret;
- var k = keyFn.apply( self, args );
- var cache = memoizedFn.cache;
-
- if( !(ret = cache[ k ]) ){
- ret = cache[ k ] = fn.apply( self, args );
- }
-
- return ret;
- };
-
- memoizedFn.cache = {};
-
- return memoizedFn;
-};
-
-},{}],103:[function(_dereq_,module,exports){
-'use strict';
-
-var number = '(?:[-+]?(?:(?:\\d+|\\d*\\.\\d+)(?:[Ee][+-]?\\d+)?))';
-
-var rgba = 'rgb[a]?\\((' + number + '[%]?)\\s*,\\s*(' + number + '[%]?)\\s*,\\s*(' + number + '[%]?)(?:\\s*,\\s*(' + number + '))?\\)';
-var rgbaNoBackRefs = 'rgb[a]?\\((?:' + number + '[%]?)\\s*,\\s*(?:' + number + '[%]?)\\s*,\\s*(?:' + number + '[%]?)(?:\\s*,\\s*(?:' + number + '))?\\)';
-
-var hsla = 'hsl[a]?\\((' + number + ')\\s*,\\s*(' + number + '[%])\\s*,\\s*(' + number + '[%])(?:\\s*,\\s*(' + number + '))?\\)';
-var hslaNoBackRefs = 'hsl[a]?\\((?:' + number + ')\\s*,\\s*(?:' + number + '[%])\\s*,\\s*(?:' + number + '[%])(?:\\s*,\\s*(?:' + number + '))?\\)';
-
-var hex3 = '\\#[0-9a-fA-F]{3}';
-var hex6 = '\\#[0-9a-fA-F]{6}';
-
-module.exports = {
- regex: {
- number: number,
- rgba: rgba,
- rgbaNoBackRefs: rgbaNoBackRefs,
- hsla: hsla,
- hslaNoBackRefs: hslaNoBackRefs,
- hex3: hex3,
- hex6: hex6
- }
-};
-
-},{}],104:[function(_dereq_,module,exports){
-'use strict';
-
-var memoize = _dereq_( './memoize' );
-var is = _dereq_( '../is' );
-
-module.exports = {
-
- camel2dash: memoize( function( str ){
- return str.replace( /([A-Z])/g, function( v ){
- return '-' + v.toLowerCase();
- } );
- } ),
-
- dash2camel: memoize( function( str ){
- return str.replace( /(-\w)/g, function( v ){
- return v[1].toUpperCase();
- } );
- } ),
-
- prependCamel: memoize( function( prefix, str ){
- return prefix + str[0].toUpperCase() + str.substring(1);
- }, function( prefix, str ){
- return prefix + '$' + str;
- } ),
-
- capitalize: function( str ){
- if( is.emptyString( str ) ){
- return str;
- }
-
- return str.charAt( 0 ).toUpperCase() + str.substring( 1 );
- }
-
-};
-
-},{"../is":83,"./memoize":102}],105:[function(_dereq_,module,exports){
-'use strict';
-
-var window = _dereq_( '../window' );
-var is = _dereq_( '../is' );
-var performance = window ? window.performance : null;
-
-var util = {};
-
-var raf = !window ? null : ( window.requestAnimationFrame || window.mozRequestAnimationFrame ||
- window.webkitRequestAnimationFrame || window.msRequestAnimationFrame );
-
-raf = raf || function( fn ){
- if( fn ){
- setTimeout( function(){
- fn( pnow() );
- }, 1000 / 60 );
- }
-};
-
-util.requestAnimationFrame = function( fn ){
- raf( fn );
-};
-
-var pnow = performance && performance.now ? function(){ return performance.now(); } : function(){ return Date.now(); };
-
-util.performanceNow = pnow;
-
-// ported lodash throttle function
-util.throttle = function( func, wait, options ){
- var leading = true,
- trailing = true;
-
- if( options === false ){
- leading = false;
- } else if( is.plainObject( options ) ){
- leading = 'leading' in options ? options.leading : leading;
- trailing = 'trailing' in options ? options.trailing : trailing;
- }
- options = options || {};
- options.leading = leading;
- options.maxWait = wait;
- options.trailing = trailing;
-
- return util.debounce( func, wait, options );
-};
-
-util.now = function(){
- return Date.now();
-};
-
-util.debounce = function( func, wait, options ){ // ported lodash debounce function
- var util = this;
- var args,
- maxTimeoutId,
- result,
- stamp,
- thisArg,
- timeoutId,
- trailingCall,
- lastCalled = 0,
- maxWait = false,
- trailing = true;
-
- if( !is.fn( func ) ){
- return;
- }
- wait = Math.max( 0, wait ) || 0;
- if( options === true ){
- var leading = true;
- trailing = false;
- } else if( is.plainObject( options ) ){
- leading = options.leading;
- maxWait = 'maxWait' in options && (Math.max( wait, options.maxWait ) || 0);
- trailing = 'trailing' in options ? options.trailing : trailing;
- }
- var delayed = function(){
- var remaining = wait - (util.now() - stamp);
- if( remaining <= 0 ){
- if( maxTimeoutId ){
- clearTimeout( maxTimeoutId );
- }
- var isCalled = trailingCall;
- maxTimeoutId = timeoutId = trailingCall = undefined;
- if( isCalled ){
- lastCalled = util.now();
- result = func.apply( thisArg, args );
- if( !timeoutId && !maxTimeoutId ){
- args = thisArg = null;
- }
- }
- } else {
- timeoutId = setTimeout( delayed, remaining );
- }
- };
-
- var maxDelayed = function(){
- if( timeoutId ){
- clearTimeout( timeoutId );
- }
- maxTimeoutId = timeoutId = trailingCall = undefined;
- if( trailing || (maxWait !== wait) ){
- lastCalled = util.now();
- result = func.apply( thisArg, args );
- if( !timeoutId && !maxTimeoutId ){
- args = thisArg = null;
- }
- }
- };
-
- return function(){
- args = arguments;
- stamp = util.now();
- thisArg = this;
- trailingCall = trailing && (timeoutId || !leading);
-
- if( maxWait === false ){
- var leadingCall = leading && !timeoutId;
- } else {
- if( !maxTimeoutId && !leading ){
- lastCalled = stamp;
- }
- var remaining = maxWait - (stamp - lastCalled),
- isCalled = remaining <= 0;
-
- if( isCalled ){
- if( maxTimeoutId ){
- maxTimeoutId = clearTimeout( maxTimeoutId );
- }
- lastCalled = stamp;
- result = func.apply( thisArg, args );
- }
- else if( !maxTimeoutId ){
- maxTimeoutId = setTimeout( maxDelayed, remaining );
- }
- }
- if( isCalled && timeoutId ){
- timeoutId = clearTimeout( timeoutId );
- }
- else if( !timeoutId && wait !== maxWait ){
- timeoutId = setTimeout( delayed, wait );
- }
- if( leadingCall ){
- isCalled = true;
- result = func.apply( thisArg, args );
- }
- if( isCalled && !timeoutId && !maxTimeoutId ){
- args = thisArg = null;
- }
- return result;
- };
-};
-
-module.exports = util;
-
-},{"../is":83,"../window":107}],106:[function(_dereq_,module,exports){
-module.exports="2.7.8"
-},{}],107:[function(_dereq_,module,exports){
-module.exports = ( typeof window === 'undefined' ? null : window ); // eslint-disable-line no-undef
-
-},{}]},{},[82])(82)
-});
-
diff --git a/wqflask/wqflask/static/packages/cytoscape/js/src/json2.js b/wqflask/wqflask/static/packages/cytoscape/js/src/json2.js
deleted file mode 100644
index c422a6e1..00000000
--- a/wqflask/wqflask/static/packages/cytoscape/js/src/json2.js
+++ /dev/null
@@ -1,479 +0,0 @@
-/*
- http://www.JSON.org/json2.js
- 2009-09-29
-
- Public Domain.
-
- NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
-
- See http://www.JSON.org/js.html
-
- This file creates a global JSON object containing two methods: stringify
- and parse.
-
- JSON.stringify(value, replacer, space)
- value any JavaScript value, usually an object or array.
-
- replacer an optional parameter that determines how object
- values are stringified for objects. It can be a
- function or an array of strings.
-
- space an optional parameter that specifies the indentation
- of nested structures. If it is omitted, the text will
- be packed without extra whitespace. If it is a number,
- it will specify the number of spaces to indent at each
- level. If it is a string (such as '\t' or '&nbsp;'),
- it contains the characters used to indent at each level.
-
- This method produces a JSON text from a JavaScript value.
-
- When an object value is found, if the object contains a toJSON
- method, its toJSON method will be called and the result will be
- stringified. A toJSON method does not serialize: it returns the
- value represented by the name/value pair that should be serialized,
- or undefined if nothing should be serialized. The toJSON method
- will be passed the key associated with the value, and this will be
- bound to the value
-
- For example, this would serialize Dates as ISO strings.
-
- Date.prototype.toJSON = function (key) {
- function f(n) {
- // Format integers to have at least two digits.
- return n < 10 ? '0' + n : n;
- }
-
- return this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z';
- };
-
- You can provide an optional replacer method. It will be passed the
- key and value of each member, with this bound to the containing
- object. The value that is returned from your method will be
- serialized. If your method returns undefined, then the member will
- be excluded from the serialization.
-
- If the replacer parameter is an array of strings, then it will be
- used to select the members to be serialized. It filters the results
- such that only members with keys listed in the replacer array are
- stringified.
-
- Values that do not have JSON representations, such as undefined or
- functions, will not be serialized. Such values in objects will be
- dropped; in arrays they will be replaced with null. You can use
- a replacer function to replace those with JSON values.
- JSON.stringify(undefined) returns undefined.
-
- The optional space parameter produces a stringification of the
- value that is filled with line breaks and indentation to make it
- easier to read.
-
- If the space parameter is a non-empty string, then that string will
- be used for indentation. If the space parameter is a number, then
- the indentation will be that many spaces.
-
- Example:
-
- text = JSON.stringify(['e', {pluribus: 'unum'}]);
- // text is '["e",{"pluribus":"unum"}]'
-
-
- text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
- // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
-
- text = JSON.stringify([new Date()], function (key, value) {
- return this[key] instanceof Date ?
- 'Date(' + this[key] + ')' : value;
- });
- // text is '["Date(---current time---)"]'
-
-
- JSON.parse(text, reviver)
- This method parses a JSON text to produce an object or array.
- It can throw a SyntaxError exception.
-
- The optional reviver parameter is a function that can filter and
- transform the results. It receives each of the keys and values,
- and its return value is used instead of the original value.
- If it returns what it received, then the structure is not modified.
- If it returns undefined then the member is deleted.
-
- Example:
-
- // Parse the text. Values that look like ISO date strings will
- // be converted to Date objects.
-
- myData = JSON.parse(text, function (key, value) {
- var a;
- if (typeof value === 'string') {
- a =
-/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
- if (a) {
- return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
- +a[5], +a[6]));
- }
- }
- return value;
- });
-
- myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) {
- var d;
- if (typeof value === 'string' &&
- value.slice(0, 5) === 'Date(' &&
- value.slice(-1) === ')') {
- d = new Date(value.slice(5, -1));
- if (d) {
- return d;
- }
- }
- return value;
- });
-
-
- This is a reference implementation. You are free to copy, modify, or
- redistribute.
-
- This code should be minified before deployment.
- See http://javascript.crockford.com/jsmin.html
-
- USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
- NOT CONTROL.
-*/
-
-/*jslint evil: true, strict: false */
-
-/*members "", "\b", "\t", "\n", "\f", "\r", "\"", JSON, "\\", apply,
- call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours,
- getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join,
- lastIndex, length, parse, prototype, push, replace, slice, stringify,
- test, toJSON, toString, valueOf
-*/
-
-
-// Create a JSON object only if one does not already exist. We create the
-// methods in a closure to avoid creating global variables.
-
-if (!this.JSON) {
- this.JSON = {};
-}
-
-(function () {
-
- function f(n) {
- // Format integers to have at least two digits.
- return n < 10 ? '0' + n : n;
- }
-
- if (typeof Date.prototype.toJSON !== 'function') {
-
- Date.prototype.toJSON = function (key) {
-
- return isFinite(this.valueOf()) ?
- this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z' : null;
- };
-
- String.prototype.toJSON =
- Number.prototype.toJSON =
- Boolean.prototype.toJSON = function (key) {
- return this.valueOf();
- };
- }
-
- var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- gap,
- indent,
- meta = { // table of character substitutions
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\f': '\\f',
- '\r': '\\r',
- '"' : '\\"',
- '\\': '\\\\'
- },
- rep;
-
-
- function quote(string) {
-
-// If the string contains no control characters, no quote characters, and no
-// backslash characters, then we can safely slap some quotes around it.
-// Otherwise we must also replace the offending characters with safe escape
-// sequences.
-
- escapable.lastIndex = 0;
- return escapable.test(string) ?
- '"' + string.replace(escapable, function (a) {
- var c = meta[a];
- return typeof c === 'string' ? c :
- '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- }) + '"' :
- '"' + string + '"';
- }
-
-
- function str(key, holder) {
-
-// Produce a string from holder[key].
-
- var i, // The loop counter.
- k, // The member key.
- v, // The member value.
- length,
- mind = gap,
- partial,
- value = holder[key];
-
-// If the value has a toJSON method, call it to obtain a replacement value.
-
- if (value && typeof value === 'object' &&
- typeof value.toJSON === 'function') {
- value = value.toJSON(key);
- }
-
-// If we were called with a replacer function, then call the replacer to
-// obtain a replacement value.
-
- if (typeof rep === 'function') {
- value = rep.call(holder, key, value);
- }
-
-// What happens next depends on the value's type.
-
- switch (typeof value) {
- case 'string':
- return quote(value);
-
- case 'number':
-
-// JSON numbers must be finite. Encode non-finite numbers as null.
-
- return isFinite(value) ? String(value) : 'null';
-
- case 'boolean':
- case 'null':
-
-// If the value is a boolean or null, convert it to a string. Note:
-// typeof null does not produce 'null'. The case is included here in
-// the remote chance that this gets fixed someday.
-
- return String(value);
-
-// If the type is 'object', we might be dealing with an object or an array or
-// null.
-
- case 'object':
-
-// Due to a specification blunder in ECMAScript, typeof null is 'object',
-// so watch out for that case.
-
- if (!value) {
- return 'null';
- }
-
-// Make an array to hold the partial results of stringifying this object value.
-
- gap += indent;
- partial = [];
-
-// Is the value an array?
-
- if (Object.prototype.toString.apply(value) === '[object Array]') {
-
-// The value is an array. Stringify every element. Use null as a placeholder
-// for non-JSON values.
-
- length = value.length;
- for (i = 0; i < length; i += 1) {
- partial[i] = str(i, value) || 'null';
- }
-
-// Join all of the elements together, separated with commas, and wrap them in
-// brackets.
-
- v = partial.length === 0 ? '[]' :
- gap ? '[\n' + gap +
- partial.join(',\n' + gap) + '\n' +
- mind + ']' :
- '[' + partial.join(',') + ']';
- gap = mind;
- return v;
- }
-
-// If the replacer is an array, use it to select the members to be stringified.
-
- if (rep && typeof rep === 'object') {
- length = rep.length;
- for (i = 0; i < length; i += 1) {
- k = rep[i];
- if (typeof k === 'string') {
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- } else {
-
-// Otherwise, iterate through all of the keys in the object.
-
- for (k in value) {
- if (Object.hasOwnProperty.call(value, k)) {
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- }
-
-// Join all of the member texts together, separated with commas,
-// and wrap them in braces.
-
- v = partial.length === 0 ? '{}' :
- gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
- mind + '}' : '{' + partial.join(',') + '}';
- gap = mind;
- return v;
- }
- }
-
-// If the JSON object does not yet have a stringify method, give it one.
-
- if (typeof JSON.stringify !== 'function') {
- JSON.stringify = function (value, replacer, space) {
-
-// The stringify method takes a value and an optional replacer, and an optional
-// space parameter, and returns a JSON text. The replacer can be a function
-// that can replace values, or an array of strings that will select the keys.
-// A default replacer method can be provided. Use of the space parameter can
-// produce text that is more easily readable.
-
- var i;
- gap = '';
- indent = '';
-
-// If the space parameter is a number, make an indent string containing that
-// many spaces.
-
- if (typeof space === 'number') {
- for (i = 0; i < space; i += 1) {
- indent += ' ';
- }
-
-// If the space parameter is a string, it will be used as the indent string.
-
- } else if (typeof space === 'string') {
- indent = space;
- }
-
-// If there is a replacer, it must be a function or an array.
-// Otherwise, throw an error.
-
- rep = replacer;
- if (replacer && typeof replacer !== 'function' &&
- (typeof replacer !== 'object' ||
- typeof replacer.length !== 'number')) {
- throw new Error('JSON.stringify');
- }
-
-// Make a fake root object containing our value under the key of ''.
-// Return the result of stringifying the value.
-
- return str('', {'': value});
- };
- }
-
-
-// If the JSON object does not yet have a parse method, give it one.
-
- if (typeof JSON.parse !== 'function') {
- JSON.parse = function (text, reviver) {
-
-// The parse method takes a text and an optional reviver function, and returns
-// a JavaScript value if the text is a valid JSON text.
-
- var j;
-
- function walk(holder, key) {
-
-// The walk method is used to recursively walk the resulting structure so
-// that modifications can be made.
-
- var k, v, value = holder[key];
- if (value && typeof value === 'object') {
- for (k in value) {
- if (Object.hasOwnProperty.call(value, k)) {
- v = walk(value, k);
- if (v !== undefined) {
- value[k] = v;
- } else {
- delete value[k];
- }
- }
- }
- }
- return reviver.call(holder, key, value);
- }
-
-
-// Parsing happens in four stages. In the first stage, we replace certain
-// Unicode characters with escape sequences. JavaScript handles many characters
-// incorrectly, either silently deleting them, or treating them as line endings.
-
- cx.lastIndex = 0;
- if (cx.test(text)) {
- text = text.replace(cx, function (a) {
- return '\\u' +
- ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- });
- }
-
-// In the second stage, we run the text against regular expressions that look
-// for non-JSON patterns. We are especially concerned with '()' and 'new'
-// because they can cause invocation, and '=' because it can cause mutation.
-// But just to be safe, we want to reject all unexpected forms.
-
-// We split the second stage into 4 regexp operations in order to work around
-// crippling inefficiencies in IE's and Safari's regexp engines. First we
-// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
-// replace all simple value tokens with ']' characters. Third, we delete all
-// open brackets that follow a colon or comma or that begin the text. Finally,
-// we look to see that the remaining characters are only whitespace or ']' or
-// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
-
- if (/^[\],:{}\s]*$/.
-test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
-replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
-replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
-
-// In the third stage we use the eval function to compile the text into a
-// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
-// in JavaScript: it can begin a block or an object literal. We wrap the text
-// in parens to eliminate the ambiguity.
-
- j = eval('(' + text + ')');
-
-// In the optional fourth stage, we recursively walk the new structure, passing
-// each name/value pair to a reviver function for possible transformation.
-
- return typeof reviver === 'function' ?
- walk({'': j}, '') : j;
- }
-
-// If the text is not JSON parseable, then a SyntaxError is thrown.
-
- throw new SyntaxError('JSON.parse');
- };
- }
-}());
diff --git a/wqflask/wqflask/static/packages/cytoscape/swf/CytoscapeWeb.swf b/wqflask/wqflask/static/packages/cytoscape/swf/CytoscapeWeb.swf
deleted file mode 100644
index 82eabc47..00000000
--- a/wqflask/wqflask/static/packages/cytoscape/swf/CytoscapeWeb.swf
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/cytoscape/swf/playerProductInstall.swf b/wqflask/wqflask/static/packages/cytoscape/swf/playerProductInstall.swf
deleted file mode 100644
index bdc34378..00000000
--- a/wqflask/wqflask/static/packages/cytoscape/swf/playerProductInstall.swf
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/MIT-LICENSE.txt b/wqflask/wqflask/static/packages/jqplot/MIT-LICENSE.txt
deleted file mode 100644
index 647db23f..00000000
--- a/wqflask/wqflask/static/packages/jqplot/MIT-LICENSE.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-Title: MIT License
-
-Copyright (c) 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/wqflask/wqflask/static/packages/jqplot/README.txt b/wqflask/wqflask/static/packages/jqplot/README.txt
deleted file mode 100644
index 4932a00c..00000000
--- a/wqflask/wqflask/static/packages/jqplot/README.txt
+++ /dev/null
@@ -1,77 +0,0 @@
-Title: jqPlot Readme
-
-Pure JavaScript plotting plugin for jQuery.
-
-To learn how to use jqPlot, start with the Basic Usage Instructions below. Then read the
-usage.txt and jqPlotOptions.txt files included with the distribution.
-
-The jqPlot home page is at <http://www.jqplot.com/>.
-
-Downloads can be found at <http://bitbucket.org/cleonello/jqplot/downloads/>.
-
-The mailing list is at <http://groups.google.com/group/jqplot-users>.
-
-Examples and unit tests are at <http://www.jqplot.com/tests/>.
-
-Documentation is at <http://www.jqplot.com/docs/>.
-
-The project page and source code are at <http://www.bitbucket.org/cleonello/jqplot/>.
-
-Bugs, issues, feature requests: <http://www.bitbucket.org/cleonello/jqplot/issues/>.
-
-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:
-
-> <!--[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" />
-
-For usage instructions, see <jqPlot Usage> in usage.txt. For available options, see
-<jqPlot Options> in jqPlotOptions.txt.
-
-Building from source:
-
-If you've cloned the repository, you can build a distribution from source.
-You need to have ant <http://ant.apache.org> 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/wqflask/wqflask/static/packages/jqplot/additional-methods.js b/wqflask/wqflask/static/packages/jqplot/additional-methods.js
deleted file mode 100644
index 801d0b7f..00000000
--- a/wqflask/wqflask/static/packages/jqplot/additional-methods.js
+++ /dev/null
@@ -1,437 +0,0 @@
-/*! jQuery Validation Plugin - v1.10.0 - 9/7/2012
-* https://github.com/jzaefferer/jquery-validation
-* Copyright (c) 2012 Jörn Zaefferer; Licensed MIT, GPL */
-
-/*!
- * jQuery Validation Plugin 1.10.0
- *
- * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
- * http://docs.jquery.com/Plugins/Validation
- *
- * Copyright (c) 2006 - 2011 Jörn Zaefferer
- *
- * Dual licensed under the MIT and GPL licenses:
- * http://www.opensource.org/licenses/mit-license.php
- * http://www.gnu.org/licenses/gpl.html
- */
-
-(function() {
-
- function stripHtml(value) {
- // remove html tags and space chars
- return value.replace(/<.[^<>]*?>/g, ' ').replace(/&nbsp;|&#160;/gi, ' ')
- // remove punctuation
- .replace(/[.(),;:!?%#$'"_+=\/-]*/g,'');
- }
- jQuery.validator.addMethod("maxWords", function(value, element, params) {
- return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length <= params;
- }, jQuery.validator.format("Please enter {0} words or less."));
-
- jQuery.validator.addMethod("minWords", function(value, element, params) {
- return this.optional(element) || stripHtml(value).match(/\b\w+\b/g).length >= params;
- }, jQuery.validator.format("Please enter at least {0} words."));
-
- jQuery.validator.addMethod("rangeWords", function(value, element, params) {
- var valueStripped = stripHtml(value);
- var regex = /\b\w+\b/g;
- return this.optional(element) || valueStripped.match(regex).length >= params[0] && valueStripped.match(regex).length <= params[1];
- }, jQuery.validator.format("Please enter between {0} and {1} words."));
-
-})();
-
-jQuery.validator.addMethod("letterswithbasicpunc", function(value, element) {
- return this.optional(element) || /^[a-z\-.,()'\"\s]+$/i.test(value);
-}, "Letters or punctuation only please");
-
-jQuery.validator.addMethod("alphanumeric", function(value, element) {
- return this.optional(element) || /^\w+$/i.test(value);
-}, "Letters, numbers, and underscores only please");
-
-jQuery.validator.addMethod("lettersonly", function(value, element) {
- return this.optional(element) || /^[a-z]+$/i.test(value);
-}, "Letters only please");
-
-jQuery.validator.addMethod("nowhitespace", function(value, element) {
- return this.optional(element) || /^\S+$/i.test(value);
-}, "No white space please");
-
-jQuery.validator.addMethod("ziprange", function(value, element) {
- return this.optional(element) || /^90[2-5]\d\{2\}-\d{4}$/.test(value);
-}, "Your ZIP-code must be in the range 902xx-xxxx to 905-xx-xxxx");
-
-jQuery.validator.addMethod("zipcodeUS", function(value, element) {
- return this.optional(element) || /\d{5}-\d{4}$|^\d{5}$/.test(value)
-}, "The specified US ZIP Code is invalid");
-
-jQuery.validator.addMethod("integer", function(value, element) {
- return this.optional(element) || /^-?\d+$/.test(value);
-}, "A positive or negative non-decimal number please");
-
-/**
- * Return true, if the value is a valid vehicle identification number (VIN).
- *
- * Works with all kind of text inputs.
- *
- * @example <input type="text" size="20" name="VehicleID" class="{required:true,vinUS:true}" />
- * @desc Declares a required input element whose value must be a valid vehicle identification number.
- *
- * @name jQuery.validator.methods.vinUS
- * @type Boolean
- * @cat Plugins/Validate/Methods
- */
-jQuery.validator.addMethod("vinUS", function(v) {
- if (v.length != 17) {
- return false;
- }
- var i, n, d, f, cd, cdv;
- var LL = ["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"];
- var VL = [1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9];
- var FL = [8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2];
- var rs = 0;
- for(i = 0; i < 17; i++){
- f = FL[i];
- d = v.slice(i,i+1);
- if (i == 8) {
- cdv = d;
- }
- if (!isNaN(d)) {
- d *= f;
- } else {
- for (n = 0; n < LL.length; n++) {
- if (d.toUpperCase() === LL[n]) {
- d = VL[n];
- d *= f;
- if (isNaN(cdv) && n == 8) {
- cdv = LL[n];
- }
- break;
- }
- }
- }
- rs += d;
- }
- cd = rs % 11;
- if (cd == 10) {
- cd = "X";
- }
- if (cd == cdv) {
- return true;
- }
- return false;
-}, "The specified vehicle identification number (VIN) is invalid.");
-
-/**
- * Return true, if the value is a valid date, also making this formal check dd/mm/yyyy.
- *
- * @example jQuery.validator.methods.date("01/01/1900")
- * @result true
- *
- * @example jQuery.validator.methods.date("01/13/1990")
- * @result false
- *
- * @example jQuery.validator.methods.date("01.01.1900")
- * @result false
- *
- * @example <input name="pippo" class="{dateITA:true}" />
- * @desc Declares an optional input element whose value must be a valid date.
- *
- * @name jQuery.validator.methods.dateITA
- * @type Boolean
- * @cat Plugins/Validate/Methods
- */
-jQuery.validator.addMethod("dateITA", function(value, element) {
- var check = false;
- var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
- if( re.test(value)){
- var adata = value.split('/');
- var gg = parseInt(adata[0],10);
- var mm = parseInt(adata[1],10);
- var aaaa = parseInt(adata[2],10);
- var xdata = new Date(aaaa,mm-1,gg);
- if ( ( xdata.getFullYear() == aaaa ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == gg ) )
- check = true;
- else
- check = false;
- } else
- check = false;
- return this.optional(element) || check;
-}, "Please enter a correct date");
-
-jQuery.validator.addMethod("dateNL", function(value, element) {
- return this.optional(element) || /^\d\d?[\.\/-]\d\d?[\.\/-]\d\d\d?\d?$/.test(value);
-}, "Vul hier een geldige datum in.");
-
-jQuery.validator.addMethod("time", function(value, element) {
- return this.optional(element) || /^([0-1]\d|2[0-3]):([0-5]\d)$/.test(value);
-}, "Please enter a valid time, between 00:00 and 23:59");
-jQuery.validator.addMethod("time12h", function(value, element) {
- return this.optional(element) || /^((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))$/i.test(value);
-}, "Please enter a valid time, between 00:00 am and 12:00 pm");
-
-/**
- * matches US phone number format
- *
- * where the area code may not start with 1 and the prefix may not start with 1
- * allows '-' or ' ' as a separator and allows parens around area code
- * some people may want to put a '1' in front of their number
- *
- * 1(212)-999-2345 or
- * 212 999 2344 or
- * 212-999-0983
- *
- * but not
- * 111-123-5434
- * and not
- * 212 123 4567
- */
-jQuery.validator.addMethod("phoneUS", function(phone_number, element) {
- phone_number = phone_number.replace(/\s+/g, "");
- return this.optional(element) || phone_number.length > 9 &&
- phone_number.match(/^(\+?1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/);
-}, "Please specify a valid phone number");
-
-jQuery.validator.addMethod('phoneUK', function(phone_number, element) {
- phone_number = phone_number.replace(/\(|\)|\s+|-/g,'');
- return this.optional(element) || phone_number.length > 9 &&
- phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:(?:\d{5}\)?\s?\d{4,5})|(?:\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3}))|(?:\d{3}\)?\s?\d{3}\s?\d{3,4})|(?:\d{2}\)?\s?\d{4}\s?\d{4}))$/);
-}, 'Please specify a valid phone number');
-
-jQuery.validator.addMethod('mobileUK', function(phone_number, element) {
- phone_number = phone_number.replace(/\s+|-/g,'');
- return this.optional(element) || phone_number.length > 9 &&
- phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[45789]\d{2}|624)\s?\d{3}\s?\d{3})$/);
-}, 'Please specify a valid mobile number');
-
-//Matches UK landline + mobile, accepting only 01-3 for landline or 07 for mobile to exclude many premium numbers
-jQuery.validator.addMethod('phonesUK', function(phone_number, element) {
- phone_number = phone_number.replace(/\s+|-/g,'');
- return this.optional(element) || phone_number.length > 9 &&
- phone_number.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[45789]\d{8}|624\d{6})))$/);
-}, 'Please specify a valid uk phone number');
-// On the above three UK functions, do the following server side processing:
-// Compare with ^((?:00\s?|\+)(44)\s?)?\(?0?(?:\)\s?)?([1-9]\d{1,4}\)?[\d\s]+)
-// Extract $2 and set $prefix to '+44<space>' if $2 is '44' otherwise set $prefix to '0'
-// Extract $3 and remove spaces and parentheses. Phone number is combined $2 and $3.
-// A number of very detailed GB telephone number RegEx patterns can also be found at:
-// http://www.aa-asterisk.org.uk/index.php/Regular_Expressions_for_Validating_and_Formatting_UK_Telephone_Numbers
-
-//Matches UK postcode. based on http://snipplr.com/view/3152/postcode-validation/
-jQuery.validator.addMethod('postcodeUK', function(postcode, element) {
- postcode = (postcode.toUpperCase()).replace(/\s+/g,'');
- return this.optional(element) || postcode.match(/^([^QZ][^IJZ]{0,1}\d{1,2})(\d[^CIKMOV]{2})$/) || postcode.match(/^([^QV]\d[ABCDEFGHJKSTUW])(\d[^CIKMOV]{2})$/) || postcode.match(/^([^QV][^IJZ]\d[ABEHMNPRVWXY])(\d[^CIKMOV]{2})$/) || postcode.match(/^(GIR)(0AA)$/) || postcode.match(/^(BFPO)(\d{1,4})$/) || postcode.match(/^(BFPO)(C\/O\d{1,3})$/);
-}, 'Please specify a valid postcode');
-
-// TODO check if value starts with <, otherwise don't try stripping anything
-jQuery.validator.addMethod("strippedminlength", function(value, element, param) {
- return jQuery(value).text().length >= param;
-}, jQuery.validator.format("Please enter at least {0} characters"));
-
-// same as email, but TLD is optional
-jQuery.validator.addMethod("email2", function(value, element, param) {
- return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
-}, jQuery.validator.messages.email);
-
-// same as url, but TLD is optional
-jQuery.validator.addMethod("url2", function(value, element, param) {
- return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
-}, jQuery.validator.messages.url);
-
-// NOTICE: Modified version of Castle.Components.Validator.CreditCardValidator
-// Redistributed under the the Apache License 2.0 at http://www.apache.org/licenses/LICENSE-2.0
-// Valid Types: mastercard, visa, amex, dinersclub, enroute, discover, jcb, unknown, all (overrides all other settings)
-jQuery.validator.addMethod("creditcardtypes", function(value, element, param) {
- if (/[^0-9-]+/.test(value)) {
- return false;
- }
-
- value = value.replace(/\D/g, "");
-
- var validTypes = 0x0000;
-
- if (param.mastercard)
- validTypes |= 0x0001;
- if (param.visa)
- validTypes |= 0x0002;
- if (param.amex)
- validTypes |= 0x0004;
- if (param.dinersclub)
- validTypes |= 0x0008;
- if (param.enroute)
- validTypes |= 0x0010;
- if (param.discover)
- validTypes |= 0x0020;
- if (param.jcb)
- validTypes |= 0x0040;
- if (param.unknown)
- validTypes |= 0x0080;
- if (param.all)
- validTypes = 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080;
-
- if (validTypes & 0x0001 && /^(5[12345])/.test(value)) { //mastercard
- return value.length == 16;
- }
- if (validTypes & 0x0002 && /^(4)/.test(value)) { //visa
- return value.length == 16;
- }
- if (validTypes & 0x0004 && /^(3[47])/.test(value)) { //amex
- return value.length == 15;
- }
- if (validTypes & 0x0008 && /^(3(0[012345]|[68]))/.test(value)) { //dinersclub
- return value.length == 14;
- }
- if (validTypes & 0x0010 && /^(2(014|149))/.test(value)) { //enroute
- return value.length == 15;
- }
- if (validTypes & 0x0020 && /^(6011)/.test(value)) { //discover
- return value.length == 16;
- }
- if (validTypes & 0x0040 && /^(3)/.test(value)) { //jcb
- return value.length == 16;
- }
- if (validTypes & 0x0040 && /^(2131|1800)/.test(value)) { //jcb
- return value.length == 15;
- }
- if (validTypes & 0x0080) { //unknown
- return true;
- }
- return false;
-}, "Please enter a valid credit card number.");
-
-jQuery.validator.addMethod("ipv4", function(value, element, param) {
- return this.optional(element) || /^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(value);
-}, "Please enter a valid IP v4 address.");
-
-jQuery.validator.addMethod("ipv6", function(value, element, param) {
- return this.optional(element) || /^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(value);
-}, "Please enter a valid IP v6 address.");
-
-/**
-* Return true if the field value matches the given format RegExp
-*
-* @example jQuery.validator.methods.pattern("AR1004",element,/^AR\d{4}$/)
-* @result true
-*
-* @example jQuery.validator.methods.pattern("BR1004",element,/^AR\d{4}$/)
-* @result false
-*
-* @name jQuery.validator.methods.pattern
-* @type Boolean
-* @cat Plugins/Validate/Methods
-*/
-jQuery.validator.addMethod("pattern", function(value, element, param) {
- if (this.optional(element)) {
- return true;
- }
- if (typeof param === 'string') {
- param = new RegExp('^(?:' + param + ')$');
- }
- return param.test(value);
-}, "Invalid format.");
-
-
-/*
- * Lets you say "at least X inputs that match selector Y must be filled."
- *
- * The end result is that neither of these inputs:
- *
- * <input class="productinfo" name="partnumber">
- * <input class="productinfo" name="description">
- *
- * ...will validate unless at least one of them is filled.
- *
- * partnumber: {require_from_group: [1,".productinfo"]},
- * description: {require_from_group: [1,".productinfo"]}
- *
- */
-jQuery.validator.addMethod("require_from_group", function(value, element, options) {
- var validator = this;
- var selector = options[1];
- var validOrNot = $(selector, element.form).filter(function() {
- return validator.elementValue(this);
- }).length >= options[0];
-
- if(!$(element).data('being_validated')) {
- var fields = $(selector, element.form);
- fields.data('being_validated', true);
- fields.valid();
- fields.data('being_validated', false);
- }
- return validOrNot;
-}, jQuery.format("Please fill at least {0} of these fields."));
-
-/*
- * Lets you say "either at least X inputs that match selector Y must be filled,
- * OR they must all be skipped (left blank)."
- *
- * The end result, is that none of these inputs:
- *
- * <input class="productinfo" name="partnumber">
- * <input class="productinfo" name="description">
- * <input class="productinfo" name="color">
- *
- * ...will validate unless either at least two of them are filled,
- * OR none of them are.
- *
- * partnumber: {skip_or_fill_minimum: [2,".productinfo"]},
- * description: {skip_or_fill_minimum: [2,".productinfo"]},
- * color: {skip_or_fill_minimum: [2,".productinfo"]}
- *
- */
-jQuery.validator.addMethod("skip_or_fill_minimum", function(value, element, options) {
- var validator = this;
-
- numberRequired = options[0];
- selector = options[1];
- var numberFilled = $(selector, element.form).filter(function() {
- return validator.elementValue(this);
- }).length;
- var valid = numberFilled >= numberRequired || numberFilled === 0;
-
- if(!$(element).data('being_validated')) {
- var fields = $(selector, element.form);
- fields.data('being_validated', true);
- fields.valid();
- fields.data('being_validated', false);
- }
- return valid;
-}, jQuery.format("Please either skip these fields or fill at least {0} of them."));
-
-// Accept a value from a file input based on a required mimetype
-jQuery.validator.addMethod("accept", function(value, element, param) {
- // Split mime on commas incase we have multiple types we can accept
- var typeParam = typeof param === "string" ? param.replace(/,/g, '|') : "image/*",
- optionalValue = this.optional(element),
- i, file;
-
- // Element is optional
- if(optionalValue) {
- return optionalValue;
- }
-
- if($(element).attr("type") === "file") {
- // If we are using a wildcard, make it regex friendly
- typeParam = typeParam.replace("*", ".*");
-
- // Check if the element has a FileList before checking each file
- if(element.files && element.files.length) {
- for(i = 0; i < element.files.length; i++) {
- file = element.files[i];
-
- // Grab the mimtype from the loaded file, verify it matches
- if(!file.type.match(new RegExp( ".?(" + typeParam + ")$", "i"))) {
- return false;
- }
- }
- }
- }
-
- // Either return true because we've validated each file, or because the
- // browser does not support element.files and the FileList feature
- return true;
-}, jQuery.format("Please enter a value with a valid mimetype."));
-
-// Older "accept" file extension method. Old docs: http://docs.jquery.com/Plugins/Validation/Methods/accept
-jQuery.validator.addMethod("extension", function(value, element, param) {
- param = typeof param === "string" ? param.replace(/,/g, '|') : "png|jpe?g|gif";
- return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i"));
-}, jQuery.format("Please enter a value with a valid extension."));
diff --git a/wqflask/wqflask/static/packages/jqplot/additional-methods.min.js b/wqflask/wqflask/static/packages/jqplot/additional-methods.min.js
deleted file mode 100644
index 60533e43..00000000
--- a/wqflask/wqflask/static/packages/jqplot/additional-methods.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery Validation Plugin - v1.10.0 - 9/7/2012
-* https://github.com/jzaefferer/jquery-validation
-* Copyright (c) 2012 Jörn Zaefferer; Licensed MIT, GPL */
-(function(){function a(a){return a.replace(/<.[^<>]*?>/g," ").replace(/&nbsp;|&#160;/gi," ").replace(/[.(),;:!?%#$'"_+=\/-]*/g,"")}jQuery.validator.addMethod("maxWords",function(b,c,d){return this.optional(c)||a(b).match(/\b\w+\b/g).length<=d},jQuery.validator.format("Please enter {0} words or less.")),jQuery.validator.addMethod("minWords",function(b,c,d){return this.optional(c)||a(b).match(/\b\w+\b/g).length>=d},jQuery.validator.format("Please enter at least {0} words.")),jQuery.validator.addMethod("rangeWords",function(b,c,d){var e=a(b),f=/\b\w+\b/g;return this.optional(c)||e.match(f).length>=d[0]&&e.match(f).length<=d[1]},jQuery.validator.format("Please enter between {0} and {1} words."))})(),jQuery.validator.addMethod("letterswithbasicpunc",function(a,b){return this.optional(b)||/^[a-z\-.,()'\"\s]+$/i.test(a)},"Letters or punctuation only please"),jQuery.validator.addMethod("alphanumeric",function(a,b){return this.optional(b)||/^\w+$/i.test(a)},"Letters, numbers, and underscores only please"),jQuery.validator.addMethod("lettersonly",function(a,b){return this.optional(b)||/^[a-z]+$/i.test(a)},"Letters only please"),jQuery.validator.addMethod("nowhitespace",function(a,b){return this.optional(b)||/^\S+$/i.test(a)},"No white space please"),jQuery.validator.addMethod("ziprange",function(a,b){return this.optional(b)||/^90[2-5]\d\{2\}-\d{4}$/.test(a)},"Your ZIP-code must be in the range 902xx-xxxx to 905-xx-xxxx"),jQuery.validator.addMethod("zipcodeUS",function(a,b){return this.optional(b)||/\d{5}-\d{4}$|^\d{5}$/.test(a)},"The specified US ZIP Code is invalid"),jQuery.validator.addMethod("integer",function(a,b){return this.optional(b)||/^-?\d+$/.test(a)},"A positive or negative non-decimal number please"),jQuery.validator.addMethod("vinUS",function(a){if(a.length!=17)return!1;var b,c,d,e,f,g,h=["A","B","C","D","E","F","G","H","J","K","L","M","N","P","R","S","T","U","V","W","X","Y","Z"],i=[1,2,3,4,5,6,7,8,1,2,3,4,5,7,9,2,3,4,5,6,7,8,9],j=[8,7,6,5,4,3,2,10,0,9,8,7,6,5,4,3,2],k=0;for(b=0;b<17;b++){e=j[b],d=a.slice(b,b+1),b==8&&(g=d);if(!isNaN(d))d*=e;else for(c=0;c<h.length;c++)if(d.toUpperCase()===h[c]){d=i[c],d*=e,isNaN(g)&&c==8&&(g=h[c]);break}k+=d}return f=k%11,f==10&&(f="X"),f==g?!0:!1},"The specified vehicle identification number (VIN) is invalid."),jQuery.validator.addMethod("dateITA",function(a,b){var c=!1,d=/^\d{1,2}\/\d{1,2}\/\d{4}$/;if(d.test(a)){var e=a.split("/"),f=parseInt(e[0],10),g=parseInt(e[1],10),h=parseInt(e[2],10),i=new Date(h,g-1,f);i.getFullYear()==h&&i.getMonth()==g-1&&i.getDate()==f?c=!0:c=!1}else c=!1;return this.optional(b)||c},"Please enter a correct date"),jQuery.validator.addMethod("dateNL",function(a,b){return this.optional(b)||/^\d\d?[\.\/-]\d\d?[\.\/-]\d\d\d?\d?$/.test(a)},"Vul hier een geldige datum in."),jQuery.validator.addMethod("time",function(a,b){return this.optional(b)||/^([0-1]\d|2[0-3]):([0-5]\d)$/.test(a)},"Please enter a valid time, between 00:00 and 23:59"),jQuery.validator.addMethod("time12h",function(a,b){return this.optional(b)||/^((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))$/i.test(a)},"Please enter a valid time, between 00:00 am and 12:00 pm"),jQuery.validator.addMethod("phoneUS",function(a,b){return a=a.replace(/\s+/g,""),this.optional(b)||a.length>9&&a.match(/^(\+?1-?)?(\([2-9]\d{2}\)|[2-9]\d{2})-?[2-9]\d{2}-?\d{4}$/)},"Please specify a valid phone number"),jQuery.validator.addMethod("phoneUK",function(a,b){return a=a.replace(/\(|\)|\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?)|(?:\(?0))(?:(?:\d{5}\)?\s?\d{4,5})|(?:\d{4}\)?\s?(?:\d{5}|\d{3}\s?\d{3}))|(?:\d{3}\)?\s?\d{3}\s?\d{3,4})|(?:\d{2}\)?\s?\d{4}\s?\d{4}))$/)},"Please specify a valid phone number"),jQuery.validator.addMethod("mobileUK",function(a,b){return a=a.replace(/\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)7(?:[45789]\d{2}|624)\s?\d{3}\s?\d{3})$/)},"Please specify a valid mobile number"),jQuery.validator.addMethod("phonesUK",function(a,b){return a=a.replace(/\s+|-/g,""),this.optional(b)||a.length>9&&a.match(/^(?:(?:(?:00\s?|\+)44\s?|0)(?:1\d{8,9}|[23]\d{9}|7(?:[45789]\d{8}|624\d{6})))$/)},"Please specify a valid uk phone number"),jQuery.validator.addMethod("postcodeUK",function(a,b){return a=a.toUpperCase().replace(/\s+/g,""),this.optional(b)||a.match(/^([^QZ][^IJZ]{0,1}\d{1,2})(\d[^CIKMOV]{2})$/)||a.match(/^([^QV]\d[ABCDEFGHJKSTUW])(\d[^CIKMOV]{2})$/)||a.match(/^([^QV][^IJZ]\d[ABEHMNPRVWXY])(\d[^CIKMOV]{2})$/)||a.match(/^(GIR)(0AA)$/)||a.match(/^(BFPO)(\d{1,4})$/)||a.match(/^(BFPO)(C\/O\d{1,3})$/)},"Please specify a valid postcode"),jQuery.validator.addMethod("strippedminlength",function(a,b,c){return jQuery(a).text().length>=c},jQuery.validator.format("Please enter at least {0} characters")),jQuery.validator.addMethod("email2",function(a,b,c){return this.optional(b)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(a)},jQuery.validator.messages.email),jQuery.validator.addMethod("url2",function(a,b,c){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)*(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},jQuery.validator.messages.url),jQuery.validator.addMethod("creditcardtypes",function(a,b,c){if(/[^0-9-]+/.test(a))return!1;a=a.replace(/\D/g,"");var d=0;return c.mastercard&&(d|=1),c.visa&&(d|=2),c.amex&&(d|=4),c.dinersclub&&(d|=8),c.enroute&&(d|=16),c.discover&&(d|=32),c.jcb&&(d|=64),c.unknown&&(d|=128),c.all&&(d=255),d&1&&/^(5[12345])/.test(a)?a.length==16:d&2&&/^(4)/.test(a)?a.length==16:d&4&&/^(3[47])/.test(a)?a.length==15:d&8&&/^(3(0[012345]|[68]))/.test(a)?a.length==14:d&16&&/^(2(014|149))/.test(a)?a.length==15:d&32&&/^(6011)/.test(a)?a.length==16:d&64&&/^(3)/.test(a)?a.length==16:d&64&&/^(2131|1800)/.test(a)?a.length==15:d&128?!0:!1},"Please enter a valid credit card number."),jQuery.validator.addMethod("ipv4",function(a,b,c){return this.optional(b)||/^(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)\.(25[0-5]|2[0-4]\d|[01]?\d\d?)$/i.test(a)},"Please enter a valid IP v4 address."),jQuery.validator.addMethod("ipv6",function(a,b,c){return this.optional(b)||/^((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b)\.){3}(\b((25[0-5])|(1\d{2})|(2[0-4]\d)|(\d{1,2}))\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))$/i.test(a)},"Please enter a valid IP v6 address."),jQuery.validator.addMethod("pattern",function(a,b,c){return this.optional(b)?!0:(typeof c=="string"&&(c=new RegExp("^(?:"+c+")$")),c.test(a))},"Invalid format."),jQuery.validator.addMethod("require_from_group",function(a,b,c){var d=this,e=c[1],f=$(e,b.form).filter(function(){return d.elementValue(this)}).length>=c[0];if(!$(b).data("being_validated")){var g=$(e,b.form);g.data("being_validated",!0),g.valid(),g.data("being_validated",!1)}return f},jQuery.format("Please fill at least {0} of these fields.")),jQuery.validator.addMethod("skip_or_fill_minimum",function(a,b,c){var d=this;numberRequired=c[0],selector=c[1];var e=$(selector,b.form).filter(function(){return d.elementValue(this)}).length,f=e>=numberRequired||e===0;if(!$(b).data("being_validated")){var g=$(selector,b.form);g.data("being_validated",!0),g.valid(),g.data("being_validated",!1)}return f},jQuery.format("Please either skip these fields or fill at least {0} of them.")),jQuery.validator.addMethod("accept",function(a,b,c){var d=typeof c=="string"?c.replace(/,/g,"|"):"image/*",e=this.optional(b),f,g;if(e)return e;if($(b).attr("type")==="file"){d=d.replace("*",".*");if(b.files&&b.files.length)for(f=0;f<b.files.length;f++){g=b.files[f];if(!g.type.match(new RegExp(".?("+d+")$","i")))return!1}}return!0},jQuery.format("Please enter a value with a valid mimetype.")),jQuery.validator.addMethod("extension",function(a,b,c){return c=typeof c=="string"?c.replace(/,/g,"|"):"png|jpe?g|gif",this.optional(b)||a.match(new RegExp(".("+c+")$","i"))},jQuery.format("Please enter a value with a valid extension.")) \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/changes.txt b/wqflask/wqflask/static/packages/jqplot/changes.txt
deleted file mode 100644
index 79c15677..00000000
--- a/wqflask/wqflask/static/packages/jqplot/changes.txt
+++ /dev/null
@@ -1,395 +0,0 @@
-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/wqflask/wqflask/static/packages/jqplot/copyright.txt b/wqflask/wqflask/static/packages/jqplot/copyright.txt
deleted file mode 100644
index 3730cff0..00000000
--- a/wqflask/wqflask/static/packages/jqplot/copyright.txt
+++ /dev/null
@@ -1,56 +0,0 @@
-/**
- * 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/wqflask/wqflask/static/packages/jqplot/docs/files/MIT-LICENSE-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/MIT-LICENSE-txt.html
deleted file mode 100644
index 25aef1a6..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/MIT-LICENSE-txt.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>MIT License</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="MIT_License"></a>MIT License</div><div class=CBody><p>Copyright &copy; 2009-2012 Chris Leonello</p><p>Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the &ldquo;Software&rdquo;), 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:</p><p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</p><p>THE SOFTWARE IS PROVIDED &ldquo;AS IS&rdquo;, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.&nbsp; 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.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile id=MSelected>MIT License</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/changes-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/changes-txt.html
deleted file mode 100644
index 2c6f6e56..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/changes-txt.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Change Log</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="Change_Log"></a>Change Log</div><div class=CBody><h4 class=CHeading>1.0.0b2</h4><ul><li>Major improvements in memory usage: ** Merged in changes from Timo Besenruether to reuse canvas elements and improve memory performance.&nbsp; ** Fixed all identifiable DOM leaks.&nbsp; ** Mergged in changes from cguillot for memory improvements in IE &lt; 9.</li><li>Added vertical and dashed vertical line support for canvas overlay.</li><li>Fixed bug where initially hidden plots would not display.</li><li>Fixed bug with point labels and null data points.</li><li>Updated to jQuery 1.6.1.</li><li>Improved pie slice margin calculation and fixed slice margin and pie positioning with small slices.</li><li>Improved bar renderer so bars always start at 0 if: ** The axis is a linear axis (not log/date).&nbsp; ** There are no other line types besides bars attached to the axis.&nbsp; ** The data on the axis is all &gt;= 0.&nbsp; ** The user has not specified a pad, padMin or forceTickAt0 = true option.</li><li>Modified tick prefix behavious so prefix no added to all ticks, even if format string is specified.</li><li>Fix to ensure original tick formats are applied when zooming and resetting zoom.</li><li>Updated auto tick format string so format adjusted when zooming.</li><li>Modified auto tick computation to put less ticks on small plots and more ticks on large plots.</li><li>Update bubble render to support gradients in IE 9.</li></ul><h4 class=CHeading>1.0.0b1</h4><ul><li>Much improved tick generation algorithm to get precise rounded tick values (Thanks Scott Prahl!).</li><li>Auto compute tick format string if none is provided.</li><li>Much better &ldquo;slicing&rdquo; of pie charts when using &ldquo;sliceMargin&rdquo; option to set a gap between the slices.</li><li>Expanded canvasOverlay plugin to create arbitrary dashed and solid horizontal and vertical lines on top of plot.</li><li>Added defaultColors and defaultNegativeColors options to $.jqplot.config.</li><li>Fixed issue #318, highlighter &amp; bar renderer incompatability.</li><li>Improve highlighter tooltip positioning with negative bars.</li><li>Fixed #305, mispelling of jqlotDragStart and jqlotDragStop.&nbsp; MUST NOW BIND TO jqplotDragStart and jqplotDragStop.</li><li>Fixed #290, some variables left in global scope.</li><li>Fixed #289, OHLC line widths hard coded at 1.5.&nbsp; Now set by lineWidth option.</li><li>Fixed #296 for determining databounds on log axes.</li><li>Updated to jQuery 1.5.1</li><li>Fixed waterfall plot to ensure first and last bars always fill to zero.</li><li>Added lineJoin and lineCap option to series lines.</li><li>Bar widths now based on width of grid, not plot target for better scaling.</li><li>Added looseZoom option to cursor so zooming can produce well rounded ticks.</li><li>Added forceTickAt0 and forceTickAt100 options to ensure there will always be a tick at 0 or 100 in the plot.</li><li>Fixed bug where cursor legend didn&rsquo;t honor series showLabel option.</li></ul><h4 class=CHeading>1.0.0a</h4><ul><li>Series can now be moved forward or backward in stack to e.g. bring a line forward when mousing over a point.</li><li>Can now move outside of grid area while zooming.&nbsp; Can have zoom constrained to grid area or allow zooming outside.</li><li>Fixed issue #142 with tooltip drawn on top of event canvas, hiding mouse events.</li><li>Fixed #147 where pie slices with 0 value not rendering properly in IE.</li><li>Fixed #130 where stack data not sorted properly.</li><li>Fixed bug with null values not handled properly in category axes.</li><li>Fixed #156 where pie charts not rendering on QTWebKit.</li><li>Now using feature detection for canvas and canvas text capability rather than browser version.</li><li>Added enahncedLegendRenderer plugin to allow multi row/column legends and clickable labels to show/hide series.</li><li>Added fillToValue option to allow filled line plot to fill to an arbitrary value.</li><li>Added block plot plugin.</li><li>Added funnel type charts.</li><li>Added meter gauge type charts.</li><li>Added plot theming support.</li><li>$.jqplot.config.enablePlugins now false by default.</li><li>Implemented highlighting on bar, pie, donut, funnel, etc. charts.</li><li>Fix to pointlabels plugin to align labels properly on multi series plots.</li><li>Added custom error handling to display error message in plot area.</li><li>Fixed issue where would call to draw grid border of 0 width would result in a default border being drawn.</li><li>Added options to place legend outside of grid and shrink grid so everything stays within plot div.</li><li>Fixed bug in color generator so now calls to get() continually cycle through colors just like next().</li><li>Added defaultAxisStart option.</li><li>Added gradient fills to bubbles.</li><li>Added bubble charts.</li><li>Added showLabels option to bubble charts.</li><li>Pass bubble radius to event callback in bubble charts.</li><li>Fixed #207, typo in docs.</li><li>Fixed #206 where &ldquo;value&rdquo; pie slice data labels were displaying wrong value.</li><li>Fixed #147 with 0 value slices in IE6.</li><li>Fixed issue #241, disabled varyBarColor option in stacked charts.</li><li>Added dataRenderer option to allow custom processors for JSON, AJAX and anywhere else you might want to get data.</li><li>Fixed null value handling so plot now properly skip or join over nulls.</li><li>Fixed showTicks and showTickMarks option conflicts.</li><li>Fixed issue #185 where pointLabels plugin incompatibility could crash pie, donut and other plots.</li><li>Fixed #23 and #143 to obey gridPadding option.</li><li>Fixed #233 with highlighter tooltip separator.</li><li>Fixed #224 where type checking failing on GWT.</li><li>Fixed #272 with pie highlighting not working on replot.</li><li>Memory performance improvements.</li><li>Changes to build script so everything should build when pulled from repo.</li><li>Fixed issue #275, IE 6/7 don&rsquo;t support array indexing of strings.</li><li>Added event listener hooks for mouseUp, mouseDown, etc. to all line plots.</li><li>Fixed bug with highlighter not working when null in data.</li><li>Updated to jQuery 1.4.4</li><li>Fixed bug where donut plots showed value of radians of slice instead of actual data.</li><li>Reverted to excanvas r3 so IE8 no longer has to emulate IE7.</li><li>Added tooltipContentEditor option to highlighter, allowing callback to manipulate tooltip content at run time (thanks Tim Bunce!).</li><li>Fixed bug where axes scale not resetting.</li><li>Fixed bug with date axes where data bounds not properly set.</li><li>Fixed issue where tick marks disappear if grid lines turned off.</li><li>Updated replot method to allow passing in axes options for more control.</li><li>Added experimental support for &ldquo;broken&rdquo; axes.</li><li>Fixed bug with pies where pies with 0 valued slices did not draw correctly.</li><li>Added canvasOverlay plugin to allow drawing of arbitrary shapes on a canvas over the plot.</li><li>Added option to display arbitrary text/html (message, animated gif, etc.) if plot is constructed without data.&nbsp; Allow a &ldquo;data loading&rdquo; indicator to be shown.</li><li>Added resetAxisValues method to manually update axis ticks without redrawing the plot.</li><li>Fix to labels on negative bars so label postiion of &lsquo;n&rsquo; will be below a negative bar, just as it is above a positive bar (thanks guigod!).</li><li>Added thousands separator character (&lsquo;) to sprintf formatting (thanks yuichi1004!).</li><li>Re-factored date parsing/formatting to use new jsDate module which does not extend the Date prototype.</li></ul><h4 class=CHeading>0.9.7</h4><ul><li>Added Mekko chart plot type with enhanced legend and axes support.</li><li>Implemented vertical waterfall charts.&nbsp; Can create waterfall plot as option to bar chart.&nbsp; See examples folder of distribution.</li><li>Enhanced plot labels for waterfall style.</li><li>Enhanced bar plots so you can now color each bar of a series independently with the &ldquo;varyBarColor&rdquo; option.</li><li>Re-factored series drawing so that each series and series shadow drawn on it&rsquo;s own canvas.&nbsp; Allows series to be redrawn independently of each other.</li><li>Added additional default series colors.</li><li>Added useNegativeColors option to turn off negative color array and use only seriesColors array to define all bar/filled line colors.</li><li>Fix css for cursor legend.</li><li>Modified shape renderer so rectangles can be stroked and filled.</li><li>Re-factored date methods out of dateAxisRenderer so that date formatter and methods can be accesses outside of dateAxisRenderer plugin.</li><li>Fixed #132, now trigger series change event on plot target instead of drag canvas.</li><li>Fixes issue #116 where some source files had mix of tabs and spaces for indentation.&nbsp; Should have been all spaces.</li><li>Fixed issue #126, some links broken in docs section of web site.</li><li>Fixed issue #90, trendline plugin incompatibility with pie renderer.</li><li>Updated samples in examples folder of distribution to include navigation links if web server is set up to process .html files with php.</li></ul><h4 class=CHeading>0.9.6</h4><ul><li>New, easier to use, replot() method for placing plots in tabs, accordions, resizable containers or for changing plot parameters programmatically.</li><li>Updated legend renderer for pie charts to draw swatches which will print correctly.</li><li>Fixed issue #118 with patch from taum so autoscale option will honor tickInterval and numberTicks options</li><li>Fix to plot diameter calculation for initially hidden plots.</li><li>Added examples for making plots in jQuery UI tabs and accordions.</li><li>Fixed issue #120 where pie chart with single slice not displaying correctly in IE and Chrome</li></ul><h4 class=CHeading>0.9.5.2</h4><ul><li>Fixed #102 where double clicking on plot that has zoom enabled, but has not been zoomed resulted in error.</li><li>Fixed bug where candlestick coloring options not working.</li><li>Added option to turn individual series labels off in the legend.</li></ul><h4 class=CHeading>0.9.5.1</h4><ul><li>Fixed bug where tooltip not working with OHLC and candlestick charts.</li><li>Added additional marker styles: plus, X and dash.</li></ul><h4 class=CHeading>0.9.5</h4><ul><li>Implemented &ldquo;zoomProxy&rdquo;.&nbsp; zoomProxy allows zooming one plot from another such as an overview plot.</li><li>Zooming can now be constrained to just x or y axis.</li><li>Enhanced cursor plugin with vertical &ldquo;dataTracking&rdquo; line.&nbsp; 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.</li><li>Changed cursor tooltip format string.&nbsp; Now one format string is used for entire tooltip.</li><li>Added mechanisms to specify plot size when plot target is hidden or plot height/width otherwise cannot be determined from markup.</li><li>Added $.jqplot.config object to specify jqplot wide configuration options.&nbsp; These include enablePlugins to globally set the default plugin state on/off and defaultHeight/defaultWidth to specify default plot height/width.</li><li>Added fillToZero option which forces filled charts to fill to zero as opposed to axis minimum.&nbsp; Thus negative filled bar/line values will fill upwards to zero axis value.</li><li>Added option to disable stacking on individual lines.</li><li>Changed targetId property of the plot object so it now includes a &ldquo;#&rdquo; before the id string.</li><li>Improved tick and body sizing of Open Hi Low Close and candlestick charts.</li><li>Removed lots of web site related files from the repository.&nbsp; This means that, if working from the sources, user&rsquo;s won&rsquo;t be able to build the jqplot web site and the docs/tests that are hosted on that site.&nbsp; The minified and compressed distribution packages will build fine.</li><li>Lots of examples were added to a separate examples directory to better show functionality of jqPlot for local testing with the distribution.</li><li>Many various bug fixes and other minor enhancements.</li></ul><h4 class=CHeading>0.9.4</h4><ul><li>Implemented axis labels.&nbsp; Labels can be rendered in div tags or as canvas elements supporting rotated text.</li><li>Improved rotated axis label positioning so labels will start or end at a tick position.</li><li>Fixed bug where an empty data series would hang plot rendering.</li><li>completed issue #66 for misc. improvements to documentation.</li><li>Fixed issue #64 where the same ID&rsquo;s were assigned to cursor and highlighter elements.</li><li>Added option to legend to encode special HTML characters.</li><li>Fixed undesirable behavior where point labels for points off the plot were being rendered.</li><li>Added edgeTolerance option to point label renderer to control rendering of labels near plot edges.</li></ul><h4 class=CHeading>0.9.3</h4><ul><li>Preliminary support for axis labels.&nbsp; Currently rendered into DIV tags, so no rotated label support.&nbsp; This feature is currently experimental.</li><li>Fixed bug #52, needed space in tick div tag between style and class declarations or plot failed in certain application doctypes.</li><li>Fixed issue #54, miter style line join for chart lines causing spikes at steep changes in slope.&nbsp; Changed miter style to round.</li><li>Added examples for new autoscaling algorithm.</li><li>Fixed bug #57, category axis labels disappear on redraw()</li><li>Improved algorithm which controlled maximum number of labels that would display on a category axis.</li><li>Fixed bug #45 where null values causing errors in plotData and gridData.</li><li>Fixed issue #60 where seriesColors option was not working.</li></ul><h4 class=CHeading>0.9.2</h4><ul><li>Fixed bug #45 where a plot could crash if series had different numbers of points.</li><li>Fixed issue #50, added option to turn off sorting of series data.</li><li>Fixed issue #31, implemented a better axis autoscaling algorithm and added an autoscale option.</li></ul><h4 class=CHeading>0.9.1</h4><ul><li>Fixed bug #40, when axis pad, padMax, padMin set to 0, graph would fail to render.</li><li>Fixed bug #41 where pie and bar charts not rendered correctly on redraw().</li><li>Fixed bug #11, filled stacked line plots not rendering correctly in IE.</li><li>Fixed bug #42 where stacked charts not rendering with string date axis ticks.</li><li>Fixed bug in redraw() method where axes ticks were not reset.</li><li>Fixed &ldquo;jqplotPreRedrawEvent&rdquo; that should have been named &ldquo;jqplotPostRedraw&rdquo; event.</li></ul><h4 class=CHeading>0.9.0</h4><ul><li>Added Open Hi Low Close charts, Candlestick charts and Hi Low Close charts.</li><li>Added support for arbitrary labels on the data points.</li><li>Enhanced highlighter plugin to allow custom formatting control of entire tooltip.</li><li>Enhanced highlighter to support multiple y values in a data point.</li><li>Fixed bug #38 where series with a single point with a negative value would fail.</li><li>Improvements to examples to show what plugins to include.</li><li>Expanded documentation for some of the plugins.</li></ul><h4 class=CHeading>0.8.5</h4><ul><li>Added zooming ability with double click or single click options to reset zoom.</li><li>Modified default tick spacing algorithm for date axes to give more space to ticks.</li><li>Fixed bug #2 where tickInterval wasn&rsquo;t working properly.</li><li>Added neighborThreshold option to control how close mouse must be to point to trigger neighbor detection.</li><li>Added double click event handler on plot.</li></ul><h4 class=CHeading>0.8.0</h4><ul><li>Support for up to 9 y axes.</li><li>Added option to control padding at max/min bounds of axes separately.</li><li>Closed issue #21, added options to control grid line color and width.</li><li>Closed issue #20, added options to filled line charts to stoke above fill and customize fill color and transparency.</li><li>Improved structure of on line documentation to make usage and options docs default.</li><li>Added much documentation on options and css styling.</li></ul><h4 class=CHeading>0.7.1</h4><ul><li>Bug fix release</li><li>Fixed bug #6, missing semi-colons messing up some javascript compressors.</li><li>Fixed bug #13 where 2D ticks array of [values, labels] would fail to renderer with DateAxisRenderer.</li><li>Fixes bug #16 where pie renderer overwriting options for all plot types and crashing non pie plots.</li><li>Fixes bug #17 constrainTo dragable option mispelled as &ldquo;contstrainTo&rdquo;.&nbsp; Fixed dragable color issue when used with trend lines.</li></ul><h4 class=CHeading>0.7.0</h4><ul><li>Pie chart support</li><li>Enabled tooltipLocation option in highlighter.</li><li>Highlighter Tooltip will account for mark size and highlight size when positioning itself.</li><li>Added ability to show just x, y or both axes in highlighter tooltip.</li><li>Added customization of separator between axes values in highlighter tooltip.</li><li>Modified how shadows are drawn for lines, bars and markers.&nbsp; Now drawn first, so they are always behind the object.</li><li>Adjustments to shadow parameters on lines to account for new shadow positioning.</li><li>Added a ColorGenerator class to robustly return next available color for a plot with wrap around to first color at end.</li><li>Udates to docs about css file.</li><li>Fixed bug with String x values in series and IE error on sorting (Category Axis).</li><li>Added cursor changes in dragable plugin when cursor near dragable point.</li></ul><h4 class=CHeading>0.6.6b</h4><ul><li>Added excanvas.js and excanvas.min.js to compressed distributions.</li><li>Added example/test html pages I had locally into repository and to compressed distributions.</li></ul><h4 class=CHeading>0.6.6a</h4><ul><li>Removed absolute positioning from dom element and put back into css file.</li><li>Duplicate of 0.6.6 with a suffix to unambiguously differentiate between previously posted 0.6.6 release.</li></ul><h4 class=CHeading>0.6.6</h4><ul><li>Fixed bug #5, trend line plugin failing when no trend line options specified.</li><li>Added absolute position css spec to axis tick dom element.</li><li>Enhancement to category axes, more intuitive handling of series with missing data values.</li></ul><h4 class=CHeading>0.6.5</h4><ul><li>Fixed bug #4, series of unequal data length not rendering correctly.&nbsp; This is a bugfix release only.</li></ul><h4 class=CHeading>0.6.4</h4><ul><li>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.</li></ul><h4 class=CHeading>0.6.3</h4><ul><li>Support for stacked line (a.k.a. area) and stacked bar (horizontal and vertical) charts.</li><li>Refactored barRenderer to use default shape and shadow renderers.</li><li>Added info (contacts &amp; support information) page to web site.</li></ul><h4 class=CHeading>0.6.2</h4><ul><li>This is a minor upgrade to docs and build only.&nbsp; No functionality has changed.</li><li>Ant build script generates entire site, examples, tests and distribution.</li><li>Improvements to documentation.</li></ul><h4 class=CHeading>0.6.1</h4><ul><li>New sprintf implementation from Ash Searle that implements %g.</li><li>Fix to sprintf e/f formats.</li><li>Created new format specifier, %p and %P to preserve significance.</li><li>Modified p/P format to better display larger numbers.</li><li>Fixed and simplified significant digits calculation for sprintf.</li><li>Added option to have cursor tooltip follow the mouse or not.</li><li>Added options to change size of highlight.</li><li>Updates to handle dates like &lsquo;6-May-09&rsquo;.</li><li>Mods to improve look of web site.</li><li>Updates to documentation.</li><li>Added license and copyright statement to source files.</li></ul><h4 class=CHeading>0.6.0</h4><ul><li>Added rotated text support.&nbsp; Uses native canvas text functionality in browsers that support it or draws text on canvas with Hershey font</li><li>metrics for non-supporting browsers.</li><li>Removed lots of lint in js code.</li><li>Moved tick css from js code into css file.</li><li>Fix to tick positioning css.&nbsp; y axis ticks were positioned to wrong side of axis div.</li><li>Re-factored axis tick renderer instantiation into the axes renderers themselves.</li></ul><p>For changes prior to 0.6.0 release, please see change log at <a href="http://bitbucket.org/cleonello/jqplot/changesets/" class=LURL target=_top>http://bitbucket.org/cleonello/jqplot/changesets/</a></p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile id=MSelected>Change Log</div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/gpl-2-0-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/gpl-2-0-txt.html
deleted file mode 100644
index 84ac3ed1..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/gpl-2-0-txt.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>GPL Version 2</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="GPL_Version_2"></a>GPL Version 2</div><div class=CBody><p>GNU GENERAL PUBLIC LICENSE Version 2, June 1991</p><p>Copyright &copy; 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.</p><p>Preamble</p><p>The licenses for most software are designed to take away your freedom to share and change it.&nbsp; 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.&nbsp; This General Public License applies to most of the Free Software Foundation&rsquo;s software and to any other program whose authors commit to using it.&nbsp; (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.)&nbsp; You can apply it to your programs, too.</p><p>When we speak of free software, we are referring to freedom, not price.&nbsp; 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.</p><p>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.&nbsp; These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.</p><p>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.&nbsp; You must make sure that they, too, receive or can get the source code.&nbsp; And you must show them these terms so they know their rights.</p><p>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.</p><p>Also, for each author&rsquo;s protection and ours, we want to make certain that everyone understands that there is no warranty for this free software.&nbsp; 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&rsquo; reputations.</p><p>Finally, any free program is threatened constantly by software patents.&nbsp; We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary.&nbsp; To prevent this, we have made it clear that any patent must be licensed for everyone&rsquo;s free use or not licensed at all.</p><p>The precise terms and conditions for copying, distribution and modification follow.</p><p>GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</p><p>0.&nbsp; 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.&nbsp; The &ldquo;Program&rdquo;, below, refers to any such program or work, and a &ldquo;work based on the Program&rdquo; 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.&nbsp; (Hereinafter, translation is included without limitation in the term &ldquo;modification&rdquo;.)&nbsp; Each licensee is addressed as &ldquo;you&rdquo;.</p><p>Activities other than copying, distribution and modification are not covered by this License; they are outside its scope.&nbsp; 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).&nbsp; Whether that is true depends on what the Program does.</p><p>1.&nbsp; You may copy and distribute verbatim copies of the Program&rsquo;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.</p><p>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.</p><p>2.&nbsp; 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:</p><p>a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.</p><p>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.</p><p>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.&nbsp; (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.)</p><p>These requirements apply to the modified work as a whole.&nbsp; 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.&nbsp; 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.</p><p>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.</p><p>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.</p><p>3.&nbsp; 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:</p><p>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,</p><p>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,</p><p>c) Accompany it with the information you received as to the offer to distribute corresponding source code.&nbsp; (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.)</p><p>The source code for a work means the preferred form of the work for making modifications to it.&nbsp; 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.&nbsp; 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.</p><p>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.</p><p>4.&nbsp; You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License.&nbsp; Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License.&nbsp; 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.</p><p>5.&nbsp; You are not required to accept this License, since you have not signed it.&nbsp; However, nothing else grants you permission to modify or distribute the Program or its derivative works.&nbsp; These actions are prohibited by law if you do not accept this License.&nbsp; 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.</p><p>6.&nbsp; 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.&nbsp; You may not impose any further restrictions on the recipients&rsquo; exercise of the rights granted herein.&nbsp; You are not responsible for enforcing compliance by third parties to this License.</p><p>7.&nbsp; 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.&nbsp; 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.&nbsp; 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.</p><p>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.</p><p>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.&nbsp; 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.</p><p>This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.</p><p>8.&nbsp; 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.&nbsp; In such case, this License incorporates the limitation as if written in the body of this License.</p><p>9.&nbsp; The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time.&nbsp; Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.</p><p>Each version is given a distinguishing version number.&nbsp; If the Program specifies a version number of this License which applies to it and &ldquo;any later version&rdquo;, 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.&nbsp; If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.</p><p>10.&nbsp; 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.&nbsp; For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this.&nbsp; 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.</p><p>NO WARRANTY</p><p>11.&nbsp; BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.&nbsp; EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM &ldquo;AS IS&rdquo; 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.&nbsp; THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.&nbsp; SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</p><p>12.&nbsp; 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.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile id=MSelected>GPL License</div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/background.jpg b/wqflask/wqflask/static/packages/jqplot/docs/files/images/background.jpg
deleted file mode 100644
index c1550529..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/background.jpg
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/basicline.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/basicline.png
deleted file mode 100644
index 1cc6bc69..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/basicline.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogaxis.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogaxis.png
deleted file mode 100644
index 7c169633..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogaxis.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogoptions.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogoptions.png
deleted file mode 100644
index d91bf5f6..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/basiclogoptions.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/basicoptions.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/basicoptions.png
deleted file mode 100644
index 4ea441c8..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/basicoptions.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/dualaxis.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/dualaxis.png
deleted file mode 100644
index 36012b23..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/dualaxis.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/logo.jpg b/wqflask/wqflask/static/packages/jqplot/docs/files/images/logo.jpg
deleted file mode 100644
index a12fffcd..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/logo.jpg
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocs.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocs.png
deleted file mode 100644
index 318ab04e..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocs.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocsover.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocsover.png
deleted file mode 100644
index 4a5b8ec7..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdocsover.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownload.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownload.png
deleted file mode 100644
index 41723e77..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownload.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownloadover.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownloadover.png
deleted file mode 100644
index 881bdbf8..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navdownloadover.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamples.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamples.png
deleted file mode 100644
index 89d1fb4e..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamples.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamplesover.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamplesover.png
deleted file mode 100644
index 0ea75255..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navexamplesover.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navhome.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navhome.png
deleted file mode 100644
index fd55aa5d..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navhome.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navhomeover.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/navhomeover.png
deleted file mode 100644
index 63bbf7a3..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/navhomeover.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/new.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/new.png
deleted file mode 100644
index 3eaba9c8..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/new.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/sample3.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/sample3.png
deleted file mode 100644
index 31e644de..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/sample3.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/images/samplesm.png b/wqflask/wqflask/static/packages/jqplot/docs/files/images/samplesm.png
deleted file mode 100644
index 1b7b3ef4..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/images/samplesm.png
+++ /dev/null
Binary files differ
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotCssStyling-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotCssStyling-txt.html
deleted file mode 100644
index e8c5bd2a..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotCssStyling-txt.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>jqPlot CSS Customization</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqPlot_CSS_Customization"></a>jqPlot CSS Customization</div><div class=CBody><p>Much of the styling of jqPlot is done by css.&nbsp; The jqPlot css file is, unremarkably, jquery.jqplot.css and resides in the same directory as jqPlot itself.</p><p>There exist some styling related javascript properties on the plot objects themselves (like fontStyle, fontSize, etc.).&nbsp; These can be set with the options object at plot creation.&nbsp; Generally, setting these options is <b>NOT</b> the preferred way to customize the look of the plot.&nbsp; Use the css file instead.&nbsp; <b>These options are deprecated and may disappear</b>.&nbsp; The exceptions are certain background and color options which control attributes of something renderered on a canvas.&nbsp; This would be line color, grid background, etc.&nbsp; These must be set by the options object.&nbsp; For a list of available options, see <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">jqPlot Options</a>.</p><p>Objects in the plot that can be customized by css are given a css class like &ldquo;.jqplot-*&rdquo;.&nbsp; For example, the plot title will have a &ldquo;.jqplot-title&rdquo; class, the axes &ldquo;.jqplot-axis&rdquo;, etc.</p><p>Currently assigned classes in jqPlot are as follows:</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>.jqplot-target</td><td class=CDLDescription>Styles for the plot target div.&nbsp; These will be cascaded down to all plot elements according to css rules.</td></tr><tr><td class=CDLEntry>.jqplot-axis</td><td class=CDLDescription>Styles for all axes</td></tr><tr><td class=CDLEntry>.jqplot-xaxis</td><td class=CDLDescription>Styles applied to the primary x axis only.</td></tr><tr><td class=CDLEntry>.jqplot-yaxis</td><td class=CDLDescription>Styles applied to the primary y axis only.</td></tr><tr><td class=CDLEntry>.jqplot-x2axis, .jqplot-x3axis, ...</td><td class=CDLDescription>Styles applied to the 2nd, 3rd, etc. x axis only.</td></tr><tr><td class=CDLEntry>.jqplot-y2axis, .jqplot-y3axis, ...</td><td class=CDLDescription>Styles applied to the 2nd, 3rd, etc.y axis only.</td></tr><tr><td class=CDLEntry>.jqplot-axis-tick</td><td class=CDLDescription>Styles applied to all axis ticks</td></tr><tr><td class=CDLEntry>.jqplot-xaxis-tick</td><td class=CDLDescription>Styles applied to primary x axis ticks only.</td></tr><tr><td class=CDLEntry>.jqplot-x2axis-tick</td><td class=CDLDescription>Styles applied to secondary x axis ticks only.</td></tr><tr><td class=CDLEntry>.jqplot-yaxis-tick</td><td class=CDLDescription>Styles applied to primary y axis ticks only.</td></tr><tr><td class=CDLEntry>.jqplot-y2axis-tick</td><td class=CDLDescription>Styles applied to secondary y axis ticks only.</td></tr><tr><td class=CDLEntry>table.jqplot-table-legend</td><td class=CDLDescription>Styles applied to the legend box table.</td></tr><tr><td class=CDLEntry>.jqplot-title</td><td class=CDLDescription>Styles applied to the title.</td></tr><tr><td class=CDLEntry>.jqplot-cursor-tooltip</td><td class=CDLDescription>Styles applied to the cursor tooltip</td></tr><tr><td class=CDLEntry>.jqplot-highlighter-tooltip</td><td class=CDLDescription>Styles applied to the highlighter tooltip.</td></tr><tr><td class=CDLEntry>div.jqplot-table-legend-swatch</td><td class=CDLDescription>the div element used for the colored swatch on the legend.</td></tr></table><p>Note that axes will be assigned 2 classes like: class=&rdquo;.jqplot-axis .jqplot-xaxis&rdquo;.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqPlot CSS Customization</div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CSection><b>This document is out of date. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotOptions-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotOptions-txt.html
deleted file mode 100644
index 5abc8339..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqPlotOptions-txt.html
+++ /dev/null
@@ -1,292 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>jqPlot Options</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqPlot_Options"></a>jqPlot Options</div><div class=CBody><p><b>This document is out of date.&nbsp; While the options described here should still be relavent and valid, it has not been updated for many new options.&nbsp; Sorry for this inconvenience.</b></p><p>This document describes the options available to jqPlot.&nbsp; These are set with the third argument to the $.jqplot(&lsquo;target&rsquo;, data, options) function.&nbsp; Options are using the following convention:</p><blockquote><pre>property: default, // notes</pre></blockquote><p>This document is not complete!&nbsp; Not all options are shown!&nbsp; Also, Options marked with * in the notes are post 0.7.1 additions.&nbsp; They will be available in the next release.&nbsp; Further information about the options can be found in the online API documentation.&nbsp; For details on how the options relate to the API documentation, see the <a href="optionsTutorial-txt.html#Options_Tutorial" class=LSection id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">Options Tutorial</a> in the optionsTutorial.txt file.</p><blockquote><pre>options =
-{
- seriesColors: [ &quot;#4bb2c5&quot;, &quot;#c5b47f&quot;, &quot;#EAA228&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;,
- &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;], // 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 &quot;cursor&quot; 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 &quot;dragable&quot; 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 &quot;highlighter&quot; 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: &quot;fast&quot;// 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
- }
- }
-}</pre></blockquote></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqPlot Options</div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CSection>This document will help you understand how jqPlot&rsquo;s options relate to the API documentation and the jqPlot object itself. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisLabelRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisLabelRenderer-js.html
deleted file mode 100644
index a268b1af..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisLabelRenderer-js.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.AxisLabelRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.AxisLabelRenderer"></a>$.jqplot.<wbr>AxisLabelRenderer</div><div class=CBody><p>Renderer to place labels on the axes.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.AxisLabelRenderer" >$.jqplot.<wbr>AxisLabelRenderer</a></td><td class=SDescription>Renderer to place labels on the axes.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.AxisLabelRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisLabelRenderer.show" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">show</a></td><td class=SDescription>wether or not to show the tick (mark and label).</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisLabelRenderer.label" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">label</a></td><td class=SDescription>The text or html for the label.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisLabelRenderer.escapeHTML" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">escapeHTML</a></td><td class=SDescription>true to escape HTML entities in the label.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisLabelRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisLabelRenderer.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the tick (mark and label).</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisLabelRenderer.label"></a>label</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote><p>The text or html for the label.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisLabelRenderer.escapeHTML"></a>escapeHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote><p>true to escape HTML entities in the label.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Axis Label Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>The text or html for the label.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote>true to escape HTML entities in the label.</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisTickRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisTickRenderer-js.html
deleted file mode 100644
index 13ea1899..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-axisTickRenderer-js.html
+++ /dev/null
@@ -1,73 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.AxisTickRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.AxisTickRenderer"></a>$.jqplot.<wbr>AxisTickRenderer</div><div class=CBody><p>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer" >$.jqplot.<wbr>AxisTickRenderer</a></td><td class=SDescription>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.mark" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">mark</a></td><td class=SDescription>tick mark on the axis. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.showMark" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">showMark</a></td><td class=SDescription>wether or not to show the mark on the axis.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.showGridline" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">showGridline</a></td><td class=SDescription>wether or not to draw the gridline on the grid at this tick.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.isMinorTick" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">isMinorTick</a></td><td class=SDescription>if this is a minor tick.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.size" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">size</a></td><td class=SDescription>Length of the tick beyond the grid in pixels. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.markSize" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">markSize</a></td><td class=SDescription>Length of the tick marks in pixels. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.show" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">show</a></td><td class=SDescription>wether or not to show the tick (mark and label). </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.showLabel" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">showLabel</a></td><td class=SDescription>wether or not to show the label.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.formatter" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">formatter</a></td><td class=SDescription>A class of a formatter for the tick text. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.prefix" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">prefix</a></td><td class=SDescription>String to prepend to the tick label. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.suffix" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">suffix</a></td><td class=SDescription>String to append to the tick label. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.formatString" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">formatString</a></td><td class=SDescription>string passed to the formatter.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.fontFamily" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">fontFamily</a></td><td class=SDescription>css spec for the font-family css attribute.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.fontSize" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">fontSize</a></td><td class=SDescription>css spec for the font-size css attribute.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.textColor" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">textColor</a></td><td class=SDescription>css spec for the color attribute.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.AxisTickRenderer.escapeHTML" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">escapeHTML</a></td><td class=SDescription>true to escape HTML entities in the label.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.mark"></a>mark</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote><p>tick mark on the axis.&nbsp; One of &lsquo;inside&rsquo;, &lsquo;outside&rsquo;, &lsquo;cross&rsquo;, &lsquo;&rsquo; or null.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.showMark"></a>showMark</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote><p>wether or not to show the mark on the axis.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.showGridline"></a>showGridline</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote><p>wether or not to draw the gridline on the grid at this tick.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.isMinorTick"></a>isMinorTick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote><p>if this is a minor tick.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.size"></a>size</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 4</td></tr></table></blockquote><p>Length of the tick beyond the grid in pixels.&nbsp; DEPRECATED: This has been superceeded by markSize</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.markSize"></a>markSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 6</td></tr></table></blockquote><p>Length of the tick marks in pixels.&nbsp; For &lsquo;cross&rsquo; style, length will be stoked above and below axis, so total length will be twice this.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the tick (mark and label).&nbsp; Setting this to false requires more testing.&nbsp; It is recommended to set showLabel and showMark to false instead.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.showLabel"></a>showLabel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote><p>wether or not to show the label.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.formatter"></a>formatter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote><p>A class of a formatter for the tick text.&nbsp; sprintf by default.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.prefix"></a>prefix</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote><p>String to prepend to the tick label.&nbsp; Prefix is prepended to the formatted tick label.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.suffix"></a>suffix</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.suffix = ''</td></tr></table></blockquote><p>String to append to the tick label.&nbsp; Suffix is appended to the formatted tick label.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.formatString"></a>formatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote><p>string passed to the formatter.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.fontFamily"></a>fontFamily</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote><p>css spec for the font-family css attribute.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.fontSize"></a>fontSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote><p>css spec for the font-size css attribute.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.textColor"></a>textColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote><p>css spec for the color attribute.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.AxisTickRenderer.escapeHTML"></a>escapeHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote><p>true to escape HTML entities in the label.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile id=MSelected>Axis Tick Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote>tick mark on the axis. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 4</td></tr></table></blockquote>Length of the tick beyond the grid in pixels. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 6</td></tr></table></blockquote>Length of the tick marks in pixels. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label). </div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote>String to prepend to the tick label. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.suffix = ''</td></tr></table></blockquote>String to append to the tick label. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size css attribute.</div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote>true to escape HTML entities in the label.</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-canvasGridRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-canvasGridRenderer-js.html
deleted file mode 100644
index f069f6b6..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-canvasGridRenderer-js.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.CanvasGridRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.CanvasGridRenderer"></a>$.jqplot.<wbr>CanvasGridRenderer</div><div class=CBody><p>The default jqPlot grid renderer, creating a grid on a canvas element.&nbsp; The renderer has no additional options beyond the <a href="jqplot-core-js.html#Grid" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">Grid</a> class.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Canvas Grid Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Object representing the grid on which the plot is drawn. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-core-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-core-js.html
deleted file mode 100644
index 9fa9cf9d..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-core-js.html
+++ /dev/null
@@ -1,389 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>jqPlot Charts</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqPlot_Charts"></a>jqPlot Charts</div><div class=CBody><p>Pure JavaScript plotting plugin for jQuery.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#jqPlot_Charts" >jqPlot Charts</a></td><td class=SDescription>Pure JavaScript plotting plugin for jQuery.</td></tr><tr class="SGeneric SIndent1 SMarked"><td class=SEntry><a href="#Version" >Version</a></td><td class=SDescription>version: 1.0.4 revision: 1121</td></tr><tr class="SGeneric SIndent1"><td class=SEntry><a href="#CopyrightLicense" >Copyright &amp; License</a></td><td class=SDescription>Copyright &copy; 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. </td></tr><tr class="SGeneric SIndent1 SMarked"><td class=SEntry><a href="#Introduction" >Introduction</a></td><td class=SDescription>jqPlot requires jQuery (1.4+ required for certain features). </td></tr><tr class="SGeneric SIndent1"><td class=SEntry><a href="#Usage" >Usage</a></td><td class=SDescription>See <a href="usage-txt.html#jqPlot_Usage" class=LSection >jqPlot Usage</a></td></tr><tr class="SGeneric SIndent1 SMarked"><td class=SEntry><a href="#Available_Options" >Available Options</a></td><td class=SDescription>See <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">jqPlot Options</a> for a list of options available thorugh the options object (not complete yet!)</td></tr><tr class="SGeneric SIndent1"><td class=SEntry><a href="#Options_Usage" >Options Usage</a></td><td class=SDescription>See <a href="optionsTutorial-txt.html#Options_Tutorial" class=LSection id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">Options Tutorial</a></td></tr><tr class="SGeneric SIndent1 SMarked"><td class=SEntry><a href="#Changes" >Changes</a></td><td class=SDescription>See <a href="changes-txt.html#Change_Log" class=LSection >Change Log</a></td></tr><tr class="SClass"><td class=SEntry><a href="#$.jqplot" >$.jqplot</a></td><td class=SDescription>jQuery function called by the user to create a plot.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Hooks" >Hooks</a></td><td class=SDescription></td></tr><tr class="SHook SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.jqPlot_Pugin_Hooks" >jqPlot Pugin Hooks</a></td><td class=SDescription></td></tr><tr class="SClass"><td class=SEntry><a href="#Axis" >Axis</a></td><td class=SDescription>An individual axis object. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Axis.Properties" >Properties</a></td><td class=SDescription>Axes options are specified within an axes object at the top level of the plot options like so:</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.show" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">show</a></td><td class=SDescription>Wether to display the axis on the graph.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.tickRenderer" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">tickRenderer</a></td><td class=SDescription>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">$.jqplot.AxisTickRenderer</a>.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.tickOptions" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">tickOptions</a></td><td class=SDescription>Options that will be passed to the tickRenderer, see <a href="jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt5', 'link7')" onMouseOut="HideTip('tt5')">$.jqplot.AxisTickRenderer</a> options.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.labelRenderer" id=link8 onMouseOver="ShowTip(event, 'tt7', 'link8')" onMouseOut="HideTip('tt7')">labelRenderer</a></td><td class=SDescription>A class of a rendering engine for creating an axis label.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.labelOptions" id=link9 onMouseOver="ShowTip(event, 'tt8', 'link9')" onMouseOut="HideTip('tt8')">labelOptions</a></td><td class=SDescription>Options passed to the label renderer.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.label" id=link10 onMouseOver="ShowTip(event, 'tt9', 'link10')" onMouseOut="HideTip('tt9')">label</a></td><td class=SDescription>Label for the axis</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.showLabel" id=link11 onMouseOver="ShowTip(event, 'tt10', 'link11')" onMouseOut="HideTip('tt10')">showLabel</a></td><td class=SDescription>true to show the axis label.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.min" id=link12 onMouseOver="ShowTip(event, 'tt11', 'link12')" onMouseOut="HideTip('tt11')">min</a></td><td class=SDescription>minimum value of the axis (in data units, not pixels).</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.max" id=link13 onMouseOver="ShowTip(event, 'tt12', 'link13')" onMouseOut="HideTip('tt12')">max</a></td><td class=SDescription>maximum value of the axis (in data units, not pixels).</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.autoscale" id=link14 onMouseOver="ShowTip(event, 'tt13', 'link14')" onMouseOut="HideTip('tt13')">autoscale</a></td><td class=SDescription>DEPRECATED the default scaling algorithm produces superior results.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.pad" id=link15 onMouseOver="ShowTip(event, 'tt14', 'link15')" onMouseOut="HideTip('tt14')">pad</a></td><td class=SDescription>Padding to extend the range above and below the data bounds. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.padMax" id=link16 onMouseOver="ShowTip(event, 'tt15', 'link16')" onMouseOut="HideTip('tt15')">padMax</a></td><td class=SDescription>Padding to extend the range above data bounds. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.padMin" id=link17 onMouseOver="ShowTip(event, 'tt16', 'link17')" onMouseOut="HideTip('tt16')">padMin</a></td><td class=SDescription>Padding to extend the range below data bounds. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.ticks" id=link18 onMouseOver="ShowTip(event, 'tt17', 'link18')" onMouseOut="HideTip('tt17')">ticks</a></td><td class=SDescription>1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.numberTicks" id=link19 onMouseOver="ShowTip(event, 'tt18', 'link19')" onMouseOut="HideTip('tt18')">numberTicks</a></td><td class=SDescription>Desired number of ticks. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.tickInterval" id=link20 onMouseOver="ShowTip(event, 'tt19', 'link20')" onMouseOut="HideTip('tt19')">tickInterval</a></td><td class=SDescription>number of units between ticks. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.renderer" id=link21 onMouseOver="ShowTip(event, 'tt20', 'link21')" onMouseOut="HideTip('tt20')">renderer</a></td><td class=SDescription>A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.rendererOptions" id=link22 onMouseOver="ShowTip(event, 'tt21', 'link22')" onMouseOut="HideTip('tt21')">rendererOptions</a></td><td class=SDescription>renderer specific options. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.showTicks" id=link23 onMouseOver="ShowTip(event, 'tt22', 'link23')" onMouseOut="HideTip('tt22')">showTicks</a></td><td class=SDescription>Wether to show the ticks (both marks and labels) or not. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.showTickMarks" id=link24 onMouseOver="ShowTip(event, 'tt23', 'link24')" onMouseOut="HideTip('tt23')">showTickMarks</a></td><td class=SDescription>Wether to show the tick marks (line crossing grid) or not. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.showMinorTicks" id=link25 onMouseOver="ShowTip(event, 'tt24', 'link25')" onMouseOut="HideTip('tt24')">showMinorTicks</a></td><td class=SDescription>Wether or not to show minor ticks. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.drawMajorGridlines" id=link26 onMouseOver="ShowTip(event, 'tt25', 'link26')" onMouseOut="HideTip('tt25')">drawMajorGridlines</a></td><td class=SDescription>True to draw gridlines for major axis ticks.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.drawMinorGridlines" id=link27 onMouseOver="ShowTip(event, 'tt26', 'link27')" onMouseOut="HideTip('tt26')">drawMinorGridlines</a></td><td class=SDescription>True to draw gridlines for minor ticks.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.drawMajorTickMarks" id=link28 onMouseOver="ShowTip(event, 'tt27', 'link28')" onMouseOut="HideTip('tt27')">drawMajorTickMarks</a></td><td class=SDescription>True to draw tick marks for major axis ticks.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.drawMinorTickMarks" id=link29 onMouseOver="ShowTip(event, 'tt28', 'link29')" onMouseOut="HideTip('tt28')">drawMinorTickMarks</a></td><td class=SDescription>True to draw tick marks for minor ticks. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.useSeriesColor" id=link30 onMouseOver="ShowTip(event, 'tt29', 'link30')" onMouseOut="HideTip('tt29')">useSeriesColor</a></td><td class=SDescription>Use the color of the first series associated with this axis for the tick marks and line bordering this axis.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.borderWidth" id=link31 onMouseOver="ShowTip(event, 'tt30', 'link31')" onMouseOut="HideTip('tt30')">borderWidth</a></td><td class=SDescription>width of line stroked at the border of the axis. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.borderColor" id=link32 onMouseOver="ShowTip(event, 'tt31', 'link32')" onMouseOut="HideTip('tt31')">borderColor</a></td><td class=SDescription>color of the border adjacent to the axis. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.scaleToHiddenSeries" id=link33 onMouseOver="ShowTip(event, 'tt32', 'link33')" onMouseOut="HideTip('tt32')">scaleToHiddenSeries</a></td><td class=SDescription>True to include hidden series when computing axes bounds and scaling.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Axis.syncTicks" id=link34 onMouseOver="ShowTip(event, 'tt33', 'link34')" onMouseOut="HideTip('tt33')">syncTicks</a></td><td class=SDescription>true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Axis.tickSpacing" id=link35 onMouseOver="ShowTip(event, 'tt34', 'link35')" onMouseOut="HideTip('tt34')">tickSpacing</a></td><td class=SDescription>Approximate pixel spacing between ticks on graph. </td></tr><tr class="SClass"><td class=SEntry><a href="#Legend" >Legend</a></td><td class=SDescription>Legend object. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Legend.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.show" id=link36 onMouseOver="ShowTip(event, 'tt35', 'link36')" onMouseOut="HideTip('tt35')">show</a></td><td class=SDescription>Wether to display the legend on the graph.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.location" id=link37 onMouseOver="ShowTip(event, 'tt36', 'link37')" onMouseOut="HideTip('tt36')">location</a></td><td class=SDescription>Placement of the legend. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.labels" id=link38 onMouseOver="ShowTip(event, 'tt37', 'link38')" onMouseOut="HideTip('tt37')">labels</a></td><td class=SDescription>Array of labels to use. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.showLabels" id=link39 onMouseOver="ShowTip(event, 'tt38', 'link39')" onMouseOut="HideTip('tt38')">showLabels</a></td><td class=SDescription>true to show the label text on the legend.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.showSwatch" id=link40 onMouseOver="ShowTip(event, 'tt39', 'link40')" onMouseOut="HideTip('tt39')">showSwatch</a></td><td class=SDescription>true to show the color swatches on the legend.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.placement" id=link41 onMouseOver="ShowTip(event, 'tt40', 'link41')" onMouseOut="HideTip('tt40')">placement</a></td><td class=SDescription>&ldquo;insideGrid&rdquo; places legend inside the grid area of the plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.xoffset" id=link42 onMouseOver="ShowTip(event, 'tt41', 'link42')" onMouseOut="HideTip('tt41')">xoffset</a></td><td class=SDescription>DEPRECATED. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.yoffset" id=link43 onMouseOver="ShowTip(event, 'tt42', 'link43')" onMouseOut="HideTip('tt42')">yoffset</a></td><td class=SDescription>DEPRECATED. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.border" id=link44 onMouseOver="ShowTip(event, 'tt43', 'link44')" onMouseOut="HideTip('tt43')">border</a></td><td class=SDescription>css spec for the border around the legend box.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.background" id=link45 onMouseOver="ShowTip(event, 'tt44', 'link45')" onMouseOut="HideTip('tt44')">background</a></td><td class=SDescription>css spec for the background of the legend box.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.textColor" id=link46 onMouseOver="ShowTip(event, 'tt45', 'link46')" onMouseOut="HideTip('tt45')">textColor</a></td><td class=SDescription>css color spec for the legend text.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.fontFamily" id=link47 onMouseOver="ShowTip(event, 'tt46', 'link47')" onMouseOut="HideTip('tt46')">fontFamily</a></td><td class=SDescription>css font-family spec for the legend text.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.fontSize" id=link48 onMouseOver="ShowTip(event, 'tt47', 'link48')" onMouseOut="HideTip('tt47')">fontSize</a></td><td class=SDescription>css font-size spec for the legend text.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.rowSpacing" id=link49 onMouseOver="ShowTip(event, 'tt48', 'link49')" onMouseOut="HideTip('tt48')">rowSpacing</a></td><td class=SDescription>css padding-top spec for the rows in the legend.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.rendererOptions" id=link50 onMouseOver="ShowTip(event, 'tt49', 'link50')" onMouseOut="HideTip('tt49')">rendererOptions</a></td><td class=SDescription>renderer specific options passed to the renderer.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.predraw" >predraw</a></td><td class=SDescription>Wether to draw the legend before the series or not. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.marginTop" id=link51 onMouseOver="ShowTip(event, 'tt50', 'link51')" onMouseOut="HideTip('tt50')">marginTop</a></td><td class=SDescription>CSS margin for the legend DOM element. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.marginRight" id=link52 onMouseOver="ShowTip(event, 'tt51', 'link52')" onMouseOut="HideTip('tt51')">marginRight</a></td><td class=SDescription>CSS margin for the legend DOM element. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.marginBottom" id=link53 onMouseOver="ShowTip(event, 'tt52', 'link53')" onMouseOut="HideTip('tt52')">marginBottom</a></td><td class=SDescription>CSS margin for the legend DOM element. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Legend.marginLeft" id=link54 onMouseOver="ShowTip(event, 'tt53', 'link54')" onMouseOut="HideTip('tt53')">marginLeft</a></td><td class=SDescription>CSS margin for the legend DOM element. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Legend.escapeHtml" id=link55 onMouseOver="ShowTip(event, 'tt54', 'link55')" onMouseOut="HideTip('tt54')">escapeHtml</a></td><td class=SDescription>True to escape special characters with their html entity equivalents in legend text. </td></tr><tr class="SClass"><td class=SEntry><a href="#Title" >Title</a></td><td class=SDescription>Plot Title object. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Title.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Title.text" id=link56 onMouseOver="ShowTip(event, 'tt55', 'link56')" onMouseOut="HideTip('tt55')">text</a></td><td class=SDescription>text of the title;</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Title.show" id=link57 onMouseOver="ShowTip(event, 'tt56', 'link57')" onMouseOut="HideTip('tt56')">show</a></td><td class=SDescription>wether or not to show the title</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Title.fontFamily" id=link58 onMouseOver="ShowTip(event, 'tt57', 'link58')" onMouseOut="HideTip('tt57')">fontFamily</a></td><td class=SDescription>css font-family spec for the text.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Title.fontSize" id=link59 onMouseOver="ShowTip(event, 'tt58', 'link59')" onMouseOut="HideTip('tt58')">fontSize</a></td><td class=SDescription>css font-size spec for the text.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Title.textAlign" id=link60 onMouseOver="ShowTip(event, 'tt59', 'link60')" onMouseOut="HideTip('tt59')">textAlign</a></td><td class=SDescription>css text-align spec for the text.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Title.textColor" id=link61 onMouseOver="ShowTip(event, 'tt60', 'link61')" onMouseOut="HideTip('tt60')">textColor</a></td><td class=SDescription>css color spec for the text.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Title.renderer" id=link62 onMouseOver="ShowTip(event, 'tt61', 'link62')" onMouseOut="HideTip('tt61')">renderer</a></td><td class=SDescription>A class for creating a DOM element for the title, see <a href="jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" class=LClass id=link63 onMouseOver="ShowTip(event, 'tt62', 'link63')" onMouseOut="HideTip('tt62')">$.jqplot.DivTitleRenderer</a>.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Title.rendererOptions" id=link64 onMouseOver="ShowTip(event, 'tt63', 'link64')" onMouseOut="HideTip('tt63')">rendererOptions</a></td><td class=SDescription>renderer specific options passed to the renderer.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Title.escapeHtml" id=link65 onMouseOver="ShowTip(event, 'tt64', 'link65')" onMouseOut="HideTip('tt64')">escapeHtml</a></td><td class=SDescription>True to escape special characters with their html entity equivalents in title text. </td></tr><tr class="SClass"><td class=SEntry><a href="#Series" >Series</a></td><td class=SDescription>An individual data series object. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Series.Properties" >Properties</a></td><td class=SDescription>Properties will be assigned from a series array at the top level of the options. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.show" id=link66 onMouseOver="ShowTip(event, 'tt65', 'link66')" onMouseOut="HideTip('tt65')">show</a></td><td class=SDescription>wether or not to draw the series.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.xaxis" id=link67 onMouseOver="ShowTip(event, 'tt66', 'link67')" onMouseOut="HideTip('tt66')">xaxis</a></td><td class=SDescription>which x axis to use with this series, either &lsquo;xaxis&rsquo; or &lsquo;x2axis&rsquo;.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.yaxis" id=link68 onMouseOver="ShowTip(event, 'tt67', 'link68')" onMouseOut="HideTip('tt67')">yaxis</a></td><td class=SDescription>which y axis to use with this series, either &lsquo;yaxis&rsquo; or &lsquo;y2axis&rsquo;.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.renderer" id=link69 onMouseOver="ShowTip(event, 'tt68', 'link69')" onMouseOut="HideTip('tt68')">renderer</a></td><td class=SDescription>A class of a renderer which will draw the series, see <a href="jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" class=LClass id=link70 onMouseOver="ShowTip(event, 'tt69', 'link70')" onMouseOut="HideTip('tt69')">$.jqplot.LineRenderer</a>.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.rendererOptions" id=link71 onMouseOver="ShowTip(event, 'tt70', 'link71')" onMouseOut="HideTip('tt70')">rendererOptions</a></td><td class=SDescription>Options to pass on to the renderer.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.label" id=link72 onMouseOver="ShowTip(event, 'tt71', 'link72')" onMouseOut="HideTip('tt71')">label</a></td><td class=SDescription>Line label to use in the legend.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.showLabel" id=link73 onMouseOver="ShowTip(event, 'tt72', 'link73')" onMouseOut="HideTip('tt72')">showLabel</a></td><td class=SDescription>true to show label for this series in the legend.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.color" id=link74 onMouseOver="ShowTip(event, 'tt73', 'link74')" onMouseOut="HideTip('tt73')">color</a></td><td class=SDescription>css color spec for the series</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.negativeColor" id=link75 onMouseOver="ShowTip(event, 'tt74', 'link75')" onMouseOut="HideTip('tt74')">negativeColor</a></td><td class=SDescription>css color spec used for filled (area) plots that are filled to zero and the &ldquo;useNegativeColors&rdquo; option is true.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.lineWidth" id=link76 onMouseOver="ShowTip(event, 'tt75', 'link76')" onMouseOut="HideTip('tt75')">lineWidth</a></td><td class=SDescription>width of the line in pixels. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.lineJoin" id=link77 onMouseOver="ShowTip(event, 'tt76', 'link77')" onMouseOut="HideTip('tt76')">lineJoin</a></td><td class=SDescription>Canvas lineJoin style between segments of series.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.lineCap" id=link78 onMouseOver="ShowTip(event, 'tt77', 'link78')" onMouseOut="HideTip('tt77')">lineCap</a></td><td class=SDescription>Canvas lineCap style at ends of line.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.linePattern" id=link79 onMouseOver="ShowTip(event, 'tt78', 'link79')" onMouseOut="HideTip('tt78')">linePattern</a></td><td class=SDescription>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.shadowAngle" id=link80 onMouseOver="ShowTip(event, 'tt79', 'link80')" onMouseOut="HideTip('tt79')">shadowAngle</a></td><td class=SDescription>Shadow angle in degrees</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.shadowOffset" id=link81 onMouseOver="ShowTip(event, 'tt80', 'link81')" onMouseOut="HideTip('tt80')">shadowOffset</a></td><td class=SDescription>Shadow offset from line in pixels</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.shadowDepth" id=link82 onMouseOver="ShowTip(event, 'tt81', 'link82')" onMouseOut="HideTip('tt81')">shadowDepth</a></td><td class=SDescription>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.shadowAlpha" id=link83 onMouseOver="ShowTip(event, 'tt82', 'link83')" onMouseOut="HideTip('tt82')">shadowAlpha</a></td><td class=SDescription>Alpha channel transparency of shadow. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.breakOnNull" id=link84 onMouseOver="ShowTip(event, 'tt83', 'link84')" onMouseOut="HideTip('tt83')">breakOnNull</a></td><td class=SDescription>Wether line segments should be be broken at null value. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.markerRenderer" id=link85 onMouseOver="ShowTip(event, 'tt84', 'link85')" onMouseOut="HideTip('tt84')">markerRenderer</a></td><td class=SDescription>A class of a renderer which will draw marker (e.g. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.markerOptions" id=link86 onMouseOver="ShowTip(event, 'tt85', 'link86')" onMouseOut="HideTip('tt85')">markerOptions</a></td><td class=SDescription>renderer specific options to pass to the markerRenderer, see <a href="jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" class=LClass id=link87 onMouseOver="ShowTip(event, 'tt86', 'link87')" onMouseOut="HideTip('tt86')">$.jqplot.MarkerRenderer</a>.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.showLine" id=link88 onMouseOver="ShowTip(event, 'tt87', 'link88')" onMouseOut="HideTip('tt87')">showLine</a></td><td class=SDescription>wether to actually draw the line or not. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.showMarker" id=link89 onMouseOver="ShowTip(event, 'tt88', 'link89')" onMouseOut="HideTip('tt88')">showMarker</a></td><td class=SDescription>wether or not to show the markers at the data points.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.index" id=link90 onMouseOver="ShowTip(event, 'tt89', 'link90')" onMouseOut="HideTip('tt89')">index</a></td><td class=SDescription>0 based index of this series in the plot series array.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.fill" id=link91 onMouseOver="ShowTip(event, 'tt90', 'link91')" onMouseOut="HideTip('tt90')">fill</a></td><td class=SDescription>true or false, wether to fill under lines or in bars. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.fillColor" id=link92 onMouseOver="ShowTip(event, 'tt91', 'link92')" onMouseOut="HideTip('tt91')">fillColor</a></td><td class=SDescription>CSS color spec to use for fill under line. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.fillAlpha" id=link93 onMouseOver="ShowTip(event, 'tt92', 'link93')" onMouseOut="HideTip('tt92')">fillAlpha</a></td><td class=SDescription>Alpha transparency to apply to the fill under the line. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.fillAndStroke" id=link94 onMouseOver="ShowTip(event, 'tt93', 'link94')" onMouseOut="HideTip('tt93')">fillAndStroke</a></td><td class=SDescription>If true will stroke the line (with color this.color) as well as fill under it. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.disableStack" id=link95 onMouseOver="ShowTip(event, 'tt94', 'link95')" onMouseOut="HideTip('tt94')">disableStack</a></td><td class=SDescription>true to not stack this series with other series in the plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.neighborThreshold" id=link96 onMouseOver="ShowTip(event, 'tt95', 'link96')" onMouseOut="HideTip('tt95')">neighborThreshold</a></td><td class=SDescription>how close or far (in pixels) the cursor must be from a point marker to detect the point.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.fillToZero" id=link97 onMouseOver="ShowTip(event, 'tt96', 'link97')" onMouseOut="HideTip('tt96')">fillToZero</a></td><td class=SDescription>true will force bar and filled series to fill toward zero on the fill Axis.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.fillToValue" id=link98 onMouseOver="ShowTip(event, 'tt97', 'link98')" onMouseOut="HideTip('tt97')">fillToValue</a></td><td class=SDescription>fill a filled series to this value on the fill axis. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Series.fillAxis" id=link99 onMouseOver="ShowTip(event, 'tt98', 'link99')" onMouseOut="HideTip('tt98')">fillAxis</a></td><td class=SDescription>Either &lsquo;x&rsquo; or &lsquo;y&rsquo;. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Series.useNegativeColors" id=link100 onMouseOver="ShowTip(event, 'tt99', 'link100')" onMouseOut="HideTip('tt99')">useNegativeColors</a></td><td class=SDescription>true to color negative values differently in filled and bar charts.</td></tr><tr class="SClass"><td class=SEntry><a href="#Grid" >Grid</a></td><td class=SDescription>Object representing the grid on which the plot is drawn. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Grid.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Grid.drawGridlines" id=link101 onMouseOver="ShowTip(event, 'tt100', 'link101')" onMouseOut="HideTip('tt100')">drawGridlines</a></td><td class=SDescription>wether to draw the gridlines on the plot.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Grid.gridLineColor" id=link102 onMouseOver="ShowTip(event, 'tt101', 'link102')" onMouseOut="HideTip('tt101')">gridLineColor</a></td><td class=SDescription>color of the grid lines.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Grid.gridLineWidth" id=link103 onMouseOver="ShowTip(event, 'tt102', 'link103')" onMouseOut="HideTip('tt102')">gridLineWidth</a></td><td class=SDescription>width of the grid lines.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Grid.background" id=link104 onMouseOver="ShowTip(event, 'tt103', 'link104')" onMouseOut="HideTip('tt103')">background</a></td><td class=SDescription>css spec for the background color.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Grid.borderColor" id=link105 onMouseOver="ShowTip(event, 'tt104', 'link105')" onMouseOut="HideTip('tt104')">borderColor</a></td><td class=SDescription>css spec for the color of the grid border.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Grid.borderWidth" id=link106 onMouseOver="ShowTip(event, 'tt105', 'link106')" onMouseOut="HideTip('tt105')">borderWidth</a></td><td class=SDescription>width of the border in pixels.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Grid.drawBorder" id=link107 onMouseOver="ShowTip(event, 'tt106', 'link107')" onMouseOut="HideTip('tt106')">drawBorder</a></td><td class=SDescription>True to draw border around grid.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Grid.shadow" id=link108 onMouseOver="ShowTip(event, 'tt107', 'link108')" onMouseOut="HideTip('tt107')">shadow</a></td><td class=SDescription>wether to show a shadow behind the grid.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Grid.shadowAngle" id=link109 onMouseOver="ShowTip(event, 'tt108', 'link109')" onMouseOut="HideTip('tt108')">shadowAngle</a></td><td class=SDescription>shadow angle in degrees</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Grid.shadowOffset" id=link110 onMouseOver="ShowTip(event, 'tt109', 'link110')" onMouseOut="HideTip('tt109')">shadowOffset</a></td><td class=SDescription>Offset of each shadow stroke from the border in pixels</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Grid.shadowWidth" id=link111 onMouseOver="ShowTip(event, 'tt110', 'link111')" onMouseOut="HideTip('tt110')">shadowWidth</a></td><td class=SDescription>width of the stoke for the shadow</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Grid.shadowDepth" id=link112 onMouseOver="ShowTip(event, 'tt111', 'link112')" onMouseOut="HideTip('tt111')">shadowDepth</a></td><td class=SDescription>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Grid.shadowColor" id=link113 onMouseOver="ShowTip(event, 'tt112', 'link113')" onMouseOut="HideTip('tt112')">shadowColor</a></td><td class=SDescription>an optional css color spec for the shadow in &lsquo;rgba(n, n, n, n)&rsquo; form</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Grid.shadowAlpha" id=link114 onMouseOver="ShowTip(event, 'tt113', 'link114')" onMouseOut="HideTip('tt113')">shadowAlpha</a></td><td class=SDescription>Alpha channel transparency of shadow. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Grid.renderer" id=link115 onMouseOver="ShowTip(event, 'tt114', 'link115')" onMouseOut="HideTip('tt114')">renderer</a></td><td class=SDescription>Instance of a renderer which will actually render the grid, see <a href="jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" class=LClass id=link116 onMouseOver="ShowTip(event, 'tt115', 'link116')" onMouseOut="HideTip('tt115')">$.jqplot.CanvasGridRenderer</a>.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Grid.rendererOptions" id=link117 onMouseOver="ShowTip(event, 'tt116', 'link117')" onMouseOut="HideTip('tt116')">rendererOptions</a></td><td class=SDescription>Options to pass on to the renderer, see <a href="jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" class=LClass id=link118 onMouseOver="ShowTip(event, 'tt115', 'link118')" onMouseOut="HideTip('tt115')">$.jqplot.CanvasGridRenderer</a>.</td></tr><tr class="SClass"><td class=SEntry><a href="#jqPlot" >jqPlot</a></td><td class=SDescription>Plot object returned by call to $.jqplot. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#jqPlot.Properties" >Properties</a></td><td class=SDescription>These properties are specified at the top of the options object like so:</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.animate" id=link119 onMouseOver="ShowTip(event, 'tt117', 'link119')" onMouseOut="HideTip('tt117')">animate</a></td><td class=SDescription>True to animate the series on initial plot draw (renderer dependent). </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.animateReplot" id=link120 onMouseOver="ShowTip(event, 'tt118', 'link120')" onMouseOut="HideTip('tt118')">animateReplot</a></td><td class=SDescription>True to animate series after a call to the replot() method. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.axes" id=link121 onMouseOver="ShowTip(event, 'tt119', 'link121')" onMouseOut="HideTip('tt119')">axes</a></td><td class=SDescription>up to 4 axes are supported, each with it&rsquo;s own options, See <a href="#Axis" class=LClass id=link122 onMouseOver="ShowTip(event, 'tt120', 'link122')" onMouseOut="HideTip('tt120')">Axis</a> for axis specific options.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.data" id=link123 onMouseOver="ShowTip(event, 'tt121', 'link123')" onMouseOut="HideTip('tt121')">data</a></td><td class=SDescription>user&rsquo;s data. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.dataRenderer" id=link124 onMouseOver="ShowTip(event, 'tt122', 'link124')" onMouseOut="HideTip('tt122')">dataRenderer</a></td><td class=SDescription>A callable which can be used to preprocess data passed into the plot. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.dataRendererOptions" id=link125 onMouseOver="ShowTip(event, 'tt123', 'link125')" onMouseOut="HideTip('tt123')">dataRendererOptions</a></td><td class=SDescription>Options that will be passed to the dataRenderer. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.axesDefaults" >axesDefaults</a></td><td class=SDescription>default options that will be applied to all axes. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.seriesDefaults" id=link126 onMouseOver="ShowTip(event, 'tt124', 'link126')" onMouseOut="HideTip('tt124')">seriesDefaults</a></td><td class=SDescription>default options that will be applied to all series. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.defaultAxisStart" id=link127 onMouseOver="ShowTip(event, 'tt125', 'link127')" onMouseOut="HideTip('tt125')">defaultAxisStart</a></td><td class=SDescription>1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.fillBetween" id=link128 onMouseOver="ShowTip(event, 'tt126', 'link128')" onMouseOut="HideTip('tt126')">fillBetween</a></td><td class=SDescription>Fill between 2 line series in a plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.fontSize" id=link129 onMouseOver="ShowTip(event, 'tt127', 'link129')" onMouseOut="HideTip('tt127')">fontSize</a></td><td class=SDescription>css spec for the font-size attribute. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.grid" id=link130 onMouseOver="ShowTip(event, 'tt128', 'link130')" onMouseOut="HideTip('tt128')">grid</a></td><td class=SDescription>See <a href="#Grid" class=LClass id=link131 onMouseOver="ShowTip(event, 'tt129', 'link131')" onMouseOut="HideTip('tt129')">Grid</a> for grid specific options.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.legend" id=link132 onMouseOver="ShowTip(event, 'tt130', 'link132')" onMouseOut="HideTip('tt130')">legend</a></td><td class=SDescription>see &lt;$.jqplot.TableLegendRenderer&gt;</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.noDataIndicator" >noDataIndicator</a></td><td class=SDescription>Options to set up a mock plot with a data loading indicator if no data is specified.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.series" id=link133 onMouseOver="ShowTip(event, 'tt131', 'link133')" onMouseOut="HideTip('tt131')">series</a></td><td class=SDescription>Array of series object options. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.seriesColors" id=link134 onMouseOver="ShowTip(event, 'tt132', 'link134')" onMouseOut="HideTip('tt132')">seriesColors</a></td><td class=SDescription>Ann array of CSS color specifications that will be applied, in order, to the series in the plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.sortData" id=link135 onMouseOver="ShowTip(event, 'tt133', 'link135')" onMouseOut="HideTip('tt133')">sortData</a></td><td class=SDescription>false to not sort the data passed in by the user. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#jqPlot.stackSeries" id=link136 onMouseOver="ShowTip(event, 'tt134', 'link136')" onMouseOut="HideTip('tt134')">stackSeries</a></td><td class=SDescription>true or false, creates a stack or &ldquo;mountain&rdquo; plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.title" id=link137 onMouseOver="ShowTip(event, 'tt135', 'link137')" onMouseOut="HideTip('tt135')">title</a></td><td class=SDescription>Title object. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#jqPlot.methods" >methods</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.init" id=link138 onMouseOver="ShowTip(event, 'tt136', 'link138')" onMouseOut="HideTip('tt136')">init</a></td><td class=SDescription>sets the plot target, checks data and applies user options to plot.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jqPlot.resetAxesScale" id=link139 onMouseOver="ShowTip(event, 'tt137', 'link139')" onMouseOut="HideTip('tt137')">resetAxesScale</a></td><td class=SDescription>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.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.reInitialize" id=link140 onMouseOver="ShowTip(event, 'tt138', 'link140')" onMouseOut="HideTip('tt138')">reInitialize</a></td><td class=SDescription>reinitialize plot for replotting. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jqPlot.quickInit" id=link141 onMouseOver="ShowTip(event, 'tt139', 'link141')" onMouseOut="HideTip('tt139')">quickInit</a></td><td class=SDescription>Quick reinitialization plot for replotting. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.destroy" id=link142 onMouseOver="ShowTip(event, 'tt140', 'link142')" onMouseOut="HideTip('tt140')">destroy</a></td><td class=SDescription>Releases all resources occupied by the plot</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jqPlot.replot" id=link143 onMouseOver="ShowTip(event, 'tt141', 'link143')" onMouseOut="HideTip('tt141')">replot</a></td><td class=SDescription>Does a reinitialization of the plot followed by a redraw. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.redraw" id=link144 onMouseOver="ShowTip(event, 'tt142', 'link144')" onMouseOut="HideTip('tt142')">redraw</a></td><td class=SDescription>Empties the plot target div and redraws the plot. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jqPlot.draw" id=link145 onMouseOver="ShowTip(event, 'tt143', 'link145')" onMouseOut="HideTip('tt143')">draw</a></td><td class=SDescription>Draws all elements of the plot into the container. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.drawSeries" id=link146 onMouseOver="ShowTip(event, 'tt144', 'link146')" onMouseOut="HideTip('tt144')">drawSeries</a></td><td class=SDescription>Redraws all or just one series on the plot. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jqPlot.moveSeriesToFront" id=link147 onMouseOver="ShowTip(event, 'tt145', 'link147')" onMouseOut="HideTip('tt145')">moveSeriesToFront</a></td><td class=SDescription>This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.moveSeriesToBack" id=link148 onMouseOver="ShowTip(event, 'tt146', 'link148')" onMouseOut="HideTip('tt146')">moveSeriesToBack</a></td><td class=SDescription>This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#jqPlot.restorePreviousSeriesOrder" id=link149 onMouseOver="ShowTip(event, 'tt147', 'link149')" onMouseOut="HideTip('tt147')">restorePreviousSeriesOrder</a></td><td class=SDescription>This method requires jQuery 1.4+ Restore the series canvas order to its previous state. </td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#jqPlot.restoreOriginalSeriesOrder" id=link150 onMouseOver="ShowTip(event, 'tt148', 'link150')" onMouseOut="HideTip('tt148')">restoreOriginalSeriesOrder</a></td><td class=SDescription>This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Version"></a>Version</h3><div class=CBody><p>version: 1.0.4 revision: 1121</p></div></div></div>
-
-<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="CopyrightLicense"></a>Copyright &amp; License</h3><div class=CBody><p>Copyright &copy; 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.&nbsp; This means that you can choose the license that best suits your project and use it accordingly.</p><p>See <a href="gpl-2-0-txt.html#GPL_Version_2" class=LSection id=link151 onMouseOver="ShowTip(event, 'tt149', 'link151')" onMouseOut="HideTip('tt149')">GPL Version 2</a> and <a href="MIT-LICENSE-txt.html#MIT_License" class=LSection id=link152 onMouseOver="ShowTip(event, 'tt150', 'link152')" onMouseOut="HideTip('tt150')">MIT License</a> contained within this distribution for further information.</p><p>The author would appreciate an email letting him know of any substantial use of jqPlot.&nbsp; You can reach the author at: chris at jqplot dot com or see <a href="http://www.jqplot.com/info.php" class=LURL target=_top>http://www.jqplot.com/info.php</a>.&nbsp; This is, of course, not required.</p><p>If you are feeling kind and generous, consider supporting the project by making a donation at: <a href="http://www.jqplot.com/donate.php" class=LURL target=_top>http://www.jqplot.com/donate.php</a>.</p><h4 class=CHeading>sprintf functions contained in jqplot.sprintf.js by Ash Searle</h4><p>version 2007.04.27 author Ash Searle <a href="http://hexmen.com/blog/2007/03/printf-sprintf/" class=LURL target=_top>http://hexmen.com/blog/2007/03/printf-sprintf/</a> <a href="http://hexmen.com/js/sprintf.js" class=LURL target=_top>http://hexmen.com/js/sprintf.js</a> The author (Ash Searle) has placed this code in the public domain: &ldquo;This code is unrestricted: you are free to use it however you like.&rdquo;</p></div></div></div>
-
-<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Introduction"></a>Introduction</h3><div class=CBody><p>jqPlot requires jQuery (1.4+ required for certain features). jQuery 1.4.2 is included in the distribution.&nbsp; 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:</p><blockquote><pre>&lt;!--[if lt IE 9]&gt;&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;excanvas.js&quot;&gt;&lt;/script&gt;&lt;![endif]--&gt;
-&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jquery-1.4.4.min.js&quot;&gt;&lt;/script&gt;
-&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jquery.jqplot.min.js&quot;&gt;&lt;/script&gt;
-&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;jquery.jqplot.css&quot; /&gt;</pre></blockquote><p>jqPlot can be customized by overriding the defaults of any of the objects which make up the plot.&nbsp; The general usage of jqplot is:</p><blockquote><pre>chart = $.jqplot('targetElemId', [dataArray,...], {optionsObject});</pre></blockquote><p>The options available to jqplot are detailed in <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link153 onMouseOver="ShowTip(event, 'tt1', 'link153')" onMouseOut="HideTip('tt1')">jqPlot Options</a> in the jqPlotOptions.txt file.</p><p>An actual call to $.jqplot() may look like the examples below:</p><blockquote><pre>chart = $.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);</pre></blockquote><p>or</p><blockquote><pre>dataArray = [34,12,43,55,77];
-chart = $.jqplot('targetElemId', [dataArray, ...], {title:'My Plot', axes:{yaxis:{min:20, max:100}}});</pre></blockquote><p>For more inforrmation, see <a href="usage-txt.html#jqPlot_Usage" class=LSection >jqPlot Usage</a>.</p></div></div></div>
-
-<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Usage"></a>Usage</h3><div class=CBody><p>See <a href="usage-txt.html#jqPlot_Usage" class=LSection >jqPlot Usage</a></p></div></div></div>
-
-<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Available_Options"></a>Available Options</h3><div class=CBody><p>See <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link154 onMouseOver="ShowTip(event, 'tt1', 'link154')" onMouseOut="HideTip('tt1')">jqPlot Options</a> for a list of options available thorugh the options object (not complete yet!)</p></div></div></div>
-
-<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Options_Usage"></a>Options Usage</h3><div class=CBody><p>See <a href="optionsTutorial-txt.html#Options_Tutorial" class=LSection id=link155 onMouseOver="ShowTip(event, 'tt2', 'link155')" onMouseOut="HideTip('tt2')">Options Tutorial</a></p></div></div></div>
-
-<div class="CGeneric"><div class=CTopic><h3 class=CTitle><a name="Changes"></a>Changes</h3><div class=CBody><p>See <a href="changes-txt.html#Change_Log" class=LSection >Change Log</a></p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="$.jqplot"></a>$.jqplot</h2><div class=CBody><p>jQuery function called by the user to create a plot.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>target</td><td class=CDLDescription>ID of target element to render the plot into.</td></tr><tr><td class=CDLEntry>data</td><td class=CDLDescription>an array of data series.</td></tr><tr><td class=CDLEntry>options</td><td class=CDLDescription>user defined options object.&nbsp; See the individual classes for available options.</td></tr></table><h4 class=CHeading>Properties</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>config</td><td class=CDLDescription>object to hold configuration information for jqPlot plot object.</td></tr></table><h4 class=CHeading>attributes</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>enablePlugins</td><td class=CDLDescription>False to disable plugins by default.&nbsp; Plugins must then be explicitly enabled in the individual plot options.&nbsp; Default: false.&nbsp; This property sets the &ldquo;show&rdquo; property of certain plugins to true or false.&nbsp; Only plugins that can be immediately active upon loading are affected.&nbsp; This includes non-renderer plugins like cursor, dragable, highlighter, and trendline.</td></tr><tr><td class=CDLEntry>defaultHeight</td><td class=CDLDescription>Default height for plots where no css height specification exists.&nbsp; This is a jqplot wide default.</td></tr><tr><td class=CDLEntry>defaultWidth</td><td class=CDLDescription>Default height for plots where no css height specification exists.&nbsp; This is a jqplot wide default.</td></tr></table><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#$.jqplot.Hooks" >Hooks</a></td><td class=SDescription></td></tr><tr class="SHook SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.jqPlot_Pugin_Hooks" >jqPlot Pugin Hooks</a></td><td class=SDescription></td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Hooks"></a>Hooks</h3></div></div>
-
-<div class="CHook"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.jqPlot_Pugin_Hooks"></a>jqPlot Pugin Hooks</h3><div class=CBody><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.preInitHooks"></a>$.jqplot.preInitHooks</td><td class=CDLDescription>called before initialization.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.postInitHooks"></a>$.jqplot.postInitHooks</td><td class=CDLDescription>called after initialization.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.preParseOptionsHooks"></a>$.jqplot.preParseOptionsHooks</td><td class=CDLDescription>called before user options are parsed.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.postParseOptionsHooks"></a>$.jqplot.postParseOptionsHooks</td><td class=CDLDescription>called after user options are parsed.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.preDrawHooks"></a>$.jqplot.preDrawHooks</td><td class=CDLDescription>called before plot draw.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.postDrawHooks"></a>$.jqplot.postDrawHooks</td><td class=CDLDescription>called after plot draw.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.preDrawSeriesHooks"></a>$.jqplot.preDrawSeriesHooks</td><td class=CDLDescription>called before each series is drawn.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.postDrawSeriesHooks"></a>$.jqplot.postDrawSeriesHooks</td><td class=CDLDescription>called after each series is drawn.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.preDrawLegendHooks"></a>$.jqplot.preDrawLegendHooks</td><td class=CDLDescription>called before the legend is drawn.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.addLegendRowHooks"></a>$.jqplot.addLegendRowHooks</td><td class=CDLDescription>called at the end of legend draw, so plugins can add rows to the legend table.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.preSeriesInitHooks"></a>$.jqplot.preSeriesInitHooks</td><td class=CDLDescription>called before series is initialized.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.postSeriesInitHooks"></a>$.jqplot.postSeriesInitHooks</td><td class=CDLDescription>called after series is initialized.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.preParseSeriesOptionsHooks"></a>$.jqplot.preParseSeriesOptionsHooks</td><td class=CDLDescription>called before series related options are parsed.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.postParseSeriesOptionsHooks"></a>$.jqplot.postParseSeriesOptionsHooks</td><td class=CDLDescription>called after series related options are parsed.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.eventListenerHooks"></a>$.jqplot.eventListenerHooks</td><td class=CDLDescription>called at the end of plot drawing, binds listeners to the event canvas which lays on top of the grid area.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.preDrawSeriesShadowHooks"></a>$.jqplot.preDrawSeriesShadowHooks</td><td class=CDLDescription>called before series shadows are drawn.</td></tr><tr><td class=CDLEntry><a name="$.jqplot.jqPlot_Pugin_Hooks.$.jqplot.postDrawSeriesShadowHooks"></a>$.jqplot.postDrawSeriesShadowHooks</td><td class=CDLDescription>called after series shadows are drawn.</td></tr></table></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="Axis"></a>Axis</h2><div class=CBody><p>An individual axis object.&nbsp; Cannot be instantiated directly, but created by the Plot oject.&nbsp; Axis properties can be set or overriden by the options passed in from the user.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#Axis.Properties" >Properties</a></td><td class=SDescription>Axes options are specified within an axes object at the top level of the plot options like so:</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.show" id=link156 onMouseOver="ShowTip(event, 'tt3', 'link156')" onMouseOut="HideTip('tt3')">show</a></td><td class=SDescription>Wether to display the axis on the graph.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.tickRenderer" id=link157 onMouseOver="ShowTip(event, 'tt4', 'link157')" onMouseOut="HideTip('tt4')">tickRenderer</a></td><td class=SDescription>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link158 onMouseOver="ShowTip(event, 'tt5', 'link158')" onMouseOut="HideTip('tt5')">$.jqplot.AxisTickRenderer</a>.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.tickOptions" id=link159 onMouseOver="ShowTip(event, 'tt6', 'link159')" onMouseOut="HideTip('tt6')">tickOptions</a></td><td class=SDescription>Options that will be passed to the tickRenderer, see <a href="jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link160 onMouseOver="ShowTip(event, 'tt5', 'link160')" onMouseOut="HideTip('tt5')">$.jqplot.AxisTickRenderer</a> options.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.labelRenderer" id=link161 onMouseOver="ShowTip(event, 'tt7', 'link161')" onMouseOut="HideTip('tt7')">labelRenderer</a></td><td class=SDescription>A class of a rendering engine for creating an axis label.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.labelOptions" id=link162 onMouseOver="ShowTip(event, 'tt8', 'link162')" onMouseOut="HideTip('tt8')">labelOptions</a></td><td class=SDescription>Options passed to the label renderer.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.label" id=link163 onMouseOver="ShowTip(event, 'tt9', 'link163')" onMouseOut="HideTip('tt9')">label</a></td><td class=SDescription>Label for the axis</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.showLabel" id=link164 onMouseOver="ShowTip(event, 'tt10', 'link164')" onMouseOut="HideTip('tt10')">showLabel</a></td><td class=SDescription>true to show the axis label.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.min" id=link165 onMouseOver="ShowTip(event, 'tt11', 'link165')" onMouseOut="HideTip('tt11')">min</a></td><td class=SDescription>minimum value of the axis (in data units, not pixels).</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.max" id=link166 onMouseOver="ShowTip(event, 'tt12', 'link166')" onMouseOut="HideTip('tt12')">max</a></td><td class=SDescription>maximum value of the axis (in data units, not pixels).</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.autoscale" id=link167 onMouseOver="ShowTip(event, 'tt13', 'link167')" onMouseOut="HideTip('tt13')">autoscale</a></td><td class=SDescription>DEPRECATED the default scaling algorithm produces superior results.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.pad" id=link168 onMouseOver="ShowTip(event, 'tt14', 'link168')" onMouseOut="HideTip('tt14')">pad</a></td><td class=SDescription>Padding to extend the range above and below the data bounds. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.padMax" id=link169 onMouseOver="ShowTip(event, 'tt15', 'link169')" onMouseOut="HideTip('tt15')">padMax</a></td><td class=SDescription>Padding to extend the range above data bounds. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.padMin" id=link170 onMouseOver="ShowTip(event, 'tt16', 'link170')" onMouseOut="HideTip('tt16')">padMin</a></td><td class=SDescription>Padding to extend the range below data bounds. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.ticks" id=link171 onMouseOver="ShowTip(event, 'tt17', 'link171')" onMouseOut="HideTip('tt17')">ticks</a></td><td class=SDescription>1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.numberTicks" id=link172 onMouseOver="ShowTip(event, 'tt18', 'link172')" onMouseOut="HideTip('tt18')">numberTicks</a></td><td class=SDescription>Desired number of ticks. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.tickInterval" id=link173 onMouseOver="ShowTip(event, 'tt19', 'link173')" onMouseOut="HideTip('tt19')">tickInterval</a></td><td class=SDescription>number of units between ticks. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.renderer" id=link174 onMouseOver="ShowTip(event, 'tt20', 'link174')" onMouseOut="HideTip('tt20')">renderer</a></td><td class=SDescription>A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.rendererOptions" id=link175 onMouseOver="ShowTip(event, 'tt21', 'link175')" onMouseOut="HideTip('tt21')">rendererOptions</a></td><td class=SDescription>renderer specific options. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.showTicks" id=link176 onMouseOver="ShowTip(event, 'tt22', 'link176')" onMouseOut="HideTip('tt22')">showTicks</a></td><td class=SDescription>Wether to show the ticks (both marks and labels) or not. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.showTickMarks" id=link177 onMouseOver="ShowTip(event, 'tt23', 'link177')" onMouseOut="HideTip('tt23')">showTickMarks</a></td><td class=SDescription>Wether to show the tick marks (line crossing grid) or not. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.showMinorTicks" id=link178 onMouseOver="ShowTip(event, 'tt24', 'link178')" onMouseOut="HideTip('tt24')">showMinorTicks</a></td><td class=SDescription>Wether or not to show minor ticks. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.drawMajorGridlines" id=link179 onMouseOver="ShowTip(event, 'tt25', 'link179')" onMouseOut="HideTip('tt25')">drawMajorGridlines</a></td><td class=SDescription>True to draw gridlines for major axis ticks.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.drawMinorGridlines" id=link180 onMouseOver="ShowTip(event, 'tt26', 'link180')" onMouseOut="HideTip('tt26')">drawMinorGridlines</a></td><td class=SDescription>True to draw gridlines for minor ticks.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.drawMajorTickMarks" id=link181 onMouseOver="ShowTip(event, 'tt27', 'link181')" onMouseOut="HideTip('tt27')">drawMajorTickMarks</a></td><td class=SDescription>True to draw tick marks for major axis ticks.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.drawMinorTickMarks" id=link182 onMouseOver="ShowTip(event, 'tt28', 'link182')" onMouseOut="HideTip('tt28')">drawMinorTickMarks</a></td><td class=SDescription>True to draw tick marks for minor ticks. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.useSeriesColor" id=link183 onMouseOver="ShowTip(event, 'tt29', 'link183')" onMouseOut="HideTip('tt29')">useSeriesColor</a></td><td class=SDescription>Use the color of the first series associated with this axis for the tick marks and line bordering this axis.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.borderWidth" id=link184 onMouseOver="ShowTip(event, 'tt30', 'link184')" onMouseOut="HideTip('tt30')">borderWidth</a></td><td class=SDescription>width of line stroked at the border of the axis. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.borderColor" id=link185 onMouseOver="ShowTip(event, 'tt31', 'link185')" onMouseOut="HideTip('tt31')">borderColor</a></td><td class=SDescription>color of the border adjacent to the axis. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.scaleToHiddenSeries" id=link186 onMouseOver="ShowTip(event, 'tt32', 'link186')" onMouseOut="HideTip('tt32')">scaleToHiddenSeries</a></td><td class=SDescription>True to include hidden series when computing axes bounds and scaling.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Axis.syncTicks" id=link187 onMouseOver="ShowTip(event, 'tt33', 'link187')" onMouseOut="HideTip('tt33')">syncTicks</a></td><td class=SDescription>true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Axis.tickSpacing" id=link188 onMouseOver="ShowTip(event, 'tt34', 'link188')" onMouseOut="HideTip('tt34')">tickSpacing</a></td><td class=SDescription>Approximate pixel spacing between ticks on graph. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Axis.Properties"></a>Properties</h3><div class=CBody><p>Axes options are specified within an axes object at the top level of the plot options like so:</p><blockquote><pre>{
- axes: {
- xaxis: {min: 5},
- yaxis: {min: 2, max: 8, numberTicks:4},
- x2axis: {pad: 1.5},
- y2axis: {ticks:[22, 44, 66, 88]}
- }
-}</pre></blockquote><p>There are 2 x axes, &lsquo;xaxis&rsquo; and &lsquo;x2axis&rsquo;, and 9 yaxes, &lsquo;yaxis&rsquo;, &lsquo;y2axis&rsquo;.&nbsp; &lsquo;y3axis&rsquo;, ...&nbsp; Any or all of which may be specified.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote><p>Wether to display the axis on the graph.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.tickRenderer"></a>tickRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickRenderer = $.jqplot.AxisTickRenderer</td></tr></table></blockquote><p>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link189 onMouseOver="ShowTip(event, 'tt5', 'link189')" onMouseOut="HideTip('tt5')">$.jqplot.AxisTickRenderer</a>.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.tickOptions"></a>tickOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickOptions = {}</td></tr></table></blockquote><p>Options that will be passed to the tickRenderer, see <a href="jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link190 onMouseOver="ShowTip(event, 'tt5', 'link190')" onMouseOut="HideTip('tt5')">$.jqplot.AxisTickRenderer</a> options.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.labelRenderer"></a>labelRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote><p>A class of a rendering engine for creating an axis label.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.labelOptions"></a>labelOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelOptions = {}</td></tr></table></blockquote><p>Options passed to the label renderer.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.label"></a>label</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote><p>Label for the axis</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.showLabel"></a>showLabel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote><p>true to show the axis label.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.min"></a>min</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min = null</td></tr></table></blockquote><p>minimum value of the axis (in data units, not pixels).</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.max"></a>max</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max = null</td></tr></table></blockquote><p>maximum value of the axis (in data units, not pixels).</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.autoscale"></a>autoscale</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscale = false</td></tr></table></blockquote><p>DEPRECATED the default scaling algorithm produces superior results.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.pad"></a>pad</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pad = 1.2</td></tr></table></blockquote><p>Padding to extend the range above and below the data bounds.&nbsp; The data range is multiplied by this factor to determine minimum and maximum axis bounds.&nbsp; A value of 0 will be interpreted to mean no padding, and pad will be set to 1.0.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.padMax"></a>padMax</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMax = null</td></tr></table></blockquote><p>Padding to extend the range above data bounds.&nbsp; The top of the data range is multiplied by this factor to determine maximum axis bounds.&nbsp; A value of 0 will be interpreted to mean no padding, and padMax will be set to 1.0.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.padMin"></a>padMin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMin = null</td></tr></table></blockquote><p>Padding to extend the range below data bounds.&nbsp; The bottom of the data range is multiplied by this factor to determine minimum axis bounds.&nbsp; A value of 0 will be interpreted to mean no padding, and padMin will be set to 1.0.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.ticks"></a>ticks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote><p>1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis.&nbsp; If no label is specified, the value is formatted into an appropriate label.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.numberTicks"></a>numberTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberTicks</td></tr></table></blockquote><p>Desired number of ticks.&nbsp; Default is to compute automatically.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.tickInterval"></a>tickInterval</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInterval</td></tr></table></blockquote><p>number of units between ticks.&nbsp; Mutually exclusive with numberTicks.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.renderer"></a>renderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LinearAxisRenderer</td></tr></table></blockquote><p>A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.rendererOptions"></a>rendererOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote><p>renderer specific options.&nbsp; See <a href="jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer" class=LClass id=link191 onMouseOver="ShowTip(event, 'tt151', 'link191')" onMouseOut="HideTip('tt151')">$.jqplot.LinearAxisRenderer</a> for options.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.showTicks"></a>showTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote><p>Wether to show the ticks (both marks and labels) or not.&nbsp; Will not override showMark and showLabel options if specified on the ticks themselves.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.showTickMarks"></a>showTickMarks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickMarks = true</td></tr></table></blockquote><p>Wether to show the tick marks (line crossing grid) or not.&nbsp; Overridden by showTicks and showMark option of tick itself.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.showMinorTicks"></a>showMinorTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMinorTicks = true</td></tr></table></blockquote><p>Wether or not to show minor ticks.&nbsp; This is renderer dependent.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.drawMajorGridlines"></a>drawMajorGridlines</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMajorGridlines = true</td></tr></table></blockquote><p>True to draw gridlines for major axis ticks.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.drawMinorGridlines"></a>drawMinorGridlines</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMinorGridlines = false</td></tr></table></blockquote><p>True to draw gridlines for minor ticks.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.drawMajorTickMarks"></a>drawMajorTickMarks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMajorTickMarks = true</td></tr></table></blockquote><p>True to draw tick marks for major axis ticks.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.drawMinorTickMarks"></a>drawMinorTickMarks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMinorTickMarks = true</td></tr></table></blockquote><p>True to draw tick marks for minor ticks.&nbsp; This is renderer dependent.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.useSeriesColor"></a>useSeriesColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useSeriesColor = false</td></tr></table></blockquote><p>Use the color of the first series associated with this axis for the tick marks and line bordering this axis.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.borderWidth"></a>borderWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = null</td></tr></table></blockquote><p>width of line stroked at the border of the axis.&nbsp; Defaults to the width of the grid boarder.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.borderColor"></a>borderColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote><p>color of the border adjacent to the axis.&nbsp; Defaults to grid border color.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.scaleToHiddenSeries"></a>scaleToHiddenSeries</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.scaleToHiddenSeries = false</td></tr></table></blockquote><p>True to include hidden series when computing axes bounds and scaling.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.syncTicks"></a>syncTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.syncTicks = null</td></tr></table></blockquote><p>true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up.&nbsp; This has an impact on autoscaling algorithm, however.&nbsp; In general, autoscaling an individual axis will work better if it does not have to sync ticks.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Axis.tickSpacing"></a>tickSpacing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 75</td></tr></table></blockquote><p>Approximate pixel spacing between ticks on graph.&nbsp; Used during autoscaling.&nbsp; This number will be an upper bound, actual spacing will be less.</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="Legend"></a>Legend</h2><div class=CBody><p>Legend object.&nbsp; Cannot be instantiated directly, but created by the Plot oject.&nbsp; Legend properties can be set or overriden by the options passed in from the user.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#Legend.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.show" id=link192 onMouseOver="ShowTip(event, 'tt35', 'link192')" onMouseOut="HideTip('tt35')">show</a></td><td class=SDescription>Wether to display the legend on the graph.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.location" id=link193 onMouseOver="ShowTip(event, 'tt36', 'link193')" onMouseOut="HideTip('tt36')">location</a></td><td class=SDescription>Placement of the legend. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.labels" id=link194 onMouseOver="ShowTip(event, 'tt37', 'link194')" onMouseOut="HideTip('tt37')">labels</a></td><td class=SDescription>Array of labels to use. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.showLabels" id=link195 onMouseOver="ShowTip(event, 'tt38', 'link195')" onMouseOut="HideTip('tt38')">showLabels</a></td><td class=SDescription>true to show the label text on the legend.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.showSwatch" id=link196 onMouseOver="ShowTip(event, 'tt39', 'link196')" onMouseOut="HideTip('tt39')">showSwatch</a></td><td class=SDescription>true to show the color swatches on the legend.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.placement" id=link197 onMouseOver="ShowTip(event, 'tt40', 'link197')" onMouseOut="HideTip('tt40')">placement</a></td><td class=SDescription>&ldquo;insideGrid&rdquo; places legend inside the grid area of the plot. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.xoffset" id=link198 onMouseOver="ShowTip(event, 'tt41', 'link198')" onMouseOut="HideTip('tt41')">xoffset</a></td><td class=SDescription>DEPRECATED. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.yoffset" id=link199 onMouseOver="ShowTip(event, 'tt42', 'link199')" onMouseOut="HideTip('tt42')">yoffset</a></td><td class=SDescription>DEPRECATED. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.border" id=link200 onMouseOver="ShowTip(event, 'tt43', 'link200')" onMouseOut="HideTip('tt43')">border</a></td><td class=SDescription>css spec for the border around the legend box.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.background" id=link201 onMouseOver="ShowTip(event, 'tt44', 'link201')" onMouseOut="HideTip('tt44')">background</a></td><td class=SDescription>css spec for the background of the legend box.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.textColor" id=link202 onMouseOver="ShowTip(event, 'tt45', 'link202')" onMouseOut="HideTip('tt45')">textColor</a></td><td class=SDescription>css color spec for the legend text.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.fontFamily" id=link203 onMouseOver="ShowTip(event, 'tt46', 'link203')" onMouseOut="HideTip('tt46')">fontFamily</a></td><td class=SDescription>css font-family spec for the legend text.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.fontSize" id=link204 onMouseOver="ShowTip(event, 'tt47', 'link204')" onMouseOut="HideTip('tt47')">fontSize</a></td><td class=SDescription>css font-size spec for the legend text.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.rowSpacing" id=link205 onMouseOver="ShowTip(event, 'tt48', 'link205')" onMouseOut="HideTip('tt48')">rowSpacing</a></td><td class=SDescription>css padding-top spec for the rows in the legend.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.rendererOptions" id=link206 onMouseOver="ShowTip(event, 'tt49', 'link206')" onMouseOut="HideTip('tt49')">rendererOptions</a></td><td class=SDescription>renderer specific options passed to the renderer.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.predraw" >predraw</a></td><td class=SDescription>Wether to draw the legend before the series or not. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.marginTop" id=link207 onMouseOver="ShowTip(event, 'tt50', 'link207')" onMouseOut="HideTip('tt50')">marginTop</a></td><td class=SDescription>CSS margin for the legend DOM element. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.marginRight" id=link208 onMouseOver="ShowTip(event, 'tt51', 'link208')" onMouseOut="HideTip('tt51')">marginRight</a></td><td class=SDescription>CSS margin for the legend DOM element. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.marginBottom" id=link209 onMouseOver="ShowTip(event, 'tt52', 'link209')" onMouseOut="HideTip('tt52')">marginBottom</a></td><td class=SDescription>CSS margin for the legend DOM element. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Legend.marginLeft" id=link210 onMouseOver="ShowTip(event, 'tt53', 'link210')" onMouseOut="HideTip('tt53')">marginLeft</a></td><td class=SDescription>CSS margin for the legend DOM element. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Legend.escapeHtml" id=link211 onMouseOver="ShowTip(event, 'tt54', 'link211')" onMouseOut="HideTip('tt54')">escapeHtml</a></td><td class=SDescription>True to escape special characters with their html entity equivalents in legend text. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Legend.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote><p>Wether to display the legend on the graph.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.location"></a>location</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'ne'</td></tr></table></blockquote><p>Placement of the legend.&nbsp; one of the compass directions: nw, n, ne, e, se, s, sw, w</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.labels"></a>labels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote><p>Array of labels to use.&nbsp; By default the renderer will look for labels on the series.&nbsp; Labels specified in this array will override labels specified on the series.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.showLabels"></a>showLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote><p>true to show the label text on the legend.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.showSwatch"></a>showSwatch</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showSwatches = true</td></tr></table></blockquote><p>true to show the color swatches on the legend.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.placement"></a>placement</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.placement = &quot;insideGrid&quot;</td></tr></table></blockquote><p>&rdquo;insideGrid&rdquo; places legend inside the grid area of the plot.&nbsp; &ldquo;outsideGrid&rdquo; places the legend outside the grid but inside the plot container, shrinking the grid to accomodate the legend.&nbsp; &ldquo;inside&rdquo; synonym for &ldquo;insideGrid&rdquo;, &ldquo;outside&rdquo; places the legend ouside the grid area, but does not shrink the grid which can cause the legend to overflow the plot container.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.xoffset"></a>xoffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xoffset = 0</td></tr></table></blockquote><p>DEPRECATED.&nbsp; Set the margins on the legend using the marginTop, marginLeft, etc. properties or via CSS margin styling of the .jqplot-table-legend class.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.yoffset"></a>yoffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yoffset = 0</td></tr></table></blockquote><p>DEPRECATED.&nbsp; Set the margins on the legend using the marginTop, marginLeft, etc. properties or via CSS margin styling of the .jqplot-table-legend class.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.border"></a>border</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.border</td></tr></table></blockquote><p>css spec for the border around the legend box.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.background"></a>background</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background</td></tr></table></blockquote><p>css spec for the background of the legend box.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.textColor"></a>textColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote><p>css color spec for the legend text.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.fontFamily"></a>fontFamily</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote><p>css font-family spec for the legend text.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.fontSize"></a>fontSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote><p>css font-size spec for the legend text.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.rowSpacing"></a>rowSpacing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rowSpacing = '0.5em'</td></tr></table></blockquote><p>css padding-top spec for the rows in the legend.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.rendererOptions"></a>rendererOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote><p>renderer specific options passed to the renderer.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.predraw"></a>predraw</h3><div class=CBody><p>Wether to draw the legend before the series or not.&nbsp; Used with series specific legend renderers for pie, donut, mekko charts, etc.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.marginTop"></a>marginTop</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginTop = null</td></tr></table></blockquote><p>CSS margin for the legend DOM element.&nbsp; This will set an element CSS style for the margin which will override any style sheet setting.&nbsp; The default will be taken from the stylesheet.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.marginRight"></a>marginRight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginRight = null</td></tr></table></blockquote><p>CSS margin for the legend DOM element.&nbsp; This will set an element CSS style for the margin which will override any style sheet setting.&nbsp; The default will be taken from the stylesheet.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.marginBottom"></a>marginBottom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginBottom = null</td></tr></table></blockquote><p>CSS margin for the legend DOM element.&nbsp; This will set an element CSS style for the margin which will override any style sheet setting.&nbsp; The default will be taken from the stylesheet.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.marginLeft"></a>marginLeft</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginLeft = null</td></tr></table></blockquote><p>CSS margin for the legend DOM element.&nbsp; This will set an element CSS style for the margin which will override any style sheet setting.&nbsp; The default will be taken from the stylesheet.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Legend.escapeHtml"></a>escapeHtml</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote><p>True to escape special characters with their html entity equivalents in legend text.&nbsp; &ldquo;&lt;&rdquo; becomes &amp;lt; and so on, so html tags are not rendered.</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="Title"></a>Title</h2><div class=CBody><p>Plot Title object.&nbsp; Cannot be instantiated directly, but created by the Plot oject.&nbsp; Title properties can be set or overriden by the options passed in from the user.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>text</td><td class=CDLDescription>text of the title.</td></tr></table><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#Title.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Title.text" id=link212 onMouseOver="ShowTip(event, 'tt55', 'link212')" onMouseOut="HideTip('tt55')">text</a></td><td class=SDescription>text of the title;</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Title.show" id=link213 onMouseOver="ShowTip(event, 'tt56', 'link213')" onMouseOut="HideTip('tt56')">show</a></td><td class=SDescription>wether or not to show the title</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Title.fontFamily" id=link214 onMouseOver="ShowTip(event, 'tt57', 'link214')" onMouseOut="HideTip('tt57')">fontFamily</a></td><td class=SDescription>css font-family spec for the text.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Title.fontSize" id=link215 onMouseOver="ShowTip(event, 'tt58', 'link215')" onMouseOut="HideTip('tt58')">fontSize</a></td><td class=SDescription>css font-size spec for the text.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Title.textAlign" id=link216 onMouseOver="ShowTip(event, 'tt59', 'link216')" onMouseOut="HideTip('tt59')">textAlign</a></td><td class=SDescription>css text-align spec for the text.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Title.textColor" id=link217 onMouseOver="ShowTip(event, 'tt60', 'link217')" onMouseOut="HideTip('tt60')">textColor</a></td><td class=SDescription>css color spec for the text.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Title.renderer" id=link218 onMouseOver="ShowTip(event, 'tt61', 'link218')" onMouseOut="HideTip('tt61')">renderer</a></td><td class=SDescription>A class for creating a DOM element for the title, see <a href="jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" class=LClass id=link219 onMouseOver="ShowTip(event, 'tt62', 'link219')" onMouseOut="HideTip('tt62')">$.jqplot.DivTitleRenderer</a>.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Title.rendererOptions" id=link220 onMouseOver="ShowTip(event, 'tt63', 'link220')" onMouseOut="HideTip('tt63')">rendererOptions</a></td><td class=SDescription>renderer specific options passed to the renderer.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Title.escapeHtml" id=link221 onMouseOver="ShowTip(event, 'tt64', 'link221')" onMouseOut="HideTip('tt64')">escapeHtml</a></td><td class=SDescription>True to escape special characters with their html entity equivalents in title text. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Title.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.text"></a>text</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.text = text</td></tr></table></blockquote><p>text of the title;</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the title</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.fontFamily"></a>fontFamily</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote><p>css font-family spec for the text.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.fontSize"></a>fontSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote><p>css font-size spec for the text.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.textAlign"></a>textAlign</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textAlign</td></tr></table></blockquote><p>css text-align spec for the text.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.textColor"></a>textColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote><p>css color spec for the text.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.renderer"></a>renderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.DivTitleRenderer</td></tr></table></blockquote><p>A class for creating a DOM element for the title, see <a href="jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" class=LClass id=link222 onMouseOver="ShowTip(event, 'tt62', 'link222')" onMouseOut="HideTip('tt62')">$.jqplot.DivTitleRenderer</a>.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.rendererOptions"></a>rendererOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote><p>renderer specific options passed to the renderer.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Title.escapeHtml"></a>escapeHtml</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote><p>True to escape special characters with their html entity equivalents in title text.&nbsp; &ldquo;&lt;&rdquo; becomes &amp;lt; and so on, so html tags are not rendered.</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="Series"></a>Series</h2><div class=CBody><p>An individual data series object.&nbsp; Cannot be instantiated directly, but created by the Plot oject.&nbsp; Series properties can be set or overriden by the options passed in from the user.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#Series.Properties" >Properties</a></td><td class=SDescription>Properties will be assigned from a series array at the top level of the options. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.show" id=link223 onMouseOver="ShowTip(event, 'tt65', 'link223')" onMouseOut="HideTip('tt65')">show</a></td><td class=SDescription>wether or not to draw the series.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.xaxis" id=link224 onMouseOver="ShowTip(event, 'tt66', 'link224')" onMouseOut="HideTip('tt66')">xaxis</a></td><td class=SDescription>which x axis to use with this series, either &lsquo;xaxis&rsquo; or &lsquo;x2axis&rsquo;.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.yaxis" id=link225 onMouseOver="ShowTip(event, 'tt67', 'link225')" onMouseOut="HideTip('tt67')">yaxis</a></td><td class=SDescription>which y axis to use with this series, either &lsquo;yaxis&rsquo; or &lsquo;y2axis&rsquo;.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.renderer" id=link226 onMouseOver="ShowTip(event, 'tt68', 'link226')" onMouseOut="HideTip('tt68')">renderer</a></td><td class=SDescription>A class of a renderer which will draw the series, see <a href="jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" class=LClass id=link227 onMouseOver="ShowTip(event, 'tt69', 'link227')" onMouseOut="HideTip('tt69')">$.jqplot.LineRenderer</a>.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.rendererOptions" id=link228 onMouseOver="ShowTip(event, 'tt70', 'link228')" onMouseOut="HideTip('tt70')">rendererOptions</a></td><td class=SDescription>Options to pass on to the renderer.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.label" id=link229 onMouseOver="ShowTip(event, 'tt71', 'link229')" onMouseOut="HideTip('tt71')">label</a></td><td class=SDescription>Line label to use in the legend.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.showLabel" id=link230 onMouseOver="ShowTip(event, 'tt72', 'link230')" onMouseOut="HideTip('tt72')">showLabel</a></td><td class=SDescription>true to show label for this series in the legend.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.color" id=link231 onMouseOver="ShowTip(event, 'tt73', 'link231')" onMouseOut="HideTip('tt73')">color</a></td><td class=SDescription>css color spec for the series</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.negativeColor" id=link232 onMouseOver="ShowTip(event, 'tt74', 'link232')" onMouseOut="HideTip('tt74')">negativeColor</a></td><td class=SDescription>css color spec used for filled (area) plots that are filled to zero and the &ldquo;useNegativeColors&rdquo; option is true.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.lineWidth" id=link233 onMouseOver="ShowTip(event, 'tt75', 'link233')" onMouseOut="HideTip('tt75')">lineWidth</a></td><td class=SDescription>width of the line in pixels. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.lineJoin" id=link234 onMouseOver="ShowTip(event, 'tt76', 'link234')" onMouseOut="HideTip('tt76')">lineJoin</a></td><td class=SDescription>Canvas lineJoin style between segments of series.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.lineCap" id=link235 onMouseOver="ShowTip(event, 'tt77', 'link235')" onMouseOut="HideTip('tt77')">lineCap</a></td><td class=SDescription>Canvas lineCap style at ends of line.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.linePattern" id=link236 onMouseOver="ShowTip(event, 'tt78', 'link236')" onMouseOut="HideTip('tt78')">linePattern</a></td><td class=SDescription>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.shadowAngle" id=link237 onMouseOver="ShowTip(event, 'tt79', 'link237')" onMouseOut="HideTip('tt79')">shadowAngle</a></td><td class=SDescription>Shadow angle in degrees</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.shadowOffset" id=link238 onMouseOver="ShowTip(event, 'tt80', 'link238')" onMouseOut="HideTip('tt80')">shadowOffset</a></td><td class=SDescription>Shadow offset from line in pixels</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.shadowDepth" id=link239 onMouseOver="ShowTip(event, 'tt81', 'link239')" onMouseOut="HideTip('tt81')">shadowDepth</a></td><td class=SDescription>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.shadowAlpha" id=link240 onMouseOver="ShowTip(event, 'tt82', 'link240')" onMouseOut="HideTip('tt82')">shadowAlpha</a></td><td class=SDescription>Alpha channel transparency of shadow. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.breakOnNull" id=link241 onMouseOver="ShowTip(event, 'tt83', 'link241')" onMouseOut="HideTip('tt83')">breakOnNull</a></td><td class=SDescription>Wether line segments should be be broken at null value. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.markerRenderer" id=link242 onMouseOver="ShowTip(event, 'tt84', 'link242')" onMouseOut="HideTip('tt84')">markerRenderer</a></td><td class=SDescription>A class of a renderer which will draw marker (e.g. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.markerOptions" id=link243 onMouseOver="ShowTip(event, 'tt85', 'link243')" onMouseOut="HideTip('tt85')">markerOptions</a></td><td class=SDescription>renderer specific options to pass to the markerRenderer, see <a href="jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" class=LClass id=link244 onMouseOver="ShowTip(event, 'tt86', 'link244')" onMouseOut="HideTip('tt86')">$.jqplot.MarkerRenderer</a>.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.showLine" id=link245 onMouseOver="ShowTip(event, 'tt87', 'link245')" onMouseOut="HideTip('tt87')">showLine</a></td><td class=SDescription>wether to actually draw the line or not. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.showMarker" id=link246 onMouseOver="ShowTip(event, 'tt88', 'link246')" onMouseOut="HideTip('tt88')">showMarker</a></td><td class=SDescription>wether or not to show the markers at the data points.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.index" id=link247 onMouseOver="ShowTip(event, 'tt89', 'link247')" onMouseOut="HideTip('tt89')">index</a></td><td class=SDescription>0 based index of this series in the plot series array.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.fill" id=link248 onMouseOver="ShowTip(event, 'tt90', 'link248')" onMouseOut="HideTip('tt90')">fill</a></td><td class=SDescription>true or false, wether to fill under lines or in bars. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.fillColor" id=link249 onMouseOver="ShowTip(event, 'tt91', 'link249')" onMouseOut="HideTip('tt91')">fillColor</a></td><td class=SDescription>CSS color spec to use for fill under line. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.fillAlpha" id=link250 onMouseOver="ShowTip(event, 'tt92', 'link250')" onMouseOut="HideTip('tt92')">fillAlpha</a></td><td class=SDescription>Alpha transparency to apply to the fill under the line. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.fillAndStroke" id=link251 onMouseOver="ShowTip(event, 'tt93', 'link251')" onMouseOut="HideTip('tt93')">fillAndStroke</a></td><td class=SDescription>If true will stroke the line (with color this.color) as well as fill under it. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.disableStack" id=link252 onMouseOver="ShowTip(event, 'tt94', 'link252')" onMouseOut="HideTip('tt94')">disableStack</a></td><td class=SDescription>true to not stack this series with other series in the plot. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.neighborThreshold" id=link253 onMouseOver="ShowTip(event, 'tt95', 'link253')" onMouseOut="HideTip('tt95')">neighborThreshold</a></td><td class=SDescription>how close or far (in pixels) the cursor must be from a point marker to detect the point.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.fillToZero" id=link254 onMouseOver="ShowTip(event, 'tt96', 'link254')" onMouseOut="HideTip('tt96')">fillToZero</a></td><td class=SDescription>true will force bar and filled series to fill toward zero on the fill Axis.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.fillToValue" id=link255 onMouseOver="ShowTip(event, 'tt97', 'link255')" onMouseOut="HideTip('tt97')">fillToValue</a></td><td class=SDescription>fill a filled series to this value on the fill axis. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Series.fillAxis" id=link256 onMouseOver="ShowTip(event, 'tt98', 'link256')" onMouseOut="HideTip('tt98')">fillAxis</a></td><td class=SDescription>Either &lsquo;x&rsquo; or &lsquo;y&rsquo;. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Series.useNegativeColors" id=link257 onMouseOver="ShowTip(event, 'tt99', 'link257')" onMouseOut="HideTip('tt99')">useNegativeColors</a></td><td class=SDescription>true to color negative values differently in filled and bar charts.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Series.Properties"></a>Properties</h3><div class=CBody><p>Properties will be assigned from a series array at the top level of the options.&nbsp; 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:</p><blockquote><pre>{
- series:[
- {color: '#ff4466', lineWidth: 5, label:'good line'},
- {yaxis: 'y2axis', shadow: false, label:'bad line'}
- ]
-}</pre></blockquote></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to draw the series.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.xaxis"></a>xaxis</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xaxis = 'xaxis'</td></tr></table></blockquote><p>which x axis to use with this series, either &lsquo;xaxis&rsquo; or &lsquo;x2axis&rsquo;.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.yaxis"></a>yaxis</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yaxis = 'yaxis'</td></tr></table></blockquote><p>which y axis to use with this series, either &lsquo;yaxis&rsquo; or &lsquo;y2axis&rsquo;.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.renderer"></a>renderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LineRenderer</td></tr></table></blockquote><p>A class of a renderer which will draw the series, see <a href="jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" class=LClass id=link258 onMouseOver="ShowTip(event, 'tt69', 'link258')" onMouseOut="HideTip('tt69')">$.jqplot.LineRenderer</a>.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.rendererOptions"></a>rendererOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote><p>Options to pass on to the renderer.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.label"></a>label</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote><p>Line label to use in the legend.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.showLabel"></a>showLabel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote><p>true to show label for this series in the legend.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.color"></a>color</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote><p>css color spec for the series</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.negativeColor"></a>negativeColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.negativeColor</td></tr></table></blockquote><p>css color spec used for filled (area) plots that are filled to zero and the &ldquo;useNegativeColors&rdquo; option is true.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2.5</td></tr></table></blockquote><p>width of the line in pixels.&nbsp; May have different meanings depending on renderer.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.lineJoin"></a>lineJoin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'round'</td></tr></table></blockquote><p>Canvas lineJoin style between segments of series.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.lineCap"></a>lineCap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote><p>Canvas lineCap style at ends of line.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.linePattern"></a>linePattern</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.linePattern = 'solid'</td></tr></table></blockquote><p>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo; characters such as &lsquo;.-.&rsquo; 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.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.shadowAngle"></a>shadowAngle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote><p>Shadow angle in degrees</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.25</td></tr></table></blockquote><p>Shadow offset from line in pixels</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote><p>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.1'</td></tr></table></blockquote><p>Alpha channel transparency of shadow.&nbsp; 0 = transparent.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.breakOnNull"></a>breakOnNull</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakOnNull = false</td></tr></table></blockquote><p>Wether line segments should be be broken at null value.&nbsp; False will join point on either side of line.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.markerRenderer"></a>markerRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = $.jqplot.MarkerRenderer</td></tr></table></blockquote><p>A class of a renderer which will draw marker (e.g. circle, square, ...) at the data points, see <a href="jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" class=LClass id=link259 onMouseOver="ShowTip(event, 'tt86', 'link259')" onMouseOut="HideTip('tt86')">$.jqplot.MarkerRenderer</a>.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.markerOptions"></a>markerOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerOptions = {}</td></tr></table></blockquote><p>renderer specific options to pass to the markerRenderer, see <a href="jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" class=LClass id=link260 onMouseOver="ShowTip(event, 'tt86', 'link260')" onMouseOut="HideTip('tt86')">$.jqplot.MarkerRenderer</a>.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.showLine"></a>showLine</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLine = true</td></tr></table></blockquote><p>wether to actually draw the line or not.&nbsp; Series will still be renderered, even if no line is drawn.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.showMarker"></a>showMarker</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote><p>wether or not to show the markers at the data points.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.index"></a>index</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.index</td></tr></table></blockquote><p>0 based index of this series in the plot series array.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote><p>true or false, wether to fill under lines or in bars.&nbsp; May not be implemented in all renderers.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.fillColor"></a>fillColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillColor</td></tr></table></blockquote><p>CSS color spec to use for fill under line.&nbsp; Defaults to line color.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.fillAlpha"></a>fillAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAlpha</td></tr></table></blockquote><p>Alpha transparency to apply to the fill under the line.&nbsp; Use this to adjust alpha separate from fill color.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.fillAndStroke"></a>fillAndStroke</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAndStroke = false</td></tr></table></blockquote><p>If true will stroke the line (with color this.color) as well as fill under it.&nbsp; Applies only when fill is true.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.disableStack"></a>disableStack</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableStack = false</td></tr></table></blockquote><p>true to not stack this series with other series in the plot.&nbsp; To render properly, non-stacked series must come after any stacked series in the plot&rsquo;s data series array.&nbsp; So, the plot&rsquo;s data series array would look like:</p><blockquote><pre>[stackedSeries1, stackedSeries2, ..., nonStackedSeries1, nonStackedSeries2, ...]</pre></blockquote><p>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.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.neighborThreshold"></a>neighborThreshold</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.neighborThreshold = 4</td></tr></table></blockquote><p>how close or far (in pixels) the cursor must be from a point marker to detect the point.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.fillToZero"></a>fillToZero</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToZero = false</td></tr></table></blockquote><p>true will force bar and filled series to fill toward zero on the fill Axis.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.fillToValue"></a>fillToValue</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToValue = 0</td></tr></table></blockquote><p>fill a filled series to this value on the fill axis.&nbsp; Works in conjunction with fillToZero, so that must be true.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.fillAxis"></a>fillAxis</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAxis = 'y'</td></tr></table></blockquote><p>Either &lsquo;x&rsquo; or &lsquo;y&rsquo;.&nbsp; Which axis to fill the line toward if fillToZero is true.&nbsp; &lsquo;y&rsquo; means fill up/down to 0 on the y axis for this series.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Series.useNegativeColors"></a>useNegativeColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useNegativeColors = true</td></tr></table></blockquote><p>true to color negative values differently in filled and bar charts.</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="Grid"></a>Grid</h2><div class=CBody><p>Object representing the grid on which the plot is drawn.&nbsp; The grid in this context is the area bounded by the axes, the area which will contain the series.&nbsp; Note, the series are drawn on their own canvas.&nbsp; The Grid object cannot be instantiated directly, but is created by the Plot oject.&nbsp; Grid properties can be set or overriden by the options passed in from the user.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#Grid.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Grid.drawGridlines" id=link261 onMouseOver="ShowTip(event, 'tt100', 'link261')" onMouseOut="HideTip('tt100')">drawGridlines</a></td><td class=SDescription>wether to draw the gridlines on the plot.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Grid.gridLineColor" id=link262 onMouseOver="ShowTip(event, 'tt101', 'link262')" onMouseOut="HideTip('tt101')">gridLineColor</a></td><td class=SDescription>color of the grid lines.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Grid.gridLineWidth" id=link263 onMouseOver="ShowTip(event, 'tt102', 'link263')" onMouseOut="HideTip('tt102')">gridLineWidth</a></td><td class=SDescription>width of the grid lines.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Grid.background" id=link264 onMouseOver="ShowTip(event, 'tt103', 'link264')" onMouseOut="HideTip('tt103')">background</a></td><td class=SDescription>css spec for the background color.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Grid.borderColor" id=link265 onMouseOver="ShowTip(event, 'tt104', 'link265')" onMouseOut="HideTip('tt104')">borderColor</a></td><td class=SDescription>css spec for the color of the grid border.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Grid.borderWidth" id=link266 onMouseOver="ShowTip(event, 'tt105', 'link266')" onMouseOut="HideTip('tt105')">borderWidth</a></td><td class=SDescription>width of the border in pixels.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Grid.drawBorder" id=link267 onMouseOver="ShowTip(event, 'tt106', 'link267')" onMouseOut="HideTip('tt106')">drawBorder</a></td><td class=SDescription>True to draw border around grid.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Grid.shadow" id=link268 onMouseOver="ShowTip(event, 'tt107', 'link268')" onMouseOut="HideTip('tt107')">shadow</a></td><td class=SDescription>wether to show a shadow behind the grid.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Grid.shadowAngle" id=link269 onMouseOver="ShowTip(event, 'tt108', 'link269')" onMouseOut="HideTip('tt108')">shadowAngle</a></td><td class=SDescription>shadow angle in degrees</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Grid.shadowOffset" id=link270 onMouseOver="ShowTip(event, 'tt109', 'link270')" onMouseOut="HideTip('tt109')">shadowOffset</a></td><td class=SDescription>Offset of each shadow stroke from the border in pixels</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Grid.shadowWidth" id=link271 onMouseOver="ShowTip(event, 'tt110', 'link271')" onMouseOut="HideTip('tt110')">shadowWidth</a></td><td class=SDescription>width of the stoke for the shadow</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Grid.shadowDepth" id=link272 onMouseOver="ShowTip(event, 'tt111', 'link272')" onMouseOut="HideTip('tt111')">shadowDepth</a></td><td class=SDescription>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Grid.shadowColor" id=link273 onMouseOver="ShowTip(event, 'tt112', 'link273')" onMouseOut="HideTip('tt112')">shadowColor</a></td><td class=SDescription>an optional css color spec for the shadow in &lsquo;rgba(n, n, n, n)&rsquo; form</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Grid.shadowAlpha" id=link274 onMouseOver="ShowTip(event, 'tt113', 'link274')" onMouseOut="HideTip('tt113')">shadowAlpha</a></td><td class=SDescription>Alpha channel transparency of shadow. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Grid.renderer" id=link275 onMouseOver="ShowTip(event, 'tt114', 'link275')" onMouseOut="HideTip('tt114')">renderer</a></td><td class=SDescription>Instance of a renderer which will actually render the grid, see <a href="jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" class=LClass id=link276 onMouseOver="ShowTip(event, 'tt115', 'link276')" onMouseOut="HideTip('tt115')">$.jqplot.CanvasGridRenderer</a>.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Grid.rendererOptions" id=link277 onMouseOver="ShowTip(event, 'tt116', 'link277')" onMouseOut="HideTip('tt116')">rendererOptions</a></td><td class=SDescription>Options to pass on to the renderer, see <a href="jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" class=LClass id=link278 onMouseOver="ShowTip(event, 'tt115', 'link278')" onMouseOut="HideTip('tt115')">$.jqplot.CanvasGridRenderer</a>.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Grid.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.drawGridlines"></a>drawGridlines</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawGridlines = true</td></tr></table></blockquote><p>wether to draw the gridlines on the plot.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.gridLineColor"></a>gridLineColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineColor = '#cccccc'</td></tr></table></blockquote><p>color of the grid lines.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.gridLineWidth"></a>gridLineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineWidth = 1.0</td></tr></table></blockquote><p>width of the grid lines.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.background"></a>background</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = '#fffdf6'</td></tr></table></blockquote><p>css spec for the background color.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.borderColor"></a>borderColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = '#999999'</td></tr></table></blockquote><p>css spec for the color of the grid border.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.borderWidth"></a>borderWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = 2.0</td></tr></table></blockquote><p>width of the border in pixels.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.drawBorder"></a>drawBorder</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBorder = true</td></tr></table></blockquote><p>True to draw border around grid.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.shadow"></a>shadow</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote><p>wether to show a shadow behind the grid.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.shadowAngle"></a>shadowAngle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote><p>shadow angle in degrees</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.5</td></tr></table></blockquote><p>Offset of each shadow stroke from the border in pixels</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.shadowWidth"></a>shadowWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowWidth = 3</td></tr></table></blockquote><p>width of the stoke for the shadow</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote><p>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.shadowColor"></a>shadowColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowColor = null</td></tr></table></blockquote><p>an optional css color spec for the shadow in &lsquo;rgba(n, n, n, n)&rsquo; form</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote><p>Alpha channel transparency of shadow.&nbsp; 0 = transparent.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.renderer"></a>renderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.CanvasGridRenderer</td></tr></table></blockquote><p>Instance of a renderer which will actually render the grid, see <a href="jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" class=LClass id=link279 onMouseOver="ShowTip(event, 'tt115', 'link279')" onMouseOut="HideTip('tt115')">$.jqplot.CanvasGridRenderer</a>.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Grid.rendererOptions"></a>rendererOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote><p>Options to pass on to the renderer, see <a href="jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" class=LClass id=link280 onMouseOver="ShowTip(event, 'tt115', 'link280')" onMouseOut="HideTip('tt115')">$.jqplot.CanvasGridRenderer</a>.</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="jqPlot"></a>jqPlot</h2><div class=CBody><p>Plot object returned by call to $.jqplot.&nbsp; Handles parsing user options, creating sub objects (Axes, legend, title, series) and rendering the plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#jqPlot.Properties" >Properties</a></td><td class=SDescription>These properties are specified at the top of the options object like so:</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.animate" id=link281 onMouseOver="ShowTip(event, 'tt117', 'link281')" onMouseOut="HideTip('tt117')">animate</a></td><td class=SDescription>True to animate the series on initial plot draw (renderer dependent). </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.animateReplot" id=link282 onMouseOver="ShowTip(event, 'tt118', 'link282')" onMouseOut="HideTip('tt118')">animateReplot</a></td><td class=SDescription>True to animate series after a call to the replot() method. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.axes" id=link283 onMouseOver="ShowTip(event, 'tt119', 'link283')" onMouseOut="HideTip('tt119')">axes</a></td><td class=SDescription>up to 4 axes are supported, each with it&rsquo;s own options, See <a href="#Axis" class=LClass id=link284 onMouseOver="ShowTip(event, 'tt120', 'link284')" onMouseOut="HideTip('tt120')">Axis</a> for axis specific options.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.data" id=link285 onMouseOver="ShowTip(event, 'tt121', 'link285')" onMouseOut="HideTip('tt121')">data</a></td><td class=SDescription>user&rsquo;s data. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.dataRenderer" id=link286 onMouseOver="ShowTip(event, 'tt122', 'link286')" onMouseOut="HideTip('tt122')">dataRenderer</a></td><td class=SDescription>A callable which can be used to preprocess data passed into the plot. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.dataRendererOptions" id=link287 onMouseOver="ShowTip(event, 'tt123', 'link287')" onMouseOut="HideTip('tt123')">dataRendererOptions</a></td><td class=SDescription>Options that will be passed to the dataRenderer. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.axesDefaults" >axesDefaults</a></td><td class=SDescription>default options that will be applied to all axes. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.seriesDefaults" id=link288 onMouseOver="ShowTip(event, 'tt124', 'link288')" onMouseOut="HideTip('tt124')">seriesDefaults</a></td><td class=SDescription>default options that will be applied to all series. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.defaultAxisStart" id=link289 onMouseOver="ShowTip(event, 'tt125', 'link289')" onMouseOut="HideTip('tt125')">defaultAxisStart</a></td><td class=SDescription>1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.fillBetween" id=link290 onMouseOver="ShowTip(event, 'tt126', 'link290')" onMouseOut="HideTip('tt126')">fillBetween</a></td><td class=SDescription>Fill between 2 line series in a plot. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.fontSize" id=link291 onMouseOver="ShowTip(event, 'tt127', 'link291')" onMouseOut="HideTip('tt127')">fontSize</a></td><td class=SDescription>css spec for the font-size attribute. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.grid" id=link292 onMouseOver="ShowTip(event, 'tt128', 'link292')" onMouseOut="HideTip('tt128')">grid</a></td><td class=SDescription>See <a href="#Grid" class=LClass id=link293 onMouseOver="ShowTip(event, 'tt129', 'link293')" onMouseOut="HideTip('tt129')">Grid</a> for grid specific options.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.legend" id=link294 onMouseOver="ShowTip(event, 'tt130', 'link294')" onMouseOut="HideTip('tt130')">legend</a></td><td class=SDescription>see &lt;$.jqplot.TableLegendRenderer&gt;</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.noDataIndicator" >noDataIndicator</a></td><td class=SDescription>Options to set up a mock plot with a data loading indicator if no data is specified.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.series" id=link295 onMouseOver="ShowTip(event, 'tt131', 'link295')" onMouseOut="HideTip('tt131')">series</a></td><td class=SDescription>Array of series object options. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.seriesColors" id=link296 onMouseOver="ShowTip(event, 'tt132', 'link296')" onMouseOut="HideTip('tt132')">seriesColors</a></td><td class=SDescription>Ann array of CSS color specifications that will be applied, in order, to the series in the plot. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.sortData" id=link297 onMouseOver="ShowTip(event, 'tt133', 'link297')" onMouseOut="HideTip('tt133')">sortData</a></td><td class=SDescription>false to not sort the data passed in by the user. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#jqPlot.stackSeries" id=link298 onMouseOver="ShowTip(event, 'tt134', 'link298')" onMouseOut="HideTip('tt134')">stackSeries</a></td><td class=SDescription>true or false, creates a stack or &ldquo;mountain&rdquo; plot. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.title" id=link299 onMouseOver="ShowTip(event, 'tt135', 'link299')" onMouseOut="HideTip('tt135')">title</a></td><td class=SDescription>Title object. </td></tr><tr class="SGroup"><td class=SEntry><a href="#jqPlot.methods" >methods</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.init" id=link300 onMouseOver="ShowTip(event, 'tt136', 'link300')" onMouseOut="HideTip('tt136')">init</a></td><td class=SDescription>sets the plot target, checks data and applies user options to plot.</td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#jqPlot.resetAxesScale" id=link301 onMouseOver="ShowTip(event, 'tt137', 'link301')" onMouseOut="HideTip('tt137')">resetAxesScale</a></td><td class=SDescription>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.</td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.reInitialize" id=link302 onMouseOver="ShowTip(event, 'tt138', 'link302')" onMouseOut="HideTip('tt138')">reInitialize</a></td><td class=SDescription>reinitialize plot for replotting. </td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#jqPlot.quickInit" id=link303 onMouseOver="ShowTip(event, 'tt139', 'link303')" onMouseOut="HideTip('tt139')">quickInit</a></td><td class=SDescription>Quick reinitialization plot for replotting. </td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.destroy" id=link304 onMouseOver="ShowTip(event, 'tt140', 'link304')" onMouseOut="HideTip('tt140')">destroy</a></td><td class=SDescription>Releases all resources occupied by the plot</td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#jqPlot.replot" id=link305 onMouseOver="ShowTip(event, 'tt141', 'link305')" onMouseOut="HideTip('tt141')">replot</a></td><td class=SDescription>Does a reinitialization of the plot followed by a redraw. </td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.redraw" id=link306 onMouseOver="ShowTip(event, 'tt142', 'link306')" onMouseOut="HideTip('tt142')">redraw</a></td><td class=SDescription>Empties the plot target div and redraws the plot. </td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#jqPlot.draw" id=link307 onMouseOver="ShowTip(event, 'tt143', 'link307')" onMouseOut="HideTip('tt143')">draw</a></td><td class=SDescription>Draws all elements of the plot into the container. </td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.drawSeries" id=link308 onMouseOver="ShowTip(event, 'tt144', 'link308')" onMouseOut="HideTip('tt144')">drawSeries</a></td><td class=SDescription>Redraws all or just one series on the plot. </td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#jqPlot.moveSeriesToFront" id=link309 onMouseOver="ShowTip(event, 'tt145', 'link309')" onMouseOut="HideTip('tt145')">moveSeriesToFront</a></td><td class=SDescription>This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases. </td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.moveSeriesToBack" id=link310 onMouseOver="ShowTip(event, 'tt146', 'link310')" onMouseOut="HideTip('tt146')">moveSeriesToBack</a></td><td class=SDescription>This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.</td></tr><tr class="SFunction SIndent1"><td class=SEntry><a href="#jqPlot.restorePreviousSeriesOrder" id=link311 onMouseOver="ShowTip(event, 'tt147', 'link311')" onMouseOut="HideTip('tt147')">restorePreviousSeriesOrder</a></td><td class=SDescription>This method requires jQuery 1.4+ Restore the series canvas order to its previous state. </td></tr><tr class="SFunction SIndent1 SMarked"><td class=SEntry><a href="#jqPlot.restoreOriginalSeriesOrder" id=link312 onMouseOver="ShowTip(event, 'tt148', 'link312')" onMouseOut="HideTip('tt148')">restoreOriginalSeriesOrder</a></td><td class=SDescription>This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="jqPlot.Properties"></a>Properties</h3><div class=CBody><p>These properties are specified at the top of the options object like so:</p><blockquote><pre>{
- axesDefaults:{min:0},
- series:[{color:'#6633dd'}],
- title: 'A Plot'
-}</pre></blockquote></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.animate"></a>animate</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.animate = false</td></tr></table></blockquote><p>True to animate the series on initial plot draw (renderer dependent).&nbsp; Actual animation functionality must be supported in the renderer.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.animateReplot"></a>animateReplot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.animateReplot = false</td></tr></table></blockquote><p>True to animate series after a call to the replot() method.&nbsp; Use with caution!&nbsp; Replots can happen very frequently under certain circumstances (e.g. resizing, dragging points) and animation in these situations can cause problems.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.axes"></a>axes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>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')}</td></tr></table></blockquote><p>up to 4 axes are supported, each with it&rsquo;s own options, See <a href="#Axis" class=LClass id=link313 onMouseOver="ShowTip(event, 'tt120', 'link313')" onMouseOut="HideTip('tt120')">Axis</a> for axis specific options.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.data"></a>data</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.data = []</td></tr></table></blockquote><p>user&rsquo;s data.&nbsp; Data should <b>NOT</b> be specified in the options object, but be passed in as the second argument to the $.jqplot() function.&nbsp; The data property is described here soley for reference.&nbsp; The data should be in the form of an array of 2D or 1D arrays like</p><blockquote><pre>[ [[x1, y1], [x2, y2],...], [y1, y2, ...] ].</pre></blockquote></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.dataRenderer"></a>dataRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataRenderer</td></tr></table></blockquote><p>A callable which can be used to preprocess data passed into the plot.&nbsp; Will be called with 2 arguments, the plot data and a reference to the plot.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.dataRendererOptions"></a>dataRendererOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataRendererOptions</td></tr></table></blockquote><p>Options that will be passed to the dataRenderer.&nbsp; Can be of any type.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.axesDefaults"></a>axesDefaults</h3><div class=CBody><p>default options that will be applied to all axes. see <a href="#Axis" class=LClass id=link314 onMouseOver="ShowTip(event, 'tt120', 'link314')" onMouseOut="HideTip('tt120')">Axis</a> for axes options.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.seriesDefaults"></a>seriesDefaults</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>seriesDefaults: {}, series:[] }</td></tr></table></blockquote><p>default options that will be applied to all series. see <a href="#Series" class=LClass id=link315 onMouseOver="ShowTip(event, 'tt152', 'link315')" onMouseOut="HideTip('tt152')">Series</a> for series options.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.defaultAxisStart"></a>defaultAxisStart</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.defaultAxisStart = 1</td></tr></table></blockquote><p>1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot.&nbsp; This is the default starting value for the missing x or y value.&nbsp; The added data will be a monotonically increasing series (e.g.&nbsp; [1, 2, 3, ...]) starting at this value.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.fillBetween"></a>fillBetween</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }</td></tr></table></blockquote><p>Fill between 2 line series in a plot.&nbsp; 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].&nbsp; }</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.fontSize"></a>fontSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote><p>css spec for the font-size attribute.&nbsp; Default for the entire plot.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.grid"></a>grid</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.grid = new Grid()</td></tr></table></blockquote><p>See <a href="#Grid" class=LClass id=link316 onMouseOver="ShowTip(event, 'tt129', 'link316')" onMouseOut="HideTip('tt129')">Grid</a> for grid specific options.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.legend"></a>legend</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.legend = new Legend()</td></tr></table></blockquote><p>see &lt;$.jqplot.TableLegendRenderer&gt;</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.noDataIndicator"></a>noDataIndicator</h3><div class=CBody><p>Options to set up a mock plot with a data loading indicator if no data is specified.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.series"></a>series</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.series = []</td></tr></table></blockquote><p>Array of series object options. see <a href="#Series" class=LClass id=link317 onMouseOver="ShowTip(event, 'tt152', 'link317')" onMouseOut="HideTip('tt152')">Series</a> for series specific options.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.seriesColors"></a>seriesColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesColors = $.jqplot.config.defaultColors</td></tr></table></blockquote><p>Ann array of CSS color specifications that will be applied, in order, to the series in the plot.&nbsp; Colors will wrap around so, if their are more series than colors, colors will be reused starting at the beginning.&nbsp; For pie charts, this specifies the colors of the slices.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.sortData"></a>sortData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortData = true</td></tr></table></blockquote><p>false to not sort the data passed in by the user.&nbsp; Many bar, stakced and other graphs as well as many plugins depend on having sorted data.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.stackSeries"></a>stackSeries</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackSeries = false</td></tr></table></blockquote><p>true or false, creates a stack or &ldquo;mountain&rdquo; plot.&nbsp; Not all series renderers may implement this option.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="jqPlot.title"></a>title</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.title = new Title()</td></tr></table></blockquote><p>Title object.&nbsp; See <a href="#Title" class=LClass id=link318 onMouseOver="ShowTip(event, 'tt153', 'link318')" onMouseOut="HideTip('tt153')">Title</a> for specific options.&nbsp; As a shortcut, you can specify the title option as just a string like: title: &lsquo;My Plot&rsquo; and this will create a new title object with the specified text.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="jqPlot.methods"></a>methods</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.init"></a>init</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.init = function(</td><td class=PParameter nowrap>target,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>sets the plot target, checks data and applies user options to plot.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.resetAxesScale"></a>resetAxesScale</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.resetAxesScale = function(</td><td class=PParameter nowrap>axes,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>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.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>axes</td><td class=CDLDescription>Boolean to reset or not reset all axes or an array or object of axis names to reset.</td></tr></table></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.reInitialize"></a>reInitialize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.reInitialize = function (</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>opts</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>reinitialize plot for replotting. not called directly.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.quickInit"></a>quickInit</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.quickInit = function ()</td></tr></table></blockquote><p>Quick reinitialization plot for replotting.&nbsp; Does not parse options ore recreate axes and series. not called directly.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.destroy"></a>destroy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.destroy = function()</td></tr></table></blockquote><p>Releases all resources occupied by the plot</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.replot"></a>replot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.replot = function(</td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Does a reinitialization of the plot followed by a redraw.&nbsp; Method could be used to interactively change plot characteristics and then replot.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>options</td><td class=CDLDescription>Options used for replotting.</td></tr></table><h4 class=CHeading>Properties</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>clear</td><td class=CDLDescription>false to not clear (empty) the plot container before replotting (default: true).</td></tr><tr><td class=CDLEntry>resetAxes</td><td class=CDLDescription>true 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.&nbsp; [&lsquo;xaxis&rsquo;, &lsquo;y2axis&rsquo;]) (default: false).</td></tr></table></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.redraw"></a>redraw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.redraw = function(</td><td class=PParameter nowrap>clear</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Empties the plot target div and redraws the plot.&nbsp; This enables plot data and properties to be changed and then to comletely clear the plot and redraw. redraw <b>will not</b> reinitialize any plot elements.&nbsp; That is, axes will not be autoscaled and defaults will not be reapplied to any plot elements.&nbsp; redraw is used primarily with zooming.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>clear</td><td class=CDLDescription>false to not clear (empty) the plot container before redrawing (default: true).</td></tr></table></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.draw = function()</td></tr></table></blockquote><p>Draws all elements of the plot into the container.&nbsp; Does not clear the container before drawing.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.drawSeries"></a>drawSeries</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.drawSeries = function(</td><td class=PParameter nowrap>options,</td></tr><tr><td></td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Redraws all or just one series on the plot.&nbsp; 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.&nbsp; It can be an empty object {}.&nbsp; idx is the series index to redraw if only one series is to be redrawn.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.moveSeriesToFront"></a>moveSeriesToFront</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToFront = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases.&nbsp; This effectively &ldquo;draws&rdquo; the specified series on top of all other series, although it is performed through DOM manipulation, no redrawing is performed.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>idx</td><td class=CDLDescription>0 based index of the series to move.&nbsp; This will be the index of the series as it was first passed into the jqplot function.</td></tr></table></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.moveSeriesToBack"></a>moveSeriesToBack</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToBack = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>idx</td><td class=CDLDescription>0 based index of the series to move.&nbsp; This will be the index of the series as it was first passed into the jqplot function.</td></tr></table></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.restorePreviousSeriesOrder"></a>restorePreviousSeriesOrder</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restorePreviousSeriesOrder = function ()</td></tr></table></blockquote><p>This method requires jQuery 1.4+ Restore the series canvas order to its previous state.&nbsp; Useful to put a series back where it belongs after moving it to the front.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="jqPlot.restoreOriginalSeriesOrder"></a>restoreOriginalSeriesOrder</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restoreOriginalSeriesOrder = function ()</td></tr></table></blockquote><p>This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile id=MSelected>jqPlot Charts</div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([4, 2], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CSection><b>This document is out of date. </div></div><div class=CToolTip id="tt2"><div class=CSection>This document will help you understand how jqPlot&rsquo;s options relate to the API documentation and the jqPlot object itself. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote>Wether to display the axis on the graph.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickRenderer = $.jqplot.AxisTickRenderer</td></tr></table></blockquote>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.</div></div><div class=CToolTip id="tt5"><div class=CClass>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickOptions = {}</td></tr></table></blockquote>Options that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>A class of a rendering engine for creating an axis label.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelOptions = {}</td></tr></table></blockquote>Options passed to the label renderer.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>Label for the axis</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>true to show the axis label.</div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min = null</td></tr></table></blockquote>minimum value of the axis (in data units, not pixels).</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max = null</td></tr></table></blockquote>maximum value of the axis (in data units, not pixels).</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscale = false</td></tr></table></blockquote>DEPRECATED the default scaling algorithm produces superior results.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pad = 1.2</td></tr></table></blockquote>Padding to extend the range above and below the data bounds. </div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMax = null</td></tr></table></blockquote>Padding to extend the range above data bounds. </div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMin = null</td></tr></table></blockquote>Padding to extend the range below data bounds. </div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis. </div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberTicks</td></tr></table></blockquote>Desired number of ticks. </div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInterval</td></tr></table></blockquote>number of units between ticks. </div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LinearAxisRenderer</td></tr></table></blockquote>A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.</div></div><div class=CToolTip id="tt21"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options. </div></div><div class=CToolTip id="tt22"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>Wether to show the ticks (both marks and labels) or not. </div></div><div class=CToolTip id="tt23"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickMarks = true</td></tr></table></blockquote>Wether to show the tick marks (line crossing grid) or not. </div></div><div class=CToolTip id="tt24"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMinorTicks = true</td></tr></table></blockquote>Wether or not to show minor ticks. </div></div><div class=CToolTip id="tt25"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMajorGridlines = true</td></tr></table></blockquote>True to draw gridlines for major axis ticks.</div></div><div class=CToolTip id="tt26"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMinorGridlines = false</td></tr></table></blockquote>True to draw gridlines for minor ticks.</div></div><div class=CToolTip id="tt27"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMajorTickMarks = true</td></tr></table></blockquote>True to draw tick marks for major axis ticks.</div></div><div class=CToolTip id="tt28"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMinorTickMarks = true</td></tr></table></blockquote>True to draw tick marks for minor ticks. </div></div><div class=CToolTip id="tt29"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useSeriesColor = false</td></tr></table></blockquote>Use the color of the first series associated with this axis for the tick marks and line bordering this axis.</div></div><div class=CToolTip id="tt30"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = null</td></tr></table></blockquote>width of line stroked at the border of the axis. </div></div><div class=CToolTip id="tt31"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the border adjacent to the axis. </div></div><div class=CToolTip id="tt32"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.scaleToHiddenSeries = false</td></tr></table></blockquote>True to include hidden series when computing axes bounds and scaling.</div></div><div class=CToolTip id="tt33"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.syncTicks = null</td></tr></table></blockquote>true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up. </div></div><div class=CToolTip id="tt34"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 75</td></tr></table></blockquote>Approximate pixel spacing between ticks on graph. </div></div><div class=CToolTip id="tt35"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote>Wether to display the legend on the graph.</div></div><div class=CToolTip id="tt36"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'ne'</td></tr></table></blockquote>Placement of the legend. </div></div><div class=CToolTip id="tt37"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>Array of labels to use. </div></div><div class=CToolTip id="tt38"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>true to show the label text on the legend.</div></div><div class=CToolTip id="tt39"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showSwatches = true</td></tr></table></blockquote>true to show the color swatches on the legend.</div></div><div class=CToolTip id="tt40"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.placement = &quot;insideGrid&quot;</td></tr></table></blockquote>&ldquo;insideGrid&rdquo; places legend inside the grid area of the plot. </div></div><div class=CToolTip id="tt41"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xoffset = 0</td></tr></table></blockquote>DEPRECATED. </div></div><div class=CToolTip id="tt42"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yoffset = 0</td></tr></table></blockquote>DEPRECATED. </div></div><div class=CToolTip id="tt43"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.border</td></tr></table></blockquote>css spec for the border around the legend box.</div></div><div class=CToolTip id="tt44"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background</td></tr></table></blockquote>css spec for the background of the legend box.</div></div><div class=CToolTip id="tt45"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css color spec for the legend text.</div></div><div class=CToolTip id="tt46"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css font-family spec for the legend text.</div></div><div class=CToolTip id="tt47"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css font-size spec for the legend text.</div></div><div class=CToolTip id="tt48"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rowSpacing = '0.5em'</td></tr></table></blockquote>css padding-top spec for the rows in the legend.</div></div><div class=CToolTip id="tt49"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options passed to the renderer.</div></div><div class=CToolTip id="tt50"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginTop = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt51"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginRight = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt52"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginBottom = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt53"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginLeft = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt54"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>True to escape special characters with their html entity equivalents in legend text. </div></div><div class=CToolTip id="tt55"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.text = text</td></tr></table></blockquote>text of the title;</div></div><div class=CToolTip id="tt56"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the title</div></div><div class=CToolTip id="tt57"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css font-family spec for the text.</div></div><div class=CToolTip id="tt58"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css font-size spec for the text.</div></div><div class=CToolTip id="tt59"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textAlign</td></tr></table></blockquote>css text-align spec for the text.</div></div><div class=CToolTip id="tt60"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css color spec for the text.</div></div><div class=CToolTip id="tt61"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.DivTitleRenderer</td></tr></table></blockquote>A class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.</div></div><div class=CToolTip id="tt62"><div class=CClass>The default title renderer for jqPlot. </div></div><div class=CToolTip id="tt63"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options passed to the renderer.</div></div><div class=CToolTip id="tt64"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>True to escape special characters with their html entity equivalents in title text. </div></div><div class=CToolTip id="tt65"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to draw the series.</div></div><div class=CToolTip id="tt66"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xaxis = 'xaxis'</td></tr></table></blockquote>which x axis to use with this series, either &lsquo;xaxis&rsquo; or &lsquo;x2axis&rsquo;.</div></div><div class=CToolTip id="tt67"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yaxis = 'yaxis'</td></tr></table></blockquote>which y axis to use with this series, either &lsquo;yaxis&rsquo; or &lsquo;y2axis&rsquo;.</div></div><div class=CToolTip id="tt68"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LineRenderer</td></tr></table></blockquote>A class of a renderer which will draw the series, see $.jqplot.LineRenderer.</div></div><div class=CToolTip id="tt69"><div class=CClass>The default line renderer for jqPlot, this class has no options beyond the Series class. </div></div><div class=CToolTip id="tt70"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>Options to pass on to the renderer.</div></div><div class=CToolTip id="tt71"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Line label to use in the legend.</div></div><div class=CToolTip id="tt72"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>true to show label for this series in the legend.</div></div><div class=CToolTip id="tt73"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>css color spec for the series</div></div><div class=CToolTip id="tt74"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.negativeColor</td></tr></table></blockquote>css color spec used for filled (area) plots that are filled to zero and the &ldquo;useNegativeColors&rdquo; option is true.</div></div><div class=CToolTip id="tt75"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2.5</td></tr></table></blockquote>width of the line in pixels. </div></div><div class=CToolTip id="tt76"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'round'</td></tr></table></blockquote>Canvas lineJoin style between segments of series.</div></div><div class=CToolTip id="tt77"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>Canvas lineCap style at ends of line.</div></div><div class=CToolTip id="tt78"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.linePattern = 'solid'</td></tr></table></blockquote>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</div></div><div class=CToolTip id="tt79"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt80"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.25</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt81"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt82"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.1'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt83"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakOnNull = false</td></tr></table></blockquote>Wether line segments should be be broken at null value. </div></div><div class=CToolTip id="tt84"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = $.jqplot.MarkerRenderer</td></tr></table></blockquote>A class of a renderer which will draw marker (e.g. </div></div><div class=CToolTip id="tt85"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerOptions = {}</td></tr></table></blockquote>renderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.</div></div><div class=CToolTip id="tt86"><div class=CClass>The default jqPlot marker renderer, rendering the points on the line.</div></div><div class=CToolTip id="tt87"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLine = true</td></tr></table></blockquote>wether to actually draw the line or not. </div></div><div class=CToolTip id="tt88"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>wether or not to show the markers at the data points.</div></div><div class=CToolTip id="tt89"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.index</td></tr></table></blockquote>0 based index of this series in the plot series array.</div></div><div class=CToolTip id="tt90"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>true or false, wether to fill under lines or in bars. </div></div><div class=CToolTip id="tt91"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillColor</td></tr></table></blockquote>CSS color spec to use for fill under line. </div></div><div class=CToolTip id="tt92"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAlpha</td></tr></table></blockquote>Alpha transparency to apply to the fill under the line. </div></div><div class=CToolTip id="tt93"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAndStroke = false</td></tr></table></blockquote>If true will stroke the line (with color this.color) as well as fill under it. </div></div><div class=CToolTip id="tt94"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableStack = false</td></tr></table></blockquote>true to not stack this series with other series in the plot. </div></div><div class=CToolTip id="tt95"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.neighborThreshold = 4</td></tr></table></blockquote>how close or far (in pixels) the cursor must be from a point marker to detect the point.</div></div><div class=CToolTip id="tt96"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToZero = false</td></tr></table></blockquote>true will force bar and filled series to fill toward zero on the fill Axis.</div></div><div class=CToolTip id="tt97"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToValue = 0</td></tr></table></blockquote>fill a filled series to this value on the fill axis. </div></div><div class=CToolTip id="tt98"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAxis = 'y'</td></tr></table></blockquote>Either &lsquo;x&rsquo; or &lsquo;y&rsquo;. </div></div><div class=CToolTip id="tt99"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useNegativeColors = true</td></tr></table></blockquote>true to color negative values differently in filled and bar charts.</div></div><div class=CToolTip id="tt100"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawGridlines = true</td></tr></table></blockquote>wether to draw the gridlines on the plot.</div></div><div class=CToolTip id="tt101"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineColor = '#cccccc'</td></tr></table></blockquote>color of the grid lines.</div></div><div class=CToolTip id="tt102"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineWidth = 1.0</td></tr></table></blockquote>width of the grid lines.</div></div><div class=CToolTip id="tt103"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = '#fffdf6'</td></tr></table></blockquote>css spec for the background color.</div></div><div class=CToolTip id="tt104"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = '#999999'</td></tr></table></blockquote>css spec for the color of the grid border.</div></div><div class=CToolTip id="tt105"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = 2.0</td></tr></table></blockquote>width of the border in pixels.</div></div><div class=CToolTip id="tt106"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBorder = true</td></tr></table></blockquote>True to draw border around grid.</div></div><div class=CToolTip id="tt107"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether to show a shadow behind the grid.</div></div><div class=CToolTip id="tt108"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>shadow angle in degrees</div></div><div class=CToolTip id="tt109"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.5</td></tr></table></blockquote>Offset of each shadow stroke from the border in pixels</div></div><div class=CToolTip id="tt110"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowWidth = 3</td></tr></table></blockquote>width of the stoke for the shadow</div></div><div class=CToolTip id="tt111"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt112"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowColor = null</td></tr></table></blockquote>an optional css color spec for the shadow in &lsquo;rgba(n, n, n, n)&rsquo; form</div></div><div class=CToolTip id="tt113"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt114"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.CanvasGridRenderer</td></tr></table></blockquote>Instance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.</div></div><div class=CToolTip id="tt115"><div class=CClass>The default jqPlot grid renderer, creating a grid on a canvas element. </div></div><div class=CToolTip id="tt116"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>Options to pass on to the renderer, see $.jqplot.CanvasGridRenderer.</div></div><div class=CToolTip id="tt117"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.animate = false</td></tr></table></blockquote>True to animate the series on initial plot draw (renderer dependent). </div></div><div class=CToolTip id="tt118"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.animateReplot = false</td></tr></table></blockquote>True to animate series after a call to the replot() method. </div></div><div class=CToolTip id="tt119"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>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')}</td></tr></table></blockquote>up to 4 axes are supported, each with it&rsquo;s own options, See Axis for axis specific options.</div></div><div class=CToolTip id="tt120"><div class=CClass>An individual axis object. </div></div><div class=CToolTip id="tt121"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.data = []</td></tr></table></blockquote>user&rsquo;s data. </div></div><div class=CToolTip id="tt122"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataRenderer</td></tr></table></blockquote>A callable which can be used to preprocess data passed into the plot. </div></div><div class=CToolTip id="tt123"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataRendererOptions</td></tr></table></blockquote>Options that will be passed to the dataRenderer. </div></div><div class=CToolTip id="tt124"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>seriesDefaults: {}, series:[] }</td></tr></table></blockquote>default options that will be applied to all series. </div></div><div class=CToolTip id="tt125"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.defaultAxisStart = 1</td></tr></table></blockquote>1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot. </div></div><div class=CToolTip id="tt126"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }</td></tr></table></blockquote>Fill between 2 line series in a plot. </div></div><div class=CToolTip id="tt127"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size attribute. </div></div><div class=CToolTip id="tt128"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.grid = new Grid()</td></tr></table></blockquote>See Grid for grid specific options.</div></div><div class=CToolTip id="tt129"><div class=CClass>Object representing the grid on which the plot is drawn. </div></div><div class=CToolTip id="tt130"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.legend = new Legend()</td></tr></table></blockquote>see $.jqplot.TableLegendRenderer</div></div><div class=CToolTip id="tt131"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.series = []</td></tr></table></blockquote>Array of series object options. </div></div><div class=CToolTip id="tt132"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesColors = $.jqplot.config.defaultColors</td></tr></table></blockquote>Ann array of CSS color specifications that will be applied, in order, to the series in the plot. </div></div><div class=CToolTip id="tt133"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortData = true</td></tr></table></blockquote>false to not sort the data passed in by the user. </div></div><div class=CToolTip id="tt134"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackSeries = false</td></tr></table></blockquote>true or false, creates a stack or &ldquo;mountain&rdquo; plot. </div></div><div class=CToolTip id="tt135"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.title = new Title()</td></tr></table></blockquote>Title object. </div></div><div class=CToolTip id="tt136"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.init = function(</td><td class=PParameter nowrap>target,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>sets the plot target, checks data and applies user options to plot.</div></div><div class=CToolTip id="tt137"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.resetAxesScale = function(</td><td class=PParameter nowrap>axes,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>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.</div></div><div class=CToolTip id="tt138"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.reInitialize = function (</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>opts</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>reinitialize plot for replotting. </div></div><div class=CToolTip id="tt139"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.quickInit = function ()</td></tr></table></blockquote>Quick reinitialization plot for replotting. </div></div><div class=CToolTip id="tt140"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.destroy = function()</td></tr></table></blockquote>Releases all resources occupied by the plot</div></div><div class=CToolTip id="tt141"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.replot = function(</td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Does a reinitialization of the plot followed by a redraw. </div></div><div class=CToolTip id="tt142"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.redraw = function(</td><td class=PParameter nowrap>clear</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Empties the plot target div and redraws the plot. </div></div><div class=CToolTip id="tt143"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.draw = function()</td></tr></table></blockquote>Draws all elements of the plot into the container. </div></div><div class=CToolTip id="tt144"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.drawSeries = function(</td><td class=PParameter nowrap>options,</td></tr><tr><td></td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Redraws all or just one series on the plot. </div></div><div class=CToolTip id="tt145"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToFront = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases. </div></div><div class=CToolTip id="tt146"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToBack = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.</div></div><div class=CToolTip id="tt147"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restorePreviousSeriesOrder = function ()</td></tr></table></blockquote>This method requires jQuery 1.4+ Restore the series canvas order to its previous state. </div></div><div class=CToolTip id="tt148"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restoreOriginalSeriesOrder = function ()</td></tr></table></blockquote>This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.</div></div><div class=CToolTip id="tt149"><div class=CSection>GNU GENERAL PUBLIC LICENSE Version 2, June 1991</div></div><div class=CToolTip id="tt150"><div class=CSection>Copyright &copy; 2009-2012 Chris Leonello</div></div><div class=CToolTip id="tt151"><div class=CClass>The default jqPlot axis renderer, creating a numeric axis.</div></div><div class=CToolTip id="tt152"><div class=CClass>An individual data series object. </div></div><div class=CToolTip id="tt153"><div class=CClass>Plot Title object. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-divTitleRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-divTitleRenderer-js.html
deleted file mode 100644
index a3806b9a..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-divTitleRenderer-js.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.DivTitleRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.DivTitleRenderer"></a>$.jqplot.<wbr>DivTitleRenderer</div><div class=CBody><p>The default title renderer for jqPlot.&nbsp; This class has no options beyond the <a href="jqplot-core-js.html#Title" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">Title</a> class.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Div Title Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Plot Title object. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-lineRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-lineRenderer-js.html
deleted file mode 100644
index 09170eda..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-lineRenderer-js.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.LineRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.LineRenderer"></a>$.jqplot.<wbr>LineRenderer</div><div class=CBody><p>The default line renderer for jqPlot, this class has no options beyond the <a href="jqplot-core-js.html#Series" class=LClass id=link9 onMouseOver="ShowTip(event, 'tt1', 'link9')" onMouseOut="HideTip('tt1')">Series</a> class.&nbsp; Draws series as a line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.LineRenderer" >$.jqplot.<wbr>LineRenderer</a></td><td class=SDescription>The default line renderer for jqPlot, this class has no options beyond the <a href="jqplot-core-js.html#Series" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">Series</a> class. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.LineRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.smooth" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">smooth</a></td><td class=SDescription>True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LineRenderer.constrainSmoothing" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">constrainSmoothing</a></td><td class=SDescription>True to use a more accurate smoothing algorithm that will not overshoot any data points. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.bandData" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">bandData</a></td><td class=SDescription>Data used to draw error bands or confidence intervals above/below a line.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.LineRenderer.bands" >bands</a></td><td class=SDescription>Banding around line, e.g error bands or confidence intervals.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.show" >show</a></td><td class=SDescription>true to show the bands. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LineRenderer.color" >color</a></td><td class=SDescription>color of lines at top and bottom of bands [default: series color].</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.showLines" >showLines</a></td><td class=SDescription>True to show lines at top and bottom of bands [default: false].</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LineRenderer.fill" >fill</a></td><td class=SDescription>True to fill area between bands [default: true].</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.fillColor" >fillColor</a></td><td class=SDescription>css color spec for filled area. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LineRenderer.interval" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">interval</a></td><td class=SDescription>User specified interval above and below line for bands [default: &lsquo;3%&rsquo;&rsquo;]. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.LineRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.highlightMouseOver" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">highlightMouseOver</a></td><td class=SDescription>True to highlight area on a filled plot when moused over. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LineRenderer.highlightMouseDown" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over an area on a filled plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LineRenderer.highlightColor" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">highlightColor</a></td><td class=SDescription>color to use when highlighting an area on a filled plot.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.smooth"></a>smooth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.smooth = false</td></tr></table></blockquote><p>True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points.&nbsp; Set to an integer number &gt; 2 to specify number of smoothing points to use between each data point.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.constrainSmoothing"></a>constrainSmoothing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.constrainSmoothing = true</td></tr></table></blockquote><p>True to use a more accurate smoothing algorithm that will not overshoot any data points.&nbsp; False to allow overshoot but produce a smoother looking line.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.bandData"></a>bandData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.bandData = []</td></tr></table></blockquote><p>Data used to draw error bands or confidence intervals above/below a line.</p><p>bandData can be input in 3 forms.&nbsp; jqPlot will figure out which is the low band line and which is the high band line for all forms:</p><p>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.&nbsp; 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.</p><p>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.</p><p>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.&nbsp; In this case, [yl1, yu1] specifies the lower and upper y values for the 1st data point and so on.&nbsp; The bands will inherit the x values from the series.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.bands"></a>bands</h3><div class=CBody><p>Banding around line, e.g error bands or confidence intervals.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.show"></a>show</h3><div class=CBody><p>true to show the bands.&nbsp; If bandData or interval is supplied, show will be set to true by default.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.color"></a>color</h3><div class=CBody><p>color of lines at top and bottom of bands [default: series color].</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.showLines"></a>showLines</h3><div class=CBody><p>True to show lines at top and bottom of bands [default: false].</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.fill"></a>fill</h3><div class=CBody><p>True to fill area between bands [default: true].</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.fillColor"></a>fillColor</h3><div class=CBody><p>css color spec for filled area.&nbsp; [default: series color].</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.interval"></a>interval</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>interval: '3%' }</td></tr></table></blockquote><p>User specified interval above and below line for bands [default: &lsquo;3%&rsquo;&rsquo;].&nbsp; Can be a value like 3 or a string like &lsquo;3%&rsquo; or an upper/lower array like [1, -2] or [&lsquo;2%&rsquo;, &lsquo;-1.5%&rsquo;]</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight area on a filled plot when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on an area on a filled plot.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over an area on a filled plot.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LineRenderer.highlightColor"></a>highlightColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColor = null</td></tr></table></blockquote><p>color to use when highlighting an area on a filled plot.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Line Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>An individual data series object. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.smooth = false</td></tr></table></blockquote>True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.constrainSmoothing = true</td></tr></table></blockquote>True to use a more accurate smoothing algorithm that will not overshoot any data points. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.bandData = []</td></tr></table></blockquote>Data used to draw error bands or confidence intervals above/below a line.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>interval: '3%' }</td></tr></table></blockquote>User specified interval above and below line for bands [default: &lsquo;3%&rsquo;&rsquo;]. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area on a filled plot when moused over. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over an area on a filled plot. </div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColor = null</td></tr></table></blockquote>color to use when highlighting an area on a filled plot.</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-linearAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-linearAxisRenderer-js.html
deleted file mode 100644
index a3669ba1..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-linearAxisRenderer-js.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.LinearAxisRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.LinearAxisRenderer"></a>$.jqplot.<wbr>LinearAxisRenderer</div><div class=CBody><p>The default jqPlot axis renderer, creating a numeric axis.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer" >$.jqplot.<wbr>LinearAxisRenderer</a></td><td class=SDescription>The default jqPlot axis renderer, creating a numeric axis.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.breakPoints" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">breakPoints</a></td><td class=SDescription>EXPERIMENTAL!!&nbsp; </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.breakTickLabel" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">breakTickLabel</a></td><td class=SDescription>Label to use at the axis break if breakPoints are specified.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.drawBaseline" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">drawBaseline</a></td><td class=SDescription>True to draw the axis baseline.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.baselineWidth" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">baselineWidth</a></td><td class=SDescription>width of the baseline in pixels.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.baselineColor" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">baselineColor</a></td><td class=SDescription>CSS color spec for the baseline.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.forceTickAt0" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">forceTickAt0</a></td><td class=SDescription>This will ensure that there is always a tick mark at 0. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.forceTickAt100" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">forceTickAt100</a></td><td class=SDescription>This will ensure that there is always a tick mark at 100. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.tickInset" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">tickInset</a></td><td class=SDescription>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.minorTicks" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">minorTicks</a></td><td class=SDescription>Number of ticks to add between &ldquo;major&rdquo; ticks. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LinearAxisRenderer.alignTicks" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">alignTicks</a></td><td class=SDescription>true to align tick marks across opposed axes such as from the y2axis to yaxis.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.breakPoints"></a>breakPoints</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakPoints = null</td></tr></table></blockquote><p>EXPERIMENTAL!!&nbsp; Use at your own risk!&nbsp; Works only with linear axes and the default tick renderer.&nbsp; Array of [start, stop] points to create a broken axis.&nbsp; Broken axes have a &ldquo;jump&rdquo; in them, which is an immediate transition from a smaller value to a larger value.&nbsp; Currently, axis ticks MUST be manually assigned if using breakPoints by using the axis ticks array option.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.breakTickLabel"></a>breakTickLabel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakTickLabel = &quot;&amp;asymp</td></tr></table></blockquote><p>Label to use at the axis break if breakPoints are specified.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.drawBaseline"></a>drawBaseline</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote><p>True to draw the axis baseline.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.baselineWidth"></a>baselineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote><p>width of the baseline in pixels.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.baselineColor"></a>baselineColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote><p>CSS color spec for the baseline.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.forceTickAt0"></a>forceTickAt0</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.forceTickAt0 = false</td></tr></table></blockquote><p>This will ensure that there is always a tick mark at 0.&nbsp; 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.&nbsp; This has know effect when any of the following options are set: autoscale, min, max, numberTicks or tickInterval.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.forceTickAt100"></a>forceTickAt100</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.forceTickAt100 = false</td></tr></table></blockquote><p>This will ensure that there is always a tick mark at 100.&nbsp; 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.&nbsp; This has know effect when any of the following options are set: autoscale, min, max, numberTicks or tickInterval.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.tickInset"></a>tickInset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInset = 0</td></tr></table></blockquote><p>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.&nbsp; 0 is no inset, 0.5 is one half a tick interval, 1 is a full tick interval, etc.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.minorTicks"></a>minorTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.minorTicks = 0</td></tr></table></blockquote><p>Number of ticks to add between &ldquo;major&rdquo; ticks.&nbsp; Major ticks are ticks supplied by user or auto computed.&nbsp; Minor ticks cannot be created by user.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LinearAxisRenderer.alignTicks"></a>alignTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alignTicks = false</td></tr></table></blockquote><p>true to align tick marks across opposed axes such as from the y2axis to yaxis.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Linear Axis Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakPoints = null</td></tr></table></blockquote>EXPERIMENTAL!!&nbsp; </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakTickLabel = &quot;&amp;asymp</td></tr></table></blockquote>Label to use at the axis break if breakPoints are specified.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.forceTickAt0 = false</td></tr></table></blockquote>This will ensure that there is always a tick mark at 0. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.forceTickAt100 = false</td></tr></table></blockquote>This will ensure that there is always a tick mark at 100. </div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInset = 0</td></tr></table></blockquote>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.minorTicks = 0</td></tr></table></blockquote>Number of ticks to add between &ldquo;major&rdquo; ticks. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alignTicks = false</td></tr></table></blockquote>true to align tick marks across opposed axes such as from the y2axis to yaxis.</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-markerRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-markerRenderer-js.html
deleted file mode 100644
index 304fc362..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-markerRenderer-js.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.MarkerRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.MarkerRenderer"></a>$.jqplot.<wbr>MarkerRenderer</div><div class=CBody><p>The default jqPlot marker renderer, rendering the points on the line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.MarkerRenderer" >$.jqplot.<wbr>MarkerRenderer</a></td><td class=SDescription>The default jqPlot marker renderer, rendering the points on the line.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.show" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">show</a></td><td class=SDescription>wether or not to show the marker.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.style" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">style</a></td><td class=SDescription>One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.lineWidth" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">lineWidth</a></td><td class=SDescription>size of the line for non-filled markers.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.size" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">size</a></td><td class=SDescription>Size of the marker (diameter or circle, length of edge of square, etc.)</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.color" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">color</a></td><td class=SDescription>color of marker. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadow" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">shadow</a></td><td class=SDescription>wether or not to draw a shadow on the line</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadowAngle" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">shadowAngle</a></td><td class=SDescription>Shadow angle in degrees</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadowOffset" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">shadowOffset</a></td><td class=SDescription>Shadow offset from line in pixels</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadowDepth" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">shadowDepth</a></td><td class=SDescription>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadowAlpha" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">shadowAlpha</a></td><td class=SDescription>Alpha channel transparency of shadow. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shadowRenderer" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">shadowRenderer</a></td><td class=SDescription>Renderer that will draws the shadows on the marker.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MarkerRenderer.shapeRenderer" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">shapeRenderer</a></td><td class=SDescription>Renderer that will draw the marker.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the marker.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.style"></a>style</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'filledCircle'</td></tr></table></blockquote><p>One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote><p>size of the line for non-filled markers.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.size"></a>size</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 9.0</td></tr></table></blockquote><p>Size of the marker (diameter or circle, length of edge of square, etc.)</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.color"></a>color</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote><p>color of marker.&nbsp; Will be set to color of series by default on init.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadow"></a>shadow</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote><p>wether or not to draw a shadow on the line</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadowAngle"></a>shadowAngle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote><p>Shadow angle in degrees</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1</td></tr></table></blockquote><p>Shadow offset from line in pixels</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote><p>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote><p>Alpha channel transparency of shadow.&nbsp; 0 = transparent.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shadowRenderer"></a>shadowRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowRenderer = new $.jqplot.ShadowRenderer()</td></tr></table></blockquote><p>Renderer that will draws the shadows on the marker.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MarkerRenderer.shapeRenderer"></a>shapeRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shapeRenderer = new $.jqplot.ShapeRenderer()</td></tr></table></blockquote><p>Renderer that will draw the marker.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Marker Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the marker.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'filledCircle'</td></tr></table></blockquote>One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>size of the line for non-filled markers.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 9.0</td></tr></table></blockquote>Size of the marker (diameter or circle, length of edge of square, etc.)</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>color of marker. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether or not to draw a shadow on the line</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowRenderer = new $.jqplot.ShadowRenderer()</td></tr></table></blockquote>Renderer that will draws the shadows on the marker.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shapeRenderer = new $.jqplot.ShapeRenderer()</td></tr></table></blockquote>Renderer that will draw the marker.</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shadowRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shadowRenderer-js.html
deleted file mode 100644
index 7d5fb69d..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shadowRenderer-js.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.shadowRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.shadowRenderer"></a>$.jqplot.<wbr>shadowRenderer</div><div class=CBody><p>The default jqPlot shadow renderer, rendering shadows behind shapes.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.shadowRenderer" >$.jqplot.<wbr>shadowRenderer</a></td><td class=SDescription>The default jqPlot shadow renderer, rendering shadows behind shapes.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.shadowRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shadowRenderer.angle" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">angle</a></td><td class=SDescription>Angle of the shadow in degrees. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shadowRenderer.offset" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">offset</a></td><td class=SDescription>Pixel offset at the given shadow angle of each shadow stroke from the last stroke.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shadowRenderer.alpha" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">alpha</a></td><td class=SDescription>alpha transparency of shadow stroke.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shadowRenderer.lineWidth" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">lineWidth</a></td><td class=SDescription>width of the shadow line stroke.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shadowRenderer.lineJoin" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">lineJoin</a></td><td class=SDescription>How line segments of the shadow are joined.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shadowRenderer.lineCap" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">lineCap</a></td><td class=SDescription>how ends of the shadow line are rendered.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shadowRenderer.fill" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">fill</a></td><td class=SDescription>whether to fill the shape.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shadowRenderer.depth" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">depth</a></td><td class=SDescription>how many times the shadow is stroked. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shadowRenderer.isarc" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">isarc</a></td><td class=SDescription>wether the shadow is an arc or not.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.shadowRenderer.draw" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">draw</a></td><td class=SDescription>draws an transparent black (i.e. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.angle"></a>angle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 45</td></tr></table></blockquote><p>Angle of the shadow in degrees.&nbsp; Measured counter-clockwise from the x axis.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.offset"></a>offset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offset = 1</td></tr></table></blockquote><p>Pixel offset at the given shadow angle of each shadow stroke from the last stroke.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.alpha"></a>alpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alpha = 0.07</td></tr></table></blockquote><p>alpha transparency of shadow stroke.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote><p>width of the shadow line stroke.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.lineJoin"></a>lineJoin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote><p>How line segments of the shadow are joined.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.lineCap"></a>lineCap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote><p>how ends of the shadow line are rendered.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote><p>whether to fill the shape.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.depth"></a>depth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.depth = 3</td></tr></table></blockquote><p>how many times the shadow is stroked.&nbsp; Each stroke will be offset by offset at angle degrees.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.isarc"></a>isarc</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote><p>wether the shadow is an arc or not.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shadowRenderer.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShadowRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>draws an transparent black (i.e. gray) shadow.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>ctx</td><td class=CDLDescription>canvas drawing context</td></tr><tr><td class=CDLEntry>points</td><td class=CDLDescription>array of points or [x, y, radius, start angle (rad), end angle (rad)]</td></tr></table></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Shadow Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 45</td></tr></table></blockquote>Angle of the shadow in degrees. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offset = 1</td></tr></table></blockquote>Pixel offset at the given shadow angle of each shadow stroke from the last stroke.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alpha = 0.07</td></tr></table></blockquote>alpha transparency of shadow stroke.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>width of the shadow line stroke.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.depth = 3</td></tr></table></blockquote>how many times the shadow is stroked. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShadowRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws an transparent black (i.e. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shapeRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shapeRenderer-js.html
deleted file mode 100644
index a063dea9..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-shapeRenderer-js.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.shapeRenderer</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.shapeRenderer"></a>$.jqplot.<wbr>shapeRenderer</div><div class=CBody><p>The default jqPlot shape renderer.&nbsp; Given a set of points will plot them and either stroke a line (fill = false) or fill them (fill = true).&nbsp; If a filled shape is desired, closePath = true must also be set to close the shape.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.shapeRenderer" >$.jqplot.<wbr>shapeRenderer</a></td><td class=SDescription>The default jqPlot shape renderer. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.shapeRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.linePattern" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">linePattern</a></td><td class=SDescription>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shapeRenderer.lineJoin" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">lineJoin</a></td><td class=SDescription>How line segments of the shadow are joined.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.lineCap" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">lineCap</a></td><td class=SDescription>how ends of the shadow line are rendered.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shapeRenderer.fill" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">fill</a></td><td class=SDescription>whether to fill the shape.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.isarc" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">isarc</a></td><td class=SDescription>wether the shadow is an arc or not.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shapeRenderer.fillRect" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">fillRect</a></td><td class=SDescription>true to draw shape as a filled rectangle.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.strokeRect" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">strokeRect</a></td><td class=SDescription>true to draw shape as a stroked rectangle.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shapeRenderer.clearRect" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">clearRect</a></td><td class=SDescription>true to cear a rectangle.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.strokeStyle" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">strokeStyle</a></td><td class=SDescription>css color spec for the stoke style</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.shapeRenderer.fillStyle" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">fillStyle</a></td><td class=SDescription>css color spec for the fill style.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.shapeRenderer.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.shapeRenderer.draw" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">draw</a></td><td class=SDescription>draws the shape.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.linePattern"></a>linePattern</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.linePattern = 'solid'</td></tr></table></blockquote><p>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo; characters such as &lsquo;.-.&rsquo; 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.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.lineJoin"></a>lineJoin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote><p>How line segments of the shadow are joined.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.lineCap"></a>lineCap</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote><p>how ends of the shadow line are rendered.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote><p>whether to fill the shape.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.isarc"></a>isarc</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote><p>wether the shadow is an arc or not.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.fillRect"></a>fillRect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillRect = false</td></tr></table></blockquote><p>true to draw shape as a filled rectangle.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.strokeRect"></a>strokeRect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeRect = false</td></tr></table></blockquote><p>true to draw shape as a stroked rectangle.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.clearRect"></a>clearRect</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clearRect = false</td></tr></table></blockquote><p>true to cear a rectangle.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.strokeStyle"></a>strokeStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeStyle = '#999999'</td></tr></table></blockquote><p>css color spec for the stoke style</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.fillStyle"></a>fillStyle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillStyle = '#999999'</td></tr></table></blockquote><p>css color spec for the fill style.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.shapeRenderer.draw"></a>draw</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShapeRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>draws the shape.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>ctx</td><td class=CDLDescription>canvas drawing context</td></tr><tr><td class=CDLEntry>points</td><td class=CDLDescription>array 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.</td></tr></table></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Shape Renderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.linePattern = 'solid'</td></tr></table></blockquote>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillRect = false</td></tr></table></blockquote>true to draw shape as a filled rectangle.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeRect = false</td></tr></table></blockquote>true to draw shape as a stroked rectangle.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clearRect = false</td></tr></table></blockquote>true to cear a rectangle.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeStyle = '#999999'</td></tr></table></blockquote>css color spec for the stoke style</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillStyle = '#999999'</td></tr></table></blockquote>css color spec for the fill style.</div></div><div class=CToolTip id="tt11"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShapeRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws the shape.</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-themeEngine-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-themeEngine-js.html
deleted file mode 100644
index 54fb438f..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-themeEngine-js.html
+++ /dev/null
@@ -1,191 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.ThemeEngine</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.ThemeEngine"></a>$.jqplot.<wbr>ThemeEngine</div><div class=CBody><p>Theme Engine provides a programatic way to change some of the more common jqplot styling options such as fonts, colors and grid options.&nbsp; A theme engine instance is created with each plot.&nbsp; The theme engine manages a collection of themes which can be modified, added to, or applied to the plot.</p><p>The themeEngine class is not instantiated directly.&nbsp; When a plot is initialized, the current plot options are scanned an a default theme named &ldquo;Default&rdquo; is created.&nbsp; This theme is used as the basis for other themes added to the theme engine and is always available.</p><p>A theme is a simple javascript object with styling parameters for various entities of the plot.&nbsp; A theme has the form:</p><blockquote><pre>{
- _name:f &quot;Default&quot;,
- target: {
- backgroundColor: &quot;transparent&quot;
- },
- legend: {
- textColor: null,
- fontFamily: null,
- fontSize: null,
- border: null,
- background: null
- },
- title: {
- textColor: &quot;rgb(102, 102, 102)&quot;,
- fontFamily: &quot;'Trebuchet MS',Arial,Helvetica,sans-serif&quot;,
- fontSize: &quot;19.2px&quot;,
- textAlign: &quot;center&quot;
- },
- seriesStyles: {},
- series: [{
- color: &quot;#4bb2c5&quot;,
- lineWidth: 2.5,
- linePattern: &quot;solid&quot;,
- shadow: true,
- fillColor: &quot;#4bb2c5&quot;,
- showMarker: true,
- markerOptions: {
- color: &quot;#4bb2c5&quot;,
- show: true,
- style: 'filledCircle',
- lineWidth: 1.5,
- size: 4,
- shadow: true
- }
- }],
- grid: {
- drawGridlines: true,
- gridLineColor: &quot;#cccccc&quot;,
- gridLineWidth: 1,
- backgroundColor: &quot;#fffdf6&quot;,
- borderColor: &quot;#999999&quot;,
- borderWidth: 2,
- shadow: true
- },
- axesStyles: {
- label: {},
- ticks: {}
- },
- axes: {
- xaxis: {
- borderColor: &quot;#999999&quot;,
- borderWidth: 2,
- ticks: {
- show: true,
- showGridline: true,
- showLabel: true,
- showMark: true,
- size: 4,
- textColor: &quot;&quot;,
- whiteSpace: &quot;nowrap&quot;,
- fontSize: &quot;12px&quot;,
- fontFamily: &quot;'Trebuchet MS',Arial,Helvetica,sans-serif&quot;
- },
- label: {
- textColor: &quot;rgb(102, 102, 102)&quot;,
- whiteSpace: &quot;normal&quot;,
- fontSize: &quot;14.6667px&quot;,
- fontFamily: &quot;'Trebuchet MS',Arial,Helvetica,sans-serif&quot;,
- fontWeight: &quot;400&quot;
- }
- },
- yaxis: {
- borderColor: &quot;#999999&quot;,
- borderWidth: 2,
- ticks: {
- show: true,
- showGridline: true,
- showLabel: true,
- showMark: true,
- size: 4,
- textColor: &quot;&quot;,
- whiteSpace: &quot;nowrap&quot;,
- fontSize: &quot;12px&quot;,
- fontFamily: &quot;'Trebuchet MS',Arial,Helvetica,sans-serif&quot;
- },
- label: {
- textColor: null,
- whiteSpace: null,
- fontSize: null,
- fontFamily: null,
- fontWeight: null
- }
- },
- x2axis: {...
- },
- ...
- y9axis: {...
- }
- }
-}</pre></blockquote><p>&rdquo;seriesStyles&rdquo; is a style object that will be applied to all series in the plot.&nbsp; It will forcibly override any styles applied on the individual series.&nbsp; &ldquo;axesStyles&rdquo; is a style object that will be applied to all axes in the plot.&nbsp; It will also forcibly override any styles on the individual axes.</p><p>The example shown above has series options for a line series.&nbsp; Options for other series types are shown below:</p><h4 class=CHeading>Bar Series</h4><blockquote><pre>{
- color: &quot;#4bb2c5&quot;,
- seriesColors: [&quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;],
- lineWidth: 2.5,
- shadow: true,
- barPadding: 2,
- barMargin: 10,
- barWidth: 15.09375,
- highlightColors: [&quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;, &quot;rgb(129,201,214)&quot;]
-}</pre></blockquote><h4 class=CHeading>Pie Series</h4><blockquote><pre>{
- seriesColors: [&quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;],
- padding: 20,
- sliceMargin: 0,
- fill: true,
- shadow: true,
- startAngle: 0,
- lineWidth: 2.5,
- highlightColors: [&quot;rgb(129,201,214)&quot;, &quot;rgb(240,189,104)&quot;, &quot;rgb(214,202,165)&quot;, &quot;rgb(137,180,158)&quot;, &quot;rgb(168,180,137)&quot;, &quot;rgb(180,174,89)&quot;, &quot;rgb(180,113,161)&quot;, &quot;rgb(129,141,236)&quot;, &quot;rgb(227,205,120)&quot;, &quot;rgb(255,138,76)&quot;, &quot;rgb(76,169,219)&quot;, &quot;rgb(215,126,190)&quot;, &quot;rgb(220,232,135)&quot;, &quot;rgb(200,167,96)&quot;, &quot;rgb(103,202,235)&quot;, &quot;rgb(208,154,215)&quot;]
-}</pre></blockquote><h4 class=CHeading>Funnel Series</h4><blockquote><pre>{
- color: &quot;#4bb2c5&quot;,
- lineWidth: 2,
- shadow: true,
- padding: {
- top: 20,
- right: 20,
- bottom: 20,
- left: 20
- },
- sectionMargin: 6,
- seriesColors: [&quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;],
- highlightColors: [&quot;rgb(147,208,220)&quot;, &quot;rgb(242,199,126)&quot;, &quot;rgb(220,210,178)&quot;, &quot;rgb(154,191,172)&quot;, &quot;rgb(180,191,154)&quot;, &quot;rgb(191,186,112)&quot;, &quot;rgb(191,133,174)&quot;, &quot;rgb(147,157,238)&quot;, &quot;rgb(231,212,139)&quot;, &quot;rgb(255,154,102)&quot;, &quot;rgb(102,181,224)&quot;, &quot;rgb(221,144,199)&quot;, &quot;rgb(225,235,152)&quot;, &quot;rgb(200,167,96)&quot;, &quot;rgb(124,210,238)&quot;, &quot;rgb(215,169,221)&quot;]
-}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.ThemeEngine" >$.jqplot.<wbr>ThemeEngine</a></td><td class=SDescription>Theme Engine provides a programatic way to change some of the more common jqplot styling options such as fonts, colors and grid options. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.ThemeEngine.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.ThemeEngine.themes" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">themes</a></td><td class=SDescription>hash of themes managed by the theme engine. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.ThemeEngine.activeTheme" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">activeTheme</a></td><td class=SDescription>Pointer to currently active theme</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.ThemeEngine.methods" >methods</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.ThemeEngine.get" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">get</a></td><td class=SDescription>Get and return the named theme or the active theme if no name given.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.ThemeEngine.getThemeNames" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">getThemeNames</a></td><td class=SDescription>Return the list of theme names in this manager in alpha-numerical order.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.ThemeEngine.getThemes" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">getThemes</a></td><td class=SDescription>Return a list of themes in alpha-numerical order by name.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.ThemeEngine.remove" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">remove</a></td><td class=SDescription>Remove the given theme from the themeEngine.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.ThemeEngine.newTheme" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">newTheme</a></td><td class=SDescription>Create a new theme based on the default theme, adding it the themeEngine.</td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.ThemeEngine.rename" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">rename</a></td><td class=SDescription>Rename a theme.</td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.ThemeEngine.copy" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">copy</a></td><td class=SDescription>Create a copy of an existing theme in the themeEngine, adding it the themeEngine.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.themes"></a>themes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.themes = {}</td></tr></table></blockquote><p>hash of themes managed by the theme engine.&nbsp; Indexed by theme name.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.activeTheme"></a>activeTheme</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.activeTheme=null</td></tr></table></blockquote><p>Pointer to currently active theme</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.methods"></a>methods</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.get"></a>get</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.get = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Get and return the named theme or the active theme if no name given.</p><h4 class=CHeading>parameter</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>name of theme to get.</td></tr></table><h4 class=CHeading>returns</h4><p>Theme instance of given name.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.getThemeNames"></a>getThemeNames</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemeNames = function()</td></tr></table></blockquote><p>Return the list of theme names in this manager in alpha-numerical order.</p><h4 class=CHeading>parameter</h4><p>None</p><h4 class=CHeading>returns</h4><p>A the list of theme names in this manager in alpha-numerical order.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.getThemes"></a>getThemes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemes = function()</td></tr></table></blockquote><p>Return a list of themes in alpha-numerical order by name.</p><h4 class=CHeading>parameter</h4><p>None</p><h4 class=CHeading>returns</h4><p>A list of themes in alpha-numerical order by name.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.remove"></a>remove</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.remove = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Remove the given theme from the themeEngine.</p><h4 class=CHeading>parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>name of the theme to remove.</td></tr></table><h4 class=CHeading>returns</h4><p>true on success, false on failure.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.newTheme"></a>newTheme</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.newTheme = function(</td><td class=PParameter nowrap>name,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a new theme based on the default theme, adding it the themeEngine.</p><h4 class=CHeading>parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>name</td><td class=CDLDescription>name of the new theme.</td></tr><tr><td class=CDLEntry>obj</td><td class=CDLDescription>optional object of styles to be applied to this new theme.</td></tr></table><h4 class=CHeading>returns</h4><p>new Theme object.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.rename"></a>rename</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.rename = function (</td><td class=PParameter nowrap>oldName,</td></tr><tr><td></td><td class=PParameter nowrap>newName</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Rename a theme.</p><h4 class=CHeading>parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>oldName</td><td class=CDLDescription>current name of the theme.</td></tr><tr><td class=CDLEntry>newName</td><td class=CDLDescription>desired name of the theme.</td></tr></table><h4 class=CHeading>returns</h4><p>new Theme object.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.ThemeEngine.copy"></a>copy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.copy = function (</td><td class=PParameter nowrap>sourceName,</td></tr><tr><td></td><td class=PParameter nowrap>targetName,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Create a copy of an existing theme in the themeEngine, adding it the themeEngine.</p><h4 class=CHeading>parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>sourceName</td><td class=CDLDescription>name of the existing theme.</td></tr><tr><td class=CDLEntry>targetName</td><td class=CDLDescription>name of the copy.</td></tr><tr><td class=CDLEntry>obj</td><td class=CDLDescription>optional object of style parameter to apply to the new theme.</td></tr></table><h4 class=CHeading>returns</h4><p>new Theme object.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>Theme Engine</div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.themes = {}</td></tr></table></blockquote>hash of themes managed by the theme engine. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.activeTheme=null</td></tr></table></blockquote>Pointer to currently active theme</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.get = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Get and return the named theme or the active theme if no name given.</div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemeNames = function()</td></tr></table></blockquote>Return the list of theme names in this manager in alpha-numerical order.</div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemes = function()</td></tr></table></blockquote>Return a list of themes in alpha-numerical order by name.</div></div><div class=CToolTip id="tt6"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.remove = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Remove the given theme from the themeEngine.</div></div><div class=CToolTip id="tt7"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.newTheme = function(</td><td class=PParameter nowrap>name,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a new theme based on the default theme, adding it the themeEngine.</div></div><div class=CToolTip id="tt8"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.rename = function (</td><td class=PParameter nowrap>oldName,</td></tr><tr><td></td><td class=PParameter nowrap>newName</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Rename a theme.</div></div><div class=CToolTip id="tt9"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.copy = function (</td><td class=PParameter nowrap>sourceName,</td></tr><tr><td></td><td class=PParameter nowrap>targetName,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a copy of an existing theme in the themeEngine, adding it the themeEngine.</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-toImage-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-toImage-js.html
deleted file mode 100644
index 5a3896cd..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/jqplot-toImage-js.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.fn</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.fn"></a>$.fn</div><div class=CBody><p>jQuery namespace to attach functions to jQuery elements.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile id=MSelected>fn</div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([2, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/optionsTutorial-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/optionsTutorial-txt.html
deleted file mode 100644
index d38cd3d9..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/optionsTutorial-txt.html
+++ /dev/null
@@ -1,120 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Options Tutorial</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="Options_Tutorial"></a>Options Tutorial</div><div class=CBody><p>This document will help you understand how jqPlot&rsquo;s options relate to the API documentation and the jqPlot object itself.&nbsp; For a listing of options available to jqPlot, see <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">jqPlot Options</a> in the jqPlotOptions.txt file.</p><p>The key to effectively using jqPlot is understanding jqPlot&rsquo;s options.&nbsp; The online documentation is API documentation.&nbsp; While it explains what attributes and methods various objects posses, it doesn&rsquo;t explain how to use or set those attributes through options.&nbsp; This tutorial will help explain that.</p><p>Lets assume you are creating a plot like this:</p><blockquote><pre>chart = $.jqplot('chart', dataSeries, optionsObj);</pre></blockquote><p>First, note that you shouldn&rsquo;t try to directly set attributes on the &ldquo;chart&rdquo; object (like chart.grid.shadow) after your call to $.jqplot().&nbsp; At best this won&rsquo;t do anything **(see below).&nbsp; You should pass options in via the &ldquo;optionsObj&rdquo;.</p><p>the optionsObj really represents the plot object (jqPlot object, not to be confused with the $.jqplot function which will create a jqPlot object).&nbsp; Attributes you specify on that object will be merged with attributes in the jqPlot object.&nbsp; The axes, legend, series, etc. are attributes on the jqPlot object.&nbsp; The jqPlot/optionsObj object looks something like (only some attributes shown):</p><blockquote><pre>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</pre></blockquote><p>The optionsObj should follow the same construction as if it were a jqPlot object (with some exceptions/shortcuts I&rsquo;ll mention in a moment).&nbsp; So generally, when you see something like &ldquo;this.drawGridLines&rdquo; in the grid properties in the docs, just replace &ldquo;this&rdquo; with &ldquo;grid&rdquo; in your options object.&nbsp; So it becomes optionsObj.grid.drawGridLines.&nbsp; Do likewise with the other objects in the plot, replacing &ldquo;this&rdquo;, with the respective attribute on the plot like &ldquo;legend&rdquo; or &ldquo;title&rdquo;.&nbsp; Series and Axes are handled a little different, because series is an array and axes has 4 distinct children &ldquo;xaxis&rdquo;, &ldquo;yaxis&rdquo;, &ldquo;x2axis&rdquo; and &ldquo;y2axis&rdquo;.</p><p>So, to remove the shadow from the grid and change the grid border size you would do:</p><blockquote><pre>optionObj = {grid:{shadow:false, borderWidth:9.0}};</pre></blockquote><p>To do the same as above but also make all the text in the plot red you would do:</p><blockquote><pre>optionObj = {
- textColor:&quot;#ff0000&quot;,
- grid:{shadow:false, borderWidth:9.0}
-}</pre></blockquote><p>Here is a more deeply nested example.&nbsp; Say you want to specify a min and max on your y axis and use a specific color for your second series.&nbsp; That would look like:</p><blockquote><pre>optionsObj = {
- axes:{yaxis:{min:5, max:230}},
- series:[{},{color:&quot;#33ff66&quot;}]
-}</pre></blockquote><p>Note that series options are an array in order of the series data you sent in to your plot.&nbsp; To get to the second series, you have to put an object (even if empty) in place of the first series.</p><p>There is a handy shortcut to assign options to all axes or all series at one go.&nbsp; Use axesDefaults and seriesDefaults.&nbsp; 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:</p><blockquote><pre>optionsObj = {axesDefaults:{min:0}, seriesDefaults:{showMarker:false}}</pre></blockquote><p>Another shortcut is for the plot title.&nbsp; Normally, you would assign options to the title as an object.&nbsp; If you specify a title option as a string, it will assign that to the title.text property automatically.&nbsp; So these two are equivalent:</p><blockquote><pre>optionsObj = {title:{text:&quot;My Plot&quot;}}</pre></blockquote><p>and</p><blockquote><pre>optionsObj = {title:&quot;My Plot&quot;}</pre></blockquote><p>Where things need more explaination is with renderers, plugins and their options.&nbsp; Briefly, what&rsquo;s renderer, what&rsquo;s a plugin.</p><p>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.&nbsp; A plugin does more than just provide drawing functionality to an object.&nbsp; It will do more like calculate a trend line, change the cursor, provide event driven functionality, etc.&nbsp; I consider renderers plugins, but plugins don&rsquo;t have to be renderers.</p><p>So, how do you use renderers, plugins, and specify their options?&nbsp; Some common renderes are for bar charts and category axes.&nbsp; 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:</p><blockquote><pre>optionsObj = {
- seriesDefaults:{renderer:$.jqplot.BarRenderer},
- axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}
-}</pre></blockquote><p>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.</p><p>Now, how would I assign options to those renderers?&nbsp; The renderer&rsquo;s attributes may not be present in the pre-existing jqPlot object, they may be specific to the renderer.&nbsp; This is done through the &ldquo;rendererOptions&rdquo; option on the appropriate object.&nbsp; So, if I wanted my bars to be 25 pixels wide, I would do:</p><blockquote><pre>optionsObj = {
- seriesDefaults:{
- renderer:$.jqplot.BarRenderer},
- rendererOptions:{
- barWidth:25
- },
- axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}
-}</pre></blockquote><p>Again, this is using the &ldquo;seriesDefaults&rdquo; option, which will apply options to all series in the plot.&nbsp; You could do the same on any particular series in the plot through the &ldquo;series&rdquo; options array.</p><p>Plugins are free to add their own options.&nbsp; For example, the highlighter plugin has it&rsquo;s own set of options that are unique to it.&nbsp; As a result, it responds to options placed in the &ldquo;highlighter&rdquo; attribute of your options object.&nbsp; So, if I wanted to change the highlighter tooltip to fade in and out slowly and be positioned directly above the point I&rsquo;m highlighting:</p><blockquote><pre>optionsObj = {
- highlighter:{tooltipFadeSpeed:'slow', tooltipLocation:'n'}
-}</pre></blockquote><p>Other plugins, like dragable and trendlines, add their options in with the series.&nbsp; This is because both of those plugins can have different options for different series in the plot.&nbsp; 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:</p><blockquote><pre>series:[{
- dragable: {
- color: '#ff3366',
- constrainTo: 'x'
- },
- trendline: {
- color: '#cccccc'
- }
-}]</pre></blockquote><p>This would apply those options to the first series only.&nbsp; If you had 2 series and wanted to turn off dragging and trend lines on the second series, you could do:</p><blockquote><pre>series:[{
- dragable: {
- color: '#ff3366',
- constrainTo: 'x'
- },
- trendline: {
- color: '#cccccc'
- }
-}, {
- isDragable: false,
- trendline:{
- show: false
- }
-}]</pre></blockquote><p>Note, series dragability is turned off with the &ldquo;isDragable&rdquo; option directly on the series itself, not with a suboption of &ldquo;dragable&rdquo;.&nbsp; This may be improved in the future.</p><p>I hope this is helpful.&nbsp; A few key points to remember:</p><ul><li>When you see &ldquo;this&rdquo; in the api docs, you generally replace it with the name of the object (in lowercase) you are looking at in your options object.</li><li>seriesDefaults and axesDefaults are convenient shortcuts.</li><li>to assign options to a renderer, generally use the &ldquo;rendererOptions&rdquo;</li><li>plugins may add their own options attribute, like &ldquo;highlighter&rdquo; or &ldquo;cursor&rdquo;.</li></ul><p>** Note: you can set attributes after the plot is created (like plot.grid.shadow = false), but you&rsquo;ll have to issue the appropriate calls to possibly reinitialize and redraw the plot.&nbsp; 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).&nbsp; This hasn&rsquo;t been documented yet, however.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile id=MSelected>Options Tutorial</div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CSection><b>This document is out of date. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html
deleted file mode 100644
index 312db432..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-BezierCurveRenderer-js.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.BezierCurveRenderer.js</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.BezierCurveRenderer.js"></a>$.jqplot.<wbr>BezierCurveRenderer.js</div><div class=CBody><p>Renderer which draws lines as stacked bezier curves.&nbsp; 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]].</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.BezierCurveRenderer.js" >$.jqplot.<wbr>BezierCurveRenderer.js</a></td><td class=SDescription>Renderer which draws lines as stacked bezier curves. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.BezierCurveRenderer.js.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BezierCurveRenderer.js.setGridData" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">setGridData</a></td><td class=SDescription>converts the user data values to grid coordinates and stores them in the gridData array. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.BezierCurveRenderer.js.makeGridData" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">makeGridData</a></td><td class=SDescription>converts any arbitrary data values to grid coordinates and returns them. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BezierCurveRenderer.js.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BezierCurveRenderer.js.setGridData"></a>setGridData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>converts the user data values to grid coordinates and stores them in the gridData array.&nbsp; Called with scope of a series.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BezierCurveRenderer.js.makeGridData"></a>makeGridData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>converts any arbitrary data values to grid coordinates and returns them.&nbsp; This method exists so that plugins can use a series&rsquo; linerenderer to generate grid data points without overwriting the grid data associated with that series.&nbsp; Called with scope of a series.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>BezierCurveRenderer.js</div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-barRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-barRenderer-js.html
deleted file mode 100644
index 21560d9c..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-barRenderer-js.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.BarRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.BarRenderer"></a>$.jqplot.<wbr>BarRenderer</div><div class=CBody><p>A plugin renderer for jqPlot to draw a bar plot.&nbsp; Draws series as a line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.BarRenderer" >$.jqplot.<wbr>BarRenderer</a></td><td class=SDescription>A plugin renderer for jqPlot to draw a bar plot. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.BarRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.barPadding" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">barPadding</a></td><td class=SDescription>Number of pixels between adjacent bars at the same axis value.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.barMargin" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">barMargin</a></td><td class=SDescription>Number of pixels between groups of bars at adjacent axis values.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.barDirection" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">barDirection</a></td><td class=SDescription>&lsquo;vertical&rsquo; = up and down bars, &lsquo;horizontal&rsquo; = side to side bars</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.barWidth" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">barWidth</a></td><td class=SDescription>Width of the bar in pixels (auto by devaul). </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.shadowOffset" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">shadowOffset</a></td><td class=SDescription>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.shadowDepth" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">shadowDepth</a></td><td class=SDescription>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.shadowAlpha" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">shadowAlpha</a></td><td class=SDescription>transparency of the shadow (0 = transparent, 1 = opaque)</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.waterfall" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">waterfall</a></td><td class=SDescription>true to enable waterfall plot.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.groups" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">groups</a></td><td class=SDescription>group bars into this many groups</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.varyBarColor" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">varyBarColor</a></td><td class=SDescription>true to color each bar of a series separately rather than have every bar of a given series the same color. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.highlightMouseOver" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">highlightMouseOver</a></td><td class=SDescription>True to highlight slice when moused over. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.highlightMouseDown" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a slice. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BarRenderer.highlightColors" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">highlightColors</a></td><td class=SDescription>an array of colors to use when highlighting a bar.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BarRenderer.transposedData" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">transposedData</a></td><td class=SDescription>NOT IMPLEMENTED YET. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.barPadding"></a>barPadding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 8</td></tr></table></blockquote><p>Number of pixels between adjacent bars at the same axis value.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.barMargin"></a>barMargin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barMargin = 10</td></tr></table></blockquote><p>Number of pixels between groups of bars at adjacent axis values.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.barDirection"></a>barDirection</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barDirection = 'vertical'</td></tr></table></blockquote><p>&rsquo;vertical&rsquo; = up and down bars, &lsquo;horizontal&rsquo; = side to side bars</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.barWidth"></a>barWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barWidth = null</td></tr></table></blockquote><p>Width of the bar in pixels (auto by devaul).&nbsp; null = calculated automatically.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote><p>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote><p>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.08</td></tr></table></blockquote><p>transparency of the shadow (0 = transparent, 1 = opaque)</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.waterfall"></a>waterfall</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.waterfall = false</td></tr></table></blockquote><p>true to enable waterfall plot.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.groups"></a>groups</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.groups = 1</td></tr></table></blockquote><p>group bars into this many groups</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.varyBarColor"></a>varyBarColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBarColor = false</td></tr></table></blockquote><p>true to color each bar of a series separately rather than have every bar of a given series the same color.&nbsp; If used for non-stacked multiple series bar plots, user should specify a separate &lsquo;seriesColors&rsquo; array for each series.&nbsp; Otherwise, each series will set their bars to the same color array.&nbsp; This option has no Effect for stacked bar charts and is disabled.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight slice when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a slice.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a slice.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>an array of colors to use when highlighting a bar.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BarRenderer.transposedData"></a>transposedData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.transposedData = true</td></tr></table></blockquote><p>NOT IMPLEMENTED YET.&nbsp; True if this is a horizontal bar plot and x and y values are &ldquo;transposed&rdquo;.&nbsp; Tranposed, or &ldquo;swapped&rdquo;, data is required prior to rev.&nbsp; 894 builds of jqPlot with horizontal bars.&nbsp; Allows backward compatability of bar renderer horizontal bars with old style data sets.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>BarRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 8</td></tr></table></blockquote>Number of pixels between adjacent bars at the same axis value.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barMargin = 10</td></tr></table></blockquote>Number of pixels between groups of bars at adjacent axis values.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barDirection = 'vertical'</td></tr></table></blockquote>&lsquo;vertical&rsquo; = up and down bars, &lsquo;horizontal&rsquo; = side to side bars</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barWidth = null</td></tr></table></blockquote>Width of the bar in pixels (auto by devaul). </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.08</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.waterfall = false</td></tr></table></blockquote>true to enable waterfall plot.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.groups = 1</td></tr></table></blockquote>group bars into this many groups</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBarColor = false</td></tr></table></blockquote>true to color each bar of a series separately rather than have every bar of a given series the same color. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a bar.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.transposedData = true</td></tr></table></blockquote>NOT IMPLEMENTED YET. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html
deleted file mode 100644
index df38cb41..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-blockRenderer-js.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.BlockRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.BlockRenderer"></a>$.jqplot.<wbr>BlockRenderer</div><div class=CBody><p>Plugin renderer to draw a x-y block chart.&nbsp; A Block chart has data points displayed as colored squares with a text label inside.&nbsp; Data must be supplied in the form:</p><blockquote><pre>[[x1, y1, &quot;label 1&quot;, {css}], [x2, y2, &quot;label 2&quot;, {css}], ...]</pre></blockquote><p>The label and css object are optional.&nbsp; If the label is ommitted, the box will collapse unless a css height and/or width is specified.</p><p>The css object is an object specifying css properties such as:</p><blockquote><pre>{background:'#4f98a5', border:'3px solid gray', padding:'1px'}</pre></blockquote><p>Note that css properties specified with the data point override defaults specified with the series.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.BlockRenderer" >$.jqplot.<wbr>BlockRenderer</a></td><td class=SDescription>Plugin renderer to draw a x-y block chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.BlockRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BlockRenderer.css" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">css</a></td><td class=SDescription>default css styles that will be applied to all data blocks. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BlockRenderer.escapeHtml" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">escapeHtml</a></td><td class=SDescription>true to escape html in the box label.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BlockRenderer.insertBreaks" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">insertBreaks</a></td><td class=SDescription>true to turn spaces in data block label into html breaks &lt;br /&gt;.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BlockRenderer.varyBlockColors" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">varyBlockColors</a></td><td class=SDescription>true to vary the color of each block in this series according to the seriesColors array. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.BlockRenderer.Methods" >Methods</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BlockRenderer.moveBlock" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">moveBlock</a></td><td class=SDescription>Moves an individual block. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.css"></a>css</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}</td></tr></table></blockquote><p>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.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.escapeHtml"></a>escapeHtml</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote><p>true to escape html in the box label.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.insertBreaks"></a>insertBreaks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.insertBreaks = true</td></tr></table></blockquote><p>true to turn spaces in data block label into html breaks &lt;br /&gt;.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.varyBlockColors"></a>varyBlockColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBlockColors = false</td></tr></table></blockquote><p>true to vary the color of each block in this series according to the seriesColors array.&nbsp; False to set each block to the color specified on this series.&nbsp; This has no effect if a css background color option is specified in the renderer css options.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.Methods"></a>Methods</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BlockRenderer.moveBlock"></a>moveBlock</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveBlock = function (</td><td class=PParameter nowrap>idx,</td></tr><tr><td></td><td class=PParameter nowrap>x,</td></tr><tr><td></td><td class=PParameter nowrap>y,</td></tr><tr><td></td><td class=PParameter nowrap>duration</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Moves an individual block.&nbsp; More efficient than redrawing the whole series by calling plot.drawSeries().&nbsp; 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.&nbsp; Can be a number (higher is slower animation) or &lsquo;fast&rsquo;, &lsquo;normal&rsquo; or &lsquo;slow&rsquo;.&nbsp; If not provided, the element is moved without any animation.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>BlockRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}</td></tr></table></blockquote>default css styles that will be applied to all data blocks. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>true to escape html in the box label.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.insertBreaks = true</td></tr></table></blockquote>true to turn spaces in data block label into html breaks br /.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBlockColors = false</td></tr></table></blockquote>true to vary the color of each block in this series according to the seriesColors array. </div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveBlock = function (</td><td class=PParameter nowrap>idx,</td></tr><tr><td></td><td class=PParameter nowrap>x,</td></tr><tr><td></td><td class=PParameter nowrap>y,</td></tr><tr><td></td><td class=PParameter nowrap>duration</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Moves an individual block. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html
deleted file mode 100644
index 519071ab..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-bubbleRenderer-js.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.BubbleRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.BubbleRenderer"></a>$.jqplot.<wbr>BubbleRenderer</div><div class=CBody><p>Plugin renderer to draw a bubble chart.&nbsp; A Bubble chart has data points displayed as colored circles with an optional text label inside.&nbsp; To use the bubble renderer, you must include the bubble renderer like:</p><blockquote><pre>&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;../src/plugins/jqplot.bubbleRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Data must be supplied in the form:</p><blockquote><pre>[[x1, y1, r1, &lt;label or {label:'text', color:color}&gt;], ...]</pre></blockquote><p>where the label or options object is optional.</p><p>Note that all bubble colors will be the same unless the &ldquo;varyBubbleColors&rdquo; option is set to true.&nbsp; Colors can be specified in the data array or in the seriesColors array option on the series.&nbsp; If no colors are defined, the default jqPlot series of 16 colors are used.&nbsp; Colors are automatically cycled around again if there are more bubbles than colors.</p><p>Bubbles are autoscaled by default to fit within the chart area while maintaining relative sizes.&nbsp; If the &ldquo;autoscaleBubbles&rdquo; 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.</p><p>Properties are passed into the bubble renderer in the rendererOptions object of the series options like:</p><blockquote><pre>seriesDefaults: {
- renderer: $.jqplot.BubbleRenderer,
- rendererOptions: {
- bubbleAlpha: 0.7,
- varyBubbleColors: false
- }
-}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.BubbleRenderer" >$.jqplot.<wbr>BubbleRenderer</a></td><td class=SDescription>Plugin renderer to draw a bubble chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.varyBubbleColors" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">varyBubbleColors</a></td><td class=SDescription>True to vary the color of each bubble in this series according to the seriesColors array. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.autoscaleBubbles" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">autoscaleBubbles</a></td><td class=SDescription>True to scale the bubble radius based on plot size. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.autoscaleMultiplier" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">autoscaleMultiplier</a></td><td class=SDescription>Multiplier the bubble size if autoscaleBubbles is true.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.autoscalePointsFactor" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">autoscalePointsFactor</a></td><td class=SDescription>Factor which decreases bubble size based on how many bubbles on on the chart. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.escapeHtml" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">escapeHtml</a></td><td class=SDescription>True to escape html in bubble label text.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.highlightMouseOver" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">highlightMouseOver</a></td><td class=SDescription>True to highlight bubbles when moused over. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.highlightMouseDown" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a bubble. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.highlightColors" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">highlightColors</a></td><td class=SDescription>An array of colors to use when highlighting a slice. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.bubbleAlpha" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">bubbleAlpha</a></td><td class=SDescription>Alpha transparency to apply to all bubbles in this series.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.highlightAlpha" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">highlightAlpha</a></td><td class=SDescription>Alpha transparency to apply when highlighting bubble. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.bubbleGradients" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">bubbleGradients</a></td><td class=SDescription>True to color the bubbles with gradient fills instead of flat colors. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.BubbleRenderer.showLabels" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">showLabels</a></td><td class=SDescription>True to show labels on bubbles (if any), false to not show.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.varyBubbleColors"></a>varyBubbleColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBubbleColors = true</td></tr></table></blockquote><p>True to vary the color of each bubble in this series according to the seriesColors array.&nbsp; False to set each bubble to the color specified on this series.&nbsp; This has no effect if a css background color option is specified in the renderer css options.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.autoscaleBubbles"></a>autoscaleBubbles</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleBubbles = true</td></tr></table></blockquote><p>True to scale the bubble radius based on plot size.&nbsp; False will use the radius value as provided as a raw pixel value for bubble radius.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.autoscaleMultiplier"></a>autoscaleMultiplier</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleMultiplier = 1.0</td></tr></table></blockquote><p>Multiplier the bubble size if autoscaleBubbles is true.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.autoscalePointsFactor"></a>autoscalePointsFactor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscalePointsFactor = -0.07</td></tr></table></blockquote><p>Factor which decreases bubble size based on how many bubbles on on the chart.&nbsp; 0 means no adjustment for number of bubbles.&nbsp; Negative values will decrease size of bubbles as more bubbles are added.&nbsp; Values between 0 and -0.2 should work well.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.escapeHtml"></a>escapeHtml</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = true</td></tr></table></blockquote><p>True to escape html in bubble label text.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight bubbles when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a slice.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a bubble.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>An array of colors to use when highlighting a slice.&nbsp; Calculated automatically if not supplied.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.bubbleAlpha"></a>bubbleAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleAlpha = 1.0</td></tr></table></blockquote><p>Alpha transparency to apply to all bubbles in this series.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.highlightAlpha"></a>highlightAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightAlpha = null</td></tr></table></blockquote><p>Alpha transparency to apply when highlighting bubble.&nbsp; Set to value of bubbleAlpha by default.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.bubbleGradients"></a>bubbleGradients</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleGradients = false</td></tr></table></blockquote><p>True to color the bubbles with gradient fills instead of flat colors.&nbsp; NOT AVAILABLE IN IE due to lack of excanvas support for radial gradient fills. will be ignored in IE.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.BubbleRenderer.showLabels"></a>showLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote><p>True to show labels on bubbles (if any), false to not show.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>BubbleRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBubbleColors = true</td></tr></table></blockquote>True to vary the color of each bubble in this series according to the seriesColors array. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleBubbles = true</td></tr></table></blockquote>True to scale the bubble radius based on plot size. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleMultiplier = 1.0</td></tr></table></blockquote>Multiplier the bubble size if autoscaleBubbles is true.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscalePointsFactor = -0.07</td></tr></table></blockquote>Factor which decreases bubble size based on how many bubbles on on the chart. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = true</td></tr></table></blockquote>True to escape html in bubble label text.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight bubbles when moused over. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a bubble. </div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>An array of colors to use when highlighting a slice. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleAlpha = 1.0</td></tr></table></blockquote>Alpha transparency to apply to all bubbles in this series.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightAlpha = null</td></tr></table></blockquote>Alpha transparency to apply when highlighting bubble. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleGradients = false</td></tr></table></blockquote>True to color the bubbles with gradient fills instead of flat colors. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>True to show labels on bubbles (if any), false to not show.</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html
deleted file mode 100644
index 3c8da0cc..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisLabelRenderer-js.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.CanvasAxisLabelRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.CanvasAxisLabelRenderer"></a>$.jqplot.<wbr>CanvasAxisLabelRenderer</div><div class=CBody><p>Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text.&nbsp; This renderer uses a separate rendering engine to draw the text on the canvas.&nbsp; Two modes of rendering the text are available.&nbsp; 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.&nbsp; You do so by setting the &ldquo;enableFontSupport&rdquo; option to true.</p><p>Browsers lacking native font support will have the text drawn on the canvas using the Hershey font metrics.&nbsp; Even if the &ldquo;enableFontSupport&rdquo; option is true non-supporting browsers will still render with the Hershey font.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer" >$.jqplot.<wbr>CanvasAxisLabelRenderer</a></td><td class=SDescription>Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.angle" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">angle</a></td><td class=SDescription>angle of text, measured clockwise from x axis.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.show" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">show</a></td><td class=SDescription>wether or not to show the tick (mark and label).</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.showLabel" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">showLabel</a></td><td class=SDescription>wether or not to show the label.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.label" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">label</a></td><td class=SDescription>label for the axis.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.fontFamily" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">fontFamily</a></td><td class=SDescription>CSS spec for the font-family css attribute. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.fontSize" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">fontSize</a></td><td class=SDescription>CSS spec for font size.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.fontWeight" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">fontWeight</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.fontStretch" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">fontStretch</a></td><td class=SDescription>Multiplier to condense or expand font width. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.textColor" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">textColor</a></td><td class=SDescription>css spec for the color attribute.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.enableFontSupport" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">enableFontSupport</a></td><td class=SDescription>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisLabelRenderer.pt2px" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">pt2px</a></td><td class=SDescription>Point to pixel scaling factor, used for computing height of bounding box around a label. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.angle"></a>angle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote><p>angle of text, measured clockwise from x axis.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the tick (mark and label).</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.showLabel"></a>showLabel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote><p>wether or not to show the label.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.label"></a>label</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote><p>label for the axis.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.fontFamily"></a>fontFamily</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote><p>CSS spec for the font-family css attribute.&nbsp; Applies only to browsers supporting native font rendering in the canvas tag.&nbsp; Currently Mozilla 3.5 and Safari 4.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.fontSize"></a>fontSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '11pt'</td></tr></table></blockquote><p>CSS spec for font size.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.fontWeight"></a>fontWeight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>CSS spec for fontWeight: normal, bold, bolder, lighter or a number 100</td><td class=CDLDescription>900</td></tr></table></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.fontStretch"></a>fontStretch</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote><p>Multiplier to condense or expand font width.&nbsp; Applies only to browsers which don&rsquo;t support canvas native font rendering.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.textColor"></a>textColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote><p>css spec for the color attribute.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.enableFontSupport"></a>enableFontSupport</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote><p>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.&nbsp; If true, label will be drawn with canvas tag native support for fonts.&nbsp; If false, label will be drawn with Hershey font metrics.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisLabelRenderer.pt2px"></a>pt2px</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote><p>Point to pixel scaling factor, used for computing height of bounding box around a label.&nbsp; The labels text renderer has a default setting of 1.4, which should be suitable for most fonts.&nbsp; Leave as null to use default.&nbsp; If tops of letters appear clipped, increase this.&nbsp; If bounding box seems too big, decrease.&nbsp; 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.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>CanvasAxisLabelRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>label for the axis.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>CSS spec for the font-family css attribute. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '11pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote></div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote>Point to pixel scaling factor, used for computing height of bounding box around a label. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html
deleted file mode 100644
index bb303eea..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasAxisTickRenderer-js.html
+++ /dev/null
@@ -1,79 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.CanvasAxisTickRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.CanvasAxisTickRenderer"></a>$.jqplot.<wbr>CanvasAxisTickRenderer</div><div class=CBody><p>Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text.&nbsp; This renderer uses a separate rendering engine to draw the text on the canvas.&nbsp; Two modes of rendering the text are available.&nbsp; 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.&nbsp; You do so by setting the &ldquo;enableFontSupport&rdquo; option to true.</p><p>Browsers lacking native font support will have the text drawn on the canvas using the Hershey font metrics.&nbsp; Even if the &ldquo;enableFontSupport&rdquo; option is true non-supporting browsers will still render with the Hershey font.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer" >$.jqplot.<wbr>CanvasAxisTickRenderer</a></td><td class=SDescription>Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.mark" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">mark</a></td><td class=SDescription>tick mark on the axis. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.showMark" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">showMark</a></td><td class=SDescription>wether or not to show the mark on the axis.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.showGridline" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">showGridline</a></td><td class=SDescription>wether or not to draw the gridline on the grid at this tick.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.isMinorTick" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">isMinorTick</a></td><td class=SDescription>if this is a minor tick.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.angle" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">angle</a></td><td class=SDescription>angle of text, measured clockwise from x axis.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.markSize" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">markSize</a></td><td class=SDescription>Length of the tick marks in pixels. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.show" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">show</a></td><td class=SDescription>wether or not to show the tick (mark and label).</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.showLabel" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">showLabel</a></td><td class=SDescription>wether or not to show the label.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.labelPosition" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">labelPosition</a></td><td class=SDescription>&lsquo;auto&rsquo;, &lsquo;start&rsquo;, &lsquo;middle&rsquo; or &lsquo;end&rsquo;. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.formatter" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">formatter</a></td><td class=SDescription>A class of a formatter for the tick text. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.formatString" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">formatString</a></td><td class=SDescription>string passed to the formatter.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.prefix" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">prefix</a></td><td class=SDescription>String to prepend to the tick label. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.fontFamily" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">fontFamily</a></td><td class=SDescription>css spec for the font-family css attribute.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.fontSize" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">fontSize</a></td><td class=SDescription>CSS spec for font size.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.fontWeight" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">fontWeight</a></td><td class=SDescription>CSS spec for fontWeight</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.fontStretch" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">fontStretch</a></td><td class=SDescription>Multiplier to condense or expand font width. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.textColor" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">textColor</a></td><td class=SDescription>css spec for the color attribute.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.enableFontSupport" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">enableFontSupport</a></td><td class=SDescription>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasAxisTickRenderer.pt2px" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">pt2px</a></td><td class=SDescription>Point to pixel scaling factor, used for computing height of bounding box around a label. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.mark"></a>mark</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote><p>tick mark on the axis.&nbsp; One of &lsquo;inside&rsquo;, &lsquo;outside&rsquo;, &lsquo;cross&rsquo;, &lsquo;&rsquo; or null.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.showMark"></a>showMark</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote><p>wether or not to show the mark on the axis.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.showGridline"></a>showGridline</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote><p>wether or not to draw the gridline on the grid at this tick.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.isMinorTick"></a>isMinorTick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote><p>if this is a minor tick.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.angle"></a>angle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote><p>angle of text, measured clockwise from x axis.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.markSize"></a>markSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 4</td></tr></table></blockquote><p>Length of the tick marks in pixels.&nbsp; For &lsquo;cross&rsquo; style, length will be stoked above and below axis, so total length will be twice this.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote><p>wether or not to show the tick (mark and label).</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.showLabel"></a>showLabel</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote><p>wether or not to show the label.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.labelPosition"></a>labelPosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'auto'</td></tr></table></blockquote><p>&rsquo;auto&rsquo;, &lsquo;start&rsquo;, &lsquo;middle&rsquo; or &lsquo;end&rsquo;.&nbsp; Whether tick label should be positioned so the start, middle, or end of the tick mark.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.formatter"></a>formatter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote><p>A class of a formatter for the tick text.&nbsp; The default $.jqplot.DefaultTickFormatter uses sprintf.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.formatString"></a>formatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote><p>string passed to the formatter.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.prefix"></a>prefix</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote><p>String to prepend to the tick label.&nbsp; Prefix is prepended to the formatted tick label.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.fontFamily"></a>fontFamily</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote><p>css spec for the font-family css attribute.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.fontSize"></a>fontSize</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '10pt'</td></tr></table></blockquote><p>CSS spec for font size.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.fontWeight"></a>fontWeight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote><p>CSS spec for fontWeight</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.fontStretch"></a>fontStretch</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote><p>Multiplier to condense or expand font width.&nbsp; Applies only to browsers which don&rsquo;t support canvas native font rendering.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.textColor"></a>textColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote><p>css spec for the color attribute.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.enableFontSupport"></a>enableFontSupport</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote><p>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+.&nbsp; If true, tick label will be drawn with canvas tag native support for fonts.&nbsp; If false, tick label will be drawn with Hershey font metrics.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasAxisTickRenderer.pt2px"></a>pt2px</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote><p>Point to pixel scaling factor, used for computing height of bounding box around a label.&nbsp; The labels text renderer has a default setting of 1.4, which should be suitable for most fonts.&nbsp; Leave as null to use default.&nbsp; If tops of letters appear clipped, increase this.&nbsp; If bounding box seems too big, decrease.&nbsp; 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.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>CanvasAxisTickRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote>tick mark on the axis. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 4</td></tr></table></blockquote>Length of the tick marks in pixels. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'auto'</td></tr></table></blockquote>&lsquo;auto&rsquo;, &lsquo;start&rsquo;, &lsquo;middle&rsquo; or &lsquo;end&rsquo;. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote>String to prepend to the tick label. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '10pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote>CSS spec for fontWeight</div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote>Point to pixel scaling factor, used for computing height of bounding box around a label. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasOverlay-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasOverlay-js.html
deleted file mode 100644
index d5998a1c..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-canvasOverlay-js.html
+++ /dev/null
@@ -1,113 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.CanvasOverlay</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.CanvasOverlay"></a>$.jqplot.<wbr>CanvasOverlay</div><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.CanvasOverlay" >$.jqplot.<wbr>CanvasOverlay</a></td><td class=SDescription></td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.objects" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">objects</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.name" >name</a></td><td class=SDescription>Optional name for the overlay object. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.show" >show</a></td><td class=SDescription>true to show (draw), false to not draw.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.lineWidth" >lineWidth</a></td><td class=SDescription>Width of the line.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.lineCap" >lineCap</a></td><td class=SDescription>Type of ending placed on the line [&lsquo;round&rsquo;, &lsquo;butt&rsquo;, &lsquo;square&rsquo;]</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.color" >color</a></td><td class=SDescription>color of the line</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.shadow" >shadow</a></td><td class=SDescription>wether or not to draw a shadow on the line</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.shadowAngle" >shadowAngle</a></td><td class=SDescription>Shadow angle in degrees</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.shadowOffset" >shadowOffset</a></td><td class=SDescription>Shadow offset from line in pixels</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.shadowDepth" >shadowDepth</a></td><td class=SDescription>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.shadowAlpha" >shadowAlpha</a></td><td class=SDescription>Alpha channel transparency of shadow. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.xaxis" >xaxis</a></td><td class=SDescription>X axis to use for positioning/scaling the line.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.yaxis" >yaxis</a></td><td class=SDescription>Y axis to use for positioning/scaling the line.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.showTooltip" >showTooltip</a></td><td class=SDescription>Show a tooltip with data point values.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.showTooltipPrecision" >showTooltipPrecision</a></td><td class=SDescription>Controls how close to line cursor must be to show tooltip. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.tooltipLocation" >tooltipLocation</a></td><td class=SDescription>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.fadeTooltip" >fadeTooltip</a></td><td class=SDescription>true = fade in/out tooltip, flase = show/hide tooltip</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.tooltipFadeSpeed" >tooltipFadeSpeed</a></td><td class=SDescription>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.tooltipOffset" >tooltipOffset</a></td><td class=SDescription>Pixel offset of tooltip from the highlight.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CanvasOverlay.tooltipFormatString" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">tooltipFormatString</a></td><td class=SDescription>Format string passed the x and y values of the cursor on the line. </td></tr><tr class="SClass"><td class=SEntry><a href="#Line" >Line</a></td><td class=SDescription>A straight line.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#Line.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#Line.start" >start</a></td><td class=SDescription>[x, y] coordinates for the start of the line.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#Line.stop" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">stop</a></td><td class=SDescription>[x, y] coordinates for the end of the line.</td></tr><tr class="SClass"><td class=SEntry><a href="#HorizontalLine" >HorizontalLine</a></td><td class=SDescription>A straight horizontal line.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#HorizontalLine.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#HorizontalLine.y" >y</a></td><td class=SDescription>y value to position the line</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#HorizontalLine.xmin" >xmin</a></td><td class=SDescription>x value for the start of the line, null to scale to axis min.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#HorizontalLine.xmax" >xmax</a></td><td class=SDescription>x value for the end of the line, null to scale to axis max.</td></tr><tr class="SClass"><td class=SEntry><a href="#DashedHorizontalLine" >DashedHorizontalLine</a></td><td class=SDescription>A straight dashed horizontal line.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#DashedHorizontalLine.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#DashedHorizontalLine.dashPattern" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">dashPattern</a></td><td class=SDescription>Array of line, space settings in pixels. </td></tr><tr class="SClass"><td class=SEntry><a href="#VerticalLine" >VerticalLine</a></td><td class=SDescription>A straight vertical line.</td></tr><tr class="SClass"><td class=SEntry><a href="#DashedVerticalLine" >DashedVerticalLine</a></td><td class=SDescription>A straight dashed vertical line.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#DashedVerticalLine.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#DashedVerticalLine.dashPattern" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">dashPattern</a></td><td class=SDescription>Array of line, space settings in pixels. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.objects"></a>objects</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.objects = []</td></tr></table></blockquote></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.name"></a>name</h3><div class=CBody><p>Optional name for the overlay object.&nbsp; Can be later used to retrieve the object by name.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.show"></a>show</h3><div class=CBody><p>true to show (draw), false to not draw.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.lineWidth"></a>lineWidth</h3><div class=CBody><p>Width of the line.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.lineCap"></a>lineCap</h3><div class=CBody><p>Type of ending placed on the line [&lsquo;round&rsquo;, &lsquo;butt&rsquo;, &lsquo;square&rsquo;]</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.color"></a>color</h3><div class=CBody><p>color of the line</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.shadow"></a>shadow</h3><div class=CBody><p>wether or not to draw a shadow on the line</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.shadowAngle"></a>shadowAngle</h3><div class=CBody><p>Shadow angle in degrees</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.shadowOffset"></a>shadowOffset</h3><div class=CBody><p>Shadow offset from line in pixels</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.shadowDepth"></a>shadowDepth</h3><div class=CBody><p>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><p>Alpha channel transparency of shadow.&nbsp; 0 = transparent.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.xaxis"></a>xaxis</h3><div class=CBody><p>X axis to use for positioning/scaling the line.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.yaxis"></a>yaxis</h3><div class=CBody><p>Y axis to use for positioning/scaling the line.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.showTooltip"></a>showTooltip</h3><div class=CBody><p>Show a tooltip with data point values.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.showTooltipPrecision"></a>showTooltipPrecision</h3><div class=CBody><p>Controls how close to line cursor must be to show tooltip.&nbsp; Higher number = closer to line, lower number = farther from line.&nbsp; 1.0 = cursor must be over line.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.tooltipLocation"></a>tooltipLocation</h3><div class=CBody><p>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.fadeTooltip"></a>fadeTooltip</h3><div class=CBody><p>true = fade in/out tooltip, flase = show/hide tooltip</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.tooltipFadeSpeed"></a>tooltipFadeSpeed</h3><div class=CBody><p>&rsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.tooltipOffset"></a>tooltipOffset</h3><div class=CBody><p>Pixel offset of tooltip from the highlight.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CanvasOverlay.tooltipFormatString"></a>tooltipFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>tooltipFormatString: '%d, %d' }</td></tr></table></blockquote><p>Format string passed the x and y values of the cursor on the line. e.g., &lsquo;Dogs: %.2f, Cats: %d&rsquo;.</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="Line"></a>Line</h2><div class=CBody><p>A straight line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#Line.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#Line.start" >start</a></td><td class=SDescription>[x, y] coordinates for the start of the line.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#Line.stop" id=link6 onMouseOver="ShowTip(event, 'tt3', 'link6')" onMouseOut="HideTip('tt3')">stop</a></td><td class=SDescription>[x, y] coordinates for the end of the line.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Line.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Line.start"></a>start</h3><div class=CBody><p>[x, y] coordinates for the start of the line.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="Line.stop"></a>stop</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>stop: [] }</td></tr></table></blockquote><p>[x, y] coordinates for the end of the line.</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="HorizontalLine"></a>HorizontalLine</h2><div class=CBody><p>A straight horizontal line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#HorizontalLine.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#HorizontalLine.y" >y</a></td><td class=SDescription>y value to position the line</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#HorizontalLine.xmin" >xmin</a></td><td class=SDescription>x value for the start of the line, null to scale to axis min.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#HorizontalLine.xmax" >xmax</a></td><td class=SDescription>x value for the end of the line, null to scale to axis max.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="HorizontalLine.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="HorizontalLine.y"></a>y</h3><div class=CBody><p>y value to position the line</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="HorizontalLine.xmin"></a>xmin</h3><div class=CBody><p>x value for the start of the line, null to scale to axis min.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="HorizontalLine.xmax"></a>xmax</h3><div class=CBody><p>x value for the end of the line, null to scale to axis max.</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="DashedHorizontalLine"></a>DashedHorizontalLine</h2><div class=CBody><p>A straight dashed horizontal line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#DashedHorizontalLine.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#DashedHorizontalLine.dashPattern" id=link7 onMouseOver="ShowTip(event, 'tt4', 'link7')" onMouseOut="HideTip('tt4')">dashPattern</a></td><td class=SDescription>Array of line, space settings in pixels. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="DashedHorizontalLine.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="DashedHorizontalLine.dashPattern"></a>dashPattern</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>dashPattern: [8,8] }</td></tr></table></blockquote><p>Array of line, space settings in pixels.&nbsp; Default is 8 pixel of line, 8 pixel of space.&nbsp; Note, limit to a 2 element array b/c of bug with higher order arrays.</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="VerticalLine"></a>VerticalLine</h2><div class=CBody><p>A straight vertical line.</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="DashedVerticalLine"></a>DashedVerticalLine</h2><div class=CBody><p>A straight dashed vertical line.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#DashedVerticalLine.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#DashedVerticalLine.dashPattern" id=link8 onMouseOver="ShowTip(event, 'tt5', 'link8')" onMouseOut="HideTip('tt5')">dashPattern</a></td><td class=SDescription>Array of line, space settings in pixels. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="DashedVerticalLine.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="DashedVerticalLine.dashPattern"></a>dashPattern</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>dashPattern: [8,8] }</td></tr></table></blockquote><p>Array of line, space settings in pixels.&nbsp; Default is 8 pixel of line, 8 pixel of space.&nbsp; Note, limit to a 2 element array b/c of bug with higher order arrays.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>CanvasOverlay</div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.objects = []</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>tooltipFormatString: '%d, %d' }</td></tr></table></blockquote>Format string passed the x and y values of the cursor on the line. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>stop: [] }</td></tr></table></blockquote>[x, y] coordinates for the end of the line.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>dashPattern: [8,8] }</td></tr></table></blockquote>Array of line, space settings in pixels. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>dashPattern: [8,8] }</td></tr></table></blockquote>Array of line, space settings in pixels. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html
deleted file mode 100644
index 993845a7..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-categoryAxisRenderer-js.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.CategoryAxisRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.CategoryAxisRenderer"></a>$.jqplot.<wbr>CategoryAxisRenderer</div><div class=CBody><p>A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.</p><p>To use this renderer, include the plugin in your source</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src=&quot;plugins/jqplot.categoryAxisRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>and supply the appropriate options to your plot</p><blockquote><pre>{axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer}}}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.CategoryAxisRenderer" >$.jqplot.<wbr>CategoryAxisRenderer</a></td><td class=SDescription>A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.CategoryAxisRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.CategoryAxisRenderer.sortMergedLabels" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">sortMergedLabels</a></td><td class=SDescription>True to sort tick labels when labels are created by merging x axis values from multiple series. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.CategoryAxisRenderer.tickRenderer" >tickRenderer</a></td><td class=SDescription>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="../jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">$.jqplot.AxisTickRenderer</a>. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CategoryAxisRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CategoryAxisRenderer.sortMergedLabels"></a>sortMergedLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortMergedLabels = false</td></tr></table></blockquote><p>True to sort tick labels when labels are created by merging x axis values from multiple series.&nbsp; That is, say you have two series like:</p><blockquote><pre>line1 = [[2006, 4], [2008, 9], [2009, 16]];
-line2 = [[2006, 3], [2007, 7], [2008, 6]];</pre></blockquote><p>If no label array is specified, tick labels will be collected from the x values of the series.&nbsp; With sortMergedLabels set to true, tick labels will be:</p><blockquote><pre>[2006, 2007, 2008, 2009]</pre></blockquote><p>With sortMergedLabels set to false, tick labels will be:</p><blockquote><pre>[2006, 2008, 2009, 2007]</pre></blockquote><p>Note, this property is specified on the renderOptions for the axes when creating a plot:</p><blockquote><pre>axes:{xaxis:{renderer:$.jqplot.CategoryAxisRenderer, rendererOptions:{sortMergedLabels:true}}}</pre></blockquote></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.CategoryAxisRenderer.tickRenderer"></a>tickRenderer</h3><div class=CBody><p>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="../jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link3 onMouseOver="ShowTip(event, 'tt2', 'link3')" onMouseOut="HideTip('tt2')">$.jqplot.AxisTickRenderer</a>. this.tickRenderer = $.jqplot.AxisTickRenderer; this.labelRenderer = $.jqplot.AxisLabelRenderer;</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>CategoryAxisRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortMergedLabels = false</td></tr></table></blockquote>True to sort tick labels when labels are created by merging x axis values from multiple series. </div></div><div class=CToolTip id="tt2"><div class=CClass>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ciParser-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ciParser-js.html
deleted file mode 100644
index de2638ae..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ciParser-js.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.ciParser</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.ciParser"></a>$.jqplot.<wbr>ciParser</div><div class=CBody><p>Data Renderer function which converts a custom JSON data object into jqPlot data format.&nbsp; Set this as a callable on the jqplot dataRenderer plot option:</p><blockquote><pre>plot = $.jqplot('mychart', [data], { dataRenderer: $.jqplot.ciParser, ... });</pre></blockquote><p>Where data is an object in JSON format or a JSON encoded string conforming to the City Index API spec.</p><p>Note that calling the renderer function is handled internally by jqPlot.&nbsp; The user does not have to call the function.&nbsp; The parameters described below will automatically be passed to the ciParser function.</p><h4 class=CHeading>Parameters</h4><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>data</td><td class=CDLDescription>JSON encoded string or object.</td></tr><tr><td class=CDLEntry>plot</td><td class=CDLDescription>reference to jqPlot Plot object.</td></tr></table><h4 class=CHeading>Returns</h4><p>data array in jqPlot format.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>ciParser</div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-cursor-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-cursor-js.html
deleted file mode 100644
index 1bfe3285..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-cursor-js.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.Cursor</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.Cursor"></a>$.jqplot.<wbr>Cursor</div><div class=CBody><p>Plugin class representing the cursor as displayed on the plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.Cursor" >$.jqplot.<wbr>Cursor</a></td><td class=SDescription>Plugin class representing the cursor as displayed on the plot.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Cursor.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.style" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">style</a></td><td class=SDescription>CSS spec for cursor style</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.show" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">show</a></td><td class=SDescription>wether to show the cursor or not.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.showTooltip" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">showTooltip</a></td><td class=SDescription>show a cursor position tooltip. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.followMouse" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">followMouse</a></td><td class=SDescription>Tooltip follows the mouse, it is not at a fixed location. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.tooltipLocation" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">tooltipLocation</a></td><td class=SDescription>Where to position tooltip. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.tooltipOffset" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">tooltipOffset</a></td><td class=SDescription>Pixel offset of tooltip from the grid boudaries or cursor center.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.showTooltipGridPosition" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">showTooltipGridPosition</a></td><td class=SDescription>show the grid pixel coordinates of the mouse.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.showTooltipUnitPosition" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">showTooltipUnitPosition</a></td><td class=SDescription>show the unit (data) coordinates of the mouse.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.showTooltipDataPosition" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">showTooltipDataPosition</a></td><td class=SDescription>Used with showVerticalLine to show intersecting data points in the tooltip.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.tooltipFormatString" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">tooltipFormatString</a></td><td class=SDescription>sprintf format string for the tooltip. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.useAxesFormatters" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">useAxesFormatters</a></td><td class=SDescription>Use the x and y axes formatters to format the text in the tooltip.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.tooltipAxisGroups" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">tooltipAxisGroups</a></td><td class=SDescription>Show position for the specified axes. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.zoom" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">zoom</a></td><td class=SDescription>Enable plot zooming.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.looseZoom" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">looseZoom</a></td><td class=SDescription>Will expand zoom range to provide more rounded tick values. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.clickReset" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">clickReset</a></td><td class=SDescription>Will reset plot zoom if single click on plot without drag.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.dblClickReset" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">dblClickReset</a></td><td class=SDescription>Will reset plot zoom if double click on plot without drag.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.showVerticalLine" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">showVerticalLine</a></td><td class=SDescription>draw a vertical line across the plot which follows the cursor. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.showHorizontalLine" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">showHorizontalLine</a></td><td class=SDescription>draw a horizontal line across the plot which follows the cursor.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.constrainZoomTo" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">constrainZoomTo</a></td><td class=SDescription>&lsquo;none&rsquo;, &lsquo;x&rsquo; or &lsquo;y&rsquo;</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.intersectionThreshold" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">intersectionThreshold</a></td><td class=SDescription>pixel distance from data point or marker to consider cursor lines intersecting with point. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.showCursorLegend" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')">showCursorLegend</a></td><td class=SDescription>Replace the plot legend with an enhanced legend displaying intersection information.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.cursorLegendFormatString" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')">cursorLegendFormatString</a></td><td class=SDescription>Format string used in the cursor legend. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.constrainOutsideZoom" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')">constrainOutsideZoom</a></td><td class=SDescription>True to limit actual zoom area to edges of grid, even when zooming outside of plot area. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Cursor.showTooltipOutsideZoom" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')">showTooltipOutsideZoom</a></td><td class=SDescription>True will keep updating the tooltip when zooming of the grid.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Cursor.methods" >methods</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')">$.jqplot.<wbr>Cursor.<wbr>zoomProxy</a></td><td class=SDescription>links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.style"></a>style</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'crosshair'</td></tr></table></blockquote><p>CSS spec for cursor style</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote><p>wether to show the cursor or not.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showTooltip"></a>showTooltip</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote><p>show a cursor position tooltip.&nbsp; Location of the tooltip will be controlled by followMouse and tooltipLocation.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.followMouse"></a>followMouse</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.followMouse = false</td></tr></table></blockquote><p>Tooltip follows the mouse, it is not at a fixed location.&nbsp; Tooltip will show on the grid at the location given by tooltipLocation, offset from the grid edge by tooltipOffset.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.tooltipLocation"></a>tooltipLocation</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'se'</td></tr></table></blockquote><p>Where to position tooltip.&nbsp; If followMouse is true, this is relative to the cursor, otherwise, it is relative to the grid.&nbsp; One of &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.tooltipOffset"></a>tooltipOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 6</td></tr></table></blockquote><p>Pixel offset of tooltip from the grid boudaries or cursor center.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showTooltipGridPosition"></a>showTooltipGridPosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipGridPosition = false</td></tr></table></blockquote><p>show the grid pixel coordinates of the mouse.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showTooltipUnitPosition"></a>showTooltipUnitPosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipUnitPosition = true</td></tr></table></blockquote><p>show the unit (data) coordinates of the mouse.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showTooltipDataPosition"></a>showTooltipDataPosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipDataPosition = false</td></tr></table></blockquote><p>Used with showVerticalLine to show intersecting data points in the tooltip.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.tooltipFormatString"></a>tooltipFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.4P, %.4P'</td></tr></table></blockquote><p>sprintf format string for the tooltip.&nbsp; Uses Ash Searle&rsquo;s javascript sprintf implementation found here: <a href="http://hexmen.com/blog/2007/03/printf-sprintf/" class=LURL target=_top>http://hexmen.com/blog/2007/03/printf-sprintf/</a> See <a href="http://perldoc.perl.org/functions/sprintf.html" class=LURL target=_top>http://perldoc.perl.org/functions/sprintf.html</a> for reference Note, if showTooltipDataPosition is true, the default tooltipFormatString will be set to the cursorLegendFormatString, not the default given here.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.useAxesFormatters"></a>useAxesFormatters</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote><p>Use the x and y axes formatters to format the text in the tooltip.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.tooltipAxisGroups"></a>tooltipAxisGroups</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxisGroups = []</td></tr></table></blockquote><p>Show position for the specified axes.&nbsp; This is an array like [[&lsquo;xaxis&rsquo;, &lsquo;yaxis&rsquo;], [&lsquo;xaxis&rsquo;, &lsquo;y2axis&rsquo;]] Default is to compute automatically for all visible axes.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.zoom"></a>zoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.zoom = false</td></tr></table></blockquote><p>Enable plot zooming.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.looseZoom"></a>looseZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.looseZoom = true</td></tr></table></blockquote><p>Will expand zoom range to provide more rounded tick values.&nbsp; Works only with linear, log and date axes.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.clickReset"></a>clickReset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clickReset = false</td></tr></table></blockquote><p>Will reset plot zoom if single click on plot without drag.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.dblClickReset"></a>dblClickReset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dblClickReset = true</td></tr></table></blockquote><p>Will reset plot zoom if double click on plot without drag.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showVerticalLine"></a>showVerticalLine</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showVerticalLine = false</td></tr></table></blockquote><p>draw a vertical line across the plot which follows the cursor.&nbsp; When the line is near a data point, a special legend and/or tooltip can be updated with the data values.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showHorizontalLine"></a>showHorizontalLine</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showHorizontalLine = false</td></tr></table></blockquote><p>draw a horizontal line across the plot which follows the cursor.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.constrainZoomTo"></a>constrainZoomTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainZoomTo = 'none'</td></tr></table></blockquote><p>&rsquo;none&rsquo;, &lsquo;x&rsquo; or &lsquo;y&rsquo;</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.intersectionThreshold"></a>intersectionThreshold</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intersectionThreshold = 2</td></tr></table></blockquote><p>pixel distance from data point or marker to consider cursor lines intersecting with point.&nbsp; If data point markers are not shown, this should be &gt;= 1 or will often miss point intersections.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showCursorLegend"></a>showCursorLegend</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showCursorLegend = false</td></tr></table></blockquote><p>Replace the plot legend with an enhanced legend displaying intersection information.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.cursorLegendFormatString"></a>cursorLegendFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString</td></tr></table></blockquote><p>Format string used in the cursor legend.&nbsp; If showTooltipDataPosition is true, this will also be the default format string used by tooltipFormatString.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.constrainOutsideZoom"></a>constrainOutsideZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainOutsideZoom = true</td></tr></table></blockquote><p>True to limit actual zoom area to edges of grid, even when zooming outside of plot area.&nbsp; That is, can&rsquo;t zoom out by mousing outside plot.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.showTooltipOutsideZoom"></a>showTooltipOutsideZoom</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipOutsideZoom = false</td></tr></table></blockquote><p>True will keep updating the tooltip when zooming of the grid.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.methods"></a>methods</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy"></a>$.jqplot.<wbr>Cursor.<wbr>zoomProxy</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.Cursor.zoomProxy = function(</td><td class=PParameter nowrap>targetPlot,</td></tr><tr><td></td><td class=PParameter nowrap>controllerPlot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>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.&nbsp; Note, the zoom options must be set to true for zoomProxy to work.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>Cursor</div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'crosshair'</td></tr></table></blockquote>CSS spec for cursor style</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>wether to show the cursor or not.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>show a cursor position tooltip. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.followMouse = false</td></tr></table></blockquote>Tooltip follows the mouse, it is not at a fixed location. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'se'</td></tr></table></blockquote>Where to position tooltip. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 6</td></tr></table></blockquote>Pixel offset of tooltip from the grid boudaries or cursor center.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipGridPosition = false</td></tr></table></blockquote>show the grid pixel coordinates of the mouse.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipUnitPosition = true</td></tr></table></blockquote>show the unit (data) coordinates of the mouse.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipDataPosition = false</td></tr></table></blockquote>Used with showVerticalLine to show intersecting data points in the tooltip.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.4P, %.4P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxisGroups = []</td></tr></table></blockquote>Show position for the specified axes. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.zoom = false</td></tr></table></blockquote>Enable plot zooming.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.looseZoom = true</td></tr></table></blockquote>Will expand zoom range to provide more rounded tick values. </div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clickReset = false</td></tr></table></blockquote>Will reset plot zoom if single click on plot without drag.</div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dblClickReset = true</td></tr></table></blockquote>Will reset plot zoom if double click on plot without drag.</div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showVerticalLine = false</td></tr></table></blockquote>draw a vertical line across the plot which follows the cursor. </div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showHorizontalLine = false</td></tr></table></blockquote>draw a horizontal line across the plot which follows the cursor.</div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainZoomTo = 'none'</td></tr></table></blockquote>&lsquo;none&rsquo;, &lsquo;x&rsquo; or &lsquo;y&rsquo;</div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intersectionThreshold = 2</td></tr></table></blockquote>pixel distance from data point or marker to consider cursor lines intersecting with point. </div></div><div class=CToolTip id="tt21"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showCursorLegend = false</td></tr></table></blockquote>Replace the plot legend with an enhanced legend displaying intersection information.</div></div><div class=CToolTip id="tt22"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString</td></tr></table></blockquote>Format string used in the cursor legend. </div></div><div class=CToolTip id="tt23"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainOutsideZoom = true</td></tr></table></blockquote>True to limit actual zoom area to edges of grid, even when zooming outside of plot area. </div></div><div class=CToolTip id="tt24"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipOutsideZoom = false</td></tr></table></blockquote>True will keep updating the tooltip when zooming of the grid.</div></div><div class=CToolTip id="tt25"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.Cursor.zoomProxy = function(</td><td class=PParameter nowrap>targetPlot,</td></tr><tr><td></td><td class=PParameter nowrap>controllerPlot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html
deleted file mode 100644
index f87d8274..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dateAxisRenderer-js.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.DateAxisRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.DateAxisRenderer"></a>$.jqplot.<wbr>DateAxisRenderer</div><div class=CBody><p>A plugin for a jqPlot to render an axis as a series of date values.&nbsp; This renderer has no options beyond those supplied by the <a href="../jqplot-core-js.html#Axis" class=LClass id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">Axis</a> class.&nbsp; It supplies it&rsquo;s own tick formatter, so the tickOptions.formatter option should not be overridden.</p><p>Thanks to Ken Synder for his enhanced Date instance methods which are included with this code <a href="http://kendsnyder.com/sandbox/date/" class=LURL target=_top>http://kendsnyder.com/sandbox/date/</a>.</p><p>To use this renderer, include the plugin in your source</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src=&quot;plugins/jqplot.dateAxisRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>and supply the appropriate options to your plot</p><blockquote><pre>{axes:{xaxis:{renderer:$.jqplot.DateAxisRenderer}}}</pre></blockquote><p>Dates can be passed into the axis in almost any recognizable value and will be parsed.&nbsp; They will be rendered on the axis in the format specified by tickOptions.formatString.&nbsp; e.g. tickOptions.formatString = &lsquo;%Y-%m-%d&rsquo;.</p><p>Accecptable format codes are:</p><blockquote><pre>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</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer" >$.jqplot.<wbr>DateAxisRenderer</a></td><td class=SDescription>A plugin for a jqPlot to render an axis as a series of date values. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer.tickRenderer" >tickRenderer</a></td><td class=SDescription>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="../jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">$.jqplot.AxisTickRenderer</a>. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer.tickInset" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">tickInset</a></td><td class=SDescription>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer.drawBaseline" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">drawBaseline</a></td><td class=SDescription>True to draw the axis baseline.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer.baselineWidth" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">baselineWidth</a></td><td class=SDescription>width of the baseline in pixels.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DateAxisRenderer.baselineColor" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">baselineColor</a></td><td class=SDescription>CSS color spec for the baseline.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DateAxisRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DateAxisRenderer.tickRenderer"></a>tickRenderer</h3><div class=CBody><p>A class of a rendering engine for creating the ticks labels displayed on the plot, See <a href="../jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt1', 'link7')" onMouseOut="HideTip('tt1')">$.jqplot.AxisTickRenderer</a>. this.tickRenderer = $.jqplot.AxisTickRenderer; this.labelRenderer = $.jqplot.AxisLabelRenderer;</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DateAxisRenderer.tickInset"></a>tickInset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInset = 0</td></tr></table></blockquote><p>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval.&nbsp; 0 is no inset, 0.5 is one half a tick interval, 1 is a full tick interval, etc.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DateAxisRenderer.drawBaseline"></a>drawBaseline</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote><p>True to draw the axis baseline.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DateAxisRenderer.baselineWidth"></a>baselineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote><p>width of the baseline in pixels.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DateAxisRenderer.baselineColor"></a>baselineColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote><p>CSS color spec for the baseline.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>DateAxisRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInset = 0</td></tr></table></blockquote>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><div class=CToolTip id="tt6"><div class=CClass>An individual axis object. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html
deleted file mode 100644
index a45f0227..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-donutRenderer-js.html
+++ /dev/null
@@ -1,98 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.DonutRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.DonutRenderer"></a>$.jqplot.<wbr>DonutRenderer</div><div class=CBody><p>Plugin renderer to draw a donut chart. x values, if present, will be used as slice labels. y values give slice size.</p><p>To use this renderer, you need to include the donut renderer plugin, for example:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.donutRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Properties described here are passed into the $.jqplot function as options on the series renderer.&nbsp; For example:</p><blockquote><pre>plot2 = $.jqplot('chart2', [s1, s2], {
- seriesDefaults: {
- renderer:$.jqplot.DonutRenderer,
- rendererOptions:{
- sliceMargin: 2,
- innerDiameter: 110,
- startAngle: -90
- }
- }
-});</pre></blockquote><p>A donut plot will trigger events on the plot target according to user interaction.&nbsp; All events return the event object, the series index, the point (slice) index, and the point data for the appropriate slice.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>&rsquo;jqplotDataMouseOver&rsquo;</td><td class=CDLDescription>triggered when user mouseing over a slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataHighlight&rsquo;</td><td class=CDLDescription>triggered the first time user mouses over a slice, if highlighting is enabled.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataUnhighlight&rsquo;</td><td class=CDLDescription>triggered when a user moves the mouse out of a highlighted slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataClick&rsquo;</td><td class=CDLDescription>triggered when the user clicks on a slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataRightClick&rsquo;</td><td class=CDLDescription>tiggered when the user right clicks on a slice if the &ldquo;captureRightClick&rdquo; option is set to true on the plot.</td></tr></table><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.DonutRenderer" >$.jqplot.<wbr>DonutRenderer</a></td><td class=SDescription>Plugin renderer to draw a donut chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.DonutRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.diameter" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">diameter</a></td><td class=SDescription>Outer diameter of the donut, auto computed by default</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.innerDiameter" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">innerDiameter</a></td><td class=SDescription>Inner diameter of the donut, auto calculated by default. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.thickness" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">thickness</a></td><td class=SDescription>thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.padding" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">padding</a></td><td class=SDescription>padding between the donut and plot edges, legend, etc.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.sliceMargin" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">sliceMargin</a></td><td class=SDescription>angular spacing between donut slices in degrees.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.ringMargin" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">ringMargin</a></td><td class=SDescription>pixel distance between rings, or multiple series in a donut plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.fill" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">fill</a></td><td class=SDescription>true or false, wether to fil the slices.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.shadowOffset" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">shadowOffset</a></td><td class=SDescription>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.shadowAlpha" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">shadowAlpha</a></td><td class=SDescription>transparency of the shadow (0 = transparent, 1 = opaque)</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.shadowDepth" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">shadowDepth</a></td><td class=SDescription>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.highlightMouseOver" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">highlightMouseOver</a></td><td class=SDescription>True to highlight slice when moused over. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.highlightMouseDown" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a slice. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.highlightColors" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">highlightColors</a></td><td class=SDescription>an array of colors to use when highlighting a slice.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.dataLabels" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">dataLabels</a></td><td class=SDescription>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.showDataLabels" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">showDataLabels</a></td><td class=SDescription>true to show data labels on slices.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.dataLabelFormatString" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">dataLabelFormatString</a></td><td class=SDescription>Format string for data labels. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.dataLabelThreshold" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">dataLabelThreshold</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.dataLabelPositionFactor" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">dataLabelPositionFactor</a></td><td class=SDescription>A Multiplier (0-1) of the pie radius which controls position of label on slice. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutRenderer.dataLabelNudge" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">dataLabelNudge</a></td><td class=SDescription>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutRenderer.startAngle" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">startAngle</a></td><td class=SDescription>Angle to start drawing donut in degrees. </td></tr><tr class="SClass"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer" >$.jqplot.<wbr>DonutLegendRenderer</a></td><td class=SDescription>Legend Renderer specific to donut plots. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.numberRows" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.numberColumns" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.diameter"></a>diameter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote><p>Outer diameter of the donut, auto computed by default</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.innerDiameter"></a>innerDiameter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.innerDiameter = null</td></tr></table></blockquote><p>Inner diameter of the donut, auto calculated by default.&nbsp; If specified will override thickness value.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.thickness"></a>thickness</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.thickness = null</td></tr></table></blockquote><p>thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.padding"></a>padding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote><p>padding between the donut and plot edges, legend, etc.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.sliceMargin"></a>sliceMargin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote><p>angular spacing between donut slices in degrees.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.ringMargin"></a>ringMargin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringMargin = null</td></tr></table></blockquote><p>pixel distance between rings, or multiple series in a donut plot. null will compute ringMargin based on sliceMargin.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote><p>true or false, wether to fil the slices.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote><p>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote><p>transparency of the shadow (0 = transparent, 1 = opaque)</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote><p>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight slice when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a slice.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a slice.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>an array of colors to use when highlighting a slice.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.dataLabels"></a>dataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote><p>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices.&nbsp; Defaults to percentage of each pie slice.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.showDataLabels"></a>showDataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote><p>true to show data labels on slices.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.dataLabelFormatString"></a>dataLabelFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote><p>Format string for data labels.&nbsp; If none, &lsquo;%s&rsquo; is used for &ldquo;label&rdquo; and for arrays, &lsquo;%d&rsquo; for value and &lsquo;%d%%&rsquo; for percentage.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.dataLabelThreshold"></a>dataLabelThreshold</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>Threshhold in percentage (0</td><td class=CDLDescription>100) of pie area, below which no label will be displayed.&nbsp; This applies to all label types, not just to percentage labels.</td></tr></table></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.dataLabelPositionFactor"></a>dataLabelPositionFactor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.4</td></tr></table></blockquote><p>A Multiplier (0-1) of the pie radius which controls position of label on slice.&nbsp; Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.dataLabelNudge"></a>dataLabelNudge</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 0</td></tr></table></blockquote><p>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutRenderer.startAngle"></a>startAngle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote><p>Angle to start drawing donut in degrees.&nbsp; According to orientation of canvas coordinate system: 0 = on the positive x axis -90 = on the positive y axis.&nbsp; 90 = on the negaive y axis.&nbsp; 180 or - 180 = on the negative x axis.</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="$.jqplot.DonutLegendRenderer"></a>$.jqplot.<wbr>DonutLegendRenderer</h2><div class=CBody><p>Legend Renderer specific to donut plots.&nbsp; Set by default when user creates a donut plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.numberRows" id=link23 onMouseOver="ShowTip(event, 'tt21', 'link23')" onMouseOut="HideTip('tt21')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#$.jqplot.DonutLegendRenderer.numberColumns" id=link24 onMouseOver="ShowTip(event, 'tt22', 'link24')" onMouseOut="HideTip('tt22')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutLegendRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutLegendRenderer.numberRows"></a>numberRows</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote><p>Maximum number of rows in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.DonutLegendRenderer.numberColumns"></a>numberColumns</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote><p>Maximum number of columns in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>DonutRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the donut, auto computed by default</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.innerDiameter = null</td></tr></table></blockquote>Inner diameter of the donut, auto calculated by default. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.thickness = null</td></tr></table></blockquote>thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote>padding between the donut and plot edges, legend, etc.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between donut slices in degrees.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringMargin = null</td></tr></table></blockquote>pixel distance between rings, or multiple series in a donut plot. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.4</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 0</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing donut in degrees. </div></div><div class=CToolTip id="tt21"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt22"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dragable-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dragable-js.html
deleted file mode 100644
index 3479e655..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-dragable-js.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.Dragable</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.Dragable"></a>$.jqplot.<wbr>Dragable</div><div class=CBody><p>Plugin to make plotted points dragable by the user.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.Dragable" >$.jqplot.<wbr>Dragable</a></td><td class=SDescription>Plugin to make plotted points dragable by the user.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Dragable.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Dragable.color" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">color</a></td><td class=SDescription>CSS color spec for the dragged point (and adjacent line segment or bar).</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Dragable.constrainTo" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">constrainTo</a></td><td class=SDescription>Constrain dragging motion to an axis or to none. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Dragable.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Dragable.color"></a>color</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote><p>CSS color spec for the dragged point (and adjacent line segment or bar).</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Dragable.constrainTo"></a>constrainTo</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainTo = 'none'</td></tr></table></blockquote><p>Constrain dragging motion to an axis or to none.&nbsp; Allowable values are &lsquo;none&rsquo;, &lsquo;x&rsquo;, &lsquo;y&rsquo;</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>Dragable</div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>CSS color spec for the dragged point (and adjacent line segment or bar).</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainTo = 'none'</td></tr></table></blockquote>Constrain dragging motion to an axis or to none. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html
deleted file mode 100644
index b5f5d109..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-enhancedLegendRenderer-js.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>/Users/chris/Sites/lib/jqplot/build/plugins/jqplot.enhancedLegendRenderer.js</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqplot.enhancedLegendRenderer.js"></a>jqplot.<wbr>enhancedLegendRenderer.js</div><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#jqplot.enhancedLegendRenderer.js" >jqplot.<wbr>enhancedLegendRenderer.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#numberRows" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#numberColumns" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#seriesToggle" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">seriesToggle</a></td><td class=SDescription>false to not enable series on/off toggling on the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#seriesToggleReplot" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">seriesToggleReplot</a></td><td class=SDescription>True to replot the chart after toggling series on/off. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#disableIEFading" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">disableIEFading</a></td><td class=SDescription>true to toggle series with a show/hide method only and not allow fading in/out. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="numberRows"></a>numberRows</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote><p>Maximum number of rows in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="numberColumns"></a>numberColumns</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote><p>Maximum number of columns in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="seriesToggle"></a>seriesToggle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggle = 'normal'</td></tr></table></blockquote><p>false to not enable series on/off toggling on the legend. true or a fadein/fadeout speed (number of milliseconds or &lsquo;fast&rsquo;, &lsquo;normal&rsquo;, &lsquo;slow&rsquo;) to enable show/hide of series on click of legend item.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="seriesToggleReplot"></a>seriesToggleReplot</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggleReplot = false</td></tr></table></blockquote><p>True to replot the chart after toggling series on/off.&nbsp; This will set the series show property to false.&nbsp; This allows for rescaling or other maniplation of chart.&nbsp; Set to an options object (e.g.&nbsp; {resetAxes: true}) for replot options.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="disableIEFading"></a>disableIEFading</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableIEFading = true</td></tr></table></blockquote><p>true to toggle series with a show/hide method only and not allow fading in/out.&nbsp; This is to overcome poor performance of fade in some versions of IE.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>enhancedLegendRenderer.js</div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggle = 'normal'</td></tr></table></blockquote>false to not enable series on/off toggling on the legend. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggleReplot = false</td></tr></table></blockquote>True to replot the chart after toggling series on/off. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableIEFading = true</td></tr></table></blockquote>true to toggle series with a show/hide method only and not allow fading in/out. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html
deleted file mode 100644
index 17d2cf54..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-funnelRenderer-js.html
+++ /dev/null
@@ -1,87 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.FunnelRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.FunnelRenderer"></a>$.jqplot.<wbr>FunnelRenderer</div><div class=CBody><p>Plugin renderer to draw a funnel chart. x values, if present, will be used as labels. y values give area size.</p><p>Funnel charts will draw a single series only.</p><p>To use this renderer, you need to include the funnel renderer plugin, for example:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.funnelRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Properties described here are passed into the $.jqplot function as options on the series renderer.&nbsp; For example:</p><blockquote><pre>plot2 = $.jqplot('chart2', [s1, s2], {
- seriesDefaults: {
- renderer:$.jqplot.FunnelRenderer,
- rendererOptions:{
- sectionMargin: 12,
- widthRatio: 0.3
- }
- }
-});</pre></blockquote><p>IMPORTANT</p><p><b>The funnel renderer will reorder data in descending order</b> so the largest value in the data set is first and displayed on top of the funnel.&nbsp; Data will then be displayed in descending order down the funnel.&nbsp; The area of each funnel section will correspond to the value of each data point relative to the sum of all values.&nbsp; That is section area is proportional to section value divided by sum of all section values.</p><p>If your data is not in descending order when passed into the plot, <b>it will be reordered</b> when stored in the series.data property.&nbsp; A copy of the unordered data is kept in the series._unorderedData property.</p><p>A funnel plot will trigger events on the plot target according to user interaction.&nbsp; All events return the event object, the series index, the point (section) index, and the point data for the appropriate section.&nbsp; <b>Note</b> the point index will referr to the ordered data, not the original unordered data.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>&rsquo;jqplotDataMouseOver&rsquo;</td><td class=CDLDescription>triggered when mousing over a section.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataHighlight&rsquo;</td><td class=CDLDescription>triggered the first time user mouses over a section, if highlighting is enabled.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataUnhighlight&rsquo;</td><td class=CDLDescription>triggered when a user moves the mouse out of a highlighted section.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataClick&rsquo;</td><td class=CDLDescription>triggered when the user clicks on a section.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataRightClick&rsquo;</td><td class=CDLDescription>tiggered when the user right clicks on a section if the &ldquo;captureRightClick&rdquo; option is set to true on the plot.</td></tr></table><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.FunnelRenderer" >$.jqplot.<wbr>FunnelRenderer</a></td><td class=SDescription>Plugin renderer to draw a funnel chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.padding" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">padding</a></td><td class=SDescription>padding between the funnel and plot edges, legend, etc.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.sectionMargin" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">sectionMargin</a></td><td class=SDescription>spacing between funnel sections in pixels.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.fill" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">fill</a></td><td class=SDescription>true or false, wether to fill the areas.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.shadowOffset" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">shadowOffset</a></td><td class=SDescription>offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.shadowAlpha" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">shadowAlpha</a></td><td class=SDescription>transparency of the shadow (0 = transparent, 1 = opaque)</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.shadowDepth" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">shadowDepth</a></td><td class=SDescription>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.highlightMouseOver" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">highlightMouseOver</a></td><td class=SDescription>True to highlight area when moused over. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.highlightMouseDown" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a area. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.highlightColors" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">highlightColors</a></td><td class=SDescription>array of colors to use when highlighting an area.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.widthRatio" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">widthRatio</a></td><td class=SDescription>The ratio of the width of the top of the funnel to the bottom. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.lineWidth" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">lineWidth</a></td><td class=SDescription>width of line if areas are stroked and not filled.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.dataLabels" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">dataLabels</a></td><td class=SDescription>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.showDataLabels" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">showDataLabels</a></td><td class=SDescription>true to show data labels on slices.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.dataLabelFormatString" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">dataLabelFormatString</a></td><td class=SDescription>Format string for data labels. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelRenderer.dataLabelThreshold" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">dataLabelThreshold</a></td><td class=SDescription></td></tr><tr class="SClass"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer" >$.jqplot.<wbr>FunnelLegendRenderer</a></td><td class=SDescription>Legend Renderer specific to funnel plots. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.numberRows" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.numberColumns" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.padding"></a>padding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = {top: 20, right: 20, bottom: 20, left: 20}</td></tr></table></blockquote><p>padding between the funnel and plot edges, legend, etc.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.sectionMargin"></a>sectionMargin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sectionMargin = 6</td></tr></table></blockquote><p>spacing between funnel sections in pixels.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote><p>true or false, wether to fill the areas.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote><p>offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote><p>transparency of the shadow (0 = transparent, 1 = opaque)</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote><p>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight area when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a area.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a area.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>array of colors to use when highlighting an area.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.widthRatio"></a>widthRatio</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.widthRatio = 0.2</td></tr></table></blockquote><p>The ratio of the width of the top of the funnel to the bottom. a ratio of 0 will make an upside down pyramid.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote><p>width of line if areas are stroked and not filled.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.dataLabels"></a>dataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote><p>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices.&nbsp; Defaults to percentage of each pie slice.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.showDataLabels"></a>showDataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote><p>true to show data labels on slices.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.dataLabelFormatString"></a>dataLabelFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote><p>Format string for data labels.&nbsp; If none, &lsquo;%s&rsquo; is used for &ldquo;label&rdquo; and for arrays, &lsquo;%d&rsquo; for value and &lsquo;%d%%&rsquo; for percentage.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelRenderer.dataLabelThreshold"></a>dataLabelThreshold</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>Threshhold in percentage (0</td><td class=CDLDescription>100) of pie area, below which no label will be displayed.&nbsp; This applies to all label types, not just to percentage labels.</td></tr></table></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="$.jqplot.FunnelLegendRenderer"></a>$.jqplot.<wbr>FunnelLegendRenderer</h2><div class=CBody><p>Legend Renderer specific to funnel plots.&nbsp; Set by default when the user creates a funnel plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.numberRows" id=link18 onMouseOver="ShowTip(event, 'tt16', 'link18')" onMouseOut="HideTip('tt16')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#$.jqplot.FunnelLegendRenderer.numberColumns" id=link19 onMouseOver="ShowTip(event, 'tt17', 'link19')" onMouseOut="HideTip('tt17')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelLegendRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelLegendRenderer.numberRows"></a>numberRows</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote><p>Maximum number of rows in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.FunnelLegendRenderer.numberColumns"></a>numberColumns</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote><p>Maximum number of columns in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>FunnelRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = {top: 20, right: 20, bottom: 20, left: 20}</td></tr></table></blockquote>padding between the funnel and plot edges, legend, etc.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sectionMargin = 6</td></tr></table></blockquote>spacing between funnel sections in pixels.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fill the areas.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area when moused over. </div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a area. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>array of colors to use when highlighting an area.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.widthRatio = 0.2</td></tr></table></blockquote>The ratio of the width of the top of the funnel to the bottom. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>width of line if areas are stroked and not filled.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-highlighter-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-highlighter-js.html
deleted file mode 100644
index daa8806b..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-highlighter-js.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.Highlighter</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.Highlighter"></a>$.jqplot.<wbr>Highlighter</div><div class=CBody><p>Plugin which will highlight data points when they are moused over.</p><p>To use this plugin, include the js file in your source:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.highlighter.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>A tooltip providing information about the data point is enabled by default.&nbsp; To disable the tooltip, set &ldquo;showTooltip&rdquo; to false.</p><p>You can control what data is displayed in the tooltip with various options.&nbsp; The &ldquo;tooltipAxes&rdquo; option controls wether the x, y or both data values are displayed.</p><p>Some chart types (e.g. hi-low-close) have more than one y value per data point.&nbsp; To display the additional values in the tooltip, set the &ldquo;yvalues&rdquo; option to the desired number of y values present (3 for a hlc chart).</p><p>By default, data values will be formatted with the same formatting specifiers as used to format the axis ticks.&nbsp; A custom format code can be supplied with the tooltipFormatString option.&nbsp; This will apply to all values in the tooltip.</p><p>For more complete control, the &ldquo;formatString&rdquo; option can be set.&nbsp; This Allows conplete control over tooltip formatting.&nbsp; Values are passed to the format string in an order determined by the &ldquo;tooltipAxes&rdquo; and &ldquo;yvalues&rdquo; options.&nbsp; 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:</p><blockquote><pre>highlighter: {
- tooltipAxes: 'y',
- yvalues: 3,
- formatString:'&lt;table class=&quot;jqplot-highlighter&quot;&gt;
- &lt;tr&gt;&lt;td&gt;hi:&lt;/td&gt;&lt;td&gt;%s&lt;/td&gt;&lt;/tr&gt;
- &lt;tr&gt;&lt;td&gt;low:&lt;/td&gt;&lt;td&gt;%s&lt;/td&gt;&lt;/tr&gt;
- &lt;tr&gt;&lt;td&gt;close:&lt;/td&gt;&lt;td&gt;%s&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;'
-}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.Highlighter" >$.jqplot.<wbr>Highlighter</a></td><td class=SDescription>Plugin which will highlight data points when they are moused over.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Highlighter.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.show" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">show</a></td><td class=SDescription>true to show the highlight.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.markerRenderer" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">markerRenderer</a></td><td class=SDescription>Renderer used to draw the marker of the highlighted point. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.showMarker" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">showMarker</a></td><td class=SDescription>true to show the marker</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.lineWidthAdjust" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">lineWidthAdjust</a></td><td class=SDescription>Pixels to add to the lineWidth of the highlight.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.sizeAdjust" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">sizeAdjust</a></td><td class=SDescription>Pixels to add to the overall size of the highlight.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.showTooltip" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">showTooltip</a></td><td class=SDescription>Show a tooltip with data point values.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.tooltipLocation" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">tooltipLocation</a></td><td class=SDescription>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.fadeTooltip" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">fadeTooltip</a></td><td class=SDescription>true = fade in/out tooltip, flase = show/hide tooltip</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.tooltipFadeSpeed" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">tooltipFadeSpeed</a></td><td class=SDescription>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.tooltipOffset" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">tooltipOffset</a></td><td class=SDescription>Pixel offset of tooltip from the highlight.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.tooltipAxes" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">tooltipAxes</a></td><td class=SDescription>Which axes to display in tooltip, &lsquo;x&rsquo;, &lsquo;y&rsquo; or &lsquo;both&rsquo;, &lsquo;xy&rsquo; or &lsquo;yx&rsquo; &lsquo;both&rsquo; and &lsquo;xy&rsquo; are equivalent, &lsquo;yx&rsquo; reverses order of labels.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.useAxesFormatters" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">useAxesFormatters</a></td><td class=SDescription>Use the x and y axes formatters to format the text in the tooltip.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.tooltipFormatString" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">tooltipFormatString</a></td><td class=SDescription>sprintf format string for the tooltip. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.formatString" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">formatString</a></td><td class=SDescription>alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Highlighter.yvalues" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">yvalues</a></td><td class=SDescription>Number of y values to expect in the data point array. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Highlighter.bringSeriesToFront" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">bringSeriesToFront</a></td><td class=SDescription>This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote><p>true to show the highlight.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.markerRenderer"></a>markerRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.markerRenderer = new $.jqplot.MarkerRenderer(</td><td class=PParameter nowrap>{shadow:false}</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>Renderer used to draw the marker of the highlighted point.&nbsp; Renderer will assimilate attributes from the data point being highlighted, so no attributes need set on the renderer directly.&nbsp; Default is to turn off shadow drawing on the highlighted point.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.showMarker"></a>showMarker</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote><p>true to show the marker</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.lineWidthAdjust"></a>lineWidthAdjust</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidthAdjust = 2.5</td></tr></table></blockquote><p>Pixels to add to the lineWidth of the highlight.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.sizeAdjust"></a>sizeAdjust</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sizeAdjust = 5</td></tr></table></blockquote><p>Pixels to add to the overall size of the highlight.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.showTooltip"></a>showTooltip</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote><p>Show a tooltip with data point values.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.tooltipLocation"></a>tooltipLocation</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'nw'</td></tr></table></blockquote><p>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.fadeTooltip"></a>fadeTooltip</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fadeTooltip = true</td></tr></table></blockquote><p>true = fade in/out tooltip, flase = show/hide tooltip</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.tooltipFadeSpeed"></a>tooltipFadeSpeed</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFadeSpeed = &quot;fast&quot;</td></tr></table></blockquote><p>&rsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.tooltipOffset"></a>tooltipOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 2</td></tr></table></blockquote><p>Pixel offset of tooltip from the highlight.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.tooltipAxes"></a>tooltipAxes</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxes = 'both'</td></tr></table></blockquote><p>Which axes to display in tooltip, &lsquo;x&rsquo;, &lsquo;y&rsquo; or &lsquo;both&rsquo;, &lsquo;xy&rsquo; or &lsquo;yx&rsquo; &lsquo;both&rsquo; and &lsquo;xy&rsquo; are equivalent, &lsquo;yx&rsquo; reverses order of labels.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.useAxesFormatters"></a>useAxesFormatters</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote><p>Use the x and y axes formatters to format the text in the tooltip.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.tooltipFormatString"></a>tooltipFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.5P'</td></tr></table></blockquote><p>sprintf format string for the tooltip.&nbsp; Uses Ash Searle&rsquo;s javascript sprintf implementation found here: <a href="http://hexmen.com/blog/2007/03/printf-sprintf/" class=LURL target=_top>http://hexmen.com/blog/2007/03/printf-sprintf/</a> See <a href="http://perldoc.perl.org/functions/sprintf.html" class=LURL target=_top>http://perldoc.perl.org/functions/sprintf.html</a> for reference.&nbsp; Additional &ldquo;p&rdquo; and &ldquo;P&rdquo; format specifiers added by Chris Leonello.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.formatString"></a>formatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = null</td></tr></table></blockquote><p>alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option.&nbsp; So, you could have a tooltip like: &lsquo;Date: %s, number of cats: %d&rsquo; to format the whole tooltip at one go.&nbsp; If useAxesFormatters is true, values will be formatted according to Axes formatters and you can populate your tooltip string with %s placeholders.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.yvalues"></a>yvalues</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yvalues = 1</td></tr></table></blockquote><p>Number of y values to expect in the data point array.&nbsp; Typically this is 1.&nbsp; Certain plots, like OHLC, will have more y values in each data point array.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Highlighter.bringSeriesToFront"></a>bringSeriesToFront</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bringSeriesToFront = false</td></tr></table></blockquote><p>This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>Highlighter</div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>true to show the highlight.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.markerRenderer = new $.jqplot.MarkerRenderer(</td><td class=PParameter nowrap>{shadow:false}</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Renderer used to draw the marker of the highlighted point. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>true to show the marker</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidthAdjust = 2.5</td></tr></table></blockquote>Pixels to add to the lineWidth of the highlight.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sizeAdjust = 5</td></tr></table></blockquote>Pixels to add to the overall size of the highlight.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>Show a tooltip with data point values.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'nw'</td></tr></table></blockquote>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fadeTooltip = true</td></tr></table></blockquote>true = fade in/out tooltip, flase = show/hide tooltip</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFadeSpeed = &quot;fast&quot;</td></tr></table></blockquote>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 2</td></tr></table></blockquote>Pixel offset of tooltip from the highlight.</div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxes = 'both'</td></tr></table></blockquote>Which axes to display in tooltip, &lsquo;x&rsquo;, &lsquo;y&rsquo; or &lsquo;both&rsquo;, &lsquo;xy&rsquo; or &lsquo;yx&rsquo; &lsquo;both&rsquo; and &lsquo;xy&rsquo; are equivalent, &lsquo;yx&rsquo; reverses order of labels.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.5P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = null</td></tr></table></blockquote>alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option. </div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yvalues = 1</td></tr></table></blockquote>Number of y values to expect in the data point array. </div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bringSeriesToFront = false</td></tr></table></blockquote>This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html
deleted file mode 100644
index 4e7317e7..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-logAxisRenderer-js.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.LogAxisRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.LogAxisRenderer"></a>$.jqplot.<wbr>LogAxisRenderer</div><div class=CBody><p>A plugin for a jqPlot to render a logarithmic axis.</p><p>To use this renderer, include the plugin in your source</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; language=&quot;javascript&quot; src=&quot;plugins/jqplot.logAxisRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>and supply the appropriate options to your plot</p><blockquote><pre>{axes:{xaxis:{renderer:$.jqplot.LogAxisRenderer}}}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.LogAxisRenderer" >$.jqplot.<wbr>LogAxisRenderer</a></td><td class=SDescription>A plugin for a jqPlot to render a logarithmic axis.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.LogAxisRenderer.axisDefaults" >axisDefaults</a></td><td class=SDescription>Default properties which will be applied directly to the series.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.LogAxisRenderer.Properties" >Properties</a></td><td class=SDescription>Properties</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.LogAxisRenderer.drawBaseline" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">drawBaseline</a></td><td class=SDescription>True to draw the axis baseline.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.LogAxisRenderer.minorTicks" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">minorTicks</a></td><td class=SDescription>Number of ticks to add between &ldquo;major&rdquo; ticks. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LogAxisRenderer.axisDefaults"></a>axisDefaults</h3><div class=CBody><p>Default properties which will be applied directly to the series.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LogAxisRenderer.Properties"></a>Properties</h3><div class=CBody><p>Properties</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>base</td><td class=CDLDescription>the logarithmic base, commonly 2, 10 or Math.E</td></tr><tr><td class=CDLEntry>tickDistribution</td><td class=CDLDescription>Deprecated.&nbsp; &ldquo;power&rdquo; distribution of ticks always used.&nbsp; Option has no effect.</td></tr></table></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LogAxisRenderer.drawBaseline"></a>drawBaseline</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote><p>True to draw the axis baseline.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.LogAxisRenderer.minorTicks"></a>minorTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.minorTicks = 'auto'</td></tr></table></blockquote><p>Number of ticks to add between &ldquo;major&rdquo; ticks.&nbsp; Major ticks are ticks supplied by user or auto computed.&nbsp; Minor ticks cannot be created by user.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>LogAxisRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.minorTicks = 'auto'</td></tr></table></blockquote>Number of ticks to add between &ldquo;major&rdquo; ticks. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html
deleted file mode 100644
index 4dfef14c..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoAxisRenderer-js.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.MekkoAxisRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.MekkoAxisRenderer"></a>$.jqplot.<wbr>MekkoAxisRenderer</div><div class=CBody><p>An axis renderer for a Mekko chart.&nbsp; Should be used with a Mekko chart where the mekkoRenderer is used on the series.&nbsp; 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.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer" >$.jqplot.<wbr>MekkoAxisRenderer</a></td><td class=SDescription>An axis renderer for a Mekko chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer.tickMode" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">tickMode</a></td><td class=SDescription>How to space the ticks on the axis. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer.barLabelRenderer" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">barLabelRenderer</a></td><td class=SDescription>renderer to use to draw labels under each bar.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer.barLabels" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">barLabels</a></td><td class=SDescription>array of labels to put under each bar.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MekkoAxisRenderer.barLabelOptions" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">barLabelOptions</a></td><td class=SDescription>options object to pass to the bar label renderer.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoAxisRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoAxisRenderer.tickMode"></a>tickMode</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickMode</td></tr></table></blockquote><p>How to space the ticks on the axis.&nbsp; &lsquo;bar&rsquo; will place a tick at the width of each bar.&nbsp; This is the default for the x axis.&nbsp; &lsquo;even&rsquo; will place ticks at even intervals.&nbsp; This is the default for x2 axis and y axis.&nbsp; y axis cannot be changed.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoAxisRenderer.barLabelRenderer"></a>barLabelRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote><p>renderer to use to draw labels under each bar.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoAxisRenderer.barLabels"></a>barLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabels = this.barLabels || []</td></tr></table></blockquote><p>array of labels to put under each bar.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoAxisRenderer.barLabelOptions"></a>barLabelOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelOptions = {}</td></tr></table></blockquote><p>options object to pass to the bar label renderer.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>MekkoAxisRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickMode</td></tr></table></blockquote>How to space the ticks on the axis. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>renderer to use to draw labels under each bar.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabels = this.barLabels || []</td></tr></table></blockquote>array of labels to put under each bar.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelOptions = {}</td></tr></table></blockquote>options object to pass to the bar label renderer.</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html
deleted file mode 100644
index dbe71812..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-mekkoRenderer-js.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.MekkoRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.MekkoRenderer"></a>$.jqplot.<wbr>MekkoRenderer</div><div class=CBody><p>Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph. the <a href="jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer" class=LClass id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">$.jqplot.MekkoAxisRenderer</a> should be used with mekko charts.&nbsp; The mekko renderer overrides the default legend renderer with it&rsquo;s own $.jqplot.MekkoLegendRenderer which allows more flexibility to specify number of rows and columns in the legend.</p><p>Data is specified per bar in the chart.&nbsp; You can specify data as an array of y values, or as an array of [label, value] pairs.&nbsp; Note that labels are used only on the first series.&nbsp; Labels on subsequent series are ignored:</p><blockquote><pre>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]];</pre></blockquote><p>If you want to place labels for each bar under the axis, you use the barLabels option on the axes.&nbsp; The bar labels can be styled with the &ldquo;.jqplot-mekko-barLabel&rdquo; css class.</p><blockquote><pre>barLabels = ['Mickey Mouse', 'Donald Duck', 'Goofy'];
-axes:{xaxis:{barLabels:barLabels}}</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.MekkoRenderer" >$.jqplot.<wbr>MekkoRenderer</a></td><td class=SDescription>Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.borderColor" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">borderColor</a></td><td class=SDescription>color of the borders between areas on the chart</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.showBorders" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">showBorders</a></td><td class=SDescription>True to draw borders lines between areas on the chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.Functions" >Functions</a></td><td class=SDescription></td></tr><tr class="SFunction SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.setGridData" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">setGridData</a></td><td class=SDescription>converts the user data values to grid coordinates and stores them in the gridData array. </td></tr><tr class="SFunction SIndent2"><td class=SEntry><a href="#$.jqplot.MekkoRenderer.makeGridData" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">makeGridData</a></td><td class=SDescription>converts any arbitrary data values to grid coordinates and returns them. </td></tr><tr class="SClass"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer" >$.jqplot.<wbr>MekkoLegendRenderer</a></td><td class=SDescription>Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.numberRows" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.numberColumns" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.borderColor"></a>borderColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote><p>color of the borders between areas on the chart</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.showBorders"></a>showBorders</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showBorders = true</td></tr></table></blockquote><p>True to draw borders lines between areas on the chart.&nbsp; False will draw borders lines with the same color as the area.</p></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.Functions"></a>Functions</h3></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.setGridData"></a>setGridData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>converts the user data values to grid coordinates and stores them in the gridData array.&nbsp; Will convert user data into appropriate rectangles.&nbsp; Called with scope of a series.</p></div></div></div>
-
-<div class="CFunction"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoRenderer.makeGridData"></a>makeGridData</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote><p>converts any arbitrary data values to grid coordinates and returns them.&nbsp; This method exists so that plugins can use a series&rsquo; linerenderer to generate grid data points without overwriting the grid data associated with that series.&nbsp; Called with scope of a series.</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="$.jqplot.MekkoLegendRenderer"></a>$.jqplot.<wbr>MekkoLegendRenderer</h2><div class=CBody><p>Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.numberRows" id=link8 onMouseOver="ShowTip(event, 'tt5', 'link8')" onMouseOut="HideTip('tt5')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#$.jqplot.MekkoLegendRenderer.numberColumns" id=link9 onMouseOver="ShowTip(event, 'tt6', 'link9')" onMouseOut="HideTip('tt6')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoLegendRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoLegendRenderer.numberRows"></a>numberRows</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote><p>Maximum number of rows in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MekkoLegendRenderer.numberColumns"></a>numberColumns</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote><p>Maximum number of columns in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>MekkoRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the borders between areas on the chart</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showBorders = true</td></tr></table></blockquote>True to draw borders lines between areas on the chart. </div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt7"><div class=CClass>An axis renderer for a Mekko chart. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html
deleted file mode 100644
index cce6835f..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-meterGaugeRenderer-js.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.MeterGaugeRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.MeterGaugeRenderer"></a>$.jqplot.<wbr>MeterGaugeRenderer</div><div class=CBody><p>Plugin renderer to draw a meter gauge chart.</p><p>Data consists of a single series with 1 data point to position the gauge needle.</p><p>To use this renderer, you need to include the meter gauge renderer plugin, for example:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.meterGaugeRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Properties described here are passed into the $.jqplot function as options on the series renderer.&nbsp; For example:</p><blockquote><pre>plot0 = $.jqplot('chart0',[[18]],{
- title: 'Network Speed',
- seriesDefaults: {
- renderer: $.jqplot.MeterGaugeRenderer,
- rendererOptions: {
- label: 'MB/s'
- }
- }
-});</pre></blockquote><p>A meterGauge plot does not support events.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer" >$.jqplot.<wbr>MeterGaugeRenderer</a></td><td class=SDescription>Plugin renderer to draw a meter gauge chart.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.diameter" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">diameter</a></td><td class=SDescription>Outer diameter of the meterGauge, auto computed by default</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.padding" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">padding</a></td><td class=SDescription>padding between the meterGauge and plot edges, auto calculated by default.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.shadowOffset" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">shadowOffset</a></td><td class=SDescription>offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.shadowAlpha" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">shadowAlpha</a></td><td class=SDescription>transparency of the shadow (0 = transparent, 1 = opaque)</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.shadowDepth" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">shadowDepth</a></td><td class=SDescription>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.background" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">background</a></td><td class=SDescription>background color of the inside of the gauge.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.ringColor" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">ringColor</a></td><td class=SDescription>color of the outer ring, hub, and needle of the gauge.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.tickColor" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">tickColor</a></td><td class=SDescription>color of the tick marks around the gauge.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.ringWidth" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">ringWidth</a></td><td class=SDescription>width of the ring around the gauge. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.min" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">min</a></td><td class=SDescription>Minimum value on the gauge. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.max" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">max</a></td><td class=SDescription>Maximum value on the gauge. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.ticks" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">ticks</a></td><td class=SDescription>Array of tick values. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.showTicks" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">showTicks</a></td><td class=SDescription>true to show ticks around gauge.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.showTickLabels" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">showTickLabels</a></td><td class=SDescription>true to show tick labels next to ticks.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.label" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">label</a></td><td class=SDescription>A gauge label like &lsquo;kph&rsquo; or &lsquo;Volts&rsquo;</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.labelHeightAdjust" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">labelHeightAdjust</a></td><td class=SDescription>Number of Pixels to offset the label up (-) or down (+) from its default position.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.labelPosition" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">labelPosition</a></td><td class=SDescription>Where to position the label, either &lsquo;inside&rsquo; or &lsquo;bottom&rsquo;.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.intervals" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">intervals</a></td><td class=SDescription>Array of ranges to be drawn around the gauge. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.intervalColors" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">intervalColors</a></td><td class=SDescription>Array of colors to use for the intervals.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.intervalInnerRadius" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">intervalInnerRadius</a></td><td class=SDescription>Radius of the inner circle of the interval ring.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.intervalOuterRadius" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')">intervalOuterRadius</a></td><td class=SDescription>Radius of the outer circle of the interval ring.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.tickSpacing" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')">tickSpacing</a></td><td class=SDescription>Degrees between ticks. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.hubRadius" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')">hubRadius</a></td><td class=SDescription>Radius of the hub at the bottom center of gauge which the needle attaches to. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.tickPadding" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')">tickPadding</a></td><td class=SDescription>padding of the tick marks to the outer ring and the tick labels to marks. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.needleThickness" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')">needleThickness</a></td><td class=SDescription>Maximum thickness the needle. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.needlePad" id=link26 onMouseOver="ShowTip(event, 'tt26', 'link26')" onMouseOut="HideTip('tt26')">needlePad</a></td><td class=SDescription>Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.MeterGaugeRenderer.pegNeedle" id=link27 onMouseOver="ShowTip(event, 'tt27', 'link27')" onMouseOut="HideTip('tt27')">pegNeedle</a></td><td class=SDescription>True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is &ldquo;pegged&rdquo;.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.diameter"></a>diameter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote><p>Outer diameter of the meterGauge, auto computed by default</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.padding"></a>padding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = null</td></tr></table></blockquote><p>padding between the meterGauge and plot edges, auto calculated by default.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote><p>offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote><p>transparency of the shadow (0 = transparent, 1 = opaque)</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 4</td></tr></table></blockquote><p>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.background"></a>background</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = &quot;#efefef&quot;</td></tr></table></blockquote><p>background color of the inside of the gauge.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.ringColor"></a>ringColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringColor = &quot;#BBC6D0&quot;</td></tr></table></blockquote><p>color of the outer ring, hub, and needle of the gauge.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.tickColor"></a>tickColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickColor = &quot;989898&quot;</td></tr></table></blockquote><p>color of the tick marks around the gauge.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.ringWidth"></a>ringWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringWidth = null</td></tr></table></blockquote><p>width of the ring around the gauge.&nbsp; Auto computed by default.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.min"></a>min</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min</td></tr></table></blockquote><p>Minimum value on the gauge.&nbsp; Auto computed by default</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.max"></a>max</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max</td></tr></table></blockquote><p>Maximum value on the gauge.&nbsp; Auto computed by default</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.ticks"></a>ticks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote><p>Array of tick values.&nbsp; Auto computed by default.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.showTicks"></a>showTicks</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote><p>true to show ticks around gauge.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.showTickLabels"></a>showTickLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickLabels = true</td></tr></table></blockquote><p>true to show tick labels next to ticks.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.label"></a>label</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote><p>A gauge label like &lsquo;kph&rsquo; or &lsquo;Volts&rsquo;</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.labelHeightAdjust"></a>labelHeightAdjust</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelHeightAdjust = 0</td></tr></table></blockquote><p>Number of Pixels to offset the label up (-) or down (+) from its default position.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.labelPosition"></a>labelPosition</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'inside'</td></tr></table></blockquote><p>Where to position the label, either &lsquo;inside&rsquo; or &lsquo;bottom&rsquo;.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.intervals"></a>intervals</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervals = []</td></tr></table></blockquote><p>Array of ranges to be drawn around the gauge.&nbsp; Array of form:</p><blockquote><pre>[value1, value2, ...]</pre></blockquote><p>indicating the values for the first, second, ... intervals.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.intervalColors"></a>intervalColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalColors = [ &quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;]</td></tr></table></blockquote><p>Array of colors to use for the intervals.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.intervalInnerRadius"></a>intervalInnerRadius</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalInnerRadius = null</td></tr></table></blockquote><p>Radius of the inner circle of the interval ring.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.intervalOuterRadius"></a>intervalOuterRadius</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalOuterRadius = null</td></tr></table></blockquote><p>Radius of the outer circle of the interval ring.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.tickSpacing"></a>tickSpacing</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 30</td></tr></table></blockquote><p>Degrees between ticks.&nbsp; This is a target number, if incompatible span and ticks are supplied, a suitable spacing close to this value will be computed.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.hubRadius"></a>hubRadius</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hubRadius = null</td></tr></table></blockquote><p>Radius of the hub at the bottom center of gauge which the needle attaches to.&nbsp; Auto computed by default</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.tickPadding"></a>tickPadding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickPadding = null</td></tr></table></blockquote><p>padding of the tick marks to the outer ring and the tick labels to marks.&nbsp; Auto computed by default.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.needleThickness"></a>needleThickness</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needleThickness = null</td></tr></table></blockquote><p>Maximum thickness the needle.&nbsp; Auto computed by default.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.needlePad"></a>needlePad</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needlePad = 6</td></tr></table></blockquote><p>Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.MeterGaugeRenderer.pegNeedle"></a>pegNeedle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pegNeedle = true</td></tr></table></blockquote><p>True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is &ldquo;pegged&rdquo;.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>MeterGaugeRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the meterGauge, auto computed by default</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = null</td></tr></table></blockquote>padding between the meterGauge and plot edges, auto calculated by default.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 4</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = &quot;#efefef&quot;</td></tr></table></blockquote>background color of the inside of the gauge.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringColor = &quot;#BBC6D0&quot;</td></tr></table></blockquote>color of the outer ring, hub, and needle of the gauge.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickColor = &quot;989898&quot;</td></tr></table></blockquote>color of the tick marks around the gauge.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringWidth = null</td></tr></table></blockquote>width of the ring around the gauge. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min</td></tr></table></blockquote>Minimum value on the gauge. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max</td></tr></table></blockquote>Maximum value on the gauge. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>Array of tick values. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>true to show ticks around gauge.</div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickLabels = true</td></tr></table></blockquote>true to show tick labels next to ticks.</div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>A gauge label like &lsquo;kph&rsquo; or &lsquo;Volts&rsquo;</div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelHeightAdjust = 0</td></tr></table></blockquote>Number of Pixels to offset the label up (-) or down (+) from its default position.</div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'inside'</td></tr></table></blockquote>Where to position the label, either &lsquo;inside&rsquo; or &lsquo;bottom&rsquo;.</div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervals = []</td></tr></table></blockquote>Array of ranges to be drawn around the gauge. </div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalColors = [ &quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;]</td></tr></table></blockquote>Array of colors to use for the intervals.</div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalInnerRadius = null</td></tr></table></blockquote>Radius of the inner circle of the interval ring.</div></div><div class=CToolTip id="tt21"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalOuterRadius = null</td></tr></table></blockquote>Radius of the outer circle of the interval ring.</div></div><div class=CToolTip id="tt22"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 30</td></tr></table></blockquote>Degrees between ticks. </div></div><div class=CToolTip id="tt23"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hubRadius = null</td></tr></table></blockquote>Radius of the hub at the bottom center of gauge which the needle attaches to. </div></div><div class=CToolTip id="tt24"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickPadding = null</td></tr></table></blockquote>padding of the tick marks to the outer ring and the tick labels to marks. </div></div><div class=CToolTip id="tt25"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needleThickness = null</td></tr></table></blockquote>Maximum thickness the needle. </div></div><div class=CToolTip id="tt26"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needlePad = 6</td></tr></table></blockquote>Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.</div></div><div class=CToolTip id="tt27"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pegNeedle = true</td></tr></table></blockquote>True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is &ldquo;pegged&rdquo;.</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html
deleted file mode 100644
index 2a200898..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-ohlcRenderer-js.html
+++ /dev/null
@@ -1,65 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.OHLCRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.OHLCRenderer"></a>$.jqplot.<wbr>OHLCRenderer</div><div class=CBody><p>jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.</p><p>To use this plugin, include the renderer js file in your source:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.ohlcRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>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:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.dateAxisRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><h4 class=CHeading>Then you set the renderer in the series options on your plot</h4><blockquote><pre>series: [{renderer:$.jqplot.OHLCRenderer}]</pre></blockquote><p>For OHLC and candlestick charts, data should be specified like so:</p><blockquote><pre>dat = [['07/06/2009',138.7,139.68,135.18,135.4], ['06/29/2009',143.46,144.66,139.79,140.02], ...]</pre></blockquote><p>If the data array has only 4 values per point instead of 5, the renderer will create a Hi Low Close chart instead.&nbsp; In that case, data should be supplied like:</p><blockquote><pre>dat = [['07/06/2009',139.68,135.18,135.4], ['06/29/2009',144.66,139.79,140.02], ...]</pre></blockquote><p>To generate a candlestick chart instead of an OHLC chart, set the &ldquo;candlestick&rdquo; option to true:</p><blockquote><pre>series: [{renderer:$.jqplot.OHLCRenderer, rendererOptions:{candleStick:true}}],</pre></blockquote><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.OHLCRenderer" >$.jqplot.<wbr>OHLCRenderer</a></td><td class=SDescription>jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.candleStick" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">candleStick</a></td><td class=SDescription>true to render chart as candleStick. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.tickLength" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">tickLength</a></td><td class=SDescription>length of the line in pixels indicating open and close price. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.bodyWidth" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">bodyWidth</a></td><td class=SDescription>width of the candlestick body in pixels. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.openColor" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">openColor</a></td><td class=SDescription>color of the open price tick mark. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.closeColor" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">closeColor</a></td><td class=SDescription>color of the close price tick mark. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.wickColor" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">wickColor</a></td><td class=SDescription>color of the hi-lo line thorugh the candlestick body. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.fillUpBody" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">fillUpBody</a></td><td class=SDescription>true to render an &ldquo;up&rdquo; day (close price greater than open price) with a filled candlestick body.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.fillDownBody" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">fillDownBody</a></td><td class=SDescription>true to render a &ldquo;down&rdquo; day (close price lower than open price) with a filled candlestick body.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.upBodyColor" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">upBodyColor</a></td><td class=SDescription>Color of candlestick body of an &ldquo;up&rdquo; day. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.downBodyColor" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">downBodyColor</a></td><td class=SDescription>Color of candlestick body on a &ldquo;down&rdquo; day. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.hlc" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">hlc</a></td><td class=SDescription>true if is a hi-low-close chart (no open price). </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.OHLCRenderer.lineWidth" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">lineWidth</a></td><td class=SDescription>Width of the hi-low line and open/close ticks. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.candleStick"></a>candleStick</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.candleStick = false</td></tr></table></blockquote><p>true to render chart as candleStick.&nbsp; Must have an open price, cannot be a hlc chart.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.tickLength"></a>tickLength</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickLength = 'auto'</td></tr></table></blockquote><p>length of the line in pixels indicating open and close price.&nbsp; Default will auto calculate based on plot width and number of points displayed.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.bodyWidth"></a>bodyWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bodyWidth = 'auto'</td></tr></table></blockquote><p>width of the candlestick body in pixels.&nbsp; Default will auto calculate based on plot width and number of candlesticks displayed.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.openColor"></a>openColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.openColor = null</td></tr></table></blockquote><p>color of the open price tick mark.&nbsp; Default is series color.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.closeColor"></a>closeColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.closeColor = null</td></tr></table></blockquote><p>color of the close price tick mark.&nbsp; Default is series color.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.wickColor"></a>wickColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.wickColor = null</td></tr></table></blockquote><p>color of the hi-lo line thorugh the candlestick body.&nbsp; Default is the series color.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.fillUpBody"></a>fillUpBody</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillUpBody = false</td></tr></table></blockquote><p>true to render an &ldquo;up&rdquo; day (close price greater than open price) with a filled candlestick body.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.fillDownBody"></a>fillDownBody</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillDownBody = true</td></tr></table></blockquote><p>true to render a &ldquo;down&rdquo; day (close price lower than open price) with a filled candlestick body.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.upBodyColor"></a>upBodyColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.upBodyColor = null</td></tr></table></blockquote><p>Color of candlestick body of an &ldquo;up&rdquo; day.&nbsp; Default is series color.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.downBodyColor"></a>downBodyColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.downBodyColor = null</td></tr></table></blockquote><p>Color of candlestick body on a &ldquo;down&rdquo; day.&nbsp; Default is series color.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.hlc"></a>hlc</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hlc = false</td></tr></table></blockquote><p>true if is a hi-low-close chart (no open price).&nbsp; This is determined automatically from the series data.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.OHLCRenderer.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote><p>Width of the hi-low line and open/close ticks.&nbsp; Must be set in the rendererOptions for the series.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>OHLCRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.candleStick = false</td></tr></table></blockquote>true to render chart as candleStick. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickLength = 'auto'</td></tr></table></blockquote>length of the line in pixels indicating open and close price. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bodyWidth = 'auto'</td></tr></table></blockquote>width of the candlestick body in pixels. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.openColor = null</td></tr></table></blockquote>color of the open price tick mark. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.closeColor = null</td></tr></table></blockquote>color of the close price tick mark. </div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.wickColor = null</td></tr></table></blockquote>color of the hi-lo line thorugh the candlestick body. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillUpBody = false</td></tr></table></blockquote>true to render an &ldquo;up&rdquo; day (close price greater than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillDownBody = true</td></tr></table></blockquote>true to render a &ldquo;down&rdquo; day (close price lower than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.upBodyColor = null</td></tr></table></blockquote>Color of candlestick body of an &ldquo;up&rdquo; day. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.downBodyColor = null</td></tr></table></blockquote>Color of candlestick body on a &ldquo;down&rdquo; day. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hlc = false</td></tr></table></blockquote>true if is a hi-low-close chart (no open price). </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the hi-low line and open/close ticks. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html
deleted file mode 100644
index 5e254102..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pieRenderer-js.html
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.PieRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.PieRenderer"></a>$.jqplot.<wbr>PieRenderer</div><div class=CBody><p>Plugin renderer to draw a pie chart. x values, if present, will be used as slice labels. y values give slice size.</p><p>To use this renderer, you need to include the pie renderer plugin, for example:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.pieRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Properties described here are passed into the $.jqplot function as options on the series renderer.&nbsp; For example:</p><blockquote><pre>plot2 = $.jqplot('chart2', [s1, s2], {
- seriesDefaults: {
- renderer:$.jqplot.PieRenderer,
- rendererOptions:{
- sliceMargin: 2,
- startAngle: -90
- }
- }
-});</pre></blockquote><p>A pie plot will trigger events on the plot target according to user interaction.&nbsp; All events return the event object, the series index, the point (slice) index, and the point data for the appropriate slice.</p><table border=0 cellspacing=0 cellpadding=0 class=CDescriptionList><tr><td class=CDLEntry>&rsquo;jqplotDataMouseOver&rsquo;</td><td class=CDLDescription>triggered when user mouseing over a slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataHighlight&rsquo;</td><td class=CDLDescription>triggered the first time user mouses over a slice, if highlighting is enabled.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataUnhighlight&rsquo;</td><td class=CDLDescription>triggered when a user moves the mouse out of a highlighted slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataClick&rsquo;</td><td class=CDLDescription>triggered when the user clicks on a slice.</td></tr><tr><td class=CDLEntry>&rsquo;jqplotDataRightClick&rsquo;</td><td class=CDLDescription>tiggered when the user right clicks on a slice if the &ldquo;captureRightClick&rdquo; option is set to true on the plot.</td></tr></table><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.PieRenderer" >$.jqplot.<wbr>PieRenderer</a></td><td class=SDescription>Plugin renderer to draw a pie chart. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.PieRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.diameter" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">diameter</a></td><td class=SDescription>Outer diameter of the pie, auto computed by default</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.padding" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">padding</a></td><td class=SDescription>padding between the pie and plot edges, legend, etc.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.sliceMargin" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">sliceMargin</a></td><td class=SDescription>angular spacing between pie slices in degrees.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.fill" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">fill</a></td><td class=SDescription>true or false, wether to fil the slices.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.shadowOffset" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">shadowOffset</a></td><td class=SDescription>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.shadowAlpha" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">shadowAlpha</a></td><td class=SDescription>transparency of the shadow (0 = transparent, 1 = opaque)</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.shadowDepth" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">shadowDepth</a></td><td class=SDescription>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.highlightMouseOver" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">highlightMouseOver</a></td><td class=SDescription>True to highlight slice when moused over. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.highlightMouseDown" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a slice. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.highlightColors" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">highlightColors</a></td><td class=SDescription>an array of colors to use when highlighting a slice.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabels" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">dataLabels</a></td><td class=SDescription>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.showDataLabels" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">showDataLabels</a></td><td class=SDescription>true to show data labels on slices.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabelFormatString" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">dataLabelFormatString</a></td><td class=SDescription>Format string for data labels. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabelThreshold" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')">dataLabelThreshold</a></td><td class=SDescription>Threshhold in percentage (0-100) of pie area, below which no label will be displayed. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabelPositionFactor" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')">dataLabelPositionFactor</a></td><td class=SDescription>A Multiplier (0-1) of the pie radius which controls position of label on slice. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabelNudge" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')">dataLabelNudge</a></td><td class=SDescription>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieRenderer.dataLabelCenterOn" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')">dataLabelCenterOn</a></td><td class=SDescription>True to center the data label at its position. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieRenderer.startAngle" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')">startAngle</a></td><td class=SDescription>Angle to start drawing pie in degrees. </td></tr><tr class="SClass"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer" >$.jqplot.<wbr>PieLegendRenderer</a></td><td class=SDescription>Legend Renderer specific to pie plots. </td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.numberRows" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.numberColumns" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.diameter"></a>diameter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote><p>Outer diameter of the pie, auto computed by default</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.padding"></a>padding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote><p>padding between the pie and plot edges, legend, etc.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.sliceMargin"></a>sliceMargin</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote><p>angular spacing between pie slices in degrees.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote><p>true or false, wether to fil the slices.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote><p>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote><p>transparency of the shadow (0 = transparent, 1 = opaque)</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote><p>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight slice when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a slice.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a slice.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>an array of colors to use when highlighting a slice.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabels"></a>dataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote><p>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices.&nbsp; Defaults to percentage of each pie slice.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.showDataLabels"></a>showDataLabels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote><p>true to show data labels on slices.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabelFormatString"></a>dataLabelFormatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote><p>Format string for data labels.&nbsp; If none, &lsquo;%s&rsquo; is used for &ldquo;label&rdquo; and for arrays, &lsquo;%d&rsquo; for value and &lsquo;%d%%&rsquo; for percentage.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabelThreshold"></a>dataLabelThreshold</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote><p>Threshhold in percentage (0-100) of pie area, below which no label will be displayed.&nbsp; This applies to all label types, not just to percentage labels.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabelPositionFactor"></a>dataLabelPositionFactor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.52</td></tr></table></blockquote><p>A Multiplier (0-1) of the pie radius which controls position of label on slice.&nbsp; Increasing will slide label toward edge of pie, decreasing will slide label toward center of pie.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabelNudge"></a>dataLabelNudge</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 2</td></tr></table></blockquote><p>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.dataLabelCenterOn"></a>dataLabelCenterOn</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelCenterOn = true</td></tr></table></blockquote><p>True to center the data label at its position.&nbsp; False to set the inside facing edge of the label at its position.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieRenderer.startAngle"></a>startAngle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote><p>Angle to start drawing pie in degrees.&nbsp; According to orientation of canvas coordinate system: 0 = on the positive x axis -90 = on the positive y axis.&nbsp; 90 = on the negaive y axis.&nbsp; 180 or - 180 = on the negative x axis.</p></div></div></div>
-
-<div class="CClass"><div class=CTopic><h2 class=CTitle><a name="$.jqplot.PieLegendRenderer"></a>$.jqplot.<wbr>PieLegendRenderer</h2><div class=CBody><p>Legend Renderer specific to pie plots.&nbsp; Set by default when user creates a pie plot.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SGroup"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.numberRows" id=link21 onMouseOver="ShowTip(event, 'tt19', 'link21')" onMouseOut="HideTip('tt19')">numberRows</a></td><td class=SDescription>Maximum number of rows in the legend. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#$.jqplot.PieLegendRenderer.numberColumns" id=link22 onMouseOver="ShowTip(event, 'tt20', 'link22')" onMouseOut="HideTip('tt20')">numberColumns</a></td><td class=SDescription>Maximum number of columns in the legend. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieLegendRenderer.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieLegendRenderer.numberRows"></a>numberRows</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote><p>Maximum number of rows in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PieLegendRenderer.numberColumns"></a>numberColumns</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote><p>Maximum number of columns in the legend.&nbsp; 0 or null for unlimited.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>PieRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the pie, auto computed by default</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote>padding between the pie and plot edges, legend, etc.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between pie slices in degrees.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt14"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote>Threshhold in percentage (0-100) of pie area, below which no label will be displayed. </div></div><div class=CToolTip id="tt15"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.52</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 2</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelCenterOn = true</td></tr></table></blockquote>True to center the data label at its position. </div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing pie in degrees. </div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pointLabels-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pointLabels-js.html
deleted file mode 100644
index 36d309c8..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pointLabels-js.html
+++ /dev/null
@@ -1,72 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.PointLabels</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.PointLabels"></a>$.jqplot.<wbr>PointLabels</div><div class=CBody><p>Plugin for putting labels at the data points.</p><p>To use this plugin, include the js file in your source:</p><blockquote><pre>&lt;script type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.pointLabels.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>By default, the last value in the data ponit array in the data series is used for the label.&nbsp; For most series renderers, extra data can be added to the data point arrays and the last value will be used as the label.</p><p>For instance, this series:</p><blockquote><pre>[[1,4], [3,5], [7,2]]</pre></blockquote><p>Would, by default, use the y values in the labels.&nbsp; Extra data can be added to the series like so:</p><blockquote><pre>[[1,4,'mid'], [3 5,'hi'], [7,2,'low']]</pre></blockquote><p>And now the point labels would be &lsquo;mid&rsquo;, &lsquo;low&rsquo;, and &lsquo;hi&rsquo;.</p><p>Options to the point labels and a custom labels array can be passed into the &ldquo;pointLabels&rdquo; option on the series option like so:</p><blockquote><pre>series:[{pointLabels:{
- labels:['mid', 'hi', 'low'],
- location:'se',
- ypadding: 12
- }
-}]</pre></blockquote><p>A custom labels array in the options takes precendence over any labels in the series data.&nbsp; If you have a custom labels array in the options, but still want to use values from the series array as labels, set the &ldquo;labelsFromSeries&rdquo; option to true.</p><p>By default, html entities (&lt;, &gt;, etc.) are escaped in point labels.&nbsp; If you want to include actual html markup in the labels, set the &ldquo;escapeHTML&rdquo; option to false.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.PointLabels" >$.jqplot.<wbr>PointLabels</a></td><td class=SDescription>Plugin for putting labels at the data points.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.PointLabels.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.show" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">show</a></td><td class=SDescription>show the labels or not.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.location" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">location</a></td><td class=SDescription>compass location where to position the label around the point. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.labelsFromSeries" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">labelsFromSeries</a></td><td class=SDescription>true to use labels within data point arrays.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.seriesLabelIndex" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">seriesLabelIndex</a></td><td class=SDescription>array index for location of labels within data point arrays. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.labels" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">labels</a></td><td class=SDescription>array of arrays of labels, one array for each series.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.stackedValue" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">stackedValue</a></td><td class=SDescription>true to display value as stacked in a stacked plot. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.ypadding" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">ypadding</a></td><td class=SDescription>vertical padding in pixels between point and label</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.xpadding" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">xpadding</a></td><td class=SDescription>horizontal padding in pixels between point and label</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.escapeHTML" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">escapeHTML</a></td><td class=SDescription>true to escape html entities in the labels. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.edgeTolerance" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">edgeTolerance</a></td><td class=SDescription>Number of pixels that the label must be away from an axis boundary in order to be drawn. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.formatter" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">formatter</a></td><td class=SDescription>A class of a formatter for the tick text. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.PointLabels.formatString" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">formatString</a></td><td class=SDescription>string passed to the formatter.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.PointLabels.hideZeros" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">hideZeros</a></td><td class=SDescription>true to not show a label for a value which is 0.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote><p>show the labels or not.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.location"></a>location</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'n'</td></tr></table></blockquote><p>compass location where to position the label around the point.&nbsp; &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.labelsFromSeries"></a>labelsFromSeries</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelsFromSeries = false</td></tr></table></blockquote><p>true to use labels within data point arrays.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.seriesLabelIndex"></a>seriesLabelIndex</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesLabelIndex = null</td></tr></table></blockquote><p>array index for location of labels within data point arrays. if null, will use the last element of the data point array.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.labels"></a>labels</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote><p>array of arrays of labels, one array for each series.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.stackedValue"></a>stackedValue</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackedValue = false</td></tr></table></blockquote><p>true to display value as stacked in a stacked plot. no effect if labels is specified.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.ypadding"></a>ypadding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ypadding = 6</td></tr></table></blockquote><p>vertical padding in pixels between point and label</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.xpadding"></a>xpadding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xpadding = 6</td></tr></table></blockquote><p>horizontal padding in pixels between point and label</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.escapeHTML"></a>escapeHTML</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = true</td></tr></table></blockquote><p>true to escape html entities in the labels.&nbsp; If you want to include markup in the labels, set to false.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.edgeTolerance"></a>edgeTolerance</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.edgeTolerance = -5</td></tr></table></blockquote><p>Number of pixels that the label must be away from an axis boundary in order to be drawn.&nbsp; Negative values will allow overlap with the grid boundaries.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.formatter"></a>formatter</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote><p>A class of a formatter for the tick text.&nbsp; sprintf by default.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.formatString"></a>formatString</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote><p>string passed to the formatter.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.PointLabels.hideZeros"></a>hideZeros</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hideZeros = false</td></tr></table></blockquote><p>true to not show a label for a value which is 0.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>PointLabels</div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>show the labels or not.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'n'</td></tr></table></blockquote>compass location where to position the label around the point. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelsFromSeries = false</td></tr></table></blockquote>true to use labels within data point arrays.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesLabelIndex = null</td></tr></table></blockquote>array index for location of labels within data point arrays. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>array of arrays of labels, one array for each series.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackedValue = false</td></tr></table></blockquote>true to display value as stacked in a stacked plot. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ypadding = 6</td></tr></table></blockquote>vertical padding in pixels between point and label</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xpadding = 6</td></tr></table></blockquote>horizontal padding in pixels between point and label</div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = true</td></tr></table></blockquote>true to escape html entities in the labels. </div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.edgeTolerance = -5</td></tr></table></blockquote>Number of pixels that the label must be away from an axis boundary in order to be drawn. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hideZeros = false</td></tr></table></blockquote>true to not show a label for a value which is 0.</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidAxisRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidAxisRenderer-js.html
deleted file mode 100644
index 4cf690b7..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidAxisRenderer-js.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>/Users/chris/Sites/lib/jqplot/build/plugins/jqplot.pyramidAxisRenderer.js</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqplot.pyramidAxisRenderer.js"></a>jqplot.<wbr>pyramidAxisRenderer.js</div><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#jqplot.pyramidAxisRenderer.js" >jqplot.<wbr>pyramidAxisRenderer.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#position" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">position</a></td><td class=SDescription>Position of axis. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#drawBaseline" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">drawBaseline</a></td><td class=SDescription>True to draw the axis baseline.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#baselineWidth" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">baselineWidth</a></td><td class=SDescription>width of the baseline in pixels.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#baselineColor" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">baselineColor</a></td><td class=SDescription>CSS color spec for the baseline.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="position"></a>position</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.position = null</td></tr></table></blockquote><p>Position of axis.&nbsp; Values are: top, bottom , left, center, right.&nbsp; By default, x and x2 axes are bottom, y axis is center.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="drawBaseline"></a>drawBaseline</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote><p>True to draw the axis baseline.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="baselineWidth"></a>baselineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote><p>width of the baseline in pixels.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="baselineColor"></a>baselineColor</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote><p>CSS color spec for the baseline.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>pyramidAxisRenderer.js</div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.position = null</td></tr></table></blockquote>Position of axis. </div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidGridRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidGridRenderer-js.html
deleted file mode 100644
index 2755c0ec..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidGridRenderer-js.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.CanvasGridRenderer</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.CanvasGridRenderer"></a>$.jqplot.<wbr>CanvasGridRenderer</div><div class=CBody><p>The default jqPlot grid renderer, creating a grid on a canvas element.&nbsp; The renderer has no additional options beyond the <a href="../jqplot-core-js.html#Grid" class=LClass id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">Grid</a> class.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>CanvasGridRenderer</div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>Object representing the grid on which the plot is drawn. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidRenderer-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidRenderer-js.html
deleted file mode 100644
index 3ff6678d..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-pyramidRenderer-js.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>/Users/chris/Sites/lib/jqplot/build/plugins/jqplot.pyramidRenderer.js</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CFile"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqplot.pyramidRenderer.js"></a>jqplot.<wbr>pyramidRenderer.js</div><div class=CBody><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#jqplot.pyramidRenderer.js" >jqplot.<wbr>pyramidRenderer.js</a></td><td class=SDescription></td></tr><tr class="SGroup"><td class=SEntry><a href="#Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#barPadding" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">barPadding</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#fill" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">fill</a></td><td class=SDescription>True to fill the bars.</td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#highlightMouseOver" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">highlightMouseOver</a></td><td class=SDescription>True to highlight slice when moused over. </td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#highlightMouseDown" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">highlightMouseDown</a></td><td class=SDescription>True to highlight when a mouse button is pressed over a slice. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#highlightColors" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">highlightColors</a></td><td class=SDescription>an array of colors to use when highlighting a slice.</td></tr><tr class="SProperty SIndent1"><td class=SEntry><a href="#synchronizeHighlight" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">synchronizeHighlight</a></td><td class=SDescription>Index of another series to highlight when this series is highlighted. </td></tr><tr class="SProperty SIndent1 SMarked"><td class=SEntry><a href="#offsetBars" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">offsetBars</a></td><td class=SDescription>False will center bars on their y value. </td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="barPadding"></a>barPadding</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 10</td></tr></table></blockquote></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="fill"></a>fill</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote><p>True to fill the bars.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="highlightMouseOver"></a>highlightMouseOver</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote><p>True to highlight slice when moused over.&nbsp; This must be false to enable highlightMouseDown to highlight when clicking on a slice.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="highlightMouseDown"></a>highlightMouseDown</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote><p>True to highlight when a mouse button is pressed over a slice.&nbsp; This will be disabled if highlightMouseOver is true.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="highlightColors"></a>highlightColors</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote><p>an array of colors to use when highlighting a slice.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="synchronizeHighlight"></a>synchronizeHighlight</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.synchronizeHighlight = false</td></tr></table></blockquote><p>Index of another series to highlight when this series is highlighted. null or false to not synchronize.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="offsetBars"></a>offsetBars</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offsetBars = false</td></tr></table></blockquote><p>False will center bars on their y value.&nbsp; True will push bars up by 1/2 bar width to fill between their y values.&nbsp; If true, there needs to be 1 more tick than there are bars.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>pyramidRenderer.js</div></div><div class=MEntry><div class=MFile><a href="jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 10</td></tr></table></blockquote></div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>True to fill the bars.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.synchronizeHighlight = false</td></tr></table></blockquote>Index of another series to highlight when this series is highlighted. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offsetBars = false</td></tr></table></blockquote>False will center bars on their y value. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-trendline-js.html b/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-trendline-js.html
deleted file mode 100644
index e773b711..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/plugins/jqplot-trendline-js.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>$.jqplot.Trendline</title><link rel="stylesheet" type="text/css" href="../../styles/main.css"><script language=JavaScript src="../../javascript/main.js"></script><script language=JavaScript src="../../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CClass"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../../donate.php"><span>&gt;</span>Donate</a></div><a name="$.jqplot.Trendline"></a>$.jqplot.<wbr>Trendline</div><div class=CBody><p>Plugin which will automatically compute and draw trendlines for plotted data.</p><!--START_ND_SUMMARY--><div class=Summary><div class=STitle>Summary</div><div class=SBorder><table border=0 cellspacing=0 cellpadding=0 class=STable><tr class="SMain"><td class=SEntry><a href="#$.jqplot.Trendline" >$.jqplot.<wbr>Trendline</a></td><td class=SDescription>Plugin which will automatically compute and draw trendlines for plotted data.</td></tr><tr class="SGroup SIndent1"><td class=SEntry><a href="#$.jqplot.Trendline.Properties" >Properties</a></td><td class=SDescription></td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.show" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">show</a></td><td class=SDescription>Wether or not to show the trend line.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.color" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')">color</a></td><td class=SDescription>CSS color spec for the trend line. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.renderer" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')">renderer</a></td><td class=SDescription>Renderer to use to draw the trend line. </td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.rendererOptions" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')">rendererOptions</a></td><td class=SDescription>Options to pass to the line renderer. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.label" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')">label</a></td><td class=SDescription>Label for the trend line to use in the legend.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.type" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')">type</a></td><td class=SDescription>Either &lsquo;exponential&rsquo;, &lsquo;exp&rsquo;, or &lsquo;linear&rsquo;.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.shadow" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')">shadow</a></td><td class=SDescription>true or false, wether or not to show the shadow.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.markerRenderer" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')">markerRenderer</a></td><td class=SDescription>Renderer to use to draw markers on the line. </td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.lineWidth" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')">lineWidth</a></td><td class=SDescription>Width of the trend line.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.shadowAngle" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')">shadowAngle</a></td><td class=SDescription>Angle of the shadow on the trend line.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.shadowOffset" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')">shadowOffset</a></td><td class=SDescription>pixel offset for each stroke of the shadow.</td></tr><tr class="SProperty SIndent2"><td class=SEntry><a href="#$.jqplot.Trendline.shadowAlpha" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')">shadowAlpha</a></td><td class=SDescription>Alpha transparency of the shadow.</td></tr><tr class="SProperty SIndent2 SMarked"><td class=SEntry><a href="#$.jqplot.Trendline.shadowDepth" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')">shadowDepth</a></td><td class=SDescription>number of strokes to make of the shadow.</td></tr></table></div></div><!--END_ND_SUMMARY--></div></div></div>
-
-<div class="CGroup"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.Properties"></a>Properties</h3></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.show"></a>show</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote><p>Wether or not to show the trend line.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.color"></a>color</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote><p>CSS color spec for the trend line.&nbsp; By default this wil be the same color as the primary line.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.renderer"></a>renderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = new $.jqplot.LineRenderer()</td></tr></table></blockquote><p>Renderer to use to draw the trend line.&nbsp; The data series that is plotted may not be rendered as a line.&nbsp; Therefore, we use our own line renderer here to draw a trend line.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.rendererOptions"></a>rendererOptions</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {marker:{show:false}}</td></tr></table></blockquote><p>Options to pass to the line renderer.&nbsp; By default, markers are not shown on trend lines.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.label"></a>label</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote><p>Label for the trend line to use in the legend.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.type"></a>type</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.type = 'linear'</td></tr></table></blockquote><p>Either &lsquo;exponential&rsquo;, &lsquo;exp&rsquo;, or &lsquo;linear&rsquo;.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.shadow"></a>shadow</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote><p>true or false, wether or not to show the shadow.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.markerRenderer"></a>markerRenderer</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = {show:false}</td></tr></table></blockquote><p>Renderer to use to draw markers on the line.&nbsp; I think this is wrong.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.lineWidth"></a>lineWidth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote><p>Width of the trend line.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.shadowAngle"></a>shadowAngle</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote><p>Angle of the shadow on the trend line.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.shadowOffset"></a>shadowOffset</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.0</td></tr></table></blockquote><p>pixel offset for each stroke of the shadow.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.shadowAlpha"></a>shadowAlpha</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote><p>Alpha transparency of the shadow.</p></div></div></div>
-
-<div class="CProperty"><div class=CTopic><h3 class=CTitle><a name="$.jqplot.Trendline.shadowDepth"></a>shadowDepth</h3><div class=CBody><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote><p>number of strokes to make of the shadow.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile id=MSelected>jqplot.<wbr>Trendline</div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([3, 4], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>Wether or not to show the trend line.</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>CSS color spec for the trend line. </div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = new $.jqplot.LineRenderer()</td></tr></table></blockquote>Renderer to use to draw the trend line. </div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {marker:{show:false}}</td></tr></table></blockquote>Options to pass to the line renderer. </div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Label for the trend line to use in the legend.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.type = 'linear'</td></tr></table></blockquote>Either &lsquo;exponential&rsquo;, &lsquo;exp&rsquo;, or &lsquo;linear&rsquo;.</div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>true or false, wether or not to show the shadow.</div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = {show:false}</td></tr></table></blockquote>Renderer to use to draw markers on the line. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the trend line.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Angle of the shadow on the trend line.</div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.0</td></tr></table></blockquote>pixel offset for each stroke of the shadow.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>Alpha transparency of the shadow.</div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>number of strokes to make of the shadow.</div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/files/usage-txt.html b/wqflask/wqflask/static/packages/jqplot/docs/files/usage-txt.html
deleted file mode 100644
index d4d40098..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/files/usage-txt.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>jqPlot Usage</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="ContentPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id=Content><div class="CSection"><div class=CTopic id=MainTopic><div class="CTitle logo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div><a name="jqPlot_Usage"></a>jqPlot Usage</div><div class=CBody><h4 class=CHeading>Usage Documentation</h4><h4 class=CHeading>Introduction</h4><p>jqPlot is a jQuery plugin to generate pure client-side javascript charts in your web pages.</p><p>The jqPlot home page is at <a href="http://www.jqplot.com/" class=LURL target=_top>http://www.jqplot.com/</a>.</p><p>The project page and downloads are at <a href="http://www.bitbucket.org/cleonello/jqplot/" class=LURL target=_top>http://www.bitbucket.org/cleonello/jqplot/</a>.</p><p>Below are a few examples to demonstrate jqPlot usage.&nbsp; These plots are shown as static images.&nbsp; Many more examples of dynamically rendered plots can be seen on the test and examples pages here: <a href="../../tests/" class=LURL target=_top>../../tests/</a>.</p><h4 class=CHeading>Include the Files</h4><p>jqPlot requires jQuery (1.4+ required for certain features). jQuery is included in the distribution.&nbsp; To use jqPlot include jquery, the jqPlot jQuery plugin, jqPlot css file and optionally the excanvas script for IE support in your web page.&nbsp; Note, excanvas is required only for IE versions below 9.&nbsp; IE 9 includes native support for the canvas element and does not require excanvas:</p><blockquote><pre>&lt;!--[if lt IE 9]&gt;&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;excanvas.js&quot;&gt;&lt;/script&gt;&lt;![endif]--&gt;
-&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jquery.min.js&quot;&gt;&lt;/script&gt;
-&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jquery.jqplot.min.js&quot;&gt;&lt;/script&gt;
-&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;jquery.jqplot.css&quot; /&gt;</pre></blockquote><h4 class=CHeading>Add a plot container</h4><p>Add a container (target) to your web page where you want your plot to show up.&nbsp; Be sure to give your target a width and a height:</p><blockquote><pre>&lt;div id=&quot;chartdiv&quot; style=&quot;height:400px;width:300px; &quot;&gt;&lt;/div&gt;</pre></blockquote><h4 class=CHeading>Create a plot</h4><p>Then, create the actual plot by calling the $.jqplot plugin with the id of your target and some data:</p><blockquote><pre>$.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]);</pre></blockquote><p>Which will produce a chart like:</p><img src="images/basicline.png" width="416" height="317"><h4 class=CHeading>Plot Options</h4><p>You can customize the plot by passing options to the $.jqplot function.&nbsp; Options are described in <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')">jqPlot Options</a> in the jqPlotOptions.txt file.&nbsp; An example of options usage:</p><blockquote><pre>$.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'}]
-});</pre></blockquote><p>Which will produce a plot like:</p><img src="images/basicoptions.png" width="417" height="315"><h4 class=CHeading>Using Plugins</h4><p>You can use jqPlot plugins (that is, plugins to the jqPlot plugin) by including them in your html after you include the jqPlot plugin.&nbsp; Here is how to include the log axis plugin:</p><blockquote><pre>&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;jquery.jqplot.css&quot; /&gt;
-&lt;!--[if IE]&gt;&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;excanvas.js&quot;&gt;&lt;/script&gt;&lt;![endif]--&gt;
-&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jquery.min.js&quot;&gt;&lt;/script&gt;
-&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jquery.jqplot.min.js&quot;&gt;&lt;/script&gt;
-&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;jqplot.logAxisRenderer.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>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.&nbsp; Only plugins that can be immediately active upon loading are affected.&nbsp; This includes non-renderer plugins like cursor, dragable, highlighter, and trendline.</p><p>Here is a the same $.jqplot call but with a log y axis:</p><blockquote><pre>$.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'}]
-});</pre></blockquote><p>Which produces a plot like:</p><img src="images/basiclogaxis.png" width="416" height="312"><p>You can further customize with options specific to the log axis plugin:</p><blockquote><pre>$.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'}]
-});</pre></blockquote><p>Which makes a plot like:</p><img src="images/basiclogoptions.png" width="416" height="310"><p>For a full list of options, see <a href="jqPlotOptions-txt.html#jqPlot_Options" class=LSection id=link2 onMouseOver="ShowTip(event, 'tt1', 'link2')" onMouseOut="HideTip('tt1')">jqPlot Options</a> in the jqPlotOptions.txt file.</p><p>You can add as many plugins as you wish.&nbsp; Order is generally not important.&nbsp; Some plugins, like the highlighter plugin which highlights data points near the mouse, don&rsquo;t need any extra options or setup to function.&nbsp; Highlighter does have additional options which the user can set.</p><p>Other plugins, the barRenderer for example, provide functionality the must be specified in the chart options object.&nbsp; To render a series as a bar graph with the bar renderer, you would first include the plugin after jqPlot:</p><blockquote><pre>&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot; src=&quot;plugins/jqplot.barRenderer.min.js&quot;&gt;&lt;/script&gt;</pre></blockquote><p>Then you would create a chart like:</p><blockquote><pre>$.jqplot('chartdiv', [[34.53, 56.32, 25.1, 18.6]], {series:[{renderer:$.jqplot.BarRenderer}]});</pre></blockquote><p>Here the default LineRenderer is replaced by a BarRenderer to generate a bar graph for the first (an only) series.</p></div></div></div>
-
-</div><!--Content-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile id=MSelected>Usage</div></div><div class=MEntry><div class=MFile><a href="jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="../index/General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="../index/Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([1, 4, 5], 6);// --></script></div><!--Menu-->
-
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CSection><b>This document is out of date. </div></div><!--END_ND_TOOLTIPS-->
-
-
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index.html b/wqflask/wqflask/static/packages/jqplot/docs/index.html
deleted file mode 100644
index 295fd4a6..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index.html
+++ /dev/null
@@ -1 +0,0 @@
-<html><head><meta http-equiv="Refresh" CONTENT="0; URL=files/usage-txt.html"></head></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Classes.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Classes.html
deleted file mode 100644
index f34f9a3e..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/Classes.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Class Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Class Index</div><div class=INavigationBar><a href="#Symbols">$#!</a> &middot; 0-9 &middot; <a href="#A">A</a> &middot; B &middot; C &middot; <a href="#D">D</a> &middot; E &middot; F &middot; <a href="#G">G</a> &middot; <a href="#H">H</a> &middot; I &middot; <a href="#J">J</a> &middot; K &middot; <a href="#L">L</a> &middot; M &middot; N &middot; O &middot; P &middot; Q &middot; R &middot; <a href="#S">S</a> &middot; <a href="#T">T</a> &middot; U &middot; <a href="#V">V</a> &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="Symbols"></a>$#!</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-toImage-js.html#$.fn" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>$.fn</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>$.jqplot</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>$.jqplot.<wbr>AxisLabelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=ISymbol>$.jqplot.<wbr>AxisTickRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=ISymbol>$.jqplot.<wbr>BarRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>$.jqplot.<wbr>BezierCurveRenderer.js</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>$.jqplot.<wbr>BlockRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>$.jqplot.<wbr>BubbleRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>$.jqplot.<wbr>CanvasAxisLabelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>$.jqplot.<wbr>CanvasAxisTickRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>$.jqplot.<wbr>CanvasGridRenderer</span><div class=ISubIndex><a href="../files/jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=IFile>jqplot.<wbr>canvasGridRenderer.js</a><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html#$.jqplot.CanvasGridRenderer" id=link12 onMouseOver="ShowTip(event, 'tt11', 'link12')" onMouseOut="HideTip('tt11')" class=IFile>plugins/<wbr>jqplot.<wbr>pyramidGridRenderer.js</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay" class=ISymbol>$.jqplot.<wbr>CanvasOverlay</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer" id=link13 onMouseOver="ShowTip(event, 'tt12', 'link13')" onMouseOut="HideTip('tt12')" class=ISymbol>$.jqplot.<wbr>CategoryAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ciParser-js.html#$.jqplot.ciParser" id=link14 onMouseOver="ShowTip(event, 'tt13', 'link14')" onMouseOut="HideTip('tt13')" class=ISymbol>$.jqplot.<wbr>ciParser</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor" id=link15 onMouseOver="ShowTip(event, 'tt14', 'link15')" onMouseOut="HideTip('tt14')" class=ISymbol>$.jqplot.<wbr>Cursor</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer" id=link16 onMouseOver="ShowTip(event, 'tt15', 'link16')" onMouseOut="HideTip('tt15')" class=ISymbol>$.jqplot.<wbr>DateAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" id=link17 onMouseOver="ShowTip(event, 'tt16', 'link17')" onMouseOut="HideTip('tt16')" class=ISymbol>$.jqplot.<wbr>DivTitleRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer" id=link18 onMouseOver="ShowTip(event, 'tt17', 'link18')" onMouseOut="HideTip('tt17')" class=ISymbol>$.jqplot.<wbr>DonutLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer" id=link19 onMouseOver="ShowTip(event, 'tt18', 'link19')" onMouseOut="HideTip('tt18')" class=ISymbol>$.jqplot.<wbr>DonutRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable" id=link20 onMouseOver="ShowTip(event, 'tt19', 'link20')" onMouseOut="HideTip('tt19')" class=ISymbol>$.jqplot.<wbr>Dragable</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer" id=link21 onMouseOver="ShowTip(event, 'tt20', 'link21')" onMouseOut="HideTip('tt20')" class=ISymbol>$.jqplot.<wbr>FunnelLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer" id=link22 onMouseOver="ShowTip(event, 'tt21', 'link22')" onMouseOut="HideTip('tt21')" class=ISymbol>$.jqplot.<wbr>FunnelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter" id=link23 onMouseOver="ShowTip(event, 'tt22', 'link23')" onMouseOut="HideTip('tt22')" class=ISymbol>$.jqplot.<wbr>Highlighter</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer" id=link24 onMouseOver="ShowTip(event, 'tt23', 'link24')" onMouseOut="HideTip('tt23')" class=ISymbol>$.jqplot.<wbr>LinearAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" id=link25 onMouseOver="ShowTip(event, 'tt24', 'link25')" onMouseOut="HideTip('tt24')" class=ISymbol>$.jqplot.<wbr>LineRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer" id=link26 onMouseOver="ShowTip(event, 'tt25', 'link26')" onMouseOut="HideTip('tt25')" class=ISymbol>$.jqplot.<wbr>LogAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" id=link27 onMouseOver="ShowTip(event, 'tt26', 'link27')" onMouseOut="HideTip('tt26')" class=ISymbol>$.jqplot.<wbr>MarkerRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer" id=link28 onMouseOver="ShowTip(event, 'tt27', 'link28')" onMouseOut="HideTip('tt27')" class=ISymbol>$.jqplot.<wbr>MekkoAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer" id=link29 onMouseOver="ShowTip(event, 'tt28', 'link29')" onMouseOut="HideTip('tt28')" class=ISymbol>$.jqplot.<wbr>MekkoLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer" id=link30 onMouseOver="ShowTip(event, 'tt29', 'link30')" onMouseOut="HideTip('tt29')" class=ISymbol>$.jqplot.<wbr>MekkoRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer" id=link31 onMouseOver="ShowTip(event, 'tt30', 'link31')" onMouseOut="HideTip('tt30')" class=ISymbol>$.jqplot.<wbr>MeterGaugeRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer" id=link32 onMouseOver="ShowTip(event, 'tt31', 'link32')" onMouseOut="HideTip('tt31')" class=ISymbol>$.jqplot.<wbr>OHLCRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer" id=link33 onMouseOver="ShowTip(event, 'tt32', 'link33')" onMouseOut="HideTip('tt32')" class=ISymbol>$.jqplot.<wbr>PieLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer" id=link34 onMouseOver="ShowTip(event, 'tt33', 'link34')" onMouseOut="HideTip('tt33')" class=ISymbol>$.jqplot.<wbr>PieRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels" id=link35 onMouseOver="ShowTip(event, 'tt34', 'link35')" onMouseOut="HideTip('tt34')" class=ISymbol>$.jqplot.<wbr>PointLabels</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer" id=link36 onMouseOver="ShowTip(event, 'tt35', 'link36')" onMouseOut="HideTip('tt35')" class=ISymbol>$.jqplot.<wbr>shadowRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer" id=link37 onMouseOver="ShowTip(event, 'tt36', 'link37')" onMouseOut="HideTip('tt36')" class=ISymbol>$.jqplot.<wbr>shapeRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine" id=link38 onMouseOver="ShowTip(event, 'tt37', 'link38')" onMouseOut="HideTip('tt37')" class=ISymbol>$.jqplot.<wbr>ThemeEngine</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline" id=link39 onMouseOver="ShowTip(event, 'tt38', 'link39')" onMouseOut="HideTip('tt38')" class=ISymbol>$.jqplot.<wbr>Trendline</a></td></tr><tr><td class=IHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis" id=link40 onMouseOver="ShowTip(event, 'tt39', 'link40')" onMouseOut="HideTip('tt39')" class=ISymbol>Axis</a></td></tr><tr><td class=IHeading><a name="D"></a>D</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine" id=link41 onMouseOver="ShowTip(event, 'tt40', 'link41')" onMouseOut="HideTip('tt40')" class=ISymbol>DashedHorizontalLine</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine" id=link42 onMouseOver="ShowTip(event, 'tt41', 'link42')" onMouseOut="HideTip('tt41')" class=ISymbol>DashedVerticalLine</a></td></tr><tr><td class=IHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid" id=link43 onMouseOver="ShowTip(event, 'tt42', 'link43')" onMouseOut="HideTip('tt42')" class=ISymbol>Grid</a></td></tr><tr><td class=IHeading><a name="H"></a>H</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine" id=link44 onMouseOver="ShowTip(event, 'tt43', 'link44')" onMouseOut="HideTip('tt43')" class=ISymbol>HorizontalLine</a></td></tr><tr><td class=IHeading><a name="J"></a>J</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot" id=link45 onMouseOver="ShowTip(event, 'tt44', 'link45')" onMouseOut="HideTip('tt44')" class=ISymbol>jqPlot</a></td></tr><tr><td class=IHeading><a name="L"></a>L</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend" id=link46 onMouseOver="ShowTip(event, 'tt45', 'link46')" onMouseOut="HideTip('tt45')" class=ISymbol>Legend</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line" id=link47 onMouseOver="ShowTip(event, 'tt46', 'link47')" onMouseOut="HideTip('tt46')" class=ISymbol>Line</a></td></tr><tr><td class=IHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series" id=link48 onMouseOver="ShowTip(event, 'tt47', 'link48')" onMouseOut="HideTip('tt47')" class=ISymbol>Series</a></td></tr><tr><td class=IHeading><a name="T"></a>T</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title" id=link49 onMouseOver="ShowTip(event, 'tt48', 'link49')" onMouseOut="HideTip('tt48')" class=ISymbol>Title</a></td></tr><tr><td class=IHeading><a name="V"></a>V</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#VerticalLine" id=link50 onMouseOver="ShowTip(event, 'tt49', 'link50')" onMouseOut="HideTip('tt49')" class=ISymbol>VerticalLine</a></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>jQuery namespace to attach functions to jQuery elements.</div></div><div class=CToolTip id="tt2"><div class=CClass>jQuery function called by the user to create a plot.</div></div><div class=CToolTip id="tt3"><div class=CClass>Renderer to place labels on the axes.</div></div><div class=CToolTip id="tt4"><div class=CClass>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</div></div><div class=CToolTip id="tt5"><div class=CClass>A plugin renderer for jqPlot to draw a bar plot. </div></div><div class=CToolTip id="tt6"><div class=CClass>Renderer which draws lines as stacked bezier curves. </div></div><div class=CToolTip id="tt7"><div class=CClass>Plugin renderer to draw a x-y block chart. </div></div><div class=CToolTip id="tt8"><div class=CClass>Plugin renderer to draw a bubble chart. </div></div><div class=CToolTip id="tt9"><div class=CClass>Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text. </div></div><div class=CToolTip id="tt10"><div class=CClass>Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text. </div></div><div class=CToolTip id="tt11"><div class=CClass>The default jqPlot grid renderer, creating a grid on a canvas element. </div></div><div class=CToolTip id="tt12"><div class=CClass>A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.</div></div><div class=CToolTip id="tt13"><div class=CClass>Data Renderer function which converts a custom JSON data object into jqPlot data format. </div></div><div class=CToolTip id="tt14"><div class=CClass>Plugin class representing the cursor as displayed on the plot.</div></div><div class=CToolTip id="tt15"><div class=CClass>A plugin for a jqPlot to render an axis as a series of date values. </div></div><div class=CToolTip id="tt16"><div class=CClass>The default title renderer for jqPlot. </div></div><div class=CToolTip id="tt17"><div class=CClass>Legend Renderer specific to donut plots. </div></div><div class=CToolTip id="tt18"><div class=CClass>Plugin renderer to draw a donut chart. </div></div><div class=CToolTip id="tt19"><div class=CClass>Plugin to make plotted points dragable by the user.</div></div><div class=CToolTip id="tt20"><div class=CClass>Legend Renderer specific to funnel plots. </div></div><div class=CToolTip id="tt21"><div class=CClass>Plugin renderer to draw a funnel chart. </div></div><div class=CToolTip id="tt22"><div class=CClass>Plugin which will highlight data points when they are moused over.</div></div><div class=CToolTip id="tt23"><div class=CClass>The default jqPlot axis renderer, creating a numeric axis.</div></div><div class=CToolTip id="tt24"><div class=CClass>The default line renderer for jqPlot, this class has no options beyond the Series class. </div></div><div class=CToolTip id="tt25"><div class=CClass>A plugin for a jqPlot to render a logarithmic axis.</div></div><div class=CToolTip id="tt26"><div class=CClass>The default jqPlot marker renderer, rendering the points on the line.</div></div><div class=CToolTip id="tt27"><div class=CClass>An axis renderer for a Mekko chart. </div></div><div class=CToolTip id="tt28"><div class=CClass>Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.</div></div><div class=CToolTip id="tt29"><div class=CClass>Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph. </div></div><div class=CToolTip id="tt30"><div class=CClass>Plugin renderer to draw a meter gauge chart.</div></div><div class=CToolTip id="tt31"><div class=CClass>jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.</div></div><div class=CToolTip id="tt32"><div class=CClass>Legend Renderer specific to pie plots. </div></div><div class=CToolTip id="tt33"><div class=CClass>Plugin renderer to draw a pie chart. </div></div><div class=CToolTip id="tt34"><div class=CClass>Plugin for putting labels at the data points.</div></div><div class=CToolTip id="tt35"><div class=CClass>The default jqPlot shadow renderer, rendering shadows behind shapes.</div></div><div class=CToolTip id="tt36"><div class=CClass>The default jqPlot shape renderer. </div></div><div class=CToolTip id="tt37"><div class=CClass>Theme Engine provides a programatic way to change some of the more common jqplot styling options such as fonts, colors and grid options. </div></div><div class=CToolTip id="tt38"><div class=CClass>Plugin which will automatically compute and draw trendlines for plotted data.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt39"><div class=CClass>An individual axis object. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt40"><div class=CClass>A straight dashed horizontal line.</div></div><div class=CToolTip id="tt41"><div class=CClass>A straight dashed vertical line.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt42"><div class=CClass>Object representing the grid on which the plot is drawn. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt43"><div class=CClass>A straight horizontal line.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt44"><div class=CClass>Plot object returned by call to $.jqplot. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt45"><div class=CClass>Legend object. </div></div><div class=CToolTip id="tt46"><div class=CClass>A straight line.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt47"><div class=CClass>An individual data series object. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt48"><div class=CClass>Plot Title object. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt49"><div class=CClass>A straight vertical line.</div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Classes</div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Files.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Files.html
deleted file mode 100644
index 9198c422..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/Files.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>File Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>File Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; A &middot; B &middot; C &middot; D &middot; E &middot; F &middot; G &middot; H &middot; I &middot; <a href="#J">J</a> &middot; K &middot; L &middot; M &middot; N &middot; O &middot; P &middot; Q &middot; R &middot; S &middot; T &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="J"></a>J</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#jqplot.enhancedLegendRenderer.js" class=ISymbol>jqplot.<wbr>enhancedLegendRenderer.js</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#jqplot.pyramidAxisRenderer.js" class=ISymbol>jqplot.<wbr>pyramidAxisRenderer.js</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#jqplot.pyramidRenderer.js" class=ISymbol>jqplot.<wbr>pyramidRenderer.js</a></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Files</div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Functions.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Functions.html
deleted file mode 100644
index dbc1d7cf..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/Functions.html
+++ /dev/null
@@ -1,70 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Function Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Function Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; A &middot; B &middot; <a href="#C">C</a> &middot; <a href="#D">D</a> &middot; E &middot; F &middot; <a href="#G">G</a> &middot; H &middot; <a href="#I">I</a> &middot; J &middot; K &middot; L &middot; <a href="#M">M</a> &middot; <a href="#N">N</a> &middot; O &middot; P &middot; <a href="#Q">Q</a> &middot; <a href="#R">R</a> &middot; <a href="#S">S</a> &middot; T &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; <a href="#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="C"></a>C</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.copy" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>copy</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=IHeading><a name="D"></a>D</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.destroy" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>destroy</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>draw</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.draw" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.draw" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.draw" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=IParent>jqPlot</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.drawSeries" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>drawSeries</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.get" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>get</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemeNames" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>getThemeNames</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemes" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>getThemes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=IHeading><a name="I"></a>I</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.init" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>init</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="M"></a>M</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>makeGridData</span><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.makeGridData" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.makeGridData" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.moveBlock" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=ISymbol>moveBlock</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToBack" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=ISymbol>moveSeriesToBack</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToFront" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=ISymbol>moveSeriesToFront</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="N"></a>N</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.newTheme" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=ISymbol>newTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=IHeading><a name="Q"></a>Q</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.quickInit" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=ISymbol>quickInit</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="R"></a>R</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.redraw" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')" class=ISymbol>redraw</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.reInitialize" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')" class=ISymbol>reInitialize</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.remove" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')" class=ISymbol>remove</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.rename" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')" class=ISymbol>rename</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.replot" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')" class=ISymbol>replot</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.resetAxesScale" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')" class=ISymbol>resetAxesScale</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restoreOriginalSeriesOrder" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')" class=ISymbol>restoreOriginalSeriesOrder</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restorePreviousSeriesOrder" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')" class=ISymbol>restorePreviousSeriesOrder</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>setGridData</span><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.setGridData" id=link26 onMouseOver="ShowTip(event, 'tt26', 'link26')" onMouseOut="HideTip('tt26')" class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.setGridData" id=link27 onMouseOver="ShowTip(event, 'tt27', 'link27')" onMouseOut="HideTip('tt27')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></td></tr><tr><td class=IHeading><a name="Z"></a>Z</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy" id=link28 onMouseOver="ShowTip(event, 'tt28', 'link28')" onMouseOut="HideTip('tt28')" class=ISymbol>zoomProxy</a>, <span class=IParent>$.jqplot.<wbr>Cursor.$.jqplot.<wbr>Cursor</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.copy = function (</td><td class=PParameter nowrap>sourceName,</td></tr><tr><td></td><td class=PParameter nowrap>targetName,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a copy of an existing theme in the themeEngine, adding it the themeEngine.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt2"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.destroy = function()</td></tr></table></blockquote>Releases all resources occupied by the plot</div></div><div class=CToolTip id="tt3"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShadowRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws an transparent black (i.e. </div></div><div class=CToolTip id="tt4"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShapeRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws the shape.</div></div><div class=CToolTip id="tt5"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.draw = function()</td></tr></table></blockquote>Draws all elements of the plot into the container. </div></div><div class=CToolTip id="tt6"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.drawSeries = function(</td><td class=PParameter nowrap>options,</td></tr><tr><td></td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Redraws all or just one series on the plot. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt7"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.get = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Get and return the named theme or the active theme if no name given.</div></div><div class=CToolTip id="tt8"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemeNames = function()</td></tr></table></blockquote>Return the list of theme names in this manager in alpha-numerical order.</div></div><div class=CToolTip id="tt9"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemes = function()</td></tr></table></blockquote>Return a list of themes in alpha-numerical order by name.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt10"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.init = function(</td><td class=PParameter nowrap>target,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>sets the plot target, checks data and applies user options to plot.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt11"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><div class=CToolTip id="tt12"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><div class=CToolTip id="tt13"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveBlock = function (</td><td class=PParameter nowrap>idx,</td></tr><tr><td></td><td class=PParameter nowrap>x,</td></tr><tr><td></td><td class=PParameter nowrap>y,</td></tr><tr><td></td><td class=PParameter nowrap>duration</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Moves an individual block. </div></div><div class=CToolTip id="tt14"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToBack = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.</div></div><div class=CToolTip id="tt15"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToFront = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt16"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.newTheme = function(</td><td class=PParameter nowrap>name,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a new theme based on the default theme, adding it the themeEngine.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt17"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.quickInit = function ()</td></tr></table></blockquote>Quick reinitialization plot for replotting. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt18"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.redraw = function(</td><td class=PParameter nowrap>clear</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Empties the plot target div and redraws the plot. </div></div><div class=CToolTip id="tt19"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.reInitialize = function (</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>opts</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>reinitialize plot for replotting. </div></div><div class=CToolTip id="tt20"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.remove = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Remove the given theme from the themeEngine.</div></div><div class=CToolTip id="tt21"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.rename = function (</td><td class=PParameter nowrap>oldName,</td></tr><tr><td></td><td class=PParameter nowrap>newName</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Rename a theme.</div></div><div class=CToolTip id="tt22"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.replot = function(</td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Does a reinitialization of the plot followed by a redraw. </div></div><div class=CToolTip id="tt23"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.resetAxesScale = function(</td><td class=PParameter nowrap>axes,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>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.</div></div><div class=CToolTip id="tt24"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restoreOriginalSeriesOrder = function ()</td></tr></table></blockquote>This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.</div></div><div class=CToolTip id="tt25"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restorePreviousSeriesOrder = function ()</td></tr></table></blockquote>This method requires jQuery 1.4+ Restore the series canvas order to its previous state. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt26"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt27"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt28"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.Cursor.zoomProxy = function(</td><td class=PParameter nowrap>targetPlot,</td></tr><tr><td></td><td class=PParameter nowrap>controllerPlot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot. </div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Functions</div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General.html
deleted file mode 100644
index d9450d7a..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/General.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="#Symbols">$#!</a> &middot; 0-9 &middot; <a href="#A">A</a> &middot; <a href="#B">B</a> &middot; <a href="General2.html#C">C</a> &middot; <a href="General2.html#D">D</a> &middot; <a href="General2.html#E">E</a> &middot; <a href="General3.html#F">F</a> &middot; <a href="General3.html#G">G</a> &middot; <a href="General3.html#H">H</a> &middot; <a href="General4.html#I">I</a> &middot; <a href="General4.html#J">J</a> &middot; K &middot; <a href="General4.html#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="General5.html#N">N</a> &middot; <a href="General5.html#O">O</a> &middot; <a href="General5.html#P">P</a> &middot; <a href="General5.html#Q">Q</a> &middot; <a href="General5.html#R">R</a> &middot; <a href="General6.html#S">S</a> &middot; <a href="General7.html#T">T</a> &middot; <a href="General7.html#U">U</a> &middot; <a href="General7.html#V">V</a> &middot; <a href="General7.html#W">W</a> &middot; <a href="General7.html#X">X</a> &middot; <a href="General7.html#Y">Y</a> &middot; <a href="General7.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="Symbols"></a>$#!</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-toImage-js.html#$.fn" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>$.fn</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>$.jqplot</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>$.jqplot.<wbr>AxisLabelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=ISymbol>$.jqplot.<wbr>AxisTickRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=ISymbol>$.jqplot.<wbr>BarRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>$.jqplot.<wbr>BezierCurveRenderer.js</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>$.jqplot.<wbr>BlockRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>$.jqplot.<wbr>BubbleRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>$.jqplot.<wbr>CanvasAxisLabelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>$.jqplot.<wbr>CanvasAxisTickRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>$.jqplot.<wbr>CanvasGridRenderer</span><div class=ISubIndex><a href="../files/jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=IFile>jqplot.<wbr>canvasGridRenderer.js</a><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html#$.jqplot.CanvasGridRenderer" id=link12 onMouseOver="ShowTip(event, 'tt11', 'link12')" onMouseOut="HideTip('tt11')" class=IFile>plugins/<wbr>jqplot.<wbr>pyramidGridRenderer.js</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay" class=ISymbol>$.jqplot.<wbr>CanvasOverlay</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer" id=link13 onMouseOver="ShowTip(event, 'tt12', 'link13')" onMouseOut="HideTip('tt12')" class=ISymbol>$.jqplot.<wbr>CategoryAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ciParser-js.html#$.jqplot.ciParser" id=link14 onMouseOver="ShowTip(event, 'tt13', 'link14')" onMouseOut="HideTip('tt13')" class=ISymbol>$.jqplot.<wbr>ciParser</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor" id=link15 onMouseOver="ShowTip(event, 'tt14', 'link15')" onMouseOut="HideTip('tt14')" class=ISymbol>$.jqplot.<wbr>Cursor</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer" id=link16 onMouseOver="ShowTip(event, 'tt15', 'link16')" onMouseOut="HideTip('tt15')" class=ISymbol>$.jqplot.<wbr>DateAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" id=link17 onMouseOver="ShowTip(event, 'tt16', 'link17')" onMouseOut="HideTip('tt16')" class=ISymbol>$.jqplot.<wbr>DivTitleRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer" id=link18 onMouseOver="ShowTip(event, 'tt17', 'link18')" onMouseOut="HideTip('tt17')" class=ISymbol>$.jqplot.<wbr>DonutLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer" id=link19 onMouseOver="ShowTip(event, 'tt18', 'link19')" onMouseOut="HideTip('tt18')" class=ISymbol>$.jqplot.<wbr>DonutRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable" id=link20 onMouseOver="ShowTip(event, 'tt19', 'link20')" onMouseOut="HideTip('tt19')" class=ISymbol>$.jqplot.<wbr>Dragable</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer" id=link21 onMouseOver="ShowTip(event, 'tt20', 'link21')" onMouseOut="HideTip('tt20')" class=ISymbol>$.jqplot.<wbr>FunnelLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer" id=link22 onMouseOver="ShowTip(event, 'tt21', 'link22')" onMouseOut="HideTip('tt21')" class=ISymbol>$.jqplot.<wbr>FunnelRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter" id=link23 onMouseOver="ShowTip(event, 'tt22', 'link23')" onMouseOut="HideTip('tt22')" class=ISymbol>$.jqplot.<wbr>Highlighter</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer" id=link24 onMouseOver="ShowTip(event, 'tt23', 'link24')" onMouseOut="HideTip('tt23')" class=ISymbol>$.jqplot.<wbr>LinearAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" id=link25 onMouseOver="ShowTip(event, 'tt24', 'link25')" onMouseOut="HideTip('tt24')" class=ISymbol>$.jqplot.<wbr>LineRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer" id=link26 onMouseOver="ShowTip(event, 'tt25', 'link26')" onMouseOut="HideTip('tt25')" class=ISymbol>$.jqplot.<wbr>LogAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" id=link27 onMouseOver="ShowTip(event, 'tt26', 'link27')" onMouseOut="HideTip('tt26')" class=ISymbol>$.jqplot.<wbr>MarkerRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer" id=link28 onMouseOver="ShowTip(event, 'tt27', 'link28')" onMouseOut="HideTip('tt27')" class=ISymbol>$.jqplot.<wbr>MekkoAxisRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer" id=link29 onMouseOver="ShowTip(event, 'tt28', 'link29')" onMouseOut="HideTip('tt28')" class=ISymbol>$.jqplot.<wbr>MekkoLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer" id=link30 onMouseOver="ShowTip(event, 'tt29', 'link30')" onMouseOut="HideTip('tt29')" class=ISymbol>$.jqplot.<wbr>MekkoRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer" id=link31 onMouseOver="ShowTip(event, 'tt30', 'link31')" onMouseOut="HideTip('tt30')" class=ISymbol>$.jqplot.<wbr>MeterGaugeRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer" id=link32 onMouseOver="ShowTip(event, 'tt31', 'link32')" onMouseOut="HideTip('tt31')" class=ISymbol>$.jqplot.<wbr>OHLCRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer" id=link33 onMouseOver="ShowTip(event, 'tt32', 'link33')" onMouseOut="HideTip('tt32')" class=ISymbol>$.jqplot.<wbr>PieLegendRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer" id=link34 onMouseOver="ShowTip(event, 'tt33', 'link34')" onMouseOut="HideTip('tt33')" class=ISymbol>$.jqplot.<wbr>PieRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels" id=link35 onMouseOver="ShowTip(event, 'tt34', 'link35')" onMouseOut="HideTip('tt34')" class=ISymbol>$.jqplot.<wbr>PointLabels</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer" id=link36 onMouseOver="ShowTip(event, 'tt35', 'link36')" onMouseOut="HideTip('tt35')" class=ISymbol>$.jqplot.<wbr>shadowRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer" id=link37 onMouseOver="ShowTip(event, 'tt36', 'link37')" onMouseOut="HideTip('tt36')" class=ISymbol>$.jqplot.<wbr>shapeRenderer</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine" id=link38 onMouseOver="ShowTip(event, 'tt37', 'link38')" onMouseOut="HideTip('tt37')" class=ISymbol>$.jqplot.<wbr>ThemeEngine</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline" id=link39 onMouseOver="ShowTip(event, 'tt38', 'link39')" onMouseOut="HideTip('tt38')" class=ISymbol>$.jqplot.<wbr>Trendline</a></td></tr><tr><td class=IHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.activeTheme" id=link40 onMouseOver="ShowTip(event, 'tt39', 'link40')" onMouseOut="HideTip('tt39')" class=ISymbol>activeTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.addLegendRowHooks" id=link41 onMouseOver="ShowTip(event, 'tt40', 'link41')" onMouseOut="HideTip('tt40')" class=ISymbol>addLegendRowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.alignTicks" id=link42 onMouseOver="ShowTip(event, 'tt41', 'link42')" onMouseOut="HideTip('tt41')" class=ISymbol>alignTicks</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.alpha" id=link43 onMouseOver="ShowTip(event, 'tt42', 'link43')" onMouseOut="HideTip('tt42')" class=ISymbol>alpha</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>angle</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.angle" id=link44 onMouseOver="ShowTip(event, 'tt43', 'link44')" onMouseOut="HideTip('tt43')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.angle" id=link45 onMouseOver="ShowTip(event, 'tt44', 'link45')" onMouseOut="HideTip('tt44')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.angle" id=link46 onMouseOver="ShowTip(event, 'tt45', 'link46')" onMouseOut="HideTip('tt45')" class=IParent>$.jqplot.<wbr>shadowRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.animate" id=link47 onMouseOver="ShowTip(event, 'tt46', 'link47')" onMouseOut="HideTip('tt46')" class=ISymbol>animate</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.animateReplot" id=link48 onMouseOver="ShowTip(event, 'tt47', 'link48')" onMouseOut="HideTip('tt47')" class=ISymbol>animateReplot</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.autoscale" id=link49 onMouseOver="ShowTip(event, 'tt48', 'link49')" onMouseOut="HideTip('tt48')" class=ISymbol>autoscale</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleBubbles" id=link50 onMouseOver="ShowTip(event, 'tt49', 'link50')" onMouseOut="HideTip('tt49')" class=ISymbol>autoscaleBubbles</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleMultiplier" id=link51 onMouseOver="ShowTip(event, 'tt50', 'link51')" onMouseOut="HideTip('tt50')" class=ISymbol>autoscaleMultiplier</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscalePointsFactor" id=link52 onMouseOver="ShowTip(event, 'tt51', 'link52')" onMouseOut="HideTip('tt51')" class=ISymbol>autoscalePointsFactor</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Available_Options" id=link53 onMouseOver="ShowTip(event, 'tt52', 'link53')" onMouseOut="HideTip('tt52')" class=ISymbol>Available Options</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axes" id=link54 onMouseOver="ShowTip(event, 'tt53', 'link54')" onMouseOut="HideTip('tt53')" class=ISymbol>axes</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axesDefaults" id=link55 onMouseOver="ShowTip(event, 'tt54', 'link55')" onMouseOut="HideTip('tt54')" class=ISymbol>axesDefaults</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis" id=link56 onMouseOver="ShowTip(event, 'tt55', 'link56')" onMouseOut="HideTip('tt55')" class=ISymbol>Axis</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.axisDefaults" id=link57 onMouseOver="ShowTip(event, 'tt56', 'link57')" onMouseOut="HideTip('tt56')" class=ISymbol>axisDefaults</a>, <span class=IParent>$.jqplot.<wbr>LogAxisRenderer</span></td></tr><tr><td class=IHeading><a name="B"></a>B</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>background</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.background" id=link58 onMouseOver="ShowTip(event, 'tt57', 'link58')" onMouseOut="HideTip('tt57')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Grid.background" id=link59 onMouseOver="ShowTip(event, 'tt58', 'link59')" onMouseOut="HideTip('tt58')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.background" id=link60 onMouseOver="ShowTip(event, 'tt59', 'link60')" onMouseOut="HideTip('tt59')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.bandData" id=link61 onMouseOver="ShowTip(event, 'tt60', 'link61')" onMouseOut="HideTip('tt60')" class=ISymbol>bandData</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.bands" id=link62 onMouseOver="ShowTip(event, 'tt61', 'link62')" onMouseOut="HideTip('tt61')" class=ISymbol>bands</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barDirection" id=link63 onMouseOver="ShowTip(event, 'tt62', 'link63')" onMouseOut="HideTip('tt62')" class=ISymbol>barDirection</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelOptions" id=link64 onMouseOver="ShowTip(event, 'tt63', 'link64')" onMouseOut="HideTip('tt63')" class=ISymbol>barLabelOptions</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelRenderer" id=link65 onMouseOver="ShowTip(event, 'tt64', 'link65')" onMouseOut="HideTip('tt64')" class=ISymbol>barLabelRenderer</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabels" id=link66 onMouseOver="ShowTip(event, 'tt65', 'link66')" onMouseOut="HideTip('tt65')" class=ISymbol>barLabels</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barMargin" id=link67 onMouseOver="ShowTip(event, 'tt66', 'link67')" onMouseOut="HideTip('tt66')" class=ISymbol>barMargin</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>barPadding</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#barPadding" id=link68 onMouseOver="ShowTip(event, 'tt67', 'link68')" onMouseOut="HideTip('tt67')" class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barPadding" id=link69 onMouseOver="ShowTip(event, 'tt68', 'link69')" onMouseOut="HideTip('tt68')" class=IParent>$.jqplot.<wbr>BarRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barWidth" id=link70 onMouseOver="ShowTip(event, 'tt69', 'link70')" onMouseOut="HideTip('tt69')" class=ISymbol>barWidth</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>baselineColor</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#baselineColor" id=link71 onMouseOver="ShowTip(event, 'tt70', 'link71')" onMouseOut="HideTip('tt70')" class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.baselineColor" id=link72 onMouseOver="ShowTip(event, 'tt71', 'link72')" onMouseOut="HideTip('tt71')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.baselineColor" id=link73 onMouseOver="ShowTip(event, 'tt72', 'link73')" onMouseOut="HideTip('tt72')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>baselineWidth</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#baselineWidth" id=link74 onMouseOver="ShowTip(event, 'tt73', 'link74')" onMouseOut="HideTip('tt73')" class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.baselineWidth" id=link75 onMouseOver="ShowTip(event, 'tt74', 'link75')" onMouseOut="HideTip('tt74')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.baselineWidth" id=link76 onMouseOver="ShowTip(event, 'tt75', 'link76')" onMouseOut="HideTip('tt75')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.bodyWidth" id=link77 onMouseOver="ShowTip(event, 'tt76', 'link77')" onMouseOut="HideTip('tt76')" class=ISymbol>bodyWidth</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.border" id=link78 onMouseOver="ShowTip(event, 'tt77', 'link78')" onMouseOut="HideTip('tt77')" class=ISymbol>border</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>borderColor</span><div class=ISubIndex><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.borderColor" id=link79 onMouseOver="ShowTip(event, 'tt78', 'link79')" onMouseOut="HideTip('tt78')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-core-js.html#Axis.borderColor" id=link80 onMouseOver="ShowTip(event, 'tt79', 'link80')" onMouseOut="HideTip('tt79')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderColor" id=link81 onMouseOver="ShowTip(event, 'tt80', 'link81')" onMouseOut="HideTip('tt80')" class=IParent>Grid</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>borderWidth</span><div class=ISubIndex><a href="../files/jqplot-core-js.html#Axis.borderWidth" id=link82 onMouseOver="ShowTip(event, 'tt81', 'link82')" onMouseOut="HideTip('tt81')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderWidth" id=link83 onMouseOver="ShowTip(event, 'tt82', 'link83')" onMouseOut="HideTip('tt82')" class=IParent>Grid</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.breakOnNull" id=link84 onMouseOver="ShowTip(event, 'tt83', 'link84')" onMouseOut="HideTip('tt83')" class=ISymbol>breakOnNull</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.breakPoints" id=link85 onMouseOver="ShowTip(event, 'tt84', 'link85')" onMouseOut="HideTip('tt84')" class=ISymbol>breakPoints</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.breakTickLabel" id=link86 onMouseOver="ShowTip(event, 'tt85', 'link86')" onMouseOut="HideTip('tt85')" class=ISymbol>breakTickLabel</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.bringSeriesToFront" id=link87 onMouseOver="ShowTip(event, 'tt86', 'link87')" onMouseOut="HideTip('tt86')" class=ISymbol>bringSeriesToFront</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleAlpha" id=link88 onMouseOver="ShowTip(event, 'tt87', 'link88')" onMouseOut="HideTip('tt87')" class=ISymbol>bubbleAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleGradients" id=link89 onMouseOver="ShowTip(event, 'tt88', 'link89')" onMouseOut="HideTip('tt88')" class=ISymbol>bubbleGradients</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CClass>jQuery namespace to attach functions to jQuery elements.</div></div><div class=CToolTip id="tt2"><div class=CClass>jQuery function called by the user to create a plot.</div></div><div class=CToolTip id="tt3"><div class=CClass>Renderer to place labels on the axes.</div></div><div class=CToolTip id="tt4"><div class=CClass>A &ldquo;tick&rdquo; object showing the value of a tick/gridline on the plot.</div></div><div class=CToolTip id="tt5"><div class=CClass>A plugin renderer for jqPlot to draw a bar plot. </div></div><div class=CToolTip id="tt6"><div class=CClass>Renderer which draws lines as stacked bezier curves. </div></div><div class=CToolTip id="tt7"><div class=CClass>Plugin renderer to draw a x-y block chart. </div></div><div class=CToolTip id="tt8"><div class=CClass>Plugin renderer to draw a bubble chart. </div></div><div class=CToolTip id="tt9"><div class=CClass>Renderer to draw axis labels with a canvas element to support advanced featrues such as rotated text. </div></div><div class=CToolTip id="tt10"><div class=CClass>Renderer to draw axis ticks with a canvas element to support advanced featrues such as rotated text. </div></div><div class=CToolTip id="tt11"><div class=CClass>The default jqPlot grid renderer, creating a grid on a canvas element. </div></div><div class=CToolTip id="tt12"><div class=CClass>A plugin for jqPlot to render a category style axis, with equal pixel spacing between y data values of a series.</div></div><div class=CToolTip id="tt13"><div class=CClass>Data Renderer function which converts a custom JSON data object into jqPlot data format. </div></div><div class=CToolTip id="tt14"><div class=CClass>Plugin class representing the cursor as displayed on the plot.</div></div><div class=CToolTip id="tt15"><div class=CClass>A plugin for a jqPlot to render an axis as a series of date values. </div></div><div class=CToolTip id="tt16"><div class=CClass>The default title renderer for jqPlot. </div></div><div class=CToolTip id="tt17"><div class=CClass>Legend Renderer specific to donut plots. </div></div><div class=CToolTip id="tt18"><div class=CClass>Plugin renderer to draw a donut chart. </div></div><div class=CToolTip id="tt19"><div class=CClass>Plugin to make plotted points dragable by the user.</div></div><div class=CToolTip id="tt20"><div class=CClass>Legend Renderer specific to funnel plots. </div></div><div class=CToolTip id="tt21"><div class=CClass>Plugin renderer to draw a funnel chart. </div></div><div class=CToolTip id="tt22"><div class=CClass>Plugin which will highlight data points when they are moused over.</div></div><div class=CToolTip id="tt23"><div class=CClass>The default jqPlot axis renderer, creating a numeric axis.</div></div><div class=CToolTip id="tt24"><div class=CClass>The default line renderer for jqPlot, this class has no options beyond the Series class. </div></div><div class=CToolTip id="tt25"><div class=CClass>A plugin for a jqPlot to render a logarithmic axis.</div></div><div class=CToolTip id="tt26"><div class=CClass>The default jqPlot marker renderer, rendering the points on the line.</div></div><div class=CToolTip id="tt27"><div class=CClass>An axis renderer for a Mekko chart. </div></div><div class=CToolTip id="tt28"><div class=CClass>Legend renderer used by mekko charts with options for controlling number or rows and columns as well as placement outside of plot area.</div></div><div class=CToolTip id="tt29"><div class=CClass>Draws a Mekko style chart which shows 3 dimensional data on a 2 dimensional graph. </div></div><div class=CToolTip id="tt30"><div class=CClass>Plugin renderer to draw a meter gauge chart.</div></div><div class=CToolTip id="tt31"><div class=CClass>jqPlot Plugin to draw Open Hi Low Close, Candlestick and Hi Low Close charts.</div></div><div class=CToolTip id="tt32"><div class=CClass>Legend Renderer specific to pie plots. </div></div><div class=CToolTip id="tt33"><div class=CClass>Plugin renderer to draw a pie chart. </div></div><div class=CToolTip id="tt34"><div class=CClass>Plugin for putting labels at the data points.</div></div><div class=CToolTip id="tt35"><div class=CClass>The default jqPlot shadow renderer, rendering shadows behind shapes.</div></div><div class=CToolTip id="tt36"><div class=CClass>The default jqPlot shape renderer. </div></div><div class=CToolTip id="tt37"><div class=CClass>Theme Engine provides a programatic way to change some of the more common jqplot styling options such as fonts, colors and grid options. </div></div><div class=CToolTip id="tt38"><div class=CClass>Plugin which will automatically compute and draw trendlines for plotted data.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt39"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.activeTheme=null</td></tr></table></blockquote>Pointer to currently active theme</div></div><div class=CToolTip id="tt40"><div class=CHook>called at the end of legend draw, so plugins can add rows to the legend table.</div></div><div class=CToolTip id="tt41"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alignTicks = false</td></tr></table></blockquote>true to align tick marks across opposed axes such as from the y2axis to yaxis.</div></div><div class=CToolTip id="tt42"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alpha = 0.07</td></tr></table></blockquote>alpha transparency of shadow stroke.</div></div><div class=CToolTip id="tt43"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt44"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt45"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 45</td></tr></table></blockquote>Angle of the shadow in degrees. </div></div><div class=CToolTip id="tt46"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.animate = false</td></tr></table></blockquote>True to animate the series on initial plot draw (renderer dependent). </div></div><div class=CToolTip id="tt47"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.animateReplot = false</td></tr></table></blockquote>True to animate series after a call to the replot() method. </div></div><div class=CToolTip id="tt48"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscale = false</td></tr></table></blockquote>DEPRECATED the default scaling algorithm produces superior results.</div></div><div class=CToolTip id="tt49"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleBubbles = true</td></tr></table></blockquote>True to scale the bubble radius based on plot size. </div></div><div class=CToolTip id="tt50"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleMultiplier = 1.0</td></tr></table></blockquote>Multiplier the bubble size if autoscaleBubbles is true.</div></div><div class=CToolTip id="tt51"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscalePointsFactor = -0.07</td></tr></table></blockquote>Factor which decreases bubble size based on how many bubbles on on the chart. </div></div><div class=CToolTip id="tt52"><div class=CGeneric>See jqPlot Options for a list of options available thorugh the options object (not complete yet!)</div></div><div class=CToolTip id="tt53"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>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')}</td></tr></table></blockquote>up to 4 axes are supported, each with it&rsquo;s own options, See Axis for axis specific options.</div></div><div class=CToolTip id="tt54"><div class=CProperty>default options that will be applied to all axes. </div></div><div class=CToolTip id="tt55"><div class=CClass>An individual axis object. </div></div><div class=CToolTip id="tt56"><div class=CProperty>Default properties which will be applied directly to the series.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt57"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = &quot;#efefef&quot;</td></tr></table></blockquote>background color of the inside of the gauge.</div></div><div class=CToolTip id="tt58"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = '#fffdf6'</td></tr></table></blockquote>css spec for the background color.</div></div><div class=CToolTip id="tt59"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background</td></tr></table></blockquote>css spec for the background of the legend box.</div></div><div class=CToolTip id="tt60"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.bandData = []</td></tr></table></blockquote>Data used to draw error bands or confidence intervals above/below a line.</div></div><div class=CToolTip id="tt61"><div class=CGroup>Banding around line, e.g error bands or confidence intervals.</div></div><div class=CToolTip id="tt62"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barDirection = 'vertical'</td></tr></table></blockquote>&lsquo;vertical&rsquo; = up and down bars, &lsquo;horizontal&rsquo; = side to side bars</div></div><div class=CToolTip id="tt63"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelOptions = {}</td></tr></table></blockquote>options object to pass to the bar label renderer.</div></div><div class=CToolTip id="tt64"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>renderer to use to draw labels under each bar.</div></div><div class=CToolTip id="tt65"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabels = this.barLabels || []</td></tr></table></blockquote>array of labels to put under each bar.</div></div><div class=CToolTip id="tt66"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barMargin = 10</td></tr></table></blockquote>Number of pixels between groups of bars at adjacent axis values.</div></div><div class=CToolTip id="tt67"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 10</td></tr></table></blockquote></div></div><div class=CToolTip id="tt68"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 8</td></tr></table></blockquote>Number of pixels between adjacent bars at the same axis value.</div></div><div class=CToolTip id="tt69"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barWidth = null</td></tr></table></blockquote>Width of the bar in pixels (auto by devaul). </div></div><div class=CToolTip id="tt70"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><div class=CToolTip id="tt71"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><div class=CToolTip id="tt72"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><div class=CToolTip id="tt73"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt74"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt75"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt76"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bodyWidth = 'auto'</td></tr></table></blockquote>width of the candlestick body in pixels. </div></div><div class=CToolTip id="tt77"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.border</td></tr></table></blockquote>css spec for the border around the legend box.</div></div><div class=CToolTip id="tt78"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the borders between areas on the chart</div></div><div class=CToolTip id="tt79"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the border adjacent to the axis. </div></div><div class=CToolTip id="tt80"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = '#999999'</td></tr></table></blockquote>css spec for the color of the grid border.</div></div><div class=CToolTip id="tt81"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = null</td></tr></table></blockquote>width of line stroked at the border of the axis. </div></div><div class=CToolTip id="tt82"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = 2.0</td></tr></table></blockquote>width of the border in pixels.</div></div><div class=CToolTip id="tt83"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakOnNull = false</td></tr></table></blockquote>Wether line segments should be be broken at null value. </div></div><div class=CToolTip id="tt84"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakPoints = null</td></tr></table></blockquote>EXPERIMENTAL!!&nbsp; </div></div><div class=CToolTip id="tt85"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakTickLabel = &quot;&amp;asymp</td></tr></table></blockquote>Label to use at the axis break if breakPoints are specified.</div></div><div class=CToolTip id="tt86"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bringSeriesToFront = false</td></tr></table></blockquote>This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.</div></div><div class=CToolTip id="tt87"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleAlpha = 1.0</td></tr></table></blockquote>Alpha transparency to apply to all bubbles in this series.</div></div><div class=CToolTip id="tt88"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleGradients = false</td></tr></table></blockquote>True to color the bubbles with gradient fills instead of flat colors. </div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General2.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General2.html
deleted file mode 100644
index 3332307e..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/General2.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> &middot; 0-9 &middot; <a href="General.html#A">A</a> &middot; <a href="General.html#B">B</a> &middot; <a href="#C">C</a> &middot; <a href="#D">D</a> &middot; <a href="#E">E</a> &middot; <a href="General3.html#F">F</a> &middot; <a href="General3.html#G">G</a> &middot; <a href="General3.html#H">H</a> &middot; <a href="General4.html#I">I</a> &middot; <a href="General4.html#J">J</a> &middot; K &middot; <a href="General4.html#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="General5.html#N">N</a> &middot; <a href="General5.html#O">O</a> &middot; <a href="General5.html#P">P</a> &middot; <a href="General5.html#Q">Q</a> &middot; <a href="General5.html#R">R</a> &middot; <a href="General6.html#S">S</a> &middot; <a href="General7.html#T">T</a> &middot; <a href="General7.html#U">U</a> &middot; <a href="General7.html#V">V</a> &middot; <a href="General7.html#W">W</a> &middot; <a href="General7.html#X">X</a> &middot; <a href="General7.html#Y">Y</a> &middot; <a href="General7.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="C"></a>C</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.candleStick" id=link90 onMouseOver="ShowTip(event, 'tt89', 'link90')" onMouseOut="HideTip('tt89')" class=ISymbol>candleStick</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/changes-txt.html#Change_Log" class=ISymbol>Change Log</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Changes" id=link91 onMouseOver="ShowTip(event, 'tt90', 'link91')" onMouseOut="HideTip('tt90')" class=ISymbol>Changes</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.clearRect" id=link92 onMouseOver="ShowTip(event, 'tt91', 'link92')" onMouseOut="HideTip('tt91')" class=ISymbol>clearRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.clickReset" id=link93 onMouseOver="ShowTip(event, 'tt92', 'link93')" onMouseOut="HideTip('tt92')" class=ISymbol>clickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.closeColor" id=link94 onMouseOver="ShowTip(event, 'tt93', 'link94')" onMouseOut="HideTip('tt93')" class=ISymbol>closeColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>color</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.color" id=link95 onMouseOver="ShowTip(event, 'tt94', 'link95')" onMouseOut="HideTip('tt94')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.color" id=link96 onMouseOver="ShowTip(event, 'tt95', 'link96')" onMouseOut="HideTip('tt95')" class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.color" id=link97 onMouseOver="ShowTip(event, 'tt96', 'link97')" onMouseOut="HideTip('tt96')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.color" id=link98 onMouseOver="ShowTip(event, 'tt97', 'link98')" onMouseOut="HideTip('tt97')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.color" id=link99 onMouseOver="ShowTip(event, 'tt98', 'link99')" onMouseOut="HideTip('tt98')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.color" id=link100 onMouseOver="ShowTip(event, 'tt99', 'link100')" onMouseOut="HideTip('tt99')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainOutsideZoom" id=link101 onMouseOver="ShowTip(event, 'tt100', 'link101')" onMouseOut="HideTip('tt100')" class=ISymbol>constrainOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.constrainSmoothing" id=link102 onMouseOver="ShowTip(event, 'tt101', 'link102')" onMouseOut="HideTip('tt101')" class=ISymbol>constrainSmoothing</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.constrainTo" id=link103 onMouseOver="ShowTip(event, 'tt102', 'link103')" onMouseOut="HideTip('tt102')" class=ISymbol>constrainTo</a>, <span class=IParent>$.jqplot.<wbr>Dragable</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainZoomTo" id=link104 onMouseOver="ShowTip(event, 'tt103', 'link104')" onMouseOut="HideTip('tt103')" class=ISymbol>constrainZoomTo</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.copy" id=link105 onMouseOver="ShowTip(event, 'tt104', 'link105')" onMouseOut="HideTip('tt104')" class=ISymbol>copy</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#CopyrightLicense" id=link106 onMouseOver="ShowTip(event, 'tt105', 'link106')" onMouseOut="HideTip('tt105')" class=ISymbol>Copyright&amp;License</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.css" id=link107 onMouseOver="ShowTip(event, 'tt106', 'link107')" onMouseOut="HideTip('tt106')" class=ISymbol>css</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.cursorLegendFormatString" id=link108 onMouseOver="ShowTip(event, 'tt107', 'link108')" onMouseOut="HideTip('tt107')" class=ISymbol>cursorLegendFormatString</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=IHeading><a name="D"></a>D</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine" id=link109 onMouseOver="ShowTip(event, 'tt108', 'link109')" onMouseOut="HideTip('tt108')" class=ISymbol>DashedHorizontalLine</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine" id=link110 onMouseOver="ShowTip(event, 'tt109', 'link110')" onMouseOut="HideTip('tt109')" class=ISymbol>DashedVerticalLine</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dashPattern</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine.dashPattern" id=link111 onMouseOver="ShowTip(event, 'tt110', 'link111')" onMouseOut="HideTip('tt110')" class=IParent>DashedHorizontalLine</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine.dashPattern" id=link112 onMouseOver="ShowTip(event, 'tt111', 'link112')" onMouseOut="HideTip('tt111')" class=IParent>DashedVerticalLine</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.data" id=link113 onMouseOver="ShowTip(event, 'tt112', 'link113')" onMouseOut="HideTip('tt112')" class=ISymbol>data</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelCenterOn" id=link114 onMouseOver="ShowTip(event, 'tt113', 'link114')" onMouseOut="HideTip('tt113')" class=ISymbol>dataLabelCenterOn</a>, <span class=IParent>$.jqplot.<wbr>PieRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelFormatString</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelFormatString" id=link115 onMouseOver="ShowTip(event, 'tt114', 'link115')" onMouseOut="HideTip('tt114')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelFormatString" id=link116 onMouseOver="ShowTip(event, 'tt115', 'link116')" onMouseOut="HideTip('tt115')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelFormatString" id=link117 onMouseOver="ShowTip(event, 'tt116', 'link117')" onMouseOut="HideTip('tt116')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelNudge</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelNudge" id=link118 onMouseOver="ShowTip(event, 'tt117', 'link118')" onMouseOut="HideTip('tt117')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelNudge" id=link119 onMouseOver="ShowTip(event, 'tt118', 'link119')" onMouseOut="HideTip('tt118')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelPositionFactor</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelPositionFactor" id=link120 onMouseOver="ShowTip(event, 'tt119', 'link120')" onMouseOut="HideTip('tt119')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelPositionFactor" id=link121 onMouseOver="ShowTip(event, 'tt120', 'link121')" onMouseOut="HideTip('tt120')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabels" id=link122 onMouseOver="ShowTip(event, 'tt121', 'link122')" onMouseOut="HideTip('tt121')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabels" id=link123 onMouseOver="ShowTip(event, 'tt122', 'link123')" onMouseOut="HideTip('tt122')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabels" id=link124 onMouseOver="ShowTip(event, 'tt123', 'link124')" onMouseOut="HideTip('tt123')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelThreshold</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelThreshold" id=link125 onMouseOver="ShowTip(event, 'tt124', 'link125')" onMouseOut="HideTip('tt124')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelThreshold" id=link126 onMouseOver="ShowTip(event, 'tt125', 'link126')" onMouseOut="HideTip('tt125')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelThreshold" id=link127 onMouseOver="ShowTip(event, 'tt126', 'link127')" onMouseOut="HideTip('tt126')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.dataRenderer" id=link128 onMouseOver="ShowTip(event, 'tt127', 'link128')" onMouseOut="HideTip('tt127')" class=ISymbol>dataRenderer</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.dataRendererOptions" id=link129 onMouseOver="ShowTip(event, 'tt128', 'link129')" onMouseOut="HideTip('tt128')" class=ISymbol>dataRendererOptions</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.dblClickReset" id=link130 onMouseOver="ShowTip(event, 'tt129', 'link130')" onMouseOut="HideTip('tt129')" class=ISymbol>dblClickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.defaultAxisStart" id=link131 onMouseOver="ShowTip(event, 'tt130', 'link131')" onMouseOut="HideTip('tt130')" class=ISymbol>defaultAxisStart</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.depth" id=link132 onMouseOver="ShowTip(event, 'tt131', 'link132')" onMouseOut="HideTip('tt131')" class=ISymbol>depth</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.destroy" id=link133 onMouseOver="ShowTip(event, 'tt132', 'link133')" onMouseOut="HideTip('tt132')" class=ISymbol>destroy</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>diameter</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.diameter" id=link134 onMouseOver="ShowTip(event, 'tt133', 'link134')" onMouseOut="HideTip('tt133')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.diameter" id=link135 onMouseOver="ShowTip(event, 'tt134', 'link135')" onMouseOut="HideTip('tt134')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.diameter" id=link136 onMouseOver="ShowTip(event, 'tt135', 'link136')" onMouseOut="HideTip('tt135')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#disableIEFading" id=link137 onMouseOver="ShowTip(event, 'tt136', 'link137')" onMouseOut="HideTip('tt136')" class=ISymbol>disableIEFading</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.disableStack" id=link138 onMouseOver="ShowTip(event, 'tt137', 'link138')" onMouseOut="HideTip('tt137')" class=ISymbol>disableStack</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.downBodyColor" id=link139 onMouseOver="ShowTip(event, 'tt138', 'link139')" onMouseOut="HideTip('tt138')" class=ISymbol>downBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>draw</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.draw" id=link140 onMouseOver="ShowTip(event, 'tt139', 'link140')" onMouseOut="HideTip('tt139')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.draw" id=link141 onMouseOver="ShowTip(event, 'tt140', 'link141')" onMouseOut="HideTip('tt140')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.draw" id=link142 onMouseOver="ShowTip(event, 'tt141', 'link142')" onMouseOut="HideTip('tt141')" class=IParent>jqPlot</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>drawBaseline</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#drawBaseline" id=link143 onMouseOver="ShowTip(event, 'tt142', 'link143')" onMouseOut="HideTip('tt142')" class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.drawBaseline" id=link144 onMouseOver="ShowTip(event, 'tt143', 'link144')" onMouseOut="HideTip('tt143')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.drawBaseline" id=link145 onMouseOver="ShowTip(event, 'tt144', 'link145')" onMouseOut="HideTip('tt144')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.drawBaseline" id=link146 onMouseOver="ShowTip(event, 'tt145', 'link146')" onMouseOut="HideTip('tt145')" class=IParent>$.jqplot.<wbr>LogAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawBorder" id=link147 onMouseOver="ShowTip(event, 'tt146', 'link147')" onMouseOut="HideTip('tt146')" class=ISymbol>drawBorder</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawGridlines" id=link148 onMouseOver="ShowTip(event, 'tt147', 'link148')" onMouseOut="HideTip('tt147')" class=ISymbol>drawGridlines</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMajorGridlines" id=link149 onMouseOver="ShowTip(event, 'tt148', 'link149')" onMouseOut="HideTip('tt148')" class=ISymbol>drawMajorGridlines</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMajorTickMarks" id=link150 onMouseOver="ShowTip(event, 'tt149', 'link150')" onMouseOut="HideTip('tt149')" class=ISymbol>drawMajorTickMarks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMinorGridlines" id=link151 onMouseOver="ShowTip(event, 'tt150', 'link151')" onMouseOut="HideTip('tt150')" class=ISymbol>drawMinorGridlines</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMinorTickMarks" id=link152 onMouseOver="ShowTip(event, 'tt151', 'link152')" onMouseOut="HideTip('tt151')" class=ISymbol>drawMinorTickMarks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.drawSeries" id=link153 onMouseOver="ShowTip(event, 'tt152', 'link153')" onMouseOut="HideTip('tt152')" class=ISymbol>drawSeries</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="E"></a>E</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.edgeTolerance" id=link154 onMouseOver="ShowTip(event, 'tt153', 'link154')" onMouseOut="HideTip('tt153')" class=ISymbol>edgeTolerance</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>enableFontSupport</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.enableFontSupport" id=link155 onMouseOver="ShowTip(event, 'tt154', 'link155')" onMouseOut="HideTip('tt154')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.enableFontSupport" id=link156 onMouseOver="ShowTip(event, 'tt155', 'link156')" onMouseOut="HideTip('tt155')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>escapeHtml</span><div class=ISubIndex><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.escapeHtml" id=link157 onMouseOver="ShowTip(event, 'tt156', 'link157')" onMouseOut="HideTip('tt156')" class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.escapeHtml" id=link158 onMouseOver="ShowTip(event, 'tt157', 'link158')" onMouseOut="HideTip('tt157')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.escapeHtml" id=link159 onMouseOver="ShowTip(event, 'tt158', 'link159')" onMouseOut="HideTip('tt158')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.escapeHtml" id=link160 onMouseOver="ShowTip(event, 'tt159', 'link160')" onMouseOut="HideTip('tt159')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>escapeHTML</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.escapeHTML" id=link161 onMouseOver="ShowTip(event, 'tt160', 'link161')" onMouseOut="HideTip('tt160')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.escapeHTML" id=link162 onMouseOver="ShowTip(event, 'tt161', 'link162')" onMouseOut="HideTip('tt161')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.escapeHTML" id=link163 onMouseOver="ShowTip(event, 'tt162', 'link163')" onMouseOut="HideTip('tt162')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.eventListenerHooks" id=link164 onMouseOver="ShowTip(event, 'tt163', 'link164')" onMouseOut="HideTip('tt163')" class=ISymbol>eventListenerHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt89"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.candleStick = false</td></tr></table></blockquote>true to render chart as candleStick. </div></div><div class=CToolTip id="tt90"><div class=CGeneric>See Change Log</div></div><div class=CToolTip id="tt91"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clearRect = false</td></tr></table></blockquote>true to cear a rectangle.</div></div><div class=CToolTip id="tt92"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clickReset = false</td></tr></table></blockquote>Will reset plot zoom if single click on plot without drag.</div></div><div class=CToolTip id="tt93"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.closeColor = null</td></tr></table></blockquote>color of the close price tick mark. </div></div><div class=CToolTip id="tt94"><div class=CProperty>color of the line</div></div><div class=CToolTip id="tt95"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>CSS color spec for the dragged point (and adjacent line segment or bar).</div></div><div class=CToolTip id="tt96"><div class=CProperty>color of lines at top and bottom of bands [default: series color].</div></div><div class=CToolTip id="tt97"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>color of marker. </div></div><div class=CToolTip id="tt98"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>CSS color spec for the trend line. </div></div><div class=CToolTip id="tt99"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>css color spec for the series</div></div><div class=CToolTip id="tt100"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainOutsideZoom = true</td></tr></table></blockquote>True to limit actual zoom area to edges of grid, even when zooming outside of plot area. </div></div><div class=CToolTip id="tt101"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.constrainSmoothing = true</td></tr></table></blockquote>True to use a more accurate smoothing algorithm that will not overshoot any data points. </div></div><div class=CToolTip id="tt102"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainTo = 'none'</td></tr></table></blockquote>Constrain dragging motion to an axis or to none. </div></div><div class=CToolTip id="tt103"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainZoomTo = 'none'</td></tr></table></blockquote>&lsquo;none&rsquo;, &lsquo;x&rsquo; or &lsquo;y&rsquo;</div></div><div class=CToolTip id="tt104"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.copy = function (</td><td class=PParameter nowrap>sourceName,</td></tr><tr><td></td><td class=PParameter nowrap>targetName,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a copy of an existing theme in the themeEngine, adding it the themeEngine.</div></div><div class=CToolTip id="tt105"><div class=CGeneric>Copyright &copy; 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. </div></div><div class=CToolTip id="tt106"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}</td></tr></table></blockquote>default css styles that will be applied to all data blocks. </div></div><div class=CToolTip id="tt107"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString</td></tr></table></blockquote>Format string used in the cursor legend. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt108"><div class=CClass>A straight dashed horizontal line.</div></div><div class=CToolTip id="tt109"><div class=CClass>A straight dashed vertical line.</div></div><div class=CToolTip id="tt110"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>dashPattern: [8,8] }</td></tr></table></blockquote>Array of line, space settings in pixels. </div></div><div class=CToolTip id="tt111"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>dashPattern: [8,8] }</td></tr></table></blockquote>Array of line, space settings in pixels. </div></div><div class=CToolTip id="tt112"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.data = []</td></tr></table></blockquote>user&rsquo;s data. </div></div><div class=CToolTip id="tt113"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelCenterOn = true</td></tr></table></blockquote>True to center the data label at its position. </div></div><div class=CToolTip id="tt114"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt115"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt116"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt117"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 0</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt118"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 2</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt119"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.4</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt120"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.52</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt121"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt122"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt123"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt124"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt125"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt126"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote>Threshhold in percentage (0-100) of pie area, below which no label will be displayed. </div></div><div class=CToolTip id="tt127"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataRenderer</td></tr></table></blockquote>A callable which can be used to preprocess data passed into the plot. </div></div><div class=CToolTip id="tt128"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataRendererOptions</td></tr></table></blockquote>Options that will be passed to the dataRenderer. </div></div><div class=CToolTip id="tt129"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dblClickReset = true</td></tr></table></blockquote>Will reset plot zoom if double click on plot without drag.</div></div><div class=CToolTip id="tt130"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.defaultAxisStart = 1</td></tr></table></blockquote>1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot. </div></div><div class=CToolTip id="tt131"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.depth = 3</td></tr></table></blockquote>how many times the shadow is stroked. </div></div><div class=CToolTip id="tt132"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.destroy = function()</td></tr></table></blockquote>Releases all resources occupied by the plot</div></div><div class=CToolTip id="tt133"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the donut, auto computed by default</div></div><div class=CToolTip id="tt134"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the meterGauge, auto computed by default</div></div><div class=CToolTip id="tt135"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the pie, auto computed by default</div></div><div class=CToolTip id="tt136"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableIEFading = true</td></tr></table></blockquote>true to toggle series with a show/hide method only and not allow fading in/out. </div></div><div class=CToolTip id="tt137"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableStack = false</td></tr></table></blockquote>true to not stack this series with other series in the plot. </div></div><div class=CToolTip id="tt138"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.downBodyColor = null</td></tr></table></blockquote>Color of candlestick body on a &ldquo;down&rdquo; day. </div></div><div class=CToolTip id="tt139"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShadowRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws an transparent black (i.e. </div></div><div class=CToolTip id="tt140"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ShapeRenderer.prototype.draw = function(</td><td class=PParameter nowrap>ctx,</td></tr><tr><td></td><td class=PParameter nowrap>points,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>draws the shape.</div></div><div class=CToolTip id="tt141"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.draw = function()</td></tr></table></blockquote>Draws all elements of the plot into the container. </div></div><div class=CToolTip id="tt142"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt143"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt144"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt145"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt146"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBorder = true</td></tr></table></blockquote>True to draw border around grid.</div></div><div class=CToolTip id="tt147"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawGridlines = true</td></tr></table></blockquote>wether to draw the gridlines on the plot.</div></div><div class=CToolTip id="tt148"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMajorGridlines = true</td></tr></table></blockquote>True to draw gridlines for major axis ticks.</div></div><div class=CToolTip id="tt149"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMajorTickMarks = true</td></tr></table></blockquote>True to draw tick marks for major axis ticks.</div></div><div class=CToolTip id="tt150"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMinorGridlines = false</td></tr></table></blockquote>True to draw gridlines for minor ticks.</div></div><div class=CToolTip id="tt151"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMinorTickMarks = true</td></tr></table></blockquote>True to draw tick marks for minor ticks. </div></div><div class=CToolTip id="tt152"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.drawSeries = function(</td><td class=PParameter nowrap>options,</td></tr><tr><td></td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Redraws all or just one series on the plot. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt153"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.edgeTolerance = -5</td></tr></table></blockquote>Number of pixels that the label must be away from an axis boundary in order to be drawn. </div></div><div class=CToolTip id="tt154"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt155"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt156"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>true to escape html in the box label.</div></div><div class=CToolTip id="tt157"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = true</td></tr></table></blockquote>True to escape html in bubble label text.</div></div><div class=CToolTip id="tt158"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>True to escape special characters with their html entity equivalents in legend text. </div></div><div class=CToolTip id="tt159"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>True to escape special characters with their html entity equivalents in title text. </div></div><div class=CToolTip id="tt160"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote>true to escape HTML entities in the label.</div></div><div class=CToolTip id="tt161"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote>true to escape HTML entities in the label.</div></div><div class=CToolTip id="tt162"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = true</td></tr></table></blockquote>true to escape html entities in the labels. </div></div><div class=CToolTip id="tt163"><div class=CHook>called at the end of plot drawing, binds listeners to the event canvas which lays on top of the grid area.</div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General3.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General3.html
deleted file mode 100644
index 031f05c2..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/General3.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> &middot; 0-9 &middot; <a href="General.html#A">A</a> &middot; <a href="General.html#B">B</a> &middot; <a href="General2.html#C">C</a> &middot; <a href="General2.html#D">D</a> &middot; <a href="General2.html#E">E</a> &middot; <a href="#F">F</a> &middot; <a href="#G">G</a> &middot; <a href="#H">H</a> &middot; <a href="General4.html#I">I</a> &middot; <a href="General4.html#J">J</a> &middot; K &middot; <a href="General4.html#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="General5.html#N">N</a> &middot; <a href="General5.html#O">O</a> &middot; <a href="General5.html#P">P</a> &middot; <a href="General5.html#Q">Q</a> &middot; <a href="General5.html#R">R</a> &middot; <a href="General6.html#S">S</a> &middot; <a href="General7.html#T">T</a> &middot; <a href="General7.html#U">U</a> &middot; <a href="General7.html#V">V</a> &middot; <a href="General7.html#W">W</a> &middot; <a href="General7.html#X">X</a> &middot; <a href="General7.html#Y">Y</a> &middot; <a href="General7.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="F"></a>F</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fadeTooltip</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.fadeTooltip" id=link165 onMouseOver="ShowTip(event, 'tt164', 'link165')" onMouseOut="HideTip('tt164')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.fadeTooltip" id=link166 onMouseOver="ShowTip(event, 'tt165', 'link166')" onMouseOut="HideTip('tt165')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fill</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#fill" id=link167 onMouseOver="ShowTip(event, 'tt166', 'link167')" onMouseOut="HideTip('tt166')" class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.fill" id=link168 onMouseOver="ShowTip(event, 'tt167', 'link168')" onMouseOut="HideTip('tt167')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.fill" id=link169 onMouseOver="ShowTip(event, 'tt168', 'link169')" onMouseOut="HideTip('tt168')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.fill" id=link170 onMouseOver="ShowTip(event, 'tt169', 'link170')" onMouseOut="HideTip('tt169')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.fill" id=link171 onMouseOver="ShowTip(event, 'tt170', 'link171')" onMouseOut="HideTip('tt170')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.fill" id=link172 onMouseOver="ShowTip(event, 'tt171', 'link172')" onMouseOut="HideTip('tt171')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fill" id=link173 onMouseOver="ShowTip(event, 'tt172', 'link173')" onMouseOut="HideTip('tt172')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.fill" id=link174 onMouseOver="ShowTip(event, 'tt173', 'link174')" onMouseOut="HideTip('tt173')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAlpha" id=link175 onMouseOver="ShowTip(event, 'tt174', 'link175')" onMouseOut="HideTip('tt174')" class=ISymbol>fillAlpha</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAndStroke" id=link176 onMouseOver="ShowTip(event, 'tt175', 'link176')" onMouseOut="HideTip('tt175')" class=ISymbol>fillAndStroke</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAxis" id=link177 onMouseOver="ShowTip(event, 'tt176', 'link177')" onMouseOut="HideTip('tt176')" class=ISymbol>fillAxis</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.fillBetween" id=link178 onMouseOver="ShowTip(event, 'tt177', 'link178')" onMouseOut="HideTip('tt177')" class=ISymbol>fillBetween</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fillColor</span><div class=ISubIndex><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.fillColor" id=link179 onMouseOver="ShowTip(event, 'tt178', 'link179')" onMouseOut="HideTip('tt178')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-core-js.html#Series.fillColor" id=link180 onMouseOver="ShowTip(event, 'tt179', 'link180')" onMouseOut="HideTip('tt179')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillDownBody" id=link181 onMouseOver="ShowTip(event, 'tt180', 'link181')" onMouseOut="HideTip('tt180')" class=ISymbol>fillDownBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillRect" id=link182 onMouseOver="ShowTip(event, 'tt181', 'link182')" onMouseOut="HideTip('tt181')" class=ISymbol>fillRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillStyle" id=link183 onMouseOver="ShowTip(event, 'tt182', 'link183')" onMouseOut="HideTip('tt182')" class=ISymbol>fillStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToValue" id=link184 onMouseOver="ShowTip(event, 'tt183', 'link184')" onMouseOut="HideTip('tt183')" class=ISymbol>fillToValue</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToZero" id=link185 onMouseOver="ShowTip(event, 'tt184', 'link185')" onMouseOut="HideTip('tt184')" class=ISymbol>fillToZero</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillUpBody" id=link186 onMouseOver="ShowTip(event, 'tt185', 'link186')" onMouseOut="HideTip('tt185')" class=ISymbol>fillUpBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.followMouse" id=link187 onMouseOver="ShowTip(event, 'tt186', 'link187')" onMouseOut="HideTip('tt186')" class=ISymbol>followMouse</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontFamily</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontFamily" id=link188 onMouseOver="ShowTip(event, 'tt187', 'link188')" onMouseOut="HideTip('tt187')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontFamily" id=link189 onMouseOver="ShowTip(event, 'tt188', 'link189')" onMouseOut="HideTip('tt188')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontFamily" id=link190 onMouseOver="ShowTip(event, 'tt189', 'link190')" onMouseOut="HideTip('tt189')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.fontFamily" id=link191 onMouseOver="ShowTip(event, 'tt190', 'link191')" onMouseOut="HideTip('tt190')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontFamily" id=link192 onMouseOver="ShowTip(event, 'tt191', 'link192')" onMouseOut="HideTip('tt191')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontSize</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontSize" id=link193 onMouseOver="ShowTip(event, 'tt192', 'link193')" onMouseOut="HideTip('tt192')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontSize" id=link194 onMouseOver="ShowTip(event, 'tt193', 'link194')" onMouseOut="HideTip('tt193')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontSize" id=link195 onMouseOver="ShowTip(event, 'tt194', 'link195')" onMouseOut="HideTip('tt194')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.fontSize" id=link196 onMouseOver="ShowTip(event, 'tt195', 'link196')" onMouseOut="HideTip('tt195')" class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.fontSize" id=link197 onMouseOver="ShowTip(event, 'tt196', 'link197')" onMouseOut="HideTip('tt196')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontSize" id=link198 onMouseOver="ShowTip(event, 'tt197', 'link198')" onMouseOut="HideTip('tt197')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontStretch</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontStretch" id=link199 onMouseOver="ShowTip(event, 'tt198', 'link199')" onMouseOut="HideTip('tt198')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontStretch" id=link200 onMouseOver="ShowTip(event, 'tt199', 'link200')" onMouseOut="HideTip('tt199')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontWeight</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontWeight" id=link201 onMouseOver="ShowTip(event, 'tt200', 'link201')" onMouseOut="HideTip('tt200')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontWeight" id=link202 onMouseOver="ShowTip(event, 'tt201', 'link202')" onMouseOut="HideTip('tt201')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.forceTickAt0" id=link203 onMouseOver="ShowTip(event, 'tt202', 'link203')" onMouseOut="HideTip('tt202')" class=ISymbol>forceTickAt0</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.forceTickAt100" id=link204 onMouseOver="ShowTip(event, 'tt203', 'link204')" onMouseOut="HideTip('tt203')" class=ISymbol>forceTickAt100</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>formatString</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatString" id=link205 onMouseOver="ShowTip(event, 'tt204', 'link205')" onMouseOut="HideTip('tt204')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatString" id=link206 onMouseOver="ShowTip(event, 'tt205', 'link206')" onMouseOut="HideTip('tt205')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.formatString" id=link207 onMouseOver="ShowTip(event, 'tt206', 'link207')" onMouseOut="HideTip('tt206')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatString" id=link208 onMouseOver="ShowTip(event, 'tt207', 'link208')" onMouseOut="HideTip('tt207')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>formatter</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatter" id=link209 onMouseOver="ShowTip(event, 'tt208', 'link209')" onMouseOut="HideTip('tt208')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatter" id=link210 onMouseOver="ShowTip(event, 'tt209', 'link210')" onMouseOut="HideTip('tt209')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatter" id=link211 onMouseOver="ShowTip(event, 'tt210', 'link211')" onMouseOut="HideTip('tt210')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>Functions</span><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.Functions" class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.Functions" class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.Functions" class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></td></tr><tr><td class=IHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.get" id=link212 onMouseOver="ShowTip(event, 'tt211', 'link212')" onMouseOut="HideTip('tt211')" class=ISymbol>get</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemeNames" id=link213 onMouseOver="ShowTip(event, 'tt212', 'link213')" onMouseOut="HideTip('tt212')" class=ISymbol>getThemeNames</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemes" id=link214 onMouseOver="ShowTip(event, 'tt213', 'link214')" onMouseOut="HideTip('tt213')" class=ISymbol>getThemes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/gpl-2-0-txt.html#GPL_Version_2" id=link215 onMouseOver="ShowTip(event, 'tt214', 'link215')" onMouseOut="HideTip('tt214')" class=ISymbol>GPL Version 2</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.grid" id=link216 onMouseOver="ShowTip(event, 'tt215', 'link216')" onMouseOut="HideTip('tt215')" class=ISymbol>grid</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid" id=link217 onMouseOver="ShowTip(event, 'tt216', 'link217')" onMouseOut="HideTip('tt216')" class=ISymbol>Grid</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineColor" id=link218 onMouseOver="ShowTip(event, 'tt217', 'link218')" onMouseOut="HideTip('tt217')" class=ISymbol>gridLineColor</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineWidth" id=link219 onMouseOver="ShowTip(event, 'tt218', 'link219')" onMouseOut="HideTip('tt218')" class=ISymbol>gridLineWidth</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.groups" id=link220 onMouseOver="ShowTip(event, 'tt219', 'link220')" onMouseOut="HideTip('tt219')" class=ISymbol>groups</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=IHeading><a name="H"></a>H</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.hideZeros" id=link221 onMouseOver="ShowTip(event, 'tt220', 'link221')" onMouseOut="HideTip('tt220')" class=ISymbol>hideZeros</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightAlpha" id=link222 onMouseOver="ShowTip(event, 'tt221', 'link222')" onMouseOut="HideTip('tt221')" class=ISymbol>highlightAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightColor" id=link223 onMouseOver="ShowTip(event, 'tt222', 'link223')" onMouseOut="HideTip('tt222')" class=ISymbol>highlightColor</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightColors</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightColors" id=link224 onMouseOver="ShowTip(event, 'tt223', 'link224')" onMouseOut="HideTip('tt223')" class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightColors" id=link225 onMouseOver="ShowTip(event, 'tt224', 'link225')" onMouseOut="HideTip('tt224')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightColors" id=link226 onMouseOver="ShowTip(event, 'tt225', 'link226')" onMouseOut="HideTip('tt225')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightColors" id=link227 onMouseOver="ShowTip(event, 'tt226', 'link227')" onMouseOut="HideTip('tt226')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightColors" id=link228 onMouseOver="ShowTip(event, 'tt227', 'link228')" onMouseOut="HideTip('tt227')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightColors" id=link229 onMouseOver="ShowTip(event, 'tt228', 'link229')" onMouseOut="HideTip('tt228')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightMouseDown</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightMouseDown" id=link230 onMouseOver="ShowTip(event, 'tt229', 'link230')" onMouseOut="HideTip('tt229')" class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseDown" id=link231 onMouseOver="ShowTip(event, 'tt230', 'link231')" onMouseOut="HideTip('tt230')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseDown" id=link232 onMouseOver="ShowTip(event, 'tt231', 'link232')" onMouseOut="HideTip('tt231')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseDown" id=link233 onMouseOver="ShowTip(event, 'tt232', 'link233')" onMouseOut="HideTip('tt232')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseDown" id=link234 onMouseOver="ShowTip(event, 'tt233', 'link234')" onMouseOut="HideTip('tt233')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseDown" id=link235 onMouseOver="ShowTip(event, 'tt234', 'link235')" onMouseOut="HideTip('tt234')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseDown" id=link236 onMouseOver="ShowTip(event, 'tt235', 'link236')" onMouseOut="HideTip('tt235')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightMouseOver</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightMouseOver" id=link237 onMouseOver="ShowTip(event, 'tt236', 'link237')" onMouseOut="HideTip('tt236')" class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseOver" id=link238 onMouseOver="ShowTip(event, 'tt237', 'link238')" onMouseOut="HideTip('tt237')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseOver" id=link239 onMouseOver="ShowTip(event, 'tt238', 'link239')" onMouseOut="HideTip('tt238')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseOver" id=link240 onMouseOver="ShowTip(event, 'tt239', 'link240')" onMouseOut="HideTip('tt239')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseOver" id=link241 onMouseOver="ShowTip(event, 'tt240', 'link241')" onMouseOut="HideTip('tt240')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseOver" id=link242 onMouseOver="ShowTip(event, 'tt241', 'link242')" onMouseOut="HideTip('tt241')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseOver" id=link243 onMouseOver="ShowTip(event, 'tt242', 'link243')" onMouseOut="HideTip('tt242')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.hlc" id=link244 onMouseOver="ShowTip(event, 'tt243', 'link244')" onMouseOut="HideTip('tt243')" class=ISymbol>hlc</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.Hooks" class=ISymbol>Hooks</a>, <span class=IParent>$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine" id=link245 onMouseOver="ShowTip(event, 'tt244', 'link245')" onMouseOut="HideTip('tt244')" class=ISymbol>HorizontalLine</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.hubRadius" id=link246 onMouseOver="ShowTip(event, 'tt245', 'link246')" onMouseOut="HideTip('tt245')" class=ISymbol>hubRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt164"><div class=CProperty>true = fade in/out tooltip, flase = show/hide tooltip</div></div><div class=CToolTip id="tt165"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fadeTooltip = true</td></tr></table></blockquote>true = fade in/out tooltip, flase = show/hide tooltip</div></div><div class=CToolTip id="tt166"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>True to fill the bars.</div></div><div class=CToolTip id="tt167"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt168"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fill the areas.</div></div><div class=CToolTip id="tt169"><div class=CProperty>True to fill area between bands [default: true].</div></div><div class=CToolTip id="tt170"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt171"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt172"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt173"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>true or false, wether to fill under lines or in bars. </div></div><div class=CToolTip id="tt174"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAlpha</td></tr></table></blockquote>Alpha transparency to apply to the fill under the line. </div></div><div class=CToolTip id="tt175"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAndStroke = false</td></tr></table></blockquote>If true will stroke the line (with color this.color) as well as fill under it. </div></div><div class=CToolTip id="tt176"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAxis = 'y'</td></tr></table></blockquote>Either &lsquo;x&rsquo; or &lsquo;y&rsquo;. </div></div><div class=CToolTip id="tt177"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }</td></tr></table></blockquote>Fill between 2 line series in a plot. </div></div><div class=CToolTip id="tt178"><div class=CProperty>css color spec for filled area. </div></div><div class=CToolTip id="tt179"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillColor</td></tr></table></blockquote>CSS color spec to use for fill under line. </div></div><div class=CToolTip id="tt180"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillDownBody = true</td></tr></table></blockquote>true to render a &ldquo;down&rdquo; day (close price lower than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt181"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillRect = false</td></tr></table></blockquote>true to draw shape as a filled rectangle.</div></div><div class=CToolTip id="tt182"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillStyle = '#999999'</td></tr></table></blockquote>css color spec for the fill style.</div></div><div class=CToolTip id="tt183"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToValue = 0</td></tr></table></blockquote>fill a filled series to this value on the fill axis. </div></div><div class=CToolTip id="tt184"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToZero = false</td></tr></table></blockquote>true will force bar and filled series to fill toward zero on the fill Axis.</div></div><div class=CToolTip id="tt185"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillUpBody = false</td></tr></table></blockquote>true to render an &ldquo;up&rdquo; day (close price greater than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt186"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.followMouse = false</td></tr></table></blockquote>Tooltip follows the mouse, it is not at a fixed location. </div></div><div class=CToolTip id="tt187"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt188"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>CSS spec for the font-family css attribute. </div></div><div class=CToolTip id="tt189"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt190"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css font-family spec for the legend text.</div></div><div class=CToolTip id="tt191"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css font-family spec for the text.</div></div><div class=CToolTip id="tt192"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size css attribute.</div></div><div class=CToolTip id="tt193"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '11pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt194"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '10pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt195"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size attribute. </div></div><div class=CToolTip id="tt196"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css font-size spec for the legend text.</div></div><div class=CToolTip id="tt197"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css font-size spec for the text.</div></div><div class=CToolTip id="tt198"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt199"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt200"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote></div></div><div class=CToolTip id="tt201"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote>CSS spec for fontWeight</div></div><div class=CToolTip id="tt202"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.forceTickAt0 = false</td></tr></table></blockquote>This will ensure that there is always a tick mark at 0. </div></div><div class=CToolTip id="tt203"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.forceTickAt100 = false</td></tr></table></blockquote>This will ensure that there is always a tick mark at 100. </div></div><div class=CToolTip id="tt204"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt205"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt206"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = null</td></tr></table></blockquote>alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option. </div></div><div class=CToolTip id="tt207"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt208"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt209"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt210"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt211"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.get = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Get and return the named theme or the active theme if no name given.</div></div><div class=CToolTip id="tt212"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemeNames = function()</td></tr></table></blockquote>Return the list of theme names in this manager in alpha-numerical order.</div></div><div class=CToolTip id="tt213"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>$.jqplot.ThemeEngine.prototype.getThemes = function()</td></tr></table></blockquote>Return a list of themes in alpha-numerical order by name.</div></div><div class=CToolTip id="tt214"><div class=CSection>GNU GENERAL PUBLIC LICENSE Version 2, June 1991</div></div><div class=CToolTip id="tt215"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.grid = new Grid()</td></tr></table></blockquote>See Grid for grid specific options.</div></div><div class=CToolTip id="tt216"><div class=CClass>Object representing the grid on which the plot is drawn. </div></div><div class=CToolTip id="tt217"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineColor = '#cccccc'</td></tr></table></blockquote>color of the grid lines.</div></div><div class=CToolTip id="tt218"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineWidth = 1.0</td></tr></table></blockquote>width of the grid lines.</div></div><div class=CToolTip id="tt219"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.groups = 1</td></tr></table></blockquote>group bars into this many groups</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt220"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hideZeros = false</td></tr></table></blockquote>true to not show a label for a value which is 0.</div></div><div class=CToolTip id="tt221"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightAlpha = null</td></tr></table></blockquote>Alpha transparency to apply when highlighting bubble. </div></div><div class=CToolTip id="tt222"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColor = null</td></tr></table></blockquote>color to use when highlighting an area on a filled plot.</div></div><div class=CToolTip id="tt223"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt224"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a bar.</div></div><div class=CToolTip id="tt225"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>An array of colors to use when highlighting a slice. </div></div><div class=CToolTip id="tt226"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt227"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>array of colors to use when highlighting an area.</div></div><div class=CToolTip id="tt228"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt229"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt230"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt231"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a bubble. </div></div><div class=CToolTip id="tt232"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt233"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a area. </div></div><div class=CToolTip id="tt234"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over an area on a filled plot. </div></div><div class=CToolTip id="tt235"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt236"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt237"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt238"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight bubbles when moused over. </div></div><div class=CToolTip id="tt239"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt240"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area when moused over. </div></div><div class=CToolTip id="tt241"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area on a filled plot when moused over. </div></div><div class=CToolTip id="tt242"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt243"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hlc = false</td></tr></table></blockquote>true if is a hi-low-close chart (no open price). </div></div><div class=CToolTip id="tt244"><div class=CClass>A straight horizontal line.</div></div><div class=CToolTip id="tt245"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hubRadius = null</td></tr></table></blockquote>Radius of the hub at the bottom center of gauge which the needle attaches to. </div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General4.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General4.html
deleted file mode 100644
index 4798c87d..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/General4.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> &middot; 0-9 &middot; <a href="General.html#A">A</a> &middot; <a href="General.html#B">B</a> &middot; <a href="General2.html#C">C</a> &middot; <a href="General2.html#D">D</a> &middot; <a href="General2.html#E">E</a> &middot; <a href="General3.html#F">F</a> &middot; <a href="General3.html#G">G</a> &middot; <a href="General3.html#H">H</a> &middot; <a href="#I">I</a> &middot; <a href="#J">J</a> &middot; K &middot; <a href="#L">L</a> &middot; <a href="#M">M</a> &middot; <a href="General5.html#N">N</a> &middot; <a href="General5.html#O">O</a> &middot; <a href="General5.html#P">P</a> &middot; <a href="General5.html#Q">Q</a> &middot; <a href="General5.html#R">R</a> &middot; <a href="General6.html#S">S</a> &middot; <a href="General7.html#T">T</a> &middot; <a href="General7.html#U">U</a> &middot; <a href="General7.html#V">V</a> &middot; <a href="General7.html#W">W</a> &middot; <a href="General7.html#X">X</a> &middot; <a href="General7.html#Y">Y</a> &middot; <a href="General7.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="I"></a>I</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.index" id=link247 onMouseOver="ShowTip(event, 'tt246', 'link247')" onMouseOut="HideTip('tt246')" class=ISymbol>index</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.init" id=link248 onMouseOver="ShowTip(event, 'tt247', 'link248')" onMouseOut="HideTip('tt247')" class=ISymbol>init</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.innerDiameter" id=link249 onMouseOver="ShowTip(event, 'tt248', 'link249')" onMouseOut="HideTip('tt248')" class=ISymbol>innerDiameter</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.insertBreaks" id=link250 onMouseOver="ShowTip(event, 'tt249', 'link250')" onMouseOut="HideTip('tt249')" class=ISymbol>insertBreaks</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.intersectionThreshold" id=link251 onMouseOver="ShowTip(event, 'tt250', 'link251')" onMouseOut="HideTip('tt250')" class=ISymbol>intersectionThreshold</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.interval" id=link252 onMouseOver="ShowTip(event, 'tt251', 'link252')" onMouseOut="HideTip('tt251')" class=ISymbol>interval</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalColors" id=link253 onMouseOver="ShowTip(event, 'tt252', 'link253')" onMouseOut="HideTip('tt252')" class=ISymbol>intervalColors</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalInnerRadius" id=link254 onMouseOver="ShowTip(event, 'tt253', 'link254')" onMouseOut="HideTip('tt253')" class=ISymbol>intervalInnerRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalOuterRadius" id=link255 onMouseOver="ShowTip(event, 'tt254', 'link255')" onMouseOut="HideTip('tt254')" class=ISymbol>intervalOuterRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervals" id=link256 onMouseOver="ShowTip(event, 'tt255', 'link256')" onMouseOut="HideTip('tt255')" class=ISymbol>intervals</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Introduction" id=link257 onMouseOver="ShowTip(event, 'tt256', 'link257')" onMouseOut="HideTip('tt256')" class=ISymbol>Introduction</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>isarc</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.isarc" id=link258 onMouseOver="ShowTip(event, 'tt257', 'link258')" onMouseOut="HideTip('tt257')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.isarc" id=link259 onMouseOver="ShowTip(event, 'tt258', 'link259')" onMouseOut="HideTip('tt258')" class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>isMinorTick</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.isMinorTick" id=link260 onMouseOver="ShowTip(event, 'tt259', 'link260')" onMouseOut="HideTip('tt259')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.isMinorTick" id=link261 onMouseOver="ShowTip(event, 'tt260', 'link261')" onMouseOut="HideTip('tt260')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=IHeading><a name="J"></a>J</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot" id=link262 onMouseOver="ShowTip(event, 'tt261', 'link262')" onMouseOut="HideTip('tt261')" class=ISymbol>jqPlot</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot_Charts" id=link263 onMouseOver="ShowTip(event, 'tt262', 'link263')" onMouseOut="HideTip('tt262')" class=ISymbol>jqPlot Charts</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqPlotCssStyling-txt.html#jqPlot_CSS_Customization" id=link264 onMouseOver="ShowTip(event, 'tt263', 'link264')" onMouseOut="HideTip('tt263')" class=ISymbol>jqPlot CSS Customization</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqPlotOptions-txt.html#jqPlot_Options" id=link265 onMouseOver="ShowTip(event, 'tt264', 'link265')" onMouseOut="HideTip('tt264')" class=ISymbol>jqPlot Options</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.jqPlot_Pugin_Hooks" class=ISymbol>jqPlot Pugin Hooks</a>, <span class=IParent>$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/usage-txt.html#jqPlot_Usage" class=ISymbol>jqPlot Usage</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#jqplot.enhancedLegendRenderer.js" class=ISymbol>jqplot.<wbr>enhancedLegendRenderer.js</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#jqplot.pyramidAxisRenderer.js" class=ISymbol>jqplot.<wbr>pyramidAxisRenderer.js</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#jqplot.pyramidRenderer.js" class=ISymbol>jqplot.<wbr>pyramidRenderer.js</a></td></tr><tr><td class=IHeading><a name="L"></a>L</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>label</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.label" id=link266 onMouseOver="ShowTip(event, 'tt265', 'link266')" onMouseOut="HideTip('tt265')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.label" id=link267 onMouseOver="ShowTip(event, 'tt266', 'link267')" onMouseOut="HideTip('tt266')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.label" id=link268 onMouseOver="ShowTip(event, 'tt267', 'link268')" onMouseOut="HideTip('tt267')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.label" id=link269 onMouseOver="ShowTip(event, 'tt268', 'link269')" onMouseOut="HideTip('tt268')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.label" id=link270 onMouseOver="ShowTip(event, 'tt269', 'link270')" onMouseOut="HideTip('tt269')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.label" id=link271 onMouseOver="ShowTip(event, 'tt270', 'link271')" onMouseOut="HideTip('tt270')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelHeightAdjust" id=link272 onMouseOver="ShowTip(event, 'tt271', 'link272')" onMouseOut="HideTip('tt271')" class=ISymbol>labelHeightAdjust</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelOptions" id=link273 onMouseOver="ShowTip(event, 'tt272', 'link273')" onMouseOut="HideTip('tt272')" class=ISymbol>labelOptions</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>labelPosition</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.labelPosition" id=link274 onMouseOver="ShowTip(event, 'tt273', 'link274')" onMouseOut="HideTip('tt273')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelPosition" id=link275 onMouseOver="ShowTip(event, 'tt274', 'link275')" onMouseOut="HideTip('tt274')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelRenderer" id=link276 onMouseOver="ShowTip(event, 'tt275', 'link276')" onMouseOut="HideTip('tt275')" class=ISymbol>labelRenderer</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>labels</span><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labels" id=link277 onMouseOver="ShowTip(event, 'tt276', 'link277')" onMouseOut="HideTip('tt276')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.labels" id=link278 onMouseOver="ShowTip(event, 'tt277', 'link278')" onMouseOut="HideTip('tt277')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labelsFromSeries" id=link279 onMouseOver="ShowTip(event, 'tt278', 'link279')" onMouseOut="HideTip('tt278')" class=ISymbol>labelsFromSeries</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.legend" id=link280 onMouseOver="ShowTip(event, 'tt279', 'link280')" onMouseOut="HideTip('tt279')" class=ISymbol>legend</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend" id=link281 onMouseOver="ShowTip(event, 'tt280', 'link281')" onMouseOut="HideTip('tt280')" class=ISymbol>Legend</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line" id=link282 onMouseOver="ShowTip(event, 'tt281', 'link282')" onMouseOut="HideTip('tt281')" class=ISymbol>Line</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineCap</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.lineCap" id=link283 onMouseOver="ShowTip(event, 'tt282', 'link283')" onMouseOut="HideTip('tt282')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineCap" id=link284 onMouseOver="ShowTip(event, 'tt283', 'link284')" onMouseOut="HideTip('tt283')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineCap" id=link285 onMouseOver="ShowTip(event, 'tt284', 'link285')" onMouseOut="HideTip('tt284')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.lineCap" id=link286 onMouseOver="ShowTip(event, 'tt285', 'link286')" onMouseOut="HideTip('tt285')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineJoin</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineJoin" id=link287 onMouseOver="ShowTip(event, 'tt286', 'link287')" onMouseOut="HideTip('tt286')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineJoin" id=link288 onMouseOver="ShowTip(event, 'tt287', 'link288')" onMouseOut="HideTip('tt287')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.lineJoin" id=link289 onMouseOver="ShowTip(event, 'tt288', 'link289')" onMouseOut="HideTip('tt288')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>linePattern</span><div class=ISubIndex><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.linePattern" id=link290 onMouseOver="ShowTip(event, 'tt289', 'link290')" onMouseOut="HideTip('tt289')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.linePattern" id=link291 onMouseOver="ShowTip(event, 'tt290', 'link291')" onMouseOut="HideTip('tt290')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineWidth</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.lineWidth" id=link292 onMouseOver="ShowTip(event, 'tt291', 'link292')" onMouseOut="HideTip('tt291')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.lineWidth" id=link293 onMouseOver="ShowTip(event, 'tt292', 'link293')" onMouseOut="HideTip('tt292')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.lineWidth" id=link294 onMouseOver="ShowTip(event, 'tt293', 'link294')" onMouseOut="HideTip('tt293')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.lineWidth" id=link295 onMouseOver="ShowTip(event, 'tt294', 'link295')" onMouseOut="HideTip('tt294')" class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineWidth" id=link296 onMouseOver="ShowTip(event, 'tt295', 'link296')" onMouseOut="HideTip('tt295')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.lineWidth" id=link297 onMouseOver="ShowTip(event, 'tt296', 'link297')" onMouseOut="HideTip('tt296')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.lineWidth" id=link298 onMouseOver="ShowTip(event, 'tt297', 'link298')" onMouseOut="HideTip('tt297')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.lineWidthAdjust" id=link299 onMouseOver="ShowTip(event, 'tt298', 'link299')" onMouseOut="HideTip('tt298')" class=ISymbol>lineWidthAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>location</span><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.location" id=link300 onMouseOver="ShowTip(event, 'tt299', 'link300')" onMouseOut="HideTip('tt299')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.location" id=link301 onMouseOver="ShowTip(event, 'tt300', 'link301')" onMouseOut="HideTip('tt300')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.looseZoom" id=link302 onMouseOver="ShowTip(event, 'tt301', 'link302')" onMouseOut="HideTip('tt301')" class=ISymbol>looseZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=IHeading><a name="M"></a>M</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>makeGridData</span><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.makeGridData" id=link303 onMouseOver="ShowTip(event, 'tt302', 'link303')" onMouseOut="HideTip('tt302')" class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.makeGridData" id=link304 onMouseOver="ShowTip(event, 'tt303', 'link304')" onMouseOut="HideTip('tt303')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginBottom" id=link305 onMouseOver="ShowTip(event, 'tt304', 'link305')" onMouseOut="HideTip('tt304')" class=ISymbol>marginBottom</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginLeft" id=link306 onMouseOver="ShowTip(event, 'tt305', 'link306')" onMouseOut="HideTip('tt305')" class=ISymbol>marginLeft</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginRight" id=link307 onMouseOver="ShowTip(event, 'tt306', 'link307')" onMouseOut="HideTip('tt306')" class=ISymbol>marginRight</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginTop" id=link308 onMouseOver="ShowTip(event, 'tt307', 'link308')" onMouseOut="HideTip('tt307')" class=ISymbol>marginTop</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>mark</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.mark" id=link309 onMouseOver="ShowTip(event, 'tt308', 'link309')" onMouseOut="HideTip('tt308')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.mark" id=link310 onMouseOver="ShowTip(event, 'tt309', 'link310')" onMouseOut="HideTip('tt309')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.markerOptions" id=link311 onMouseOver="ShowTip(event, 'tt310', 'link311')" onMouseOut="HideTip('tt310')" class=ISymbol>markerOptions</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>markerRenderer</span><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.markerRenderer" id=link312 onMouseOver="ShowTip(event, 'tt311', 'link312')" onMouseOut="HideTip('tt311')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.markerRenderer" id=link313 onMouseOver="ShowTip(event, 'tt312', 'link313')" onMouseOut="HideTip('tt312')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.markerRenderer" id=link314 onMouseOver="ShowTip(event, 'tt313', 'link314')" onMouseOut="HideTip('tt313')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>markSize</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.markSize" id=link315 onMouseOver="ShowTip(event, 'tt314', 'link315')" onMouseOut="HideTip('tt314')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.markSize" id=link316 onMouseOver="ShowTip(event, 'tt315', 'link316')" onMouseOut="HideTip('tt315')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>max</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.max" id=link317 onMouseOver="ShowTip(event, 'tt316', 'link317')" onMouseOut="HideTip('tt316')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.max" id=link318 onMouseOver="ShowTip(event, 'tt317', 'link318')" onMouseOut="HideTip('tt317')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>methods</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.methods" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.methods" class=IParent>$.jqplot.<wbr>ThemeEngine</a><a href="../files/jqplot-core-js.html#jqPlot.methods" class=IParent>jqPlot</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.Methods" class=ISymbol>Methods</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>min</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.min" id=link319 onMouseOver="ShowTip(event, 'tt318', 'link319')" onMouseOut="HideTip('tt318')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.min" id=link320 onMouseOver="ShowTip(event, 'tt319', 'link320')" onMouseOut="HideTip('tt319')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>minorTicks</span><div class=ISubIndex><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.minorTicks" id=link321 onMouseOver="ShowTip(event, 'tt320', 'link321')" onMouseOut="HideTip('tt320')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.minorTicks" id=link322 onMouseOver="ShowTip(event, 'tt321', 'link322')" onMouseOut="HideTip('tt321')" class=IParent>$.jqplot.<wbr>LogAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/MIT-LICENSE-txt.html#MIT_License" id=link323 onMouseOver="ShowTip(event, 'tt322', 'link323')" onMouseOut="HideTip('tt322')" class=ISymbol>MIT License</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.moveBlock" id=link324 onMouseOver="ShowTip(event, 'tt323', 'link324')" onMouseOut="HideTip('tt323')" class=ISymbol>moveBlock</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToBack" id=link325 onMouseOver="ShowTip(event, 'tt324', 'link325')" onMouseOut="HideTip('tt324')" class=ISymbol>moveSeriesToBack</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToFront" id=link326 onMouseOver="ShowTip(event, 'tt325', 'link326')" onMouseOut="HideTip('tt325')" class=ISymbol>moveSeriesToFront</a>, <span class=IParent>jqPlot</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt246"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.index</td></tr></table></blockquote>0 based index of this series in the plot series array.</div></div><div class=CToolTip id="tt247"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.init = function(</td><td class=PParameter nowrap>target,</td></tr><tr><td></td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>sets the plot target, checks data and applies user options to plot.</div></div><div class=CToolTip id="tt248"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.innerDiameter = null</td></tr></table></blockquote>Inner diameter of the donut, auto calculated by default. </div></div><div class=CToolTip id="tt249"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.insertBreaks = true</td></tr></table></blockquote>true to turn spaces in data block label into html breaks br /.</div></div><div class=CToolTip id="tt250"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intersectionThreshold = 2</td></tr></table></blockquote>pixel distance from data point or marker to consider cursor lines intersecting with point. </div></div><div class=CToolTip id="tt251"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>interval: '3%' }</td></tr></table></blockquote>User specified interval above and below line for bands [default: &lsquo;3%&rsquo;&rsquo;]. </div></div><div class=CToolTip id="tt252"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalColors = [ &quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;]</td></tr></table></blockquote>Array of colors to use for the intervals.</div></div><div class=CToolTip id="tt253"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalInnerRadius = null</td></tr></table></blockquote>Radius of the inner circle of the interval ring.</div></div><div class=CToolTip id="tt254"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalOuterRadius = null</td></tr></table></blockquote>Radius of the outer circle of the interval ring.</div></div><div class=CToolTip id="tt255"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervals = []</td></tr></table></blockquote>Array of ranges to be drawn around the gauge. </div></div><div class=CToolTip id="tt256"><div class=CGeneric>jqPlot requires jQuery (1.4+ required for certain features). </div></div><div class=CToolTip id="tt257"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt258"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt259"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><div class=CToolTip id="tt260"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt261"><div class=CClass>Plot object returned by call to $.jqplot. </div></div><div class=CToolTip id="tt262"><div class=CSection>Pure JavaScript plotting plugin for jQuery.</div></div><div class=CToolTip id="tt263"><div class=CSection>Much of the styling of jqPlot is done by css. </div></div><div class=CToolTip id="tt264"><div class=CSection><b>This document is out of date. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt265"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>The text or html for the label.</div></div><div class=CToolTip id="tt266"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>label for the axis.</div></div><div class=CToolTip id="tt267"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>A gauge label like &lsquo;kph&rsquo; or &lsquo;Volts&rsquo;</div></div><div class=CToolTip id="tt268"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Label for the trend line to use in the legend.</div></div><div class=CToolTip id="tt269"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>Label for the axis</div></div><div class=CToolTip id="tt270"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Line label to use in the legend.</div></div><div class=CToolTip id="tt271"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelHeightAdjust = 0</td></tr></table></blockquote>Number of Pixels to offset the label up (-) or down (+) from its default position.</div></div><div class=CToolTip id="tt272"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelOptions = {}</td></tr></table></blockquote>Options passed to the label renderer.</div></div><div class=CToolTip id="tt273"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'auto'</td></tr></table></blockquote>&lsquo;auto&rsquo;, &lsquo;start&rsquo;, &lsquo;middle&rsquo; or &lsquo;end&rsquo;. </div></div><div class=CToolTip id="tt274"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'inside'</td></tr></table></blockquote>Where to position the label, either &lsquo;inside&rsquo; or &lsquo;bottom&rsquo;.</div></div><div class=CToolTip id="tt275"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>A class of a rendering engine for creating an axis label.</div></div><div class=CToolTip id="tt276"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>array of arrays of labels, one array for each series.</div></div><div class=CToolTip id="tt277"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>Array of labels to use. </div></div><div class=CToolTip id="tt278"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelsFromSeries = false</td></tr></table></blockquote>true to use labels within data point arrays.</div></div><div class=CToolTip id="tt279"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.legend = new Legend()</td></tr></table></blockquote>see $.jqplot.TableLegendRenderer</div></div><div class=CToolTip id="tt280"><div class=CClass>Legend object. </div></div><div class=CToolTip id="tt281"><div class=CClass>A straight line.</div></div><div class=CToolTip id="tt282"><div class=CProperty>Type of ending placed on the line [&lsquo;round&rsquo;, &lsquo;butt&rsquo;, &lsquo;square&rsquo;]</div></div><div class=CToolTip id="tt283"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt284"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt285"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>Canvas lineCap style at ends of line.</div></div><div class=CToolTip id="tt286"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt287"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt288"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'round'</td></tr></table></blockquote>Canvas lineJoin style between segments of series.</div></div><div class=CToolTip id="tt289"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.linePattern = 'solid'</td></tr></table></blockquote>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</div></div><div class=CToolTip id="tt290"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.linePattern = 'solid'</td></tr></table></blockquote>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</div></div><div class=CToolTip id="tt291"><div class=CProperty>Width of the line.</div></div><div class=CToolTip id="tt292"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>width of line if areas are stroked and not filled.</div></div><div class=CToolTip id="tt293"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>size of the line for non-filled markers.</div></div><div class=CToolTip id="tt294"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the hi-low line and open/close ticks. </div></div><div class=CToolTip id="tt295"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>width of the shadow line stroke.</div></div><div class=CToolTip id="tt296"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the trend line.</div></div><div class=CToolTip id="tt297"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2.5</td></tr></table></blockquote>width of the line in pixels. </div></div><div class=CToolTip id="tt298"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidthAdjust = 2.5</td></tr></table></blockquote>Pixels to add to the lineWidth of the highlight.</div></div><div class=CToolTip id="tt299"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'n'</td></tr></table></blockquote>compass location where to position the label around the point. </div></div><div class=CToolTip id="tt300"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'ne'</td></tr></table></blockquote>Placement of the legend. </div></div><div class=CToolTip id="tt301"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.looseZoom = true</td></tr></table></blockquote>Will expand zoom range to provide more rounded tick values. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt302"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><div class=CToolTip id="tt303"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.makeGridData = function(</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts any arbitrary data values to grid coordinates and returns them. </div></div><div class=CToolTip id="tt304"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginBottom = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt305"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginLeft = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt306"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginRight = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt307"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginTop = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt308"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote>tick mark on the axis. </div></div><div class=CToolTip id="tt309"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote>tick mark on the axis. </div></div><div class=CToolTip id="tt310"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerOptions = {}</td></tr></table></blockquote>renderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.</div></div><div class=CToolTip id="tt311"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.markerRenderer = new $.jqplot.MarkerRenderer(</td><td class=PParameter nowrap>{shadow:false}</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Renderer used to draw the marker of the highlighted point. </div></div><div class=CToolTip id="tt312"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = {show:false}</td></tr></table></blockquote>Renderer to use to draw markers on the line. </div></div><div class=CToolTip id="tt313"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = $.jqplot.MarkerRenderer</td></tr></table></blockquote>A class of a renderer which will draw marker (e.g. </div></div><div class=CToolTip id="tt314"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 6</td></tr></table></blockquote>Length of the tick marks in pixels. </div></div><div class=CToolTip id="tt315"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 4</td></tr></table></blockquote>Length of the tick marks in pixels. </div></div><div class=CToolTip id="tt316"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max</td></tr></table></blockquote>Maximum value on the gauge. </div></div><div class=CToolTip id="tt317"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max = null</td></tr></table></blockquote>maximum value of the axis (in data units, not pixels).</div></div><div class=CToolTip id="tt318"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min</td></tr></table></blockquote>Minimum value on the gauge. </div></div><div class=CToolTip id="tt319"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min = null</td></tr></table></blockquote>minimum value of the axis (in data units, not pixels).</div></div><div class=CToolTip id="tt320"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.minorTicks = 0</td></tr></table></blockquote>Number of ticks to add between &ldquo;major&rdquo; ticks. </div></div><div class=CToolTip id="tt321"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.minorTicks = 'auto'</td></tr></table></blockquote>Number of ticks to add between &ldquo;major&rdquo; ticks. </div></div><div class=CToolTip id="tt322"><div class=CSection>Copyright &copy; 2009-2012 Chris Leonello</div></div><div class=CToolTip id="tt323"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveBlock = function (</td><td class=PParameter nowrap>idx,</td></tr><tr><td></td><td class=PParameter nowrap>x,</td></tr><tr><td></td><td class=PParameter nowrap>y,</td></tr><tr><td></td><td class=PParameter nowrap>duration</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Moves an individual block. </div></div><div class=CToolTip id="tt324"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToBack = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>This method requires jQuery 1.4+ Moves the specified series canvas behind all other series canvases.</div></div><div class=CToolTip id="tt325"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.moveSeriesToFront = function (</td><td class=PParameter nowrap>idx</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>This method requires jQuery 1.4+ Moves the specified series canvas in front of all other series canvases. </div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General5.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General5.html
deleted file mode 100644
index 05064f8b..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/General5.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> &middot; 0-9 &middot; <a href="General.html#A">A</a> &middot; <a href="General.html#B">B</a> &middot; <a href="General2.html#C">C</a> &middot; <a href="General2.html#D">D</a> &middot; <a href="General2.html#E">E</a> &middot; <a href="General3.html#F">F</a> &middot; <a href="General3.html#G">G</a> &middot; <a href="General3.html#H">H</a> &middot; <a href="General4.html#I">I</a> &middot; <a href="General4.html#J">J</a> &middot; K &middot; <a href="General4.html#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="#N">N</a> &middot; <a href="#O">O</a> &middot; <a href="#P">P</a> &middot; <a href="#Q">Q</a> &middot; <a href="#R">R</a> &middot; <a href="General6.html#S">S</a> &middot; <a href="General7.html#T">T</a> &middot; <a href="General7.html#U">U</a> &middot; <a href="General7.html#V">V</a> &middot; <a href="General7.html#W">W</a> &middot; <a href="General7.html#X">X</a> &middot; <a href="General7.html#Y">Y</a> &middot; <a href="General7.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="N"></a>N</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.name" id=link327 onMouseOver="ShowTip(event, 'tt326', 'link327')" onMouseOut="HideTip('tt326')" class=ISymbol>name</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needlePad" id=link328 onMouseOver="ShowTip(event, 'tt327', 'link328')" onMouseOut="HideTip('tt327')" class=ISymbol>needlePad</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needleThickness" id=link329 onMouseOver="ShowTip(event, 'tt328', 'link329')" onMouseOut="HideTip('tt328')" class=ISymbol>needleThickness</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.negativeColor" id=link330 onMouseOver="ShowTip(event, 'tt329', 'link330')" onMouseOut="HideTip('tt329')" class=ISymbol>negativeColor</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.neighborThreshold" id=link331 onMouseOver="ShowTip(event, 'tt330', 'link331')" onMouseOut="HideTip('tt330')" class=ISymbol>neighborThreshold</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.newTheme" id=link332 onMouseOver="ShowTip(event, 'tt331', 'link332')" onMouseOut="HideTip('tt331')" class=ISymbol>newTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.noDataIndicator" id=link333 onMouseOver="ShowTip(event, 'tt332', 'link333')" onMouseOut="HideTip('tt332')" class=ISymbol>noDataIndicator</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>numberColumns</span><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberColumns" id=link334 onMouseOver="ShowTip(event, 'tt333', 'link334')" onMouseOut="HideTip('tt333')" class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberColumns" id=link335 onMouseOver="ShowTip(event, 'tt334', 'link335')" onMouseOut="HideTip('tt334')" class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberColumns" id=link336 onMouseOver="ShowTip(event, 'tt335', 'link336')" onMouseOut="HideTip('tt335')" class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberColumns" id=link337 onMouseOver="ShowTip(event, 'tt336', 'link337')" onMouseOut="HideTip('tt336')" class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberColumns" id=link338 onMouseOver="ShowTip(event, 'tt337', 'link338')" onMouseOut="HideTip('tt337')" class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>numberRows</span><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberRows" id=link339 onMouseOver="ShowTip(event, 'tt338', 'link339')" onMouseOut="HideTip('tt338')" class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberRows" id=link340 onMouseOver="ShowTip(event, 'tt339', 'link340')" onMouseOut="HideTip('tt339')" class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberRows" id=link341 onMouseOver="ShowTip(event, 'tt340', 'link341')" onMouseOut="HideTip('tt340')" class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberRows" id=link342 onMouseOver="ShowTip(event, 'tt341', 'link342')" onMouseOut="HideTip('tt341')" class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberRows" id=link343 onMouseOver="ShowTip(event, 'tt342', 'link343')" onMouseOut="HideTip('tt342')" class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.numberTicks" id=link344 onMouseOver="ShowTip(event, 'tt343', 'link344')" onMouseOut="HideTip('tt343')" class=ISymbol>numberTicks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=IHeading><a name="O"></a>O</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.objects" id=link345 onMouseOver="ShowTip(event, 'tt344', 'link345')" onMouseOut="HideTip('tt344')" class=ISymbol>objects</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.offset" id=link346 onMouseOver="ShowTip(event, 'tt345', 'link346')" onMouseOut="HideTip('tt345')" class=ISymbol>offset</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#offsetBars" id=link347 onMouseOver="ShowTip(event, 'tt346', 'link347')" onMouseOut="HideTip('tt346')" class=ISymbol>offsetBars</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.openColor" id=link348 onMouseOver="ShowTip(event, 'tt347', 'link348')" onMouseOut="HideTip('tt347')" class=ISymbol>openColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/optionsTutorial-txt.html#Options_Tutorial" id=link349 onMouseOver="ShowTip(event, 'tt348', 'link349')" onMouseOut="HideTip('tt348')" class=ISymbol>Options Tutorial</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Options_Usage" id=link350 onMouseOver="ShowTip(event, 'tt349', 'link350')" onMouseOut="HideTip('tt349')" class=ISymbol>Options Usage</a></td></tr><tr><td class=IHeading><a name="P"></a>P</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.pad" id=link351 onMouseOver="ShowTip(event, 'tt350', 'link351')" onMouseOut="HideTip('tt350')" class=ISymbol>pad</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>padding</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.padding" id=link352 onMouseOver="ShowTip(event, 'tt351', 'link352')" onMouseOut="HideTip('tt351')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.padding" id=link353 onMouseOver="ShowTip(event, 'tt352', 'link353')" onMouseOut="HideTip('tt352')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.padding" id=link354 onMouseOver="ShowTip(event, 'tt353', 'link354')" onMouseOut="HideTip('tt353')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.padding" id=link355 onMouseOver="ShowTip(event, 'tt354', 'link355')" onMouseOut="HideTip('tt354')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMax" id=link356 onMouseOver="ShowTip(event, 'tt355', 'link356')" onMouseOut="HideTip('tt355')" class=ISymbol>padMax</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMin" id=link357 onMouseOver="ShowTip(event, 'tt356', 'link357')" onMouseOut="HideTip('tt356')" class=ISymbol>padMin</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.pegNeedle" id=link358 onMouseOver="ShowTip(event, 'tt357', 'link358')" onMouseOut="HideTip('tt357')" class=ISymbol>pegNeedle</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.placement" id=link359 onMouseOver="ShowTip(event, 'tt358', 'link359')" onMouseOut="HideTip('tt358')" class=ISymbol>placement</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#position" id=link360 onMouseOver="ShowTip(event, 'tt359', 'link360')" onMouseOut="HideTip('tt359')" class=ISymbol>position</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawHooks" id=link361 onMouseOver="ShowTip(event, 'tt360', 'link361')" onMouseOut="HideTip('tt360')" class=ISymbol>postDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesHooks" id=link362 onMouseOver="ShowTip(event, 'tt361', 'link362')" onMouseOut="HideTip('tt361')" class=ISymbol>postDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesShadowHooks" id=link363 onMouseOver="ShowTip(event, 'tt362', 'link363')" onMouseOut="HideTip('tt362')" class=ISymbol>postDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postInitHooks" id=link364 onMouseOver="ShowTip(event, 'tt363', 'link364')" onMouseOut="HideTip('tt363')" class=ISymbol>postInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseOptionsHooks" id=link365 onMouseOver="ShowTip(event, 'tt364', 'link365')" onMouseOut="HideTip('tt364')" class=ISymbol>postParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseSeriesOptionsHooks" id=link366 onMouseOver="ShowTip(event, 'tt365', 'link366')" onMouseOut="HideTip('tt365')" class=ISymbol>postParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postSeriesInitHooks" id=link367 onMouseOver="ShowTip(event, 'tt366', 'link367')" onMouseOut="HideTip('tt366')" class=ISymbol>postSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.predraw" id=link368 onMouseOver="ShowTip(event, 'tt367', 'link368')" onMouseOut="HideTip('tt367')" class=ISymbol>predraw</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawHooks" id=link369 onMouseOver="ShowTip(event, 'tt368', 'link369')" onMouseOut="HideTip('tt368')" class=ISymbol>preDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawLegendHooks" id=link370 onMouseOver="ShowTip(event, 'tt369', 'link370')" onMouseOut="HideTip('tt369')" class=ISymbol>preDrawLegendHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesHooks" id=link371 onMouseOver="ShowTip(event, 'tt370', 'link371')" onMouseOut="HideTip('tt370')" class=ISymbol>preDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesShadowHooks" id=link372 onMouseOver="ShowTip(event, 'tt371', 'link372')" onMouseOut="HideTip('tt371')" class=ISymbol>preDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>prefix</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.prefix" id=link373 onMouseOver="ShowTip(event, 'tt372', 'link373')" onMouseOut="HideTip('tt372')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.prefix" id=link374 onMouseOver="ShowTip(event, 'tt373', 'link374')" onMouseOut="HideTip('tt373')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preInitHooks" id=link375 onMouseOver="ShowTip(event, 'tt374', 'link375')" onMouseOut="HideTip('tt374')" class=ISymbol>preInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseOptionsHooks" id=link376 onMouseOver="ShowTip(event, 'tt375', 'link376')" onMouseOut="HideTip('tt375')" class=ISymbol>preParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseSeriesOptionsHooks" id=link377 onMouseOver="ShowTip(event, 'tt376', 'link377')" onMouseOut="HideTip('tt376')" class=ISymbol>preParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preSeriesInitHooks" id=link378 onMouseOver="ShowTip(event, 'tt377', 'link378')" onMouseOut="HideTip('tt377')" class=ISymbol>preSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>Properties</span><div class=ISubIndex><span class=IParent>Global</span><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#Properties" class=IFile>plugins/<wbr>jqplot.<wbr>enhancedLegendRenderer.js</a><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#Properties" class=IFile>plugins/<wbr>jqplot.<wbr>pyramidAxisRenderer.js</a><a href="../files/plugins/jqplot-pyramidRenderer-js.html#Properties" class=IFile>plugins/<wbr>jqplot.<wbr>pyramidRenderer.js</a></div><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.Properties" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.Properties" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.Properties" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.Properties" class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.Properties" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.Properties" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.Properties" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.Properties" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.Properties" class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.Properties" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.Properties" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.Properties" class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.Properties" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.Properties" class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.Properties" class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.Properties" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.Properties" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.Properties" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.Properties" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.Properties" id=link379 onMouseOver="ShowTip(event, 'tt378', 'link379')" onMouseOut="HideTip('tt378')" class=IParent>$.jqplot.<wbr>LogAxisRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.Properties" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.Properties" class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.Properties" class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.Properties" class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.Properties" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.Properties" class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.Properties" class=IParent>$.jqplot.<wbr>PieLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.Properties" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.Properties" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.Properties" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.Properties" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.Properties" class=IParent>$.jqplot.<wbr>ThemeEngine</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.Properties" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.Properties" id=link380 onMouseOver="ShowTip(event, 'tt379', 'link380')" onMouseOut="HideTip('tt379')" class=IParent>Axis</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine.Properties" class=IParent>DashedHorizontalLine</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine.Properties" class=IParent>DashedVerticalLine</a><a href="../files/jqplot-core-js.html#Grid.Properties" class=IParent>Grid</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.Properties" class=IParent>HorizontalLine</a><a href="../files/jqplot-core-js.html#jqPlot.Properties" id=link381 onMouseOver="ShowTip(event, 'tt380', 'link381')" onMouseOut="HideTip('tt380')" class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.Properties" class=IParent>Legend</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.Properties" class=IParent>Line</a><a href="../files/jqplot-core-js.html#Series.Properties" id=link382 onMouseOver="ShowTip(event, 'tt381', 'link382')" onMouseOut="HideTip('tt381')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.Properties" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>pt2px</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.pt2px" id=link383 onMouseOver="ShowTip(event, 'tt382', 'link383')" onMouseOut="HideTip('tt382')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.pt2px" id=link384 onMouseOver="ShowTip(event, 'tt383', 'link384')" onMouseOut="HideTip('tt383')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=IHeading><a name="Q"></a>Q</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.quickInit" id=link385 onMouseOver="ShowTip(event, 'tt384', 'link385')" onMouseOut="HideTip('tt384')" class=ISymbol>quickInit</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=IHeading><a name="R"></a>R</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.redraw" id=link386 onMouseOver="ShowTip(event, 'tt385', 'link386')" onMouseOut="HideTip('tt385')" class=ISymbol>redraw</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.reInitialize" id=link387 onMouseOver="ShowTip(event, 'tt386', 'link387')" onMouseOut="HideTip('tt386')" class=ISymbol>reInitialize</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.remove" id=link388 onMouseOver="ShowTip(event, 'tt387', 'link388')" onMouseOut="HideTip('tt387')" class=ISymbol>remove</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.rename" id=link389 onMouseOver="ShowTip(event, 'tt388', 'link389')" onMouseOut="HideTip('tt388')" class=ISymbol>rename</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>renderer</span><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.renderer" id=link390 onMouseOver="ShowTip(event, 'tt389', 'link390')" onMouseOut="HideTip('tt389')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.renderer" id=link391 onMouseOver="ShowTip(event, 'tt390', 'link391')" onMouseOut="HideTip('tt390')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.renderer" id=link392 onMouseOver="ShowTip(event, 'tt391', 'link392')" onMouseOut="HideTip('tt391')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.renderer" id=link393 onMouseOver="ShowTip(event, 'tt392', 'link393')" onMouseOut="HideTip('tt392')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.renderer" id=link394 onMouseOver="ShowTip(event, 'tt393', 'link394')" onMouseOut="HideTip('tt393')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>rendererOptions</span><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.rendererOptions" id=link395 onMouseOver="ShowTip(event, 'tt394', 'link395')" onMouseOut="HideTip('tt394')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.rendererOptions" id=link396 onMouseOver="ShowTip(event, 'tt395', 'link396')" onMouseOut="HideTip('tt395')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.rendererOptions" id=link397 onMouseOver="ShowTip(event, 'tt396', 'link397')" onMouseOut="HideTip('tt396')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.rendererOptions" id=link398 onMouseOver="ShowTip(event, 'tt397', 'link398')" onMouseOut="HideTip('tt397')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.rendererOptions" id=link399 onMouseOver="ShowTip(event, 'tt398', 'link399')" onMouseOut="HideTip('tt398')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.rendererOptions" id=link400 onMouseOver="ShowTip(event, 'tt399', 'link400')" onMouseOut="HideTip('tt399')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.replot" id=link401 onMouseOver="ShowTip(event, 'tt400', 'link401')" onMouseOut="HideTip('tt400')" class=ISymbol>replot</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.resetAxesScale" id=link402 onMouseOver="ShowTip(event, 'tt401', 'link402')" onMouseOut="HideTip('tt401')" class=ISymbol>resetAxesScale</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restoreOriginalSeriesOrder" id=link403 onMouseOver="ShowTip(event, 'tt402', 'link403')" onMouseOut="HideTip('tt402')" class=ISymbol>restoreOriginalSeriesOrder</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restorePreviousSeriesOrder" id=link404 onMouseOver="ShowTip(event, 'tt403', 'link404')" onMouseOut="HideTip('tt403')" class=ISymbol>restorePreviousSeriesOrder</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringColor" id=link405 onMouseOver="ShowTip(event, 'tt404', 'link405')" onMouseOut="HideTip('tt404')" class=ISymbol>ringColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.ringMargin" id=link406 onMouseOver="ShowTip(event, 'tt405', 'link406')" onMouseOut="HideTip('tt405')" class=ISymbol>ringMargin</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringWidth" id=link407 onMouseOver="ShowTip(event, 'tt406', 'link407')" onMouseOut="HideTip('tt406')" class=ISymbol>ringWidth</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.rowSpacing" id=link408 onMouseOver="ShowTip(event, 'tt407', 'link408')" onMouseOut="HideTip('tt407')" class=ISymbol>rowSpacing</a>, <span class=IParent>Legend</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt326"><div class=CProperty>Optional name for the overlay object. </div></div><div class=CToolTip id="tt327"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needlePad = 6</td></tr></table></blockquote>Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.</div></div><div class=CToolTip id="tt328"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needleThickness = null</td></tr></table></blockquote>Maximum thickness the needle. </div></div><div class=CToolTip id="tt329"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.negativeColor</td></tr></table></blockquote>css color spec used for filled (area) plots that are filled to zero and the &ldquo;useNegativeColors&rdquo; option is true.</div></div><div class=CToolTip id="tt330"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.neighborThreshold = 4</td></tr></table></blockquote>how close or far (in pixels) the cursor must be from a point marker to detect the point.</div></div><div class=CToolTip id="tt331"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.newTheme = function(</td><td class=PParameter nowrap>name,</td></tr><tr><td></td><td class=PParameter nowrap>obj</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Create a new theme based on the default theme, adding it the themeEngine.</div></div><div class=CToolTip id="tt332"><div class=CProperty>Options to set up a mock plot with a data loading indicator if no data is specified.</div></div><div class=CToolTip id="tt333"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt334"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt335"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt336"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt337"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt338"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt339"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt340"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt341"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt342"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt343"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberTicks</td></tr></table></blockquote>Desired number of ticks. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt344"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.objects = []</td></tr></table></blockquote></div></div><div class=CToolTip id="tt345"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offset = 1</td></tr></table></blockquote>Pixel offset at the given shadow angle of each shadow stroke from the last stroke.</div></div><div class=CToolTip id="tt346"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offsetBars = false</td></tr></table></blockquote>False will center bars on their y value. </div></div><div class=CToolTip id="tt347"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.openColor = null</td></tr></table></blockquote>color of the open price tick mark. </div></div><div class=CToolTip id="tt348"><div class=CSection>This document will help you understand how jqPlot&rsquo;s options relate to the API documentation and the jqPlot object itself. </div></div><div class=CToolTip id="tt349"><div class=CGeneric>See Options Tutorial</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt350"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pad = 1.2</td></tr></table></blockquote>Padding to extend the range above and below the data bounds. </div></div><div class=CToolTip id="tt351"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote>padding between the donut and plot edges, legend, etc.</div></div><div class=CToolTip id="tt352"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = {top: 20, right: 20, bottom: 20, left: 20}</td></tr></table></blockquote>padding between the funnel and plot edges, legend, etc.</div></div><div class=CToolTip id="tt353"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = null</td></tr></table></blockquote>padding between the meterGauge and plot edges, auto calculated by default.</div></div><div class=CToolTip id="tt354"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote>padding between the pie and plot edges, legend, etc.</div></div><div class=CToolTip id="tt355"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMax = null</td></tr></table></blockquote>Padding to extend the range above data bounds. </div></div><div class=CToolTip id="tt356"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMin = null</td></tr></table></blockquote>Padding to extend the range below data bounds. </div></div><div class=CToolTip id="tt357"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pegNeedle = true</td></tr></table></blockquote>True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is &ldquo;pegged&rdquo;.</div></div><div class=CToolTip id="tt358"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.placement = &quot;insideGrid&quot;</td></tr></table></blockquote>&ldquo;insideGrid&rdquo; places legend inside the grid area of the plot. </div></div><div class=CToolTip id="tt359"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.position = null</td></tr></table></blockquote>Position of axis. </div></div><div class=CToolTip id="tt360"><div class=CHook>called after plot draw.</div></div><div class=CToolTip id="tt361"><div class=CHook>called after each series is drawn.</div></div><div class=CToolTip id="tt362"><div class=CHook>called after series shadows are drawn.</div></div><div class=CToolTip id="tt363"><div class=CHook>called after initialization.</div></div><div class=CToolTip id="tt364"><div class=CHook>called after user options are parsed.</div></div><div class=CToolTip id="tt365"><div class=CHook>called after series related options are parsed.</div></div><div class=CToolTip id="tt366"><div class=CHook>called after series is initialized.</div></div><div class=CToolTip id="tt367"><div class=CProperty>Wether to draw the legend before the series or not. </div></div><div class=CToolTip id="tt368"><div class=CHook>called before plot draw.</div></div><div class=CToolTip id="tt369"><div class=CHook>called before the legend is drawn.</div></div><div class=CToolTip id="tt370"><div class=CHook>called before each series is drawn.</div></div><div class=CToolTip id="tt371"><div class=CHook>called before series shadows are drawn.</div></div><div class=CToolTip id="tt372"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote>String to prepend to the tick label. </div></div><div class=CToolTip id="tt373"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote>String to prepend to the tick label. </div></div><div class=CToolTip id="tt374"><div class=CHook>called before initialization.</div></div><div class=CToolTip id="tt375"><div class=CHook>called before user options are parsed.</div></div><div class=CToolTip id="tt376"><div class=CHook>called before series related options are parsed.</div></div><div class=CToolTip id="tt377"><div class=CHook>called before series is initialized.</div></div><div class=CToolTip id="tt378"><div class=CGroup>Properties</div></div><div class=CToolTip id="tt379"><div class=CGroup>Axes options are specified within an axes object at the top level of the plot options like so:</div></div><div class=CToolTip id="tt380"><div class=CGroup>These properties are specified at the top of the options object like so:</div></div><div class=CToolTip id="tt381"><div class=CGroup>Properties will be assigned from a series array at the top level of the options. </div></div><div class=CToolTip id="tt382"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote>Point to pixel scaling factor, used for computing height of bounding box around a label. </div></div><div class=CToolTip id="tt383"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote>Point to pixel scaling factor, used for computing height of bounding box around a label. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt384"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.quickInit = function ()</td></tr></table></blockquote>Quick reinitialization plot for replotting. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt385"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.redraw = function(</td><td class=PParameter nowrap>clear</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Empties the plot target div and redraws the plot. </div></div><div class=CToolTip id="tt386"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.reInitialize = function (</td><td class=PParameter nowrap>data,</td></tr><tr><td></td><td class=PParameter nowrap>opts</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>reinitialize plot for replotting. </div></div><div class=CToolTip id="tt387"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.remove = function(</td><td class=PParameter nowrap>name</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Remove the given theme from the themeEngine.</div></div><div class=CToolTip id="tt388"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.ThemeEngine.prototype.rename = function (</td><td class=PParameter nowrap>oldName,</td></tr><tr><td></td><td class=PParameter nowrap>newName</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Rename a theme.</div></div><div class=CToolTip id="tt389"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = new $.jqplot.LineRenderer()</td></tr></table></blockquote>Renderer to use to draw the trend line. </div></div><div class=CToolTip id="tt390"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LinearAxisRenderer</td></tr></table></blockquote>A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.</div></div><div class=CToolTip id="tt391"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.CanvasGridRenderer</td></tr></table></blockquote>Instance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.</div></div><div class=CToolTip id="tt392"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LineRenderer</td></tr></table></blockquote>A class of a renderer which will draw the series, see $.jqplot.LineRenderer.</div></div><div class=CToolTip id="tt393"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.DivTitleRenderer</td></tr></table></blockquote>A class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.</div></div><div class=CToolTip id="tt394"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {marker:{show:false}}</td></tr></table></blockquote>Options to pass to the line renderer. </div></div><div class=CToolTip id="tt395"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options. </div></div><div class=CToolTip id="tt396"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>Options to pass on to the renderer, see $.jqplot.CanvasGridRenderer.</div></div><div class=CToolTip id="tt397"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options passed to the renderer.</div></div><div class=CToolTip id="tt398"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>Options to pass on to the renderer.</div></div><div class=CToolTip id="tt399"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options passed to the renderer.</div></div><div class=CToolTip id="tt400"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.replot = function(</td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Does a reinitialization of the plot followed by a redraw. </div></div><div class=CToolTip id="tt401"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.resetAxesScale = function(</td><td class=PParameter nowrap>axes,</td></tr><tr><td></td><td class=PParameter nowrap>options</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>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.</div></div><div class=CToolTip id="tt402"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restoreOriginalSeriesOrder = function ()</td></tr></table></blockquote>This method requires jQuery 1.4+ Restore the series canvas order to its original order when the plot was created.</div></div><div class=CToolTip id="tt403"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.restorePreviousSeriesOrder = function ()</td></tr></table></blockquote>This method requires jQuery 1.4+ Restore the series canvas order to its previous state. </div></div><div class=CToolTip id="tt404"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringColor = &quot;#BBC6D0&quot;</td></tr></table></blockquote>color of the outer ring, hub, and needle of the gauge.</div></div><div class=CToolTip id="tt405"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringMargin = null</td></tr></table></blockquote>pixel distance between rings, or multiple series in a donut plot. </div></div><div class=CToolTip id="tt406"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringWidth = null</td></tr></table></blockquote>width of the ring around the gauge. </div></div><div class=CToolTip id="tt407"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rowSpacing = '0.5em'</td></tr></table></blockquote>css padding-top spec for the rows in the legend.</div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General6.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General6.html
deleted file mode 100644
index 9070e89c..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/General6.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> &middot; 0-9 &middot; <a href="General.html#A">A</a> &middot; <a href="General.html#B">B</a> &middot; <a href="General2.html#C">C</a> &middot; <a href="General2.html#D">D</a> &middot; <a href="General2.html#E">E</a> &middot; <a href="General3.html#F">F</a> &middot; <a href="General3.html#G">G</a> &middot; <a href="General3.html#H">H</a> &middot; <a href="General4.html#I">I</a> &middot; <a href="General4.html#J">J</a> &middot; K &middot; <a href="General4.html#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="General5.html#N">N</a> &middot; <a href="General5.html#O">O</a> &middot; <a href="General5.html#P">P</a> &middot; <a href="General5.html#Q">Q</a> &middot; <a href="General5.html#R">R</a> &middot; <a href="#S">S</a> &middot; <a href="General7.html#T">T</a> &middot; <a href="General7.html#U">U</a> &middot; <a href="General7.html#V">V</a> &middot; <a href="General7.html#W">W</a> &middot; <a href="General7.html#X">X</a> &middot; <a href="General7.html#Y">Y</a> &middot; <a href="General7.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.scaleToHiddenSeries" id=link409 onMouseOver="ShowTip(event, 'tt408', 'link409')" onMouseOut="HideTip('tt408')" class=ISymbol>scaleToHiddenSeries</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.sectionMargin" id=link410 onMouseOver="ShowTip(event, 'tt409', 'link410')" onMouseOut="HideTip('tt409')" class=ISymbol>sectionMargin</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.series" id=link411 onMouseOver="ShowTip(event, 'tt410', 'link411')" onMouseOut="HideTip('tt410')" class=ISymbol>series</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series" id=link412 onMouseOver="ShowTip(event, 'tt411', 'link412')" onMouseOut="HideTip('tt411')" class=ISymbol>Series</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesColors" id=link413 onMouseOver="ShowTip(event, 'tt412', 'link413')" onMouseOut="HideTip('tt412')" class=ISymbol>seriesColors</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesDefaults" id=link414 onMouseOver="ShowTip(event, 'tt413', 'link414')" onMouseOut="HideTip('tt413')" class=ISymbol>seriesDefaults</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.seriesLabelIndex" id=link415 onMouseOver="ShowTip(event, 'tt414', 'link415')" onMouseOut="HideTip('tt414')" class=ISymbol>seriesLabelIndex</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggle" id=link416 onMouseOver="ShowTip(event, 'tt415', 'link416')" onMouseOut="HideTip('tt415')" class=ISymbol>seriesToggle</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggleReplot" id=link417 onMouseOver="ShowTip(event, 'tt416', 'link417')" onMouseOut="HideTip('tt416')" class=ISymbol>seriesToggleReplot</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>setGridData</span><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.setGridData" id=link418 onMouseOver="ShowTip(event, 'tt417', 'link418')" onMouseOut="HideTip('tt417')" class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.setGridData" id=link419 onMouseOver="ShowTip(event, 'tt418', 'link419')" onMouseOut="HideTip('tt418')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadow</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadow" id=link420 onMouseOver="ShowTip(event, 'tt419', 'link420')" onMouseOut="HideTip('tt419')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadow" id=link421 onMouseOver="ShowTip(event, 'tt420', 'link421')" onMouseOut="HideTip('tt420')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadow" id=link422 onMouseOver="ShowTip(event, 'tt421', 'link422')" onMouseOut="HideTip('tt421')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadow" id=link423 onMouseOver="ShowTip(event, 'tt422', 'link423')" onMouseOut="HideTip('tt422')" class=IParent>Grid</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowAlpha</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowAlpha" id=link424 onMouseOver="ShowTip(event, 'tt423', 'link424')" onMouseOut="HideTip('tt423')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowAlpha" id=link425 onMouseOver="ShowTip(event, 'tt424', 'link425')" onMouseOut="HideTip('tt424')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowAlpha" id=link426 onMouseOver="ShowTip(event, 'tt425', 'link426')" onMouseOut="HideTip('tt425')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowAlpha" id=link427 onMouseOver="ShowTip(event, 'tt426', 'link427')" onMouseOut="HideTip('tt426')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAlpha" id=link428 onMouseOver="ShowTip(event, 'tt427', 'link428')" onMouseOut="HideTip('tt427')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowAlpha" id=link429 onMouseOver="ShowTip(event, 'tt428', 'link429')" onMouseOut="HideTip('tt428')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowAlpha" id=link430 onMouseOver="ShowTip(event, 'tt429', 'link430')" onMouseOut="HideTip('tt429')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAlpha" id=link431 onMouseOver="ShowTip(event, 'tt430', 'link431')" onMouseOut="HideTip('tt430')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAlpha" id=link432 onMouseOver="ShowTip(event, 'tt431', 'link432')" onMouseOut="HideTip('tt431')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAlpha" id=link433 onMouseOver="ShowTip(event, 'tt432', 'link433')" onMouseOut="HideTip('tt432')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowAngle</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowAngle" id=link434 onMouseOver="ShowTip(event, 'tt433', 'link434')" onMouseOut="HideTip('tt433')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAngle" id=link435 onMouseOver="ShowTip(event, 'tt434', 'link435')" onMouseOut="HideTip('tt434')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAngle" id=link436 onMouseOver="ShowTip(event, 'tt435', 'link436')" onMouseOut="HideTip('tt435')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAngle" id=link437 onMouseOver="ShowTip(event, 'tt436', 'link437')" onMouseOut="HideTip('tt436')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAngle" id=link438 onMouseOver="ShowTip(event, 'tt437', 'link438')" onMouseOut="HideTip('tt437')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowColor" id=link439 onMouseOver="ShowTip(event, 'tt438', 'link439')" onMouseOut="HideTip('tt438')" class=ISymbol>shadowColor</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowDepth</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowDepth" id=link440 onMouseOver="ShowTip(event, 'tt439', 'link440')" onMouseOut="HideTip('tt439')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowDepth" id=link441 onMouseOver="ShowTip(event, 'tt440', 'link441')" onMouseOut="HideTip('tt440')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowDepth" id=link442 onMouseOver="ShowTip(event, 'tt441', 'link442')" onMouseOut="HideTip('tt441')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowDepth" id=link443 onMouseOver="ShowTip(event, 'tt442', 'link443')" onMouseOut="HideTip('tt442')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowDepth" id=link444 onMouseOver="ShowTip(event, 'tt443', 'link444')" onMouseOut="HideTip('tt443')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowDepth" id=link445 onMouseOver="ShowTip(event, 'tt444', 'link445')" onMouseOut="HideTip('tt444')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowDepth" id=link446 onMouseOver="ShowTip(event, 'tt445', 'link446')" onMouseOut="HideTip('tt445')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowDepth" id=link447 onMouseOver="ShowTip(event, 'tt446', 'link447')" onMouseOut="HideTip('tt446')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowDepth" id=link448 onMouseOver="ShowTip(event, 'tt447', 'link448')" onMouseOut="HideTip('tt447')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowDepth" id=link449 onMouseOver="ShowTip(event, 'tt448', 'link449')" onMouseOut="HideTip('tt448')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowOffset</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowOffset" id=link450 onMouseOver="ShowTip(event, 'tt449', 'link450')" onMouseOut="HideTip('tt449')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowOffset" id=link451 onMouseOver="ShowTip(event, 'tt450', 'link451')" onMouseOut="HideTip('tt450')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowOffset" id=link452 onMouseOver="ShowTip(event, 'tt451', 'link452')" onMouseOut="HideTip('tt451')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowOffset" id=link453 onMouseOver="ShowTip(event, 'tt452', 'link453')" onMouseOut="HideTip('tt452')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowOffset" id=link454 onMouseOver="ShowTip(event, 'tt453', 'link454')" onMouseOut="HideTip('tt453')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowOffset" id=link455 onMouseOver="ShowTip(event, 'tt454', 'link455')" onMouseOut="HideTip('tt454')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowOffset" id=link456 onMouseOver="ShowTip(event, 'tt455', 'link456')" onMouseOut="HideTip('tt455')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowOffset" id=link457 onMouseOver="ShowTip(event, 'tt456', 'link457')" onMouseOut="HideTip('tt456')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowOffset" id=link458 onMouseOver="ShowTip(event, 'tt457', 'link458')" onMouseOut="HideTip('tt457')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowOffset" id=link459 onMouseOver="ShowTip(event, 'tt458', 'link459')" onMouseOut="HideTip('tt458')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowRenderer" id=link460 onMouseOver="ShowTip(event, 'tt459', 'link460')" onMouseOut="HideTip('tt459')" class=ISymbol>shadowRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowWidth" id=link461 onMouseOver="ShowTip(event, 'tt460', 'link461')" onMouseOut="HideTip('tt460')" class=ISymbol>shadowWidth</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shapeRenderer" id=link462 onMouseOver="ShowTip(event, 'tt461', 'link462')" onMouseOut="HideTip('tt461')" class=ISymbol>shapeRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>show</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.show" id=link463 onMouseOver="ShowTip(event, 'tt462', 'link463')" onMouseOut="HideTip('tt462')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.show" id=link464 onMouseOver="ShowTip(event, 'tt463', 'link464')" onMouseOut="HideTip('tt463')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.show" id=link465 onMouseOver="ShowTip(event, 'tt464', 'link465')" onMouseOut="HideTip('tt464')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.show" id=link466 onMouseOver="ShowTip(event, 'tt465', 'link466')" onMouseOut="HideTip('tt465')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.show" id=link467 onMouseOver="ShowTip(event, 'tt466', 'link467')" onMouseOut="HideTip('tt466')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.show" id=link468 onMouseOver="ShowTip(event, 'tt467', 'link468')" onMouseOut="HideTip('tt467')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.show" id=link469 onMouseOver="ShowTip(event, 'tt468', 'link469')" onMouseOut="HideTip('tt468')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.show" id=link470 onMouseOver="ShowTip(event, 'tt469', 'link470')" onMouseOut="HideTip('tt469')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.show" id=link471 onMouseOver="ShowTip(event, 'tt470', 'link471')" onMouseOut="HideTip('tt470')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.show" id=link472 onMouseOver="ShowTip(event, 'tt471', 'link472')" onMouseOut="HideTip('tt471')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.show" id=link473 onMouseOver="ShowTip(event, 'tt472', 'link473')" onMouseOut="HideTip('tt472')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.show" id=link474 onMouseOver="ShowTip(event, 'tt473', 'link474')" onMouseOut="HideTip('tt473')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Legend.show" id=link475 onMouseOver="ShowTip(event, 'tt474', 'link475')" onMouseOut="HideTip('tt474')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.show" id=link476 onMouseOver="ShowTip(event, 'tt475', 'link476')" onMouseOut="HideTip('tt475')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.show" id=link477 onMouseOver="ShowTip(event, 'tt476', 'link477')" onMouseOut="HideTip('tt476')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.showBorders" id=link478 onMouseOver="ShowTip(event, 'tt477', 'link478')" onMouseOut="HideTip('tt477')" class=ISymbol>showBorders</a>, <span class=IParent>$.jqplot.<wbr>MekkoRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showCursorLegend" id=link479 onMouseOver="ShowTip(event, 'tt478', 'link479')" onMouseOut="HideTip('tt478')" class=ISymbol>showCursorLegend</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showDataLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.showDataLabels" id=link480 onMouseOver="ShowTip(event, 'tt479', 'link480')" onMouseOut="HideTip('tt479')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.showDataLabels" id=link481 onMouseOver="ShowTip(event, 'tt480', 'link481')" onMouseOut="HideTip('tt480')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.showDataLabels" id=link482 onMouseOver="ShowTip(event, 'tt481', 'link482')" onMouseOut="HideTip('tt481')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showGridline</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showGridline" id=link483 onMouseOver="ShowTip(event, 'tt482', 'link483')" onMouseOut="HideTip('tt482')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showGridline" id=link484 onMouseOver="ShowTip(event, 'tt483', 'link484')" onMouseOut="HideTip('tt483')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showHorizontalLine" id=link485 onMouseOver="ShowTip(event, 'tt484', 'link485')" onMouseOut="HideTip('tt484')" class=ISymbol>showHorizontalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showLabel</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showLabel" id=link486 onMouseOver="ShowTip(event, 'tt485', 'link486')" onMouseOut="HideTip('tt485')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.showLabel" id=link487 onMouseOver="ShowTip(event, 'tt486', 'link487')" onMouseOut="HideTip('tt486')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showLabel" id=link488 onMouseOver="ShowTip(event, 'tt487', 'link488')" onMouseOut="HideTip('tt487')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Axis.showLabel" id=link489 onMouseOver="ShowTip(event, 'tt488', 'link489')" onMouseOut="HideTip('tt488')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.showLabel" id=link490 onMouseOver="ShowTip(event, 'tt489', 'link490')" onMouseOut="HideTip('tt489')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.showLabels" id=link491 onMouseOver="ShowTip(event, 'tt490', 'link491')" onMouseOut="HideTip('tt490')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.showLabels" id=link492 onMouseOver="ShowTip(event, 'tt491', 'link492')" onMouseOut="HideTip('tt491')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.showLine" id=link493 onMouseOver="ShowTip(event, 'tt492', 'link493')" onMouseOut="HideTip('tt492')" class=ISymbol>showLine</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.showLines" id=link494 onMouseOver="ShowTip(event, 'tt493', 'link494')" onMouseOut="HideTip('tt493')" class=ISymbol>showLines</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showMark</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showMark" id=link495 onMouseOver="ShowTip(event, 'tt494', 'link495')" onMouseOut="HideTip('tt494')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showMark" id=link496 onMouseOver="ShowTip(event, 'tt495', 'link496')" onMouseOut="HideTip('tt495')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showMarker</span><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showMarker" id=link497 onMouseOver="ShowTip(event, 'tt496', 'link497')" onMouseOut="HideTip('tt496')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-core-js.html#Series.showMarker" id=link498 onMouseOver="ShowTip(event, 'tt497', 'link498')" onMouseOut="HideTip('tt497')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.showMinorTicks" id=link499 onMouseOver="ShowTip(event, 'tt498', 'link499')" onMouseOut="HideTip('tt498')" class=ISymbol>showMinorTicks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.showSwatch" id=link500 onMouseOver="ShowTip(event, 'tt499', 'link500')" onMouseOut="HideTip('tt499')" class=ISymbol>showSwatch</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTickLabels" id=link501 onMouseOver="ShowTip(event, 'tt500', 'link501')" onMouseOut="HideTip('tt500')" class=ISymbol>showTickLabels</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.showTickMarks" id=link502 onMouseOver="ShowTip(event, 'tt501', 'link502')" onMouseOut="HideTip('tt501')" class=ISymbol>showTickMarks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showTicks</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTicks" id=link503 onMouseOver="ShowTip(event, 'tt502', 'link503')" onMouseOut="HideTip('tt502')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.showTicks" id=link504 onMouseOver="ShowTip(event, 'tt503', 'link504')" onMouseOut="HideTip('tt503')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showTooltip</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.showTooltip" id=link505 onMouseOver="ShowTip(event, 'tt504', 'link505')" onMouseOut="HideTip('tt504')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltip" id=link506 onMouseOver="ShowTip(event, 'tt505', 'link506')" onMouseOut="HideTip('tt505')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showTooltip" id=link507 onMouseOver="ShowTip(event, 'tt506', 'link507')" onMouseOut="HideTip('tt506')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipDataPosition" id=link508 onMouseOver="ShowTip(event, 'tt507', 'link508')" onMouseOut="HideTip('tt507')" class=ISymbol>showTooltipDataPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipGridPosition" id=link509 onMouseOver="ShowTip(event, 'tt508', 'link509')" onMouseOut="HideTip('tt508')" class=ISymbol>showTooltipGridPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipOutsideZoom" id=link510 onMouseOver="ShowTip(event, 'tt509', 'link510')" onMouseOut="HideTip('tt509')" class=ISymbol>showTooltipOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.showTooltipPrecision" id=link511 onMouseOver="ShowTip(event, 'tt510', 'link511')" onMouseOut="HideTip('tt510')" class=ISymbol>showTooltipPrecision</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipUnitPosition" id=link512 onMouseOver="ShowTip(event, 'tt511', 'link512')" onMouseOut="HideTip('tt511')" class=ISymbol>showTooltipUnitPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showVerticalLine" id=link513 onMouseOver="ShowTip(event, 'tt512', 'link513')" onMouseOut="HideTip('tt512')" class=ISymbol>showVerticalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>size</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.size" id=link514 onMouseOver="ShowTip(event, 'tt513', 'link514')" onMouseOut="HideTip('tt513')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.size" id=link515 onMouseOver="ShowTip(event, 'tt514', 'link515')" onMouseOut="HideTip('tt514')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.sizeAdjust" id=link516 onMouseOver="ShowTip(event, 'tt515', 'link516')" onMouseOut="HideTip('tt515')" class=ISymbol>sizeAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>sliceMargin</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.sliceMargin" id=link517 onMouseOver="ShowTip(event, 'tt516', 'link517')" onMouseOut="HideTip('tt516')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.sliceMargin" id=link518 onMouseOver="ShowTip(event, 'tt517', 'link518')" onMouseOut="HideTip('tt517')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.smooth" id=link519 onMouseOver="ShowTip(event, 'tt518', 'link519')" onMouseOut="HideTip('tt518')" class=ISymbol>smooth</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.sortData" id=link520 onMouseOver="ShowTip(event, 'tt519', 'link520')" onMouseOut="HideTip('tt519')" class=ISymbol>sortData</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.sortMergedLabels" id=link521 onMouseOver="ShowTip(event, 'tt520', 'link521')" onMouseOut="HideTip('tt520')" class=ISymbol>sortMergedLabels</a>, <span class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.stackedValue" id=link522 onMouseOver="ShowTip(event, 'tt521', 'link522')" onMouseOut="HideTip('tt521')" class=ISymbol>stackedValue</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.stackSeries" id=link523 onMouseOver="ShowTip(event, 'tt522', 'link523')" onMouseOut="HideTip('tt522')" class=ISymbol>stackSeries</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.start" id=link524 onMouseOver="ShowTip(event, 'tt523', 'link524')" onMouseOut="HideTip('tt523')" class=ISymbol>start</a>, <span class=IParent>Line</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>startAngle</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.startAngle" id=link525 onMouseOver="ShowTip(event, 'tt524', 'link525')" onMouseOut="HideTip('tt524')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.startAngle" id=link526 onMouseOver="ShowTip(event, 'tt525', 'link526')" onMouseOut="HideTip('tt525')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.stop" id=link527 onMouseOver="ShowTip(event, 'tt526', 'link527')" onMouseOut="HideTip('tt526')" class=ISymbol>stop</a>, <span class=IParent>Line</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeRect" id=link528 onMouseOver="ShowTip(event, 'tt527', 'link528')" onMouseOut="HideTip('tt527')" class=ISymbol>strokeRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeStyle" id=link529 onMouseOver="ShowTip(event, 'tt528', 'link529')" onMouseOut="HideTip('tt528')" class=ISymbol>strokeStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>style</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.style" id=link530 onMouseOver="ShowTip(event, 'tt529', 'link530')" onMouseOut="HideTip('tt529')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.style" id=link531 onMouseOver="ShowTip(event, 'tt530', 'link531')" onMouseOut="HideTip('tt530')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.suffix" id=link532 onMouseOver="ShowTip(event, 'tt531', 'link532')" onMouseOut="HideTip('tt531')" class=ISymbol>suffix</a>, <span class=IParent>$.jqplot.<wbr>AxisTickRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#synchronizeHighlight" id=link533 onMouseOver="ShowTip(event, 'tt532', 'link533')" onMouseOut="HideTip('tt532')" class=ISymbol>synchronizeHighlight</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.syncTicks" id=link534 onMouseOver="ShowTip(event, 'tt533', 'link534')" onMouseOut="HideTip('tt533')" class=ISymbol>syncTicks</a>, <span class=IParent>Axis</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt408"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.scaleToHiddenSeries = false</td></tr></table></blockquote>True to include hidden series when computing axes bounds and scaling.</div></div><div class=CToolTip id="tt409"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sectionMargin = 6</td></tr></table></blockquote>spacing between funnel sections in pixels.</div></div><div class=CToolTip id="tt410"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.series = []</td></tr></table></blockquote>Array of series object options. </div></div><div class=CToolTip id="tt411"><div class=CClass>An individual data series object. </div></div><div class=CToolTip id="tt412"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesColors = $.jqplot.config.defaultColors</td></tr></table></blockquote>Ann array of CSS color specifications that will be applied, in order, to the series in the plot. </div></div><div class=CToolTip id="tt413"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>seriesDefaults: {}, series:[] }</td></tr></table></blockquote>default options that will be applied to all series. </div></div><div class=CToolTip id="tt414"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesLabelIndex = null</td></tr></table></blockquote>array index for location of labels within data point arrays. </div></div><div class=CToolTip id="tt415"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggle = 'normal'</td></tr></table></blockquote>false to not enable series on/off toggling on the legend. </div></div><div class=CToolTip id="tt416"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggleReplot = false</td></tr></table></blockquote>True to replot the chart after toggling series on/off. </div></div><div class=CToolTip id="tt417"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.BezierCurveRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt418"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.MekkoRenderer.prototype.setGridData = function(</td><td class=PParameter nowrap>plot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>converts the user data values to grid coordinates and stores them in the gridData array. </div></div><div class=CToolTip id="tt419"><div class=CProperty>wether or not to draw a shadow on the line</div></div><div class=CToolTip id="tt420"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether or not to draw a shadow on the line</div></div><div class=CToolTip id="tt421"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>true or false, wether or not to show the shadow.</div></div><div class=CToolTip id="tt422"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether to show a shadow behind the grid.</div></div><div class=CToolTip id="tt423"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.08</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt424"><div class=CProperty>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt425"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt426"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt427"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt428"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt429"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt430"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>Alpha transparency of the shadow.</div></div><div class=CToolTip id="tt431"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt432"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.1'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt433"><div class=CProperty>Shadow angle in degrees</div></div><div class=CToolTip id="tt434"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt435"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Angle of the shadow on the trend line.</div></div><div class=CToolTip id="tt436"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>shadow angle in degrees</div></div><div class=CToolTip id="tt437"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt438"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowColor = null</td></tr></table></blockquote>an optional css color spec for the shadow in &lsquo;rgba(n, n, n, n)&rsquo; form</div></div><div class=CToolTip id="tt439"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt440"><div class=CProperty>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt441"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt442"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt443"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt444"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 4</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt445"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt446"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>number of strokes to make of the shadow.</div></div><div class=CToolTip id="tt447"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt448"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt449"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt450"><div class=CProperty>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt451"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt452"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt453"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt454"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt455"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt456"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.0</td></tr></table></blockquote>pixel offset for each stroke of the shadow.</div></div><div class=CToolTip id="tt457"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.5</td></tr></table></blockquote>Offset of each shadow stroke from the border in pixels</div></div><div class=CToolTip id="tt458"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.25</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt459"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowRenderer = new $.jqplot.ShadowRenderer()</td></tr></table></blockquote>Renderer that will draws the shadows on the marker.</div></div><div class=CToolTip id="tt460"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowWidth = 3</td></tr></table></blockquote>width of the stoke for the shadow</div></div><div class=CToolTip id="tt461"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shapeRenderer = new $.jqplot.ShapeRenderer()</td></tr></table></blockquote>Renderer that will draw the marker.</div></div><div class=CToolTip id="tt462"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt463"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label). </div></div><div class=CToolTip id="tt464"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt465"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt466"><div class=CProperty>true to show (draw), false to not draw.</div></div><div class=CToolTip id="tt467"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>wether to show the cursor or not.</div></div><div class=CToolTip id="tt468"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>true to show the highlight.</div></div><div class=CToolTip id="tt469"><div class=CProperty>true to show the bands. </div></div><div class=CToolTip id="tt470"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the marker.</div></div><div class=CToolTip id="tt471"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>show the labels or not.</div></div><div class=CToolTip id="tt472"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>Wether or not to show the trend line.</div></div><div class=CToolTip id="tt473"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote>Wether to display the axis on the graph.</div></div><div class=CToolTip id="tt474"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote>Wether to display the legend on the graph.</div></div><div class=CToolTip id="tt475"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to draw the series.</div></div><div class=CToolTip id="tt476"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the title</div></div><div class=CToolTip id="tt477"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showBorders = true</td></tr></table></blockquote>True to draw borders lines between areas on the chart. </div></div><div class=CToolTip id="tt478"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showCursorLegend = false</td></tr></table></blockquote>Replace the plot legend with an enhanced legend displaying intersection information.</div></div><div class=CToolTip id="tt479"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt480"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt481"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt482"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt483"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt484"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showHorizontalLine = false</td></tr></table></blockquote>draw a horizontal line across the plot which follows the cursor.</div></div><div class=CToolTip id="tt485"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt486"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt487"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt488"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>true to show the axis label.</div></div><div class=CToolTip id="tt489"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>true to show label for this series in the legend.</div></div><div class=CToolTip id="tt490"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>True to show labels on bubbles (if any), false to not show.</div></div><div class=CToolTip id="tt491"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>true to show the label text on the legend.</div></div><div class=CToolTip id="tt492"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLine = true</td></tr></table></blockquote>wether to actually draw the line or not. </div></div><div class=CToolTip id="tt493"><div class=CProperty>True to show lines at top and bottom of bands [default: false].</div></div><div class=CToolTip id="tt494"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt495"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt496"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>true to show the marker</div></div><div class=CToolTip id="tt497"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>wether or not to show the markers at the data points.</div></div><div class=CToolTip id="tt498"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMinorTicks = true</td></tr></table></blockquote>Wether or not to show minor ticks. </div></div><div class=CToolTip id="tt499"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showSwatches = true</td></tr></table></blockquote>true to show the color swatches on the legend.</div></div><div class=CToolTip id="tt500"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickLabels = true</td></tr></table></blockquote>true to show tick labels next to ticks.</div></div><div class=CToolTip id="tt501"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickMarks = true</td></tr></table></blockquote>Wether to show the tick marks (line crossing grid) or not. </div></div><div class=CToolTip id="tt502"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>true to show ticks around gauge.</div></div><div class=CToolTip id="tt503"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>Wether to show the ticks (both marks and labels) or not. </div></div><div class=CToolTip id="tt504"><div class=CProperty>Show a tooltip with data point values.</div></div><div class=CToolTip id="tt505"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>show a cursor position tooltip. </div></div><div class=CToolTip id="tt506"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>Show a tooltip with data point values.</div></div><div class=CToolTip id="tt507"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipDataPosition = false</td></tr></table></blockquote>Used with showVerticalLine to show intersecting data points in the tooltip.</div></div><div class=CToolTip id="tt508"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipGridPosition = false</td></tr></table></blockquote>show the grid pixel coordinates of the mouse.</div></div><div class=CToolTip id="tt509"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipOutsideZoom = false</td></tr></table></blockquote>True will keep updating the tooltip when zooming of the grid.</div></div><div class=CToolTip id="tt510"><div class=CProperty>Controls how close to line cursor must be to show tooltip. </div></div><div class=CToolTip id="tt511"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipUnitPosition = true</td></tr></table></blockquote>show the unit (data) coordinates of the mouse.</div></div><div class=CToolTip id="tt512"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showVerticalLine = false</td></tr></table></blockquote>draw a vertical line across the plot which follows the cursor. </div></div><div class=CToolTip id="tt513"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 4</td></tr></table></blockquote>Length of the tick beyond the grid in pixels. </div></div><div class=CToolTip id="tt514"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 9.0</td></tr></table></blockquote>Size of the marker (diameter or circle, length of edge of square, etc.)</div></div><div class=CToolTip id="tt515"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sizeAdjust = 5</td></tr></table></blockquote>Pixels to add to the overall size of the highlight.</div></div><div class=CToolTip id="tt516"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between donut slices in degrees.</div></div><div class=CToolTip id="tt517"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between pie slices in degrees.</div></div><div class=CToolTip id="tt518"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.smooth = false</td></tr></table></blockquote>True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points. </div></div><div class=CToolTip id="tt519"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortData = true</td></tr></table></blockquote>false to not sort the data passed in by the user. </div></div><div class=CToolTip id="tt520"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortMergedLabels = false</td></tr></table></blockquote>True to sort tick labels when labels are created by merging x axis values from multiple series. </div></div><div class=CToolTip id="tt521"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackedValue = false</td></tr></table></blockquote>true to display value as stacked in a stacked plot. </div></div><div class=CToolTip id="tt522"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackSeries = false</td></tr></table></blockquote>true or false, creates a stack or &ldquo;mountain&rdquo; plot. </div></div><div class=CToolTip id="tt523"><div class=CProperty>[x, y] coordinates for the start of the line.</div></div><div class=CToolTip id="tt524"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing donut in degrees. </div></div><div class=CToolTip id="tt525"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing pie in degrees. </div></div><div class=CToolTip id="tt526"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>stop: [] }</td></tr></table></blockquote>[x, y] coordinates for the end of the line.</div></div><div class=CToolTip id="tt527"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeRect = false</td></tr></table></blockquote>true to draw shape as a stroked rectangle.</div></div><div class=CToolTip id="tt528"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeStyle = '#999999'</td></tr></table></blockquote>css color spec for the stoke style</div></div><div class=CToolTip id="tt529"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'crosshair'</td></tr></table></blockquote>CSS spec for cursor style</div></div><div class=CToolTip id="tt530"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'filledCircle'</td></tr></table></blockquote>One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare</div></div><div class=CToolTip id="tt531"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.suffix = ''</td></tr></table></blockquote>String to append to the tick label. </div></div><div class=CToolTip id="tt532"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.synchronizeHighlight = false</td></tr></table></blockquote>Index of another series to highlight when this series is highlighted. </div></div><div class=CToolTip id="tt533"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.syncTicks = null</td></tr></table></blockquote>true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up. </div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/General7.html b/wqflask/wqflask/static/packages/jqplot/docs/index/General7.html
deleted file mode 100644
index 3eeb2422..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/General7.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Index</div><div class=INavigationBar><a href="General.html#Symbols">$#!</a> &middot; 0-9 &middot; <a href="General.html#A">A</a> &middot; <a href="General.html#B">B</a> &middot; <a href="General2.html#C">C</a> &middot; <a href="General2.html#D">D</a> &middot; <a href="General2.html#E">E</a> &middot; <a href="General3.html#F">F</a> &middot; <a href="General3.html#G">G</a> &middot; <a href="General3.html#H">H</a> &middot; <a href="General4.html#I">I</a> &middot; <a href="General4.html#J">J</a> &middot; K &middot; <a href="General4.html#L">L</a> &middot; <a href="General4.html#M">M</a> &middot; <a href="General5.html#N">N</a> &middot; <a href="General5.html#O">O</a> &middot; <a href="General5.html#P">P</a> &middot; <a href="General5.html#Q">Q</a> &middot; <a href="General5.html#R">R</a> &middot; <a href="General6.html#S">S</a> &middot; <a href="#T">T</a> &middot; <a href="#U">U</a> &middot; <a href="#V">V</a> &middot; <a href="#W">W</a> &middot; <a href="#X">X</a> &middot; <a href="#Y">Y</a> &middot; <a href="#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="T"></a>T</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title.text" id=link535 onMouseOver="ShowTip(event, 'tt534', 'link535')" onMouseOut="HideTip('tt534')" class=ISymbol>text</a>, <span class=IParent>Title</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title.textAlign" id=link536 onMouseOver="ShowTip(event, 'tt535', 'link536')" onMouseOut="HideTip('tt535')" class=ISymbol>textAlign</a>, <span class=IParent>Title</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>textColor</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.textColor" id=link537 onMouseOver="ShowTip(event, 'tt536', 'link537')" onMouseOut="HideTip('tt536')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.textColor" id=link538 onMouseOver="ShowTip(event, 'tt537', 'link538')" onMouseOut="HideTip('tt537')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.textColor" id=link539 onMouseOver="ShowTip(event, 'tt538', 'link539')" onMouseOut="HideTip('tt538')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.textColor" id=link540 onMouseOver="ShowTip(event, 'tt539', 'link540')" onMouseOut="HideTip('tt539')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.textColor" id=link541 onMouseOver="ShowTip(event, 'tt540', 'link541')" onMouseOut="HideTip('tt540')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.themes" id=link542 onMouseOver="ShowTip(event, 'tt541', 'link542')" onMouseOut="HideTip('tt541')" class=ISymbol>themes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.thickness" id=link543 onMouseOver="ShowTip(event, 'tt542', 'link543')" onMouseOut="HideTip('tt542')" class=ISymbol>thickness</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickColor" id=link544 onMouseOver="ShowTip(event, 'tt543', 'link544')" onMouseOut="HideTip('tt543')" class=ISymbol>tickColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tickInset</span><div class=ISubIndex><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickInset" id=link545 onMouseOver="ShowTip(event, 'tt544', 'link545')" onMouseOut="HideTip('tt544')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.tickInset" id=link546 onMouseOver="ShowTip(event, 'tt545', 'link546')" onMouseOut="HideTip('tt545')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickInterval" id=link547 onMouseOver="ShowTip(event, 'tt546', 'link547')" onMouseOut="HideTip('tt546')" class=ISymbol>tickInterval</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.tickLength" id=link548 onMouseOver="ShowTip(event, 'tt547', 'link548')" onMouseOut="HideTip('tt547')" class=ISymbol>tickLength</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.tickMode" id=link549 onMouseOver="ShowTip(event, 'tt548', 'link549')" onMouseOut="HideTip('tt548')" class=ISymbol>tickMode</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickOptions" id=link550 onMouseOver="ShowTip(event, 'tt549', 'link550')" onMouseOut="HideTip('tt549')" class=ISymbol>tickOptions</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickPadding" id=link551 onMouseOver="ShowTip(event, 'tt550', 'link551')" onMouseOut="HideTip('tt550')" class=ISymbol>tickPadding</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tickRenderer</span><div class=ISubIndex><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.tickRenderer" id=link552 onMouseOver="ShowTip(event, 'tt551', 'link552')" onMouseOut="HideTip('tt551')" class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickRenderer" id=link553 onMouseOver="ShowTip(event, 'tt552', 'link553')" onMouseOut="HideTip('tt552')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickRenderer" id=link554 onMouseOver="ShowTip(event, 'tt553', 'link554')" onMouseOut="HideTip('tt553')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>ticks</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ticks" id=link555 onMouseOver="ShowTip(event, 'tt554', 'link555')" onMouseOut="HideTip('tt554')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.ticks" id=link556 onMouseOver="ShowTip(event, 'tt555', 'link556')" onMouseOut="HideTip('tt555')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tickSpacing</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickSpacing" id=link557 onMouseOver="ShowTip(event, 'tt556', 'link557')" onMouseOut="HideTip('tt556')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickSpacing" id=link558 onMouseOver="ShowTip(event, 'tt557', 'link558')" onMouseOut="HideTip('tt557')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.title" id=link559 onMouseOver="ShowTip(event, 'tt558', 'link559')" onMouseOut="HideTip('tt558')" class=ISymbol>title</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title" id=link560 onMouseOver="ShowTip(event, 'tt559', 'link560')" onMouseOut="HideTip('tt559')" class=ISymbol>Title</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipAxes" id=link561 onMouseOver="ShowTip(event, 'tt560', 'link561')" onMouseOut="HideTip('tt560')" class=ISymbol>tooltipAxes</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipAxisGroups" id=link562 onMouseOver="ShowTip(event, 'tt561', 'link562')" onMouseOut="HideTip('tt561')" class=ISymbol>tooltipAxisGroups</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipFadeSpeed</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipFadeSpeed" id=link563 onMouseOver="ShowTip(event, 'tt562', 'link563')" onMouseOut="HideTip('tt562')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFadeSpeed" id=link564 onMouseOver="ShowTip(event, 'tt563', 'link564')" onMouseOut="HideTip('tt563')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipFormatString</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipFormatString" id=link565 onMouseOver="ShowTip(event, 'tt564', 'link565')" onMouseOut="HideTip('tt564')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipFormatString" id=link566 onMouseOver="ShowTip(event, 'tt565', 'link566')" onMouseOut="HideTip('tt565')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFormatString" id=link567 onMouseOver="ShowTip(event, 'tt566', 'link567')" onMouseOut="HideTip('tt566')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipLocation</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipLocation" id=link568 onMouseOver="ShowTip(event, 'tt567', 'link568')" onMouseOut="HideTip('tt567')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipLocation" id=link569 onMouseOver="ShowTip(event, 'tt568', 'link569')" onMouseOut="HideTip('tt568')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipLocation" id=link570 onMouseOver="ShowTip(event, 'tt569', 'link570')" onMouseOut="HideTip('tt569')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipOffset</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipOffset" id=link571 onMouseOver="ShowTip(event, 'tt570', 'link571')" onMouseOut="HideTip('tt570')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipOffset" id=link572 onMouseOver="ShowTip(event, 'tt571', 'link572')" onMouseOut="HideTip('tt571')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipOffset" id=link573 onMouseOver="ShowTip(event, 'tt572', 'link573')" onMouseOut="HideTip('tt572')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.transposedData" id=link574 onMouseOver="ShowTip(event, 'tt573', 'link574')" onMouseOut="HideTip('tt573')" class=ISymbol>transposedData</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.type" id=link575 onMouseOver="ShowTip(event, 'tt574', 'link575')" onMouseOut="HideTip('tt574')" class=ISymbol>type</a>, <span class=IParent>$.jqplot.<wbr>Trendline</span></td></tr><tr><td class=IHeading><a name="U"></a>U</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.upBodyColor" id=link576 onMouseOver="ShowTip(event, 'tt575', 'link576')" onMouseOut="HideTip('tt575')" class=ISymbol>upBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Usage" id=link577 onMouseOver="ShowTip(event, 'tt576', 'link577')" onMouseOut="HideTip('tt576')" class=ISymbol>Usage</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>useAxesFormatters</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.useAxesFormatters" id=link578 onMouseOver="ShowTip(event, 'tt577', 'link578')" onMouseOut="HideTip('tt577')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.useAxesFormatters" id=link579 onMouseOver="ShowTip(event, 'tt578', 'link579')" onMouseOut="HideTip('tt578')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.useNegativeColors" id=link580 onMouseOver="ShowTip(event, 'tt579', 'link580')" onMouseOut="HideTip('tt579')" class=ISymbol>useNegativeColors</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.useSeriesColor" id=link581 onMouseOver="ShowTip(event, 'tt580', 'link581')" onMouseOut="HideTip('tt580')" class=ISymbol>useSeriesColor</a>, <span class=IParent>Axis</span></td></tr><tr><td class=IHeading><a name="V"></a>V</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.varyBarColor" id=link582 onMouseOver="ShowTip(event, 'tt581', 'link582')" onMouseOut="HideTip('tt581')" class=ISymbol>varyBarColor</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.varyBlockColors" id=link583 onMouseOver="ShowTip(event, 'tt582', 'link583')" onMouseOut="HideTip('tt582')" class=ISymbol>varyBlockColors</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.varyBubbleColors" id=link584 onMouseOver="ShowTip(event, 'tt583', 'link584')" onMouseOut="HideTip('tt583')" class=ISymbol>varyBubbleColors</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Version" id=link585 onMouseOver="ShowTip(event, 'tt584', 'link585')" onMouseOut="HideTip('tt584')" class=ISymbol>Version</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#VerticalLine" id=link586 onMouseOver="ShowTip(event, 'tt585', 'link586')" onMouseOut="HideTip('tt585')" class=ISymbol>VerticalLine</a></td></tr><tr><td class=IHeading><a name="W"></a>W</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.waterfall" id=link587 onMouseOver="ShowTip(event, 'tt586', 'link587')" onMouseOut="HideTip('tt586')" class=ISymbol>waterfall</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.wickColor" id=link588 onMouseOver="ShowTip(event, 'tt587', 'link588')" onMouseOut="HideTip('tt587')" class=ISymbol>wickColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.widthRatio" id=link589 onMouseOver="ShowTip(event, 'tt588', 'link589')" onMouseOut="HideTip('tt588')" class=ISymbol>widthRatio</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></td></tr><tr><td class=IHeading><a name="X"></a>X</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>xaxis</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.xaxis" id=link590 onMouseOver="ShowTip(event, 'tt589', 'link590')" onMouseOut="HideTip('tt589')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-core-js.html#Series.xaxis" id=link591 onMouseOver="ShowTip(event, 'tt590', 'link591')" onMouseOut="HideTip('tt590')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.xmax" id=link592 onMouseOver="ShowTip(event, 'tt591', 'link592')" onMouseOut="HideTip('tt591')" class=ISymbol>xmax</a>, <span class=IParent>HorizontalLine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.xmin" id=link593 onMouseOver="ShowTip(event, 'tt592', 'link593')" onMouseOut="HideTip('tt592')" class=ISymbol>xmin</a>, <span class=IParent>HorizontalLine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.xoffset" id=link594 onMouseOver="ShowTip(event, 'tt593', 'link594')" onMouseOut="HideTip('tt593')" class=ISymbol>xoffset</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.xpadding" id=link595 onMouseOver="ShowTip(event, 'tt594', 'link595')" onMouseOut="HideTip('tt594')" class=ISymbol>xpadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=IHeading><a name="Y"></a>Y</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.y" id=link596 onMouseOver="ShowTip(event, 'tt595', 'link596')" onMouseOut="HideTip('tt595')" class=ISymbol>y</a>, <span class=IParent>HorizontalLine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>yaxis</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.yaxis" id=link597 onMouseOver="ShowTip(event, 'tt596', 'link597')" onMouseOut="HideTip('tt596')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-core-js.html#Series.yaxis" id=link598 onMouseOver="ShowTip(event, 'tt597', 'link598')" onMouseOut="HideTip('tt597')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.yoffset" id=link599 onMouseOver="ShowTip(event, 'tt598', 'link599')" onMouseOut="HideTip('tt598')" class=ISymbol>yoffset</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.ypadding" id=link600 onMouseOver="ShowTip(event, 'tt599', 'link600')" onMouseOut="HideTip('tt599')" class=ISymbol>ypadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.yvalues" id=link601 onMouseOver="ShowTip(event, 'tt600', 'link601')" onMouseOut="HideTip('tt600')" class=ISymbol>yvalues</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=IHeading><a name="Z"></a>Z</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.zoom" id=link602 onMouseOver="ShowTip(event, 'tt601', 'link602')" onMouseOut="HideTip('tt601')" class=ISymbol>zoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy" id=link603 onMouseOver="ShowTip(event, 'tt602', 'link603')" onMouseOut="HideTip('tt602')" class=ISymbol>zoomProxy</a>, <span class=IParent>$.jqplot.<wbr>Cursor.$.jqplot.<wbr>Cursor</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt534"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.text = text</td></tr></table></blockquote>text of the title;</div></div><div class=CToolTip id="tt535"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textAlign</td></tr></table></blockquote>css text-align spec for the text.</div></div><div class=CToolTip id="tt536"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt537"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt538"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt539"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css color spec for the legend text.</div></div><div class=CToolTip id="tt540"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css color spec for the text.</div></div><div class=CToolTip id="tt541"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.themes = {}</td></tr></table></blockquote>hash of themes managed by the theme engine. </div></div><div class=CToolTip id="tt542"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.thickness = null</td></tr></table></blockquote>thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.</div></div><div class=CToolTip id="tt543"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickColor = &quot;989898&quot;</td></tr></table></blockquote>color of the tick marks around the gauge.</div></div><div class=CToolTip id="tt544"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInset = 0</td></tr></table></blockquote>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval. </div></div><div class=CToolTip id="tt545"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInset = 0</td></tr></table></blockquote>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval. </div></div><div class=CToolTip id="tt546"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInterval</td></tr></table></blockquote>number of units between ticks. </div></div><div class=CToolTip id="tt547"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickLength = 'auto'</td></tr></table></blockquote>length of the line in pixels indicating open and close price. </div></div><div class=CToolTip id="tt548"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickMode</td></tr></table></blockquote>How to space the ticks on the axis. </div></div><div class=CToolTip id="tt549"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickOptions = {}</td></tr></table></blockquote>Options that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.</div></div><div class=CToolTip id="tt550"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickPadding = null</td></tr></table></blockquote>padding of the tick marks to the outer ring and the tick labels to marks. </div></div><div class=CToolTip id="tt551"><div class=CProperty>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. </div></div><div class=CToolTip id="tt552"><div class=CProperty>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. </div></div><div class=CToolTip id="tt553"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickRenderer = $.jqplot.AxisTickRenderer</td></tr></table></blockquote>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.</div></div><div class=CToolTip id="tt554"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>Array of tick values. </div></div><div class=CToolTip id="tt555"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis. </div></div><div class=CToolTip id="tt556"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 30</td></tr></table></blockquote>Degrees between ticks. </div></div><div class=CToolTip id="tt557"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 75</td></tr></table></blockquote>Approximate pixel spacing between ticks on graph. </div></div><div class=CToolTip id="tt558"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.title = new Title()</td></tr></table></blockquote>Title object. </div></div><div class=CToolTip id="tt559"><div class=CClass>Plot Title object. </div></div><div class=CToolTip id="tt560"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxes = 'both'</td></tr></table></blockquote>Which axes to display in tooltip, &lsquo;x&rsquo;, &lsquo;y&rsquo; or &lsquo;both&rsquo;, &lsquo;xy&rsquo; or &lsquo;yx&rsquo; &lsquo;both&rsquo; and &lsquo;xy&rsquo; are equivalent, &lsquo;yx&rsquo; reverses order of labels.</div></div><div class=CToolTip id="tt561"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxisGroups = []</td></tr></table></blockquote>Show position for the specified axes. </div></div><div class=CToolTip id="tt562"><div class=CProperty>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</div></div><div class=CToolTip id="tt563"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFadeSpeed = &quot;fast&quot;</td></tr></table></blockquote>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</div></div><div class=CToolTip id="tt564"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>tooltipFormatString: '%d, %d' }</td></tr></table></blockquote>Format string passed the x and y values of the cursor on the line. </div></div><div class=CToolTip id="tt565"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.4P, %.4P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt566"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.5P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt567"><div class=CProperty>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</div></div><div class=CToolTip id="tt568"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'se'</td></tr></table></blockquote>Where to position tooltip. </div></div><div class=CToolTip id="tt569"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'nw'</td></tr></table></blockquote>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</div></div><div class=CToolTip id="tt570"><div class=CProperty>Pixel offset of tooltip from the highlight.</div></div><div class=CToolTip id="tt571"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 6</td></tr></table></blockquote>Pixel offset of tooltip from the grid boudaries or cursor center.</div></div><div class=CToolTip id="tt572"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 2</td></tr></table></blockquote>Pixel offset of tooltip from the highlight.</div></div><div class=CToolTip id="tt573"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.transposedData = true</td></tr></table></blockquote>NOT IMPLEMENTED YET. </div></div><div class=CToolTip id="tt574"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.type = 'linear'</td></tr></table></blockquote>Either &lsquo;exponential&rsquo;, &lsquo;exp&rsquo;, or &lsquo;linear&rsquo;.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt575"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.upBodyColor = null</td></tr></table></blockquote>Color of candlestick body of an &ldquo;up&rdquo; day. </div></div><div class=CToolTip id="tt576"><div class=CGeneric>See jqPlot Usage</div></div><div class=CToolTip id="tt577"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt578"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt579"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useNegativeColors = true</td></tr></table></blockquote>true to color negative values differently in filled and bar charts.</div></div><div class=CToolTip id="tt580"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useSeriesColor = false</td></tr></table></blockquote>Use the color of the first series associated with this axis for the tick marks and line bordering this axis.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt581"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBarColor = false</td></tr></table></blockquote>true to color each bar of a series separately rather than have every bar of a given series the same color. </div></div><div class=CToolTip id="tt582"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBlockColors = false</td></tr></table></blockquote>true to vary the color of each block in this series according to the seriesColors array. </div></div><div class=CToolTip id="tt583"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBubbleColors = true</td></tr></table></blockquote>True to vary the color of each bubble in this series according to the seriesColors array. </div></div><div class=CToolTip id="tt584"><div class=CGeneric>version: 1.0.4 revision: 1121</div></div><div class=CToolTip id="tt585"><div class=CClass>A straight vertical line.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt586"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.waterfall = false</td></tr></table></blockquote>true to enable waterfall plot.</div></div><div class=CToolTip id="tt587"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.wickColor = null</td></tr></table></blockquote>color of the hi-lo line thorugh the candlestick body. </div></div><div class=CToolTip id="tt588"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.widthRatio = 0.2</td></tr></table></blockquote>The ratio of the width of the top of the funnel to the bottom. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt589"><div class=CProperty>X axis to use for positioning/scaling the line.</div></div><div class=CToolTip id="tt590"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xaxis = 'xaxis'</td></tr></table></blockquote>which x axis to use with this series, either &lsquo;xaxis&rsquo; or &lsquo;x2axis&rsquo;.</div></div><div class=CToolTip id="tt591"><div class=CProperty>x value for the end of the line, null to scale to axis max.</div></div><div class=CToolTip id="tt592"><div class=CProperty>x value for the start of the line, null to scale to axis min.</div></div><div class=CToolTip id="tt593"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xoffset = 0</td></tr></table></blockquote>DEPRECATED. </div></div><div class=CToolTip id="tt594"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xpadding = 6</td></tr></table></blockquote>horizontal padding in pixels between point and label</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt595"><div class=CProperty>y value to position the line</div></div><div class=CToolTip id="tt596"><div class=CProperty>Y axis to use for positioning/scaling the line.</div></div><div class=CToolTip id="tt597"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yaxis = 'yaxis'</td></tr></table></blockquote>which y axis to use with this series, either &lsquo;yaxis&rsquo; or &lsquo;y2axis&rsquo;.</div></div><div class=CToolTip id="tt598"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yoffset = 0</td></tr></table></blockquote>DEPRECATED. </div></div><div class=CToolTip id="tt599"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ypadding = 6</td></tr></table></blockquote>vertical padding in pixels between point and label</div></div><div class=CToolTip id="tt600"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yvalues = 1</td></tr></table></blockquote>Number of y values to expect in the data point array. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt601"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.zoom = false</td></tr></table></blockquote>Enable plot zooming.</div></div><div class=CToolTip id="tt602"><div class=CFunction><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>$.jqplot.Cursor.zoomProxy = function(</td><td class=PParameter nowrap>targetPlot,</td></tr><tr><td></td><td class=PParameter nowrap>controllerPlot</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>links targetPlot to controllerPlot so that plot zooming of targetPlot will be controlled by zooming on the controllerPlot. </div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex id=MSelected>Everything</div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Hooks.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Hooks.html
deleted file mode 100644
index 8b1a49f5..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/Hooks.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Hook Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Hook Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="#A">A</a> &middot; B &middot; C &middot; D &middot; <a href="#E">E</a> &middot; F &middot; G &middot; H &middot; I &middot; <a href="#J">J</a> &middot; K &middot; L &middot; M &middot; N &middot; O &middot; <a href="#P">P</a> &middot; Q &middot; R &middot; S &middot; T &middot; U &middot; V &middot; W &middot; X &middot; Y &middot; Z</div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.addLegendRowHooks" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>addLegendRowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=IHeading><a name="E"></a>E</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.eventListenerHooks" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>eventListenerHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=IHeading><a name="J"></a>J</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.jqPlot_Pugin_Hooks" class=ISymbol>jqPlot Pugin Hooks</a>, <span class=IParent>$.jqplot</span></td></tr><tr><td class=IHeading><a name="P"></a>P</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawHooks" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>postDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesHooks" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=ISymbol>postDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesShadowHooks" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=ISymbol>postDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postInitHooks" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=ISymbol>postInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseOptionsHooks" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>postParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseSeriesOptionsHooks" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>postParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postSeriesInitHooks" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>postSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawHooks" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>preDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawLegendHooks" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=ISymbol>preDrawLegendHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesHooks" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=ISymbol>preDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesShadowHooks" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=ISymbol>preDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preInitHooks" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=ISymbol>preInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseOptionsHooks" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=ISymbol>preParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseSeriesOptionsHooks" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=ISymbol>preParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preSeriesInitHooks" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=ISymbol>preSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CHook>called at the end of legend draw, so plugins can add rows to the legend table.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt2"><div class=CHook>called at the end of plot drawing, binds listeners to the event canvas which lays on top of the grid area.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt3"><div class=CHook>called after plot draw.</div></div><div class=CToolTip id="tt4"><div class=CHook>called after each series is drawn.</div></div><div class=CToolTip id="tt5"><div class=CHook>called after series shadows are drawn.</div></div><div class=CToolTip id="tt6"><div class=CHook>called after initialization.</div></div><div class=CToolTip id="tt7"><div class=CHook>called after user options are parsed.</div></div><div class=CToolTip id="tt8"><div class=CHook>called after series related options are parsed.</div></div><div class=CToolTip id="tt9"><div class=CHook>called after series is initialized.</div></div><div class=CToolTip id="tt10"><div class=CHook>called before plot draw.</div></div><div class=CToolTip id="tt11"><div class=CHook>called before the legend is drawn.</div></div><div class=CToolTip id="tt12"><div class=CHook>called before each series is drawn.</div></div><div class=CToolTip id="tt13"><div class=CHook>called before series shadows are drawn.</div></div><div class=CToolTip id="tt14"><div class=CHook>called before initialization.</div></div><div class=CToolTip id="tt15"><div class=CHook>called before user options are parsed.</div></div><div class=CToolTip id="tt16"><div class=CHook>called before series related options are parsed.</div></div><div class=CToolTip id="tt17"><div class=CHook>called before series is initialized.</div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex><a href="Properties.html">Properties</a></div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Hooks</div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties.html
deleted file mode 100644
index 24ad3fdf..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="#A">A</a> &middot; <a href="#B">B</a> &middot; <a href="#C">C</a> &middot; <a href="Properties2.html#D">D</a> &middot; <a href="Properties2.html#E">E</a> &middot; <a href="Properties2.html#F">F</a> &middot; <a href="Properties3.html#G">G</a> &middot; <a href="Properties3.html#H">H</a> &middot; <a href="Properties3.html#I">I</a> &middot; J &middot; K &middot; <a href="Properties3.html#L">L</a> &middot; <a href="Properties4.html#M">M</a> &middot; <a href="Properties4.html#N">N</a> &middot; <a href="Properties4.html#O">O</a> &middot; <a href="Properties4.html#P">P</a> &middot; Q &middot; <a href="Properties4.html#R">R</a> &middot; <a href="Properties5.html#S">S</a> &middot; <a href="Properties6.html#T">T</a> &middot; <a href="Properties6.html#U">U</a> &middot; <a href="Properties6.html#V">V</a> &middot; <a href="Properties6.html#W">W</a> &middot; <a href="Properties6.html#X">X</a> &middot; <a href="Properties6.html#Y">Y</a> &middot; <a href="Properties6.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="A"></a>A</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.activeTheme" id=link1 onMouseOver="ShowTip(event, 'tt1', 'link1')" onMouseOut="HideTip('tt1')" class=ISymbol>activeTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.alignTicks" id=link2 onMouseOver="ShowTip(event, 'tt2', 'link2')" onMouseOut="HideTip('tt2')" class=ISymbol>alignTicks</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.alpha" id=link3 onMouseOver="ShowTip(event, 'tt3', 'link3')" onMouseOut="HideTip('tt3')" class=ISymbol>alpha</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>angle</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.angle" id=link4 onMouseOver="ShowTip(event, 'tt4', 'link4')" onMouseOut="HideTip('tt4')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.angle" id=link5 onMouseOver="ShowTip(event, 'tt5', 'link5')" onMouseOut="HideTip('tt5')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.angle" id=link6 onMouseOver="ShowTip(event, 'tt6', 'link6')" onMouseOut="HideTip('tt6')" class=IParent>$.jqplot.<wbr>shadowRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.animate" id=link7 onMouseOver="ShowTip(event, 'tt7', 'link7')" onMouseOut="HideTip('tt7')" class=ISymbol>animate</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.animateReplot" id=link8 onMouseOver="ShowTip(event, 'tt8', 'link8')" onMouseOut="HideTip('tt8')" class=ISymbol>animateReplot</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.autoscale" id=link9 onMouseOver="ShowTip(event, 'tt9', 'link9')" onMouseOut="HideTip('tt9')" class=ISymbol>autoscale</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleBubbles" id=link10 onMouseOver="ShowTip(event, 'tt10', 'link10')" onMouseOut="HideTip('tt10')" class=ISymbol>autoscaleBubbles</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleMultiplier" id=link11 onMouseOver="ShowTip(event, 'tt11', 'link11')" onMouseOut="HideTip('tt11')" class=ISymbol>autoscaleMultiplier</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscalePointsFactor" id=link12 onMouseOver="ShowTip(event, 'tt12', 'link12')" onMouseOut="HideTip('tt12')" class=ISymbol>autoscalePointsFactor</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axes" id=link13 onMouseOver="ShowTip(event, 'tt13', 'link13')" onMouseOut="HideTip('tt13')" class=ISymbol>axes</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axesDefaults" id=link14 onMouseOver="ShowTip(event, 'tt14', 'link14')" onMouseOut="HideTip('tt14')" class=ISymbol>axesDefaults</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.axisDefaults" id=link15 onMouseOver="ShowTip(event, 'tt15', 'link15')" onMouseOut="HideTip('tt15')" class=ISymbol>axisDefaults</a>, <span class=IParent>$.jqplot.<wbr>LogAxisRenderer</span></td></tr><tr><td class=IHeading><a name="B"></a>B</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>background</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.background" id=link16 onMouseOver="ShowTip(event, 'tt16', 'link16')" onMouseOut="HideTip('tt16')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Grid.background" id=link17 onMouseOver="ShowTip(event, 'tt17', 'link17')" onMouseOut="HideTip('tt17')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.background" id=link18 onMouseOver="ShowTip(event, 'tt18', 'link18')" onMouseOut="HideTip('tt18')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.bandData" id=link19 onMouseOver="ShowTip(event, 'tt19', 'link19')" onMouseOut="HideTip('tt19')" class=ISymbol>bandData</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barDirection" id=link20 onMouseOver="ShowTip(event, 'tt20', 'link20')" onMouseOut="HideTip('tt20')" class=ISymbol>barDirection</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelOptions" id=link21 onMouseOver="ShowTip(event, 'tt21', 'link21')" onMouseOut="HideTip('tt21')" class=ISymbol>barLabelOptions</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelRenderer" id=link22 onMouseOver="ShowTip(event, 'tt22', 'link22')" onMouseOut="HideTip('tt22')" class=ISymbol>barLabelRenderer</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabels" id=link23 onMouseOver="ShowTip(event, 'tt23', 'link23')" onMouseOut="HideTip('tt23')" class=ISymbol>barLabels</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barMargin" id=link24 onMouseOver="ShowTip(event, 'tt24', 'link24')" onMouseOut="HideTip('tt24')" class=ISymbol>barMargin</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>barPadding</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#barPadding" id=link25 onMouseOver="ShowTip(event, 'tt25', 'link25')" onMouseOut="HideTip('tt25')" class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barPadding" id=link26 onMouseOver="ShowTip(event, 'tt26', 'link26')" onMouseOut="HideTip('tt26')" class=IParent>$.jqplot.<wbr>BarRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barWidth" id=link27 onMouseOver="ShowTip(event, 'tt27', 'link27')" onMouseOut="HideTip('tt27')" class=ISymbol>barWidth</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>baselineColor</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#baselineColor" id=link28 onMouseOver="ShowTip(event, 'tt28', 'link28')" onMouseOut="HideTip('tt28')" class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.baselineColor" id=link29 onMouseOver="ShowTip(event, 'tt29', 'link29')" onMouseOut="HideTip('tt29')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.baselineColor" id=link30 onMouseOver="ShowTip(event, 'tt30', 'link30')" onMouseOut="HideTip('tt30')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>baselineWidth</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#baselineWidth" id=link31 onMouseOver="ShowTip(event, 'tt31', 'link31')" onMouseOut="HideTip('tt31')" class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.baselineWidth" id=link32 onMouseOver="ShowTip(event, 'tt32', 'link32')" onMouseOut="HideTip('tt32')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.baselineWidth" id=link33 onMouseOver="ShowTip(event, 'tt33', 'link33')" onMouseOut="HideTip('tt33')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.bodyWidth" id=link34 onMouseOver="ShowTip(event, 'tt34', 'link34')" onMouseOut="HideTip('tt34')" class=ISymbol>bodyWidth</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.border" id=link35 onMouseOver="ShowTip(event, 'tt35', 'link35')" onMouseOut="HideTip('tt35')" class=ISymbol>border</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>borderColor</span><div class=ISubIndex><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.borderColor" id=link36 onMouseOver="ShowTip(event, 'tt36', 'link36')" onMouseOut="HideTip('tt36')" class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-core-js.html#Axis.borderColor" id=link37 onMouseOver="ShowTip(event, 'tt37', 'link37')" onMouseOut="HideTip('tt37')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderColor" id=link38 onMouseOver="ShowTip(event, 'tt38', 'link38')" onMouseOut="HideTip('tt38')" class=IParent>Grid</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>borderWidth</span><div class=ISubIndex><a href="../files/jqplot-core-js.html#Axis.borderWidth" id=link39 onMouseOver="ShowTip(event, 'tt39', 'link39')" onMouseOut="HideTip('tt39')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderWidth" id=link40 onMouseOver="ShowTip(event, 'tt40', 'link40')" onMouseOut="HideTip('tt40')" class=IParent>Grid</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.breakOnNull" id=link41 onMouseOver="ShowTip(event, 'tt41', 'link41')" onMouseOut="HideTip('tt41')" class=ISymbol>breakOnNull</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.breakPoints" id=link42 onMouseOver="ShowTip(event, 'tt42', 'link42')" onMouseOut="HideTip('tt42')" class=ISymbol>breakPoints</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.breakTickLabel" id=link43 onMouseOver="ShowTip(event, 'tt43', 'link43')" onMouseOut="HideTip('tt43')" class=ISymbol>breakTickLabel</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.bringSeriesToFront" id=link44 onMouseOver="ShowTip(event, 'tt44', 'link44')" onMouseOut="HideTip('tt44')" class=ISymbol>bringSeriesToFront</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleAlpha" id=link45 onMouseOver="ShowTip(event, 'tt45', 'link45')" onMouseOut="HideTip('tt45')" class=ISymbol>bubbleAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleGradients" id=link46 onMouseOver="ShowTip(event, 'tt46', 'link46')" onMouseOut="HideTip('tt46')" class=ISymbol>bubbleGradients</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=IHeading><a name="C"></a>C</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.candleStick" id=link47 onMouseOver="ShowTip(event, 'tt47', 'link47')" onMouseOut="HideTip('tt47')" class=ISymbol>candleStick</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.clearRect" id=link48 onMouseOver="ShowTip(event, 'tt48', 'link48')" onMouseOut="HideTip('tt48')" class=ISymbol>clearRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.clickReset" id=link49 onMouseOver="ShowTip(event, 'tt49', 'link49')" onMouseOut="HideTip('tt49')" class=ISymbol>clickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.closeColor" id=link50 onMouseOver="ShowTip(event, 'tt50', 'link50')" onMouseOut="HideTip('tt50')" class=ISymbol>closeColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>color</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.color" id=link51 onMouseOver="ShowTip(event, 'tt51', 'link51')" onMouseOut="HideTip('tt51')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.color" id=link52 onMouseOver="ShowTip(event, 'tt52', 'link52')" onMouseOut="HideTip('tt52')" class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.color" id=link53 onMouseOver="ShowTip(event, 'tt53', 'link53')" onMouseOut="HideTip('tt53')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.color" id=link54 onMouseOver="ShowTip(event, 'tt54', 'link54')" onMouseOut="HideTip('tt54')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.color" id=link55 onMouseOver="ShowTip(event, 'tt55', 'link55')" onMouseOut="HideTip('tt55')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.color" id=link56 onMouseOver="ShowTip(event, 'tt56', 'link56')" onMouseOut="HideTip('tt56')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainOutsideZoom" id=link57 onMouseOver="ShowTip(event, 'tt57', 'link57')" onMouseOut="HideTip('tt57')" class=ISymbol>constrainOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.constrainSmoothing" id=link58 onMouseOver="ShowTip(event, 'tt58', 'link58')" onMouseOut="HideTip('tt58')" class=ISymbol>constrainSmoothing</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.constrainTo" id=link59 onMouseOver="ShowTip(event, 'tt59', 'link59')" onMouseOut="HideTip('tt59')" class=ISymbol>constrainTo</a>, <span class=IParent>$.jqplot.<wbr>Dragable</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainZoomTo" id=link60 onMouseOver="ShowTip(event, 'tt60', 'link60')" onMouseOut="HideTip('tt60')" class=ISymbol>constrainZoomTo</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.css" id=link61 onMouseOver="ShowTip(event, 'tt61', 'link61')" onMouseOut="HideTip('tt61')" class=ISymbol>css</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.cursorLegendFormatString" id=link62 onMouseOver="ShowTip(event, 'tt62', 'link62')" onMouseOut="HideTip('tt62')" class=ISymbol>cursorLegendFormatString</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt1"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.activeTheme=null</td></tr></table></blockquote>Pointer to currently active theme</div></div><div class=CToolTip id="tt2"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alignTicks = false</td></tr></table></blockquote>true to align tick marks across opposed axes such as from the y2axis to yaxis.</div></div><div class=CToolTip id="tt3"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.alpha = 0.07</td></tr></table></blockquote>alpha transparency of shadow stroke.</div></div><div class=CToolTip id="tt4"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt5"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 0</td></tr></table></blockquote>angle of text, measured clockwise from x axis.</div></div><div class=CToolTip id="tt6"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.angle = 45</td></tr></table></blockquote>Angle of the shadow in degrees. </div></div><div class=CToolTip id="tt7"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.animate = false</td></tr></table></blockquote>True to animate the series on initial plot draw (renderer dependent). </div></div><div class=CToolTip id="tt8"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.animateReplot = false</td></tr></table></blockquote>True to animate series after a call to the replot() method. </div></div><div class=CToolTip id="tt9"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscale = false</td></tr></table></blockquote>DEPRECATED the default scaling algorithm produces superior results.</div></div><div class=CToolTip id="tt10"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleBubbles = true</td></tr></table></blockquote>True to scale the bubble radius based on plot size. </div></div><div class=CToolTip id="tt11"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscaleMultiplier = 1.0</td></tr></table></blockquote>Multiplier the bubble size if autoscaleBubbles is true.</div></div><div class=CToolTip id="tt12"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.autoscalePointsFactor = -0.07</td></tr></table></blockquote>Factor which decreases bubble size based on how many bubbles on on the chart. </div></div><div class=CToolTip id="tt13"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>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')}</td></tr></table></blockquote>up to 4 axes are supported, each with it&rsquo;s own options, See Axis for axis specific options.</div></div><div class=CToolTip id="tt14"><div class=CProperty>default options that will be applied to all axes. </div></div><div class=CToolTip id="tt15"><div class=CProperty>Default properties which will be applied directly to the series.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt16"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = &quot;#efefef&quot;</td></tr></table></blockquote>background color of the inside of the gauge.</div></div><div class=CToolTip id="tt17"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background = '#fffdf6'</td></tr></table></blockquote>css spec for the background color.</div></div><div class=CToolTip id="tt18"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.background</td></tr></table></blockquote>css spec for the background of the legend box.</div></div><div class=CToolTip id="tt19"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.bandData = []</td></tr></table></blockquote>Data used to draw error bands or confidence intervals above/below a line.</div></div><div class=CToolTip id="tt20"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barDirection = 'vertical'</td></tr></table></blockquote>&lsquo;vertical&rsquo; = up and down bars, &lsquo;horizontal&rsquo; = side to side bars</div></div><div class=CToolTip id="tt21"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelOptions = {}</td></tr></table></blockquote>options object to pass to the bar label renderer.</div></div><div class=CToolTip id="tt22"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>renderer to use to draw labels under each bar.</div></div><div class=CToolTip id="tt23"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barLabels = this.barLabels || []</td></tr></table></blockquote>array of labels to put under each bar.</div></div><div class=CToolTip id="tt24"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barMargin = 10</td></tr></table></blockquote>Number of pixels between groups of bars at adjacent axis values.</div></div><div class=CToolTip id="tt25"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 10</td></tr></table></blockquote></div></div><div class=CToolTip id="tt26"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barPadding = 8</td></tr></table></blockquote>Number of pixels between adjacent bars at the same axis value.</div></div><div class=CToolTip id="tt27"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.barWidth = null</td></tr></table></blockquote>Width of the bar in pixels (auto by devaul). </div></div><div class=CToolTip id="tt28"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><div class=CToolTip id="tt29"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><div class=CToolTip id="tt30"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineColor = null</td></tr></table></blockquote>CSS color spec for the baseline.</div></div><div class=CToolTip id="tt31"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt32"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt33"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.baselineWidth = null</td></tr></table></blockquote>width of the baseline in pixels.</div></div><div class=CToolTip id="tt34"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bodyWidth = 'auto'</td></tr></table></blockquote>width of the candlestick body in pixels. </div></div><div class=CToolTip id="tt35"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.border</td></tr></table></blockquote>css spec for the border around the legend box.</div></div><div class=CToolTip id="tt36"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the borders between areas on the chart</div></div><div class=CToolTip id="tt37"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = null</td></tr></table></blockquote>color of the border adjacent to the axis. </div></div><div class=CToolTip id="tt38"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderColor = '#999999'</td></tr></table></blockquote>css spec for the color of the grid border.</div></div><div class=CToolTip id="tt39"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = null</td></tr></table></blockquote>width of line stroked at the border of the axis. </div></div><div class=CToolTip id="tt40"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.borderWidth = 2.0</td></tr></table></blockquote>width of the border in pixels.</div></div><div class=CToolTip id="tt41"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakOnNull = false</td></tr></table></blockquote>Wether line segments should be be broken at null value. </div></div><div class=CToolTip id="tt42"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakPoints = null</td></tr></table></blockquote>EXPERIMENTAL!!&nbsp; </div></div><div class=CToolTip id="tt43"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.breakTickLabel = &quot;&amp;asymp</td></tr></table></blockquote>Label to use at the axis break if breakPoints are specified.</div></div><div class=CToolTip id="tt44"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bringSeriesToFront = false</td></tr></table></blockquote>This option requires jQuery 1.4+ True to bring the series of the highlighted point to the front of other series.</div></div><div class=CToolTip id="tt45"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleAlpha = 1.0</td></tr></table></blockquote>Alpha transparency to apply to all bubbles in this series.</div></div><div class=CToolTip id="tt46"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.bubbleGradients = false</td></tr></table></blockquote>True to color the bubbles with gradient fills instead of flat colors. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt47"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.candleStick = false</td></tr></table></blockquote>true to render chart as candleStick. </div></div><div class=CToolTip id="tt48"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clearRect = false</td></tr></table></blockquote>true to cear a rectangle.</div></div><div class=CToolTip id="tt49"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.clickReset = false</td></tr></table></blockquote>Will reset plot zoom if single click on plot without drag.</div></div><div class=CToolTip id="tt50"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.closeColor = null</td></tr></table></blockquote>color of the close price tick mark. </div></div><div class=CToolTip id="tt51"><div class=CProperty>color of the line</div></div><div class=CToolTip id="tt52"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>CSS color spec for the dragged point (and adjacent line segment or bar).</div></div><div class=CToolTip id="tt53"><div class=CProperty>color of lines at top and bottom of bands [default: series color].</div></div><div class=CToolTip id="tt54"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>color of marker. </div></div><div class=CToolTip id="tt55"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color = '#666666'</td></tr></table></blockquote>CSS color spec for the trend line. </div></div><div class=CToolTip id="tt56"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.color</td></tr></table></blockquote>css color spec for the series</div></div><div class=CToolTip id="tt57"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainOutsideZoom = true</td></tr></table></blockquote>True to limit actual zoom area to edges of grid, even when zooming outside of plot area. </div></div><div class=CToolTip id="tt58"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.constrainSmoothing = true</td></tr></table></blockquote>True to use a more accurate smoothing algorithm that will not overshoot any data points. </div></div><div class=CToolTip id="tt59"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainTo = 'none'</td></tr></table></blockquote>Constrain dragging motion to an axis or to none. </div></div><div class=CToolTip id="tt60"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.constrainZoomTo = 'none'</td></tr></table></blockquote>&lsquo;none&rsquo;, &lsquo;x&rsquo; or &lsquo;y&rsquo;</div></div><div class=CToolTip id="tt61"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'}</td></tr></table></blockquote>default css styles that will be applied to all data blocks. </div></div><div class=CToolTip id="tt62"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString</td></tr></table></blockquote>Format string used in the cursor legend. </div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties2.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties2.html
deleted file mode 100644
index 60336a39..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties2.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="Properties.html#A">A</a> &middot; <a href="Properties.html#B">B</a> &middot; <a href="Properties.html#C">C</a> &middot; <a href="#D">D</a> &middot; <a href="#E">E</a> &middot; <a href="#F">F</a> &middot; <a href="Properties3.html#G">G</a> &middot; <a href="Properties3.html#H">H</a> &middot; <a href="Properties3.html#I">I</a> &middot; J &middot; K &middot; <a href="Properties3.html#L">L</a> &middot; <a href="Properties4.html#M">M</a> &middot; <a href="Properties4.html#N">N</a> &middot; <a href="Properties4.html#O">O</a> &middot; <a href="Properties4.html#P">P</a> &middot; Q &middot; <a href="Properties4.html#R">R</a> &middot; <a href="Properties5.html#S">S</a> &middot; <a href="Properties6.html#T">T</a> &middot; <a href="Properties6.html#U">U</a> &middot; <a href="Properties6.html#V">V</a> &middot; <a href="Properties6.html#W">W</a> &middot; <a href="Properties6.html#X">X</a> &middot; <a href="Properties6.html#Y">Y</a> &middot; <a href="Properties6.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="D"></a>D</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dashPattern</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine.dashPattern" id=link63 onMouseOver="ShowTip(event, 'tt63', 'link63')" onMouseOut="HideTip('tt63')" class=IParent>DashedHorizontalLine</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine.dashPattern" id=link64 onMouseOver="ShowTip(event, 'tt64', 'link64')" onMouseOut="HideTip('tt64')" class=IParent>DashedVerticalLine</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.data" id=link65 onMouseOver="ShowTip(event, 'tt65', 'link65')" onMouseOut="HideTip('tt65')" class=ISymbol>data</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelCenterOn" id=link66 onMouseOver="ShowTip(event, 'tt66', 'link66')" onMouseOut="HideTip('tt66')" class=ISymbol>dataLabelCenterOn</a>, <span class=IParent>$.jqplot.<wbr>PieRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelFormatString</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelFormatString" id=link67 onMouseOver="ShowTip(event, 'tt67', 'link67')" onMouseOut="HideTip('tt67')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelFormatString" id=link68 onMouseOver="ShowTip(event, 'tt68', 'link68')" onMouseOut="HideTip('tt68')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelFormatString" id=link69 onMouseOver="ShowTip(event, 'tt69', 'link69')" onMouseOut="HideTip('tt69')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelNudge</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelNudge" id=link70 onMouseOver="ShowTip(event, 'tt70', 'link70')" onMouseOut="HideTip('tt70')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelNudge" id=link71 onMouseOver="ShowTip(event, 'tt71', 'link71')" onMouseOut="HideTip('tt71')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelPositionFactor</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelPositionFactor" id=link72 onMouseOver="ShowTip(event, 'tt72', 'link72')" onMouseOut="HideTip('tt72')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelPositionFactor" id=link73 onMouseOver="ShowTip(event, 'tt73', 'link73')" onMouseOut="HideTip('tt73')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabels" id=link74 onMouseOver="ShowTip(event, 'tt74', 'link74')" onMouseOut="HideTip('tt74')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabels" id=link75 onMouseOver="ShowTip(event, 'tt75', 'link75')" onMouseOut="HideTip('tt75')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabels" id=link76 onMouseOver="ShowTip(event, 'tt76', 'link76')" onMouseOut="HideTip('tt76')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>dataLabelThreshold</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelThreshold" id=link77 onMouseOver="ShowTip(event, 'tt77', 'link77')" onMouseOut="HideTip('tt77')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelThreshold" id=link78 onMouseOver="ShowTip(event, 'tt78', 'link78')" onMouseOut="HideTip('tt78')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelThreshold" id=link79 onMouseOver="ShowTip(event, 'tt79', 'link79')" onMouseOut="HideTip('tt79')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.dataRenderer" id=link80 onMouseOver="ShowTip(event, 'tt80', 'link80')" onMouseOut="HideTip('tt80')" class=ISymbol>dataRenderer</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.dataRendererOptions" id=link81 onMouseOver="ShowTip(event, 'tt81', 'link81')" onMouseOut="HideTip('tt81')" class=ISymbol>dataRendererOptions</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.dblClickReset" id=link82 onMouseOver="ShowTip(event, 'tt82', 'link82')" onMouseOut="HideTip('tt82')" class=ISymbol>dblClickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.defaultAxisStart" id=link83 onMouseOver="ShowTip(event, 'tt83', 'link83')" onMouseOut="HideTip('tt83')" class=ISymbol>defaultAxisStart</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.depth" id=link84 onMouseOver="ShowTip(event, 'tt84', 'link84')" onMouseOut="HideTip('tt84')" class=ISymbol>depth</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>diameter</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.diameter" id=link85 onMouseOver="ShowTip(event, 'tt85', 'link85')" onMouseOut="HideTip('tt85')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.diameter" id=link86 onMouseOver="ShowTip(event, 'tt86', 'link86')" onMouseOut="HideTip('tt86')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.diameter" id=link87 onMouseOver="ShowTip(event, 'tt87', 'link87')" onMouseOut="HideTip('tt87')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#disableIEFading" id=link88 onMouseOver="ShowTip(event, 'tt88', 'link88')" onMouseOut="HideTip('tt88')" class=ISymbol>disableIEFading</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.disableStack" id=link89 onMouseOver="ShowTip(event, 'tt89', 'link89')" onMouseOut="HideTip('tt89')" class=ISymbol>disableStack</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.downBodyColor" id=link90 onMouseOver="ShowTip(event, 'tt90', 'link90')" onMouseOut="HideTip('tt90')" class=ISymbol>downBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>drawBaseline</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#drawBaseline" id=link91 onMouseOver="ShowTip(event, 'tt91', 'link91')" onMouseOut="HideTip('tt91')" class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.drawBaseline" id=link92 onMouseOver="ShowTip(event, 'tt92', 'link92')" onMouseOut="HideTip('tt92')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.drawBaseline" id=link93 onMouseOver="ShowTip(event, 'tt93', 'link93')" onMouseOut="HideTip('tt93')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.drawBaseline" id=link94 onMouseOver="ShowTip(event, 'tt94', 'link94')" onMouseOut="HideTip('tt94')" class=IParent>$.jqplot.<wbr>LogAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawBorder" id=link95 onMouseOver="ShowTip(event, 'tt95', 'link95')" onMouseOut="HideTip('tt95')" class=ISymbol>drawBorder</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawGridlines" id=link96 onMouseOver="ShowTip(event, 'tt96', 'link96')" onMouseOut="HideTip('tt96')" class=ISymbol>drawGridlines</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMajorGridlines" id=link97 onMouseOver="ShowTip(event, 'tt97', 'link97')" onMouseOut="HideTip('tt97')" class=ISymbol>drawMajorGridlines</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMajorTickMarks" id=link98 onMouseOver="ShowTip(event, 'tt98', 'link98')" onMouseOut="HideTip('tt98')" class=ISymbol>drawMajorTickMarks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMinorGridlines" id=link99 onMouseOver="ShowTip(event, 'tt99', 'link99')" onMouseOut="HideTip('tt99')" class=ISymbol>drawMinorGridlines</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMinorTickMarks" id=link100 onMouseOver="ShowTip(event, 'tt100', 'link100')" onMouseOut="HideTip('tt100')" class=ISymbol>drawMinorTickMarks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=IHeading><a name="E"></a>E</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.edgeTolerance" id=link101 onMouseOver="ShowTip(event, 'tt101', 'link101')" onMouseOut="HideTip('tt101')" class=ISymbol>edgeTolerance</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>enableFontSupport</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.enableFontSupport" id=link102 onMouseOver="ShowTip(event, 'tt102', 'link102')" onMouseOut="HideTip('tt102')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.enableFontSupport" id=link103 onMouseOver="ShowTip(event, 'tt103', 'link103')" onMouseOut="HideTip('tt103')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>escapeHtml</span><div class=ISubIndex><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.escapeHtml" id=link104 onMouseOver="ShowTip(event, 'tt104', 'link104')" onMouseOut="HideTip('tt104')" class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.escapeHtml" id=link105 onMouseOver="ShowTip(event, 'tt105', 'link105')" onMouseOut="HideTip('tt105')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.escapeHtml" id=link106 onMouseOver="ShowTip(event, 'tt106', 'link106')" onMouseOut="HideTip('tt106')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.escapeHtml" id=link107 onMouseOver="ShowTip(event, 'tt107', 'link107')" onMouseOut="HideTip('tt107')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>escapeHTML</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.escapeHTML" id=link108 onMouseOver="ShowTip(event, 'tt108', 'link108')" onMouseOut="HideTip('tt108')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.escapeHTML" id=link109 onMouseOver="ShowTip(event, 'tt109', 'link109')" onMouseOut="HideTip('tt109')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.escapeHTML" id=link110 onMouseOver="ShowTip(event, 'tt110', 'link110')" onMouseOut="HideTip('tt110')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr><tr><td class=IHeading><a name="F"></a>F</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fadeTooltip</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.fadeTooltip" id=link111 onMouseOver="ShowTip(event, 'tt111', 'link111')" onMouseOut="HideTip('tt111')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.fadeTooltip" id=link112 onMouseOver="ShowTip(event, 'tt112', 'link112')" onMouseOut="HideTip('tt112')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fill</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#fill" id=link113 onMouseOver="ShowTip(event, 'tt113', 'link113')" onMouseOut="HideTip('tt113')" class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.fill" id=link114 onMouseOver="ShowTip(event, 'tt114', 'link114')" onMouseOut="HideTip('tt114')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.fill" id=link115 onMouseOver="ShowTip(event, 'tt115', 'link115')" onMouseOut="HideTip('tt115')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.fill" id=link116 onMouseOver="ShowTip(event, 'tt116', 'link116')" onMouseOut="HideTip('tt116')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.fill" id=link117 onMouseOver="ShowTip(event, 'tt117', 'link117')" onMouseOut="HideTip('tt117')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.fill" id=link118 onMouseOver="ShowTip(event, 'tt118', 'link118')" onMouseOut="HideTip('tt118')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fill" id=link119 onMouseOver="ShowTip(event, 'tt119', 'link119')" onMouseOut="HideTip('tt119')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.fill" id=link120 onMouseOver="ShowTip(event, 'tt120', 'link120')" onMouseOut="HideTip('tt120')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAlpha" id=link121 onMouseOver="ShowTip(event, 'tt121', 'link121')" onMouseOut="HideTip('tt121')" class=ISymbol>fillAlpha</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAndStroke" id=link122 onMouseOver="ShowTip(event, 'tt122', 'link122')" onMouseOut="HideTip('tt122')" class=ISymbol>fillAndStroke</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAxis" id=link123 onMouseOver="ShowTip(event, 'tt123', 'link123')" onMouseOut="HideTip('tt123')" class=ISymbol>fillAxis</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.fillBetween" id=link124 onMouseOver="ShowTip(event, 'tt124', 'link124')" onMouseOut="HideTip('tt124')" class=ISymbol>fillBetween</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fillColor</span><div class=ISubIndex><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.fillColor" id=link125 onMouseOver="ShowTip(event, 'tt125', 'link125')" onMouseOut="HideTip('tt125')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-core-js.html#Series.fillColor" id=link126 onMouseOver="ShowTip(event, 'tt126', 'link126')" onMouseOut="HideTip('tt126')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillDownBody" id=link127 onMouseOver="ShowTip(event, 'tt127', 'link127')" onMouseOut="HideTip('tt127')" class=ISymbol>fillDownBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillRect" id=link128 onMouseOver="ShowTip(event, 'tt128', 'link128')" onMouseOut="HideTip('tt128')" class=ISymbol>fillRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillStyle" id=link129 onMouseOver="ShowTip(event, 'tt129', 'link129')" onMouseOut="HideTip('tt129')" class=ISymbol>fillStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToValue" id=link130 onMouseOver="ShowTip(event, 'tt130', 'link130')" onMouseOut="HideTip('tt130')" class=ISymbol>fillToValue</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToZero" id=link131 onMouseOver="ShowTip(event, 'tt131', 'link131')" onMouseOut="HideTip('tt131')" class=ISymbol>fillToZero</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillUpBody" id=link132 onMouseOver="ShowTip(event, 'tt132', 'link132')" onMouseOut="HideTip('tt132')" class=ISymbol>fillUpBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.followMouse" id=link133 onMouseOver="ShowTip(event, 'tt133', 'link133')" onMouseOut="HideTip('tt133')" class=ISymbol>followMouse</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontFamily</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontFamily" id=link134 onMouseOver="ShowTip(event, 'tt134', 'link134')" onMouseOut="HideTip('tt134')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontFamily" id=link135 onMouseOver="ShowTip(event, 'tt135', 'link135')" onMouseOut="HideTip('tt135')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontFamily" id=link136 onMouseOver="ShowTip(event, 'tt136', 'link136')" onMouseOut="HideTip('tt136')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.fontFamily" id=link137 onMouseOver="ShowTip(event, 'tt137', 'link137')" onMouseOut="HideTip('tt137')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontFamily" id=link138 onMouseOver="ShowTip(event, 'tt138', 'link138')" onMouseOut="HideTip('tt138')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontSize</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontSize" id=link139 onMouseOver="ShowTip(event, 'tt139', 'link139')" onMouseOut="HideTip('tt139')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontSize" id=link140 onMouseOver="ShowTip(event, 'tt140', 'link140')" onMouseOut="HideTip('tt140')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontSize" id=link141 onMouseOver="ShowTip(event, 'tt141', 'link141')" onMouseOut="HideTip('tt141')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.fontSize" id=link142 onMouseOver="ShowTip(event, 'tt142', 'link142')" onMouseOut="HideTip('tt142')" class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.fontSize" id=link143 onMouseOver="ShowTip(event, 'tt143', 'link143')" onMouseOut="HideTip('tt143')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontSize" id=link144 onMouseOver="ShowTip(event, 'tt144', 'link144')" onMouseOut="HideTip('tt144')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontStretch</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontStretch" id=link145 onMouseOver="ShowTip(event, 'tt145', 'link145')" onMouseOut="HideTip('tt145')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontStretch" id=link146 onMouseOver="ShowTip(event, 'tt146', 'link146')" onMouseOut="HideTip('tt146')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>fontWeight</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontWeight" id=link147 onMouseOver="ShowTip(event, 'tt147', 'link147')" onMouseOut="HideTip('tt147')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontWeight" id=link148 onMouseOver="ShowTip(event, 'tt148', 'link148')" onMouseOut="HideTip('tt148')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.forceTickAt0" id=link149 onMouseOver="ShowTip(event, 'tt149', 'link149')" onMouseOut="HideTip('tt149')" class=ISymbol>forceTickAt0</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.forceTickAt100" id=link150 onMouseOver="ShowTip(event, 'tt150', 'link150')" onMouseOut="HideTip('tt150')" class=ISymbol>forceTickAt100</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>formatString</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatString" id=link151 onMouseOver="ShowTip(event, 'tt151', 'link151')" onMouseOut="HideTip('tt151')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatString" id=link152 onMouseOver="ShowTip(event, 'tt152', 'link152')" onMouseOut="HideTip('tt152')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.formatString" id=link153 onMouseOver="ShowTip(event, 'tt153', 'link153')" onMouseOut="HideTip('tt153')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatString" id=link154 onMouseOver="ShowTip(event, 'tt154', 'link154')" onMouseOut="HideTip('tt154')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>formatter</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatter" id=link155 onMouseOver="ShowTip(event, 'tt155', 'link155')" onMouseOut="HideTip('tt155')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatter" id=link156 onMouseOver="ShowTip(event, 'tt156', 'link156')" onMouseOut="HideTip('tt156')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatter" id=link157 onMouseOver="ShowTip(event, 'tt157', 'link157')" onMouseOut="HideTip('tt157')" class=IParent>$.jqplot.<wbr>PointLabels</a></div></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt63"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>dashPattern: [8,8] }</td></tr></table></blockquote>Array of line, space settings in pixels. </div></div><div class=CToolTip id="tt64"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>dashPattern: [8,8] }</td></tr></table></blockquote>Array of line, space settings in pixels. </div></div><div class=CToolTip id="tt65"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.data = []</td></tr></table></blockquote>user&rsquo;s data. </div></div><div class=CToolTip id="tt66"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelCenterOn = true</td></tr></table></blockquote>True to center the data label at its position. </div></div><div class=CToolTip id="tt67"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt68"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt69"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelFormatString = null</td></tr></table></blockquote>Format string for data labels. </div></div><div class=CToolTip id="tt70"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 0</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt71"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelNudge = 2</td></tr></table></blockquote>Number of pixels to slide the label away from (+) or toward (-) the center of the pie.</div></div><div class=CToolTip id="tt72"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.4</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt73"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelPositionFactor = 0.52</td></tr></table></blockquote>A Multiplier (0-1) of the pie radius which controls position of label on slice. </div></div><div class=CToolTip id="tt74"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt75"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt76"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabels = 'percent'</td></tr></table></blockquote>Either &lsquo;label&rsquo;, &lsquo;value&rsquo;, &lsquo;percent&rsquo; or an array of labels to place on the pie slices. </div></div><div class=CToolTip id="tt77"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt78"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote></div></div><div class=CToolTip id="tt79"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataLabelThreshold = 3</td></tr></table></blockquote>Threshhold in percentage (0-100) of pie area, below which no label will be displayed. </div></div><div class=CToolTip id="tt80"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataRenderer</td></tr></table></blockquote>A callable which can be used to preprocess data passed into the plot. </div></div><div class=CToolTip id="tt81"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dataRendererOptions</td></tr></table></blockquote>Options that will be passed to the dataRenderer. </div></div><div class=CToolTip id="tt82"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.dblClickReset = true</td></tr></table></blockquote>Will reset plot zoom if double click on plot without drag.</div></div><div class=CToolTip id="tt83"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.defaultAxisStart = 1</td></tr></table></blockquote>1-D data series are internally converted into 2-D [x,y] data point arrays by jqPlot. </div></div><div class=CToolTip id="tt84"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.depth = 3</td></tr></table></blockquote>how many times the shadow is stroked. </div></div><div class=CToolTip id="tt85"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the donut, auto computed by default</div></div><div class=CToolTip id="tt86"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the meterGauge, auto computed by default</div></div><div class=CToolTip id="tt87"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.diameter = null</td></tr></table></blockquote>Outer diameter of the pie, auto computed by default</div></div><div class=CToolTip id="tt88"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableIEFading = true</td></tr></table></blockquote>true to toggle series with a show/hide method only and not allow fading in/out. </div></div><div class=CToolTip id="tt89"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.disableStack = false</td></tr></table></blockquote>true to not stack this series with other series in the plot. </div></div><div class=CToolTip id="tt90"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.downBodyColor = null</td></tr></table></blockquote>Color of candlestick body on a &ldquo;down&rdquo; day. </div></div><div class=CToolTip id="tt91"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt92"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt93"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt94"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBaseline = true</td></tr></table></blockquote>True to draw the axis baseline.</div></div><div class=CToolTip id="tt95"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawBorder = true</td></tr></table></blockquote>True to draw border around grid.</div></div><div class=CToolTip id="tt96"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawGridlines = true</td></tr></table></blockquote>wether to draw the gridlines on the plot.</div></div><div class=CToolTip id="tt97"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMajorGridlines = true</td></tr></table></blockquote>True to draw gridlines for major axis ticks.</div></div><div class=CToolTip id="tt98"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMajorTickMarks = true</td></tr></table></blockquote>True to draw tick marks for major axis ticks.</div></div><div class=CToolTip id="tt99"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMinorGridlines = false</td></tr></table></blockquote>True to draw gridlines for minor ticks.</div></div><div class=CToolTip id="tt100"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.drawMinorTickMarks = true</td></tr></table></blockquote>True to draw tick marks for minor ticks. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt101"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.edgeTolerance = -5</td></tr></table></blockquote>Number of pixels that the label must be away from an axis boundary in order to be drawn. </div></div><div class=CToolTip id="tt102"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt103"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.enableFontSupport = true</td></tr></table></blockquote>true to turn on native canvas font support in Mozilla 3.5+ and Safari 4+. </div></div><div class=CToolTip id="tt104"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>true to escape html in the box label.</div></div><div class=CToolTip id="tt105"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = true</td></tr></table></blockquote>True to escape html in bubble label text.</div></div><div class=CToolTip id="tt106"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>True to escape special characters with their html entity equivalents in legend text. </div></div><div class=CToolTip id="tt107"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHtml = false</td></tr></table></blockquote>True to escape special characters with their html entity equivalents in title text. </div></div><div class=CToolTip id="tt108"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote>true to escape HTML entities in the label.</div></div><div class=CToolTip id="tt109"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = false</td></tr></table></blockquote>true to escape HTML entities in the label.</div></div><div class=CToolTip id="tt110"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.escapeHTML = true</td></tr></table></blockquote>true to escape html entities in the labels. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt111"><div class=CProperty>true = fade in/out tooltip, flase = show/hide tooltip</div></div><div class=CToolTip id="tt112"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fadeTooltip = true</td></tr></table></blockquote>true = fade in/out tooltip, flase = show/hide tooltip</div></div><div class=CToolTip id="tt113"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>True to fill the bars.</div></div><div class=CToolTip id="tt114"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt115"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fill the areas.</div></div><div class=CToolTip id="tt116"><div class=CProperty>True to fill area between bands [default: true].</div></div><div class=CToolTip id="tt117"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = true</td></tr></table></blockquote>true or false, wether to fil the slices.</div></div><div class=CToolTip id="tt118"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt119"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>whether to fill the shape.</div></div><div class=CToolTip id="tt120"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fill = false</td></tr></table></blockquote>true or false, wether to fill under lines or in bars. </div></div><div class=CToolTip id="tt121"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAlpha</td></tr></table></blockquote>Alpha transparency to apply to the fill under the line. </div></div><div class=CToolTip id="tt122"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAndStroke = false</td></tr></table></blockquote>If true will stroke the line (with color this.color) as well as fill under it. </div></div><div class=CToolTip id="tt123"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillAxis = 'y'</td></tr></table></blockquote>Either &lsquo;x&rsquo; or &lsquo;y&rsquo;. </div></div><div class=CToolTip id="tt124"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }</td></tr></table></blockquote>Fill between 2 line series in a plot. </div></div><div class=CToolTip id="tt125"><div class=CProperty>css color spec for filled area. </div></div><div class=CToolTip id="tt126"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillColor</td></tr></table></blockquote>CSS color spec to use for fill under line. </div></div><div class=CToolTip id="tt127"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillDownBody = true</td></tr></table></blockquote>true to render a &ldquo;down&rdquo; day (close price lower than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt128"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillRect = false</td></tr></table></blockquote>true to draw shape as a filled rectangle.</div></div><div class=CToolTip id="tt129"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillStyle = '#999999'</td></tr></table></blockquote>css color spec for the fill style.</div></div><div class=CToolTip id="tt130"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToValue = 0</td></tr></table></blockquote>fill a filled series to this value on the fill axis. </div></div><div class=CToolTip id="tt131"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillToZero = false</td></tr></table></blockquote>true will force bar and filled series to fill toward zero on the fill Axis.</div></div><div class=CToolTip id="tt132"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fillUpBody = false</td></tr></table></blockquote>true to render an &ldquo;up&rdquo; day (close price greater than open price) with a filled candlestick body.</div></div><div class=CToolTip id="tt133"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.followMouse = false</td></tr></table></blockquote>Tooltip follows the mouse, it is not at a fixed location. </div></div><div class=CToolTip id="tt134"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt135"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>CSS spec for the font-family css attribute. </div></div><div class=CToolTip id="tt136"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily = '&quot;Trebuchet MS&quot;, Arial, Helvetica, sans-serif'</td></tr></table></blockquote>css spec for the font-family css attribute.</div></div><div class=CToolTip id="tt137"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css font-family spec for the legend text.</div></div><div class=CToolTip id="tt138"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontFamily</td></tr></table></blockquote>css font-family spec for the text.</div></div><div class=CToolTip id="tt139"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size css attribute.</div></div><div class=CToolTip id="tt140"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '11pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt141"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize = '10pt'</td></tr></table></blockquote>CSS spec for font size.</div></div><div class=CToolTip id="tt142"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css spec for the font-size attribute. </div></div><div class=CToolTip id="tt143"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css font-size spec for the legend text.</div></div><div class=CToolTip id="tt144"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontSize</td></tr></table></blockquote>css font-size spec for the text.</div></div><div class=CToolTip id="tt145"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt146"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontStretch = 1.0</td></tr></table></blockquote>Multiplier to condense or expand font width. </div></div><div class=CToolTip id="tt147"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote></div></div><div class=CToolTip id="tt148"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.fontWeight = 'normal'</td></tr></table></blockquote>CSS spec for fontWeight</div></div><div class=CToolTip id="tt149"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.forceTickAt0 = false</td></tr></table></blockquote>This will ensure that there is always a tick mark at 0. </div></div><div class=CToolTip id="tt150"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.forceTickAt100 = false</td></tr></table></blockquote>This will ensure that there is always a tick mark at 100. </div></div><div class=CToolTip id="tt151"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt152"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt153"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = null</td></tr></table></blockquote>alternative to tooltipFormatString will format the whole tooltip text, populating with x, y values as indicated by tooltipAxes option. </div></div><div class=CToolTip id="tt154"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatString = ''</td></tr></table></blockquote>string passed to the formatter.</div></div><div class=CToolTip id="tt155"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt156"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><div class=CToolTip id="tt157"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.formatter = $.jqplot.DefaultTickFormatter</td></tr></table></blockquote>A class of a formatter for the tick text. </div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties3.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties3.html
deleted file mode 100644
index a3549331..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties3.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="Properties.html#A">A</a> &middot; <a href="Properties.html#B">B</a> &middot; <a href="Properties.html#C">C</a> &middot; <a href="Properties2.html#D">D</a> &middot; <a href="Properties2.html#E">E</a> &middot; <a href="Properties2.html#F">F</a> &middot; <a href="#G">G</a> &middot; <a href="#H">H</a> &middot; <a href="#I">I</a> &middot; J &middot; K &middot; <a href="#L">L</a> &middot; <a href="Properties4.html#M">M</a> &middot; <a href="Properties4.html#N">N</a> &middot; <a href="Properties4.html#O">O</a> &middot; <a href="Properties4.html#P">P</a> &middot; Q &middot; <a href="Properties4.html#R">R</a> &middot; <a href="Properties5.html#S">S</a> &middot; <a href="Properties6.html#T">T</a> &middot; <a href="Properties6.html#U">U</a> &middot; <a href="Properties6.html#V">V</a> &middot; <a href="Properties6.html#W">W</a> &middot; <a href="Properties6.html#X">X</a> &middot; <a href="Properties6.html#Y">Y</a> &middot; <a href="Properties6.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="G"></a>G</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.grid" id=link158 onMouseOver="ShowTip(event, 'tt158', 'link158')" onMouseOut="HideTip('tt158')" class=ISymbol>grid</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineColor" id=link159 onMouseOver="ShowTip(event, 'tt159', 'link159')" onMouseOut="HideTip('tt159')" class=ISymbol>gridLineColor</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineWidth" id=link160 onMouseOver="ShowTip(event, 'tt160', 'link160')" onMouseOut="HideTip('tt160')" class=ISymbol>gridLineWidth</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.groups" id=link161 onMouseOver="ShowTip(event, 'tt161', 'link161')" onMouseOut="HideTip('tt161')" class=ISymbol>groups</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=IHeading><a name="H"></a>H</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.hideZeros" id=link162 onMouseOver="ShowTip(event, 'tt162', 'link162')" onMouseOut="HideTip('tt162')" class=ISymbol>hideZeros</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightAlpha" id=link163 onMouseOver="ShowTip(event, 'tt163', 'link163')" onMouseOut="HideTip('tt163')" class=ISymbol>highlightAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightColor" id=link164 onMouseOver="ShowTip(event, 'tt164', 'link164')" onMouseOut="HideTip('tt164')" class=ISymbol>highlightColor</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightColors</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightColors" id=link165 onMouseOver="ShowTip(event, 'tt165', 'link165')" onMouseOut="HideTip('tt165')" class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightColors" id=link166 onMouseOver="ShowTip(event, 'tt166', 'link166')" onMouseOut="HideTip('tt166')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightColors" id=link167 onMouseOver="ShowTip(event, 'tt167', 'link167')" onMouseOut="HideTip('tt167')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightColors" id=link168 onMouseOver="ShowTip(event, 'tt168', 'link168')" onMouseOut="HideTip('tt168')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightColors" id=link169 onMouseOver="ShowTip(event, 'tt169', 'link169')" onMouseOut="HideTip('tt169')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightColors" id=link170 onMouseOver="ShowTip(event, 'tt170', 'link170')" onMouseOut="HideTip('tt170')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightMouseDown</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightMouseDown" id=link171 onMouseOver="ShowTip(event, 'tt171', 'link171')" onMouseOut="HideTip('tt171')" class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseDown" id=link172 onMouseOver="ShowTip(event, 'tt172', 'link172')" onMouseOut="HideTip('tt172')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseDown" id=link173 onMouseOver="ShowTip(event, 'tt173', 'link173')" onMouseOut="HideTip('tt173')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseDown" id=link174 onMouseOver="ShowTip(event, 'tt174', 'link174')" onMouseOut="HideTip('tt174')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseDown" id=link175 onMouseOver="ShowTip(event, 'tt175', 'link175')" onMouseOut="HideTip('tt175')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseDown" id=link176 onMouseOver="ShowTip(event, 'tt176', 'link176')" onMouseOut="HideTip('tt176')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseDown" id=link177 onMouseOver="ShowTip(event, 'tt177', 'link177')" onMouseOut="HideTip('tt177')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>highlightMouseOver</span><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightMouseOver" id=link178 onMouseOver="ShowTip(event, 'tt178', 'link178')" onMouseOut="HideTip('tt178')" class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseOver" id=link179 onMouseOver="ShowTip(event, 'tt179', 'link179')" onMouseOut="HideTip('tt179')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseOver" id=link180 onMouseOver="ShowTip(event, 'tt180', 'link180')" onMouseOut="HideTip('tt180')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseOver" id=link181 onMouseOver="ShowTip(event, 'tt181', 'link181')" onMouseOut="HideTip('tt181')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseOver" id=link182 onMouseOver="ShowTip(event, 'tt182', 'link182')" onMouseOut="HideTip('tt182')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseOver" id=link183 onMouseOver="ShowTip(event, 'tt183', 'link183')" onMouseOut="HideTip('tt183')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseOver" id=link184 onMouseOver="ShowTip(event, 'tt184', 'link184')" onMouseOut="HideTip('tt184')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.hlc" id=link185 onMouseOver="ShowTip(event, 'tt185', 'link185')" onMouseOut="HideTip('tt185')" class=ISymbol>hlc</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.hubRadius" id=link186 onMouseOver="ShowTip(event, 'tt186', 'link186')" onMouseOut="HideTip('tt186')" class=ISymbol>hubRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=IHeading><a name="I"></a>I</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.index" id=link187 onMouseOver="ShowTip(event, 'tt187', 'link187')" onMouseOut="HideTip('tt187')" class=ISymbol>index</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.innerDiameter" id=link188 onMouseOver="ShowTip(event, 'tt188', 'link188')" onMouseOut="HideTip('tt188')" class=ISymbol>innerDiameter</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.insertBreaks" id=link189 onMouseOver="ShowTip(event, 'tt189', 'link189')" onMouseOut="HideTip('tt189')" class=ISymbol>insertBreaks</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.intersectionThreshold" id=link190 onMouseOver="ShowTip(event, 'tt190', 'link190')" onMouseOut="HideTip('tt190')" class=ISymbol>intersectionThreshold</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.interval" id=link191 onMouseOver="ShowTip(event, 'tt191', 'link191')" onMouseOut="HideTip('tt191')" class=ISymbol>interval</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalColors" id=link192 onMouseOver="ShowTip(event, 'tt192', 'link192')" onMouseOut="HideTip('tt192')" class=ISymbol>intervalColors</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalInnerRadius" id=link193 onMouseOver="ShowTip(event, 'tt193', 'link193')" onMouseOut="HideTip('tt193')" class=ISymbol>intervalInnerRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalOuterRadius" id=link194 onMouseOver="ShowTip(event, 'tt194', 'link194')" onMouseOut="HideTip('tt194')" class=ISymbol>intervalOuterRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervals" id=link195 onMouseOver="ShowTip(event, 'tt195', 'link195')" onMouseOut="HideTip('tt195')" class=ISymbol>intervals</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>isarc</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.isarc" id=link196 onMouseOver="ShowTip(event, 'tt196', 'link196')" onMouseOut="HideTip('tt196')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.isarc" id=link197 onMouseOver="ShowTip(event, 'tt197', 'link197')" onMouseOut="HideTip('tt197')" class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>isMinorTick</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.isMinorTick" id=link198 onMouseOver="ShowTip(event, 'tt198', 'link198')" onMouseOut="HideTip('tt198')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.isMinorTick" id=link199 onMouseOver="ShowTip(event, 'tt199', 'link199')" onMouseOut="HideTip('tt199')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=IHeading><a name="L"></a>L</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>label</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.label" id=link200 onMouseOver="ShowTip(event, 'tt200', 'link200')" onMouseOut="HideTip('tt200')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.label" id=link201 onMouseOver="ShowTip(event, 'tt201', 'link201')" onMouseOut="HideTip('tt201')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.label" id=link202 onMouseOver="ShowTip(event, 'tt202', 'link202')" onMouseOut="HideTip('tt202')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.label" id=link203 onMouseOver="ShowTip(event, 'tt203', 'link203')" onMouseOut="HideTip('tt203')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.label" id=link204 onMouseOver="ShowTip(event, 'tt204', 'link204')" onMouseOut="HideTip('tt204')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.label" id=link205 onMouseOver="ShowTip(event, 'tt205', 'link205')" onMouseOut="HideTip('tt205')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelHeightAdjust" id=link206 onMouseOver="ShowTip(event, 'tt206', 'link206')" onMouseOut="HideTip('tt206')" class=ISymbol>labelHeightAdjust</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelOptions" id=link207 onMouseOver="ShowTip(event, 'tt207', 'link207')" onMouseOut="HideTip('tt207')" class=ISymbol>labelOptions</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>labelPosition</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.labelPosition" id=link208 onMouseOver="ShowTip(event, 'tt208', 'link208')" onMouseOut="HideTip('tt208')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelPosition" id=link209 onMouseOver="ShowTip(event, 'tt209', 'link209')" onMouseOut="HideTip('tt209')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelRenderer" id=link210 onMouseOver="ShowTip(event, 'tt210', 'link210')" onMouseOut="HideTip('tt210')" class=ISymbol>labelRenderer</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>labels</span><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labels" id=link211 onMouseOver="ShowTip(event, 'tt211', 'link211')" onMouseOut="HideTip('tt211')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.labels" id=link212 onMouseOver="ShowTip(event, 'tt212', 'link212')" onMouseOut="HideTip('tt212')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labelsFromSeries" id=link213 onMouseOver="ShowTip(event, 'tt213', 'link213')" onMouseOut="HideTip('tt213')" class=ISymbol>labelsFromSeries</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.legend" id=link214 onMouseOver="ShowTip(event, 'tt214', 'link214')" onMouseOut="HideTip('tt214')" class=ISymbol>legend</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineCap</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.lineCap" id=link215 onMouseOver="ShowTip(event, 'tt215', 'link215')" onMouseOut="HideTip('tt215')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineCap" id=link216 onMouseOver="ShowTip(event, 'tt216', 'link216')" onMouseOut="HideTip('tt216')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineCap" id=link217 onMouseOver="ShowTip(event, 'tt217', 'link217')" onMouseOut="HideTip('tt217')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.lineCap" id=link218 onMouseOver="ShowTip(event, 'tt218', 'link218')" onMouseOut="HideTip('tt218')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineJoin</span><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineJoin" id=link219 onMouseOver="ShowTip(event, 'tt219', 'link219')" onMouseOut="HideTip('tt219')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineJoin" id=link220 onMouseOver="ShowTip(event, 'tt220', 'link220')" onMouseOut="HideTip('tt220')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.lineJoin" id=link221 onMouseOver="ShowTip(event, 'tt221', 'link221')" onMouseOut="HideTip('tt221')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>linePattern</span><div class=ISubIndex><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.linePattern" id=link222 onMouseOver="ShowTip(event, 'tt222', 'link222')" onMouseOut="HideTip('tt222')" class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.linePattern" id=link223 onMouseOver="ShowTip(event, 'tt223', 'link223')" onMouseOut="HideTip('tt223')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>lineWidth</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.lineWidth" id=link224 onMouseOver="ShowTip(event, 'tt224', 'link224')" onMouseOut="HideTip('tt224')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.lineWidth" id=link225 onMouseOver="ShowTip(event, 'tt225', 'link225')" onMouseOut="HideTip('tt225')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.lineWidth" id=link226 onMouseOver="ShowTip(event, 'tt226', 'link226')" onMouseOut="HideTip('tt226')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.lineWidth" id=link227 onMouseOver="ShowTip(event, 'tt227', 'link227')" onMouseOut="HideTip('tt227')" class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineWidth" id=link228 onMouseOver="ShowTip(event, 'tt228', 'link228')" onMouseOut="HideTip('tt228')" class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.lineWidth" id=link229 onMouseOver="ShowTip(event, 'tt229', 'link229')" onMouseOut="HideTip('tt229')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.lineWidth" id=link230 onMouseOver="ShowTip(event, 'tt230', 'link230')" onMouseOut="HideTip('tt230')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.lineWidthAdjust" id=link231 onMouseOver="ShowTip(event, 'tt231', 'link231')" onMouseOut="HideTip('tt231')" class=ISymbol>lineWidthAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>location</span><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.location" id=link232 onMouseOver="ShowTip(event, 'tt232', 'link232')" onMouseOut="HideTip('tt232')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.location" id=link233 onMouseOver="ShowTip(event, 'tt233', 'link233')" onMouseOut="HideTip('tt233')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.looseZoom" id=link234 onMouseOver="ShowTip(event, 'tt234', 'link234')" onMouseOut="HideTip('tt234')" class=ISymbol>looseZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt158"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.grid = new Grid()</td></tr></table></blockquote>See Grid for grid specific options.</div></div><div class=CToolTip id="tt159"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineColor = '#cccccc'</td></tr></table></blockquote>color of the grid lines.</div></div><div class=CToolTip id="tt160"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.gridLineWidth = 1.0</td></tr></table></blockquote>width of the grid lines.</div></div><div class=CToolTip id="tt161"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.groups = 1</td></tr></table></blockquote>group bars into this many groups</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt162"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hideZeros = false</td></tr></table></blockquote>true to not show a label for a value which is 0.</div></div><div class=CToolTip id="tt163"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightAlpha = null</td></tr></table></blockquote>Alpha transparency to apply when highlighting bubble. </div></div><div class=CToolTip id="tt164"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColor = null</td></tr></table></blockquote>color to use when highlighting an area on a filled plot.</div></div><div class=CToolTip id="tt165"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt166"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a bar.</div></div><div class=CToolTip id="tt167"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>An array of colors to use when highlighting a slice. </div></div><div class=CToolTip id="tt168"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt169"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>array of colors to use when highlighting an area.</div></div><div class=CToolTip id="tt170"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightColors = []</td></tr></table></blockquote>an array of colors to use when highlighting a slice.</div></div><div class=CToolTip id="tt171"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt172"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt173"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a bubble. </div></div><div class=CToolTip id="tt174"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt175"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a area. </div></div><div class=CToolTip id="tt176"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over an area on a filled plot. </div></div><div class=CToolTip id="tt177"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseDown = false</td></tr></table></blockquote>True to highlight when a mouse button is pressed over a slice. </div></div><div class=CToolTip id="tt178"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt179"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt180"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight bubbles when moused over. </div></div><div class=CToolTip id="tt181"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt182"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area when moused over. </div></div><div class=CToolTip id="tt183"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight area on a filled plot when moused over. </div></div><div class=CToolTip id="tt184"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.highlightMouseOver = true</td></tr></table></blockquote>True to highlight slice when moused over. </div></div><div class=CToolTip id="tt185"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hlc = false</td></tr></table></blockquote>true if is a hi-low-close chart (no open price). </div></div><div class=CToolTip id="tt186"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.hubRadius = null</td></tr></table></blockquote>Radius of the hub at the bottom center of gauge which the needle attaches to. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt187"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.index</td></tr></table></blockquote>0 based index of this series in the plot series array.</div></div><div class=CToolTip id="tt188"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.innerDiameter = null</td></tr></table></blockquote>Inner diameter of the donut, auto calculated by default. </div></div><div class=CToolTip id="tt189"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.insertBreaks = true</td></tr></table></blockquote>true to turn spaces in data block label into html breaks br /.</div></div><div class=CToolTip id="tt190"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intersectionThreshold = 2</td></tr></table></blockquote>pixel distance from data point or marker to consider cursor lines intersecting with point. </div></div><div class=CToolTip id="tt191"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>interval: '3%' }</td></tr></table></blockquote>User specified interval above and below line for bands [default: &lsquo;3%&rsquo;&rsquo;]. </div></div><div class=CToolTip id="tt192"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalColors = [ &quot;#4bb2c5&quot;, &quot;#EAA228&quot;, &quot;#c5b47f&quot;, &quot;#579575&quot;, &quot;#839557&quot;, &quot;#958c12&quot;, &quot;#953579&quot;, &quot;#4b5de4&quot;, &quot;#d8b83f&quot;, &quot;#ff5800&quot;, &quot;#0085cc&quot;, &quot;#c747a3&quot;, &quot;#cddf54&quot;, &quot;#FBD178&quot;, &quot;#26B4E3&quot;, &quot;#bd70c7&quot;]</td></tr></table></blockquote>Array of colors to use for the intervals.</div></div><div class=CToolTip id="tt193"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalInnerRadius = null</td></tr></table></blockquote>Radius of the inner circle of the interval ring.</div></div><div class=CToolTip id="tt194"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervalOuterRadius = null</td></tr></table></blockquote>Radius of the outer circle of the interval ring.</div></div><div class=CToolTip id="tt195"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.intervals = []</td></tr></table></blockquote>Array of ranges to be drawn around the gauge. </div></div><div class=CToolTip id="tt196"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt197"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isarc = false</td></tr></table></blockquote>wether the shadow is an arc or not.</div></div><div class=CToolTip id="tt198"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><div class=CToolTip id="tt199"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.isMinorTick = false</td></tr></table></blockquote>if this is a minor tick.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt200"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>The text or html for the label.</div></div><div class=CToolTip id="tt201"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>label for the axis.</div></div><div class=CToolTip id="tt202"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>A gauge label like &lsquo;kph&rsquo; or &lsquo;Volts&rsquo;</div></div><div class=CToolTip id="tt203"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Label for the trend line to use in the legend.</div></div><div class=CToolTip id="tt204"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = null</td></tr></table></blockquote>Label for the axis</div></div><div class=CToolTip id="tt205"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.label = ''</td></tr></table></blockquote>Line label to use in the legend.</div></div><div class=CToolTip id="tt206"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelHeightAdjust = 0</td></tr></table></blockquote>Number of Pixels to offset the label up (-) or down (+) from its default position.</div></div><div class=CToolTip id="tt207"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelOptions = {}</td></tr></table></blockquote>Options passed to the label renderer.</div></div><div class=CToolTip id="tt208"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'auto'</td></tr></table></blockquote>&lsquo;auto&rsquo;, &lsquo;start&rsquo;, &lsquo;middle&rsquo; or &lsquo;end&rsquo;. </div></div><div class=CToolTip id="tt209"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelPosition = 'inside'</td></tr></table></blockquote>Where to position the label, either &lsquo;inside&rsquo; or &lsquo;bottom&rsquo;.</div></div><div class=CToolTip id="tt210"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelRenderer = $.jqplot.AxisLabelRenderer</td></tr></table></blockquote>A class of a rendering engine for creating an axis label.</div></div><div class=CToolTip id="tt211"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>array of arrays of labels, one array for each series.</div></div><div class=CToolTip id="tt212"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labels = []</td></tr></table></blockquote>Array of labels to use. </div></div><div class=CToolTip id="tt213"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.labelsFromSeries = false</td></tr></table></blockquote>true to use labels within data point arrays.</div></div><div class=CToolTip id="tt214"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.legend = new Legend()</td></tr></table></blockquote>see $.jqplot.TableLegendRenderer</div></div><div class=CToolTip id="tt215"><div class=CProperty>Type of ending placed on the line [&lsquo;round&rsquo;, &lsquo;butt&rsquo;, &lsquo;square&rsquo;]</div></div><div class=CToolTip id="tt216"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt217"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>how ends of the shadow line are rendered.</div></div><div class=CToolTip id="tt218"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineCap = 'round'</td></tr></table></blockquote>Canvas lineCap style at ends of line.</div></div><div class=CToolTip id="tt219"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt220"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'miter'</td></tr></table></blockquote>How line segments of the shadow are joined.</div></div><div class=CToolTip id="tt221"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineJoin = 'round'</td></tr></table></blockquote>Canvas lineJoin style between segments of series.</div></div><div class=CToolTip id="tt222"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.linePattern = 'solid'</td></tr></table></blockquote>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</div></div><div class=CToolTip id="tt223"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.linePattern = 'solid'</td></tr></table></blockquote>line pattern &lsquo;dashed&rsquo;, &lsquo;dotted&rsquo;, &lsquo;solid&rsquo;, some combination of &lsquo;-&rsquo; and &lsquo;.&rsquo;</div></div><div class=CToolTip id="tt224"><div class=CProperty>Width of the line.</div></div><div class=CToolTip id="tt225"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>width of line if areas are stroked and not filled.</div></div><div class=CToolTip id="tt226"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2</td></tr></table></blockquote>size of the line for non-filled markers.</div></div><div class=CToolTip id="tt227"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the hi-low line and open/close ticks. </div></div><div class=CToolTip id="tt228"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>width of the shadow line stroke.</div></div><div class=CToolTip id="tt229"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 1.5</td></tr></table></blockquote>Width of the trend line.</div></div><div class=CToolTip id="tt230"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidth = 2.5</td></tr></table></blockquote>width of the line in pixels. </div></div><div class=CToolTip id="tt231"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.lineWidthAdjust = 2.5</td></tr></table></blockquote>Pixels to add to the lineWidth of the highlight.</div></div><div class=CToolTip id="tt232"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'n'</td></tr></table></blockquote>compass location where to position the label around the point. </div></div><div class=CToolTip id="tt233"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.location = 'ne'</td></tr></table></blockquote>Placement of the legend. </div></div><div class=CToolTip id="tt234"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.looseZoom = true</td></tr></table></blockquote>Will expand zoom range to provide more rounded tick values. </div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties4.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties4.html
deleted file mode 100644
index f802eb57..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties4.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="Properties.html#A">A</a> &middot; <a href="Properties.html#B">B</a> &middot; <a href="Properties.html#C">C</a> &middot; <a href="Properties2.html#D">D</a> &middot; <a href="Properties2.html#E">E</a> &middot; <a href="Properties2.html#F">F</a> &middot; <a href="Properties3.html#G">G</a> &middot; <a href="Properties3.html#H">H</a> &middot; <a href="Properties3.html#I">I</a> &middot; J &middot; K &middot; <a href="Properties3.html#L">L</a> &middot; <a href="#M">M</a> &middot; <a href="#N">N</a> &middot; <a href="#O">O</a> &middot; <a href="#P">P</a> &middot; Q &middot; <a href="#R">R</a> &middot; <a href="Properties5.html#S">S</a> &middot; <a href="Properties6.html#T">T</a> &middot; <a href="Properties6.html#U">U</a> &middot; <a href="Properties6.html#V">V</a> &middot; <a href="Properties6.html#W">W</a> &middot; <a href="Properties6.html#X">X</a> &middot; <a href="Properties6.html#Y">Y</a> &middot; <a href="Properties6.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="M"></a>M</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginBottom" id=link235 onMouseOver="ShowTip(event, 'tt235', 'link235')" onMouseOut="HideTip('tt235')" class=ISymbol>marginBottom</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginLeft" id=link236 onMouseOver="ShowTip(event, 'tt236', 'link236')" onMouseOut="HideTip('tt236')" class=ISymbol>marginLeft</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginRight" id=link237 onMouseOver="ShowTip(event, 'tt237', 'link237')" onMouseOut="HideTip('tt237')" class=ISymbol>marginRight</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginTop" id=link238 onMouseOver="ShowTip(event, 'tt238', 'link238')" onMouseOut="HideTip('tt238')" class=ISymbol>marginTop</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>mark</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.mark" id=link239 onMouseOver="ShowTip(event, 'tt239', 'link239')" onMouseOut="HideTip('tt239')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.mark" id=link240 onMouseOver="ShowTip(event, 'tt240', 'link240')" onMouseOut="HideTip('tt240')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.markerOptions" id=link241 onMouseOver="ShowTip(event, 'tt241', 'link241')" onMouseOut="HideTip('tt241')" class=ISymbol>markerOptions</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>markerRenderer</span><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.markerRenderer" id=link242 onMouseOver="ShowTip(event, 'tt242', 'link242')" onMouseOut="HideTip('tt242')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.markerRenderer" id=link243 onMouseOver="ShowTip(event, 'tt243', 'link243')" onMouseOut="HideTip('tt243')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.markerRenderer" id=link244 onMouseOver="ShowTip(event, 'tt244', 'link244')" onMouseOut="HideTip('tt244')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>markSize</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.markSize" id=link245 onMouseOver="ShowTip(event, 'tt245', 'link245')" onMouseOut="HideTip('tt245')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.markSize" id=link246 onMouseOver="ShowTip(event, 'tt246', 'link246')" onMouseOut="HideTip('tt246')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>max</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.max" id=link247 onMouseOver="ShowTip(event, 'tt247', 'link247')" onMouseOut="HideTip('tt247')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.max" id=link248 onMouseOver="ShowTip(event, 'tt248', 'link248')" onMouseOut="HideTip('tt248')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>min</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.min" id=link249 onMouseOver="ShowTip(event, 'tt249', 'link249')" onMouseOut="HideTip('tt249')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.min" id=link250 onMouseOver="ShowTip(event, 'tt250', 'link250')" onMouseOut="HideTip('tt250')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>minorTicks</span><div class=ISubIndex><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.minorTicks" id=link251 onMouseOver="ShowTip(event, 'tt251', 'link251')" onMouseOut="HideTip('tt251')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.minorTicks" id=link252 onMouseOver="ShowTip(event, 'tt252', 'link252')" onMouseOut="HideTip('tt252')" class=IParent>$.jqplot.<wbr>LogAxisRenderer</a></div></td></tr><tr><td class=IHeading><a name="N"></a>N</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.name" id=link253 onMouseOver="ShowTip(event, 'tt253', 'link253')" onMouseOut="HideTip('tt253')" class=ISymbol>name</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needlePad" id=link254 onMouseOver="ShowTip(event, 'tt254', 'link254')" onMouseOut="HideTip('tt254')" class=ISymbol>needlePad</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needleThickness" id=link255 onMouseOver="ShowTip(event, 'tt255', 'link255')" onMouseOut="HideTip('tt255')" class=ISymbol>needleThickness</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.negativeColor" id=link256 onMouseOver="ShowTip(event, 'tt256', 'link256')" onMouseOut="HideTip('tt256')" class=ISymbol>negativeColor</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.neighborThreshold" id=link257 onMouseOver="ShowTip(event, 'tt257', 'link257')" onMouseOut="HideTip('tt257')" class=ISymbol>neighborThreshold</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.noDataIndicator" id=link258 onMouseOver="ShowTip(event, 'tt258', 'link258')" onMouseOut="HideTip('tt258')" class=ISymbol>noDataIndicator</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>numberColumns</span><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberColumns" id=link259 onMouseOver="ShowTip(event, 'tt259', 'link259')" onMouseOut="HideTip('tt259')" class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberColumns" id=link260 onMouseOver="ShowTip(event, 'tt260', 'link260')" onMouseOut="HideTip('tt260')" class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberColumns" id=link261 onMouseOver="ShowTip(event, 'tt261', 'link261')" onMouseOut="HideTip('tt261')" class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberColumns" id=link262 onMouseOver="ShowTip(event, 'tt262', 'link262')" onMouseOut="HideTip('tt262')" class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberColumns" id=link263 onMouseOver="ShowTip(event, 'tt263', 'link263')" onMouseOut="HideTip('tt263')" class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>numberRows</span><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberRows" id=link264 onMouseOver="ShowTip(event, 'tt264', 'link264')" onMouseOut="HideTip('tt264')" class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberRows" id=link265 onMouseOver="ShowTip(event, 'tt265', 'link265')" onMouseOut="HideTip('tt265')" class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberRows" id=link266 onMouseOver="ShowTip(event, 'tt266', 'link266')" onMouseOut="HideTip('tt266')" class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberRows" id=link267 onMouseOver="ShowTip(event, 'tt267', 'link267')" onMouseOut="HideTip('tt267')" class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberRows" id=link268 onMouseOver="ShowTip(event, 'tt268', 'link268')" onMouseOut="HideTip('tt268')" class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.numberTicks" id=link269 onMouseOver="ShowTip(event, 'tt269', 'link269')" onMouseOut="HideTip('tt269')" class=ISymbol>numberTicks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=IHeading><a name="O"></a>O</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.objects" id=link270 onMouseOver="ShowTip(event, 'tt270', 'link270')" onMouseOut="HideTip('tt270')" class=ISymbol>objects</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.offset" id=link271 onMouseOver="ShowTip(event, 'tt271', 'link271')" onMouseOut="HideTip('tt271')" class=ISymbol>offset</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#offsetBars" id=link272 onMouseOver="ShowTip(event, 'tt272', 'link272')" onMouseOut="HideTip('tt272')" class=ISymbol>offsetBars</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.openColor" id=link273 onMouseOver="ShowTip(event, 'tt273', 'link273')" onMouseOut="HideTip('tt273')" class=ISymbol>openColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=IHeading><a name="P"></a>P</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.pad" id=link274 onMouseOver="ShowTip(event, 'tt274', 'link274')" onMouseOut="HideTip('tt274')" class=ISymbol>pad</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>padding</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.padding" id=link275 onMouseOver="ShowTip(event, 'tt275', 'link275')" onMouseOut="HideTip('tt275')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.padding" id=link276 onMouseOver="ShowTip(event, 'tt276', 'link276')" onMouseOut="HideTip('tt276')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.padding" id=link277 onMouseOver="ShowTip(event, 'tt277', 'link277')" onMouseOut="HideTip('tt277')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.padding" id=link278 onMouseOver="ShowTip(event, 'tt278', 'link278')" onMouseOut="HideTip('tt278')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMax" id=link279 onMouseOver="ShowTip(event, 'tt279', 'link279')" onMouseOut="HideTip('tt279')" class=ISymbol>padMax</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMin" id=link280 onMouseOver="ShowTip(event, 'tt280', 'link280')" onMouseOut="HideTip('tt280')" class=ISymbol>padMin</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.pegNeedle" id=link281 onMouseOver="ShowTip(event, 'tt281', 'link281')" onMouseOut="HideTip('tt281')" class=ISymbol>pegNeedle</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.placement" id=link282 onMouseOver="ShowTip(event, 'tt282', 'link282')" onMouseOut="HideTip('tt282')" class=ISymbol>placement</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#position" id=link283 onMouseOver="ShowTip(event, 'tt283', 'link283')" onMouseOut="HideTip('tt283')" class=ISymbol>position</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.predraw" id=link284 onMouseOver="ShowTip(event, 'tt284', 'link284')" onMouseOut="HideTip('tt284')" class=ISymbol>predraw</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>prefix</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.prefix" id=link285 onMouseOver="ShowTip(event, 'tt285', 'link285')" onMouseOut="HideTip('tt285')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.prefix" id=link286 onMouseOver="ShowTip(event, 'tt286', 'link286')" onMouseOut="HideTip('tt286')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>pt2px</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.pt2px" id=link287 onMouseOver="ShowTip(event, 'tt287', 'link287')" onMouseOut="HideTip('tt287')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.pt2px" id=link288 onMouseOver="ShowTip(event, 'tt288', 'link288')" onMouseOut="HideTip('tt288')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=IHeading><a name="R"></a>R</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>renderer</span><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.renderer" id=link289 onMouseOver="ShowTip(event, 'tt289', 'link289')" onMouseOut="HideTip('tt289')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.renderer" id=link290 onMouseOver="ShowTip(event, 'tt290', 'link290')" onMouseOut="HideTip('tt290')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.renderer" id=link291 onMouseOver="ShowTip(event, 'tt291', 'link291')" onMouseOut="HideTip('tt291')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.renderer" id=link292 onMouseOver="ShowTip(event, 'tt292', 'link292')" onMouseOut="HideTip('tt292')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.renderer" id=link293 onMouseOver="ShowTip(event, 'tt293', 'link293')" onMouseOut="HideTip('tt293')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>rendererOptions</span><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.rendererOptions" id=link294 onMouseOver="ShowTip(event, 'tt294', 'link294')" onMouseOut="HideTip('tt294')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.rendererOptions" id=link295 onMouseOver="ShowTip(event, 'tt295', 'link295')" onMouseOut="HideTip('tt295')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.rendererOptions" id=link296 onMouseOver="ShowTip(event, 'tt296', 'link296')" onMouseOut="HideTip('tt296')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.rendererOptions" id=link297 onMouseOver="ShowTip(event, 'tt297', 'link297')" onMouseOut="HideTip('tt297')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.rendererOptions" id=link298 onMouseOver="ShowTip(event, 'tt298', 'link298')" onMouseOut="HideTip('tt298')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.rendererOptions" id=link299 onMouseOver="ShowTip(event, 'tt299', 'link299')" onMouseOut="HideTip('tt299')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringColor" id=link300 onMouseOver="ShowTip(event, 'tt300', 'link300')" onMouseOut="HideTip('tt300')" class=ISymbol>ringColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.ringMargin" id=link301 onMouseOver="ShowTip(event, 'tt301', 'link301')" onMouseOut="HideTip('tt301')" class=ISymbol>ringMargin</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringWidth" id=link302 onMouseOver="ShowTip(event, 'tt302', 'link302')" onMouseOut="HideTip('tt302')" class=ISymbol>ringWidth</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.rowSpacing" id=link303 onMouseOver="ShowTip(event, 'tt303', 'link303')" onMouseOut="HideTip('tt303')" class=ISymbol>rowSpacing</a>, <span class=IParent>Legend</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt235"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginBottom = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt236"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginLeft = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt237"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginRight = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt238"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.marginTop = null</td></tr></table></blockquote>CSS margin for the legend DOM element. </div></div><div class=CToolTip id="tt239"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote>tick mark on the axis. </div></div><div class=CToolTip id="tt240"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.mark = 'outside'</td></tr></table></blockquote>tick mark on the axis. </div></div><div class=CToolTip id="tt241"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerOptions = {}</td></tr></table></blockquote>renderer specific options to pass to the markerRenderer, see $.jqplot.MarkerRenderer.</div></div><div class=CToolTip id="tt242"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td><table border=0 cellspacing=0 cellpadding=0><tr><td class=PBeforeParameters nowrap>this.markerRenderer = new $.jqplot.MarkerRenderer(</td><td class=PParameter nowrap>{shadow:false}</td><td class=PAfterParameters nowrap>)</td></tr></table></td></tr></table></blockquote>Renderer used to draw the marker of the highlighted point. </div></div><div class=CToolTip id="tt243"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = {show:false}</td></tr></table></blockquote>Renderer to use to draw markers on the line. </div></div><div class=CToolTip id="tt244"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markerRenderer = $.jqplot.MarkerRenderer</td></tr></table></blockquote>A class of a renderer which will draw marker (e.g. </div></div><div class=CToolTip id="tt245"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 6</td></tr></table></blockquote>Length of the tick marks in pixels. </div></div><div class=CToolTip id="tt246"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.markSize = 4</td></tr></table></blockquote>Length of the tick marks in pixels. </div></div><div class=CToolTip id="tt247"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max</td></tr></table></blockquote>Maximum value on the gauge. </div></div><div class=CToolTip id="tt248"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.max = null</td></tr></table></blockquote>maximum value of the axis (in data units, not pixels).</div></div><div class=CToolTip id="tt249"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min</td></tr></table></blockquote>Minimum value on the gauge. </div></div><div class=CToolTip id="tt250"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.min = null</td></tr></table></blockquote>minimum value of the axis (in data units, not pixels).</div></div><div class=CToolTip id="tt251"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.minorTicks = 0</td></tr></table></blockquote>Number of ticks to add between &ldquo;major&rdquo; ticks. </div></div><div class=CToolTip id="tt252"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.minorTicks = 'auto'</td></tr></table></blockquote>Number of ticks to add between &ldquo;major&rdquo; ticks. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt253"><div class=CProperty>Optional name for the overlay object. </div></div><div class=CToolTip id="tt254"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needlePad = 6</td></tr></table></blockquote>Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.</div></div><div class=CToolTip id="tt255"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.needleThickness = null</td></tr></table></blockquote>Maximum thickness the needle. </div></div><div class=CToolTip id="tt256"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.negativeColor</td></tr></table></blockquote>css color spec used for filled (area) plots that are filled to zero and the &ldquo;useNegativeColors&rdquo; option is true.</div></div><div class=CToolTip id="tt257"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.neighborThreshold = 4</td></tr></table></blockquote>how close or far (in pixels) the cursor must be from a point marker to detect the point.</div></div><div class=CToolTip id="tt258"><div class=CProperty>Options to set up a mock plot with a data loading indicator if no data is specified.</div></div><div class=CToolTip id="tt259"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt260"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt261"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt262"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt263"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberColumns = null</td></tr></table></blockquote>Maximum number of columns in the legend. </div></div><div class=CToolTip id="tt264"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt265"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt266"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt267"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt268"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberRows = null</td></tr></table></blockquote>Maximum number of rows in the legend. </div></div><div class=CToolTip id="tt269"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.numberTicks</td></tr></table></blockquote>Desired number of ticks. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt270"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.objects = []</td></tr></table></blockquote></div></div><div class=CToolTip id="tt271"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offset = 1</td></tr></table></blockquote>Pixel offset at the given shadow angle of each shadow stroke from the last stroke.</div></div><div class=CToolTip id="tt272"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.offsetBars = false</td></tr></table></blockquote>False will center bars on their y value. </div></div><div class=CToolTip id="tt273"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.openColor = null</td></tr></table></blockquote>color of the open price tick mark. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt274"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pad = 1.2</td></tr></table></blockquote>Padding to extend the range above and below the data bounds. </div></div><div class=CToolTip id="tt275"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote>padding between the donut and plot edges, legend, etc.</div></div><div class=CToolTip id="tt276"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = {top: 20, right: 20, bottom: 20, left: 20}</td></tr></table></blockquote>padding between the funnel and plot edges, legend, etc.</div></div><div class=CToolTip id="tt277"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = null</td></tr></table></blockquote>padding between the meterGauge and plot edges, auto calculated by default.</div></div><div class=CToolTip id="tt278"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padding = 20</td></tr></table></blockquote>padding between the pie and plot edges, legend, etc.</div></div><div class=CToolTip id="tt279"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMax = null</td></tr></table></blockquote>Padding to extend the range above data bounds. </div></div><div class=CToolTip id="tt280"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.padMin = null</td></tr></table></blockquote>Padding to extend the range below data bounds. </div></div><div class=CToolTip id="tt281"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pegNeedle = true</td></tr></table></blockquote>True will stop needle just below/above the min/max values if data is below/above min/max, as if the meter is &ldquo;pegged&rdquo;.</div></div><div class=CToolTip id="tt282"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.placement = &quot;insideGrid&quot;</td></tr></table></blockquote>&ldquo;insideGrid&rdquo; places legend inside the grid area of the plot. </div></div><div class=CToolTip id="tt283"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.position = null</td></tr></table></blockquote>Position of axis. </div></div><div class=CToolTip id="tt284"><div class=CProperty>Wether to draw the legend before the series or not. </div></div><div class=CToolTip id="tt285"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote>String to prepend to the tick label. </div></div><div class=CToolTip id="tt286"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.prefix = ''</td></tr></table></blockquote>String to prepend to the tick label. </div></div><div class=CToolTip id="tt287"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote>Point to pixel scaling factor, used for computing height of bounding box around a label. </div></div><div class=CToolTip id="tt288"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.pt2px = null</td></tr></table></blockquote>Point to pixel scaling factor, used for computing height of bounding box around a label. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt289"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = new $.jqplot.LineRenderer()</td></tr></table></blockquote>Renderer to use to draw the trend line. </div></div><div class=CToolTip id="tt290"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LinearAxisRenderer</td></tr></table></blockquote>A class of a rendering engine that handles tick generation, scaling input data to pixel grid units and drawing the axis element.</div></div><div class=CToolTip id="tt291"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.CanvasGridRenderer</td></tr></table></blockquote>Instance of a renderer which will actually render the grid, see $.jqplot.CanvasGridRenderer.</div></div><div class=CToolTip id="tt292"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.LineRenderer</td></tr></table></blockquote>A class of a renderer which will draw the series, see $.jqplot.LineRenderer.</div></div><div class=CToolTip id="tt293"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer = $.jqplot.DivTitleRenderer</td></tr></table></blockquote>A class for creating a DOM element for the title, see $.jqplot.DivTitleRenderer.</div></div><div class=CToolTip id="tt294"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {marker:{show:false}}</td></tr></table></blockquote>Options to pass to the line renderer. </div></div><div class=CToolTip id="tt295"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options. </div></div><div class=CToolTip id="tt296"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>Options to pass on to the renderer, see $.jqplot.CanvasGridRenderer.</div></div><div class=CToolTip id="tt297"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options passed to the renderer.</div></div><div class=CToolTip id="tt298"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>Options to pass on to the renderer.</div></div><div class=CToolTip id="tt299"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rendererOptions = {}</td></tr></table></blockquote>renderer specific options passed to the renderer.</div></div><div class=CToolTip id="tt300"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringColor = &quot;#BBC6D0&quot;</td></tr></table></blockquote>color of the outer ring, hub, and needle of the gauge.</div></div><div class=CToolTip id="tt301"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringMargin = null</td></tr></table></blockquote>pixel distance between rings, or multiple series in a donut plot. </div></div><div class=CToolTip id="tt302"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ringWidth = null</td></tr></table></blockquote>width of the ring around the gauge. </div></div><div class=CToolTip id="tt303"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.rowSpacing = '0.5em'</td></tr></table></blockquote>css padding-top spec for the rows in the legend.</div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties5.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties5.html
deleted file mode 100644
index 088d73b5..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties5.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="Properties.html#A">A</a> &middot; <a href="Properties.html#B">B</a> &middot; <a href="Properties.html#C">C</a> &middot; <a href="Properties2.html#D">D</a> &middot; <a href="Properties2.html#E">E</a> &middot; <a href="Properties2.html#F">F</a> &middot; <a href="Properties3.html#G">G</a> &middot; <a href="Properties3.html#H">H</a> &middot; <a href="Properties3.html#I">I</a> &middot; J &middot; K &middot; <a href="Properties3.html#L">L</a> &middot; <a href="Properties4.html#M">M</a> &middot; <a href="Properties4.html#N">N</a> &middot; <a href="Properties4.html#O">O</a> &middot; <a href="Properties4.html#P">P</a> &middot; Q &middot; <a href="Properties4.html#R">R</a> &middot; <a href="#S">S</a> &middot; <a href="Properties6.html#T">T</a> &middot; <a href="Properties6.html#U">U</a> &middot; <a href="Properties6.html#V">V</a> &middot; <a href="Properties6.html#W">W</a> &middot; <a href="Properties6.html#X">X</a> &middot; <a href="Properties6.html#Y">Y</a> &middot; <a href="Properties6.html#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="S"></a>S</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.scaleToHiddenSeries" id=link304 onMouseOver="ShowTip(event, 'tt304', 'link304')" onMouseOut="HideTip('tt304')" class=ISymbol>scaleToHiddenSeries</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.sectionMargin" id=link305 onMouseOver="ShowTip(event, 'tt305', 'link305')" onMouseOut="HideTip('tt305')" class=ISymbol>sectionMargin</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.series" id=link306 onMouseOver="ShowTip(event, 'tt306', 'link306')" onMouseOut="HideTip('tt306')" class=ISymbol>series</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesColors" id=link307 onMouseOver="ShowTip(event, 'tt307', 'link307')" onMouseOut="HideTip('tt307')" class=ISymbol>seriesColors</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesDefaults" id=link308 onMouseOver="ShowTip(event, 'tt308', 'link308')" onMouseOut="HideTip('tt308')" class=ISymbol>seriesDefaults</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.seriesLabelIndex" id=link309 onMouseOver="ShowTip(event, 'tt309', 'link309')" onMouseOut="HideTip('tt309')" class=ISymbol>seriesLabelIndex</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggle" id=link310 onMouseOver="ShowTip(event, 'tt310', 'link310')" onMouseOut="HideTip('tt310')" class=ISymbol>seriesToggle</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggleReplot" id=link311 onMouseOver="ShowTip(event, 'tt311', 'link311')" onMouseOut="HideTip('tt311')" class=ISymbol>seriesToggleReplot</a></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadow</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadow" id=link312 onMouseOver="ShowTip(event, 'tt312', 'link312')" onMouseOut="HideTip('tt312')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadow" id=link313 onMouseOver="ShowTip(event, 'tt313', 'link313')" onMouseOut="HideTip('tt313')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadow" id=link314 onMouseOver="ShowTip(event, 'tt314', 'link314')" onMouseOut="HideTip('tt314')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadow" id=link315 onMouseOver="ShowTip(event, 'tt315', 'link315')" onMouseOut="HideTip('tt315')" class=IParent>Grid</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowAlpha</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowAlpha" id=link316 onMouseOver="ShowTip(event, 'tt316', 'link316')" onMouseOut="HideTip('tt316')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowAlpha" id=link317 onMouseOver="ShowTip(event, 'tt317', 'link317')" onMouseOut="HideTip('tt317')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowAlpha" id=link318 onMouseOver="ShowTip(event, 'tt318', 'link318')" onMouseOut="HideTip('tt318')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowAlpha" id=link319 onMouseOver="ShowTip(event, 'tt319', 'link319')" onMouseOut="HideTip('tt319')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAlpha" id=link320 onMouseOver="ShowTip(event, 'tt320', 'link320')" onMouseOut="HideTip('tt320')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowAlpha" id=link321 onMouseOver="ShowTip(event, 'tt321', 'link321')" onMouseOut="HideTip('tt321')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowAlpha" id=link322 onMouseOver="ShowTip(event, 'tt322', 'link322')" onMouseOut="HideTip('tt322')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAlpha" id=link323 onMouseOver="ShowTip(event, 'tt323', 'link323')" onMouseOut="HideTip('tt323')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAlpha" id=link324 onMouseOver="ShowTip(event, 'tt324', 'link324')" onMouseOut="HideTip('tt324')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAlpha" id=link325 onMouseOver="ShowTip(event, 'tt325', 'link325')" onMouseOut="HideTip('tt325')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowAngle</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowAngle" id=link326 onMouseOver="ShowTip(event, 'tt326', 'link326')" onMouseOut="HideTip('tt326')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAngle" id=link327 onMouseOver="ShowTip(event, 'tt327', 'link327')" onMouseOut="HideTip('tt327')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAngle" id=link328 onMouseOver="ShowTip(event, 'tt328', 'link328')" onMouseOut="HideTip('tt328')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAngle" id=link329 onMouseOver="ShowTip(event, 'tt329', 'link329')" onMouseOut="HideTip('tt329')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAngle" id=link330 onMouseOver="ShowTip(event, 'tt330', 'link330')" onMouseOut="HideTip('tt330')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowColor" id=link331 onMouseOver="ShowTip(event, 'tt331', 'link331')" onMouseOut="HideTip('tt331')" class=ISymbol>shadowColor</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowDepth</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowDepth" id=link332 onMouseOver="ShowTip(event, 'tt332', 'link332')" onMouseOut="HideTip('tt332')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowDepth" id=link333 onMouseOver="ShowTip(event, 'tt333', 'link333')" onMouseOut="HideTip('tt333')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowDepth" id=link334 onMouseOver="ShowTip(event, 'tt334', 'link334')" onMouseOut="HideTip('tt334')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowDepth" id=link335 onMouseOver="ShowTip(event, 'tt335', 'link335')" onMouseOut="HideTip('tt335')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowDepth" id=link336 onMouseOver="ShowTip(event, 'tt336', 'link336')" onMouseOut="HideTip('tt336')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowDepth" id=link337 onMouseOver="ShowTip(event, 'tt337', 'link337')" onMouseOut="HideTip('tt337')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowDepth" id=link338 onMouseOver="ShowTip(event, 'tt338', 'link338')" onMouseOut="HideTip('tt338')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowDepth" id=link339 onMouseOver="ShowTip(event, 'tt339', 'link339')" onMouseOut="HideTip('tt339')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowDepth" id=link340 onMouseOver="ShowTip(event, 'tt340', 'link340')" onMouseOut="HideTip('tt340')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowDepth" id=link341 onMouseOver="ShowTip(event, 'tt341', 'link341')" onMouseOut="HideTip('tt341')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>shadowOffset</span><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowOffset" id=link342 onMouseOver="ShowTip(event, 'tt342', 'link342')" onMouseOut="HideTip('tt342')" class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowOffset" id=link343 onMouseOver="ShowTip(event, 'tt343', 'link343')" onMouseOut="HideTip('tt343')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowOffset" id=link344 onMouseOver="ShowTip(event, 'tt344', 'link344')" onMouseOut="HideTip('tt344')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowOffset" id=link345 onMouseOver="ShowTip(event, 'tt345', 'link345')" onMouseOut="HideTip('tt345')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowOffset" id=link346 onMouseOver="ShowTip(event, 'tt346', 'link346')" onMouseOut="HideTip('tt346')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowOffset" id=link347 onMouseOver="ShowTip(event, 'tt347', 'link347')" onMouseOut="HideTip('tt347')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowOffset" id=link348 onMouseOver="ShowTip(event, 'tt348', 'link348')" onMouseOut="HideTip('tt348')" class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowOffset" id=link349 onMouseOver="ShowTip(event, 'tt349', 'link349')" onMouseOut="HideTip('tt349')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowOffset" id=link350 onMouseOver="ShowTip(event, 'tt350', 'link350')" onMouseOut="HideTip('tt350')" class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowOffset" id=link351 onMouseOver="ShowTip(event, 'tt351', 'link351')" onMouseOut="HideTip('tt351')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowRenderer" id=link352 onMouseOver="ShowTip(event, 'tt352', 'link352')" onMouseOut="HideTip('tt352')" class=ISymbol>shadowRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowWidth" id=link353 onMouseOver="ShowTip(event, 'tt353', 'link353')" onMouseOut="HideTip('tt353')" class=ISymbol>shadowWidth</a>, <span class=IParent>Grid</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shapeRenderer" id=link354 onMouseOver="ShowTip(event, 'tt354', 'link354')" onMouseOut="HideTip('tt354')" class=ISymbol>shapeRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>show</span><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.show" id=link355 onMouseOver="ShowTip(event, 'tt355', 'link355')" onMouseOut="HideTip('tt355')" class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.show" id=link356 onMouseOver="ShowTip(event, 'tt356', 'link356')" onMouseOut="HideTip('tt356')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.show" id=link357 onMouseOver="ShowTip(event, 'tt357', 'link357')" onMouseOut="HideTip('tt357')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.show" id=link358 onMouseOver="ShowTip(event, 'tt358', 'link358')" onMouseOut="HideTip('tt358')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.show" id=link359 onMouseOver="ShowTip(event, 'tt359', 'link359')" onMouseOut="HideTip('tt359')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.show" id=link360 onMouseOver="ShowTip(event, 'tt360', 'link360')" onMouseOut="HideTip('tt360')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.show" id=link361 onMouseOver="ShowTip(event, 'tt361', 'link361')" onMouseOut="HideTip('tt361')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.show" id=link362 onMouseOver="ShowTip(event, 'tt362', 'link362')" onMouseOut="HideTip('tt362')" class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.show" id=link363 onMouseOver="ShowTip(event, 'tt363', 'link363')" onMouseOut="HideTip('tt363')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.show" id=link364 onMouseOver="ShowTip(event, 'tt364', 'link364')" onMouseOut="HideTip('tt364')" class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.show" id=link365 onMouseOver="ShowTip(event, 'tt365', 'link365')" onMouseOut="HideTip('tt365')" class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.show" id=link366 onMouseOver="ShowTip(event, 'tt366', 'link366')" onMouseOut="HideTip('tt366')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Legend.show" id=link367 onMouseOver="ShowTip(event, 'tt367', 'link367')" onMouseOut="HideTip('tt367')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.show" id=link368 onMouseOver="ShowTip(event, 'tt368', 'link368')" onMouseOut="HideTip('tt368')" class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.show" id=link369 onMouseOver="ShowTip(event, 'tt369', 'link369')" onMouseOut="HideTip('tt369')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.showBorders" id=link370 onMouseOver="ShowTip(event, 'tt370', 'link370')" onMouseOut="HideTip('tt370')" class=ISymbol>showBorders</a>, <span class=IParent>$.jqplot.<wbr>MekkoRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showCursorLegend" id=link371 onMouseOver="ShowTip(event, 'tt371', 'link371')" onMouseOut="HideTip('tt371')" class=ISymbol>showCursorLegend</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showDataLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.showDataLabels" id=link372 onMouseOver="ShowTip(event, 'tt372', 'link372')" onMouseOut="HideTip('tt372')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.showDataLabels" id=link373 onMouseOver="ShowTip(event, 'tt373', 'link373')" onMouseOut="HideTip('tt373')" class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.showDataLabels" id=link374 onMouseOver="ShowTip(event, 'tt374', 'link374')" onMouseOut="HideTip('tt374')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showGridline</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showGridline" id=link375 onMouseOver="ShowTip(event, 'tt375', 'link375')" onMouseOut="HideTip('tt375')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showGridline" id=link376 onMouseOver="ShowTip(event, 'tt376', 'link376')" onMouseOut="HideTip('tt376')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showHorizontalLine" id=link377 onMouseOver="ShowTip(event, 'tt377', 'link377')" onMouseOut="HideTip('tt377')" class=ISymbol>showHorizontalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showLabel</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showLabel" id=link378 onMouseOver="ShowTip(event, 'tt378', 'link378')" onMouseOut="HideTip('tt378')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.showLabel" id=link379 onMouseOver="ShowTip(event, 'tt379', 'link379')" onMouseOut="HideTip('tt379')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showLabel" id=link380 onMouseOver="ShowTip(event, 'tt380', 'link380')" onMouseOut="HideTip('tt380')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Axis.showLabel" id=link381 onMouseOver="ShowTip(event, 'tt381', 'link381')" onMouseOut="HideTip('tt381')" class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.showLabel" id=link382 onMouseOver="ShowTip(event, 'tt382', 'link382')" onMouseOut="HideTip('tt382')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showLabels</span><div class=ISubIndex><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.showLabels" id=link383 onMouseOver="ShowTip(event, 'tt383', 'link383')" onMouseOut="HideTip('tt383')" class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.showLabels" id=link384 onMouseOver="ShowTip(event, 'tt384', 'link384')" onMouseOut="HideTip('tt384')" class=IParent>Legend</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.showLine" id=link385 onMouseOver="ShowTip(event, 'tt385', 'link385')" onMouseOut="HideTip('tt385')" class=ISymbol>showLine</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.showLines" id=link386 onMouseOver="ShowTip(event, 'tt386', 'link386')" onMouseOut="HideTip('tt386')" class=ISymbol>showLines</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showMark</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showMark" id=link387 onMouseOver="ShowTip(event, 'tt387', 'link387')" onMouseOut="HideTip('tt387')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showMark" id=link388 onMouseOver="ShowTip(event, 'tt388', 'link388')" onMouseOut="HideTip('tt388')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showMarker</span><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showMarker" id=link389 onMouseOver="ShowTip(event, 'tt389', 'link389')" onMouseOut="HideTip('tt389')" class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-core-js.html#Series.showMarker" id=link390 onMouseOver="ShowTip(event, 'tt390', 'link390')" onMouseOut="HideTip('tt390')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.showMinorTicks" id=link391 onMouseOver="ShowTip(event, 'tt391', 'link391')" onMouseOut="HideTip('tt391')" class=ISymbol>showMinorTicks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.showSwatch" id=link392 onMouseOver="ShowTip(event, 'tt392', 'link392')" onMouseOut="HideTip('tt392')" class=ISymbol>showSwatch</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTickLabels" id=link393 onMouseOver="ShowTip(event, 'tt393', 'link393')" onMouseOut="HideTip('tt393')" class=ISymbol>showTickLabels</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.showTickMarks" id=link394 onMouseOver="ShowTip(event, 'tt394', 'link394')" onMouseOut="HideTip('tt394')" class=ISymbol>showTickMarks</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showTicks</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTicks" id=link395 onMouseOver="ShowTip(event, 'tt395', 'link395')" onMouseOut="HideTip('tt395')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.showTicks" id=link396 onMouseOver="ShowTip(event, 'tt396', 'link396')" onMouseOut="HideTip('tt396')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>showTooltip</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.showTooltip" id=link397 onMouseOver="ShowTip(event, 'tt397', 'link397')" onMouseOut="HideTip('tt397')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltip" id=link398 onMouseOver="ShowTip(event, 'tt398', 'link398')" onMouseOut="HideTip('tt398')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showTooltip" id=link399 onMouseOver="ShowTip(event, 'tt399', 'link399')" onMouseOut="HideTip('tt399')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipDataPosition" id=link400 onMouseOver="ShowTip(event, 'tt400', 'link400')" onMouseOut="HideTip('tt400')" class=ISymbol>showTooltipDataPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipGridPosition" id=link401 onMouseOver="ShowTip(event, 'tt401', 'link401')" onMouseOut="HideTip('tt401')" class=ISymbol>showTooltipGridPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipOutsideZoom" id=link402 onMouseOver="ShowTip(event, 'tt402', 'link402')" onMouseOut="HideTip('tt402')" class=ISymbol>showTooltipOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.showTooltipPrecision" id=link403 onMouseOver="ShowTip(event, 'tt403', 'link403')" onMouseOut="HideTip('tt403')" class=ISymbol>showTooltipPrecision</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipUnitPosition" id=link404 onMouseOver="ShowTip(event, 'tt404', 'link404')" onMouseOut="HideTip('tt404')" class=ISymbol>showTooltipUnitPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showVerticalLine" id=link405 onMouseOver="ShowTip(event, 'tt405', 'link405')" onMouseOut="HideTip('tt405')" class=ISymbol>showVerticalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>size</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.size" id=link406 onMouseOver="ShowTip(event, 'tt406', 'link406')" onMouseOut="HideTip('tt406')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.size" id=link407 onMouseOver="ShowTip(event, 'tt407', 'link407')" onMouseOut="HideTip('tt407')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.sizeAdjust" id=link408 onMouseOver="ShowTip(event, 'tt408', 'link408')" onMouseOut="HideTip('tt408')" class=ISymbol>sizeAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>sliceMargin</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.sliceMargin" id=link409 onMouseOver="ShowTip(event, 'tt409', 'link409')" onMouseOut="HideTip('tt409')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.sliceMargin" id=link410 onMouseOver="ShowTip(event, 'tt410', 'link410')" onMouseOut="HideTip('tt410')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.smooth" id=link411 onMouseOver="ShowTip(event, 'tt411', 'link411')" onMouseOut="HideTip('tt411')" class=ISymbol>smooth</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.sortData" id=link412 onMouseOver="ShowTip(event, 'tt412', 'link412')" onMouseOut="HideTip('tt412')" class=ISymbol>sortData</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.sortMergedLabels" id=link413 onMouseOver="ShowTip(event, 'tt413', 'link413')" onMouseOut="HideTip('tt413')" class=ISymbol>sortMergedLabels</a>, <span class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.stackedValue" id=link414 onMouseOver="ShowTip(event, 'tt414', 'link414')" onMouseOut="HideTip('tt414')" class=ISymbol>stackedValue</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.stackSeries" id=link415 onMouseOver="ShowTip(event, 'tt415', 'link415')" onMouseOut="HideTip('tt415')" class=ISymbol>stackSeries</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.start" id=link416 onMouseOver="ShowTip(event, 'tt416', 'link416')" onMouseOut="HideTip('tt416')" class=ISymbol>start</a>, <span class=IParent>Line</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>startAngle</span><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.startAngle" id=link417 onMouseOver="ShowTip(event, 'tt417', 'link417')" onMouseOut="HideTip('tt417')" class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.startAngle" id=link418 onMouseOver="ShowTip(event, 'tt418', 'link418')" onMouseOut="HideTip('tt418')" class=IParent>$.jqplot.<wbr>PieRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.stop" id=link419 onMouseOver="ShowTip(event, 'tt419', 'link419')" onMouseOut="HideTip('tt419')" class=ISymbol>stop</a>, <span class=IParent>Line</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeRect" id=link420 onMouseOver="ShowTip(event, 'tt420', 'link420')" onMouseOut="HideTip('tt420')" class=ISymbol>strokeRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeStyle" id=link421 onMouseOver="ShowTip(event, 'tt421', 'link421')" onMouseOut="HideTip('tt421')" class=ISymbol>strokeStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>style</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.style" id=link422 onMouseOver="ShowTip(event, 'tt422', 'link422')" onMouseOut="HideTip('tt422')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.style" id=link423 onMouseOver="ShowTip(event, 'tt423', 'link423')" onMouseOut="HideTip('tt423')" class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.suffix" id=link424 onMouseOver="ShowTip(event, 'tt424', 'link424')" onMouseOut="HideTip('tt424')" class=ISymbol>suffix</a>, <span class=IParent>$.jqplot.<wbr>AxisTickRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#synchronizeHighlight" id=link425 onMouseOver="ShowTip(event, 'tt425', 'link425')" onMouseOut="HideTip('tt425')" class=ISymbol>synchronizeHighlight</a></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.syncTicks" id=link426 onMouseOver="ShowTip(event, 'tt426', 'link426')" onMouseOut="HideTip('tt426')" class=ISymbol>syncTicks</a>, <span class=IParent>Axis</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt304"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.scaleToHiddenSeries = false</td></tr></table></blockquote>True to include hidden series when computing axes bounds and scaling.</div></div><div class=CToolTip id="tt305"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sectionMargin = 6</td></tr></table></blockquote>spacing between funnel sections in pixels.</div></div><div class=CToolTip id="tt306"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.series = []</td></tr></table></blockquote>Array of series object options. </div></div><div class=CToolTip id="tt307"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesColors = $.jqplot.config.defaultColors</td></tr></table></blockquote>Ann array of CSS color specifications that will be applied, in order, to the series in the plot. </div></div><div class=CToolTip id="tt308"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>seriesDefaults: {}, series:[] }</td></tr></table></blockquote>default options that will be applied to all series. </div></div><div class=CToolTip id="tt309"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesLabelIndex = null</td></tr></table></blockquote>array index for location of labels within data point arrays. </div></div><div class=CToolTip id="tt310"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggle = 'normal'</td></tr></table></blockquote>false to not enable series on/off toggling on the legend. </div></div><div class=CToolTip id="tt311"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.seriesToggleReplot = false</td></tr></table></blockquote>True to replot the chart after toggling series on/off. </div></div><div class=CToolTip id="tt312"><div class=CProperty>wether or not to draw a shadow on the line</div></div><div class=CToolTip id="tt313"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether or not to draw a shadow on the line</div></div><div class=CToolTip id="tt314"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>true or false, wether or not to show the shadow.</div></div><div class=CToolTip id="tt315"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadow = true</td></tr></table></blockquote>wether to show a shadow behind the grid.</div></div><div class=CToolTip id="tt316"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.08</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt317"><div class=CProperty>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt318"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt319"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt320"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt321"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt322"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>transparency of the shadow (0 = transparent, 1 = opaque)</div></div><div class=CToolTip id="tt323"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = 0.07</td></tr></table></blockquote>Alpha transparency of the shadow.</div></div><div class=CToolTip id="tt324"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.07'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt325"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAlpha = '0.1'</td></tr></table></blockquote>Alpha channel transparency of shadow. </div></div><div class=CToolTip id="tt326"><div class=CProperty>Shadow angle in degrees</div></div><div class=CToolTip id="tt327"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt328"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Angle of the shadow on the trend line.</div></div><div class=CToolTip id="tt329"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>shadow angle in degrees</div></div><div class=CToolTip id="tt330"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowAngle = 45</td></tr></table></blockquote>Shadow angle in degrees</div></div><div class=CToolTip id="tt331"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowColor = null</td></tr></table></blockquote>an optional css color spec for the shadow in &lsquo;rgba(n, n, n, n)&rsquo; form</div></div><div class=CToolTip id="tt332"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt333"><div class=CProperty>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt334"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt335"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt336"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt337"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 4</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt338"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 5</td></tr></table></blockquote>number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt339"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>number of strokes to make of the shadow.</div></div><div class=CToolTip id="tt340"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt341"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowDepth = 3</td></tr></table></blockquote>Number of times shadow is stroked, each stroke offset shadowOffset from the last.</div></div><div class=CToolTip id="tt342"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt343"><div class=CProperty>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt344"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt345"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the area and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt346"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt347"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the gauge ring and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt348"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 2</td></tr></table></blockquote>offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.</div></div><div class=CToolTip id="tt349"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.0</td></tr></table></blockquote>pixel offset for each stroke of the shadow.</div></div><div class=CToolTip id="tt350"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.5</td></tr></table></blockquote>Offset of each shadow stroke from the border in pixels</div></div><div class=CToolTip id="tt351"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowOffset = 1.25</td></tr></table></blockquote>Shadow offset from line in pixels</div></div><div class=CToolTip id="tt352"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowRenderer = new $.jqplot.ShadowRenderer()</td></tr></table></blockquote>Renderer that will draws the shadows on the marker.</div></div><div class=CToolTip id="tt353"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shadowWidth = 3</td></tr></table></blockquote>width of the stoke for the shadow</div></div><div class=CToolTip id="tt354"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.shapeRenderer = new $.jqplot.ShapeRenderer()</td></tr></table></blockquote>Renderer that will draw the marker.</div></div><div class=CToolTip id="tt355"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt356"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label). </div></div><div class=CToolTip id="tt357"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt358"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the tick (mark and label).</div></div><div class=CToolTip id="tt359"><div class=CProperty>true to show (draw), false to not draw.</div></div><div class=CToolTip id="tt360"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>wether to show the cursor or not.</div></div><div class=CToolTip id="tt361"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>true to show the highlight.</div></div><div class=CToolTip id="tt362"><div class=CProperty>true to show the bands. </div></div><div class=CToolTip id="tt363"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the marker.</div></div><div class=CToolTip id="tt364"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>show the labels or not.</div></div><div class=CToolTip id="tt365"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = $.jqplot.config.enablePlugins</td></tr></table></blockquote>Wether or not to show the trend line.</div></div><div class=CToolTip id="tt366"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote>Wether to display the axis on the graph.</div></div><div class=CToolTip id="tt367"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = false</td></tr></table></blockquote>Wether to display the legend on the graph.</div></div><div class=CToolTip id="tt368"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to draw the series.</div></div><div class=CToolTip id="tt369"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.show = true</td></tr></table></blockquote>wether or not to show the title</div></div><div class=CToolTip id="tt370"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showBorders = true</td></tr></table></blockquote>True to draw borders lines between areas on the chart. </div></div><div class=CToolTip id="tt371"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showCursorLegend = false</td></tr></table></blockquote>Replace the plot legend with an enhanced legend displaying intersection information.</div></div><div class=CToolTip id="tt372"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt373"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt374"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showDataLabels = false</td></tr></table></blockquote>true to show data labels on slices.</div></div><div class=CToolTip id="tt375"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt376"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showGridline = true</td></tr></table></blockquote>wether or not to draw the gridline on the grid at this tick.</div></div><div class=CToolTip id="tt377"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showHorizontalLine = false</td></tr></table></blockquote>draw a horizontal line across the plot which follows the cursor.</div></div><div class=CToolTip id="tt378"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt379"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt380"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>wether or not to show the label.</div></div><div class=CToolTip id="tt381"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>true to show the axis label.</div></div><div class=CToolTip id="tt382"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabel = true</td></tr></table></blockquote>true to show label for this series in the legend.</div></div><div class=CToolTip id="tt383"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>True to show labels on bubbles (if any), false to not show.</div></div><div class=CToolTip id="tt384"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLabels = true</td></tr></table></blockquote>true to show the label text on the legend.</div></div><div class=CToolTip id="tt385"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showLine = true</td></tr></table></blockquote>wether to actually draw the line or not. </div></div><div class=CToolTip id="tt386"><div class=CProperty>True to show lines at top and bottom of bands [default: false].</div></div><div class=CToolTip id="tt387"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt388"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMark = true</td></tr></table></blockquote>wether or not to show the mark on the axis.</div></div><div class=CToolTip id="tt389"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>true to show the marker</div></div><div class=CToolTip id="tt390"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMarker = true</td></tr></table></blockquote>wether or not to show the markers at the data points.</div></div><div class=CToolTip id="tt391"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showMinorTicks = true</td></tr></table></blockquote>Wether or not to show minor ticks. </div></div><div class=CToolTip id="tt392"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showSwatches = true</td></tr></table></blockquote>true to show the color swatches on the legend.</div></div><div class=CToolTip id="tt393"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickLabels = true</td></tr></table></blockquote>true to show tick labels next to ticks.</div></div><div class=CToolTip id="tt394"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTickMarks = true</td></tr></table></blockquote>Wether to show the tick marks (line crossing grid) or not. </div></div><div class=CToolTip id="tt395"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>true to show ticks around gauge.</div></div><div class=CToolTip id="tt396"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTicks = true</td></tr></table></blockquote>Wether to show the ticks (both marks and labels) or not. </div></div><div class=CToolTip id="tt397"><div class=CProperty>Show a tooltip with data point values.</div></div><div class=CToolTip id="tt398"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>show a cursor position tooltip. </div></div><div class=CToolTip id="tt399"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltip = true</td></tr></table></blockquote>Show a tooltip with data point values.</div></div><div class=CToolTip id="tt400"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipDataPosition = false</td></tr></table></blockquote>Used with showVerticalLine to show intersecting data points in the tooltip.</div></div><div class=CToolTip id="tt401"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipGridPosition = false</td></tr></table></blockquote>show the grid pixel coordinates of the mouse.</div></div><div class=CToolTip id="tt402"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipOutsideZoom = false</td></tr></table></blockquote>True will keep updating the tooltip when zooming of the grid.</div></div><div class=CToolTip id="tt403"><div class=CProperty>Controls how close to line cursor must be to show tooltip. </div></div><div class=CToolTip id="tt404"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showTooltipUnitPosition = true</td></tr></table></blockquote>show the unit (data) coordinates of the mouse.</div></div><div class=CToolTip id="tt405"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.showVerticalLine = false</td></tr></table></blockquote>draw a vertical line across the plot which follows the cursor. </div></div><div class=CToolTip id="tt406"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 4</td></tr></table></blockquote>Length of the tick beyond the grid in pixels. </div></div><div class=CToolTip id="tt407"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.size = 9.0</td></tr></table></blockquote>Size of the marker (diameter or circle, length of edge of square, etc.)</div></div><div class=CToolTip id="tt408"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sizeAdjust = 5</td></tr></table></blockquote>Pixels to add to the overall size of the highlight.</div></div><div class=CToolTip id="tt409"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between donut slices in degrees.</div></div><div class=CToolTip id="tt410"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sliceMargin = 0</td></tr></table></blockquote>angular spacing between pie slices in degrees.</div></div><div class=CToolTip id="tt411"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.renderer.smooth = false</td></tr></table></blockquote>True to draw a smoothed (interpolated) line through the data points with automatically computed number of smoothing points. </div></div><div class=CToolTip id="tt412"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortData = true</td></tr></table></blockquote>false to not sort the data passed in by the user. </div></div><div class=CToolTip id="tt413"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.sortMergedLabels = false</td></tr></table></blockquote>True to sort tick labels when labels are created by merging x axis values from multiple series. </div></div><div class=CToolTip id="tt414"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackedValue = false</td></tr></table></blockquote>true to display value as stacked in a stacked plot. </div></div><div class=CToolTip id="tt415"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.stackSeries = false</td></tr></table></blockquote>true or false, creates a stack or &ldquo;mountain&rdquo; plot. </div></div><div class=CToolTip id="tt416"><div class=CProperty>[x, y] coordinates for the start of the line.</div></div><div class=CToolTip id="tt417"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing donut in degrees. </div></div><div class=CToolTip id="tt418"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.startAngle = 0</td></tr></table></blockquote>Angle to start drawing pie in degrees. </div></div><div class=CToolTip id="tt419"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>stop: [] }</td></tr></table></blockquote>[x, y] coordinates for the end of the line.</div></div><div class=CToolTip id="tt420"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeRect = false</td></tr></table></blockquote>true to draw shape as a stroked rectangle.</div></div><div class=CToolTip id="tt421"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.strokeStyle = '#999999'</td></tr></table></blockquote>css color spec for the stoke style</div></div><div class=CToolTip id="tt422"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'crosshair'</td></tr></table></blockquote>CSS spec for cursor style</div></div><div class=CToolTip id="tt423"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.style = 'filledCircle'</td></tr></table></blockquote>One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare</div></div><div class=CToolTip id="tt424"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.suffix = ''</td></tr></table></blockquote>String to append to the tick label. </div></div><div class=CToolTip id="tt425"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.synchronizeHighlight = false</td></tr></table></blockquote>Index of another series to highlight when this series is highlighted. </div></div><div class=CToolTip id="tt426"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.syncTicks = null</td></tr></table></blockquote>true to try and synchronize tick spacing across multiple axes so that ticks and grid lines line up. </div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties6.html b/wqflask/wqflask/static/packages/jqplot/docs/index/Properties6.html
deleted file mode 100644
index 985ab8eb..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/index/Properties6.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><title>Property Index</title><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script><script language=JavaScript src="../javascript/searchdata.js"></script></head><body class="IndexPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=IPageTitle>Property Index</div><div class=INavigationBar>$#! &middot; 0-9 &middot; <a href="Properties.html#A">A</a> &middot; <a href="Properties.html#B">B</a> &middot; <a href="Properties.html#C">C</a> &middot; <a href="Properties2.html#D">D</a> &middot; <a href="Properties2.html#E">E</a> &middot; <a href="Properties2.html#F">F</a> &middot; <a href="Properties3.html#G">G</a> &middot; <a href="Properties3.html#H">H</a> &middot; <a href="Properties3.html#I">I</a> &middot; J &middot; K &middot; <a href="Properties3.html#L">L</a> &middot; <a href="Properties4.html#M">M</a> &middot; <a href="Properties4.html#N">N</a> &middot; <a href="Properties4.html#O">O</a> &middot; <a href="Properties4.html#P">P</a> &middot; Q &middot; <a href="Properties4.html#R">R</a> &middot; <a href="Properties5.html#S">S</a> &middot; <a href="#T">T</a> &middot; <a href="#U">U</a> &middot; <a href="#V">V</a> &middot; <a href="#W">W</a> &middot; <a href="#X">X</a> &middot; <a href="#Y">Y</a> &middot; <a href="#Z">Z</a></div><table border=0 cellspacing=0 cellpadding=0><tr><td class=IHeading id=IFirstHeading><a name="T"></a>T</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title.text" id=link427 onMouseOver="ShowTip(event, 'tt427', 'link427')" onMouseOut="HideTip('tt427')" class=ISymbol>text</a>, <span class=IParent>Title</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Title.textAlign" id=link428 onMouseOver="ShowTip(event, 'tt428', 'link428')" onMouseOut="HideTip('tt428')" class=ISymbol>textAlign</a>, <span class=IParent>Title</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>textColor</span><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.textColor" id=link429 onMouseOver="ShowTip(event, 'tt429', 'link429')" onMouseOut="HideTip('tt429')" class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.textColor" id=link430 onMouseOver="ShowTip(event, 'tt430', 'link430')" onMouseOut="HideTip('tt430')" class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.textColor" id=link431 onMouseOver="ShowTip(event, 'tt431', 'link431')" onMouseOut="HideTip('tt431')" class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.textColor" id=link432 onMouseOver="ShowTip(event, 'tt432', 'link432')" onMouseOut="HideTip('tt432')" class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.textColor" id=link433 onMouseOver="ShowTip(event, 'tt433', 'link433')" onMouseOut="HideTip('tt433')" class=IParent>Title</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.themes" id=link434 onMouseOver="ShowTip(event, 'tt434', 'link434')" onMouseOut="HideTip('tt434')" class=ISymbol>themes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.thickness" id=link435 onMouseOver="ShowTip(event, 'tt435', 'link435')" onMouseOut="HideTip('tt435')" class=ISymbol>thickness</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickColor" id=link436 onMouseOver="ShowTip(event, 'tt436', 'link436')" onMouseOut="HideTip('tt436')" class=ISymbol>tickColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tickInset</span><div class=ISubIndex><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickInset" id=link437 onMouseOver="ShowTip(event, 'tt437', 'link437')" onMouseOut="HideTip('tt437')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.tickInset" id=link438 onMouseOver="ShowTip(event, 'tt438', 'link438')" onMouseOut="HideTip('tt438')" class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickInterval" id=link439 onMouseOver="ShowTip(event, 'tt439', 'link439')" onMouseOut="HideTip('tt439')" class=ISymbol>tickInterval</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.tickLength" id=link440 onMouseOver="ShowTip(event, 'tt440', 'link440')" onMouseOut="HideTip('tt440')" class=ISymbol>tickLength</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.tickMode" id=link441 onMouseOver="ShowTip(event, 'tt441', 'link441')" onMouseOut="HideTip('tt441')" class=ISymbol>tickMode</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickOptions" id=link442 onMouseOver="ShowTip(event, 'tt442', 'link442')" onMouseOut="HideTip('tt442')" class=ISymbol>tickOptions</a>, <span class=IParent>Axis</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickPadding" id=link443 onMouseOver="ShowTip(event, 'tt443', 'link443')" onMouseOut="HideTip('tt443')" class=ISymbol>tickPadding</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tickRenderer</span><div class=ISubIndex><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.tickRenderer" id=link444 onMouseOver="ShowTip(event, 'tt444', 'link444')" onMouseOut="HideTip('tt444')" class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickRenderer" id=link445 onMouseOver="ShowTip(event, 'tt445', 'link445')" onMouseOut="HideTip('tt445')" class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickRenderer" id=link446 onMouseOver="ShowTip(event, 'tt446', 'link446')" onMouseOut="HideTip('tt446')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>ticks</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ticks" id=link447 onMouseOver="ShowTip(event, 'tt447', 'link447')" onMouseOut="HideTip('tt447')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.ticks" id=link448 onMouseOver="ShowTip(event, 'tt448', 'link448')" onMouseOut="HideTip('tt448')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tickSpacing</span><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickSpacing" id=link449 onMouseOver="ShowTip(event, 'tt449', 'link449')" onMouseOut="HideTip('tt449')" class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickSpacing" id=link450 onMouseOver="ShowTip(event, 'tt450', 'link450')" onMouseOut="HideTip('tt450')" class=IParent>Axis</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.title" id=link451 onMouseOver="ShowTip(event, 'tt451', 'link451')" onMouseOut="HideTip('tt451')" class=ISymbol>title</a>, <span class=IParent>jqPlot</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipAxes" id=link452 onMouseOver="ShowTip(event, 'tt452', 'link452')" onMouseOut="HideTip('tt452')" class=ISymbol>tooltipAxes</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipAxisGroups" id=link453 onMouseOver="ShowTip(event, 'tt453', 'link453')" onMouseOut="HideTip('tt453')" class=ISymbol>tooltipAxisGroups</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipFadeSpeed</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipFadeSpeed" id=link454 onMouseOver="ShowTip(event, 'tt454', 'link454')" onMouseOut="HideTip('tt454')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFadeSpeed" id=link455 onMouseOver="ShowTip(event, 'tt455', 'link455')" onMouseOut="HideTip('tt455')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipFormatString</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipFormatString" id=link456 onMouseOver="ShowTip(event, 'tt456', 'link456')" onMouseOut="HideTip('tt456')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipFormatString" id=link457 onMouseOver="ShowTip(event, 'tt457', 'link457')" onMouseOut="HideTip('tt457')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFormatString" id=link458 onMouseOver="ShowTip(event, 'tt458', 'link458')" onMouseOut="HideTip('tt458')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipLocation</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipLocation" id=link459 onMouseOver="ShowTip(event, 'tt459', 'link459')" onMouseOut="HideTip('tt459')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipLocation" id=link460 onMouseOver="ShowTip(event, 'tt460', 'link460')" onMouseOut="HideTip('tt460')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipLocation" id=link461 onMouseOver="ShowTip(event, 'tt461', 'link461')" onMouseOut="HideTip('tt461')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>tooltipOffset</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipOffset" id=link462 onMouseOver="ShowTip(event, 'tt462', 'link462')" onMouseOut="HideTip('tt462')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipOffset" id=link463 onMouseOver="ShowTip(event, 'tt463', 'link463')" onMouseOut="HideTip('tt463')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipOffset" id=link464 onMouseOver="ShowTip(event, 'tt464', 'link464')" onMouseOut="HideTip('tt464')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.transposedData" id=link465 onMouseOver="ShowTip(event, 'tt465', 'link465')" onMouseOut="HideTip('tt465')" class=ISymbol>transposedData</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.type" id=link466 onMouseOver="ShowTip(event, 'tt466', 'link466')" onMouseOut="HideTip('tt466')" class=ISymbol>type</a>, <span class=IParent>$.jqplot.<wbr>Trendline</span></td></tr><tr><td class=IHeading><a name="U"></a>U</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.upBodyColor" id=link467 onMouseOver="ShowTip(event, 'tt467', 'link467')" onMouseOut="HideTip('tt467')" class=ISymbol>upBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>useAxesFormatters</span><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.useAxesFormatters" id=link468 onMouseOver="ShowTip(event, 'tt468', 'link468')" onMouseOut="HideTip('tt468')" class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.useAxesFormatters" id=link469 onMouseOver="ShowTip(event, 'tt469', 'link469')" onMouseOut="HideTip('tt469')" class=IParent>$.jqplot.<wbr>Highlighter</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Series.useNegativeColors" id=link470 onMouseOver="ShowTip(event, 'tt470', 'link470')" onMouseOut="HideTip('tt470')" class=ISymbol>useNegativeColors</a>, <span class=IParent>Series</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Axis.useSeriesColor" id=link471 onMouseOver="ShowTip(event, 'tt471', 'link471')" onMouseOut="HideTip('tt471')" class=ISymbol>useSeriesColor</a>, <span class=IParent>Axis</span></td></tr><tr><td class=IHeading><a name="V"></a>V</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.varyBarColor" id=link472 onMouseOver="ShowTip(event, 'tt472', 'link472')" onMouseOut="HideTip('tt472')" class=ISymbol>varyBarColor</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.varyBlockColors" id=link473 onMouseOver="ShowTip(event, 'tt473', 'link473')" onMouseOut="HideTip('tt473')" class=ISymbol>varyBlockColors</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.varyBubbleColors" id=link474 onMouseOver="ShowTip(event, 'tt474', 'link474')" onMouseOut="HideTip('tt474')" class=ISymbol>varyBubbleColors</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></td></tr><tr><td class=IHeading><a name="W"></a>W</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.waterfall" id=link475 onMouseOver="ShowTip(event, 'tt475', 'link475')" onMouseOut="HideTip('tt475')" class=ISymbol>waterfall</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.wickColor" id=link476 onMouseOver="ShowTip(event, 'tt476', 'link476')" onMouseOut="HideTip('tt476')" class=ISymbol>wickColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.widthRatio" id=link477 onMouseOver="ShowTip(event, 'tt477', 'link477')" onMouseOut="HideTip('tt477')" class=ISymbol>widthRatio</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></td></tr><tr><td class=IHeading><a name="X"></a>X</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>xaxis</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.xaxis" id=link478 onMouseOver="ShowTip(event, 'tt478', 'link478')" onMouseOut="HideTip('tt478')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-core-js.html#Series.xaxis" id=link479 onMouseOver="ShowTip(event, 'tt479', 'link479')" onMouseOut="HideTip('tt479')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.xmax" id=link480 onMouseOver="ShowTip(event, 'tt480', 'link480')" onMouseOut="HideTip('tt480')" class=ISymbol>xmax</a>, <span class=IParent>HorizontalLine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.xmin" id=link481 onMouseOver="ShowTip(event, 'tt481', 'link481')" onMouseOut="HideTip('tt481')" class=ISymbol>xmin</a>, <span class=IParent>HorizontalLine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.xoffset" id=link482 onMouseOver="ShowTip(event, 'tt482', 'link482')" onMouseOut="HideTip('tt482')" class=ISymbol>xoffset</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.xpadding" id=link483 onMouseOver="ShowTip(event, 'tt483', 'link483')" onMouseOut="HideTip('tt483')" class=ISymbol>xpadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=IHeading><a name="Y"></a>Y</td><td></td></tr><tr><td class=ISymbolPrefix id=IFirstSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.y" id=link484 onMouseOver="ShowTip(event, 'tt484', 'link484')" onMouseOut="HideTip('tt484')" class=ISymbol>y</a>, <span class=IParent>HorizontalLine</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><span class=ISymbol>yaxis</span><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.yaxis" id=link485 onMouseOver="ShowTip(event, 'tt485', 'link485')" onMouseOut="HideTip('tt485')" class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-core-js.html#Series.yaxis" id=link486 onMouseOver="ShowTip(event, 'tt486', 'link486')" onMouseOut="HideTip('tt486')" class=IParent>Series</a></div></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/jqplot-core-js.html#Legend.yoffset" id=link487 onMouseOver="ShowTip(event, 'tt487', 'link487')" onMouseOut="HideTip('tt487')" class=ISymbol>yoffset</a>, <span class=IParent>Legend</span></td></tr><tr><td class=ISymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.ypadding" id=link488 onMouseOver="ShowTip(event, 'tt488', 'link488')" onMouseOut="HideTip('tt488')" class=ISymbol>ypadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></td></tr><tr><td class=ISymbolPrefix id=ILastSymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.yvalues" id=link489 onMouseOver="ShowTip(event, 'tt489', 'link489')" onMouseOut="HideTip('tt489')" class=ISymbol>yvalues</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></td></tr><tr><td class=IHeading><a name="Z"></a>Z</td><td></td></tr><tr><td class=ISymbolPrefix id=IOnlySymbolPrefix>&nbsp;</td><td class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.zoom" id=link490 onMouseOver="ShowTip(event, 'tt490', 'link490')" onMouseOut="HideTip('tt490')" class=ISymbol>zoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></td></tr></table>
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt427"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.text = text</td></tr></table></blockquote>text of the title;</div></div><div class=CToolTip id="tt428"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textAlign</td></tr></table></blockquote>css text-align spec for the text.</div></div><div class=CToolTip id="tt429"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt430"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt431"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor = '#666666'</td></tr></table></blockquote>css spec for the color attribute.</div></div><div class=CToolTip id="tt432"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css color spec for the legend text.</div></div><div class=CToolTip id="tt433"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.textColor</td></tr></table></blockquote>css color spec for the text.</div></div><div class=CToolTip id="tt434"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.themes = {}</td></tr></table></blockquote>hash of themes managed by the theme engine. </div></div><div class=CToolTip id="tt435"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.thickness = null</td></tr></table></blockquote>thickness of the donut, auto computed by default Overridden by if innerDiameter is specified.</div></div><div class=CToolTip id="tt436"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickColor = &quot;989898&quot;</td></tr></table></blockquote>color of the tick marks around the gauge.</div></div><div class=CToolTip id="tt437"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInset = 0</td></tr></table></blockquote>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval. </div></div><div class=CToolTip id="tt438"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInset = 0</td></tr></table></blockquote>Controls the amount to inset the first and last ticks from the edges of the grid, in multiples of the tick interval. </div></div><div class=CToolTip id="tt439"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickInterval</td></tr></table></blockquote>number of units between ticks. </div></div><div class=CToolTip id="tt440"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickLength = 'auto'</td></tr></table></blockquote>length of the line in pixels indicating open and close price. </div></div><div class=CToolTip id="tt441"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickMode</td></tr></table></blockquote>How to space the ticks on the axis. </div></div><div class=CToolTip id="tt442"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickOptions = {}</td></tr></table></blockquote>Options that will be passed to the tickRenderer, see $.jqplot.AxisTickRenderer options.</div></div><div class=CToolTip id="tt443"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickPadding = null</td></tr></table></blockquote>padding of the tick marks to the outer ring and the tick labels to marks. </div></div><div class=CToolTip id="tt444"><div class=CProperty>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. </div></div><div class=CToolTip id="tt445"><div class=CProperty>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer. </div></div><div class=CToolTip id="tt446"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickRenderer = $.jqplot.AxisTickRenderer</td></tr></table></blockquote>A class of a rendering engine for creating the ticks labels displayed on the plot, See $.jqplot.AxisTickRenderer.</div></div><div class=CToolTip id="tt447"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>Array of tick values. </div></div><div class=CToolTip id="tt448"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ticks = []</td></tr></table></blockquote>1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis. </div></div><div class=CToolTip id="tt449"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 30</td></tr></table></blockquote>Degrees between ticks. </div></div><div class=CToolTip id="tt450"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tickSpacing = 75</td></tr></table></blockquote>Approximate pixel spacing between ticks on graph. </div></div><div class=CToolTip id="tt451"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.title = new Title()</td></tr></table></blockquote>Title object. </div></div><div class=CToolTip id="tt452"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxes = 'both'</td></tr></table></blockquote>Which axes to display in tooltip, &lsquo;x&rsquo;, &lsquo;y&rsquo; or &lsquo;both&rsquo;, &lsquo;xy&rsquo; or &lsquo;yx&rsquo; &lsquo;both&rsquo; and &lsquo;xy&rsquo; are equivalent, &lsquo;yx&rsquo; reverses order of labels.</div></div><div class=CToolTip id="tt453"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipAxisGroups = []</td></tr></table></blockquote>Show position for the specified axes. </div></div><div class=CToolTip id="tt454"><div class=CProperty>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</div></div><div class=CToolTip id="tt455"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFadeSpeed = &quot;fast&quot;</td></tr></table></blockquote>&lsquo;slow&rsquo;, &lsquo;def&rsquo;, &lsquo;fast&rsquo;, or number of milliseconds.</div></div><div class=CToolTip id="tt456"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>tooltipFormatString: '%d, %d' }</td></tr></table></blockquote>Format string passed the x and y values of the cursor on the line. </div></div><div class=CToolTip id="tt457"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.4P, %.4P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt458"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipFormatString = '%.5P'</td></tr></table></blockquote>sprintf format string for the tooltip. </div></div><div class=CToolTip id="tt459"><div class=CProperty>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</div></div><div class=CToolTip id="tt460"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'se'</td></tr></table></blockquote>Where to position tooltip. </div></div><div class=CToolTip id="tt461"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipLocation = 'nw'</td></tr></table></blockquote>Where to position tooltip, &lsquo;n&rsquo;, &lsquo;ne&rsquo;, &lsquo;e&rsquo;, &lsquo;se&rsquo;, &lsquo;s&rsquo;, &lsquo;sw&rsquo;, &lsquo;w&rsquo;, &lsquo;nw&rsquo;</div></div><div class=CToolTip id="tt462"><div class=CProperty>Pixel offset of tooltip from the highlight.</div></div><div class=CToolTip id="tt463"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 6</td></tr></table></blockquote>Pixel offset of tooltip from the grid boudaries or cursor center.</div></div><div class=CToolTip id="tt464"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.tooltipOffset = 2</td></tr></table></blockquote>Pixel offset of tooltip from the highlight.</div></div><div class=CToolTip id="tt465"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.transposedData = true</td></tr></table></blockquote>NOT IMPLEMENTED YET. </div></div><div class=CToolTip id="tt466"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.type = 'linear'</td></tr></table></blockquote>Either &lsquo;exponential&rsquo;, &lsquo;exp&rsquo;, or &lsquo;linear&rsquo;.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt467"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.upBodyColor = null</td></tr></table></blockquote>Color of candlestick body of an &ldquo;up&rdquo; day. </div></div><div class=CToolTip id="tt468"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt469"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useAxesFormatters = true</td></tr></table></blockquote>Use the x and y axes formatters to format the text in the tooltip.</div></div><div class=CToolTip id="tt470"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useNegativeColors = true</td></tr></table></blockquote>true to color negative values differently in filled and bar charts.</div></div><div class=CToolTip id="tt471"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.useSeriesColor = false</td></tr></table></blockquote>Use the color of the first series associated with this axis for the tick marks and line bordering this axis.</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt472"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBarColor = false</td></tr></table></blockquote>true to color each bar of a series separately rather than have every bar of a given series the same color. </div></div><div class=CToolTip id="tt473"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBlockColors = false</td></tr></table></blockquote>true to vary the color of each block in this series according to the seriesColors array. </div></div><div class=CToolTip id="tt474"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.varyBubbleColors = true</td></tr></table></blockquote>True to vary the color of each bubble in this series according to the seriesColors array. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt475"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.waterfall = false</td></tr></table></blockquote>true to enable waterfall plot.</div></div><div class=CToolTip id="tt476"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.wickColor = null</td></tr></table></blockquote>color of the hi-lo line thorugh the candlestick body. </div></div><div class=CToolTip id="tt477"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.widthRatio = 0.2</td></tr></table></blockquote>The ratio of the width of the top of the funnel to the bottom. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt478"><div class=CProperty>X axis to use for positioning/scaling the line.</div></div><div class=CToolTip id="tt479"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xaxis = 'xaxis'</td></tr></table></blockquote>which x axis to use with this series, either &lsquo;xaxis&rsquo; or &lsquo;x2axis&rsquo;.</div></div><div class=CToolTip id="tt480"><div class=CProperty>x value for the end of the line, null to scale to axis max.</div></div><div class=CToolTip id="tt481"><div class=CProperty>x value for the start of the line, null to scale to axis min.</div></div><div class=CToolTip id="tt482"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xoffset = 0</td></tr></table></blockquote>DEPRECATED. </div></div><div class=CToolTip id="tt483"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.xpadding = 6</td></tr></table></blockquote>horizontal padding in pixels between point and label</div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt484"><div class=CProperty>y value to position the line</div></div><div class=CToolTip id="tt485"><div class=CProperty>Y axis to use for positioning/scaling the line.</div></div><div class=CToolTip id="tt486"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yaxis = 'yaxis'</td></tr></table></blockquote>which y axis to use with this series, either &lsquo;yaxis&rsquo; or &lsquo;y2axis&rsquo;.</div></div><div class=CToolTip id="tt487"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yoffset = 0</td></tr></table></blockquote>DEPRECATED. </div></div><div class=CToolTip id="tt488"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.ypadding = 6</td></tr></table></blockquote>vertical padding in pixels between point and label</div></div><div class=CToolTip id="tt489"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.yvalues = 1</td></tr></table></blockquote>Number of y values to expect in the data point array. </div></div><!--END_ND_TOOLTIPS-->
-
-
-<!--START_ND_TOOLTIPS-->
-<div class=CToolTip id="tt490"><div class=CProperty><blockquote><table border=0 cellspacing=0 cellpadding=0 class=Prototype><tr><td>this.zoom = false</td></tr></table></blockquote>Enable plot zooming.</div></div><!--END_ND_TOOLTIPS-->
-
-</div><!--Index-->
-
-
-<div id=Footer>Copyright &copy; 2009 - 2010 Chris Leonello&nbsp; &middot;&nbsp; Updated October 7th, 2012&nbsp; &middot;&nbsp; <a href="http://www.naturaldocs.org">Generated by Natural Docs</a></div><!--Footer-->
-
-
-<div id=Menu><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent1')">Usage and Options</a><div class=MGroupContent id=MGroupContent1><div class=MEntry><div class=MFile><a href="../files/usage-txt.html">Usage</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotOptions-txt.html">jqPlot Options</a></div></div><div class=MEntry><div class=MFile><a href="../files/optionsTutorial-txt.html">Options Tutorial</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqPlotCssStyling-txt.html">jqPlot CSS Customization</a></div></div><div class=MEntry><div class=MFile><a href="../files/changes-txt.html">Change Log</a></div></div><div class=MEntry><div class=MLink><a href="../../tests/">Examples</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent4')">API Documentation</a><div class=MGroupContent id=MGroupContent4><div class=MEntry><div class=MFile><a href="../files/jqplot-core-js.html">jqPlot Charts</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent2')">Core Renderers</a><div class=MGroupContent id=MGroupContent2><div class=MEntry><div class=MFile><a href="../files/jqplot-axisTickRenderer-js.html">Axis Tick Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-canvasGridRenderer-js.html">Canvas Grid Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-divTitleRenderer-js.html">Div Title Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-linearAxisRenderer-js.html">Linear Axis Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-markerRenderer-js.html">Marker Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shapeRenderer-js.html">Shape Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-shadowRenderer-js.html">Shadow Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-lineRenderer-js.html">Line Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-axisLabelRenderer-js.html">Axis Label Renderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-themeEngine-js.html">Theme Engine</a></div></div><div class=MEntry><div class=MFile><a href="../files/jqplot-toImage-js.html">fn</a></div></div></div></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent3')">Plugins</a><div class=MGroupContent id=MGroupContent3><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-barRenderer-js.html">jqplot.<wbr>BarRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html">jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-blockRenderer-js.html">jqplot.<wbr>BlockRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-bubbleRenderer-js.html">jqplot.<wbr>BubbleRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html">jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html">jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html">jqplot.<wbr>CanvasGridRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-canvasOverlay-js.html">jqplot.<wbr>CanvasOverlay</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html">jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ciParser-js.html">jqplot.<wbr>ciParser</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-cursor-js.html">jqplot.<wbr>Cursor</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dateAxisRenderer-js.html">jqplot.<wbr>DateAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-donutRenderer-js.html">jqplot.<wbr>DonutRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-dragable-js.html">jqplot.<wbr>Dragable</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html">jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-funnelRenderer-js.html">jqplot.<wbr>FunnelRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-highlighter-js.html">jqplot.<wbr>Highlighter</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-logAxisRenderer-js.html">jqplot.<wbr>LogAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html">jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-mekkoRenderer-js.html">jqplot.<wbr>MekkoRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html">jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-ohlcRenderer-js.html">jqplot.<wbr>OHLCRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pieRenderer-js.html">jqplot.<wbr>PieRenderer</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pointLabels-js.html">jqplot.<wbr>PointLabels</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html">jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-pyramidRenderer-js.html">jqplot.<wbr>pyramidRenderer.js</a></div></div><div class=MEntry><div class=MFile><a href="../files/plugins/jqplot-trendline-js.html">jqplot.<wbr>Trendline</a></div></div></div></div></div></div></div></div><div class=MEntry><div class=MFile><a href="../files/gpl-2-0-txt.html">GPL License</a></div></div><div class=MEntry><div class=MFile><a href="../files/MIT-LICENSE-txt.html">MIT License</a></div></div><div class=MEntry><div class=MGroup><a href="javascript:ToggleMenu('MGroupContent5')">Index</a><div class=MGroupContent id=MGroupContent5><div class=MEntry><div class=MIndex><a href="General.html">Everything</a></div></div><div class=MEntry><div class=MIndex><a href="Classes.html">Classes</a></div></div><div class=MEntry><div class=MIndex id=MSelected>Properties</div></div><div class=MEntry><div class=MIndex><a href="Functions.html">Functions</a></div></div><div class=MEntry><div class=MIndex><a href="Hooks.html">Hooks</a></div></div><div class=MEntry><div class=MIndex><a href="Files.html">Files</a></div></div></div></div></div><script type="text/javascript"><!--
-var searchPanel = new SearchPanel("searchPanel", "HTML", "../search");
---></script><div id=MSearchPanel class=MSearchPanelInactive><input type=text id=MSearchField value=Search onFocus="searchPanel.OnSearchFieldFocus(true)" onBlur="searchPanel.OnSearchFieldFocus(false)" onKeyUp="searchPanel.OnSearchFieldChange()"><select id=MSearchType onFocus="searchPanel.OnSearchTypeFocus(true)" onBlur="searchPanel.OnSearchTypeFocus(false)" onChange="searchPanel.OnSearchTypeChange()"><option id=MSearchEverything selected value="General">Everything</option><option value="Classes">Classes</option><option value="Files">Files</option><option value="Functions">Functions</option><option value="Hooks">Hooks</option><option value="Properties">Properties</option></select></div><script language=JavaScript><!--
-HideAllBut([5, 4, 1], 6);// --></script></div><!--Menu-->
-
-
-<div id=MSearchResultsWindow><iframe src="" frameborder=0 name=MSearchResults id=MSearchResults></iframe><a href="javascript:searchPanel.CloseResultsWindow()" id=MSearchResultsWindowClose>Close</a></div>
-
-
-<script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/javascript/main.js b/wqflask/wqflask/static/packages/jqplot/docs/javascript/main.js
deleted file mode 100644
index efcdca96..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/javascript/main.js
+++ /dev/null
@@ -1,836 +0,0 @@
-// 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 <NaturalDocs::Builder::Base->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 <keyTimeout> 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 <lastSearchValue> 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 <deactivateTimeout> 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 <inactivateTimeout>, which is set by <Activate()>. 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 <Search()>.
- */
- 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, "_lan");
- 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/wqflask/wqflask/static/packages/jqplot/docs/javascript/searchdata.js b/wqflask/wqflask/static/packages/jqplot/docs/javascript/searchdata.js
deleted file mode 100644
index 72083b4e..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/javascript/searchdata.js
+++ /dev/null
@@ -1,182 +0,0 @@
-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/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesA.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesA.html
deleted file mode 100644
index 2f4dab57..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesA.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Axis><div class=IEntry><a href="../files/jqplot-core-js.html#Axis" target=_parent class=ISymbol>Axis</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesD.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesD.html
deleted file mode 100644
index 135eeb6a..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesD.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_DashedHorizontalLine><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine" target=_parent class=ISymbol>DashedHorizontalLine</a></div></div><div class=SRResult id=SR_DashedVerticalLine><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine" target=_parent class=ISymbol>DashedVerticalLine</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesG.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesG.html
deleted file mode 100644
index 36f121b0..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesG.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Grid><div class=IEntry><a href="../files/jqplot-core-js.html#Grid" target=_parent class=ISymbol>Grid</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesH.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesH.html
deleted file mode 100644
index c411b320..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesH.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_HorizontalLine><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine" target=_parent class=ISymbol>HorizontalLine</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesJ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesJ.html
deleted file mode 100644
index b2250098..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesJ.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jqPlot><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot" target=_parent class=ISymbol>jqPlot</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesL.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesL.html
deleted file mode 100644
index 6a93b819..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesL.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Legend><div class=IEntry><a href="../files/jqplot-core-js.html#Legend" target=_parent class=ISymbol>Legend</a></div></div><div class=SRResult id=SR_Line><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line" target=_parent class=ISymbol>Line</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesS.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesS.html
deleted file mode 100644
index 53823e7d..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesS.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Series><div class=IEntry><a href="../files/jqplot-core-js.html#Series" target=_parent class=ISymbol>Series</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesSymbols.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesSymbols.html
deleted file mode 100644
index 53396614..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesSymbols.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR__dol_perfn><div class=IEntry><a href="../files/jqplot-toImage-js.html#$.fn" target=_parent class=ISymbol>$.fn</a></div></div><div class=SRResult id=SR__dol_perjqplot><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot" target=_parent class=ISymbol>$.jqplot</a></div></div><div class=SRResult id=SR__dol_perjqplot_perAxisLabelRenderer><div class=IEntry><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>AxisLabelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perAxisTickRenderer><div class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>AxisTickRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBarRenderer><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BarRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBezierCurveRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js" target=_parent class=ISymbol>$.jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBlockRenderer><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BlockRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBubbleRenderer><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BubbleRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasAxisLabelRenderer><div class=IEntry><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasAxisTickRenderer><div class=IEntry><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasGridRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR__dol_perjqplot_perCanvasGridRenderer')" class=ISymbol>$.jqplot.<wbr>CanvasGridRenderer</a><div class=ISubIndex><a href="../files/jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" target=_parent class=IFile>jqplot.<wbr>canvasGridRenderer.js</a><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html#$.jqplot.CanvasGridRenderer" target=_parent class=IFile>plugins/<wbr>jqplot.<wbr>pyramidGridRenderer.js</a></div></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasOverlay><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasOverlay</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCategoryAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perciParser><div class=IEntry><a href="../files/plugins/jqplot-ciParser-js.html#$.jqplot.ciParser" target=_parent class=ISymbol>$.jqplot.<wbr>ciParser</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCursor><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor" target=_parent class=ISymbol>$.jqplot.<wbr>Cursor</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDateAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DateAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDivTitleRenderer><div class=IEntry><a href="../files/jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DivTitleRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDonutLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DonutLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDonutRenderer><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DonutRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDragable><div class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable" target=_parent class=ISymbol>$.jqplot.<wbr>Dragable</a></div></div><div class=SRResult id=SR__dol_perjqplot_perFunnelLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>FunnelLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perFunnelRenderer><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>FunnelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perHighlighter><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter" target=_parent class=ISymbol>$.jqplot.<wbr>Highlighter</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLinearAxisRenderer><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LinearAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLineRenderer><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LineRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLogAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LogAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMarkerRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MarkerRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMeterGaugeRenderer><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perOHLCRenderer><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>OHLCRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPieLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>PieLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPieRenderer><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>PieRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPointLabels><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels" target=_parent class=ISymbol>$.jqplot.<wbr>PointLabels</a></div></div><div class=SRResult id=SR__dol_perjqplot_pershadowRenderer><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>shadowRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_pershapeRenderer><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>shapeRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perThemeEngine><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine" target=_parent class=ISymbol>$.jqplot.<wbr>ThemeEngine</a></div></div><div class=SRResult id=SR__dol_perjqplot_perTrendline><div class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline" target=_parent class=ISymbol>$.jqplot.<wbr>Trendline</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesT.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesT.html
deleted file mode 100644
index 782f11db..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesT.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_Title><div class=IEntry><a href="../files/jqplot-core-js.html#Title" target=_parent class=ISymbol>Title</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesV.html b/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesV.html
deleted file mode 100644
index 62d2e7cb..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/ClassesV.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_VerticalLine><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#VerticalLine" target=_parent class=ISymbol>VerticalLine</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FilesJ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FilesJ.html
deleted file mode 100644
index 3c66afa0..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/FilesJ.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jqplot_perenhancedLegendRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#jqplot.enhancedLegendRenderer.js" target=_parent class=ISymbol>jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=SRResult id=SR_jqplot_perpyramidAxisRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#jqplot.pyramidAxisRenderer.js" target=_parent class=ISymbol>jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=SRResult id=SR_jqplot_perpyramidRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#jqplot.pyramidRenderer.js" target=_parent class=ISymbol>jqplot.<wbr>pyramidRenderer.js</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsC.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsC.html
deleted file mode 100644
index 40135d3a..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsC.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_copy><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.copy" target=_parent class=ISymbol>copy</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsD.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsD.html
deleted file mode 100644
index 2c2bed5d..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsD.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_destroy><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.destroy" target=_parent class=ISymbol>destroy</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_draw><div class=IEntry><a href="javascript:searchResults.Toggle('SR_draw')" class=ISymbol>draw</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.draw" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.draw" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.draw" target=_parent class=IParent>jqPlot</a></div></div></div><div class=SRResult id=SR_drawSeries><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.drawSeries" target=_parent class=ISymbol>drawSeries</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsG.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsG.html
deleted file mode 100644
index 561eabc0..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsG.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_get><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.get" target=_parent class=ISymbol>get</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_getThemeNames><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemeNames" target=_parent class=ISymbol>getThemeNames</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_getThemes><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemes" target=_parent class=ISymbol>getThemes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsI.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsI.html
deleted file mode 100644
index 45090983..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsI.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_init><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.init" target=_parent class=ISymbol>init</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsM.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsM.html
deleted file mode 100644
index 0b6446cb..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsM.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_makeGridData><div class=IEntry><a href="javascript:searchResults.Toggle('SR_makeGridData')" class=ISymbol>makeGridData</a><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.makeGridData" target=_parent class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.makeGridData" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></div></div><div class=SRResult id=SR_moveBlock><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.moveBlock" target=_parent class=ISymbol>moveBlock</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_moveSeriesToBack><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToBack" target=_parent class=ISymbol>moveSeriesToBack</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_moveSeriesToFront><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToFront" target=_parent class=ISymbol>moveSeriesToFront</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsN.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsN.html
deleted file mode 100644
index 7cc60bfe..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsN.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_newTheme><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.newTheme" target=_parent class=ISymbol>newTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsQ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsQ.html
deleted file mode 100644
index 9d06ebc0..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsQ.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_quickInit><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.quickInit" target=_parent class=ISymbol>quickInit</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsR.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsR.html
deleted file mode 100644
index fac0dbcc..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsR.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_redraw><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.redraw" target=_parent class=ISymbol>redraw</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_reInitialize><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.reInitialize" target=_parent class=ISymbol>reInitialize</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_remove><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.remove" target=_parent class=ISymbol>remove</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_rename><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.rename" target=_parent class=ISymbol>rename</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_replot><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.replot" target=_parent class=ISymbol>replot</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_resetAxesScale><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.resetAxesScale" target=_parent class=ISymbol>resetAxesScale</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_restoreOriginalSeriesOrder><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restoreOriginalSeriesOrder" target=_parent class=ISymbol>restoreOriginalSeriesOrder</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_restorePreviousSeriesOrder><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restorePreviousSeriesOrder" target=_parent class=ISymbol>restorePreviousSeriesOrder</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsS.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsS.html
deleted file mode 100644
index bab767cf..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsS.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_setGridData><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setGridData')" class=ISymbol>setGridData</a><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.setGridData" target=_parent class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.setGridData" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsZ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsZ.html
deleted file mode 100644
index 4b364e98..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/FunctionsZ.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_zoomProxy><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy" target=_parent class=ISymbol>zoomProxy</a>, <span class=IParent>$.jqplot.<wbr>Cursor.$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralA.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralA.html
deleted file mode 100644
index f62a230b..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralA.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_activeTheme><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.activeTheme" target=_parent class=ISymbol>activeTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_addLegendRowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.addLegendRowHooks" target=_parent class=ISymbol>addLegendRowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_alignTicks><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.alignTicks" target=_parent class=ISymbol>alignTicks</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_alpha><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.alpha" target=_parent class=ISymbol>alpha</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_angle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_angle')" class=ISymbol>angle</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a></div></div></div><div class=SRResult id=SR_animate><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.animate" target=_parent class=ISymbol>animate</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_animateReplot><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.animateReplot" target=_parent class=ISymbol>animateReplot</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_autoscale><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.autoscale" target=_parent class=ISymbol>autoscale</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_autoscaleBubbles><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleBubbles" target=_parent class=ISymbol>autoscaleBubbles</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_autoscaleMultiplier><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleMultiplier" target=_parent class=ISymbol>autoscaleMultiplier</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_autoscalePointsFactor><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscalePointsFactor" target=_parent class=ISymbol>autoscalePointsFactor</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_Available_spcOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Available_Options" target=_parent class=ISymbol>Available Options</a></div></div><div class=SRResult id=SR_axes><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axes" target=_parent class=ISymbol>axes</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_axesDefaults><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axesDefaults" target=_parent class=ISymbol>axesDefaults</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_Axis><div class=IEntry><a href="../files/jqplot-core-js.html#Axis" target=_parent class=ISymbol>Axis</a></div></div><div class=SRResult id=SR_axisDefaults><div class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.axisDefaults" target=_parent class=ISymbol>axisDefaults</a>, <span class=IParent>$.jqplot.<wbr>LogAxisRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralB.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralB.html
deleted file mode 100644
index 06a97030..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralB.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_background><div class=IEntry><a href="javascript:searchResults.Toggle('SR_background')" class=ISymbol>background</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.background" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Grid.background" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.background" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_bandData><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.bandData" target=_parent class=ISymbol>bandData</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_bands><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.bands" target=_parent class=ISymbol>bands</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_barDirection><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barDirection" target=_parent class=ISymbol>barDirection</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_barLabelOptions><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelOptions" target=_parent class=ISymbol>barLabelOptions</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barLabelRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelRenderer" target=_parent class=ISymbol>barLabelRenderer</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barLabels><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabels" target=_parent class=ISymbol>barLabels</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barMargin><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barMargin" target=_parent class=ISymbol>barMargin</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_barPadding><div class=IEntry><a href="javascript:searchResults.Toggle('SR_barPadding')" class=ISymbol>barPadding</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#barPadding" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barPadding" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a></div></div></div><div class=SRResult id=SR_barWidth><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barWidth" target=_parent class=ISymbol>barWidth</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_baselineColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_baselineColor')" class=ISymbol>baselineColor</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#baselineColor" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.baselineColor" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.baselineColor" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></div></div><div class=SRResult id=SR_baselineWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_baselineWidth')" class=ISymbol>baselineWidth</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#baselineWidth" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.baselineWidth" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.baselineWidth" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></div></div><div class=SRResult id=SR_bodyWidth><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.bodyWidth" target=_parent class=ISymbol>bodyWidth</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_border><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.border" target=_parent class=ISymbol>border</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_borderColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_borderColor')" class=ISymbol>borderColor</a><div class=ISubIndex><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.borderColor" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-core-js.html#Axis.borderColor" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderColor" target=_parent class=IParent>Grid</a></div></div></div><div class=SRResult id=SR_borderWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_borderWidth')" class=ISymbol>borderWidth</a><div class=ISubIndex><a href="../files/jqplot-core-js.html#Axis.borderWidth" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderWidth" target=_parent class=IParent>Grid</a></div></div></div><div class=SRResult id=SR_breakOnNull><div class=IEntry><a href="../files/jqplot-core-js.html#Series.breakOnNull" target=_parent class=ISymbol>breakOnNull</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_breakPoints><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.breakPoints" target=_parent class=ISymbol>breakPoints</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_breakTickLabel><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.breakTickLabel" target=_parent class=ISymbol>breakTickLabel</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_bringSeriesToFront><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.bringSeriesToFront" target=_parent class=ISymbol>bringSeriesToFront</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_bubbleAlpha><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleAlpha" target=_parent class=ISymbol>bubbleAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_bubbleGradients><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleGradients" target=_parent class=ISymbol>bubbleGradients</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralC.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralC.html
deleted file mode 100644
index 20bb76ec..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralC.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_candleStick><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.candleStick" target=_parent class=ISymbol>candleStick</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_Change_spcLog><div class=IEntry><a href="../files/changes-txt.html#Change_Log" target=_parent class=ISymbol>Change Log</a></div></div><div class=SRResult id=SR_Changes><div class=IEntry><a href="../files/jqplot-core-js.html#Changes" target=_parent class=ISymbol>Changes</a></div></div><div class=SRResult id=SR_clearRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.clearRect" target=_parent class=ISymbol>clearRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_clickReset><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.clickReset" target=_parent class=ISymbol>clickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_closeColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.closeColor" target=_parent class=ISymbol>closeColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_color><div class=IEntry><a href="javascript:searchResults.Toggle('SR_color')" class=ISymbol>color</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.color" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.color" target=_parent class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.color" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.color" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.color" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.color" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_constrainOutsideZoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainOutsideZoom" target=_parent class=ISymbol>constrainOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_constrainSmoothing><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.constrainSmoothing" target=_parent class=ISymbol>constrainSmoothing</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_constrainTo><div class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.constrainTo" target=_parent class=ISymbol>constrainTo</a>, <span class=IParent>$.jqplot.<wbr>Dragable</span></div></div><div class=SRResult id=SR_constrainZoomTo><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainZoomTo" target=_parent class=ISymbol>constrainZoomTo</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_copy><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.copy" target=_parent class=ISymbol>copy</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_Copyright_ampLicense><div class=IEntry><a href="../files/jqplot-core-js.html#CopyrightLicense" target=_parent class=ISymbol>Copyright&amp;License</a></div></div><div class=SRResult id=SR_css><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.css" target=_parent class=ISymbol>css</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_cursorLegendFormatString><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.cursorLegendFormatString" target=_parent class=ISymbol>cursorLegendFormatString</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralD.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralD.html
deleted file mode 100644
index 3c759ce2..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralD.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_DashedHorizontalLine><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine" target=_parent class=ISymbol>DashedHorizontalLine</a></div></div><div class=SRResult id=SR_DashedVerticalLine><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine" target=_parent class=ISymbol>DashedVerticalLine</a></div></div><div class=SRResult id=SR_dashPattern><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dashPattern')" class=ISymbol>dashPattern</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine.dashPattern" target=_parent class=IParent>DashedHorizontalLine</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine.dashPattern" target=_parent class=IParent>DashedVerticalLine</a></div></div></div><div class=SRResult id=SR_data><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.data" target=_parent class=ISymbol>data</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_dataLabelCenterOn><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelCenterOn" target=_parent class=ISymbol>dataLabelCenterOn</a>, <span class=IParent>$.jqplot.<wbr>PieRenderer</span></div></div><div class=SRResult id=SR_dataLabelFormatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelFormatString')" class=ISymbol>dataLabelFormatString</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelNudge><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelNudge')" class=ISymbol>dataLabelNudge</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelNudge" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelNudge" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelPositionFactor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelPositionFactor')" class=ISymbol>dataLabelPositionFactor</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelPositionFactor" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelPositionFactor" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabels')" class=ISymbol>dataLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelThreshold><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelThreshold')" class=ISymbol>dataLabelThreshold</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataRenderer><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.dataRenderer" target=_parent class=ISymbol>dataRenderer</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_dataRendererOptions><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.dataRendererOptions" target=_parent class=ISymbol>dataRendererOptions</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_dblClickReset><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.dblClickReset" target=_parent class=ISymbol>dblClickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_defaultAxisStart><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.defaultAxisStart" target=_parent class=ISymbol>defaultAxisStart</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_depth><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.depth" target=_parent class=ISymbol>depth</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_destroy><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.destroy" target=_parent class=ISymbol>destroy</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_diameter><div class=IEntry><a href="javascript:searchResults.Toggle('SR_diameter')" class=ISymbol>diameter</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_disableIEFading><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#disableIEFading" target=_parent class=ISymbol>disableIEFading</a></div></div><div class=SRResult id=SR_disableStack><div class=IEntry><a href="../files/jqplot-core-js.html#Series.disableStack" target=_parent class=ISymbol>disableStack</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_downBodyColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.downBodyColor" target=_parent class=ISymbol>downBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_draw><div class=IEntry><a href="javascript:searchResults.Toggle('SR_draw')" class=ISymbol>draw</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.draw" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.draw" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.draw" target=_parent class=IParent>jqPlot</a></div></div></div><div class=SRResult id=SR_drawBaseline><div class=IEntry><a href="javascript:searchResults.Toggle('SR_drawBaseline')" class=ISymbol>drawBaseline</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#drawBaseline" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.drawBaseline" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.drawBaseline" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.drawBaseline" target=_parent class=IParent>$.jqplot.<wbr>LogAxisRenderer</a></div></div></div><div class=SRResult id=SR_drawBorder><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawBorder" target=_parent class=ISymbol>drawBorder</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_drawGridlines><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawGridlines" target=_parent class=ISymbol>drawGridlines</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_drawMajorGridlines><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMajorGridlines" target=_parent class=ISymbol>drawMajorGridlines</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_drawMajorTickMarks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMajorTickMarks" target=_parent class=ISymbol>drawMajorTickMarks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_drawMinorGridlines><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMinorGridlines" target=_parent class=ISymbol>drawMinorGridlines</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_drawMinorTickMarks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMinorTickMarks" target=_parent class=ISymbol>drawMinorTickMarks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_drawSeries><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.drawSeries" target=_parent class=ISymbol>drawSeries</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralE.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralE.html
deleted file mode 100644
index 5f3a9205..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralE.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_edgeTolerance><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.edgeTolerance" target=_parent class=ISymbol>edgeTolerance</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_enableFontSupport><div class=IEntry><a href="javascript:searchResults.Toggle('SR_enableFontSupport')" class=ISymbol>enableFontSupport</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.enableFontSupport" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.enableFontSupport" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_escapeHtml><div class=IEntry><a href="javascript:searchResults.Toggle('SR_escapeHtml')" class=ISymbol>escapeHtml</a><div class=ISubIndex><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.escapeHtml" target=_parent class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.escapeHtml" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.escapeHtml" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.escapeHtml" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR2_escapeHTML><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_escapeHTML')" class=ISymbol>escapeHTML</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.escapeHTML" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.escapeHTML" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.escapeHTML" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div><div class=SRResult id=SR_eventListenerHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.eventListenerHooks" target=_parent class=ISymbol>eventListenerHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralF.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralF.html
deleted file mode 100644
index c1af77c8..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralF.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_fadeTooltip><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fadeTooltip')" class=ISymbol>fadeTooltip</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.fadeTooltip" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.fadeTooltip" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_fill><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fill')" class=ISymbol>fill</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#fill" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.fill" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_fillAlpha><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAlpha" target=_parent class=ISymbol>fillAlpha</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillAndStroke><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAndStroke" target=_parent class=ISymbol>fillAndStroke</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillAxis><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAxis" target=_parent class=ISymbol>fillAxis</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillBetween><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.fillBetween" target=_parent class=ISymbol>fillBetween</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_fillColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fillColor')" class=ISymbol>fillColor</a><div class=ISubIndex><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.fillColor" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-core-js.html#Series.fillColor" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_fillDownBody><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillDownBody" target=_parent class=ISymbol>fillDownBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_fillRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillRect" target=_parent class=ISymbol>fillRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_fillStyle><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillStyle" target=_parent class=ISymbol>fillStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_fillToValue><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToValue" target=_parent class=ISymbol>fillToValue</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillToZero><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToZero" target=_parent class=ISymbol>fillToZero</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillUpBody><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillUpBody" target=_parent class=ISymbol>fillUpBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_followMouse><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.followMouse" target=_parent class=ISymbol>followMouse</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_fontFamily><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontFamily')" class=ISymbol>fontFamily</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.fontFamily" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontFamily" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_fontSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontSize')" class=ISymbol>fontSize</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.fontSize" target=_parent class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.fontSize" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontSize" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_fontStretch><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontStretch')" class=ISymbol>fontStretch</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontStretch" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontStretch" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_fontWeight><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontWeight')" class=ISymbol>fontWeight</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontWeight" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontWeight" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_forceTickAt0><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.forceTickAt0" target=_parent class=ISymbol>forceTickAt0</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_forceTickAt100><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.forceTickAt100" target=_parent class=ISymbol>forceTickAt100</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_formatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_formatString')" class=ISymbol>formatString</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatString" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatString" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.formatString" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatString" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div><div class=SRResult id=SR_formatter><div class=IEntry><a href="javascript:searchResults.Toggle('SR_formatter')" class=ISymbol>formatter</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatter" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatter" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatter" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div><div class=SRResult id=SR_Functions><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Functions')" class=ISymbol>Functions</a><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.Functions" target=_parent class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.Functions" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.Functions" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralG.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralG.html
deleted file mode 100644
index 092df150..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralG.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_get><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.get" target=_parent class=ISymbol>get</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_getThemeNames><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemeNames" target=_parent class=ISymbol>getThemeNames</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_getThemes><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.getThemes" target=_parent class=ISymbol>getThemes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_GPL_spcVersion_spc2><div class=IEntry><a href="../files/gpl-2-0-txt.html#GPL_Version_2" target=_parent class=ISymbol>GPL Version 2</a></div></div><div class=SRResult id=SR_grid><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.grid" target=_parent class=ISymbol>grid</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR2_Grid><div class=IEntry><a href="../files/jqplot-core-js.html#Grid" target=_parent class=ISymbol>Grid</a></div></div><div class=SRResult id=SR_gridLineColor><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineColor" target=_parent class=ISymbol>gridLineColor</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_gridLineWidth><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineWidth" target=_parent class=ISymbol>gridLineWidth</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_groups><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.groups" target=_parent class=ISymbol>groups</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralH.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralH.html
deleted file mode 100644
index ff6d0676..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralH.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_hideZeros><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.hideZeros" target=_parent class=ISymbol>hideZeros</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_highlightAlpha><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightAlpha" target=_parent class=ISymbol>highlightAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_highlightColor><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightColor" target=_parent class=ISymbol>highlightColor</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_highlightColors><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightColors')" class=ISymbol>highlightColors</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightColors" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_highlightMouseDown><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightMouseDown')" class=ISymbol>highlightMouseDown</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightMouseDown" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_highlightMouseOver><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightMouseOver')" class=ISymbol>highlightMouseOver</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightMouseOver" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_hlc><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.hlc" target=_parent class=ISymbol>hlc</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_Hooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.Hooks" target=_parent class=ISymbol>Hooks</a>, <span class=IParent>$.jqplot</span></div></div><div class=SRResult id=SR_HorizontalLine><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine" target=_parent class=ISymbol>HorizontalLine</a></div></div><div class=SRResult id=SR_hubRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.hubRadius" target=_parent class=ISymbol>hubRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralI.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralI.html
deleted file mode 100644
index 7873ee40..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralI.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_index><div class=IEntry><a href="../files/jqplot-core-js.html#Series.index" target=_parent class=ISymbol>index</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_init><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.init" target=_parent class=ISymbol>init</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_innerDiameter><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.innerDiameter" target=_parent class=ISymbol>innerDiameter</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_insertBreaks><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.insertBreaks" target=_parent class=ISymbol>insertBreaks</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_intersectionThreshold><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.intersectionThreshold" target=_parent class=ISymbol>intersectionThreshold</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_interval><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.interval" target=_parent class=ISymbol>interval</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_intervalColors><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalColors" target=_parent class=ISymbol>intervalColors</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervalInnerRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalInnerRadius" target=_parent class=ISymbol>intervalInnerRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervalOuterRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalOuterRadius" target=_parent class=ISymbol>intervalOuterRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervals><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervals" target=_parent class=ISymbol>intervals</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_Introduction><div class=IEntry><a href="../files/jqplot-core-js.html#Introduction" target=_parent class=ISymbol>Introduction</a></div></div><div class=SRResult id=SR_isarc><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isarc')" class=ISymbol>isarc</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.isarc" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.isarc" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></div></div><div class=SRResult id=SR_isMinorTick><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isMinorTick')" class=ISymbol>isMinorTick</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.isMinorTick" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.isMinorTick" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralJ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralJ.html
deleted file mode 100644
index fe560304..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralJ.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jqPlot><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot" target=_parent class=ISymbol>jqPlot</a></div></div><div class=SRResult id=SR_jqPlot_spcCharts><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot_Charts" target=_parent class=ISymbol>jqPlot Charts</a></div></div><div class=SRResult id=SR_jqPlot_spcCSS_spcCustomization><div class=IEntry><a href="../files/jqPlotCssStyling-txt.html#jqPlot_CSS_Customization" target=_parent class=ISymbol>jqPlot CSS Customization</a></div></div><div class=SRResult id=SR_jqPlot_spcOptions><div class=IEntry><a href="../files/jqPlotOptions-txt.html#jqPlot_Options" target=_parent class=ISymbol>jqPlot Options</a></div></div><div class=SRResult id=SR_jqPlot_spcPugin_spcHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.jqPlot_Pugin_Hooks" target=_parent class=ISymbol>jqPlot Pugin Hooks</a>, <span class=IParent>$.jqplot</span></div></div><div class=SRResult id=SR_jqPlot_spcUsage><div class=IEntry><a href="../files/usage-txt.html#jqPlot_Usage" target=_parent class=ISymbol>jqPlot Usage</a></div></div><div class=SRResult id=SR_jqplot_perenhancedLegendRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#jqplot.enhancedLegendRenderer.js" target=_parent class=ISymbol>jqplot.<wbr>enhancedLegendRenderer.js</a></div></div><div class=SRResult id=SR_jqplot_perpyramidAxisRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#jqplot.pyramidAxisRenderer.js" target=_parent class=ISymbol>jqplot.<wbr>pyramidAxisRenderer.js</a></div></div><div class=SRResult id=SR_jqplot_perpyramidRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#jqplot.pyramidRenderer.js" target=_parent class=ISymbol>jqplot.<wbr>pyramidRenderer.js</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralL.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralL.html
deleted file mode 100644
index 0fc12896..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralL.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_label><div class=IEntry><a href="javascript:searchResults.Toggle('SR_label')" class=ISymbol>label</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.label" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.label" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.label" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_labelHeightAdjust><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelHeightAdjust" target=_parent class=ISymbol>labelHeightAdjust</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_labelOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelOptions" target=_parent class=ISymbol>labelOptions</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_labelPosition><div class=IEntry><a href="javascript:searchResults.Toggle('SR_labelPosition')" class=ISymbol>labelPosition</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.labelPosition" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelPosition" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a></div></div></div><div class=SRResult id=SR_labelRenderer><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelRenderer" target=_parent class=ISymbol>labelRenderer</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_labels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_labels')" class=ISymbol>labels</a><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labels" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.labels" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_labelsFromSeries><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labelsFromSeries" target=_parent class=ISymbol>labelsFromSeries</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_legend><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.legend" target=_parent class=ISymbol>legend</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR2_Legend><div class=IEntry><a href="../files/jqplot-core-js.html#Legend" target=_parent class=ISymbol>Legend</a></div></div><div class=SRResult id=SR_Line><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line" target=_parent class=ISymbol>Line</a></div></div><div class=SRResult id=SR_lineCap><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineCap')" class=ISymbol>lineCap</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.lineCap" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineCap" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineCap" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.lineCap" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_lineJoin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineJoin')" class=ISymbol>lineJoin</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineJoin" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineJoin" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.lineJoin" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_linePattern><div class=IEntry><a href="javascript:searchResults.Toggle('SR_linePattern')" class=ISymbol>linePattern</a><div class=ISubIndex><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.linePattern" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.linePattern" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_lineWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineWidth')" class=ISymbol>lineWidth</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.lineWidth" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_lineWidthAdjust><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.lineWidthAdjust" target=_parent class=ISymbol>lineWidthAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_location><div class=IEntry><a href="javascript:searchResults.Toggle('SR_location')" class=ISymbol>location</a><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.location" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.location" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_looseZoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.looseZoom" target=_parent class=ISymbol>looseZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralM.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralM.html
deleted file mode 100644
index 53789fac..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralM.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_makeGridData><div class=IEntry><a href="javascript:searchResults.Toggle('SR_makeGridData')" class=ISymbol>makeGridData</a><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.makeGridData" target=_parent class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.makeGridData" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></div></div><div class=SRResult id=SR_marginBottom><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginBottom" target=_parent class=ISymbol>marginBottom</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginLeft><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginLeft" target=_parent class=ISymbol>marginLeft</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginRight><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginRight" target=_parent class=ISymbol>marginRight</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginTop><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginTop" target=_parent class=ISymbol>marginTop</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_mark><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mark')" class=ISymbol>mark</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.mark" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.mark" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_markerOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Series.markerOptions" target=_parent class=ISymbol>markerOptions</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_markerRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_markerRenderer')" class=ISymbol>markerRenderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.markerRenderer" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.markerRenderer" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.markerRenderer" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_markSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_markSize')" class=ISymbol>markSize</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.markSize" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.markSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_max><div class=IEntry><a href="javascript:searchResults.Toggle('SR_max')" class=ISymbol>max</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.max" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.max" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_methods><div class=IEntry><a href="javascript:searchResults.Toggle('SR_methods')" class=ISymbol>methods</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.methods" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.methods" target=_parent class=IParent>$.jqplot.<wbr>ThemeEngine</a><a href="../files/jqplot-core-js.html#jqPlot.methods" target=_parent class=IParent>jqPlot</a></div></div></div><div class=SRResult id=SR2_Methods><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.Methods" target=_parent class=ISymbol>Methods</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_min><div class=IEntry><a href="javascript:searchResults.Toggle('SR_min')" class=ISymbol>min</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.min" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.min" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_minorTicks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_minorTicks')" class=ISymbol>minorTicks</a><div class=ISubIndex><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.minorTicks" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.minorTicks" target=_parent class=IParent>$.jqplot.<wbr>LogAxisRenderer</a></div></div></div><div class=SRResult id=SR_MIT_spcLicense><div class=IEntry><a href="../files/MIT-LICENSE-txt.html#MIT_License" target=_parent class=ISymbol>MIT License</a></div></div><div class=SRResult id=SR_moveBlock><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.moveBlock" target=_parent class=ISymbol>moveBlock</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_moveSeriesToBack><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToBack" target=_parent class=ISymbol>moveSeriesToBack</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_moveSeriesToFront><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.moveSeriesToFront" target=_parent class=ISymbol>moveSeriesToFront</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralN.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralN.html
deleted file mode 100644
index d282c788..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralN.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_name><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.name" target=_parent class=ISymbol>name</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></div></div><div class=SRResult id=SR_needlePad><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needlePad" target=_parent class=ISymbol>needlePad</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_needleThickness><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needleThickness" target=_parent class=ISymbol>needleThickness</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_negativeColor><div class=IEntry><a href="../files/jqplot-core-js.html#Series.negativeColor" target=_parent class=ISymbol>negativeColor</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_neighborThreshold><div class=IEntry><a href="../files/jqplot-core-js.html#Series.neighborThreshold" target=_parent class=ISymbol>neighborThreshold</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_newTheme><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.newTheme" target=_parent class=ISymbol>newTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_noDataIndicator><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.noDataIndicator" target=_parent class=ISymbol>noDataIndicator</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_numberColumns><div class=IEntry><a href="javascript:searchResults.Toggle('SR_numberColumns')" class=ISymbol>numberColumns</a><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberColumns" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></div></div><div class=SRResult id=SR_numberRows><div class=IEntry><a href="javascript:searchResults.Toggle('SR_numberRows')" class=ISymbol>numberRows</a><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberRows" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></div></div><div class=SRResult id=SR_numberTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.numberTicks" target=_parent class=ISymbol>numberTicks</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralO.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralO.html
deleted file mode 100644
index bac068d9..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralO.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_objects><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.objects" target=_parent class=ISymbol>objects</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></div></div><div class=SRResult id=SR_offset><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.offset" target=_parent class=ISymbol>offset</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_offsetBars><div class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#offsetBars" target=_parent class=ISymbol>offsetBars</a></div></div><div class=SRResult id=SR_openColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.openColor" target=_parent class=ISymbol>openColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_Options_spcTutorial><div class=IEntry><a href="../files/optionsTutorial-txt.html#Options_Tutorial" target=_parent class=ISymbol>Options Tutorial</a></div></div><div class=SRResult id=SR_Options_spcUsage><div class=IEntry><a href="../files/jqplot-core-js.html#Options_Usage" target=_parent class=ISymbol>Options Usage</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralP.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralP.html
deleted file mode 100644
index 25e44059..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralP.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_pad><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.pad" target=_parent class=ISymbol>pad</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_padding><div class=IEntry><a href="javascript:searchResults.Toggle('SR_padding')" class=ISymbol>padding</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_padMax><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMax" target=_parent class=ISymbol>padMax</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_padMin><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMin" target=_parent class=ISymbol>padMin</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_pegNeedle><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.pegNeedle" target=_parent class=ISymbol>pegNeedle</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_placement><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.placement" target=_parent class=ISymbol>placement</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_position><div class=IEntry><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#position" target=_parent class=ISymbol>position</a></div></div><div class=SRResult id=SR_postDrawHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawHooks" target=_parent class=ISymbol>postDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postDrawSeriesHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesHooks" target=_parent class=ISymbol>postDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postDrawSeriesShadowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesShadowHooks" target=_parent class=ISymbol>postDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postInitHooks" target=_parent class=ISymbol>postInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postParseOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseOptionsHooks" target=_parent class=ISymbol>postParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postParseSeriesOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseSeriesOptionsHooks" target=_parent class=ISymbol>postParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postSeriesInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postSeriesInitHooks" target=_parent class=ISymbol>postSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_predraw><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.predraw" target=_parent class=ISymbol>predraw</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_preDrawHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawHooks" target=_parent class=ISymbol>preDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawLegendHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawLegendHooks" target=_parent class=ISymbol>preDrawLegendHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawSeriesHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesHooks" target=_parent class=ISymbol>preDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawSeriesShadowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesShadowHooks" target=_parent class=ISymbol>preDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_prefix><div class=IEntry><a href="javascript:searchResults.Toggle('SR_prefix')" class=ISymbol>prefix</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.prefix" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.prefix" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_preInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preInitHooks" target=_parent class=ISymbol>preInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preParseOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseOptionsHooks" target=_parent class=ISymbol>preParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preParseSeriesOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseSeriesOptionsHooks" target=_parent class=ISymbol>preParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preSeriesInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preSeriesInitHooks" target=_parent class=ISymbol>preSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_Properties><div class=IEntry><a href="javascript:searchResults.Toggle('SR_Properties')" class=ISymbol>Properties</a><div class=ISubIndex><span class=IParent>Global</span><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#Properties" target=_parent class=IFile>plugins/<wbr>jqplot.<wbr>enhancedLegendRenderer.js</a><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#Properties" target=_parent class=IFile>plugins/<wbr>jqplot.<wbr>pyramidAxisRenderer.js</a><a href="../files/plugins/jqplot-pyramidRenderer-js.html#Properties" target=_parent class=IFile>plugins/<wbr>jqplot.<wbr>pyramidRenderer.js</a></div><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.Properties" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.Properties" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.Properties" target=_parent class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.Properties" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>LogAxisRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>PieLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.Properties" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.Properties" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.Properties" target=_parent class=IParent>$.jqplot.<wbr>ThemeEngine</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.Properties" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.Properties" target=_parent class=IParent>Axis</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine.Properties" target=_parent class=IParent>DashedHorizontalLine</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine.Properties" target=_parent class=IParent>DashedVerticalLine</a><a href="../files/jqplot-core-js.html#Grid.Properties" target=_parent class=IParent>Grid</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.Properties" target=_parent class=IParent>HorizontalLine</a><a href="../files/jqplot-core-js.html#jqPlot.Properties" target=_parent class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.Properties" target=_parent class=IParent>Legend</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.Properties" target=_parent class=IParent>Line</a><a href="../files/jqplot-core-js.html#Series.Properties" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.Properties" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_pt2px><div class=IEntry><a href="javascript:searchResults.Toggle('SR_pt2px')" class=ISymbol>pt2px</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.pt2px" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.pt2px" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralQ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralQ.html
deleted file mode 100644
index 9d06ebc0..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralQ.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_quickInit><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.quickInit" target=_parent class=ISymbol>quickInit</a>, <span class=IParent>jqPlot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralR.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralR.html
deleted file mode 100644
index 830dac93..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralR.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_redraw><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.redraw" target=_parent class=ISymbol>redraw</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_reInitialize><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.reInitialize" target=_parent class=ISymbol>reInitialize</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_remove><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.remove" target=_parent class=ISymbol>remove</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_rename><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.rename" target=_parent class=ISymbol>rename</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_renderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_renderer')" class=ISymbol>renderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.renderer" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.renderer" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.renderer" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.renderer" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.renderer" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_rendererOptions><div class=IEntry><a href="javascript:searchResults.Toggle('SR_rendererOptions')" class=ISymbol>rendererOptions</a><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.rendererOptions" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.rendererOptions" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.rendererOptions" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.rendererOptions" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.rendererOptions" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.rendererOptions" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_replot><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.replot" target=_parent class=ISymbol>replot</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_resetAxesScale><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.resetAxesScale" target=_parent class=ISymbol>resetAxesScale</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_restoreOriginalSeriesOrder><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restoreOriginalSeriesOrder" target=_parent class=ISymbol>restoreOriginalSeriesOrder</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_restorePreviousSeriesOrder><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.restorePreviousSeriesOrder" target=_parent class=ISymbol>restorePreviousSeriesOrder</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_ringColor><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringColor" target=_parent class=ISymbol>ringColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_ringMargin><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.ringMargin" target=_parent class=ISymbol>ringMargin</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_ringWidth><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringWidth" target=_parent class=ISymbol>ringWidth</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_rowSpacing><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.rowSpacing" target=_parent class=ISymbol>rowSpacing</a>, <span class=IParent>Legend</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralS.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralS.html
deleted file mode 100644
index 4cfc8650..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralS.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_scaleToHiddenSeries><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.scaleToHiddenSeries" target=_parent class=ISymbol>scaleToHiddenSeries</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_sectionMargin><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.sectionMargin" target=_parent class=ISymbol>sectionMargin</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></div></div><div class=SRResult id=SR_series><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.series" target=_parent class=ISymbol>series</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR2_Series><div class=IEntry><a href="../files/jqplot-core-js.html#Series" target=_parent class=ISymbol>Series</a></div></div><div class=SRResult id=SR_seriesColors><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesColors" target=_parent class=ISymbol>seriesColors</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_seriesDefaults><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesDefaults" target=_parent class=ISymbol>seriesDefaults</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_seriesLabelIndex><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.seriesLabelIndex" target=_parent class=ISymbol>seriesLabelIndex</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_seriesToggle><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggle" target=_parent class=ISymbol>seriesToggle</a></div></div><div class=SRResult id=SR_seriesToggleReplot><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggleReplot" target=_parent class=ISymbol>seriesToggleReplot</a></div></div><div class=SRResult id=SR_setGridData><div class=IEntry><a href="javascript:searchResults.Toggle('SR_setGridData')" class=ISymbol>setGridData</a><div class=ISubIndex><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js.setGridData" target=_parent class=IParent>$.jqplot.<wbr>BezierCurveRenderer.js</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.setGridData" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a></div></div></div><div class=SRResult id=SR_shadow><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadow')" class=ISymbol>shadow</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadow" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadow" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadow" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadow" target=_parent class=IParent>Grid</a></div></div></div><div class=SRResult id=SR_shadowAlpha><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowAlpha')" class=ISymbol>shadowAlpha</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAlpha" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAlpha" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowAngle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowAngle')" class=ISymbol>shadowAngle</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowAngle" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAngle" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAngle" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAngle" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAngle" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowColor><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowColor" target=_parent class=ISymbol>shadowColor</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_shadowDepth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowDepth')" class=ISymbol>shadowDepth</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowDepth" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowDepth" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowOffset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowOffset')" class=ISymbol>shadowOffset</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowOffset" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowOffset" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowRenderer" target=_parent class=ISymbol>shadowRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></div></div><div class=SRResult id=SR_shadowWidth><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowWidth" target=_parent class=ISymbol>shadowWidth</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_shapeRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shapeRenderer" target=_parent class=ISymbol>shapeRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></div></div><div class=SRResult id=SR_show><div class=IEntry><a href="javascript:searchResults.Toggle('SR_show')" class=ISymbol>show</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.show" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.show" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.show" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.show" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.show" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.show" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Legend.show" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.show" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.show" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_showBorders><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.showBorders" target=_parent class=ISymbol>showBorders</a>, <span class=IParent>$.jqplot.<wbr>MekkoRenderer</span></div></div><div class=SRResult id=SR_showCursorLegend><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showCursorLegend" target=_parent class=ISymbol>showCursorLegend</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showDataLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showDataLabels')" class=ISymbol>showDataLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_showGridline><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showGridline')" class=ISymbol>showGridline</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showGridline" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showGridline" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_showHorizontalLine><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showHorizontalLine" target=_parent class=ISymbol>showHorizontalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showLabel><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showLabel')" class=ISymbol>showLabel</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Axis.showLabel" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.showLabel" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_showLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showLabels')" class=ISymbol>showLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.showLabels" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.showLabels" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_showLine><div class=IEntry><a href="../files/jqplot-core-js.html#Series.showLine" target=_parent class=ISymbol>showLine</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_showLines><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.showLines" target=_parent class=ISymbol>showLines</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_showMark><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showMark')" class=ISymbol>showMark</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showMark" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showMark" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_showMarker><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showMarker')" class=ISymbol>showMarker</a><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showMarker" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-core-js.html#Series.showMarker" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_showMinorTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.showMinorTicks" target=_parent class=ISymbol>showMinorTicks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_showSwatch><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.showSwatch" target=_parent class=ISymbol>showSwatch</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_showTickLabels><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTickLabels" target=_parent class=ISymbol>showTickLabels</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_showTickMarks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.showTickMarks" target=_parent class=ISymbol>showTickMarks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_showTicks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showTicks')" class=ISymbol>showTicks</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTicks" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.showTicks" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_showTooltip><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showTooltip')" class=ISymbol>showTooltip</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.showTooltip" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltip" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showTooltip" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_showTooltipDataPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipDataPosition" target=_parent class=ISymbol>showTooltipDataPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipGridPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipGridPosition" target=_parent class=ISymbol>showTooltipGridPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipOutsideZoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipOutsideZoom" target=_parent class=ISymbol>showTooltipOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipPrecision><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.showTooltipPrecision" target=_parent class=ISymbol>showTooltipPrecision</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></div></div><div class=SRResult id=SR_showTooltipUnitPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipUnitPosition" target=_parent class=ISymbol>showTooltipUnitPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showVerticalLine><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showVerticalLine" target=_parent class=ISymbol>showVerticalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_size><div class=IEntry><a href="javascript:searchResults.Toggle('SR_size')" class=ISymbol>size</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.size" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.size" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></div></div><div class=SRResult id=SR_sizeAdjust><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.sizeAdjust" target=_parent class=ISymbol>sizeAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_sliceMargin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_sliceMargin')" class=ISymbol>sliceMargin</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.sliceMargin" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.sliceMargin" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_smooth><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.smooth" target=_parent class=ISymbol>smooth</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_sortData><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.sortData" target=_parent class=ISymbol>sortData</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_sortMergedLabels><div class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.sortMergedLabels" target=_parent class=ISymbol>sortMergedLabels</a>, <span class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</span></div></div><div class=SRResult id=SR_stackedValue><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.stackedValue" target=_parent class=ISymbol>stackedValue</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_stackSeries><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.stackSeries" target=_parent class=ISymbol>stackSeries</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_start><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.start" target=_parent class=ISymbol>start</a>, <span class=IParent>Line</span></div></div><div class=SRResult id=SR_startAngle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_startAngle')" class=ISymbol>startAngle</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.startAngle" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.startAngle" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_stop><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.stop" target=_parent class=ISymbol>stop</a>, <span class=IParent>Line</span></div></div><div class=SRResult id=SR_strokeRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeRect" target=_parent class=ISymbol>strokeRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_strokeStyle><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeStyle" target=_parent class=ISymbol>strokeStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_style><div class=IEntry><a href="javascript:searchResults.Toggle('SR_style')" class=ISymbol>style</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.style" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.style" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></div></div><div class=SRResult id=SR_suffix><div class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.suffix" target=_parent class=ISymbol>suffix</a>, <span class=IParent>$.jqplot.<wbr>AxisTickRenderer</span></div></div><div class=SRResult id=SR_synchronizeHighlight><div class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#synchronizeHighlight" target=_parent class=ISymbol>synchronizeHighlight</a></div></div><div class=SRResult id=SR_syncTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.syncTicks" target=_parent class=ISymbol>syncTicks</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralSymbols.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralSymbols.html
deleted file mode 100644
index 53396614..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralSymbols.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR__dol_perfn><div class=IEntry><a href="../files/jqplot-toImage-js.html#$.fn" target=_parent class=ISymbol>$.fn</a></div></div><div class=SRResult id=SR__dol_perjqplot><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot" target=_parent class=ISymbol>$.jqplot</a></div></div><div class=SRResult id=SR__dol_perjqplot_perAxisLabelRenderer><div class=IEntry><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>AxisLabelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perAxisTickRenderer><div class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>AxisTickRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBarRenderer><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BarRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBezierCurveRenderer_perjs><div class=IEntry><a href="../files/plugins/jqplot-BezierCurveRenderer-js.html#$.jqplot.BezierCurveRenderer.js" target=_parent class=ISymbol>$.jqplot.<wbr>BezierCurveRenderer.js</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBlockRenderer><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BlockRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perBubbleRenderer><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>BubbleRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasAxisLabelRenderer><div class=IEntry><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasAxisLabelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasAxisTickRenderer><div class=IEntry><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasGridRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR__dol_perjqplot_perCanvasGridRenderer')" class=ISymbol>$.jqplot.<wbr>CanvasGridRenderer</a><div class=ISubIndex><a href="../files/jqplot-canvasGridRenderer-js.html#$.jqplot.CanvasGridRenderer" target=_parent class=IFile>jqplot.<wbr>canvasGridRenderer.js</a><a href="../files/plugins/jqplot-pyramidGridRenderer-js.html#$.jqplot.CanvasGridRenderer" target=_parent class=IFile>plugins/<wbr>jqplot.<wbr>pyramidGridRenderer.js</a></div></div></div><div class=SRResult id=SR__dol_perjqplot_perCanvasOverlay><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay" target=_parent class=ISymbol>$.jqplot.<wbr>CanvasOverlay</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCategoryAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>CategoryAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perciParser><div class=IEntry><a href="../files/plugins/jqplot-ciParser-js.html#$.jqplot.ciParser" target=_parent class=ISymbol>$.jqplot.<wbr>ciParser</a></div></div><div class=SRResult id=SR__dol_perjqplot_perCursor><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor" target=_parent class=ISymbol>$.jqplot.<wbr>Cursor</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDateAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DateAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDivTitleRenderer><div class=IEntry><a href="../files/jqplot-divTitleRenderer-js.html#$.jqplot.DivTitleRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DivTitleRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDonutLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DonutLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDonutRenderer><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>DonutRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perDragable><div class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable" target=_parent class=ISymbol>$.jqplot.<wbr>Dragable</a></div></div><div class=SRResult id=SR__dol_perjqplot_perFunnelLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>FunnelLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perFunnelRenderer><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>FunnelRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perHighlighter><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter" target=_parent class=ISymbol>$.jqplot.<wbr>Highlighter</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLinearAxisRenderer><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LinearAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLineRenderer><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LineRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perLogAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>LogAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMarkerRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MarkerRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoAxisRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoAxisRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMekkoRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MekkoRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perMeterGaugeRenderer><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>MeterGaugeRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perOHLCRenderer><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>OHLCRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPieLegendRenderer><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>PieLegendRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPieRenderer><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>PieRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perPointLabels><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels" target=_parent class=ISymbol>$.jqplot.<wbr>PointLabels</a></div></div><div class=SRResult id=SR__dol_perjqplot_pershadowRenderer><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>shadowRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_pershapeRenderer><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer" target=_parent class=ISymbol>$.jqplot.<wbr>shapeRenderer</a></div></div><div class=SRResult id=SR__dol_perjqplot_perThemeEngine><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine" target=_parent class=ISymbol>$.jqplot.<wbr>ThemeEngine</a></div></div><div class=SRResult id=SR__dol_perjqplot_perTrendline><div class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline" target=_parent class=ISymbol>$.jqplot.<wbr>Trendline</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralT.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralT.html
deleted file mode 100644
index 20f4ead9..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralT.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_text><div class=IEntry><a href="../files/jqplot-core-js.html#Title.text" target=_parent class=ISymbol>text</a>, <span class=IParent>Title</span></div></div><div class=SRResult id=SR_textAlign><div class=IEntry><a href="../files/jqplot-core-js.html#Title.textAlign" target=_parent class=ISymbol>textAlign</a>, <span class=IParent>Title</span></div></div><div class=SRResult id=SR_textColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_textColor')" class=ISymbol>textColor</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.textColor" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.textColor" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_themes><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.themes" target=_parent class=ISymbol>themes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_thickness><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.thickness" target=_parent class=ISymbol>thickness</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_tickColor><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickColor" target=_parent class=ISymbol>tickColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_tickInset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tickInset')" class=ISymbol>tickInset</a><div class=ISubIndex><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickInset" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.tickInset" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></div></div><div class=SRResult id=SR_tickInterval><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickInterval" target=_parent class=ISymbol>tickInterval</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_tickLength><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.tickLength" target=_parent class=ISymbol>tickLength</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_tickMode><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.tickMode" target=_parent class=ISymbol>tickMode</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_tickOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickOptions" target=_parent class=ISymbol>tickOptions</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_tickPadding><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickPadding" target=_parent class=ISymbol>tickPadding</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_tickRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tickRenderer')" class=ISymbol>tickRenderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.tickRenderer" target=_parent class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickRenderer" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickRenderer" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_ticks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ticks')" class=ISymbol>ticks</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ticks" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.ticks" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_tickSpacing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tickSpacing')" class=ISymbol>tickSpacing</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickSpacing" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickSpacing" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_title><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.title" target=_parent class=ISymbol>title</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR2_Title><div class=IEntry><a href="../files/jqplot-core-js.html#Title" target=_parent class=ISymbol>Title</a></div></div><div class=SRResult id=SR_tooltipAxes><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipAxes" target=_parent class=ISymbol>tooltipAxes</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_tooltipAxisGroups><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipAxisGroups" target=_parent class=ISymbol>tooltipAxisGroups</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_tooltipFadeSpeed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipFadeSpeed')" class=ISymbol>tooltipFadeSpeed</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipFadeSpeed" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFadeSpeed" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_tooltipFormatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipFormatString')" class=ISymbol>tooltipFormatString</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipFormatString" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipFormatString" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFormatString" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_tooltipLocation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipLocation')" class=ISymbol>tooltipLocation</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipLocation" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipLocation" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipLocation" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_tooltipOffset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipOffset')" class=ISymbol>tooltipOffset</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipOffset" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipOffset" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipOffset" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_transposedData><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.transposedData" target=_parent class=ISymbol>transposedData</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_type><div class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.type" target=_parent class=ISymbol>type</a>, <span class=IParent>$.jqplot.<wbr>Trendline</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralU.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralU.html
deleted file mode 100644
index 31bcbf12..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralU.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_upBodyColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.upBodyColor" target=_parent class=ISymbol>upBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_Usage><div class=IEntry><a href="../files/jqplot-core-js.html#Usage" target=_parent class=ISymbol>Usage</a></div></div><div class=SRResult id=SR_useAxesFormatters><div class=IEntry><a href="javascript:searchResults.Toggle('SR_useAxesFormatters')" class=ISymbol>useAxesFormatters</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.useAxesFormatters" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.useAxesFormatters" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_useNegativeColors><div class=IEntry><a href="../files/jqplot-core-js.html#Series.useNegativeColors" target=_parent class=ISymbol>useNegativeColors</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_useSeriesColor><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.useSeriesColor" target=_parent class=ISymbol>useSeriesColor</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralV.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralV.html
deleted file mode 100644
index 51af427e..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralV.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_varyBarColor><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.varyBarColor" target=_parent class=ISymbol>varyBarColor</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_varyBlockColors><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.varyBlockColors" target=_parent class=ISymbol>varyBlockColors</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_varyBubbleColors><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.varyBubbleColors" target=_parent class=ISymbol>varyBubbleColors</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_Version><div class=IEntry><a href="../files/jqplot-core-js.html#Version" target=_parent class=ISymbol>Version</a></div></div><div class=SRResult id=SR_VerticalLine><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#VerticalLine" target=_parent class=ISymbol>VerticalLine</a></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralW.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralW.html
deleted file mode 100644
index ce589762..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralW.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_waterfall><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.waterfall" target=_parent class=ISymbol>waterfall</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_wickColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.wickColor" target=_parent class=ISymbol>wickColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_widthRatio><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.widthRatio" target=_parent class=ISymbol>widthRatio</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralX.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralX.html
deleted file mode 100644
index 443e98c4..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralX.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_xaxis><div class=IEntry><a href="javascript:searchResults.Toggle('SR_xaxis')" class=ISymbol>xaxis</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.xaxis" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-core-js.html#Series.xaxis" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_xmax><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.xmax" target=_parent class=ISymbol>xmax</a>, <span class=IParent>HorizontalLine</span></div></div><div class=SRResult id=SR_xmin><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.xmin" target=_parent class=ISymbol>xmin</a>, <span class=IParent>HorizontalLine</span></div></div><div class=SRResult id=SR_xoffset><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.xoffset" target=_parent class=ISymbol>xoffset</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_xpadding><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.xpadding" target=_parent class=ISymbol>xpadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralY.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralY.html
deleted file mode 100644
index 8f6ea7a6..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralY.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_y><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.y" target=_parent class=ISymbol>y</a>, <span class=IParent>HorizontalLine</span></div></div><div class=SRResult id=SR_yaxis><div class=IEntry><a href="javascript:searchResults.Toggle('SR_yaxis')" class=ISymbol>yaxis</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.yaxis" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-core-js.html#Series.yaxis" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_yoffset><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.yoffset" target=_parent class=ISymbol>yoffset</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_ypadding><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.ypadding" target=_parent class=ISymbol>ypadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_yvalues><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.yvalues" target=_parent class=ISymbol>yvalues</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralZ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralZ.html
deleted file mode 100644
index 1e8baa08..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/GeneralZ.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_zoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.zoom" target=_parent class=ISymbol>zoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_zoomProxy><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.$.jqplot.Cursor.zoomProxy" target=_parent class=ISymbol>zoomProxy</a>, <span class=IParent>$.jqplot.<wbr>Cursor.$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksA.html b/wqflask/wqflask/static/packages/jqplot/docs/search/HooksA.html
deleted file mode 100644
index 82b17cda..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksA.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_addLegendRowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.addLegendRowHooks" target=_parent class=ISymbol>addLegendRowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksE.html b/wqflask/wqflask/static/packages/jqplot/docs/search/HooksE.html
deleted file mode 100644
index fe464932..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksE.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_eventListenerHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.eventListenerHooks" target=_parent class=ISymbol>eventListenerHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksJ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/HooksJ.html
deleted file mode 100644
index f94e0036..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksJ.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_jqPlot_spcPugin_spcHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.jqPlot_Pugin_Hooks" target=_parent class=ISymbol>jqPlot Pugin Hooks</a>, <span class=IParent>$.jqplot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksP.html b/wqflask/wqflask/static/packages/jqplot/docs/search/HooksP.html
deleted file mode 100644
index eb28c716..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/HooksP.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_postDrawHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawHooks" target=_parent class=ISymbol>postDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postDrawSeriesHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesHooks" target=_parent class=ISymbol>postDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postDrawSeriesShadowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postDrawSeriesShadowHooks" target=_parent class=ISymbol>postDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postInitHooks" target=_parent class=ISymbol>postInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postParseOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseOptionsHooks" target=_parent class=ISymbol>postParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postParseSeriesOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postParseSeriesOptionsHooks" target=_parent class=ISymbol>postParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_postSeriesInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.postSeriesInitHooks" target=_parent class=ISymbol>postSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawHooks" target=_parent class=ISymbol>preDrawHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawLegendHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawLegendHooks" target=_parent class=ISymbol>preDrawLegendHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawSeriesHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesHooks" target=_parent class=ISymbol>preDrawSeriesHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preDrawSeriesShadowHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preDrawSeriesShadowHooks" target=_parent class=ISymbol>preDrawSeriesShadowHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preInitHooks" target=_parent class=ISymbol>preInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preParseOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseOptionsHooks" target=_parent class=ISymbol>preParseOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preParseSeriesOptionsHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preParseSeriesOptionsHooks" target=_parent class=ISymbol>preParseSeriesOptionsHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div><div class=SRResult id=SR_preSeriesInitHooks><div class=IEntry><a href="../files/jqplot-core-js.html#$.jqplot.$.jqplot.preSeriesInitHooks" target=_parent class=ISymbol>preSeriesInitHooks</a>, <span class=IParent>$.jqplot.$.jqplot</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/NoResults.html b/wqflask/wqflask/static/packages/jqplot/docs/search/NoResults.html
deleted file mode 100644
index d2459c05..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/NoResults.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=NoMatches>No Matches</div></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesA.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesA.html
deleted file mode 100644
index 386d9e89..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesA.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_activeTheme><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.activeTheme" target=_parent class=ISymbol>activeTheme</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_alignTicks><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.alignTicks" target=_parent class=ISymbol>alignTicks</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_alpha><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.alpha" target=_parent class=ISymbol>alpha</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_angle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_angle')" class=ISymbol>angle</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.angle" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a></div></div></div><div class=SRResult id=SR_animate><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.animate" target=_parent class=ISymbol>animate</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_animateReplot><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.animateReplot" target=_parent class=ISymbol>animateReplot</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_autoscale><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.autoscale" target=_parent class=ISymbol>autoscale</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_autoscaleBubbles><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleBubbles" target=_parent class=ISymbol>autoscaleBubbles</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_autoscaleMultiplier><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscaleMultiplier" target=_parent class=ISymbol>autoscaleMultiplier</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_autoscalePointsFactor><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.autoscalePointsFactor" target=_parent class=ISymbol>autoscalePointsFactor</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_axes><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axes" target=_parent class=ISymbol>axes</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_axesDefaults><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.axesDefaults" target=_parent class=ISymbol>axesDefaults</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_axisDefaults><div class=IEntry><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.axisDefaults" target=_parent class=ISymbol>axisDefaults</a>, <span class=IParent>$.jqplot.<wbr>LogAxisRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesB.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesB.html
deleted file mode 100644
index a6cef468..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesB.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_background><div class=IEntry><a href="javascript:searchResults.Toggle('SR_background')" class=ISymbol>background</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.background" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Grid.background" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.background" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_bandData><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.bandData" target=_parent class=ISymbol>bandData</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_barDirection><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barDirection" target=_parent class=ISymbol>barDirection</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_barLabelOptions><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelOptions" target=_parent class=ISymbol>barLabelOptions</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barLabelRenderer><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabelRenderer" target=_parent class=ISymbol>barLabelRenderer</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barLabels><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.barLabels" target=_parent class=ISymbol>barLabels</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_barMargin><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barMargin" target=_parent class=ISymbol>barMargin</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_barPadding><div class=IEntry><a href="javascript:searchResults.Toggle('SR_barPadding')" class=ISymbol>barPadding</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#barPadding" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barPadding" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a></div></div></div><div class=SRResult id=SR_barWidth><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.barWidth" target=_parent class=ISymbol>barWidth</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_baselineColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_baselineColor')" class=ISymbol>baselineColor</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#baselineColor" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.baselineColor" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.baselineColor" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></div></div><div class=SRResult id=SR_baselineWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_baselineWidth')" class=ISymbol>baselineWidth</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#baselineWidth" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.baselineWidth" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.baselineWidth" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></div></div><div class=SRResult id=SR_bodyWidth><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.bodyWidth" target=_parent class=ISymbol>bodyWidth</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_border><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.border" target=_parent class=ISymbol>border</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_borderColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_borderColor')" class=ISymbol>borderColor</a><div class=ISubIndex><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.borderColor" target=_parent class=IParent>$.jqplot.<wbr>MekkoRenderer</a><a href="../files/jqplot-core-js.html#Axis.borderColor" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderColor" target=_parent class=IParent>Grid</a></div></div></div><div class=SRResult id=SR_borderWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_borderWidth')" class=ISymbol>borderWidth</a><div class=ISubIndex><a href="../files/jqplot-core-js.html#Axis.borderWidth" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.borderWidth" target=_parent class=IParent>Grid</a></div></div></div><div class=SRResult id=SR_breakOnNull><div class=IEntry><a href="../files/jqplot-core-js.html#Series.breakOnNull" target=_parent class=ISymbol>breakOnNull</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_breakPoints><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.breakPoints" target=_parent class=ISymbol>breakPoints</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_breakTickLabel><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.breakTickLabel" target=_parent class=ISymbol>breakTickLabel</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_bringSeriesToFront><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.bringSeriesToFront" target=_parent class=ISymbol>bringSeriesToFront</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_bubbleAlpha><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleAlpha" target=_parent class=ISymbol>bubbleAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_bubbleGradients><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.bubbleGradients" target=_parent class=ISymbol>bubbleGradients</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesC.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesC.html
deleted file mode 100644
index a30bf3da..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesC.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_candleStick><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.candleStick" target=_parent class=ISymbol>candleStick</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_clearRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.clearRect" target=_parent class=ISymbol>clearRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_clickReset><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.clickReset" target=_parent class=ISymbol>clickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_closeColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.closeColor" target=_parent class=ISymbol>closeColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_color><div class=IEntry><a href="javascript:searchResults.Toggle('SR_color')" class=ISymbol>color</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.color" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.color" target=_parent class=IParent>$.jqplot.<wbr>Dragable</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.color" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.color" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.color" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.color" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_constrainOutsideZoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainOutsideZoom" target=_parent class=ISymbol>constrainOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_constrainSmoothing><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.constrainSmoothing" target=_parent class=ISymbol>constrainSmoothing</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_constrainTo><div class=IEntry><a href="../files/plugins/jqplot-dragable-js.html#$.jqplot.Dragable.constrainTo" target=_parent class=ISymbol>constrainTo</a>, <span class=IParent>$.jqplot.<wbr>Dragable</span></div></div><div class=SRResult id=SR_constrainZoomTo><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.constrainZoomTo" target=_parent class=ISymbol>constrainZoomTo</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_css><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.css" target=_parent class=ISymbol>css</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_cursorLegendFormatString><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.cursorLegendFormatString" target=_parent class=ISymbol>cursorLegendFormatString</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesD.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesD.html
deleted file mode 100644
index e0380eae..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesD.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_dashPattern><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dashPattern')" class=ISymbol>dashPattern</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedHorizontalLine.dashPattern" target=_parent class=IParent>DashedHorizontalLine</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#DashedVerticalLine.dashPattern" target=_parent class=IParent>DashedVerticalLine</a></div></div></div><div class=SRResult id=SR_data><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.data" target=_parent class=ISymbol>data</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_dataLabelCenterOn><div class=IEntry><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelCenterOn" target=_parent class=ISymbol>dataLabelCenterOn</a>, <span class=IParent>$.jqplot.<wbr>PieRenderer</span></div></div><div class=SRResult id=SR_dataLabelFormatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelFormatString')" class=ISymbol>dataLabelFormatString</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelFormatString" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelNudge><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelNudge')" class=ISymbol>dataLabelNudge</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelNudge" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelNudge" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelPositionFactor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelPositionFactor')" class=ISymbol>dataLabelPositionFactor</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelPositionFactor" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelPositionFactor" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabels')" class=ISymbol>dataLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabels" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataLabelThreshold><div class=IEntry><a href="javascript:searchResults.Toggle('SR_dataLabelThreshold')" class=ISymbol>dataLabelThreshold</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.dataLabelThreshold" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_dataRenderer><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.dataRenderer" target=_parent class=ISymbol>dataRenderer</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_dataRendererOptions><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.dataRendererOptions" target=_parent class=ISymbol>dataRendererOptions</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_dblClickReset><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.dblClickReset" target=_parent class=ISymbol>dblClickReset</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_defaultAxisStart><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.defaultAxisStart" target=_parent class=ISymbol>defaultAxisStart</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_depth><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.depth" target=_parent class=ISymbol>depth</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_diameter><div class=IEntry><a href="javascript:searchResults.Toggle('SR_diameter')" class=ISymbol>diameter</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.diameter" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_disableIEFading><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#disableIEFading" target=_parent class=ISymbol>disableIEFading</a></div></div><div class=SRResult id=SR_disableStack><div class=IEntry><a href="../files/jqplot-core-js.html#Series.disableStack" target=_parent class=ISymbol>disableStack</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_downBodyColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.downBodyColor" target=_parent class=ISymbol>downBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_drawBaseline><div class=IEntry><a href="javascript:searchResults.Toggle('SR_drawBaseline')" class=ISymbol>drawBaseline</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#drawBaseline" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.drawBaseline" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.drawBaseline" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.drawBaseline" target=_parent class=IParent>$.jqplot.<wbr>LogAxisRenderer</a></div></div></div><div class=SRResult id=SR_drawBorder><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawBorder" target=_parent class=ISymbol>drawBorder</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_drawGridlines><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.drawGridlines" target=_parent class=ISymbol>drawGridlines</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_drawMajorGridlines><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMajorGridlines" target=_parent class=ISymbol>drawMajorGridlines</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_drawMajorTickMarks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMajorTickMarks" target=_parent class=ISymbol>drawMajorTickMarks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_drawMinorGridlines><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMinorGridlines" target=_parent class=ISymbol>drawMinorGridlines</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_drawMinorTickMarks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.drawMinorTickMarks" target=_parent class=ISymbol>drawMinorTickMarks</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesE.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesE.html
deleted file mode 100644
index 5bb760ff..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesE.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_edgeTolerance><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.edgeTolerance" target=_parent class=ISymbol>edgeTolerance</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_enableFontSupport><div class=IEntry><a href="javascript:searchResults.Toggle('SR_enableFontSupport')" class=ISymbol>enableFontSupport</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.enableFontSupport" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.enableFontSupport" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_escapeHtml><div class=IEntry><a href="javascript:searchResults.Toggle('SR_escapeHtml')" class=ISymbol>escapeHtml</a><div class=ISubIndex><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.escapeHtml" target=_parent class=IParent>$.jqplot.<wbr>BlockRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.escapeHtml" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.escapeHtml" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.escapeHtml" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR2_escapeHTML><div class=IEntry><a href="javascript:searchResults.Toggle('SR2_escapeHTML')" class=ISymbol>escapeHTML</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.escapeHTML" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.escapeHTML" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.escapeHTML" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesF.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesF.html
deleted file mode 100644
index cf90670b..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesF.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_fadeTooltip><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fadeTooltip')" class=ISymbol>fadeTooltip</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.fadeTooltip" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.fadeTooltip" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_fill><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fill')" class=ISymbol>fill</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#fill" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fill" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.fill" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_fillAlpha><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAlpha" target=_parent class=ISymbol>fillAlpha</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillAndStroke><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAndStroke" target=_parent class=ISymbol>fillAndStroke</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillAxis><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillAxis" target=_parent class=ISymbol>fillAxis</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillBetween><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.fillBetween" target=_parent class=ISymbol>fillBetween</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_fillColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fillColor')" class=ISymbol>fillColor</a><div class=ISubIndex><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.fillColor" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-core-js.html#Series.fillColor" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_fillDownBody><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillDownBody" target=_parent class=ISymbol>fillDownBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_fillRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillRect" target=_parent class=ISymbol>fillRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_fillStyle><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.fillStyle" target=_parent class=ISymbol>fillStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_fillToValue><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToValue" target=_parent class=ISymbol>fillToValue</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillToZero><div class=IEntry><a href="../files/jqplot-core-js.html#Series.fillToZero" target=_parent class=ISymbol>fillToZero</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_fillUpBody><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.fillUpBody" target=_parent class=ISymbol>fillUpBody</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_followMouse><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.followMouse" target=_parent class=ISymbol>followMouse</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_fontFamily><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontFamily')" class=ISymbol>fontFamily</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontFamily" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.fontFamily" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontFamily" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_fontSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontSize')" class=ISymbol>fontSize</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#jqPlot.fontSize" target=_parent class=IParent>jqPlot</a><a href="../files/jqplot-core-js.html#Legend.fontSize" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.fontSize" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_fontStretch><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontStretch')" class=ISymbol>fontStretch</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontStretch" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontStretch" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_fontWeight><div class=IEntry><a href="javascript:searchResults.Toggle('SR_fontWeight')" class=ISymbol>fontWeight</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.fontWeight" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.fontWeight" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_forceTickAt0><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.forceTickAt0" target=_parent class=ISymbol>forceTickAt0</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_forceTickAt100><div class=IEntry><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.forceTickAt100" target=_parent class=ISymbol>forceTickAt100</a>, <span class=IParent>$.jqplot.<wbr>LinearAxisRenderer</span></div></div><div class=SRResult id=SR_formatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_formatString')" class=ISymbol>formatString</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatString" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatString" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.formatString" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatString" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div><div class=SRResult id=SR_formatter><div class=IEntry><a href="javascript:searchResults.Toggle('SR_formatter')" class=ISymbol>formatter</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.formatter" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.formatter" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.formatter" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesG.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesG.html
deleted file mode 100644
index 3a7573d1..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesG.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_grid><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.grid" target=_parent class=ISymbol>grid</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_gridLineColor><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineColor" target=_parent class=ISymbol>gridLineColor</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_gridLineWidth><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.gridLineWidth" target=_parent class=ISymbol>gridLineWidth</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_groups><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.groups" target=_parent class=ISymbol>groups</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesH.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesH.html
deleted file mode 100644
index ca8f802e..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesH.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_hideZeros><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.hideZeros" target=_parent class=ISymbol>hideZeros</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_highlightAlpha><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightAlpha" target=_parent class=ISymbol>highlightAlpha</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div><div class=SRResult id=SR_highlightColor><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightColor" target=_parent class=ISymbol>highlightColor</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_highlightColors><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightColors')" class=ISymbol>highlightColors</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightColors" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightColors" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_highlightMouseDown><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightMouseDown')" class=ISymbol>highlightMouseDown</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightMouseDown" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseDown" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_highlightMouseOver><div class=IEntry><a href="javascript:searchResults.Toggle('SR_highlightMouseOver')" class=ISymbol>highlightMouseOver</a><div class=ISubIndex><a href="../files/plugins/jqplot-pyramidRenderer-js.html#highlightMouseOver" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.highlightMouseOver" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_hlc><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.hlc" target=_parent class=ISymbol>hlc</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_hubRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.hubRadius" target=_parent class=ISymbol>hubRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesI.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesI.html
deleted file mode 100644
index 289adc8d..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesI.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_index><div class=IEntry><a href="../files/jqplot-core-js.html#Series.index" target=_parent class=ISymbol>index</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_innerDiameter><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.innerDiameter" target=_parent class=ISymbol>innerDiameter</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_insertBreaks><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.insertBreaks" target=_parent class=ISymbol>insertBreaks</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_intersectionThreshold><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.intersectionThreshold" target=_parent class=ISymbol>intersectionThreshold</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_interval><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.interval" target=_parent class=ISymbol>interval</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_intervalColors><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalColors" target=_parent class=ISymbol>intervalColors</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervalInnerRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalInnerRadius" target=_parent class=ISymbol>intervalInnerRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervalOuterRadius><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervalOuterRadius" target=_parent class=ISymbol>intervalOuterRadius</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_intervals><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.intervals" target=_parent class=ISymbol>intervals</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_isarc><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isarc')" class=ISymbol>isarc</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.isarc" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.isarc" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a></div></div></div><div class=SRResult id=SR_isMinorTick><div class=IEntry><a href="javascript:searchResults.Toggle('SR_isMinorTick')" class=ISymbol>isMinorTick</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.isMinorTick" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.isMinorTick" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesL.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesL.html
deleted file mode 100644
index 2465230d..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesL.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_label><div class=IEntry><a href="javascript:searchResults.Toggle('SR_label')" class=ISymbol>label</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.label" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.label" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.label" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.label" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_labelHeightAdjust><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelHeightAdjust" target=_parent class=ISymbol>labelHeightAdjust</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_labelOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelOptions" target=_parent class=ISymbol>labelOptions</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_labelPosition><div class=IEntry><a href="javascript:searchResults.Toggle('SR_labelPosition')" class=ISymbol>labelPosition</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.labelPosition" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.labelPosition" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a></div></div></div><div class=SRResult id=SR_labelRenderer><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.labelRenderer" target=_parent class=ISymbol>labelRenderer</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_labels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_labels')" class=ISymbol>labels</a><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labels" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.labels" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_labelsFromSeries><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.labelsFromSeries" target=_parent class=ISymbol>labelsFromSeries</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_legend><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.legend" target=_parent class=ISymbol>legend</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_lineCap><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineCap')" class=ISymbol>lineCap</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.lineCap" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineCap" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineCap" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.lineCap" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_lineJoin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineJoin')" class=ISymbol>lineJoin</a><div class=ISubIndex><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineJoin" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.lineJoin" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.lineJoin" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_linePattern><div class=IEntry><a href="javascript:searchResults.Toggle('SR_linePattern')" class=ISymbol>linePattern</a><div class=ISubIndex><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.linePattern" target=_parent class=IParent>$.jqplot.<wbr>shapeRenderer</a><a href="../files/jqplot-core-js.html#Series.linePattern" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_lineWidth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_lineWidth')" class=ISymbol>lineWidth</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>OHLCRenderer</a><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>shadowRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.lineWidth" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.lineWidth" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_lineWidthAdjust><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.lineWidthAdjust" target=_parent class=ISymbol>lineWidthAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_location><div class=IEntry><a href="javascript:searchResults.Toggle('SR_location')" class=ISymbol>location</a><div class=ISubIndex><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.location" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/jqplot-core-js.html#Legend.location" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_looseZoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.looseZoom" target=_parent class=ISymbol>looseZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesM.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesM.html
deleted file mode 100644
index 80a53cbf..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesM.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_marginBottom><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginBottom" target=_parent class=ISymbol>marginBottom</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginLeft><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginLeft" target=_parent class=ISymbol>marginLeft</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginRight><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginRight" target=_parent class=ISymbol>marginRight</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_marginTop><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.marginTop" target=_parent class=ISymbol>marginTop</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_mark><div class=IEntry><a href="javascript:searchResults.Toggle('SR_mark')" class=ISymbol>mark</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.mark" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.mark" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_markerOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Series.markerOptions" target=_parent class=ISymbol>markerOptions</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_markerRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_markerRenderer')" class=ISymbol>markerRenderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.markerRenderer" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.markerRenderer" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Series.markerRenderer" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_markSize><div class=IEntry><a href="javascript:searchResults.Toggle('SR_markSize')" class=ISymbol>markSize</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.markSize" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.markSize" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_max><div class=IEntry><a href="javascript:searchResults.Toggle('SR_max')" class=ISymbol>max</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.max" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.max" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_min><div class=IEntry><a href="javascript:searchResults.Toggle('SR_min')" class=ISymbol>min</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.min" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.min" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_minorTicks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_minorTicks')" class=ISymbol>minorTicks</a><div class=ISubIndex><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.minorTicks" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a><a href="../files/plugins/jqplot-logAxisRenderer-js.html#$.jqplot.LogAxisRenderer.minorTicks" target=_parent class=IParent>$.jqplot.<wbr>LogAxisRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesN.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesN.html
deleted file mode 100644
index c6018830..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesN.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_name><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.name" target=_parent class=ISymbol>name</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></div></div><div class=SRResult id=SR_needlePad><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needlePad" target=_parent class=ISymbol>needlePad</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_needleThickness><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.needleThickness" target=_parent class=ISymbol>needleThickness</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_negativeColor><div class=IEntry><a href="../files/jqplot-core-js.html#Series.negativeColor" target=_parent class=ISymbol>negativeColor</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_neighborThreshold><div class=IEntry><a href="../files/jqplot-core-js.html#Series.neighborThreshold" target=_parent class=ISymbol>neighborThreshold</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_noDataIndicator><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.noDataIndicator" target=_parent class=ISymbol>noDataIndicator</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_numberColumns><div class=IEntry><a href="javascript:searchResults.Toggle('SR_numberColumns')" class=ISymbol>numberColumns</a><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberColumns" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberColumns" target=_parent class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></div></div><div class=SRResult id=SR_numberRows><div class=IEntry><a href="javascript:searchResults.Toggle('SR_numberRows')" class=ISymbol>numberRows</a><div class=ISubIndex><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#numberRows" target=_parent class=IParent>Global</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>DonutLegendRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>FunnelLegendRenderer</a><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>MekkoLegendRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieLegendRenderer.numberRows" target=_parent class=IParent>$.jqplot.<wbr>PieLegendRenderer</a></div></div></div><div class=SRResult id=SR_numberTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.numberTicks" target=_parent class=ISymbol>numberTicks</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesO.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesO.html
deleted file mode 100644
index e3e5f594..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesO.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_objects><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.objects" target=_parent class=ISymbol>objects</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></div></div><div class=SRResult id=SR_offset><div class=IEntry><a href="../files/jqplot-shadowRenderer-js.html#$.jqplot.shadowRenderer.offset" target=_parent class=ISymbol>offset</a>, <span class=IParent>$.jqplot.<wbr>shadowRenderer</span></div></div><div class=SRResult id=SR_offsetBars><div class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#offsetBars" target=_parent class=ISymbol>offsetBars</a></div></div><div class=SRResult id=SR_openColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.openColor" target=_parent class=ISymbol>openColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesP.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesP.html
deleted file mode 100644
index f1a4b167..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesP.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_pad><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.pad" target=_parent class=ISymbol>pad</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_padding><div class=IEntry><a href="javascript:searchResults.Toggle('SR_padding')" class=ISymbol>padding</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.padding" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_padMax><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMax" target=_parent class=ISymbol>padMax</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_padMin><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.padMin" target=_parent class=ISymbol>padMin</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_pegNeedle><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.pegNeedle" target=_parent class=ISymbol>pegNeedle</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_placement><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.placement" target=_parent class=ISymbol>placement</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_position><div class=IEntry><a href="../files/plugins/jqplot-pyramidAxisRenderer-js.html#position" target=_parent class=ISymbol>position</a></div></div><div class=SRResult id=SR_predraw><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.predraw" target=_parent class=ISymbol>predraw</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_prefix><div class=IEntry><a href="javascript:searchResults.Toggle('SR_prefix')" class=ISymbol>prefix</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.prefix" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.prefix" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_pt2px><div class=IEntry><a href="javascript:searchResults.Toggle('SR_pt2px')" class=ISymbol>pt2px</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.pt2px" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.pt2px" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesR.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesR.html
deleted file mode 100644
index a462e099..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesR.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_renderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_renderer')" class=ISymbol>renderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.renderer" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.renderer" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.renderer" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.renderer" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.renderer" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_rendererOptions><div class=IEntry><a href="javascript:searchResults.Toggle('SR_rendererOptions')" class=ISymbol>rendererOptions</a><div class=ISubIndex><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.rendererOptions" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.rendererOptions" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Grid.rendererOptions" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Legend.rendererOptions" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.rendererOptions" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.rendererOptions" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_ringColor><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringColor" target=_parent class=ISymbol>ringColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_ringMargin><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.ringMargin" target=_parent class=ISymbol>ringMargin</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_ringWidth><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ringWidth" target=_parent class=ISymbol>ringWidth</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_rowSpacing><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.rowSpacing" target=_parent class=ISymbol>rowSpacing</a>, <span class=IParent>Legend</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesS.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesS.html
deleted file mode 100644
index 712da7fb..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesS.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_scaleToHiddenSeries><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.scaleToHiddenSeries" target=_parent class=ISymbol>scaleToHiddenSeries</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_sectionMargin><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.sectionMargin" target=_parent class=ISymbol>sectionMargin</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></div></div><div class=SRResult id=SR_series><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.series" target=_parent class=ISymbol>series</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_seriesColors><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesColors" target=_parent class=ISymbol>seriesColors</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_seriesDefaults><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.seriesDefaults" target=_parent class=ISymbol>seriesDefaults</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_seriesLabelIndex><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.seriesLabelIndex" target=_parent class=ISymbol>seriesLabelIndex</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_seriesToggle><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggle" target=_parent class=ISymbol>seriesToggle</a></div></div><div class=SRResult id=SR_seriesToggleReplot><div class=IEntry><a href="../files/plugins/jqplot-enhancedLegendRenderer-js.html#seriesToggleReplot" target=_parent class=ISymbol>seriesToggleReplot</a></div></div><div class=SRResult id=SR_shadow><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadow')" class=ISymbol>shadow</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadow" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadow" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadow" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadow" target=_parent class=IParent>Grid</a></div></div></div><div class=SRResult id=SR_shadowAlpha><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowAlpha')" class=ISymbol>shadowAlpha</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAlpha" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAlpha" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAlpha" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowAngle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowAngle')" class=ISymbol>shadowAngle</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowAngle" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowAngle" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowAngle" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowAngle" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowAngle" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowColor><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowColor" target=_parent class=ISymbol>shadowColor</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_shadowDepth><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowDepth')" class=ISymbol>shadowDepth</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowDepth" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowDepth" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowDepth" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowOffset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_shadowOffset')" class=ISymbol>shadowOffset</a><div class=ISubIndex><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>BarRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.shadowOffset" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Grid.shadowOffset" target=_parent class=IParent>Grid</a><a href="../files/jqplot-core-js.html#Series.shadowOffset" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_shadowRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shadowRenderer" target=_parent class=ISymbol>shadowRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></div></div><div class=SRResult id=SR_shadowWidth><div class=IEntry><a href="../files/jqplot-core-js.html#Grid.shadowWidth" target=_parent class=ISymbol>shadowWidth</a>, <span class=IParent>Grid</span></div></div><div class=SRResult id=SR_shapeRenderer><div class=IEntry><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.shapeRenderer" target=_parent class=ISymbol>shapeRenderer</a>, <span class=IParent>$.jqplot.<wbr>MarkerRenderer</span></div></div><div class=SRResult id=SR_show><div class=IEntry><a href="javascript:searchResults.Toggle('SR_show')" class=ISymbol>show</a><div class=ISubIndex><a href="../files/jqplot-axisLabelRenderer-js.html#$.jqplot.AxisLabelRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>AxisLabelRenderer</a><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.show" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.show" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.show" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>LineRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.show" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.show" target=_parent class=IParent>$.jqplot.<wbr>PointLabels</a><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.show" target=_parent class=IParent>$.jqplot.<wbr>Trendline</a><a href="../files/jqplot-core-js.html#Axis.show" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Legend.show" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Series.show" target=_parent class=IParent>Series</a><a href="../files/jqplot-core-js.html#Title.show" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_showBorders><div class=IEntry><a href="../files/plugins/jqplot-mekkoRenderer-js.html#$.jqplot.MekkoRenderer.showBorders" target=_parent class=ISymbol>showBorders</a>, <span class=IParent>$.jqplot.<wbr>MekkoRenderer</span></div></div><div class=SRResult id=SR_showCursorLegend><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showCursorLegend" target=_parent class=ISymbol>showCursorLegend</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showDataLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showDataLabels')" class=ISymbol>showDataLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>FunnelRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.showDataLabels" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_showGridline><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showGridline')" class=ISymbol>showGridline</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showGridline" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showGridline" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_showHorizontalLine><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showHorizontalLine" target=_parent class=ISymbol>showHorizontalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showLabel><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showLabel')" class=ISymbol>showLabel</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showLabel" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Axis.showLabel" target=_parent class=IParent>Axis</a><a href="../files/jqplot-core-js.html#Series.showLabel" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_showLabels><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showLabels')" class=ISymbol>showLabels</a><div class=ISubIndex><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.showLabels" target=_parent class=IParent>$.jqplot.<wbr>BubbleRenderer</a><a href="../files/jqplot-core-js.html#Legend.showLabels" target=_parent class=IParent>Legend</a></div></div></div><div class=SRResult id=SR_showLine><div class=IEntry><a href="../files/jqplot-core-js.html#Series.showLine" target=_parent class=ISymbol>showLine</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_showLines><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.showLines" target=_parent class=ISymbol>showLines</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_showMark><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showMark')" class=ISymbol>showMark</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.showMark" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.showMark" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a></div></div></div><div class=SRResult id=SR_showMarker><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showMarker')" class=ISymbol>showMarker</a><div class=ISubIndex><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showMarker" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a><a href="../files/jqplot-core-js.html#Series.showMarker" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_showMinorTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.showMinorTicks" target=_parent class=ISymbol>showMinorTicks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_showSwatch><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.showSwatch" target=_parent class=ISymbol>showSwatch</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_showTickLabels><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTickLabels" target=_parent class=ISymbol>showTickLabels</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_showTickMarks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.showTickMarks" target=_parent class=ISymbol>showTickMarks</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_showTicks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showTicks')" class=ISymbol>showTicks</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.showTicks" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.showTicks" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_showTooltip><div class=IEntry><a href="javascript:searchResults.Toggle('SR_showTooltip')" class=ISymbol>showTooltip</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.showTooltip" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltip" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.showTooltip" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_showTooltipDataPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipDataPosition" target=_parent class=ISymbol>showTooltipDataPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipGridPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipGridPosition" target=_parent class=ISymbol>showTooltipGridPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipOutsideZoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipOutsideZoom" target=_parent class=ISymbol>showTooltipOutsideZoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showTooltipPrecision><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.showTooltipPrecision" target=_parent class=ISymbol>showTooltipPrecision</a>, <span class=IParent>$.jqplot.<wbr>CanvasOverlay</span></div></div><div class=SRResult id=SR_showTooltipUnitPosition><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showTooltipUnitPosition" target=_parent class=ISymbol>showTooltipUnitPosition</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_showVerticalLine><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.showVerticalLine" target=_parent class=ISymbol>showVerticalLine</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_size><div class=IEntry><a href="javascript:searchResults.Toggle('SR_size')" class=ISymbol>size</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.size" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.size" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></div></div><div class=SRResult id=SR_sizeAdjust><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.sizeAdjust" target=_parent class=ISymbol>sizeAdjust</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_sliceMargin><div class=IEntry><a href="javascript:searchResults.Toggle('SR_sliceMargin')" class=ISymbol>sliceMargin</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.sliceMargin" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.sliceMargin" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_smooth><div class=IEntry><a href="../files/jqplot-lineRenderer-js.html#$.jqplot.LineRenderer.smooth" target=_parent class=ISymbol>smooth</a>, <span class=IParent>$.jqplot.<wbr>LineRenderer</span></div></div><div class=SRResult id=SR_sortData><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.sortData" target=_parent class=ISymbol>sortData</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_sortMergedLabels><div class=IEntry><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.sortMergedLabels" target=_parent class=ISymbol>sortMergedLabels</a>, <span class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</span></div></div><div class=SRResult id=SR_stackedValue><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.stackedValue" target=_parent class=ISymbol>stackedValue</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_stackSeries><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.stackSeries" target=_parent class=ISymbol>stackSeries</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_start><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.start" target=_parent class=ISymbol>start</a>, <span class=IParent>Line</span></div></div><div class=SRResult id=SR_startAngle><div class=IEntry><a href="javascript:searchResults.Toggle('SR_startAngle')" class=ISymbol>startAngle</a><div class=ISubIndex><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.startAngle" target=_parent class=IParent>$.jqplot.<wbr>DonutRenderer</a><a href="../files/plugins/jqplot-pieRenderer-js.html#$.jqplot.PieRenderer.startAngle" target=_parent class=IParent>$.jqplot.<wbr>PieRenderer</a></div></div></div><div class=SRResult id=SR_stop><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#Line.stop" target=_parent class=ISymbol>stop</a>, <span class=IParent>Line</span></div></div><div class=SRResult id=SR_strokeRect><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeRect" target=_parent class=ISymbol>strokeRect</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_strokeStyle><div class=IEntry><a href="../files/jqplot-shapeRenderer-js.html#$.jqplot.shapeRenderer.strokeStyle" target=_parent class=ISymbol>strokeStyle</a>, <span class=IParent>$.jqplot.<wbr>shapeRenderer</span></div></div><div class=SRResult id=SR_style><div class=IEntry><a href="javascript:searchResults.Toggle('SR_style')" class=ISymbol>style</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.style" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/jqplot-markerRenderer-js.html#$.jqplot.MarkerRenderer.style" target=_parent class=IParent>$.jqplot.<wbr>MarkerRenderer</a></div></div></div><div class=SRResult id=SR_suffix><div class=IEntry><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.suffix" target=_parent class=ISymbol>suffix</a>, <span class=IParent>$.jqplot.<wbr>AxisTickRenderer</span></div></div><div class=SRResult id=SR_synchronizeHighlight><div class=IEntry><a href="../files/plugins/jqplot-pyramidRenderer-js.html#synchronizeHighlight" target=_parent class=ISymbol>synchronizeHighlight</a></div></div><div class=SRResult id=SR_syncTicks><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.syncTicks" target=_parent class=ISymbol>syncTicks</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesT.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesT.html
deleted file mode 100644
index bc107de4..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesT.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_text><div class=IEntry><a href="../files/jqplot-core-js.html#Title.text" target=_parent class=ISymbol>text</a>, <span class=IParent>Title</span></div></div><div class=SRResult id=SR_textAlign><div class=IEntry><a href="../files/jqplot-core-js.html#Title.textAlign" target=_parent class=ISymbol>textAlign</a>, <span class=IParent>Title</span></div></div><div class=SRResult id=SR_textColor><div class=IEntry><a href="javascript:searchResults.Toggle('SR_textColor')" class=ISymbol>textColor</a><div class=ISubIndex><a href="../files/jqplot-axisTickRenderer-js.html#$.jqplot.AxisTickRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>AxisTickRenderer</a><a href="../files/plugins/jqplot-canvasAxisLabelRenderer-js.html#$.jqplot.CanvasAxisLabelRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisLabelRenderer</a><a href="../files/plugins/jqplot-canvasAxisTickRenderer-js.html#$.jqplot.CanvasAxisTickRenderer.textColor" target=_parent class=IParent>$.jqplot.<wbr>CanvasAxisTickRenderer</a><a href="../files/jqplot-core-js.html#Legend.textColor" target=_parent class=IParent>Legend</a><a href="../files/jqplot-core-js.html#Title.textColor" target=_parent class=IParent>Title</a></div></div></div><div class=SRResult id=SR_themes><div class=IEntry><a href="../files/jqplot-themeEngine-js.html#$.jqplot.ThemeEngine.themes" target=_parent class=ISymbol>themes</a>, <span class=IParent>$.jqplot.<wbr>ThemeEngine</span></div></div><div class=SRResult id=SR_thickness><div class=IEntry><a href="../files/plugins/jqplot-donutRenderer-js.html#$.jqplot.DonutRenderer.thickness" target=_parent class=ISymbol>thickness</a>, <span class=IParent>$.jqplot.<wbr>DonutRenderer</span></div></div><div class=SRResult id=SR_tickColor><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickColor" target=_parent class=ISymbol>tickColor</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_tickInset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tickInset')" class=ISymbol>tickInset</a><div class=ISubIndex><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickInset" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-linearAxisRenderer-js.html#$.jqplot.LinearAxisRenderer.tickInset" target=_parent class=IParent>$.jqplot.<wbr>LinearAxisRenderer</a></div></div></div><div class=SRResult id=SR_tickInterval><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickInterval" target=_parent class=ISymbol>tickInterval</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_tickLength><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.tickLength" target=_parent class=ISymbol>tickLength</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_tickMode><div class=IEntry><a href="../files/plugins/jqplot-mekkoAxisRenderer-js.html#$.jqplot.MekkoAxisRenderer.tickMode" target=_parent class=ISymbol>tickMode</a>, <span class=IParent>$.jqplot.<wbr>MekkoAxisRenderer</span></div></div><div class=SRResult id=SR_tickOptions><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.tickOptions" target=_parent class=ISymbol>tickOptions</a>, <span class=IParent>Axis</span></div></div><div class=SRResult id=SR_tickPadding><div class=IEntry><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickPadding" target=_parent class=ISymbol>tickPadding</a>, <span class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</span></div></div><div class=SRResult id=SR_tickRenderer><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tickRenderer')" class=ISymbol>tickRenderer</a><div class=ISubIndex><a href="../files/plugins/jqplot-categoryAxisRenderer-js.html#$.jqplot.CategoryAxisRenderer.tickRenderer" target=_parent class=IParent>$.jqplot.<wbr>CategoryAxisRenderer</a><a href="../files/plugins/jqplot-dateAxisRenderer-js.html#$.jqplot.DateAxisRenderer.tickRenderer" target=_parent class=IParent>$.jqplot.<wbr>DateAxisRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickRenderer" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_ticks><div class=IEntry><a href="javascript:searchResults.Toggle('SR_ticks')" class=ISymbol>ticks</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.ticks" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.ticks" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_tickSpacing><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tickSpacing')" class=ISymbol>tickSpacing</a><div class=ISubIndex><a href="../files/plugins/jqplot-meterGaugeRenderer-js.html#$.jqplot.MeterGaugeRenderer.tickSpacing" target=_parent class=IParent>$.jqplot.<wbr>MeterGaugeRenderer</a><a href="../files/jqplot-core-js.html#Axis.tickSpacing" target=_parent class=IParent>Axis</a></div></div></div><div class=SRResult id=SR_title><div class=IEntry><a href="../files/jqplot-core-js.html#jqPlot.title" target=_parent class=ISymbol>title</a>, <span class=IParent>jqPlot</span></div></div><div class=SRResult id=SR_tooltipAxes><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipAxes" target=_parent class=ISymbol>tooltipAxes</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div><div class=SRResult id=SR_tooltipAxisGroups><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipAxisGroups" target=_parent class=ISymbol>tooltipAxisGroups</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div><div class=SRResult id=SR_tooltipFadeSpeed><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipFadeSpeed')" class=ISymbol>tooltipFadeSpeed</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipFadeSpeed" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFadeSpeed" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_tooltipFormatString><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipFormatString')" class=ISymbol>tooltipFormatString</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipFormatString" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipFormatString" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipFormatString" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_tooltipLocation><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipLocation')" class=ISymbol>tooltipLocation</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipLocation" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipLocation" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipLocation" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_tooltipOffset><div class=IEntry><a href="javascript:searchResults.Toggle('SR_tooltipOffset')" class=ISymbol>tooltipOffset</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.tooltipOffset" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.tooltipOffset" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.tooltipOffset" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_transposedData><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.transposedData" target=_parent class=ISymbol>transposedData</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_type><div class=IEntry><a href="../files/plugins/jqplot-trendline-js.html#$.jqplot.Trendline.type" target=_parent class=ISymbol>type</a>, <span class=IParent>$.jqplot.<wbr>Trendline</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesU.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesU.html
deleted file mode 100644
index df97c192..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesU.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_upBodyColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.upBodyColor" target=_parent class=ISymbol>upBodyColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_useAxesFormatters><div class=IEntry><a href="javascript:searchResults.Toggle('SR_useAxesFormatters')" class=ISymbol>useAxesFormatters</a><div class=ISubIndex><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.useAxesFormatters" target=_parent class=IParent>$.jqplot.<wbr>Cursor</a><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.useAxesFormatters" target=_parent class=IParent>$.jqplot.<wbr>Highlighter</a></div></div></div><div class=SRResult id=SR_useNegativeColors><div class=IEntry><a href="../files/jqplot-core-js.html#Series.useNegativeColors" target=_parent class=ISymbol>useNegativeColors</a>, <span class=IParent>Series</span></div></div><div class=SRResult id=SR_useSeriesColor><div class=IEntry><a href="../files/jqplot-core-js.html#Axis.useSeriesColor" target=_parent class=ISymbol>useSeriesColor</a>, <span class=IParent>Axis</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesV.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesV.html
deleted file mode 100644
index ebd8349e..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesV.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_varyBarColor><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.varyBarColor" target=_parent class=ISymbol>varyBarColor</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_varyBlockColors><div class=IEntry><a href="../files/plugins/jqplot-blockRenderer-js.html#$.jqplot.BlockRenderer.varyBlockColors" target=_parent class=ISymbol>varyBlockColors</a>, <span class=IParent>$.jqplot.<wbr>BlockRenderer</span></div></div><div class=SRResult id=SR_varyBubbleColors><div class=IEntry><a href="../files/plugins/jqplot-bubbleRenderer-js.html#$.jqplot.BubbleRenderer.varyBubbleColors" target=_parent class=ISymbol>varyBubbleColors</a>, <span class=IParent>$.jqplot.<wbr>BubbleRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesW.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesW.html
deleted file mode 100644
index ce589762..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesW.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_waterfall><div class=IEntry><a href="../files/plugins/jqplot-barRenderer-js.html#$.jqplot.BarRenderer.waterfall" target=_parent class=ISymbol>waterfall</a>, <span class=IParent>$.jqplot.<wbr>BarRenderer</span></div></div><div class=SRResult id=SR_wickColor><div class=IEntry><a href="../files/plugins/jqplot-ohlcRenderer-js.html#$.jqplot.OHLCRenderer.wickColor" target=_parent class=ISymbol>wickColor</a>, <span class=IParent>$.jqplot.<wbr>OHLCRenderer</span></div></div><div class=SRResult id=SR_widthRatio><div class=IEntry><a href="../files/plugins/jqplot-funnelRenderer-js.html#$.jqplot.FunnelRenderer.widthRatio" target=_parent class=ISymbol>widthRatio</a>, <span class=IParent>$.jqplot.<wbr>FunnelRenderer</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesX.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesX.html
deleted file mode 100644
index 443e98c4..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesX.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_xaxis><div class=IEntry><a href="javascript:searchResults.Toggle('SR_xaxis')" class=ISymbol>xaxis</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.xaxis" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-core-js.html#Series.xaxis" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_xmax><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.xmax" target=_parent class=ISymbol>xmax</a>, <span class=IParent>HorizontalLine</span></div></div><div class=SRResult id=SR_xmin><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.xmin" target=_parent class=ISymbol>xmin</a>, <span class=IParent>HorizontalLine</span></div></div><div class=SRResult id=SR_xoffset><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.xoffset" target=_parent class=ISymbol>xoffset</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_xpadding><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.xpadding" target=_parent class=ISymbol>xpadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesY.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesY.html
deleted file mode 100644
index 8f6ea7a6..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesY.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_y><div class=IEntry><a href="../files/plugins/jqplot-canvasOverlay-js.html#HorizontalLine.y" target=_parent class=ISymbol>y</a>, <span class=IParent>HorizontalLine</span></div></div><div class=SRResult id=SR_yaxis><div class=IEntry><a href="javascript:searchResults.Toggle('SR_yaxis')" class=ISymbol>yaxis</a><div class=ISubIndex><a href="../files/plugins/jqplot-canvasOverlay-js.html#$.jqplot.CanvasOverlay.yaxis" target=_parent class=IParent>$.jqplot.<wbr>CanvasOverlay</a><a href="../files/jqplot-core-js.html#Series.yaxis" target=_parent class=IParent>Series</a></div></div></div><div class=SRResult id=SR_yoffset><div class=IEntry><a href="../files/jqplot-core-js.html#Legend.yoffset" target=_parent class=ISymbol>yoffset</a>, <span class=IParent>Legend</span></div></div><div class=SRResult id=SR_ypadding><div class=IEntry><a href="../files/plugins/jqplot-pointLabels-js.html#$.jqplot.PointLabels.ypadding" target=_parent class=ISymbol>ypadding</a>, <span class=IParent>$.jqplot.<wbr>PointLabels</span></div></div><div class=SRResult id=SR_yvalues><div class=IEntry><a href="../files/plugins/jqplot-highlighter-js.html#$.jqplot.Highlighter.yvalues" target=_parent class=ISymbol>yvalues</a>, <span class=IParent>$.jqplot.<wbr>Highlighter</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesZ.html b/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesZ.html
deleted file mode 100644
index 9da6ccfc..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/search/PropertiesZ.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
-
-<html><head><link rel="stylesheet" type="text/css" href="../styles/main.css"><script language=JavaScript src="../javascript/main.js"></script></head><body class="PopupSearchResultsPage" onLoad="NDOnLoad()"><script language=JavaScript><!--
-if (browserType) {document.write("<div class=" + browserType + ">");if (browserVer) {document.write("<div class=" + browserVer + ">"); }}// --></script>
-
-<!-- Generated by Natural Docs, version 1.4 -->
-<!-- http://www.naturaldocs.org -->
-
-<!-- saved from url=(0026)http://www.naturaldocs.org -->
-
-
-
-
-<div id="IPageLogo"><div class="nav"><a class="nav" href="../../index.php"><span>&gt;</span>Home</a><a class="nav" href="../../tests/"><span>&gt;</span>Examples</a><a class="nav" href="../../docs/"><span>&gt;</span>Docs</a><a class="nav" href="http://bitbucket.org/cleonello/jqplot/downloads/"><span>&gt;</span>Download</a><a class="nav" href="../../info.php"><span>&gt;</span>Info</a><a class="nav" href="../../donate.php"><span>&gt;</span>Donate</a></div></div><div id=Index><div class=SRStatus id=Loading>Loading...</div><table border=0 cellspacing=0 cellpadding=0><div class=SRResult id=SR_zoom><div class=IEntry><a href="../files/plugins/jqplot-cursor-js.html#$.jqplot.Cursor.zoom" target=_parent class=ISymbol>zoom</a>, <span class=IParent>$.jqplot.<wbr>Cursor</span></div></div></table><div class=SRStatus id=Searching>Searching...</div><div class=SRStatus id=NoMatches>No Matches</div><script type="text/javascript"><!--
-document.getElementById("Loading").style.display="none";
-document.getElementById("NoMatches").style.display="none";
-var searchResults = new SearchResults("searchResults", "HTML");
-searchResults.Search();
---></script></div><script language=JavaScript><!--
-if (browserType) {if (browserVer) {document.write("</div>"); }document.write("</div>");}// --></script></body></html> \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/docs/styles/1.css b/wqflask/wqflask/static/packages/jqplot/docs/styles/1.css
deleted file mode 100644
index 17e9cbc3..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/styles/1.css
+++ /dev/null
@@ -1,767 +0,0 @@
-/*
- 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/wqflask/wqflask/static/packages/jqplot/docs/styles/2.css b/wqflask/wqflask/static/packages/jqplot/docs/styles/2.css
deleted file mode 100644
index 12117d4e..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/styles/2.css
+++ /dev/null
@@ -1,174 +0,0 @@
-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/wqflask/wqflask/static/packages/jqplot/docs/styles/main.css b/wqflask/wqflask/static/packages/jqplot/docs/styles/main.css
deleted file mode 100644
index a672a949..00000000
--- a/wqflask/wqflask/static/packages/jqplot/docs/styles/main.css
+++ /dev/null
@@ -1,2 +0,0 @@
-@import URL("1.css");
-@import URL("2.css");
diff --git a/wqflask/wqflask/static/packages/jqplot/excanvas.js b/wqflask/wqflask/static/packages/jqplot/excanvas.js
deleted file mode 100644
index 75b2f65f..00000000
--- a/wqflask/wqflask/static/packages/jqplot/excanvas.js
+++ /dev/null
@@ -1,1438 +0,0 @@
-// Memory Leaks patch from http://explorercanvas.googlecode.com/svn/trunk/
-// svn : r73
-// ------------------------------------------------------------------
-// Copyright 2006 Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-
-// Known Issues:
-//
-// * Patterns only support repeat.
-// * Radial gradient are not implemented. The VML version of these look very
-// different from the canvas one.
-// * Clipping paths are not implemented.
-// * Coordsize. The width and height attribute have higher priority than the
-// width and height style values which isn't correct.
-// * Painting mode isn't implemented.
-// * Canvas width/height should is using content-box by default. IE in
-// Quirks mode will draw the canvas using border-box. Either change your
-// doctype to HTML5
-// (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)
-// or use Box Sizing Behavior from WebFX
-// (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)
-// * Non uniform scaling does not correctly scale strokes.
-// * Optimize. There is always room for speed improvements.
-
-// Only add this code if we do not already have a canvas implementation
-if (!document.createElement('canvas').getContext) {
-
-(function() {
-
- // alias some functions to make (compiled) code shorter
- var m = Math;
- var mr = m.round;
- var ms = m.sin;
- var mc = m.cos;
- var abs = m.abs;
- var sqrt = m.sqrt;
-
- // this is used for sub pixel precision
- var Z = 10;
- var Z2 = Z / 2;
-
- var IE_VERSION = +navigator.userAgent.match(/MSIE ([\d.]+)?/)[1];
-
- /**
- * This funtion is assigned to the <canvas> elements as element.getContext().
- * @this {HTMLElement}
- * @return {CanvasRenderingContext2D_}
- */
- function getContext() {
- return this.context_ ||
- (this.context_ = new CanvasRenderingContext2D_(this));
- }
-
- var slice = Array.prototype.slice;
-
- /**
- * Binds a function to an object. The returned function will always use the
- * passed in {@code obj} as {@code this}.
- *
- * Example:
- *
- * g = bind(f, obj, a, b)
- * g(c, d) // will do f.call(obj, a, b, c, d)
- *
- * @param {Function} f The function to bind the object to
- * @param {Object} obj The object that should act as this when the function
- * is called
- * @param {*} var_args Rest arguments that will be used as the initial
- * arguments when the function is called
- * @return {Function} A new function that has bound this
- */
- function bind(f, obj, var_args) {
- var a = slice.call(arguments, 2);
- return function() {
- return f.apply(obj, a.concat(slice.call(arguments)));
- };
- }
-
- function encodeHtmlAttribute(s) {
- return String(s).replace(/&/g, '&amp;').replace(/"/g, '&quot;');
- }
-
- function addNamespace(doc, prefix, urn) {
- if (!doc.namespaces[prefix]) {
- doc.namespaces.add(prefix, urn, '#default#VML');
- }
- }
-
- function addNamespacesAndStylesheet(doc) {
- addNamespace(doc, 'g_vml_', 'urn:schemas-microsoft-com:vml');
- addNamespace(doc, 'g_o_', 'urn:schemas-microsoft-com:office:office');
-
- // Setup default CSS. Only add one style sheet per document
- if (!doc.styleSheets['ex_canvas_']) {
- var ss = doc.createStyleSheet();
- ss.owningElement.id = 'ex_canvas_';
- ss.cssText = 'canvas{display:inline-block;overflow:hidden;' +
- // default size is 300x150 in Gecko and Opera
- 'text-align:left;width:300px;height:150px}';
- }
- }
-
- // Add namespaces and stylesheet at startup.
- addNamespacesAndStylesheet(document);
-
- var G_vmlCanvasManager_ = {
- init: function(opt_doc) {
- var doc = opt_doc || document;
- // Create a dummy element so that IE will allow canvas elements to be
- // recognized.
- doc.createElement('canvas');
- doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));
- },
-
- init_: function(doc) {
- // find all canvas elements
- var els = doc.getElementsByTagName('canvas');
- for (var i = 0; i < els.length; i++) {
- this.initElement(els[i]);
- }
- },
-
- /**
- * Public initializes a canvas element so that it can be used as canvas
- * element from now on. This is called automatically before the page is
- * loaded but if you are creating elements using createElement you need to
- * make sure this is called on the element.
- * @param {HTMLElement} el The canvas element to initialize.
- * @return {HTMLElement} the element that was created.
- */
- initElement: function(el) {
- if (!el.getContext) {
- el.getContext = getContext;
-
- // Add namespaces and stylesheet to document of the element.
- addNamespacesAndStylesheet(el.ownerDocument);
-
- // Remove fallback content. There is no way to hide text nodes so we
- // just remove all childNodes. We could hide all elements and remove
- // text nodes but who really cares about the fallback content.
- el.innerHTML = '';
-
- // do not use inline function because that will leak memory
- el.attachEvent('onpropertychange', onPropertyChange);
- el.attachEvent('onresize', onResize);
-
- var attrs = el.attributes;
- if (attrs.width && attrs.width.specified) {
- // TODO: use runtimeStyle and coordsize
- // el.getContext().setWidth_(attrs.width.nodeValue);
- el.style.width = attrs.width.nodeValue + 'px';
- } else {
- el.width = el.clientWidth;
- }
- if (attrs.height && attrs.height.specified) {
- // TODO: use runtimeStyle and coordsize
- // el.getContext().setHeight_(attrs.height.nodeValue);
- el.style.height = attrs.height.nodeValue + 'px';
- } else {
- el.height = el.clientHeight;
- }
- //el.getContext().setCoordsize_()
- }
- return el;
- },
-
- // Memory Leaks patch : see http://code.google.com/p/explorercanvas/issues/detail?id=82
- uninitElement: function(el){
- if (el.getContext) {
- var ctx = el.getContext();
- delete ctx.element_;
- delete ctx.canvas;
- el.innerHTML = "";
- //el.outerHTML = "";
- el.context_ = null;
- el.getContext = null;
- el.detachEvent("onpropertychange", onPropertyChange);
- el.detachEvent("onresize", onResize);
- }
- }
- };
-
- function onPropertyChange(e) {
- var el = e.srcElement;
-
- switch (e.propertyName) {
- case 'width':
- el.getContext().clearRect();
- el.style.width = el.attributes.width.nodeValue + 'px';
- // In IE8 this does not trigger onresize.
- el.firstChild.style.width = el.clientWidth + 'px';
- break;
- case 'height':
- el.getContext().clearRect();
- el.style.height = el.attributes.height.nodeValue + 'px';
- el.firstChild.style.height = el.clientHeight + 'px';
- break;
- }
- }
-
- function onResize(e) {
- var el = e.srcElement;
- if (el.firstChild) {
- el.firstChild.style.width = el.clientWidth + 'px';
- el.firstChild.style.height = el.clientHeight + 'px';
- }
- }
-
- G_vmlCanvasManager_.init();
-
- // precompute "00" to "FF"
- var decToHex = [];
- for (var i = 0; i < 16; i++) {
- for (var j = 0; j < 16; j++) {
- decToHex[i * 16 + j] = i.toString(16) + j.toString(16);
- }
- }
-
- function createMatrixIdentity() {
- return [
- [1, 0, 0],
- [0, 1, 0],
- [0, 0, 1]
- ];
- }
-
- function matrixMultiply(m1, m2) {
- var result = createMatrixIdentity();
-
- for (var x = 0; x < 3; x++) {
- for (var y = 0; y < 3; y++) {
- var sum = 0;
-
- for (var z = 0; z < 3; z++) {
- sum += m1[x][z] * m2[z][y];
- }
-
- result[x][y] = sum;
- }
- }
- return result;
- }
-
- function copyState(o1, o2) {
- o2.fillStyle = o1.fillStyle;
- o2.lineCap = o1.lineCap;
- o2.lineJoin = o1.lineJoin;
- o2.lineWidth = o1.lineWidth;
- o2.miterLimit = o1.miterLimit;
- o2.shadowBlur = o1.shadowBlur;
- o2.shadowColor = o1.shadowColor;
- o2.shadowOffsetX = o1.shadowOffsetX;
- o2.shadowOffsetY = o1.shadowOffsetY;
- o2.strokeStyle = o1.strokeStyle;
- o2.globalAlpha = o1.globalAlpha;
- o2.font = o1.font;
- o2.textAlign = o1.textAlign;
- o2.textBaseline = o1.textBaseline;
- o2.arcScaleX_ = o1.arcScaleX_;
- o2.arcScaleY_ = o1.arcScaleY_;
- o2.lineScale_ = o1.lineScale_;
- }
-
- var colorData = {
- aliceblue: '#F0F8FF',
- antiquewhite: '#FAEBD7',
- aquamarine: '#7FFFD4',
- azure: '#F0FFFF',
- beige: '#F5F5DC',
- bisque: '#FFE4C4',
- black: '#000000',
- blanchedalmond: '#FFEBCD',
- blueviolet: '#8A2BE2',
- brown: '#A52A2A',
- burlywood: '#DEB887',
- cadetblue: '#5F9EA0',
- chartreuse: '#7FFF00',
- chocolate: '#D2691E',
- coral: '#FF7F50',
- cornflowerblue: '#6495ED',
- cornsilk: '#FFF8DC',
- crimson: '#DC143C',
- cyan: '#00FFFF',
- darkblue: '#00008B',
- darkcyan: '#008B8B',
- darkgoldenrod: '#B8860B',
- darkgray: '#A9A9A9',
- darkgreen: '#006400',
- darkgrey: '#A9A9A9',
- darkkhaki: '#BDB76B',
- darkmagenta: '#8B008B',
- darkolivegreen: '#556B2F',
- darkorange: '#FF8C00',
- darkorchid: '#9932CC',
- darkred: '#8B0000',
- darksalmon: '#E9967A',
- darkseagreen: '#8FBC8F',
- darkslateblue: '#483D8B',
- darkslategray: '#2F4F4F',
- darkslategrey: '#2F4F4F',
- darkturquoise: '#00CED1',
- darkviolet: '#9400D3',
- deeppink: '#FF1493',
- deepskyblue: '#00BFFF',
- dimgray: '#696969',
- dimgrey: '#696969',
- dodgerblue: '#1E90FF',
- firebrick: '#B22222',
- floralwhite: '#FFFAF0',
- forestgreen: '#228B22',
- gainsboro: '#DCDCDC',
- ghostwhite: '#F8F8FF',
- gold: '#FFD700',
- goldenrod: '#DAA520',
- grey: '#808080',
- greenyellow: '#ADFF2F',
- honeydew: '#F0FFF0',
- hotpink: '#FF69B4',
- indianred: '#CD5C5C',
- indigo: '#4B0082',
- ivory: '#FFFFF0',
- khaki: '#F0E68C',
- lavender: '#E6E6FA',
- lavenderblush: '#FFF0F5',
- lawngreen: '#7CFC00',
- lemonchiffon: '#FFFACD',
- lightblue: '#ADD8E6',
- lightcoral: '#F08080',
- lightcyan: '#E0FFFF',
- lightgoldenrodyellow: '#FAFAD2',
- lightgreen: '#90EE90',
- lightgrey: '#D3D3D3',
- lightpink: '#FFB6C1',
- lightsalmon: '#FFA07A',
- lightseagreen: '#20B2AA',
- lightskyblue: '#87CEFA',
- lightslategray: '#778899',
- lightslategrey: '#778899',
- lightsteelblue: '#B0C4DE',
- lightyellow: '#FFFFE0',
- limegreen: '#32CD32',
- linen: '#FAF0E6',
- magenta: '#FF00FF',
- mediumaquamarine: '#66CDAA',
- mediumblue: '#0000CD',
- mediumorchid: '#BA55D3',
- mediumpurple: '#9370DB',
- mediumseagreen: '#3CB371',
- mediumslateblue: '#7B68EE',
- mediumspringgreen: '#00FA9A',
- mediumturquoise: '#48D1CC',
- mediumvioletred: '#C71585',
- midnightblue: '#191970',
- mintcream: '#F5FFFA',
- mistyrose: '#FFE4E1',
- moccasin: '#FFE4B5',
- navajowhite: '#FFDEAD',
- oldlace: '#FDF5E6',
- olivedrab: '#6B8E23',
- orange: '#FFA500',
- orangered: '#FF4500',
- orchid: '#DA70D6',
- palegoldenrod: '#EEE8AA',
- palegreen: '#98FB98',
- paleturquoise: '#AFEEEE',
- palevioletred: '#DB7093',
- papayawhip: '#FFEFD5',
- peachpuff: '#FFDAB9',
- peru: '#CD853F',
- pink: '#FFC0CB',
- plum: '#DDA0DD',
- powderblue: '#B0E0E6',
- rosybrown: '#BC8F8F',
- royalblue: '#4169E1',
- saddlebrown: '#8B4513',
- salmon: '#FA8072',
- sandybrown: '#F4A460',
- seagreen: '#2E8B57',
- seashell: '#FFF5EE',
- sienna: '#A0522D',
- skyblue: '#87CEEB',
- slateblue: '#6A5ACD',
- slategray: '#708090',
- slategrey: '#708090',
- snow: '#FFFAFA',
- springgreen: '#00FF7F',
- steelblue: '#4682B4',
- tan: '#D2B48C',
- thistle: '#D8BFD8',
- tomato: '#FF6347',
- turquoise: '#40E0D0',
- violet: '#EE82EE',
- wheat: '#F5DEB3',
- whitesmoke: '#F5F5F5',
- yellowgreen: '#9ACD32'
- };
-
-
- function getRgbHslContent(styleString) {
- var start = styleString.indexOf('(', 3);
- var end = styleString.indexOf(')', start + 1);
- var parts = styleString.substring(start + 1, end).split(',');
- // add alpha if needed
- if (parts.length != 4 || styleString.charAt(3) != 'a') {
- parts[3] = 1;
- }
- return parts;
- }
-
- function percent(s) {
- return parseFloat(s) / 100;
- }
-
- function clamp(v, min, max) {
- return Math.min(max, Math.max(min, v));
- }
-
- function hslToRgb(parts){
- var r, g, b, h, s, l;
- h = parseFloat(parts[0]) / 360 % 360;
- if (h < 0)
- h++;
- s = clamp(percent(parts[1]), 0, 1);
- l = clamp(percent(parts[2]), 0, 1);
- if (s == 0) {
- r = g = b = l; // achromatic
- } else {
- var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
- var p = 2 * l - q;
- r = hueToRgb(p, q, h + 1 / 3);
- g = hueToRgb(p, q, h);
- b = hueToRgb(p, q, h - 1 / 3);
- }
-
- return '#' + decToHex[Math.floor(r * 255)] +
- decToHex[Math.floor(g * 255)] +
- decToHex[Math.floor(b * 255)];
- }
-
- function hueToRgb(m1, m2, h) {
- if (h < 0)
- h++;
- if (h > 1)
- h--;
-
- if (6 * h < 1)
- return m1 + (m2 - m1) * 6 * h;
- else if (2 * h < 1)
- return m2;
- else if (3 * h < 2)
- return m1 + (m2 - m1) * (2 / 3 - h) * 6;
- else
- return m1;
- }
-
- var processStyleCache = {};
-
- function processStyle(styleString) {
- if (styleString in processStyleCache) {
- return processStyleCache[styleString];
- }
-
- var str, alpha = 1;
-
- styleString = String(styleString);
- if (styleString.charAt(0) == '#') {
- str = styleString;
- } else if (/^rgb/.test(styleString)) {
- var parts = getRgbHslContent(styleString);
- var str = '#', n;
- for (var i = 0; i < 3; i++) {
- if (parts[i].indexOf('%') != -1) {
- n = Math.floor(percent(parts[i]) * 255);
- } else {
- n = +parts[i];
- }
- str += decToHex[clamp(n, 0, 255)];
- }
- alpha = +parts[3];
- } else if (/^hsl/.test(styleString)) {
- var parts = getRgbHslContent(styleString);
- str = hslToRgb(parts);
- alpha = parts[3];
- } else {
- str = colorData[styleString] || styleString;
- }
- return processStyleCache[styleString] = {color: str, alpha: alpha};
- }
-
- var DEFAULT_STYLE = {
- style: 'normal',
- variant: 'normal',
- weight: 'normal',
- size: 10,
- family: 'sans-serif'
- };
-
- // Internal text style cache
- var fontStyleCache = {};
-
- function processFontStyle(styleString) {
- if (fontStyleCache[styleString]) {
- return fontStyleCache[styleString];
- }
-
- var el = document.createElement('div');
- var style = el.style;
- try {
- style.font = styleString;
- } catch (ex) {
- // Ignore failures to set to invalid font.
- }
-
- return fontStyleCache[styleString] = {
- style: style.fontStyle || DEFAULT_STYLE.style,
- variant: style.fontVariant || DEFAULT_STYLE.variant,
- weight: style.fontWeight || DEFAULT_STYLE.weight,
- size: style.fontSize || DEFAULT_STYLE.size,
- family: style.fontFamily || DEFAULT_STYLE.family
- };
- }
-
- function getComputedStyle(style, element) {
- var computedStyle = {};
-
- for (var p in style) {
- computedStyle[p] = style[p];
- }
-
- // Compute the size
- var canvasFontSize = parseFloat(element.currentStyle.fontSize),
- fontSize = parseFloat(style.size);
-
- if (typeof style.size == 'number') {
- computedStyle.size = style.size;
- } else if (style.size.indexOf('px') != -1) {
- computedStyle.size = fontSize;
- } else if (style.size.indexOf('em') != -1) {
- computedStyle.size = canvasFontSize * fontSize;
- } else if(style.size.indexOf('%') != -1) {
- computedStyle.size = (canvasFontSize / 100) * fontSize;
- } else if (style.size.indexOf('pt') != -1) {
- computedStyle.size = fontSize / .75;
- } else {
- computedStyle.size = canvasFontSize;
- }
-
- // Different scaling between normal text and VML text. This was found using
- // trial and error to get the same size as non VML text.
- computedStyle.size *= 0.981;
-
- // Fix for VML handling of bare font family names. Add a '' around font family names.
- computedStyle.family = "'" + computedStyle.family.replace(/(\'|\")/g,'').replace(/\s*,\s*/g, "', '") + "'";
-
- return computedStyle;
- }
-
- function buildStyle(style) {
- return style.style + ' ' + style.variant + ' ' + style.weight + ' ' +
- style.size + 'px ' + style.family;
- }
-
- var lineCapMap = {
- 'butt': 'flat',
- 'round': 'round'
- };
-
- function processLineCap(lineCap) {
- return lineCapMap[lineCap] || 'square';
- }
-
- /**
- * This class implements CanvasRenderingContext2D interface as described by
- * the WHATWG.
- * @param {HTMLElement} canvasElement The element that the 2D context should
- * be associated with
- */
- function CanvasRenderingContext2D_(canvasElement) {
- this.m_ = createMatrixIdentity();
-
- this.mStack_ = [];
- this.aStack_ = [];
- this.currentPath_ = [];
-
- // Canvas context properties
- this.strokeStyle = '#000';
- this.fillStyle = '#000';
-
- this.lineWidth = 1;
- this.lineJoin = 'miter';
- this.lineCap = 'butt';
- this.miterLimit = Z * 1;
- this.globalAlpha = 1;
- this.font = '10px sans-serif';
- this.textAlign = 'left';
- this.textBaseline = 'alphabetic';
- this.canvas = canvasElement;
-
- var cssText = 'width:' + canvasElement.clientWidth + 'px;height:' +
- canvasElement.clientHeight + 'px;overflow:hidden;position:absolute';
- var el = canvasElement.ownerDocument.createElement('div');
- el.style.cssText = cssText;
- canvasElement.appendChild(el);
-
- var overlayEl = el.cloneNode(false);
- // Use a non transparent background.
- overlayEl.style.backgroundColor = 'red';
- overlayEl.style.filter = 'alpha(opacity=0)';
- canvasElement.appendChild(overlayEl);
-
- this.element_ = el;
- this.arcScaleX_ = 1;
- this.arcScaleY_ = 1;
- this.lineScale_ = 1;
- }
-
- var contextPrototype = CanvasRenderingContext2D_.prototype;
- contextPrototype.clearRect = function() {
- if (this.textMeasureEl_) {
- this.textMeasureEl_.removeNode(true);
- this.textMeasureEl_ = null;
- }
- this.element_.innerHTML = '';
- };
-
- contextPrototype.beginPath = function() {
- // TODO: Branch current matrix so that save/restore has no effect
- // as per safari docs.
- this.currentPath_ = [];
- };
-
- contextPrototype.moveTo = function(aX, aY) {
- var p = getCoords(this, aX, aY);
- this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});
- this.currentX_ = p.x;
- this.currentY_ = p.y;
- };
-
- contextPrototype.lineTo = function(aX, aY) {
- var p = getCoords(this, aX, aY);
- this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});
-
- this.currentX_ = p.x;
- this.currentY_ = p.y;
- };
-
- contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,
- aCP2x, aCP2y,
- aX, aY) {
- var p = getCoords(this, aX, aY);
- var cp1 = getCoords(this, aCP1x, aCP1y);
- var cp2 = getCoords(this, aCP2x, aCP2y);
- bezierCurveTo(this, cp1, cp2, p);
- };
-
- // Helper function that takes the already fixed cordinates.
- function bezierCurveTo(self, cp1, cp2, p) {
- self.currentPath_.push({
- type: 'bezierCurveTo',
- cp1x: cp1.x,
- cp1y: cp1.y,
- cp2x: cp2.x,
- cp2y: cp2.y,
- x: p.x,
- y: p.y
- });
- self.currentX_ = p.x;
- self.currentY_ = p.y;
- }
-
- contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {
- // the following is lifted almost directly from
- // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes
-
- var cp = getCoords(this, aCPx, aCPy);
- var p = getCoords(this, aX, aY);
-
- var cp1 = {
- x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),
- y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)
- };
- var cp2 = {
- x: cp1.x + (p.x - this.currentX_) / 3.0,
- y: cp1.y + (p.y - this.currentY_) / 3.0
- };
-
- bezierCurveTo(this, cp1, cp2, p);
- };
-
- contextPrototype.arc = function(aX, aY, aRadius,
- aStartAngle, aEndAngle, aClockwise) {
- aRadius *= Z;
- var arcType = aClockwise ? 'at' : 'wa';
-
- var xStart = aX + mc(aStartAngle) * aRadius - Z2;
- var yStart = aY + ms(aStartAngle) * aRadius - Z2;
-
- var xEnd = aX + mc(aEndAngle) * aRadius - Z2;
- var yEnd = aY + ms(aEndAngle) * aRadius - Z2;
-
- // IE won't render arches drawn counter clockwise if xStart == xEnd.
- if (xStart == xEnd && !aClockwise) {
- xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something
- // that can be represented in binary
- }
-
- var p = getCoords(this, aX, aY);
- var pStart = getCoords(this, xStart, yStart);
- var pEnd = getCoords(this, xEnd, yEnd);
-
- this.currentPath_.push({type: arcType,
- x: p.x,
- y: p.y,
- radius: aRadius,
- xStart: pStart.x,
- yStart: pStart.y,
- xEnd: pEnd.x,
- yEnd: pEnd.y});
-
- };
-
- contextPrototype.rect = function(aX, aY, aWidth, aHeight) {
- this.moveTo(aX, aY);
- this.lineTo(aX + aWidth, aY);
- this.lineTo(aX + aWidth, aY + aHeight);
- this.lineTo(aX, aY + aHeight);
- this.closePath();
- };
-
- contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {
- var oldPath = this.currentPath_;
- this.beginPath();
-
- this.moveTo(aX, aY);
- this.lineTo(aX + aWidth, aY);
- this.lineTo(aX + aWidth, aY + aHeight);
- this.lineTo(aX, aY + aHeight);
- this.closePath();
- this.stroke();
-
- this.currentPath_ = oldPath;
- };
-
- contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {
- var oldPath = this.currentPath_;
- this.beginPath();
-
- this.moveTo(aX, aY);
- this.lineTo(aX + aWidth, aY);
- this.lineTo(aX + aWidth, aY + aHeight);
- this.lineTo(aX, aY + aHeight);
- this.closePath();
- this.fill();
-
- this.currentPath_ = oldPath;
- };
-
- contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {
- var gradient = new CanvasGradient_('gradient');
- gradient.x0_ = aX0;
- gradient.y0_ = aY0;
- gradient.x1_ = aX1;
- gradient.y1_ = aY1;
- return gradient;
- };
-
- contextPrototype.createRadialGradient = function(aX0, aY0, aR0,
- aX1, aY1, aR1) {
- var gradient = new CanvasGradient_('gradientradial');
- gradient.x0_ = aX0;
- gradient.y0_ = aY0;
- gradient.r0_ = aR0;
- gradient.x1_ = aX1;
- gradient.y1_ = aY1;
- gradient.r1_ = aR1;
- return gradient;
- };
-
- contextPrototype.drawImage = function(image, var_args) {
- var dx, dy, dw, dh, sx, sy, sw, sh;
-
- // to find the original width we overide the width and height
- var oldRuntimeWidth = image.runtimeStyle.width;
- var oldRuntimeHeight = image.runtimeStyle.height;
- image.runtimeStyle.width = 'auto';
- image.runtimeStyle.height = 'auto';
-
- // get the original size
- var w = image.width;
- var h = image.height;
-
- // and remove overides
- image.runtimeStyle.width = oldRuntimeWidth;
- image.runtimeStyle.height = oldRuntimeHeight;
-
- if (arguments.length == 3) {
- dx = arguments[1];
- dy = arguments[2];
- sx = sy = 0;
- sw = dw = w;
- sh = dh = h;
- } else if (arguments.length == 5) {
- dx = arguments[1];
- dy = arguments[2];
- dw = arguments[3];
- dh = arguments[4];
- sx = sy = 0;
- sw = w;
- sh = h;
- } else if (arguments.length == 9) {
- sx = arguments[1];
- sy = arguments[2];
- sw = arguments[3];
- sh = arguments[4];
- dx = arguments[5];
- dy = arguments[6];
- dw = arguments[7];
- dh = arguments[8];
- } else {
- throw Error('Invalid number of arguments');
- }
-
- var d = getCoords(this, dx, dy);
-
- var w2 = sw / 2;
- var h2 = sh / 2;
-
- var vmlStr = [];
-
- var W = 10;
- var H = 10;
-
- // For some reason that I've now forgotten, using divs didn't work
- vmlStr.push(' <g_vml_:group',
- ' coordsize="', Z * W, ',', Z * H, '"',
- ' coordorigin="0,0"' ,
- ' style="width:', W, 'px;height:', H, 'px;position:absolute;');
-
- // If filters are necessary (rotation exists), create them
- // filters are bog-slow, so only create them if abbsolutely necessary
- // The following check doesn't account for skews (which don't exist
- // in the canvas spec (yet) anyway.
-
- if (this.m_[0][0] != 1 || this.m_[0][1] ||
- this.m_[1][1] != 1 || this.m_[1][0]) {
- var filter = [];
-
- // Note the 12/21 reversal
- filter.push('M11=', this.m_[0][0], ',',
- 'M12=', this.m_[1][0], ',',
- 'M21=', this.m_[0][1], ',',
- 'M22=', this.m_[1][1], ',',
- 'Dx=', mr(d.x / Z), ',',
- 'Dy=', mr(d.y / Z), '');
-
- // Bounding box calculation (need to minimize displayed area so that
- // filters don't waste time on unused pixels.
- var max = d;
- var c2 = getCoords(this, dx + dw, dy);
- var c3 = getCoords(this, dx, dy + dh);
- var c4 = getCoords(this, dx + dw, dy + dh);
-
- max.x = m.max(max.x, c2.x, c3.x, c4.x);
- max.y = m.max(max.y, c2.y, c3.y, c4.y);
-
- vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z),
- 'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(',
- filter.join(''), ", sizingmethod='clip');");
-
- } else {
- vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');
- }
-
- vmlStr.push(' ">' ,
- '<g_vml_:image src="', image.src, '"',
- ' style="width:', Z * dw, 'px;',
- ' height:', Z * dh, 'px"',
- ' cropleft="', sx / w, '"',
- ' croptop="', sy / h, '"',
- ' cropright="', (w - sx - sw) / w, '"',
- ' cropbottom="', (h - sy - sh) / h, '"',
- ' />',
- '</g_vml_:group>');
-
- this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join(''));
- };
-
- contextPrototype.stroke = function(aFill) {
- var lineStr = [];
- var lineOpen = false;
-
- var W = 10;
- var H = 10;
-
- lineStr.push('<g_vml_:shape',
- ' filled="', !!aFill, '"',
- ' style="position:absolute;width:', W, 'px;height:', H, 'px;"',
- ' coordorigin="0,0"',
- ' coordsize="', Z * W, ',', Z * H, '"',
- ' stroked="', !aFill, '"',
- ' path="');
-
- var newSeq = false;
- var min = {x: null, y: null};
- var max = {x: null, y: null};
-
- for (var i = 0; i < this.currentPath_.length; i++) {
- var p = this.currentPath_[i];
- var c;
-
- switch (p.type) {
- case 'moveTo':
- c = p;
- lineStr.push(' m ', mr(p.x), ',', mr(p.y));
- break;
- case 'lineTo':
- lineStr.push(' l ', mr(p.x), ',', mr(p.y));
- break;
- case 'close':
- lineStr.push(' x ');
- p = null;
- break;
- case 'bezierCurveTo':
- lineStr.push(' c ',
- mr(p.cp1x), ',', mr(p.cp1y), ',',
- mr(p.cp2x), ',', mr(p.cp2y), ',',
- mr(p.x), ',', mr(p.y));
- break;
- case 'at':
- case 'wa':
- lineStr.push(' ', p.type, ' ',
- mr(p.x - this.arcScaleX_ * p.radius), ',',
- mr(p.y - this.arcScaleY_ * p.radius), ' ',
- mr(p.x + this.arcScaleX_ * p.radius), ',',
- mr(p.y + this.arcScaleY_ * p.radius), ' ',
- mr(p.xStart), ',', mr(p.yStart), ' ',
- mr(p.xEnd), ',', mr(p.yEnd));
- break;
- }
-
-
- // TODO: Following is broken for curves due to
- // move to proper paths.
-
- // Figure out dimensions so we can do gradient fills
- // properly
- if (p) {
- if (min.x == null || p.x < min.x) {
- min.x = p.x;
- }
- if (max.x == null || p.x > max.x) {
- max.x = p.x;
- }
- if (min.y == null || p.y < min.y) {
- min.y = p.y;
- }
- if (max.y == null || p.y > max.y) {
- max.y = p.y;
- }
- }
- }
- lineStr.push(' ">');
-
- if (!aFill) {
- appendStroke(this, lineStr);
- } else {
- appendFill(this, lineStr, min, max);
- }
-
- lineStr.push('</g_vml_:shape>');
-
- this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
- };
-
- function appendStroke(ctx, lineStr) {
- var a = processStyle(ctx.strokeStyle);
- var color = a.color;
- var opacity = a.alpha * ctx.globalAlpha;
- var lineWidth = ctx.lineScale_ * ctx.lineWidth;
-
- // VML cannot correctly render a line if the width is less than 1px.
- // In that case, we dilute the color to make the line look thinner.
- if (lineWidth < 1) {
- opacity *= lineWidth;
- }
-
- lineStr.push(
- '<g_vml_:stroke',
- ' opacity="', opacity, '"',
- ' joinstyle="', ctx.lineJoin, '"',
- ' miterlimit="', ctx.miterLimit, '"',
- ' endcap="', processLineCap(ctx.lineCap), '"',
- ' weight="', lineWidth, 'px"',
- ' color="', color, '" />'
- );
- }
-
- function appendFill(ctx, lineStr, min, max) {
- var fillStyle = ctx.fillStyle;
- var arcScaleX = ctx.arcScaleX_;
- var arcScaleY = ctx.arcScaleY_;
- var width = max.x - min.x;
- var height = max.y - min.y;
- if (fillStyle instanceof CanvasGradient_) {
- // TODO: Gradients transformed with the transformation matrix.
- var angle = 0;
- var focus = {x: 0, y: 0};
-
- // additional offset
- var shift = 0;
- // scale factor for offset
- var expansion = 1;
-
- if (fillStyle.type_ == 'gradient') {
- var x0 = fillStyle.x0_ / arcScaleX;
- var y0 = fillStyle.y0_ / arcScaleY;
- var x1 = fillStyle.x1_ / arcScaleX;
- var y1 = fillStyle.y1_ / arcScaleY;
- var p0 = getCoords(ctx, x0, y0);
- var p1 = getCoords(ctx, x1, y1);
- var dx = p1.x - p0.x;
- var dy = p1.y - p0.y;
- angle = Math.atan2(dx, dy) * 180 / Math.PI;
-
- // The angle should be a non-negative number.
- if (angle < 0) {
- angle += 360;
- }
-
- // Very small angles produce an unexpected result because they are
- // converted to a scientific notation string.
- if (angle < 1e-6) {
- angle = 0;
- }
- } else {
- var p0 = getCoords(ctx, fillStyle.x0_, fillStyle.y0_);
- focus = {
- x: (p0.x - min.x) / width,
- y: (p0.y - min.y) / height
- };
-
- width /= arcScaleX * Z;
- height /= arcScaleY * Z;
- var dimension = m.max(width, height);
- shift = 2 * fillStyle.r0_ / dimension;
- expansion = 2 * fillStyle.r1_ / dimension - shift;
- }
-
- // We need to sort the color stops in ascending order by offset,
- // otherwise IE won't interpret it correctly.
- var stops = fillStyle.colors_;
- stops.sort(function(cs1, cs2) {
- return cs1.offset - cs2.offset;
- });
-
- var length = stops.length;
- var color1 = stops[0].color;
- var color2 = stops[length - 1].color;
- var opacity1 = stops[0].alpha * ctx.globalAlpha;
- var opacity2 = stops[length - 1].alpha * ctx.globalAlpha;
-
- var colors = [];
- for (var i = 0; i < length; i++) {
- var stop = stops[i];
- colors.push(stop.offset * expansion + shift + ' ' + stop.color);
- }
-
- // When colors attribute is used, the meanings of opacity and o:opacity2
- // are reversed.
- lineStr.push('<g_vml_:fill type="', fillStyle.type_, '"',
- ' method="none" focus="100%"',
- ' color="', color1, '"',
- ' color2="', color2, '"',
- ' colors="', colors.join(','), '"',
- ' opacity="', opacity2, '"',
- ' g_o_:opacity2="', opacity1, '"',
- ' angle="', angle, '"',
- ' focusposition="', focus.x, ',', focus.y, '" />');
- } else if (fillStyle instanceof CanvasPattern_) {
- if (width && height) {
- var deltaLeft = -min.x;
- var deltaTop = -min.y;
- lineStr.push('<g_vml_:fill',
- ' position="',
- deltaLeft / width * arcScaleX * arcScaleX, ',',
- deltaTop / height * arcScaleY * arcScaleY, '"',
- ' type="tile"',
- // TODO: Figure out the correct size to fit the scale.
- //' size="', w, 'px ', h, 'px"',
- ' src="', fillStyle.src_, '" />');
- }
- } else {
- var a = processStyle(ctx.fillStyle);
- var color = a.color;
- var opacity = a.alpha * ctx.globalAlpha;
- lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity,
- '" />');
- }
- }
-
- contextPrototype.fill = function() {
- this.stroke(true);
- };
-
- contextPrototype.closePath = function() {
- this.currentPath_.push({type: 'close'});
- };
-
- function getCoords(ctx, aX, aY) {
- var m = ctx.m_;
- return {
- x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,
- y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2
- };
- };
-
- contextPrototype.save = function() {
- var o = {};
- copyState(this, o);
- this.aStack_.push(o);
- this.mStack_.push(this.m_);
- this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);
- };
-
- contextPrototype.restore = function() {
- if (this.aStack_.length) {
- copyState(this.aStack_.pop(), this);
- this.m_ = this.mStack_.pop();
- }
- };
-
- function matrixIsFinite(m) {
- return isFinite(m[0][0]) && isFinite(m[0][1]) &&
- isFinite(m[1][0]) && isFinite(m[1][1]) &&
- isFinite(m[2][0]) && isFinite(m[2][1]);
- }
-
- function setM(ctx, m, updateLineScale) {
- if (!matrixIsFinite(m)) {
- return;
- }
- ctx.m_ = m;
-
- if (updateLineScale) {
- // Get the line scale.
- // Determinant of this.m_ means how much the area is enlarged by the
- // transformation. So its square root can be used as a scale factor
- // for width.
- var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];
- ctx.lineScale_ = sqrt(abs(det));
- }
- }
-
- contextPrototype.translate = function(aX, aY) {
- var m1 = [
- [1, 0, 0],
- [0, 1, 0],
- [aX, aY, 1]
- ];
-
- setM(this, matrixMultiply(m1, this.m_), false);
- };
-
- contextPrototype.rotate = function(aRot) {
- var c = mc(aRot);
- var s = ms(aRot);
-
- var m1 = [
- [c, s, 0],
- [-s, c, 0],
- [0, 0, 1]
- ];
-
- setM(this, matrixMultiply(m1, this.m_), false);
- };
-
- contextPrototype.scale = function(aX, aY) {
- this.arcScaleX_ *= aX;
- this.arcScaleY_ *= aY;
- var m1 = [
- [aX, 0, 0],
- [0, aY, 0],
- [0, 0, 1]
- ];
-
- setM(this, matrixMultiply(m1, this.m_), true);
- };
-
- contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {
- var m1 = [
- [m11, m12, 0],
- [m21, m22, 0],
- [dx, dy, 1]
- ];
-
- setM(this, matrixMultiply(m1, this.m_), true);
- };
-
- contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {
- var m = [
- [m11, m12, 0],
- [m21, m22, 0],
- [dx, dy, 1]
- ];
-
- setM(this, m, true);
- };
-
- /**
- * The text drawing function.
- * The maxWidth argument isn't taken in account, since no browser supports
- * it yet.
- */
- contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) {
- var m = this.m_,
- delta = 1000,
- left = 0,
- right = delta,
- offset = {x: 0, y: 0},
- lineStr = [];
-
- var fontStyle = getComputedStyle(processFontStyle(this.font), this.element_);
-
- var fontStyleString = buildStyle(fontStyle);
-
- var elementStyle = this.element_.currentStyle;
- var textAlign = this.textAlign.toLowerCase();
- switch (textAlign) {
- case 'left':
- case 'center':
- case 'right':
- break;
- case 'end':
- textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left';
- break;
- case 'start':
- textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left';
- break;
- default:
- textAlign = 'left';
- }
-
- // 1.75 is an arbitrary number, as there is no info about the text baseline
- switch (this.textBaseline) {
- case 'hanging':
- case 'top':
- offset.y = fontStyle.size / 1.75;
- break;
- case 'middle':
- break;
- default:
- case null:
- case 'alphabetic':
- case 'ideographic':
- case 'bottom':
- offset.y = -fontStyle.size / 2.25;
- break;
- }
-
- switch(textAlign) {
- case 'right':
- left = delta;
- right = 0.05;
- break;
- case 'center':
- left = right = delta / 2;
- break;
- }
-
- var d = getCoords(this, x + offset.x, y + offset.y);
-
- lineStr.push('<g_vml_:line from="', -left ,' 0" to="', right ,' 0.05" ',
- ' coordsize="100 100" coordorigin="0 0"',
- ' filled="', !stroke, '" stroked="', !!stroke,
- '" style="position:absolute;width:1px;height:1px;">');
-
- if (stroke) {
- appendStroke(this, lineStr);
- } else {
- // TODO: Fix the min and max params.
- appendFill(this, lineStr, {x: -left, y: 0},
- {x: right, y: fontStyle.size});
- }
-
- var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' +
- m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0';
-
- var skewOffset = mr(d.x / Z + 1 - m[0][0]) + ',' + mr(d.y / Z - 2 * m[1][0]);
-
-
- lineStr.push('<g_vml_:skew on="t" matrix="', skewM ,'" ',
- ' offset="', skewOffset, '" origin="', left ,' 0" />',
- '<g_vml_:path textpathok="true" />',
- '<g_vml_:textpath on="true" string="',
- encodeHtmlAttribute(text),
- '" style="v-text-align:', textAlign,
- ';font:', encodeHtmlAttribute(fontStyleString),
- '" /></g_vml_:line>');
-
- this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
- };
-
- contextPrototype.fillText = function(text, x, y, maxWidth) {
- this.drawText_(text, x, y, maxWidth, false);
- };
-
- contextPrototype.strokeText = function(text, x, y, maxWidth) {
- this.drawText_(text, x, y, maxWidth, true);
- };
-
- contextPrototype.measureText = function(text) {
- if (!this.textMeasureEl_) {
- var s = '<span style="position:absolute;' +
- 'top:-20000px;left:0;padding:0;margin:0;border:none;' +
- 'white-space:pre;"></span>';
- this.element_.insertAdjacentHTML('beforeEnd', s);
- this.textMeasureEl_ = this.element_.lastChild;
- }
- var doc = this.element_.ownerDocument;
- this.textMeasureEl_.innerHTML = '';
- this.textMeasureEl_.style.font = this.font;
- // Don't use innerHTML or innerText because they allow markup/whitespace.
- this.textMeasureEl_.appendChild(doc.createTextNode(text));
- return {width: this.textMeasureEl_.offsetWidth};
- };
-
- /******** STUBS ********/
- contextPrototype.clip = function() {
- // TODO: Implement
- };
-
- contextPrototype.arcTo = function() {
- // TODO: Implement
- };
-
- contextPrototype.createPattern = function(image, repetition) {
- return new CanvasPattern_(image, repetition);
- };
-
- // Gradient / Pattern Stubs
- function CanvasGradient_(aType) {
- this.type_ = aType;
- this.x0_ = 0;
- this.y0_ = 0;
- this.r0_ = 0;
- this.x1_ = 0;
- this.y1_ = 0;
- this.r1_ = 0;
- this.colors_ = [];
- }
-
- CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {
- aColor = processStyle(aColor);
- this.colors_.push({offset: aOffset,
- color: aColor.color,
- alpha: aColor.alpha});
- };
-
- function CanvasPattern_(image, repetition) {
- assertImageIsValid(image);
- switch (repetition) {
- case 'repeat':
- case null:
- case '':
- this.repetition_ = 'repeat';
- break;
- case 'repeat-x':
- case 'repeat-y':
- case 'no-repeat':
- this.repetition_ = repetition;
- break;
- default:
- throwException('SYNTAX_ERR');
- }
-
- this.src_ = image.src;
- this.width_ = image.width;
- this.height_ = image.height;
- }
-
- function throwException(s) {
- throw new DOMException_(s);
- }
-
- function assertImageIsValid(img) {
- if (!img || img.nodeType != 1 || img.tagName != 'IMG') {
- throwException('TYPE_MISMATCH_ERR');
- }
- if (img.readyState != 'complete') {
- throwException('INVALID_STATE_ERR');
- }
- }
-
- function DOMException_(s) {
- this.code = this[s];
- this.message = s +': DOM Exception ' + this.code;
- }
- var p = DOMException_.prototype = new Error;
- p.INDEX_SIZE_ERR = 1;
- p.DOMSTRING_SIZE_ERR = 2;
- p.HIERARCHY_REQUEST_ERR = 3;
- p.WRONG_DOCUMENT_ERR = 4;
- p.INVALID_CHARACTER_ERR = 5;
- p.NO_DATA_ALLOWED_ERR = 6;
- p.NO_MODIFICATION_ALLOWED_ERR = 7;
- p.NOT_FOUND_ERR = 8;
- p.NOT_SUPPORTED_ERR = 9;
- p.INUSE_ATTRIBUTE_ERR = 10;
- p.INVALID_STATE_ERR = 11;
- p.SYNTAX_ERR = 12;
- p.INVALID_MODIFICATION_ERR = 13;
- p.NAMESPACE_ERR = 14;
- p.INVALID_ACCESS_ERR = 15;
- p.VALIDATION_ERR = 16;
- p.TYPE_MISMATCH_ERR = 17;
-
- // set up externs
- G_vmlCanvasManager = G_vmlCanvasManager_;
- CanvasRenderingContext2D = CanvasRenderingContext2D_;
- CanvasGradient = CanvasGradient_;
- CanvasPattern = CanvasPattern_;
- DOMException = DOMException_;
- G_vmlCanvasManager._version = 888;
-})();
-
-} // if
diff --git a/wqflask/wqflask/static/packages/jqplot/excanvas.min.js b/wqflask/wqflask/static/packages/jqplot/excanvas.min.js
deleted file mode 100644
index a2b2c22e..00000000
--- a/wqflask/wqflask/static/packages/jqplot/excanvas.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * 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
- *
- *
- */
-if(!document.createElement("canvas").getContext){(function(){var ab=Math;var n=ab.round;var l=ab.sin;var A=ab.cos;var H=ab.abs;var N=ab.sqrt;var d=10;var f=d/2;var z=+navigator.userAgent.match(/MSIE ([\d.]+)?/)[1];function y(){return this.context_||(this.context_=new D(this))}var t=Array.prototype.slice;function g(j,m,p){var i=t.call(arguments,2);return function(){return j.apply(m,i.concat(t.call(arguments)))}}function af(i){return String(i).replace(/&/g,"&amp;").replace(/"/g,"&quot;")}function Y(m,j,i){if(!m.namespaces[j]){m.namespaces.add(j,i,"#default#VML")}}function R(j){Y(j,"g_vml_","urn:schemas-microsoft-com:vml");Y(j,"g_o_","urn:schemas-microsoft-com:office:office");if(!j.styleSheets.ex_canvas_){var i=j.createStyleSheet();i.owningElement.id="ex_canvas_";i.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}R(document);var e={init:function(i){var j=i||document;j.createElement("canvas");j.attachEvent("onreadystatechange",g(this.init_,this,j))},init_:function(p){var m=p.getElementsByTagName("canvas");for(var j=0;j<m.length;j++){this.initElement(m[j])}},initElement:function(j){if(!j.getContext){j.getContext=y;R(j.ownerDocument);j.innerHTML="";j.attachEvent("onpropertychange",x);j.attachEvent("onresize",W);var i=j.attributes;if(i.width&&i.width.specified){j.style.width=i.width.nodeValue+"px"}else{j.width=j.clientWidth}if(i.height&&i.height.specified){j.style.height=i.height.nodeValue+"px"}else{j.height=j.clientHeight}}return j},uninitElement:function(j){if(j.getContext){var i=j.getContext();delete i.element_;delete i.canvas;j.innerHTML="";j.context_=null;j.getContext=null;j.detachEvent("onpropertychange",x);j.detachEvent("onresize",W)}}};function x(j){var i=j.srcElement;switch(j.propertyName){case"width":i.getContext().clearRect();i.style.width=i.attributes.width.nodeValue+"px";i.firstChild.style.width=i.clientWidth+"px";break;case"height":i.getContext().clearRect();i.style.height=i.attributes.height.nodeValue+"px";i.firstChild.style.height=i.clientHeight+"px";break}}function W(j){var i=j.srcElement;if(i.firstChild){i.firstChild.style.width=i.clientWidth+"px";i.firstChild.style.height=i.clientHeight+"px"}}e.init();var k=[];for(var ae=0;ae<16;ae++){for(var ad=0;ad<16;ad++){k[ae*16+ad]=ae.toString(16)+ad.toString(16)}}function B(){return[[1,0,0],[0,1,0],[0,0,1]]}function J(p,m){var j=B();for(var i=0;i<3;i++){for(var ah=0;ah<3;ah++){var Z=0;for(var ag=0;ag<3;ag++){Z+=p[i][ag]*m[ag][ah]}j[i][ah]=Z}}return j}function v(j,i){i.fillStyle=j.fillStyle;i.lineCap=j.lineCap;i.lineJoin=j.lineJoin;i.lineWidth=j.lineWidth;i.miterLimit=j.miterLimit;i.shadowBlur=j.shadowBlur;i.shadowColor=j.shadowColor;i.shadowOffsetX=j.shadowOffsetX;i.shadowOffsetY=j.shadowOffsetY;i.strokeStyle=j.strokeStyle;i.globalAlpha=j.globalAlpha;i.font=j.font;i.textAlign=j.textAlign;i.textBaseline=j.textBaseline;i.arcScaleX_=j.arcScaleX_;i.arcScaleY_=j.arcScaleY_;i.lineScale_=j.lineScale_}var b={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgreen:"#006400",darkgrey:"#A9A9A9",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",oldlace:"#FDF5E6",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"};function M(j){var p=j.indexOf("(",3);var i=j.indexOf(")",p+1);var m=j.substring(p+1,i).split(",");if(m.length!=4||j.charAt(3)!="a"){m[3]=1}return m}function c(i){return parseFloat(i)/100}function r(j,m,i){return Math.min(i,Math.max(m,j))}function I(ag){var i,ai,aj,ah,ak,Z;ah=parseFloat(ag[0])/360%360;if(ah<0){ah++}ak=r(c(ag[1]),0,1);Z=r(c(ag[2]),0,1);if(ak==0){i=ai=aj=Z}else{var j=Z<0.5?Z*(1+ak):Z+ak-Z*ak;var m=2*Z-j;i=a(m,j,ah+1/3);ai=a(m,j,ah);aj=a(m,j,ah-1/3)}return"#"+k[Math.floor(i*255)]+k[Math.floor(ai*255)]+k[Math.floor(aj*255)]}function a(j,i,m){if(m<0){m++}if(m>1){m--}if(6*m<1){return j+(i-j)*6*m}else{if(2*m<1){return i}else{if(3*m<2){return j+(i-j)*(2/3-m)*6}else{return j}}}}var C={};function F(j){if(j in C){return C[j]}var ag,Z=1;j=String(j);if(j.charAt(0)=="#"){ag=j}else{if(/^rgb/.test(j)){var p=M(j);var ag="#",ah;for(var m=0;m<3;m++){if(p[m].indexOf("%")!=-1){ah=Math.floor(c(p[m])*255)}else{ah=+p[m]}ag+=k[r(ah,0,255)]}Z=+p[3]}else{if(/^hsl/.test(j)){var p=M(j);ag=I(p);Z=p[3]}else{ag=b[j]||j}}}return C[j]={color:ag,alpha:Z}}var o={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var L={};function E(i){if(L[i]){return L[i]}var p=document.createElement("div");var m=p.style;try{m.font=i}catch(j){}return L[i]={style:m.fontStyle||o.style,variant:m.fontVariant||o.variant,weight:m.fontWeight||o.weight,size:m.fontSize||o.size,family:m.fontFamily||o.family}}function u(m,j){var i={};for(var ah in m){i[ah]=m[ah]}var ag=parseFloat(j.currentStyle.fontSize),Z=parseFloat(m.size);if(typeof m.size=="number"){i.size=m.size}else{if(m.size.indexOf("px")!=-1){i.size=Z}else{if(m.size.indexOf("em")!=-1){i.size=ag*Z}else{if(m.size.indexOf("%")!=-1){i.size=(ag/100)*Z}else{if(m.size.indexOf("pt")!=-1){i.size=Z/0.75}else{i.size=ag}}}}}i.size*=0.981;i.family="'"+i.family.replace(/(\'|\")/g,"").replace(/\s*,\s*/g,"', '")+"'";return i}function ac(i){return i.style+" "+i.variant+" "+i.weight+" "+i.size+"px "+i.family}var s={butt:"flat",round:"round"};function S(i){return s[i]||"square"}function D(i){this.m_=B();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=d*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var m="width:"+i.clientWidth+"px;height:"+i.clientHeight+"px;overflow:hidden;position:absolute";var j=i.ownerDocument.createElement("div");j.style.cssText=m;i.appendChild(j);var p=j.cloneNode(false);p.style.backgroundColor="red";p.style.filter="alpha(opacity=0)";i.appendChild(p);this.element_=j;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var q=D.prototype;q.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};q.beginPath=function(){this.currentPath_=[]};q.moveTo=function(j,i){var m=V(this,j,i);this.currentPath_.push({type:"moveTo",x:m.x,y:m.y});this.currentX_=m.x;this.currentY_=m.y};q.lineTo=function(j,i){var m=V(this,j,i);this.currentPath_.push({type:"lineTo",x:m.x,y:m.y});this.currentX_=m.x;this.currentY_=m.y};q.bezierCurveTo=function(m,j,ak,aj,ai,ag){var i=V(this,ai,ag);var ah=V(this,m,j);var Z=V(this,ak,aj);K(this,ah,Z,i)};function K(i,Z,m,j){i.currentPath_.push({type:"bezierCurveTo",cp1x:Z.x,cp1y:Z.y,cp2x:m.x,cp2y:m.y,x:j.x,y:j.y});i.currentX_=j.x;i.currentY_=j.y}q.quadraticCurveTo=function(ai,m,j,i){var ah=V(this,ai,m);var ag=V(this,j,i);var aj={x:this.currentX_+2/3*(ah.x-this.currentX_),y:this.currentY_+2/3*(ah.y-this.currentY_)};var Z={x:aj.x+(ag.x-this.currentX_)/3,y:aj.y+(ag.y-this.currentY_)/3};K(this,aj,Z,ag)};q.arc=function(al,aj,ak,ag,j,m){ak*=d;var ap=m?"at":"wa";var am=al+A(ag)*ak-f;var ao=aj+l(ag)*ak-f;var i=al+A(j)*ak-f;var an=aj+l(j)*ak-f;if(am==i&&!m){am+=0.125}var Z=V(this,al,aj);var ai=V(this,am,ao);var ah=V(this,i,an);this.currentPath_.push({type:ap,x:Z.x,y:Z.y,radius:ak,xStart:ai.x,yStart:ai.y,xEnd:ah.x,yEnd:ah.y})};q.rect=function(m,j,i,p){this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath()};q.strokeRect=function(m,j,i,p){var Z=this.currentPath_;this.beginPath();this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath();this.stroke();this.currentPath_=Z};q.fillRect=function(m,j,i,p){var Z=this.currentPath_;this.beginPath();this.moveTo(m,j);this.lineTo(m+i,j);this.lineTo(m+i,j+p);this.lineTo(m,j+p);this.closePath();this.fill();this.currentPath_=Z};q.createLinearGradient=function(j,p,i,m){var Z=new U("gradient");Z.x0_=j;Z.y0_=p;Z.x1_=i;Z.y1_=m;return Z};q.createRadialGradient=function(p,ag,m,j,Z,i){var ah=new U("gradientradial");ah.x0_=p;ah.y0_=ag;ah.r0_=m;ah.x1_=j;ah.y1_=Z;ah.r1_=i;return ah};q.drawImage=function(aq,m){var aj,ah,al,ay,ao,am,at,aA;var ak=aq.runtimeStyle.width;var ap=aq.runtimeStyle.height;aq.runtimeStyle.width="auto";aq.runtimeStyle.height="auto";var ai=aq.width;var aw=aq.height;aq.runtimeStyle.width=ak;aq.runtimeStyle.height=ap;if(arguments.length==3){aj=arguments[1];ah=arguments[2];ao=am=0;at=al=ai;aA=ay=aw}else{if(arguments.length==5){aj=arguments[1];ah=arguments[2];al=arguments[3];ay=arguments[4];ao=am=0;at=ai;aA=aw}else{if(arguments.length==9){ao=arguments[1];am=arguments[2];at=arguments[3];aA=arguments[4];aj=arguments[5];ah=arguments[6];al=arguments[7];ay=arguments[8]}else{throw Error("Invalid number of arguments")}}}var az=V(this,aj,ah);var p=at/2;var j=aA/2;var ax=[];var i=10;var ag=10;ax.push(" <g_vml_:group",' coordsize="',d*i,",",d*ag,'"',' coordorigin="0,0"',' style="width:',i,"px;height:",ag,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var Z=[];Z.push("M11=",this.m_[0][0],",","M12=",this.m_[1][0],",","M21=",this.m_[0][1],",","M22=",this.m_[1][1],",","Dx=",n(az.x/d),",","Dy=",n(az.y/d),"");var av=az;var au=V(this,aj+al,ah);var ar=V(this,aj,ah+ay);var an=V(this,aj+al,ah+ay);av.x=ab.max(av.x,au.x,ar.x,an.x);av.y=ab.max(av.y,au.y,ar.y,an.y);ax.push("padding:0 ",n(av.x/d),"px ",n(av.y/d),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",Z.join(""),", sizingmethod='clip');")}else{ax.push("top:",n(az.y/d),"px;left:",n(az.x/d),"px;")}ax.push(' ">','<g_vml_:image src="',aq.src,'"',' style="width:',d*al,"px;"," height:",d*ay,'px"',' cropleft="',ao/ai,'"',' croptop="',am/aw,'"',' cropright="',(ai-ao-at)/ai,'"',' cropbottom="',(aw-am-aA)/aw,'"'," />","</g_vml_:group>");this.element_.insertAdjacentHTML("BeforeEnd",ax.join(""))};q.stroke=function(al){var aj=[];var Z=false;var m=10;var am=10;aj.push("<g_vml_:shape",' filled="',!!al,'"',' style="position:absolute;width:',m,"px;height:",am,'px;"',' coordorigin="0,0"',' coordsize="',d*m,",",d*am,'"',' stroked="',!al,'"',' path="');var an=false;var ag={x:null,y:null};var ak={x:null,y:null};for(var ah=0;ah<this.currentPath_.length;ah++){var j=this.currentPath_[ah];var ai;switch(j.type){case"moveTo":ai=j;aj.push(" m ",n(j.x),",",n(j.y));break;case"lineTo":aj.push(" l ",n(j.x),",",n(j.y));break;case"close":aj.push(" x ");j=null;break;case"bezierCurveTo":aj.push(" c ",n(j.cp1x),",",n(j.cp1y),",",n(j.cp2x),",",n(j.cp2y),",",n(j.x),",",n(j.y));break;case"at":case"wa":aj.push(" ",j.type," ",n(j.x-this.arcScaleX_*j.radius),",",n(j.y-this.arcScaleY_*j.radius)," ",n(j.x+this.arcScaleX_*j.radius),",",n(j.y+this.arcScaleY_*j.radius)," ",n(j.xStart),",",n(j.yStart)," ",n(j.xEnd),",",n(j.yEnd));break}if(j){if(ag.x==null||j.x<ag.x){ag.x=j.x}if(ak.x==null||j.x>ak.x){ak.x=j.x}if(ag.y==null||j.y<ag.y){ag.y=j.y}if(ak.y==null||j.y>ak.y){ak.y=j.y}}}aj.push(' ">');if(!al){w(this,aj)}else{G(this,aj,ag,ak)}aj.push("</g_vml_:shape>");this.element_.insertAdjacentHTML("beforeEnd",aj.join(""))};function w(m,ag){var j=F(m.strokeStyle);var p=j.color;var Z=j.alpha*m.globalAlpha;var i=m.lineScale_*m.lineWidth;if(i<1){Z*=i}ag.push("<g_vml_:stroke",' opacity="',Z,'"',' joinstyle="',m.lineJoin,'"',' miterlimit="',m.miterLimit,'"',' endcap="',S(m.lineCap),'"',' weight="',i,'px"',' color="',p,'" />')}function G(aq,ai,aK,ar){var aj=aq.fillStyle;var aB=aq.arcScaleX_;var aA=aq.arcScaleY_;var j=ar.x-aK.x;var p=ar.y-aK.y;if(aj instanceof U){var an=0;var aF={x:0,y:0};var ax=0;var am=1;if(aj.type_=="gradient"){var al=aj.x0_/aB;var m=aj.y0_/aA;var ak=aj.x1_/aB;var aM=aj.y1_/aA;var aJ=V(aq,al,m);var aI=V(aq,ak,aM);var ag=aI.x-aJ.x;var Z=aI.y-aJ.y;an=Math.atan2(ag,Z)*180/Math.PI;if(an<0){an+=360}if(an<0.000001){an=0}}else{var aJ=V(aq,aj.x0_,aj.y0_);aF={x:(aJ.x-aK.x)/j,y:(aJ.y-aK.y)/p};j/=aB*d;p/=aA*d;var aD=ab.max(j,p);ax=2*aj.r0_/aD;am=2*aj.r1_/aD-ax}var av=aj.colors_;av.sort(function(aN,i){return aN.offset-i.offset});var ap=av.length;var au=av[0].color;var at=av[ap-1].color;var az=av[0].alpha*aq.globalAlpha;var ay=av[ap-1].alpha*aq.globalAlpha;var aE=[];for(var aH=0;aH<ap;aH++){var ao=av[aH];aE.push(ao.offset*am+ax+" "+ao.color)}ai.push('<g_vml_:fill type="',aj.type_,'"',' method="none" focus="100%"',' color="',au,'"',' color2="',at,'"',' colors="',aE.join(","),'"',' opacity="',ay,'"',' g_o_:opacity2="',az,'"',' angle="',an,'"',' focusposition="',aF.x,",",aF.y,'" />')}else{if(aj instanceof T){if(j&&p){var ah=-aK.x;var aC=-aK.y;ai.push("<g_vml_:fill",' position="',ah/j*aB*aB,",",aC/p*aA*aA,'"',' type="tile"',' src="',aj.src_,'" />')}}else{var aL=F(aq.fillStyle);var aw=aL.color;var aG=aL.alpha*aq.globalAlpha;ai.push('<g_vml_:fill color="',aw,'" opacity="',aG,'" />')}}}q.fill=function(){this.stroke(true)};q.closePath=function(){this.currentPath_.push({type:"close"})};function V(j,Z,p){var i=j.m_;return{x:d*(Z*i[0][0]+p*i[1][0]+i[2][0])-f,y:d*(Z*i[0][1]+p*i[1][1]+i[2][1])-f}}q.save=function(){var i={};v(this,i);this.aStack_.push(i);this.mStack_.push(this.m_);this.m_=J(B(),this.m_)};q.restore=function(){if(this.aStack_.length){v(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function h(i){return isFinite(i[0][0])&&isFinite(i[0][1])&&isFinite(i[1][0])&&isFinite(i[1][1])&&isFinite(i[2][0])&&isFinite(i[2][1])}function aa(j,i,p){if(!h(i)){return}j.m_=i;if(p){var Z=i[0][0]*i[1][1]-i[0][1]*i[1][0];j.lineScale_=N(H(Z))}}q.translate=function(m,j){var i=[[1,0,0],[0,1,0],[m,j,1]];aa(this,J(i,this.m_),false)};q.rotate=function(j){var p=A(j);var m=l(j);var i=[[p,m,0],[-m,p,0],[0,0,1]];aa(this,J(i,this.m_),false)};q.scale=function(m,j){this.arcScaleX_*=m;this.arcScaleY_*=j;var i=[[m,0,0],[0,j,0],[0,0,1]];aa(this,J(i,this.m_),true)};q.transform=function(Z,p,ah,ag,j,i){var m=[[Z,p,0],[ah,ag,0],[j,i,1]];aa(this,J(m,this.m_),true)};q.setTransform=function(ag,Z,ai,ah,p,j){var i=[[ag,Z,0],[ai,ah,0],[p,j,1]];aa(this,i,true)};q.drawText_=function(am,ak,aj,ap,ai){var ao=this.m_,at=1000,j=0,ar=at,ah={x:0,y:0},ag=[];var i=u(E(this.font),this.element_);var p=ac(i);var au=this.element_.currentStyle;var Z=this.textAlign.toLowerCase();switch(Z){case"left":case"center":case"right":break;case"end":Z=au.direction=="ltr"?"right":"left";break;case"start":Z=au.direction=="rtl"?"right":"left";break;default:Z="left"}switch(this.textBaseline){case"hanging":case"top":ah.y=i.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":ah.y=-i.size/2.25;break}switch(Z){case"right":j=at;ar=0.05;break;case"center":j=ar=at/2;break}var aq=V(this,ak+ah.x,aj+ah.y);ag.push('<g_vml_:line from="',-j,' 0" to="',ar,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!ai,'" stroked="',!!ai,'" style="position:absolute;width:1px;height:1px;">');if(ai){w(this,ag)}else{G(this,ag,{x:-j,y:0},{x:ar,y:i.size})}var an=ao[0][0].toFixed(3)+","+ao[1][0].toFixed(3)+","+ao[0][1].toFixed(3)+","+ao[1][1].toFixed(3)+",0,0";var al=n(aq.x/d+1-ao[0][0])+","+n(aq.y/d-2*ao[1][0]);ag.push('<g_vml_:skew on="t" matrix="',an,'" ',' offset="',al,'" origin="',j,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',af(am),'" style="v-text-align:',Z,";font:",af(p),'" /></g_vml_:line>');this.element_.insertAdjacentHTML("beforeEnd",ag.join(""))};q.fillText=function(m,i,p,j){this.drawText_(m,i,p,j,false)};q.strokeText=function(m,i,p,j){this.drawText_(m,i,p,j,true)};q.measureText=function(m){if(!this.textMeasureEl_){var i='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",i);this.textMeasureEl_=this.element_.lastChild}var j=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(j.createTextNode(m));return{width:this.textMeasureEl_.offsetWidth}};q.clip=function(){};q.arcTo=function(){};q.createPattern=function(j,i){return new T(j,i)};function U(i){this.type_=i;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}U.prototype.addColorStop=function(j,i){i=F(i);this.colors_.push({offset:j,color:i.color,alpha:i.alpha})};function T(j,i){Q(j);switch(i){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=i;break;default:O("SYNTAX_ERR")}this.src_=j.src;this.width_=j.width;this.height_=j.height}function O(i){throw new P(i)}function Q(i){if(!i||i.nodeType!=1||i.tagName!="IMG"){O("TYPE_MISMATCH_ERR")}if(i.readyState!="complete"){O("INVALID_STATE_ERR")}}function P(i){this.code=this[i];this.message=i+": DOM Exception "+this.code}var X=P.prototype=new Error;X.INDEX_SIZE_ERR=1;X.DOMSTRING_SIZE_ERR=2;X.HIERARCHY_REQUEST_ERR=3;X.WRONG_DOCUMENT_ERR=4;X.INVALID_CHARACTER_ERR=5;X.NO_DATA_ALLOWED_ERR=6;X.NO_MODIFICATION_ALLOWED_ERR=7;X.NOT_FOUND_ERR=8;X.NOT_SUPPORTED_ERR=9;X.INUSE_ATTRIBUTE_ERR=10;X.INVALID_STATE_ERR=11;X.SYNTAX_ERR=12;X.INVALID_MODIFICATION_ERR=13;X.NAMESPACE_ERR=14;X.INVALID_ACCESS_ERR=15;X.VALIDATION_ERR=16;X.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=e;CanvasRenderingContext2D=D;CanvasGradient=U;CanvasPattern=T;DOMException=P;G_vmlCanvasManager._version=888})()}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/gpl-2.0.txt b/wqflask/wqflask/static/packages/jqplot/gpl-2.0.txt
deleted file mode 100644
index 864c6b8b..00000000
--- a/wqflask/wqflask/static/packages/jqplot/gpl-2.0.txt
+++ /dev/null
@@ -1,280 +0,0 @@
-Title: GPL Version 2
-
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 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/wqflask/wqflask/static/packages/jqplot/jqPlotCssStyling.txt b/wqflask/wqflask/static/packages/jqplot/jqPlotCssStyling.txt
deleted file mode 100644
index 041035d2..00000000
--- a/wqflask/wqflask/static/packages/jqplot/jqPlotCssStyling.txt
+++ /dev/null
@@ -1,53 +0,0 @@
-Title: 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-target - Styles for the plot target div. These will be cascaded down
-to all plot elements according to css rules.
-
-.jqplot-axis - Styles for all axes
-
-.jqplot-xaxis - Styles applied to the primary x axis only.
-
-.jqplot-yaxis - Styles 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-tick - Styles applied to all axis ticks
-
-.jqplot-xaxis-tick - Styles applied to primary x axis ticks only.
-
-.jqplot-x2axis-tick - Styles applied to secondary x axis ticks only.
-
-.jqplot-yaxis-tick - Styles applied to primary y axis ticks only.
-
-.jqplot-y2axis-tick - Styles applied to secondary y axis ticks only.
-
-table.jqplot-table-legend - Styles applied to the legend box table.
-
-.jqplot-title - Styles applied to the title.
-
-.jqplot-cursor-tooltip - Styles applied to the cursor tooltip
-
-.jqplot-highlighter-tooltip - Styles applied to the highlighter tooltip.
-
-div.jqplot-table-legend-swatch - the div element used for the colored swatch on the legend.
-
-Note that axes will be assigned 2 classes like: class=".jqplot-axis .jqplot-xaxis". \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/jqPlotOptions.txt b/wqflask/wqflask/static/packages/jqplot/jqPlotOptions.txt
deleted file mode 100644
index d2d1e68c..00000000
--- a/wqflask/wqflask/static/packages/jqplot/jqPlotOptions.txt
+++ /dev/null
@@ -1,276 +0,0 @@
-Title: 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
- }
- }
-}
-}}} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.css b/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.css
deleted file mode 100644
index d30bafb1..00000000
--- a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.css
+++ /dev/null
@@ -1,259 +0,0 @@
-/*rules for the plot target div. These will be cascaded down to all plot elements according to css rules*/
-.jqplot-target {
- position: relative;
- color: #666666;
- font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
- font-size: 1em;
-/* height: 300px;
- width: 400px;*/
-}
-
-/*rules applied to all axes*/
-.jqplot-axis {
- font-size: 0.75em;
-}
-
-.jqplot-xaxis {
- margin-top: 10px;
-}
-
-.jqplot-x2axis {
- margin-bottom: 10px;
-}
-
-.jqplot-yaxis {
- margin-right: 10px;
-}
-
-.jqplot-y2axis, .jqplot-y3axis, .jqplot-y4axis, .jqplot-y5axis, .jqplot-y6axis, .jqplot-y7axis, .jqplot-y8axis, .jqplot-y9axis, .jqplot-yMidAxis {
- margin-left: 10px;
- margin-right: 10px;
-}
-
-/*rules applied to all axis tick divs*/
-.jqplot-axis-tick, .jqplot-xaxis-tick, .jqplot-yaxis-tick, .jqplot-x2axis-tick, .jqplot-y2axis-tick, .jqplot-y3axis-tick, .jqplot-y4axis-tick, .jqplot-y5axis-tick, .jqplot-y6axis-tick, .jqplot-y7axis-tick, .jqplot-y8axis-tick, .jqplot-y9axis-tick, .jqplot-yMidAxis-tick {
- position: absolute;
- white-space: pre;
-}
-
-
-.jqplot-xaxis-tick {
- top: 0px;
- /* initial position untill tick is drawn in proper place */
- left: 15px;
-/* padding-top: 10px;*/
- vertical-align: top;
-}
-
-.jqplot-x2axis-tick {
- bottom: 0px;
- /* initial position untill tick is drawn in proper place */
- left: 15px;
-/* padding-bottom: 10px;*/
- vertical-align: bottom;
-}
-
-.jqplot-yaxis-tick {
- right: 0px;
- /* initial position untill tick is drawn in proper place */
- top: 15px;
-/* padding-right: 10px;*/
- text-align: right;
-}
-
-.jqplot-yaxis-tick.jqplot-breakTick {
- right: -20px;
- margin-right: 0px;
- padding:1px 5px 1px 5px;
-/* background-color: white;*/
- z-index: 2;
- font-size: 1.5em;
-}
-
-.jqplot-y2axis-tick, .jqplot-y3axis-tick, .jqplot-y4axis-tick, .jqplot-y5axis-tick, .jqplot-y6axis-tick, .jqplot-y7axis-tick, .jqplot-y8axis-tick, .jqplot-y9axis-tick {
- left: 0px;
- /* initial position untill tick is drawn in proper place */
- top: 15px;
-/* padding-left: 10px;*/
-/* padding-right: 15px;*/
- text-align: left;
-}
-
-.jqplot-yMidAxis-tick {
- text-align: center;
- white-space: nowrap;
-}
-
-.jqplot-xaxis-label {
- margin-top: 10px;
- font-size: 11pt;
- position: absolute;
-}
-
-.jqplot-x2axis-label {
- margin-bottom: 10px;
- font-size: 11pt;
- position: absolute;
-}
-
-.jqplot-yaxis-label {
- margin-right: 10px;
-/* text-align: center;*/
- font-size: 11pt;
- position: absolute;
-}
-
-.jqplot-yMidAxis-label {
- font-size: 11pt;
- position: absolute;
-}
-
-.jqplot-y2axis-label, .jqplot-y3axis-label, .jqplot-y4axis-label, .jqplot-y5axis-label, .jqplot-y6axis-label, .jqplot-y7axis-label, .jqplot-y8axis-label, .jqplot-y9axis-label {
-/* text-align: center;*/
- font-size: 11pt;
- margin-left: 10px;
- position: absolute;
-}
-
-.jqplot-meterGauge-tick {
- font-size: 0.75em;
- color: #999999;
-}
-
-.jqplot-meterGauge-label {
- font-size: 1em;
- color: #999999;
-}
-
-table.jqplot-table-legend {
- margin-top: 12px;
- margin-bottom: 12px;
- margin-left: 12px;
- margin-right: 12px;
-}
-
-table.jqplot-table-legend, table.jqplot-cursor-legend {
- background-color: rgba(255,255,255,0.6);
- border: 1px solid #cccccc;
- position: absolute;
- font-size: 0.75em;
-}
-
-td.jqplot-table-legend {
- vertical-align:middle;
-}
-
-/*
-These rules could be used instead of assigning
-element styles and relying on js object properties.
-*/
-
-/*
-td.jqplot-table-legend-swatch {
- padding-top: 0.5em;
- text-align: center;
-}
-
-tr.jqplot-table-legend:first td.jqplot-table-legend-swatch {
- padding-top: 0px;
-}
-*/
-
-td.jqplot-seriesToggle:hover, td.jqplot-seriesToggle:active {
- cursor: pointer;
-}
-
-.jqplot-table-legend .jqplot-series-hidden {
- text-decoration: line-through;
-}
-
-div.jqplot-table-legend-swatch-outline {
- border: 1px solid #cccccc;
- padding:1px;
-}
-
-div.jqplot-table-legend-swatch {
- width:0px;
- height:0px;
- border-top-width: 5px;
- border-bottom-width: 5px;
- border-left-width: 6px;
- border-right-width: 6px;
- border-top-style: solid;
- border-bottom-style: solid;
- border-left-style: solid;
- border-right-style: solid;
-}
-
-.jqplot-title {
- top: 0px;
- left: 0px;
- padding-bottom: 0.5em;
- font-size: 1.2em;
-}
-
-table.jqplot-cursor-tooltip {
- border: 1px solid #cccccc;
- font-size: 0.75em;
-}
-
-
-.jqplot-cursor-tooltip {
- border: 1px solid #cccccc;
- font-size: 0.75em;
- white-space: nowrap;
- background: rgba(208,208,208,0.5);
- padding: 1px;
-}
-
-.jqplot-highlighter-tooltip, .jqplot-canvasOverlay-tooltip {
- border: 1px solid #cccccc;
- font-size: 0.75em;
- white-space: nowrap;
- background: rgba(208,208,208,0.5);
- padding: 1px;
-}
-
-.jqplot-point-label {
- font-size: 0.75em;
- z-index: 2;
-}
-
-td.jqplot-cursor-legend-swatch {
- vertical-align: middle;
- text-align: center;
-}
-
-div.jqplot-cursor-legend-swatch {
- width: 1.2em;
- height: 0.7em;
-}
-
-.jqplot-error {
-/* Styles added to the plot target container when there is an error go here.*/
- text-align: center;
-}
-
-.jqplot-error-message {
-/* Styling of the custom error message div goes here.*/
- position: relative;
- top: 46%;
- display: inline-block;
-}
-
-div.jqplot-bubble-label {
- font-size: 0.8em;
-/* background: rgba(90%, 90%, 90%, 0.15);*/
- padding-left: 2px;
- padding-right: 2px;
- color: rgb(20%, 20%, 20%);
-}
-
-div.jqplot-bubble-label.jqplot-bubble-label-highlight {
- background: rgba(90%, 90%, 90%, 0.7);
-}
-
-div.jqplot-noData-container {
- text-align: center;
- background-color: rgba(96%, 96%, 96%, 0.3);
-}
diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.js b/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.js
deleted file mode 100644
index c77c353d..00000000
--- a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.js
+++ /dev/null
@@ -1,11381 +0,0 @@
-/**
- * Title: jqPlot Charts
- *
- * Pure JavaScript plotting plugin for jQuery.
- *
- * About: Version
- *
- * version: 1.0.4
- * revision: 1121
- *
- * About: Copyright & License
- *
- * Copyright (c) 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."
- *
- *
- * About: 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>.
- *
- * About: Usage
- *
- * See <jqPlot Usage>
- *
- * About: Available Options
- *
- * See <jqPlot Options> for a list of options available thorugh the options object (not complete yet!)
- *
- * About: Options Usage
- *
- * See <Options Tutorial>
- *
- * About: Changes
- *
- * See <Change Log>
- *
- */
-
-(function($) {
- // make sure undefined is undefined
- var undefined;
-
- $.fn.emptyForce = function() {
- for ( var i = 0, elem; (elem = $(this)[i]) != null; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- $.cleanData( elem.getElementsByTagName("*") );
- }
-
- // Remove any remaining nodes
- if ($.jqplot.use_excanvas) {
- elem.outerHTML = "";
- }
- else {
- while ( elem.firstChild ) {
- elem.removeChild( elem.firstChild );
- }
- }
-
- elem = null;
- }
-
- return $(this);
- };
-
- $.fn.removeChildForce = function(parent) {
- while ( parent.firstChild ) {
- this.removeChildForce( parent.firstChild );
- parent.removeChild( parent.firstChild );
- }
- };
-
- $.fn.jqplot = function() {
- var datas = [];
- var options = [];
- // see how many data arrays we have
- for (var i=0, l=arguments.length; i<l; i++) {
- if ($.isArray(arguments[i])) {
- datas.push(arguments[i]);
- }
- else if ($.isPlainObject(arguments[i])) {
- options.push(arguments[i]);
- }
- }
-
- return this.each(function(index) {
- var tid,
- plot,
- $this = $(this),
- dl = datas.length,
- ol = options.length,
- data,
- opts;
-
- if (index < dl) {
- data = datas[index];
- }
- else {
- data = dl ? datas[dl-1] : null;
- }
-
- if (index < ol) {
- opts = options[index];
- }
- else {
- opts = ol ? options[ol-1] : null;
- }
-
- // does el have an id?
- // if not assign it one.
- tid = $this.attr('id');
- if (tid === undefined) {
- tid = 'jqplot_target_' + $.jqplot.targetCounter++;
- $this.attr('id', tid);
- }
-
- plot = $.jqplot(tid, data, opts);
-
- $this.data('jqplot', plot);
- });
- };
-
-
- /**
- * Namespace: $.jqplot
- * jQuery function called by the user to create a plot.
- *
- * Parameters:
- * target - ID of target element to render the plot into.
- * data - an array of data series.
- * options - user defined options object. See the individual classes for available options.
- *
- * Properties:
- * config - object to hold configuration information for jqPlot plot object.
- *
- * attributes:
- * enablePlugins - False 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.
- * defaultHeight - Default height for plots where no css height specification exists. This
- * is a jqplot wide default.
- * defaultWidth - Default height for plots where no css height specification exists. This
- * is a jqplot wide default.
- */
-
- $.jqplot = function(target, data, options) {
- var _data = null, _options = null;
-
- if (arguments.length === 3) {
- _data = data;
- _options = options;
- }
-
- else if (arguments.length === 2) {
- if ($.isArray(data)) {
- _data = data;
- }
-
- else if ($.isPlainObject(data)) {
- _options = data;
- }
- }
-
- if (_data === null && _options !== null && _options.data) {
- _data = _options.data;
- }
-
- var plot = new jqPlot();
- // remove any error class that may be stuck on target.
- $('#'+target).removeClass('jqplot-error');
-
- if ($.jqplot.config.catchErrors) {
- try {
- plot.init(target, _data, _options);
- plot.draw();
- plot.themeEngine.init.call(plot);
- return plot;
- }
- catch(e) {
- var msg = $.jqplot.config.errorMessage || e.message;
- $('#'+target).append('<div class="jqplot-error-message">'+msg+'</div>');
- $('#'+target).addClass('jqplot-error');
- document.getElementById(target).style.background = $.jqplot.config.errorBackground;
- document.getElementById(target).style.border = $.jqplot.config.errorBorder;
- document.getElementById(target).style.fontFamily = $.jqplot.config.errorFontFamily;
- document.getElementById(target).style.fontSize = $.jqplot.config.errorFontSize;
- document.getElementById(target).style.fontStyle = $.jqplot.config.errorFontStyle;
- document.getElementById(target).style.fontWeight = $.jqplot.config.errorFontWeight;
- }
- }
- else {
- plot.init(target, _data, _options);
- plot.draw();
- plot.themeEngine.init.call(plot);
- return plot;
- }
- };
-
- $.jqplot.version = "1.0.4";
- $.jqplot.revision = "1121";
-
- $.jqplot.targetCounter = 1;
-
- // canvas manager to reuse canvases on the plot.
- // Should help solve problem of canvases not being freed and
- // problem of waiting forever for firefox to decide to free memory.
- $.jqplot.CanvasManager = function() {
- // canvases are managed globally so that they can be reused
- // across plots after they have been freed
- if (typeof $.jqplot.CanvasManager.canvases == 'undefined') {
- $.jqplot.CanvasManager.canvases = [];
- $.jqplot.CanvasManager.free = [];
- }
-
- var myCanvases = [];
-
- this.getCanvas = function() {
- var canvas;
- var makeNew = true;
-
- if (!$.jqplot.use_excanvas) {
- for (var i = 0, l = $.jqplot.CanvasManager.canvases.length; i < l; i++) {
- if ($.jqplot.CanvasManager.free[i] === true) {
- makeNew = false;
- canvas = $.jqplot.CanvasManager.canvases[i];
- // $(canvas).removeClass('jqplot-canvasManager-free').addClass('jqplot-canvasManager-inuse');
- $.jqplot.CanvasManager.free[i] = false;
- myCanvases.push(i);
- break;
- }
- }
- }
-
- if (makeNew) {
- canvas = document.createElement('canvas');
- myCanvases.push($.jqplot.CanvasManager.canvases.length);
- $.jqplot.CanvasManager.canvases.push(canvas);
- $.jqplot.CanvasManager.free.push(false);
- }
-
- return canvas;
- };
-
- // this method has to be used after settings the dimesions
- // on the element returned by getCanvas()
- this.initCanvas = function(canvas) {
- if ($.jqplot.use_excanvas) {
- return window.G_vmlCanvasManager.initElement(canvas);
- }
- return canvas;
- };
-
- this.freeAllCanvases = function() {
- for (var i = 0, l=myCanvases.length; i < l; i++) {
- this.freeCanvas(myCanvases[i]);
- }
- myCanvases = [];
- };
-
- this.freeCanvas = function(idx) {
- if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) {
- // excanvas can't be reused, but properly unset
- window.G_vmlCanvasManager.uninitElement($.jqplot.CanvasManager.canvases[idx]);
- $.jqplot.CanvasManager.canvases[idx] = null;
- }
- else {
- var canvas = $.jqplot.CanvasManager.canvases[idx];
- canvas.getContext('2d').clearRect(0, 0, canvas.width, canvas.height);
- $(canvas).unbind().removeAttr('class').removeAttr('style');
- // Style attributes seemed to be still hanging around. wierd. Some ticks
- // still retained a left: 0px attribute after reusing a canvas.
- $(canvas).css({left: '', top: '', position: ''});
- // setting size to 0 may save memory of unused canvases?
- canvas.width = 0;
- canvas.height = 0;
- $.jqplot.CanvasManager.free[idx] = true;
- }
- };
-
- };
-
-
- // Convienence function that won't hang IE or FF without FireBug.
- $.jqplot.log = function() {
- if (window.console) {
- window.console.log.apply(window.console, arguments);
- }
- };
-
- $.jqplot.config = {
- addDomReference: false,
- enablePlugins:false,
- defaultHeight:300,
- defaultWidth:400,
- UTCAdjust:false,
- timezoneOffset: new Date(new Date().getTimezoneOffset() * 60000),
- errorMessage: '',
- errorBackground: '',
- errorBorder: '',
- errorFontFamily: '',
- errorFontSize: '',
- errorFontStyle: '',
- errorFontWeight: '',
- catchErrors: false,
- defaultTickFormatString: "%.1f",
- defaultColors: [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"],
- defaultNegativeColors: [ "#498991", "#C08840", "#9F9274", "#546D61", "#646C4A", "#6F6621", "#6E3F5F", "#4F64B0", "#A89050", "#C45923", "#187399", "#945381", "#959E5C", "#C7AF7B", "#478396", "#907294"],
- dashLength: 4,
- gapLength: 4,
- dotGapLength: 2.5,
- srcLocation: 'jqplot/src/',
- pluginLocation: 'jqplot/src/plugins/'
- };
-
-
- $.jqplot.arrayMax = function( array ){
- return Math.max.apply( Math, array );
- };
-
- $.jqplot.arrayMin = function( array ){
- return Math.min.apply( Math, array );
- };
-
- $.jqplot.enablePlugins = $.jqplot.config.enablePlugins;
-
- // canvas related tests taken from modernizer:
- // Copyright (c) 2009 - 2010 Faruk Ates.
- // http://www.modernizr.com
-
- $.jqplot.support_canvas = function() {
- if (typeof $.jqplot.support_canvas.result == 'undefined') {
- $.jqplot.support_canvas.result = !!document.createElement('canvas').getContext;
- }
- return $.jqplot.support_canvas.result;
- };
-
- $.jqplot.support_canvas_text = function() {
- if (typeof $.jqplot.support_canvas_text.result == 'undefined') {
- if (window.G_vmlCanvasManager !== undefined && window.G_vmlCanvasManager._version > 887) {
- $.jqplot.support_canvas_text.result = true;
- }
- else {
- $.jqplot.support_canvas_text.result = !!(document.createElement('canvas').getContext && typeof document.createElement('canvas').getContext('2d').fillText == 'function');
- }
-
- }
- return $.jqplot.support_canvas_text.result;
- };
-
- $.jqplot.use_excanvas = ($.browser.msie && !$.jqplot.support_canvas()) ? true : false;
-
- /**
- *
- * Hooks: jqPlot Pugin Hooks
- *
- * $.jqplot.preInitHooks - called before initialization.
- * $.jqplot.postInitHooks - called after initialization.
- * $.jqplot.preParseOptionsHooks - called before user options are parsed.
- * $.jqplot.postParseOptionsHooks - called after user options are parsed.
- * $.jqplot.preDrawHooks - called before plot draw.
- * $.jqplot.postDrawHooks - called after plot draw.
- * $.jqplot.preDrawSeriesHooks - called before each series is drawn.
- * $.jqplot.postDrawSeriesHooks - called after each series is drawn.
- * $.jqplot.preDrawLegendHooks - called before the legend is drawn.
- * $.jqplot.addLegendRowHooks - called at the end of legend draw, so plugins
- * can add rows to the legend table.
- * $.jqplot.preSeriesInitHooks - called before series is initialized.
- * $.jqplot.postSeriesInitHooks - called after series is initialized.
- * $.jqplot.preParseSeriesOptionsHooks - called before series related options
- * are parsed.
- * $.jqplot.postParseSeriesOptionsHooks - called after series related options
- * are parsed.
- * $.jqplot.eventListenerHooks - called at the end of plot drawing, binds
- * listeners to the event canvas which lays on top of the grid area.
- * $.jqplot.preDrawSeriesShadowHooks - called before series shadows are drawn.
- * $.jqplot.postDrawSeriesShadowHooks - called after series shadows are drawn.
- *
- */
-
- $.jqplot.preInitHooks = [];
- $.jqplot.postInitHooks = [];
- $.jqplot.preParseOptionsHooks = [];
- $.jqplot.postParseOptionsHooks = [];
- $.jqplot.preDrawHooks = [];
- $.jqplot.postDrawHooks = [];
- $.jqplot.preDrawSeriesHooks = [];
- $.jqplot.postDrawSeriesHooks = [];
- $.jqplot.preDrawLegendHooks = [];
- $.jqplot.addLegendRowHooks = [];
- $.jqplot.preSeriesInitHooks = [];
- $.jqplot.postSeriesInitHooks = [];
- $.jqplot.preParseSeriesOptionsHooks = [];
- $.jqplot.postParseSeriesOptionsHooks = [];
- $.jqplot.eventListenerHooks = [];
- $.jqplot.preDrawSeriesShadowHooks = [];
- $.jqplot.postDrawSeriesShadowHooks = [];
-
- // A superclass holding some common properties and methods.
- $.jqplot.ElemContainer = function() {
- this._elem;
- this._plotWidth;
- this._plotHeight;
- this._plotDimensions = {height:null, width:null};
- };
-
- $.jqplot.ElemContainer.prototype.createElement = function(el, offsets, clss, cssopts, attrib) {
- this._offsets = offsets;
- var klass = clss || 'jqplot';
- var elem = document.createElement(el);
- this._elem = $(elem);
- this._elem.addClass(klass);
- this._elem.css(cssopts);
- this._elem.attr(attrib);
- // avoid memory leak;
- elem = null;
- return this._elem;
- };
-
- $.jqplot.ElemContainer.prototype.getWidth = function() {
- if (this._elem) {
- return this._elem.outerWidth(true);
- }
- else {
- return null;
- }
- };
-
- $.jqplot.ElemContainer.prototype.getHeight = function() {
- if (this._elem) {
- return this._elem.outerHeight(true);
- }
- else {
- return null;
- }
- };
-
- $.jqplot.ElemContainer.prototype.getPosition = function() {
- if (this._elem) {
- return this._elem.position();
- }
- else {
- return {top:null, left:null, bottom:null, right:null};
- }
- };
-
- $.jqplot.ElemContainer.prototype.getTop = function() {
- return this.getPosition().top;
- };
-
- $.jqplot.ElemContainer.prototype.getLeft = function() {
- return this.getPosition().left;
- };
-
- $.jqplot.ElemContainer.prototype.getBottom = function() {
- return this._elem.css('bottom');
- };
-
- $.jqplot.ElemContainer.prototype.getRight = function() {
- return this._elem.css('right');
- };
-
-
- /**
- * Class: 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.
- *
- */
- function Axis(name) {
- $.jqplot.ElemContainer.call(this);
- // Group: 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.
- this.name = name;
- this._series = [];
- // prop: show
- // Wether to display the axis on the graph.
- this.show = false;
- // prop: tickRenderer
- // A class of a rendering engine for creating the ticks labels displayed on the plot,
- // See <$.jqplot.AxisTickRenderer>.
- this.tickRenderer = $.jqplot.AxisTickRenderer;
- // prop: tickOptions
- // Options that will be passed to the tickRenderer, see <$.jqplot.AxisTickRenderer> options.
- this.tickOptions = {};
- // prop: labelRenderer
- // A class of a rendering engine for creating an axis label.
- this.labelRenderer = $.jqplot.AxisLabelRenderer;
- // prop: labelOptions
- // Options passed to the label renderer.
- this.labelOptions = {};
- // prop: label
- // Label for the axis
- this.label = null;
- // prop: showLabel
- // true to show the axis label.
- this.showLabel = true;
- // prop: min
- // minimum value of the axis (in data units, not pixels).
- this.min = null;
- // prop: max
- // maximum value of the axis (in data units, not pixels).
- this.max = null;
- // prop: autoscale
- // DEPRECATED
- // the default scaling algorithm produces superior results.
- this.autoscale = false;
- // prop: pad
- // 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.
- this.pad = 1.2;
- // prop: padMax
- // 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.
- this.padMax = null;
- // prop: padMin
- // 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.
- this.padMin = null;
- // prop: 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.
- this.ticks = [];
- // prop: numberTicks
- // Desired number of ticks. Default is to compute automatically.
- this.numberTicks;
- // prop: tickInterval
- // number of units between ticks. Mutually exclusive with numberTicks.
- this.tickInterval;
- // prop: renderer
- // 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.LinearAxisRenderer;
- // prop: rendererOptions
- // renderer specific options. See <$.jqplot.LinearAxisRenderer> for options.
- this.rendererOptions = {};
- // prop: showTicks
- // Wether to show the ticks (both marks and labels) or not.
- // Will not override showMark and showLabel options if specified on the ticks themselves.
- this.showTicks = true;
- // prop: showTickMarks
- // Wether to show the tick marks (line crossing grid) or not.
- // Overridden by showTicks and showMark option of tick itself.
- this.showTickMarks = true;
- // prop: showMinorTicks
- // Wether or not to show minor ticks. This is renderer dependent.
- this.showMinorTicks = true;
- // prop: drawMajorGridlines
- // True to draw gridlines for major axis ticks.
- this.drawMajorGridlines = true;
- // prop: drawMinorGridlines
- // True to draw gridlines for minor ticks.
- this.drawMinorGridlines = false;
- // prop: drawMajorTickMarks
- // True to draw tick marks for major axis ticks.
- this.drawMajorTickMarks = true;
- // prop: drawMinorTickMarks
- // True to draw tick marks for minor ticks. This is renderer dependent.
- this.drawMinorTickMarks = true;
- // prop: useSeriesColor
- // Use the color of the first series associated with this axis for the
- // tick marks and line bordering this axis.
- this.useSeriesColor = false;
- // prop: borderWidth
- // width of line stroked at the border of the axis. Defaults
- // to the width of the grid boarder.
- this.borderWidth = null;
- // prop: borderColor
- // color of the border adjacent to the axis. Defaults to grid border color.
- this.borderColor = null;
- // prop: scaleToHiddenSeries
- // True to include hidden series when computing axes bounds and scaling.
- this.scaleToHiddenSeries = false;
- // minimum and maximum values on the axis.
- this._dataBounds = {min:null, max:null};
- // statistics (min, max, mean) as well as actual data intervals for each series attached to axis.
- // holds collection of {intervals:[], min:, max:, mean: } objects for each series on axis.
- this._intervalStats = [];
- // pixel position from the top left of the min value and max value on the axis.
- this._offsets = {min:null, max:null};
- this._ticks=[];
- this._label = null;
- // prop: syncTicks
- // 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.
- this.syncTicks = null;
- // prop: tickSpacing
- // Approximate pixel spacing between ticks on graph. Used during autoscaling.
- // This number will be an upper bound, actual spacing will be less.
- this.tickSpacing = 75;
- // Properties to hold the original values for min, max, ticks, tickInterval and numberTicks
- // so they can be restored if altered by plugins.
- this._min = null;
- this._max = null;
- this._tickInterval = null;
- this._numberTicks = null;
- this.__ticks = null;
- // hold original user options.
- this._options = {};
- }
-
- Axis.prototype = new $.jqplot.ElemContainer();
- Axis.prototype.constructor = Axis;
-
- Axis.prototype.init = function() {
- if ($.isFunction(this.renderer)) {
- this.renderer = new this.renderer();
- }
- // set the axis name
- this.tickOptions.axis = this.name;
- // if showMark or showLabel tick options not specified, use value of axis option.
- // showTicks overrides showTickMarks.
- if (this.tickOptions.showMark == null) {
- this.tickOptions.showMark = this.showTicks;
- }
- if (this.tickOptions.showMark == null) {
- this.tickOptions.showMark = this.showTickMarks;
- }
- if (this.tickOptions.showLabel == null) {
- this.tickOptions.showLabel = this.showTicks;
- }
-
- if (this.label == null || this.label == '') {
- this.showLabel = false;
- }
- else {
- this.labelOptions.label = this.label;
- }
- if (this.showLabel == false) {
- this.labelOptions.show = false;
- }
- // set the default padMax, padMin if not specified
- // special check, if no padding desired, padding
- // should be set to 1.0
- if (this.pad == 0) {
- this.pad = 1.0;
- }
- if (this.padMax == 0) {
- this.padMax = 1.0;
- }
- if (this.padMin == 0) {
- this.padMin = 1.0;
- }
- if (this.padMax == null) {
- this.padMax = (this.pad-1)/2 + 1;
- }
- if (this.padMin == null) {
- this.padMin = (this.pad-1)/2 + 1;
- }
- // now that padMin and padMax are correctly set, reset pad in case user has supplied
- // padMin and/or padMax
- this.pad = this.padMax + this.padMin - 1;
- if (this.min != null || this.max != null) {
- this.autoscale = false;
- }
- // if not set, sync ticks for y axes but not x by default.
- if (this.syncTicks == null && this.name.indexOf('y') > -1) {
- this.syncTicks = true;
- }
- else if (this.syncTicks == null){
- this.syncTicks = false;
- }
- this.renderer.init.call(this, this.rendererOptions);
-
- };
-
- Axis.prototype.draw = function(ctx, plot) {
- // Memory Leaks patch
- if (this.__ticks) {
- this.__ticks = null;
- }
-
- return this.renderer.draw.call(this, ctx, plot);
-
- };
-
- Axis.prototype.set = function() {
- this.renderer.set.call(this);
- };
-
- Axis.prototype.pack = function(pos, offsets) {
- if (this.show) {
- this.renderer.pack.call(this, pos, offsets);
- }
- // these properties should all be available now.
- if (this._min == null) {
- this._min = this.min;
- this._max = this.max;
- this._tickInterval = this.tickInterval;
- this._numberTicks = this.numberTicks;
- this.__ticks = this._ticks;
- }
- };
-
- // reset the axis back to original values if it has been scaled, zoomed, etc.
- Axis.prototype.reset = function() {
- this.renderer.reset.call(this);
- };
-
- Axis.prototype.resetScale = function(opts) {
- $.extend(true, this, {min: null, max: null, numberTicks: null, tickInterval: null, _ticks: [], ticks: []}, opts);
- this.resetDataBounds();
- };
-
- Axis.prototype.resetDataBounds = function() {
- // Go through all the series attached to this axis and find
- // the min/max bounds for this axis.
- var db = this._dataBounds;
- db.min = null;
- db.max = null;
- var l, s, d;
- // check for when to force min 0 on bar series plots.
- var doforce = (this.show) ? true : false;
- for (var i=0; i<this._series.length; i++) {
- s = this._series[i];
- if (s.show || this.scaleToHiddenSeries) {
- d = s._plotData;
- if (s._type === 'line' && s.renderer.bands.show && this.name.charAt(0) !== 'x') {
- d = [[0, s.renderer.bands._min], [1, s.renderer.bands._max]];
- }
-
- var minyidx = 1, maxyidx = 1;
-
- if (s._type != null && s._type == 'ohlc') {
- minyidx = 3;
- maxyidx = 2;
- }
-
- for (var j=0, l=d.length; j<l; j++) {
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- if ((d[j][0] != null && d[j][0] < db.min) || db.min == null) {
- db.min = d[j][0];
- }
- if ((d[j][0] != null && d[j][0] > db.max) || db.max == null) {
- db.max = d[j][0];
- }
- }
- else {
- if ((d[j][minyidx] != null && d[j][minyidx] < db.min) || db.min == null) {
- db.min = d[j][minyidx];
- }
- if ((d[j][maxyidx] != null && d[j][maxyidx] > db.max) || db.max == null) {
- db.max = d[j][maxyidx];
- }
- }
- }
-
- // Hack to not pad out bottom of bar plots unless user has specified a padding.
- // every series will have a chance to set doforce to false. once it is set to
- // false, it cannot be reset to true.
- // If any series attached to axis is not a bar, wont force 0.
- if (doforce && s.renderer.constructor !== $.jqplot.BarRenderer) {
- doforce = false;
- }
-
- else if (doforce && this._options.hasOwnProperty('forceTickAt0') && this._options.forceTickAt0 == false) {
- doforce = false;
- }
-
- else if (doforce && s.renderer.constructor === $.jqplot.BarRenderer) {
- if (s.barDirection == 'vertical' && this.name != 'xaxis' && this.name != 'x2axis') {
- if (this._options.pad != null || this._options.padMin != null) {
- doforce = false;
- }
- }
-
- else if (s.barDirection == 'horizontal' && (this.name == 'xaxis' || this.name == 'x2axis')) {
- if (this._options.pad != null || this._options.padMin != null) {
- doforce = false;
- }
- }
-
- }
- }
- }
-
- if (doforce && this.renderer.constructor === $.jqplot.LinearAxisRenderer && db.min >= 0) {
- this.padMin = 1.0;
- this.forceTickAt0 = true;
- }
- };
-
- /**
- * Class: 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.
- */
- function Legend(options) {
- $.jqplot.ElemContainer.call(this);
- // Group: Properties
-
- // prop: show
- // Wether to display the legend on the graph.
- this.show = false;
- // prop: location
- // Placement of the legend. one of the compass directions: nw, n, ne, e, se, s, sw, w
- this.location = 'ne';
- // prop: 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.
- this.labels = [];
- // prop: showLabels
- // true to show the label text on the legend.
- this.showLabels = true;
- // prop: showSwatch
- // true to show the color swatches on the legend.
- this.showSwatches = true;
- // prop: placement
- // "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.
- this.placement = "insideGrid";
- // prop: xoffset
- // DEPRECATED. Set the margins on the legend using the marginTop, marginLeft, etc.
- // properties or via CSS margin styling of the .jqplot-table-legend class.
- this.xoffset = 0;
- // prop: yoffset
- // DEPRECATED. Set the margins on the legend using the marginTop, marginLeft, etc.
- // properties or via CSS margin styling of the .jqplot-table-legend class.
- this.yoffset = 0;
- // prop: border
- // css spec for the border around the legend box.
- this.border;
- // prop: background
- // css spec for the background of the legend box.
- this.background;
- // prop: textColor
- // css color spec for the legend text.
- this.textColor;
- // prop: fontFamily
- // css font-family spec for the legend text.
- this.fontFamily;
- // prop: fontSize
- // css font-size spec for the legend text.
- this.fontSize ;
- // prop: rowSpacing
- // css padding-top spec for the rows in the legend.
- this.rowSpacing = '0.5em';
- // renderer
- // A class that will create a DOM object for the legend,
- // see <$.jqplot.TableLegendRenderer>.
- this.renderer = $.jqplot.TableLegendRenderer;
- // prop: rendererOptions
- // renderer specific options passed to the renderer.
- this.rendererOptions = {};
- // prop: predraw
- // Wether to draw the legend before the series or not.
- // Used with series specific legend renderers for pie, donut, mekko charts, etc.
- this.preDraw = false;
- // prop: marginTop
- // 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.
- this.marginTop = null;
- // prop: marginRight
- // 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.
- this.marginRight = null;
- // prop: marginBottom
- // 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.
- this.marginBottom = null;
- // prop: marginLeft
- // 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.
- this.marginLeft = null;
- // prop: escapeHtml
- // True to escape special characters with their html entity equivalents
- // in legend text. "<" becomes &lt; and so on, so html tags are not rendered.
- this.escapeHtml = false;
- this._series = [];
-
- $.extend(true, this, options);
- }
-
- Legend.prototype = new $.jqplot.ElemContainer();
- Legend.prototype.constructor = Legend;
-
- Legend.prototype.setOptions = function(options) {
- $.extend(true, this, options);
-
- // Try to emulate deprecated behaviour
- // if user has specified xoffset or yoffset, copy these to
- // the margin properties.
-
- if (this.placement == 'inside') {
- this.placement = 'insideGrid';
- }
-
- if (this.xoffset >0) {
- if (this.placement == 'insideGrid') {
- switch (this.location) {
- case 'nw':
- case 'w':
- case 'sw':
- if (this.marginLeft == null) {
- this.marginLeft = this.xoffset + 'px';
- }
- this.marginRight = '0px';
- break;
- case 'ne':
- case 'e':
- case 'se':
- default:
- if (this.marginRight == null) {
- this.marginRight = this.xoffset + 'px';
- }
- this.marginLeft = '0px';
- break;
- }
- }
- else if (this.placement == 'outside') {
- switch (this.location) {
- case 'nw':
- case 'w':
- case 'sw':
- if (this.marginRight == null) {
- this.marginRight = this.xoffset + 'px';
- }
- this.marginLeft = '0px';
- break;
- case 'ne':
- case 'e':
- case 'se':
- default:
- if (this.marginLeft == null) {
- this.marginLeft = this.xoffset + 'px';
- }
- this.marginRight = '0px';
- break;
- }
- }
- this.xoffset = 0;
- }
-
- if (this.yoffset >0) {
- if (this.placement == 'outside') {
- switch (this.location) {
- case 'sw':
- case 's':
- case 'se':
- if (this.marginTop == null) {
- this.marginTop = this.yoffset + 'px';
- }
- this.marginBottom = '0px';
- break;
- case 'ne':
- case 'n':
- case 'nw':
- default:
- if (this.marginBottom == null) {
- this.marginBottom = this.yoffset + 'px';
- }
- this.marginTop = '0px';
- break;
- }
- }
- else if (this.placement == 'insideGrid') {
- switch (this.location) {
- case 'sw':
- case 's':
- case 'se':
- if (this.marginBottom == null) {
- this.marginBottom = this.yoffset + 'px';
- }
- this.marginTop = '0px';
- break;
- case 'ne':
- case 'n':
- case 'nw':
- default:
- if (this.marginTop == null) {
- this.marginTop = this.yoffset + 'px';
- }
- this.marginBottom = '0px';
- break;
- }
- }
- this.yoffset = 0;
- }
-
- // TO-DO:
- // Handle case where offsets are < 0.
- //
- };
-
- Legend.prototype.init = function() {
- if ($.isFunction(this.renderer)) {
- this.renderer = new this.renderer();
- }
- this.renderer.init.call(this, this.rendererOptions);
- };
-
- Legend.prototype.draw = function(offsets, plot) {
- for (var i=0; i<$.jqplot.preDrawLegendHooks.length; i++){
- $.jqplot.preDrawLegendHooks[i].call(this, offsets);
- }
- return this.renderer.draw.call(this, offsets, plot);
- };
-
- Legend.prototype.pack = function(offsets) {
- this.renderer.pack.call(this, offsets);
- };
-
- /**
- * Class: 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:
- * text - text of the title.
- */
- function Title(text) {
- $.jqplot.ElemContainer.call(this);
- // Group: Properties
-
- // prop: text
- // text of the title;
- this.text = text;
- // prop: show
- // wether or not to show the title
- this.show = true;
- // prop: fontFamily
- // css font-family spec for the text.
- this.fontFamily;
- // prop: fontSize
- // css font-size spec for the text.
- this.fontSize ;
- // prop: textAlign
- // css text-align spec for the text.
- this.textAlign;
- // prop: textColor
- // css color spec for the text.
- this.textColor;
- // prop: renderer
- // A class for creating a DOM element for the title,
- // see <$.jqplot.DivTitleRenderer>.
- this.renderer = $.jqplot.DivTitleRenderer;
- // prop: rendererOptions
- // renderer specific options passed to the renderer.
- this.rendererOptions = {};
- // prop: escapeHtml
- // True to escape special characters with their html entity equivalents
- // in title text. "<" becomes &lt; and so on, so html tags are not rendered.
- this.escapeHtml = false;
- }
-
- Title.prototype = new $.jqplot.ElemContainer();
- Title.prototype.constructor = Title;
-
- Title.prototype.init = function() {
- if ($.isFunction(this.renderer)) {
- this.renderer = new this.renderer();
- }
- this.renderer.init.call(this, this.rendererOptions);
- };
-
- Title.prototype.draw = function(width) {
- return this.renderer.draw.call(this, width);
- };
-
- Title.prototype.pack = function() {
- this.renderer.pack.call(this);
- };
-
-
- /**
- * Class: 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.
- */
- function Series(options) {
- options = options || {};
- $.jqplot.ElemContainer.call(this);
- // Group: 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'}
- // > ]
- // > }
-
- // prop: show
- // wether or not to draw the series.
- this.show = true;
- // prop: xaxis
- // which x axis to use with this series, either 'xaxis' or 'x2axis'.
- this.xaxis = 'xaxis';
- this._xaxis;
- // prop: yaxis
- // which y axis to use with this series, either 'yaxis' or 'y2axis'.
- this.yaxis = 'yaxis';
- this._yaxis;
- this.gridBorderWidth = 2.0;
- // prop: renderer
- // A class of a renderer which will draw the series,
- // see <$.jqplot.LineRenderer>.
- this.renderer = $.jqplot.LineRenderer;
- // prop: rendererOptions
- // Options to pass on to the renderer.
- this.rendererOptions = {};
- this.data = [];
- this.gridData = [];
- // prop: label
- // Line label to use in the legend.
- this.label = '';
- // prop: showLabel
- // true to show label for this series in the legend.
- this.showLabel = true;
- // prop: color
- // css color spec for the series
- this.color;
- // prop: negativeColor
- // css color spec used for filled (area) plots that are filled to zero and
- // the "useNegativeColors" option is true.
- this.negativeColor;
- // prop: lineWidth
- // width of the line in pixels. May have different meanings depending on renderer.
- this.lineWidth = 2.5;
- // prop: lineJoin
- // Canvas lineJoin style between segments of series.
- this.lineJoin = 'round';
- // prop: lineCap
- // Canvas lineCap style at ends of line.
- this.lineCap = 'round';
- // prop: linePattern
- // 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.
- this.linePattern = 'solid';
- this.shadow = true;
- // prop: shadowAngle
- // Shadow angle in degrees
- this.shadowAngle = 45;
- // prop: shadowOffset
- // Shadow offset from line in pixels
- this.shadowOffset = 1.25;
- // prop: shadowDepth
- // Number of times shadow is stroked, each stroke offset shadowOffset from the last.
- this.shadowDepth = 3;
- // prop: shadowAlpha
- // Alpha channel transparency of shadow. 0 = transparent.
- this.shadowAlpha = '0.1';
- // prop: breakOnNull
- // Wether line segments should be be broken at null value.
- // False will join point on either side of line.
- this.breakOnNull = false;
- // prop: markerRenderer
- // A class of a renderer which will draw marker (e.g. circle, square, ...) at the data points,
- // see <$.jqplot.MarkerRenderer>.
- this.markerRenderer = $.jqplot.MarkerRenderer;
- // prop: markerOptions
- // renderer specific options to pass to the markerRenderer,
- // see <$.jqplot.MarkerRenderer>.
- this.markerOptions = {};
- // prop: showLine
- // wether to actually draw the line or not. Series will still be renderered, even if no line is drawn.
- this.showLine = true;
- // prop: showMarker
- // wether or not to show the markers at the data points.
- this.showMarker = true;
- // prop: index
- // 0 based index of this series in the plot series array.
- this.index;
- // prop: fill
- // true or false, wether to fill under lines or in bars.
- // May not be implemented in all renderers.
- this.fill = false;
- // prop: fillColor
- // CSS color spec to use for fill under line. Defaults to line color.
- this.fillColor;
- // prop: fillAlpha
- // Alpha transparency to apply to the fill under the line.
- // Use this to adjust alpha separate from fill color.
- this.fillAlpha;
- // prop: fillAndStroke
- // If true will stroke the line (with color this.color) as well as fill under it.
- // Applies only when fill is true.
- this.fillAndStroke = false;
- // prop: disableStack
- // 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.
- this.disableStack = false;
- // _stack is set by the Plot if the plot is a stacked chart.
- // will stack lines or bars on top of one another to build a "mountain" style chart.
- // May not be implemented in all renderers.
- this._stack = false;
- // prop: neighborThreshold
- // how close or far (in pixels) the cursor must be from a point marker to detect the point.
- this.neighborThreshold = 4;
- // prop: fillToZero
- // true will force bar and filled series to fill toward zero on the fill Axis.
- this.fillToZero = false;
- // prop: fillToValue
- // fill a filled series to this value on the fill axis.
- // Works in conjunction with fillToZero, so that must be true.
- this.fillToValue = 0;
- // prop: fillAxis
- // 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.
- this.fillAxis = 'y';
- // prop: useNegativeColors
- // true to color negative values differently in filled and bar charts.
- this.useNegativeColors = true;
- this._stackData = [];
- // _plotData accounts for stacking. If plots not stacked, _plotData and data are same. If
- // stacked, _plotData is accumulation of stacking data.
- this._plotData = [];
- // _plotValues hold the individual x and y values that will be plotted for this series.
- this._plotValues = {x:[], y:[]};
- // statistics about the intervals between data points. Used for auto scaling.
- this._intervals = {x:{}, y:{}};
- // data from the previous series, for stacked charts.
- this._prevPlotData = [];
- this._prevGridData = [];
- this._stackAxis = 'y';
- this._primaryAxis = '_xaxis';
- // give each series a canvas to draw on. This should allow for redrawing speedups.
- this.canvas = new $.jqplot.GenericCanvas();
- this.shadowCanvas = new $.jqplot.GenericCanvas();
- this.plugins = {};
- // sum of y values in this series.
- this._sumy = 0;
- this._sumx = 0;
- this._type = '';
- }
-
- Series.prototype = new $.jqplot.ElemContainer();
- Series.prototype.constructor = Series;
-
- Series.prototype.init = function(index, gridbw, plot) {
- // weed out any null values in the data.
- this.index = index;
- this.gridBorderWidth = gridbw;
- var d = this.data;
- var temp = [], i, l;
- for (i=0, l=d.length; i<l; i++) {
- if (! this.breakOnNull) {
- if (d[i] == null || d[i][0] == null || d[i][1] == null) {
- continue;
- }
- else {
- temp.push(d[i]);
- }
- }
- else {
- // TODO: figure out what to do with null values
- // probably involve keeping nulls in data array
- // and then updating renderers to break line
- // when it hits null value.
- // For now, just keep value.
- temp.push(d[i]);
- }
- }
- this.data = temp;
-
- // parse the renderer options and apply default colors if not provided
- // Set color even if not shown, so series don't change colors when other
- // series on plot shown/hidden.
- if (!this.color) {
- this.color = plot.colorGenerator.get(this.index);
- }
- if (!this.negativeColor) {
- this.negativeColor = plot.negativeColorGenerator.get(this.index);
- }
-
-
- if (!this.fillColor) {
- this.fillColor = this.color;
- }
- if (this.fillAlpha) {
- var comp = $.jqplot.normalize2rgb(this.fillColor);
- var comp = $.jqplot.getColorComponents(comp);
- this.fillColor = 'rgba('+comp[0]+','+comp[1]+','+comp[2]+','+this.fillAlpha+')';
- }
- if ($.isFunction(this.renderer)) {
- this.renderer = new this.renderer();
- }
- this.renderer.init.call(this, this.rendererOptions, plot);
- this.markerRenderer = new this.markerRenderer();
- if (!this.markerOptions.color) {
- this.markerOptions.color = this.color;
- }
- if (this.markerOptions.show == null) {
- this.markerOptions.show = this.showMarker;
- }
- this.showMarker = this.markerOptions.show;
- // the markerRenderer is called within it's own scaope, don't want to overwrite series options!!
- this.markerRenderer.init(this.markerOptions);
- };
-
- // data - optional data point array to draw using this series renderer
- // gridData - optional grid data point array to draw using this series renderer
- // stackData - array of cumulative data for stacked plots.
- Series.prototype.draw = function(sctx, opts, plot) {
- var options = (opts == undefined) ? {} : opts;
- sctx = (sctx == undefined) ? this.canvas._ctx : sctx;
-
- var j, data, gridData;
-
- // hooks get called even if series not shown
- // we don't clear canvas here, it would wipe out all other series as well.
- for (j=0; j<$.jqplot.preDrawSeriesHooks.length; j++) {
- $.jqplot.preDrawSeriesHooks[j].call(this, sctx, options);
- }
- if (this.show) {
- this.renderer.setGridData.call(this, plot);
- if (!options.preventJqPlotSeriesDrawTrigger) {
- $(sctx.canvas).trigger('jqplotSeriesDraw', [this.data, this.gridData]);
- }
- data = [];
- if (options.data) {
- data = options.data;
- }
- else if (!this._stack) {
- data = this.data;
- }
- else {
- data = this._plotData;
- }
- gridData = options.gridData || this.renderer.makeGridData.call(this, data, plot);
-
- if (this._type === 'line' && this.renderer.smooth && this.renderer._smoothedData.length) {
- gridData = this.renderer._smoothedData;
- }
-
- this.renderer.draw.call(this, sctx, gridData, options, plot);
- }
-
- for (j=0; j<$.jqplot.postDrawSeriesHooks.length; j++) {
- $.jqplot.postDrawSeriesHooks[j].call(this, sctx, options, plot);
- }
-
- sctx = opts = plot = j = data = gridData = null;
- };
-
- Series.prototype.drawShadow = function(sctx, opts, plot) {
- var options = (opts == undefined) ? {} : opts;
- sctx = (sctx == undefined) ? this.shadowCanvas._ctx : sctx;
-
- var j, data, gridData;
-
- // hooks get called even if series not shown
- // we don't clear canvas here, it would wipe out all other series as well.
- for (j=0; j<$.jqplot.preDrawSeriesShadowHooks.length; j++) {
- $.jqplot.preDrawSeriesShadowHooks[j].call(this, sctx, options);
- }
- if (this.shadow) {
- this.renderer.setGridData.call(this, plot);
-
- data = [];
- if (options.data) {
- data = options.data;
- }
- else if (!this._stack) {
- data = this.data;
- }
- else {
- data = this._plotData;
- }
- gridData = options.gridData || this.renderer.makeGridData.call(this, data, plot);
-
- this.renderer.drawShadow.call(this, sctx, gridData, options, plot);
- }
-
- for (j=0; j<$.jqplot.postDrawSeriesShadowHooks.length; j++) {
- $.jqplot.postDrawSeriesShadowHooks[j].call(this, sctx, options);
- }
-
- sctx = opts = plot = j = data = gridData = null;
-
- };
-
- // toggles series display on plot, e.g. show/hide series
- Series.prototype.toggleDisplay = function(ev, callback) {
- var s, speed;
- if (ev.data.series) {
- s = ev.data.series;
- }
- else {
- s = this;
- }
-
- if (ev.data.speed) {
- speed = ev.data.speed;
- }
- if (speed) {
- // this can be tricky because series may not have a canvas element if replotting.
- if (s.canvas._elem.is(':hidden') || !s.show) {
- s.show = true;
-
- s.canvas._elem.removeClass('jqplot-series-hidden');
- if (s.shadowCanvas._elem) {
- s.shadowCanvas._elem.fadeIn(speed);
- }
- s.canvas._elem.fadeIn(speed, callback);
- s.canvas._elem.nextAll('.jqplot-point-label.jqplot-series-'+s.index).fadeIn(speed);
- }
- else {
- s.show = false;
-
- s.canvas._elem.addClass('jqplot-series-hidden');
- if (s.shadowCanvas._elem) {
- s.shadowCanvas._elem.fadeOut(speed);
- }
- s.canvas._elem.fadeOut(speed, callback);
- s.canvas._elem.nextAll('.jqplot-point-label.jqplot-series-'+s.index).fadeOut(speed);
- }
- }
- else {
- // this can be tricky because series may not have a canvas element if replotting.
- if (s.canvas._elem.is(':hidden') || !s.show) {
- s.show = true;
-
- s.canvas._elem.removeClass('jqplot-series-hidden');
- if (s.shadowCanvas._elem) {
- s.shadowCanvas._elem.show();
- }
- s.canvas._elem.show(0, callback);
- s.canvas._elem.nextAll('.jqplot-point-label.jqplot-series-'+s.index).show();
- }
- else {
- s.show = false;
-
- s.canvas._elem.addClass('jqplot-series-hidden');
- if (s.shadowCanvas._elem) {
- s.shadowCanvas._elem.hide();
- }
- s.canvas._elem.hide(0, callback);
- s.canvas._elem.nextAll('.jqplot-point-label.jqplot-series-'+s.index).hide();
- }
- }
- };
-
-
-
- /**
- * Class: 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.
- */
- function Grid() {
- $.jqplot.ElemContainer.call(this);
- // Group: Properties
-
- // prop: drawGridlines
- // wether to draw the gridlines on the plot.
- this.drawGridlines = true;
- // prop: gridLineColor
- // color of the grid lines.
- this.gridLineColor = '#cccccc';
- // prop: gridLineWidth
- // width of the grid lines.
- this.gridLineWidth = 1.0;
- // prop: background
- // css spec for the background color.
- this.background = '#fffdf6';
- // prop: borderColor
- // css spec for the color of the grid border.
- this.borderColor = '#999999';
- // prop: borderWidth
- // width of the border in pixels.
- this.borderWidth = 2.0;
- // prop: drawBorder
- // True to draw border around grid.
- this.drawBorder = true;
- // prop: shadow
- // wether to show a shadow behind the grid.
- this.shadow = true;
- // prop: shadowAngle
- // shadow angle in degrees
- this.shadowAngle = 45;
- // prop: shadowOffset
- // Offset of each shadow stroke from the border in pixels
- this.shadowOffset = 1.5;
- // prop: shadowWidth
- // width of the stoke for the shadow
- this.shadowWidth = 3;
- // prop: shadowDepth
- // Number of times shadow is stroked, each stroke offset shadowOffset from the last.
- this.shadowDepth = 3;
- // prop: shadowColor
- // an optional css color spec for the shadow in 'rgba(n, n, n, n)' form
- this.shadowColor = null;
- // prop: shadowAlpha
- // Alpha channel transparency of shadow. 0 = transparent.
- this.shadowAlpha = '0.07';
- this._left;
- this._top;
- this._right;
- this._bottom;
- this._width;
- this._height;
- this._axes = [];
- // prop: renderer
- // Instance of a renderer which will actually render the grid,
- // see <$.jqplot.CanvasGridRenderer>.
- this.renderer = $.jqplot.CanvasGridRenderer;
- // prop: rendererOptions
- // Options to pass on to the renderer,
- // see <$.jqplot.CanvasGridRenderer>.
- this.rendererOptions = {};
- this._offsets = {top:null, bottom:null, left:null, right:null};
- }
-
- Grid.prototype = new $.jqplot.ElemContainer();
- Grid.prototype.constructor = Grid;
-
- Grid.prototype.init = function() {
- if ($.isFunction(this.renderer)) {
- this.renderer = new this.renderer();
- }
- this.renderer.init.call(this, this.rendererOptions);
- };
-
- Grid.prototype.createElement = function(offsets,plot) {
- this._offsets = offsets;
- return this.renderer.createElement.call(this, plot);
- };
-
- Grid.prototype.draw = function() {
- this.renderer.draw.call(this);
- };
-
- $.jqplot.GenericCanvas = function() {
- $.jqplot.ElemContainer.call(this);
- this._ctx;
- };
-
- $.jqplot.GenericCanvas.prototype = new $.jqplot.ElemContainer();
- $.jqplot.GenericCanvas.prototype.constructor = $.jqplot.GenericCanvas;
-
- $.jqplot.GenericCanvas.prototype.createElement = function(offsets, clss, plotDimensions, plot) {
- this._offsets = offsets;
- var klass = 'jqplot';
- if (clss != undefined) {
- klass = clss;
- }
- var elem;
-
- elem = plot.canvasManager.getCanvas();
-
- // if new plotDimensions supplied, use them.
- if (plotDimensions != null) {
- this._plotDimensions = plotDimensions;
- }
-
- elem.width = this._plotDimensions.width - this._offsets.left - this._offsets.right;
- elem.height = this._plotDimensions.height - this._offsets.top - this._offsets.bottom;
- this._elem = $(elem);
- this._elem.css({ position: 'absolute', left: this._offsets.left, top: this._offsets.top });
-
- this._elem.addClass(klass);
-
- elem = plot.canvasManager.initCanvas(elem);
-
- elem = null;
- return this._elem;
- };
-
- $.jqplot.GenericCanvas.prototype.setContext = function() {
- this._ctx = this._elem.get(0).getContext("2d");
- return this._ctx;
- };
-
- // Memory Leaks patch
- $.jqplot.GenericCanvas.prototype.resetCanvas = function() {
- if (this._elem) {
- if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) {
- window.G_vmlCanvasManager.uninitElement(this._elem.get(0));
- }
-
- //this._elem.remove();
- this._elem.emptyForce();
- }
-
- this._ctx = null;
- };
-
- $.jqplot.HooksManager = function () {
- this.hooks =[];
- this.args = [];
- };
-
- $.jqplot.HooksManager.prototype.addOnce = function(fn, args) {
- args = args || [];
- var havehook = false;
- for (var i=0, l=this.hooks.length; i<l; i++) {
- if (this.hooks[i] == fn) {
- havehook = true;
- }
- }
- if (!havehook) {
- this.hooks.push(fn);
- this.args.push(args);
- }
- };
-
- $.jqplot.HooksManager.prototype.add = function(fn, args) {
- args = args || [];
- this.hooks.push(fn);
- this.args.push(args);
- };
-
- $.jqplot.EventListenerManager = function () {
- this.hooks =[];
- };
-
- $.jqplot.EventListenerManager.prototype.addOnce = function(ev, fn) {
- var havehook = false, h, i;
- for (var i=0, l=this.hooks.length; i<l; i++) {
- h = this.hooks[i];
- if (h[0] == ev && h[1] == fn) {
- havehook = true;
- }
- }
- if (!havehook) {
- this.hooks.push([ev, fn]);
- }
- };
-
- $.jqplot.EventListenerManager.prototype.add = function(ev, fn) {
- this.hooks.push([ev, fn]);
- };
-
-
- var _axisNames = ['yMidAxis', 'xaxis', 'yaxis', 'x2axis', 'y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis'];
-
- /**
- * Class: jqPlot
- * Plot object returned by call to $.jqplot. Handles parsing user options,
- * creating sub objects (Axes, legend, title, series) and rendering the plot.
- */
- function jqPlot() {
- // Group: Properties
- // These properties are specified at the top of the options object
- // like so:
- // > {
- // > axesDefaults:{min:0},
- // > series:[{color:'#6633dd'}],
- // > title: 'A Plot'
- // > }
- //
-
- // prop: animate
- // True to animate the series on initial plot draw (renderer dependent).
- // Actual animation functionality must be supported in the renderer.
- this.animate = false;
- // prop: animateReplot
- // 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.
- this.animateReplot = false;
- // prop: axes
- // up to 4 axes are supported, each with it's own options,
- // See <Axis> for axis specific options.
- 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')};
- this.baseCanvas = new $.jqplot.GenericCanvas();
- // true to intercept right click events and fire a 'jqplotRightClick' event.
- // this will also block the context menu.
- this.captureRightClick = false;
- // prop: 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, ...] ].
- this.data = [];
- // prop: 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.
- this.dataRenderer;
- // prop: dataRendererOptions
- // Options that will be passed to the dataRenderer.
- // Can be of any type.
- this.dataRendererOptions;
- this.defaults = {
- // prop: axesDefaults
- // default options that will be applied to all axes.
- // see <Axis> for axes options.
- axesDefaults: {},
- axes: {xaxis:{}, yaxis:{}, x2axis:{}, y2axis:{}, y3axis:{}, y4axis:{}, y5axis:{}, y6axis:{}, y7axis:{}, y8axis:{}, y9axis:{}, yMidAxis:{}},
- // prop: seriesDefaults
- // default options that will be applied to all series.
- // see <Series> for series options.
- seriesDefaults: {},
- series:[]
- };
- // prop: defaultAxisStart
- // 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.
- this.defaultAxisStart = 1;
- // this.doCustomEventBinding = true;
- // prop: drawIfHidden
- // True to execute the draw method even if the plot target is hidden.
- // Generally, this should be false. Most plot elements will not be sized/
- // positioned correclty if renderered into a hidden container. To render into
- // a hidden container, call the replot method when the container is shown.
- this.drawIfHidden = false;
- this.eventCanvas = new $.jqplot.GenericCanvas();
- // prop: fillBetween
- // 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].
- // }
- this.fillBetween = {
- series1: null,
- series2: null,
- color: null,
- baseSeries: 0,
- fill: true
- };
- // prop; fontFamily
- // css spec for the font-family attribute. Default for the entire plot.
- this.fontFamily;
- // prop: fontSize
- // css spec for the font-size attribute. Default for the entire plot.
- this.fontSize;
- // prop: grid
- // See <Grid> for grid specific options.
- this.grid = new Grid();
- // prop: legend
- // see <$.jqplot.TableLegendRenderer>
- this.legend = new Legend();
- // prop: noDataIndicator
- // Options to set up a mock plot with a data loading indicator if no data is specified.
- this.negativeSeriesColors = $.jqplot.config.defaultNegativeColors;
- this.noDataIndicator = {
- show: false,
- indicator: 'Loading Data...',
- axes: {
- xaxis: {
- min: 0,
- max: 10,
- tickInterval: 2,
- show: true
- },
- yaxis: {
- min: 0,
- max: 12,
- tickInterval: 3,
- show: true
- }
- }
- };
- // container to hold all of the merged options. Convienence for plugins.
- this.options = {};
- this.previousSeriesStack = [];
- // Namespece to hold plugins. Generally non-renderer plugins add themselves to here.
- this.plugins = {};
- // prop: series
- // Array of series object options.
- // see <Series> for series specific options.
- this.series = [];
- // array of series indicies. Keep track of order
- // which series canvases are displayed, lowest
- // to highest, back to front.
- this.seriesStack = [];
- // prop: seriesColors
- // 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.
- this.seriesColors = $.jqplot.config.defaultColors;
- // prop: sortData
- // 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.
- this.sortData = true;
- // prop: stackSeries
- // true or false, creates a stack or "mountain" plot.
- // Not all series renderers may implement this option.
- this.stackSeries = false;
- // a shortcut for axis syncTicks options. Not implemented yet.
- this.syncXTicks = true;
- // a shortcut for axis syncTicks options. Not implemented yet.
- this.syncYTicks = true;
- // the jquery object for the dom target.
- this.target = null;
- // The id of the dom element to render the plot into
- this.targetId = null;
- // prop textColor
- // css spec for the css color attribute. Default for the entire plot.
- this.textColor;
- // prop: 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.
- this.title = new Title();
- // Count how many times the draw method has been called while the plot is visible.
- // Mostly used to test if plot has never been dran (=0), has been successfully drawn
- // into a visible container once (=1) or draw more than once into a visible container.
- // Can use this in tests to see if plot has been visibly drawn at least one time.
- // After plot has been visibly drawn once, it generally doesn't need redrawn if its
- // container is hidden and shown.
- this._drawCount = 0;
- // sum of y values for all series in plot.
- // used in mekko chart.
- this._sumy = 0;
- this._sumx = 0;
- // array to hold the cumulative stacked series data.
- // used to ajust the individual series data, which won't have access to other
- // series data.
- this._stackData = [];
- // array that holds the data to be plotted. This will be the series data
- // merged with the the appropriate data from _stackData according to the stackAxis.
- this._plotData = [];
- this._width = null;
- this._height = null;
- this._plotDimensions = {height:null, width:null};
- this._gridPadding = {top:null, right:null, bottom:null, left:null};
- this._defaultGridPadding = {top:10, right:10, bottom:23, left:10};
-
- this._addDomReference = $.jqplot.config.addDomReference;
-
- this.preInitHooks = new $.jqplot.HooksManager();
- this.postInitHooks = new $.jqplot.HooksManager();
- this.preParseOptionsHooks = new $.jqplot.HooksManager();
- this.postParseOptionsHooks = new $.jqplot.HooksManager();
- this.preDrawHooks = new $.jqplot.HooksManager();
- this.postDrawHooks = new $.jqplot.HooksManager();
- this.preDrawSeriesHooks = new $.jqplot.HooksManager();
- this.postDrawSeriesHooks = new $.jqplot.HooksManager();
- this.preDrawLegendHooks = new $.jqplot.HooksManager();
- this.addLegendRowHooks = new $.jqplot.HooksManager();
- this.preSeriesInitHooks = new $.jqplot.HooksManager();
- this.postSeriesInitHooks = new $.jqplot.HooksManager();
- this.preParseSeriesOptionsHooks = new $.jqplot.HooksManager();
- this.postParseSeriesOptionsHooks = new $.jqplot.HooksManager();
- this.eventListenerHooks = new $.jqplot.EventListenerManager();
- this.preDrawSeriesShadowHooks = new $.jqplot.HooksManager();
- this.postDrawSeriesShadowHooks = new $.jqplot.HooksManager();
-
- this.colorGenerator = new $.jqplot.ColorGenerator();
- this.negativeColorGenerator = new $.jqplot.ColorGenerator();
-
- this.canvasManager = new $.jqplot.CanvasManager();
-
- this.themeEngine = new $.jqplot.ThemeEngine();
-
- var seriesColorsIndex = 0;
-
- // Group: methods
- //
- // method: init
- // sets the plot target, checks data and applies user
- // options to plot.
- this.init = function(target, data, options) {
- options = options || {};
- for (var i=0; i<$.jqplot.preInitHooks.length; i++) {
- $.jqplot.preInitHooks[i].call(this, target, data, options);
- }
-
- for (var i=0; i<this.preInitHooks.hooks.length; i++) {
- this.preInitHooks.hooks[i].call(this, target, data, options);
- }
-
- this.targetId = '#'+target;
- this.target = $('#'+target);
-
- //////
- // Add a reference to plot
- //////
- if (this._addDomReference) {
- this.target.data('jqplot', this);
- }
- // remove any error class that may be stuck on target.
- this.target.removeClass('jqplot-error');
- if (!this.target.get(0)) {
- throw "No plot target specified";
- }
-
- // make sure the target is positioned by some means and set css
- if (this.target.css('position') == 'static') {
- this.target.css('position', 'relative');
- }
- if (!this.target.hasClass('jqplot-target')) {
- this.target.addClass('jqplot-target');
- }
-
- // if no height or width specified, use a default.
- if (!this.target.height()) {
- var h;
- if (options && options.height) {
- h = parseInt(options.height, 10);
- }
- else if (this.target.attr('data-height')) {
- h = parseInt(this.target.attr('data-height'), 10);
- }
- else {
- h = parseInt($.jqplot.config.defaultHeight, 10);
- }
- this._height = h;
- this.target.css('height', h+'px');
- }
- else {
- this._height = h = this.target.height();
- }
- if (!this.target.width()) {
- var w;
- if (options && options.width) {
- w = parseInt(options.width, 10);
- }
- else if (this.target.attr('data-width')) {
- w = parseInt(this.target.attr('data-width'), 10);
- }
- else {
- w = parseInt($.jqplot.config.defaultWidth, 10);
- }
- this._width = w;
- this.target.css('width', w+'px');
- }
- else {
- this._width = w = this.target.width();
- }
-
- for (var i=0, l=_axisNames.length; i<l; i++) {
- this.axes[_axisNames[i]] = new Axis(_axisNames[i]);
- }
-
- this._plotDimensions.height = this._height;
- this._plotDimensions.width = this._width;
- this.grid._plotDimensions = this._plotDimensions;
- this.title._plotDimensions = this._plotDimensions;
- this.baseCanvas._plotDimensions = this._plotDimensions;
- this.eventCanvas._plotDimensions = this._plotDimensions;
- this.legend._plotDimensions = this._plotDimensions;
- if (this._height <=0 || this._width <=0 || !this._height || !this._width) {
- throw "Canvas dimension not set";
- }
-
- if (options.dataRenderer && $.isFunction(options.dataRenderer)) {
- if (options.dataRendererOptions) {
- this.dataRendererOptions = options.dataRendererOptions;
- }
- this.dataRenderer = options.dataRenderer;
- data = this.dataRenderer(data, this, this.dataRendererOptions);
- }
-
- if (options.noDataIndicator && $.isPlainObject(options.noDataIndicator)) {
- $.extend(true, this.noDataIndicator, options.noDataIndicator);
- }
-
- if (data == null || $.isArray(data) == false || data.length == 0 || $.isArray(data[0]) == false || data[0].length == 0) {
-
- if (this.noDataIndicator.show == false) {
- throw "No Data";
- }
-
- else {
- // have to be descructive here in order for plot to not try and render series.
- // This means that $.jqplot() will have to be called again when there is data.
- //delete options.series;
-
- for (var ax in this.noDataIndicator.axes) {
- for (var prop in this.noDataIndicator.axes[ax]) {
- this.axes[ax][prop] = this.noDataIndicator.axes[ax][prop];
- }
- }
-
- this.postDrawHooks.add(function() {
- var eh = this.eventCanvas.getHeight();
- var ew = this.eventCanvas.getWidth();
- var temp = $('<div class="jqplot-noData-container" style="position:absolute;"></div>');
- this.target.append(temp);
- temp.height(eh);
- temp.width(ew);
- temp.css('top', this.eventCanvas._offsets.top);
- temp.css('left', this.eventCanvas._offsets.left);
-
- var temp2 = $('<div class="jqplot-noData-contents" style="text-align:center; position:relative; margin-left:auto; margin-right:auto;"></div>');
- temp.append(temp2);
- temp2.html(this.noDataIndicator.indicator);
- var th = temp2.height();
- var tw = temp2.width();
- temp2.height(th);
- temp2.width(tw);
- temp2.css('top', (eh - th)/2 + 'px');
- });
-
- }
- }
-
- // make a copy of the data
- this.data = $.extend(true, [], data);
-
- this.parseOptions(options);
-
- if (this.textColor) {
- this.target.css('color', this.textColor);
- }
- if (this.fontFamily) {
- this.target.css('font-family', this.fontFamily);
- }
- if (this.fontSize) {
- this.target.css('font-size', this.fontSize);
- }
-
- this.title.init();
- this.legend.init();
- this._sumy = 0;
- this._sumx = 0;
- this.computePlotData();
- for (var i=0; i<this.series.length; i++) {
- // set default stacking order for series canvases
- this.seriesStack.push(i);
- this.previousSeriesStack.push(i);
- this.series[i].shadowCanvas._plotDimensions = this._plotDimensions;
- this.series[i].canvas._plotDimensions = this._plotDimensions;
- for (var j=0; j<$.jqplot.preSeriesInitHooks.length; j++) {
- $.jqplot.preSeriesInitHooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this);
- }
- for (var j=0; j<this.preSeriesInitHooks.hooks.length; j++) {
- this.preSeriesInitHooks.hooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this);
- }
- // this.populatePlotData(this.series[i], i);
- this.series[i]._plotDimensions = this._plotDimensions;
- this.series[i].init(i, this.grid.borderWidth, this);
- for (var j=0; j<$.jqplot.postSeriesInitHooks.length; j++) {
- $.jqplot.postSeriesInitHooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this);
- }
- for (var j=0; j<this.postSeriesInitHooks.hooks.length; j++) {
- this.postSeriesInitHooks.hooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this);
- }
- this._sumy += this.series[i]._sumy;
- this._sumx += this.series[i]._sumx;
- }
-
- var name,
- axis;
- for (var i=0, l=_axisNames.length; i<l; i++) {
- name = _axisNames[i];
- axis = this.axes[name];
- axis._plotDimensions = this._plotDimensions;
- axis.init();
- if (this.axes[name].borderColor == null) {
- if (name.charAt(0) !== 'x' && axis.useSeriesColor === true && axis.show) {
- axis.borderColor = axis._series[0].color;
- }
- else {
- axis.borderColor = this.grid.borderColor;
- }
- }
- }
-
- if (this.sortData) {
- sortData(this.series);
- }
- this.grid.init();
- this.grid._axes = this.axes;
-
- this.legend._series = this.series;
-
- for (var i=0; i<$.jqplot.postInitHooks.length; i++) {
- $.jqplot.postInitHooks[i].call(this, target, this.data, options);
- }
-
- for (var i=0; i<this.postInitHooks.hooks.length; i++) {
- this.postInitHooks.hooks[i].call(this, target, this.data, options);
- }
- };
-
- // method: resetAxesScale
- // 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:
- // axes - Boolean to reset or not reset all axes or an array or object of axis names to reset.
- this.resetAxesScale = function(axes, options) {
- var opts = options || {};
- var ax = axes || this.axes;
- if (ax === true) {
- ax = this.axes;
- }
- if ($.isArray(ax)) {
- for (var i = 0; i < ax.length; i++) {
- this.axes[ax[i]].resetScale(opts[ax[i]]);
- }
- }
- else if (typeof(ax) === 'object') {
- for (var name in ax) {
- this.axes[name].resetScale(opts[name]);
- }
- }
- };
- // method: reInitialize
- // reinitialize plot for replotting.
- // not called directly.
- this.reInitialize = function (data, opts) {
- // Plot should be visible and have a height and width.
- // If plot doesn't have height and width for some
- // reason, set it by other means. Plot must not have
- // a display:none attribute, however.
-
- var options = $.extend(true, {}, this.options, opts);
-
- var target = this.targetId.substr(1);
- var tdata = (data == null) ? this.data : data;
-
- for (var i=0; i<$.jqplot.preInitHooks.length; i++) {
- $.jqplot.preInitHooks[i].call(this, target, tdata, options);
- }
-
- for (var i=0; i<this.preInitHooks.hooks.length; i++) {
- this.preInitHooks.hooks[i].call(this, target, tdata, options);
- }
-
- this._height = this.target.height();
- this._width = this.target.width();
-
- if (this._height <=0 || this._width <=0 || !this._height || !this._width) {
- throw "Target dimension not set";
- }
-
- this._plotDimensions.height = this._height;
- this._plotDimensions.width = this._width;
- this.grid._plotDimensions = this._plotDimensions;
- this.title._plotDimensions = this._plotDimensions;
- this.baseCanvas._plotDimensions = this._plotDimensions;
- this.eventCanvas._plotDimensions = this._plotDimensions;
- this.legend._plotDimensions = this._plotDimensions;
-
- var name,
- t,
- j,
- axis;
-
- for (var i=0, l=_axisNames.length; i<l; i++) {
- name = _axisNames[i];
- axis = this.axes[name];
-
- // Memory Leaks patch : clear ticks elements
- t = axis._ticks;
- for (var j = 0, tlen = t.length; j < tlen; j++) {
- var el = t[j]._elem;
- if (el) {
- // if canvas renderer
- if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) {
- window.G_vmlCanvasManager.uninitElement(el.get(0));
- }
- el.emptyForce();
- el = null;
- t._elem = null;
- }
- }
- t = null;
-
- delete axis.ticks;
- delete axis._ticks;
- this.axes[name] = new Axis(name);
- this.axes[name]._plotWidth = this._width;
- this.axes[name]._plotHeight = this._height;
- }
-
- if (data) {
- if (options.dataRenderer && $.isFunction(options.dataRenderer)) {
- if (options.dataRendererOptions) {
- this.dataRendererOptions = options.dataRendererOptions;
- }
- this.dataRenderer = options.dataRenderer;
- data = this.dataRenderer(data, this, this.dataRendererOptions);
- }
-
- // make a copy of the data
- this.data = $.extend(true, [], data);
- }
-
- if (opts) {
- this.parseOptions(options);
- }
-
- this.title._plotWidth = this._width;
-
- if (this.textColor) {
- this.target.css('color', this.textColor);
- }
- if (this.fontFamily) {
- this.target.css('font-family', this.fontFamily);
- }
- if (this.fontSize) {
- this.target.css('font-size', this.fontSize);
- }
-
- this.title.init();
- this.legend.init();
- this._sumy = 0;
- this._sumx = 0;
-
- this.seriesStack = [];
- this.previousSeriesStack = [];
-
- this.computePlotData();
- for (var i=0, l=this.series.length; i<l; i++) {
- // set default stacking order for series canvases
- this.seriesStack.push(i);
- this.previousSeriesStack.push(i);
- this.series[i].shadowCanvas._plotDimensions = this._plotDimensions;
- this.series[i].canvas._plotDimensions = this._plotDimensions;
- for (var j=0; j<$.jqplot.preSeriesInitHooks.length; j++) {
- $.jqplot.preSeriesInitHooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this);
- }
- for (var j=0; j<this.preSeriesInitHooks.hooks.length; j++) {
- this.preSeriesInitHooks.hooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this);
- }
- // this.populatePlotData(this.series[i], i);
- this.series[i]._plotDimensions = this._plotDimensions;
- this.series[i].init(i, this.grid.borderWidth, this);
- for (var j=0; j<$.jqplot.postSeriesInitHooks.length; j++) {
- $.jqplot.postSeriesInitHooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this);
- }
- for (var j=0; j<this.postSeriesInitHooks.hooks.length; j++) {
- this.postSeriesInitHooks.hooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this);
- }
- this._sumy += this.series[i]._sumy;
- this._sumx += this.series[i]._sumx;
- }
-
- for (var i=0, l=_axisNames.length; i<l; i++) {
- name = _axisNames[i];
- axis = this.axes[name];
-
- axis._plotDimensions = this._plotDimensions;
- axis.init();
- if (axis.borderColor == null) {
- if (name.charAt(0) !== 'x' && axis.useSeriesColor === true && axis.show) {
- axis.borderColor = axis._series[0].color;
- }
- else {
- axis.borderColor = this.grid.borderColor;
- }
- }
- }
-
- if (this.sortData) {
- sortData(this.series);
- }
- this.grid.init();
- this.grid._axes = this.axes;
-
- this.legend._series = this.series;
-
- for (var i=0, l=$.jqplot.postInitHooks.length; i<l; i++) {
- $.jqplot.postInitHooks[i].call(this, target, this.data, options);
- }
-
- for (var i=0, l=this.postInitHooks.hooks.length; i<l; i++) {
- this.postInitHooks.hooks[i].call(this, target, this.data, options);
- }
- };
-
-
-
- // method: quickInit
- //
- // Quick reinitialization plot for replotting.
- // Does not parse options ore recreate axes and series.
- // not called directly.
- this.quickInit = function () {
- // Plot should be visible and have a height and width.
- // If plot doesn't have height and width for some
- // reason, set it by other means. Plot must not have
- // a display:none attribute, however.
-
- this._height = this.target.height();
- this._width = this.target.width();
-
- if (this._height <=0 || this._width <=0 || !this._height || !this._width) {
- throw "Target dimension not set";
- }
-
- this._plotDimensions.height = this._height;
- this._plotDimensions.width = this._width;
- this.grid._plotDimensions = this._plotDimensions;
- this.title._plotDimensions = this._plotDimensions;
- this.baseCanvas._plotDimensions = this._plotDimensions;
- this.eventCanvas._plotDimensions = this._plotDimensions;
- this.legend._plotDimensions = this._plotDimensions;
-
- for (var n in this.axes) {
- this.axes[n]._plotWidth = this._width;
- this.axes[n]._plotHeight = this._height;
- }
-
- this.title._plotWidth = this._width;
-
- if (this.textColor) {
- this.target.css('color', this.textColor);
- }
- if (this.fontFamily) {
- this.target.css('font-family', this.fontFamily);
- }
- if (this.fontSize) {
- this.target.css('font-size', this.fontSize);
- }
-
- this._sumy = 0;
- this._sumx = 0;
- this.computePlotData();
- for (var i=0; i<this.series.length; i++) {
- // this.populatePlotData(this.series[i], i);
- if (this.series[i]._type === 'line' && this.series[i].renderer.bands.show) {
- this.series[i].renderer.initBands.call(this.series[i], this.series[i].renderer.options, this);
- }
- this.series[i]._plotDimensions = this._plotDimensions;
- this.series[i].canvas._plotDimensions = this._plotDimensions;
- //this.series[i].init(i, this.grid.borderWidth);
- this._sumy += this.series[i]._sumy;
- this._sumx += this.series[i]._sumx;
- }
-
- var name;
-
- for (var j=0; j<12; j++) {
- name = _axisNames[j];
- // Memory Leaks patch : clear ticks elements
- var t = this.axes[name]._ticks;
- for (var i = 0; i < t.length; i++) {
- var el = t[i]._elem;
- if (el) {
- // if canvas renderer
- if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) {
- window.G_vmlCanvasManager.uninitElement(el.get(0));
- }
- el.emptyForce();
- el = null;
- t._elem = null;
- }
- }
- t = null;
-
- this.axes[name]._plotDimensions = this._plotDimensions;
- this.axes[name]._ticks = [];
- // this.axes[name].renderer.init.call(this.axes[name], {});
- }
-
- if (this.sortData) {
- sortData(this.series);
- }
-
- this.grid._axes = this.axes;
-
- this.legend._series = this.series;
- };
-
- // sort the series data in increasing order.
- function sortData(series) {
- var d, sd, pd, ppd, ret;
- for (var i=0; i<series.length; i++) {
- var check;
- var bat = [series[i].data, series[i]._stackData, series[i]._plotData, series[i]._prevPlotData];
- for (var n=0; n<4; n++) {
- check = true;
- d = bat[n];
- if (series[i]._stackAxis == 'x') {
- for (var j = 0; j < d.length; j++) {
- if (typeof(d[j][1]) != "number") {
- check = false;
- break;
- }
- }
- if (check) {
- d.sort(function(a,b) { return a[1] - b[1]; });
- }
- }
- else {
- for (var j = 0; j < d.length; j++) {
- if (typeof(d[j][0]) != "number") {
- check = false;
- break;
- }
- }
- if (check) {
- d.sort(function(a,b) { return a[0] - b[0]; });
- }
- }
- }
-
- }
- }
-
- this.computePlotData = function() {
- this._plotData = [];
- this._stackData = [];
- var series,
- index,
- l;
-
-
- for (index=0, l=this.series.length; index<l; index++) {
- series = this.series[index];
- this._plotData.push([]);
- this._stackData.push([]);
- var cd = series.data;
- this._plotData[index] = $.extend(true, [], cd);
- this._stackData[index] = $.extend(true, [], cd);
- series._plotData = this._plotData[index];
- series._stackData = this._stackData[index];
- var plotValues = {x:[], y:[]};
-
- if (this.stackSeries && !series.disableStack) {
- series._stack = true;
- ///////////////////////////
- // have to check for nulls
- ///////////////////////////
- var sidx = (series._stackAxis === 'x') ? 0 : 1;
-
- for (var k=0, cdl=cd.length; k<cdl; k++) {
- var temp = cd[k][sidx];
- if (temp == null) {
- temp = 0;
- }
- this._plotData[index][k][sidx] = temp;
- this._stackData[index][k][sidx] = temp;
-
- if (index > 0) {
- for (var j=index; j--;) {
- var prevval = this._plotData[j][k][sidx];
- // only need to sum up the stack axis column of data
- // and only sum if it is of same sign.
- // if previous series isn't same sign, keep looking
- // at earlier series untill we find one of same sign.
- if (temp * prevval >= 0) {
- this._plotData[index][k][sidx] += prevval;
- this._stackData[index][k][sidx] += prevval;
- break;
- }
- }
- }
- }
-
- }
- else {
- for (var i=0; i<series.data.length; i++) {
- plotValues.x.push(series.data[i][0]);
- plotValues.y.push(series.data[i][1]);
- }
- this._stackData.push(series.data);
- this.series[index]._stackData = series.data;
- this._plotData.push(series.data);
- series._plotData = series.data;
- series._plotValues = plotValues;
- }
- if (index>0) {
- series._prevPlotData = this.series[index-1]._plotData;
- }
- series._sumy = 0;
- series._sumx = 0;
- for (i=series.data.length-1; i>-1; i--) {
- series._sumy += series.data[i][1];
- series._sumx += series.data[i][0];
- }
- }
-
- };
-
- // populate the _stackData and _plotData arrays for the plot and the series.
- this.populatePlotData = function(series, index) {
- // if a stacked chart, compute the stacked data
- this._plotData = [];
- this._stackData = [];
- series._stackData = [];
- series._plotData = [];
- var plotValues = {x:[], y:[]};
- if (this.stackSeries && !series.disableStack) {
- series._stack = true;
- var sidx = (series._stackAxis === 'x') ? 0 : 1;
- // var idx = sidx ? 0 : 1;
- // push the current data into stackData
- //this._stackData.push(this.series[i].data);
- var temp = $.extend(true, [], series.data);
- // create the data that will be plotted for this series
- var plotdata = $.extend(true, [], series.data);
- var tempx, tempy, dval, stackval, comparator;
- // for first series, nothing to add to stackData.
- for (var j=0; j<index; j++) {
- var cd = this.series[j].data;
- for (var k=0; k<cd.length; k++) {
- dval = cd[k];
- tempx = (dval[0] != null) ? dval[0] : 0;
- tempy = (dval[1] != null) ? dval[1] : 0;
- temp[k][0] += tempx;
- temp[k][1] += tempy;
- stackval = (sidx) ? tempy : tempx;
- // only need to sum up the stack axis column of data
- // and only sum if it is of same sign.
- if (series.data[k][sidx] * stackval >= 0) {
- plotdata[k][sidx] += stackval;
- }
- }
- }
- for (var i=0; i<plotdata.length; i++) {
- plotValues.x.push(plotdata[i][0]);
- plotValues.y.push(plotdata[i][1]);
- }
- this._plotData.push(plotdata);
- this._stackData.push(temp);
- series._stackData = temp;
- series._plotData = plotdata;
- series._plotValues = plotValues;
- }
- else {
- for (var i=0; i<series.data.length; i++) {
- plotValues.x.push(series.data[i][0]);
- plotValues.y.push(series.data[i][1]);
- }
- this._stackData.push(series.data);
- this.series[index]._stackData = series.data;
- this._plotData.push(series.data);
- series._plotData = series.data;
- series._plotValues = plotValues;
- }
- if (index>0) {
- series._prevPlotData = this.series[index-1]._plotData;
- }
- series._sumy = 0;
- series._sumx = 0;
- for (i=series.data.length-1; i>-1; i--) {
- series._sumy += series.data[i][1];
- series._sumx += series.data[i][0];
- }
- };
-
- // function to safely return colors from the color array and wrap around at the end.
- this.getNextSeriesColor = (function(t) {
- var idx = 0;
- var sc = t.seriesColors;
-
- return function () {
- if (idx < sc.length) {
- return sc[idx++];
- }
- else {
- idx = 0;
- return sc[idx++];
- }
- };
- })(this);
-
- this.parseOptions = function(options){
- for (var i=0; i<this.preParseOptionsHooks.hooks.length; i++) {
- this.preParseOptionsHooks.hooks[i].call(this, options);
- }
- for (var i=0; i<$.jqplot.preParseOptionsHooks.length; i++) {
- $.jqplot.preParseOptionsHooks[i].call(this, options);
- }
- this.options = $.extend(true, {}, this.defaults, options);
- var opts = this.options;
- this.animate = opts.animate;
- this.animateReplot = opts.animateReplot;
- this.stackSeries = opts.stackSeries;
- if ($.isPlainObject(opts.fillBetween)) {
-
- var temp = ['series1', 'series2', 'color', 'baseSeries', 'fill'],
- tempi;
-
- for (var i=0, l=temp.length; i<l; i++) {
- tempi = temp[i];
- if (opts.fillBetween[tempi] != null) {
- this.fillBetween[tempi] = opts.fillBetween[tempi];
- }
- }
- }
-
- if (opts.seriesColors) {
- this.seriesColors = opts.seriesColors;
- }
- if (opts.negativeSeriesColors) {
- this.negativeSeriesColors = opts.negativeSeriesColors;
- }
- if (opts.captureRightClick) {
- this.captureRightClick = opts.captureRightClick;
- }
- this.defaultAxisStart = (options && options.defaultAxisStart != null) ? options.defaultAxisStart : this.defaultAxisStart;
- this.colorGenerator.setColors(this.seriesColors);
- this.negativeColorGenerator.setColors(this.negativeSeriesColors);
- // var cg = new this.colorGenerator(this.seriesColors);
- // var ncg = new this.colorGenerator(this.negativeSeriesColors);
- // this._gridPadding = this.options.gridPadding;
- $.extend(true, this._gridPadding, opts.gridPadding);
- this.sortData = (opts.sortData != null) ? opts.sortData : this.sortData;
- for (var i=0; i<12; i++) {
- var n = _axisNames[i];
- var axis = this.axes[n];
- axis._options = $.extend(true, {}, opts.axesDefaults, opts.axes[n]);
- $.extend(true, axis, opts.axesDefaults, opts.axes[n]);
- axis._plotWidth = this._width;
- axis._plotHeight = this._height;
- }
- // if (this.data.length == 0) {
- // this.data = [];
- // for (var i=0; i<this.options.series.length; i++) {
- // this.data.push(this.options.series.data);
- // }
- // }
-
- var normalizeData = function(data, dir, start) {
- // return data as an array of point arrays,
- // in form [[x1,y1...], [x2,y2...], ...]
- var temp = [];
- var i, l;
- dir = dir || 'vertical';
- if (!$.isArray(data[0])) {
- // we have a series of scalars. One line with just y values.
- // turn the scalar list of data into a data array of form:
- // [[1, data[0]], [2, data[1]], ...]
- for (i=0, l=data.length; i<l; i++) {
- if (dir == 'vertical') {
- temp.push([start + i, data[i]]);
- }
- else {
- temp.push([data[i], start+i]);
- }
- }
- }
- else {
- // we have a properly formatted data series, copy it.
- $.extend(true, temp, data);
- }
- return temp;
- };
-
- var colorIndex = 0;
- this.series = [];
- for (var i=0; i<this.data.length; i++) {
- var sopts = $.extend(true, {index: i}, {seriesColors:this.seriesColors, negativeSeriesColors:this.negativeSeriesColors}, this.options.seriesDefaults, this.options.series[i], {rendererOptions:{animation:{show: this.animate}}});
- // pass in options in case something needs set prior to initialization.
- var temp = new Series(sopts);
- for (var j=0; j<$.jqplot.preParseSeriesOptionsHooks.length; j++) {
- $.jqplot.preParseSeriesOptionsHooks[j].call(temp, this.options.seriesDefaults, this.options.series[i]);
- }
- for (var j=0; j<this.preParseSeriesOptionsHooks.hooks.length; j++) {
- this.preParseSeriesOptionsHooks.hooks[j].call(temp, this.options.seriesDefaults, this.options.series[i]);
- }
- // Now go back and apply the options to the series. Really should just do this during initializaiton, but don't want to
- // mess up preParseSeriesOptionsHooks at this point.
- $.extend(true, temp, sopts);
- var dir = 'vertical';
- if (temp.renderer === $.jqplot.BarRenderer && temp.rendererOptions && temp.rendererOptions.barDirection == 'horizontal') {
- dir = 'horizontal';
- temp._stackAxis = 'x';
- temp._primaryAxis = '_yaxis';
- }
- temp.data = normalizeData(this.data[i], dir, this.defaultAxisStart);
- switch (temp.xaxis) {
- case 'xaxis':
- temp._xaxis = this.axes.xaxis;
- break;
- case 'x2axis':
- temp._xaxis = this.axes.x2axis;
- break;
- default:
- break;
- }
- temp._yaxis = this.axes[temp.yaxis];
- temp._xaxis._series.push(temp);
- temp._yaxis._series.push(temp);
- if (temp.show) {
- temp._xaxis.show = true;
- temp._yaxis.show = true;
- }
- else {
- if (temp._xaxis.scaleToHiddenSeries) {
- temp._xaxis.show = true;
- }
- if (temp._yaxis.scaleToHiddenSeries) {
- temp._yaxis.show = true;
- }
- }
-
- // // parse the renderer options and apply default colors if not provided
- // if (!temp.color && temp.show != false) {
- // temp.color = cg.next();
- // colorIndex = cg.getIndex() - 1;;
- // }
- // if (!temp.negativeColor && temp.show != false) {
- // temp.negativeColor = ncg.get(colorIndex);
- // ncg.setIndex(colorIndex);
- // }
- if (!temp.label) {
- temp.label = 'Series '+ (i+1).toString();
- }
- // temp.rendererOptions.show = temp.show;
- // $.extend(true, temp.renderer, {color:this.seriesColors[i]}, this.rendererOptions);
- this.series.push(temp);
- for (var j=0; j<$.jqplot.postParseSeriesOptionsHooks.length; j++) {
- $.jqplot.postParseSeriesOptionsHooks[j].call(this.series[i], this.options.seriesDefaults, this.options.series[i]);
- }
- for (var j=0; j<this.postParseSeriesOptionsHooks.hooks.length; j++) {
- this.postParseSeriesOptionsHooks.hooks[j].call(this.series[i], this.options.seriesDefaults, this.options.series[i]);
- }
- }
-
- // copy the grid and title options into this object.
- $.extend(true, this.grid, this.options.grid);
- // if axis border properties aren't set, set default.
- for (var i=0, l=_axisNames.length; i<l; i++) {
- var n = _axisNames[i];
- var axis = this.axes[n];
- if (axis.borderWidth == null) {
- axis.borderWidth =this.grid.borderWidth;
- }
- }
-
- if (typeof this.options.title == 'string') {
- this.title.text = this.options.title;
- }
- else if (typeof this.options.title == 'object') {
- $.extend(true, this.title, this.options.title);
- }
- this.title._plotWidth = this._width;
- this.legend.setOptions(this.options.legend);
-
- for (var i=0; i<$.jqplot.postParseOptionsHooks.length; i++) {
- $.jqplot.postParseOptionsHooks[i].call(this, options);
- }
- for (var i=0; i<this.postParseOptionsHooks.hooks.length; i++) {
- this.postParseOptionsHooks.hooks[i].call(this, options);
- }
- };
-
- // method: destroy
- // Releases all resources occupied by the plot
- this.destroy = function() {
- this.canvasManager.freeAllCanvases();
- if (this.eventCanvas && this.eventCanvas._elem) {
- this.eventCanvas._elem.unbind();
- }
- // Couple of posts on Stack Overflow indicate that empty() doesn't
- // always cear up the dom and release memory. Sometimes setting
- // innerHTML property to null is needed. Particularly on IE, may
- // have to directly set it to null, bypassing $.
- this.target.empty();
-
- this.target[0].innerHTML = '';
- };
-
- // method: replot
- // Does a reinitialization of the plot followed by
- // a redraw. Method could be used to interactively
- // change plot characteristics and then replot.
- //
- // Parameters:
- // options - Options used for replotting.
- //
- // Properties:
- // clear - false to not clear (empty) the plot container before replotting (default: true).
- // resetAxes - true 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).
- this.replot = function(options) {
- var opts = options || {};
- var data = opts.data || null;
- var clear = (opts.clear === false) ? false : true;
- var resetAxes = opts.resetAxes || false;
- delete opts.data;
- delete opts.clear;
- delete opts.resetAxes;
-
- this.target.trigger('jqplotPreReplot');
-
- if (clear) {
- this.destroy();
- }
- // if have data or other options, full reinit.
- // otherwise, quickinit.
- if (data || !$.isEmptyObject(opts)) {
- this.reInitialize(data, opts);
- }
- else {
- this.quickInit();
- }
-
- if (resetAxes) {
- this.resetAxesScale(resetAxes, opts.axes);
- }
- this.draw();
- this.target.trigger('jqplotPostReplot');
- };
-
- // method: redraw
- // 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:
- // clear - false to not clear (empty) the plot container before redrawing (default: true).
- this.redraw = function(clear) {
- clear = (clear != null) ? clear : true;
- this.target.trigger('jqplotPreRedraw');
- if (clear) {
- this.canvasManager.freeAllCanvases();
- this.eventCanvas._elem.unbind();
- // Dont think I bind any events to the target, this shouldn't be necessary.
- // It will remove user's events.
- // this.target.unbind();
- this.target.empty();
- }
- for (var ax in this.axes) {
- this.axes[ax]._ticks = [];
- }
- this.computePlotData();
- // for (var i=0; i<this.series.length; i++) {
- // this.populatePlotData(this.series[i], i);
- // }
- this._sumy = 0;
- this._sumx = 0;
- for (var i=0, tsl = this.series.length; i<tsl; i++) {
- this._sumy += this.series[i]._sumy;
- this._sumx += this.series[i]._sumx;
- }
- this.draw();
- this.target.trigger('jqplotPostRedraw');
- };
-
- // method: draw
- // Draws all elements of the plot into the container.
- // Does not clear the container before drawing.
- this.draw = function(){
- if (this.drawIfHidden || this.target.is(':visible')) {
- this.target.trigger('jqplotPreDraw');
- var i,
- j,
- l,
- tempseries;
- for (i=0, l=$.jqplot.preDrawHooks.length; i<l; i++) {
- $.jqplot.preDrawHooks[i].call(this);
- }
- for (i=0, l=this.preDrawHooks.length; i<l; i++) {
- this.preDrawHooks.hooks[i].apply(this, this.preDrawSeriesHooks.args[i]);
- }
- // create an underlying canvas to be used for special features.
- this.target.append(this.baseCanvas.createElement({left:0, right:0, top:0, bottom:0}, 'jqplot-base-canvas', null, this));
- this.baseCanvas.setContext();
- this.target.append(this.title.draw());
- this.title.pack({top:0, left:0});
-
- // make room for the legend between the grid and the edge.
- // pass a dummy offsets object and a reference to the plot.
- var legendElem = this.legend.draw({}, this);
-
- var gridPadding = {top:0, left:0, bottom:0, right:0};
-
- if (this.legend.placement == "outsideGrid") {
- // temporarily append the legend to get dimensions
- this.target.append(legendElem);
- switch (this.legend.location) {
- case 'n':
- gridPadding.top += this.legend.getHeight();
- break;
- case 's':
- gridPadding.bottom += this.legend.getHeight();
- break;
- case 'ne':
- case 'e':
- case 'se':
- gridPadding.right += this.legend.getWidth();
- break;
- case 'nw':
- case 'w':
- case 'sw':
- gridPadding.left += this.legend.getWidth();
- break;
- default: // same as 'ne'
- gridPadding.right += this.legend.getWidth();
- break;
- }
- legendElem = legendElem.detach();
- }
-
- var ax = this.axes;
- var name;
- // draw the yMidAxis first, so xaxis of pyramid chart can adjust itself if needed.
- for (i=0; i<12; i++) {
- name = _axisNames[i];
- this.target.append(ax[name].draw(this.baseCanvas._ctx, this));
- ax[name].set();
- }
- if (ax.yaxis.show) {
- gridPadding.left += ax.yaxis.getWidth();
- }
- var ra = ['y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis'];
- var rapad = [0, 0, 0, 0, 0, 0, 0, 0];
- var gpr = 0;
- var n;
- for (n=0; n<8; n++) {
- if (ax[ra[n]].show) {
- gpr += ax[ra[n]].getWidth();
- rapad[n] = gpr;
- }
- }
- gridPadding.right += gpr;
- if (ax.x2axis.show) {
- gridPadding.top += ax.x2axis.getHeight();
- }
- if (this.title.show) {
- gridPadding.top += this.title.getHeight();
- }
- if (ax.xaxis.show) {
- gridPadding.bottom += ax.xaxis.getHeight();
- }
-
- // end of gridPadding adjustments.
-
- // if user passed in gridDimensions option, check against calculated gridPadding
- if (this.options.gridDimensions && $.isPlainObject(this.options.gridDimensions)) {
- var gdw = parseInt(this.options.gridDimensions.width, 10) || 0;
- var gdh = parseInt(this.options.gridDimensions.height, 10) || 0;
- var widthAdj = (this._width - gridPadding.left - gridPadding.right - gdw)/2;
- var heightAdj = (this._height - gridPadding.top - gridPadding.bottom - gdh)/2;
-
- if (heightAdj >= 0 && widthAdj >= 0) {
- gridPadding.top += heightAdj;
- gridPadding.bottom += heightAdj;
- gridPadding.left += widthAdj;
- gridPadding.right += widthAdj;
- }
- }
- var arr = ['top', 'bottom', 'left', 'right'];
- for (var n in arr) {
- if (this._gridPadding[arr[n]] == null && gridPadding[arr[n]] > 0) {
- this._gridPadding[arr[n]] = gridPadding[arr[n]];
- }
- else if (this._gridPadding[arr[n]] == null) {
- this._gridPadding[arr[n]] = this._defaultGridPadding[arr[n]];
- }
- }
-
- var legendPadding = this._gridPadding;
-
- if (this.legend.placement === 'outsideGrid') {
- legendPadding = {top:this.title.getHeight(), left: 0, right: 0, bottom: 0};
- if (this.legend.location === 's') {
- legendPadding.left = this._gridPadding.left;
- legendPadding.right = this._gridPadding.right;
- }
- }
-
- ax.xaxis.pack({position:'absolute', bottom:this._gridPadding.bottom - ax.xaxis.getHeight(), left:0, width:this._width}, {min:this._gridPadding.left, max:this._width - this._gridPadding.right});
- ax.yaxis.pack({position:'absolute', top:0, left:this._gridPadding.left - ax.yaxis.getWidth(), height:this._height}, {min:this._height - this._gridPadding.bottom, max: this._gridPadding.top});
- ax.x2axis.pack({position:'absolute', top:this._gridPadding.top - ax.x2axis.getHeight(), left:0, width:this._width}, {min:this._gridPadding.left, max:this._width - this._gridPadding.right});
- for (i=8; i>0; i--) {
- ax[ra[i-1]].pack({position:'absolute', top:0, right:this._gridPadding.right - rapad[i-1]}, {min:this._height - this._gridPadding.bottom, max: this._gridPadding.top});
- }
- var ltemp = (this._width - this._gridPadding.left - this._gridPadding.right)/2.0 + this._gridPadding.left - ax.yMidAxis.getWidth()/2.0;
- ax.yMidAxis.pack({position:'absolute', top:0, left:ltemp, zIndex:9, textAlign: 'center'}, {min:this._height - this._gridPadding.bottom, max: this._gridPadding.top});
-
- this.target.append(this.grid.createElement(this._gridPadding, this));
- this.grid.draw();
-
- var series = this.series;
- var seriesLength = series.length;
- // put the shadow canvases behind the series canvases so shadows don't overlap on stacked bars.
- for (i=0, l=seriesLength; i<l; i++) {
- // draw series in order of stacking. This affects only
- // order in which canvases are added to dom.
- j = this.seriesStack[i];
- this.target.append(series[j].shadowCanvas.createElement(this._gridPadding, 'jqplot-series-shadowCanvas', null, this));
- series[j].shadowCanvas.setContext();
- series[j].shadowCanvas._elem.data('seriesIndex', j);
- }
-
- for (i=0, l=seriesLength; i<l; i++) {
- // draw series in order of stacking. This affects only
- // order in which canvases are added to dom.
- j = this.seriesStack[i];
- this.target.append(series[j].canvas.createElement(this._gridPadding, 'jqplot-series-canvas', null, this));
- series[j].canvas.setContext();
- series[j].canvas._elem.data('seriesIndex', j);
- }
- // Need to use filled canvas to capture events in IE.
- // Also, canvas seems to block selection of other elements in document on FF.
- this.target.append(this.eventCanvas.createElement(this._gridPadding, 'jqplot-event-canvas', null, this));
- this.eventCanvas.setContext();
- this.eventCanvas._ctx.fillStyle = 'rgba(0,0,0,0)';
- this.eventCanvas._ctx.fillRect(0,0,this.eventCanvas._ctx.canvas.width, this.eventCanvas._ctx.canvas.height);
-
- // bind custom event handlers to regular events.
- this.bindCustomEvents();
-
- // draw legend before series if the series needs to know the legend dimensions.
- if (this.legend.preDraw) {
- this.eventCanvas._elem.before(legendElem);
- this.legend.pack(legendPadding);
- if (this.legend._elem) {
- this.drawSeries({legendInfo:{location:this.legend.location, placement:this.legend.placement, width:this.legend.getWidth(), height:this.legend.getHeight(), xoffset:this.legend.xoffset, yoffset:this.legend.yoffset}});
- }
- else {
- this.drawSeries();
- }
- }
- else { // draw series before legend
- this.drawSeries();
- if (seriesLength) {
- $(series[seriesLength-1].canvas._elem).after(legendElem);
- }
- this.legend.pack(legendPadding);
- }
-
- // register event listeners on the overlay canvas
- for (var i=0, l=$.jqplot.eventListenerHooks.length; i<l; i++) {
- // in the handler, this will refer to the eventCanvas dom element.
- // make sure there are references back into plot objects.
- this.eventCanvas._elem.bind($.jqplot.eventListenerHooks[i][0], {plot:this}, $.jqplot.eventListenerHooks[i][1]);
- }
-
- // register event listeners on the overlay canvas
- for (var i=0, l=this.eventListenerHooks.hooks.length; i<l; i++) {
- // in the handler, this will refer to the eventCanvas dom element.
- // make sure there are references back into plot objects.
- this.eventCanvas._elem.bind(this.eventListenerHooks.hooks[i][0], {plot:this}, this.eventListenerHooks.hooks[i][1]);
- }
-
- var fb = this.fillBetween;
- if (fb.fill && fb.series1 !== fb.series2 && fb.series1 < seriesLength && fb.series2 < seriesLength && series[fb.series1]._type === 'line' && series[fb.series2]._type === 'line') {
- this.doFillBetweenLines();
- }
-
- for (var i=0, l=$.jqplot.postDrawHooks.length; i<l; i++) {
- $.jqplot.postDrawHooks[i].call(this);
- }
-
- for (var i=0, l=this.postDrawHooks.hooks.length; i<l; i++) {
- this.postDrawHooks.hooks[i].apply(this, this.postDrawHooks.args[i]);
- }
-
- if (this.target.is(':visible')) {
- this._drawCount += 1;
- }
-
- var temps,
- tempr,
- sel,
- _els;
- // ughh. ideally would hide all series then show them.
- for (i=0, l=seriesLength; i<l; i++) {
- temps = series[i];
- tempr = temps.renderer;
- sel = '.jqplot-point-label.jqplot-series-'+i;
- if (tempr.animation && tempr.animation._supported && tempr.animation.show && (this._drawCount < 2 || this.animateReplot)) {
- _els = this.target.find(sel);
- _els.stop(true, true).hide();
- temps.canvas._elem.stop(true, true).hide();
- temps.shadowCanvas._elem.stop(true, true).hide();
- temps.canvas._elem.jqplotEffect('blind', {mode: 'show', direction: tempr.animation.direction}, tempr.animation.speed);
- temps.shadowCanvas._elem.jqplotEffect('blind', {mode: 'show', direction: tempr.animation.direction}, tempr.animation.speed);
- _els.fadeIn(tempr.animation.speed*0.8);
- }
- }
- _els = null;
-
- this.target.trigger('jqplotPostDraw', [this]);
- }
- };
-
- jqPlot.prototype.doFillBetweenLines = function () {
- var fb = this.fillBetween;
- var sid1 = fb.series1;
- var sid2 = fb.series2;
- // first series should always be lowest index
- var id1 = (sid1 < sid2) ? sid1 : sid2;
- var id2 = (sid2 > sid1) ? sid2 : sid1;
-
- var series1 = this.series[id1];
- var series2 = this.series[id2];
-
- if (series2.renderer.smooth) {
- var tempgd = series2.renderer._smoothedData.slice(0).reverse();
- }
- else {
- var tempgd = series2.gridData.slice(0).reverse();
- }
-
- if (series1.renderer.smooth) {
- var gd = series1.renderer._smoothedData.concat(tempgd);
- }
- else {
- var gd = series1.gridData.concat(tempgd);
- }
-
- var color = (fb.color !== null) ? fb.color : this.series[sid1].fillColor;
- var baseSeries = (fb.baseSeries !== null) ? fb.baseSeries : id1;
-
- // now apply a fill to the shape on the lower series shadow canvas,
- // so it is behind both series.
- var sr = this.series[baseSeries].renderer.shapeRenderer;
- var opts = {fillStyle: color, fill: true, closePath: true};
- sr.draw(series1.shadowCanvas._ctx, gd, opts);
- };
-
- this.bindCustomEvents = function() {
- this.eventCanvas._elem.bind('click', {plot:this}, this.onClick);
- this.eventCanvas._elem.bind('dblclick', {plot:this}, this.onDblClick);
- this.eventCanvas._elem.bind('mousedown', {plot:this}, this.onMouseDown);
- this.eventCanvas._elem.bind('mousemove', {plot:this}, this.onMouseMove);
- this.eventCanvas._elem.bind('mouseenter', {plot:this}, this.onMouseEnter);
- this.eventCanvas._elem.bind('mouseleave', {plot:this}, this.onMouseLeave);
- if (this.captureRightClick) {
- this.eventCanvas._elem.bind('mouseup', {plot:this}, this.onRightClick);
- this.eventCanvas._elem.get(0).oncontextmenu = function() {
- return false;
- };
- }
- else {
- this.eventCanvas._elem.bind('mouseup', {plot:this}, this.onMouseUp);
- }
- };
-
- function getEventPosition(ev) {
- var plot = ev.data.plot;
- var go = plot.eventCanvas._elem.offset();
- var gridPos = {x:ev.pageX - go.left, y:ev.pageY - go.top};
- var dataPos = {xaxis:null, yaxis:null, x2axis:null, y2axis:null, y3axis:null, y4axis:null, y5axis:null, y6axis:null, y7axis:null, y8axis:null, y9axis:null, yMidAxis:null};
- var an = ['xaxis', 'yaxis', 'x2axis', 'y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis', 'yMidAxis'];
- var ax = plot.axes;
- var n, axis;
- for (n=11; n>0; n--) {
- axis = an[n-1];
- if (ax[axis].show) {
- dataPos[axis] = ax[axis].series_p2u(gridPos[axis.charAt(0)]);
- }
- }
-
- return {offsets:go, gridPos:gridPos, dataPos:dataPos};
- }
-
-
- // function to check if event location is over a area area
- function checkIntersection(gridpos, plot) {
- var series = plot.series;
- var i, j, k, s, r, x, y, theta, sm, sa, minang, maxang;
- var d0, d, p, pp, points, bw, hp;
- var threshold, t;
- for (k=plot.seriesStack.length-1; k>=0; k--) {
- i = plot.seriesStack[k];
- s = series[i];
- hp = s._highlightThreshold;
- switch (s.renderer.constructor) {
- case $.jqplot.BarRenderer:
- x = gridpos.x;
- y = gridpos.y;
- for (j=0; j<s._barPoints.length; j++) {
- points = s._barPoints[j];
- p = s.gridData[j];
- if (x>points[0][0] && x<points[2][0] && y>points[2][1] && y<points[0][1]) {
- return {seriesIndex:s.index, pointIndex:j, gridData:p, data:s.data[j], points:s._barPoints[j]};
- }
- }
- break;
- case $.jqplot.PyramidRenderer:
- x = gridpos.x;
- y = gridpos.y;
- for (j=0; j<s._barPoints.length; j++) {
- points = s._barPoints[j];
- p = s.gridData[j];
- if (x > points[0][0] + hp[0][0] && x < points[2][0] + hp[2][0] && y > points[2][1] && y < points[0][1]) {
- return {seriesIndex:s.index, pointIndex:j, gridData:p, data:s.data[j], points:s._barPoints[j]};
- }
- }
- break;
-
- case $.jqplot.DonutRenderer:
- sa = s.startAngle/180*Math.PI;
- x = gridpos.x - s._center[0];
- y = gridpos.y - s._center[1];
- r = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
- if (x > 0 && -y >= 0) {
- theta = 2*Math.PI - Math.atan(-y/x);
- }
- else if (x > 0 && -y < 0) {
- theta = -Math.atan(-y/x);
- }
- else if (x < 0) {
- theta = Math.PI - Math.atan(-y/x);
- }
- else if (x == 0 && -y > 0) {
- theta = 3*Math.PI/2;
- }
- else if (x == 0 && -y < 0) {
- theta = Math.PI/2;
- }
- else if (x == 0 && y == 0) {
- theta = 0;
- }
- if (sa) {
- theta -= sa;
- if (theta < 0) {
- theta += 2*Math.PI;
- }
- else if (theta > 2*Math.PI) {
- theta -= 2*Math.PI;
- }
- }
-
- sm = s.sliceMargin/180*Math.PI;
- if (r < s._radius && r > s._innerRadius) {
- for (j=0; j<s.gridData.length; j++) {
- minang = (j>0) ? s.gridData[j-1][1]+sm : sm;
- maxang = s.gridData[j][1];
- if (theta > minang && theta < maxang) {
- return {seriesIndex:s.index, pointIndex:j, gridData:s.gridData[j], data:s.data[j]};
- }
- }
- }
- break;
-
- case $.jqplot.PieRenderer:
- sa = s.startAngle/180*Math.PI;
- x = gridpos.x - s._center[0];
- y = gridpos.y - s._center[1];
- r = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
- if (x > 0 && -y >= 0) {
- theta = 2*Math.PI - Math.atan(-y/x);
- }
- else if (x > 0 && -y < 0) {
- theta = -Math.atan(-y/x);
- }
- else if (x < 0) {
- theta = Math.PI - Math.atan(-y/x);
- }
- else if (x == 0 && -y > 0) {
- theta = 3*Math.PI/2;
- }
- else if (x == 0 && -y < 0) {
- theta = Math.PI/2;
- }
- else if (x == 0 && y == 0) {
- theta = 0;
- }
- if (sa) {
- theta -= sa;
- if (theta < 0) {
- theta += 2*Math.PI;
- }
- else if (theta > 2*Math.PI) {
- theta -= 2*Math.PI;
- }
- }
-
- sm = s.sliceMargin/180*Math.PI;
- if (r < s._radius) {
- for (j=0; j<s.gridData.length; j++) {
- minang = (j>0) ? s.gridData[j-1][1]+sm : sm;
- maxang = s.gridData[j][1];
- if (theta > minang && theta < maxang) {
- return {seriesIndex:s.index, pointIndex:j, gridData:s.gridData[j], data:s.data[j]};
- }
- }
- }
- break;
-
- case $.jqplot.BubbleRenderer:
- x = gridpos.x;
- y = gridpos.y;
- var ret = null;
-
- if (s.show) {
- for (var j=0; j<s.gridData.length; j++) {
- p = s.gridData[j];
- d = Math.sqrt( (x-p[0]) * (x-p[0]) + (y-p[1]) * (y-p[1]) );
- if (d <= p[2] && (d <= d0 || d0 == null)) {
- d0 = d;
- ret = {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
- }
- }
- if (ret != null) {
- return ret;
- }
- }
- break;
-
- case $.jqplot.FunnelRenderer:
- x = gridpos.x;
- y = gridpos.y;
- var v = s._vertices,
- vfirst = v[0],
- vlast = v[v.length-1],
- lex,
- rex,
- cv;
-
- // equations of right and left sides, returns x, y values given height of section (y value and 2 points)
-
- function findedge (l, p1 , p2) {
- var m = (p1[1] - p2[1])/(p1[0] - p2[0]);
- var b = p1[1] - m*p1[0];
- var y = l + p1[1];
-
- return [(y - b)/m, y];
- }
-
- // check each section
- lex = findedge(y, vfirst[0], vlast[3]);
- rex = findedge(y, vfirst[1], vlast[2]);
- for (j=0; j<v.length; j++) {
- cv = v[j];
- if (y >= cv[0][1] && y <= cv[3][1] && x >= lex[0] && x <= rex[0]) {
- return {seriesIndex:s.index, pointIndex:j, gridData:null, data:s.data[j]};
- }
- }
- break;
-
- case $.jqplot.LineRenderer:
- x = gridpos.x;
- y = gridpos.y;
- r = s.renderer;
- if (s.show) {
- if ((s.fill || (s.renderer.bands.show && s.renderer.bands.fill)) && (!plot.plugins.highlighter || !plot.plugins.highlighter.show)) {
- // first check if it is in bounding box
- var inside = false;
- if (x>s._boundingBox[0][0] && x<s._boundingBox[1][0] && y>s._boundingBox[1][1] && y<s._boundingBox[0][1]) {
- // now check the crossing number
-
- var numPoints = s._areaPoints.length;
- var ii;
- var j = numPoints-1;
-
- for(var ii=0; ii < numPoints; ii++) {
- var vertex1 = [s._areaPoints[ii][0], s._areaPoints[ii][1]];
- var vertex2 = [s._areaPoints[j][0], s._areaPoints[j][1]];
-
- if (vertex1[1] < y && vertex2[1] >= y || vertex2[1] < y && vertex1[1] >= y) {
- if (vertex1[0] + (y - vertex1[1]) / (vertex2[1] - vertex1[1]) * (vertex2[0] - vertex1[0]) < x) {
- inside = !inside;
- }
- }
-
- j = ii;
- }
- }
- if (inside) {
- return {seriesIndex:i, pointIndex:null, gridData:s.gridData, data:s.data, points:s._areaPoints};
- }
- break;
-
- }
-
- else {
- t = s.markerRenderer.size/2+s.neighborThreshold;
- threshold = (t > 0) ? t : 0;
- for (var j=0; j<s.gridData.length; j++) {
- p = s.gridData[j];
- // neighbor looks different to OHLC chart.
- if (r.constructor == $.jqplot.OHLCRenderer) {
- if (r.candleStick) {
- var yp = s._yaxis.series_u2p;
- if (x >= p[0]-r._bodyWidth/2 && x <= p[0]+r._bodyWidth/2 && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) {
- return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
- }
- }
- // if an open hi low close chart
- else if (!r.hlc){
- var yp = s._yaxis.series_u2p;
- if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) {
- return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
- }
- }
- // a hi low close chart
- else {
- var yp = s._yaxis.series_u2p;
- if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][1]) && y <= yp(s.data[j][2])) {
- return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
- }
- }
-
- }
- else if (p[0] != null && p[1] != null){
- d = Math.sqrt( (x-p[0]) * (x-p[0]) + (y-p[1]) * (y-p[1]) );
- if (d <= threshold && (d <= d0 || d0 == null)) {
- d0 = d;
- return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
- }
- }
- }
- }
- }
- break;
-
- default:
- x = gridpos.x;
- y = gridpos.y;
- r = s.renderer;
- if (s.show) {
- t = s.markerRenderer.size/2+s.neighborThreshold;
- threshold = (t > 0) ? t : 0;
- for (var j=0; j<s.gridData.length; j++) {
- p = s.gridData[j];
- // neighbor looks different to OHLC chart.
- if (r.constructor == $.jqplot.OHLCRenderer) {
- if (r.candleStick) {
- var yp = s._yaxis.series_u2p;
- if (x >= p[0]-r._bodyWidth/2 && x <= p[0]+r._bodyWidth/2 && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) {
- return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
- }
- }
- // if an open hi low close chart
- else if (!r.hlc){
- var yp = s._yaxis.series_u2p;
- if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) {
- return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
- }
- }
- // a hi low close chart
- else {
- var yp = s._yaxis.series_u2p;
- if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][1]) && y <= yp(s.data[j][2])) {
- return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
- }
- }
-
- }
- else {
- d = Math.sqrt( (x-p[0]) * (x-p[0]) + (y-p[1]) * (y-p[1]) );
- if (d <= threshold && (d <= d0 || d0 == null)) {
- d0 = d;
- return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]};
- }
- }
- }
- }
- break;
- }
- }
-
- return null;
- }
-
-
-
- this.onClick = function(ev) {
- // Event passed in is normalized and will have data attribute.
- // Event passed out is unnormalized.
- var positions = getEventPosition(ev);
- var p = ev.data.plot;
- var neighbor = checkIntersection(positions.gridPos, p);
- var evt = $.Event('jqplotClick');
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
- };
-
- this.onDblClick = function(ev) {
- // Event passed in is normalized and will have data attribute.
- // Event passed out is unnormalized.
- var positions = getEventPosition(ev);
- var p = ev.data.plot;
- var neighbor = checkIntersection(positions.gridPos, p);
- var evt = $.Event('jqplotDblClick');
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
- };
-
- this.onMouseDown = function(ev) {
- var positions = getEventPosition(ev);
- var p = ev.data.plot;
- var neighbor = checkIntersection(positions.gridPos, p);
- var evt = $.Event('jqplotMouseDown');
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
- };
-
- this.onMouseUp = function(ev) {
- var positions = getEventPosition(ev);
- var evt = $.Event('jqplotMouseUp');
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- $(this).trigger(evt, [positions.gridPos, positions.dataPos, null, ev.data.plot]);
- };
-
- this.onRightClick = function(ev) {
- var positions = getEventPosition(ev);
- var p = ev.data.plot;
- var neighbor = checkIntersection(positions.gridPos, p);
- if (p.captureRightClick) {
- if (ev.which == 3) {
- var evt = $.Event('jqplotRightClick');
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
- }
- else {
- var evt = $.Event('jqplotMouseUp');
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
- }
- }
- };
-
- this.onMouseMove = function(ev) {
- var positions = getEventPosition(ev);
- var p = ev.data.plot;
- var neighbor = checkIntersection(positions.gridPos, p);
- var evt = $.Event('jqplotMouseMove');
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]);
- };
-
- this.onMouseEnter = function(ev) {
- var positions = getEventPosition(ev);
- var p = ev.data.plot;
- var evt = $.Event('jqplotMouseEnter');
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- evt.relatedTarget = ev.relatedTarget;
- $(this).trigger(evt, [positions.gridPos, positions.dataPos, null, p]);
- };
-
- this.onMouseLeave = function(ev) {
- var positions = getEventPosition(ev);
- var p = ev.data.plot;
- var evt = $.Event('jqplotMouseLeave');
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- evt.relatedTarget = ev.relatedTarget;
- $(this).trigger(evt, [positions.gridPos, positions.dataPos, null, p]);
- };
-
- // method: drawSeries
- // 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.
- this.drawSeries = function(options, idx){
- var i, series, ctx;
- // if only one argument passed in and it is a number, use it ad idx.
- idx = (typeof(options) === "number" && idx == null) ? options : idx;
- options = (typeof(options) === "object") ? options : {};
- // draw specified series
- if (idx != undefined) {
- series = this.series[idx];
- ctx = series.shadowCanvas._ctx;
- ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
- series.drawShadow(ctx, options, this);
- ctx = series.canvas._ctx;
- ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
- series.draw(ctx, options, this);
- if (series.renderer.constructor == $.jqplot.BezierCurveRenderer) {
- if (idx < this.series.length - 1) {
- this.drawSeries(idx+1);
- }
- }
- }
-
- else {
- // if call series drawShadow method first, in case all series shadows
- // should be drawn before any series. This will ensure, like for
- // stacked bar plots, that shadows don't overlap series.
- for (i=0; i<this.series.length; i++) {
- // first clear the canvas
- series = this.series[i];
- ctx = series.shadowCanvas._ctx;
- ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
- series.drawShadow(ctx, options, this);
- ctx = series.canvas._ctx;
- ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
- series.draw(ctx, options, this);
- }
- }
- options = idx = i = series = ctx = null;
- };
-
- // method: moveSeriesToFront
- // 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:
- // idx - 0 based index of the series to move. This will be the index of the series
- // as it was first passed into the jqplot function.
- this.moveSeriesToFront = function (idx) {
- idx = parseInt(idx, 10);
- var stackIndex = $.inArray(idx, this.seriesStack);
- // if already in front, return
- if (stackIndex == -1) {
- return;
- }
- if (stackIndex == this.seriesStack.length -1) {
- this.previousSeriesStack = this.seriesStack.slice(0);
- return;
- }
- var opidx = this.seriesStack[this.seriesStack.length -1];
- var serelem = this.series[idx].canvas._elem.detach();
- var shadelem = this.series[idx].shadowCanvas._elem.detach();
- this.series[opidx].shadowCanvas._elem.after(shadelem);
- this.series[opidx].canvas._elem.after(serelem);
- this.previousSeriesStack = this.seriesStack.slice(0);
- this.seriesStack.splice(stackIndex, 1);
- this.seriesStack.push(idx);
- };
-
- // method: moveSeriesToBack
- // This method requires jQuery 1.4+
- // Moves the specified series canvas behind all other series canvases.
- //
- // Parameters:
- // idx - 0 based index of the series to move. This will be the index of the series
- // as it was first passed into the jqplot function.
- this.moveSeriesToBack = function (idx) {
- idx = parseInt(idx, 10);
- var stackIndex = $.inArray(idx, this.seriesStack);
- // if already in back, return
- if (stackIndex == 0 || stackIndex == -1) {
- return;
- }
- var opidx = this.seriesStack[0];
- var serelem = this.series[idx].canvas._elem.detach();
- var shadelem = this.series[idx].shadowCanvas._elem.detach();
- this.series[opidx].shadowCanvas._elem.before(shadelem);
- this.series[opidx].canvas._elem.before(serelem);
- this.previousSeriesStack = this.seriesStack.slice(0);
- this.seriesStack.splice(stackIndex, 1);
- this.seriesStack.unshift(idx);
- };
-
- // method: restorePreviousSeriesOrder
- // 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.
- this.restorePreviousSeriesOrder = function () {
- var i, j, serelem, shadelem, temp, move, keep;
- // if no change, return.
- if (this.seriesStack == this.previousSeriesStack) {
- return;
- }
- for (i=1; i<this.previousSeriesStack.length; i++) {
- move = this.previousSeriesStack[i];
- keep = this.previousSeriesStack[i-1];
- serelem = this.series[move].canvas._elem.detach();
- shadelem = this.series[move].shadowCanvas._elem.detach();
- this.series[keep].shadowCanvas._elem.after(shadelem);
- this.series[keep].canvas._elem.after(serelem);
- }
- temp = this.seriesStack.slice(0);
- this.seriesStack = this.previousSeriesStack.slice(0);
- this.previousSeriesStack = temp;
- };
-
- // method: restoreOriginalSeriesOrder
- // This method requires jQuery 1.4+
- // Restore the series canvas order to its original order
- // when the plot was created.
- this.restoreOriginalSeriesOrder = function () {
- var i, j, arr=[], serelem, shadelem;
- for (i=0; i<this.series.length; i++) {
- arr.push(i);
- }
- if (this.seriesStack == arr) {
- return;
- }
- this.previousSeriesStack = this.seriesStack.slice(0);
- this.seriesStack = arr;
- for (i=1; i<this.seriesStack.length; i++) {
- serelem = this.series[i].canvas._elem.detach();
- shadelem = this.series[i].shadowCanvas._elem.detach();
- this.series[i-1].shadowCanvas._elem.after(shadelem);
- this.series[i-1].canvas._elem.after(serelem);
- }
- };
-
- this.activateTheme = function (name) {
- this.themeEngine.activate(this, name);
- };
- }
-
-
- // conpute a highlight color or array of highlight colors from given colors.
- $.jqplot.computeHighlightColors = function(colors) {
- var ret;
- if ($.isArray(colors)) {
- ret = [];
- for (var i=0; i<colors.length; i++){
- var rgba = $.jqplot.getColorComponents(colors[i]);
- var newrgb = [rgba[0], rgba[1], rgba[2]];
- var sum = newrgb[0] + newrgb[1] + newrgb[2];
- for (var j=0; j<3; j++) {
- // when darkening, lowest color component can be is 60.
- newrgb[j] = (sum > 660) ? newrgb[j] * 0.85 : 0.73 * newrgb[j] + 90;
- newrgb[j] = parseInt(newrgb[j], 10);
- (newrgb[j] > 255) ? 255 : newrgb[j];
- }
- // newrgb[3] = (rgba[3] > 0.4) ? rgba[3] * 0.4 : rgba[3] * 1.5;
- // newrgb[3] = (rgba[3] > 0.5) ? 0.8 * rgba[3] - .1 : rgba[3] + 0.2;
- newrgb[3] = 0.3 + 0.35 * rgba[3];
- ret.push('rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+newrgb[3]+')');
- }
- }
- else {
- var rgba = $.jqplot.getColorComponents(colors);
- var newrgb = [rgba[0], rgba[1], rgba[2]];
- var sum = newrgb[0] + newrgb[1] + newrgb[2];
- for (var j=0; j<3; j++) {
- // when darkening, lowest color component can be is 60.
- // newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]);
- // newrgb[j] = parseInt(newrgb[j], 10);
- newrgb[j] = (sum > 660) ? newrgb[j] * 0.85 : 0.73 * newrgb[j] + 90;
- newrgb[j] = parseInt(newrgb[j], 10);
- (newrgb[j] > 255) ? 255 : newrgb[j];
- }
- // newrgb[3] = (rgba[3] > 0.4) ? rgba[3] * 0.4 : rgba[3] * 1.5;
- // newrgb[3] = (rgba[3] > 0.5) ? 0.8 * rgba[3] - .1 : rgba[3] + 0.2;
- newrgb[3] = 0.3 + 0.35 * rgba[3];
- ret = 'rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+newrgb[3]+')';
- }
- return ret;
- };
-
- $.jqplot.ColorGenerator = function(colors) {
- colors = colors || $.jqplot.config.defaultColors;
- var idx = 0;
-
- this.next = function () {
- if (idx < colors.length) {
- return colors[idx++];
- }
- else {
- idx = 0;
- return colors[idx++];
- }
- };
-
- this.previous = function () {
- if (idx > 0) {
- return colors[idx--];
- }
- else {
- idx = colors.length-1;
- return colors[idx];
- }
- };
-
- // get a color by index without advancing pointer.
- this.get = function(i) {
- var idx = i - colors.length * Math.floor(i/colors.length);
- return colors[idx];
- };
-
- this.setColors = function(c) {
- colors = c;
- };
-
- this.reset = function() {
- idx = 0;
- };
-
- this.getIndex = function() {
- return idx;
- };
-
- this.setIndex = function(index) {
- idx = index;
- };
- };
-
- // convert a hex color string to rgb string.
- // h - 3 or 6 character hex string, with or without leading #
- // a - optional alpha
- $.jqplot.hex2rgb = function(h, a) {
- h = h.replace('#', '');
- if (h.length == 3) {
- h = h.charAt(0)+h.charAt(0)+h.charAt(1)+h.charAt(1)+h.charAt(2)+h.charAt(2);
- }
- var rgb;
- rgb = 'rgba('+parseInt(h.slice(0,2), 16)+', '+parseInt(h.slice(2,4), 16)+', '+parseInt(h.slice(4,6), 16);
- if (a) {
- rgb += ', '+a;
- }
- rgb += ')';
- return rgb;
- };
-
- // convert an rgb color spec to a hex spec. ignore any alpha specification.
- $.jqplot.rgb2hex = function(s) {
- var pat = /rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *(?:, *[0-9.]*)?\)/;
- var m = s.match(pat);
- var h = '#';
- for (var i=1; i<4; i++) {
- var temp;
- if (m[i].search(/%/) != -1) {
- temp = parseInt(255*m[i]/100, 10).toString(16);
- if (temp.length == 1) {
- temp = '0'+temp;
- }
- }
- else {
- temp = parseInt(m[i], 10).toString(16);
- if (temp.length == 1) {
- temp = '0'+temp;
- }
- }
- h += temp;
- }
- return h;
- };
-
- // given a css color spec, return an rgb css color spec
- $.jqplot.normalize2rgb = function(s, a) {
- if (s.search(/^ *rgba?\(/) != -1) {
- return s;
- }
- else if (s.search(/^ *#?[0-9a-fA-F]?[0-9a-fA-F]/) != -1) {
- return $.jqplot.hex2rgb(s, a);
- }
- else {
- throw 'invalid color spec';
- }
- };
-
- // extract the r, g, b, a color components out of a css color spec.
- $.jqplot.getColorComponents = function(s) {
- // check to see if a color keyword.
- s = $.jqplot.colorKeywordMap[s] || s;
- var rgb = $.jqplot.normalize2rgb(s);
- var pat = /rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *,? *([0-9.]* *)?\)/;
- var m = rgb.match(pat);
- var ret = [];
- for (var i=1; i<4; i++) {
- if (m[i].search(/%/) != -1) {
- ret[i-1] = parseInt(255*m[i]/100, 10);
- }
- else {
- ret[i-1] = parseInt(m[i], 10);
- }
- }
- ret[3] = parseFloat(m[4]) ? parseFloat(m[4]) : 1.0;
- return ret;
- };
-
- $.jqplot.colorKeywordMap = {
- aliceblue: 'rgb(240, 248, 255)',
- antiquewhite: 'rgb(250, 235, 215)',
- aqua: 'rgb( 0, 255, 255)',
- aquamarine: 'rgb(127, 255, 212)',
- azure: 'rgb(240, 255, 255)',
- beige: 'rgb(245, 245, 220)',
- bisque: 'rgb(255, 228, 196)',
- black: 'rgb( 0, 0, 0)',
- blanchedalmond: 'rgb(255, 235, 205)',
- blue: 'rgb( 0, 0, 255)',
- blueviolet: 'rgb(138, 43, 226)',
- brown: 'rgb(165, 42, 42)',
- burlywood: 'rgb(222, 184, 135)',
- cadetblue: 'rgb( 95, 158, 160)',
- chartreuse: 'rgb(127, 255, 0)',
- chocolate: 'rgb(210, 105, 30)',
- coral: 'rgb(255, 127, 80)',
- cornflowerblue: 'rgb(100, 149, 237)',
- cornsilk: 'rgb(255, 248, 220)',
- crimson: 'rgb(220, 20, 60)',
- cyan: 'rgb( 0, 255, 255)',
- darkblue: 'rgb( 0, 0, 139)',
- darkcyan: 'rgb( 0, 139, 139)',
- darkgoldenrod: 'rgb(184, 134, 11)',
- darkgray: 'rgb(169, 169, 169)',
- darkgreen: 'rgb( 0, 100, 0)',
- darkgrey: 'rgb(169, 169, 169)',
- darkkhaki: 'rgb(189, 183, 107)',
- darkmagenta: 'rgb(139, 0, 139)',
- darkolivegreen: 'rgb( 85, 107, 47)',
- darkorange: 'rgb(255, 140, 0)',
- darkorchid: 'rgb(153, 50, 204)',
- darkred: 'rgb(139, 0, 0)',
- darksalmon: 'rgb(233, 150, 122)',
- darkseagreen: 'rgb(143, 188, 143)',
- darkslateblue: 'rgb( 72, 61, 139)',
- darkslategray: 'rgb( 47, 79, 79)',
- darkslategrey: 'rgb( 47, 79, 79)',
- darkturquoise: 'rgb( 0, 206, 209)',
- darkviolet: 'rgb(148, 0, 211)',
- deeppink: 'rgb(255, 20, 147)',
- deepskyblue: 'rgb( 0, 191, 255)',
- dimgray: 'rgb(105, 105, 105)',
- dimgrey: 'rgb(105, 105, 105)',
- dodgerblue: 'rgb( 30, 144, 255)',
- firebrick: 'rgb(178, 34, 34)',
- floralwhite: 'rgb(255, 250, 240)',
- forestgreen: 'rgb( 34, 139, 34)',
- fuchsia: 'rgb(255, 0, 255)',
- gainsboro: 'rgb(220, 220, 220)',
- ghostwhite: 'rgb(248, 248, 255)',
- gold: 'rgb(255, 215, 0)',
- goldenrod: 'rgb(218, 165, 32)',
- gray: 'rgb(128, 128, 128)',
- grey: 'rgb(128, 128, 128)',
- green: 'rgb( 0, 128, 0)',
- greenyellow: 'rgb(173, 255, 47)',
- honeydew: 'rgb(240, 255, 240)',
- hotpink: 'rgb(255, 105, 180)',
- indianred: 'rgb(205, 92, 92)',
- indigo: 'rgb( 75, 0, 130)',
- ivory: 'rgb(255, 255, 240)',
- khaki: 'rgb(240, 230, 140)',
- lavender: 'rgb(230, 230, 250)',
- lavenderblush: 'rgb(255, 240, 245)',
- lawngreen: 'rgb(124, 252, 0)',
- lemonchiffon: 'rgb(255, 250, 205)',
- lightblue: 'rgb(173, 216, 230)',
- lightcoral: 'rgb(240, 128, 128)',
- lightcyan: 'rgb(224, 255, 255)',
- lightgoldenrodyellow: 'rgb(250, 250, 210)',
- lightgray: 'rgb(211, 211, 211)',
- lightgreen: 'rgb(144, 238, 144)',
- lightgrey: 'rgb(211, 211, 211)',
- lightpink: 'rgb(255, 182, 193)',
- lightsalmon: 'rgb(255, 160, 122)',
- lightseagreen: 'rgb( 32, 178, 170)',
- lightskyblue: 'rgb(135, 206, 250)',
- lightslategray: 'rgb(119, 136, 153)',
- lightslategrey: 'rgb(119, 136, 153)',
- lightsteelblue: 'rgb(176, 196, 222)',
- lightyellow: 'rgb(255, 255, 224)',
- lime: 'rgb( 0, 255, 0)',
- limegreen: 'rgb( 50, 205, 50)',
- linen: 'rgb(250, 240, 230)',
- magenta: 'rgb(255, 0, 255)',
- maroon: 'rgb(128, 0, 0)',
- mediumaquamarine: 'rgb(102, 205, 170)',
- mediumblue: 'rgb( 0, 0, 205)',
- mediumorchid: 'rgb(186, 85, 211)',
- mediumpurple: 'rgb(147, 112, 219)',
- mediumseagreen: 'rgb( 60, 179, 113)',
- mediumslateblue: 'rgb(123, 104, 238)',
- mediumspringgreen: 'rgb( 0, 250, 154)',
- mediumturquoise: 'rgb( 72, 209, 204)',
- mediumvioletred: 'rgb(199, 21, 133)',
- midnightblue: 'rgb( 25, 25, 112)',
- mintcream: 'rgb(245, 255, 250)',
- mistyrose: 'rgb(255, 228, 225)',
- moccasin: 'rgb(255, 228, 181)',
- navajowhite: 'rgb(255, 222, 173)',
- navy: 'rgb( 0, 0, 128)',
- oldlace: 'rgb(253, 245, 230)',
- olive: 'rgb(128, 128, 0)',
- olivedrab: 'rgb(107, 142, 35)',
- orange: 'rgb(255, 165, 0)',
- orangered: 'rgb(255, 69, 0)',
- orchid: 'rgb(218, 112, 214)',
- palegoldenrod: 'rgb(238, 232, 170)',
- palegreen: 'rgb(152, 251, 152)',
- paleturquoise: 'rgb(175, 238, 238)',
- palevioletred: 'rgb(219, 112, 147)',
- papayawhip: 'rgb(255, 239, 213)',
- peachpuff: 'rgb(255, 218, 185)',
- peru: 'rgb(205, 133, 63)',
- pink: 'rgb(255, 192, 203)',
- plum: 'rgb(221, 160, 221)',
- powderblue: 'rgb(176, 224, 230)',
- purple: 'rgb(128, 0, 128)',
- red: 'rgb(255, 0, 0)',
- rosybrown: 'rgb(188, 143, 143)',
- royalblue: 'rgb( 65, 105, 225)',
- saddlebrown: 'rgb(139, 69, 19)',
- salmon: 'rgb(250, 128, 114)',
- sandybrown: 'rgb(244, 164, 96)',
- seagreen: 'rgb( 46, 139, 87)',
- seashell: 'rgb(255, 245, 238)',
- sienna: 'rgb(160, 82, 45)',
- silver: 'rgb(192, 192, 192)',
- skyblue: 'rgb(135, 206, 235)',
- slateblue: 'rgb(106, 90, 205)',
- slategray: 'rgb(112, 128, 144)',
- slategrey: 'rgb(112, 128, 144)',
- snow: 'rgb(255, 250, 250)',
- springgreen: 'rgb( 0, 255, 127)',
- steelblue: 'rgb( 70, 130, 180)',
- tan: 'rgb(210, 180, 140)',
- teal: 'rgb( 0, 128, 128)',
- thistle: 'rgb(216, 191, 216)',
- tomato: 'rgb(255, 99, 71)',
- turquoise: 'rgb( 64, 224, 208)',
- violet: 'rgb(238, 130, 238)',
- wheat: 'rgb(245, 222, 179)',
- white: 'rgb(255, 255, 255)',
- whitesmoke: 'rgb(245, 245, 245)',
- yellow: 'rgb(255, 255, 0)',
- yellowgreen: 'rgb(154, 205, 50)'
- };
-
-
-
- // class: $.jqplot.AxisLabelRenderer
- // Renderer to place labels on the axes.
- $.jqplot.AxisLabelRenderer = function(options) {
- // Group: Properties
- $.jqplot.ElemContainer.call(this);
- // name of the axis associated with this tick
- this.axis;
- // prop: show
- // wether or not to show the tick (mark and label).
- this.show = true;
- // prop: label
- // The text or html for the label.
- this.label = '';
- this.fontFamily = null;
- this.fontSize = null;
- this.textColor = null;
- this._elem;
- // prop: escapeHTML
- // true to escape HTML entities in the label.
- this.escapeHTML = false;
-
- $.extend(true, this, options);
- };
-
- $.jqplot.AxisLabelRenderer.prototype = new $.jqplot.ElemContainer();
- $.jqplot.AxisLabelRenderer.prototype.constructor = $.jqplot.AxisLabelRenderer;
-
- $.jqplot.AxisLabelRenderer.prototype.init = function(options) {
- $.extend(true, this, options);
- };
-
- $.jqplot.AxisLabelRenderer.prototype.draw = function(ctx, plot) {
- // Memory Leaks patch
- if (this._elem) {
- this._elem.emptyForce();
- this._elem = null;
- }
-
- this._elem = $('<div style="position:absolute;" class="jqplot-'+this.axis+'-label"></div>');
-
- if (Number(this.label)) {
- this._elem.css('white-space', 'nowrap');
- }
-
- if (!this.escapeHTML) {
- this._elem.html(this.label);
- }
- else {
- this._elem.text(this.label);
- }
- if (this.fontFamily) {
- this._elem.css('font-family', this.fontFamily);
- }
- if (this.fontSize) {
- this._elem.css('font-size', this.fontSize);
- }
- if (this.textColor) {
- this._elem.css('color', this.textColor);
- }
-
- return this._elem;
- };
-
- $.jqplot.AxisLabelRenderer.prototype.pack = function() {
- };
-
- // class: $.jqplot.AxisTickRenderer
- // A "tick" object showing the value of a tick/gridline on the plot.
- $.jqplot.AxisTickRenderer = function(options) {
- // Group: Properties
- $.jqplot.ElemContainer.call(this);
- // prop: mark
- // tick mark on the axis. One of 'inside', 'outside', 'cross', '' or null.
- this.mark = 'outside';
- // name of the axis associated with this tick
- this.axis;
- // prop: showMark
- // wether or not to show the mark on the axis.
- this.showMark = true;
- // prop: showGridline
- // wether or not to draw the gridline on the grid at this tick.
- this.showGridline = true;
- // prop: isMinorTick
- // if this is a minor tick.
- this.isMinorTick = false;
- // prop: size
- // Length of the tick beyond the grid in pixels.
- // DEPRECATED: This has been superceeded by markSize
- this.size = 4;
- // prop: markSize
- // 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.
- this.markSize = 6;
- // prop: show
- // 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.
- this.show = true;
- // prop: showLabel
- // wether or not to show the label.
- this.showLabel = true;
- this.label = null;
- this.value = null;
- this._styles = {};
- // prop: formatter
- // A class of a formatter for the tick text. sprintf by default.
- this.formatter = $.jqplot.DefaultTickFormatter;
- // prop: prefix
- // String to prepend to the tick label.
- // Prefix is prepended to the formatted tick label.
- this.prefix = '';
- // prop: suffix
- // String to append to the tick label.
- // Suffix is appended to the formatted tick label.
- this.suffix = '';
- // prop: formatString
- // string passed to the formatter.
- this.formatString = '';
- // prop: fontFamily
- // css spec for the font-family css attribute.
- this.fontFamily;
- // prop: fontSize
- // css spec for the font-size css attribute.
- this.fontSize;
- // prop: textColor
- // css spec for the color attribute.
- this.textColor;
- // prop: escapeHTML
- // true to escape HTML entities in the label.
- this.escapeHTML = false;
- this._elem;
- this._breakTick = false;
-
- $.extend(true, this, options);
- };
-
- $.jqplot.AxisTickRenderer.prototype.init = function(options) {
- $.extend(true, this, options);
- };
-
- $.jqplot.AxisTickRenderer.prototype = new $.jqplot.ElemContainer();
- $.jqplot.AxisTickRenderer.prototype.constructor = $.jqplot.AxisTickRenderer;
-
- $.jqplot.AxisTickRenderer.prototype.setTick = function(value, axisName, isMinor) {
- this.value = value;
- this.axis = axisName;
- if (isMinor) {
- this.isMinorTick = true;
- }
- return this;
- };
-
- $.jqplot.AxisTickRenderer.prototype.draw = function() {
- if (this.label === null) {
- this.label = this.prefix + this.formatter(this.formatString, this.value) + this.suffix;
- }
- var style = {position: 'absolute'};
- if (Number(this.label)) {
- style['whitSpace'] = 'nowrap';
- }
-
- // Memory Leaks patch
- if (this._elem) {
- this._elem.emptyForce();
- this._elem = null;
- }
-
- this._elem = $(document.createElement('div'));
- this._elem.addClass("jqplot-"+this.axis+"-tick");
-
- if (!this.escapeHTML) {
- this._elem.html(this.label);
- }
- else {
- this._elem.text(this.label);
- }
-
- this._elem.css(style);
-
- for (var s in this._styles) {
- this._elem.css(s, this._styles[s]);
- }
- if (this.fontFamily) {
- this._elem.css('font-family', this.fontFamily);
- }
- if (this.fontSize) {
- this._elem.css('font-size', this.fontSize);
- }
- if (this.textColor) {
- this._elem.css('color', this.textColor);
- }
- if (this._breakTick) {
- this._elem.addClass('jqplot-breakTick');
- }
-
- return this._elem;
- };
-
- $.jqplot.DefaultTickFormatter = function (format, val) {
- if (typeof val == 'number') {
- if (!format) {
- format = $.jqplot.config.defaultTickFormatString;
- }
- return $.jqplot.sprintf(format, val);
- }
- else {
- return String(val);
- }
- };
-
- $.jqplot.PercentTickFormatter = function (format, val) {
- if (typeof val == 'number') {
- val = 100 * val;
- if (!format) {
- format = $.jqplot.config.defaultTickFormatString;
- }
- return $.jqplot.sprintf(format, val);
- }
- else {
- return String(val);
- }
- };
-
- $.jqplot.AxisTickRenderer.prototype.pack = function() {
- };
-
- // Class: $.jqplot.CanvasGridRenderer
- // The default jqPlot grid renderer, creating a grid on a canvas element.
- // The renderer has no additional options beyond the <Grid> class.
- $.jqplot.CanvasGridRenderer = function(){
- this.shadowRenderer = new $.jqplot.ShadowRenderer();
- };
-
- // called with context of Grid object
- $.jqplot.CanvasGridRenderer.prototype.init = function(options) {
- this._ctx;
- $.extend(true, this, options);
- // set the shadow renderer options
- var sopts = {lineJoin:'miter', lineCap:'round', fill:false, isarc:false, angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, depth:this.shadowDepth, lineWidth:this.shadowWidth, closePath:false, strokeStyle:this.shadowColor};
- this.renderer.shadowRenderer.init(sopts);
- };
-
- // called with context of Grid.
- $.jqplot.CanvasGridRenderer.prototype.createElement = function(plot) {
- var elem;
- // Memory Leaks patch
- if (this._elem) {
- if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) {
- elem = this._elem.get(0);
- window.G_vmlCanvasManager.uninitElement(elem);
- elem = null;
- }
-
- this._elem.emptyForce();
- this._elem = null;
- }
-
- elem = plot.canvasManager.getCanvas();
-
- var w = this._plotDimensions.width;
- var h = this._plotDimensions.height;
- elem.width = w;
- elem.height = h;
- this._elem = $(elem);
- this._elem.addClass('jqplot-grid-canvas');
- this._elem.css({ position: 'absolute', left: 0, top: 0 });
-
- elem = plot.canvasManager.initCanvas(elem);
-
- this._top = this._offsets.top;
- this._bottom = h - this._offsets.bottom;
- this._left = this._offsets.left;
- this._right = w - this._offsets.right;
- this._width = this._right - this._left;
- this._height = this._bottom - this._top;
- // avoid memory leak
- elem = null;
- return this._elem;
- };
-
- $.jqplot.CanvasGridRenderer.prototype.draw = function() {
- this._ctx = this._elem.get(0).getContext("2d");
- var ctx = this._ctx;
- var axes = this._axes;
- // Add the grid onto the grid canvas. This is the bottom most layer.
- ctx.save();
- ctx.clearRect(0, 0, this._plotDimensions.width, this._plotDimensions.height);
- ctx.fillStyle = this.backgroundColor || this.background;
- ctx.fillRect(this._left, this._top, this._width, this._height);
-
- ctx.save();
- ctx.lineJoin = 'miter';
- ctx.lineCap = 'butt';
- ctx.lineWidth = this.gridLineWidth;
- ctx.strokeStyle = this.gridLineColor;
- var b, e, s, m;
- var ax = ['xaxis', 'yaxis', 'x2axis', 'y2axis'];
- for (var i=4; i>0; i--) {
- var name = ax[i-1];
- var axis = axes[name];
- var ticks = axis._ticks;
- var numticks = ticks.length;
- if (axis.show) {
- if (axis.drawBaseline) {
- var bopts = {};
- if (axis.baselineWidth !== null) {
- bopts.lineWidth = axis.baselineWidth;
- }
- if (axis.baselineColor !== null) {
- bopts.strokeStyle = axis.baselineColor;
- }
- switch (name) {
- case 'xaxis':
- drawLine (this._left, this._bottom, this._right, this._bottom, bopts);
- break;
- case 'yaxis':
- drawLine (this._left, this._bottom, this._left, this._top, bopts);
- break;
- case 'x2axis':
- drawLine (this._left, this._bottom, this._right, this._bottom, bopts);
- break;
- case 'y2axis':
- drawLine (this._right, this._bottom, this._right, this._top, bopts);
- break;
- }
- }
- for (var j=numticks; j>0; j--) {
- var t = ticks[j-1];
- if (t.show) {
- var pos = Math.round(axis.u2p(t.value)) + 0.5;
- switch (name) {
- case 'xaxis':
- // draw the grid line if we should
- if (t.showGridline && this.drawGridlines && ((!t.isMinorTick && axis.drawMajorGridlines) || (t.isMinorTick && axis.drawMinorGridlines)) ) {
- drawLine(pos, this._top, pos, this._bottom);
- }
- // draw the mark
- if (t.showMark && t.mark && ((!t.isMinorTick && axis.drawMajorTickMarks) || (t.isMinorTick && axis.drawMinorTickMarks)) ) {
- s = t.markSize;
- m = t.mark;
- var pos = Math.round(axis.u2p(t.value)) + 0.5;
- switch (m) {
- case 'outside':
- b = this._bottom;
- e = this._bottom+s;
- break;
- case 'inside':
- b = this._bottom-s;
- e = this._bottom;
- break;
- case 'cross':
- b = this._bottom-s;
- e = this._bottom+s;
- break;
- default:
- b = this._bottom;
- e = this._bottom+s;
- break;
- }
- // draw the shadow
- if (this.shadow) {
- this.renderer.shadowRenderer.draw(ctx, [[pos,b],[pos,e]], {lineCap:'butt', lineWidth:this.gridLineWidth, offset:this.gridLineWidth*0.75, depth:2, fill:false, closePath:false});
- }
- // draw the line
- drawLine(pos, b, pos, e);
- }
- break;
- case 'yaxis':
- // draw the grid line
- if (t.showGridline && this.drawGridlines && ((!t.isMinorTick && axis.drawMajorGridlines) || (t.isMinorTick && axis.drawMinorGridlines)) ) {
- drawLine(this._right, pos, this._left, pos);
- }
- // draw the mark
- if (t.showMark && t.mark && ((!t.isMinorTick && axis.drawMajorTickMarks) || (t.isMinorTick && axis.drawMinorTickMarks)) ) {
- s = t.markSize;
- m = t.mark;
- var pos = Math.round(axis.u2p(t.value)) + 0.5;
- switch (m) {
- case 'outside':
- b = this._left-s;
- e = this._left;
- break;
- case 'inside':
- b = this._left;
- e = this._left+s;
- break;
- case 'cross':
- b = this._left-s;
- e = this._left+s;
- break;
- default:
- b = this._left-s;
- e = this._left;
- break;
- }
- // draw the shadow
- if (this.shadow) {
- this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
- }
- drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
- }
- break;
- case 'x2axis':
- // draw the grid line
- if (t.showGridline && this.drawGridlines && ((!t.isMinorTick && axis.drawMajorGridlines) || (t.isMinorTick && axis.drawMinorGridlines)) ) {
- drawLine(pos, this._bottom, pos, this._top);
- }
- // draw the mark
- if (t.showMark && t.mark && ((!t.isMinorTick && axis.drawMajorTickMarks) || (t.isMinorTick && axis.drawMinorTickMarks)) ) {
- s = t.markSize;
- m = t.mark;
- var pos = Math.round(axis.u2p(t.value)) + 0.5;
- switch (m) {
- case 'outside':
- b = this._top-s;
- e = this._top;
- break;
- case 'inside':
- b = this._top;
- e = this._top+s;
- break;
- case 'cross':
- b = this._top-s;
- e = this._top+s;
- break;
- default:
- b = this._top-s;
- e = this._top;
- break;
- }
- // draw the shadow
- if (this.shadow) {
- this.renderer.shadowRenderer.draw(ctx, [[pos,b],[pos,e]], {lineCap:'butt', lineWidth:this.gridLineWidth, offset:this.gridLineWidth*0.75, depth:2, fill:false, closePath:false});
- }
- drawLine(pos, b, pos, e);
- }
- break;
- case 'y2axis':
- // draw the grid line
- if (t.showGridline && this.drawGridlines && ((!t.isMinorTick && axis.drawMajorGridlines) || (t.isMinorTick && axis.drawMinorGridlines)) ) {
- drawLine(this._left, pos, this._right, pos);
- }
- // draw the mark
- if (t.showMark && t.mark && ((!t.isMinorTick && axis.drawMajorTickMarks) || (t.isMinorTick && axis.drawMinorTickMarks)) ) {
- s = t.markSize;
- m = t.mark;
- var pos = Math.round(axis.u2p(t.value)) + 0.5;
- switch (m) {
- case 'outside':
- b = this._right;
- e = this._right+s;
- break;
- case 'inside':
- b = this._right-s;
- e = this._right;
- break;
- case 'cross':
- b = this._right-s;
- e = this._right+s;
- break;
- default:
- b = this._right;
- e = this._right+s;
- break;
- }
- // draw the shadow
- if (this.shadow) {
- this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
- }
- drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
- }
- break;
- default:
- break;
- }
- }
- }
- t = null;
- }
- axis = null;
- ticks = null;
- }
- // Now draw grid lines for additional y axes
- //////
- // TO DO: handle yMidAxis
- //////
- ax = ['y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis', 'yMidAxis'];
- for (var i=7; i>0; i--) {
- var axis = axes[ax[i-1]];
- var ticks = axis._ticks;
- if (axis.show) {
- var tn = ticks[axis.numberTicks-1];
- var t0 = ticks[0];
- var left = axis.getLeft();
- var points = [[left, tn.getTop() + tn.getHeight()/2], [left, t0.getTop() + t0.getHeight()/2 + 1.0]];
- // draw the shadow
- if (this.shadow) {
- this.renderer.shadowRenderer.draw(ctx, points, {lineCap:'butt', fill:false, closePath:false});
- }
- // draw the line
- drawLine(points[0][0], points[0][1], points[1][0], points[1][1], {lineCap:'butt', strokeStyle:axis.borderColor, lineWidth:axis.borderWidth});
- // draw the tick marks
- for (var j=ticks.length; j>0; j--) {
- var t = ticks[j-1];
- s = t.markSize;
- m = t.mark;
- var pos = Math.round(axis.u2p(t.value)) + 0.5;
- if (t.showMark && t.mark) {
- switch (m) {
- case 'outside':
- b = left;
- e = left+s;
- break;
- case 'inside':
- b = left-s;
- e = left;
- break;
- case 'cross':
- b = left-s;
- e = left+s;
- break;
- default:
- b = left;
- e = left+s;
- break;
- }
- points = [[b,pos], [e,pos]];
- // draw the shadow
- if (this.shadow) {
- this.renderer.shadowRenderer.draw(ctx, points, {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
- }
- // draw the line
- drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
- }
- t = null;
- }
- t0 = null;
- }
- axis = null;
- ticks = null;
- }
-
- ctx.restore();
-
- function drawLine(bx, by, ex, ey, opts) {
- ctx.save();
- opts = opts || {};
- if (opts.lineWidth == null || opts.lineWidth != 0){
- $.extend(true, ctx, opts);
- ctx.beginPath();
- ctx.moveTo(bx, by);
- ctx.lineTo(ex, ey);
- ctx.stroke();
- ctx.restore();
- }
- }
-
- if (this.shadow) {
- var points = [[this._left, this._bottom], [this._right, this._bottom], [this._right, this._top]];
- this.renderer.shadowRenderer.draw(ctx, points);
- }
- // Now draw border around grid. Use axis border definitions. start at
- // upper left and go clockwise.
- if (this.borderWidth != 0 && this.drawBorder) {
- drawLine (this._left, this._top, this._right, this._top, {lineCap:'round', strokeStyle:axes.x2axis.borderColor, lineWidth:axes.x2axis.borderWidth});
- drawLine (this._right, this._top, this._right, this._bottom, {lineCap:'round', strokeStyle:axes.y2axis.borderColor, lineWidth:axes.y2axis.borderWidth});
- drawLine (this._right, this._bottom, this._left, this._bottom, {lineCap:'round', strokeStyle:axes.xaxis.borderColor, lineWidth:axes.xaxis.borderWidth});
- drawLine (this._left, this._bottom, this._left, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth});
- }
- // ctx.lineWidth = this.borderWidth;
- // ctx.strokeStyle = this.borderColor;
- // ctx.strokeRect(this._left, this._top, this._width, this._height);
-
- ctx.restore();
- ctx = null;
- axes = null;
- };
-
- // Class: $.jqplot.DivTitleRenderer
- // The default title renderer for jqPlot. This class has no options beyond the <Title> class.
- $.jqplot.DivTitleRenderer = function() {
- };
-
- $.jqplot.DivTitleRenderer.prototype.init = function(options) {
- $.extend(true, this, options);
- };
-
- $.jqplot.DivTitleRenderer.prototype.draw = function() {
- // Memory Leaks patch
- if (this._elem) {
- this._elem.emptyForce();
- this._elem = null;
- }
-
- var r = this.renderer;
- var elem = document.createElement('div');
- this._elem = $(elem);
- this._elem.addClass('jqplot-title');
-
- if (!this.text) {
- this.show = false;
- this._elem.height(0);
- this._elem.width(0);
- }
- else if (this.text) {
- var color;
- if (this.color) {
- color = this.color;
- }
- else if (this.textColor) {
- color = this.textColor;
- }
-
- // don't trust that a stylesheet is present, set the position.
- var styles = {position:'absolute', top:'0px', left:'0px'};
-
- if (this._plotWidth) {
- styles['width'] = this._plotWidth+'px';
- }
- if (this.fontSize) {
- styles['fontSize'] = this.fontSize;
- }
- if (typeof this.textAlign === 'string') {
- styles['textAlign'] = this.textAlign;
- }
- else {
- styles['textAlign'] = 'center';
- }
- if (color) {
- styles['color'] = color;
- }
- if (this.paddingBottom) {
- styles['paddingBottom'] = this.paddingBottom;
- }
- if (this.fontFamily) {
- styles['fontFamily'] = this.fontFamily;
- }
-
- this._elem.css(styles);
- if (this.escapeHtml) {
- this._elem.text(this.text);
- }
- else {
- this._elem.html(this.text);
- }
-
-
- // styletext += (this._plotWidth) ? 'width:'+this._plotWidth+'px;' : '';
- // styletext += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
- // styletext += (this.textAlign) ? 'text-align:'+this.textAlign+';' : 'text-align:center;';
- // styletext += (color) ? 'color:'+color+';' : '';
- // styletext += (this.paddingBottom) ? 'padding-bottom:'+this.paddingBottom+';' : '';
- // this._elem = $('<div class="jqplot-title" style="'+styletext+'">'+this.text+'</div>');
- // if (this.fontFamily) {
- // this._elem.css('font-family', this.fontFamily);
- // }
- }
-
- elem = null;
-
- return this._elem;
- };
-
- $.jqplot.DivTitleRenderer.prototype.pack = function() {
- // nothing to do here
- };
-
-
- var dotlen = 0.1;
-
- $.jqplot.LinePattern = function (ctx, pattern) {
-
- var defaultLinePatterns = {
- dotted: [ dotlen, $.jqplot.config.dotGapLength ],
- dashed: [ $.jqplot.config.dashLength, $.jqplot.config.gapLength ],
- solid: null
- };
-
- if (typeof pattern === 'string') {
- if (pattern[0] === '.' || pattern[0] === '-') {
- var s = pattern;
- pattern = [];
- for (var i=0, imax=s.length; i<imax; i++) {
- if (s[i] === '.') {
- pattern.push( dotlen );
- }
- else if (s[i] === '-') {
- pattern.push( $.jqplot.config.dashLength );
- }
- else {
- continue;
- }
- pattern.push( $.jqplot.config.gapLength );
- }
- }
- else {
- pattern = defaultLinePatterns[pattern];
- }
- }
-
- if (!(pattern && pattern.length)) {
- return ctx;
- }
-
- var patternIndex = 0;
- var patternDistance = pattern[0];
- var px = 0;
- var py = 0;
- var pathx0 = 0;
- var pathy0 = 0;
-
- var moveTo = function (x, y) {
- ctx.moveTo( x, y );
- px = x;
- py = y;
- pathx0 = x;
- pathy0 = y;
- };
-
- var lineTo = function (x, y) {
- var scale = ctx.lineWidth;
- var dx = x - px;
- var dy = y - py;
- var dist = Math.sqrt(dx*dx+dy*dy);
- if ((dist > 0) && (scale > 0)) {
- dx /= dist;
- dy /= dist;
- while (true) {
- var dp = scale * patternDistance;
- if (dp < dist) {
- px += dp * dx;
- py += dp * dy;
- if ((patternIndex & 1) == 0) {
- ctx.lineTo( px, py );
- }
- else {
- ctx.moveTo( px, py );
- }
- dist -= dp;
- patternIndex++;
- if (patternIndex >= pattern.length) {
- patternIndex = 0;
- }
- patternDistance = pattern[patternIndex];
- }
- else {
- px = x;
- py = y;
- if ((patternIndex & 1) == 0) {
- ctx.lineTo( px, py );
- }
- else {
- ctx.moveTo( px, py );
- }
- patternDistance -= dist / scale;
- break;
- }
- }
- }
- };
-
- var beginPath = function () {
- ctx.beginPath();
- };
-
- var closePath = function () {
- lineTo( pathx0, pathy0 );
- };
-
- return {
- moveTo: moveTo,
- lineTo: lineTo,
- beginPath: beginPath,
- closePath: closePath
- };
- };
-
- // Class: $.jqplot.LineRenderer
- // The default line renderer for jqPlot, this class has no options beyond the <Series> class.
- // Draws series as a line.
- $.jqplot.LineRenderer = function(){
- this.shapeRenderer = new $.jqplot.ShapeRenderer();
- this.shadowRenderer = new $.jqplot.ShadowRenderer();
- };
-
- // called with scope of series.
- $.jqplot.LineRenderer.prototype.init = function(options, plot) {
- // Group: Properties
- //
- options = options || {};
- this._type='line';
- this.renderer.animation = {
- show: false,
- direction: 'left',
- speed: 2500,
- _supported: true
- };
- // prop: smooth
- // 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.
- this.renderer.smooth = false; // true or a number > 2 for smoothing.
- this.renderer.tension = null; // null to auto compute or a number typically > 6. Fewer points requires higher tension.
- // prop: constrainSmoothing
- // 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.
- this.renderer.constrainSmoothing = true;
- // this is smoothed data in grid coordinates, like gridData
- this.renderer._smoothedData = [];
- // this is smoothed data in plot units (plot coordinates), like plotData.
- this.renderer._smoothedPlotData = [];
- this.renderer._hiBandGridData = [];
- this.renderer._lowBandGridData = [];
- this.renderer._hiBandSmoothedData = [];
- this.renderer._lowBandSmoothedData = [];
-
- // prop: 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.
- this.renderer.bandData = [];
-
- // Group: bands
- // Banding around line, e.g error bands or confidence intervals.
- this.renderer.bands = {
- // prop: show
- // true to show the bands. If bandData or interval is
- // supplied, show will be set to true by default.
- show: false,
- hiData: [],
- lowData: [],
- // prop: color
- // color of lines at top and bottom of bands [default: series color].
- color: this.color,
- // prop: showLines
- // True to show lines at top and bottom of bands [default: false].
- showLines: false,
- // prop: fill
- // True to fill area between bands [default: true].
- fill: true,
- // prop: fillColor
- // css color spec for filled area. [default: series color].
- fillColor: null,
- _min: null,
- _max: null,
- // prop: interval
- // 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%']
- interval: '3%'
- };
-
-
- var lopts = {highlightMouseOver: options.highlightMouseOver, highlightMouseDown: options.highlightMouseDown, highlightColor: options.highlightColor};
-
- delete (options.highlightMouseOver);
- delete (options.highlightMouseDown);
- delete (options.highlightColor);
-
- $.extend(true, this.renderer, options);
-
- this.renderer.options = options;
-
- // if we are given some band data, and bands aren't explicity set to false in options, turn them on.
- if (this.renderer.bandData.length > 1 && (!options.bands || options.bands.show == null)) {
- this.renderer.bands.show = true;
- }
-
- // if we are given an interval, and bands aren't explicity set to false in options, turn them on.
- else if (options.bands && options.bands.show == null && options.bands.interval != null) {
- this.renderer.bands.show = true;
- }
-
- // if plot is filled, turn off bands.
- if (this.fill) {
- this.renderer.bands.show = false;
- }
-
- if (this.renderer.bands.show) {
- this.renderer.initBands.call(this, this.renderer.options, plot);
- }
-
-
- // smoothing is not compatible with stacked lines, disable
- if (this._stack) {
- this.renderer.smooth = false;
- }
-
- // set the shape renderer options
- var opts = {lineJoin:this.lineJoin, lineCap:this.lineCap, fill:this.fill, isarc:false, strokeStyle:this.color, fillStyle:this.fillColor, lineWidth:this.lineWidth, linePattern:this.linePattern, closePath:this.fill};
- this.renderer.shapeRenderer.init(opts);
-
- var shadow_offset = options.shadowOffset;
- // set the shadow renderer options
- if (shadow_offset == null) {
- // scale the shadowOffset to the width of the line.
- if (this.lineWidth > 2.5) {
- shadow_offset = 1.25 * (1 + (Math.atan((this.lineWidth/2.5))/0.785398163 - 1)*0.6);
- // var shadow_offset = this.shadowOffset;
- }
- // for skinny lines, don't make such a big shadow.
- else {
- shadow_offset = 1.25 * Math.atan((this.lineWidth/2.5))/0.785398163;
- }
- }
-
- var sopts = {lineJoin:this.lineJoin, lineCap:this.lineCap, fill:this.fill, isarc:false, angle:this.shadowAngle, offset:shadow_offset, alpha:this.shadowAlpha, depth:this.shadowDepth, lineWidth:this.lineWidth, linePattern:this.linePattern, closePath:this.fill};
- this.renderer.shadowRenderer.init(sopts);
- this._areaPoints = [];
- this._boundingBox = [[],[]];
-
- if (!this.isTrendline && this.fill || this.renderer.bands.show) {
- // Group: Properties
- //
- // prop: highlightMouseOver
- // 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.
- this.highlightMouseOver = true;
- // prop: highlightMouseDown
- // True to highlight when a mouse button is pressed over an area on a filled plot.
- // This will be disabled if highlightMouseOver is true.
- this.highlightMouseDown = false;
- // prop: highlightColor
- // color to use when highlighting an area on a filled plot.
- this.highlightColor = null;
- // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
- if (lopts.highlightMouseDown && lopts.highlightMouseOver == null) {
- lopts.highlightMouseOver = false;
- }
-
- $.extend(true, this, {highlightMouseOver: lopts.highlightMouseOver, highlightMouseDown: lopts.highlightMouseDown, highlightColor: lopts.highlightColor});
-
- if (!this.highlightColor) {
- var fc = (this.renderer.bands.show) ? this.renderer.bands.fillColor : this.fillColor;
- this.highlightColor = $.jqplot.computeHighlightColors(fc);
- }
- // turn off (disable) the highlighter plugin
- if (this.highlighter) {
- this.highlighter.show = false;
- }
- }
-
- if (!this.isTrendline && plot) {
- plot.plugins.lineRenderer = {};
- plot.postInitHooks.addOnce(postInit);
- plot.postDrawHooks.addOnce(postPlotDraw);
- plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
- plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
- plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
- plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
- plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
- }
-
- };
-
- $.jqplot.LineRenderer.prototype.initBands = function(options, plot) {
- // use bandData if no data specified in bands option
- //var bd = this.renderer.bandData;
- var bd = options.bandData || [];
- var bands = this.renderer.bands;
- bands.hiData = [];
- bands.lowData = [];
- var data = this.data;
- bands._max = null;
- bands._min = null;
- // If 2 arrays, and each array greater than 2 elements, assume it is hi and low data bands of y values.
- if (bd.length == 2) {
- // Do we have an array of x,y values?
- // like [[[1,1], [2,4], [3,3]], [[1,3], [2,6], [3,5]]]
- if ($.isArray(bd[0][0])) {
- // since an arbitrary array of points, spin through all of them to determine max and min lines.
-
- var p;
- var bdminidx = 0, bdmaxidx = 0;
- for (var i = 0, l = bd[0].length; i<l; i++) {
- p = bd[0][i];
- if ((p[1] != null && p[1] > bands._max) || bands._max == null) {
- bands._max = p[1];
- }
- if ((p[1] != null && p[1] < bands._min) || bands._min == null) {
- bands._min = p[1];
- }
- }
- for (var i = 0, l = bd[1].length; i<l; i++) {
- p = bd[1][i];
- if ((p[1] != null && p[1] > bands._max) || bands._max == null) {
- bands._max = p[1];
- bdmaxidx = 1;
- }
- if ((p[1] != null && p[1] < bands._min) || bands._min == null) {
- bands._min = p[1];
- bdminidx = 1;
- }
- }
-
- if (bdmaxidx === bdminidx) {
- bands.show = false;
- }
-
- bands.hiData = bd[bdmaxidx];
- bands.lowData = bd[bdminidx];
- }
- // else data is arrays of y values
- // like [[1,4,3], [3,6,5]]
- // must have same number of band data points as points in series
- else if (bd[0].length === data.length && bd[1].length === data.length) {
- var hi = (bd[0][0] > bd[1][0]) ? 0 : 1;
- var low = (hi) ? 0 : 1;
- for (var i=0, l=data.length; i < l; i++) {
- bands.hiData.push([data[i][0], bd[hi][i]]);
- bands.lowData.push([data[i][0], bd[low][i]]);
- }
- }
-
- // we don't have proper data array, don't show bands.
- else {
- bands.show = false;
- }
- }
-
- // if more than 2 arrays, have arrays of [ylow, yhi] values.
- // note, can't distinguish case of [[ylow, yhi], [ylow, yhi]] from [[ylow, ylow], [yhi, yhi]]
- // this is assumed to be of the latter form.
- else if (bd.length > 2 && !$.isArray(bd[0][0])) {
- var hi = (bd[0][0] > bd[0][1]) ? 0 : 1;
- var low = (hi) ? 0 : 1;
- for (var i=0, l=bd.length; i<l; i++) {
- bands.hiData.push([data[i][0], bd[i][hi]]);
- bands.lowData.push([data[i][0], bd[i][low]]);
- }
- }
-
- // don't have proper data, auto calculate
- else {
- var intrv = bands.interval;
- var a = null;
- var b = null;
- var afunc = null;
- var bfunc = null;
-
- if ($.isArray(intrv)) {
- a = intrv[0];
- b = intrv[1];
- }
- else {
- a = intrv;
- }
-
- if (isNaN(a)) {
- // we have a string
- if (a.charAt(a.length - 1) === '%') {
- afunc = 'multiply';
- a = parseFloat(a)/100 + 1;
- }
- }
-
- else {
- a = parseFloat(a);
- afunc = 'add';
- }
-
- if (b !== null && isNaN(b)) {
- // we have a string
- if (b.charAt(b.length - 1) === '%') {
- bfunc = 'multiply';
- b = parseFloat(b)/100 + 1;
- }
- }
-
- else if (b !== null) {
- b = parseFloat(b);
- bfunc = 'add';
- }
-
- if (a !== null) {
- if (b === null) {
- b = -a;
- bfunc = afunc;
- if (bfunc === 'multiply') {
- b += 2;
- }
- }
-
- // make sure a always applies to hi band.
- if (a < b) {
- var temp = a;
- a = b;
- b = temp;
- temp = afunc;
- afunc = bfunc;
- bfunc = temp;
- }
-
- for (var i=0, l = data.length; i < l; i++) {
- switch (afunc) {
- case 'add':
- bands.hiData.push([data[i][0], data[i][1] + a]);
- break;
- case 'multiply':
- bands.hiData.push([data[i][0], data[i][1] * a]);
- break;
- }
- switch (bfunc) {
- case 'add':
- bands.lowData.push([data[i][0], data[i][1] + b]);
- break;
- case 'multiply':
- bands.lowData.push([data[i][0], data[i][1] * b]);
- break;
- }
- }
- }
-
- else {
- bands.show = false;
- }
- }
-
- var hd = bands.hiData;
- var ld = bands.lowData;
- for (var i = 0, l = hd.length; i<l; i++) {
- if ((hd[i][1] != null && hd[i][1] > bands._max) || bands._max == null) {
- bands._max = hd[i][1];
- }
- }
- for (var i = 0, l = ld.length; i<l; i++) {
- if ((ld[i][1] != null && ld[i][1] < bands._min) || bands._min == null) {
- bands._min = ld[i][1];
- }
- }
-
- // one last check for proper data
- // these don't apply any more since allowing arbitrary x,y values
- // if (bands.hiData.length != bands.lowData.length) {
- // bands.show = false;
- // }
-
- // if (bands.hiData.length != this.data.length) {
- // bands.show = false;
- // }
-
- if (bands.fillColor === null) {
- var c = $.jqplot.getColorComponents(bands.color);
- // now adjust alpha to differentiate fill
- c[3] = c[3] * 0.5;
- bands.fillColor = 'rgba(' + c[0] +', '+ c[1] +', '+ c[2] +', '+ c[3] + ')';
- }
- };
-
- function getSteps (d, f) {
- return (3.4182054+f) * Math.pow(d, -0.3534992);
- }
-
- function computeSteps (d1, d2) {
- var s = Math.sqrt(Math.pow((d2[0]- d1[0]), 2) + Math.pow ((d2[1] - d1[1]), 2));
- return 5.7648 * Math.log(s) + 7.4456;
- }
-
- function tanh (x) {
- var a = (Math.exp(2*x) - 1) / (Math.exp(2*x) + 1);
- return a;
- }
-
- //////////
- // computeConstrainedSmoothedData
- // An implementation of the constrained cubic spline interpolation
- // method as presented in:
- //
- // Kruger, CJC, Constrained Cubic Spine Interpolation for Chemical Engineering Applications
- // http://www.korf.co.uk/spline.pdf
- //
- // The implementation below borrows heavily from the sample Visual Basic
- // implementation by CJC Kruger found in http://www.korf.co.uk/spline.xls
- //
- /////////
-
- // called with scope of series
- function computeConstrainedSmoothedData (gd) {
- var smooth = this.renderer.smooth;
- var dim = this.canvas.getWidth();
- var xp = this._xaxis.series_p2u;
- var yp = this._yaxis.series_p2u;
- var steps =null;
- var _steps = null;
- var dist = gd.length/dim;
- var _smoothedData = [];
- var _smoothedPlotData = [];
-
- if (!isNaN(parseFloat(smooth))) {
- steps = parseFloat(smooth);
- }
- else {
- steps = getSteps(dist, 0.5);
- }
-
- var yy = [];
- var xx = [];
-
- for (var i=0, l = gd.length; i<l; i++) {
- yy.push(gd[i][1]);
- xx.push(gd[i][0]);
- }
-
- function dxx(x1, x0) {
- if (x1 - x0 == 0) {
- return Math.pow(10,10);
- }
- else {
- return x1 - x0;
- }
- }
-
- var A, B, C, D;
- // loop through each line segment. Have # points - 1 line segments. Nmber segments starting at 1.
- var nmax = gd.length - 1;
- for (var num = 1, gdl = gd.length; num<gdl; num++) {
- var gxx = [];
- var ggxx = [];
- // point at each end of segment.
- for (var j = 0; j < 2; j++) {
- var i = num - 1 + j; // point number, 0 to # points.
-
- if (i == 0 || i == nmax) {
- gxx[j] = Math.pow(10, 10);
- }
- else if (yy[i+1] - yy[i] == 0 || yy[i] - yy[i-1] == 0) {
- gxx[j] = 0;
- }
- else if (((xx[i+1] - xx[i]) / (yy[i+1] - yy[i]) + (xx[i] - xx[i-1]) / (yy[i] - yy[i-1])) == 0 ) {
- gxx[j] = 0;
- }
- else if ( (yy[i+1] - yy[i]) * (yy[i] - yy[i-1]) < 0 ) {
- gxx[j] = 0;
- }
-
- else {
- gxx[j] = 2 / (dxx(xx[i + 1], xx[i]) / (yy[i + 1] - yy[i]) + dxx(xx[i], xx[i - 1]) / (yy[i] - yy[i - 1]));
- }
- }
-
- // Reset first derivative (slope) at first and last point
- if (num == 1) {
- // First point has 0 2nd derivative
- gxx[0] = 3 / 2 * (yy[1] - yy[0]) / dxx(xx[1], xx[0]) - gxx[1] / 2;
- }
- else if (num == nmax) {
- // Last point has 0 2nd derivative
- gxx[1] = 3 / 2 * (yy[nmax] - yy[nmax - 1]) / dxx(xx[nmax], xx[nmax - 1]) - gxx[0] / 2;
- }
-
- // Calc second derivative at points
- ggxx[0] = -2 * (gxx[1] + 2 * gxx[0]) / dxx(xx[num], xx[num - 1]) + 6 * (yy[num] - yy[num - 1]) / Math.pow(dxx(xx[num], xx[num - 1]), 2);
- ggxx[1] = 2 * (2 * gxx[1] + gxx[0]) / dxx(xx[num], xx[num - 1]) - 6 * (yy[num] - yy[num - 1]) / Math.pow(dxx(xx[num], xx[num - 1]), 2);
-
- // Calc constants for cubic interpolation
- D = 1 / 6 * (ggxx[1] - ggxx[0]) / dxx(xx[num], xx[num - 1]);
- C = 1 / 2 * (xx[num] * ggxx[0] - xx[num - 1] * ggxx[1]) / dxx(xx[num], xx[num - 1]);
- B = (yy[num] - yy[num - 1] - C * (Math.pow(xx[num], 2) - Math.pow(xx[num - 1], 2)) - D * (Math.pow(xx[num], 3) - Math.pow(xx[num - 1], 3))) / dxx(xx[num], xx[num - 1]);
- A = yy[num - 1] - B * xx[num - 1] - C * Math.pow(xx[num - 1], 2) - D * Math.pow(xx[num - 1], 3);
-
- var increment = (xx[num] - xx[num - 1]) / steps;
- var temp, tempx;
-
- for (var j = 0, l = steps; j < l; j++) {
- temp = [];
- tempx = xx[num - 1] + j * increment;
- temp.push(tempx);
- temp.push(A + B * tempx + C * Math.pow(tempx, 2) + D * Math.pow(tempx, 3));
- _smoothedData.push(temp);
- _smoothedPlotData.push([xp(temp[0]), yp(temp[1])]);
- }
- }
-
- _smoothedData.push(gd[i]);
- _smoothedPlotData.push([xp(gd[i][0]), yp(gd[i][1])]);
-
- return [_smoothedData, _smoothedPlotData];
- }
-
- ///////
- // computeHermiteSmoothedData
- // A hermite spline smoothing of the plot data.
- // This implementation is derived from the one posted
- // by krypin on the jqplot-users mailing list:
- //
- // http://groups.google.com/group/jqplot-users/browse_thread/thread/748be6a445723cea?pli=1
- //
- // with a blog post:
- //
- // http://blog.statscollector.com/a-plugin-renderer-for-jqplot-to-draw-a-hermite-spline/
- //
- // and download of the original plugin:
- //
- // http://blog.statscollector.com/wp-content/uploads/2010/02/jqplot.hermiteSplineRenderer.js
- //////////
-
- // called with scope of series
- function computeHermiteSmoothedData (gd) {
- var smooth = this.renderer.smooth;
- var tension = this.renderer.tension;
- var dim = this.canvas.getWidth();
- var xp = this._xaxis.series_p2u;
- var yp = this._yaxis.series_p2u;
- var steps =null;
- var _steps = null;
- var a = null;
- var a1 = null;
- var a2 = null;
- var slope = null;
- var slope2 = null;
- var temp = null;
- var t, s, h1, h2, h3, h4;
- var TiX, TiY, Ti1X, Ti1Y;
- var pX, pY, p;
- var sd = [];
- var spd = [];
- var dist = gd.length/dim;
- var min, max, stretch, scale, shift;
- var _smoothedData = [];
- var _smoothedPlotData = [];
- if (!isNaN(parseFloat(smooth))) {
- steps = parseFloat(smooth);
- }
- else {
- steps = getSteps(dist, 0.5);
- }
- if (!isNaN(parseFloat(tension))) {
- tension = parseFloat(tension);
- }
-
- for (var i=0, l = gd.length-1; i < l; i++) {
-
- if (tension === null) {
- slope = Math.abs((gd[i+1][1] - gd[i][1]) / (gd[i+1][0] - gd[i][0]));
-
- min = 0.3;
- max = 0.6;
- stretch = (max - min)/2.0;
- scale = 2.5;
- shift = -1.4;
-
- temp = slope/scale + shift;
-
- a1 = stretch * tanh(temp) - stretch * tanh(shift) + min;
-
- // if have both left and right line segments, will use minimum tension.
- if (i > 0) {
- slope2 = Math.abs((gd[i][1] - gd[i-1][1]) / (gd[i][0] - gd[i-1][0]));
- }
- temp = slope2/scale + shift;
-
- a2 = stretch * tanh(temp) - stretch * tanh(shift) + min;
-
- a = (a1 + a2)/2.0;
-
- }
- else {
- a = tension;
- }
- for (t=0; t < steps; t++) {
- s = t / steps;
- h1 = (1 + 2*s)*Math.pow((1-s),2);
- h2 = s*Math.pow((1-s),2);
- h3 = Math.pow(s,2)*(3-2*s);
- h4 = Math.pow(s,2)*(s-1);
-
- if (gd[i-1]) {
- TiX = a * (gd[i+1][0] - gd[i-1][0]);
- TiY = a * (gd[i+1][1] - gd[i-1][1]);
- } else {
- TiX = a * (gd[i+1][0] - gd[i][0]);
- TiY = a * (gd[i+1][1] - gd[i][1]);
- }
- if (gd[i+2]) {
- Ti1X = a * (gd[i+2][0] - gd[i][0]);
- Ti1Y = a * (gd[i+2][1] - gd[i][1]);
- } else {
- Ti1X = a * (gd[i+1][0] - gd[i][0]);
- Ti1Y = a * (gd[i+1][1] - gd[i][1]);
- }
-
- pX = h1*gd[i][0] + h3*gd[i+1][0] + h2*TiX + h4*Ti1X;
- pY = h1*gd[i][1] + h3*gd[i+1][1] + h2*TiY + h4*Ti1Y;
- p = [pX, pY];
-
- _smoothedData.push(p);
- _smoothedPlotData.push([xp(pX), yp(pY)]);
- }
- }
- _smoothedData.push(gd[l]);
- _smoothedPlotData.push([xp(gd[l][0]), yp(gd[l][1])]);
-
- return [_smoothedData, _smoothedPlotData];
- }
-
- // setGridData
- // converts the user data values to grid coordinates and stores them
- // in the gridData array.
- // Called with scope of a series.
- $.jqplot.LineRenderer.prototype.setGridData = function(plot) {
- // recalculate the grid data
- var xp = this._xaxis.series_u2p;
- var yp = this._yaxis.series_u2p;
- var data = this._plotData;
- var pdata = this._prevPlotData;
- this.gridData = [];
- this._prevGridData = [];
- this.renderer._smoothedData = [];
- this.renderer._smoothedPlotData = [];
- this.renderer._hiBandGridData = [];
- this.renderer._lowBandGridData = [];
- this.renderer._hiBandSmoothedData = [];
- this.renderer._lowBandSmoothedData = [];
- var bands = this.renderer.bands;
- var hasNull = false;
- for (var i=0, l=data.length; i < l; i++) {
- // if not a line series or if no nulls in data, push the converted point onto the array.
- if (data[i][0] != null && data[i][1] != null) {
- this.gridData.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1])]);
- }
- // else if there is a null, preserve it.
- else if (data[i][0] == null) {
- hasNull = true;
- this.gridData.push([null, yp.call(this._yaxis, data[i][1])]);
- }
- else if (data[i][1] == null) {
- hasNull = true;
- this.gridData.push([xp.call(this._xaxis, data[i][0]), null]);
- }
- // if not a line series or if no nulls in data, push the converted point onto the array.
- if (pdata[i] != null && pdata[i][0] != null && pdata[i][1] != null) {
- this._prevGridData.push([xp.call(this._xaxis, pdata[i][0]), yp.call(this._yaxis, pdata[i][1])]);
- }
- // else if there is a null, preserve it.
- else if (pdata[i] != null && pdata[i][0] == null) {
- this._prevGridData.push([null, yp.call(this._yaxis, pdata[i][1])]);
- }
- else if (pdata[i] != null && pdata[i][0] != null && pdata[i][1] == null) {
- this._prevGridData.push([xp.call(this._xaxis, pdata[i][0]), null]);
- }
- }
-
- // don't do smoothing or bands on broken lines.
- if (hasNull) {
- this.renderer.smooth = false;
- if (this._type === 'line') {
- bands.show = false;
- }
- }
-
- if (this._type === 'line' && bands.show) {
- for (var i=0, l=bands.hiData.length; i<l; i++) {
- this.renderer._hiBandGridData.push([xp.call(this._xaxis, bands.hiData[i][0]), yp.call(this._yaxis, bands.hiData[i][1])]);
- }
- for (var i=0, l=bands.lowData.length; i<l; i++) {
- this.renderer._lowBandGridData.push([xp.call(this._xaxis, bands.lowData[i][0]), yp.call(this._yaxis, bands.lowData[i][1])]);
- }
- }
-
- // calculate smoothed data if enough points and no nulls
- if (this._type === 'line' && this.renderer.smooth && this.gridData.length > 2) {
- var ret;
- if (this.renderer.constrainSmoothing) {
- ret = computeConstrainedSmoothedData.call(this, this.gridData);
- this.renderer._smoothedData = ret[0];
- this.renderer._smoothedPlotData = ret[1];
-
- if (bands.show) {
- ret = computeConstrainedSmoothedData.call(this, this.renderer._hiBandGridData);
- this.renderer._hiBandSmoothedData = ret[0];
- ret = computeConstrainedSmoothedData.call(this, this.renderer._lowBandGridData);
- this.renderer._lowBandSmoothedData = ret[0];
- }
-
- ret = null;
- }
- else {
- ret = computeHermiteSmoothedData.call(this, this.gridData);
- this.renderer._smoothedData = ret[0];
- this.renderer._smoothedPlotData = ret[1];
-
- if (bands.show) {
- ret = computeHermiteSmoothedData.call(this, this.renderer._hiBandGridData);
- this.renderer._hiBandSmoothedData = ret[0];
- ret = computeHermiteSmoothedData.call(this, this.renderer._lowBandGridData);
- this.renderer._lowBandSmoothedData = ret[0];
- }
-
- ret = null;
- }
- }
- };
-
- // makeGridData
- // 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.LineRenderer.prototype.makeGridData = function(data, plot) {
- // recalculate the grid data
- var xp = this._xaxis.series_u2p;
- var yp = this._yaxis.series_u2p;
- var gd = [];
- var pgd = [];
- this.renderer._smoothedData = [];
- this.renderer._smoothedPlotData = [];
- this.renderer._hiBandGridData = [];
- this.renderer._lowBandGridData = [];
- this.renderer._hiBandSmoothedData = [];
- this.renderer._lowBandSmoothedData = [];
- var bands = this.renderer.bands;
- var hasNull = false;
- for (var i=0; i<data.length; i++) {
- // if not a line series or if no nulls in data, push the converted point onto the array.
- if (data[i][0] != null && data[i][1] != null) {
- gd.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1])]);
- }
- // else if there is a null, preserve it.
- else if (data[i][0] == null) {
- hasNull = true;
- gd.push([null, yp.call(this._yaxis, data[i][1])]);
- }
- else if (data[i][1] == null) {
- hasNull = true;
- gd.push([xp.call(this._xaxis, data[i][0]), null]);
- }
- }
-
- // don't do smoothing or bands on broken lines.
- if (hasNull) {
- this.renderer.smooth = false;
- if (this._type === 'line') {
- bands.show = false;
- }
- }
-
- if (this._type === 'line' && bands.show) {
- for (var i=0, l=bands.hiData.length; i<l; i++) {
- this.renderer._hiBandGridData.push([xp.call(this._xaxis, bands.hiData[i][0]), yp.call(this._yaxis, bands.hiData[i][1])]);
- }
- for (var i=0, l=bands.lowData.length; i<l; i++) {
- this.renderer._lowBandGridData.push([xp.call(this._xaxis, bands.lowData[i][0]), yp.call(this._yaxis, bands.lowData[i][1])]);
- }
- }
-
- if (this._type === 'line' && this.renderer.smooth && gd.length > 2) {
- var ret;
- if (this.renderer.constrainSmoothing) {
- ret = computeConstrainedSmoothedData.call(this, gd);
- this.renderer._smoothedData = ret[0];
- this.renderer._smoothedPlotData = ret[1];
-
- if (bands.show) {
- ret = computeConstrainedSmoothedData.call(this, this.renderer._hiBandGridData);
- this.renderer._hiBandSmoothedData = ret[0];
- ret = computeConstrainedSmoothedData.call(this, this.renderer._lowBandGridData);
- this.renderer._lowBandSmoothedData = ret[0];
- }
-
- ret = null;
- }
- else {
- ret = computeHermiteSmoothedData.call(this, gd);
- this.renderer._smoothedData = ret[0];
- this.renderer._smoothedPlotData = ret[1];
-
- if (bands.show) {
- ret = computeHermiteSmoothedData.call(this, this.renderer._hiBandGridData);
- this.renderer._hiBandSmoothedData = ret[0];
- ret = computeHermiteSmoothedData.call(this, this.renderer._lowBandGridData);
- this.renderer._lowBandSmoothedData = ret[0];
- }
-
- ret = null;
- }
- }
- return gd;
- };
-
-
- // called within scope of series.
- $.jqplot.LineRenderer.prototype.draw = function(ctx, gd, options, plot) {
- var i;
- // get a copy of the options, so we don't modify the original object.
- var opts = $.extend(true, {}, options);
- var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
- var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
- var fill = (opts.fill != undefined) ? opts.fill : this.fill;
- var fillAndStroke = (opts.fillAndStroke != undefined) ? opts.fillAndStroke : this.fillAndStroke;
- var xmin, ymin, xmax, ymax;
- ctx.save();
- if (gd.length) {
- if (showLine) {
- // if we fill, we'll have to add points to close the curve.
- if (fill) {
- if (this.fillToZero) {
- // have to break line up into shapes at axis crossings
- var negativeColor = this.negativeColor;
- if (! this.useNegativeColors) {
- negativeColor = opts.fillStyle;
- }
- var isnegative = false;
- var posfs = opts.fillStyle;
-
- // if stoking line as well as filling, get a copy of line data.
- if (fillAndStroke) {
- var fasgd = gd.slice(0);
- }
- // if not stacked, fill down to axis
- if (this.index == 0 || !this._stack) {
-
- var tempgd = [];
- var pd = (this.renderer.smooth) ? this.renderer._smoothedPlotData : this._plotData;
- this._areaPoints = [];
- var pyzero = this._yaxis.series_u2p(this.fillToValue);
- var pxzero = this._xaxis.series_u2p(this.fillToValue);
-
- opts.closePath = true;
-
- if (this.fillAxis == 'y') {
- tempgd.push([gd[0][0], pyzero]);
- this._areaPoints.push([gd[0][0], pyzero]);
-
- for (var i=0; i<gd.length-1; i++) {
- tempgd.push(gd[i]);
- this._areaPoints.push(gd[i]);
- // do we have an axis crossing?
- if (pd[i][1] * pd[i+1][1] < 0) {
- if (pd[i][1] < 0) {
- isnegative = true;
- opts.fillStyle = negativeColor;
- }
- else {
- isnegative = false;
- opts.fillStyle = posfs;
- }
-
- var xintercept = gd[i][0] + (gd[i+1][0] - gd[i][0]) * (pyzero-gd[i][1])/(gd[i+1][1] - gd[i][1]);
- tempgd.push([xintercept, pyzero]);
- this._areaPoints.push([xintercept, pyzero]);
- // now draw this shape and shadow.
- if (shadow) {
- this.renderer.shadowRenderer.draw(ctx, tempgd, opts);
- }
- this.renderer.shapeRenderer.draw(ctx, tempgd, opts);
- // now empty temp array and continue
- tempgd = [[xintercept, pyzero]];
- // this._areaPoints = [[xintercept, pyzero]];
- }
- }
- if (pd[gd.length-1][1] < 0) {
- isnegative = true;
- opts.fillStyle = negativeColor;
- }
- else {
- isnegative = false;
- opts.fillStyle = posfs;
- }
- tempgd.push(gd[gd.length-1]);
- this._areaPoints.push(gd[gd.length-1]);
- tempgd.push([gd[gd.length-1][0], pyzero]);
- this._areaPoints.push([gd[gd.length-1][0], pyzero]);
- }
- // now draw the last area.
- if (shadow) {
- this.renderer.shadowRenderer.draw(ctx, tempgd, opts);
- }
- this.renderer.shapeRenderer.draw(ctx, tempgd, opts);
-
-
- // var gridymin = this._yaxis.series_u2p(0);
- // // IE doesn't return new length on unshift
- // gd.unshift([gd[0][0], gridymin]);
- // len = gd.length;
- // gd.push([gd[len - 1][0], gridymin]);
- }
- // if stacked, fill to line below
- else {
- var prev = this._prevGridData;
- for (var i=prev.length; i>0; i--) {
- gd.push(prev[i-1]);
- // this._areaPoints.push(prev[i-1]);
- }
- if (shadow) {
- this.renderer.shadowRenderer.draw(ctx, gd, opts);
- }
- this._areaPoints = gd;
- this.renderer.shapeRenderer.draw(ctx, gd, opts);
- }
- }
- /////////////////////////
- // Not filled to zero
- ////////////////////////
- else {
- // if stoking line as well as filling, get a copy of line data.
- if (fillAndStroke) {
- var fasgd = gd.slice(0);
- }
- // if not stacked, fill down to axis
- if (this.index == 0 || !this._stack) {
- // var gridymin = this._yaxis.series_u2p(this._yaxis.min) - this.gridBorderWidth / 2;
- var gridymin = ctx.canvas.height;
- // IE doesn't return new length on unshift
- gd.unshift([gd[0][0], gridymin]);
- var len = gd.length;
- gd.push([gd[len - 1][0], gridymin]);
- }
- // if stacked, fill to line below
- else {
- var prev = this._prevGridData;
- for (var i=prev.length; i>0; i--) {
- gd.push(prev[i-1]);
- }
- }
- this._areaPoints = gd;
-
- if (shadow) {
- this.renderer.shadowRenderer.draw(ctx, gd, opts);
- }
-
- this.renderer.shapeRenderer.draw(ctx, gd, opts);
- }
- if (fillAndStroke) {
- var fasopts = $.extend(true, {}, opts, {fill:false, closePath:false});
- this.renderer.shapeRenderer.draw(ctx, fasgd, fasopts);
- //////////
- // TODO: figure out some way to do shadows nicely
- // if (shadow) {
- // this.renderer.shadowRenderer.draw(ctx, fasgd, fasopts);
- // }
- // now draw the markers
- if (this.markerRenderer.show) {
- if (this.renderer.smooth) {
- fasgd = this.gridData;
- }
- for (i=0; i<fasgd.length; i++) {
- this.markerRenderer.draw(fasgd[i][0], fasgd[i][1], ctx, opts.markerOptions);
- }
- }
- }
- }
- else {
-
- if (this.renderer.bands.show) {
- var bdat;
- var bopts = $.extend(true, {}, opts);
- if (this.renderer.bands.showLines) {
- bdat = (this.renderer.smooth) ? this.renderer._hiBandSmoothedData : this.renderer._hiBandGridData;
- this.renderer.shapeRenderer.draw(ctx, bdat, opts);
- bdat = (this.renderer.smooth) ? this.renderer._lowBandSmoothedData : this.renderer._lowBandGridData;
- this.renderer.shapeRenderer.draw(ctx, bdat, bopts);
- }
-
- if (this.renderer.bands.fill) {
- if (this.renderer.smooth) {
- bdat = this.renderer._hiBandSmoothedData.concat(this.renderer._lowBandSmoothedData.reverse());
- }
- else {
- bdat = this.renderer._hiBandGridData.concat(this.renderer._lowBandGridData.reverse());
- }
- this._areaPoints = bdat;
- bopts.closePath = true;
- bopts.fill = true;
- bopts.fillStyle = this.renderer.bands.fillColor;
- this.renderer.shapeRenderer.draw(ctx, bdat, bopts);
- }
- }
-
- if (shadow) {
- this.renderer.shadowRenderer.draw(ctx, gd, opts);
- }
-
- this.renderer.shapeRenderer.draw(ctx, gd, opts);
- }
- }
- // calculate the bounding box
- var xmin = xmax = ymin = ymax = null;
- for (i=0; i<this._areaPoints.length; i++) {
- var p = this._areaPoints[i];
- if (xmin > p[0] || xmin == null) {
- xmin = p[0];
- }
- if (ymax < p[1] || ymax == null) {
- ymax = p[1];
- }
- if (xmax < p[0] || xmax == null) {
- xmax = p[0];
- }
- if (ymin > p[1] || ymin == null) {
- ymin = p[1];
- }
- }
-
- if (this.type === 'line' && this.renderer.bands.show) {
- ymax = this._yaxis.series_u2p(this.renderer.bands._min);
- ymin = this._yaxis.series_u2p(this.renderer.bands._max);
- }
-
- this._boundingBox = [[xmin, ymax], [xmax, ymin]];
-
- // now draw the markers
- if (this.markerRenderer.show && !fill) {
- if (this.renderer.smooth) {
- gd = this.gridData;
- }
- for (i=0; i<gd.length; i++) {
- if (gd[i][0] != null && gd[i][1] != null) {
- this.markerRenderer.draw(gd[i][0], gd[i][1], ctx, opts.markerOptions);
- }
- }
- }
- }
-
- ctx.restore();
- };
-
- $.jqplot.LineRenderer.prototype.drawShadow = function(ctx, gd, options) {
- // This is a no-op, shadows drawn with lines.
- };
-
- // called with scope of plot.
- // make sure to not leave anything highlighted.
- function postInit(target, data, options) {
- for (var i=0; i<this.series.length; i++) {
- if (this.series[i].renderer.constructor == $.jqplot.LineRenderer) {
- // don't allow mouseover and mousedown at same time.
- if (this.series[i].highlightMouseOver) {
- this.series[i].highlightMouseDown = false;
- }
- }
- }
- }
-
- // called within context of plot
- // create a canvas which we can draw on.
- // insert it before the eventCanvas, so eventCanvas will still capture events.
- function postPlotDraw() {
- // Memory Leaks patch
- if (this.plugins.lineRenderer && this.plugins.lineRenderer.highlightCanvas) {
- this.plugins.lineRenderer.highlightCanvas.resetCanvas();
- this.plugins.lineRenderer.highlightCanvas = null;
- }
-
- this.plugins.lineRenderer.highlightedSeriesIndex = null;
- this.plugins.lineRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
-
- this.eventCanvas._elem.before(this.plugins.lineRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-lineRenderer-highlight-canvas', this._plotDimensions, this));
- this.plugins.lineRenderer.highlightCanvas.setContext();
- this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
- }
-
- function highlight (plot, sidx, pidx, points) {
- var s = plot.series[sidx];
- var canvas = plot.plugins.lineRenderer.highlightCanvas;
- canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
- s._highlightedPoint = pidx;
- plot.plugins.lineRenderer.highlightedSeriesIndex = sidx;
- var opts = {fillStyle: s.highlightColor};
- if (s.type === 'line' && s.renderer.bands.show) {
- opts.fill = true;
- opts.closePath = true;
- }
- s.renderer.shapeRenderer.draw(canvas._ctx, points, opts);
- canvas = null;
- }
-
- function unhighlight (plot) {
- var canvas = plot.plugins.lineRenderer.highlightCanvas;
- canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
- for (var i=0; i<plot.series.length; i++) {
- plot.series[i]._highlightedPoint = null;
- }
- plot.plugins.lineRenderer.highlightedSeriesIndex = null;
- plot.target.trigger('jqplotDataUnhighlight');
- canvas = null;
- }
-
-
- function handleMove(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- var evt1 = jQuery.Event('jqplotDataMouseOver');
- evt1.pageX = ev.pageX;
- evt1.pageY = ev.pageY;
- plot.target.trigger(evt1, ins);
- if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.lineRenderer.highlightedSeriesIndex)) {
- var evt = jQuery.Event('jqplotDataHighlight');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points);
- }
- }
- else if (neighbor == null) {
- unhighlight (plot);
- }
- }
-
- function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.lineRenderer.highlightedSeriesIndex)) {
- var evt = jQuery.Event('jqplotDataHighlight');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points);
- }
- }
- else if (neighbor == null) {
- unhighlight (plot);
- }
- }
-
- function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
- var idx = plot.plugins.lineRenderer.highlightedSeriesIndex;
- if (idx != null && plot.series[idx].highlightMouseDown) {
- unhighlight(plot);
- }
- }
-
- function handleClick(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- var evt = jQuery.Event('jqplotDataClick');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- }
- }
-
- function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- var idx = plot.plugins.lineRenderer.highlightedSeriesIndex;
- if (idx != null && plot.series[idx].highlightMouseDown) {
- unhighlight(plot);
- }
- var evt = jQuery.Event('jqplotDataRightClick');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- }
- }
-
-
- // class: $.jqplot.LinearAxisRenderer
- // The default jqPlot axis renderer, creating a numeric axis.
- $.jqplot.LinearAxisRenderer = function() {
- };
-
- // called with scope of axis object.
- $.jqplot.LinearAxisRenderer.prototype.init = function(options){
- // prop: breakPoints
- // 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.
- this.breakPoints = null;
- // prop: breakTickLabel
- // Label to use at the axis break if breakPoints are specified.
- this.breakTickLabel = "&asymp;";
- // prop: drawBaseline
- // True to draw the axis baseline.
- this.drawBaseline = true;
- // prop: baselineWidth
- // width of the baseline in pixels.
- this.baselineWidth = null;
- // prop: baselineColor
- // CSS color spec for the baseline.
- this.baselineColor = null;
- // prop: forceTickAt0
- // 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.
- this.forceTickAt0 = false;
- // prop: forceTickAt100
- // 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.
- this.forceTickAt100 = false;
- // prop: tickInset
- // 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.
- this.tickInset = 0;
- // prop: minorTicks
- // 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.minorTicks = 0;
- // prop: alignTicks
- // true to align tick marks across opposed axes
- // such as from the y2axis to yaxis.
- this.alignTicks = false;
- this._autoFormatString = '';
- this._overrideFormatString = false;
- this._scalefact = 1.0;
- $.extend(true, this, options);
- if (this.breakPoints) {
- if (!$.isArray(this.breakPoints)) {
- this.breakPoints = null;
- }
- else if (this.breakPoints.length < 2 || this.breakPoints[1] <= this.breakPoints[0]) {
- this.breakPoints = null;
- }
- }
- if (this.numberTicks != null && this.numberTicks < 2) {
- this.numberTicks = 2;
- }
- this.resetDataBounds();
- };
-
- // called with scope of axis
- $.jqplot.LinearAxisRenderer.prototype.draw = function(ctx, plot) {
- if (this.show) {
- // populate the axis label and value properties.
- // createTicks is a method on the renderer, but
- // call it within the scope of the axis.
- this.renderer.createTicks.call(this, plot);
- // fill a div with axes labels in the right direction.
- // Need to pregenerate each axis to get it's bounds and
- // position it and the labels correctly on the plot.
- var dim=0;
- var temp;
- // Added for theming.
- if (this._elem) {
- // Memory Leaks patch
- //this._elem.empty();
- this._elem.emptyForce();
- this._elem = null;
- }
-
- this._elem = $(document.createElement('div'));
- this._elem.addClass('jqplot-axis jqplot-'+this.name);
- this._elem.css('position', 'absolute');
-
-
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- this._elem.width(this._plotDimensions.width);
- }
- else {
- this._elem.height(this._plotDimensions.height);
- }
-
- // create a _label object.
- this.labelOptions.axis = this.name;
- this._label = new this.labelRenderer(this.labelOptions);
- if (this._label.show) {
- var elem = this._label.draw(ctx, plot);
- elem.appendTo(this._elem);
- elem = null;
- }
-
- var t = this._ticks;
- var tick;
- for (var i=0; i<t.length; i++) {
- tick = t[i];
- if (tick.show && tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
- this._elem.append(tick.draw(ctx, plot));
- }
- }
- tick = null;
- t = null;
- }
- return this._elem;
- };
-
- // called with scope of an axis
- $.jqplot.LinearAxisRenderer.prototype.reset = function() {
- this.min = this._options.min;
- this.max = this._options.max;
- this.tickInterval = this._options.tickInterval;
- this.numberTicks = this._options.numberTicks;
- this._autoFormatString = '';
- if (this._overrideFormatString && this.tickOptions && this.tickOptions.formatString) {
- this.tickOptions.formatString = '';
- }
-
- // this._ticks = this.__ticks;
- };
-
- // called with scope of axis
- $.jqplot.LinearAxisRenderer.prototype.set = function() {
- var dim = 0;
- var temp;
- var w = 0;
- var h = 0;
- var lshow = (this._label == null) ? false : this._label.show;
- if (this.show) {
- var t = this._ticks;
- var tick;
- for (var i=0; i<t.length; i++) {
- tick = t[i];
- if (!tick._breakTick && tick.show && tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- temp = tick._elem.outerHeight(true);
- }
- else {
- temp = tick._elem.outerWidth(true);
- }
- if (temp > dim) {
- dim = temp;
- }
- }
- }
- tick = null;
- t = null;
-
- if (lshow) {
- w = this._label._elem.outerWidth(true);
- h = this._label._elem.outerHeight(true);
- }
- if (this.name == 'xaxis') {
- dim = dim + h;
- this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'});
- }
- else if (this.name == 'x2axis') {
- dim = dim + h;
- this._elem.css({'height':dim+'px', left:'0px', top:'0px'});
- }
- else if (this.name == 'yaxis') {
- dim = dim + w;
- this._elem.css({'width':dim+'px', left:'0px', top:'0px'});
- if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
- this._label._elem.css('width', w+'px');
- }
- }
- else {
- dim = dim + w;
- this._elem.css({'width':dim+'px', right:'0px', top:'0px'});
- if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
- this._label._elem.css('width', w+'px');
- }
- }
- }
- };
-
- // called with scope of axis
- $.jqplot.LinearAxisRenderer.prototype.createTicks = function(plot) {
- // we're are operating on an axis here
- var ticks = this._ticks;
- var userTicks = this.ticks;
- var name = this.name;
- // databounds were set on axis initialization.
- var db = this._dataBounds;
- var dim = (this.name.charAt(0) === 'x') ? this._plotDimensions.width : this._plotDimensions.height;
- var interval;
- var min, max;
- var pos1, pos2;
- var tt, i;
- // get a copy of user's settings for min/max.
- var userMin = this.min;
- var userMax = this.max;
- var userNT = this.numberTicks;
- var userTI = this.tickInterval;
-
- var threshold = 30;
- this._scalefact = (Math.max(dim, threshold+1) - threshold)/300.0;
-
- // if we already have ticks, use them.
- // ticks must be in order of increasing value.
-
- if (userTicks.length) {
- // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed
- for (i=0; i<userTicks.length; i++){
- var ut = userTicks[i];
- var t = new this.tickRenderer(this.tickOptions);
- if ($.isArray(ut)) {
- t.value = ut[0];
- if (this.breakPoints) {
- if (ut[0] == this.breakPoints[0]) {
- t.label = this.breakTickLabel;
- t._breakTick = true;
- t.showGridline = false;
- t.showMark = false;
- }
- else if (ut[0] > this.breakPoints[0] && ut[0] <= this.breakPoints[1]) {
- t.show = false;
- t.showGridline = false;
- t.label = ut[1];
- }
- else {
- t.label = ut[1];
- }
- }
- else {
- t.label = ut[1];
- }
- t.setTick(ut[0], this.name);
- this._ticks.push(t);
- }
-
- else if ($.isPlainObject(ut)) {
- $.extend(true, t, ut);
- t.axis = this.name;
- this._ticks.push(t);
- }
-
- else {
- t.value = ut;
- if (this.breakPoints) {
- if (ut == this.breakPoints[0]) {
- t.label = this.breakTickLabel;
- t._breakTick = true;
- t.showGridline = false;
- t.showMark = false;
- }
- else if (ut > this.breakPoints[0] && ut <= this.breakPoints[1]) {
- t.show = false;
- t.showGridline = false;
- }
- }
- t.setTick(ut, this.name);
- this._ticks.push(t);
- }
- }
- this.numberTicks = userTicks.length;
- this.min = this._ticks[0].value;
- this.max = this._ticks[this.numberTicks-1].value;
- this.tickInterval = (this.max - this.min) / (this.numberTicks - 1);
- }
-
- // we don't have any ticks yet, let's make some!
- else {
- if (name == 'xaxis' || name == 'x2axis') {
- dim = this._plotDimensions.width;
- }
- else {
- dim = this._plotDimensions.height;
- }
-
- var _numberTicks = this.numberTicks;
-
- // if aligning this axis, use number of ticks from previous axis.
- // Do I need to reset somehow if alignTicks is changed and then graph is replotted??
- if (this.alignTicks) {
- if (this.name === 'x2axis' && plot.axes.xaxis.show) {
- _numberTicks = plot.axes.xaxis.numberTicks;
- }
- else if (this.name.charAt(0) === 'y' && this.name !== 'yaxis' && this.name !== 'yMidAxis' && plot.axes.yaxis.show) {
- _numberTicks = plot.axes.yaxis.numberTicks;
- }
- }
-
- min = ((this.min != null) ? this.min : db.min);
- max = ((this.max != null) ? this.max : db.max);
-
- var range = max - min;
- var rmin, rmax;
- var temp;
-
- if (this.tickOptions == null || !this.tickOptions.formatString) {
- this._overrideFormatString = true;
- }
-
- // Doing complete autoscaling
- if (this.min == null || this.max == null && this.tickInterval == null && !this.autoscale) {
- // Check if user must have tick at 0 or 100 and ensure they are in range.
- // The autoscaling algorithm will always place ticks at 0 and 100 if they are in range.
- if (this.forceTickAt0) {
- if (min > 0) {
- min = 0;
- }
- if (max < 0) {
- max = 0;
- }
- }
-
- if (this.forceTickAt100) {
- if (min > 100) {
- min = 100;
- }
- if (max < 100) {
- max = 100;
- }
- }
-
- var keepMin = false,
- keepMax = false;
-
- if (this.min != null) {
- keepMin = true;
- }
-
- else if (this.max != null) {
- keepMax = true;
- }
-
- // var threshold = 30;
- // var tdim = Math.max(dim, threshold+1);
- // this._scalefact = (tdim-threshold)/300.0;
- var ret = $.jqplot.LinearTickGenerator(min, max, this._scalefact, _numberTicks, keepMin, keepMax);
- // calculate a padded max and min, points should be less than these
- // so that they aren't too close to the edges of the plot.
- // User can adjust how much padding is allowed with pad, padMin and PadMax options.
- // If min or max is set, don't pad that end of axis.
- var tumin = (this.min != null) ? min : min + range*(this.padMin - 1);
- var tumax = (this.max != null) ? max : max - range*(this.padMax - 1);
-
- // if they're equal, we shouldn't have to do anything, right?
- // if (min <=tumin || max >= tumax) {
- if (min <tumin || max > tumax) {
- tumin = (this.min != null) ? min : min - range*(this.padMin - 1);
- tumax = (this.max != null) ? max : max + range*(this.padMax - 1);
- ret = $.jqplot.LinearTickGenerator(tumin, tumax, this._scalefact, _numberTicks, keepMin, keepMax);
- }
-
- this.min = ret[0];
- this.max = ret[1];
- // if numberTicks specified, it should return the same.
- this.numberTicks = ret[2];
- this._autoFormatString = ret[3];
- this.tickInterval = ret[4];
- }
-
- // User has specified some axis scale related option, can use auto algorithm
- else {
-
- // if min and max are same, space them out a bit
- if (min == max) {
- var adj = 0.05;
- if (min > 0) {
- adj = Math.max(Math.log(min)/Math.LN10, 0.05);
- }
- min -= adj;
- max += adj;
- }
-
- // autoscale. Can't autoscale if min or max is supplied.
- // Will use numberTicks and tickInterval if supplied. Ticks
- // across multiple axes may not line up depending on how
- // bars are to be plotted.
- if (this.autoscale && this.min == null && this.max == null) {
- var rrange, ti, margin;
- var forceMinZero = false;
- var forceZeroLine = false;
- var intervals = {min:null, max:null, average:null, stddev:null};
- // if any series are bars, or if any are fill to zero, and if this
- // is the axis to fill toward, check to see if we can start axis at zero.
- for (var i=0; i<this._series.length; i++) {
- var s = this._series[i];
- var faname = (s.fillAxis == 'x') ? s._xaxis.name : s._yaxis.name;
- // check to see if this is the fill axis
- if (this.name == faname) {
- var vals = s._plotValues[s.fillAxis];
- var vmin = vals[0];
- var vmax = vals[0];
- for (var j=1; j<vals.length; j++) {
- if (vals[j] < vmin) {
- vmin = vals[j];
- }
- else if (vals[j] > vmax) {
- vmax = vals[j];
- }
- }
- var dp = (vmax - vmin) / vmax;
- // is this sries a bar?
- if (s.renderer.constructor == $.jqplot.BarRenderer) {
- // if no negative values and could also check range.
- if (vmin >= 0 && (s.fillToZero || dp > 0.1)) {
- forceMinZero = true;
- }
- else {
- forceMinZero = false;
- if (s.fill && s.fillToZero && vmin < 0 && vmax > 0) {
- forceZeroLine = true;
- }
- else {
- forceZeroLine = false;
- }
- }
- }
-
- // if not a bar and filling, use appropriate method.
- else if (s.fill) {
- if (vmin >= 0 && (s.fillToZero || dp > 0.1)) {
- forceMinZero = true;
- }
- else if (vmin < 0 && vmax > 0 && s.fillToZero) {
- forceMinZero = false;
- forceZeroLine = true;
- }
- else {
- forceMinZero = false;
- forceZeroLine = false;
- }
- }
-
- // if not a bar and not filling, only change existing state
- // if it doesn't make sense
- else if (vmin < 0) {
- forceMinZero = false;
- }
- }
- }
-
- // check if we need make axis min at 0.
- if (forceMinZero) {
- // compute number of ticks
- this.numberTicks = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing);
- this.min = 0;
- userMin = 0;
- // what order is this range?
- // what tick interval does that give us?
- ti = max/(this.numberTicks-1);
- temp = Math.pow(10, Math.abs(Math.floor(Math.log(ti)/Math.LN10)));
- if (ti/temp == parseInt(ti/temp, 10)) {
- ti += temp;
- }
- this.tickInterval = Math.ceil(ti/temp) * temp;
- this.max = this.tickInterval * (this.numberTicks - 1);
- }
-
- // check if we need to make sure there is a tick at 0.
- else if (forceZeroLine) {
- // compute number of ticks
- this.numberTicks = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing);
- var ntmin = Math.ceil(Math.abs(min)/range*(this.numberTicks-1));
- var ntmax = this.numberTicks - 1 - ntmin;
- ti = Math.max(Math.abs(min/ntmin), Math.abs(max/ntmax));
- temp = Math.pow(10, Math.abs(Math.floor(Math.log(ti)/Math.LN10)));
- this.tickInterval = Math.ceil(ti/temp) * temp;
- this.max = this.tickInterval * ntmax;
- this.min = -this.tickInterval * ntmin;
- }
-
- // if nothing else, do autoscaling which will try to line up ticks across axes.
- else {
- if (this.numberTicks == null){
- if (this.tickInterval) {
- this.numberTicks = 3 + Math.ceil(range / this.tickInterval);
- }
- else {
- this.numberTicks = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing);
- }
- }
-
- if (this.tickInterval == null) {
- // get a tick interval
- ti = range/(this.numberTicks - 1);
-
- if (ti < 1) {
- temp = Math.pow(10, Math.abs(Math.floor(Math.log(ti)/Math.LN10)));
- }
- else {
- temp = 1;
- }
- this.tickInterval = Math.ceil(ti*temp*this.pad)/temp;
- }
- else {
- temp = 1 / this.tickInterval;
- }
-
- // try to compute a nicer, more even tick interval
- // temp = Math.pow(10, Math.floor(Math.log(ti)/Math.LN10));
- // this.tickInterval = Math.ceil(ti/temp) * temp;
- rrange = this.tickInterval * (this.numberTicks - 1);
- margin = (rrange - range)/2;
-
- if (this.min == null) {
- this.min = Math.floor(temp*(min-margin))/temp;
- }
- if (this.max == null) {
- this.max = this.min + rrange;
- }
- }
-
- // Compute a somewhat decent format string if it is needed.
- // get precision of interval and determine a format string.
- var sf = $.jqplot.getSignificantFigures(this.tickInterval);
-
- var fstr;
-
- // if we have only a whole number, use integer formatting
- if (sf.digitsLeft >= sf.significantDigits) {
- fstr = '%d';
- }
-
- else {
- var temp = Math.max(0, 5 - sf.digitsLeft);
- temp = Math.min(temp, sf.digitsRight);
- fstr = '%.'+ temp + 'f';
- }
-
- this._autoFormatString = fstr;
- }
-
- // Use the default algorithm which pads each axis to make the chart
- // centered nicely on the grid.
- else {
-
- rmin = (this.min != null) ? this.min : min - range*(this.padMin - 1);
- rmax = (this.max != null) ? this.max : max + range*(this.padMax - 1);
- range = rmax - rmin;
-
- if (this.numberTicks == null){
- // if tickInterval is specified by user, we will ignore computed maximum.
- // max will be equal or greater to fit even # of ticks.
- if (this.tickInterval != null) {
- this.numberTicks = Math.ceil((rmax - rmin)/this.tickInterval)+1;
- }
- else if (dim > 100) {
- this.numberTicks = parseInt(3+(dim-100)/75, 10);
- }
- else {
- this.numberTicks = 2;
- }
- }
-
- if (this.tickInterval == null) {
- this.tickInterval = range / (this.numberTicks-1);
- }
-
- if (this.max == null) {
- rmax = rmin + this.tickInterval*(this.numberTicks - 1);
- }
- if (this.min == null) {
- rmin = rmax - this.tickInterval*(this.numberTicks - 1);
- }
-
- // get precision of interval and determine a format string.
- var sf = $.jqplot.getSignificantFigures(this.tickInterval);
-
- var fstr;
-
- // if we have only a whole number, use integer formatting
- if (sf.digitsLeft >= sf.significantDigits) {
- fstr = '%d';
- }
-
- else {
- var temp = Math.max(0, 5 - sf.digitsLeft);
- temp = Math.min(temp, sf.digitsRight);
- fstr = '%.'+ temp + 'f';
- }
-
-
- this._autoFormatString = fstr;
-
- this.min = rmin;
- this.max = rmax;
- }
-
- if (this.renderer.constructor == $.jqplot.LinearAxisRenderer && this._autoFormatString == '') {
- // fix for misleading tick display with small range and low precision.
- range = this.max - this.min;
- // figure out precision
- var temptick = new this.tickRenderer(this.tickOptions);
- // use the tick formatString or, the default.
- var fs = temptick.formatString || $.jqplot.config.defaultTickFormatString;
- var fs = fs.match($.jqplot.sprintf.regex)[0];
- var precision = 0;
- if (fs) {
- if (fs.search(/[fFeEgGpP]/) > -1) {
- var m = fs.match(/\%\.(\d{0,})?[eEfFgGpP]/);
- if (m) {
- precision = parseInt(m[1], 10);
- }
- else {
- precision = 6;
- }
- }
- else if (fs.search(/[di]/) > -1) {
- precision = 0;
- }
- // fact will be <= 1;
- var fact = Math.pow(10, -precision);
- if (this.tickInterval < fact) {
- // need to correct underrange
- if (userNT == null && userTI == null) {
- this.tickInterval = fact;
- if (userMax == null && userMin == null) {
- // this.min = Math.floor((this._dataBounds.min - this.tickInterval)/fact) * fact;
- this.min = Math.floor(this._dataBounds.min/fact) * fact;
- if (this.min == this._dataBounds.min) {
- this.min = this._dataBounds.min - this.tickInterval;
- }
- // this.max = Math.ceil((this._dataBounds.max + this.tickInterval)/fact) * fact;
- this.max = Math.ceil(this._dataBounds.max/fact) * fact;
- if (this.max == this._dataBounds.max) {
- this.max = this._dataBounds.max + this.tickInterval;
- }
- var n = (this.max - this.min)/this.tickInterval;
- n = n.toFixed(11);
- n = Math.ceil(n);
- this.numberTicks = n + 1;
- }
- else if (userMax == null) {
- // add one tick for top of range.
- var n = (this._dataBounds.max - this.min) / this.tickInterval;
- n = n.toFixed(11);
- this.numberTicks = Math.ceil(n) + 2;
- this.max = this.min + this.tickInterval * (this.numberTicks-1);
- }
- else if (userMin == null) {
- // add one tick for bottom of range.
- var n = (this.max - this._dataBounds.min) / this.tickInterval;
- n = n.toFixed(11);
- this.numberTicks = Math.ceil(n) + 2;
- this.min = this.max - this.tickInterval * (this.numberTicks-1);
- }
- else {
- // calculate a number of ticks so max is within axis scale
- this.numberTicks = Math.ceil((userMax - userMin)/this.tickInterval) + 1;
- // if user's min and max don't fit evenly in ticks, adjust.
- // This takes care of cases such as user min set to 0, max set to 3.5 but tick
- // format string set to %d (integer ticks)
- this.min = Math.floor(userMin*Math.pow(10, precision))/Math.pow(10, precision);
- this.max = Math.ceil(userMax*Math.pow(10, precision))/Math.pow(10, precision);
- // this.max = this.min + this.tickInterval*(this.numberTicks-1);
- this.numberTicks = Math.ceil((this.max - this.min)/this.tickInterval) + 1;
- }
- }
- }
- }
- }
-
- }
-
- if (this._overrideFormatString && this._autoFormatString != '') {
- this.tickOptions = this.tickOptions || {};
- this.tickOptions.formatString = this._autoFormatString;
- }
-
- var t, to;
- for (var i=0; i<this.numberTicks; i++){
- tt = this.min + i * this.tickInterval;
- t = new this.tickRenderer(this.tickOptions);
- // var t = new $.jqplot.AxisTickRenderer(this.tickOptions);
-
- t.setTick(tt, this.name);
- this._ticks.push(t);
-
- if (i < this.numberTicks - 1) {
- for (var j=0; j<this.minorTicks; j++) {
- tt += this.tickInterval/(this.minorTicks+1);
- to = $.extend(true, {}, this.tickOptions, {name:this.name, value:tt, label:'', isMinorTick:true});
- t = new this.tickRenderer(to);
- this._ticks.push(t);
- }
- }
- t = null;
- }
- }
-
- if (this.tickInset) {
- this.min = this.min - this.tickInset * this.tickInterval;
- this.max = this.max + this.tickInset * this.tickInterval;
- }
-
- ticks = null;
- };
-
- // Used to reset just the values of the ticks and then repack, which will
- // recalculate the positioning functions. It is assuemd that the
- // number of ticks is the same and the values of the new array are at the
- // proper interval.
- // This method needs to be called with the scope of an axis object, like:
- //
- // > plot.axes.yaxis.renderer.resetTickValues.call(plot.axes.yaxis, yarr);
- //
- $.jqplot.LinearAxisRenderer.prototype.resetTickValues = function(opts) {
- if ($.isArray(opts) && opts.length == this._ticks.length) {
- var t;
- for (var i=0; i<opts.length; i++) {
- t = this._ticks[i];
- t.value = opts[i];
- t.label = t.formatter(t.formatString, opts[i]);
- t.label = t.prefix + t.label;
- t._elem.html(t.label);
- }
- t = null;
- this.min = $.jqplot.arrayMin(opts);
- this.max = $.jqplot.arrayMax(opts);
- this.pack();
- }
- // Not implemented yet.
- // else if ($.isPlainObject(opts)) {
- //
- // }
- };
-
- // called with scope of axis
- $.jqplot.LinearAxisRenderer.prototype.pack = function(pos, offsets) {
- // Add defaults for repacking from resetTickValues function.
- pos = pos || {};
- offsets = offsets || this._offsets;
-
- var ticks = this._ticks;
- var max = this.max;
- var min = this.min;
- var offmax = offsets.max;
- var offmin = offsets.min;
- var lshow = (this._label == null) ? false : this._label.show;
-
- for (var p in pos) {
- this._elem.css(p, pos[p]);
- }
-
- this._offsets = offsets;
- // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left.
- var pixellength = offmax - offmin;
- var unitlength = max - min;
-
- // point to unit and unit to point conversions references to Plot DOM element top left corner.
- if (this.breakPoints) {
- unitlength = unitlength - this.breakPoints[1] + this.breakPoints[0];
-
- this.p2u = function(p){
- return (p - offmin) * unitlength / pixellength + min;
- };
-
- this.u2p = function(u){
- if (u > this.breakPoints[0] && u < this.breakPoints[1]){
- u = this.breakPoints[0];
- }
- if (u <= this.breakPoints[0]) {
- return (u - min) * pixellength / unitlength + offmin;
- }
- else {
- return (u - this.breakPoints[1] + this.breakPoints[0] - min) * pixellength / unitlength + offmin;
- }
- };
-
- if (this.name.charAt(0) == 'x'){
- this.series_u2p = function(u){
- if (u > this.breakPoints[0] && u < this.breakPoints[1]){
- u = this.breakPoints[0];
- }
- if (u <= this.breakPoints[0]) {
- return (u - min) * pixellength / unitlength;
- }
- else {
- return (u - this.breakPoints[1] + this.breakPoints[0] - min) * pixellength / unitlength;
- }
- };
- this.series_p2u = function(p){
- return p * unitlength / pixellength + min;
- };
- }
-
- else {
- this.series_u2p = function(u){
- if (u > this.breakPoints[0] && u < this.breakPoints[1]){
- u = this.breakPoints[0];
- }
- if (u >= this.breakPoints[1]) {
- return (u - max) * pixellength / unitlength;
- }
- else {
- return (u + this.breakPoints[1] - this.breakPoints[0] - max) * pixellength / unitlength;
- }
- };
- this.series_p2u = function(p){
- return p * unitlength / pixellength + max;
- };
- }
- }
- else {
- this.p2u = function(p){
- return (p - offmin) * unitlength / pixellength + min;
- };
-
- this.u2p = function(u){
- return (u - min) * pixellength / unitlength + offmin;
- };
-
- if (this.name == 'xaxis' || this.name == 'x2axis'){
- this.series_u2p = function(u){
- return (u - min) * pixellength / unitlength;
- };
- this.series_p2u = function(p){
- return p * unitlength / pixellength + min;
- };
- }
-
- else {
- this.series_u2p = function(u){
- return (u - max) * pixellength / unitlength;
- };
- this.series_p2u = function(p){
- return p * unitlength / pixellength + max;
- };
- }
- }
-
- if (this.show) {
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- for (var i=0; i<ticks.length; i++) {
- var t = ticks[i];
- if (t.show && t.showLabel) {
- var shim;
-
- if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
- // will need to adjust auto positioning based on which axis this is.
- var temp = (this.name == 'xaxis') ? 1 : -1;
- switch (t.labelPosition) {
- case 'auto':
- // position at end
- if (temp * t.angle < 0) {
- shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- }
- // position at start
- else {
- shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
- }
- break;
- case 'end':
- shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- break;
- case 'start':
- shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
- break;
- case 'middle':
- shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- break;
- default:
- shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- break;
- }
- }
- else {
- shim = -t.getWidth()/2;
- }
- var val = this.u2p(t.value) + shim + 'px';
- t._elem.css('left', val);
- t.pack();
- }
- }
- if (lshow) {
- var w = this._label._elem.outerWidth(true);
- this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px');
- if (this.name == 'xaxis') {
- this._label._elem.css('bottom', '0px');
- }
- else {
- this._label._elem.css('top', '0px');
- }
- this._label.pack();
- }
- }
- else {
- for (var i=0; i<ticks.length; i++) {
- var t = ticks[i];
- if (t.show && t.showLabel) {
- var shim;
- if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
- // will need to adjust auto positioning based on which axis this is.
- var temp = (this.name == 'yaxis') ? 1 : -1;
- switch (t.labelPosition) {
- case 'auto':
- // position at end
- case 'end':
- if (temp * t.angle < 0) {
- shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
- }
- else {
- shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
- }
- break;
- case 'start':
- if (t.angle > 0) {
- shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
- }
- else {
- shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
- }
- break;
- case 'middle':
- // if (t.angle > 0) {
- // shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- // }
- // else {
- // shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
- // }
- shim = -t.getHeight()/2;
- break;
- default:
- shim = -t.getHeight()/2;
- break;
- }
- }
- else {
- shim = -t.getHeight()/2;
- }
-
- var val = this.u2p(t.value) + shim + 'px';
- t._elem.css('top', val);
- t.pack();
- }
- }
- if (lshow) {
- var h = this._label._elem.outerHeight(true);
- this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px');
- if (this.name == 'yaxis') {
- this._label._elem.css('left', '0px');
- }
- else {
- this._label._elem.css('right', '0px');
- }
- this._label.pack();
- }
- }
- }
-
- ticks = null;
- };
-
-
- /**
- * The following code was generaously given to me a while back by Scott Prahl.
- * He did a good job at computing axes min, max and number of ticks for the
- * case where the user has not set any scale related parameters (tickInterval,
- * numberTicks, min or max). I had ignored this use case for a long time,
- * focusing on the more difficult case where user has set some option controlling
- * tick generation. Anyway, about time I got this into jqPlot.
- * Thanks Scott!!
- */
-
- /**
- * Copyright (c) 2010 Scott Prahl
- * The next three routines are 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.
- */
-
- // A good format string depends on the interval. If the interval is greater
- // than 1 then there is no need to show any decimal digits. If it is < 1.0, then
- // use the magnitude of the interval to determine the number of digits to show.
- function bestFormatString (interval)
- {
- var fstr;
- interval = Math.abs(interval);
- if (interval >= 10) {
- fstr = '%d';
- }
-
- else if (interval > 1) {
- if (interval === parseInt(interval, 10)) {
- fstr = '%d';
- }
- else {
- fstr = '%.1f';
- }
- }
-
- else {
- var expv = -Math.floor(Math.log(interval)/Math.LN10);
- fstr = '%.' + expv + 'f';
- }
-
- return fstr;
- }
-
- var _factors = [0.1, 0.2, 0.3, 0.4, 0.5, 0.8, 1, 2, 3, 4, 5];
-
- var _getLowerFactor = function(f) {
- var i = _factors.indexOf(f);
- if (i > 0) {
- return _factors[i-1];
- }
- else {
- return _factors[_factors.length - 1] / 100;
- }
- };
-
- var _getHigherFactor = function(f) {
- var i = _factors.indexOf(f);
- if (i < _factors.length-1) {
- return _factors[i+1];
- }
- else {
- return _factors[0] * 100;
- }
- };
-
- // Given a fixed minimum and maximum and a target number ot ticks
- // figure out the best interval and
- // return min, max, number ticks, format string and tick interval
- function bestConstrainedInterval(min, max, nttarget) {
- // run through possible number to ticks and see which interval is best
- var low = Math.floor(nttarget/2);
- var hi = Math.ceil(nttarget*1.5);
- var badness = Number.MAX_VALUE;
- var r = (max - min);
- var temp;
- var sd;
- var bestNT;
- var gsf = $.jqplot.getSignificantFigures;
- var fsd;
- var fs;
- var currentNT;
- var bestPrec;
-
- for (var i=0, l=hi-low+1; i<l; i++) {
- currentNT = low + i;
- temp = r/(currentNT-1);
- sd = gsf(temp);
-
- temp = Math.abs(nttarget - currentNT) + sd.digitsRight;
- if (temp < badness) {
- badness = temp;
- bestNT = currentNT;
- bestPrec = sd.digitsRight;
- }
- else if (temp === badness) {
- // let nicer ticks trump number ot ticks
- if (sd.digitsRight < bestPrec) {
- bestNT = currentNT;
- bestPrec = sd.digitsRight;
- }
- }
-
- }
-
- fsd = Math.max(bestPrec, Math.max(gsf(min).digitsRight, gsf(max).digitsRight));
- if (fsd === 0) {
- fs = '%d';
- }
- else {
- fs = '%.' + fsd + 'f';
- }
- temp = r / (bestNT - 1);
- // min, max, number ticks, format string, tick interval
- return [min, max, bestNT, fs, temp];
- }
-
- // This will return an interval of form 2 * 10^n, 5 * 10^n or 10 * 10^n
- // it is based soley on the range and number of ticks. So if user specifies
- // number of ticks, use this.
- function bestInterval(range, numberTicks) {
- numberTicks = numberTicks || 7;
- var minimum = range / (numberTicks - 1);
- var magnitude = Math.pow(10, Math.floor(Math.log(minimum) / Math.LN10));
- var residual = minimum / magnitude;
- var interval;
- // "nicest" ranges are 1, 2, 5 or powers of these.
- // for magnitudes below 1, only allow these.
- if (magnitude < 1) {
- if (residual > 5) {
- interval = 10 * magnitude;
- }
- else if (residual > 2) {
- interval = 5 * magnitude;
- }
- else if (residual > 1) {
- interval = 2 * magnitude;
- }
- else {
- interval = magnitude;
- }
- }
- // for large ranges (whole integers), allow intervals like 3, 4 or powers of these.
- // this helps a lot with poor choices for number of ticks.
- else {
- if (residual > 5) {
- interval = 10 * magnitude;
- }
- else if (residual > 4) {
- interval = 5 * magnitude;
- }
- else if (residual > 3) {
- interval = 4 * magnitude;
- }
- else if (residual > 2) {
- interval = 3 * magnitude;
- }
- else if (residual > 1) {
- interval = 2 * magnitude;
- }
- else {
- interval = magnitude;
- }
- }
-
- return interval;
- }
-
- // This will return an interval of form 2 * 10^n, 5 * 10^n or 10 * 10^n
- // it is based soley on the range of data, number of ticks must be computed later.
- function bestLinearInterval(range, scalefact) {
- scalefact = scalefact || 1;
- var expv = Math.floor(Math.log(range)/Math.LN10);
- var magnitude = Math.pow(10, expv);
- // 0 < f < 10
- var f = range / magnitude;
- var fact;
- // for large plots, scalefact will decrease f and increase number of ticks.
- // for small plots, scalefact will increase f and decrease number of ticks.
- f = f/scalefact;
-
- // for large plots, smaller interval, more ticks.
- if (f<=0.38) {
- fact = 0.1;
- }
- else if (f<=1.6) {
- fact = 0.2;
- }
- else if (f<=4.0) {
- fact = 0.5;
- }
- else if (f<=8.0) {
- fact = 1.0;
- }
- // for very small plots, larger interval, less ticks in number ticks
- else if (f<=16.0) {
- fact = 2;
- }
- else {
- fact = 5;
- }
-
- return fact*magnitude;
- }
-
- function bestLinearComponents(range, scalefact) {
- var expv = Math.floor(Math.log(range)/Math.LN10);
- var magnitude = Math.pow(10, expv);
- // 0 < f < 10
- var f = range / magnitude;
- var interval;
- var fact;
- // for large plots, scalefact will decrease f and increase number of ticks.
- // for small plots, scalefact will increase f and decrease number of ticks.
- f = f/scalefact;
-
- // for large plots, smaller interval, more ticks.
- if (f<=0.38) {
- fact = 0.1;
- }
- else if (f<=1.6) {
- fact = 0.2;
- }
- else if (f<=4.0) {
- fact = 0.5;
- }
- else if (f<=8.0) {
- fact = 1.0;
- }
- // for very small plots, larger interval, less ticks in number ticks
- else if (f<=16.0) {
- fact = 2;
- }
- // else if (f<=20.0) {
- // fact = 3;
- // }
- // else if (f<=24.0) {
- // fact = 4;
- // }
- else {
- fact = 5;
- }
-
- interval = fact * magnitude;
-
- return [interval, fact, magnitude];
- }
-
- // Given the min and max for a dataset, return suitable endpoints
- // for the graphing, a good number for the number of ticks, and a
- // format string so that extraneous digits are not displayed.
- // returned is an array containing [min, max, nTicks, format]
- $.jqplot.LinearTickGenerator = function(axis_min, axis_max, scalefact, numberTicks, keepMin, keepMax) {
- // Set to preserve EITHER min OR max.
- // If min is preserved, max must be free.
- keepMin = (keepMin === null) ? false : keepMin;
- keepMax = (keepMax === null || keepMin) ? false : keepMax;
- // if endpoints are equal try to include zero otherwise include one
- if (axis_min === axis_max) {
- axis_max = (axis_max) ? 0 : 1;
- }
-
- scalefact = scalefact || 1.0;
-
- // make sure range is positive
- if (axis_max < axis_min) {
- var a = axis_max;
- axis_max = axis_min;
- axis_min = a;
- }
-
- var r = [];
- var ss = bestLinearInterval(axis_max - axis_min, scalefact);
-
- var gsf = $.jqplot.getSignificantFigures;
-
- if (numberTicks == null) {
-
- // Figure out the axis min, max and number of ticks
- // the min and max will be some multiple of the tick interval,
- // 1*10^n, 2*10^n or 5*10^n. This gaurantees that, if the
- // axis min is negative, 0 will be a tick.
- if (!keepMin && !keepMax) {
- r[0] = Math.floor(axis_min / ss) * ss; // min
- r[1] = Math.ceil(axis_max / ss) * ss; // max
- r[2] = Math.round((r[1]-r[0])/ss+1.0); // number of ticks
- r[3] = bestFormatString(ss); // format string
- r[4] = ss; // tick Interval
- }
-
- else if (keepMin) {
- r[0] = axis_min; // min
- r[2] = Math.ceil((axis_max - axis_min) / ss + 1.0); // number of ticks
- r[1] = axis_min + (r[2] - 1) * ss; // max
- var digitsMin = gsf(axis_min).digitsRight;
- var digitsSS = gsf(ss).digitsRight;
- if (digitsMin < digitsSS) {
- r[3] = bestFormatString(ss); // format string
- }
- else {
- r[3] = '%.' + digitsMin + 'f';
- }
- r[4] = ss; // tick Interval
- }
-
- else if (keepMax) {
- r[1] = axis_max; // max
- r[2] = Math.ceil((axis_max - axis_min) / ss + 1.0); // number of ticks
- r[0] = axis_max - (r[2] - 1) * ss; // min
- var digitsMax = gsf(axis_max).digitsRight;
- var digitsSS = gsf(ss).digitsRight;
- if (digitsMax < digitsSS) {
- r[3] = bestFormatString(ss); // format string
- }
- else {
- r[3] = '%.' + digitsMax + 'f';
- }
- r[4] = ss; // tick Interval
- }
- }
-
- else {
- var tempr = [];
-
- // Figure out the axis min, max and number of ticks
- // the min and max will be some multiple of the tick interval,
- // 1*10^n, 2*10^n or 5*10^n. This gaurantees that, if the
- // axis min is negative, 0 will be a tick.
- tempr[0] = Math.floor(axis_min / ss) * ss; // min
- tempr[1] = Math.ceil(axis_max / ss) * ss; // max
- tempr[2] = Math.round((tempr[1]-tempr[0])/ss+1.0); // number of ticks
- tempr[3] = bestFormatString(ss); // format string
- tempr[4] = ss; // tick Interval
-
- // first, see if we happen to get the right number of ticks
- if (tempr[2] === numberTicks) {
- r = tempr;
- }
-
- else {
-
- var newti = bestInterval(tempr[1] - tempr[0], numberTicks);
-
- r[0] = tempr[0]; // min
- r[2] = numberTicks; // number of ticks
- r[4] = newti; // tick interval
- r[3] = bestFormatString(newti); // format string
- r[1] = r[0] + (r[2] - 1) * r[4]; // max
- }
- }
-
- return r;
- };
-
- $.jqplot.LinearTickGenerator.bestLinearInterval = bestLinearInterval;
- $.jqplot.LinearTickGenerator.bestInterval = bestInterval;
- $.jqplot.LinearTickGenerator.bestLinearComponents = bestLinearComponents;
- $.jqplot.LinearTickGenerator.bestConstrainedInterval = bestConstrainedInterval;
-
-
- // class: $.jqplot.MarkerRenderer
- // The default jqPlot marker renderer, rendering the points on the line.
- $.jqplot.MarkerRenderer = function(options){
- // Group: Properties
-
- // prop: show
- // wether or not to show the marker.
- this.show = true;
- // prop: style
- // One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare
- this.style = 'filledCircle';
- // prop: lineWidth
- // size of the line for non-filled markers.
- this.lineWidth = 2;
- // prop: size
- // Size of the marker (diameter or circle, length of edge of square, etc.)
- this.size = 9.0;
- // prop: color
- // color of marker. Will be set to color of series by default on init.
- this.color = '#666666';
- // prop: shadow
- // wether or not to draw a shadow on the line
- this.shadow = true;
- // prop: shadowAngle
- // Shadow angle in degrees
- this.shadowAngle = 45;
- // prop: shadowOffset
- // Shadow offset from line in pixels
- this.shadowOffset = 1;
- // prop: shadowDepth
- // Number of times shadow is stroked, each stroke offset shadowOffset from the last.
- this.shadowDepth = 3;
- // prop: shadowAlpha
- // Alpha channel transparency of shadow. 0 = transparent.
- this.shadowAlpha = '0.07';
- // prop: shadowRenderer
- // Renderer that will draws the shadows on the marker.
- this.shadowRenderer = new $.jqplot.ShadowRenderer();
- // prop: shapeRenderer
- // Renderer that will draw the marker.
- this.shapeRenderer = new $.jqplot.ShapeRenderer();
-
- $.extend(true, this, options);
- };
-
- $.jqplot.MarkerRenderer.prototype.init = function(options) {
- $.extend(true, this, options);
- var sdopt = {angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, lineWidth:this.lineWidth, depth:this.shadowDepth, closePath:true};
- if (this.style.indexOf('filled') != -1) {
- sdopt.fill = true;
- }
- if (this.style.indexOf('ircle') != -1) {
- sdopt.isarc = true;
- sdopt.closePath = false;
- }
- this.shadowRenderer.init(sdopt);
-
- var shopt = {fill:false, isarc:false, strokeStyle:this.color, fillStyle:this.color, lineWidth:this.lineWidth, closePath:true};
- if (this.style.indexOf('filled') != -1) {
- shopt.fill = true;
- }
- if (this.style.indexOf('ircle') != -1) {
- shopt.isarc = true;
- shopt.closePath = false;
- }
- this.shapeRenderer.init(shopt);
- };
-
- $.jqplot.MarkerRenderer.prototype.drawDiamond = function(x, y, ctx, fill, options) {
- var stretch = 1.2;
- var dx = this.size/2/stretch;
- var dy = this.size/2*stretch;
- var points = [[x-dx, y], [x, y+dy], [x+dx, y], [x, y-dy]];
- if (this.shadow) {
- this.shadowRenderer.draw(ctx, points);
- }
- this.shapeRenderer.draw(ctx, points, options);
- };
-
- $.jqplot.MarkerRenderer.prototype.drawPlus = function(x, y, ctx, fill, options) {
- var stretch = 1.0;
- var dx = this.size/2*stretch;
- var dy = this.size/2*stretch;
- var points1 = [[x, y-dy], [x, y+dy]];
- var points2 = [[x+dx, y], [x-dx, y]];
- var opts = $.extend(true, {}, this.options, {closePath:false});
- if (this.shadow) {
- this.shadowRenderer.draw(ctx, points1, {closePath:false});
- this.shadowRenderer.draw(ctx, points2, {closePath:false});
- }
- this.shapeRenderer.draw(ctx, points1, opts);
- this.shapeRenderer.draw(ctx, points2, opts);
- };
-
- $.jqplot.MarkerRenderer.prototype.drawX = function(x, y, ctx, fill, options) {
- var stretch = 1.0;
- var dx = this.size/2*stretch;
- var dy = this.size/2*stretch;
- var opts = $.extend(true, {}, this.options, {closePath:false});
- var points1 = [[x-dx, y-dy], [x+dx, y+dy]];
- var points2 = [[x-dx, y+dy], [x+dx, y-dy]];
- if (this.shadow) {
- this.shadowRenderer.draw(ctx, points1, {closePath:false});
- this.shadowRenderer.draw(ctx, points2, {closePath:false});
- }
- this.shapeRenderer.draw(ctx, points1, opts);
- this.shapeRenderer.draw(ctx, points2, opts);
- };
-
- $.jqplot.MarkerRenderer.prototype.drawDash = function(x, y, ctx, fill, options) {
- var stretch = 1.0;
- var dx = this.size/2*stretch;
- var dy = this.size/2*stretch;
- var points = [[x-dx, y], [x+dx, y]];
- if (this.shadow) {
- this.shadowRenderer.draw(ctx, points);
- }
- this.shapeRenderer.draw(ctx, points, options);
- };
-
- $.jqplot.MarkerRenderer.prototype.drawLine = function(p1, p2, ctx, fill, options) {
- var points = [p1, p2];
- if (this.shadow) {
- this.shadowRenderer.draw(ctx, points);
- }
- this.shapeRenderer.draw(ctx, points, options);
- };
-
- $.jqplot.MarkerRenderer.prototype.drawSquare = function(x, y, ctx, fill, options) {
- var stretch = 1.0;
- var dx = this.size/2/stretch;
- var dy = this.size/2*stretch;
- var points = [[x-dx, y-dy], [x-dx, y+dy], [x+dx, y+dy], [x+dx, y-dy]];
- if (this.shadow) {
- this.shadowRenderer.draw(ctx, points);
- }
- this.shapeRenderer.draw(ctx, points, options);
- };
-
- $.jqplot.MarkerRenderer.prototype.drawCircle = function(x, y, ctx, fill, options) {
- var radius = this.size/2;
- var end = 2*Math.PI;
- var points = [x, y, radius, 0, end, true];
- if (this.shadow) {
- this.shadowRenderer.draw(ctx, points);
- }
- this.shapeRenderer.draw(ctx, points, options);
- };
-
- $.jqplot.MarkerRenderer.prototype.draw = function(x, y, ctx, options) {
- options = options || {};
- // hack here b/c shape renderer uses canvas based color style options
- // and marker uses css style names.
- if (options.show == null || options.show != false) {
- if (options.color && !options.fillStyle) {
- options.fillStyle = options.color;
- }
- if (options.color && !options.strokeStyle) {
- options.strokeStyle = options.color;
- }
- switch (this.style) {
- case 'diamond':
- this.drawDiamond(x,y,ctx, false, options);
- break;
- case 'filledDiamond':
- this.drawDiamond(x,y,ctx, true, options);
- break;
- case 'circle':
- this.drawCircle(x,y,ctx, false, options);
- break;
- case 'filledCircle':
- this.drawCircle(x,y,ctx, true, options);
- break;
- case 'square':
- this.drawSquare(x,y,ctx, false, options);
- break;
- case 'filledSquare':
- this.drawSquare(x,y,ctx, true, options);
- break;
- case 'x':
- this.drawX(x,y,ctx, true, options);
- break;
- case 'plus':
- this.drawPlus(x,y,ctx, true, options);
- break;
- case 'dash':
- this.drawDash(x,y,ctx, true, options);
- break;
- case 'line':
- this.drawLine(x, y, ctx, false, options);
- break;
- default:
- this.drawDiamond(x,y,ctx, false, options);
- break;
- }
- }
- };
-
- // class: $.jqplot.shadowRenderer
- // The default jqPlot shadow renderer, rendering shadows behind shapes.
- $.jqplot.ShadowRenderer = function(options){
- // Group: Properties
-
- // prop: angle
- // Angle of the shadow in degrees. Measured counter-clockwise from the x axis.
- this.angle = 45;
- // prop: offset
- // Pixel offset at the given shadow angle of each shadow stroke from the last stroke.
- this.offset = 1;
- // prop: alpha
- // alpha transparency of shadow stroke.
- this.alpha = 0.07;
- // prop: lineWidth
- // width of the shadow line stroke.
- this.lineWidth = 1.5;
- // prop: lineJoin
- // How line segments of the shadow are joined.
- this.lineJoin = 'miter';
- // prop: lineCap
- // how ends of the shadow line are rendered.
- this.lineCap = 'round';
- // prop; closePath
- // whether line path segment is closed upon itself.
- this.closePath = false;
- // prop: fill
- // whether to fill the shape.
- this.fill = false;
- // prop: depth
- // how many times the shadow is stroked. Each stroke will be offset by offset at angle degrees.
- this.depth = 3;
- this.strokeStyle = 'rgba(0,0,0,0.1)';
- // prop: isarc
- // wether the shadow is an arc or not.
- this.isarc = false;
-
- $.extend(true, this, options);
- };
-
- $.jqplot.ShadowRenderer.prototype.init = function(options) {
- $.extend(true, this, options);
- };
-
- // function: draw
- // draws an transparent black (i.e. gray) shadow.
- //
- // ctx - canvas drawing context
- // points - array of points or [x, y, radius, start angle (rad), end angle (rad)]
- $.jqplot.ShadowRenderer.prototype.draw = function(ctx, points, options) {
- ctx.save();
- var opts = (options != null) ? options : {};
- var fill = (opts.fill != null) ? opts.fill : this.fill;
- var fillRect = (opts.fillRect != null) ? opts.fillRect : this.fillRect;
- var closePath = (opts.closePath != null) ? opts.closePath : this.closePath;
- var offset = (opts.offset != null) ? opts.offset : this.offset;
- var alpha = (opts.alpha != null) ? opts.alpha : this.alpha;
- var depth = (opts.depth != null) ? opts.depth : this.depth;
- var isarc = (opts.isarc != null) ? opts.isarc : this.isarc;
- var linePattern = (opts.linePattern != null) ? opts.linePattern : this.linePattern;
- ctx.lineWidth = (opts.lineWidth != null) ? opts.lineWidth : this.lineWidth;
- ctx.lineJoin = (opts.lineJoin != null) ? opts.lineJoin : this.lineJoin;
- ctx.lineCap = (opts.lineCap != null) ? opts.lineCap : this.lineCap;
- ctx.strokeStyle = opts.strokeStyle || this.strokeStyle || 'rgba(0,0,0,'+alpha+')';
- ctx.fillStyle = opts.fillStyle || this.fillStyle || 'rgba(0,0,0,'+alpha+')';
- for (var j=0; j<depth; j++) {
- var ctxPattern = $.jqplot.LinePattern(ctx, linePattern);
- ctx.translate(Math.cos(this.angle*Math.PI/180)*offset, Math.sin(this.angle*Math.PI/180)*offset);
- ctxPattern.beginPath();
- if (isarc) {
- ctx.arc(points[0], points[1], points[2], points[3], points[4], true);
- }
- else if (fillRect) {
- if (fillRect) {
- ctx.fillRect(points[0], points[1], points[2], points[3]);
- }
- }
- else if (points && points.length){
- var move = true;
- for (var i=0; i<points.length; i++) {
- // skip to the first non-null point and move to it.
- if (points[i][0] != null && points[i][1] != null) {
- if (move) {
- ctxPattern.moveTo(points[i][0], points[i][1]);
- move = false;
- }
- else {
- ctxPattern.lineTo(points[i][0], points[i][1]);
- }
- }
- else {
- move = true;
- }
- }
-
- }
- if (closePath) {
- ctxPattern.closePath();
- }
- if (fill) {
- ctx.fill();
- }
- else {
- ctx.stroke();
- }
- }
- ctx.restore();
- };
-
- // class: $.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.
- $.jqplot.ShapeRenderer = function(options){
-
- this.lineWidth = 1.5;
- // prop: linePattern
- // 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.
- this.linePattern = 'solid';
- // prop: lineJoin
- // How line segments of the shadow are joined.
- this.lineJoin = 'miter';
- // prop: lineCap
- // how ends of the shadow line are rendered.
- this.lineCap = 'round';
- // prop; closePath
- // whether line path segment is closed upon itself.
- this.closePath = false;
- // prop: fill
- // whether to fill the shape.
- this.fill = false;
- // prop: isarc
- // wether the shadow is an arc or not.
- this.isarc = false;
- // prop: fillRect
- // true to draw shape as a filled rectangle.
- this.fillRect = false;
- // prop: strokeRect
- // true to draw shape as a stroked rectangle.
- this.strokeRect = false;
- // prop: clearRect
- // true to cear a rectangle.
- this.clearRect = false;
- // prop: strokeStyle
- // css color spec for the stoke style
- this.strokeStyle = '#999999';
- // prop: fillStyle
- // css color spec for the fill style.
- this.fillStyle = '#999999';
-
- $.extend(true, this, options);
- };
-
- $.jqplot.ShapeRenderer.prototype.init = function(options) {
- $.extend(true, this, options);
- };
-
- // function: draw
- // draws the shape.
- //
- // ctx - canvas drawing context
- // points - array 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.
- $.jqplot.ShapeRenderer.prototype.draw = function(ctx, points, options) {
- ctx.save();
- var opts = (options != null) ? options : {};
- var fill = (opts.fill != null) ? opts.fill : this.fill;
- var closePath = (opts.closePath != null) ? opts.closePath : this.closePath;
- var fillRect = (opts.fillRect != null) ? opts.fillRect : this.fillRect;
- var strokeRect = (opts.strokeRect != null) ? opts.strokeRect : this.strokeRect;
- var clearRect = (opts.clearRect != null) ? opts.clearRect : this.clearRect;
- var isarc = (opts.isarc != null) ? opts.isarc : this.isarc;
- var linePattern = (opts.linePattern != null) ? opts.linePattern : this.linePattern;
- var ctxPattern = $.jqplot.LinePattern(ctx, linePattern);
- ctx.lineWidth = opts.lineWidth || this.lineWidth;
- ctx.lineJoin = opts.lineJoin || this.lineJoin;
- ctx.lineCap = opts.lineCap || this.lineCap;
- ctx.strokeStyle = (opts.strokeStyle || opts.color) || this.strokeStyle;
- ctx.fillStyle = opts.fillStyle || this.fillStyle;
- ctx.beginPath();
- if (isarc) {
- ctx.arc(points[0], points[1], points[2], points[3], points[4], true);
- if (closePath) {
- ctx.closePath();
- }
- if (fill) {
- ctx.fill();
- }
- else {
- ctx.stroke();
- }
- ctx.restore();
- return;
- }
- else if (clearRect) {
- ctx.clearRect(points[0], points[1], points[2], points[3]);
- ctx.restore();
- return;
- }
- else if (fillRect || strokeRect) {
- if (fillRect) {
- ctx.fillRect(points[0], points[1], points[2], points[3]);
- }
- if (strokeRect) {
- ctx.strokeRect(points[0], points[1], points[2], points[3]);
- ctx.restore();
- return;
- }
- }
- else if (points && points.length){
- var move = true;
- for (var i=0; i<points.length; i++) {
- // skip to the first non-null point and move to it.
- if (points[i][0] != null && points[i][1] != null) {
- if (move) {
- ctxPattern.moveTo(points[i][0], points[i][1]);
- move = false;
- }
- else {
- ctxPattern.lineTo(points[i][0], points[i][1]);
- }
- }
- else {
- move = true;
- }
- }
- if (closePath) {
- ctxPattern.closePath();
- }
- if (fill) {
- ctx.fill();
- }
- else {
- ctx.stroke();
- }
- }
- ctx.restore();
- };
-
- // class $.jqplot.TableLegendRenderer
- // The default legend renderer for jqPlot.
- $.jqplot.TableLegendRenderer = function(){
- //
- };
-
- $.jqplot.TableLegendRenderer.prototype.init = function(options) {
- $.extend(true, this, options);
- };
-
- $.jqplot.TableLegendRenderer.prototype.addrow = function (label, color, pad, reverse) {
- var rs = (pad) ? this.rowSpacing+'px' : '0px';
- var tr;
- var td;
- var elem;
- var div0;
- var div1;
- elem = document.createElement('tr');
- tr = $(elem);
- tr.addClass('jqplot-table-legend');
- elem = null;
-
- if (reverse){
- tr.prependTo(this._elem);
- }
-
- else{
- tr.appendTo(this._elem);
- }
-
- if (this.showSwatches) {
- td = $(document.createElement('td'));
- td.addClass('jqplot-table-legend jqplot-table-legend-swatch');
- td.css({textAlign: 'center', paddingTop: rs});
-
- div0 = $(document.createElement('div'));
- div0.addClass('jqplot-table-legend-swatch-outline');
- div1 = $(document.createElement('div'));
- div1.addClass('jqplot-table-legend-swatch');
- div1.css({backgroundColor: color, borderColor: color});
-
- tr.append(td.append(div0.append(div1)));
-
- // $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
- // '<div><div class="jqplot-table-legend-swatch" style="background-color:'+color+';border-color:'+color+';"></div>'+
- // '</div></td>').appendTo(tr);
- }
- if (this.showLabels) {
- td = $(document.createElement('td'));
- td.addClass('jqplot-table-legend jqplot-table-legend-label');
- td.css('paddingTop', rs);
- tr.append(td);
-
- // elem = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
- // elem.appendTo(tr);
- if (this.escapeHtml) {
- td.text(label);
- }
- else {
- td.html(label);
- }
- }
- td = null;
- div0 = null;
- div1 = null;
- tr = null;
- elem = null;
- };
-
- // called with scope of legend
- $.jqplot.TableLegendRenderer.prototype.draw = function() {
- if (this._elem) {
- this._elem.emptyForce();
- this._elem = null;
- }
-
- if (this.show) {
- var series = this._series;
- // make a table. one line label per row.
- var elem = document.createElement('table');
- this._elem = $(elem);
- this._elem.addClass('jqplot-table-legend');
-
- var ss = {position:'absolute'};
- if (this.background) {
- ss['background'] = this.background;
- }
- if (this.border) {
- ss['border'] = this.border;
- }
- if (this.fontSize) {
- ss['fontSize'] = this.fontSize;
- }
- if (this.fontFamily) {
- ss['fontFamily'] = this.fontFamily;
- }
- if (this.textColor) {
- ss['textColor'] = this.textColor;
- }
- if (this.marginTop != null) {
- ss['marginTop'] = this.marginTop;
- }
- if (this.marginBottom != null) {
- ss['marginBottom'] = this.marginBottom;
- }
- if (this.marginLeft != null) {
- ss['marginLeft'] = this.marginLeft;
- }
- if (this.marginRight != null) {
- ss['marginRight'] = this.marginRight;
- }
-
-
- var pad = false,
- reverse = false,
- s;
- for (var i = 0; i< series.length; i++) {
- s = series[i];
- if (s._stack || s.renderer.constructor == $.jqplot.BezierCurveRenderer){
- reverse = true;
- }
- if (s.show && s.showLabel) {
- var lt = this.labels[i] || s.label.toString();
- if (lt) {
- var color = s.color;
- if (reverse && i < series.length - 1){
- pad = true;
- }
- else if (reverse && i == series.length - 1){
- pad = false;
- }
- this.renderer.addrow.call(this, lt, color, pad, reverse);
- pad = true;
- }
- // let plugins add more rows to legend. Used by trend line plugin.
- for (var j=0; j<$.jqplot.addLegendRowHooks.length; j++) {
- var item = $.jqplot.addLegendRowHooks[j].call(this, s);
- if (item) {
- this.renderer.addrow.call(this, item.label, item.color, pad);
- pad = true;
- }
- }
- lt = null;
- }
- }
- }
- return this._elem;
- };
-
- $.jqplot.TableLegendRenderer.prototype.pack = function(offsets) {
- if (this.show) {
- if (this.placement == 'insideGrid') {
- switch (this.location) {
- case 'nw':
- var a = offsets.left;
- var b = offsets.top;
- this._elem.css('left', a);
- this._elem.css('top', b);
- break;
- case 'n':
- var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
- var b = offsets.top;
- this._elem.css('left', a);
- this._elem.css('top', b);
- break;
- case 'ne':
- var a = offsets.right;
- var b = offsets.top;
- this._elem.css({right:a, top:b});
- break;
- case 'e':
- var a = offsets.right;
- var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
- this._elem.css({right:a, top:b});
- break;
- case 'se':
- var a = offsets.right;
- var b = offsets.bottom;
- this._elem.css({right:a, bottom:b});
- break;
- case 's':
- var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
- var b = offsets.bottom;
- this._elem.css({left:a, bottom:b});
- break;
- case 'sw':
- var a = offsets.left;
- var b = offsets.bottom;
- this._elem.css({left:a, bottom:b});
- break;
- case 'w':
- var a = offsets.left;
- var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
- this._elem.css({left:a, top:b});
- break;
- default: // same as 'se'
- var a = offsets.right;
- var b = offsets.bottom;
- this._elem.css({right:a, bottom:b});
- break;
- }
-
- }
- else if (this.placement == 'outside'){
- switch (this.location) {
- case 'nw':
- var a = this._plotDimensions.width - offsets.left;
- var b = offsets.top;
- this._elem.css('right', a);
- this._elem.css('top', b);
- break;
- case 'n':
- var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
- var b = this._plotDimensions.height - offsets.top;
- this._elem.css('left', a);
- this._elem.css('bottom', b);
- break;
- case 'ne':
- var a = this._plotDimensions.width - offsets.right;
- var b = offsets.top;
- this._elem.css({left:a, top:b});
- break;
- case 'e':
- var a = this._plotDimensions.width - offsets.right;
- var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
- this._elem.css({left:a, top:b});
- break;
- case 'se':
- var a = this._plotDimensions.width - offsets.right;
- var b = offsets.bottom;
- this._elem.css({left:a, bottom:b});
- break;
- case 's':
- var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
- var b = this._plotDimensions.height - offsets.bottom;
- this._elem.css({left:a, top:b});
- break;
- case 'sw':
- var a = this._plotDimensions.width - offsets.left;
- var b = offsets.bottom;
- this._elem.css({right:a, bottom:b});
- break;
- case 'w':
- var a = this._plotDimensions.width - offsets.left;
- var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
- this._elem.css({right:a, top:b});
- break;
- default: // same as 'se'
- var a = offsets.right;
- var b = offsets.bottom;
- this._elem.css({right:a, bottom:b});
- break;
- }
- }
- else {
- switch (this.location) {
- case 'nw':
- this._elem.css({left:0, top:offsets.top});
- break;
- case 'n':
- var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
- this._elem.css({left: a, top:offsets.top});
- break;
- case 'ne':
- this._elem.css({right:0, top:offsets.top});
- break;
- case 'e':
- var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
- this._elem.css({right:offsets.right, top:b});
- break;
- case 'se':
- this._elem.css({right:offsets.right, bottom:offsets.bottom});
- break;
- case 's':
- var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
- this._elem.css({left: a, bottom:offsets.bottom});
- break;
- case 'sw':
- this._elem.css({left:offsets.left, bottom:offsets.bottom});
- break;
- case 'w':
- var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
- this._elem.css({left:offsets.left, top:b});
- break;
- default: // same as 'se'
- this._elem.css({right:offsets.right, bottom:offsets.bottom});
- break;
- }
- }
- }
- };
-
- /**
- * Class: $.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)"]
- * > }
- *
- */
- $.jqplot.ThemeEngine = function(){
- // Group: Properties
- //
- // prop: themes
- // hash of themes managed by the theme engine.
- // Indexed by theme name.
- this.themes = {};
- // prop: activeTheme
- // Pointer to currently active theme
- this.activeTheme=null;
-
- };
-
- // called with scope of plot
- $.jqplot.ThemeEngine.prototype.init = function() {
- // get the Default theme from the current plot settings.
- var th = new $.jqplot.Theme({_name:'Default'});
- var n, i, nn;
-
- for (n in th.target) {
- if (n == "textColor") {
- th.target[n] = this.target.css('color');
- }
- else {
- th.target[n] = this.target.css(n);
- }
- }
-
- if (this.title.show && this.title._elem) {
- for (n in th.title) {
- if (n == "textColor") {
- th.title[n] = this.title._elem.css('color');
- }
- else {
- th.title[n] = this.title._elem.css(n);
- }
- }
- }
-
- for (n in th.grid) {
- th.grid[n] = this.grid[n];
- }
- if (th.grid.backgroundColor == null && this.grid.background != null) {
- th.grid.backgroundColor = this.grid.background;
- }
- if (this.legend.show && this.legend._elem) {
- for (n in th.legend) {
- if (n == 'textColor') {
- th.legend[n] = this.legend._elem.css('color');
- }
- else {
- th.legend[n] = this.legend._elem.css(n);
- }
- }
- }
- var s;
-
- for (i=0; i<this.series.length; i++) {
- s = this.series[i];
- if (s.renderer.constructor == $.jqplot.LineRenderer) {
- th.series.push(new LineSeriesProperties());
- }
- else if (s.renderer.constructor == $.jqplot.BarRenderer) {
- th.series.push(new BarSeriesProperties());
- }
- else if (s.renderer.constructor == $.jqplot.PieRenderer) {
- th.series.push(new PieSeriesProperties());
- }
- else if (s.renderer.constructor == $.jqplot.DonutRenderer) {
- th.series.push(new DonutSeriesProperties());
- }
- else if (s.renderer.constructor == $.jqplot.FunnelRenderer) {
- th.series.push(new FunnelSeriesProperties());
- }
- else if (s.renderer.constructor == $.jqplot.MeterGaugeRenderer) {
- th.series.push(new MeterSeriesProperties());
- }
- else {
- th.series.push({});
- }
- for (n in th.series[i]) {
- th.series[i][n] = s[n];
- }
- }
- var a, ax;
- for (n in this.axes) {
- ax = this.axes[n];
- a = th.axes[n] = new AxisProperties();
- a.borderColor = ax.borderColor;
- a.borderWidth = ax.borderWidth;
- if (ax._ticks && ax._ticks[0]) {
- for (nn in a.ticks) {
- if (ax._ticks[0].hasOwnProperty(nn)) {
- a.ticks[nn] = ax._ticks[0][nn];
- }
- else if (ax._ticks[0]._elem){
- a.ticks[nn] = ax._ticks[0]._elem.css(nn);
- }
- }
- }
- if (ax._label && ax._label.show) {
- for (nn in a.label) {
- // a.label[nn] = ax._label._elem.css(nn);
- if (ax._label[nn]) {
- a.label[nn] = ax._label[nn];
- }
- else if (ax._label._elem){
- if (nn == 'textColor') {
- a.label[nn] = ax._label._elem.css('color');
- }
- else {
- a.label[nn] = ax._label._elem.css(nn);
- }
- }
- }
- }
- }
- this.themeEngine._add(th);
- this.themeEngine.activeTheme = this.themeEngine.themes[th._name];
- };
- /**
- * Group: methods
- *
- * method: get
- *
- * Get and return the named theme or the active theme if no name given.
- *
- * parameter:
- *
- * name - name of theme to get.
- *
- * returns:
- *
- * Theme instance of given name.
- */
- $.jqplot.ThemeEngine.prototype.get = function(name) {
- if (!name) {
- // return the active theme
- return this.activeTheme;
- }
- else {
- return this.themes[name];
- }
- };
-
- function numericalOrder(a,b) { return a-b; }
-
- /**
- * method: getThemeNames
- *
- * 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.
- */
- $.jqplot.ThemeEngine.prototype.getThemeNames = function() {
- var tn = [];
- for (var n in this.themes) {
- tn.push(n);
- }
- return tn.sort(numericalOrder);
- };
-
- /**
- * method: getThemes
- *
- * Return a list of themes in alpha-numerical order by name.
- *
- * parameter:
- *
- * None
- *
- * returns:
- *
- * A list of themes in alpha-numerical order by name.
- */
- $.jqplot.ThemeEngine.prototype.getThemes = function() {
- var tn = [];
- var themes = [];
- for (var n in this.themes) {
- tn.push(n);
- }
- tn.sort(numericalOrder);
- for (var i=0; i<tn.length; i++) {
- themes.push(this.themes[tn[i]]);
- }
- return themes;
- };
-
- $.jqplot.ThemeEngine.prototype.activate = function(plot, name) {
- // sometimes need to redraw whole plot.
- var redrawPlot = false;
- if (!name && this.activeTheme && this.activeTheme._name) {
- name = this.activeTheme._name;
- }
- if (!this.themes.hasOwnProperty(name)) {
- throw new Error("No theme of that name");
- }
- else {
- var th = this.themes[name];
- this.activeTheme = th;
- var val, checkBorderColor = false, checkBorderWidth = false;
- var arr = ['xaxis', 'x2axis', 'yaxis', 'y2axis'];
-
- for (i=0; i<arr.length; i++) {
- var ax = arr[i];
- if (th.axesStyles.borderColor != null) {
- plot.axes[ax].borderColor = th.axesStyles.borderColor;
- }
- if (th.axesStyles.borderWidth != null) {
- plot.axes[ax].borderWidth = th.axesStyles.borderWidth;
- }
- }
-
- for (var axname in plot.axes) {
- var axis = plot.axes[axname];
- if (axis.show) {
- var thaxis = th.axes[axname] || {};
- var thaxstyle = th.axesStyles;
- var thax = $.jqplot.extend(true, {}, thaxis, thaxstyle);
- val = (th.axesStyles.borderColor != null) ? th.axesStyles.borderColor : thax.borderColor;
- if (thax.borderColor != null) {
- axis.borderColor = thax.borderColor;
- redrawPlot = true;
- }
- val = (th.axesStyles.borderWidth != null) ? th.axesStyles.borderWidth : thax.borderWidth;
- if (thax.borderWidth != null) {
- axis.borderWidth = thax.borderWidth;
- redrawPlot = true;
- }
- if (axis._ticks && axis._ticks[0]) {
- for (var nn in thax.ticks) {
- // val = null;
- // if (th.axesStyles.ticks && th.axesStyles.ticks[nn] != null) {
- // val = th.axesStyles.ticks[nn];
- // }
- // else if (thax.ticks[nn] != null){
- // val = thax.ticks[nn]
- // }
- val = thax.ticks[nn];
- if (val != null) {
- axis.tickOptions[nn] = val;
- axis._ticks = [];
- redrawPlot = true;
- }
- }
- }
- if (axis._label && axis._label.show) {
- for (var nn in thax.label) {
- // val = null;
- // if (th.axesStyles.label && th.axesStyles.label[nn] != null) {
- // val = th.axesStyles.label[nn];
- // }
- // else if (thax.label && thax.label[nn] != null){
- // val = thax.label[nn]
- // }
- val = thax.label[nn];
- if (val != null) {
- axis.labelOptions[nn] = val;
- redrawPlot = true;
- }
- }
- }
-
- }
- }
-
- for (var n in th.grid) {
- if (th.grid[n] != null) {
- plot.grid[n] = th.grid[n];
- }
- }
- if (!redrawPlot) {
- plot.grid.draw();
- }
-
- if (plot.legend.show) {
- for (n in th.legend) {
- if (th.legend[n] != null) {
- plot.legend[n] = th.legend[n];
- }
- }
- }
- if (plot.title.show) {
- for (n in th.title) {
- if (th.title[n] != null) {
- plot.title[n] = th.title[n];
- }
- }
- }
-
- var i;
- for (i=0; i<th.series.length; i++) {
- var opts = {};
- var redrawSeries = false;
- for (n in th.series[i]) {
- val = (th.seriesStyles[n] != null) ? th.seriesStyles[n] : th.series[i][n];
- if (val != null) {
- opts[n] = val;
- if (n == 'color') {
- plot.series[i].renderer.shapeRenderer.fillStyle = val;
- plot.series[i].renderer.shapeRenderer.strokeStyle = val;
- plot.series[i][n] = val;
- }
- else if ((n == 'lineWidth') || (n == 'linePattern')) {
- plot.series[i].renderer.shapeRenderer[n] = val;
- plot.series[i][n] = val;
- }
- else if (n == 'markerOptions') {
- merge (plot.series[i].markerOptions, val);
- merge (plot.series[i].markerRenderer, val);
- }
- else {
- plot.series[i][n] = val;
- }
- redrawPlot = true;
- }
- }
- }
-
- if (redrawPlot) {
- plot.target.empty();
- plot.draw();
- }
-
- for (n in th.target) {
- if (th.target[n] != null) {
- plot.target.css(n, th.target[n]);
- }
- }
- }
-
- };
-
- $.jqplot.ThemeEngine.prototype._add = function(theme, name) {
- if (name) {
- theme._name = name;
- }
- if (!theme._name) {
- theme._name = Date.parse(new Date());
- }
- if (!this.themes.hasOwnProperty(theme._name)) {
- this.themes[theme._name] = theme;
- }
- else {
- throw new Error("jqplot.ThemeEngine Error: Theme already in use");
- }
- };
-
- // method remove
- // Delete the named theme, return true on success, false on failure.
-
-
- /**
- * method: remove
- *
- * Remove the given theme from the themeEngine.
- *
- * parameters:
- *
- * name - name of the theme to remove.
- *
- * returns:
- *
- * true on success, false on failure.
- */
- $.jqplot.ThemeEngine.prototype.remove = function(name) {
- if (name == 'Default') {
- return false;
- }
- return delete this.themes[name];
- };
-
- /**
- * method: newTheme
- *
- * Create a new theme based on the default theme, adding it the themeEngine.
- *
- * parameters:
- *
- * name - name of the new theme.
- * obj - optional object of styles to be applied to this new theme.
- *
- * returns:
- *
- * new Theme object.
- */
- $.jqplot.ThemeEngine.prototype.newTheme = function(name, obj) {
- if (typeof(name) == 'object') {
- obj = obj || name;
- name = null;
- }
- if (obj && obj._name) {
- name = obj._name;
- }
- else {
- name = name || Date.parse(new Date());
- }
- // var th = new $.jqplot.Theme(name);
- var th = this.copy(this.themes['Default']._name, name);
- $.jqplot.extend(th, obj);
- return th;
- };
-
- // function clone(obj) {
- // return eval(obj.toSource());
- // }
-
- function clone(obj){
- if(obj == null || typeof(obj) != 'object'){
- return obj;
- }
-
- var temp = new obj.constructor();
- for(var key in obj){
- temp[key] = clone(obj[key]);
- }
- return temp;
- }
-
- $.jqplot.clone = clone;
-
- function merge(obj1, obj2) {
- if (obj2 == null || typeof(obj2) != 'object') {
- return;
- }
- for (var key in obj2) {
- if (key == 'highlightColors') {
- obj1[key] = clone(obj2[key]);
- }
- if (obj2[key] != null && typeof(obj2[key]) == 'object') {
- if (!obj1.hasOwnProperty(key)) {
- obj1[key] = {};
- }
- merge(obj1[key], obj2[key]);
- }
- else {
- obj1[key] = obj2[key];
- }
- }
- }
-
- $.jqplot.merge = merge;
-
- // Use the jQuery 1.3.2 extend function since behaviour in jQuery 1.4 seems problematic
- $.jqplot.extend = function() {
- // copy reference to target object
- var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
- target = arguments[1] || {};
- // skip the boolean and the target
- i = 2;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !toString.call(target) === "[object Function]" ) {
- target = {};
- }
-
- for ( ; i < length; i++ ){
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null ) {
- // Extend the base object
- for ( var name in options ) {
- var src = target[ name ], copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging object values
- if ( deep && copy && typeof copy === "object" && !copy.nodeType ) {
- target[ name ] = $.jqplot.extend( deep,
- // Never move original objects, clone them
- src || ( copy.length != null ? [ ] : { } )
- , copy );
- }
- // Don't bring in undefined values
- else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
- // Return the modified object
- return target;
- };
-
- /**
- * method: rename
- *
- * Rename a theme.
- *
- * parameters:
- *
- * oldName - current name of the theme.
- * newName - desired name of the theme.
- *
- * returns:
- *
- * new Theme object.
- */
- $.jqplot.ThemeEngine.prototype.rename = function (oldName, newName) {
- if (oldName == 'Default' || newName == 'Default') {
- throw new Error ("jqplot.ThemeEngine Error: Cannot rename from/to Default");
- }
- if (this.themes.hasOwnProperty(newName)) {
- throw new Error ("jqplot.ThemeEngine Error: New name already in use.");
- }
- else if (this.themes.hasOwnProperty(oldName)) {
- var th = this.copy (oldName, newName);
- this.remove(oldName);
- return th;
- }
- throw new Error("jqplot.ThemeEngine Error: Old name or new name invalid");
- };
-
- /**
- * method: copy
- *
- * Create a copy of an existing theme in the themeEngine, adding it the themeEngine.
- *
- * parameters:
- *
- * sourceName - name of the existing theme.
- * targetName - name of the copy.
- * obj - optional object of style parameter to apply to the new theme.
- *
- * returns:
- *
- * new Theme object.
- */
- $.jqplot.ThemeEngine.prototype.copy = function (sourceName, targetName, obj) {
- if (targetName == 'Default') {
- throw new Error ("jqplot.ThemeEngine Error: Cannot copy over Default theme");
- }
- if (!this.themes.hasOwnProperty(sourceName)) {
- var s = "jqplot.ThemeEngine Error: Source name invalid";
- throw new Error(s);
- }
- if (this.themes.hasOwnProperty(targetName)) {
- var s = "jqplot.ThemeEngine Error: Target name invalid";
- throw new Error(s);
- }
- else {
- var th = clone(this.themes[sourceName]);
- th._name = targetName;
- $.jqplot.extend(true, th, obj);
- this._add(th);
- return th;
- }
- };
-
-
- $.jqplot.Theme = function(name, obj) {
- if (typeof(name) == 'object') {
- obj = obj || name;
- name = null;
- }
- name = name || Date.parse(new Date());
- this._name = name;
- this.target = {
- backgroundColor: null
- };
- this.legend = {
- textColor: null,
- fontFamily: null,
- fontSize: null,
- border: null,
- background: null
- };
- this.title = {
- textColor: null,
- fontFamily: null,
- fontSize: null,
- textAlign: null
- };
- this.seriesStyles = {};
- this.series = [];
- this.grid = {
- drawGridlines: null,
- gridLineColor: null,
- gridLineWidth: null,
- backgroundColor: null,
- borderColor: null,
- borderWidth: null,
- shadow: null
- };
- this.axesStyles = {label:{}, ticks:{}};
- this.axes = {};
- if (typeof(obj) == 'string') {
- this._name = obj;
- }
- else if(typeof(obj) == 'object') {
- $.jqplot.extend(true, this, obj);
- }
- };
-
- var AxisProperties = function() {
- this.borderColor = null;
- this.borderWidth = null;
- this.ticks = new AxisTicks();
- this.label = new AxisLabel();
- };
-
- var AxisTicks = function() {
- this.show = null;
- this.showGridline = null;
- this.showLabel = null;
- this.showMark = null;
- this.size = null;
- this.textColor = null;
- this.whiteSpace = null;
- this.fontSize = null;
- this.fontFamily = null;
- };
-
- var AxisLabel = function() {
- this.textColor = null;
- this.whiteSpace = null;
- this.fontSize = null;
- this.fontFamily = null;
- this.fontWeight = null;
- };
-
- var LineSeriesProperties = function() {
- this.color=null;
- this.lineWidth=null;
- this.linePattern=null;
- this.shadow=null;
- this.fillColor=null;
- this.showMarker=null;
- this.markerOptions = new MarkerOptions();
- };
-
- var MarkerOptions = function() {
- this.show = null;
- this.style = null;
- this.lineWidth = null;
- this.size = null;
- this.color = null;
- this.shadow = null;
- };
-
- var BarSeriesProperties = function() {
- this.color=null;
- this.seriesColors=null;
- this.lineWidth=null;
- this.shadow=null;
- this.barPadding=null;
- this.barMargin=null;
- this.barWidth=null;
- this.highlightColors=null;
- };
-
- var PieSeriesProperties = function() {
- this.seriesColors=null;
- this.padding=null;
- this.sliceMargin=null;
- this.fill=null;
- this.shadow=null;
- this.startAngle=null;
- this.lineWidth=null;
- this.highlightColors=null;
- };
-
- var DonutSeriesProperties = function() {
- this.seriesColors=null;
- this.padding=null;
- this.sliceMargin=null;
- this.fill=null;
- this.shadow=null;
- this.startAngle=null;
- this.lineWidth=null;
- this.innerDiameter=null;
- this.thickness=null;
- this.ringMargin=null;
- this.highlightColors=null;
- };
-
- var FunnelSeriesProperties = function() {
- this.color=null;
- this.lineWidth=null;
- this.shadow=null;
- this.padding=null;
- this.sectionMargin=null;
- this.seriesColors=null;
- this.highlightColors=null;
- };
-
- var MeterSeriesProperties = function() {
- this.padding=null;
- this.backgroundColor=null;
- this.ringColor=null;
- this.tickColor=null;
- this.ringWidth=null;
- this.intervalColors=null;
- this.intervalInnerRadius=null;
- this.intervalOuterRadius=null;
- this.hubRadius=null;
- this.needleThickness=null;
- this.needlePad=null;
- };
-
-
-
-
- $.fn.jqplotChildText = function() {
- return $(this).contents().filter(function() {
- return this.nodeType == 3; // Node.TEXT_NODE not defined in I7
- }).text();
- };
-
- // Returns font style as abbreviation for "font" property.
- $.fn.jqplotGetComputedFontStyle = function() {
- var css = window.getComputedStyle ? window.getComputedStyle(this[0], "") : this[0].currentStyle;
- var attrs = css['font-style'] ? ['font-style', 'font-weight', 'font-size', 'font-family'] : ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily'];
- var style = [];
-
- for (var i=0 ; i < attrs.length; ++i) {
- var attr = String(css[attrs[i]]);
-
- if (attr && attr != 'normal') {
- style.push(attr);
- }
- }
- return style.join(' ');
- };
-
- /**
- * Namespace: $.fn
- * jQuery namespace to attach functions to jQuery elements.
- *
- */
-
- $.fn.jqplotToImageCanvas = function(options) {
-
- options = options || {};
- var x_offset = (options.x_offset == null) ? 0 : options.x_offset;
- var y_offset = (options.y_offset == null) ? 0 : options.y_offset;
- var backgroundColor = (options.backgroundColor == null) ? 'rgb(255,255,255)' : options.backgroundColor;
-
- if ($(this).width() == 0 || $(this).height() == 0) {
- return null;
- }
-
- // excanvas and hence IE < 9 do not support toDataURL and cannot export images.
- if ($.jqplot.use_excanvas) {
- return null;
- }
-
- var newCanvas = document.createElement("canvas");
- var h = $(this).outerHeight(true);
- var w = $(this).outerWidth(true);
- var offs = $(this).offset();
- var plotleft = offs.left;
- var plottop = offs.top;
- var transx = 0, transy = 0;
-
- // have to check if any elements are hanging outside of plot area before rendering,
- // since changing width of canvas will erase canvas.
-
- var clses = ['jqplot-table-legend', 'jqplot-xaxis-tick', 'jqplot-x2axis-tick', 'jqplot-yaxis-tick', 'jqplot-y2axis-tick', 'jqplot-y3axis-tick',
- 'jqplot-y4axis-tick', 'jqplot-y5axis-tick', 'jqplot-y6axis-tick', 'jqplot-y7axis-tick', 'jqplot-y8axis-tick', 'jqplot-y9axis-tick',
- 'jqplot-xaxis-label', 'jqplot-x2axis-label', 'jqplot-yaxis-label', 'jqplot-y2axis-label', 'jqplot-y3axis-label', 'jqplot-y4axis-label',
- 'jqplot-y5axis-label', 'jqplot-y6axis-label', 'jqplot-y7axis-label', 'jqplot-y8axis-label', 'jqplot-y9axis-label' ];
-
- var temptop, templeft, tempbottom, tempright;
-
- for (var i = 0; i < clses.length; i++) {
- $(this).find('.'+clses[i]).each(function() {
- temptop = $(this).offset().top - plottop;
- templeft = $(this).offset().left - plotleft;
- tempright = templeft + $(this).outerWidth(true) + transx;
- tempbottom = temptop + $(this).outerHeight(true) + transy;
- if (templeft < -transx) {
- w = w - transx - templeft;
- transx = -templeft;
- }
- if (temptop < -transy) {
- h = h - transy - temptop;
- transy = - temptop;
- }
- if (tempright > w) {
- w = tempright;
- }
- if (tempbottom > h) {
- h = tempbottom;
- }
- });
- }
-
- newCanvas.width = w + Number(x_offset);
- newCanvas.height = h + Number(y_offset);
-
- var newContext = newCanvas.getContext("2d");
-
- newContext.save();
- newContext.fillStyle = backgroundColor;
- newContext.fillRect(0,0, newCanvas.width, newCanvas.height);
- newContext.restore();
-
- newContext.translate(transx, transy);
- newContext.textAlign = 'left';
- newContext.textBaseline = 'top';
-
- function getLineheight(el) {
- var lineheight = parseInt($(el).css('line-height'), 10);
-
- if (isNaN(lineheight)) {
- lineheight = parseInt($(el).css('font-size'), 10) * 1.2;
- }
- return lineheight;
- }
-
- function writeWrappedText (el, context, text, left, top, canvasWidth) {
- var lineheight = getLineheight(el);
- var tagwidth = $(el).innerWidth();
- var tagheight = $(el).innerHeight();
- var words = text.split(/\s+/);
- var wl = words.length;
- var w = '';
- var breaks = [];
- var temptop = top;
- var templeft = left;
-
- for (var i=0; i<wl; i++) {
- w += words[i];
- if (context.measureText(w).width > tagwidth) {
- breaks.push(i);
- w = '';
- i--;
- }
- }
- if (breaks.length === 0) {
- // center text if necessary
- if ($(el).css('textAlign') === 'center') {
- templeft = left + (canvasWidth - context.measureText(w).width)/2 - transx;
- }
- context.fillText(text, templeft, top);
- }
- else {
- w = words.slice(0, breaks[0]).join(' ');
- // center text if necessary
- if ($(el).css('textAlign') === 'center') {
- templeft = left + (canvasWidth - context.measureText(w).width)/2 - transx;
- }
- context.fillText(w, templeft, temptop);
- temptop += lineheight;
- for (var i=1, l=breaks.length; i<l; i++) {
- w = words.slice(breaks[i-1], breaks[i]).join(' ');
- // center text if necessary
- if ($(el).css('textAlign') === 'center') {
- templeft = left + (canvasWidth - context.measureText(w).width)/2 - transx;
- }
- context.fillText(w, templeft, temptop);
- temptop += lineheight;
- }
- w = words.slice(breaks[i-1], words.length).join(' ');
- // center text if necessary
- if ($(el).css('textAlign') === 'center') {
- templeft = left + (canvasWidth - context.measureText(w).width)/2 - transx;
- }
- context.fillText(w, templeft, temptop);
- }
-
- }
-
- function _jqpToImage(el, x_offset, y_offset) {
- var tagname = el.tagName.toLowerCase();
- var p = $(el).position();
- var css = window.getComputedStyle ? window.getComputedStyle(el, "") : el.currentStyle; // for IE < 9
- var left = x_offset + p.left + parseInt(css.marginLeft, 10) + parseInt(css.borderLeftWidth, 10) + parseInt(css.paddingLeft, 10);
- var top = y_offset + p.top + parseInt(css.marginTop, 10) + parseInt(css.borderTopWidth, 10)+ parseInt(css.paddingTop, 10);
- var w = newCanvas.width;
- // var left = x_offset + p.left + $(el).css('marginLeft') + $(el).css('borderLeftWidth')
-
- // somehow in here, for divs within divs, the width of the inner div should be used instead of the canvas.
-
- if ((tagname == 'div' || tagname == 'span') && !$(el).hasClass('jqplot-highlighter-tooltip')) {
- $(el).children().each(function() {
- _jqpToImage(this, left, top);
- });
- var text = $(el).jqplotChildText();
-
- if (text) {
- newContext.font = $(el).jqplotGetComputedFontStyle();
- newContext.fillStyle = $(el).css('color');
-
- writeWrappedText(el, newContext, text, left, top, w);
- }
- }
-
- // handle the standard table legend
-
- else if (tagname === 'table' && $(el).hasClass('jqplot-table-legend')) {
- newContext.strokeStyle = $(el).css('border-top-color');
- newContext.fillStyle = $(el).css('background-color');
- newContext.fillRect(left, top, $(el).innerWidth(), $(el).innerHeight());
- if (parseInt($(el).css('border-top-width'), 10) > 0) {
- newContext.strokeRect(left, top, $(el).innerWidth(), $(el).innerHeight());
- }
-
- // find all the swatches
- $(el).find('div.jqplot-table-legend-swatch-outline').each(function() {
- // get the first div and stroke it
- var elem = $(this);
- newContext.strokeStyle = elem.css('border-top-color');
- var l = left + elem.position().left;
- var t = top + elem.position().top;
- newContext.strokeRect(l, t, elem.innerWidth(), elem.innerHeight());
-
- // now fill the swatch
-
- l += parseInt(elem.css('padding-left'), 10);
- t += parseInt(elem.css('padding-top'), 10);
- var h = elem.innerHeight() - 2 * parseInt(elem.css('padding-top'), 10);
- var w = elem.innerWidth() - 2 * parseInt(elem.css('padding-left'), 10);
-
- var swatch = elem.children('div.jqplot-table-legend-swatch');
- newContext.fillStyle = swatch.css('background-color');
- newContext.fillRect(l, t, w, h);
- });
-
- // now add text
-
- $(el).find('td.jqplot-table-legend-label').each(function(){
- var elem = $(this);
- var l = left + elem.position().left;
- var t = top + elem.position().top + parseInt(elem.css('padding-top'), 10);
- newContext.font = elem.jqplotGetComputedFontStyle();
- newContext.fillStyle = elem.css('color');
- writeWrappedText(elem, newContext, elem.text(), l, t, w);
- });
-
- var elem = null;
- }
-
- else if (tagname == 'canvas') {
- newContext.drawImage(el, left, top);
- }
- }
- $(this).children().each(function() {
- _jqpToImage(this, x_offset, y_offset);
- });
- return newCanvas;
- };
-
- // return the raw image data string.
- // Should work on canvas supporting browsers.
- $.fn.jqplotToImageStr = function(options) {
- var imgCanvas = $(this).jqplotToImageCanvas(options);
- if (imgCanvas) {
- return imgCanvas.toDataURL("image/png");
- }
- else {
- return null;
- }
- };
-
- // return a DOM <img> element and return it.
- // Should work on canvas supporting browsers.
- $.fn.jqplotToImageElem = function(options) {
- var elem = document.createElement("img");
- var str = $(this).jqplotToImageStr(options);
- elem.src = str;
- return elem;
- };
-
- // return a string for an <img> element and return it.
- // Should work on canvas supporting browsers.
- $.fn.jqplotToImageElemStr = function(options) {
- var str = '<img src='+$(this).jqplotToImageStr(options)+' />';
- return str;
- };
-
- // Not gauranteed to work, even on canvas supporting browsers due to
- // limitations with location.href and browser support.
- $.fn.jqplotSaveImage = function() {
- var imgData = $(this).jqplotToImageStr({});
- if (imgData) {
- window.location.href = imgData.replace("image/png", "image/octet-stream");
- }
-
- };
-
- // Not gauranteed to work, even on canvas supporting browsers due to
- // limitations with window.open and arbitrary data.
- $.fn.jqplotViewImage = function() {
- var imgStr = $(this).jqplotToImageElemStr({});
- var imgData = $(this).jqplotToImageStr({});
- if (imgStr) {
- var w = window.open('');
- w.document.open("image/png");
- w.document.write(imgStr);
- w.document.close();
- w = null;
- }
- };
-
-
-
-
- /**
- * @description
- * <p>Object with extended date parsing and formatting capabilities.
- * This library borrows many concepts and ideas from the Date Instance
- * Methods by Ken Snyder along with some parts of Ken's actual code.</p>
- *
- * <p>jsDate takes a different approach by not extending the built-in
- * Date Object, improving date parsing, allowing for multiple formatting
- * syntaxes and multiple and more easily expandable localization.</p>
- *
- * @author Chris Leonello
- * @date #date#
- * @version #VERSION#
- * @copyright (c) 2010 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.
- *
- * <p>Ken's origianl Date Instance Methods and copyright notice:</p>
- * <pre>
- * 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/)
- * </pre>
- *
- * @class
- * @name jsDate
- * @param {String | Number | Array | Date&nbsp;Object | Options&nbsp;Object} arguments Optional arguments, either a parsable date/time string,
- * a JavaScript timestamp, an array of numbers of form [year, month, day, hours, minutes, seconds, milliseconds],
- * a Date object, or an options object of form {syntax: "perl", date:some Date} where all options are optional.
- */
-
- var jsDate = function () {
-
- this.syntax = jsDate.config.syntax;
- this._type = "jsDate";
- this.proxy = new Date();
- this.options = {};
- this.locale = jsDate.regional.getLocale();
- this.formatString = '';
- this.defaultCentury = jsDate.config.defaultCentury;
-
- switch ( arguments.length ) {
- case 0:
- break;
- case 1:
- // other objects either won't have a _type property or,
- // if they do, it shouldn't be set to "jsDate", so
- // assume it is an options argument.
- if (get_type(arguments[0]) == "[object Object]" && arguments[0]._type != "jsDate") {
- var opts = this.options = arguments[0];
- this.syntax = opts.syntax || this.syntax;
- this.defaultCentury = opts.defaultCentury || this.defaultCentury;
- this.proxy = jsDate.createDate(opts.date);
- }
- else {
- this.proxy = jsDate.createDate(arguments[0]);
- }
- break;
- default:
- var a = [];
- for ( var i=0; i<arguments.length; i++ ) {
- a.push(arguments[i]);
- }
- // this should be the current date/time?
- this.proxy = new Date();
- this.proxy.setFullYear.apply( this.proxy, a.slice(0,3) );
- if ( a.slice(3).length ) {
- this.proxy.setHours.apply( this.proxy, a.slice(3) );
- }
- break;
- }
- };
-
- /**
- * @namespace Configuration options that will be used as defaults for all instances on the page.
- * @property {String} defaultLocale The default locale to use [en].
- * @property {String} syntax The default syntax to use [perl].
- * @property {Number} defaultCentury The default centry for 2 digit dates.
- */
- jsDate.config = {
- defaultLocale: 'en',
- syntax: 'perl',
- defaultCentury: 1900
- };
-
- /**
- * Add an arbitrary amount to the currently stored date
- *
- * @param {Number} number
- * @param {String} unit
- * @returns {jsDate}
- */
-
- jsDate.prototype.add = function(number, unit) {
- var factor = multipliers[unit] || multipliers.day;
- if (typeof factor == 'number') {
- this.proxy.setTime(this.proxy.getTime() + (factor * number));
- } else {
- factor.add(this, number);
- }
- return this;
- };
-
- /**
- * Create a new jqplot.date object with the same date
- *
- * @returns {jsDate}
- */
-
- jsDate.prototype.clone = function() {
- return new jsDate(this.proxy.getTime());
- };
-
- /**
- * Get the UTC TimeZone Offset of this date in milliseconds.
- *
- * @returns {Number}
- */
-
- jsDate.prototype.getUtcOffset = function() {
- return this.proxy.getTimezoneOffset() * 60000;
- };
-
- /**
- * Find the difference between this jsDate and another date.
- *
- * @param {String| Number| Array| jsDate&nbsp;Object| Date&nbsp;Object} dateObj
- * @param {String} unit
- * @param {Boolean} allowDecimal
- * @returns {Number} Number of units difference between dates.
- */
-
- jsDate.prototype.diff = function(dateObj, unit, allowDecimal) {
- // ensure we have a Date object
- dateObj = new jsDate(dateObj);
- if (dateObj === null) {
- return null;
- }
- // get the multiplying factor integer or factor function
- var factor = multipliers[unit] || multipliers.day;
- if (typeof factor == 'number') {
- // multiply
- var unitDiff = (this.proxy.getTime() - dateObj.proxy.getTime()) / factor;
- } else {
- // run function
- var unitDiff = factor.diff(this.proxy, dateObj.proxy);
- }
- // if decimals are not allowed, round toward zero
- return (allowDecimal ? unitDiff : Math[unitDiff > 0 ? 'floor' : 'ceil'](unitDiff));
- };
-
- /**
- * Get the abbreviated name of the current week day
- *
- * @returns {String}
- */
-
- jsDate.prototype.getAbbrDayName = function() {
- return jsDate.regional[this.locale]["dayNamesShort"][this.proxy.getDay()];
- };
-
- /**
- * Get the abbreviated name of the current month
- *
- * @returns {String}
- */
-
- jsDate.prototype.getAbbrMonthName = function() {
- return jsDate.regional[this.locale]["monthNamesShort"][this.proxy.getMonth()];
- };
-
- /**
- * Get UPPER CASE AM or PM for the current time
- *
- * @returns {String}
- */
-
- jsDate.prototype.getAMPM = function() {
- return this.proxy.getHours() >= 12 ? 'PM' : 'AM';
- };
-
- /**
- * Get lower case am or pm for the current time
- *
- * @returns {String}
- */
-
- jsDate.prototype.getAmPm = function() {
- return this.proxy.getHours() >= 12 ? 'pm' : 'am';
- };
-
- /**
- * Get the century (19 for 20th Century)
- *
- * @returns {Integer} Century (19 for 20th century).
- */
- jsDate.prototype.getCentury = function() {
- return parseInt(this.proxy.getFullYear()/100, 10);
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.getDate = function() {
- return this.proxy.getDate();
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.getDay = function() {
- return this.proxy.getDay();
- };
-
- /**
- * Get the Day of week 1 (Monday) thru 7 (Sunday)
- *
- * @returns {Integer} Day of week 1 (Monday) thru 7 (Sunday)
- */
- jsDate.prototype.getDayOfWeek = function() {
- var dow = this.proxy.getDay();
- return dow===0?7:dow;
- };
-
- /**
- * Get the day of the year
- *
- * @returns {Integer} 1 - 366, day of the year
- */
- jsDate.prototype.getDayOfYear = function() {
- var d = this.proxy;
- var ms = d - new Date('' + d.getFullYear() + '/1/1 GMT');
- ms += d.getTimezoneOffset()*60000;
- d = null;
- return parseInt(ms/60000/60/24, 10)+1;
- };
-
- /**
- * Get the name of the current week day
- *
- * @returns {String}
- */
-
- jsDate.prototype.getDayName = function() {
- return jsDate.regional[this.locale]["dayNames"][this.proxy.getDay()];
- };
-
- /**
- * Get the week number of the given year, starting with the first Sunday as the first week
- * @returns {Integer} Week number (13 for the 13th full week of the year).
- */
- jsDate.prototype.getFullWeekOfYear = function() {
- var d = this.proxy;
- var doy = this.getDayOfYear();
- var rdow = 6-d.getDay();
- var woy = parseInt((doy+rdow)/7, 10);
- return woy;
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.getFullYear = function() {
- return this.proxy.getFullYear();
- };
-
- /**
- * Get the GMT offset in hours and minutes (e.g. +06:30)
- *
- * @returns {String}
- */
-
- jsDate.prototype.getGmtOffset = function() {
- // divide the minutes offset by 60
- var hours = this.proxy.getTimezoneOffset() / 60;
- // decide if we are ahead of or behind GMT
- var prefix = hours < 0 ? '+' : '-';
- // remove the negative sign if any
- hours = Math.abs(hours);
- // add the +/- to the padded number of hours to : to the padded minutes
- return prefix + addZeros(Math.floor(hours), 2) + ':' + addZeros((hours % 1) * 60, 2);
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.getHours = function() {
- return this.proxy.getHours();
- };
-
- /**
- * Get the current hour on a 12-hour scheme
- *
- * @returns {Integer}
- */
-
- jsDate.prototype.getHours12 = function() {
- var hours = this.proxy.getHours();
- return hours > 12 ? hours - 12 : (hours == 0 ? 12 : hours);
- };
-
-
- jsDate.prototype.getIsoWeek = function() {
- var d = this.proxy;
- var woy = d.getWeekOfYear();
- var dow1_1 = (new Date('' + d.getFullYear() + '/1/1')).getDay();
- // First week is 01 and not 00 as in the case of %U and %W,
- // so we add 1 to the final result except if day 1 of the year
- // is a Monday (then %W returns 01).
- // We also need to subtract 1 if the day 1 of the year is
- // Friday-Sunday, so the resulting equation becomes:
- var idow = woy + (dow1_1 > 4 || dow1_1 <= 1 ? 0 : 1);
- if(idow == 53 && (new Date('' + d.getFullYear() + '/12/31')).getDay() < 4)
- {
- idow = 1;
- }
- else if(idow === 0)
- {
- d = new jsDate(new Date('' + (d.getFullYear()-1) + '/12/31'));
- idow = d.getIsoWeek();
- }
- d = null;
- return idow;
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.getMilliseconds = function() {
- return this.proxy.getMilliseconds();
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.getMinutes = function() {
- return this.proxy.getMinutes();
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.getMonth = function() {
- return this.proxy.getMonth();
- };
-
- /**
- * Get the name of the current month
- *
- * @returns {String}
- */
-
- jsDate.prototype.getMonthName = function() {
- return jsDate.regional[this.locale]["monthNames"][this.proxy.getMonth()];
- };
-
- /**
- * Get the number of the current month, 1-12
- *
- * @returns {Integer}
- */
-
- jsDate.prototype.getMonthNumber = function() {
- return this.proxy.getMonth() + 1;
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.getSeconds = function() {
- return this.proxy.getSeconds();
- };
-
- /**
- * Return a proper two-digit year integer
- *
- * @returns {Integer}
- */
-
- jsDate.prototype.getShortYear = function() {
- return this.proxy.getYear() % 100;
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.getTime = function() {
- return this.proxy.getTime();
- };
-
- /**
- * Get the timezone abbreviation
- *
- * @returns {String} Abbreviation for the timezone
- */
- jsDate.prototype.getTimezoneAbbr = function() {
- return this.proxy.toString().replace(/^.*\(([^)]+)\)$/, '$1');
- };
-
- /**
- * Get the browser-reported name for the current timezone (e.g. MDT, Mountain Daylight Time)
- *
- * @returns {String}
- */
- jsDate.prototype.getTimezoneName = function() {
- var match = /(?:\((.+)\)$| ([A-Z]{3}) )/.exec(this.toString());
- return match[1] || match[2] || 'GMT' + this.getGmtOffset();
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.getTimezoneOffset = function() {
- return this.proxy.getTimezoneOffset();
- };
-
-
- /**
- * Get the week number of the given year, starting with the first Monday as the first week
- * @returns {Integer} Week number (13 for the 13th week of the year).
- */
- jsDate.prototype.getWeekOfYear = function() {
- var doy = this.getDayOfYear();
- var rdow = 7 - this.getDayOfWeek();
- var woy = parseInt((doy+rdow)/7, 10);
- return woy;
- };
-
- /**
- * Get the current date as a Unix timestamp
- *
- * @returns {Integer}
- */
-
- jsDate.prototype.getUnix = function() {
- return Math.round(this.proxy.getTime() / 1000, 0);
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.getYear = function() {
- return this.proxy.getYear();
- };
-
- /**
- * Return a date one day ahead (or any other unit)
- *
- * @param {String} unit Optional, year | month | day | week | hour | minute | second | millisecond
- * @returns {jsDate}
- */
-
- jsDate.prototype.next = function(unit) {
- unit = unit || 'day';
- return this.clone().add(1, unit);
- };
-
- /**
- * Set the jsDate instance to a new date.
- *
- * @param {String | Number | Array | Date Object | jsDate Object | Options Object} arguments Optional arguments,
- * either a parsable date/time string,
- * a JavaScript timestamp, an array of numbers of form [year, month, day, hours, minutes, seconds, milliseconds],
- * a Date object, jsDate Object or an options object of form {syntax: "perl", date:some Date} where all options are optional.
- */
- jsDate.prototype.set = function() {
- switch ( arguments.length ) {
- case 0:
- this.proxy = new Date();
- break;
- case 1:
- // other objects either won't have a _type property or,
- // if they do, it shouldn't be set to "jsDate", so
- // assume it is an options argument.
- if (get_type(arguments[0]) == "[object Object]" && arguments[0]._type != "jsDate") {
- var opts = this.options = arguments[0];
- this.syntax = opts.syntax || this.syntax;
- this.defaultCentury = opts.defaultCentury || this.defaultCentury;
- this.proxy = jsDate.createDate(opts.date);
- }
- else {
- this.proxy = jsDate.createDate(arguments[0]);
- }
- break;
- default:
- var a = [];
- for ( var i=0; i<arguments.length; i++ ) {
- a.push(arguments[i]);
- }
- // this should be the current date/time
- this.proxy = new Date();
- this.proxy.setFullYear.apply( this.proxy, a.slice(0,3) );
- if ( a.slice(3).length ) {
- this.proxy.setHours.apply( this.proxy, a.slice(3) );
- }
- break;
- }
- return this;
- };
-
- /**
- * Sets the day of the month for a specified date according to local time.
- * @param {Integer} dayValue An integer from 1 to 31, representing the day of the month.
- */
- jsDate.prototype.setDate = function(n) {
- this.proxy.setDate(n);
- return this;
- };
-
- /**
- * Sets the full year for a specified date according to local time.
- * @param {Integer} yearValue The numeric value of the year, for example, 1995.
- * @param {Integer} monthValue Optional, between 0 and 11 representing the months January through December.
- * @param {Integer} dayValue Optional, between 1 and 31 representing the day of the month. If you specify the dayValue parameter, you must also specify the monthValue.
- */
- jsDate.prototype.setFullYear = function() {
- this.proxy.setFullYear.apply(this.proxy, arguments);
- return this;
- };
-
- /**
- * Sets the hours for a specified date according to local time.
- *
- * @param {Integer} hoursValue An integer between 0 and 23, representing the hour.
- * @param {Integer} minutesValue Optional, An integer between 0 and 59, representing the minutes.
- * @param {Integer} secondsValue Optional, An integer between 0 and 59, representing the seconds.
- * If you specify the secondsValue parameter, you must also specify the minutesValue.
- * @param {Integer} msValue Optional, A number between 0 and 999, representing the milliseconds.
- * If you specify the msValue parameter, you must also specify the minutesValue and secondsValue.
- */
- jsDate.prototype.setHours = function() {
- this.proxy.setHours.apply(this.proxy, arguments);
- return this;
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.setMilliseconds = function(n) {
- this.proxy.setMilliseconds(n);
- return this;
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.setMinutes = function() {
- this.proxy.setMinutes.apply(this.proxy, arguments);
- return this;
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.setMonth = function() {
- this.proxy.setMonth.apply(this.proxy, arguments);
- return this;
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.setSeconds = function() {
- this.proxy.setSeconds.apply(this.proxy, arguments);
- return this;
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.setTime = function(n) {
- this.proxy.setTime(n);
- return this;
- };
-
- /**
- * Implements Date functionality
- */
- jsDate.prototype.setYear = function() {
- this.proxy.setYear.apply(this.proxy, arguments);
- return this;
- };
-
- /**
- * Provide a formatted string representation of this date.
- *
- * @param {String} formatString A format string.
- * See: {@link jsDate.formats}.
- * @returns {String} Date String.
- */
-
- jsDate.prototype.strftime = function(formatString) {
- formatString = formatString || this.formatString || jsDate.regional[this.locale]['formatString'];
- return jsDate.strftime(this, formatString, this.syntax);
- };
-
- /**
- * Return a String representation of this jsDate object.
- * @returns {String} Date string.
- */
-
- jsDate.prototype.toString = function() {
- return this.proxy.toString();
- };
-
- /**
- * Convert the current date to an 8-digit integer (%Y%m%d)
- *
- * @returns {Integer}
- */
-
- jsDate.prototype.toYmdInt = function() {
- return (this.proxy.getFullYear() * 10000) + (this.getMonthNumber() * 100) + this.proxy.getDate();
- };
-
- /**
- * @namespace Holds localizations for month/day names.
- * <p>jsDate attempts to detect locale when loaded and defaults to 'en'.
- * If a localization is detected which is not available, jsDate defaults to 'en'.
- * Additional localizations can be added after jsDate loads. After adding a localization,
- * call the jsDate.regional.getLocale() method. Currently, en, fr and de are defined.</p>
- *
- * <p>Localizations must be an object and have the following properties defined: monthNames, monthNamesShort, dayNames, dayNamesShort and Localizations are added like:</p>
- * <pre class="code">
- * jsDate.regional['en'] = {
- * monthNames : 'January February March April May June July August September October November December'.split(' '),
- * monthNamesShort : 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' '),
- * dayNames : 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday'.split(' '),
- * dayNamesShort : 'Sun Mon Tue Wed Thu Fri Sat'.split(' ')
- * };
- * </pre>
- * <p>After adding localizations, call <code>jsDate.regional.getLocale();</code> to update the locale setting with the
- * new localizations.</p>
- */
-
- jsDate.regional = {
- 'en': {
- monthNames: ['January','February','March','April','May','June','July','August','September','October','November','December'],
- monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun','Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
- dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
- dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
- formatString: '%Y-%m-%d %H:%M:%S'
- },
-
- 'fr': {
- monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
- monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun','Jul','Aoû','Sep','Oct','Nov','Déc'],
- dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
- dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
- formatString: '%Y-%m-%d %H:%M:%S'
- },
-
- 'de': {
- monthNames: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'],
- monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'],
- dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
- dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'],
- formatString: '%Y-%m-%d %H:%M:%S'
- },
-
- 'es': {
- monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
- monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', 'Jul','Ago','Sep','Oct','Nov','Dic'],
- dayNames: ['Domingo','Lunes','Martes','Mi&eacute;rcoles','Jueves','Viernes','S&aacute;bado'],
- dayNamesShort: ['Dom','Lun','Mar','Mi&eacute;','Juv','Vie','S&aacute;b'],
- formatString: '%Y-%m-%d %H:%M:%S'
- },
-
- 'ru': {
- monthNames: ['Январь','Февраль','Март','Ðпрель','Май','Июнь','Июль','ÐвгуÑÑ‚','СентÑбрь','ОктÑбрь','ÐоÑбрь','Декабрь'],
- monthNamesShort: ['Янв','Фев','Мар','Ðпр','Май','Июн','Июл','Ðвг','Сен','Окт','ÐоÑ','Дек'],
- dayNames: ['воÑкреÑенье','понедельник','вторник','Ñреда','четверг','пÑтница','Ñуббота'],
- dayNamesShort: ['вÑк','пнд','втр','Ñрд','чтв','птн','Ñбт'],
- formatString: '%Y-%m-%d %H:%M:%S'
- },
-
- 'ar': {
- monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'آذار', 'حزيران','تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'],
- monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'],
- dayNames: ['السبت', 'الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة'],
- dayNamesShort: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'],
- formatString: '%Y-%m-%d %H:%M:%S'
- },
-
- 'pt': {
- monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
- monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun','Jul','Ago','Set','Out','Nov','Dez'],
- dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],
- dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
- formatString: '%Y-%m-%d %H:%M:%S'
- },
-
- 'pt-BR': {
- monthNames: ['Janeiro','Fevereiro','Mar&ccedil;o','Abril','Maio','Junho', 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'],
- monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun','Jul','Ago','Set','Out','Nov','Dez'],
- dayNames: ['Domingo','Segunda-feira','Ter&ccedil;a-feira','Quarta-feira','Quinta-feira','Sexta-feira','S&aacute;bado'],
- dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','S&aacute;b'],
- formatString: '%Y-%m-%d %H:%M:%S'
- }
-
-
- };
-
- // Set english variants to 'en'
- jsDate.regional['en-US'] = jsDate.regional['en-GB'] = jsDate.regional['en'];
-
- /**
- * Try to determine the users locale based on the lang attribute of the html page. Defaults to 'en'
- * if it cannot figure out a locale of if the locale does not have a localization defined.
- * @returns {String} locale
- */
-
- jsDate.regional.getLocale = function () {
- var l = jsDate.config.defaultLocale;
-
- if ( document && document.getElementsByTagName('html') && document.getElementsByTagName('html')[0].lang ) {
- l = document.getElementsByTagName('html')[0].lang;
- if (!jsDate.regional.hasOwnProperty(l)) {
- l = jsDate.config.defaultLocale;
- }
- }
-
- return l;
- };
-
- // ms in day
- var day = 24 * 60 * 60 * 1000;
-
- // padd a number with zeros
- var addZeros = function(num, digits) {
- num = String(num);
- var i = digits - num.length;
- var s = String(Math.pow(10, i)).slice(1);
- return s.concat(num);
- };
-
- // representations used for calculating differences between dates.
- // This borrows heavily from Ken Snyder's work.
- var multipliers = {
- millisecond: 1,
- second: 1000,
- minute: 60 * 1000,
- hour: 60 * 60 * 1000,
- day: day,
- week: 7 * day,
- month: {
- // add a number of months
- add: function(d, number) {
- // add any years needed (increments of 12)
- multipliers.year.add(d, Math[number > 0 ? 'floor' : 'ceil'](number / 12));
- // ensure that we properly wrap betwen December and January
- // 11 % 12 = 11
- // 12 % 12 = 0
- var prevMonth = d.getMonth() + (number % 12);
- if (prevMonth == 12) {
- prevMonth = 0;
- d.setYear(d.getFullYear() + 1);
- } else if (prevMonth == -1) {
- prevMonth = 11;
- d.setYear(d.getFullYear() - 1);
- }
- d.setMonth(prevMonth);
- },
- // get the number of months between two Date objects (decimal to the nearest day)
- diff: function(d1, d2) {
- // get the number of years
- var diffYears = d1.getFullYear() - d2.getFullYear();
- // get the number of remaining months
- var diffMonths = d1.getMonth() - d2.getMonth() + (diffYears * 12);
- // get the number of remaining days
- var diffDays = d1.getDate() - d2.getDate();
- // return the month difference with the days difference as a decimal
- return diffMonths + (diffDays / 30);
- }
- },
- year: {
- // add a number of years
- add: function(d, number) {
- d.setYear(d.getFullYear() + Math[number > 0 ? 'floor' : 'ceil'](number));
- },
- // get the number of years between two Date objects (decimal to the nearest day)
- diff: function(d1, d2) {
- return multipliers.month.diff(d1, d2) / 12;
- }
- }
- };
- //
- // Alias each multiplier with an 's' to allow 'year' and 'years' for example.
- // This comes from Ken Snyders work.
- //
- for (var unit in multipliers) {
- if (unit.substring(unit.length - 1) != 's') { // IE will iterate newly added properties :|
- multipliers[unit + 's'] = multipliers[unit];
- }
- }
-
- //
- // take a jsDate instance and a format code and return the formatted value.
- // This is a somewhat modified version of Ken Snyder's method.
- //
- var format = function(d, code, syntax) {
- // if shorcut codes are used, recursively expand those.
- if (jsDate.formats[syntax]["shortcuts"][code]) {
- return jsDate.strftime(d, jsDate.formats[syntax]["shortcuts"][code], syntax);
- } else {
- // get the format code function and addZeros() argument
- var getter = (jsDate.formats[syntax]["codes"][code] || '').split('.');
- var nbr = d['get' + getter[0]] ? d['get' + getter[0]]() : '';
- if (getter[1]) {
- nbr = addZeros(nbr, getter[1]);
- }
- return nbr;
- }
- };
-
- /**
- * @static
- * Static function for convert a date to a string according to a given format. Also acts as namespace for strftime format codes.
- * <p>strftime formatting can be accomplished without creating a jsDate object by calling jsDate.strftime():</p>
- * <pre class="code">
- * var formattedDate = jsDate.strftime('Feb 8, 2006 8:48:32', '%Y-%m-%d %H:%M:%S');
- * </pre>
- * @param {String | Number | Array | jsDate&nbsp;Object | Date&nbsp;Object} date A parsable date string, JavaScript time stamp, Array of form [year, month, day, hours, minutes, seconds, milliseconds], jsDate Object or Date object.
- * @param {String} formatString String with embedded date formatting codes.
- * See: {@link jsDate.formats}.
- * @param {String} syntax Optional syntax to use [default perl].
- * @param {String} locale Optional locale to use.
- * @returns {String} Formatted representation of the date.
- */
- //
- // Logic as implemented here is very similar to Ken Snyder's Date Instance Methods.
- //
- jsDate.strftime = function(d, formatString, syntax, locale) {
- var syn = 'perl';
- var loc = jsDate.regional.getLocale();
-
- // check if syntax and locale are available or reversed
- if (syntax && jsDate.formats.hasOwnProperty(syntax)) {
- syn = syntax;
- }
- else if (syntax && jsDate.regional.hasOwnProperty(syntax)) {
- loc = syntax;
- }
-
- if (locale && jsDate.formats.hasOwnProperty(locale)) {
- syn = locale;
- }
- else if (locale && jsDate.regional.hasOwnProperty(locale)) {
- loc = locale;
- }
-
- if (get_type(d) != "[object Object]" || d._type != "jsDate") {
- d = new jsDate(d);
- d.locale = loc;
- }
- if (!formatString) {
- formatString = d.formatString || jsDate.regional[loc]['formatString'];
- }
- // default the format string to year-month-day
- var source = formatString || '%Y-%m-%d',
- result = '',
- match;
- // replace each format code
- while (source.length > 0) {
- if (match = source.match(jsDate.formats[syn].codes.matcher)) {
- result += source.slice(0, match.index);
- result += (match[1] || '') + format(d, match[2], syn);
- source = source.slice(match.index + match[0].length);
- } else {
- result += source;
- source = '';
- }
- }
- return result;
- };
-
- /**
- * @namespace
- * Namespace to hold format codes and format shortcuts. "perl" and "php" format codes
- * and shortcuts are defined by default. Additional codes and shortcuts can be
- * added like:
- *
- * <pre class="code">
- * jsDate.formats["perl"] = {
- * "codes": {
- * matcher: /someregex/,
- * Y: "fullYear", // name of "get" method without the "get",
- * ..., // more codes
- * },
- * "shortcuts": {
- * F: '%Y-%m-%d',
- * ..., // more shortcuts
- * }
- * };
- * </pre>
- *
- * <p>Additionally, ISO and SQL shortcuts are defined and can be accesses via:
- * <code>jsDate.formats.ISO</code> and <code>jsDate.formats.SQL</code>
- */
-
- jsDate.formats = {
- ISO:'%Y-%m-%dT%H:%M:%S.%N%G',
- SQL:'%Y-%m-%d %H:%M:%S'
- };
-
- /**
- * Perl format codes and shortcuts for strftime.
- *
- * A hash (object) of codes where each code must be an array where the first member is
- * the name of a Date.prototype or jsDate.prototype function to call
- * and optionally a second member indicating the number to pass to addZeros()
- *
- * <p>The following format codes are defined:</p>
- *
- * <pre class="code">
- * 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)
- *
- * == 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 03:31:00 PM %I:%M:%S %p
- *
- * == Characters ==
- * %n \n Newline
- * %t \t Tab
- * %% % Percent Symbol
- * </pre>
- *
- * <p>Formatting shortcuts that will be translated into their longer version.
- * Be sure that format shortcuts do not refer to themselves: this will cause an infinite loop.</p>
- *
- * <p>Format codes and format shortcuts can be redefined after the jsDate
- * module is imported.</p>
- *
- * <p>Note that if you redefine the whole hash (object), you must supply a "matcher"
- * regex for the parser. The default matcher is:</p>
- *
- * <code>/()%(#?(%|[a-z]))/i</code>
- *
- * <p>which corresponds to the Perl syntax used by default.</p>
- *
- * <p>By customizing the matcher and format codes, nearly any strftime functionality is possible.</p>
- */
-
- jsDate.formats.perl = {
- codes: {
- //
- // 2-part regex matcher for format codes
- //
- // first match must be the character before the code (to account for escaping)
- // second match must be the format code character(s)
- //
- matcher: /()%(#?(%|[a-z]))/i,
- // year
- Y: 'FullYear',
- y: 'ShortYear.2',
- // month
- m: 'MonthNumber.2',
- '#m': 'MonthNumber',
- B: 'MonthName',
- b: 'AbbrMonthName',
- // day
- d: 'Date.2',
- '#d': 'Date',
- e: 'Date',
- A: 'DayName',
- a: 'AbbrDayName',
- w: 'Day',
- // hours
- H: 'Hours.2',
- '#H': 'Hours',
- I: 'Hours12.2',
- '#I': 'Hours12',
- p: 'AMPM',
- // minutes
- M: 'Minutes.2',
- '#M': 'Minutes',
- // seconds
- S: 'Seconds.2',
- '#S': 'Seconds',
- s: 'Unix',
- // milliseconds
- N: 'Milliseconds.3',
- '#N': 'Milliseconds',
- // timezone
- O: 'TimezoneOffset',
- Z: 'TimezoneName',
- G: 'GmtOffset'
- },
-
- shortcuts: {
- // date
- F: '%Y-%m-%d',
- // time
- T: '%H:%M:%S',
- X: '%H:%M:%S',
- // local format date
- x: '%m/%d/%y',
- D: '%m/%d/%y',
- // local format extended
- '#c': '%a %b %e %H:%M:%S %Y',
- // local format short
- v: '%e-%b-%Y',
- R: '%H:%M',
- r: '%I:%M:%S %p',
- // tab and newline
- t: '\t',
- n: '\n',
- '%': '%'
- }
- };
-
- /**
- * PHP format codes and shortcuts for strftime.
- *
- * A hash (object) of codes where each code must be an array where the first member is
- * the name of a Date.prototype or jsDate.prototype function to call
- * and optionally a second member indicating the number to pass to addZeros()
- *
- * <p>The following format codes are defined:</p>
- *
- * <pre class="code">
- * Code Result Description
- * === Days ===
- * %a Sun through Sat An abbreviated textual representation of the day
- * %A Sunday - Saturday A full textual representation of the day
- * %d 01 to 31 Two-digit day of the month (with leading zeros)
- * %e 1 to 31 Day of the month, with a space preceding single digits.
- * %j 001 to 366 Day of the year, 3 digits with leading zeros
- * %u 1 - 7 (Mon - Sun) ISO-8601 numeric representation of the day of the week
- * %w 0 - 6 (Sun - Sat) Numeric representation of the day of the week
- *
- * === Week ===
- * %U 13 Full Week number, starting with the first Sunday as the first week
- * %V 01 through 53 ISO-8601:1988 week number, starting with the first week of the year
- * with at least 4 weekdays, with Monday being the start of the week
- * %W 46 A numeric representation of the week of the year,
- * starting with the first Monday as the first week
- * === Month ===
- * %b Jan through Dec Abbreviated month name, based on the locale
- * %B January - December Full month name, based on the locale
- * %h Jan through Dec Abbreviated month name, based on the locale (an alias of %b)
- * %m 01 - 12 (Jan - Dec) Two digit representation of the month
- *
- * === Year ===
- * %C 19 Two digit century (year/100, truncated to an integer)
- * %y 09 for 2009 Two digit year
- * %Y 2038 Four digit year
- *
- * === Time ===
- * %H 00 through 23 Two digit representation of the hour in 24-hour format
- * %I 01 through 12 Two digit representation of the hour in 12-hour format
- * %l 1 through 12 Hour in 12-hour format, with a space preceeding single digits
- * %M 00 through 59 Two digit representation of the minute
- * %p AM/PM UPPER-CASE 'AM' or 'PM' based on the given time
- * %P am/pm lower-case 'am' or 'pm' based on the given time
- * %r 09:34:17 PM Same as %I:%M:%S %p
- * %R 00:35 Same as %H:%M
- * %S 00 through 59 Two digit representation of the second
- * %T 21:34:17 Same as %H:%M:%S
- * %X 03:59:16 Preferred time representation based on locale, without the date
- * %z -0500 or EST Either the time zone offset from UTC or the abbreviation
- * %Z -0500 or EST The time zone offset/abbreviation option NOT given by %z
- *
- * === Time and Date ===
- * %D 02/05/09 Same as %m/%d/%y
- * %F 2009-02-05 Same as %Y-%m-%d (commonly used in database datestamps)
- * %s 305815200 Unix Epoch Time timestamp (same as the time() function)
- * %x 02/05/09 Preferred date representation, without the time
- *
- * === Miscellaneous ===
- * %n --- A newline character (\n)
- * %t --- A Tab character (\t)
- * %% --- A literal percentage character (%)
- * </pre>
- */
-
- jsDate.formats.php = {
- codes: {
- //
- // 2-part regex matcher for format codes
- //
- // first match must be the character before the code (to account for escaping)
- // second match must be the format code character(s)
- //
- matcher: /()%((%|[a-z]))/i,
- // day
- a: 'AbbrDayName',
- A: 'DayName',
- d: 'Date.2',
- e: 'Date',
- j: 'DayOfYear.3',
- u: 'DayOfWeek',
- w: 'Day',
- // week
- U: 'FullWeekOfYear.2',
- V: 'IsoWeek.2',
- W: 'WeekOfYear.2',
- // month
- b: 'AbbrMonthName',
- B: 'MonthName',
- m: 'MonthNumber.2',
- h: 'AbbrMonthName',
- // year
- C: 'Century.2',
- y: 'ShortYear.2',
- Y: 'FullYear',
- // time
- H: 'Hours.2',
- I: 'Hours12.2',
- l: 'Hours12',
- p: 'AMPM',
- P: 'AmPm',
- M: 'Minutes.2',
- S: 'Seconds.2',
- s: 'Unix',
- O: 'TimezoneOffset',
- z: 'GmtOffset',
- Z: 'TimezoneAbbr'
- },
-
- shortcuts: {
- D: '%m/%d/%y',
- F: '%Y-%m-%d',
- T: '%H:%M:%S',
- X: '%H:%M:%S',
- x: '%m/%d/%y',
- R: '%H:%M',
- r: '%I:%M:%S %p',
- t: '\t',
- n: '\n',
- '%': '%'
- }
- };
- //
- // Conceptually, the logic implemented here is similar to Ken Snyder's Date Instance Methods.
- // I use his idea of a set of parsers which can be regular expressions or functions,
- // iterating through those, and then seeing if Date.parse() will create a date.
- // The parser expressions and functions are a little different and some bugs have been
- // worked out. Also, a lot of "pre-parsing" is done to fix implementation
- // variations of Date.parse() between browsers.
- //
- jsDate.createDate = function(date) {
- // if passing in multiple arguments, try Date constructor
- if (date == null) {
- return new Date();
- }
- // If the passed value is already a date object, return it
- if (date instanceof Date) {
- return date;
- }
- // if (typeof date == 'number') return new Date(date * 1000);
- // If the passed value is an integer, interpret it as a javascript timestamp
- if (typeof date == 'number') {
- return new Date(date);
- }
-
- // Before passing strings into Date.parse(), have to normalize them for certain conditions.
- // If strings are not formatted staccording to the EcmaScript spec, results from Date parse will be implementation dependent.
- //
- // For example:
- // * FF and Opera assume 2 digit dates are pre y2k, Chome assumes <50 is pre y2k, 50+ is 21st century.
- // * Chrome will correctly parse '1984-1-25' into localtime, FF and Opera will not parse.
- // * Both FF, Chrome and Opera will parse '1984/1/25' into localtime.
-
- // remove leading and trailing spaces
- var parsable = String(date).replace(/^\s*(.+)\s*$/g, '$1');
-
- // replace dahses (-) with slashes (/) in dates like n[nnn]/n[n]/n[nnn]
- parsable = parsable.replace(/^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,4})/, "$1/$2/$3");
-
- /////////
- // Need to check for '15-Dec-09' also.
- // FF will not parse, but Chrome will.
- // Chrome will set date to 2009 as well.
- /////////
-
- // first check for 'dd-mmm-yyyy' or 'dd/mmm/yyyy' like '15-Dec-2010'
- parsable = parsable.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{4})/i, "$1 $2 $3");
-
- // Now check for 'dd-mmm-yy' or 'dd/mmm/yy' and normalize years to default century.
- var match = parsable.match(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i);
- if (match && match.length > 3) {
- var m3 = parseFloat(match[3]);
- var ny = jsDate.config.defaultCentury + m3;
- ny = String(ny);
-
- // now replace 2 digit year with 4 digit year
- parsable = parsable.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i, match[1] +' '+ match[2] +' '+ ny);
-
- }
-
- // Check for '1/19/70 8:14PM'
- // where starts with mm/dd/yy or yy/mm/dd and have something after
- // Check if 1st postiion is greater than 31, assume it is year.
- // Assme all 2 digit years are 1900's.
- // Finally, change them into US style mm/dd/yyyy representations.
- match = parsable.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})[^0-9]/);
-
- function h1(parsable, match) {
- var m1 = parseFloat(match[1]);
- var m2 = parseFloat(match[2]);
- var m3 = parseFloat(match[3]);
- var cent = jsDate.config.defaultCentury;
- var ny, nd, nm, str;
-
- if (m1 > 31) { // first number is a year
- nd = m3;
- nm = m2;
- ny = cent + m1;
- }
-
- else { // last number is the year
- nd = m2;
- nm = m1;
- ny = cent + m3;
- }
-
- str = nm+'/'+nd+'/'+ny;
-
- // now replace 2 digit year with 4 digit year
- return parsable.replace(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})/, str);
-
- }
-
- if (match && match.length > 3) {
- parsable = h1(parsable, match);
- }
-
- // Now check for '1/19/70' with nothing after and do as above
- var match = parsable.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})$/);
-
- if (match && match.length > 3) {
- parsable = h1(parsable, match);
- }
-
-
- var i = 0;
- var length = jsDate.matchers.length;
- var pattern,
- ms,
- current = parsable,
- obj;
- while (i < length) {
- ms = Date.parse(current);
- if (!isNaN(ms)) {
- return new Date(ms);
- }
- pattern = jsDate.matchers[i];
- if (typeof pattern == 'function') {
- obj = pattern.call(jsDate, current);
- if (obj instanceof Date) {
- return obj;
- }
- } else {
- current = parsable.replace(pattern[0], pattern[1]);
- }
- i++;
- }
- return NaN;
- };
-
-
- /**
- * @static
- * Handy static utility function to return the number of days in a given month.
- * @param {Integer} year Year
- * @param {Integer} month Month (1-12)
- * @returns {Integer} Number of days in the month.
- */
- //
- // handy utility method Borrowed right from Ken Snyder's Date Instance Mehtods.
- //
- jsDate.daysInMonth = function(year, month) {
- if (month == 2) {
- return new Date(year, 1, 29).getDate() == 29 ? 29 : 28;
- }
- return [undefined,31,undefined,31,30,31,30,31,31,30,31,30,31][month];
- };
-
-
- //
- // An Array of regular expressions or functions that will attempt to match the date string.
- // Functions are called with scope of a jsDate instance.
- //
- jsDate.matchers = [
- // convert dd.mmm.yyyy to mm/dd/yyyy (world date to US date).
- [/(3[01]|[0-2]\d)\s*\.\s*(1[0-2]|0\d)\s*\.\s*([1-9]\d{3})/, '$2/$1/$3'],
- // convert yyyy-mm-dd to mm/dd/yyyy (ISO date to US date).
- [/([1-9]\d{3})\s*-\s*(1[0-2]|0\d)\s*-\s*(3[01]|[0-2]\d)/, '$2/$3/$1'],
- // Handle 12 hour or 24 hour time with milliseconds am/pm and optional date part.
- function(str) {
- var match = str.match(/^(?:(.+)\s+)?([012]?\d)(?:\s*\:\s*(\d\d))?(?:\s*\:\s*(\d\d(\.\d*)?))?\s*(am|pm)?\s*$/i);
- // opt. date hour opt. minute opt. second opt. msec opt. am or pm
- if (match) {
- if (match[1]) {
- var d = this.createDate(match[1]);
- if (isNaN(d)) {
- return;
- }
- } else {
- var d = new Date();
- d.setMilliseconds(0);
- }
- var hour = parseFloat(match[2]);
- if (match[6]) {
- hour = match[6].toLowerCase() == 'am' ? (hour == 12 ? 0 : hour) : (hour == 12 ? 12 : hour + 12);
- }
- d.setHours(hour, parseInt(match[3] || 0, 10), parseInt(match[4] || 0, 10), ((parseFloat(match[5] || 0)) || 0)*1000);
- return d;
- }
- else {
- return str;
- }
- },
- // Handle ISO timestamp with time zone.
- function(str) {
- var match = str.match(/^(?:(.+))[T|\s+]([012]\d)(?:\:(\d\d))(?:\:(\d\d))(?:\.\d+)([\+\-]\d\d\:\d\d)$/i);
- if (match) {
- if (match[1]) {
- var d = this.createDate(match[1]);
- if (isNaN(d)) {
- return;
- }
- } else {
- var d = new Date();
- d.setMilliseconds(0);
- }
- var hour = parseFloat(match[2]);
- d.setHours(hour, parseInt(match[3], 10), parseInt(match[4], 10), parseFloat(match[5])*1000);
- return d;
- }
- else {
- return str;
- }
- },
- // Try to match ambiguous strings like 12/8/22.
- // Use FF date assumption that 2 digit years are 20th century (i.e. 1900's).
- // This may be redundant with pre processing of date already performed.
- function(str) {
- var match = str.match(/^([0-3]?\d)\s*[-\/.\s]{1}\s*([a-zA-Z]{3,9})\s*[-\/.\s]{1}\s*([0-3]?\d)$/);
- if (match) {
- var d = new Date();
- var cent = jsDate.config.defaultCentury;
- var m1 = parseFloat(match[1]);
- var m3 = parseFloat(match[3]);
- var ny, nd, nm;
- if (m1 > 31) { // first number is a year
- nd = m3;
- ny = cent + m1;
- }
-
- else { // last number is the year
- nd = m1;
- ny = cent + m3;
- }
-
- var nm = inArray(match[2], jsDate.regional[jsDate.regional.getLocale()]["monthNamesShort"]);
-
- if (nm == -1) {
- nm = inArray(match[2], jsDate.regional[jsDate.regional.getLocale()]["monthNames"]);
- }
-
- d.setFullYear(ny, nm, nd);
- d.setHours(0,0,0,0);
- return d;
- }
-
- else {
- return str;
- }
- }
- ];
-
- //
- // I think John Reisig published this method on his blog, ejohn.
- //
- function inArray( elem, array ) {
- if ( array.indexOf ) {
- return array.indexOf( elem );
- }
-
- for ( var i = 0, length = array.length; i < length; i++ ) {
- if ( array[ i ] === elem ) {
- return i;
- }
- }
-
- return -1;
- }
-
- //
- // Thanks to Kangax, Christian Sciberras and Stack Overflow for this method.
- //
- function get_type(thing){
- if(thing===null) return "[object Null]"; // special case
- return Object.prototype.toString.call(thing);
- }
-
- $.jsDate = jsDate;
-
-
- /**
- * JavaScript printf/sprintf functions.
- *
- * This code has been adapted from the publicly available sprintf methods
- * by Ash Searle. His original header follows:
- *
- * This code is unrestricted: you are free to use it however you like.
- *
- * The functions should work as expected, performing left or right alignment,
- * truncating strings, outputting numbers with a required precision etc.
- *
- * For complex cases, these functions follow the Perl implementations of
- * (s)printf, allowing arguments to be passed out-of-order, and to set the
- * precision or length of the output based on arguments instead of fixed
- * numbers.
- *
- * See http://perldoc.perl.org/functions/sprintf.html for more information.
- *
- * Implemented:
- * - zero and space-padding
- * - right and left-alignment,
- * - base X prefix (binary, octal and hex)
- * - positive number prefix
- * - (minimum) width
- * - precision / truncation / maximum width
- * - out of order arguments
- *
- * Not implemented (yet):
- * - vector flag
- * - size (bytes, words, long-words etc.)
- *
- * Will not implement:
- * - %n or %p (no pass-by-reference in JavaScript)
- *
- * @version 2007.04.27
- * @author Ash Searle
- *
- * You can see the original work and comments on his blog:
- * http://hexmen.com/blog/2007/03/printf-sprintf/
- * http://hexmen.com/js/sprintf.js
- */
-
- /**
- * @Modifications 2009.05.26
- * @author Chris Leonello
- *
- * Added %p %P specifier
- * Acts like %g or %G but will not add more significant digits to the output than present in the input.
- * Example:
- * Format: '%.3p', Input: 0.012, Output: 0.012
- * Format: '%.3g', Input: 0.012, Output: 0.0120
- * Format: '%.4p', Input: 12.0, Output: 12.0
- * Format: '%.4g', Input: 12.0, Output: 12.00
- * Format: '%.4p', Input: 4.321e-5, Output: 4.321e-5
- * Format: '%.4g', Input: 4.321e-5, Output: 4.3210e-5
- *
- * Example:
- * >>> $.jqplot.sprintf('%.2f, %d', 23.3452, 43.23)
- * "23.35, 43"
- * >>> $.jqplot.sprintf("no value: %n, decimal with thousands separator: %'d", 23.3452, 433524)
- * "no value: , decimal with thousands separator: 433,524"
- */
- $.jqplot.sprintf = function() {
- function pad(str, len, chr, leftJustify) {
- var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr);
- return leftJustify ? str + padding : padding + str;
-
- }
-
- function thousand_separate(value) {
- var value_str = new String(value);
- for (var i=10; i>0; i--) {
- if (value_str == (value_str = value_str.replace(/^(\d+)(\d{3})/, "$1"+$.jqplot.sprintf.thousandsSeparator+"$2"))) break;
- }
- return value_str;
- }
-
- function justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace) {
- var diff = minWidth - value.length;
- if (diff > 0) {
- var spchar = ' ';
- if (htmlSpace) { spchar = '&nbsp;'; }
- if (leftJustify || !zeroPad) {
- value = pad(value, minWidth, spchar, leftJustify);
- } else {
- value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length);
- }
- }
- return value;
- }
-
- function formatBaseX(value, base, prefix, leftJustify, minWidth, precision, zeroPad, htmlSpace) {
- // Note: casts negative numbers to positive ones
- var number = value >>> 0;
- prefix = prefix && number && {'2': '0b', '8': '0', '16': '0x'}[base] || '';
- value = prefix + pad(number.toString(base), precision || 0, '0', false);
- return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace);
- }
-
- function formatString(value, leftJustify, minWidth, precision, zeroPad, htmlSpace) {
- if (precision != null) {
- value = value.slice(0, precision);
- }
- return justify(value, '', leftJustify, minWidth, zeroPad, htmlSpace);
- }
-
- var a = arguments, i = 0, format = a[i++];
-
- return format.replace($.jqplot.sprintf.regex, function(substring, valueIndex, flags, minWidth, _, precision, type) {
- if (substring == '%%') { return '%'; }
-
- // parse flags
- var leftJustify = false, positivePrefix = '', zeroPad = false, prefixBaseX = false, htmlSpace = false, thousandSeparation = false;
- for (var j = 0; flags && j < flags.length; j++) switch (flags.charAt(j)) {
- case ' ': positivePrefix = ' '; break;
- case '+': positivePrefix = '+'; break;
- case '-': leftJustify = true; break;
- case '0': zeroPad = true; break;
- case '#': prefixBaseX = true; break;
- case '&': htmlSpace = true; break;
- case '\'': thousandSeparation = true; break;
- }
-
- // parameters may be null, undefined, empty-string or real valued
- // we want to ignore null, undefined and empty-string values
-
- if (!minWidth) {
- minWidth = 0;
- }
- else if (minWidth == '*') {
- minWidth = +a[i++];
- }
- else if (minWidth.charAt(0) == '*') {
- minWidth = +a[minWidth.slice(1, -1)];
- }
- else {
- minWidth = +minWidth;
- }
-
- // Note: undocumented perl feature:
- if (minWidth < 0) {
- minWidth = -minWidth;
- leftJustify = true;
- }
-
- if (!isFinite(minWidth)) {
- throw new Error('$.jqplot.sprintf: (minimum-)width must be finite');
- }
-
- if (!precision) {
- precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : void(0);
- }
- else if (precision == '*') {
- precision = +a[i++];
- }
- else if (precision.charAt(0) == '*') {
- precision = +a[precision.slice(1, -1)];
- }
- else {
- precision = +precision;
- }
-
- // grab value using valueIndex if required?
- var value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++];
-
- switch (type) {
- case 's': {
- if (value == null) {
- return '';
- }
- return formatString(String(value), leftJustify, minWidth, precision, zeroPad, htmlSpace);
- }
- case 'c': return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad, htmlSpace);
- case 'b': return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad,htmlSpace);
- case 'o': return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace);
- case 'x': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace);
- case 'X': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace).toUpperCase();
- case 'u': return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace);
- case 'i': {
- var number = parseInt(+value, 10);
- if (isNaN(number)) {
- return '';
- }
- var prefix = number < 0 ? '-' : positivePrefix;
- var number_str = thousandSeparation ? thousand_separate(String(Math.abs(number))): String(Math.abs(number));
- value = prefix + pad(number_str, precision, '0', false);
- //value = prefix + pad(String(Math.abs(number)), precision, '0', false);
- return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace);
- }
- case 'd': {
- var number = Math.round(+value);
- if (isNaN(number)) {
- return '';
- }
- var prefix = number < 0 ? '-' : positivePrefix;
- var number_str = thousandSeparation ? thousand_separate(String(Math.abs(number))): String(Math.abs(number));
- value = prefix + pad(number_str, precision, '0', false);
- return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace);
- }
- case 'e':
- case 'E':
- case 'f':
- case 'F':
- case 'g':
- case 'G':
- {
- var number = +value;
- if (isNaN(number)) {
- return '';
- }
- var prefix = number < 0 ? '-' : positivePrefix;
- var method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())];
- var textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2];
- var number_str = Math.abs(number)[method](precision);
- number_str = thousandSeparation ? thousand_separate(number_str): number_str;
- value = prefix + number_str;
- var justified = justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace)[textTransform]();
-
- if ($.jqplot.sprintf.decimalMark !== '.' && $.jqplot.sprintf.decimalMark !== $.jqplot.sprintf.thousandsSeparator) {
- return justified.replace(/\./, $.jqplot.sprintf.decimalMark);
- } else {
- return justified;
- }
- }
- case 'p':
- case 'P':
- {
- // make sure number is a number
- var number = +value;
- if (isNaN(number)) {
- return '';
- }
- var prefix = number < 0 ? '-' : positivePrefix;
-
- var parts = String(Number(Math.abs(number)).toExponential()).split(/e|E/);
- var sd = (parts[0].indexOf('.') != -1) ? parts[0].length - 1 : parts[0].length;
- var zeros = (parts[1] < 0) ? -parts[1] - 1 : 0;
-
- if (Math.abs(number) < 1) {
- if (sd + zeros <= precision) {
- value = prefix + Math.abs(number).toPrecision(sd);
- }
- else {
- if (sd <= precision - 1) {
- value = prefix + Math.abs(number).toExponential(sd-1);
- }
- else {
- value = prefix + Math.abs(number).toExponential(precision-1);
- }
- }
- }
- else {
- var prec = (sd <= precision) ? sd : precision;
- value = prefix + Math.abs(number).toPrecision(prec);
- }
- var textTransform = ['toString', 'toUpperCase']['pP'.indexOf(type) % 2];
- return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace)[textTransform]();
- }
- case 'n': return '';
- default: return substring;
- }
- });
- };
-
- $.jqplot.sprintf.thousandsSeparator = ',';
- // Specifies the decimal mark for floating point values. By default a period '.'
- // is used. If you change this value to for example a comma be sure to also
- // change the thousands separator or else this won't work since a simple String
- // replace is used (replacing all periods with the mark specified here).
- $.jqplot.sprintf.decimalMark = '.';
-
- $.jqplot.sprintf.regex = /%%|%(\d+\$)?([-+#0&\' ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g;
-
- $.jqplot.getSignificantFigures = function(number) {
- var parts = String(Number(Math.abs(number)).toExponential()).split(/e|E/);
- // total significant digits
- var sd = (parts[0].indexOf('.') != -1) ? parts[0].length - 1 : parts[0].length;
- var zeros = (parts[1] < 0) ? -parts[1] - 1 : 0;
- // exponent
- var expn = parseInt(parts[1], 10);
- // digits to the left of the decimal place
- var dleft = (expn + 1 > 0) ? expn + 1 : 0;
- // digits to the right of the decimal place
- var dright = (sd <= dleft) ? 0 : sd - expn - 1;
- return {significantDigits: sd, digitsLeft: dleft, digitsRight: dright, zeros: zeros, exponent: expn} ;
- };
-
- $.jqplot.getPrecision = function(number) {
- return $.jqplot.getSignificantFigures(number).digitsRight;
- };
-
-})(jQuery);
-
-
- var backCompat = $.uiBackCompat !== false;
-
- $.jqplot.effects = {
- effect: {}
- };
-
- // prefix used for storing data on .data()
- var dataSpace = "jqplot.storage.";
-
- /******************************************************************************/
- /*********************************** EFFECTS **********************************/
- /******************************************************************************/
-
- $.extend( $.jqplot.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;
- },
-
- // 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 = $( "<div></div>" )
- .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;
- }
- });
-
- // 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" && !$.jqplot.effects.effect[ speed ] ) {
- // TODO: remove in 2.0 (#7115)
- if ( backCompat && $.jqplot.effects[ speed ] ) {
- return false;
- }
- return true;
- }
-
- return false;
- }
-
- $.fn.extend({
- jqplotEffect: function( effect, options, speed, callback ) {
- var args = _normalizeArguments.apply( this, arguments ),
- mode = args.mode,
- queue = args.queue,
- effectMethod = $.jqplot.effects.effect[ args.effect ],
-
- // DEPRECATED: remove in 2.0 (#7115)
- oldEffectMethod = !effectMethod && backCompat && $.jqplot.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
- });
- }
- }
- });
-
-
-
-
- var rvertical = /up|down|vertical/,
- rpositivemotion = /up|left|vertical|horizontal/;
-
- $.jqplot.effects.effect.blind = function( o, done ) {
- // Create element
- var el = $( this ),
- props = [ "position", "top", "bottom", "left", "right", "height", "width" ],
- mode = $.jqplot.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" ) ) {
- $.jqplot.effects.save( el.parent(), props );
- } else {
- $.jqplot.effects.save( el, props );
- }
- el.show();
- top = parseInt(el.css('top'), 10);
- wrapper = $.jqplot.effects.createWrapper( el ).css({
- overflow: "hidden"
- });
-
- distance = vertical ? wrapper[ ref ]() + top : wrapper[ ref ]();
-
- animation[ ref ] = show ? String(distance) : '0';
- if ( !motion ) {
- el
- .css( vertical ? "bottom" : "right", 0 )
- .css( vertical ? "top" : "left", "" )
- .css({ position: "absolute" });
- animation[ ref2 ] = show ? '0' : String(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();
- }
- $.jqplot.effects.restore( el, props );
- $.jqplot.effects.removeWrapper( el );
- done();
- }
- });
-
- };
-
-
diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.css b/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.css
deleted file mode 100644
index de15fff5..00000000
--- a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.css
+++ /dev/null
@@ -1 +0,0 @@
-.jqplot-target{position:relative;color:#666;font-family:"Trebuchet MS",Arial,Helvetica,sans-serif;font-size:1em;}.jqplot-axis{font-size:.75em;}.jqplot-xaxis{margin-top:10px;}.jqplot-x2axis{margin-bottom:10px;}.jqplot-yaxis{margin-right:10px;}.jqplot-y2axis,.jqplot-y3axis,.jqplot-y4axis,.jqplot-y5axis,.jqplot-y6axis,.jqplot-y7axis,.jqplot-y8axis,.jqplot-y9axis,.jqplot-yMidAxis{margin-left:10px;margin-right:10px;}.jqplot-axis-tick,.jqplot-xaxis-tick,.jqplot-yaxis-tick,.jqplot-x2axis-tick,.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick,.jqplot-yMidAxis-tick{position:absolute;white-space:pre;}.jqplot-xaxis-tick{top:0;left:15px;vertical-align:top;}.jqplot-x2axis-tick{bottom:0;left:15px;vertical-align:bottom;}.jqplot-yaxis-tick{right:0;top:15px;text-align:right;}.jqplot-yaxis-tick.jqplot-breakTick{right:-20px;margin-right:0;padding:1px 5px 1px 5px;z-index:2;font-size:1.5em;}.jqplot-y2axis-tick,.jqplot-y3axis-tick,.jqplot-y4axis-tick,.jqplot-y5axis-tick,.jqplot-y6axis-tick,.jqplot-y7axis-tick,.jqplot-y8axis-tick,.jqplot-y9axis-tick{left:0;top:15px;text-align:left;}.jqplot-yMidAxis-tick{text-align:center;white-space:nowrap;}.jqplot-xaxis-label{margin-top:10px;font-size:11pt;position:absolute;}.jqplot-x2axis-label{margin-bottom:10px;font-size:11pt;position:absolute;}.jqplot-yaxis-label{margin-right:10px;font-size:11pt;position:absolute;}.jqplot-yMidAxis-label{font-size:11pt;position:absolute;}.jqplot-y2axis-label,.jqplot-y3axis-label,.jqplot-y4axis-label,.jqplot-y5axis-label,.jqplot-y6axis-label,.jqplot-y7axis-label,.jqplot-y8axis-label,.jqplot-y9axis-label{font-size:11pt;margin-left:10px;position:absolute;}.jqplot-meterGauge-tick{font-size:.75em;color:#999;}.jqplot-meterGauge-label{font-size:1em;color:#999;}table.jqplot-table-legend{margin-top:12px;margin-bottom:12px;margin-left:12px;margin-right:12px;}table.jqplot-table-legend,table.jqplot-cursor-legend{background-color:rgba(255,255,255,0.6);border:1px solid #ccc;position:absolute;font-size:.75em;}td.jqplot-table-legend{vertical-align:middle;}td.jqplot-seriesToggle:hover,td.jqplot-seriesToggle:active{cursor:pointer;}.jqplot-table-legend .jqplot-series-hidden{text-decoration:line-through;}div.jqplot-table-legend-swatch-outline{border:1px solid #ccc;padding:1px;}div.jqplot-table-legend-swatch{width:0;height:0;border-top-width:5px;border-bottom-width:5px;border-left-width:6px;border-right-width:6px;border-top-style:solid;border-bottom-style:solid;border-left-style:solid;border-right-style:solid;}.jqplot-title{top:0;left:0;padding-bottom:.5em;font-size:1.2em;}table.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em;}.jqplot-cursor-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,0.5);padding:1px;}.jqplot-highlighter-tooltip,.jqplot-canvasOverlay-tooltip{border:1px solid #ccc;font-size:.75em;white-space:nowrap;background:rgba(208,208,208,0.5);padding:1px;}.jqplot-point-label{font-size:.75em;z-index:2;}td.jqplot-cursor-legend-swatch{vertical-align:middle;text-align:center;}div.jqplot-cursor-legend-swatch{width:1.2em;height:.7em;}.jqplot-error{text-align:center;}.jqplot-error-message{position:relative;top:46%;display:inline-block;}div.jqplot-bubble-label{font-size:.8em;padding-left:2px;padding-right:2px;color:rgb(20%,20%,20%);}div.jqplot-bubble-label.jqplot-bubble-label-highlight{background:rgba(90%,90%,90%,0.7);}div.jqplot-noData-container{text-align:center;background-color:rgba(96%,96%,96%,0.3);} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.js b/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.js
deleted file mode 100644
index 1def2792..00000000
--- a/wqflask/wqflask/static/packages/jqplot/jquery.jqplot.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(H){var r;H.fn.emptyForce=function(){for(var ab=0,ac;(ac=H(this)[ab])!=null;ab++){if(ac.nodeType===1){H.cleanData(ac.getElementsByTagName("*"))}if(H.jqplot.use_excanvas){ac.outerHTML=""}else{while(ac.firstChild){ac.removeChild(ac.firstChild)}}ac=null}return H(this)};H.fn.removeChildForce=function(ab){while(ab.firstChild){this.removeChildForce(ab.firstChild);ab.removeChild(ab.firstChild)}};H.fn.jqplot=function(){var ab=[];var ad=[];for(var ae=0,ac=arguments.length;ae<ac;ae++){if(H.isArray(arguments[ae])){ab.push(arguments[ae])}else{if(H.isPlainObject(arguments[ae])){ad.push(arguments[ae])}}}return this.each(function(ah){var am,al,ak=H(this),ag=ab.length,af=ad.length,aj,ai;if(ah<ag){aj=ab[ah]}else{aj=ag?ab[ag-1]:null}if(ah<af){ai=ad[ah]}else{ai=af?ad[af-1]:null}am=ak.attr("id");if(am===r){am="jqplot_target_"+H.jqplot.targetCounter++;ak.attr("id",am)}al=H.jqplot(am,aj,ai);ak.data("jqplot",al)})};H.jqplot=function(ah,ae,ac){var ad=null,ab=null;if(arguments.length===3){ad=ae;ab=ac}else{if(arguments.length===2){if(H.isArray(ae)){ad=ae}else{if(H.isPlainObject(ae)){ab=ae}}}}if(ad===null&&ab!==null&&ab.data){ad=ab.data}var ag=new N();H("#"+ah).removeClass("jqplot-error");if(H.jqplot.config.catchErrors){try{ag.init(ah,ad,ab);ag.draw();ag.themeEngine.init.call(ag);return ag}catch(af){var ai=H.jqplot.config.errorMessage||af.message;H("#"+ah).append('<div class="jqplot-error-message">'+ai+"</div>");H("#"+ah).addClass("jqplot-error");document.getElementById(ah).style.background=H.jqplot.config.errorBackground;document.getElementById(ah).style.border=H.jqplot.config.errorBorder;document.getElementById(ah).style.fontFamily=H.jqplot.config.errorFontFamily;document.getElementById(ah).style.fontSize=H.jqplot.config.errorFontSize;document.getElementById(ah).style.fontStyle=H.jqplot.config.errorFontStyle;document.getElementById(ah).style.fontWeight=H.jqplot.config.errorFontWeight}}else{ag.init(ah,ad,ab);ag.draw();ag.themeEngine.init.call(ag);return ag}};H.jqplot.version="1.0.4";H.jqplot.revision="1121";H.jqplot.targetCounter=1;H.jqplot.CanvasManager=function(){if(typeof H.jqplot.CanvasManager.canvases=="undefined"){H.jqplot.CanvasManager.canvases=[];H.jqplot.CanvasManager.free=[]}var ab=[];this.getCanvas=function(){var ae;var ad=true;if(!H.jqplot.use_excanvas){for(var af=0,ac=H.jqplot.CanvasManager.canvases.length;af<ac;af++){if(H.jqplot.CanvasManager.free[af]===true){ad=false;ae=H.jqplot.CanvasManager.canvases[af];H.jqplot.CanvasManager.free[af]=false;ab.push(af);break}}}if(ad){ae=document.createElement("canvas");ab.push(H.jqplot.CanvasManager.canvases.length);H.jqplot.CanvasManager.canvases.push(ae);H.jqplot.CanvasManager.free.push(false)}return ae};this.initCanvas=function(ac){if(H.jqplot.use_excanvas){return window.G_vmlCanvasManager.initElement(ac)}return ac};this.freeAllCanvases=function(){for(var ad=0,ac=ab.length;ad<ac;ad++){this.freeCanvas(ab[ad])}ab=[]};this.freeCanvas=function(ac){if(H.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==r){window.G_vmlCanvasManager.uninitElement(H.jqplot.CanvasManager.canvases[ac]);H.jqplot.CanvasManager.canvases[ac]=null}else{var ad=H.jqplot.CanvasManager.canvases[ac];ad.getContext("2d").clearRect(0,0,ad.width,ad.height);H(ad).unbind().removeAttr("class").removeAttr("style");H(ad).css({left:"",top:"",position:""});ad.width=0;ad.height=0;H.jqplot.CanvasManager.free[ac]=true}}};H.jqplot.log=function(){if(window.console){window.console.log.apply(window.console,arguments)}};H.jqplot.config={addDomReference:false,enablePlugins:false,defaultHeight:300,defaultWidth:400,UTCAdjust:false,timezoneOffset:new Date(new Date().getTimezoneOffset()*60000),errorMessage:"",errorBackground:"",errorBorder:"",errorFontFamily:"",errorFontSize:"",errorFontStyle:"",errorFontWeight:"",catchErrors:false,defaultTickFormatString:"%.1f",defaultColors:["#4bb2c5","#EAA228","#c5b47f","#579575","#839557","#958c12","#953579","#4b5de4","#d8b83f","#ff5800","#0085cc","#c747a3","#cddf54","#FBD178","#26B4E3","#bd70c7"],defaultNegativeColors:["#498991","#C08840","#9F9274","#546D61","#646C4A","#6F6621","#6E3F5F","#4F64B0","#A89050","#C45923","#187399","#945381","#959E5C","#C7AF7B","#478396","#907294"],dashLength:4,gapLength:4,dotGapLength:2.5,srcLocation:"jqplot/src/",pluginLocation:"jqplot/src/plugins/"};H.jqplot.arrayMax=function(ab){return Math.max.apply(Math,ab)};H.jqplot.arrayMin=function(ab){return Math.min.apply(Math,ab)};H.jqplot.enablePlugins=H.jqplot.config.enablePlugins;H.jqplot.support_canvas=function(){if(typeof H.jqplot.support_canvas.result=="undefined"){H.jqplot.support_canvas.result=!!document.createElement("canvas").getContext}return H.jqplot.support_canvas.result};H.jqplot.support_canvas_text=function(){if(typeof H.jqplot.support_canvas_text.result=="undefined"){if(window.G_vmlCanvasManager!==r&&window.G_vmlCanvasManager._version>887){H.jqplot.support_canvas_text.result=true}else{H.jqplot.support_canvas_text.result=!!(document.createElement("canvas").getContext&&typeof document.createElement("canvas").getContext("2d").fillText=="function")}}return H.jqplot.support_canvas_text.result};H.jqplot.use_excanvas=(H.browser.msie&&!H.jqplot.support_canvas())?true:false;H.jqplot.preInitHooks=[];H.jqplot.postInitHooks=[];H.jqplot.preParseOptionsHooks=[];H.jqplot.postParseOptionsHooks=[];H.jqplot.preDrawHooks=[];H.jqplot.postDrawHooks=[];H.jqplot.preDrawSeriesHooks=[];H.jqplot.postDrawSeriesHooks=[];H.jqplot.preDrawLegendHooks=[];H.jqplot.addLegendRowHooks=[];H.jqplot.preSeriesInitHooks=[];H.jqplot.postSeriesInitHooks=[];H.jqplot.preParseSeriesOptionsHooks=[];H.jqplot.postParseSeriesOptionsHooks=[];H.jqplot.eventListenerHooks=[];H.jqplot.preDrawSeriesShadowHooks=[];H.jqplot.postDrawSeriesShadowHooks=[];H.jqplot.ElemContainer=function(){this._elem;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null}};H.jqplot.ElemContainer.prototype.createElement=function(ae,ag,ac,ad,ah){this._offsets=ag;var ab=ac||"jqplot";var af=document.createElement(ae);this._elem=H(af);this._elem.addClass(ab);this._elem.css(ad);this._elem.attr(ah);af=null;return this._elem};H.jqplot.ElemContainer.prototype.getWidth=function(){if(this._elem){return this._elem.outerWidth(true)}else{return null}};H.jqplot.ElemContainer.prototype.getHeight=function(){if(this._elem){return this._elem.outerHeight(true)}else{return null}};H.jqplot.ElemContainer.prototype.getPosition=function(){if(this._elem){return this._elem.position()}else{return{top:null,left:null,bottom:null,right:null}}};H.jqplot.ElemContainer.prototype.getTop=function(){return this.getPosition().top};H.jqplot.ElemContainer.prototype.getLeft=function(){return this.getPosition().left};H.jqplot.ElemContainer.prototype.getBottom=function(){return this._elem.css("bottom")};H.jqplot.ElemContainer.prototype.getRight=function(){return this._elem.css("right")};function s(ab){H.jqplot.ElemContainer.call(this);this.name=ab;this._series=[];this.show=false;this.tickRenderer=H.jqplot.AxisTickRenderer;this.tickOptions={};this.labelRenderer=H.jqplot.AxisLabelRenderer;this.labelOptions={};this.label=null;this.showLabel=true;this.min=null;this.max=null;this.autoscale=false;this.pad=1.2;this.padMax=null;this.padMin=null;this.ticks=[];this.numberTicks;this.tickInterval;this.renderer=H.jqplot.LinearAxisRenderer;this.rendererOptions={};this.showTicks=true;this.showTickMarks=true;this.showMinorTicks=true;this.drawMajorGridlines=true;this.drawMinorGridlines=false;this.drawMajorTickMarks=true;this.drawMinorTickMarks=true;this.useSeriesColor=false;this.borderWidth=null;this.borderColor=null;this.scaleToHiddenSeries=false;this._dataBounds={min:null,max:null};this._intervalStats=[];this._offsets={min:null,max:null};this._ticks=[];this._label=null;this.syncTicks=null;this.tickSpacing=75;this._min=null;this._max=null;this._tickInterval=null;this._numberTicks=null;this.__ticks=null;this._options={}}s.prototype=new H.jqplot.ElemContainer();s.prototype.constructor=s;s.prototype.init=function(){if(H.isFunction(this.renderer)){this.renderer=new this.renderer()}this.tickOptions.axis=this.name;if(this.tickOptions.showMark==null){this.tickOptions.showMark=this.showTicks}if(this.tickOptions.showMark==null){this.tickOptions.showMark=this.showTickMarks}if(this.tickOptions.showLabel==null){this.tickOptions.showLabel=this.showTicks}if(this.label==null||this.label==""){this.showLabel=false}else{this.labelOptions.label=this.label}if(this.showLabel==false){this.labelOptions.show=false}if(this.pad==0){this.pad=1}if(this.padMax==0){this.padMax=1}if(this.padMin==0){this.padMin=1}if(this.padMax==null){this.padMax=(this.pad-1)/2+1}if(this.padMin==null){this.padMin=(this.pad-1)/2+1}this.pad=this.padMax+this.padMin-1;if(this.min!=null||this.max!=null){this.autoscale=false}if(this.syncTicks==null&&this.name.indexOf("y")>-1){this.syncTicks=true}else{if(this.syncTicks==null){this.syncTicks=false}}this.renderer.init.call(this,this.rendererOptions)};s.prototype.draw=function(ab,ac){if(this.__ticks){this.__ticks=null}return this.renderer.draw.call(this,ab,ac)};s.prototype.set=function(){this.renderer.set.call(this)};s.prototype.pack=function(ac,ab){if(this.show){this.renderer.pack.call(this,ac,ab)}if(this._min==null){this._min=this.min;this._max=this.max;this._tickInterval=this.tickInterval;this._numberTicks=this.numberTicks;this.__ticks=this._ticks}};s.prototype.reset=function(){this.renderer.reset.call(this)};s.prototype.resetScale=function(ab){H.extend(true,this,{min:null,max:null,numberTicks:null,tickInterval:null,_ticks:[],ticks:[]},ab);this.resetDataBounds()};s.prototype.resetDataBounds=function(){var ai=this._dataBounds;ai.min=null;ai.max=null;var ac,aj,ag;var ad=(this.show)?true:false;for(var af=0;af<this._series.length;af++){aj=this._series[af];if(aj.show||this.scaleToHiddenSeries){ag=aj._plotData;if(aj._type==="line"&&aj.renderer.bands.show&&this.name.charAt(0)!=="x"){ag=[[0,aj.renderer.bands._min],[1,aj.renderer.bands._max]]}var ab=1,ah=1;if(aj._type!=null&&aj._type=="ohlc"){ab=3;ah=2}for(var ae=0,ac=ag.length;ae<ac;ae++){if(this.name=="xaxis"||this.name=="x2axis"){if((ag[ae][0]!=null&&ag[ae][0]<ai.min)||ai.min==null){ai.min=ag[ae][0]}if((ag[ae][0]!=null&&ag[ae][0]>ai.max)||ai.max==null){ai.max=ag[ae][0]}}else{if((ag[ae][ab]!=null&&ag[ae][ab]<ai.min)||ai.min==null){ai.min=ag[ae][ab]}if((ag[ae][ah]!=null&&ag[ae][ah]>ai.max)||ai.max==null){ai.max=ag[ae][ah]}}}if(ad&&aj.renderer.constructor!==H.jqplot.BarRenderer){ad=false}else{if(ad&&this._options.hasOwnProperty("forceTickAt0")&&this._options.forceTickAt0==false){ad=false}else{if(ad&&aj.renderer.constructor===H.jqplot.BarRenderer){if(aj.barDirection=="vertical"&&this.name!="xaxis"&&this.name!="x2axis"){if(this._options.pad!=null||this._options.padMin!=null){ad=false}}else{if(aj.barDirection=="horizontal"&&(this.name=="xaxis"||this.name=="x2axis")){if(this._options.pad!=null||this._options.padMin!=null){ad=false}}}}}}}}if(ad&&this.renderer.constructor===H.jqplot.LinearAxisRenderer&&ai.min>=0){this.padMin=1;this.forceTickAt0=true}};function n(ab){H.jqplot.ElemContainer.call(this);this.show=false;this.location="ne";this.labels=[];this.showLabels=true;this.showSwatches=true;this.placement="insideGrid";this.xoffset=0;this.yoffset=0;this.border;this.background;this.textColor;this.fontFamily;this.fontSize;this.rowSpacing="0.5em";this.renderer=H.jqplot.TableLegendRenderer;this.rendererOptions={};this.preDraw=false;this.marginTop=null;this.marginRight=null;this.marginBottom=null;this.marginLeft=null;this.escapeHtml=false;this._series=[];H.extend(true,this,ab)}n.prototype=new H.jqplot.ElemContainer();n.prototype.constructor=n;n.prototype.setOptions=function(ab){H.extend(true,this,ab);if(this.placement=="inside"){this.placement="insideGrid"}if(this.xoffset>0){if(this.placement=="insideGrid"){switch(this.location){case"nw":case"w":case"sw":if(this.marginLeft==null){this.marginLeft=this.xoffset+"px"}this.marginRight="0px";break;case"ne":case"e":case"se":default:if(this.marginRight==null){this.marginRight=this.xoffset+"px"}this.marginLeft="0px";break}}else{if(this.placement=="outside"){switch(this.location){case"nw":case"w":case"sw":if(this.marginRight==null){this.marginRight=this.xoffset+"px"}this.marginLeft="0px";break;case"ne":case"e":case"se":default:if(this.marginLeft==null){this.marginLeft=this.xoffset+"px"}this.marginRight="0px";break}}}this.xoffset=0}if(this.yoffset>0){if(this.placement=="outside"){switch(this.location){case"sw":case"s":case"se":if(this.marginTop==null){this.marginTop=this.yoffset+"px"}this.marginBottom="0px";break;case"ne":case"n":case"nw":default:if(this.marginBottom==null){this.marginBottom=this.yoffset+"px"}this.marginTop="0px";break}}else{if(this.placement=="insideGrid"){switch(this.location){case"sw":case"s":case"se":if(this.marginBottom==null){this.marginBottom=this.yoffset+"px"}this.marginTop="0px";break;case"ne":case"n":case"nw":default:if(this.marginTop==null){this.marginTop=this.yoffset+"px"}this.marginBottom="0px";break}}}this.yoffset=0}};n.prototype.init=function(){if(H.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions)};n.prototype.draw=function(ac,ad){for(var ab=0;ab<H.jqplot.preDrawLegendHooks.length;ab++){H.jqplot.preDrawLegendHooks[ab].call(this,ac)}return this.renderer.draw.call(this,ac,ad)};n.prototype.pack=function(ab){this.renderer.pack.call(this,ab)};function u(ab){H.jqplot.ElemContainer.call(this);this.text=ab;this.show=true;this.fontFamily;this.fontSize;this.textAlign;this.textColor;this.renderer=H.jqplot.DivTitleRenderer;this.rendererOptions={};this.escapeHtml=false}u.prototype=new H.jqplot.ElemContainer();u.prototype.constructor=u;u.prototype.init=function(){if(H.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions)};u.prototype.draw=function(ab){return this.renderer.draw.call(this,ab)};u.prototype.pack=function(){this.renderer.pack.call(this)};function O(ab){ab=ab||{};H.jqplot.ElemContainer.call(this);this.show=true;this.xaxis="xaxis";this._xaxis;this.yaxis="yaxis";this._yaxis;this.gridBorderWidth=2;this.renderer=H.jqplot.LineRenderer;this.rendererOptions={};this.data=[];this.gridData=[];this.label="";this.showLabel=true;this.color;this.negativeColor;this.lineWidth=2.5;this.lineJoin="round";this.lineCap="round";this.linePattern="solid";this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.25;this.shadowDepth=3;this.shadowAlpha="0.1";this.breakOnNull=false;this.markerRenderer=H.jqplot.MarkerRenderer;this.markerOptions={};this.showLine=true;this.showMarker=true;this.index;this.fill=false;this.fillColor;this.fillAlpha;this.fillAndStroke=false;this.disableStack=false;this._stack=false;this.neighborThreshold=4;this.fillToZero=false;this.fillToValue=0;this.fillAxis="y";this.useNegativeColors=true;this._stackData=[];this._plotData=[];this._plotValues={x:[],y:[]};this._intervals={x:{},y:{}};this._prevPlotData=[];this._prevGridData=[];this._stackAxis="y";this._primaryAxis="_xaxis";this.canvas=new H.jqplot.GenericCanvas();this.shadowCanvas=new H.jqplot.GenericCanvas();this.plugins={};this._sumy=0;this._sumx=0;this._type=""}O.prototype=new H.jqplot.ElemContainer();O.prototype.constructor=O;O.prototype.init=function(ae,ai,ag){this.index=ae;this.gridBorderWidth=ai;var ah=this.data;var ad=[],af,ab;for(af=0,ab=ah.length;af<ab;af++){if(!this.breakOnNull){if(ah[af]==null||ah[af][0]==null||ah[af][1]==null){continue}else{ad.push(ah[af])}}else{ad.push(ah[af])}}this.data=ad;if(!this.color){this.color=ag.colorGenerator.get(this.index)}if(!this.negativeColor){this.negativeColor=ag.negativeColorGenerator.get(this.index)}if(!this.fillColor){this.fillColor=this.color}if(this.fillAlpha){var ac=H.jqplot.normalize2rgb(this.fillColor);var ac=H.jqplot.getColorComponents(ac);this.fillColor="rgba("+ac[0]+","+ac[1]+","+ac[2]+","+this.fillAlpha+")"}if(H.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions,ag);this.markerRenderer=new this.markerRenderer();if(!this.markerOptions.color){this.markerOptions.color=this.color}if(this.markerOptions.show==null){this.markerOptions.show=this.showMarker}this.showMarker=this.markerOptions.show;this.markerRenderer.init(this.markerOptions)};O.prototype.draw=function(ah,ae,ag){var ac=(ae==r)?{}:ae;ah=(ah==r)?this.canvas._ctx:ah;var ab,af,ad;for(ab=0;ab<H.jqplot.preDrawSeriesHooks.length;ab++){H.jqplot.preDrawSeriesHooks[ab].call(this,ah,ac)}if(this.show){this.renderer.setGridData.call(this,ag);if(!ac.preventJqPlotSeriesDrawTrigger){H(ah.canvas).trigger("jqplotSeriesDraw",[this.data,this.gridData])}af=[];if(ac.data){af=ac.data}else{if(!this._stack){af=this.data}else{af=this._plotData}}ad=ac.gridData||this.renderer.makeGridData.call(this,af,ag);if(this._type==="line"&&this.renderer.smooth&&this.renderer._smoothedData.length){ad=this.renderer._smoothedData}this.renderer.draw.call(this,ah,ad,ac,ag)}for(ab=0;ab<H.jqplot.postDrawSeriesHooks.length;ab++){H.jqplot.postDrawSeriesHooks[ab].call(this,ah,ac,ag)}ah=ae=ag=ab=af=ad=null};O.prototype.drawShadow=function(ah,ae,ag){var ac=(ae==r)?{}:ae;ah=(ah==r)?this.shadowCanvas._ctx:ah;var ab,af,ad;for(ab=0;ab<H.jqplot.preDrawSeriesShadowHooks.length;ab++){H.jqplot.preDrawSeriesShadowHooks[ab].call(this,ah,ac)}if(this.shadow){this.renderer.setGridData.call(this,ag);af=[];if(ac.data){af=ac.data}else{if(!this._stack){af=this.data}else{af=this._plotData}}ad=ac.gridData||this.renderer.makeGridData.call(this,af,ag);this.renderer.drawShadow.call(this,ah,ad,ac,ag)}for(ab=0;ab<H.jqplot.postDrawSeriesShadowHooks.length;ab++){H.jqplot.postDrawSeriesShadowHooks[ab].call(this,ah,ac)}ah=ae=ag=ab=af=ad=null};O.prototype.toggleDisplay=function(ac,ae){var ab,ad;if(ac.data.series){ab=ac.data.series}else{ab=this}if(ac.data.speed){ad=ac.data.speed}if(ad){if(ab.canvas._elem.is(":hidden")||!ab.show){ab.show=true;ab.canvas._elem.removeClass("jqplot-series-hidden");if(ab.shadowCanvas._elem){ab.shadowCanvas._elem.fadeIn(ad)}ab.canvas._elem.fadeIn(ad,ae);ab.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+ab.index).fadeIn(ad)}else{ab.show=false;ab.canvas._elem.addClass("jqplot-series-hidden");if(ab.shadowCanvas._elem){ab.shadowCanvas._elem.fadeOut(ad)}ab.canvas._elem.fadeOut(ad,ae);ab.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+ab.index).fadeOut(ad)}}else{if(ab.canvas._elem.is(":hidden")||!ab.show){ab.show=true;ab.canvas._elem.removeClass("jqplot-series-hidden");if(ab.shadowCanvas._elem){ab.shadowCanvas._elem.show()}ab.canvas._elem.show(0,ae);ab.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+ab.index).show()}else{ab.show=false;ab.canvas._elem.addClass("jqplot-series-hidden");if(ab.shadowCanvas._elem){ab.shadowCanvas._elem.hide()}ab.canvas._elem.hide(0,ae);ab.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+ab.index).hide()}}};function I(){H.jqplot.ElemContainer.call(this);this.drawGridlines=true;this.gridLineColor="#cccccc";this.gridLineWidth=1;this.background="#fffdf6";this.borderColor="#999999";this.borderWidth=2;this.drawBorder=true;this.shadow=true;this.shadowAngle=45;this.shadowOffset=1.5;this.shadowWidth=3;this.shadowDepth=3;this.shadowColor=null;this.shadowAlpha="0.07";this._left;this._top;this._right;this._bottom;this._width;this._height;this._axes=[];this.renderer=H.jqplot.CanvasGridRenderer;this.rendererOptions={};this._offsets={top:null,bottom:null,left:null,right:null}}I.prototype=new H.jqplot.ElemContainer();I.prototype.constructor=I;I.prototype.init=function(){if(H.isFunction(this.renderer)){this.renderer=new this.renderer()}this.renderer.init.call(this,this.rendererOptions)};I.prototype.createElement=function(ab,ac){this._offsets=ab;return this.renderer.createElement.call(this,ac)};I.prototype.draw=function(){this.renderer.draw.call(this)};H.jqplot.GenericCanvas=function(){H.jqplot.ElemContainer.call(this);this._ctx};H.jqplot.GenericCanvas.prototype=new H.jqplot.ElemContainer();H.jqplot.GenericCanvas.prototype.constructor=H.jqplot.GenericCanvas;H.jqplot.GenericCanvas.prototype.createElement=function(af,ad,ac,ag){this._offsets=af;var ab="jqplot";if(ad!=r){ab=ad}var ae;ae=ag.canvasManager.getCanvas();if(ac!=null){this._plotDimensions=ac}ae.width=this._plotDimensions.width-this._offsets.left-this._offsets.right;ae.height=this._plotDimensions.height-this._offsets.top-this._offsets.bottom;this._elem=H(ae);this._elem.css({position:"absolute",left:this._offsets.left,top:this._offsets.top});this._elem.addClass(ab);ae=ag.canvasManager.initCanvas(ae);ae=null;return this._elem};H.jqplot.GenericCanvas.prototype.setContext=function(){this._ctx=this._elem.get(0).getContext("2d");return this._ctx};H.jqplot.GenericCanvas.prototype.resetCanvas=function(){if(this._elem){if(H.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==r){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce()}this._ctx=null};H.jqplot.HooksManager=function(){this.hooks=[];this.args=[]};H.jqplot.HooksManager.prototype.addOnce=function(ae,ac){ac=ac||[];var af=false;for(var ad=0,ab=this.hooks.length;ad<ab;ad++){if(this.hooks[ad]==ae){af=true}}if(!af){this.hooks.push(ae);this.args.push(ac)}};H.jqplot.HooksManager.prototype.add=function(ac,ab){ab=ab||[];this.hooks.push(ac);this.args.push(ab)};H.jqplot.EventListenerManager=function(){this.hooks=[]};H.jqplot.EventListenerManager.prototype.addOnce=function(af,ae){var ag=false,ad,ac;for(var ac=0,ab=this.hooks.length;ac<ab;ac++){ad=this.hooks[ac];if(ad[0]==af&&ad[1]==ae){ag=true}}if(!ag){this.hooks.push([af,ae])}};H.jqplot.EventListenerManager.prototype.add=function(ac,ab){this.hooks.push([ac,ab])};var Q=["yMidAxis","xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];function N(){this.animate=false;this.animateReplot=false;this.axes={xaxis:new s("xaxis"),yaxis:new s("yaxis"),x2axis:new s("x2axis"),y2axis:new s("y2axis"),y3axis:new s("y3axis"),y4axis:new s("y4axis"),y5axis:new s("y5axis"),y6axis:new s("y6axis"),y7axis:new s("y7axis"),y8axis:new s("y8axis"),y9axis:new s("y9axis"),yMidAxis:new s("yMidAxis")};this.baseCanvas=new H.jqplot.GenericCanvas();this.captureRightClick=false;this.data=[];this.dataRenderer;this.dataRendererOptions;this.defaults={axesDefaults:{},axes:{xaxis:{},yaxis:{},x2axis:{},y2axis:{},y3axis:{},y4axis:{},y5axis:{},y6axis:{},y7axis:{},y8axis:{},y9axis:{},yMidAxis:{}},seriesDefaults:{},series:[]};this.defaultAxisStart=1;this.drawIfHidden=false;this.eventCanvas=new H.jqplot.GenericCanvas();this.fillBetween={series1:null,series2:null,color:null,baseSeries:0,fill:true};this.fontFamily;this.fontSize;this.grid=new I();this.legend=new n();this.negativeSeriesColors=H.jqplot.config.defaultNegativeColors;this.noDataIndicator={show:false,indicator:"Loading Data...",axes:{xaxis:{min:0,max:10,tickInterval:2,show:true},yaxis:{min:0,max:12,tickInterval:3,show:true}}};this.options={};this.previousSeriesStack=[];this.plugins={};this.series=[];this.seriesStack=[];this.seriesColors=H.jqplot.config.defaultColors;this.sortData=true;this.stackSeries=false;this.syncXTicks=true;this.syncYTicks=true;this.target=null;this.targetId=null;this.textColor;this.title=new u();this._drawCount=0;this._sumy=0;this._sumx=0;this._stackData=[];this._plotData=[];this._width=null;this._height=null;this._plotDimensions={height:null,width:null};this._gridPadding={top:null,right:null,bottom:null,left:null};this._defaultGridPadding={top:10,right:10,bottom:23,left:10};this._addDomReference=H.jqplot.config.addDomReference;this.preInitHooks=new H.jqplot.HooksManager();this.postInitHooks=new H.jqplot.HooksManager();this.preParseOptionsHooks=new H.jqplot.HooksManager();this.postParseOptionsHooks=new H.jqplot.HooksManager();this.preDrawHooks=new H.jqplot.HooksManager();this.postDrawHooks=new H.jqplot.HooksManager();this.preDrawSeriesHooks=new H.jqplot.HooksManager();this.postDrawSeriesHooks=new H.jqplot.HooksManager();this.preDrawLegendHooks=new H.jqplot.HooksManager();this.addLegendRowHooks=new H.jqplot.HooksManager();this.preSeriesInitHooks=new H.jqplot.HooksManager();this.postSeriesInitHooks=new H.jqplot.HooksManager();this.preParseSeriesOptionsHooks=new H.jqplot.HooksManager();this.postParseSeriesOptionsHooks=new H.jqplot.HooksManager();this.eventListenerHooks=new H.jqplot.EventListenerManager();this.preDrawSeriesShadowHooks=new H.jqplot.HooksManager();this.postDrawSeriesShadowHooks=new H.jqplot.HooksManager();this.colorGenerator=new H.jqplot.ColorGenerator();this.negativeColorGenerator=new H.jqplot.ColorGenerator();this.canvasManager=new H.jqplot.CanvasManager();this.themeEngine=new H.jqplot.ThemeEngine();var ad=0;this.init=function(ao,al,aq){aq=aq||{};for(var am=0;am<H.jqplot.preInitHooks.length;am++){H.jqplot.preInitHooks[am].call(this,ao,al,aq)}for(var am=0;am<this.preInitHooks.hooks.length;am++){this.preInitHooks.hooks[am].call(this,ao,al,aq)}this.targetId="#"+ao;this.target=H("#"+ao);if(this._addDomReference){this.target.data("jqplot",this)}this.target.removeClass("jqplot-error");if(!this.target.get(0)){throw"No plot target specified"}if(this.target.css("position")=="static"){this.target.css("position","relative")}if(!this.target.hasClass("jqplot-target")){this.target.addClass("jqplot-target")}if(!this.target.height()){var an;if(aq&&aq.height){an=parseInt(aq.height,10)}else{if(this.target.attr("data-height")){an=parseInt(this.target.attr("data-height"),10)}else{an=parseInt(H.jqplot.config.defaultHeight,10)}}this._height=an;this.target.css("height",an+"px")}else{this._height=an=this.target.height()}if(!this.target.width()){var ap;if(aq&&aq.width){ap=parseInt(aq.width,10)}else{if(this.target.attr("data-width")){ap=parseInt(this.target.attr("data-width"),10)}else{ap=parseInt(H.jqplot.config.defaultWidth,10)}}this._width=ap;this.target.css("width",ap+"px")}else{this._width=ap=this.target.width()}for(var am=0,aj=Q.length;am<aj;am++){this.axes[Q[am]]=new s(Q[am])}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Canvas dimension not set"}if(aq.dataRenderer&&H.isFunction(aq.dataRenderer)){if(aq.dataRendererOptions){this.dataRendererOptions=aq.dataRendererOptions}this.dataRenderer=aq.dataRenderer;al=this.dataRenderer(al,this,this.dataRendererOptions)}if(aq.noDataIndicator&&H.isPlainObject(aq.noDataIndicator)){H.extend(true,this.noDataIndicator,aq.noDataIndicator)}if(al==null||H.isArray(al)==false||al.length==0||H.isArray(al[0])==false||al[0].length==0){if(this.noDataIndicator.show==false){throw"No Data"}else{for(var af in this.noDataIndicator.axes){for(var ah in this.noDataIndicator.axes[af]){this.axes[af][ah]=this.noDataIndicator.axes[af][ah]}}this.postDrawHooks.add(function(){var ax=this.eventCanvas.getHeight();var au=this.eventCanvas.getWidth();var at=H('<div class="jqplot-noData-container" style="position:absolute;"></div>');this.target.append(at);at.height(ax);at.width(au);at.css("top",this.eventCanvas._offsets.top);at.css("left",this.eventCanvas._offsets.left);var aw=H('<div class="jqplot-noData-contents" style="text-align:center; position:relative; margin-left:auto; margin-right:auto;"></div>');at.append(aw);aw.html(this.noDataIndicator.indicator);var av=aw.height();var ar=aw.width();aw.height(av);aw.width(ar);aw.css("top",(ax-av)/2+"px")})}}this.data=H.extend(true,[],al);this.parseOptions(aq);if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this.title.init();this.legend.init();this._sumy=0;this._sumx=0;this.computePlotData();for(var am=0;am<this.series.length;am++){this.seriesStack.push(am);this.previousSeriesStack.push(am);this.series[am].shadowCanvas._plotDimensions=this._plotDimensions;this.series[am].canvas._plotDimensions=this._plotDimensions;for(var ak=0;ak<H.jqplot.preSeriesInitHooks.length;ak++){H.jqplot.preSeriesInitHooks[ak].call(this.series[am],ao,this.data,this.options.seriesDefaults,this.options.series[am],this)}for(var ak=0;ak<this.preSeriesInitHooks.hooks.length;ak++){this.preSeriesInitHooks.hooks[ak].call(this.series[am],ao,this.data,this.options.seriesDefaults,this.options.series[am],this)}this.series[am]._plotDimensions=this._plotDimensions;this.series[am].init(am,this.grid.borderWidth,this);for(var ak=0;ak<H.jqplot.postSeriesInitHooks.length;ak++){H.jqplot.postSeriesInitHooks[ak].call(this.series[am],ao,this.data,this.options.seriesDefaults,this.options.series[am],this)}for(var ak=0;ak<this.postSeriesInitHooks.hooks.length;ak++){this.postSeriesInitHooks.hooks[ak].call(this.series[am],ao,this.data,this.options.seriesDefaults,this.options.series[am],this)}this._sumy+=this.series[am]._sumy;this._sumx+=this.series[am]._sumx}var ag,ai;for(var am=0,aj=Q.length;am<aj;am++){ag=Q[am];ai=this.axes[ag];ai._plotDimensions=this._plotDimensions;ai.init();if(this.axes[ag].borderColor==null){if(ag.charAt(0)!=="x"&&ai.useSeriesColor===true&&ai.show){ai.borderColor=ai._series[0].color}else{ai.borderColor=this.grid.borderColor}}}if(this.sortData){ab(this.series)}this.grid.init();this.grid._axes=this.axes;this.legend._series=this.series;for(var am=0;am<H.jqplot.postInitHooks.length;am++){H.jqplot.postInitHooks[am].call(this,ao,this.data,aq)}for(var am=0;am<this.postInitHooks.hooks.length;am++){this.postInitHooks.hooks[am].call(this,ao,this.data,aq)}};this.resetAxesScale=function(ak,ag){var ai=ag||{};var aj=ak||this.axes;if(aj===true){aj=this.axes}if(H.isArray(aj)){for(var ah=0;ah<aj.length;ah++){this.axes[aj[ah]].resetScale(ai[aj[ah]])}}else{if(typeof(aj)==="object"){for(var af in aj){this.axes[af].resetScale(ai[af])}}}};this.reInitialize=function(an,af){var ar=H.extend(true,{},this.options,af);var ap=this.targetId.substr(1);var al=(an==null)?this.data:an;for(var ao=0;ao<H.jqplot.preInitHooks.length;ao++){H.jqplot.preInitHooks[ao].call(this,ap,al,ar)}for(var ao=0;ao<this.preInitHooks.hooks.length;ao++){this.preInitHooks.hooks[ao].call(this,ap,al,ar)}this._height=this.target.height();this._width=this.target.width();if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Target dimension not set"}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;var ag,aq,am,ai;for(var ao=0,ak=Q.length;ao<ak;ao++){ag=Q[ao];ai=this.axes[ag];aq=ai._ticks;for(var am=0,aj=aq.length;am<aj;am++){var ah=aq[am]._elem;if(ah){if(H.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==r){window.G_vmlCanvasManager.uninitElement(ah.get(0))}ah.emptyForce();ah=null;aq._elem=null}}aq=null;delete ai.ticks;delete ai._ticks;this.axes[ag]=new s(ag);this.axes[ag]._plotWidth=this._width;this.axes[ag]._plotHeight=this._height}if(an){if(ar.dataRenderer&&H.isFunction(ar.dataRenderer)){if(ar.dataRendererOptions){this.dataRendererOptions=ar.dataRendererOptions}this.dataRenderer=ar.dataRenderer;an=this.dataRenderer(an,this,this.dataRendererOptions)}this.data=H.extend(true,[],an)}if(af){this.parseOptions(ar)}this.title._plotWidth=this._width;if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this.title.init();this.legend.init();this._sumy=0;this._sumx=0;this.seriesStack=[];this.previousSeriesStack=[];this.computePlotData();for(var ao=0,ak=this.series.length;ao<ak;ao++){this.seriesStack.push(ao);this.previousSeriesStack.push(ao);this.series[ao].shadowCanvas._plotDimensions=this._plotDimensions;this.series[ao].canvas._plotDimensions=this._plotDimensions;for(var am=0;am<H.jqplot.preSeriesInitHooks.length;am++){H.jqplot.preSeriesInitHooks[am].call(this.series[ao],ap,this.data,this.options.seriesDefaults,this.options.series[ao],this)}for(var am=0;am<this.preSeriesInitHooks.hooks.length;am++){this.preSeriesInitHooks.hooks[am].call(this.series[ao],ap,this.data,this.options.seriesDefaults,this.options.series[ao],this)}this.series[ao]._plotDimensions=this._plotDimensions;this.series[ao].init(ao,this.grid.borderWidth,this);for(var am=0;am<H.jqplot.postSeriesInitHooks.length;am++){H.jqplot.postSeriesInitHooks[am].call(this.series[ao],ap,this.data,this.options.seriesDefaults,this.options.series[ao],this)}for(var am=0;am<this.postSeriesInitHooks.hooks.length;am++){this.postSeriesInitHooks.hooks[am].call(this.series[ao],ap,this.data,this.options.seriesDefaults,this.options.series[ao],this)}this._sumy+=this.series[ao]._sumy;this._sumx+=this.series[ao]._sumx}for(var ao=0,ak=Q.length;ao<ak;ao++){ag=Q[ao];ai=this.axes[ag];ai._plotDimensions=this._plotDimensions;ai.init();if(ai.borderColor==null){if(ag.charAt(0)!=="x"&&ai.useSeriesColor===true&&ai.show){ai.borderColor=ai._series[0].color}else{ai.borderColor=this.grid.borderColor}}}if(this.sortData){ab(this.series)}this.grid.init();this.grid._axes=this.axes;this.legend._series=this.series;for(var ao=0,ak=H.jqplot.postInitHooks.length;ao<ak;ao++){H.jqplot.postInitHooks[ao].call(this,ap,this.data,ar)}for(var ao=0,ak=this.postInitHooks.hooks.length;ao<ak;ao++){this.postInitHooks.hooks[ao].call(this,ap,this.data,ar)}};this.quickInit=function(){this._height=this.target.height();this._width=this.target.width();if(this._height<=0||this._width<=0||!this._height||!this._width){throw"Target dimension not set"}this._plotDimensions.height=this._height;this._plotDimensions.width=this._width;this.grid._plotDimensions=this._plotDimensions;this.title._plotDimensions=this._plotDimensions;this.baseCanvas._plotDimensions=this._plotDimensions;this.eventCanvas._plotDimensions=this._plotDimensions;this.legend._plotDimensions=this._plotDimensions;for(var ak in this.axes){this.axes[ak]._plotWidth=this._width;this.axes[ak]._plotHeight=this._height}this.title._plotWidth=this._width;if(this.textColor){this.target.css("color",this.textColor)}if(this.fontFamily){this.target.css("font-family",this.fontFamily)}if(this.fontSize){this.target.css("font-size",this.fontSize)}this._sumy=0;this._sumx=0;this.computePlotData();for(var ai=0;ai<this.series.length;ai++){if(this.series[ai]._type==="line"&&this.series[ai].renderer.bands.show){this.series[ai].renderer.initBands.call(this.series[ai],this.series[ai].renderer.options,this)}this.series[ai]._plotDimensions=this._plotDimensions;this.series[ai].canvas._plotDimensions=this._plotDimensions;this._sumy+=this.series[ai]._sumy;this._sumx+=this.series[ai]._sumx}var ag;for(var af=0;af<12;af++){ag=Q[af];var ah=this.axes[ag]._ticks;for(var ai=0;ai<ah.length;ai++){var aj=ah[ai]._elem;if(aj){if(H.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==r){window.G_vmlCanvasManager.uninitElement(aj.get(0))}aj.emptyForce();aj=null;ah._elem=null}}ah=null;this.axes[ag]._plotDimensions=this._plotDimensions;this.axes[ag]._ticks=[]}if(this.sortData){ab(this.series)}this.grid._axes=this.axes;this.legend._series=this.series};function ab(aj){var an,ao,ap,af,am;for(var ak=0;ak<aj.length;ak++){var ag;var al=[aj[ak].data,aj[ak]._stackData,aj[ak]._plotData,aj[ak]._prevPlotData];for(var ah=0;ah<4;ah++){ag=true;an=al[ah];if(aj[ak]._stackAxis=="x"){for(var ai=0;ai<an.length;ai++){if(typeof(an[ai][1])!="number"){ag=false;break}}if(ag){an.sort(function(ar,aq){return ar[1]-aq[1]})}}else{for(var ai=0;ai<an.length;ai++){if(typeof(an[ai][0])!="number"){ag=false;break}}if(ag){an.sort(function(ar,aq){return ar[0]-aq[0]})}}}}}this.computePlotData=function(){this._plotData=[];this._stackData=[];var am,an,ai;for(an=0,ai=this.series.length;an<ai;an++){am=this.series[an];this._plotData.push([]);this._stackData.push([]);var ag=am.data;this._plotData[an]=H.extend(true,[],ag);this._stackData[an]=H.extend(true,[],ag);am._plotData=this._plotData[an];am._stackData=this._stackData[an];var aq={x:[],y:[]};if(this.stackSeries&&!am.disableStack){am._stack=true;var ao=(am._stackAxis==="x")?0:1;for(var aj=0,af=ag.length;aj<af;aj++){var ap=ag[aj][ao];if(ap==null){ap=0}this._plotData[an][aj][ao]=ap;this._stackData[an][aj][ao]=ap;if(an>0){for(var ak=an;ak--;){var ah=this._plotData[ak][aj][ao];if(ap*ah>=0){this._plotData[an][aj][ao]+=ah;this._stackData[an][aj][ao]+=ah;break}}}}}else{for(var al=0;al<am.data.length;al++){aq.x.push(am.data[al][0]);aq.y.push(am.data[al][1])}this._stackData.push(am.data);this.series[an]._stackData=am.data;this._plotData.push(am.data);am._plotData=am.data;am._plotValues=aq}if(an>0){am._prevPlotData=this.series[an-1]._plotData}am._sumy=0;am._sumx=0;for(al=am.data.length-1;al>-1;al--){am._sumy+=am.data[al][1];am._sumx+=am.data[al][0]}}};this.populatePlotData=function(an,ao){this._plotData=[];this._stackData=[];an._stackData=[];an._plotData=[];var ar={x:[],y:[]};if(this.stackSeries&&!an.disableStack){an._stack=true;var aq=(an._stackAxis==="x")?0:1;var at=H.extend(true,[],an.data);var au=H.extend(true,[],an.data);var ah,ag,ai,ap,af;for(var al=0;al<ao;al++){var aj=this.series[al].data;for(var ak=0;ak<aj.length;ak++){ai=aj[ak];ah=(ai[0]!=null)?ai[0]:0;ag=(ai[1]!=null)?ai[1]:0;at[ak][0]+=ah;at[ak][1]+=ag;ap=(aq)?ag:ah;if(an.data[ak][aq]*ap>=0){au[ak][aq]+=ap}}}for(var am=0;am<au.length;am++){ar.x.push(au[am][0]);ar.y.push(au[am][1])}this._plotData.push(au);this._stackData.push(at);an._stackData=at;an._plotData=au;an._plotValues=ar}else{for(var am=0;am<an.data.length;am++){ar.x.push(an.data[am][0]);ar.y.push(an.data[am][1])}this._stackData.push(an.data);this.series[ao]._stackData=an.data;this._plotData.push(an.data);an._plotData=an.data;an._plotValues=ar}if(ao>0){an._prevPlotData=this.series[ao-1]._plotData}an._sumy=0;an._sumx=0;for(am=an.data.length-1;am>-1;am--){an._sumy+=an.data[am][1];an._sumx+=an.data[am][0]}};this.getNextSeriesColor=(function(ag){var af=0;var ah=ag.seriesColors;return function(){if(af<ah.length){return ah[af++]}else{af=0;return ah[af++]}}})(this);this.parseOptions=function(ar){for(var am=0;am<this.preParseOptionsHooks.hooks.length;am++){this.preParseOptionsHooks.hooks[am].call(this,ar)}for(var am=0;am<H.jqplot.preParseOptionsHooks.length;am++){H.jqplot.preParseOptionsHooks[am].call(this,ar)}this.options=H.extend(true,{},this.defaults,ar);var ag=this.options;this.animate=ag.animate;this.animateReplot=ag.animateReplot;this.stackSeries=ag.stackSeries;if(H.isPlainObject(ag.fillBetween)){var aq=["series1","series2","color","baseSeries","fill"],an;for(var am=0,ak=aq.length;am<ak;am++){an=aq[am];if(ag.fillBetween[an]!=null){this.fillBetween[an]=ag.fillBetween[an]}}}if(ag.seriesColors){this.seriesColors=ag.seriesColors}if(ag.negativeSeriesColors){this.negativeSeriesColors=ag.negativeSeriesColors}if(ag.captureRightClick){this.captureRightClick=ag.captureRightClick}this.defaultAxisStart=(ar&&ar.defaultAxisStart!=null)?ar.defaultAxisStart:this.defaultAxisStart;this.colorGenerator.setColors(this.seriesColors);this.negativeColorGenerator.setColors(this.negativeSeriesColors);H.extend(true,this._gridPadding,ag.gridPadding);this.sortData=(ag.sortData!=null)?ag.sortData:this.sortData;for(var am=0;am<12;am++){var ah=Q[am];var aj=this.axes[ah];aj._options=H.extend(true,{},ag.axesDefaults,ag.axes[ah]);H.extend(true,aj,ag.axesDefaults,ag.axes[ah]);aj._plotWidth=this._width;aj._plotHeight=this._height}var ap=function(ax,av,ay){var au=[];var aw,at;av=av||"vertical";if(!H.isArray(ax[0])){for(aw=0,at=ax.length;aw<at;aw++){if(av=="vertical"){au.push([ay+aw,ax[aw]])}else{au.push([ax[aw],ay+aw])}}}else{H.extend(true,au,ax)}return au};var ao=0;this.series=[];for(var am=0;am<this.data.length;am++){var af=H.extend(true,{index:am},{seriesColors:this.seriesColors,negativeSeriesColors:this.negativeSeriesColors},this.options.seriesDefaults,this.options.series[am],{rendererOptions:{animation:{show:this.animate}}});var aq=new O(af);for(var al=0;al<H.jqplot.preParseSeriesOptionsHooks.length;al++){H.jqplot.preParseSeriesOptionsHooks[al].call(aq,this.options.seriesDefaults,this.options.series[am])}for(var al=0;al<this.preParseSeriesOptionsHooks.hooks.length;al++){this.preParseSeriesOptionsHooks.hooks[al].call(aq,this.options.seriesDefaults,this.options.series[am])}H.extend(true,aq,af);var ai="vertical";if(aq.renderer===H.jqplot.BarRenderer&&aq.rendererOptions&&aq.rendererOptions.barDirection=="horizontal"){ai="horizontal";aq._stackAxis="x";aq._primaryAxis="_yaxis"}aq.data=ap(this.data[am],ai,this.defaultAxisStart);switch(aq.xaxis){case"xaxis":aq._xaxis=this.axes.xaxis;break;case"x2axis":aq._xaxis=this.axes.x2axis;break;default:break}aq._yaxis=this.axes[aq.yaxis];aq._xaxis._series.push(aq);aq._yaxis._series.push(aq);if(aq.show){aq._xaxis.show=true;aq._yaxis.show=true}else{if(aq._xaxis.scaleToHiddenSeries){aq._xaxis.show=true}if(aq._yaxis.scaleToHiddenSeries){aq._yaxis.show=true}}if(!aq.label){aq.label="Series "+(am+1).toString()}this.series.push(aq);for(var al=0;al<H.jqplot.postParseSeriesOptionsHooks.length;al++){H.jqplot.postParseSeriesOptionsHooks[al].call(this.series[am],this.options.seriesDefaults,this.options.series[am])}for(var al=0;al<this.postParseSeriesOptionsHooks.hooks.length;al++){this.postParseSeriesOptionsHooks.hooks[al].call(this.series[am],this.options.seriesDefaults,this.options.series[am])}}H.extend(true,this.grid,this.options.grid);for(var am=0,ak=Q.length;am<ak;am++){var ah=Q[am];var aj=this.axes[ah];if(aj.borderWidth==null){aj.borderWidth=this.grid.borderWidth}}if(typeof this.options.title=="string"){this.title.text=this.options.title}else{if(typeof this.options.title=="object"){H.extend(true,this.title,this.options.title)}}this.title._plotWidth=this._width;this.legend.setOptions(this.options.legend);for(var am=0;am<H.jqplot.postParseOptionsHooks.length;am++){H.jqplot.postParseOptionsHooks[am].call(this,ar)}for(var am=0;am<this.postParseOptionsHooks.hooks.length;am++){this.postParseOptionsHooks.hooks[am].call(this,ar)}};this.destroy=function(){this.canvasManager.freeAllCanvases();if(this.eventCanvas&&this.eventCanvas._elem){this.eventCanvas._elem.unbind()}this.target.empty();this.target[0].innerHTML=""};this.replot=function(ag){var ah=ag||{};var aj=ah.data||null;var af=(ah.clear===false)?false:true;var ai=ah.resetAxes||false;delete ah.data;delete ah.clear;delete ah.resetAxes;this.target.trigger("jqplotPreReplot");if(af){this.destroy()}if(aj||!H.isEmptyObject(ah)){this.reInitialize(aj,ah)}else{this.quickInit()}if(ai){this.resetAxesScale(ai,ah.axes)}this.draw();this.target.trigger("jqplotPostReplot")};this.redraw=function(af){af=(af!=null)?af:true;this.target.trigger("jqplotPreRedraw");if(af){this.canvasManager.freeAllCanvases();this.eventCanvas._elem.unbind();this.target.empty()}for(var ah in this.axes){this.axes[ah]._ticks=[]}this.computePlotData();this._sumy=0;this._sumx=0;for(var ag=0,ai=this.series.length;ag<ai;ag++){this._sumy+=this.series[ag]._sumy;this._sumx+=this.series[ag]._sumx}this.draw();this.target.trigger("jqplotPostRedraw")};this.draw=function(){if(this.drawIfHidden||this.target.is(":visible")){this.target.trigger("jqplotPreDraw");var aB,az,ay,ai;for(aB=0,ay=H.jqplot.preDrawHooks.length;aB<ay;aB++){H.jqplot.preDrawHooks[aB].call(this)}for(aB=0,ay=this.preDrawHooks.length;aB<ay;aB++){this.preDrawHooks.hooks[aB].apply(this,this.preDrawSeriesHooks.args[aB])}this.target.append(this.baseCanvas.createElement({left:0,right:0,top:0,bottom:0},"jqplot-base-canvas",null,this));this.baseCanvas.setContext();this.target.append(this.title.draw());this.title.pack({top:0,left:0});var aF=this.legend.draw({},this);var af={top:0,left:0,bottom:0,right:0};if(this.legend.placement=="outsideGrid"){this.target.append(aF);switch(this.legend.location){case"n":af.top+=this.legend.getHeight();break;case"s":af.bottom+=this.legend.getHeight();break;case"ne":case"e":case"se":af.right+=this.legend.getWidth();break;case"nw":case"w":case"sw":af.left+=this.legend.getWidth();break;default:af.right+=this.legend.getWidth();break}aF=aF.detach()}var al=this.axes;var aG;for(aB=0;aB<12;aB++){aG=Q[aB];this.target.append(al[aG].draw(this.baseCanvas._ctx,this));al[aG].set()}if(al.yaxis.show){af.left+=al.yaxis.getWidth()}var aA=["y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis"];var ar=[0,0,0,0,0,0,0,0];var av=0;var au;for(au=0;au<8;au++){if(al[aA[au]].show){av+=al[aA[au]].getWidth();ar[au]=av}}af.right+=av;if(al.x2axis.show){af.top+=al.x2axis.getHeight()}if(this.title.show){af.top+=this.title.getHeight()}if(al.xaxis.show){af.bottom+=al.xaxis.getHeight()}if(this.options.gridDimensions&&H.isPlainObject(this.options.gridDimensions)){var am=parseInt(this.options.gridDimensions.width,10)||0;var aC=parseInt(this.options.gridDimensions.height,10)||0;var ah=(this._width-af.left-af.right-am)/2;var aE=(this._height-af.top-af.bottom-aC)/2;if(aE>=0&&ah>=0){af.top+=aE;af.bottom+=aE;af.left+=ah;af.right+=ah}}var ag=["top","bottom","left","right"];for(var au in ag){if(this._gridPadding[ag[au]]==null&&af[ag[au]]>0){this._gridPadding[ag[au]]=af[ag[au]]}else{if(this._gridPadding[ag[au]]==null){this._gridPadding[ag[au]]=this._defaultGridPadding[ag[au]]}}}var at=this._gridPadding;if(this.legend.placement==="outsideGrid"){at={top:this.title.getHeight(),left:0,right:0,bottom:0};if(this.legend.location==="s"){at.left=this._gridPadding.left;at.right=this._gridPadding.right}}al.xaxis.pack({position:"absolute",bottom:this._gridPadding.bottom-al.xaxis.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});al.yaxis.pack({position:"absolute",top:0,left:this._gridPadding.left-al.yaxis.getWidth(),height:this._height},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top});al.x2axis.pack({position:"absolute",top:this._gridPadding.top-al.x2axis.getHeight(),left:0,width:this._width},{min:this._gridPadding.left,max:this._width-this._gridPadding.right});for(aB=8;aB>0;aB--){al[aA[aB-1]].pack({position:"absolute",top:0,right:this._gridPadding.right-ar[aB-1]},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top})}var an=(this._width-this._gridPadding.left-this._gridPadding.right)/2+this._gridPadding.left-al.yMidAxis.getWidth()/2;al.yMidAxis.pack({position:"absolute",top:0,left:an,zIndex:9,textAlign:"center"},{min:this._height-this._gridPadding.bottom,max:this._gridPadding.top});this.target.append(this.grid.createElement(this._gridPadding,this));this.grid.draw();var ak=this.series;var aD=ak.length;for(aB=0,ay=aD;aB<ay;aB++){az=this.seriesStack[aB];this.target.append(ak[az].shadowCanvas.createElement(this._gridPadding,"jqplot-series-shadowCanvas",null,this));ak[az].shadowCanvas.setContext();ak[az].shadowCanvas._elem.data("seriesIndex",az)}for(aB=0,ay=aD;aB<ay;aB++){az=this.seriesStack[aB];this.target.append(ak[az].canvas.createElement(this._gridPadding,"jqplot-series-canvas",null,this));ak[az].canvas.setContext();ak[az].canvas._elem.data("seriesIndex",az)}this.target.append(this.eventCanvas.createElement(this._gridPadding,"jqplot-event-canvas",null,this));this.eventCanvas.setContext();this.eventCanvas._ctx.fillStyle="rgba(0,0,0,0)";this.eventCanvas._ctx.fillRect(0,0,this.eventCanvas._ctx.canvas.width,this.eventCanvas._ctx.canvas.height);this.bindCustomEvents();if(this.legend.preDraw){this.eventCanvas._elem.before(aF);this.legend.pack(at);if(this.legend._elem){this.drawSeries({legendInfo:{location:this.legend.location,placement:this.legend.placement,width:this.legend.getWidth(),height:this.legend.getHeight(),xoffset:this.legend.xoffset,yoffset:this.legend.yoffset}})}else{this.drawSeries()}}else{this.drawSeries();if(aD){H(ak[aD-1].canvas._elem).after(aF)}this.legend.pack(at)}for(var aB=0,ay=H.jqplot.eventListenerHooks.length;aB<ay;aB++){this.eventCanvas._elem.bind(H.jqplot.eventListenerHooks[aB][0],{plot:this},H.jqplot.eventListenerHooks[aB][1])}for(var aB=0,ay=this.eventListenerHooks.hooks.length;aB<ay;aB++){this.eventCanvas._elem.bind(this.eventListenerHooks.hooks[aB][0],{plot:this},this.eventListenerHooks.hooks[aB][1])}var aq=this.fillBetween;if(aq.fill&&aq.series1!==aq.series2&&aq.series1<aD&&aq.series2<aD&&ak[aq.series1]._type==="line"&&ak[aq.series2]._type==="line"){this.doFillBetweenLines()}for(var aB=0,ay=H.jqplot.postDrawHooks.length;aB<ay;aB++){H.jqplot.postDrawHooks[aB].call(this)}for(var aB=0,ay=this.postDrawHooks.hooks.length;aB<ay;aB++){this.postDrawHooks.hooks[aB].apply(this,this.postDrawHooks.args[aB])}if(this.target.is(":visible")){this._drawCount+=1}var ao,ap,aw,aj;for(aB=0,ay=aD;aB<ay;aB++){ao=ak[aB];ap=ao.renderer;aw=".jqplot-point-label.jqplot-series-"+aB;if(ap.animation&&ap.animation._supported&&ap.animation.show&&(this._drawCount<2||this.animateReplot)){aj=this.target.find(aw);aj.stop(true,true).hide();ao.canvas._elem.stop(true,true).hide();ao.shadowCanvas._elem.stop(true,true).hide();ao.canvas._elem.jqplotEffect("blind",{mode:"show",direction:ap.animation.direction},ap.animation.speed);ao.shadowCanvas._elem.jqplotEffect("blind",{mode:"show",direction:ap.animation.direction},ap.animation.speed);aj.fadeIn(ap.animation.speed*0.8)}}aj=null;this.target.trigger("jqplotPostDraw",[this])}};N.prototype.doFillBetweenLines=function(){var ah=this.fillBetween;var aq=ah.series1;var ao=ah.series2;var ap=(aq<ao)?aq:ao;var an=(ao>aq)?ao:aq;var al=this.series[ap];var ak=this.series[an];if(ak.renderer.smooth){var aj=ak.renderer._smoothedData.slice(0).reverse()}else{var aj=ak.gridData.slice(0).reverse()}if(al.renderer.smooth){var am=al.renderer._smoothedData.concat(aj)}else{var am=al.gridData.concat(aj)}var ai=(ah.color!==null)?ah.color:this.series[aq].fillColor;var ar=(ah.baseSeries!==null)?ah.baseSeries:ap;var ag=this.series[ar].renderer.shapeRenderer;var af={fillStyle:ai,fill:true,closePath:true};ag.draw(al.shadowCanvas._ctx,am,af)};this.bindCustomEvents=function(){this.eventCanvas._elem.bind("click",{plot:this},this.onClick);this.eventCanvas._elem.bind("dblclick",{plot:this},this.onDblClick);this.eventCanvas._elem.bind("mousedown",{plot:this},this.onMouseDown);this.eventCanvas._elem.bind("mousemove",{plot:this},this.onMouseMove);this.eventCanvas._elem.bind("mouseenter",{plot:this},this.onMouseEnter);this.eventCanvas._elem.bind("mouseleave",{plot:this},this.onMouseLeave);if(this.captureRightClick){this.eventCanvas._elem.bind("mouseup",{plot:this},this.onRightClick);this.eventCanvas._elem.get(0).oncontextmenu=function(){return false}}else{this.eventCanvas._elem.bind("mouseup",{plot:this},this.onMouseUp)}};function ac(ao){var am=ao.data.plot;var ai=am.eventCanvas._elem.offset();var al={x:ao.pageX-ai.left,y:ao.pageY-ai.top};var aj={xaxis:null,yaxis:null,x2axis:null,y2axis:null,y3axis:null,y4axis:null,y5axis:null,y6axis:null,y7axis:null,y8axis:null,y9axis:null,yMidAxis:null};var ak=["xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];var af=am.axes;var ag,ah;for(ag=11;ag>0;ag--){ah=ak[ag-1];if(af[ah].show){aj[ah]=af[ah].series_p2u(al[ah.charAt(0)])}}return{offsets:ai,gridPos:al,dataPos:aj}}function ae(af,ag){var ak=ag.series;var aQ,aO,aN,aI,aJ,aD,aC,ap,an,at,au,aE;var aM,aR,aK,al,aB,aG,aP;var ah,aH;for(aN=ag.seriesStack.length-1;aN>=0;aN--){aQ=ag.seriesStack[aN];aI=ak[aQ];aP=aI._highlightThreshold;switch(aI.renderer.constructor){case H.jqplot.BarRenderer:aD=af.x;aC=af.y;for(aO=0;aO<aI._barPoints.length;aO++){aB=aI._barPoints[aO];aK=aI.gridData[aO];if(aD>aB[0][0]&&aD<aB[2][0]&&aC>aB[2][1]&&aC<aB[0][1]){return{seriesIndex:aI.index,pointIndex:aO,gridData:aK,data:aI.data[aO],points:aI._barPoints[aO]}}}break;case H.jqplot.PyramidRenderer:aD=af.x;aC=af.y;for(aO=0;aO<aI._barPoints.length;aO++){aB=aI._barPoints[aO];aK=aI.gridData[aO];if(aD>aB[0][0]+aP[0][0]&&aD<aB[2][0]+aP[2][0]&&aC>aB[2][1]&&aC<aB[0][1]){return{seriesIndex:aI.index,pointIndex:aO,gridData:aK,data:aI.data[aO],points:aI._barPoints[aO]}}}break;case H.jqplot.DonutRenderer:at=aI.startAngle/180*Math.PI;aD=af.x-aI._center[0];aC=af.y-aI._center[1];aJ=Math.sqrt(Math.pow(aD,2)+Math.pow(aC,2));if(aD>0&&-aC>=0){ap=2*Math.PI-Math.atan(-aC/aD)}else{if(aD>0&&-aC<0){ap=-Math.atan(-aC/aD)}else{if(aD<0){ap=Math.PI-Math.atan(-aC/aD)}else{if(aD==0&&-aC>0){ap=3*Math.PI/2}else{if(aD==0&&-aC<0){ap=Math.PI/2}else{if(aD==0&&aC==0){ap=0}}}}}}if(at){ap-=at;if(ap<0){ap+=2*Math.PI}else{if(ap>2*Math.PI){ap-=2*Math.PI}}}an=aI.sliceMargin/180*Math.PI;if(aJ<aI._radius&&aJ>aI._innerRadius){for(aO=0;aO<aI.gridData.length;aO++){au=(aO>0)?aI.gridData[aO-1][1]+an:an;aE=aI.gridData[aO][1];if(ap>au&&ap<aE){return{seriesIndex:aI.index,pointIndex:aO,gridData:aI.gridData[aO],data:aI.data[aO]}}}}break;case H.jqplot.PieRenderer:at=aI.startAngle/180*Math.PI;aD=af.x-aI._center[0];aC=af.y-aI._center[1];aJ=Math.sqrt(Math.pow(aD,2)+Math.pow(aC,2));if(aD>0&&-aC>=0){ap=2*Math.PI-Math.atan(-aC/aD)}else{if(aD>0&&-aC<0){ap=-Math.atan(-aC/aD)}else{if(aD<0){ap=Math.PI-Math.atan(-aC/aD)}else{if(aD==0&&-aC>0){ap=3*Math.PI/2}else{if(aD==0&&-aC<0){ap=Math.PI/2}else{if(aD==0&&aC==0){ap=0}}}}}}if(at){ap-=at;if(ap<0){ap+=2*Math.PI}else{if(ap>2*Math.PI){ap-=2*Math.PI}}}an=aI.sliceMargin/180*Math.PI;if(aJ<aI._radius){for(aO=0;aO<aI.gridData.length;aO++){au=(aO>0)?aI.gridData[aO-1][1]+an:an;aE=aI.gridData[aO][1];if(ap>au&&ap<aE){return{seriesIndex:aI.index,pointIndex:aO,gridData:aI.gridData[aO],data:aI.data[aO]}}}}break;case H.jqplot.BubbleRenderer:aD=af.x;aC=af.y;var az=null;if(aI.show){for(var aO=0;aO<aI.gridData.length;aO++){aK=aI.gridData[aO];aR=Math.sqrt((aD-aK[0])*(aD-aK[0])+(aC-aK[1])*(aC-aK[1]));if(aR<=aK[2]&&(aR<=aM||aM==null)){aM=aR;az={seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}if(az!=null){return az}}break;case H.jqplot.FunnelRenderer:aD=af.x;aC=af.y;var aF=aI._vertices,aj=aF[0],ai=aF[aF.length-1],am,ay,ar;function aL(aU,aW,aV){var aT=(aW[1]-aV[1])/(aW[0]-aV[0]);var aS=aW[1]-aT*aW[0];var aX=aU+aW[1];return[(aX-aS)/aT,aX]}am=aL(aC,aj[0],ai[3]);ay=aL(aC,aj[1],ai[2]);for(aO=0;aO<aF.length;aO++){ar=aF[aO];if(aC>=ar[0][1]&&aC<=ar[3][1]&&aD>=am[0]&&aD<=ay[0]){return{seriesIndex:aI.index,pointIndex:aO,gridData:null,data:aI.data[aO]}}}break;case H.jqplot.LineRenderer:aD=af.x;aC=af.y;aJ=aI.renderer;if(aI.show){if((aI.fill||(aI.renderer.bands.show&&aI.renderer.bands.fill))&&(!ag.plugins.highlighter||!ag.plugins.highlighter.show)){var aq=false;if(aD>aI._boundingBox[0][0]&&aD<aI._boundingBox[1][0]&&aC>aI._boundingBox[1][1]&&aC<aI._boundingBox[0][1]){var ax=aI._areaPoints.length;var aA;var aO=ax-1;for(var aA=0;aA<ax;aA++){var aw=[aI._areaPoints[aA][0],aI._areaPoints[aA][1]];var av=[aI._areaPoints[aO][0],aI._areaPoints[aO][1]];if(aw[1]<aC&&av[1]>=aC||av[1]<aC&&aw[1]>=aC){if(aw[0]+(aC-aw[1])/(av[1]-aw[1])*(av[0]-aw[0])<aD){aq=!aq}}aO=aA}}if(aq){return{seriesIndex:aQ,pointIndex:null,gridData:aI.gridData,data:aI.data,points:aI._areaPoints}}break}else{aH=aI.markerRenderer.size/2+aI.neighborThreshold;ah=(aH>0)?aH:0;for(var aO=0;aO<aI.gridData.length;aO++){aK=aI.gridData[aO];if(aJ.constructor==H.jqplot.OHLCRenderer){if(aJ.candleStick){var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._bodyWidth/2&&aD<=aK[0]+aJ._bodyWidth/2&&aC>=ao(aI.data[aO][2])&&aC<=ao(aI.data[aO][3])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}else{if(!aJ.hlc){var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._tickLength&&aD<=aK[0]+aJ._tickLength&&aC>=ao(aI.data[aO][2])&&aC<=ao(aI.data[aO][3])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}else{var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._tickLength&&aD<=aK[0]+aJ._tickLength&&aC>=ao(aI.data[aO][1])&&aC<=ao(aI.data[aO][2])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}}}else{if(aK[0]!=null&&aK[1]!=null){aR=Math.sqrt((aD-aK[0])*(aD-aK[0])+(aC-aK[1])*(aC-aK[1]));if(aR<=ah&&(aR<=aM||aM==null)){aM=aR;return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}}}}}break;default:aD=af.x;aC=af.y;aJ=aI.renderer;if(aI.show){aH=aI.markerRenderer.size/2+aI.neighborThreshold;ah=(aH>0)?aH:0;for(var aO=0;aO<aI.gridData.length;aO++){aK=aI.gridData[aO];if(aJ.constructor==H.jqplot.OHLCRenderer){if(aJ.candleStick){var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._bodyWidth/2&&aD<=aK[0]+aJ._bodyWidth/2&&aC>=ao(aI.data[aO][2])&&aC<=ao(aI.data[aO][3])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}else{if(!aJ.hlc){var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._tickLength&&aD<=aK[0]+aJ._tickLength&&aC>=ao(aI.data[aO][2])&&aC<=ao(aI.data[aO][3])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}else{var ao=aI._yaxis.series_u2p;if(aD>=aK[0]-aJ._tickLength&&aD<=aK[0]+aJ._tickLength&&aC>=ao(aI.data[aO][1])&&aC<=ao(aI.data[aO][2])){return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}}}else{aR=Math.sqrt((aD-aK[0])*(aD-aK[0])+(aC-aK[1])*(aC-aK[1]));if(aR<=ah&&(aR<=aM||aM==null)){aM=aR;return{seriesIndex:aQ,pointIndex:aO,gridData:aK,data:aI.data[aO]}}}}}break}}return null}this.onClick=function(ah){var ag=ac(ah);var aj=ah.data.plot;var ai=ae(ag.gridPos,aj);var af=H.Event("jqplotClick");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])};this.onDblClick=function(ah){var ag=ac(ah);var aj=ah.data.plot;var ai=ae(ag.gridPos,aj);var af=H.Event("jqplotDblClick");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])};this.onMouseDown=function(ah){var ag=ac(ah);var aj=ah.data.plot;var ai=ae(ag.gridPos,aj);var af=H.Event("jqplotMouseDown");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])};this.onMouseUp=function(ah){var ag=ac(ah);var af=H.Event("jqplotMouseUp");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,null,ah.data.plot])};this.onRightClick=function(ah){var ag=ac(ah);var aj=ah.data.plot;var ai=ae(ag.gridPos,aj);if(aj.captureRightClick){if(ah.which==3){var af=H.Event("jqplotRightClick");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])}else{var af=H.Event("jqplotMouseUp");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])}}};this.onMouseMove=function(ah){var ag=ac(ah);var aj=ah.data.plot;var ai=ae(ag.gridPos,aj);var af=H.Event("jqplotMouseMove");af.pageX=ah.pageX;af.pageY=ah.pageY;H(this).trigger(af,[ag.gridPos,ag.dataPos,ai,aj])};this.onMouseEnter=function(ah){var ag=ac(ah);var ai=ah.data.plot;var af=H.Event("jqplotMouseEnter");af.pageX=ah.pageX;af.pageY=ah.pageY;af.relatedTarget=ah.relatedTarget;H(this).trigger(af,[ag.gridPos,ag.dataPos,null,ai])};this.onMouseLeave=function(ah){var ag=ac(ah);var ai=ah.data.plot;var af=H.Event("jqplotMouseLeave");af.pageX=ah.pageX;af.pageY=ah.pageY;af.relatedTarget=ah.relatedTarget;H(this).trigger(af,[ag.gridPos,ag.dataPos,null,ai])};this.drawSeries=function(ah,af){var aj,ai,ag;af=(typeof(ah)==="number"&&af==null)?ah:af;ah=(typeof(ah)==="object")?ah:{};if(af!=r){ai=this.series[af];ag=ai.shadowCanvas._ctx;ag.clearRect(0,0,ag.canvas.width,ag.canvas.height);ai.drawShadow(ag,ah,this);ag=ai.canvas._ctx;ag.clearRect(0,0,ag.canvas.width,ag.canvas.height);ai.draw(ag,ah,this);if(ai.renderer.constructor==H.jqplot.BezierCurveRenderer){if(af<this.series.length-1){this.drawSeries(af+1)}}}else{for(aj=0;aj<this.series.length;aj++){ai=this.series[aj];ag=ai.shadowCanvas._ctx;ag.clearRect(0,0,ag.canvas.width,ag.canvas.height);ai.drawShadow(ag,ah,this);ag=ai.canvas._ctx;ag.clearRect(0,0,ag.canvas.width,ag.canvas.height);ai.draw(ag,ah,this)}}ah=af=aj=ai=ag=null};this.moveSeriesToFront=function(ag){ag=parseInt(ag,10);var aj=H.inArray(ag,this.seriesStack);if(aj==-1){return}if(aj==this.seriesStack.length-1){this.previousSeriesStack=this.seriesStack.slice(0);return}var af=this.seriesStack[this.seriesStack.length-1];var ai=this.series[ag].canvas._elem.detach();var ah=this.series[ag].shadowCanvas._elem.detach();this.series[af].shadowCanvas._elem.after(ah);this.series[af].canvas._elem.after(ai);this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack.splice(aj,1);this.seriesStack.push(ag)};this.moveSeriesToBack=function(ag){ag=parseInt(ag,10);var aj=H.inArray(ag,this.seriesStack);if(aj==0||aj==-1){return}var af=this.seriesStack[0];var ai=this.series[ag].canvas._elem.detach();var ah=this.series[ag].shadowCanvas._elem.detach();this.series[af].shadowCanvas._elem.before(ah);this.series[af].canvas._elem.before(ai);this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack.splice(aj,1);this.seriesStack.unshift(ag)};this.restorePreviousSeriesOrder=function(){var al,ak,aj,ai,ah,af,ag;if(this.seriesStack==this.previousSeriesStack){return}for(al=1;al<this.previousSeriesStack.length;al++){af=this.previousSeriesStack[al];ag=this.previousSeriesStack[al-1];aj=this.series[af].canvas._elem.detach();ai=this.series[af].shadowCanvas._elem.detach();this.series[ag].shadowCanvas._elem.after(ai);this.series[ag].canvas._elem.after(aj)}ah=this.seriesStack.slice(0);this.seriesStack=this.previousSeriesStack.slice(0);this.previousSeriesStack=ah};this.restoreOriginalSeriesOrder=function(){var aj,ai,af=[],ah,ag;for(aj=0;aj<this.series.length;aj++){af.push(aj)}if(this.seriesStack==af){return}this.previousSeriesStack=this.seriesStack.slice(0);this.seriesStack=af;for(aj=1;aj<this.seriesStack.length;aj++){ah=this.series[aj].canvas._elem.detach();ag=this.series[aj].shadowCanvas._elem.detach();this.series[aj-1].shadowCanvas._elem.after(ag);this.series[aj-1].canvas._elem.after(ah)}};this.activateTheme=function(af){this.themeEngine.activate(this,af)}}H.jqplot.computeHighlightColors=function(ac){var ae;if(H.isArray(ac)){ae=[];for(var ag=0;ag<ac.length;ag++){var af=H.jqplot.getColorComponents(ac[ag]);var ab=[af[0],af[1],af[2]];var ah=ab[0]+ab[1]+ab[2];for(var ad=0;ad<3;ad++){ab[ad]=(ah>660)?ab[ad]*0.85:0.73*ab[ad]+90;ab[ad]=parseInt(ab[ad],10);(ab[ad]>255)?255:ab[ad]}ab[3]=0.3+0.35*af[3];ae.push("rgba("+ab[0]+","+ab[1]+","+ab[2]+","+ab[3]+")")}}else{var af=H.jqplot.getColorComponents(ac);var ab=[af[0],af[1],af[2]];var ah=ab[0]+ab[1]+ab[2];for(var ad=0;ad<3;ad++){ab[ad]=(ah>660)?ab[ad]*0.85:0.73*ab[ad]+90;ab[ad]=parseInt(ab[ad],10);(ab[ad]>255)?255:ab[ad]}ab[3]=0.3+0.35*af[3];ae="rgba("+ab[0]+","+ab[1]+","+ab[2]+","+ab[3]+")"}return ae};H.jqplot.ColorGenerator=function(ac){ac=ac||H.jqplot.config.defaultColors;var ab=0;this.next=function(){if(ab<ac.length){return ac[ab++]}else{ab=0;return ac[ab++]}};this.previous=function(){if(ab>0){return ac[ab--]}else{ab=ac.length-1;return ac[ab]}};this.get=function(ae){var ad=ae-ac.length*Math.floor(ae/ac.length);return ac[ad]};this.setColors=function(ad){ac=ad};this.reset=function(){ab=0};this.getIndex=function(){return ab};this.setIndex=function(ad){ab=ad}};H.jqplot.hex2rgb=function(ad,ab){ad=ad.replace("#","");if(ad.length==3){ad=ad.charAt(0)+ad.charAt(0)+ad.charAt(1)+ad.charAt(1)+ad.charAt(2)+ad.charAt(2)}var ac;ac="rgba("+parseInt(ad.slice(0,2),16)+", "+parseInt(ad.slice(2,4),16)+", "+parseInt(ad.slice(4,6),16);if(ab){ac+=", "+ab}ac+=")";return ac};H.jqplot.rgb2hex=function(ag){var ad=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *(?:, *[0-9.]*)?\)/;var ab=ag.match(ad);var af="#";for(var ae=1;ae<4;ae++){var ac;if(ab[ae].search(/%/)!=-1){ac=parseInt(255*ab[ae]/100,10).toString(16);if(ac.length==1){ac="0"+ac}}else{ac=parseInt(ab[ae],10).toString(16);if(ac.length==1){ac="0"+ac}}af+=ac}return af};H.jqplot.normalize2rgb=function(ac,ab){if(ac.search(/^ *rgba?\(/)!=-1){return ac}else{if(ac.search(/^ *#?[0-9a-fA-F]?[0-9a-fA-F]/)!=-1){return H.jqplot.hex2rgb(ac,ab)}else{throw"invalid color spec"}}};H.jqplot.getColorComponents=function(ag){ag=H.jqplot.colorKeywordMap[ag]||ag;var ae=H.jqplot.normalize2rgb(ag);var ad=/rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *,? *([0-9.]* *)?\)/;var ab=ae.match(ad);var ac=[];for(var af=1;af<4;af++){if(ab[af].search(/%/)!=-1){ac[af-1]=parseInt(255*ab[af]/100,10)}else{ac[af-1]=parseInt(ab[af],10)}}ac[3]=parseFloat(ab[4])?parseFloat(ab[4]):1;return ac};H.jqplot.colorKeywordMap={aliceblue:"rgb(240, 248, 255)",antiquewhite:"rgb(250, 235, 215)",aqua:"rgb( 0, 255, 255)",aquamarine:"rgb(127, 255, 212)",azure:"rgb(240, 255, 255)",beige:"rgb(245, 245, 220)",bisque:"rgb(255, 228, 196)",black:"rgb( 0, 0, 0)",blanchedalmond:"rgb(255, 235, 205)",blue:"rgb( 0, 0, 255)",blueviolet:"rgb(138, 43, 226)",brown:"rgb(165, 42, 42)",burlywood:"rgb(222, 184, 135)",cadetblue:"rgb( 95, 158, 160)",chartreuse:"rgb(127, 255, 0)",chocolate:"rgb(210, 105, 30)",coral:"rgb(255, 127, 80)",cornflowerblue:"rgb(100, 149, 237)",cornsilk:"rgb(255, 248, 220)",crimson:"rgb(220, 20, 60)",cyan:"rgb( 0, 255, 255)",darkblue:"rgb( 0, 0, 139)",darkcyan:"rgb( 0, 139, 139)",darkgoldenrod:"rgb(184, 134, 11)",darkgray:"rgb(169, 169, 169)",darkgreen:"rgb( 0, 100, 0)",darkgrey:"rgb(169, 169, 169)",darkkhaki:"rgb(189, 183, 107)",darkmagenta:"rgb(139, 0, 139)",darkolivegreen:"rgb( 85, 107, 47)",darkorange:"rgb(255, 140, 0)",darkorchid:"rgb(153, 50, 204)",darkred:"rgb(139, 0, 0)",darksalmon:"rgb(233, 150, 122)",darkseagreen:"rgb(143, 188, 143)",darkslateblue:"rgb( 72, 61, 139)",darkslategray:"rgb( 47, 79, 79)",darkslategrey:"rgb( 47, 79, 79)",darkturquoise:"rgb( 0, 206, 209)",darkviolet:"rgb(148, 0, 211)",deeppink:"rgb(255, 20, 147)",deepskyblue:"rgb( 0, 191, 255)",dimgray:"rgb(105, 105, 105)",dimgrey:"rgb(105, 105, 105)",dodgerblue:"rgb( 30, 144, 255)",firebrick:"rgb(178, 34, 34)",floralwhite:"rgb(255, 250, 240)",forestgreen:"rgb( 34, 139, 34)",fuchsia:"rgb(255, 0, 255)",gainsboro:"rgb(220, 220, 220)",ghostwhite:"rgb(248, 248, 255)",gold:"rgb(255, 215, 0)",goldenrod:"rgb(218, 165, 32)",gray:"rgb(128, 128, 128)",grey:"rgb(128, 128, 128)",green:"rgb( 0, 128, 0)",greenyellow:"rgb(173, 255, 47)",honeydew:"rgb(240, 255, 240)",hotpink:"rgb(255, 105, 180)",indianred:"rgb(205, 92, 92)",indigo:"rgb( 75, 0, 130)",ivory:"rgb(255, 255, 240)",khaki:"rgb(240, 230, 140)",lavender:"rgb(230, 230, 250)",lavenderblush:"rgb(255, 240, 245)",lawngreen:"rgb(124, 252, 0)",lemonchiffon:"rgb(255, 250, 205)",lightblue:"rgb(173, 216, 230)",lightcoral:"rgb(240, 128, 128)",lightcyan:"rgb(224, 255, 255)",lightgoldenrodyellow:"rgb(250, 250, 210)",lightgray:"rgb(211, 211, 211)",lightgreen:"rgb(144, 238, 144)",lightgrey:"rgb(211, 211, 211)",lightpink:"rgb(255, 182, 193)",lightsalmon:"rgb(255, 160, 122)",lightseagreen:"rgb( 32, 178, 170)",lightskyblue:"rgb(135, 206, 250)",lightslategray:"rgb(119, 136, 153)",lightslategrey:"rgb(119, 136, 153)",lightsteelblue:"rgb(176, 196, 222)",lightyellow:"rgb(255, 255, 224)",lime:"rgb( 0, 255, 0)",limegreen:"rgb( 50, 205, 50)",linen:"rgb(250, 240, 230)",magenta:"rgb(255, 0, 255)",maroon:"rgb(128, 0, 0)",mediumaquamarine:"rgb(102, 205, 170)",mediumblue:"rgb( 0, 0, 205)",mediumorchid:"rgb(186, 85, 211)",mediumpurple:"rgb(147, 112, 219)",mediumseagreen:"rgb( 60, 179, 113)",mediumslateblue:"rgb(123, 104, 238)",mediumspringgreen:"rgb( 0, 250, 154)",mediumturquoise:"rgb( 72, 209, 204)",mediumvioletred:"rgb(199, 21, 133)",midnightblue:"rgb( 25, 25, 112)",mintcream:"rgb(245, 255, 250)",mistyrose:"rgb(255, 228, 225)",moccasin:"rgb(255, 228, 181)",navajowhite:"rgb(255, 222, 173)",navy:"rgb( 0, 0, 128)",oldlace:"rgb(253, 245, 230)",olive:"rgb(128, 128, 0)",olivedrab:"rgb(107, 142, 35)",orange:"rgb(255, 165, 0)",orangered:"rgb(255, 69, 0)",orchid:"rgb(218, 112, 214)",palegoldenrod:"rgb(238, 232, 170)",palegreen:"rgb(152, 251, 152)",paleturquoise:"rgb(175, 238, 238)",palevioletred:"rgb(219, 112, 147)",papayawhip:"rgb(255, 239, 213)",peachpuff:"rgb(255, 218, 185)",peru:"rgb(205, 133, 63)",pink:"rgb(255, 192, 203)",plum:"rgb(221, 160, 221)",powderblue:"rgb(176, 224, 230)",purple:"rgb(128, 0, 128)",red:"rgb(255, 0, 0)",rosybrown:"rgb(188, 143, 143)",royalblue:"rgb( 65, 105, 225)",saddlebrown:"rgb(139, 69, 19)",salmon:"rgb(250, 128, 114)",sandybrown:"rgb(244, 164, 96)",seagreen:"rgb( 46, 139, 87)",seashell:"rgb(255, 245, 238)",sienna:"rgb(160, 82, 45)",silver:"rgb(192, 192, 192)",skyblue:"rgb(135, 206, 235)",slateblue:"rgb(106, 90, 205)",slategray:"rgb(112, 128, 144)",slategrey:"rgb(112, 128, 144)",snow:"rgb(255, 250, 250)",springgreen:"rgb( 0, 255, 127)",steelblue:"rgb( 70, 130, 180)",tan:"rgb(210, 180, 140)",teal:"rgb( 0, 128, 128)",thistle:"rgb(216, 191, 216)",tomato:"rgb(255, 99, 71)",turquoise:"rgb( 64, 224, 208)",violet:"rgb(238, 130, 238)",wheat:"rgb(245, 222, 179)",white:"rgb(255, 255, 255)",whitesmoke:"rgb(245, 245, 245)",yellow:"rgb(255, 255, 0)",yellowgreen:"rgb(154, 205, 50)"};H.jqplot.AxisLabelRenderer=function(ab){H.jqplot.ElemContainer.call(this);this.axis;this.show=true;this.label="";this.fontFamily=null;this.fontSize=null;this.textColor=null;this._elem;this.escapeHTML=false;H.extend(true,this,ab)};H.jqplot.AxisLabelRenderer.prototype=new H.jqplot.ElemContainer();H.jqplot.AxisLabelRenderer.prototype.constructor=H.jqplot.AxisLabelRenderer;H.jqplot.AxisLabelRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.AxisLabelRenderer.prototype.draw=function(ab,ac){if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=H('<div style="position:absolute;" class="jqplot-'+this.axis+'-label"></div>');if(Number(this.label)){this._elem.css("white-space","nowrap")}if(!this.escapeHTML){this._elem.html(this.label)}else{this._elem.text(this.label)}if(this.fontFamily){this._elem.css("font-family",this.fontFamily)}if(this.fontSize){this._elem.css("font-size",this.fontSize)}if(this.textColor){this._elem.css("color",this.textColor)}return this._elem};H.jqplot.AxisLabelRenderer.prototype.pack=function(){};H.jqplot.AxisTickRenderer=function(ab){H.jqplot.ElemContainer.call(this);this.mark="outside";this.axis;this.showMark=true;this.showGridline=true;this.isMinorTick=false;this.size=4;this.markSize=6;this.show=true;this.showLabel=true;this.label=null;this.value=null;this._styles={};this.formatter=H.jqplot.DefaultTickFormatter;this.prefix="";this.suffix="";this.formatString="";this.fontFamily;this.fontSize;this.textColor;this.escapeHTML=false;this._elem;this._breakTick=false;H.extend(true,this,ab)};H.jqplot.AxisTickRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.AxisTickRenderer.prototype=new H.jqplot.ElemContainer();H.jqplot.AxisTickRenderer.prototype.constructor=H.jqplot.AxisTickRenderer;H.jqplot.AxisTickRenderer.prototype.setTick=function(ab,ad,ac){this.value=ab;this.axis=ad;if(ac){this.isMinorTick=true}return this};H.jqplot.AxisTickRenderer.prototype.draw=function(){if(this.label===null){this.label=this.prefix+this.formatter(this.formatString,this.value)+this.suffix}var ac={position:"absolute"};if(Number(this.label)){ac.whitSpace="nowrap"}if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=H(document.createElement("div"));this._elem.addClass("jqplot-"+this.axis+"-tick");if(!this.escapeHTML){this._elem.html(this.label)}else{this._elem.text(this.label)}this._elem.css(ac);for(var ab in this._styles){this._elem.css(ab,this._styles[ab])}if(this.fontFamily){this._elem.css("font-family",this.fontFamily)}if(this.fontSize){this._elem.css("font-size",this.fontSize)}if(this.textColor){this._elem.css("color",this.textColor)}if(this._breakTick){this._elem.addClass("jqplot-breakTick")}return this._elem};H.jqplot.DefaultTickFormatter=function(ab,ac){if(typeof ac=="number"){if(!ab){ab=H.jqplot.config.defaultTickFormatString}return H.jqplot.sprintf(ab,ac)}else{return String(ac)}};H.jqplot.PercentTickFormatter=function(ab,ac){if(typeof ac=="number"){ac=100*ac;if(!ab){ab=H.jqplot.config.defaultTickFormatString}return H.jqplot.sprintf(ab,ac)}else{return String(ac)}};H.jqplot.AxisTickRenderer.prototype.pack=function(){};H.jqplot.CanvasGridRenderer=function(){this.shadowRenderer=new H.jqplot.ShadowRenderer()};H.jqplot.CanvasGridRenderer.prototype.init=function(ac){this._ctx;H.extend(true,this,ac);var ab={lineJoin:"miter",lineCap:"round",fill:false,isarc:false,angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.shadowWidth,closePath:false,strokeStyle:this.shadowColor};this.renderer.shadowRenderer.init(ab)};H.jqplot.CanvasGridRenderer.prototype.createElement=function(ae){var ad;if(this._elem){if(H.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==r){ad=this._elem.get(0);window.G_vmlCanvasManager.uninitElement(ad);ad=null}this._elem.emptyForce();this._elem=null}ad=ae.canvasManager.getCanvas();var ab=this._plotDimensions.width;var ac=this._plotDimensions.height;ad.width=ab;ad.height=ac;this._elem=H(ad);this._elem.addClass("jqplot-grid-canvas");this._elem.css({position:"absolute",left:0,top:0});ad=ae.canvasManager.initCanvas(ad);this._top=this._offsets.top;this._bottom=ac-this._offsets.bottom;this._left=this._offsets.left;this._right=ab-this._offsets.right;this._width=this._right-this._left;this._height=this._bottom-this._top;ad=null;return this._elem};H.jqplot.CanvasGridRenderer.prototype.draw=function(){this._ctx=this._elem.get(0).getContext("2d");var am=this._ctx;var ap=this._axes;am.save();am.clearRect(0,0,this._plotDimensions.width,this._plotDimensions.height);am.fillStyle=this.backgroundColor||this.background;am.fillRect(this._left,this._top,this._width,this._height);am.save();am.lineJoin="miter";am.lineCap="butt";am.lineWidth=this.gridLineWidth;am.strokeStyle=this.gridLineColor;var at,ar,aj,ak;var ag=["xaxis","yaxis","x2axis","y2axis"];for(var aq=4;aq>0;aq--){var aw=ag[aq-1];var ab=ap[aw];var au=ab._ticks;var al=au.length;if(ab.show){if(ab.drawBaseline){var av={};if(ab.baselineWidth!==null){av.lineWidth=ab.baselineWidth}if(ab.baselineColor!==null){av.strokeStyle=ab.baselineColor}switch(aw){case"xaxis":ai(this._left,this._bottom,this._right,this._bottom,av);break;case"yaxis":ai(this._left,this._bottom,this._left,this._top,av);break;case"x2axis":ai(this._left,this._bottom,this._right,this._bottom,av);break;case"y2axis":ai(this._right,this._bottom,this._right,this._top,av);break}}for(var an=al;an>0;an--){var ah=au[an-1];if(ah.show){var ae=Math.round(ab.u2p(ah.value))+0.5;switch(aw){case"xaxis":if(ah.showGridline&&this.drawGridlines&&((!ah.isMinorTick&&ab.drawMajorGridlines)||(ah.isMinorTick&&ab.drawMinorGridlines))){ai(ae,this._top,ae,this._bottom)}if(ah.showMark&&ah.mark&&((!ah.isMinorTick&&ab.drawMajorTickMarks)||(ah.isMinorTick&&ab.drawMinorTickMarks))){aj=ah.markSize;ak=ah.mark;var ae=Math.round(ab.u2p(ah.value))+0.5;switch(ak){case"outside":at=this._bottom;ar=this._bottom+aj;break;case"inside":at=this._bottom-aj;ar=this._bottom;break;case"cross":at=this._bottom-aj;ar=this._bottom+aj;break;default:at=this._bottom;ar=this._bottom+aj;break}if(this.shadow){this.renderer.shadowRenderer.draw(am,[[ae,at],[ae,ar]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}ai(ae,at,ae,ar)}break;case"yaxis":if(ah.showGridline&&this.drawGridlines&&((!ah.isMinorTick&&ab.drawMajorGridlines)||(ah.isMinorTick&&ab.drawMinorGridlines))){ai(this._right,ae,this._left,ae)}if(ah.showMark&&ah.mark&&((!ah.isMinorTick&&ab.drawMajorTickMarks)||(ah.isMinorTick&&ab.drawMinorTickMarks))){aj=ah.markSize;ak=ah.mark;var ae=Math.round(ab.u2p(ah.value))+0.5;switch(ak){case"outside":at=this._left-aj;ar=this._left;break;case"inside":at=this._left;ar=this._left+aj;break;case"cross":at=this._left-aj;ar=this._left+aj;break;default:at=this._left-aj;ar=this._left;break}if(this.shadow){this.renderer.shadowRenderer.draw(am,[[at,ae],[ar,ae]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ai(at,ae,ar,ae,{strokeStyle:ab.borderColor})}break;case"x2axis":if(ah.showGridline&&this.drawGridlines&&((!ah.isMinorTick&&ab.drawMajorGridlines)||(ah.isMinorTick&&ab.drawMinorGridlines))){ai(ae,this._bottom,ae,this._top)}if(ah.showMark&&ah.mark&&((!ah.isMinorTick&&ab.drawMajorTickMarks)||(ah.isMinorTick&&ab.drawMinorTickMarks))){aj=ah.markSize;ak=ah.mark;var ae=Math.round(ab.u2p(ah.value))+0.5;switch(ak){case"outside":at=this._top-aj;ar=this._top;break;case"inside":at=this._top;ar=this._top+aj;break;case"cross":at=this._top-aj;ar=this._top+aj;break;default:at=this._top-aj;ar=this._top;break}if(this.shadow){this.renderer.shadowRenderer.draw(am,[[ae,at],[ae,ar]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}ai(ae,at,ae,ar)}break;case"y2axis":if(ah.showGridline&&this.drawGridlines&&((!ah.isMinorTick&&ab.drawMajorGridlines)||(ah.isMinorTick&&ab.drawMinorGridlines))){ai(this._left,ae,this._right,ae)}if(ah.showMark&&ah.mark&&((!ah.isMinorTick&&ab.drawMajorTickMarks)||(ah.isMinorTick&&ab.drawMinorTickMarks))){aj=ah.markSize;ak=ah.mark;var ae=Math.round(ab.u2p(ah.value))+0.5;switch(ak){case"outside":at=this._right;ar=this._right+aj;break;case"inside":at=this._right-aj;ar=this._right;break;case"cross":at=this._right-aj;ar=this._right+aj;break;default:at=this._right;ar=this._right+aj;break}if(this.shadow){this.renderer.shadowRenderer.draw(am,[[at,ae],[ar,ae]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ai(at,ae,ar,ae,{strokeStyle:ab.borderColor})}break;default:break}}}ah=null}ab=null;au=null}ag=["y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];for(var aq=7;aq>0;aq--){var ab=ap[ag[aq-1]];var au=ab._ticks;if(ab.show){var ac=au[ab.numberTicks-1];var af=au[0];var ad=ab.getLeft();var ao=[[ad,ac.getTop()+ac.getHeight()/2],[ad,af.getTop()+af.getHeight()/2+1]];if(this.shadow){this.renderer.shadowRenderer.draw(am,ao,{lineCap:"butt",fill:false,closePath:false})}ai(ao[0][0],ao[0][1],ao[1][0],ao[1][1],{lineCap:"butt",strokeStyle:ab.borderColor,lineWidth:ab.borderWidth});for(var an=au.length;an>0;an--){var ah=au[an-1];aj=ah.markSize;ak=ah.mark;var ae=Math.round(ab.u2p(ah.value))+0.5;if(ah.showMark&&ah.mark){switch(ak){case"outside":at=ad;ar=ad+aj;break;case"inside":at=ad-aj;ar=ad;break;case"cross":at=ad-aj;ar=ad+aj;break;default:at=ad;ar=ad+aj;break}ao=[[at,ae],[ar,ae]];if(this.shadow){this.renderer.shadowRenderer.draw(am,ao,{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}ai(at,ae,ar,ae,{strokeStyle:ab.borderColor})}ah=null}af=null}ab=null;au=null}am.restore();function ai(aB,aA,ay,ax,az){am.save();az=az||{};if(az.lineWidth==null||az.lineWidth!=0){H.extend(true,am,az);am.beginPath();am.moveTo(aB,aA);am.lineTo(ay,ax);am.stroke();am.restore()}}if(this.shadow){var ao=[[this._left,this._bottom],[this._right,this._bottom],[this._right,this._top]];this.renderer.shadowRenderer.draw(am,ao)}if(this.borderWidth!=0&&this.drawBorder){ai(this._left,this._top,this._right,this._top,{lineCap:"round",strokeStyle:ap.x2axis.borderColor,lineWidth:ap.x2axis.borderWidth});ai(this._right,this._top,this._right,this._bottom,{lineCap:"round",strokeStyle:ap.y2axis.borderColor,lineWidth:ap.y2axis.borderWidth});ai(this._right,this._bottom,this._left,this._bottom,{lineCap:"round",strokeStyle:ap.xaxis.borderColor,lineWidth:ap.xaxis.borderWidth});ai(this._left,this._bottom,this._left,this._top,{lineCap:"round",strokeStyle:ap.yaxis.borderColor,lineWidth:ap.yaxis.borderWidth})}am.restore();am=null;ap=null};H.jqplot.DivTitleRenderer=function(){};H.jqplot.DivTitleRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.DivTitleRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}var ae=this.renderer;var ad=document.createElement("div");this._elem=H(ad);this._elem.addClass("jqplot-title");if(!this.text){this.show=false;this._elem.height(0);this._elem.width(0)}else{if(this.text){var ab;if(this.color){ab=this.color}else{if(this.textColor){ab=this.textColor}}var ac={position:"absolute",top:"0px",left:"0px"};if(this._plotWidth){ac.width=this._plotWidth+"px"}if(this.fontSize){ac.fontSize=this.fontSize}if(typeof this.textAlign==="string"){ac.textAlign=this.textAlign}else{ac.textAlign="center"}if(ab){ac.color=ab}if(this.paddingBottom){ac.paddingBottom=this.paddingBottom}if(this.fontFamily){ac.fontFamily=this.fontFamily}this._elem.css(ac);if(this.escapeHtml){this._elem.text(this.text)}else{this._elem.html(this.text)}}}ad=null;return this._elem};H.jqplot.DivTitleRenderer.prototype.pack=function(){};var o=0.1;H.jqplot.LinePattern=function(ap,ak){var aj={dotted:[o,H.jqplot.config.dotGapLength],dashed:[H.jqplot.config.dashLength,H.jqplot.config.gapLength],solid:null};if(typeof ak==="string"){if(ak[0]==="."||ak[0]==="-"){var aq=ak;ak=[];for(var ai=0,af=aq.length;ai<af;ai++){if(aq[ai]==="."){ak.push(o)}else{if(aq[ai]==="-"){ak.push(H.jqplot.config.dashLength)}else{continue}}ak.push(H.jqplot.config.gapLength)}}else{ak=aj[ak]}}if(!(ak&&ak.length)){return ap}var ae=0;var al=ak[0];var an=0;var am=0;var ah=0;var ab=0;var ao=function(ar,at){ap.moveTo(ar,at);an=ar;am=at;ah=ar;ab=at};var ad=function(ar,ay){var aw=ap.lineWidth;var au=ar-an;var at=ay-am;var av=Math.sqrt(au*au+at*at);if((av>0)&&(aw>0)){au/=av;at/=av;while(true){var ax=aw*al;if(ax<av){an+=ax*au;am+=ax*at;if((ae&1)==0){ap.lineTo(an,am)}else{ap.moveTo(an,am)}av-=ax;ae++;if(ae>=ak.length){ae=0}al=ak[ae]}else{an=ar;am=ay;if((ae&1)==0){ap.lineTo(an,am)}else{ap.moveTo(an,am)}al-=av/aw;break}}}};var ac=function(){ap.beginPath()};var ag=function(){ad(ah,ab)};return{moveTo:ao,lineTo:ad,beginPath:ac,closePath:ag}};H.jqplot.LineRenderer=function(){this.shapeRenderer=new H.jqplot.ShapeRenderer();this.shadowRenderer=new H.jqplot.ShadowRenderer()};H.jqplot.LineRenderer.prototype.init=function(ac,ah){ac=ac||{};this._type="line";this.renderer.animation={show:false,direction:"left",speed:2500,_supported:true};this.renderer.smooth=false;this.renderer.tension=null;this.renderer.constrainSmoothing=true;this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];this.renderer.bandData=[];this.renderer.bands={show:false,hiData:[],lowData:[],color:this.color,showLines:false,fill:true,fillColor:null,_min:null,_max:null,interval:"3%"};var af={highlightMouseOver:ac.highlightMouseOver,highlightMouseDown:ac.highlightMouseDown,highlightColor:ac.highlightColor};delete (ac.highlightMouseOver);delete (ac.highlightMouseDown);delete (ac.highlightColor);H.extend(true,this.renderer,ac);this.renderer.options=ac;if(this.renderer.bandData.length>1&&(!ac.bands||ac.bands.show==null)){this.renderer.bands.show=true}else{if(ac.bands&&ac.bands.show==null&&ac.bands.interval!=null){this.renderer.bands.show=true}}if(this.fill){this.renderer.bands.show=false}if(this.renderer.bands.show){this.renderer.initBands.call(this,this.renderer.options,ah)}if(this._stack){this.renderer.smooth=false}var ag={lineJoin:this.lineJoin,lineCap:this.lineCap,fill:this.fill,isarc:false,strokeStyle:this.color,fillStyle:this.fillColor,lineWidth:this.lineWidth,linePattern:this.linePattern,closePath:this.fill};this.renderer.shapeRenderer.init(ag);var ad=ac.shadowOffset;if(ad==null){if(this.lineWidth>2.5){ad=1.25*(1+(Math.atan((this.lineWidth/2.5))/0.785398163-1)*0.6)}else{ad=1.25*Math.atan((this.lineWidth/2.5))/0.785398163}}var ab={lineJoin:this.lineJoin,lineCap:this.lineCap,fill:this.fill,isarc:false,angle:this.shadowAngle,offset:ad,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.lineWidth,linePattern:this.linePattern,closePath:this.fill};this.renderer.shadowRenderer.init(ab);this._areaPoints=[];this._boundingBox=[[],[]];if(!this.isTrendline&&this.fill||this.renderer.bands.show){this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColor=null;if(af.highlightMouseDown&&af.highlightMouseOver==null){af.highlightMouseOver=false}H.extend(true,this,{highlightMouseOver:af.highlightMouseOver,highlightMouseDown:af.highlightMouseDown,highlightColor:af.highlightColor});if(!this.highlightColor){var ae=(this.renderer.bands.show)?this.renderer.bands.fillColor:this.fillColor;this.highlightColor=H.jqplot.computeHighlightColors(ae)}if(this.highlighter){this.highlighter.show=false}}if(!this.isTrendline&&ah){ah.plugins.lineRenderer={};ah.postInitHooks.addOnce(v);ah.postDrawHooks.addOnce(Z);ah.eventListenerHooks.addOnce("jqplotMouseMove",g);ah.eventListenerHooks.addOnce("jqplotMouseDown",d);ah.eventListenerHooks.addOnce("jqplotMouseUp",Y);ah.eventListenerHooks.addOnce("jqplotClick",f);ah.eventListenerHooks.addOnce("jqplotRightClick",p)}};H.jqplot.LineRenderer.prototype.initBands=function(ae,ao){var af=ae.bandData||[];var ah=this.renderer.bands;ah.hiData=[];ah.lowData=[];var av=this.data;ah._max=null;ah._min=null;if(af.length==2){if(H.isArray(af[0][0])){var ai;var ab=0,al=0;for(var ap=0,am=af[0].length;ap<am;ap++){ai=af[0][ap];if((ai[1]!=null&&ai[1]>ah._max)||ah._max==null){ah._max=ai[1]}if((ai[1]!=null&&ai[1]<ah._min)||ah._min==null){ah._min=ai[1]}}for(var ap=0,am=af[1].length;ap<am;ap++){ai=af[1][ap];if((ai[1]!=null&&ai[1]>ah._max)||ah._max==null){ah._max=ai[1];al=1}if((ai[1]!=null&&ai[1]<ah._min)||ah._min==null){ah._min=ai[1];ab=1}}if(al===ab){ah.show=false}ah.hiData=af[al];ah.lowData=af[ab]}else{if(af[0].length===av.length&&af[1].length===av.length){var ad=(af[0][0]>af[1][0])?0:1;var aw=(ad)?0:1;for(var ap=0,am=av.length;ap<am;ap++){ah.hiData.push([av[ap][0],af[ad][ap]]);ah.lowData.push([av[ap][0],af[aw][ap]])}}else{ah.show=false}}}else{if(af.length>2&&!H.isArray(af[0][0])){var ad=(af[0][0]>af[0][1])?0:1;var aw=(ad)?0:1;for(var ap=0,am=af.length;ap<am;ap++){ah.hiData.push([av[ap][0],af[ap][ad]]);ah.lowData.push([av[ap][0],af[ap][aw]])}}else{var ak=ah.interval;var au=null;var at=null;var ac=null;var an=null;if(H.isArray(ak)){au=ak[0];at=ak[1]}else{au=ak}if(isNaN(au)){if(au.charAt(au.length-1)==="%"){ac="multiply";au=parseFloat(au)/100+1}}else{au=parseFloat(au);ac="add"}if(at!==null&&isNaN(at)){if(at.charAt(at.length-1)==="%"){an="multiply";at=parseFloat(at)/100+1}}else{if(at!==null){at=parseFloat(at);an="add"}}if(au!==null){if(at===null){at=-au;an=ac;if(an==="multiply"){at+=2}}if(au<at){var aq=au;au=at;at=aq;aq=ac;ac=an;an=aq}for(var ap=0,am=av.length;ap<am;ap++){switch(ac){case"add":ah.hiData.push([av[ap][0],av[ap][1]+au]);break;case"multiply":ah.hiData.push([av[ap][0],av[ap][1]*au]);break}switch(an){case"add":ah.lowData.push([av[ap][0],av[ap][1]+at]);break;case"multiply":ah.lowData.push([av[ap][0],av[ap][1]*at]);break}}}else{ah.show=false}}}var ag=ah.hiData;var aj=ah.lowData;for(var ap=0,am=ag.length;ap<am;ap++){if((ag[ap][1]!=null&&ag[ap][1]>ah._max)||ah._max==null){ah._max=ag[ap][1]}}for(var ap=0,am=aj.length;ap<am;ap++){if((aj[ap][1]!=null&&aj[ap][1]<ah._min)||ah._min==null){ah._min=aj[ap][1]}}if(ah.fillColor===null){var ar=H.jqplot.getColorComponents(ah.color);ar[3]=ar[3]*0.5;ah.fillColor="rgba("+ar[0]+", "+ar[1]+", "+ar[2]+", "+ar[3]+")"}};function G(ac,ab){return(3.4182054+ab)*Math.pow(ac,-0.3534992)}function k(ad,ac){var ab=Math.sqrt(Math.pow((ac[0]-ad[0]),2)+Math.pow((ac[1]-ad[1]),2));return 5.7648*Math.log(ab)+7.4456}function w(ab){var ac=(Math.exp(2*ab)-1)/(Math.exp(2*ab)+1);return ac}function F(aD){var am=this.renderer.smooth;var ax=this.canvas.getWidth();var ah=this._xaxis.series_p2u;var aA=this._yaxis.series_p2u;var az=null;var ag=null;var at=aD.length/ax;var ad=[];var ar=[];if(!isNaN(parseFloat(am))){az=parseFloat(am)}else{az=G(at,0.5)}var ap=[];var ae=[];for(var ay=0,au=aD.length;ay<au;ay++){ap.push(aD[ay][1]);ae.push(aD[ay][0])}function ao(aE,aF){if(aE-aF==0){return Math.pow(10,10)}else{return aE-aF}}var aq,al,ak,aj;var ab=aD.length-1;for(var af=1,av=aD.length;af<av;af++){var ac=[];var an=[];for(var aw=0;aw<2;aw++){var ay=af-1+aw;if(ay==0||ay==ab){ac[aw]=Math.pow(10,10)}else{if(ap[ay+1]-ap[ay]==0||ap[ay]-ap[ay-1]==0){ac[aw]=0}else{if(((ae[ay+1]-ae[ay])/(ap[ay+1]-ap[ay])+(ae[ay]-ae[ay-1])/(ap[ay]-ap[ay-1]))==0){ac[aw]=0}else{if((ap[ay+1]-ap[ay])*(ap[ay]-ap[ay-1])<0){ac[aw]=0}else{ac[aw]=2/(ao(ae[ay+1],ae[ay])/(ap[ay+1]-ap[ay])+ao(ae[ay],ae[ay-1])/(ap[ay]-ap[ay-1]))}}}}}if(af==1){ac[0]=3/2*(ap[1]-ap[0])/ao(ae[1],ae[0])-ac[1]/2}else{if(af==ab){ac[1]=3/2*(ap[ab]-ap[ab-1])/ao(ae[ab],ae[ab-1])-ac[0]/2}}an[0]=-2*(ac[1]+2*ac[0])/ao(ae[af],ae[af-1])+6*(ap[af]-ap[af-1])/Math.pow(ao(ae[af],ae[af-1]),2);an[1]=2*(2*ac[1]+ac[0])/ao(ae[af],ae[af-1])-6*(ap[af]-ap[af-1])/Math.pow(ao(ae[af],ae[af-1]),2);aj=1/6*(an[1]-an[0])/ao(ae[af],ae[af-1]);ak=1/2*(ae[af]*an[0]-ae[af-1]*an[1])/ao(ae[af],ae[af-1]);al=(ap[af]-ap[af-1]-ak*(Math.pow(ae[af],2)-Math.pow(ae[af-1],2))-aj*(Math.pow(ae[af],3)-Math.pow(ae[af-1],3)))/ao(ae[af],ae[af-1]);aq=ap[af-1]-al*ae[af-1]-ak*Math.pow(ae[af-1],2)-aj*Math.pow(ae[af-1],3);var aC=(ae[af]-ae[af-1])/az;var aB,ai;for(var aw=0,au=az;aw<au;aw++){aB=[];ai=ae[af-1]+aw*aC;aB.push(ai);aB.push(aq+al*ai+ak*Math.pow(ai,2)+aj*Math.pow(ai,3));ad.push(aB);ar.push([ah(aB[0]),aA(aB[1])])}}ad.push(aD[ay]);ar.push([ah(aD[ay][0]),aA(aD[ay][1])]);return[ad,ar]}function B(aj){var ai=this.renderer.smooth;var aO=this.renderer.tension;var ab=this.canvas.getWidth();var aB=this._xaxis.series_p2u;var ak=this._yaxis.series_p2u;var aC=null;var aD=null;var aN=null;var aI=null;var aG=null;var am=null;var aL=null;var ag=null;var aE,aF,ax,aw,au,ar;var ae,ac,ao,an;var av,at,aH;var ap=[];var ad=[];var af=aj.length/ab;var aM,aq,az,aA,ay;var al=[];var ah=[];if(!isNaN(parseFloat(ai))){aC=parseFloat(ai)}else{aC=G(af,0.5)}if(!isNaN(parseFloat(aO))){aO=parseFloat(aO)}for(var aK=0,aJ=aj.length-1;aK<aJ;aK++){if(aO===null){am=Math.abs((aj[aK+1][1]-aj[aK][1])/(aj[aK+1][0]-aj[aK][0]));aM=0.3;aq=0.6;az=(aq-aM)/2;aA=2.5;ay=-1.4;ag=am/aA+ay;aI=az*w(ag)-az*w(ay)+aM;if(aK>0){aL=Math.abs((aj[aK][1]-aj[aK-1][1])/(aj[aK][0]-aj[aK-1][0]))}ag=aL/aA+ay;aG=az*w(ag)-az*w(ay)+aM;aN=(aI+aG)/2}else{aN=aO}for(aE=0;aE<aC;aE++){aF=aE/aC;ax=(1+2*aF)*Math.pow((1-aF),2);aw=aF*Math.pow((1-aF),2);au=Math.pow(aF,2)*(3-2*aF);ar=Math.pow(aF,2)*(aF-1);if(aj[aK-1]){ae=aN*(aj[aK+1][0]-aj[aK-1][0]);ac=aN*(aj[aK+1][1]-aj[aK-1][1])}else{ae=aN*(aj[aK+1][0]-aj[aK][0]);ac=aN*(aj[aK+1][1]-aj[aK][1])}if(aj[aK+2]){ao=aN*(aj[aK+2][0]-aj[aK][0]);an=aN*(aj[aK+2][1]-aj[aK][1])}else{ao=aN*(aj[aK+1][0]-aj[aK][0]);an=aN*(aj[aK+1][1]-aj[aK][1])}av=ax*aj[aK][0]+au*aj[aK+1][0]+aw*ae+ar*ao;at=ax*aj[aK][1]+au*aj[aK+1][1]+aw*ac+ar*an;aH=[av,at];al.push(aH);ah.push([aB(av),ak(at)])}}al.push(aj[aJ]);ah.push([aB(aj[aJ][0]),ak(aj[aJ][1])]);return[al,ah]}H.jqplot.LineRenderer.prototype.setGridData=function(aj){var af=this._xaxis.series_u2p;var ab=this._yaxis.series_u2p;var ag=this._plotData;var ak=this._prevPlotData;this.gridData=[];this._prevGridData=[];this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];var ae=this.renderer.bands;var ac=false;for(var ah=0,ad=ag.length;ah<ad;ah++){if(ag[ah][0]!=null&&ag[ah][1]!=null){this.gridData.push([af.call(this._xaxis,ag[ah][0]),ab.call(this._yaxis,ag[ah][1])])}else{if(ag[ah][0]==null){ac=true;this.gridData.push([null,ab.call(this._yaxis,ag[ah][1])])}else{if(ag[ah][1]==null){ac=true;this.gridData.push([af.call(this._xaxis,ag[ah][0]),null])}}}if(ak[ah]!=null&&ak[ah][0]!=null&&ak[ah][1]!=null){this._prevGridData.push([af.call(this._xaxis,ak[ah][0]),ab.call(this._yaxis,ak[ah][1])])}else{if(ak[ah]!=null&&ak[ah][0]==null){this._prevGridData.push([null,ab.call(this._yaxis,ak[ah][1])])}else{if(ak[ah]!=null&&ak[ah][0]!=null&&ak[ah][1]==null){this._prevGridData.push([af.call(this._xaxis,ak[ah][0]),null])}}}}if(ac){this.renderer.smooth=false;if(this._type==="line"){ae.show=false}}if(this._type==="line"&&ae.show){for(var ah=0,ad=ae.hiData.length;ah<ad;ah++){this.renderer._hiBandGridData.push([af.call(this._xaxis,ae.hiData[ah][0]),ab.call(this._yaxis,ae.hiData[ah][1])])}for(var ah=0,ad=ae.lowData.length;ah<ad;ah++){this.renderer._lowBandGridData.push([af.call(this._xaxis,ae.lowData[ah][0]),ab.call(this._yaxis,ae.lowData[ah][1])])}}if(this._type==="line"&&this.renderer.smooth&&this.gridData.length>2){var ai;if(this.renderer.constrainSmoothing){ai=F.call(this,this.gridData);this.renderer._smoothedData=ai[0];this.renderer._smoothedPlotData=ai[1];if(ae.show){ai=F.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ai[0];ai=F.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ai[0]}ai=null}else{ai=B.call(this,this.gridData);this.renderer._smoothedData=ai[0];this.renderer._smoothedPlotData=ai[1];if(ae.show){ai=B.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=ai[0];ai=B.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=ai[0]}ai=null}}};H.jqplot.LineRenderer.prototype.makeGridData=function(ai,ak){var ag=this._xaxis.series_u2p;var ab=this._yaxis.series_u2p;var al=[];var ad=[];this.renderer._smoothedData=[];this.renderer._smoothedPlotData=[];this.renderer._hiBandGridData=[];this.renderer._lowBandGridData=[];this.renderer._hiBandSmoothedData=[];this.renderer._lowBandSmoothedData=[];var af=this.renderer.bands;var ac=false;for(var ah=0;ah<ai.length;ah++){if(ai[ah][0]!=null&&ai[ah][1]!=null){al.push([ag.call(this._xaxis,ai[ah][0]),ab.call(this._yaxis,ai[ah][1])])}else{if(ai[ah][0]==null){ac=true;al.push([null,ab.call(this._yaxis,ai[ah][1])])}else{if(ai[ah][1]==null){ac=true;al.push([ag.call(this._xaxis,ai[ah][0]),null])}}}}if(ac){this.renderer.smooth=false;if(this._type==="line"){af.show=false}}if(this._type==="line"&&af.show){for(var ah=0,ae=af.hiData.length;ah<ae;ah++){this.renderer._hiBandGridData.push([ag.call(this._xaxis,af.hiData[ah][0]),ab.call(this._yaxis,af.hiData[ah][1])])}for(var ah=0,ae=af.lowData.length;ah<ae;ah++){this.renderer._lowBandGridData.push([ag.call(this._xaxis,af.lowData[ah][0]),ab.call(this._yaxis,af.lowData[ah][1])])}}if(this._type==="line"&&this.renderer.smooth&&al.length>2){var aj;if(this.renderer.constrainSmoothing){aj=F.call(this,al);this.renderer._smoothedData=aj[0];this.renderer._smoothedPlotData=aj[1];if(af.show){aj=F.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=aj[0];aj=F.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=aj[0]}aj=null}else{aj=B.call(this,al);this.renderer._smoothedData=aj[0];this.renderer._smoothedPlotData=aj[1];if(af.show){aj=B.call(this,this.renderer._hiBandGridData);this.renderer._hiBandSmoothedData=aj[0];aj=B.call(this,this.renderer._lowBandGridData);this.renderer._lowBandSmoothedData=aj[0]}aj=null}}return al};H.jqplot.LineRenderer.prototype.draw=function(aq,aC,ac,av){var aw;var ak=H.extend(true,{},ac);var ae=(ak.shadow!=r)?ak.shadow:this.shadow;var aD=(ak.showLine!=r)?ak.showLine:this.showLine;var au=(ak.fill!=r)?ak.fill:this.fill;var ab=(ak.fillAndStroke!=r)?ak.fillAndStroke:this.fillAndStroke;var al,ar,ao,ay;aq.save();if(aC.length){if(aD){if(au){if(this.fillToZero){var az=this.negativeColor;if(!this.useNegativeColors){az=ak.fillStyle}var ai=false;var aj=ak.fillStyle;if(ab){var aB=aC.slice(0)}if(this.index==0||!this._stack){var ap=[];var aF=(this.renderer.smooth)?this.renderer._smoothedPlotData:this._plotData;this._areaPoints=[];var aA=this._yaxis.series_u2p(this.fillToValue);var ad=this._xaxis.series_u2p(this.fillToValue);ak.closePath=true;if(this.fillAxis=="y"){ap.push([aC[0][0],aA]);this._areaPoints.push([aC[0][0],aA]);for(var aw=0;aw<aC.length-1;aw++){ap.push(aC[aw]);this._areaPoints.push(aC[aw]);if(aF[aw][1]*aF[aw+1][1]<0){if(aF[aw][1]<0){ai=true;ak.fillStyle=az}else{ai=false;ak.fillStyle=aj}var ah=aC[aw][0]+(aC[aw+1][0]-aC[aw][0])*(aA-aC[aw][1])/(aC[aw+1][1]-aC[aw][1]);ap.push([ah,aA]);this._areaPoints.push([ah,aA]);if(ae){this.renderer.shadowRenderer.draw(aq,ap,ak)}this.renderer.shapeRenderer.draw(aq,ap,ak);ap=[[ah,aA]]}}if(aF[aC.length-1][1]<0){ai=true;ak.fillStyle=az}else{ai=false;ak.fillStyle=aj}ap.push(aC[aC.length-1]);this._areaPoints.push(aC[aC.length-1]);ap.push([aC[aC.length-1][0],aA]);this._areaPoints.push([aC[aC.length-1][0],aA])}if(ae){this.renderer.shadowRenderer.draw(aq,ap,ak)}this.renderer.shapeRenderer.draw(aq,ap,ak)}else{var an=this._prevGridData;for(var aw=an.length;aw>0;aw--){aC.push(an[aw-1])}if(ae){this.renderer.shadowRenderer.draw(aq,aC,ak)}this._areaPoints=aC;this.renderer.shapeRenderer.draw(aq,aC,ak)}}else{if(ab){var aB=aC.slice(0)}if(this.index==0||!this._stack){var af=aq.canvas.height;aC.unshift([aC[0][0],af]);var ax=aC.length;aC.push([aC[ax-1][0],af])}else{var an=this._prevGridData;for(var aw=an.length;aw>0;aw--){aC.push(an[aw-1])}}this._areaPoints=aC;if(ae){this.renderer.shadowRenderer.draw(aq,aC,ak)}this.renderer.shapeRenderer.draw(aq,aC,ak)}if(ab){var at=H.extend(true,{},ak,{fill:false,closePath:false});this.renderer.shapeRenderer.draw(aq,aB,at);if(this.markerRenderer.show){if(this.renderer.smooth){aB=this.gridData}for(aw=0;aw<aB.length;aw++){this.markerRenderer.draw(aB[aw][0],aB[aw][1],aq,ak.markerOptions)}}}}else{if(this.renderer.bands.show){var ag;var aE=H.extend(true,{},ak);if(this.renderer.bands.showLines){ag=(this.renderer.smooth)?this.renderer._hiBandSmoothedData:this.renderer._hiBandGridData;this.renderer.shapeRenderer.draw(aq,ag,ak);ag=(this.renderer.smooth)?this.renderer._lowBandSmoothedData:this.renderer._lowBandGridData;this.renderer.shapeRenderer.draw(aq,ag,aE)}if(this.renderer.bands.fill){if(this.renderer.smooth){ag=this.renderer._hiBandSmoothedData.concat(this.renderer._lowBandSmoothedData.reverse())}else{ag=this.renderer._hiBandGridData.concat(this.renderer._lowBandGridData.reverse())}this._areaPoints=ag;aE.closePath=true;aE.fill=true;aE.fillStyle=this.renderer.bands.fillColor;this.renderer.shapeRenderer.draw(aq,ag,aE)}}if(ae){this.renderer.shadowRenderer.draw(aq,aC,ak)}this.renderer.shapeRenderer.draw(aq,aC,ak)}}var al=ao=ar=ay=null;for(aw=0;aw<this._areaPoints.length;aw++){var am=this._areaPoints[aw];if(al>am[0]||al==null){al=am[0]}if(ay<am[1]||ay==null){ay=am[1]}if(ao<am[0]||ao==null){ao=am[0]}if(ar>am[1]||ar==null){ar=am[1]}}if(this.type==="line"&&this.renderer.bands.show){ay=this._yaxis.series_u2p(this.renderer.bands._min);ar=this._yaxis.series_u2p(this.renderer.bands._max)}this._boundingBox=[[al,ay],[ao,ar]];if(this.markerRenderer.show&&!au){if(this.renderer.smooth){aC=this.gridData}for(aw=0;aw<aC.length;aw++){if(aC[aw][0]!=null&&aC[aw][1]!=null){this.markerRenderer.draw(aC[aw][0],aC[aw][1],aq,ak.markerOptions)}}}}aq.restore()};H.jqplot.LineRenderer.prototype.drawShadow=function(ab,ad,ac){};function v(ae,ad,ab){for(var ac=0;ac<this.series.length;ac++){if(this.series[ac].renderer.constructor==H.jqplot.LineRenderer){if(this.series[ac].highlightMouseOver){this.series[ac].highlightMouseDown=false}}}}function Z(){if(this.plugins.lineRenderer&&this.plugins.lineRenderer.highlightCanvas){this.plugins.lineRenderer.highlightCanvas.resetCanvas();this.plugins.lineRenderer.highlightCanvas=null}this.plugins.lineRenderer.highlightedSeriesIndex=null;this.plugins.lineRenderer.highlightCanvas=new H.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.lineRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-lineRenderer-highlight-canvas",this._plotDimensions,this));this.plugins.lineRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(ab){V(ab.data.plot)})}function X(ah,ag,ae,ad){var ac=ah.series[ag];var ab=ah.plugins.lineRenderer.highlightCanvas;ab._ctx.clearRect(0,0,ab._ctx.canvas.width,ab._ctx.canvas.height);ac._highlightedPoint=ae;ah.plugins.lineRenderer.highlightedSeriesIndex=ag;var af={fillStyle:ac.highlightColor};if(ac.type==="line"&&ac.renderer.bands.show){af.fill=true;af.closePath=true}ac.renderer.shapeRenderer.draw(ab._ctx,ad,af);ab=null}function V(ad){var ab=ad.plugins.lineRenderer.highlightCanvas;ab._ctx.clearRect(0,0,ab._ctx.canvas.width,ab._ctx.canvas.height);for(var ac=0;ac<ad.series.length;ac++){ad.series[ac]._highlightedPoint=null}ad.plugins.lineRenderer.highlightedSeriesIndex=null;ad.target.trigger("jqplotDataUnhighlight");ab=null}function g(af,ae,ai,ah,ag){if(ah){var ad=[ah.seriesIndex,ah.pointIndex,ah.data];var ac=jQuery.Event("jqplotDataMouseOver");ac.pageX=af.pageX;ac.pageY=af.pageY;ag.target.trigger(ac,ad);if(ag.series[ad[0]].highlightMouseOver&&!(ad[0]==ag.plugins.lineRenderer.highlightedSeriesIndex)){var ab=jQuery.Event("jqplotDataHighlight");ab.which=af.which;ab.pageX=af.pageX;ab.pageY=af.pageY;ag.target.trigger(ab,ad);X(ag,ah.seriesIndex,ah.pointIndex,ah.points)}}else{if(ah==null){V(ag)}}}function d(ae,ad,ah,ag,af){if(ag){var ac=[ag.seriesIndex,ag.pointIndex,ag.data];if(af.series[ac[0]].highlightMouseDown&&!(ac[0]==af.plugins.lineRenderer.highlightedSeriesIndex)){var ab=jQuery.Event("jqplotDataHighlight");ab.which=ae.which;ab.pageX=ae.pageX;ab.pageY=ae.pageY;af.target.trigger(ab,ac);X(af,ag.seriesIndex,ag.pointIndex,ag.points)}}else{if(ag==null){V(af)}}}function Y(ad,ac,ag,af,ae){var ab=ae.plugins.lineRenderer.highlightedSeriesIndex;if(ab!=null&&ae.series[ab].highlightMouseDown){V(ae)}}function f(ae,ad,ah,ag,af){if(ag){var ac=[ag.seriesIndex,ag.pointIndex,ag.data];var ab=jQuery.Event("jqplotDataClick");ab.which=ae.which;ab.pageX=ae.pageX;ab.pageY=ae.pageY;af.target.trigger(ab,ac)}}function p(af,ae,ai,ah,ag){if(ah){var ad=[ah.seriesIndex,ah.pointIndex,ah.data];var ab=ag.plugins.lineRenderer.highlightedSeriesIndex;if(ab!=null&&ag.series[ab].highlightMouseDown){V(ag)}var ac=jQuery.Event("jqplotDataRightClick");ac.which=af.which;ac.pageX=af.pageX;ac.pageY=af.pageY;ag.target.trigger(ac,ad)}}H.jqplot.LinearAxisRenderer=function(){};H.jqplot.LinearAxisRenderer.prototype.init=function(ab){this.breakPoints=null;this.breakTickLabel="&asymp;";this.drawBaseline=true;this.baselineWidth=null;this.baselineColor=null;this.forceTickAt0=false;this.forceTickAt100=false;this.tickInset=0;this.minorTicks=0;this.alignTicks=false;this._autoFormatString="";this._overrideFormatString=false;this._scalefact=1;H.extend(true,this,ab);if(this.breakPoints){if(!H.isArray(this.breakPoints)){this.breakPoints=null}else{if(this.breakPoints.length<2||this.breakPoints[1]<=this.breakPoints[0]){this.breakPoints=null}}}if(this.numberTicks!=null&&this.numberTicks<2){this.numberTicks=2}this.resetDataBounds()};H.jqplot.LinearAxisRenderer.prototype.draw=function(ab,ai){if(this.show){this.renderer.createTicks.call(this,ai);var ah=0;var ac;if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=H(document.createElement("div"));this._elem.addClass("jqplot-axis jqplot-"+this.name);this._elem.css("position","absolute");if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var ag=this._label.draw(ab,ai);ag.appendTo(this._elem);ag=null}var af=this._ticks;var ae;for(var ad=0;ad<af.length;ad++){ae=af[ad];if(ae.show&&ae.showLabel&&(!ae.isMinorTick||this.showMinorTicks)){this._elem.append(ae.draw(ab,ai))}}ae=null;af=null}return this._elem};H.jqplot.LinearAxisRenderer.prototype.reset=function(){this.min=this._options.min;this.max=this._options.max;this.tickInterval=this._options.tickInterval;this.numberTicks=this._options.numberTicks;this._autoFormatString="";if(this._overrideFormatString&&this.tickOptions&&this.tickOptions.formatString){this.tickOptions.formatString=""}};H.jqplot.LinearAxisRenderer.prototype.set=function(){var ai=0;var ad;var ac=0;var ah=0;var ab=(this._label==null)?false:this._label.show;if(this.show){var ag=this._ticks;var af;for(var ae=0;ae<ag.length;ae++){af=ag[ae];if(!af._breakTick&&af.show&&af.showLabel&&(!af.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){ad=af._elem.outerHeight(true)}else{ad=af._elem.outerWidth(true)}if(ad>ai){ai=ad}}}af=null;ag=null;if(ab){ac=this._label._elem.outerWidth(true);ah=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){ai=ai+ah;this._elem.css({height:ai+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){ai=ai+ah;this._elem.css({height:ai+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){ai=ai+ac;this._elem.css({width:ai+"px",left:"0px",top:"0px"});if(ab&&this._label.constructor==H.jqplot.AxisLabelRenderer){this._label._elem.css("width",ac+"px")}}else{ai=ai+ac;this._elem.css({width:ai+"px",right:"0px",top:"0px"});if(ab&&this._label.constructor==H.jqplot.AxisLabelRenderer){this._label._elem.css("width",ac+"px")}}}}}};H.jqplot.LinearAxisRenderer.prototype.createTicks=function(ad){var aN=this._ticks;var aE=this.ticks;var at=this.name;var av=this._dataBounds;var ab=(this.name.charAt(0)==="x")?this._plotDimensions.width:this._plotDimensions.height;var ah;var a0,aC;var aj,ai;var aY,aU;var aB=this.min;var aZ=this.max;var aQ=this.numberTicks;var a4=this.tickInterval;var ag=30;this._scalefact=(Math.max(ab,ag+1)-ag)/300;if(aE.length){for(aU=0;aU<aE.length;aU++){var aI=aE[aU];var aO=new this.tickRenderer(this.tickOptions);if(H.isArray(aI)){aO.value=aI[0];if(this.breakPoints){if(aI[0]==this.breakPoints[0]){aO.label=this.breakTickLabel;aO._breakTick=true;aO.showGridline=false;aO.showMark=false}else{if(aI[0]>this.breakPoints[0]&&aI[0]<=this.breakPoints[1]){aO.show=false;aO.showGridline=false;aO.label=aI[1]}else{aO.label=aI[1]}}}else{aO.label=aI[1]}aO.setTick(aI[0],this.name);this._ticks.push(aO)}else{if(H.isPlainObject(aI)){H.extend(true,aO,aI);aO.axis=this.name;this._ticks.push(aO)}else{aO.value=aI;if(this.breakPoints){if(aI==this.breakPoints[0]){aO.label=this.breakTickLabel;aO._breakTick=true;aO.showGridline=false;aO.showMark=false}else{if(aI>this.breakPoints[0]&&aI<=this.breakPoints[1]){aO.show=false;aO.showGridline=false}}}aO.setTick(aI,this.name);this._ticks.push(aO)}}}this.numberTicks=aE.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.tickInterval=(this.max-this.min)/(this.numberTicks-1)}else{if(at=="xaxis"||at=="x2axis"){ab=this._plotDimensions.width}else{ab=this._plotDimensions.height}var aq=this.numberTicks;if(this.alignTicks){if(this.name==="x2axis"&&ad.axes.xaxis.show){aq=ad.axes.xaxis.numberTicks}else{if(this.name.charAt(0)==="y"&&this.name!=="yaxis"&&this.name!=="yMidAxis"&&ad.axes.yaxis.show){aq=ad.axes.yaxis.numberTicks}}}a0=((this.min!=null)?this.min:av.min);aC=((this.max!=null)?this.max:av.max);var ao=aC-a0;var aM,ar;var am;if(this.tickOptions==null||!this.tickOptions.formatString){this._overrideFormatString=true}if(this.min==null||this.max==null&&this.tickInterval==null&&!this.autoscale){if(this.forceTickAt0){if(a0>0){a0=0}if(aC<0){aC=0}}if(this.forceTickAt100){if(a0>100){a0=100}if(aC<100){aC=100}}var ay=false,aV=false;if(this.min!=null){ay=true}else{if(this.max!=null){aV=true}}var aJ=H.jqplot.LinearTickGenerator(a0,aC,this._scalefact,aq,ay,aV);var ap=(this.min!=null)?a0:a0+ao*(this.padMin-1);var aK=(this.max!=null)?aC:aC-ao*(this.padMax-1);if(a0<ap||aC>aK){ap=(this.min!=null)?a0:a0-ao*(this.padMin-1);aK=(this.max!=null)?aC:aC+ao*(this.padMax-1);aJ=H.jqplot.LinearTickGenerator(ap,aK,this._scalefact,aq,ay,aV)}this.min=aJ[0];this.max=aJ[1];this.numberTicks=aJ[2];this._autoFormatString=aJ[3];this.tickInterval=aJ[4]}else{if(a0==aC){var ac=0.05;if(a0>0){ac=Math.max(Math.log(a0)/Math.LN10,0.05)}a0-=ac;aC+=ac}if(this.autoscale&&this.min==null&&this.max==null){var ae,af,al;var aw=false;var aH=false;var au={min:null,max:null,average:null,stddev:null};for(var aU=0;aU<this._series.length;aU++){var aP=this._series[aU];var ax=(aP.fillAxis=="x")?aP._xaxis.name:aP._yaxis.name;if(this.name==ax){var aL=aP._plotValues[aP.fillAxis];var aA=aL[0];var aW=aL[0];for(var aT=1;aT<aL.length;aT++){if(aL[aT]<aA){aA=aL[aT]}else{if(aL[aT]>aW){aW=aL[aT]}}}var an=(aW-aA)/aW;if(aP.renderer.constructor==H.jqplot.BarRenderer){if(aA>=0&&(aP.fillToZero||an>0.1)){aw=true}else{aw=false;if(aP.fill&&aP.fillToZero&&aA<0&&aW>0){aH=true}else{aH=false}}}else{if(aP.fill){if(aA>=0&&(aP.fillToZero||an>0.1)){aw=true}else{if(aA<0&&aW>0&&aP.fillToZero){aw=false;aH=true}else{aw=false;aH=false}}}else{if(aA<0){aw=false}}}}}if(aw){this.numberTicks=2+Math.ceil((ab-(this.tickSpacing-1))/this.tickSpacing);this.min=0;aB=0;af=aC/(this.numberTicks-1);am=Math.pow(10,Math.abs(Math.floor(Math.log(af)/Math.LN10)));if(af/am==parseInt(af/am,10)){af+=am}this.tickInterval=Math.ceil(af/am)*am;this.max=this.tickInterval*(this.numberTicks-1)}else{if(aH){this.numberTicks=2+Math.ceil((ab-(this.tickSpacing-1))/this.tickSpacing);var aD=Math.ceil(Math.abs(a0)/ao*(this.numberTicks-1));var a3=this.numberTicks-1-aD;af=Math.max(Math.abs(a0/aD),Math.abs(aC/a3));am=Math.pow(10,Math.abs(Math.floor(Math.log(af)/Math.LN10)));this.tickInterval=Math.ceil(af/am)*am;this.max=this.tickInterval*a3;this.min=-this.tickInterval*aD}else{if(this.numberTicks==null){if(this.tickInterval){this.numberTicks=3+Math.ceil(ao/this.tickInterval)}else{this.numberTicks=2+Math.ceil((ab-(this.tickSpacing-1))/this.tickSpacing)}}if(this.tickInterval==null){af=ao/(this.numberTicks-1);if(af<1){am=Math.pow(10,Math.abs(Math.floor(Math.log(af)/Math.LN10)))}else{am=1}this.tickInterval=Math.ceil(af*am*this.pad)/am}else{am=1/this.tickInterval}ae=this.tickInterval*(this.numberTicks-1);al=(ae-ao)/2;if(this.min==null){this.min=Math.floor(am*(a0-al))/am}if(this.max==null){this.max=this.min+ae}}}var az=H.jqplot.getSignificantFigures(this.tickInterval);var aG;if(az.digitsLeft>=az.significantDigits){aG="%d"}else{var am=Math.max(0,5-az.digitsLeft);am=Math.min(am,az.digitsRight);aG="%."+am+"f"}this._autoFormatString=aG}else{aM=(this.min!=null)?this.min:a0-ao*(this.padMin-1);ar=(this.max!=null)?this.max:aC+ao*(this.padMax-1);ao=ar-aM;if(this.numberTicks==null){if(this.tickInterval!=null){this.numberTicks=Math.ceil((ar-aM)/this.tickInterval)+1}else{if(ab>100){this.numberTicks=parseInt(3+(ab-100)/75,10)}else{this.numberTicks=2}}}if(this.tickInterval==null){this.tickInterval=ao/(this.numberTicks-1)}if(this.max==null){ar=aM+this.tickInterval*(this.numberTicks-1)}if(this.min==null){aM=ar-this.tickInterval*(this.numberTicks-1)}var az=H.jqplot.getSignificantFigures(this.tickInterval);var aG;if(az.digitsLeft>=az.significantDigits){aG="%d"}else{var am=Math.max(0,5-az.digitsLeft);am=Math.min(am,az.digitsRight);aG="%."+am+"f"}this._autoFormatString=aG;this.min=aM;this.max=ar}if(this.renderer.constructor==H.jqplot.LinearAxisRenderer&&this._autoFormatString==""){ao=this.max-this.min;var a1=new this.tickRenderer(this.tickOptions);var aF=a1.formatString||H.jqplot.config.defaultTickFormatString;var aF=aF.match(H.jqplot.sprintf.regex)[0];var aX=0;if(aF){if(aF.search(/[fFeEgGpP]/)>-1){var aS=aF.match(/\%\.(\d{0,})?[eEfFgGpP]/);if(aS){aX=parseInt(aS[1],10)}else{aX=6}}else{if(aF.search(/[di]/)>-1){aX=0}}var ak=Math.pow(10,-aX);if(this.tickInterval<ak){if(aQ==null&&a4==null){this.tickInterval=ak;if(aZ==null&&aB==null){this.min=Math.floor(this._dataBounds.min/ak)*ak;if(this.min==this._dataBounds.min){this.min=this._dataBounds.min-this.tickInterval}this.max=Math.ceil(this._dataBounds.max/ak)*ak;if(this.max==this._dataBounds.max){this.max=this._dataBounds.max+this.tickInterval}var aR=(this.max-this.min)/this.tickInterval;aR=aR.toFixed(11);aR=Math.ceil(aR);this.numberTicks=aR+1}else{if(aZ==null){var aR=(this._dataBounds.max-this.min)/this.tickInterval;aR=aR.toFixed(11);this.numberTicks=Math.ceil(aR)+2;this.max=this.min+this.tickInterval*(this.numberTicks-1)}else{if(aB==null){var aR=(this.max-this._dataBounds.min)/this.tickInterval;aR=aR.toFixed(11);this.numberTicks=Math.ceil(aR)+2;this.min=this.max-this.tickInterval*(this.numberTicks-1)}else{this.numberTicks=Math.ceil((aZ-aB)/this.tickInterval)+1;this.min=Math.floor(aB*Math.pow(10,aX))/Math.pow(10,aX);this.max=Math.ceil(aZ*Math.pow(10,aX))/Math.pow(10,aX);this.numberTicks=Math.ceil((this.max-this.min)/this.tickInterval)+1}}}}}}}}if(this._overrideFormatString&&this._autoFormatString!=""){this.tickOptions=this.tickOptions||{};this.tickOptions.formatString=this._autoFormatString}var aO,a2;for(var aU=0;aU<this.numberTicks;aU++){aY=this.min+aU*this.tickInterval;aO=new this.tickRenderer(this.tickOptions);aO.setTick(aY,this.name);this._ticks.push(aO);if(aU<this.numberTicks-1){for(var aT=0;aT<this.minorTicks;aT++){aY+=this.tickInterval/(this.minorTicks+1);a2=H.extend(true,{},this.tickOptions,{name:this.name,value:aY,label:"",isMinorTick:true});aO=new this.tickRenderer(a2);this._ticks.push(aO)}}aO=null}}if(this.tickInset){this.min=this.min-this.tickInset*this.tickInterval;this.max=this.max+this.tickInset*this.tickInterval}aN=null};H.jqplot.LinearAxisRenderer.prototype.resetTickValues=function(ad){if(H.isArray(ad)&&ad.length==this._ticks.length){var ac;for(var ab=0;ab<ad.length;ab++){ac=this._ticks[ab];ac.value=ad[ab];ac.label=ac.formatter(ac.formatString,ad[ab]);ac.label=ac.prefix+ac.label;ac._elem.html(ac.label)}ac=null;this.min=H.jqplot.arrayMin(ad);this.max=H.jqplot.arrayMax(ad);this.pack()}};H.jqplot.LinearAxisRenderer.prototype.pack=function(ad,ac){ad=ad||{};ac=ac||this._offsets;var ar=this._ticks;var an=this.max;var am=this.min;var ai=ac.max;var ag=ac.min;var ak=(this._label==null)?false:this._label.show;for(var al in ad){this._elem.css(al,ad[al])}this._offsets=ac;var ae=ai-ag;var af=an-am;if(this.breakPoints){af=af-this.breakPoints[1]+this.breakPoints[0];this.p2u=function(au){return(au-ag)*af/ae+am};this.u2p=function(au){if(au>this.breakPoints[0]&&au<this.breakPoints[1]){au=this.breakPoints[0]}if(au<=this.breakPoints[0]){return(au-am)*ae/af+ag}else{return(au-this.breakPoints[1]+this.breakPoints[0]-am)*ae/af+ag}};if(this.name.charAt(0)=="x"){this.series_u2p=function(au){if(au>this.breakPoints[0]&&au<this.breakPoints[1]){au=this.breakPoints[0]}if(au<=this.breakPoints[0]){return(au-am)*ae/af}else{return(au-this.breakPoints[1]+this.breakPoints[0]-am)*ae/af}};this.series_p2u=function(au){return au*af/ae+am}}else{this.series_u2p=function(au){if(au>this.breakPoints[0]&&au<this.breakPoints[1]){au=this.breakPoints[0]}if(au>=this.breakPoints[1]){return(au-an)*ae/af}else{return(au+this.breakPoints[1]-this.breakPoints[0]-an)*ae/af}};this.series_p2u=function(au){return au*af/ae+an}}}else{this.p2u=function(au){return(au-ag)*af/ae+am};this.u2p=function(au){return(au-am)*ae/af+ag};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(au){return(au-am)*ae/af};this.series_p2u=function(au){return au*af/ae+am}}else{this.series_u2p=function(au){return(au-an)*ae/af};this.series_p2u=function(au){return au*af/ae+an}}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(var ao=0;ao<ar.length;ao++){var aj=ar[ao];if(aj.show&&aj.showLabel){var ab;if(aj.constructor==H.jqplot.CanvasAxisTickRenderer&&aj.angle){var aq=(this.name=="xaxis")?1:-1;switch(aj.labelPosition){case"auto":if(aq*aj.angle<0){ab=-aj.getWidth()+aj._textRenderer.height*Math.sin(-aj._textRenderer.angle)/2}else{ab=-aj._textRenderer.height*Math.sin(aj._textRenderer.angle)/2}break;case"end":ab=-aj.getWidth()+aj._textRenderer.height*Math.sin(-aj._textRenderer.angle)/2;break;case"start":ab=-aj._textRenderer.height*Math.sin(aj._textRenderer.angle)/2;break;case"middle":ab=-aj.getWidth()/2+aj._textRenderer.height*Math.sin(-aj._textRenderer.angle)/2;break;default:ab=-aj.getWidth()/2+aj._textRenderer.height*Math.sin(-aj._textRenderer.angle)/2;break}}else{ab=-aj.getWidth()/2}var at=this.u2p(aj.value)+ab+"px";aj._elem.css("left",at);aj.pack()}}if(ak){var ah=this._label._elem.outerWidth(true);this._label._elem.css("left",ag+ae/2-ah/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}}else{for(var ao=0;ao<ar.length;ao++){var aj=ar[ao];if(aj.show&&aj.showLabel){var ab;if(aj.constructor==H.jqplot.CanvasAxisTickRenderer&&aj.angle){var aq=(this.name=="yaxis")?1:-1;switch(aj.labelPosition){case"auto":case"end":if(aq*aj.angle<0){ab=-aj._textRenderer.height*Math.cos(-aj._textRenderer.angle)/2}else{ab=-aj.getHeight()+aj._textRenderer.height*Math.cos(aj._textRenderer.angle)/2}break;case"start":if(aj.angle>0){ab=-aj._textRenderer.height*Math.cos(-aj._textRenderer.angle)/2}else{ab=-aj.getHeight()+aj._textRenderer.height*Math.cos(aj._textRenderer.angle)/2}break;case"middle":ab=-aj.getHeight()/2;break;default:ab=-aj.getHeight()/2;break}}else{ab=-aj.getHeight()/2}var at=this.u2p(aj.value)+ab+"px";aj._elem.css("top",at);aj.pack()}}if(ak){var ap=this._label._elem.outerHeight(true);this._label._elem.css("top",ai-ae/2-ap/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}ar=null};function h(ac){var ab;ac=Math.abs(ac);if(ac>=10){ab="%d"}else{if(ac>1){if(ac===parseInt(ac,10)){ab="%d"}else{ab="%.1f"}}else{var ad=-Math.floor(Math.log(ac)/Math.LN10);ab="%."+ad+"f"}}return ab}var a=[0.1,0.2,0.3,0.4,0.5,0.8,1,2,3,4,5];var b=function(ac){var ab=a.indexOf(ac);if(ab>0){return a[ab-1]}else{return a[a.length-1]/100}};var i=function(ac){var ab=a.indexOf(ac);if(ab<a.length-1){return a[ab+1]}else{return a[0]*100}};function c(af,an,am){var ak=Math.floor(am/2);var ac=Math.ceil(am*1.5);var ae=Number.MAX_VALUE;var ab=(an-af);var aq;var aj;var al;var ar=H.jqplot.getSignificantFigures;var ap;var ah;var ai;var ao;for(var ag=0,ad=ac-ak+1;ag<ad;ag++){ai=ak+ag;aq=ab/(ai-1);aj=ar(aq);aq=Math.abs(am-ai)+aj.digitsRight;if(aq<ae){ae=aq;al=ai;ao=aj.digitsRight}else{if(aq===ae){if(aj.digitsRight<ao){al=ai;ao=aj.digitsRight}}}}ap=Math.max(ao,Math.max(ar(af).digitsRight,ar(an).digitsRight));if(ap===0){ah="%d"}else{ah="%."+ap+"f"}aq=ab/(al-1);return[af,an,al,ah,aq]}function S(ac,af){af=af||7;var ae=ac/(af-1);var ad=Math.pow(10,Math.floor(Math.log(ae)/Math.LN10));var ag=ae/ad;var ab;if(ad<1){if(ag>5){ab=10*ad}else{if(ag>2){ab=5*ad}else{if(ag>1){ab=2*ad}else{ab=ad}}}}else{if(ag>5){ab=10*ad}else{if(ag>4){ab=5*ad}else{if(ag>3){ab=4*ad}else{if(ag>2){ab=3*ad}else{if(ag>1){ab=2*ad}else{ab=ad}}}}}}return ab}function M(ac,ab){ab=ab||1;var ae=Math.floor(Math.log(ac)/Math.LN10);var ag=Math.pow(10,ae);var af=ac/ag;var ad;af=af/ab;if(af<=0.38){ad=0.1}else{if(af<=1.6){ad=0.2}else{if(af<=4){ad=0.5}else{if(af<=8){ad=1}else{if(af<=16){ad=2}else{ad=5}}}}}return ad*ag}function t(ad,ac){var af=Math.floor(Math.log(ad)/Math.LN10);var ah=Math.pow(10,af);var ag=ad/ah;var ab;var ae;ag=ag/ac;if(ag<=0.38){ae=0.1}else{if(ag<=1.6){ae=0.2}else{if(ag<=4){ae=0.5}else{if(ag<=8){ae=1}else{if(ag<=16){ae=2}else{ae=5}}}}}ab=ae*ah;return[ab,ae,ah]}H.jqplot.LinearTickGenerator=function(ah,ak,ad,ae,ai,al){ai=(ai===null)?false:ai;al=(al===null||ai)?false:al;if(ah===ak){ak=(ak)?0:1}ad=ad||1;if(ak<ah){var am=ak;ak=ah;ah=am}var ac=[];var ap=M(ak-ah,ad);var ao=H.jqplot.getSignificantFigures;if(ae==null){if(!ai&&!al){ac[0]=Math.floor(ah/ap)*ap;ac[1]=Math.ceil(ak/ap)*ap;ac[2]=Math.round((ac[1]-ac[0])/ap+1);ac[3]=h(ap);ac[4]=ap}else{if(ai){ac[0]=ah;ac[2]=Math.ceil((ak-ah)/ap+1);ac[1]=ah+(ac[2]-1)*ap;var an=ao(ah).digitsRight;var aj=ao(ap).digitsRight;if(an<aj){ac[3]=h(ap)}else{ac[3]="%."+an+"f"}ac[4]=ap}else{if(al){ac[1]=ak;ac[2]=Math.ceil((ak-ah)/ap+1);ac[0]=ak-(ac[2]-1)*ap;var af=ao(ak).digitsRight;var aj=ao(ap).digitsRight;if(af<aj){ac[3]=h(ap)}else{ac[3]="%."+af+"f"}ac[4]=ap}}}}else{var ag=[];ag[0]=Math.floor(ah/ap)*ap;ag[1]=Math.ceil(ak/ap)*ap;ag[2]=Math.round((ag[1]-ag[0])/ap+1);ag[3]=h(ap);ag[4]=ap;if(ag[2]===ae){ac=ag}else{var ab=S(ag[1]-ag[0],ae);ac[0]=ag[0];ac[2]=ae;ac[4]=ab;ac[3]=h(ab);ac[1]=ac[0]+(ac[2]-1)*ac[4]}}return ac};H.jqplot.LinearTickGenerator.bestLinearInterval=M;H.jqplot.LinearTickGenerator.bestInterval=S;H.jqplot.LinearTickGenerator.bestLinearComponents=t;H.jqplot.LinearTickGenerator.bestConstrainedInterval=c;H.jqplot.MarkerRenderer=function(ab){this.show=true;this.style="filledCircle";this.lineWidth=2;this.size=9;this.color="#666666";this.shadow=true;this.shadowAngle=45;this.shadowOffset=1;this.shadowDepth=3;this.shadowAlpha="0.07";this.shadowRenderer=new H.jqplot.ShadowRenderer();this.shapeRenderer=new H.jqplot.ShapeRenderer();H.extend(true,this,ab)};H.jqplot.MarkerRenderer.prototype.init=function(ab){H.extend(true,this,ab);var ad={angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,lineWidth:this.lineWidth,depth:this.shadowDepth,closePath:true};if(this.style.indexOf("filled")!=-1){ad.fill=true}if(this.style.indexOf("ircle")!=-1){ad.isarc=true;ad.closePath=false}this.shadowRenderer.init(ad);var ac={fill:false,isarc:false,strokeStyle:this.color,fillStyle:this.color,lineWidth:this.lineWidth,closePath:true};if(this.style.indexOf("filled")!=-1){ac.fill=true}if(this.style.indexOf("ircle")!=-1){ac.isarc=true;ac.closePath=false}this.shapeRenderer.init(ac)};H.jqplot.MarkerRenderer.prototype.drawDiamond=function(ad,ac,ag,af,ai){var ab=1.2;var aj=this.size/2/ab;var ah=this.size/2*ab;var ae=[[ad-aj,ac],[ad,ac+ah],[ad+aj,ac],[ad,ac-ah]];if(this.shadow){this.shadowRenderer.draw(ag,ae)}this.shapeRenderer.draw(ag,ae,ai)};H.jqplot.MarkerRenderer.prototype.drawPlus=function(ae,ad,ah,ag,ak){var ac=1;var al=this.size/2*ac;var ai=this.size/2*ac;var aj=[[ae,ad-ai],[ae,ad+ai]];var af=[[ae+al,ad],[ae-al,ad]];var ab=H.extend(true,{},this.options,{closePath:false});if(this.shadow){this.shadowRenderer.draw(ah,aj,{closePath:false});this.shadowRenderer.draw(ah,af,{closePath:false})}this.shapeRenderer.draw(ah,aj,ab);this.shapeRenderer.draw(ah,af,ab)};H.jqplot.MarkerRenderer.prototype.drawX=function(ae,ad,ah,ag,ak){var ac=1;var al=this.size/2*ac;var ai=this.size/2*ac;var ab=H.extend(true,{},this.options,{closePath:false});var aj=[[ae-al,ad-ai],[ae+al,ad+ai]];var af=[[ae-al,ad+ai],[ae+al,ad-ai]];if(this.shadow){this.shadowRenderer.draw(ah,aj,{closePath:false});this.shadowRenderer.draw(ah,af,{closePath:false})}this.shapeRenderer.draw(ah,aj,ab);this.shapeRenderer.draw(ah,af,ab)};H.jqplot.MarkerRenderer.prototype.drawDash=function(ad,ac,ag,af,ai){var ab=1;var aj=this.size/2*ab;var ah=this.size/2*ab;var ae=[[ad-aj,ac],[ad+aj,ac]];if(this.shadow){this.shadowRenderer.draw(ag,ae)}this.shapeRenderer.draw(ag,ae,ai)};H.jqplot.MarkerRenderer.prototype.drawLine=function(ag,af,ab,ae,ac){var ad=[ag,af];if(this.shadow){this.shadowRenderer.draw(ab,ad)}this.shapeRenderer.draw(ab,ad,ac)};H.jqplot.MarkerRenderer.prototype.drawSquare=function(ad,ac,ag,af,ai){var ab=1;var aj=this.size/2/ab;var ah=this.size/2*ab;var ae=[[ad-aj,ac-ah],[ad-aj,ac+ah],[ad+aj,ac+ah],[ad+aj,ac-ah]];if(this.shadow){this.shadowRenderer.draw(ag,ae)}this.shapeRenderer.draw(ag,ae,ai)};H.jqplot.MarkerRenderer.prototype.drawCircle=function(ac,ai,ae,ah,af){var ab=this.size/2;var ad=2*Math.PI;var ag=[ac,ai,ab,0,ad,true];if(this.shadow){this.shadowRenderer.draw(ae,ag)}this.shapeRenderer.draw(ae,ag,af)};H.jqplot.MarkerRenderer.prototype.draw=function(ab,ae,ac,ad){ad=ad||{};if(ad.show==null||ad.show!=false){if(ad.color&&!ad.fillStyle){ad.fillStyle=ad.color}if(ad.color&&!ad.strokeStyle){ad.strokeStyle=ad.color}switch(this.style){case"diamond":this.drawDiamond(ab,ae,ac,false,ad);break;case"filledDiamond":this.drawDiamond(ab,ae,ac,true,ad);break;case"circle":this.drawCircle(ab,ae,ac,false,ad);break;case"filledCircle":this.drawCircle(ab,ae,ac,true,ad);break;case"square":this.drawSquare(ab,ae,ac,false,ad);break;case"filledSquare":this.drawSquare(ab,ae,ac,true,ad);break;case"x":this.drawX(ab,ae,ac,true,ad);break;case"plus":this.drawPlus(ab,ae,ac,true,ad);break;case"dash":this.drawDash(ab,ae,ac,true,ad);break;case"line":this.drawLine(ab,ae,ac,false,ad);break;default:this.drawDiamond(ab,ae,ac,false,ad);break}}};H.jqplot.ShadowRenderer=function(ab){this.angle=45;this.offset=1;this.alpha=0.07;this.lineWidth=1.5;this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.depth=3;this.strokeStyle="rgba(0,0,0,0.1)";this.isarc=false;H.extend(true,this,ab)};H.jqplot.ShadowRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.ShadowRenderer.prototype.draw=function(ao,am,aq){ao.save();var ab=(aq!=null)?aq:{};var an=(ab.fill!=null)?ab.fill:this.fill;var aj=(ab.fillRect!=null)?ab.fillRect:this.fillRect;var ai=(ab.closePath!=null)?ab.closePath:this.closePath;var af=(ab.offset!=null)?ab.offset:this.offset;var ad=(ab.alpha!=null)?ab.alpha:this.alpha;var ah=(ab.depth!=null)?ab.depth:this.depth;var ap=(ab.isarc!=null)?ab.isarc:this.isarc;var ak=(ab.linePattern!=null)?ab.linePattern:this.linePattern;ao.lineWidth=(ab.lineWidth!=null)?ab.lineWidth:this.lineWidth;ao.lineJoin=(ab.lineJoin!=null)?ab.lineJoin:this.lineJoin;ao.lineCap=(ab.lineCap!=null)?ab.lineCap:this.lineCap;ao.strokeStyle=ab.strokeStyle||this.strokeStyle||"rgba(0,0,0,"+ad+")";ao.fillStyle=ab.fillStyle||this.fillStyle||"rgba(0,0,0,"+ad+")";for(var ae=0;ae<ah;ae++){var al=H.jqplot.LinePattern(ao,ak);ao.translate(Math.cos(this.angle*Math.PI/180)*af,Math.sin(this.angle*Math.PI/180)*af);al.beginPath();if(ap){ao.arc(am[0],am[1],am[2],am[3],am[4],true)}else{if(aj){if(aj){ao.fillRect(am[0],am[1],am[2],am[3])}}else{if(am&&am.length){var ac=true;for(var ag=0;ag<am.length;ag++){if(am[ag][0]!=null&&am[ag][1]!=null){if(ac){al.moveTo(am[ag][0],am[ag][1]);ac=false}else{al.lineTo(am[ag][0],am[ag][1])}}else{ac=true}}}}}if(ai){al.closePath()}if(an){ao.fill()}else{ao.stroke()}}ao.restore()};H.jqplot.ShapeRenderer=function(ab){this.lineWidth=1.5;this.linePattern="solid";this.lineJoin="miter";this.lineCap="round";this.closePath=false;this.fill=false;this.isarc=false;this.fillRect=false;this.strokeRect=false;this.clearRect=false;this.strokeStyle="#999999";this.fillStyle="#999999";H.extend(true,this,ab)};H.jqplot.ShapeRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.ShapeRenderer.prototype.draw=function(am,ak,ao){am.save();var ab=(ao!=null)?ao:{};var al=(ab.fill!=null)?ab.fill:this.fill;var ag=(ab.closePath!=null)?ab.closePath:this.closePath;var ah=(ab.fillRect!=null)?ab.fillRect:this.fillRect;var ae=(ab.strokeRect!=null)?ab.strokeRect:this.strokeRect;var ac=(ab.clearRect!=null)?ab.clearRect:this.clearRect;var an=(ab.isarc!=null)?ab.isarc:this.isarc;var ai=(ab.linePattern!=null)?ab.linePattern:this.linePattern;var aj=H.jqplot.LinePattern(am,ai);am.lineWidth=ab.lineWidth||this.lineWidth;am.lineJoin=ab.lineJoin||this.lineJoin;am.lineCap=ab.lineCap||this.lineCap;am.strokeStyle=(ab.strokeStyle||ab.color)||this.strokeStyle;am.fillStyle=ab.fillStyle||this.fillStyle;am.beginPath();if(an){am.arc(ak[0],ak[1],ak[2],ak[3],ak[4],true);if(ag){am.closePath()}if(al){am.fill()}else{am.stroke()}am.restore();return}else{if(ac){am.clearRect(ak[0],ak[1],ak[2],ak[3]);am.restore();return}else{if(ah||ae){if(ah){am.fillRect(ak[0],ak[1],ak[2],ak[3])}if(ae){am.strokeRect(ak[0],ak[1],ak[2],ak[3]);am.restore();return}}else{if(ak&&ak.length){var ad=true;for(var af=0;af<ak.length;af++){if(ak[af][0]!=null&&ak[af][1]!=null){if(ad){aj.moveTo(ak[af][0],ak[af][1]);ad=false}else{aj.lineTo(ak[af][0],ak[af][1])}}else{ad=true}}if(ag){aj.closePath()}if(al){am.fill()}else{am.stroke()}}}}}am.restore()};H.jqplot.TableLegendRenderer=function(){};H.jqplot.TableLegendRenderer.prototype.init=function(ab){H.extend(true,this,ab)};H.jqplot.TableLegendRenderer.prototype.addrow=function(ak,ae,ab,ai){var af=(ab)?this.rowSpacing+"px":"0px";var aj;var ad;var ac;var ah;var ag;ac=document.createElement("tr");aj=H(ac);aj.addClass("jqplot-table-legend");ac=null;if(ai){aj.prependTo(this._elem)}else{aj.appendTo(this._elem)}if(this.showSwatches){ad=H(document.createElement("td"));ad.addClass("jqplot-table-legend jqplot-table-legend-swatch");ad.css({textAlign:"center",paddingTop:af});ah=H(document.createElement("div"));ah.addClass("jqplot-table-legend-swatch-outline");ag=H(document.createElement("div"));ag.addClass("jqplot-table-legend-swatch");ag.css({backgroundColor:ae,borderColor:ae});aj.append(ad.append(ah.append(ag)))}if(this.showLabels){ad=H(document.createElement("td"));ad.addClass("jqplot-table-legend jqplot-table-legend-label");ad.css("paddingTop",af);aj.append(ad);if(this.escapeHtml){ad.text(ak)}else{ad.html(ak)}}ad=null;ah=null;ag=null;aj=null;ac=null};H.jqplot.TableLegendRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}if(this.show){var ag=this._series;var ac=document.createElement("table");this._elem=H(ac);this._elem.addClass("jqplot-table-legend");var al={position:"absolute"};if(this.background){al.background=this.background}if(this.border){al.border=this.border}if(this.fontSize){al.fontSize=this.fontSize}if(this.fontFamily){al.fontFamily=this.fontFamily}if(this.textColor){al.textColor=this.textColor}if(this.marginTop!=null){al.marginTop=this.marginTop}if(this.marginBottom!=null){al.marginBottom=this.marginBottom}if(this.marginLeft!=null){al.marginLeft=this.marginLeft}if(this.marginRight!=null){al.marginRight=this.marginRight}var ab=false,ai=false,ak;for(var ah=0;ah<ag.length;ah++){ak=ag[ah];if(ak._stack||ak.renderer.constructor==H.jqplot.BezierCurveRenderer){ai=true}if(ak.show&&ak.showLabel){var af=this.labels[ah]||ak.label.toString();if(af){var ad=ak.color;if(ai&&ah<ag.length-1){ab=true}else{if(ai&&ah==ag.length-1){ab=false}}this.renderer.addrow.call(this,af,ad,ab,ai);ab=true}for(var ae=0;ae<H.jqplot.addLegendRowHooks.length;ae++){var aj=H.jqplot.addLegendRowHooks[ae].call(this,ak);if(aj){this.renderer.addrow.call(this,aj.label,aj.color,ab);ab=true}}af=null}}}return this._elem};H.jqplot.TableLegendRenderer.prototype.pack=function(ad){if(this.show){if(this.placement=="insideGrid"){switch(this.location){case"nw":var ac=ad.left;var ab=ad.top;this._elem.css("left",ac);this._elem.css("top",ab);break;case"n":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;var ab=ad.top;this._elem.css("left",ac);this._elem.css("top",ab);break;case"ne":var ac=ad.right;var ab=ad.top;this._elem.css({right:ac,top:ab});break;case"e":var ac=ad.right;var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({right:ac,top:ab});break;case"se":var ac=ad.right;var ab=ad.bottom;this._elem.css({right:ac,bottom:ab});break;case"s":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;var ab=ad.bottom;this._elem.css({left:ac,bottom:ab});break;case"sw":var ac=ad.left;var ab=ad.bottom;this._elem.css({left:ac,bottom:ab});break;case"w":var ac=ad.left;var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({left:ac,top:ab});break;default:var ac=ad.right;var ab=ad.bottom;this._elem.css({right:ac,bottom:ab});break}}else{if(this.placement=="outside"){switch(this.location){case"nw":var ac=this._plotDimensions.width-ad.left;var ab=ad.top;this._elem.css("right",ac);this._elem.css("top",ab);break;case"n":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;var ab=this._plotDimensions.height-ad.top;this._elem.css("left",ac);this._elem.css("bottom",ab);break;case"ne":var ac=this._plotDimensions.width-ad.right;var ab=ad.top;this._elem.css({left:ac,top:ab});break;case"e":var ac=this._plotDimensions.width-ad.right;var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({left:ac,top:ab});break;case"se":var ac=this._plotDimensions.width-ad.right;var ab=ad.bottom;this._elem.css({left:ac,bottom:ab});break;case"s":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;var ab=this._plotDimensions.height-ad.bottom;this._elem.css({left:ac,top:ab});break;case"sw":var ac=this._plotDimensions.width-ad.left;var ab=ad.bottom;this._elem.css({right:ac,bottom:ab});break;case"w":var ac=this._plotDimensions.width-ad.left;var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({right:ac,top:ab});break;default:var ac=ad.right;var ab=ad.bottom;this._elem.css({right:ac,bottom:ab});break}}else{switch(this.location){case"nw":this._elem.css({left:0,top:ad.top});break;case"n":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;this._elem.css({left:ac,top:ad.top});break;case"ne":this._elem.css({right:0,top:ad.top});break;case"e":var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({right:ad.right,top:ab});break;case"se":this._elem.css({right:ad.right,bottom:ad.bottom});break;case"s":var ac=(ad.left+(this._plotDimensions.width-ad.right))/2-this.getWidth()/2;this._elem.css({left:ac,bottom:ad.bottom});break;case"sw":this._elem.css({left:ad.left,bottom:ad.bottom});break;case"w":var ab=(ad.top+(this._plotDimensions.height-ad.bottom))/2-this.getHeight()/2;this._elem.css({left:ad.left,top:ab});break;default:this._elem.css({right:ad.right,bottom:ad.bottom});break}}}}};H.jqplot.ThemeEngine=function(){this.themes={};this.activeTheme=null};H.jqplot.ThemeEngine.prototype.init=function(){var ae=new H.jqplot.Theme({_name:"Default"});var ah,ac,ag;for(ah in ae.target){if(ah=="textColor"){ae.target[ah]=this.target.css("color")}else{ae.target[ah]=this.target.css(ah)}}if(this.title.show&&this.title._elem){for(ah in ae.title){if(ah=="textColor"){ae.title[ah]=this.title._elem.css("color")}else{ae.title[ah]=this.title._elem.css(ah)}}}for(ah in ae.grid){ae.grid[ah]=this.grid[ah]}if(ae.grid.backgroundColor==null&&this.grid.background!=null){ae.grid.backgroundColor=this.grid.background}if(this.legend.show&&this.legend._elem){for(ah in ae.legend){if(ah=="textColor"){ae.legend[ah]=this.legend._elem.css("color")}else{ae.legend[ah]=this.legend._elem.css(ah)}}}var ad;for(ac=0;ac<this.series.length;ac++){ad=this.series[ac];if(ad.renderer.constructor==H.jqplot.LineRenderer){ae.series.push(new m())}else{if(ad.renderer.constructor==H.jqplot.BarRenderer){ae.series.push(new P())}else{if(ad.renderer.constructor==H.jqplot.PieRenderer){ae.series.push(new e())}else{if(ad.renderer.constructor==H.jqplot.DonutRenderer){ae.series.push(new C())}else{if(ad.renderer.constructor==H.jqplot.FunnelRenderer){ae.series.push(new U())}else{if(ad.renderer.constructor==H.jqplot.MeterGaugeRenderer){ae.series.push(new z())}else{ae.series.push({})}}}}}}for(ah in ae.series[ac]){ae.series[ac][ah]=ad[ah]}}var ab,af;for(ah in this.axes){af=this.axes[ah];ab=ae.axes[ah]=new L();ab.borderColor=af.borderColor;ab.borderWidth=af.borderWidth;if(af._ticks&&af._ticks[0]){for(ag in ab.ticks){if(af._ticks[0].hasOwnProperty(ag)){ab.ticks[ag]=af._ticks[0][ag]}else{if(af._ticks[0]._elem){ab.ticks[ag]=af._ticks[0]._elem.css(ag)}}}}if(af._label&&af._label.show){for(ag in ab.label){if(af._label[ag]){ab.label[ag]=af._label[ag]}else{if(af._label._elem){if(ag=="textColor"){ab.label[ag]=af._label._elem.css("color")}else{ab.label[ag]=af._label._elem.css(ag)}}}}}}this.themeEngine._add(ae);this.themeEngine.activeTheme=this.themeEngine.themes[ae._name]};H.jqplot.ThemeEngine.prototype.get=function(ab){if(!ab){return this.activeTheme}else{return this.themes[ab]}};function K(ac,ab){return ac-ab}H.jqplot.ThemeEngine.prototype.getThemeNames=function(){var ab=[];for(var ac in this.themes){ab.push(ac)}return ab.sort(K)};H.jqplot.ThemeEngine.prototype.getThemes=function(){var ac=[];var ab=[];for(var ae in this.themes){ac.push(ae)}ac.sort(K);for(var ad=0;ad<ac.length;ad++){ab.push(this.themes[ac[ad]])}return ab};H.jqplot.ThemeEngine.prototype.activate=function(ao,au){var ab=false;if(!au&&this.activeTheme&&this.activeTheme._name){au=this.activeTheme._name}if(!this.themes.hasOwnProperty(au)){throw new Error("No theme of that name")}else{var ag=this.themes[au];this.activeTheme=ag;var at,am=false,al=false;var ac=["xaxis","x2axis","yaxis","y2axis"];for(ap=0;ap<ac.length;ap++){var ah=ac[ap];if(ag.axesStyles.borderColor!=null){ao.axes[ah].borderColor=ag.axesStyles.borderColor}if(ag.axesStyles.borderWidth!=null){ao.axes[ah].borderWidth=ag.axesStyles.borderWidth}}for(var ar in ao.axes){var ae=ao.axes[ar];if(ae.show){var ak=ag.axes[ar]||{};var ai=ag.axesStyles;var af=H.jqplot.extend(true,{},ak,ai);at=(ag.axesStyles.borderColor!=null)?ag.axesStyles.borderColor:af.borderColor;if(af.borderColor!=null){ae.borderColor=af.borderColor;ab=true}at=(ag.axesStyles.borderWidth!=null)?ag.axesStyles.borderWidth:af.borderWidth;if(af.borderWidth!=null){ae.borderWidth=af.borderWidth;ab=true}if(ae._ticks&&ae._ticks[0]){for(var ad in af.ticks){at=af.ticks[ad];if(at!=null){ae.tickOptions[ad]=at;ae._ticks=[];ab=true}}}if(ae._label&&ae._label.show){for(var ad in af.label){at=af.label[ad];if(at!=null){ae.labelOptions[ad]=at;ab=true}}}}}for(var an in ag.grid){if(ag.grid[an]!=null){ao.grid[an]=ag.grid[an]}}if(!ab){ao.grid.draw()}if(ao.legend.show){for(an in ag.legend){if(ag.legend[an]!=null){ao.legend[an]=ag.legend[an]}}}if(ao.title.show){for(an in ag.title){if(ag.title[an]!=null){ao.title[an]=ag.title[an]}}}var ap;for(ap=0;ap<ag.series.length;ap++){var aj={};var aq=false;for(an in ag.series[ap]){at=(ag.seriesStyles[an]!=null)?ag.seriesStyles[an]:ag.series[ap][an];if(at!=null){aj[an]=at;if(an=="color"){ao.series[ap].renderer.shapeRenderer.fillStyle=at;ao.series[ap].renderer.shapeRenderer.strokeStyle=at;ao.series[ap][an]=at}else{if((an=="lineWidth")||(an=="linePattern")){ao.series[ap].renderer.shapeRenderer[an]=at;ao.series[ap][an]=at}else{if(an=="markerOptions"){R(ao.series[ap].markerOptions,at);R(ao.series[ap].markerRenderer,at)}else{ao.series[ap][an]=at}}}ab=true}}}if(ab){ao.target.empty();ao.draw()}for(an in ag.target){if(ag.target[an]!=null){ao.target.css(an,ag.target[an])}}}};H.jqplot.ThemeEngine.prototype._add=function(ac,ab){if(ab){ac._name=ab}if(!ac._name){ac._name=Date.parse(new Date())}if(!this.themes.hasOwnProperty(ac._name)){this.themes[ac._name]=ac}else{throw new Error("jqplot.ThemeEngine Error: Theme already in use")}};H.jqplot.ThemeEngine.prototype.remove=function(ab){if(ab=="Default"){return false}return delete this.themes[ab]};H.jqplot.ThemeEngine.prototype.newTheme=function(ab,ad){if(typeof(ab)=="object"){ad=ad||ab;ab=null}if(ad&&ad._name){ab=ad._name}else{ab=ab||Date.parse(new Date())}var ac=this.copy(this.themes.Default._name,ab);H.jqplot.extend(ac,ad);return ac};function x(ad){if(ad==null||typeof(ad)!="object"){return ad}var ab=new ad.constructor();for(var ac in ad){ab[ac]=x(ad[ac])}return ab}H.jqplot.clone=x;function R(ad,ac){if(ac==null||typeof(ac)!="object"){return}for(var ab in ac){if(ab=="highlightColors"){ad[ab]=x(ac[ab])}if(ac[ab]!=null&&typeof(ac[ab])=="object"){if(!ad.hasOwnProperty(ab)){ad[ab]={}}R(ad[ab],ac[ab])}else{ad[ab]=ac[ab]}}}H.jqplot.merge=R;H.jqplot.extend=function(){var ag=arguments[0]||{},ae=1,af=arguments.length,ab=false,ad;if(typeof ag==="boolean"){ab=ag;ag=arguments[1]||{};ae=2}if(typeof ag!=="object"&&!toString.call(ag)==="[object Function]"){ag={}}for(;ae<af;ae++){if((ad=arguments[ae])!=null){for(var ac in ad){var ah=ag[ac],ai=ad[ac];if(ag===ai){continue}if(ab&&ai&&typeof ai==="object"&&!ai.nodeType){ag[ac]=H.jqplot.extend(ab,ah||(ai.length!=null?[]:{}),ai)}else{if(ai!==r){ag[ac]=ai}}}}}return ag};H.jqplot.ThemeEngine.prototype.rename=function(ac,ab){if(ac=="Default"||ab=="Default"){throw new Error("jqplot.ThemeEngine Error: Cannot rename from/to Default")}if(this.themes.hasOwnProperty(ab)){throw new Error("jqplot.ThemeEngine Error: New name already in use.")}else{if(this.themes.hasOwnProperty(ac)){var ad=this.copy(ac,ab);this.remove(ac);return ad}}throw new Error("jqplot.ThemeEngine Error: Old name or new name invalid")};H.jqplot.ThemeEngine.prototype.copy=function(ab,ad,af){if(ad=="Default"){throw new Error("jqplot.ThemeEngine Error: Cannot copy over Default theme")}if(!this.themes.hasOwnProperty(ab)){var ac="jqplot.ThemeEngine Error: Source name invalid";throw new Error(ac)}if(this.themes.hasOwnProperty(ad)){var ac="jqplot.ThemeEngine Error: Target name invalid";throw new Error(ac)}else{var ae=x(this.themes[ab]);ae._name=ad;H.jqplot.extend(true,ae,af);this._add(ae);return ae}};H.jqplot.Theme=function(ab,ac){if(typeof(ab)=="object"){ac=ac||ab;ab=null}ab=ab||Date.parse(new Date());this._name=ab;this.target={backgroundColor:null};this.legend={textColor:null,fontFamily:null,fontSize:null,border:null,background:null};this.title={textColor:null,fontFamily:null,fontSize:null,textAlign:null};this.seriesStyles={};this.series=[];this.grid={drawGridlines:null,gridLineColor:null,gridLineWidth:null,backgroundColor:null,borderColor:null,borderWidth:null,shadow:null};this.axesStyles={label:{},ticks:{}};this.axes={};if(typeof(ac)=="string"){this._name=ac}else{if(typeof(ac)=="object"){H.jqplot.extend(true,this,ac)}}};var L=function(){this.borderColor=null;this.borderWidth=null;this.ticks=new l();this.label=new q()};var l=function(){this.show=null;this.showGridline=null;this.showLabel=null;this.showMark=null;this.size=null;this.textColor=null;this.whiteSpace=null;this.fontSize=null;this.fontFamily=null};var q=function(){this.textColor=null;this.whiteSpace=null;this.fontSize=null;this.fontFamily=null;this.fontWeight=null};var m=function(){this.color=null;this.lineWidth=null;this.linePattern=null;this.shadow=null;this.fillColor=null;this.showMarker=null;this.markerOptions=new E()};var E=function(){this.show=null;this.style=null;this.lineWidth=null;this.size=null;this.color=null;this.shadow=null};var P=function(){this.color=null;this.seriesColors=null;this.lineWidth=null;this.shadow=null;this.barPadding=null;this.barMargin=null;this.barWidth=null;this.highlightColors=null};var e=function(){this.seriesColors=null;this.padding=null;this.sliceMargin=null;this.fill=null;this.shadow=null;this.startAngle=null;this.lineWidth=null;this.highlightColors=null};var C=function(){this.seriesColors=null;this.padding=null;this.sliceMargin=null;this.fill=null;this.shadow=null;this.startAngle=null;this.lineWidth=null;this.innerDiameter=null;this.thickness=null;this.ringMargin=null;this.highlightColors=null};var U=function(){this.color=null;this.lineWidth=null;this.shadow=null;this.padding=null;this.sectionMargin=null;this.seriesColors=null;this.highlightColors=null};var z=function(){this.padding=null;this.backgroundColor=null;this.ringColor=null;this.tickColor=null;this.ringWidth=null;this.intervalColors=null;this.intervalInnerRadius=null;this.intervalOuterRadius=null;this.hubRadius=null;this.needleThickness=null;this.needlePad=null};H.fn.jqplotChildText=function(){return H(this).contents().filter(function(){return this.nodeType==3}).text()};H.fn.jqplotGetComputedFontStyle=function(){var ae=window.getComputedStyle?window.getComputedStyle(this[0],""):this[0].currentStyle;var ac=ae["font-style"]?["font-style","font-weight","font-size","font-family"]:["fontStyle","fontWeight","fontSize","fontFamily"];var af=[];for(var ad=0;ad<ac.length;++ad){var ab=String(ae[ac[ad]]);if(ab&&ab!="normal"){af.push(ab)}}return af.join(" ")};H.fn.jqplotToImageCanvas=function(ad){ad=ad||{};var ao=(ad.x_offset==null)?0:ad.x_offset;var aq=(ad.y_offset==null)?0:ad.y_offset;var af=(ad.backgroundColor==null)?"rgb(255,255,255)":ad.backgroundColor;if(H(this).width()==0||H(this).height()==0){return null}if(H.jqplot.use_excanvas){return null}var ah=document.createElement("canvas");var au=H(this).outerHeight(true);var am=H(this).outerWidth(true);var ag=H(this).offset();var ai=ag.left;var ak=ag.top;var an=0,al=0;var ar=["jqplot-table-legend","jqplot-xaxis-tick","jqplot-x2axis-tick","jqplot-yaxis-tick","jqplot-y2axis-tick","jqplot-y3axis-tick","jqplot-y4axis-tick","jqplot-y5axis-tick","jqplot-y6axis-tick","jqplot-y7axis-tick","jqplot-y8axis-tick","jqplot-y9axis-tick","jqplot-xaxis-label","jqplot-x2axis-label","jqplot-yaxis-label","jqplot-y2axis-label","jqplot-y3axis-label","jqplot-y4axis-label","jqplot-y5axis-label","jqplot-y6axis-label","jqplot-y7axis-label","jqplot-y8axis-label","jqplot-y9axis-label"];var aj,ab,ac,av;for(var at=0;at<ar.length;at++){H(this).find("."+ar[at]).each(function(){aj=H(this).offset().top-ak;ab=H(this).offset().left-ai;av=ab+H(this).outerWidth(true)+an;ac=aj+H(this).outerHeight(true)+al;if(ab<-an){am=am-an-ab;an=-ab}if(aj<-al){au=au-al-aj;al=-aj}if(av>am){am=av}if(ac>au){au=ac}})}ah.width=am+Number(ao);ah.height=au+Number(aq);var ae=ah.getContext("2d");ae.save();ae.fillStyle=af;ae.fillRect(0,0,ah.width,ah.height);ae.restore();ae.translate(an,al);ae.textAlign="left";ae.textBaseline="top";function aw(ay){var az=parseInt(H(ay).css("line-height"),10);if(isNaN(az)){az=parseInt(H(ay).css("font-size"),10)*1.2}return az}function ax(az,ay,aM,aA,aI,aB){var aK=aw(az);var aE=H(az).innerWidth();var aF=H(az).innerHeight();var aH=aM.split(/\s+/);var aL=aH.length;var aJ="";var aG=[];var aO=aI;var aN=aA;for(var aD=0;aD<aL;aD++){aJ+=aH[aD];if(ay.measureText(aJ).width>aE){aG.push(aD);aJ="";aD--}}if(aG.length===0){if(H(az).css("textAlign")==="center"){aN=aA+(aB-ay.measureText(aJ).width)/2-an}ay.fillText(aM,aN,aI)}else{aJ=aH.slice(0,aG[0]).join(" ");if(H(az).css("textAlign")==="center"){aN=aA+(aB-ay.measureText(aJ).width)/2-an}ay.fillText(aJ,aN,aO);aO+=aK;for(var aD=1,aC=aG.length;aD<aC;aD++){aJ=aH.slice(aG[aD-1],aG[aD]).join(" ");if(H(az).css("textAlign")==="center"){aN=aA+(aB-ay.measureText(aJ).width)/2-an}ay.fillText(aJ,aN,aO);aO+=aK}aJ=aH.slice(aG[aD-1],aH.length).join(" ");if(H(az).css("textAlign")==="center"){aN=aA+(aB-ay.measureText(aJ).width)/2-an}ay.fillText(aJ,aN,aO)}}function ap(aA,aD,ay){var aH=aA.tagName.toLowerCase();var az=H(aA).position();var aE=window.getComputedStyle?window.getComputedStyle(aA,""):aA.currentStyle;var aC=aD+az.left+parseInt(aE.marginLeft,10)+parseInt(aE.borderLeftWidth,10)+parseInt(aE.paddingLeft,10);var aF=ay+az.top+parseInt(aE.marginTop,10)+parseInt(aE.borderTopWidth,10)+parseInt(aE.paddingTop,10);var aG=ah.width;if((aH=="div"||aH=="span")&&!H(aA).hasClass("jqplot-highlighter-tooltip")){H(aA).children().each(function(){ap(this,aC,aF)});var aI=H(aA).jqplotChildText();if(aI){ae.font=H(aA).jqplotGetComputedFontStyle();ae.fillStyle=H(aA).css("color");ax(aA,ae,aI,aC,aF,aG)}}else{if(aH==="table"&&H(aA).hasClass("jqplot-table-legend")){ae.strokeStyle=H(aA).css("border-top-color");ae.fillStyle=H(aA).css("background-color");ae.fillRect(aC,aF,H(aA).innerWidth(),H(aA).innerHeight());if(parseInt(H(aA).css("border-top-width"),10)>0){ae.strokeRect(aC,aF,H(aA).innerWidth(),H(aA).innerHeight())}H(aA).find("div.jqplot-table-legend-swatch-outline").each(function(){var aO=H(this);ae.strokeStyle=aO.css("border-top-color");var aK=aC+aO.position().left;var aL=aF+aO.position().top;ae.strokeRect(aK,aL,aO.innerWidth(),aO.innerHeight());aK+=parseInt(aO.css("padding-left"),10);aL+=parseInt(aO.css("padding-top"),10);var aN=aO.innerHeight()-2*parseInt(aO.css("padding-top"),10);var aJ=aO.innerWidth()-2*parseInt(aO.css("padding-left"),10);var aM=aO.children("div.jqplot-table-legend-swatch");ae.fillStyle=aM.css("background-color");ae.fillRect(aK,aL,aJ,aN)});H(aA).find("td.jqplot-table-legend-label").each(function(){var aL=H(this);var aJ=aC+aL.position().left;var aK=aF+aL.position().top+parseInt(aL.css("padding-top"),10);ae.font=aL.jqplotGetComputedFontStyle();ae.fillStyle=aL.css("color");ax(aL,ae,aL.text(),aJ,aK,aG)});var aB=null}else{if(aH=="canvas"){ae.drawImage(aA,aC,aF)}}}}H(this).children().each(function(){ap(this,ao,aq)});return ah};H.fn.jqplotToImageStr=function(ac){var ab=H(this).jqplotToImageCanvas(ac);if(ab){return ab.toDataURL("image/png")}else{return null}};H.fn.jqplotToImageElem=function(ab){var ac=document.createElement("img");var ad=H(this).jqplotToImageStr(ab);ac.src=ad;return ac};H.fn.jqplotToImageElemStr=function(ab){var ac="<img src="+H(this).jqplotToImageStr(ab)+" />";return ac};H.fn.jqplotSaveImage=function(){var ab=H(this).jqplotToImageStr({});if(ab){window.location.href=ab.replace("image/png","image/octet-stream")}};H.fn.jqplotViewImage=function(){var ac=H(this).jqplotToImageElemStr({});var ad=H(this).jqplotToImageStr({});if(ac){var ab=window.open("");ab.document.open("image/png");ab.document.write(ac);ab.document.close();ab=null}};var aa=function(){this.syntax=aa.config.syntax;this._type="jsDate";this.proxy=new Date();this.options={};this.locale=aa.regional.getLocale();this.formatString="";this.defaultCentury=aa.config.defaultCentury;switch(arguments.length){case 0:break;case 1:if(j(arguments[0])=="[object Object]"&&arguments[0]._type!="jsDate"){var ad=this.options=arguments[0];this.syntax=ad.syntax||this.syntax;this.defaultCentury=ad.defaultCentury||this.defaultCentury;this.proxy=aa.createDate(ad.date)}else{this.proxy=aa.createDate(arguments[0])}break;default:var ab=[];for(var ac=0;ac<arguments.length;ac++){ab.push(arguments[ac])}this.proxy=new Date();this.proxy.setFullYear.apply(this.proxy,ab.slice(0,3));if(ab.slice(3).length){this.proxy.setHours.apply(this.proxy,ab.slice(3))}break}};aa.config={defaultLocale:"en",syntax:"perl",defaultCentury:1900};aa.prototype.add=function(ad,ac){var ab=A[ac]||A.day;if(typeof ab=="number"){this.proxy.setTime(this.proxy.getTime()+(ab*ad))}else{ab.add(this,ad)}return this};aa.prototype.clone=function(){return new aa(this.proxy.getTime())};aa.prototype.getUtcOffset=function(){return this.proxy.getTimezoneOffset()*60000};aa.prototype.diff=function(ac,af,ab){ac=new aa(ac);if(ac===null){return null}var ad=A[af]||A.day;if(typeof ad=="number"){var ae=(this.proxy.getTime()-ac.proxy.getTime())/ad}else{var ae=ad.diff(this.proxy,ac.proxy)}return(ab?ae:Math[ae>0?"floor":"ceil"](ae))};aa.prototype.getAbbrDayName=function(){return aa.regional[this.locale]["dayNamesShort"][this.proxy.getDay()]};aa.prototype.getAbbrMonthName=function(){return aa.regional[this.locale]["monthNamesShort"][this.proxy.getMonth()]};aa.prototype.getAMPM=function(){return this.proxy.getHours()>=12?"PM":"AM"};aa.prototype.getAmPm=function(){return this.proxy.getHours()>=12?"pm":"am"};aa.prototype.getCentury=function(){return parseInt(this.proxy.getFullYear()/100,10)};aa.prototype.getDate=function(){return this.proxy.getDate()};aa.prototype.getDay=function(){return this.proxy.getDay()};aa.prototype.getDayOfWeek=function(){var ab=this.proxy.getDay();return ab===0?7:ab};aa.prototype.getDayOfYear=function(){var ac=this.proxy;var ab=ac-new Date(""+ac.getFullYear()+"/1/1 GMT");ab+=ac.getTimezoneOffset()*60000;ac=null;return parseInt(ab/60000/60/24,10)+1};aa.prototype.getDayName=function(){return aa.regional[this.locale]["dayNames"][this.proxy.getDay()]};aa.prototype.getFullWeekOfYear=function(){var ae=this.proxy;var ab=this.getDayOfYear();var ad=6-ae.getDay();var ac=parseInt((ab+ad)/7,10);return ac};aa.prototype.getFullYear=function(){return this.proxy.getFullYear()};aa.prototype.getGmtOffset=function(){var ab=this.proxy.getTimezoneOffset()/60;var ac=ab<0?"+":"-";ab=Math.abs(ab);return ac+J(Math.floor(ab),2)+":"+J((ab%1)*60,2)};aa.prototype.getHours=function(){return this.proxy.getHours()};aa.prototype.getHours12=function(){var ab=this.proxy.getHours();return ab>12?ab-12:(ab==0?12:ab)};aa.prototype.getIsoWeek=function(){var ae=this.proxy;var ad=ae.getWeekOfYear();var ab=(new Date(""+ae.getFullYear()+"/1/1")).getDay();var ac=ad+(ab>4||ab<=1?0:1);if(ac==53&&(new Date(""+ae.getFullYear()+"/12/31")).getDay()<4){ac=1}else{if(ac===0){ae=new aa(new Date(""+(ae.getFullYear()-1)+"/12/31"));ac=ae.getIsoWeek()}}ae=null;return ac};aa.prototype.getMilliseconds=function(){return this.proxy.getMilliseconds()};aa.prototype.getMinutes=function(){return this.proxy.getMinutes()};aa.prototype.getMonth=function(){return this.proxy.getMonth()};aa.prototype.getMonthName=function(){return aa.regional[this.locale]["monthNames"][this.proxy.getMonth()]};aa.prototype.getMonthNumber=function(){return this.proxy.getMonth()+1};aa.prototype.getSeconds=function(){return this.proxy.getSeconds()};aa.prototype.getShortYear=function(){return this.proxy.getYear()%100};aa.prototype.getTime=function(){return this.proxy.getTime()};aa.prototype.getTimezoneAbbr=function(){return this.proxy.toString().replace(/^.*\(([^)]+)\)$/,"$1")};aa.prototype.getTimezoneName=function(){var ab=/(?:\((.+)\)$| ([A-Z]{3}) )/.exec(this.toString());return ab[1]||ab[2]||"GMT"+this.getGmtOffset()};aa.prototype.getTimezoneOffset=function(){return this.proxy.getTimezoneOffset()};aa.prototype.getWeekOfYear=function(){var ab=this.getDayOfYear();var ad=7-this.getDayOfWeek();var ac=parseInt((ab+ad)/7,10);return ac};aa.prototype.getUnix=function(){return Math.round(this.proxy.getTime()/1000,0)};aa.prototype.getYear=function(){return this.proxy.getYear()};aa.prototype.next=function(ab){ab=ab||"day";return this.clone().add(1,ab)};aa.prototype.set=function(){switch(arguments.length){case 0:this.proxy=new Date();break;case 1:if(j(arguments[0])=="[object Object]"&&arguments[0]._type!="jsDate"){var ad=this.options=arguments[0];this.syntax=ad.syntax||this.syntax;this.defaultCentury=ad.defaultCentury||this.defaultCentury;this.proxy=aa.createDate(ad.date)}else{this.proxy=aa.createDate(arguments[0])}break;default:var ab=[];for(var ac=0;ac<arguments.length;ac++){ab.push(arguments[ac])}this.proxy=new Date();this.proxy.setFullYear.apply(this.proxy,ab.slice(0,3));if(ab.slice(3).length){this.proxy.setHours.apply(this.proxy,ab.slice(3))}break}return this};aa.prototype.setDate=function(ab){this.proxy.setDate(ab);return this};aa.prototype.setFullYear=function(){this.proxy.setFullYear.apply(this.proxy,arguments);return this};aa.prototype.setHours=function(){this.proxy.setHours.apply(this.proxy,arguments);return this};aa.prototype.setMilliseconds=function(ab){this.proxy.setMilliseconds(ab);return this};aa.prototype.setMinutes=function(){this.proxy.setMinutes.apply(this.proxy,arguments);return this};aa.prototype.setMonth=function(){this.proxy.setMonth.apply(this.proxy,arguments);return this};aa.prototype.setSeconds=function(){this.proxy.setSeconds.apply(this.proxy,arguments);return this};aa.prototype.setTime=function(ab){this.proxy.setTime(ab);return this};aa.prototype.setYear=function(){this.proxy.setYear.apply(this.proxy,arguments);return this};aa.prototype.strftime=function(ab){ab=ab||this.formatString||aa.regional[this.locale]["formatString"];return aa.strftime(this,ab,this.syntax)};aa.prototype.toString=function(){return this.proxy.toString()};aa.prototype.toYmdInt=function(){return(this.proxy.getFullYear()*10000)+(this.getMonthNumber()*100)+this.proxy.getDate()};aa.regional={en:{monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],formatString:"%Y-%m-%d %H:%M:%S"},fr:{monthNames:["Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre"],monthNamesShort:["Jan","Fév","Mar","Avr","Mai","Jun","Jul","Aoû","Sep","Oct","Nov","Déc"],dayNames:["Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"],dayNamesShort:["Dim","Lun","Mar","Mer","Jeu","Ven","Sam"],formatString:"%Y-%m-%d %H:%M:%S"},de:{monthNames:["Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"],monthNamesShort:["Jan","Feb","Mär","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez"],dayNames:["Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag"],dayNamesShort:["So","Mo","Di","Mi","Do","Fr","Sa"],formatString:"%Y-%m-%d %H:%M:%S"},es:{monthNames:["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],monthNamesShort:["Ene","Feb","Mar","Abr","May","Jun","Jul","Ago","Sep","Oct","Nov","Dic"],dayNames:["Domingo","Lunes","Martes","Mi&eacute;rcoles","Jueves","Viernes","S&aacute;bado"],dayNamesShort:["Dom","Lun","Mar","Mi&eacute;","Juv","Vie","S&aacute;b"],formatString:"%Y-%m-%d %H:%M:%S"},ru:{monthNames:["Январь","Февраль","Март","Ðпрель","Май","Июнь","Июль","ÐвгуÑÑ‚","СентÑбрь","ОктÑбрь","ÐоÑбрь","Декабрь"],monthNamesShort:["Янв","Фев","Мар","Ðпр","Май","Июн","Июл","Ðвг","Сен","Окт","ÐоÑ","Дек"],dayNames:["воÑкреÑенье","понедельник","вторник","Ñреда","четверг","пÑтница","Ñуббота"],dayNamesShort:["вÑк","пнд","втр","Ñрд","чтв","птн","Ñбт"],formatString:"%Y-%m-%d %H:%M:%S"},ar:{monthNames:["كانون الثاني","شباط","آذار","نيسان","آذار","حزيران","تموز","آب","أيلول","تشرين الأول","تشرين الثاني","كانون الأول"],monthNamesShort:["1","2","3","4","5","6","7","8","9","10","11","12"],dayNames:["السبت","الأحد","الاثنين","الثلاثاء","الأربعاء","الخميس","الجمعة"],dayNamesShort:["سبت","أحد","اثنين","ثلاثاء","أربعاء","خميس","جمعة"],formatString:"%Y-%m-%d %H:%M:%S"},pt:{monthNames:["Janeiro","Fevereiro","Mar&ccedil;o","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Ter&ccedil;a-feira","Quarta-feira","Quinta-feira","Sexta-feira","S&aacute;bado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","S&aacute;b"],formatString:"%Y-%m-%d %H:%M:%S"},"pt-BR":{monthNames:["Janeiro","Fevereiro","Mar&ccedil;o","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro"],monthNamesShort:["Jan","Fev","Mar","Abr","Mai","Jun","Jul","Ago","Set","Out","Nov","Dez"],dayNames:["Domingo","Segunda-feira","Ter&ccedil;a-feira","Quarta-feira","Quinta-feira","Sexta-feira","S&aacute;bado"],dayNamesShort:["Dom","Seg","Ter","Qua","Qui","Sex","S&aacute;b"],formatString:"%Y-%m-%d %H:%M:%S"}};aa.regional["en-US"]=aa.regional["en-GB"]=aa.regional.en;aa.regional.getLocale=function(){var ab=aa.config.defaultLocale;if(document&&document.getElementsByTagName("html")&&document.getElementsByTagName("html")[0].lang){ab=document.getElementsByTagName("html")[0].lang;if(!aa.regional.hasOwnProperty(ab)){ab=aa.config.defaultLocale}}return ab};var y=24*60*60*1000;var J=function(ab,ae){ab=String(ab);var ac=ae-ab.length;var ad=String(Math.pow(10,ac)).slice(1);return ad.concat(ab)};var A={millisecond:1,second:1000,minute:60*1000,hour:60*60*1000,day:y,week:7*y,month:{add:function(ad,ab){A.year.add(ad,Math[ab>0?"floor":"ceil"](ab/12));var ac=ad.getMonth()+(ab%12);if(ac==12){ac=0;ad.setYear(ad.getFullYear()+1)}else{if(ac==-1){ac=11;ad.setYear(ad.getFullYear()-1)}}ad.setMonth(ac)},diff:function(af,ad){var ab=af.getFullYear()-ad.getFullYear();var ac=af.getMonth()-ad.getMonth()+(ab*12);var ae=af.getDate()-ad.getDate();return ac+(ae/30)}},year:{add:function(ac,ab){ac.setYear(ac.getFullYear()+Math[ab>0?"floor":"ceil"](ab))},diff:function(ac,ab){return A.month.diff(ac,ab)/12}}};for(var T in A){if(T.substring(T.length-1)!="s"){A[T+"s"]=A[T]}}var D=function(af,ae,ac){if(aa.formats[ac]["shortcuts"][ae]){return aa.strftime(af,aa.formats[ac]["shortcuts"][ae],ac)}else{var ab=(aa.formats[ac]["codes"][ae]||"").split(".");var ad=af["get"+ab[0]]?af["get"+ab[0]]():"";if(ab[1]){ad=J(ad,ab[1])}return ad}};aa.strftime=function(ah,ae,ad,ai){var ac="perl";var ag=aa.regional.getLocale();if(ad&&aa.formats.hasOwnProperty(ad)){ac=ad}else{if(ad&&aa.regional.hasOwnProperty(ad)){ag=ad}}if(ai&&aa.formats.hasOwnProperty(ai)){ac=ai}else{if(ai&&aa.regional.hasOwnProperty(ai)){ag=ai}}if(j(ah)!="[object Object]"||ah._type!="jsDate"){ah=new aa(ah);ah.locale=ag}if(!ae){ae=ah.formatString||aa.regional[ag]["formatString"]}var ab=ae||"%Y-%m-%d",aj="",af;while(ab.length>0){if(af=ab.match(aa.formats[ac].codes.matcher)){aj+=ab.slice(0,af.index);aj+=(af[1]||"")+D(ah,af[2],ac);ab=ab.slice(af.index+af[0].length)}else{aj+=ab;ab=""}}return aj};aa.formats={ISO:"%Y-%m-%dT%H:%M:%S.%N%G",SQL:"%Y-%m-%d %H:%M:%S"};aa.formats.perl={codes:{matcher:/()%(#?(%|[a-z]))/i,Y:"FullYear",y:"ShortYear.2",m:"MonthNumber.2","#m":"MonthNumber",B:"MonthName",b:"AbbrMonthName",d:"Date.2","#d":"Date",e:"Date",A:"DayName",a:"AbbrDayName",w:"Day",H:"Hours.2","#H":"Hours",I:"Hours12.2","#I":"Hours12",p:"AMPM",M:"Minutes.2","#M":"Minutes",S:"Seconds.2","#S":"Seconds",s:"Unix",N:"Milliseconds.3","#N":"Milliseconds",O:"TimezoneOffset",Z:"TimezoneName",G:"GmtOffset"},shortcuts:{F:"%Y-%m-%d",T:"%H:%M:%S",X:"%H:%M:%S",x:"%m/%d/%y",D:"%m/%d/%y","#c":"%a %b %e %H:%M:%S %Y",v:"%e-%b-%Y",R:"%H:%M",r:"%I:%M:%S %p",t:"\t",n:"\n","%":"%"}};aa.formats.php={codes:{matcher:/()%((%|[a-z]))/i,a:"AbbrDayName",A:"DayName",d:"Date.2",e:"Date",j:"DayOfYear.3",u:"DayOfWeek",w:"Day",U:"FullWeekOfYear.2",V:"IsoWeek.2",W:"WeekOfYear.2",b:"AbbrMonthName",B:"MonthName",m:"MonthNumber.2",h:"AbbrMonthName",C:"Century.2",y:"ShortYear.2",Y:"FullYear",H:"Hours.2",I:"Hours12.2",l:"Hours12",p:"AMPM",P:"AmPm",M:"Minutes.2",S:"Seconds.2",s:"Unix",O:"TimezoneOffset",z:"GmtOffset",Z:"TimezoneAbbr"},shortcuts:{D:"%m/%d/%y",F:"%Y-%m-%d",T:"%H:%M:%S",X:"%H:%M:%S",x:"%m/%d/%y",R:"%H:%M",r:"%I:%M:%S %p",t:"\t",n:"\n","%":"%"}};aa.createDate=function(ad){if(ad==null){return new Date()}if(ad instanceof Date){return ad}if(typeof ad=="number"){return new Date(ad)}var ai=String(ad).replace(/^\s*(.+)\s*$/g,"$1");ai=ai.replace(/^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,4})/,"$1/$2/$3");ai=ai.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{4})/i,"$1 $2 $3");var ah=ai.match(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i);if(ah&&ah.length>3){var am=parseFloat(ah[3]);var ag=aa.config.defaultCentury+am;ag=String(ag);ai=ai.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i,ah[1]+" "+ah[2]+" "+ag)}ah=ai.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})[^0-9]/);function al(aq,ap){var aw=parseFloat(ap[1]);var av=parseFloat(ap[2]);var au=parseFloat(ap[3]);var at=aa.config.defaultCentury;var ao,an,ax,ar;if(aw>31){an=au;ax=av;ao=at+aw}else{an=av;ax=aw;ao=at+au}ar=ax+"/"+an+"/"+ao;return aq.replace(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})/,ar)}if(ah&&ah.length>3){ai=al(ai,ah)}var ah=ai.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})$/);if(ah&&ah.length>3){ai=al(ai,ah)}var af=0;var ac=aa.matchers.length;var ak,ab,aj=ai,ae;while(af<ac){ab=Date.parse(aj);if(!isNaN(ab)){return new Date(ab)}ak=aa.matchers[af];if(typeof ak=="function"){ae=ak.call(aa,aj);if(ae instanceof Date){return ae}}else{aj=ai.replace(ak[0],ak[1])}af++}return NaN};aa.daysInMonth=function(ab,ac){if(ac==2){return new Date(ab,1,29).getDate()==29?29:28}return[r,31,r,31,30,31,30,31,31,30,31,30,31][ac]};aa.matchers=[[/(3[01]|[0-2]\d)\s*\.\s*(1[0-2]|0\d)\s*\.\s*([1-9]\d{3})/,"$2/$1/$3"],[/([1-9]\d{3})\s*-\s*(1[0-2]|0\d)\s*-\s*(3[01]|[0-2]\d)/,"$2/$3/$1"],function(ae){var ac=ae.match(/^(?:(.+)\s+)?([012]?\d)(?:\s*\:\s*(\d\d))?(?:\s*\:\s*(\d\d(\.\d*)?))?\s*(am|pm)?\s*$/i);if(ac){if(ac[1]){var ad=this.createDate(ac[1]);if(isNaN(ad)){return}}else{var ad=new Date();ad.setMilliseconds(0)}var ab=parseFloat(ac[2]);if(ac[6]){ab=ac[6].toLowerCase()=="am"?(ab==12?0:ab):(ab==12?12:ab+12)}ad.setHours(ab,parseInt(ac[3]||0,10),parseInt(ac[4]||0,10),((parseFloat(ac[5]||0))||0)*1000);return ad}else{return ae}},function(ae){var ac=ae.match(/^(?:(.+))[T|\s+]([012]\d)(?:\:(\d\d))(?:\:(\d\d))(?:\.\d+)([\+\-]\d\d\:\d\d)$/i);if(ac){if(ac[1]){var ad=this.createDate(ac[1]);if(isNaN(ad)){return}}else{var ad=new Date();ad.setMilliseconds(0)}var ab=parseFloat(ac[2]);ad.setHours(ab,parseInt(ac[3],10),parseInt(ac[4],10),parseFloat(ac[5])*1000);return ad}else{return ae}},function(af){var ad=af.match(/^([0-3]?\d)\s*[-\/.\s]{1}\s*([a-zA-Z]{3,9})\s*[-\/.\s]{1}\s*([0-3]?\d)$/);if(ad){var ae=new Date();var ag=aa.config.defaultCentury;var ai=parseFloat(ad[1]);var ah=parseFloat(ad[3]);var ac,ab,aj;if(ai>31){ab=ah;ac=ag+ai}else{ab=ai;ac=ag+ah}var aj=W(ad[2],aa.regional[aa.regional.getLocale()]["monthNamesShort"]);if(aj==-1){aj=W(ad[2],aa.regional[aa.regional.getLocale()]["monthNames"])}ae.setFullYear(ac,aj,ab);ae.setHours(0,0,0,0);return ae}else{return af}}];function W(ad,ae){if(ae.indexOf){return ae.indexOf(ad)}for(var ab=0,ac=ae.length;ab<ac;ab++){if(ae[ab]===ad){return ab}}return -1}function j(ab){if(ab===null){return"[object Null]"}return Object.prototype.toString.call(ab)}H.jsDate=aa;H.jqplot.sprintf=function(){function ah(an,aj,ak,am){var al=(an.length>=aj)?"":Array(1+aj-an.length>>>0).join(ak);return am?an+al:al+an}function ae(al){var ak=new String(al);for(var aj=10;aj>0;aj--){if(ak==(ak=ak.replace(/^(\d+)(\d{3})/,"$1"+H.jqplot.sprintf.thousandsSeparator+"$2"))){break}}return ak}function ad(ao,an,aq,al,am,ak){var ap=al-ao.length;if(ap>0){var aj=" ";if(ak){aj="&nbsp;"}if(aq||!am){ao=ah(ao,al,aj,aq)}else{ao=ao.slice(0,an.length)+ah("",ap,"0",true)+ao.slice(an.length)}}return ao}function ai(ar,ak,ap,al,aj,ao,aq,an){var am=ar>>>0;ap=ap&&am&&{"2":"0b","8":"0","16":"0x"}[ak]||"";ar=ap+ah(am.toString(ak),ao||0,"0",false);return ad(ar,ap,al,aj,aq,an)}function ab(an,ao,al,aj,am,ak){if(aj!=null){an=an.slice(0,aj)}return ad(an,"",ao,al,am,ak)}var ac=arguments,af=0,ag=ac[af++];return ag.replace(H.jqplot.sprintf.regex,function(aG,aq,ar,av,aI,aD,ao){if(aG=="%%"){return"%"}var ax=false,at="",au=false,aF=false,ap=false,an=false;for(var aC=0;ar&&aC<ar.length;aC++){switch(ar.charAt(aC)){case" ":at=" ";break;case"+":at="+";break;case"-":ax=true;break;case"0":au=true;break;case"#":aF=true;break;case"&":ap=true;break;case"'":an=true;break}}if(!av){av=0}else{if(av=="*"){av=+ac[af++]}else{if(av.charAt(0)=="*"){av=+ac[av.slice(1,-1)]}else{av=+av}}}if(av<0){av=-av;ax=true}if(!isFinite(av)){throw new Error("$.jqplot.sprintf: (minimum-)width must be finite")}if(!aD){aD="fFeE".indexOf(ao)>-1?6:(ao=="d")?0:void (0)}else{if(aD=="*"){aD=+ac[af++]}else{if(aD.charAt(0)=="*"){aD=+ac[aD.slice(1,-1)]}else{aD=+aD}}}var az=aq?ac[aq.slice(0,-1)]:ac[af++];switch(ao){case"s":if(az==null){return""}return ab(String(az),ax,av,aD,au,ap);case"c":return ab(String.fromCharCode(+az),ax,av,aD,au,ap);case"b":return ai(az,2,aF,ax,av,aD,au,ap);case"o":return ai(az,8,aF,ax,av,aD,au,ap);case"x":return ai(az,16,aF,ax,av,aD,au,ap);case"X":return ai(az,16,aF,ax,av,aD,au,ap).toUpperCase();case"u":return ai(az,10,aF,ax,av,aD,au,ap);case"i":var al=parseInt(+az,10);if(isNaN(al)){return""}var aB=al<0?"-":at;var aE=an?ae(String(Math.abs(al))):String(Math.abs(al));az=aB+ah(aE,aD,"0",false);return ad(az,aB,ax,av,au,ap);case"d":var al=Math.round(+az);if(isNaN(al)){return""}var aB=al<0?"-":at;var aE=an?ae(String(Math.abs(al))):String(Math.abs(al));az=aB+ah(aE,aD,"0",false);return ad(az,aB,ax,av,au,ap);case"e":case"E":case"f":case"F":case"g":case"G":var al=+az;if(isNaN(al)){return""}var aB=al<0?"-":at;var am=["toExponential","toFixed","toPrecision"]["efg".indexOf(ao.toLowerCase())];var aH=["toString","toUpperCase"]["eEfFgG".indexOf(ao)%2];var aE=Math.abs(al)[am](aD);aE=an?ae(aE):aE;az=aB+aE;var aw=ad(az,aB,ax,av,au,ap)[aH]();if(H.jqplot.sprintf.decimalMark!=="."&&H.jqplot.sprintf.decimalMark!==H.jqplot.sprintf.thousandsSeparator){return aw.replace(/\./,H.jqplot.sprintf.decimalMark)}else{return aw}case"p":case"P":var al=+az;if(isNaN(al)){return""}var aB=al<0?"-":at;var ay=String(Number(Math.abs(al)).toExponential()).split(/e|E/);var ak=(ay[0].indexOf(".")!=-1)?ay[0].length-1:ay[0].length;var aA=(ay[1]<0)?-ay[1]-1:0;if(Math.abs(al)<1){if(ak+aA<=aD){az=aB+Math.abs(al).toPrecision(ak)}else{if(ak<=aD-1){az=aB+Math.abs(al).toExponential(ak-1)}else{az=aB+Math.abs(al).toExponential(aD-1)}}}else{var aj=(ak<=aD)?ak:aD;az=aB+Math.abs(al).toPrecision(aj)}var aH=["toString","toUpperCase"]["pP".indexOf(ao)%2];return ad(az,aB,ax,av,au,ap)[aH]();case"n":return"";default:return aG}})};H.jqplot.sprintf.thousandsSeparator=",";H.jqplot.sprintf.decimalMark=".";H.jqplot.sprintf.regex=/%%|%(\d+\$)?([-+#0&\' ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g;H.jqplot.getSignificantFigures=function(af){var ah=String(Number(Math.abs(af)).toExponential()).split(/e|E/);var ag=(ah[0].indexOf(".")!=-1)?ah[0].length-1:ah[0].length;var ac=(ah[1]<0)?-ah[1]-1:0;var ab=parseInt(ah[1],10);var ad=(ab+1>0)?ab+1:0;var ae=(ag<=ad)?0:ag-ab-1;return{significantDigits:ag,digitsLeft:ad,digitsRight:ae,zeros:ac,exponent:ab}};H.jqplot.getPrecision=function(ab){return H.jqplot.getSignificantFigures(ab).digitsRight}})(jQuery);var backCompat=$.uiBackCompat!==false;$.jqplot.effects={effect:{}};var dataSpace="jqplot.storage.";$.extend($.jqplot.effects,{version:"1.9pre",save:function(b,c){for(var a=0;a<c.length;a++){if(c[a]!==null){b.data(dataSpace+c[a],b[0].style[c[a]])}}},restore:function(b,c){for(var a=0;a<c.length;a++){if(c[a]!==null){b.css(c[a],b.data(dataSpace+c[a]))}}},setMode:function(a,b){if(b==="toggle"){b=a.is(":hidden")?"show":"hide"}return b},createWrapper:function(b){if(b.parent().is(".ui-effects-wrapper")){return b.parent()}var c={width:b.outerWidth(true),height:b.outerHeight(true),"float":b.css("float")},e=$("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),a={width:b.width(),height:b.height()},d=document.activeElement;b.wrap(e);if(b[0]===d||$.contains(b[0],d)){$(d).focus()}e=b.parent();if(b.css("position")==="static"){e.css({position:"relative"});b.css({position:"relative"})}else{$.extend(c,{position:b.css("position"),zIndex:b.css("z-index")});$.each(["top","left","bottom","right"],function(f,g){c[g]=b.css(g);if(isNaN(parseInt(c[g],10))){c[g]="auto"}});b.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}b.css(a);return e.css(c).show()},removeWrapper:function(a){var b=document.activeElement;if(a.parent().is(".ui-effects-wrapper")){a.parent().replaceWith(a);if(a[0]===b||$.contains(a[0],b)){$(b).focus()}}return a}});function _normalizeArguments(b,a,c,d){if($.isPlainObject(b)){return b}b={effect:b};if(a===undefined){a={}}if($.isFunction(a)){d=a;c=null;a={}}if($.type(a)==="number"||$.fx.speeds[a]){d=c;c=a;a={}}if($.isFunction(c)){d=c;c=null}if(a){$.extend(b,a)}c=c||a.duration;b.duration=$.fx.off?0:typeof c==="number"?c:c in $.fx.speeds?$.fx.speeds[c]:$.fx.speeds._default;b.complete=d||a.complete;return b}function standardSpeed(a){if(!a||typeof a==="number"||$.fx.speeds[a]){return true}if(typeof a==="string"&&!$.jqplot.effects.effect[a]){if(backCompat&&$.jqplot.effects[a]){return false}return true}return false}$.fn.extend({jqplotEffect:function(i,j,b,h){var g=_normalizeArguments.apply(this,arguments),d=g.mode,e=g.queue,f=$.jqplot.effects.effect[g.effect],a=!f&&backCompat&&$.jqplot.effects[g.effect];if($.fx.off||!(f||a)){if(d){return this[d](g.duration,g.complete)}else{return this.each(function(){if(g.complete){g.complete.call(this)}})}}function c(m){var n=$(this),l=g.complete,o=g.mode;function k(){if($.isFunction(l)){l.call(n[0])}if($.isFunction(m)){m()}}if(n.is(":hidden")?o==="hide":o==="show"){k()}else{f.call(n[0],g,k)}}if(f){return e===false?this.each(c):this.queue(e||"fx",c)}else{return a.call(this,{options:g,duration:g.duration,callback:g.complete,mode:g.mode})}}});var rvertical=/up|down|vertical/,rpositivemotion=/up|left|vertical|horizontal/;$.jqplot.effects.effect.blind=function(c,h){var d=$(this),k=["position","top","bottom","left","right","height","width"],i=$.jqplot.effects.setMode(d,c.mode||"hide"),m=c.direction||"up",f=rvertical.test(m),e=f?"height":"width",j=f?"top":"left",p=rpositivemotion.test(m),g={},n=i==="show",b,a,l;if(d.parent().is(".ui-effects-wrapper")){$.jqplot.effects.save(d.parent(),k)}else{$.jqplot.effects.save(d,k)}d.show();l=parseInt(d.css("top"),10);b=$.jqplot.effects.createWrapper(d).css({overflow:"hidden"});a=f?b[e]()+l:b[e]();g[e]=n?String(a):"0";if(!p){d.css(f?"bottom":"right",0).css(f?"top":"left","").css({position:"absolute"});g[j]=n?"0":String(a)}if(n){b.css(e,0);if(!p){b.css(j,a)}}b.animate(g,{duration:c.duration,easing:c.easing,queue:false,complete:function(){if(i==="hide"){d.hide()}$.jqplot.effects.restore(d,k);$.jqplot.effects.removeWrapper(d);h()}})}; \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.js b/wqflask/wqflask/static/packages/jqplot/jquery.js
deleted file mode 100644
index 27914ea3..00000000
--- a/wqflask/wqflask/static/packages/jqplot/jquery.js
+++ /dev/null
@@ -1,9046 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.6.4
- * http://jquery.com/
- *
- * Copyright 2011, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Mon Sep 12 18:54:48 2011 -0400
- */
-(function( window, undefined ) {
-
-// Use the correct document accordingly with window argument (sandbox)
-var document = window.document,
- navigator = window.navigator,
- location = window.location;
-var jQuery = (function() {
-
-// Define a local copy of jQuery
-var jQuery = function( selector, context ) {
- // The jQuery object is actually just the init constructor 'enhanced'
- return new jQuery.fn.init( selector, context, rootjQuery );
- },
-
- // Map over jQuery in case of overwrite
- _jQuery = window.jQuery,
-
- // Map over the $ in case of overwrite
- _$ = window.$,
-
- // A central reference to the root jQuery(document)
- rootjQuery,
-
- // A simple way to check for HTML strings or ID strings
- // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
- quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
-
- // Check if a string has a non-whitespace character in it
- rnotwhite = /\S/,
-
- // Used for trimming whitespace
- trimLeft = /^\s+/,
- trimRight = /\s+$/,
-
- // Check for digits
- rdigit = /\d/,
-
- // Match a standalone tag
- rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
-
- // JSON RegExp
- rvalidchars = /^[\],:{}\s]*$/,
- rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
- rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
- rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
-
- // Useragent RegExp
- rwebkit = /(webkit)[ \/]([\w.]+)/,
- ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
- rmsie = /(msie) ([\w.]+)/,
- rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
-
- // Matches dashed string for camelizing
- rdashAlpha = /-([a-z]|[0-9])/ig,
- rmsPrefix = /^-ms-/,
-
- // Used by jQuery.camelCase as callback to replace()
- fcamelCase = function( all, letter ) {
- return ( letter + "" ).toUpperCase();
- },
-
- // Keep a UserAgent string for use with jQuery.browser
- userAgent = navigator.userAgent,
-
- // For matching the engine and version of the browser
- browserMatch,
-
- // The deferred used on DOM ready
- readyList,
-
- // The ready event handler
- DOMContentLoaded,
-
- // Save a reference to some core methods
- toString = Object.prototype.toString,
- hasOwn = Object.prototype.hasOwnProperty,
- push = Array.prototype.push,
- slice = Array.prototype.slice,
- trim = String.prototype.trim,
- indexOf = Array.prototype.indexOf,
-
- // [[Class]] -> type pairs
- class2type = {};
-
-jQuery.fn = jQuery.prototype = {
- constructor: jQuery,
- init: function( selector, context, rootjQuery ) {
- var match, elem, ret, doc;
-
- // Handle $(""), $(null), or $(undefined)
- if ( !selector ) {
- return this;
- }
-
- // Handle $(DOMElement)
- if ( selector.nodeType ) {
- this.context = this[0] = selector;
- this.length = 1;
- return this;
- }
-
- // The body element only exists once, optimize finding it
- if ( selector === "body" && !context && document.body ) {
- this.context = document;
- this[0] = document.body;
- this.selector = selector;
- this.length = 1;
- return this;
- }
-
- // Handle HTML strings
- if ( typeof selector === "string" ) {
- // Are we dealing with HTML string or an ID?
- if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
- // Assume that strings that start and end with <> are HTML and skip the regex check
- match = [ null, selector, null ];
-
- } else {
- match = quickExpr.exec( selector );
- }
-
- // Verify a match, and that no context was specified for #id
- if ( match && (match[1] || !context) ) {
-
- // HANDLE: $(html) -> $(array)
- if ( match[1] ) {
- context = context instanceof jQuery ? context[0] : context;
- doc = (context ? context.ownerDocument || context : document);
-
- // If a single string is passed in and it's a single tag
- // just do a createElement and skip the rest
- ret = rsingleTag.exec( selector );
-
- if ( ret ) {
- if ( jQuery.isPlainObject( context ) ) {
- selector = [ document.createElement( ret[1] ) ];
- jQuery.fn.attr.call( selector, context, true );
-
- } else {
- selector = [ doc.createElement( ret[1] ) ];
- }
-
- } else {
- ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
- selector = (ret.cacheable ? jQuery.clone(ret.fragment) : ret.fragment).childNodes;
- }
-
- return jQuery.merge( this, selector );
-
- // HANDLE: $("#id")
- } else {
- elem = document.getElementById( match[2] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id !== match[2] ) {
- return rootjQuery.find( selector );
- }
-
- // Otherwise, we inject the element directly into the jQuery object
- this.length = 1;
- this[0] = elem;
- }
-
- this.context = document;
- this.selector = selector;
- return this;
- }
-
- // HANDLE: $(expr, $(...))
- } else if ( !context || context.jquery ) {
- return (context || rootjQuery).find( selector );
-
- // HANDLE: $(expr, context)
- // (which is just equivalent to: $(context).find(expr)
- } else {
- return this.constructor( context ).find( selector );
- }
-
- // HANDLE: $(function)
- // Shortcut for document ready
- } else if ( jQuery.isFunction( selector ) ) {
- return rootjQuery.ready( selector );
- }
-
- if (selector.selector !== undefined) {
- this.selector = selector.selector;
- this.context = selector.context;
- }
-
- return jQuery.makeArray( selector, this );
- },
-
- // Start with an empty selector
- selector: "",
-
- // The current version of jQuery being used
- jquery: "1.6.4",
-
- // The default length of a jQuery object is 0
- length: 0,
-
- // The number of elements contained in the matched element set
- size: function() {
- return this.length;
- },
-
- toArray: function() {
- return slice.call( this, 0 );
- },
-
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function( num ) {
- return num == null ?
-
- // Return a 'clean' array
- this.toArray() :
-
- // Return just the object
- ( num < 0 ? this[ this.length + num ] : this[ num ] );
- },
-
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function( elems, name, selector ) {
- // Build a new jQuery matched element set
- var ret = this.constructor();
-
- if ( jQuery.isArray( elems ) ) {
- push.apply( ret, elems );
-
- } else {
- jQuery.merge( ret, elems );
- }
-
- // Add the old object onto the stack (as a reference)
- ret.prevObject = this;
-
- ret.context = this.context;
-
- if ( name === "find" ) {
- ret.selector = this.selector + (this.selector ? " " : "") + selector;
- } else if ( name ) {
- ret.selector = this.selector + "." + name + "(" + selector + ")";
- }
-
- // Return the newly-formed element set
- return ret;
- },
-
- // Execute a callback for every element in the matched set.
- // (You can seed the arguments with an array of args, but this is
- // only used internally.)
- each: function( callback, args ) {
- return jQuery.each( this, callback, args );
- },
-
- ready: function( fn ) {
- // Attach the listeners
- jQuery.bindReady();
-
- // Add the callback
- readyList.done( fn );
-
- return this;
- },
-
- eq: function( i ) {
- return i === -1 ?
- this.slice( i ) :
- this.slice( i, +i + 1 );
- },
-
- first: function() {
- return this.eq( 0 );
- },
-
- last: function() {
- return this.eq( -1 );
- },
-
- slice: function() {
- return this.pushStack( slice.apply( this, arguments ),
- "slice", slice.call(arguments).join(",") );
- },
-
- map: function( callback ) {
- return this.pushStack( jQuery.map(this, function( elem, i ) {
- return callback.call( elem, i, elem );
- }));
- },
-
- end: function() {
- return this.prevObject || this.constructor(null);
- },
-
- // For internal use only.
- // Behaves like an Array's method, not like a jQuery method.
- push: push,
- sort: [].sort,
- splice: [].splice
-};
-
-// Give the init function the jQuery prototype for later instantiation
-jQuery.fn.init.prototype = jQuery.fn;
-
-jQuery.extend = jQuery.fn.extend = function() {
- var options, name, src, copy, copyIsArray, clone,
- target = arguments[0] || {},
- i = 1,
- length = arguments.length,
- deep = false;
-
- // Handle a deep copy situation
- if ( typeof target === "boolean" ) {
- deep = target;
- target = arguments[1] || {};
- // skip the boolean and the target
- i = 2;
- }
-
- // Handle case when target is a string or something (possible in deep copy)
- if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
- target = {};
- }
-
- // extend jQuery itself if only one argument is passed
- if ( length === i ) {
- target = this;
- --i;
- }
-
- for ( ; i < length; i++ ) {
- // Only deal with non-null/undefined values
- if ( (options = arguments[ i ]) != null ) {
- // Extend the base object
- for ( name in options ) {
- src = target[ name ];
- copy = options[ name ];
-
- // Prevent never-ending loop
- if ( target === copy ) {
- continue;
- }
-
- // Recurse if we're merging plain objects or arrays
- if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
- if ( copyIsArray ) {
- copyIsArray = false;
- clone = src && jQuery.isArray(src) ? src : [];
-
- } else {
- clone = src && jQuery.isPlainObject(src) ? src : {};
- }
-
- // Never move original objects, clone them
- target[ name ] = jQuery.extend( deep, clone, copy );
-
- // Don't bring in undefined values
- } else if ( copy !== undefined ) {
- target[ name ] = copy;
- }
- }
- }
- }
-
- // Return the modified object
- return target;
-};
-
-jQuery.extend({
- noConflict: function( deep ) {
- if ( window.$ === jQuery ) {
- window.$ = _$;
- }
-
- if ( deep && window.jQuery === jQuery ) {
- window.jQuery = _jQuery;
- }
-
- return jQuery;
- },
-
- // Is the DOM ready to be used? Set to true once it occurs.
- isReady: false,
-
- // A counter to track how many items to wait for before
- // the ready event fires. See #6781
- readyWait: 1,
-
- // Hold (or release) the ready event
- holdReady: function( hold ) {
- if ( hold ) {
- jQuery.readyWait++;
- } else {
- jQuery.ready( true );
- }
- },
-
- // Handle when the DOM is ready
- ready: function( wait ) {
- // Either a released hold or an DOMready/load event and not yet ready
- if ( (wait === true && !--jQuery.readyWait) || (wait !== true && !jQuery.isReady) ) {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( !document.body ) {
- return setTimeout( jQuery.ready, 1 );
- }
-
- // Remember that the DOM is ready
- jQuery.isReady = true;
-
- // If a normal DOM Ready event fired, decrement, and wait if need be
- if ( wait !== true && --jQuery.readyWait > 0 ) {
- return;
- }
-
- // If there are functions bound, to execute
- readyList.resolveWith( document, [ jQuery ] );
-
- // Trigger any bound ready events
- if ( jQuery.fn.trigger ) {
- jQuery( document ).trigger( "ready" ).unbind( "ready" );
- }
- }
- },
-
- bindReady: function() {
- if ( readyList ) {
- return;
- }
-
- readyList = jQuery._Deferred();
-
- // Catch cases where $(document).ready() is called after the
- // browser event has already occurred.
- if ( document.readyState === "complete" ) {
- // Handle it asynchronously to allow scripts the opportunity to delay ready
- return setTimeout( jQuery.ready, 1 );
- }
-
- // Mozilla, Opera and webkit nightlies currently support this event
- if ( document.addEventListener ) {
- // Use the handy event callback
- document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
-
- // A fallback to window.onload, that will always work
- window.addEventListener( "load", jQuery.ready, false );
-
- // If IE event model is used
- } else if ( document.attachEvent ) {
- // ensure firing before onload,
- // maybe late but safe also for iframes
- document.attachEvent( "onreadystatechange", DOMContentLoaded );
-
- // A fallback to window.onload, that will always work
- window.attachEvent( "onload", jQuery.ready );
-
- // If IE and not a frame
- // continually check to see if the document is ready
- var toplevel = false;
-
- try {
- toplevel = window.frameElement == null;
- } catch(e) {}
-
- if ( document.documentElement.doScroll && toplevel ) {
- doScrollCheck();
- }
- }
- },
-
- // See test/unit/core.js for details concerning isFunction.
- // Since version 1.3, DOM methods and functions like alert
- // aren't supported. They return false on IE (#2968).
- isFunction: function( obj ) {
- return jQuery.type(obj) === "function";
- },
-
- isArray: Array.isArray || function( obj ) {
- return jQuery.type(obj) === "array";
- },
-
- // A crude way of determining if an object is a window
- isWindow: function( obj ) {
- return obj && typeof obj === "object" && "setInterval" in obj;
- },
-
- isNaN: function( obj ) {
- return obj == null || !rdigit.test( obj ) || isNaN( obj );
- },
-
- type: function( obj ) {
- return obj == null ?
- String( obj ) :
- class2type[ toString.call(obj) ] || "object";
- },
-
- isPlainObject: function( obj ) {
- // Must be an Object.
- // Because of IE, we also have to check the presence of the constructor property.
- // Make sure that DOM nodes and window objects don't pass through, as well
- if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
- return false;
- }
-
- try {
- // Not own constructor property must be Object
- if ( obj.constructor &&
- !hasOwn.call(obj, "constructor") &&
- !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
- return false;
- }
- } catch ( e ) {
- // IE8,9 Will throw exceptions on certain host objects #9897
- return false;
- }
-
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own.
-
- var key;
- for ( key in obj ) {}
-
- return key === undefined || hasOwn.call( obj, key );
- },
-
- isEmptyObject: function( obj ) {
- for ( var name in obj ) {
- return false;
- }
- return true;
- },
-
- error: function( msg ) {
- throw msg;
- },
-
- parseJSON: function( data ) {
- if ( typeof data !== "string" || !data ) {
- return null;
- }
-
- // Make sure leading/trailing whitespace is removed (IE can't handle it)
- data = jQuery.trim( data );
-
- // Attempt to parse using the native JSON parser first
- if ( window.JSON && window.JSON.parse ) {
- return window.JSON.parse( data );
- }
-
- // Make sure the incoming data is actual JSON
- // Logic borrowed from http://json.org/json2.js
- if ( rvalidchars.test( data.replace( rvalidescape, "@" )
- .replace( rvalidtokens, "]" )
- .replace( rvalidbraces, "")) ) {
-
- return (new Function( "return " + data ))();
-
- }
- jQuery.error( "Invalid JSON: " + data );
- },
-
- // Cross-browser xml parsing
- parseXML: function( data ) {
- var xml, tmp;
- try {
- if ( window.DOMParser ) { // Standard
- tmp = new DOMParser();
- xml = tmp.parseFromString( data , "text/xml" );
- } else { // IE
- xml = new ActiveXObject( "Microsoft.XMLDOM" );
- xml.async = "false";
- xml.loadXML( data );
- }
- } catch( e ) {
- xml = undefined;
- }
- if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
- jQuery.error( "Invalid XML: " + data );
- }
- return xml;
- },
-
- noop: function() {},
-
- // Evaluates a script in a global context
- // Workarounds based on findings by Jim Driscoll
- // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
- globalEval: function( data ) {
- if ( data && rnotwhite.test( data ) ) {
- // We use execScript on Internet Explorer
- // We use an anonymous function so that context is window
- // rather than jQuery in Firefox
- ( window.execScript || function( data ) {
- window[ "eval" ].call( window, data );
- } )( data );
- }
- },
-
- // Convert dashed to camelCase; used by the css and data modules
- // Microsoft forgot to hump their vendor prefix (#9572)
- camelCase: function( string ) {
- return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
- },
-
- nodeName: function( elem, name ) {
- return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
- },
-
- // args is for internal usage only
- each: function( object, callback, args ) {
- var name, i = 0,
- length = object.length,
- isObj = length === undefined || jQuery.isFunction( object );
-
- if ( args ) {
- if ( isObj ) {
- for ( name in object ) {
- if ( callback.apply( object[ name ], args ) === false ) {
- break;
- }
- }
- } else {
- for ( ; i < length; ) {
- if ( callback.apply( object[ i++ ], args ) === false ) {
- break;
- }
- }
- }
-
- // A special, fast, case for the most common use of each
- } else {
- if ( isObj ) {
- for ( name in object ) {
- if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
- break;
- }
- }
- } else {
- for ( ; i < length; ) {
- if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {
- break;
- }
- }
- }
- }
-
- return object;
- },
-
- // Use native String.trim function wherever possible
- trim: trim ?
- function( text ) {
- return text == null ?
- "" :
- trim.call( text );
- } :
-
- // Otherwise use our own trimming functionality
- function( text ) {
- return text == null ?
- "" :
- text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
- },
-
- // results is for internal usage only
- makeArray: function( array, results ) {
- var ret = results || [];
-
- if ( array != null ) {
- // The window, strings (and functions) also have 'length'
- // The extra typeof function check is to prevent crashes
- // in Safari 2 (See: #3039)
- // Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
- var type = jQuery.type( array );
-
- if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
- push.call( ret, array );
- } else {
- jQuery.merge( ret, array );
- }
- }
-
- return ret;
- },
-
- inArray: function( elem, array ) {
- if ( !array ) {
- return -1;
- }
-
- if ( indexOf ) {
- return indexOf.call( array, elem );
- }
-
- for ( var i = 0, length = array.length; i < length; i++ ) {
- if ( array[ i ] === elem ) {
- return i;
- }
- }
-
- return -1;
- },
-
- merge: function( first, second ) {
- var i = first.length,
- j = 0;
-
- if ( typeof second.length === "number" ) {
- for ( var l = second.length; j < l; j++ ) {
- first[ i++ ] = second[ j ];
- }
-
- } else {
- while ( second[j] !== undefined ) {
- first[ i++ ] = second[ j++ ];
- }
- }
-
- first.length = i;
-
- return first;
- },
-
- grep: function( elems, callback, inv ) {
- var ret = [], retVal;
- inv = !!inv;
-
- // Go through the array, only saving the items
- // that pass the validator function
- for ( var i = 0, length = elems.length; i < length; i++ ) {
- retVal = !!callback( elems[ i ], i );
- if ( inv !== retVal ) {
- ret.push( elems[ i ] );
- }
- }
-
- return ret;
- },
-
- // arg is for internal usage only
- map: function( elems, callback, arg ) {
- var value, key, ret = [],
- i = 0,
- length = elems.length,
- // jquery objects are treated as arrays
- isArray = elems instanceof jQuery || length !== undefined && typeof length === "number" && ( ( length > 0 && elems[ 0 ] && elems[ length -1 ] ) || length === 0 || jQuery.isArray( elems ) ) ;
-
- // Go through the array, translating each of the items to their
- if ( isArray ) {
- for ( ; i < length; i++ ) {
- value = callback( elems[ i ], i, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
-
- // Go through every key on the object,
- } else {
- for ( key in elems ) {
- value = callback( elems[ key ], key, arg );
-
- if ( value != null ) {
- ret[ ret.length ] = value;
- }
- }
- }
-
- // Flatten any nested arrays
- return ret.concat.apply( [], ret );
- },
-
- // A global GUID counter for objects
- guid: 1,
-
- // Bind a function to a context, optionally partially applying any
- // arguments.
- proxy: function( fn, context ) {
- if ( typeof context === "string" ) {
- var tmp = fn[ context ];
- context = fn;
- fn = tmp;
- }
-
- // Quick check to determine if target is callable, in the spec
- // this throws a TypeError, but we will just return undefined.
- if ( !jQuery.isFunction( fn ) ) {
- return undefined;
- }
-
- // Simulated bind
- var args = slice.call( arguments, 2 ),
- proxy = function() {
- return fn.apply( context, args.concat( slice.call( arguments ) ) );
- };
-
- // Set the guid of unique handler to the same of original handler, so it can be removed
- proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
-
- return proxy;
- },
-
- // Mutifunctional method to get and set values to a collection
- // The value/s can optionally be executed if it's a function
- access: function( elems, key, value, exec, fn, pass ) {
- var length = elems.length;
-
- // Setting many attributes
- if ( typeof key === "object" ) {
- for ( var k in key ) {
- jQuery.access( elems, k, key[k], exec, fn, value );
- }
- return elems;
- }
-
- // Setting one attribute
- if ( value !== undefined ) {
- // Optionally, function values get executed if exec is true
- exec = !pass && exec && jQuery.isFunction(value);
-
- for ( var i = 0; i < length; i++ ) {
- fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
- }
-
- return elems;
- }
-
- // Getting an attribute
- return length ? fn( elems[0], key ) : undefined;
- },
-
- now: function() {
- return (new Date()).getTime();
- },
-
- // Use of jQuery.browser is frowned upon.
- // More details: http://docs.jquery.com/Utilities/jQuery.browser
- uaMatch: function( ua ) {
- ua = ua.toLowerCase();
-
- var match = rwebkit.exec( ua ) ||
- ropera.exec( ua ) ||
- rmsie.exec( ua ) ||
- ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
- [];
-
- return { browser: match[1] || "", version: match[2] || "0" };
- },
-
- sub: function() {
- function jQuerySub( selector, context ) {
- return new jQuerySub.fn.init( selector, context );
- }
- jQuery.extend( true, jQuerySub, this );
- jQuerySub.superclass = this;
- jQuerySub.fn = jQuerySub.prototype = this();
- jQuerySub.fn.constructor = jQuerySub;
- jQuerySub.sub = this.sub;
- jQuerySub.fn.init = function init( selector, context ) {
- if ( context && context instanceof jQuery && !(context instanceof jQuerySub) ) {
- context = jQuerySub( context );
- }
-
- return jQuery.fn.init.call( this, selector, context, rootjQuerySub );
- };
- jQuerySub.fn.init.prototype = jQuerySub.fn;
- var rootjQuerySub = jQuerySub(document);
- return jQuerySub;
- },
-
- browser: {}
-});
-
-// Populate the class2type map
-jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
- class2type[ "[object " + name + "]" ] = name.toLowerCase();
-});
-
-browserMatch = jQuery.uaMatch( userAgent );
-if ( browserMatch.browser ) {
- jQuery.browser[ browserMatch.browser ] = true;
- jQuery.browser.version = browserMatch.version;
-}
-
-// Deprecated, use jQuery.browser.webkit instead
-if ( jQuery.browser.webkit ) {
- jQuery.browser.safari = true;
-}
-
-// IE doesn't match non-breaking spaces with \s
-if ( rnotwhite.test( "\xA0" ) ) {
- trimLeft = /^[\s\xA0]+/;
- trimRight = /[\s\xA0]+$/;
-}
-
-// All jQuery objects should point back to these
-rootjQuery = jQuery(document);
-
-// Cleanup functions for the document ready method
-if ( document.addEventListener ) {
- DOMContentLoaded = function() {
- document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
- jQuery.ready();
- };
-
-} else if ( document.attachEvent ) {
- DOMContentLoaded = function() {
- // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
- if ( document.readyState === "complete" ) {
- document.detachEvent( "onreadystatechange", DOMContentLoaded );
- jQuery.ready();
- }
- };
-}
-
-// The DOM ready check for Internet Explorer
-function doScrollCheck() {
- if ( jQuery.isReady ) {
- return;
- }
-
- try {
- // If IE is used, use the trick by Diego Perini
- // http://javascript.nwbox.com/IEContentLoaded/
- document.documentElement.doScroll("left");
- } catch(e) {
- setTimeout( doScrollCheck, 1 );
- return;
- }
-
- // and execute any waiting functions
- jQuery.ready();
-}
-
-return jQuery;
-
-})();
-
-
-var // Promise methods
- promiseMethods = "done fail isResolved isRejected promise then always pipe".split( " " ),
- // Static reference to slice
- sliceDeferred = [].slice;
-
-jQuery.extend({
- // Create a simple deferred (one callbacks list)
- _Deferred: function() {
- var // callbacks list
- callbacks = [],
- // stored [ context , args ]
- fired,
- // to avoid firing when already doing so
- firing,
- // flag to know if the deferred has been cancelled
- cancelled,
- // the deferred itself
- deferred = {
-
- // done( f1, f2, ...)
- done: function() {
- if ( !cancelled ) {
- var args = arguments,
- i,
- length,
- elem,
- type,
- _fired;
- if ( fired ) {
- _fired = fired;
- fired = 0;
- }
- for ( i = 0, length = args.length; i < length; i++ ) {
- elem = args[ i ];
- type = jQuery.type( elem );
- if ( type === "array" ) {
- deferred.done.apply( deferred, elem );
- } else if ( type === "function" ) {
- callbacks.push( elem );
- }
- }
- if ( _fired ) {
- deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] );
- }
- }
- return this;
- },
-
- // resolve with given context and args
- resolveWith: function( context, args ) {
- if ( !cancelled && !fired && !firing ) {
- // make sure args are available (#8421)
- args = args || [];
- firing = 1;
- try {
- while( callbacks[ 0 ] ) {
- callbacks.shift().apply( context, args );
- }
- }
- finally {
- fired = [ context, args ];
- firing = 0;
- }
- }
- return this;
- },
-
- // resolve with this as context and given arguments
- resolve: function() {
- deferred.resolveWith( this, arguments );
- return this;
- },
-
- // Has this deferred been resolved?
- isResolved: function() {
- return !!( firing || fired );
- },
-
- // Cancel
- cancel: function() {
- cancelled = 1;
- callbacks = [];
- return this;
- }
- };
-
- return deferred;
- },
-
- // Full fledged deferred (two callbacks list)
- Deferred: function( func ) {
- var deferred = jQuery._Deferred(),
- failDeferred = jQuery._Deferred(),
- promise;
- // Add errorDeferred methods, then and promise
- jQuery.extend( deferred, {
- then: function( doneCallbacks, failCallbacks ) {
- deferred.done( doneCallbacks ).fail( failCallbacks );
- return this;
- },
- always: function() {
- return deferred.done.apply( deferred, arguments ).fail.apply( this, arguments );
- },
- fail: failDeferred.done,
- rejectWith: failDeferred.resolveWith,
- reject: failDeferred.resolve,
- isRejected: failDeferred.isResolved,
- pipe: function( fnDone, fnFail ) {
- return jQuery.Deferred(function( newDefer ) {
- jQuery.each( {
- done: [ fnDone, "resolve" ],
- fail: [ fnFail, "reject" ]
- }, function( handler, data ) {
- var fn = data[ 0 ],
- action = data[ 1 ],
- returned;
- if ( jQuery.isFunction( fn ) ) {
- deferred[ handler ](function() {
- returned = fn.apply( this, arguments );
- if ( returned && jQuery.isFunction( returned.promise ) ) {
- returned.promise().then( newDefer.resolve, newDefer.reject );
- } else {
- newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
- }
- });
- } else {
- deferred[ handler ]( newDefer[ action ] );
- }
- });
- }).promise();
- },
- // Get a promise for this deferred
- // If obj is provided, the promise aspect is added to the object
- promise: function( obj ) {
- if ( obj == null ) {
- if ( promise ) {
- return promise;
- }
- promise = obj = {};
- }
- var i = promiseMethods.length;
- while( i-- ) {
- obj[ promiseMethods[i] ] = deferred[ promiseMethods[i] ];
- }
- return obj;
- }
- });
- // Make sure only one callback list will be used
- deferred.done( failDeferred.cancel ).fail( deferred.cancel );
- // Unexpose cancel
- delete deferred.cancel;
- // Call given func if any
- if ( func ) {
- func.call( deferred, deferred );
- }
- return deferred;
- },
-
- // Deferred helper
- when: function( firstParam ) {
- var args = arguments,
- i = 0,
- length = args.length,
- count = length,
- deferred = length <= 1 && firstParam && jQuery.isFunction( firstParam.promise ) ?
- firstParam :
- jQuery.Deferred();
- function resolveFunc( i ) {
- return function( value ) {
- args[ i ] = arguments.length > 1 ? sliceDeferred.call( arguments, 0 ) : value;
- if ( !( --count ) ) {
- // Strange bug in FF4:
- // Values changed onto the arguments object sometimes end up as undefined values
- // outside the $.when method. Cloning the object into a fresh array solves the issue
- deferred.resolveWith( deferred, sliceDeferred.call( args, 0 ) );
- }
- };
- }
- if ( length > 1 ) {
- for( ; i < length; i++ ) {
- if ( args[ i ] && jQuery.isFunction( args[ i ].promise ) ) {
- args[ i ].promise().then( resolveFunc(i), deferred.reject );
- } else {
- --count;
- }
- }
- if ( !count ) {
- deferred.resolveWith( deferred, args );
- }
- } else if ( deferred !== firstParam ) {
- deferred.resolveWith( deferred, length ? [ firstParam ] : [] );
- }
- return deferred.promise();
- }
-});
-
-
-
-jQuery.support = (function() {
-
- var div = document.createElement( "div" ),
- documentElement = document.documentElement,
- all,
- a,
- select,
- opt,
- input,
- marginDiv,
- support,
- fragment,
- body,
- testElementParent,
- testElement,
- testElementStyle,
- tds,
- events,
- eventName,
- i,
- isSupported;
-
- // Preliminary tests
- div.setAttribute("className", "t");
- div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
-
-
- all = div.getElementsByTagName( "*" );
- a = div.getElementsByTagName( "a" )[ 0 ];
-
- // Can't get basic test support
- if ( !all || !all.length || !a ) {
- return {};
- }
-
- // First batch of supports tests
- select = document.createElement( "select" );
- opt = select.appendChild( document.createElement("option") );
- input = div.getElementsByTagName( "input" )[ 0 ];
-
- support = {
- // IE strips leading whitespace when .innerHTML is used
- leadingWhitespace: ( div.firstChild.nodeType === 3 ),
-
- // Make sure that tbody elements aren't automatically inserted
- // IE will insert them into empty tables
- tbody: !div.getElementsByTagName( "tbody" ).length,
-
- // Make sure that link elements get serialized correctly by innerHTML
- // This requires a wrapper element in IE
- htmlSerialize: !!div.getElementsByTagName( "link" ).length,
-
- // Get the style information from getAttribute
- // (IE uses .cssText instead)
- style: /top/.test( a.getAttribute("style") ),
-
- // Make sure that URLs aren't manipulated
- // (IE normalizes it by default)
- hrefNormalized: ( a.getAttribute( "href" ) === "/a" ),
-
- // Make sure that element opacity exists
- // (IE uses filter instead)
- // Use a regex to work around a WebKit issue. See #5145
- opacity: /^0.55$/.test( a.style.opacity ),
-
- // Verify style float existence
- // (IE uses styleFloat instead of cssFloat)
- cssFloat: !!a.style.cssFloat,
-
- // Make sure that if no value is specified for a checkbox
- // that it defaults to "on".
- // (WebKit defaults to "" instead)
- checkOn: ( input.value === "on" ),
-
- // Make sure that a selected-by-default option has a working selected property.
- // (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
- optSelected: opt.selected,
-
- // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
- getSetAttribute: div.className !== "t",
-
- // Will be defined later
- submitBubbles: true,
- changeBubbles: true,
- focusinBubbles: false,
- deleteExpando: true,
- noCloneEvent: true,
- inlineBlockNeedsLayout: false,
- shrinkWrapBlocks: false,
- reliableMarginRight: true
- };
-
- // Make sure checked status is properly cloned
- input.checked = true;
- support.noCloneChecked = input.cloneNode( true ).checked;
-
- // Make sure that the options inside disabled selects aren't marked as disabled
- // (WebKit marks them as disabled)
- select.disabled = true;
- support.optDisabled = !opt.disabled;
-
- // Test to see if it's possible to delete an expando from an element
- // Fails in Internet Explorer
- try {
- delete div.test;
- } catch( e ) {
- support.deleteExpando = false;
- }
-
- if ( !div.addEventListener && div.attachEvent && div.fireEvent ) {
- div.attachEvent( "onclick", function() {
- // Cloning a node shouldn't copy over any
- // bound event handlers (IE does this)
- support.noCloneEvent = false;
- });
- div.cloneNode( true ).fireEvent( "onclick" );
- }
-
- // Check if a radio maintains it's value
- // after being appended to the DOM
- input = document.createElement("input");
- input.value = "t";
- input.setAttribute("type", "radio");
- support.radioValue = input.value === "t";
-
- input.setAttribute("checked", "checked");
- div.appendChild( input );
- fragment = document.createDocumentFragment();
- fragment.appendChild( div.firstChild );
-
- // WebKit doesn't clone checked state correctly in fragments
- support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
- div.innerHTML = "";
-
- // Figure out if the W3C box model works as expected
- div.style.width = div.style.paddingLeft = "1px";
-
- body = document.getElementsByTagName( "body" )[ 0 ];
- // We use our own, invisible, body unless the body is already present
- // in which case we use a div (#9239)
- testElement = document.createElement( body ? "div" : "body" );
- testElementStyle = {
- visibility: "hidden",
- width: 0,
- height: 0,
- border: 0,
- margin: 0,
- background: "none"
- };
- if ( body ) {
- jQuery.extend( testElementStyle, {
- position: "absolute",
- left: "-1000px",
- top: "-1000px"
- });
- }
- for ( i in testElementStyle ) {
- testElement.style[ i ] = testElementStyle[ i ];
- }
- testElement.appendChild( div );
- testElementParent = body || documentElement;
- testElementParent.insertBefore( testElement, testElementParent.firstChild );
-
- // Check if a disconnected checkbox will retain its checked
- // value of true after appended to the DOM (IE6/7)
- support.appendChecked = input.checked;
-
- support.boxModel = div.offsetWidth === 2;
-
- if ( "zoom" in div.style ) {
- // Check if natively block-level elements act like inline-block
- // elements when setting their display to 'inline' and giving
- // them layout
- // (IE < 8 does this)
- div.style.display = "inline";
- div.style.zoom = 1;
- support.inlineBlockNeedsLayout = ( div.offsetWidth === 2 );
-
- // Check if elements with layout shrink-wrap their children
- // (IE 6 does this)
- div.style.display = "";
- div.innerHTML = "<div style='width:4px;'></div>";
- support.shrinkWrapBlocks = ( div.offsetWidth !== 2 );
- }
-
- div.innerHTML = "<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>";
- tds = div.getElementsByTagName( "td" );
-
- // Check if table cells still have offsetWidth/Height when they are set
- // to display:none and there are still other visible table cells in a
- // table row; if so, offsetWidth/Height are not reliable for use when
- // determining if an element has been hidden directly using
- // display:none (it is still safe to use offsets if a parent element is
- // hidden; don safety goggles and see bug #4512 for more information).
- // (only IE 8 fails this test)
- isSupported = ( tds[ 0 ].offsetHeight === 0 );
-
- tds[ 0 ].style.display = "";
- tds[ 1 ].style.display = "none";
-
- // Check if empty table cells still have offsetWidth/Height
- // (IE < 8 fail this test)
- support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );
- div.innerHTML = "";
-
- // Check if div with explicit width and no margin-right incorrectly
- // gets computed margin-right based on width of container. For more
- // info see bug #3333
- // Fails in WebKit before Feb 2011 nightlies
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- if ( document.defaultView && document.defaultView.getComputedStyle ) {
- marginDiv = document.createElement( "div" );
- marginDiv.style.width = "0";
- marginDiv.style.marginRight = "0";
- div.appendChild( marginDiv );
- support.reliableMarginRight =
- ( parseInt( ( document.defaultView.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0;
- }
-
- // Remove the body element we added
- testElement.innerHTML = "";
- testElementParent.removeChild( testElement );
-
- // Technique from Juriy Zaytsev
- // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
- // We only care about the case where non-standard event systems
- // are used, namely in IE. Short-circuiting here helps us to
- // avoid an eval call (in setAttribute) which can cause CSP
- // to go haywire. See: https://developer.mozilla.org/en/Security/CSP
- if ( div.attachEvent ) {
- for( i in {
- submit: 1,
- change: 1,
- focusin: 1
- } ) {
- eventName = "on" + i;
- isSupported = ( eventName in div );
- if ( !isSupported ) {
- div.setAttribute( eventName, "return;" );
- isSupported = ( typeof div[ eventName ] === "function" );
- }
- support[ i + "Bubbles" ] = isSupported;
- }
- }
-
- // Null connected elements to avoid leaks in IE
- testElement = fragment = select = opt = body = marginDiv = div = input = null;
-
- return support;
-})();
-
-// Keep track of boxModel
-jQuery.boxModel = jQuery.support.boxModel;
-
-
-
-
-var rbrace = /^(?:\{.*\}|\[.*\])$/,
- rmultiDash = /([A-Z])/g;
-
-jQuery.extend({
- cache: {},
-
- // Please use with caution
- uuid: 0,
-
- // Unique for each copy of jQuery on the page
- // Non-digits removed to match rinlinejQuery
- expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),
-
- // The following elements throw uncatchable exceptions if you
- // attempt to add expando properties to them.
- noData: {
- "embed": true,
- // Ban all objects except for Flash (which handle expandos)
- "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
- "applet": true
- },
-
- hasData: function( elem ) {
- elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];
-
- return !!elem && !isEmptyDataObject( elem );
- },
-
- data: function( elem, name, data, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var thisCache, ret,
- internalKey = jQuery.expando,
- getByName = typeof name === "string",
-
- // We have to handle DOM nodes and JS objects differently because IE6-7
- // can't GC object references properly across the DOM-JS boundary
- isNode = elem.nodeType,
-
- // Only DOM nodes need the global jQuery cache; JS object data is
- // attached directly to the object so GC can occur automatically
- cache = isNode ? jQuery.cache : elem,
-
- // Only defining an ID for JS objects if its cache already exists allows
- // the code to shortcut on the same path as a DOM node with no cache
- id = isNode ? elem[ jQuery.expando ] : elem[ jQuery.expando ] && jQuery.expando;
-
- // Avoid doing any more work than we need to when trying to get data on an
- // object that has no data at all
- if ( (!id || (pvt && id && (cache[ id ] && !cache[ id ][ internalKey ]))) && getByName && data === undefined ) {
- return;
- }
-
- if ( !id ) {
- // Only DOM nodes need a new unique ID for each element since their data
- // ends up in the global cache
- if ( isNode ) {
- elem[ jQuery.expando ] = id = ++jQuery.uuid;
- } else {
- id = jQuery.expando;
- }
- }
-
- if ( !cache[ id ] ) {
- cache[ id ] = {};
-
- // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
- // metadata on plain JS objects when the object is serialized using
- // JSON.stringify
- if ( !isNode ) {
- cache[ id ].toJSON = jQuery.noop;
- }
- }
-
- // An object can be passed to jQuery.data instead of a key/value pair; this gets
- // shallow copied over onto the existing cache
- if ( typeof name === "object" || typeof name === "function" ) {
- if ( pvt ) {
- cache[ id ][ internalKey ] = jQuery.extend(cache[ id ][ internalKey ], name);
- } else {
- cache[ id ] = jQuery.extend(cache[ id ], name);
- }
- }
-
- thisCache = cache[ id ];
-
- // Internal jQuery data is stored in a separate object inside the object's data
- // cache in order to avoid key collisions between internal data and user-defined
- // data
- if ( pvt ) {
- if ( !thisCache[ internalKey ] ) {
- thisCache[ internalKey ] = {};
- }
-
- thisCache = thisCache[ internalKey ];
- }
-
- if ( data !== undefined ) {
- thisCache[ jQuery.camelCase( name ) ] = data;
- }
-
- // TODO: This is a hack for 1.5 ONLY. It will be removed in 1.6. Users should
- // not attempt to inspect the internal events object using jQuery.data, as this
- // internal data object is undocumented and subject to change.
- if ( name === "events" && !thisCache[name] ) {
- return thisCache[ internalKey ] && thisCache[ internalKey ].events;
- }
-
- // Check for both converted-to-camel and non-converted data property names
- // If a data property was specified
- if ( getByName ) {
-
- // First Try to find as-is property data
- ret = thisCache[ name ];
-
- // Test for null|undefined property data
- if ( ret == null ) {
-
- // Try to find the camelCased property
- ret = thisCache[ jQuery.camelCase( name ) ];
- }
- } else {
- ret = thisCache;
- }
-
- return ret;
- },
-
- removeData: function( elem, name, pvt /* Internal Use Only */ ) {
- if ( !jQuery.acceptData( elem ) ) {
- return;
- }
-
- var thisCache,
-
- // Reference to internal data cache key
- internalKey = jQuery.expando,
-
- isNode = elem.nodeType,
-
- // See jQuery.data for more information
- cache = isNode ? jQuery.cache : elem,
-
- // See jQuery.data for more information
- id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
- // If there is already no cache entry for this object, there is no
- // purpose in continuing
- if ( !cache[ id ] ) {
- return;
- }
-
- if ( name ) {
-
- thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
-
- if ( thisCache ) {
-
- // Support interoperable removal of hyphenated or camelcased keys
- if ( !thisCache[ name ] ) {
- name = jQuery.camelCase( name );
- }
-
- delete thisCache[ name ];
-
- // If there is no data left in the cache, we want to continue
- // and let the cache object itself get destroyed
- if ( !isEmptyDataObject(thisCache) ) {
- return;
- }
- }
- }
-
- // See jQuery.data for more information
- if ( pvt ) {
- delete cache[ id ][ internalKey ];
-
- // Don't destroy the parent cache unless the internal data object
- // had been the only thing left in it
- if ( !isEmptyDataObject(cache[ id ]) ) {
- return;
- }
- }
-
- var internalCache = cache[ id ][ internalKey ];
-
- // Browsers that fail expando deletion also refuse to delete expandos on
- // the window, but it will allow it on all other JS objects; other browsers
- // don't care
- // Ensure that `cache` is not a window object #10080
- if ( jQuery.support.deleteExpando || !cache.setInterval ) {
- delete cache[ id ];
- } else {
- cache[ id ] = null;
- }
-
- // We destroyed the entire user cache at once because it's faster than
- // iterating through each key, but we need to continue to persist internal
- // data if it existed
- if ( internalCache ) {
- cache[ id ] = {};
- // TODO: This is a hack for 1.5 ONLY. Avoids exposing jQuery
- // metadata on plain JS objects when the object is serialized using
- // JSON.stringify
- if ( !isNode ) {
- cache[ id ].toJSON = jQuery.noop;
- }
-
- cache[ id ][ internalKey ] = internalCache;
-
- // Otherwise, we need to eliminate the expando on the node to avoid
- // false lookups in the cache for entries that no longer exist
- } else if ( isNode ) {
- // IE does not allow us to delete expando properties from nodes,
- // nor does it have a removeAttribute function on Document nodes;
- // we must handle all of these cases
- if ( jQuery.support.deleteExpando ) {
- delete elem[ jQuery.expando ];
- } else if ( elem.removeAttribute ) {
- elem.removeAttribute( jQuery.expando );
- } else {
- elem[ jQuery.expando ] = null;
- }
- }
- },
-
- // For internal use only.
- _data: function( elem, name, data ) {
- return jQuery.data( elem, name, data, true );
- },
-
- // A method for determining if a DOM node can handle the data expando
- acceptData: function( elem ) {
- if ( elem.nodeName ) {
- var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
-
- if ( match ) {
- return !(match === true || elem.getAttribute("classid") !== match);
- }
- }
-
- return true;
- }
-});
-
-jQuery.fn.extend({
- data: function( key, value ) {
- var data = null;
-
- if ( typeof key === "undefined" ) {
- if ( this.length ) {
- data = jQuery.data( this[0] );
-
- if ( this[0].nodeType === 1 ) {
- var attr = this[0].attributes, name;
- for ( var i = 0, l = attr.length; i < l; i++ ) {
- name = attr[i].name;
-
- if ( name.indexOf( "data-" ) === 0 ) {
- name = jQuery.camelCase( name.substring(5) );
-
- dataAttr( this[0], name, data[ name ] );
- }
- }
- }
- }
-
- return data;
-
- } else if ( typeof key === "object" ) {
- return this.each(function() {
- jQuery.data( this, key );
- });
- }
-
- var parts = key.split(".");
- parts[1] = parts[1] ? "." + parts[1] : "";
-
- if ( value === undefined ) {
- data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
-
- // Try to fetch any internally stored data first
- if ( data === undefined && this.length ) {
- data = jQuery.data( this[0], key );
- data = dataAttr( this[0], key, data );
- }
-
- return data === undefined && parts[1] ?
- this.data( parts[0] ) :
- data;
-
- } else {
- return this.each(function() {
- var $this = jQuery( this ),
- args = [ parts[0], value ];
-
- $this.triggerHandler( "setData" + parts[1] + "!", args );
- jQuery.data( this, key, value );
- $this.triggerHandler( "changeData" + parts[1] + "!", args );
- });
- }
- },
-
- removeData: function( key ) {
- return this.each(function() {
- jQuery.removeData( this, key );
- });
- }
-});
-
-function dataAttr( elem, key, data ) {
- // If nothing was found internally, try to fetch any
- // data from the HTML5 data-* attribute
- if ( data === undefined && elem.nodeType === 1 ) {
-
- var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
- data = elem.getAttribute( name );
-
- if ( typeof data === "string" ) {
- try {
- data = data === "true" ? true :
- data === "false" ? false :
- data === "null" ? null :
- !jQuery.isNaN( data ) ? parseFloat( data ) :
- rbrace.test( data ) ? jQuery.parseJSON( data ) :
- data;
- } catch( e ) {}
-
- // Make sure we set the data so it isn't changed later
- jQuery.data( elem, key, data );
-
- } else {
- data = undefined;
- }
- }
-
- return data;
-}
-
-// TODO: This is a hack for 1.5 ONLY to allow objects with a single toJSON
-// property to be considered empty objects; this property always exists in
-// order to make sure JSON.stringify does not expose internal metadata
-function isEmptyDataObject( obj ) {
- for ( var name in obj ) {
- if ( name !== "toJSON" ) {
- return false;
- }
- }
-
- return true;
-}
-
-
-
-
-function handleQueueMarkDefer( elem, type, src ) {
- var deferDataKey = type + "defer",
- queueDataKey = type + "queue",
- markDataKey = type + "mark",
- defer = jQuery.data( elem, deferDataKey, undefined, true );
- if ( defer &&
- ( src === "queue" || !jQuery.data( elem, queueDataKey, undefined, true ) ) &&
- ( src === "mark" || !jQuery.data( elem, markDataKey, undefined, true ) ) ) {
- // Give room for hard-coded callbacks to fire first
- // and eventually mark/queue something else on the element
- setTimeout( function() {
- if ( !jQuery.data( elem, queueDataKey, undefined, true ) &&
- !jQuery.data( elem, markDataKey, undefined, true ) ) {
- jQuery.removeData( elem, deferDataKey, true );
- defer.resolve();
- }
- }, 0 );
- }
-}
-
-jQuery.extend({
-
- _mark: function( elem, type ) {
- if ( elem ) {
- type = (type || "fx") + "mark";
- jQuery.data( elem, type, (jQuery.data(elem,type,undefined,true) || 0) + 1, true );
- }
- },
-
- _unmark: function( force, elem, type ) {
- if ( force !== true ) {
- type = elem;
- elem = force;
- force = false;
- }
- if ( elem ) {
- type = type || "fx";
- var key = type + "mark",
- count = force ? 0 : ( (jQuery.data( elem, key, undefined, true) || 1 ) - 1 );
- if ( count ) {
- jQuery.data( elem, key, count, true );
- } else {
- jQuery.removeData( elem, key, true );
- handleQueueMarkDefer( elem, type, "mark" );
- }
- }
- },
-
- queue: function( elem, type, data ) {
- if ( elem ) {
- type = (type || "fx") + "queue";
- var q = jQuery.data( elem, type, undefined, true );
- // Speed up dequeue by getting out quickly if this is just a lookup
- if ( data ) {
- if ( !q || jQuery.isArray(data) ) {
- q = jQuery.data( elem, type, jQuery.makeArray(data), true );
- } else {
- q.push( data );
- }
- }
- return q || [];
- }
- },
-
- dequeue: function( elem, type ) {
- type = type || "fx";
-
- var queue = jQuery.queue( elem, type ),
- fn = queue.shift(),
- defer;
-
- // If the fx queue is dequeued, always remove the progress sentinel
- if ( fn === "inprogress" ) {
- fn = queue.shift();
- }
-
- if ( fn ) {
- // Add a progress sentinel to prevent the fx queue from being
- // automatically dequeued
- if ( type === "fx" ) {
- queue.unshift("inprogress");
- }
-
- fn.call(elem, function() {
- jQuery.dequeue(elem, type);
- });
- }
-
- if ( !queue.length ) {
- jQuery.removeData( elem, type + "queue", true );
- handleQueueMarkDefer( elem, type, "queue" );
- }
- }
-});
-
-jQuery.fn.extend({
- queue: function( type, data ) {
- if ( typeof type !== "string" ) {
- data = type;
- type = "fx";
- }
-
- if ( data === undefined ) {
- return jQuery.queue( this[0], type );
- }
- return this.each(function() {
- var queue = jQuery.queue( this, type, data );
-
- if ( type === "fx" && queue[0] !== "inprogress" ) {
- jQuery.dequeue( this, type );
- }
- });
- },
- dequeue: function( type ) {
- return this.each(function() {
- jQuery.dequeue( this, type );
- });
- },
- // Based off of the plugin by Clint Helfers, with permission.
- // http://blindsignals.com/index.php/2009/07/jquery-delay/
- delay: function( time, type ) {
- time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
- type = type || "fx";
-
- return this.queue( type, function() {
- var elem = this;
- setTimeout(function() {
- jQuery.dequeue( elem, type );
- }, time );
- });
- },
- clearQueue: function( type ) {
- return this.queue( type || "fx", [] );
- },
- // Get a promise resolved when queues of a certain type
- // are emptied (fx is the type by default)
- promise: function( type, object ) {
- if ( typeof type !== "string" ) {
- object = type;
- type = undefined;
- }
- type = type || "fx";
- var defer = jQuery.Deferred(),
- elements = this,
- i = elements.length,
- count = 1,
- deferDataKey = type + "defer",
- queueDataKey = type + "queue",
- markDataKey = type + "mark",
- tmp;
- function resolve() {
- if ( !( --count ) ) {
- defer.resolveWith( elements, [ elements ] );
- }
- }
- while( i-- ) {
- if (( tmp = jQuery.data( elements[ i ], deferDataKey, undefined, true ) ||
- ( jQuery.data( elements[ i ], queueDataKey, undefined, true ) ||
- jQuery.data( elements[ i ], markDataKey, undefined, true ) ) &&
- jQuery.data( elements[ i ], deferDataKey, jQuery._Deferred(), true ) )) {
- count++;
- tmp.done( resolve );
- }
- }
- resolve();
- return defer.promise();
- }
-});
-
-
-
-
-var rclass = /[\n\t\r]/g,
- rspace = /\s+/,
- rreturn = /\r/g,
- rtype = /^(?:button|input)$/i,
- rfocusable = /^(?:button|input|object|select|textarea)$/i,
- rclickable = /^a(?:rea)?$/i,
- rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
- nodeHook, boolHook;
-
-jQuery.fn.extend({
- attr: function( name, value ) {
- return jQuery.access( this, name, value, true, jQuery.attr );
- },
-
- removeAttr: function( name ) {
- return this.each(function() {
- jQuery.removeAttr( this, name );
- });
- },
-
- prop: function( name, value ) {
- return jQuery.access( this, name, value, true, jQuery.prop );
- },
-
- removeProp: function( name ) {
- name = jQuery.propFix[ name ] || name;
- return this.each(function() {
- // try/catch handles cases where IE balks (such as removing a property on window)
- try {
- this[ name ] = undefined;
- delete this[ name ];
- } catch( e ) {}
- });
- },
-
- addClass: function( value ) {
- var classNames, i, l, elem,
- setClass, c, cl;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).addClass( value.call(this, j, this.className) );
- });
- }
-
- if ( value && typeof value === "string" ) {
- classNames = value.split( rspace );
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- elem = this[ i ];
-
- if ( elem.nodeType === 1 ) {
- if ( !elem.className && classNames.length === 1 ) {
- elem.className = value;
-
- } else {
- setClass = " " + elem.className + " ";
-
- for ( c = 0, cl = classNames.length; c < cl; c++ ) {
- if ( !~setClass.indexOf( " " + classNames[ c ] + " " ) ) {
- setClass += classNames[ c ] + " ";
- }
- }
- elem.className = jQuery.trim( setClass );
- }
- }
- }
- }
-
- return this;
- },
-
- removeClass: function( value ) {
- var classNames, i, l, elem, className, c, cl;
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( j ) {
- jQuery( this ).removeClass( value.call(this, j, this.className) );
- });
- }
-
- if ( (value && typeof value === "string") || value === undefined ) {
- classNames = (value || "").split( rspace );
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- elem = this[ i ];
-
- if ( elem.nodeType === 1 && elem.className ) {
- if ( value ) {
- className = (" " + elem.className + " ").replace( rclass, " " );
- for ( c = 0, cl = classNames.length; c < cl; c++ ) {
- className = className.replace(" " + classNames[ c ] + " ", " ");
- }
- elem.className = jQuery.trim( className );
-
- } else {
- elem.className = "";
- }
- }
- }
- }
-
- return this;
- },
-
- toggleClass: function( value, stateVal ) {
- var type = typeof value,
- isBool = typeof stateVal === "boolean";
-
- if ( jQuery.isFunction( value ) ) {
- return this.each(function( i ) {
- jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal );
- });
- }
-
- return this.each(function() {
- if ( type === "string" ) {
- // toggle individual class names
- var className,
- i = 0,
- self = jQuery( this ),
- state = stateVal,
- classNames = value.split( rspace );
-
- while ( (className = classNames[ i++ ]) ) {
- // check each className given, space seperated list
- state = isBool ? state : !self.hasClass( className );
- self[ state ? "addClass" : "removeClass" ]( className );
- }
-
- } else if ( type === "undefined" || type === "boolean" ) {
- if ( this.className ) {
- // store className if set
- jQuery._data( this, "__className__", this.className );
- }
-
- // toggle whole className
- this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || "";
- }
- });
- },
-
- hasClass: function( selector ) {
- var className = " " + selector + " ";
- for ( var i = 0, l = this.length; i < l; i++ ) {
- if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
- return true;
- }
- }
-
- return false;
- },
-
- val: function( value ) {
- var hooks, ret,
- elem = this[0];
-
- if ( !arguments.length ) {
- if ( elem ) {
- hooks = jQuery.valHooks[ elem.nodeName.toLowerCase() ] || jQuery.valHooks[ elem.type ];
-
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) {
- return ret;
- }
-
- ret = elem.value;
-
- return typeof ret === "string" ?
- // handle most common string cases
- ret.replace(rreturn, "") :
- // handle cases where value is null/undef or number
- ret == null ? "" : ret;
- }
-
- return undefined;
- }
-
- var isFunction = jQuery.isFunction( value );
-
- return this.each(function( i ) {
- var self = jQuery(this), val;
-
- if ( this.nodeType !== 1 ) {
- return;
- }
-
- if ( isFunction ) {
- val = value.call( this, i, self.val() );
- } else {
- val = value;
- }
-
- // Treat null/undefined as ""; convert numbers to string
- if ( val == null ) {
- val = "";
- } else if ( typeof val === "number" ) {
- val += "";
- } else if ( jQuery.isArray( val ) ) {
- val = jQuery.map(val, function ( value ) {
- return value == null ? "" : value + "";
- });
- }
-
- hooks = jQuery.valHooks[ this.nodeName.toLowerCase() ] || jQuery.valHooks[ this.type ];
-
- // If set returns undefined, fall back to normal setting
- if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) {
- this.value = val;
- }
- });
- }
-});
-
-jQuery.extend({
- valHooks: {
- option: {
- get: function( elem ) {
- // attributes.value is undefined in Blackberry 4.7 but
- // uses .value. See #6932
- var val = elem.attributes.value;
- return !val || val.specified ? elem.value : elem.text;
- }
- },
- select: {
- get: function( elem ) {
- var value,
- index = elem.selectedIndex,
- values = [],
- options = elem.options,
- one = elem.type === "select-one";
-
- // Nothing was selected
- if ( index < 0 ) {
- return null;
- }
-
- // Loop through all the selected options
- for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
- var option = options[ i ];
-
- // Don't return options that are disabled or in a disabled optgroup
- if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
- (!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
-
- // Get the specific value for the option
- value = jQuery( option ).val();
-
- // We don't need an array for one selects
- if ( one ) {
- return value;
- }
-
- // Multi-Selects return an array
- values.push( value );
- }
- }
-
- // Fixes Bug #2551 -- select.val() broken in IE after form.reset()
- if ( one && !values.length && options.length ) {
- return jQuery( options[ index ] ).val();
- }
-
- return values;
- },
-
- set: function( elem, value ) {
- var values = jQuery.makeArray( value );
-
- jQuery(elem).find("option").each(function() {
- this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
- });
-
- if ( !values.length ) {
- elem.selectedIndex = -1;
- }
- return values;
- }
- }
- },
-
- attrFn: {
- val: true,
- css: true,
- html: true,
- text: true,
- data: true,
- width: true,
- height: true,
- offset: true
- },
-
- attrFix: {
- // Always normalize to ensure hook usage
- tabindex: "tabIndex"
- },
-
- attr: function( elem, name, value, pass ) {
- var nType = elem.nodeType;
-
- // don't get/set attributes on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return undefined;
- }
-
- if ( pass && name in jQuery.attrFn ) {
- return jQuery( elem )[ name ]( value );
- }
-
- // Fallback to prop when attributes are not supported
- if ( !("getAttribute" in elem) ) {
- return jQuery.prop( elem, name, value );
- }
-
- var ret, hooks,
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- // Normalize the name if needed
- if ( notxml ) {
- name = jQuery.attrFix[ name ] || name;
-
- hooks = jQuery.attrHooks[ name ];
-
- if ( !hooks ) {
- // Use boolHook for boolean attributes
- if ( rboolean.test( name ) ) {
- hooks = boolHook;
-
- // Use nodeHook if available( IE6/7 )
- } else if ( nodeHook ) {
- hooks = nodeHook;
- }
- }
- }
-
- if ( value !== undefined ) {
-
- if ( value === null ) {
- jQuery.removeAttr( elem, name );
- return undefined;
-
- } else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- elem.setAttribute( name, "" + value );
- return value;
- }
-
- } else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
-
- ret = elem.getAttribute( name );
-
- // Non-existent attributes return null, we normalize to undefined
- return ret === null ?
- undefined :
- ret;
- }
- },
-
- removeAttr: function( elem, name ) {
- var propName;
- if ( elem.nodeType === 1 ) {
- name = jQuery.attrFix[ name ] || name;
-
- jQuery.attr( elem, name, "" );
- elem.removeAttribute( name );
-
- // Set corresponding property to false for boolean attributes
- if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
- elem[ propName ] = false;
- }
- }
- },
-
- attrHooks: {
- type: {
- set: function( elem, value ) {
- // We can't allow the type property to be changed (since it causes problems in IE)
- if ( rtype.test( elem.nodeName ) && elem.parentNode ) {
- jQuery.error( "type property can't be changed" );
- } else if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) {
- // Setting the type on a radio button after the value resets the value in IE6-9
- // Reset value to it's default in case type is set after value
- // This is for element creation
- var val = elem.value;
- elem.setAttribute( "type", value );
- if ( val ) {
- elem.value = val;
- }
- return value;
- }
- }
- },
- // Use the value property for back compat
- // Use the nodeHook for button elements in IE6/7 (#1954)
- value: {
- get: function( elem, name ) {
- if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
- return nodeHook.get( elem, name );
- }
- return name in elem ?
- elem.value :
- null;
- },
- set: function( elem, value, name ) {
- if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
- return nodeHook.set( elem, value, name );
- }
- // Does not return so that setAttribute is also used
- elem.value = value;
- }
- }
- },
-
- propFix: {
- tabindex: "tabIndex",
- readonly: "readOnly",
- "for": "htmlFor",
- "class": "className",
- maxlength: "maxLength",
- cellspacing: "cellSpacing",
- cellpadding: "cellPadding",
- rowspan: "rowSpan",
- colspan: "colSpan",
- usemap: "useMap",
- frameborder: "frameBorder",
- contenteditable: "contentEditable"
- },
-
- prop: function( elem, name, value ) {
- var nType = elem.nodeType;
-
- // don't get/set properties on text, comment and attribute nodes
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return undefined;
- }
-
- var ret, hooks,
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
- if ( notxml ) {
- // Fix name and attach hooks
- name = jQuery.propFix[ name ] || name;
- hooks = jQuery.propHooks[ name ];
- }
-
- if ( value !== undefined ) {
- if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {
- return ret;
-
- } else {
- return (elem[ name ] = value);
- }
-
- } else {
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
- return ret;
-
- } else {
- return elem[ name ];
- }
- }
- },
-
- propHooks: {
- tabIndex: {
- get: function( elem ) {
- // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
- // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
- var attributeNode = elem.getAttributeNode("tabindex");
-
- return attributeNode && attributeNode.specified ?
- parseInt( attributeNode.value, 10 ) :
- rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
- 0 :
- undefined;
- }
- }
- }
-});
-
-// Add the tabindex propHook to attrHooks for back-compat
-jQuery.attrHooks.tabIndex = jQuery.propHooks.tabIndex;
-
-// Hook for boolean attributes
-boolHook = {
- get: function( elem, name ) {
- // Align boolean attributes with corresponding properties
- // Fall back to attribute presence where some booleans are not supported
- var attrNode;
- return jQuery.prop( elem, name ) === true || ( attrNode = elem.getAttributeNode( name ) ) && attrNode.nodeValue !== false ?
- name.toLowerCase() :
- undefined;
- },
- set: function( elem, value, name ) {
- var propName;
- if ( value === false ) {
- // Remove boolean attributes when set to false
- jQuery.removeAttr( elem, name );
- } else {
- // value is true since we know at this point it's type boolean and not false
- // Set boolean attributes to the same name and set the DOM property
- propName = jQuery.propFix[ name ] || name;
- if ( propName in elem ) {
- // Only set the IDL specifically if it already exists on the element
- elem[ propName ] = true;
- }
-
- elem.setAttribute( name, name.toLowerCase() );
- }
- return name;
- }
-};
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !jQuery.support.getSetAttribute ) {
-
- // Use this for any attribute in IE6/7
- // This fixes almost every IE6/7 issue
- nodeHook = jQuery.valHooks.button = {
- get: function( elem, name ) {
- var ret;
- ret = elem.getAttributeNode( name );
- // Return undefined if nodeValue is empty string
- return ret && ret.nodeValue !== "" ?
- ret.nodeValue :
- undefined;
- },
- set: function( elem, value, name ) {
- // Set the existing or create a new attribute node
- var ret = elem.getAttributeNode( name );
- if ( !ret ) {
- ret = document.createAttribute( name );
- elem.setAttributeNode( ret );
- }
- return (ret.nodeValue = value + "");
- }
- };
-
- // Set width and height to auto instead of 0 on empty string( Bug #8150 )
- // This is for removals
- jQuery.each([ "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
- set: function( elem, value ) {
- if ( value === "" ) {
- elem.setAttribute( name, "auto" );
- return value;
- }
- }
- });
- });
-}
-
-
-// Some attributes require a special call on IE
-if ( !jQuery.support.hrefNormalized ) {
- jQuery.each([ "href", "src", "width", "height" ], function( i, name ) {
- jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {
- get: function( elem ) {
- var ret = elem.getAttribute( name, 2 );
- return ret === null ? undefined : ret;
- }
- });
- });
-}
-
-if ( !jQuery.support.style ) {
- jQuery.attrHooks.style = {
- get: function( elem ) {
- // Return undefined in the case of empty string
- // Normalize to lowercase since IE uppercases css property names
- return elem.style.cssText.toLowerCase() || undefined;
- },
- set: function( elem, value ) {
- return (elem.style.cssText = "" + value);
- }
- };
-}
-
-// Safari mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !jQuery.support.optSelected ) {
- jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {
- get: function( elem ) {
- var parent = elem.parentNode;
-
- if ( parent ) {
- parent.selectedIndex;
-
- // Make sure that it also works with optgroups, see #5701
- if ( parent.parentNode ) {
- parent.parentNode.selectedIndex;
- }
- }
- return null;
- }
- });
-}
-
-// Radios and checkboxes getter/setter
-if ( !jQuery.support.checkOn ) {
- jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = {
- get: function( elem ) {
- // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
- return elem.getAttribute("value") === null ? "on" : elem.value;
- }
- };
- });
-}
-jQuery.each([ "radio", "checkbox" ], function() {
- jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], {
- set: function( elem, value ) {
- if ( jQuery.isArray( value ) ) {
- return (elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0);
- }
- }
- });
-});
-
-
-
-
-var rnamespaces = /\.(.*)$/,
- rformElems = /^(?:textarea|input|select)$/i,
- rperiod = /\./g,
- rspaces = / /g,
- rescape = /[^\w\s.|`]/g,
- fcleanup = function( nm ) {
- return nm.replace(rescape, "\\$&");
- };
-
-/*
- * A number of helper functions used for managing events.
- * Many of the ideas behind this code originated from
- * Dean Edwards' addEvent library.
- */
-jQuery.event = {
-
- // Bind an event to an element
- // Original by Dean Edwards
- add: function( elem, types, handler, data ) {
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- if ( handler === false ) {
- handler = returnFalse;
- } else if ( !handler ) {
- // Fixes bug #7229. Fix recommended by jdalton
- return;
- }
-
- var handleObjIn, handleObj;
-
- if ( handler.handler ) {
- handleObjIn = handler;
- handler = handleObjIn.handler;
- }
-
- // Make sure that the function being executed has a unique ID
- if ( !handler.guid ) {
- handler.guid = jQuery.guid++;
- }
-
- // Init the element's event structure
- var elemData = jQuery._data( elem );
-
- // If no elemData is found then we must be trying to bind to one of the
- // banned noData elements
- if ( !elemData ) {
- return;
- }
-
- var events = elemData.events,
- eventHandle = elemData.handle;
-
- if ( !events ) {
- elemData.events = events = {};
- }
-
- if ( !eventHandle ) {
- elemData.handle = eventHandle = function( e ) {
- // Discard the second event of a jQuery.event.trigger() and
- // when an event is called after a page has unloaded
- return typeof jQuery !== "undefined" && (!e || jQuery.event.triggered !== e.type) ?
- jQuery.event.handle.apply( eventHandle.elem, arguments ) :
- undefined;
- };
- }
-
- // Add elem as a property of the handle function
- // This is to prevent a memory leak with non-native events in IE.
- eventHandle.elem = elem;
-
- // Handle multiple events separated by a space
- // jQuery(...).bind("mouseover mouseout", fn);
- types = types.split(" ");
-
- var type, i = 0, namespaces;
-
- while ( (type = types[ i++ ]) ) {
- handleObj = handleObjIn ?
- jQuery.extend({}, handleObjIn) :
- { handler: handler, data: data };
-
- // Namespaced event handlers
- if ( type.indexOf(".") > -1 ) {
- namespaces = type.split(".");
- type = namespaces.shift();
- handleObj.namespace = namespaces.slice(0).sort().join(".");
-
- } else {
- namespaces = [];
- handleObj.namespace = "";
- }
-
- handleObj.type = type;
- if ( !handleObj.guid ) {
- handleObj.guid = handler.guid;
- }
-
- // Get the current list of functions bound to this event
- var handlers = events[ type ],
- special = jQuery.event.special[ type ] || {};
-
- // Init the event handler queue
- if ( !handlers ) {
- handlers = events[ type ] = [];
-
- // Check for a special event handler
- // Only use addEventListener/attachEvent if the special
- // events handler returns false
- if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
- // Bind the global event handler to the element
- if ( elem.addEventListener ) {
- elem.addEventListener( type, eventHandle, false );
-
- } else if ( elem.attachEvent ) {
- elem.attachEvent( "on" + type, eventHandle );
- }
- }
- }
-
- if ( special.add ) {
- special.add.call( elem, handleObj );
-
- if ( !handleObj.handler.guid ) {
- handleObj.handler.guid = handler.guid;
- }
- }
-
- // Add the function to the element's handler list
- handlers.push( handleObj );
-
- // Keep track of which events have been used, for event optimization
- jQuery.event.global[ type ] = true;
- }
-
- // Nullify elem to prevent memory leaks in IE
- elem = null;
- },
-
- global: {},
-
- // Detach an event or set of events from an element
- remove: function( elem, types, handler, pos ) {
- // don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- if ( handler === false ) {
- handler = returnFalse;
- }
-
- var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
- elemData = jQuery.hasData( elem ) && jQuery._data( elem ),
- events = elemData && elemData.events;
-
- if ( !elemData || !events ) {
- return;
- }
-
- // types is actually an event object here
- if ( types && types.type ) {
- handler = types.handler;
- types = types.type;
- }
-
- // Unbind all events for the element
- if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
- types = types || "";
-
- for ( type in events ) {
- jQuery.event.remove( elem, type + types );
- }
-
- return;
- }
-
- // Handle multiple events separated by a space
- // jQuery(...).unbind("mouseover mouseout", fn);
- types = types.split(" ");
-
- while ( (type = types[ i++ ]) ) {
- origType = type;
- handleObj = null;
- all = type.indexOf(".") < 0;
- namespaces = [];
-
- if ( !all ) {
- // Namespaced event handlers
- namespaces = type.split(".");
- type = namespaces.shift();
-
- namespace = new RegExp("(^|\\.)" +
- jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
- }
-
- eventType = events[ type ];
-
- if ( !eventType ) {
- continue;
- }
-
- if ( !handler ) {
- for ( j = 0; j < eventType.length; j++ ) {
- handleObj = eventType[ j ];
-
- if ( all || namespace.test( handleObj.namespace ) ) {
- jQuery.event.remove( elem, origType, handleObj.handler, j );
- eventType.splice( j--, 1 );
- }
- }
-
- continue;
- }
-
- special = jQuery.event.special[ type ] || {};
-
- for ( j = pos || 0; j < eventType.length; j++ ) {
- handleObj = eventType[ j ];
-
- if ( handler.guid === handleObj.guid ) {
- // remove the given handler for the given type
- if ( all || namespace.test( handleObj.namespace ) ) {
- if ( pos == null ) {
- eventType.splice( j--, 1 );
- }
-
- if ( special.remove ) {
- special.remove.call( elem, handleObj );
- }
- }
-
- if ( pos != null ) {
- break;
- }
- }
- }
-
- // remove generic event handler if no more handlers exist
- if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
- if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
- jQuery.removeEvent( elem, type, elemData.handle );
- }
-
- ret = null;
- delete events[ type ];
- }
- }
-
- // Remove the expando if it's no longer used
- if ( jQuery.isEmptyObject( events ) ) {
- var handle = elemData.handle;
- if ( handle ) {
- handle.elem = null;
- }
-
- delete elemData.events;
- delete elemData.handle;
-
- if ( jQuery.isEmptyObject( elemData ) ) {
- jQuery.removeData( elem, undefined, true );
- }
- }
- },
-
- // Events that are safe to short-circuit if no handlers are attached.
- // Native DOM events should not be added, they may have inline handlers.
- customEvent: {
- "getData": true,
- "setData": true,
- "changeData": true
- },
-
- trigger: function( event, data, elem, onlyHandlers ) {
- // Event object or event type
- var type = event.type || event,
- namespaces = [],
- exclusive;
-
- if ( type.indexOf("!") >= 0 ) {
- // Exclusive events trigger only for the exact event (no namespaces)
- type = type.slice(0, -1);
- exclusive = true;
- }
-
- if ( type.indexOf(".") >= 0 ) {
- // Namespaced trigger; create a regexp to match event type in handle()
- namespaces = type.split(".");
- type = namespaces.shift();
- namespaces.sort();
- }
-
- if ( (!elem || jQuery.event.customEvent[ type ]) && !jQuery.event.global[ type ] ) {
- // No jQuery handlers for this event type, and it can't have inline handlers
- return;
- }
-
- // Caller can pass in an Event, Object, or just an event type string
- event = typeof event === "object" ?
- // jQuery.Event object
- event[ jQuery.expando ] ? event :
- // Object literal
- new jQuery.Event( type, event ) :
- // Just the event type (string)
- new jQuery.Event( type );
-
- event.type = type;
- event.exclusive = exclusive;
- event.namespace = namespaces.join(".");
- event.namespace_re = new RegExp("(^|\\.)" + namespaces.join("\\.(?:.*\\.)?") + "(\\.|$)");
-
- // triggerHandler() and global events don't bubble or run the default action
- if ( onlyHandlers || !elem ) {
- event.preventDefault();
- event.stopPropagation();
- }
-
- // Handle a global trigger
- if ( !elem ) {
- // TODO: Stop taunting the data cache; remove global events and always attach to document
- jQuery.each( jQuery.cache, function() {
- // internalKey variable is just used to make it easier to find
- // and potentially change this stuff later; currently it just
- // points to jQuery.expando
- var internalKey = jQuery.expando,
- internalCache = this[ internalKey ];
- if ( internalCache && internalCache.events && internalCache.events[ type ] ) {
- jQuery.event.trigger( event, data, internalCache.handle.elem );
- }
- });
- return;
- }
-
- // Don't do events on text and comment nodes
- if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
- return;
- }
-
- // Clean up the event in case it is being reused
- event.result = undefined;
- event.target = elem;
-
- // Clone any incoming data and prepend the event, creating the handler arg list
- data = data != null ? jQuery.makeArray( data ) : [];
- data.unshift( event );
-
- var cur = elem,
- // IE doesn't like method names with a colon (#3533, #8272)
- ontype = type.indexOf(":") < 0 ? "on" + type : "";
-
- // Fire event on the current element, then bubble up the DOM tree
- do {
- var handle = jQuery._data( cur, "handle" );
-
- event.currentTarget = cur;
- if ( handle ) {
- handle.apply( cur, data );
- }
-
- // Trigger an inline bound script
- if ( ontype && jQuery.acceptData( cur ) && cur[ ontype ] && cur[ ontype ].apply( cur, data ) === false ) {
- event.result = false;
- event.preventDefault();
- }
-
- // Bubble up to document, then to window
- cur = cur.parentNode || cur.ownerDocument || cur === event.target.ownerDocument && window;
- } while ( cur && !event.isPropagationStopped() );
-
- // If nobody prevented the default action, do it now
- if ( !event.isDefaultPrevented() ) {
- var old,
- special = jQuery.event.special[ type ] || {};
-
- if ( (!special._default || special._default.call( elem.ownerDocument, event ) === false) &&
- !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) {
-
- // Call a native DOM method on the target with the same name name as the event.
- // Can't use an .isFunction)() check here because IE6/7 fails that test.
- // IE<9 dies on focus to hidden element (#1486), may want to revisit a try/catch.
- try {
- if ( ontype && elem[ type ] ) {
- // Don't re-trigger an onFOO event when we call its FOO() method
- old = elem[ ontype ];
-
- if ( old ) {
- elem[ ontype ] = null;
- }
-
- jQuery.event.triggered = type;
- elem[ type ]();
- }
- } catch ( ieError ) {}
-
- if ( old ) {
- elem[ ontype ] = old;
- }
-
- jQuery.event.triggered = undefined;
- }
- }
-
- return event.result;
- },
-
- handle: function( event ) {
- event = jQuery.event.fix( event || window.event );
- // Snapshot the handlers list since a called handler may add/remove events.
- var handlers = ((jQuery._data( this, "events" ) || {})[ event.type ] || []).slice(0),
- run_all = !event.exclusive && !event.namespace,
- args = Array.prototype.slice.call( arguments, 0 );
-
- // Use the fix-ed Event rather than the (read-only) native event
- args[0] = event;
- event.currentTarget = this;
-
- for ( var j = 0, l = handlers.length; j < l; j++ ) {
- var handleObj = handlers[ j ];
-
- // Triggered event must 1) be non-exclusive and have no namespace, or
- // 2) have namespace(s) a subset or equal to those in the bound event.
- if ( run_all || event.namespace_re.test( handleObj.namespace ) ) {
- // Pass in a reference to the handler function itself
- // So that we can later remove it
- event.handler = handleObj.handler;
- event.data = handleObj.data;
- event.handleObj = handleObj;
-
- var ret = handleObj.handler.apply( this, args );
-
- if ( ret !== undefined ) {
- event.result = ret;
- if ( ret === false ) {
- event.preventDefault();
- event.stopPropagation();
- }
- }
-
- if ( event.isImmediatePropagationStopped() ) {
- break;
- }
- }
- }
- return event.result;
- },
-
- props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
-
- fix: function( event ) {
- if ( event[ jQuery.expando ] ) {
- return event;
- }
-
- // store a copy of the original event object
- // and "clone" to set read-only properties
- var originalEvent = event;
- event = jQuery.Event( originalEvent );
-
- for ( var i = this.props.length, prop; i; ) {
- prop = this.props[ --i ];
- event[ prop ] = originalEvent[ prop ];
- }
-
- // Fix target property, if necessary
- if ( !event.target ) {
- // Fixes #1925 where srcElement might not be defined either
- event.target = event.srcElement || document;
- }
-
- // check if target is a textnode (safari)
- if ( event.target.nodeType === 3 ) {
- event.target = event.target.parentNode;
- }
-
- // Add relatedTarget, if necessary
- if ( !event.relatedTarget && event.fromElement ) {
- event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
- }
-
- // Calculate pageX/Y if missing and clientX/Y available
- if ( event.pageX == null && event.clientX != null ) {
- var eventDocument = event.target.ownerDocument || document,
- doc = eventDocument.documentElement,
- body = eventDocument.body;
-
- event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
- event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
- }
-
- // Add which for key events
- if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
- event.which = event.charCode != null ? event.charCode : event.keyCode;
- }
-
- // Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
- if ( !event.metaKey && event.ctrlKey ) {
- event.metaKey = event.ctrlKey;
- }
-
- // Add which for click: 1 === left; 2 === middle; 3 === right
- // Note: button is not normalized, so don't use it
- if ( !event.which && event.button !== undefined ) {
- event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
- }
-
- return event;
- },
-
- // Deprecated, use jQuery.guid instead
- guid: 1E8,
-
- // Deprecated, use jQuery.proxy instead
- proxy: jQuery.proxy,
-
- special: {
- ready: {
- // Make sure the ready event is setup
- setup: jQuery.bindReady,
- teardown: jQuery.noop
- },
-
- live: {
- add: function( handleObj ) {
- jQuery.event.add( this,
- liveConvert( handleObj.origType, handleObj.selector ),
- jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
- },
-
- remove: function( handleObj ) {
- jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
- }
- },
-
- beforeunload: {
- setup: function( data, namespaces, eventHandle ) {
- // We only want to do this special case on windows
- if ( jQuery.isWindow( this ) ) {
- this.onbeforeunload = eventHandle;
- }
- },
-
- teardown: function( namespaces, eventHandle ) {
- if ( this.onbeforeunload === eventHandle ) {
- this.onbeforeunload = null;
- }
- }
- }
- }
-};
-
-jQuery.removeEvent = document.removeEventListener ?
- function( elem, type, handle ) {
- if ( elem.removeEventListener ) {
- elem.removeEventListener( type, handle, false );
- }
- } :
- function( elem, type, handle ) {
- if ( elem.detachEvent ) {
- elem.detachEvent( "on" + type, handle );
- }
- };
-
-jQuery.Event = function( src, props ) {
- // Allow instantiation without the 'new' keyword
- if ( !this.preventDefault ) {
- return new jQuery.Event( src, props );
- }
-
- // Event object
- if ( src && src.type ) {
- this.originalEvent = src;
- this.type = src.type;
-
- // Events bubbling up the document may have been marked as prevented
- // by a handler lower down the tree; reflect the correct value.
- this.isDefaultPrevented = (src.defaultPrevented || src.returnValue === false ||
- src.getPreventDefault && src.getPreventDefault()) ? returnTrue : returnFalse;
-
- // Event type
- } else {
- this.type = src;
- }
-
- // Put explicitly provided properties onto the event object
- if ( props ) {
- jQuery.extend( this, props );
- }
-
- // timeStamp is buggy for some events on Firefox(#3843)
- // So we won't rely on the native value
- this.timeStamp = jQuery.now();
-
- // Mark it as fixed
- this[ jQuery.expando ] = true;
-};
-
-function returnFalse() {
- return false;
-}
-function returnTrue() {
- return true;
-}
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
- preventDefault: function() {
- this.isDefaultPrevented = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
-
- // if preventDefault exists run it on the original event
- if ( e.preventDefault ) {
- e.preventDefault();
-
- // otherwise set the returnValue property of the original event to false (IE)
- } else {
- e.returnValue = false;
- }
- },
- stopPropagation: function() {
- this.isPropagationStopped = returnTrue;
-
- var e = this.originalEvent;
- if ( !e ) {
- return;
- }
- // if stopPropagation exists run it on the original event
- if ( e.stopPropagation ) {
- e.stopPropagation();
- }
- // otherwise set the cancelBubble property of the original event to true (IE)
- e.cancelBubble = true;
- },
- stopImmediatePropagation: function() {
- this.isImmediatePropagationStopped = returnTrue;
- this.stopPropagation();
- },
- isDefaultPrevented: returnFalse,
- isPropagationStopped: returnFalse,
- isImmediatePropagationStopped: returnFalse
-};
-
-// Checks if an event happened on an element within another element
-// Used in jQuery.event.special.mouseenter and mouseleave handlers
-var withinElement = function( event ) {
-
- // Check if mouse(over|out) are still within the same parent element
- var related = event.relatedTarget,
- inside = false,
- eventType = event.type;
-
- event.type = event.data;
-
- if ( related !== this ) {
-
- if ( related ) {
- inside = jQuery.contains( this, related );
- }
-
- if ( !inside ) {
-
- jQuery.event.handle.apply( this, arguments );
-
- event.type = eventType;
- }
- }
-},
-
-// In case of event delegation, we only need to rename the event.type,
-// liveHandler will take care of the rest.
-delegate = function( event ) {
- event.type = event.data;
- jQuery.event.handle.apply( this, arguments );
-};
-
-// Create mouseenter and mouseleave events
-jQuery.each({
- mouseenter: "mouseover",
- mouseleave: "mouseout"
-}, function( orig, fix ) {
- jQuery.event.special[ orig ] = {
- setup: function( data ) {
- jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
- },
- teardown: function( data ) {
- jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
- }
- };
-});
-
-// submit delegation
-if ( !jQuery.support.submitBubbles ) {
-
- jQuery.event.special.submit = {
- setup: function( data, namespaces ) {
- if ( !jQuery.nodeName( this, "form" ) ) {
- jQuery.event.add(this, "click.specialSubmit", function( e ) {
- // Avoid triggering error on non-existent type attribute in IE VML (#7071)
- var elem = e.target,
- type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : "";
-
- if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
- trigger( "submit", this, arguments );
- }
- });
-
- jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
- var elem = e.target,
- type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : "";
-
- if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
- trigger( "submit", this, arguments );
- }
- });
-
- } else {
- return false;
- }
- },
-
- teardown: function( namespaces ) {
- jQuery.event.remove( this, ".specialSubmit" );
- }
- };
-
-}
-
-// change delegation, happens here so we have bind.
-if ( !jQuery.support.changeBubbles ) {
-
- var changeFilters,
-
- getVal = function( elem ) {
- var type = jQuery.nodeName( elem, "input" ) ? elem.type : "",
- val = elem.value;
-
- if ( type === "radio" || type === "checkbox" ) {
- val = elem.checked;
-
- } else if ( type === "select-multiple" ) {
- val = elem.selectedIndex > -1 ?
- jQuery.map( elem.options, function( elem ) {
- return elem.selected;
- }).join("-") :
- "";
-
- } else if ( jQuery.nodeName( elem, "select" ) ) {
- val = elem.selectedIndex;
- }
-
- return val;
- },
-
- testChange = function testChange( e ) {
- var elem = e.target, data, val;
-
- if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
- return;
- }
-
- data = jQuery._data( elem, "_change_data" );
- val = getVal(elem);
-
- // the current data will be also retrieved by beforeactivate
- if ( e.type !== "focusout" || elem.type !== "radio" ) {
- jQuery._data( elem, "_change_data", val );
- }
-
- if ( data === undefined || val === data ) {
- return;
- }
-
- if ( data != null || val ) {
- e.type = "change";
- e.liveFired = undefined;
- jQuery.event.trigger( e, arguments[1], elem );
- }
- };
-
- jQuery.event.special.change = {
- filters: {
- focusout: testChange,
-
- beforedeactivate: testChange,
-
- click: function( e ) {
- var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
-
- if ( type === "radio" || type === "checkbox" || jQuery.nodeName( elem, "select" ) ) {
- testChange.call( this, e );
- }
- },
-
- // Change has to be called before submit
- // Keydown will be called before keypress, which is used in submit-event delegation
- keydown: function( e ) {
- var elem = e.target, type = jQuery.nodeName( elem, "input" ) ? elem.type : "";
-
- if ( (e.keyCode === 13 && !jQuery.nodeName( elem, "textarea" ) ) ||
- (e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
- type === "select-multiple" ) {
- testChange.call( this, e );
- }
- },
-
- // Beforeactivate happens also before the previous element is blurred
- // with this event you can't trigger a change event, but you can store
- // information
- beforeactivate: function( e ) {
- var elem = e.target;
- jQuery._data( elem, "_change_data", getVal(elem) );
- }
- },
-
- setup: function( data, namespaces ) {
- if ( this.type === "file" ) {
- return false;
- }
-
- for ( var type in changeFilters ) {
- jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
- }
-
- return rformElems.test( this.nodeName );
- },
-
- teardown: function( namespaces ) {
- jQuery.event.remove( this, ".specialChange" );
-
- return rformElems.test( this.nodeName );
- }
- };
-
- changeFilters = jQuery.event.special.change.filters;
-
- // Handle when the input is .focus()'d
- changeFilters.focus = changeFilters.beforeactivate;
-}
-
-function trigger( type, elem, args ) {
- // Piggyback on a donor event to simulate a different one.
- // Fake originalEvent to avoid donor's stopPropagation, but if the
- // simulated event prevents default then we do the same on the donor.
- // Don't pass args or remember liveFired; they apply to the donor event.
- var event = jQuery.extend( {}, args[ 0 ] );
- event.type = type;
- event.originalEvent = {};
- event.liveFired = undefined;
- jQuery.event.handle.call( elem, event );
- if ( event.isDefaultPrevented() ) {
- args[ 0 ].preventDefault();
- }
-}
-
-// Create "bubbling" focus and blur events
-if ( !jQuery.support.focusinBubbles ) {
- jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
- // Attach a single capturing handler while someone wants focusin/focusout
- var attaches = 0;
-
- jQuery.event.special[ fix ] = {
- setup: function() {
- if ( attaches++ === 0 ) {
- document.addEventListener( orig, handler, true );
- }
- },
- teardown: function() {
- if ( --attaches === 0 ) {
- document.removeEventListener( orig, handler, true );
- }
- }
- };
-
- function handler( donor ) {
- // Donor event is always a native one; fix it and switch its type.
- // Let focusin/out handler cancel the donor focus/blur event.
- var e = jQuery.event.fix( donor );
- e.type = fix;
- e.originalEvent = {};
- jQuery.event.trigger( e, null, e.target );
- if ( e.isDefaultPrevented() ) {
- donor.preventDefault();
- }
- }
- });
-}
-
-jQuery.each(["bind", "one"], function( i, name ) {
- jQuery.fn[ name ] = function( type, data, fn ) {
- var handler;
-
- // Handle object literals
- if ( typeof type === "object" ) {
- for ( var key in type ) {
- this[ name ](key, data, type[key], fn);
- }
- return this;
- }
-
- if ( arguments.length === 2 || data === false ) {
- fn = data;
- data = undefined;
- }
-
- if ( name === "one" ) {
- handler = function( event ) {
- jQuery( this ).unbind( event, handler );
- return fn.apply( this, arguments );
- };
- handler.guid = fn.guid || jQuery.guid++;
- } else {
- handler = fn;
- }
-
- if ( type === "unload" && name !== "one" ) {
- this.one( type, data, fn );
-
- } else {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- jQuery.event.add( this[i], type, handler, data );
- }
- }
-
- return this;
- };
-});
-
-jQuery.fn.extend({
- unbind: function( type, fn ) {
- // Handle object literals
- if ( typeof type === "object" && !type.preventDefault ) {
- for ( var key in type ) {
- this.unbind(key, type[key]);
- }
-
- } else {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- jQuery.event.remove( this[i], type, fn );
- }
- }
-
- return this;
- },
-
- delegate: function( selector, types, data, fn ) {
- return this.live( types, data, fn, selector );
- },
-
- undelegate: function( selector, types, fn ) {
- if ( arguments.length === 0 ) {
- return this.unbind( "live" );
-
- } else {
- return this.die( types, null, fn, selector );
- }
- },
-
- trigger: function( type, data ) {
- return this.each(function() {
- jQuery.event.trigger( type, data, this );
- });
- },
-
- triggerHandler: function( type, data ) {
- if ( this[0] ) {
- return jQuery.event.trigger( type, data, this[0], true );
- }
- },
-
- toggle: function( fn ) {
- // Save reference to arguments for access in closure
- var args = arguments,
- guid = fn.guid || jQuery.guid++,
- i = 0,
- toggler = function( event ) {
- // Figure out which function to execute
- var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
- jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
-
- // Make sure that clicks stop
- event.preventDefault();
-
- // and execute the function
- return args[ lastToggle ].apply( this, arguments ) || false;
- };
-
- // link all the functions, so any of them can unbind this click handler
- toggler.guid = guid;
- while ( i < args.length ) {
- args[ i++ ].guid = guid;
- }
-
- return this.click( toggler );
- },
-
- hover: function( fnOver, fnOut ) {
- return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
- }
-});
-
-var liveMap = {
- focus: "focusin",
- blur: "focusout",
- mouseenter: "mouseover",
- mouseleave: "mouseout"
-};
-
-jQuery.each(["live", "die"], function( i, name ) {
- jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
- var type, i = 0, match, namespaces, preType,
- selector = origSelector || this.selector,
- context = origSelector ? this : jQuery( this.context );
-
- if ( typeof types === "object" && !types.preventDefault ) {
- for ( var key in types ) {
- context[ name ]( key, data, types[key], selector );
- }
-
- return this;
- }
-
- if ( name === "die" && !types &&
- origSelector && origSelector.charAt(0) === "." ) {
-
- context.unbind( origSelector );
-
- return this;
- }
-
- if ( data === false || jQuery.isFunction( data ) ) {
- fn = data || returnFalse;
- data = undefined;
- }
-
- types = (types || "").split(" ");
-
- while ( (type = types[ i++ ]) != null ) {
- match = rnamespaces.exec( type );
- namespaces = "";
-
- if ( match ) {
- namespaces = match[0];
- type = type.replace( rnamespaces, "" );
- }
-
- if ( type === "hover" ) {
- types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
- continue;
- }
-
- preType = type;
-
- if ( liveMap[ type ] ) {
- types.push( liveMap[ type ] + namespaces );
- type = type + namespaces;
-
- } else {
- type = (liveMap[ type ] || type) + namespaces;
- }
-
- if ( name === "live" ) {
- // bind live handler
- for ( var j = 0, l = context.length; j < l; j++ ) {
- jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
- { data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
- }
-
- } else {
- // unbind live handler
- context.unbind( "live." + liveConvert( type, selector ), fn );
- }
- }
-
- return this;
- };
-});
-
-function liveHandler( event ) {
- var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
- elems = [],
- selectors = [],
- events = jQuery._data( this, "events" );
-
- // Make sure we avoid non-left-click bubbling in Firefox (#3861) and disabled elements in IE (#6911)
- if ( event.liveFired === this || !events || !events.live || event.target.disabled || event.button && event.type === "click" ) {
- return;
- }
-
- if ( event.namespace ) {
- namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
- }
-
- event.liveFired = this;
-
- var live = events.live.slice(0);
-
- for ( j = 0; j < live.length; j++ ) {
- handleObj = live[j];
-
- if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
- selectors.push( handleObj.selector );
-
- } else {
- live.splice( j--, 1 );
- }
- }
-
- match = jQuery( event.target ).closest( selectors, event.currentTarget );
-
- for ( i = 0, l = match.length; i < l; i++ ) {
- close = match[i];
-
- for ( j = 0; j < live.length; j++ ) {
- handleObj = live[j];
-
- if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) && !close.elem.disabled ) {
- elem = close.elem;
- related = null;
-
- // Those two events require additional checking
- if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
- event.type = handleObj.preType;
- related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
-
- // Make sure not to accidentally match a child element with the same selector
- if ( related && jQuery.contains( elem, related ) ) {
- related = elem;
- }
- }
-
- if ( !related || related !== elem ) {
- elems.push({ elem: elem, handleObj: handleObj, level: close.level });
- }
- }
- }
- }
-
- for ( i = 0, l = elems.length; i < l; i++ ) {
- match = elems[i];
-
- if ( maxLevel && match.level > maxLevel ) {
- break;
- }
-
- event.currentTarget = match.elem;
- event.data = match.handleObj.data;
- event.handleObj = match.handleObj;
-
- ret = match.handleObj.origHandler.apply( match.elem, arguments );
-
- if ( ret === false || event.isPropagationStopped() ) {
- maxLevel = match.level;
-
- if ( ret === false ) {
- stop = false;
- }
- if ( event.isImmediatePropagationStopped() ) {
- break;
- }
- }
- }
-
- return stop;
-}
-
-function liveConvert( type, selector ) {
- return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspaces, "&");
-}
-
-jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
- "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
- "change select submit keydown keypress keyup error").split(" "), function( i, name ) {
-
- // Handle event binding
- jQuery.fn[ name ] = function( data, fn ) {
- if ( fn == null ) {
- fn = data;
- data = null;
- }
-
- return arguments.length > 0 ?
- this.bind( name, data, fn ) :
- this.trigger( name );
- };
-
- if ( jQuery.attrFn ) {
- jQuery.attrFn[ name ] = true;
- }
-});
-
-
-
-/*!
- * Sizzle CSS Selector Engine
- * Copyright 2011, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- * More information: http://sizzlejs.com/
- */
-(function(){
-
-var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
- done = 0,
- toString = Object.prototype.toString,
- hasDuplicate = false,
- baseHasDuplicate = true,
- rBackslash = /\\/g,
- rNonWord = /\W/;
-
-// Here we check if the JavaScript engine is using some sort of
-// optimization where it does not always call our comparision
-// function. If that is the case, discard the hasDuplicate value.
-// Thus far that includes Google Chrome.
-[0, 0].sort(function() {
- baseHasDuplicate = false;
- return 0;
-});
-
-var Sizzle = function( selector, context, results, seed ) {
- results = results || [];
- context = context || document;
-
- var origContext = context;
-
- if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
- return [];
- }
-
- if ( !selector || typeof selector !== "string" ) {
- return results;
- }
-
- var m, set, checkSet, extra, ret, cur, pop, i,
- prune = true,
- contextXML = Sizzle.isXML( context ),
- parts = [],
- soFar = selector;
-
- // Reset the position of the chunker regexp (start from head)
- do {
- chunker.exec( "" );
- m = chunker.exec( soFar );
-
- if ( m ) {
- soFar = m[3];
-
- parts.push( m[1] );
-
- if ( m[2] ) {
- extra = m[3];
- break;
- }
- }
- } while ( m );
-
- if ( parts.length > 1 && origPOS.exec( selector ) ) {
-
- if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
- set = posProcess( parts[0] + parts[1], context );
-
- } else {
- set = Expr.relative[ parts[0] ] ?
- [ context ] :
- Sizzle( parts.shift(), context );
-
- while ( parts.length ) {
- selector = parts.shift();
-
- if ( Expr.relative[ selector ] ) {
- selector += parts.shift();
- }
-
- set = posProcess( selector, set );
- }
- }
-
- } else {
- // Take a shortcut and set the context if the root selector is an ID
- // (but not if it'll be faster if the inner selector is an ID)
- if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
- Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
-
- ret = Sizzle.find( parts.shift(), context, contextXML );
- context = ret.expr ?
- Sizzle.filter( ret.expr, ret.set )[0] :
- ret.set[0];
- }
-
- if ( context ) {
- ret = seed ?
- { expr: parts.pop(), set: makeArray(seed) } :
- Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
-
- set = ret.expr ?
- Sizzle.filter( ret.expr, ret.set ) :
- ret.set;
-
- if ( parts.length > 0 ) {
- checkSet = makeArray( set );
-
- } else {
- prune = false;
- }
-
- while ( parts.length ) {
- cur = parts.pop();
- pop = cur;
-
- if ( !Expr.relative[ cur ] ) {
- cur = "";
- } else {
- pop = parts.pop();
- }
-
- if ( pop == null ) {
- pop = context;
- }
-
- Expr.relative[ cur ]( checkSet, pop, contextXML );
- }
-
- } else {
- checkSet = parts = [];
- }
- }
-
- if ( !checkSet ) {
- checkSet = set;
- }
-
- if ( !checkSet ) {
- Sizzle.error( cur || selector );
- }
-
- if ( toString.call(checkSet) === "[object Array]" ) {
- if ( !prune ) {
- results.push.apply( results, checkSet );
-
- } else if ( context && context.nodeType === 1 ) {
- for ( i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
- results.push( set[i] );
- }
- }
-
- } else {
- for ( i = 0; checkSet[i] != null; i++ ) {
- if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
- results.push( set[i] );
- }
- }
- }
-
- } else {
- makeArray( checkSet, results );
- }
-
- if ( extra ) {
- Sizzle( extra, origContext, results, seed );
- Sizzle.uniqueSort( results );
- }
-
- return results;
-};
-
-Sizzle.uniqueSort = function( results ) {
- if ( sortOrder ) {
- hasDuplicate = baseHasDuplicate;
- results.sort( sortOrder );
-
- if ( hasDuplicate ) {
- for ( var i = 1; i < results.length; i++ ) {
- if ( results[i] === results[ i - 1 ] ) {
- results.splice( i--, 1 );
- }
- }
- }
- }
-
- return results;
-};
-
-Sizzle.matches = function( expr, set ) {
- return Sizzle( expr, null, null, set );
-};
-
-Sizzle.matchesSelector = function( node, expr ) {
- return Sizzle( expr, null, null, [node] ).length > 0;
-};
-
-Sizzle.find = function( expr, context, isXML ) {
- var set;
-
- if ( !expr ) {
- return [];
- }
-
- for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
- var match,
- type = Expr.order[i];
-
- if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
- var left = match[1];
- match.splice( 1, 1 );
-
- if ( left.substr( left.length - 1 ) !== "\\" ) {
- match[1] = (match[1] || "").replace( rBackslash, "" );
- set = Expr.find[ type ]( match, context, isXML );
-
- if ( set != null ) {
- expr = expr.replace( Expr.match[ type ], "" );
- break;
- }
- }
- }
- }
-
- if ( !set ) {
- set = typeof context.getElementsByTagName !== "undefined" ?
- context.getElementsByTagName( "*" ) :
- [];
- }
-
- return { set: set, expr: expr };
-};
-
-Sizzle.filter = function( expr, set, inplace, not ) {
- var match, anyFound,
- old = expr,
- result = [],
- curLoop = set,
- isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
-
- while ( expr && set.length ) {
- for ( var type in Expr.filter ) {
- if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
- var found, item,
- filter = Expr.filter[ type ],
- left = match[1];
-
- anyFound = false;
-
- match.splice(1,1);
-
- if ( left.substr( left.length - 1 ) === "\\" ) {
- continue;
- }
-
- if ( curLoop === result ) {
- result = [];
- }
-
- if ( Expr.preFilter[ type ] ) {
- match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
-
- if ( !match ) {
- anyFound = found = true;
-
- } else if ( match === true ) {
- continue;
- }
- }
-
- if ( match ) {
- for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
- if ( item ) {
- found = filter( item, match, i, curLoop );
- var pass = not ^ !!found;
-
- if ( inplace && found != null ) {
- if ( pass ) {
- anyFound = true;
-
- } else {
- curLoop[i] = false;
- }
-
- } else if ( pass ) {
- result.push( item );
- anyFound = true;
- }
- }
- }
- }
-
- if ( found !== undefined ) {
- if ( !inplace ) {
- curLoop = result;
- }
-
- expr = expr.replace( Expr.match[ type ], "" );
-
- if ( !anyFound ) {
- return [];
- }
-
- break;
- }
- }
- }
-
- // Improper expression
- if ( expr === old ) {
- if ( anyFound == null ) {
- Sizzle.error( expr );
-
- } else {
- break;
- }
- }
-
- old = expr;
- }
-
- return curLoop;
-};
-
-Sizzle.error = function( msg ) {
- throw "Syntax error, unrecognized expression: " + msg;
-};
-
-var Expr = Sizzle.selectors = {
- order: [ "ID", "NAME", "TAG" ],
-
- match: {
- ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
- CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
- NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
- ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,
- TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
- CHILD: /:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,
- POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
- PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
- },
-
- leftMatch: {},
-
- attrMap: {
- "class": "className",
- "for": "htmlFor"
- },
-
- attrHandle: {
- href: function( elem ) {
- return elem.getAttribute( "href" );
- },
- type: function( elem ) {
- return elem.getAttribute( "type" );
- }
- },
-
- relative: {
- "+": function(checkSet, part){
- var isPartStr = typeof part === "string",
- isTag = isPartStr && !rNonWord.test( part ),
- isPartStrNotTag = isPartStr && !isTag;
-
- if ( isTag ) {
- part = part.toLowerCase();
- }
-
- for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
- if ( (elem = checkSet[i]) ) {
- while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
-
- checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
- elem || false :
- elem === part;
- }
- }
-
- if ( isPartStrNotTag ) {
- Sizzle.filter( part, checkSet, true );
- }
- },
-
- ">": function( checkSet, part ) {
- var elem,
- isPartStr = typeof part === "string",
- i = 0,
- l = checkSet.length;
-
- if ( isPartStr && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
-
- for ( ; i < l; i++ ) {
- elem = checkSet[i];
-
- if ( elem ) {
- var parent = elem.parentNode;
- checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
- }
- }
-
- } else {
- for ( ; i < l; i++ ) {
- elem = checkSet[i];
-
- if ( elem ) {
- checkSet[i] = isPartStr ?
- elem.parentNode :
- elem.parentNode === part;
- }
- }
-
- if ( isPartStr ) {
- Sizzle.filter( part, checkSet, true );
- }
- }
- },
-
- "": function(checkSet, part, isXML){
- var nodeCheck,
- doneName = done++,
- checkFn = dirCheck;
-
- if ( typeof part === "string" && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
- nodeCheck = part;
- checkFn = dirNodeCheck;
- }
-
- checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
- },
-
- "~": function( checkSet, part, isXML ) {
- var nodeCheck,
- doneName = done++,
- checkFn = dirCheck;
-
- if ( typeof part === "string" && !rNonWord.test( part ) ) {
- part = part.toLowerCase();
- nodeCheck = part;
- checkFn = dirNodeCheck;
- }
-
- checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
- }
- },
-
- find: {
- ID: function( match, context, isXML ) {
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- return m && m.parentNode ? [m] : [];
- }
- },
-
- NAME: function( match, context ) {
- if ( typeof context.getElementsByName !== "undefined" ) {
- var ret = [],
- results = context.getElementsByName( match[1] );
-
- for ( var i = 0, l = results.length; i < l; i++ ) {
- if ( results[i].getAttribute("name") === match[1] ) {
- ret.push( results[i] );
- }
- }
-
- return ret.length === 0 ? null : ret;
- }
- },
-
- TAG: function( match, context ) {
- if ( typeof context.getElementsByTagName !== "undefined" ) {
- return context.getElementsByTagName( match[1] );
- }
- }
- },
- preFilter: {
- CLASS: function( match, curLoop, inplace, result, not, isXML ) {
- match = " " + match[1].replace( rBackslash, "" ) + " ";
-
- if ( isXML ) {
- return match;
- }
-
- for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
- if ( elem ) {
- if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n\r]/g, " ").indexOf(match) >= 0) ) {
- if ( !inplace ) {
- result.push( elem );
- }
-
- } else if ( inplace ) {
- curLoop[i] = false;
- }
- }
- }
-
- return false;
- },
-
- ID: function( match ) {
- return match[1].replace( rBackslash, "" );
- },
-
- TAG: function( match, curLoop ) {
- return match[1].replace( rBackslash, "" ).toLowerCase();
- },
-
- CHILD: function( match ) {
- if ( match[1] === "nth" ) {
- if ( !match[2] ) {
- Sizzle.error( match[0] );
- }
-
- match[2] = match[2].replace(/^\+|\s*/g, '');
-
- // parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
- var test = /(-?)(\d*)(?:n([+\-]?\d*))?/.exec(
- match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
- !/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
-
- // calculate the numbers (first)n+(last) including if they are negative
- match[2] = (test[1] + (test[2] || 1)) - 0;
- match[3] = test[3] - 0;
- }
- else if ( match[2] ) {
- Sizzle.error( match[0] );
- }
-
- // TODO: Move to normal caching system
- match[0] = done++;
-
- return match;
- },
-
- ATTR: function( match, curLoop, inplace, result, not, isXML ) {
- var name = match[1] = match[1].replace( rBackslash, "" );
-
- if ( !isXML && Expr.attrMap[name] ) {
- match[1] = Expr.attrMap[name];
- }
-
- // Handle if an un-quoted value was used
- match[4] = ( match[4] || match[5] || "" ).replace( rBackslash, "" );
-
- if ( match[2] === "~=" ) {
- match[4] = " " + match[4] + " ";
- }
-
- return match;
- },
-
- PSEUDO: function( match, curLoop, inplace, result, not ) {
- if ( match[1] === "not" ) {
- // If we're dealing with a complex expression, or a simple one
- if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
- match[3] = Sizzle(match[3], null, null, curLoop);
-
- } else {
- var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
-
- if ( !inplace ) {
- result.push.apply( result, ret );
- }
-
- return false;
- }
-
- } else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
- return true;
- }
-
- return match;
- },
-
- POS: function( match ) {
- match.unshift( true );
-
- return match;
- }
- },
-
- filters: {
- enabled: function( elem ) {
- return elem.disabled === false && elem.type !== "hidden";
- },
-
- disabled: function( elem ) {
- return elem.disabled === true;
- },
-
- checked: function( elem ) {
- return elem.checked === true;
- },
-
- selected: function( elem ) {
- // Accessing this property makes selected-by-default
- // options in Safari work properly
- if ( elem.parentNode ) {
- elem.parentNode.selectedIndex;
- }
-
- return elem.selected === true;
- },
-
- parent: function( elem ) {
- return !!elem.firstChild;
- },
-
- empty: function( elem ) {
- return !elem.firstChild;
- },
-
- has: function( elem, i, match ) {
- return !!Sizzle( match[3], elem ).length;
- },
-
- header: function( elem ) {
- return (/h\d/i).test( elem.nodeName );
- },
-
- text: function( elem ) {
- var attr = elem.getAttribute( "type" ), type = elem.type;
- // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)
- // use getAttribute instead to test this case
- return elem.nodeName.toLowerCase() === "input" && "text" === type && ( attr === type || attr === null );
- },
-
- radio: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "radio" === elem.type;
- },
-
- checkbox: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "checkbox" === elem.type;
- },
-
- file: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "file" === elem.type;
- },
-
- password: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "password" === elem.type;
- },
-
- submit: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && "submit" === elem.type;
- },
-
- image: function( elem ) {
- return elem.nodeName.toLowerCase() === "input" && "image" === elem.type;
- },
-
- reset: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return (name === "input" || name === "button") && "reset" === elem.type;
- },
-
- button: function( elem ) {
- var name = elem.nodeName.toLowerCase();
- return name === "input" && "button" === elem.type || name === "button";
- },
-
- input: function( elem ) {
- return (/input|select|textarea|button/i).test( elem.nodeName );
- },
-
- focus: function( elem ) {
- return elem === elem.ownerDocument.activeElement;
- }
- },
- setFilters: {
- first: function( elem, i ) {
- return i === 0;
- },
-
- last: function( elem, i, match, array ) {
- return i === array.length - 1;
- },
-
- even: function( elem, i ) {
- return i % 2 === 0;
- },
-
- odd: function( elem, i ) {
- return i % 2 === 1;
- },
-
- lt: function( elem, i, match ) {
- return i < match[3] - 0;
- },
-
- gt: function( elem, i, match ) {
- return i > match[3] - 0;
- },
-
- nth: function( elem, i, match ) {
- return match[3] - 0 === i;
- },
-
- eq: function( elem, i, match ) {
- return match[3] - 0 === i;
- }
- },
- filter: {
- PSEUDO: function( elem, match, i, array ) {
- var name = match[1],
- filter = Expr.filters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
-
- } else if ( name === "contains" ) {
- return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
-
- } else if ( name === "not" ) {
- var not = match[3];
-
- for ( var j = 0, l = not.length; j < l; j++ ) {
- if ( not[j] === elem ) {
- return false;
- }
- }
-
- return true;
-
- } else {
- Sizzle.error( name );
- }
- },
-
- CHILD: function( elem, match ) {
- var type = match[1],
- node = elem;
-
- switch ( type ) {
- case "only":
- case "first":
- while ( (node = node.previousSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
-
- if ( type === "first" ) {
- return true;
- }
-
- node = elem;
-
- case "last":
- while ( (node = node.nextSibling) ) {
- if ( node.nodeType === 1 ) {
- return false;
- }
- }
-
- return true;
-
- case "nth":
- var first = match[2],
- last = match[3];
-
- if ( first === 1 && last === 0 ) {
- return true;
- }
-
- var doneName = match[0],
- parent = elem.parentNode;
-
- if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
- var count = 0;
-
- for ( node = parent.firstChild; node; node = node.nextSibling ) {
- if ( node.nodeType === 1 ) {
- node.nodeIndex = ++count;
- }
- }
-
- parent.sizcache = doneName;
- }
-
- var diff = elem.nodeIndex - last;
-
- if ( first === 0 ) {
- return diff === 0;
-
- } else {
- return ( diff % first === 0 && diff / first >= 0 );
- }
- }
- },
-
- ID: function( elem, match ) {
- return elem.nodeType === 1 && elem.getAttribute("id") === match;
- },
-
- TAG: function( elem, match ) {
- return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
- },
-
- CLASS: function( elem, match ) {
- return (" " + (elem.className || elem.getAttribute("class")) + " ")
- .indexOf( match ) > -1;
- },
-
- ATTR: function( elem, match ) {
- var name = match[1],
- result = Expr.attrHandle[ name ] ?
- Expr.attrHandle[ name ]( elem ) :
- elem[ name ] != null ?
- elem[ name ] :
- elem.getAttribute( name ),
- value = result + "",
- type = match[2],
- check = match[4];
-
- return result == null ?
- type === "!=" :
- type === "=" ?
- value === check :
- type === "*=" ?
- value.indexOf(check) >= 0 :
- type === "~=" ?
- (" " + value + " ").indexOf(check) >= 0 :
- !check ?
- value && result !== false :
- type === "!=" ?
- value !== check :
- type === "^=" ?
- value.indexOf(check) === 0 :
- type === "$=" ?
- value.substr(value.length - check.length) === check :
- type === "|=" ?
- value === check || value.substr(0, check.length + 1) === check + "-" :
- false;
- },
-
- POS: function( elem, match, i, array ) {
- var name = match[2],
- filter = Expr.setFilters[ name ];
-
- if ( filter ) {
- return filter( elem, i, match, array );
- }
- }
- }
-};
-
-var origPOS = Expr.match.POS,
- fescape = function(all, num){
- return "\\" + (num - 0 + 1);
- };
-
-for ( var type in Expr.match ) {
- Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
- Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
-}
-
-var makeArray = function( array, results ) {
- array = Array.prototype.slice.call( array, 0 );
-
- if ( results ) {
- results.push.apply( results, array );
- return results;
- }
-
- return array;
-};
-
-// Perform a simple check to determine if the browser is capable of
-// converting a NodeList to an array using builtin methods.
-// Also verifies that the returned array holds DOM nodes
-// (which is not the case in the Blackberry browser)
-try {
- Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
-
-// Provide a fallback method if it does not work
-} catch( e ) {
- makeArray = function( array, results ) {
- var i = 0,
- ret = results || [];
-
- if ( toString.call(array) === "[object Array]" ) {
- Array.prototype.push.apply( ret, array );
-
- } else {
- if ( typeof array.length === "number" ) {
- for ( var l = array.length; i < l; i++ ) {
- ret.push( array[i] );
- }
-
- } else {
- for ( ; array[i]; i++ ) {
- ret.push( array[i] );
- }
- }
- }
-
- return ret;
- };
-}
-
-var sortOrder, siblingCheck;
-
-if ( document.documentElement.compareDocumentPosition ) {
- sortOrder = function( a, b ) {
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
- }
-
- if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
- return a.compareDocumentPosition ? -1 : 1;
- }
-
- return a.compareDocumentPosition(b) & 4 ? -1 : 1;
- };
-
-} else {
- sortOrder = function( a, b ) {
- // The nodes are identical, we can exit early
- if ( a === b ) {
- hasDuplicate = true;
- return 0;
-
- // Fallback to using sourceIndex (in IE) if it's available on both nodes
- } else if ( a.sourceIndex && b.sourceIndex ) {
- return a.sourceIndex - b.sourceIndex;
- }
-
- var al, bl,
- ap = [],
- bp = [],
- aup = a.parentNode,
- bup = b.parentNode,
- cur = aup;
-
- // If the nodes are siblings (or identical) we can do a quick check
- if ( aup === bup ) {
- return siblingCheck( a, b );
-
- // If no parents were found then the nodes are disconnected
- } else if ( !aup ) {
- return -1;
-
- } else if ( !bup ) {
- return 1;
- }
-
- // Otherwise they're somewhere else in the tree so we need
- // to build up a full list of the parentNodes for comparison
- while ( cur ) {
- ap.unshift( cur );
- cur = cur.parentNode;
- }
-
- cur = bup;
-
- while ( cur ) {
- bp.unshift( cur );
- cur = cur.parentNode;
- }
-
- al = ap.length;
- bl = bp.length;
-
- // Start walking down the tree looking for a discrepancy
- for ( var i = 0; i < al && i < bl; i++ ) {
- if ( ap[i] !== bp[i] ) {
- return siblingCheck( ap[i], bp[i] );
- }
- }
-
- // We ended someplace up the tree so do a sibling check
- return i === al ?
- siblingCheck( a, bp[i], -1 ) :
- siblingCheck( ap[i], b, 1 );
- };
-
- siblingCheck = function( a, b, ret ) {
- if ( a === b ) {
- return ret;
- }
-
- var cur = a.nextSibling;
-
- while ( cur ) {
- if ( cur === b ) {
- return -1;
- }
-
- cur = cur.nextSibling;
- }
-
- return 1;
- };
-}
-
-// Utility function for retreiving the text value of an array of DOM nodes
-Sizzle.getText = function( elems ) {
- var ret = "", elem;
-
- for ( var i = 0; elems[i]; i++ ) {
- elem = elems[i];
-
- // Get the text from text nodes and CDATA nodes
- if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
- ret += elem.nodeValue;
-
- // Traverse everything else, except comment nodes
- } else if ( elem.nodeType !== 8 ) {
- ret += Sizzle.getText( elem.childNodes );
- }
- }
-
- return ret;
-};
-
-// Check to see if the browser returns elements by name when
-// querying by getElementById (and provide a workaround)
-(function(){
- // We're going to inject a fake input element with a specified name
- var form = document.createElement("div"),
- id = "script" + (new Date()).getTime(),
- root = document.documentElement;
-
- form.innerHTML = "<a name='" + id + "'/>";
-
- // Inject it into the root element, check its status, and remove it quickly
- root.insertBefore( form, root.firstChild );
-
- // The workaround has to do additional checks after a getElementById
- // Which slows things down for other browsers (hence the branching)
- if ( document.getElementById( id ) ) {
- Expr.find.ID = function( match, context, isXML ) {
- if ( typeof context.getElementById !== "undefined" && !isXML ) {
- var m = context.getElementById(match[1]);
-
- return m ?
- m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
- [m] :
- undefined :
- [];
- }
- };
-
- Expr.filter.ID = function( elem, match ) {
- var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-
- return elem.nodeType === 1 && node && node.nodeValue === match;
- };
- }
-
- root.removeChild( form );
-
- // release memory in IE
- root = form = null;
-})();
-
-(function(){
- // Check to see if the browser returns only elements
- // when doing getElementsByTagName("*")
-
- // Create a fake element
- var div = document.createElement("div");
- div.appendChild( document.createComment("") );
-
- // Make sure no comments are found
- if ( div.getElementsByTagName("*").length > 0 ) {
- Expr.find.TAG = function( match, context ) {
- var results = context.getElementsByTagName( match[1] );
-
- // Filter out possible comments
- if ( match[1] === "*" ) {
- var tmp = [];
-
- for ( var i = 0; results[i]; i++ ) {
- if ( results[i].nodeType === 1 ) {
- tmp.push( results[i] );
- }
- }
-
- results = tmp;
- }
-
- return results;
- };
- }
-
- // Check to see if an attribute returns normalized href attributes
- div.innerHTML = "<a href='#'></a>";
-
- if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
- div.firstChild.getAttribute("href") !== "#" ) {
-
- Expr.attrHandle.href = function( elem ) {
- return elem.getAttribute( "href", 2 );
- };
- }
-
- // release memory in IE
- div = null;
-})();
-
-if ( document.querySelectorAll ) {
- (function(){
- var oldSizzle = Sizzle,
- div = document.createElement("div"),
- id = "__sizzle__";
-
- div.innerHTML = "<p class='TEST'></p>";
-
- // Safari can't handle uppercase or unicode characters when
- // in quirks mode.
- if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
- return;
- }
-
- Sizzle = function( query, context, extra, seed ) {
- context = context || document;
-
- // Only use querySelectorAll on non-XML documents
- // (ID selectors don't work in non-HTML documents)
- if ( !seed && !Sizzle.isXML(context) ) {
- // See if we find a selector to speed up
- var match = /^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec( query );
-
- if ( match && (context.nodeType === 1 || context.nodeType === 9) ) {
- // Speed-up: Sizzle("TAG")
- if ( match[1] ) {
- return makeArray( context.getElementsByTagName( query ), extra );
-
- // Speed-up: Sizzle(".CLASS")
- } else if ( match[2] && Expr.find.CLASS && context.getElementsByClassName ) {
- return makeArray( context.getElementsByClassName( match[2] ), extra );
- }
- }
-
- if ( context.nodeType === 9 ) {
- // Speed-up: Sizzle("body")
- // The body element only exists once, optimize finding it
- if ( query === "body" && context.body ) {
- return makeArray( [ context.body ], extra );
-
- // Speed-up: Sizzle("#ID")
- } else if ( match && match[3] ) {
- var elem = context.getElementById( match[3] );
-
- // Check parentNode to catch when Blackberry 4.6 returns
- // nodes that are no longer in the document #6963
- if ( elem && elem.parentNode ) {
- // Handle the case where IE and Opera return items
- // by name instead of ID
- if ( elem.id === match[3] ) {
- return makeArray( [ elem ], extra );
- }
-
- } else {
- return makeArray( [], extra );
- }
- }
-
- try {
- return makeArray( context.querySelectorAll(query), extra );
- } catch(qsaError) {}
-
- // qSA works strangely on Element-rooted queries
- // We can work around this by specifying an extra ID on the root
- // and working up from there (Thanks to Andrew Dupont for the technique)
- // IE 8 doesn't work on object elements
- } else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
- var oldContext = context,
- old = context.getAttribute( "id" ),
- nid = old || id,
- hasParent = context.parentNode,
- relativeHierarchySelector = /^\s*[+~]/.test( query );
-
- if ( !old ) {
- context.setAttribute( "id", nid );
- } else {
- nid = nid.replace( /'/g, "\\$&" );
- }
- if ( relativeHierarchySelector && hasParent ) {
- context = context.parentNode;
- }
-
- try {
- if ( !relativeHierarchySelector || hasParent ) {
- return makeArray( context.querySelectorAll( "[id='" + nid + "'] " + query ), extra );
- }
-
- } catch(pseudoError) {
- } finally {
- if ( !old ) {
- oldContext.removeAttribute( "id" );
- }
- }
- }
- }
-
- return oldSizzle(query, context, extra, seed);
- };
-
- for ( var prop in oldSizzle ) {
- Sizzle[ prop ] = oldSizzle[ prop ];
- }
-
- // release memory in IE
- div = null;
- })();
-}
-
-(function(){
- var html = document.documentElement,
- matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector;
-
- if ( matches ) {
- // Check to see if it's possible to do matchesSelector
- // on a disconnected node (IE 9 fails this)
- var disconnectedMatch = !matches.call( document.createElement( "div" ), "div" ),
- pseudoWorks = false;
-
- try {
- // This should fail with an exception
- // Gecko does not error, returns false instead
- matches.call( document.documentElement, "[test!='']:sizzle" );
-
- } catch( pseudoError ) {
- pseudoWorks = true;
- }
-
- Sizzle.matchesSelector = function( node, expr ) {
- // Make sure that attribute selectors are quoted
- expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
-
- if ( !Sizzle.isXML( node ) ) {
- try {
- if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
- var ret = matches.call( node, expr );
-
- // IE 9's matchesSelector returns false on disconnected nodes
- if ( ret || !disconnectedMatch ||
- // As well, disconnected nodes are said to be in a document
- // fragment in IE 9, so check for that
- node.document && node.document.nodeType !== 11 ) {
- return ret;
- }
- }
- } catch(e) {}
- }
-
- return Sizzle(expr, null, null, [node]).length > 0;
- };
- }
-})();
-
-(function(){
- var div = document.createElement("div");
-
- div.innerHTML = "<div class='test e'></div><div class='test'></div>";
-
- // Opera can't find a second classname (in 9.6)
- // Also, make sure that getElementsByClassName actually exists
- if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
- return;
- }
-
- // Safari caches class attributes, doesn't catch changes (in 3.2)
- div.lastChild.className = "e";
-
- if ( div.getElementsByClassName("e").length === 1 ) {
- return;
- }
-
- Expr.order.splice(1, 0, "CLASS");
- Expr.find.CLASS = function( match, context, isXML ) {
- if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
- return context.getElementsByClassName(match[1]);
- }
- };
-
- // release memory in IE
- div = null;
-})();
-
-function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
-
- if ( elem ) {
- var match = false;
-
- elem = elem[dir];
-
- while ( elem ) {
- if ( elem.sizcache === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 && !isXML ){
- elem.sizcache = doneName;
- elem.sizset = i;
- }
-
- if ( elem.nodeName.toLowerCase() === cur ) {
- match = elem;
- break;
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
- for ( var i = 0, l = checkSet.length; i < l; i++ ) {
- var elem = checkSet[i];
-
- if ( elem ) {
- var match = false;
-
- elem = elem[dir];
-
- while ( elem ) {
- if ( elem.sizcache === doneName ) {
- match = checkSet[elem.sizset];
- break;
- }
-
- if ( elem.nodeType === 1 ) {
- if ( !isXML ) {
- elem.sizcache = doneName;
- elem.sizset = i;
- }
-
- if ( typeof cur !== "string" ) {
- if ( elem === cur ) {
- match = true;
- break;
- }
-
- } else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
- match = elem;
- break;
- }
- }
-
- elem = elem[dir];
- }
-
- checkSet[i] = match;
- }
- }
-}
-
-if ( document.documentElement.contains ) {
- Sizzle.contains = function( a, b ) {
- return a !== b && (a.contains ? a.contains(b) : true);
- };
-
-} else if ( document.documentElement.compareDocumentPosition ) {
- Sizzle.contains = function( a, b ) {
- return !!(a.compareDocumentPosition(b) & 16);
- };
-
-} else {
- Sizzle.contains = function() {
- return false;
- };
-}
-
-Sizzle.isXML = function( elem ) {
- // documentElement is verified for cases where it doesn't yet exist
- // (such as loading iframes in IE - #4833)
- var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
-
- return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-var posProcess = function( selector, context ) {
- var match,
- tmpSet = [],
- later = "",
- root = context.nodeType ? [context] : context;
-
- // Position selectors must be done after the filter
- // And so must :not(positional) so we move all PSEUDOs to the end
- while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
- later += match[0];
- selector = selector.replace( Expr.match.PSEUDO, "" );
- }
-
- selector = Expr.relative[selector] ? selector + "*" : selector;
-
- for ( var i = 0, l = root.length; i < l; i++ ) {
- Sizzle( selector, root[i], tmpSet );
- }
-
- return Sizzle.filter( later, tmpSet );
-};
-
-// EXPOSE
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[":"] = jQuery.expr.filters;
-jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-})();
-
-
-var runtil = /Until$/,
- rparentsprev = /^(?:parents|prevUntil|prevAll)/,
- // Note: This RegExp should be improved, or likely pulled from Sizzle
- rmultiselector = /,/,
- isSimple = /^.[^:#\[\.,]*$/,
- slice = Array.prototype.slice,
- POS = jQuery.expr.match.POS,
- // methods guaranteed to produce a unique set when starting from a unique set
- guaranteedUnique = {
- children: true,
- contents: true,
- next: true,
- prev: true
- };
-
-jQuery.fn.extend({
- find: function( selector ) {
- var self = this,
- i, l;
-
- if ( typeof selector !== "string" ) {
- return jQuery( selector ).filter(function() {
- for ( i = 0, l = self.length; i < l; i++ ) {
- if ( jQuery.contains( self[ i ], this ) ) {
- return true;
- }
- }
- });
- }
-
- var ret = this.pushStack( "", "find", selector ),
- length, n, r;
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- length = ret.length;
- jQuery.find( selector, this[i], ret );
-
- if ( i > 0 ) {
- // Make sure that the results are unique
- for ( n = length; n < ret.length; n++ ) {
- for ( r = 0; r < length; r++ ) {
- if ( ret[r] === ret[n] ) {
- ret.splice(n--, 1);
- break;
- }
- }
- }
- }
- }
-
- return ret;
- },
-
- has: function( target ) {
- var targets = jQuery( target );
- return this.filter(function() {
- for ( var i = 0, l = targets.length; i < l; i++ ) {
- if ( jQuery.contains( this, targets[i] ) ) {
- return true;
- }
- }
- });
- },
-
- not: function( selector ) {
- return this.pushStack( winnow(this, selector, false), "not", selector);
- },
-
- filter: function( selector ) {
- return this.pushStack( winnow(this, selector, true), "filter", selector );
- },
-
- is: function( selector ) {
- return !!selector && ( typeof selector === "string" ?
- jQuery.filter( selector, this ).length > 0 :
- this.filter( selector ).length > 0 );
- },
-
- closest: function( selectors, context ) {
- var ret = [], i, l, cur = this[0];
-
- // Array
- if ( jQuery.isArray( selectors ) ) {
- var match, selector,
- matches = {},
- level = 1;
-
- if ( cur && selectors.length ) {
- for ( i = 0, l = selectors.length; i < l; i++ ) {
- selector = selectors[i];
-
- if ( !matches[ selector ] ) {
- matches[ selector ] = POS.test( selector ) ?
- jQuery( selector, context || this.context ) :
- selector;
- }
- }
-
- while ( cur && cur.ownerDocument && cur !== context ) {
- for ( selector in matches ) {
- match = matches[ selector ];
-
- if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) {
- ret.push({ selector: selector, elem: cur, level: level });
- }
- }
-
- cur = cur.parentNode;
- level++;
- }
- }
-
- return ret;
- }
-
- // String
- var pos = POS.test( selectors ) || typeof selectors !== "string" ?
- jQuery( selectors, context || this.context ) :
- 0;
-
- for ( i = 0, l = this.length; i < l; i++ ) {
- cur = this[i];
-
- while ( cur ) {
- if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
- ret.push( cur );
- break;
-
- } else {
- cur = cur.parentNode;
- if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) {
- break;
- }
- }
- }
- }
-
- ret = ret.length > 1 ? jQuery.unique( ret ) : ret;
-
- return this.pushStack( ret, "closest", selectors );
- },
-
- // Determine the position of an element within
- // the matched set of elements
- index: function( elem ) {
-
- // No argument, return index in parent
- if ( !elem ) {
- return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
- }
-
- // index in selector
- if ( typeof elem === "string" ) {
- return jQuery.inArray( this[0], jQuery( elem ) );
- }
-
- // Locate the position of the desired element
- return jQuery.inArray(
- // If it receives a jQuery object, the first element is used
- elem.jquery ? elem[0] : elem, this );
- },
-
- add: function( selector, context ) {
- var set = typeof selector === "string" ?
- jQuery( selector, context ) :
- jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),
- all = jQuery.merge( this.get(), set );
-
- return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
- all :
- jQuery.unique( all ) );
- },
-
- andSelf: function() {
- return this.add( this.prevObject );
- }
-});
-
-// A painfully simple check to see if an element is disconnected
-// from a document (should be improved, where feasible).
-function isDisconnected( node ) {
- return !node || !node.parentNode || node.parentNode.nodeType === 11;
-}
-
-jQuery.each({
- parent: function( elem ) {
- var parent = elem.parentNode;
- return parent && parent.nodeType !== 11 ? parent : null;
- },
- parents: function( elem ) {
- return jQuery.dir( elem, "parentNode" );
- },
- parentsUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "parentNode", until );
- },
- next: function( elem ) {
- return jQuery.nth( elem, 2, "nextSibling" );
- },
- prev: function( elem ) {
- return jQuery.nth( elem, 2, "previousSibling" );
- },
- nextAll: function( elem ) {
- return jQuery.dir( elem, "nextSibling" );
- },
- prevAll: function( elem ) {
- return jQuery.dir( elem, "previousSibling" );
- },
- nextUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "nextSibling", until );
- },
- prevUntil: function( elem, i, until ) {
- return jQuery.dir( elem, "previousSibling", until );
- },
- siblings: function( elem ) {
- return jQuery.sibling( elem.parentNode.firstChild, elem );
- },
- children: function( elem ) {
- return jQuery.sibling( elem.firstChild );
- },
- contents: function( elem ) {
- return jQuery.nodeName( elem, "iframe" ) ?
- elem.contentDocument || elem.contentWindow.document :
- jQuery.makeArray( elem.childNodes );
- }
-}, function( name, fn ) {
- jQuery.fn[ name ] = function( until, selector ) {
- var ret = jQuery.map( this, fn, until ),
- // The variable 'args' was introduced in
- // https://github.com/jquery/jquery/commit/52a0238
- // to work around a bug in Chrome 10 (Dev) and should be removed when the bug is fixed.
- // http://code.google.com/p/v8/issues/detail?id=1050
- args = slice.call(arguments);
-
- if ( !runtil.test( name ) ) {
- selector = until;
- }
-
- if ( selector && typeof selector === "string" ) {
- ret = jQuery.filter( selector, ret );
- }
-
- ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;
-
- if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
- ret = ret.reverse();
- }
-
- return this.pushStack( ret, name, args.join(",") );
- };
-});
-
-jQuery.extend({
- filter: function( expr, elems, not ) {
- if ( not ) {
- expr = ":not(" + expr + ")";
- }
-
- return elems.length === 1 ?
- jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
- jQuery.find.matches(expr, elems);
- },
-
- dir: function( elem, dir, until ) {
- var matched = [],
- cur = elem[ dir ];
-
- while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
- if ( cur.nodeType === 1 ) {
- matched.push( cur );
- }
- cur = cur[dir];
- }
- return matched;
- },
-
- nth: function( cur, result, dir, elem ) {
- result = result || 1;
- var num = 0;
-
- for ( ; cur; cur = cur[dir] ) {
- if ( cur.nodeType === 1 && ++num === result ) {
- break;
- }
- }
-
- return cur;
- },
-
- sibling: function( n, elem ) {
- var r = [];
-
- for ( ; n; n = n.nextSibling ) {
- if ( n.nodeType === 1 && n !== elem ) {
- r.push( n );
- }
- }
-
- return r;
- }
-});
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, keep ) {
-
- // Can't pass null or undefined to indexOf in Firefox 4
- // Set to 0 to skip string check
- qualifier = qualifier || 0;
-
- if ( jQuery.isFunction( qualifier ) ) {
- return jQuery.grep(elements, function( elem, i ) {
- var retVal = !!qualifier.call( elem, i, elem );
- return retVal === keep;
- });
-
- } else if ( qualifier.nodeType ) {
- return jQuery.grep(elements, function( elem, i ) {
- return (elem === qualifier) === keep;
- });
-
- } else if ( typeof qualifier === "string" ) {
- var filtered = jQuery.grep(elements, function( elem ) {
- return elem.nodeType === 1;
- });
-
- if ( isSimple.test( qualifier ) ) {
- return jQuery.filter(qualifier, filtered, !keep);
- } else {
- qualifier = jQuery.filter( qualifier, filtered );
- }
- }
-
- return jQuery.grep(elements, function( elem, i ) {
- return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
- });
-}
-
-
-
-
-var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
- rleadingWhitespace = /^\s+/,
- rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
- rtagName = /<([\w:]+)/,
- rtbody = /<tbody/i,
- rhtml = /<|&#?\w+;/,
- rnocache = /<(?:script|object|embed|option|style)/i,
- // checked="checked" or checked
- rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
- rscriptType = /\/(java|ecma)script/i,
- rcleanScript = /^\s*<!(?:\[CDATA\[|\-\-)/,
- wrapMap = {
- option: [ 1, "<select multiple='multiple'>", "</select>" ],
- legend: [ 1, "<fieldset>", "</fieldset>" ],
- thead: [ 1, "<table>", "</table>" ],
- tr: [ 2, "<table><tbody>", "</tbody></table>" ],
- td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
- col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
- area: [ 1, "<map>", "</map>" ],
- _default: [ 0, "", "" ]
- };
-
-wrapMap.optgroup = wrapMap.option;
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-// IE can't serialize <link> and <script> tags normally
-if ( !jQuery.support.htmlSerialize ) {
- wrapMap._default = [ 1, "div<div>", "</div>" ];
-}
-
-jQuery.fn.extend({
- text: function( text ) {
- if ( jQuery.isFunction(text) ) {
- return this.each(function(i) {
- var self = jQuery( this );
-
- self.text( text.call(this, i, self.text()) );
- });
- }
-
- if ( typeof text !== "object" && text !== undefined ) {
- return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
- }
-
- return jQuery.text( this );
- },
-
- wrapAll: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapAll( html.call(this, i) );
- });
- }
-
- if ( this[0] ) {
- // The elements to wrap the target around
- var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
-
- if ( this[0].parentNode ) {
- wrap.insertBefore( this[0] );
- }
-
- wrap.map(function() {
- var elem = this;
-
- while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
- elem = elem.firstChild;
- }
-
- return elem;
- }).append( this );
- }
-
- return this;
- },
-
- wrapInner: function( html ) {
- if ( jQuery.isFunction( html ) ) {
- return this.each(function(i) {
- jQuery(this).wrapInner( html.call(this, i) );
- });
- }
-
- return this.each(function() {
- var self = jQuery( this ),
- contents = self.contents();
-
- if ( contents.length ) {
- contents.wrapAll( html );
-
- } else {
- self.append( html );
- }
- });
- },
-
- wrap: function( html ) {
- return this.each(function() {
- jQuery( this ).wrapAll( html );
- });
- },
-
- unwrap: function() {
- return this.parent().each(function() {
- if ( !jQuery.nodeName( this, "body" ) ) {
- jQuery( this ).replaceWith( this.childNodes );
- }
- }).end();
- },
-
- append: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 ) {
- this.appendChild( elem );
- }
- });
- },
-
- prepend: function() {
- return this.domManip(arguments, true, function( elem ) {
- if ( this.nodeType === 1 ) {
- this.insertBefore( elem, this.firstChild );
- }
- });
- },
-
- before: function() {
- if ( this[0] && this[0].parentNode ) {
- return this.domManip(arguments, false, function( elem ) {
- this.parentNode.insertBefore( elem, this );
- });
- } else if ( arguments.length ) {
- var set = jQuery(arguments[0]);
- set.push.apply( set, this.toArray() );
- return this.pushStack( set, "before", arguments );
- }
- },
-
- after: function() {
- if ( this[0] && this[0].parentNode ) {
- return this.domManip(arguments, false, function( elem ) {
- this.parentNode.insertBefore( elem, this.nextSibling );
- });
- } else if ( arguments.length ) {
- var set = this.pushStack( this, "after", arguments );
- set.push.apply( set, jQuery(arguments[0]).toArray() );
- return set;
- }
- },
-
- // keepData is for internal use only--do not document
- remove: function( selector, keepData ) {
- for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
- if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
- if ( !keepData && elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName("*") );
- jQuery.cleanData( [ elem ] );
- }
-
- if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
- }
- }
- }
-
- return this;
- },
-
- empty: function() {
- for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( elem.nodeType === 1 ) {
- jQuery.cleanData( elem.getElementsByTagName("*") );
- }
-
- // Remove any remaining nodes
- while ( elem.firstChild ) {
- elem.removeChild( elem.firstChild );
- }
- }
-
- return this;
- },
-
- clone: function( dataAndEvents, deepDataAndEvents ) {
- dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
- deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
- return this.map( function () {
- return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
- });
- },
-
- html: function( value ) {
- if ( value === undefined ) {
- return this[0] && this[0].nodeType === 1 ?
- this[0].innerHTML.replace(rinlinejQuery, "") :
- null;
-
- // See if we can take a shortcut and just use innerHTML
- } else if ( typeof value === "string" && !rnocache.test( value ) &&
- (jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
- !wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
-
- value = value.replace(rxhtmlTag, "<$1></$2>");
-
- try {
- for ( var i = 0, l = this.length; i < l; i++ ) {
- // Remove element nodes and prevent memory leaks
- if ( this[i].nodeType === 1 ) {
- jQuery.cleanData( this[i].getElementsByTagName("*") );
- this[i].innerHTML = value;
- }
- }
-
- // If using innerHTML throws an exception, use the fallback method
- } catch(e) {
- this.empty().append( value );
- }
-
- } else if ( jQuery.isFunction( value ) ) {
- this.each(function(i){
- var self = jQuery( this );
-
- self.html( value.call(this, i, self.html()) );
- });
-
- } else {
- this.empty().append( value );
- }
-
- return this;
- },
-
- replaceWith: function( value ) {
- if ( this[0] && this[0].parentNode ) {
- // Make sure that the elements are removed from the DOM before they are inserted
- // this can help fix replacing a parent with child elements
- if ( jQuery.isFunction( value ) ) {
- return this.each(function(i) {
- var self = jQuery(this), old = self.html();
- self.replaceWith( value.call( this, i, old ) );
- });
- }
-
- if ( typeof value !== "string" ) {
- value = jQuery( value ).detach();
- }
-
- return this.each(function() {
- var next = this.nextSibling,
- parent = this.parentNode;
-
- jQuery( this ).remove();
-
- if ( next ) {
- jQuery(next).before( value );
- } else {
- jQuery(parent).append( value );
- }
- });
- } else {
- return this.length ?
- this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value ) :
- this;
- }
- },
-
- detach: function( selector ) {
- return this.remove( selector, true );
- },
-
- domManip: function( args, table, callback ) {
- var results, first, fragment, parent,
- value = args[0],
- scripts = [];
-
- // We can't cloneNode fragments that contain checked, in WebKit
- if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
- return this.each(function() {
- jQuery(this).domManip( args, table, callback, true );
- });
- }
-
- if ( jQuery.isFunction(value) ) {
- return this.each(function(i) {
- var self = jQuery(this);
- args[0] = value.call(this, i, table ? self.html() : undefined);
- self.domManip( args, table, callback );
- });
- }
-
- if ( this[0] ) {
- parent = value && value.parentNode;
-
- // If we're in a fragment, just use that instead of building a new one
- if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
- results = { fragment: parent };
-
- } else {
- results = jQuery.buildFragment( args, this, scripts );
- }
-
- fragment = results.fragment;
-
- if ( fragment.childNodes.length === 1 ) {
- first = fragment = fragment.firstChild;
- } else {
- first = fragment.firstChild;
- }
-
- if ( first ) {
- table = table && jQuery.nodeName( first, "tr" );
-
- for ( var i = 0, l = this.length, lastIndex = l - 1; i < l; i++ ) {
- callback.call(
- table ?
- root(this[i], first) :
- this[i],
- // Make sure that we do not leak memory by inadvertently discarding
- // the original fragment (which might have attached data) instead of
- // using it; in addition, use the original fragment object for the last
- // item instead of first because it can end up being emptied incorrectly
- // in certain situations (Bug #8070).
- // Fragments from the fragment cache must always be cloned and never used
- // in place.
- results.cacheable || (l > 1 && i < lastIndex) ?
- jQuery.clone( fragment, true, true ) :
- fragment
- );
- }
- }
-
- if ( scripts.length ) {
- jQuery.each( scripts, evalScript );
- }
- }
-
- return this;
- }
-});
-
-function root( elem, cur ) {
- return jQuery.nodeName(elem, "table") ?
- (elem.getElementsByTagName("tbody")[0] ||
- elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
- elem;
-}
-
-function cloneCopyEvent( src, dest ) {
-
- if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
- return;
- }
-
- var internalKey = jQuery.expando,
- oldData = jQuery.data( src ),
- curData = jQuery.data( dest, oldData );
-
- // Switch to use the internal data object, if it exists, for the next
- // stage of data copying
- if ( (oldData = oldData[ internalKey ]) ) {
- var events = oldData.events;
- curData = curData[ internalKey ] = jQuery.extend({}, oldData);
-
- if ( events ) {
- delete curData.handle;
- curData.events = {};
-
- for ( var type in events ) {
- for ( var i = 0, l = events[ type ].length; i < l; i++ ) {
- jQuery.event.add( dest, type + ( events[ type ][ i ].namespace ? "." : "" ) + events[ type ][ i ].namespace, events[ type ][ i ], events[ type ][ i ].data );
- }
- }
- }
- }
-}
-
-function cloneFixAttributes( src, dest ) {
- var nodeName;
-
- // We do not need to do anything for non-Elements
- if ( dest.nodeType !== 1 ) {
- return;
- }
-
- // clearAttributes removes the attributes, which we don't want,
- // but also removes the attachEvent events, which we *do* want
- if ( dest.clearAttributes ) {
- dest.clearAttributes();
- }
-
- // mergeAttributes, in contrast, only merges back on the
- // original attributes, not the events
- if ( dest.mergeAttributes ) {
- dest.mergeAttributes( src );
- }
-
- nodeName = dest.nodeName.toLowerCase();
-
- // IE6-8 fail to clone children inside object elements that use
- // the proprietary classid attribute value (rather than the type
- // attribute) to identify the type of content to display
- if ( nodeName === "object" ) {
- dest.outerHTML = src.outerHTML;
-
- } else if ( nodeName === "input" && (src.type === "checkbox" || src.type === "radio") ) {
- // IE6-8 fails to persist the checked state of a cloned checkbox
- // or radio button. Worse, IE6-7 fail to give the cloned element
- // a checked appearance if the defaultChecked value isn't also set
- if ( src.checked ) {
- dest.defaultChecked = dest.checked = src.checked;
- }
-
- // IE6-7 get confused and end up setting the value of a cloned
- // checkbox/radio button to an empty string instead of "on"
- if ( dest.value !== src.value ) {
- dest.value = src.value;
- }
-
- // IE6-8 fails to return the selected option to the default selected
- // state when cloning options
- } else if ( nodeName === "option" ) {
- dest.selected = src.defaultSelected;
-
- // IE6-8 fails to set the defaultValue to the correct value when
- // cloning other types of input fields
- } else if ( nodeName === "input" || nodeName === "textarea" ) {
- dest.defaultValue = src.defaultValue;
- }
-
- // Event data gets referenced instead of copied if the expando
- // gets copied too
- dest.removeAttribute( jQuery.expando );
-}
-
-jQuery.buildFragment = function( args, nodes, scripts ) {
- var fragment, cacheable, cacheresults, doc;
-
- // nodes may contain either an explicit document object,
- // a jQuery collection or context object.
- // If nodes[0] contains a valid object to assign to doc
- if ( nodes && nodes[0] ) {
- doc = nodes[0].ownerDocument || nodes[0];
- }
-
- // Ensure that an attr object doesn't incorrectly stand in as a document object
- // Chrome and Firefox seem to allow this to occur and will throw exception
- // Fixes #8950
- if ( !doc.createDocumentFragment ) {
- doc = document;
- }
-
- // Only cache "small" (1/2 KB) HTML strings that are associated with the main document
- // Cloning options loses the selected state, so don't cache them
- // IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
- // Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
- if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
- args[0].charAt(0) === "<" && !rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
-
- cacheable = true;
-
- cacheresults = jQuery.fragments[ args[0] ];
- if ( cacheresults && cacheresults !== 1 ) {
- fragment = cacheresults;
- }
- }
-
- if ( !fragment ) {
- fragment = doc.createDocumentFragment();
- jQuery.clean( args, doc, fragment, scripts );
- }
-
- if ( cacheable ) {
- jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
- }
-
- return { fragment: fragment, cacheable: cacheable };
-};
-
-jQuery.fragments = {};
-
-jQuery.each({
- appendTo: "append",
- prependTo: "prepend",
- insertBefore: "before",
- insertAfter: "after",
- replaceAll: "replaceWith"
-}, function( name, original ) {
- jQuery.fn[ name ] = function( selector ) {
- var ret = [],
- insert = jQuery( selector ),
- parent = this.length === 1 && this[0].parentNode;
-
- if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
- insert[ original ]( this[0] );
- return this;
-
- } else {
- for ( var i = 0, l = insert.length; i < l; i++ ) {
- var elems = (i > 0 ? this.clone(true) : this).get();
- jQuery( insert[i] )[ original ]( elems );
- ret = ret.concat( elems );
- }
-
- return this.pushStack( ret, name, insert.selector );
- }
- };
-});
-
-function getAll( elem ) {
- if ( "getElementsByTagName" in elem ) {
- return elem.getElementsByTagName( "*" );
-
- } else if ( "querySelectorAll" in elem ) {
- return elem.querySelectorAll( "*" );
-
- } else {
- return [];
- }
-}
-
-// Used in clean, fixes the defaultChecked property
-function fixDefaultChecked( elem ) {
- if ( elem.type === "checkbox" || elem.type === "radio" ) {
- elem.defaultChecked = elem.checked;
- }
-}
-// Finds all inputs and passes them to fixDefaultChecked
-function findInputs( elem ) {
- if ( jQuery.nodeName( elem, "input" ) ) {
- fixDefaultChecked( elem );
- } else if ( "getElementsByTagName" in elem ) {
- jQuery.grep( elem.getElementsByTagName("input"), fixDefaultChecked );
- }
-}
-
-jQuery.extend({
- clone: function( elem, dataAndEvents, deepDataAndEvents ) {
- var clone = elem.cloneNode(true),
- srcElements,
- destElements,
- i;
-
- if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&
- (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) {
- // IE copies events bound via attachEvent when using cloneNode.
- // Calling detachEvent on the clone will also remove the events
- // from the original. In order to get around this, we use some
- // proprietary methods to clear the events. Thanks to MooTools
- // guys for this hotness.
-
- cloneFixAttributes( elem, clone );
-
- // Using Sizzle here is crazy slow, so we use getElementsByTagName
- // instead
- srcElements = getAll( elem );
- destElements = getAll( clone );
-
- // Weird iteration because IE will replace the length property
- // with an element if you are cloning the body and one of the
- // elements on the page has a name or id of "length"
- for ( i = 0; srcElements[i]; ++i ) {
- // Ensure that the destination node is not null; Fixes #9587
- if ( destElements[i] ) {
- cloneFixAttributes( srcElements[i], destElements[i] );
- }
- }
- }
-
- // Copy the events from the original to the clone
- if ( dataAndEvents ) {
- cloneCopyEvent( elem, clone );
-
- if ( deepDataAndEvents ) {
- srcElements = getAll( elem );
- destElements = getAll( clone );
-
- for ( i = 0; srcElements[i]; ++i ) {
- cloneCopyEvent( srcElements[i], destElements[i] );
- }
- }
- }
-
- srcElements = destElements = null;
-
- // Return the cloned set
- return clone;
- },
-
- clean: function( elems, context, fragment, scripts ) {
- var checkScriptType;
-
- context = context || document;
-
- // !context.createElement fails in IE with an error but returns typeof 'object'
- if ( typeof context.createElement === "undefined" ) {
- context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
- }
-
- var ret = [], j;
-
- for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
- if ( typeof elem === "number" ) {
- elem += "";
- }
-
- if ( !elem ) {
- continue;
- }
-
- // Convert html string into DOM nodes
- if ( typeof elem === "string" ) {
- if ( !rhtml.test( elem ) ) {
- elem = context.createTextNode( elem );
- } else {
- // Fix "XHTML"-style tags in all browsers
- elem = elem.replace(rxhtmlTag, "<$1></$2>");
-
- // Trim whitespace, otherwise indexOf won't work as expected
- var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
- wrap = wrapMap[ tag ] || wrapMap._default,
- depth = wrap[0],
- div = context.createElement("div");
-
- // Go to html and back, then peel off extra wrappers
- div.innerHTML = wrap[1] + elem + wrap[2];
-
- // Move to the right depth
- while ( depth-- ) {
- div = div.lastChild;
- }
-
- // Remove IE's autoinserted <tbody> from table fragments
- if ( !jQuery.support.tbody ) {
-
- // String was a <table>, *may* have spurious <tbody>
- var hasBody = rtbody.test(elem),
- tbody = tag === "table" && !hasBody ?
- div.firstChild && div.firstChild.childNodes :
-
- // String was a bare <thead> or <tfoot>
- wrap[1] === "<table>" && !hasBody ?
- div.childNodes :
- [];
-
- for ( j = tbody.length - 1; j >= 0 ; --j ) {
- if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
- tbody[ j ].parentNode.removeChild( tbody[ j ] );
- }
- }
- }
-
- // IE completely kills leading whitespace when innerHTML is used
- if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
- div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
- }
-
- elem = div.childNodes;
- }
- }
-
- // Resets defaultChecked for any radios and checkboxes
- // about to be appended to the DOM in IE 6/7 (#8060)
- var len;
- if ( !jQuery.support.appendChecked ) {
- if ( elem[0] && typeof (len = elem.length) === "number" ) {
- for ( j = 0; j < len; j++ ) {
- findInputs( elem[j] );
- }
- } else {
- findInputs( elem );
- }
- }
-
- if ( elem.nodeType ) {
- ret.push( elem );
- } else {
- ret = jQuery.merge( ret, elem );
- }
- }
-
- if ( fragment ) {
- checkScriptType = function( elem ) {
- return !elem.type || rscriptType.test( elem.type );
- };
- for ( i = 0; ret[i]; i++ ) {
- if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
- scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
-
- } else {
- if ( ret[i].nodeType === 1 ) {
- var jsTags = jQuery.grep( ret[i].getElementsByTagName( "script" ), checkScriptType );
-
- ret.splice.apply( ret, [i + 1, 0].concat( jsTags ) );
- }
- fragment.appendChild( ret[i] );
- }
- }
- }
-
- return ret;
- },
-
- cleanData: function( elems ) {
- var data, id, cache = jQuery.cache, internalKey = jQuery.expando, special = jQuery.event.special,
- deleteExpando = jQuery.support.deleteExpando;
-
- for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
- if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
- continue;
- }
-
- id = elem[ jQuery.expando ];
-
- if ( id ) {
- data = cache[ id ] && cache[ id ][ internalKey ];
-
- if ( data && data.events ) {
- for ( var type in data.events ) {
- if ( special[ type ] ) {
- jQuery.event.remove( elem, type );
-
- // This is a shortcut to avoid jQuery.event.remove's overhead
- } else {
- jQuery.removeEvent( elem, type, data.handle );
- }
- }
-
- // Null the DOM reference to avoid IE6/7/8 leak (#7054)
- if ( data.handle ) {
- data.handle.elem = null;
- }
- }
-
- if ( deleteExpando ) {
- delete elem[ jQuery.expando ];
-
- } else if ( elem.removeAttribute ) {
- elem.removeAttribute( jQuery.expando );
- }
-
- delete cache[ id ];
- }
- }
- }
-});
-
-function evalScript( i, elem ) {
- if ( elem.src ) {
- jQuery.ajax({
- url: elem.src,
- async: false,
- dataType: "script"
- });
- } else {
- jQuery.globalEval( ( elem.text || elem.textContent || elem.innerHTML || "" ).replace( rcleanScript, "/*$0*/" ) );
- }
-
- if ( elem.parentNode ) {
- elem.parentNode.removeChild( elem );
- }
-}
-
-
-
-
-var ralpha = /alpha\([^)]*\)/i,
- ropacity = /opacity=([^)]*)/,
- // fixed for IE9, see #8346
- rupper = /([A-Z]|^ms)/g,
- rnumpx = /^-?\d+(?:px)?$/i,
- rnum = /^-?\d/,
- rrelNum = /^([\-+])=([\-+.\de]+)/,
-
- cssShow = { position: "absolute", visibility: "hidden", display: "block" },
- cssWidth = [ "Left", "Right" ],
- cssHeight = [ "Top", "Bottom" ],
- curCSS,
-
- getComputedStyle,
- currentStyle;
-
-jQuery.fn.css = function( name, value ) {
- // Setting 'undefined' is a no-op
- if ( arguments.length === 2 && value === undefined ) {
- return this;
- }
-
- return jQuery.access( this, name, value, true, function( elem, name, value ) {
- return value !== undefined ?
- jQuery.style( elem, name, value ) :
- jQuery.css( elem, name );
- });
-};
-
-jQuery.extend({
- // Add in style property hooks for overriding the default
- // behavior of getting and setting a style property
- cssHooks: {
- opacity: {
- get: function( elem, computed ) {
- if ( computed ) {
- // We should always get a number back from opacity
- var ret = curCSS( elem, "opacity", "opacity" );
- return ret === "" ? "1" : ret;
-
- } else {
- return elem.style.opacity;
- }
- }
- }
- },
-
- // Exclude the following css properties to add px
- cssNumber: {
- "fillOpacity": true,
- "fontWeight": true,
- "lineHeight": true,
- "opacity": true,
- "orphans": true,
- "widows": true,
- "zIndex": true,
- "zoom": true
- },
-
- // Add in properties whose names you wish to fix before
- // setting or getting the value
- cssProps: {
- // normalize float css property
- "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
- },
-
- // Get and set the style property on a DOM Node
- style: function( elem, name, value, extra ) {
- // Don't set styles on text and comment nodes
- if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
- return;
- }
-
- // Make sure that we're working with the right name
- var ret, type, origName = jQuery.camelCase( name ),
- style = elem.style, hooks = jQuery.cssHooks[ origName ];
-
- name = jQuery.cssProps[ origName ] || origName;
-
- // Check if we're setting a value
- if ( value !== undefined ) {
- type = typeof value;
-
- // convert relative number strings (+= or -=) to relative numbers. #7345
- if ( type === "string" && (ret = rrelNum.exec( value )) ) {
- value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
- // Fixes bug #9237
- type = "number";
- }
-
- // Make sure that NaN and null values aren't set. See: #7116
- if ( value == null || type === "number" && isNaN( value ) ) {
- return;
- }
-
- // If a number was passed in, add 'px' to the (except for certain CSS properties)
- if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
- value += "px";
- }
-
- // If a hook was provided, use that value, otherwise just set the specified value
- if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
- // Wrapped to prevent IE from throwing errors when 'invalid' values are provided
- // Fixes bug #5509
- try {
- style[ name ] = value;
- } catch(e) {}
- }
-
- } else {
- // If a hook was provided get the non-computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
- return ret;
- }
-
- // Otherwise just get the value from the style object
- return style[ name ];
- }
- },
-
- css: function( elem, name, extra ) {
- var ret, hooks;
-
- // Make sure that we're working with the right name
- name = jQuery.camelCase( name );
- hooks = jQuery.cssHooks[ name ];
- name = jQuery.cssProps[ name ] || name;
-
- // cssFloat needs a special treatment
- if ( name === "cssFloat" ) {
- name = "float";
- }
-
- // If a hook was provided get the computed value from there
- if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
- return ret;
-
- // Otherwise, if a way to get the computed value exists, use that
- } else if ( curCSS ) {
- return curCSS( elem, name );
- }
- },
-
- // A method for quickly swapping in/out CSS properties to get correct calculations
- swap: function( elem, options, callback ) {
- var old = {};
-
- // Remember the old values, and insert the new ones
- for ( var name in options ) {
- old[ name ] = elem.style[ name ];
- elem.style[ name ] = options[ name ];
- }
-
- callback.call( elem );
-
- // Revert the old values
- for ( name in options ) {
- elem.style[ name ] = old[ name ];
- }
- }
-});
-
-// DEPRECATED, Use jQuery.css() instead
-jQuery.curCSS = jQuery.css;
-
-jQuery.each(["height", "width"], function( i, name ) {
- jQuery.cssHooks[ name ] = {
- get: function( elem, computed, extra ) {
- var val;
-
- if ( computed ) {
- if ( elem.offsetWidth !== 0 ) {
- return getWH( elem, name, extra );
- } else {
- jQuery.swap( elem, cssShow, function() {
- val = getWH( elem, name, extra );
- });
- }
-
- return val;
- }
- },
-
- set: function( elem, value ) {
- if ( rnumpx.test( value ) ) {
- // ignore negative width and height values #1599
- value = parseFloat( value );
-
- if ( value >= 0 ) {
- return value + "px";
- }
-
- } else {
- return value;
- }
- }
- };
-});
-
-if ( !jQuery.support.opacity ) {
- jQuery.cssHooks.opacity = {
- get: function( elem, computed ) {
- // IE uses filters for opacity
- return ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "" ) ?
- ( parseFloat( RegExp.$1 ) / 100 ) + "" :
- computed ? "1" : "";
- },
-
- set: function( elem, value ) {
- var style = elem.style,
- currentStyle = elem.currentStyle,
- opacity = jQuery.isNaN( value ) ? "" : "alpha(opacity=" + value * 100 + ")",
- filter = currentStyle && currentStyle.filter || style.filter || "";
-
- // IE has trouble with opacity if it does not have layout
- // Force it by setting the zoom level
- style.zoom = 1;
-
- // if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
- if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
-
- // Setting style.filter to null, "" & " " still leave "filter:" in the cssText
- // if "filter:" is present at all, clearType is disabled, we want to avoid this
- // style.removeAttribute is IE Only, but so apparently is this code path...
- style.removeAttribute( "filter" );
-
- // if there there is no filter style applied in a css rule, we are done
- if ( currentStyle && !currentStyle.filter ) {
- return;
- }
- }
-
- // otherwise, set new filter values
- style.filter = ralpha.test( filter ) ?
- filter.replace( ralpha, opacity ) :
- filter + " " + opacity;
- }
- };
-}
-
-jQuery(function() {
- // This hook cannot be added until DOM ready because the support test
- // for it is not run until after DOM ready
- if ( !jQuery.support.reliableMarginRight ) {
- jQuery.cssHooks.marginRight = {
- get: function( elem, computed ) {
- // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
- // Work around by temporarily setting element display to inline-block
- var ret;
- jQuery.swap( elem, { "display": "inline-block" }, function() {
- if ( computed ) {
- ret = curCSS( elem, "margin-right", "marginRight" );
- } else {
- ret = elem.style.marginRight;
- }
- });
- return ret;
- }
- };
- }
-});
-
-if ( document.defaultView && document.defaultView.getComputedStyle ) {
- getComputedStyle = function( elem, name ) {
- var ret, defaultView, computedStyle;
-
- name = name.replace( rupper, "-$1" ).toLowerCase();
-
- if ( !(defaultView = elem.ownerDocument.defaultView) ) {
- return undefined;
- }
-
- if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
- ret = computedStyle.getPropertyValue( name );
- if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
- ret = jQuery.style( elem, name );
- }
- }
-
- return ret;
- };
-}
-
-if ( document.documentElement.currentStyle ) {
- currentStyle = function( elem, name ) {
- var left,
- ret = elem.currentStyle && elem.currentStyle[ name ],
- rsLeft = elem.runtimeStyle && elem.runtimeStyle[ name ],
- style = elem.style;
-
- // From the awesome hack by Dean Edwards
- // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
- // If we're not dealing with a regular pixel number
- // but a number that has a weird ending, we need to convert it to pixels
- if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
- // Remember the original values
- left = style.left;
-
- // Put in the new values to get a computed value out
- if ( rsLeft ) {
- elem.runtimeStyle.left = elem.currentStyle.left;
- }
- style.left = name === "fontSize" ? "1em" : (ret || 0);
- ret = style.pixelLeft + "px";
-
- // Revert the changed values
- style.left = left;
- if ( rsLeft ) {
- elem.runtimeStyle.left = rsLeft;
- }
- }
-
- return ret === "" ? "auto" : ret;
- };
-}
-
-curCSS = getComputedStyle || currentStyle;
-
-function getWH( elem, name, extra ) {
-
- // Start with offset property
- var val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
- which = name === "width" ? cssWidth : cssHeight;
-
- if ( val > 0 ) {
- if ( extra !== "border" ) {
- jQuery.each( which, function() {
- if ( !extra ) {
- val -= parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
- }
- if ( extra === "margin" ) {
- val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
- } else {
- val -= parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
- }
- });
- }
-
- return val + "px";
- }
-
- // Fall back to computed then uncomputed css if necessary
- val = curCSS( elem, name, name );
- if ( val < 0 || val == null ) {
- val = elem.style[ name ] || 0;
- }
- // Normalize "", auto, and prepare for extra
- val = parseFloat( val ) || 0;
-
- // Add padding, border, margin
- if ( extra ) {
- jQuery.each( which, function() {
- val += parseFloat( jQuery.css( elem, "padding" + this ) ) || 0;
- if ( extra !== "padding" ) {
- val += parseFloat( jQuery.css( elem, "border" + this + "Width" ) ) || 0;
- }
- if ( extra === "margin" ) {
- val += parseFloat( jQuery.css( elem, extra + this ) ) || 0;
- }
- });
- }
-
- return val + "px";
-}
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.hidden = function( elem ) {
- var width = elem.offsetWidth,
- height = elem.offsetHeight;
-
- return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
- };
-
- jQuery.expr.filters.visible = function( elem ) {
- return !jQuery.expr.filters.hidden( elem );
- };
-}
-
-
-
-
-var r20 = /%20/g,
- rbracket = /\[\]$/,
- rCRLF = /\r?\n/g,
- rhash = /#.*$/,
- rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
- rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
- // #7653, #8125, #8152: local protocol detection
- rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
- rnoContent = /^(?:GET|HEAD)$/,
- rprotocol = /^\/\//,
- rquery = /\?/,
- rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
- rselectTextarea = /^(?:select|textarea)/i,
- rspacesAjax = /\s+/,
- rts = /([?&])_=[^&]*/,
- rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,
-
- // Keep a copy of the old load method
- _load = jQuery.fn.load,
-
- /* Prefilters
- * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
- * 2) These are called:
- * - BEFORE asking for a transport
- * - AFTER param serialization (s.data is a string if s.processData is true)
- * 3) key is the dataType
- * 4) the catchall symbol "*" can be used
- * 5) execution will start with transport dataType and THEN continue down to "*" if needed
- */
- prefilters = {},
-
- /* Transports bindings
- * 1) key is the dataType
- * 2) the catchall symbol "*" can be used
- * 3) selection will start with transport dataType and THEN go to "*" if needed
- */
- transports = {},
-
- // Document location
- ajaxLocation,
-
- // Document location segments
- ajaxLocParts,
-
- // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
- allTypes = ["*/"] + ["*"];
-
-// #8138, IE may throw an exception when accessing
-// a field from window.location if document.domain has been set
-try {
- ajaxLocation = location.href;
-} catch( e ) {
- // Use the href attribute of an A element
- // since IE will modify it given document.location
- ajaxLocation = document.createElement( "a" );
- ajaxLocation.href = "";
- ajaxLocation = ajaxLocation.href;
-}
-
-// Segment location into parts
-ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
- // dataTypeExpression is optional and defaults to "*"
- return function( dataTypeExpression, func ) {
-
- if ( typeof dataTypeExpression !== "string" ) {
- func = dataTypeExpression;
- dataTypeExpression = "*";
- }
-
- if ( jQuery.isFunction( func ) ) {
- var dataTypes = dataTypeExpression.toLowerCase().split( rspacesAjax ),
- i = 0,
- length = dataTypes.length,
- dataType,
- list,
- placeBefore;
-
- // For each dataType in the dataTypeExpression
- for(; i < length; i++ ) {
- dataType = dataTypes[ i ];
- // We control if we're asked to add before
- // any existing element
- placeBefore = /^\+/.test( dataType );
- if ( placeBefore ) {
- dataType = dataType.substr( 1 ) || "*";
- }
- list = structure[ dataType ] = structure[ dataType ] || [];
- // then we add to the structure accordingly
- list[ placeBefore ? "unshift" : "push" ]( func );
- }
- }
- };
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR,
- dataType /* internal */, inspected /* internal */ ) {
-
- dataType = dataType || options.dataTypes[ 0 ];
- inspected = inspected || {};
-
- inspected[ dataType ] = true;
-
- var list = structure[ dataType ],
- i = 0,
- length = list ? list.length : 0,
- executeOnly = ( structure === prefilters ),
- selection;
-
- for(; i < length && ( executeOnly || !selection ); i++ ) {
- selection = list[ i ]( options, originalOptions, jqXHR );
- // If we got redirected to another dataType
- // we try there if executing only and not done already
- if ( typeof selection === "string" ) {
- if ( !executeOnly || inspected[ selection ] ) {
- selection = undefined;
- } else {
- options.dataTypes.unshift( selection );
- selection = inspectPrefiltersOrTransports(
- structure, options, originalOptions, jqXHR, selection, inspected );
- }
- }
- }
- // If we're only executing or nothing was selected
- // we try the catchall dataType if not done already
- if ( ( executeOnly || !selection ) && !inspected[ "*" ] ) {
- selection = inspectPrefiltersOrTransports(
- structure, options, originalOptions, jqXHR, "*", inspected );
- }
- // unnecessary when only executing (prefilters)
- // but it'll be ignored by the caller in that case
- return selection;
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
- var key, deep,
- flatOptions = jQuery.ajaxSettings.flatOptions || {};
- for( key in src ) {
- if ( src[ key ] !== undefined ) {
- ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
- }
- }
- if ( deep ) {
- jQuery.extend( true, target, deep );
- }
-}
-
-jQuery.fn.extend({
- load: function( url, params, callback ) {
- if ( typeof url !== "string" && _load ) {
- return _load.apply( this, arguments );
-
- // Don't do a request if no elements are being requested
- } else if ( !this.length ) {
- return this;
- }
-
- var off = url.indexOf( " " );
- if ( off >= 0 ) {
- var selector = url.slice( off, url.length );
- url = url.slice( 0, off );
- }
-
- // Default to a GET request
- var type = "GET";
-
- // If the second parameter was provided
- if ( params ) {
- // If it's a function
- if ( jQuery.isFunction( params ) ) {
- // We assume that it's the callback
- callback = params;
- params = undefined;
-
- // Otherwise, build a param string
- } else if ( typeof params === "object" ) {
- params = jQuery.param( params, jQuery.ajaxSettings.traditional );
- type = "POST";
- }
- }
-
- var self = this;
-
- // Request the remote document
- jQuery.ajax({
- url: url,
- type: type,
- dataType: "html",
- data: params,
- // Complete callback (responseText is used internally)
- complete: function( jqXHR, status, responseText ) {
- // Store the response as specified by the jqXHR object
- responseText = jqXHR.responseText;
- // If successful, inject the HTML into all the matched elements
- if ( jqXHR.isResolved() ) {
- // #4825: Get the actual response in case
- // a dataFilter is present in ajaxSettings
- jqXHR.done(function( r ) {
- responseText = r;
- });
- // See if a selector was specified
- self.html( selector ?
- // Create a dummy div to hold the results
- jQuery("<div>")
- // inject the contents of the document in, removing the scripts
- // to avoid any 'Permission Denied' errors in IE
- .append(responseText.replace(rscript, ""))
-
- // Locate the specified elements
- .find(selector) :
-
- // If not, just inject the full result
- responseText );
- }
-
- if ( callback ) {
- self.each( callback, [ responseText, status, jqXHR ] );
- }
- }
- });
-
- return this;
- },
-
- serialize: function() {
- return jQuery.param( this.serializeArray() );
- },
-
- serializeArray: function() {
- return this.map(function(){
- return this.elements ? jQuery.makeArray( this.elements ) : this;
- })
- .filter(function(){
- return this.name && !this.disabled &&
- ( this.checked || rselectTextarea.test( this.nodeName ) ||
- rinput.test( this.type ) );
- })
- .map(function( i, elem ){
- var val = jQuery( this ).val();
-
- return val == null ?
- null :
- jQuery.isArray( val ) ?
- jQuery.map( val, function( val, i ){
- return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }) :
- { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
- }).get();
- }
-});
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split( " " ), function( i, o ){
- jQuery.fn[ o ] = function( f ){
- return this.bind( o, f );
- };
-});
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
- jQuery[ method ] = function( url, data, callback, type ) {
- // shift arguments if data argument was omitted
- if ( jQuery.isFunction( data ) ) {
- type = type || callback;
- callback = data;
- data = undefined;
- }
-
- return jQuery.ajax({
- type: method,
- url: url,
- data: data,
- success: callback,
- dataType: type
- });
- };
-});
-
-jQuery.extend({
-
- getScript: function( url, callback ) {
- return jQuery.get( url, undefined, callback, "script" );
- },
-
- getJSON: function( url, data, callback ) {
- return jQuery.get( url, data, callback, "json" );
- },
-
- // Creates a full fledged settings object into target
- // with both ajaxSettings and settings fields.
- // If target is omitted, writes into ajaxSettings.
- ajaxSetup: function( target, settings ) {
- if ( settings ) {
- // Building a settings object
- ajaxExtend( target, jQuery.ajaxSettings );
- } else {
- // Extending ajaxSettings
- settings = target;
- target = jQuery.ajaxSettings;
- }
- ajaxExtend( target, settings );
- return target;
- },
-
- ajaxSettings: {
- url: ajaxLocation,
- isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
- global: true,
- type: "GET",
- contentType: "application/x-www-form-urlencoded",
- processData: true,
- async: true,
- /*
- timeout: 0,
- data: null,
- dataType: null,
- username: null,
- password: null,
- cache: null,
- traditional: false,
- headers: {},
- */
-
- accepts: {
- xml: "application/xml, text/xml",
- html: "text/html",
- text: "text/plain",
- json: "application/json, text/javascript",
- "*": allTypes
- },
-
- contents: {
- xml: /xml/,
- html: /html/,
- json: /json/
- },
-
- responseFields: {
- xml: "responseXML",
- text: "responseText"
- },
-
- // List of data converters
- // 1) key format is "source_type destination_type" (a single space in-between)
- // 2) the catchall symbol "*" can be used for source_type
- converters: {
-
- // Convert anything to text
- "* text": window.String,
-
- // Text to html (true = no transformation)
- "text html": true,
-
- // Evaluate text as a json expression
- "text json": jQuery.parseJSON,
-
- // Parse text as xml
- "text xml": jQuery.parseXML
- },
-
- // For options that shouldn't be deep extended:
- // you can add your own custom options here if
- // and when you create one that shouldn't be
- // deep extended (see ajaxExtend)
- flatOptions: {
- context: true,
- url: true
- }
- },
-
- ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
- ajaxTransport: addToPrefiltersOrTransports( transports ),
-
- // Main method
- ajax: function( url, options ) {
-
- // If url is an object, simulate pre-1.5 signature
- if ( typeof url === "object" ) {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- var // Create the final options object
- s = jQuery.ajaxSetup( {}, options ),
- // Callbacks context
- callbackContext = s.context || s,
- // Context for global events
- // It's the callbackContext if one was provided in the options
- // and if it's a DOM node or a jQuery collection
- globalEventContext = callbackContext !== s &&
- ( callbackContext.nodeType || callbackContext instanceof jQuery ) ?
- jQuery( callbackContext ) : jQuery.event,
- // Deferreds
- deferred = jQuery.Deferred(),
- completeDeferred = jQuery._Deferred(),
- // Status-dependent callbacks
- statusCode = s.statusCode || {},
- // ifModified key
- ifModifiedKey,
- // Headers (they are sent all at once)
- requestHeaders = {},
- requestHeadersNames = {},
- // Response headers
- responseHeadersString,
- responseHeaders,
- // transport
- transport,
- // timeout handle
- timeoutTimer,
- // Cross-domain detection vars
- parts,
- // The jqXHR state
- state = 0,
- // To know if global events are to be dispatched
- fireGlobals,
- // Loop variable
- i,
- // Fake xhr
- jqXHR = {
-
- readyState: 0,
-
- // Caches the header
- setRequestHeader: function( name, value ) {
- if ( !state ) {
- var lname = name.toLowerCase();
- name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
- requestHeaders[ name ] = value;
- }
- return this;
- },
-
- // Raw string
- getAllResponseHeaders: function() {
- return state === 2 ? responseHeadersString : null;
- },
-
- // Builds headers hashtable if needed
- getResponseHeader: function( key ) {
- var match;
- if ( state === 2 ) {
- if ( !responseHeaders ) {
- responseHeaders = {};
- while( ( match = rheaders.exec( responseHeadersString ) ) ) {
- responseHeaders[ match[1].toLowerCase() ] = match[ 2 ];
- }
- }
- match = responseHeaders[ key.toLowerCase() ];
- }
- return match === undefined ? null : match;
- },
-
- // Overrides response content-type header
- overrideMimeType: function( type ) {
- if ( !state ) {
- s.mimeType = type;
- }
- return this;
- },
-
- // Cancel the request
- abort: function( statusText ) {
- statusText = statusText || "abort";
- if ( transport ) {
- transport.abort( statusText );
- }
- done( 0, statusText );
- return this;
- }
- };
-
- // Callback for when everything is done
- // It is defined here because jslint complains if it is declared
- // at the end of the function (which would be more logical and readable)
- function done( status, nativeStatusText, responses, headers ) {
-
- // Called once
- if ( state === 2 ) {
- return;
- }
-
- // State is "done" now
- state = 2;
-
- // Clear timeout if it exists
- if ( timeoutTimer ) {
- clearTimeout( timeoutTimer );
- }
-
- // Dereference transport for early garbage collection
- // (no matter how long the jqXHR object will be used)
- transport = undefined;
-
- // Cache response headers
- responseHeadersString = headers || "";
-
- // Set readyState
- jqXHR.readyState = status > 0 ? 4 : 0;
-
- var isSuccess,
- success,
- error,
- statusText = nativeStatusText,
- response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
- lastModified,
- etag;
-
- // If successful, handle type chaining
- if ( status >= 200 && status < 300 || status === 304 ) {
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
-
- if ( ( lastModified = jqXHR.getResponseHeader( "Last-Modified" ) ) ) {
- jQuery.lastModified[ ifModifiedKey ] = lastModified;
- }
- if ( ( etag = jqXHR.getResponseHeader( "Etag" ) ) ) {
- jQuery.etag[ ifModifiedKey ] = etag;
- }
- }
-
- // If not modified
- if ( status === 304 ) {
-
- statusText = "notmodified";
- isSuccess = true;
-
- // If we have data
- } else {
-
- try {
- success = ajaxConvert( s, response );
- statusText = "success";
- isSuccess = true;
- } catch(e) {
- // We have a parsererror
- statusText = "parsererror";
- error = e;
- }
- }
- } else {
- // We extract error from statusText
- // then normalize statusText and status for non-aborts
- error = statusText;
- if( !statusText || status ) {
- statusText = "error";
- if ( status < 0 ) {
- status = 0;
- }
- }
- }
-
- // Set data for the fake xhr object
- jqXHR.status = status;
- jqXHR.statusText = "" + ( nativeStatusText || statusText );
-
- // Success/Error
- if ( isSuccess ) {
- deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
- } else {
- deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
- }
-
- // Status-dependent callbacks
- jqXHR.statusCode( statusCode );
- statusCode = undefined;
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajax" + ( isSuccess ? "Success" : "Error" ),
- [ jqXHR, s, isSuccess ? success : error ] );
- }
-
- // Complete
- completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
-
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
- // Handle the global AJAX counter
- if ( !( --jQuery.active ) ) {
- jQuery.event.trigger( "ajaxStop" );
- }
- }
- }
-
- // Attach deferreds
- deferred.promise( jqXHR );
- jqXHR.success = jqXHR.done;
- jqXHR.error = jqXHR.fail;
- jqXHR.complete = completeDeferred.done;
-
- // Status-dependent callbacks
- jqXHR.statusCode = function( map ) {
- if ( map ) {
- var tmp;
- if ( state < 2 ) {
- for( tmp in map ) {
- statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ];
- }
- } else {
- tmp = map[ jqXHR.status ];
- jqXHR.then( tmp, tmp );
- }
- }
- return this;
- };
-
- // Remove hash character (#7531: and string promotion)
- // Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
- // We also use the url parameter if available
- s.url = ( ( url || s.url ) + "" ).replace( rhash, "" ).replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
- // Extract dataTypes list
- s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().split( rspacesAjax );
-
- // Determine if a cross-domain request is in order
- if ( s.crossDomain == null ) {
- parts = rurl.exec( s.url.toLowerCase() );
- s.crossDomain = !!( parts &&
- ( parts[ 1 ] != ajaxLocParts[ 1 ] || parts[ 2 ] != ajaxLocParts[ 2 ] ||
- ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
- ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
- );
- }
-
- // Convert data if not already a string
- if ( s.data && s.processData && typeof s.data !== "string" ) {
- s.data = jQuery.param( s.data, s.traditional );
- }
-
- // Apply prefilters
- inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
- // If request was aborted inside a prefiler, stop there
- if ( state === 2 ) {
- return false;
- }
-
- // We can fire global events as of now if asked to
- fireGlobals = s.global;
-
- // Uppercase the type
- s.type = s.type.toUpperCase();
-
- // Determine if request has content
- s.hasContent = !rnoContent.test( s.type );
-
- // Watch for a new set of requests
- if ( fireGlobals && jQuery.active++ === 0 ) {
- jQuery.event.trigger( "ajaxStart" );
- }
-
- // More options handling for requests with no content
- if ( !s.hasContent ) {
-
- // If data is available, append data to url
- if ( s.data ) {
- s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
- // #9682: remove data so that it's not used in an eventual retry
- delete s.data;
- }
-
- // Get ifModifiedKey before adding the anti-cache parameter
- ifModifiedKey = s.url;
-
- // Add anti-cache in url if needed
- if ( s.cache === false ) {
-
- var ts = jQuery.now(),
- // try replacing _= if it is there
- ret = s.url.replace( rts, "$1_=" + ts );
-
- // if nothing was replaced, add timestamp to the end
- s.url = ret + ( (ret === s.url ) ? ( rquery.test( s.url ) ? "&" : "?" ) + "_=" + ts : "" );
- }
- }
-
- // Set the correct header, if data is being sent
- if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
- jqXHR.setRequestHeader( "Content-Type", s.contentType );
- }
-
- // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
- if ( s.ifModified ) {
- ifModifiedKey = ifModifiedKey || s.url;
- if ( jQuery.lastModified[ ifModifiedKey ] ) {
- jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ ifModifiedKey ] );
- }
- if ( jQuery.etag[ ifModifiedKey ] ) {
- jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ ifModifiedKey ] );
- }
- }
-
- // Set the Accepts header for the server, depending on the dataType
- jqXHR.setRequestHeader(
- "Accept",
- s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
- s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
- s.accepts[ "*" ]
- );
-
- // Check for headers option
- for ( i in s.headers ) {
- jqXHR.setRequestHeader( i, s.headers[ i ] );
- }
-
- // Allow custom headers/mimetypes and early abort
- if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
- // Abort if not done already
- jqXHR.abort();
- return false;
-
- }
-
- // Install callbacks on deferreds
- for ( i in { success: 1, error: 1, complete: 1 } ) {
- jqXHR[ i ]( s[ i ] );
- }
-
- // Get transport
- transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
- // If no transport, we auto-abort
- if ( !transport ) {
- done( -1, "No Transport" );
- } else {
- jqXHR.readyState = 1;
- // Send global event
- if ( fireGlobals ) {
- globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
- }
- // Timeout
- if ( s.async && s.timeout > 0 ) {
- timeoutTimer = setTimeout( function(){
- jqXHR.abort( "timeout" );
- }, s.timeout );
- }
-
- try {
- state = 1;
- transport.send( requestHeaders, done );
- } catch (e) {
- // Propagate exception as error if not done
- if ( state < 2 ) {
- done( -1, e );
- // Simply rethrow otherwise
- } else {
- jQuery.error( e );
- }
- }
- }
-
- return jqXHR;
- },
-
- // Serialize an array of form elements or a set of
- // key/values into a query string
- param: function( a, traditional ) {
- var s = [],
- add = function( key, value ) {
- // If value is a function, invoke it and return its value
- value = jQuery.isFunction( value ) ? value() : value;
- s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
- };
-
- // Set traditional to true for jQuery <= 1.3.2 behavior.
- if ( traditional === undefined ) {
- traditional = jQuery.ajaxSettings.traditional;
- }
-
- // If an array was passed in, assume that it is an array of form elements.
- if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
- // Serialize the form elements
- jQuery.each( a, function() {
- add( this.name, this.value );
- });
-
- } else {
- // If traditional, encode the "old" way (the way 1.3.2 or older
- // did it), otherwise encode params recursively.
- for ( var prefix in a ) {
- buildParams( prefix, a[ prefix ], traditional, add );
- }
- }
-
- // Return the resulting serialization
- return s.join( "&" ).replace( r20, "+" );
- }
-});
-
-function buildParams( prefix, obj, traditional, add ) {
- if ( jQuery.isArray( obj ) ) {
- // Serialize array item.
- jQuery.each( obj, function( i, v ) {
- if ( traditional || rbracket.test( prefix ) ) {
- // Treat each array item as a scalar.
- add( prefix, v );
-
- } else {
- // If array item is non-scalar (array or object), encode its
- // numeric index to resolve deserialization ambiguity issues.
- // Note that rack (as of 1.0.0) can't currently deserialize
- // nested arrays properly, and attempting to do so may cause
- // a server error. Possible fixes are to modify rack's
- // deserialization algorithm or to provide an option or flag
- // to force array serialization to be shallow.
- buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
- }
- });
-
- } else if ( !traditional && obj != null && typeof obj === "object" ) {
- // Serialize object item.
- for ( var name in obj ) {
- buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
- }
-
- } else {
- // Serialize scalar item.
- add( prefix, obj );
- }
-}
-
-// This is still on the jQuery object... for now
-// Want to move this to jQuery.ajax some day
-jQuery.extend({
-
- // Counter for holding the number of active queries
- active: 0,
-
- // Last-Modified header cache for next request
- lastModified: {},
- etag: {}
-
-});
-
-/* Handles responses to an ajax request:
- * - sets all responseXXX fields accordingly
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-
- var contents = s.contents,
- dataTypes = s.dataTypes,
- responseFields = s.responseFields,
- ct,
- type,
- finalDataType,
- firstDataType;
-
- // Fill responseXXX fields
- for( type in responseFields ) {
- if ( type in responses ) {
- jqXHR[ responseFields[type] ] = responses[ type ];
- }
- }
-
- // Remove auto dataType and get content-type in the process
- while( dataTypes[ 0 ] === "*" ) {
- dataTypes.shift();
- if ( ct === undefined ) {
- ct = s.mimeType || jqXHR.getResponseHeader( "content-type" );
- }
- }
-
- // Check if we're dealing with a known content-type
- if ( ct ) {
- for ( type in contents ) {
- if ( contents[ type ] && contents[ type ].test( ct ) ) {
- dataTypes.unshift( type );
- break;
- }
- }
- }
-
- // Check to see if we have a response for the expected dataType
- if ( dataTypes[ 0 ] in responses ) {
- finalDataType = dataTypes[ 0 ];
- } else {
- // Try convertible dataTypes
- for ( type in responses ) {
- if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) {
- finalDataType = type;
- break;
- }
- if ( !firstDataType ) {
- firstDataType = type;
- }
- }
- // Or just use first one
- finalDataType = finalDataType || firstDataType;
- }
-
- // If we found a dataType
- // We add the dataType to the list if needed
- // and return the corresponding response
- if ( finalDataType ) {
- if ( finalDataType !== dataTypes[ 0 ] ) {
- dataTypes.unshift( finalDataType );
- }
- return responses[ finalDataType ];
- }
-}
-
-// Chain conversions given the request and the original response
-function ajaxConvert( s, response ) {
-
- // Apply the dataFilter if provided
- if ( s.dataFilter ) {
- response = s.dataFilter( response, s.dataType );
- }
-
- var dataTypes = s.dataTypes,
- converters = {},
- i,
- key,
- length = dataTypes.length,
- tmp,
- // Current and previous dataTypes
- current = dataTypes[ 0 ],
- prev,
- // Conversion expression
- conversion,
- // Conversion function
- conv,
- // Conversion functions (transitive conversion)
- conv1,
- conv2;
-
- // For each dataType in the chain
- for( i = 1; i < length; i++ ) {
-
- // Create converters map
- // with lowercased keys
- if ( i === 1 ) {
- for( key in s.converters ) {
- if( typeof key === "string" ) {
- converters[ key.toLowerCase() ] = s.converters[ key ];
- }
- }
- }
-
- // Get the dataTypes
- prev = current;
- current = dataTypes[ i ];
-
- // If current is auto dataType, update it to prev
- if( current === "*" ) {
- current = prev;
- // If no auto and dataTypes are actually different
- } else if ( prev !== "*" && prev !== current ) {
-
- // Get the converter
- conversion = prev + " " + current;
- conv = converters[ conversion ] || converters[ "* " + current ];
-
- // If there is no direct converter, search transitively
- if ( !conv ) {
- conv2 = undefined;
- for( conv1 in converters ) {
- tmp = conv1.split( " " );
- if ( tmp[ 0 ] === prev || tmp[ 0 ] === "*" ) {
- conv2 = converters[ tmp[1] + " " + current ];
- if ( conv2 ) {
- conv1 = converters[ conv1 ];
- if ( conv1 === true ) {
- conv = conv2;
- } else if ( conv2 === true ) {
- conv = conv1;
- }
- break;
- }
- }
- }
- }
- // If we found no converter, dispatch an error
- if ( !( conv || conv2 ) ) {
- jQuery.error( "No conversion from " + conversion.replace(" "," to ") );
- }
- // If found converter is not an equivalence
- if ( conv !== true ) {
- // Convert with 1 or 2 converters accordingly
- response = conv ? conv( response ) : conv2( conv1(response) );
- }
- }
- }
- return response;
-}
-
-
-
-
-var jsc = jQuery.now(),
- jsre = /(\=)\?(&|$)|\?\?/i;
-
-// Default jsonp settings
-jQuery.ajaxSetup({
- jsonp: "callback",
- jsonpCallback: function() {
- return jQuery.expando + "_" + ( jsc++ );
- }
-});
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
- var inspectData = s.contentType === "application/x-www-form-urlencoded" &&
- ( typeof s.data === "string" );
-
- if ( s.dataTypes[ 0 ] === "jsonp" ||
- s.jsonp !== false && ( jsre.test( s.url ) ||
- inspectData && jsre.test( s.data ) ) ) {
-
- var responseContainer,
- jsonpCallback = s.jsonpCallback =
- jQuery.isFunction( s.jsonpCallback ) ? s.jsonpCallback() : s.jsonpCallback,
- previous = window[ jsonpCallback ],
- url = s.url,
- data = s.data,
- replace = "$1" + jsonpCallback + "$2";
-
- if ( s.jsonp !== false ) {
- url = url.replace( jsre, replace );
- if ( s.url === url ) {
- if ( inspectData ) {
- data = data.replace( jsre, replace );
- }
- if ( s.data === data ) {
- // Add callback manually
- url += (/\?/.test( url ) ? "&" : "?") + s.jsonp + "=" + jsonpCallback;
- }
- }
- }
-
- s.url = url;
- s.data = data;
-
- // Install callback
- window[ jsonpCallback ] = function( response ) {
- responseContainer = [ response ];
- };
-
- // Clean-up function
- jqXHR.always(function() {
- // Set callback back to previous value
- window[ jsonpCallback ] = previous;
- // Call if it was a function and we have a response
- if ( responseContainer && jQuery.isFunction( previous ) ) {
- window[ jsonpCallback ]( responseContainer[ 0 ] );
- }
- });
-
- // Use data converter to retrieve json after script execution
- s.converters["script json"] = function() {
- if ( !responseContainer ) {
- jQuery.error( jsonpCallback + " was not called" );
- }
- return responseContainer[ 0 ];
- };
-
- // force json dataType
- s.dataTypes[ 0 ] = "json";
-
- // Delegate to script
- return "script";
- }
-});
-
-
-
-
-// Install script dataType
-jQuery.ajaxSetup({
- accepts: {
- script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"
- },
- contents: {
- script: /javascript|ecmascript/
- },
- converters: {
- "text script": function( text ) {
- jQuery.globalEval( text );
- return text;
- }
- }
-});
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
- if ( s.cache === undefined ) {
- s.cache = false;
- }
- if ( s.crossDomain ) {
- s.type = "GET";
- s.global = false;
- }
-});
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function(s) {
-
- // This transport only deals with cross domain requests
- if ( s.crossDomain ) {
-
- var script,
- head = document.head || document.getElementsByTagName( "head" )[0] || document.documentElement;
-
- return {
-
- send: function( _, callback ) {
-
- script = document.createElement( "script" );
-
- script.async = "async";
-
- if ( s.scriptCharset ) {
- script.charset = s.scriptCharset;
- }
-
- script.src = s.url;
-
- // Attach handlers for all browsers
- script.onload = script.onreadystatechange = function( _, isAbort ) {
-
- if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
- // Handle memory leak in IE
- script.onload = script.onreadystatechange = null;
-
- // Remove the script
- if ( head && script.parentNode ) {
- head.removeChild( script );
- }
-
- // Dereference the script
- script = undefined;
-
- // Callback if not abort
- if ( !isAbort ) {
- callback( 200, "success" );
- }
- }
- };
- // Use insertBefore instead of appendChild to circumvent an IE6 bug.
- // This arises when a base node is used (#2709 and #4378).
- head.insertBefore( script, head.firstChild );
- },
-
- abort: function() {
- if ( script ) {
- script.onload( 0, 1 );
- }
- }
- };
- }
-});
-
-
-
-
-var // #5280: Internet Explorer will keep connections alive if we don't abort on unload
- xhrOnUnloadAbort = window.ActiveXObject ? function() {
- // Abort all pending requests
- for ( var key in xhrCallbacks ) {
- xhrCallbacks[ key ]( 0, 1 );
- }
- } : false,
- xhrId = 0,
- xhrCallbacks;
-
-// Functions to create xhrs
-function createStandardXHR() {
- try {
- return new window.XMLHttpRequest();
- } catch( e ) {}
-}
-
-function createActiveXHR() {
- try {
- return new window.ActiveXObject( "Microsoft.XMLHTTP" );
- } catch( e ) {}
-}
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject ?
- /* Microsoft failed to properly
- * implement the XMLHttpRequest in IE7 (can't request local files),
- * so we use the ActiveXObject when it is available
- * Additionally XMLHttpRequest can be disabled in IE7/IE8 so
- * we need a fallback.
- */
- function() {
- return !this.isLocal && createStandardXHR() || createActiveXHR();
- } :
- // For all other browsers, use the standard XMLHttpRequest object
- createStandardXHR;
-
-// Determine support properties
-(function( xhr ) {
- jQuery.extend( jQuery.support, {
- ajax: !!xhr,
- cors: !!xhr && ( "withCredentials" in xhr )
- });
-})( jQuery.ajaxSettings.xhr() );
-
-// Create transport if the browser can provide an xhr
-if ( jQuery.support.ajax ) {
-
- jQuery.ajaxTransport(function( s ) {
- // Cross domain only allowed if supported through XMLHttpRequest
- if ( !s.crossDomain || jQuery.support.cors ) {
-
- var callback;
-
- return {
- send: function( headers, complete ) {
-
- // Get a new xhr
- var xhr = s.xhr(),
- handle,
- i;
-
- // Open the socket
- // Passing null username, generates a login popup on Opera (#2865)
- if ( s.username ) {
- xhr.open( s.type, s.url, s.async, s.username, s.password );
- } else {
- xhr.open( s.type, s.url, s.async );
- }
-
- // Apply custom fields if provided
- if ( s.xhrFields ) {
- for ( i in s.xhrFields ) {
- xhr[ i ] = s.xhrFields[ i ];
- }
- }
-
- // Override mime type if needed
- if ( s.mimeType && xhr.overrideMimeType ) {
- xhr.overrideMimeType( s.mimeType );
- }
-
- // X-Requested-With header
- // For cross-domain requests, seeing as conditions for a preflight are
- // akin to a jigsaw puzzle, we simply never set it to be sure.
- // (it can always be set on a per-request basis or even using ajaxSetup)
- // For same-domain requests, won't change header if already provided.
- if ( !s.crossDomain && !headers["X-Requested-With"] ) {
- headers[ "X-Requested-With" ] = "XMLHttpRequest";
- }
-
- // Need an extra try/catch for cross domain requests in Firefox 3
- try {
- for ( i in headers ) {
- xhr.setRequestHeader( i, headers[ i ] );
- }
- } catch( _ ) {}
-
- // Do send the request
- // This may raise an exception which is actually
- // handled in jQuery.ajax (so no try/catch here)
- xhr.send( ( s.hasContent && s.data ) || null );
-
- // Listener
- callback = function( _, isAbort ) {
-
- var status,
- statusText,
- responseHeaders,
- responses,
- xml;
-
- // Firefox throws exceptions when accessing properties
- // of an xhr when a network error occured
- // http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)
- try {
-
- // Was never called and is aborted or complete
- if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
- // Only called once
- callback = undefined;
-
- // Do not keep as active anymore
- if ( handle ) {
- xhr.onreadystatechange = jQuery.noop;
- if ( xhrOnUnloadAbort ) {
- delete xhrCallbacks[ handle ];
- }
- }
-
- // If it's an abort
- if ( isAbort ) {
- // Abort it manually if needed
- if ( xhr.readyState !== 4 ) {
- xhr.abort();
- }
- } else {
- status = xhr.status;
- responseHeaders = xhr.getAllResponseHeaders();
- responses = {};
- xml = xhr.responseXML;
-
- // Construct response list
- if ( xml && xml.documentElement /* #4958 */ ) {
- responses.xml = xml;
- }
- responses.text = xhr.responseText;
-
- // Firefox throws an exception when accessing
- // statusText for faulty cross-domain requests
- try {
- statusText = xhr.statusText;
- } catch( e ) {
- // We normalize with Webkit giving an empty statusText
- statusText = "";
- }
-
- // Filter status for non standard behaviors
-
- // If the request is local and we have data: assume a success
- // (success with no data won't get notified, that's the best we
- // can do given current implementations)
- if ( !status && s.isLocal && !s.crossDomain ) {
- status = responses.text ? 200 : 404;
- // IE - #1450: sometimes returns 1223 when it should be 204
- } else if ( status === 1223 ) {
- status = 204;
- }
- }
- }
- } catch( firefoxAccessException ) {
- if ( !isAbort ) {
- complete( -1, firefoxAccessException );
- }
- }
-
- // Call complete if needed
- if ( responses ) {
- complete( status, statusText, responses, responseHeaders );
- }
- };
-
- // if we're in sync mode or it's in cache
- // and has been retrieved directly (IE6 & IE7)
- // we need to manually fire the callback
- if ( !s.async || xhr.readyState === 4 ) {
- callback();
- } else {
- handle = ++xhrId;
- if ( xhrOnUnloadAbort ) {
- // Create the active xhrs callbacks list if needed
- // and attach the unload handler
- if ( !xhrCallbacks ) {
- xhrCallbacks = {};
- jQuery( window ).unload( xhrOnUnloadAbort );
- }
- // Add to list of active xhrs callbacks
- xhrCallbacks[ handle ] = callback;
- }
- xhr.onreadystatechange = callback;
- }
- },
-
- abort: function() {
- if ( callback ) {
- callback(0,1);
- }
- }
- };
- }
- });
-}
-
-
-
-
-var elemdisplay = {},
- iframe, iframeDoc,
- rfxtypes = /^(?:toggle|show|hide)$/,
- rfxnum = /^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,
- timerId,
- fxAttrs = [
- // height animations
- [ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
- // width animations
- [ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
- // opacity animations
- [ "opacity" ]
- ],
- fxNow;
-
-jQuery.fn.extend({
- show: function( speed, easing, callback ) {
- var elem, display;
-
- if ( speed || speed === 0 ) {
- return this.animate( genFx("show", 3), speed, easing, callback);
-
- } else {
- for ( var i = 0, j = this.length; i < j; i++ ) {
- elem = this[i];
-
- if ( elem.style ) {
- display = elem.style.display;
-
- // Reset the inline display of this element to learn if it is
- // being hidden by cascaded rules or not
- if ( !jQuery._data(elem, "olddisplay") && display === "none" ) {
- display = elem.style.display = "";
- }
-
- // Set elements which have been overridden with display: none
- // in a stylesheet to whatever the default browser style is
- // for such an element
- if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
- jQuery._data(elem, "olddisplay", defaultDisplay(elem.nodeName));
- }
- }
- }
-
- // Set the display of most of the elements in a second loop
- // to avoid the constant reflow
- for ( i = 0; i < j; i++ ) {
- elem = this[i];
-
- if ( elem.style ) {
- display = elem.style.display;
-
- if ( display === "" || display === "none" ) {
- elem.style.display = jQuery._data(elem, "olddisplay") || "";
- }
- }
- }
-
- return this;
- }
- },
-
- hide: function( speed, easing, callback ) {
- if ( speed || speed === 0 ) {
- return this.animate( genFx("hide", 3), speed, easing, callback);
-
- } else {
- for ( var i = 0, j = this.length; i < j; i++ ) {
- if ( this[i].style ) {
- var display = jQuery.css( this[i], "display" );
-
- if ( display !== "none" && !jQuery._data( this[i], "olddisplay" ) ) {
- jQuery._data( this[i], "olddisplay", display );
- }
- }
- }
-
- // Set the display of the elements in a second loop
- // to avoid the constant reflow
- for ( i = 0; i < j; i++ ) {
- if ( this[i].style ) {
- this[i].style.display = "none";
- }
- }
-
- return this;
- }
- },
-
- // Save the old toggle function
- _toggle: jQuery.fn.toggle,
-
- toggle: function( fn, fn2, callback ) {
- var bool = typeof fn === "boolean";
-
- if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
- this._toggle.apply( this, arguments );
-
- } else if ( fn == null || bool ) {
- this.each(function() {
- var state = bool ? fn : jQuery(this).is(":hidden");
- jQuery(this)[ state ? "show" : "hide" ]();
- });
-
- } else {
- this.animate(genFx("toggle", 3), fn, fn2, callback);
- }
-
- return this;
- },
-
- fadeTo: function( speed, to, easing, callback ) {
- return this.filter(":hidden").css("opacity", 0).show().end()
- .animate({opacity: to}, speed, easing, callback);
- },
-
- animate: function( prop, speed, easing, callback ) {
- var optall = jQuery.speed(speed, easing, callback);
-
- if ( jQuery.isEmptyObject( prop ) ) {
- return this.each( optall.complete, [ false ] );
- }
-
- // Do not change referenced properties as per-property easing will be lost
- prop = jQuery.extend( {}, prop );
-
- return this[ optall.queue === false ? "each" : "queue" ](function() {
- // XXX 'this' does not always have a nodeName when running the
- // test suite
-
- if ( optall.queue === false ) {
- jQuery._mark( this );
- }
-
- var opt = jQuery.extend( {}, optall ),
- isElement = this.nodeType === 1,
- hidden = isElement && jQuery(this).is(":hidden"),
- name, val, p,
- display, e,
- parts, start, end, unit;
-
- // will store per property easing and be used to determine when an animation is complete
- opt.animatedProperties = {};
-
- for ( p in prop ) {
-
- // property name normalization
- name = jQuery.camelCase( p );
- if ( p !== name ) {
- prop[ name ] = prop[ p ];
- delete prop[ p ];
- }
-
- val = prop[ name ];
-
- // easing resolution: per property > opt.specialEasing > opt.easing > 'swing' (default)
- if ( jQuery.isArray( val ) ) {
- opt.animatedProperties[ name ] = val[ 1 ];
- val = prop[ name ] = val[ 0 ];
- } else {
- opt.animatedProperties[ name ] = opt.specialEasing && opt.specialEasing[ name ] || opt.easing || 'swing';
- }
-
- if ( val === "hide" && hidden || val === "show" && !hidden ) {
- return opt.complete.call( this );
- }
-
- if ( isElement && ( name === "height" || name === "width" ) ) {
- // Make sure that nothing sneaks out
- // Record all 3 overflow attributes because IE does not
- // change the overflow attribute when overflowX and
- // overflowY are set to the same value
- opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
-
- // Set display property to inline-block for height/width
- // animations on inline elements that are having width/height
- // animated
- if ( jQuery.css( this, "display" ) === "inline" &&
- jQuery.css( this, "float" ) === "none" ) {
- if ( !jQuery.support.inlineBlockNeedsLayout ) {
- this.style.display = "inline-block";
-
- } else {
- display = defaultDisplay( this.nodeName );
-
- // inline-level elements accept inline-block;
- // block-level elements need to be inline with layout
- if ( display === "inline" ) {
- this.style.display = "inline-block";
-
- } else {
- this.style.display = "inline";
- this.style.zoom = 1;
- }
- }
- }
- }
- }
-
- if ( opt.overflow != null ) {
- this.style.overflow = "hidden";
- }
-
- for ( p in prop ) {
- e = new jQuery.fx( this, opt, p );
- val = prop[ p ];
-
- if ( rfxtypes.test(val) ) {
- e[ val === "toggle" ? hidden ? "show" : "hide" : val ]();
-
- } else {
- parts = rfxnum.exec( val );
- start = e.cur();
-
- if ( parts ) {
- end = parseFloat( parts[2] );
- unit = parts[3] || ( jQuery.cssNumber[ p ] ? "" : "px" );
-
- // We need to compute starting value
- if ( unit !== "px" ) {
- jQuery.style( this, p, (end || 1) + unit);
- start = ((end || 1) / e.cur()) * start;
- jQuery.style( this, p, start + unit);
- }
-
- // If a +=/-= token was provided, we're doing a relative animation
- if ( parts[1] ) {
- end = ( (parts[ 1 ] === "-=" ? -1 : 1) * end ) + start;
- }
-
- e.custom( start, end, unit );
-
- } else {
- e.custom( start, val, "" );
- }
- }
- }
-
- // For JS strict compliance
- return true;
- });
- },
-
- stop: function( clearQueue, gotoEnd ) {
- if ( clearQueue ) {
- this.queue([]);
- }
-
- this.each(function() {
- var timers = jQuery.timers,
- i = timers.length;
- // clear marker counters if we know they won't be
- if ( !gotoEnd ) {
- jQuery._unmark( true, this );
- }
- while ( i-- ) {
- if ( timers[i].elem === this ) {
- if (gotoEnd) {
- // force the next step to be the last
- timers[i](true);
- }
-
- timers.splice(i, 1);
- }
- }
- });
-
- // start the next in the queue if the last step wasn't forced
- if ( !gotoEnd ) {
- this.dequeue();
- }
-
- return this;
- }
-
-});
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
- setTimeout( clearFxNow, 0 );
- return ( fxNow = jQuery.now() );
-}
-
-function clearFxNow() {
- fxNow = undefined;
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, num ) {
- var obj = {};
-
- jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
- obj[ this ] = type;
- });
-
- return obj;
-}
-
-// Generate shortcuts for custom animations
-jQuery.each({
- slideDown: genFx("show", 1),
- slideUp: genFx("hide", 1),
- slideToggle: genFx("toggle", 1),
- fadeIn: { opacity: "show" },
- fadeOut: { opacity: "hide" },
- fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
- jQuery.fn[ name ] = function( speed, easing, callback ) {
- return this.animate( props, speed, easing, callback );
- };
-});
-
-jQuery.extend({
- speed: function( speed, easing, fn ) {
- var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
- complete: fn || !fn && easing ||
- jQuery.isFunction( speed ) && speed,
- duration: speed,
- easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
- };
-
- opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
- opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
-
- // Queueing
- opt.old = opt.complete;
- opt.complete = function( noUnmark ) {
- if ( jQuery.isFunction( opt.old ) ) {
- opt.old.call( this );
- }
-
- if ( opt.queue !== false ) {
- jQuery.dequeue( this );
- } else if ( noUnmark !== false ) {
- jQuery._unmark( this );
- }
- };
-
- return opt;
- },
-
- easing: {
- linear: function( p, n, firstNum, diff ) {
- return firstNum + diff * p;
- },
- swing: function( p, n, firstNum, diff ) {
- return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
- }
- },
-
- timers: [],
-
- fx: function( elem, options, prop ) {
- this.options = options;
- this.elem = elem;
- this.prop = prop;
-
- options.orig = options.orig || {};
- }
-
-});
-
-jQuery.fx.prototype = {
- // Simple function for setting a style value
- update: function() {
- if ( this.options.step ) {
- this.options.step.call( this.elem, this.now, this );
- }
-
- (jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
- },
-
- // Get the current size
- cur: function() {
- if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
- return this.elem[ this.prop ];
- }
-
- var parsed,
- r = jQuery.css( this.elem, this.prop );
- // Empty strings, null, undefined and "auto" are converted to 0,
- // complex values such as "rotate(1rad)" are returned as is,
- // simple values such as "10px" are parsed to Float.
- return isNaN( parsed = parseFloat( r ) ) ? !r || r === "auto" ? 0 : r : parsed;
- },
-
- // Start an animation from one number to another
- custom: function( from, to, unit ) {
- var self = this,
- fx = jQuery.fx;
-
- this.startTime = fxNow || createFxNow();
- this.start = from;
- this.end = to;
- this.unit = unit || this.unit || ( jQuery.cssNumber[ this.prop ] ? "" : "px" );
- this.now = this.start;
- this.pos = this.state = 0;
-
- function t( gotoEnd ) {
- return self.step(gotoEnd);
- }
-
- t.elem = this.elem;
-
- if ( t() && jQuery.timers.push(t) && !timerId ) {
- timerId = setInterval( fx.tick, fx.interval );
- }
- },
-
- // Simple 'show' function
- show: function() {
- // Remember where we started, so that we can go back to it later
- this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
- this.options.show = true;
-
- // Begin the animation
- // Make sure that we start at a small width/height to avoid any
- // flash of content
- this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
-
- // Start by showing the element
- jQuery( this.elem ).show();
- },
-
- // Simple 'hide' function
- hide: function() {
- // Remember where we started, so that we can go back to it later
- this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
- this.options.hide = true;
-
- // Begin the animation
- this.custom(this.cur(), 0);
- },
-
- // Each step of an animation
- step: function( gotoEnd ) {
- var t = fxNow || createFxNow(),
- done = true,
- elem = this.elem,
- options = this.options,
- i, n;
-
- if ( gotoEnd || t >= options.duration + this.startTime ) {
- this.now = this.end;
- this.pos = this.state = 1;
- this.update();
-
- options.animatedProperties[ this.prop ] = true;
-
- for ( i in options.animatedProperties ) {
- if ( options.animatedProperties[i] !== true ) {
- done = false;
- }
- }
-
- if ( done ) {
- // Reset the overflow
- if ( options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
-
- jQuery.each( [ "", "X", "Y" ], function (index, value) {
- elem.style[ "overflow" + value ] = options.overflow[index];
- });
- }
-
- // Hide the element if the "hide" operation was done
- if ( options.hide ) {
- jQuery(elem).hide();
- }
-
- // Reset the properties, if the item has been hidden or shown
- if ( options.hide || options.show ) {
- for ( var p in options.animatedProperties ) {
- jQuery.style( elem, p, options.orig[p] );
- }
- }
-
- // Execute the complete function
- options.complete.call( elem );
- }
-
- return false;
-
- } else {
- // classical easing cannot be used with an Infinity duration
- if ( options.duration == Infinity ) {
- this.now = t;
- } else {
- n = t - this.startTime;
- this.state = n / options.duration;
-
- // Perform the easing function, defaults to swing
- this.pos = jQuery.easing[ options.animatedProperties[ this.prop ] ]( this.state, n, 0, 1, options.duration );
- this.now = this.start + ((this.end - this.start) * this.pos);
- }
- // Perform the next step of the animation
- this.update();
- }
-
- return true;
- }
-};
-
-jQuery.extend( jQuery.fx, {
- tick: function() {
- for ( var timers = jQuery.timers, i = 0 ; i < timers.length ; ++i ) {
- if ( !timers[i]() ) {
- timers.splice(i--, 1);
- }
- }
-
- if ( !timers.length ) {
- jQuery.fx.stop();
- }
- },
-
- interval: 13,
-
- stop: function() {
- clearInterval( timerId );
- timerId = null;
- },
-
- speeds: {
- slow: 600,
- fast: 200,
- // Default speed
- _default: 400
- },
-
- step: {
- opacity: function( fx ) {
- jQuery.style( fx.elem, "opacity", fx.now );
- },
-
- _default: function( fx ) {
- if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
- fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
- } else {
- fx.elem[ fx.prop ] = fx.now;
- }
- }
- }
-});
-
-if ( jQuery.expr && jQuery.expr.filters ) {
- jQuery.expr.filters.animated = function( elem ) {
- return jQuery.grep(jQuery.timers, function( fn ) {
- return elem === fn.elem;
- }).length;
- };
-}
-
-// Try to restore the default display value of an element
-function defaultDisplay( nodeName ) {
-
- if ( !elemdisplay[ nodeName ] ) {
-
- var body = document.body,
- elem = jQuery( "<" + nodeName + ">" ).appendTo( body ),
- display = elem.css( "display" );
-
- elem.remove();
-
- // If the simple way fails,
- // get element's real default display by attaching it to a temp iframe
- if ( display === "none" || display === "" ) {
- // No iframe to use yet, so create it
- if ( !iframe ) {
- iframe = document.createElement( "iframe" );
- iframe.frameBorder = iframe.width = iframe.height = 0;
- }
-
- body.appendChild( iframe );
-
- // Create a cacheable copy of the iframe document on first call.
- // IE and Opera will allow us to reuse the iframeDoc without re-writing the fake HTML
- // document to it; WebKit & Firefox won't allow reusing the iframe document.
- if ( !iframeDoc || !iframe.createElement ) {
- iframeDoc = ( iframe.contentWindow || iframe.contentDocument ).document;
- iframeDoc.write( ( document.compatMode === "CSS1Compat" ? "<!doctype html>" : "" ) + "<html><body>" );
- iframeDoc.close();
- }
-
- elem = iframeDoc.createElement( nodeName );
-
- iframeDoc.body.appendChild( elem );
-
- display = jQuery.css( elem, "display" );
-
- body.removeChild( iframe );
- }
-
- // Store the correct default display
- elemdisplay[ nodeName ] = display;
- }
-
- return elemdisplay[ nodeName ];
-}
-
-
-
-
-var rtable = /^t(?:able|d|h)$/i,
- rroot = /^(?:body|html)$/i;
-
-if ( "getBoundingClientRect" in document.documentElement ) {
- jQuery.fn.offset = function( options ) {
- var elem = this[0], box;
-
- if ( options ) {
- return this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- if ( !elem || !elem.ownerDocument ) {
- return null;
- }
-
- if ( elem === elem.ownerDocument.body ) {
- return jQuery.offset.bodyOffset( elem );
- }
-
- try {
- box = elem.getBoundingClientRect();
- } catch(e) {}
-
- var doc = elem.ownerDocument,
- docElem = doc.documentElement;
-
- // Make sure we're not dealing with a disconnected DOM node
- if ( !box || !jQuery.contains( docElem, elem ) ) {
- return box ? { top: box.top, left: box.left } : { top: 0, left: 0 };
- }
-
- var body = doc.body,
- win = getWindow(doc),
- clientTop = docElem.clientTop || body.clientTop || 0,
- clientLeft = docElem.clientLeft || body.clientLeft || 0,
- scrollTop = win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop,
- scrollLeft = win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft,
- top = box.top + scrollTop - clientTop,
- left = box.left + scrollLeft - clientLeft;
-
- return { top: top, left: left };
- };
-
-} else {
- jQuery.fn.offset = function( options ) {
- var elem = this[0];
-
- if ( options ) {
- return this.each(function( i ) {
- jQuery.offset.setOffset( this, options, i );
- });
- }
-
- if ( !elem || !elem.ownerDocument ) {
- return null;
- }
-
- if ( elem === elem.ownerDocument.body ) {
- return jQuery.offset.bodyOffset( elem );
- }
-
- jQuery.offset.initialize();
-
- var computedStyle,
- offsetParent = elem.offsetParent,
- prevOffsetParent = elem,
- doc = elem.ownerDocument,
- docElem = doc.documentElement,
- body = doc.body,
- defaultView = doc.defaultView,
- prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
- top = elem.offsetTop,
- left = elem.offsetLeft;
-
- while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
- if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
- break;
- }
-
- computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
- top -= elem.scrollTop;
- left -= elem.scrollLeft;
-
- if ( elem === offsetParent ) {
- top += elem.offsetTop;
- left += elem.offsetLeft;
-
- if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
- top += parseFloat( computedStyle.borderTopWidth ) || 0;
- left += parseFloat( computedStyle.borderLeftWidth ) || 0;
- }
-
- prevOffsetParent = offsetParent;
- offsetParent = elem.offsetParent;
- }
-
- if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
- top += parseFloat( computedStyle.borderTopWidth ) || 0;
- left += parseFloat( computedStyle.borderLeftWidth ) || 0;
- }
-
- prevComputedStyle = computedStyle;
- }
-
- if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
- top += body.offsetTop;
- left += body.offsetLeft;
- }
-
- if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
- top += Math.max( docElem.scrollTop, body.scrollTop );
- left += Math.max( docElem.scrollLeft, body.scrollLeft );
- }
-
- return { top: top, left: left };
- };
-}
-
-jQuery.offset = {
- initialize: function() {
- var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
- html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
-
- jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
-
- container.innerHTML = html;
- body.insertBefore( container, body.firstChild );
- innerDiv = container.firstChild;
- checkDiv = innerDiv.firstChild;
- td = innerDiv.nextSibling.firstChild.firstChild;
-
- this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
- this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
-
- checkDiv.style.position = "fixed";
- checkDiv.style.top = "20px";
-
- // safari subtracts parent border width here which is 5px
- this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
- checkDiv.style.position = checkDiv.style.top = "";
-
- innerDiv.style.overflow = "hidden";
- innerDiv.style.position = "relative";
-
- this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
-
- this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
-
- body.removeChild( container );
- jQuery.offset.initialize = jQuery.noop;
- },
-
- bodyOffset: function( body ) {
- var top = body.offsetTop,
- left = body.offsetLeft;
-
- jQuery.offset.initialize();
-
- if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
- top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
- left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
- }
-
- return { top: top, left: left };
- },
-
- setOffset: function( elem, options, i ) {
- var position = jQuery.css( elem, "position" );
-
- // set position first, in-case top/left are set even on static elem
- if ( position === "static" ) {
- elem.style.position = "relative";
- }
-
- var curElem = jQuery( elem ),
- curOffset = curElem.offset(),
- curCSSTop = jQuery.css( elem, "top" ),
- curCSSLeft = jQuery.css( elem, "left" ),
- calculatePosition = (position === "absolute" || position === "fixed") && jQuery.inArray("auto", [curCSSTop, curCSSLeft]) > -1,
- props = {}, curPosition = {}, curTop, curLeft;
-
- // need to be able to calculate position if either top or left is auto and position is either absolute or fixed
- if ( calculatePosition ) {
- curPosition = curElem.position();
- curTop = curPosition.top;
- curLeft = curPosition.left;
- } else {
- curTop = parseFloat( curCSSTop ) || 0;
- curLeft = parseFloat( curCSSLeft ) || 0;
- }
-
- if ( jQuery.isFunction( options ) ) {
- options = options.call( elem, i, curOffset );
- }
-
- if (options.top != null) {
- props.top = (options.top - curOffset.top) + curTop;
- }
- if (options.left != null) {
- props.left = (options.left - curOffset.left) + curLeft;
- }
-
- if ( "using" in options ) {
- options.using.call( elem, props );
- } else {
- curElem.css( props );
- }
- }
-};
-
-
-jQuery.fn.extend({
- position: function() {
- if ( !this[0] ) {
- return null;
- }
-
- var elem = this[0],
-
- // Get *real* offsetParent
- offsetParent = this.offsetParent(),
-
- // Get correct offsets
- offset = this.offset(),
- parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
-
- // Subtract element margins
- // note: when an element has margin: auto the offsetLeft and marginLeft
- // are the same in Safari causing offset.left to incorrectly be 0
- offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
- offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
-
- // Add offsetParent borders
- parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
- parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
-
- // Subtract the two offsets
- return {
- top: offset.top - parentOffset.top,
- left: offset.left - parentOffset.left
- };
- },
-
- offsetParent: function() {
- return this.map(function() {
- var offsetParent = this.offsetParent || document.body;
- while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
- offsetParent = offsetParent.offsetParent;
- }
- return offsetParent;
- });
- }
-});
-
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( ["Left", "Top"], function( i, name ) {
- var method = "scroll" + name;
-
- jQuery.fn[ method ] = function( val ) {
- var elem, win;
-
- if ( val === undefined ) {
- elem = this[ 0 ];
-
- if ( !elem ) {
- return null;
- }
-
- win = getWindow( elem );
-
- // Return the scroll offset
- return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
- jQuery.support.boxModel && win.document.documentElement[ method ] ||
- win.document.body[ method ] :
- elem[ method ];
- }
-
- // Set the scroll offset
- return this.each(function() {
- win = getWindow( this );
-
- if ( win ) {
- win.scrollTo(
- !i ? val : jQuery( win ).scrollLeft(),
- i ? val : jQuery( win ).scrollTop()
- );
-
- } else {
- this[ method ] = val;
- }
- });
- };
-});
-
-function getWindow( elem ) {
- return jQuery.isWindow( elem ) ?
- elem :
- elem.nodeType === 9 ?
- elem.defaultView || elem.parentWindow :
- false;
-}
-
-
-
-
-// Create width, height, innerHeight, innerWidth, outerHeight and outerWidth methods
-jQuery.each([ "Height", "Width" ], function( i, name ) {
-
- var type = name.toLowerCase();
-
- // innerHeight and innerWidth
- jQuery.fn[ "inner" + name ] = function() {
- var elem = this[0];
- return elem && elem.style ?
- parseFloat( jQuery.css( elem, type, "padding" ) ) :
- null;
- };
-
- // outerHeight and outerWidth
- jQuery.fn[ "outer" + name ] = function( margin ) {
- var elem = this[0];
- return elem && elem.style ?
- parseFloat( jQuery.css( elem, type, margin ? "margin" : "border" ) ) :
- null;
- };
-
- jQuery.fn[ type ] = function( size ) {
- // Get window width or height
- var elem = this[0];
- if ( !elem ) {
- return size == null ? null : this;
- }
-
- if ( jQuery.isFunction( size ) ) {
- return this.each(function( i ) {
- var self = jQuery( this );
- self[ type ]( size.call( this, i, self[ type ]() ) );
- });
- }
-
- if ( jQuery.isWindow( elem ) ) {
- // Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
- // 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
- var docElemProp = elem.document.documentElement[ "client" + name ],
- body = elem.document.body;
- return elem.document.compatMode === "CSS1Compat" && docElemProp ||
- body && body[ "client" + name ] || docElemProp;
-
- // Get document width or height
- } else if ( elem.nodeType === 9 ) {
- // Either scroll[Width/Height] or offset[Width/Height], whichever is greater
- return Math.max(
- elem.documentElement["client" + name],
- elem.body["scroll" + name], elem.documentElement["scroll" + name],
- elem.body["offset" + name], elem.documentElement["offset" + name]
- );
-
- // Get or set width or height on the element
- } else if ( size === undefined ) {
- var orig = jQuery.css( elem, type ),
- ret = parseFloat( orig );
-
- return jQuery.isNaN( ret ) ? orig : ret;
-
- // Set the width or height on the element (default to pixels if value is unitless)
- } else {
- return this.css( type, typeof size === "string" ? size : size + "px" );
- }
- };
-
-});
-
-
-// Expose jQuery to the global object
-window.jQuery = window.$ = jQuery;
-})(window);
diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.min.js b/wqflask/wqflask/static/packages/jqplot/jquery.min.js
deleted file mode 100644
index b6b6e46e..00000000
--- a/wqflask/wqflask/static/packages/jqplot/jquery.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
-(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete
-t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean
-(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.validate.js b/wqflask/wqflask/static/packages/jqplot/jquery.validate.js
deleted file mode 100644
index 794e9017..00000000
--- a/wqflask/wqflask/static/packages/jqplot/jquery.validate.js
+++ /dev/null
@@ -1,1248 +0,0 @@
-/*! jQuery Validation Plugin - v1.10.0 - 9/7/2012
-* https://github.com/jzaefferer/jquery-validation
-* Copyright (c) 2012 Jörn Zaefferer; Licensed MIT, GPL */
-
-(function($) {
-
-$.extend($.fn, {
- // http://docs.jquery.com/Plugins/Validation/validate
- validate: function( options ) {
-
- // if nothing is selected, return nothing; can't chain anyway
- if (!this.length) {
- if (options && options.debug && window.console) {
- console.warn( "nothing selected, can't validate, returning nothing" );
- }
- return;
- }
-
- // check if a validator for this form was already created
- var validator = $.data(this[0], 'validator');
- if ( validator ) {
- return validator;
- }
-
- // Add novalidate tag if HTML5.
- this.attr('novalidate', 'novalidate');
-
- validator = new $.validator( options, this[0] );
- $.data(this[0], 'validator', validator);
-
- if ( validator.settings.onsubmit ) {
-
- this.validateDelegate( ":submit", "click", function(ev) {
- if ( validator.settings.submitHandler ) {
- validator.submitButton = ev.target;
- }
- // allow suppressing validation by adding a cancel class to the submit button
- if ( $(ev.target).hasClass('cancel') ) {
- validator.cancelSubmit = true;
- }
- });
-
- // validate the form on submit
- this.submit( function( event ) {
- if ( validator.settings.debug ) {
- // prevent form submit to be able to see console output
- event.preventDefault();
- }
- function handle() {
- var hidden;
- if ( validator.settings.submitHandler ) {
- if (validator.submitButton) {
- // insert a hidden input as a replacement for the missing submit button
- hidden = $("<input type='hidden'/>").attr("name", validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);
- }
- validator.settings.submitHandler.call( validator, validator.currentForm, event );
- if (validator.submitButton) {
- // and clean up afterwards; thanks to no-block-scope, hidden can be referenced
- hidden.remove();
- }
- return false;
- }
- return true;
- }
-
- // prevent submit for invalid forms or custom submit handlers
- if ( validator.cancelSubmit ) {
- validator.cancelSubmit = false;
- return handle();
- }
- if ( validator.form() ) {
- if ( validator.pendingRequest ) {
- validator.formSubmitted = true;
- return false;
- }
- return handle();
- } else {
- validator.focusInvalid();
- return false;
- }
- });
- }
-
- return validator;
- },
- // http://docs.jquery.com/Plugins/Validation/valid
- valid: function() {
- if ( $(this[0]).is('form')) {
- return this.validate().form();
- } else {
- var valid = true;
- var validator = $(this[0].form).validate();
- this.each(function() {
- valid &= validator.element(this);
- });
- return valid;
- }
- },
- // attributes: space seperated list of attributes to retrieve and remove
- removeAttrs: function(attributes) {
- var result = {},
- $element = this;
- $.each(attributes.split(/\s/), function(index, value) {
- result[value] = $element.attr(value);
- $element.removeAttr(value);
- });
- return result;
- },
- // http://docs.jquery.com/Plugins/Validation/rules
- rules: function(command, argument) {
- var element = this[0];
-
- if (command) {
- var settings = $.data(element.form, 'validator').settings;
- var staticRules = settings.rules;
- var existingRules = $.validator.staticRules(element);
- switch(command) {
- case "add":
- $.extend(existingRules, $.validator.normalizeRule(argument));
- staticRules[element.name] = existingRules;
- if (argument.messages) {
- settings.messages[element.name] = $.extend( settings.messages[element.name], argument.messages );
- }
- break;
- case "remove":
- if (!argument) {
- delete staticRules[element.name];
- return existingRules;
- }
- var filtered = {};
- $.each(argument.split(/\s/), function(index, method) {
- filtered[method] = existingRules[method];
- delete existingRules[method];
- });
- return filtered;
- }
- }
-
- var data = $.validator.normalizeRules(
- $.extend(
- {},
- $.validator.metadataRules(element),
- $.validator.classRules(element),
- $.validator.attributeRules(element),
- $.validator.staticRules(element)
- ), element);
-
- // make sure required is at front
- if (data.required) {
- var param = data.required;
- delete data.required;
- data = $.extend({required: param}, data);
- }
-
- return data;
- }
-});
-
-// Custom selectors
-$.extend($.expr[":"], {
- // http://docs.jquery.com/Plugins/Validation/blank
- blank: function(a) {return !$.trim("" + a.value);},
- // http://docs.jquery.com/Plugins/Validation/filled
- filled: function(a) {return !!$.trim("" + a.value);},
- // http://docs.jquery.com/Plugins/Validation/unchecked
- unchecked: function(a) {return !a.checked;}
-});
-
-// constructor for validator
-$.validator = function( options, form ) {
- this.settings = $.extend( true, {}, $.validator.defaults, options );
- this.currentForm = form;
- this.init();
-};
-
-$.validator.format = function(source, params) {
- if ( arguments.length === 1 ) {
- return function() {
- var args = $.makeArray(arguments);
- args.unshift(source);
- return $.validator.format.apply( this, args );
- };
- }
- if ( arguments.length > 2 && params.constructor !== Array ) {
- params = $.makeArray(arguments).slice(1);
- }
- if ( params.constructor !== Array ) {
- params = [ params ];
- }
- $.each(params, function(i, n) {
- source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n);
- });
- return source;
-};
-
-$.extend($.validator, {
-
- defaults: {
- messages: {},
- groups: {},
- rules: {},
- errorClass: "error",
- validClass: "valid",
- errorElement: "label",
- focusInvalid: true,
- errorContainer: $( [] ),
- errorLabelContainer: $( [] ),
- onsubmit: true,
- ignore: ":hidden",
- ignoreTitle: false,
- onfocusin: function(element, event) {
- this.lastActive = element;
-
- // hide error label and remove error class on focus if enabled
- if ( this.settings.focusCleanup && !this.blockFocusCleanup ) {
- if ( this.settings.unhighlight ) {
- this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass );
- }
- this.addWrapper(this.errorsFor(element)).hide();
- }
- },
- onfocusout: function(element, event) {
- if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) {
- this.element(element);
- }
- },
- onkeyup: function(element, event) {
- if ( event.which === 9 && this.elementValue(element) === '' ) {
- return;
- } else if ( element.name in this.submitted || element === this.lastActive ) {
- this.element(element);
- }
- },
- onclick: function(element, event) {
- // click on selects, radiobuttons and checkboxes
- if ( element.name in this.submitted ) {
- this.element(element);
- }
- // or option elements, check parent select in that case
- else if (element.parentNode.name in this.submitted) {
- this.element(element.parentNode);
- }
- },
- highlight: function(element, errorClass, validClass) {
- if (element.type === 'radio') {
- this.findByName(element.name).addClass(errorClass).removeClass(validClass);
- } else {
- $(element).addClass(errorClass).removeClass(validClass);
- }
- },
- unhighlight: function(element, errorClass, validClass) {
- if (element.type === 'radio') {
- this.findByName(element.name).removeClass(errorClass).addClass(validClass);
- } else {
- $(element).removeClass(errorClass).addClass(validClass);
- }
- }
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/setDefaults
- setDefaults: function(settings) {
- $.extend( $.validator.defaults, settings );
- },
-
- messages: {
- required: "This field is required.",
- remote: "Please fix this field.",
- email: "Please enter a valid email address.",
- url: "Please enter a valid URL.",
- date: "Please enter a valid date.",
- dateISO: "Please enter a valid date (ISO).",
- number: "Please enter a valid number.",
- digits: "Please enter only digits.",
- creditcard: "Please enter a valid credit card number.",
- equalTo: "Please enter the same value again.",
- maxlength: $.validator.format("Please enter no more than {0} characters."),
- minlength: $.validator.format("Please enter at least {0} characters."),
- rangelength: $.validator.format("Please enter a value between {0} and {1} characters long."),
- range: $.validator.format("Please enter a value between {0} and {1}."),
- max: $.validator.format("Please enter a value less than or equal to {0}."),
- min: $.validator.format("Please enter a value greater than or equal to {0}.")
- },
-
- autoCreateRanges: false,
-
- prototype: {
-
- init: function() {
- this.labelContainer = $(this.settings.errorLabelContainer);
- this.errorContext = this.labelContainer.length && this.labelContainer || $(this.currentForm);
- this.containers = $(this.settings.errorContainer).add( this.settings.errorLabelContainer );
- this.submitted = {};
- this.valueCache = {};
- this.pendingRequest = 0;
- this.pending = {};
- this.invalid = {};
- this.reset();
-
- var groups = (this.groups = {});
- $.each(this.settings.groups, function(key, value) {
- $.each(value.split(/\s/), function(index, name) {
- groups[name] = key;
- });
- });
- var rules = this.settings.rules;
- $.each(rules, function(key, value) {
- rules[key] = $.validator.normalizeRule(value);
- });
-
- function delegate(event) {
- var validator = $.data(this[0].form, "validator"),
- eventType = "on" + event.type.replace(/^validate/, "");
- if (validator.settings[eventType]) {
- validator.settings[eventType].call(validator, this[0], event);
- }
- }
- $(this.currentForm)
- .validateDelegate(":text, [type='password'], [type='file'], select, textarea, " +
- "[type='number'], [type='search'] ,[type='tel'], [type='url'], " +
- "[type='email'], [type='datetime'], [type='date'], [type='month'], " +
- "[type='week'], [type='time'], [type='datetime-local'], " +
- "[type='range'], [type='color'] ",
- "focusin focusout keyup", delegate)
- .validateDelegate("[type='radio'], [type='checkbox'], select, option", "click", delegate);
-
- if (this.settings.invalidHandler) {
- $(this.currentForm).bind("invalid-form.validate", this.settings.invalidHandler);
- }
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/form
- form: function() {
- this.checkForm();
- $.extend(this.submitted, this.errorMap);
- this.invalid = $.extend({}, this.errorMap);
- if (!this.valid()) {
- $(this.currentForm).triggerHandler("invalid-form", [this]);
- }
- this.showErrors();
- return this.valid();
- },
-
- checkForm: function() {
- this.prepareForm();
- for ( var i = 0, elements = (this.currentElements = this.elements()); elements[i]; i++ ) {
- this.check( elements[i] );
- }
- return this.valid();
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/element
- element: function( element ) {
- element = this.validationTargetFor( this.clean( element ) );
- this.lastElement = element;
- this.prepareElement( element );
- this.currentElements = $(element);
- var result = this.check( element ) !== false;
- if (result) {
- delete this.invalid[element.name];
- } else {
- this.invalid[element.name] = true;
- }
- if ( !this.numberOfInvalids() ) {
- // Hide error containers on last error
- this.toHide = this.toHide.add( this.containers );
- }
- this.showErrors();
- return result;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/showErrors
- showErrors: function(errors) {
- if(errors) {
- // add items to error list and map
- $.extend( this.errorMap, errors );
- this.errorList = [];
- for ( var name in errors ) {
- this.errorList.push({
- message: errors[name],
- element: this.findByName(name)[0]
- });
- }
- // remove items from success list
- this.successList = $.grep( this.successList, function(element) {
- return !(element.name in errors);
- });
- }
- if (this.settings.showErrors) {
- this.settings.showErrors.call( this, this.errorMap, this.errorList );
- } else {
- this.defaultShowErrors();
- }
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/resetForm
- resetForm: function() {
- if ( $.fn.resetForm ) {
- $( this.currentForm ).resetForm();
- }
- this.submitted = {};
- this.lastElement = null;
- this.prepareForm();
- this.hideErrors();
- this.elements().removeClass( this.settings.errorClass ).removeData( "previousValue" );
- },
-
- numberOfInvalids: function() {
- return this.objectLength(this.invalid);
- },
-
- objectLength: function( obj ) {
- var count = 0;
- for ( var i in obj ) {
- count++;
- }
- return count;
- },
-
- hideErrors: function() {
- this.addWrapper( this.toHide ).hide();
- },
-
- valid: function() {
- return this.size() === 0;
- },
-
- size: function() {
- return this.errorList.length;
- },
-
- focusInvalid: function() {
- if( this.settings.focusInvalid ) {
- try {
- $(this.findLastActive() || this.errorList.length && this.errorList[0].element || [])
- .filter(":visible")
- .focus()
- // manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find
- .trigger("focusin");
- } catch(e) {
- // ignore IE throwing errors when focusing hidden elements
- }
- }
- },
-
- findLastActive: function() {
- var lastActive = this.lastActive;
- return lastActive && $.grep(this.errorList, function(n) {
- return n.element.name === lastActive.name;
- }).length === 1 && lastActive;
- },
-
- elements: function() {
- var validator = this,
- rulesCache = {};
-
- // select all valid inputs inside the form (no submit or reset buttons)
- return $(this.currentForm)
- .find("input, select, textarea")
- .not(":submit, :reset, :image, [disabled]")
- .not( this.settings.ignore )
- .filter(function() {
- if ( !this.name && validator.settings.debug && window.console ) {
- console.error( "%o has no name assigned", this);
- }
-
- // select only the first element for each name, and only those with rules specified
- if ( this.name in rulesCache || !validator.objectLength($(this).rules()) ) {
- return false;
- }
-
- rulesCache[this.name] = true;
- return true;
- });
- },
-
- clean: function( selector ) {
- return $( selector )[0];
- },
-
- errors: function() {
- var errorClass = this.settings.errorClass.replace(' ', '.');
- return $( this.settings.errorElement + "." + errorClass, this.errorContext );
- },
-
- reset: function() {
- this.successList = [];
- this.errorList = [];
- this.errorMap = {};
- this.toShow = $([]);
- this.toHide = $([]);
- this.currentElements = $([]);
- },
-
- prepareForm: function() {
- this.reset();
- this.toHide = this.errors().add( this.containers );
- },
-
- prepareElement: function( element ) {
- this.reset();
- this.toHide = this.errorsFor(element);
- },
-
- elementValue: function( element ) {
- var type = $(element).attr('type'),
- val = $(element).val();
-
- if ( type === 'radio' || type === 'checkbox' ) {
- return $('input[name="' + $(element).attr('name') + '"]:checked').val();
- }
-
- if ( typeof val === 'string' ) {
- return val.replace(/\r/g, "");
- }
- return val;
- },
-
- check: function( element ) {
- element = this.validationTargetFor( this.clean( element ) );
-
- var rules = $(element).rules();
- var dependencyMismatch = false;
- var val = this.elementValue(element);
- var result;
-
- for (var method in rules ) {
- var rule = { method: method, parameters: rules[method] };
- try {
-
- result = $.validator.methods[method].call( this, val, element, rule.parameters );
-
- // if a method indicates that the field is optional and therefore valid,
- // don't mark it as valid when there are no other rules
- if ( result === "dependency-mismatch" ) {
- dependencyMismatch = true;
- continue;
- }
- dependencyMismatch = false;
-
- if ( result === "pending" ) {
- this.toHide = this.toHide.not( this.errorsFor(element) );
- return;
- }
-
- if( !result ) {
- this.formatAndAdd( element, rule );
- return false;
- }
- } catch(e) {
- if ( this.settings.debug && window.console ) {
- console.log("exception occured when checking element " + element.id + ", check the '" + rule.method + "' method", e);
- }
- throw e;
- }
- }
- if (dependencyMismatch) {
- return;
- }
- if ( this.objectLength(rules) ) {
- this.successList.push(element);
- }
- return true;
- },
-
- // return the custom message for the given element and validation method
- // specified in the element's "messages" metadata
- customMetaMessage: function(element, method) {
- if (!$.metadata) {
- return;
- }
- var meta = this.settings.meta ? $(element).metadata()[this.settings.meta] : $(element).metadata();
- return meta && meta.messages && meta.messages[method];
- },
-
- // return the custom message for the given element and validation method
- // specified in the element's HTML5 data attribute
- customDataMessage: function(element, method) {
- return $(element).data('msg-' + method.toLowerCase()) || (element.attributes && $(element).attr('data-msg-' + method.toLowerCase()));
- },
-
- // return the custom message for the given element name and validation method
- customMessage: function( name, method ) {
- var m = this.settings.messages[name];
- return m && (m.constructor === String ? m : m[method]);
- },
-
- // return the first defined argument, allowing empty strings
- findDefined: function() {
- for(var i = 0; i < arguments.length; i++) {
- if (arguments[i] !== undefined) {
- return arguments[i];
- }
- }
- return undefined;
- },
-
- defaultMessage: function( element, method) {
- return this.findDefined(
- this.customMessage( element.name, method ),
- this.customDataMessage( element, method ),
- this.customMetaMessage( element, method ),
- // title is never undefined, so handle empty string as undefined
- !this.settings.ignoreTitle && element.title || undefined,
- $.validator.messages[method],
- "<strong>Warning: No message defined for " + element.name + "</strong>"
- );
- },
-
- formatAndAdd: function( element, rule ) {
- var message = this.defaultMessage( element, rule.method ),
- theregex = /\$?\{(\d+)\}/g;
- if ( typeof message === "function" ) {
- message = message.call(this, rule.parameters, element);
- } else if (theregex.test(message)) {
- message = $.validator.format(message.replace(theregex, '{$1}'), rule.parameters);
- }
- this.errorList.push({
- message: message,
- element: element
- });
-
- this.errorMap[element.name] = message;
- this.submitted[element.name] = message;
- },
-
- addWrapper: function(toToggle) {
- if ( this.settings.wrapper ) {
- toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) );
- }
- return toToggle;
- },
-
- defaultShowErrors: function() {
- var i, elements;
- for ( i = 0; this.errorList[i]; i++ ) {
- var error = this.errorList[i];
- if ( this.settings.highlight ) {
- this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.validClass );
- }
- this.showLabel( error.element, error.message );
- }
- if( this.errorList.length ) {
- this.toShow = this.toShow.add( this.containers );
- }
- if (this.settings.success) {
- for ( i = 0; this.successList[i]; i++ ) {
- this.showLabel( this.successList[i] );
- }
- }
- if (this.settings.unhighlight) {
- for ( i = 0, elements = this.validElements(); elements[i]; i++ ) {
- this.settings.unhighlight.call( this, elements[i], this.settings.errorClass, this.settings.validClass );
- }
- }
- this.toHide = this.toHide.not( this.toShow );
- this.hideErrors();
- this.addWrapper( this.toShow ).show();
- },
-
- validElements: function() {
- return this.currentElements.not(this.invalidElements());
- },
-
- invalidElements: function() {
- return $(this.errorList).map(function() {
- return this.element;
- });
- },
-
- showLabel: function(element, message) {
- var label = this.errorsFor( element );
- if ( label.length ) {
- // refresh error/success class
- label.removeClass( this.settings.validClass ).addClass( this.settings.errorClass );
-
- // check if we have a generated label, replace the message then
- if ( label.attr("generated") ) {
- label.html(message);
- }
- } else {
- // create label
- label = $("<" + this.settings.errorElement + "/>")
- .attr({"for": this.idOrName(element), generated: true})
- .addClass(this.settings.errorClass)
- .html(message || "");
- if ( this.settings.wrapper ) {
- // make sure the element is visible, even in IE
- // actually showing the wrapped element is handled elsewhere
- label = label.hide().show().wrap("<" + this.settings.wrapper + "/>").parent();
- }
- if ( !this.labelContainer.append(label).length ) {
- if ( this.settings.errorPlacement ) {
- this.settings.errorPlacement(label, $(element) );
- } else {
- label.insertAfter(element);
- }
- }
- }
- if ( !message && this.settings.success ) {
- label.text("");
- if ( typeof this.settings.success === "string" ) {
- label.addClass( this.settings.success );
- } else {
- this.settings.success( label, element );
- }
- }
- this.toShow = this.toShow.add(label);
- },
-
- errorsFor: function(element) {
- var name = this.idOrName(element);
- return this.errors().filter(function() {
- return $(this).attr('for') === name;
- });
- },
-
- idOrName: function(element) {
- return this.groups[element.name] || (this.checkable(element) ? element.name : element.id || element.name);
- },
-
- validationTargetFor: function(element) {
- // if radio/checkbox, validate first element in group instead
- if (this.checkable(element)) {
- element = this.findByName( element.name ).not(this.settings.ignore)[0];
- }
- return element;
- },
-
- checkable: function( element ) {
- return (/radio|checkbox/i).test(element.type);
- },
-
- findByName: function( name ) {
- return $(this.currentForm).find('[name="' + name + '"]');
- },
-
- getLength: function(value, element) {
- switch( element.nodeName.toLowerCase() ) {
- case 'select':
- return $("option:selected", element).length;
- case 'input':
- if( this.checkable( element) ) {
- return this.findByName(element.name).filter(':checked').length;
- }
- }
- return value.length;
- },
-
- depend: function(param, element) {
- return this.dependTypes[typeof param] ? this.dependTypes[typeof param](param, element) : true;
- },
-
- dependTypes: {
- "boolean": function(param, element) {
- return param;
- },
- "string": function(param, element) {
- return !!$(param, element.form).length;
- },
- "function": function(param, element) {
- return param(element);
- }
- },
-
- optional: function(element) {
- var val = this.elementValue(element);
- return !$.validator.methods.required.call(this, val, element) && "dependency-mismatch";
- },
-
- startRequest: function(element) {
- if (!this.pending[element.name]) {
- this.pendingRequest++;
- this.pending[element.name] = true;
- }
- },
-
- stopRequest: function(element, valid) {
- this.pendingRequest--;
- // sometimes synchronization fails, make sure pendingRequest is never < 0
- if (this.pendingRequest < 0) {
- this.pendingRequest = 0;
- }
- delete this.pending[element.name];
- if ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() ) {
- $(this.currentForm).submit();
- this.formSubmitted = false;
- } else if (!valid && this.pendingRequest === 0 && this.formSubmitted) {
- $(this.currentForm).triggerHandler("invalid-form", [this]);
- this.formSubmitted = false;
- }
- },
-
- previousValue: function(element) {
- return $.data(element, "previousValue") || $.data(element, "previousValue", {
- old: null,
- valid: true,
- message: this.defaultMessage( element, "remote" )
- });
- }
-
- },
-
- classRuleSettings: {
- required: {required: true},
- email: {email: true},
- url: {url: true},
- date: {date: true},
- dateISO: {dateISO: true},
- number: {number: true},
- digits: {digits: true},
- creditcard: {creditcard: true}
- },
-
- addClassRules: function(className, rules) {
- if ( className.constructor === String ) {
- this.classRuleSettings[className] = rules;
- } else {
- $.extend(this.classRuleSettings, className);
- }
- },
-
- classRules: function(element) {
- var rules = {};
- var classes = $(element).attr('class');
- if ( classes ) {
- $.each(classes.split(' '), function() {
- if (this in $.validator.classRuleSettings) {
- $.extend(rules, $.validator.classRuleSettings[this]);
- }
- });
- }
- return rules;
- },
-
- attributeRules: function(element) {
- var rules = {};
- var $element = $(element);
-
- for (var method in $.validator.methods) {
- var value;
-
- // support for <input required> in both html5 and older browsers
- if (method === 'required') {
- value = $element.get(0).getAttribute(method);
- // Some browsers return an empty string for the required attribute
- // and non-HTML5 browsers might have required="" markup
- if (value === "") {
- value = true;
- }
- // force non-HTML5 browsers to return bool
- value = !!value;
- } else {
- value = $element.attr(method);
- }
-
- if (value) {
- rules[method] = value;
- } else if ($element[0].getAttribute("type") === method) {
- rules[method] = true;
- }
- }
-
- // maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs
- if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) {
- delete rules.maxlength;
- }
-
- return rules;
- },
-
- metadataRules: function(element) {
- if (!$.metadata) {
- return {};
- }
-
- var meta = $.data(element.form, 'validator').settings.meta;
- return meta ?
- $(element).metadata()[meta] :
- $(element).metadata();
- },
-
- staticRules: function(element) {
- var rules = {};
- var validator = $.data(element.form, 'validator');
- if (validator.settings.rules) {
- rules = $.validator.normalizeRule(validator.settings.rules[element.name]) || {};
- }
- return rules;
- },
-
- normalizeRules: function(rules, element) {
- // handle dependency check
- $.each(rules, function(prop, val) {
- // ignore rule when param is explicitly false, eg. required:false
- if (val === false) {
- delete rules[prop];
- return;
- }
- if (val.param || val.depends) {
- var keepRule = true;
- switch (typeof val.depends) {
- case "string":
- keepRule = !!$(val.depends, element.form).length;
- break;
- case "function":
- keepRule = val.depends.call(element, element);
- break;
- }
- if (keepRule) {
- rules[prop] = val.param !== undefined ? val.param : true;
- } else {
- delete rules[prop];
- }
- }
- });
-
- // evaluate parameters
- $.each(rules, function(rule, parameter) {
- rules[rule] = $.isFunction(parameter) ? parameter(element) : parameter;
- });
-
- // clean number parameters
- $.each(['minlength', 'maxlength', 'min', 'max'], function() {
- if (rules[this]) {
- rules[this] = Number(rules[this]);
- }
- });
- $.each(['rangelength', 'range'], function() {
- if (rules[this]) {
- rules[this] = [Number(rules[this][0]), Number(rules[this][1])];
- }
- });
-
- if ($.validator.autoCreateRanges) {
- // auto-create ranges
- if (rules.min && rules.max) {
- rules.range = [rules.min, rules.max];
- delete rules.min;
- delete rules.max;
- }
- if (rules.minlength && rules.maxlength) {
- rules.rangelength = [rules.minlength, rules.maxlength];
- delete rules.minlength;
- delete rules.maxlength;
- }
- }
-
- // To support custom messages in metadata ignore rule methods titled "messages"
- if (rules.messages) {
- delete rules.messages;
- }
-
- return rules;
- },
-
- // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true}
- normalizeRule: function(data) {
- if( typeof data === "string" ) {
- var transformed = {};
- $.each(data.split(/\s/), function() {
- transformed[this] = true;
- });
- data = transformed;
- }
- return data;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Validator/addMethod
- addMethod: function(name, method, message) {
- $.validator.methods[name] = method;
- $.validator.messages[name] = message !== undefined ? message : $.validator.messages[name];
- if (method.length < 3) {
- $.validator.addClassRules(name, $.validator.normalizeRule(name));
- }
- },
-
- methods: {
-
- // http://docs.jquery.com/Plugins/Validation/Methods/required
- required: function(value, element, param) {
- // check if dependency is met
- if ( !this.depend(param, element) ) {
- return "dependency-mismatch";
- }
- if ( element.nodeName.toLowerCase() === "select" ) {
- // could be an array for select-multiple or a string, both are fine this way
- var val = $(element).val();
- return val && val.length > 0;
- }
- if ( this.checkable(element) ) {
- return this.getLength(value, element) > 0;
- }
- return $.trim(value).length > 0;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/remote
- remote: function(value, element, param) {
- if ( this.optional(element) ) {
- return "dependency-mismatch";
- }
-
- var previous = this.previousValue(element);
- if (!this.settings.messages[element.name] ) {
- this.settings.messages[element.name] = {};
- }
- previous.originalMessage = this.settings.messages[element.name].remote;
- this.settings.messages[element.name].remote = previous.message;
-
- param = typeof param === "string" && {url:param} || param;
-
- if ( this.pending[element.name] ) {
- return "pending";
- }
- if ( previous.old === value ) {
- return previous.valid;
- }
-
- previous.old = value;
- var validator = this;
- this.startRequest(element);
- var data = {};
- data[element.name] = value;
- $.ajax($.extend(true, {
- url: param,
- mode: "abort",
- port: "validate" + element.name,
- dataType: "json",
- data: data,
- success: function(response) {
- validator.settings.messages[element.name].remote = previous.originalMessage;
- var valid = response === true || response === "true";
- if ( valid ) {
- var submitted = validator.formSubmitted;
- validator.prepareElement(element);
- validator.formSubmitted = submitted;
- validator.successList.push(element);
- delete validator.invalid[element.name];
- validator.showErrors();
- } else {
- var errors = {};
- var message = response || validator.defaultMessage( element, "remote" );
- errors[element.name] = previous.message = $.isFunction(message) ? message(value) : message;
- validator.invalid[element.name] = true;
- validator.showErrors(errors);
- }
- previous.valid = valid;
- validator.stopRequest(element, valid);
- }
- }, param));
- return "pending";
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/minlength
- minlength: function(value, element, param) {
- var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);
- return this.optional(element) || length >= param;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/maxlength
- maxlength: function(value, element, param) {
- var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);
- return this.optional(element) || length <= param;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/rangelength
- rangelength: function(value, element, param) {
- var length = $.isArray( value ) ? value.length : this.getLength($.trim(value), element);
- return this.optional(element) || ( length >= param[0] && length <= param[1] );
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/min
- min: function( value, element, param ) {
- return this.optional(element) || value >= param;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/max
- max: function( value, element, param ) {
- return this.optional(element) || value <= param;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/range
- range: function( value, element, param ) {
- return this.optional(element) || ( value >= param[0] && value <= param[1] );
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/email
- email: function(value, element) {
- // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
- return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/url
- url: function(value, element) {
- // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/
- return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/date
- date: function(value, element) {
- return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/dateISO
- dateISO: function(value, element) {
- return this.optional(element) || /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/number
- number: function(value, element) {
- return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/digits
- digits: function(value, element) {
- return this.optional(element) || /^\d+$/.test(value);
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/creditcard
- // based on http://en.wikipedia.org/wiki/Luhn
- creditcard: function(value, element) {
- if ( this.optional(element) ) {
- return "dependency-mismatch";
- }
- // accept only spaces, digits and dashes
- if (/[^0-9 \-]+/.test(value)) {
- return false;
- }
- var nCheck = 0,
- nDigit = 0,
- bEven = false;
-
- value = value.replace(/\D/g, "");
-
- for (var n = value.length - 1; n >= 0; n--) {
- var cDigit = value.charAt(n);
- nDigit = parseInt(cDigit, 10);
- if (bEven) {
- if ((nDigit *= 2) > 9) {
- nDigit -= 9;
- }
- }
- nCheck += nDigit;
- bEven = !bEven;
- }
-
- return (nCheck % 10) === 0;
- },
-
- // http://docs.jquery.com/Plugins/Validation/Methods/equalTo
- equalTo: function(value, element, param) {
- // bind to the blur event of the target in order to revalidate whenever the target field is updated
- // TODO find a way to bind the event just once, avoiding the unbind-rebind overhead
- var target = $(param);
- if (this.settings.onfocusout) {
- target.unbind(".validate-equalTo").bind("blur.validate-equalTo", function() {
- $(element).valid();
- });
- }
- return value === target.val();
- }
-
- }
-
-});
-
-// deprecated, use $.validator.format instead
-$.format = $.validator.format;
-
-}(jQuery));
-
-// ajax mode: abort
-// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
-// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort()
-(function($) {
- var pendingRequests = {};
- // Use a prefilter if available (1.5+)
- if ( $.ajaxPrefilter ) {
- $.ajaxPrefilter(function(settings, _, xhr) {
- var port = settings.port;
- if (settings.mode === "abort") {
- if ( pendingRequests[port] ) {
- pendingRequests[port].abort();
- }
- pendingRequests[port] = xhr;
- }
- });
- } else {
- // Proxy ajax
- var ajax = $.ajax;
- $.ajax = function(settings) {
- var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode,
- port = ( "port" in settings ? settings : $.ajaxSettings ).port;
- if (mode === "abort") {
- if ( pendingRequests[port] ) {
- pendingRequests[port].abort();
- }
- return (pendingRequests[port] = ajax.apply(this, arguments));
- }
- return ajax.apply(this, arguments);
- };
- }
-}(jQuery));
-
-// provides cross-browser focusin and focusout events
-// IE has native support, in other browsers, use event caputuring (neither bubbles)
-
-// provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation
-// handler is only called when $(event.target).is(delegate), in the scope of the jquery-object for event.target
-(function($) {
- // only implement if not provided by jQuery core (since 1.4)
- // TODO verify if jQuery 1.4's implementation is compatible with older jQuery special-event APIs
- if (!jQuery.event.special.focusin && !jQuery.event.special.focusout && document.addEventListener) {
- $.each({
- focus: 'focusin',
- blur: 'focusout'
- }, function( original, fix ){
- $.event.special[fix] = {
- setup:function() {
- this.addEventListener( original, handler, true );
- },
- teardown:function() {
- this.removeEventListener( original, handler, true );
- },
- handler: function(e) {
- var args = arguments;
- args[0] = $.event.fix(e);
- args[0].type = fix;
- return $.event.handle.apply(this, args);
- }
- };
- function handler(e) {
- e = $.event.fix(e);
- e.type = fix;
- return $.event.handle.call(this, e);
- }
- });
- }
- $.extend($.fn, {
- validateDelegate: function(delegate, type, handler) {
- return this.bind(type, function(event) {
- var target = $(event.target);
- if (target.is(delegate)) {
- return handler.apply(target, arguments);
- }
- });
- }
- });
-}(jQuery));
diff --git a/wqflask/wqflask/static/packages/jqplot/jquery.validate.min.js b/wqflask/wqflask/static/packages/jqplot/jquery.validate.min.js
deleted file mode 100644
index 85afad53..00000000
--- a/wqflask/wqflask/static/packages/jqplot/jquery.validate.min.js
+++ /dev/null
@@ -1,4 +0,0 @@
-/*! jQuery Validation Plugin - v1.10.0 - 9/7/2012
-* https://github.com/jzaefferer/jquery-validation
-* Copyright (c) 2012 Jörn Zaefferer; Licensed MIT, GPL */
-(function(a){a.extend(a.fn,{validate:function(b){if(!this.length){b&&b.debug&&window.console&&console.warn("nothing selected, can't validate, returning nothing");return}var c=a.data(this[0],"validator");return c?c:(this.attr("novalidate","novalidate"),c=new a.validator(b,this[0]),a.data(this[0],"validator",c),c.settings.onsubmit&&(this.validateDelegate(":submit","click",function(b){c.settings.submitHandler&&(c.submitButton=b.target),a(b.target).hasClass("cancel")&&(c.cancelSubmit=!0)}),this.submit(function(b){function d(){var d;return c.settings.submitHandler?(c.submitButton&&(d=a("<input type='hidden'/>").attr("name",c.submitButton.name).val(c.submitButton.value).appendTo(c.currentForm)),c.settings.submitHandler.call(c,c.currentForm,b),c.submitButton&&d.remove(),!1):!0}return c.settings.debug&&b.preventDefault(),c.cancelSubmit?(c.cancelSubmit=!1,d()):c.form()?c.pendingRequest?(c.formSubmitted=!0,!1):d():(c.focusInvalid(),!1)})),c)},valid:function(){if(a(this[0]).is("form"))return this.validate().form();var b=!0,c=a(this[0].form).validate();return this.each(function(){b&=c.element(this)}),b},removeAttrs:function(b){var c={},d=this;return a.each(b.split(/\s/),function(a,b){c[b]=d.attr(b),d.removeAttr(b)}),c},rules:function(b,c){var d=this[0];if(b){var e=a.data(d.form,"validator").settings,f=e.rules,g=a.validator.staticRules(d);switch(b){case"add":a.extend(g,a.validator.normalizeRule(c)),f[d.name]=g,c.messages&&(e.messages[d.name]=a.extend(e.messages[d.name],c.messages));break;case"remove":if(!c)return delete f[d.name],g;var h={};return a.each(c.split(/\s/),function(a,b){h[b]=g[b],delete g[b]}),h}}var i=a.validator.normalizeRules(a.extend({},a.validator.metadataRules(d),a.validator.classRules(d),a.validator.attributeRules(d),a.validator.staticRules(d)),d);if(i.required){var j=i.required;delete i.required,i=a.extend({required:j},i)}return i}}),a.extend(a.expr[":"],{blank:function(b){return!a.trim(""+b.value)},filled:function(b){return!!a.trim(""+b.value)},unchecked:function(a){return!a.checked}}),a.validator=function(b,c){this.settings=a.extend(!0,{},a.validator.defaults,b),this.currentForm=c,this.init()},a.validator.format=function(b,c){return arguments.length===1?function(){var c=a.makeArray(arguments);return c.unshift(b),a.validator.format.apply(this,c)}:(arguments.length>2&&c.constructor!==Array&&(c=a.makeArray(arguments).slice(1)),c.constructor!==Array&&(c=[c]),a.each(c,function(a,c){b=b.replace(new RegExp("\\{"+a+"\\}","g"),c)}),b)},a.extend(a.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusInvalid:!0,errorContainer:a([]),errorLabelContainer:a([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(a,b){this.lastActive=a,this.settings.focusCleanup&&!this.blockFocusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,a,this.settings.errorClass,this.settings.validClass),this.addWrapper(this.errorsFor(a)).hide())},onfocusout:function(a,b){!this.checkable(a)&&(a.name in this.submitted||!this.optional(a))&&this.element(a)},onkeyup:function(a,b){if(b.which===9&&this.elementValue(a)==="")return;(a.name in this.submitted||a===this.lastActive)&&this.element(a)},onclick:function(a,b){a.name in this.submitted?this.element(a):a.parentNode.name in this.submitted&&this.element(a.parentNode)},highlight:function(b,c,d){b.type==="radio"?this.findByName(b.name).addClass(c).removeClass(d):a(b).addClass(c).removeClass(d)},unhighlight:function(b,c,d){b.type==="radio"?this.findByName(b.name).removeClass(c).addClass(d):a(b).removeClass(c).addClass(d)}},setDefaults:function(b){a.extend(a.validator.defaults,b)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",maxlength:a.validator.format("Please enter no more than {0} characters."),minlength:a.validator.format("Please enter at least {0} characters."),rangelength:a.validator.format("Please enter a value between {0} and {1} characters long."),range:a.validator.format("Please enter a value between {0} and {1}."),max:a.validator.format("Please enter a value less than or equal to {0}."),min:a.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:!1,prototype:{init:function(){function d(b){var c=a.data(this[0].form,"validator"),d="on"+b.type.replace(/^validate/,"");c.settings[d]&&c.settings[d].call(c,this[0],b)}this.labelContainer=a(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||a(this.currentForm),this.containers=a(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var b=this.groups={};a.each(this.settings.groups,function(c,d){a.each(d.split(/\s/),function(a,d){b[d]=c})});var c=this.settings.rules;a.each(c,function(b,d){c[b]=a.validator.normalizeRule(d)}),a(this.currentForm).validateDelegate(":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'] ,[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'] ","focusin focusout keyup",d).validateDelegate("[type='radio'], [type='checkbox'], select, option","click",d),this.settings.invalidHandler&&a(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),a.extend(this.submitted,this.errorMap),this.invalid=a.extend({},this.errorMap),this.valid()||a(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var a=0,b=this.currentElements=this.elements();b[a];a++)this.check(b[a]);return this.valid()},element:function(b){b=this.validationTargetFor(this.clean(b)),this.lastElement=b,this.prepareElement(b),this.currentElements=a(b);var c=this.check(b)!==!1;return c?delete this.invalid[b.name]:this.invalid[b.name]=!0,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),c},showErrors:function(b){if(b){a.extend(this.errorMap,b),this.errorList=[];for(var c in b)this.errorList.push({message:b[c],element:this.findByName(c)[0]});this.successList=a.grep(this.successList,function(a){return!(a.name in b)})}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){a.fn.resetForm&&a(this.currentForm).resetForm(),this.submitted={},this.lastElement=null,this.prepareForm(),this.hideErrors(),this.elements().removeClass(this.settings.errorClass).removeData("previousValue")},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(a){var b=0;for(var c in a)b++;return b},hideErrors:function(){this.addWrapper(this.toHide).hide()},valid:function(){return this.size()===0},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{a(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus().trigger("focusin")}catch(b){}},findLastActive:function(){var b=this.lastActive;return b&&a.grep(this.errorList,function(a){return a.element.name===b.name}).length===1&&b},elements:function(){var b=this,c={};return a(this.currentForm).find("input, select, textarea").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){return!this.name&&b.settings.debug&&window.console&&console.error("%o has no name assigned",this),this.name in c||!b.objectLength(a(this).rules())?!1:(c[this.name]=!0,!0)})},clean:function(b){return a(b)[0]},errors:function(){var b=this.settings.errorClass.replace(" ",".");return a(this.settings.errorElement+"."+b,this.errorContext)},reset:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=a([]),this.toHide=a([]),this.currentElements=a([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(a){this.reset(),this.toHide=this.errorsFor(a)},elementValue:function(b){var c=a(b).attr("type"),d=a(b).val();return c==="radio"||c==="checkbox"?a('input[name="'+a(b).attr("name")+'"]:checked').val():typeof d=="string"?d.replace(/\r/g,""):d},check:function(b){b=this.validationTargetFor(this.clean(b));var c=a(b).rules(),d=!1,e=this.elementValue(b),f;for(var g in c){var h={method:g,parameters:c[g]};try{f=a.validator.methods[g].call(this,e,b,h.parameters);if(f==="dependency-mismatch"){d=!0;continue}d=!1;if(f==="pending"){this.toHide=this.toHide.not(this.errorsFor(b));return}if(!f)return this.formatAndAdd(b,h),!1}catch(i){throw this.settings.debug&&window.console&&console.log("exception occured when checking element "+b.id+", check the '"+h.method+"' method",i),i}}if(d)return;return this.objectLength(c)&&this.successList.push(b),!0},customMetaMessage:function(b,c){if(!a.metadata)return;var d=this.settings.meta?a(b).metadata()[this.settings.meta]:a(b).metadata();return d&&d.messages&&d.messages[c]},customDataMessage:function(b,c){return a(b).data("msg-"+c.toLowerCase())||b.attributes&&a(b).attr("data-msg-"+c.toLowerCase())},customMessage:function(a,b){var c=this.settings.messages[a];return c&&(c.constructor===String?c:c[b])},findDefined:function(){for(var a=0;a<arguments.length;a++)if(arguments[a]!==undefined)return arguments[a];return undefined},defaultMessage:function(b,c){return this.findDefined(this.customMessage(b.name,c),this.customDataMessage(b,c),this.customMetaMessage(b,c),!this.settings.ignoreTitle&&b.title||undefined,a.validator.messages[c],"<strong>Warning: No message defined for "+b.name+"</strong>")},formatAndAdd:function(b,c){var d=this.defaultMessage(b,c.method),e=/\$?\{(\d+)\}/g;typeof d=="function"?d=d.call(this,c.parameters,b):e.test(d)&&(d=a.validator.format(d.replace(e,"{$1}"),c.parameters)),this.errorList.push({message:d,element:b}),this.errorMap[b.name]=d,this.submitted[b.name]=d},addWrapper:function(a){return this.settings.wrapper&&(a=a.add(a.parent(this.settings.wrapper))),a},defaultShowErrors:function(){var a,b;for(a=0;this.errorList[a];a++){var c=this.errorList[a];this.settings.highlight&&this.settings.highlight.call(this,c.element,this.settings.errorClass,this.settings.validClass),this.showLabel(c.element,c.message)}this.errorList.length&&(this.toShow=this.toShow.add(this.containers));if(this.settings.success)for(a=0;this.successList[a];a++)this.showLabel(this.successList[a]);if(this.settings.unhighlight)for(a=0,b=this.validElements();b[a];a++)this.settings.unhighlight.call(this,b[a],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return a(this.errorList).map(function(){return this.element})},showLabel:function(b,c){var d=this.errorsFor(b);d.length?(d.removeClass(this.settings.validClass).addClass(this.settings.errorClass),d.attr("generated")&&d.html(c)):(d=a("<"+this.settings.errorElement+"/>").attr({"for":this.idOrName(b),generated:!0}).addClass(this.settings.errorClass).html(c||""),this.settings.wrapper&&(d=d.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.append(d).length||(this.settings.errorPlacement?this.settings.errorPlacement(d,a(b)):d.insertAfter(b))),!c&&this.settings.success&&(d.text(""),typeof this.settings.success=="string"?d.addClass(this.settings.success):this.settings.success(d,b)),this.toShow=this.toShow.add(d)},errorsFor:function(b){var c=this.idOrName(b);return this.errors().filter(function(){return a(this).attr("for")===c})},idOrName:function(a){return this.groups[a.name]||(this.checkable(a)?a.name:a.id||a.name)},validationTargetFor:function(a){return this.checkable(a)&&(a=this.findByName(a.name).not(this.settings.ignore)[0]),a},checkable:function(a){return/radio|checkbox/i.test(a.type)},findByName:function(b){return a(this.currentForm).find('[name="'+b+'"]')},getLength:function(b,c){switch(c.nodeName.toLowerCase()){case"select":return a("option:selected",c).length;case"input":if(this.checkable(c))return this.findByName(c.name).filter(":checked").length}return b.length},depend:function(a,b){return this.dependTypes[typeof a]?this.dependTypes[typeof a](a,b):!0},dependTypes:{"boolean":function(a,b){return a},string:function(b,c){return!!a(b,c.form).length},"function":function(a,b){return a(b)}},optional:function(b){var c=this.elementValue(b);return!a.validator.methods.required.call(this,c,b)&&"dependency-mismatch"},startRequest:function(a){this.pending[a.name]||(this.pendingRequest++,this.pending[a.name]=!0)},stopRequest:function(b,c){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[b.name],c&&this.pendingRequest===0&&this.formSubmitted&&this.form()?(a(this.currentForm).submit(),this.formSubmitted=!1):!c&&this.pendingRequest===0&&this.formSubmitted&&(a(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(b){return a.data(b,"previousValue")||a.data(b,"previousValue",{old:null,valid:!0,message:this.defaultMessage(b,"remote")})}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(b,c){b.constructor===String?this.classRuleSettings[b]=c:a.extend(this.classRuleSettings,b)},classRules:function(b){var c={},d=a(b).attr("class");return d&&a.each(d.split(" "),function(){this in a.validator.classRuleSettings&&a.extend(c,a.validator.classRuleSettings[this])}),c},attributeRules:function(b){var c={},d=a(b);for(var e in a.validator.methods){var f;e==="required"?(f=d.get(0).getAttribute(e),f===""&&(f=!0),f=!!f):f=d.attr(e),f?c[e]=f:d[0].getAttribute("type")===e&&(c[e]=!0)}return c.maxlength&&/-1|2147483647|524288/.test(c.maxlength)&&delete c.maxlength,c},metadataRules:function(b){if(!a.metadata)return{};var c=a.data(b.form,"validator").settings.meta;return c?a(b).metadata()[c]:a(b).metadata()},staticRules:function(b){var c={},d=a.data(b.form,"validator");return d.settings.rules&&(c=a.validator.normalizeRule(d.settings.rules[b.name])||{}),c},normalizeRules:function(b,c){return a.each(b,function(d,e){if(e===!1){delete b[d];return}if(e.param||e.depends){var f=!0;switch(typeof e.depends){case"string":f=!!a(e.depends,c.form).length;break;case"function":f=e.depends.call(c,c)}f?b[d]=e.param!==undefined?e.param:!0:delete b[d]}}),a.each(b,function(d,e){b[d]=a.isFunction(e)?e(c):e}),a.each(["minlength","maxlength","min","max"],function(){b[this]&&(b[this]=Number(b[this]))}),a.each(["rangelength","range"],function(){b[this]&&(b[this]=[Number(b[this][0]),Number(b[this][1])])}),a.validator.autoCreateRanges&&(b.min&&b.max&&(b.range=[b.min,b.max],delete b.min,delete b.max),b.minlength&&b.maxlength&&(b.rangelength=[b.minlength,b.maxlength],delete b.minlength,delete b.maxlength)),b.messages&&delete b.messages,b},normalizeRule:function(b){if(typeof b=="string"){var c={};a.each(b.split(/\s/),function(){c[this]=!0}),b=c}return b},addMethod:function(b,c,d){a.validator.methods[b]=c,a.validator.messages[b]=d!==undefined?d:a.validator.messages[b],c.length<3&&a.validator.addClassRules(b,a.validator.normalizeRule(b))},methods:{required:function(b,c,d){if(!this.depend(d,c))return"dependency-mismatch";if(c.nodeName.toLowerCase()==="select"){var e=a(c).val();return e&&e.length>0}return this.checkable(c)?this.getLength(b,c)>0:a.trim(b).length>0},remote:function(b,c,d){if(this.optional(c))return"dependency-mismatch";var e=this.previousValue(c);this.settings.messages[c.name]||(this.settings.messages[c.name]={}),e.originalMessage=this.settings.messages[c.name].remote,this.settings.messages[c.name].remote=e.message,d=typeof d=="string"&&{url:d}||d;if(this.pending[c.name])return"pending";if(e.old===b)return e.valid;e.old=b;var f=this;this.startRequest(c);var g={};return g[c.name]=b,a.ajax(a.extend(!0,{url:d,mode:"abort",port:"validate"+c.name,dataType:"json",data:g,success:function(d){f.settings.messages[c.name].remote=e.originalMessage;var g=d===!0||d==="true";if(g){var h=f.formSubmitted;f.prepareElement(c),f.formSubmitted=h,f.successList.push(c),delete f.invalid[c.name],f.showErrors()}else{var i={},j=d||f.defaultMessage(c,"remote");i[c.name]=e.message=a.isFunction(j)?j(b):j,f.invalid[c.name]=!0,f.showErrors(i)}e.valid=g,f.stopRequest(c,g)}},d)),"pending"},minlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(a.trim(b),c);return this.optional(c)||e>=d},maxlength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(a.trim(b),c);return this.optional(c)||e<=d},rangelength:function(b,c,d){var e=a.isArray(b)?b.length:this.getLength(a.trim(b),c);return this.optional(c)||e>=d[0]&&e<=d[1]},min:function(a,b,c){return this.optional(b)||a>=c},max:function(a,b,c){return this.optional(b)||a<=c},range:function(a,b,c){return this.optional(b)||a>=c[0]&&a<=c[1]},email:function(a,b){return this.optional(b)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(a)},url:function(a,b){return this.optional(b)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(a)},date:function(a,b){return this.optional(b)||!/Invalid|NaN/.test(new Date(a))},dateISO:function(a,b){return this.optional(b)||/^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/.test(a)},number:function(a,b){return this.optional(b)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(a)},digits:function(a,b){return this.optional(b)||/^\d+$/.test(a)},creditcard:function(a,b){if(this.optional(b))return"dependency-mismatch";if(/[^0-9 \-]+/.test(a))return!1;var c=0,d=0,e=!1;a=a.replace(/\D/g,"");for(var f=a.length-1;f>=0;f--){var g=a.charAt(f);d=parseInt(g,10),e&&(d*=2)>9&&(d-=9),c+=d,e=!e}return c%10===0},equalTo:function(b,c,d){var e=a(d);return this.settings.onfocusout&&e.unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){a(c).valid()}),b===e.val()}}}),a.format=a.validator.format})(jQuery),function(a){var b={};if(a.ajaxPrefilter)a.ajaxPrefilter(function(a,c,d){var e=a.port;a.mode==="abort"&&(b[e]&&b[e].abort(),b[e]=d)});else{var c=a.ajax;a.ajax=function(d){var e=("mode"in d?d:a.ajaxSettings).mode,f=("port"in d?d:a.ajaxSettings).port;return e==="abort"?(b[f]&&b[f].abort(),b[f]=c.apply(this,arguments)):c.apply(this,arguments)}}}(jQuery),function(a){!jQuery.event.special.focusin&&!jQuery.event.special.focusout&&document.addEventListener&&a.each({focus:"focusin",blur:"focusout"},function(b,c){function d(b){return b=a.event.fix(b),b.type=c,a.event.handle.call(this,b)}a.event.special[c]={setup:function(){this.addEventListener(b,d,!0)},teardown:function(){this.removeEventListener(b,d,!0)},handler:function(b){var d=arguments;return d[0]=a.event.fix(b),d[0].type=c,a.event.handle.apply(this,d)}}}),a.extend(a.fn,{validateDelegate:function(b,c,d){return this.bind(c,function(c){var e=a(c.target);if(e.is(b))return d.apply(e,arguments)})}})}(jQuery) \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/optionsTutorial.txt b/wqflask/wqflask/static/packages/jqplot/optionsTutorial.txt
deleted file mode 100644
index 4ec4fe9b..00000000
--- a/wqflask/wqflask/static/packages/jqplot/optionsTutorial.txt
+++ /dev/null
@@ -1,240 +0,0 @@
-Title: 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. \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.js
deleted file mode 100644
index f089a705..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.js
+++ /dev/null
@@ -1,313 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- // Class: $.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]].
- $.jqplot.BezierCurveRenderer = function(){
- $.jqplot.LineRenderer.call(this);
- };
-
- $.jqplot.BezierCurveRenderer.prototype = new $.jqplot.LineRenderer();
- $.jqplot.BezierCurveRenderer.prototype.constructor = $.jqplot.BezierCurveRenderer;
-
-
- // Method: setGridData
- // converts the user data values to grid coordinates and stores them
- // in the gridData array.
- // Called with scope of a series.
- $.jqplot.BezierCurveRenderer.prototype.setGridData = function(plot) {
- // recalculate the grid data
- var xp = this._xaxis.series_u2p;
- var yp = this._yaxis.series_u2p;
- // this._plotData should be same as this.data
- var data = this.data;
- this.gridData = [];
- this._prevGridData = [];
- // if seriesIndex = 0, fill to x axis.
- // if seriesIndex > 0, fill to previous series data.
- var idx = this.index;
- if (data.length == 2) {
- if (idx == 0) {
- this.gridData = [
- [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])],
- [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]),
- xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]),
- xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])],
- [xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, this._yaxis.min)],
- [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)]
- ];
- }
- else {
- var psd = plot.series[idx-1].data;
- this.gridData = [
- [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])],
- [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]),
- xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]),
- xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])],
- [xp.call(this._xaxis, psd[1][4]), yp.call(this._yaxis, psd[1][5])],
- [xp.call(this._xaxis, psd[1][2]), yp.call(this._yaxis, psd[1][3]),
- xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]),
- xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])]
- ];
- }
- }
- else {
- if (idx == 0) {
- this.gridData = [
- [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])],
- [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]),
- xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]),
- xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])],
- [xp.call(this._xaxis, data[3][1]), yp.call(this._yaxis, this._yaxis.min)],
- [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)]
- ];
- }
- else {
- var psd = plot.series[idx-1].data;
- this.gridData = [
- [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])],
- [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]),
- xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]),
- xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])],
- [xp.call(this._xaxis, psd[3][0]), yp.call(this._yaxis, psd[3][1])],
- [xp.call(this._xaxis, psd[2][0]), yp.call(this._yaxis, psd[2][1]),
- xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]),
- xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])]
- ];
- }
- }
- };
-
- // Method: makeGridData
- // 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.makeGridData = function(data, plot) {
- // recalculate the grid data
- var xp = this._xaxis.series_u2p;
- var yp = this._yaxis.series_u2p;
- var gd = [];
- var pgd = [];
- // if seriesIndex = 0, fill to x axis.
- // if seriesIndex > 0, fill to previous series data.
- var idx = this.index;
- if (data.length == 2) {
- if (idx == 0) {
- gd = [
- [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])],
- [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]),
- xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]),
- xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])],
- [xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, this._yaxis.min)],
- [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)]
- ];
- }
- else {
- var psd = plot.series[idx-1].data;
- gd = [
- [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])],
- [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]),
- xp.call(this._xaxis, data[1][2]), yp.call(this._yaxis, data[1][3]),
- xp.call(this._xaxis, data[1][4]), yp.call(this._yaxis, data[1][5])],
- [xp.call(this._xaxis, psd[1][4]), yp.call(this._yaxis, psd[1][5])],
- [xp.call(this._xaxis, psd[1][2]), yp.call(this._yaxis, psd[1][3]),
- xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]),
- xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])]
- ];
- }
- }
- else {
- if (idx == 0) {
- gd = [
- [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])],
- [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]),
- xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]),
- xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])],
- [xp.call(this._xaxis, data[3][1]), yp.call(this._yaxis, this._yaxis.min)],
- [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, this._yaxis.min)]
- ];
- }
- else {
- var psd = plot.series[idx-1].data;
- gd = [
- [xp.call(this._xaxis, data[0][0]), yp.call(this._yaxis, data[0][1])],
- [xp.call(this._xaxis, data[1][0]), yp.call(this._yaxis, data[1][1]),
- xp.call(this._xaxis, data[2][0]), yp.call(this._yaxis, data[2][1]),
- xp.call(this._xaxis, data[3][0]), yp.call(this._yaxis, data[3][1])],
- [xp.call(this._xaxis, psd[3][0]), yp.call(this._yaxis, psd[3][1])],
- [xp.call(this._xaxis, psd[2][0]), yp.call(this._yaxis, psd[2][1]),
- xp.call(this._xaxis, psd[1][0]), yp.call(this._yaxis, psd[1][1]),
- xp.call(this._xaxis, psd[0][0]), yp.call(this._yaxis, psd[0][1])]
- ];
- }
- }
- return gd;
- };
-
-
- // called within scope of series.
- $.jqplot.BezierCurveRenderer.prototype.draw = function(ctx, gd, options) {
- var i;
- ctx.save();
- if (gd.length) {
- if (this.showLine) {
- ctx.save();
- var opts = (options != null) ? options : {};
- ctx.fillStyle = opts.fillStyle || this.color;
- ctx.beginPath();
- ctx.moveTo(gd[0][0], gd[0][1]);
- ctx.bezierCurveTo(gd[1][0], gd[1][1], gd[1][2], gd[1][3], gd[1][4], gd[1][5]);
- ctx.lineTo(gd[2][0], gd[2][1]);
- if (gd[3].length == 2) {
- ctx.lineTo(gd[3][0], gd[3][1]);
- }
- else {
- ctx.bezierCurveTo(gd[3][0], gd[3][1], gd[3][2], gd[3][3], gd[3][4], gd[3][5]);
- }
- ctx.closePath();
- ctx.fill();
- ctx.restore();
- }
- }
-
- ctx.restore();
- };
-
- $.jqplot.BezierCurveRenderer.prototype.drawShadow = function(ctx, gd, options) {
- // This is a no-op, shadows drawn with lines.
- };
-
- $.jqplot.BezierAxisRenderer = function() {
- $.jqplot.LinearAxisRenderer.call(this);
- };
-
- $.jqplot.BezierAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
- $.jqplot.BezierAxisRenderer.prototype.constructor = $.jqplot.BezierAxisRenderer;
-
-
- // Axes on a plot with Bezier Curves
- $.jqplot.BezierAxisRenderer.prototype.init = function(options){
- $.extend(true, this, options);
- var db = this._dataBounds;
- // Go through all the series attached to this axis and find
- // the min/max bounds for this axis.
- for (var i=0; i<this._series.length; i++) {
- var s = this._series[i];
- var d = s.data;
- if (d.length == 4) {
- for (var j=0; j<d.length; j++) {
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- if (d[j][0] < db.min || db.min == null) {
- db.min = d[j][0];
- }
- if (d[j][0] > db.max || db.max == null) {
- db.max = d[j][0];
- }
- }
- else {
- if (d[j][1] < db.min || db.min == null) {
- db.min = d[j][1];
- }
- if (d[j][1] > db.max || db.max == null) {
- db.max = d[j][1];
- }
- }
- }
- }
- else {
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- if (d[0][0] < db.min || db.min == null) {
- db.min = d[0][0];
- }
- if (d[0][0] > db.max || db.max == null) {
- db.max = d[0][0];
- }
- for (var j=0; j<5; j+=2) {
- if (d[1][j] < db.min || db.min == null) {
- db.min = d[1][j];
- }
- if (d[1][j] > db.max || db.max == null) {
- db.max = d[1][j];
- }
- }
- }
- else {
- if (d[0][1] < db.min || db.min == null) {
- db.min = d[0][1];
- }
- if (d[0][1] > db.max || db.max == null) {
- db.max = d[0][1];
- }
- for (var j=1; j<6; j+=2) {
- if (d[1][j] < db.min || db.min == null) {
- db.min = d[1][j];
- }
- if (d[1][j] > db.max || db.max == null) {
- db.max = d[1][j];
- }
- }
- }
- }
- }
- };
-
- // setup default renderers for axes and legend so user doesn't have to
- // called with scope of plot
- function preInit(target, data, options) {
- options = options || {};
- options.axesDefaults = $.extend(true, {pad:0}, options.axesDefaults);
- options.legend = $.extend(true, {placement:'outside'}, options.legend);
- // only set these if there is a pie series
- var setopts = false;
- if (options.seriesDefaults.renderer == $.jqplot.BezierCurveRenderer) {
- setopts = true;
- }
- else if (options.series) {
- for (var i=0; i < options.series.length; i++) {
- if (options.series[i].renderer == $.jqplot.BezierCurveRenderer) {
- setopts = true;
- }
- }
- }
-
- if (setopts) {
- options.axesDefaults.renderer = $.jqplot.BezierAxisRenderer;
- }
- }
-
- $.jqplot.preInitHooks.push(preInit);
-
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.min.js
deleted file mode 100644
index 77ec27b9..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.BezierCurveRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(b){b.jqplot.BezierCurveRenderer=function(){b.jqplot.LineRenderer.call(this)};b.jqplot.BezierCurveRenderer.prototype=new b.jqplot.LineRenderer();b.jqplot.BezierCurveRenderer.prototype.constructor=b.jqplot.BezierCurveRenderer;b.jqplot.BezierCurveRenderer.prototype.setGridData=function(h){var e=this._xaxis.series_u2p;var g=this._yaxis.series_u2p;var f=this.data;this.gridData=[];this._prevGridData=[];var d=this.index;if(f.length==2){if(d==0){this.gridData=[[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,f[0][1])],[e.call(this._xaxis,f[1][0]),g.call(this._yaxis,f[1][1]),e.call(this._xaxis,f[1][2]),g.call(this._yaxis,f[1][3]),e.call(this._xaxis,f[1][4]),g.call(this._yaxis,f[1][5])],[e.call(this._xaxis,f[1][4]),g.call(this._yaxis,this._yaxis.min)],[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,this._yaxis.min)]]}else{var c=h.series[d-1].data;this.gridData=[[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,f[0][1])],[e.call(this._xaxis,f[1][0]),g.call(this._yaxis,f[1][1]),e.call(this._xaxis,f[1][2]),g.call(this._yaxis,f[1][3]),e.call(this._xaxis,f[1][4]),g.call(this._yaxis,f[1][5])],[e.call(this._xaxis,c[1][4]),g.call(this._yaxis,c[1][5])],[e.call(this._xaxis,c[1][2]),g.call(this._yaxis,c[1][3]),e.call(this._xaxis,c[1][0]),g.call(this._yaxis,c[1][1]),e.call(this._xaxis,c[0][0]),g.call(this._yaxis,c[0][1])]]}}else{if(d==0){this.gridData=[[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,f[0][1])],[e.call(this._xaxis,f[1][0]),g.call(this._yaxis,f[1][1]),e.call(this._xaxis,f[2][0]),g.call(this._yaxis,f[2][1]),e.call(this._xaxis,f[3][0]),g.call(this._yaxis,f[3][1])],[e.call(this._xaxis,f[3][1]),g.call(this._yaxis,this._yaxis.min)],[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,this._yaxis.min)]]}else{var c=h.series[d-1].data;this.gridData=[[e.call(this._xaxis,f[0][0]),g.call(this._yaxis,f[0][1])],[e.call(this._xaxis,f[1][0]),g.call(this._yaxis,f[1][1]),e.call(this._xaxis,f[2][0]),g.call(this._yaxis,f[2][1]),e.call(this._xaxis,f[3][0]),g.call(this._yaxis,f[3][1])],[e.call(this._xaxis,c[3][0]),g.call(this._yaxis,c[3][1])],[e.call(this._xaxis,c[2][0]),g.call(this._yaxis,c[2][1]),e.call(this._xaxis,c[1][0]),g.call(this._yaxis,c[1][1]),e.call(this._xaxis,c[0][0]),g.call(this._yaxis,c[0][1])]]}}};b.jqplot.BezierCurveRenderer.prototype.makeGridData=function(g,i){var f=this._xaxis.series_u2p;var h=this._yaxis.series_u2p;var e=[];var j=[];var d=this.index;if(g.length==2){if(d==0){e=[[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,g[0][1])],[f.call(this._xaxis,g[1][0]),h.call(this._yaxis,g[1][1]),f.call(this._xaxis,g[1][2]),h.call(this._yaxis,g[1][3]),f.call(this._xaxis,g[1][4]),h.call(this._yaxis,g[1][5])],[f.call(this._xaxis,g[1][4]),h.call(this._yaxis,this._yaxis.min)],[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,this._yaxis.min)]]}else{var c=i.series[d-1].data;e=[[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,g[0][1])],[f.call(this._xaxis,g[1][0]),h.call(this._yaxis,g[1][1]),f.call(this._xaxis,g[1][2]),h.call(this._yaxis,g[1][3]),f.call(this._xaxis,g[1][4]),h.call(this._yaxis,g[1][5])],[f.call(this._xaxis,c[1][4]),h.call(this._yaxis,c[1][5])],[f.call(this._xaxis,c[1][2]),h.call(this._yaxis,c[1][3]),f.call(this._xaxis,c[1][0]),h.call(this._yaxis,c[1][1]),f.call(this._xaxis,c[0][0]),h.call(this._yaxis,c[0][1])]]}}else{if(d==0){e=[[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,g[0][1])],[f.call(this._xaxis,g[1][0]),h.call(this._yaxis,g[1][1]),f.call(this._xaxis,g[2][0]),h.call(this._yaxis,g[2][1]),f.call(this._xaxis,g[3][0]),h.call(this._yaxis,g[3][1])],[f.call(this._xaxis,g[3][1]),h.call(this._yaxis,this._yaxis.min)],[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,this._yaxis.min)]]}else{var c=i.series[d-1].data;e=[[f.call(this._xaxis,g[0][0]),h.call(this._yaxis,g[0][1])],[f.call(this._xaxis,g[1][0]),h.call(this._yaxis,g[1][1]),f.call(this._xaxis,g[2][0]),h.call(this._yaxis,g[2][1]),f.call(this._xaxis,g[3][0]),h.call(this._yaxis,g[3][1])],[f.call(this._xaxis,c[3][0]),h.call(this._yaxis,c[3][1])],[f.call(this._xaxis,c[2][0]),h.call(this._yaxis,c[2][1]),f.call(this._xaxis,c[1][0]),h.call(this._yaxis,c[1][1]),f.call(this._xaxis,c[0][0]),h.call(this._yaxis,c[0][1])]]}}return e};b.jqplot.BezierCurveRenderer.prototype.draw=function(c,g,d){var e;c.save();if(g.length){if(this.showLine){c.save();var f=(d!=null)?d:{};c.fillStyle=f.fillStyle||this.color;c.beginPath();c.moveTo(g[0][0],g[0][1]);c.bezierCurveTo(g[1][0],g[1][1],g[1][2],g[1][3],g[1][4],g[1][5]);c.lineTo(g[2][0],g[2][1]);if(g[3].length==2){c.lineTo(g[3][0],g[3][1])}else{c.bezierCurveTo(g[3][0],g[3][1],g[3][2],g[3][3],g[3][4],g[3][5])}c.closePath();c.fill();c.restore()}}c.restore()};b.jqplot.BezierCurveRenderer.prototype.drawShadow=function(c,e,d){};b.jqplot.BezierAxisRenderer=function(){b.jqplot.LinearAxisRenderer.call(this)};b.jqplot.BezierAxisRenderer.prototype=new b.jqplot.LinearAxisRenderer();b.jqplot.BezierAxisRenderer.prototype.constructor=b.jqplot.BezierAxisRenderer;b.jqplot.BezierAxisRenderer.prototype.init=function(f){b.extend(true,this,f);var c=this._dataBounds;for(var g=0;g<this._series.length;g++){var h=this._series[g];var k=h.data;if(k.length==4){for(var e=0;e<k.length;e++){if(this.name=="xaxis"||this.name=="x2axis"){if(k[e][0]<c.min||c.min==null){c.min=k[e][0]}if(k[e][0]>c.max||c.max==null){c.max=k[e][0]}}else{if(k[e][1]<c.min||c.min==null){c.min=k[e][1]}if(k[e][1]>c.max||c.max==null){c.max=k[e][1]}}}}else{if(this.name=="xaxis"||this.name=="x2axis"){if(k[0][0]<c.min||c.min==null){c.min=k[0][0]}if(k[0][0]>c.max||c.max==null){c.max=k[0][0]}for(var e=0;e<5;e+=2){if(k[1][e]<c.min||c.min==null){c.min=k[1][e]}if(k[1][e]>c.max||c.max==null){c.max=k[1][e]}}}else{if(k[0][1]<c.min||c.min==null){c.min=k[0][1]}if(k[0][1]>c.max||c.max==null){c.max=k[0][1]}for(var e=1;e<6;e+=2){if(k[1][e]<c.min||c.min==null){c.min=k[1][e]}if(k[1][e]>c.max||c.max==null){c.max=k[1][e]}}}}}};function a(g,f,d){d=d||{};d.axesDefaults=b.extend(true,{pad:0},d.axesDefaults);d.legend=b.extend(true,{placement:"outside"},d.legend);var c=false;if(d.seriesDefaults.renderer==b.jqplot.BezierCurveRenderer){c=true}else{if(d.series){for(var e=0;e<d.series.length;e++){if(d.series[e].renderer==b.jqplot.BezierCurveRenderer){c=true}}}}if(c){d.axesDefaults.renderer=b.jqplot.BezierAxisRenderer}}b.jqplot.preInitHooks.push(a)})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.js
deleted file mode 100644
index 623e8efb..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.js
+++ /dev/null
@@ -1,797 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
-
- // Class: $.jqplot.BarRenderer
- // A plugin renderer for jqPlot to draw a bar plot.
- // Draws series as a line.
-
- $.jqplot.BarRenderer = function(){
- $.jqplot.LineRenderer.call(this);
- };
-
- $.jqplot.BarRenderer.prototype = new $.jqplot.LineRenderer();
- $.jqplot.BarRenderer.prototype.constructor = $.jqplot.BarRenderer;
-
- // called with scope of series.
- $.jqplot.BarRenderer.prototype.init = function(options, plot) {
- // Group: Properties
- //
- // prop: barPadding
- // Number of pixels between adjacent bars at the same axis value.
- this.barPadding = 8;
- // prop: barMargin
- // Number of pixels between groups of bars at adjacent axis values.
- this.barMargin = 10;
- // prop: barDirection
- // 'vertical' = up and down bars, 'horizontal' = side to side bars
- this.barDirection = 'vertical';
- // prop: barWidth
- // Width of the bar in pixels (auto by devaul). null = calculated automatically.
- this.barWidth = null;
- // prop: shadowOffset
- // offset of the shadow from the slice and offset of
- // each succesive stroke of the shadow from the last.
- this.shadowOffset = 2;
- // prop: shadowDepth
- // number of strokes to apply to the shadow,
- // each stroke offset shadowOffset from the last.
- this.shadowDepth = 5;
- // prop: shadowAlpha
- // transparency of the shadow (0 = transparent, 1 = opaque)
- this.shadowAlpha = 0.08;
- // prop: waterfall
- // true to enable waterfall plot.
- this.waterfall = false;
- // prop: groups
- // group bars into this many groups
- this.groups = 1;
- // prop: varyBarColor
- // 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.
- this.varyBarColor = false;
- // prop: highlightMouseOver
- // True to highlight slice when moused over.
- // This must be false to enable highlightMouseDown to highlight when clicking on a slice.
- this.highlightMouseOver = true;
- // prop: highlightMouseDown
- // True to highlight when a mouse button is pressed over a slice.
- // This will be disabled if highlightMouseOver is true.
- this.highlightMouseDown = false;
- // prop: highlightColors
- // an array of colors to use when highlighting a bar.
- this.highlightColors = [];
- // prop: transposedData
- // 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.transposedData = true;
- this.renderer.animation = {
- show: false,
- direction: 'down',
- speed: 3000,
- _supported: true
- };
- this._type = 'bar';
-
- // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
- if (options.highlightMouseDown && options.highlightMouseOver == null) {
- options.highlightMouseOver = false;
- }
-
- //////
- // This is probably wrong here.
- // After going back and forth on wether renderer should be the thing
- // or extend the thing, it seems that it it best if it is a property
- // on the thing. This should be something that is commonized
- // among series renderers in the future.
- //////
- $.extend(true, this, options);
-
- // really should probably do this
- $.extend(true, this.renderer, options);
- // fill is still needed to properly draw the legend.
- // bars have to be filled.
- this.fill = true;
-
- // if horizontal bar and animating, reset the default direction
- if (this.barDirection === 'horizontal' && this.rendererOptions.animation && this.rendererOptions.animation.direction == null) {
- this.renderer.animation.direction = 'left';
- }
-
- if (this.waterfall) {
- this.fillToZero = false;
- this.disableStack = true;
- }
-
- if (this.barDirection == 'vertical' ) {
- this._primaryAxis = '_xaxis';
- this._stackAxis = 'y';
- this.fillAxis = 'y';
- }
- else {
- this._primaryAxis = '_yaxis';
- this._stackAxis = 'x';
- this.fillAxis = 'x';
- }
- // index of the currenty highlighted point, if any
- this._highlightedPoint = null;
- // total number of values for all bar series, total number of bar series, and position of this series
- this._plotSeriesInfo = null;
- // Array of actual data colors used for each data point.
- this._dataColors = [];
- this._barPoints = [];
-
- // set the shape renderer options
- var opts = {lineJoin:'miter', lineCap:'round', fill:true, isarc:false, strokeStyle:this.color, fillStyle:this.color, closePath:this.fill};
- this.renderer.shapeRenderer.init(opts);
- // set the shadow renderer options
- var sopts = {lineJoin:'miter', lineCap:'round', fill:true, isarc:false, angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, depth:this.shadowDepth, closePath:this.fill};
- this.renderer.shadowRenderer.init(sopts);
-
- plot.postInitHooks.addOnce(postInit);
- plot.postDrawHooks.addOnce(postPlotDraw);
- plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
- plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
- plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
- plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
- plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
- };
-
- // called with scope of series
- function barPreInit(target, data, seriesDefaults, options) {
- if (this.rendererOptions.barDirection == 'horizontal') {
- this._stackAxis = 'x';
- this._primaryAxis = '_yaxis';
- }
- if (this.rendererOptions.waterfall == true) {
- this._data = $.extend(true, [], this.data);
- var sum = 0;
- var pos = (!this.rendererOptions.barDirection || this.rendererOptions.barDirection === 'vertical' || this.transposedData === false) ? 1 : 0;
- for(var i=0; i<this.data.length; i++) {
- sum += this.data[i][pos];
- if (i>0) {
- this.data[i][pos] += this.data[i-1][pos];
- }
- }
- this.data[this.data.length] = (pos == 1) ? [this.data.length+1, sum] : [sum, this.data.length+1];
- this._data[this._data.length] = (pos == 1) ? [this._data.length+1, sum] : [sum, this._data.length+1];
- }
- if (this.rendererOptions.groups > 1) {
- this.breakOnNull = true;
- var l = this.data.length;
- var skip = parseInt(l/this.rendererOptions.groups, 10);
- var count = 0;
- for (var i=skip; i<l; i+=skip) {
- this.data.splice(i+count, 0, [null, null]);
- this._plotData.splice(i+count, 0, [null, null]);
- this._stackData.splice(i+count, 0, [null, null]);
- count++;
- }
- for (i=0; i<this.data.length; i++) {
- if (this._primaryAxis == '_xaxis') {
- this.data[i][0] = i+1;
- this._plotData[i][0] = i+1;
- this._stackData[i][0] = i+1;
- }
- else {
- this.data[i][1] = i+1;
- this._plotData[i][1] = i+1;
- this._stackData[i][1] = i+1;
- }
- }
- }
- }
-
- $.jqplot.preSeriesInitHooks.push(barPreInit);
-
- // needs to be called with scope of series, not renderer.
- $.jqplot.BarRenderer.prototype.calcSeriesNumbers = function() {
- var nvals = 0;
- var nseries = 0;
- var paxis = this[this._primaryAxis];
- var s, series, pos;
- // loop through all series on this axis
- for (var i=0; i < paxis._series.length; i++) {
- series = paxis._series[i];
- if (series === this) {
- pos = i;
- }
- // is the series rendered as a bar?
- if (series.renderer.constructor == $.jqplot.BarRenderer) {
- // gridData may not be computed yet, use data length insted
- nvals += series.data.length;
- nseries += 1;
- }
- }
- // return total number of values for all bar series, total number of bar series, and position of this series
- return [nvals, nseries, pos];
- };
-
- $.jqplot.BarRenderer.prototype.setBarWidth = function() {
- // need to know how many data values we have on the approprate axis and figure it out.
- var i;
- var nvals = 0;
- var nseries = 0;
- var paxis = this[this._primaryAxis];
- var s, series, pos;
- var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this);
- nvals = temp[0];
- nseries = temp[1];
- var nticks = paxis.numberTicks;
- var nbins = (nticks-1)/2;
- // so, now we have total number of axis values.
- if (paxis.name == 'xaxis' || paxis.name == 'x2axis') {
- if (this._stack) {
- this.barWidth = (paxis._offsets.max - paxis._offsets.min) / nvals * nseries - this.barMargin;
- }
- else {
- this.barWidth = ((paxis._offsets.max - paxis._offsets.min)/nbins - this.barPadding * (nseries-1) - this.barMargin*2)/nseries;
- // this.barWidth = (paxis._offsets.max - paxis._offsets.min) / nvals - this.barPadding - this.barMargin/nseries;
- }
- }
- else {
- if (this._stack) {
- this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals * nseries - this.barMargin;
- }
- else {
- this.barWidth = ((paxis._offsets.min - paxis._offsets.max)/nbins - this.barPadding * (nseries-1) - this.barMargin*2)/nseries;
- // this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals - this.barPadding - this.barMargin/nseries;
- }
- }
- return [nvals, nseries];
- };
-
- function computeHighlightColors (colors) {
- var ret = [];
- for (var i=0; i<colors.length; i++){
- var rgba = $.jqplot.getColorComponents(colors[i]);
- var newrgb = [rgba[0], rgba[1], rgba[2]];
- var sum = newrgb[0] + newrgb[1] + newrgb[2];
- for (var j=0; j<3; j++) {
- // when darkening, lowest color component can be is 60.
- newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]);
- newrgb[j] = parseInt(newrgb[j], 10);
- }
- ret.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')');
- }
- return ret;
- }
-
- function getStart(sidx, didx, comp, plot, axis) {
- // check if sign change
- var seriesIndex = sidx,
- prevSeriesIndex = sidx - 1,
- start,
- prevVal,
- aidx = (axis === 'x') ? 0 : 1;
-
- // is this not the first series?
- if (seriesIndex > 0) {
- prevVal = plot.series[prevSeriesIndex]._plotData[didx][aidx];
-
- // is there a sign change
- if ((comp * prevVal) < 0) {
- start = getStart(prevSeriesIndex, didx, comp, plot, axis);
- }
-
- // no sign change.
- else {
- start = plot.series[prevSeriesIndex].gridData[didx][aidx];
- }
-
- }
-
- // if first series, return value at 0
- else {
-
- start = (aidx === 0) ? plot.series[seriesIndex]._xaxis.series_u2p(0) : plot.series[seriesIndex]._yaxis.series_u2p(0);
- }
-
- return start;
- }
-
-
- $.jqplot.BarRenderer.prototype.draw = function(ctx, gridData, options, plot) {
- var i;
- // Ughhh, have to make a copy of options b/c it may be modified later.
- var opts = $.extend({}, options);
- var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
- var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
- var fill = (opts.fill != undefined) ? opts.fill : this.fill;
- var xaxis = this.xaxis;
- var yaxis = this.yaxis;
- var xp = this._xaxis.series_u2p;
- var yp = this._yaxis.series_u2p;
- var pointx, pointy;
- // clear out data colors.
- this._dataColors = [];
- this._barPoints = [];
-
- if (this.barWidth == null) {
- this.renderer.setBarWidth.call(this);
- }
-
- var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this);
- var nvals = temp[0];
- var nseries = temp[1];
- var pos = temp[2];
- var points = [];
-
- if (this._stack) {
- this._barNudge = 0;
- }
- else {
- this._barNudge = (-Math.abs(nseries/2 - 0.5) + pos) * (this.barWidth + this.barPadding);
- }
- if (showLine) {
- var negativeColors = new $.jqplot.ColorGenerator(this.negativeSeriesColors);
- var positiveColors = new $.jqplot.ColorGenerator(this.seriesColors);
- var negativeColor = negativeColors.get(this.index);
- if (! this.useNegativeColors) {
- negativeColor = opts.fillStyle;
- }
- var positiveColor = opts.fillStyle;
- var base;
- var xstart;
- var ystart;
-
- if (this.barDirection == 'vertical') {
- for (var i=0; i<gridData.length; i++) {
- if (!this._stack && this.data[i][1] == null) {
- continue;
- }
- points = [];
- base = gridData[i][0] + this._barNudge;
-
- // stacked
- if (this._stack && this._prevGridData.length) {
- ystart = getStart(this.index, i, this._plotData[i][1], plot, 'y');
- }
-
- // not stacked
- else {
- if (this.fillToZero) {
- ystart = this._yaxis.series_u2p(0);
- }
- else if (this.waterfall && i > 0 && i < this.gridData.length-1) {
- ystart = this.gridData[i-1][1];
- }
- else if (this.waterfall && i == 0 && i < this.gridData.length-1) {
- if (this._yaxis.min <= 0 && this._yaxis.max >= 0) {
- ystart = this._yaxis.series_u2p(0);
- }
- else if (this._yaxis.min > 0) {
- ystart = ctx.canvas.height;
- }
- else {
- ystart = 0;
- }
- }
- else if (this.waterfall && i == this.gridData.length - 1) {
- if (this._yaxis.min <= 0 && this._yaxis.max >= 0) {
- ystart = this._yaxis.series_u2p(0);
- }
- else if (this._yaxis.min > 0) {
- ystart = ctx.canvas.height;
- }
- else {
- ystart = 0;
- }
- }
- else {
- ystart = ctx.canvas.height;
- }
- }
- if ((this.fillToZero && this._plotData[i][1] < 0) || (this.waterfall && this._data[i][1] < 0)) {
- if (this.varyBarColor && !this._stack) {
- if (this.useNegativeColors) {
- opts.fillStyle = negativeColors.next();
- }
- else {
- opts.fillStyle = positiveColors.next();
- }
- }
- else {
- opts.fillStyle = negativeColor;
- }
- }
- else {
- if (this.varyBarColor && !this._stack) {
- opts.fillStyle = positiveColors.next();
- }
- else {
- opts.fillStyle = positiveColor;
- }
- }
-
- if (!this.fillToZero || this._plotData[i][1] >= 0) {
- points.push([base-this.barWidth/2, ystart]);
- points.push([base-this.barWidth/2, gridData[i][1]]);
- points.push([base+this.barWidth/2, gridData[i][1]]);
- points.push([base+this.barWidth/2, ystart]);
- }
- // for negative bars make sure points are always ordered clockwise
- else {
- points.push([base-this.barWidth/2, gridData[i][1]]);
- points.push([base-this.barWidth/2, ystart]);
- points.push([base+this.barWidth/2, ystart]);
- points.push([base+this.barWidth/2, gridData[i][1]]);
- }
- this._barPoints.push(points);
- // now draw the shadows if not stacked.
- // for stacked plots, they are predrawn by drawShadow
- if (shadow && !this._stack) {
- var sopts = $.extend(true, {}, opts);
- // need to get rid of fillStyle on shadow.
- delete sopts.fillStyle;
- this.renderer.shadowRenderer.draw(ctx, points, sopts);
- }
- var clr = opts.fillStyle || this.color;
- this._dataColors.push(clr);
- this.renderer.shapeRenderer.draw(ctx, points, opts);
- }
- }
-
- else if (this.barDirection == 'horizontal'){
- for (var i=0; i<gridData.length; i++) {
- if (!this._stack && this.data[i][0] == null) {
- continue;
- }
- points = [];
- base = gridData[i][1] - this._barNudge;
- xstart;
-
- if (this._stack && this._prevGridData.length) {
- xstart = getStart(this.index, i, this._plotData[i][0], plot, 'x');
- }
- // not stacked
- else {
- if (this.fillToZero) {
- xstart = this._xaxis.series_u2p(0);
- }
- else if (this.waterfall && i > 0 && i < this.gridData.length-1) {
- xstart = this.gridData[i-1][0];
- }
- else if (this.waterfall && i == 0 && i < this.gridData.length-1) {
- if (this._xaxis.min <= 0 && this._xaxis.max >= 0) {
- xstart = this._xaxis.series_u2p(0);
- }
- else if (this._xaxis.min > 0) {
- xstart = 0;
- }
- else {
- xstart = 0;
- }
- }
- else if (this.waterfall && i == this.gridData.length - 1) {
- if (this._xaxis.min <= 0 && this._xaxis.max >= 0) {
- xstart = this._xaxis.series_u2p(0);
- }
- else if (this._xaxis.min > 0) {
- xstart = 0;
- }
- else {
- xstart = ctx.canvas.width;
- }
- }
- else {
- xstart = 0;
- }
- }
- if ((this.fillToZero && this._plotData[i][1] < 0) || (this.waterfall && this._data[i][1] < 0)) {
- if (this.varyBarColor && !this._stack) {
- if (this.useNegativeColors) {
- opts.fillStyle = negativeColors.next();
- }
- else {
- opts.fillStyle = positiveColors.next();
- }
- }
- }
- else {
- if (this.varyBarColor && !this._stack) {
- opts.fillStyle = positiveColors.next();
- }
- else {
- opts.fillStyle = positiveColor;
- }
- }
-
-
- if (!this.fillToZero || this._plotData[i][0] >= 0) {
- points.push([xstart, base + this.barWidth / 2]);
- points.push([xstart, base - this.barWidth / 2]);
- points.push([gridData[i][0], base - this.barWidth / 2]);
- points.push([gridData[i][0], base + this.barWidth / 2]);
- }
- else {
- points.push([gridData[i][0], base + this.barWidth / 2]);
- points.push([gridData[i][0], base - this.barWidth / 2]);
- points.push([xstart, base - this.barWidth / 2]);
- points.push([xstart, base + this.barWidth / 2]);
- }
-
- this._barPoints.push(points);
- // now draw the shadows if not stacked.
- // for stacked plots, they are predrawn by drawShadow
- if (shadow && !this._stack) {
- var sopts = $.extend(true, {}, opts);
- delete sopts.fillStyle;
- this.renderer.shadowRenderer.draw(ctx, points, sopts);
- }
- var clr = opts.fillStyle || this.color;
- this._dataColors.push(clr);
- this.renderer.shapeRenderer.draw(ctx, points, opts);
- }
- }
- }
-
- if (this.highlightColors.length == 0) {
- this.highlightColors = $.jqplot.computeHighlightColors(this._dataColors);
- }
-
- else if (typeof(this.highlightColors) == 'string') {
- var temp = this.highlightColors;
- this.highlightColors = [];
- for (var i=0; i<this._dataColors.length; i++) {
- this.highlightColors.push(temp);
- }
- }
-
- };
-
-
- // for stacked plots, shadows will be pre drawn by drawShadow.
- $.jqplot.BarRenderer.prototype.drawShadow = function(ctx, gridData, options, plot) {
- var i;
- var opts = (options != undefined) ? options : {};
- var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
- var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
- var fill = (opts.fill != undefined) ? opts.fill : this.fill;
- var xaxis = this.xaxis;
- var yaxis = this.yaxis;
- var xp = this._xaxis.series_u2p;
- var yp = this._yaxis.series_u2p;
- var pointx, points, pointy, nvals, nseries, pos;
-
- if (this._stack && this.shadow) {
- if (this.barWidth == null) {
- this.renderer.setBarWidth.call(this);
- }
-
- var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this);
- nvals = temp[0];
- nseries = temp[1];
- pos = temp[2];
-
- if (this._stack) {
- this._barNudge = 0;
- }
- else {
- this._barNudge = (-Math.abs(nseries/2 - 0.5) + pos) * (this.barWidth + this.barPadding);
- }
- if (showLine) {
-
- if (this.barDirection == 'vertical') {
- for (var i=0; i<gridData.length; i++) {
- if (this.data[i][1] == null) {
- continue;
- }
- points = [];
- var base = gridData[i][0] + this._barNudge;
- var ystart;
-
- if (this._stack && this._prevGridData.length) {
- ystart = getStart(this.index, i, this._plotData[i][1], plot, 'y');
- }
- else {
- if (this.fillToZero) {
- ystart = this._yaxis.series_u2p(0);
- }
- else {
- ystart = ctx.canvas.height;
- }
- }
-
- points.push([base-this.barWidth/2, ystart]);
- points.push([base-this.barWidth/2, gridData[i][1]]);
- points.push([base+this.barWidth/2, gridData[i][1]]);
- points.push([base+this.barWidth/2, ystart]);
- this.renderer.shadowRenderer.draw(ctx, points, opts);
- }
- }
-
- else if (this.barDirection == 'horizontal'){
- for (var i=0; i<gridData.length; i++) {
- if (this.data[i][0] == null) {
- continue;
- }
- points = [];
- var base = gridData[i][1] - this._barNudge;
- var xstart;
-
- if (this._stack && this._prevGridData.length) {
- xstart = getStart(this.index, i, this._plotData[i][0], plot, 'x');
- }
- else {
- if (this.fillToZero) {
- xstart = this._xaxis.series_u2p(0);
- }
- else {
- xstart = 0;
- }
- }
-
- points.push([xstart, base+this.barWidth/2]);
- points.push([gridData[i][0], base+this.barWidth/2]);
- points.push([gridData[i][0], base-this.barWidth/2]);
- points.push([xstart, base-this.barWidth/2]);
- this.renderer.shadowRenderer.draw(ctx, points, opts);
- }
- }
- }
-
- }
- };
-
- function postInit(target, data, options) {
- for (var i=0; i<this.series.length; i++) {
- if (this.series[i].renderer.constructor == $.jqplot.BarRenderer) {
- // don't allow mouseover and mousedown at same time.
- if (this.series[i].highlightMouseOver) {
- this.series[i].highlightMouseDown = false;
- }
- }
- }
- }
-
- // called within context of plot
- // create a canvas which we can draw on.
- // insert it before the eventCanvas, so eventCanvas will still capture events.
- function postPlotDraw() {
- // Memory Leaks patch
- if (this.plugins.barRenderer && this.plugins.barRenderer.highlightCanvas) {
-
- this.plugins.barRenderer.highlightCanvas.resetCanvas();
- this.plugins.barRenderer.highlightCanvas = null;
- }
-
- this.plugins.barRenderer = {highlightedSeriesIndex:null};
- this.plugins.barRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
-
- this.eventCanvas._elem.before(this.plugins.barRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-barRenderer-highlight-canvas', this._plotDimensions, this));
- this.plugins.barRenderer.highlightCanvas.setContext();
- this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
- }
-
- function highlight (plot, sidx, pidx, points) {
- var s = plot.series[sidx];
- var canvas = plot.plugins.barRenderer.highlightCanvas;
- canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
- s._highlightedPoint = pidx;
- plot.plugins.barRenderer.highlightedSeriesIndex = sidx;
- var opts = {fillStyle: s.highlightColors[pidx]};
- s.renderer.shapeRenderer.draw(canvas._ctx, points, opts);
- canvas = null;
- }
-
- function unhighlight (plot) {
- var canvas = plot.plugins.barRenderer.highlightCanvas;
- canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
- for (var i=0; i<plot.series.length; i++) {
- plot.series[i]._highlightedPoint = null;
- }
- plot.plugins.barRenderer.highlightedSeriesIndex = null;
- plot.target.trigger('jqplotDataUnhighlight');
- canvas = null;
- }
-
-
- function handleMove(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- var evt1 = jQuery.Event('jqplotDataMouseOver');
- evt1.pageX = ev.pageX;
- evt1.pageY = ev.pageY;
- plot.target.trigger(evt1, ins);
- if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.barRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
- var evt = jQuery.Event('jqplotDataHighlight');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points);
- }
- }
- else if (neighbor == null) {
- unhighlight (plot);
- }
- }
-
- function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.barRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
- var evt = jQuery.Event('jqplotDataHighlight');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points);
- }
- }
- else if (neighbor == null) {
- unhighlight (plot);
- }
- }
-
- function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
- var idx = plot.plugins.barRenderer.highlightedSeriesIndex;
- if (idx != null && plot.series[idx].highlightMouseDown) {
- unhighlight(plot);
- }
- }
-
- function handleClick(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- var evt = jQuery.Event('jqplotDataClick');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- }
- }
-
- function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- var idx = plot.plugins.barRenderer.highlightedSeriesIndex;
- if (idx != null && plot.series[idx].highlightMouseDown) {
- unhighlight(plot);
- }
- var evt = jQuery.Event('jqplotDataRightClick');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- }
- }
-
-
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.min.js
deleted file mode 100644
index 47f85dd8..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.barRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(d){d.jqplot.BarRenderer=function(){d.jqplot.LineRenderer.call(this)};d.jqplot.BarRenderer.prototype=new d.jqplot.LineRenderer();d.jqplot.BarRenderer.prototype.constructor=d.jqplot.BarRenderer;d.jqplot.BarRenderer.prototype.init=function(o,q){this.barPadding=8;this.barMargin=10;this.barDirection="vertical";this.barWidth=null;this.shadowOffset=2;this.shadowDepth=5;this.shadowAlpha=0.08;this.waterfall=false;this.groups=1;this.varyBarColor=false;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.transposedData=true;this.renderer.animation={show:false,direction:"down",speed:3000,_supported:true};this._type="bar";if(o.highlightMouseDown&&o.highlightMouseOver==null){o.highlightMouseOver=false}d.extend(true,this,o);d.extend(true,this.renderer,o);this.fill=true;if(this.barDirection==="horizontal"&&this.rendererOptions.animation&&this.rendererOptions.animation.direction==null){this.renderer.animation.direction="left"}if(this.waterfall){this.fillToZero=false;this.disableStack=true}if(this.barDirection=="vertical"){this._primaryAxis="_xaxis";this._stackAxis="y";this.fillAxis="y"}else{this._primaryAxis="_yaxis";this._stackAxis="x";this.fillAxis="x"}this._highlightedPoint=null;this._plotSeriesInfo=null;this._dataColors=[];this._barPoints=[];var p={lineJoin:"miter",lineCap:"round",fill:true,isarc:false,strokeStyle:this.color,fillStyle:this.color,closePath:this.fill};this.renderer.shapeRenderer.init(p);var n={lineJoin:"miter",lineCap:"round",fill:true,isarc:false,angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,depth:this.shadowDepth,closePath:this.fill};this.renderer.shadowRenderer.init(n);q.postInitHooks.addOnce(h);q.postDrawHooks.addOnce(j);q.eventListenerHooks.addOnce("jqplotMouseMove",b);q.eventListenerHooks.addOnce("jqplotMouseDown",a);q.eventListenerHooks.addOnce("jqplotMouseUp",l);q.eventListenerHooks.addOnce("jqplotClick",e);q.eventListenerHooks.addOnce("jqplotRightClick",m)};function g(t,p,o,w){if(this.rendererOptions.barDirection=="horizontal"){this._stackAxis="x";this._primaryAxis="_yaxis"}if(this.rendererOptions.waterfall==true){this._data=d.extend(true,[],this.data);var s=0;var u=(!this.rendererOptions.barDirection||this.rendererOptions.barDirection==="vertical"||this.transposedData===false)?1:0;for(var q=0;q<this.data.length;q++){s+=this.data[q][u];if(q>0){this.data[q][u]+=this.data[q-1][u]}}this.data[this.data.length]=(u==1)?[this.data.length+1,s]:[s,this.data.length+1];this._data[this._data.length]=(u==1)?[this._data.length+1,s]:[s,this._data.length+1]}if(this.rendererOptions.groups>1){this.breakOnNull=true;var n=this.data.length;var v=parseInt(n/this.rendererOptions.groups,10);var r=0;for(var q=v;q<n;q+=v){this.data.splice(q+r,0,[null,null]);this._plotData.splice(q+r,0,[null,null]);this._stackData.splice(q+r,0,[null,null]);r++}for(q=0;q<this.data.length;q++){if(this._primaryAxis=="_xaxis"){this.data[q][0]=q+1;this._plotData[q][0]=q+1;this._stackData[q][0]=q+1}else{this.data[q][1]=q+1;this._plotData[q][1]=q+1;this._stackData[q][1]=q+1}}}}d.jqplot.preSeriesInitHooks.push(g);d.jqplot.BarRenderer.prototype.calcSeriesNumbers=function(){var r=0;var t=0;var q=this[this._primaryAxis];var p,o,u;for(var n=0;n<q._series.length;n++){o=q._series[n];if(o===this){u=n}if(o.renderer.constructor==d.jqplot.BarRenderer){r+=o.data.length;t+=1}}return[r,t,u]};d.jqplot.BarRenderer.prototype.setBarWidth=function(){var q;var n=0;var o=0;var t=this[this._primaryAxis];var x,r,v;var w=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);n=w[0];o=w[1];var u=t.numberTicks;var p=(u-1)/2;if(t.name=="xaxis"||t.name=="x2axis"){if(this._stack){this.barWidth=(t._offsets.max-t._offsets.min)/n*o-this.barMargin}else{this.barWidth=((t._offsets.max-t._offsets.min)/p-this.barPadding*(o-1)-this.barMargin*2)/o}}else{if(this._stack){this.barWidth=(t._offsets.min-t._offsets.max)/n*o-this.barMargin}else{this.barWidth=((t._offsets.min-t._offsets.max)/p-this.barPadding*(o-1)-this.barMargin*2)/o}}return[n,o]};function f(o){var q=[];for(var s=0;s<o.length;s++){var r=d.jqplot.getColorComponents(o[s]);var n=[r[0],r[1],r[2]];var t=n[0]+n[1]+n[2];for(var p=0;p<3;p++){n[p]=(t>570)?n[p]*0.8:n[p]+0.3*(255-n[p]);n[p]=parseInt(n[p],10)}q.push("rgb("+n[0]+","+n[1]+","+n[2]+")")}return q}function i(v,u,s,t,o){var q=v,w=v-1,n,p,r=(o==="x")?0:1;if(q>0){p=t.series[w]._plotData[u][r];if((s*p)<0){n=i(w,u,s,t,o)}else{n=t.series[w].gridData[u][r]}}else{n=(r===0)?t.series[q]._xaxis.series_u2p(0):t.series[q]._yaxis.series_u2p(0)}return n}d.jqplot.BarRenderer.prototype.draw=function(E,L,q,G){var I;var A=d.extend({},q);var w=(A.shadow!=undefined)?A.shadow:this.shadow;var O=(A.showLine!=undefined)?A.showLine:this.showLine;var F=(A.fill!=undefined)?A.fill:this.fill;var p=this.xaxis;var J=this.yaxis;var y=this._xaxis.series_u2p;var K=this._yaxis.series_u2p;var D,C;this._dataColors=[];this._barPoints=[];if(this.barWidth==null){this.renderer.setBarWidth.call(this)}var N=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);var x=N[0];var v=N[1];var s=N[2];var H=[];if(this._stack){this._barNudge=0}else{this._barNudge=(-Math.abs(v/2-0.5)+s)*(this.barWidth+this.barPadding)}if(O){var u=new d.jqplot.ColorGenerator(this.negativeSeriesColors);var B=new d.jqplot.ColorGenerator(this.seriesColors);var M=u.get(this.index);if(!this.useNegativeColors){M=A.fillStyle}var t=A.fillStyle;var r;var P;var o;if(this.barDirection=="vertical"){for(var I=0;I<L.length;I++){if(!this._stack&&this.data[I][1]==null){continue}H=[];r=L[I][0]+this._barNudge;if(this._stack&&this._prevGridData.length){o=i(this.index,I,this._plotData[I][1],G,"y")}else{if(this.fillToZero){o=this._yaxis.series_u2p(0)}else{if(this.waterfall&&I>0&&I<this.gridData.length-1){o=this.gridData[I-1][1]}else{if(this.waterfall&&I==0&&I<this.gridData.length-1){if(this._yaxis.min<=0&&this._yaxis.max>=0){o=this._yaxis.series_u2p(0)}else{if(this._yaxis.min>0){o=E.canvas.height}else{o=0}}}else{if(this.waterfall&&I==this.gridData.length-1){if(this._yaxis.min<=0&&this._yaxis.max>=0){o=this._yaxis.series_u2p(0)}else{if(this._yaxis.min>0){o=E.canvas.height}else{o=0}}}else{o=E.canvas.height}}}}}if((this.fillToZero&&this._plotData[I][1]<0)||(this.waterfall&&this._data[I][1]<0)){if(this.varyBarColor&&!this._stack){if(this.useNegativeColors){A.fillStyle=u.next()}else{A.fillStyle=B.next()}}else{A.fillStyle=M}}else{if(this.varyBarColor&&!this._stack){A.fillStyle=B.next()}else{A.fillStyle=t}}if(!this.fillToZero||this._plotData[I][1]>=0){H.push([r-this.barWidth/2,o]);H.push([r-this.barWidth/2,L[I][1]]);H.push([r+this.barWidth/2,L[I][1]]);H.push([r+this.barWidth/2,o])}else{H.push([r-this.barWidth/2,L[I][1]]);H.push([r-this.barWidth/2,o]);H.push([r+this.barWidth/2,o]);H.push([r+this.barWidth/2,L[I][1]])}this._barPoints.push(H);if(w&&!this._stack){var z=d.extend(true,{},A);delete z.fillStyle;this.renderer.shadowRenderer.draw(E,H,z)}var n=A.fillStyle||this.color;this._dataColors.push(n);this.renderer.shapeRenderer.draw(E,H,A)}}else{if(this.barDirection=="horizontal"){for(var I=0;I<L.length;I++){if(!this._stack&&this.data[I][0]==null){continue}H=[];r=L[I][1]-this._barNudge;P;if(this._stack&&this._prevGridData.length){P=i(this.index,I,this._plotData[I][0],G,"x")}else{if(this.fillToZero){P=this._xaxis.series_u2p(0)}else{if(this.waterfall&&I>0&&I<this.gridData.length-1){P=this.gridData[I-1][0]}else{if(this.waterfall&&I==0&&I<this.gridData.length-1){if(this._xaxis.min<=0&&this._xaxis.max>=0){P=this._xaxis.series_u2p(0)}else{if(this._xaxis.min>0){P=0}else{P=0}}}else{if(this.waterfall&&I==this.gridData.length-1){if(this._xaxis.min<=0&&this._xaxis.max>=0){P=this._xaxis.series_u2p(0)}else{if(this._xaxis.min>0){P=0}else{P=E.canvas.width}}}else{P=0}}}}}if((this.fillToZero&&this._plotData[I][1]<0)||(this.waterfall&&this._data[I][1]<0)){if(this.varyBarColor&&!this._stack){if(this.useNegativeColors){A.fillStyle=u.next()}else{A.fillStyle=B.next()}}}else{if(this.varyBarColor&&!this._stack){A.fillStyle=B.next()}else{A.fillStyle=t}}if(!this.fillToZero||this._plotData[I][0]>=0){H.push([P,r+this.barWidth/2]);H.push([P,r-this.barWidth/2]);H.push([L[I][0],r-this.barWidth/2]);H.push([L[I][0],r+this.barWidth/2])}else{H.push([L[I][0],r+this.barWidth/2]);H.push([L[I][0],r-this.barWidth/2]);H.push([P,r-this.barWidth/2]);H.push([P,r+this.barWidth/2])}this._barPoints.push(H);if(w&&!this._stack){var z=d.extend(true,{},A);delete z.fillStyle;this.renderer.shadowRenderer.draw(E,H,z)}var n=A.fillStyle||this.color;this._dataColors.push(n);this.renderer.shapeRenderer.draw(E,H,A)}}}}if(this.highlightColors.length==0){this.highlightColors=d.jqplot.computeHighlightColors(this._dataColors)}else{if(typeof(this.highlightColors)=="string"){var N=this.highlightColors;this.highlightColors=[];for(var I=0;I<this._dataColors.length;I++){this.highlightColors.push(N)}}}};d.jqplot.BarRenderer.prototype.drawShadow=function(z,G,p,B){var D;var w=(p!=undefined)?p:{};var t=(w.shadow!=undefined)?w.shadow:this.shadow;var I=(w.showLine!=undefined)?w.showLine:this.showLine;var A=(w.fill!=undefined)?w.fill:this.fill;var o=this.xaxis;var E=this.yaxis;var v=this._xaxis.series_u2p;var F=this._yaxis.series_u2p;var y,C,x,u,s,r;if(this._stack&&this.shadow){if(this.barWidth==null){this.renderer.setBarWidth.call(this)}var H=this._plotSeriesInfo=this.renderer.calcSeriesNumbers.call(this);u=H[0];s=H[1];r=H[2];if(this._stack){this._barNudge=0}else{this._barNudge=(-Math.abs(s/2-0.5)+r)*(this.barWidth+this.barPadding)}if(I){if(this.barDirection=="vertical"){for(var D=0;D<G.length;D++){if(this.data[D][1]==null){continue}C=[];var q=G[D][0]+this._barNudge;var n;if(this._stack&&this._prevGridData.length){n=i(this.index,D,this._plotData[D][1],B,"y")}else{if(this.fillToZero){n=this._yaxis.series_u2p(0)}else{n=z.canvas.height}}C.push([q-this.barWidth/2,n]);C.push([q-this.barWidth/2,G[D][1]]);C.push([q+this.barWidth/2,G[D][1]]);C.push([q+this.barWidth/2,n]);this.renderer.shadowRenderer.draw(z,C,w)}}else{if(this.barDirection=="horizontal"){for(var D=0;D<G.length;D++){if(this.data[D][0]==null){continue}C=[];var q=G[D][1]-this._barNudge;var J;if(this._stack&&this._prevGridData.length){J=i(this.index,D,this._plotData[D][0],B,"x")}else{if(this.fillToZero){J=this._xaxis.series_u2p(0)}else{J=0}}C.push([J,q+this.barWidth/2]);C.push([G[D][0],q+this.barWidth/2]);C.push([G[D][0],q-this.barWidth/2]);C.push([J,q-this.barWidth/2]);this.renderer.shadowRenderer.draw(z,C,w)}}}}}};function h(q,p,n){for(var o=0;o<this.series.length;o++){if(this.series[o].renderer.constructor==d.jqplot.BarRenderer){if(this.series[o].highlightMouseOver){this.series[o].highlightMouseDown=false}}}}function j(){if(this.plugins.barRenderer&&this.plugins.barRenderer.highlightCanvas){this.plugins.barRenderer.highlightCanvas.resetCanvas();this.plugins.barRenderer.highlightCanvas=null}this.plugins.barRenderer={highlightedSeriesIndex:null};this.plugins.barRenderer.highlightCanvas=new d.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.barRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-barRenderer-highlight-canvas",this._plotDimensions,this));this.plugins.barRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(n){k(n.data.plot)})}function c(u,t,q,p){var o=u.series[t];var n=u.plugins.barRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);o._highlightedPoint=q;u.plugins.barRenderer.highlightedSeriesIndex=t;var r={fillStyle:o.highlightColors[q]};o.renderer.shapeRenderer.draw(n._ctx,p,r);n=null}function k(p){var n=p.plugins.barRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);for(var o=0;o<p.series.length;o++){p.series[o]._highlightedPoint=null}p.plugins.barRenderer.highlightedSeriesIndex=null;p.target.trigger("jqplotDataUnhighlight");n=null}function b(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataMouseOver");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);if(s.series[p[0]].highlightMouseOver&&!(p[0]==s.plugins.barRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.which=r.which;n.pageX=r.pageX;n.pageY=r.pageY;s.target.trigger(n,p);c(s,t.seriesIndex,t.pointIndex,t.points)}}else{if(t==null){k(s)}}}function a(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];if(r.series[o[0]].highlightMouseDown&&!(o[0]==r.plugins.barRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o);c(r,s.seriesIndex,s.pointIndex,s.points)}}else{if(s==null){k(r)}}}function l(p,o,s,r,q){var n=q.plugins.barRenderer.highlightedSeriesIndex;if(n!=null&&q.series[n].highlightMouseDown){k(q)}}function e(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var n=jQuery.Event("jqplotDataClick");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o)}}function m(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var n=s.plugins.barRenderer.highlightedSeriesIndex;if(n!=null&&s.series[n].highlightMouseDown){k(s)}var o=jQuery.Event("jqplotDataRightClick");o.which=r.which;o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.js
deleted file mode 100644
index f2447058..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.js
+++ /dev/null
@@ -1,234 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- /**
- * Class: $.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.
- *
- */
- $.jqplot.BlockRenderer = function(){
- $.jqplot.LineRenderer.call(this);
- };
-
- $.jqplot.BlockRenderer.prototype = new $.jqplot.LineRenderer();
- $.jqplot.BlockRenderer.prototype.constructor = $.jqplot.BlockRenderer;
-
- // called with scope of a series
- $.jqplot.BlockRenderer.prototype.init = function(options) {
- // Group: Properties
- //
- // prop: css
- // 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.
- this.css = {padding:'2px', border:'1px solid #999', textAlign:'center'};
- // prop: escapeHtml
- // true to escape html in the box label.
- this.escapeHtml = false;
- // prop: insertBreaks
- // true to turn spaces in data block label into html breaks <br />.
- this.insertBreaks = true;
- // prop: varyBlockColors
- // 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.
- this.varyBlockColors = false;
- $.extend(true, this, options);
- if (this.css.backgroundColor) {
- this.color = this.css.backgroundColor;
- }
- else if (this.css.background) {
- this.color = this.css.background;
- }
- else if (!this.varyBlockColors) {
- this.css.background = this.color;
- }
- this.canvas = new $.jqplot.BlockCanvas();
- this.shadowCanvas = new $.jqplot.BlockCanvas();
- this.canvas._plotDimensions = this._plotDimensions;
- this.shadowCanvas._plotDimensions = this._plotDimensions;
- this._type = 'block';
-
- // group: Methods
- //
- // Method: moveBlock
- // 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.moveBlock = function (idx, x, y, duration) {
- // update plotData, stackData, data and gridData
- // x and y are in data coordinates.
- var el = this.canvas._elem.children(':eq('+idx+')');
- this.data[idx][0] = x;
- this.data[idx][1] = y;
- this._plotData[idx][0] = x;
- this._plotData[idx][1] = y;
- this._stackData[idx][0] = x;
- this._stackData[idx][1] = y;
- this.gridData[idx][0] = this._xaxis.series_u2p(x);
- this.gridData[idx][1] = this._yaxis.series_u2p(y);
- var w = el.outerWidth();
- var h = el.outerHeight();
- var left = this.gridData[idx][0] - w/2 + 'px';
- var top = this.gridData[idx][1] - h/2 + 'px';
- if (duration) {
- if (parseInt(duration, 10)) {
- duration = parseInt(duration, 10);
- }
- el.animate({left:left, top:top}, duration);
- }
- else {
- el.css({left:left, top:top});
- }
- el = null;
- };
- };
-
- // called with scope of series
- $.jqplot.BlockRenderer.prototype.draw = function (ctx, gd, options) {
- if (this.plugins.pointLabels) {
- this.plugins.pointLabels.show = false;
- }
- var i, el, d, gd, t, css, w, h, left, top;
- var opts = (options != undefined) ? options : {};
- var colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors);
- this.canvas._elem.empty();
- for (i=0; i<this.gridData.length; i++) {
- d = this.data[i];
- gd = this.gridData[i];
- t = '';
- css = {};
- if (typeof d[2] == 'string') {
- t = d[2];
- }
- else if (typeof d[2] == 'object') {
- css = d[2];
- }
- if (typeof d[3] == 'object') {
- css = d[3];
- }
- if (this.insertBreaks){
- t = t.replace(/ /g, '<br />');
- }
- css = $.extend(true, {}, this.css, css);
- // create a div
- el = $('<div style="position:absolute;margin-left:auto;margin-right:auto;"></div>');
- this.canvas._elem.append(el);
- // set text
- this.escapeHtml ? el.text(t) : el.html(t);
- // style it
- // remove styles we don't want overridden.
- delete css.position;
- delete css.marginRight;
- delete css.marginLeft;
- if (!css.background && !css.backgroundColor && !css.backgroundImage){
- css.background = colorGenerator.next();
- }
- el.css(css);
- w = el.outerWidth();
- h = el.outerHeight();
- left = gd[0] - w/2 + 'px';
- top = gd[1] - h/2 + 'px';
- el.css({left:left, top:top});
- el = null;
- }
- };
-
- $.jqplot.BlockCanvas = function() {
- $.jqplot.ElemContainer.call(this);
- this._ctx;
- };
-
- $.jqplot.BlockCanvas.prototype = new $.jqplot.ElemContainer();
- $.jqplot.BlockCanvas.prototype.constructor = $.jqplot.BlockCanvas;
-
- $.jqplot.BlockCanvas.prototype.createElement = function(offsets, clss, plotDimensions) {
- this._offsets = offsets;
- var klass = 'jqplot-blockCanvas';
- if (clss != undefined) {
- klass = clss;
- }
- var elem;
- // if this canvas already has a dom element, don't make a new one.
- if (this._elem) {
- elem = this._elem.get(0);
- }
- else {
- elem = document.createElement('div');
- }
- // if new plotDimensions supplied, use them.
- if (plotDimensions != undefined) {
- this._plotDimensions = plotDimensions;
- }
-
- var w = this._plotDimensions.width - this._offsets.left - this._offsets.right + 'px';
- var h = this._plotDimensions.height - this._offsets.top - this._offsets.bottom + 'px';
- this._elem = $(elem);
- this._elem.css({ position: 'absolute', width:w, height:h, left: this._offsets.left, top: this._offsets.top });
-
- this._elem.addClass(klass);
- return this._elem;
- };
-
- $.jqplot.BlockCanvas.prototype.setContext = function() {
- this._ctx = {
- canvas:{
- width:0,
- height:0
- },
- clearRect:function(){return null;}
- };
- return this._ctx;
- };
-
-})(jQuery);
-
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.min.js
deleted file mode 100644
index 62cfd0b8..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.blockRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(a){a.jqplot.BlockRenderer=function(){a.jqplot.LineRenderer.call(this)};a.jqplot.BlockRenderer.prototype=new a.jqplot.LineRenderer();a.jqplot.BlockRenderer.prototype.constructor=a.jqplot.BlockRenderer;a.jqplot.BlockRenderer.prototype.init=function(b){this.css={padding:"2px",border:"1px solid #999",textAlign:"center"};this.escapeHtml=false;this.insertBreaks=true;this.varyBlockColors=false;a.extend(true,this,b);if(this.css.backgroundColor){this.color=this.css.backgroundColor}else{if(this.css.background){this.color=this.css.background}else{if(!this.varyBlockColors){this.css.background=this.color}}}this.canvas=new a.jqplot.BlockCanvas();this.shadowCanvas=new a.jqplot.BlockCanvas();this.canvas._plotDimensions=this._plotDimensions;this.shadowCanvas._plotDimensions=this._plotDimensions;this._type="block";this.moveBlock=function(l,j,i,e){var c=this.canvas._elem.children(":eq("+l+")");this.data[l][0]=j;this.data[l][1]=i;this._plotData[l][0]=j;this._plotData[l][1]=i;this._stackData[l][0]=j;this._stackData[l][1]=i;this.gridData[l][0]=this._xaxis.series_u2p(j);this.gridData[l][1]=this._yaxis.series_u2p(i);var k=c.outerWidth();var f=c.outerHeight();var d=this.gridData[l][0]-k/2+"px";var g=this.gridData[l][1]-f/2+"px";if(e){if(parseInt(e,10)){e=parseInt(e,10)}c.animate({left:d,top:g},e)}else{c.css({left:d,top:g})}c=null}};a.jqplot.BlockRenderer.prototype.draw=function(q,o,r){if(this.plugins.pointLabels){this.plugins.pointLabels.show=false}var f,c,l,o,p,k,n,g,e,m;var b=(r!=undefined)?r:{};var j=new a.jqplot.ColorGenerator(this.seriesColors);this.canvas._elem.empty();for(f=0;f<this.gridData.length;f++){l=this.data[f];o=this.gridData[f];p="";k={};if(typeof l[2]=="string"){p=l[2]}else{if(typeof l[2]=="object"){k=l[2]}}if(typeof l[3]=="object"){k=l[3]}if(this.insertBreaks){p=p.replace(/ /g,"<br />")}k=a.extend(true,{},this.css,k);c=a('<div style="position:absolute;margin-left:auto;margin-right:auto;"></div>');this.canvas._elem.append(c);this.escapeHtml?c.text(p):c.html(p);delete k.position;delete k.marginRight;delete k.marginLeft;if(!k.background&&!k.backgroundColor&&!k.backgroundImage){k.background=j.next()}c.css(k);n=c.outerWidth();g=c.outerHeight();e=o[0]-n/2+"px";m=o[1]-g/2+"px";c.css({left:e,top:m});c=null}};a.jqplot.BlockCanvas=function(){a.jqplot.ElemContainer.call(this);this._ctx};a.jqplot.BlockCanvas.prototype=new a.jqplot.ElemContainer();a.jqplot.BlockCanvas.prototype.constructor=a.jqplot.BlockCanvas;a.jqplot.BlockCanvas.prototype.createElement=function(i,e,c){this._offsets=i;var b="jqplot-blockCanvas";if(e!=undefined){b=e}var g;if(this._elem){g=this._elem.get(0)}else{g=document.createElement("div")}if(c!=undefined){this._plotDimensions=c}var d=this._plotDimensions.width-this._offsets.left-this._offsets.right+"px";var f=this._plotDimensions.height-this._offsets.top-this._offsets.bottom+"px";this._elem=a(g);this._elem.css({position:"absolute",width:d,height:f,left:this._offsets.left,top:this._offsets.top});this._elem.addClass(b);return this._elem};a.jqplot.BlockCanvas.prototype.setContext=function(){this._ctx={canvas:{width:0,height:0},clearRect:function(){return null}};return this._ctx}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.js
deleted file mode 100644
index 3793d6de..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.js
+++ /dev/null
@@ -1,758 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- var arrayMax = function( array ){
- return Math.max.apply( Math, array );
- };
- var arrayMin = function( array ){
- return Math.min.apply( Math, array );
- };
-
- /**
- * Class: $.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
- * > }
- * > }
- *
- */
- $.jqplot.BubbleRenderer = function(){
- $.jqplot.LineRenderer.call(this);
- };
-
- $.jqplot.BubbleRenderer.prototype = new $.jqplot.LineRenderer();
- $.jqplot.BubbleRenderer.prototype.constructor = $.jqplot.BubbleRenderer;
-
- // called with scope of a series
- $.jqplot.BubbleRenderer.prototype.init = function(options, plot) {
- // Group: Properties
- //
- // prop: varyBubbleColors
- // 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.
- this.varyBubbleColors = true;
- // prop: autoscaleBubbles
- // 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.
- this.autoscaleBubbles = true;
- // prop: autoscaleMultiplier
- // Multiplier the bubble size if autoscaleBubbles is true.
- this.autoscaleMultiplier = 1.0;
- // prop: autoscalePointsFactor
- // 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.
- this.autoscalePointsFactor = -0.07;
- // prop: escapeHtml
- // True to escape html in bubble label text.
- this.escapeHtml = true;
- // prop: highlightMouseOver
- // True to highlight bubbles when moused over.
- // This must be false to enable highlightMouseDown to highlight when clicking on a slice.
- this.highlightMouseOver = true;
- // prop: highlightMouseDown
- // True to highlight when a mouse button is pressed over a bubble.
- // This will be disabled if highlightMouseOver is true.
- this.highlightMouseDown = false;
- // prop: highlightColors
- // An array of colors to use when highlighting a slice. Calculated automatically
- // if not supplied.
- this.highlightColors = [];
- // prop: bubbleAlpha
- // Alpha transparency to apply to all bubbles in this series.
- this.bubbleAlpha = 1.0;
- // prop: highlightAlpha
- // Alpha transparency to apply when highlighting bubble.
- // Set to value of bubbleAlpha by default.
- this.highlightAlpha = null;
- // prop: bubbleGradients
- // 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.
- this.bubbleGradients = false;
- // prop: showLabels
- // True to show labels on bubbles (if any), false to not show.
- this.showLabels = true;
- // array of [point index, radius] which will be sorted in descending order to plot
- // largest points below smaller points.
- this.radii = [];
- this.maxRadius = 0;
- // index of the currenty highlighted point, if any
- this._highlightedPoint = null;
- // array of jQuery labels.
- this.labels = [];
- this.bubbleCanvases = [];
- this._type = 'bubble';
-
- // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
- if (options.highlightMouseDown && options.highlightMouseOver == null) {
- options.highlightMouseOver = false;
- }
-
- $.extend(true, this, options);
-
- if (this.highlightAlpha == null) {
- this.highlightAlpha = this.bubbleAlpha;
- if (this.bubbleGradients) {
- this.highlightAlpha = 0.35;
- }
- }
-
- this.autoscaleMultiplier = this.autoscaleMultiplier * Math.pow(this.data.length, this.autoscalePointsFactor);
-
- // index of the currenty highlighted point, if any
- this._highlightedPoint = null;
-
- // adjust the series colors for options colors passed in with data or for alpha.
- // note, this can leave undefined holes in the seriesColors array.
- var comps;
- for (var i=0; i<this.data.length; i++) {
- var color = null;
- var d = this.data[i];
- this.maxRadius = Math.max(this.maxRadius, d[2]);
- if (d[3]) {
- if (typeof(d[3]) == 'object') {
- color = d[3]['color'];
- }
- }
-
- if (color == null) {
- if (this.seriesColors[i] != null) {
- color = this.seriesColors[i];
- }
- }
-
- if (color && this.bubbleAlpha < 1.0) {
- comps = $.jqplot.getColorComponents(color);
- color = 'rgba('+comps[0]+', '+comps[1]+', '+comps[2]+', '+this.bubbleAlpha+')';
- }
-
- if (color) {
- this.seriesColors[i] = color;
- }
- }
-
- if (!this.varyBubbleColors) {
- this.seriesColors = [this.color];
- }
-
- this.colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors);
-
- // set highlight colors if none provided
- if (this.highlightColors.length == 0) {
- for (var i=0; i<this.seriesColors.length; i++){
- var rgba = $.jqplot.getColorComponents(this.seriesColors[i]);
- var newrgb = [rgba[0], rgba[1], rgba[2]];
- var sum = newrgb[0] + newrgb[1] + newrgb[2];
- for (var j=0; j<3; j++) {
- // when darkening, lowest color component can be is 60.
- newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]);
- newrgb[j] = parseInt(newrgb[j], 10);
- }
- this.highlightColors.push('rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+', '+this.highlightAlpha+')');
- }
- }
-
- this.highlightColorGenerator = new $.jqplot.ColorGenerator(this.highlightColors);
-
- var sopts = {fill:true, isarc:true, angle:this.shadowAngle, alpha:this.shadowAlpha, closePath:true};
-
- this.renderer.shadowRenderer.init(sopts);
-
- this.canvas = new $.jqplot.DivCanvas();
- this.canvas._plotDimensions = this._plotDimensions;
-
- plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
- plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
- plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
- plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
- plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
- plot.postDrawHooks.addOnce(postPlotDraw);
-
- };
-
-
- // converts the user data values to grid coordinates and stores them
- // in the gridData array.
- // Called with scope of a series.
- $.jqplot.BubbleRenderer.prototype.setGridData = function(plot) {
- // recalculate the grid data
- var xp = this._xaxis.series_u2p;
- var yp = this._yaxis.series_u2p;
- var data = this._plotData;
- this.gridData = [];
- var radii = [];
- this.radii = [];
- var dim = Math.min(plot._height, plot._width);
- for (var i=0; i<this.data.length; i++) {
- if (data[i] != null) {
- this.gridData.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1]), data[i][2]]);
- this.radii.push([i, data[i][2]]);
- radii.push(data[i][2]);
- }
- }
- var r, val, maxr = this.maxRadius = arrayMax(radii);
- var l = this.gridData.length;
- if (this.autoscaleBubbles) {
- for (var i=0; i<l; i++) {
- val = radii[i]/maxr;
- r = this.autoscaleMultiplier * dim / 6;
- this.gridData[i][2] = r * val;
- }
- }
-
- this.radii.sort(function(a, b) { return b[1] - a[1]; });
- };
-
- // 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.BubbleRenderer.prototype.makeGridData = function(data, plot) {
- // recalculate the grid data
- var xp = this._xaxis.series_u2p;
- var yp = this._yaxis.series_u2p;
- var gd = [];
- var radii = [];
- this.radii = [];
- var dim = Math.min(plot._height, plot._width);
- for (var i=0; i<data.length; i++) {
- if (data[i] != null) {
- gd.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1]), data[i][2]]);
- radii.push(data[i][2]);
- this.radii.push([i, data[i][2]]);
- }
- }
- var r, val, maxr = this.maxRadius = arrayMax(radii);
- var l = this.gridData.length;
- if (this.autoscaleBubbles) {
- for (var i=0; i<l; i++) {
- val = radii[i]/maxr;
- r = this.autoscaleMultiplier * dim / 6;
- gd[i][2] = r * val;
- }
- }
- this.radii.sort(function(a, b) { return b[1] - a[1]; });
- return gd;
- };
-
- // called with scope of series
- $.jqplot.BubbleRenderer.prototype.draw = function (ctx, gd, options) {
- if (this.plugins.pointLabels) {
- this.plugins.pointLabels.show = false;
- }
- var opts = (options != undefined) ? options : {};
- var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
- this.canvas._elem.empty();
- for (var i=0; i<this.radii.length; i++) {
- var idx = this.radii[i][0];
- var t=null;
- var color = null;
- var el = null;
- var tel = null;
- var d = this.data[idx];
- var gd = this.gridData[idx];
- if (d[3]) {
- if (typeof(d[3]) == 'object') {
- t = d[3]['label'];
- }
- else if (typeof(d[3]) == 'string') {
- t = d[3];
- }
- }
-
- // color = (this.varyBubbleColors) ? this.colorGenerator.get(idx) : this.color;
- color = this.colorGenerator.get(idx);
-
- // If we're drawing a shadow, expand the canvas dimensions to accomodate.
- var canvasRadius = gd[2];
- var offset, depth;
- if (this.shadow) {
- offset = (0.7 + gd[2]/40).toFixed(1);
- depth = 1 + Math.ceil(gd[2]/15);
- canvasRadius += offset*depth;
- }
- this.bubbleCanvases[idx] = new $.jqplot.BubbleCanvas();
- this.canvas._elem.append(this.bubbleCanvases[idx].createElement(gd[0], gd[1], canvasRadius));
- this.bubbleCanvases[idx].setContext();
- var ctx = this.bubbleCanvases[idx]._ctx;
- var x = ctx.canvas.width/2;
- var y = ctx.canvas.height/2;
- if (this.shadow) {
- this.renderer.shadowRenderer.draw(ctx, [x, y, gd[2], 0, 2*Math.PI], {offset: offset, depth: depth});
- }
- this.bubbleCanvases[idx].draw(gd[2], color, this.bubbleGradients, this.shadowAngle/180*Math.PI);
-
- // now draw label.
- if (t && this.showLabels) {
- tel = $('<div style="position:absolute;" class="jqplot-bubble-label"></div>');
- if (this.escapeHtml) {
- tel.text(t);
- }
- else {
- tel.html(t);
- }
- this.canvas._elem.append(tel);
- var h = $(tel).outerHeight();
- var w = $(tel).outerWidth();
- var top = gd[1] - 0.5*h;
- var left = gd[0] - 0.5*w;
- tel.css({top: top, left: left});
- this.labels[idx] = $(tel);
- }
- }
- };
-
-
- $.jqplot.DivCanvas = function() {
- $.jqplot.ElemContainer.call(this);
- this._ctx;
- };
-
- $.jqplot.DivCanvas.prototype = new $.jqplot.ElemContainer();
- $.jqplot.DivCanvas.prototype.constructor = $.jqplot.DivCanvas;
-
- $.jqplot.DivCanvas.prototype.createElement = function(offsets, clss, plotDimensions) {
- this._offsets = offsets;
- var klass = 'jqplot-DivCanvas';
- if (clss != undefined) {
- klass = clss;
- }
- var elem;
- // if this canvas already has a dom element, don't make a new one.
- if (this._elem) {
- elem = this._elem.get(0);
- }
- else {
- elem = document.createElement('div');
- }
- // if new plotDimensions supplied, use them.
- if (plotDimensions != undefined) {
- this._plotDimensions = plotDimensions;
- }
-
- var w = this._plotDimensions.width - this._offsets.left - this._offsets.right + 'px';
- var h = this._plotDimensions.height - this._offsets.top - this._offsets.bottom + 'px';
- this._elem = $(elem);
- this._elem.css({ position: 'absolute', width:w, height:h, left: this._offsets.left, top: this._offsets.top });
-
- this._elem.addClass(klass);
- return this._elem;
- };
-
- $.jqplot.DivCanvas.prototype.setContext = function() {
- this._ctx = {
- canvas:{
- width:0,
- height:0
- },
- clearRect:function(){return null;}
- };
- return this._ctx;
- };
-
- $.jqplot.BubbleCanvas = function() {
- $.jqplot.ElemContainer.call(this);
- this._ctx;
- };
-
- $.jqplot.BubbleCanvas.prototype = new $.jqplot.ElemContainer();
- $.jqplot.BubbleCanvas.prototype.constructor = $.jqplot.BubbleCanvas;
-
- // initialize with the x,y pont of bubble center and the bubble radius.
- $.jqplot.BubbleCanvas.prototype.createElement = function(x, y, r) {
- var klass = 'jqplot-bubble-point';
-
- var elem;
- // if this canvas already has a dom element, don't make a new one.
- if (this._elem) {
- elem = this._elem.get(0);
- }
- else {
- elem = document.createElement('canvas');
- }
-
- elem.width = (r != null) ? 2*r : elem.width;
- elem.height = (r != null) ? 2*r : elem.height;
- this._elem = $(elem);
- var l = (x != null && r != null) ? x - r : this._elem.css('left');
- var t = (y != null && r != null) ? y - r : this._elem.css('top');
- this._elem.css({ position: 'absolute', left: l, top: t });
-
- this._elem.addClass(klass);
- if ($.jqplot.use_excanvas) {
- window.G_vmlCanvasManager.init_(document);
- elem = window.G_vmlCanvasManager.initElement(elem);
- }
-
- return this._elem;
- };
-
- $.jqplot.BubbleCanvas.prototype.draw = function(r, color, gradients, angle) {
- var ctx = this._ctx;
- // r = Math.floor(r*1.04);
- // var x = Math.round(ctx.canvas.width/2);
- // var y = Math.round(ctx.canvas.height/2);
- var x = ctx.canvas.width/2;
- var y = ctx.canvas.height/2;
- ctx.save();
- if (gradients && !$.jqplot.use_excanvas) {
- r = r*1.04;
- var comps = $.jqplot.getColorComponents(color);
- var colorinner = 'rgba('+Math.round(comps[0]+0.8*(255-comps[0]))+', '+Math.round(comps[1]+0.8*(255-comps[1]))+', '+Math.round(comps[2]+0.8*(255-comps[2]))+', '+comps[3]+')';
- var colorend = 'rgba('+comps[0]+', '+comps[1]+', '+comps[2]+', 0)';
- // var rinner = Math.round(0.35 * r);
- // var xinner = Math.round(x - Math.cos(angle) * 0.33 * r);
- // var yinner = Math.round(y - Math.sin(angle) * 0.33 * r);
- var rinner = 0.35 * r;
- var xinner = x - Math.cos(angle) * 0.33 * r;
- var yinner = y - Math.sin(angle) * 0.33 * r;
- var radgrad = ctx.createRadialGradient(xinner, yinner, rinner, x, y, r);
- radgrad.addColorStop(0, colorinner);
- radgrad.addColorStop(0.93, color);
- radgrad.addColorStop(0.96, colorend);
- radgrad.addColorStop(1, colorend);
- // radgrad.addColorStop(.98, colorend);
- ctx.fillStyle = radgrad;
- ctx.fillRect(0,0, ctx.canvas.width, ctx.canvas.height);
- }
- else {
- ctx.fillStyle = color;
- ctx.strokeStyle = color;
- ctx.lineWidth = 1;
- ctx.beginPath();
- var ang = 2*Math.PI;
- ctx.arc(x, y, r, 0, ang, 0);
- ctx.closePath();
- ctx.fill();
- }
- ctx.restore();
- };
-
- $.jqplot.BubbleCanvas.prototype.setContext = function() {
- this._ctx = this._elem.get(0).getContext("2d");
- return this._ctx;
- };
-
- $.jqplot.BubbleAxisRenderer = function() {
- $.jqplot.LinearAxisRenderer.call(this);
- };
-
- $.jqplot.BubbleAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
- $.jqplot.BubbleAxisRenderer.prototype.constructor = $.jqplot.BubbleAxisRenderer;
-
- // called with scope of axis object.
- $.jqplot.BubbleAxisRenderer.prototype.init = function(options){
- $.extend(true, this, options);
- var db = this._dataBounds;
- var minsidx = 0,
- minpidx = 0,
- maxsidx = 0,
- maxpidx = 0,
- maxr = 0,
- minr = 0,
- minMaxRadius = 0,
- maxMaxRadius = 0,
- maxMult = 0,
- minMult = 0;
- // Go through all the series attached to this axis and find
- // the min/max bounds for this axis.
- for (var i=0; i<this._series.length; i++) {
- var s = this._series[i];
- var d = s._plotData;
-
- for (var j=0; j<d.length; j++) {
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- if (d[j][0] < db.min || db.min == null) {
- db.min = d[j][0];
- minsidx=i;
- minpidx=j;
- minr = d[j][2];
- minMaxRadius = s.maxRadius;
- minMult = s.autoscaleMultiplier;
- }
- if (d[j][0] > db.max || db.max == null) {
- db.max = d[j][0];
- maxsidx=i;
- maxpidx=j;
- maxr = d[j][2];
- maxMaxRadius = s.maxRadius;
- maxMult = s.autoscaleMultiplier;
- }
- }
- else {
- if (d[j][1] < db.min || db.min == null) {
- db.min = d[j][1];
- minsidx=i;
- minpidx=j;
- minr = d[j][2];
- minMaxRadius = s.maxRadius;
- minMult = s.autoscaleMultiplier;
- }
- if (d[j][1] > db.max || db.max == null) {
- db.max = d[j][1];
- maxsidx=i;
- maxpidx=j;
- maxr = d[j][2];
- maxMaxRadius = s.maxRadius;
- maxMult = s.autoscaleMultiplier;
- }
- }
- }
- }
-
- var minRatio = minr/minMaxRadius;
- var maxRatio = maxr/maxMaxRadius;
-
- // need to estimate the effect of the radius on total axis span and adjust axis accordingly.
- var span = db.max - db.min;
- // var dim = (this.name == 'xaxis' || this.name == 'x2axis') ? this._plotDimensions.width : this._plotDimensions.height;
- var dim = Math.min(this._plotDimensions.width, this._plotDimensions.height);
-
- var minfact = minRatio * minMult/3 * span;
- var maxfact = maxRatio * maxMult/3 * span;
- db.max += maxfact;
- db.min -= minfact;
- };
-
- function highlight (plot, sidx, pidx) {
- plot.plugins.bubbleRenderer.highlightLabelCanvas.empty();
- var s = plot.series[sidx];
- var canvas = plot.plugins.bubbleRenderer.highlightCanvas;
- var ctx = canvas._ctx;
- ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
- s._highlightedPoint = pidx;
- plot.plugins.bubbleRenderer.highlightedSeriesIndex = sidx;
-
- var color = s.highlightColorGenerator.get(pidx);
- var x = s.gridData[pidx][0],
- y = s.gridData[pidx][1],
- r = s.gridData[pidx][2];
- ctx.save();
- ctx.fillStyle = color;
- ctx.strokeStyle = color;
- ctx.lineWidth = 1;
- ctx.beginPath();
- ctx.arc(x, y, r, 0, 2*Math.PI, 0);
- ctx.closePath();
- ctx.fill();
- ctx.restore();
- // bring label to front
- if (s.labels[pidx]) {
- plot.plugins.bubbleRenderer.highlightLabel = s.labels[pidx].clone();
- plot.plugins.bubbleRenderer.highlightLabel.appendTo(plot.plugins.bubbleRenderer.highlightLabelCanvas);
- plot.plugins.bubbleRenderer.highlightLabel.addClass('jqplot-bubble-label-highlight');
- }
- }
-
- function unhighlight (plot) {
- var canvas = plot.plugins.bubbleRenderer.highlightCanvas;
- var sidx = plot.plugins.bubbleRenderer.highlightedSeriesIndex;
- plot.plugins.bubbleRenderer.highlightLabelCanvas.empty();
- canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
- for (var i=0; i<plot.series.length; i++) {
- plot.series[i]._highlightedPoint = null;
- }
- plot.plugins.bubbleRenderer.highlightedSeriesIndex = null;
- plot.target.trigger('jqplotDataUnhighlight');
- }
-
-
- function handleMove(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var si = neighbor.seriesIndex;
- var pi = neighbor.pointIndex;
- var ins = [si, pi, neighbor.data, plot.series[si].gridData[pi][2]];
- var evt1 = jQuery.Event('jqplotDataMouseOver');
- evt1.pageX = ev.pageX;
- evt1.pageY = ev.pageY;
- plot.target.trigger(evt1, ins);
- if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.bubbleRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
- var evt = jQuery.Event('jqplotDataHighlight');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- highlight (plot, ins[0], ins[1]);
- }
- }
- else if (neighbor == null) {
- unhighlight (plot);
- }
- }
-
- function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var si = neighbor.seriesIndex;
- var pi = neighbor.pointIndex;
- var ins = [si, pi, neighbor.data, plot.series[si].gridData[pi][2]];
- if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.bubbleRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
- var evt = jQuery.Event('jqplotDataHighlight');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- highlight (plot, ins[0], ins[1]);
- }
- }
- else if (neighbor == null) {
- unhighlight (plot);
- }
- }
-
- function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
- var idx = plot.plugins.bubbleRenderer.highlightedSeriesIndex;
- if (idx != null && plot.series[idx].highlightMouseDown) {
- unhighlight(plot);
- }
- }
-
- function handleClick(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var si = neighbor.seriesIndex;
- var pi = neighbor.pointIndex;
- var ins = [si, pi, neighbor.data, plot.series[si].gridData[pi][2]];
- var evt = jQuery.Event('jqplotDataClick');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- }
- }
-
- function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var si = neighbor.seriesIndex;
- var pi = neighbor.pointIndex;
- var ins = [si, pi, neighbor.data, plot.series[si].gridData[pi][2]];
- var idx = plot.plugins.bubbleRenderer.highlightedSeriesIndex;
- if (idx != null && plot.series[idx].highlightMouseDown) {
- unhighlight(plot);
- }
- var evt = jQuery.Event('jqplotDataRightClick');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- }
- }
-
- // called within context of plot
- // create a canvas which we can draw on.
- // insert it before the eventCanvas, so eventCanvas will still capture events.
- function postPlotDraw() {
- // Memory Leaks patch
- if (this.plugins.bubbleRenderer && this.plugins.bubbleRenderer.highlightCanvas) {
- this.plugins.bubbleRenderer.highlightCanvas.resetCanvas();
- this.plugins.bubbleRenderer.highlightCanvas = null;
- }
-
- this.plugins.bubbleRenderer = {highlightedSeriesIndex:null};
- this.plugins.bubbleRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
- this.plugins.bubbleRenderer.highlightLabel = null;
- this.plugins.bubbleRenderer.highlightLabelCanvas = $('<div style="position:absolute;"></div>');
- var top = this._gridPadding.top;
- var left = this._gridPadding.left;
- var width = this._plotDimensions.width - this._gridPadding.left - this._gridPadding.right;
- var height = this._plotDimensions.height - this._gridPadding.top - this._gridPadding.bottom;
- this.plugins.bubbleRenderer.highlightLabelCanvas.css({top:top, left:left, width:width+'px', height:height+'px'});
-
- this.eventCanvas._elem.before(this.plugins.bubbleRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-bubbleRenderer-highlight-canvas', this._plotDimensions, this));
- this.eventCanvas._elem.before(this.plugins.bubbleRenderer.highlightLabelCanvas);
-
- var hctx = this.plugins.bubbleRenderer.highlightCanvas.setContext();
- }
-
-
- // setup default renderers for axes and legend so user doesn't have to
- // called with scope of plot
- function preInit(target, data, options) {
- options = options || {};
- options.axesDefaults = options.axesDefaults || {};
- options.seriesDefaults = options.seriesDefaults || {};
- // only set these if there is a Bubble series
- var setopts = false;
- if (options.seriesDefaults.renderer == $.jqplot.BubbleRenderer) {
- setopts = true;
- }
- else if (options.series) {
- for (var i=0; i < options.series.length; i++) {
- if (options.series[i].renderer == $.jqplot.BubbleRenderer) {
- setopts = true;
- }
- }
- }
-
- if (setopts) {
- options.axesDefaults.renderer = $.jqplot.BubbleAxisRenderer;
- options.sortData = false;
- }
- }
-
- $.jqplot.preInitHooks.push(preInit);
-
-})(jQuery);
-
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.min.js
deleted file mode 100644
index 288dfafc..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.bubbleRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(f){var d=function(m){return Math.max.apply(Math,m)};var j=function(m){return Math.min.apply(Math,m)};f.jqplot.BubbleRenderer=function(){f.jqplot.LineRenderer.call(this)};f.jqplot.BubbleRenderer.prototype=new f.jqplot.LineRenderer();f.jqplot.BubbleRenderer.prototype.constructor=f.jqplot.BubbleRenderer;f.jqplot.BubbleRenderer.prototype.init=function(w,t){this.varyBubbleColors=true;this.autoscaleBubbles=true;this.autoscaleMultiplier=1;this.autoscalePointsFactor=-0.07;this.escapeHtml=true;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.bubbleAlpha=1;this.highlightAlpha=null;this.bubbleGradients=false;this.showLabels=true;this.radii=[];this.maxRadius=0;this._highlightedPoint=null;this.labels=[];this.bubbleCanvases=[];this._type="bubble";if(w.highlightMouseDown&&w.highlightMouseOver==null){w.highlightMouseOver=false}f.extend(true,this,w);if(this.highlightAlpha==null){this.highlightAlpha=this.bubbleAlpha;if(this.bubbleGradients){this.highlightAlpha=0.35}}this.autoscaleMultiplier=this.autoscaleMultiplier*Math.pow(this.data.length,this.autoscalePointsFactor);this._highlightedPoint=null;var n;for(var r=0;r<this.data.length;r++){var p=null;var v=this.data[r];this.maxRadius=Math.max(this.maxRadius,v[2]);if(v[3]){if(typeof(v[3])=="object"){p=v[3]["color"]}}if(p==null){if(this.seriesColors[r]!=null){p=this.seriesColors[r]}}if(p&&this.bubbleAlpha<1){n=f.jqplot.getColorComponents(p);p="rgba("+n[0]+", "+n[1]+", "+n[2]+", "+this.bubbleAlpha+")"}if(p){this.seriesColors[r]=p}}if(!this.varyBubbleColors){this.seriesColors=[this.color]}this.colorGenerator=new f.jqplot.ColorGenerator(this.seriesColors);if(this.highlightColors.length==0){for(var r=0;r<this.seriesColors.length;r++){var o=f.jqplot.getColorComponents(this.seriesColors[r]);var u=[o[0],o[1],o[2]];var s=u[0]+u[1]+u[2];for(var q=0;q<3;q++){u[q]=(s>570)?u[q]*0.8:u[q]+0.3*(255-u[q]);u[q]=parseInt(u[q],10)}this.highlightColors.push("rgba("+u[0]+","+u[1]+","+u[2]+", "+this.highlightAlpha+")")}}this.highlightColorGenerator=new f.jqplot.ColorGenerator(this.highlightColors);var m={fill:true,isarc:true,angle:this.shadowAngle,alpha:this.shadowAlpha,closePath:true};this.renderer.shadowRenderer.init(m);this.canvas=new f.jqplot.DivCanvas();this.canvas._plotDimensions=this._plotDimensions;t.eventListenerHooks.addOnce("jqplotMouseMove",a);t.eventListenerHooks.addOnce("jqplotMouseDown",b);t.eventListenerHooks.addOnce("jqplotMouseUp",k);t.eventListenerHooks.addOnce("jqplotClick",g);t.eventListenerHooks.addOnce("jqplotRightClick",l);t.postDrawHooks.addOnce(h)};f.jqplot.BubbleRenderer.prototype.setGridData=function(w){var q=this._xaxis.series_u2p;var m=this._yaxis.series_u2p;var t=this._plotData;this.gridData=[];var s=[];this.radii=[];var v=Math.min(w._height,w._width);for(var u=0;u<this.data.length;u++){if(t[u]!=null){this.gridData.push([q.call(this._xaxis,t[u][0]),m.call(this._yaxis,t[u][1]),t[u][2]]);this.radii.push([u,t[u][2]]);s.push(t[u][2])}}var n,o,x=this.maxRadius=d(s);var p=this.gridData.length;if(this.autoscaleBubbles){for(var u=0;u<p;u++){o=s[u]/x;n=this.autoscaleMultiplier*v/6;this.gridData[u][2]=n*o}}this.radii.sort(function(y,r){return r[1]-y[1]})};f.jqplot.BubbleRenderer.prototype.makeGridData=function(t,w){var q=this._xaxis.series_u2p;var n=this._yaxis.series_u2p;var x=[];var s=[];this.radii=[];var v=Math.min(w._height,w._width);for(var u=0;u<t.length;u++){if(t[u]!=null){x.push([q.call(this._xaxis,t[u][0]),n.call(this._yaxis,t[u][1]),t[u][2]]);s.push(t[u][2]);this.radii.push([u,t[u][2]])}}var m,o,y=this.maxRadius=d(s);var p=this.gridData.length;if(this.autoscaleBubbles){for(var u=0;u<p;u++){o=s[u]/y;m=this.autoscaleMultiplier*v/6;x[u][2]=m*o}}this.radii.sort(function(z,r){return r[1]-z[1]});return x};f.jqplot.BubbleRenderer.prototype.draw=function(D,J,n){if(this.plugins.pointLabels){this.plugins.pointLabels.show=false}var A=(n!=undefined)?n:{};var r=(A.shadow!=undefined)?A.shadow:this.shadow;this.canvas._elem.empty();for(var G=0;G<this.radii.length;G++){var C=this.radii[G][0];var z=null;var F=null;var m=null;var p=null;var I=this.data[C];var J=this.gridData[C];if(I[3]){if(typeof(I[3])=="object"){z=I[3]["label"]}else{if(typeof(I[3])=="string"){z=I[3]}}}F=this.colorGenerator.get(C);var E=J[2];var q,K;if(this.shadow){q=(0.7+J[2]/40).toFixed(1);K=1+Math.ceil(J[2]/15);E+=q*K}this.bubbleCanvases[C]=new f.jqplot.BubbleCanvas();this.canvas._elem.append(this.bubbleCanvases[C].createElement(J[0],J[1],E));this.bubbleCanvases[C].setContext();var D=this.bubbleCanvases[C]._ctx;var u=D.canvas.width/2;var s=D.canvas.height/2;if(this.shadow){this.renderer.shadowRenderer.draw(D,[u,s,J[2],0,2*Math.PI],{offset:q,depth:K})}this.bubbleCanvases[C].draw(J[2],F,this.bubbleGradients,this.shadowAngle/180*Math.PI);if(z&&this.showLabels){p=f('<div style="position:absolute;" class="jqplot-bubble-label"></div>');if(this.escapeHtml){p.text(z)}else{p.html(z)}this.canvas._elem.append(p);var H=f(p).outerHeight();var v=f(p).outerWidth();var B=J[1]-0.5*H;var o=J[0]-0.5*v;p.css({top:B,left:o});this.labels[C]=f(p)}}};f.jqplot.DivCanvas=function(){f.jqplot.ElemContainer.call(this);this._ctx};f.jqplot.DivCanvas.prototype=new f.jqplot.ElemContainer();f.jqplot.DivCanvas.prototype.constructor=f.jqplot.DivCanvas;f.jqplot.DivCanvas.prototype.createElement=function(s,p,n){this._offsets=s;var m="jqplot-DivCanvas";if(p!=undefined){m=p}var r;if(this._elem){r=this._elem.get(0)}else{r=document.createElement("div")}if(n!=undefined){this._plotDimensions=n}var o=this._plotDimensions.width-this._offsets.left-this._offsets.right+"px";var q=this._plotDimensions.height-this._offsets.top-this._offsets.bottom+"px";this._elem=f(r);this._elem.css({position:"absolute",width:o,height:q,left:this._offsets.left,top:this._offsets.top});this._elem.addClass(m);return this._elem};f.jqplot.DivCanvas.prototype.setContext=function(){this._ctx={canvas:{width:0,height:0},clearRect:function(){return null}};return this._ctx};f.jqplot.BubbleCanvas=function(){f.jqplot.ElemContainer.call(this);this._ctx};f.jqplot.BubbleCanvas.prototype=new f.jqplot.ElemContainer();f.jqplot.BubbleCanvas.prototype.constructor=f.jqplot.BubbleCanvas;f.jqplot.BubbleCanvas.prototype.createElement=function(n,u,s){var m="jqplot-bubble-point";var q;if(this._elem){q=this._elem.get(0)}else{q=document.createElement("canvas")}q.width=(s!=null)?2*s:q.width;q.height=(s!=null)?2*s:q.height;this._elem=f(q);var o=(n!=null&&s!=null)?n-s:this._elem.css("left");var p=(u!=null&&s!=null)?u-s:this._elem.css("top");this._elem.css({position:"absolute",left:o,top:p});this._elem.addClass(m);if(f.jqplot.use_excanvas){window.G_vmlCanvasManager.init_(document);q=window.G_vmlCanvasManager.initElement(q)}return this._elem};f.jqplot.BubbleCanvas.prototype.draw=function(m,s,v,p){var D=this._ctx;var B=D.canvas.width/2;var z=D.canvas.height/2;D.save();if(v&&!f.jqplot.use_excanvas){m=m*1.04;var o=f.jqplot.getColorComponents(s);var u="rgba("+Math.round(o[0]+0.8*(255-o[0]))+", "+Math.round(o[1]+0.8*(255-o[1]))+", "+Math.round(o[2]+0.8*(255-o[2]))+", "+o[3]+")";var t="rgba("+o[0]+", "+o[1]+", "+o[2]+", 0)";var C=0.35*m;var A=B-Math.cos(p)*0.33*m;var n=z-Math.sin(p)*0.33*m;var w=D.createRadialGradient(A,n,C,B,z,m);w.addColorStop(0,u);w.addColorStop(0.93,s);w.addColorStop(0.96,t);w.addColorStop(1,t);D.fillStyle=w;D.fillRect(0,0,D.canvas.width,D.canvas.height)}else{D.fillStyle=s;D.strokeStyle=s;D.lineWidth=1;D.beginPath();var q=2*Math.PI;D.arc(B,z,m,0,q,0);D.closePath();D.fill()}D.restore()};f.jqplot.BubbleCanvas.prototype.setContext=function(){this._ctx=this._elem.get(0).getContext("2d");return this._ctx};f.jqplot.BubbleAxisRenderer=function(){f.jqplot.LinearAxisRenderer.call(this)};f.jqplot.BubbleAxisRenderer.prototype=new f.jqplot.LinearAxisRenderer();f.jqplot.BubbleAxisRenderer.prototype.constructor=f.jqplot.BubbleAxisRenderer;f.jqplot.BubbleAxisRenderer.prototype.init=function(n){f.extend(true,this,n);var I=this._dataBounds;var H=0,v=0,m=0,y=0,q=0,r=0,D=0,t=0,F=0,z=0;for(var E=0;E<this._series.length;E++){var x=this._series[E];var G=x._plotData;for(var B=0;B<G.length;B++){if(this.name=="xaxis"||this.name=="x2axis"){if(G[B][0]<I.min||I.min==null){I.min=G[B][0];H=E;v=B;r=G[B][2];D=x.maxRadius;z=x.autoscaleMultiplier}if(G[B][0]>I.max||I.max==null){I.max=G[B][0];m=E;y=B;q=G[B][2];t=x.maxRadius;F=x.autoscaleMultiplier}}else{if(G[B][1]<I.min||I.min==null){I.min=G[B][1];H=E;v=B;r=G[B][2];D=x.maxRadius;z=x.autoscaleMultiplier}if(G[B][1]>I.max||I.max==null){I.max=G[B][1];m=E;y=B;q=G[B][2];t=x.maxRadius;F=x.autoscaleMultiplier}}}}var o=r/D;var w=q/t;var C=I.max-I.min;var A=Math.min(this._plotDimensions.width,this._plotDimensions.height);var p=o*z/3*C;var u=w*F/3*C;I.max+=u;I.min-=p};function e(p,v,q){p.plugins.bubbleRenderer.highlightLabelCanvas.empty();var z=p.series[v];var n=p.plugins.bubbleRenderer.highlightCanvas;var w=n._ctx;w.clearRect(0,0,w.canvas.width,w.canvas.height);z._highlightedPoint=q;p.plugins.bubbleRenderer.highlightedSeriesIndex=v;var o=z.highlightColorGenerator.get(q);var u=z.gridData[q][0],t=z.gridData[q][1],m=z.gridData[q][2];w.save();w.fillStyle=o;w.strokeStyle=o;w.lineWidth=1;w.beginPath();w.arc(u,t,m,0,2*Math.PI,0);w.closePath();w.fill();w.restore();if(z.labels[q]){p.plugins.bubbleRenderer.highlightLabel=z.labels[q].clone();p.plugins.bubbleRenderer.highlightLabel.appendTo(p.plugins.bubbleRenderer.highlightLabelCanvas);p.plugins.bubbleRenderer.highlightLabel.addClass("jqplot-bubble-label-highlight")}}function i(p){var m=p.plugins.bubbleRenderer.highlightCanvas;var o=p.plugins.bubbleRenderer.highlightedSeriesIndex;p.plugins.bubbleRenderer.highlightLabelCanvas.empty();m._ctx.clearRect(0,0,m._ctx.canvas.width,m._ctx.canvas.height);for(var n=0;n<p.series.length;n++){p.series[n]._highlightedPoint=null}p.plugins.bubbleRenderer.highlightedSeriesIndex=null;p.target.trigger("jqplotDataUnhighlight")}function a(s,p,m,v,r){if(v){var n=v.seriesIndex;var o=v.pointIndex;var q=[n,o,v.data,r.series[n].gridData[o][2]];var t=jQuery.Event("jqplotDataMouseOver");t.pageX=s.pageX;t.pageY=s.pageY;r.target.trigger(t,q);if(r.series[q[0]].highlightMouseOver&&!(q[0]==r.plugins.bubbleRenderer.highlightedSeriesIndex&&q[1]==r.series[q[0]]._highlightedPoint)){var u=jQuery.Event("jqplotDataHighlight");u.which=s.which;u.pageX=s.pageX;u.pageY=s.pageY;r.target.trigger(u,q);e(r,q[0],q[1])}}else{if(v==null){i(r)}}}function b(s,p,m,u,r){if(u){var n=u.seriesIndex;var o=u.pointIndex;var q=[n,o,u.data,r.series[n].gridData[o][2]];if(r.series[q[0]].highlightMouseDown&&!(q[0]==r.plugins.bubbleRenderer.highlightedSeriesIndex&&q[1]==r.series[q[0]]._highlightedPoint)){var t=jQuery.Event("jqplotDataHighlight");t.which=s.which;t.pageX=s.pageX;t.pageY=s.pageY;r.target.trigger(t,q);e(r,q[0],q[1])}}else{if(u==null){i(r)}}}function k(o,n,r,q,p){var m=p.plugins.bubbleRenderer.highlightedSeriesIndex;if(m!=null&&p.series[m].highlightMouseDown){i(p)}}function g(s,p,m,u,r){if(u){var n=u.seriesIndex;var o=u.pointIndex;var q=[n,o,u.data,r.series[n].gridData[o][2]];var t=jQuery.Event("jqplotDataClick");t.which=s.which;t.pageX=s.pageX;t.pageY=s.pageY;r.target.trigger(t,q)}}function l(s,p,m,v,r){if(v){var n=v.seriesIndex;var o=v.pointIndex;var q=[n,o,v.data,r.series[n].gridData[o][2]];var t=r.plugins.bubbleRenderer.highlightedSeriesIndex;if(t!=null&&r.series[t].highlightMouseDown){i(r)}var u=jQuery.Event("jqplotDataRightClick");u.which=s.which;u.pageX=s.pageX;u.pageY=s.pageY;r.target.trigger(u,q)}}function h(){if(this.plugins.bubbleRenderer&&this.plugins.bubbleRenderer.highlightCanvas){this.plugins.bubbleRenderer.highlightCanvas.resetCanvas();this.plugins.bubbleRenderer.highlightCanvas=null}this.plugins.bubbleRenderer={highlightedSeriesIndex:null};this.plugins.bubbleRenderer.highlightCanvas=new f.jqplot.GenericCanvas();this.plugins.bubbleRenderer.highlightLabel=null;this.plugins.bubbleRenderer.highlightLabelCanvas=f('<div style="position:absolute;"></div>');var q=this._gridPadding.top;var p=this._gridPadding.left;var n=this._plotDimensions.width-this._gridPadding.left-this._gridPadding.right;var m=this._plotDimensions.height-this._gridPadding.top-this._gridPadding.bottom;this.plugins.bubbleRenderer.highlightLabelCanvas.css({top:q,left:p,width:n+"px",height:m+"px"});this.eventCanvas._elem.before(this.plugins.bubbleRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-bubbleRenderer-highlight-canvas",this._plotDimensions,this));this.eventCanvas._elem.before(this.plugins.bubbleRenderer.highlightLabelCanvas);var o=this.plugins.bubbleRenderer.highlightCanvas.setContext()}function c(q,p,n){n=n||{};n.axesDefaults=n.axesDefaults||{};n.seriesDefaults=n.seriesDefaults||{};var m=false;if(n.seriesDefaults.renderer==f.jqplot.BubbleRenderer){m=true}else{if(n.series){for(var o=0;o<n.series.length;o++){if(n.series[o].renderer==f.jqplot.BubbleRenderer){m=true}}}}if(m){n.axesDefaults.renderer=f.jqplot.BubbleAxisRenderer;n.sortData=false}}f.jqplot.preInitHooks.push(c)})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js
deleted file mode 100644
index 22f0bb79..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js
+++ /dev/null
@@ -1,203 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- /**
- * Class: $.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.
- *
- */
- $.jqplot.CanvasAxisLabelRenderer = function(options) {
- // Group: Properties
-
- // prop: angle
- // angle of text, measured clockwise from x axis.
- this.angle = 0;
- // name of the axis associated with this tick
- this.axis;
- // prop: show
- // wether or not to show the tick (mark and label).
- this.show = true;
- // prop: showLabel
- // wether or not to show the label.
- this.showLabel = true;
- // prop: label
- // label for the axis.
- this.label = '';
- // prop: fontFamily
- // 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.
- this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif';
- // prop: fontSize
- // CSS spec for font size.
- this.fontSize = '11pt';
- // prop: fontWeight
- // CSS spec for fontWeight: normal, bold, bolder, lighter or a number 100 - 900
- this.fontWeight = 'normal';
- // prop: fontStretch
- // Multiplier to condense or expand font width.
- // Applies only to browsers which don't support canvas native font rendering.
- this.fontStretch = 1.0;
- // prop: textColor
- // css spec for the color attribute.
- this.textColor = '#666666';
- // prop: enableFontSupport
- // 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.
- this.enableFontSupport = true;
- // prop: pt2px
- // 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.pt2px = null;
-
- this._elem;
- this._ctx;
- this._plotWidth;
- this._plotHeight;
- this._plotDimensions = {height:null, width:null};
-
- $.extend(true, this, options);
-
- if (options.angle == null && this.axis != 'xaxis' && this.axis != 'x2axis') {
- this.angle = -90;
- }
-
- var ropts = {fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily};
- if (this.pt2px) {
- ropts.pt2px = this.pt2px;
- }
-
- if (this.enableFontSupport) {
- if ($.jqplot.support_canvas_text()) {
- this._textRenderer = new $.jqplot.CanvasFontRenderer(ropts);
- }
-
- else {
- this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts);
- }
- }
- else {
- this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts);
- }
- };
-
- $.jqplot.CanvasAxisLabelRenderer.prototype.init = function(options) {
- $.extend(true, this, options);
- this._textRenderer.init({fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily});
- };
-
- // return width along the x axis
- // will check first to see if an element exists.
- // if not, will return the computed text box width.
- $.jqplot.CanvasAxisLabelRenderer.prototype.getWidth = function(ctx) {
- if (this._elem) {
- return this._elem.outerWidth(true);
- }
- else {
- var tr = this._textRenderer;
- var l = tr.getWidth(ctx);
- var h = tr.getHeight(ctx);
- var w = Math.abs(Math.sin(tr.angle)*h) + Math.abs(Math.cos(tr.angle)*l);
- return w;
- }
- };
-
- // return height along the y axis.
- $.jqplot.CanvasAxisLabelRenderer.prototype.getHeight = function(ctx) {
- if (this._elem) {
- return this._elem.outerHeight(true);
- }
- else {
- var tr = this._textRenderer;
- var l = tr.getWidth(ctx);
- var h = tr.getHeight(ctx);
- var w = Math.abs(Math.cos(tr.angle)*h) + Math.abs(Math.sin(tr.angle)*l);
- return w;
- }
- };
-
- $.jqplot.CanvasAxisLabelRenderer.prototype.getAngleRad = function() {
- var a = this.angle * Math.PI/180;
- return a;
- };
-
- $.jqplot.CanvasAxisLabelRenderer.prototype.draw = function(ctx, plot) {
- // Memory Leaks patch
- if (this._elem) {
- if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) {
- window.G_vmlCanvasManager.uninitElement(this._elem.get(0));
- }
-
- this._elem.emptyForce();
- this._elem = null;
- }
-
- // create a canvas here, but can't draw on it untill it is appended
- // to dom for IE compatability.
- var elem = plot.canvasManager.getCanvas();
-
- this._textRenderer.setText(this.label, ctx);
- var w = this.getWidth(ctx);
- var h = this.getHeight(ctx);
- elem.width = w;
- elem.height = h;
- elem.style.width = w;
- elem.style.height = h;
-
- elem = plot.canvasManager.initCanvas(elem);
-
- this._elem = $(elem);
- this._elem.css({ position: 'absolute'});
- this._elem.addClass('jqplot-'+this.axis+'-label');
-
- elem = null;
- return this._elem;
- };
-
- $.jqplot.CanvasAxisLabelRenderer.prototype.pack = function() {
- this._textRenderer.draw(this._elem.get(0).getContext("2d"), this.label);
- };
-
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js
deleted file mode 100644
index dee778f9..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(a){a.jqplot.CanvasAxisLabelRenderer=function(b){this.angle=0;this.axis;this.show=true;this.showLabel=true;this.label="";this.fontFamily='"Trebuchet MS", Arial, Helvetica, sans-serif';this.fontSize="11pt";this.fontWeight="normal";this.fontStretch=1;this.textColor="#666666";this.enableFontSupport=true;this.pt2px=null;this._elem;this._ctx;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null};a.extend(true,this,b);if(b.angle==null&&this.axis!="xaxis"&&this.axis!="x2axis"){this.angle=-90}var c={fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily};if(this.pt2px){c.pt2px=this.pt2px}if(this.enableFontSupport){if(a.jqplot.support_canvas_text()){this._textRenderer=new a.jqplot.CanvasFontRenderer(c)}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}};a.jqplot.CanvasAxisLabelRenderer.prototype.init=function(b){a.extend(true,this,b);this._textRenderer.init({fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily})};a.jqplot.CanvasAxisLabelRenderer.prototype.getWidth=function(d){if(this._elem){return this._elem.outerWidth(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.sin(f.angle)*e)+Math.abs(Math.cos(f.angle)*c);return b}};a.jqplot.CanvasAxisLabelRenderer.prototype.getHeight=function(d){if(this._elem){return this._elem.outerHeight(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.cos(f.angle)*e)+Math.abs(Math.sin(f.angle)*c);return b}};a.jqplot.CanvasAxisLabelRenderer.prototype.getAngleRad=function(){var b=this.angle*Math.PI/180;return b};a.jqplot.CanvasAxisLabelRenderer.prototype.draw=function(c,f){if(this._elem){if(a.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==undefined){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce();this._elem=null}var e=f.canvasManager.getCanvas();this._textRenderer.setText(this.label,c);var b=this.getWidth(c);var d=this.getHeight(c);e.width=b;e.height=d;e.style.width=b;e.style.height=d;e=f.canvasManager.initCanvas(e);this._elem=a(e);this._elem.css({position:"absolute"});this._elem.addClass("jqplot-"+this.axis+"-label");e=null;return this._elem};a.jqplot.CanvasAxisLabelRenderer.prototype.pack=function(){this._textRenderer.draw(this._elem.get(0).getContext("2d"),this.label)}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.js
deleted file mode 100644
index bb1731d6..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.js
+++ /dev/null
@@ -1,243 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- /**
- * Class: $.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.
- */
- $.jqplot.CanvasAxisTickRenderer = function(options) {
- // Group: Properties
-
- // prop: mark
- // tick mark on the axis. One of 'inside', 'outside', 'cross', '' or null.
- this.mark = 'outside';
- // prop: showMark
- // wether or not to show the mark on the axis.
- this.showMark = true;
- // prop: showGridline
- // wether or not to draw the gridline on the grid at this tick.
- this.showGridline = true;
- // prop: isMinorTick
- // if this is a minor tick.
- this.isMinorTick = false;
- // prop: angle
- // angle of text, measured clockwise from x axis.
- this.angle = 0;
- // prop: markSize
- // 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.
- this.markSize = 4;
- // prop: show
- // wether or not to show the tick (mark and label).
- this.show = true;
- // prop: showLabel
- // wether or not to show the label.
- this.showLabel = true;
- // prop: labelPosition
- // 'auto', 'start', 'middle' or 'end'.
- // Whether tick label should be positioned so the start, middle, or end
- // of the tick mark.
- this.labelPosition = 'auto';
- this.label = '';
- this.value = null;
- this._styles = {};
- // prop: formatter
- // A class of a formatter for the tick text.
- // The default $.jqplot.DefaultTickFormatter uses sprintf.
- this.formatter = $.jqplot.DefaultTickFormatter;
- // prop: formatString
- // string passed to the formatter.
- this.formatString = '';
- // prop: prefix
- // String to prepend to the tick label.
- // Prefix is prepended to the formatted tick label.
- this.prefix = '';
- // prop: fontFamily
- // css spec for the font-family css attribute.
- this.fontFamily = '"Trebuchet MS", Arial, Helvetica, sans-serif';
- // prop: fontSize
- // CSS spec for font size.
- this.fontSize = '10pt';
- // prop: fontWeight
- // CSS spec for fontWeight
- this.fontWeight = 'normal';
- // prop: fontStretch
- // Multiplier to condense or expand font width.
- // Applies only to browsers which don't support canvas native font rendering.
- this.fontStretch = 1.0;
- // prop: textColor
- // css spec for the color attribute.
- this.textColor = '#666666';
- // prop: enableFontSupport
- // 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.
- this.enableFontSupport = true;
- // prop: pt2px
- // 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.pt2px = null;
-
- this._elem;
- this._ctx;
- this._plotWidth;
- this._plotHeight;
- this._plotDimensions = {height:null, width:null};
-
- $.extend(true, this, options);
-
- var ropts = {fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily};
- if (this.pt2px) {
- ropts.pt2px = this.pt2px;
- }
-
- if (this.enableFontSupport) {
- if ($.jqplot.support_canvas_text()) {
- this._textRenderer = new $.jqplot.CanvasFontRenderer(ropts);
- }
-
- else {
- this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts);
- }
- }
- else {
- this._textRenderer = new $.jqplot.CanvasTextRenderer(ropts);
- }
- };
-
- $.jqplot.CanvasAxisTickRenderer.prototype.init = function(options) {
- $.extend(true, this, options);
- this._textRenderer.init({fontSize:this.fontSize, fontWeight:this.fontWeight, fontStretch:this.fontStretch, fillStyle:this.textColor, angle:this.getAngleRad(), fontFamily:this.fontFamily});
- };
-
- // return width along the x axis
- // will check first to see if an element exists.
- // if not, will return the computed text box width.
- $.jqplot.CanvasAxisTickRenderer.prototype.getWidth = function(ctx) {
- if (this._elem) {
- return this._elem.outerWidth(true);
- }
- else {
- var tr = this._textRenderer;
- var l = tr.getWidth(ctx);
- var h = tr.getHeight(ctx);
- var w = Math.abs(Math.sin(tr.angle)*h) + Math.abs(Math.cos(tr.angle)*l);
- return w;
- }
- };
-
- // return height along the y axis.
- $.jqplot.CanvasAxisTickRenderer.prototype.getHeight = function(ctx) {
- if (this._elem) {
- return this._elem.outerHeight(true);
- }
- else {
- var tr = this._textRenderer;
- var l = tr.getWidth(ctx);
- var h = tr.getHeight(ctx);
- var w = Math.abs(Math.cos(tr.angle)*h) + Math.abs(Math.sin(tr.angle)*l);
- return w;
- }
- };
-
- $.jqplot.CanvasAxisTickRenderer.prototype.getAngleRad = function() {
- var a = this.angle * Math.PI/180;
- return a;
- };
-
-
- $.jqplot.CanvasAxisTickRenderer.prototype.setTick = function(value, axisName, isMinor) {
- this.value = value;
- if (isMinor) {
- this.isMinorTick = true;
- }
- return this;
- };
-
- $.jqplot.CanvasAxisTickRenderer.prototype.draw = function(ctx, plot) {
- if (!this.label) {
- this.label = this.prefix + this.formatter(this.formatString, this.value);
- }
-
- // Memory Leaks patch
- if (this._elem) {
- if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) {
- window.G_vmlCanvasManager.uninitElement(this._elem.get(0));
- }
-
- this._elem.emptyForce();
- this._elem = null;
- }
-
- // create a canvas here, but can't draw on it untill it is appended
- // to dom for IE compatability.
-
- var elem = plot.canvasManager.getCanvas();
-
- this._textRenderer.setText(this.label, ctx);
- var w = this.getWidth(ctx);
- var h = this.getHeight(ctx);
- // canvases seem to need to have width and heigh attributes directly set.
- elem.width = w;
- elem.height = h;
- elem.style.width = w;
- elem.style.height = h;
- elem.style.textAlign = 'left';
- elem.style.position = 'absolute';
-
- elem = plot.canvasManager.initCanvas(elem);
-
- this._elem = $(elem);
- this._elem.css(this._styles);
- this._elem.addClass('jqplot-'+this.axis+'-tick');
-
- elem = null;
- return this._elem;
- };
-
- $.jqplot.CanvasAxisTickRenderer.prototype.pack = function() {
- this._textRenderer.draw(this._elem.get(0).getContext("2d"), this.label);
- };
-
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js
deleted file mode 100644
index f80e02b2..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(a){a.jqplot.CanvasAxisTickRenderer=function(b){this.mark="outside";this.showMark=true;this.showGridline=true;this.isMinorTick=false;this.angle=0;this.markSize=4;this.show=true;this.showLabel=true;this.labelPosition="auto";this.label="";this.value=null;this._styles={};this.formatter=a.jqplot.DefaultTickFormatter;this.formatString="";this.prefix="";this.fontFamily='"Trebuchet MS", Arial, Helvetica, sans-serif';this.fontSize="10pt";this.fontWeight="normal";this.fontStretch=1;this.textColor="#666666";this.enableFontSupport=true;this.pt2px=null;this._elem;this._ctx;this._plotWidth;this._plotHeight;this._plotDimensions={height:null,width:null};a.extend(true,this,b);var c={fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily};if(this.pt2px){c.pt2px=this.pt2px}if(this.enableFontSupport){if(a.jqplot.support_canvas_text()){this._textRenderer=new a.jqplot.CanvasFontRenderer(c)}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}}else{this._textRenderer=new a.jqplot.CanvasTextRenderer(c)}};a.jqplot.CanvasAxisTickRenderer.prototype.init=function(b){a.extend(true,this,b);this._textRenderer.init({fontSize:this.fontSize,fontWeight:this.fontWeight,fontStretch:this.fontStretch,fillStyle:this.textColor,angle:this.getAngleRad(),fontFamily:this.fontFamily})};a.jqplot.CanvasAxisTickRenderer.prototype.getWidth=function(d){if(this._elem){return this._elem.outerWidth(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.sin(f.angle)*e)+Math.abs(Math.cos(f.angle)*c);return b}};a.jqplot.CanvasAxisTickRenderer.prototype.getHeight=function(d){if(this._elem){return this._elem.outerHeight(true)}else{var f=this._textRenderer;var c=f.getWidth(d);var e=f.getHeight(d);var b=Math.abs(Math.cos(f.angle)*e)+Math.abs(Math.sin(f.angle)*c);return b}};a.jqplot.CanvasAxisTickRenderer.prototype.getAngleRad=function(){var b=this.angle*Math.PI/180;return b};a.jqplot.CanvasAxisTickRenderer.prototype.setTick=function(b,d,c){this.value=b;if(c){this.isMinorTick=true}return this};a.jqplot.CanvasAxisTickRenderer.prototype.draw=function(c,f){if(!this.label){this.label=this.prefix+this.formatter(this.formatString,this.value)}if(this._elem){if(a.jqplot.use_excanvas&&window.G_vmlCanvasManager.uninitElement!==undefined){window.G_vmlCanvasManager.uninitElement(this._elem.get(0))}this._elem.emptyForce();this._elem=null}var e=f.canvasManager.getCanvas();this._textRenderer.setText(this.label,c);var b=this.getWidth(c);var d=this.getHeight(c);e.width=b;e.height=d;e.style.width=b;e.style.height=d;e.style.textAlign="left";e.style.position="absolute";e=f.canvasManager.initCanvas(e);this._elem=a(e);this._elem.css(this._styles);this._elem.addClass("jqplot-"+this.axis+"-tick");e=null;return this._elem};a.jqplot.CanvasAxisTickRenderer.prototype.pack=function(){this._textRenderer.draw(this._elem.get(0).getContext("2d"),this.label)}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.js
deleted file mode 100644
index bc72bc5a..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.js
+++ /dev/null
@@ -1,865 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- var objCounter = 0;
- // class: $.jqplot.CanvasOverlay
- $.jqplot.CanvasOverlay = function(opts){
- var options = opts || {};
- this.options = {
- show: $.jqplot.config.enablePlugins,
- deferDraw: false
- };
- // prop: objects
- this.objects = [];
- this.objectNames = [];
- this.canvas = null;
- this.markerRenderer = new $.jqplot.MarkerRenderer({style:'line'});
- this.markerRenderer.init();
- this.highlightObjectIndex = null;
- if (options.objects) {
- var objs = options.objects,
- obj;
- for (var i=0; i<objs.length; i++) {
- obj = objs[i];
- for (var n in obj) {
- switch (n) {
- case 'line':
- this.addLine(obj[n]);
- break;
- case 'horizontalLine':
- this.addHorizontalLine(obj[n]);
- break;
- case 'dashedHorizontalLine':
- this.addDashedHorizontalLine(obj[n]);
- break;
- case 'verticalLine':
- this.addVerticalLine(obj[n]);
- break;
- case 'dashedVerticalLine':
- this.addDashedVerticalLine(obj[n]);
- break;
- default:
- break;
- }
- }
- }
- }
- $.extend(true, this.options, options);
- };
-
- // called with scope of a plot object
- $.jqplot.CanvasOverlay.postPlotInit = function (target, data, opts) {
- var options = opts || {};
- // add a canvasOverlay attribute to the plot
- this.plugins.canvasOverlay = new $.jqplot.CanvasOverlay(options.canvasOverlay);
- };
-
-
- function LineBase() {
- this.uid = null;
- this.type = null;
- this.gridStart = null;
- this.gridStop = null;
- this.tooltipWidthFactor = 0;
- this.options = {
- // prop: name
- // Optional name for the overlay object.
- // Can be later used to retrieve the object by name.
- name: null,
- // prop: show
- // true to show (draw), false to not draw.
- show: true,
- // prop: lineWidth
- // Width of the line.
- lineWidth: 2,
- // prop: lineCap
- // Type of ending placed on the line ['round', 'butt', 'square']
- lineCap: 'round',
- // prop: color
- // color of the line
- color: '#666666',
- // prop: shadow
- // wether or not to draw a shadow on the line
- shadow: true,
- // prop: shadowAngle
- // Shadow angle in degrees
- shadowAngle: 45,
- // prop: shadowOffset
- // Shadow offset from line in pixels
- shadowOffset: 1,
- // prop: shadowDepth
- // Number of times shadow is stroked, each stroke offset shadowOffset from the last.
- shadowDepth: 3,
- // prop: shadowAlpha
- // Alpha channel transparency of shadow. 0 = transparent.
- shadowAlpha: '0.07',
- // prop: xaxis
- // X axis to use for positioning/scaling the line.
- xaxis: 'xaxis',
- // prop: yaxis
- // Y axis to use for positioning/scaling the line.
- yaxis: 'yaxis',
- // prop: showTooltip
- // Show a tooltip with data point values.
- showTooltip: false,
- // prop: 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.
- showTooltipPrecision: 0.6,
- // prop: tooltipLocation
- // Where to position tooltip, 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'
- tooltipLocation: 'nw',
- // prop: fadeTooltip
- // true = fade in/out tooltip, flase = show/hide tooltip
- fadeTooltip: true,
- // prop: tooltipFadeSpeed
- // 'slow', 'def', 'fast', or number of milliseconds.
- tooltipFadeSpeed: "fast",
- // prop: tooltipOffset
- // Pixel offset of tooltip from the highlight.
- tooltipOffset: 4,
- // prop: tooltipFormatString
- // Format string passed the x and y values of the cursor on the line.
- // e.g., 'Dogs: %.2f, Cats: %d'.
- tooltipFormatString: '%d, %d'
- };
- }
-
- /**
- * Class: Line
- * A straight line.
- */
- function Line(options) {
- LineBase.call(this);
- this.type = 'line';
- var opts = {
- // prop: start
- // [x, y] coordinates for the start of the line.
- start: [],
- // prop: stop
- // [x, y] coordinates for the end of the line.
- stop: []
- };
- $.extend(true, this.options, opts, options);
-
- if (this.options.showTooltipPrecision < 0.01) {
- this.options.showTooltipPrecision = 0.01;
- }
- }
-
- Line.prototype = new LineBase();
- Line.prototype.constructor = Line;
-
-
- /**
- * Class: HorizontalLine
- * A straight horizontal line.
- */
- function HorizontalLine(options) {
- LineBase.call(this);
- this.type = 'horizontalLine';
- var opts = {
- // prop: y
- // y value to position the line
- y: null,
- // prop: xmin
- // x value for the start of the line, null to scale to axis min.
- xmin: null,
- // prop: xmax
- // x value for the end of the line, null to scale to axis max.
- xmax: null,
- // prop xOffset
- // offset ends of the line inside the grid. Number
- xOffset: '6px', // number or string. Number interpreted as units, string as pixels.
- xminOffset: null,
- xmaxOffset: null
- };
- $.extend(true, this.options, opts, options);
-
- if (this.options.showTooltipPrecision < 0.01) {
- this.options.showTooltipPrecision = 0.01;
- }
- }
-
- HorizontalLine.prototype = new LineBase();
- HorizontalLine.prototype.constructor = HorizontalLine;
-
-
- /**
- * Class: DashedHorizontalLine
- * A straight dashed horizontal line.
- */
- function DashedHorizontalLine(options) {
- LineBase.call(this);
- this.type = 'dashedHorizontalLine';
- var opts = {
- y: null,
- xmin: null,
- xmax: null,
- xOffset: '6px', // number or string. Number interpreted as units, string as pixels.
- xminOffset: null,
- xmaxOffset: null,
- // prop: dashPattern
- // 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.
- dashPattern: [8,8]
- };
- $.extend(true, this.options, opts, options);
-
- if (this.options.showTooltipPrecision < 0.01) {
- this.options.showTooltipPrecision = 0.01;
- }
- }
-
- DashedHorizontalLine.prototype = new LineBase();
- DashedHorizontalLine.prototype.constructor = DashedHorizontalLine;
-
-
- /**
- * Class: VerticalLine
- * A straight vertical line.
- */
- function VerticalLine(options) {
- LineBase.call(this);
- this.type = 'verticalLine';
- var opts = {
- x: null,
- ymin: null,
- ymax: null,
- yOffset: '6px', // number or string. Number interpreted as units, string as pixels.
- yminOffset: null,
- ymaxOffset: null
- };
- $.extend(true, this.options, opts, options);
-
- if (this.options.showTooltipPrecision < 0.01) {
- this.options.showTooltipPrecision = 0.01;
- }
- }
-
- VerticalLine.prototype = new LineBase();
- VerticalLine.prototype.constructor = VerticalLine;
-
-
- /**
- * Class: DashedVerticalLine
- * A straight dashed vertical line.
- */
- function DashedVerticalLine(options) {
- LineBase.call(this);
- this.type = 'dashedVerticalLine';
- this.start = null;
- this.stop = null;
- var opts = {
- x: null,
- ymin: null,
- ymax: null,
- yOffset: '6px', // number or string. Number interpreted as units, string as pixels.
- yminOffset: null,
- ymaxOffset: null,
- // prop: dashPattern
- // 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.
- dashPattern: [8,8]
- };
- $.extend(true, this.options, opts, options);
-
- if (this.options.showTooltipPrecision < 0.01) {
- this.options.showTooltipPrecision = 0.01;
- }
- }
-
- DashedVerticalLine.prototype = new LineBase();
- DashedVerticalLine.prototype.constructor = DashedVerticalLine;
-
- $.jqplot.CanvasOverlay.prototype.addLine = function(opts) {
- var line = new Line(opts);
- line.uid = objCounter++;
- this.objects.push(line);
- this.objectNames.push(line.options.name);
- };
-
- $.jqplot.CanvasOverlay.prototype.addHorizontalLine = function(opts) {
- var line = new HorizontalLine(opts);
- line.uid = objCounter++;
- this.objects.push(line);
- this.objectNames.push(line.options.name);
- };
-
- $.jqplot.CanvasOverlay.prototype.addDashedHorizontalLine = function(opts) {
- var line = new DashedHorizontalLine(opts);
- line.uid = objCounter++;
- this.objects.push(line);
- this.objectNames.push(line.options.name);
- };
-
- $.jqplot.CanvasOverlay.prototype.addVerticalLine = function(opts) {
- var line = new VerticalLine(opts);
- line.uid = objCounter++;
- this.objects.push(line);
- this.objectNames.push(line.options.name);
- };
-
- $.jqplot.CanvasOverlay.prototype.addDashedVerticalLine = function(opts) {
- var line = new DashedVerticalLine(opts);
- line.uid = objCounter++;
- this.objects.push(line);
- this.objectNames.push(line.options.name);
- };
-
- $.jqplot.CanvasOverlay.prototype.removeObject = function(idx) {
- // check if integer, remove by index
- if ($.type(idx) == 'number') {
- this.objects.splice(idx, 1);
- this.objectNames.splice(idx, 1);
- }
- // if string, remove by name
- else {
- var id = $.inArray(idx, this.objectNames);
- if (id != -1) {
- this.objects.splice(id, 1);
- this.objectNames.splice(id, 1);
- }
- }
- };
-
- $.jqplot.CanvasOverlay.prototype.getObject = function(idx) {
- // check if integer, remove by index
- if ($.type(idx) == 'number') {
- return this.objects[idx];
- }
- // if string, remove by name
- else {
- var id = $.inArray(idx, this.objectNames);
- if (id != -1) {
- return this.objects[id];
- }
- }
- };
-
- // Set get as alias for getObject.
- $.jqplot.CanvasOverlay.prototype.get = $.jqplot.CanvasOverlay.prototype.getObject;
-
- $.jqplot.CanvasOverlay.prototype.clear = function(plot) {
- this.canvas._ctx.clearRect(0,0,this.canvas.getWidth(), this.canvas.getHeight());
- };
-
- $.jqplot.CanvasOverlay.prototype.draw = function(plot) {
- var obj,
- objs = this.objects,
- mr = this.markerRenderer,
- start,
- stop;
- if (this.options.show) {
- this.canvas._ctx.clearRect(0,0,this.canvas.getWidth(), this.canvas.getHeight());
- for (var k=0; k<objs.length; k++) {
- obj = objs[k];
- var opts = $.extend(true, {}, obj.options);
- if (obj.options.show) {
- // style and shadow properties should be set before
- // every draw of marker renderer.
- mr.shadow = obj.options.shadow;
- obj.tooltipWidthFactor = obj.options.lineWidth / obj.options.showTooltipPrecision;
- switch (obj.type) {
- case 'line':
- // style and shadow properties should be set before
- // every draw of marker renderer.
- mr.style = 'line';
- opts.closePath = false;
- start = [plot.axes[obj.options.xaxis].series_u2p(obj.options.start[0]), plot.axes[obj.options.yaxis].series_u2p(obj.options.start[1])];
- stop = [plot.axes[obj.options.xaxis].series_u2p(obj.options.stop[0]), plot.axes[obj.options.yaxis].series_u2p(obj.options.stop[1])];
- obj.gridStart = start;
- obj.gridStop = stop;
- mr.draw(start, stop, this.canvas._ctx, opts);
- break;
- case 'horizontalLine':
-
- // style and shadow properties should be set before
- // every draw of marker renderer.
- if (obj.options.y != null) {
- mr.style = 'line';
- opts.closePath = false;
- var xaxis = plot.axes[obj.options.xaxis],
- xstart,
- xstop,
- y = plot.axes[obj.options.yaxis].series_u2p(obj.options.y),
- xminoff = obj.options.xminOffset || obj.options.xOffset,
- xmaxoff = obj.options.xmaxOffset || obj.options.xOffset;
- if (obj.options.xmin != null) {
- xstart = xaxis.series_u2p(obj.options.xmin);
- }
- else if (xminoff != null) {
- if ($.type(xminoff) == "number") {
- xstart = xaxis.series_u2p(xaxis.min + xminoff);
- }
- else if ($.type(xminoff) == "string") {
- xstart = xaxis.series_u2p(xaxis.min) + parseFloat(xminoff);
- }
- }
- if (obj.options.xmax != null) {
- xstop = xaxis.series_u2p(obj.options.xmax);
- }
- else if (xmaxoff != null) {
- if ($.type(xmaxoff) == "number") {
- xstop = xaxis.series_u2p(xaxis.max - xmaxoff);
- }
- else if ($.type(xmaxoff) == "string") {
- xstop = xaxis.series_u2p(xaxis.max) - parseFloat(xmaxoff);
- }
- }
- if (xstop != null && xstart != null) {
- obj.gridStart = [xstart, y];
- obj.gridStop = [xstop, y];
- mr.draw([xstart, y], [xstop, y], this.canvas._ctx, opts);
- }
- }
- break;
-
- case 'dashedHorizontalLine':
-
- var dashPat = obj.options.dashPattern;
- var dashPatLen = 0;
- for (var i=0; i<dashPat.length; i++) {
- dashPatLen += dashPat[i];
- }
-
- // style and shadow properties should be set before
- // every draw of marker renderer.
- if (obj.options.y != null) {
- mr.style = 'line';
- opts.closePath = false;
- var xaxis = plot.axes[obj.options.xaxis],
- xstart,
- xstop,
- y = plot.axes[obj.options.yaxis].series_u2p(obj.options.y),
- xminoff = obj.options.xminOffset || obj.options.xOffset,
- xmaxoff = obj.options.xmaxOffset || obj.options.xOffset;
- if (obj.options.xmin != null) {
- xstart = xaxis.series_u2p(obj.options.xmin);
- }
- else if (xminoff != null) {
- if ($.type(xminoff) == "number") {
- xstart = xaxis.series_u2p(xaxis.min + xminoff);
- }
- else if ($.type(xminoff) == "string") {
- xstart = xaxis.series_u2p(xaxis.min) + parseFloat(xminoff);
- }
- }
- if (obj.options.xmax != null) {
- xstop = xaxis.series_u2p(obj.options.xmax);
- }
- else if (xmaxoff != null) {
- if ($.type(xmaxoff) == "number") {
- xstop = xaxis.series_u2p(xaxis.max - xmaxoff);
- }
- else if ($.type(xmaxoff) == "string") {
- xstop = xaxis.series_u2p(xaxis.max) - parseFloat(xmaxoff);
- }
- }
- if (xstop != null && xstart != null) {
- obj.gridStart = [xstart, y];
- obj.gridStop = [xstop, y];
- var numDash = Math.ceil((xstop - xstart)/dashPatLen);
- var b=xstart, e;
- for (var i=0; i<numDash; i++) {
- for (var j=0; j<dashPat.length; j+=2) {
- e = b+dashPat[j];
- mr.draw([b, y], [e, y], this.canvas._ctx, opts);
- b += dashPat[j];
- if (j < dashPat.length-1) {
- b += dashPat[j+1];
- }
- }
- }
- }
- }
- break;
-
- case 'verticalLine':
-
- // style and shadow properties should be set before
- // every draw of marker renderer.
- if (obj.options.x != null) {
- mr.style = 'line';
- opts.closePath = false;
- var yaxis = plot.axes[obj.options.yaxis],
- ystart,
- ystop,
- x = plot.axes[obj.options.xaxis].series_u2p(obj.options.x),
- yminoff = obj.options.yminOffset || obj.options.yOffset,
- ymaxoff = obj.options.ymaxOffset || obj.options.yOffset;
- if (obj.options.ymin != null) {
- ystart = yaxis.series_u2p(obj.options.ymin);
- }
- else if (yminoff != null) {
- if ($.type(yminoff) == "number") {
- ystart = yaxis.series_u2p(yaxis.min - yminoff);
- }
- else if ($.type(yminoff) == "string") {
- ystart = yaxis.series_u2p(yaxis.min) - parseFloat(yminoff);
- }
- }
- if (obj.options.ymax != null) {
- ystop = yaxis.series_u2p(obj.options.ymax);
- }
- else if (ymaxoff != null) {
- if ($.type(ymaxoff) == "number") {
- ystop = yaxis.series_u2p(yaxis.max + ymaxoff);
- }
- else if ($.type(ymaxoff) == "string") {
- ystop = yaxis.series_u2p(yaxis.max) + parseFloat(ymaxoff);
- }
- }
- if (ystop != null && ystart != null) {
- obj.gridStart = [x, ystart];
- obj.gridStop = [x, ystop];
- mr.draw([x, ystart], [x, ystop], this.canvas._ctx, opts);
- }
- }
- break;
-
- case 'dashedVerticalLine':
-
- var dashPat = obj.options.dashPattern;
- var dashPatLen = 0;
- for (var i=0; i<dashPat.length; i++) {
- dashPatLen += dashPat[i];
- }
-
- // style and shadow properties should be set before
- // every draw of marker renderer.
- if (obj.options.x != null) {
- mr.style = 'line';
- opts.closePath = false;
- var yaxis = plot.axes[obj.options.yaxis],
- ystart,
- ystop,
- x = plot.axes[obj.options.xaxis].series_u2p(obj.options.x),
- yminoff = obj.options.yminOffset || obj.options.yOffset,
- ymaxoff = obj.options.ymaxOffset || obj.options.yOffset;
- if (obj.options.ymin != null) {
- ystart = yaxis.series_u2p(obj.options.ymin);
- }
- else if (yminoff != null) {
- if ($.type(yminoff) == "number") {
- ystart = yaxis.series_u2p(yaxis.min - yminoff);
- }
- else if ($.type(yminoff) == "string") {
- ystart = yaxis.series_u2p(yaxis.min) - parseFloat(yminoff);
- }
- }
- if (obj.options.ymax != null) {
- ystop = yaxis.series_u2p(obj.options.ymax);
- }
- else if (ymaxoff != null) {
- if ($.type(ymaxoff) == "number") {
- ystop = yaxis.series_u2p(yaxis.max + ymaxoff);
- }
- else if ($.type(ymaxoff) == "string") {
- ystop = yaxis.series_u2p(yaxis.max) + parseFloat(ymaxoff);
- }
- }
-
-
- if (ystop != null && ystart != null) {
- obj.gridStart = [x, ystart];
- obj.gridStop = [x, ystop];
- var numDash = Math.ceil((ystart - ystop)/dashPatLen);
- var firstDashAdjust = ((numDash * dashPatLen) - (ystart - ystop))/2.0;
- var b=ystart, e, bs, es;
- for (var i=0; i<numDash; i++) {
- for (var j=0; j<dashPat.length; j+=2) {
- e = b - dashPat[j];
- if (e < ystop) {
- e = ystop;
- }
- if (b < ystop) {
- b = ystop;
- }
- // es = e;
- // if (i == 0) {
- // es += firstDashAdjust;
- // }
- mr.draw([x, b], [x, e], this.canvas._ctx, opts);
- b -= dashPat[j];
- if (j < dashPat.length-1) {
- b -= dashPat[j+1];
- }
- }
- }
- }
- }
- break;
-
- default:
- break;
- }
- }
- }
- }
- };
-
- // called within context of plot
- // create a canvas which we can draw on.
- // insert it before the eventCanvas, so eventCanvas will still capture events.
- $.jqplot.CanvasOverlay.postPlotDraw = function() {
- var co = this.plugins.canvasOverlay;
- // Memory Leaks patch
- if (co && co.highlightCanvas) {
- co.highlightCanvas.resetCanvas();
- co.highlightCanvas = null;
- }
- co.canvas = new $.jqplot.GenericCanvas();
-
- this.eventCanvas._elem.before(co.canvas.createElement(this._gridPadding, 'jqplot-overlayCanvas-canvas', this._plotDimensions, this));
- co.canvas.setContext();
- if (!co.deferDraw) {
- co.draw(this);
- }
-
- var elem = document.createElement('div');
- co._tooltipElem = $(elem);
- elem = null;
- co._tooltipElem.addClass('jqplot-canvasOverlay-tooltip');
- co._tooltipElem.css({position:'absolute', display:'none'});
-
- this.eventCanvas._elem.before(co._tooltipElem);
- this.eventCanvas._elem.bind('mouseleave', { elem: co._tooltipElem }, function (ev) { ev.data.elem.hide(); });
-
- var co = null;
- };
-
-
- function showTooltip(plot, obj, gridpos, datapos) {
- var co = plot.plugins.canvasOverlay;
- var elem = co._tooltipElem;
-
- var opts = obj.options, x, y;
-
- elem.html($.jqplot.sprintf(opts.tooltipFormatString, datapos[0], datapos[1]));
-
- switch (opts.tooltipLocation) {
- case 'nw':
- x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset;
- y = gridpos[1] + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true);
- break;
- case 'n':
- x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true)/2;
- y = gridpos[1] + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true);
- break;
- case 'ne':
- x = gridpos[0] + plot._gridPadding.left + opts.tooltipOffset;
- y = gridpos[1] + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true);
- break;
- case 'e':
- x = gridpos[0] + plot._gridPadding.left + opts.tooltipOffset;
- y = gridpos[1] + plot._gridPadding.top - elem.outerHeight(true)/2;
- break;
- case 'se':
- x = gridpos[0] + plot._gridPadding.left + opts.tooltipOffset;
- y = gridpos[1] + plot._gridPadding.top + opts.tooltipOffset;
- break;
- case 's':
- x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true)/2;
- y = gridpos[1] + plot._gridPadding.top + opts.tooltipOffset;
- break;
- case 'sw':
- x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset;
- y = gridpos[1] + plot._gridPadding.top + opts.tooltipOffset;
- break;
- case 'w':
- x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset;
- y = gridpos[1] + plot._gridPadding.top - elem.outerHeight(true)/2;
- break;
- default: // same as 'nw'
- x = gridpos[0] + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset;
- y = gridpos[1] + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true);
- break;
- }
-
- elem.css('left', x);
- elem.css('top', y);
- if (opts.fadeTooltip) {
- // Fix for stacked up animations. Thnanks Trevor!
- elem.stop(true,true).fadeIn(opts.tooltipFadeSpeed);
- }
- else {
- elem.show();
- }
- elem = null;
- }
-
-
- function isNearLine(point, lstart, lstop, width) {
- // r is point to test, p and q are end points.
- var rx = point[0];
- var ry = point[1];
- var px = Math.round(lstop[0]);
- var py = Math.round(lstop[1]);
- var qx = Math.round(lstart[0]);
- var qy = Math.round(lstart[1]);
-
- var l = Math.sqrt(Math.pow(px-qx, 2) + Math.pow(py-qy, 2));
-
- // scale error term by length of line.
- var eps = width*l;
- var res = Math.abs((qx-px) * (ry-py) - (qy-py) * (rx-px));
- var ret = (res < eps) ? true : false;
- return ret;
- }
-
-
- function handleMove(ev, gridpos, datapos, neighbor, plot) {
- var co = plot.plugins.canvasOverlay;
- var objs = co.objects;
- var l = objs.length;
- var obj, haveHighlight=false;
- var elem;
- for (var i=0; i<l; i++) {
- obj = objs[i];
- if (obj.options.showTooltip) {
- var n = isNearLine([gridpos.x, gridpos.y], obj.gridStart, obj.gridStop, obj.tooltipWidthFactor);
- datapos = [plot.axes[obj.options.xaxis].series_p2u(gridpos.x), plot.axes[obj.options.yaxis].series_p2u(gridpos.y)];
-
- // cases:
- // near line, no highlighting
- // near line, highliting on this line
- // near line, highlighting another line
- // not near any line, highlighting
- // not near any line, no highlighting
-
- // near line, not currently highlighting
- if (n && co.highlightObjectIndex == null) {
- switch (obj.type) {
- case 'line':
- showTooltip(plot, obj, [gridpos.x, gridpos.y], datapos);
- break;
-
- case 'horizontalLine':
- case 'dashedHorizontalLine':
- showTooltip(plot, obj, [gridpos.x, obj.gridStart[1]], [datapos[0], obj.options.y]);
- break;
-
- case 'verticalLine':
- case 'dashedVerticalLine':
- showTooltip(plot, obj, [obj.gridStart[0], gridpos.y], [obj.options.x, datapos[1]]);
- break;
- default:
- break;
- }
- co.highlightObjectIndex = i;
- haveHighlight = true;
- break;
- }
-
- // near line, highlighting another line.
- else if (n && co.highlightObjectIndex !== i) {
- // turn off tooltip.
- elem = co._tooltipElem;
- if (obj.fadeTooltip) {
- elem.fadeOut(obj.tooltipFadeSpeed);
- }
- else {
- elem.hide();
- }
-
- // turn on right tooltip.
- switch (obj.type) {
- case 'line':
- showTooltip(plot, obj, [gridpos.x, gridpos.y], datapos);
- break;
-
- case 'horizontalLine':
- case 'dashedHorizontalLine':
- showTooltip(plot, obj, [gridpos.x, obj.gridStart[1]], [datapos[0], obj.options.y]);
- break;
-
- case 'verticalLine':
- case 'dashedVerticalLine':
- showTooltip(plot, obj, [obj.gridStart[0], gridpos.y], [obj.options.x, datapos[1]]);
- break;
- default:
- break;
- }
-
- co.highlightObjectIndex = i;
- haveHighlight = true;
- break;
- }
-
- // near line, already highlighting this line, update
- else if (n) {
- switch (obj.type) {
- case 'line':
- showTooltip(plot, obj, [gridpos.x, gridpos.y], datapos);
- break;
-
- case 'horizontalLine':
- case 'dashedHorizontalLine':
- showTooltip(plot, obj, [gridpos.x, obj.gridStart[1]], [datapos[0], obj.options.y]);
- break;
-
- case 'verticalLine':
- case 'dashedVerticalLine':
- showTooltip(plot, obj, [obj.gridStart[0], gridpos.y], [obj.options.x, datapos[1]]);
- break;
- default:
- break;
- }
-
- haveHighlight = true;
- break;
- }
- }
- }
-
- // check if we are highlighting and not near a line, turn it off.
- if (!haveHighlight && co.highlightObjectIndex !== null) {
- elem = co._tooltipElem;
- obj = co.getObject(co.highlightObjectIndex);
- if (obj.fadeTooltip) {
- elem.fadeOut(obj.tooltipFadeSpeed);
- }
- else {
- elem.hide();
- }
- co.highlightObjectIndex = null;
- }
- }
-
- $.jqplot.postInitHooks.push($.jqplot.CanvasOverlay.postPlotInit);
- $.jqplot.postDrawHooks.push($.jqplot.CanvasOverlay.postPlotDraw);
- $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMove]);
-
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.min.js
deleted file mode 100644
index 3d3c9fad..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasOverlay.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(d){var f=0;d.jqplot.CanvasOverlay=function(o){var l=o||{};this.options={show:d.jqplot.config.enablePlugins,deferDraw:false};this.objects=[];this.objectNames=[];this.canvas=null;this.markerRenderer=new d.jqplot.MarkerRenderer({style:"line"});this.markerRenderer.init();this.highlightObjectIndex=null;if(l.objects){var q=l.objects,p;for(var m=0;m<q.length;m++){p=q[m];for(var r in p){switch(r){case"line":this.addLine(p[r]);break;case"horizontalLine":this.addHorizontalLine(p[r]);break;case"dashedHorizontalLine":this.addDashedHorizontalLine(p[r]);break;case"verticalLine":this.addVerticalLine(p[r]);break;case"dashedVerticalLine":this.addDashedVerticalLine(p[r]);break;default:break}}}}d.extend(true,this.options,l)};d.jqplot.CanvasOverlay.postPlotInit=function(o,n,m){var l=m||{};this.plugins.canvasOverlay=new d.jqplot.CanvasOverlay(l.canvasOverlay)};function h(){this.uid=null;this.type=null;this.gridStart=null;this.gridStop=null;this.tooltipWidthFactor=0;this.options={name:null,show:true,lineWidth:2,lineCap:"round",color:"#666666",shadow:true,shadowAngle:45,shadowOffset:1,shadowDepth:3,shadowAlpha:"0.07",xaxis:"xaxis",yaxis:"yaxis",showTooltip:false,showTooltipPrecision:0.6,tooltipLocation:"nw",fadeTooltip:true,tooltipFadeSpeed:"fast",tooltipOffset:4,tooltipFormatString:"%d, %d"}}function b(l){h.call(this);this.type="line";var m={start:[],stop:[]};d.extend(true,this.options,m,l);if(this.options.showTooltipPrecision<0.01){this.options.showTooltipPrecision=0.01}}b.prototype=new h();b.prototype.constructor=b;function e(l){h.call(this);this.type="horizontalLine";var m={y:null,xmin:null,xmax:null,xOffset:"6px",xminOffset:null,xmaxOffset:null};d.extend(true,this.options,m,l);if(this.options.showTooltipPrecision<0.01){this.options.showTooltipPrecision=0.01}}e.prototype=new h();e.prototype.constructor=e;function i(l){h.call(this);this.type="dashedHorizontalLine";var m={y:null,xmin:null,xmax:null,xOffset:"6px",xminOffset:null,xmaxOffset:null,dashPattern:[8,8]};d.extend(true,this.options,m,l);if(this.options.showTooltipPrecision<0.01){this.options.showTooltipPrecision=0.01}}i.prototype=new h();i.prototype.constructor=i;function c(l){h.call(this);this.type="verticalLine";var m={x:null,ymin:null,ymax:null,yOffset:"6px",yminOffset:null,ymaxOffset:null};d.extend(true,this.options,m,l);if(this.options.showTooltipPrecision<0.01){this.options.showTooltipPrecision=0.01}}c.prototype=new h();c.prototype.constructor=c;function k(l){h.call(this);this.type="dashedVerticalLine";this.start=null;this.stop=null;var m={x:null,ymin:null,ymax:null,yOffset:"6px",yminOffset:null,ymaxOffset:null,dashPattern:[8,8]};d.extend(true,this.options,m,l);if(this.options.showTooltipPrecision<0.01){this.options.showTooltipPrecision=0.01}}k.prototype=new h();k.prototype.constructor=k;d.jqplot.CanvasOverlay.prototype.addLine=function(m){var l=new b(m);l.uid=f++;this.objects.push(l);this.objectNames.push(l.options.name)};d.jqplot.CanvasOverlay.prototype.addHorizontalLine=function(m){var l=new e(m);l.uid=f++;this.objects.push(l);this.objectNames.push(l.options.name)};d.jqplot.CanvasOverlay.prototype.addDashedHorizontalLine=function(m){var l=new i(m);l.uid=f++;this.objects.push(l);this.objectNames.push(l.options.name)};d.jqplot.CanvasOverlay.prototype.addVerticalLine=function(m){var l=new c(m);l.uid=f++;this.objects.push(l);this.objectNames.push(l.options.name)};d.jqplot.CanvasOverlay.prototype.addDashedVerticalLine=function(m){var l=new k(m);l.uid=f++;this.objects.push(l);this.objectNames.push(l.options.name)};d.jqplot.CanvasOverlay.prototype.removeObject=function(l){if(d.type(l)=="number"){this.objects.splice(l,1);this.objectNames.splice(l,1)}else{var m=d.inArray(l,this.objectNames);if(m!=-1){this.objects.splice(m,1);this.objectNames.splice(m,1)}}};d.jqplot.CanvasOverlay.prototype.getObject=function(l){if(d.type(l)=="number"){return this.objects[l]}else{var m=d.inArray(l,this.objectNames);if(m!=-1){return this.objects[m]}}};d.jqplot.CanvasOverlay.prototype.get=d.jqplot.CanvasOverlay.prototype.getObject;d.jqplot.CanvasOverlay.prototype.clear=function(l){this.canvas._ctx.clearRect(0,0,this.canvas.getWidth(),this.canvas.getHeight())};d.jqplot.CanvasOverlay.prototype.draw=function(I){var w,t=this.objects,D=this.markerRenderer,q,E;if(this.options.show){this.canvas._ctx.clearRect(0,0,this.canvas.getWidth(),this.canvas.getHeight());for(var F=0;F<t.length;F++){w=t[F];var z=d.extend(true,{},w.options);if(w.options.show){D.shadow=w.options.shadow;w.tooltipWidthFactor=w.options.lineWidth/w.options.showTooltipPrecision;switch(w.type){case"line":D.style="line";z.closePath=false;q=[I.axes[w.options.xaxis].series_u2p(w.options.start[0]),I.axes[w.options.yaxis].series_u2p(w.options.start[1])];E=[I.axes[w.options.xaxis].series_u2p(w.options.stop[0]),I.axes[w.options.yaxis].series_u2p(w.options.stop[1])];w.gridStart=q;w.gridStop=E;D.draw(q,E,this.canvas._ctx,z);break;case"horizontalLine":if(w.options.y!=null){D.style="line";z.closePath=false;var n=I.axes[w.options.xaxis],Q,J,u=I.axes[w.options.yaxis].series_u2p(w.options.y),G=w.options.xminOffset||w.options.xOffset,r=w.options.xmaxOffset||w.options.xOffset;if(w.options.xmin!=null){Q=n.series_u2p(w.options.xmin)}else{if(G!=null){if(d.type(G)=="number"){Q=n.series_u2p(n.min+G)}else{if(d.type(G)=="string"){Q=n.series_u2p(n.min)+parseFloat(G)}}}}if(w.options.xmax!=null){J=n.series_u2p(w.options.xmax)}else{if(r!=null){if(d.type(r)=="number"){J=n.series_u2p(n.max-r)}else{if(d.type(r)=="string"){J=n.series_u2p(n.max)-parseFloat(r)}}}}if(J!=null&&Q!=null){w.gridStart=[Q,u];w.gridStop=[J,u];D.draw([Q,u],[J,u],this.canvas._ctx,z)}}break;case"dashedHorizontalLine":var m=w.options.dashPattern;var C=0;for(var K=0;K<m.length;K++){C+=m[K]}if(w.options.y!=null){D.style="line";z.closePath=false;var n=I.axes[w.options.xaxis],Q,J,u=I.axes[w.options.yaxis].series_u2p(w.options.y),G=w.options.xminOffset||w.options.xOffset,r=w.options.xmaxOffset||w.options.xOffset;if(w.options.xmin!=null){Q=n.series_u2p(w.options.xmin)}else{if(G!=null){if(d.type(G)=="number"){Q=n.series_u2p(n.min+G)}else{if(d.type(G)=="string"){Q=n.series_u2p(n.min)+parseFloat(G)}}}}if(w.options.xmax!=null){J=n.series_u2p(w.options.xmax)}else{if(r!=null){if(d.type(r)=="number"){J=n.series_u2p(n.max-r)}else{if(d.type(r)=="string"){J=n.series_u2p(n.max)-parseFloat(r)}}}}if(J!=null&&Q!=null){w.gridStart=[Q,u];w.gridStop=[J,u];var p=Math.ceil((J-Q)/C);var O=Q,M;for(var K=0;K<p;K++){for(var H=0;H<m.length;H+=2){M=O+m[H];D.draw([O,u],[M,u],this.canvas._ctx,z);O+=m[H];if(H<m.length-1){O+=m[H+1]}}}}}break;case"verticalLine":if(w.options.x!=null){D.style="line";z.closePath=false;var L=I.axes[w.options.yaxis],l,s,v=I.axes[w.options.xaxis].series_u2p(w.options.x),B=w.options.yminOffset||w.options.yOffset,o=w.options.ymaxOffset||w.options.yOffset;if(w.options.ymin!=null){l=L.series_u2p(w.options.ymin)}else{if(B!=null){if(d.type(B)=="number"){l=L.series_u2p(L.min-B)}else{if(d.type(B)=="string"){l=L.series_u2p(L.min)-parseFloat(B)}}}}if(w.options.ymax!=null){s=L.series_u2p(w.options.ymax)}else{if(o!=null){if(d.type(o)=="number"){s=L.series_u2p(L.max+o)}else{if(d.type(o)=="string"){s=L.series_u2p(L.max)+parseFloat(o)}}}}if(s!=null&&l!=null){w.gridStart=[v,l];w.gridStop=[v,s];D.draw([v,l],[v,s],this.canvas._ctx,z)}}break;case"dashedVerticalLine":var m=w.options.dashPattern;var C=0;for(var K=0;K<m.length;K++){C+=m[K]}if(w.options.x!=null){D.style="line";z.closePath=false;var L=I.axes[w.options.yaxis],l,s,v=I.axes[w.options.xaxis].series_u2p(w.options.x),B=w.options.yminOffset||w.options.yOffset,o=w.options.ymaxOffset||w.options.yOffset;if(w.options.ymin!=null){l=L.series_u2p(w.options.ymin)}else{if(B!=null){if(d.type(B)=="number"){l=L.series_u2p(L.min-B)}else{if(d.type(B)=="string"){l=L.series_u2p(L.min)-parseFloat(B)}}}}if(w.options.ymax!=null){s=L.series_u2p(w.options.ymax)}else{if(o!=null){if(d.type(o)=="number"){s=L.series_u2p(L.max+o)}else{if(d.type(o)=="string"){s=L.series_u2p(L.max)+parseFloat(o)}}}}if(s!=null&&l!=null){w.gridStart=[v,l];w.gridStop=[v,s];var p=Math.ceil((l-s)/C);var A=((p*C)-(l-s))/2;var O=l,M,N,P;for(var K=0;K<p;K++){for(var H=0;H<m.length;H+=2){M=O-m[H];if(M<s){M=s}if(O<s){O=s}D.draw([v,O],[v,M],this.canvas._ctx,z);O-=m[H];if(H<m.length-1){O-=m[H+1]}}}}}break;default:break}}}}};d.jqplot.CanvasOverlay.postPlotDraw=function(){var m=this.plugins.canvasOverlay;if(m&&m.highlightCanvas){m.highlightCanvas.resetCanvas();m.highlightCanvas=null}m.canvas=new d.jqplot.GenericCanvas();this.eventCanvas._elem.before(m.canvas.createElement(this._gridPadding,"jqplot-overlayCanvas-canvas",this._plotDimensions,this));m.canvas.setContext();if(!m.deferDraw){m.draw(this)}var l=document.createElement("div");m._tooltipElem=d(l);l=null;m._tooltipElem.addClass("jqplot-canvasOverlay-tooltip");m._tooltipElem.css({position:"absolute",display:"none"});this.eventCanvas._elem.before(m._tooltipElem);this.eventCanvas._elem.bind("mouseleave",{elem:m._tooltipElem},function(n){n.data.elem.hide()});var m=null};function j(q,o,p,n){var s=q.plugins.canvasOverlay;var m=s._tooltipElem;var l=o.options,t,r;m.html(d.jqplot.sprintf(l.tooltipFormatString,n[0],n[1]));switch(l.tooltipLocation){case"nw":t=p[0]+q._gridPadding.left-m.outerWidth(true)-l.tooltipOffset;r=p[1]+q._gridPadding.top-l.tooltipOffset-m.outerHeight(true);break;case"n":t=p[0]+q._gridPadding.left-m.outerWidth(true)/2;r=p[1]+q._gridPadding.top-l.tooltipOffset-m.outerHeight(true);break;case"ne":t=p[0]+q._gridPadding.left+l.tooltipOffset;r=p[1]+q._gridPadding.top-l.tooltipOffset-m.outerHeight(true);break;case"e":t=p[0]+q._gridPadding.left+l.tooltipOffset;r=p[1]+q._gridPadding.top-m.outerHeight(true)/2;break;case"se":t=p[0]+q._gridPadding.left+l.tooltipOffset;r=p[1]+q._gridPadding.top+l.tooltipOffset;break;case"s":t=p[0]+q._gridPadding.left-m.outerWidth(true)/2;r=p[1]+q._gridPadding.top+l.tooltipOffset;break;case"sw":t=p[0]+q._gridPadding.left-m.outerWidth(true)-l.tooltipOffset;r=p[1]+q._gridPadding.top+l.tooltipOffset;break;case"w":t=p[0]+q._gridPadding.left-m.outerWidth(true)-l.tooltipOffset;r=p[1]+q._gridPadding.top-m.outerHeight(true)/2;break;default:t=p[0]+q._gridPadding.left-m.outerWidth(true)-l.tooltipOffset;r=p[1]+q._gridPadding.top-l.tooltipOffset-m.outerHeight(true);break}m.css("left",t);m.css("top",r);if(l.fadeTooltip){m.stop(true,true).fadeIn(l.tooltipFadeSpeed)}else{m.show()}m=null}function g(y,p,r,o){var n=y[0];var m=y[1];var x=Math.round(r[0]);var w=Math.round(r[1]);var t=Math.round(p[0]);var s=Math.round(p[1]);var q=Math.sqrt(Math.pow(x-t,2)+Math.pow(w-s,2));var z=o*q;var v=Math.abs((t-x)*(m-w)-(s-w)*(n-x));var u=(v<z)?true:false;return u}function a(y,v,q,z,w){var x=w.plugins.canvasOverlay;var u=x.objects;var r=u.length;var t,m=false;var p;for(var s=0;s<r;s++){t=u[s];if(t.options.showTooltip){var o=g([v.x,v.y],t.gridStart,t.gridStop,t.tooltipWidthFactor);q=[w.axes[t.options.xaxis].series_p2u(v.x),w.axes[t.options.yaxis].series_p2u(v.y)];if(o&&x.highlightObjectIndex==null){switch(t.type){case"line":j(w,t,[v.x,v.y],q);break;case"horizontalLine":case"dashedHorizontalLine":j(w,t,[v.x,t.gridStart[1]],[q[0],t.options.y]);break;case"verticalLine":case"dashedVerticalLine":j(w,t,[t.gridStart[0],v.y],[t.options.x,q[1]]);break;default:break}x.highlightObjectIndex=s;m=true;break}else{if(o&&x.highlightObjectIndex!==s){p=x._tooltipElem;if(t.fadeTooltip){p.fadeOut(t.tooltipFadeSpeed)}else{p.hide()}switch(t.type){case"line":j(w,t,[v.x,v.y],q);break;case"horizontalLine":case"dashedHorizontalLine":j(w,t,[v.x,t.gridStart[1]],[q[0],t.options.y]);break;case"verticalLine":case"dashedVerticalLine":j(w,t,[t.gridStart[0],v.y],[t.options.x,q[1]]);break;default:break}x.highlightObjectIndex=s;m=true;break}else{if(o){switch(t.type){case"line":j(w,t,[v.x,v.y],q);break;case"horizontalLine":case"dashedHorizontalLine":j(w,t,[v.x,t.gridStart[1]],[q[0],t.options.y]);break;case"verticalLine":case"dashedVerticalLine":j(w,t,[t.gridStart[0],v.y],[t.options.x,q[1]]);break;default:break}m=true;break}}}}}if(!m&&x.highlightObjectIndex!==null){p=x._tooltipElem;t=x.getObject(x.highlightObjectIndex);if(t.fadeTooltip){p.fadeOut(t.tooltipFadeSpeed)}else{p.hide()}x.highlightObjectIndex=null}}d.jqplot.postInitHooks.push(d.jqplot.CanvasOverlay.postPlotInit);d.jqplot.postDrawHooks.push(d.jqplot.CanvasOverlay.postPlotDraw);d.jqplot.eventListenerHooks.push(["jqplotMouseMove",a])})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.js
deleted file mode 100644
index 693d2ff9..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.js
+++ /dev/null
@@ -1,449 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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-2012 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
- *
- *
- */
-
-(function($) {
- // This code is a modified version of the canvastext.js code, copyright below:
- //
- // This code is released to the public domain by Jim Studt, 2007.
- // He may keep some sort of up to date copy at http://www.federated.com/~jim/canvastext/
- //
- $.jqplot.CanvasTextRenderer = function(options){
- this.fontStyle = 'normal'; // normal, italic, oblique [not implemented]
- this.fontVariant = 'normal'; // normal, small caps [not implemented]
- this.fontWeight = 'normal'; // normal, bold, bolder, lighter, 100 - 900
- this.fontSize = '10px';
- this.fontFamily = 'sans-serif';
- this.fontStretch = 1.0;
- this.fillStyle = '#666666';
- this.angle = 0;
- this.textAlign = 'start';
- this.textBaseline = 'alphabetic';
- this.text;
- this.width;
- this.height;
- this.pt2px = 1.28;
-
- $.extend(true, this, options);
- this.normalizedFontSize = this.normalizeFontSize(this.fontSize);
- this.setHeight();
- };
-
- $.jqplot.CanvasTextRenderer.prototype.init = function(options) {
- $.extend(true, this, options);
- this.normalizedFontSize = this.normalizeFontSize(this.fontSize);
- this.setHeight();
- };
-
- // convert css spec into point size
- // returns float
- $.jqplot.CanvasTextRenderer.prototype.normalizeFontSize = function(sz) {
- sz = String(sz);
- var n = parseFloat(sz);
- if (sz.indexOf('px') > -1) {
- return n/this.pt2px;
- }
- else if (sz.indexOf('pt') > -1) {
- return n;
- }
- else if (sz.indexOf('em') > -1) {
- return n*12;
- }
- else if (sz.indexOf('%') > -1) {
- return n*12/100;
- }
- // default to pixels;
- else {
- return n/this.pt2px;
- }
- };
-
-
- $.jqplot.CanvasTextRenderer.prototype.fontWeight2Float = function(w) {
- // w = normal | bold | bolder | lighter | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900
- // return values adjusted for Hershey font.
- if (Number(w)) {
- return w/400;
- }
- else {
- switch (w) {
- case 'normal':
- return 1;
- break;
- case 'bold':
- return 1.75;
- break;
- case 'bolder':
- return 2.25;
- break;
- case 'lighter':
- return 0.75;
- break;
- default:
- return 1;
- break;
- }
- }
- };
-
- $.jqplot.CanvasTextRenderer.prototype.getText = function() {
- return this.text;
- };
-
- $.jqplot.CanvasTextRenderer.prototype.setText = function(t, ctx) {
- this.text = t;
- this.setWidth(ctx);
- return this;
- };
-
- $.jqplot.CanvasTextRenderer.prototype.getWidth = function(ctx) {
- return this.width;
- };
-
- $.jqplot.CanvasTextRenderer.prototype.setWidth = function(ctx, w) {
- if (!w) {
- this.width = this.measure(ctx, this.text);
- }
- else {
- this.width = w;
- }
- return this;
- };
-
- // return height in pixels.
- $.jqplot.CanvasTextRenderer.prototype.getHeight = function(ctx) {
- return this.height;
- };
-
- // w - height in pt
- // set heigh in px
- $.jqplot.CanvasTextRenderer.prototype.setHeight = function(w) {
- if (!w) {
- //height = this.fontSize /0.75;
- this.height = this.normalizedFontSize * this.pt2px;
- }
- else {
- this.height = w;
- }
- return this;
- };
-
- $.jqplot.CanvasTextRenderer.prototype.letter = function (ch)
- {
- return this.letters[ch];
- };
-
- $.jqplot.CanvasTextRenderer.prototype.ascent = function()
- {
- return this.normalizedFontSize;
- };
-
- $.jqplot.CanvasTextRenderer.prototype.descent = function()
- {
- return 7.0*this.normalizedFontSize/25.0;
- };
-
- $.jqplot.CanvasTextRenderer.prototype.measure = function(ctx, str)
- {
- var total = 0;
- var len = str.length;
-
- for (var i = 0; i < len; i++) {
- var c = this.letter(str.charAt(i));
- if (c) {
- total += c.width * this.normalizedFontSize / 25.0 * this.fontStretch;
- }
- }
- return total;
- };
-
- $.jqplot.CanvasTextRenderer.prototype.draw = function(ctx,str)
- {
- var x = 0;
- // leave room at bottom for descenders.
- var y = this.height*0.72;
- var total = 0;
- var len = str.length;
- var mag = this.normalizedFontSize / 25.0;
-
- ctx.save();
- var tx, ty;
-
- // 1st quadrant
- if ((-Math.PI/2 <= this.angle && this.angle <= 0) || (Math.PI*3/2 <= this.angle && this.angle <= Math.PI*2)) {
- tx = 0;
- ty = -Math.sin(this.angle) * this.width;
- }
- // 4th quadrant
- else if ((0 < this.angle && this.angle <= Math.PI/2) || (-Math.PI*2 <= this.angle && this.angle <= -Math.PI*3/2)) {
- tx = Math.sin(this.angle) * this.height;
- ty = 0;
- }
- // 2nd quadrant
- else if ((-Math.PI < this.angle && this.angle < -Math.PI/2) || (Math.PI <= this.angle && this.angle <= Math.PI*3/2)) {
- tx = -Math.cos(this.angle) * this.width;
- ty = -Math.sin(this.angle) * this.width - Math.cos(this.angle) * this.height;
- }
- // 3rd quadrant
- else if ((-Math.PI*3/2 < this.angle && this.angle < Math.PI) || (Math.PI/2 < this.angle && this.angle < Math.PI)) {
- tx = Math.sin(this.angle) * this.height - Math.cos(this.angle)*this.width;
- ty = -Math.cos(this.angle) * this.height;
- }
-
- ctx.strokeStyle = this.fillStyle;
- ctx.fillStyle = this.fillStyle;
- ctx.translate(tx, ty);
- ctx.rotate(this.angle);
- ctx.lineCap = "round";
- // multiplier was 2.0
- var fact = (this.normalizedFontSize > 30) ? 2.0 : 2 + (30 - this.normalizedFontSize)/20;
- ctx.lineWidth = fact * mag * this.fontWeight2Float(this.fontWeight);
-
- for ( var i = 0; i < len; i++) {
- var c = this.letter( str.charAt(i));
- if ( !c) {
- continue;
- }
-
- ctx.beginPath();
-
- var penUp = 1;
- var needStroke = 0;
- for ( var j = 0; j < c.points.length; j++) {
- var a = c.points[j];
- if ( a[0] == -1 && a[1] == -1) {
- penUp = 1;
- continue;
- }
- if ( penUp) {
- ctx.moveTo( x + a[0]*mag*this.fontStretch, y - a[1]*mag);
- penUp = false;
- } else {
- ctx.lineTo( x + a[0]*mag*this.fontStretch, y - a[1]*mag);
- }
- }
- ctx.stroke();
- x += c.width*mag*this.fontStretch;
- }
- ctx.restore();
- return total;
- };
-
- $.jqplot.CanvasTextRenderer.prototype.letters = {
- ' ': { width: 16, points: [] },
- '!': { width: 10, points: [[5,21],[5,7],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] },
- '"': { width: 16, points: [[4,21],[4,14],[-1,-1],[12,21],[12,14]] },
- '#': { width: 21, points: [[11,25],[4,-7],[-1,-1],[17,25],[10,-7],[-1,-1],[4,12],[18,12],[-1,-1],[3,6],[17,6]] },
- '$': { width: 20, points: [[8,25],[8,-4],[-1,-1],[12,25],[12,-4],[-1,-1],[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]] },
- '%': { width: 24, points: [[21,21],[3,0],[-1,-1],[8,21],[10,19],[10,17],[9,15],[7,14],[5,14],[3,16],[3,18],[4,20],[6,21],[8,21],[10,20],[13,19],[16,19],[19,20],[21,21],[-1,-1],[17,7],[15,6],[14,4],[14,2],[16,0],[18,0],[20,1],[21,3],[21,5],[19,7],[17,7]] },
- '&': { width: 26, points: [[23,12],[23,13],[22,14],[21,14],[20,13],[19,11],[17,6],[15,3],[13,1],[11,0],[7,0],[5,1],[4,2],[3,4],[3,6],[4,8],[5,9],[12,13],[13,14],[14,16],[14,18],[13,20],[11,21],[9,20],[8,18],[8,16],[9,13],[11,10],[16,3],[18,1],[20,0],[22,0],[23,1],[23,2]] },
- '\'': { width: 10, points: [[5,19],[4,20],[5,21],[6,20],[6,18],[5,16],[4,15]] },
- '(': { width: 14, points: [[11,25],[9,23],[7,20],[5,16],[4,11],[4,7],[5,2],[7,-2],[9,-5],[11,-7]] },
- ')': { width: 14, points: [[3,25],[5,23],[7,20],[9,16],[10,11],[10,7],[9,2],[7,-2],[5,-5],[3,-7]] },
- '*': { width: 16, points: [[8,21],[8,9],[-1,-1],[3,18],[13,12],[-1,-1],[13,18],[3,12]] },
- '+': { width: 26, points: [[13,18],[13,0],[-1,-1],[4,9],[22,9]] },
- ',': { width: 10, points: [[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] },
- '-': { width: 18, points: [[6,9],[12,9]] },
- '.': { width: 10, points: [[5,2],[4,1],[5,0],[6,1],[5,2]] },
- '/': { width: 22, points: [[20,25],[2,-7]] },
- '0': { width: 20, points: [[9,21],[6,20],[4,17],[3,12],[3,9],[4,4],[6,1],[9,0],[11,0],[14,1],[16,4],[17,9],[17,12],[16,17],[14,20],[11,21],[9,21]] },
- '1': { width: 20, points: [[6,17],[8,18],[11,21],[11,0]] },
- '2': { width: 20, points: [[4,16],[4,17],[5,19],[6,20],[8,21],[12,21],[14,20],[15,19],[16,17],[16,15],[15,13],[13,10],[3,0],[17,0]] },
- '3': { width: 20, points: [[5,21],[16,21],[10,13],[13,13],[15,12],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] },
- '4': { width: 20, points: [[13,21],[3,7],[18,7],[-1,-1],[13,21],[13,0]] },
- '5': { width: 20, points: [[15,21],[5,21],[4,12],[5,13],[8,14],[11,14],[14,13],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]] },
- '6': { width: 20, points: [[16,18],[15,20],[12,21],[10,21],[7,20],[5,17],[4,12],[4,7],[5,3],[7,1],[10,0],[11,0],[14,1],[16,3],[17,6],[17,7],[16,10],[14,12],[11,13],[10,13],[7,12],[5,10],[4,7]] },
- '7': { width: 20, points: [[17,21],[7,0],[-1,-1],[3,21],[17,21]] },
- '8': { width: 20, points: [[8,21],[5,20],[4,18],[4,16],[5,14],[7,13],[11,12],[14,11],[16,9],[17,7],[17,4],[16,2],[15,1],[12,0],[8,0],[5,1],[4,2],[3,4],[3,7],[4,9],[6,11],[9,12],[13,13],[15,14],[16,16],[16,18],[15,20],[12,21],[8,21]] },
- '9': { width: 20, points: [[16,14],[15,11],[13,9],[10,8],[9,8],[6,9],[4,11],[3,14],[3,15],[4,18],[6,20],[9,21],[10,21],[13,20],[15,18],[16,14],[16,9],[15,4],[13,1],[10,0],[8,0],[5,1],[4,3]] },
- ':': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]] },
- ';': { width: 10, points: [[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]] },
- '<': { width: 24, points: [[20,18],[4,9],[20,0]] },
- '=': { width: 26, points: [[4,12],[22,12],[-1,-1],[4,6],[22,6]] },
- '>': { width: 24, points: [[4,18],[20,9],[4,0]] },
- '?': { width: 18, points: [[3,16],[3,17],[4,19],[5,20],[7,21],[11,21],[13,20],[14,19],[15,17],[15,15],[14,13],[13,12],[9,10],[9,7],[-1,-1],[9,2],[8,1],[9,0],[10,1],[9,2]] },
- '@': { width: 27, points: [[18,13],[17,15],[15,16],[12,16],[10,15],[9,14],[8,11],[8,8],[9,6],[11,5],[14,5],[16,6],[17,8],[-1,-1],[12,16],[10,14],[9,11],[9,8],[10,6],[11,5],[-1,-1],[18,16],[17,8],[17,6],[19,5],[21,5],[23,7],[24,10],[24,12],[23,15],[22,17],[20,19],[18,20],[15,21],[12,21],[9,20],[7,19],[5,17],[4,15],[3,12],[3,9],[4,6],[5,4],[7,2],[9,1],[12,0],[15,0],[18,1],[20,2],[21,3],[-1,-1],[19,16],[18,8],[18,6],[19,5]] },
- 'A': { width: 18, points: [[9,21],[1,0],[-1,-1],[9,21],[17,0],[-1,-1],[4,7],[14,7]] },
- 'B': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[-1,-1],[4,11],[13,11],[16,10],[17,9],[18,7],[18,4],[17,2],[16,1],[13,0],[4,0]] },
- 'C': { width: 21, points: [[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5]] },
- 'D': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[11,21],[14,20],[16,18],[17,16],[18,13],[18,8],[17,5],[16,3],[14,1],[11,0],[4,0]] },
- 'E': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11],[-1,-1],[4,0],[17,0]] },
- 'F': { width: 18, points: [[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11]] },
- 'G': { width: 21, points: [[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[18,8],[-1,-1],[13,8],[18,8]] },
- 'H': { width: 22, points: [[4,21],[4,0],[-1,-1],[18,21],[18,0],[-1,-1],[4,11],[18,11]] },
- 'I': { width: 8, points: [[4,21],[4,0]] },
- 'J': { width: 16, points: [[12,21],[12,5],[11,2],[10,1],[8,0],[6,0],[4,1],[3,2],[2,5],[2,7]] },
- 'K': { width: 21, points: [[4,21],[4,0],[-1,-1],[18,21],[4,7],[-1,-1],[9,12],[18,0]] },
- 'L': { width: 17, points: [[4,21],[4,0],[-1,-1],[4,0],[16,0]] },
- 'M': { width: 24, points: [[4,21],[4,0],[-1,-1],[4,21],[12,0],[-1,-1],[20,21],[12,0],[-1,-1],[20,21],[20,0]] },
- 'N': { width: 22, points: [[4,21],[4,0],[-1,-1],[4,21],[18,0],[-1,-1],[18,21],[18,0]] },
- 'O': { width: 22, points: [[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21]] },
- 'P': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,14],[17,12],[16,11],[13,10],[4,10]] },
- 'Q': { width: 22, points: [[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21],[-1,-1],[12,4],[18,-2]] },
- 'R': { width: 21, points: [[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[4,11],[-1,-1],[11,11],[18,0]] },
- 'S': { width: 20, points: [[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]] },
- 'T': { width: 16, points: [[8,21],[8,0],[-1,-1],[1,21],[15,21]] },
- 'U': { width: 22, points: [[4,21],[4,6],[5,3],[7,1],[10,0],[12,0],[15,1],[17,3],[18,6],[18,21]] },
- 'V': { width: 18, points: [[1,21],[9,0],[-1,-1],[17,21],[9,0]] },
- 'W': { width: 24, points: [[2,21],[7,0],[-1,-1],[12,21],[7,0],[-1,-1],[12,21],[17,0],[-1,-1],[22,21],[17,0]] },
- 'X': { width: 20, points: [[3,21],[17,0],[-1,-1],[17,21],[3,0]] },
- 'Y': { width: 18, points: [[1,21],[9,11],[9,0],[-1,-1],[17,21],[9,11]] },
- 'Z': { width: 20, points: [[17,21],[3,0],[-1,-1],[3,21],[17,21],[-1,-1],[3,0],[17,0]] },
- '[': { width: 14, points: [[4,25],[4,-7],[-1,-1],[5,25],[5,-7],[-1,-1],[4,25],[11,25],[-1,-1],[4,-7],[11,-7]] },
- '\\': { width: 14, points: [[0,21],[14,-3]] },
- ']': { width: 14, points: [[9,25],[9,-7],[-1,-1],[10,25],[10,-7],[-1,-1],[3,25],[10,25],[-1,-1],[3,-7],[10,-7]] },
- '^': { width: 16, points: [[6,15],[8,18],[10,15],[-1,-1],[3,12],[8,17],[13,12],[-1,-1],[8,17],[8,0]] },
- '_': { width: 16, points: [[0,-2],[16,-2]] },
- '`': { width: 10, points: [[6,21],[5,20],[4,18],[4,16],[5,15],[6,16],[5,17]] },
- 'a': { width: 19, points: [[15,14],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
- 'b': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]] },
- 'c': { width: 18, points: [[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
- 'd': { width: 19, points: [[15,21],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
- 'e': { width: 18, points: [[3,8],[15,8],[15,10],[14,12],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
- 'f': { width: 12, points: [[10,21],[8,21],[6,20],[5,17],[5,0],[-1,-1],[2,14],[9,14]] },
- 'g': { width: 19, points: [[15,14],[15,-2],[14,-5],[13,-6],[11,-7],[8,-7],[6,-6],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
- 'h': { width: 19, points: [[4,21],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]] },
- 'i': { width: 8, points: [[3,21],[4,20],[5,21],[4,22],[3,21],[-1,-1],[4,14],[4,0]] },
- 'j': { width: 10, points: [[5,21],[6,20],[7,21],[6,22],[5,21],[-1,-1],[6,14],[6,-3],[5,-6],[3,-7],[1,-7]] },
- 'k': { width: 17, points: [[4,21],[4,0],[-1,-1],[14,14],[4,4],[-1,-1],[8,8],[15,0]] },
- 'l': { width: 8, points: [[4,21],[4,0]] },
- 'm': { width: 30, points: [[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0],[-1,-1],[15,10],[18,13],[20,14],[23,14],[25,13],[26,10],[26,0]] },
- 'n': { width: 19, points: [[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]] },
- 'o': { width: 19, points: [[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3],[16,6],[16,8],[15,11],[13,13],[11,14],[8,14]] },
- 'p': { width: 19, points: [[4,14],[4,-7],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]] },
- 'q': { width: 19, points: [[15,14],[15,-7],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]] },
- 'r': { width: 13, points: [[4,14],[4,0],[-1,-1],[4,8],[5,11],[7,13],[9,14],[12,14]] },
- 's': { width: 17, points: [[14,11],[13,13],[10,14],[7,14],[4,13],[3,11],[4,9],[6,8],[11,7],[13,6],[14,4],[14,3],[13,1],[10,0],[7,0],[4,1],[3,3]] },
- 't': { width: 12, points: [[5,21],[5,4],[6,1],[8,0],[10,0],[-1,-1],[2,14],[9,14]] },
- 'u': { width: 19, points: [[4,14],[4,4],[5,1],[7,0],[10,0],[12,1],[15,4],[-1,-1],[15,14],[15,0]] },
- 'v': { width: 16, points: [[2,14],[8,0],[-1,-1],[14,14],[8,0]] },
- 'w': { width: 22, points: [[3,14],[7,0],[-1,-1],[11,14],[7,0],[-1,-1],[11,14],[15,0],[-1,-1],[19,14],[15,0]] },
- 'x': { width: 17, points: [[3,14],[14,0],[-1,-1],[14,14],[3,0]] },
- 'y': { width: 16, points: [[2,14],[8,0],[-1,-1],[14,14],[8,0],[6,-4],[4,-6],[2,-7],[1,-7]] },
- 'z': { width: 17, points: [[14,14],[3,0],[-1,-1],[3,14],[14,14],[-1,-1],[3,0],[14,0]] },
- '{': { width: 14, points: [[9,25],[7,24],[6,23],[5,21],[5,19],[6,17],[7,16],[8,14],[8,12],[6,10],[-1,-1],[7,24],[6,22],[6,20],[7,18],[8,17],[9,15],[9,13],[8,11],[4,9],[8,7],[9,5],[9,3],[8,1],[7,0],[6,-2],[6,-4],[7,-6],[-1,-1],[6,8],[8,6],[8,4],[7,2],[6,1],[5,-1],[5,-3],[6,-5],[7,-6],[9,-7]] },
- '|': { width: 8, points: [[4,25],[4,-7]] },
- '}': { width: 14, points: [[5,25],[7,24],[8,23],[9,21],[9,19],[8,17],[7,16],[6,14],[6,12],[8,10],[-1,-1],[7,24],[8,22],[8,20],[7,18],[6,17],[5,15],[5,13],[6,11],[10,9],[6,7],[5,5],[5,3],[6,1],[7,0],[8,-2],[8,-4],[7,-6],[-1,-1],[8,8],[6,6],[6,4],[7,2],[8,1],[9,-1],[9,-3],[8,-5],[7,-6],[5,-7]] },
- '~': { width: 24, points: [[3,6],[3,8],[4,11],[6,12],[8,12],[10,11],[14,8],[16,7],[18,7],[20,8],[21,10],[-1,-1],[3,8],[4,10],[6,11],[8,11],[10,10],[14,7],[16,6],[18,6],[20,7],[21,10],[21,12]] }
- };
-
- $.jqplot.CanvasFontRenderer = function(options) {
- options = options || {};
- if (!options.pt2px) {
- options.pt2px = 1.5;
- }
- $.jqplot.CanvasTextRenderer.call(this, options);
- };
-
- $.jqplot.CanvasFontRenderer.prototype = new $.jqplot.CanvasTextRenderer({});
- $.jqplot.CanvasFontRenderer.prototype.constructor = $.jqplot.CanvasFontRenderer;
-
- $.jqplot.CanvasFontRenderer.prototype.measure = function(ctx, str)
- {
- // var fstyle = this.fontStyle+' '+this.fontVariant+' '+this.fontWeight+' '+this.fontSize+' '+this.fontFamily;
- var fstyle = this.fontSize+' '+this.fontFamily;
- ctx.save();
- ctx.font = fstyle;
- var w = ctx.measureText(str).width;
- ctx.restore();
- return w;
- };
-
- $.jqplot.CanvasFontRenderer.prototype.draw = function(ctx, str)
- {
- var x = 0;
- // leave room at bottom for descenders.
- var y = this.height*0.72;
- //var y = 12;
-
- ctx.save();
- var tx, ty;
-
- // 1st quadrant
- if ((-Math.PI/2 <= this.angle && this.angle <= 0) || (Math.PI*3/2 <= this.angle && this.angle <= Math.PI*2)) {
- tx = 0;
- ty = -Math.sin(this.angle) * this.width;
- }
- // 4th quadrant
- else if ((0 < this.angle && this.angle <= Math.PI/2) || (-Math.PI*2 <= this.angle && this.angle <= -Math.PI*3/2)) {
- tx = Math.sin(this.angle) * this.height;
- ty = 0;
- }
- // 2nd quadrant
- else if ((-Math.PI < this.angle && this.angle < -Math.PI/2) || (Math.PI <= this.angle && this.angle <= Math.PI*3/2)) {
- tx = -Math.cos(this.angle) * this.width;
- ty = -Math.sin(this.angle) * this.width - Math.cos(this.angle) * this.height;
- }
- // 3rd quadrant
- else if ((-Math.PI*3/2 < this.angle && this.angle < Math.PI) || (Math.PI/2 < this.angle && this.angle < Math.PI)) {
- tx = Math.sin(this.angle) * this.height - Math.cos(this.angle)*this.width;
- ty = -Math.cos(this.angle) * this.height;
- }
- ctx.strokeStyle = this.fillStyle;
- ctx.fillStyle = this.fillStyle;
- // var fstyle = this.fontStyle+' '+this.fontVariant+' '+this.fontWeight+' '+this.fontSize+' '+this.fontFamily;
- var fstyle = this.fontSize+' '+this.fontFamily;
- ctx.font = fstyle;
- ctx.translate(tx, ty);
- ctx.rotate(this.angle);
- ctx.fillText(str, x, y);
- // ctx.strokeText(str, x, y);
-
- ctx.restore();
- };
-
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.min.js
deleted file mode 100644
index 4a3fb652..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.canvasTextRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(a){a.jqplot.CanvasTextRenderer=function(b){this.fontStyle="normal";this.fontVariant="normal";this.fontWeight="normal";this.fontSize="10px";this.fontFamily="sans-serif";this.fontStretch=1;this.fillStyle="#666666";this.angle=0;this.textAlign="start";this.textBaseline="alphabetic";this.text;this.width;this.height;this.pt2px=1.28;a.extend(true,this,b);this.normalizedFontSize=this.normalizeFontSize(this.fontSize);this.setHeight()};a.jqplot.CanvasTextRenderer.prototype.init=function(b){a.extend(true,this,b);this.normalizedFontSize=this.normalizeFontSize(this.fontSize);this.setHeight()};a.jqplot.CanvasTextRenderer.prototype.normalizeFontSize=function(b){b=String(b);var c=parseFloat(b);if(b.indexOf("px")>-1){return c/this.pt2px}else{if(b.indexOf("pt")>-1){return c}else{if(b.indexOf("em")>-1){return c*12}else{if(b.indexOf("%")>-1){return c*12/100}else{return c/this.pt2px}}}}};a.jqplot.CanvasTextRenderer.prototype.fontWeight2Float=function(b){if(Number(b)){return b/400}else{switch(b){case"normal":return 1;break;case"bold":return 1.75;break;case"bolder":return 2.25;break;case"lighter":return 0.75;break;default:return 1;break}}};a.jqplot.CanvasTextRenderer.prototype.getText=function(){return this.text};a.jqplot.CanvasTextRenderer.prototype.setText=function(c,b){this.text=c;this.setWidth(b);return this};a.jqplot.CanvasTextRenderer.prototype.getWidth=function(b){return this.width};a.jqplot.CanvasTextRenderer.prototype.setWidth=function(c,b){if(!b){this.width=this.measure(c,this.text)}else{this.width=b}return this};a.jqplot.CanvasTextRenderer.prototype.getHeight=function(b){return this.height};a.jqplot.CanvasTextRenderer.prototype.setHeight=function(b){if(!b){this.height=this.normalizedFontSize*this.pt2px}else{this.height=b}return this};a.jqplot.CanvasTextRenderer.prototype.letter=function(b){return this.letters[b]};a.jqplot.CanvasTextRenderer.prototype.ascent=function(){return this.normalizedFontSize};a.jqplot.CanvasTextRenderer.prototype.descent=function(){return 7*this.normalizedFontSize/25};a.jqplot.CanvasTextRenderer.prototype.measure=function(d,g){var f=0;var b=g.length;for(var e=0;e<b;e++){var h=this.letter(g.charAt(e));if(h){f+=h.width*this.normalizedFontSize/25*this.fontStretch}}return f};a.jqplot.CanvasTextRenderer.prototype.draw=function(s,n){var r=0;var o=this.height*0.72;var p=0;var l=n.length;var k=this.normalizedFontSize/25;s.save();var h,f;if((-Math.PI/2<=this.angle&&this.angle<=0)||(Math.PI*3/2<=this.angle&&this.angle<=Math.PI*2)){h=0;f=-Math.sin(this.angle)*this.width}else{if((0<this.angle&&this.angle<=Math.PI/2)||(-Math.PI*2<=this.angle&&this.angle<=-Math.PI*3/2)){h=Math.sin(this.angle)*this.height;f=0}else{if((-Math.PI<this.angle&&this.angle<-Math.PI/2)||(Math.PI<=this.angle&&this.angle<=Math.PI*3/2)){h=-Math.cos(this.angle)*this.width;f=-Math.sin(this.angle)*this.width-Math.cos(this.angle)*this.height}else{if((-Math.PI*3/2<this.angle&&this.angle<Math.PI)||(Math.PI/2<this.angle&&this.angle<Math.PI)){h=Math.sin(this.angle)*this.height-Math.cos(this.angle)*this.width;f=-Math.cos(this.angle)*this.height}}}}s.strokeStyle=this.fillStyle;s.fillStyle=this.fillStyle;s.translate(h,f);s.rotate(this.angle);s.lineCap="round";var t=(this.normalizedFontSize>30)?2:2+(30-this.normalizedFontSize)/20;s.lineWidth=t*k*this.fontWeight2Float(this.fontWeight);for(var g=0;g<l;g++){var m=this.letter(n.charAt(g));if(!m){continue}s.beginPath();var e=1;var b=0;for(var d=0;d<m.points.length;d++){var q=m.points[d];if(q[0]==-1&&q[1]==-1){e=1;continue}if(e){s.moveTo(r+q[0]*k*this.fontStretch,o-q[1]*k);e=false}else{s.lineTo(r+q[0]*k*this.fontStretch,o-q[1]*k)}}s.stroke();r+=m.width*k*this.fontStretch}s.restore();return p};a.jqplot.CanvasTextRenderer.prototype.letters={" ":{width:16,points:[]},"!":{width:10,points:[[5,21],[5,7],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]]},'"':{width:16,points:[[4,21],[4,14],[-1,-1],[12,21],[12,14]]},"#":{width:21,points:[[11,25],[4,-7],[-1,-1],[17,25],[10,-7],[-1,-1],[4,12],[18,12],[-1,-1],[3,6],[17,6]]},"$":{width:20,points:[[8,25],[8,-4],[-1,-1],[12,25],[12,-4],[-1,-1],[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]]},"%":{width:24,points:[[21,21],[3,0],[-1,-1],[8,21],[10,19],[10,17],[9,15],[7,14],[5,14],[3,16],[3,18],[4,20],[6,21],[8,21],[10,20],[13,19],[16,19],[19,20],[21,21],[-1,-1],[17,7],[15,6],[14,4],[14,2],[16,0],[18,0],[20,1],[21,3],[21,5],[19,7],[17,7]]},"&":{width:26,points:[[23,12],[23,13],[22,14],[21,14],[20,13],[19,11],[17,6],[15,3],[13,1],[11,0],[7,0],[5,1],[4,2],[3,4],[3,6],[4,8],[5,9],[12,13],[13,14],[14,16],[14,18],[13,20],[11,21],[9,20],[8,18],[8,16],[9,13],[11,10],[16,3],[18,1],[20,0],[22,0],[23,1],[23,2]]},"'":{width:10,points:[[5,19],[4,20],[5,21],[6,20],[6,18],[5,16],[4,15]]},"(":{width:14,points:[[11,25],[9,23],[7,20],[5,16],[4,11],[4,7],[5,2],[7,-2],[9,-5],[11,-7]]},")":{width:14,points:[[3,25],[5,23],[7,20],[9,16],[10,11],[10,7],[9,2],[7,-2],[5,-5],[3,-7]]},"*":{width:16,points:[[8,21],[8,9],[-1,-1],[3,18],[13,12],[-1,-1],[13,18],[3,12]]},"+":{width:26,points:[[13,18],[13,0],[-1,-1],[4,9],[22,9]]},",":{width:10,points:[[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]]},"-":{width:18,points:[[6,9],[12,9]]},".":{width:10,points:[[5,2],[4,1],[5,0],[6,1],[5,2]]},"/":{width:22,points:[[20,25],[2,-7]]},"0":{width:20,points:[[9,21],[6,20],[4,17],[3,12],[3,9],[4,4],[6,1],[9,0],[11,0],[14,1],[16,4],[17,9],[17,12],[16,17],[14,20],[11,21],[9,21]]},"1":{width:20,points:[[6,17],[8,18],[11,21],[11,0]]},"2":{width:20,points:[[4,16],[4,17],[5,19],[6,20],[8,21],[12,21],[14,20],[15,19],[16,17],[16,15],[15,13],[13,10],[3,0],[17,0]]},"3":{width:20,points:[[5,21],[16,21],[10,13],[13,13],[15,12],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]]},"4":{width:20,points:[[13,21],[3,7],[18,7],[-1,-1],[13,21],[13,0]]},"5":{width:20,points:[[15,21],[5,21],[4,12],[5,13],[8,14],[11,14],[14,13],[16,11],[17,8],[17,6],[16,3],[14,1],[11,0],[8,0],[5,1],[4,2],[3,4]]},"6":{width:20,points:[[16,18],[15,20],[12,21],[10,21],[7,20],[5,17],[4,12],[4,7],[5,3],[7,1],[10,0],[11,0],[14,1],[16,3],[17,6],[17,7],[16,10],[14,12],[11,13],[10,13],[7,12],[5,10],[4,7]]},"7":{width:20,points:[[17,21],[7,0],[-1,-1],[3,21],[17,21]]},"8":{width:20,points:[[8,21],[5,20],[4,18],[4,16],[5,14],[7,13],[11,12],[14,11],[16,9],[17,7],[17,4],[16,2],[15,1],[12,0],[8,0],[5,1],[4,2],[3,4],[3,7],[4,9],[6,11],[9,12],[13,13],[15,14],[16,16],[16,18],[15,20],[12,21],[8,21]]},"9":{width:20,points:[[16,14],[15,11],[13,9],[10,8],[9,8],[6,9],[4,11],[3,14],[3,15],[4,18],[6,20],[9,21],[10,21],[13,20],[15,18],[16,14],[16,9],[15,4],[13,1],[10,0],[8,0],[5,1],[4,3]]},":":{width:10,points:[[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[5,2],[4,1],[5,0],[6,1],[5,2]]},";":{width:10,points:[[5,14],[4,13],[5,12],[6,13],[5,14],[-1,-1],[6,1],[5,0],[4,1],[5,2],[6,1],[6,-1],[5,-3],[4,-4]]},"<":{width:24,points:[[20,18],[4,9],[20,0]]},"=":{width:26,points:[[4,12],[22,12],[-1,-1],[4,6],[22,6]]},">":{width:24,points:[[4,18],[20,9],[4,0]]},"?":{width:18,points:[[3,16],[3,17],[4,19],[5,20],[7,21],[11,21],[13,20],[14,19],[15,17],[15,15],[14,13],[13,12],[9,10],[9,7],[-1,-1],[9,2],[8,1],[9,0],[10,1],[9,2]]},"@":{width:27,points:[[18,13],[17,15],[15,16],[12,16],[10,15],[9,14],[8,11],[8,8],[9,6],[11,5],[14,5],[16,6],[17,8],[-1,-1],[12,16],[10,14],[9,11],[9,8],[10,6],[11,5],[-1,-1],[18,16],[17,8],[17,6],[19,5],[21,5],[23,7],[24,10],[24,12],[23,15],[22,17],[20,19],[18,20],[15,21],[12,21],[9,20],[7,19],[5,17],[4,15],[3,12],[3,9],[4,6],[5,4],[7,2],[9,1],[12,0],[15,0],[18,1],[20,2],[21,3],[-1,-1],[19,16],[18,8],[18,6],[19,5]]},A:{width:18,points:[[9,21],[1,0],[-1,-1],[9,21],[17,0],[-1,-1],[4,7],[14,7]]},B:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[-1,-1],[4,11],[13,11],[16,10],[17,9],[18,7],[18,4],[17,2],[16,1],[13,0],[4,0]]},C:{width:21,points:[[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5]]},D:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[11,21],[14,20],[16,18],[17,16],[18,13],[18,8],[17,5],[16,3],[14,1],[11,0],[4,0]]},E:{width:19,points:[[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11],[-1,-1],[4,0],[17,0]]},F:{width:18,points:[[4,21],[4,0],[-1,-1],[4,21],[17,21],[-1,-1],[4,11],[12,11]]},G:{width:21,points:[[18,16],[17,18],[15,20],[13,21],[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[18,8],[-1,-1],[13,8],[18,8]]},H:{width:22,points:[[4,21],[4,0],[-1,-1],[18,21],[18,0],[-1,-1],[4,11],[18,11]]},I:{width:8,points:[[4,21],[4,0]]},J:{width:16,points:[[12,21],[12,5],[11,2],[10,1],[8,0],[6,0],[4,1],[3,2],[2,5],[2,7]]},K:{width:21,points:[[4,21],[4,0],[-1,-1],[18,21],[4,7],[-1,-1],[9,12],[18,0]]},L:{width:17,points:[[4,21],[4,0],[-1,-1],[4,0],[16,0]]},M:{width:24,points:[[4,21],[4,0],[-1,-1],[4,21],[12,0],[-1,-1],[20,21],[12,0],[-1,-1],[20,21],[20,0]]},N:{width:22,points:[[4,21],[4,0],[-1,-1],[4,21],[18,0],[-1,-1],[18,21],[18,0]]},O:{width:22,points:[[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21]]},P:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,14],[17,12],[16,11],[13,10],[4,10]]},Q:{width:22,points:[[9,21],[7,20],[5,18],[4,16],[3,13],[3,8],[4,5],[5,3],[7,1],[9,0],[13,0],[15,1],[17,3],[18,5],[19,8],[19,13],[18,16],[17,18],[15,20],[13,21],[9,21],[-1,-1],[12,4],[18,-2]]},R:{width:21,points:[[4,21],[4,0],[-1,-1],[4,21],[13,21],[16,20],[17,19],[18,17],[18,15],[17,13],[16,12],[13,11],[4,11],[-1,-1],[11,11],[18,0]]},S:{width:20,points:[[17,18],[15,20],[12,21],[8,21],[5,20],[3,18],[3,16],[4,14],[5,13],[7,12],[13,10],[15,9],[16,8],[17,6],[17,3],[15,1],[12,0],[8,0],[5,1],[3,3]]},T:{width:16,points:[[8,21],[8,0],[-1,-1],[1,21],[15,21]]},U:{width:22,points:[[4,21],[4,6],[5,3],[7,1],[10,0],[12,0],[15,1],[17,3],[18,6],[18,21]]},V:{width:18,points:[[1,21],[9,0],[-1,-1],[17,21],[9,0]]},W:{width:24,points:[[2,21],[7,0],[-1,-1],[12,21],[7,0],[-1,-1],[12,21],[17,0],[-1,-1],[22,21],[17,0]]},X:{width:20,points:[[3,21],[17,0],[-1,-1],[17,21],[3,0]]},Y:{width:18,points:[[1,21],[9,11],[9,0],[-1,-1],[17,21],[9,11]]},Z:{width:20,points:[[17,21],[3,0],[-1,-1],[3,21],[17,21],[-1,-1],[3,0],[17,0]]},"[":{width:14,points:[[4,25],[4,-7],[-1,-1],[5,25],[5,-7],[-1,-1],[4,25],[11,25],[-1,-1],[4,-7],[11,-7]]},"\\":{width:14,points:[[0,21],[14,-3]]},"]":{width:14,points:[[9,25],[9,-7],[-1,-1],[10,25],[10,-7],[-1,-1],[3,25],[10,25],[-1,-1],[3,-7],[10,-7]]},"^":{width:16,points:[[6,15],[8,18],[10,15],[-1,-1],[3,12],[8,17],[13,12],[-1,-1],[8,17],[8,0]]},_:{width:16,points:[[0,-2],[16,-2]]},"`":{width:10,points:[[6,21],[5,20],[4,18],[4,16],[5,15],[6,16],[5,17]]},a:{width:19,points:[[15,14],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},b:{width:19,points:[[4,21],[4,0],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]]},c:{width:18,points:[[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},d:{width:19,points:[[15,21],[15,0],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},e:{width:18,points:[[3,8],[15,8],[15,10],[14,12],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},f:{width:12,points:[[10,21],[8,21],[6,20],[5,17],[5,0],[-1,-1],[2,14],[9,14]]},g:{width:19,points:[[15,14],[15,-2],[14,-5],[13,-6],[11,-7],[8,-7],[6,-6],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},h:{width:19,points:[[4,21],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]]},i:{width:8,points:[[3,21],[4,20],[5,21],[4,22],[3,21],[-1,-1],[4,14],[4,0]]},j:{width:10,points:[[5,21],[6,20],[7,21],[6,22],[5,21],[-1,-1],[6,14],[6,-3],[5,-6],[3,-7],[1,-7]]},k:{width:17,points:[[4,21],[4,0],[-1,-1],[14,14],[4,4],[-1,-1],[8,8],[15,0]]},l:{width:8,points:[[4,21],[4,0]]},m:{width:30,points:[[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0],[-1,-1],[15,10],[18,13],[20,14],[23,14],[25,13],[26,10],[26,0]]},n:{width:19,points:[[4,14],[4,0],[-1,-1],[4,10],[7,13],[9,14],[12,14],[14,13],[15,10],[15,0]]},o:{width:19,points:[[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3],[16,6],[16,8],[15,11],[13,13],[11,14],[8,14]]},p:{width:19,points:[[4,14],[4,-7],[-1,-1],[4,11],[6,13],[8,14],[11,14],[13,13],[15,11],[16,8],[16,6],[15,3],[13,1],[11,0],[8,0],[6,1],[4,3]]},q:{width:19,points:[[15,14],[15,-7],[-1,-1],[15,11],[13,13],[11,14],[8,14],[6,13],[4,11],[3,8],[3,6],[4,3],[6,1],[8,0],[11,0],[13,1],[15,3]]},r:{width:13,points:[[4,14],[4,0],[-1,-1],[4,8],[5,11],[7,13],[9,14],[12,14]]},s:{width:17,points:[[14,11],[13,13],[10,14],[7,14],[4,13],[3,11],[4,9],[6,8],[11,7],[13,6],[14,4],[14,3],[13,1],[10,0],[7,0],[4,1],[3,3]]},t:{width:12,points:[[5,21],[5,4],[6,1],[8,0],[10,0],[-1,-1],[2,14],[9,14]]},u:{width:19,points:[[4,14],[4,4],[5,1],[7,0],[10,0],[12,1],[15,4],[-1,-1],[15,14],[15,0]]},v:{width:16,points:[[2,14],[8,0],[-1,-1],[14,14],[8,0]]},w:{width:22,points:[[3,14],[7,0],[-1,-1],[11,14],[7,0],[-1,-1],[11,14],[15,0],[-1,-1],[19,14],[15,0]]},x:{width:17,points:[[3,14],[14,0],[-1,-1],[14,14],[3,0]]},y:{width:16,points:[[2,14],[8,0],[-1,-1],[14,14],[8,0],[6,-4],[4,-6],[2,-7],[1,-7]]},z:{width:17,points:[[14,14],[3,0],[-1,-1],[3,14],[14,14],[-1,-1],[3,0],[14,0]]},"{":{width:14,points:[[9,25],[7,24],[6,23],[5,21],[5,19],[6,17],[7,16],[8,14],[8,12],[6,10],[-1,-1],[7,24],[6,22],[6,20],[7,18],[8,17],[9,15],[9,13],[8,11],[4,9],[8,7],[9,5],[9,3],[8,1],[7,0],[6,-2],[6,-4],[7,-6],[-1,-1],[6,8],[8,6],[8,4],[7,2],[6,1],[5,-1],[5,-3],[6,-5],[7,-6],[9,-7]]},"|":{width:8,points:[[4,25],[4,-7]]},"}":{width:14,points:[[5,25],[7,24],[8,23],[9,21],[9,19],[8,17],[7,16],[6,14],[6,12],[8,10],[-1,-1],[7,24],[8,22],[8,20],[7,18],[6,17],[5,15],[5,13],[6,11],[10,9],[6,7],[5,5],[5,3],[6,1],[7,0],[8,-2],[8,-4],[7,-6],[-1,-1],[8,8],[6,6],[6,4],[7,2],[8,1],[9,-1],[9,-3],[8,-5],[7,-6],[5,-7]]},"~":{width:24,points:[[3,6],[3,8],[4,11],[6,12],[8,12],[10,11],[14,8],[16,7],[18,7],[20,8],[21,10],[-1,-1],[3,8],[4,10],[6,11],[8,11],[10,10],[14,7],[16,6],[18,6],[20,7],[21,10],[21,12]]}};a.jqplot.CanvasFontRenderer=function(b){b=b||{};if(!b.pt2px){b.pt2px=1.5}a.jqplot.CanvasTextRenderer.call(this,b)};a.jqplot.CanvasFontRenderer.prototype=new a.jqplot.CanvasTextRenderer({});a.jqplot.CanvasFontRenderer.prototype.constructor=a.jqplot.CanvasFontRenderer;a.jqplot.CanvasFontRenderer.prototype.measure=function(c,e){var d=this.fontSize+" "+this.fontFamily;c.save();c.font=d;var b=c.measureText(e).width;c.restore();return b};a.jqplot.CanvasFontRenderer.prototype.draw=function(e,g){var c=0;var h=this.height*0.72;e.save();var d,b;if((-Math.PI/2<=this.angle&&this.angle<=0)||(Math.PI*3/2<=this.angle&&this.angle<=Math.PI*2)){d=0;b=-Math.sin(this.angle)*this.width}else{if((0<this.angle&&this.angle<=Math.PI/2)||(-Math.PI*2<=this.angle&&this.angle<=-Math.PI*3/2)){d=Math.sin(this.angle)*this.height;b=0}else{if((-Math.PI<this.angle&&this.angle<-Math.PI/2)||(Math.PI<=this.angle&&this.angle<=Math.PI*3/2)){d=-Math.cos(this.angle)*this.width;b=-Math.sin(this.angle)*this.width-Math.cos(this.angle)*this.height}else{if((-Math.PI*3/2<this.angle&&this.angle<Math.PI)||(Math.PI/2<this.angle&&this.angle<Math.PI)){d=Math.sin(this.angle)*this.height-Math.cos(this.angle)*this.width;b=-Math.cos(this.angle)*this.height}}}}e.strokeStyle=this.fillStyle;e.fillStyle=this.fillStyle;var f=this.fontSize+" "+this.fontFamily;e.font=f;e.translate(d,b);e.rotate(this.angle);e.fillText(g,c,h);e.restore()}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.js
deleted file mode 100644
index 070801cb..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.js
+++ /dev/null
@@ -1,673 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- /**
- * class: $.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}}}
- **/
- $.jqplot.CategoryAxisRenderer = function(options) {
- $.jqplot.LinearAxisRenderer.call(this);
- // prop: sortMergedLabels
- // 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}}}
- this.sortMergedLabels = false;
- };
-
- $.jqplot.CategoryAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
- $.jqplot.CategoryAxisRenderer.prototype.constructor = $.jqplot.CategoryAxisRenderer;
-
- $.jqplot.CategoryAxisRenderer.prototype.init = function(options){
- this.groups = 1;
- this.groupLabels = [];
- this._groupLabels = [];
- this._grouped = false;
- this._barsPerGroup = null;
- this.reverse = false;
- // prop: 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;
- $.extend(true, this, {tickOptions:{formatString:'%d'}}, options);
- var db = this._dataBounds;
- // Go through all the series attached to this axis and find
- // the min/max bounds for this axis.
- for (var i=0; i<this._series.length; i++) {
- var s = this._series[i];
- if (s.groups) {
- this.groups = s.groups;
- }
- var d = s.data;
-
- for (var j=0; j<d.length; j++) {
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- if (d[j][0] < db.min || db.min == null) {
- db.min = d[j][0];
- }
- if (d[j][0] > db.max || db.max == null) {
- db.max = d[j][0];
- }
- }
- else {
- if (d[j][1] < db.min || db.min == null) {
- db.min = d[j][1];
- }
- if (d[j][1] > db.max || db.max == null) {
- db.max = d[j][1];
- }
- }
- }
- }
-
- if (this.groupLabels.length) {
- this.groups = this.groupLabels.length;
- }
- };
-
-
- $.jqplot.CategoryAxisRenderer.prototype.createTicks = function() {
- // we're are operating on an axis here
- var ticks = this._ticks;
- var userTicks = this.ticks;
- var name = this.name;
- // databounds were set on axis initialization.
- var db = this._dataBounds;
- var dim, interval;
- var min, max;
- var pos1, pos2;
- var tt, i;
-
- // if we already have ticks, use them.
- if (userTicks.length) {
- // adjust with blanks if we have groups
- if (this.groups > 1 && !this._grouped) {
- var l = userTicks.length;
- var skip = parseInt(l/this.groups, 10);
- var count = 0;
- for (var i=skip; i<l; i+=skip) {
- userTicks.splice(i+count, 0, ' ');
- count++;
- }
- this._grouped = true;
- }
- this.min = 0.5;
- this.max = userTicks.length + 0.5;
- var range = this.max - this.min;
- this.numberTicks = 2*userTicks.length + 1;
- for (i=0; i<userTicks.length; i++){
- tt = this.min + 2 * i * range / (this.numberTicks-1);
- // need a marker before and after the tick
- var t = new this.tickRenderer(this.tickOptions);
- t.showLabel = false;
- // t.showMark = true;
- t.setTick(tt, this.name);
- this._ticks.push(t);
- var t = new this.tickRenderer(this.tickOptions);
- t.label = userTicks[i];
- // t.showLabel = true;
- t.showMark = false;
- t.showGridline = false;
- t.setTick(tt+0.5, this.name);
- this._ticks.push(t);
- }
- // now add the last tick at the end
- var t = new this.tickRenderer(this.tickOptions);
- t.showLabel = false;
- // t.showMark = true;
- t.setTick(tt+1, this.name);
- this._ticks.push(t);
- }
-
- // we don't have any ticks yet, let's make some!
- else {
- if (name == 'xaxis' || name == 'x2axis') {
- dim = this._plotDimensions.width;
- }
- else {
- dim = this._plotDimensions.height;
- }
-
- // if min, max and number of ticks specified, user can't specify interval.
- if (this.min != null && this.max != null && this.numberTicks != null) {
- this.tickInterval = null;
- }
-
- // if max, min, and interval specified and interval won't fit, ignore interval.
- if (this.min != null && this.max != null && this.tickInterval != null) {
- if (parseInt((this.max-this.min)/this.tickInterval, 10) != (this.max-this.min)/this.tickInterval) {
- this.tickInterval = null;
- }
- }
-
- // find out how many categories are in the lines and collect labels
- var labels = [];
- var numcats = 0;
- var min = 0.5;
- var max, val;
- var isMerged = false;
- for (var i=0; i<this._series.length; i++) {
- var s = this._series[i];
- for (var j=0; j<s.data.length; j++) {
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- val = s.data[j][0];
- }
- else {
- val = s.data[j][1];
- }
- if ($.inArray(val, labels) == -1) {
- isMerged = true;
- numcats += 1;
- labels.push(val);
- }
- }
- }
-
- if (isMerged && this.sortMergedLabels) {
- labels.sort(function(a,b) { return a - b; });
- }
-
- // keep a reference to these tick labels to use for redrawing plot (see bug #57)
- this.ticks = labels;
-
- // now bin the data values to the right lables.
- for (var i=0; i<this._series.length; i++) {
- var s = this._series[i];
- for (var j=0; j<s.data.length; j++) {
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- val = s.data[j][0];
- }
- else {
- val = s.data[j][1];
- }
- // for category axis, force the values into category bins.
- // we should have the value in the label array now.
- var idx = $.inArray(val, labels)+1;
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- s.data[j][0] = idx;
- }
- else {
- s.data[j][1] = idx;
- }
- }
- }
-
- // adjust with blanks if we have groups
- if (this.groups > 1 && !this._grouped) {
- var l = labels.length;
- var skip = parseInt(l/this.groups, 10);
- var count = 0;
- for (var i=skip; i<l; i+=skip+1) {
- labels[i] = ' ';
- }
- this._grouped = true;
- }
-
- max = numcats + 0.5;
- if (this.numberTicks == null) {
- this.numberTicks = 2*numcats + 1;
- }
-
- var range = max - min;
- this.min = min;
- this.max = max;
- var track = 0;
-
- // todo: adjust this so more ticks displayed.
- var maxVisibleTicks = parseInt(3+dim/10, 10);
- var skip = parseInt(numcats/maxVisibleTicks, 10);
-
- if (this.tickInterval == null) {
-
- this.tickInterval = range / (this.numberTicks-1);
-
- }
- // if tickInterval is specified, we will ignore any computed maximum.
- for (var i=0; i<this.numberTicks; i++){
- tt = this.min + i * this.tickInterval;
- var t = new this.tickRenderer(this.tickOptions);
- // if even tick, it isn't a category, it's a divider
- if (i/2 == parseInt(i/2, 10)) {
- t.showLabel = false;
- t.showMark = true;
- }
- else {
- if (skip>0 && track<skip) {
- t.showLabel = false;
- track += 1;
- }
- else {
- t.showLabel = true;
- track = 0;
- }
- t.label = t.formatter(t.formatString, labels[(i-1)/2]);
- t.showMark = false;
- t.showGridline = false;
- }
- t.setTick(tt, this.name);
- this._ticks.push(t);
- }
- }
-
- };
-
- // called with scope of axis
- $.jqplot.CategoryAxisRenderer.prototype.draw = function(ctx, plot) {
- if (this.show) {
- // populate the axis label and value properties.
- // createTicks is a method on the renderer, but
- // call it within the scope of the axis.
- this.renderer.createTicks.call(this);
- // fill a div with axes labels in the right direction.
- // Need to pregenerate each axis to get it's bounds and
- // position it and the labels correctly on the plot.
- var dim=0;
- var temp;
- // Added for theming.
- if (this._elem) {
- // this._elem.empty();
- // Memory Leaks patch
- this._elem.emptyForce();
- }
-
- this._elem = this._elem || $('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>');
-
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- this._elem.width(this._plotDimensions.width);
- }
- else {
- this._elem.height(this._plotDimensions.height);
- }
-
- // create a _label object.
- this.labelOptions.axis = this.name;
- this._label = new this.labelRenderer(this.labelOptions);
- if (this._label.show) {
- var elem = this._label.draw(ctx, plot);
- elem.appendTo(this._elem);
- }
-
- var t = this._ticks;
- for (var i=0; i<t.length; i++) {
- var tick = t[i];
- if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
- var elem = tick.draw(ctx, plot);
- elem.appendTo(this._elem);
- }
- }
-
- this._groupLabels = [];
- // now make group labels
- for (var i=0; i<this.groupLabels.length; i++)
- {
- var elem = $('<div style="position:absolute;" class="jqplot-'+this.name+'-groupLabel"></div>');
- elem.html(this.groupLabels[i]);
- this._groupLabels.push(elem);
- elem.appendTo(this._elem);
- }
- }
- return this._elem;
- };
-
- // called with scope of axis
- $.jqplot.CategoryAxisRenderer.prototype.set = function() {
- var dim = 0;
- var temp;
- var w = 0;
- var h = 0;
- var lshow = (this._label == null) ? false : this._label.show;
- if (this.show) {
- var t = this._ticks;
- for (var i=0; i<t.length; i++) {
- var tick = t[i];
- if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- temp = tick._elem.outerHeight(true);
- }
- else {
- temp = tick._elem.outerWidth(true);
- }
- if (temp > dim) {
- dim = temp;
- }
- }
- }
-
- var dim2 = 0;
- for (var i=0; i<this._groupLabels.length; i++) {
- var l = this._groupLabels[i];
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- temp = l.outerHeight(true);
- }
- else {
- temp = l.outerWidth(true);
- }
- if (temp > dim2) {
- dim2 = temp;
- }
- }
-
- if (lshow) {
- w = this._label._elem.outerWidth(true);
- h = this._label._elem.outerHeight(true);
- }
- if (this.name == 'xaxis') {
- dim += dim2 + h;
- this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'});
- }
- else if (this.name == 'x2axis') {
- dim += dim2 + h;
- this._elem.css({'height':dim+'px', left:'0px', top:'0px'});
- }
- else if (this.name == 'yaxis') {
- dim += dim2 + w;
- this._elem.css({'width':dim+'px', left:'0px', top:'0px'});
- if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
- this._label._elem.css('width', w+'px');
- }
- }
- else {
- dim += dim2 + w;
- this._elem.css({'width':dim+'px', right:'0px', top:'0px'});
- if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
- this._label._elem.css('width', w+'px');
- }
- }
- }
- };
-
- // called with scope of axis
- $.jqplot.CategoryAxisRenderer.prototype.pack = function(pos, offsets) {
- var ticks = this._ticks;
- var max = this.max;
- var min = this.min;
- var offmax = offsets.max;
- var offmin = offsets.min;
- var lshow = (this._label == null) ? false : this._label.show;
- var i;
-
- for (var p in pos) {
- this._elem.css(p, pos[p]);
- }
-
- this._offsets = offsets;
- // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left.
- var pixellength = offmax - offmin;
- var unitlength = max - min;
-
- if (!this.reverse) {
- // point to unit and unit to point conversions references to Plot DOM element top left corner.
-
- this.u2p = function(u){
- return (u - min) * pixellength / unitlength + offmin;
- };
-
- this.p2u = function(p){
- return (p - offmin) * unitlength / pixellength + min;
- };
-
- if (this.name == 'xaxis' || this.name == 'x2axis'){
- this.series_u2p = function(u){
- return (u - min) * pixellength / unitlength;
- };
- this.series_p2u = function(p){
- return p * unitlength / pixellength + min;
- };
- }
-
- else {
- this.series_u2p = function(u){
- return (u - max) * pixellength / unitlength;
- };
- this.series_p2u = function(p){
- return p * unitlength / pixellength + max;
- };
- }
- }
-
- else {
- // point to unit and unit to point conversions references to Plot DOM element top left corner.
-
- this.u2p = function(u){
- return offmin + (max - u) * pixellength / unitlength;
- };
-
- this.p2u = function(p){
- return min + (p - offmin) * unitlength / pixellength;
- };
-
- if (this.name == 'xaxis' || this.name == 'x2axis'){
- this.series_u2p = function(u){
- return (max - u) * pixellength / unitlength;
- };
- this.series_p2u = function(p){
- return p * unitlength / pixellength + max;
- };
- }
-
- else {
- this.series_u2p = function(u){
- return (min - u) * pixellength / unitlength;
- };
- this.series_p2u = function(p){
- return p * unitlength / pixellength + min;
- };
- }
-
- }
-
-
- if (this.show) {
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- for (i=0; i<ticks.length; i++) {
- var t = ticks[i];
- if (t.show && t.showLabel) {
- var shim;
-
- if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
- // will need to adjust auto positioning based on which axis this is.
- var temp = (this.name == 'xaxis') ? 1 : -1;
- switch (t.labelPosition) {
- case 'auto':
- // position at end
- if (temp * t.angle < 0) {
- shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- }
- // position at start
- else {
- shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
- }
- break;
- case 'end':
- shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- break;
- case 'start':
- shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
- break;
- case 'middle':
- shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- break;
- default:
- shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- break;
- }
- }
- else {
- shim = -t.getWidth()/2;
- }
- var val = this.u2p(t.value) + shim + 'px';
- t._elem.css('left', val);
- t.pack();
- }
- }
-
- var labeledge=['bottom', 0];
- if (lshow) {
- var w = this._label._elem.outerWidth(true);
- this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px');
- if (this.name == 'xaxis') {
- this._label._elem.css('bottom', '0px');
- labeledge = ['bottom', this._label._elem.outerHeight(true)];
- }
- else {
- this._label._elem.css('top', '0px');
- labeledge = ['top', this._label._elem.outerHeight(true)];
- }
- this._label.pack();
- }
-
- // draw the group labels
- var step = parseInt(this._ticks.length/this.groups, 10);
- for (i=0; i<this._groupLabels.length; i++) {
- var mid = 0;
- var count = 0;
- for (var j=i*step; j<=(i+1)*step; j++) {
- if (this._ticks[j]._elem && this._ticks[j].label != " ") {
- var t = this._ticks[j]._elem;
- var p = t.position();
- mid += p.left + t.outerWidth(true)/2;
- count++;
- }
- }
- mid = mid/count;
- this._groupLabels[i].css({'left':(mid - this._groupLabels[i].outerWidth(true)/2)});
- this._groupLabels[i].css(labeledge[0], labeledge[1]);
- }
- }
- else {
- for (i=0; i<ticks.length; i++) {
- var t = ticks[i];
- if (t.show && t.showLabel) {
- var shim;
- if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
- // will need to adjust auto positioning based on which axis this is.
- var temp = (this.name == 'yaxis') ? 1 : -1;
- switch (t.labelPosition) {
- case 'auto':
- // position at end
- case 'end':
- if (temp * t.angle < 0) {
- shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
- }
- else {
- shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
- }
- break;
- case 'start':
- if (t.angle > 0) {
- shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
- }
- else {
- shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
- }
- break;
- case 'middle':
- // if (t.angle > 0) {
- // shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- // }
- // else {
- // shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
- // }
- shim = -t.getHeight()/2;
- break;
- default:
- shim = -t.getHeight()/2;
- break;
- }
- }
- else {
- shim = -t.getHeight()/2;
- }
-
- var val = this.u2p(t.value) + shim + 'px';
- t._elem.css('top', val);
- t.pack();
- }
- }
-
- var labeledge=['left', 0];
- if (lshow) {
- var h = this._label._elem.outerHeight(true);
- this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px');
- if (this.name == 'yaxis') {
- this._label._elem.css('left', '0px');
- labeledge = ['left', this._label._elem.outerWidth(true)];
- }
- else {
- this._label._elem.css('right', '0px');
- labeledge = ['right', this._label._elem.outerWidth(true)];
- }
- this._label.pack();
- }
-
- // draw the group labels, position top here, do left after label position.
- var step = parseInt(this._ticks.length/this.groups, 10);
- for (i=0; i<this._groupLabels.length; i++) {
- var mid = 0;
- var count = 0;
- for (var j=i*step; j<=(i+1)*step; j++) {
- if (this._ticks[j]._elem && this._ticks[j].label != " ") {
- var t = this._ticks[j]._elem;
- var p = t.position();
- mid += p.top + t.outerHeight()/2;
- count++;
- }
- }
- mid = mid/count;
- this._groupLabels[i].css({'top':mid - this._groupLabels[i].outerHeight()/2});
- this._groupLabels[i].css(labeledge[0], labeledge[1]);
-
- }
- }
- }
- };
-
-
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.min.js
deleted file mode 100644
index 7cff1591..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.categoryAxisRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(a){a.jqplot.CategoryAxisRenderer=function(b){a.jqplot.LinearAxisRenderer.call(this);this.sortMergedLabels=false};a.jqplot.CategoryAxisRenderer.prototype=new a.jqplot.LinearAxisRenderer();a.jqplot.CategoryAxisRenderer.prototype.constructor=a.jqplot.CategoryAxisRenderer;a.jqplot.CategoryAxisRenderer.prototype.init=function(e){this.groups=1;this.groupLabels=[];this._groupLabels=[];this._grouped=false;this._barsPerGroup=null;this.reverse=false;a.extend(true,this,{tickOptions:{formatString:"%d"}},e);var b=this._dataBounds;for(var f=0;f<this._series.length;f++){var g=this._series[f];if(g.groups){this.groups=g.groups}var h=g.data;for(var c=0;c<h.length;c++){if(this.name=="xaxis"||this.name=="x2axis"){if(h[c][0]<b.min||b.min==null){b.min=h[c][0]}if(h[c][0]>b.max||b.max==null){b.max=h[c][0]}}else{if(h[c][1]<b.min||b.min==null){b.min=h[c][1]}if(h[c][1]>b.max||b.max==null){b.max=h[c][1]}}}}if(this.groupLabels.length){this.groups=this.groupLabels.length}};a.jqplot.CategoryAxisRenderer.prototype.createTicks=function(){var D=this._ticks;var z=this.ticks;var F=this.name;var C=this._dataBounds;var v,A;var q,w;var d,c;var b,x;if(z.length){if(this.groups>1&&!this._grouped){var r=z.length;var p=parseInt(r/this.groups,10);var e=0;for(var x=p;x<r;x+=p){z.splice(x+e,0," ");e++}this._grouped=true}this.min=0.5;this.max=z.length+0.5;var m=this.max-this.min;this.numberTicks=2*z.length+1;for(x=0;x<z.length;x++){b=this.min+2*x*m/(this.numberTicks-1);var h=new this.tickRenderer(this.tickOptions);h.showLabel=false;h.setTick(b,this.name);this._ticks.push(h);var h=new this.tickRenderer(this.tickOptions);h.label=z[x];h.showMark=false;h.showGridline=false;h.setTick(b+0.5,this.name);this._ticks.push(h)}var h=new this.tickRenderer(this.tickOptions);h.showLabel=false;h.setTick(b+1,this.name);this._ticks.push(h)}else{if(F=="xaxis"||F=="x2axis"){v=this._plotDimensions.width}else{v=this._plotDimensions.height}if(this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}if(this.min!=null&&this.max!=null&&this.tickInterval!=null){if(parseInt((this.max-this.min)/this.tickInterval,10)!=(this.max-this.min)/this.tickInterval){this.tickInterval=null}}var y=[];var B=0;var q=0.5;var w,E;var f=false;for(var x=0;x<this._series.length;x++){var k=this._series[x];for(var u=0;u<k.data.length;u++){if(this.name=="xaxis"||this.name=="x2axis"){E=k.data[u][0]}else{E=k.data[u][1]}if(a.inArray(E,y)==-1){f=true;B+=1;y.push(E)}}}if(f&&this.sortMergedLabels){y.sort(function(j,i){return j-i})}this.ticks=y;for(var x=0;x<this._series.length;x++){var k=this._series[x];for(var u=0;u<k.data.length;u++){if(this.name=="xaxis"||this.name=="x2axis"){E=k.data[u][0]}else{E=k.data[u][1]}var n=a.inArray(E,y)+1;if(this.name=="xaxis"||this.name=="x2axis"){k.data[u][0]=n}else{k.data[u][1]=n}}}if(this.groups>1&&!this._grouped){var r=y.length;var p=parseInt(r/this.groups,10);var e=0;for(var x=p;x<r;x+=p+1){y[x]=" "}this._grouped=true}w=B+0.5;if(this.numberTicks==null){this.numberTicks=2*B+1}var m=w-q;this.min=q;this.max=w;var o=0;var g=parseInt(3+v/10,10);var p=parseInt(B/g,10);if(this.tickInterval==null){this.tickInterval=m/(this.numberTicks-1)}for(var x=0;x<this.numberTicks;x++){b=this.min+x*this.tickInterval;var h=new this.tickRenderer(this.tickOptions);if(x/2==parseInt(x/2,10)){h.showLabel=false;h.showMark=true}else{if(p>0&&o<p){h.showLabel=false;o+=1}else{h.showLabel=true;o=0}h.label=h.formatter(h.formatString,y[(x-1)/2]);h.showMark=false;h.showGridline=false}h.setTick(b,this.name);this._ticks.push(h)}}};a.jqplot.CategoryAxisRenderer.prototype.draw=function(b,j){if(this.show){this.renderer.createTicks.call(this);var h=0;var c;if(this._elem){this._elem.emptyForce()}this._elem=this._elem||a('<div class="jqplot-axis jqplot-'+this.name+'" style="position:absolute;"></div>');if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var g=this._label.draw(b,j);g.appendTo(this._elem)}var f=this._ticks;for(var e=0;e<f.length;e++){var d=f[e];if(d.showLabel&&(!d.isMinorTick||this.showMinorTicks)){var g=d.draw(b,j);g.appendTo(this._elem)}}this._groupLabels=[];for(var e=0;e<this.groupLabels.length;e++){var g=a('<div style="position:absolute;" class="jqplot-'+this.name+'-groupLabel"></div>');g.html(this.groupLabels[e]);this._groupLabels.push(g);g.appendTo(this._elem)}}return this._elem};a.jqplot.CategoryAxisRenderer.prototype.set=function(){var e=0;var m;var k=0;var f=0;var d=(this._label==null)?false:this._label.show;if(this.show){var n=this._ticks;for(var c=0;c<n.length;c++){var g=n[c];if(g.showLabel&&(!g.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){m=g._elem.outerHeight(true)}else{m=g._elem.outerWidth(true)}if(m>e){e=m}}}var j=0;for(var c=0;c<this._groupLabels.length;c++){var b=this._groupLabels[c];if(this.name=="xaxis"||this.name=="x2axis"){m=b.outerHeight(true)}else{m=b.outerWidth(true)}if(m>j){j=m}}if(d){k=this._label._elem.outerWidth(true);f=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){e+=j+f;this._elem.css({height:e+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){e+=j+f;this._elem.css({height:e+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){e+=j+k;this._elem.css({width:e+"px",left:"0px",top:"0px"});if(d&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",k+"px")}}else{e+=j+k;this._elem.css({width:e+"px",right:"0px",top:"0px"});if(d&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",k+"px")}}}}}};a.jqplot.CategoryAxisRenderer.prototype.pack=function(e,c){var C=this._ticks;var v=this.max;var s=this.min;var n=c.max;var l=c.min;var q=(this._label==null)?false:this._label.show;var x;for(var r in e){this._elem.css(r,e[r])}this._offsets=c;var g=n-l;var k=v-s;if(!this.reverse){this.u2p=function(h){return(h-s)*g/k+l};this.p2u=function(h){return(h-l)*k/g+s};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(h){return(h-s)*g/k};this.series_p2u=function(h){return h*k/g+s}}else{this.series_u2p=function(h){return(h-v)*g/k};this.series_p2u=function(h){return h*k/g+v}}}else{this.u2p=function(h){return l+(v-h)*g/k};this.p2u=function(h){return s+(h-l)*k/g};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(h){return(v-h)*g/k};this.series_p2u=function(h){return h*k/g+v}}else{this.series_u2p=function(h){return(s-h)*g/k};this.series_p2u=function(h){return h*k/g+s}}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(x=0;x<C.length;x++){var o=C[x];if(o.show&&o.showLabel){var b;if(o.constructor==a.jqplot.CanvasAxisTickRenderer&&o.angle){var A=(this.name=="xaxis")?1:-1;switch(o.labelPosition){case"auto":if(A*o.angle<0){b=-o.getWidth()+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2}else{b=-o._textRenderer.height*Math.sin(o._textRenderer.angle)/2}break;case"end":b=-o.getWidth()+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2;break;case"start":b=-o._textRenderer.height*Math.sin(o._textRenderer.angle)/2;break;case"middle":b=-o.getWidth()/2+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2;break;default:b=-o.getWidth()/2+o._textRenderer.height*Math.sin(-o._textRenderer.angle)/2;break}}else{b=-o.getWidth()/2}var D=this.u2p(o.value)+b+"px";o._elem.css("left",D);o.pack()}}var z=["bottom",0];if(q){var m=this._label._elem.outerWidth(true);this._label._elem.css("left",l+g/2-m/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px");z=["bottom",this._label._elem.outerHeight(true)]}else{this._label._elem.css("top","0px");z=["top",this._label._elem.outerHeight(true)]}this._label.pack()}var d=parseInt(this._ticks.length/this.groups,10);for(x=0;x<this._groupLabels.length;x++){var B=0;var f=0;for(var u=x*d;u<=(x+1)*d;u++){if(this._ticks[u]._elem&&this._ticks[u].label!=" "){var o=this._ticks[u]._elem;var r=o.position();B+=r.left+o.outerWidth(true)/2;f++}}B=B/f;this._groupLabels[x].css({left:(B-this._groupLabels[x].outerWidth(true)/2)});this._groupLabels[x].css(z[0],z[1])}}else{for(x=0;x<C.length;x++){var o=C[x];if(o.show&&o.showLabel){var b;if(o.constructor==a.jqplot.CanvasAxisTickRenderer&&o.angle){var A=(this.name=="yaxis")?1:-1;switch(o.labelPosition){case"auto":case"end":if(A*o.angle<0){b=-o._textRenderer.height*Math.cos(-o._textRenderer.angle)/2}else{b=-o.getHeight()+o._textRenderer.height*Math.cos(o._textRenderer.angle)/2}break;case"start":if(o.angle>0){b=-o._textRenderer.height*Math.cos(-o._textRenderer.angle)/2}else{b=-o.getHeight()+o._textRenderer.height*Math.cos(o._textRenderer.angle)/2}break;case"middle":b=-o.getHeight()/2;break;default:b=-o.getHeight()/2;break}}else{b=-o.getHeight()/2}var D=this.u2p(o.value)+b+"px";o._elem.css("top",D);o.pack()}}var z=["left",0];if(q){var y=this._label._elem.outerHeight(true);this._label._elem.css("top",n-g/2-y/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px");z=["left",this._label._elem.outerWidth(true)]}else{this._label._elem.css("right","0px");z=["right",this._label._elem.outerWidth(true)]}this._label.pack()}var d=parseInt(this._ticks.length/this.groups,10);for(x=0;x<this._groupLabels.length;x++){var B=0;var f=0;for(var u=x*d;u<=(x+1)*d;u++){if(this._ticks[u]._elem&&this._ticks[u].label!=" "){var o=this._ticks[u]._elem;var r=o.position();B+=r.top+o.outerHeight()/2;f++}}B=B/f;this._groupLabels[x].css({top:B-this._groupLabels[x].outerHeight()/2});this._groupLabels[x].css(z[0],z[1])}}}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.js
deleted file mode 100644
index 0c579e00..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.js
+++ /dev/null
@@ -1,116 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- /**
- * Class: $.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:
- * data - JSON encoded string or object.
- * plot - reference to jqPlot Plot object.
- *
- * Returns:
- * data array in jqPlot format.
- *
- */
- $.jqplot.ciParser = function (data, plot) {
- var ret = [],
- line,
- temp,
- i, j, k, kk;
-
- if (typeof(data) == "string") {
- data = $.jqplot.JSON.parse(data, handleStrings);
- }
-
- else if (typeof(data) == "object") {
- for (k in data) {
- for (i=0; i<data[k].length; i++) {
- for (kk in data[k][i]) {
- data[k][i][kk] = handleStrings(kk, data[k][i][kk]);
- }
- }
- }
- }
-
- else {
- return null;
- }
-
- // function handleStrings
- // Checks any JSON encoded strings to see if they are
- // encoded dates. If so, pull out the timestamp.
- // Expects dates to be represented by js timestamps.
-
- function handleStrings(key, value) {
- var a;
- if (value != null) {
- if (value.toString().indexOf('Date') >= 0) {
- //here we will try to extract the ticks from the Date string in the "value" fields of JSON returned data
- a = /^\/Date\((-?[0-9]+)\)\/$/.exec(value);
- if (a) {
- return parseInt(a[1], 10);
- }
- }
- return value;
- }
- }
-
- for (var prop in data) {
- line = [];
- temp = data[prop];
- switch (prop) {
- case "PriceTicks":
- for (i=0; i<temp.length; i++) {
- line.push([temp[i]['TickDate'], temp[i]['Price']]);
- }
- break;
- case "PriceBars":
- for (i=0; i<temp.length; i++) {
- line.push([temp[i]['BarDate'], temp[i]['Open'], temp[i]['High'], temp[i]['Low'], temp[i]['Close']]);
- }
- break;
- }
- ret.push(line);
- }
- return ret;
- };
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.min.js
deleted file mode 100644
index 7ca91780..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ciParser.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(a){a.jqplot.ciParser=function(g,l){var m=[],o,n,h,f,e,c;if(typeof(g)=="string"){g=a.jqplot.JSON.parse(g,d)}else{if(typeof(g)=="object"){for(e in g){for(h=0;h<g[e].length;h++){for(c in g[e][h]){g[e][h][c]=d(c,g[e][h][c])}}}}else{return null}}function d(j,k){var i;if(k!=null){if(k.toString().indexOf("Date")>=0){i=/^\/Date\((-?[0-9]+)\)\/$/.exec(k);if(i){return parseInt(i[1],10)}}return k}}for(var b in g){o=[];n=g[b];switch(b){case"PriceTicks":for(h=0;h<n.length;h++){o.push([n[h]["TickDate"],n[h]["Price"]])}break;case"PriceBars":for(h=0;h<n.length;h++){o.push([n[h]["BarDate"],n[h]["Open"],n[h]["High"],n[h]["Low"],n[h]["Close"]])}break}m.push(o)}return m}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.js
deleted file mode 100644
index ab8b8868..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.js
+++ /dev/null
@@ -1,1108 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
-
- /**
- * Class: $.jqplot.Cursor
- * Plugin class representing the cursor as displayed on the plot.
- */
- $.jqplot.Cursor = function(options) {
- // Group: Properties
- //
- // prop: style
- // CSS spec for cursor style
- this.style = 'crosshair';
- this.previousCursor = 'auto';
- // prop: show
- // wether to show the cursor or not.
- this.show = $.jqplot.config.enablePlugins;
- // prop: showTooltip
- // show a cursor position tooltip. Location of the tooltip
- // will be controlled by followMouse and tooltipLocation.
- this.showTooltip = true;
- // prop: followMouse
- // 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.
- this.followMouse = false;
- // prop: tooltipLocation
- // 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'
- this.tooltipLocation = 'se';
- // prop: tooltipOffset
- // Pixel offset of tooltip from the grid boudaries or cursor center.
- this.tooltipOffset = 6;
- // prop: showTooltipGridPosition
- // show the grid pixel coordinates of the mouse.
- this.showTooltipGridPosition = false;
- // prop: showTooltipUnitPosition
- // show the unit (data) coordinates of the mouse.
- this.showTooltipUnitPosition = true;
- // prop: showTooltipDataPosition
- // Used with showVerticalLine to show intersecting data points in the tooltip.
- this.showTooltipDataPosition = false;
- // prop: tooltipFormatString
- // 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.
- this.tooltipFormatString = '%.4P, %.4P';
- // prop: useAxesFormatters
- // Use the x and y axes formatters to format the text in the tooltip.
- this.useAxesFormatters = true;
- // prop: 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.
- this.tooltipAxisGroups = [];
- // prop: zoom
- // Enable plot zooming.
- this.zoom = false;
- // zoomProxy and zoomTarget properties are not directly set by user.
- // They Will be set through call to zoomProxy method.
- this.zoomProxy = false;
- this.zoomTarget = false;
- // prop: looseZoom
- // Will expand zoom range to provide more rounded tick values.
- // Works only with linear, log and date axes.
- this.looseZoom = true;
- // prop: clickReset
- // Will reset plot zoom if single click on plot without drag.
- this.clickReset = false;
- // prop: dblClickReset
- // Will reset plot zoom if double click on plot without drag.
- this.dblClickReset = true;
- // prop: showVerticalLine
- // 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.
- this.showVerticalLine = false;
- // prop: showHorizontalLine
- // draw a horizontal line across the plot which follows the cursor.
- this.showHorizontalLine = false;
- // prop: constrainZoomTo
- // 'none', 'x' or 'y'
- this.constrainZoomTo = 'none';
- // // prop: autoscaleConstraint
- // // when a constrained axis is specified, true will
- // // auatoscale the adjacent axis.
- // this.autoscaleConstraint = true;
- this.shapeRenderer = new $.jqplot.ShapeRenderer();
- this._zoom = {start:[], end:[], started: false, zooming:false, isZoomed:false, axes:{start:{}, end:{}}, gridpos:{}, datapos:{}};
- this._tooltipElem;
- this.zoomCanvas;
- this.cursorCanvas;
- // prop: intersectionThreshold
- // 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.
- this.intersectionThreshold = 2;
- // prop: showCursorLegend
- // Replace the plot legend with an enhanced legend displaying intersection information.
- this.showCursorLegend = false;
- // prop: cursorLegendFormatString
- // Format string used in the cursor legend. If showTooltipDataPosition is true,
- // this will also be the default format string used by tooltipFormatString.
- this.cursorLegendFormatString = $.jqplot.Cursor.cursorLegendFormatString;
- // whether the cursor is over the grid or not.
- this._oldHandlers = {onselectstart: null, ondrag: null, onmousedown: null};
- // prop: constrainOutsideZoom
- // 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.
- this.constrainOutsideZoom = true;
- // prop: showTooltipOutsideZoom
- // True will keep updating the tooltip when zooming of the grid.
- this.showTooltipOutsideZoom = false;
- // true if mouse is over grid, false if not.
- this.onGrid = false;
- $.extend(true, this, options);
- };
-
- $.jqplot.Cursor.cursorLegendFormatString = '%s x:%s, y:%s';
-
- // called with scope of plot
- $.jqplot.Cursor.init = function (target, data, opts){
- // add a cursor attribute to the plot
- var options = opts || {};
- this.plugins.cursor = new $.jqplot.Cursor(options.cursor);
- var c = this.plugins.cursor;
-
- if (c.show) {
- $.jqplot.eventListenerHooks.push(['jqplotMouseEnter', handleMouseEnter]);
- $.jqplot.eventListenerHooks.push(['jqplotMouseLeave', handleMouseLeave]);
- $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMouseMove]);
-
- if (c.showCursorLegend) {
- opts.legend = opts.legend || {};
- opts.legend.renderer = $.jqplot.CursorLegendRenderer;
- opts.legend.formatString = this.plugins.cursor.cursorLegendFormatString;
- opts.legend.show = true;
- }
-
- if (c.zoom) {
- $.jqplot.eventListenerHooks.push(['jqplotMouseDown', handleMouseDown]);
-
- if (c.clickReset) {
- $.jqplot.eventListenerHooks.push(['jqplotClick', handleClick]);
- }
-
- if (c.dblClickReset) {
- $.jqplot.eventListenerHooks.push(['jqplotDblClick', handleDblClick]);
- }
- }
-
- this.resetZoom = function() {
- var axes = this.axes;
- if (!c.zoomProxy) {
- for (var ax in axes) {
- axes[ax].reset();
- axes[ax]._ticks = [];
- // fake out tick creation algorithm to make sure original auto
- // computed format string is used if _overrideFormatString is true
- if (c._zoom.axes[ax] !== undefined) {
- axes[ax]._autoFormatString = c._zoom.axes[ax].tickFormatString;
- }
- }
- this.redraw();
- }
- else {
- var ctx = this.plugins.cursor.zoomCanvas._ctx;
- ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
- ctx = null;
- }
- this.plugins.cursor._zoom.isZoomed = false;
- this.target.trigger('jqplotResetZoom', [this, this.plugins.cursor]);
- };
-
-
- if (c.showTooltipDataPosition) {
- c.showTooltipUnitPosition = false;
- c.showTooltipGridPosition = false;
- if (options.cursor.tooltipFormatString == undefined) {
- c.tooltipFormatString = $.jqplot.Cursor.cursorLegendFormatString;
- }
- }
- }
- };
-
- // called with context of plot
- $.jqplot.Cursor.postDraw = function() {
- var c = this.plugins.cursor;
-
- // Memory Leaks patch
- if (c.zoomCanvas) {
- c.zoomCanvas.resetCanvas();
- c.zoomCanvas = null;
- }
-
- if (c.cursorCanvas) {
- c.cursorCanvas.resetCanvas();
- c.cursorCanvas = null;
- }
-
- if (c._tooltipElem) {
- c._tooltipElem.emptyForce();
- c._tooltipElem = null;
- }
-
-
- if (c.zoom) {
- c.zoomCanvas = new $.jqplot.GenericCanvas();
- this.eventCanvas._elem.before(c.zoomCanvas.createElement(this._gridPadding, 'jqplot-zoom-canvas', this._plotDimensions, this));
- c.zoomCanvas.setContext();
- }
-
- var elem = document.createElement('div');
- c._tooltipElem = $(elem);
- elem = null;
- c._tooltipElem.addClass('jqplot-cursor-tooltip');
- c._tooltipElem.css({position:'absolute', display:'none'});
-
-
- if (c.zoomCanvas) {
- c.zoomCanvas._elem.before(c._tooltipElem);
- }
-
- else {
- this.eventCanvas._elem.before(c._tooltipElem);
- }
-
- if (c.showVerticalLine || c.showHorizontalLine) {
- c.cursorCanvas = new $.jqplot.GenericCanvas();
- this.eventCanvas._elem.before(c.cursorCanvas.createElement(this._gridPadding, 'jqplot-cursor-canvas', this._plotDimensions, this));
- c.cursorCanvas.setContext();
- }
-
- // if we are showing the positions in unit coordinates, and no axes groups
- // were specified, create a default set.
- if (c.showTooltipUnitPosition){
- if (c.tooltipAxisGroups.length === 0) {
- var series = this.series;
- var s;
- var temp = [];
- for (var i=0; i<series.length; i++) {
- s = series[i];
- var ax = s.xaxis+','+s.yaxis;
- if ($.inArray(ax, temp) == -1) {
- temp.push(ax);
- }
- }
- for (var i=0; i<temp.length; i++) {
- c.tooltipAxisGroups.push(temp[i].split(','));
- }
- }
- }
- };
-
- // Group: methods
- //
- // method: $.jqplot.Cursor.zoomProxy
- // 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.
- $.jqplot.Cursor.zoomProxy = function(targetPlot, controllerPlot) {
- var tc = targetPlot.plugins.cursor;
- var cc = controllerPlot.plugins.cursor;
- tc.zoomTarget = true;
- tc.zoom = true;
- tc.style = 'auto';
- tc.dblClickReset = false;
- cc.zoom = true;
- cc.zoomProxy = true;
-
- controllerPlot.target.bind('jqplotZoom', plotZoom);
- controllerPlot.target.bind('jqplotResetZoom', plotReset);
-
- function plotZoom(ev, gridpos, datapos, plot, cursor) {
- tc.doZoom(gridpos, datapos, targetPlot, cursor);
- }
-
- function plotReset(ev, plot, cursor) {
- targetPlot.resetZoom();
- }
- };
-
- $.jqplot.Cursor.prototype.resetZoom = function(plot, cursor) {
- var axes = plot.axes;
- var cax = cursor._zoom.axes;
- if (!plot.plugins.cursor.zoomProxy && cursor._zoom.isZoomed) {
- for (var ax in axes) {
- // axes[ax]._ticks = [];
- // axes[ax].min = cax[ax].min;
- // axes[ax].max = cax[ax].max;
- // axes[ax].numberTicks = cax[ax].numberTicks;
- // axes[ax].tickInterval = cax[ax].tickInterval;
- // // for date axes
- // axes[ax].daTickInterval = cax[ax].daTickInterval;
- axes[ax].reset();
- axes[ax]._ticks = [];
- // fake out tick creation algorithm to make sure original auto
- // computed format string is used if _overrideFormatString is true
- axes[ax]._autoFormatString = cax[ax].tickFormatString;
- }
- plot.redraw();
- cursor._zoom.isZoomed = false;
- }
- else {
- var ctx = cursor.zoomCanvas._ctx;
- ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
- ctx = null;
- }
- plot.target.trigger('jqplotResetZoom', [plot, cursor]);
- };
-
- $.jqplot.Cursor.resetZoom = function(plot) {
- plot.resetZoom();
- };
-
- $.jqplot.Cursor.prototype.doZoom = function (gridpos, datapos, plot, cursor) {
- var c = cursor;
- var axes = plot.axes;
- var zaxes = c._zoom.axes;
- var start = zaxes.start;
- var end = zaxes.end;
- var min, max, dp, span,
- newmin, newmax, curax, _numberTicks, ret;
- var ctx = plot.plugins.cursor.zoomCanvas._ctx;
- // don't zoom if zoom area is too small (in pixels)
- if ((c.constrainZoomTo == 'none' && Math.abs(gridpos.x - c._zoom.start[0]) > 6 && Math.abs(gridpos.y - c._zoom.start[1]) > 6) || (c.constrainZoomTo == 'x' && Math.abs(gridpos.x - c._zoom.start[0]) > 6) || (c.constrainZoomTo == 'y' && Math.abs(gridpos.y - c._zoom.start[1]) > 6)) {
- if (!plot.plugins.cursor.zoomProxy) {
- for (var ax in datapos) {
- // make a copy of the original axes to revert back.
- if (c._zoom.axes[ax] == undefined) {
- c._zoom.axes[ax] = {};
- c._zoom.axes[ax].numberTicks = axes[ax].numberTicks;
- c._zoom.axes[ax].tickInterval = axes[ax].tickInterval;
- // for date axes...
- c._zoom.axes[ax].daTickInterval = axes[ax].daTickInterval;
- c._zoom.axes[ax].min = axes[ax].min;
- c._zoom.axes[ax].max = axes[ax].max;
- c._zoom.axes[ax].tickFormatString = (axes[ax].tickOptions != null) ? axes[ax].tickOptions.formatString : '';
- }
-
-
- if ((c.constrainZoomTo == 'none') || (c.constrainZoomTo == 'x' && ax.charAt(0) == 'x') || (c.constrainZoomTo == 'y' && ax.charAt(0) == 'y')) {
- dp = datapos[ax];
- if (dp != null) {
- if (dp > start[ax]) {
- newmin = start[ax];
- newmax = dp;
- }
- else {
- span = start[ax] - dp;
- newmin = dp;
- newmax = start[ax];
- }
-
- curax = axes[ax];
-
- _numberTicks = null;
-
- // if aligning this axis, use number of ticks from previous axis.
- // Do I need to reset somehow if alignTicks is changed and then graph is replotted??
- if (curax.alignTicks) {
- if (curax.name === 'x2axis' && plot.axes.xaxis.show) {
- _numberTicks = plot.axes.xaxis.numberTicks;
- }
- else if (curax.name.charAt(0) === 'y' && curax.name !== 'yaxis' && curax.name !== 'yMidAxis' && plot.axes.yaxis.show) {
- _numberTicks = plot.axes.yaxis.numberTicks;
- }
- }
-
- if (this.looseZoom && (axes[ax].renderer.constructor === $.jqplot.LinearAxisRenderer || axes[ax].renderer.constructor === $.jqplot.LogAxisRenderer )) { //} || axes[ax].renderer.constructor === $.jqplot.DateAxisRenderer)) {
-
- ret = $.jqplot.LinearTickGenerator(newmin, newmax, curax._scalefact, _numberTicks);
-
- // if new minimum is less than "true" minimum of axis display, adjust it
- if (axes[ax].tickInset && ret[0] < axes[ax].min + axes[ax].tickInset * axes[ax].tickInterval) {
- ret[0] += ret[4];
- ret[2] -= 1;
- }
-
- // if new maximum is greater than "true" max of axis display, adjust it
- if (axes[ax].tickInset && ret[1] > axes[ax].max - axes[ax].tickInset * axes[ax].tickInterval) {
- ret[1] -= ret[4];
- ret[2] -= 1;
- }
-
- // for log axes, don't fall below current minimum, this will look bad and can't have 0 in range anyway.
- if (axes[ax].renderer.constructor === $.jqplot.LogAxisRenderer && ret[0] < axes[ax].min) {
- // remove a tick and shift min up
- ret[0] += ret[4];
- ret[2] -= 1;
- }
-
- axes[ax].min = ret[0];
- axes[ax].max = ret[1];
- axes[ax]._autoFormatString = ret[3];
- axes[ax].numberTicks = ret[2];
- axes[ax].tickInterval = ret[4];
- // for date axes...
- axes[ax].daTickInterval = [ret[4]/1000, 'seconds'];
- }
- else {
- axes[ax].min = newmin;
- axes[ax].max = newmax;
- axes[ax].tickInterval = null;
- axes[ax].numberTicks = null;
- // for date axes...
- axes[ax].daTickInterval = null;
- }
-
- axes[ax]._ticks = [];
- }
- }
-
- // if ((c.constrainZoomTo == 'x' && ax.charAt(0) == 'y' && c.autoscaleConstraint) || (c.constrainZoomTo == 'y' && ax.charAt(0) == 'x' && c.autoscaleConstraint)) {
- // dp = datapos[ax];
- // if (dp != null) {
- // axes[ax].max == null;
- // axes[ax].min = null;
- // }
- // }
- }
- ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
- plot.redraw();
- c._zoom.isZoomed = true;
- ctx = null;
- }
- plot.target.trigger('jqplotZoom', [gridpos, datapos, plot, cursor]);
- }
- };
-
- $.jqplot.preInitHooks.push($.jqplot.Cursor.init);
- $.jqplot.postDrawHooks.push($.jqplot.Cursor.postDraw);
-
- function updateTooltip(gridpos, datapos, plot) {
- var c = plot.plugins.cursor;
- var s = '';
- var addbr = false;
- if (c.showTooltipGridPosition) {
- s = gridpos.x+', '+gridpos.y;
- addbr = true;
- }
- if (c.showTooltipUnitPosition) {
- var g;
- for (var i=0; i<c.tooltipAxisGroups.length; i++) {
- g = c.tooltipAxisGroups[i];
- if (addbr) {
- s += '<br />';
- }
- if (c.useAxesFormatters) {
- for (var j=0; j<g.length; j++) {
- if (j) {
- s += ', ';
- }
- var af = plot.axes[g[j]]._ticks[0].formatter;
- var afstr = plot.axes[g[j]]._ticks[0].formatString;
- s += af(afstr, datapos[g[j]]);
- }
- }
- else {
- s += $.jqplot.sprintf(c.tooltipFormatString, datapos[g[0]], datapos[g[1]]);
- }
- addbr = true;
- }
- }
-
- if (c.showTooltipDataPosition) {
- var series = plot.series;
- var ret = getIntersectingPoints(plot, gridpos.x, gridpos.y);
- var addbr = false;
-
- for (var i = 0; i< series.length; i++) {
- if (series[i].show) {
- var idx = series[i].index;
- var label = series[i].label.toString();
- var cellid = $.inArray(idx, ret.indices);
- var sx = undefined;
- var sy = undefined;
- if (cellid != -1) {
- var data = ret.data[cellid].data;
- if (c.useAxesFormatters) {
- var xf = series[i]._xaxis._ticks[0].formatter;
- var yf = series[i]._yaxis._ticks[0].formatter;
- var xfstr = series[i]._xaxis._ticks[0].formatString;
- var yfstr = series[i]._yaxis._ticks[0].formatString;
- sx = xf(xfstr, data[0]);
- sy = yf(yfstr, data[1]);
- }
- else {
- sx = data[0];
- sy = data[1];
- }
- if (addbr) {
- s += '<br />';
- }
- s += $.jqplot.sprintf(c.tooltipFormatString, label, sx, sy);
- addbr = true;
- }
- }
- }
-
- }
- c._tooltipElem.html(s);
- }
-
- function moveLine(gridpos, plot) {
- var c = plot.plugins.cursor;
- var ctx = c.cursorCanvas._ctx;
- ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
- if (c.showVerticalLine) {
- c.shapeRenderer.draw(ctx, [[gridpos.x, 0], [gridpos.x, ctx.canvas.height]]);
- }
- if (c.showHorizontalLine) {
- c.shapeRenderer.draw(ctx, [[0, gridpos.y], [ctx.canvas.width, gridpos.y]]);
- }
- var ret = getIntersectingPoints(plot, gridpos.x, gridpos.y);
- if (c.showCursorLegend) {
- var cells = $(plot.targetId + ' td.jqplot-cursor-legend-label');
- for (var i=0; i<cells.length; i++) {
- var idx = $(cells[i]).data('seriesIndex');
- var series = plot.series[idx];
- var label = series.label.toString();
- var cellid = $.inArray(idx, ret.indices);
- var sx = undefined;
- var sy = undefined;
- if (cellid != -1) {
- var data = ret.data[cellid].data;
- if (c.useAxesFormatters) {
- var xf = series._xaxis._ticks[0].formatter;
- var yf = series._yaxis._ticks[0].formatter;
- var xfstr = series._xaxis._ticks[0].formatString;
- var yfstr = series._yaxis._ticks[0].formatString;
- sx = xf(xfstr, data[0]);
- sy = yf(yfstr, data[1]);
- }
- else {
- sx = data[0];
- sy = data[1];
- }
- }
- if (plot.legend.escapeHtml) {
- $(cells[i]).text($.jqplot.sprintf(c.cursorLegendFormatString, label, sx, sy));
- }
- else {
- $(cells[i]).html($.jqplot.sprintf(c.cursorLegendFormatString, label, sx, sy));
- }
- }
- }
- ctx = null;
- }
-
- function getIntersectingPoints(plot, x, y) {
- var ret = {indices:[], data:[]};
- var s, i, d0, d, j, r, p;
- var threshold;
- var c = plot.plugins.cursor;
- for (var i=0; i<plot.series.length; i++) {
- s = plot.series[i];
- r = s.renderer;
- if (s.show) {
- threshold = c.intersectionThreshold;
- if (s.showMarker) {
- threshold += s.markerRenderer.size/2;
- }
- for (var j=0; j<s.gridData.length; j++) {
- p = s.gridData[j];
- // check vertical line
- if (c.showVerticalLine) {
- if (Math.abs(x-p[0]) <= threshold) {
- ret.indices.push(i);
- ret.data.push({seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]});
- }
- }
- }
- }
- }
- return ret;
- }
-
- function moveTooltip(gridpos, plot) {
- var c = plot.plugins.cursor;
- var elem = c._tooltipElem;
- switch (c.tooltipLocation) {
- case 'nw':
- var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - c.tooltipOffset;
- var y = gridpos.y + plot._gridPadding.top - c.tooltipOffset - elem.outerHeight(true);
- break;
- case 'n':
- var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2;
- var y = gridpos.y + plot._gridPadding.top - c.tooltipOffset - elem.outerHeight(true);
- break;
- case 'ne':
- var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset;
- var y = gridpos.y + plot._gridPadding.top - c.tooltipOffset - elem.outerHeight(true);
- break;
- case 'e':
- var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset;
- var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2;
- break;
- case 'se':
- var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset;
- var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset;
- break;
- case 's':
- var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2;
- var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset;
- break;
- case 'sw':
- var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - c.tooltipOffset;
- var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset;
- break;
- case 'w':
- var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - c.tooltipOffset;
- var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2;
- break;
- default:
- var x = gridpos.x + plot._gridPadding.left + c.tooltipOffset;
- var y = gridpos.y + plot._gridPadding.top + c.tooltipOffset;
- break;
- }
-
- elem.css('left', x);
- elem.css('top', y);
- elem = null;
- }
-
- function positionTooltip(plot) {
- // fake a grid for positioning
- var grid = plot._gridPadding;
- var c = plot.plugins.cursor;
- var elem = c._tooltipElem;
- switch (c.tooltipLocation) {
- case 'nw':
- var a = grid.left + c.tooltipOffset;
- var b = grid.top + c.tooltipOffset;
- elem.css('left', a);
- elem.css('top', b);
- break;
- case 'n':
- var a = (grid.left + (plot._plotDimensions.width - grid.right))/2 - elem.outerWidth(true)/2;
- var b = grid.top + c.tooltipOffset;
- elem.css('left', a);
- elem.css('top', b);
- break;
- case 'ne':
- var a = grid.right + c.tooltipOffset;
- var b = grid.top + c.tooltipOffset;
- elem.css({right:a, top:b});
- break;
- case 'e':
- var a = grid.right + c.tooltipOffset;
- var b = (grid.top + (plot._plotDimensions.height - grid.bottom))/2 - elem.outerHeight(true)/2;
- elem.css({right:a, top:b});
- break;
- case 'se':
- var a = grid.right + c.tooltipOffset;
- var b = grid.bottom + c.tooltipOffset;
- elem.css({right:a, bottom:b});
- break;
- case 's':
- var a = (grid.left + (plot._plotDimensions.width - grid.right))/2 - elem.outerWidth(true)/2;
- var b = grid.bottom + c.tooltipOffset;
- elem.css({left:a, bottom:b});
- break;
- case 'sw':
- var a = grid.left + c.tooltipOffset;
- var b = grid.bottom + c.tooltipOffset;
- elem.css({left:a, bottom:b});
- break;
- case 'w':
- var a = grid.left + c.tooltipOffset;
- var b = (grid.top + (plot._plotDimensions.height - grid.bottom))/2 - elem.outerHeight(true)/2;
- elem.css({left:a, top:b});
- break;
- default: // same as 'se'
- var a = grid.right - c.tooltipOffset;
- var b = grid.bottom + c.tooltipOffset;
- elem.css({right:a, bottom:b});
- break;
- }
- elem = null;
- }
-
- function handleClick (ev, gridpos, datapos, neighbor, plot) {
- ev.preventDefault();
- ev.stopImmediatePropagation();
- var c = plot.plugins.cursor;
- if (c.clickReset) {
- c.resetZoom(plot, c);
- }
- var sel = window.getSelection;
- if (document.selection && document.selection.empty)
- {
- document.selection.empty();
- }
- else if (sel && !sel().isCollapsed) {
- sel().collapse();
- }
- return false;
- }
-
- function handleDblClick (ev, gridpos, datapos, neighbor, plot) {
- ev.preventDefault();
- ev.stopImmediatePropagation();
- var c = plot.plugins.cursor;
- if (c.dblClickReset) {
- c.resetZoom(plot, c);
- }
- var sel = window.getSelection;
- if (document.selection && document.selection.empty)
- {
- document.selection.empty();
- }
- else if (sel && !sel().isCollapsed) {
- sel().collapse();
- }
- return false;
- }
-
- function handleMouseLeave(ev, gridpos, datapos, neighbor, plot) {
- var c = plot.plugins.cursor;
- c.onGrid = false;
- if (c.show) {
- $(ev.target).css('cursor', c.previousCursor);
- if (c.showTooltip && !(c._zoom.zooming && c.showTooltipOutsideZoom && !c.constrainOutsideZoom)) {
- c._tooltipElem.empty();
- c._tooltipElem.hide();
- }
- if (c.zoom) {
- c._zoom.gridpos = gridpos;
- c._zoom.datapos = datapos;
- }
- if (c.showVerticalLine || c.showHorizontalLine) {
- var ctx = c.cursorCanvas._ctx;
- ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
- ctx = null;
- }
- if (c.showCursorLegend) {
- var cells = $(plot.targetId + ' td.jqplot-cursor-legend-label');
- for (var i=0; i<cells.length; i++) {
- var idx = $(cells[i]).data('seriesIndex');
- var series = plot.series[idx];
- var label = series.label.toString();
- if (plot.legend.escapeHtml) {
- $(cells[i]).text($.jqplot.sprintf(c.cursorLegendFormatString, label, undefined, undefined));
- }
- else {
- $(cells[i]).html($.jqplot.sprintf(c.cursorLegendFormatString, label, undefined, undefined));
- }
-
- }
- }
- }
- }
-
- function handleMouseEnter(ev, gridpos, datapos, neighbor, plot) {
- var c = plot.plugins.cursor;
- c.onGrid = true;
- if (c.show) {
- c.previousCursor = ev.target.style.cursor;
- ev.target.style.cursor = c.style;
- if (c.showTooltip) {
- updateTooltip(gridpos, datapos, plot);
- if (c.followMouse) {
- moveTooltip(gridpos, plot);
- }
- else {
- positionTooltip(plot);
- }
- c._tooltipElem.show();
- }
- if (c.showVerticalLine || c.showHorizontalLine) {
- moveLine(gridpos, plot);
- }
- }
-
- }
-
- function handleMouseMove(ev, gridpos, datapos, neighbor, plot) {
- var c = plot.plugins.cursor;
- if (c.show) {
- if (c.showTooltip) {
- updateTooltip(gridpos, datapos, plot);
- if (c.followMouse) {
- moveTooltip(gridpos, plot);
- }
- }
- if (c.showVerticalLine || c.showHorizontalLine) {
- moveLine(gridpos, plot);
- }
- }
- }
-
- function getEventPosition(ev) {
- var plot = ev.data.plot;
- var go = plot.eventCanvas._elem.offset();
- var gridPos = {x:ev.pageX - go.left, y:ev.pageY - go.top};
- //////
- // TO DO: handle yMidAxis
- //////
- var dataPos = {xaxis:null, yaxis:null, x2axis:null, y2axis:null, y3axis:null, y4axis:null, y5axis:null, y6axis:null, y7axis:null, y8axis:null, y9axis:null, yMidAxis:null};
- var an = ['xaxis', 'yaxis', 'x2axis', 'y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis', 'yMidAxis'];
- var ax = plot.axes;
- var n, axis;
- for (n=11; n>0; n--) {
- axis = an[n-1];
- if (ax[axis].show) {
- dataPos[axis] = ax[axis].series_p2u(gridPos[axis.charAt(0)]);
- }
- }
-
- return {offsets:go, gridPos:gridPos, dataPos:dataPos};
- }
-
- function handleZoomMove(ev) {
- var plot = ev.data.plot;
- var c = plot.plugins.cursor;
- // don't do anything if not on grid.
- if (c.show && c.zoom && c._zoom.started && !c.zoomTarget) {
- ev.preventDefault();
- var ctx = c.zoomCanvas._ctx;
- var positions = getEventPosition(ev);
- var gridpos = positions.gridPos;
- var datapos = positions.dataPos;
- c._zoom.gridpos = gridpos;
- c._zoom.datapos = datapos;
- c._zoom.zooming = true;
- var xpos = gridpos.x;
- var ypos = gridpos.y;
- var height = ctx.canvas.height;
- var width = ctx.canvas.width;
- if (c.showTooltip && !c.onGrid && c.showTooltipOutsideZoom) {
- updateTooltip(gridpos, datapos, plot);
- if (c.followMouse) {
- moveTooltip(gridpos, plot);
- }
- }
- if (c.constrainZoomTo == 'x') {
- c._zoom.end = [xpos, height];
- }
- else if (c.constrainZoomTo == 'y') {
- c._zoom.end = [width, ypos];
- }
- else {
- c._zoom.end = [xpos, ypos];
- }
- var sel = window.getSelection;
- if (document.selection && document.selection.empty)
- {
- document.selection.empty();
- }
- else if (sel && !sel().isCollapsed) {
- sel().collapse();
- }
- drawZoomBox.call(c);
- ctx = null;
- }
- }
-
- function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
- var c = plot.plugins.cursor;
- if(plot.plugins.mobile){
- $(document).one('vmouseup.jqplot_cursor', {plot:plot}, handleMouseUp);
- } else {
- $(document).one('mouseup.jqplot_cursor', {plot:plot}, handleMouseUp);
- }
- var axes = plot.axes;
- if (document.onselectstart != undefined) {
- c._oldHandlers.onselectstart = document.onselectstart;
- document.onselectstart = function () { return false; };
- }
- if (document.ondrag != undefined) {
- c._oldHandlers.ondrag = document.ondrag;
- document.ondrag = function () { return false; };
- }
- if (document.onmousedown != undefined) {
- c._oldHandlers.onmousedown = document.onmousedown;
- document.onmousedown = function () { return false; };
- }
- if (c.zoom) {
- if (!c.zoomProxy) {
- var ctx = c.zoomCanvas._ctx;
- ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
- ctx = null;
- }
- if (c.constrainZoomTo == 'x') {
- c._zoom.start = [gridpos.x, 0];
- }
- else if (c.constrainZoomTo == 'y') {
- c._zoom.start = [0, gridpos.y];
- }
- else {
- c._zoom.start = [gridpos.x, gridpos.y];
- }
- c._zoom.started = true;
- for (var ax in datapos) {
- // get zoom starting position.
- c._zoom.axes.start[ax] = datapos[ax];
- }
- if(plot.plugins.mobile){
- $(document).bind('vmousemove.jqplotCursor', {plot:plot}, handleZoomMove);
- } else {
- $(document).bind('mousemove.jqplotCursor', {plot:plot}, handleZoomMove);
- }
-
- }
- }
-
- function handleMouseUp(ev) {
- var plot = ev.data.plot;
- var c = plot.plugins.cursor;
- if (c.zoom && c._zoom.zooming && !c.zoomTarget) {
- var xpos = c._zoom.gridpos.x;
- var ypos = c._zoom.gridpos.y;
- var datapos = c._zoom.datapos;
- var height = c.zoomCanvas._ctx.canvas.height;
- var width = c.zoomCanvas._ctx.canvas.width;
- var axes = plot.axes;
-
- if (c.constrainOutsideZoom && !c.onGrid) {
- if (xpos < 0) { xpos = 0; }
- else if (xpos > width) { xpos = width; }
- if (ypos < 0) { ypos = 0; }
- else if (ypos > height) { ypos = height; }
-
- for (var axis in datapos) {
- if (datapos[axis]) {
- if (axis.charAt(0) == 'x') {
- datapos[axis] = axes[axis].series_p2u(xpos);
- }
- else {
- datapos[axis] = axes[axis].series_p2u(ypos);
- }
- }
- }
- }
-
- if (c.constrainZoomTo == 'x') {
- ypos = height;
- }
- else if (c.constrainZoomTo == 'y') {
- xpos = width;
- }
- c._zoom.end = [xpos, ypos];
- c._zoom.gridpos = {x:xpos, y:ypos};
-
- c.doZoom(c._zoom.gridpos, datapos, plot, c);
- }
- c._zoom.started = false;
- c._zoom.zooming = false;
-
- $(document).unbind('mousemove.jqplotCursor', handleZoomMove);
-
- if (document.onselectstart != undefined && c._oldHandlers.onselectstart != null){
- document.onselectstart = c._oldHandlers.onselectstart;
- c._oldHandlers.onselectstart = null;
- }
- if (document.ondrag != undefined && c._oldHandlers.ondrag != null){
- document.ondrag = c._oldHandlers.ondrag;
- c._oldHandlers.ondrag = null;
- }
- if (document.onmousedown != undefined && c._oldHandlers.onmousedown != null){
- document.onmousedown = c._oldHandlers.onmousedown;
- c._oldHandlers.onmousedown = null;
- }
-
- }
-
- function drawZoomBox() {
- var start = this._zoom.start;
- var end = this._zoom.end;
- var ctx = this.zoomCanvas._ctx;
- var l, t, h, w;
- if (end[0] > start[0]) {
- l = start[0];
- w = end[0] - start[0];
- }
- else {
- l = end[0];
- w = start[0] - end[0];
- }
- if (end[1] > start[1]) {
- t = start[1];
- h = end[1] - start[1];
- }
- else {
- t = end[1];
- h = start[1] - end[1];
- }
- ctx.fillStyle = 'rgba(0,0,0,0.2)';
- ctx.strokeStyle = '#999999';
- ctx.lineWidth = 1.0;
- ctx.clearRect(0,0,ctx.canvas.width, ctx.canvas.height);
- ctx.fillRect(0,0,ctx.canvas.width, ctx.canvas.height);
- ctx.clearRect(l, t, w, h);
- // IE won't show transparent fill rect, so stroke a rect also.
- ctx.strokeRect(l,t,w,h);
- ctx = null;
- }
-
- $.jqplot.CursorLegendRenderer = function(options) {
- $.jqplot.TableLegendRenderer.call(this, options);
- this.formatString = '%s';
- };
-
- $.jqplot.CursorLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
- $.jqplot.CursorLegendRenderer.prototype.constructor = $.jqplot.CursorLegendRenderer;
-
- // called in context of a Legend
- $.jqplot.CursorLegendRenderer.prototype.draw = function() {
- if (this._elem) {
- this._elem.emptyForce();
- this._elem = null;
- }
- if (this.show) {
- var series = this._series, s;
- // make a table. one line label per row.
- var elem = document.createElement('div');
- this._elem = $(elem);
- elem = null;
- this._elem.addClass('jqplot-legend jqplot-cursor-legend');
- this._elem.css('position', 'absolute');
-
- var pad = false;
- for (var i = 0; i< series.length; i++) {
- s = series[i];
- if (s.show && s.showLabel) {
- var lt = $.jqplot.sprintf(this.formatString, s.label.toString());
- if (lt) {
- var color = s.color;
- if (s._stack && !s.fill) {
- color = '';
- }
- addrow.call(this, lt, color, pad, i);
- pad = true;
- }
- // let plugins add more rows to legend. Used by trend line plugin.
- for (var j=0; j<$.jqplot.addLegendRowHooks.length; j++) {
- var item = $.jqplot.addLegendRowHooks[j].call(this, s);
- if (item) {
- addrow.call(this, item.label, item.color, pad);
- pad = true;
- }
- }
- }
- }
- series = s = null;
- delete series;
- delete s;
- }
-
- function addrow(label, color, pad, idx) {
- var rs = (pad) ? this.rowSpacing : '0';
- var tr = $('<tr class="jqplot-legend jqplot-cursor-legend"></tr>').appendTo(this._elem);
- tr.data('seriesIndex', idx);
- $('<td class="jqplot-legend jqplot-cursor-legend-swatch" style="padding-top:'+rs+';">'+
- '<div style="border:1px solid #cccccc;padding:0.2em;">'+
- '<div class="jqplot-cursor-legend-swatch" style="background-color:'+color+';"></div>'+
- '</div></td>').appendTo(tr);
- var td = $('<td class="jqplot-legend jqplot-cursor-legend-label" style="vertical-align:middle;padding-top:'+rs+';"></td>');
- td.appendTo(tr);
- td.data('seriesIndex', idx);
- if (this.escapeHtml) {
- td.text(label);
- }
- else {
- td.html(label);
- }
- tr = null;
- td = null;
- }
- return this._elem;
- };
-
-})(jQuery);
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.min.js
deleted file mode 100644
index b782ece4..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.cursor.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(j){j.jqplot.Cursor=function(q){this.style="crosshair";this.previousCursor="auto";this.show=j.jqplot.config.enablePlugins;this.showTooltip=true;this.followMouse=false;this.tooltipLocation="se";this.tooltipOffset=6;this.showTooltipGridPosition=false;this.showTooltipUnitPosition=true;this.showTooltipDataPosition=false;this.tooltipFormatString="%.4P, %.4P";this.useAxesFormatters=true;this.tooltipAxisGroups=[];this.zoom=false;this.zoomProxy=false;this.zoomTarget=false;this.looseZoom=true;this.clickReset=false;this.dblClickReset=true;this.showVerticalLine=false;this.showHorizontalLine=false;this.constrainZoomTo="none";this.shapeRenderer=new j.jqplot.ShapeRenderer();this._zoom={start:[],end:[],started:false,zooming:false,isZoomed:false,axes:{start:{},end:{}},gridpos:{},datapos:{}};this._tooltipElem;this.zoomCanvas;this.cursorCanvas;this.intersectionThreshold=2;this.showCursorLegend=false;this.cursorLegendFormatString=j.jqplot.Cursor.cursorLegendFormatString;this._oldHandlers={onselectstart:null,ondrag:null,onmousedown:null};this.constrainOutsideZoom=true;this.showTooltipOutsideZoom=false;this.onGrid=false;j.extend(true,this,q)};j.jqplot.Cursor.cursorLegendFormatString="%s x:%s, y:%s";j.jqplot.Cursor.init=function(t,s,r){var q=r||{};this.plugins.cursor=new j.jqplot.Cursor(q.cursor);var u=this.plugins.cursor;if(u.show){j.jqplot.eventListenerHooks.push(["jqplotMouseEnter",b]);j.jqplot.eventListenerHooks.push(["jqplotMouseLeave",f]);j.jqplot.eventListenerHooks.push(["jqplotMouseMove",i]);if(u.showCursorLegend){r.legend=r.legend||{};r.legend.renderer=j.jqplot.CursorLegendRenderer;r.legend.formatString=this.plugins.cursor.cursorLegendFormatString;r.legend.show=true}if(u.zoom){j.jqplot.eventListenerHooks.push(["jqplotMouseDown",a]);if(u.clickReset){j.jqplot.eventListenerHooks.push(["jqplotClick",k])}if(u.dblClickReset){j.jqplot.eventListenerHooks.push(["jqplotDblClick",c])}}this.resetZoom=function(){var x=this.axes;if(!u.zoomProxy){for(var w in x){x[w].reset();x[w]._ticks=[];if(u._zoom.axes[w]!==undefined){x[w]._autoFormatString=u._zoom.axes[w].tickFormatString}}this.redraw()}else{var v=this.plugins.cursor.zoomCanvas._ctx;v.clearRect(0,0,v.canvas.width,v.canvas.height);v=null}this.plugins.cursor._zoom.isZoomed=false;this.target.trigger("jqplotResetZoom",[this,this.plugins.cursor])};if(u.showTooltipDataPosition){u.showTooltipUnitPosition=false;u.showTooltipGridPosition=false;if(q.cursor.tooltipFormatString==undefined){u.tooltipFormatString=j.jqplot.Cursor.cursorLegendFormatString}}}};j.jqplot.Cursor.postDraw=function(){var x=this.plugins.cursor;if(x.zoomCanvas){x.zoomCanvas.resetCanvas();x.zoomCanvas=null}if(x.cursorCanvas){x.cursorCanvas.resetCanvas();x.cursorCanvas=null}if(x._tooltipElem){x._tooltipElem.emptyForce();x._tooltipElem=null}if(x.zoom){x.zoomCanvas=new j.jqplot.GenericCanvas();this.eventCanvas._elem.before(x.zoomCanvas.createElement(this._gridPadding,"jqplot-zoom-canvas",this._plotDimensions,this));x.zoomCanvas.setContext()}var v=document.createElement("div");x._tooltipElem=j(v);v=null;x._tooltipElem.addClass("jqplot-cursor-tooltip");x._tooltipElem.css({position:"absolute",display:"none"});if(x.zoomCanvas){x.zoomCanvas._elem.before(x._tooltipElem)}else{this.eventCanvas._elem.before(x._tooltipElem)}if(x.showVerticalLine||x.showHorizontalLine){x.cursorCanvas=new j.jqplot.GenericCanvas();this.eventCanvas._elem.before(x.cursorCanvas.createElement(this._gridPadding,"jqplot-cursor-canvas",this._plotDimensions,this));x.cursorCanvas.setContext()}if(x.showTooltipUnitPosition){if(x.tooltipAxisGroups.length===0){var t=this.series;var u;var q=[];for(var r=0;r<t.length;r++){u=t[r];var w=u.xaxis+","+u.yaxis;if(j.inArray(w,q)==-1){q.push(w)}}for(var r=0;r<q.length;r++){x.tooltipAxisGroups.push(q[r].split(","))}}}};j.jqplot.Cursor.zoomProxy=function(v,r){var q=v.plugins.cursor;var u=r.plugins.cursor;q.zoomTarget=true;q.zoom=true;q.style="auto";q.dblClickReset=false;u.zoom=true;u.zoomProxy=true;r.target.bind("jqplotZoom",t);r.target.bind("jqplotResetZoom",s);function t(x,w,z,y,A){q.doZoom(w,z,v,A)}function s(w,x,y){v.resetZoom()}};j.jqplot.Cursor.prototype.resetZoom=function(u,v){var t=u.axes;var s=v._zoom.axes;if(!u.plugins.cursor.zoomProxy&&v._zoom.isZoomed){for(var r in t){t[r].reset();t[r]._ticks=[];t[r]._autoFormatString=s[r].tickFormatString}u.redraw();v._zoom.isZoomed=false}else{var q=v.zoomCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);q=null}u.target.trigger("jqplotResetZoom",[u,v])};j.jqplot.Cursor.resetZoom=function(q){q.resetZoom()};j.jqplot.Cursor.prototype.doZoom=function(G,t,C,u){var I=u;var F=C.axes;var r=I._zoom.axes;var w=r.start;var s=r.end;var B,E,z,D,v,x,q,H,J;var A=C.plugins.cursor.zoomCanvas._ctx;if((I.constrainZoomTo=="none"&&Math.abs(G.x-I._zoom.start[0])>6&&Math.abs(G.y-I._zoom.start[1])>6)||(I.constrainZoomTo=="x"&&Math.abs(G.x-I._zoom.start[0])>6)||(I.constrainZoomTo=="y"&&Math.abs(G.y-I._zoom.start[1])>6)){if(!C.plugins.cursor.zoomProxy){for(var y in t){if(I._zoom.axes[y]==undefined){I._zoom.axes[y]={};I._zoom.axes[y].numberTicks=F[y].numberTicks;I._zoom.axes[y].tickInterval=F[y].tickInterval;I._zoom.axes[y].daTickInterval=F[y].daTickInterval;I._zoom.axes[y].min=F[y].min;I._zoom.axes[y].max=F[y].max;I._zoom.axes[y].tickFormatString=(F[y].tickOptions!=null)?F[y].tickOptions.formatString:""}if((I.constrainZoomTo=="none")||(I.constrainZoomTo=="x"&&y.charAt(0)=="x")||(I.constrainZoomTo=="y"&&y.charAt(0)=="y")){z=t[y];if(z!=null){if(z>w[y]){v=w[y];x=z}else{D=w[y]-z;v=z;x=w[y]}q=F[y];H=null;if(q.alignTicks){if(q.name==="x2axis"&&C.axes.xaxis.show){H=C.axes.xaxis.numberTicks}else{if(q.name.charAt(0)==="y"&&q.name!=="yaxis"&&q.name!=="yMidAxis"&&C.axes.yaxis.show){H=C.axes.yaxis.numberTicks}}}if(this.looseZoom&&(F[y].renderer.constructor===j.jqplot.LinearAxisRenderer||F[y].renderer.constructor===j.jqplot.LogAxisRenderer)){J=j.jqplot.LinearTickGenerator(v,x,q._scalefact,H);if(F[y].tickInset&&J[0]<F[y].min+F[y].tickInset*F[y].tickInterval){J[0]+=J[4];J[2]-=1}if(F[y].tickInset&&J[1]>F[y].max-F[y].tickInset*F[y].tickInterval){J[1]-=J[4];J[2]-=1}if(F[y].renderer.constructor===j.jqplot.LogAxisRenderer&&J[0]<F[y].min){J[0]+=J[4];J[2]-=1}F[y].min=J[0];F[y].max=J[1];F[y]._autoFormatString=J[3];F[y].numberTicks=J[2];F[y].tickInterval=J[4];F[y].daTickInterval=[J[4]/1000,"seconds"]}else{F[y].min=v;F[y].max=x;F[y].tickInterval=null;F[y].numberTicks=null;F[y].daTickInterval=null}F[y]._ticks=[]}}}A.clearRect(0,0,A.canvas.width,A.canvas.height);C.redraw();I._zoom.isZoomed=true;A=null}C.target.trigger("jqplotZoom",[G,t,C,u])}};j.jqplot.preInitHooks.push(j.jqplot.Cursor.init);j.jqplot.postDrawHooks.push(j.jqplot.Cursor.postDraw);function e(G,r,C){var J=C.plugins.cursor;var w="";var N=false;if(J.showTooltipGridPosition){w=G.x+", "+G.y;N=true}if(J.showTooltipUnitPosition){var F;for(var E=0;E<J.tooltipAxisGroups.length;E++){F=J.tooltipAxisGroups[E];if(N){w+="<br />"}if(J.useAxesFormatters){for(var D=0;D<F.length;D++){if(D){w+=", "}var H=C.axes[F[D]]._ticks[0].formatter;var B=C.axes[F[D]]._ticks[0].formatString;w+=H(B,r[F[D]])}}else{w+=j.jqplot.sprintf(J.tooltipFormatString,r[F[0]],r[F[1]])}N=true}}if(J.showTooltipDataPosition){var u=C.series;var M=d(C,G.x,G.y);var N=false;for(var E=0;E<u.length;E++){if(u[E].show){var y=u[E].index;var t=u[E].label.toString();var I=j.inArray(y,M.indices);var z=undefined;var x=undefined;if(I!=-1){var L=M.data[I].data;if(J.useAxesFormatters){var A=u[E]._xaxis._ticks[0].formatter;var q=u[E]._yaxis._ticks[0].formatter;var K=u[E]._xaxis._ticks[0].formatString;var v=u[E]._yaxis._ticks[0].formatString;z=A(K,L[0]);x=q(v,L[1])}else{z=L[0];x=L[1]}if(N){w+="<br />"}w+=j.jqplot.sprintf(J.tooltipFormatString,t,z,x);N=true}}}}J._tooltipElem.html(w)}function g(C,A){var E=A.plugins.cursor;var z=E.cursorCanvas._ctx;z.clearRect(0,0,z.canvas.width,z.canvas.height);if(E.showVerticalLine){E.shapeRenderer.draw(z,[[C.x,0],[C.x,z.canvas.height]])}if(E.showHorizontalLine){E.shapeRenderer.draw(z,[[0,C.y],[z.canvas.width,C.y]])}var G=d(A,C.x,C.y);if(E.showCursorLegend){var r=j(A.targetId+" td.jqplot-cursor-legend-label");for(var B=0;B<r.length;B++){var v=j(r[B]).data("seriesIndex");var t=A.series[v];var s=t.label.toString();var D=j.inArray(v,G.indices);var x=undefined;var w=undefined;if(D!=-1){var H=G.data[D].data;if(E.useAxesFormatters){var y=t._xaxis._ticks[0].formatter;var q=t._yaxis._ticks[0].formatter;var F=t._xaxis._ticks[0].formatString;var u=t._yaxis._ticks[0].formatString;x=y(F,H[0]);w=q(u,H[1])}else{x=H[0];w=H[1]}}if(A.legend.escapeHtml){j(r[B]).text(j.jqplot.sprintf(E.cursorLegendFormatString,s,x,w))}else{j(r[B]).html(j.jqplot.sprintf(E.cursorLegendFormatString,s,x,w))}}}z=null}function d(A,F,E){var B={indices:[],data:[]};var G,w,u,C,v,q,t;var z;var D=A.plugins.cursor;for(var w=0;w<A.series.length;w++){G=A.series[w];q=G.renderer;if(G.show){z=D.intersectionThreshold;if(G.showMarker){z+=G.markerRenderer.size/2}for(var v=0;v<G.gridData.length;v++){t=G.gridData[v];if(D.showVerticalLine){if(Math.abs(F-t[0])<=z){B.indices.push(w);B.data.push({seriesIndex:w,pointIndex:v,gridData:t,data:G.data[v]})}}}}}return B}function n(r,t){var v=t.plugins.cursor;var s=v._tooltipElem;switch(v.tooltipLocation){case"nw":var q=r.x+t._gridPadding.left-s.outerWidth(true)-v.tooltipOffset;var u=r.y+t._gridPadding.top-v.tooltipOffset-s.outerHeight(true);break;case"n":var q=r.x+t._gridPadding.left-s.outerWidth(true)/2;var u=r.y+t._gridPadding.top-v.tooltipOffset-s.outerHeight(true);break;case"ne":var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top-v.tooltipOffset-s.outerHeight(true);break;case"e":var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top-s.outerHeight(true)/2;break;case"se":var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top+v.tooltipOffset;break;case"s":var q=r.x+t._gridPadding.left-s.outerWidth(true)/2;var u=r.y+t._gridPadding.top+v.tooltipOffset;break;case"sw":var q=r.x+t._gridPadding.left-s.outerWidth(true)-v.tooltipOffset;var u=r.y+t._gridPadding.top+v.tooltipOffset;break;case"w":var q=r.x+t._gridPadding.left-s.outerWidth(true)-v.tooltipOffset;var u=r.y+t._gridPadding.top-s.outerHeight(true)/2;break;default:var q=r.x+t._gridPadding.left+v.tooltipOffset;var u=r.y+t._gridPadding.top+v.tooltipOffset;break}s.css("left",q);s.css("top",u);s=null}function m(u){var s=u._gridPadding;var v=u.plugins.cursor;var t=v._tooltipElem;switch(v.tooltipLocation){case"nw":var r=s.left+v.tooltipOffset;var q=s.top+v.tooltipOffset;t.css("left",r);t.css("top",q);break;case"n":var r=(s.left+(u._plotDimensions.width-s.right))/2-t.outerWidth(true)/2;var q=s.top+v.tooltipOffset;t.css("left",r);t.css("top",q);break;case"ne":var r=s.right+v.tooltipOffset;var q=s.top+v.tooltipOffset;t.css({right:r,top:q});break;case"e":var r=s.right+v.tooltipOffset;var q=(s.top+(u._plotDimensions.height-s.bottom))/2-t.outerHeight(true)/2;t.css({right:r,top:q});break;case"se":var r=s.right+v.tooltipOffset;var q=s.bottom+v.tooltipOffset;t.css({right:r,bottom:q});break;case"s":var r=(s.left+(u._plotDimensions.width-s.right))/2-t.outerWidth(true)/2;var q=s.bottom+v.tooltipOffset;t.css({left:r,bottom:q});break;case"sw":var r=s.left+v.tooltipOffset;var q=s.bottom+v.tooltipOffset;t.css({left:r,bottom:q});break;case"w":var r=s.left+v.tooltipOffset;var q=(s.top+(u._plotDimensions.height-s.bottom))/2-t.outerHeight(true)/2;t.css({left:r,top:q});break;default:var r=s.right-v.tooltipOffset;var q=s.bottom+v.tooltipOffset;t.css({right:r,bottom:q});break}t=null}function k(r,q,v,u,t){r.preventDefault();r.stopImmediatePropagation();var w=t.plugins.cursor;if(w.clickReset){w.resetZoom(t,w)}var s=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(s&&!s().isCollapsed){s().collapse()}}return false}function c(r,q,v,u,t){r.preventDefault();r.stopImmediatePropagation();var w=t.plugins.cursor;if(w.dblClickReset){w.resetZoom(t,w)}var s=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(s&&!s().isCollapsed){s().collapse()}}return false}function f(w,t,q,z,u){var v=u.plugins.cursor;v.onGrid=false;if(v.show){j(w.target).css("cursor",v.previousCursor);if(v.showTooltip&&!(v._zoom.zooming&&v.showTooltipOutsideZoom&&!v.constrainOutsideZoom)){v._tooltipElem.empty();v._tooltipElem.hide()}if(v.zoom){v._zoom.gridpos=t;v._zoom.datapos=q}if(v.showVerticalLine||v.showHorizontalLine){var B=v.cursorCanvas._ctx;B.clearRect(0,0,B.canvas.width,B.canvas.height);B=null}if(v.showCursorLegend){var A=j(u.targetId+" td.jqplot-cursor-legend-label");for(var s=0;s<A.length;s++){var y=j(A[s]).data("seriesIndex");var r=u.series[y];var x=r.label.toString();if(u.legend.escapeHtml){j(A[s]).text(j.jqplot.sprintf(v.cursorLegendFormatString,x,undefined,undefined))}else{j(A[s]).html(j.jqplot.sprintf(v.cursorLegendFormatString,x,undefined,undefined))}}}}}function b(r,q,u,t,s){var v=s.plugins.cursor;v.onGrid=true;if(v.show){v.previousCursor=r.target.style.cursor;r.target.style.cursor=v.style;if(v.showTooltip){e(q,u,s);if(v.followMouse){n(q,s)}else{m(s)}v._tooltipElem.show()}if(v.showVerticalLine||v.showHorizontalLine){g(q,s)}}}function i(r,q,u,t,s){var v=s.plugins.cursor;if(v.show){if(v.showTooltip){e(q,u,s);if(v.followMouse){n(q,s)}}if(v.showVerticalLine||v.showHorizontalLine){g(q,s)}}}function o(y){var x=y.data.plot;var t=x.eventCanvas._elem.offset();var w={x:y.pageX-t.left,y:y.pageY-t.top};var u={xaxis:null,yaxis:null,x2axis:null,y2axis:null,y3axis:null,y4axis:null,y5axis:null,y6axis:null,y7axis:null,y8axis:null,y9axis:null,yMidAxis:null};var v=["xaxis","yaxis","x2axis","y2axis","y3axis","y4axis","y5axis","y6axis","y7axis","y8axis","y9axis","yMidAxis"];var q=x.axes;var r,s;for(r=11;r>0;r--){s=v[r-1];if(q[s].show){u[s]=q[s].series_p2u(w[s.charAt(0)])}}return{offsets:t,gridPos:w,dataPos:u}}function h(z){var x=z.data.plot;var y=x.plugins.cursor;if(y.show&&y.zoom&&y._zoom.started&&!y.zoomTarget){z.preventDefault();var B=y.zoomCanvas._ctx;var v=o(z);var w=v.gridPos;var t=v.dataPos;y._zoom.gridpos=w;y._zoom.datapos=t;y._zoom.zooming=true;var u=w.x;var s=w.y;var A=B.canvas.height;var q=B.canvas.width;if(y.showTooltip&&!y.onGrid&&y.showTooltipOutsideZoom){e(w,t,x);if(y.followMouse){n(w,x)}}if(y.constrainZoomTo=="x"){y._zoom.end=[u,A]}else{if(y.constrainZoomTo=="y"){y._zoom.end=[q,s]}else{y._zoom.end=[u,s]}}var r=window.getSelection;if(document.selection&&document.selection.empty){document.selection.empty()}else{if(r&&!r().isCollapsed){r().collapse()}}l.call(y);B=null}}function a(w,s,r,x,t){var v=t.plugins.cursor;if(t.plugins.mobile){j(document).one("vmouseup.jqplot_cursor",{plot:t},p)}else{j(document).one("mouseup.jqplot_cursor",{plot:t},p)}var u=t.axes;if(document.onselectstart!=undefined){v._oldHandlers.onselectstart=document.onselectstart;document.onselectstart=function(){return false}}if(document.ondrag!=undefined){v._oldHandlers.ondrag=document.ondrag;document.ondrag=function(){return false}}if(document.onmousedown!=undefined){v._oldHandlers.onmousedown=document.onmousedown;document.onmousedown=function(){return false}}if(v.zoom){if(!v.zoomProxy){var y=v.zoomCanvas._ctx;y.clearRect(0,0,y.canvas.width,y.canvas.height);y=null}if(v.constrainZoomTo=="x"){v._zoom.start=[s.x,0]}else{if(v.constrainZoomTo=="y"){v._zoom.start=[0,s.y]}else{v._zoom.start=[s.x,s.y]}}v._zoom.started=true;for(var q in r){v._zoom.axes.start[q]=r[q]}if(t.plugins.mobile){j(document).bind("vmousemove.jqplotCursor",{plot:t},h)}else{j(document).bind("mousemove.jqplotCursor",{plot:t},h)}}}function p(y){var v=y.data.plot;var x=v.plugins.cursor;if(x.zoom&&x._zoom.zooming&&!x.zoomTarget){var u=x._zoom.gridpos.x;var r=x._zoom.gridpos.y;var t=x._zoom.datapos;var z=x.zoomCanvas._ctx.canvas.height;var q=x.zoomCanvas._ctx.canvas.width;var w=v.axes;if(x.constrainOutsideZoom&&!x.onGrid){if(u<0){u=0}else{if(u>q){u=q}}if(r<0){r=0}else{if(r>z){r=z}}for(var s in t){if(t[s]){if(s.charAt(0)=="x"){t[s]=w[s].series_p2u(u)}else{t[s]=w[s].series_p2u(r)}}}}if(x.constrainZoomTo=="x"){r=z}else{if(x.constrainZoomTo=="y"){u=q}}x._zoom.end=[u,r];x._zoom.gridpos={x:u,y:r};x.doZoom(x._zoom.gridpos,t,v,x)}x._zoom.started=false;x._zoom.zooming=false;j(document).unbind("mousemove.jqplotCursor",h);if(document.onselectstart!=undefined&&x._oldHandlers.onselectstart!=null){document.onselectstart=x._oldHandlers.onselectstart;x._oldHandlers.onselectstart=null}if(document.ondrag!=undefined&&x._oldHandlers.ondrag!=null){document.ondrag=x._oldHandlers.ondrag;x._oldHandlers.ondrag=null}if(document.onmousedown!=undefined&&x._oldHandlers.onmousedown!=null){document.onmousedown=x._oldHandlers.onmousedown;x._oldHandlers.onmousedown=null}}function l(){var y=this._zoom.start;var u=this._zoom.end;var s=this.zoomCanvas._ctx;var r,v,x,q;if(u[0]>y[0]){r=y[0];q=u[0]-y[0]}else{r=u[0];q=y[0]-u[0]}if(u[1]>y[1]){v=y[1];x=u[1]-y[1]}else{v=u[1];x=y[1]-u[1]}s.fillStyle="rgba(0,0,0,0.2)";s.strokeStyle="#999999";s.lineWidth=1;s.clearRect(0,0,s.canvas.width,s.canvas.height);s.fillRect(0,0,s.canvas.width,s.canvas.height);s.clearRect(r,v,q,x);s.strokeRect(r,v,q,x);s=null}j.jqplot.CursorLegendRenderer=function(q){j.jqplot.TableLegendRenderer.call(this,q);this.formatString="%s"};j.jqplot.CursorLegendRenderer.prototype=new j.jqplot.TableLegendRenderer();j.jqplot.CursorLegendRenderer.prototype.constructor=j.jqplot.CursorLegendRenderer;j.jqplot.CursorLegendRenderer.prototype.draw=function(){if(this._elem){this._elem.emptyForce();this._elem=null}if(this.show){var w=this._series,A;var r=document.createElement("div");this._elem=j(r);r=null;this._elem.addClass("jqplot-legend jqplot-cursor-legend");this._elem.css("position","absolute");var q=false;for(var x=0;x<w.length;x++){A=w[x];if(A.show&&A.showLabel){var v=j.jqplot.sprintf(this.formatString,A.label.toString());if(v){var t=A.color;if(A._stack&&!A.fill){t=""}z.call(this,v,t,q,x);q=true}for(var u=0;u<j.jqplot.addLegendRowHooks.length;u++){var y=j.jqplot.addLegendRowHooks[u].call(this,A);if(y){z.call(this,y.label,y.color,q);q=true}}}}w=A=null;delete w;delete A}function z(D,C,F,s){var B=(F)?this.rowSpacing:"0";var E=j('<tr class="jqplot-legend jqplot-cursor-legend"></tr>').appendTo(this._elem);E.data("seriesIndex",s);j('<td class="jqplot-legend jqplot-cursor-legend-swatch" style="padding-top:'+B+';"><div style="border:1px solid #cccccc;padding:0.2em;"><div class="jqplot-cursor-legend-swatch" style="background-color:'+C+';"></div></div></td>').appendTo(E);var G=j('<td class="jqplot-legend jqplot-cursor-legend-label" style="vertical-align:middle;padding-top:'+B+';"></td>');G.appendTo(E);G.data("seriesIndex",s);if(this.escapeHtml){G.text(D)}else{G.html(D)}E=null;G=null}return this._elem}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.js
deleted file mode 100644
index b97336fa..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.js
+++ /dev/null
@@ -1,737 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- /**
- * Class: $.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
- */
- $.jqplot.DateAxisRenderer = function() {
- $.jqplot.LinearAxisRenderer.call(this);
- this.date = new $.jsDate();
- };
-
- var second = 1000;
- var minute = 60 * second;
- var hour = 60 * minute;
- var day = 24 * hour;
- var week = 7 * day;
-
- // these are less definitive
- var month = 30.4368499 * day;
- var year = 365.242199 * day;
-
- var daysInMonths = [31,28,31,30,31,30,31,30,31,30,31,30];
- // array of consistent nice intervals. Longer intervals
- // will depend on days in month, days in year, etc.
- var niceFormatStrings = ['%M:%S.%#N', '%M:%S.%#N', '%M:%S.%#N', '%M:%S', '%M:%S', '%M:%S', '%M:%S', '%H:%M:%S', '%H:%M:%S', '%H:%M', '%H:%M', '%H:%M', '%H:%M', '%H:%M', '%H:%M', '%a %H:%M', '%a %H:%M', '%b %e %H:%M', '%b %e %H:%M', '%b %e %H:%M', '%b %e %H:%M', '%v', '%v', '%v', '%v', '%v', '%v', '%v'];
- var niceIntervals = [0.1*second, 0.2*second, 0.5*second, second, 2*second, 5*second, 10*second, 15*second, 30*second, minute, 2*minute, 5*minute, 10*minute, 15*minute, 30*minute, hour, 2*hour, 4*hour, 6*hour, 8*hour, 12*hour, day, 2*day, 3*day, 4*day, 5*day, week, 2*week];
-
- var niceMonthlyIntervals = [];
-
- function bestDateInterval(min, max, titarget) {
- // iterate through niceIntervals to find one closest to titarget
- var badness = Number.MAX_VALUE;
- var temp, bestTi, bestfmt;
- for (var i=0, l=niceIntervals.length; i < l; i++) {
- temp = Math.abs(titarget - niceIntervals[i]);
- if (temp < badness) {
- badness = temp;
- bestTi = niceIntervals[i];
- bestfmt = niceFormatStrings[i];
- }
- }
-
- return [bestTi, bestfmt];
- }
-
- $.jqplot.DateAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
- $.jqplot.DateAxisRenderer.prototype.constructor = $.jqplot.DateAxisRenderer;
-
- $.jqplot.DateTickFormatter = function(format, val) {
- if (!format) {
- format = '%Y/%m/%d';
- }
- return $.jsDate.strftime(val, format);
- };
-
- $.jqplot.DateAxisRenderer.prototype.init = function(options){
- // prop: 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.tickOptions.formatter = $.jqplot.DateTickFormatter;
- // prop: tickInset
- // 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.
- this.tickInset = 0;
- // prop: drawBaseline
- // True to draw the axis baseline.
- this.drawBaseline = true;
- // prop: baselineWidth
- // width of the baseline in pixels.
- this.baselineWidth = null;
- // prop: baselineColor
- // CSS color spec for the baseline.
- this.baselineColor = null;
- this.daTickInterval = null;
- this._daTickInterval = null;
-
- $.extend(true, this, options);
-
- var db = this._dataBounds,
- stats,
- sum,
- s,
- d,
- pd,
- sd,
- intv;
-
- // Go through all the series attached to this axis and find
- // the min/max bounds for this axis.
- for (var i=0; i<this._series.length; i++) {
- stats = {intervals:[], frequencies:{}, sortedIntervals:[], min:null, max:null, mean:null};
- sum = 0;
- s = this._series[i];
- d = s.data;
- pd = s._plotData;
- sd = s._stackData;
- intv = 0;
-
- for (var j=0; j<d.length; j++) {
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- d[j][0] = new $.jsDate(d[j][0]).getTime();
- pd[j][0] = new $.jsDate(d[j][0]).getTime();
- sd[j][0] = new $.jsDate(d[j][0]).getTime();
- if ((d[j][0] != null && d[j][0] < db.min) || db.min == null) {
- db.min = d[j][0];
- }
- if ((d[j][0] != null && d[j][0] > db.max) || db.max == null) {
- db.max = d[j][0];
- }
- if (j>0) {
- intv = Math.abs(d[j][0] - d[j-1][0]);
- stats.intervals.push(intv);
- if (stats.frequencies.hasOwnProperty(intv)) {
- stats.frequencies[intv] += 1;
- }
- else {
- stats.frequencies[intv] = 1;
- }
- }
- sum += intv;
-
- }
- else {
- d[j][1] = new $.jsDate(d[j][1]).getTime();
- pd[j][1] = new $.jsDate(d[j][1]).getTime();
- sd[j][1] = new $.jsDate(d[j][1]).getTime();
- if ((d[j][1] != null && d[j][1] < db.min) || db.min == null) {
- db.min = d[j][1];
- }
- if ((d[j][1] != null && d[j][1] > db.max) || db.max == null) {
- db.max = d[j][1];
- }
- if (j>0) {
- intv = Math.abs(d[j][1] - d[j-1][1]);
- stats.intervals.push(intv);
- if (stats.frequencies.hasOwnProperty(intv)) {
- stats.frequencies[intv] += 1;
- }
- else {
- stats.frequencies[intv] = 1;
- }
- }
- }
- sum += intv;
- }
-
- if (s.renderer.bands) {
- if (s.renderer.bands.hiData.length) {
- var bd = s.renderer.bands.hiData;
- for (var j=0, l=bd.length; j < l; j++) {
- if (this.name === 'xaxis' || this.name === 'x2axis') {
- bd[j][0] = new $.jsDate(bd[j][0]).getTime();
- if ((bd[j][0] != null && bd[j][0] > db.max) || db.max == null) {
- db.max = bd[j][0];
- }
- }
- else {
- bd[j][1] = new $.jsDate(bd[j][1]).getTime();
- if ((bd[j][1] != null && bd[j][1] > db.max) || db.max == null) {
- db.max = bd[j][1];
- }
- }
- }
- }
- if (s.renderer.bands.lowData.length) {
- var bd = s.renderer.bands.lowData;
- for (var j=0, l=bd.length; j < l; j++) {
- if (this.name === 'xaxis' || this.name === 'x2axis') {
- bd[j][0] = new $.jsDate(bd[j][0]).getTime();
- if ((bd[j][0] != null && bd[j][0] < db.min) || db.min == null) {
- db.min = bd[j][0];
- }
- }
- else {
- bd[j][1] = new $.jsDate(bd[j][1]).getTime();
- if ((bd[j][1] != null && bd[j][1] < db.min) || db.min == null) {
- db.min = bd[j][1];
- }
- }
- }
- }
- }
-
- var tempf = 0,
- tempn=0;
- for (var n in stats.frequencies) {
- stats.sortedIntervals.push({interval:n, frequency:stats.frequencies[n]});
- }
- stats.sortedIntervals.sort(function(a, b){
- return b.frequency - a.frequency;
- });
-
- stats.min = $.jqplot.arrayMin(stats.intervals);
- stats.max = $.jqplot.arrayMax(stats.intervals);
- stats.mean = sum/d.length;
- this._intervalStats.push(stats);
- stats = sum = s = d = pd = sd = null;
- }
- db = null;
-
- };
-
- // called with scope of an axis
- $.jqplot.DateAxisRenderer.prototype.reset = function() {
- this.min = this._options.min;
- this.max = this._options.max;
- this.tickInterval = this._options.tickInterval;
- this.numberTicks = this._options.numberTicks;
- this._autoFormatString = '';
- if (this._overrideFormatString && this.tickOptions && this.tickOptions.formatString) {
- this.tickOptions.formatString = '';
- }
- this.daTickInterval = this._daTickInterval;
- // this._ticks = this.__ticks;
- };
-
- $.jqplot.DateAxisRenderer.prototype.createTicks = function(plot) {
- // we're are operating on an axis here
- var ticks = this._ticks;
- var userTicks = this.ticks;
- var name = this.name;
- // databounds were set on axis initialization.
- var db = this._dataBounds;
- var iv = this._intervalStats;
- var dim = (this.name.charAt(0) === 'x') ? this._plotDimensions.width : this._plotDimensions.height;
- var interval;
- var min, max;
- var pos1, pos2;
- var tt, i;
- var threshold = 30;
- var insetMult = 1;
-
- var tickInterval = this.tickInterval;
-
- // if we already have ticks, use them.
- // ticks must be in order of increasing value.
-
- min = ((this.min != null) ? new $.jsDate(this.min).getTime() : db.min);
- max = ((this.max != null) ? new $.jsDate(this.max).getTime() : db.max);
-
- // see if we're zooming. if we are, don't use the min and max we're given,
- // but compute some nice ones. They will be reset later.
-
- var cursor = plot.plugins.cursor;
-
- if (cursor && cursor._zoom && cursor._zoom.zooming) {
- this.min = null;
- this.max = null;
- }
-
- var range = max - min;
-
- if (this.tickOptions == null || !this.tickOptions.formatString) {
- this._overrideFormatString = true;
- }
-
- if (userTicks.length) {
- // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed
- for (i=0; i<userTicks.length; i++){
- var ut = userTicks[i];
- var t = new this.tickRenderer(this.tickOptions);
- if (ut.constructor == Array) {
- t.value = new $.jsDate(ut[0]).getTime();
- t.label = ut[1];
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- t.setTick(t.value, this.name);
- this._ticks.push(t);
- }
-
- else {
- t.value = new $.jsDate(ut).getTime();
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- t.setTick(t.value, this.name);
- this._ticks.push(t);
- }
- }
- this.numberTicks = userTicks.length;
- this.min = this._ticks[0].value;
- this.max = this._ticks[this.numberTicks-1].value;
- this.daTickInterval = [(this.max - this.min) / (this.numberTicks - 1)/1000, 'seconds'];
- }
-
- ////////
- // We don't have any ticks yet, let's make some!
- ////////
-
- // special case when there is only one point, make three tick marks to center the point
- else if (this.min == null && this.max == null && db.min == db.max)
- {
- var onePointOpts = $.extend(true, {}, this.tickOptions, {name: this.name, value: null});
- var delta = 300000;
- this.min = db.min - delta;
- this.max = db.max + delta;
- this.numberTicks = 3;
-
- for(var i=this.min;i<=this.max;i+= delta)
- {
- onePointOpts.value = i;
-
- var t = new this.tickRenderer(onePointOpts);
-
- if (this._overrideFormatString && this._autoFormatString != '') {
- t.formatString = this._autoFormatString;
- }
-
- t.showLabel = false;
- t.showMark = false;
-
- this._ticks.push(t);
- }
-
- if(this.showTicks) {
- this._ticks[1].showLabel = true;
- }
- if(this.showTickMarks) {
- this._ticks[1].showTickMarks = true;
- }
- }
- // if user specified min and max are null, we set those to make best ticks.
- else if (this.min == null && this.max == null) {
-
- var opts = $.extend(true, {}, this.tickOptions, {name: this.name, value: null});
-
- // want to find a nice interval
- var nttarget,
- titarget;
-
- // if no tickInterval or numberTicks options specified, make a good guess.
- if (!this.tickInterval && !this.numberTicks) {
- var tdim = Math.max(dim, threshold+1);
- // how many ticks to put on the axis?
- // date labels tend to be long. If ticks not rotated,
- // don't use too many and have a high spacing factor.
- // If we are rotating ticks, use a lower factor.
- var spacingFactor = 115;
- if (this.tickRenderer === $.jqplot.CanvasAxisTickRenderer && this.tickOptions.angle) {
- spacingFactor = 115 - 40 * Math.abs(Math.sin(this.tickOptions.angle/180*Math.PI));
- }
-
- nttarget = Math.ceil((tdim-threshold)/spacingFactor + 1);
- titarget = (max - min) / (nttarget - 1);
- }
-
- // If tickInterval is specified, we'll try to honor it.
- // Not gauranteed to get this interval, but we'll get as close as
- // we can.
- // tickInterval will be used before numberTicks, that is if
- // both are specified, numberTicks will be ignored.
- else if (this.tickInterval) {
- titarget = this.tickInterval;
- }
-
- // if numberTicks specified, try to honor it.
- // Not gauranteed, but will try to get close.
- else if (this.numberTicks) {
- nttarget = this.numberTicks;
- titarget = (max - min) / (nttarget - 1);
- }
-
- // If we can use an interval of 2 weeks or less, pick best one
- if (titarget <= 19*day) {
- var ret = bestDateInterval(min, max, titarget);
- var tempti = ret[0];
- this._autoFormatString = ret[1];
-
- min = Math.floor(min/tempti) * tempti;
- min = new $.jsDate(min);
- min = min.getTime() + min.getUtcOffset();
-
- nttarget = Math.ceil((max - min) / tempti) + 1;
- this.min = min;
- this.max = min + (nttarget - 1) * tempti;
-
- // if max is less than max, add an interval
- if (this.max < max) {
- this.max += tempti;
- nttarget += 1;
- }
- this.tickInterval = tempti;
- this.numberTicks = nttarget;
-
- for (var i=0; i<nttarget; i++) {
- opts.value = this.min + i * tempti;
- t = new this.tickRenderer(opts);
-
- if (this._overrideFormatString && this._autoFormatString != '') {
- t.formatString = this._autoFormatString;
- }
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- this._ticks.push(t);
- }
-
- insetMult = this.tickInterval;
- }
-
- // should we use a monthly interval?
- else if (titarget <= 9 * month) {
-
- this._autoFormatString = '%v';
-
- // how many months in an interval?
- var intv = Math.round(titarget/month);
- if (intv < 1) {
- intv = 1;
- }
- else if (intv > 6) {
- intv = 6;
- }
-
- // figure out the starting month and ending month.
- var mstart = new $.jsDate(min).setDate(1).setHours(0,0,0,0);
-
- // See if max ends exactly on a month
- var tempmend = new $.jsDate(max);
- var mend = new $.jsDate(max).setDate(1).setHours(0,0,0,0);
-
- if (tempmend.getTime() !== mend.getTime()) {
- mend = mend.add(1, 'month');
- }
-
- var nmonths = mend.diff(mstart, 'month');
-
- nttarget = Math.ceil(nmonths/intv) + 1;
-
- this.min = mstart.getTime();
- this.max = mstart.clone().add((nttarget - 1) * intv, 'month').getTime();
- this.numberTicks = nttarget;
-
- for (var i=0; i<nttarget; i++) {
- if (i === 0) {
- opts.value = mstart.getTime();
- }
- else {
- opts.value = mstart.add(intv, 'month').getTime();
- }
- t = new this.tickRenderer(opts);
-
- if (this._overrideFormatString && this._autoFormatString != '') {
- t.formatString = this._autoFormatString;
- }
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- this._ticks.push(t);
- }
-
- insetMult = intv * month;
- }
-
- // use yearly intervals
- else {
-
- this._autoFormatString = '%v';
-
- // how many years in an interval?
- var intv = Math.round(titarget/year);
- if (intv < 1) {
- intv = 1;
- }
-
- // figure out the starting and ending years.
- var mstart = new $.jsDate(min).setMonth(0, 1).setHours(0,0,0,0);
- var mend = new $.jsDate(max).add(1, 'year').setMonth(0, 1).setHours(0,0,0,0);
-
- var nyears = mend.diff(mstart, 'year');
-
- nttarget = Math.ceil(nyears/intv) + 1;
-
- this.min = mstart.getTime();
- this.max = mstart.clone().add((nttarget - 1) * intv, 'year').getTime();
- this.numberTicks = nttarget;
-
- for (var i=0; i<nttarget; i++) {
- if (i === 0) {
- opts.value = mstart.getTime();
- }
- else {
- opts.value = mstart.add(intv, 'year').getTime();
- }
- t = new this.tickRenderer(opts);
-
- if (this._overrideFormatString && this._autoFormatString != '') {
- t.formatString = this._autoFormatString;
- }
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- this._ticks.push(t);
- }
-
- insetMult = intv * year;
- }
- }
-
- ////////
- // Some option(s) specified, work around that.
- ////////
-
- else {
- if (name == 'xaxis' || name == 'x2axis') {
- dim = this._plotDimensions.width;
- }
- else {
- dim = this._plotDimensions.height;
- }
-
- // if min, max and number of ticks specified, user can't specify interval.
- if (this.min != null && this.max != null && this.numberTicks != null) {
- this.tickInterval = null;
- }
-
- // if user specified a tick interval, convert to usable.
- if (this.tickInterval != null)
- {
- // if interval is a number or can be converted to one, use it.
- // Assume it is in SECONDS!!!
- if (Number(this.tickInterval)) {
- this.daTickInterval = [Number(this.tickInterval), 'seconds'];
- }
- // else, parse out something we can build from.
- else if (typeof this.tickInterval == "string") {
- var parts = this.tickInterval.split(' ');
- if (parts.length == 1) {
- this.daTickInterval = [1, parts[0]];
- }
- else if (parts.length == 2) {
- this.daTickInterval = [parts[0], parts[1]];
- }
- }
- }
-
- // if min and max are same, space them out a bit
- if (min == max) {
- var adj = 24*60*60*500; // 1/2 day
- min -= adj;
- max += adj;
- }
-
- range = max - min;
-
- var optNumTicks = 2 + parseInt(Math.max(0, dim-100)/100, 10);
-
-
- var rmin, rmax;
-
- rmin = (this.min != null) ? new $.jsDate(this.min).getTime() : min - range/2*(this.padMin - 1);
- rmax = (this.max != null) ? new $.jsDate(this.max).getTime() : max + range/2*(this.padMax - 1);
- this.min = rmin;
- this.max = rmax;
- range = this.max - this.min;
-
- if (this.numberTicks == null){
- // if tickInterval is specified by user, we will ignore computed maximum.
- // max will be equal or greater to fit even # of ticks.
- if (this.daTickInterval != null) {
- var nc = new $.jsDate(this.max).diff(this.min, this.daTickInterval[1], true);
- this.numberTicks = Math.ceil(nc/this.daTickInterval[0]) +1;
- // this.max = new $.jsDate(this.min).add(this.numberTicks-1, this.daTickInterval[1]).getTime();
- this.max = new $.jsDate(this.min).add((this.numberTicks-1) * this.daTickInterval[0], this.daTickInterval[1]).getTime();
- }
- else if (dim > 200) {
- this.numberTicks = parseInt(3+(dim-200)/100, 10);
- }
- else {
- this.numberTicks = 2;
- }
- }
-
- insetMult = range / (this.numberTicks-1)/1000;
-
- if (this.daTickInterval == null) {
- this.daTickInterval = [insetMult, 'seconds'];
- }
-
-
- for (var i=0; i<this.numberTicks; i++){
- var min = new $.jsDate(this.min);
- tt = min.add(i*this.daTickInterval[0], this.daTickInterval[1]).getTime();
- var t = new this.tickRenderer(this.tickOptions);
- // var t = new $.jqplot.AxisTickRenderer(this.tickOptions);
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- t.setTick(tt, this.name);
- this._ticks.push(t);
- }
- }
-
- if (this.tickInset) {
- this.min = this.min - this.tickInset * insetMult;
- this.max = this.max + this.tickInset * insetMult;
- }
-
- if (this._daTickInterval == null) {
- this._daTickInterval = this.daTickInterval;
- }
-
- ticks = null;
- };
-
-})(jQuery);
-
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.min.js
deleted file mode 100644
index f8532fe1..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dateAxisRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(h){h.jqplot.DateAxisRenderer=function(){h.jqplot.LinearAxisRenderer.call(this);this.date=new h.jsDate()};var c=1000;var e=60*c;var f=60*e;var l=24*f;var b=7*l;var j=30.4368499*l;var k=365.242199*l;var g=[31,28,31,30,31,30,31,30,31,30,31,30];var i=["%M:%S.%#N","%M:%S.%#N","%M:%S.%#N","%M:%S","%M:%S","%M:%S","%M:%S","%H:%M:%S","%H:%M:%S","%H:%M","%H:%M","%H:%M","%H:%M","%H:%M","%H:%M","%a %H:%M","%a %H:%M","%b %e %H:%M","%b %e %H:%M","%b %e %H:%M","%b %e %H:%M","%v","%v","%v","%v","%v","%v","%v"];var m=[0.1*c,0.2*c,0.5*c,c,2*c,5*c,10*c,15*c,30*c,e,2*e,5*e,10*e,15*e,30*e,f,2*f,4*f,6*f,8*f,12*f,l,2*l,3*l,4*l,5*l,b,2*b];var d=[];function a(p,s,t){var o=Number.MAX_VALUE;var u,r,v;for(var q=0,n=m.length;q<n;q++){u=Math.abs(t-m[q]);if(u<o){o=u;r=m[q];v=i[q]}}return[r,v]}h.jqplot.DateAxisRenderer.prototype=new h.jqplot.LinearAxisRenderer();h.jqplot.DateAxisRenderer.prototype.constructor=h.jqplot.DateAxisRenderer;h.jqplot.DateTickFormatter=function(n,o){if(!n){n="%Y/%m/%d"}return h.jsDate.strftime(o,n)};h.jqplot.DateAxisRenderer.prototype.init=function(E){this.tickOptions.formatter=h.jqplot.DateTickFormatter;this.tickInset=0;this.drawBaseline=true;this.baselineWidth=null;this.baselineColor=null;this.daTickInterval=null;this._daTickInterval=null;h.extend(true,this,E);var C=this._dataBounds,u,x,D,y,A,z,o;for(var t=0;t<this._series.length;t++){u={intervals:[],frequencies:{},sortedIntervals:[],min:null,max:null,mean:null};x=0;D=this._series[t];y=D.data;A=D._plotData;z=D._stackData;o=0;for(var r=0;r<y.length;r++){if(this.name=="xaxis"||this.name=="x2axis"){y[r][0]=new h.jsDate(y[r][0]).getTime();A[r][0]=new h.jsDate(y[r][0]).getTime();z[r][0]=new h.jsDate(y[r][0]).getTime();if((y[r][0]!=null&&y[r][0]<C.min)||C.min==null){C.min=y[r][0]}if((y[r][0]!=null&&y[r][0]>C.max)||C.max==null){C.max=y[r][0]}if(r>0){o=Math.abs(y[r][0]-y[r-1][0]);u.intervals.push(o);if(u.frequencies.hasOwnProperty(o)){u.frequencies[o]+=1}else{u.frequencies[o]=1}}x+=o}else{y[r][1]=new h.jsDate(y[r][1]).getTime();A[r][1]=new h.jsDate(y[r][1]).getTime();z[r][1]=new h.jsDate(y[r][1]).getTime();if((y[r][1]!=null&&y[r][1]<C.min)||C.min==null){C.min=y[r][1]}if((y[r][1]!=null&&y[r][1]>C.max)||C.max==null){C.max=y[r][1]}if(r>0){o=Math.abs(y[r][1]-y[r-1][1]);u.intervals.push(o);if(u.frequencies.hasOwnProperty(o)){u.frequencies[o]+=1}else{u.frequencies[o]=1}}}x+=o}if(D.renderer.bands){if(D.renderer.bands.hiData.length){var w=D.renderer.bands.hiData;for(var r=0,q=w.length;r<q;r++){if(this.name==="xaxis"||this.name==="x2axis"){w[r][0]=new h.jsDate(w[r][0]).getTime();if((w[r][0]!=null&&w[r][0]>C.max)||C.max==null){C.max=w[r][0]}}else{w[r][1]=new h.jsDate(w[r][1]).getTime();if((w[r][1]!=null&&w[r][1]>C.max)||C.max==null){C.max=w[r][1]}}}}if(D.renderer.bands.lowData.length){var w=D.renderer.bands.lowData;for(var r=0,q=w.length;r<q;r++){if(this.name==="xaxis"||this.name==="x2axis"){w[r][0]=new h.jsDate(w[r][0]).getTime();if((w[r][0]!=null&&w[r][0]<C.min)||C.min==null){C.min=w[r][0]}}else{w[r][1]=new h.jsDate(w[r][1]).getTime();if((w[r][1]!=null&&w[r][1]<C.min)||C.min==null){C.min=w[r][1]}}}}}var B=0,v=0;for(var p in u.frequencies){u.sortedIntervals.push({interval:p,frequency:u.frequencies[p]})}u.sortedIntervals.sort(function(s,n){return n.frequency-s.frequency});u.min=h.jqplot.arrayMin(u.intervals);u.max=h.jqplot.arrayMax(u.intervals);u.mean=x/y.length;this._intervalStats.push(u);u=x=D=y=A=z=null}C=null};h.jqplot.DateAxisRenderer.prototype.reset=function(){this.min=this._options.min;this.max=this._options.max;this.tickInterval=this._options.tickInterval;this.numberTicks=this._options.numberTicks;this._autoFormatString="";if(this._overrideFormatString&&this.tickOptions&&this.tickOptions.formatString){this.tickOptions.formatString=""}this.daTickInterval=this._daTickInterval};h.jqplot.DateAxisRenderer.prototype.createTicks=function(p){var W=this._ticks;var L=this.ticks;var F=this.name;var H=this._dataBounds;var M=this._intervalStats;var n=(this.name.charAt(0)==="x")?this._plotDimensions.width:this._plotDimensions.height;var w;var ad,J;var y,x;var ac,Z;var s=30;var O=1;var v=this.tickInterval;ad=((this.min!=null)?new h.jsDate(this.min).getTime():H.min);J=((this.max!=null)?new h.jsDate(this.max).getTime():H.max);var A=p.plugins.cursor;if(A&&A._zoom&&A._zoom.zooming){this.min=null;this.max=null}var B=J-ad;if(this.tickOptions==null||!this.tickOptions.formatString){this._overrideFormatString=true}if(L.length){for(Z=0;Z<L.length;Z++){var P=L[Z];var X=new this.tickRenderer(this.tickOptions);if(P.constructor==Array){X.value=new h.jsDate(P[0]).getTime();X.label=P[1];if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}X.setTick(X.value,this.name);this._ticks.push(X)}else{X.value=new h.jsDate(P).getTime();if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}X.setTick(X.value,this.name);this._ticks.push(X)}}this.numberTicks=L.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.daTickInterval=[(this.max-this.min)/(this.numberTicks-1)/1000,"seconds"]}else{if(this.min==null&&this.max==null&&H.min==H.max){var E=h.extend(true,{},this.tickOptions,{name:this.name,value:null});var S=300000;this.min=H.min-S;this.max=H.max+S;this.numberTicks=3;for(var Z=this.min;Z<=this.max;Z+=S){E.value=Z;var X=new this.tickRenderer(E);if(this._overrideFormatString&&this._autoFormatString!=""){X.formatString=this._autoFormatString}X.showLabel=false;X.showMark=false;this._ticks.push(X)}if(this.showTicks){this._ticks[1].showLabel=true}if(this.showTickMarks){this._ticks[1].showTickMarks=true}}else{if(this.min==null&&this.max==null){var N=h.extend(true,{},this.tickOptions,{name:this.name,value:null});var ab,I;if(!this.tickInterval&&!this.numberTicks){var R=Math.max(n,s+1);var Y=115;if(this.tickRenderer===h.jqplot.CanvasAxisTickRenderer&&this.tickOptions.angle){Y=115-40*Math.abs(Math.sin(this.tickOptions.angle/180*Math.PI))}ab=Math.ceil((R-s)/Y+1);I=(J-ad)/(ab-1)}else{if(this.tickInterval){I=this.tickInterval}else{if(this.numberTicks){ab=this.numberTicks;I=(J-ad)/(ab-1)}}}if(I<=19*l){var Q=a(ad,J,I);var r=Q[0];this._autoFormatString=Q[1];ad=Math.floor(ad/r)*r;ad=new h.jsDate(ad);ad=ad.getTime()+ad.getUtcOffset();ab=Math.ceil((J-ad)/r)+1;this.min=ad;this.max=ad+(ab-1)*r;if(this.max<J){this.max+=r;ab+=1}this.tickInterval=r;this.numberTicks=ab;for(var Z=0;Z<ab;Z++){N.value=this.min+Z*r;X=new this.tickRenderer(N);if(this._overrideFormatString&&this._autoFormatString!=""){X.formatString=this._autoFormatString}if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}this._ticks.push(X)}O=this.tickInterval}else{if(I<=9*j){this._autoFormatString="%v";var D=Math.round(I/j);if(D<1){D=1}else{if(D>6){D=6}}var U=new h.jsDate(ad).setDate(1).setHours(0,0,0,0);var q=new h.jsDate(J);var z=new h.jsDate(J).setDate(1).setHours(0,0,0,0);if(q.getTime()!==z.getTime()){z=z.add(1,"month")}var T=z.diff(U,"month");ab=Math.ceil(T/D)+1;this.min=U.getTime();this.max=U.clone().add((ab-1)*D,"month").getTime();this.numberTicks=ab;for(var Z=0;Z<ab;Z++){if(Z===0){N.value=U.getTime()}else{N.value=U.add(D,"month").getTime()}X=new this.tickRenderer(N);if(this._overrideFormatString&&this._autoFormatString!=""){X.formatString=this._autoFormatString}if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}this._ticks.push(X)}O=D*j}else{this._autoFormatString="%v";var D=Math.round(I/k);if(D<1){D=1}var U=new h.jsDate(ad).setMonth(0,1).setHours(0,0,0,0);var z=new h.jsDate(J).add(1,"year").setMonth(0,1).setHours(0,0,0,0);var K=z.diff(U,"year");ab=Math.ceil(K/D)+1;this.min=U.getTime();this.max=U.clone().add((ab-1)*D,"year").getTime();this.numberTicks=ab;for(var Z=0;Z<ab;Z++){if(Z===0){N.value=U.getTime()}else{N.value=U.add(D,"year").getTime()}X=new this.tickRenderer(N);if(this._overrideFormatString&&this._autoFormatString!=""){X.formatString=this._autoFormatString}if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}this._ticks.push(X)}O=D*k}}}else{if(F=="xaxis"||F=="x2axis"){n=this._plotDimensions.width}else{n=this._plotDimensions.height}if(this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}if(this.tickInterval!=null){if(Number(this.tickInterval)){this.daTickInterval=[Number(this.tickInterval),"seconds"]}else{if(typeof this.tickInterval=="string"){var aa=this.tickInterval.split(" ");if(aa.length==1){this.daTickInterval=[1,aa[0]]}else{if(aa.length==2){this.daTickInterval=[aa[0],aa[1]]}}}}}if(ad==J){var o=24*60*60*500;ad-=o;J+=o}B=J-ad;var G=2+parseInt(Math.max(0,n-100)/100,10);var V,C;V=(this.min!=null)?new h.jsDate(this.min).getTime():ad-B/2*(this.padMin-1);C=(this.max!=null)?new h.jsDate(this.max).getTime():J+B/2*(this.padMax-1);this.min=V;this.max=C;B=this.max-this.min;if(this.numberTicks==null){if(this.daTickInterval!=null){var u=new h.jsDate(this.max).diff(this.min,this.daTickInterval[1],true);this.numberTicks=Math.ceil(u/this.daTickInterval[0])+1;this.max=new h.jsDate(this.min).add((this.numberTicks-1)*this.daTickInterval[0],this.daTickInterval[1]).getTime()}else{if(n>200){this.numberTicks=parseInt(3+(n-200)/100,10)}else{this.numberTicks=2}}}O=B/(this.numberTicks-1)/1000;if(this.daTickInterval==null){this.daTickInterval=[O,"seconds"]}for(var Z=0;Z<this.numberTicks;Z++){var ad=new h.jsDate(this.min);ac=ad.add(Z*this.daTickInterval[0],this.daTickInterval[1]).getTime();var X=new this.tickRenderer(this.tickOptions);if(!this.showTicks){X.showLabel=false;X.showMark=false}else{if(!this.showTickMarks){X.showMark=false}}X.setTick(ac,this.name);this._ticks.push(X)}}}}if(this.tickInset){this.min=this.min-this.tickInset*O;this.max=this.max+this.tickInset*O}if(this._daTickInterval==null){this._daTickInterval=this.daTickInterval}W=null}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.js
deleted file mode 100644
index eeda6ef9..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.js
+++ /dev/null
@@ -1,804 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- /**
- * Class: $.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.
- */
- $.jqplot.DonutRenderer = function(){
- $.jqplot.LineRenderer.call(this);
- };
-
- $.jqplot.DonutRenderer.prototype = new $.jqplot.LineRenderer();
- $.jqplot.DonutRenderer.prototype.constructor = $.jqplot.DonutRenderer;
-
- // called with scope of a series
- $.jqplot.DonutRenderer.prototype.init = function(options, plot) {
- // Group: Properties
- //
- // prop: diameter
- // Outer diameter of the donut, auto computed by default
- this.diameter = null;
- // prop: innerDiameter
- // Inner diameter of the donut, auto calculated by default.
- // If specified will override thickness value.
- this.innerDiameter = null;
- // prop: thickness
- // thickness of the donut, auto computed by default
- // Overridden by if innerDiameter is specified.
- this.thickness = null;
- // prop: padding
- // padding between the donut and plot edges, legend, etc.
- this.padding = 20;
- // prop: sliceMargin
- // angular spacing between donut slices in degrees.
- this.sliceMargin = 0;
- // prop: ringMargin
- // pixel distance between rings, or multiple series in a donut plot.
- // null will compute ringMargin based on sliceMargin.
- this.ringMargin = null;
- // prop: fill
- // true or false, wether to fil the slices.
- this.fill = true;
- // prop: shadowOffset
- // offset of the shadow from the slice and offset of
- // each succesive stroke of the shadow from the last.
- this.shadowOffset = 2;
- // prop: shadowAlpha
- // transparency of the shadow (0 = transparent, 1 = opaque)
- this.shadowAlpha = 0.07;
- // prop: shadowDepth
- // number of strokes to apply to the shadow,
- // each stroke offset shadowOffset from the last.
- this.shadowDepth = 5;
- // prop: highlightMouseOver
- // True to highlight slice when moused over.
- // This must be false to enable highlightMouseDown to highlight when clicking on a slice.
- this.highlightMouseOver = true;
- // prop: highlightMouseDown
- // True to highlight when a mouse button is pressed over a slice.
- // This will be disabled if highlightMouseOver is true.
- this.highlightMouseDown = false;
- // prop: highlightColors
- // an array of colors to use when highlighting a slice.
- this.highlightColors = [];
- // prop: dataLabels
- // Either 'label', 'value', 'percent' or an array of labels to place on the pie slices.
- // Defaults to percentage of each pie slice.
- this.dataLabels = 'percent';
- // prop: showDataLabels
- // true to show data labels on slices.
- this.showDataLabels = false;
- // prop: dataLabelFormatString
- // Format string for data labels. If none, '%s' is used for "label" and for arrays, '%d' for value and '%d%%' for percentage.
- this.dataLabelFormatString = null;
- // prop: dataLabelThreshold
- // 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.
- this.dataLabelThreshold = 3;
- // prop: dataLabelPositionFactor
- // 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.
- this.dataLabelPositionFactor = 0.4;
- // prop: dataLabelNudge
- // Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
- this.dataLabelNudge = 0;
- // prop: startAngle
- // 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.
- this.startAngle = 0;
- this.tickRenderer = $.jqplot.DonutTickRenderer;
- // Used as check for conditions where donut shouldn't be drawn.
- this._drawData = true;
- this._type = 'donut';
-
- // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
- if (options.highlightMouseDown && options.highlightMouseOver == null) {
- options.highlightMouseOver = false;
- }
-
- $.extend(true, this, options);
- if (this.diameter != null) {
- this.diameter = this.diameter - this.sliceMargin;
- }
- this._diameter = null;
- this._innerDiameter = null;
- this._radius = null;
- this._innerRadius = null;
- this._thickness = null;
- // references to the previous series in the plot to properly calculate diameters
- // and thicknesses of nested rings.
- this._previousSeries = [];
- this._numberSeries = 1;
- // array of [start,end] angles arrays, one for each slice. In radians.
- this._sliceAngles = [];
- // index of the currenty highlighted point, if any
- this._highlightedPoint = null;
-
- // set highlight colors if none provided
- if (this.highlightColors.length == 0) {
- for (var i=0; i<this.seriesColors.length; i++){
- var rgba = $.jqplot.getColorComponents(this.seriesColors[i]);
- var newrgb = [rgba[0], rgba[1], rgba[2]];
- var sum = newrgb[0] + newrgb[1] + newrgb[2];
- for (var j=0; j<3; j++) {
- // when darkening, lowest color component can be is 60.
- newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]);
- newrgb[j] = parseInt(newrgb[j], 10);
- }
- this.highlightColors.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')');
- }
- }
-
- plot.postParseOptionsHooks.addOnce(postParseOptions);
- plot.postInitHooks.addOnce(postInit);
- plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
- plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
- plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
- plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
- plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
- plot.postDrawHooks.addOnce(postPlotDraw);
-
-
- };
-
- $.jqplot.DonutRenderer.prototype.setGridData = function(plot) {
- // set gridData property. This will hold angle in radians of each data point.
- var stack = [];
- var td = [];
- var sa = this.startAngle/180*Math.PI;
- var tot = 0;
- // don't know if we have any valid data yet, so set plot to not draw.
- this._drawData = false;
- for (var i=0; i<this.data.length; i++){
- if (this.data[i][1] != 0) {
- // we have data, O.K. to draw.
- this._drawData = true;
- }
- stack.push(this.data[i][1]);
- td.push([this.data[i][0]]);
- if (i>0) {
- stack[i] += stack[i-1];
- }
- tot += this.data[i][1];
- }
- var fact = Math.PI*2/stack[stack.length - 1];
-
- for (var i=0; i<stack.length; i++) {
- td[i][1] = stack[i] * fact;
- td[i][2] = this.data[i][1]/tot;
- }
- this.gridData = td;
- };
-
- $.jqplot.DonutRenderer.prototype.makeGridData = function(data, plot) {
- var stack = [];
- var td = [];
- var tot = 0;
- var sa = this.startAngle/180*Math.PI;
- // don't know if we have any valid data yet, so set plot to not draw.
- this._drawData = false;
- for (var i=0; i<data.length; i++){
- if (this.data[i][1] != 0) {
- // we have data, O.K. to draw.
- this._drawData = true;
- }
- stack.push(data[i][1]);
- td.push([data[i][0]]);
- if (i>0) {
- stack[i] += stack[i-1];
- }
- tot += data[i][1];
- }
- var fact = Math.PI*2/stack[stack.length - 1];
-
- for (var i=0; i<stack.length; i++) {
- td[i][1] = stack[i] * fact;
- td[i][2] = data[i][1]/tot;
- }
- return td;
- };
-
- $.jqplot.DonutRenderer.prototype.drawSlice = function (ctx, ang1, ang2, color, isShadow) {
- var r = this._diameter / 2;
- var ri = r - this._thickness;
- var fill = this.fill;
- // var lineWidth = this.lineWidth;
- ctx.save();
- ctx.translate(this._center[0], this._center[1]);
- // ctx.translate(this.sliceMargin*Math.cos((ang1+ang2)/2), this.sliceMargin*Math.sin((ang1+ang2)/2));
-
- if (isShadow) {
- for (var i=0; i<this.shadowDepth; i++) {
- ctx.save();
- ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));
- doDraw();
- }
- }
-
- else {
- doDraw();
- }
-
- function doDraw () {
- // Fix for IE and Chrome that can't seem to draw circles correctly.
- // ang2 should always be <= 2 pi since that is the way the data is converted.
- if (ang2 > 6.282 + this.startAngle) {
- ang2 = 6.282 + this.startAngle;
- if (ang1 > ang2) {
- ang1 = 6.281 + this.startAngle;
- }
- }
- // Fix for IE, where it can't seem to handle 0 degree angles. Also avoids
- // ugly line on unfilled donuts.
- if (ang1 >= ang2) {
- return;
- }
- ctx.beginPath();
- ctx.fillStyle = color;
- ctx.strokeStyle = color;
- // ctx.lineWidth = lineWidth;
- ctx.arc(0, 0, r, ang1, ang2, false);
- ctx.lineTo(ri*Math.cos(ang2), ri*Math.sin(ang2));
- ctx.arc(0,0, ri, ang2, ang1, true);
- ctx.closePath();
- if (fill) {
- ctx.fill();
- }
- else {
- ctx.stroke();
- }
- }
-
- if (isShadow) {
- for (var i=0; i<this.shadowDepth; i++) {
- ctx.restore();
- }
- }
-
- ctx.restore();
- };
-
- // called with scope of series
- $.jqplot.DonutRenderer.prototype.draw = function (ctx, gd, options, plot) {
- var i;
- var opts = (options != undefined) ? options : {};
- // offset and direction of offset due to legend placement
- var offx = 0;
- var offy = 0;
- var trans = 1;
- // var colorGenerator = new this.colorGenerator(this.seriesColors);
- if (options.legendInfo && options.legendInfo.placement == 'insideGrid') {
- var li = options.legendInfo;
- switch (li.location) {
- case 'nw':
- offx = li.width + li.xoffset;
- break;
- case 'w':
- offx = li.width + li.xoffset;
- break;
- case 'sw':
- offx = li.width + li.xoffset;
- break;
- case 'ne':
- offx = li.width + li.xoffset;
- trans = -1;
- break;
- case 'e':
- offx = li.width + li.xoffset;
- trans = -1;
- break;
- case 'se':
- offx = li.width + li.xoffset;
- trans = -1;
- break;
- case 'n':
- offy = li.height + li.yoffset;
- break;
- case 's':
- offy = li.height + li.yoffset;
- trans = -1;
- break;
- default:
- break;
- }
- }
-
- var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
- var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
- var fill = (opts.fill != undefined) ? opts.fill : this.fill;
- var cw = ctx.canvas.width;
- var ch = ctx.canvas.height;
- var w = cw - offx - 2 * this.padding;
- var h = ch - offy - 2 * this.padding;
- var mindim = Math.min(w,h);
- var d = mindim;
- var ringmargin = (this.ringMargin == null) ? this.sliceMargin * 2.0 : this.ringMargin;
-
- for (var i=0; i<this._previousSeries.length; i++) {
- d -= 2.0 * this._previousSeries[i]._thickness + 2.0 * ringmargin;
- }
- this._diameter = this.diameter || d;
- if (this.innerDiameter != null) {
- var od = (this._numberSeries > 1 && this.index > 0) ? this._previousSeries[0]._diameter : this._diameter;
- this._thickness = this.thickness || (od - this.innerDiameter - 2.0*ringmargin*this._numberSeries) / this._numberSeries/2.0;
- }
- else {
- this._thickness = this.thickness || mindim / 2 / (this._numberSeries + 1) * 0.85;
- }
-
- var r = this._radius = this._diameter/2;
- this._innerRadius = this._radius - this._thickness;
- var sa = this.startAngle / 180 * Math.PI;
- this._center = [(cw - trans * offx)/2 + trans * offx, (ch - trans*offy)/2 + trans * offy];
-
- if (this.shadow) {
- var shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')';
- for (var i=0; i<gd.length; i++) {
- var ang1 = (i == 0) ? sa : gd[i-1][1] + sa;
- // Adjust ang1 and ang2 for sliceMargin
- ang1 += this.sliceMargin/180*Math.PI;
- this.renderer.drawSlice.call (this, ctx, ang1, gd[i][1]+sa, shadowColor, true);
- }
-
- }
- for (var i=0; i<gd.length; i++) {
- var ang1 = (i == 0) ? sa : gd[i-1][1] + sa;
- // Adjust ang1 and ang2 for sliceMargin
- ang1 += this.sliceMargin/180*Math.PI;
- var ang2 = gd[i][1] + sa;
- this._sliceAngles.push([ang1, ang2]);
- this.renderer.drawSlice.call (this, ctx, ang1, ang2, this.seriesColors[i], false);
-
- if (this.showDataLabels && gd[i][2]*100 >= this.dataLabelThreshold) {
- var fstr, avgang = (ang1+ang2)/2, label;
-
- if (this.dataLabels == 'label') {
- fstr = this.dataLabelFormatString || '%s';
- label = $.jqplot.sprintf(fstr, gd[i][0]);
- }
- else if (this.dataLabels == 'value') {
- fstr = this.dataLabelFormatString || '%d';
- label = $.jqplot.sprintf(fstr, this.data[i][1]);
- }
- else if (this.dataLabels == 'percent') {
- fstr = this.dataLabelFormatString || '%d%%';
- label = $.jqplot.sprintf(fstr, gd[i][2]*100);
- }
- else if (this.dataLabels.constructor == Array) {
- fstr = this.dataLabelFormatString || '%s';
- label = $.jqplot.sprintf(fstr, this.dataLabels[i]);
- }
-
- var fact = this._innerRadius + this._thickness * this.dataLabelPositionFactor + this.sliceMargin + this.dataLabelNudge;
-
- var x = this._center[0] + Math.cos(avgang) * fact + this.canvas._offsets.left;
- var y = this._center[1] + Math.sin(avgang) * fact + this.canvas._offsets.top;
-
- var labelelem = $('<span class="jqplot-donut-series jqplot-data-label" style="position:absolute;">' + label + '</span>').insertBefore(plot.eventCanvas._elem);
- x -= labelelem.width()/2;
- y -= labelelem.height()/2;
- x = Math.round(x);
- y = Math.round(y);
- labelelem.css({left: x, top: y});
- }
- }
-
- };
-
- $.jqplot.DonutAxisRenderer = function() {
- $.jqplot.LinearAxisRenderer.call(this);
- };
-
- $.jqplot.DonutAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
- $.jqplot.DonutAxisRenderer.prototype.constructor = $.jqplot.DonutAxisRenderer;
-
-
- // There are no traditional axes on a donut chart. We just need to provide
- // dummy objects with properties so the plot will render.
- // called with scope of axis object.
- $.jqplot.DonutAxisRenderer.prototype.init = function(options){
- //
- this.tickRenderer = $.jqplot.DonutTickRenderer;
- $.extend(true, this, options);
- // I don't think I'm going to need _dataBounds here.
- // have to go Axis scaling in a way to fit chart onto plot area
- // and provide u2p and p2u functionality for mouse cursor, etc.
- // for convienence set _dataBounds to 0 and 100 and
- // set min/max to 0 and 100.
- this._dataBounds = {min:0, max:100};
- this.min = 0;
- this.max = 100;
- this.showTicks = false;
- this.ticks = [];
- this.showMark = false;
- this.show = false;
- };
-
-
-
-
- $.jqplot.DonutLegendRenderer = function(){
- $.jqplot.TableLegendRenderer.call(this);
- };
-
- $.jqplot.DonutLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
- $.jqplot.DonutLegendRenderer.prototype.constructor = $.jqplot.DonutLegendRenderer;
-
- /**
- * Class: $.jqplot.DonutLegendRenderer
- * Legend Renderer specific to donut plots. Set by default
- * when user creates a donut plot.
- */
- $.jqplot.DonutLegendRenderer.prototype.init = function(options) {
- // Group: Properties
- //
- // prop: numberRows
- // Maximum number of rows in the legend. 0 or null for unlimited.
- this.numberRows = null;
- // prop: numberColumns
- // Maximum number of columns in the legend. 0 or null for unlimited.
- this.numberColumns = null;
- $.extend(true, this, options);
- };
-
- // called with context of legend
- $.jqplot.DonutLegendRenderer.prototype.draw = function() {
- var legend = this;
- if (this.show) {
- var series = this._series;
- var ss = 'position:absolute;';
- ss += (this.background) ? 'background:'+this.background+';' : '';
- ss += (this.border) ? 'border:'+this.border+';' : '';
- ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
- ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
- ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
- ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : '';
- ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : '';
- ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : '';
- ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : '';
- this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
- // Donut charts legends don't go by number of series, but by number of data points
- // in the series. Refactor things here for that.
-
- var pad = false,
- reverse = false,
- nr, nc;
- var s = series[0];
- var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors);
-
- if (s.show) {
- var pd = s.data;
- if (this.numberRows) {
- nr = this.numberRows;
- if (!this.numberColumns){
- nc = Math.ceil(pd.length/nr);
- }
- else{
- nc = this.numberColumns;
- }
- }
- else if (this.numberColumns) {
- nc = this.numberColumns;
- nr = Math.ceil(pd.length/this.numberColumns);
- }
- else {
- nr = pd.length;
- nc = 1;
- }
-
- var i, j, tr, td1, td2, lt, rs, color;
- var idx = 0;
-
- for (i=0; i<nr; i++) {
- if (reverse){
- tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem);
- }
- else{
- tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);
- }
- for (j=0; j<nc; j++) {
- if (idx < pd.length){
- lt = this.labels[idx] || pd[idx][0].toString();
- color = colorGenerator.next();
- if (!reverse){
- if (i>0){
- pad = true;
- }
- else{
- pad = false;
- }
- }
- else{
- if (i == nr -1){
- pad = false;
- }
- else{
- pad = true;
- }
- }
- rs = (pad) ? this.rowSpacing : '0';
-
- td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
- '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+
- '</div></td>');
- td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
- if (this.escapeHtml){
- td2.text(lt);
- }
- else {
- td2.html(lt);
- }
- if (reverse) {
- td2.prependTo(tr);
- td1.prependTo(tr);
- }
- else {
- td1.appendTo(tr);
- td2.appendTo(tr);
- }
- pad = true;
- }
- idx++;
- }
- }
- }
- }
- return this._elem;
- };
-
- // setup default renderers for axes and legend so user doesn't have to
- // called with scope of plot
- function preInit(target, data, options) {
- options = options || {};
- options.axesDefaults = options.axesDefaults || {};
- options.legend = options.legend || {};
- options.seriesDefaults = options.seriesDefaults || {};
- // only set these if there is a donut series
- var setopts = false;
- if (options.seriesDefaults.renderer == $.jqplot.DonutRenderer) {
- setopts = true;
- }
- else if (options.series) {
- for (var i=0; i < options.series.length; i++) {
- if (options.series[i].renderer == $.jqplot.DonutRenderer) {
- setopts = true;
- }
- }
- }
-
- if (setopts) {
- options.axesDefaults.renderer = $.jqplot.DonutAxisRenderer;
- options.legend.renderer = $.jqplot.DonutLegendRenderer;
- options.legend.preDraw = true;
- options.seriesDefaults.pointLabels = {show: false};
- }
- }
-
- // called with scope of plot.
- function postInit(target, data, options) {
- // if multiple series, add a reference to the previous one so that
- // donut rings can nest.
- for (var i=1; i<this.series.length; i++) {
- if (!this.series[i]._previousSeries.length){
- for (var j=0; j<i; j++) {
- if (this.series[i].renderer.constructor == $.jqplot.DonutRenderer && this.series[j].renderer.constructor == $.jqplot.DonutRenderer) {
- this.series[i]._previousSeries.push(this.series[j]);
- }
- }
- }
- }
- for (i=0; i<this.series.length; i++) {
- if (this.series[i].renderer.constructor == $.jqplot.DonutRenderer) {
- this.series[i]._numberSeries = this.series.length;
- // don't allow mouseover and mousedown at same time.
- if (this.series[i].highlightMouseOver) {
- this.series[i].highlightMouseDown = false;
- }
- }
- }
- }
-
- var postParseOptionsRun = false;
- // called with scope of plot
- function postParseOptions(options) {
- for (var i=0; i<this.series.length; i++) {
- this.series[i].seriesColors = this.seriesColors;
- this.series[i].colorGenerator = $.jqplot.colorGenerator;
- }
- }
-
- function highlight (plot, sidx, pidx) {
- var s = plot.series[sidx];
- var canvas = plot.plugins.donutRenderer.highlightCanvas;
- canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
- s._highlightedPoint = pidx;
- plot.plugins.donutRenderer.highlightedSeriesIndex = sidx;
- s.renderer.drawSlice.call(s, canvas._ctx, s._sliceAngles[pidx][0], s._sliceAngles[pidx][1], s.highlightColors[pidx], false);
- }
-
- function unhighlight (plot) {
- var canvas = plot.plugins.donutRenderer.highlightCanvas;
- canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
- for (var i=0; i<plot.series.length; i++) {
- plot.series[i]._highlightedPoint = null;
- }
- plot.plugins.donutRenderer.highlightedSeriesIndex = null;
- plot.target.trigger('jqplotDataUnhighlight');
- }
-
- function handleMove(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- var evt1 = jQuery.Event('jqplotDataMouseOver');
- evt1.pageX = ev.pageX;
- evt1.pageY = ev.pageY;
- plot.target.trigger(evt1, ins);
- if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.donutRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
- var evt = jQuery.Event('jqplotDataHighlight');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- highlight (plot, ins[0], ins[1]);
- }
- }
- else if (neighbor == null) {
- unhighlight (plot);
- }
- }
-
- function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.donutRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
- var evt = jQuery.Event('jqplotDataHighlight');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- highlight (plot, ins[0], ins[1]);
- }
- }
- else if (neighbor == null) {
- unhighlight (plot);
- }
- }
-
- function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
- var idx = plot.plugins.donutRenderer.highlightedSeriesIndex;
- if (idx != null && plot.series[idx].highlightMouseDown) {
- unhighlight(plot);
- }
- }
-
- function handleClick(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- var evt = jQuery.Event('jqplotDataClick');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- }
- }
-
- function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- var idx = plot.plugins.donutRenderer.highlightedSeriesIndex;
- if (idx != null && plot.series[idx].highlightMouseDown) {
- unhighlight(plot);
- }
- var evt = jQuery.Event('jqplotDataRightClick');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- }
- }
-
- // called within context of plot
- // create a canvas which we can draw on.
- // insert it before the eventCanvas, so eventCanvas will still capture events.
- function postPlotDraw() {
- // Memory Leaks patch
- if (this.plugins.donutRenderer && this.plugins.donutRenderer.highlightCanvas) {
- this.plugins.donutRenderer.highlightCanvas.resetCanvas();
- this.plugins.donutRenderer.highlightCanvas = null;
- }
-
- this.plugins.donutRenderer = {highlightedSeriesIndex:null};
- this.plugins.donutRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
- // do we have any data labels? if so, put highlight canvas before those
- // Fix for broken jquery :first selector with canvas (VML) elements.
- var labels = $(this.targetId+' .jqplot-data-label');
- if (labels.length) {
- $(labels[0]).before(this.plugins.donutRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-donutRenderer-highlight-canvas', this._plotDimensions, this));
- }
- // else put highlight canvas before event canvas.
- else {
- this.eventCanvas._elem.before(this.plugins.donutRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-donutRenderer-highlight-canvas', this._plotDimensions, this));
- }
- var hctx = this.plugins.donutRenderer.highlightCanvas.setContext();
- this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
- }
-
- $.jqplot.preInitHooks.push(preInit);
-
- $.jqplot.DonutTickRenderer = function() {
- $.jqplot.AxisTickRenderer.call(this);
- };
-
- $.jqplot.DonutTickRenderer.prototype = new $.jqplot.AxisTickRenderer();
- $.jqplot.DonutTickRenderer.prototype.constructor = $.jqplot.DonutTickRenderer;
-
-})(jQuery);
-
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.min.js
deleted file mode 100644
index 13c20acb..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.donutRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(e){e.jqplot.DonutRenderer=function(){e.jqplot.LineRenderer.call(this)};e.jqplot.DonutRenderer.prototype=new e.jqplot.LineRenderer();e.jqplot.DonutRenderer.prototype.constructor=e.jqplot.DonutRenderer;e.jqplot.DonutRenderer.prototype.init=function(p,t){this.diameter=null;this.innerDiameter=null;this.thickness=null;this.padding=20;this.sliceMargin=0;this.ringMargin=null;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.dataLabels="percent";this.showDataLabels=false;this.dataLabelFormatString=null;this.dataLabelThreshold=3;this.dataLabelPositionFactor=0.4;this.dataLabelNudge=0;this.startAngle=0;this.tickRenderer=e.jqplot.DonutTickRenderer;this._drawData=true;this._type="donut";if(p.highlightMouseDown&&p.highlightMouseOver==null){p.highlightMouseOver=false}e.extend(true,this,p);if(this.diameter!=null){this.diameter=this.diameter-this.sliceMargin}this._diameter=null;this._innerDiameter=null;this._radius=null;this._innerRadius=null;this._thickness=null;this._previousSeries=[];this._numberSeries=1;this._sliceAngles=[];this._highlightedPoint=null;if(this.highlightColors.length==0){for(var r=0;r<this.seriesColors.length;r++){var q=e.jqplot.getColorComponents(this.seriesColors[r]);var n=[q[0],q[1],q[2]];var s=n[0]+n[1]+n[2];for(var o=0;o<3;o++){n[o]=(s>570)?n[o]*0.8:n[o]+0.3*(255-n[o]);n[o]=parseInt(n[o],10)}this.highlightColors.push("rgb("+n[0]+","+n[1]+","+n[2]+")")}}t.postParseOptionsHooks.addOnce(l);t.postInitHooks.addOnce(g);t.eventListenerHooks.addOnce("jqplotMouseMove",b);t.eventListenerHooks.addOnce("jqplotMouseDown",a);t.eventListenerHooks.addOnce("jqplotMouseUp",j);t.eventListenerHooks.addOnce("jqplotClick",f);t.eventListenerHooks.addOnce("jqplotRightClick",m);t.postDrawHooks.addOnce(h)};e.jqplot.DonutRenderer.prototype.setGridData=function(s){var o=[];var t=[];var n=this.startAngle/180*Math.PI;var r=0;this._drawData=false;for(var q=0;q<this.data.length;q++){if(this.data[q][1]!=0){this._drawData=true}o.push(this.data[q][1]);t.push([this.data[q][0]]);if(q>0){o[q]+=o[q-1]}r+=this.data[q][1]}var p=Math.PI*2/o[o.length-1];for(var q=0;q<o.length;q++){t[q][1]=o[q]*p;t[q][2]=this.data[q][1]/r}this.gridData=t};e.jqplot.DonutRenderer.prototype.makeGridData=function(s,t){var o=[];var u=[];var r=0;var n=this.startAngle/180*Math.PI;this._drawData=false;for(var q=0;q<s.length;q++){if(this.data[q][1]!=0){this._drawData=true}o.push(s[q][1]);u.push([s[q][0]]);if(q>0){o[q]+=o[q-1]}r+=s[q][1]}var p=Math.PI*2/o[o.length-1];for(var q=0;q<o.length;q++){u[q][1]=o[q]*p;u[q][2]=s[q][1]/r}return u};e.jqplot.DonutRenderer.prototype.drawSlice=function(x,u,t,p,s){var n=this._diameter/2;var v=n-this._thickness;var w=this.fill;x.save();x.translate(this._center[0],this._center[1]);if(s){for(var q=0;q<this.shadowDepth;q++){x.save();x.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));o()}}else{o()}function o(){if(t>6.282+this.startAngle){t=6.282+this.startAngle;if(u>t){u=6.281+this.startAngle}}if(u>=t){return}x.beginPath();x.fillStyle=p;x.strokeStyle=p;x.arc(0,0,n,u,t,false);x.lineTo(v*Math.cos(t),v*Math.sin(t));x.arc(0,0,v,t,u,true);x.closePath();if(w){x.fill()}else{x.stroke()}}if(s){for(var q=0;q<this.shadowDepth;q++){x.restore()}}x.restore()};e.jqplot.DonutRenderer.prototype.draw=function(N,V,t,P){var Q;var J=(t!=undefined)?t:{};var q=0;var p=0;var u=1;if(t.legendInfo&&t.legendInfo.placement=="insideGrid"){var I=t.legendInfo;switch(I.location){case"nw":q=I.width+I.xoffset;break;case"w":q=I.width+I.xoffset;break;case"sw":q=I.width+I.xoffset;break;case"ne":q=I.width+I.xoffset;u=-1;break;case"e":q=I.width+I.xoffset;u=-1;break;case"se":q=I.width+I.xoffset;u=-1;break;case"n":p=I.height+I.yoffset;break;case"s":p=I.height+I.yoffset;u=-1;break;default:break}}var B=(J.shadow!=undefined)?J.shadow:this.shadow;var W=(J.showLine!=undefined)?J.showLine:this.showLine;var O=(J.fill!=undefined)?J.fill:this.fill;var s=N.canvas.width;var H=N.canvas.height;var G=s-q-2*this.padding;var R=H-p-2*this.padding;var v=Math.min(G,R);var T=v;var X=(this.ringMargin==null)?this.sliceMargin*2:this.ringMargin;for(var Q=0;Q<this._previousSeries.length;Q++){T-=2*this._previousSeries[Q]._thickness+2*X}this._diameter=this.diameter||T;if(this.innerDiameter!=null){var M=(this._numberSeries>1&&this.index>0)?this._previousSeries[0]._diameter:this._diameter;this._thickness=this.thickness||(M-this.innerDiameter-2*X*this._numberSeries)/this._numberSeries/2}else{this._thickness=this.thickness||v/2/(this._numberSeries+1)*0.85}var K=this._radius=this._diameter/2;this._innerRadius=this._radius-this._thickness;var o=this.startAngle/180*Math.PI;this._center=[(s-u*q)/2+u*q,(H-u*p)/2+u*p];if(this.shadow){var L="rgba(0,0,0,"+this.shadowAlpha+")";for(var Q=0;Q<V.length;Q++){var A=(Q==0)?o:V[Q-1][1]+o;A+=this.sliceMargin/180*Math.PI;this.renderer.drawSlice.call(this,N,A,V[Q][1]+o,L,true)}}for(var Q=0;Q<V.length;Q++){var A=(Q==0)?o:V[Q-1][1]+o;A+=this.sliceMargin/180*Math.PI;var z=V[Q][1]+o;this._sliceAngles.push([A,z]);this.renderer.drawSlice.call(this,N,A,z,this.seriesColors[Q],false);if(this.showDataLabels&&V[Q][2]*100>=this.dataLabelThreshold){var S,U=(A+z)/2,C;if(this.dataLabels=="label"){S=this.dataLabelFormatString||"%s";C=e.jqplot.sprintf(S,V[Q][0])}else{if(this.dataLabels=="value"){S=this.dataLabelFormatString||"%d";C=e.jqplot.sprintf(S,this.data[Q][1])}else{if(this.dataLabels=="percent"){S=this.dataLabelFormatString||"%d%%";C=e.jqplot.sprintf(S,V[Q][2]*100)}else{if(this.dataLabels.constructor==Array){S=this.dataLabelFormatString||"%s";C=e.jqplot.sprintf(S,this.dataLabels[Q])}}}}var n=this._innerRadius+this._thickness*this.dataLabelPositionFactor+this.sliceMargin+this.dataLabelNudge;var F=this._center[0]+Math.cos(U)*n+this.canvas._offsets.left;var E=this._center[1]+Math.sin(U)*n+this.canvas._offsets.top;var D=e('<span class="jqplot-donut-series jqplot-data-label" style="position:absolute;">'+C+"</span>").insertBefore(P.eventCanvas._elem);F-=D.width()/2;E-=D.height()/2;F=Math.round(F);E=Math.round(E);D.css({left:F,top:E})}}};e.jqplot.DonutAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.DonutAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.DonutAxisRenderer.prototype.constructor=e.jqplot.DonutAxisRenderer;e.jqplot.DonutAxisRenderer.prototype.init=function(n){this.tickRenderer=e.jqplot.DonutTickRenderer;e.extend(true,this,n);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};e.jqplot.DonutLegendRenderer=function(){e.jqplot.TableLegendRenderer.call(this)};e.jqplot.DonutLegendRenderer.prototype=new e.jqplot.TableLegendRenderer();e.jqplot.DonutLegendRenderer.prototype.constructor=e.jqplot.DonutLegendRenderer;e.jqplot.DonutLegendRenderer.prototype.init=function(n){this.numberRows=null;this.numberColumns=null;e.extend(true,this,n)};e.jqplot.DonutLegendRenderer.prototype.draw=function(){var q=this;if(this.show){var y=this._series;var B="position:absolute;";B+=(this.background)?"background:"+this.background+";":"";B+=(this.border)?"border:"+this.border+";":"";B+=(this.fontSize)?"font-size:"+this.fontSize+";":"";B+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";B+=(this.textColor)?"color:"+this.textColor+";":"";B+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";B+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";B+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";B+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=e('<table class="jqplot-table-legend" style="'+B+'"></table>');var F=false,x=false,n,v;var z=y[0];var o=new e.jqplot.ColorGenerator(z.seriesColors);if(z.show){var G=z.data;if(this.numberRows){n=this.numberRows;if(!this.numberColumns){v=Math.ceil(G.length/n)}else{v=this.numberColumns}}else{if(this.numberColumns){v=this.numberColumns;n=Math.ceil(G.length/this.numberColumns)}else{n=G.length;v=1}}var E,D,p,t,r,u,w,C;var A=0;for(E=0;E<n;E++){if(x){p=e('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{p=e('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(D=0;D<v;D++){if(A<G.length){u=this.labels[A]||G[A][0].toString();C=o.next();if(!x){if(E>0){F=true}else{F=false}}else{if(E==n-1){F=false}else{F=true}}w=(F)?this.rowSpacing:"0";t=e('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+w+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+C+';"></div></div></td>');r=e('<td class="jqplot-table-legend" style="padding-top:'+w+';"></td>');if(this.escapeHtml){r.text(u)}else{r.html(u)}if(x){r.prependTo(p);t.prependTo(p)}else{t.appendTo(p);r.appendTo(p)}F=true}A++}}}}return this._elem};function c(r,q,o){o=o||{};o.axesDefaults=o.axesDefaults||{};o.legend=o.legend||{};o.seriesDefaults=o.seriesDefaults||{};var n=false;if(o.seriesDefaults.renderer==e.jqplot.DonutRenderer){n=true}else{if(o.series){for(var p=0;p<o.series.length;p++){if(o.series[p].renderer==e.jqplot.DonutRenderer){n=true}}}}if(n){o.axesDefaults.renderer=e.jqplot.DonutAxisRenderer;o.legend.renderer=e.jqplot.DonutLegendRenderer;o.legend.preDraw=true;o.seriesDefaults.pointLabels={show:false}}}function g(r,q,o){for(var p=1;p<this.series.length;p++){if(!this.series[p]._previousSeries.length){for(var n=0;n<p;n++){if(this.series[p].renderer.constructor==e.jqplot.DonutRenderer&&this.series[n].renderer.constructor==e.jqplot.DonutRenderer){this.series[p]._previousSeries.push(this.series[n])}}}}for(p=0;p<this.series.length;p++){if(this.series[p].renderer.constructor==e.jqplot.DonutRenderer){this.series[p]._numberSeries=this.series.length;if(this.series[p].highlightMouseOver){this.series[p].highlightMouseDown=false}}}}var k=false;function l(n){for(var o=0;o<this.series.length;o++){this.series[o].seriesColors=this.seriesColors;this.series[o].colorGenerator=e.jqplot.colorGenerator}}function d(r,q,p){var o=r.series[q];var n=r.plugins.donutRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);o._highlightedPoint=p;r.plugins.donutRenderer.highlightedSeriesIndex=q;o.renderer.drawSlice.call(o,n._ctx,o._sliceAngles[p][0],o._sliceAngles[p][1],o.highlightColors[p],false)}function i(p){var n=p.plugins.donutRenderer.highlightCanvas;n._ctx.clearRect(0,0,n._ctx.canvas.width,n._ctx.canvas.height);for(var o=0;o<p.series.length;o++){p.series[o]._highlightedPoint=null}p.plugins.donutRenderer.highlightedSeriesIndex=null;p.target.trigger("jqplotDataUnhighlight")}function b(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataMouseOver");o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);if(s.series[p[0]].highlightMouseOver&&!(p[0]==s.plugins.donutRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.which=r.which;n.pageX=r.pageX;n.pageY=r.pageY;s.target.trigger(n,p);d(s,p[0],p[1])}}else{if(t==null){i(s)}}}function a(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];if(r.series[o[0]].highlightMouseDown&&!(o[0]==r.plugins.donutRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){var n=jQuery.Event("jqplotDataHighlight");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o);d(r,o[0],o[1])}}else{if(s==null){i(r)}}}function j(p,o,s,r,q){var n=q.plugins.donutRenderer.highlightedSeriesIndex;if(n!=null&&q.series[n].highlightMouseDown){i(q)}}function f(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var n=jQuery.Event("jqplotDataClick");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o)}}function m(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var n=s.plugins.donutRenderer.highlightedSeriesIndex;if(n!=null&&s.series[n].highlightMouseDown){i(s)}var o=jQuery.Event("jqplotDataRightClick");o.which=r.which;o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}function h(){if(this.plugins.donutRenderer&&this.plugins.donutRenderer.highlightCanvas){this.plugins.donutRenderer.highlightCanvas.resetCanvas();this.plugins.donutRenderer.highlightCanvas=null}this.plugins.donutRenderer={highlightedSeriesIndex:null};this.plugins.donutRenderer.highlightCanvas=new e.jqplot.GenericCanvas();var o=e(this.targetId+" .jqplot-data-label");if(o.length){e(o[0]).before(this.plugins.donutRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-donutRenderer-highlight-canvas",this._plotDimensions,this))}else{this.eventCanvas._elem.before(this.plugins.donutRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-donutRenderer-highlight-canvas",this._plotDimensions,this))}var n=this.plugins.donutRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(p){i(p.data.plot)})}e.jqplot.preInitHooks.push(c);e.jqplot.DonutTickRenderer=function(){e.jqplot.AxisTickRenderer.call(this)};e.jqplot.DonutTickRenderer.prototype=new e.jqplot.AxisTickRenderer();e.jqplot.DonutTickRenderer.prototype.constructor=e.jqplot.DonutTickRenderer})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.js
deleted file mode 100644
index 9dcd892c..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.js
+++ /dev/null
@@ -1,225 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
-
- /**
- * Class: $.jqplot.Dragable
- * Plugin to make plotted points dragable by the user.
- */
- $.jqplot.Dragable = function(options) {
- // Group: Properties
- this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false});
- this.shapeRenderer = new $.jqplot.ShapeRenderer();
- this.isDragging = false;
- this.isOver = false;
- this._ctx;
- this._elem;
- this._point;
- this._gridData;
- // prop: color
- // CSS color spec for the dragged point (and adjacent line segment or bar).
- this.color;
- // prop: constrainTo
- // Constrain dragging motion to an axis or to none.
- // Allowable values are 'none', 'x', 'y'
- this.constrainTo = 'none'; // 'x', 'y', or 'none';
- $.extend(true, this, options);
- };
-
- function DragCanvas() {
- $.jqplot.GenericCanvas.call(this);
- this.isDragging = false;
- this.isOver = false;
- this._neighbor;
- this._cursors = [];
- }
-
- DragCanvas.prototype = new $.jqplot.GenericCanvas();
- DragCanvas.prototype.constructor = DragCanvas;
-
-
- // called within scope of series
- $.jqplot.Dragable.parseOptions = function (defaults, opts) {
- var options = opts || {};
- this.plugins.dragable = new $.jqplot.Dragable(options.dragable);
- // since this function is called before series options are parsed,
- // we can set this here and it will be overridden if needed.
- this.isDragable = $.jqplot.config.enablePlugins;
- };
-
- // called within context of plot
- // create a canvas which we can draw on.
- // insert it before the eventCanvas, so eventCanvas will still capture events.
- // add a new DragCanvas object to the plot plugins to handle drawing on this new canvas.
- $.jqplot.Dragable.postPlotDraw = function() {
- // Memory Leaks patch
- if (this.plugins.dragable && this.plugins.dragable.highlightCanvas) {
- this.plugins.dragable.highlightCanvas.resetCanvas();
- this.plugins.dragable.highlightCanvas = null;
- }
-
- this.plugins.dragable = {previousCursor:'auto', isOver:false};
- this.plugins.dragable.dragCanvas = new DragCanvas();
-
- this.eventCanvas._elem.before(this.plugins.dragable.dragCanvas.createElement(this._gridPadding, 'jqplot-dragable-canvas', this._plotDimensions, this));
- var dctx = this.plugins.dragable.dragCanvas.setContext();
- };
-
- //$.jqplot.preInitHooks.push($.jqplot.Dragable.init);
- $.jqplot.preParseSeriesOptionsHooks.push($.jqplot.Dragable.parseOptions);
- $.jqplot.postDrawHooks.push($.jqplot.Dragable.postPlotDraw);
- $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMove]);
- $.jqplot.eventListenerHooks.push(['jqplotMouseDown', handleDown]);
- $.jqplot.eventListenerHooks.push(['jqplotMouseUp', handleUp]);
-
-
- function initDragPoint(plot, neighbor) {
- var s = plot.series[neighbor.seriesIndex];
- var drag = s.plugins.dragable;
-
- // first, init the mark renderer for the dragged point
- var smr = s.markerRenderer;
- var mr = drag.markerRenderer;
- mr.style = smr.style;
- mr.lineWidth = smr.lineWidth + 2.5;
- mr.size = smr.size + 5;
- if (!drag.color) {
- var rgba = $.jqplot.getColorComponents(smr.color);
- var newrgb = [rgba[0], rgba[1], rgba[2]];
- var alpha = (rgba[3] >= 0.6) ? rgba[3]*0.6 : rgba[3]*(2-rgba[3]);
- drag.color = 'rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+alpha+')';
- }
- mr.color = drag.color;
- mr.init();
-
- var start = (neighbor.pointIndex > 0) ? neighbor.pointIndex - 1 : 0;
- var end = neighbor.pointIndex+2;
- drag._gridData = s.gridData.slice(start, end);
- }
-
- function handleMove(ev, gridpos, datapos, neighbor, plot) {
- if (plot.plugins.dragable.dragCanvas.isDragging) {
- var dc = plot.plugins.dragable.dragCanvas;
- var dp = dc._neighbor;
- var s = plot.series[dp.seriesIndex];
- var drag = s.plugins.dragable;
- var gd = s.gridData;
-
- // compute the new grid position with any constraints.
- var x = (drag.constrainTo == 'y') ? dp.gridData[0] : gridpos.x;
- var y = (drag.constrainTo == 'x') ? dp.gridData[1] : gridpos.y;
-
- // compute data values for any listeners.
- var xu = s._xaxis.series_p2u(x);
- var yu = s._yaxis.series_p2u(y);
-
- // clear the canvas then redraw effect at new position.
- var ctx = dc._ctx;
- ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
-
- // adjust our gridData for the new mouse position
- if (dp.pointIndex > 0) {
- drag._gridData[1] = [x, y];
- }
- else {
- drag._gridData[0] = [x, y];
- }
- plot.series[dp.seriesIndex].draw(dc._ctx, {gridData:drag._gridData, shadow:false, preventJqPlotSeriesDrawTrigger:true, color:drag.color, markerOptions:{color:drag.color, shadow:false}, trendline:{show:false}});
- plot.target.trigger('jqplotSeriesPointChange', [dp.seriesIndex, dp.pointIndex, [xu,yu], [x,y]]);
- }
- else if (neighbor != null) {
- var series = plot.series[neighbor.seriesIndex];
- if (series.isDragable) {
- var dc = plot.plugins.dragable.dragCanvas;
- if (!dc.isOver) {
- dc._cursors.push(ev.target.style.cursor);
- ev.target.style.cursor = "pointer";
- }
- dc.isOver = true;
- }
- }
- else if (neighbor == null) {
- var dc = plot.plugins.dragable.dragCanvas;
- if (dc.isOver) {
- ev.target.style.cursor = dc._cursors.pop();
- dc.isOver = false;
- }
- }
- }
-
- function handleDown(ev, gridpos, datapos, neighbor, plot) {
- var dc = plot.plugins.dragable.dragCanvas;
- dc._cursors.push(ev.target.style.cursor);
- if (neighbor != null) {
- var s = plot.series[neighbor.seriesIndex];
- var drag = s.plugins.dragable;
- if (s.isDragable && !dc.isDragging) {
- dc._neighbor = neighbor;
- dc.isDragging = true;
- initDragPoint(plot, neighbor);
- drag.markerRenderer.draw(s.gridData[neighbor.pointIndex][0], s.gridData[neighbor.pointIndex][1], dc._ctx);
- ev.target.style.cursor = "move";
- plot.target.trigger('jqplotDragStart', [neighbor.seriesIndex, neighbor.pointIndex, gridpos, datapos]);
- }
- }
- // Just in case of a hickup, we'll clear the drag canvas and reset.
- else {
- var ctx = dc._ctx;
- ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
- dc.isDragging = false;
- }
- }
-
- function handleUp(ev, gridpos, datapos, neighbor, plot) {
- if (plot.plugins.dragable.dragCanvas.isDragging) {
- var dc = plot.plugins.dragable.dragCanvas;
- // clear the canvas
- var ctx = dc._ctx;
- ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
- dc.isDragging = false;
- // redraw the series canvas at the new point.
- var dp = dc._neighbor;
- var s = plot.series[dp.seriesIndex];
- var drag = s.plugins.dragable;
- // compute the new grid position with any constraints.
- var x = (drag.constrainTo == 'y') ? dp.data[0] : datapos[s.xaxis];
- var y = (drag.constrainTo == 'x') ? dp.data[1] : datapos[s.yaxis];
- // var x = datapos[s.xaxis];
- // var y = datapos[s.yaxis];
- s.data[dp.pointIndex][0] = x;
- s.data[dp.pointIndex][1] = y;
- plot.drawSeries({preventJqPlotSeriesDrawTrigger:true}, dp.seriesIndex);
- dc._neighbor = null;
- ev.target.style.cursor = dc._cursors.pop();
- plot.target.trigger('jqplotDragStop', [gridpos, datapos]);
- }
- }
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.min.js
deleted file mode 100644
index fc561ced..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.dragable.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(d){d.jqplot.Dragable=function(g){this.markerRenderer=new d.jqplot.MarkerRenderer({shadow:false});this.shapeRenderer=new d.jqplot.ShapeRenderer();this.isDragging=false;this.isOver=false;this._ctx;this._elem;this._point;this._gridData;this.color;this.constrainTo="none";d.extend(true,this,g)};function b(){d.jqplot.GenericCanvas.call(this);this.isDragging=false;this.isOver=false;this._neighbor;this._cursors=[]}b.prototype=new d.jqplot.GenericCanvas();b.prototype.constructor=b;d.jqplot.Dragable.parseOptions=function(i,h){var g=h||{};this.plugins.dragable=new d.jqplot.Dragable(g.dragable);this.isDragable=d.jqplot.config.enablePlugins};d.jqplot.Dragable.postPlotDraw=function(){if(this.plugins.dragable&&this.plugins.dragable.highlightCanvas){this.plugins.dragable.highlightCanvas.resetCanvas();this.plugins.dragable.highlightCanvas=null}this.plugins.dragable={previousCursor:"auto",isOver:false};this.plugins.dragable.dragCanvas=new b();this.eventCanvas._elem.before(this.plugins.dragable.dragCanvas.createElement(this._gridPadding,"jqplot-dragable-canvas",this._plotDimensions,this));var g=this.plugins.dragable.dragCanvas.setContext()};d.jqplot.preParseSeriesOptionsHooks.push(d.jqplot.Dragable.parseOptions);d.jqplot.postDrawHooks.push(d.jqplot.Dragable.postPlotDraw);d.jqplot.eventListenerHooks.push(["jqplotMouseMove",e]);d.jqplot.eventListenerHooks.push(["jqplotMouseDown",c]);d.jqplot.eventListenerHooks.push(["jqplotMouseUp",a]);function f(n,p){var q=n.series[p.seriesIndex];var m=q.plugins.dragable;var h=q.markerRenderer;var i=m.markerRenderer;i.style=h.style;i.lineWidth=h.lineWidth+2.5;i.size=h.size+5;if(!m.color){var l=d.jqplot.getColorComponents(h.color);var o=[l[0],l[1],l[2]];var k=(l[3]>=0.6)?l[3]*0.6:l[3]*(2-l[3]);m.color="rgba("+o[0]+","+o[1]+","+o[2]+","+k+")"}i.color=m.color;i.init();var g=(p.pointIndex>0)?p.pointIndex-1:0;var j=p.pointIndex+2;m._gridData=q.gridData.slice(g,j)}function e(o,l,h,t,m){if(m.plugins.dragable.dragCanvas.isDragging){var u=m.plugins.dragable.dragCanvas;var i=u._neighbor;var w=m.series[i.seriesIndex];var k=w.plugins.dragable;var r=w.gridData;var p=(k.constrainTo=="y")?i.gridData[0]:l.x;var n=(k.constrainTo=="x")?i.gridData[1]:l.y;var g=w._xaxis.series_p2u(p);var q=w._yaxis.series_p2u(n);var v=u._ctx;v.clearRect(0,0,v.canvas.width,v.canvas.height);if(i.pointIndex>0){k._gridData[1]=[p,n]}else{k._gridData[0]=[p,n]}m.series[i.seriesIndex].draw(u._ctx,{gridData:k._gridData,shadow:false,preventJqPlotSeriesDrawTrigger:true,color:k.color,markerOptions:{color:k.color,shadow:false},trendline:{show:false}});m.target.trigger("jqplotSeriesPointChange",[i.seriesIndex,i.pointIndex,[g,q],[p,n]])}else{if(t!=null){var j=m.series[t.seriesIndex];if(j.isDragable){var u=m.plugins.dragable.dragCanvas;if(!u.isOver){u._cursors.push(o.target.style.cursor);o.target.style.cursor="pointer"}u.isOver=true}}else{if(t==null){var u=m.plugins.dragable.dragCanvas;if(u.isOver){o.target.style.cursor=u._cursors.pop();u.isOver=false}}}}}function c(k,i,g,l,j){var m=j.plugins.dragable.dragCanvas;m._cursors.push(k.target.style.cursor);if(l!=null){var o=j.series[l.seriesIndex];var h=o.plugins.dragable;if(o.isDragable&&!m.isDragging){m._neighbor=l;m.isDragging=true;f(j,l);h.markerRenderer.draw(o.gridData[l.pointIndex][0],o.gridData[l.pointIndex][1],m._ctx);k.target.style.cursor="move";j.target.trigger("jqplotDragStart",[l.seriesIndex,l.pointIndex,i,g])}}else{var n=m._ctx;n.clearRect(0,0,n.canvas.width,n.canvas.height);m.isDragging=false}}function a(m,j,g,o,k){if(k.plugins.dragable.dragCanvas.isDragging){var p=k.plugins.dragable.dragCanvas;var q=p._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);p.isDragging=false;var h=p._neighbor;var r=k.series[h.seriesIndex];var i=r.plugins.dragable;var n=(i.constrainTo=="y")?h.data[0]:g[r.xaxis];var l=(i.constrainTo=="x")?h.data[1]:g[r.yaxis];r.data[h.pointIndex][0]=n;r.data[h.pointIndex][1]=l;k.drawSeries({preventJqPlotSeriesDrawTrigger:true},h.seriesIndex);p._neighbor=null;m.target.style.cursor=p._cursors.pop();k.target.trigger("jqplotDragStop",[j,g])}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.js
deleted file mode 100644
index a01770de..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.js
+++ /dev/null
@@ -1,305 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- // class $.jqplot.EnhancedLegendRenderer
- // Legend renderer which can specify the number of rows and/or columns in the legend.
- $.jqplot.EnhancedLegendRenderer = function(){
- $.jqplot.TableLegendRenderer.call(this);
- };
-
- $.jqplot.EnhancedLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
- $.jqplot.EnhancedLegendRenderer.prototype.constructor = $.jqplot.EnhancedLegendRenderer;
-
- // called with scope of legend.
- $.jqplot.EnhancedLegendRenderer.prototype.init = function(options) {
- // prop: numberRows
- // Maximum number of rows in the legend. 0 or null for unlimited.
- this.numberRows = null;
- // prop: numberColumns
- // Maximum number of columns in the legend. 0 or null for unlimited.
- this.numberColumns = null;
- // prop: seriesToggle
- // 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.
- this.seriesToggle = 'normal';
- // prop: seriesToggleReplot
- // 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.
- this.seriesToggleReplot = false;
- // prop: disableIEFading
- // 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.disableIEFading = true;
- $.extend(true, this, options);
-
- if (this.seriesToggle) {
- $.jqplot.postDrawHooks.push(postDraw);
- }
- };
-
- // called with scope of legend
- $.jqplot.EnhancedLegendRenderer.prototype.draw = function(offsets, plot) {
- var legend = this;
- if (this.show) {
- var series = this._series;
- var s;
- var ss = 'position:absolute;';
- ss += (this.background) ? 'background:'+this.background+';' : '';
- ss += (this.border) ? 'border:'+this.border+';' : '';
- ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
- ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
- ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
- ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : '';
- ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : '';
- ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : '';
- ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : '';
- this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
- if (this.seriesToggle) {
- this._elem.css('z-index', '3');
- }
-
- var pad = false,
- reverse = false,
- nr, nc;
- if (this.numberRows) {
- nr = this.numberRows;
- if (!this.numberColumns){
- nc = Math.ceil(series.length/nr);
- }
- else{
- nc = this.numberColumns;
- }
- }
- else if (this.numberColumns) {
- nc = this.numberColumns;
- nr = Math.ceil(series.length/this.numberColumns);
- }
- else {
- nr = series.length;
- nc = 1;
- }
-
- var i, j, tr, td1, td2, lt, rs, div, div0, div1;
- var idx = 0;
- // check to see if we need to reverse
- for (i=series.length-1; i>=0; i--) {
- if (nc == 1 && series[i]._stack || series[i].renderer.constructor == $.jqplot.BezierCurveRenderer){
- reverse = true;
- }
- }
-
- for (i=0; i<nr; i++) {
- tr = $(document.createElement('tr'));
- tr.addClass('jqplot-table-legend');
- if (reverse){
- tr.prependTo(this._elem);
- }
- else{
- tr.appendTo(this._elem);
- }
- for (j=0; j<nc; j++) {
- if (idx < series.length && (series[idx].show || series[idx].showLabel)){
- s = series[idx];
- lt = this.labels[idx] || s.label.toString();
- if (lt) {
- var color = s.color;
- if (!reverse){
- if (i>0){
- pad = true;
- }
- else{
- pad = false;
- }
- }
- else{
- if (i == nr -1){
- pad = false;
- }
- else{
- pad = true;
- }
- }
- rs = (pad) ? this.rowSpacing : '0';
-
- td1 = $(document.createElement('td'));
- td1.addClass('jqplot-table-legend jqplot-table-legend-swatch');
- td1.css({textAlign: 'center', paddingTop: rs});
-
- div0 = $(document.createElement('div'));
- div0.addClass('jqplot-table-legend-swatch-outline');
- div1 = $(document.createElement('div'));
- div1.addClass('jqplot-table-legend-swatch');
- div1.css({backgroundColor: color, borderColor: color});
-
- td1.append(div0.append(div1));
-
- td2 = $(document.createElement('td'));
- td2.addClass('jqplot-table-legend jqplot-table-legend-label');
- td2.css('paddingTop', rs);
-
- // td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
- // '<div><div class="jqplot-table-legend-swatch" style="background-color:'+color+';border-color:'+color+';"></div>'+
- // '</div></td>');
- // td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
- if (this.escapeHtml){
- td2.text(lt);
- }
- else {
- td2.html(lt);
- }
- if (reverse) {
- if (this.showLabels) {td2.prependTo(tr);}
- if (this.showSwatches) {td1.prependTo(tr);}
- }
- else {
- if (this.showSwatches) {td1.appendTo(tr);}
- if (this.showLabels) {td2.appendTo(tr);}
- }
-
- if (this.seriesToggle) {
-
- // add an overlay for clicking series on/off
- // div0 = $(document.createElement('div'));
- // div0.addClass('jqplot-table-legend-overlay');
- // div0.css({position:'relative', left:0, top:0, height:'100%', width:'100%'});
- // tr.append(div0);
-
- var speed;
- if (typeof(this.seriesToggle) === 'string' || typeof(this.seriesToggle) === 'number') {
- if (!$.jqplot.use_excanvas || !this.disableIEFading) {
- speed = this.seriesToggle;
- }
- }
- if (this.showSwatches) {
- td1.bind('click', {series:s, speed:speed, plot: plot, replot:this.seriesToggleReplot}, handleToggle);
- td1.addClass('jqplot-seriesToggle');
- }
- if (this.showLabels) {
- td2.bind('click', {series:s, speed:speed, plot: plot, replot:this.seriesToggleReplot}, handleToggle);
- td2.addClass('jqplot-seriesToggle');
- }
-
- // for series that are already hidden, add the hidden class
- if (!s.show && s.showLabel) {
- td1.addClass('jqplot-series-hidden');
- td2.addClass('jqplot-series-hidden');
- }
- }
-
- pad = true;
- }
- }
- idx++;
- }
-
- td1 = td2 = div0 = div1 = null;
- }
- }
- return this._elem;
- };
-
- var handleToggle = function (ev) {
- var d = ev.data,
- s = d.series,
- replot = d.replot,
- plot = d.plot,
- speed = d.speed,
- sidx = s.index,
- showing = false;
-
- if (s.canvas._elem.is(':hidden') || !s.show) {
- showing = true;
- }
-
- var doLegendToggle = function() {
-
- if (replot) {
- var opts = {};
-
- if ($.isPlainObject(replot)) {
- $.extend(true, opts, replot);
- }
-
- plot.replot(opts);
- // if showing, there was no canvas element to fade in, so hide here
- // and then do a fade in.
- if (showing && speed) {
- var s = plot.series[sidx];
-
- if (s.shadowCanvas._elem) {
- s.shadowCanvas._elem.hide().fadeIn(speed);
- }
- s.canvas._elem.hide().fadeIn(speed);
- s.canvas._elem.nextAll('.jqplot-point-label.jqplot-series-'+s.index).hide().fadeIn(speed);
- }
-
- }
-
- else {
- var s = plot.series[sidx];
-
- if (s.canvas._elem.is(':hidden') || !s.show) {
- // Not sure if there is a better way to check for showSwatches and showLabels === true.
- // Test for "undefined" since default values for both showSwatches and showLables is true.
- if (typeof plot.options.legend.showSwatches === 'undefined' || plot.options.legend.showSwatches === true) {
- plot.legend._elem.find('td').eq(sidx * 2).addClass('jqplot-series-hidden');
- }
- if (typeof plot.options.legend.showLabels === 'undefined' || plot.options.legend.showLabels === true) {
- plot.legend._elem.find('td').eq((sidx * 2) + 1).addClass('jqplot-series-hidden');
- }
- }
- else {
- if (typeof plot.options.legend.showSwatches === 'undefined' || plot.options.legend.showSwatches === true) {
- plot.legend._elem.find('td').eq(sidx * 2).removeClass('jqplot-series-hidden');
- }
- if (typeof plot.options.legend.showLabels === 'undefined' || plot.options.legend.showLabels === true) {
- plot.legend._elem.find('td').eq((sidx * 2) + 1).removeClass('jqplot-series-hidden');
- }
- }
-
- }
-
- };
-
- s.toggleDisplay(ev, doLegendToggle);
- };
-
- // called with scope of plot.
- var postDraw = function () {
- if (this.legend.renderer.constructor == $.jqplot.EnhancedLegendRenderer && this.legend.seriesToggle){
- var e = this.legend._elem.detach();
- this.eventCanvas._elem.after(e);
- }
- };
-})(jQuery);
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js
deleted file mode 100644
index 029844e7..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(c){c.jqplot.EnhancedLegendRenderer=function(){c.jqplot.TableLegendRenderer.call(this)};c.jqplot.EnhancedLegendRenderer.prototype=new c.jqplot.TableLegendRenderer();c.jqplot.EnhancedLegendRenderer.prototype.constructor=c.jqplot.EnhancedLegendRenderer;c.jqplot.EnhancedLegendRenderer.prototype.init=function(d){this.numberRows=null;this.numberColumns=null;this.seriesToggle="normal";this.seriesToggleReplot=false;this.disableIEFading=true;c.extend(true,this,d);if(this.seriesToggle){c.jqplot.postDrawHooks.push(b)}};c.jqplot.EnhancedLegendRenderer.prototype.draw=function(m,y){var f=this;if(this.show){var r=this._series;var u;var w="position:absolute;";w+=(this.background)?"background:"+this.background+";":"";w+=(this.border)?"border:"+this.border+";":"";w+=(this.fontSize)?"font-size:"+this.fontSize+";":"";w+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";w+=(this.textColor)?"color:"+this.textColor+";":"";w+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";w+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";w+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";w+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=c('<table class="jqplot-table-legend" style="'+w+'"></table>');if(this.seriesToggle){this._elem.css("z-index","3")}var C=false,q=false,d,o;if(this.numberRows){d=this.numberRows;if(!this.numberColumns){o=Math.ceil(r.length/d)}else{o=this.numberColumns}}else{if(this.numberColumns){o=this.numberColumns;d=Math.ceil(r.length/this.numberColumns)}else{d=r.length;o=1}}var B,z,e,l,k,n,p,t,h,g;var v=0;for(B=r.length-1;B>=0;B--){if(o==1&&r[B]._stack||r[B].renderer.constructor==c.jqplot.BezierCurveRenderer){q=true}}for(B=0;B<d;B++){e=c(document.createElement("tr"));e.addClass("jqplot-table-legend");if(q){e.prependTo(this._elem)}else{e.appendTo(this._elem)}for(z=0;z<o;z++){if(v<r.length&&(r[v].show||r[v].showLabel)){u=r[v];n=this.labels[v]||u.label.toString();if(n){var x=u.color;if(!q){if(B>0){C=true}else{C=false}}else{if(B==d-1){C=false}else{C=true}}p=(C)?this.rowSpacing:"0";l=c(document.createElement("td"));l.addClass("jqplot-table-legend jqplot-table-legend-swatch");l.css({textAlign:"center",paddingTop:p});h=c(document.createElement("div"));h.addClass("jqplot-table-legend-swatch-outline");g=c(document.createElement("div"));g.addClass("jqplot-table-legend-swatch");g.css({backgroundColor:x,borderColor:x});l.append(h.append(g));k=c(document.createElement("td"));k.addClass("jqplot-table-legend jqplot-table-legend-label");k.css("paddingTop",p);if(this.escapeHtml){k.text(n)}else{k.html(n)}if(q){if(this.showLabels){k.prependTo(e)}if(this.showSwatches){l.prependTo(e)}}else{if(this.showSwatches){l.appendTo(e)}if(this.showLabels){k.appendTo(e)}}if(this.seriesToggle){var A;if(typeof(this.seriesToggle)==="string"||typeof(this.seriesToggle)==="number"){if(!c.jqplot.use_excanvas||!this.disableIEFading){A=this.seriesToggle}}if(this.showSwatches){l.bind("click",{series:u,speed:A,plot:y,replot:this.seriesToggleReplot},a);l.addClass("jqplot-seriesToggle")}if(this.showLabels){k.bind("click",{series:u,speed:A,plot:y,replot:this.seriesToggleReplot},a);k.addClass("jqplot-seriesToggle")}if(!u.show&&u.showLabel){l.addClass("jqplot-series-hidden");k.addClass("jqplot-series-hidden")}}C=true}}v++}l=k=h=g=null}}return this._elem};var a=function(j){var i=j.data,m=i.series,k=i.replot,h=i.plot,f=i.speed,l=m.index,g=false;if(m.canvas._elem.is(":hidden")||!m.show){g=true}var e=function(){if(k){var n={};if(c.isPlainObject(k)){c.extend(true,n,k)}h.replot(n);if(g&&f){var d=h.series[l];if(d.shadowCanvas._elem){d.shadowCanvas._elem.hide().fadeIn(f)}d.canvas._elem.hide().fadeIn(f);d.canvas._elem.nextAll(".jqplot-point-label.jqplot-series-"+d.index).hide().fadeIn(f)}}else{var d=h.series[l];if(d.canvas._elem.is(":hidden")||!d.show){if(typeof h.options.legend.showSwatches==="undefined"||h.options.legend.showSwatches===true){h.legend._elem.find("td").eq(l*2).addClass("jqplot-series-hidden")}if(typeof h.options.legend.showLabels==="undefined"||h.options.legend.showLabels===true){h.legend._elem.find("td").eq((l*2)+1).addClass("jqplot-series-hidden")}}else{if(typeof h.options.legend.showSwatches==="undefined"||h.options.legend.showSwatches===true){h.legend._elem.find("td").eq(l*2).removeClass("jqplot-series-hidden")}if(typeof h.options.legend.showLabels==="undefined"||h.options.legend.showLabels===true){h.legend._elem.find("td").eq((l*2)+1).removeClass("jqplot-series-hidden")}}}};m.toggleDisplay(j,e)};var b=function(){if(this.legend.renderer.constructor==c.jqplot.EnhancedLegendRenderer&&this.legend.seriesToggle){var d=this.legend._elem.detach();this.eventCanvas._elem.after(d)}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.js
deleted file mode 100644
index e79bf887..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.js
+++ /dev/null
@@ -1,942 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- /**
- * Class: $.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.
- */
- $.jqplot.FunnelRenderer = function(){
- $.jqplot.LineRenderer.call(this);
- };
-
- $.jqplot.FunnelRenderer.prototype = new $.jqplot.LineRenderer();
- $.jqplot.FunnelRenderer.prototype.constructor = $.jqplot.FunnelRenderer;
-
- // called with scope of a series
- $.jqplot.FunnelRenderer.prototype.init = function(options, plot) {
- // Group: Properties
- //
- // prop: padding
- // padding between the funnel and plot edges, legend, etc.
- this.padding = {top: 20, right: 20, bottom: 20, left: 20};
- // prop: sectionMargin
- // spacing between funnel sections in pixels.
- this.sectionMargin = 6;
- // prop: fill
- // true or false, wether to fill the areas.
- this.fill = true;
- // prop: shadowOffset
- // offset of the shadow from the area and offset of
- // each succesive stroke of the shadow from the last.
- this.shadowOffset = 2;
- // prop: shadowAlpha
- // transparency of the shadow (0 = transparent, 1 = opaque)
- this.shadowAlpha = 0.07;
- // prop: shadowDepth
- // number of strokes to apply to the shadow,
- // each stroke offset shadowOffset from the last.
- this.shadowDepth = 5;
- // prop: highlightMouseOver
- // True to highlight area when moused over.
- // This must be false to enable highlightMouseDown to highlight when clicking on a area.
- this.highlightMouseOver = true;
- // prop: highlightMouseDown
- // True to highlight when a mouse button is pressed over a area.
- // This will be disabled if highlightMouseOver is true.
- this.highlightMouseDown = false;
- // prop: highlightColors
- // array of colors to use when highlighting an area.
- this.highlightColors = [];
- // prop: widthRatio
- // The ratio of the width of the top of the funnel to the bottom.
- // a ratio of 0 will make an upside down pyramid.
- this.widthRatio = 0.2;
- // prop: lineWidth
- // width of line if areas are stroked and not filled.
- this.lineWidth = 2;
- // prop: dataLabels
- // Either 'label', 'value', 'percent' or an array of labels to place on the pie slices.
- // Defaults to percentage of each pie slice.
- this.dataLabels = 'percent';
- // prop: showDataLabels
- // true to show data labels on slices.
- this.showDataLabels = false;
- // prop: dataLabelFormatString
- // Format string for data labels. If none, '%s' is used for "label" and for arrays, '%d' for value and '%d%%' for percentage.
- this.dataLabelFormatString = null;
- // prop: dataLabelThreshold
- // 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.
- this.dataLabelThreshold = 3;
- this._type = 'funnel';
-
- this.tickRenderer = $.jqplot.FunnelTickRenderer;
-
- // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
- if (options.highlightMouseDown && options.highlightMouseOver == null) {
- options.highlightMouseOver = false;
- }
-
- $.extend(true, this, options);
-
- // index of the currenty highlighted point, if any
- this._highlightedPoint = null;
-
- // lengths of bases, or horizontal sides of areas of trapezoid.
- this._bases = [];
- // total area
- this._atot;
- // areas of segments.
- this._areas = [];
- // vertical lengths of segments.
- this._lengths = [];
- // angle of the funnel to vertical.
- this._angle;
- this._dataIndices = [];
-
- // sort data
- this._unorderedData = $.extend(true, [], this.data);
- var idxs = $.extend(true, [], this.data);
- for (var i=0; i<idxs.length; i++) {
- idxs[i].push(i);
- }
- this.data.sort( function (a, b) { return b[1] - a[1]; } );
- idxs.sort( function (a, b) { return b[1] - a[1]; });
- for (var i=0; i<idxs.length; i++) {
- this._dataIndices.push(idxs[i][2]);
- }
-
- // set highlight colors if none provided
- if (this.highlightColors.length == 0) {
- for (var i=0; i<this.seriesColors.length; i++){
- var rgba = $.jqplot.getColorComponents(this.seriesColors[i]);
- var newrgb = [rgba[0], rgba[1], rgba[2]];
- var sum = newrgb[0] + newrgb[1] + newrgb[2];
- for (var j=0; j<3; j++) {
- // when darkening, lowest color component can be is 60.
- newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.4 * (255 - newrgb[j]);
- newrgb[j] = parseInt(newrgb[j], 10);
- }
- this.highlightColors.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')');
- }
- }
-
- plot.postParseOptionsHooks.addOnce(postParseOptions);
- plot.postInitHooks.addOnce(postInit);
- plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
- plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
- plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
- plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
- plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
- plot.postDrawHooks.addOnce(postPlotDraw);
-
- };
-
- // gridData will be of form [label, percentage of total]
- $.jqplot.FunnelRenderer.prototype.setGridData = function(plot) {
- // set gridData property. This will hold angle in radians of each data point.
- var sum = 0;
- var td = [];
- for (var i=0; i<this.data.length; i++){
- sum += this.data[i][1];
- td.push([this.data[i][0], this.data[i][1]]);
- }
-
- // normalize y values, so areas are proportional.
- for (var i=0; i<td.length; i++) {
- td[i][1] = td[i][1]/sum;
- }
-
- this._bases = new Array(td.length + 1);
- this._lengths = new Array(td.length);
-
- this.gridData = td;
- };
-
- $.jqplot.FunnelRenderer.prototype.makeGridData = function(data, plot) {
- // set gridData property. This will hold angle in radians of each data point.
- var sum = 0;
- var td = [];
- for (var i=0; i<this.data.length; i++){
- sum += this.data[i][1];
- td.push([this.data[i][0], this.data[i][1]]);
- }
-
- // normalize y values, so areas are proportional.
- for (var i=0; i<td.length; i++) {
- td[i][1] = td[i][1]/sum;
- }
-
- this._bases = new Array(td.length + 1);
- this._lengths = new Array(td.length);
-
- return td;
- };
-
- $.jqplot.FunnelRenderer.prototype.drawSection = function (ctx, vertices, color, isShadow) {
- var fill = this.fill;
- var lineWidth = this.lineWidth;
- ctx.save();
-
- if (isShadow) {
- for (var i=0; i<this.shadowDepth; i++) {
- ctx.save();
- ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));
- doDraw();
- }
- }
-
- else {
- doDraw();
- }
-
- function doDraw () {
- ctx.beginPath();
- ctx.fillStyle = color;
- ctx.strokeStyle = color;
- ctx.lineWidth = lineWidth;
- ctx.moveTo(vertices[0][0], vertices[0][1]);
- for (var i=1; i<4; i++) {
- ctx.lineTo(vertices[i][0], vertices[i][1]);
- }
- ctx.closePath();
- if (fill) {
- ctx.fill();
- }
- else {
- ctx.stroke();
- }
- }
-
- if (isShadow) {
- for (var i=0; i<this.shadowDepth; i++) {
- ctx.restore();
- }
- }
-
- ctx.restore();
- };
-
- // called with scope of series
- $.jqplot.FunnelRenderer.prototype.draw = function (ctx, gd, options, plot) {
- var i;
- var opts = (options != undefined) ? options : {};
- // offset and direction of offset due to legend placement
- var offx = 0;
- var offy = 0;
- var trans = 1;
- this._areas = [];
- // var colorGenerator = new this.colorGenerator(this.seriesColors);
- if (options.legendInfo && options.legendInfo.placement == 'insideGrid') {
- var li = options.legendInfo;
- switch (li.location) {
- case 'nw':
- offx = li.width + li.xoffset;
- break;
- case 'w':
- offx = li.width + li.xoffset;
- break;
- case 'sw':
- offx = li.width + li.xoffset;
- break;
- case 'ne':
- offx = li.width + li.xoffset;
- trans = -1;
- break;
- case 'e':
- offx = li.width + li.xoffset;
- trans = -1;
- break;
- case 'se':
- offx = li.width + li.xoffset;
- trans = -1;
- break;
- case 'n':
- offy = li.height + li.yoffset;
- break;
- case 's':
- offy = li.height + li.yoffset;
- trans = -1;
- break;
- default:
- break;
- }
- }
-
- var loff = (trans==1) ? this.padding.left + offx : this.padding.left;
- var toff = (trans==1) ? this.padding.top + offy : this.padding.top;
- var roff = (trans==-1) ? this.padding.right + offx : this.padding.right;
- var boff = (trans==-1) ? this.padding.bottom + offy : this.padding.bottom;
-
- var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
- var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
- var fill = (opts.fill != undefined) ? opts.fill : this.fill;
- var cw = ctx.canvas.width;
- var ch = ctx.canvas.height;
- this._bases[0] = cw - loff - roff;
- var ltot = this._length = ch - toff - boff;
-
- var hend = this._bases[0]*this.widthRatio;
- this._atot = ltot/2 * (this._bases[0] + this._bases[0]*this.widthRatio);
-
- this._angle = Math.atan((this._bases[0] - hend)/2/ltot);
-
- for (i=0; i<gd.length; i++) {
- this._areas.push(gd[i][1] * this._atot);
- }
-
-
- var guess, err, count, lsum=0;
- var tolerance = 0.0001;
-
- for (i=0; i<this._areas.length; i++) {
- guess = this._areas[i]/this._bases[i];
- err = 999999;
- this._lengths[i] = guess;
- count = 0;
- while (err > this._lengths[i]*tolerance && count < 100) {
- this._lengths[i] = this._areas[i]/(this._bases[i] - this._lengths[i] * Math.tan(this._angle));
- err = Math.abs(this._lengths[i] - guess);
- this._bases[i+1] = this._bases[i] - (2*this._lengths[i]*Math.tan(this._angle));
- guess = this._lengths[i];
- count++;
- }
- lsum += this._lengths[i];
- }
-
- // figure out vertices of each section
- this._vertices = new Array(gd.length);
-
- // these are 4 coners of entire trapezoid
- var p0 = [loff, toff],
- p1 = [loff+this._bases[0], toff],
- p2 = [loff + (this._bases[0] - this._bases[this._bases.length-1])/2, toff + this._length],
- p3 = [p2[0] + this._bases[this._bases.length-1], p2[1]];
-
- // equations of right and left sides, returns x, y values given height of section (y value)
- function findleft (l) {
- var m = (p0[1] - p2[1])/(p0[0] - p2[0]);
- var b = p0[1] - m*p0[0];
- var y = l + p0[1];
-
- return [(y - b)/m, y];
- }
-
- function findright (l) {
- var m = (p1[1] - p3[1])/(p1[0] - p3[0]);
- var b = p1[1] - m*p1[0];
- var y = l + p1[1];
-
- return [(y - b)/m, y];
- }
-
- var x = offx, y = offy;
- var h=0, adj=0;
-
- for (i=0; i<gd.length; i++) {
- this._vertices[i] = new Array();
- var v = this._vertices[i];
- var sm = this.sectionMargin;
- if (i == 0) {
- adj = 0;
- }
- if (i == 1) {
- adj = sm/3;
- }
- else if (i > 0 && i < gd.length-1) {
- adj = sm/2;
- }
- else if (i == gd.length -1) {
- adj = 2*sm/3;
- }
- v.push(findleft(h+adj));
- v.push(findright(h+adj));
- h += this._lengths[i];
- if (i == 0) {
- adj = -2*sm/3;
- }
- else if (i > 0 && i < gd.length-1) {
- adj = -sm/2;
- }
- else if (i == gd.length - 1) {
- adj = 0;
- }
- v.push(findright(h+adj));
- v.push(findleft(h+adj));
-
- }
-
- if (this.shadow) {
- var shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')';
- for (var i=0; i<gd.length; i++) {
- this.renderer.drawSection.call (this, ctx, this._vertices[i], shadowColor, true);
- }
-
- }
- for (var i=0; i<gd.length; i++) {
- var v = this._vertices[i];
- this.renderer.drawSection.call (this, ctx, v, this.seriesColors[i]);
-
- if (this.showDataLabels && gd[i][1]*100 >= this.dataLabelThreshold) {
- var fstr, label;
-
- if (this.dataLabels == 'label') {
- fstr = this.dataLabelFormatString || '%s';
- label = $.jqplot.sprintf(fstr, gd[i][0]);
- }
- else if (this.dataLabels == 'value') {
- fstr = this.dataLabelFormatString || '%d';
- label = $.jqplot.sprintf(fstr, this.data[i][1]);
- }
- else if (this.dataLabels == 'percent') {
- fstr = this.dataLabelFormatString || '%d%%';
- label = $.jqplot.sprintf(fstr, gd[i][1]*100);
- }
- else if (this.dataLabels.constructor == Array) {
- fstr = this.dataLabelFormatString || '%s';
- label = $.jqplot.sprintf(fstr, this.dataLabels[this._dataIndices[i]]);
- }
-
- var fact = (this._radius ) * this.dataLabelPositionFactor + this.sliceMargin + this.dataLabelNudge;
-
- var x = (v[0][0] + v[1][0])/2 + this.canvas._offsets.left;
- var y = (v[1][1] + v[2][1])/2 + this.canvas._offsets.top;
-
- var labelelem = $('<span class="jqplot-funnel-series jqplot-data-label" style="position:absolute;">' + label + '</span>').insertBefore(plot.eventCanvas._elem);
- x -= labelelem.width()/2;
- y -= labelelem.height()/2;
- x = Math.round(x);
- y = Math.round(y);
- labelelem.css({left: x, top: y});
- }
-
- }
-
- };
-
- $.jqplot.FunnelAxisRenderer = function() {
- $.jqplot.LinearAxisRenderer.call(this);
- };
-
- $.jqplot.FunnelAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
- $.jqplot.FunnelAxisRenderer.prototype.constructor = $.jqplot.FunnelAxisRenderer;
-
-
- // There are no traditional axes on a funnel chart. We just need to provide
- // dummy objects with properties so the plot will render.
- // called with scope of axis object.
- $.jqplot.FunnelAxisRenderer.prototype.init = function(options){
- //
- this.tickRenderer = $.jqplot.FunnelTickRenderer;
- $.extend(true, this, options);
- // I don't think I'm going to need _dataBounds here.
- // have to go Axis scaling in a way to fit chart onto plot area
- // and provide u2p and p2u functionality for mouse cursor, etc.
- // for convienence set _dataBounds to 0 and 100 and
- // set min/max to 0 and 100.
- this._dataBounds = {min:0, max:100};
- this.min = 0;
- this.max = 100;
- this.showTicks = false;
- this.ticks = [];
- this.showMark = false;
- this.show = false;
- };
-
-
-
- /**
- * Class: $.jqplot.FunnelLegendRenderer
- * Legend Renderer specific to funnel plots. Set by default
- * when the user creates a funnel plot.
- */
- $.jqplot.FunnelLegendRenderer = function(){
- $.jqplot.TableLegendRenderer.call(this);
- };
-
- $.jqplot.FunnelLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
- $.jqplot.FunnelLegendRenderer.prototype.constructor = $.jqplot.FunnelLegendRenderer;
-
- $.jqplot.FunnelLegendRenderer.prototype.init = function(options) {
- // Group: Properties
- //
- // prop: numberRows
- // Maximum number of rows in the legend. 0 or null for unlimited.
- this.numberRows = null;
- // prop: numberColumns
- // Maximum number of columns in the legend. 0 or null for unlimited.
- this.numberColumns = null;
- $.extend(true, this, options);
- };
-
- // called with context of legend
- $.jqplot.FunnelLegendRenderer.prototype.draw = function() {
- var legend = this;
- if (this.show) {
- var series = this._series;
- var ss = 'position:absolute;';
- ss += (this.background) ? 'background:'+this.background+';' : '';
- ss += (this.border) ? 'border:'+this.border+';' : '';
- ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
- ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
- ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
- ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : '';
- ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : '';
- ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : '';
- ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : '';
- this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
- // Funnel charts legends don't go by number of series, but by number of data points
- // in the series. Refactor things here for that.
-
- var pad = false,
- reverse = false,
- nr, nc;
- var s = series[0];
- var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors);
-
- if (s.show) {
- var pd = s.data;
- if (this.numberRows) {
- nr = this.numberRows;
- if (!this.numberColumns){
- nc = Math.ceil(pd.length/nr);
- }
- else{
- nc = this.numberColumns;
- }
- }
- else if (this.numberColumns) {
- nc = this.numberColumns;
- nr = Math.ceil(pd.length/this.numberColumns);
- }
- else {
- nr = pd.length;
- nc = 1;
- }
-
- var i, j, tr, td1, td2, lt, rs, color;
- var idx = 0;
-
- for (i=0; i<nr; i++) {
- if (reverse){
- tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem);
- }
- else{
- tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);
- }
- for (j=0; j<nc; j++) {
- if (idx < pd.length){
- lt = this.labels[idx] || pd[idx][0].toString();
- color = colorGenerator.next();
- if (!reverse){
- if (i>0){
- pad = true;
- }
- else{
- pad = false;
- }
- }
- else{
- if (i == nr -1){
- pad = false;
- }
- else{
- pad = true;
- }
- }
- rs = (pad) ? this.rowSpacing : '0';
-
- td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
- '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+
- '</div></td>');
- td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
- if (this.escapeHtml){
- td2.text(lt);
- }
- else {
- td2.html(lt);
- }
- if (reverse) {
- td2.prependTo(tr);
- td1.prependTo(tr);
- }
- else {
- td1.appendTo(tr);
- td2.appendTo(tr);
- }
- pad = true;
- }
- idx++;
- }
- }
- }
- }
- return this._elem;
- };
-
- // $.jqplot.FunnelLegendRenderer.prototype.pack = function(offsets) {
- // if (this.show) {
- // // fake a grid for positioning
- // var grid = {_top:offsets.top, _left:offsets.left, _right:offsets.right, _bottom:this._plotDimensions.height - offsets.bottom};
- // if (this.placement == 'insideGrid') {
- // switch (this.location) {
- // case 'nw':
- // var a = grid._left + this.xoffset;
- // var b = grid._top + this.yoffset;
- // this._elem.css('left', a);
- // this._elem.css('top', b);
- // break;
- // case 'n':
- // var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
- // var b = grid._top + this.yoffset;
- // this._elem.css('left', a);
- // this._elem.css('top', b);
- // break;
- // case 'ne':
- // var a = offsets.right + this.xoffset;
- // var b = grid._top + this.yoffset;
- // this._elem.css({right:a, top:b});
- // break;
- // case 'e':
- // var a = offsets.right + this.xoffset;
- // var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
- // this._elem.css({right:a, top:b});
- // break;
- // case 'se':
- // var a = offsets.right + this.xoffset;
- // var b = offsets.bottom + this.yoffset;
- // this._elem.css({right:a, bottom:b});
- // break;
- // case 's':
- // var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
- // var b = offsets.bottom + this.yoffset;
- // this._elem.css({left:a, bottom:b});
- // break;
- // case 'sw':
- // var a = grid._left + this.xoffset;
- // var b = offsets.bottom + this.yoffset;
- // this._elem.css({left:a, bottom:b});
- // break;
- // case 'w':
- // var a = grid._left + this.xoffset;
- // var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
- // this._elem.css({left:a, top:b});
- // break;
- // default: // same as 'se'
- // var a = grid._right - this.xoffset;
- // var b = grid._bottom + this.yoffset;
- // this._elem.css({right:a, bottom:b});
- // break;
- // }
- //
- // }
- // else {
- // switch (this.location) {
- // case 'nw':
- // var a = this._plotDimensions.width - grid._left + this.xoffset;
- // var b = grid._top + this.yoffset;
- // this._elem.css('right', a);
- // this._elem.css('top', b);
- // break;
- // case 'n':
- // var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
- // var b = this._plotDimensions.height - grid._top + this.yoffset;
- // this._elem.css('left', a);
- // this._elem.css('bottom', b);
- // break;
- // case 'ne':
- // var a = this._plotDimensions.width - offsets.right + this.xoffset;
- // var b = grid._top + this.yoffset;
- // this._elem.css({left:a, top:b});
- // break;
- // case 'e':
- // var a = this._plotDimensions.width - offsets.right + this.xoffset;
- // var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
- // this._elem.css({left:a, top:b});
- // break;
- // case 'se':
- // var a = this._plotDimensions.width - offsets.right + this.xoffset;
- // var b = offsets.bottom + this.yoffset;
- // this._elem.css({left:a, bottom:b});
- // break;
- // case 's':
- // var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
- // var b = this._plotDimensions.height - offsets.bottom + this.yoffset;
- // this._elem.css({left:a, top:b});
- // break;
- // case 'sw':
- // var a = this._plotDimensions.width - grid._left + this.xoffset;
- // var b = offsets.bottom + this.yoffset;
- // this._elem.css({right:a, bottom:b});
- // break;
- // case 'w':
- // var a = this._plotDimensions.width - grid._left + this.xoffset;
- // var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
- // this._elem.css({right:a, top:b});
- // break;
- // default: // same as 'se'
- // var a = grid._right - this.xoffset;
- // var b = grid._bottom + this.yoffset;
- // this._elem.css({right:a, bottom:b});
- // break;
- // }
- // }
- // }
- // };
-
- // setup default renderers for axes and legend so user doesn't have to
- // called with scope of plot
- function preInit(target, data, options) {
- options = options || {};
- options.axesDefaults = options.axesDefaults || {};
- options.legend = options.legend || {};
- options.seriesDefaults = options.seriesDefaults || {};
- // only set these if there is a funnel series
- var setopts = false;
- if (options.seriesDefaults.renderer == $.jqplot.FunnelRenderer) {
- setopts = true;
- }
- else if (options.series) {
- for (var i=0; i < options.series.length; i++) {
- if (options.series[i].renderer == $.jqplot.FunnelRenderer) {
- setopts = true;
- }
- }
- }
-
- if (setopts) {
- options.axesDefaults.renderer = $.jqplot.FunnelAxisRenderer;
- options.legend.renderer = $.jqplot.FunnelLegendRenderer;
- options.legend.preDraw = true;
- options.sortData = false;
- options.seriesDefaults.pointLabels = {show: false};
- }
- }
-
- function postInit(target, data, options) {
- // if multiple series, add a reference to the previous one so that
- // funnel rings can nest.
- for (var i=0; i<this.series.length; i++) {
- if (this.series[i].renderer.constructor == $.jqplot.FunnelRenderer) {
- // don't allow mouseover and mousedown at same time.
- if (this.series[i].highlightMouseOver) {
- this.series[i].highlightMouseDown = false;
- }
- }
- }
- }
-
- // called with scope of plot
- function postParseOptions(options) {
- for (var i=0; i<this.series.length; i++) {
- this.series[i].seriesColors = this.seriesColors;
- this.series[i].colorGenerator = $.jqplot.colorGenerator;
- }
- }
-
- function highlight (plot, sidx, pidx) {
- var s = plot.series[sidx];
- var canvas = plot.plugins.funnelRenderer.highlightCanvas;
- canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
- s._highlightedPoint = pidx;
- plot.plugins.funnelRenderer.highlightedSeriesIndex = sidx;
- s.renderer.drawSection.call(s, canvas._ctx, s._vertices[pidx], s.highlightColors[pidx], false);
- }
-
- function unhighlight (plot) {
- var canvas = plot.plugins.funnelRenderer.highlightCanvas;
- canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
- for (var i=0; i<plot.series.length; i++) {
- plot.series[i]._highlightedPoint = null;
- }
- plot.plugins.funnelRenderer.highlightedSeriesIndex = null;
- plot.target.trigger('jqplotDataUnhighlight');
- }
-
- function handleMove(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- var evt1 = jQuery.Event('jqplotDataMouseOver');
- evt1.pageX = ev.pageX;
- evt1.pageY = ev.pageY;
- plot.target.trigger(evt1, ins);
- if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.funnelRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
- var evt = jQuery.Event('jqplotDataHighlight');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- highlight (plot, ins[0], ins[1]);
- }
- }
- else if (neighbor == null) {
- unhighlight (plot);
- }
- }
-
- function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.funnelRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
- var evt = jQuery.Event('jqplotDataHighlight');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- highlight (plot, ins[0], ins[1]);
- }
- }
- else if (neighbor == null) {
- unhighlight (plot);
- }
- }
-
- function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
- var idx = plot.plugins.funnelRenderer.highlightedSeriesIndex;
- if (idx != null && plot.series[idx].highlightMouseDown) {
- unhighlight(plot);
- }
- }
-
- function handleClick(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- var evt = jQuery.Event('jqplotDataClick');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- }
- }
-
- function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- var idx = plot.plugins.funnelRenderer.highlightedSeriesIndex;
- if (idx != null && plot.series[idx].highlightMouseDown) {
- unhighlight(plot);
- }
- var evt = jQuery.Event('jqplotDataRightClick');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- }
- }
-
- // called within context of plot
- // create a canvas which we can draw on.
- // insert it before the eventCanvas, so eventCanvas will still capture events.
- function postPlotDraw() {
- // Memory Leaks patch
- if (this.plugins.funnelRenderer && this.plugins.funnelRenderer.highlightCanvas) {
- this.plugins.funnelRenderer.highlightCanvas.resetCanvas();
- this.plugins.funnelRenderer.highlightCanvas = null;
- }
-
- this.plugins.funnelRenderer = {};
- this.plugins.funnelRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
-
- // do we have any data labels? if so, put highlight canvas before those
- var labels = $(this.targetId+' .jqplot-data-label');
- if (labels.length) {
- $(labels[0]).before(this.plugins.funnelRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-funnelRenderer-highlight-canvas', this._plotDimensions, this));
- }
- // else put highlight canvas before event canvas.
- else {
- this.eventCanvas._elem.before(this.plugins.funnelRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-funnelRenderer-highlight-canvas', this._plotDimensions, this));
- }
- var hctx = this.plugins.funnelRenderer.highlightCanvas.setContext();
- this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
- }
-
- $.jqplot.preInitHooks.push(preInit);
-
- $.jqplot.FunnelTickRenderer = function() {
- $.jqplot.AxisTickRenderer.call(this);
- };
-
- $.jqplot.FunnelTickRenderer.prototype = new $.jqplot.AxisTickRenderer();
- $.jqplot.FunnelTickRenderer.prototype.constructor = $.jqplot.FunnelTickRenderer;
-
-})(jQuery);
-
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.min.js
deleted file mode 100644
index 4261ce02..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.funnelRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(e){e.jqplot.FunnelRenderer=function(){e.jqplot.LineRenderer.call(this)};e.jqplot.FunnelRenderer.prototype=new e.jqplot.LineRenderer();e.jqplot.FunnelRenderer.prototype.constructor=e.jqplot.FunnelRenderer;e.jqplot.FunnelRenderer.prototype.init=function(p,t){this.padding={top:20,right:20,bottom:20,left:20};this.sectionMargin=6;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.widthRatio=0.2;this.lineWidth=2;this.dataLabels="percent";this.showDataLabels=false;this.dataLabelFormatString=null;this.dataLabelThreshold=3;this._type="funnel";this.tickRenderer=e.jqplot.FunnelTickRenderer;if(p.highlightMouseDown&&p.highlightMouseOver==null){p.highlightMouseOver=false}e.extend(true,this,p);this._highlightedPoint=null;this._bases=[];this._atot;this._areas=[];this._lengths=[];this._angle;this._dataIndices=[];this._unorderedData=e.extend(true,[],this.data);var o=e.extend(true,[],this.data);for(var r=0;r<o.length;r++){o[r].push(r)}this.data.sort(function(v,u){return u[1]-v[1]});o.sort(function(v,u){return u[1]-v[1]});for(var r=0;r<o.length;r++){this._dataIndices.push(o[r][2])}if(this.highlightColors.length==0){for(var r=0;r<this.seriesColors.length;r++){var q=e.jqplot.getColorComponents(this.seriesColors[r]);var m=[q[0],q[1],q[2]];var s=m[0]+m[1]+m[2];for(var n=0;n<3;n++){m[n]=(s>570)?m[n]*0.8:m[n]+0.4*(255-m[n]);m[n]=parseInt(m[n],10)}this.highlightColors.push("rgb("+m[0]+","+m[1]+","+m[2]+")")}}t.postParseOptionsHooks.addOnce(k);t.postInitHooks.addOnce(g);t.eventListenerHooks.addOnce("jqplotMouseMove",a);t.eventListenerHooks.addOnce("jqplotMouseDown",b);t.eventListenerHooks.addOnce("jqplotMouseUp",j);t.eventListenerHooks.addOnce("jqplotClick",f);t.eventListenerHooks.addOnce("jqplotRightClick",l);t.postDrawHooks.addOnce(h)};e.jqplot.FunnelRenderer.prototype.setGridData=function(o){var n=0;var p=[];for(var m=0;m<this.data.length;m++){n+=this.data[m][1];p.push([this.data[m][0],this.data[m][1]])}for(var m=0;m<p.length;m++){p[m][1]=p[m][1]/n}this._bases=new Array(p.length+1);this._lengths=new Array(p.length);this.gridData=p};e.jqplot.FunnelRenderer.prototype.makeGridData=function(o,p){var n=0;var q=[];for(var m=0;m<this.data.length;m++){n+=this.data[m][1];q.push([this.data[m][0],this.data[m][1]])}for(var m=0;m<q.length;m++){q[m][1]=q[m][1]/n}this._bases=new Array(q.length+1);this._lengths=new Array(q.length);return q};e.jqplot.FunnelRenderer.prototype.drawSection=function(n,p,o,s){var t=this.fill;var m=this.lineWidth;n.save();if(s){for(var r=0;r<this.shadowDepth;r++){n.save();n.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));q()}}else{q()}function q(){n.beginPath();n.fillStyle=o;n.strokeStyle=o;n.lineWidth=m;n.moveTo(p[0][0],p[0][1]);for(var u=1;u<4;u++){n.lineTo(p[u][0],p[u][1])}n.closePath();if(t){n.fill()}else{n.stroke()}}if(s){for(var r=0;r<this.shadowDepth;r++){n.restore()}}n.restore()};e.jqplot.FunnelRenderer.prototype.draw=function(G,B,J,p){var Y;var L=(J!=undefined)?J:{};var w=0;var u=0;var R=1;this._areas=[];if(J.legendInfo&&J.legendInfo.placement=="insideGrid"){var O=J.legendInfo;switch(O.location){case"nw":w=O.width+O.xoffset;break;case"w":w=O.width+O.xoffset;break;case"sw":w=O.width+O.xoffset;break;case"ne":w=O.width+O.xoffset;R=-1;break;case"e":w=O.width+O.xoffset;R=-1;break;case"se":w=O.width+O.xoffset;R=-1;break;case"n":u=O.height+O.yoffset;break;case"s":u=O.height+O.yoffset;R=-1;break;default:break}}var t=(R==1)?this.padding.left+w:this.padding.left;var F=(R==1)?this.padding.top+u:this.padding.top;var M=(R==-1)?this.padding.right+w:this.padding.right;var o=(R==-1)?this.padding.bottom+u:this.padding.bottom;var P=(L.shadow!=undefined)?L.shadow:this.shadow;var q=(L.showLine!=undefined)?L.showLine:this.showLine;var C=(L.fill!=undefined)?L.fill:this.fill;var H=G.canvas.width;var N=G.canvas.height;this._bases[0]=H-t-M;var I=this._length=N-F-o;var r=this._bases[0]*this.widthRatio;this._atot=I/2*(this._bases[0]+this._bases[0]*this.widthRatio);this._angle=Math.atan((this._bases[0]-r)/2/I);for(Y=0;Y<B.length;Y++){this._areas.push(B[Y][1]*this._atot)}var E,aa,W,Q=0;var n=0.0001;for(Y=0;Y<this._areas.length;Y++){E=this._areas[Y]/this._bases[Y];aa=999999;this._lengths[Y]=E;W=0;while(aa>this._lengths[Y]*n&&W<100){this._lengths[Y]=this._areas[Y]/(this._bases[Y]-this._lengths[Y]*Math.tan(this._angle));aa=Math.abs(this._lengths[Y]-E);this._bases[Y+1]=this._bases[Y]-(2*this._lengths[Y]*Math.tan(this._angle));E=this._lengths[Y];W++}Q+=this._lengths[Y]}this._vertices=new Array(B.length);var ae=[t,F],ad=[t+this._bases[0],F],ac=[t+(this._bases[0]-this._bases[this._bases.length-1])/2,F+this._length],ab=[ac[0]+this._bases[this._bases.length-1],ac[1]];function V(ag){var x=(ae[1]-ac[1])/(ae[0]-ac[0]);var v=ae[1]-x*ae[0];var ah=ag+ae[1];return[(ah-v)/x,ah]}function D(ag){var x=(ad[1]-ab[1])/(ad[0]-ab[0]);var v=ad[1]-x*ad[0];var ah=ag+ad[1];return[(ah-v)/x,ah]}var T=w,S=u;var Z=0,m=0;for(Y=0;Y<B.length;Y++){this._vertices[Y]=new Array();var U=this._vertices[Y];var A=this.sectionMargin;if(Y==0){m=0}if(Y==1){m=A/3}else{if(Y>0&&Y<B.length-1){m=A/2}else{if(Y==B.length-1){m=2*A/3}}}U.push(V(Z+m));U.push(D(Z+m));Z+=this._lengths[Y];if(Y==0){m=-2*A/3}else{if(Y>0&&Y<B.length-1){m=-A/2}else{if(Y==B.length-1){m=0}}}U.push(D(Z+m));U.push(V(Z+m))}if(this.shadow){var af="rgba(0,0,0,"+this.shadowAlpha+")";for(var Y=0;Y<B.length;Y++){this.renderer.drawSection.call(this,G,this._vertices[Y],af,true)}}for(var Y=0;Y<B.length;Y++){var U=this._vertices[Y];this.renderer.drawSection.call(this,G,U,this.seriesColors[Y]);if(this.showDataLabels&&B[Y][1]*100>=this.dataLabelThreshold){var K,X;if(this.dataLabels=="label"){K=this.dataLabelFormatString||"%s";X=e.jqplot.sprintf(K,B[Y][0])}else{if(this.dataLabels=="value"){K=this.dataLabelFormatString||"%d";X=e.jqplot.sprintf(K,this.data[Y][1])}else{if(this.dataLabels=="percent"){K=this.dataLabelFormatString||"%d%%";X=e.jqplot.sprintf(K,B[Y][1]*100)}else{if(this.dataLabels.constructor==Array){K=this.dataLabelFormatString||"%s";X=e.jqplot.sprintf(K,this.dataLabels[this._dataIndices[Y]])}}}}var s=(this._radius)*this.dataLabelPositionFactor+this.sliceMargin+this.dataLabelNudge;var T=(U[0][0]+U[1][0])/2+this.canvas._offsets.left;var S=(U[1][1]+U[2][1])/2+this.canvas._offsets.top;var z=e('<span class="jqplot-funnel-series jqplot-data-label" style="position:absolute;">'+X+"</span>").insertBefore(p.eventCanvas._elem);T-=z.width()/2;S-=z.height()/2;T=Math.round(T);S=Math.round(S);z.css({left:T,top:S})}}};e.jqplot.FunnelAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.FunnelAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.FunnelAxisRenderer.prototype.constructor=e.jqplot.FunnelAxisRenderer;e.jqplot.FunnelAxisRenderer.prototype.init=function(m){this.tickRenderer=e.jqplot.FunnelTickRenderer;e.extend(true,this,m);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};e.jqplot.FunnelLegendRenderer=function(){e.jqplot.TableLegendRenderer.call(this)};e.jqplot.FunnelLegendRenderer.prototype=new e.jqplot.TableLegendRenderer();e.jqplot.FunnelLegendRenderer.prototype.constructor=e.jqplot.FunnelLegendRenderer;e.jqplot.FunnelLegendRenderer.prototype.init=function(m){this.numberRows=null;this.numberColumns=null;e.extend(true,this,m)};e.jqplot.FunnelLegendRenderer.prototype.draw=function(){var p=this;if(this.show){var x=this._series;var A="position:absolute;";A+=(this.background)?"background:"+this.background+";":"";A+=(this.border)?"border:"+this.border+";":"";A+=(this.fontSize)?"font-size:"+this.fontSize+";":"";A+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";A+=(this.textColor)?"color:"+this.textColor+";":"";A+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";A+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";A+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";A+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=e('<table class="jqplot-table-legend" style="'+A+'"></table>');var E=false,w=false,m,u;var y=x[0];var n=new e.jqplot.ColorGenerator(y.seriesColors);if(y.show){var F=y.data;if(this.numberRows){m=this.numberRows;if(!this.numberColumns){u=Math.ceil(F.length/m)}else{u=this.numberColumns}}else{if(this.numberColumns){u=this.numberColumns;m=Math.ceil(F.length/this.numberColumns)}else{m=F.length;u=1}}var D,C,o,r,q,t,v,B;var z=0;for(D=0;D<m;D++){if(w){o=e('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{o=e('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(C=0;C<u;C++){if(z<F.length){t=this.labels[z]||F[z][0].toString();B=n.next();if(!w){if(D>0){E=true}else{E=false}}else{if(D==m-1){E=false}else{E=true}}v=(E)?this.rowSpacing:"0";r=e('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+v+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+B+';"></div></div></td>');q=e('<td class="jqplot-table-legend" style="padding-top:'+v+';"></td>');if(this.escapeHtml){q.text(t)}else{q.html(t)}if(w){q.prependTo(o);r.prependTo(o)}else{r.appendTo(o);q.appendTo(o)}E=true}z++}}}}return this._elem};function c(q,p,n){n=n||{};n.axesDefaults=n.axesDefaults||{};n.legend=n.legend||{};n.seriesDefaults=n.seriesDefaults||{};var m=false;if(n.seriesDefaults.renderer==e.jqplot.FunnelRenderer){m=true}else{if(n.series){for(var o=0;o<n.series.length;o++){if(n.series[o].renderer==e.jqplot.FunnelRenderer){m=true}}}}if(m){n.axesDefaults.renderer=e.jqplot.FunnelAxisRenderer;n.legend.renderer=e.jqplot.FunnelLegendRenderer;n.legend.preDraw=true;n.sortData=false;n.seriesDefaults.pointLabels={show:false}}}function g(p,o,m){for(var n=0;n<this.series.length;n++){if(this.series[n].renderer.constructor==e.jqplot.FunnelRenderer){if(this.series[n].highlightMouseOver){this.series[n].highlightMouseDown=false}}}}function k(m){for(var n=0;n<this.series.length;n++){this.series[n].seriesColors=this.seriesColors;this.series[n].colorGenerator=e.jqplot.colorGenerator}}function d(q,p,o){var n=q.series[p];var m=q.plugins.funnelRenderer.highlightCanvas;m._ctx.clearRect(0,0,m._ctx.canvas.width,m._ctx.canvas.height);n._highlightedPoint=o;q.plugins.funnelRenderer.highlightedSeriesIndex=p;n.renderer.drawSection.call(n,m._ctx,n._vertices[o],n.highlightColors[o],false)}function i(o){var m=o.plugins.funnelRenderer.highlightCanvas;m._ctx.clearRect(0,0,m._ctx.canvas.width,m._ctx.canvas.height);for(var n=0;n<o.series.length;n++){o.series[n]._highlightedPoint=null}o.plugins.funnelRenderer.highlightedSeriesIndex=null;o.target.trigger("jqplotDataUnhighlight")}function a(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var n=jQuery.Event("jqplotDataMouseOver");n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o);if(r.series[o[0]].highlightMouseOver&&!(o[0]==r.plugins.funnelRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){var m=jQuery.Event("jqplotDataHighlight");m.which=q.which;m.pageX=q.pageX;m.pageY=q.pageY;r.target.trigger(m,o);d(r,o[0],o[1])}}else{if(s==null){i(r)}}}function b(p,o,s,r,q){if(r){var n=[r.seriesIndex,r.pointIndex,r.data];if(q.series[n[0]].highlightMouseDown&&!(n[0]==q.plugins.funnelRenderer.highlightedSeriesIndex&&n[1]==q.series[n[0]]._highlightedPoint)){var m=jQuery.Event("jqplotDataHighlight");m.which=p.which;m.pageX=p.pageX;m.pageY=p.pageY;q.target.trigger(m,n);d(q,n[0],n[1])}}else{if(r==null){i(q)}}}function j(o,n,r,q,p){var m=p.plugins.funnelRenderer.highlightedSeriesIndex;if(m!=null&&p.series[m].highlightMouseDown){i(p)}}function f(p,o,s,r,q){if(r){var n=[r.seriesIndex,r.pointIndex,r.data];var m=jQuery.Event("jqplotDataClick");m.which=p.which;m.pageX=p.pageX;m.pageY=p.pageY;q.target.trigger(m,n)}}function l(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];var m=r.plugins.funnelRenderer.highlightedSeriesIndex;if(m!=null&&r.series[m].highlightMouseDown){i(r)}var n=jQuery.Event("jqplotDataRightClick");n.which=q.which;n.pageX=q.pageX;n.pageY=q.pageY;r.target.trigger(n,o)}}function h(){if(this.plugins.funnelRenderer&&this.plugins.funnelRenderer.highlightCanvas){this.plugins.funnelRenderer.highlightCanvas.resetCanvas();this.plugins.funnelRenderer.highlightCanvas=null}this.plugins.funnelRenderer={};this.plugins.funnelRenderer.highlightCanvas=new e.jqplot.GenericCanvas();var n=e(this.targetId+" .jqplot-data-label");if(n.length){e(n[0]).before(this.plugins.funnelRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-funnelRenderer-highlight-canvas",this._plotDimensions,this))}else{this.eventCanvas._elem.before(this.plugins.funnelRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-funnelRenderer-highlight-canvas",this._plotDimensions,this))}var m=this.plugins.funnelRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(o){i(o.data.plot)})}e.jqplot.preInitHooks.push(c);e.jqplot.FunnelTickRenderer=function(){e.jqplot.AxisTickRenderer.call(this)};e.jqplot.FunnelTickRenderer.prototype=new e.jqplot.AxisTickRenderer();e.jqplot.FunnelTickRenderer.prototype.constructor=e.jqplot.FunnelTickRenderer})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.js
deleted file mode 100644
index e1ef02fb..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.js
+++ /dev/null
@@ -1,465 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- $.jqplot.eventListenerHooks.push(['jqplotMouseMove', handleMove]);
-
- /**
- * Class: $.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>'
- * > }
- *
- */
- $.jqplot.Highlighter = function(options) {
- // Group: Properties
- //
- //prop: show
- // true to show the highlight.
- this.show = $.jqplot.config.enablePlugins;
- // prop: markerRenderer
- // 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.
- this.markerRenderer = new $.jqplot.MarkerRenderer({shadow:false});
- // prop: showMarker
- // true to show the marker
- this.showMarker = true;
- // prop: lineWidthAdjust
- // Pixels to add to the lineWidth of the highlight.
- this.lineWidthAdjust = 2.5;
- // prop: sizeAdjust
- // Pixels to add to the overall size of the highlight.
- this.sizeAdjust = 5;
- // prop: showTooltip
- // Show a tooltip with data point values.
- this.showTooltip = true;
- // prop: tooltipLocation
- // Where to position tooltip, 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'
- this.tooltipLocation = 'nw';
- // prop: fadeTooltip
- // true = fade in/out tooltip, flase = show/hide tooltip
- this.fadeTooltip = true;
- // prop: tooltipFadeSpeed
- // 'slow', 'def', 'fast', or number of milliseconds.
- this.tooltipFadeSpeed = "fast";
- // prop: tooltipOffset
- // Pixel offset of tooltip from the highlight.
- this.tooltipOffset = 2;
- // prop: tooltipAxes
- // Which axes to display in tooltip, 'x', 'y' or 'both', 'xy' or 'yx'
- // 'both' and 'xy' are equivalent, 'yx' reverses order of labels.
- this.tooltipAxes = 'both';
- // prop; tooltipSeparator
- // String to use to separate x and y axes in tooltip.
- this.tooltipSeparator = ', ';
- // prop; tooltipContentEditor
- // Function used to edit/augment/replace the formatted tooltip contents.
- // Called as str = tooltipContentEditor(str, seriesIndex, pointIndex)
- // where str is the generated tooltip html and seriesIndex and pointIndex identify
- // the data point being highlighted. Should return the html for the tooltip contents.
- this.tooltipContentEditor = null;
- // prop: useAxesFormatters
- // Use the x and y axes formatters to format the text in the tooltip.
- this.useAxesFormatters = true;
- // prop: tooltipFormatString
- // 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.
- this.tooltipFormatString = '%.5P';
- // prop: formatString
- // 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.
- this.formatString = null;
- // prop: yvalues
- // 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.
- this.yvalues = 1;
- // prop: bringSeriesToFront
- // This option requires jQuery 1.4+
- // True to bring the series of the highlighted point to the front
- // of other series.
- this.bringSeriesToFront = false;
- this._tooltipElem;
- this.isHighlighting = false;
- this.currentNeighbor = null;
-
- $.extend(true, this, options);
- };
-
- var locations = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'];
- var locationIndicies = {'nw':0, 'n':1, 'ne':2, 'e':3, 'se':4, 's':5, 'sw':6, 'w':7};
- var oppositeLocations = ['se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'];
-
- // axis.renderer.tickrenderer.formatter
-
- // called with scope of plot
- $.jqplot.Highlighter.init = function (target, data, opts){
- var options = opts || {};
- // add a highlighter attribute to the plot
- this.plugins.highlighter = new $.jqplot.Highlighter(options.highlighter);
- };
-
- // called within scope of series
- $.jqplot.Highlighter.parseOptions = function (defaults, options) {
- // Add a showHighlight option to the series
- // and set it to true by default.
- this.showHighlight = true;
- };
-
- // called within context of plot
- // create a canvas which we can draw on.
- // insert it before the eventCanvas, so eventCanvas will still capture events.
- $.jqplot.Highlighter.postPlotDraw = function() {
- // Memory Leaks patch
- if (this.plugins.highlighter && this.plugins.highlighter.highlightCanvas) {
- this.plugins.highlighter.highlightCanvas.resetCanvas();
- this.plugins.highlighter.highlightCanvas = null;
- }
-
- if (this.plugins.highlighter && this.plugins.highlighter._tooltipElem) {
- this.plugins.highlighter._tooltipElem.emptyForce();
- this.plugins.highlighter._tooltipElem = null;
- }
-
- this.plugins.highlighter.highlightCanvas = new $.jqplot.GenericCanvas();
-
- this.eventCanvas._elem.before(this.plugins.highlighter.highlightCanvas.createElement(this._gridPadding, 'jqplot-highlight-canvas', this._plotDimensions, this));
- this.plugins.highlighter.highlightCanvas.setContext();
-
- var elem = document.createElement('div');
- this.plugins.highlighter._tooltipElem = $(elem);
- elem = null;
- this.plugins.highlighter._tooltipElem.addClass('jqplot-highlighter-tooltip');
- this.plugins.highlighter._tooltipElem.css({position:'absolute', display:'none'});
-
- this.eventCanvas._elem.before(this.plugins.highlighter._tooltipElem);
- };
-
- $.jqplot.preInitHooks.push($.jqplot.Highlighter.init);
- $.jqplot.preParseSeriesOptionsHooks.push($.jqplot.Highlighter.parseOptions);
- $.jqplot.postDrawHooks.push($.jqplot.Highlighter.postPlotDraw);
-
- function draw(plot, neighbor) {
- var hl = plot.plugins.highlighter;
- var s = plot.series[neighbor.seriesIndex];
- var smr = s.markerRenderer;
- var mr = hl.markerRenderer;
- mr.style = smr.style;
- mr.lineWidth = smr.lineWidth + hl.lineWidthAdjust;
- mr.size = smr.size + hl.sizeAdjust;
- var rgba = $.jqplot.getColorComponents(smr.color);
- var newrgb = [rgba[0], rgba[1], rgba[2]];
- var alpha = (rgba[3] >= 0.6) ? rgba[3]*0.6 : rgba[3]*(2-rgba[3]);
- mr.color = 'rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+alpha+')';
- mr.init();
- mr.draw(s.gridData[neighbor.pointIndex][0], s.gridData[neighbor.pointIndex][1], hl.highlightCanvas._ctx);
- }
-
- function showTooltip(plot, series, neighbor) {
- // neighbor looks like: {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}
- // gridData should be x,y pixel coords on the grid.
- // add the plot._gridPadding to that to get x,y in the target.
- var hl = plot.plugins.highlighter;
- var elem = hl._tooltipElem;
- var serieshl = series.highlighter || {};
-
- var opts = $.extend(true, {}, hl, serieshl);
-
- if (opts.useAxesFormatters) {
- var xf = series._xaxis._ticks[0].formatter;
- var yf = series._yaxis._ticks[0].formatter;
- var xfstr = series._xaxis._ticks[0].formatString;
- var yfstr = series._yaxis._ticks[0].formatString;
- var str;
- var xstr = xf(xfstr, neighbor.data[0]);
- var ystrs = [];
- for (var i=1; i<opts.yvalues+1; i++) {
- ystrs.push(yf(yfstr, neighbor.data[i]));
- }
- if (typeof opts.formatString === 'string') {
- switch (opts.tooltipAxes) {
- case 'both':
- case 'xy':
- ystrs.unshift(xstr);
- ystrs.unshift(opts.formatString);
- str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs);
- break;
- case 'yx':
- ystrs.push(xstr);
- ystrs.unshift(opts.formatString);
- str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs);
- break;
- case 'x':
- str = $.jqplot.sprintf.apply($.jqplot.sprintf, [opts.formatString, xstr]);
- break;
- case 'y':
- ystrs.unshift(opts.formatString);
- str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs);
- break;
- default: // same as xy
- ystrs.unshift(xstr);
- ystrs.unshift(opts.formatString);
- str = $.jqplot.sprintf.apply($.jqplot.sprintf, ystrs);
- break;
- }
- }
- else {
- switch (opts.tooltipAxes) {
- case 'both':
- case 'xy':
- str = xstr;
- for (var i=0; i<ystrs.length; i++) {
- str += opts.tooltipSeparator + ystrs[i];
- }
- break;
- case 'yx':
- str = '';
- for (var i=0; i<ystrs.length; i++) {
- str += ystrs[i] + opts.tooltipSeparator;
- }
- str += xstr;
- break;
- case 'x':
- str = xstr;
- break;
- case 'y':
- str = ystrs.join(opts.tooltipSeparator);
- break;
- default: // same as 'xy'
- str = xstr;
- for (var i=0; i<ystrs.length; i++) {
- str += opts.tooltipSeparator + ystrs[i];
- }
- break;
-
- }
- }
- }
- else {
- var str;
- if (typeof opts.formatString === 'string') {
- str = $.jqplot.sprintf.apply($.jqplot.sprintf, [opts.formatString].concat(neighbor.data));
- }
-
- else {
- if (opts.tooltipAxes == 'both' || opts.tooltipAxes == 'xy') {
- str = $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[0]) + opts.tooltipSeparator + $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[1]);
- }
- else if (opts.tooltipAxes == 'yx') {
- str = $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[1]) + opts.tooltipSeparator + $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[0]);
- }
- else if (opts.tooltipAxes == 'x') {
- str = $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[0]);
- }
- else if (opts.tooltipAxes == 'y') {
- str = $.jqplot.sprintf(opts.tooltipFormatString, neighbor.data[1]);
- }
- }
- }
- if ($.isFunction(opts.tooltipContentEditor)) {
- // args str, seriesIndex, pointIndex are essential so the hook can look up
- // extra data for the point.
- str = opts.tooltipContentEditor(str, neighbor.seriesIndex, neighbor.pointIndex, plot);
- }
- elem.html(str);
- var gridpos = {x:neighbor.gridData[0], y:neighbor.gridData[1]};
- var ms = 0;
- var fact = 0.707;
- if (series.markerRenderer.show == true) {
- ms = (series.markerRenderer.size + opts.sizeAdjust)/2;
- }
-
- var loc = locations;
- if (series.fillToZero && series.fill && neighbor.data[1] < 0) {
- loc = oppositeLocations;
- }
-
- switch (loc[locationIndicies[opts.tooltipLocation]]) {
- case 'nw':
- var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset - fact * ms;
- var y = gridpos.y + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true) - fact * ms;
- break;
- case 'n':
- var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2;
- var y = gridpos.y + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true) - ms;
- break;
- case 'ne':
- var x = gridpos.x + plot._gridPadding.left + opts.tooltipOffset + fact * ms;
- var y = gridpos.y + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true) - fact * ms;
- break;
- case 'e':
- var x = gridpos.x + plot._gridPadding.left + opts.tooltipOffset + ms;
- var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2;
- break;
- case 'se':
- var x = gridpos.x + plot._gridPadding.left + opts.tooltipOffset + fact * ms;
- var y = gridpos.y + plot._gridPadding.top + opts.tooltipOffset + fact * ms;
- break;
- case 's':
- var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true)/2;
- var y = gridpos.y + plot._gridPadding.top + opts.tooltipOffset + ms;
- break;
- case 'sw':
- var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset - fact * ms;
- var y = gridpos.y + plot._gridPadding.top + opts.tooltipOffset + fact * ms;
- break;
- case 'w':
- var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset - ms;
- var y = gridpos.y + plot._gridPadding.top - elem.outerHeight(true)/2;
- break;
- default: // same as 'nw'
- var x = gridpos.x + plot._gridPadding.left - elem.outerWidth(true) - opts.tooltipOffset - fact * ms;
- var y = gridpos.y + plot._gridPadding.top - opts.tooltipOffset - elem.outerHeight(true) - fact * ms;
- break;
- }
- elem.css('left', x);
- elem.css('top', y);
- if (opts.fadeTooltip) {
- // Fix for stacked up animations. Thnanks Trevor!
- elem.stop(true,true).fadeIn(opts.tooltipFadeSpeed);
- }
- else {
- elem.show();
- }
- elem = null;
-
- }
-
- function handleMove(ev, gridpos, datapos, neighbor, plot) {
- var hl = plot.plugins.highlighter;
- var c = plot.plugins.cursor;
- if (hl.show) {
- if (neighbor == null && hl.isHighlighting) {
- var evt = jQuery.Event('jqplotHighlighterUnhighlight');
- plot.target.trigger(evt);
-
- var ctx = hl.highlightCanvas._ctx;
- ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
- if (hl.fadeTooltip) {
- hl._tooltipElem.fadeOut(hl.tooltipFadeSpeed);
- }
- else {
- hl._tooltipElem.hide();
- }
- if (hl.bringSeriesToFront) {
- plot.restorePreviousSeriesOrder();
- }
- hl.isHighlighting = false;
- hl.currentNeighbor = null;
- ctx = null;
- }
- else if (neighbor != null && plot.series[neighbor.seriesIndex].showHighlight && !hl.isHighlighting) {
- var evt = jQuery.Event('jqplotHighlighterHighlight');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data, plot];
- plot.target.trigger(evt, ins);
-
- hl.isHighlighting = true;
- hl.currentNeighbor = neighbor;
- if (hl.showMarker) {
- draw(plot, neighbor);
- }
- if (hl.showTooltip && (!c || !c._zoom.started)) {
- showTooltip(plot, plot.series[neighbor.seriesIndex], neighbor);
- }
- if (hl.bringSeriesToFront) {
- plot.moveSeriesToFront(neighbor.seriesIndex);
- }
- }
- // check to see if we're highlighting the wrong point.
- else if (neighbor != null && hl.isHighlighting && hl.currentNeighbor != neighbor) {
- // highlighting the wrong point.
-
- // if new series allows highlighting, highlight new point.
- if (plot.series[neighbor.seriesIndex].showHighlight) {
- var ctx = hl.highlightCanvas._ctx;
- ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
- hl.isHighlighting = true;
- hl.currentNeighbor = neighbor;
- if (hl.showMarker) {
- draw(plot, neighbor);
- }
- if (hl.showTooltip && (!c || !c._zoom.started)) {
- showTooltip(plot, plot.series[neighbor.seriesIndex], neighbor);
- }
- if (hl.bringSeriesToFront) {
- plot.moveSeriesToFront(neighbor.seriesIndex);
- }
- }
- }
- }
- }
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.min.js
deleted file mode 100644
index a67ebe3a..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.highlighter.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(d){d.jqplot.eventListenerHooks.push(["jqplotMouseMove",f]);d.jqplot.Highlighter=function(h){this.show=d.jqplot.config.enablePlugins;this.markerRenderer=new d.jqplot.MarkerRenderer({shadow:false});this.showMarker=true;this.lineWidthAdjust=2.5;this.sizeAdjust=5;this.showTooltip=true;this.tooltipLocation="nw";this.fadeTooltip=true;this.tooltipFadeSpeed="fast";this.tooltipOffset=2;this.tooltipAxes="both";this.tooltipSeparator=", ";this.tooltipContentEditor=null;this.useAxesFormatters=true;this.tooltipFormatString="%.5P";this.formatString=null;this.yvalues=1;this.bringSeriesToFront=false;this._tooltipElem;this.isHighlighting=false;this.currentNeighbor=null;d.extend(true,this,h)};var b=["nw","n","ne","e","se","s","sw","w"];var e={nw:0,n:1,ne:2,e:3,se:4,s:5,sw:6,w:7};var c=["se","s","sw","w","nw","n","ne","e"];d.jqplot.Highlighter.init=function(k,j,i){var h=i||{};this.plugins.highlighter=new d.jqplot.Highlighter(h.highlighter)};d.jqplot.Highlighter.parseOptions=function(i,h){this.showHighlight=true};d.jqplot.Highlighter.postPlotDraw=function(){if(this.plugins.highlighter&&this.plugins.highlighter.highlightCanvas){this.plugins.highlighter.highlightCanvas.resetCanvas();this.plugins.highlighter.highlightCanvas=null}if(this.plugins.highlighter&&this.plugins.highlighter._tooltipElem){this.plugins.highlighter._tooltipElem.emptyForce();this.plugins.highlighter._tooltipElem=null}this.plugins.highlighter.highlightCanvas=new d.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.highlighter.highlightCanvas.createElement(this._gridPadding,"jqplot-highlight-canvas",this._plotDimensions,this));this.plugins.highlighter.highlightCanvas.setContext();var h=document.createElement("div");this.plugins.highlighter._tooltipElem=d(h);h=null;this.plugins.highlighter._tooltipElem.addClass("jqplot-highlighter-tooltip");this.plugins.highlighter._tooltipElem.css({position:"absolute",display:"none"});this.eventCanvas._elem.before(this.plugins.highlighter._tooltipElem)};d.jqplot.preInitHooks.push(d.jqplot.Highlighter.init);d.jqplot.preParseSeriesOptionsHooks.push(d.jqplot.Highlighter.parseOptions);d.jqplot.postDrawHooks.push(d.jqplot.Highlighter.postPlotDraw);function a(m,o){var j=m.plugins.highlighter;var p=m.series[o.seriesIndex];var h=p.markerRenderer;var i=j.markerRenderer;i.style=h.style;i.lineWidth=h.lineWidth+j.lineWidthAdjust;i.size=h.size+j.sizeAdjust;var l=d.jqplot.getColorComponents(h.color);var n=[l[0],l[1],l[2]];var k=(l[3]>=0.6)?l[3]*0.6:l[3]*(2-l[3]);i.color="rgba("+n[0]+","+n[1]+","+n[2]+","+k+")";i.init();i.draw(p.gridData[o.pointIndex][0],p.gridData[o.pointIndex][1],j.highlightCanvas._ctx)}function g(A,q,m){var k=A.plugins.highlighter;var D=k._tooltipElem;var r=q.highlighter||{};var t=d.extend(true,{},k,r);if(t.useAxesFormatters){var w=q._xaxis._ticks[0].formatter;var h=q._yaxis._ticks[0].formatter;var E=q._xaxis._ticks[0].formatString;var s=q._yaxis._ticks[0].formatString;var z;var u=w(E,m.data[0]);var l=[];for(var B=1;B<t.yvalues+1;B++){l.push(h(s,m.data[B]))}if(typeof t.formatString==="string"){switch(t.tooltipAxes){case"both":case"xy":l.unshift(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;case"yx":l.push(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;case"x":z=d.jqplot.sprintf.apply(d.jqplot.sprintf,[t.formatString,u]);break;case"y":l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break;default:l.unshift(u);l.unshift(t.formatString);z=d.jqplot.sprintf.apply(d.jqplot.sprintf,l);break}}else{switch(t.tooltipAxes){case"both":case"xy":z=u;for(var B=0;B<l.length;B++){z+=t.tooltipSeparator+l[B]}break;case"yx":z="";for(var B=0;B<l.length;B++){z+=l[B]+t.tooltipSeparator}z+=u;break;case"x":z=u;break;case"y":z=l.join(t.tooltipSeparator);break;default:z=u;for(var B=0;B<l.length;B++){z+=t.tooltipSeparator+l[B]}break}}}else{var z;if(typeof t.formatString==="string"){z=d.jqplot.sprintf.apply(d.jqplot.sprintf,[t.formatString].concat(m.data))}else{if(t.tooltipAxes=="both"||t.tooltipAxes=="xy"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[0])+t.tooltipSeparator+d.jqplot.sprintf(t.tooltipFormatString,m.data[1])}else{if(t.tooltipAxes=="yx"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[1])+t.tooltipSeparator+d.jqplot.sprintf(t.tooltipFormatString,m.data[0])}else{if(t.tooltipAxes=="x"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[0])}else{if(t.tooltipAxes=="y"){z=d.jqplot.sprintf(t.tooltipFormatString,m.data[1])}}}}}}if(d.isFunction(t.tooltipContentEditor)){z=t.tooltipContentEditor(z,m.seriesIndex,m.pointIndex,A)}D.html(z);var C={x:m.gridData[0],y:m.gridData[1]};var v=0;var j=0.707;if(q.markerRenderer.show==true){v=(q.markerRenderer.size+t.sizeAdjust)/2}var o=b;if(q.fillToZero&&q.fill&&m.data[1]<0){o=c}switch(o[e[t.tooltipLocation]]){case"nw":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break;case"n":var p=C.x+A._gridPadding.left-D.outerWidth(true)/2;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-v;break;case"ne":var p=C.x+A._gridPadding.left+t.tooltipOffset+j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break;case"e":var p=C.x+A._gridPadding.left+t.tooltipOffset+v;var n=C.y+A._gridPadding.top-D.outerHeight(true)/2;break;case"se":var p=C.x+A._gridPadding.left+t.tooltipOffset+j*v;var n=C.y+A._gridPadding.top+t.tooltipOffset+j*v;break;case"s":var p=C.x+A._gridPadding.left-D.outerWidth(true)/2;var n=C.y+A._gridPadding.top+t.tooltipOffset+v;break;case"sw":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top+t.tooltipOffset+j*v;break;case"w":var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-v;var n=C.y+A._gridPadding.top-D.outerHeight(true)/2;break;default:var p=C.x+A._gridPadding.left-D.outerWidth(true)-t.tooltipOffset-j*v;var n=C.y+A._gridPadding.top-t.tooltipOffset-D.outerHeight(true)-j*v;break}D.css("left",p);D.css("top",n);if(t.fadeTooltip){D.stop(true,true).fadeIn(t.tooltipFadeSpeed)}else{D.show()}D=null}function f(n,j,i,p,l){var h=l.plugins.highlighter;var m=l.plugins.cursor;if(h.show){if(p==null&&h.isHighlighting){var o=jQuery.Event("jqplotHighlighterUnhighlight");l.target.trigger(o);var q=h.highlightCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);if(h.fadeTooltip){h._tooltipElem.fadeOut(h.tooltipFadeSpeed)}else{h._tooltipElem.hide()}if(h.bringSeriesToFront){l.restorePreviousSeriesOrder()}h.isHighlighting=false;h.currentNeighbor=null;q=null}else{if(p!=null&&l.series[p.seriesIndex].showHighlight&&!h.isHighlighting){var o=jQuery.Event("jqplotHighlighterHighlight");o.which=n.which;o.pageX=n.pageX;o.pageY=n.pageY;var k=[p.seriesIndex,p.pointIndex,p.data,l];l.target.trigger(o,k);h.isHighlighting=true;h.currentNeighbor=p;if(h.showMarker){a(l,p)}if(h.showTooltip&&(!m||!m._zoom.started)){g(l,l.series[p.seriesIndex],p)}if(h.bringSeriesToFront){l.moveSeriesToFront(p.seriesIndex)}}else{if(p!=null&&h.isHighlighting&&h.currentNeighbor!=p){if(l.series[p.seriesIndex].showHighlight){var q=h.highlightCanvas._ctx;q.clearRect(0,0,q.canvas.width,q.canvas.height);h.isHighlighting=true;h.currentNeighbor=p;if(h.showMarker){a(l,p)}if(h.showTooltip&&(!m||!m._zoom.started)){g(l,l.series[p.seriesIndex],p)}if(h.bringSeriesToFront){l.moveSeriesToFront(p.seriesIndex)}}}}}}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.js
deleted file mode 100644
index c4767b2a..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.js
+++ /dev/null
@@ -1,475 +0,0 @@
-/*
- 2010-11-01 Chris Leonello
-
- Slightly modified version of the original json2.js to put JSON
- functions under the $.jqplot namespace.
-
- licensing and orignal comments follow:
-
- http://www.JSON.org/json2.js
- 2010-08-25
-
- Public Domain.
-
- NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
-
- See http://www.JSON.org/js.html
-
-
- This code should be minified before deployment.
- See http://javascript.crockford.com/jsmin.html
-
- USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
- NOT CONTROL.
-
-
- This file creates a global JSON object containing two methods: stringify
- and parse.
-
- $.jqplot.JSON.stringify(value, replacer, space)
- value any JavaScript value, usually an object or array.
-
- replacer an optional parameter that determines how object
- values are stringified for objects. It can be a
- function or an array of strings.
-
- space an optional parameter that specifies the indentation
- of nested structures. If it is omitted, the text will
- be packed without extra whitespace. If it is a number,
- it will specify the number of spaces to indent at each
- level. If it is a string (such as '\t' or '&nbsp;'),
- it contains the characters used to indent at each level.
-
- This method produces a JSON text from a JavaScript value.
-
- When an object value is found, if the object contains a toJSON
- method, its toJSON method will be called and the result will be
- stringified. A toJSON method does not serialize: it returns the
- value represented by the name/value pair that should be serialized,
- or undefined if nothing should be serialized. The toJSON method
- will be passed the key associated with the value, and this will be
- bound to the value
-
- For example, this would serialize Dates as ISO strings.
-
- Date.prototype.toJSON = function (key) {
- function f(n) {
- // Format integers to have at least two digits.
- return n < 10 ? '0' + n : n;
- }
-
- return this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z';
- };
-
- You can provide an optional replacer method. It will be passed the
- key and value of each member, with this bound to the containing
- object. The value that is returned from your method will be
- serialized. If your method returns undefined, then the member will
- be excluded from the serialization.
-
- If the replacer parameter is an array of strings, then it will be
- used to select the members to be serialized. It filters the results
- such that only members with keys listed in the replacer array are
- stringified.
-
- Values that do not have JSON representations, such as undefined or
- functions, will not be serialized. Such values in objects will be
- dropped; in arrays they will be replaced with null. You can use
- a replacer function to replace those with JSON values.
- $.jqplot.JSON.stringify(undefined) returns undefined.
-
- The optional space parameter produces a stringification of the
- value that is filled with line breaks and indentation to make it
- easier to read.
-
- If the space parameter is a non-empty string, then that string will
- be used for indentation. If the space parameter is a number, then
- the indentation will be that many spaces.
-
- Example:
-
- text = $.jqplot.JSON.stringify(['e', {pluribus: 'unum'}]);
- // text is '["e",{"pluribus":"unum"}]'
-
-
- text = $.jqplot.JSON.stringify(['e', {pluribus: 'unum'}], null, '\t');
- // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]'
-
- text = $.jqplot.JSON.stringify([new Date()], function (key, value) {
- return this[key] instanceof Date ?
- 'Date(' + this[key] + ')' : value;
- });
- // text is '["Date(---current time---)"]'
-
-
- $.jqplot.JSON.parse(text, reviver)
- This method parses a JSON text to produce an object or array.
- It can throw a SyntaxError exception.
-
- The optional reviver parameter is a function that can filter and
- transform the results. It receives each of the keys and values,
- and its return value is used instead of the original value.
- If it returns what it received, then the structure is not modified.
- If it returns undefined then the member is deleted.
-
- Example:
-
- // Parse the text. Values that look like ISO date strings will
- // be converted to Date objects.
-
- myData = $.jqplot.JSON.parse(text, function (key, value) {
- var a;
- if (typeof value === 'string') {
- a =
-/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value);
- if (a) {
- return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4],
- +a[5], +a[6]));
- }
- }
- return value;
- });
-
- myData = $.jqplot.JSON.parse('["Date(09/09/2001)"]', function (key, value) {
- var d;
- if (typeof value === 'string' &&
- value.slice(0, 5) === 'Date(' &&
- value.slice(-1) === ')') {
- d = new Date(value.slice(5, -1));
- if (d) {
- return d;
- }
- }
- return value;
- });
-
-
- This is a reference implementation. You are free to copy, modify, or
- redistribute.
-*/
-
-(function($) {
-
- $.jqplot.JSON = window.JSON;
-
- if (!window.JSON) {
- $.jqplot.JSON = {};
- }
-
- function f(n) {
- // Format integers to have at least two digits.
- return n < 10 ? '0' + n : n;
- }
-
- if (typeof Date.prototype.toJSON !== 'function') {
-
- Date.prototype.toJSON = function (key) {
-
- return isFinite(this.valueOf()) ?
- this.getUTCFullYear() + '-' +
- f(this.getUTCMonth() + 1) + '-' +
- f(this.getUTCDate()) + 'T' +
- f(this.getUTCHours()) + ':' +
- f(this.getUTCMinutes()) + ':' +
- f(this.getUTCSeconds()) + 'Z' : null;
- };
-
- String.prototype.toJSON =
- Number.prototype.toJSON =
- Boolean.prototype.toJSON = function (key) {
- return this.valueOf();
- };
- }
-
- var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
- gap,
- indent,
- meta = { // table of character substitutions
- '\b': '\\b',
- '\t': '\\t',
- '\n': '\\n',
- '\f': '\\f',
- '\r': '\\r',
- '"' : '\\"',
- '\\': '\\\\'
- },
- rep;
-
-
- function quote(string) {
-
-// If the string contains no control characters, no quote characters, and no
-// backslash characters, then we can safely slap some quotes around it.
-// Otherwise we must also replace the offending characters with safe escape
-// sequences.
-
- escapable.lastIndex = 0;
- return escapable.test(string) ?
- '"' + string.replace(escapable, function (a) {
- var c = meta[a];
- return typeof c === 'string' ? c :
- '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- }) + '"' :
- '"' + string + '"';
- }
-
-
- function str(key, holder) {
-
-// Produce a string from holder[key].
-
- var i, // The loop counter.
- k, // The member key.
- v, // The member value.
- length,
- mind = gap,
- partial,
- value = holder[key];
-
-// If the value has a toJSON method, call it to obtain a replacement value.
-
- if (value && typeof value === 'object' &&
- typeof value.toJSON === 'function') {
- value = value.toJSON(key);
- }
-
-// If we were called with a replacer function, then call the replacer to
-// obtain a replacement value.
-
- if (typeof rep === 'function') {
- value = rep.call(holder, key, value);
- }
-
-// What happens next depends on the value's type.
-
- switch (typeof value) {
- case 'string':
- return quote(value);
-
- case 'number':
-
-// JSON numbers must be finite. Encode non-finite numbers as null.
-
- return isFinite(value) ? String(value) : 'null';
-
- case 'boolean':
- case 'null':
-
-// If the value is a boolean or null, convert it to a string. Note:
-// typeof null does not produce 'null'. The case is included here in
-// the remote chance that this gets fixed someday.
-
- return String(value);
-
-// If the type is 'object', we might be dealing with an object or an array or
-// null.
-
- case 'object':
-
-// Due to a specification blunder in ECMAScript, typeof null is 'object',
-// so watch out for that case.
-
- if (!value) {
- return 'null';
- }
-
-// Make an array to hold the partial results of stringifying this object value.
-
- gap += indent;
- partial = [];
-
-// Is the value an array?
-
- if (Object.prototype.toString.apply(value) === '[object Array]') {
-
-// The value is an array. Stringify every element. Use null as a placeholder
-// for non-JSON values.
-
- length = value.length;
- for (i = 0; i < length; i += 1) {
- partial[i] = str(i, value) || 'null';
- }
-
-// Join all of the elements together, separated with commas, and wrap them in
-// brackets.
-
- v = partial.length === 0 ? '[]' :
- gap ? '[\n' + gap +
- partial.join(',\n' + gap) + '\n' +
- mind + ']' :
- '[' + partial.join(',') + ']';
- gap = mind;
- return v;
- }
-
-// If the replacer is an array, use it to select the members to be stringified.
-
- if (rep && typeof rep === 'object') {
- length = rep.length;
- for (i = 0; i < length; i += 1) {
- k = rep[i];
- if (typeof k === 'string') {
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- } else {
-
-// Otherwise, iterate through all of the keys in the object.
-
- for (k in value) {
- if (Object.hasOwnProperty.call(value, k)) {
- v = str(k, value);
- if (v) {
- partial.push(quote(k) + (gap ? ': ' : ':') + v);
- }
- }
- }
- }
-
-// Join all of the member texts together, separated with commas,
-// and wrap them in braces.
-
- v = partial.length === 0 ? '{}' :
- gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
- mind + '}' : '{' + partial.join(',') + '}';
- gap = mind;
- return v;
- }
- }
-
-// If the JSON object does not yet have a stringify method, give it one.
-
- if (typeof $.jqplot.JSON.stringify !== 'function') {
- $.jqplot.JSON.stringify = function (value, replacer, space) {
-
-// The stringify method takes a value and an optional replacer, and an optional
-// space parameter, and returns a JSON text. The replacer can be a function
-// that can replace values, or an array of strings that will select the keys.
-// A default replacer method can be provided. Use of the space parameter can
-// produce text that is more easily readable.
-
- var i;
- gap = '';
- indent = '';
-
-// If the space parameter is a number, make an indent string containing that
-// many spaces.
-
- if (typeof space === 'number') {
- for (i = 0; i < space; i += 1) {
- indent += ' ';
- }
-
-// If the space parameter is a string, it will be used as the indent string.
-
- } else if (typeof space === 'string') {
- indent = space;
- }
-
-// If there is a replacer, it must be a function or an array.
-// Otherwise, throw an error.
-
- rep = replacer;
- if (replacer && typeof replacer !== 'function' &&
- (typeof replacer !== 'object' ||
- typeof replacer.length !== 'number')) {
- throw new Error('$.jqplot.JSON.stringify');
- }
-
-// Make a fake root object containing our value under the key of ''.
-// Return the result of stringifying the value.
-
- return str('', {'': value});
- };
- }
-
-
-// If the JSON object does not yet have a parse method, give it one.
-
- if (typeof $.jqplot.JSON.parse !== 'function') {
- $.jqplot.JSON.parse = function (text, reviver) {
-
-// The parse method takes a text and an optional reviver function, and returns
-// a JavaScript value if the text is a valid JSON text.
-
- var j;
-
- function walk(holder, key) {
-
-// The walk method is used to recursively walk the resulting structure so
-// that modifications can be made.
-
- var k, v, value = holder[key];
- if (value && typeof value === 'object') {
- for (k in value) {
- if (Object.hasOwnProperty.call(value, k)) {
- v = walk(value, k);
- if (v !== undefined) {
- value[k] = v;
- } else {
- delete value[k];
- }
- }
- }
- }
- return reviver.call(holder, key, value);
- }
-
-
-// Parsing happens in four stages. In the first stage, we replace certain
-// Unicode characters with escape sequences. JavaScript handles many characters
-// incorrectly, either silently deleting them, or treating them as line endings.
-
- text = String(text);
- cx.lastIndex = 0;
- if (cx.test(text)) {
- text = text.replace(cx, function (a) {
- return '\\u' +
- ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
- });
- }
-
-// In the second stage, we run the text against regular expressions that look
-// for non-JSON patterns. We are especially concerned with '()' and 'new'
-// because they can cause invocation, and '=' because it can cause mutation.
-// But just to be safe, we want to reject all unexpected forms.
-
-// We split the second stage into 4 regexp operations in order to work around
-// crippling inefficiencies in IE's and Safari's regexp engines. First we
-// replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
-// replace all simple value tokens with ']' characters. Third, we delete all
-// open brackets that follow a colon or comma or that begin the text. Finally,
-// we look to see that the remaining characters are only whitespace or ']' or
-// ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval.
-
- if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
-
-// In the third stage we use the eval function to compile the text into a
-// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
-// in JavaScript: it can begin a block or an object literal. We wrap the text
-// in parens to eliminate the ambiguity.
-
- j = eval('(' + text + ')');
-
-// In the optional fourth stage, we recursively walk the new structure, passing
-// each name/value pair to a reviver function for possible transformation.
-
- return typeof reviver === 'function' ?
- walk({'': j}, '') : j;
- }
-
-// If the text is not JSON parseable, then a SyntaxError is thrown.
-
- throw new SyntaxError('$.jqplot.JSON.parse');
- };
- }
-})(jQuery);
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.min.js
deleted file mode 100644
index f6cc1928..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.json2.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function($){$.jqplot.JSON=window.JSON;if(!window.JSON){$.jqplot.JSON={}}function f(n){return n<10?"0"+n:n}if(typeof Date.prototype.toJSON!=="function"){Date.prototype.toJSON=function(key){return isFinite(this.valueOf())?this.getUTCFullYear()+"-"+f(this.getUTCMonth()+1)+"-"+f(this.getUTCDate())+"T"+f(this.getUTCHours())+":"+f(this.getUTCMinutes())+":"+f(this.getUTCSeconds())+"Z":null};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==="string"?c:"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==="object"&&typeof value.toJSON==="function"){value=value.toJSON(key)}if(typeof rep==="function"){value=rep.call(holder,key,value)}switch(typeof value){case"string":return quote(value);case"number":return isFinite(value)?String(value):"null";case"boolean":case"null":return String(value);case"object":if(!value){return"null"}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==="[object Array]"){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||"null"}v=partial.length===0?"[]":gap?"[\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"]":"["+partial.join(",")+"]";gap=mind;return v}if(rep&&typeof rep==="object"){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==="string"){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?": ":":")+v)}}}}v=partial.length===0?"{}":gap?"{\n"+gap+partial.join(",\n"+gap)+"\n"+mind+"}":"{"+partial.join(",")+"}";gap=mind;return v}}if(typeof $.jqplot.JSON.stringify!=="function"){$.jqplot.JSON.stringify=function(value,replacer,space){var i;gap="";indent="";if(typeof space==="number"){for(i=0;i<space;i+=1){indent+=" "}}else{if(typeof space==="string"){indent=space}}rep=replacer;if(replacer&&typeof replacer!=="function"&&(typeof replacer!=="object"||typeof replacer.length!=="number")){throw new Error("$.jqplot.JSON.stringify")}return str("",{"":value})}}if(typeof $.jqplot.JSON.parse!=="function"){$.jqplot.JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==="object"){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}text=String(text);cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,""))){j=eval("("+text+")");return typeof reviver==="function"?walk({"":j},""):j}throw new SyntaxError("$.jqplot.JSON.parse")}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.js
deleted file mode 100644
index 5ab51eae..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.js
+++ /dev/null
@@ -1,529 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- /**
- * class: $.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}}}
- **/
- $.jqplot.LogAxisRenderer = function() {
- $.jqplot.LinearAxisRenderer.call(this);
- // prop: axisDefaults
- // Default properties which will be applied directly to the series.
- //
- // Group: Properties
- //
- // Properties
- //
- // base - the logarithmic base, commonly 2, 10 or Math.E
- // tickDistribution - Deprecated. "power" distribution of ticks
- // always used. Option has no effect.
- this.axisDefaults = {
- base : 10,
- tickDistribution :'power'
- };
- };
-
- $.jqplot.LogAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
- $.jqplot.LogAxisRenderer.prototype.constructor = $.jqplot.LogAxisRenderer;
-
- $.jqplot.LogAxisRenderer.prototype.init = function(options) {
- // prop: drawBaseline
- // True to draw the axis baseline.
- this.drawBaseline = true;
- // prop: minorTicks
- // 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.minorTicks = 'auto';
- this._scalefact = 1.0;
-
- $.extend(true, this, options);
-
- this._autoFormatString = '%d';
- this._overrideFormatString = false;
-
- for (var d in this.renderer.axisDefaults) {
- if (this[d] == null) {
- this[d] = this.renderer.axisDefaults[d];
- }
- }
-
- this.resetDataBounds();
- };
-
- $.jqplot.LogAxisRenderer.prototype.createTicks = function(plot) {
- // we're are operating on an axis here
- var ticks = this._ticks;
- var userTicks = this.ticks;
- var name = this.name;
- var db = this._dataBounds;
- var dim = (this.name.charAt(0) === 'x') ? this._plotDimensions.width : this._plotDimensions.height;
- var interval;
- var min, max;
- var pos1, pos2;
- var tt, i;
-
- var threshold = 30;
- // For some reason scalefactor is screwing up ticks.
- this._scalefact = (Math.max(dim, threshold+1) - threshold)/300;
-
- // if we already have ticks, use them.
- // ticks must be in order of increasing value.
- if (userTicks.length) {
- // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed
- for (i=0; i<userTicks.length; i++){
- var ut = userTicks[i];
- var t = new this.tickRenderer(this.tickOptions);
- if (ut.constructor == Array) {
- t.value = ut[0];
- t.label = ut[1];
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- t.setTick(ut[0], this.name);
- this._ticks.push(t);
- }
-
- else if ($.isPlainObject(ut)) {
- $.extend(true, t, ut);
- t.axis = this.name;
- this._ticks.push(t);
- }
-
- else {
- t.value = ut;
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- t.setTick(ut, this.name);
- this._ticks.push(t);
- }
- }
- this.numberTicks = userTicks.length;
- this.min = this._ticks[0].value;
- this.max = this._ticks[this.numberTicks-1].value;
- }
-
- // we don't have any ticks yet, let's make some!
- else if (this.min == null && this.max == null) {
- min = db.min * (2 - this.padMin);
- max = db.max * this.padMax;
-
- // if min and max are same, space them out a bit
- if (min == max) {
- var adj = 0.05;
- min = min*(1-adj);
- max = max*(1+adj);
- }
-
- // perform some checks
- if (this.min != null && this.min <= 0) {
- throw('log axis minimum must be greater than 0');
- }
- if (this.max != null && this.max <= 0) {
- throw('log axis maximum must be greater than 0');
- }
-
- function findCeil (val) {
- var order = Math.pow(10, Math.floor(Math.log(val)/Math.LN10));
- return Math.ceil(val/order) * order;
- }
-
- function findFloor(val) {
- var order = Math.pow(10, Math.floor(Math.log(val)/Math.LN10));
- return Math.floor(val/order) * order;
- }
-
- // var range = max - min;
- var rmin, rmax;
-
- // for power distribution, open up range to get a nice power of axis.renderer.base.
- // power distribution won't respect the user's min/max settings.
- rmin = Math.pow(this.base, Math.floor(Math.log(min)/Math.log(this.base)));
- rmax = Math.pow(this.base, Math.ceil(Math.log(max)/Math.log(this.base)));
-
- // // if min and max are same, space them out a bit
- // if (rmin === rmax) {
- // var adj = 0.05;
- // rmin = rmin*(1-adj);
- // rmax = rmax*(1+adj);
- // }
-
- var order = Math.round(Math.log(rmin)/Math.LN10);
-
- if (this.tickOptions == null || !this.tickOptions.formatString) {
- this._overrideFormatString = true;
- }
-
- this.min = rmin;
- this.max = rmax;
- var range = this.max - this.min;
-
- var minorTicks = (this.minorTicks === 'auto') ? 0 : this.minorTicks;
- var numberTicks;
- if (this.numberTicks == null){
- if (dim > 140) {
- numberTicks = Math.round(Math.log(this.max/this.min)/Math.log(this.base) + 1);
- if (numberTicks < 2) {
- numberTicks = 2;
- }
- if (minorTicks === 0) {
- var temp = dim/(numberTicks - 1);
- if (temp < 100) {
- minorTicks = 0;
- }
- else if (temp < 190) {
- minorTicks = 1;
- }
- else if (temp < 250) {
- minorTicks = 3;
- }
- else if (temp < 600) {
- minorTicks = 4;
- }
- else {
- minorTicks = 9;
- }
- }
- }
- else {
- numberTicks = 2;
- if (minorTicks === 0) {
- minorTicks = 1;
- }
- minorTicks = 0;
- }
- }
- else {
- numberTicks = this.numberTicks;
- }
-
- if (order >= 0 && minorTicks !== 3) {
- this._autoFormatString = '%d';
- }
- // Adjust format string for case with 3 ticks where we'll have like 1, 2.5, 5, 7.5, 10
- else if (order <= 0 && minorTicks === 3) {
- var temp = -(order - 1);
- this._autoFormatString = '%.'+ Math.abs(order-1) + 'f';
- }
-
- // Adjust format string for values less than 1.
- else if (order < 0) {
- var temp = -order;
- this._autoFormatString = '%.'+ Math.abs(order) + 'f';
- }
-
- else {
- this._autoFormatString = '%d';
- }
-
- var to, t, val, tt1, spread, interval;
- for (var i=0; i<numberTicks; i++){
- tt = Math.pow(this.base, i - numberTicks + 1) * this.max;
-
- t = new this.tickRenderer(this.tickOptions);
-
- if (this._overrideFormatString) {
- t.formatString = this._autoFormatString;
- }
-
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- t.setTick(tt, this.name);
- this._ticks.push(t);
-
- if (minorTicks && i<numberTicks-1) {
- tt1 = Math.pow(this.base, i - numberTicks + 2) * this.max;
- spread = tt1 - tt;
- interval = tt1 / (minorTicks+1);
- for (var j=minorTicks-1; j>=0; j--) {
- val = tt1-interval*(j+1);
- t = new this.tickRenderer(this.tickOptions);
-
- if (this._overrideFormatString && this._autoFormatString != '') {
- t.formatString = this._autoFormatString;
- }
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- t.setTick(val, this.name);
- this._ticks.push(t);
- }
- }
- }
- }
-
- // min and max are set as would be the case with zooming
- else if (this.min != null && this.max != null) {
- var opts = $.extend(true, {}, this.tickOptions, {name: this.name, value: null});
- var nt, ti;
- // don't have an interval yet, pick one that gives the most
- // "round" ticks we can get.
- if (this.numberTicks == null && this.tickInterval == null) {
- // var threshold = 30;
- var tdim = Math.max(dim, threshold+1);
- var nttarget = Math.ceil((tdim-threshold)/35 + 1);
-
- var ret = $.jqplot.LinearTickGenerator.bestConstrainedInterval(this.min, this.max, nttarget);
-
- this._autoFormatString = ret[3];
- nt = ret[2];
- ti = ret[4];
-
- for (var i=0; i<nt; i++) {
- opts.value = this.min + i * ti;
- t = new this.tickRenderer(opts);
-
- if (this._overrideFormatString && this._autoFormatString != '') {
- t.formatString = this._autoFormatString;
- }
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- this._ticks.push(t);
- }
- }
-
- // for loose zoom, number ticks and interval are also set.
- else if (this.numberTicks != null && this.tickInterval != null) {
- nt = this.numberTicks;
- for (var i=0; i<nt; i++) {
- opts.value = this.min + i * this.tickInterval;
- t = new this.tickRenderer(opts);
-
- if (this._overrideFormatString && this._autoFormatString != '') {
- t.formatString = this._autoFormatString;
- }
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- this._ticks.push(t);
- }
- }
- }
- };
-
- $.jqplot.LogAxisRenderer.prototype.pack = function(pos, offsets) {
- var lb = parseInt(this.base, 10);
- var ticks = this._ticks;
- var trans = function (v) { return Math.log(v)/Math.log(lb); };
- var invtrans = function (v) { return Math.pow(Math.E, (Math.log(lb)*v)); };
- var max = trans(this.max);
- var min = trans(this.min);
- var offmax = offsets.max;
- var offmin = offsets.min;
- var lshow = (this._label == null) ? false : this._label.show;
-
- for (var p in pos) {
- this._elem.css(p, pos[p]);
- }
-
- this._offsets = offsets;
- // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left.
- var pixellength = offmax - offmin;
- var unitlength = max - min;
-
- // point to unit and unit to point conversions references to Plot DOM element top left corner.
- this.p2u = function(p){
- return invtrans((p - offmin) * unitlength / pixellength + min);
- };
-
- this.u2p = function(u){
- return (trans(u) - min) * pixellength / unitlength + offmin;
- };
-
- if (this.name == 'xaxis' || this.name == 'x2axis'){
- this.series_u2p = function(u){
- return (trans(u) - min) * pixellength / unitlength;
- };
- this.series_p2u = function(p){
- return invtrans(p * unitlength / pixellength + min);
- };
- }
- // yaxis is max at top of canvas.
- else {
- this.series_u2p = function(u){
- return (trans(u) - max) * pixellength / unitlength;
- };
- this.series_p2u = function(p){
- return invtrans(p * unitlength / pixellength + max);
- };
- }
-
- if (this.show) {
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- for (var i=0; i<ticks.length; i++) {
- var t = ticks[i];
- if (t.show && t.showLabel) {
- var shim;
-
- if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
- switch (t.labelPosition) {
- case 'auto':
- // position at end
- if (t.angle < 0) {
- shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- }
- // position at start
- else {
- shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
- }
- break;
- case 'end':
- shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- break;
- case 'start':
- shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
- break;
- case 'middle':
- shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- break;
- default:
- shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- break;
- }
- }
- else {
- shim = -t.getWidth()/2;
- }
- // var shim = t.getWidth()/2;
- var val = this.u2p(t.value) + shim + 'px';
- t._elem.css('left', val);
- t.pack();
- }
- }
- if (lshow) {
- var w = this._label._elem.outerWidth(true);
- this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px');
- if (this.name == 'xaxis') {
- this._label._elem.css('bottom', '0px');
- }
- else {
- this._label._elem.css('top', '0px');
- }
- this._label.pack();
- }
- }
- else {
- for (var i=0; i<ticks.length; i++) {
- var t = ticks[i];
- if (t.show && t.showLabel) {
- var shim;
- if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
- switch (t.labelPosition) {
- case 'auto':
- // position at end
- case 'end':
- if (t.angle < 0) {
- shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
- }
- else {
- shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
- }
- break;
- case 'start':
- if (t.angle > 0) {
- shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
- }
- else {
- shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
- }
- break;
- case 'middle':
- // if (t.angle > 0) {
- // shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- // }
- // else {
- // shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
- // }
- shim = -t.getHeight()/2;
- break;
- default:
- shim = -t.getHeight()/2;
- break;
- }
- }
- else {
- shim = -t.getHeight()/2;
- }
-
- var val = this.u2p(t.value) + shim + 'px';
- t._elem.css('top', val);
- t.pack();
- }
- }
- if (lshow) {
- var h = this._label._elem.outerHeight(true);
- this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px');
- if (this.name == 'yaxis') {
- this._label._elem.css('left', '0px');
- }
- else {
- this._label._elem.css('right', '0px');
- }
- this._label.pack();
- }
- }
- }
- };
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.min.js
deleted file mode 100644
index 64dc40eb..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.logAxisRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(a){a.jqplot.LogAxisRenderer=function(){a.jqplot.LinearAxisRenderer.call(this);this.axisDefaults={base:10,tickDistribution:"power"}};a.jqplot.LogAxisRenderer.prototype=new a.jqplot.LinearAxisRenderer();a.jqplot.LogAxisRenderer.prototype.constructor=a.jqplot.LogAxisRenderer;a.jqplot.LogAxisRenderer.prototype.init=function(b){this.drawBaseline=true;this.minorTicks="auto";this._scalefact=1;a.extend(true,this,b);this._autoFormatString="%d";this._overrideFormatString=false;for(var c in this.renderer.axisDefaults){if(this[c]==null){this[c]=this.renderer.axisDefaults[c]}}this.resetDataBounds()};a.jqplot.LogAxisRenderer.prototype.createTicks=function(d){var G=this._ticks;var w=this.ticks;var s=this.name;var u=this._dataBounds;var b=(this.name.charAt(0)==="x")?this._plotDimensions.width:this._plotDimensions.height;var k;var N,v;var m,l;var M,K;var g=30;this._scalefact=(Math.max(b,g+1)-g)/300;if(w.length){for(K=0;K<w.length;K++){var A=w[K];var H=new this.tickRenderer(this.tickOptions);if(A.constructor==Array){H.value=A[0];H.label=A[1];if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}H.setTick(A[0],this.name);this._ticks.push(H)}else{if(a.isPlainObject(A)){a.extend(true,H,A);H.axis=this.name;this._ticks.push(H)}else{H.value=A;if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}H.setTick(A,this.name);this._ticks.push(H)}}}this.numberTicks=w.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value}else{if(this.min==null&&this.max==null){N=u.min*(2-this.padMin);v=u.max*this.padMax;if(N==v){var c=0.05;N=N*(1-c);v=v*(1+c)}if(this.min!=null&&this.min<=0){throw ("log axis minimum must be greater than 0")}if(this.max!=null&&this.max<=0){throw ("log axis maximum must be greater than 0")}function f(j){var i=Math.pow(10,Math.floor(Math.log(j)/Math.LN10));return Math.ceil(j/i)*i}function x(j){var i=Math.pow(10,Math.floor(Math.log(j)/Math.LN10));return Math.floor(j/i)*i}var F,r;F=Math.pow(this.base,Math.floor(Math.log(N)/Math.log(this.base)));r=Math.pow(this.base,Math.ceil(Math.log(v)/Math.log(this.base)));var E=Math.round(Math.log(F)/Math.LN10);if(this.tickOptions==null||!this.tickOptions.formatString){this._overrideFormatString=true}this.min=F;this.max=r;var q=this.max-this.min;var C=(this.minorTicks==="auto")?0:this.minorTicks;var h;if(this.numberTicks==null){if(b>140){h=Math.round(Math.log(this.max/this.min)/Math.log(this.base)+1);if(h<2){h=2}if(C===0){var o=b/(h-1);if(o<100){C=0}else{if(o<190){C=1}else{if(o<250){C=3}else{if(o<600){C=4}else{C=9}}}}}}else{h=2;if(C===0){C=1}C=0}}else{h=this.numberTicks}if(E>=0&&C!==3){this._autoFormatString="%d"}else{if(E<=0&&C===3){var o=-(E-1);this._autoFormatString="%."+Math.abs(E-1)+"f"}else{if(E<0){var o=-E;this._autoFormatString="%."+Math.abs(E)+"f"}else{this._autoFormatString="%d"}}}var O,H,z,p,n,k;for(var K=0;K<h;K++){M=Math.pow(this.base,K-h+1)*this.max;H=new this.tickRenderer(this.tickOptions);if(this._overrideFormatString){H.formatString=this._autoFormatString}if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}H.setTick(M,this.name);this._ticks.push(H);if(C&&K<h-1){p=Math.pow(this.base,K-h+2)*this.max;n=p-M;k=p/(C+1);for(var J=C-1;J>=0;J--){z=p-k*(J+1);H=new this.tickRenderer(this.tickOptions);if(this._overrideFormatString&&this._autoFormatString!=""){H.formatString=this._autoFormatString}if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}H.setTick(z,this.name);this._ticks.push(H)}}}}else{if(this.min!=null&&this.max!=null){var y=a.extend(true,{},this.tickOptions,{name:this.name,value:null});var I,e;if(this.numberTicks==null&&this.tickInterval==null){var D=Math.max(b,g+1);var L=Math.ceil((D-g)/35+1);var B=a.jqplot.LinearTickGenerator.bestConstrainedInterval(this.min,this.max,L);this._autoFormatString=B[3];I=B[2];e=B[4];for(var K=0;K<I;K++){y.value=this.min+K*e;H=new this.tickRenderer(y);if(this._overrideFormatString&&this._autoFormatString!=""){H.formatString=this._autoFormatString}if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}this._ticks.push(H)}}else{if(this.numberTicks!=null&&this.tickInterval!=null){I=this.numberTicks;for(var K=0;K<I;K++){y.value=this.min+K*this.tickInterval;H=new this.tickRenderer(y);if(this._overrideFormatString&&this._autoFormatString!=""){H.formatString=this._autoFormatString}if(!this.showTicks){H.showLabel=false;H.showMark=false}else{if(!this.showTickMarks){H.showMark=false}}this._ticks.push(H)}}}}}}};a.jqplot.LogAxisRenderer.prototype.pack=function(f,e){var r=parseInt(this.base,10);var y=this._ticks;var d=function(h){return Math.log(h)/Math.log(r)};var b=function(h){return Math.pow(Math.E,(Math.log(r)*h))};var u=d(this.max);var s=d(this.min);var m=e.max;var k=e.min;var o=(this._label==null)?false:this._label.show;for(var q in f){this._elem.css(q,f[q])}this._offsets=e;var g=m-k;var j=u-s;this.p2u=function(h){return b((h-k)*j/g+s)};this.u2p=function(h){return(d(h)-s)*g/j+k};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(h){return(d(h)-s)*g/j};this.series_p2u=function(h){return b(h*j/g+s)}}else{this.series_u2p=function(h){return(d(h)-u)*g/j};this.series_p2u=function(h){return b(h*j/g+u)}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(var v=0;v<y.length;v++){var n=y[v];if(n.show&&n.showLabel){var c;if(n.constructor==a.jqplot.CanvasAxisTickRenderer&&n.angle){switch(n.labelPosition){case"auto":if(n.angle<0){c=-n.getWidth()+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2}else{c=-n._textRenderer.height*Math.sin(n._textRenderer.angle)/2}break;case"end":c=-n.getWidth()+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break;case"start":c=-n._textRenderer.height*Math.sin(n._textRenderer.angle)/2;break;case"middle":c=-n.getWidth()/2+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break;default:c=-n.getWidth()/2+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break}}else{c=-n.getWidth()/2}var z=this.u2p(n.value)+c+"px";n._elem.css("left",z);n.pack()}}if(o){var l=this._label._elem.outerWidth(true);this._label._elem.css("left",k+g/2-l/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}}else{for(var v=0;v<y.length;v++){var n=y[v];if(n.show&&n.showLabel){var c;if(n.constructor==a.jqplot.CanvasAxisTickRenderer&&n.angle){switch(n.labelPosition){case"auto":case"end":if(n.angle<0){c=-n._textRenderer.height*Math.cos(-n._textRenderer.angle)/2}else{c=-n.getHeight()+n._textRenderer.height*Math.cos(n._textRenderer.angle)/2}break;case"start":if(n.angle>0){c=-n._textRenderer.height*Math.cos(-n._textRenderer.angle)/2}else{c=-n.getHeight()+n._textRenderer.height*Math.cos(n._textRenderer.angle)/2}break;case"middle":c=-n.getHeight()/2;break;default:c=-n.getHeight()/2;break}}else{c=-n.getHeight()/2}var z=this.u2p(n.value)+c+"px";n._elem.css("top",z);n.pack()}}if(o){var x=this._label._elem.outerHeight(true);this._label._elem.css("top",m-g/2-x/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.js
deleted file mode 100644
index 74297685..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.js
+++ /dev/null
@@ -1,611 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- // class: $.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.
- $.jqplot.MekkoAxisRenderer = function() {
- };
-
- // called with scope of axis object.
- $.jqplot.MekkoAxisRenderer.prototype.init = function(options){
- // prop: 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.
- this.tickMode;
- // prop: barLabelRenderer
- // renderer to use to draw labels under each bar.
- this.barLabelRenderer = $.jqplot.AxisLabelRenderer;
- // prop: barLabels
- // array of labels to put under each bar.
- this.barLabels = this.barLabels || [];
- // prop: barLabelOptions
- // options object to pass to the bar label renderer.
- this.barLabelOptions = {};
- this.tickOptions = $.extend(true, {showGridline:false}, this.tickOptions);
- this._barLabels = [];
- $.extend(true, this, options);
- if (this.name == 'yaxis') {
- this.tickOptions.formatString = this.tickOptions.formatString || "%d\%";
- }
- var db = this._dataBounds;
- db.min = 0;
- // for y axes, scale always go from 0 to 1 (0 to 100%)
- if (this.name == 'yaxis' || this.name == 'y2axis') {
- db.max = 100;
- this.tickMode = 'even';
- }
- // For x axes, scale goes from 0 to sum of all y values.
- else if (this.name == 'xaxis'){
- this.tickMode = (this.tickMode == null) ? 'bar' : this.tickMode;
- for (var i=0; i<this._series.length; i++) {
- db.max += this._series[i]._sumy;
- }
- }
- else if (this.name == 'x2axis'){
- this.tickMode = (this.tickMode == null) ? 'even' : this.tickMode;
- for (var i=0; i<this._series.length; i++) {
- db.max += this._series[i]._sumy;
- }
- }
- };
-
- // called with scope of axis
- $.jqplot.MekkoAxisRenderer.prototype.draw = function(ctx, plot) {
- if (this.show) {
- // populate the axis label and value properties.
- // createTicks is a method on the renderer, but
- // call it within the scope of the axis.
- this.renderer.createTicks.call(this);
- // fill a div with axes labels in the right direction.
- // Need to pregenerate each axis to get it's bounds and
- // position it and the labels correctly on the plot.
- var dim=0;
- var temp;
-
- var elem = document.createElement('div');
- this._elem = $(elem);
- this._elem.addClass('jqplot-axis jqplot-'+this.name);
- this._elem.css('position', 'absolute');
- elem = null;
-
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- this._elem.width(this._plotDimensions.width);
- }
- else {
- this._elem.height(this._plotDimensions.height);
- }
-
- // draw the axis label
- // create a _label object.
- this.labelOptions.axis = this.name;
- this._label = new this.labelRenderer(this.labelOptions);
- if (this._label.show) {
- this._elem.append(this._label.draw(ctx));
- }
-
- var t, tick, elem;
- if (this.showTicks) {
- t = this._ticks;
- for (var i=0; i<t.length; i++) {
- tick = t[i];
- if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
- this._elem.append(tick.draw(ctx));
- }
- }
- }
-
- // draw the series labels
- for (i=0; i<this.barLabels.length; i++) {
- this.barLabelOptions.axis = this.name;
- this.barLabelOptions.label = this.barLabels[i];
- this._barLabels.push(new this.barLabelRenderer(this.barLabelOptions));
- if (this.tickMode != 'bar') {
- this._barLabels[i].show = false;
- }
- if (this._barLabels[i].show) {
- var elem = this._barLabels[i].draw(ctx, plot);
- elem.removeClass('jqplot-'+this.name+'-label');
- elem.addClass('jqplot-'+this.name+'-tick');
- elem.addClass('jqplot-mekko-barLabel');
- elem.appendTo(this._elem);
- elem = null;
- }
- }
-
- }
- return this._elem;
- };
-
- // called with scope of an axis
- $.jqplot.MekkoAxisRenderer.prototype.reset = function() {
- this.min = this._min;
- this.max = this._max;
- this.tickInterval = this._tickInterval;
- this.numberTicks = this._numberTicks;
- // this._ticks = this.__ticks;
- };
-
- // called with scope of axis
- $.jqplot.MekkoAxisRenderer.prototype.set = function() {
- var dim = 0;
- var temp;
- var w = 0;
- var h = 0;
- var lshow = (this._label == null) ? false : this._label.show;
- if (this.show && this.showTicks) {
- var t = this._ticks;
- for (var i=0; i<t.length; i++) {
- var tick = t[i];
- if (tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) {
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- temp = tick._elem.outerHeight(true);
- }
- else {
- temp = tick._elem.outerWidth(true);
- }
- if (temp > dim) {
- dim = temp;
- }
- }
- }
-
- if (lshow) {
- w = this._label._elem.outerWidth(true);
- h = this._label._elem.outerHeight(true);
- }
- if (this.name == 'xaxis') {
- dim = dim + h;
- this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'});
- }
- else if (this.name == 'x2axis') {
- dim = dim + h;
- this._elem.css({'height':dim+'px', left:'0px', top:'0px'});
- }
- else if (this.name == 'yaxis') {
- dim = dim + w;
- this._elem.css({'width':dim+'px', left:'0px', top:'0px'});
- if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
- this._label._elem.css('width', w+'px');
- }
- }
- else {
- dim = dim + w;
- this._elem.css({'width':dim+'px', right:'0px', top:'0px'});
- if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
- this._label._elem.css('width', w+'px');
- }
- }
- }
- };
-
- // called with scope of axis
- $.jqplot.MekkoAxisRenderer.prototype.createTicks = function() {
- // we're are operating on an axis here
- var ticks = this._ticks;
- var userTicks = this.ticks;
- var name = this.name;
- // databounds were set on axis initialization.
- var db = this._dataBounds;
- var dim, interval;
- var min, max;
- var pos1, pos2;
- var t, tt, i, j;
-
- // if we already have ticks, use them.
- // ticks must be in order of increasing value.
-
- if (userTicks.length) {
- // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed
- for (i=0; i<userTicks.length; i++){
- var ut = userTicks[i];
- var t = new this.tickRenderer(this.tickOptions);
- if (ut.constructor == Array) {
- t.value = ut[0];
- t.label = ut[1];
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- t.setTick(ut[0], this.name);
- this._ticks.push(t);
- }
-
- else {
- t.value = ut;
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- t.setTick(ut, this.name);
- this._ticks.push(t);
- }
- }
- this.numberTicks = userTicks.length;
- this.min = this._ticks[0].value;
- this.max = this._ticks[this.numberTicks-1].value;
- this.tickInterval = (this.max - this.min) / (this.numberTicks - 1);
- }
-
- // we don't have any ticks yet, let's make some!
- else {
- if (name == 'xaxis' || name == 'x2axis') {
- dim = this._plotDimensions.width;
- }
- else {
- dim = this._plotDimensions.height;
- }
-
- // if min, max and number of ticks specified, user can't specify interval.
- if (this.min != null && this.max != null && this.numberTicks != null) {
- this.tickInterval = null;
- }
-
- min = (this.min != null) ? this.min : db.min;
- max = (this.max != null) ? this.max : db.max;
-
- // if min and max are same, space them out a bit.+
- if (min == max) {
- var adj = 0.05;
- if (min > 0) {
- adj = Math.max(Math.log(min)/Math.LN10, 0.05);
- }
- min -= adj;
- max += adj;
- }
-
- var range = max - min;
- var rmin, rmax;
- var temp, prev, curr;
- var ynumticks = [3,5,6,11,21];
-
- // yaxis divide ticks in nice intervals from 0 to 1.
- if (this.name == 'yaxis' || this.name == 'y2axis') {
- this.min = 0;
- this.max = 100;
- // user didn't specify number of ticks.
- if (!this.numberTicks){
- if (this.tickInterval) {
- this.numberTicks = 3 + Math.ceil(range / this.tickInterval);
- }
- else {
- temp = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing);
- for (i=0; i<ynumticks.length; i++) {
- curr = temp/ynumticks[i];
- if (curr == 1) {
- this.numberTicks = ynumticks[i];
- break;
- }
- else if (curr > 1) {
- prev = curr;
- continue;
- }
- else if (curr < 1) {
- // was prev or is curr closer to one?
- if (Math.abs(prev - 1) < Math.abs(curr - 1)) {
- this.numberTicks = ynumticks[i-1];
- break;
- }
- else {
- this.numberTicks = ynumticks[i];
- break;
- }
- }
- else if (i == ynumticks.length -1) {
- this.numberTicks = ynumticks[i];
- }
- }
- this.tickInterval = range / (this.numberTicks - 1);
- }
- }
-
- // user did specify number of ticks.
- else {
- this.tickInterval = range / (this.numberTicks - 1);
- }
-
- for (var i=0; i<this.numberTicks; i++){
- tt = this.min + i * this.tickInterval;
- t = new this.tickRenderer(this.tickOptions);
- // var t = new $.jqplot.AxisTickRenderer(this.tickOptions);
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- t.setTick(tt, this.name);
- this._ticks.push(t);
- }
- }
-
- // for x axes, have number ot ticks equal to number of series and ticks placed
- // at sum of y values for each series.
- else if (this.tickMode == 'bar') {
- this.min = 0;
- this.numberTicks = this._series.length + 1;
- t = new this.tickRenderer(this.tickOptions);
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- t.setTick(0, this.name);
- this._ticks.push(t);
-
- temp = 0;
-
- for (i=1; i<this.numberTicks; i++){
- temp += this._series[i-1]._sumy;
- t = new this.tickRenderer(this.tickOptions);
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- t.setTick(temp, this.name);
- this._ticks.push(t);
- }
- this.max = this.max || temp;
-
- // if user specified a max and it is greater than sum, add a tick
- if (this.max > temp) {
- t = new this.tickRenderer(this.tickOptions);
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- t.setTick(this.max, this.name);
- this._ticks.push(t);
-
- }
- }
-
- else if (this.tickMode == 'even') {
- this.min = 0;
- this.max = this.max || db.max;
- // get a desired number of ticks
- var nt = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing);
- range = this.max - this.min;
- this.numberTicks = nt;
- this.tickInterval = range / (this.numberTicks - 1);
-
- for (i=0; i<this.numberTicks; i++){
- tt = this.min + i * this.tickInterval;
- t = new this.tickRenderer(this.tickOptions);
- // var t = new $.jqplot.AxisTickRenderer(this.tickOptions);
- if (!this.showTicks) {
- t.showLabel = false;
- t.showMark = false;
- }
- else if (!this.showTickMarks) {
- t.showMark = false;
- }
- t.setTick(tt, this.name);
- this._ticks.push(t);
- }
-
- }
- }
- };
-
- // called with scope of axis
- $.jqplot.MekkoAxisRenderer.prototype.pack = function(pos, offsets) {
- var ticks = this._ticks;
- var max = this.max;
- var min = this.min;
- var offmax = offsets.max;
- var offmin = offsets.min;
- var lshow = (this._label == null) ? false : this._label.show;
-
- for (var p in pos) {
- this._elem.css(p, pos[p]);
- }
-
- this._offsets = offsets;
- // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left.
- var pixellength = offmax - offmin;
- var unitlength = max - min;
-
- // point to unit and unit to point conversions references to Plot DOM element top left corner.
- this.p2u = function(p){
- return (p - offmin) * unitlength / pixellength + min;
- };
-
- this.u2p = function(u){
- return (u - min) * pixellength / unitlength + offmin;
- };
-
- if (this.name == 'xaxis' || this.name == 'x2axis'){
- this.series_u2p = function(u){
- return (u - min) * pixellength / unitlength;
- };
- this.series_p2u = function(p){
- return p * unitlength / pixellength + min;
- };
- }
-
- else {
- this.series_u2p = function(u){
- return (u - max) * pixellength / unitlength;
- };
- this.series_p2u = function(p){
- return p * unitlength / pixellength + max;
- };
- }
-
- if (this.show) {
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- for (var i=0; i<ticks.length; i++) {
- var t = ticks[i];
- if (t.show && t.showLabel) {
- var shim;
-
- if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
- // will need to adjust auto positioning based on which axis this is.
- var temp = (this.name == 'xaxis') ? 1 : -1;
- switch (t.labelPosition) {
- case 'auto':
- // position at end
- if (temp * t.angle < 0) {
- shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- }
- // position at start
- else {
- shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
- }
- break;
- case 'end':
- shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- break;
- case 'start':
- shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
- break;
- case 'middle':
- shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- break;
- default:
- shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- break;
- }
- }
- else {
- shim = -t.getWidth()/2;
- }
- var val = this.u2p(t.value) + shim + 'px';
- t._elem.css('left', val);
- t.pack();
- }
- }
- var w;
- if (lshow) {
- w = this._label._elem.outerWidth(true);
- this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px');
- if (this.name == 'xaxis') {
- this._label._elem.css('bottom', '0px');
- }
- else {
- this._label._elem.css('top', '0px');
- }
- this._label.pack();
- }
- // now show the labels under the bars.
- var b, l, r;
- for (var i=0; i<this.barLabels.length; i++) {
- b = this._barLabels[i];
- if (b.show) {
- w = b.getWidth();
- l = this._ticks[i].getLeft() + this._ticks[i].getWidth();
- r = this._ticks[i+1].getLeft();
- b._elem.css('left', (r+l-w)/2+'px');
- b._elem.css('top', this._ticks[i]._elem.css('top'));
- b.pack();
- }
- }
- }
- else {
- for (var i=0; i<ticks.length; i++) {
- var t = ticks[i];
- if (t.show && t.showLabel) {
- var shim;
- if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
- // will need to adjust auto positioning based on which axis this is.
- var temp = (this.name == 'yaxis') ? 1 : -1;
- switch (t.labelPosition) {
- case 'auto':
- // position at end
- case 'end':
- if (temp * t.angle < 0) {
- shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
- }
- else {
- shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
- }
- break;
- case 'start':
- if (t.angle > 0) {
- shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
- }
- else {
- shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
- }
- break;
- case 'middle':
- shim = -t.getHeight()/2;
- break;
- default:
- shim = -t.getHeight()/2;
- break;
- }
- }
- else {
- shim = -t.getHeight()/2;
- }
-
- var val = this.u2p(t.value) + shim + 'px';
- t._elem.css('top', val);
- t.pack();
- }
- }
- if (lshow) {
- var h = this._label._elem.outerHeight(true);
- this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px');
- if (this.name == 'yaxis') {
- this._label._elem.css('left', '0px');
- }
- else {
- this._label._elem.css('right', '0px');
- }
- this._label.pack();
- }
- }
- }
- };
-})(jQuery);
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js
deleted file mode 100644
index c3bb45bd..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(a){a.jqplot.MekkoAxisRenderer=function(){};a.jqplot.MekkoAxisRenderer.prototype.init=function(c){this.tickMode;this.barLabelRenderer=a.jqplot.AxisLabelRenderer;this.barLabels=this.barLabels||[];this.barLabelOptions={};this.tickOptions=a.extend(true,{showGridline:false},this.tickOptions);this._barLabels=[];a.extend(true,this,c);if(this.name=="yaxis"){this.tickOptions.formatString=this.tickOptions.formatString||"%d%"}var b=this._dataBounds;b.min=0;if(this.name=="yaxis"||this.name=="y2axis"){b.max=100;this.tickMode="even"}else{if(this.name=="xaxis"){this.tickMode=(this.tickMode==null)?"bar":this.tickMode;for(var d=0;d<this._series.length;d++){b.max+=this._series[d]._sumy}}else{if(this.name=="x2axis"){this.tickMode=(this.tickMode==null)?"even":this.tickMode;for(var d=0;d<this._series.length;d++){b.max+=this._series[d]._sumy}}}}};a.jqplot.MekkoAxisRenderer.prototype.draw=function(b,j){if(this.show){this.renderer.createTicks.call(this);var h=0;var c;var g=document.createElement("div");this._elem=a(g);this._elem.addClass("jqplot-axis jqplot-"+this.name);this._elem.css("position","absolute");g=null;if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){this._elem.append(this._label.draw(b))}var f,e,g;if(this.showTicks){f=this._ticks;for(var d=0;d<f.length;d++){e=f[d];if(e.showLabel&&(!e.isMinorTick||this.showMinorTicks)){this._elem.append(e.draw(b))}}}for(d=0;d<this.barLabels.length;d++){this.barLabelOptions.axis=this.name;this.barLabelOptions.label=this.barLabels[d];this._barLabels.push(new this.barLabelRenderer(this.barLabelOptions));if(this.tickMode!="bar"){this._barLabels[d].show=false}if(this._barLabels[d].show){var g=this._barLabels[d].draw(b,j);g.removeClass("jqplot-"+this.name+"-label");g.addClass("jqplot-"+this.name+"-tick");g.addClass("jqplot-mekko-barLabel");g.appendTo(this._elem);g=null}}}return this._elem};a.jqplot.MekkoAxisRenderer.prototype.reset=function(){this.min=this._min;this.max=this._max;this.tickInterval=this._tickInterval;this.numberTicks=this._numberTicks};a.jqplot.MekkoAxisRenderer.prototype.set=function(){var k=0;var d;var c=0;var j=0;var b=(this._label==null)?false:this._label.show;if(this.show&&this.showTicks){var g=this._ticks;for(var f=0;f<g.length;f++){var e=g[f];if(e.showLabel&&(!e.isMinorTick||this.showMinorTicks)){if(this.name=="xaxis"||this.name=="x2axis"){d=e._elem.outerHeight(true)}else{d=e._elem.outerWidth(true)}if(d>k){k=d}}}if(b){c=this._label._elem.outerWidth(true);j=this._label._elem.outerHeight(true)}if(this.name=="xaxis"){k=k+j;this._elem.css({height:k+"px",left:"0px",bottom:"0px"})}else{if(this.name=="x2axis"){k=k+j;this._elem.css({height:k+"px",left:"0px",top:"0px"})}else{if(this.name=="yaxis"){k=k+c;this._elem.css({width:k+"px",left:"0px",top:"0px"});if(b&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",c+"px")}}else{k=k+c;this._elem.css({width:k+"px",right:"0px",top:"0px"});if(b&&this._label.constructor==a.jqplot.AxisLabelRenderer){this._label._elem.css("width",c+"px")}}}}}};a.jqplot.MekkoAxisRenderer.prototype.createTicks=function(){var z=this._ticks;var w=this.ticks;var B=this.name;var y=this._dataBounds;var p,x;var n,r;var d,c;var h,b,s,q;if(w.length){for(s=0;s<w.length;s++){var e=w[s];var h=new this.tickRenderer(this.tickOptions);if(e.constructor==Array){h.value=e[0];h.label=e[1];if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(e[0],this.name);this._ticks.push(h)}else{h.value=e;if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(e,this.name);this._ticks.push(h)}}this.numberTicks=w.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.tickInterval=(this.max-this.min)/(this.numberTicks-1)}else{if(B=="xaxis"||B=="x2axis"){p=this._plotDimensions.width}else{p=this._plotDimensions.height}if(this.min!=null&&this.max!=null&&this.numberTicks!=null){this.tickInterval=null}n=(this.min!=null)?this.min:y.min;r=(this.max!=null)?this.max:y.max;if(n==r){var g=0.05;if(n>0){g=Math.max(Math.log(n)/Math.LN10,0.05)}n-=g;r+=g}var k=r-n;var m,o;var v,l,u;var f=[3,5,6,11,21];if(this.name=="yaxis"||this.name=="y2axis"){this.min=0;this.max=100;if(!this.numberTicks){if(this.tickInterval){this.numberTicks=3+Math.ceil(k/this.tickInterval)}else{v=2+Math.ceil((p-(this.tickSpacing-1))/this.tickSpacing);for(s=0;s<f.length;s++){u=v/f[s];if(u==1){this.numberTicks=f[s];break}else{if(u>1){l=u;continue}else{if(u<1){if(Math.abs(l-1)<Math.abs(u-1)){this.numberTicks=f[s-1];break}else{this.numberTicks=f[s];break}}else{if(s==f.length-1){this.numberTicks=f[s]}}}}}this.tickInterval=k/(this.numberTicks-1)}}else{this.tickInterval=k/(this.numberTicks-1)}for(var s=0;s<this.numberTicks;s++){b=this.min+s*this.tickInterval;h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(b,this.name);this._ticks.push(h)}}else{if(this.tickMode=="bar"){this.min=0;this.numberTicks=this._series.length+1;h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(0,this.name);this._ticks.push(h);v=0;for(s=1;s<this.numberTicks;s++){v+=this._series[s-1]._sumy;h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(v,this.name);this._ticks.push(h)}this.max=this.max||v;if(this.max>v){h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(this.max,this.name);this._ticks.push(h)}}else{if(this.tickMode=="even"){this.min=0;this.max=this.max||y.max;var A=2+Math.ceil((p-(this.tickSpacing-1))/this.tickSpacing);k=this.max-this.min;this.numberTicks=A;this.tickInterval=k/(this.numberTicks-1);for(s=0;s<this.numberTicks;s++){b=this.min+s*this.tickInterval;h=new this.tickRenderer(this.tickOptions);if(!this.showTicks){h.showLabel=false;h.showMark=false}else{if(!this.showTickMarks){h.showMark=false}}h.setTick(b,this.name);this._ticks.push(h)}}}}}};a.jqplot.MekkoAxisRenderer.prototype.pack=function(e,d){var C=this._ticks;var x=this.max;var v=this.min;var m=d.max;var j=d.min;var o=(this._label==null)?false:this._label.show;for(var s in e){this._elem.css(s,e[s])}this._offsets=d;var f=m-j;var g=x-v;this.p2u=function(b){return(b-j)*g/f+v};this.u2p=function(b){return(b-v)*f/g+j};if(this.name=="xaxis"||this.name=="x2axis"){this.series_u2p=function(b){return(b-v)*f/g};this.series_p2u=function(b){return b*g/f+v}}else{this.series_u2p=function(b){return(b-x)*f/g};this.series_p2u=function(b){return b*g/f+x}}if(this.show){if(this.name=="xaxis"||this.name=="x2axis"){for(var y=0;y<C.length;y++){var n=C[y];if(n.show&&n.showLabel){var c;if(n.constructor==a.jqplot.CanvasAxisTickRenderer&&n.angle){var A=(this.name=="xaxis")?1:-1;switch(n.labelPosition){case"auto":if(A*n.angle<0){c=-n.getWidth()+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2}else{c=-n._textRenderer.height*Math.sin(n._textRenderer.angle)/2}break;case"end":c=-n.getWidth()+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break;case"start":c=-n._textRenderer.height*Math.sin(n._textRenderer.angle)/2;break;case"middle":c=-n.getWidth()/2+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break;default:c=-n.getWidth()/2+n._textRenderer.height*Math.sin(-n._textRenderer.angle)/2;break}}else{c=-n.getWidth()/2}var D=this.u2p(n.value)+c+"px";n._elem.css("left",D);n.pack()}}var k;if(o){k=this._label._elem.outerWidth(true);this._label._elem.css("left",j+f/2-k/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}var B,u,q;for(var y=0;y<this.barLabels.length;y++){B=this._barLabels[y];if(B.show){k=B.getWidth();u=this._ticks[y].getLeft()+this._ticks[y].getWidth();q=this._ticks[y+1].getLeft();B._elem.css("left",(q+u-k)/2+"px");B._elem.css("top",this._ticks[y]._elem.css("top"));B.pack()}}}else{for(var y=0;y<C.length;y++){var n=C[y];if(n.show&&n.showLabel){var c;if(n.constructor==a.jqplot.CanvasAxisTickRenderer&&n.angle){var A=(this.name=="yaxis")?1:-1;switch(n.labelPosition){case"auto":case"end":if(A*n.angle<0){c=-n._textRenderer.height*Math.cos(-n._textRenderer.angle)/2}else{c=-n.getHeight()+n._textRenderer.height*Math.cos(n._textRenderer.angle)/2}break;case"start":if(n.angle>0){c=-n._textRenderer.height*Math.cos(-n._textRenderer.angle)/2}else{c=-n.getHeight()+n._textRenderer.height*Math.cos(n._textRenderer.angle)/2}break;case"middle":c=-n.getHeight()/2;break;default:c=-n.getHeight()/2;break}}else{c=-n.getHeight()/2}var D=this.u2p(n.value)+c+"px";n._elem.css("top",D);n.pack()}}if(o){var z=this._label._elem.outerHeight(true);this._label._elem.css("top",m-f/2-z/2+"px");if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{this._label._elem.css("right","0px")}this._label.pack()}}}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.js
deleted file mode 100644
index 85d661d0..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.js
+++ /dev/null
@@ -1,437 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- /**
- * Class: $.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}}
- *
- */
-
-
- $.jqplot.MekkoRenderer = function(){
- this.shapeRenderer = new $.jqplot.ShapeRenderer();
- // prop: borderColor
- // color of the borders between areas on the chart
- this.borderColor = null;
- // prop: showBorders
- // True to draw borders lines between areas on the chart.
- // False will draw borders lines with the same color as the area.
- this.showBorders = true;
- };
-
- // called with scope of series.
- $.jqplot.MekkoRenderer.prototype.init = function(options, plot) {
- this.fill = false;
- this.fillRect = true;
- this.strokeRect = true;
- this.shadow = false;
- // width of bar on x axis.
- this._xwidth = 0;
- this._xstart = 0;
- $.extend(true, this.renderer, options);
- // set the shape renderer options
- var opts = {lineJoin:'miter', lineCap:'butt', isarc:false, fillRect:this.fillRect, strokeRect:this.strokeRect};
- this.renderer.shapeRenderer.init(opts);
- plot.axes.x2axis._series.push(this);
- this._type = 'mekko';
- };
-
- // Method: setGridData
- // 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.
- $.jqplot.MekkoRenderer.prototype.setGridData = function(plot) {
- // recalculate the grid data
- var xp = this._xaxis.series_u2p;
- var yp = this._yaxis.series_u2p;
- var data = this._plotData;
- this.gridData = [];
- // figure out width on x axis.
- // this._xwidth = this._sumy / plot._sumy * this.canvas.getWidth();
- this._xwidth = xp(this._sumy) - xp(0);
- if (this.index>0) {
- this._xstart = plot.series[this.index-1]._xstart + plot.series[this.index-1]._xwidth;
- }
- var totheight = this.canvas.getHeight();
- var sumy = 0;
- var cury;
- var curheight;
- for (var i=0; i<data.length; i++) {
- if (data[i] != null) {
- sumy += data[i][1];
- cury = totheight - (sumy / this._sumy * totheight);
- curheight = data[i][1] / this._sumy * totheight;
- this.gridData.push([this._xstart, cury, this._xwidth, curheight]);
- }
- }
- };
-
- // Method: makeGridData
- // 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.MekkoRenderer.prototype.makeGridData = function(data, plot) {
- // recalculate the grid data
- // figure out width on x axis.
- var xp = this._xaxis.series_u2p;
- var totheight = this.canvas.getHeight();
- var sumy = 0;
- var cury;
- var curheight;
- var gd = [];
- for (var i=0; i<data.length; i++) {
- if (data[i] != null) {
- sumy += data[i][1];
- cury = totheight - (sumy / this._sumy * totheight);
- curheight = data[i][1] / this._sumy * totheight;
- gd.push([this._xstart, cury, this._xwidth, curheight]);
- }
- }
- return gd;
- };
-
-
- // called within scope of series.
- $.jqplot.MekkoRenderer.prototype.draw = function(ctx, gd, options) {
- var i;
- var opts = (options != undefined) ? options : {};
- var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
- var colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors);
- ctx.save();
- if (gd.length) {
- if (showLine) {
- for (i=0; i<gd.length; i++){
- opts.fillStyle = colorGenerator.next();
- if (this.renderer.showBorders) {
- opts.strokeStyle = this.renderer.borderColor;
- }
- else {
- opts.strokeStyle = opts.fillStyle;
- }
- this.renderer.shapeRenderer.draw(ctx, gd[i], opts);
- }
- }
- }
-
- ctx.restore();
- };
-
- $.jqplot.MekkoRenderer.prototype.drawShadow = function(ctx, gd, options) {
- // This is a no-op, no shadows on mekko charts.
- };
-
- /**
- * Class: $.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.
- *
- */
- $.jqplot.MekkoLegendRenderer = function(){
- //
- };
-
- $.jqplot.MekkoLegendRenderer.prototype.init = function(options) {
- // prop: numberRows
- // Maximum number of rows in the legend. 0 or null for unlimited.
- this.numberRows = null;
- // prop: numberColumns
- // Maximum number of columns in the legend. 0 or null for unlimited.
- this.numberColumns = null;
- // this will override the placement option on the Legend object
- this.placement = "outside";
- $.extend(true, this, options);
- };
-
- // called with scope of legend
- $.jqplot.MekkoLegendRenderer.prototype.draw = function() {
- var legend = this;
- if (this.show) {
- var series = this._series;
- var ss = 'position:absolute;';
- ss += (this.background) ? 'background:'+this.background+';' : '';
- ss += (this.border) ? 'border:'+this.border+';' : '';
- ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
- ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
- ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
- this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
- // Mekko charts legends don't go by number of series, but by number of data points
- // in the series. Refactor things here for that.
-
- var pad = false,
- reverse = true, // mekko charts are always stacked, so reverse
- nr, nc;
- var s = series[0];
- var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors);
-
- if (s.show) {
- var pd = s.data;
- if (this.numberRows) {
- nr = this.numberRows;
- if (!this.numberColumns){
- nc = Math.ceil(pd.length/nr);
- }
- else{
- nc = this.numberColumns;
- }
- }
- else if (this.numberColumns) {
- nc = this.numberColumns;
- nr = Math.ceil(pd.length/this.numberColumns);
- }
- else {
- nr = pd.length;
- nc = 1;
- }
-
- var i, j, tr, td1, td2, lt, rs, color;
- var idx = 0;
-
- for (i=0; i<nr; i++) {
- if (reverse){
- tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem);
- }
- else{
- tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);
- }
- for (j=0; j<nc; j++) {
- if (idx < pd.length) {
- lt = this.labels[idx] || pd[idx][0].toString();
- color = colorGenerator.next();
- if (!reverse){
- if (i>0){
- pad = true;
- }
- else{
- pad = false;
- }
- }
- else{
- if (i == nr -1){
- pad = false;
- }
- else{
- pad = true;
- }
- }
- rs = (pad) ? this.rowSpacing : '0';
-
- td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
- '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+
- '</div></td>');
- td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
- if (this.escapeHtml){
- td2.text(lt);
- }
- else {
- td2.html(lt);
- }
- if (reverse) {
- td2.prependTo(tr);
- td1.prependTo(tr);
- }
- else {
- td1.appendTo(tr);
- td2.appendTo(tr);
- }
- pad = true;
- }
- idx++;
- }
- }
-
- tr = null;
- td1 = null;
- td2 = null;
- }
- }
- return this._elem;
- };
-
- $.jqplot.MekkoLegendRenderer.prototype.pack = function(offsets) {
- if (this.show) {
- // fake a grid for positioning
- var grid = {_top:offsets.top, _left:offsets.left, _right:offsets.right, _bottom:this._plotDimensions.height - offsets.bottom};
- if (this.placement == 'insideGrid') {
- switch (this.location) {
- case 'nw':
- var a = grid._left + this.xoffset;
- var b = grid._top + this.yoffset;
- this._elem.css('left', a);
- this._elem.css('top', b);
- break;
- case 'n':
- var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
- var b = grid._top + this.yoffset;
- this._elem.css('left', a);
- this._elem.css('top', b);
- break;
- case 'ne':
- var a = offsets.right + this.xoffset;
- var b = grid._top + this.yoffset;
- this._elem.css({right:a, top:b});
- break;
- case 'e':
- var a = offsets.right + this.xoffset;
- var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
- this._elem.css({right:a, top:b});
- break;
- case 'se':
- var a = offsets.right + this.xoffset;
- var b = offsets.bottom + this.yoffset;
- this._elem.css({right:a, bottom:b});
- break;
- case 's':
- var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
- var b = offsets.bottom + this.yoffset;
- this._elem.css({left:a, bottom:b});
- break;
- case 'sw':
- var a = grid._left + this.xoffset;
- var b = offsets.bottom + this.yoffset;
- this._elem.css({left:a, bottom:b});
- break;
- case 'w':
- var a = grid._left + this.xoffset;
- var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
- this._elem.css({left:a, top:b});
- break;
- default: // same as 'se'
- var a = grid._right - this.xoffset;
- var b = grid._bottom + this.yoffset;
- this._elem.css({right:a, bottom:b});
- break;
- }
-
- }
- else {
- switch (this.location) {
- case 'nw':
- var a = this._plotDimensions.width - grid._left + this.xoffset;
- var b = grid._top + this.yoffset;
- this._elem.css('right', a);
- this._elem.css('top', b);
- break;
- case 'n':
- var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
- var b = this._plotDimensions.height - grid._top + this.yoffset;
- this._elem.css('left', a);
- this._elem.css('bottom', b);
- break;
- case 'ne':
- var a = this._plotDimensions.width - offsets.right + this.xoffset;
- var b = grid._top + this.yoffset;
- this._elem.css({left:a, top:b});
- break;
- case 'e':
- var a = this._plotDimensions.width - offsets.right + this.xoffset;
- var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
- this._elem.css({left:a, top:b});
- break;
- case 'se':
- var a = this._plotDimensions.width - offsets.right + this.xoffset;
- var b = offsets.bottom + this.yoffset;
- this._elem.css({left:a, bottom:b});
- break;
- case 's':
- var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2;
- var b = this._plotDimensions.height - offsets.bottom + this.yoffset;
- this._elem.css({left:a, top:b});
- break;
- case 'sw':
- var a = this._plotDimensions.width - grid._left + this.xoffset;
- var b = offsets.bottom + this.yoffset;
- this._elem.css({right:a, bottom:b});
- break;
- case 'w':
- var a = this._plotDimensions.width - grid._left + this.xoffset;
- var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2;
- this._elem.css({right:a, top:b});
- break;
- default: // same as 'se'
- var a = grid._right - this.xoffset;
- var b = grid._bottom + this.yoffset;
- this._elem.css({right:a, bottom:b});
- break;
- }
- }
- }
- };
-
- // setup default renderers for axes and legend so user doesn't have to
- // called with scope of plot
- function preInit(target, data, options) {
- options = options || {};
- options.axesDefaults = options.axesDefaults || {};
- options.legend = options.legend || {};
- options.seriesDefaults = options.seriesDefaults || {};
- var setopts = false;
- if (options.seriesDefaults.renderer == $.jqplot.MekkoRenderer) {
- setopts = true;
- }
- else if (options.series) {
- for (var i=0; i < options.series.length; i++) {
- if (options.series[i].renderer == $.jqplot.MekkoRenderer) {
- setopts = true;
- }
- }
- }
-
- if (setopts) {
- options.axesDefaults.renderer = $.jqplot.MekkoAxisRenderer;
- options.legend.renderer = $.jqplot.MekkoLegendRenderer;
- options.legend.preDraw = true;
- }
- }
-
- $.jqplot.preInitHooks.push(preInit);
-
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.min.js
deleted file mode 100644
index b9131d2c..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mekkoRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(b){b.jqplot.MekkoRenderer=function(){this.shapeRenderer=new b.jqplot.ShapeRenderer();this.borderColor=null;this.showBorders=true};b.jqplot.MekkoRenderer.prototype.init=function(c,e){this.fill=false;this.fillRect=true;this.strokeRect=true;this.shadow=false;this._xwidth=0;this._xstart=0;b.extend(true,this.renderer,c);var d={lineJoin:"miter",lineCap:"butt",isarc:false,fillRect:this.fillRect,strokeRect:this.strokeRect};this.renderer.shapeRenderer.init(d);e.axes.x2axis._series.push(this);this._type="mekko"};b.jqplot.MekkoRenderer.prototype.setGridData=function(h){var e=this._xaxis.series_u2p;var c=this._yaxis.series_u2p;var g=this._plotData;this.gridData=[];this._xwidth=e(this._sumy)-e(0);if(this.index>0){this._xstart=h.series[this.index-1]._xstart+h.series[this.index-1]._xwidth}var l=this.canvas.getHeight();var d=0;var k;var j;for(var f=0;f<g.length;f++){if(g[f]!=null){d+=g[f][1];k=l-(d/this._sumy*l);j=g[f][1]/this._sumy*l;this.gridData.push([this._xstart,k,this._xwidth,j])}}};b.jqplot.MekkoRenderer.prototype.makeGridData=function(f,g){var d=this._xaxis.series_u2p;var l=this.canvas.getHeight();var c=0;var j;var h;var k=[];for(var e=0;e<f.length;e++){if(f[e]!=null){c+=f[e][1];j=l-(c/this._sumy*l);h=f[e][1]/this._sumy*l;k.push([this._xstart,j,this._xwidth,h])}}return k};b.jqplot.MekkoRenderer.prototype.draw=function(c,h,d){var e;var g=(d!=undefined)?d:{};var f=(g.showLine!=undefined)?g.showLine:this.showLine;var j=new b.jqplot.ColorGenerator(this.seriesColors);c.save();if(h.length){if(f){for(e=0;e<h.length;e++){g.fillStyle=j.next();if(this.renderer.showBorders){g.strokeStyle=this.renderer.borderColor}else{g.strokeStyle=g.fillStyle}this.renderer.shapeRenderer.draw(c,h[e],g)}}}c.restore()};b.jqplot.MekkoRenderer.prototype.drawShadow=function(c,e,d){};b.jqplot.MekkoLegendRenderer=function(){};b.jqplot.MekkoLegendRenderer.prototype.init=function(c){this.numberRows=null;this.numberColumns=null;this.placement="outside";b.extend(true,this,c)};b.jqplot.MekkoLegendRenderer.prototype.draw=function(){var f=this;if(this.show){var o=this._series;var r="position:absolute;";r+=(this.background)?"background:"+this.background+";":"";r+=(this.border)?"border:"+this.border+";":"";r+=(this.fontSize)?"font-size:"+this.fontSize+";":"";r+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";r+=(this.textColor)?"color:"+this.textColor+";":"";this._elem=b('<table class="jqplot-table-legend" style="'+r+'"></table>');var w=false,n=true,c,l;var p=o[0];var d=new b.jqplot.ColorGenerator(p.seriesColors);if(p.show){var x=p.data;if(this.numberRows){c=this.numberRows;if(!this.numberColumns){l=Math.ceil(x.length/c)}else{l=this.numberColumns}}else{if(this.numberColumns){l=this.numberColumns;c=Math.ceil(x.length/this.numberColumns)}else{c=x.length;l=1}}var v,u,e,h,g,k,m,t;var q=0;for(v=0;v<c;v++){if(n){e=b('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{e=b('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(u=0;u<l;u++){if(q<x.length){k=this.labels[q]||x[q][0].toString();t=d.next();if(!n){if(v>0){w=true}else{w=false}}else{if(v==c-1){w=false}else{w=true}}m=(w)?this.rowSpacing:"0";h=b('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+m+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+t+';"></div></div></td>');g=b('<td class="jqplot-table-legend" style="padding-top:'+m+';"></td>');if(this.escapeHtml){g.text(k)}else{g.html(k)}if(n){g.prependTo(e);h.prependTo(e)}else{h.appendTo(e);g.appendTo(e)}w=true}q++}}e=null;h=null;g=null}}return this._elem};b.jqplot.MekkoLegendRenderer.prototype.pack=function(f){if(this.show){var e={_top:f.top,_left:f.left,_right:f.right,_bottom:this._plotDimensions.height-f.bottom};if(this.placement=="insideGrid"){switch(this.location){case"nw":var d=e._left+this.xoffset;var c=e._top+this.yoffset;this._elem.css("left",d);this._elem.css("top",c);break;case"n":var d=(f.left+(this._plotDimensions.width-f.right))/2-this.getWidth()/2;var c=e._top+this.yoffset;this._elem.css("left",d);this._elem.css("top",c);break;case"ne":var d=f.right+this.xoffset;var c=e._top+this.yoffset;this._elem.css({right:d,top:c});break;case"e":var d=f.right+this.xoffset;var c=(f.top+(this._plotDimensions.height-f.bottom))/2-this.getHeight()/2;this._elem.css({right:d,top:c});break;case"se":var d=f.right+this.xoffset;var c=f.bottom+this.yoffset;this._elem.css({right:d,bottom:c});break;case"s":var d=(f.left+(this._plotDimensions.width-f.right))/2-this.getWidth()/2;var c=f.bottom+this.yoffset;this._elem.css({left:d,bottom:c});break;case"sw":var d=e._left+this.xoffset;var c=f.bottom+this.yoffset;this._elem.css({left:d,bottom:c});break;case"w":var d=e._left+this.xoffset;var c=(f.top+(this._plotDimensions.height-f.bottom))/2-this.getHeight()/2;this._elem.css({left:d,top:c});break;default:var d=e._right-this.xoffset;var c=e._bottom+this.yoffset;this._elem.css({right:d,bottom:c});break}}else{switch(this.location){case"nw":var d=this._plotDimensions.width-e._left+this.xoffset;var c=e._top+this.yoffset;this._elem.css("right",d);this._elem.css("top",c);break;case"n":var d=(f.left+(this._plotDimensions.width-f.right))/2-this.getWidth()/2;var c=this._plotDimensions.height-e._top+this.yoffset;this._elem.css("left",d);this._elem.css("bottom",c);break;case"ne":var d=this._plotDimensions.width-f.right+this.xoffset;var c=e._top+this.yoffset;this._elem.css({left:d,top:c});break;case"e":var d=this._plotDimensions.width-f.right+this.xoffset;var c=(f.top+(this._plotDimensions.height-f.bottom))/2-this.getHeight()/2;this._elem.css({left:d,top:c});break;case"se":var d=this._plotDimensions.width-f.right+this.xoffset;var c=f.bottom+this.yoffset;this._elem.css({left:d,bottom:c});break;case"s":var d=(f.left+(this._plotDimensions.width-f.right))/2-this.getWidth()/2;var c=this._plotDimensions.height-f.bottom+this.yoffset;this._elem.css({left:d,top:c});break;case"sw":var d=this._plotDimensions.width-e._left+this.xoffset;var c=f.bottom+this.yoffset;this._elem.css({right:d,bottom:c});break;case"w":var d=this._plotDimensions.width-e._left+this.xoffset;var c=(f.top+(this._plotDimensions.height-f.bottom))/2-this.getHeight()/2;this._elem.css({right:d,top:c});break;default:var d=e._right-this.xoffset;var c=e._bottom+this.yoffset;this._elem.css({right:d,bottom:c});break}}}};function a(g,f,d){d=d||{};d.axesDefaults=d.axesDefaults||{};d.legend=d.legend||{};d.seriesDefaults=d.seriesDefaults||{};var c=false;if(d.seriesDefaults.renderer==b.jqplot.MekkoRenderer){c=true}else{if(d.series){for(var e=0;e<d.series.length;e++){if(d.series[e].renderer==b.jqplot.MekkoRenderer){c=true}}}}if(c){d.axesDefaults.renderer=b.jqplot.MekkoAxisRenderer;d.legend.renderer=b.jqplot.MekkoLegendRenderer;d.legend.preDraw=true}}b.jqplot.preInitHooks.push(a)})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.js
deleted file mode 100644
index 43a4c10f..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.js
+++ /dev/null
@@ -1,1029 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- /**
- * Class: $.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.
- */
- $.jqplot.MeterGaugeRenderer = function(){
- $.jqplot.LineRenderer.call(this);
- };
-
- $.jqplot.MeterGaugeRenderer.prototype = new $.jqplot.LineRenderer();
- $.jqplot.MeterGaugeRenderer.prototype.constructor = $.jqplot.MeterGaugeRenderer;
-
- // called with scope of a series
- $.jqplot.MeterGaugeRenderer.prototype.init = function(options) {
- // Group: Properties
- //
- // prop: diameter
- // Outer diameter of the meterGauge, auto computed by default
- this.diameter = null;
- // prop: padding
- // padding between the meterGauge and plot edges, auto
- // calculated by default.
- this.padding = null;
- // prop: shadowOffset
- // offset of the shadow from the gauge ring and offset of
- // each succesive stroke of the shadow from the last.
- this.shadowOffset = 2;
- // prop: shadowAlpha
- // transparency of the shadow (0 = transparent, 1 = opaque)
- this.shadowAlpha = 0.07;
- // prop: shadowDepth
- // number of strokes to apply to the shadow,
- // each stroke offset shadowOffset from the last.
- this.shadowDepth = 4;
- // prop: background
- // background color of the inside of the gauge.
- this.background = "#efefef";
- // prop: ringColor
- // color of the outer ring, hub, and needle of the gauge.
- this.ringColor = "#BBC6D0";
- // needle color not implemented yet.
- this.needleColor = "#C3D3E5";
- // prop: tickColor
- // color of the tick marks around the gauge.
- this.tickColor = "989898";
- // prop: ringWidth
- // width of the ring around the gauge. Auto computed by default.
- this.ringWidth = null;
- // prop: min
- // Minimum value on the gauge. Auto computed by default
- this.min;
- // prop: max
- // Maximum value on the gauge. Auto computed by default
- this.max;
- // prop: ticks
- // Array of tick values. Auto computed by default.
- this.ticks = [];
- // prop: showTicks
- // true to show ticks around gauge.
- this.showTicks = true;
- // prop: showTickLabels
- // true to show tick labels next to ticks.
- this.showTickLabels = true;
- // prop: label
- // A gauge label like 'kph' or 'Volts'
- this.label = null;
- // prop: labelHeightAdjust
- // Number of Pixels to offset the label up (-) or down (+) from its default position.
- this.labelHeightAdjust = 0;
- // prop: labelPosition
- // Where to position the label, either 'inside' or 'bottom'.
- this.labelPosition = 'inside';
- // prop: intervals
- // Array of ranges to be drawn around the gauge.
- // Array of form:
- // > [value1, value2, ...]
- // indicating the values for the first, second, ... intervals.
- this.intervals = [];
- // prop: intervalColors
- // Array of colors to use for the intervals.
- this.intervalColors = [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"];
- // prop: intervalInnerRadius
- // Radius of the inner circle of the interval ring.
- this.intervalInnerRadius = null;
- // prop: intervalOuterRadius
- // Radius of the outer circle of the interval ring.
- this.intervalOuterRadius = null;
- this.tickRenderer = $.jqplot.MeterGaugeTickRenderer;
- // ticks spaced every 1, 2, 2.5, 5, 10, 20, .1, .2, .25, .5, etc.
- this.tickPositions = [1, 2, 2.5, 5, 10];
- // prop: tickSpacing
- // 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.
- this.tickSpacing = 30;
- this.numberMinorTicks = null;
- // prop: hubRadius
- // Radius of the hub at the bottom center of gauge which the needle attaches to.
- // Auto computed by default
- this.hubRadius = null;
- // prop: tickPadding
- // padding of the tick marks to the outer ring and the tick labels to marks.
- // Auto computed by default.
- this.tickPadding = null;
- // prop: needleThickness
- // Maximum thickness the needle. Auto computed by default.
- this.needleThickness = null;
- // prop: needlePad
- // Padding between needle and inner edge of the ring when the needle is at the min or max gauge value.
- this.needlePad = 6;
- // prop: pegNeedle
- // 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.pegNeedle = true;
- this._type = 'meterGauge';
-
- $.extend(true, this, options);
- this.type = null;
- this.numberTicks = null;
- this.tickInterval = null;
- // span, the sweep (in degrees) from min to max. This gauge is
- // a semi-circle.
- this.span = 180;
- // get rid of this nonsense
- // this.innerSpan = this.span;
- if (this.type == 'circular') {
- this.semiCircular = false;
- }
- else if (this.type != 'circular') {
- this.semiCircular = true;
- }
- else {
- this.semiCircular = (this.span <= 180) ? true : false;
- }
- this._tickPoints = [];
- // reference to label element.
- this._labelElem = null;
-
- // start the gauge at the beginning of the span
- this.startAngle = (90 + (360 - this.span)/2) * Math.PI/180;
- this.endAngle = (90 - (360 - this.span)/2) * Math.PI/180;
-
- this.setmin = !!(this.min == null);
- this.setmax = !!(this.max == null);
-
- // if given intervals and is an array of values, create labels and colors.
- if (this.intervals.length) {
- if (this.intervals[0].length == null || this.intervals.length == 1) {
- for (var i=0; i<this.intervals.length; i++) {
- this.intervals[i] = [this.intervals[i], this.intervals[i], this.intervalColors[i]];
- }
- }
- else if (this.intervals[0].length == 2) {
- for (i=0; i<this.intervals.length; i++) {
- this.intervals[i] = [this.intervals[i][0], this.intervals[i][1], this.intervalColors[i]];
- }
- }
- }
-
- // compute min, max and ticks if not supplied:
- if (this.ticks.length) {
- if (this.ticks[0].length == null || this.ticks[0].length == 1) {
- for (var i=0; i<this.ticks.length; i++) {
- this.ticks[i] = [this.ticks[i], this.ticks[i]];
- }
- }
- this.min = (this.min == null) ? this.ticks[0][0] : this.min;
- this.max = (this.max == null) ? this.ticks[this.ticks.length-1][0] : this.max;
- this.setmin = false;
- this.setmax = false;
- this.numberTicks = this.ticks.length;
- this.tickInterval = this.ticks[1][0] - this.ticks[0][0];
- this.tickFactor = Math.floor(parseFloat((Math.log(this.tickInterval)/Math.log(10)).toFixed(11)));
- // use the first interal to calculate minor ticks;
- this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor);
- if (!this.numberMinorTicks) {
- this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor-1);
- }
- if (!this.numberMinorTicks) {
- this.numberMinorTicks = 1;
- }
- }
-
- else if (this.intervals.length) {
- this.min = (this.min == null) ? 0 : this.min;
- this.setmin = false;
- if (this.max == null) {
- if (this.intervals[this.intervals.length-1][0] >= this.data[0][1]) {
- this.max = this.intervals[this.intervals.length-1][0];
- this.setmax = false;
- }
- }
- else {
- this.setmax = false;
- }
- }
-
- else {
- // no ticks and no intervals supplied, put needle in middle
- this.min = (this.min == null) ? 0 : this.min;
- this.setmin = false;
- if (this.max == null) {
- this.max = this.data[0][1] * 1.25;
- this.setmax = true;
- }
- else {
- this.setmax = false;
- }
- }
- };
-
- $.jqplot.MeterGaugeRenderer.prototype.setGridData = function(plot) {
- // set gridData property. This will hold angle in radians of each data point.
- var stack = [];
- var td = [];
- var sa = this.startAngle;
- for (var i=0; i<this.data.length; i++){
- stack.push(this.data[i][1]);
- td.push([this.data[i][0]]);
- if (i>0) {
- stack[i] += stack[i-1];
- }
- }
- var fact = Math.PI*2/stack[stack.length - 1];
-
- for (var i=0; i<stack.length; i++) {
- td[i][1] = stack[i] * fact;
- }
- this.gridData = td;
- };
-
- $.jqplot.MeterGaugeRenderer.prototype.makeGridData = function(data, plot) {
- var stack = [];
- var td = [];
- var sa = this.startAngle;
- for (var i=0; i<data.length; i++){
- stack.push(data[i][1]);
- td.push([data[i][0]]);
- if (i>0) {
- stack[i] += stack[i-1];
- }
- }
- var fact = Math.PI*2/stack[stack.length - 1];
-
- for (var i=0; i<stack.length; i++) {
- td[i][1] = stack[i] * fact;
- }
- return td;
- };
-
-
- function getnmt(pos, interval, fact) {
- var temp;
- for (var i=pos.length-1; i>=0; i--) {
- temp = interval/(pos[i] * Math.pow(10, fact));
- if (temp == 4 || temp == 5) {
- return temp - 1;
- }
- }
- return null;
- }
-
- // called with scope of series
- $.jqplot.MeterGaugeRenderer.prototype.draw = function (ctx, gd, options) {
- var i;
- var opts = (options != undefined) ? options : {};
- // offset and direction of offset due to legend placement
- var offx = 0;
- var offy = 0;
- var trans = 1;
- if (options.legendInfo && options.legendInfo.placement == 'inside') {
- var li = options.legendInfo;
- switch (li.location) {
- case 'nw':
- offx = li.width + li.xoffset;
- break;
- case 'w':
- offx = li.width + li.xoffset;
- break;
- case 'sw':
- offx = li.width + li.xoffset;
- break;
- case 'ne':
- offx = li.width + li.xoffset;
- trans = -1;
- break;
- case 'e':
- offx = li.width + li.xoffset;
- trans = -1;
- break;
- case 'se':
- offx = li.width + li.xoffset;
- trans = -1;
- break;
- case 'n':
- offy = li.height + li.yoffset;
- break;
- case 's':
- offy = li.height + li.yoffset;
- trans = -1;
- break;
- default:
- break;
- }
- }
-
-
-
- // pre-draw so can get it's dimensions.
- if (this.label) {
- this._labelElem = $('<div class="jqplot-meterGauge-label" style="position:absolute;">'+this.label+'</div>');
- this.canvas._elem.after(this._labelElem);
- }
-
- var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
- var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
- var fill = (opts.fill != undefined) ? opts.fill : this.fill;
- var cw = ctx.canvas.width;
- var ch = ctx.canvas.height;
- if (this.padding == null) {
- this.padding = Math.round(Math.min(cw, ch)/30);
- }
- var w = cw - offx - 2 * this.padding;
- var h = ch - offy - 2 * this.padding;
- if (this.labelPosition == 'bottom' && this.label) {
- h -= this._labelElem.outerHeight(true);
- }
- var mindim = Math.min(w,h);
- var d = mindim;
-
- if (!this.diameter) {
- if (this.semiCircular) {
- if ( w >= 2*h) {
- if (!this.ringWidth) {
- this.ringWidth = 2*h/35;
- }
- this.needleThickness = this.needleThickness || 2+Math.pow(this.ringWidth, 0.8);
- this.innerPad = this.ringWidth/2 + this.needleThickness/2 + this.needlePad;
- this.diameter = 2 * (h - 2*this.innerPad);
- }
- else {
- if (!this.ringWidth) {
- this.ringWidth = w/35;
- }
- this.needleThickness = this.needleThickness || 2+Math.pow(this.ringWidth, 0.8);
- this.innerPad = this.ringWidth/2 + this.needleThickness/2 + this.needlePad;
- this.diameter = w - 2*this.innerPad - this.ringWidth - this.padding;
- }
- // center taking into account legend and over draw for gauge bottom below hub.
- // this will be center of hub.
- this._center = [(cw - trans * offx)/2 + trans * offx, (ch + trans*offy - this.padding - this.ringWidth - this.innerPad)];
- }
- else {
- if (!this.ringWidth) {
- this.ringWidth = d/35;
- }
- this.needleThickness = this.needleThickness || 2+Math.pow(this.ringWidth, 0.8);
- this.innerPad = 0;
- this.diameter = d - this.ringWidth;
- // center in middle of canvas taking into account legend.
- // will be center of hub.
- this._center = [(cw-trans*offx)/2 + trans * offx, (ch-trans*offy)/2 + trans * offy];
- }
- }
-
-
- if (this._labelElem && this.labelPosition == 'bottom') {
- this._center[1] -= this._labelElem.outerHeight(true);
- }
-
- this._radius = this.diameter/2;
-
- this.tickSpacing = 6000/this.diameter;
-
- if (!this.hubRadius) {
- this.hubRadius = this.diameter/18;
- }
-
- this.shadowOffset = 0.5 + this.ringWidth/9;
- this.shadowWidth = this.ringWidth*1;
-
- this.tickPadding = 3 + Math.pow(this.diameter/20, 0.7);
- this.tickOuterRadius = this._radius - this.ringWidth/2 - this.tickPadding;
- this.tickLength = (this.showTicks) ? this._radius/13 : 0;
-
- if (this.ticks.length == 0) {
- // no ticks, lets make some.
- var max = this.max,
- min = this.min,
- setmax = this.setmax,
- setmin = this.setmin,
- ti = (max - min) * this.tickSpacing / this.span;
- var tf = Math.floor(parseFloat((Math.log(ti)/Math.log(10)).toFixed(11)));
- var tp = (ti/Math.pow(10, tf));
- (tp > 2 && tp <= 2.5) ? tp = 2.5 : tp = Math.ceil(tp);
- var t = this.tickPositions;
- var tpindex, nt;
-
- for (i=0; i<t.length; i++) {
- if (tp == t[i] || i && t[i-1] < tp && tp < t[i]) {
- ti = t[i]*Math.pow(10, tf);
- tpindex = i;
- }
- }
-
- for (i=0; i<t.length; i++) {
- if (tp == t[i] || i && t[i-1] < tp && tp < t[i]) {
- ti = t[i]*Math.pow(10, tf);
- nt = Math.ceil((max - min) / ti);
- }
- }
-
- // both max and min are free
- if (setmax && setmin) {
- var tmin = (min > 0) ? min - min % ti : min - min % ti - ti;
- if (!this.forceZero) {
- var diff = Math.min(min - tmin, 0.8*ti);
- var ntp = Math.floor(diff/t[tpindex]);
- if (ntp > 1) {
- tmin = tmin + t[tpindex] * (ntp-1);
- if (parseInt(tmin, 10) != tmin && parseInt(tmin-t[tpindex], 10) == tmin-t[tpindex]) {
- tmin = tmin - t[tpindex];
- }
- }
- }
- if (min == tmin) {
- min -= ti;
- }
- else {
- // tmin should always be lower than dataMin
- if (min - tmin > 0.23*ti) {
- min = tmin;
- }
- else {
- min = tmin -ti;
- nt += 1;
- }
- }
- nt += 1;
- var tmax = min + (nt - 1) * ti;
- if (max >= tmax) {
- tmax += ti;
- nt += 1;
- }
- // now tmax should always be mroe than dataMax
- if (tmax - max < 0.23*ti) {
- tmax += ti;
- nt += 1;
- }
- this.max = max = tmax;
- this.min = min;
-
- this.tickInterval = ti;
- this.numberTicks = nt;
- var it;
- for (i=0; i<nt; i++) {
- it = parseFloat((min+i*ti).toFixed(11));
- this.ticks.push([it, it]);
- }
- this.max = this.ticks[nt-1][1];
-
- this.tickFactor = tf;
- // determine number of minor ticks
-
- this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor);
-
- if (!this.numberMinorTicks) {
- this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor-1);
- }
- }
- // max is free, min is fixed
- else if (setmax) {
- var tmax = min + (nt - 1) * ti;
- if (max >= tmax) {
- max = tmax + ti;
- nt += 1;
- }
- else {
- max = tmax;
- }
-
- this.tickInterval = this.tickInterval || ti;
- this.numberTicks = this.numberTicks || nt;
- var it;
- for (i=0; i<this.numberTicks; i++) {
- it = parseFloat((min+i*this.tickInterval).toFixed(11));
- this.ticks.push([it, it]);
- }
- this.max = this.ticks[this.numberTicks-1][1];
-
- this.tickFactor = tf;
- // determine number of minor ticks
- this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor);
-
- if (!this.numberMinorTicks) {
- this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor-1);
- }
- }
-
- // not setting max or min
- if (!setmax && !setmin) {
- var range = this.max - this.min;
- tf = Math.floor(parseFloat((Math.log(range)/Math.log(10)).toFixed(11))) - 1;
- var nticks = [5,6,4,7,3,8,9,10,2], res, numticks, nonSigDigits=0, sigRange;
- // check to see how many zeros are at the end of the range
- if (range > 1) {
- var rstr = String(range);
- if (rstr.search(/\./) == -1) {
- var pos = rstr.search(/0+$/);
- nonSigDigits = (pos > 0) ? rstr.length - pos - 1 : 0;
- }
- }
- sigRange = range/Math.pow(10, nonSigDigits);
- for (i=0; i<nticks.length; i++) {
- res = sigRange/(nticks[i]-1);
- if (res == parseInt(res, 10)) {
- this.numberTicks = nticks[i];
- this.tickInterval = range/(this.numberTicks-1);
- this.tickFactor = tf+1;
- break;
- }
- }
- var it;
- for (i=0; i<this.numberTicks; i++) {
- it = parseFloat((this.min+i*this.tickInterval).toFixed(11));
- this.ticks.push([it, it]);
- }
- // determine number of minor ticks
- this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor);
-
- if (!this.numberMinorTicks) {
- this.numberMinorTicks = getnmt(this.tickPositions, this.tickInterval, this.tickFactor-1);
- }
-
- if (!this.numberMinorTicks) {
- this.numberMinorTicks = 1;
- var nums = [4, 5, 3, 6, 2];
- for (i=0; i<5; i++) {
- var temp = this.tickInterval/nums[i];
- if (temp == parseInt(temp, 10)) {
- this.numberMinorTicks = nums[i]-1;
- break;
- }
- }
- }
- }
- }
-
-
- var r = this._radius,
- sa = this.startAngle,
- ea = this.endAngle,
- pi = Math.PI,
- hpi = Math.PI/2;
-
- if (this.semiCircular) {
- var overAngle = Math.atan(this.innerPad/r),
- outersa = this.outerStartAngle = sa - overAngle,
- outerea = this.outerEndAngle = ea + overAngle,
- hubsa = this.hubStartAngle = sa - Math.atan(this.innerPad/this.hubRadius*2),
- hubea = this.hubEndAngle = ea + Math.atan(this.innerPad/this.hubRadius*2);
-
- ctx.save();
-
- ctx.translate(this._center[0], this._center[1]);
- ctx.lineJoin = "round";
- ctx.lineCap = "round";
-
- // draw the innerbackground
- ctx.save();
- ctx.beginPath();
- ctx.fillStyle = this.background;
- ctx.arc(0, 0, r, outersa, outerea, false);
- ctx.closePath();
- ctx.fill();
- ctx.restore();
-
- // draw the shadow
- // the outer ring.
- var shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')';
- ctx.save();
- for (var i=0; i<this.shadowDepth; i++) {
- ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));
- ctx.beginPath();
- ctx.strokeStyle = shadowColor;
- ctx.lineWidth = this.shadowWidth;
- ctx.arc(0 ,0, r, outersa, outerea, false);
- ctx.closePath();
- ctx.stroke();
- }
- ctx.restore();
-
- // the inner hub.
- ctx.save();
- var tempd = parseInt((this.shadowDepth+1)/2, 10);
- for (var i=0; i<tempd; i++) {
- ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));
- ctx.beginPath();
- ctx.fillStyle = shadowColor;
- ctx.arc(0 ,0, this.hubRadius, hubsa, hubea, false);
- ctx.closePath();
- ctx.fill();
- }
- ctx.restore();
-
- // draw the outer ring.
- ctx.save();
- ctx.beginPath();
- ctx.strokeStyle = this.ringColor;
- ctx.lineWidth = this.ringWidth;
- ctx.arc(0 ,0, r, outersa, outerea, false);
- ctx.closePath();
- ctx.stroke();
- ctx.restore();
-
- // draw the hub
-
- ctx.save();
- ctx.beginPath();
- ctx.fillStyle = this.ringColor;
- ctx.arc(0 ,0, this.hubRadius,hubsa, hubea, false);
- ctx.closePath();
- ctx.fill();
- ctx.restore();
-
- // draw the ticks
- if (this.showTicks) {
- ctx.save();
- var orad = this.tickOuterRadius,
- tl = this.tickLength,
- mtl = tl/2,
- nmt = this.numberMinorTicks,
- ts = this.span * Math.PI / 180 / (this.ticks.length-1),
- mts = ts/(nmt + 1);
-
- for (i = 0; i<this.ticks.length; i++) {
- ctx.beginPath();
- ctx.lineWidth = 1.5 + this.diameter/360;
- ctx.strokeStyle = this.ringColor;
- var wps = ts*i+sa;
- ctx.moveTo(-orad * Math.cos(ts*i+sa), orad * Math.sin(ts*i+sa));
- ctx.lineTo(-(orad-tl) * Math.cos(ts*i+sa), (orad - tl) * Math.sin(ts*i+sa));
- this._tickPoints.push([(orad-tl) * Math.cos(ts*i+sa) + this._center[0] + this.canvas._offsets.left, (orad - tl) * Math.sin(ts*i+sa) + this._center[1] + this.canvas._offsets.top, ts*i+sa]);
- ctx.stroke();
- ctx.lineWidth = 1.0 + this.diameter/440;
- if (i<this.ticks.length-1) {
- for (var j=1; j<=nmt; j++) {
- ctx.beginPath();
- ctx.moveTo(-orad * Math.cos(ts*i+mts*j+sa), orad * Math.sin(ts*i+mts*j+sa));
- ctx.lineTo(-(orad-mtl) * Math.cos(ts*i+mts*j+sa), (orad-mtl) * Math.sin(ts*i+mts*j+sa));
- ctx.stroke();
- }
- }
- }
- ctx.restore();
- }
-
- // draw the tick labels
- if (this.showTickLabels) {
- var elem, l, t, ew, eh, dim, maxdim=0;
- var tp = this.tickPadding * (1 - 1/(this.diameter/80+1));
- for (i=0; i<this.ticks.length; i++) {
- elem = $('<div class="jqplot-meterGauge-tick" style="position:absolute;">'+this.ticks[i][1]+'</div>');
- this.canvas._elem.after(elem);
- ew = elem.outerWidth(true);
- eh = elem.outerHeight(true);
- l = this._tickPoints[i][0] - ew * (this._tickPoints[i][2]-Math.PI)/Math.PI - tp * Math.cos(this._tickPoints[i][2]);
- t = this._tickPoints[i][1] - eh/2 + eh/2 * Math.pow(Math.abs((Math.sin(this._tickPoints[i][2]))), 0.5) + tp/3 * Math.pow(Math.abs((Math.sin(this._tickPoints[i][2]))), 0.5) ;
- // t = this._tickPoints[i][1] - eh/2 - eh/2 * Math.sin(this._tickPoints[i][2]) - tp/2 * Math.sin(this._tickPoints[i][2]);
- elem.css({left:l, top:t});
- dim = ew*Math.cos(this._tickPoints[i][2]) + eh*Math.sin(Math.PI/2+this._tickPoints[i][2]/2);
- maxdim = (dim > maxdim) ? dim : maxdim;
- }
- }
-
- // draw the gauge label
- if (this.label && this.labelPosition == 'inside') {
- var l = this._center[0] + this.canvas._offsets.left;
- var tp = this.tickPadding * (1 - 1/(this.diameter/80+1));
- var t = 0.5*(this._center[1] + this.canvas._offsets.top - this.hubRadius) + 0.5*(this._center[1] + this.canvas._offsets.top - this.tickOuterRadius + this.tickLength + tp) + this.labelHeightAdjust;
- // this._labelElem = $('<div class="jqplot-meterGauge-label" style="position:absolute;">'+this.label+'</div>');
- // this.canvas._elem.after(this._labelElem);
- l -= this._labelElem.outerWidth(true)/2;
- t -= this._labelElem.outerHeight(true)/2;
- this._labelElem.css({left:l, top:t});
- }
-
- else if (this.label && this.labelPosition == 'bottom') {
- var l = this._center[0] + this.canvas._offsets.left - this._labelElem.outerWidth(true)/2;
- var t = this._center[1] + this.canvas._offsets.top + this.innerPad + + this.ringWidth + this.padding + this.labelHeightAdjust;
- this._labelElem.css({left:l, top:t});
-
- }
-
- // draw the intervals
-
- ctx.save();
- var inner = this.intervalInnerRadius || this.hubRadius * 1.5;
- if (this.intervalOuterRadius == null) {
- if (this.showTickLabels) {
- var outer = (this.tickOuterRadius - this.tickLength - this.tickPadding - this.diameter/8);
- }
- else {
- var outer = (this.tickOuterRadius - this.tickLength - this.diameter/16);
- }
- }
- else {
- var outer = this.intervalOuterRadius;
- }
- var range = this.max - this.min;
- var intrange = this.intervals[this.intervals.length-1] - this.min;
- var start, end, span = this.span*Math.PI/180;
- for (i=0; i<this.intervals.length; i++) {
- start = (i == 0) ? sa : sa + (this.intervals[i-1][0] - this.min)*span/range;
- if (start < 0) {
- start = 0;
- }
- end = sa + (this.intervals[i][0] - this.min)*span/range;
- if (end < 0) {
- end = 0;
- }
- ctx.beginPath();
- ctx.fillStyle = this.intervals[i][2];
- ctx.arc(0, 0, inner, start, end, false);
- ctx.lineTo(outer*Math.cos(end), outer*Math.sin(end));
- ctx.arc(0, 0, outer, end, start, true);
- ctx.lineTo(inner*Math.cos(start), inner*Math.sin(start));
- ctx.closePath();
- ctx.fill();
- }
- ctx.restore();
-
- // draw the needle
- var datapoint = this.data[0][1];
- var dataspan = this.max - this.min;
- if (this.pegNeedle) {
- if (this.data[0][1] > this.max + dataspan*3/this.span) {
- datapoint = this.max + dataspan*3/this.span;
- }
- if (this.data[0][1] < this.min - dataspan*3/this.span) {
- datapoint = this.min - dataspan*3/this.span;
- }
- }
- var dataang = (datapoint - this.min)/dataspan * this.span * Math.PI/180 + this.startAngle;
-
-
- ctx.save();
- ctx.beginPath();
- ctx.fillStyle = this.ringColor;
- ctx.strokeStyle = this.ringColor;
- this.needleLength = (this.tickOuterRadius - this.tickLength) * 0.85;
- this.needleThickness = (this.needleThickness < 2) ? 2 : this.needleThickness;
- var endwidth = this.needleThickness * 0.4;
-
-
- var dl = this.needleLength/10;
- var dt = (this.needleThickness - endwidth)/10;
- var templ;
- for (var i=0; i<10; i++) {
- templ = this.needleThickness - i*dt;
- ctx.moveTo(dl*i*Math.cos(dataang), dl*i*Math.sin(dataang));
- ctx.lineWidth = templ;
- ctx.lineTo(dl*(i+1)*Math.cos(dataang), dl*(i+1)*Math.sin(dataang));
- ctx.stroke();
- }
-
- ctx.restore();
- }
- else {
- this._center = [(cw - trans * offx)/2 + trans * offx, (ch - trans*offy)/2 + trans * offy];
- }
- };
-
- $.jqplot.MeterGaugeAxisRenderer = function() {
- $.jqplot.LinearAxisRenderer.call(this);
- };
-
- $.jqplot.MeterGaugeAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
- $.jqplot.MeterGaugeAxisRenderer.prototype.constructor = $.jqplot.MeterGaugeAxisRenderer;
-
-
- // There are no traditional axes on a gauge chart. We just need to provide
- // dummy objects with properties so the plot will render.
- // called with scope of axis object.
- $.jqplot.MeterGaugeAxisRenderer.prototype.init = function(options){
- //
- this.tickRenderer = $.jqplot.MeterGaugeTickRenderer;
- $.extend(true, this, options);
- // I don't think I'm going to need _dataBounds here.
- // have to go Axis scaling in a way to fit chart onto plot area
- // and provide u2p and p2u functionality for mouse cursor, etc.
- // for convienence set _dataBounds to 0 and 100 and
- // set min/max to 0 and 100.
- this._dataBounds = {min:0, max:100};
- this.min = 0;
- this.max = 100;
- this.showTicks = false;
- this.ticks = [];
- this.showMark = false;
- this.show = false;
- };
-
- $.jqplot.MeterGaugeLegendRenderer = function(){
- $.jqplot.TableLegendRenderer.call(this);
- };
-
- $.jqplot.MeterGaugeLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
- $.jqplot.MeterGaugeLegendRenderer.prototype.constructor = $.jqplot.MeterGaugeLegendRenderer;
-
- /**
- * Class: $.jqplot.MeterGaugeLegendRenderer
- *Meter gauges don't typically have a legend, this overrides the default legend renderer.
- */
- $.jqplot.MeterGaugeLegendRenderer.prototype.init = function(options) {
- // Maximum number of rows in the legend. 0 or null for unlimited.
- this.numberRows = null;
- // Maximum number of columns in the legend. 0 or null for unlimited.
- this.numberColumns = null;
- $.extend(true, this, options);
- };
-
- // called with context of legend
- $.jqplot.MeterGaugeLegendRenderer.prototype.draw = function() {
- if (this.show) {
- var series = this._series;
- var ss = 'position:absolute;';
- ss += (this.background) ? 'background:'+this.background+';' : '';
- ss += (this.border) ? 'border:'+this.border+';' : '';
- ss += (this.fontSize) ? 'font-size:'+this.fontSize+';' : '';
- ss += (this.fontFamily) ? 'font-family:'+this.fontFamily+';' : '';
- ss += (this.textColor) ? 'color:'+this.textColor+';' : '';
- ss += (this.marginTop != null) ? 'margin-top:'+this.marginTop+';' : '';
- ss += (this.marginBottom != null) ? 'margin-bottom:'+this.marginBottom+';' : '';
- ss += (this.marginLeft != null) ? 'margin-left:'+this.marginLeft+';' : '';
- ss += (this.marginRight != null) ? 'margin-right:'+this.marginRight+';' : '';
- this._elem = $('<table class="jqplot-table-legend" style="'+ss+'"></table>');
- // MeterGauge charts legends don't go by number of series, but by number of data points
- // in the series. Refactor things here for that.
-
- var pad = false,
- reverse = false,
- nr, nc;
- var s = series[0];
-
- if (s.show) {
- var pd = s.data;
- if (this.numberRows) {
- nr = this.numberRows;
- if (!this.numberColumns){
- nc = Math.ceil(pd.length/nr);
- }
- else{
- nc = this.numberColumns;
- }
- }
- else if (this.numberColumns) {
- nc = this.numberColumns;
- nr = Math.ceil(pd.length/this.numberColumns);
- }
- else {
- nr = pd.length;
- nc = 1;
- }
-
- var i, j, tr, td1, td2, lt, rs, color;
- var idx = 0;
-
- for (i=0; i<nr; i++) {
- if (reverse){
- tr = $('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem);
- }
- else{
- tr = $('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem);
- }
- for (j=0; j<nc; j++) {
- if (idx < pd.length){
- // debugger
- lt = this.labels[idx] || pd[idx][0].toString();
- color = s.color;
- if (!reverse){
- if (i>0){
- pad = true;
- }
- else{
- pad = false;
- }
- }
- else{
- if (i == nr -1){
- pad = false;
- }
- else{
- pad = true;
- }
- }
- rs = (pad) ? this.rowSpacing : '0';
-
- td1 = $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+
- '<div><div class="jqplot-table-legend-swatch" style="border-color:'+color+';"></div>'+
- '</div></td>');
- td2 = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>');
- if (this.escapeHtml){
- td2.text(lt);
- }
- else {
- td2.html(lt);
- }
- if (reverse) {
- td2.prependTo(tr);
- td1.prependTo(tr);
- }
- else {
- td1.appendTo(tr);
- td2.appendTo(tr);
- }
- pad = true;
- }
- idx++;
- }
- }
- }
- }
- return this._elem;
- };
-
-
- // setup default renderers for axes and legend so user doesn't have to
- // called with scope of plot
- function preInit(target, data, options) {
- // debugger
- options = options || {};
- options.axesDefaults = options.axesDefaults || {};
- options.legend = options.legend || {};
- options.seriesDefaults = options.seriesDefaults || {};
- options.grid = options.grid || {};
-
- // only set these if there is a gauge series
- var setopts = false;
- if (options.seriesDefaults.renderer == $.jqplot.MeterGaugeRenderer) {
- setopts = true;
- }
- else if (options.series) {
- for (var i=0; i < options.series.length; i++) {
- if (options.series[i].renderer == $.jqplot.MeterGaugeRenderer) {
- setopts = true;
- }
- }
- }
-
- if (setopts) {
- options.axesDefaults.renderer = $.jqplot.MeterGaugeAxisRenderer;
- options.legend.renderer = $.jqplot.MeterGaugeLegendRenderer;
- options.legend.preDraw = true;
- options.grid.background = options.grid.background || 'white';
- options.grid.drawGridlines = false;
- options.grid.borderWidth = (options.grid.borderWidth != null) ? options.grid.borderWidth : 0;
- options.grid.shadow = (options.grid.shadow != null) ? options.grid.shadow : false;
- }
- }
-
- // called with scope of plot
- function postParseOptions(options) {
- //
- }
-
- $.jqplot.preInitHooks.push(preInit);
- $.jqplot.postParseOptionsHooks.push(postParseOptions);
-
- $.jqplot.MeterGaugeTickRenderer = function() {
- $.jqplot.AxisTickRenderer.call(this);
- };
-
- $.jqplot.MeterGaugeTickRenderer.prototype = new $.jqplot.AxisTickRenderer();
- $.jqplot.MeterGaugeTickRenderer.prototype.constructor = $.jqplot.MeterGaugeTickRenderer;
-
-})(jQuery);
-
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.min.js
deleted file mode 100644
index 2514b739..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.meterGaugeRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(c){c.jqplot.MeterGaugeRenderer=function(){c.jqplot.LineRenderer.call(this)};c.jqplot.MeterGaugeRenderer.prototype=new c.jqplot.LineRenderer();c.jqplot.MeterGaugeRenderer.prototype.constructor=c.jqplot.MeterGaugeRenderer;c.jqplot.MeterGaugeRenderer.prototype.init=function(e){this.diameter=null;this.padding=null;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=4;this.background="#efefef";this.ringColor="#BBC6D0";this.needleColor="#C3D3E5";this.tickColor="989898";this.ringWidth=null;this.min;this.max;this.ticks=[];this.showTicks=true;this.showTickLabels=true;this.label=null;this.labelHeightAdjust=0;this.labelPosition="inside";this.intervals=[];this.intervalColors=["#4bb2c5","#EAA228","#c5b47f","#579575","#839557","#958c12","#953579","#4b5de4","#d8b83f","#ff5800","#0085cc","#c747a3","#cddf54","#FBD178","#26B4E3","#bd70c7"];this.intervalInnerRadius=null;this.intervalOuterRadius=null;this.tickRenderer=c.jqplot.MeterGaugeTickRenderer;this.tickPositions=[1,2,2.5,5,10];this.tickSpacing=30;this.numberMinorTicks=null;this.hubRadius=null;this.tickPadding=null;this.needleThickness=null;this.needlePad=6;this.pegNeedle=true;this._type="meterGauge";c.extend(true,this,e);this.type=null;this.numberTicks=null;this.tickInterval=null;this.span=180;if(this.type=="circular"){this.semiCircular=false}else{if(this.type!="circular"){this.semiCircular=true}else{this.semiCircular=(this.span<=180)?true:false}}this._tickPoints=[];this._labelElem=null;this.startAngle=(90+(360-this.span)/2)*Math.PI/180;this.endAngle=(90-(360-this.span)/2)*Math.PI/180;this.setmin=!!(this.min==null);this.setmax=!!(this.max==null);if(this.intervals.length){if(this.intervals[0].length==null||this.intervals.length==1){for(var f=0;f<this.intervals.length;f++){this.intervals[f]=[this.intervals[f],this.intervals[f],this.intervalColors[f]]}}else{if(this.intervals[0].length==2){for(f=0;f<this.intervals.length;f++){this.intervals[f]=[this.intervals[f][0],this.intervals[f][1],this.intervalColors[f]]}}}}if(this.ticks.length){if(this.ticks[0].length==null||this.ticks[0].length==1){for(var f=0;f<this.ticks.length;f++){this.ticks[f]=[this.ticks[f],this.ticks[f]]}}this.min=(this.min==null)?this.ticks[0][0]:this.min;this.max=(this.max==null)?this.ticks[this.ticks.length-1][0]:this.max;this.setmin=false;this.setmax=false;this.numberTicks=this.ticks.length;this.tickInterval=this.ticks[1][0]-this.ticks[0][0];this.tickFactor=Math.floor(parseFloat((Math.log(this.tickInterval)/Math.log(10)).toFixed(11)));this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor);if(!this.numberMinorTicks){this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor-1)}if(!this.numberMinorTicks){this.numberMinorTicks=1}}else{if(this.intervals.length){this.min=(this.min==null)?0:this.min;this.setmin=false;if(this.max==null){if(this.intervals[this.intervals.length-1][0]>=this.data[0][1]){this.max=this.intervals[this.intervals.length-1][0];this.setmax=false}}else{this.setmax=false}}else{this.min=(this.min==null)?0:this.min;this.setmin=false;if(this.max==null){this.max=this.data[0][1]*1.25;this.setmax=true}else{this.setmax=false}}}};c.jqplot.MeterGaugeRenderer.prototype.setGridData=function(j){var f=[];var k=[];var e=this.startAngle;for(var h=0;h<this.data.length;h++){f.push(this.data[h][1]);k.push([this.data[h][0]]);if(h>0){f[h]+=f[h-1]}}var g=Math.PI*2/f[f.length-1];for(var h=0;h<f.length;h++){k[h][1]=f[h]*g}this.gridData=k};c.jqplot.MeterGaugeRenderer.prototype.makeGridData=function(j,k){var f=[];var l=[];var e=this.startAngle;for(var h=0;h<j.length;h++){f.push(j[h][1]);l.push([j[h][0]]);if(h>0){f[h]+=f[h-1]}}var g=Math.PI*2/f[f.length-1];for(var h=0;h<f.length;h++){l[h][1]=f[h]*g}return l};function b(j,f,g){var e;for(var h=j.length-1;h>=0;h--){e=f/(j[h]*Math.pow(10,g));if(e==4||e==5){return e-1}}return null}c.jqplot.MeterGaugeRenderer.prototype.draw=function(X,aC,ap){var aa;var aM=(ap!=undefined)?ap:{};var ai=0;var ah=0;var at=1;if(ap.legendInfo&&ap.legendInfo.placement=="inside"){var aI=ap.legendInfo;switch(aI.location){case"nw":ai=aI.width+aI.xoffset;break;case"w":ai=aI.width+aI.xoffset;break;case"sw":ai=aI.width+aI.xoffset;break;case"ne":ai=aI.width+aI.xoffset;at=-1;break;case"e":ai=aI.width+aI.xoffset;at=-1;break;case"se":ai=aI.width+aI.xoffset;at=-1;break;case"n":ah=aI.height+aI.yoffset;break;case"s":ah=aI.height+aI.yoffset;at=-1;break;default:break}}if(this.label){this._labelElem=c('<div class="jqplot-meterGauge-label" style="position:absolute;">'+this.label+"</div>");this.canvas._elem.after(this._labelElem)}var m=(aM.shadow!=undefined)?aM.shadow:this.shadow;var N=(aM.showLine!=undefined)?aM.showLine:this.showLine;var I=(aM.fill!=undefined)?aM.fill:this.fill;var K=X.canvas.width;var S=X.canvas.height;if(this.padding==null){this.padding=Math.round(Math.min(K,S)/30)}var Q=K-ai-2*this.padding;var ab=S-ah-2*this.padding;if(this.labelPosition=="bottom"&&this.label){ab-=this._labelElem.outerHeight(true)}var L=Math.min(Q,ab);var ad=L;if(!this.diameter){if(this.semiCircular){if(Q>=2*ab){if(!this.ringWidth){this.ringWidth=2*ab/35}this.needleThickness=this.needleThickness||2+Math.pow(this.ringWidth,0.8);this.innerPad=this.ringWidth/2+this.needleThickness/2+this.needlePad;this.diameter=2*(ab-2*this.innerPad)}else{if(!this.ringWidth){this.ringWidth=Q/35}this.needleThickness=this.needleThickness||2+Math.pow(this.ringWidth,0.8);this.innerPad=this.ringWidth/2+this.needleThickness/2+this.needlePad;this.diameter=Q-2*this.innerPad-this.ringWidth-this.padding}this._center=[(K-at*ai)/2+at*ai,(S+at*ah-this.padding-this.ringWidth-this.innerPad)]}else{if(!this.ringWidth){this.ringWidth=ad/35}this.needleThickness=this.needleThickness||2+Math.pow(this.ringWidth,0.8);this.innerPad=0;this.diameter=ad-this.ringWidth;this._center=[(K-at*ai)/2+at*ai,(S-at*ah)/2+at*ah]}}if(this._labelElem&&this.labelPosition=="bottom"){this._center[1]-=this._labelElem.outerHeight(true)}this._radius=this.diameter/2;this.tickSpacing=6000/this.diameter;if(!this.hubRadius){this.hubRadius=this.diameter/18}this.shadowOffset=0.5+this.ringWidth/9;this.shadowWidth=this.ringWidth*1;this.tickPadding=3+Math.pow(this.diameter/20,0.7);this.tickOuterRadius=this._radius-this.ringWidth/2-this.tickPadding;this.tickLength=(this.showTicks)?this._radius/13:0;if(this.ticks.length==0){var A=this.max,aL=this.min,q=this.setmax,aG=this.setmin,au=(A-aL)*this.tickSpacing/this.span;var aw=Math.floor(parseFloat((Math.log(au)/Math.log(10)).toFixed(11)));var an=(au/Math.pow(10,aw));(an>2&&an<=2.5)?an=2.5:an=Math.ceil(an);var T=this.tickPositions;var aA,ak;for(aa=0;aa<T.length;aa++){if(an==T[aa]||aa&&T[aa-1]<an&&an<T[aa]){au=T[aa]*Math.pow(10,aw);aA=aa}}for(aa=0;aa<T.length;aa++){if(an==T[aa]||aa&&T[aa-1]<an&&an<T[aa]){au=T[aa]*Math.pow(10,aw);ak=Math.ceil((A-aL)/au)}}if(q&&aG){var aP=(aL>0)?aL-aL%au:aL-aL%au-au;if(!this.forceZero){var D=Math.min(aL-aP,0.8*au);var o=Math.floor(D/T[aA]);if(o>1){aP=aP+T[aA]*(o-1);if(parseInt(aP,10)!=aP&&parseInt(aP-T[aA],10)==aP-T[aA]){aP=aP-T[aA]}}}if(aL==aP){aL-=au}else{if(aL-aP>0.23*au){aL=aP}else{aL=aP-au;ak+=1}}ak+=1;var E=aL+(ak-1)*au;if(A>=E){E+=au;ak+=1}if(E-A<0.23*au){E+=au;ak+=1}this.max=A=E;this.min=aL;this.tickInterval=au;this.numberTicks=ak;var O;for(aa=0;aa<ak;aa++){O=parseFloat((aL+aa*au).toFixed(11));this.ticks.push([O,O])}this.max=this.ticks[ak-1][1];this.tickFactor=aw;this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor);if(!this.numberMinorTicks){this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor-1)}}else{if(q){var E=aL+(ak-1)*au;if(A>=E){A=E+au;ak+=1}else{A=E}this.tickInterval=this.tickInterval||au;this.numberTicks=this.numberTicks||ak;var O;for(aa=0;aa<this.numberTicks;aa++){O=parseFloat((aL+aa*this.tickInterval).toFixed(11));this.ticks.push([O,O])}this.max=this.ticks[this.numberTicks-1][1];this.tickFactor=aw;this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor);if(!this.numberMinorTicks){this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor-1)}}}if(!q&&!aG){var P=this.max-this.min;aw=Math.floor(parseFloat((Math.log(P)/Math.log(10)).toFixed(11)))-1;var aN=[5,6,4,7,3,8,9,10,2],V,C,av=0,M;if(P>1){var aJ=String(P);if(aJ.search(/\./)==-1){var aF=aJ.search(/0+$/);av=(aF>0)?aJ.length-aF-1:0}}M=P/Math.pow(10,av);for(aa=0;aa<aN.length;aa++){V=M/(aN[aa]-1);if(V==parseInt(V,10)){this.numberTicks=aN[aa];this.tickInterval=P/(this.numberTicks-1);this.tickFactor=aw+1;break}}var O;for(aa=0;aa<this.numberTicks;aa++){O=parseFloat((this.min+aa*this.tickInterval).toFixed(11));this.ticks.push([O,O])}this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor);if(!this.numberMinorTicks){this.numberMinorTicks=b(this.tickPositions,this.tickInterval,this.tickFactor-1)}if(!this.numberMinorTicks){this.numberMinorTicks=1;var aH=[4,5,3,6,2];for(aa=0;aa<5;aa++){var ao=this.tickInterval/aH[aa];if(ao==parseInt(ao,10)){this.numberMinorTicks=aH[aa]-1;break}}}}}var U=this._radius,aE=this.startAngle,k=this.endAngle,H=Math.PI,e=Math.PI/2;if(this.semiCircular){var z=Math.atan(this.innerPad/U),ac=this.outerStartAngle=aE-z,aB=this.outerEndAngle=k+z,B=this.hubStartAngle=aE-Math.atan(this.innerPad/this.hubRadius*2),af=this.hubEndAngle=k+Math.atan(this.innerPad/this.hubRadius*2);X.save();X.translate(this._center[0],this._center[1]);X.lineJoin="round";X.lineCap="round";X.save();X.beginPath();X.fillStyle=this.background;X.arc(0,0,U,ac,aB,false);X.closePath();X.fill();X.restore();var aj="rgba(0,0,0,"+this.shadowAlpha+")";X.save();for(var aa=0;aa<this.shadowDepth;aa++){X.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));X.beginPath();X.strokeStyle=aj;X.lineWidth=this.shadowWidth;X.arc(0,0,U,ac,aB,false);X.closePath();X.stroke()}X.restore();X.save();var az=parseInt((this.shadowDepth+1)/2,10);for(var aa=0;aa<az;aa++){X.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));X.beginPath();X.fillStyle=aj;X.arc(0,0,this.hubRadius,B,af,false);X.closePath();X.fill()}X.restore();X.save();X.beginPath();X.strokeStyle=this.ringColor;X.lineWidth=this.ringWidth;X.arc(0,0,U,ac,aB,false);X.closePath();X.stroke();X.restore();X.save();X.beginPath();X.fillStyle=this.ringColor;X.arc(0,0,this.hubRadius,B,af,false);X.closePath();X.fill();X.restore();if(this.showTicks){X.save();var f=this.tickOuterRadius,aq=this.tickLength,v=aq/2,F=this.numberMinorTicks,am=this.span*Math.PI/180/(this.ticks.length-1),p=am/(F+1);for(aa=0;aa<this.ticks.length;aa++){X.beginPath();X.lineWidth=1.5+this.diameter/360;X.strokeStyle=this.ringColor;var ae=am*aa+aE;X.moveTo(-f*Math.cos(am*aa+aE),f*Math.sin(am*aa+aE));X.lineTo(-(f-aq)*Math.cos(am*aa+aE),(f-aq)*Math.sin(am*aa+aE));this._tickPoints.push([(f-aq)*Math.cos(am*aa+aE)+this._center[0]+this.canvas._offsets.left,(f-aq)*Math.sin(am*aa+aE)+this._center[1]+this.canvas._offsets.top,am*aa+aE]);X.stroke();X.lineWidth=1+this.diameter/440;if(aa<this.ticks.length-1){for(var Y=1;Y<=F;Y++){X.beginPath();X.moveTo(-f*Math.cos(am*aa+p*Y+aE),f*Math.sin(am*aa+p*Y+aE));X.lineTo(-(f-v)*Math.cos(am*aa+p*Y+aE),(f-v)*Math.sin(am*aa+p*Y+aE));X.stroke()}}}X.restore()}if(this.showTickLabels){var J,W,T,aO,g,G,n=0;var an=this.tickPadding*(1-1/(this.diameter/80+1));for(aa=0;aa<this.ticks.length;aa++){J=c('<div class="jqplot-meterGauge-tick" style="position:absolute;">'+this.ticks[aa][1]+"</div>");this.canvas._elem.after(J);aO=J.outerWidth(true);g=J.outerHeight(true);W=this._tickPoints[aa][0]-aO*(this._tickPoints[aa][2]-Math.PI)/Math.PI-an*Math.cos(this._tickPoints[aa][2]);T=this._tickPoints[aa][1]-g/2+g/2*Math.pow(Math.abs((Math.sin(this._tickPoints[aa][2]))),0.5)+an/3*Math.pow(Math.abs((Math.sin(this._tickPoints[aa][2]))),0.5);J.css({left:W,top:T});G=aO*Math.cos(this._tickPoints[aa][2])+g*Math.sin(Math.PI/2+this._tickPoints[aa][2]/2);n=(G>n)?G:n}}if(this.label&&this.labelPosition=="inside"){var W=this._center[0]+this.canvas._offsets.left;var an=this.tickPadding*(1-1/(this.diameter/80+1));var T=0.5*(this._center[1]+this.canvas._offsets.top-this.hubRadius)+0.5*(this._center[1]+this.canvas._offsets.top-this.tickOuterRadius+this.tickLength+an)+this.labelHeightAdjust;W-=this._labelElem.outerWidth(true)/2;T-=this._labelElem.outerHeight(true)/2;this._labelElem.css({left:W,top:T})}else{if(this.label&&this.labelPosition=="bottom"){var W=this._center[0]+this.canvas._offsets.left-this._labelElem.outerWidth(true)/2;var T=this._center[1]+this.canvas._offsets.top+this.innerPad+ +this.ringWidth+this.padding+this.labelHeightAdjust;this._labelElem.css({left:W,top:T})}}X.save();var ax=this.intervalInnerRadius||this.hubRadius*1.5;if(this.intervalOuterRadius==null){if(this.showTickLabels){var ag=(this.tickOuterRadius-this.tickLength-this.tickPadding-this.diameter/8)}else{var ag=(this.tickOuterRadius-this.tickLength-this.diameter/16)}}else{var ag=this.intervalOuterRadius}var P=this.max-this.min;var aD=this.intervals[this.intervals.length-1]-this.min;var y,Z,u=this.span*Math.PI/180;for(aa=0;aa<this.intervals.length;aa++){y=(aa==0)?aE:aE+(this.intervals[aa-1][0]-this.min)*u/P;if(y<0){y=0}Z=aE+(this.intervals[aa][0]-this.min)*u/P;if(Z<0){Z=0}X.beginPath();X.fillStyle=this.intervals[aa][2];X.arc(0,0,ax,y,Z,false);X.lineTo(ag*Math.cos(Z),ag*Math.sin(Z));X.arc(0,0,ag,Z,y,true);X.lineTo(ax*Math.cos(y),ax*Math.sin(y));X.closePath();X.fill()}X.restore();var ay=this.data[0][1];var R=this.max-this.min;if(this.pegNeedle){if(this.data[0][1]>this.max+R*3/this.span){ay=this.max+R*3/this.span}if(this.data[0][1]<this.min-R*3/this.span){ay=this.min-R*3/this.span}}var al=(ay-this.min)/R*this.span*Math.PI/180+this.startAngle;X.save();X.beginPath();X.fillStyle=this.ringColor;X.strokeStyle=this.ringColor;this.needleLength=(this.tickOuterRadius-this.tickLength)*0.85;this.needleThickness=(this.needleThickness<2)?2:this.needleThickness;var aK=this.needleThickness*0.4;var x=this.needleLength/10;var s=(this.needleThickness-aK)/10;var ar;for(var aa=0;aa<10;aa++){ar=this.needleThickness-aa*s;X.moveTo(x*aa*Math.cos(al),x*aa*Math.sin(al));X.lineWidth=ar;X.lineTo(x*(aa+1)*Math.cos(al),x*(aa+1)*Math.sin(al));X.stroke()}X.restore()}else{this._center=[(K-at*ai)/2+at*ai,(S-at*ah)/2+at*ah]}};c.jqplot.MeterGaugeAxisRenderer=function(){c.jqplot.LinearAxisRenderer.call(this)};c.jqplot.MeterGaugeAxisRenderer.prototype=new c.jqplot.LinearAxisRenderer();c.jqplot.MeterGaugeAxisRenderer.prototype.constructor=c.jqplot.MeterGaugeAxisRenderer;c.jqplot.MeterGaugeAxisRenderer.prototype.init=function(e){this.tickRenderer=c.jqplot.MeterGaugeTickRenderer;c.extend(true,this,e);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};c.jqplot.MeterGaugeLegendRenderer=function(){c.jqplot.TableLegendRenderer.call(this)};c.jqplot.MeterGaugeLegendRenderer.prototype=new c.jqplot.TableLegendRenderer();c.jqplot.MeterGaugeLegendRenderer.prototype.constructor=c.jqplot.MeterGaugeLegendRenderer;c.jqplot.MeterGaugeLegendRenderer.prototype.init=function(e){this.numberRows=null;this.numberColumns=null;c.extend(true,this,e)};c.jqplot.MeterGaugeLegendRenderer.prototype.draw=function(){if(this.show){var p=this._series;var x="position:absolute;";x+=(this.background)?"background:"+this.background+";":"";x+=(this.border)?"border:"+this.border+";":"";x+=(this.fontSize)?"font-size:"+this.fontSize+";":"";x+=(this.fontFamily)?"font-family:"+this.fontFamily+";":"";x+=(this.textColor)?"color:"+this.textColor+";":"";x+=(this.marginTop!=null)?"margin-top:"+this.marginTop+";":"";x+=(this.marginBottom!=null)?"margin-bottom:"+this.marginBottom+";":"";x+=(this.marginLeft!=null)?"margin-left:"+this.marginLeft+";":"";x+=(this.marginRight!=null)?"margin-right:"+this.marginRight+";":"";this._elem=c('<table class="jqplot-table-legend" style="'+x+'"></table>');var f=false,q=false,u,o;var w=p[0];if(w.show){var t=w.data;if(this.numberRows){u=this.numberRows;if(!this.numberColumns){o=Math.ceil(t.length/u)}else{o=this.numberColumns}}else{if(this.numberColumns){o=this.numberColumns;u=Math.ceil(t.length/this.numberColumns)}else{u=t.length;o=1}}var n,m,r,g,e,l,k,h;var v=0;for(n=0;n<u;n++){if(q){r=c('<tr class="jqplot-table-legend"></tr>').prependTo(this._elem)}else{r=c('<tr class="jqplot-table-legend"></tr>').appendTo(this._elem)}for(m=0;m<o;m++){if(v<t.length){l=this.labels[v]||t[v][0].toString();h=w.color;if(!q){if(n>0){f=true}else{f=false}}else{if(n==u-1){f=false}else{f=true}}k=(f)?this.rowSpacing:"0";g=c('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+k+';"><div><div class="jqplot-table-legend-swatch" style="border-color:'+h+';"></div></div></td>');e=c('<td class="jqplot-table-legend" style="padding-top:'+k+';"></td>');if(this.escapeHtml){e.text(l)}else{e.html(l)}if(q){e.prependTo(r);g.prependTo(r)}else{g.appendTo(r);e.appendTo(r)}f=true}v++}}}}return this._elem};function a(j,h,f){f=f||{};f.axesDefaults=f.axesDefaults||{};f.legend=f.legend||{};f.seriesDefaults=f.seriesDefaults||{};f.grid=f.grid||{};var e=false;if(f.seriesDefaults.renderer==c.jqplot.MeterGaugeRenderer){e=true}else{if(f.series){for(var g=0;g<f.series.length;g++){if(f.series[g].renderer==c.jqplot.MeterGaugeRenderer){e=true}}}}if(e){f.axesDefaults.renderer=c.jqplot.MeterGaugeAxisRenderer;f.legend.renderer=c.jqplot.MeterGaugeLegendRenderer;f.legend.preDraw=true;f.grid.background=f.grid.background||"white";f.grid.drawGridlines=false;f.grid.borderWidth=(f.grid.borderWidth!=null)?f.grid.borderWidth:0;f.grid.shadow=(f.grid.shadow!=null)?f.grid.shadow:false}}function d(e){}c.jqplot.preInitHooks.push(a);c.jqplot.postParseOptionsHooks.push(d);c.jqplot.MeterGaugeTickRenderer=function(){c.jqplot.AxisTickRenderer.call(this)};c.jqplot.MeterGaugeTickRenderer.prototype=new c.jqplot.AxisTickRenderer();c.jqplot.MeterGaugeTickRenderer.prototype.constructor=c.jqplot.MeterGaugeTickRenderer})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.js
deleted file mode 100644
index 221f92d0..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.js
+++ /dev/null
@@ -1,45 +0,0 @@
-/**
- * jqplot.jquerymobile plugin
- * jQuery Mobile virtual event support.
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2011 Takashi Okamoto
- * 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 .
- *
- */
-(function($) {
- function postInit(target, data, options){
- this.bindCustomEvents = function() {
- this.eventCanvas._elem.bind('vclick', {plot:this}, this.onClick);
- this.eventCanvas._elem.bind('dblclick', {plot:this}, this.onDblClick);
- this.eventCanvas._elem.bind('taphold', {plot:this}, this.onDblClick);
- this.eventCanvas._elem.bind('vmousedown', {plot:this}, this.onMouseDown);
- this.eventCanvas._elem.bind('vmousemove', {plot:this}, this.onMouseMove);
- this.eventCanvas._elem.bind('mouseenter', {plot:this}, this.onMouseEnter);
- this.eventCanvas._elem.bind('mouseleave', {plot:this}, this.onMouseLeave);
- if (this.captureRightClick) {
- this.eventCanvas._elem.bind('vmouseup', {plot:this}, this.onRightClick);
- this.eventCanvas._elem.get(0).oncontextmenu = function() {
- return false;
- };
- }
- else {
- this.eventCanvas._elem.bind('vmouseup', {plot:this}, this.onMouseUp);
- }
- };
- this.plugins.mobile = true;
- }
- $.jqplot.postInitHooks.push(postInit);
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.min.js
deleted file mode 100644
index 41ebe00f..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.mobile.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(b){function a(e,d,c){this.bindCustomEvents=function(){this.eventCanvas._elem.bind("vclick",{plot:this},this.onClick);this.eventCanvas._elem.bind("dblclick",{plot:this},this.onDblClick);this.eventCanvas._elem.bind("taphold",{plot:this},this.onDblClick);this.eventCanvas._elem.bind("vmousedown",{plot:this},this.onMouseDown);this.eventCanvas._elem.bind("vmousemove",{plot:this},this.onMouseMove);this.eventCanvas._elem.bind("mouseenter",{plot:this},this.onMouseEnter);this.eventCanvas._elem.bind("mouseleave",{plot:this},this.onMouseLeave);if(this.captureRightClick){this.eventCanvas._elem.bind("vmouseup",{plot:this},this.onRightClick);this.eventCanvas._elem.get(0).oncontextmenu=function(){return false}}else{this.eventCanvas._elem.bind("vmouseup",{plot:this},this.onMouseUp)}};this.plugins.mobile=true}b.jqplot.postInitHooks.push(a)})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.js
deleted file mode 100644
index 0fd1de36..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.js
+++ /dev/null
@@ -1,373 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- /**
- * Class: $.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}}],
- *
- */
- $.jqplot.OHLCRenderer = function(){
- // subclass line renderer to make use of some of it's methods.
- $.jqplot.LineRenderer.call(this);
- // prop: candleStick
- // true to render chart as candleStick.
- // Must have an open price, cannot be a hlc chart.
- this.candleStick = false;
- // prop: tickLength
- // length of the line in pixels indicating open and close price.
- // Default will auto calculate based on plot width and
- // number of points displayed.
- this.tickLength = 'auto';
- // prop: bodyWidth
- // width of the candlestick body in pixels. Default will auto calculate
- // based on plot width and number of candlesticks displayed.
- this.bodyWidth = 'auto';
- // prop: openColor
- // color of the open price tick mark. Default is series color.
- this.openColor = null;
- // prop: closeColor
- // color of the close price tick mark. Default is series color.
- this.closeColor = null;
- // prop: wickColor
- // color of the hi-lo line thorugh the candlestick body.
- // Default is the series color.
- this.wickColor = null;
- // prop: fillUpBody
- // true to render an "up" day (close price greater than open price)
- // with a filled candlestick body.
- this.fillUpBody = false;
- // prop: fillDownBody
- // true to render a "down" day (close price lower than open price)
- // with a filled candlestick body.
- this.fillDownBody = true;
- // prop: upBodyColor
- // Color of candlestick body of an "up" day. Default is series color.
- this.upBodyColor = null;
- // prop: downBodyColor
- // Color of candlestick body on a "down" day. Default is series color.
- this.downBodyColor = null;
- // prop: hlc
- // true if is a hi-low-close chart (no open price).
- // This is determined automatically from the series data.
- this.hlc = false;
- // prop: lineWidth
- // Width of the hi-low line and open/close ticks.
- // Must be set in the rendererOptions for the series.
- this.lineWidth = 1.5;
- this._tickLength;
- this._bodyWidth;
- };
-
- $.jqplot.OHLCRenderer.prototype = new $.jqplot.LineRenderer();
- $.jqplot.OHLCRenderer.prototype.constructor = $.jqplot.OHLCRenderer;
-
- // called with scope of series.
- $.jqplot.OHLCRenderer.prototype.init = function(options) {
- options = options || {};
- // lineWidth has to be set on the series, changes in renderer
- // constructor have no effect. set the default here
- // if no renderer option for lineWidth is specified.
- this.lineWidth = options.lineWidth || 1.5;
- $.jqplot.LineRenderer.prototype.init.call(this, options);
- this._type = 'ohlc';
- // set the yaxis data bounds here to account for hi and low values
- var db = this._yaxis._dataBounds;
- var d = this._plotData;
- // if data points have less than 5 values, force a hlc chart.
- if (d[0].length < 5) {
- this.renderer.hlc = true;
-
- for (var j=0; j<d.length; j++) {
- if (d[j][2] < db.min || db.min == null) {
- db.min = d[j][2];
- }
- if (d[j][1] > db.max || db.max == null) {
- db.max = d[j][1];
- }
- }
- }
- else {
- for (var j=0; j<d.length; j++) {
- if (d[j][3] < db.min || db.min == null) {
- db.min = d[j][3];
- }
- if (d[j][2] > db.max || db.max == null) {
- db.max = d[j][2];
- }
- }
- }
-
- };
-
- // called within scope of series.
- $.jqplot.OHLCRenderer.prototype.draw = function(ctx, gd, options) {
- var d = this.data;
- var xmin = this._xaxis.min;
- var xmax = this._xaxis.max;
- // index of last value below range of plot.
- var xminidx = 0;
- // index of first value above range of plot.
- var xmaxidx = d.length;
- var xp = this._xaxis.series_u2p;
- var yp = this._yaxis.series_u2p;
- var i, prevColor, ops, b, h, w, a, points;
- var o;
- var r = this.renderer;
- var opts = (options != undefined) ? options : {};
- var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
- var fill = (opts.fill != undefined) ? opts.fill : this.fill;
- var fillAndStroke = (opts.fillAndStroke != undefined) ? opts.fillAndStroke : this.fillAndStroke;
- r.bodyWidth = (opts.bodyWidth != undefined) ? opts.bodyWidth : r.bodyWidth;
- r.tickLength = (opts.tickLength != undefined) ? opts.tickLength : r.tickLength;
- ctx.save();
- if (this.show) {
- var x, open, hi, low, close;
- // need to get widths based on number of points shown,
- // not on total number of points. Use the results
- // to speed up drawing in next step.
- for (var i=0; i<d.length; i++) {
- if (d[i][0] < xmin) {
- xminidx = i;
- }
- else if (d[i][0] < xmax) {
- xmaxidx = i+1;
- }
- }
-
- var dwidth = this.gridData[xmaxidx-1][0] - this.gridData[xminidx][0];
- var nvisiblePoints = xmaxidx - xminidx;
- try {
- var dinterval = Math.abs(this._xaxis.series_u2p(parseInt(this._xaxis._intervalStats[0].sortedIntervals[0].interval, 10)) - this._xaxis.series_u2p(0));
- }
-
- catch (e) {
- var dinterval = dwidth / nvisiblePoints;
- }
-
- if (r.candleStick) {
- if (typeof(r.bodyWidth) == 'number') {
- r._bodyWidth = r.bodyWidth;
- }
- else {
- r._bodyWidth = Math.min(20, dinterval/1.65);
- }
- }
- else {
- if (typeof(r.tickLength) == 'number') {
- r._tickLength = r.tickLength;
- }
- else {
- r._tickLength = Math.min(10, dinterval/3.5);
- }
- }
-
- for (var i=xminidx; i<xmaxidx; i++) {
- x = xp(d[i][0]);
- if (r.hlc) {
- open = null;
- hi = yp(d[i][1]);
- low = yp(d[i][2]);
- close = yp(d[i][3]);
- }
- else {
- open = yp(d[i][1]);
- hi = yp(d[i][2]);
- low = yp(d[i][3]);
- close = yp(d[i][4]);
- }
- o = {};
- if (r.candleStick && !r.hlc) {
- w = r._bodyWidth;
- a = x - w/2;
- // draw candle
- // determine if candle up or down
- // up, remember grid coordinates increase downward
- if (close < open) {
- // draw wick
- if (r.wickColor) {
- o.color = r.wickColor;
- }
- else if (r.downBodyColor) {
- o.color = r.upBodyColor;
- }
- ops = $.extend(true, {}, opts, o);
- r.shapeRenderer.draw(ctx, [[x, hi], [x, close]], ops);
- r.shapeRenderer.draw(ctx, [[x, open], [x, low]], ops);
- o = {};
- b = close;
- h = open - close;
- // if color specified, use it
- if (r.fillUpBody) {
- o.fillRect = true;
- }
- else {
- o.strokeRect = true;
- w = w - this.lineWidth;
- a = x - w/2;
- }
- if (r.upBodyColor) {
- o.color = r.upBodyColor;
- o.fillStyle = r.upBodyColor;
- }
- points = [a, b, w, h];
- }
- // down
- else if (close > open) {
- // draw wick
- if (r.wickColor) {
- o.color = r.wickColor;
- }
- else if (r.downBodyColor) {
- o.color = r.downBodyColor;
- }
- ops = $.extend(true, {}, opts, o);
- r.shapeRenderer.draw(ctx, [[x, hi], [x, open]], ops);
- r.shapeRenderer.draw(ctx, [[x, close], [x, low]], ops);
-
- o = {};
-
- b = open;
- h = close - open;
- // if color specified, use it
- if (r.fillDownBody) {
- o.fillRect = true;
- }
- else {
- o.strokeRect = true;
- w = w - this.lineWidth;
- a = x - w/2;
- }
- if (r.downBodyColor) {
- o.color = r.downBodyColor;
- o.fillStyle = r.downBodyColor;
- }
- points = [a, b, w, h];
- }
- // even, open = close
- else {
- // draw wick
- if (r.wickColor) {
- o.color = r.wickColor;
- }
- ops = $.extend(true, {}, opts, o);
- r.shapeRenderer.draw(ctx, [[x, hi], [x, low]], ops);
- o = {};
- o.fillRect = false;
- o.strokeRect = false;
- a = [x - w/2, open];
- b = [x + w/2, close];
- w = null;
- h = null;
- points = [a, b];
- }
- ops = $.extend(true, {}, opts, o);
- r.shapeRenderer.draw(ctx, points, ops);
- }
- else {
- prevColor = opts.color;
- if (r.openColor) {
- opts.color = r.openColor;
- }
- // draw open tick
- if (!r.hlc) {
- r.shapeRenderer.draw(ctx, [[x-r._tickLength, open], [x, open]], opts);
- }
- opts.color = prevColor;
- // draw wick
- if (r.wickColor) {
- opts.color = r.wickColor;
- }
- r.shapeRenderer.draw(ctx, [[x, hi], [x, low]], opts);
- opts.color = prevColor;
- // draw close tick
- if (r.closeColor) {
- opts.color = r.closeColor;
- }
- r.shapeRenderer.draw(ctx, [[x, close], [x+r._tickLength, close]], opts);
- opts.color = prevColor;
- }
- }
- }
-
- ctx.restore();
- };
-
- $.jqplot.OHLCRenderer.prototype.drawShadow = function(ctx, gd, options) {
- // This is a no-op, shadows drawn with lines.
- };
-
- // called with scope of plot.
- $.jqplot.OHLCRenderer.checkOptions = function(target, data, options) {
- // provide some sensible highlighter options by default
- // These aren't good for hlc, only for ohlc or candlestick
- if (!options.highlighter) {
- options.highlighter = {
- showMarker:false,
- tooltipAxes: 'y',
- yvalues: 4,
- formatString:'<table class="jqplot-highlighter"><tr><td>date:</td><td>%s</td></tr><tr><td>open:</td><td>%s</td></tr><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>'
- };
- }
- };
-
- //$.jqplot.preInitHooks.push($.jqplot.OHLCRenderer.checkOptions);
-
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.min.js
deleted file mode 100644
index 61cd8b88..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.ohlcRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(a){a.jqplot.OHLCRenderer=function(){a.jqplot.LineRenderer.call(this);this.candleStick=false;this.tickLength="auto";this.bodyWidth="auto";this.openColor=null;this.closeColor=null;this.wickColor=null;this.fillUpBody=false;this.fillDownBody=true;this.upBodyColor=null;this.downBodyColor=null;this.hlc=false;this.lineWidth=1.5;this._tickLength;this._bodyWidth};a.jqplot.OHLCRenderer.prototype=new a.jqplot.LineRenderer();a.jqplot.OHLCRenderer.prototype.constructor=a.jqplot.OHLCRenderer;a.jqplot.OHLCRenderer.prototype.init=function(e){e=e||{};this.lineWidth=e.lineWidth||1.5;a.jqplot.LineRenderer.prototype.init.call(this,e);this._type="ohlc";var b=this._yaxis._dataBounds;var f=this._plotData;if(f[0].length<5){this.renderer.hlc=true;for(var c=0;c<f.length;c++){if(f[c][2]<b.min||b.min==null){b.min=f[c][2]}if(f[c][1]>b.max||b.max==null){b.max=f[c][1]}}}else{for(var c=0;c<f.length;c++){if(f[c][3]<b.min||b.min==null){b.min=f[c][3]}if(f[c][2]>b.max||b.max==null){b.max=f[c][2]}}}};a.jqplot.OHLCRenderer.prototype.draw=function(A,N,j){var J=this.data;var v=this._xaxis.min;var z=this._xaxis.max;var l=0;var K=J.length;var p=this._xaxis.series_u2p;var G=this._yaxis.series_u2p;var D,E,f,M,F,n,O,C;var y;var u=this.renderer;var s=(j!=undefined)?j:{};var k=(s.shadow!=undefined)?s.shadow:this.shadow;var B=(s.fill!=undefined)?s.fill:this.fill;var c=(s.fillAndStroke!=undefined)?s.fillAndStroke:this.fillAndStroke;u.bodyWidth=(s.bodyWidth!=undefined)?s.bodyWidth:u.bodyWidth;u.tickLength=(s.tickLength!=undefined)?s.tickLength:u.tickLength;A.save();if(this.show){var m,q,g,Q,t;for(var D=0;D<J.length;D++){if(J[D][0]<v){l=D}else{if(J[D][0]<z){K=D+1}}}var I=this.gridData[K-1][0]-this.gridData[l][0];var L=K-l;try{var P=Math.abs(this._xaxis.series_u2p(parseInt(this._xaxis._intervalStats[0].sortedIntervals[0].interval,10))-this._xaxis.series_u2p(0))}catch(H){var P=I/L}if(u.candleStick){if(typeof(u.bodyWidth)=="number"){u._bodyWidth=u.bodyWidth}else{u._bodyWidth=Math.min(20,P/1.65)}}else{if(typeof(u.tickLength)=="number"){u._tickLength=u.tickLength}else{u._tickLength=Math.min(10,P/3.5)}}for(var D=l;D<K;D++){m=p(J[D][0]);if(u.hlc){q=null;g=G(J[D][1]);Q=G(J[D][2]);t=G(J[D][3])}else{q=G(J[D][1]);g=G(J[D][2]);Q=G(J[D][3]);t=G(J[D][4])}y={};if(u.candleStick&&!u.hlc){n=u._bodyWidth;O=m-n/2;if(t<q){if(u.wickColor){y.color=u.wickColor}else{if(u.downBodyColor){y.color=u.upBodyColor}}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,[[m,g],[m,t]],f);u.shapeRenderer.draw(A,[[m,q],[m,Q]],f);y={};M=t;F=q-t;if(u.fillUpBody){y.fillRect=true}else{y.strokeRect=true;n=n-this.lineWidth;O=m-n/2}if(u.upBodyColor){y.color=u.upBodyColor;y.fillStyle=u.upBodyColor}C=[O,M,n,F]}else{if(t>q){if(u.wickColor){y.color=u.wickColor}else{if(u.downBodyColor){y.color=u.downBodyColor}}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,[[m,g],[m,q]],f);u.shapeRenderer.draw(A,[[m,t],[m,Q]],f);y={};M=q;F=t-q;if(u.fillDownBody){y.fillRect=true}else{y.strokeRect=true;n=n-this.lineWidth;O=m-n/2}if(u.downBodyColor){y.color=u.downBodyColor;y.fillStyle=u.downBodyColor}C=[O,M,n,F]}else{if(u.wickColor){y.color=u.wickColor}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,[[m,g],[m,Q]],f);y={};y.fillRect=false;y.strokeRect=false;O=[m-n/2,q];M=[m+n/2,t];n=null;F=null;C=[O,M]}}f=a.extend(true,{},s,y);u.shapeRenderer.draw(A,C,f)}else{E=s.color;if(u.openColor){s.color=u.openColor}if(!u.hlc){u.shapeRenderer.draw(A,[[m-u._tickLength,q],[m,q]],s)}s.color=E;if(u.wickColor){s.color=u.wickColor}u.shapeRenderer.draw(A,[[m,g],[m,Q]],s);s.color=E;if(u.closeColor){s.color=u.closeColor}u.shapeRenderer.draw(A,[[m,t],[m+u._tickLength,t]],s);s.color=E}}}A.restore()};a.jqplot.OHLCRenderer.prototype.drawShadow=function(b,d,c){};a.jqplot.OHLCRenderer.checkOptions=function(d,c,b){if(!b.highlighter){b.highlighter={showMarker:false,tooltipAxes:"y",yvalues:4,formatString:'<table class="jqplot-highlighter"><tr><td>date:</td><td>%s</td></tr><tr><td>open:</td><td>%s</td></tr><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>'}}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.js
deleted file mode 100644
index 6a991aa1..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.js
+++ /dev/null
@@ -1,903 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- /**
- * Class: $.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.
- */
- $.jqplot.PieRenderer = function(){
- $.jqplot.LineRenderer.call(this);
- };
-
- $.jqplot.PieRenderer.prototype = new $.jqplot.LineRenderer();
- $.jqplot.PieRenderer.prototype.constructor = $.jqplot.PieRenderer;
-
- // called with scope of a series
- $.jqplot.PieRenderer.prototype.init = function(options, plot) {
- // Group: Properties
- //
- // prop: diameter
- // Outer diameter of the pie, auto computed by default
- this.diameter = null;
- // prop: padding
- // padding between the pie and plot edges, legend, etc.
- this.padding = 20;
- // prop: sliceMargin
- // angular spacing between pie slices in degrees.
- this.sliceMargin = 0;
- // prop: fill
- // true or false, wether to fil the slices.
- this.fill = true;
- // prop: shadowOffset
- // offset of the shadow from the slice and offset of
- // each succesive stroke of the shadow from the last.
- this.shadowOffset = 2;
- // prop: shadowAlpha
- // transparency of the shadow (0 = transparent, 1 = opaque)
- this.shadowAlpha = 0.07;
- // prop: shadowDepth
- // number of strokes to apply to the shadow,
- // each stroke offset shadowOffset from the last.
- this.shadowDepth = 5;
- // prop: highlightMouseOver
- // True to highlight slice when moused over.
- // This must be false to enable highlightMouseDown to highlight when clicking on a slice.
- this.highlightMouseOver = true;
- // prop: highlightMouseDown
- // True to highlight when a mouse button is pressed over a slice.
- // This will be disabled if highlightMouseOver is true.
- this.highlightMouseDown = false;
- // prop: highlightColors
- // an array of colors to use when highlighting a slice.
- this.highlightColors = [];
- // prop: dataLabels
- // Either 'label', 'value', 'percent' or an array of labels to place on the pie slices.
- // Defaults to percentage of each pie slice.
- this.dataLabels = 'percent';
- // prop: showDataLabels
- // true to show data labels on slices.
- this.showDataLabels = false;
- // prop: dataLabelFormatString
- // Format string for data labels. If none, '%s' is used for "label" and for arrays, '%d' for value and '%d%%' for percentage.
- this.dataLabelFormatString = null;
- // prop: dataLabelThreshold
- // 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.
- this.dataLabelThreshold = 3;
- // prop: dataLabelPositionFactor
- // 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.
- this.dataLabelPositionFactor = 0.52;
- // prop: dataLabelNudge
- // Number of pixels to slide the label away from (+) or toward (-) the center of the pie.
- this.dataLabelNudge = 2;
- // prop: dataLabelCenterOn
- // True to center the data label at its position.
- // False to set the inside facing edge of the label at its position.
- this.dataLabelCenterOn = true;
- // prop: startAngle
- // 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.
- this.startAngle = 0;
- this.tickRenderer = $.jqplot.PieTickRenderer;
- // Used as check for conditions where pie shouldn't be drawn.
- this._drawData = true;
- this._type = 'pie';
-
- // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
- if (options.highlightMouseDown && options.highlightMouseOver == null) {
- options.highlightMouseOver = false;
- }
-
- $.extend(true, this, options);
-
- if (this.sliceMargin < 0) {
- this.sliceMargin = 0;
- }
-
- this._diameter = null;
- this._radius = null;
- // array of [start,end] angles arrays, one for each slice. In radians.
- this._sliceAngles = [];
- // index of the currenty highlighted point, if any
- this._highlightedPoint = null;
-
- // set highlight colors if none provided
- if (this.highlightColors.length == 0) {
- for (var i=0; i<this.seriesColors.length; i++){
- var rgba = $.jqplot.getColorComponents(this.seriesColors[i]);
- var newrgb = [rgba[0], rgba[1], rgba[2]];
- var sum = newrgb[0] + newrgb[1] + newrgb[2];
- for (var j=0; j<3; j++) {
- // when darkening, lowest color component can be is 60.
- newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]);
- newrgb[j] = parseInt(newrgb[j], 10);
- }
- this.highlightColors.push('rgb('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+')');
- }
- }
-
- this.highlightColorGenerator = new $.jqplot.ColorGenerator(this.highlightColors);
-
- plot.postParseOptionsHooks.addOnce(postParseOptions);
- plot.postInitHooks.addOnce(postInit);
- plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
- plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown);
- plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp);
- plot.eventListenerHooks.addOnce('jqplotClick', handleClick);
- plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick);
- plot.postDrawHooks.addOnce(postPlotDraw);
- };
-
- $.jqplot.PieRenderer.prototype.setGridData = function(plot) {
- // set gridData property. This will hold angle in radians of each data point.
- var stack = [];
- var td = [];
- var sa = this.startAngle/180*Math.PI;
- var tot = 0;
- // don't know if we have any valid data yet, so set plot to not draw.
- this._drawData = false;
- for (var i=0; i<this.data.length; i++){
- if (this.data[i][1] != 0) {
- // we have data, O.K. to draw.
- this._drawData = true;
- }
- stack.push(this.data[i][1]);
- td.push([this.data[i][0]]);
- if (i>0) {
- stack[i] += stack[i-1];
- }
- tot += this.data[i][1];
- }
- var fact = Math.PI*2/stack[stack.length - 1];
-
- for (var i=0; i<stack.length; i++) {
- td[i][1] = stack[i] * fact;
- td[i][2] = this.data[i][1]/tot;
- }
- this.gridData = td;
- };
-
- $.jqplot.PieRenderer.prototype.makeGridData = function(data, plot) {
- var stack = [];
- var td = [];
- var tot = 0;
- var sa = this.startAngle/180*Math.PI;
- // don't know if we have any valid data yet, so set plot to not draw.
- this._drawData = false;
- for (var i=0; i<data.length; i++){
- if (this.data[i][1] != 0) {
- // we have data, O.K. to draw.
- this._drawData = true;
- }
- stack.push(data[i][1]);
- td.push([data[i][0]]);
- if (i>0) {
- stack[i] += stack[i-1];
- }
- tot += data[i][1];
- }
- var fact = Math.PI*2/stack[stack.length - 1];
-
- for (var i=0; i<stack.length; i++) {
- td[i][1] = stack[i] * fact;
- td[i][2] = data[i][1]/tot;
- }
- return td;
- };
-
- function calcRadiusAdjustment(ang) {
- return Math.sin((ang - (ang-Math.PI) / 8 / Math.PI )/2.0);
- }
-
- function calcRPrime(ang1, ang2, sliceMargin, fill, lineWidth) {
- var rprime = 0;
- var ang = ang2 - ang1;
- var absang = Math.abs(ang);
- var sm = sliceMargin;
- if (fill == false) {
- sm += lineWidth;
- }
-
- if (sm > 0 && absang > 0.01 && absang < 6.282) {
- rprime = parseFloat(sm) / 2.0 / calcRadiusAdjustment(ang);
- }
-
- return rprime;
- }
-
- $.jqplot.PieRenderer.prototype.drawSlice = function (ctx, ang1, ang2, color, isShadow) {
- if (this._drawData) {
- var r = this._radius;
- var fill = this.fill;
- var lineWidth = this.lineWidth;
- var sm = this.sliceMargin;
- if (this.fill == false) {
- sm += this.lineWidth;
- }
- ctx.save();
- ctx.translate(this._center[0], this._center[1]);
-
- var rprime = calcRPrime(ang1, ang2, this.sliceMargin, this.fill, this.lineWidth);
-
- var transx = rprime * Math.cos((ang1 + ang2) / 2.0);
- var transy = rprime * Math.sin((ang1 + ang2) / 2.0);
-
- if ((ang2 - ang1) <= Math.PI) {
- r -= rprime;
- }
- else {
- r += rprime;
- }
-
- ctx.translate(transx, transy);
-
- if (isShadow) {
- for (var i=0, l=this.shadowDepth; i<l; i++) {
- ctx.save();
- ctx.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI), this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));
- doDraw(r);
- }
- for (var i=0, l=this.shadowDepth; i<l; i++) {
- ctx.restore();
- }
- }
-
- else {
- doDraw(r);
- }
- ctx.restore();
- }
-
- function doDraw (rad) {
- // Fix for IE and Chrome that can't seem to draw circles correctly.
- // ang2 should always be <= 2 pi since that is the way the data is converted.
- // 2Pi = 6.2831853, Pi = 3.1415927
- if (ang2 > 6.282 + this.startAngle) {
- ang2 = 6.282 + this.startAngle;
- if (ang1 > ang2) {
- ang1 = 6.281 + this.startAngle;
- }
- }
- // Fix for IE, where it can't seem to handle 0 degree angles. Also avoids
- // ugly line on unfilled pies.
- if (ang1 >= ang2) {
- return;
- }
-
- ctx.beginPath();
- ctx.fillStyle = color;
- ctx.strokeStyle = color;
- ctx.lineWidth = lineWidth;
- ctx.arc(0, 0, rad, ang1, ang2, false);
- ctx.lineTo(0,0);
- ctx.closePath();
-
- if (fill) {
- ctx.fill();
- }
- else {
- ctx.stroke();
- }
- }
- };
-
- // called with scope of series
- $.jqplot.PieRenderer.prototype.draw = function (ctx, gd, options, plot) {
- var i;
- var opts = (options != undefined) ? options : {};
- // offset and direction of offset due to legend placement
- var offx = 0;
- var offy = 0;
- var trans = 1;
- var colorGenerator = new $.jqplot.ColorGenerator(this.seriesColors);
- if (options.legendInfo && options.legendInfo.placement == 'insideGrid') {
- var li = options.legendInfo;
- switch (li.location) {
- case 'nw':
- offx = li.width + li.xoffset;
- break;
- case 'w':
- offx = li.width + li.xoffset;
- break;
- case 'sw':
- offx = li.width + li.xoffset;
- break;
- case 'ne':
- offx = li.width + li.xoffset;
- trans = -1;
- break;
- case 'e':
- offx = li.width + li.xoffset;
- trans = -1;
- break;
- case 'se':
- offx = li.width + li.xoffset;
- trans = -1;
- break;
- case 'n':
- offy = li.height + li.yoffset;
- break;
- case 's':
- offy = li.height + li.yoffset;
- trans = -1;
- break;
- default:
- break;
- }
- }
-
- var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
- var fill = (opts.fill != undefined) ? opts.fill : this.fill;
- var cw = ctx.canvas.width;
- var ch = ctx.canvas.height;
- var w = cw - offx - 2 * this.padding;
- var h = ch - offy - 2 * this.padding;
- var mindim = Math.min(w,h);
- var d = mindim;
-
- // Fixes issue #272. Thanks hugwijst!
- // reset slice angles array.
- this._sliceAngles = [];
-
- var sm = this.sliceMargin;
- if (this.fill == false) {
- sm += this.lineWidth;
- }
-
- var rprime;
- var maxrprime = 0;
-
- var ang, ang1, ang2, shadowColor;
- var sa = this.startAngle / 180 * Math.PI;
-
- // have to pre-draw shadows, so loop throgh here and calculate some values also.
- for (var i=0, l=gd.length; i<l; i++) {
- ang1 = (i == 0) ? sa : gd[i-1][1] + sa;
- ang2 = gd[i][1] + sa;
-
- this._sliceAngles.push([ang1, ang2]);
-
- rprime = calcRPrime(ang1, ang2, this.sliceMargin, this.fill, this.lineWidth);
-
- if (Math.abs(ang2-ang1) > Math.PI) {
- maxrprime = Math.max(rprime, maxrprime);
- }
- }
-
- if (this.diameter != null && this.diameter > 0) {
- this._diameter = this.diameter - 2*maxrprime;
- }
- else {
- this._diameter = d - 2*maxrprime;
- }
-
- // Need to check for undersized pie. This can happen if
- // plot area too small and legend is too big.
- if (this._diameter < 6) {
- $.jqplot.log('Diameter of pie too small, not rendering.');
- return;
- }
-
- var r = this._radius = this._diameter/2;
-
- this._center = [(cw - trans * offx)/2 + trans * offx + maxrprime * Math.cos(sa), (ch - trans*offy)/2 + trans * offy + maxrprime * Math.sin(sa)];
-
- if (this.shadow) {
- for (var i=0, l=gd.length; i<l; i++) {
- shadowColor = 'rgba(0,0,0,'+this.shadowAlpha+')';
- this.renderer.drawSlice.call (this, ctx, this._sliceAngles[i][0], this._sliceAngles[i][1], shadowColor, true);
- }
- }
-
- for (var i=0; i<gd.length; i++) {
-
- this.renderer.drawSlice.call (this, ctx, this._sliceAngles[i][0], this._sliceAngles[i][1], colorGenerator.next(), false);
-
- if (this.showDataLabels && gd[i][2]*100 >= this.dataLabelThreshold) {
- var fstr, avgang = (this._sliceAngles[i][0] + this._sliceAngles[i][1])/2, label;
-
- if (this.dataLabels == 'label') {
- fstr = this.dataLabelFormatString || '%s';
- label = $.jqplot.sprintf(fstr, gd[i][0]);
- }
- else if (this.dataLabels == 'value') {
- fstr = this.dataLabelFormatString || '%d';
- label = $.jqplot.sprintf(fstr, this.data[i][1]);
- }
- else if (this.dataLabels == 'percent') {
- fstr = this.dataLabelFormatString || '%d%%';
- label = $.jqplot.sprintf(fstr, gd[i][2]*100);
- }
- else if (this.dataLabels.constructor == Array) {
- fstr = this.dataLabelFormatString || '%s';
- label = $.jqplot.sprintf(fstr, this.dataLabels[i]);
- }
-
- var fact = (this._radius ) * this.dataLabelPositionFactor + this.sliceMargin + this.dataLabelNudge;
-
- var x = this._center[0] + Math.cos(avgang) * fact + this.canvas._offsets.left;
- var y = this._center[1] + Math.sin(avgang) * fact + this.canvas._offsets.top;
-
- var labelelem = $('<div class="jqplot-pie-series jqplot-data-label" style="position:absolute;">' + label + '</div>').insertBefore(plot.eventCanvas._elem);
- if (this.dataLabelCenterOn) {
- x -= labelelem.width()/2;
- y -= labelelem.height()/2;
- }
- else {
- x -= labelelem.width() * Math.sin(avgang/2);
- y -= labelelem.height()/2;
- }
- x = Math.round(x);
- y = Math.round(y);
- labelelem.css({left: x, top: y});
- }
- }
- };
-
- $.jqplot.PieAxisRenderer = function() {
- $.jqplot.LinearAxisRenderer.call(this);
- };
-
- $.jqplot.PieAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
- $.jqplot.PieAxisRenderer.prototype.constructor = $.jqplot.PieAxisRenderer;
-
-
- // There are no traditional axes on a pie chart. We just need to provide
- // dummy objects with properties so the plot will render.
- // called with scope of axis object.
- $.jqplot.PieAxisRenderer.prototype.init = function(options){
- //
- this.tickRenderer = $.jqplot.PieTickRenderer;
- $.extend(true, this, options);
- // I don't think I'm going to need _dataBounds here.
- // have to go Axis scaling in a way to fit chart onto plot area
- // and provide u2p and p2u functionality for mouse cursor, etc.
- // for convienence set _dataBounds to 0 and 100 and
- // set min/max to 0 and 100.
- this._dataBounds = {min:0, max:100};
- this.min = 0;
- this.max = 100;
- this.showTicks = false;
- this.ticks = [];
- this.showMark = false;
- this.show = false;
- };
-
-
-
-
- $.jqplot.PieLegendRenderer = function(){
- $.jqplot.TableLegendRenderer.call(this);
- };
-
- $.jqplot.PieLegendRenderer.prototype = new $.jqplot.TableLegendRenderer();
- $.jqplot.PieLegendRenderer.prototype.constructor = $.jqplot.PieLegendRenderer;
-
- /**
- * Class: $.jqplot.PieLegendRenderer
- * Legend Renderer specific to pie plots. Set by default
- * when user creates a pie plot.
- */
- $.jqplot.PieLegendRenderer.prototype.init = function(options) {
- // Group: Properties
- //
- // prop: numberRows
- // Maximum number of rows in the legend. 0 or null for unlimited.
- this.numberRows = null;
- // prop: numberColumns
- // Maximum number of columns in the legend. 0 or null for unlimited.
- this.numberColumns = null;
- $.extend(true, this, options);
- };
-
- // called with context of legend
- $.jqplot.PieLegendRenderer.prototype.draw = function() {
- var legend = this;
- if (this.show) {
- var series = this._series;
-
-
- this._elem = $(document.createElement('table'));
- this._elem.addClass('jqplot-table-legend');
-
- var ss = {position:'absolute'};
- if (this.background) {
- ss['background'] = this.background;
- }
- if (this.border) {
- ss['border'] = this.border;
- }
- if (this.fontSize) {
- ss['fontSize'] = this.fontSize;
- }
- if (this.fontFamily) {
- ss['fontFamily'] = this.fontFamily;
- }
- if (this.textColor) {
- ss['textColor'] = this.textColor;
- }
- if (this.marginTop != null) {
- ss['marginTop'] = this.marginTop;
- }
- if (this.marginBottom != null) {
- ss['marginBottom'] = this.marginBottom;
- }
- if (this.marginLeft != null) {
- ss['marginLeft'] = this.marginLeft;
- }
- if (this.marginRight != null) {
- ss['marginRight'] = this.marginRight;
- }
-
- this._elem.css(ss);
-
- // Pie charts legends don't go by number of series, but by number of data points
- // in the series. Refactor things here for that.
-
- var pad = false,
- reverse = false,
- nr,
- nc;
- var s = series[0];
- var colorGenerator = new $.jqplot.ColorGenerator(s.seriesColors);
-
- if (s.show) {
- var pd = s.data;
- if (this.numberRows) {
- nr = this.numberRows;
- if (!this.numberColumns){
- nc = Math.ceil(pd.length/nr);
- }
- else{
- nc = this.numberColumns;
- }
- }
- else if (this.numberColumns) {
- nc = this.numberColumns;
- nr = Math.ceil(pd.length/this.numberColumns);
- }
- else {
- nr = pd.length;
- nc = 1;
- }
-
- var i, j;
- var tr, td1, td2;
- var lt, rs, color;
- var idx = 0;
- var div0, div1;
-
- for (i=0; i<nr; i++) {
- tr = $(document.createElement('tr'));
- tr.addClass('jqplot-table-legend');
-
- if (reverse){
- tr.prependTo(this._elem);
- }
-
- else{
- tr.appendTo(this._elem);
- }
-
- for (j=0; j<nc; j++) {
- if (idx < pd.length){
- lt = this.labels[idx] || pd[idx][0].toString();
- color = colorGenerator.next();
- if (!reverse){
- if (i>0){
- pad = true;
- }
- else{
- pad = false;
- }
- }
- else{
- if (i == nr -1){
- pad = false;
- }
- else{
- pad = true;
- }
- }
- rs = (pad) ? this.rowSpacing : '0';
-
-
-
- td1 = $(document.createElement('td'));
- td1.addClass('jqplot-table-legend jqplot-table-legend-swatch');
- td1.css({textAlign: 'center', paddingTop: rs});
-
- div0 = $(document.createElement('div'));
- div0.addClass('jqplot-table-legend-swatch-outline');
- div1 = $(document.createElement('div'));
- div1.addClass('jqplot-table-legend-swatch');
- div1.css({backgroundColor: color, borderColor: color});
- td1.append(div0.append(div1));
-
- td2 = $(document.createElement('td'));
- td2.addClass('jqplot-table-legend jqplot-table-legend-label');
- td2.css('paddingTop', rs);
-
- if (this.escapeHtml){
- td2.text(lt);
- }
- else {
- td2.html(lt);
- }
- if (reverse) {
- td2.prependTo(tr);
- td1.prependTo(tr);
- }
- else {
- td1.appendTo(tr);
- td2.appendTo(tr);
- }
- pad = true;
- }
- idx++;
- }
- }
- }
- }
- return this._elem;
- };
-
- $.jqplot.PieRenderer.prototype.handleMove = function(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- plot.target.trigger('jqplotDataMouseOver', ins);
- if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.pieRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
- plot.target.trigger('jqplotDataHighlight', ins);
- highlight (plot, ins[0], ins[1]);
- }
- }
- else if (neighbor == null) {
- unhighlight (plot);
- }
- };
-
-
- // this.eventCanvas._elem.bind($.jqplot.eventListenerHooks[i][0], {plot:this}, $.jqplot.eventListenerHooks[i][1]);
-
- // setup default renderers for axes and legend so user doesn't have to
- // called with scope of plot
- function preInit(target, data, options) {
- options = options || {};
- options.axesDefaults = options.axesDefaults || {};
- options.legend = options.legend || {};
- options.seriesDefaults = options.seriesDefaults || {};
- // only set these if there is a pie series
- var setopts = false;
- if (options.seriesDefaults.renderer == $.jqplot.PieRenderer) {
- setopts = true;
- }
- else if (options.series) {
- for (var i=0; i < options.series.length; i++) {
- if (options.series[i].renderer == $.jqplot.PieRenderer) {
- setopts = true;
- }
- }
- }
-
- if (setopts) {
- options.axesDefaults.renderer = $.jqplot.PieAxisRenderer;
- options.legend.renderer = $.jqplot.PieLegendRenderer;
- options.legend.preDraw = true;
- options.seriesDefaults.pointLabels = {show: false};
- }
- }
-
- function postInit(target, data, options) {
- for (var i=0; i<this.series.length; i++) {
- if (this.series[i].renderer.constructor == $.jqplot.PieRenderer) {
- // don't allow mouseover and mousedown at same time.
- if (this.series[i].highlightMouseOver) {
- this.series[i].highlightMouseDown = false;
- }
- }
- }
- }
-
- // called with scope of plot
- function postParseOptions(options) {
- for (var i=0; i<this.series.length; i++) {
- this.series[i].seriesColors = this.seriesColors;
- this.series[i].colorGenerator = $.jqplot.colorGenerator;
- }
- }
-
- function highlight (plot, sidx, pidx) {
- var s = plot.series[sidx];
- var canvas = plot.plugins.pieRenderer.highlightCanvas;
- canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
- s._highlightedPoint = pidx;
- plot.plugins.pieRenderer.highlightedSeriesIndex = sidx;
- s.renderer.drawSlice.call(s, canvas._ctx, s._sliceAngles[pidx][0], s._sliceAngles[pidx][1], s.highlightColorGenerator.get(pidx), false);
- }
-
- function unhighlight (plot) {
- var canvas = plot.plugins.pieRenderer.highlightCanvas;
- canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
- for (var i=0; i<plot.series.length; i++) {
- plot.series[i]._highlightedPoint = null;
- }
- plot.plugins.pieRenderer.highlightedSeriesIndex = null;
- plot.target.trigger('jqplotDataUnhighlight');
- }
-
- function handleMove(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- var evt1 = jQuery.Event('jqplotDataMouseOver');
- evt1.pageX = ev.pageX;
- evt1.pageY = ev.pageY;
- plot.target.trigger(evt1, ins);
- if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.pieRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
- var evt = jQuery.Event('jqplotDataHighlight');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- highlight (plot, ins[0], ins[1]);
- }
- }
- else if (neighbor == null) {
- unhighlight (plot);
- }
- }
-
- function handleMouseDown(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.pieRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
- var evt = jQuery.Event('jqplotDataHighlight');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- highlight (plot, ins[0], ins[1]);
- }
- }
- else if (neighbor == null) {
- unhighlight (plot);
- }
- }
-
- function handleMouseUp(ev, gridpos, datapos, neighbor, plot) {
- var idx = plot.plugins.pieRenderer.highlightedSeriesIndex;
- if (idx != null && plot.series[idx].highlightMouseDown) {
- unhighlight(plot);
- }
- }
-
- function handleClick(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- var evt = jQuery.Event('jqplotDataClick');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- }
- }
-
- function handleRightClick(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- var idx = plot.plugins.pieRenderer.highlightedSeriesIndex;
- if (idx != null && plot.series[idx].highlightMouseDown) {
- unhighlight(plot);
- }
- var evt = jQuery.Event('jqplotDataRightClick');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- }
- }
-
- // called within context of plot
- // create a canvas which we can draw on.
- // insert it before the eventCanvas, so eventCanvas will still capture events.
- function postPlotDraw() {
- // Memory Leaks patch
- if (this.plugins.pieRenderer && this.plugins.pieRenderer.highlightCanvas) {
- this.plugins.pieRenderer.highlightCanvas.resetCanvas();
- this.plugins.pieRenderer.highlightCanvas = null;
- }
-
- this.plugins.pieRenderer = {highlightedSeriesIndex:null};
- this.plugins.pieRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
-
- // do we have any data labels? if so, put highlight canvas before those
- var labels = $(this.targetId+' .jqplot-data-label');
- if (labels.length) {
- $(labels[0]).before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-pieRenderer-highlight-canvas', this._plotDimensions, this));
- }
- // else put highlight canvas before event canvas.
- else {
- this.eventCanvas._elem.before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-pieRenderer-highlight-canvas', this._plotDimensions, this));
- }
-
- var hctx = this.plugins.pieRenderer.highlightCanvas.setContext();
- this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
- }
-
- $.jqplot.preInitHooks.push(preInit);
-
- $.jqplot.PieTickRenderer = function() {
- $.jqplot.AxisTickRenderer.call(this);
- };
-
- $.jqplot.PieTickRenderer.prototype = new $.jqplot.AxisTickRenderer();
- $.jqplot.PieTickRenderer.prototype.constructor = $.jqplot.PieTickRenderer;
-
-})(jQuery);
-
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.min.js
deleted file mode 100644
index 0c5738a7..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pieRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(e){e.jqplot.PieRenderer=function(){e.jqplot.LineRenderer.call(this)};e.jqplot.PieRenderer.prototype=new e.jqplot.LineRenderer();e.jqplot.PieRenderer.prototype.constructor=e.jqplot.PieRenderer;e.jqplot.PieRenderer.prototype.init=function(q,u){this.diameter=null;this.padding=20;this.sliceMargin=0;this.fill=true;this.shadowOffset=2;this.shadowAlpha=0.07;this.shadowDepth=5;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.dataLabels="percent";this.showDataLabels=false;this.dataLabelFormatString=null;this.dataLabelThreshold=3;this.dataLabelPositionFactor=0.52;this.dataLabelNudge=2;this.dataLabelCenterOn=true;this.startAngle=0;this.tickRenderer=e.jqplot.PieTickRenderer;this._drawData=true;this._type="pie";if(q.highlightMouseDown&&q.highlightMouseOver==null){q.highlightMouseOver=false}e.extend(true,this,q);if(this.sliceMargin<0){this.sliceMargin=0}this._diameter=null;this._radius=null;this._sliceAngles=[];this._highlightedPoint=null;if(this.highlightColors.length==0){for(var s=0;s<this.seriesColors.length;s++){var r=e.jqplot.getColorComponents(this.seriesColors[s]);var o=[r[0],r[1],r[2]];var t=o[0]+o[1]+o[2];for(var p=0;p<3;p++){o[p]=(t>570)?o[p]*0.8:o[p]+0.3*(255-o[p]);o[p]=parseInt(o[p],10)}this.highlightColors.push("rgb("+o[0]+","+o[1]+","+o[2]+")")}}this.highlightColorGenerator=new e.jqplot.ColorGenerator(this.highlightColors);u.postParseOptionsHooks.addOnce(m);u.postInitHooks.addOnce(g);u.eventListenerHooks.addOnce("jqplotMouseMove",b);u.eventListenerHooks.addOnce("jqplotMouseDown",a);u.eventListenerHooks.addOnce("jqplotMouseUp",l);u.eventListenerHooks.addOnce("jqplotClick",f);u.eventListenerHooks.addOnce("jqplotRightClick",n);u.postDrawHooks.addOnce(i)};e.jqplot.PieRenderer.prototype.setGridData=function(t){var p=[];var u=[];var o=this.startAngle/180*Math.PI;var s=0;this._drawData=false;for(var r=0;r<this.data.length;r++){if(this.data[r][1]!=0){this._drawData=true}p.push(this.data[r][1]);u.push([this.data[r][0]]);if(r>0){p[r]+=p[r-1]}s+=this.data[r][1]}var q=Math.PI*2/p[p.length-1];for(var r=0;r<p.length;r++){u[r][1]=p[r]*q;u[r][2]=this.data[r][1]/s}this.gridData=u};e.jqplot.PieRenderer.prototype.makeGridData=function(t,u){var p=[];var v=[];var s=0;var o=this.startAngle/180*Math.PI;this._drawData=false;for(var r=0;r<t.length;r++){if(this.data[r][1]!=0){this._drawData=true}p.push(t[r][1]);v.push([t[r][0]]);if(r>0){p[r]+=p[r-1]}s+=t[r][1]}var q=Math.PI*2/p[p.length-1];for(var r=0;r<p.length;r++){v[r][1]=p[r]*q;v[r][2]=t[r][1]/s}return v};function h(o){return Math.sin((o-(o-Math.PI)/8/Math.PI)/2)}function j(u,t,o,v,r){var w=0;var q=t-u;var s=Math.abs(q);var p=o;if(v==false){p+=r}if(p>0&&s>0.01&&s<6.282){w=parseFloat(p)/2/h(q)}return w}e.jqplot.PieRenderer.prototype.drawSlice=function(B,z,y,u,w){if(this._drawData){var p=this._radius;var A=this.fill;var x=this.lineWidth;var s=this.sliceMargin;if(this.fill==false){s+=this.lineWidth}B.save();B.translate(this._center[0],this._center[1]);var D=j(z,y,this.sliceMargin,this.fill,this.lineWidth);var o=D*Math.cos((z+y)/2);var C=D*Math.sin((z+y)/2);if((y-z)<=Math.PI){p-=D}else{p+=D}B.translate(o,C);if(w){for(var v=0,t=this.shadowDepth;v<t;v++){B.save();B.translate(this.shadowOffset*Math.cos(this.shadowAngle/180*Math.PI),this.shadowOffset*Math.sin(this.shadowAngle/180*Math.PI));q(p)}for(var v=0,t=this.shadowDepth;v<t;v++){B.restore()}}else{q(p)}B.restore()}function q(r){if(y>6.282+this.startAngle){y=6.282+this.startAngle;if(z>y){z=6.281+this.startAngle}}if(z>=y){return}B.beginPath();B.fillStyle=u;B.strokeStyle=u;B.lineWidth=x;B.arc(0,0,r,z,y,false);B.lineTo(0,0);B.closePath();if(A){B.fill()}else{B.stroke()}}};e.jqplot.PieRenderer.prototype.draw=function(B,z,E,o){var W;var H=(E!=undefined)?E:{};var t=0;var s=0;var N=1;var L=new e.jqplot.ColorGenerator(this.seriesColors);if(E.legendInfo&&E.legendInfo.placement=="insideGrid"){var J=E.legendInfo;switch(J.location){case"nw":t=J.width+J.xoffset;break;case"w":t=J.width+J.xoffset;break;case"sw":t=J.width+J.xoffset;break;case"ne":t=J.width+J.xoffset;N=-1;break;case"e":t=J.width+J.xoffset;N=-1;break;case"se":t=J.width+J.xoffset;N=-1;break;case"n":s=J.height+J.yoffset;break;case"s":s=J.height+J.yoffset;N=-1;break;default:break}}var K=(H.shadow!=undefined)?H.shadow:this.shadow;var A=(H.fill!=undefined)?H.fill:this.fill;var C=B.canvas.width;var I=B.canvas.height;var Q=C-t-2*this.padding;var X=I-s-2*this.padding;var M=Math.min(Q,X);var Y=M;this._sliceAngles=[];var v=this.sliceMargin;if(this.fill==false){v+=this.lineWidth}var q;var G=0;var R,aa,Z,ab;var D=this.startAngle/180*Math.PI;for(var W=0,V=z.length;W<V;W++){aa=(W==0)?D:z[W-1][1]+D;Z=z[W][1]+D;this._sliceAngles.push([aa,Z]);q=j(aa,Z,this.sliceMargin,this.fill,this.lineWidth);if(Math.abs(Z-aa)>Math.PI){G=Math.max(q,G)}}if(this.diameter!=null&&this.diameter>0){this._diameter=this.diameter-2*G}else{this._diameter=Y-2*G}if(this._diameter<6){e.jqplot.log("Diameter of pie too small, not rendering.");return}var S=this._radius=this._diameter/2;this._center=[(C-N*t)/2+N*t+G*Math.cos(D),(I-N*s)/2+N*s+G*Math.sin(D)];if(this.shadow){for(var W=0,V=z.length;W<V;W++){ab="rgba(0,0,0,"+this.shadowAlpha+")";this.renderer.drawSlice.call(this,B,this._sliceAngles[W][0],this._sliceAngles[W][1],ab,true)}}for(var W=0;W<z.length;W++){this.renderer.drawSlice.call(this,B,this._sliceAngles[W][0],this._sliceAngles[W][1],L.next(),false);if(this.showDataLabels&&z[W][2]*100>=this.dataLabelThreshold){var F,U=(this._sliceAngles[W][0]+this._sliceAngles[W][1])/2,T;if(this.dataLabels=="label"){F=this.dataLabelFormatString||"%s";T=e.jqplot.sprintf(F,z[W][0])}else{if(this.dataLabels=="value"){F=this.dataLabelFormatString||"%d";T=e.jqplot.sprintf(F,this.data[W][1])}else{if(this.dataLabels=="percent"){F=this.dataLabelFormatString||"%d%%";T=e.jqplot.sprintf(F,z[W][2]*100)}else{if(this.dataLabels.constructor==Array){F=this.dataLabelFormatString||"%s";T=e.jqplot.sprintf(F,this.dataLabels[W])}}}}var p=(this._radius)*this.dataLabelPositionFactor+this.sliceMargin+this.dataLabelNudge;var P=this._center[0]+Math.cos(U)*p+this.canvas._offsets.left;var O=this._center[1]+Math.sin(U)*p+this.canvas._offsets.top;var u=e('<div class="jqplot-pie-series jqplot-data-label" style="position:absolute;">'+T+"</div>").insertBefore(o.eventCanvas._elem);if(this.dataLabelCenterOn){P-=u.width()/2;O-=u.height()/2}else{P-=u.width()*Math.sin(U/2);O-=u.height()/2}P=Math.round(P);O=Math.round(O);u.css({left:P,top:O})}}};e.jqplot.PieAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.PieAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.PieAxisRenderer.prototype.constructor=e.jqplot.PieAxisRenderer;e.jqplot.PieAxisRenderer.prototype.init=function(o){this.tickRenderer=e.jqplot.PieTickRenderer;e.extend(true,this,o);this._dataBounds={min:0,max:100};this.min=0;this.max=100;this.showTicks=false;this.ticks=[];this.showMark=false;this.show=false};e.jqplot.PieLegendRenderer=function(){e.jqplot.TableLegendRenderer.call(this)};e.jqplot.PieLegendRenderer.prototype=new e.jqplot.TableLegendRenderer();e.jqplot.PieLegendRenderer.prototype.constructor=e.jqplot.PieLegendRenderer;e.jqplot.PieLegendRenderer.prototype.init=function(o){this.numberRows=null;this.numberColumns=null;e.extend(true,this,o)};e.jqplot.PieLegendRenderer.prototype.draw=function(){var r=this;if(this.show){var B=this._series;this._elem=e(document.createElement("table"));this._elem.addClass("jqplot-table-legend");var E={position:"absolute"};if(this.background){E.background=this.background}if(this.border){E.border=this.border}if(this.fontSize){E.fontSize=this.fontSize}if(this.fontFamily){E.fontFamily=this.fontFamily}if(this.textColor){E.textColor=this.textColor}if(this.marginTop!=null){E.marginTop=this.marginTop}if(this.marginBottom!=null){E.marginBottom=this.marginBottom}if(this.marginLeft!=null){E.marginLeft=this.marginLeft}if(this.marginRight!=null){E.marginRight=this.marginRight}this._elem.css(E);var I=false,A=false,o,y;var C=B[0];var p=new e.jqplot.ColorGenerator(C.seriesColors);if(C.show){var J=C.data;if(this.numberRows){o=this.numberRows;if(!this.numberColumns){y=Math.ceil(J.length/o)}else{y=this.numberColumns}}else{if(this.numberColumns){y=this.numberColumns;o=Math.ceil(J.length/this.numberColumns)}else{o=J.length;y=1}}var H,G;var q,w,v;var x,z,F;var D=0;var u,t;for(H=0;H<o;H++){q=e(document.createElement("tr"));q.addClass("jqplot-table-legend");if(A){q.prependTo(this._elem)}else{q.appendTo(this._elem)}for(G=0;G<y;G++){if(D<J.length){x=this.labels[D]||J[D][0].toString();F=p.next();if(!A){if(H>0){I=true}else{I=false}}else{if(H==o-1){I=false}else{I=true}}z=(I)?this.rowSpacing:"0";w=e(document.createElement("td"));w.addClass("jqplot-table-legend jqplot-table-legend-swatch");w.css({textAlign:"center",paddingTop:z});u=e(document.createElement("div"));u.addClass("jqplot-table-legend-swatch-outline");t=e(document.createElement("div"));t.addClass("jqplot-table-legend-swatch");t.css({backgroundColor:F,borderColor:F});w.append(u.append(t));v=e(document.createElement("td"));v.addClass("jqplot-table-legend jqplot-table-legend-label");v.css("paddingTop",z);if(this.escapeHtml){v.text(x)}else{v.html(x)}if(A){v.prependTo(q);w.prependTo(q)}else{w.appendTo(q);v.appendTo(q)}I=true}D++}}}}return this._elem};e.jqplot.PieRenderer.prototype.handleMove=function(q,p,t,s,r){if(s){var o=[s.seriesIndex,s.pointIndex,s.data];r.target.trigger("jqplotDataMouseOver",o);if(r.series[o[0]].highlightMouseOver&&!(o[0]==r.plugins.pieRenderer.highlightedSeriesIndex&&o[1]==r.series[o[0]]._highlightedPoint)){r.target.trigger("jqplotDataHighlight",o);d(r,o[0],o[1])}}else{if(s==null){k(r)}}};function c(s,r,p){p=p||{};p.axesDefaults=p.axesDefaults||{};p.legend=p.legend||{};p.seriesDefaults=p.seriesDefaults||{};var o=false;if(p.seriesDefaults.renderer==e.jqplot.PieRenderer){o=true}else{if(p.series){for(var q=0;q<p.series.length;q++){if(p.series[q].renderer==e.jqplot.PieRenderer){o=true}}}}if(o){p.axesDefaults.renderer=e.jqplot.PieAxisRenderer;p.legend.renderer=e.jqplot.PieLegendRenderer;p.legend.preDraw=true;p.seriesDefaults.pointLabels={show:false}}}function g(r,q,o){for(var p=0;p<this.series.length;p++){if(this.series[p].renderer.constructor==e.jqplot.PieRenderer){if(this.series[p].highlightMouseOver){this.series[p].highlightMouseDown=false}}}}function m(o){for(var p=0;p<this.series.length;p++){this.series[p].seriesColors=this.seriesColors;this.series[p].colorGenerator=e.jqplot.colorGenerator}}function d(t,r,q){var p=t.series[r];var o=t.plugins.pieRenderer.highlightCanvas;o._ctx.clearRect(0,0,o._ctx.canvas.width,o._ctx.canvas.height);p._highlightedPoint=q;t.plugins.pieRenderer.highlightedSeriesIndex=r;p.renderer.drawSlice.call(p,o._ctx,p._sliceAngles[q][0],p._sliceAngles[q][1],p.highlightColorGenerator.get(q),false)}function k(q){var o=q.plugins.pieRenderer.highlightCanvas;o._ctx.clearRect(0,0,o._ctx.canvas.width,o._ctx.canvas.height);for(var p=0;p<q.series.length;p++){q.series[p]._highlightedPoint=null}q.plugins.pieRenderer.highlightedSeriesIndex=null;q.target.trigger("jqplotDataUnhighlight")}function b(s,r,v,u,t){if(u){var q=[u.seriesIndex,u.pointIndex,u.data];var p=jQuery.Event("jqplotDataMouseOver");p.pageX=s.pageX;p.pageY=s.pageY;t.target.trigger(p,q);if(t.series[q[0]].highlightMouseOver&&!(q[0]==t.plugins.pieRenderer.highlightedSeriesIndex&&q[1]==t.series[q[0]]._highlightedPoint)){var o=jQuery.Event("jqplotDataHighlight");o.which=s.which;o.pageX=s.pageX;o.pageY=s.pageY;t.target.trigger(o,q);d(t,q[0],q[1])}}else{if(u==null){k(t)}}}function a(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];if(s.series[p[0]].highlightMouseDown&&!(p[0]==s.plugins.pieRenderer.highlightedSeriesIndex&&p[1]==s.series[p[0]]._highlightedPoint)){var o=jQuery.Event("jqplotDataHighlight");o.which=r.which;o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p);d(s,p[0],p[1])}}else{if(t==null){k(s)}}}function l(q,p,t,s,r){var o=r.plugins.pieRenderer.highlightedSeriesIndex;if(o!=null&&r.series[o].highlightMouseDown){k(r)}}function f(r,q,u,t,s){if(t){var p=[t.seriesIndex,t.pointIndex,t.data];var o=jQuery.Event("jqplotDataClick");o.which=r.which;o.pageX=r.pageX;o.pageY=r.pageY;s.target.trigger(o,p)}}function n(s,r,v,u,t){if(u){var q=[u.seriesIndex,u.pointIndex,u.data];var o=t.plugins.pieRenderer.highlightedSeriesIndex;if(o!=null&&t.series[o].highlightMouseDown){k(t)}var p=jQuery.Event("jqplotDataRightClick");p.which=s.which;p.pageX=s.pageX;p.pageY=s.pageY;t.target.trigger(p,q)}}function i(){if(this.plugins.pieRenderer&&this.plugins.pieRenderer.highlightCanvas){this.plugins.pieRenderer.highlightCanvas.resetCanvas();this.plugins.pieRenderer.highlightCanvas=null}this.plugins.pieRenderer={highlightedSeriesIndex:null};this.plugins.pieRenderer.highlightCanvas=new e.jqplot.GenericCanvas();var p=e(this.targetId+" .jqplot-data-label");if(p.length){e(p[0]).before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pieRenderer-highlight-canvas",this._plotDimensions,this))}else{this.eventCanvas._elem.before(this.plugins.pieRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pieRenderer-highlight-canvas",this._plotDimensions,this))}var o=this.plugins.pieRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(q){k(q.data.plot)})}e.jqplot.preInitHooks.push(c);e.jqplot.PieTickRenderer=function(){e.jqplot.AxisTickRenderer.call(this)};e.jqplot.PieTickRenderer.prototype=new e.jqplot.AxisTickRenderer();e.jqplot.PieTickRenderer.prototype.constructor=e.jqplot.PieTickRenderer})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.js
deleted file mode 100644
index 0cc44443..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.js
+++ /dev/null
@@ -1,379 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
-
- /**
- * Class: $.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.
- *
- */
- $.jqplot.PointLabels = function(options) {
- // Group: Properties
- //
- // prop: show
- // show the labels or not.
- this.show = $.jqplot.config.enablePlugins;
- // prop: location
- // compass location where to position the label around the point.
- // 'n', 'ne', 'e', 'se', 's', 'sw', 'w', 'nw'
- this.location = 'n';
- // prop: labelsFromSeries
- // true to use labels within data point arrays.
- this.labelsFromSeries = false;
- // prop: seriesLabelIndex
- // array index for location of labels within data point arrays.
- // if null, will use the last element of the data point array.
- this.seriesLabelIndex = null;
- // prop: labels
- // array of arrays of labels, one array for each series.
- this.labels = [];
- // actual labels that will get displayed.
- // needed to preserve user specified labels in labels array.
- this._labels = [];
- // prop: stackedValue
- // true to display value as stacked in a stacked plot.
- // no effect if labels is specified.
- this.stackedValue = false;
- // prop: ypadding
- // vertical padding in pixels between point and label
- this.ypadding = 6;
- // prop: xpadding
- // horizontal padding in pixels between point and label
- this.xpadding = 6;
- // prop: escapeHTML
- // true to escape html entities in the labels.
- // If you want to include markup in the labels, set to false.
- this.escapeHTML = true;
- // prop: edgeTolerance
- // 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.
- this.edgeTolerance = -5;
- // prop: formatter
- // A class of a formatter for the tick text. sprintf by default.
- this.formatter = $.jqplot.DefaultTickFormatter;
- // prop: formatString
- // string passed to the formatter.
- this.formatString = '';
- // prop: hideZeros
- // true to not show a label for a value which is 0.
- this.hideZeros = false;
- this._elems = [];
-
- $.extend(true, this, options);
- };
-
- var locations = ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'];
- var locationIndicies = {'nw':0, 'n':1, 'ne':2, 'e':3, 'se':4, 's':5, 'sw':6, 'w':7};
- var oppositeLocations = ['se', 's', 'sw', 'w', 'nw', 'n', 'ne', 'e'];
-
- // called with scope of a series
- $.jqplot.PointLabels.init = function (target, data, seriesDefaults, opts, plot){
- var options = $.extend(true, {}, seriesDefaults, opts);
- options.pointLabels = options.pointLabels || {};
- if (this.renderer.constructor === $.jqplot.BarRenderer && this.barDirection === 'horizontal' && !options.pointLabels.location) {
- options.pointLabels.location = 'e';
- }
- // add a pointLabels attribute to the series plugins
- this.plugins.pointLabels = new $.jqplot.PointLabels(options.pointLabels);
- this.plugins.pointLabels.setLabels.call(this);
- };
-
- // called with scope of series
- $.jqplot.PointLabels.prototype.setLabels = function() {
- var p = this.plugins.pointLabels;
- var labelIdx;
- if (p.seriesLabelIndex != null) {
- labelIdx = p.seriesLabelIndex;
- }
- else if (this.renderer.constructor === $.jqplot.BarRenderer && this.barDirection === 'horizontal') {
- labelIdx = 0;
- }
- else {
- labelIdx = (this._plotData.length === 0) ? 0 : this._plotData[0].length -1;
- }
- p._labels = [];
- if (p.labels.length === 0 || p.labelsFromSeries) {
- if (p.stackedValue) {
- if (this._plotData.length && this._plotData[0].length){
- // var idx = p.seriesLabelIndex || this._plotData[0].length -1;
- for (var i=0; i<this._plotData.length; i++) {
- p._labels.push(this._plotData[i][labelIdx]);
- }
- }
- }
- else {
- // var d = this._plotData;
- var d = this.data;
- if (this.renderer.constructor === $.jqplot.BarRenderer && this.waterfall) {
- d = this._data;
- }
- if (d.length && d[0].length) {
- // var idx = p.seriesLabelIndex || d[0].length -1;
- for (var i=0; i<d.length; i++) {
- p._labels.push(d[i][labelIdx]);
- }
- }
- d = null;
- }
- }
- else if (p.labels.length){
- p._labels = p.labels;
- }
- };
-
- $.jqplot.PointLabels.prototype.xOffset = function(elem, location, padding) {
- location = location || this.location;
- padding = padding || this.xpadding;
- var offset;
-
- switch (location) {
- case 'nw':
- offset = -elem.outerWidth(true) - this.xpadding;
- break;
- case 'n':
- offset = -elem.outerWidth(true)/2;
- break;
- case 'ne':
- offset = this.xpadding;
- break;
- case 'e':
- offset = this.xpadding;
- break;
- case 'se':
- offset = this.xpadding;
- break;
- case 's':
- offset = -elem.outerWidth(true)/2;
- break;
- case 'sw':
- offset = -elem.outerWidth(true) - this.xpadding;
- break;
- case 'w':
- offset = -elem.outerWidth(true) - this.xpadding;
- break;
- default: // same as 'nw'
- offset = -elem.outerWidth(true) - this.xpadding;
- break;
- }
- return offset;
- };
-
- $.jqplot.PointLabels.prototype.yOffset = function(elem, location, padding) {
- location = location || this.location;
- padding = padding || this.xpadding;
- var offset;
-
- switch (location) {
- case 'nw':
- offset = -elem.outerHeight(true) - this.ypadding;
- break;
- case 'n':
- offset = -elem.outerHeight(true) - this.ypadding;
- break;
- case 'ne':
- offset = -elem.outerHeight(true) - this.ypadding;
- break;
- case 'e':
- offset = -elem.outerHeight(true)/2;
- break;
- case 'se':
- offset = this.ypadding;
- break;
- case 's':
- offset = this.ypadding;
- break;
- case 'sw':
- offset = this.ypadding;
- break;
- case 'w':
- offset = -elem.outerHeight(true)/2;
- break;
- default: // same as 'nw'
- offset = -elem.outerHeight(true) - this.ypadding;
- break;
- }
- return offset;
- };
-
- // called with scope of series
- $.jqplot.PointLabels.draw = function (sctx, options, plot) {
- var p = this.plugins.pointLabels;
- // set labels again in case they have changed.
- p.setLabels.call(this);
- // remove any previous labels
- for (var i=0; i<p._elems.length; i++) {
- // Memory Leaks patch
- // p._elems[i].remove();
- p._elems[i].emptyForce();
- }
- p._elems.splice(0, p._elems.length);
-
- if (p.show) {
- var ax = '_'+this._stackAxis+'axis';
-
- if (!p.formatString) {
- p.formatString = this[ax]._ticks[0].formatString;
- p.formatter = this[ax]._ticks[0].formatter;
- }
-
- var pd = this._plotData;
- var ppd = this._prevPlotData;
- var xax = this._xaxis;
- var yax = this._yaxis;
- var elem, helem;
-
- for (var i=0, l=p._labels.length; i < l; i++) {
- var label = p._labels[i];
-
- if (p.hideZeros && parseInt(p._labels[i], 10) == 0) {
- label = '';
- }
-
- if (label != null) {
- label = p.formatter(p.formatString, label);
- }
-
- helem = document.createElement('div');
- p._elems[i] = $(helem);
-
- elem = p._elems[i];
-
-
- elem.addClass('jqplot-point-label jqplot-series-'+this.index+' jqplot-point-'+i);
- elem.css('position', 'absolute');
- elem.insertAfter(sctx.canvas);
-
- if (p.escapeHTML) {
- elem.text(label);
- }
- else {
- elem.html(label);
- }
- var location = p.location;
- if ((this.fillToZero && pd[i][1] < 0) || (this.fillToZero && this._type === 'bar' && this.barDirection === 'horizontal' && pd[i][0] < 0) || (this.waterfall && parseInt(label, 10)) < 0) {
- location = oppositeLocations[locationIndicies[location]];
- }
-
-
- var ell = xax.u2p(pd[i][0]) + p.xOffset(elem, location);
- var elt = yax.u2p(pd[i][1]) + p.yOffset(elem, location);
-
- // we have stacked chart but are not showing stacked values,
- // place labels in center.
- if (this._stack && !p.stackedValue) {
- if (this.barDirection === "vertical") {
- elt = (this._barPoints[i][0][1] + this._barPoints[i][1][1]) / 2 + plot._gridPadding.top - 0.5 * elem.outerHeight(true);
- }
- else {
- ell = (this._barPoints[i][2][0] + this._barPoints[i][0][0]) / 2 + plot._gridPadding.left - 0.5 * elem.outerWidth(true);
- }
- }
-
- if (this.renderer.constructor == $.jqplot.BarRenderer) {
- if (this.barDirection == "vertical") {
- ell += this._barNudge;
- }
- else {
- elt -= this._barNudge;
- }
- }
- elem.css('left', ell);
- elem.css('top', elt);
- var elr = ell + elem.width();
- var elb = elt + elem.height();
- var et = p.edgeTolerance;
- var scl = $(sctx.canvas).position().left;
- var sct = $(sctx.canvas).position().top;
- var scr = sctx.canvas.width + scl;
- var scb = sctx.canvas.height + sct;
- // if label is outside of allowed area, remove it
- if (ell - et < scl || elt - et < sct || elr + et > scr || elb + et > scb) {
- elem.remove();
- }
-
- elem = null;
- helem = null;
- }
-
- // finally, animate them if the series is animated
- // if (this.renderer.animation && this.renderer.animation._supported && this.renderer.animation.show && plot._drawCount < 2) {
- // var sel = '.jqplot-point-label.jqplot-series-'+this.index;
- // $(sel).hide();
- // $(sel).fadeIn(1000);
- // }
-
- }
- };
-
- $.jqplot.postSeriesInitHooks.push($.jqplot.PointLabels.init);
- $.jqplot.postDrawSeriesHooks.push($.jqplot.PointLabels.draw);
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.min.js
deleted file mode 100644
index d4fa0b51..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pointLabels.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(c){c.jqplot.PointLabels=function(e){this.show=c.jqplot.config.enablePlugins;this.location="n";this.labelsFromSeries=false;this.seriesLabelIndex=null;this.labels=[];this._labels=[];this.stackedValue=false;this.ypadding=6;this.xpadding=6;this.escapeHTML=true;this.edgeTolerance=-5;this.formatter=c.jqplot.DefaultTickFormatter;this.formatString="";this.hideZeros=false;this._elems=[];c.extend(true,this,e)};var a=["nw","n","ne","e","se","s","sw","w"];var d={nw:0,n:1,ne:2,e:3,se:4,s:5,sw:6,w:7};var b=["se","s","sw","w","nw","n","ne","e"];c.jqplot.PointLabels.init=function(j,h,f,g,i){var e=c.extend(true,{},f,g);e.pointLabels=e.pointLabels||{};if(this.renderer.constructor===c.jqplot.BarRenderer&&this.barDirection==="horizontal"&&!e.pointLabels.location){e.pointLabels.location="e"}this.plugins.pointLabels=new c.jqplot.PointLabels(e.pointLabels);this.plugins.pointLabels.setLabels.call(this)};c.jqplot.PointLabels.prototype.setLabels=function(){var f=this.plugins.pointLabels;var h;if(f.seriesLabelIndex!=null){h=f.seriesLabelIndex}else{if(this.renderer.constructor===c.jqplot.BarRenderer&&this.barDirection==="horizontal"){h=0}else{h=(this._plotData.length===0)?0:this._plotData[0].length-1}}f._labels=[];if(f.labels.length===0||f.labelsFromSeries){if(f.stackedValue){if(this._plotData.length&&this._plotData[0].length){for(var e=0;e<this._plotData.length;e++){f._labels.push(this._plotData[e][h])}}}else{var g=this.data;if(this.renderer.constructor===c.jqplot.BarRenderer&&this.waterfall){g=this._data}if(g.length&&g[0].length){for(var e=0;e<g.length;e++){f._labels.push(g[e][h])}}g=null}}else{if(f.labels.length){f._labels=f.labels}}};c.jqplot.PointLabels.prototype.xOffset=function(f,e,g){e=e||this.location;g=g||this.xpadding;var h;switch(e){case"nw":h=-f.outerWidth(true)-this.xpadding;break;case"n":h=-f.outerWidth(true)/2;break;case"ne":h=this.xpadding;break;case"e":h=this.xpadding;break;case"se":h=this.xpadding;break;case"s":h=-f.outerWidth(true)/2;break;case"sw":h=-f.outerWidth(true)-this.xpadding;break;case"w":h=-f.outerWidth(true)-this.xpadding;break;default:h=-f.outerWidth(true)-this.xpadding;break}return h};c.jqplot.PointLabels.prototype.yOffset=function(f,e,g){e=e||this.location;g=g||this.xpadding;var h;switch(e){case"nw":h=-f.outerHeight(true)-this.ypadding;break;case"n":h=-f.outerHeight(true)-this.ypadding;break;case"ne":h=-f.outerHeight(true)-this.ypadding;break;case"e":h=-f.outerHeight(true)/2;break;case"se":h=this.ypadding;break;case"s":h=this.ypadding;break;case"sw":h=this.ypadding;break;case"w":h=-f.outerHeight(true)/2;break;default:h=-f.outerHeight(true)-this.ypadding;break}return h};c.jqplot.PointLabels.draw=function(x,j,v){var t=this.plugins.pointLabels;t.setLabels.call(this);for(var w=0;w<t._elems.length;w++){t._elems[w].emptyForce()}t._elems.splice(0,t._elems.length);if(t.show){var r="_"+this._stackAxis+"axis";if(!t.formatString){t.formatString=this[r]._ticks[0].formatString;t.formatter=this[r]._ticks[0].formatter}var E=this._plotData;var D=this._prevPlotData;var A=this._xaxis;var q=this._yaxis;var z,f;for(var w=0,u=t._labels.length;w<u;w++){var o=t._labels[w];if(t.hideZeros&&parseInt(t._labels[w],10)==0){o=""}if(o!=null){o=t.formatter(t.formatString,o)}f=document.createElement("div");t._elems[w]=c(f);z=t._elems[w];z.addClass("jqplot-point-label jqplot-series-"+this.index+" jqplot-point-"+w);z.css("position","absolute");z.insertAfter(x.canvas);if(t.escapeHTML){z.text(o)}else{z.html(o)}var g=t.location;if((this.fillToZero&&E[w][1]<0)||(this.fillToZero&&this._type==="bar"&&this.barDirection==="horizontal"&&E[w][0]<0)||(this.waterfall&&parseInt(o,10))<0){g=b[d[g]]}var n=A.u2p(E[w][0])+t.xOffset(z,g);var h=q.u2p(E[w][1])+t.yOffset(z,g);if(this._stack&&!t.stackedValue){if(this.barDirection==="vertical"){h=(this._barPoints[w][0][1]+this._barPoints[w][1][1])/2+v._gridPadding.top-0.5*z.outerHeight(true)}else{n=(this._barPoints[w][2][0]+this._barPoints[w][0][0])/2+v._gridPadding.left-0.5*z.outerWidth(true)}}if(this.renderer.constructor==c.jqplot.BarRenderer){if(this.barDirection=="vertical"){n+=this._barNudge}else{h-=this._barNudge}}z.css("left",n);z.css("top",h);var k=n+z.width();var s=h+z.height();var C=t.edgeTolerance;var e=c(x.canvas).position().left;var y=c(x.canvas).position().top;var B=x.canvas.width+e;var m=x.canvas.height+y;if(n-C<e||h-C<y||k+C>B||s+C>m){z.remove()}z=null;f=null}}};c.jqplot.postSeriesInitHooks.push(c.jqplot.PointLabels.init);c.jqplot.postDrawSeriesHooks.push(c.jqplot.PointLabels.draw)})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.js
deleted file mode 100644
index e43f6bda..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.js
+++ /dev/null
@@ -1,728 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- $.jqplot.PyramidAxisRenderer = function() {
- $.jqplot.LinearAxisRenderer.call(this);
- };
-
- $.jqplot.PyramidAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer();
- $.jqplot.PyramidAxisRenderer.prototype.constructor = $.jqplot.PyramidAxisRenderer;
-
- // called with scope of axis
- $.jqplot.PyramidAxisRenderer.prototype.init = function(options){
- // Group: Properties
- //
- // prop: position
- // Position of axis. Values are: top, bottom , left, center, right.
- // By default, x and x2 axes are bottom, y axis is center.
- this.position = null;
- // prop: drawBaseline
- // True to draw the axis baseline.
- this.drawBaseline = true;
- // prop: baselineWidth
- // width of the baseline in pixels.
- this.baselineWidth = null;
- // prop: baselineColor
- // CSS color spec for the baseline.
- this.baselineColor = null;
- this.tickSpacingFactor = 25;
- this._type = 'pyramid';
- this._splitAxis = false;
- this._splitLength = null;
- this.category = false;
- this._autoFormatString = '';
- this._overrideFormatString = false;
-
- $.extend(true, this, options);
- this.renderer.options = options;
-
- this.resetDataBounds = this.renderer.resetDataBounds;
- this.resetDataBounds();
-
- };
-
- $.jqplot.PyramidAxisRenderer.prototype.resetDataBounds = function() {
- // Go through all the series attached to this axis and find
- // the min/max bounds for this axis.
- var db = this._dataBounds;
- db.min = null;
- db.max = null;
- var temp;
- for (var i=0; i<this._series.length; i++) {
- var s = this._series[i];
- var d = s._plotData;
-
- for (var j=0, l=d.length; j<l; j++) {
- if (this.name.charAt(0) === 'x') {
- temp = d[j][1];
- if ((temp !== null && temp < db.min) || db.min === null) {
- db.min = temp;
- }
- if ((temp !== null && temp > db.max) || db.max === null) {
- db.max = temp;
- }
- }
- else {
- temp = d[j][0];
- if ((temp !== null && temp < db.min) || db.min === null) {
- db.min = temp;
- }
- if ((temp !== null && temp > db.max) || db.max === null) {
- db.max = temp;
- }
- }
- }
- }
- };
-
- // called with scope of axis
- $.jqplot.PyramidAxisRenderer.prototype.draw = function(ctx, plot) {
- if (this.show) {
- // populate the axis label and value properties.
- // createTicks is a method on the renderer, but
- // call it within the scope of the axis.
- this.renderer.createTicks.call(this, plot);
- // fill a div with axes labels in the right direction.
- // Need to pregenerate each axis to get it's bounds and
- // position it and the labels correctly on the plot.
- var dim=0;
- var temp;
- // Added for theming.
- if (this._elem) {
- // Memory Leaks patch
- //this._elem.empty();
- this._elem.emptyForce();
- this._elem = null;
- }
-
- this._elem = $(document.createElement('div'));
- this._elem.addClass('jqplot-axis jqplot-'+this.name);
- this._elem.css('position', 'absolute');
-
-
- if (this.name == 'xaxis' || this.name == 'x2axis') {
- this._elem.width(this._plotDimensions.width);
- }
- else {
- this._elem.height(this._plotDimensions.height);
- }
-
- // create a _label object.
- this.labelOptions.axis = this.name;
- this._label = new this.labelRenderer(this.labelOptions);
- if (this._label.show) {
- var elem = this._label.draw(ctx, plot);
- elem.appendTo(this._elem);
- elem = null;
- }
-
- var t = this._ticks;
- var tick;
- for (var i=0; i<t.length; i++) {
- tick = t[i];
- if (tick.show && tick.showLabel && (!tick.isMinorTick)) {
- this._elem.append(tick.draw(ctx, plot));
- }
- }
- tick = null;
- t = null;
- }
- return this._elem;
- };
-
- // Note, primes can be found on http://primes.utm.edu/
- var _primes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];
-
-
- var _primesHash = {};
-
- for (var i =0, l = _primes.length; i < l; i++) {
- _primesHash[_primes[i]] = _primes[i];
- }
-
- // called with scope of axis
- $.jqplot.PyramidAxisRenderer.prototype.createTicks = function(plot) {
- // we're are operating on an axis here
- var userTicks = this.ticks;
- // databounds were set on axis initialization.
- var db = this._dataBounds;
- var dim;
- var interval;
- var min;
- var max;
- var range;
- var pos1;
- var pos2;
- var tt;
- var i;
- var l;
- var s;
- // get a copy of user's settings for min/max.
- var userMin = this.min;
- var userMax = this.max;
- var ut;
- var t;
- var threshold;
- var tdim;
- var scalefact;
- var ret;
- var tumin;
- var tumax;
- var maxVisibleTicks;
- var val;
- var skip = null;
- var temp;
-
- // if we already have ticks, use them.
- // ticks must be in order of increasing value.
-
- if (userTicks.length) {
- // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed
- for (i=0, l=userTicks.length; i<l; i++){
- ut = userTicks[i];
- t = new this.tickRenderer(this.tickOptions);
- if ($.isArray(ut)) {
- t.value = ut[0];
- t.label = ut[1];
- t.setTick(ut[0], this.name);
- this._ticks.push(t);
- }
-
- else if ($.isPlainObject(ut)) {
- $.extend(true, t, ut);
- t.axis = this.name;
- this._ticks.push(t);
- }
-
- else {
- if (typeof ut === 'string') {
- val = i + plot.defaultAxisStart;
- }
- else {
- val = ut;
- }
- t.value = val;
- t.label = ut;
- t.axis = this.name;
- this._ticks.push(t);
- }
- }
- this.numberTicks = userTicks.length;
- this.min = this._ticks[0].value;
- this.max = this._ticks[this.numberTicks-1].value;
- this.tickInterval = (this.max - this.min) / (this.numberTicks - 1);
-
- // use user specified tickInterval if there is one
- if (this._options.tickInterval) {
- // hide every tick except for ticks on interval
- var ti = this._options.tickInterval;
- for (i=0; i<this.numberTicks; i++) {
- if (i%ti !== 0) {
- // this._ticks[i].show = false;
- this._ticks[i].isMinorTick = true;
- }
- }
- }
-
- else {
- // check if we have too many ticks
- dim = (this.name.charAt(0) === 'x') ? this._plotDimensions.width : this._plotDimensions.height;
- maxVisibleTicks = Math.round(2.0 + dim/this.tickSpacingFactor);
-
- if (this.numberTicks > maxVisibleTicks) {
- // check for number of ticks we can skip
- temp = this.numberTicks - 1;
- for (i=2; i<temp; i++) {
- if (temp % i === 0 && temp/i < maxVisibleTicks) {
- skip = i-1;
- break;
- }
- }
-
- if (skip !== null) {
- var count = 1;
- for (i=1, l=this._ticks.length; i<l; i++) {
- if (count <= skip) {
- this._ticks[i].show = false;
- count += 1;
- }
- else {
- count = 1;
- }
- }
- }
- }
- }
-
- // if category style, add minor ticks in between
- temp = [];
- if (this.category) {
- // turn off gridline and mark on first tick
- this._ticks[0].showGridline = false;
- this._ticks[0].showMark = false;
-
- for (i=this._ticks.length-1; i>0; i--) {
- t = new this.tickRenderer(this.tickOptions);
- t.value = this._ticks[i-1].value + this.tickInterval/2.0;
- t.label = '';
- t.showLabel = false;
- t.axis = this.name;
- this._ticks[i].showGridline = false;
- this._ticks[i].showMark = false;
- this._ticks.splice(i, 0, t);
- // temp.push(t);
- }
-
- // merge in the new ticks
- // for (i=1, l=temp.length; i<l; i++) {
- // this._ticks.splice(i, 0, temp[i]);
- // }
-
- // now add a tick at beginning and end
- t = new this.tickRenderer(this.tickOptions);
- t.value = this._ticks[0].value - this.tickInterval/2.0;
- t.label = '';
- t.showLabel = false;
- t.axis = this.name;
- this._ticks.unshift(t);
-
- t = new this.tickRenderer(this.tickOptions);
- t.value = this._ticks[this._ticks.length-1].value + this.tickInterval/2.0;
- t.label = '';
- t.showLabel = false;
- t.axis = this.name;
- this._ticks.push(t);
-
- this.tickInterval = this.tickInterval / 2.0;
- this.numberTicks = this._ticks.length;
- this.min = this._ticks[0].value;
- this.max = this._ticks[this._ticks.length-1].value;
- }
- }
-
- // we don't have any ticks yet, let's make some!
- else {
- if (this.name.charAt(0) === 'x') {
- dim = this._plotDimensions.width;
- // make sure x axis is symetric about 0.
- var tempmax = Math.max(db.max, Math.abs(db.min));
- var tempmin = Math.min(db.min, -tempmax);
- // min = ((this.min != null) ? this.min : tempmin);
- // max = ((this.max != null) ? this.max : tempmax);
- min = tempmin;
- max = tempmax;
- range = max - min;
-
- if (this.tickOptions == null || !this.tickOptions.formatString) {
- this._overrideFormatString = true;
- }
-
- threshold = 30;
- tdim = Math.max(dim, threshold+1);
- scalefact = (tdim-threshold)/300.0;
- ret = $.jqplot.LinearTickGenerator(min, max, scalefact);
- // calculate a padded max and min, points should be less than these
- // so that they aren't too close to the edges of the plot.
- // User can adjust how much padding is allowed with pad, padMin and PadMax options.
- tumin = min + range*(this.padMin - 1);
- tumax = max - range*(this.padMax - 1);
-
- if (min < tumin || max > tumax) {
- tumin = min - range*(this.padMin - 1);
- tumax = max + range*(this.padMax - 1);
- ret = $.jqplot.LinearTickGenerator(tumin, tumax, scalefact);
- }
-
- this.min = ret[0];
- this.max = ret[1];
- this.numberTicks = ret[2];
- this._autoFormatString = ret[3];
- this.tickInterval = ret[4];
- }
- else {
- dim = this._plotDimensions.height;
-
- // ticks will be on whole integers like 1, 2, 3, ... or 1, 4, 7, ...
- min = db.min;
- max = db.max;
- s = this._series[0];
- this._ticks = [];
-
- range = max - min;
-
- // if range is a prime, will get only 2 ticks, expand range in that case.
- if (_primesHash[range]) {
- range += 1;
- max += 1;
- }
-
- this.max = max;
- this.min = min;
-
- maxVisibleTicks = Math.round(2.0 + dim/this.tickSpacingFactor);
-
- if (range + 1 <= maxVisibleTicks) {
- this.numberTicks = range + 1;
- this.tickInterval = 1.0;
- }
-
- else {
- // figure out a round number of ticks to skip in every interval
- // range / ti + 1 = nt
- // ti = range / (nt - 1)
- for (var i=maxVisibleTicks; i>1; i--) {
- if (range/(i - 1) === Math.round(range/(i - 1))) {
- this.numberTicks = i;
- this.tickInterval = range/(i - 1);
- break;
- }
-
- }
- }
- }
-
- if (this._overrideFormatString && this._autoFormatString != '') {
- this.tickOptions = this.tickOptions || {};
- this.tickOptions.formatString = this._autoFormatString;
- }
-
- var labelval;
- for (i=0; i<this.numberTicks; i++) {
- this.tickOptions.axis = this.name;
- labelval = this.min + this.tickInterval * i;
- if (this.name.charAt(0) === 'x') {
- labelval = Math.abs(labelval);
- }
- // this.tickOptions.label = String (labelval);
- this.tickOptions.value = this.min + this.tickInterval * i;
- t = new this.tickRenderer(this.tickOptions);
-
- t.label = t.prefix + t.formatter(t.formatString, labelval);
-
- this._ticks.push(t);
- // for x axis, if y axis is in middle, add a symetrical 0 tick
- if (this.name.charAt(0) === 'x' && plot.axes.yMidAxis.show && this.tickOptions.value === 0) {
- this._splitAxis = true;
- this._splitLength = plot.axes.yMidAxis.getWidth();
- // t.value = -this.max/2000.0;
- t = new this.tickRenderer(this.tickOptions);
- this._ticks.push(t);
- t.value = this.max/2000.0;
- }
- }
- t = null;
- }
- };
-
- // called with scope of axis
- $.jqplot.PyramidAxisRenderer.prototype.set = function() {
- var dim = 0;
- var temp;
- var w = 0;
- var h = 0;
- var i;
- var t;
- var tick;
- var lshow = (this._label == null) ? false : this._label.show;
- if (this.show) {
- t = this._ticks;
- l = t.length;
- for (i=0; i<l; i++) {
- tick = t[i];
- if (!tick._breakTick && tick.show && tick.showLabel && !tick.isMinorTick) {
- if (this.name.charAt(0) === 'x') {
- temp = tick._elem.outerHeight(true);
- }
- else {
- temp = tick._elem.outerWidth(true);
- }
- if (temp > dim) {
- dim = temp;
- }
- }
- }
-
- if (this.name === 'yMidAxis') {
- for (i=0; i<l; i++) {
- tick = t[i];
- if (tick._elem) {
- temp = (dim - tick._elem.outerWidth(true))/2.0;
- tick._elem.css('left', temp);
- }
- }
- }
- tick = null;
- t = null;
-
- if (lshow) {
- w = this._label._elem.outerWidth(true);
- h = this._label._elem.outerHeight(true);
- }
- if (this.name === 'xaxis') {
- dim = dim + h;
- this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'});
- }
- else if (this.name === 'x2axis') {
- dim = dim + h;
- this._elem.css({'height':dim+'px', left:'0px', top:'0px'});
- }
- else if (this.name === 'yaxis') {
- dim = dim + w;
- this._elem.css({'width':dim+'px', left:'0px', top:'0px'});
- if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
- this._label._elem.css('width', w+'px');
- }
- }
- else if (this.name === 'yMidAxis') {
- // don't include width of label at all in width of axis?
- // dim = (dim > w) ? dim : w;
- var temp = dim/2.0 - w/2.0;
- this._elem.css({'width':dim+'px', top:'0px'});
- if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
- this._label._elem.css({width: w, left: temp, top: 0});
- }
- }
- else {
- dim = dim + w;
- this._elem.css({'width':dim+'px', right:'0px', top:'0px'});
- if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) {
- this._label._elem.css('width', w+'px');
- }
- }
- }
- };
-
- $.jqplot.PyramidAxisRenderer.prototype.pack = function(pos, offsets) {
- // Add defaults for repacking from resetTickValues function.
- pos = pos || {};
- offsets = offsets || this._offsets;
-
- var ticks = this._ticks;
- var max = this.max;
- var min = this.min;
- var offmax = offsets.max;
- var offmin = offsets.min;
- var lshow = (this._label == null) ? false : this._label.show;
-
- for (var p in pos) {
- this._elem.css(p, pos[p]);
- }
-
- this._offsets = offsets;
- // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left.
- var pixellength = offmax - offmin;
- var unitlength = max - min;
- var sl = this._splitLength;
-
- // point to unit and unit to point conversions references to Plot DOM element top left corner.
- if (this._splitAxis) {
- pixellength -= this._splitLength;
-
- // don't know that this one is correct.
- this.p2u = function(p){
- return (p - offmin) * unitlength / pixellength + min;
- };
-
- this.u2p = function(u){
- if (u <= 0) {
- return (u - min) * pixellength / unitlength + offmin;
- }
- else {
- return (u - min) * pixellength / unitlength + offmin + sl;
- }
- };
-
- this.series_u2p = function(u){
- if (u <= 0) {
- return (u - min) * pixellength / unitlength;
- }
- else {
- return (u - min) * pixellength / unitlength + sl;
- }
- };
-
- // don't know that this one is correct.
- this.series_p2u = function(p){
- return p * unitlength / pixellength + min;
- };
- }
- else {
- this.p2u = function(p){
- return (p - offmin) * unitlength / pixellength + min;
- };
-
- this.u2p = function(u){
- return (u - min) * pixellength / unitlength + offmin;
- };
-
- if (this.name.charAt(0) === 'x'){
- this.series_u2p = function(u){
- return (u - min) * pixellength / unitlength;
- };
- this.series_p2u = function(p){
- return p * unitlength / pixellength + min;
- };
- }
-
- else {
- this.series_u2p = function(u){
- return (u - max) * pixellength / unitlength;
- };
- this.series_p2u = function(p){
- return p * unitlength / pixellength + max;
- };
- }
- }
-
- if (this.show) {
- if (this.name.charAt(0) === 'x') {
- for (var i=0; i<ticks.length; i++) {
- var t = ticks[i];
- if (t.show && t.showLabel) {
- var shim;
-
- if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
- // will need to adjust auto positioning based on which axis this is.
- var temp = (this.name == 'xaxis') ? 1 : -1;
- switch (t.labelPosition) {
- case 'auto':
- // position at end
- if (temp * t.angle < 0) {
- shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- }
- // position at start
- else {
- shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
- }
- break;
- case 'end':
- shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- break;
- case 'start':
- shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
- break;
- case 'middle':
- shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- break;
- default:
- shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- break;
- }
- }
- else {
- shim = -t.getWidth()/2;
- }
- var val = this.u2p(t.value) + shim + 'px';
- t._elem.css('left', val);
- t.pack();
- }
- }
- if (lshow) {
- var w = this._label._elem.outerWidth(true);
- this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px');
- if (this.name == 'xaxis') {
- this._label._elem.css('bottom', '0px');
- }
- else {
- this._label._elem.css('top', '0px');
- }
- this._label.pack();
- }
- }
- else {
- for (var i=0; i<ticks.length; i++) {
- var t = ticks[i];
- if (t.show && t.showLabel && !t.isMinorTick) {
- var shim;
- if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) {
- // will need to adjust auto positioning based on which axis this is.
- var temp = (this.name == 'yaxis') ? 1 : -1;
- switch (t.labelPosition) {
- case 'auto':
- // position at end
- case 'end':
- if (temp * t.angle < 0) {
- shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
- }
- else {
- shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
- }
- break;
- case 'start':
- if (t.angle > 0) {
- shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2;
- }
- else {
- shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2;
- }
- break;
- case 'middle':
- // if (t.angle > 0) {
- // shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2;
- // }
- // else {
- // shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2;
- // }
- shim = -t.getHeight()/2;
- break;
- default:
- shim = -t.getHeight()/2;
- break;
- }
- }
- else {
- shim = -t.getHeight()/2;
- }
-
- var val = this.u2p(t.value) + shim + 'px';
- t._elem.css('top', val);
- t.pack();
- }
- }
- if (lshow) {
- var h = this._label._elem.outerHeight(true);
- if (this.name !== 'yMidAxis') {
- this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px');
- }
- if (this.name == 'yaxis') {
- this._label._elem.css('left', '0px');
- }
- else if (this.name !== 'yMidAxis') {
- this._label._elem.css('right', '0px');
- }
- this._label.pack();
- }
- }
- }
-
- ticks = null;
- };
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.min.js
deleted file mode 100644
index bcb184a6..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidAxisRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(e){e.jqplot.PyramidAxisRenderer=function(){e.jqplot.LinearAxisRenderer.call(this)};e.jqplot.PyramidAxisRenderer.prototype=new e.jqplot.LinearAxisRenderer();e.jqplot.PyramidAxisRenderer.prototype.constructor=e.jqplot.PyramidAxisRenderer;e.jqplot.PyramidAxisRenderer.prototype.init=function(f){this.position=null;this.drawBaseline=true;this.baselineWidth=null;this.baselineColor=null;this.tickSpacingFactor=25;this._type="pyramid";this._splitAxis=false;this._splitLength=null;this.category=false;this._autoFormatString="";this._overrideFormatString=false;e.extend(true,this,f);this.renderer.options=f;this.resetDataBounds=this.renderer.resetDataBounds;this.resetDataBounds()};e.jqplot.PyramidAxisRenderer.prototype.resetDataBounds=function(){var h=this._dataBounds;h.min=null;h.max=null;var g;for(var m=0;m<this._series.length;m++){var n=this._series[m];var o=n._plotData;for(var k=0,f=o.length;k<f;k++){if(this.name.charAt(0)==="x"){g=o[k][1];if((g!==null&&g<h.min)||h.min===null){h.min=g}if((g!==null&&g>h.max)||h.max===null){h.max=g}}else{g=o[k][0];if((g!==null&&g<h.min)||h.min===null){h.min=g}if((g!==null&&g>h.max)||h.max===null){h.max=g}}}}};e.jqplot.PyramidAxisRenderer.prototype.draw=function(f,n){if(this.show){this.renderer.createTicks.call(this,n);var m=0;var g;if(this._elem){this._elem.emptyForce();this._elem=null}this._elem=e(document.createElement("div"));this._elem.addClass("jqplot-axis jqplot-"+this.name);this._elem.css("position","absolute");if(this.name=="xaxis"||this.name=="x2axis"){this._elem.width(this._plotDimensions.width)}else{this._elem.height(this._plotDimensions.height)}this.labelOptions.axis=this.name;this._label=new this.labelRenderer(this.labelOptions);if(this._label.show){var l=this._label.draw(f,n);l.appendTo(this._elem);l=null}var k=this._ticks;var j;for(var h=0;h<k.length;h++){j=k[h];if(j.show&&j.showLabel&&(!j.isMinorTick)){this._elem.append(j.draw(f,n))}}j=null;k=null}return this._elem};var b=[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997];var d={};for(var c=0,a=b.length;c<a;c++){d[b[c]]=b[c]}e.jqplot.PyramidAxisRenderer.prototype.createTicks=function(D){var J=this.ticks;var M=this._dataBounds;var E;var K;var B;var G;var y;var n;var k;var h;var H;var C;var x;var L=this.min;var N=this.max;var q;var v;var m;var g;var j;var O;var A;var F;var r;var P;var z=null;var I;if(J.length){for(H=0,C=J.length;H<C;H++){q=J[H];v=new this.tickRenderer(this.tickOptions);if(e.isArray(q)){v.value=q[0];v.label=q[1];v.setTick(q[0],this.name);this._ticks.push(v)}else{if(e.isPlainObject(q)){e.extend(true,v,q);v.axis=this.name;this._ticks.push(v)}else{if(typeof q==="string"){P=H+D.defaultAxisStart}else{P=q}v.value=P;v.label=q;v.axis=this.name;this._ticks.push(v)}}}this.numberTicks=J.length;this.min=this._ticks[0].value;this.max=this._ticks[this.numberTicks-1].value;this.tickInterval=(this.max-this.min)/(this.numberTicks-1);if(this._options.tickInterval){var o=this._options.tickInterval;for(H=0;H<this.numberTicks;H++){if(H%o!==0){this._ticks[H].isMinorTick=true}}}else{E=(this.name.charAt(0)==="x")?this._plotDimensions.width:this._plotDimensions.height;r=Math.round(2+E/this.tickSpacingFactor);if(this.numberTicks>r){I=this.numberTicks-1;for(H=2;H<I;H++){if(I%H===0&&I/H<r){z=H-1;break}}if(z!==null){var p=1;for(H=1,C=this._ticks.length;H<C;H++){if(p<=z){this._ticks[H].show=false;p+=1}else{p=1}}}}}I=[];if(this.category){this._ticks[0].showGridline=false;this._ticks[0].showMark=false;for(H=this._ticks.length-1;H>0;H--){v=new this.tickRenderer(this.tickOptions);v.value=this._ticks[H-1].value+this.tickInterval/2;v.label="";v.showLabel=false;v.axis=this.name;this._ticks[H].showGridline=false;this._ticks[H].showMark=false;this._ticks.splice(H,0,v)}v=new this.tickRenderer(this.tickOptions);v.value=this._ticks[0].value-this.tickInterval/2;v.label="";v.showLabel=false;v.axis=this.name;this._ticks.unshift(v);v=new this.tickRenderer(this.tickOptions);v.value=this._ticks[this._ticks.length-1].value+this.tickInterval/2;v.label="";v.showLabel=false;v.axis=this.name;this._ticks.push(v);this.tickInterval=this.tickInterval/2;this.numberTicks=this._ticks.length;this.min=this._ticks[0].value;this.max=this._ticks[this._ticks.length-1].value}}else{if(this.name.charAt(0)==="x"){E=this._plotDimensions.width;var w=Math.max(M.max,Math.abs(M.min));var u=Math.min(M.min,-w);B=u;G=w;y=G-B;if(this.tickOptions==null||!this.tickOptions.formatString){this._overrideFormatString=true}m=30;g=Math.max(E,m+1);j=(g-m)/300;O=e.jqplot.LinearTickGenerator(B,G,j);A=B+y*(this.padMin-1);F=G-y*(this.padMax-1);if(B<A||G>F){A=B-y*(this.padMin-1);F=G+y*(this.padMax-1);O=e.jqplot.LinearTickGenerator(A,F,j)}this.min=O[0];this.max=O[1];this.numberTicks=O[2];this._autoFormatString=O[3];this.tickInterval=O[4]}else{E=this._plotDimensions.height;B=M.min;G=M.max;x=this._series[0];this._ticks=[];y=G-B;if(d[y]){y+=1;G+=1}this.max=G;this.min=B;r=Math.round(2+E/this.tickSpacingFactor);if(y+1<=r){this.numberTicks=y+1;this.tickInterval=1}else{for(var H=r;H>1;H--){if(y/(H-1)===Math.round(y/(H-1))){this.numberTicks=H;this.tickInterval=y/(H-1);break}}}}if(this._overrideFormatString&&this._autoFormatString!=""){this.tickOptions=this.tickOptions||{};this.tickOptions.formatString=this._autoFormatString}var f;for(H=0;H<this.numberTicks;H++){this.tickOptions.axis=this.name;f=this.min+this.tickInterval*H;if(this.name.charAt(0)==="x"){f=Math.abs(f)}this.tickOptions.value=this.min+this.tickInterval*H;v=new this.tickRenderer(this.tickOptions);v.label=v.prefix+v.formatter(v.formatString,f);this._ticks.push(v);if(this.name.charAt(0)==="x"&&D.axes.yMidAxis.show&&this.tickOptions.value===0){this._splitAxis=true;this._splitLength=D.axes.yMidAxis.getWidth();v=new this.tickRenderer(this.tickOptions);this._ticks.push(v);v.value=this.max/2000}}v=null}};e.jqplot.PyramidAxisRenderer.prototype.set=function(){var o=0;var j;var g=0;var n=0;var m;var l;var k;var f=(this._label==null)?false:this._label.show;if(this.show){l=this._ticks;a=l.length;for(m=0;m<a;m++){k=l[m];if(!k._breakTick&&k.show&&k.showLabel&&!k.isMinorTick){if(this.name.charAt(0)==="x"){j=k._elem.outerHeight(true)}else{j=k._elem.outerWidth(true)}if(j>o){o=j}}}if(this.name==="yMidAxis"){for(m=0;m<a;m++){k=l[m];if(k._elem){j=(o-k._elem.outerWidth(true))/2;k._elem.css("left",j)}}}k=null;l=null;if(f){g=this._label._elem.outerWidth(true);n=this._label._elem.outerHeight(true)}if(this.name==="xaxis"){o=o+n;this._elem.css({height:o+"px",left:"0px",bottom:"0px"})}else{if(this.name==="x2axis"){o=o+n;this._elem.css({height:o+"px",left:"0px",top:"0px"})}else{if(this.name==="yaxis"){o=o+g;this._elem.css({width:o+"px",left:"0px",top:"0px"});if(f&&this._label.constructor==e.jqplot.AxisLabelRenderer){this._label._elem.css("width",g+"px")}}else{if(this.name==="yMidAxis"){var j=o/2-g/2;this._elem.css({width:o+"px",top:"0px"});if(f&&this._label.constructor==e.jqplot.AxisLabelRenderer){this._label._elem.css({width:g,left:j,top:0})}}else{o=o+g;this._elem.css({width:o+"px",right:"0px",top:"0px"});if(f&&this._label.constructor==e.jqplot.AxisLabelRenderer){this._label._elem.css("width",g+"px")}}}}}}};e.jqplot.PyramidAxisRenderer.prototype.pack=function(j,g){j=j||{};g=g||this._offsets;var B=this._ticks;var v=this.max;var u=this.min;var o=g.max;var m=g.min;var r=(this._label==null)?false:this._label.show;for(var s in j){this._elem.css(s,j[s])}this._offsets=g;var k=o-m;var l=v-u;var z=this._splitLength;if(this._splitAxis){k-=this._splitLength;this.p2u=function(h){return(h-m)*l/k+u};this.u2p=function(h){if(h<=0){return(h-u)*k/l+m}else{return(h-u)*k/l+m+z}};this.series_u2p=function(h){if(h<=0){return(h-u)*k/l}else{return(h-u)*k/l+z}};this.series_p2u=function(h){return h*l/k+u}}else{this.p2u=function(h){return(h-m)*l/k+u};this.u2p=function(h){return(h-u)*k/l+m};if(this.name.charAt(0)==="x"){this.series_u2p=function(h){return(h-u)*k/l};this.series_p2u=function(h){return h*l/k+u}}else{this.series_u2p=function(h){return(h-v)*k/l};this.series_p2u=function(h){return h*l/k+v}}}if(this.show){if(this.name.charAt(0)==="x"){for(var x=0;x<B.length;x++){var q=B[x];if(q.show&&q.showLabel){var f;if(q.constructor==e.jqplot.CanvasAxisTickRenderer&&q.angle){var A=(this.name=="xaxis")?1:-1;switch(q.labelPosition){case"auto":if(A*q.angle<0){f=-q.getWidth()+q._textRenderer.height*Math.sin(-q._textRenderer.angle)/2}else{f=-q._textRenderer.height*Math.sin(q._textRenderer.angle)/2}break;case"end":f=-q.getWidth()+q._textRenderer.height*Math.sin(-q._textRenderer.angle)/2;break;case"start":f=-q._textRenderer.height*Math.sin(q._textRenderer.angle)/2;break;case"middle":f=-q.getWidth()/2+q._textRenderer.height*Math.sin(-q._textRenderer.angle)/2;break;default:f=-q.getWidth()/2+q._textRenderer.height*Math.sin(-q._textRenderer.angle)/2;break}}else{f=-q.getWidth()/2}var C=this.u2p(q.value)+f+"px";q._elem.css("left",C);q.pack()}}if(r){var n=this._label._elem.outerWidth(true);this._label._elem.css("left",m+k/2-n/2+"px");if(this.name=="xaxis"){this._label._elem.css("bottom","0px")}else{this._label._elem.css("top","0px")}this._label.pack()}}else{for(var x=0;x<B.length;x++){var q=B[x];if(q.show&&q.showLabel&&!q.isMinorTick){var f;if(q.constructor==e.jqplot.CanvasAxisTickRenderer&&q.angle){var A=(this.name=="yaxis")?1:-1;switch(q.labelPosition){case"auto":case"end":if(A*q.angle<0){f=-q._textRenderer.height*Math.cos(-q._textRenderer.angle)/2}else{f=-q.getHeight()+q._textRenderer.height*Math.cos(q._textRenderer.angle)/2}break;case"start":if(q.angle>0){f=-q._textRenderer.height*Math.cos(-q._textRenderer.angle)/2}else{f=-q.getHeight()+q._textRenderer.height*Math.cos(q._textRenderer.angle)/2}break;case"middle":f=-q.getHeight()/2;break;default:f=-q.getHeight()/2;break}}else{f=-q.getHeight()/2}var C=this.u2p(q.value)+f+"px";q._elem.css("top",C);q.pack()}}if(r){var y=this._label._elem.outerHeight(true);if(this.name!=="yMidAxis"){this._label._elem.css("top",o-k/2-y/2+"px")}if(this.name=="yaxis"){this._label._elem.css("left","0px")}else{if(this.name!=="yMidAxis"){this._label._elem.css("right","0px")}}this._label.pack()}}}B=null}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.js
deleted file mode 100644
index 64fa2acc..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.js
+++ /dev/null
@@ -1,429 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
- // Class: $.jqplot.CanvasGridRenderer
- // The default jqPlot grid renderer, creating a grid on a canvas element.
- // The renderer has no additional options beyond the <Grid> class.
- $.jqplot.PyramidGridRenderer = function(){
- $.jqplot.CanvasGridRenderer.call(this);
- };
-
- $.jqplot.PyramidGridRenderer.prototype = new $.jqplot.CanvasGridRenderer();
- $.jqplot.PyramidGridRenderer.prototype.constructor = $.jqplot.PyramidGridRenderer;
-
- // called with context of Grid object
- $.jqplot.CanvasGridRenderer.prototype.init = function(options) {
- this._ctx;
- this.plotBands = {
- show: false,
- color: 'rgb(230, 219, 179)',
- axis: 'y',
- start: null,
- interval: 10
- };
- $.extend(true, this, options);
- // set the shadow renderer options
- var sopts = {lineJoin:'miter', lineCap:'round', fill:false, isarc:false, angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, depth:this.shadowDepth, lineWidth:this.shadowWidth, closePath:false, strokeStyle:this.shadowColor};
- this.renderer.shadowRenderer.init(sopts);
- };
-
- $.jqplot.PyramidGridRenderer.prototype.draw = function() {
- this._ctx = this._elem.get(0).getContext("2d");
- var ctx = this._ctx;
- var axes = this._axes;
- var xp = axes.xaxis.u2p;
- var yp = axes.yMidAxis.u2p;
- var xnudge = axes.xaxis.max/1000.0;
- var xp0 = xp(0);
- var xpn = xp(xnudge);
- var ax = ['xaxis', 'yaxis', 'x2axis', 'y2axis','yMidAxis'];
- // Add the grid onto the grid canvas. This is the bottom most layer.
- ctx.save();
- ctx.clearRect(0, 0, this._plotDimensions.width, this._plotDimensions.height);
- ctx.fillStyle = this.backgroundColor || this.background;
-
- ctx.fillRect(this._left, this._top, this._width, this._height);
-
- if (this.plotBands.show) {
- ctx.save();
- var pb = this.plotBands;
- ctx.fillStyle = pb.color;
- var axis;
- var x, y, w, h;
- // find axis to work with
- if (pb.axis.charAt(0) === 'x') {
- if (axes.xaxis.show) {
- axis = axes.xaxis;
- }
- }
- else if (pb.axis.charAt(0) === 'y') {
- if (axes.yaxis.show) {
- axis = axes.yaxis;
- }
- else if (axes.y2axis.show) {
- axis = axes.y2axis;
- }
- else if (axes.yMidAxis.show) {
- axis = axes.yMidAxis;
- }
- }
-
- if (axis !== undefined) {
- // draw some rectangles
- var start = pb.start;
- if (start === null) {
- start = axis.min;
- }
- for (var i = start; i < axis.max; i += 2 * pb.interval) {
- if (axis.name.charAt(0) === 'y') {
- x = this._left;
- if ((i + pb.interval) < axis.max) {
- y = axis.series_u2p(i + pb.interval) + this._top;
- }
- else {
- y = axis.series_u2p(axis.max) + this._top;
- }
- w = this._right - this._left;
- h = axis.series_u2p(start) - axis.series_u2p(start + pb.interval);
- ctx.fillRect(x, y, w, h);
- }
- // else {
- // y = 0;
- // x = axis.series_u2p(i);
- // h = this._height;
- // w = axis.series_u2p(start + pb.interval) - axis.series_u2p(start);
- // }
-
- }
- }
- ctx.restore();
- }
-
- ctx.save();
- ctx.lineJoin = 'miter';
- ctx.lineCap = 'butt';
- ctx.lineWidth = this.gridLineWidth;
- ctx.strokeStyle = this.gridLineColor;
- var b, e, s, m;
- for (var i=5; i>0; i--) {
- var name = ax[i-1];
- var axis = axes[name];
- var ticks = axis._ticks;
- var numticks = ticks.length;
- if (axis.show) {
- if (axis.drawBaseline) {
- var bopts = {};
- if (axis.baselineWidth !== null) {
- bopts.lineWidth = axis.baselineWidth;
- }
- if (axis.baselineColor !== null) {
- bopts.strokeStyle = axis.baselineColor;
- }
- switch (name) {
- case 'xaxis':
- if (axes.yMidAxis.show) {
- drawLine (this._left, this._bottom, xp0, this._bottom, bopts);
- drawLine (xpn, this._bottom, this._right, this._bottom, bopts);
- }
- else {
- drawLine (this._left, this._bottom, this._right, this._bottom, bopts);
- }
- break;
- case 'yaxis':
- drawLine (this._left, this._bottom, this._left, this._top, bopts);
- break;
- case 'yMidAxis':
- drawLine(xp0, this._bottom, xp0, this._top, bopts);
- drawLine(xpn, this._bottom, xpn, this._top, bopts);
- break;
- case 'x2axis':
- if (axes.yMidAxis.show) {
- drawLine (this._left, this._top, xp0, this._top, bopts);
- drawLine (xpn, this._top, this._right, this._top, bopts);
- }
- else {
- drawLine (this._left, this._bottom, this._right, this._bottom, bopts);
- }
- break;
- case 'y2axis':
- drawLine (this._right, this._bottom, this._right, this._top, bopts);
- break;
-
- }
- }
- for (var j=numticks; j>0; j--) {
- var t = ticks[j-1];
- if (t.show) {
- var pos = Math.round(axis.u2p(t.value)) + 0.5;
- switch (name) {
- case 'xaxis':
- // draw the grid line if we should
- if (t.showGridline && this.drawGridlines && (!t.isMinorTick || axis.showMinorTicks)) {
- drawLine(pos, this._top, pos, this._bottom);
- }
-
- // draw the mark
- if (t.showMark && t.mark && (!t.isMinorTick || axis.showMinorTicks)) {
- s = t.markSize;
- m = t.mark;
- var pos = Math.round(axis.u2p(t.value)) + 0.5;
- switch (m) {
- case 'outside':
- b = this._bottom;
- e = this._bottom+s;
- break;
- case 'inside':
- b = this._bottom-s;
- e = this._bottom;
- break;
- case 'cross':
- b = this._bottom-s;
- e = this._bottom+s;
- break;
- default:
- b = this._bottom;
- e = this._bottom+s;
- break;
- }
- // draw the shadow
- if (this.shadow) {
- this.renderer.shadowRenderer.draw(ctx, [[pos,b],[pos,e]], {lineCap:'butt', lineWidth:this.gridLineWidth, offset:this.gridLineWidth*0.75, depth:2, fill:false, closePath:false});
- }
- // draw the line
- drawLine(pos, b, pos, e);
- }
- break;
- case 'yaxis':
- // draw the grid line
- if (t.showGridline && this.drawGridlines && (!t.isMinorTick || axis.showMinorTicks)) {
- drawLine(this._right, pos, this._left, pos);
- }
-
- // draw the mark
- if (t.showMark && t.mark && (!t.isMinorTick || axis.showMinorTicks)) {
- s = t.markSize;
- m = t.mark;
- var pos = Math.round(axis.u2p(t.value)) + 0.5;
- switch (m) {
- case 'outside':
- b = this._left-s;
- e = this._left;
- break;
- case 'inside':
- b = this._left;
- e = this._left+s;
- break;
- case 'cross':
- b = this._left-s;
- e = this._left+s;
- break;
- default:
- b = this._left-s;
- e = this._left;
- break;
- }
- // draw the shadow
- if (this.shadow) {
- this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
- }
- drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
- }
- break;
- case 'yMidAxis':
- // draw the grid line
- if (t.showGridline && this.drawGridlines && (!t.isMinorTick || axis.showMinorTicks)) {
- drawLine(this._left, pos, xp0, pos);
- drawLine(xpn, pos, this._right, pos);
- }
- // draw the mark
- if (t.showMark && t.mark && (!t.isMinorTick || axis.showMinorTicks)) {
- s = t.markSize;
- m = t.mark;
- var pos = Math.round(axis.u2p(t.value)) + 0.5;
-
- b = xp0;
- e = xp0 + s;
- // draw the shadow
- if (this.shadow) {
- this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
- }
- drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
-
- b = xpn - s;
- e = xpn;
- // draw the shadow
- if (this.shadow) {
- this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
- }
- drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
- }
- break;
- case 'x2axis':
- // draw the grid line
- if (t.showGridline && this.drawGridlines && (!t.isMinorTick || axis.showMinorTicks)) {
- drawLine(pos, this._bottom, pos, this._top);
- }
-
- // draw the mark
- if (t.showMark && t.mark && (!t.isMinorTick || axis.showMinorTicks)) {
- s = t.markSize;
- m = t.mark;
- var pos = Math.round(axis.u2p(t.value)) + 0.5;
- switch (m) {
- case 'outside':
- b = this._top-s;
- e = this._top;
- break;
- case 'inside':
- b = this._top;
- e = this._top+s;
- break;
- case 'cross':
- b = this._top-s;
- e = this._top+s;
- break;
- default:
- b = this._top-s;
- e = this._top;
- break;
- }
- // draw the shadow
- if (this.shadow) {
- this.renderer.shadowRenderer.draw(ctx, [[pos,b],[pos,e]], {lineCap:'butt', lineWidth:this.gridLineWidth, offset:this.gridLineWidth*0.75, depth:2, fill:false, closePath:false});
- }
- drawLine(pos, b, pos, e);
- }
- break;
- case 'y2axis':
- // draw the grid line
- if (t.showGridline && this.drawGridlines && (!t.isMinorTick || axis.showMinorTicks)) {
- drawLine(this._left, pos, this._right, pos);
- }
-
- // draw the mark
- if (t.showMark && t.mark && (!t.isMinorTick || axis.showMinorTicks)) {
- s = t.markSize;
- m = t.mark;
- var pos = Math.round(axis.u2p(t.value)) + 0.5;
- switch (m) {
- case 'outside':
- b = this._right;
- e = this._right+s;
- break;
- case 'inside':
- b = this._right-s;
- e = this._right;
- break;
- case 'cross':
- b = this._right-s;
- e = this._right+s;
- break;
- default:
- b = this._right;
- e = this._right+s;
- break;
- }
- // draw the shadow
- if (this.shadow) {
- this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false});
- }
- drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor});
- }
- break;
- default:
- break;
- }
- }
- }
- t = null;
- }
- axis = null;
- ticks = null;
- }
-
- ctx.restore();
-
- function drawLine(bx, by, ex, ey, opts) {
- ctx.save();
- opts = opts || {};
- if (opts.lineWidth == null || opts.lineWidth != 0){
- $.extend(true, ctx, opts);
- ctx.beginPath();
- ctx.moveTo(bx, by);
- ctx.lineTo(ex, ey);
- ctx.stroke();
- }
- ctx.restore();
- }
-
- if (this.shadow) {
- if (axes.yMidAxis.show) {
- var points = [[this._left, this._bottom], [xp0, this._bottom]];
- this.renderer.shadowRenderer.draw(ctx, points);
- var points = [[xpn, this._bottom], [this._right, this._bottom], [this._right, this._top]];
- this.renderer.shadowRenderer.draw(ctx, points);
- var points = [[xp0, this._bottom], [xp0, this._top]];
- this.renderer.shadowRenderer.draw(ctx, points);
- }
- else {
- var points = [[this._left, this._bottom], [this._right, this._bottom], [this._right, this._top]];
- this.renderer.shadowRenderer.draw(ctx, points);
- }
- }
- // Now draw border around grid. Use axis border definitions. start at
- // upper left and go clockwise.
- if (this.borderWidth != 0 && this.drawBorder) {
- if (axes.yMidAxis.show) {
- drawLine (this._left, this._top, xp0, this._top, {lineCap:'round', strokeStyle:axes.x2axis.borderColor, lineWidth:axes.x2axis.borderWidth});
- drawLine (xpn, this._top, this._right, this._top, {lineCap:'round', strokeStyle:axes.x2axis.borderColor, lineWidth:axes.x2axis.borderWidth});
- drawLine (this._right, this._top, this._right, this._bottom, {lineCap:'round', strokeStyle:axes.y2axis.borderColor, lineWidth:axes.y2axis.borderWidth});
- drawLine (this._right, this._bottom, xpn, this._bottom, {lineCap:'round', strokeStyle:axes.xaxis.borderColor, lineWidth:axes.xaxis.borderWidth});
- drawLine (xp0, this._bottom, this._left, this._bottom, {lineCap:'round', strokeStyle:axes.xaxis.borderColor, lineWidth:axes.xaxis.borderWidth});
- drawLine (this._left, this._bottom, this._left, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth});
- drawLine (xp0, this._bottom, xp0, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth});
- drawLine (xpn, this._bottom, xpn, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth});
- }
- else {
- drawLine (this._left, this._top, this._right, this._top, {lineCap:'round', strokeStyle:axes.x2axis.borderColor, lineWidth:axes.x2axis.borderWidth});
- drawLine (this._right, this._top, this._right, this._bottom, {lineCap:'round', strokeStyle:axes.y2axis.borderColor, lineWidth:axes.y2axis.borderWidth});
- drawLine (this._right, this._bottom, this._left, this._bottom, {lineCap:'round', strokeStyle:axes.xaxis.borderColor, lineWidth:axes.xaxis.borderWidth});
- drawLine (this._left, this._bottom, this._left, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth});
- }
- }
- // ctx.lineWidth = this.borderWidth;
- // ctx.strokeStyle = this.borderColor;
- // ctx.strokeRect(this._left, this._top, this._width, this._height);
-
- ctx.restore();
- ctx = null;
- axes = null;
- };
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.min.js
deleted file mode 100644
index ebf6ee44..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidGridRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(a){a.jqplot.PyramidGridRenderer=function(){a.jqplot.CanvasGridRenderer.call(this)};a.jqplot.PyramidGridRenderer.prototype=new a.jqplot.CanvasGridRenderer();a.jqplot.PyramidGridRenderer.prototype.constructor=a.jqplot.PyramidGridRenderer;a.jqplot.CanvasGridRenderer.prototype.init=function(c){this._ctx;this.plotBands={show:false,color:"rgb(230, 219, 179)",axis:"y",start:null,interval:10};a.extend(true,this,c);var b={lineJoin:"miter",lineCap:"round",fill:false,isarc:false,angle:this.shadowAngle,offset:this.shadowOffset,alpha:this.shadowAlpha,depth:this.shadowDepth,lineWidth:this.shadowWidth,closePath:false,strokeStyle:this.shadowColor};this.renderer.shadowRenderer.init(b)};a.jqplot.PyramidGridRenderer.prototype.draw=function(){this._ctx=this._elem.get(0).getContext("2d");var D=this._ctx;var G=this._axes;var q=G.xaxis.u2p;var J=G.yMidAxis.u2p;var l=G.xaxis.max/1000;var u=q(0);var f=q(l);var r=["xaxis","yaxis","x2axis","y2axis","yMidAxis"];D.save();D.clearRect(0,0,this._plotDimensions.width,this._plotDimensions.height);D.fillStyle=this.backgroundColor||this.background;D.fillRect(this._left,this._top,this._width,this._height);if(this.plotBands.show){D.save();var c=this.plotBands;D.fillStyle=c.color;var d;var o,n,p,I;if(c.axis.charAt(0)==="x"){if(G.xaxis.show){d=G.xaxis}}else{if(c.axis.charAt(0)==="y"){if(G.yaxis.show){d=G.yaxis}else{if(G.y2axis.show){d=G.y2axis}else{if(G.yMidAxis.show){d=G.yMidAxis}}}}}if(d!==undefined){var g=c.start;if(g===null){g=d.min}for(var H=g;H<d.max;H+=2*c.interval){if(d.name.charAt(0)==="y"){o=this._left;if((H+c.interval)<d.max){n=d.series_u2p(H+c.interval)+this._top}else{n=d.series_u2p(d.max)+this._top}p=this._right-this._left;I=d.series_u2p(g)-d.series_u2p(g+c.interval);D.fillRect(o,n,p,I)}}}D.restore()}D.save();D.lineJoin="miter";D.lineCap="butt";D.lineWidth=this.gridLineWidth;D.strokeStyle=this.gridLineColor;var L,K,A,C;for(var H=5;H>0;H--){var O=r[H-1];var d=G[O];var M=d._ticks;var B=M.length;if(d.show){if(d.drawBaseline){var N={};if(d.baselineWidth!==null){N.lineWidth=d.baselineWidth}if(d.baselineColor!==null){N.strokeStyle=d.baselineColor}switch(O){case"xaxis":if(G.yMidAxis.show){z(this._left,this._bottom,u,this._bottom,N);z(f,this._bottom,this._right,this._bottom,N)}else{z(this._left,this._bottom,this._right,this._bottom,N)}break;case"yaxis":z(this._left,this._bottom,this._left,this._top,N);break;case"yMidAxis":z(u,this._bottom,u,this._top,N);z(f,this._bottom,f,this._top,N);break;case"x2axis":if(G.yMidAxis.show){z(this._left,this._top,u,this._top,N);z(f,this._top,this._right,this._top,N)}else{z(this._left,this._bottom,this._right,this._bottom,N)}break;case"y2axis":z(this._right,this._bottom,this._right,this._top,N);break}}for(var E=B;E>0;E--){var v=M[E-1];if(v.show){var k=Math.round(d.u2p(v.value))+0.5;switch(O){case"xaxis":if(v.showGridline&&this.drawGridlines&&(!v.isMinorTick||d.showMinorTicks)){z(k,this._top,k,this._bottom)}if(v.showMark&&v.mark&&(!v.isMinorTick||d.showMinorTicks)){A=v.markSize;C=v.mark;var k=Math.round(d.u2p(v.value))+0.5;switch(C){case"outside":L=this._bottom;K=this._bottom+A;break;case"inside":L=this._bottom-A;K=this._bottom;break;case"cross":L=this._bottom-A;K=this._bottom+A;break;default:L=this._bottom;K=this._bottom+A;break}if(this.shadow){this.renderer.shadowRenderer.draw(D,[[k,L],[k,K]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}z(k,L,k,K)}break;case"yaxis":if(v.showGridline&&this.drawGridlines&&(!v.isMinorTick||d.showMinorTicks)){z(this._right,k,this._left,k)}if(v.showMark&&v.mark&&(!v.isMinorTick||d.showMinorTicks)){A=v.markSize;C=v.mark;var k=Math.round(d.u2p(v.value))+0.5;switch(C){case"outside":L=this._left-A;K=this._left;break;case"inside":L=this._left;K=this._left+A;break;case"cross":L=this._left-A;K=this._left+A;break;default:L=this._left-A;K=this._left;break}if(this.shadow){this.renderer.shadowRenderer.draw(D,[[L,k],[K,k]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}z(L,k,K,k,{strokeStyle:d.borderColor})}break;case"yMidAxis":if(v.showGridline&&this.drawGridlines&&(!v.isMinorTick||d.showMinorTicks)){z(this._left,k,u,k);z(f,k,this._right,k)}if(v.showMark&&v.mark&&(!v.isMinorTick||d.showMinorTicks)){A=v.markSize;C=v.mark;var k=Math.round(d.u2p(v.value))+0.5;L=u;K=u+A;if(this.shadow){this.renderer.shadowRenderer.draw(D,[[L,k],[K,k]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}z(L,k,K,k,{strokeStyle:d.borderColor});L=f-A;K=f;if(this.shadow){this.renderer.shadowRenderer.draw(D,[[L,k],[K,k]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}z(L,k,K,k,{strokeStyle:d.borderColor})}break;case"x2axis":if(v.showGridline&&this.drawGridlines&&(!v.isMinorTick||d.showMinorTicks)){z(k,this._bottom,k,this._top)}if(v.showMark&&v.mark&&(!v.isMinorTick||d.showMinorTicks)){A=v.markSize;C=v.mark;var k=Math.round(d.u2p(v.value))+0.5;switch(C){case"outside":L=this._top-A;K=this._top;break;case"inside":L=this._top;K=this._top+A;break;case"cross":L=this._top-A;K=this._top+A;break;default:L=this._top-A;K=this._top;break}if(this.shadow){this.renderer.shadowRenderer.draw(D,[[k,L],[k,K]],{lineCap:"butt",lineWidth:this.gridLineWidth,offset:this.gridLineWidth*0.75,depth:2,fill:false,closePath:false})}z(k,L,k,K)}break;case"y2axis":if(v.showGridline&&this.drawGridlines&&(!v.isMinorTick||d.showMinorTicks)){z(this._left,k,this._right,k)}if(v.showMark&&v.mark&&(!v.isMinorTick||d.showMinorTicks)){A=v.markSize;C=v.mark;var k=Math.round(d.u2p(v.value))+0.5;switch(C){case"outside":L=this._right;K=this._right+A;break;case"inside":L=this._right-A;K=this._right;break;case"cross":L=this._right-A;K=this._right+A;break;default:L=this._right;K=this._right+A;break}if(this.shadow){this.renderer.shadowRenderer.draw(D,[[L,k],[K,k]],{lineCap:"butt",lineWidth:this.gridLineWidth*1.5,offset:this.gridLineWidth*0.75,fill:false,closePath:false})}z(L,k,K,k,{strokeStyle:d.borderColor})}break;default:break}}}v=null}d=null;M=null}D.restore();function z(j,i,e,b,h){D.save();h=h||{};if(h.lineWidth==null||h.lineWidth!=0){a.extend(true,D,h);D.beginPath();D.moveTo(j,i);D.lineTo(e,b);D.stroke()}D.restore()}if(this.shadow){if(G.yMidAxis.show){var F=[[this._left,this._bottom],[u,this._bottom]];this.renderer.shadowRenderer.draw(D,F);var F=[[f,this._bottom],[this._right,this._bottom],[this._right,this._top]];this.renderer.shadowRenderer.draw(D,F);var F=[[u,this._bottom],[u,this._top]];this.renderer.shadowRenderer.draw(D,F)}else{var F=[[this._left,this._bottom],[this._right,this._bottom],[this._right,this._top]];this.renderer.shadowRenderer.draw(D,F)}}if(this.borderWidth!=0&&this.drawBorder){if(G.yMidAxis.show){z(this._left,this._top,u,this._top,{lineCap:"round",strokeStyle:G.x2axis.borderColor,lineWidth:G.x2axis.borderWidth});z(f,this._top,this._right,this._top,{lineCap:"round",strokeStyle:G.x2axis.borderColor,lineWidth:G.x2axis.borderWidth});z(this._right,this._top,this._right,this._bottom,{lineCap:"round",strokeStyle:G.y2axis.borderColor,lineWidth:G.y2axis.borderWidth});z(this._right,this._bottom,f,this._bottom,{lineCap:"round",strokeStyle:G.xaxis.borderColor,lineWidth:G.xaxis.borderWidth});z(u,this._bottom,this._left,this._bottom,{lineCap:"round",strokeStyle:G.xaxis.borderColor,lineWidth:G.xaxis.borderWidth});z(this._left,this._bottom,this._left,this._top,{lineCap:"round",strokeStyle:G.yaxis.borderColor,lineWidth:G.yaxis.borderWidth});z(u,this._bottom,u,this._top,{lineCap:"round",strokeStyle:G.yaxis.borderColor,lineWidth:G.yaxis.borderWidth});z(f,this._bottom,f,this._top,{lineCap:"round",strokeStyle:G.yaxis.borderColor,lineWidth:G.yaxis.borderWidth})}else{z(this._left,this._top,this._right,this._top,{lineCap:"round",strokeStyle:G.x2axis.borderColor,lineWidth:G.x2axis.borderWidth});z(this._right,this._top,this._right,this._bottom,{lineCap:"round",strokeStyle:G.y2axis.borderColor,lineWidth:G.y2axis.borderWidth});z(this._right,this._bottom,this._left,this._bottom,{lineCap:"round",strokeStyle:G.xaxis.borderColor,lineWidth:G.xaxis.borderWidth});z(this._left,this._bottom,this._left,this._top,{lineCap:"round",strokeStyle:G.yaxis.borderColor,lineWidth:G.yaxis.borderWidth})}}D.restore();D=null;G=null}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.js
deleted file mode 100644
index d4cc48c9..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.js
+++ /dev/null
@@ -1,514 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
-
- // Need to ensure pyramid axis and grid renderers are loaded.
- // You should load these with script tags in the html head, that is more efficient
- // as the browser will cache the request.
- // Note, have to block with synchronous request in order to execute bar renderer code.
- if ($.jqplot.PyramidAxisRenderer === undefined) {
- $.ajax({
- url: $.jqplot.pluginLocation + 'jqplot.pyramidAxisRenderer.js',
- dataType: "script",
- async: false
- });
- }
-
- if ($.jqplot.PyramidGridRenderer === undefined) {
- $.ajax({
- url: $.jqplot.pluginLocation + 'jqplot.pyramidGridRenderer.js',
- dataType: "script",
- async: false
- });
- }
-
- $.jqplot.PyramidRenderer = function(){
- $.jqplot.LineRenderer.call(this);
- };
-
- $.jqplot.PyramidRenderer.prototype = new $.jqplot.LineRenderer();
- $.jqplot.PyramidRenderer.prototype.constructor = $.jqplot.PyramidRenderer;
-
- // called with scope of a series
- $.jqplot.PyramidRenderer.prototype.init = function(options, plot) {
- options = options || {};
- this._type = 'pyramid';
- // Group: Properties
- //
- // prop: barPadding
- this.barPadding = 10;
- this.barWidth = null;
- // prop: fill
- // True to fill the bars.
- this.fill = true;
- // prop: highlightMouseOver
- // True to highlight slice when moused over.
- // This must be false to enable highlightMouseDown to highlight when clicking on a slice.
- this.highlightMouseOver = true;
- // prop: highlightMouseDown
- // True to highlight when a mouse button is pressed over a slice.
- // This will be disabled if highlightMouseOver is true.
- this.highlightMouseDown = false;
- // prop: highlightColors
- // an array of colors to use when highlighting a slice.
- this.highlightColors = [];
- // prop highlightThreshold
- // Expand the highlightable region in the x direction.
- // E.g. a value of 3 will highlight a bar when the mouse is
- // within 3 pixels of the bar in the x direction.
- this.highlightThreshold = 2;
- // prop: synchronizeHighlight
- // Index of another series to highlight when this series is highlighted.
- // null or false to not synchronize.
- this.synchronizeHighlight = false;
- // prop: offsetBars
- // 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.offsetBars = false;
-
- // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver
- if (options.highlightMouseDown && options.highlightMouseOver == null) {
- options.highlightMouseOver = false;
- }
-
- this.side = 'right';
-
- $.extend(true, this, options);
-
- // if (this.fill === false) {
- // this.shadow = false;
- // }
-
- if (this.side === 'left') {
- this._highlightThreshold = [[-this.highlightThreshold, 0], [-this.highlightThreshold, 0], [0,0], [0,0]];
- }
-
- else {
- this._highlightThreshold = [[0,0], [0,0], [this.highlightThreshold, 0], [this.highlightThreshold, 0]];
- }
-
- this.renderer.options = options;
- // index of the currenty highlighted point, if any
- this._highlightedPoint = null;
- // Array of actual data colors used for each data point.
- this._dataColors = [];
- this._barPoints = [];
- this.fillAxis = 'y';
- this._primaryAxis = '_yaxis';
- this._xnudge = 0;
-
- // set the shape renderer options
- var opts = {lineJoin:'miter', lineCap:'butt', fill:this.fill, fillRect:this.fill, isarc:false, strokeStyle:this.color, fillStyle:this.color, closePath:this.fill, lineWidth: this.lineWidth};
- this.renderer.shapeRenderer.init(opts);
- // set the shadow renderer options
- var shadow_offset = options.shadowOffset;
- // set the shadow renderer options
- if (shadow_offset == null) {
- // scale the shadowOffset to the width of the line.
- if (this.lineWidth > 2.5) {
- shadow_offset = 1.25 * (1 + (Math.atan((this.lineWidth/2.5))/0.785398163 - 1)*0.6);
- // var shadow_offset = this.shadowOffset;
- }
- // for skinny lines, don't make such a big shadow.
- else {
- shadow_offset = 1.25 * Math.atan((this.lineWidth/2.5))/0.785398163;
- }
- }
- var sopts = {lineJoin:'miter', lineCap:'butt', fill:this.fill, fillRect:this.fill, isarc:false, angle:this.shadowAngle, offset:shadow_offset, alpha:this.shadowAlpha, depth:this.shadowDepth, closePath:this.fill, lineWidth: this.lineWidth};
- this.renderer.shadowRenderer.init(sopts);
-
- plot.postDrawHooks.addOnce(postPlotDraw);
- plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove);
-
- // if this is the left side of pyramid, set y values to negative.
- if (this.side === 'left') {
- for (var i=0, l=this.data.length; i<l; i++) {
- this.data[i][1] = -Math.abs(this.data[i][1]);
- }
- }
- };
-
- // setGridData
- // converts the user data values to grid coordinates and stores them
- // in the gridData array.
- // Called with scope of a series.
- $.jqplot.PyramidRenderer.prototype.setGridData = function(plot) {
- // recalculate the grid data
- var xp = this._xaxis.series_u2p;
- var yp = this._yaxis.series_u2p;
- var data = this._plotData;
- var pdata = this._prevPlotData;
- this.gridData = [];
- this._prevGridData = [];
- var l = data.length;
- var adjust = false;
- var i;
-
- // if any data values are < 0, consider this a negative series
- for (i = 0; i < l; i++) {
- if (data[i][1] < 0) {
- this.side = 'left';
- }
- }
-
- if (this._yaxis.name === 'yMidAxis' && this.side === 'right') {
- this._xnudge = this._xaxis.max/2000.0;
- adjust = true;
- }
-
- for (i = 0; i < l; i++) {
- // if not a line series or if no nulls in data, push the converted point onto the array.
- if (data[i][0] != null && data[i][1] != null) {
- this.gridData.push([xp(data[i][1]), yp(data[i][0])]);
- }
- // else if there is a null, preserve it.
- else if (data[i][0] == null) {
- this.gridData.push([xp(data[i][1]), null]);
- }
- else if (data[i][1] == null) {
- this.gridData.push(null, [yp(data[i][0])]);
- }
- // finally, adjust x grid data if have to
- if (data[i][1] === 0 && adjust) {
- this.gridData[i][0] = xp(this._xnudge);
- }
- }
- };
-
- // makeGridData
- // 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.PyramidRenderer.prototype.makeGridData = function(data, plot) {
- // recalculate the grid data
- var xp = this._xaxis.series_u2p;
- var yp = this._yaxis.series_u2p;
- var gd = [];
- var l = data.length;
- var adjust = false;
- var i;
-
- // if any data values are < 0, consider this a negative series
- for (i = 0; i < l; i++) {
- if (data[i][1] < 0) {
- this.side = 'left';
- }
- }
-
- if (this._yaxis.name === 'yMidAxis' && this.side === 'right') {
- this._xnudge = this._xaxis.max/2000.0;
- adjust = true;
- }
-
- for (i = 0; i < l; i++) {
- // if not a line series or if no nulls in data, push the converted point onto the array.
- if (data[i][0] != null && data[i][1] != null) {
- gd.push([xp(data[i][1]), yp(data[i][0])]);
- }
- // else if there is a null, preserve it.
- else if (data[i][0] == null) {
- gd.push([xp(data[i][1]), null]);
- }
- else if (data[i][1] == null) {
- gd.push([null, yp(data[i][0])]);
- }
- // finally, adjust x grid data if have to
- if (data[i][1] === 0 && adjust) {
- gd[i][0] = xp(this._xnudge);
- }
- }
-
- return gd;
- };
-
- $.jqplot.PyramidRenderer.prototype.setBarWidth = function() {
- // need to know how many data values we have on the approprate axis and figure it out.
- var i;
- var nvals = 0;
- var nseries = 0;
- var paxis = this[this._primaryAxis];
- var s, series, pos;
- nvals = paxis.max - paxis.min;
- var nticks = paxis.numberTicks;
- var nbins = (nticks-1)/2;
- // so, now we have total number of axis values.
- var temp = (this.barPadding === 0) ? 1.0 : 0;
- if (paxis.name == 'xaxis' || paxis.name == 'x2axis') {
- this.barWidth = (paxis._offsets.max - paxis._offsets.min) / nvals - this.barPadding + temp;
- }
- else {
- if (this.fill) {
- this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals - this.barPadding + temp;
- }
- else {
- this.barWidth = (paxis._offsets.min - paxis._offsets.max) / nvals;
- }
- }
- };
-
- $.jqplot.PyramidRenderer.prototype.draw = function(ctx, gridData, options) {
- var i;
- // Ughhh, have to make a copy of options b/c it may be modified later.
- var opts = $.extend({}, options);
- var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow;
- var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine;
- var fill = (opts.fill != undefined) ? opts.fill : this.fill;
- var xp = this._xaxis.series_u2p;
- var yp = this._yaxis.series_u2p;
- var pointx, pointy;
- // clear out data colors.
- this._dataColors = [];
- this._barPoints = [];
-
- if (this.renderer.options.barWidth == null) {
- this.renderer.setBarWidth.call(this);
- }
-
- // var temp = this._plotSeriesInfo = this.renderer.calcSeriesNumbers.call(this);
- // var nvals = temp[0];
- // var nseries = temp[1];
- // var pos = temp[2];
- var points = [],
- w,
- h;
-
- // this._barNudge = 0;
-
- if (showLine) {
- var negativeColors = new $.jqplot.ColorGenerator(this.negativeSeriesColors);
- var positiveColors = new $.jqplot.ColorGenerator(this.seriesColors);
- var negativeColor = negativeColors.get(this.index);
- if (! this.useNegativeColors) {
- negativeColor = opts.fillStyle;
- }
- var positiveColor = opts.fillStyle;
- var base;
- var xstart = this._xaxis.series_u2p(this._xnudge);
- var ystart = this._yaxis.series_u2p(this._yaxis.min);
- var yend = this._yaxis.series_u2p(this._yaxis.max);
- var bw = this.barWidth;
- var bw2 = bw/2.0;
- var points = [];
- var yadj = this.offsetBars ? bw2 : 0;
-
- for (var i=0, l=gridData.length; i<l; i++) {
- if (this.data[i][0] == null) {
- continue;
- }
- base = gridData[i][1];
- // not stacked and first series in stack
-
- if (this._plotData[i][1] < 0) {
- if (this.varyBarColor && !this._stack) {
- if (this.useNegativeColors) {
- opts.fillStyle = negativeColors.next();
- }
- else {
- opts.fillStyle = positiveColors.next();
- }
- }
- }
- else {
- if (this.varyBarColor && !this._stack) {
- opts.fillStyle = positiveColors.next();
- }
- else {
- opts.fillStyle = positiveColor;
- }
- }
-
- if (this.fill) {
-
- if (this._plotData[i][1] >= 0) {
- // xstart = this._xaxis.series_u2p(this._xnudge);
- w = gridData[i][0] - xstart;
- h = this.barWidth;
- points = [xstart, base - bw2 - yadj, w, h];
- }
- else {
- // xstart = this._xaxis.series_u2p(0);
- w = xstart - gridData[i][0];
- h = this.barWidth;
- points = [gridData[i][0], base - bw2 - yadj, w, h];
- }
-
- this._barPoints.push([[points[0], points[1] + h], [points[0], points[1]], [points[0] + w, points[1]], [points[0] + w, points[1] + h]]);
-
- if (shadow) {
- this.renderer.shadowRenderer.draw(ctx, points);
- }
- var clr = opts.fillStyle || this.color;
- this._dataColors.push(clr);
- this.renderer.shapeRenderer.draw(ctx, points, opts);
- }
-
- else {
- if (i === 0) {
- points =[[xstart, ystart], [gridData[i][0], ystart], [gridData[i][0], gridData[i][1] - bw2 - yadj]];
- }
-
- else if (i < l-1) {
- points = points.concat([[gridData[i-1][0], gridData[i-1][1] - bw2 - yadj], [gridData[i][0], gridData[i][1] + bw2 - yadj], [gridData[i][0], gridData[i][1] - bw2 - yadj]]);
- }
-
- // finally, draw the line
- else {
- points = points.concat([[gridData[i-1][0], gridData[i-1][1] - bw2 - yadj], [gridData[i][0], gridData[i][1] + bw2 - yadj], [gridData[i][0], yend], [xstart, yend]]);
-
- if (shadow) {
- this.renderer.shadowRenderer.draw(ctx, points);
- }
- var clr = opts.fillStyle || this.color;
- this._dataColors.push(clr);
- this.renderer.shapeRenderer.draw(ctx, points, opts);
- }
- }
- }
- }
-
- if (this.highlightColors.length == 0) {
- this.highlightColors = $.jqplot.computeHighlightColors(this._dataColors);
- }
-
- else if (typeof(this.highlightColors) == 'string') {
- this.highlightColors = [];
- for (var i=0; i<this._dataColors.length; i++) {
- this.highlightColors.push(this.highlightColors);
- }
- }
-
- };
-
-
- // setup default renderers for axes and legend so user doesn't have to
- // called with scope of plot
- function preInit(target, data, options) {
- options = options || {};
- options.axesDefaults = options.axesDefaults || {};
- options.grid = options.grid || {};
- options.legend = options.legend || {};
- options.seriesDefaults = options.seriesDefaults || {};
- // only set these if there is a pie series
- var setopts = false;
- if (options.seriesDefaults.renderer === $.jqplot.PyramidRenderer) {
- setopts = true;
- }
- else if (options.series) {
- for (var i=0; i < options.series.length; i++) {
- if (options.series[i].renderer === $.jqplot.PyramidRenderer) {
- setopts = true;
- }
- }
- }
-
- if (setopts) {
- options.axesDefaults.renderer = $.jqplot.PyramidAxisRenderer;
- options.grid.renderer = $.jqplot.PyramidGridRenderer;
- options.seriesDefaults.pointLabels = {show: false};
- }
- }
-
- // called within context of plot
- // create a canvas which we can draw on.
- // insert it before the eventCanvas, so eventCanvas will still capture events.
- function postPlotDraw() {
- // Memory Leaks patch
- if (this.plugins.pyramidRenderer && this.plugins.pyramidRenderer.highlightCanvas) {
-
- this.plugins.pyramidRenderer.highlightCanvas.resetCanvas();
- this.plugins.pyramidRenderer.highlightCanvas = null;
- }
-
- this.plugins.pyramidRenderer = {highlightedSeriesIndex:null};
- this.plugins.pyramidRenderer.highlightCanvas = new $.jqplot.GenericCanvas();
-
- this.eventCanvas._elem.before(this.plugins.pyramidRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-pyramidRenderer-highlight-canvas', this._plotDimensions, this));
- this.plugins.pyramidRenderer.highlightCanvas.setContext();
- this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); });
- }
-
- function highlight (plot, sidx, pidx, points) {
- var s = plot.series[sidx];
- var canvas = plot.plugins.pyramidRenderer.highlightCanvas;
- canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height);
- s._highlightedPoint = pidx;
- plot.plugins.pyramidRenderer.highlightedSeriesIndex = sidx;
- var opts = {fillStyle: s.highlightColors[pidx], fillRect: false};
- s.renderer.shapeRenderer.draw(canvas._ctx, points, opts);
- if (s.synchronizeHighlight !== false && plot.series.length >= s.synchronizeHighlight && s.synchronizeHighlight !== sidx) {
- s = plot.series[s.synchronizeHighlight];
- opts = {fillStyle: s.highlightColors[pidx], fillRect: false};
- s.renderer.shapeRenderer.draw(canvas._ctx, s._barPoints[pidx], opts);
- }
- canvas = null;
- }
-
- function unhighlight (plot) {
- var canvas = plot.plugins.pyramidRenderer.highlightCanvas;
- canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height);
- for (var i=0; i<plot.series.length; i++) {
- plot.series[i]._highlightedPoint = null;
- }
- plot.plugins.pyramidRenderer.highlightedSeriesIndex = null;
- plot.target.trigger('jqplotDataUnhighlight');
- canvas = null;
- }
-
-
- function handleMove(ev, gridpos, datapos, neighbor, plot) {
- if (neighbor) {
- var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data];
- var evt1 = jQuery.Event('jqplotDataMouseOver');
- evt1.pageX = ev.pageX;
- evt1.pageY = ev.pageY;
- plot.target.trigger(evt1, ins);
- if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.pyramidRenderer.highlightedSeriesIndex && ins[1] == plot.series[ins[0]]._highlightedPoint)) {
- var evt = jQuery.Event('jqplotDataHighlight');
- evt.which = ev.which;
- evt.pageX = ev.pageX;
- evt.pageY = ev.pageY;
- plot.target.trigger(evt, ins);
- highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points);
- }
- }
- else if (neighbor == null) {
- unhighlight (plot);
- }
- }
-
- // Have to add hook here, becuase it needs called before series is inited.
- $.jqplot.preInitHooks.push(preInit);
-
-
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.min.js
deleted file mode 100644
index 968303cc..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.pyramidRenderer.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(c){if(c.jqplot.PyramidAxisRenderer===undefined){c.ajax({url:c.jqplot.pluginLocation+"jqplot.pyramidAxisRenderer.js",dataType:"script",async:false})}if(c.jqplot.PyramidGridRenderer===undefined){c.ajax({url:c.jqplot.pluginLocation+"jqplot.pyramidGridRenderer.js",dataType:"script",async:false})}c.jqplot.PyramidRenderer=function(){c.jqplot.LineRenderer.call(this)};c.jqplot.PyramidRenderer.prototype=new c.jqplot.LineRenderer();c.jqplot.PyramidRenderer.prototype.constructor=c.jqplot.PyramidRenderer;c.jqplot.PyramidRenderer.prototype.init=function(j,o){j=j||{};this._type="pyramid";this.barPadding=10;this.barWidth=null;this.fill=true;this.highlightMouseOver=true;this.highlightMouseDown=false;this.highlightColors=[];this.highlightThreshold=2;this.synchronizeHighlight=false;this.offsetBars=false;if(j.highlightMouseDown&&j.highlightMouseOver==null){j.highlightMouseOver=false}this.side="right";c.extend(true,this,j);if(this.side==="left"){this._highlightThreshold=[[-this.highlightThreshold,0],[-this.highlightThreshold,0],[0,0],[0,0]]}else{this._highlightThreshold=[[0,0],[0,0],[this.highlightThreshold,0],[this.highlightThreshold,0]]}this.renderer.options=j;this._highlightedPoint=null;this._dataColors=[];this._barPoints=[];this.fillAxis="y";this._primaryAxis="_yaxis";this._xnudge=0;var n={lineJoin:"miter",lineCap:"butt",fill:this.fill,fillRect:this.fill,isarc:false,strokeStyle:this.color,fillStyle:this.color,closePath:this.fill,lineWidth:this.lineWidth};this.renderer.shapeRenderer.init(n);var m=j.shadowOffset;if(m==null){if(this.lineWidth>2.5){m=1.25*(1+(Math.atan((this.lineWidth/2.5))/0.785398163-1)*0.6)}else{m=1.25*Math.atan((this.lineWidth/2.5))/0.785398163}}var h={lineJoin:"miter",lineCap:"butt",fill:this.fill,fillRect:this.fill,isarc:false,angle:this.shadowAngle,offset:m,alpha:this.shadowAlpha,depth:this.shadowDepth,closePath:this.fill,lineWidth:this.lineWidth};this.renderer.shadowRenderer.init(h);o.postDrawHooks.addOnce(f);o.eventListenerHooks.addOnce("jqplotMouseMove",e);if(this.side==="left"){for(var k=0,g=this.data.length;k<g;k++){this.data[k][1]=-Math.abs(this.data[k][1])}}};c.jqplot.PyramidRenderer.prototype.setGridData=function(p){var j=this._xaxis.series_u2p;var o=this._yaxis.series_u2p;var k=this._plotData;var n=this._prevPlotData;this.gridData=[];this._prevGridData=[];var g=k.length;var m=false;var h;for(h=0;h<g;h++){if(k[h][1]<0){this.side="left"}}if(this._yaxis.name==="yMidAxis"&&this.side==="right"){this._xnudge=this._xaxis.max/2000;m=true}for(h=0;h<g;h++){if(k[h][0]!=null&&k[h][1]!=null){this.gridData.push([j(k[h][1]),o(k[h][0])])}else{if(k[h][0]==null){this.gridData.push([j(k[h][1]),null])}else{if(k[h][1]==null){this.gridData.push(null,[o(k[h][0])])}}}if(k[h][1]===0&&m){this.gridData[h][0]=j(this._xnudge)}}};c.jqplot.PyramidRenderer.prototype.makeGridData=function(m,p){var k=this._xaxis.series_u2p;var o=this._yaxis.series_u2p;var j=[];var g=m.length;var n=false;var h;for(h=0;h<g;h++){if(m[h][1]<0){this.side="left"}}if(this._yaxis.name==="yMidAxis"&&this.side==="right"){this._xnudge=this._xaxis.max/2000;n=true}for(h=0;h<g;h++){if(m[h][0]!=null&&m[h][1]!=null){j.push([k(m[h][1]),o(m[h][0])])}else{if(m[h][0]==null){j.push([k(m[h][1]),null])}else{if(m[h][1]==null){j.push([null,o(m[h][0])])}}}if(m[h][1]===0&&n){j[h][0]=k(this._xnudge)}}return j};c.jqplot.PyramidRenderer.prototype.setBarWidth=function(){var k;var g=0;var h=0;var m=this[this._primaryAxis];var q,l,o;g=m.max-m.min;var n=m.numberTicks;var j=(n-1)/2;var p=(this.barPadding===0)?1:0;if(m.name=="xaxis"||m.name=="x2axis"){this.barWidth=(m._offsets.max-m._offsets.min)/g-this.barPadding+p}else{if(this.fill){this.barWidth=(m._offsets.min-m._offsets.max)/g-this.barPadding+p}else{this.barWidth=(m._offsets.min-m._offsets.max)/g}}};c.jqplot.PyramidRenderer.prototype.draw=function(B,I,k){var E;var u=c.extend({},k);var p=(u.shadow!=undefined)?u.shadow:this.shadow;var K=(u.showLine!=undefined)?u.showLine:this.showLine;var C=(u.fill!=undefined)?u.fill:this.fill;var t=this._xaxis.series_u2p;var G=this._yaxis.series_u2p;var z,x;this._dataColors=[];this._barPoints=[];if(this.renderer.options.barWidth==null){this.renderer.setBarWidth.call(this)}var D=[],s,F;if(K){var q=new c.jqplot.ColorGenerator(this.negativeSeriesColors);var v=new c.jqplot.ColorGenerator(this.seriesColors);var J=q.get(this.index);if(!this.useNegativeColors){J=u.fillStyle}var o=u.fillStyle;var n;var L=this._xaxis.series_u2p(this._xnudge);var j=this._yaxis.series_u2p(this._yaxis.min);var m=this._yaxis.series_u2p(this._yaxis.max);var H=this.barWidth;var y=H/2;var D=[];var r=this.offsetBars?y:0;for(var E=0,A=I.length;E<A;E++){if(this.data[E][0]==null){continue}n=I[E][1];if(this._plotData[E][1]<0){if(this.varyBarColor&&!this._stack){if(this.useNegativeColors){u.fillStyle=q.next()}else{u.fillStyle=v.next()}}}else{if(this.varyBarColor&&!this._stack){u.fillStyle=v.next()}else{u.fillStyle=o}}if(this.fill){if(this._plotData[E][1]>=0){s=I[E][0]-L;F=this.barWidth;D=[L,n-y-r,s,F]}else{s=L-I[E][0];F=this.barWidth;D=[I[E][0],n-y-r,s,F]}this._barPoints.push([[D[0],D[1]+F],[D[0],D[1]],[D[0]+s,D[1]],[D[0]+s,D[1]+F]]);if(p){this.renderer.shadowRenderer.draw(B,D)}var g=u.fillStyle||this.color;this._dataColors.push(g);this.renderer.shapeRenderer.draw(B,D,u)}else{if(E===0){D=[[L,j],[I[E][0],j],[I[E][0],I[E][1]-y-r]]}else{if(E<A-1){D=D.concat([[I[E-1][0],I[E-1][1]-y-r],[I[E][0],I[E][1]+y-r],[I[E][0],I[E][1]-y-r]])}else{D=D.concat([[I[E-1][0],I[E-1][1]-y-r],[I[E][0],I[E][1]+y-r],[I[E][0],m],[L,m]]);if(p){this.renderer.shadowRenderer.draw(B,D)}var g=u.fillStyle||this.color;this._dataColors.push(g);this.renderer.shapeRenderer.draw(B,D,u)}}}}}if(this.highlightColors.length==0){this.highlightColors=c.jqplot.computeHighlightColors(this._dataColors)}else{if(typeof(this.highlightColors)=="string"){this.highlightColors=[];for(var E=0;E<this._dataColors.length;E++){this.highlightColors.push(this.highlightColors)}}}};function b(l,k,h){h=h||{};h.axesDefaults=h.axesDefaults||{};h.grid=h.grid||{};h.legend=h.legend||{};h.seriesDefaults=h.seriesDefaults||{};var g=false;if(h.seriesDefaults.renderer===c.jqplot.PyramidRenderer){g=true}else{if(h.series){for(var j=0;j<h.series.length;j++){if(h.series[j].renderer===c.jqplot.PyramidRenderer){g=true}}}}if(g){h.axesDefaults.renderer=c.jqplot.PyramidAxisRenderer;h.grid.renderer=c.jqplot.PyramidGridRenderer;h.seriesDefaults.pointLabels={show:false}}}function f(){if(this.plugins.pyramidRenderer&&this.plugins.pyramidRenderer.highlightCanvas){this.plugins.pyramidRenderer.highlightCanvas.resetCanvas();this.plugins.pyramidRenderer.highlightCanvas=null}this.plugins.pyramidRenderer={highlightedSeriesIndex:null};this.plugins.pyramidRenderer.highlightCanvas=new c.jqplot.GenericCanvas();this.eventCanvas._elem.before(this.plugins.pyramidRenderer.highlightCanvas.createElement(this._gridPadding,"jqplot-pyramidRenderer-highlight-canvas",this._plotDimensions,this));this.plugins.pyramidRenderer.highlightCanvas.setContext();this.eventCanvas._elem.bind("mouseleave",{plot:this},function(g){d(g.data.plot)})}function a(m,l,j,i){var h=m.series[l];var g=m.plugins.pyramidRenderer.highlightCanvas;g._ctx.clearRect(0,0,g._ctx.canvas.width,g._ctx.canvas.height);h._highlightedPoint=j;m.plugins.pyramidRenderer.highlightedSeriesIndex=l;var k={fillStyle:h.highlightColors[j],fillRect:false};h.renderer.shapeRenderer.draw(g._ctx,i,k);if(h.synchronizeHighlight!==false&&m.series.length>=h.synchronizeHighlight&&h.synchronizeHighlight!==l){h=m.series[h.synchronizeHighlight];k={fillStyle:h.highlightColors[j],fillRect:false};h.renderer.shapeRenderer.draw(g._ctx,h._barPoints[j],k)}g=null}function d(j){var g=j.plugins.pyramidRenderer.highlightCanvas;g._ctx.clearRect(0,0,g._ctx.canvas.width,g._ctx.canvas.height);for(var h=0;h<j.series.length;h++){j.series[h]._highlightedPoint=null}j.plugins.pyramidRenderer.highlightedSeriesIndex=null;j.target.trigger("jqplotDataUnhighlight");g=null}function e(k,j,n,m,l){if(m){var i=[m.seriesIndex,m.pointIndex,m.data];var h=jQuery.Event("jqplotDataMouseOver");h.pageX=k.pageX;h.pageY=k.pageY;l.target.trigger(h,i);if(l.series[i[0]].highlightMouseOver&&!(i[0]==l.plugins.pyramidRenderer.highlightedSeriesIndex&&i[1]==l.series[i[0]]._highlightedPoint)){var g=jQuery.Event("jqplotDataHighlight");g.which=k.which;g.pageX=k.pageX;g.pageY=k.pageY;l.target.trigger(g,i);a(l,m.seriesIndex,m.pointIndex,m.points)}}else{if(m==null){d(l)}}}c.jqplot.preInitHooks.push(b)})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.js
deleted file mode 100644
index dc5c7554..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.js
+++ /dev/null
@@ -1,223 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4
- * Revision: 1121
- *
- * Copyright (c) 2009-2012 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."
- *
- */
-(function($) {
-
- /**
- * Class: $.jqplot.Trendline
- * Plugin which will automatically compute and draw trendlines for plotted data.
- */
- $.jqplot.Trendline = function() {
- // Group: Properties
-
- // prop: show
- // Wether or not to show the trend line.
- this.show = $.jqplot.config.enablePlugins;
- // prop: color
- // CSS color spec for the trend line.
- // By default this wil be the same color as the primary line.
- this.color = '#666666';
- // prop: renderer
- // 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.
- this.renderer = new $.jqplot.LineRenderer();
- // prop: rendererOptions
- // Options to pass to the line renderer.
- // By default, markers are not shown on trend lines.
- this.rendererOptions = {marker:{show:false}};
- // prop: label
- // Label for the trend line to use in the legend.
- this.label = '';
- // prop: type
- // Either 'exponential', 'exp', or 'linear'.
- this.type = 'linear';
- // prop: shadow
- // true or false, wether or not to show the shadow.
- this.shadow = true;
- // prop: markerRenderer
- // Renderer to use to draw markers on the line.
- // I think this is wrong.
- this.markerRenderer = {show:false};
- // prop: lineWidth
- // Width of the trend line.
- this.lineWidth = 1.5;
- // prop: shadowAngle
- // Angle of the shadow on the trend line.
- this.shadowAngle = 45;
- // prop: shadowOffset
- // pixel offset for each stroke of the shadow.
- this.shadowOffset = 1.0;
- // prop: shadowAlpha
- // Alpha transparency of the shadow.
- this.shadowAlpha = 0.07;
- // prop: shadowDepth
- // number of strokes to make of the shadow.
- this.shadowDepth = 3;
- this.isTrendline = true;
-
- };
-
- $.jqplot.postSeriesInitHooks.push(parseTrendLineOptions);
- $.jqplot.postDrawSeriesHooks.push(drawTrendline);
- $.jqplot.addLegendRowHooks.push(addTrendlineLegend);
-
- // called witin scope of the legend object
- // current series passed in
- // must return null or an object {label:label, color:color}
- function addTrendlineLegend(series) {
- var ret = null;
- if (series.trendline && series.trendline.show) {
- var lt = series.trendline.label.toString();
- if (lt) {
- ret = {label:lt, color:series.trendline.color};
- }
- }
- return ret;
- }
-
- // called within scope of a series
- function parseTrendLineOptions (target, data, seriesDefaults, options, plot) {
- if (this._type && (this._type === 'line' || this._type == 'bar')) {
- this.trendline = new $.jqplot.Trendline();
- options = options || {};
- $.extend(true, this.trendline, {color:this.color}, seriesDefaults.trendline, options.trendline);
- this.trendline.renderer.init.call(this.trendline, null);
- }
- }
-
- // called within scope of series object
- function drawTrendline(sctx, options) {
- // if we have options, merge trendline options in with precedence
- options = $.extend(true, {}, this.trendline, options);
-
- if (this.trendline && options.show) {
- var fit;
- // this.renderer.setGridData.call(this);
- var data = options.data || this.data;
- fit = fitData(data, this.trendline.type);
- var gridData = options.gridData || this.renderer.makeGridData.call(this, fit.data);
- this.trendline.renderer.draw.call(this.trendline, sctx, gridData, {showLine:true, shadow:this.trendline.shadow});
- }
- }
-
- function regression(x, y, typ) {
- var type = (typ == null) ? 'linear' : typ;
- var N = x.length;
- var slope;
- var intercept;
- var SX = 0;
- var SY = 0;
- var SXX = 0;
- var SXY = 0;
- var SYY = 0;
- var Y = [];
- var X = [];
-
- if (type == 'linear') {
- X = x;
- Y = y;
- }
- else if (type == 'exp' || type == 'exponential') {
- for ( var i=0; i<y.length; i++) {
- // ignore points <= 0, log undefined.
- if (y[i] <= 0) {
- N--;
- }
- else {
- X.push(x[i]);
- Y.push(Math.log(y[i]));
- }
- }
- }
-
- for ( var i = 0; i < N; i++) {
- SX = SX + X[i];
- SY = SY + Y[i];
- SXY = SXY + X[i]* Y[i];
- SXX = SXX + X[i]* X[i];
- SYY = SYY + Y[i]* Y[i];
- }
-
- slope = (N*SXY - SX*SY)/(N*SXX - SX*SX);
- intercept = (SY - slope*SX)/N;
-
- return [slope, intercept];
- }
-
- function linearRegression(X,Y) {
- var ret;
- ret = regression(X,Y,'linear');
- return [ret[0],ret[1]];
- }
-
- function expRegression(X,Y) {
- var ret;
- var x = X;
- var y = Y;
- ret = regression(x, y,'exp');
- var base = Math.exp(ret[0]);
- var coeff = Math.exp(ret[1]);
- return [base, coeff];
- }
-
- function fitData(data, typ) {
- var type = (typ == null) ? 'linear' : typ;
- var ret;
- var res;
- var x = [];
- var y = [];
- var ypred = [];
-
- for (i=0; i<data.length; i++){
- if (data[i] != null && data[i][0] != null && data[i][1] != null) {
- x.push(data[i][0]);
- y.push(data[i][1]);
- }
- }
-
- if (type == 'linear') {
- ret = linearRegression(x,y);
- for ( var i=0; i<x.length; i++){
- res = ret[0]*x[i] + ret[1];
- ypred.push([x[i], res]);
- }
- }
- else if (type == 'exp' || type == 'exponential') {
- ret = expRegression(x,y);
- for ( var i=0; i<x.length; i++){
- res = ret[1]*Math.pow(ret[0],x[i]);
- ypred.push([x[i], res]);
- }
- }
- return {data: ypred, slope: ret[0], intercept: ret[1]};
- }
-
-})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.min.js b/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.min.js
deleted file mode 100644
index 07105a4f..00000000
--- a/wqflask/wqflask/static/packages/jqplot/plugins/jqplot.trendline.min.js
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * jqPlot
- * Pure JavaScript plotting plugin using jQuery
- *
- * Version: 1.0.4r1121
- *
- * 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
- *
- *
- */
-(function(f){f.jqplot.Trendline=function(){this.show=f.jqplot.config.enablePlugins;this.color="#666666";this.renderer=new f.jqplot.LineRenderer();this.rendererOptions={marker:{show:false}};this.label="";this.type="linear";this.shadow=true;this.markerRenderer={show:false};this.lineWidth=1.5;this.shadowAngle=45;this.shadowOffset=1;this.shadowAlpha=0.07;this.shadowDepth=3;this.isTrendline=true};f.jqplot.postSeriesInitHooks.push(e);f.jqplot.postDrawSeriesHooks.push(g);f.jqplot.addLegendRowHooks.push(a);function a(k){var j=null;if(k.trendline&&k.trendline.show){var i=k.trendline.label.toString();if(i){j={label:i,color:k.trendline.color}}}return j}function e(m,k,j,i,l){if(this._type&&(this._type==="line"||this._type=="bar")){this.trendline=new f.jqplot.Trendline();i=i||{};f.extend(true,this.trendline,{color:this.color},j.trendline,i.trendline);this.trendline.renderer.init.call(this.trendline,null)}}function g(m,i){i=f.extend(true,{},this.trendline,i);if(this.trendline&&i.show){var k;var l=i.data||this.data;k=c(l,this.trendline.type);var j=i.gridData||this.renderer.makeGridData.call(this,k.data);this.trendline.renderer.draw.call(this.trendline,m,j,{showLine:true,shadow:this.trendline.shadow})}}function b(w,v,n){var u=(n==null)?"linear":n;var s=w.length;var t;var z;var o=0;var m=0;var r=0;var q=0;var l=0;var j=[];var k=[];if(u=="linear"){k=w;j=v}else{if(u=="exp"||u=="exponential"){for(var p=0;p<v.length;p++){if(v[p]<=0){s--}else{k.push(w[p]);j.push(Math.log(v[p]))}}}}for(var p=0;p<s;p++){o=o+k[p];m=m+j[p];q=q+k[p]*j[p];r=r+k[p]*k[p];l=l+j[p]*j[p]}t=(s*q-o*m)/(s*r-o*o);z=(m-t*o)/s;return[t,z]}function h(k,j){var i;i=b(k,j,"linear");return[i[0],i[1]]}function d(o,m){var k;var i=o;var n=m;k=b(i,n,"exp");var l=Math.exp(k[0]);var j=Math.exp(k[1]);return[l,j]}function c(l,j){var p=(j==null)?"linear":j;var n;var o;var r=[];var q=[];var m=[];for(k=0;k<l.length;k++){if(l[k]!=null&&l[k][0]!=null&&l[k][1]!=null){r.push(l[k][0]);q.push(l[k][1])}}if(p=="linear"){n=h(r,q);for(var k=0;k<r.length;k++){o=n[0]*r[k]+n[1];m.push([r[k],o])}}else{if(p=="exp"||p=="exponential"){n=d(r,q);for(var k=0;k<r.length;k++){o=n[1]*Math.pow(n[0],r[k]);m.push([r[k],o])}}}return{data:m,slope:n[0],intercept:n[1]}}})(jQuery); \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/jqplot/usage.txt b/wqflask/wqflask/static/packages/jqplot/usage.txt
deleted file mode 100644
index 01f82d27..00000000
--- a/wqflask/wqflask/static/packages/jqplot/usage.txt
+++ /dev/null
@@ -1,126 +0,0 @@
-Title: 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:
-
-(see images/basicline.png)
-
-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:
-
-(see images/basicoptions.png)
-
-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:
-
-(see images/basiclogaxis.png)
-
-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:
-
-(see images/basiclogoptions.png)
-
-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. \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/purescript_genome_browser/css/purescript-genetics-browser.css b/wqflask/wqflask/static/packages/purescript_genome_browser/css/purescript-genetics-browser.css
new file mode 100644
index 00000000..135292ac
--- /dev/null
+++ b/wqflask/wqflask/static/packages/purescript_genome_browser/css/purescript-genetics-browser.css
@@ -0,0 +1 @@
+body,html{max-width:100%;overflow-x:hidden}#browser{position:absolute;margin:0}#info-line{border:1px solid #aaa;padding:2px;position:absolute;right:0;top:1px;min-width:14%;font-size:9pt}#controls{visibility:hidden;position:absolute;top:4px;left:100px;z-index:1000}#controls>button{border:1px solid #aaa;border-radius:2px;padding-left:6px;padding-right:6px;height:23px;min-width:20px}button#scrollRight,button#zoomIn{margin-left:-2px;margin-right:4px}#infoBox{position:absolute;display:inline-block;z-index:10000;visibility:hidden;padding:5px;border:2px solid grey;border-radius:5%;background-color:#fff;min-height:100px;min-width:10px;max-width:80%;margin-top:9.7em;font-family:sans-serif}#infoBox>div{float:left;margin:1em 1.2em}#infoBox>div>p{margin:.1em} \ No newline at end of file
diff --git a/wqflask/wqflask/static/packages/purescript_genome_browser/js/purescript-genetics-browser.js b/wqflask/wqflask/static/packages/purescript_genome_browser/js/purescript-genetics-browser.js
new file mode 100644
index 00000000..26fd2d99
--- /dev/null
+++ b/wqflask/wqflask/static/packages/purescript_genome_browser/js/purescript-genetics-browser.js
@@ -0,0 +1,659 @@
+parcelRequire=function(e,r,t,n){var i,o="function"==typeof parcelRequire&&parcelRequire,u="function"==typeof require&&require;function f(t,n){if(!r[t]){if(!e[t]){var i="function"==typeof parcelRequire&&parcelRequire;if(!n&&i)return i(t,!0);if(o)return o(t,!0);if(u&&"string"==typeof t)return u(t);var c=new Error("Cannot find module '"+t+"'");throw c.code="MODULE_NOT_FOUND",c}p.resolve=function(r){return e[t][1][r]||r},p.cache={};var l=r[t]=new f.Module(t);e[t][0].call(l.exports,p,l,l.exports,this)}return r[t].exports;function p(e){return f(p.resolve(e))}}f.isParcelRequire=!0,f.Module=function(e){this.id=e,this.bundle=f,this.exports={}},f.modules=e,f.cache=r,f.parent=o,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]};for(var c=0;c<t.length;c++)try{f(t[c])}catch(e){i||(i=e)}if(t.length){var l=f(t[t.length-1]);"object"==typeof exports&&"undefined"!=typeof module?module.exports=l:"function"==typeof define&&define.amd?define(function(){return l}):n&&(this[n]=l)}if(parcelRequire=f,i)throw i;return f}({"DuPX":[function(require,module,exports) {
+"use strict";exports.buttonEvent=function(t){return function(n){return function(){document.getElementById(t).addEventListener("click",function(t){n()})}}},exports.keydownEvent=function(t){return function(t){return function(){window.addEventListener("keydown",function(n){t(n)()})}}},exports.resizeEvent=function(t){return function(){var n=null;window.addEventListener("resize",function(){n&&clearTimeout(n),n=setTimeout(function(){n=null,t(exports.windowInnerSize())()},250)},!1)}},exports.windowInnerSize=function(){return{width:window.innerWidth,height:window.innerHeight}},exports.setWindow=function(t){return function(n){return function(){window[t]=n}}},exports.setElementContents=function(t){return function(n){return function(){t.innerHTML=n}}};var t="debugDiv";exports.initDebugDiv=function(n){return function(){var e=document.getElementById("browser"),i=document.getElementById(t);return i||(i=document.createElement("div"),e.appendChild(i)),i.id=t,i.style.position="relative",i.style.left="0.0",i.style.top="0.0",i.style["border-radius"]="50%",i.style.width=2*n+"px",i.style.height=2*n+"px",i.style["z-index"]="100",i.style.backgroundColor="red",i.style["pointer-events"]="none",i.style.display="inline-block",i.style.visibility="hidden",i.dataset.radius=n,i}};var n=function(){var n=document.getElementById(t);return n||initDebugDiv(10)()};exports.setDebugDivVisibility=function(t){return function(){n().style.visibility=t}},exports.setDebugDivPoint=function(t){return function(){var e=n(),i=1|e.dataset.radius,r=t.x-i,o=t.y-2*i;e.style.left=r+"px",e.style.top=o+"px"}};
+},{}],"7nyB":[function(require,module,exports) {
+"use strict";exports.arrayApply=function(r){return function(n){for(var t=r.length,e=n.length,a=new Array(t*e),o=0,u=0;u<t;u++)for(var f=r[u],c=0;c<e;c++)a[o++]=f(n[c]);return a}};
+},{}],"/riR":[function(require,module,exports) {
+"use strict";var n=function(n){this.compose=n},o=new n(function(n){return function(o){return function(r){return n(o(r))}}}),r=function(n){return n.compose},t=function(n){return function(o){return function(t){return r(n)(t)(o)}}};module.exports={compose:r,Semigroupoid:n,composeFlipped:t,semigroupoidFn:o};
+},{}],"IAi2":[function(require,module,exports) {
+"use strict";var i=require("../Control.Semigroupoid/index.js"),t=function(i,t){this.Semigroupoid0=i,this.identity=t},n=function(i){return i.identity},e=new t(function(){return i.semigroupoidFn},function(i){return i});module.exports={Category:t,identity:n,categoryFn:e};
+},{"../Control.Semigroupoid/index.js":"/riR"}],"ObQr":[function(require,module,exports) {
+"use strict";var e=!0;module.exports={otherwise:e};
+},{}],"ImXJ":[function(require,module,exports) {
+"use strict";var n=require("../Data.Boolean/index.js"),r=function(n){return function(r){return function(t){return function(u){return n(r(t))(r(u))}}}},t=function(n){return function(r){return function(t){return n(t)(r)}}},u=function(n){return function(r){return n}},e=function(r){return function(t){return function(u){var e,o=t,i=!1;function c(t,e){if(t<=0)return i=!0,e;if(n.otherwise)return o=t-1|0,void(u=r(e));throw new Error("Failed pattern match at Data.Function (line 94, column 3 - line 96, column 37): "+[t.constructor.name,e.constructor.name])}for(;!i;)e=c(o,u);return e}}},o=function(n){return function(r){return r(n)}},i=function(n){return function(r){return n(r)}};module.exports={flip:t,const:u,apply:i,applyFlipped:o,applyN:e,on:r};
+},{"../Data.Boolean/index.js":"ObQr"}],"0GYo":[function(require,module,exports) {
+"use strict";exports.arrayMap=function(r){return function(n){for(var t=n.length,e=new Array(t),a=0;a<t;a++)e[a]=r(n[a]);return e}};
+},{}],"Nqls":[function(require,module,exports) {
+"use strict";exports.unit={};
+},{}],"qgjE":[function(require,module,exports) {
+"use strict";exports.showIntImpl=function(r){return r.toString()},exports.showNumberImpl=function(r){var t=r.toString();return isNaN(t+".0")?t:t+".0"},exports.showCharImpl=function(r){var t=r.charCodeAt(0);if(t<32||127===t){switch(r){case"":return"'\\a'";case"\b":return"'\\b'";case"\f":return"'\\f'";case"\n":return"'\\n'";case"\r":return"'\\r'";case"\t":return"'\\t'";case"\v":return"'\\v'"}return"'\\"+t.toString(10)+"'"}return"'"===r||"\\"===r?"'\\"+r+"'":"'"+r+"'"},exports.showStringImpl=function(r){var t=r.length;return'"'+r.replace(/[\0-\x1F\x7F"\\]/g,function(n,e){switch(n){case'"':case"\\":return"\\"+n;case"":return"\\a";case"\b":return"\\b";case"\f":return"\\f";case"\n":return"\\n";case"\r":return"\\r";case"\t":return"\\t";case"\v":return"\\v"}var u=e+1,c=u<t&&r[u]>="0"&&r[u]<="9"?"\\&":"";return"\\"+n.charCodeAt(0).toString(10)+c})+'"'},exports.showArrayImpl=function(r){return function(t){for(var n=[],e=0,u=t.length;e<u;e++)n[e]=r(t[e]);return"["+n.join(",")+"]"}},exports.cons=function(r){return function(t){return[r].concat(t)}},exports.join=function(r){return function(t){return t.join(r)}};
+},{}],"AvJb":[function(require,module,exports) {
+"use strict";exports.unsafeCoerce=function(e){return e};
+},{}],"4oJQ":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),n=function(){function e(){}return e.value=new e,e}(),r=function(e){this.reflectSymbol=e},t=function(r){return function(t){return e.unsafeCoerce(function(e){return t(e)})({reflectSymbol:function(e){return r}})(n.value)}},u=function(e){return e.reflectSymbol};module.exports={IsSymbol:r,reflectSymbol:u,reifySymbol:t,SProxy:n};
+},{"./foreign.js":"AvJb"}],"CHMS":[function(require,module,exports) {
+"use strict";exports.unsafeHas=function(n){return function(r){return{}.hasOwnProperty.call(r,n)}},exports.unsafeGet=function(n){return function(r){return r[n]}},exports.unsafeSet=function(n){return function(r){return function(t){var e={};for(var u in t)({}).hasOwnProperty.call(t,u)&&(e[u]=t[u]);return e[n]=r,e}}},exports.unsafeDelete=function(n){return function(r){var t={};for(var e in r)e!==n&&{}.hasOwnProperty.call(r,e)&&(t[e]=r[e]);return t}};
+},{}],"KG04":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js");module.exports={unsafeHas:e.unsafeHas,unsafeGet:e.unsafeGet,unsafeSet:e.unsafeSet,unsafeDelete:e.unsafeDelete};
+},{"./foreign.js":"CHMS"}],"XaXP":[function(require,module,exports) {
+"use strict";var e=function(){function e(){}return e.value=new e,e}();module.exports={RLProxy:e};
+},{}],"mFY7":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),e=require("../Data.Symbol/index.js"),r=require("../Record.Unsafe/index.js"),o=require("../Type.Data.RowList/index.js"),t=function(n){this.showRecordFields=n},u=function(n){this.show=n},i=new u(n.showStringImpl),s=new t(function(n){return function(n){return[]}}),w=function(n){return n.showRecordFields},c=function(e){return function(e){return new u(function(r){var t=w(e)(o.RLProxy.value)(r);return 0===t.length?"{}":n.join(" ")(["{",n.join(", ")(t),"}"])})}},h=new u(n.showNumberImpl),l=new u(n.showIntImpl),a=new u(n.showCharImpl),f=new u(function(n){if(n)return"true";if(!n)return"false";throw new Error("Failed pattern match at Data.Show (line 20, column 1 - line 22, column 23): "+[n.constructor.name])}),d=function(n){return n.show},m=function(e){return new u(n.showArrayImpl(d(e)))},R=function(u){return function(i){return function(s){return new t(function(t){return function(t){var c=w(i)(o.RLProxy.value)(t),h=e.reflectSymbol(u)(e.SProxy.value),l=r.unsafeGet(h)(t);return n.cons(n.join(": ")([h,d(s)(l)]))(c)}})}}};module.exports={Show:u,show:d,ShowRecordFields:t,showRecordFields:w,showBoolean:f,showInt:l,showNumber:h,showChar:a,showString:i,showArray:m,showRecord:c,showRecordFieldsNil:s,showRecordFieldsCons:R};
+},{"./foreign.js":"qgjE","../Data.Symbol/index.js":"4oJQ","../Record.Unsafe/index.js":"KG04","../Type.Data.RowList/index.js":"XaXP"}],"NhVk":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),i=require("../Data.Show/index.js"),n=new i.Show(function(e){return"unit"});module.exports={showUnit:n,unit:e.unit};
+},{"./foreign.js":"Nqls","../Data.Show/index.js":"mFY7"}],"+0AE":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Control.Semigroupoid/index.js"),t=require("../Data.Function/index.js"),u=require("../Data.Unit/index.js"),i=function(n){this.map=n},e=function(n){return n.map},o=function(n){return function(r){return function(t){return e(n)(t)(r)}}},c=function(n){return e(n)(t.const(u.unit))},f=function(n){return function(r){return function(u){return e(n)(t.const(u))(r)}}},a=function(n){return function(r){return e(n)(t.const(r))}},s=new i(r.compose(r.semigroupoidFn)),p=new i(n.arrayMap),d=function(n){return function(r){return function(t){return e(n)(function(n){return n(t)})(r)}}};module.exports={Functor:i,map:e,mapFlipped:o,void:c,voidRight:a,voidLeft:f,flap:d,functorFn:s,functorArray:p};
+},{"./foreign.js":"0GYo","../Control.Semigroupoid/index.js":"/riR","../Data.Function/index.js":"ImXJ","../Data.Unit/index.js":"NhVk"}],"QcLv":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Control.Category/index.js"),t=require("../Data.Function/index.js"),u=require("../Data.Functor/index.js"),o=function(n,r){this.Functor0=n,this.apply=r},e=new o(function(){return u.functorFn},function(n){return function(r){return function(t){return n(t)(r(t))}}}),i=new o(function(){return u.functorArray},n.arrayApply),c=function(n){return n.apply},f=function(n){return function(r){return function(o){return c(n)(u.map(n.Functor0())(t.const)(r))(o)}}},p=function(n){return function(o){return function(e){return c(n)(u.map(n.Functor0())(t.const(r.identity(r.categoryFn)))(o))(e)}}},a=function(n){return function(r){return function(t){return function(o){return c(n)(u.map(n.Functor0())(r)(t))(o)}}}},l=function(n){return function(r){return function(t){return function(o){return function(e){return c(n)(c(n)(u.map(n.Functor0())(r)(t))(o))(e)}}}}},y=function(n){return function(r){return function(t){return function(o){return function(e){return function(i){return c(n)(c(n)(c(n)(u.map(n.Functor0())(r)(t))(o))(e))(i)}}}}}},F=function(n){return function(r){return function(t){return function(o){return function(e){return function(i){return function(f){return c(n)(c(n)(c(n)(c(n)(u.map(n.Functor0())(r)(t))(o))(e))(i))(f)}}}}}}};module.exports={Apply:o,apply:c,applyFirst:f,applySecond:p,lift2:a,lift3:l,lift4:y,lift5:F,applyFn:e,applyArray:i};
+},{"./foreign.js":"7nyB","../Control.Category/index.js":"IAi2","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE"}],"qYya":[function(require,module,exports) {
+"use strict";var n=require("../Control.Apply/index.js"),r=require("../Data.Unit/index.js"),t=function(n,r){this.Apply0=n,this.pure=r},e=function(n){return n.pure},u=function(n){return function(t){return function(u){if(!t)return u;if(t)return e(n)(r.unit);throw new Error("Failed pattern match at Control.Applicative (line 62, column 1 - line 62, column 65): "+[t.constructor.name,u.constructor.name])}}},i=function(n){return function(t){return function(u){if(t)return u;if(!t)return e(n)(r.unit);throw new Error("Failed pattern match at Control.Applicative (line 57, column 1 - line 57, column 63): "+[t.constructor.name,u.constructor.name])}}},o=function(r){return function(t){return function(u){return n.apply(r.Apply0())(e(r)(t))(u)}}},c=new t(function(){return n.applyFn},function(n){return function(r){return n}}),p=new t(function(){return n.applyArray},function(n){return[n]});module.exports={Applicative:t,pure:e,liftA1:o,unless:u,when:i,applicativeFn:c,applicativeArray:p};
+},{"../Control.Apply/index.js":"QcLv","../Data.Unit/index.js":"NhVk"}],"S3W+":[function(require,module,exports) {
+"use strict";exports.arrayBind=function(r){return function(t){for(var n=[],e=0,o=r.length;e<o;e++)Array.prototype.push.apply(n,t(r[e]));return n}};
+},{}],"7VcT":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Category/index.js"),i=require("../Data.Function/index.js"),u=function(n){this.discard=n},e=function(n,r){this.Apply0=n,this.bind=r},o=function(n){return n.discard},c=new e(function(){return r.applyFn},function(n){return function(r){return function(t){return r(n(t))(t)}}}),f=new e(function(){return r.applyArray},n.arrayBind),d=function(n){return n.bind},s=function(n){return i.flip(d(n))},a=function(n){return function(r){return function(t){return function(i){return s(n)(r)(t(i))}}}},p=function(n){return function(r){return function(t){return function(i){return d(n)(r(i))(t)}}}},l=new u(function(n){return d(n)}),y=function(n){return function(r){return function(t){return function(i){return d(n)(r)(function(n){return n?t:i})}}}},b=function(n){return function(r){return d(n)(r)(t.identity(t.categoryFn))}};module.exports={Bind:e,bind:d,bindFlipped:s,Discard:u,discard:o,join:b,composeKleisli:p,composeKleisliFlipped:a,ifM:y,bindFn:c,bindArray:f,discardUnit:l};
+},{"./foreign.js":"S3W+","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Data.Function/index.js":"ImXJ"}],"phTL":[function(require,module,exports) {
+"use strict";exports.concatString=function(n){return function(t){return n+t}},exports.concatArray=function(n){return function(t){return 0===n.length?t:0===t.length?n:n.concat(t)}};
+},{}],"bncE":[function(require,module,exports) {
+"use strict";var r=require("../Data.Show/index.js"),n=function(r){return r},o=function(r){return function(r){var n;for(;;)n=void(r=r);return n}(r)},e=new r.Show(o);module.exports={absurd:o,showVoid:e};
+},{"../Data.Show/index.js":"mFY7"}],"EsAJ":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Data.Symbol/index.js"),e=require("../Data.Unit/index.js"),u=require("../Data.Void/index.js"),t=require("../Record.Unsafe/index.js"),i=require("../Type.Data.RowList/index.js"),o=function(n){this.appendRecord=n},c=function(n){this.append=n},f=new c(function(n){return u.absurd}),a=new c(function(n){return function(n){return e.unit}}),s=new c(n.concatString),p=new o(function(n){return function(n){return function(n){return{}}}}),d=new c(n.concatArray),g=function(n){return n.appendRecord},m=function(n){return function(n){return new c(g(n)(i.RLProxy.value))}},R=function(n){return n.append},w=function(n){return new c(function(r){return function(e){return function(u){return R(n)(r(u))(e(u))}}})},x=function(n){return function(e){return function(e){return function(u){return new o(function(o){return function(o){return function(c){var f=g(e)(i.RLProxy.value)(o)(c),a=r.reflectSymbol(n)(r.SProxy.value),s=t.unsafeSet(a),p=t.unsafeGet(a);return s(R(u)(p(o))(p(c)))(f)}}})}}}};module.exports={Semigroup:c,append:R,SemigroupRecord:o,appendRecord:g,semigroupString:s,semigroupUnit:a,semigroupVoid:f,semigroupFn:w,semigroupArray:d,semigroupRecord:m,semigroupRecordNil:p,semigroupRecordCons:x};
+},{"./foreign.js":"phTL","../Data.Symbol/index.js":"4oJQ","../Data.Unit/index.js":"NhVk","../Data.Void/index.js":"bncE","../Record.Unsafe/index.js":"KG04","../Type.Data.RowList/index.js":"XaXP"}],"lN+m":[function(require,module,exports) {
+"use strict";var r=require("../Data.Functor/index.js"),t=require("../Data.Semigroup/index.js"),e=function(r,t){this.Functor0=r,this.alt=t},n=new e(function(){return r.functorArray},t.append(t.semigroupArray)),u=function(r){return r.alt};module.exports={Alt:e,alt:u,altArray:n};
+},{"../Data.Functor/index.js":"+0AE","../Data.Semigroup/index.js":"EsAJ"}],"oMBg":[function(require,module,exports) {
+"use strict";var t=require("../Control.Alt/index.js"),r=function(t,r){this.Alt0=t,this.empty=r},e=new r(function(){return t.altArray},[]),n=function(t){return t.empty};module.exports={Plus:r,empty:n,plusArray:e};
+},{"../Control.Alt/index.js":"lN+m"}],"aHia":[function(require,module,exports) {
+"use strict";var r=require("../Control.Applicative/index.js"),e=require("../Control.Plus/index.js"),t=function(r,e){this.Applicative0=r,this.Plus1=e},i=new t(function(){return r.applicativeArray},function(){return e.plusArray});module.exports={Alternative:t,alternativeArray:i};
+},{"../Control.Applicative/index.js":"qYya","../Control.Plus/index.js":"oMBg"}],"U/Ix":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),i=require("../Control.Bind/index.js"),r=function(n,i){this.Applicative0=n,this.Bind1=i},t=function(r){return function(t){return function(u){return i.bind(r.Bind1())(t)(function(i){return n.when(r.Applicative0())(i)(u)})}}},u=function(r){return function(t){return function(u){return i.bind(r.Bind1())(t)(function(i){return n.unless(r.Applicative0())(i)(u)})}}},e=new r(function(){return n.applicativeFn},function(){return i.bindFn}),c=new r(function(){return n.applicativeArray},function(){return i.bindArray}),o=function(r){return function(t){return function(u){return i.bind(r.Bind1())(u)(function(i){return n.pure(r.Applicative0())(t(i))})}}},f=function(r){return function(t){return function(u){return i.bind(r.Bind1())(t)(function(t){return i.bind(r.Bind1())(u)(function(i){return n.pure(r.Applicative0())(t(i))})})}}};module.exports={Monad:r,liftM1:o,ap:f,whenM:t,unlessM:u,monadFn:e,monadArray:c};
+},{"../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT"}],"IpNh":[function(require,module,exports) {
+"use strict";var t=function(t,n){this.Monad0=t,this.callCC=n},n=function(t){return t.callCC};module.exports={MonadCont:t,callCC:n};
+},{}],"YFBA":[function(require,module,exports) {
+"use strict";exports.arrayExtend=function(n){return function(r){return r.map(function(r,t,e){return n(e.slice(t))})}};
+},{}],"JIoJ":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Control.Category/index.js"),t=require("../Data.Functor/index.js"),e=require("../Data.Semigroup/index.js"),u=function(n,r){this.Functor0=n,this.extend=r},i=function(n){return new u(function(){return t.functorFn},function(r){return function(t){return function(u){return r(function(r){return t(e.append(n)(u)(r))})}}})},o=new u(function(){return t.functorArray},n.arrayExtend),c=function(n){return n.extend},f=function(n){return function(r){return function(t){return c(n)(t)(r)}}},d=function(n){return c(n)(r.identity(r.categoryFn))},a=function(n){return function(r){return function(t){return function(e){return r(c(n)(t)(e))}}}},s=function(n){return function(r){return function(t){return function(e){return t(c(n)(r)(e))}}}};module.exports={Extend:u,extend:c,extendFlipped:f,composeCoKleisli:s,composeCoKleisliFlipped:a,duplicate:d,extendFn:i,extendArray:o};
+},{"./foreign.js":"YFBA","../Control.Category/index.js":"IAi2","../Data.Functor/index.js":"+0AE","../Data.Semigroup/index.js":"EsAJ"}],"kY6E":[function(require,module,exports) {
+"use strict";exports.foldrArray=function(r){return function(n){return function(t){for(var u=n,o=t.length-1;o>=0;o--)u=r(t[o])(u);return u}}},exports.foldlArray=function(r){return function(n){return function(t){for(var u=n,o=t.length,e=0;e<o;e++)u=r(u)(t[e]);return u}}};
+},{}],"h7nC":[function(require,module,exports) {
+"use strict";var r=function(r){return function(e){return r===e}};exports.eqBooleanImpl=r,exports.eqIntImpl=r,exports.eqNumberImpl=r,exports.eqCharImpl=r,exports.eqStringImpl=r,exports.eqArrayImpl=function(r){return function(e){return function(t){if(e===t)return!0;if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(!r(e[n])(t[n]))return!1;return!0}}};
+},{}],"Pq4F":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),e=require("../Data.Symbol/index.js"),r=require("../Record.Unsafe/index.js"),t=require("../Type.Data.RowList/index.js"),u=function(n){this.eqRecord=n},o=function(n){this.eq1=n},i=function(n){this.eq=n},c=new i(function(n){return function(n){return!0}}),q=new i(function(n){return function(n){return!0}}),f=new i(n.eqStringImpl),a=new u(function(n){return function(n){return function(n){return!0}}}),l=function(n){return n.eqRecord},w=function(n){return function(n){return new i(l(n)(t.RLProxy.value))}},s=new i(n.eqNumberImpl),m=new i(n.eqIntImpl),R=new i(n.eqCharImpl),d=new i(n.eqBooleanImpl),y=function(n){return n.eq1},p=function(n){return n.eq},I=function(e){return new i(n.eqArrayImpl(p(e)))},x=new o(function(n){return p(I(n))}),h=function(n){return function(o){return function(o){return function(i){return new u(function(u){return function(u){return function(c){var q=l(n)(t.RLProxy.value)(u)(c),f=e.reflectSymbol(o)(e.SProxy.value),a=r.unsafeGet(f);return p(i)(a(u))(a(c))&&q}}})}}}},v=function(n){return function(e){return function(r){return p(d)(p(n)(e)(r))(!1)}}},E=function(n){return function(e){return function(r){return function(t){return p(d)(y(n)(e)(r)(t))(!1)}}}};module.exports={Eq:i,eq:p,notEq:v,Eq1:o,eq1:y,notEq1:E,EqRecord:u,eqRecord:l,eqBoolean:d,eqInt:m,eqNumber:s,eqChar:R,eqString:f,eqUnit:q,eqVoid:c,eqArray:I,eqRec:w,eq1Array:x,eqRowNil:a,eqRowCons:h};
+},{"./foreign.js":"h7nC","../Data.Symbol/index.js":"4oJQ","../Record.Unsafe/index.js":"KG04","../Type.Data.RowList/index.js":"XaXP"}],"7fWM":[function(require,module,exports) {
+"use strict";exports.boolConj=function(n){return function(o){return n&&o}},exports.boolDisj=function(n){return function(o){return n||o}},exports.boolNot=function(n){return!n};
+},{}],"ukdD":[function(require,module,exports) {
+"use strict";var e=function(){function e(){}return e.value=new e,e}();module.exports={RProxy:e};
+},{}],"paZe":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Data.Symbol/index.js"),t=require("../Data.Unit/index.js"),e=require("../Record.Unsafe/index.js"),u=require("../Type.Data.Row/index.js"),o=require("../Type.Data.RowList/index.js"),i=function(n,r,t,e,u,o){this.conjRecord=n,this.disjRecord=r,this.ffRecord=t,this.impliesRecord=e,this.notRecord=u,this.ttRecord=o},c=function(n,r,t,e,u,o){this.conj=n,this.disj=r,this.ff=t,this.implies=e,this.not=u,this.tt=o},f=function(n){return n.ttRecord},a=function(n){return n.tt},l=function(n){return n.notRecord},s=function(n){return n.not},R=function(n){return n.impliesRecord},y=function(n){return n.implies},d=new c(function(n){return function(n){return t.unit}},function(n){return function(n){return t.unit}},t.unit,function(n){return function(n){return t.unit}},function(n){return t.unit},t.unit),v=new i(function(n){return function(n){return function(n){return{}}}},function(n){return function(n){return function(n){return{}}}},function(n){return function(n){return{}}},function(n){return function(n){return function(n){return{}}}},function(n){return function(n){return{}}},function(n){return function(n){return{}}}),x=function(n){return n.ffRecord},j=function(n){return n.ff},P=function(n){return n.disjRecord},S=function(n){return n.disj},b=new c(n.boolConj,n.boolDisj,!1,function(n){return function(r){return S(b)(s(b)(n))(r)}},n.boolNot,!0),h=function(n){return n.conjRecord},g=function(n){return function(n){return new c(h(n)(o.RLProxy.value),P(n)(o.RLProxy.value),x(n)(o.RLProxy.value)(u.RProxy.value),R(n)(o.RLProxy.value),l(n)(o.RLProxy.value),f(n)(o.RLProxy.value)(u.RProxy.value))}},m=function(n){return n.conj},L=function(n){return new c(function(r){return function(t){return function(e){return m(n)(r(e))(t(e))}}},function(r){return function(t){return function(e){return S(n)(r(e))(t(e))}}},function(r){return j(n)},function(r){return function(t){return function(e){return y(n)(r(e))(t(e))}}},function(r){return function(t){return s(n)(r(t))}},function(r){return a(n)})},p=function(n){return function(t){return function(t){return function(u){return new i(function(i){return function(i){return function(c){var f=h(t)(o.RLProxy.value)(i)(c),a=r.reflectSymbol(n)(r.SProxy.value),l=e.unsafeSet(a),s=e.unsafeGet(a);return l(m(u)(s(i))(s(c)))(f)}}},function(i){return function(i){return function(c){var f=P(t)(o.RLProxy.value)(i)(c),a=r.reflectSymbol(n)(r.SProxy.value),l=e.unsafeSet(a),s=e.unsafeGet(a);return l(S(u)(s(i))(s(c)))(f)}}},function(i){return function(i){var c=x(t)(o.RLProxy.value)(i),f=r.reflectSymbol(n)(r.SProxy.value);return e.unsafeSet(f)(j(u))(c)}},function(i){return function(i){return function(c){var f=R(t)(o.RLProxy.value)(i)(c),a=r.reflectSymbol(n)(r.SProxy.value),l=e.unsafeSet(a),s=e.unsafeGet(a);return l(y(u)(s(i))(s(c)))(f)}}},function(i){return function(i){var c=l(t)(o.RLProxy.value)(i),f=r.reflectSymbol(n)(r.SProxy.value),a=e.unsafeSet(f),R=e.unsafeGet(f);return a(s(u)(R(i)))(c)}},function(i){return function(i){var c=f(t)(o.RLProxy.value)(i),l=r.reflectSymbol(n)(r.SProxy.value);return e.unsafeSet(l)(a(u))(c)}})}}}};module.exports={HeytingAlgebra:c,tt:a,ff:j,implies:y,conj:m,disj:S,not:s,HeytingAlgebraRecord:i,ffRecord:x,ttRecord:f,impliesRecord:R,conjRecord:h,disjRecord:P,notRecord:l,heytingAlgebraBoolean:b,heytingAlgebraUnit:d,heytingAlgebraFunction:L,heytingAlgebraRecord:g,heytingAlgebraRecordNil:v,heytingAlgebraRecordCons:p};
+},{"./foreign.js":"7fWM","../Data.Symbol/index.js":"4oJQ","../Data.Unit/index.js":"NhVk","../Record.Unsafe/index.js":"KG04","../Type.Data.Row/index.js":"ukdD","../Type.Data.RowList/index.js":"XaXP"}],"lD5R":[function(require,module,exports) {
+"use strict";var r=require("../Control.Alternative/index.js"),e=require("../Control.Applicative/index.js"),n=require("../Control.Monad/index.js"),t=require("../Control.Plus/index.js"),i=require("../Data.Unit/index.js"),o=function(r,e){this.Alternative1=r,this.Monad0=e},a=new o(function(){return r.alternativeArray},function(){return n.monadArray}),u=function(r){return function(n){if(n)return e.pure(r.Alternative1().Applicative0())(i.unit);if(!n)return t.empty(r.Alternative1().Plus1());throw new Error("Failed pattern match at Control.MonadZero (line 54, column 1 - line 54, column 52): "+[n.constructor.name])}};module.exports={MonadZero:o,guard:u,monadZeroArray:a};
+},{"../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Monad/index.js":"U/Ix","../Control.Plus/index.js":"oMBg","../Data.Unit/index.js":"NhVk"}],"0C+G":[function(require,module,exports) {
+"use strict";exports.topInt=2147483647,exports.bottomInt=-2147483648,exports.topChar=String.fromCharCode(65535),exports.bottomChar=String.fromCharCode(0),exports.topNumber=Number.POSITIVE_INFINITY,exports.bottomNumber=Number.NEGATIVE_INFINITY;
+},{}],"m7Aq":[function(require,module,exports) {
+"use strict";var r=function(r){return function(n){return function(t){return function(o){return function(e){return o<e?r:o===e?n:t}}}}};exports.ordBooleanImpl=r,exports.ordIntImpl=r,exports.ordNumberImpl=r,exports.ordStringImpl=r,exports.ordCharImpl=r,exports.ordArrayImpl=function(r){return function(n){return function(t){for(var o=0,e=n.length,u=t.length;o<e&&o<u;){var p=n[o],i=t[o],f=r(p)(i);if(0!==f)return f;o++}return e===u?0:e>u?-1:1}}};
+},{}],"5Eun":[function(require,module,exports) {
+"use strict";var n=require("../Data.Eq/index.js"),e=require("../Data.Semigroup/index.js"),r=require("../Data.Show/index.js"),t=function(){function n(){}return n.value=new n,n}(),i=function(){function n(){}return n.value=new n,n}(),o=function(){function n(){}return n.value=new n,n}(),u=new r.Show(function(n){if(n instanceof t)return"LT";if(n instanceof i)return"GT";if(n instanceof o)return"EQ";throw new Error("Failed pattern match at Data.Ordering (line 26, column 1 - line 29, column 17): "+[n.constructor.name])}),a=new e.Semigroup(function(n){return function(e){if(n instanceof t)return t.value;if(n instanceof i)return i.value;if(n instanceof o)return e;throw new Error("Failed pattern match at Data.Ordering (line 21, column 1 - line 24, column 18): "+[n.constructor.name,e.constructor.name])}}),c=function(n){if(n instanceof i)return t.value;if(n instanceof o)return o.value;if(n instanceof t)return i.value;throw new Error("Failed pattern match at Data.Ordering (line 33, column 1 - line 33, column 31): "+[n.constructor.name])},f=new n.Eq(function(n){return function(e){return n instanceof t&&e instanceof t||(n instanceof i&&e instanceof i||n instanceof o&&e instanceof o)}});module.exports={LT:t,GT:i,EQ:o,invert:c,eqOrdering:f,semigroupOrdering:a,showOrdering:u};
+},{"../Data.Eq/index.js":"Pq4F","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"+BUG":[function(require,module,exports) {
+"use strict";exports.intSub=function(n){return function(t){return n-t|0}},exports.numSub=function(n){return function(t){return n-t}};
+},{}],"Vm8y":[function(require,module,exports) {
+"use strict";exports.intAdd=function(n){return function(t){return n+t|0}},exports.intMul=function(n){return function(t){return n*t|0}},exports.numAdd=function(n){return function(t){return n+t}},exports.numMul=function(n){return function(t){return n*t}};
+},{}],"11NF":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Data.Symbol/index.js"),e=require("../Data.Unit/index.js"),u=require("../Record.Unsafe/index.js"),t=require("../Type.Data.Row/index.js"),o=require("../Type.Data.RowList/index.js"),i=function(n,r,e,u){this.addRecord=n,this.mulRecord=r,this.oneRecord=e,this.zeroRecord=u},c=function(n,r,e,u){this.add=n,this.mul=r,this.one=e,this.zero=u},f=function(n){return n.zeroRecord},a=function(n){return n.zero},d=new c(function(n){return function(n){return e.unit}},function(n){return function(n){return e.unit}},e.unit,e.unit),l=new i(function(n){return function(n){return function(n){return{}}}},function(n){return function(n){return function(n){return{}}}},function(n){return function(n){return{}}},function(n){return function(n){return{}}}),s=new c(n.numAdd,n.numMul,1,0),R=new c(n.intAdd,n.intMul,1,0),m=function(n){return n.oneRecord},y=function(n){return n.one},x=function(n){return n.mulRecord},v=function(n){return n.mul},P=function(n){return n.addRecord},S=function(n){return function(n){return new c(P(n)(o.RLProxy.value),x(n)(o.RLProxy.value),m(n)(o.RLProxy.value)(t.RProxy.value),f(n)(o.RLProxy.value)(t.RProxy.value))}},g=function(n){return n.add},w=function(n){return new c(function(r){return function(e){return function(u){return g(n)(r(u))(e(u))}}},function(r){return function(e){return function(u){return v(n)(r(u))(e(u))}}},function(r){return y(n)},function(r){return a(n)})},L=function(n){return function(e){return function(e){return function(c){return new i(function(t){return function(t){return function(i){var f=P(e)(o.RLProxy.value)(t)(i),a=r.reflectSymbol(n)(r.SProxy.value),d=u.unsafeSet(a),l=u.unsafeGet(a);return d(g(c)(l(t))(l(i)))(f)}}},function(t){return function(t){return function(i){var f=x(e)(o.RLProxy.value)(t)(i),a=r.reflectSymbol(n)(r.SProxy.value),d=u.unsafeSet(a),l=u.unsafeGet(a);return d(v(c)(l(t))(l(i)))(f)}}},function(i){return function(i){var f=m(e)(o.RLProxy.value)(t.RProxy.value),a=r.reflectSymbol(n)(r.SProxy.value);return u.unsafeSet(a)(y(c))(f)}},function(i){return function(i){var d=f(e)(o.RLProxy.value)(t.RProxy.value),l=r.reflectSymbol(n)(r.SProxy.value);return u.unsafeSet(l)(a(c))(d)}})}}}};module.exports={Semiring:c,add:g,zero:a,mul:v,one:y,SemiringRecord:i,addRecord:P,mulRecord:x,oneRecord:m,zeroRecord:f,semiringInt:R,semiringNumber:s,semiringFn:w,semiringUnit:d,semiringRecord:S,semiringRecordNil:l,semiringRecordCons:L};
+},{"./foreign.js":"Vm8y","../Data.Symbol/index.js":"4oJQ","../Data.Unit/index.js":"NhVk","../Record.Unsafe/index.js":"KG04","../Type.Data.Row/index.js":"ukdD","../Type.Data.RowList/index.js":"XaXP"}],"E2qH":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Data.Semiring/index.js"),e=require("../Data.Symbol/index.js"),i=require("../Data.Unit/index.js"),u=require("../Record.Unsafe/index.js"),t=require("../Type.Data.RowList/index.js"),o=function(n,r){this.SemiringRecord0=n,this.subRecord=r},c=function(n,r){this.Semiring0=n,this.sub=r},f=function(n){return n.subRecord},s=function(n){return n.sub},g=new c(function(){return r.semiringUnit},function(n){return function(n){return i.unit}}),m=new o(function(){return r.semiringRecordNil},function(n){return function(n){return function(n){return{}}}}),d=function(n){return function(i){return function(c){return function(g){return new o(function(){return r.semiringRecordCons(n)(i)(c.SemiringRecord0())(g.Semiring0())},function(r){return function(r){return function(i){var o=f(c)(t.RLProxy.value)(r)(i),m=e.reflectSymbol(n)(e.SProxy.value),d=u.unsafeSet(m),R=u.unsafeGet(m);return d(s(g)(R(r))(R(i)))(o)}}})}}}},R=function(n){return function(e){return new c(function(){return r.semiringRecord(n)(e.SemiringRecord0())},f(e)(t.RLProxy.value))}},a=new c(function(){return r.semiringNumber},n.numSub),S=new c(function(){return r.semiringInt},n.intSub),b=function(n){return new c(function(){return r.semiringFn(n.Semiring0())},function(r){return function(e){return function(i){return s(n)(r(i))(e(i))}}})},l=function(n){return function(e){return s(n)(r.zero(n.Semiring0()))(e)}};module.exports={Ring:c,sub:s,negate:l,RingRecord:o,subRecord:f,ringInt:S,ringNumber:a,ringUnit:g,ringFn:b,ringRecord:R,ringRecordNil:m,ringRecordCons:d};
+},{"./foreign.js":"+BUG","../Data.Semiring/index.js":"11NF","../Data.Symbol/index.js":"4oJQ","../Data.Unit/index.js":"NhVk","../Record.Unsafe/index.js":"KG04","../Type.Data.RowList/index.js":"XaXP"}],"r4Vb":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Data.Eq/index.js"),e=require("../Data.Ordering/index.js"),t=require("../Data.Ring/index.js"),u=require("../Data.Semiring/index.js"),o=require("../Data.Symbol/index.js"),i=require("../Record.Unsafe/index.js"),c=require("../Type.Data.RowList/index.js"),a=function(n,r){this.EqRecord0=n,this.compareRecord=r},f=function(n,r){this.Eq10=n,this.compare1=r},l=function(n,r){this.Eq0=n,this.compare=r},s=new l(function(){return r.eqVoid},function(n){return function(n){return e.EQ.value}}),d=new l(function(){return r.eqUnit},function(n){return function(n){return e.EQ.value}}),m=new l(function(){return r.eqString},n.ordStringImpl(e.LT.value)(e.EQ.value)(e.GT.value)),T=new a(function(){return r.eqRowNil},function(n){return function(n){return function(n){return e.EQ.value}}}),v=new l(function(){return e.eqOrdering},function(n){return function(r){if(n instanceof e.LT&&r instanceof e.LT)return e.EQ.value;if(n instanceof e.EQ&&r instanceof e.EQ)return e.EQ.value;if(n instanceof e.GT&&r instanceof e.GT)return e.EQ.value;if(n instanceof e.LT)return e.LT.value;if(n instanceof e.EQ&&r instanceof e.LT)return e.GT.value;if(n instanceof e.EQ&&r instanceof e.GT)return e.LT.value;if(n instanceof e.GT)return e.GT.value;throw new Error("Failed pattern match at Data.Ord (line 112, column 1 - line 119, column 21): "+[n.constructor.name,r.constructor.name])}}),E=new l(function(){return r.eqNumber},n.ordNumberImpl(e.LT.value)(e.EQ.value)(e.GT.value)),q=new l(function(){return r.eqInt},n.ordIntImpl(e.LT.value)(e.EQ.value)(e.GT.value)),w=new l(function(){return r.eqChar},n.ordCharImpl(e.LT.value)(e.EQ.value)(e.GT.value)),p=new l(function(){return r.eqBoolean},n.ordBooleanImpl(e.LT.value)(e.EQ.value)(e.GT.value)),h=function(n){return n.compareRecord},g=function(n){return function(e){return new l(function(){return r.eqRec(n)(e.EqRecord0())},h(e)(c.RLProxy.value))}},L=function(n){return n.compare1},Q=function(n){return n.compare},G=function(n){return function(r){return function(e){return function(t){return Q(n)(r(e))(r(t))}}}},R=function(n){return function(r){return function(t){return Q(n)(r)(t)instanceof e.GT}}},O=function(n){return function(r){return function(t){return!(Q(n)(r)(t)instanceof e.LT)}}},x=function(n){return function(r){return function(e){return O(n)(e)(u.zero(r.Semiring0()))?u.one(r.Semiring0()):t.negate(r)(u.one(r.Semiring0()))}}},y=function(n){return function(r){return function(t){return Q(n)(r)(t)instanceof e.LT}}},S=function(n){return function(r){return function(t){return!(Q(n)(r)(t)instanceof e.GT)}}},D=function(n){return function(r){return function(t){var u=Q(n)(r)(t);if(u instanceof e.LT)return t;if(u instanceof e.EQ)return r;if(u instanceof e.GT)return r;throw new Error("Failed pattern match at Data.Ord (line 167, column 3 - line 170, column 12): "+[u.constructor.name])}}},I=function(n){return function(r){return function(t){var u=Q(n)(r)(t);if(u instanceof e.LT)return r;if(u instanceof e.EQ)return r;if(u instanceof e.GT)return t;throw new Error("Failed pattern match at Data.Ord (line 158, column 3 - line 161, column 12): "+[u.constructor.name])}}},j=function(t){return new l(function(){return r.eqArray(t.Eq0())},(u=function(n){return function(r){var u=Q(t)(n)(r);if(u instanceof e.EQ)return 0;if(u instanceof e.LT)return 1;if(u instanceof e.GT)return-1;throw new Error("Failed pattern match at Data.Ord (line 65, column 7 - line 68, column 17): "+[u.constructor.name])}},function(r){return function(e){return Q(q)(0)(n.ordArrayImpl(u)(r)(e))}}));var u},b=new f(function(){return r.eq1Array},function(n){return Q(j(n))}),A=function(n){return function(t){return function(u){return function(f){return new a(function(){return r.eqRowCons(n.EqRecord0())(t)(u)(f.Eq0())},function(t){return function(t){return function(a){var l=o.reflectSymbol(u)(o.SProxy.value),s=Q(f)(i.unsafeGet(l)(t))(i.unsafeGet(l)(a));return r.notEq(e.eqOrdering)(s)(e.EQ.value)?s:h(n)(c.RLProxy.value)(t)(a)}}})}}}},C=function(n){return function(r){return function(e){return function(t){return I(n)(e)(D(n)(r)(t))}}}},N=function(n){return function(r){return function(e){return function(t){return!y(n)(t)(r)&&!R(n)(t)(e)}}}},F=function(n){return function(r){return function(e){return O(n)(e)(u.zero(r.Semiring0()))?e:t.negate(r)(e)}}};module.exports={Ord:l,compare:Q,Ord1:f,compare1:L,lessThan:y,lessThanOrEq:S,greaterThan:R,greaterThanOrEq:O,comparing:G,min:I,max:D,clamp:C,between:N,abs:F,signum:x,OrdRecord:a,compareRecord:h,ordBoolean:p,ordInt:q,ordNumber:E,ordString:m,ordChar:w,ordUnit:d,ordVoid:s,ordArray:j,ordOrdering:v,ord1Array:b,ordRecordNil:T,ordRecordCons:A,ordRecord:g};
+},{"./foreign.js":"m7Aq","../Data.Eq/index.js":"Pq4F","../Data.Ordering/index.js":"5Eun","../Data.Ring/index.js":"E2qH","../Data.Semiring/index.js":"11NF","../Data.Symbol/index.js":"4oJQ","../Record.Unsafe/index.js":"KG04","../Type.Data.RowList/index.js":"XaXP"}],"kcUU":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),t=require("../Data.Ord/index.js"),r=require("../Data.Ordering/index.js"),e=require("../Data.Unit/index.js"),o=function(n,t,r){this.Ord0=n,this.bottom=t,this.top=r},u=function(n){return n.top},d=new o(function(){return t.ordUnit},e.unit,e.unit),i=new o(function(){return t.ordOrdering},r.LT.value,r.GT.value),b=new o(function(){return t.ordNumber},n.bottomNumber,n.topNumber),a=new o(function(){return t.ordInt},n.bottomInt,n.topInt),m=new o(function(){return t.ordChar},n.bottomChar,n.topChar),c=new o(function(){return t.ordBoolean},!1,!0),f=function(n){return n.bottom};module.exports={Bounded:o,bottom:f,top:u,boundedBoolean:c,boundedInt:a,boundedChar:m,boundedOrdering:i,boundedUnit:d,boundedNumber:b};
+},{"./foreign.js":"0C+G","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Unit/index.js":"NhVk"}],"AXkC":[function(require,module,exports) {
+"use strict";var n=require("../Data.Functor/index.js"),r=function(n){this.imap=n},t=new r(function(n){return function(r){return function(r){return n(r)}}}),i=new r(function(n){return function(r){return function(t){return function(i){return n(t(r(i)))}}}}),u=new r(function(n){return function(r){return function(r){return n(r)}}}),e=new r(function(n){return function(r){return function(r){return n(r)}}}),o=new r(function(n){return function(r){return function(r){return n(r)}}}),a=new r(function(n){return function(r){return function(r){return n(r)}}}),c=function(r){return function(t){return function(i){return n.map(r)(t)}}},f=new r(c(n.functorArray)),v=new r(c(n.functorFn)),w=function(n){return n.imap};module.exports={imap:w,Invariant:r,imapF:c,invariantFn:v,invariantArray:f,invariantAdditive:a,invariantConj:o,invariantDisj:e,invariantDual:u,invariantEndo:i,invariantMultiplicative:t};
+},{"../Data.Functor/index.js":"+0AE"}],"8EBw":[function(require,module,exports) {
+"use strict";exports.intDegree=function(t){return Math.min(Math.abs(t),2147483647)},exports.intDiv=function(t){return function(n){return 0===n?0:n>0?Math.floor(t/n):-Math.floor(t/-n)}},exports.intMod=function(t){return function(n){if(0===n)return 0;var r=Math.abs(n);return(t%r+r)%r}},exports.numDiv=function(t){return function(n){return t/n}};
+},{}],"60TQ":[function(require,module,exports) {
+"use strict";var n=require("../Data.Ring/index.js"),t=function(n){this.RingRecord0=n},i=function(n){this.Ring0=n},r=new i(function(){return n.ringUnit}),e=new t(function(){return n.ringRecordNil}),u=function(i){return function(r){return function(e){return function(u){return new t(function(){return n.ringRecordCons(i)(r)(e.RingRecord0())(u.Ring0())})}}}},o=function(t){return function(r){return new i(function(){return n.ringRecord(t)(r.RingRecord0())})}},c=new i(function(){return n.ringNumber}),R=new i(function(){return n.ringInt}),g=function(t){return new i(function(){return n.ringFn(t.Ring0())})};module.exports={CommutativeRing:i,CommutativeRingRecord:t,commutativeRingInt:R,commutativeRingNumber:c,commutativeRingUnit:r,commutativeRingFn:g,commutativeRingRecord:o,commutativeRingRecordNil:e,commutativeRingRecordCons:u};
+},{"../Data.Ring/index.js":"E2qH"}],"2IRB":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),i=require("../Data.CommutativeRing/index.js"),e=require("../Data.Eq/index.js"),t=require("../Data.Semiring/index.js"),r=function(n,i,e,t){this.CommutativeRing0=n,this.degree=i,this.div=e,this.mod=t},u=function(n){return n.mod},o=function(n){return function(i){return function(r){return function(o){var m,g=n,c=i,f=r,a=!1;function d(n,i,r,m){if(e.eq(n)(m)(t.zero(i.CommutativeRing0().Ring0().Semiring0())))return a=!0,r;g=n,c=i,f=m,o=u(i)(r)(m)}for(;!a;)m=d(g,c,f,o);return m}}}},m=new r(function(){return i.commutativeRingNumber},function(n){return 1},n.numDiv,function(n){return function(n){return 0}}),g=new r(function(){return i.commutativeRingInt},n.intDegree,n.intDiv,n.intMod),c=function(n){return n.div},f=function(n){return function(i){return function(r){return function(u){return e.eq(n)(r)(t.zero(i.CommutativeRing0().Ring0().Semiring0()))||e.eq(n)(u)(t.zero(i.CommutativeRing0().Ring0().Semiring0()))?t.zero(i.CommutativeRing0().Ring0().Semiring0()):c(i)(t.mul(i.CommutativeRing0().Ring0().Semiring0())(r)(u))(o(n)(i)(r)(u))}}}},a=function(n){return n.degree};module.exports={EuclideanRing:r,degree:a,div:c,mod:u,gcd:o,lcm:f,euclideanRingInt:g,euclideanRingNumber:m};
+},{"./foreign.js":"8EBw","../Data.CommutativeRing/index.js":"60TQ","../Data.Eq/index.js":"Pq4F","../Data.Semiring/index.js":"11NF"}],"TiEB":[function(require,module,exports) {
+"use strict";var n=require("../Data.Boolean/index.js"),r=require("../Data.EuclideanRing/index.js"),e=require("../Data.Ordering/index.js"),i=require("../Data.Semigroup/index.js"),o=require("../Data.Symbol/index.js"),t=require("../Data.Unit/index.js"),u=require("../Record.Unsafe/index.js"),c=require("../Type.Data.RowList/index.js"),d=function(n,r){this.SemigroupRecord0=n,this.memptyRecord=r},m=function(n,r){this.Semigroup0=n,this.mempty=r},a=new m(function(){return i.semigroupUnit},t.unit),f=new m(function(){return i.semigroupString},""),p=new d(function(){return i.semigroupRecordNil},function(n){return{}}),s=new m(function(){return e.semigroupOrdering},e.EQ.value),g=new m(function(){return i.semigroupArray},[]),l=function(n){return n.memptyRecord},R=function(n){return function(r){return new m(function(){return i.semigroupRecord(n)(r.SemigroupRecord0())},l(r)(c.RLProxy.value))}},S=function(n){return n.mempty},w=function(n){return new m(function(){return i.semigroupFn(n.Semigroup0())},function(r){return S(n)})},y=function(n){return function(r){return function(e){return function(t){return new d(function(){return i.semigroupRecordCons(n)(e)(t.SemigroupRecord0())(r.Semigroup0())},function(e){var i=l(t)(c.RLProxy.value),d=o.reflectSymbol(n)(o.SProxy.value);return u.unsafeSet(d)(S(r))(i)})}}}},x=function(e){return function(o){return function t(u){if(u<=0)return S(e);if(1===u)return o;if(0===r.mod(r.euclideanRingInt)(u)(2)){var c=t(r.div(r.euclideanRingInt)(u)(2));return i.append(e.Semigroup0())(c)(c)}if(n.otherwise)return c=t(r.div(r.euclideanRingInt)(u)(2)),i.append(e.Semigroup0())(c)(i.append(e.Semigroup0())(c)(o));throw new Error("Failed pattern match at Data.Monoid (line 65, column 3 - line 65, column 17): "+[u.constructor.name])}}},h=function(n){return function(r){return function(e){if(r)return e;if(!r)return S(n);throw new Error("Failed pattern match at Data.Monoid (line 73, column 1 - line 73, column 49): "+[r.constructor.name,e.constructor.name])}}};module.exports={Monoid:m,mempty:S,power:x,guard:h,MonoidRecord:d,memptyRecord:l,monoidUnit:a,monoidOrdering:s,monoidFn:w,monoidString:f,monoidArray:g,monoidRecord:R,monoidRecordNil:p,monoidRecordCons:y};
+},{"../Data.Boolean/index.js":"ObQr","../Data.EuclideanRing/index.js":"2IRB","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Symbol/index.js":"4oJQ","../Data.Unit/index.js":"NhVk","../Record.Unsafe/index.js":"KG04","../Type.Data.RowList/index.js":"XaXP"}],"5mN7":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),e=require("../Control.Alternative/index.js"),t=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),o=require("../Control.Category/index.js"),i=require("../Control.Extend/index.js"),a=require("../Control.Monad/index.js"),c=require("../Control.MonadZero/index.js"),f=require("../Control.Plus/index.js"),l=require("../Data.Bounded/index.js"),s=require("../Data.Eq/index.js"),d=require("../Data.Function/index.js"),m=require("../Data.Functor/index.js"),w=require("../Data.Functor.Invariant/index.js"),y=require("../Data.Monoid/index.js"),p=require("../Data.Ord/index.js"),v=require("../Data.Ordering/index.js"),M=require("../Data.Semigroup/index.js"),b=require("../Data.Show/index.js"),q=require("../Data.Unit/index.js"),x=function(){function n(){}return n.value=new n,n}(),h=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),j=function(n){return new b.Show(function(e){if(e instanceof h)return"(Just "+b.show(n)(e.value0)+")";if(e instanceof x)return"Nothing";throw new Error("Failed pattern match at Data.Maybe (line 205, column 1 - line 207, column 28): "+[e.constructor.name])})},D=function(n){return new M.Semigroup(function(e){return function(t){if(e instanceof x)return t;if(t instanceof x)return e;if(e instanceof h&&t instanceof h)return new h(M.append(n)(e.value0)(t.value0));throw new Error("Failed pattern match at Data.Maybe (line 174, column 1 - line 177, column 43): "+[e.constructor.name,t.constructor.name])}})},F=function(e){return function(r){return n.alt(e.Plus1().Alt0())(m.map(e.Plus1().Alt0().Functor0())(h.create)(r))(t.pure(e.Applicative0())(x.value))}},E=function(n){return new y.Monoid(function(){return D(n)},x.value)},A=function(n){return function(e){return function(t){if(t instanceof x)return n(q.unit);if(t instanceof h)return e(t.value0);throw new Error("Failed pattern match at Data.Maybe (line 230, column 1 - line 230, column 62): "+[n.constructor.name,e.constructor.name,t.constructor.name])}}},C=function(n){return function(e){return function(t){if(t instanceof x)return n;if(t instanceof h)return e(t.value0);throw new Error("Failed pattern match at Data.Maybe (line 217, column 1 - line 217, column 51): "+[n.constructor.name,e.constructor.name,t.constructor.name])}}},g=C(!0)(d.const(!1)),O=C(!1)(d.const(!0)),B=new m.Functor(function(n){return function(e){return e instanceof h?new h(n(e.value0)):x.value}}),J=new w.Invariant(w.imapF(B)),P=function(n){return A(n)(o.identity(o.categoryFn))},S=function(n){return C(n)(o.identity(o.categoryFn))},N=function(n){return function(n){if(n instanceof h)return n.value0;throw new Error("Failed pattern match at Data.Maybe (line 268, column 1 - line 268, column 46): "+[n.constructor.name])}},Z=new i.Extend(function(){return B},function(n){return function(e){return e instanceof x?x.value:new h(n(e))}}),I=function(n){return new s.Eq(function(e){return function(t){return e instanceof x&&t instanceof x||e instanceof h&&t instanceof h&&s.eq(n)(e.value0)(t.value0)}})},T=function(n){return new p.Ord(function(){return I(n.Eq0())},function(e){return function(t){if(e instanceof x&&t instanceof x)return v.EQ.value;if(e instanceof x)return v.LT.value;if(t instanceof x)return v.GT.value;if(e instanceof h&&t instanceof h)return p.compare(n)(e.value0)(t.value0);throw new Error("Failed pattern match at Data.Maybe (line 194, column 1 - line 194, column 51): "+[e.constructor.name,t.constructor.name])}})},G=new s.Eq1(function(n){return s.eq(I(n))}),L=new p.Ord1(function(){return G},function(n){return p.compare(T(n))}),Q=function(n){return new l.Bounded(function(){return T(n.Ord0())},x.value,new h(l.top(n)))},U=new r.Apply(function(){return B},function(n){return function(e){if(n instanceof h)return m.map(B)(n.value0)(e);if(n instanceof x)return x.value;throw new Error("Failed pattern match at Data.Maybe (line 67, column 1 - line 69, column 30): "+[n.constructor.name,e.constructor.name])}}),k=new u.Bind(function(){return U},function(n){return function(e){if(n instanceof h)return e(n.value0);if(n instanceof x)return x.value;throw new Error("Failed pattern match at Data.Maybe (line 125, column 1 - line 127, column 28): "+[n.constructor.name,e.constructor.name])}}),z=new t.Applicative(function(){return U},h.create),H=new a.Monad(function(){return z},function(){return k}),K=new n.Alt(function(){return B},function(n){return function(e){return n instanceof x?e:n}}),R=new f.Plus(function(){return K},x.value),V=new e.Alternative(function(){return z},function(){return R}),W=new c.MonadZero(function(){return V},function(){return H});module.exports={Nothing:x,Just:h,maybe:C,"maybe'":A,fromMaybe:S,"fromMaybe'":P,isJust:O,isNothing:g,fromJust:N,optional:F,functorMaybe:B,applyMaybe:U,applicativeMaybe:z,altMaybe:K,plusMaybe:R,alternativeMaybe:V,bindMaybe:k,monadMaybe:H,monadZeroMaybe:W,extendMaybe:Z,invariantMaybe:J,semigroupMaybe:D,monoidMaybe:E,eqMaybe:I,eq1Maybe:G,ordMaybe:T,ord1Maybe:L,boundedMaybe:Q,showMaybe:j};
+},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Extend/index.js":"JIoJ","../Control.Monad/index.js":"U/Ix","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Bounded/index.js":"kcUU","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Functor.Invariant/index.js":"AXkC","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Unit/index.js":"NhVk"}],"U/G5":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),e=require("../Control.Bind/index.js"),t=require("../Control.Monad/index.js"),o=require("../Data.Eq/index.js"),u=require("../Data.Functor/index.js"),i=require("../Data.HeytingAlgebra/index.js"),c=require("../Data.Monoid/index.js"),f=require("../Data.Ord/index.js"),j=require("../Data.Semigroup/index.js"),d=require("../Data.Semiring/index.js"),a=require("../Data.Show/index.js"),s=function(n){return n},C=function(n){return new a.Show(function(r){return"(Conj "+a.show(n)(r)+")"})},p=function(n){return new d.Semiring(function(r){return function(e){return i.conj(n)(r)(e)}},function(r){return function(e){return i.disj(n)(r)(e)}},i.ff(n),i.tt(n))},q=function(n){return new j.Semigroup(function(r){return function(e){return i.conj(n)(r)(e)}})},w=function(n){return n},x=function(n){return new c.Monoid(function(){return q(n)},i.tt(n))},l=new u.Functor(function(n){return function(r){return n(r)}}),m=function(n){return n},g=new o.Eq1(function(n){return o.eq(m(n))}),D=new f.Ord1(function(){return g},function(n){return f.compare(w(n))}),S=function(n){return n},A=new r.Apply(function(){return l},function(n){return function(r){return n(r)}}),h=new e.Bind(function(){return A},function(n){return function(r){return r(n)}}),v=new n.Applicative(function(){return A},s),y=new t.Monad(function(){return v},function(){return h});module.exports={Conj:s,eqConj:m,eq1Conj:g,ordConj:w,ord1Conj:D,boundedConj:S,showConj:C,functorConj:l,applyConj:A,applicativeConj:v,bindConj:h,monadConj:y,semigroupConj:q,monoidConj:x,semiringConj:p};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7"}],"9bR7":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),e=require("../Control.Bind/index.js"),i=require("../Control.Monad/index.js"),t=require("../Data.Eq/index.js"),u=require("../Data.Functor/index.js"),o=require("../Data.HeytingAlgebra/index.js"),c=require("../Data.Monoid/index.js"),s=require("../Data.Ord/index.js"),f=require("../Data.Semigroup/index.js"),j=require("../Data.Semiring/index.js"),d=require("../Data.Show/index.js"),a=function(n){return n},D=function(n){return new d.Show(function(r){return"(Disj "+d.show(n)(r)+")"})},p=function(n){return new j.Semiring(function(r){return function(e){return o.disj(n)(r)(e)}},function(r){return function(e){return o.conj(n)(r)(e)}},o.tt(n),o.ff(n))},q=function(n){return new f.Semigroup(function(r){return function(e){return o.disj(n)(r)(e)}})},w=function(n){return n},x=function(n){return new c.Monoid(function(){return q(n)},o.ff(n))},l=new u.Functor(function(n){return function(r){return n(r)}}),m=function(n){return n},g=new t.Eq1(function(n){return t.eq(m(n))}),S=new s.Ord1(function(){return g},function(n){return s.compare(w(n))}),A=function(n){return n},h=new r.Apply(function(){return l},function(n){return function(r){return n(r)}}),v=new e.Bind(function(){return h},function(n){return function(r){return r(n)}}),y=new n.Applicative(function(){return h},a),C=new i.Monad(function(){return y},function(){return v});module.exports={Disj:a,eqDisj:m,eq1Disj:g,ordDisj:w,ord1Disj:S,boundedDisj:A,showDisj:D,functorDisj:l,applyDisj:h,applicativeDisj:y,bindDisj:v,monadDisj:C,semigroupDisj:q,monoidDisj:x,semiringDisj:p};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7"}],"ULyl":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),e=require("../Control.Monad/index.js"),t=require("../Data.Eq/index.js"),i=require("../Data.Functor/index.js"),o=require("../Data.Monoid/index.js"),a=require("../Data.Ord/index.js"),c=require("../Data.Semigroup/index.js"),d=require("../Data.Show/index.js"),f=function(n){return n},l=function(n){return new d.Show(function(r){return"(Dual "+d.show(n)(r)+")"})},p=function(n){return new c.Semigroup(function(r){return function(u){return c.append(n)(u)(r)}})},D=function(n){return n},s=function(n){return new o.Monoid(function(){return p(n.Semigroup0())},o.mempty(n))},q=new i.Functor(function(n){return function(r){return n(r)}}),w=function(n){return n},x=new t.Eq1(function(n){return t.eq(w(n))}),j=new a.Ord1(function(){return x},function(n){return a.compare(D(n))}),m=function(n){return n},S=new r.Apply(function(){return q},function(n){return function(r){return n(r)}}),g=new u.Bind(function(){return S},function(n){return function(r){return r(n)}}),h=new n.Applicative(function(){return S},f),v=new e.Monad(function(){return h},function(){return g});module.exports={Dual:f,eqDual:w,eq1Dual:x,ordDual:D,ord1Dual:j,boundedDual:m,showDual:l,functorDual:q,applyDual:S,applicativeDual:h,bindDual:g,monadDual:v,semigroupDual:p,monoidDual:s};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"2o47":[function(require,module,exports) {
+"use strict";var n=require("../Control.Category/index.js"),o=require("../Control.Semigroupoid/index.js"),r=require("../Data.Monoid/index.js"),e=require("../Data.Semigroup/index.js"),u=require("../Data.Show/index.js"),i=function(n){return n},t=function(n){return new u.Show(function(o){return"(Endo "+u.show(n)(o)+")"})},d=function(n){return new e.Semigroup(function(r){return function(e){return o.compose(n)(r)(e)}})},c=function(n){return n},s=function(o){return new r.Monoid(function(){return d(o.Semigroupoid0())},n.identity(o))},f=function(n){return n},a=function(n){return n};module.exports={Endo:i,eqEndo:f,ordEndo:c,boundedEndo:a,showEndo:t,semigroupEndo:d,monoidEndo:s};
+},{"../Control.Category/index.js":"IAi2","../Control.Semigroupoid/index.js":"/riR","../Data.Monoid/index.js":"TiEB","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"fHyj":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),i=require("../Control.Bind/index.js"),r=require("../Control.Monad/index.js"),t=require("../Data.Eq/index.js"),u=require("../Data.Functor/index.js"),d=require("../Data.Monoid/index.js"),o=require("../Data.Ord/index.js"),c=require("../Data.Semigroup/index.js"),f=require("../Data.Semiring/index.js"),a=require("../Data.Show/index.js"),v=function(n){return n},A=function(n){return new a.Show(function(e){return"(Additive "+a.show(n)(e)+")"})},p=function(n){return new c.Semigroup(function(e){return function(i){return f.add(n)(e)(i)}})},s=function(n){return n},q=function(n){return new d.Monoid(function(){return p(n)},f.zero(n))},w=new u.Functor(function(n){return function(e){return n(e)}}),x=function(n){return n},j=new t.Eq1(function(n){return t.eq(x(n))}),l=new o.Ord1(function(){return j},function(n){return o.compare(s(n))}),m=function(n){return n},D=new e.Apply(function(){return w},function(n){return function(e){return n(e)}}),S=new i.Bind(function(){return D},function(n){return function(e){return e(n)}}),g=new n.Applicative(function(){return D},v),h=new r.Monad(function(){return g},function(){return S});module.exports={Additive:v,eqAdditive:x,eq1Additive:j,ordAdditive:s,ord1Additive:l,boundedAdditive:m,showAdditive:A,functorAdditive:w,applyAdditive:D,applicativeAdditive:g,bindAdditive:S,monadAdditive:h,semigroupAdditive:p,monoidAdditive:q};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7"}],"y5cd":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),i=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),e=require("../Control.Monad/index.js"),r=require("../Data.Eq/index.js"),u=require("../Data.Functor/index.js"),o=require("../Data.Monoid/index.js"),c=require("../Data.Ord/index.js"),l=require("../Data.Semigroup/index.js"),a=require("../Data.Semiring/index.js"),p=require("../Data.Show/index.js"),d=function(n){return n},f=function(n){return new p.Show(function(i){return"(Multiplicative "+p.show(n)(i)+")"})},v=function(n){return new l.Semigroup(function(i){return function(t){return a.mul(n)(i)(t)}})},M=function(n){return n},s=function(n){return new o.Monoid(function(){return v(n)},a.one(n))},q=new u.Functor(function(n){return function(i){return n(i)}}),w=function(n){return n},x=new r.Eq1(function(n){return r.eq(w(n))}),j=new c.Ord1(function(){return x},function(n){return c.compare(M(n))}),m=function(n){return n},D=new i.Apply(function(){return q},function(n){return function(i){return n(i)}}),S=new t.Bind(function(){return D},function(n){return function(i){return i(n)}}),g=new n.Applicative(function(){return D},d),h=new e.Monad(function(){return g},function(){return S});module.exports={Multiplicative:d,eqMultiplicative:w,eq1Multiplicative:x,ordMultiplicative:M,ord1Multiplicative:j,boundedMultiplicative:m,showMultiplicative:f,functorMultiplicative:q,applyMultiplicative:D,applicativeMultiplicative:g,bindMultiplicative:S,monadMultiplicative:h,semigroupMultiplicative:v,monoidMultiplicative:s};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7"}],"aRYH":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),e=require("../Control.Monad/index.js"),i=require("../Data.Eq/index.js"),u=require("../Data.Functor/index.js"),o=require("../Data.Ord/index.js"),c=require("../Data.Semigroup/index.js"),s=require("../Data.Show/index.js"),f=function(n){return n},d=function(n){return new s.Show(function(r){return"(First "+s.show(n)(r)+")"})},a=new c.Semigroup(function(n){return function(r){return n}}),p=function(n){return n},F=new u.Functor(function(n){return function(r){return n(r)}}),q=function(n){return n},w=new i.Eq1(function(n){return i.eq(q(n))}),l=new o.Ord1(function(){return w},function(n){return o.compare(p(n))}),x=function(n){return n},j=new r.Apply(function(){return F},function(n){return function(r){return n(r)}}),m=new t.Bind(function(){return j},function(n){return function(r){return r(n)}}),D=new n.Applicative(function(){return j},f),h=new e.Monad(function(){return D},function(){return m});module.exports={First:f,eqFirst:q,eq1First:w,ordFirst:p,ord1First:l,boundedFirst:x,showFirst:d,functorFirst:F,applyFirst:j,applicativeFirst:D,bindFirst:m,monadFirst:h,semigroupFirst:a};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"mI/Z":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),e=require("../Control.Monad/index.js"),u=require("../Data.Eq/index.js"),i=require("../Data.Functor/index.js"),o=require("../Data.Ord/index.js"),a=require("../Data.Semigroup/index.js"),c=require("../Data.Show/index.js"),s=function(n){return n},f=function(n){return new c.Show(function(r){return"(Last "+c.show(n)(r)+")"})},d=new a.Semigroup(function(n){return function(n){return n}}),p=function(n){return n},q=new i.Functor(function(n){return function(r){return n(r)}}),L=function(n){return n},w=new u.Eq1(function(n){return u.eq(L(n))}),l=new o.Ord1(function(){return w},function(n){return o.compare(p(n))}),x=function(n){return n},j=new r.Apply(function(){return q},function(n){return function(r){return n(r)}}),m=new t.Bind(function(){return j},function(n){return function(r){return r(n)}}),D=new n.Applicative(function(){return j},s),h=new e.Monad(function(){return D},function(){return m});module.exports={Last:s,eqLast:L,eq1Last:w,ordLast:p,ord1Last:l,boundedLast:x,showLast:f,functorLast:q,applyLast:j,applicativeLast:D,bindLast:m,monadLast:h,semigroupLast:d};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"lz8k":[function(require,module,exports) {
+"use strict";var n=require("../Control.Semigroupoid/index.js"),r=require("../Data.Function/index.js"),t=require("../Data.Functor/index.js"),u=require("../Data.Monoid.Additive/index.js"),e=require("../Data.Monoid.Conj/index.js"),i=require("../Data.Monoid.Disj/index.js"),o=require("../Data.Monoid.Dual/index.js"),c=require("../Data.Monoid.Endo/index.js"),f=require("../Data.Monoid.Multiplicative/index.js"),a=require("../Data.Semigroup.First/index.js"),p=require("../Data.Semigroup.Last/index.js"),d=function(n,r){this.unwrap=n,this.wrap=r},s=function(n){return n.wrap},m=function(n){return n.unwrap},v=function(u){return function(e){return function(i){return function(o){return function(c){return function(c){var f=n.compose(n.semigroupoidFn)(t.map(e)(m(o))),a=r.on(c)(t.map(u)(s(i)));return function(n){return f(a(n))}}}}}}},w=function(n){return function(r){return function(u){return function(e){return function(i){return function(i){var o=t.map(r)(m(e)),c=t.map(n)(s(u));return function(n){return o(i(c(n)))}}}}}}},j=function(t){return function(u){return function(e){return function(e){var i=n.compose(n.semigroupoidFn)(m(u)),o=r.on(e)(s(t));return function(n){return i(o(n))}}}}},D=function(n){return function(r){return function(t){return function(t){var u=m(r),e=s(n);return function(n){return u(t(e(n)))}}}}},l=function(n){return function(r){return m(n)}},F=function(n){return function(r){return function(u){return function(u){var e=t.map(n)(s(r)),i=m(r);return function(n){return e(u(i(n)))}}}}},x=function(u){return function(e){return function(i){return function(o){return function(c){return function(c){var f=n.compose(n.semigroupoidFn)(t.map(e)(s(o))),a=r.on(c)(t.map(u)(m(i)));return function(n){return f(a(n))}}}}}}},q=function(n){return function(r){return function(u){return function(e){return function(i){return function(i){var o=t.map(r)(s(e)),c=t.map(n)(m(u));return function(n){return o(i(c(n)))}}}}}}},y=function(t){return function(u){return function(e){return function(e){var i=n.compose(n.semigroupoidFn)(s(u)),o=r.on(e)(m(t));return function(n){return i(o(n))}}}}},M=function(n){return function(r){return function(t){return function(t){var u=s(r),e=m(n);return function(n){return u(t(e(n)))}}}}},g=function(n){return l(n)},C=new d(function(n){return n},f.Multiplicative),A=new d(function(n){return n},p.Last),E=new d(function(n){return n},a.First),L=new d(function(n){return n},c.Endo),S=new d(function(n){return n},o.Dual),h=new d(function(n){return n},i.Disj),N=new d(function(n){return n},e.Conj),b=new d(function(n){return n},u.Additive),k=function(n){return function(r){return function(u){return function(u){var e=s(r),i=t.map(n)(m(r));return function(n){return e(u(i(n)))}}}}},z=function(n){return function(r){return function(u){return function(e){return function(i){return function(i){var o=t.map(r)(m(e)),c=t.map(n)(s(u));return function(n){return o(i(c(n)))}}}}}}},B=function(n){return function(r){return function(u){return function(e){return function(e){return t.map(n)(m(r))(e(s(u)))}}}}};module.exports={unwrap:m,wrap:s,Newtype:d,un:l,op:g,ala:B,alaF:z,over:M,overF:q,under:D,underF:w,over2:y,overF2:x,under2:j,underF2:v,traverse:F,collect:k,newtypeAdditive:b,newtypeMultiplicative:C,newtypeConj:N,newtypeDisj:h,newtypeDual:S,newtypeEndo:L,newtypeFirst:E,newtypeLast:A};
+},{"../Control.Semigroupoid/index.js":"/riR","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Monoid.Additive/index.js":"fHyj","../Data.Monoid.Conj/index.js":"U/G5","../Data.Monoid.Disj/index.js":"9bR7","../Data.Monoid.Dual/index.js":"ULyl","../Data.Monoid.Endo/index.js":"2o47","../Data.Monoid.Multiplicative/index.js":"y5cd","../Data.Semigroup.First/index.js":"aRYH","../Data.Semigroup.Last/index.js":"mI/Z"}],"eVDl":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),t=require("../Control.Alt/index.js"),r=require("../Control.Applicative/index.js"),u=require("../Control.Apply/index.js"),e=require("../Control.Bind/index.js"),o=require("../Control.Category/index.js"),i=require("../Control.Plus/index.js"),c=require("../Data.Eq/index.js"),f=require("../Data.Function/index.js"),a=require("../Data.Functor/index.js"),l=require("../Data.HeytingAlgebra/index.js"),d=require("../Data.Maybe/index.js"),s=require("../Data.Monoid/index.js"),p=require("../Data.Monoid.Conj/index.js"),m=require("../Data.Monoid.Disj/index.js"),y=require("../Data.Monoid.Dual/index.js"),g=require("../Data.Monoid.Endo/index.js"),w=require("../Data.Newtype/index.js"),D=require("../Data.Ord/index.js"),j=require("../Data.Ordering/index.js"),q=require("../Data.Semigroup/index.js"),h=require("../Data.Semiring/index.js"),v=require("../Data.Unit/index.js"),F=function(n,t,r){this.foldMap=n,this.foldl=t,this.foldr=r},x=function(n){return n.foldr},b=function(n){return function(t){var r=x(n)(function(n){return function(r){return r.elem instanceof d.Just?r:r.pos===t?{elem:new d.Just(n),pos:r.pos}:{pos:r.pos+1|0,elem:r.elem}}})({elem:d.Nothing.value,pos:0});return function(n){return r(n).elem}}},M=function(n){return x(n)(function(n){return function(n){return!1}})(!0)},E=function(n){return function(r){return x(n)(t.alt(r.Alt0()))(i.empty(r))}},A=function(n){return function(r){return function(u){return x(n)((e=t.alt(r.Alt0()),function(n){return e(u(n))}))(i.empty(r));var e}}},J=function(n){return function(t){return function(e){return x(t)((o=u.applySecond(n.Apply0()),function(n){return o(e(n))}))(r.pure(n)(v.unit));var o}}},N=function(n){return function(t){return f.flip(J(n)(t))}},C=function(n){return function(t){return J(n)(t)(o.identity(o.categoryFn))}},S=function(n){return n.foldl},B=function(n){return function(t){var r=S(n)(function(n){return function(r){return n.elem instanceof d.Just?n:n.pos===t?{elem:new d.Just(r),pos:n.pos}:{pos:n.pos+1|0,elem:n.elem}}})({elem:d.Nothing.value,pos:0});return function(n){return r(n).elem}}},O=function(n){return function(t){return function(r){return function(u){return S(n)(function(n){return function(u){return n.init?{init:!1,acc:u}:{init:!1,acc:q.append(t.Semigroup0())(n.acc)(q.append(t.Semigroup0())(r)(u))}}})({init:!0,acc:s.mempty(t)})(u).acc}}}},L=function(n){return function(t){return S(n)(function(n){return function(r){return h.add(t)(h.one(t))(n)}})(h.zero(t))}},_=function(n){return function(t){return S(n)(function(n){return function(r){if(n instanceof d.Nothing)return new d.Just(r);if(n instanceof d.Just)return new d.Just(c.eq(j.eqOrdering)(t(n.value0)(r))(j.GT.value)?n.value0:r);throw new Error("Failed pattern match at Data.Foldable (line 389, column 3 - line 389, column 27): "+[n.constructor.name,r.constructor.name])}})(d.Nothing.value)}},z=function(n){return function(t){return _(t)(D.compare(n))}},T=function(n){return function(t){return S(n)(function(n){return function(r){if(n instanceof d.Nothing)return new d.Just(r);if(n instanceof d.Just)return new d.Just(c.eq(j.eqOrdering)(t(n.value0)(r))(j.LT.value)?n.value0:r);throw new Error("Failed pattern match at Data.Foldable (line 402, column 3 - line 402, column 27): "+[n.constructor.name,r.constructor.name])}})(d.Nothing.value)}},G=function(n){return function(t){return T(t)(D.compare(n))}},H=function(n){return function(t){return S(n)(h.mul(t))(h.one(t))}},P=function(n){return function(t){return S(n)(h.add(t))(h.zero(t))}},R=new F(function(n){return function(n){return function(t){return n(t)}}},function(n){return function(t){return function(r){return n(t)(r)}}},function(n){return function(t){return function(r){return n(r)(t)}}}),U=new F(function(n){return function(t){return function(r){if(r instanceof d.Nothing)return s.mempty(n);if(r instanceof d.Just)return t(r.value0);throw new Error("Failed pattern match at Data.Foldable (line 129, column 1 - line 135, column 27): "+[t.constructor.name,r.constructor.name])}}},function(n){return function(t){return function(r){if(r instanceof d.Nothing)return t;if(r instanceof d.Just)return n(t)(r.value0);throw new Error("Failed pattern match at Data.Foldable (line 129, column 1 - line 135, column 27): "+[n.constructor.name,t.constructor.name,r.constructor.name])}}},function(n){return function(t){return function(r){if(r instanceof d.Nothing)return t;if(r instanceof d.Just)return n(r.value0)(t);throw new Error("Failed pattern match at Data.Foldable (line 129, column 1 - line 135, column 27): "+[n.constructor.name,t.constructor.name,r.constructor.name])}}}),k=new F(function(n){return function(n){return function(t){return n(t)}}},function(n){return function(t){return function(r){return n(t)(r)}}},function(n){return function(t){return function(r){return n(r)(t)}}}),I=new F(function(n){return function(n){return function(t){return n(t)}}},function(n){return function(t){return function(r){return n(t)(r)}}},function(n){return function(t){return function(r){return n(r)(t)}}}),K=new F(function(n){return function(n){return function(t){return n(t)}}},function(n){return function(t){return function(r){return n(t)(r)}}},function(n){return function(t){return function(r){return n(r)(t)}}}),Q=new F(function(n){return function(n){return function(t){return n(t)}}},function(n){return function(t){return function(r){return n(t)(r)}}},function(n){return function(t){return function(r){return n(r)(t)}}}),V=function(n){return function(t){return function(r){return x(n)(function(n){return function(u){return q.append(t.Semigroup0())(r(n))(u)}})(s.mempty(t))}}},W=new F(function(n){return V(W)(n)},n.foldlArray,n.foldrArray),X=function(n){return function(t){return function(r){return S(n)(function(n){return function(u){return q.append(t.Semigroup0())(n)(r(u))}})(s.mempty(t))}}},Y=function(n){return n.foldMap},Z=new F(function(n){return function(t){return function(r){return Y(U)(n)(t)(r)}}},function(n){return function(t){return function(r){return S(U)(n)(t)(r)}}},function(n){return function(t){return function(r){return x(U)(n)(t)(r)}}}),$=new F(function(n){return function(t){return function(r){return Y(U)(n)(t)(r)}}},function(n){return function(t){return function(r){return S(U)(n)(t)(r)}}},function(n){return function(t){return function(r){return x(U)(n)(t)(r)}}}),nn=function(n){return function(t){return function(r){return function(u){return w.unwrap(w.newtypeEndo)(w.unwrap(w.newtypeDual)(Y(n)(y.monoidDual(g.monoidEndo(o.categoryFn)))((e=f.flip(t),function(n){return y.Dual(g.Endo(e(n)))}))(u)))(r);var e}}}},tn=function(n){return function(t){return function(r){return function(u){return w.unwrap(w.newtypeEndo)(Y(n)(g.monoidEndo(o.categoryFn))(function(n){return g.Endo(t(n))})(u))(r)}}}},rn=function(n){return function(t){return function(r){return function(u){return function(e){return w.unwrap(w.newtypeEndo)(Y(n)(g.monoidEndo(o.categoryFn))(function(n){return function(e){return q.append(t)(r)(q.append(t)(u(n))(e))}})(e))(r)}}}}},un=function(n){return function(t){return function(r){return rn(n)(t)(r)(o.identity(o.categoryFn))}}},en=function(n){return function(t){return function(u){return function(o){return S(n)(function(n){return function(r){return e.bind(t.Bind1())(n)(f.flip(u)(r))}})(r.pure(t.Applicative0())(o))}}}},on=function(n){return function(t){return Y(n)(t)(o.identity(o.categoryFn))}},cn=function(n){return function(t){return S(n)(function(n){return function(r){return n instanceof d.Nothing?t(r):n}})(d.Nothing.value)}},fn=function(n){return function(t){return S(n)(function(n){return function(r){return n instanceof d.Nothing&&t(r)?new d.Just(r):n}})(d.Nothing.value)}},an=function(n){return function(t){return w.alaF(a.functorFn)(a.functorFn)(w.newtypeDisj)(w.newtypeDisj)(m.Disj)(Y(n)(m.monoidDisj(t)))}},ln=function(n){return function(t){var r=an(n)(l.heytingAlgebraBoolean),u=c.eq(t);return function(n){return r(u(n))}}},dn=function(n){return function(t){return function(r){var u=l.not(l.heytingAlgebraBoolean),e=ln(n)(t)(r);return function(n){return u(e(n))}}}},sn=function(n){return function(t){return an(n)(t)(o.identity(o.categoryFn))}},pn=function(n){return function(t){return w.alaF(a.functorFn)(a.functorFn)(w.newtypeConj)(w.newtypeConj)(p.Conj)(Y(n)(p.monoidConj(t)))}},mn=function(n){return function(t){return pn(n)(t)(o.identity(o.categoryFn))}};module.exports={Foldable:F,foldr:x,foldl:S,foldMap:Y,foldrDefault:tn,foldlDefault:nn,foldMapDefaultL:X,foldMapDefaultR:V,fold:on,foldM:en,traverse_:J,for_:N,sequence_:C,oneOf:E,oneOfMap:A,intercalate:O,surroundMap:rn,surround:un,and:mn,or:sn,all:pn,any:an,sum:P,product:H,elem:ln,notElem:dn,indexl:B,indexr:b,find:fn,findMap:cn,maximum:z,maximumBy:_,minimum:G,minimumBy:T,null:M,length:L,foldableArray:W,foldableMaybe:U,foldableFirst:Z,foldableLast:$,foldableAdditive:Q,foldableDual:k,foldableDisj:I,foldableConj:K,foldableMultiplicative:R};
+},{"./foreign.js":"kY6E","../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Plus/index.js":"oMBg","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Monoid.Conj/index.js":"U/G5","../Data.Monoid.Disj/index.js":"9bR7","../Data.Monoid.Dual/index.js":"ULyl","../Data.Monoid.Endo/index.js":"2o47","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Unit/index.js":"NhVk"}],"wjQo":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Category/index.js"),u=require("../Data.Foldable/index.js"),e=require("../Data.Function/index.js"),i=require("../Data.Monoid/index.js"),o=require("../Data.Monoid.Conj/index.js"),f=require("../Data.Monoid.Disj/index.js"),c=require("../Data.Monoid.Dual/index.js"),a=require("../Data.Monoid.Endo/index.js"),d=require("../Data.Newtype/index.js"),l=require("../Data.Semigroup/index.js"),p=require("../Data.Unit/index.js"),b=function(n,r,t){this.bifoldMap=n,this.bifoldl=r,this.bifoldr=t},y=function(n){return n.bifoldr},s=function(t){return function(u){return function(e){return function(i){return y(t)((f=r.applySecond(u.Apply0()),function(n){return f(e(n))}))((o=r.applySecond(u.Apply0()),function(n){return o(i(n))}))(n.pure(u)(p.unit));var o,f}}}},D=function(n){return function(r){return function(t){return function(u){return function(e){return s(n)(r)(u)(e)(t)}}}}},j=function(n){return function(r){return s(n)(r)(t.identity(t.categoryFn))(t.identity(t.categoryFn))}},g=function(n){return n.bifoldl},w=function(n){return new b(function(r){return function(t){return function(t){return function(e){return u.foldMap(n)(r)(t)(e)}}}},function(r){return function(r){return function(t){return function(e){return u.foldl(n)(r)(t)(e)}}}},function(r){return function(r){return function(t){return function(e){return u.foldr(n)(r)(t)(e)}}}})},m=function(n){return new b(function(r){return function(t){return function(e){return function(e){return u.foldMap(n)(r)(t)(e)}}}},function(r){return function(t){return function(t){return function(e){return u.foldl(n)(r)(t)(e)}}}},function(r){return function(t){return function(t){return function(e){return u.foldr(n)(r)(t)(e)}}}})},q=function(n){return function(r){return function(t){return function(u){return y(n)((o=l.append(r.Semigroup0()),function(n){return o(t(n))}))((e=l.append(r.Semigroup0()),function(n){return e(u(n))}))(i.mempty(r));var e,o}}}},x=function(n){return function(r){return function(t){return function(u){return g(n)(function(n){return function(u){return l.append(r.Semigroup0())(n)(t(u))}})(function(n){return function(t){return l.append(r.Semigroup0())(n)(u(t))}})(i.mempty(r))}}}},M=function(n){return n.bifoldMap},v=function(n){return new b(function(r){return function(t){return function(u){return function(e){return M(n)(r)(u)(t)(e)}}}},function(r){return function(t){return function(u){return function(e){return g(n)(t)(r)(u)(e)}}}},function(r){return function(t){return function(u){return function(e){return y(n)(t)(r)(u)(e)}}}})},C=function(n){return new b(function(r){return function(t){return function(u){return function(e){return M(n)(r)(t)(u)(e)}}}},function(r){return function(t){return function(u){return function(e){return g(n)(r)(t)(u)(e)}}}},function(r){return function(t){return function(u){return function(e){return y(n)(r)(t)(u)(e)}}}})},E=function(n){return function(r){return function(u){return function(i){return function(o){return d.unwrap(d.newtypeEndo)(d.unwrap(d.newtypeDual)(M(n)(c.monoidDual(a.monoidEndo(t.categoryFn)))((l=e.flip(r),function(n){return c.Dual(a.Endo(l(n)))}))((f=e.flip(u),function(n){return c.Dual(a.Endo(f(n)))}))(o)))(i);var f,l}}}}},F=function(n){return function(r){return function(u){return function(e){return function(i){return d.unwrap(d.newtypeEndo)(M(n)(a.monoidEndo(t.categoryFn))(function(n){return a.Endo(r(n))})(function(n){return a.Endo(u(n))})(i))(e)}}}}},S=function n(r){return function(t){return new b(function(n){return function(u){return function(e){return function(i){return l.append(n.Semigroup0())(M(r)(n)(u)(e)(i.value0))(M(t)(n)(u)(e)(i.value1))}}}},function(u){return function(e){return function(i){return function(o){return E(n(r)(t))(u)(e)(i)(o)}}}},function(u){return function(e){return function(i){return function(o){return F(n(r)(t))(u)(e)(i)(o)}}}})}},A=function(n){return function(r){return M(n)(r)(t.identity(t.categoryFn))(t.identity(t.categoryFn))}},h=function(n){return function(r){return function(t){return function(u){var e=d.unwrap(d.newtypeDisj),i=M(n)(f.monoidDisj(r.HeytingAlgebra0()))(function(n){return f.Disj(t(n))})(function(n){return f.Disj(u(n))});return function(n){return e(i(n))}}}}},_=function(n){return function(r){return function(t){return function(u){var e=d.unwrap(d.newtypeConj),i=M(n)(o.monoidConj(r.HeytingAlgebra0()))(function(n){return o.Conj(t(n))})(function(n){return o.Conj(u(n))});return function(n){return e(i(n))}}}}};module.exports={bifoldMap:M,bifoldl:g,bifoldr:y,Bifoldable:b,bifoldrDefault:F,bifoldlDefault:E,bifoldMapDefaultR:q,bifoldMapDefaultL:x,bifold:A,bitraverse_:s,bifor_:D,bisequence_:j,biany:h,biall:_,bifoldableClown:m,bifoldableJoker:w,bifoldableFlip:v,bifoldableProduct:S,bifoldableWrap:C};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Monoid/index.js":"TiEB","../Data.Monoid.Conj/index.js":"U/G5","../Data.Monoid.Disj/index.js":"9bR7","../Data.Monoid.Dual/index.js":"ULyl","../Data.Monoid.Endo/index.js":"2o47","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Unit/index.js":"NhVk"}],"e2Wc":[function(require,module,exports) {
+"use strict";var t=require("../Control.Category/index.js"),n=function(t){this.bimap=t},r=function(t){return t.bimap},i=function(n){return function(i){return r(n)(i)(t.identity(t.categoryFn))}},e=function(n){return r(n)(t.identity(t.categoryFn))};module.exports={bimap:r,Bifunctor:n,lmap:i,rmap:e};
+},{"../Control.Category/index.js":"IAi2"}],"Sd0N":[function(require,module,exports) {
+"use strict";var i=function(i,t){this.Biapply0=i,this.bipure=t},t=function(i){return i.bipure};module.exports={bipure:t,Biapplicative:i};
+},{}],"X0ga":[function(require,module,exports) {
+"use strict";var n=require("../Control.Category/index.js"),t=require("../Data.Bifunctor/index.js"),i=require("../Data.Function/index.js"),r=function(n,t){this.Bifunctor0=n,this.biapply=t},u=function(n){return n.biapply},e=function(r){return function(e){return function(o){return u(r)(n.identity(n.categoryFn)(t.bimap(r.Bifunctor0())(i.const(n.identity(n.categoryFn)))(i.const(n.identity(n.categoryFn))))(e))(o)}}},o=function(r){return function(e){return function(o){return u(r)(n.identity(n.categoryFn)(t.bimap(r.Bifunctor0())(i.const)(i.const))(e))(o)}}},c=function(i){return function(r){return function(e){return function(o){return function(c){return u(i)(n.identity(n.categoryFn)(t.bimap(i.Bifunctor0())(r)(e))(o))(c)}}}}},f=function(i){return function(r){return function(e){return function(o){return function(c){return function(f){return u(i)(u(i)(n.identity(n.categoryFn)(t.bimap(i.Bifunctor0())(r)(e))(o))(c))(f)}}}}}};module.exports={biapply:u,Biapply:r,biapplyFirst:e,biapplySecond:o,bilift2:c,bilift3:f};
+},{"../Control.Category/index.js":"IAi2","../Data.Bifunctor/index.js":"e2Wc","../Data.Function/index.js":"ImXJ"}],"Wuz6":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),e=require("../Control.Biapplicative/index.js"),t=require("../Control.Biapply/index.js"),u=require("../Data.Bifunctor/index.js"),i=require("../Data.Functor/index.js"),o=require("../Data.Newtype/index.js"),c=require("../Data.Show/index.js"),p=function(n){return n},l=function(n){return new c.Show(function(r){return"(Clown "+c.show(n)(r)+")"})},f=function(n){return n},w=new o.Newtype(function(n){return n},p),a=new i.Functor(function(n){return function(n){return n}}),C=function(n){return n},s=function(n){return new u.Bifunctor(function(r){return function(e){return function(e){return i.map(n)(r)(e)}}})},d=function(n){return new t.Biapply(function(){return s(n.Functor0())},function(e){return function(t){return r.apply(n)(e)(t)}})},q=function(r){return new e.Biapplicative(function(){return d(r.Apply0())},function(e){return function(t){return n.pure(r)(e)}})};module.exports={Clown:p,newtypeClown:w,eqClown:C,ordClown:f,showClown:l,functorClown:a,bifunctorClown:s,biapplyClown:d,biapplicativeClown:q};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Biapplicative/index.js":"Sd0N","../Control.Biapply/index.js":"X0ga","../Data.Bifunctor/index.js":"e2Wc","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Show/index.js":"mFY7"}],"EM73":[function(require,module,exports) {
+"use strict";var n=require("../Control.Biapplicative/index.js"),r=require("../Control.Biapply/index.js"),i=require("../Data.Bifunctor/index.js"),t=require("../Data.Functor/index.js"),e=require("../Data.Newtype/index.js"),u=require("../Data.Show/index.js"),o=function(n){return n},p=function(n){return new u.Show(function(r){return"(Flip "+u.show(n)(r)+")"})},c=function(n){return n},f=new e.Newtype(function(n){return n},o),a=function(n){return new t.Functor(function(r){return function(t){return i.lmap(n)(r)(t)}})},l=function(n){return n},w=function(n){return new i.Bifunctor(function(r){return function(t){return function(e){return i.bimap(n)(t)(r)(e)}}})},F=function(n){return new r.Biapply(function(){return w(n.Bifunctor0())},function(i){return function(t){return r.biapply(n)(i)(t)}})},s=function(r){return new n.Biapplicative(function(){return F(r.Biapply0())},function(i){return function(t){return n.bipure(r)(t)(i)}})};module.exports={Flip:o,newtypeFlip:f,eqFlip:l,ordFlip:c,showFlip:p,functorFlip:a,bifunctorFlip:w,biapplyFlip:F,biapplicativeFlip:s};
+},{"../Control.Biapplicative/index.js":"Sd0N","../Control.Biapply/index.js":"X0ga","../Data.Bifunctor/index.js":"e2Wc","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Show/index.js":"mFY7"}],"O/Oh":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),e=require("../Control.Biapplicative/index.js"),t=require("../Control.Biapply/index.js"),u=require("../Data.Bifunctor/index.js"),i=require("../Data.Functor/index.js"),o=require("../Data.Newtype/index.js"),c=require("../Data.Show/index.js"),p=function(n){return n},f=function(n){return new c.Show(function(r){return"(Joker "+c.show(n)(r)+")"})},a=function(n){return n},l=new o.Newtype(function(n){return n},p),s=function(n){return new i.Functor(function(r){return function(e){return i.map(n)(r)(e)}})},w=function(n){return n},d=function(n){return new u.Bifunctor(function(r){return function(r){return function(e){return i.map(n)(r)(e)}}})},k=function(n){return new t.Biapply(function(){return d(n.Functor0())},function(e){return function(t){return r.apply(n)(e)(t)}})},J=function(r){return new e.Biapplicative(function(){return k(r.Apply0())},function(e){return function(e){return n.pure(r)(e)}})};module.exports={Joker:p,newtypeJoker:l,eqJoker:w,ordJoker:a,showJoker:f,functorJoker:s,bifunctorJoker:d,biapplyJoker:k,biapplicativeJoker:J};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Biapplicative/index.js":"Sd0N","../Control.Biapply/index.js":"X0ga","../Data.Bifunctor/index.js":"e2Wc","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Show/index.js":"mFY7"}],"U+97":[function(require,module,exports) {
+"use strict";var n=require("../Control.Biapplicative/index.js"),u=require("../Control.Biapply/index.js"),r=require("../Data.Bifunctor/index.js"),e=require("../Data.Eq/index.js"),t=require("../Data.Ord/index.js"),i=require("../Data.Ordering/index.js"),o=require("../Data.Show/index.js"),c=function(){function n(n,u){this.value0=n,this.value1=u}return n.create=function(u){return function(r){return new n(u,r)}},n}(),a=function(n){return function(u){return new o.Show(function(r){return"(Product "+o.show(n)(r.value0)+" "+o.show(u)(r.value1)+")"})}},f=function(n){return function(u){return new e.Eq(function(r){return function(t){return e.eq(n)(r.value0)(t.value0)&&e.eq(u)(r.value1)(t.value1)}})}},l=function(n){return function(u){return new t.Ord(function(){return f(n.Eq0())(u.Eq0())},function(r){return function(e){var o=t.compare(n)(r.value0)(e.value0);return o instanceof i.LT?i.LT.value:o instanceof i.GT?i.GT.value:t.compare(u)(r.value1)(e.value1)}})}},p=function(n){return function(u){return new r.Bifunctor(function(e){return function(t){return function(i){return new c(r.bimap(n)(e)(t)(i.value0),r.bimap(u)(e)(t)(i.value1))}}})}},v=function(n){return function(r){return new u.Biapply(function(){return p(n.Bifunctor0())(r.Bifunctor0())},function(e){return function(t){return new c(u.biapply(n)(e.value0)(t.value0),u.biapply(r)(e.value1)(t.value1))}})}},d=function(u){return function(r){return new n.Biapplicative(function(){return v(u.Biapply0())(r.Biapply0())},function(e){return function(t){return new c(n.bipure(u)(e)(t),n.bipure(r)(e)(t))}})}};module.exports={Product:c,eqProduct:f,ordProduct:l,showProduct:a,bifunctorProduct:p,biapplyProduct:v,biapplicativeProduct:d};
+},{"../Control.Biapplicative/index.js":"Sd0N","../Control.Biapply/index.js":"X0ga","../Data.Bifunctor/index.js":"e2Wc","../Data.Eq/index.js":"Pq4F","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Show/index.js":"mFY7"}],"U78Q":[function(require,module,exports) {
+"use strict";var n=require("../Control.Biapplicative/index.js"),r=require("../Control.Biapply/index.js"),t=require("../Data.Bifunctor/index.js"),e=require("../Data.Functor/index.js"),u=require("../Data.Newtype/index.js"),i=require("../Data.Show/index.js"),o=function(n){return n},p=function(n){return new i.Show(function(r){return"(Wrap "+i.show(n)(r)+")"})},a=function(n){return n},c=new u.Newtype(function(n){return n},o),f=function(n){return new e.Functor(function(r){return function(e){return t.rmap(n)(r)(e)}})},w=function(n){return n},l=function(n){return new t.Bifunctor(function(r){return function(e){return function(u){return t.bimap(n)(r)(e)(u)}}})},s=function(n){return new r.Biapply(function(){return l(n.Bifunctor0())},function(t){return function(e){return r.biapply(n)(t)(e)}})},W=function(r){return new n.Biapplicative(function(){return s(r.Biapply0())},function(t){return function(e){return n.bipure(r)(t)(e)}})};module.exports={Wrap:o,newtypeWrap:c,eqWrap:w,ordWrap:a,showWrap:p,functorWrap:f,bifunctorWrap:l,biapplyWrap:s,biapplicativeWrap:W};
+},{"../Control.Biapplicative/index.js":"Sd0N","../Control.Biapply/index.js":"X0ga","../Data.Bifunctor/index.js":"e2Wc","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Show/index.js":"mFY7"}],"oRQn":[function(require,module,exports) {
+"use strict";exports.traverseArrayImpl=function(){function n(n){return[n]}function r(n){return function(r){return[n,r]}}function t(n){return function(r){return function(t){return[n,r,t]}}}function u(n){return function(r){return n.concat(r)}}return function(e){return function(c){return function(o){return function(f){return function(i){return function a(s,l){switch(l-s){case 0:return o([]);case 1:return c(n)(f(i[s]));case 2:return e(c(r)(f(i[s])))(f(i[s+1]));case 3:return e(e(c(t)(f(i[s])))(f(i[s+1])))(f(i[s+2]));default:var h=s+2*Math.floor((l-s)/4);return e(c(u)(a(s,h)))(a(h,l))}}(0,i.length)}}}}}}();
+},{}],"W/l6":[function(require,module,exports) {
+"use strict";var e=require("../Control.Alt/index.js"),n=require("../Control.Alternative/index.js"),r=require("../Control.MonadZero/index.js"),t=require("../Control.Plus/index.js"),i=require("../Data.Maybe/index.js"),o=require("../Data.Monoid/index.js"),u=require("../Data.Newtype/index.js"),a=require("../Data.Semigroup/index.js"),s=require("../Data.Show/index.js"),d=function(e){return e},c=function(e){return new s.Show(function(n){return"First ("+s.show(i.showMaybe(e))(n)+")"})},F=new a.Semigroup(function(e){return function(n){return e instanceof i.Just?e:n}}),y=function(e){return i.ordMaybe(e)},f=i.ord1Maybe,l=new u.Newtype(function(e){return e},d),p=new o.Monoid(function(){return F},i.Nothing.value),b=i.monadMaybe,M=i.invariantMaybe,w=i.functorMaybe,q=i.extendMaybe,x=function(e){return i.eqMaybe(e)},m=i.eq1Maybe,j=function(e){return i.boundedMaybe(e)},v=i.bindMaybe,h=i.applyMaybe,D=i.applicativeMaybe,g=new e.Alt(function(){return w},a.append(F)),A=new t.Plus(function(){return g},o.mempty(p)),C=new n.Alternative(function(){return D},function(){return A}),S=new r.MonadZero(function(){return C},function(){return b});module.exports={First:d,newtypeFirst:l,eqFirst:x,eq1First:m,ordFirst:y,ord1First:f,boundedFirst:j,functorFirst:w,invariantFirst:M,applyFirst:h,applicativeFirst:D,bindFirst:v,monadFirst:b,extendFirst:q,showFirst:c,semigroupFirst:F,monoidFirst:p,altFirst:g,plusFirst:A,alternativeFirst:C,monadZeroFirst:S};
+},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"aQky":[function(require,module,exports) {
+"use strict";var e=require("../Control.Alt/index.js"),n=require("../Control.Alternative/index.js"),t=require("../Control.MonadZero/index.js"),r=require("../Control.Plus/index.js"),a=require("../Data.Maybe/index.js"),o=require("../Data.Monoid/index.js"),i=require("../Data.Newtype/index.js"),u=require("../Data.Semigroup/index.js"),s=require("../Data.Show/index.js"),d=function(e){return e},c=function(e){return new s.Show(function(n){return"(Last "+s.show(a.showMaybe(e))(n)+")"})},l=new u.Semigroup(function(e){return function(n){if(n instanceof a.Just)return n;if(n instanceof a.Nothing)return e;throw new Error("Failed pattern match at Data.Maybe.Last (line 52, column 1 - line 54, column 36): "+[e.constructor.name,n.constructor.name])}}),L=function(e){return a.ordMaybe(e)},f=a.ord1Maybe,y=new i.Newtype(function(e){return e},d),p=new o.Monoid(function(){return l},a.Nothing.value),b=a.monadMaybe,M=a.invariantMaybe,w=a.functorMaybe,m=a.extendMaybe,q=function(e){return a.eqMaybe(e)},x=a.eq1Maybe,h=function(e){return a.boundedMaybe(e)},j=a.bindMaybe,v=a.applyMaybe,D=a.applicativeMaybe,g=new e.Alt(function(){return w},u.append(l)),A=new r.Plus(function(){return g},o.mempty(p)),C=new n.Alternative(function(){return D},function(){return A}),N=new t.MonadZero(function(){return C},function(){return b});module.exports={Last:d,newtypeLast:y,eqLast:q,eq1Last:x,ordLast:L,ord1Last:f,boundedLast:h,functorLast:w,invariantLast:M,applyLast:v,applicativeLast:D,bindLast:j,monadLast:b,extendLast:m,showLast:c,semigroupLast:l,monoidLast:p,altLast:g,plusLast:A,alternativeLast:C,monadZeroLast:N};
+},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"LbSr":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),u=require("../Data.Functor/index.js"),e=function(n){return n},r=function(n){return n},c=function(n){return n},a=function(n){return n},i=new u.Functor(function(n){return function(t){return function(u){var e=c(t)(u);return{accum:e.accum,value:n(e.value)}}}}),o=new u.Functor(function(n){return function(t){return function(u){var e=a(t)(u);return{accum:e.accum,value:n(e.value)}}}}),f=new t.Apply(function(){return i},function(n){return function(t){return function(u){var e=c(t)(u),r=c(n)(e.accum);return{accum:r.accum,value:r.value(e.value)}}}}),l=new t.Apply(function(){return o},function(n){return function(t){return function(u){var e=a(n)(u),r=a(t)(e.accum);return{accum:r.accum,value:e.value(r.value)}}}}),v=new n.Applicative(function(){return f},function(n){return function(t){return{accum:t,value:n}}}),p=new n.Applicative(function(){return l},function(n){return function(t){return{accum:t,value:n}}});module.exports={StateL:r,stateL:a,StateR:e,stateR:c,functorStateL:o,applyStateL:l,applicativeStateL:p,functorStateR:i,applyStateR:f,applicativeStateR:v};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Data.Functor/index.js":"+0AE"}],"n7EE":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),u=require("../Control.Category/index.js"),e=require("../Data.Foldable/index.js"),i=require("../Data.Functor/index.js"),o=require("../Data.Maybe/index.js"),c=require("../Data.Maybe.First/index.js"),a=require("../Data.Maybe.Last/index.js"),f=require("../Data.Monoid.Additive/index.js"),l=require("../Data.Monoid.Conj/index.js"),p=require("../Data.Monoid.Disj/index.js"),s=require("../Data.Monoid.Dual/index.js"),d=require("../Data.Monoid.Multiplicative/index.js"),v=require("../Data.Traversable.Accum.Internal/index.js"),m=function(n,r,t,u){this.Foldable1=n,this.Functor0=r,this.sequence=t,this.traverse=u},y=function(n){return n.traverse},A=new m(function(){return e.foldableMultiplicative},function(){return d.functorMultiplicative},function(n){return function(r){return i.map(n.Apply0().Functor0())(d.Multiplicative)(r)}},function(n){return function(r){return function(t){return i.map(n.Apply0().Functor0())(d.Multiplicative)(r(t))}}}),F=new m(function(){return e.foldableMaybe},function(){return o.functorMaybe},function(n){return function(t){if(t instanceof o.Nothing)return r.pure(n)(o.Nothing.value);if(t instanceof o.Just)return i.map(n.Apply0().Functor0())(o.Just.create)(t.value0);throw new Error("Failed pattern match at Data.Traversable (line 86, column 1 - line 90, column 33): "+[t.constructor.name])}},function(n){return function(t){return function(u){if(u instanceof o.Nothing)return r.pure(n)(o.Nothing.value);if(u instanceof o.Just)return i.map(n.Apply0().Functor0())(o.Just.create)(t(u.value0));throw new Error("Failed pattern match at Data.Traversable (line 86, column 1 - line 90, column 33): "+[t.constructor.name,u.constructor.name])}}}),b=new m(function(){return e.foldableDual},function(){return s.functorDual},function(n){return function(r){return i.map(n.Apply0().Functor0())(s.Dual)(r)}},function(n){return function(r){return function(t){return i.map(n.Apply0().Functor0())(s.Dual)(r(t))}}}),j=new m(function(){return e.foldableDisj},function(){return p.functorDisj},function(n){return function(r){return i.map(n.Apply0().Functor0())(p.Disj)(r)}},function(n){return function(r){return function(t){return i.map(n.Apply0().Functor0())(p.Disj)(r(t))}}}),D=new m(function(){return e.foldableConj},function(){return l.functorConj},function(n){return function(r){return i.map(n.Apply0().Functor0())(l.Conj)(r)}},function(n){return function(r){return function(t){return i.map(n.Apply0().Functor0())(l.Conj)(r(t))}}}),q=new m(function(){return e.foldableAdditive},function(){return f.functorAdditive},function(n){return function(r){return i.map(n.Apply0().Functor0())(f.Additive)(r)}},function(n){return function(r){return function(t){return i.map(n.Apply0().Functor0())(f.Additive)(r(t))}}}),M=function(n){return function(r){return y(n)(r)(u.identity(u.categoryFn))}},x=new m(function(){return e.foldableArray},function(){return i.functorArray},function(n){return M(x)(n)},function(u){return n.traverseArrayImpl(t.apply(u.Apply0()))(i.map(u.Apply0().Functor0()))(r.pure(u))}),w=function(n){return n.sequence},h=new m(function(){return e.foldableFirst},function(){return c.functorFirst},function(n){return function(r){return i.map(n.Apply0().Functor0())(c.First)(w(F)(n)(r))}},function(n){return function(r){return function(t){return i.map(n.Apply0().Functor0())(c.First)(y(F)(n)(r)(t))}}}),C=new m(function(){return e.foldableLast},function(){return a.functorLast},function(n){return function(r){return i.map(n.Apply0().Functor0())(a.Last)(w(F)(n)(r))}},function(n){return function(r){return function(t){return i.map(n.Apply0().Functor0())(a.Last)(y(F)(n)(r)(t))}}}),L=function(n){return function(r){return function(t){return function(u){return w(n)(r)(i.map(n.Functor0())(t)(u))}}}},g=function(n){return function(r){return function(t){return function(u){return v.stateR(y(n)(v.applicativeStateR)(function(n){return function(t){return r(t)(n)}})(u))(t)}}}},J=function(n){return function(r){return function(t){return function(u){return g(n)(function(n){return function(t){var u=r(t)(n);return{accum:u,value:u}}})(t)(u).value}}}},N=function(n){return function(r){return function(t){return function(u){return v.stateL(y(n)(v.applicativeStateL)(function(n){return function(t){return r(t)(n)}})(u))(t)}}}},T=function(n){return function(r){return function(t){return function(u){return N(n)(function(n){return function(t){var u=r(n)(t);return{accum:u,value:u}}})(t)(u).value}}}},R=function(n){return function(r){return function(t){return function(u){return y(r)(n)(u)(t)}}}};module.exports={Traversable:m,traverse:y,sequence:w,traverseDefault:L,sequenceDefault:M,for:R,scanl:T,scanr:J,mapAccumL:N,mapAccumR:g,traversableArray:x,traversableMaybe:F,traversableFirst:h,traversableLast:C,traversableAdditive:q,traversableDual:b,traversableConj:D,traversableDisj:j,traversableMultiplicative:A};
+},{"./foreign.js":"oRQn","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Data.Foldable/index.js":"eVDl","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Maybe.First/index.js":"W/l6","../Data.Maybe.Last/index.js":"aQky","../Data.Monoid.Additive/index.js":"fHyj","../Data.Monoid.Conj/index.js":"U/G5","../Data.Monoid.Disj/index.js":"9bR7","../Data.Monoid.Dual/index.js":"ULyl","../Data.Monoid.Multiplicative/index.js":"y5cd","../Data.Traversable.Accum.Internal/index.js":"LbSr"}],"8nb9":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Category/index.js"),u=require("../Data.Bifoldable/index.js"),e=require("../Data.Bifunctor/index.js"),i=require("../Data.Bifunctor.Clown/index.js"),o=require("../Data.Bifunctor.Flip/index.js"),c=require("../Data.Bifunctor.Joker/index.js"),f=require("../Data.Bifunctor.Product/index.js"),a=require("../Data.Bifunctor.Wrap/index.js"),l=require("../Data.Functor/index.js"),p=require("../Data.Traversable/index.js"),b=function(n,r,t,u){this.Bifoldable1=n,this.Bifunctor0=r,this.bisequence=t,this.bitraverse=u},s=function(n){return n.bitraverse},d=function(r){return function(t){return function(u){return function(e){return s(r)(t)(e)(n.pure(t))(u)}}}},F=function(r){return function(t){return function(u){return s(r)(t)(u)(n.pure(t))}}},v=function(r){return function(t){return function(u){return function(e){return s(r)(t)(n.pure(t))(e)(u)}}}},y=function(r){return function(t){return s(r)(t)(n.pure(t))}},B=function(n){return new b(function(){return u.bifoldableJoker(n.Foldable1())},function(){return c.bifunctorJoker(n.Functor0())},function(r){return function(t){return l.map(r.Apply0().Functor0())(c.Joker)(p.sequence(n)(r)(t))}},function(r){return function(t){return function(t){return function(u){return l.map(r.Apply0().Functor0())(c.Joker)(p.traverse(n)(r)(t)(u))}}}})},q=function(n){return new b(function(){return u.bifoldableClown(n.Foldable1())},function(){return i.bifunctorClown(n.Functor0())},function(r){return function(t){return l.map(r.Apply0().Functor0())(i.Clown)(p.sequence(n)(r)(t))}},function(r){return function(t){return function(u){return function(u){return l.map(r.Apply0().Functor0())(i.Clown)(p.traverse(n)(r)(t)(u))}}}})},A=function(n){return function(r){return s(n)(r)(t.identity(t.categoryFn))(t.identity(t.categoryFn))}},x=function(n){return n.bisequence},j=function(n){return new b(function(){return u.bifoldableFlip(n.Bifoldable1())},function(){return o.bifunctorFlip(n.Bifunctor0())},function(r){return function(t){return l.map(r.Apply0().Functor0())(o.Flip)(x(n)(r)(t))}},function(r){return function(t){return function(u){return function(e){return l.map(r.Apply0().Functor0())(o.Flip)(s(n)(r)(u)(t)(e))}}}})},m=function(n){return function(t){return new b(function(){return u.bifoldableProduct(n.Bifoldable1())(t.Bifoldable1())},function(){return f.bifunctorProduct(n.Bifunctor0())(t.Bifunctor0())},function(u){return function(e){return r.apply(u.Apply0())(l.map(u.Apply0().Functor0())(f.Product.create)(x(n)(u)(e.value0)))(x(t)(u)(e.value1))}},function(u){return function(e){return function(i){return function(o){return r.apply(u.Apply0())(l.map(u.Apply0().Functor0())(f.Product.create)(s(n)(u)(e)(i)(o.value0)))(s(t)(u)(e)(i)(o.value1))}}}})}},w=function(n){return new b(function(){return u.bifoldableWrap(n.Bifoldable1())},function(){return a.bifunctorWrap(n.Bifunctor0())},function(r){return function(t){return l.map(r.Apply0().Functor0())(a.Wrap)(x(n)(r)(t))}},function(r){return function(t){return function(u){return function(e){return l.map(r.Apply0().Functor0())(a.Wrap)(s(n)(r)(t)(u)(e))}}}})},D=function(n){return function(r){return function(t){return function(u){return function(i){return x(n)(r)(e.bimap(n.Bifunctor0())(t)(u)(i))}}}}},C=function(n){return function(r){return function(t){return function(u){return function(e){return s(n)(r)(u)(e)(t)}}}}};module.exports={Bitraversable:b,bitraverse:s,bisequence:x,bitraverseDefault:D,bisequenceDefault:A,ltraverse:F,rtraverse:y,bifor:C,lfor:d,rfor:v,bitraversableClown:q,bitraversableJoker:B,bitraversableFlip:j,bitraversableProduct:m,bitraversableWrap:w};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Data.Bifoldable/index.js":"wjQo","../Data.Bifunctor/index.js":"e2Wc","../Data.Bifunctor.Clown/index.js":"Wuz6","../Data.Bifunctor.Flip/index.js":"EM73","../Data.Bifunctor.Joker/index.js":"O/Oh","../Data.Bifunctor.Product/index.js":"U+97","../Data.Bifunctor.Wrap/index.js":"U78Q","../Data.Functor/index.js":"+0AE","../Data.Traversable/index.js":"n7EE"}],"ZgoH":[function(require,module,exports) {
+"use strict";exports.mapWithIndexArray=function(r){return function(t){for(var n=t.length,e=Array(n),u=0;u<n;u++)e[u]=r(u)(t[u]);return e}};
+},{}],"OHRN":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),t=require("../Data.Function/index.js"),r=require("../Data.Functor/index.js"),i=require("../Data.Maybe/index.js"),u=require("../Data.Maybe.First/index.js"),e=require("../Data.Maybe.Last/index.js"),o=require("../Data.Monoid.Additive/index.js"),a=require("../Data.Monoid.Conj/index.js"),c=require("../Data.Monoid.Disj/index.js"),f=require("../Data.Monoid.Dual/index.js"),d=require("../Data.Monoid.Multiplicative/index.js"),s=require("../Data.Unit/index.js"),x=function(n,t){this.Functor0=n,this.mapWithIndex=t},j=function(n){return n.mapWithIndex},D=function(n){return function(r){return j(n)(t.const(r))}},p=new x(function(){return d.functorMultiplicative},function(n){return r.map(d.functorMultiplicative)(n(s.unit))}),h=new x(function(){return i.functorMaybe},function(n){return r.map(i.functorMaybe)(n(s.unit))}),M=new x(function(){return e.functorLast},function(n){return r.map(e.functorLast)(n(s.unit))}),l=new x(function(){return u.functorFirst},function(n){return r.map(u.functorFirst)(n(s.unit))}),m=new x(function(){return f.functorDual},function(n){return r.map(f.functorDual)(n(s.unit))}),I=new x(function(){return c.functorDisj},function(n){return r.map(c.functorDisj)(n(s.unit))}),W=new x(function(){return a.functorConj},function(n){return r.map(a.functorConj)(n(s.unit))}),q=new x(function(){return r.functorArray},n.mapWithIndexArray),v=new x(function(){return o.functorAdditive},function(n){return r.map(o.functorAdditive)(n(s.unit))});module.exports={FunctorWithIndex:x,mapWithIndex:j,mapDefault:D,functorWithIndexArray:q,functorWithIndexMaybe:h,functorWithIndexFirst:l,functorWithIndexLast:M,functorWithIndexAdditive:v,functorWithIndexDual:m,functorWithIndexConj:W,functorWithIndexDisj:I,functorWithIndexMultiplicative:p};
+},{"./foreign.js":"ZgoH","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Maybe.First/index.js":"W/l6","../Data.Maybe.Last/index.js":"aQky","../Data.Monoid.Additive/index.js":"fHyj","../Data.Monoid.Conj/index.js":"U/G5","../Data.Monoid.Disj/index.js":"9bR7","../Data.Monoid.Dual/index.js":"ULyl","../Data.Monoid.Multiplicative/index.js":"y5cd","../Data.Unit/index.js":"NhVk"}],"9Efi":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),r=require("../Control.Bind/index.js"),u=require("../Control.Category/index.js"),e=require("../Data.Foldable/index.js"),i=require("../Data.Function/index.js"),o=require("../Data.FunctorWithIndex/index.js"),f=require("../Data.Maybe/index.js"),l=require("../Data.Monoid/index.js"),d=require("../Data.Monoid.Conj/index.js"),a=require("../Data.Monoid.Disj/index.js"),c=require("../Data.Monoid.Dual/index.js"),p=require("../Data.Monoid.Endo/index.js"),b=require("../Data.Newtype/index.js"),x=require("../Data.Semigroup/index.js"),s=require("../Data.Unit/index.js"),h=function(){function n(n,t){this.value0=n,this.value1=t}return n.create=function(t){return function(r){return new n(t,r)}},n}(),D=function(n,t,r,u){this.Foldable0=n,this.foldMapWithIndex=t,this.foldlWithIndex=r,this.foldrWithIndex=u},I=function(n){return n.foldrWithIndex},W=function(r){return function(u){return function(e){return I(u)(function(n){var u=t.applySecond(r.Apply0()),i=e(n);return function(n){return u(i(n))}})(n.pure(r)(s.unit))}}},j=function(n){return function(t){return i.flip(W(n)(t))}},M=function(n){return function(t){return I(n)(i.const(t))}},v=function(n){return n.foldlWithIndex},y=function(n){return function(t){return v(n)(i.const(t))}},w=new D(function(){return e.foldableMultiplicative},function(n){return function(t){return e.foldMap(e.foldableMultiplicative)(n)(t(s.unit))}},function(n){return e.foldl(e.foldableMultiplicative)(n(s.unit))},function(n){return e.foldr(e.foldableMultiplicative)(n(s.unit))}),m=new D(function(){return e.foldableMaybe},function(n){return function(t){return e.foldMap(e.foldableMaybe)(n)(t(s.unit))}},function(n){return e.foldl(e.foldableMaybe)(n(s.unit))},function(n){return e.foldr(e.foldableMaybe)(n(s.unit))}),q=new D(function(){return e.foldableLast},function(n){return function(t){return e.foldMap(e.foldableLast)(n)(t(s.unit))}},function(n){return e.foldl(e.foldableLast)(n(s.unit))},function(n){return e.foldr(e.foldableLast)(n(s.unit))}),A=new D(function(){return e.foldableFirst},function(n){return function(t){return e.foldMap(e.foldableFirst)(n)(t(s.unit))}},function(n){return e.foldl(e.foldableFirst)(n(s.unit))},function(n){return e.foldr(e.foldableFirst)(n(s.unit))}),C=new D(function(){return e.foldableDual},function(n){return function(t){return e.foldMap(e.foldableDual)(n)(t(s.unit))}},function(n){return e.foldl(e.foldableDual)(n(s.unit))},function(n){return e.foldr(e.foldableDual)(n(s.unit))}),F=new D(function(){return e.foldableDisj},function(n){return function(t){return e.foldMap(e.foldableDisj)(n)(t(s.unit))}},function(n){return e.foldl(e.foldableDisj)(n(s.unit))},function(n){return e.foldr(e.foldableDisj)(n(s.unit))}),g=new D(function(){return e.foldableConj},function(n){return function(t){return e.foldMap(e.foldableConj)(n)(t(s.unit))}},function(n){return e.foldl(e.foldableConj)(n(s.unit))},function(n){return e.foldr(e.foldableConj)(n(s.unit))}),E=new D(function(){return e.foldableAdditive},function(n){return function(t){return e.foldMap(e.foldableAdditive)(n)(t(s.unit))}},function(n){return e.foldl(e.foldableAdditive)(n(s.unit))},function(n){return e.foldr(e.foldableAdditive)(n(s.unit))}),L=function(t){return function(u){return function(e){return function(o){return v(t)(function(n){return function(t){return function(o){return r.bind(u.Bind1())(t)(i.flip(e(n))(o))}}})(n.pure(u.Applicative0())(o))}}}},S=function(n){return function(t){return function(r){return I(n)(function(n){return function(u){return function(e){return x.append(t.Semigroup0())(r(n)(u))(e)}}})(l.mempty(t))}}},N=new D(function(){return e.foldableArray},function(n){return S(N)(n)},function(n){return function(t){var r=e.foldl(e.foldableArray)(function(t){return function(r){return n(r.value0)(t)(r.value1)}})(t),u=o.mapWithIndex(o.functorWithIndexArray)(h.create);return function(n){return r(u(n))}}},function(n){return function(t){var r=e.foldr(e.foldableArray)(function(t){return function(r){return n(t.value0)(t.value1)(r)}})(t),u=o.mapWithIndex(o.functorWithIndexArray)(h.create);return function(n){return r(u(n))}}}),B=function(n){return function(t){return function(r){return v(n)(function(n){return function(u){return function(e){return x.append(t.Semigroup0())(u)(r(n)(e))}}})(l.mempty(t))}}},_=function(n){return n.foldMapWithIndex},J=function(n){return function(t){return function(r){return function(e){return b.unwrap(b.newtypeEndo)(b.unwrap(b.newtypeDual)(_(n)(c.monoidDual(p.monoidEndo(u.categoryFn)))(function(n){var r=i.flip(t(n));return function(n){return c.Dual(p.Endo(r(n)))}})(e)))(r)}}}},R=function(n){return function(t){return function(r){return function(e){return b.unwrap(b.newtypeEndo)(_(n)(p.monoidEndo(u.categoryFn))(function(n){var r=t(n);return function(n){return p.Endo(r(n))}})(e))(r)}}}},U=function(n){return function(t){return function(r){return function(e){return function(i){return b.unwrap(b.newtypeEndo)(_(n)(p.monoidEndo(u.categoryFn))(function(n){return function(u){return function(i){return x.append(t)(r)(x.append(t)(e(n)(u))(i))}}})(i))(r)}}}}},k=function(n){return function(t){return function(r){return _(n)(t)(i.const(r))}}},z=function(n){return function(t){return v(n)(function(n){return function(r){return function(u){return r instanceof f.Nothing&&t(n)(u)?new f.Just({index:n,value:u}):r}}})(f.Nothing.value)}},G=function(n){return function(t){return function(r){var u=b.unwrap(b.newtypeDisj),e=_(n)(a.monoidDisj(t))(function(n){var t=r(n);return function(n){return a.Disj(t(n))}});return function(n){return u(e(n))}}}},H=function(n){return function(t){return function(r){var u=b.unwrap(b.newtypeConj),e=_(n)(d.monoidConj(t))(function(n){var t=r(n);return function(n){return d.Conj(t(n))}});return function(n){return u(e(n))}}}};module.exports={FoldableWithIndex:D,foldrWithIndex:I,foldlWithIndex:v,foldMapWithIndex:_,foldrWithIndexDefault:R,foldlWithIndexDefault:J,foldMapWithIndexDefaultR:S,foldMapWithIndexDefaultL:B,foldWithIndexM:L,traverseWithIndex_:W,forWithIndex_:j,surroundMapWithIndex:U,allWithIndex:H,anyWithIndex:G,findWithIndex:z,foldrDefault:M,foldlDefault:y,foldMapDefault:k,foldableWithIndexArray:N,foldableWithIndexMaybe:m,foldableWithIndexFirst:A,foldableWithIndexLast:q,foldableWithIndexAdditive:E,foldableWithIndexDual:C,foldableWithIndexDisj:F,foldableWithIndexConj:g,foldableWithIndexMultiplicative:w};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Monoid.Conj/index.js":"U/G5","../Data.Monoid.Disj/index.js":"9bR7","../Data.Monoid.Dual/index.js":"ULyl","../Data.Monoid.Endo/index.js":"2o47","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Unit/index.js":"NhVk"}],"V4EF":[function(require,module,exports) {
+"use strict";var n=require("../Data.FoldableWithIndex/index.js"),t=require("../Data.Function/index.js"),r=require("../Data.FunctorWithIndex/index.js"),e=require("../Data.Traversable/index.js"),u=require("../Data.Traversable.Accum.Internal/index.js"),i=require("../Data.Unit/index.js"),a=function(n,t,r,e){this.FoldableWithIndex1=n,this.FunctorWithIndex0=t,this.Traversable2=r,this.traverseWithIndex=e},c=function(n){return function(t){return function(u){var i=e.sequence(n.Traversable2())(t),a=r.mapWithIndex(n.FunctorWithIndex0())(u);return function(n){return i(a(n))}}}},o=function(n){return n.traverseWithIndex},f=function(n){return function(r){return function(e){return o(n)(r)(t.const(e))}}},l=new a(function(){return n.foldableWithIndexMultiplicative},function(){return r.functorWithIndexMultiplicative},function(){return e.traversableMultiplicative},function(n){return function(t){return e.traverse(e.traversableMultiplicative)(n)(t(i.unit))}}),s=new a(function(){return n.foldableWithIndexMaybe},function(){return r.functorWithIndexMaybe},function(){return e.traversableMaybe},function(n){return function(t){return e.traverse(e.traversableMaybe)(n)(t(i.unit))}}),d=new a(function(){return n.foldableWithIndexLast},function(){return r.functorWithIndexLast},function(){return e.traversableLast},function(n){return function(t){return e.traverse(e.traversableLast)(n)(t(i.unit))}}),v=new a(function(){return n.foldableWithIndexFirst},function(){return r.functorWithIndexFirst},function(){return e.traversableFirst},function(n){return function(t){return e.traverse(e.traversableFirst)(n)(t(i.unit))}}),x=new a(function(){return n.foldableWithIndexDual},function(){return r.functorWithIndexDual},function(){return e.traversableDual},function(n){return function(t){return e.traverse(e.traversableDual)(n)(t(i.unit))}}),b=new a(function(){return n.foldableWithIndexDisj},function(){return r.functorWithIndexDisj},function(){return e.traversableDisj},function(n){return function(t){return e.traverse(e.traversableDisj)(n)(t(i.unit))}}),h=new a(function(){return n.foldableWithIndexConj},function(){return r.functorWithIndexConj},function(){return e.traversableConj},function(n){return function(t){return e.traverse(e.traversableConj)(n)(t(i.unit))}}),I=new a(function(){return n.foldableWithIndexArray},function(){return r.functorWithIndexArray},function(){return e.traversableArray},function(n){return c(I)(n)}),W=new a(function(){return n.foldableWithIndexAdditive},function(){return r.functorWithIndexAdditive},function(){return e.traversableAdditive},function(n){return function(t){return e.traverse(e.traversableAdditive)(n)(t(i.unit))}}),D=function(n){return function(t){return function(r){return function(e){return u.stateR(o(n)(u.applicativeStateR)(function(n){return function(r){return function(e){return t(n)(e)(r)}}})(e))(r)}}}},j=function(n){return function(t){return function(r){return function(e){return D(n)(function(n){return function(r){return function(e){var u=t(n)(e)(r);return{accum:u,value:u}}}})(r)(e).value}}}},p=function(n){return function(t){return function(r){return function(e){return u.stateL(o(n)(u.applicativeStateL)(function(n){return function(r){return function(e){return t(n)(e)(r)}}})(e))(r)}}}},A=function(n){return function(t){return function(r){return function(e){return p(n)(function(n){return function(r){return function(e){var u=t(n)(r)(e);return{accum:u,value:u}}}})(r)(e).value}}}},F=function(n){return function(r){return t.flip(o(r)(n))}};module.exports={TraversableWithIndex:a,traverseWithIndex:o,traverseWithIndexDefault:c,forWithIndex:F,scanlWithIndex:A,mapAccumLWithIndex:p,scanrWithIndex:j,mapAccumRWithIndex:D,traverseDefault:f,traversableWithIndexArray:I,traversableWithIndexMaybe:s,traversableWithIndexFirst:v,traversableWithIndexLast:d,traversableWithIndexAdditive:W,traversableWithIndexDual:x,traversableWithIndexConj:h,traversableWithIndexDisj:b,traversableWithIndexMultiplicative:l};
+},{"../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Traversable/index.js":"n7EE","../Data.Traversable.Accum.Internal/index.js":"LbSr","../Data.Unit/index.js":"NhVk"}],"B2JL":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),t=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),r=require("../Control.Bind/index.js"),u=require("../Control.Extend/index.js"),o=require("../Control.Monad/index.js"),i=require("../Data.Bifoldable/index.js"),a=require("../Data.Bifunctor/index.js"),c=require("../Data.Bitraversable/index.js"),f=require("../Data.Bounded/index.js"),l=require("../Data.Eq/index.js"),s=require("../Data.Foldable/index.js"),m=require("../Data.FoldableWithIndex/index.js"),h=require("../Data.Function/index.js"),d=require("../Data.Functor/index.js"),w=require("../Data.Functor.Invariant/index.js"),p=require("../Data.FunctorWithIndex/index.js"),E=require("../Data.Maybe/index.js"),v=require("../Data.Monoid/index.js"),D=require("../Data.Ord/index.js"),F=require("../Data.Ordering/index.js"),x=require("../Data.Semigroup/index.js"),q=require("../Data.Show/index.js"),b=require("../Data.Traversable/index.js"),j=require("../Data.TraversableWithIndex/index.js"),y=require("../Data.Unit/index.js"),A=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),I=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),B=function(n){return function(t){return new q.Show(function(e){if(e instanceof A)return"(Left "+q.show(n)(e.value0)+")";if(e instanceof I)return"(Right "+q.show(t)(e.value0)+")";throw new Error("Failed pattern match at Data.Either (line 163, column 1 - line 165, column 46): "+[e.constructor.name])})}},g=function(n){return E["maybe'"](function(t){return A.create(n(t))})(I.create)},W=function(n){return E.maybe(new A(n))(I.create)},C=new d.Functor(function(n){return function(t){if(t instanceof A)return new A(t.value0);if(t instanceof I)return new I(n(t.value0));throw new Error("Failed pattern match at Data.Either (line 38, column 1 - line 38, column 52): "+[t.constructor.name])}}),O=new p.FunctorWithIndex(function(){return C},function(n){return d.map(C)(n(y.unit))}),T=new w.Invariant(w.imapF(C)),L=function(n){return function(n){if(n instanceof I)return n.value0;throw new Error("Failed pattern match at Data.Either (line 261, column 1 - line 261, column 52): "+[n.constructor.name])}},M=function(n){return function(n){if(n instanceof A)return n.value0;throw new Error("Failed pattern match at Data.Either (line 256, column 1 - line 256, column 51): "+[n.constructor.name])}},R=new s.Foldable(function(n){return function(t){return function(e){if(e instanceof A)return v.mempty(n);if(e instanceof I)return t(e.value0);throw new Error("Failed pattern match at Data.Either (line 187, column 1 - line 193, column 28): "+[t.constructor.name,e.constructor.name])}}},function(n){return function(t){return function(e){if(e instanceof A)return t;if(e instanceof I)return n(t)(e.value0);throw new Error("Failed pattern match at Data.Either (line 187, column 1 - line 193, column 28): "+[n.constructor.name,t.constructor.name,e.constructor.name])}}},function(n){return function(t){return function(e){if(e instanceof A)return t;if(e instanceof I)return n(e.value0)(t);throw new Error("Failed pattern match at Data.Either (line 187, column 1 - line 193, column 28): "+[n.constructor.name,t.constructor.name,e.constructor.name])}}}),S=new m.FoldableWithIndex(function(){return R},function(n){return function(t){return function(e){if(e instanceof A)return v.mempty(n);if(e instanceof I)return t(y.unit)(e.value0);throw new Error("Failed pattern match at Data.Either (line 195, column 1 - line 201, column 42): "+[t.constructor.name,e.constructor.name])}}},function(n){return function(t){return function(e){if(e instanceof A)return t;if(e instanceof I)return n(y.unit)(t)(e.value0);throw new Error("Failed pattern match at Data.Either (line 195, column 1 - line 201, column 42): "+[n.constructor.name,t.constructor.name,e.constructor.name])}}},function(n){return function(t){return function(e){if(e instanceof A)return t;if(e instanceof I)return n(y.unit)(e.value0)(t);throw new Error("Failed pattern match at Data.Either (line 195, column 1 - line 201, column 42): "+[n.constructor.name,t.constructor.name,e.constructor.name])}}}),G=new b.Traversable(function(){return R},function(){return C},function(n){return function(e){if(e instanceof A)return t.pure(n)(new A(e.value0));if(e instanceof I)return d.map(n.Apply0().Functor0())(I.create)(e.value0);throw new Error("Failed pattern match at Data.Either (line 211, column 1 - line 215, column 36): "+[e.constructor.name])}},function(n){return function(e){return function(r){if(r instanceof A)return t.pure(n)(new A(r.value0));if(r instanceof I)return d.map(n.Apply0().Functor0())(I.create)(e(r.value0));throw new Error("Failed pattern match at Data.Either (line 211, column 1 - line 215, column 36): "+[e.constructor.name,r.constructor.name])}}}),J=new j.TraversableWithIndex(function(){return S},function(){return O},function(){return G},function(n){return function(e){return function(r){if(r instanceof A)return t.pure(n)(new A(r.value0));if(r instanceof I)return d.map(n.Apply0().Functor0())(I.create)(e(y.unit)(r.value0));throw new Error("Failed pattern match at Data.Either (line 217, column 1 - line 219, column 53): "+[e.constructor.name,r.constructor.name])}}}),N=new u.Extend(function(){return C},function(n){return function(t){return t instanceof A?new A(t.value0):new I(n(t))}}),U=function(n){return function(t){return new l.Eq(function(e){return function(r){return e instanceof A&&r instanceof A?l.eq(n)(e.value0)(r.value0):e instanceof I&&r instanceof I&&l.eq(t)(e.value0)(r.value0)}})}},k=function(n){return function(t){return new D.Ord(function(){return U(n.Eq0())(t.Eq0())},function(e){return function(r){if(e instanceof A&&r instanceof A)return D.compare(n)(e.value0)(r.value0);if(e instanceof A)return F.LT.value;if(r instanceof A)return F.GT.value;if(e instanceof I&&r instanceof I)return D.compare(t)(e.value0)(r.value0);throw new Error("Failed pattern match at Data.Either (line 179, column 1 - line 179, column 64): "+[e.constructor.name,r.constructor.name])}})}},z=function(n){return new l.Eq1(function(t){return l.eq(U(n)(t))})},H=function(n){return new D.Ord1(function(){return z(n.Eq0())},function(t){return D.compare(k(n)(t))})},K=function(n){return function(t){return function(e){if(e instanceof A)return n(e.value0);if(e instanceof I)return t(e.value0);throw new Error("Failed pattern match at Data.Either (line 238, column 1 - line 238, column 64): "+[n.constructor.name,t.constructor.name,e.constructor.name])}}},P=K(h.const(E.Nothing.value))(E.Just.create),Q=K(h.const(!0))(h.const(!1)),V=K(h.const(!1))(h.const(!0)),X=function(t){return function(e){return function(r){return n.alt(t)(d.map(t.Functor0())(A.create)(e))(d.map(t.Functor0())(I.create)(r))}}},Y=function(n){return function(t){return new f.Bounded(function(){return k(n.Ord0())(t.Ord0())},new A(f.bottom(n)),new I(f.top(t)))}},Z=new a.Bifunctor(function(n){return function(t){return function(e){if(e instanceof A)return new A(n(e.value0));if(e instanceof I)return new I(t(e.value0));throw new Error("Failed pattern match at Data.Either (line 46, column 1 - line 48, column 36): "+[n.constructor.name,t.constructor.name,e.constructor.name])}}}),$=new i.Bifoldable(function(n){return function(n){return function(t){return function(e){if(e instanceof A)return n(e.value0);if(e instanceof I)return t(e.value0);throw new Error("Failed pattern match at Data.Either (line 203, column 1 - line 209, column 32): "+[n.constructor.name,t.constructor.name,e.constructor.name])}}}},function(n){return function(t){return function(e){return function(r){if(r instanceof A)return n(e)(r.value0);if(r instanceof I)return t(e)(r.value0);throw new Error("Failed pattern match at Data.Either (line 203, column 1 - line 209, column 32): "+[n.constructor.name,t.constructor.name,e.constructor.name,r.constructor.name])}}}},function(n){return function(t){return function(e){return function(r){if(r instanceof A)return n(r.value0)(e);if(r instanceof I)return t(r.value0)(e);throw new Error("Failed pattern match at Data.Either (line 203, column 1 - line 209, column 32): "+[n.constructor.name,t.constructor.name,e.constructor.name,r.constructor.name])}}}}),_=new c.Bitraversable(function(){return $},function(){return Z},function(n){return function(t){if(t instanceof A)return d.map(n.Apply0().Functor0())(A.create)(t.value0);if(t instanceof I)return d.map(n.Apply0().Functor0())(I.create)(t.value0);throw new Error("Failed pattern match at Data.Either (line 221, column 1 - line 225, column 37): "+[t.constructor.name])}},function(n){return function(t){return function(e){return function(r){if(r instanceof A)return d.map(n.Apply0().Functor0())(A.create)(t(r.value0));if(r instanceof I)return d.map(n.Apply0().Functor0())(I.create)(e(r.value0));throw new Error("Failed pattern match at Data.Either (line 221, column 1 - line 225, column 37): "+[t.constructor.name,e.constructor.name,r.constructor.name])}}}}),nn=new e.Apply(function(){return C},function(n){return function(t){if(n instanceof A)return new A(n.value0);if(n instanceof I)return d.map(C)(n.value0)(t);throw new Error("Failed pattern match at Data.Either (line 82, column 1 - line 84, column 30): "+[n.constructor.name,t.constructor.name])}}),tn=new r.Bind(function(){return nn},K(function(n){return function(t){return new A(n)}})(function(n){return function(t){return t(n)}})),en=function(n){return new x.Semigroup(function(t){return function(r){return e.apply(nn)(d.map(C)(x.append(n))(t))(r)}})},rn=new t.Applicative(function(){return nn},I.create),un=new o.Monad(function(){return rn},function(){return tn}),on=new n.Alt(function(){return C},function(n){return function(t){return n instanceof A?t:n}});module.exports={Left:A,Right:I,either:K,choose:X,isLeft:Q,isRight:V,fromLeft:M,fromRight:L,note:W,"note'":g,hush:P,functorEither:C,functorWithIndexEither:O,invariantEither:T,bifunctorEither:Z,applyEither:nn,applicativeEither:rn,altEither:on,bindEither:tn,monadEither:un,extendEither:N,showEither:B,eqEither:U,eq1Either:z,ordEither:k,ord1Either:H,boundedEither:Y,foldableEither:R,foldableWithIndexEither:S,bifoldableEither:$,traversableEither:G,traversableWithIndexEither:J,bitraversableEither:_,semigroupEither:en};
+},{"../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Extend/index.js":"JIoJ","../Control.Monad/index.js":"U/Ix","../Data.Bifoldable/index.js":"wjQo","../Data.Bifunctor/index.js":"e2Wc","../Data.Bitraversable/index.js":"8nb9","../Data.Bounded/index.js":"kcUU","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Functor.Invariant/index.js":"AXkC","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Unit/index.js":"NhVk"}],"bXvE":[function(require,module,exports) {
+"use strict";exports.pureE=function(n){return function(){return n}},exports.bindE=function(n){return function(r){return function(){return r(n())()}}},exports.untilE=function(n){return function(){for(;!n(););return{}}},exports.whileE=function(n){return function(r){return function(){for(;n();)r();return{}}}},exports.forE=function(n){return function(r){return function(t){return function(){for(var u=n;u<r;u++)t(u)()}}}},exports.foreachE=function(n){return function(r){return function(){for(var t=0,u=n.length;t<u;t++)r(n[t])()}}};
+},{}],"oTWB":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),i=require("../Control.Bind/index.js"),t=require("../Control.Monad/index.js"),o=require("../Data.Functor/index.js"),u=require("../Data.Monoid/index.js"),f=require("../Data.Semigroup/index.js"),c=new t.Monad(function(){return d},function(){return p}),p=new i.Bind(function(){return a},e.bindE),a=new r.Apply(function(){return E},t.ap(c)),d=new n.Applicative(function(){return a},e.pureE),E=new o.Functor(n.liftA1(d)),l=function(e){return new f.Semigroup(r.lift2(a)(f.append(e)))},s=function(n){return new u.Monoid(function(){return l(n.Semigroup0())},e.pureE(u.mempty(n)))};module.exports={functorEffect:E,applyEffect:a,applicativeEffect:d,bindEffect:p,monadEffect:c,semigroupEffect:l,monoidEffect:s,untilE:e.untilE,whileE:e.whileE,forE:e.forE,foreachE:e.foreachE};
+},{"./foreign.js":"bXvE","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Semigroup/index.js":"EsAJ"}],"OvLS":[function(require,module,exports) {
+"use strict";exports.showErrorImpl=function(r){return r.stack||r.toString()},exports.error=function(r){return new Error(r)},exports.message=function(r){return r.message},exports.name=function(r){return r.name||"Error"},exports.stackImpl=function(r){return function(t){return function(n){return n.stack?r(n.stack):t}}},exports.throwException=function(r){return function(){throw r}},exports.catchException=function(r){return function(t){return function(){try{return t()}catch(n){return n instanceof Error||"[object Error]"===Object.prototype.toString.call(n)?r(n)():r(new Error(n.toString()))()}}}};
+},{}],"0OCW":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),r=require("../Control.Applicative/index.js"),t=require("../Data.Either/index.js"),i=require("../Data.Functor/index.js"),o=require("../Data.Maybe/index.js"),n=require("../Data.Show/index.js"),a=require("../Effect/index.js"),c=function(o){return e.catchException((n=r.pure(a.applicativeEffect),function(e){return n(t.Left.create(e))}))(i.map(a.functorEffect)(t.Right.create)(o));var n},u=function(r){return e.throwException(e.error(r))},s=e.stackImpl(o.Just.create)(o.Nothing.value),p=new n.Show(e.showErrorImpl);module.exports={stack:s,throw:u,try:c,showError:p,error:e.error,message:e.message,name:e.name,throwException:e.throwException,catchException:e.catchException};
+},{"./foreign.js":"OvLS","../Control.Applicative/index.js":"qYya","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Show/index.js":"mFY7","../Effect/index.js":"oTWB"}],"L8Lk":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Bind/index.js"),t=require("../Data.Either/index.js"),o=require("../Data.Function/index.js"),e=require("../Data.Functor/index.js"),i=require("../Data.Maybe/index.js"),u=require("../Data.Unit/index.js"),a=require("../Effect/index.js"),c=require("../Effect.Exception/index.js"),f=function(n,r){this.Monad0=n,this.throwError=r},d=function(n,r){this.MonadThrow0=n,this.catchError=r},h=function(n){return n.throwError},s=new f(function(){return i.monadMaybe},o.const(i.Nothing.value)),l=new f(function(){return t.monadEither},t.Left.create),w=new f(function(){return a.monadEffect},c.throwException),E=new d(function(){return s},function(n){return function(r){if(n instanceof i.Nothing)return r(u.unit);if(n instanceof i.Just)return new i.Just(n.value0);throw new Error("Failed pattern match at Control.Monad.Error.Class (line 79, column 1 - line 81, column 33): "+[n.constructor.name,r.constructor.name])}}),m=new d(function(){return l},function(n){return function(r){if(n instanceof t.Left)return r(n.value0);if(n instanceof t.Right)return new t.Right(n.value0);throw new Error("Failed pattern match at Control.Monad.Error.Class (line 72, column 1 - line 74, column 35): "+[n.constructor.name,r.constructor.name])}}),M=new d(function(){return w},o.flip(c.catchException)),p=function(n){return n.catchError},x=function(n){return function(r){return function(t){return function(o){return p(n)(t)(function(t){var e=r(t);if(e instanceof i.Nothing)return h(n.MonadThrow0())(t);if(e instanceof i.Just)return o(e.value0);throw new Error("Failed pattern match at Control.Monad.Error.Class (line 57, column 5 - line 59, column 26): "+[e.constructor.name])})}}}},T=function(r){return function(o){return p(r)(e.map(r.MonadThrow0().Monad0().Bind1().Apply0().Functor0())(t.Right.create)(o))((i=n.pure(r.MonadThrow0().Monad0().Applicative0()),function(n){return i(t.Left.create(n))}));var i}},v=function(o){return function(e){return function(i){return function(u){return r.bind(o.MonadThrow0().Monad0().Bind1())(e)(function(e){return r.bind(o.MonadThrow0().Monad0().Bind1())(T(o)(u(e)))(function(u){return r.discard(r.discardUnit)(o.MonadThrow0().Monad0().Bind1())(i(e))(function(){return t.either(h(o.MonadThrow0()))(n.pure(o.MonadThrow0().Monad0().Applicative0()))(u)})})})}}}};module.exports={catchError:p,throwError:h,MonadThrow:f,MonadError:d,catchJust:x,try:T,withResource:v,monadThrowEither:l,monadErrorEither:m,monadThrowMaybe:s,monadErrorMaybe:E,monadThrowEffect:w,monadErrorEffect:M};
+},{"../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Data.Either/index.js":"B2JL","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Unit/index.js":"NhVk","../Effect/index.js":"oTWB","../Effect.Exception/index.js":"0OCW"}],"c2ZJ":[function(require,module,exports) {
+"use strict";var n=require("../Control.Category/index.js"),o=require("../Control.Monad/index.js"),e=require("../Control.Semigroupoid/index.js"),r=require("../Data.Functor/index.js"),t=function(n,o){this.Monad0=n,this.ask=o},i=function(n,o){this.MonadAsk0=n,this.local=o},u=new t(function(){return o.monadFn},n.identity(n.categoryFn)),a=new i(function(){return u},e.composeFlipped(e.semigroupoidFn)),d=function(n){return n.local},s=function(n){return n.ask},c=function(n){return function(o){return r.map(n.Monad0().Bind1().Apply0().Functor0())(o)(s(n))}};module.exports={ask:s,local:d,MonadAsk:t,asks:c,MonadReader:i,monadAskFun:u,monadReaderFun:a};
+},{"../Control.Category/index.js":"IAi2","../Control.Monad/index.js":"U/Ix","../Control.Semigroupoid/index.js":"/riR","../Data.Functor/index.js":"+0AE"}],"U0zO":[function(require,module,exports) {
+"use strict";var t=function(t,e){this.Extend0=t,this.extract=e},e=function(t){return t.extract};module.exports={Comonad:t,extract:e};
+},{}],"fhx3":[function(require,module,exports) {
+"use strict";var n=require("../Data.Bounded/index.js"),e=require("../Data.Monoid/index.js"),r=require("../Data.Newtype/index.js"),t=require("../Data.Ord/index.js"),u=require("../Data.Semigroup/index.js"),o=require("../Data.Show/index.js"),i=function(n){return n},a=function(n){return new o.Show(function(e){return"(Max "+o.show(n)(e)+")"})},c=function(n){return new u.Semigroup(function(e){return function(r){return t.max(n)(e)(r)}})},d=new r.Newtype(function(n){return n},i),x=function(r){return new e.Monoid(function(){return c(r.Ord0())},n.bottom(r))},f=function(n){return n},s=function(n){return new t.Ord(function(){return f(n.Eq0())},function(e){return function(r){return t.compare(n)(e)(r)}})};module.exports={Max:i,newtypeMax:d,eqMax:f,ordMax:s,semigroupMax:c,monoidMax:x,showMax:a};
+},{"../Data.Bounded/index.js":"kcUU","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"X+tn":[function(require,module,exports) {
+"use strict";var n=require("../Data.Bounded/index.js"),e=require("../Data.Monoid/index.js"),r=require("../Data.Newtype/index.js"),i=require("../Data.Ord/index.js"),t=require("../Data.Semigroup/index.js"),u=require("../Data.Show/index.js"),o=function(n){return n},c=function(n){return new u.Show(function(e){return"(Min "+u.show(n)(e)+")"})},d=function(n){return new t.Semigroup(function(e){return function(r){return i.min(n)(e)(r)}})},a=new r.Newtype(function(n){return n},o),f=function(r){return new e.Monoid(function(){return d(r.Ord0())},n.top(r))},s=function(n){return n},w=function(n){return new i.Ord(function(){return s(n.Eq0())},function(e){return function(r){return i.compare(n)(e)(r)}})};module.exports={Min:o,newtypeMin:a,eqMin:s,ordMin:w,semigroupMin:d,monoidMin:f,showMin:c};
+},{"../Data.Bounded/index.js":"kcUU","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"ht+A":[function(require,module,exports) {
+"use strict";var n=require("../Control.Apply/index.js"),t=require("../Control.Category/index.js"),r=require("../Data.Foldable/index.js"),u=require("../Data.Function/index.js"),e=require("../Data.Functor/index.js"),i=require("../Data.Newtype/index.js"),o=require("../Data.Ord.Max/index.js"),f=require("../Data.Ord.Min/index.js"),c=require("../Data.Semigroup/index.js"),a=require("../Data.Unit/index.js"),l=function(n){return n},d=function(n){return n},p=function(n,t,r){this.Foldable0=n,this.fold1=t,this.foldMap1=r},s=function(n){return new c.Semigroup(function(t){return function(r){return l(function(u){return c.append(n)(t(u))(c.append(n)(u)(r(u)))})}})},x=function(t){return new c.Semigroup(function(r){return function(u){return n.applySecond(t)(r)(u)}})},M=function(n){return n},y=function(n){return n},m=function(n){return n.foldMap1},D=function(n){return function(t){return function(r){return function(e){return function(i){return M(m(n)(s(t))(function(n){return l(u.const(e(n)))})(i))(r)}}}}},q=function(n){return function(r){return u.flip(D(n)(r))(t.identity(t.categoryFn))}},F=function(n){return function(t){return i.ala(e.functorFn)(o.newtypeMax)(o.newtypeMax)(o.Max)(m(t)(o.semigroupMax(n)))}},g=function(n){return function(t){return i.ala(e.functorFn)(f.newtypeMin)(f.newtypeMin)(f.Min)(m(t)(f.semigroupMin(n)))}},j=function(n){return function(t){return function(r){return function(u){return e.voidRight(t.Functor0())(a.unit)(y(m(n)(x(t))(function(n){return d(r(n))})(u)))}}}},w=function(n){return function(t){return u.flip(j(n)(t))}},b=function(n){return function(r){return j(n)(r)(t.identity(t.categoryFn))}},v=function(n){return function(r){return m(n)(r)(t.identity(t.categoryFn))}},h=new p(function(){return r.foldableDual},function(n){return v(h)(n)},function(n){return function(n){return function(t){return n(t)}}}),S=new p(function(){return r.foldableMultiplicative},function(n){return v(S)(n)},function(n){return function(n){return function(t){return n(t)}}}),C=function(n){return n.fold1},_=function(n){return function(t){return function(r){return function(u){var i=C(n)(r),o=e.map(t)(u);return function(n){return i(o(n))}}}}};module.exports={Foldable1:p,foldMap1:m,fold1:C,traverse1_:j,for1_:w,sequence1_:b,foldMap1Default:_,fold1Default:v,intercalate:q,intercalateMap:D,maximum:F,minimum:g,foldableDual:h,foldableMultiplicative:S};
+},{"../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Ord.Max/index.js":"fhx3","../Data.Ord.Min/index.js":"X+tn","../Data.Semigroup/index.js":"EsAJ","../Data.Unit/index.js":"NhVk"}],"qkfi":[function(require,module,exports) {
+"use strict";var e=require("../Control.Category/index.js"),r=require("../Data.Functor/index.js"),n=require("../Data.Monoid.Dual/index.js"),t=require("../Data.Monoid.Multiplicative/index.js"),u=require("../Data.Semigroup.Foldable/index.js"),i=require("../Data.Traversable/index.js"),a=function(e,r,n,t){this.Foldable10=e,this.Traversable1=r,this.sequence1=n,this.traverse1=t},o=function(e){return e.traverse1},c=function(r){return function(n){return o(r)(n)(e.identity(e.categoryFn))}},l=new a(function(){return u.foldableDual},function(){return i.traversableDual},function(e){return c(l)(e)},function(e){return function(t){return function(u){return r.map(e.Functor0())(n.Dual)(t(u))}}}),s=new a(function(){return u.foldableMultiplicative},function(){return i.traversableMultiplicative},function(e){return c(s)(e)},function(e){return function(n){return function(u){return r.map(e.Functor0())(t.Multiplicative)(n(u))}}}),f=function(e){return e.sequence1},v=function(e){return function(n){return function(t){return function(u){return f(e)(n)(r.map(e.Traversable1().Functor0())(t)(u))}}}};module.exports={sequence1:f,traverse1:o,Traversable1:a,traverse1Default:v,sequence1Default:c,traversableDual:l,traversableMultiplicative:s};
+},{"../Control.Category/index.js":"IAi2","../Data.Functor/index.js":"+0AE","../Data.Monoid.Dual/index.js":"ULyl","../Data.Monoid.Multiplicative/index.js":"y5cd","../Data.Semigroup.Foldable/index.js":"ht+A","../Data.Traversable/index.js":"n7EE"}],"2OKT":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),t=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),r=require("../Control.Bind/index.js"),u=require("../Control.Comonad/index.js"),i=require("../Control.Extend/index.js"),o=require("../Control.Monad/index.js"),c=require("../Data.Eq/index.js"),d=require("../Data.Foldable/index.js"),f=require("../Data.FoldableWithIndex/index.js"),a=require("../Data.Functor/index.js"),l=require("../Data.Functor.Invariant/index.js"),y=require("../Data.FunctorWithIndex/index.js"),I=require("../Data.Newtype/index.js"),s=require("../Data.Ord/index.js"),x=require("../Data.Semigroup.Foldable/index.js"),p=require("../Data.Semigroup.Traversable/index.js"),w=require("../Data.Show/index.js"),q=require("../Data.Traversable/index.js"),b=require("../Data.TraversableWithIndex/index.js"),j=require("../Data.Unit/index.js"),m=function(n){return n},v=function(n){return new w.Show(function(t){return"(Identity "+w.show(n)(t)+")"})},F=function(n){return n},h=function(n){return n},D=function(n){return n},A=function(n){return n},g=new I.Newtype(function(n){return n},m),C=function(n){return n},W=function(n){return n},T=function(n){return n},E=new a.Functor(function(n){return function(t){return n(t)}}),S=new y.FunctorWithIndex(function(){return E},function(n){return function(t){return n(j.unit)(t)}}),B=new l.Invariant(l.imapF(E)),M=new d.Foldable(function(n){return function(n){return function(t){return n(t)}}},function(n){return function(t){return function(e){return n(t)(e)}}},function(n){return function(t){return function(e){return n(e)(t)}}}),N=new f.FoldableWithIndex(function(){return M},function(n){return function(n){return function(t){return n(j.unit)(t)}}},function(n){return function(t){return function(e){return n(j.unit)(t)(e)}}},function(n){return function(t){return function(e){return n(j.unit)(e)(t)}}}),O=new q.Traversable(function(){return M},function(){return E},function(n){return function(t){return a.map(n.Apply0().Functor0())(m)(t)}},function(n){return function(t){return function(e){return a.map(n.Apply0().Functor0())(m)(t(e))}}}),R=new b.TraversableWithIndex(function(){return N},function(){return S},function(){return O},function(n){return function(t){return function(e){return a.map(n.Apply0().Functor0())(m)(t(j.unit)(e))}}}),z=new x.Foldable1(function(){return M},function(n){return function(n){return n}},function(n){return function(n){return function(t){return n(t)}}}),U=new p.Traversable1(function(){return z},function(){return O},function(n){return function(t){return a.map(n.Functor0())(m)(t)}},function(n){return function(t){return function(e){return a.map(n.Functor0())(m)(t(e))}}}),k=new i.Extend(function(){return E},function(n){return function(t){return n(t)}}),G=function(n){return n},H=function(n){return n},J=new c.Eq1(function(n){return c.eq(H(n))}),K=new s.Ord1(function(){return J},function(n){return s.compare(A(n))}),L=new u.Comonad(function(){return k},function(n){return n}),P=function(n){return n},Q=function(n){return n},V=function(n){return n},X=new e.Apply(function(){return E},function(n){return function(t){return n(t)}}),Y=new r.Bind(function(){return X},function(n){return function(t){return t(n)}}),Z=new t.Applicative(function(){return X},m),$=new o.Monad(function(){return Z},function(){return Y}),_=new n.Alt(function(){return E},function(n){return function(t){return n}});module.exports={Identity:m,newtypeIdentity:g,eqIdentity:H,ordIdentity:A,boundedIdentity:Q,heytingAlgebraIdentity:T,booleanAlgebraIdentity:V,semigroupIdenity:h,monoidIdentity:C,semiringIdentity:F,euclideanRingIdentity:G,ringIdentity:D,commutativeRingIdentity:P,lazyIdentity:W,showIdentity:v,eq1Identity:J,ord1Identity:K,functorIdentity:E,functorWithIndexIdentity:S,invariantIdentity:B,altIdentity:_,applyIdentity:X,applicativeIdentity:Z,bindIdentity:Y,monadIdentity:$,extendIdentity:k,comonadIdentity:L,foldableIdentity:M,foldable1Identity:z,foldableWithIndexIdentity:N,traversableIdentity:O,traversable1Identity:U,traversableWithIndexIdentity:R};
+},{"../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Comonad/index.js":"U0zO","../Control.Extend/index.js":"JIoJ","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Functor/index.js":"+0AE","../Data.Functor.Invariant/index.js":"AXkC","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Semigroup.Foldable/index.js":"ht+A","../Data.Semigroup.Traversable/index.js":"qkfi","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Unit/index.js":"NhVk"}],"bagd":[function(require,module,exports) {
+"use strict";exports.new=function(n){return function(){return{value:n}}},exports.read=function(n){return function(){return n.value}},exports["modify'"]=function(n){return function(t){return function(){var r=n(t.value);return t.value=r.state,r.value}}},exports.write=function(n){return function(t){return function(){return t.value=n,{}}}};
+},{}],"/Jaj":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),r=require("../Data.Functor/index.js"),t=require("../Effect/index.js"),i=function(r){return e["modify'"](function(e){var t=r(e);return{state:t,value:t}})},n=function(e){return function(n){return r.void(t.functorEffect)(i(e)(n))}};module.exports={modify:i,modify_:n,new:e.new,read:e.read,"modify'":e["modify'"],write:e.write};
+},{"./foreign.js":"bagd","../Data.Functor/index.js":"+0AE","../Effect/index.js":"oTWB"}],"UVIy":[function(require,module,exports) {
+"use strict";var n=require("../Control.Bind/index.js"),t=require("../Control.Monad/index.js"),e=require("../Data.Bifunctor/index.js"),r=require("../Data.Either/index.js"),u=require("../Data.Functor/index.js"),o=require("../Data.Identity/index.js"),i=require("../Data.Maybe/index.js"),c=require("../Data.Unit/index.js"),a=require("../Effect/index.js"),f=require("../Effect.Ref/index.js"),l=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),s=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),d=function(n,t){this.Monad0=n,this.tailRecM=t},m=function(n){return n.tailRecM},w=function(n){return function(t){return function(e){return function(r){return m(n)(function(n){return t(n.a)(n.b)})({a:e,b:r})}}}},v=function(n){return function(t){return function(e){return function(r){return function(u){return m(n)(function(n){return t(n.a)(n.b)(n.c)})({a:e,b:r,c:u})}}}}},h=function(n){return function(t){return function(t){var e,r=!1;function u(e){if(!(e instanceof l)){if(e instanceof s)return r=!0,e.value0;throw new Error("Failed pattern match at Control.Monad.Rec.Class (line 91, column 3 - line 91, column 25): "+[e.constructor.name])}t=n(e.value0)}for(;!r;)e=u(t);return e}(n(t))}},R=new d(function(){return i.monadMaybe},function(n){return function(t){return h(function(t){if(t instanceof i.Nothing)return new s(i.Nothing.value);if(t instanceof i.Just&&t.value0 instanceof l)return new l(n(t.value0.value0));if(t instanceof i.Just&&t.value0 instanceof s)return new s(new i.Just(t.value0.value0));throw new Error("Failed pattern match at Control.Monad.Rec.Class (line 127, column 7 - line 127, column 31): "+[t.constructor.name])})(n(t))}}),M=new d(function(){return o.monadIdentity},function(n){var t=h(function(t){return n(t)});return function(n){return o.Identity(t(n))}}),p=new d(function(){return t.monadFn},function(n){return function(t){return function(e){return h(function(t){return n(t)(e)})(t)}}}),C=new d(function(){return r.monadEither},function(n){return function(t){return h(function(t){if(t instanceof r.Left)return new s(new r.Left(t.value0));if(t instanceof r.Right&&t.value0 instanceof l)return new l(n(t.value0.value0));if(t instanceof r.Right&&t.value0 instanceof s)return new s(new r.Right(t.value0.value0));throw new Error("Failed pattern match at Control.Monad.Rec.Class (line 119, column 7 - line 119, column 33): "+[t.constructor.name])})(n(t))}}),E=new d(function(){return a.monadEffect},function(t){return function(e){var r=function(n){if(n instanceof s)return n.value0;throw new Error("Failed pattern match at Control.Monad.Rec.Class (line 111, column 30 - line 111, column 44): "+[n.constructor.name])};return function(){var o=n.bindFlipped(a.bindEffect)(f.new)(t(e))();return function(){for(;!function(){var n=f.read(o)();if(n instanceof l){var e=t(n.value0)();f.write(e)(o)();return!1}if(n instanceof s)return!0;throw new Error("Failed pattern match at Control.Monad.Rec.Class (line 102, column 22 - line 107, column 28): "+[n.constructor.name])}(););}(),u.map(a.functorEffect)(r)(f.read(o))()}}}),F=new u.Functor(function(n){return function(t){if(t instanceof l)return new l(t.value0);if(t instanceof s)return new s(n(t.value0));throw new Error("Failed pattern match at Control.Monad.Rec.Class (line 25, column 1 - line 25, column 48): "+[t.constructor.name])}}),x=function(n){return function(t){return m(n)(function(e){return u.voidRight(n.Monad0().Bind1().Apply0().Functor0())(new l(e))(t)})(c.unit)}},b=new e.Bifunctor(function(n){return function(t){return function(e){if(e instanceof l)return new l(n(e.value0));if(e instanceof s)return new s(t(e.value0));throw new Error("Failed pattern match at Control.Monad.Rec.Class (line 27, column 1 - line 29, column 34): "+[n.constructor.name,t.constructor.name,e.constructor.name])}}});module.exports={Loop:l,Done:s,MonadRec:d,tailRec:h,tailRecM:m,tailRecM2:w,tailRecM3:v,forever:x,functorStep:F,bifunctorStep:b,monadRecIdentity:M,monadRecEffect:E,monadRecFunction:p,monadRecEither:C,monadRecMaybe:R};
+},{"../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Bifunctor/index.js":"e2Wc","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Identity/index.js":"2OKT","../Data.Maybe/index.js":"5mN7","../Data.Unit/index.js":"NhVk","../Effect/index.js":"oTWB","../Effect.Ref/index.js":"/Jaj"}],"y9cE":[function(require,module,exports) {
+"use strict";var n=require("../Data.Unit/index.js"),t=function(n){this.defer=n},r=new t(function(t){return n.unit}),e=new t(function(t){return function(r){return t(n.unit)(r)}}),u=function(n){return n.defer},i=function(n){return function(t){var r=u(n)(function(n){return t(r)});return r}};module.exports={defer:u,Lazy:t,fix:i,lazyFn:e,lazyUnit:r};
+},{"../Data.Unit/index.js":"NhVk"}],"e7y+":[function(require,module,exports) {
+"use strict";var n=require("../Data.HeytingAlgebra/index.js"),e=function(n){this.HeytingAlgebraRecord0=n},r=function(n){this.HeytingAlgebra0=n},o=new r(function(){return n.heytingAlgebraUnit}),t=new e(function(){return n.heytingAlgebraRecordNil}),i=function(r){return function(o){return function(t){return function(i){return new e(function(){return n.heytingAlgebraRecordCons(r)(o)(t.HeytingAlgebraRecord0())(i.HeytingAlgebra0())})}}}},a=function(e){return function(o){return new r(function(){return n.heytingAlgebraRecord(e)(o.HeytingAlgebraRecord0())})}},g=function(e){return new r(function(){return n.heytingAlgebraFunction(e.HeytingAlgebra0())})},l=new r(function(){return n.heytingAlgebraBoolean});module.exports={BooleanAlgebra:r,BooleanAlgebraRecord:e,booleanAlgebraBoolean:l,booleanAlgebraUnit:o,booleanAlgebraFn:g,booleanAlgebraRecord:a,booleanAlgebraRecordNil:t,booleanAlgebraRecordCons:i};
+},{"../Data.HeytingAlgebra/index.js":"paZe"}],"8PTu":[function(require,module,exports) {
+"use strict";var t=require("../Control.Category/index.js"),n=require("../Data.Functor/index.js"),r=require("../Data.Identity/index.js"),u=require("../Data.Newtype/index.js"),e=function(t,n,r){this.Functor0=t,this.collect=n,this.distribute=r},i=new e(function(){return r.functorIdentity},function(t){return function(e){var i,c=n.map(t)((i=u.unwrap(r.newtypeIdentity),function(t){return i(e(t))}));return function(t){return r.Identity(c(t))}}},function(t){var e=n.map(t)(u.unwrap(r.newtypeIdentity));return function(t){return r.Identity(e(t))}}),c=function(t){return t.distribute},o=new e(function(){return n.functorFn},function(t){return function(r){var u=c(o)(t),e=n.map(t)(r);return function(t){return u(e(t))}}},function(t){return function(r){return function(u){return n.map(t)(function(t){return t(u)})(r)}}}),f=function(t){return function(r){return function(u){var e=n.map(t.Functor0())(u),i=c(t)(r);return function(t){return e(i(t))}}}},a=function(t){return function(r){return function(u){var e=c(t)(r),i=n.map(r)(u);return function(t){return e(i(t))}}}},d=function(t){return t.collect},s=function(n){return function(r){return d(n)(r)(t.identity(t.categoryFn))}};module.exports={collect:d,distribute:c,Distributive:e,distributeDefault:s,collectDefault:a,cotraverse:f,distributiveIdentity:i,distributiveFunction:o};
+},{"../Control.Category/index.js":"IAi2","../Data.Functor/index.js":"+0AE","../Data.Identity/index.js":"2OKT","../Data.Newtype/index.js":"lz8k"}],"Uq/R":[function(require,module,exports) {
+"use strict";var t=function(t,n){this.from=t,this.to=n},n=function(t){return t.to},r=new t(function(t){return t},function(t){return t}),o=function(t){return t.from};module.exports={TypeEquals:t,to:n,from:o,refl:r};
+},{}],"II/O":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),u=require("../Control.Biapplicative/index.js"),r=require("../Control.Biapply/index.js"),t=require("../Control.Bind/index.js"),i=require("../Control.Comonad/index.js"),o=require("../Control.Extend/index.js"),a=require("../Control.Lazy/index.js"),l=require("../Control.Monad/index.js"),c=require("../Control.Semigroupoid/index.js"),f=require("../Data.Bifoldable/index.js"),v=require("../Data.Bifunctor/index.js"),p=require("../Data.Bitraversable/index.js"),d=require("../Data.BooleanAlgebra/index.js"),s=require("../Data.Bounded/index.js"),w=require("../Data.CommutativeRing/index.js"),m=require("../Data.Distributive/index.js"),q=require("../Data.Eq/index.js"),x=require("../Data.Foldable/index.js"),b=require("../Data.FoldableWithIndex/index.js"),T=require("../Data.Functor/index.js"),j=require("../Data.Functor.Invariant/index.js"),g=require("../Data.FunctorWithIndex/index.js"),y=require("../Data.HeytingAlgebra/index.js"),D=require("../Data.Maybe/index.js"),F=require("../Data.Maybe.First/index.js"),A=require("../Data.Monoid/index.js"),h=require("../Data.Newtype/index.js"),S=require("../Data.Ord/index.js"),B=require("../Data.Ordering/index.js"),C=require("../Data.Ring/index.js"),I=require("../Data.Semigroup/index.js"),E=require("../Data.Semigroup.Foldable/index.js"),W=require("../Data.Semigroup.Traversable/index.js"),M=require("../Data.Semiring/index.js"),R=require("../Data.Show/index.js"),O=require("../Data.Traversable/index.js"),z=require("../Data.TraversableWithIndex/index.js"),H=require("../Data.Unit/index.js"),L=require("../Type.Equality/index.js"),G=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(u){return new n(e,u)}},n}(),N=function(n){return function(e){return n(e.value0)(e.value1)}},k=function(n){return new G(n.value1,n.value0)},J=function(n){return n.value1},U=function(n){return function(e){return new R.Show(function(u){return"(Tuple "+R.show(n)(u.value0)+" "+R.show(e)(u.value1)+")"})}},K=function(n){return function(e){return new M.Semiring(function(u){return function(r){return new G(M.add(n)(u.value0)(r.value0),M.add(e)(u.value1)(r.value1))}},function(u){return function(r){return new G(M.mul(n)(u.value0)(r.value0),M.mul(e)(u.value1)(r.value1))}},new G(M.one(n),M.one(e)),new G(M.zero(n),M.zero(e)))}},P=new c.Semigroupoid(function(n){return function(e){return new G(e.value0,n.value1)}}),Q=function(n){return function(e){return new I.Semigroup(function(u){return function(r){return new G(I.append(n)(u.value0)(r.value0),I.append(e)(u.value1)(r.value1))}})}},V=function(n){return function(e){return new C.Ring(function(){return K(n.Semiring0())(e.Semiring0())},function(u){return function(r){return new G(C.sub(n)(u.value0)(r.value0),C.sub(e)(u.value1)(r.value1))}})}},X=function(n){return function(e){return new A.Monoid(function(){return Q(n.Semigroup0())(e.Semigroup0())},new G(A.mempty(n),A.mempty(e)))}},Y=function(n){return function(e){return function(u){var r=h.unwrap(F.newtypeFirst),t=x.foldMap(n)(F.monoidFirst)(function(n){return q.eq(e)(u)(n.value0)?new D.Just(n.value1):D.Nothing.value});return function(n){return r(t(n))}}}},Z=function(n){return function(e){return new y.HeytingAlgebra(function(u){return function(r){return new G(y.conj(n)(u.value0)(r.value0),y.conj(e)(u.value1)(r.value1))}},function(u){return function(r){return new G(y.disj(n)(u.value0)(r.value0),y.disj(e)(u.value1)(r.value1))}},new G(y.ff(n),y.ff(e)),function(u){return function(r){return new G(y.implies(n)(u.value0)(r.value0),y.implies(e)(u.value1)(r.value1))}},function(u){return new G(y.not(n)(u.value0),y.not(e)(u.value1))},new G(y.tt(n),y.tt(e)))}},$=new T.Functor(function(n){return function(e){return new G(e.value0,n(e.value1))}}),_=new g.FunctorWithIndex(function(){return $},function(n){return T.map($)(n(H.unit))}),nn=new j.Invariant(j.imapF($)),en=function(n){return n.value0},un=function(n){return function(e){return new a.Lazy(function(u){return new G(a.defer(n)(function(n){return en(u(H.unit))}),a.defer(e)(function(n){return J(u(H.unit))}))})}},rn=new x.Foldable(function(n){return function(n){return function(e){return n(e.value1)}}},function(n){return function(e){return function(u){return n(e)(u.value1)}}},function(n){return function(e){return function(u){return n(u.value1)(e)}}}),tn=new b.FoldableWithIndex(function(){return rn},function(n){return function(n){return function(e){return n(H.unit)(e.value1)}}},function(n){return function(e){return function(u){return n(H.unit)(e)(u.value1)}}},function(n){return function(e){return function(u){return n(H.unit)(u.value1)(e)}}}),on=new O.Traversable(function(){return rn},function(){return $},function(n){return function(e){return T.map(n.Apply0().Functor0())(G.create(e.value0))(e.value1)}},function(n){return function(e){return function(u){return T.map(n.Apply0().Functor0())(G.create(u.value0))(e(u.value1))}}}),an=new z.TraversableWithIndex(function(){return tn},function(){return _},function(){return on},function(n){return function(e){return function(u){return T.map(n.Apply0().Functor0())(G.create(u.value0))(e(H.unit)(u.value1))}}}),ln=new E.Foldable1(function(){return rn},function(n){return function(n){return n.value1}},function(n){return function(n){return function(e){return n(e.value1)}}}),cn=new W.Traversable1(function(){return ln},function(){return on},function(n){return function(e){return T.map(n.Functor0())(G.create(e.value0))(e.value1)}},function(n){return function(e){return function(u){return T.map(n.Functor0())(G.create(u.value0))(e(u.value1))}}}),fn=new o.Extend(function(){return $},function(n){return function(e){return new G(e.value0,n(e))}}),vn=function(n){return function(e){return new q.Eq(function(u){return function(r){return q.eq(n)(u.value0)(r.value0)&&q.eq(e)(u.value1)(r.value1)}})}},pn=function(n){return function(e){return new S.Ord(function(){return vn(n.Eq0())(e.Eq0())},function(u){return function(r){var t=S.compare(n)(u.value0)(r.value0);return t instanceof B.LT?B.LT.value:t instanceof B.GT?B.GT.value:S.compare(e)(u.value1)(r.value1)}})}},dn=function(n){return new q.Eq1(function(e){return q.eq(vn(n)(e))})},sn=function(n){return new S.Ord1(function(){return dn(n.Eq0())},function(e){return S.compare(pn(n)(e))})},wn=function n(e){return new m.Distributive(function(){return $},function(u){return m.collectDefault(n(e))(u)},function(n){var u=G.create(L.from(e)(H.unit)),r=T.map(n)(J);return function(n){return u(r(n))}})},mn=function(n){return function(e){return function(u){return n(new G(e,u))}}},qn=new i.Comonad(function(){return fn},J),xn=function(n){return function(e){return new w.CommutativeRing(function(){return V(n.Ring0())(e.Ring0())})}},bn=function(n){return function(e){return new s.Bounded(function(){return pn(n.Ord0())(e.Ord0())},new G(s.bottom(n),s.bottom(e)),new G(s.top(n),s.top(e)))}},Tn=function(n){return function(e){return new d.BooleanAlgebra(function(){return Z(n.HeytingAlgebra0())(e.HeytingAlgebra0())})}},jn=new v.Bifunctor(function(n){return function(e){return function(u){return new G(n(u.value0),e(u.value1))}}}),gn=new f.Bifoldable(function(n){return function(e){return function(u){return function(r){return I.append(n.Semigroup0())(e(r.value0))(u(r.value1))}}}},function(n){return function(e){return function(u){return function(r){return e(n(u)(r.value0))(r.value1)}}}},function(n){return function(e){return function(u){return function(r){return n(r.value0)(e(r.value1)(u))}}}}),yn=new p.Bitraversable(function(){return gn},function(){return jn},function(n){return function(u){return e.apply(n.Apply0())(T.map(n.Apply0().Functor0())(G.create)(u.value0))(u.value1)}},function(n){return function(u){return function(r){return function(t){return e.apply(n.Apply0())(T.map(n.Apply0().Functor0())(G.create)(u(t.value0)))(r(t.value1))}}}}),Dn=new r.Biapply(function(){return jn},function(n){return function(e){return new G(n.value0(e.value0),n.value1(e.value1))}}),Fn=new u.Biapplicative(function(){return Dn},G.create),An=function(n){return new e.Apply(function(){return $},function(e){return function(u){return new G(I.append(n)(e.value0)(u.value0),e.value1(u.value1))}})},hn=function(n){return new t.Bind(function(){return An(n)},function(e){return function(u){var r=u(e.value1);return new G(I.append(n)(e.value0)(r.value0),r.value1)}})},Sn=function(e){return new n.Applicative(function(){return An(e.Semigroup0())},G.create(A.mempty(e)))},Bn=function(n){return new l.Monad(function(){return Sn(n)},function(){return hn(n.Semigroup0())})};module.exports={Tuple:G,fst:en,snd:J,curry:mn,uncurry:N,swap:k,lookup:Y,showTuple:U,eqTuple:vn,eq1Tuple:dn,ordTuple:pn,ord1Tuple:sn,boundedTuple:bn,semigroupoidTuple:P,semigroupTuple:Q,monoidTuple:X,semiringTuple:K,ringTuple:V,commutativeRingTuple:xn,heytingAlgebraTuple:Z,booleanAlgebraTuple:Tn,functorTuple:$,functorWithIndexTuple:_,invariantTuple:nn,bifunctorTuple:jn,applyTuple:An,biapplyTuple:Dn,applicativeTuple:Sn,biapplicativeTuple:Fn,bindTuple:hn,monadTuple:Bn,extendTuple:fn,comonadTuple:qn,lazyTuple:un,foldableTuple:rn,foldable1Tuple:ln,foldableWithIndexTuple:tn,bifoldableTuple:gn,traversableTuple:on,traversable1Tuple:cn,traversableWithIndexTuple:an,bitraversableTuple:yn,distributiveTuple:wn};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Biapplicative/index.js":"Sd0N","../Control.Biapply/index.js":"X0ga","../Control.Bind/index.js":"7VcT","../Control.Comonad/index.js":"U0zO","../Control.Extend/index.js":"JIoJ","../Control.Lazy/index.js":"y9cE","../Control.Monad/index.js":"U/Ix","../Control.Semigroupoid/index.js":"/riR","../Data.Bifoldable/index.js":"wjQo","../Data.Bifunctor/index.js":"e2Wc","../Data.Bitraversable/index.js":"8nb9","../Data.BooleanAlgebra/index.js":"e7y+","../Data.Bounded/index.js":"kcUU","../Data.CommutativeRing/index.js":"60TQ","../Data.Distributive/index.js":"8PTu","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Functor/index.js":"+0AE","../Data.Functor.Invariant/index.js":"AXkC","../Data.FunctorWithIndex/index.js":"OHRN","../Data.HeytingAlgebra/index.js":"paZe","../Data.Maybe/index.js":"5mN7","../Data.Maybe.First/index.js":"W/l6","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Ring/index.js":"E2qH","../Data.Semigroup/index.js":"EsAJ","../Data.Semigroup.Foldable/index.js":"ht+A","../Data.Semigroup.Traversable/index.js":"qkfi","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Unit/index.js":"NhVk","../Type.Equality/index.js":"Uq/R"}],"u1pL":[function(require,module,exports) {
+"use strict";var n=require("../Data.Tuple/index.js"),t=require("../Data.Unit/index.js"),u=function(n,t){this.Monad0=n,this.state=t},e=function(n){return n.state},r=function(u){return function(r){return e(u)(function(u){return new n.Tuple(t.unit,r)})}},i=function(u){return function(r){return e(u)(function(u){return new n.Tuple(t.unit,r(u))})}},o=function(t){return function(u){return e(t)(function(t){var e=u(t);return new n.Tuple(e,e)})}},f=function(t){return function(u){return e(t)(function(t){return new n.Tuple(u(t),t)})}},c=function(t){return e(t)(function(t){return new n.Tuple(t,t)})};module.exports={state:e,MonadState:u,get:c,gets:f,put:r,modify:o,modify_:i};
+},{"../Data.Tuple/index.js":"II/O","../Data.Unit/index.js":"NhVk"}],"5tIR":[function(require,module,exports) {
+"use strict";var t=function(t){this.lift=t},i=function(t){return t.lift};module.exports={lift:i,MonadTrans:t};
+},{}],"gxgA":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),e=require("../Control.Bind/index.js"),t=require("../Data.Tuple/index.js"),i=function(n,e){this.Monad0=n,this.tell=e},r=function(n,e,t){this.MonadTell0=n,this.listen=e,this.pass=t},u=function(n){return n.tell},l=function(n){return n.pass},o=function(n){return n.listen},a=function(i){return function(r){return function(u){return e.bind(i.MonadTell0().Monad0().Bind1())(o(i)(u))(function(e){return n.pure(i.MonadTell0().Monad0().Applicative0())(new t.Tuple(e.value0,r(e.value1)))})}}},s=function(i){return function(r){return function(u){return l(i)(e.bind(i.MonadTell0().Monad0().Bind1())(u)(function(e){return n.pure(i.MonadTell0().Monad0().Applicative0())(new t.Tuple(e,r))}))}}};module.exports={listen:o,pass:l,tell:u,MonadTell:i,MonadWriter:r,listens:a,censor:s};
+},{"../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Data.Tuple/index.js":"II/O"}],"HkJx":[function(require,module,exports) {
+"use strict";var r=require("../Control.MonadZero/index.js"),o=function(r){this.MonadZero0=r},n=new o(function(){return r.monadZeroArray});module.exports={MonadPlus:o,monadPlusArray:n};
+},{"../Control.MonadZero/index.js":"lD5R"}],"dWtH":[function(require,module,exports) {
+"use strict";var t=require("../Control.Category/index.js"),e=require("../Effect/index.js"),f=function(t,e){this.Monad0=t,this.liftEffect=e},n=new f(function(){return e.monadEffect},t.identity(t.categoryFn)),i=function(t){return t.liftEffect};module.exports={liftEffect:i,MonadEffect:f,monadEffectEffect:n};
+},{"../Control.Category/index.js":"IAi2","../Effect/index.js":"oTWB"}],"gr8B":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),e=require("../Control.Alternative/index.js"),t=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),o=require("../Control.Category/index.js"),i=require("../Control.Monad/index.js"),a=require("../Control.Monad.Cont.Class/index.js"),c=require("../Control.Monad.Error.Class/index.js"),f=require("../Control.Monad.Reader.Class/index.js"),l=require("../Control.Monad.Rec.Class/index.js"),d=require("../Control.Monad.State.Class/index.js"),p=require("../Control.Monad.Trans.Class/index.js"),s=require("../Control.Monad.Writer.Class/index.js"),x=require("../Control.MonadPlus/index.js"),w=require("../Control.MonadZero/index.js"),M=require("../Control.Plus/index.js"),v=require("../Data.Either/index.js"),E=require("../Data.Functor/index.js"),T=require("../Data.Monoid/index.js"),m=require("../Data.Newtype/index.js"),C=require("../Data.Semigroup/index.js"),h=require("../Data.Tuple/index.js"),j=require("../Effect.Class/index.js"),q=function(n){return n},A=function(n){return function(e){return function(t){var r;return q(E.map(n)((r=e,function(n){if(n instanceof v.Right)return new v.Right(n.value0);if(n instanceof v.Left)return new v.Left(r(n.value0));throw new Error("Failed pattern match at Control.Monad.Except.Trans (line 42, column 3 - line 42, column 32): "+[r.constructor.name,n.constructor.name])}))(t))}}},R=function(n){return n},g=new m.Newtype(function(n){return n},q),L=new p.MonadTrans(function(n){return function(e){return u.bind(n.Bind1())(e)(function(e){return t.pure(n.Applicative0())(new v.Right(e))})}}),y=function(n){return function(e){return n(e)}},B=function(n){return new E.Functor(function(e){return y(E.map(n)(E.map(v.functorEither)(e)))})},F=function(n){var e=t.pure(n);return function(n){return q(e(n))}},b=function(n){return new i.Monad(function(){return S(n)},function(){return D(n)})},D=function(n){return new u.Bind(function(){return P(n)},function(e){return function(r){return u.bind(n.Bind1())(e)(v.either((o=t.pure(n.Applicative0()),function(n){return o(v.Left.create(n))}))(function(n){return r(n)}));var o}})},P=function(n){return new r.Apply(function(){return B(n.Bind1().Apply0().Functor0())},i.ap(b(n)))},S=function(n){return new t.Applicative(function(){return P(n)},(e=t.pure(n.Applicative0()),function(n){return q(e(v.Right.create(n)))}));var e},k=function(n){return new f.MonadAsk(function(){return b(n.Monad0())},p.lift(L)(n.Monad0())(f.ask(n)))},W=function(n){return new f.MonadReader(function(){return k(n.MonadAsk0())},function(e){return y(f.local(n)(e))})},Z=function(n){return new a.MonadCont(function(){return b(n.Monad0())},function(e){return q(a.callCC(n)(function(n){return e(function(e){return q(n(new v.Right(e)))})}))})},N=function(n){return new j.MonadEffect(function(){return b(n.Monad0())},(e=p.lift(L)(n.Monad0()),t=j.liftEffect(n),function(n){return e(t(n))}));var e,t},z=function(n){return new l.MonadRec(function(){return b(n.Monad0())},function(e){var r=l.tailRecM(n)(function(r){var o=e(r);return u.bind(n.Monad0().Bind1())(o)(function(e){return t.pure(n.Monad0().Applicative0())(function(){if(e instanceof v.Left)return new l.Done(new v.Left(e.value0));if(e instanceof v.Right&&e.value0 instanceof l.Loop)return new l.Loop(e.value0.value0);if(e instanceof v.Right&&e.value0 instanceof l.Done)return new l.Done(new v.Right(e.value0.value0));throw new Error("Failed pattern match at Control.Monad.Except.Trans (line 74, column 14 - line 77, column 43): "+[e.constructor.name])}())})});return function(n){return q(r(n))}})},G=function(n){return new d.MonadState(function(){return b(n.Monad0())},function(e){return p.lift(L)(n.Monad0())(d.state(n)(e))})},H=function(n){return new s.MonadTell(function(){return b(n.Monad0())},(e=p.lift(L)(n.Monad0()),t=s.tell(n),function(n){return e(t(n))}));var e,t},I=function(n){return new s.MonadWriter(function(){return H(n.MonadTell0())},y(function(e){return u.bind(n.MonadTell0().Monad0().Bind1())(s.listen(n)(e))(function(e){return t.pure(n.MonadTell0().Monad0().Applicative0())(E.map(v.functorEither)(function(n){return new h.Tuple(n,e.value1)})(e.value0))})}),y(function(e){return s.pass(n)(u.bind(n.MonadTell0().Monad0().Bind1())(e)(function(e){return t.pure(n.MonadTell0().Monad0().Applicative0())(function(){if(e instanceof v.Left)return new h.Tuple(new v.Left(e.value0),o.identity(o.categoryFn));if(e instanceof v.Right)return new h.Tuple(new v.Right(e.value0.value0),e.value0.value1);throw new Error("Failed pattern match at Control.Monad.Except.Trans (line 136, column 10 - line 138, column 45): "+[e.constructor.name])}())}))}))},J=function(n){return new c.MonadThrow(function(){return b(n)},(e=t.pure(n.Applicative0()),function(n){return q(e(v.Left.create(n)))}));var e},K=function(n){return new c.MonadError(function(){return J(n)},function(e){return function(r){return u.bind(n.Bind1())(e)(v.either(function(n){return r(n)})((o=t.pure(n.Applicative0()),function(n){return o(v.Right.create(n))})));var o}})},O=function(e){return function(r){return new n.Alt(function(){return B(r.Bind1().Apply0().Functor0())},function(n){return function(o){return u.bind(r.Bind1())(n)(function(n){if(n instanceof v.Right)return t.pure(r.Applicative0())(new v.Right(n.value0));if(n instanceof v.Left)return u.bind(r.Bind1())(o)(function(u){if(u instanceof v.Right)return t.pure(r.Applicative0())(new v.Right(u.value0));if(u instanceof v.Left)return t.pure(r.Applicative0())(new v.Left(C.append(e)(n.value0)(u.value0)));throw new Error("Failed pattern match at Control.Monad.Except.Trans (line 86, column 9 - line 88, column 49): "+[u.constructor.name])});throw new Error("Failed pattern match at Control.Monad.Except.Trans (line 82, column 5 - line 88, column 49): "+[n.constructor.name])})}})}},Q=function(n){return function(e){return new M.Plus(function(){return O(n.Semigroup0())(e)},c.throwError(J(e))(T.mempty(n)))}},U=function(n){return function(t){return new e.Alternative(function(){return S(t)},function(){return Q(n)(t)})}},V=function(n){return function(e){return new w.MonadZero(function(){return U(n)(e)},function(){return b(e)})}},X=function(n){return function(e){return new x.MonadPlus(function(){return V(n)(e)})}};module.exports={ExceptT:q,runExceptT:R,withExceptT:A,mapExceptT:y,except:F,newtypeExceptT:g,functorExceptT:B,applyExceptT:P,applicativeExceptT:S,bindExceptT:D,monadExceptT:b,monadRecExceptT:z,altExceptT:O,plusExceptT:Q,alternativeExceptT:U,monadPlusExceptT:X,monadZeroExceptT:V,monadTransExceptT:L,monadEffectExceptT:N,monadContExceptT:Z,monadThrowExceptT:J,monadErrorExceptT:K,monadAskExceptT:k,monadReaderExceptT:W,monadStateExceptT:G,monadTellExceptT:H,monadWriterExceptT:I};
+},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad/index.js":"U/Ix","../Control.Monad.Cont.Class/index.js":"IpNh","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Reader.Class/index.js":"c2ZJ","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.Trans.Class/index.js":"5tIR","../Control.Monad.Writer.Class/index.js":"gxgA","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Tuple/index.js":"II/O","../Effect.Class/index.js":"dWtH"}],"Fye2":[function(require,module,exports) {
+"use strict";var t=require("../Control.Monad.Except.Trans/index.js"),e=require("../Data.Identity/index.js"),n=require("../Data.Newtype/index.js"),r=t.withExceptT(e.functorIdentity),i=function(){var r=n.unwrap(e.newtypeIdentity);return function(e){return r(t.runExceptT(e))}}(),u=function(r){return t.mapExceptT((i=n.unwrap(e.newtypeIdentity),function(t){return e.Identity(r(i(t)))}));var i};module.exports={runExcept:i,mapExcept:u,withExcept:r};
+},{"../Control.Monad.Except.Trans/index.js":"gr8B","../Data.Identity/index.js":"2OKT","../Data.Newtype/index.js":"lz8k"}],"TZDL":[function(require,module,exports) {
+"use strict";exports.range=function(n){return function(r){for(var t=n>r?-1:1,e=new Array(t*(r-n)+1),u=n,o=0;u!==r;)e[o++]=u,u+=t;return e[o]=u,e}};var n=function(n){return function(r){return n<1?[]:new Array(n).fill(r)}},r=function(n){return function(r){for(var t=[],e=0,u=0;u<n;u++)t[e++]=r;return t}};exports.replicate="function"==typeof Array.prototype.fill?n:r,exports.fromFoldableImpl=function(){function n(n,r){this.head=n,this.tail=r}var r={};function t(r){return function(t){return new n(r,t)}}return function(n){return function(e){return function(n){for(var t=[],e=0,u=n;u!==r;)t[e++]=u.head,u=u.tail;return t}(n(t)(r)(e))}}}(),exports.length=function(n){return n.length},exports.cons=function(n){return function(r){return[n].concat(r)}},exports.snoc=function(n){return function(r){var t=n.slice();return t.push(r),t}},exports["uncons'"]=function(n){return function(r){return function(t){return 0===t.length?n({}):r(t[0])(t.slice(1))}}},exports.indexImpl=function(n){return function(r){return function(t){return function(e){return e<0||e>=t.length?r:n(t[e])}}}},exports.findIndexImpl=function(n){return function(r){return function(t){return function(e){for(var u=0,o=e.length;u<o;u++)if(t(e[u]))return n(u);return r}}}},exports.findLastIndexImpl=function(n){return function(r){return function(t){return function(e){for(var u=e.length-1;u>=0;u--)if(t(e[u]))return n(u);return r}}}},exports._insertAt=function(n){return function(r){return function(t){return function(e){return function(u){if(t<0||t>u.length)return r;var o=u.slice();return o.splice(t,0,e),n(o)}}}}},exports._deleteAt=function(n){return function(r){return function(t){return function(e){if(t<0||t>=e.length)return r;var u=e.slice();return u.splice(t,1),n(u)}}}},exports._updateAt=function(n){return function(r){return function(t){return function(e){return function(u){if(t<0||t>=u.length)return r;var o=u.slice();return o[t]=e,n(o)}}}}},exports.reverse=function(n){return n.slice().reverse()},exports.concat=function(n){if(n.length<=1e4)return Array.prototype.concat.apply([],n);for(var r=[],t=0,e=n.length;t<e;t++)for(var u=n[t],o=0,i=u.length;o<i;o++)r.push(u[o]);return r},exports.filter=function(n){return function(r){return r.filter(n)}},exports.partition=function(n){return function(r){for(var t=[],e=[],u=0;u<r.length;u++){var o=r[u];n(o)?t.push(o):e.push(o)}return{yes:t,no:e}}},exports.sortImpl=function(n){return function(r){return r.slice().sort(function(r,t){return n(r)(t)})}},exports.slice=function(n){return function(r){return function(t){return t.slice(n,r)}}},exports.take=function(n){return function(r){return n<1?[]:r.slice(0,n)}},exports.drop=function(n){return function(r){return n<1?r:r.slice(n)}},exports.zipWith=function(n){return function(r){return function(t){for(var e=r.length<t.length?r.length:t.length,u=new Array(e),o=0;o<e;o++)u[o]=n(r[o])(t[o]);return u}}},exports.unsafeIndexImpl=function(n){return function(r){return n[r]}};
+},{}],"4sh7":[function(require,module,exports) {
+"use strict";exports.map_=function(n){return function(r){return function(){return n(r())}}},exports.pure_=function(n){return function(){return n}},exports.bind_=function(n){return function(r){return function(){return r(n())()}}},exports.run=function(n){return n()},exports.while=function(n){return function(r){return function(){for(;n();)r()}}},exports.for=function(n){return function(r){return function(t){return function(){for(var u=n;u<r;u++)t(u)()}}}},exports.foreach=function(n){return function(r){return function(){for(var t=0,u=n.length;t<u;t++)r(n[t])()}}},exports.new=function(n){return function(){return{value:n}}},exports.read=function(n){return function(){return n.value}},exports["modify'"]=function(n){return function(r){return function(){var t=n(r.value);return r.value=t.state,t.value}}},exports.write=function(n){return function(r){return function(){return r.value=n}}};
+},{}],"Sedc":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),i=require("../Control.Bind/index.js"),t=require("../Control.Monad/index.js"),o=require("../Control.Monad.Rec.Class/index.js"),u=require("../Data.Functor/index.js"),a=require("../Data.Unit/index.js"),c=function(r){return n["modify'"](function(n){var e=r(n);return{state:e,value:e}})},d=new u.Functor(n.map_),l=new t.Monad(function(){return s},function(){return f}),f=new i.Bind(function(){return p},n.bind_),p=new e.Apply(function(){return d},t.ap(l)),s=new r.Applicative(function(){return p},n.pure_),m=new o.MonadRec(function(){return l},function(e){return function(t){var c=function(n){return n instanceof o.Loop},l=function(n){if(n instanceof o.Done)return n.value0;throw new Error("Failed pattern match at Control.Monad.ST.Internal (line 54, column 32 - line 54, column 46): "+[n.constructor.name])};return i.bind(f)(i.bindFlipped(f)(n.new)(e(t)))(function(t){return i.discard(i.discardUnit)(f)(n.while(u.map(d)(c)(n.read(t)))(i.bind(f)(n.read(t))(function(c){if(c instanceof o.Loop)return i.bind(f)(e(c.value0))(function(r){return u.void(d)(n.write(r)(t))});if(c instanceof o.Done)return r.pure(s)(a.unit);throw new Error("Failed pattern match at Control.Monad.ST.Internal (line 46, column 18 - line 50, column 28): "+[c.constructor.name])})))(function(){return u.map(d)(l)(n.read(t))})})}});module.exports={modify:c,functorST:d,applyST:p,applicativeST:s,bindST:f,monadST:l,monadRecST:m,map_:n.map_,pure_:n.pure_,bind_:n.bind_,run:n.run,while:n.while,for:n.for,foreach:n.foreach,new:n.new,read:n.read,"modify'":n["modify'"],write:n.write};
+},{"./foreign.js":"4sh7","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Control.Monad.Rec.Class/index.js":"UVIy","../Data.Functor/index.js":"+0AE","../Data.Unit/index.js":"NhVk"}],"pEQc":[function(require,module,exports) {
+"use strict";exports.empty=function(){return[]},exports.peekImpl=function(n){return function(t){return function(r){return function(u){return function(){return r>=0&&r<u.length?n(u[r]):t}}}}},exports.poke=function(n){return function(t){return function(r){return function(){var u=n>=0&&n<r.length;return u&&(r[n]=t),u}}}},exports.popImpl=function(n){return function(t){return function(r){return function(){return r.length>0?n(r.pop()):t}}}},exports.pushAll=function(n){return function(t){return function(){return t.push.apply(t,n)}}},exports.shiftImpl=function(n){return function(t){return function(r){return function(){return r.length>0?n(r.shift()):t}}}},exports.unshiftAll=function(n){return function(t){return function(){return t.unshift.apply(t,n)}}},exports.splice=function(n){return function(t){return function(r){return function(u){return function(){return u.splice.apply(u,[n,t].concat(r))}}}}},exports.copyImpl=function(n){return function(){return n.slice()}},exports.sortByImpl=function(n){return function(t){return function(){return t.sort(function(t,r){return n(t)(r)})}}},exports.toAssocArray=function(n){return function(){for(var t=n.length,r=new Array(t),u=0;u<t;u++)r[u]={value:n[u],index:u};return r}};
+},{}],"s8si":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Control.Applicative/index.js"),t=require("../Control.Bind/index.js"),e=require("../Control.Monad.ST.Internal/index.js"),u=require("../Data.Maybe/index.js"),i=require("../Data.Ord/index.js"),o=require("../Data.Ordering/index.js"),a=function(r){return n.unshiftAll([r])},c=function(){var n=r.pure(e.applicativeST);return function(r){return n(r)}}(),s=function(){var n=r.pure(e.applicativeST);return function(r){return n(r)}}(),l=n.copyImpl,f=function(n){return function(r){return function(){var t=l(r)();n(t)();return s(t)()}}},p=function(r){return n.sortByImpl(function(n){return function(t){var e=r(n)(t);if(e instanceof o.GT)return 1;if(e instanceof o.EQ)return 0;if(e instanceof o.LT)return-1;throw new Error("Failed pattern match at Data.Array.ST (line 109, column 15 - line 112, column 13): "+[e.constructor.name])}})},h=function(n){return function(r){return p(i.comparing(n)(r))}},m=function(n){return p(i.compare(n))},d=n.shiftImpl(u.Just.create)(u.Nothing.value),A=function(n){return t.bind(e.bindST)(n)(s)()},v=function(r){return n.pushAll([r])},y=n.popImpl(u.Just.create)(u.Nothing.value),T=n.peekImpl(u.Just.create)(u.Nothing.value),g=function(r){return function(t){return function(e){return function(){var i=T(r)(e)();if(i instanceof u.Just)return n.poke(r)(t(i.value0))(e)();if(i instanceof u.Nothing)return!1;throw new Error("Failed pattern match at Data.Array.ST (line 195, column 3 - line 197, column 26): "+[i.constructor.name])}}}},j=n.copyImpl;module.exports={run:A,withArray:f,peek:T,modify:g,pop:y,push:v,shift:d,unshift:a,sort:m,sortBy:p,sortWith:h,freeze:j,thaw:l,unsafeFreeze:s,unsafeThaw:c,empty:n.empty,poke:n.poke,pushAll:n.pushAll,unshiftAll:n.unshiftAll,splice:n.splice,toAssocArray:n.toAssocArray};
+},{"./foreign.js":"pEQc","../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Monad.ST.Internal/index.js":"Sedc","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun"}],"Wi7L":[function(require,module,exports) {
+"use strict";var n=require("../Control.Monad.ST.Internal/index.js"),r=require("../Data.Array.ST/index.js"),t=require("../Data.Function/index.js"),e=require("../Data.Functor/index.js"),u=require("../Data.HeytingAlgebra/index.js"),a=require("../Data.Maybe/index.js"),i=function(){function n(n,r){this.value0=n,this.value1=r}return n.create=function(r){return function(t){return new n(r,t)}},n}(),o=function(r){return function(){var t=n.read(r.value1)();return r.value0(t)}},c=function(r){return function(){var t=n.read(r.value1)();n.modify(function(n){return n+1|0})(r.value1)();return r.value0(t)}},f=function(t){return function(i){return function(f){return function(){for(var l=n.new(!1)();e.map(n.functorST)(u.not(u.heytingAlgebraBoolean))(n.read(l))();)!function(){var u=o(i)();if(u instanceof a.Just&&t(u.value0)){r.push(u.value0)(f)();return e.void(n.functorST)(c(i))()}e.void(n.functorST)(n.write(!0)(l))()}();return{}}}}},l=f(t.const(!0)),s=function(r){return e.map(n.functorST)(i.create(r))(n.new(0))},v=function(r){return function(t){return function(){for(var i=n.new(!1)();e.map(n.functorST)(u.not(u.heytingAlgebraBoolean))(n.read(i))();)!function(){var u=c(r)();if(u instanceof a.Just)return t(u.value0)();if(u instanceof a.Nothing)return e.void(n.functorST)(n.write(!0)(i))();throw new Error("Failed pattern match at Data.Array.ST.Iterator (line 42, column 5 - line 44, column 47): "+[u.constructor.name])}();return{}}}},d=function(){var r=e.map(n.functorST)(a.isNothing);return function(n){return r(o(n))}}();module.exports={iterator:s,iterate:v,next:c,peek:o,exhausted:d,pushWhile:f,pushAll:l};
+},{"../Control.Monad.ST.Internal/index.js":"Sedc","../Data.Array.ST/index.js":"s8si","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Maybe/index.js":"5mN7"}],"v/61":[function(require,module,exports) {
+"use strict";exports.unfoldrArrayImpl=function(r){return function(n){return function(t){return function(u){return function(f){return function(o){for(var e=[],i=o;;){var c=f(i);if(r(c))return e;var a=n(c);e.push(t(a)),i=u(a)}}}}}}};
+},{}],"rpkt":[function(require,module,exports) {
+"use strict";exports.unfoldr1ArrayImpl=function(r){return function(n){return function(t){return function(u){return function(f){return function(o){for(var e=[],i=o;;){var c=f(i);e.push(t(c));var a=u(c);if(r(a))return e;i=n(a)}}}}}}};
+},{}],"S0Nl":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Data.Boolean/index.js"),e=require("../Data.Maybe/index.js"),t=require("../Data.Semigroup.Traversable/index.js"),u=require("../Data.Tuple/index.js"),i=function(n){this.unfoldr1=n},o=function(n){return n.unfoldr1},a=new i(n.unfoldr1ArrayImpl(e.isNothing)(e.fromJust())(u.fst)(u.snd)),f=function(n){return function(t){return function(i){return o(n)(function(n){if(n<=0)return new u.Tuple(i,e.Nothing.value);if(r.otherwise)return new u.Tuple(i,new e.Just(n-1|0));throw new Error("Failed pattern match at Data.Unfoldable1 (line 64, column 5 - line 64, column 39): "+[n.constructor.name])})(t-1|0)}}},l=function(n){return function(r){return function(e){return function(u){return function(i){return t.sequence1(e)(n)(f(r)(u)(i))}}}}},c=function(n){return f(n)(1)},s=function(n){return function(r){return function(t){var i=t>=r?1:-1;return o(n)(function(n){return function(r){var i=r+n|0;return new u.Tuple(r,r===t?e.Nothing.value:new e.Just(i))}}(i))(r)}}};module.exports={Unfoldable1:i,unfoldr1:o,replicate1:f,replicate1A:l,singleton:c,range:s,unfoldable1Array:a};
+},{"./foreign.js":"rpkt","../Data.Boolean/index.js":"ObQr","../Data.Maybe/index.js":"5mN7","../Data.Semigroup.Traversable/index.js":"qkfi","../Data.Tuple/index.js":"II/O"}],"77+Z":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),e=require("../Data.Function/index.js"),r=require("../Data.Functor/index.js"),u=require("../Data.Maybe/index.js"),t=require("../Data.Traversable/index.js"),i=require("../Data.Tuple/index.js"),o=require("../Data.Unfoldable1/index.js"),a=require("../Data.Unit/index.js"),f=function(n,e){this.Unfoldable10=n,this.unfoldr=e},l=function(n){return n.unfoldr},c=new f(function(){return o.unfoldable1Array},n.unfoldrArrayImpl(u.isNothing)(u.fromJust())(i.fst)(i.snd)),s=function(n){return function(e){return function(r){return l(n)(function(n){return n<=0?u.Nothing.value:new u.Just(new i.Tuple(r,n-1|0))})(e)}}},d=function(n){return function(e){return function(r){return function(u){return function(i){return t.sequence(r)(n)(s(e)(u)(i))}}}}},b=function(n){return l(n)(e.const(u.Nothing.value))(a.unit)},p=function(n){return l(n)(function(n){return r.map(u.functorMaybe)(e.flip(i.Tuple.create)(u.Nothing.value))(n)})};module.exports={Unfoldable:f,unfoldr:l,replicate:s,replicateA:d,none:b,fromMaybe:p,unfoldableArray:c};
+},{"./foreign.js":"v/61","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Traversable/index.js":"n7EE","../Data.Tuple/index.js":"II/O","../Data.Unfoldable1/index.js":"S0Nl","../Data.Unit/index.js":"NhVk"}],"4t4C":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Control.Alt/index.js"),t=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),i=require("../Control.Category/index.js"),o=require("../Control.Lazy/index.js"),a=require("../Control.Monad.Rec.Class/index.js"),c=require("../Control.Monad.ST.Internal/index.js"),f=require("../Data.Array.ST/index.js"),l=require("../Data.Array.ST.Iterator/index.js"),s=require("../Data.Boolean/index.js"),p=require("../Data.Eq/index.js"),d=require("../Data.Foldable/index.js"),h=require("../Data.Function/index.js"),m=require("../Data.Functor/index.js"),v=require("../Data.HeytingAlgebra/index.js"),y=require("../Data.Maybe/index.js"),g=require("../Data.Ord/index.js"),A=require("../Data.Ordering/index.js"),q=require("../Data.Semigroup/index.js"),x=require("../Data.Traversable/index.js"),w=require("../Data.Tuple/index.js"),b=require("../Data.Unfoldable/index.js"),F=function(r){return function(t){return function(e){return function(u){return x.sequence(x.traversableArray)(r)(n.zipWith(t)(e)(u))}}}},T=n.zipWith(w.Tuple.create),j=function(n){return function(r){return function(t){return f.withArray(function(t){return d.traverse_(c.applicativeST)(n)(function(n){return f.poke(n.value0)(n.value1)(t)})(r)})(t)()}}},D=n._updateAt(y.Just.create)(y.Nothing.value),J=function(r){return n.unsafeIndexImpl},I=n["uncons'"](h.const(y.Nothing.value))(function(n){return function(r){return new y.Just({head:n,tail:r})}}),N=function(r){return function(t){var e=n.length(t);return b.unfoldr(r)(function(n){if(n<e)return new y.Just(new w.Tuple(J()(t)(n),n+1|0));if(s.otherwise)return y.Nothing.value;throw new Error("Failed pattern match at Data.Array (line 143, column 3 - line 145, column 26): "+[n.constructor.name])})(0)}},z=function(r){return function(t){return n.drop(n.length(t)-r|0)(t)}},E=n["uncons'"](h.const(y.Nothing.value))(function(n){return function(n){return new y.Just(n)}}),S=function(r){return function(t){return n.sortImpl(function(n){return function(t){var e=r(n)(t);if(e instanceof A.GT)return 1;if(e instanceof A.EQ)return 0;if(e instanceof A.LT)return-1;throw new Error("Failed pattern match at Data.Array (line 702, column 15 - line 705, column 13): "+[e.constructor.name])}})(t)}},B=function(n){return function(r){return S(g.comparing(n)(r))}},M=function(n){return function(r){return S(g.compare(n))(r)}},W=function(n){return[n]},C=function(r){return 0===n.length(r)},k=function(n){return function(r){return e=f.empty(),c.foreach(r)(function(r){return function(){var u,i,o=m.map(c.functorST)((u=v.not(v.heytingAlgebraBoolean),i=d.any(d.foldableArray)(v.heytingAlgebraBoolean)(function(t){return n(t)(r)}),function(n){return u(i(n))}))(f.unsafeFreeze(e))();return t.when(c.applicativeST)(o)(m.void(c.functorST)(f.push(r)(e)))()}})(),f.unsafeFreeze(e)();var e}},L=function(n){return k(p.eq(n))},_=function(n){return function(r){return function(t){return function(e){return f.withArray(function(e){return d.traverse_(c.applicativeST)(n)(function(n){return f.modify(n)(t)(e)})(r)})(e)()}}}},O=function(r){return function(t){return n.zipWith(r)(n.range(0)(n.length(t)-1|0))(t)}},R=function(r){return function(t){return function(u){return e.apply(r.Applicative0().Apply0())(m.map(r.Plus1().Alt0().Functor0())(n.cons)(u))(o.defer(t)(function(n){return G(r)(t)(u)}))}}},G=function(n){return function(e){return function(u){return r.alt(n.Plus1().Alt0())(R(n)(e)(u))(t.pure(n.Applicative0())([]))}}},P=n._insertAt(y.Just.create)(y.Nothing.value),Q=function(r){if(C(r))return y.Nothing.value;if(s.otherwise)return new y.Just(n.slice(0)(n.length(r)-1|0)(r));throw new Error("Failed pattern match at Data.Array (line 323, column 1 - line 323, column 45): "+[r.constructor.name])},U=n.indexImpl(y.Just.create)(y.Nothing.value),H=function(r){return U(r)(n.length(r)-1|0)},K=function(n){return e.apply(y.applyMaybe)(m.map(y.functorMaybe)(function(n){return function(r){return{init:n,last:r}}})(Q(n)))(H(n))},V=function(n){return function(r){return function(t){return y.maybe(y.Nothing.value)(function(e){return D(n)(r(e))(t)})(U(t)(n))}}},X=function(r){return function(t){var e=function(n){var e,u=!1;function i(e){var i=U(t)(e);if(i instanceof y.Just)return r(i.value0)?void(n=e+1|0):(u=!0,new y.Just(e));if(i instanceof y.Nothing)return u=!0,y.Nothing.value;throw new Error("Failed pattern match at Data.Array (line 834, column 5 - line 836, column 25): "+[i.constructor.name])}for(;!u;)e=i(n);return e}(0);if(e instanceof y.Just&&0===e.value0)return{init:[],rest:t};if(e instanceof y.Just)return{init:n.slice(0)(e.value0)(t),rest:n.slice(e.value0)(n.length(t))(t)};if(e instanceof y.Nothing)return{init:t,rest:[]};throw new Error("Failed pattern match at Data.Array (line 821, column 3 - line 827, column 30): "+[e.constructor.name])}},Y=function(n){return function(r){return X(n)(r).init}},Z=function(n){return function(){var r=f.empty(),t=f.empty(),e=l.iterator(function(r){return U(n)(r)})();l.iterate(e)(function(n){return function(){return m.void(c.functorST)(f.push(n.value0)(r))(),m.void(c.functorST)(f.push(n.value1)(t))()}})();var u=f.unsafeFreeze(r)(),i=f.unsafeFreeze(t)();return new w.Tuple(u,i)}()},$=function(n){return U(n)(0)},nn=function(n){return function(r){var e,u=S(function(r){return function(t){return n(w.snd(r))(w.snd(t))}})(O(w.Tuple.create)(r)),i=$(u);if(i instanceof y.Nothing)return[];if(i instanceof y.Just)return m.map(m.functorArray)(w.snd)(B(g.ordInt)(w.fst)((e=f.unsafeThaw(W(i.value0))(),c.foreach(u)(function(r){return function(){var u,i,o=m.map(c.functorST)((u=y.fromJust(void 0),i=function(n){return u(H(n))},function(n){return w.snd(i(n))}))(f.unsafeFreeze(e))();return t.when(c.applicativeST)(p.notEq(A.eqOrdering)(n(o)(r.value1))(A.EQ.value))(m.void(c.functorST)(f.push(r)(e)))()}})(),f.unsafeFreeze(e)())));throw new Error("Failed pattern match at Data.Array (line 903, column 17 - line 911, column 29): "+[i.constructor.name])}},rn=function(n){return nn(g.compare(n))},tn=function(n){return function(r){return t=f.empty(),e=l.iterator(function(n){return U(r)(n)})(),l.iterate(e)(function(r){return m.void(c.functorST)(function(){var u=f.empty();f.push(r)(u)(),l.pushWhile(n(r))(e)(u)();var i=f.unsafeFreeze(u)();return f.push(i)(t)()})})(),f.unsafeFreeze(t)();var t,e}},en=function(n){return function(r){return tn(p.eq(n))(r)}},un=function(n){var r=en(n.Eq0()),t=M(n);return function(n){return r(t(n))}},on=function(r){return n.fromFoldableImpl(d.foldr(r))},an=function(r){return function(e){return function(i){return function(o){return a.tailRecM2(r)(function(i){return function(c){if(c>=n.length(o))return t.pure(r.Monad0().Applicative0())(new a.Done(i));if(s.otherwise)return u.bind(r.Monad0().Bind1())(e(i)(J()(o)(c)))(function(n){return t.pure(r.Monad0().Applicative0())(new a.Loop({a:n,b:c+1|0}))});throw new Error("Failed pattern match at Data.Array (line 1101, column 3 - line 1105, column 42): "+[i.constructor.name,c.constructor.name])}})(i)(0)}}}},cn=function r(e){return function(i){return function(o){return n["uncons'"](function(n){return t.pure(e.Applicative0())(o)})(function(n){return function(t){return u.bind(e.Bind1())(i(o)(n))(function(n){return r(e)(i)(n)(t)})}})}}},fn=n.findLastIndexImpl(y.Just.create)(y.Nothing.value),ln=function(n){return function(r){return function(t){var e=y.maybe(0)(function(n){return n+1|0})(fn(function(t){return p.eq(A.eqOrdering)(n(r)(t))(A.GT.value)})(t));return y.fromJust()(P(e)(r)(t))}}},sn=function(n){return ln(g.compare(n))},pn=n.findIndexImpl(y.Just.create)(y.Nothing.value),dn=function(r){return function(t){return function(e){return n.filter(function(n){return y.isJust(pn(r(n))(e))})(t)}}},hn=function(n){return dn(p.eq(n))},mn=function(n){return function(r){return fn(function(t){return p.eq(n)(t)(r)})}},vn=function(n){return function(r){return pn(function(t){return p.eq(n)(t)(r)})}},yn=function(n){return function(r){return X(n)(r).rest}},gn=function(r){return function(t){return n.take(n.length(t)-r|0)(t)}},An=n._deleteAt(y.Just.create)(y.Nothing.value),qn=function(n){return function(r){return function(t){return 0===t.length?[]:y.maybe(t)(function(n){return y.fromJust()(An(n)(t))})(pn(n(r))(t))}}},xn=function(n){return function(r){return function(t){return q.append(q.semigroupArray)(r)(d.foldl(d.foldableArray)(h.flip(qn(n)))(k(n)(t))(r))}}},wn=function(n){return xn(p.eq(n))},bn=function(n){return qn(p.eq(n))},Fn=function(n){return d.foldr(d.foldableArray)(bn(n))},Tn=h.flip(u.bind(u.bindArray)),jn=function(n){return Tn((r=y.maybe([])(W),function(t){return r(n(t))}));var r},Dn=function(n){return function(r){var t=m.map(n.Apply0().Functor0())(jn(function(n){return n.value1?new y.Just(n.value0):y.Nothing.value})),e=x.traverse(x.traversableArray)(n)(function(t){return m.map(n.Apply0().Functor0())(w.Tuple.create(t))(r(t))});return function(n){return t(e(n))}}},Jn=jn(i.identity(i.categoryFn)),In=function(n){return function(r){return function(t){return y.maybe(y.Nothing.value)(function(e){var u=r(e);if(u instanceof y.Nothing)return An(n)(t);if(u instanceof y.Just)return D(n)(u.value0)(t);throw new Error("Failed pattern match at Data.Array (line 544, column 10 - line 546, column 32): "+[u.constructor.name])})(U(t)(n))}}};module.exports={fromFoldable:on,toUnfoldable:N,singleton:W,some:R,many:G,null:C,insert:sn,insertBy:ln,head:$,last:H,tail:E,init:Q,uncons:I,unsnoc:K,index:U,elemIndex:vn,elemLastIndex:mn,findIndex:pn,findLastIndex:fn,insertAt:P,deleteAt:An,updateAt:D,updateAtIndices:j,modifyAt:V,modifyAtIndices:_,alterAt:In,concatMap:Tn,filterA:Dn,mapMaybe:jn,catMaybes:Jn,mapWithIndex:O,sort:M,sortBy:S,sortWith:B,takeEnd:z,takeWhile:Y,dropEnd:gn,dropWhile:yn,span:X,group:en,"group'":un,groupBy:tn,nub:rn,nubEq:L,nubBy:nn,nubByEq:k,union:wn,unionBy:xn,delete:bn,deleteBy:qn,difference:Fn,intersect:hn,intersectBy:dn,zipWithA:F,zip:T,unzip:Z,foldM:cn,foldRecM:an,unsafeIndex:J,range:n.range,replicate:n.replicate,length:n.length,cons:n.cons,snoc:n.snoc,reverse:n.reverse,concat:n.concat,filter:n.filter,partition:n.partition,slice:n.slice,take:n.take,drop:n.drop,zipWith:n.zipWith};
+},{"./foreign.js":"TZDL","../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Lazy/index.js":"y9cE","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.ST.Internal/index.js":"Sedc","../Data.Array.ST/index.js":"s8si","../Data.Array.ST.Iterator/index.js":"Wi7L","../Data.Boolean/index.js":"ObQr","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Traversable/index.js":"n7EE","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z"}],"9xaU":[function(require,module,exports) {
+var define;
+var t,r=function(t){"use strict";var e=1e7,n=7,o=9007199254740992,i=f(o),a=Math.log(o);function u(t,r){return void 0===t?u[0]:void 0!==r?10==+r?H(t):R(t,r):H(t)}function s(t,r){this.value=t,this.sign=r,this.isSmall=!1}function p(t){this.value=t,this.sign=t<0,this.isSmall=!0}function l(t){return-o<t&&t<o}function f(t){return t<1e7?[t]:t<1e14?[t%1e7,Math.floor(t/1e7)]:[t%1e7,Math.floor(t/1e7)%1e7,Math.floor(t/1e14)]}function h(t){v(t);var r=t.length;if(r<4&&P(t,i)<0)switch(r){case 0:return 0;case 1:return t[0];case 2:return t[0]+t[1]*e;default:return t[0]+(t[1]+t[2]*e)*e}return t}function v(t){for(var r=t.length;0===t[--r];);t.length=r+1}function y(t){for(var r=new Array(t),e=-1;++e<t;)r[e]=0;return r}function c(t){return t>0?Math.floor(t):Math.ceil(t)}function g(t,r){var n,o,i=t.length,a=r.length,u=new Array(i),s=0,p=e;for(o=0;o<a;o++)s=(n=t[o]+r[o]+s)>=p?1:0,u[o]=n-s*p;for(;o<i;)s=(n=t[o]+s)===p?1:0,u[o++]=n-s*p;return s>0&&u.push(s),u}function m(t,r){return t.length>=r.length?g(t,r):g(r,t)}function d(t,r){var n,o,i=t.length,a=new Array(i),u=e;for(o=0;o<i;o++)n=t[o]-u+r,r=Math.floor(n/u),a[o]=n-r*u,r+=1;for(;r>0;)a[o++]=r%u,r=Math.floor(r/u);return a}function w(t,r){var n,o,i=t.length,a=r.length,u=new Array(i),s=0,p=e;for(n=0;n<a;n++)(o=t[n]-s-r[n])<0?(o+=p,s=1):s=0,u[n]=o;for(n=a;n<i;n++){if(!((o=t[n]-s)<0)){u[n++]=o;break}o+=p,u[n]=o}for(;n<i;n++)u[n]=t[n];return v(u),u}function b(t,r,n){var o,i,a=t.length,u=new Array(a),l=-r,f=e;for(o=0;o<a;o++)i=t[o]+l,l=Math.floor(i/f),i%=f,u[o]=i<0?i+f:i;return"number"==typeof(u=h(u))?(n&&(u=-u),new p(u)):new s(u,n)}function M(t,r){var n,o,i,a,u=t.length,s=r.length,p=y(u+s),l=e;for(i=0;i<u;++i){a=t[i];for(var f=0;f<s;++f)n=a*r[f]+p[i+f],o=Math.floor(n/l),p[i+f]=n-o*l,p[i+f+1]+=o}return v(p),p}function S(t,r){var n,o,i=t.length,a=new Array(i),u=e,s=0;for(o=0;o<i;o++)n=t[o]*r+s,s=Math.floor(n/u),a[o]=n-s*u;for(;s>0;)a[o++]=s%u,s=Math.floor(s/u);return a}function q(t,r){for(var e=[];r-- >0;)e.push(0);return e.concat(t)}function E(t,r,n){return new s(t<e?S(r,t):M(r,f(t)),n)}function N(t){var r,n,o,i,a=t.length,u=y(a+a),s=e;for(o=0;o<a;o++){i=t[o];for(var p=0;p<a;p++)r=i*t[p]+u[o+p],n=Math.floor(r/s),u[o+p]=r-n*s,u[o+p+1]+=n}return v(u),u}function A(t,r){var n,o,i,a,u=t.length,s=y(u),p=e;for(i=0,n=u-1;n>=0;--n)i=(a=i*p+t[n])-(o=c(a/r))*r,s[n]=0|o;return[s,0|i]}function O(t,r){var n,o,i=H(r),a=t.value,l=i.value;if(0===l)throw new Error("Cannot divide by zero");if(t.isSmall)return i.isSmall?[new p(c(a/l)),new p(a%l)]:[u[0],t];if(i.isSmall){if(1===l)return[t,u[0]];if(-1==l)return[t.negate(),u[0]];var g=Math.abs(l);if(g<e){o=h((n=A(a,g))[0]);var m=n[1];return t.sign&&(m=-m),"number"==typeof o?(t.sign!==i.sign&&(o=-o),[new p(o),new p(m)]):[new s(o,t.sign!==i.sign),new p(m)]}l=f(g)}var d=P(a,l);if(-1===d)return[u[0],t];if(0===d)return[u[t.sign===i.sign?1:-1],u[0]];o=(n=a.length+l.length<=200?function(t,r){var n,o,i,a,u,s,p,l=t.length,f=r.length,v=e,c=y(r.length),g=r[f-1],m=Math.ceil(v/(2*g)),d=S(t,m),w=S(r,m);for(d.length<=l&&d.push(0),w.push(0),g=w[f-1],o=l-f;o>=0;o--){for(n=v-1,d[o+f]!==g&&(n=Math.floor((d[o+f]*v+d[o+f-1])/g)),i=0,a=0,s=w.length,u=0;u<s;u++)i+=n*w[u],p=Math.floor(i/v),a+=d[o+u]-(i-p*v),i=p,a<0?(d[o+u]=a+v,a=-1):(d[o+u]=a,a=0);for(;0!==a;){for(n-=1,i=0,u=0;u<s;u++)(i+=d[o+u]-v+w[u])<0?(d[o+u]=i+v,i=0):(d[o+u]=i,i=1);a+=i}c[o]=n}return d=A(d,m)[0],[h(c),h(d)]}(a,l):function(t,r){for(var n,o,i,a,u,s=t.length,p=r.length,l=[],f=[],y=e;s;)if(f.unshift(t[--s]),v(f),P(f,r)<0)l.push(0);else{i=f[(o=f.length)-1]*y+f[o-2],a=r[p-1]*y+r[p-2],o>p&&(i=(i+1)*y),n=Math.ceil(i/a);do{if(P(u=S(r,n),f)<=0)break;n--}while(n);l.push(n),f=w(f,u)}return l.reverse(),[h(l),h(f)]}(a,l))[0];var b=t.sign!==i.sign,M=n[1],q=t.sign;return"number"==typeof o?(b&&(o=-o),o=new p(o)):o=new s(o,b),"number"==typeof M?(q&&(M=-M),M=new p(M)):M=new s(M,q),[o,M]}function P(t,r){if(t.length!==r.length)return t.length>r.length?1:-1;for(var e=t.length-1;e>=0;e--)if(t[e]!==r[e])return t[e]>r[e]?1:-1;return 0}function x(t){var r=t.abs();return!r.isUnit()&&(!!(r.equals(2)||r.equals(3)||r.equals(5))||!(r.isEven()||r.isDivisibleBy(3)||r.isDivisibleBy(5))&&(!!r.lesser(25)||void 0))}s.prototype=Object.create(u.prototype),p.prototype=Object.create(u.prototype),s.prototype.add=function(t){var r=H(t);if(this.sign!==r.sign)return this.subtract(r.negate());var e=this.value,n=r.value;return r.isSmall?new s(d(e,Math.abs(n)),this.sign):new s(m(e,n),this.sign)},s.prototype.plus=s.prototype.add,p.prototype.add=function(t){var r=H(t),e=this.value;if(e<0!==r.sign)return this.subtract(r.negate());var n=r.value;if(r.isSmall){if(l(e+n))return new p(e+n);n=f(Math.abs(n))}return new s(d(n,Math.abs(e)),e<0)},p.prototype.plus=p.prototype.add,s.prototype.subtract=function(t){var r=H(t);if(this.sign!==r.sign)return this.add(r.negate());var e=this.value,n=r.value;return r.isSmall?b(e,Math.abs(n),this.sign):function(t,r,e){var n;return P(t,r)>=0?n=w(t,r):(n=w(r,t),e=!e),"number"==typeof(n=h(n))?(e&&(n=-n),new p(n)):new s(n,e)}(e,n,this.sign)},s.prototype.minus=s.prototype.subtract,p.prototype.subtract=function(t){var r=H(t),e=this.value;if(e<0!==r.sign)return this.add(r.negate());var n=r.value;return r.isSmall?new p(e-n):b(n,Math.abs(e),e>=0)},p.prototype.minus=p.prototype.subtract,s.prototype.negate=function(){return new s(this.value,!this.sign)},p.prototype.negate=function(){var t=this.sign,r=new p(-this.value);return r.sign=!t,r},s.prototype.abs=function(){return new s(this.value,!1)},p.prototype.abs=function(){return new p(Math.abs(this.value))},s.prototype.multiply=function(t){var r,n,o,i=H(t),a=this.value,p=i.value,l=this.sign!==i.sign;if(i.isSmall){if(0===p)return u[0];if(1===p)return this;if(-1===p)return this.negate();if((r=Math.abs(p))<e)return new s(S(a,r),l);p=f(r)}return n=a.length,o=p.length,new s(-.012*n-.012*o+15e-6*n*o>0?function t(r,e){var n=Math.max(r.length,e.length);if(n<=30)return M(r,e);n=Math.ceil(n/2);var o=r.slice(n),i=r.slice(0,n),a=e.slice(n),u=e.slice(0,n),s=t(i,u),p=t(o,a),l=t(m(i,o),m(u,a)),f=m(m(s,q(w(w(l,s),p),n)),q(p,2*n));return v(f),f}(a,p):M(a,p),l)},s.prototype.times=s.prototype.multiply,p.prototype._multiplyBySmall=function(t){return l(t.value*this.value)?new p(t.value*this.value):E(Math.abs(t.value),f(Math.abs(this.value)),this.sign!==t.sign)},s.prototype._multiplyBySmall=function(t){return 0===t.value?u[0]:1===t.value?this:-1===t.value?this.negate():E(Math.abs(t.value),this.value,this.sign!==t.sign)},p.prototype.multiply=function(t){return H(t)._multiplyBySmall(this)},p.prototype.times=p.prototype.multiply,s.prototype.square=function(){return new s(N(this.value),!1)},p.prototype.square=function(){var t=this.value*this.value;return l(t)?new p(t):new s(N(f(Math.abs(this.value))),!1)},s.prototype.divmod=function(t){var r=O(this,t);return{quotient:r[0],remainder:r[1]}},p.prototype.divmod=s.prototype.divmod,s.prototype.divide=function(t){return O(this,t)[0]},p.prototype.over=p.prototype.divide=s.prototype.over=s.prototype.divide,s.prototype.mod=function(t){return O(this,t)[1]},p.prototype.remainder=p.prototype.mod=s.prototype.remainder=s.prototype.mod,s.prototype.pow=function(t){var r,e,n,o=H(t),i=this.value,a=o.value;if(0===a)return u[1];if(0===i)return u[0];if(1===i)return u[1];if(-1===i)return o.isEven()?u[1]:u[-1];if(o.sign)return u[0];if(!o.isSmall)throw new Error("The exponent "+o.toString()+" is too large.");if(this.isSmall&&l(r=Math.pow(i,a)))return new p(c(r));for(e=this,n=u[1];!0&a&&(n=n.times(e),--a),0!==a;)a/=2,e=e.square();return n},p.prototype.pow=s.prototype.pow,s.prototype.modPow=function(t,r){if(t=H(t),(r=H(r)).isZero())throw new Error("Cannot take modPow with modulus 0");for(var e=u[1],n=this.mod(r);t.isPositive();){if(n.isZero())return u[0];t.isOdd()&&(e=e.multiply(n).mod(r)),t=t.divide(2),n=n.square().mod(r)}return e},p.prototype.modPow=s.prototype.modPow,s.prototype.compareAbs=function(t){var r=H(t),e=this.value,n=r.value;return r.isSmall?1:P(e,n)},p.prototype.compareAbs=function(t){var r=H(t),e=Math.abs(this.value),n=r.value;return r.isSmall?e===(n=Math.abs(n))?0:e>n?1:-1:-1},s.prototype.compare=function(t){if(t===1/0)return-1;if(t===-1/0)return 1;var r=H(t),e=this.value,n=r.value;return this.sign!==r.sign?r.sign?1:-1:r.isSmall?this.sign?-1:1:P(e,n)*(this.sign?-1:1)},s.prototype.compareTo=s.prototype.compare,p.prototype.compare=function(t){if(t===1/0)return-1;if(t===-1/0)return 1;var r=H(t),e=this.value,n=r.value;return r.isSmall?e==n?0:e>n?1:-1:e<0!==r.sign?e<0?-1:1:e<0?1:-1},p.prototype.compareTo=p.prototype.compare,s.prototype.equals=function(t){return 0===this.compare(t)},p.prototype.eq=p.prototype.equals=s.prototype.eq=s.prototype.equals,s.prototype.notEquals=function(t){return 0!==this.compare(t)},p.prototype.neq=p.prototype.notEquals=s.prototype.neq=s.prototype.notEquals,s.prototype.greater=function(t){return this.compare(t)>0},p.prototype.gt=p.prototype.greater=s.prototype.gt=s.prototype.greater,s.prototype.lesser=function(t){return this.compare(t)<0},p.prototype.lt=p.prototype.lesser=s.prototype.lt=s.prototype.lesser,s.prototype.greaterOrEquals=function(t){return this.compare(t)>=0},p.prototype.geq=p.prototype.greaterOrEquals=s.prototype.geq=s.prototype.greaterOrEquals,s.prototype.lesserOrEquals=function(t){return this.compare(t)<=0},p.prototype.leq=p.prototype.lesserOrEquals=s.prototype.leq=s.prototype.lesserOrEquals,s.prototype.isEven=function(){return 0==(1&this.value[0])},p.prototype.isEven=function(){return 0==(1&this.value)},s.prototype.isOdd=function(){return 1==(1&this.value[0])},p.prototype.isOdd=function(){return 1==(1&this.value)},s.prototype.isPositive=function(){return!this.sign},p.prototype.isPositive=function(){return this.value>0},s.prototype.isNegative=function(){return this.sign},p.prototype.isNegative=function(){return this.value<0},s.prototype.isUnit=function(){return!1},p.prototype.isUnit=function(){return 1===Math.abs(this.value)},s.prototype.isZero=function(){return!1},p.prototype.isZero=function(){return 0===this.value},s.prototype.isDivisibleBy=function(t){var r=H(t),e=r.value;return 0!==e&&(1===e||(2===e?this.isEven():this.mod(r).equals(u[0])))},p.prototype.isDivisibleBy=s.prototype.isDivisibleBy,s.prototype.isPrime=function(){var t=x(this);if(void 0!==t)return t;for(var e,n,o,i,a=this.abs(),s=a.prev(),p=[2,3,5,7,11,13,17,19],l=s;l.isEven();)l=l.divide(2);for(o=0;o<p.length;o++)if(!(i=r(p[o]).modPow(l,a)).equals(u[1])&&!i.equals(s)){for(n=!0,e=l;n&&e.lesser(s);e=e.multiply(2))(i=i.square().mod(a)).equals(s)&&(n=!1);if(n)return!1}return!0},p.prototype.isPrime=s.prototype.isPrime,s.prototype.isProbablePrime=function(t){var e=x(this);if(void 0!==e)return e;for(var n=this.abs(),o=void 0===t?5:t,i=0;i<o;i++){if(!r.randBetween(2,n.minus(2)).modPow(n.prev(),n).isUnit())return!1}return!0},p.prototype.isProbablePrime=s.prototype.isProbablePrime,s.prototype.modInv=function(t){for(var e,n,o,i=r.zero,a=r.one,u=H(t),s=this.abs();!s.equals(r.zero);)e=u.divide(s),n=i,o=u,i=a,u=s,a=n.subtract(e.multiply(a)),s=o.subtract(e.multiply(s));if(!u.equals(1))throw new Error(this.toString()+" and "+t.toString()+" are not co-prime");return-1===i.compare(0)&&(i=i.add(t)),this.isNegative()?i.negate():i},p.prototype.modInv=s.prototype.modInv,s.prototype.next=function(){var t=this.value;return this.sign?b(t,1,this.sign):new s(d(t,1),this.sign)},p.prototype.next=function(){var t=this.value;return t+1<o?new p(t+1):new s(i,!1)},s.prototype.prev=function(){var t=this.value;return this.sign?new s(d(t,1),!0):b(t,1,this.sign)},p.prototype.prev=function(){var t=this.value;return t-1>-o?new p(t-1):new s(i,!0)};for(var Z=[1];2*Z[Z.length-1]<=e;)Z.push(2*Z[Z.length-1]);var I=Z.length,B=Z[I-1];function C(t){return("number"==typeof t||"string"==typeof t)&&+Math.abs(t)<=e||t instanceof s&&t.value.length<=1}function J(t,e,n){e=H(e);for(var o=t.isNegative(),i=e.isNegative(),a=o?t.not():t,u=i?e.not():e,s=0,p=0,l=null,f=null,h=[];!a.isZero()||!u.isZero();)s=(l=O(a,B))[1].toJSNumber(),o&&(s=B-1-s),p=(f=O(u,B))[1].toJSNumber(),i&&(p=B-1-p),a=l[0],u=f[0],h.push(n(s,p));for(var v=0!==n(o?1:0,i?1:0)?r(-1):r(0),y=h.length-1;y>=0;y-=1)v=v.multiply(B).add(r(h[y]));return v}s.prototype.shiftLeft=function(t){if(!C(t))throw new Error(String(t)+" is too large for shifting.");if((t=+t)<0)return this.shiftRight(-t);for(var r=this;t>=I;)r=r.multiply(B),t-=I-1;return r.multiply(Z[t])},p.prototype.shiftLeft=s.prototype.shiftLeft,s.prototype.shiftRight=function(t){var r;if(!C(t))throw new Error(String(t)+" is too large for shifting.");if((t=+t)<0)return this.shiftLeft(-t);for(var e=this;t>=I;){if(e.isZero())return e;e=(r=O(e,B))[1].isNegative()?r[0].prev():r[0],t-=I-1}return(r=O(e,Z[t]))[1].isNegative()?r[0].prev():r[0]},p.prototype.shiftRight=s.prototype.shiftRight,s.prototype.not=function(){return this.negate().prev()},p.prototype.not=s.prototype.not,s.prototype.and=function(t){return J(this,t,function(t,r){return t&r})},p.prototype.and=s.prototype.and,s.prototype.or=function(t){return J(this,t,function(t,r){return t|r})},p.prototype.or=s.prototype.or,s.prototype.xor=function(t){return J(this,t,function(t,r){return t^r})},p.prototype.xor=s.prototype.xor;var z=1<<30,j=(e&-e)*(e&-e)|z;function L(t){var r=t.value,n="number"==typeof r?r|z:r[0]+r[1]*e|j;return n&-n}function D(t,r){return t=H(t),r=H(r),t.greater(r)?t:r}function U(t,r){return t=H(t),r=H(r),t.lesser(r)?t:r}function k(t,r){if(t=H(t).abs(),r=H(r).abs(),t.equals(r))return t;if(t.isZero())return r;if(r.isZero())return t;for(var e,n,o=u[1];t.isEven()&&r.isEven();)e=Math.min(L(t),L(r)),t=t.divide(e),r=r.divide(e),o=o.multiply(e);for(;t.isEven();)t=t.divide(L(t));do{for(;r.isEven();)r=r.divide(L(r));t.greater(r)&&(n=r,r=t,t=n),r=r.subtract(t)}while(!r.isZero());return o.isUnit()?t:t.multiply(o)}var R=function(t,r){for(var e=t.length,n=Math.abs(r),o=0;o<e;o++){if("-"!==(l=t[o].toLowerCase())&&/[a-z0-9]/.test(l)){if(/[0-9]/.test(l)&&+l>=n){if("1"===l&&1===n)continue;throw new Error(l+" is not a valid digit in base "+r+".")}if(l.charCodeAt(0)-87>=n)throw new Error(l+" is not a valid digit in base "+r+".")}}if(2<=r&&r<=36&&e<=a/Math.log(r)){var i=parseInt(t,r);if(isNaN(i))throw new Error(l+" is not a valid digit in base "+r+".");return new p(parseInt(t,r))}r=H(r);var u=[],s="-"===t[0];for(o=s?1:0;o<t.length;o++){var l,f=(l=t[o].toLowerCase()).charCodeAt(0);if(48<=f&&f<=57)u.push(H(l));else if(97<=f&&f<=122)u.push(H(l.charCodeAt(0)-87));else{if("<"!==l)throw new Error(l+" is not a valid character");var h=o;do{o++}while(">"!==t[o]);u.push(H(t.slice(h+1,o)))}}return T(u,r,s)};function T(t,r,e){var n,o=u[0],i=u[1];for(n=t.length-1;n>=0;n--)o=o.add(t[n].times(i)),i=i.times(r);return e?o.negate():o}function _(t){return t<=35?"0123456789abcdefghijklmnopqrstuvwxyz".charAt(t):"<"+t+">"}function $(t,e){if((e=r(e)).isZero()){if(t.isZero())return{value:[0],isNegative:!1};throw new Error("Cannot convert nonzero numbers to base 0.")}if(e.equals(-1)){if(t.isZero())return{value:[0],isNegative:!1};if(t.isNegative())return{value:[].concat.apply([],Array.apply(null,Array(-t)).map(Array.prototype.valueOf,[1,0])),isNegative:!1};var n=Array.apply(null,Array(+t-1)).map(Array.prototype.valueOf,[0,1]);return n.unshift([1]),{value:[].concat.apply([],n),isNegative:!1}}var o=!1;if(t.isNegative()&&e.isPositive()&&(o=!0,t=t.abs()),e.equals(1))return t.isZero()?{value:[0],isNegative:!1}:{value:Array.apply(null,Array(+t)).map(Number.prototype.valueOf,1),isNegative:o};for(var i,a=[],u=t;u.isNegative()||u.compareAbs(e)>=0;){i=u.divmod(e),u=i.quotient;var s=i.remainder;s.isNegative()&&(s=e.minus(s).abs(),u=u.next()),a.push(s.toJSNumber())}return a.push(u.toJSNumber()),{value:a.reverse(),isNegative:o}}function F(t,r){var e=$(t,r);return(e.isNegative?"-":"")+e.value.map(_).join("")}function G(t){if(l(+t)){var r=+t;if(r===c(r))return new p(r);throw"Invalid integer: "+t}var e="-"===t[0];e&&(t=t.slice(1));var o=t.split(/e/i);if(o.length>2)throw new Error("Invalid integer: "+o.join("e"));if(2===o.length){var i=o[1];if("+"===i[0]&&(i=i.slice(1)),(i=+i)!==c(i)||!l(i))throw new Error("Invalid integer: "+i+" is not a valid exponent.");var a=o[0],u=a.indexOf(".");if(u>=0&&(i-=a.length-u-1,a=a.slice(0,u)+a.slice(u+1)),i<0)throw new Error("Cannot include negative exponent part for integers");t=a+=new Array(i+1).join("0")}if(!/^([0-9][0-9]*)$/.test(t))throw new Error("Invalid integer: "+t);for(var f=[],h=t.length,y=n,g=h-y;h>0;)f.push(+t.slice(g,h)),(g-=y)<0&&(g=0),h-=y;return v(f),new s(f,e)}function H(t){return"number"==typeof t?function(t){if(l(t)){if(t!==c(t))throw new Error(t+" is not an integer.");return new p(t)}return G(t.toString())}(t):"string"==typeof t?G(t):t}s.prototype.toArray=function(t){return $(this,t)},p.prototype.toArray=function(t){return $(this,t)},s.prototype.toString=function(t){if(void 0===t&&(t=10),10!==t)return F(this,t);for(var r,e=this.value,n=e.length,o=String(e[--n]);--n>=0;)r=String(e[n]),o+="0000000".slice(r.length)+r;return(this.sign?"-":"")+o},p.prototype.toString=function(t){return void 0===t&&(t=10),10!=t?F(this,t):String(this.value)},s.prototype.toJSON=p.prototype.toJSON=function(){return this.toString()},s.prototype.valueOf=function(){return parseInt(this.toString(),10)},s.prototype.toJSNumber=s.prototype.valueOf,p.prototype.valueOf=function(){return this.value},p.prototype.toJSNumber=p.prototype.valueOf;for(var K=0;K<1e3;K++)u[K]=new p(K),K>0&&(u[-K]=new p(-K));return u.one=u[1],u.zero=u[0],u.minusOne=u[-1],u.max=D,u.min=U,u.gcd=k,u.lcm=function(t,r){return t=H(t).abs(),r=H(r).abs(),t.divide(k(t,r)).multiply(r)},u.isInstance=function(t){return t instanceof s||t instanceof p},u.randBetween=function(t,r){var n=U(t=H(t),r=H(r)),o=D(t,r).subtract(n).add(1);if(o.isSmall)return n.add(Math.floor(Math.random()*o));for(var i=[],a=!0,u=o.value.length-1;u>=0;u--){var l=a?o.value[u]:e,f=c(Math.random()*l);i.unshift(f),f<l&&(a=!1)}return i=h(i),n.add("number"==typeof i?new p(i):new s(i,!1))},u.fromArray=function(t,r,e){return T(t.map(H),H(r||10),e)},u}();"undefined"!=typeof module&&module.hasOwnProperty("exports")&&(module.exports=r),"function"==typeof t&&t.amd&&t("big-integer",[],function(){return r});
+},{}],"S0gh":[function(require,module,exports) {
+var n=require("big-integer");function r(n){return n>0?Math.floor(n):Math.ceil(n)}exports["fromBase'"]=function(r){return function(t){return function(u){return function(e){try{var o=n(e,u);return r(o)}catch(i){return t}}}}},exports["fromNumber'"]=function(t){return function(u){return function(e){try{var o=n(r(e));return t(o)}catch(i){return u}}}},exports.fromInt=function(r){return n(r)},exports.toBase=function(n){return function(r){return r.toString(n)}},exports.toNumber=function(n){return n.toJSNumber()},exports.biAdd=function(n){return function(r){return n.add(r)}},exports.biMul=function(n){return function(r){return n.multiply(r)}},exports.biSub=function(n){return function(r){return n.minus(r)}},exports.biMod=function(n){return function(r){return n.mod(r)}},exports.biDiv=function(n){return function(r){return n.divide(r)}},exports.biEquals=function(n){return function(r){return n.equals(r)}},exports.biCompare=function(n){return function(r){return n.compare(r)}},exports.abs=function(n){return n.abs()},exports.even=function(n){return n.isEven()},exports.odd=function(n){return n.isOdd()},exports.prime=function(n){return n.isPrime()},exports.pow=function(n){return function(r){return n.pow(r)}},exports.not=function(n){return n.not()},exports.or=function(n){return function(r){return n.or(r)}},exports.xor=function(n){return function(r){return n.xor(r)}},exports.and=function(n){return function(r){return n.and(r)}},exports.shl=function(n){return function(r){return n.shiftLeft(r)}},exports.shr=function(n){return function(r){return n.shiftRight(r)}},exports.digitsInBase=function(n){return function(r){return r.toArray(n)}};
+},{"big-integer":"9xaU"}],"2lBd":[function(require,module,exports) {
+"use strict";exports.fromNumberImpl=function(r){return function(n){return function(t){return(0|t)===t?r(t):n}}},exports.toNumber=function(r){return r},exports.fromStringAsImpl=function(r){return function(n){return function(t){var u;u=t<11?"[0-"+(t-1).toString()+"]":11===t?"[0-9a]":"[0-9a-"+String.fromCharCode(86+t)+"]";var o=new RegExp("^[\\+\\-]?"+u+"+$","i");return function(u){if(o.test(u)){var e=parseInt(u,t);return(0|e)===e?r(e):n}return n}}}},exports.toStringAs=function(r){return function(n){return n.toString(r)}},exports.quot=function(r){return function(n){return r/n|0}},exports.rem=function(r){return function(n){return r%n}},exports.pow=function(r){return function(n){return 0|Math.pow(r,n)}};
+},{}],"xYq2":[function(require,module,exports) {
+"use strict";var n=require("../Data.Ring/index.js"),i=require("../Data.Semiring/index.js"),r=function(n,i){this.Ring0=n,this.recip=i},e=function(n){return n.recip},t=function(n){return function(r){return function(t){return i.mul(n.Ring0().Semiring0())(r)(e(n)(t))}}},u=function(n){return function(r){return function(t){return i.mul(n.Ring0().Semiring0())(e(n)(t))(r)}}},c=new r(function(){return n.ringNumber},function(n){return 1/n});module.exports={DivisionRing:r,recip:e,leftDiv:u,rightDiv:t,divisionringNumber:c};
+},{"../Data.Ring/index.js":"E2qH","../Data.Semiring/index.js":"11NF"}],"pJ2E":[function(require,module,exports) {
+"use strict";exports.nan=NaN,exports.isNaN=isNaN,exports.infinity=1/0,exports.isFinite=isFinite,exports.readInt=function(t){return function(e){return parseInt(e,t)}},exports.readFloat=parseFloat;
+},{}],"aQlK":[function(require,module,exports) {
+"use strict";var i=require("./foreign.js");module.exports={nan:i.nan,isNaN:i.isNaN,infinity:i.infinity,isFinite:i.isFinite,readInt:i.readInt,readFloat:i.readFloat};
+},{"./foreign.js":"pJ2E"}],"9/+z":[function(require,module,exports) {
+"use strict";exports.abs=Math.abs,exports.acos=Math.acos,exports.asin=Math.asin,exports.atan=Math.atan,exports.atan2=function(t){return function(r){return Math.atan2(t,r)}},exports.ceil=Math.ceil,exports.cos=Math.cos,exports.exp=Math.exp,exports.floor=Math.floor,exports.trunc=Math.trunc||function(t){return t<0?Math.ceil(t):Math.floor(t)},exports.log=Math.log,exports.max=function(t){return function(r){return Math.max(t,r)}},exports.min=function(t){return function(r){return Math.min(t,r)}},exports.pow=function(t){return function(r){return Math.pow(t,r)}},exports.remainder=function(t){return function(r){return t%r}},exports.round=Math.round,exports.sin=Math.sin,exports.sqrt=Math.sqrt,exports.tan=Math.tan,exports.e=Math.E,exports.ln2=Math.LN2,exports.ln10=Math.LN10,exports.log2e=Math.LOG2E,exports.log10e=Math.LOG10E,exports.pi=Math.PI,exports.tau=2*Math.PI,exports.sqrt1_2=Math.SQRT1_2,exports.sqrt2=Math.SQRT2;
+},{}],"Rpaz":[function(require,module,exports) {
+"use strict";var a=require("./foreign.js");module.exports={abs:a.abs,acos:a.acos,asin:a.asin,atan:a.atan,atan2:a.atan2,ceil:a.ceil,cos:a.cos,exp:a.exp,floor:a.floor,log:a.log,max:a.max,min:a.min,pow:a.pow,round:a.round,sin:a.sin,sqrt:a.sqrt,tan:a.tan,trunc:a.trunc,remainder:a.remainder,e:a.e,ln2:a.ln2,ln10:a.ln10,log2e:a.log2e,log10e:a.log10e,pi:a.pi,tau:a.tau,sqrt1_2:a.sqrt1_2,sqrt2:a.sqrt2};
+},{"./foreign.js":"9/+z"}],"xNJb":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),e=require("../Control.Category/index.js"),t=require("../Data.Boolean/index.js"),r=require("../Data.Bounded/index.js"),i=require("../Data.CommutativeRing/index.js"),u=require("../Data.DivisionRing/index.js"),o=require("../Data.Eq/index.js"),a=require("../Data.EuclideanRing/index.js"),c=require("../Data.Maybe/index.js"),f=require("../Data.Ord/index.js"),l=require("../Data.Ordering/index.js"),d=require("../Data.Ring/index.js"),s=require("../Data.Semiring/index.js"),m=require("../Data.Show/index.js"),v=require("../Global/index.js"),w=require("../Math/index.js"),g=function(n){return n},q=function(){function n(){}return n.value=new n,n}(),h=function(){function n(){}return n.value=new n,n}(),D=new m.Show(function(n){if(n instanceof q)return"Even";if(n instanceof h)return"Odd";throw new Error("Failed pattern match at Data.Int (line 112, column 1 - line 114, column 19): "+[n.constructor.name])}),b=function(n){if(n>=2&&n<=36)return new c.Just(n);if(t.otherwise)return c.Nothing.value;throw new Error("Failed pattern match at Data.Int (line 193, column 1 - line 193, column 28): "+[n.constructor.name])},x=function(n){return 0!=(1&n)},y=8,j=16,p=n.fromStringAsImpl(c.Just.create)(c.Nothing.value),E=p(10),I=n.fromNumberImpl(c.Just.create)(c.Nothing.value),R=function(e){if(e===v.infinity)return 0;if(e===-v.infinity)return 0;if(e>=n.toNumber(r.top(r.boundedInt)))return r.top(r.boundedInt);if(e<=n.toNumber(r.bottom(r.boundedInt)))return r.bottom(r.boundedInt);if(t.otherwise)return c.fromMaybe(0)(I(e));throw new Error("Failed pattern match at Data.Int (line 66, column 1 - line 66, column 29): "+[e.constructor.name])},N=function(n){return R(w.round(n))},P=function(n){return R(w.floor(n))},S=function(n){return 0==(1&n)},F=function(n){return S(n)?q.value:h.value},O=new o.Eq(function(n){return function(e){return n instanceof q&&e instanceof q||n instanceof h&&e instanceof h}}),A=new f.Ord(function(){return O},function(n){return function(e){if(n instanceof q&&e instanceof q)return l.EQ.value;if(n instanceof q)return l.LT.value;if(e instanceof q)return l.GT.value;if(n instanceof h&&e instanceof h)return l.EQ.value;throw new Error("Failed pattern match at Data.Int (line 110, column 1 - line 110, column 40): "+[n.constructor.name,e.constructor.name])}}),C=new s.Semiring(function(n){return function(e){return o.eq(O)(n)(e)?q.value:h.value}},function(n){return function(e){return n instanceof h&&e instanceof h?h.value:q.value}},h.value,q.value),B=new d.Ring(function(){return C},s.add(C)),J=new u.DivisionRing(function(){return B},e.identity(e.categoryFn)),M=10,G=new i.CommutativeRing(function(){return B}),Q=new a.EuclideanRing(function(){return G},function(n){if(n instanceof q)return 0;if(n instanceof h)return 1;throw new Error("Failed pattern match at Data.Int (line 132, column 1 - line 136, column 17): "+[n.constructor.name])},function(n){return function(e){return n}},function(n){return function(n){return q.value}}),T=function(n){return R(w.ceil(n))},L=new r.Bounded(function(){return A},q.value,h.value),k=2,z=36;module.exports={fromNumber:I,ceil:T,floor:P,round:N,fromString:E,radix:b,binary:k,octal:y,decimal:M,hexadecimal:j,base36:z,fromStringAs:p,Even:q,Odd:h,parity:F,even:S,odd:x,eqParity:O,ordParity:A,showParity:D,boundedParity:L,semiringParity:C,ringParity:B,commutativeRingParity:G,euclideanRingParity:Q,divisionRingParity:J,toNumber:n.toNumber,toStringAs:n.toStringAs,quot:n.quot,rem:n.rem,pow:n.pow};
+},{"./foreign.js":"2lBd","../Control.Category/index.js":"IAi2","../Data.Boolean/index.js":"ObQr","../Data.Bounded/index.js":"kcUU","../Data.CommutativeRing/index.js":"60TQ","../Data.DivisionRing/index.js":"xYq2","../Data.Eq/index.js":"Pq4F","../Data.EuclideanRing/index.js":"2IRB","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Ring/index.js":"E2qH","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Global/index.js":"aQlK","../Math/index.js":"Rpaz"}],"g11n":[function(require,module,exports) {
+"use strict";exports.fromCharArray=function(n){return n.join("")},exports.toCharArray=function(n){return n.split("")},exports.singleton=function(n){return n},exports._charAt=function(n){return function(t){return function(r){return function(u){return r>=0&&r<u.length?n(u.charAt(r)):t}}}},exports._toChar=function(n){return function(t){return function(r){return 1===r.length?n(r):t}}},exports.length=function(n){return n.length},exports.countPrefix=function(n){return function(t){for(var r=0;r<t.length&&n(t.charAt(r));)r++;return r}},exports._indexOf=function(n){return function(t){return function(r){return function(u){var e=u.indexOf(r);return-1===e?t:n(e)}}}},exports["_indexOf'"]=function(n){return function(t){return function(r){return function(u){return function(e){if(u<0||u>e.length)return t;var o=e.indexOf(r,u);return-1===o?t:n(o)}}}}},exports._lastIndexOf=function(n){return function(t){return function(r){return function(u){var e=u.lastIndexOf(r);return-1===e?t:n(e)}}}},exports["_lastIndexOf'"]=function(n){return function(t){return function(r){return function(u){return function(e){if(u<0||u>e.length)return t;var o=e.lastIndexOf(r,u);return-1===o?t:n(o)}}}}},exports.take=function(n){return function(t){return t.substr(0,n)}},exports.drop=function(n){return function(t){return t.substring(n)}},exports._slice=function(n){return function(t){return function(r){return r.slice(n,t)}}},exports.splitAt=function(n){return function(t){return{before:t.substring(0,n),after:t.substring(n)}}};
+},{}],"iZpG":[function(require,module,exports) {
+"use strict";exports.charAt=function(r){return function(t){if(r>=0&&r<t.length)return t.charAt(r);throw new Error("Data.String.Unsafe.charAt: Invalid index.")}},exports.char=function(r){if(1===r.length)return r.charAt(0);throw new Error("Data.String.Unsafe.char: Expected string of length 1.")};
+},{}],"5UWM":[function(require,module,exports) {
+"use strict";var r=require("./foreign.js");module.exports={char:r.char,charAt:r.charAt};
+},{"./foreign.js":"iZpG"}],"6c6X":[function(require,module,exports) {
+"use strict";var t=require("./foreign.js"),n=require("../Data.Boolean/index.js"),e=require("../Data.Maybe/index.js"),r=require("../Data.String.Unsafe/index.js"),u=function(n){return""===n?e.Nothing.value:new e.Just({head:r.charAt(0)(n),tail:t.drop(1)(n)})},i=t._toChar(e.Just.create)(e.Nothing.value),a=function(n){return function(e){return t.take(t.countPrefix(n)(e))(e)}},o=function(n){return function(e){return t.drop(t.length(e)-n|0)(e)}},c=function(r){return function(u){return function(i){var a=t.length(i),o=function(t){if(t<0)return a+t|0;if(n.otherwise)return t;throw new Error("Failed pattern match at Data.String.CodeUnits (line 314, column 5 - line 315, column 27): "+[t.constructor.name])},c=o(u),f=o(r);return f<0||f>=a||c<0||c>a||f>c?e.Nothing.value:new e.Just(t._slice(r)(u)(i))}}},f=t["_lastIndexOf'"](e.Just.create)(e.Nothing.value),l=t._lastIndexOf(e.Just.create)(e.Nothing.value),s=function(n){return function(r){var u=l(n)(r);return u instanceof e.Just&&u.value0===(t.length(r)-t.length(n)|0)?e.Just.create(t.take(u.value0)(r)):e.Nothing.value}},h=t["_indexOf'"](e.Just.create)(e.Nothing.value),g=t._indexOf(e.Just.create)(e.Nothing.value),d=function(n){return function(r){var u=g(n)(r);return u instanceof e.Just&&0===u.value0?e.Just.create(t.drop(t.length(n))(r)):e.Nothing.value}},v=function(n){return function(e){return t.drop(t.countPrefix(n)(e))(e)}},x=function(n){return function(e){return t.take(t.length(e)-n|0)(e)}},p=function(t){var n=g(t);return function(t){return e.isJust(n(t))}},J=t._charAt(e.Just.create)(e.Nothing.value);module.exports={stripPrefix:d,stripSuffix:s,contains:p,charAt:J,toChar:i,uncons:u,indexOf:g,"indexOf'":h,lastIndexOf:l,"lastIndexOf'":f,takeRight:o,takeWhile:a,dropRight:x,dropWhile:v,slice:c,singleton:t.singleton,fromCharArray:t.fromCharArray,toCharArray:t.toCharArray,length:t.length,countPrefix:t.countPrefix,take:t.take,drop:t.drop,splitAt:t.splitAt};
+},{"./foreign.js":"g11n","../Data.Boolean/index.js":"ObQr","../Data.Maybe/index.js":"5mN7","../Data.String.Unsafe/index.js":"5UWM"}],"B+B2":[function(require,module,exports) {
+"use strict";exports._localeCompare=function(r){return function(n){return function(t){return function(e){return function(o){var u=e.localeCompare(o);return u<0?r:u>0?t:n}}}}},exports.replace=function(r){return function(n){return function(t){return t.replace(r,n)}}},exports.replaceAll=function(r){return function(n){return function(t){return t.replace(new RegExp(r.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"g"),n)}}},exports.split=function(r){return function(n){return n.split(r)}},exports.toLower=function(r){return r.toLowerCase()},exports.toUpper=function(r){return r.toUpperCase()},exports.trim=function(r){return r.trim()},exports.joinWith=function(r){return function(n){return n.join(r)}};
+},{}],"OSrc":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),r=require("../Data.Ordering/index.js"),l=function(e){return""===e},o=e._localeCompare(r.LT.value)(r.EQ.value)(r.GT.value);module.exports={null:l,localeCompare:o,replace:e.replace,replaceAll:e.replaceAll,split:e.split,toLower:e.toLower,toUpper:e.toUpper,trim:e.trim,joinWith:e.joinWith};
+},{"./foreign.js":"B+B2","../Data.Ordering/index.js":"5Eun"}],"Ph6A":[function(require,module,exports) {
+"use strict";var n=require("../Control.Bind/index.js"),r=require("../Data.Eq/index.js"),t=require("../Data.Foldable/index.js"),e=require("../Data.Maybe/index.js"),i=require("../Data.Monoid/index.js"),o=require("../Data.Ord/index.js"),u=require("../Data.Semigroup/index.js"),c=require("../Data.Show/index.js"),a=require("../Data.String.CodeUnits/index.js"),f=require("../Data.String.Common/index.js"),p=require("../Data.Symbol/index.js"),m=function(n){return n},s=function(n){return n},l=function(n){this.nes=n},d=function(n){return f.toUpper(n)},S=function(n){return n},g=function(n){return f.toLower(n)},y=new c.Show(function(n){return"(NonEmptyString.unsafeFromString "+c.show(c.showString)(n)+")"}),E=new c.Show(function(n){return"(NonEmptyReplacement "+c.show(y)(n)+")"}),x=u.semigroupString,N=x,q=function(n){return function(r){return function(t){return f.replaceAll(n)(r)(t)}}},w=function(n){return function(r){return function(t){return f.replace(n)(r)(t)}}},j=function(n){return function(r){return n+r}},h=o.ordString,b=h,D=function(n){return new l(function(r){return p.reflectSymbol(n)(r)})},F=function(n){return n.nes},v=function(n){return new l(function(n){return""})},R=function(n){return function(r){return f.localeCompare(n)(r)}},C=function(n){return function(r){return n(r)}},M=function(n){return function(r){var e=t.intercalate(n.Foldable0())(i.monoidString)(r);return function(n){return m(e(n))}}},U=function(n){return function(r){var e=t.intercalate(n)(i.monoidString)(r);return function(n){return e(n)}}},W=function(n){return function(r){var t=U(n.Foldable0())(r);return function(n){return m(t(n))}}},k=function(n){return""===n?e.Nothing.value:new e.Just(n)},A=function(r){return n.composeKleisliFlipped(e.bindMaybe)(k)(C(a.stripPrefix(r)))},B=function(r){return n.composeKleisliFlipped(e.bindMaybe)(k)(C(a.stripSuffix(r)))},J=function(n){return k(f.trim(n))},K=function(n){var r=e.fromJust(n);return function(n){return r(k(n))}},L=r.eqString,P=L,O=function(n){return C(a.contains(n))},z=function(n){return function(r){return n+r}};module.exports={nes:F,NonEmptyString:m,MakeNonEmpty:l,NonEmptyReplacement:s,fromString:k,unsafeFromString:K,toString:S,appendString:z,prependString:j,stripPrefix:A,stripSuffix:B,contains:O,localeCompare:R,replace:w,replaceAll:q,toLower:g,toUpper:d,trim:J,joinWith:U,join1With:W,joinWith1:M,liftS:C,eqNonEmptyString:L,ordNonEmptyString:h,semigroupNonEmptyString:x,showNonEmptyString:y,makeNonEmptyBad:v,nonEmptyNonEmpty:D,eqNonEmptyReplacement:P,ordNonEmptyReplacement:b,semigroupNonEmptyReplacement:N,showNonEmptyReplacement:E};
+},{"../Control.Bind/index.js":"7VcT","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.String.CodeUnits/index.js":"6c6X","../Data.String.Common/index.js":"OSrc","../Data.Symbol/index.js":"4oJQ"}],"Zx+T":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),e=require("../Data.CommutativeRing/index.js"),r=require("../Data.Eq/index.js"),i=require("../Data.EuclideanRing/index.js"),t=require("../Data.Int/index.js"),o=require("../Data.Maybe/index.js"),u=require("../Data.Ord/index.js"),a=require("../Data.Ordering/index.js"),s=require("../Data.Ring/index.js"),d=require("../Data.Semiring/index.js"),m=require("../Data.Show/index.js"),g=require("../Data.String.NonEmpty.Internal/index.js"),f=n.toBase(10),b=function(e){return function(r){return o.fromJust()(g.fromString(n.toBase(e)(r)))}},c=b(10),q=new m.Show(function(n){return'fromString "'+f(n)+'"'}),B=new d.Semiring(n.biAdd,n.biMul,n.fromInt(1),n.fromInt(0)),l=new s.Ring(function(){return B},n.biSub),v=n.biMod,I=n.biDiv,x=n["fromNumber'"](o.Just.create)(o.Nothing.value),D=n["fromBase'"](o.Just.create)(o.Nothing.value),j=D(10),w=new r.Eq(n.biEquals),S=new u.Ord(function(){return w},function(e){return function(r){var i=n.biCompare(e)(r);return 1===i?a.GT.value:0===i?a.EQ.value:a.LT.value}}),h=new e.CommutativeRing(function(){return l}),N=new i.EuclideanRing(function(){return h},function(e){return t.floor(n.toNumber(n.abs(e)))},function(e){return function(r){return n.biDiv(s.sub(l)(e)(i.mod(N)(e)(r)))(r)}},function(e){return function(r){var i=n.abs(r);return n.biMod(d.add(B)(n.biMod(e)(i))(i))(i)}});module.exports={fromString:j,fromBase:D,fromNumber:x,toString:f,toNonEmptyString:c,"toBase'":b,quot:I,rem:v,eqBigInt:w,ordBigInt:S,showBigInt:q,semiringBigInt:B,ringBigInt:l,commutativeRingBigInt:h,euclideanRingBigInt:N,fromInt:n.fromInt,toBase:n.toBase,digitsInBase:n.digitsInBase,abs:n.abs,even:n.even,odd:n.odd,prime:n.prime,pow:n.pow,not:n.not,or:n.or,xor:n.xor,and:n.and,shl:n.shl,shr:n.shr,toNumber:n.toNumber};
+},{"./foreign.js":"S0gh","../Data.CommutativeRing/index.js":"60TQ","../Data.Eq/index.js":"Pq4F","../Data.EuclideanRing/index.js":"2IRB","../Data.Int/index.js":"xNJb","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Ring/index.js":"E2qH","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.String.NonEmpty.Internal/index.js":"Ph6A"}],"qF8i":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),e=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Category/index.js"),u=require("../Control.Plus/index.js"),o=require("../Data.Eq/index.js"),i=require("../Data.Foldable/index.js"),a=require("../Data.FoldableWithIndex/index.js"),l=require("../Data.Functor/index.js"),c=require("../Data.FunctorWithIndex/index.js"),f=require("../Data.Maybe/index.js"),d=require("../Data.Ord/index.js"),p=require("../Data.Ordering/index.js"),v=require("../Data.Semigroup/index.js"),s=require("../Data.Semigroup.Foldable/index.js"),x=require("../Data.Show/index.js"),q=require("../Data.Traversable/index.js"),m=require("../Data.TraversableWithIndex/index.js"),y=require("../Data.Tuple/index.js"),h=require("../Data.Unfoldable/index.js"),b=require("../Data.Unfoldable1/index.js"),w=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(r){return new n(e,r)}},n}(),j=function(n){return new b.Unfoldable1(function(e){return function(r){return y.uncurry(w.create)(l.map(y.functorTuple)(h.unfoldr(n)(l.map(f.functorMaybe)(e)))(e(r)))}})},E=function(n){return n.value1},F=function(n){return function(e){return new w(e,u.empty(n))}},N=function(n){return function(e){return new x.Show(function(r){return"(NonEmpty "+x.show(n)(r.value0)+" "+x.show(e)(r.value1)+")"})}},D=function(r){return function(t){return n.alt(r.Plus1().Alt0())(e.pure(r.Applicative0())(t.value0))(t.value1)}},I=function(n){return n.value0},W=function(n){return new l.Functor(function(e){return function(r){return new w(e(r.value0),l.map(n)(e)(r.value1))}})},g=function(n){return new c.FunctorWithIndex(function(){return W(n.Functor0())},function(e){return function(r){return new w(e(f.Nothing.value)(r.value0),c.mapWithIndex(n)(function(n){return e(f.Just.create(n))})(r.value1))}})},A=function(n){return function(e){return n(e.value0)(e.value1)}},T=function(n){return function(e){return function(r){return i.foldl(n)(e)(r.value0)(r.value1)}}},C=function(n){return new i.Foldable(function(e){return function(r){return function(t){return v.append(e.Semigroup0())(r(t.value0))(i.foldMap(n)(e)(r)(t.value1))}}},function(e){return function(r){return function(t){return i.foldl(n)(e)(e(r)(t.value0))(t.value1)}}},function(e){return function(r){return function(t){return e(t.value0)(i.foldr(n)(e)(r)(t.value1))}}})},S=function(n){return new a.FoldableWithIndex(function(){return C(n.Foldable0())},function(e){return function(r){return function(t){return v.append(e.Semigroup0())(r(f.Nothing.value)(t.value0))(a.foldMapWithIndex(n)(e)(function(n){return r(f.Just.create(n))})(t.value1))}}},function(e){return function(r){return function(t){return a.foldlWithIndex(n)(function(n){return e(f.Just.create(n))})(e(f.Nothing.value)(r)(t.value0))(t.value1)}}},function(e){return function(r){return function(t){return e(f.Nothing.value)(t.value0)(a.foldrWithIndex(n)(function(n){return e(f.Just.create(n))})(r)(t.value1))}}})},J=function(n){return new q.Traversable(function(){return C(n.Foldable1())},function(){return W(n.Functor0())},function(e){return function(t){return r.apply(e.Apply0())(l.map(e.Apply0().Functor0())(w.create)(t.value0))(q.sequence(n)(e)(t.value1))}},function(e){return function(t){return function(u){return r.apply(e.Apply0())(l.map(e.Apply0().Functor0())(w.create)(t(u.value0)))(q.traverse(n)(e)(t)(u.value1))}}})},M=function(n){return new m.TraversableWithIndex(function(){return S(n.FoldableWithIndex1())},function(){return g(n.FunctorWithIndex0())},function(){return J(n.Traversable2())},function(e){return function(t){return function(u){return r.apply(e.Apply0())(l.map(e.Apply0().Functor0())(w.create)(t(f.Nothing.value)(u.value0)))(m.traverseWithIndex(n)(e)(function(n){return t(f.Just.create(n))})(u.value1))}}})},O=function n(e){return new s.Foldable1(function(){return C(e)},function(r){return s.foldMap1(n(e))(r)(t.identity(t.categoryFn))},function(n){return function(r){return function(t){return i.foldl(e)(function(e){return function(t){return v.append(n)(e)(r(t))}})(r(t.value0))(t.value1)}}})},U=function(n){return function(e){return new o.Eq(function(r){return function(t){return o.eq(e)(r.value0)(t.value0)&&o.eq1(n)(e)(r.value1)(t.value1)}})}},G=function(n){return function(e){return new d.Ord(function(){return U(n.Eq10())(e.Eq0())},function(r){return function(t){var u=d.compare(e)(r.value0)(t.value0);return u instanceof p.LT?p.LT.value:u instanceof p.GT?p.GT.value:d.compare1(n)(e)(r.value1)(t.value1)}})}},L=function(n){return new o.Eq1(function(e){return o.eq(U(n)(e))})},P=function(n){return new d.Ord1(function(){return L(n.Eq10())},function(e){return d.compare(G(n)(e))})};module.exports={NonEmpty:w,singleton:F,foldl1:T,fromNonEmpty:A,oneOf:D,head:I,tail:E,showNonEmpty:N,eqNonEmpty:U,eq1NonEmpty:L,ordNonEmpty:G,ord1NonEmpty:P,functorNonEmpty:W,functorWithIndex:g,foldableNonEmpty:C,foldableWithIndexNonEmpty:S,traversableNonEmpty:J,traversableWithIndexNonEmpty:M,foldable1NonEmpty:O,unfoldable1NonEmpty:j};
+},{"../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Control.Plus/index.js":"oMBg","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Semigroup.Foldable/index.js":"ht+A","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unfoldable1/index.js":"S0Nl"}],"Xxuc":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),e=require("../Control.Alternative/index.js"),t=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),i=require("../Control.Category/index.js"),o=require("../Control.Comonad/index.js"),a=require("../Control.Extend/index.js"),l=require("../Control.Monad/index.js"),c=require("../Control.MonadPlus/index.js"),f=require("../Control.MonadZero/index.js"),v=require("../Control.Plus/index.js"),s=require("../Data.Eq/index.js"),d=require("../Data.Foldable/index.js"),p=require("../Data.FoldableWithIndex/index.js"),m=require("../Data.Function/index.js"),w=require("../Data.Functor/index.js"),y=require("../Data.FunctorWithIndex/index.js"),x=require("../Data.Maybe/index.js"),E=require("../Data.Monoid/index.js"),L=require("../Data.Newtype/index.js"),h=require("../Data.NonEmpty/index.js"),N=require("../Data.Ord/index.js"),b=require("../Data.Ordering/index.js"),q=require("../Data.Semigroup/index.js"),j=require("../Data.Semigroup.Traversable/index.js"),I=require("../Data.Semiring/index.js"),D=require("../Data.Show/index.js"),W=require("../Data.Traversable/index.js"),F=require("../Data.TraversableWithIndex/index.js"),T=require("../Data.Tuple/index.js"),g=require("../Data.Unfoldable/index.js"),C=require("../Data.Unfoldable1/index.js"),A=function(){function n(){}return n.value=new n,n}(),M=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),S=function(n){return n},P=function(n){return new M(n.value0,n.value1)},O=new L.Newtype(function(n){return n},S),U=function(n){return function(e){return new h.NonEmpty(n,new M(e.value0,e.value1))}},B=function(n){var e;return e=A.value,function(t){var r,u=e,i=!1;function o(e,r){return r instanceof M&&r.value1 instanceof M&&r.value1.value1 instanceof M?(u=new M(r,e),void(t=r.value1.value1.value1)):(i=!0,(a=e,function(e){for(var t,r,u,i=a,o=!1;!o;)u=e,t=(r=i)instanceof M&&r.value0 instanceof M&&r.value0.value1 instanceof M&&r.value0.value1.value1 instanceof M?(i=r.value1,void(e=new M(n(r.value0.value0),new M(n(r.value0.value1.value0),new M(n(r.value0.value1.value1.value0),u))))):(o=!0,u);return t})((o=r)instanceof M&&o.value1 instanceof M&&o.value1.value1 instanceof A?new M(n(o.value0),new M(n(o.value1.value0),A.value)):o instanceof M&&o.value1 instanceof A?new M(n(o.value0),A.value):A.value));var o,a}for(;!i;)r=o(u,t);return r}},Z=new w.Functor(B),J=h.functorNonEmpty(Z),Q=new d.Foldable(function(n){return function(e){return d.foldl(Q)(function(t){var r=q.append(n.Semigroup0())(t);return function(n){return r(e(n))}})(E.mempty(n))}},function(n){return function(e){return function(t){var r,u=e,i=!1;function o(e,r){if(r instanceof A)return i=!0,e;if(r instanceof M)return u=n(e)(r.value0),void(t=r.value1);throw new Error("Failed pattern match at Data.List.Types (line 109, column 12 - line 111, column 30): "+[r.constructor.name])}for(;!i;)r=o(u,t);return r}}},function(n){return function(e){var t=d.foldl(Q)(m.flip(M.create))(A.value),r=d.foldl(Q)(m.flip(n))(e);return function(n){return r(t(n))}}}),G=h.foldableNonEmpty(Q),k=new p.FoldableWithIndex(function(){return Q},function(n){return function(e){return p.foldlWithIndex(k)(function(t){return function(r){var u=q.append(n.Semigroup0())(r),i=e(t);return function(n){return u(i(n))}}})(E.mempty(n))}},function(n){return function(e){var t=d.foldl(Q)(function(e){return function(t){return new T.Tuple(e.value0+1|0,n(e.value0)(e.value1)(t))}})(new T.Tuple(0,e));return function(n){return T.snd(t(n))}}},function(n){return function(e){return function(t){var r=d.foldl(Q)(function(n){return function(e){return new T.Tuple(n.value0+1|0,new M(e,n.value1))}})(new T.Tuple(0,A.value))(t);return T.snd(d.foldl(Q)(function(e){return function(t){return new T.Tuple(e.value0-1|0,n(e.value0-1|0)(t)(e.value1))}})(new T.Tuple(r.value0,e))(r.value1))}}}),z=new p.FoldableWithIndex(function(){return G},function(n){return function(e){return function(t){return p.foldMapWithIndex(h.foldableWithIndexNonEmpty(k))(n)((r=x.maybe(0)(I.add(I.semiringInt)(1)),function(n){return e(r(n))}))(t);var r}}},function(n){return function(e){return function(t){return p.foldlWithIndex(h.foldableWithIndexNonEmpty(k))((r=x.maybe(0)(I.add(I.semiringInt)(1)),function(e){return n(r(e))}))(e)(t);var r}}},function(n){return function(e){return function(t){return p.foldrWithIndex(h.foldableWithIndexNonEmpty(k))((r=x.maybe(0)(I.add(I.semiringInt)(1)),function(e){return n(r(e))}))(e)(t);var r}}}),H=new y.FunctorWithIndex(function(){return Z},function(n){return p.foldrWithIndex(k)(function(e){return function(t){return function(r){return new M(n(e)(t),r)}}})(A.value)}),K=new y.FunctorWithIndex(function(){return J},function(n){return function(e){return S(y.mapWithIndex(h.functorWithIndex(H))((t=x.maybe(0)(I.add(I.semiringInt)(1)),function(e){return n(t(e))}))(e));var t}}),R=new q.Semigroup(function(n){return function(e){return d.foldr(Q)(M.create)(e)(n)}}),V=new E.Monoid(function(){return R},A.value),X=new q.Semigroup(function(n){return function(e){return new h.NonEmpty(n.value0,q.append(R)(n.value1)(P(e)))}}),Y=function(n){return new D.Show(function(e){return e instanceof A?"Nil":"("+d.intercalate(Q)(E.monoidString)(" : ")(w.map(Z)(D.show(n))(e))+" : Nil)"})},$=function(n){return new D.Show(function(e){return"(NonEmptyList "+D.show(h.showNonEmpty(n)(Y(n)))(e)+")"})},_=new W.Traversable(function(){return Q},function(){return Z},function(n){return W.traverse(_)(n)(i.identity(i.categoryFn))},function(n){return function(e){var u=w.map(n.Apply0().Functor0())(d.foldl(Q)(m.flip(M.create))(A.value)),i=d.foldl(Q)(function(t){var u=r.lift2(n.Apply0())(m.flip(M.create))(t);return function(n){return u(e(n))}})(t.pure(n)(A.value));return function(n){return u(i(n))}}}),nn=h.traversableNonEmpty(_),en=new F.TraversableWithIndex(function(){return k},function(){return H},function(){return _},function(n){return function(e){var u=d.foldl(Q)(m.flip(M.create))(A.value),i=w.map(n.Apply0().Functor0())(u),o=p.foldlWithIndex(k)(function(t){return function(u){var i=r.lift2(n.Apply0())(m.flip(M.create))(u),o=e(t);return function(n){return i(o(n))}}})(t.pure(n)(A.value));return function(n){return i(o(n))}}}),tn=new F.TraversableWithIndex(function(){return z},function(){return K},function(){return nn},function(n){return function(e){return function(t){return w.map(n.Apply0().Functor0())(S)(F.traverseWithIndex(h.traversableWithIndexNonEmpty(en))(n)((r=x.maybe(0)(I.add(I.semiringInt)(1)),function(n){return e(r(n))}))(t));var r}}}),rn=new C.Unfoldable1(function(n){return function(e){var t;return(t=e,function(e){var r,u=t,i=!1;function o(t,r){var o=n(t);if(o.value1 instanceof x.Just)return u=o.value1.value0,void(e=new M(o.value0,r));if(o.value1 instanceof x.Nothing)return i=!0,d.foldl(Q)(m.flip(M.create))(A.value)(new M(o.value0,r));throw new Error("Failed pattern match at Data.List.Types (line 133, column 22 - line 135, column 61): "+[o.constructor.name])}for(;!i;)r=o(u,e);return r})(A.value)}}),un=new g.Unfoldable(function(){return rn},function(n){return function(e){var t;return(t=e,function(e){var r,u=t,i=!1;function o(t,r){var o=n(t);if(o instanceof x.Nothing)return i=!0,d.foldl(Q)(m.flip(M.create))(A.value)(r);if(o instanceof x.Just)return u=o.value0.value1,void(e=new M(o.value0.value0,r));throw new Error("Failed pattern match at Data.List.Types (line 140, column 22 - line 142, column 52): "+[o.constructor.name])}for(;!i;)r=o(u,e);return r})(A.value)}}),on=h.unfoldable1NonEmpty(un),an=h.foldable1NonEmpty(Q),ln=new a.Extend(function(){return J},function(n){return function(e){return new h.NonEmpty(n(e),d.foldr(Q)(function(e){return function(t){return{val:new M(n(new h.NonEmpty(e,t.acc)),t.val),acc:new M(e,t.acc)}}})({val:A.value,acc:A.value})(e.value1).val)}}),cn=new a.Extend(function(){return Z},function(n){return function(e){if(e instanceof A)return A.value;if(e instanceof M){return new M(n(e),d.foldr(Q)(function(e){return function(t){var r=new M(e,t.acc);return{val:new M(n(r),t.val),acc:r}}})({val:A.value,acc:A.value})(e.value1).val)}throw new Error("Failed pattern match at Data.List.Types (line 180, column 1 - line 187, column 42): "+[n.constructor.name,e.constructor.name])}}),fn=new s.Eq1(function(n){return function(e){return function(t){var r;return(r=e,function(e){return function(t){for(var u,i,o,a,l=r,c=e,f=!1;!f;)i=l,o=c,u=(a=t)?i instanceof A&&o instanceof A?(f=!0,a):i instanceof M&&o instanceof M?(l=i.value1,c=o.value1,void(t=a&&s.eq(n)(o.value0)(i.value0))):(f=!0,!1):(f=!0,!1);return u}})(t)(!0)}}}),vn=function(n){return new s.Eq(s.eq1(fn)(n))},sn=function(n){return h.eqNonEmpty(fn)(n)},dn=new N.Ord1(function(){return fn},function(n){return function(e){return function(t){var r;return(r=e,function(e){var t,u=r,i=!1;function o(t,r){if(t instanceof A&&r instanceof A)return i=!0,b.EQ.value;if(t instanceof A)return i=!0,b.LT.value;if(r instanceof A)return i=!0,b.GT.value;if(t instanceof M&&r instanceof M){var o=N.compare(n)(t.value0)(r.value0);return o instanceof b.EQ?(u=t.value1,void(e=r.value1)):(i=!0,o)}throw new Error("Failed pattern match at Data.List.Types (line 61, column 5 - line 61, column 20): "+[t.constructor.name,r.constructor.name])}for(;!i;)t=o(u,e);return t})(t)}}}),pn=function(n){return new N.Ord(function(){return vn(n.Eq0())},N.compare1(dn)(n))},mn=function(n){return h.ordNonEmpty(dn)(n)},wn=new o.Comonad(function(){return ln},function(n){return n.value0}),yn=new r.Apply(function(){return Z},function(n){return function(e){if(n instanceof A)return A.value;if(n instanceof M)return q.append(R)(w.map(Z)(n.value0)(e))(r.apply(yn)(n.value1)(e));throw new Error("Failed pattern match at Data.List.Types (line 155, column 1 - line 157, column 48): "+[n.constructor.name,e.constructor.name])}}),xn=new r.Apply(function(){return J},function(n){return function(e){return new h.NonEmpty(n.value0(e.value0),q.append(R)(r.apply(yn)(n.value1)(new M(e.value0,A.value)))(r.apply(yn)(new M(n.value0,n.value1))(e.value1)))}}),En=new u.Bind(function(){return yn},function(n){return function(e){if(n instanceof A)return A.value;if(n instanceof M)return q.append(R)(e(n.value0))(u.bind(En)(n.value1)(e));throw new Error("Failed pattern match at Data.List.Types (line 162, column 1 - line 164, column 37): "+[n.constructor.name,e.constructor.name])}}),Ln=new u.Bind(function(){return xn},function(n){return function(e){var t=e(n.value0);return new h.NonEmpty(t.value0,q.append(R)(t.value1)(u.bind(En)(n.value1)(function(n){return P(e(n))})))}}),hn=new t.Applicative(function(){return yn},function(n){return new M(n,A.value)}),Nn=new l.Monad(function(){return hn},function(){return En}),bn=new n.Alt(function(){return J},q.append(X)),qn=new n.Alt(function(){return Z},q.append(R)),jn=new v.Plus(function(){return qn},A.value),In=new e.Alternative(function(){return hn},function(){return jn}),Dn=new f.MonadZero(function(){return In},function(){return Nn}),Wn=new c.MonadPlus(function(){return Dn}),Fn=new t.Applicative(function(){return xn},function(){var n=h.singleton(jn);return function(e){return S(n(e))}}()),Tn=new l.Monad(function(){return Fn},function(){return Ln}),gn=new j.Traversable1(function(){return an},function(){return nn},function(n){return j.traverse1(gn)(n)(i.identity(i.categoryFn))},function(n){return function(e){return function(u){return w.mapFlipped(n.Functor0())(d.foldl(Q)(function(t){var u=r.lift2(n)(m.flip(U))(t);return function(n){return u(e(n))}})(w.map(n.Functor0())(t.pure(Fn))(e(u.value0)))(u.value1))(function(n){return d.foldl(Q)(m.flip(U))(t.pure(Fn)(n.value0))(n.value1)})}}});module.exports={Nil:A,Cons:M,NonEmptyList:S,toList:P,nelCons:U,showList:Y,eqList:vn,eq1List:fn,ordList:pn,ord1List:dn,semigroupList:R,monoidList:V,functorList:Z,functorWithIndexList:H,foldableList:Q,foldableWithIndexList:k,unfoldable1List:rn,unfoldableList:un,traversableList:_,traversableWithIndexList:en,applyList:yn,applicativeList:hn,bindList:En,monadList:Nn,altList:qn,plusList:jn,alternativeList:In,monadZeroList:Dn,monadPlusList:Wn,extendList:cn,newtypeNonEmptyList:O,eqNonEmptyList:sn,ordNonEmptyList:mn,showNonEmptyList:$,functorNonEmptyList:J,applyNonEmptyList:xn,applicativeNonEmptyList:Fn,bindNonEmptyList:Ln,monadNonEmptyList:Tn,altNonEmptyList:bn,extendNonEmptyList:ln,comonadNonEmptyList:wn,semigroupNonEmptyList:X,foldableNonEmptyList:G,traversableNonEmptyList:nn,foldable1NonEmptyList:an,unfoldable1NonEmptyList:on,functorWithIndexNonEmptyList:K,foldableWithIndexNonEmptyList:z,traversableWithIndexNonEmptyList:tn,traversable1NonEmptyList:gn};
+},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Comonad/index.js":"U0zO","../Control.Extend/index.js":"JIoJ","../Control.Monad/index.js":"U/Ix","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.NonEmpty/index.js":"qF8i","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Semigroup.Traversable/index.js":"qkfi","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unfoldable1/index.js":"S0Nl"}],"ezw6":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),e=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),r=require("../Control.Bind/index.js"),u=require("../Control.Category/index.js"),o=require("../Control.Lazy/index.js"),i=require("../Control.Monad.Rec.Class/index.js"),a=require("../Data.Bifunctor/index.js"),c=require("../Data.Boolean/index.js"),l=require("../Data.Eq/index.js"),f=require("../Data.Foldable/index.js"),s=require("../Data.Function/index.js"),v=require("../Data.Functor/index.js"),m=require("../Data.FunctorWithIndex/index.js"),d=require("../Data.HeytingAlgebra/index.js"),w=require("../Data.List.Types/index.js"),p=require("../Data.Maybe/index.js"),C=require("../Data.Newtype/index.js"),h=require("../Data.NonEmpty/index.js"),N=require("../Data.Ord/index.js"),q=require("../Data.Ordering/index.js"),y=require("../Data.Semigroup/index.js"),D=require("../Data.Show/index.js"),L=require("../Data.Traversable/index.js"),b=require("../Data.Tuple/index.js"),x=require("../Data.Unfoldable/index.js"),F=require("../Data.Unit/index.js"),g=function(n){return n},E=function n(e){return function(t){return function(r){return 0===e&&r instanceof w.Cons?new p.Just(new w.Cons(t,r.value1)):r instanceof w.Cons?v.map(p.functorMaybe)(function(n){return new w.Cons(r.value0,n)})(n(e-1|0)(t)(r.value1)):p.Nothing.value}}},j=f.foldr(w.foldableList)(function(n){return function(e){return new b.Tuple(new w.Cons(n.value0,e.value0),new w.Cons(n.value1,e.value1))}})(new b.Tuple(w.Nil.value,w.Nil.value)),A=function(n){if(n instanceof w.Nil)return p.Nothing.value;if(n instanceof w.Cons)return new p.Just({head:n.value0,tail:n.value1});throw new Error("Failed pattern match at Data.List (line 259, column 1 - line 259, column 66): "+[n.constructor.name])},M=function(n){return x.unfoldr(n)(function(n){return v.map(p.functorMaybe)(function(n){return new b.Tuple(n.head,n.tail)})(A(n))})},J=function(n){if(n instanceof w.Nil)return p.Nothing.value;if(n instanceof w.Cons)return new p.Just(n.value1);throw new Error("Failed pattern match at Data.List (line 245, column 1 - line 245, column 43): "+[n.constructor.name])},B=function(n){return function(e){return function(t){return i.tailRecM2(i.monadRecMaybe)(function(e){return function(t){return e instanceof w.Cons&&t instanceof w.Cons&&l.eq(n)(e.value0)(t.value0)?p.Just.create(new i.Loop({a:e.value1,b:t.value1})):e instanceof w.Nil?p.Just.create(new i.Done(t)):p.Nothing.value}})(e)(t)}}},P=function n(e){return function(t){if(t instanceof w.Cons&&e(t.value0)){var r=n(e)(t.value1);return{init:new w.Cons(t.value0,r.init),rest:r.rest}}return{init:w.Nil.value,rest:t}}},T=function(n){return function(e){return f.foldr(w.foldableList)(w.Cons.create)(new w.Cons(e,w.Nil.value))(n)}},I=function(n){return new w.Cons(n,w.Nil.value)},W=function(n){var e=function e(t){return t instanceof w.Cons&&t.value1 instanceof w.Cons?new w.Cons(function e(t){return function(r){if(t instanceof w.Cons&&r instanceof w.Cons){if(l.eq(q.eqOrdering)(n(t.value0)(r.value0))(q.GT.value))return new w.Cons(r.value0,e(t)(r.value1));if(c.otherwise)return new w.Cons(t.value0,e(t.value1)(r))}if(t instanceof w.Nil)return r;if(r instanceof w.Nil)return t;throw new Error("Failed pattern match at Data.List (line 473, column 3 - line 473, column 38): "+[t.constructor.name,r.constructor.name])}}(t.value0)(t.value1.value0),e(t.value1.value1)):t},t=function(e){if(e instanceof w.Cons&&e.value1 instanceof w.Cons){if(l.eq(q.eqOrdering)(n(e.value0)(e.value1.value0))(q.GT.value))return r(e.value1.value0)(I(e.value0))(e.value1.value1);if(c.otherwise)return u(e.value1.value0)(function(n){return new w.Cons(e.value0,n)})(e.value1.value1)}return I(e)},r=function(e){return function(r){return function(u){var o,i,a,c,f=e,s=r,v=!1;for(;!v;)i=f,a=s,o=(c=u)instanceof w.Cons&&l.eq(q.eqOrdering)(n(i)(c.value0))(q.GT.value)?(f=c.value0,s=new w.Cons(i,a),void(u=c.value1)):(v=!0,new w.Cons(new w.Cons(i,a),t(c)));return o}}},u=function(e){return function(r){return function(u){var o,i=e,a=r,c=!1;function f(e,r,o){return o instanceof w.Cons&&l.notEq(q.eqOrdering)(n(e)(o.value0))(q.GT.value)?(i=o.value0,a=function(n){return r(new w.Cons(e,n))},void(u=o.value1)):(c=!0,new w.Cons(r(I(e)),t(o)))}for(;!c;)o=f(i,a,u);return o}}};return function(n){return function(n){var t,r=!1;function u(t){if(t instanceof w.Cons&&t.value1 instanceof w.Nil)return r=!0,t.value0;n=e(t)}for(;!r;)t=u(n);return t}(t(n))}},O=function(n){return function(e){return W(N.compare(n))(e)}},R=function n(e){if(e instanceof w.Nil)return I(w.Nil.value);if(e instanceof w.Cons)return new w.Cons(e,n(e.value1));throw new Error("Failed pattern match at Data.List (line 626, column 1 - line 626, column 43): "+[e.constructor.name])},z=function(n){return new D.Show(function(e){return"(Pattern "+D.show(w.showList(n))(e)+")"})},G=function(){var n;return n=w.Nil.value,function(e){var t,r=n,u=!1;function o(n,t){if(t instanceof w.Nil)return u=!0,n;if(t instanceof w.Cons)return r=new w.Cons(t.value0,n),void(e=t.value1);throw new Error("Failed pattern match at Data.List (line 368, column 3 - line 368, column 19): "+[n.constructor.name,t.constructor.name])}for(;!u;)t=o(r,e);return t}}(),S=function(){var n;return n=w.Nil.value,function(e){return function(t){var r,u=n,o=e,i=!1;function a(n,e,r){if(e<1)return i=!0,G(n);if(r instanceof w.Nil)return i=!0,G(n);if(r instanceof w.Cons)return u=new w.Cons(r.value0,n),o=e-1|0,void(t=r.value1);throw new Error("Failed pattern match at Data.List (line 520, column 3 - line 520, column 35): "+[n.constructor.name,e.constructor.name,r.constructor.name])}for(;!i;)r=a(u,o,t);return r}}}(),k=function(n){var e;return e=w.Nil.value,function(t){for(var r,u,o,i=e,a=!1;!a;)u=i,r=(o=t)instanceof w.Cons&&n(o.value0)?(i=new w.Cons(o.value0,u),void(t=o.value1)):(a=!0,G(u));return r}},U=function(n){var e;return v.map(p.functorMaybe)(function(n){return{init:G(n.revInit),last:n.last}})((e=n,function(n){var t,r=e,u=!1;function o(e,t){if(e instanceof w.Nil)return u=!0,p.Nothing.value;if(e instanceof w.Cons&&e.value1 instanceof w.Nil)return u=!0,new p.Just({revInit:t,last:e.value0});if(e instanceof w.Cons)return r=e.value1,void(n=new w.Cons(e.value0,t));throw new Error("Failed pattern match at Data.List (line 270, column 3 - line 270, column 23): "+[e.constructor.name,t.constructor.name])}for(;!u;)t=o(r,n);return t})(w.Nil.value))},H=function(n){return function(e){return function(t){var r;return G((r=e,function(e){return function(t){var u,o=r,i=e,a=!1;function c(e,r,u){if(e instanceof w.Nil)return a=!0,u;if(r instanceof w.Nil)return a=!0,u;if(e instanceof w.Cons&&r instanceof w.Cons)return o=e.value1,i=r.value1,void(t=new w.Cons(n(e.value0)(r.value0),u));throw new Error("Failed pattern match at Data.List (line 718, column 3 - line 718, column 21): "+[e.constructor.name,r.constructor.name,u.constructor.name])}for(;!a;)u=c(o,i,t);return u}})(t)(w.Nil.value))}}},K=H(b.Tuple.create),Q=function(n){return function(e){return function(t){return function(r){return L.sequence(w.traversableList)(n)(H(e)(t)(r))}}}},V=function(n){return function(e){if(n===e)return I(n);if(c.otherwise){return(t=e,function(n){return function(e){return function(r){var u,o=t,i=n,a=e,l=!1;function f(n,e,t,u){if(n===e)return l=!0,new w.Cons(n,u);if(c.otherwise)return o=n+t|0,i=e,a=t,void(r=new w.Cons(n,u));throw new Error("Failed pattern match at Data.List (line 148, column 3 - line 149, column 65): "+[n.constructor.name,e.constructor.name,t.constructor.name,u.constructor.name])}for(;!l;)u=f(o,i,a,r);return u}}})(n)(n>e?1:-1)(w.Nil.value)}var t;throw new Error("Failed pattern match at Data.List (line 144, column 1 - line 144, column 32): "+[n.constructor.name,e.constructor.name])}},X=function(n){return function(e){return f.foldr(w.foldableList)(function(e){return function(t){return n(e)?{no:t.no,yes:new w.Cons(e,t.yes)}:{no:new w.Cons(e,t.no),yes:t.yes}}})({no:w.Nil.value,yes:w.Nil.value})(e)}},Y=function(n){return n instanceof w.Nil},Z=new C.Newtype(function(n){return n},g),$=m.mapWithIndex(w.functorWithIndexList),_=function(n){var e;return e=w.Nil.value,function(t){var r,u=e,o=!1;function i(e,r){if(r instanceof w.Nil)return o=!0,G(e);if(r instanceof w.Cons){var i=n(r.value0);if(i instanceof p.Nothing)return u=e,void(t=r.value1);if(i instanceof p.Just)return u=new w.Cons(i.value0,e),void(t=r.value1);throw new Error("Failed pattern match at Data.List (line 419, column 5 - line 421, column 32): "+[i.constructor.name])}throw new Error("Failed pattern match at Data.List (line 417, column 3 - line 417, column 27): "+[e.constructor.name,r.constructor.name])}for(;!o;)r=i(u,t);return r}},nn=function(t){return function(u){return function(o){return i.tailRecM(t)(function(c){return r.bind(t.Monad0().Bind1())(n.alt(u.Plus1().Alt0())(v.map(u.Plus1().Alt0().Functor0())(i.Loop.create)(o))(e.pure(u.Applicative0())(new i.Done(F.unit))))(function(n){return e.pure(u.Applicative0())(a.bimap(i.bifunctorStep)(function(n){return new w.Cons(n,c)})(function(n){return G(c)})(n))})})(w.Nil.value)}}},en=function(n){return function(e){return function(r){return t.apply(e.Applicative0().Apply0())(v.map(e.Plus1().Alt0().Functor0())(w.Cons.create)(r))(nn(n)(e)(r))}}},tn=function(n){return function(e){return function(r){return t.apply(n.Applicative0().Apply0())(v.map(n.Plus1().Alt0().Functor0())(w.Cons.create)(r))(o.defer(e)(function(t){return rn(n)(e)(r)}))}}},rn=function(t){return function(r){return function(u){return n.alt(t.Plus1().Alt0())(tn(t)(r)(u))(e.pure(t.Applicative0())(w.Nil.value))}}},un=f.foldl(w.foldableList)(function(n){return function(e){return n+1|0}})(0),on=function(n){var e,t,r=!1;for(;!r;)e=(t=n)instanceof w.Cons&&t.value1 instanceof w.Nil?(r=!0,new p.Just(t.value0)):t instanceof w.Cons?void(n=t.value1):(r=!0,p.Nothing.value);return e},an=function n(e){return function(t){return function(r){if(r instanceof w.Nil)return I(t);if(r instanceof w.Cons)return e(t)(r.value0)instanceof q.GT?new w.Cons(r.value0,n(e)(t)(r.value1)):new w.Cons(t,r);throw new Error("Failed pattern match at Data.List (line 216, column 1 - line 216, column 68): "+[e.constructor.name,t.constructor.name,r.constructor.name])}}},cn=function n(e){return function(t){return function(r){return 0===e?new p.Just(new w.Cons(t,r)):r instanceof w.Cons?v.map(p.functorMaybe)(function(n){return new w.Cons(r.value0,n)})(n(e-1|0)(t)(r.value1)):p.Nothing.value}}},ln=function(n){return an(N.compare(n))},fn=function(n){return v.map(p.functorMaybe)(function(n){return n.init})(U(n))},sn=function(n){return function(e){var t,r=n,u=!1;function o(n,t){if(n instanceof w.Nil)return u=!0,p.Nothing.value;if(n instanceof w.Cons&&0===t)return u=!0,new p.Just(n.value0);if(n instanceof w.Cons)return r=n.value1,void(e=t-1|0);throw new Error("Failed pattern match at Data.List (line 281, column 1 - line 281, column 44): "+[n.constructor.name,t.constructor.name])}for(;!u;)t=o(r,e);return t}},vn=function(n){if(n instanceof w.Nil)return p.Nothing.value;if(n instanceof w.Cons)return new p.Just(n.value0);throw new Error("Failed pattern match at Data.List (line 230, column 1 - line 230, column 22): "+[n.constructor.name])},mn=function n(e){if(e instanceof w.Nil)return w.Nil.value;if(e instanceof w.Cons&&e.value0 instanceof w.Nil)return n(e.value1);if(e instanceof w.Cons&&e.value0 instanceof w.Cons)return new w.Cons(new w.Cons(e.value0.value0,_(vn)(e.value1)),n(new w.Cons(e.value0.value1,_(J)(e.value1))));throw new Error("Failed pattern match at Data.List (line 752, column 1 - line 752, column 54): "+[e.constructor.name])},dn=function n(e){return function(t){if(t instanceof w.Nil)return w.Nil.value;if(t instanceof w.Cons){var r=P(e(t.value0))(t.value1);return new w.Cons(new h.NonEmpty(t.value0,r.init),n(e)(r.rest))}throw new Error("Failed pattern match at Data.List (line 605, column 1 - line 605, column 80): "+[e.constructor.name,t.constructor.name])}},wn=function(n){return dn(l.eq(n))},pn=function(n){var e=wn(n.Eq0()),t=O(n);return function(n){return e(t(n))}},Cn=function(n){return f.foldr(n)(w.Cons.create)(w.Nil.value)},hn=function n(t){return function(u){return function(o){return function(i){if(i instanceof w.Nil)return e.pure(t.Applicative0())(o);if(i instanceof w.Cons)return r.bind(t.Bind1())(u(o)(i.value0))(function(e){return n(t)(u)(e)(i.value1)});throw new Error("Failed pattern match at Data.List (line 763, column 1 - line 763, column 72): "+[u.constructor.name,o.constructor.name,i.constructor.name])}}}},Nn=function(n){var e;return e=0,function(t){var r,u=e,o=!1;function i(e,r){if(r instanceof w.Cons){if(n(r.value0))return o=!0,new p.Just(e);if(c.otherwise)return u=e+1|0,void(t=r.value1)}if(r instanceof w.Nil)return o=!0,p.Nothing.value;throw new Error("Failed pattern match at Data.List (line 301, column 3 - line 301, column 35): "+[e.constructor.name,r.constructor.name])}for(;!o;)r=i(u,t);return r}},qn=function(n){return function(e){return v.map(p.functorMaybe)(function(n){return(un(e)-1|0)-n|0})(Nn(n)(G(e)))}},yn=function n(t){return function(u){return function(o){if(o instanceof w.Nil)return e.pure(t.Applicative0())(w.Nil.value);if(o instanceof w.Cons)return r.bind(t.Bind1())(u(o.value0))(function(i){return r.bind(t.Bind1())(n(t)(u)(o.value1))(function(n){return e.pure(t.Applicative0())(i?new w.Cons(o.value0,n):n)})});throw new Error("Failed pattern match at Data.List (line 403, column 1 - line 403, column 75): "+[u.constructor.name,o.constructor.name])}}},Dn=function(n){var e;return e=w.Nil.value,function(t){var r,u=e,o=!1;function i(e,r){if(r instanceof w.Nil)return o=!0,G(e);if(r instanceof w.Cons){if(n(r.value0))return u=new w.Cons(r.value0,e),void(t=r.value1);if(c.otherwise)return u=e,void(t=r.value1)}throw new Error("Failed pattern match at Data.List (line 390, column 3 - line 390, column 27): "+[e.constructor.name,r.constructor.name])}for(;!o;)r=i(u,t);return r}},Ln=function(n){return function(e){return function(t){return e instanceof w.Nil?w.Nil.value:t instanceof w.Nil?w.Nil.value:Dn(function(e){return f.any(w.foldableList)(d.heytingAlgebraBoolean)(n(e))(t)})(e)}}},bn=function(n){return Ln(l.eq(n))},xn=function n(e){return function(t){if(t instanceof w.Nil)return w.Nil.value;if(t instanceof w.Cons)return new w.Cons(t.value0,n(e)(Dn(function(n){return!e(t.value0)(n)})(t.value1)));throw new Error("Failed pattern match at Data.List (line 644, column 1 - line 644, column 59): "+[e.constructor.name,t.constructor.name])}},Fn=function(n){return xn(l.eq(n))},gn=function(n){return new l.Eq(function(e){return function(t){return l.eq(w.eqList(n))(e)(t)}})},En=function(n){return new N.Ord(function(){return gn(n.Eq0())},function(e){return function(t){return N.compare(w.ordList(n))(e)(t)}})},jn=function(n){return function(e){return qn(function(t){return l.eq(n)(t)(e)})}},An=function(n){return function(e){return Nn(function(t){return l.eq(n)(t)(e)})}},Mn=function(n){return function(e){var t,r=!1;function u(t){if(!(t instanceof w.Cons&&n(t.value0)))return r=!0,t;e=t.value1}for(;!r;)t=u(e);return t}},Jn=function(n){return function(e){return S(un(e)-n|0)(e)}},Bn=function(n){return function(e){var t,r=n,u=!1;function o(n,t){if(n<1)return u=!0,t;if(t instanceof w.Nil)return u=!0,w.Nil.value;if(t instanceof w.Cons)return r=n-1|0,void(e=t.value1);throw new Error("Failed pattern match at Data.List (line 543, column 1 - line 543, column 42): "+[n.constructor.name,t.constructor.name])}for(;!u;)t=o(r,e);return t}},Pn=function(n){return function(e){return function(t){return S(e-n|0)(Bn(n)(t))}}},Tn=function(n){return function(e){return Bn(un(e)-n|0)(e)}},In=function n(e){return function(t){return function(r){if(r instanceof w.Nil)return w.Nil.value;if(r instanceof w.Cons&&e(t)(r.value0))return r.value1;if(r instanceof w.Cons)return new w.Cons(r.value0,n(e)(t)(r.value1));throw new Error("Failed pattern match at Data.List (line 671, column 1 - line 671, column 67): "+[e.constructor.name,t.constructor.name,r.constructor.name])}}},Wn=function(n){return function(e){return function(t){return y.append(w.semigroupList)(e)(f.foldl(w.foldableList)(s.flip(In(n)))(xn(n)(t))(e))}}},On=function(n){return Wn(l.eq(n))},Rn=function n(e){return function(t){return 0===e&&t instanceof w.Cons?new p.Just(t.value1):t instanceof w.Cons?v.map(p.functorMaybe)(function(n){return new w.Cons(t.value0,n)})(n(e-1|0)(t.value1)):p.Nothing.value}},zn=function(n){return In(l.eq(n))},Gn=function(n){return f.foldl(w.foldableList)(s.flip(zn(n)))},Sn=s.flip(r.bind(w.bindList)),kn=function(n){return r.bind(w.bindList)(n)(u.identity(u.categoryFn))},Un=_(u.identity(u.categoryFn)),Hn=function n(e){return function(t){return function(r){return 0===e&&r instanceof w.Cons?p.Just.create(function(){var n=t(r.value0);if(n instanceof p.Nothing)return r.value1;if(n instanceof p.Just)return new w.Cons(n.value0,r.value1);throw new Error("Failed pattern match at Data.List (line 352, column 3 - line 354, column 23): "+[n.constructor.name])}()):r instanceof w.Cons?v.map(p.functorMaybe)(function(n){return new w.Cons(r.value0,n)})(n(e-1|0)(t)(r.value1)):p.Nothing.value}}},Kn=function(n){return function(e){return Hn(n)(function(n){return p.Just.create(e(n))})}};module.exports={toUnfoldable:M,fromFoldable:Cn,singleton:I,range:V,some:tn,someRec:en,many:rn,manyRec:nn,null:Y,length:un,snoc:T,insert:ln,insertBy:an,head:vn,last:on,tail:J,init:fn,uncons:A,unsnoc:U,index:sn,elemIndex:An,elemLastIndex:jn,findIndex:Nn,findLastIndex:qn,insertAt:cn,deleteAt:Rn,updateAt:E,modifyAt:Kn,alterAt:Hn,reverse:G,concat:kn,concatMap:Sn,filter:Dn,filterM:yn,mapMaybe:_,catMaybes:Un,mapWithIndex:$,sort:O,sortBy:W,Pattern:g,stripPrefix:B,slice:Pn,take:S,takeEnd:Tn,takeWhile:k,drop:Bn,dropEnd:Jn,dropWhile:Mn,span:P,group:wn,"group'":pn,groupBy:dn,partition:X,nub:Fn,nubBy:xn,union:On,unionBy:Wn,delete:zn,deleteBy:In,difference:Gn,intersect:bn,intersectBy:Ln,zipWith:H,zipWithA:Q,zip:K,unzip:j,transpose:mn,foldM:hn,eqPattern:gn,ordPattern:En,newtypePattern:Z,showPattern:z};
+},{"../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Lazy/index.js":"y9cE","../Control.Monad.Rec.Class/index.js":"UVIy","../Data.Bifunctor/index.js":"e2Wc","../Data.Boolean/index.js":"ObQr","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.HeytingAlgebra/index.js":"paZe","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.NonEmpty/index.js":"qF8i","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unit/index.js":"NhVk"}],"9xeJ":[function(require,module,exports) {
+"use strict";exports.defer=function(r){var n=null;return function(){return void 0===r?n:(n=r(),r=void 0,n)}},exports.force=function(r){return r()};
+},{}],"aRUE":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),u=require("../Control.Comonad/index.js"),i=require("../Control.Extend/index.js"),o=require("../Control.Lazy/index.js"),f=require("../Control.Monad/index.js"),c=require("../Data.BooleanAlgebra/index.js"),a=require("../Data.Bounded/index.js"),d=require("../Data.CommutativeRing/index.js"),l=require("../Data.Eq/index.js"),s=require("../Data.EuclideanRing/index.js"),p=require("../Data.Foldable/index.js"),y=require("../Data.FoldableWithIndex/index.js"),x=require("../Data.Function/index.js"),m=require("../Data.Functor/index.js"),q=require("../Data.Functor.Invariant/index.js"),g=require("../Data.FunctorWithIndex/index.js"),w=require("../Data.HeytingAlgebra/index.js"),z=require("../Data.Monoid/index.js"),j=require("../Data.Ord/index.js"),L=require("../Data.Ring/index.js"),b=require("../Data.Semigroup/index.js"),D=require("../Data.Semigroup.Foldable/index.js"),v=require("../Data.Semigroup.Traversable/index.js"),F=require("../Data.Semiring/index.js"),h=require("../Data.Show/index.js"),A=require("../Data.Traversable/index.js"),C=require("../Data.TraversableWithIndex/index.js"),I=require("../Data.Unit/index.js"),R=function(r){return new h.Show(function(e){return"(defer \\_ -> "+h.show(r)(n.force(e))+")"})},S=function(r){return new F.Semiring(function(e){return function(t){return n.defer(function(u){return F.add(r)(n.force(e))(n.force(t))})}},function(e){return function(t){return n.defer(function(u){return F.mul(r)(n.force(e))(n.force(t))})}},n.defer(function(n){return F.one(r)}),n.defer(function(n){return F.zero(r)}))},W=function(r){return new b.Semigroup(function(e){return function(t){return n.defer(function(u){return b.append(r)(n.force(e))(n.force(t))})}})},E=function(r){return new L.Ring(function(){return S(r.Semiring0())},function(e){return function(t){return n.defer(function(u){return L.sub(r)(n.force(e))(n.force(t))})}})},B=function(r){return new z.Monoid(function(){return W(r.Semigroup0())},n.defer(function(n){return z.mempty(r)}))},T=new o.Lazy(function(r){return n.defer(function(e){return n.force(r(I.unit))})}),M=new m.Functor(function(r){return function(e){return n.defer(function(t){return r(n.force(e))})}}),O=new g.FunctorWithIndex(function(){return M},function(n){return m.map(M)(n(I.unit))}),H=new q.Invariant(q.imapF(M)),U=new p.Foldable(function(r){return function(r){return function(e){return r(n.force(e))}}},function(r){return function(e){return function(t){return r(e)(n.force(t))}}},function(r){return function(e){return function(t){return r(n.force(t))(e)}}}),_=new y.FoldableWithIndex(function(){return U},function(n){return function(r){return p.foldMap(U)(n)(r(I.unit))}},function(n){return p.foldl(U)(n(I.unit))},function(n){return p.foldr(U)(n(I.unit))}),k=new A.Traversable(function(){return U},function(){return M},function(r){return function(e){return m.map(r.Apply0().Functor0())(function(r){return n.defer(x.const(r))})(n.force(e))}},function(r){return function(e){return function(t){return m.map(r.Apply0().Functor0())(function(r){return n.defer(x.const(r))})(e(n.force(t)))}}}),G=new C.TraversableWithIndex(function(){return _},function(){return O},function(){return k},function(n){return function(r){return A.traverse(k)(n)(r(I.unit))}}),J=new D.Foldable1(function(){return U},function(n){return D.fold1Default(J)(n)},function(r){return function(r){return function(e){return r(n.force(e))}}}),K=new v.Traversable1(function(){return J},function(){return k},function(r){return function(e){return m.map(r.Functor0())(function(r){return n.defer(x.const(r))})(n.force(e))}},function(r){return function(e){return function(t){return m.map(r.Functor0())(function(r){return n.defer(x.const(r))})(e(n.force(t)))}}}),N=new i.Extend(function(){return M},function(r){return function(e){return n.defer(function(n){return r(e)})}}),P=function(r){return new l.Eq(function(e){return function(t){return l.eq(r)(n.force(e))(n.force(t))}})},Q=function(r){return new j.Ord(function(){return P(r.Eq0())},function(e){return function(t){return j.compare(r)(n.force(e))(n.force(t))}})},V=new l.Eq1(function(n){return l.eq(P(n))}),X=new j.Ord1(function(){return V},function(n){return j.compare(Q(n))}),Y=new u.Comonad(function(){return N},n.force),Z=function(n){return new d.CommutativeRing(function(){return E(n.Ring0())})},$=function(r){return new s.EuclideanRing(function(){return Z(r.CommutativeRing0())},(e=s.degree(r),function(r){return e(n.force(r))}),function(e){return function(t){return n.defer(function(u){return s.div(r)(n.force(e))(n.force(t))})}},function(e){return function(t){return n.defer(function(u){return s.mod(r)(n.force(e))(n.force(t))})}});var e},nn=function(r){return new a.Bounded(function(){return Q(r.Ord0())},n.defer(function(n){return a.bottom(r)}),n.defer(function(n){return a.top(r)}))},rn=new e.Apply(function(){return M},function(r){return function(e){return n.defer(function(t){return n.force(r)(n.force(e))})}}),en=new t.Bind(function(){return rn},function(r){return function(e){return n.defer(function(t){return n.force(e(n.force(r)))})}}),tn=function(r){return new w.HeytingAlgebra(function(n){return function(t){return e.apply(rn)(m.map(M)(w.conj(r))(n))(t)}},function(n){return function(t){return e.apply(rn)(m.map(M)(w.disj(r))(n))(t)}},n.defer(function(n){return w.ff(r)}),function(n){return function(t){return e.apply(rn)(m.map(M)(w.implies(r))(n))(t)}},function(n){return m.map(M)(w.not(r))(n)},n.defer(function(n){return w.tt(r)}))},un=function(n){return new c.BooleanAlgebra(function(){return tn(n.HeytingAlgebra0())})},on=new r.Applicative(function(){return rn},function(r){return n.defer(function(n){return r})}),fn=new f.Monad(function(){return on},function(){return en});module.exports={semiringLazy:S,ringLazy:E,commutativeRingLazy:Z,euclideanRingLazy:$,eqLazy:P,eq1Lazy:V,ordLazy:Q,ord1Lazy:X,boundedLazy:nn,semigroupLazy:W,monoidLazy:B,heytingAlgebraLazy:tn,booleanAlgebraLazy:un,functorLazy:M,functorWithIndexLazy:O,foldableLazy:U,foldableWithIndexLazy:_,foldable1Lazy:J,traversableLazy:k,traversableWithIndexLazy:G,traversable1Lazy:K,invariantLazy:H,applyLazy:rn,applicativeLazy:on,bindLazy:en,monadLazy:fn,extendLazy:N,comonadLazy:Y,showLazy:R,lazyLazy:T,defer:n.defer,force:n.force};
+},{"./foreign.js":"9xeJ","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Comonad/index.js":"U0zO","../Control.Extend/index.js":"JIoJ","../Control.Lazy/index.js":"y9cE","../Control.Monad/index.js":"U/Ix","../Data.BooleanAlgebra/index.js":"e7y+","../Data.Bounded/index.js":"kcUU","../Data.CommutativeRing/index.js":"60TQ","../Data.Eq/index.js":"Pq4F","../Data.EuclideanRing/index.js":"2IRB","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Functor.Invariant/index.js":"AXkC","../Data.FunctorWithIndex/index.js":"OHRN","../Data.HeytingAlgebra/index.js":"paZe","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Ring/index.js":"E2qH","../Data.Semigroup/index.js":"EsAJ","../Data.Semigroup.Foldable/index.js":"ht+A","../Data.Semigroup.Traversable/index.js":"qkfi","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Unit/index.js":"NhVk"}],"EJF+":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),t=require("../Control.Alternative/index.js"),e=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),o=require("../Control.Category/index.js"),i=require("../Control.Comonad/index.js"),a=require("../Control.Extend/index.js"),c=require("../Control.Lazy/index.js"),f=require("../Control.Monad/index.js"),l=require("../Control.MonadPlus/index.js"),d=require("../Control.MonadZero/index.js"),s=require("../Control.Plus/index.js"),p=require("../Data.Eq/index.js"),v=require("../Data.Foldable/index.js"),m=require("../Data.FoldableWithIndex/index.js"),y=require("../Data.Function/index.js"),w=require("../Data.Functor/index.js"),L=require("../Data.FunctorWithIndex/index.js"),x=require("../Data.Lazy/index.js"),h=require("../Data.Maybe/index.js"),E=require("../Data.Monoid/index.js"),b=require("../Data.Newtype/index.js"),N=require("../Data.NonEmpty/index.js"),q=require("../Data.Ord/index.js"),j=require("../Data.Ordering/index.js"),I=require("../Data.Semigroup/index.js"),D=require("../Data.Semiring/index.js"),F=require("../Data.Show/index.js"),W=require("../Data.Traversable/index.js"),T=require("../Data.TraversableWithIndex/index.js"),z=require("../Data.Tuple/index.js"),g=require("../Data.Unfoldable/index.js"),A=require("../Data.Unfoldable1/index.js"),C=function(n){return n},M=function(){function n(){}return n.value=new n,n}(),S=function(){function n(n,t){this.value0=n,this.value1=t}return n.create=function(t){return function(e){return new n(t,e)}},n}(),P=function(n){return n},U=C(x.defer(function(n){return M.value})),O=new b.Newtype(function(n){return n},P),B=new b.Newtype(function(n){return n},C),Z=function(){var n=b.unwrap(B);return function(t){return x.force(n(t))}}(),J=new I.Semigroup(function(n){return function(t){return w.map(x.functorLazy)(function(n){if(n instanceof M)return Z(t);if(n instanceof S)return new S(n.value0,I.append(J)(n.value1)(t));throw new Error("Failed pattern match at Data.List.Lazy.Types (line 98, column 5 - line 98, column 21): "+[n.constructor.name])})(b.unwrap(B)(n))}}),Q=function(n){return new F.Show(function(t){return"fromStrict ("+function t(e){if(e instanceof M)return"Nil";if(e instanceof S)return"(Cons "+F.show(n)(e.value0)+" "+t(Z(e.value1))+")";throw new Error("Failed pattern match at Data.List.Lazy.Types (line 64, column 5 - line 64, column 19): "+[e.constructor.name])}(Z(t))+")"})},G=function(n){return new F.Show(function(t){return"(NonEmptyList "+F.show(x.showLazy(N.showNonEmpty(n)(Q(n))))(t)+")"})},k=new E.Monoid(function(){return J},U),H=new c.Lazy(function(n){return C(x.defer(function(t){return Z(n(t))}))}),K=new w.Functor(function(n){return function(t){return w.map(x.functorLazy)(function(t){if(t instanceof M)return M.value;if(t instanceof S)return new S(n(t.value0),w.map(K)(n)(t.value1));throw new Error("Failed pattern match at Data.List.Lazy.Types (line 107, column 5 - line 107, column 17): "+[t.constructor.name])})(b.unwrap(B)(t))}}),R=new w.Functor(function(n){return function(t){return w.map(x.functorLazy)(w.map(N.functorNonEmpty(K))(n))(t)}}),V=new p.Eq1(function(n){return function(t){return function(e){var r;return(r=Z(t),function(t){for(var e,u,o,i=r,a=!1;!a;)o=t,e=(u=i)instanceof M&&o instanceof M?(a=!0,!0):u instanceof S&&o instanceof S&&p.eq(n)(u.value0)(o.value0)?(i=Z(u.value1),void(t=Z(o.value1))):(a=!0,!1);return e})(Z(e))}}}),X=function(n){return new p.Eq(p.eq1(V)(n))},Y=function(n){return x.eqLazy(N.eqNonEmpty(V)(n))},$=new q.Ord1(function(){return V},function(n){return function(t){return function(e){var r;return(r=Z(t),function(t){var e,u=r,o=!1;function i(e,r){if(e instanceof M&&r instanceof M)return o=!0,j.EQ.value;if(e instanceof M)return o=!0,j.LT.value;if(r instanceof M)return o=!0,j.GT.value;if(e instanceof S&&r instanceof S){var i=q.compare(n)(e.value0)(r.value0);return i instanceof j.EQ?(u=Z(e.value1),void(t=Z(r.value1))):(o=!0,i)}throw new Error("Failed pattern match at Data.List.Lazy.Types (line 84, column 5 - line 84, column 20): "+[e.constructor.name,r.constructor.name])}for(;!o;)e=i(u,t);return e})(Z(e))}}}),_=function(n){return new q.Ord(function(){return X(n.Eq0())},q.compare1($)(n))},nn=function(n){return x.ordLazy(N.ordNonEmpty($)(n))},tn=function(n){return function(t){return C(x.defer(function(e){return new S(n,t)}))}},en=new v.Foldable(function(n){return function(t){return v.foldl(en)(function(e){return function(r){return I.append(n.Semigroup0())(e)(t(r))}})(E.mempty(n))}},function(n){return function(t){return function(e){var r,u=t,o=!1;function i(t,r){var i=Z(r);if(i instanceof M)return o=!0,t;if(i instanceof S)return u=n(t)(i.value0),void(e=i.value1);throw new Error("Failed pattern match at Data.List.Lazy.Types (line 122, column 7 - line 124, column 40): "+[i.constructor.name])}for(;!o;)r=i(u,e);return r}}},function(n){return function(t){return function(e){var r=v.foldl(en)(y.flip(tn))(U);return v.foldl(en)(y.flip(n))(t)(r(e))}}}),rn=new a.Extend(function(){return K},function(n){return function(t){var e=Z(t);if(e instanceof M)return U;if(e instanceof S)return tn(n(t))(v.foldr(en)(function(t){return function(e){var r=tn(t)(e.acc);return{val:tn(n(r))(e.val),acc:r}}})({val:U,acc:U})(e.value1).val);throw new Error("Failed pattern match at Data.List.Lazy.Types (line 194, column 5 - line 197, column 55): "+[e.constructor.name])}}),un=new a.Extend(function(){return R},function(n){return function(t){var e=function(t){return function(e){return{val:tn(n(x.defer(function(n){return new N.NonEmpty(t,e.acc)})))(e.val),acc:tn(t)(e.acc)}}},r=x.force(t);return P(x.defer(function(u){return new N.NonEmpty(n(t),v.foldr(en)(e)({val:U,acc:U})(r.value1).val)}))}}),on=new v.Foldable(function(n){return function(t){return function(e){return v.foldMap(N.foldableNonEmpty(en))(n)(t)(x.force(e))}}},function(n){return function(t){return function(e){return v.foldl(N.foldableNonEmpty(en))(n)(t)(x.force(e))}}},function(n){return function(t){return function(e){return v.foldr(N.foldableNonEmpty(en))(n)(t)(x.force(e))}}}),an=new m.FoldableWithIndex(function(){return en},function(n){return function(t){return m.foldlWithIndex(an)(function(e){return function(r){var u=I.append(n.Semigroup0())(r),o=t(e);return function(n){return u(o(n))}}})(E.mempty(n))}},function(n){return function(t){var e=v.foldl(en)(function(t){return function(e){return new z.Tuple(t.value0+1|0,n(t.value0)(t.value1)(e))}})(new z.Tuple(0,t));return function(n){return z.snd(e(n))}}},function(n){return function(t){return function(e){var r=v.foldl(en)(function(n){return function(t){return new z.Tuple(n.value0+1|0,tn(t)(n.value1))}})(new z.Tuple(0,U))(e);return z.snd(v.foldl(en)(function(t){return function(e){return new z.Tuple(t.value0-1|0,n(t.value0-1|0)(e)(t.value1))}})(new z.Tuple(r.value0,t))(r.value1))}}}),cn=new m.FoldableWithIndex(function(){return on},function(n){return function(t){return function(e){return m.foldMapWithIndex(N.foldableWithIndexNonEmpty(an))(n)((r=h.maybe(0)(D.add(D.semiringInt)(1)),function(n){return t(r(n))}))(x.force(e));var r}}},function(n){return function(t){return function(e){return m.foldlWithIndex(N.foldableWithIndexNonEmpty(an))((r=h.maybe(0)(D.add(D.semiringInt)(1)),function(t){return n(r(t))}))(t)(x.force(e));var r}}},function(n){return function(t){return function(e){return m.foldrWithIndex(N.foldableWithIndexNonEmpty(an))((r=h.maybe(0)(D.add(D.semiringInt)(1)),function(t){return n(r(t))}))(t)(x.force(e));var r}}}),fn=new L.FunctorWithIndex(function(){return K},function(n){return m.foldrWithIndex(an)(function(t){return function(e){return function(r){return tn(n(t)(e))(r)}}})(U)}),ln=new L.FunctorWithIndex(function(){return R},function(n){return function(t){return P(x.defer(function(e){return L.mapWithIndex(N.functorWithIndex(fn))((r=h.maybe(0)(D.add(D.semiringInt)(1)),function(t){return n(r(t))}))(x.force(t));var r}))}}),dn=function(n){return c.defer(H)(function(t){var e=x.force(n);return tn(e.value0)(e.value1)})},sn=new I.Semigroup(function(n){return function(t){var e=x.force(n);return x.defer(function(n){return new N.NonEmpty(e.value0,I.append(J)(e.value1)(dn(t)))})}}),pn=new W.Traversable(function(){return en},function(){return K},function(n){return W.traverse(pn)(n)(o.identity(o.categoryFn))},function(n){return function(t){return v.foldr(en)(function(e){return function(u){return r.apply(n.Apply0())(w.map(n.Apply0().Functor0())(tn)(t(e)))(u)}})(e.pure(n)(U))}}),vn=new W.Traversable(function(){return on},function(){return R},function(n){return function(t){return w.map(n.Apply0().Functor0())(function(n){return P(x.defer(function(t){return n}))})(W.sequence(N.traversableNonEmpty(pn))(n)(x.force(t)))}},function(n){return function(t){return function(e){return w.map(n.Apply0().Functor0())(function(n){return P(x.defer(function(t){return n}))})(W.traverse(N.traversableNonEmpty(pn))(n)(t)(x.force(e)))}}}),mn=new T.TraversableWithIndex(function(){return an},function(){return fn},function(){return pn},function(n){return function(t){return m.foldrWithIndex(an)(function(e){return function(u){return function(o){return r.apply(n.Apply0())(w.map(n.Apply0().Functor0())(tn)(t(e)(u)))(o)}}})(e.pure(n)(U))}}),yn=new T.TraversableWithIndex(function(){return cn},function(){return ln},function(){return vn},function(n){return function(t){return function(e){return w.map(n.Apply0().Functor0())(function(n){return P(x.defer(function(t){return n}))})(T.traverseWithIndex(N.traversableWithIndexNonEmpty(mn))(n)((r=h.maybe(0)(D.add(D.semiringInt)(1)),function(n){return t(r(n))}))(x.force(e)));var r}}}),wn=new A.Unfoldable1(function n(t){return function(e){return c.defer(H)(function(r){var u=t(e);if(u.value1 instanceof h.Just)return tn(u.value0)(n(t)(u.value1.value0));if(u.value1 instanceof h.Nothing)return tn(u.value0)(U);throw new Error("Failed pattern match at Data.List.Lazy.Types (line 146, column 28 - line 148, column 33): "+[u.constructor.name])})}}),Ln=new g.Unfoldable(function(){return wn},function n(t){return function(e){return c.defer(H)(function(r){var u=t(e);if(u instanceof h.Nothing)return U;if(u instanceof h.Just)return tn(u.value0.value0)(n(t)(u.value0.value1));throw new Error("Failed pattern match at Data.List.Lazy.Types (line 152, column 28 - line 154, column 39): "+[u.constructor.name])})}}),xn=new A.Unfoldable1(function(n){return function(t){return P(x.defer(function(e){return A.unfoldr1(N.unfoldable1NonEmpty(Ln))(n)(t)}))}}),hn=new i.Comonad(function(){return un},function(n){return N.head(x.force(n))}),En=new f.Monad(function(){return qn},function(){return bn}),bn=new u.Bind(function(){return Nn},function(n){return function(t){return w.map(x.functorLazy)(function(n){if(n instanceof M)return M.value;if(n instanceof S)return Z(I.append(J)(t(n.value0))(u.bind(bn)(n.value1)(t)));throw new Error("Failed pattern match at Data.List.Lazy.Types (line 175, column 5 - line 175, column 17): "+[n.constructor.name])})(b.unwrap(B)(n))}}),Nn=new r.Apply(function(){return K},f.ap(En)),qn=new e.Applicative(function(){return Nn},function(n){return tn(n)(U)}),jn=new r.Apply(function(){return R},function(n){return function(t){var e=x.force(t),u=x.force(n);return x.defer(function(n){return new N.NonEmpty(u.value0(e.value0),I.append(J)(r.apply(Nn)(u.value1)(tn(e.value0)(U)))(r.apply(Nn)(tn(u.value0)(u.value1))(e.value1)))})}}),In=new u.Bind(function(){return jn},function(n){return function(t){var e=x.force(n),r=x.force(b.unwrap(O)(t(e.value0)));return x.defer(function(n){return new N.NonEmpty(r.value0,I.append(J)(r.value1)(u.bind(bn)(e.value1)(function(n){return dn(t(n))})))})}}),Dn=new n.Alt(function(){return R},I.append(sn)),Fn=new n.Alt(function(){return K},I.append(J)),Wn=new s.Plus(function(){return Fn},U),Tn=new t.Alternative(function(){return qn},function(){return Wn}),zn=new d.MonadZero(function(){return Tn},function(){return En}),gn=new l.MonadPlus(function(){return zn}),An=new e.Applicative(function(){return jn},function(n){return x.defer(function(t){return N.singleton(Wn)(n)})}),Cn=new f.Monad(function(){return An},function(){return In});module.exports={List:C,Nil:M,Cons:S,step:Z,nil:U,cons:tn,NonEmptyList:P,toList:dn,newtypeList:B,showList:Q,eqList:X,eq1List:V,ordList:_,ord1List:$,lazyList:H,semigroupList:J,monoidList:k,functorList:K,functorWithIndexList:fn,foldableList:en,foldableWithIndexList:an,unfoldable1List:wn,unfoldableList:Ln,traversableList:pn,traversableWithIndexList:mn,applyList:Nn,applicativeList:qn,bindList:bn,monadList:En,altList:Fn,plusList:Wn,alternativeList:Tn,monadZeroList:zn,monadPlusList:gn,extendList:rn,newtypeNonEmptyList:O,eqNonEmptyList:Y,ordNonEmptyList:nn,showNonEmptyList:G,functorNonEmptyList:R,applyNonEmptyList:jn,applicativeNonEmptyList:An,bindNonEmptyList:In,monadNonEmptyList:Cn,altNonEmptyList:Dn,extendNonEmptyList:un,comonadNonEmptyList:hn,semigroupNonEmptyList:sn,foldableNonEmptyList:on,traversableNonEmptyList:vn,unfoldable1NonEmptyList:xn,functorWithIndexNonEmptyList:ln,foldableWithIndexNonEmptyList:cn,traversableWithIndexNonEmptyList:yn};
+},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Comonad/index.js":"U0zO","../Control.Extend/index.js":"JIoJ","../Control.Lazy/index.js":"y9cE","../Control.Monad/index.js":"U/Ix","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Lazy/index.js":"aRUE","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.NonEmpty/index.js":"qF8i","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unfoldable1/index.js":"S0Nl"}],"sNBV":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),t=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),r=require("../Control.Bind/index.js"),u=require("../Control.Category/index.js"),i=require("../Control.Lazy/index.js"),o=require("../Control.Monad.Rec.Class/index.js"),a=require("../Data.Boolean/index.js"),c=require("../Data.Eq/index.js"),l=require("../Data.Foldable/index.js"),f=require("../Data.Function/index.js"),s=require("../Data.Functor/index.js"),p=require("../Data.HeytingAlgebra/index.js"),m=require("../Data.Lazy/index.js"),v=require("../Data.List.Lazy.Types/index.js"),d=require("../Data.Maybe/index.js"),w=require("../Data.Newtype/index.js"),L=require("../Data.NonEmpty/index.js"),y=require("../Data.Ord/index.js"),h=require("../Data.Ordering/index.js"),z=require("../Data.Semigroup/index.js"),C=require("../Data.Show/index.js"),N=require("../Data.Traversable/index.js"),D=require("../Data.Tuple/index.js"),b=require("../Data.Unfoldable/index.js"),q=function(n){return n},x=function n(t){return function(r){return function(u){return e.apply(m.applyLazy)(s.map(m.functorLazy)(function(e){return function(r){if(e instanceof v.Nil)return v.Nil.value;if(r instanceof v.Nil)return v.Nil.value;if(e instanceof v.Cons&&r instanceof v.Cons)return new v.Cons(t(e.value0)(r.value0),n(t)(e.value1)(r.value1));throw new Error("Failed pattern match at Data.List.Lazy (line 693, column 3 - line 693, column 35): "+[e.constructor.name,r.constructor.name])}})(w.unwrap(v.newtypeList)(r)))(w.unwrap(v.newtypeList)(u))}}},F=function(n){return function(t){return function(e){return function(r){return N.sequence(v.traversableList)(n)(x(t)(e)(r))}}}},E=x(D.Tuple.create),g=function n(t){return function(e){return function(r){var u;return s.map(m.functorLazy)((u=t,function(t){if(t instanceof v.Nil)return v.Nil.value;if(0===u&&t instanceof v.Cons)return new v.Cons(e,t.value1);if(t instanceof v.Cons)return new v.Cons(t.value0,n(u-1|0)(e)(t.value1));throw new Error("Failed pattern match at Data.List.Lazy (line 367, column 3 - line 367, column 17): "+[u.constructor.name,t.constructor.name])}))(w.unwrap(v.newtypeList)(r))}}},j=l.foldr(v.foldableList)(function(n){return function(t){return new D.Tuple(v.cons(n.value0)(t.value0),v.cons(n.value1)(t.value1))}})(new D.Tuple(v.nil,v.nil)),A=function(n){var t=v.step(n);if(t instanceof v.Nil)return d.Nothing.value;if(t instanceof v.Cons)return new d.Just({head:t.value0,tail:t.value1});throw new Error("Failed pattern match at Data.List.Lazy (line 285, column 13 - line 287, column 44): "+[t.constructor.name])},M=function(n){return b.unfoldr(n)(function(n){return s.map(d.functorMaybe)(function(n){return new D.Tuple(n.head,n.tail)})(A(n))})},J=function n(t){var e=s.map(m.functorLazy)(function(e){return e instanceof v.Cons&&t(e.value0)?new v.Cons(e.value0,n(t)(e.value1)):v.Nil.value}),r=w.unwrap(v.newtypeList);return function(n){return v.List(e(r(n)))}},B=function n(t){if(t<=0)return f.const(v.nil);var e,r=s.map(m.functorLazy)((e=t,function(t){if(t instanceof v.Nil)return v.Nil.value;if(t instanceof v.Cons)return new v.Cons(t.value0,n(e-1|0)(t.value1));throw new Error("Failed pattern match at Data.List.Lazy (line 517, column 3 - line 517, column 32): "+[e.constructor.name,t.constructor.name])})),u=w.unwrap(v.newtypeList);return function(n){return v.List(r(u(n)))}},T=function(n){return s.map(d.functorMaybe)(function(n){return n.tail})(A(n))},P=function(n){return function(t){return function(e){return o.tailRecM2(o.monadRecMaybe)(function(t){return function(e){var r=v.step(t);if(r instanceof v.Nil)return d.Just.create(new o.Done(e));if(r instanceof v.Cons){var u=v.step(e);return u instanceof v.Cons&&c.eq(n)(r.value0)(u.value0)?d.Just.create(new o.Loop({a:r.value1,b:u.value1})):d.Nothing.value}throw new Error("Failed pattern match at Data.List.Lazy (line 499, column 21 - line 503, column 19): "+[r.constructor.name])}})(t)(e)}}},I=function n(t){return function(e){var r=A(e);if(r instanceof d.Just&&t(r.value0.head)){var u=n(t)(r.value0.tail);return{init:v.cons(r.value0.head)(u.init),rest:u.rest}}return{init:v.nil,rest:e}}},W=function(n){return function(t){return l.foldr(v.foldableList)(v.cons)(v.cons(t)(v.nil))(n)}},O=function(n){return v.cons(n)(v.nil)},R=function(n){return new C.Show(function(t){return"(Pattern "+C.show(v.showList(n))(t)+")"})},S=function n(t){return function(e){return function(r){return s.map(m.functorLazy)(function(r){if(r instanceof v.Nil)return v.Nil.value;if(r instanceof v.Cons){var u=t(r.value0)(e);return v.Cons.create(u)(n(t)(u)(r.value1))}throw new Error("Failed pattern match at Data.List.Lazy (line 764, column 5 - line 764, column 27): "+[r.constructor.name])})(w.unwrap(v.newtypeList)(r))}}},k=function(n){return i.defer(v.lazyList)(function(t){return l.foldl(v.foldableList)(f.flip(v.cons))(v.nil)(n)})},U=function n(e){return function(u){return function(i){if(u<1)return t.pure(e.Applicative0())(v.nil);if(a.otherwise)return r.bind(e.Bind1())(i)(function(o){return r.bind(e.Bind1())(n(e)(u-1|0)(i))(function(n){return t.pure(e.Applicative0())(v.cons(o)(n))})});throw new Error("Failed pattern match at Data.List.Lazy (line 161, column 1 - line 161, column 62): "+[u.constructor.name,i.constructor.name])}}},G=function(n){return i.fix(v.lazyList)(function(t){return v.cons(n)(t)})},H=function(n){return function(t){return B(n)(G(t))}},K=function(n){return function(t){if(n>t){return b.unfoldr(v.unfoldableList)(function(n){if(n>=t)return new d.Just(new D.Tuple(n,n-1|0));if(a.otherwise)return d.Nothing.value;throw new Error("Failed pattern match at Data.List.Lazy (line 148, column 13 - line 149, column 38): "+[n.constructor.name])})(n)}if(a.otherwise){return b.unfoldr(v.unfoldableList)(function(n){if(n<=t)return new d.Just(new D.Tuple(n,n+1|0));if(a.otherwise)return d.Nothing.value;throw new Error("Failed pattern match at Data.List.Lazy (line 153, column 5 - line 154, column 30): "+[n.constructor.name])})(n)}throw new Error("Failed pattern match at Data.List.Lazy (line 145, column 1 - line 145, column 32): "+[n.constructor.name,t.constructor.name])}},Q=function(n){return l.foldr(v.foldableList)(function(t){return function(e){return n(t)?{yes:v.cons(t)(e.yes),no:e.no}:{yes:e.yes,no:v.cons(t)(e.no)}}})({yes:v.nil,no:v.nil})},V=function(n){return d.isNothing(A(n))},X=new w.Newtype(function(n){return n},q),Y=function n(t){var e=s.map(m.functorLazy)(function(e){var r,u=!1;function i(r){if(r instanceof v.Nil)return u=!0,v.Nil.value;if(r instanceof v.Cons){var i=t(r.value0);if(i instanceof d.Nothing)return void(e=v.step(r.value1));if(i instanceof d.Just)return u=!0,new v.Cons(i.value0,n(t)(r.value1));throw new Error("Failed pattern match at Data.List.Lazy (line 460, column 5 - line 462, column 39): "+[i.constructor.name])}throw new Error("Failed pattern match at Data.List.Lazy (line 458, column 3 - line 458, column 15): "+[r.constructor.name])}for(;!u;)r=i(e);return r}),r=w.unwrap(v.newtypeList);return function(n){return v.List(e(r(n)))}},Z=function(n){return function(t){return function(r){return e.apply(n.Applicative0().Apply0())(s.map(n.Plus1().Alt0().Functor0())(v.cons)(r))(i.defer(t)(function(e){return $(n)(t)(r)}))}}},$=function(e){return function(r){return function(u){return n.alt(e.Plus1().Alt0())(Z(e)(r)(u))(t.pure(e.Applicative0())(v.nil))}}},_=l.foldl(v.foldableList)(function(n){return function(t){return n+1|0}})(0),nn=function(n){return function(n){var t,e=!1;function r(t){if(t instanceof v.Cons){if(V(t.value1))return e=!0,new d.Just(t.value0);if(a.otherwise)return void(n=v.step(t.value1))}return e=!0,d.Nothing.value}for(;!e;)t=r(n);return t}(v.step(n))},tn=function(n){return function(t){return i.fix(v.lazyList)(function(e){return v.cons(t)(s.map(v.functorList)(n)(e))})}},en=function n(t){return function(e){return function(r){if(0===t)return v.cons(e)(r);return s.map(m.functorLazy)(function(r){if(r instanceof v.Nil)return new v.Cons(e,v.nil);if(r instanceof v.Cons)return new v.Cons(r.value0,n(t-1|0)(e)(r.value1));throw new Error("Failed pattern match at Data.List.Lazy (line 340, column 3 - line 340, column 22): "+[r.constructor.name])})(w.unwrap(v.newtypeList)(r))}}},rn=function(n){return function n(t){if(t instanceof v.Cons){if(V(t.value1))return new d.Just(v.nil);if(a.otherwise)return s.map(d.functorMaybe)(v.cons(t.value0))(n(v.step(t.value1)))}return d.Nothing.value}(v.step(n))},un=function(n){var t;return t=v.step(n),function(n){var e,r=t,u=!1;function i(t,e){if(t instanceof v.Nil)return u=!0,d.Nothing.value;if(t instanceof v.Cons&&0===e)return u=!0,new d.Just(t.value0);if(t instanceof v.Cons)return r=v.step(t.value1),void(n=e-1|0);throw new Error("Failed pattern match at Data.List.Lazy (line 299, column 3 - line 299, column 21): "+[t.constructor.name,e.constructor.name])}for(;!u;)e=i(r,n);return e}},on=function(n){return s.map(d.functorMaybe)(function(n){return n.head})(A(n))},an=function n(t){var e=A(t);if(e instanceof d.Nothing)return t;if(e instanceof d.Just){var r=A(e.value0.head);if(r instanceof d.Nothing)return n(e.value0.tail);if(r instanceof d.Just)return v.cons(v.cons(r.value0.head)(Y(on)(e.value0.tail)))(n(v.cons(r.value0.tail)(Y(T)(e.value0.tail))));throw new Error("Failed pattern match at Data.List.Lazy (line 734, column 7 - line 738, column 72): "+[r.constructor.name])}throw new Error("Failed pattern match at Data.List.Lazy (line 730, column 3 - line 738, column 72): "+[e.constructor.name])},cn=function n(t){var e=s.map(m.functorLazy)(function(e){if(e instanceof v.Nil)return v.Nil.value;if(e instanceof v.Cons){var r=I(t(e.value0))(e.value1);return new v.Cons(m.defer(function(n){return new L.NonEmpty(e.value0,r.init)}),n(t)(r.rest))}throw new Error("Failed pattern match at Data.List.Lazy (line 588, column 3 - line 588, column 15): "+[e.constructor.name])}),r=w.unwrap(v.newtypeList);return function(n){return v.List(e(r(n)))}},ln=function(n){return cn(c.eq(n))},fn=function(){var n=t.pure(m.applicativeLazy);return function(t){return v.List(n(t))}}(),sn=function n(t){return function(e){return function(r){return s.map(m.functorLazy)(function(r){if(r instanceof v.Nil)return new v.Cons(e,v.nil);if(r instanceof v.Cons)return t(e)(r.value0)instanceof h.GT?new v.Cons(r.value0,n(t)(e)(r.value1)):new v.Cons(e,fn(r));throw new Error("Failed pattern match at Data.List.Lazy (line 235, column 3 - line 235, column 22): "+[r.constructor.name])})(w.unwrap(v.newtypeList)(r))}}},pn=function(n){return sn(y.compare(n))},mn=function(n){return l.foldr(n)(v.cons)(v.nil)},vn=function(n){return function(t){return function(e){return function r(u){var o=v.step(u);if(o instanceof v.Cons)return i.defer(n)(function(n){return t(o.value0)(r(o.value1))});if(o instanceof v.Nil)return e;throw new Error("Failed pattern match at Data.List.Lazy (line 756, column 13 - line 758, column 15): "+[o.constructor.name])}}}},dn=function n(e){return function(u){return function(i){return function(o){var a=A(o);if(a instanceof d.Nothing)return t.pure(e.Applicative0())(i);if(a instanceof d.Just)return r.bind(e.Bind1())(u(i)(a.value0.head))(function(t){return n(e)(u)(t)(a.value0.tail)});throw new Error("Failed pattern match at Data.List.Lazy (line 747, column 5 - line 750, column 54): "+[a.constructor.name])}}}},wn=function(n){return function e(u){return function(i){return r.bind(d.bindMaybe)(A(i))(function(r){return n(r.head)?t.pure(d.applicativeMaybe)(u):e(u+1|0)(r.tail)})}}(0)},Ln=function(n){return function(t){return s.map(d.functorMaybe)(function(n){return(_(t)-1|0)-n|0})(wn(n)(k(t)))}},yn=function n(e){return function(u){return function(i){var o=A(i);if(o instanceof d.Nothing)return t.pure(e.Applicative0())(v.nil);if(o instanceof d.Just)return r.bind(e.Bind1())(u(o.value0.head))(function(i){return r.bind(e.Bind1())(n(e)(u)(o.value0.tail))(function(n){return t.pure(e.Applicative0())(i?v.cons(o.value0.head)(n):n)})});throw new Error("Failed pattern match at Data.List.Lazy (line 443, column 5 - line 448, column 48): "+[o.constructor.name])}}},hn=function n(t){var e=s.map(m.functorLazy)(function(e){var r,u=!1;function i(r){if(r instanceof v.Nil)return u=!0,v.Nil.value;if(r instanceof v.Cons){if(t(r.value0))return u=!0,new v.Cons(r.value0,n(t)(r.value1));if(a.otherwise)return void(e=v.step(r.value1))}throw new Error("Failed pattern match at Data.List.Lazy (line 428, column 3 - line 428, column 15): "+[r.constructor.name])}for(;!u;)r=i(e);return r}),r=w.unwrap(v.newtypeList);return function(n){return v.List(e(r(n)))}},zn=function(n){return function(t){return function(e){return hn(function(t){return l.any(v.foldableList)(p.heytingAlgebraBoolean)(n(t))(e)})(t)}}},Cn=function(n){return zn(c.eq(n))},Nn=function n(t){var e=s.map(m.functorLazy)(function(e){if(e instanceof v.Nil)return v.Nil.value;if(e instanceof v.Cons)return new v.Cons(e.value0,n(t)(hn(function(n){return!t(e.value0)(n)})(e.value1)));throw new Error("Failed pattern match at Data.List.Lazy (line 621, column 3 - line 621, column 15): "+[e.constructor.name])}),r=w.unwrap(v.newtypeList);return function(n){return v.List(e(r(n)))}},Dn=function(n){return Nn(c.eq(n))},bn=function(n){return new c.Eq(function(t){return function(e){return c.eq(v.eqList(n))(t)(e)}})},qn=function(n){return new y.Ord(function(){return bn(n.Eq0())},function(t){return function(e){return y.compare(v.ordList(n))(t)(e)}})},xn=function(n){return function(t){return Ln(function(e){return c.eq(n)(e)(t)})}},Fn=function(n){return function(t){return wn(function(e){return c.eq(n)(e)(t)})}},En=function(n){return function(t){return function(t){var e,r=!1;function u(e){if(!(e instanceof v.Cons&&n(e.value0)))return r=!0,fn(e);t=v.step(e.value1)}for(;!r;)e=u(t);return e}(v.step(t))}},gn=function(n){var t,e=s.map(m.functorLazy)((t=n,function(n){var e,r=t,u=!1;function i(t,e){if(0===t)return u=!0,e;if(e instanceof v.Nil)return u=!0,v.Nil.value;if(e instanceof v.Cons)return r=t-1|0,void(n=v.step(e.value1));throw new Error("Failed pattern match at Data.List.Lazy (line 536, column 3 - line 536, column 15): "+[t.constructor.name,e.constructor.name])}for(;!u;)e=i(r,n);return e})),r=w.unwrap(v.newtypeList);return function(n){return v.List(e(r(n)))}},jn=function(n){return function(t){return function(e){return B(t-n|0)(gn(n)(e))}}},An=function n(t){return function(e){return function(r){return s.map(m.functorLazy)(function(r){if(r instanceof v.Nil)return v.Nil.value;if(r instanceof v.Cons){if(t(e)(r.value0))return v.step(r.value1);if(a.otherwise)return new v.Cons(r.value0,n(t)(e)(r.value1))}throw new Error("Failed pattern match at Data.List.Lazy (line 650, column 3 - line 650, column 15): "+[r.constructor.name])})(w.unwrap(v.newtypeList)(r))}}},Mn=function(n){return function(t){return function(e){return z.append(v.semigroupList)(t)(l.foldl(v.foldableList)(f.flip(An(n)))(Nn(n)(e))(t))}}},Jn=function(n){return Mn(c.eq(n))},Bn=function n(t){return function(e){var r;return s.map(m.functorLazy)((r=t,function(t){if(t instanceof v.Nil)return v.Nil.value;if(0===r&&t instanceof v.Cons)return v.step(t.value1);if(t instanceof v.Cons)return new v.Cons(t.value0,n(r-1|0)(t.value1));throw new Error("Failed pattern match at Data.List.Lazy (line 353, column 3 - line 353, column 17): "+[r.constructor.name,t.constructor.name])}))(w.unwrap(v.newtypeList)(e))}},Tn=function(n){return An(c.eq(n))},Pn=function(n){return l.foldl(v.foldableList)(f.flip(Tn(n)))},In=function(n){return i.fix(v.lazyList)(function(t){return z.append(v.semigroupList)(n)(t)})},Wn=f.flip(r.bind(v.bindList)),On=function(n){return r.bind(v.bindList)(n)(u.identity(u.categoryFn))},Rn=Y(u.identity(u.categoryFn)),Sn=function n(t){return function(e){return function(r){var u;return s.map(m.functorLazy)((u=t,function(t){if(t instanceof v.Nil)return v.Nil.value;if(0===u&&t instanceof v.Cons){var r=e(t.value0);if(r instanceof d.Nothing)return v.step(t.value1);if(r instanceof d.Just)return new v.Cons(r.value0,t.value1);throw new Error("Failed pattern match at Data.List.Lazy (line 394, column 22 - line 396, column 26): "+[r.constructor.name])}if(t instanceof v.Cons)return new v.Cons(t.value0,n(u-1|0)(e)(t.value1));throw new Error("Failed pattern match at Data.List.Lazy (line 393, column 3 - line 393, column 17): "+[u.constructor.name,t.constructor.name])}))(w.unwrap(v.newtypeList)(r))}}},kn=function(n){return function(t){return Sn(n)(function(n){return d.Just.create(t(n))})}};module.exports={toUnfoldable:M,fromFoldable:mn,singleton:O,range:K,replicate:H,replicateM:U,some:Z,many:$,repeat:G,iterate:tn,cycle:In,null:V,length:_,snoc:W,insert:pn,insertBy:sn,head:on,last:nn,tail:T,init:rn,uncons:A,index:un,elemIndex:Fn,elemLastIndex:xn,findIndex:wn,findLastIndex:Ln,insertAt:en,deleteAt:Bn,updateAt:g,modifyAt:kn,alterAt:Sn,reverse:k,concat:On,concatMap:Wn,filter:hn,filterM:yn,mapMaybe:Y,catMaybes:Rn,Pattern:q,stripPrefix:P,slice:jn,take:B,takeWhile:J,drop:gn,dropWhile:En,span:I,group:ln,groupBy:cn,partition:Q,nub:Dn,nubBy:Nn,union:Jn,unionBy:Mn,delete:Tn,deleteBy:An,difference:Pn,intersect:Cn,intersectBy:zn,zipWith:x,zipWithA:F,zip:E,unzip:j,transpose:an,foldM:dn,foldrLazy:vn,scanrLazy:S,eqPattern:bn,ordPattern:qn,newtypePattern:X,showPattern:R};
+},{"../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Lazy/index.js":"y9cE","../Control.Monad.Rec.Class/index.js":"UVIy","../Data.Boolean/index.js":"ObQr","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Lazy/index.js":"aRUE","../Data.List.Lazy.Types/index.js":"EJF+","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.NonEmpty/index.js":"qF8i","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z"}],"RRDs":[function(require,module,exports) {
+"use strict";var e=require("../Control.Applicative/index.js"),n=require("../Control.Apply/index.js"),u=require("../Control.Category/index.js"),a=require("../Data.Eq/index.js"),t=require("../Data.Foldable/index.js"),l=require("../Data.FoldableWithIndex/index.js"),r=require("../Data.Function/index.js"),v=require("../Data.Functor/index.js"),i=require("../Data.FunctorWithIndex/index.js"),o=require("../Data.HeytingAlgebra/index.js"),c=require("../Data.List/index.js"),f=require("../Data.List.Lazy/index.js"),s=require("../Data.List.Lazy.Types/index.js"),p=require("../Data.List.Types/index.js"),m=require("../Data.Maybe/index.js"),w=require("../Data.Monoid/index.js"),d=require("../Data.Ord/index.js"),h=require("../Data.Ordering/index.js"),y=require("../Data.Semigroup/index.js"),E=require("../Data.Show/index.js"),M=require("../Data.Traversable/index.js"),I=require("../Data.TraversableWithIndex/index.js"),L=require("../Data.Tuple/index.js"),D=require("../Data.Unfoldable/index.js"),F=function(){function e(){}return e.value=new e,e}(),T=function(){function e(e,n,u,a){this.value0=e,this.value1=n,this.value2=u,this.value3=a}return e.create=function(n){return function(u){return function(a){return function(t){return new e(n,u,a,t)}}}},e}(),b=function(){function e(e,n,u,a,t,l,r){this.value0=e,this.value1=n,this.value2=u,this.value3=a,this.value4=t,this.value5=l,this.value6=r}return e.create=function(n){return function(u){return function(a){return function(t){return function(l){return function(r){return function(v){return new e(n,u,a,t,l,r,v)}}}}}}},e}(),g=function(){function e(e,n,u){this.value0=e,this.value1=n,this.value2=u}return e.create=function(n){return function(u){return function(a){return new e(n,u,a)}}},e}(),x=function(){function e(e,n,u){this.value0=e,this.value1=n,this.value2=u}return e.create=function(n){return function(u){return function(a){return new e(n,u,a)}}},e}(),C=function(){function e(e,n,u,a,t,l){this.value0=e,this.value1=n,this.value2=u,this.value3=a,this.value4=t,this.value5=l}return e.create=function(n){return function(u){return function(a){return function(t){return function(l){return function(r){return new e(n,u,a,t,l,r)}}}}}},e}(),q=function(){function e(e,n,u,a,t,l){this.value0=e,this.value1=n,this.value2=u,this.value3=a,this.value4=t,this.value5=l}return e.create=function(n){return function(u){return function(a){return function(t){return function(l){return function(r){return new e(n,u,a,t,l,r)}}}}}},e}(),J=function(){function e(e,n,u,a,t,l){this.value0=e,this.value1=n,this.value2=u,this.value3=a,this.value4=t,this.value5=l}return e.create=function(n){return function(u){return function(a){return function(t){return function(l){return function(r){return new e(n,u,a,t,l,r)}}}}}},e}(),N=function(){function e(e,n,u,a){this.value0=e,this.value1=n,this.value2=u,this.value3=a}return e.create=function(n){return function(u){return function(a){return function(t){return new e(n,u,a,t)}}}},e}(),A=function n(u){if(u instanceof F)return p.Nil.value;if(u instanceof T)return y.append(p.semigroupList)(n(u.value0))(y.append(p.semigroupList)(e.pure(p.applicativeList)(u.value2))(n(u.value3)));if(u instanceof b)return y.append(p.semigroupList)(n(u.value0))(y.append(p.semigroupList)(e.pure(p.applicativeList)(u.value2))(y.append(p.semigroupList)(n(u.value3))(y.append(p.semigroupList)(e.pure(p.applicativeList)(u.value5))(n(u.value6)))));throw new Error("Failed pattern match at Data.Map.Internal (line 612, column 1 - line 612, column 40): "+[u.constructor.name])},k=function e(n){if(n instanceof F)return 0;if(n instanceof T)return(1+e(n.value0)|0)+e(n.value3)|0;if(n instanceof b)return((2+e(n.value0)|0)+e(n.value3)|0)+e(n.value6)|0;throw new Error("Failed pattern match at Data.Map.Internal (line 662, column 1 - line 662, column 35): "+[n.constructor.name])},W=function(e){return function(n){return new T(F.value,e,n,F.value)}},j=function(e){return function(n){return D.unfoldr(e)(function(e){var n,u=!1;function a(n){if(n instanceof p.Nil)return u=!0,m.Nothing.value;if(n instanceof p.Cons){if(n.value0 instanceof F)return void(e=n.value1);if(n.value0 instanceof T&&n.value0.value0 instanceof F&&n.value0.value3 instanceof F)return u=!0,m.Just.create(new L.Tuple(new L.Tuple(n.value0.value1,n.value0.value2),n.value1));if(n.value0 instanceof T&&n.value0.value0 instanceof F)return u=!0,m.Just.create(new L.Tuple(new L.Tuple(n.value0.value1,n.value0.value2),new p.Cons(n.value0.value3,n.value1)));if(n.value0 instanceof T)return void(e=new p.Cons(n.value0.value0,new p.Cons(W(n.value0.value1)(n.value0.value2),new p.Cons(n.value0.value3,n.value1))));if(n.value0 instanceof b)return void(e=new p.Cons(n.value0.value0,new p.Cons(W(n.value0.value1)(n.value0.value2),new p.Cons(n.value0.value3,new p.Cons(W(n.value0.value4)(n.value0.value5),new p.Cons(n.value0.value6,n.value1))))));throw new Error("Failed pattern match at Data.Map.Internal (line 577, column 18 - line 586, column 71): "+[n.value0.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 576, column 3 - line 576, column 19): "+[n.constructor.name])}for(;!u;)n=a(e);return n})(new p.Cons(n,p.Nil.value))}},Q=j(D.unfoldableArray),G=function(e){return function(n){return D.unfoldr(e)(function(e){var n,u=!1;function a(n){if(n instanceof p.Nil)return u=!0,m.Nothing.value;if(n instanceof p.Cons){if(n.value0 instanceof F)return void(e=n.value1);if(n.value0 instanceof T)return u=!0,m.Just.create(new L.Tuple(new L.Tuple(n.value0.value1,n.value0.value2),new p.Cons(n.value0.value0,new p.Cons(n.value0.value3,n.value1))));if(n.value0 instanceof b)return u=!0,m.Just.create(new L.Tuple(new L.Tuple(n.value0.value1,n.value0.value2),new p.Cons(W(n.value0.value4)(n.value0.value5),new p.Cons(n.value0.value0,new p.Cons(n.value0.value3,new p.Cons(n.value0.value6,n.value1))))));throw new Error("Failed pattern match at Data.Map.Internal (line 598, column 18 - line 603, column 77): "+[n.value0.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 597, column 3 - line 597, column 19): "+[n.constructor.name])}for(;!u;)n=a(e);return n})(new p.Cons(n,p.Nil.value))}},S=function e(n){return function(u){return function(a){if(a instanceof F)return"Leaf";if(a instanceof T)return"Two ("+e(n)(u)(a.value0)+") ("+E.show(n)(a.value1)+") ("+E.show(u)(a.value2)+") ("+e(n)(u)(a.value3)+")";if(a instanceof b)return"Three ("+e(n)(u)(a.value0)+") ("+E.show(n)(a.value1)+") ("+E.show(u)(a.value2)+") ("+e(n)(u)(a.value3)+") ("+E.show(n)(a.value4)+") ("+E.show(u)(a.value5)+") ("+e(n)(u)(a.value6)+")";throw new Error("Failed pattern match at Data.Map.Internal (line 153, column 1 - line 153, column 62): "+[a.constructor.name])}}},O=function(e){return function(n){return new E.Show(function(u){return"(fromFoldable "+E.show(E.showArray(L.showTuple(e)(n)))(Q(u))+")"})}},U=function(e){return function(n){var u=d.compare(e);return function e(a){if(a instanceof F)return m.Nothing.value;if(a instanceof T){var t=u(n)(a.value1);if(t instanceof h.EQ)return new m.Just({key:a.value1,value:a.value2});if(t instanceof h.GT)return m.Just.create(m.fromMaybe({key:a.value1,value:a.value2})(e(a.value3)));if(t instanceof h.LT)return e(a.value0);throw new Error("Failed pattern match at Data.Map.Internal (line 225, column 33 - line 228, column 20): "+[t.constructor.name])}if(a instanceof b){var l=u(n)(a.value4);if(l instanceof h.EQ)return new m.Just({key:a.value4,value:a.value5});if(l instanceof h.GT)return m.Just.create(m.fromMaybe({key:a.value4,value:a.value5})(e(a.value6)));if(l instanceof h.LT)return e(new T(a.value0,a.value1,a.value2,a.value3));throw new Error("Failed pattern match at Data.Map.Internal (line 229, column 45 - line 232, column 36): "+[l.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 224, column 5 - line 224, column 22): "+[a.constructor.name])}}},z=function(e){return function(n){var u=d.compare(e);return function e(a){if(a instanceof F)return m.Nothing.value;if(a instanceof T){var t=u(n)(a.value1);if(t instanceof h.EQ)return new m.Just({key:a.value1,value:a.value2});if(t instanceof h.LT)return m.Just.create(m.fromMaybe({key:a.value1,value:a.value2})(e(a.value0)));if(t instanceof h.GT)return e(a.value3);throw new Error("Failed pattern match at Data.Map.Internal (line 259, column 33 - line 262, column 21): "+[t.constructor.name])}if(a instanceof b){var l=u(n)(a.value1);if(l instanceof h.EQ)return new m.Just({key:a.value1,value:a.value2});if(l instanceof h.LT)return m.Just.create(m.fromMaybe({key:a.value1,value:a.value2})(e(a.value0)));if(l instanceof h.GT)return e(new T(a.value3,a.value4,a.value5,a.value6));throw new Error("Failed pattern match at Data.Map.Internal (line 263, column 45 - line 266, column 37): "+[l.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 258, column 5 - line 258, column 22): "+[a.constructor.name])}}},K=function(e){return function(n){var u=d.compare(e);return function(e){var a,t=!1;function l(a){if(a instanceof F)return t=!0,m.Nothing.value;if(a instanceof T){var l=u(n)(a.value1);return l instanceof h.EQ?(t=!0,new m.Just(a.value2)):l instanceof h.LT?void(e=a.value0):void(e=a.value3)}if(a instanceof b){var r=u(n)(a.value1);if(r instanceof h.EQ)return t=!0,new m.Just(a.value2);var v=u(n)(a.value4);return v instanceof h.EQ?(t=!0,new m.Just(a.value5)):r instanceof h.LT?void(e=a.value0):v instanceof h.GT?void(e=a.value6):void(e=a.value3)}throw new Error("Failed pattern match at Data.Map.Internal (line 200, column 5 - line 200, column 22): "+[a.constructor.name])}for(;!t;)a=l(e);return a}}},B=function(e){return function(n){return function(u){return m.isJust(K(e)(n)(u))}}},H=function n(u){if(u instanceof F)return p.Nil.value;if(u instanceof T)return y.append(p.semigroupList)(n(u.value0))(y.append(p.semigroupList)(e.pure(p.applicativeList)(u.value1))(n(u.value3)));if(u instanceof b)return y.append(p.semigroupList)(n(u.value0))(y.append(p.semigroupList)(e.pure(p.applicativeList)(u.value1))(y.append(p.semigroupList)(n(u.value3))(y.append(p.semigroupList)(e.pure(p.applicativeList)(u.value4))(n(u.value6)))));throw new Error("Failed pattern match at Data.Map.Internal (line 606, column 1 - line 606, column 38): "+[u.constructor.name])},V=function(e){return function(n){return function(u){return function(l){return t.all(s.foldableList)(o.heytingAlgebraBoolean)(function(u){return a.eq(m.eqMaybe(n))(K(e)(u.value0)(l))(new m.Just(u.value1))})(j(s.unfoldableList)(u))}}}},P=function(e){return e instanceof F},R=new v.Functor(function(e){return function(n){if(n instanceof F)return F.value;if(n instanceof T)return new T(v.map(R)(e)(n.value0),n.value1,e(n.value2),v.map(R)(e)(n.value3));if(n instanceof b)return new b(v.map(R)(e)(n.value0),n.value1,e(n.value2),v.map(R)(e)(n.value3),n.value4,e(n.value5),v.map(R)(e)(n.value6));throw new Error("Failed pattern match at Data.Map.Internal (line 96, column 1 - line 99, column 110): "+[e.constructor.name,n.constructor.name])}}),X=new i.FunctorWithIndex(function(){return R},function(e){return function(n){if(n instanceof F)return F.value;if(n instanceof T)return new T(i.mapWithIndex(X)(e)(n.value0),n.value1,e(n.value1)(n.value2),i.mapWithIndex(X)(e)(n.value3));if(n instanceof b)return new b(i.mapWithIndex(X)(e)(n.value0),n.value1,e(n.value1)(n.value2),i.mapWithIndex(X)(e)(n.value3),n.value4,e(n.value4)(n.value5),i.mapWithIndex(X)(e)(n.value6));throw new Error("Failed pattern match at Data.Map.Internal (line 101, column 1 - line 104, column 152): "+[e.constructor.name,n.constructor.name])}}),Y=function(e){return function(n){return function(u){var a,t=e,l=n,r=!1;function v(e,n,a){if(n instanceof p.Nil)return r=!0,a;if(n instanceof p.Cons){if(n.value0 instanceof g)return t=e,l=n.value1,void(u=new T(a,n.value0.value0,n.value0.value1,n.value0.value2));if(n.value0 instanceof x)return t=e,l=n.value1,void(u=new T(n.value0.value0,n.value0.value1,n.value0.value2,a));if(n.value0 instanceof C)return t=e,l=n.value1,void(u=new b(a,n.value0.value0,n.value0.value1,n.value0.value2,n.value0.value3,n.value0.value4,n.value0.value5));if(n.value0 instanceof q)return t=e,l=n.value1,void(u=new b(n.value0.value0,n.value0.value1,n.value0.value2,a,n.value0.value3,n.value0.value4,n.value0.value5));if(n.value0 instanceof J)return t=e,l=n.value1,void(u=new b(n.value0.value0,n.value0.value1,n.value0.value2,n.value0.value3,n.value0.value4,n.value0.value5,a));throw new Error("Failed pattern match at Data.Map.Internal (line 418, column 3 - line 423, column 88): "+[n.value0.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 415, column 1 - line 415, column 80): "+[n.constructor.name,a.constructor.name])}for(;!r;)a=v(t,l,u);return a}}},Z=function(e){return function(n){return function(u){var a,t=function(n){return function(u){var a,t=n,l=!1;function r(n,a){if(n instanceof p.Nil)return l=!0,new T(a.value0,a.value1,a.value2,a.value3);if(n instanceof p.Cons){if(n.value0 instanceof g)return l=!0,Y(e)(n.value1)(new b(a.value0,a.value1,a.value2,a.value3,n.value0.value0,n.value0.value1,n.value0.value2));if(n.value0 instanceof x)return l=!0,Y(e)(n.value1)(new b(n.value0.value0,n.value0.value1,n.value0.value2,a.value0,a.value1,a.value2,a.value3));if(n.value0 instanceof C)return t=n.value1,void(u=new N(new T(a.value0,a.value1,a.value2,a.value3),n.value0.value0,n.value0.value1,new T(n.value0.value2,n.value0.value3,n.value0.value4,n.value0.value5)));if(n.value0 instanceof q)return t=n.value1,void(u=new N(new T(n.value0.value0,n.value0.value1,n.value0.value2,a.value0),a.value1,a.value2,new T(a.value3,n.value0.value3,n.value0.value4,n.value0.value5)));if(n.value0 instanceof J)return t=n.value1,void(u=new N(new T(n.value0.value0,n.value0.value1,n.value0.value2,n.value0.value3),n.value0.value4,n.value0.value5,new T(a.value0,a.value1,a.value2,a.value3)));throw new Error("Failed pattern match at Data.Map.Internal (line 454, column 5 - line 459, column 108): "+[n.value0.constructor.name,a.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 451, column 3 - line 451, column 56): "+[n.constructor.name,a.constructor.name])}for(;!l;)a=r(t,u);return a}},l=d.compare(e);return a=p.Nil.value,function(r){var v,i=a,o=!1;function c(a,v){if(v instanceof F)return o=!0,t(a)(new N(F.value,n,u,F.value));if(v instanceof T){var c=l(n)(v.value1);return c instanceof h.EQ?(o=!0,Y(e)(a)(new T(v.value0,n,u,v.value3))):c instanceof h.LT?(i=new p.Cons(new g(v.value1,v.value2,v.value3),a),void(r=v.value0)):(i=new p.Cons(new x(v.value0,v.value1,v.value2),a),void(r=v.value3))}if(v instanceof b){var f=l(n)(v.value1);if(f instanceof h.EQ)return o=!0,Y(e)(a)(new b(v.value0,n,u,v.value3,v.value4,v.value5,v.value6));var s=l(n)(v.value4);return s instanceof h.EQ?(o=!0,Y(e)(a)(new b(v.value0,v.value1,v.value2,v.value3,n,u,v.value6))):f instanceof h.LT?(i=new p.Cons(new C(v.value1,v.value2,v.value3,v.value4,v.value5,v.value6),a),void(r=v.value0)):f instanceof h.GT&&s instanceof h.LT?(i=new p.Cons(new q(v.value0,v.value1,v.value2,v.value4,v.value5,v.value6),a),void(r=v.value3)):(i=new p.Cons(new J(v.value0,v.value1,v.value2,v.value3,v.value4,v.value5),a),void(r=v.value6))}throw new Error("Failed pattern match at Data.Map.Internal (line 434, column 3 - line 434, column 55): "+[a.constructor.name,v.constructor.name])}for(;!o;)v=c(i,r);return v}}}},$=function(e){return function(n){var u,a=function(n){return function(u){var a,t=n,l=!1;function r(n,a){if(n instanceof p.Nil)return l=!0,a;if(n instanceof p.Cons){if(n.value0 instanceof g&&n.value0.value2 instanceof F&&a instanceof F)return l=!0,Y(e)(n.value1)(new T(F.value,n.value0.value0,n.value0.value1,F.value));if(n.value0 instanceof x&&n.value0.value0 instanceof F&&a instanceof F)return l=!0,Y(e)(n.value1)(new T(F.value,n.value0.value1,n.value0.value2,F.value));if(n.value0 instanceof g&&n.value0.value2 instanceof T)return t=n.value1,void(u=new b(a,n.value0.value0,n.value0.value1,n.value0.value2.value0,n.value0.value2.value1,n.value0.value2.value2,n.value0.value2.value3));if(n.value0 instanceof x&&n.value0.value0 instanceof T)return t=n.value1,void(u=new b(n.value0.value0.value0,n.value0.value0.value1,n.value0.value0.value2,n.value0.value0.value3,n.value0.value1,n.value0.value2,a));if(n.value0 instanceof g&&n.value0.value2 instanceof b)return l=!0,Y(e)(n.value1)(new T(new T(a,n.value0.value0,n.value0.value1,n.value0.value2.value0),n.value0.value2.value1,n.value0.value2.value2,new T(n.value0.value2.value3,n.value0.value2.value4,n.value0.value2.value5,n.value0.value2.value6)));if(n.value0 instanceof x&&n.value0.value0 instanceof b)return l=!0,Y(e)(n.value1)(new T(new T(n.value0.value0.value0,n.value0.value0.value1,n.value0.value0.value2,n.value0.value0.value3),n.value0.value0.value4,n.value0.value0.value5,new T(n.value0.value0.value6,n.value0.value1,n.value0.value2,a)));if(n.value0 instanceof C&&n.value0.value2 instanceof F&&n.value0.value5 instanceof F&&a instanceof F)return l=!0,Y(e)(n.value1)(new b(F.value,n.value0.value0,n.value0.value1,F.value,n.value0.value3,n.value0.value4,F.value));if(n.value0 instanceof q&&n.value0.value0 instanceof F&&n.value0.value5 instanceof F&&a instanceof F)return l=!0,Y(e)(n.value1)(new b(F.value,n.value0.value1,n.value0.value2,F.value,n.value0.value3,n.value0.value4,F.value));if(n.value0 instanceof J&&n.value0.value0 instanceof F&&n.value0.value3 instanceof F&&a instanceof F)return l=!0,Y(e)(n.value1)(new b(F.value,n.value0.value1,n.value0.value2,F.value,n.value0.value4,n.value0.value5,F.value));if(n.value0 instanceof C&&n.value0.value2 instanceof T)return l=!0,Y(e)(n.value1)(new T(new b(a,n.value0.value0,n.value0.value1,n.value0.value2.value0,n.value0.value2.value1,n.value0.value2.value2,n.value0.value2.value3),n.value0.value3,n.value0.value4,n.value0.value5));if(n.value0 instanceof q&&n.value0.value0 instanceof T)return l=!0,Y(e)(n.value1)(new T(new b(n.value0.value0.value0,n.value0.value0.value1,n.value0.value0.value2,n.value0.value0.value3,n.value0.value1,n.value0.value2,a),n.value0.value3,n.value0.value4,n.value0.value5));if(n.value0 instanceof q&&n.value0.value5 instanceof T)return l=!0,Y(e)(n.value1)(new T(n.value0.value0,n.value0.value1,n.value0.value2,new b(a,n.value0.value3,n.value0.value4,n.value0.value5.value0,n.value0.value5.value1,n.value0.value5.value2,n.value0.value5.value3)));if(n.value0 instanceof J&&n.value0.value3 instanceof T)return l=!0,Y(e)(n.value1)(new T(n.value0.value0,n.value0.value1,n.value0.value2,new b(n.value0.value3.value0,n.value0.value3.value1,n.value0.value3.value2,n.value0.value3.value3,n.value0.value4,n.value0.value5,a)));if(n.value0 instanceof C&&n.value0.value2 instanceof b)return l=!0,Y(e)(n.value1)(new b(new T(a,n.value0.value0,n.value0.value1,n.value0.value2.value0),n.value0.value2.value1,n.value0.value2.value2,new T(n.value0.value2.value3,n.value0.value2.value4,n.value0.value2.value5,n.value0.value2.value6),n.value0.value3,n.value0.value4,n.value0.value5));if(n.value0 instanceof q&&n.value0.value0 instanceof b)return l=!0,Y(e)(n.value1)(new b(new T(n.value0.value0.value0,n.value0.value0.value1,n.value0.value0.value2,n.value0.value0.value3),n.value0.value0.value4,n.value0.value0.value5,new T(n.value0.value0.value6,n.value0.value1,n.value0.value2,a),n.value0.value3,n.value0.value4,n.value0.value5));if(n.value0 instanceof q&&n.value0.value5 instanceof b)return l=!0,Y(e)(n.value1)(new b(n.value0.value0,n.value0.value1,n.value0.value2,new T(a,n.value0.value3,n.value0.value4,n.value0.value5.value0),n.value0.value5.value1,n.value0.value5.value2,new T(n.value0.value5.value3,n.value0.value5.value4,n.value0.value5.value5,n.value0.value5.value6)));if(n.value0 instanceof J&&n.value0.value3 instanceof b)return l=!0,Y(e)(n.value1)(new b(n.value0.value0,n.value0.value1,n.value0.value2,new T(n.value0.value3.value0,n.value0.value3.value1,n.value0.value3.value2,n.value0.value3.value3),n.value0.value3.value4,n.value0.value3.value5,new T(n.value0.value3.value6,n.value0.value4,n.value0.value5,a)));throw new Error("Failed pattern match at Data.Map.Internal (line 511, column 9 - line 528, column 136): "+[n.value0.constructor.name,a.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 508, column 5 - line 528, column 136): "+[n.constructor.name])}for(;!l;)a=r(t,u);return a}},t=function(e){return function(n){var u,t=e,l=!1;function r(e,u){if(u instanceof T&&u.value0 instanceof F&&u.value3 instanceof F)return l=!0,a(e)(F.value);if(u instanceof T)return t=new p.Cons(new x(u.value0,u.value1,u.value2),e),void(n=u.value3);if(u instanceof b&&u.value0 instanceof F&&u.value3 instanceof F&&u.value6 instanceof F)return l=!0,a(new p.Cons(new x(F.value,u.value1,u.value2),e))(F.value);if(u instanceof b)return t=new p.Cons(new J(u.value0,u.value1,u.value2,u.value3,u.value4,u.value5),e),void(n=u.value6);throw new Error("Failed pattern match at Data.Map.Internal (line 540, column 5 - line 544, column 107): "+[u.constructor.name])}for(;!l;)u=r(t,n);return u}},l=function(e){var n,u=!1;function a(n){if(n instanceof T&&n.value3 instanceof F)return u=!0,{key:n.value1,value:n.value2};if(n instanceof T)e=n.value3;else{if(n instanceof b&&n.value6 instanceof F)return u=!0,{key:n.value4,value:n.value5};if(!(n instanceof b))throw new Error("Failed pattern match at Data.Map.Internal (line 531, column 33 - line 535, column 45): "+[n.constructor.name]);e=n.value6}}for(;!u;)n=a(e);return n},r=d.compare(e);return u=p.Nil.value,function(v){var i,o=u,c=!1;function f(u,i){if(i instanceof F)return c=!0,m.Nothing.value;if(i instanceof T){var f=r(n)(i.value1);if(i.value3 instanceof F&&f instanceof h.EQ)return c=!0,new m.Just(new L.Tuple(i.value2,a(u)(F.value)));if(f instanceof h.EQ){var s=l(i.value0);return c=!0,new m.Just(new L.Tuple(i.value2,t(new p.Cons(new g(s.key,s.value,i.value3),u))(i.value0)))}return f instanceof h.LT?(o=new p.Cons(new g(i.value1,i.value2,i.value3),u),void(v=i.value0)):(o=new p.Cons(new x(i.value0,i.value1,i.value2),u),void(v=i.value3))}if(i instanceof b){var w=i.value0 instanceof F&&i.value3 instanceof F&&i.value6 instanceof F,d=(f=r(n)(i.value4),r(n)(i.value1));return w&&d instanceof h.EQ?(c=!0,new m.Just(new L.Tuple(i.value2,Y(e)(u)(new T(F.value,i.value4,i.value5,F.value))))):w&&f instanceof h.EQ?(c=!0,new m.Just(new L.Tuple(i.value5,Y(e)(u)(new T(F.value,i.value1,i.value2,F.value))))):d instanceof h.EQ?(s=l(i.value0),c=!0,new m.Just(new L.Tuple(i.value2,t(new p.Cons(new C(s.key,s.value,i.value3,i.value4,i.value5,i.value6),u))(i.value0)))):f instanceof h.EQ?(s=l(i.value3),c=!0,new m.Just(new L.Tuple(i.value5,t(new p.Cons(new q(i.value0,i.value1,i.value2,s.key,s.value,i.value6),u))(i.value3)))):d instanceof h.LT?(o=new p.Cons(new C(i.value1,i.value2,i.value3,i.value4,i.value5,i.value6),u),void(v=i.value0)):d instanceof h.GT&&f instanceof h.LT?(o=new p.Cons(new q(i.value0,i.value1,i.value2,i.value4,i.value5,i.value6),u),void(v=i.value3)):(o=new p.Cons(new J(i.value0,i.value1,i.value2,i.value3,i.value4,i.value5),u),void(v=i.value6))}throw new Error("Failed pattern match at Data.Map.Internal (line 481, column 34 - line 504, column 80): "+[i.constructor.name])}for(;!c;)i=f(o,v);return i}}},_=new t.Foldable(function(e){return function(n){return function(u){return t.foldMap(p.foldableList)(e)(n)(A(u))}}},function(e){return function(n){return function(u){return t.foldl(p.foldableList)(e)(n)(A(u))}}},function(e){return function(n){return function(u){return t.foldr(p.foldableList)(e)(n)(A(u))}}}),ee=new M.Traversable(function(){return _},function(){return R},function(e){return M.traverse(ee)(e)(u.identity(u.categoryFn))},function(u){return function(a){return function(t){if(t instanceof F)return e.pure(u)(F.value);if(t instanceof T)return n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(v.map(u.Apply0().Functor0())(T.create)(M.traverse(ee)(u)(a)(t.value0)))(e.pure(u)(t.value1)))(a(t.value2)))(M.traverse(ee)(u)(a)(t.value3));if(t instanceof b)return n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(v.map(u.Apply0().Functor0())(b.create)(M.traverse(ee)(u)(a)(t.value0)))(e.pure(u)(t.value1)))(a(t.value2)))(M.traverse(ee)(u)(a)(t.value3)))(e.pure(u)(t.value4)))(a(t.value5)))(M.traverse(ee)(u)(a)(t.value6));throw new Error("Failed pattern match at Data.Map.Internal (line 119, column 1 - line 134, column 31): "+[a.constructor.name,t.constructor.name])}}}),ne=function(e){return function(n){return function(u){return function(a){return function(t){var l=function(){if(u instanceof m.Just)return function(n){return d.lessThan(e)(n)(u.value0)};if(u instanceof m.Nothing)return r.const(!1);throw new Error("Failed pattern match at Data.Map.Internal (line 319, column 7 - line 323, column 22): "+[u.constructor.name])}(),v=function(){if(a instanceof m.Just)return function(n){return d.greaterThan(e)(n)(a.value0)};if(a instanceof m.Nothing)return r.const(!1);throw new Error("Failed pattern match at Data.Map.Internal (line 326, column 7 - line 330, column 22): "+[a.constructor.name])}(),i=function(){if(u instanceof m.Just&&a instanceof m.Just)return function(n){return d.lessThanOrEq(e)(u.value0)(n)&&d.lessThanOrEq(e)(n)(a.value0)};if(u instanceof m.Just&&a instanceof m.Nothing)return function(n){return d.lessThanOrEq(e)(u.value0)(n)};if(u instanceof m.Nothing&&a instanceof m.Just)return function(n){return d.lessThanOrEq(e)(n)(a.value0)};if(u instanceof m.Nothing&&a instanceof m.Nothing)return r.const(!0);throw new Error("Failed pattern match at Data.Map.Internal (line 333, column 7 - line 341, column 21): "+[u.constructor.name,a.constructor.name])}();return function e(u){if(u instanceof F)return w.mempty(n);if(u instanceof T)return y.append(n.Semigroup0())(l(u.value1)?w.mempty(n):e(u.value0))(y.append(n.Semigroup0())(i(u.value1)?t(u.value1)(u.value2):w.mempty(n))(v(u.value1)?w.mempty(n):e(u.value3)));if(u instanceof b)return y.append(n.Semigroup0())(l(u.value1)?w.mempty(n):e(u.value0))(y.append(n.Semigroup0())(i(u.value1)?t(u.value1)(u.value2):w.mempty(n))(y.append(n.Semigroup0())(l(u.value4)||v(u.value1)?w.mempty(n):e(u.value3))(y.append(n.Semigroup0())(i(u.value4)?t(u.value4)(u.value5):w.mempty(n))(v(u.value4)?w.mempty(n):e(u.value6)))));throw new Error("Failed pattern match at Data.Map.Internal (line 359, column 10 - line 371, column 54): "+[u.constructor.name])}}}}}},ue=function(){var e;return e=m.Nothing.value,function(n){var u,a=e,t=!1;function l(e,u){if(u instanceof F)return t=!0,e;if(u instanceof T)return a=new m.Just({key:u.value1,value:u.value2}),void(n=u.value0);if(u instanceof b)return a=new m.Just({key:u.value1,value:u.value2}),void(n=u.value0);throw new Error("Failed pattern match at Data.Map.Internal (line 297, column 5 - line 297, column 22): "+[e.constructor.name,u.constructor.name])}for(;!t;)u=l(a,n);return u}}(),ae=function(e){return function(n){var u=d.compare(e);return function e(a){if(a instanceof F)return m.Nothing.value;if(a instanceof T){var t=u(n)(a.value1);if(t instanceof h.EQ)return ue(a.value3);if(t instanceof h.LT)return m.Just.create(m.fromMaybe({key:a.value1,value:a.value2})(e(a.value0)));if(t instanceof h.GT)return e(a.value3);throw new Error("Failed pattern match at Data.Map.Internal (line 276, column 33 - line 279, column 21): "+[t.constructor.name])}if(a instanceof b){var l=u(n)(a.value1);if(l instanceof h.EQ)return ue(new T(a.value3,a.value4,a.value5,a.value6));if(l instanceof h.LT)return m.Just.create(m.fromMaybe({key:a.value1,value:a.value2})(e(a.value0)));if(l instanceof h.GT)return e(new T(a.value3,a.value4,a.value5,a.value6));throw new Error("Failed pattern match at Data.Map.Internal (line 280, column 45 - line 283, column 37): "+[l.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 275, column 5 - line 275, column 22): "+[a.constructor.name])}}},te=function(){var e;return e=m.Nothing.value,function(n){var u,a=e,t=!1;function l(e,u){if(u instanceof F)return t=!0,e;if(u instanceof T)return a=new m.Just({key:u.value1,value:u.value2}),void(n=u.value3);if(u instanceof b)return a=new m.Just({key:u.value4,value:u.value5}),void(n=u.value6);throw new Error("Failed pattern match at Data.Map.Internal (line 289, column 5 - line 289, column 22): "+[e.constructor.name,u.constructor.name])}for(;!t;)u=l(a,n);return u}}(),le=function(e){return function(n){var u=d.compare(e);return function e(a){if(a instanceof F)return m.Nothing.value;if(a instanceof T){var t=u(n)(a.value1);if(t instanceof h.EQ)return te(a.value0);if(t instanceof h.GT)return m.Just.create(m.fromMaybe({key:a.value1,value:a.value2})(e(a.value3)));if(t instanceof h.LT)return e(a.value0);throw new Error("Failed pattern match at Data.Map.Internal (line 242, column 33 - line 245, column 20): "+[t.constructor.name])}if(a instanceof b){var l=u(n)(a.value4);if(l instanceof h.EQ)return te(new T(a.value0,a.value1,a.value2,a.value3));if(l instanceof h.GT)return m.Just.create(m.fromMaybe({key:a.value4,value:a.value5})(e(a.value6)));if(l instanceof h.LT)return e(new T(a.value0,a.value1,a.value2,a.value3));throw new Error("Failed pattern match at Data.Map.Internal (line 246, column 45 - line 249, column 36): "+[l.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 241, column 5 - line 241, column 22): "+[a.constructor.name])}}},re=function(e){return function(n){return new a.Eq(function(u){return function(t){return a.eq(a.eqArray(L.eqTuple(e)(n)))(Q(u))(Q(t))}})}},ve=function(e){return function(n){return new d.Ord(function(){return re(e.Eq0())(n.Eq0())},function(u){return function(a){return d.compare(d.ordArray(L.ordTuple(e)(n)))(Q(u))(Q(a))}})}},ie=function(e){return new a.Eq1(function(n){return a.eq(re(e)(n))})},oe=function(e){return new d.Ord1(function(){return ie(e.Eq0())},function(n){return d.compare(ve(e)(n))})},ce=F.value,fe=function(e){return function(n){return t.foldl(n)(function(n){return function(u){return Z(e)(u.value0)(u.value1)(n)}})(ce)}},se=function(e){return function(n){var u=fe(e)(s.foldableList),a=f.filter(L.uncurry(n)),t=j(s.unfoldableList);return function(e){return u(a(t(e)))}}},pe=function(e){return function(n){return se(e)(r.const(n))}},me=function(e){return function(n){return se(e)(function(e){return r.const(n(e))})}},we=function(e){return function(n){return l.foldlWithIndex(n)(function(n){return function(u){return function(a){return Z(e)(n)(a)(u)}}})(ce)}},de=function(e){return function(n){return function(u){return function(a){var t;return(t=j(p.unfoldableList)(u),function(u){return function(a){var l,r=t,v=u,i=!1;function o(u,t,l){if(u instanceof p.Nil)return i=!0,l;if(t instanceof p.Nil)return i=!0,l;if(u instanceof p.Cons&&t instanceof p.Cons){var o=d.compare(e)(u.value0.value0)(t.value0.value0);if(o instanceof h.LT)return r=u.value1,v=t,void(a=l);if(o instanceof h.EQ)return r=u.value1,v=t.value1,void(a=Z(e)(u.value0.value0)(n(u.value0.value1)(t.value0.value1))(l));if(o instanceof h.GT)return r=u,v=t.value1,void(a=l);throw new Error("Failed pattern match at Data.Map.Internal (line 641, column 5 - line 644, column 27): "+[o.constructor.name])}throw new Error("Failed pattern match at Data.Map.Internal (line 638, column 3 - line 638, column 17): "+[u.constructor.name,t.constructor.name,l.constructor.name])}for(;!i;)l=o(r,v,a);return l}})(j(p.unfoldableList)(a))(ce)}}}},he=function(e){return de(e)(r.const)},ye=function(e){return function(n){return function(u){return m.maybe(u)(L.snd)($(e)(n)(u))}}},Ee=function(e){return function(n){return function(u){return t.foldl(p.foldableList)(r.flip(ye(e)))(n)(H(u))}}},Me=function(n){return 1===c.length(c.nub(a.eqInt)(function n(u){if(u instanceof F)return e.pure(p.applicativeList)(0);if(u instanceof T)return v.map(p.functorList)(function(e){return e+1|0})(y.append(p.semigroupList)(n(u.value0))(n(u.value3)));if(u instanceof b)return v.map(p.functorList)(function(e){return e+1|0})(y.append(p.semigroupList)(n(u.value0))(y.append(p.semigroupList)(n(u.value3))(n(u.value6))));throw new Error("Failed pattern match at Data.Map.Internal (line 188, column 3 - line 188, column 36): "+[u.constructor.name])}(n)))},Ie=u.identity(u.categoryFn),Le=new l.FoldableWithIndex(function(){return _},function(e){return function(n){return function(u){return t.foldMap(p.foldableList)(e)(L.uncurry(n))(Ie(j(p.unfoldableList)(u)))}}},function(e){return function(n){return function(u){return t.foldl(p.foldableList)((a=r.flip(e),function(e){return L.uncurry(a(e))}))(n)(Ie(j(p.unfoldableList)(u)));var a}}},function(e){return function(n){return function(u){return t.foldr(p.foldableList)(L.uncurry(e))(n)(Ie(j(p.unfoldableList)(u)))}}}),De=function(e){return function(n){return l.foldrWithIndex(Le)(function(u){return function(a){return function(t){return m.maybe(t)(function(n){return Z(e)(u)(n)(t)})(n(u)(a))}}})(ce)}},Fe=function(e){var n=De(e);return function(e){return n(r.const(e))}},Te=new I.TraversableWithIndex(function(){return Le},function(){return X},function(){return ee},function(u){return function(a){return function(t){if(t instanceof F)return e.pure(u)(F.value);if(t instanceof T)return n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(v.map(u.Apply0().Functor0())(T.create)(I.traverseWithIndex(Te)(u)(a)(t.value0)))(e.pure(u)(t.value1)))(a(t.value1)(t.value2)))(I.traverseWithIndex(Te)(u)(a)(t.value3));if(t instanceof b)return n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(n.apply(u.Apply0())(v.map(u.Apply0().Functor0())(b.create)(I.traverseWithIndex(Te)(u)(a)(t.value0)))(e.pure(u)(t.value1)))(a(t.value1)(t.value2)))(I.traverseWithIndex(Te)(u)(a)(t.value3)))(e.pure(u)(t.value4)))(a(t.value4)(t.value5)))(I.traverseWithIndex(Te)(u)(a)(t.value6));throw new Error("Failed pattern match at Data.Map.Internal (line 136, column 1 - line 150, column 40): "+[a.constructor.name,t.constructor.name])}}}),be=function(e){return function(n){return function(u){return function(a){var t=n(K(e)(u)(a));if(t instanceof m.Nothing)return ye(e)(u)(a);if(t instanceof m.Just)return Z(e)(u)(t.value0)(a);throw new Error("Failed pattern match at Data.Map.Internal (line 549, column 15 - line 551, column 25): "+[t.constructor.name])}}}},ge=function(e){return function(n){return function(u){return t.foldl(n)(function(n){return function(a){return be(e)(function(e){return function(n){if(n instanceof m.Just)return m.Just.create(u(e)(n.value0));if(n instanceof m.Nothing)return new m.Just(e);throw new Error("Failed pattern match at Data.Map.Internal (line 566, column 3 - line 566, column 38): "+[e.constructor.name,n.constructor.name])}}(a.value1))(a.value0)(n)}})(ce)}}},xe=function(e){return function(n){return function(u){return function(a){return be(e)((t=m.maybe(a)(r.flip(n)(a)),function(e){return m.Just.create(t(e))}))(u);var t}}}},Ce=function(e){return function(n){return function(u){return function(a){return t.foldl(p.foldableList)(function(u){return function(a){return be(e)((t=m.maybe(a.value1)(n(a.value1)),function(e){return m.Just.create(t(e))}))(a.value0)(u);var t}})(a)(j(p.unfoldableList)(u))}}}},qe=function(e){return Ce(e)(r.const)},Je=function(e){return new y.Semigroup(qe(e))},Ne=function(e){return new w.Monoid(function(){return Je(e)},ce)},Ae=function(e){return function(n){return function(u){return ne(e)(Ne(e))(n)(u)(W)}}},ke=function(e){return function(n){return t.foldl(n)(qe(e))(ce)}},We=function(e){return function(n){return function(u){return function(a){return be(e)(m.maybe(m.Nothing.value)(n))(u)(a)}}}};module.exports={showTree:S,empty:ce,isEmpty:P,singleton:W,checkValid:Me,insert:Z,insertWith:xe,lookup:K,lookupLE:U,lookupLT:le,lookupGE:z,lookupGT:ae,findMin:ue,findMax:te,foldSubmap:ne,submap:Ae,fromFoldable:fe,fromFoldableWith:ge,fromFoldableWithIndex:we,toUnfoldable:j,toUnfoldableUnordered:G,delete:ye,pop:$,member:B,alter:be,update:We,keys:H,values:A,union:qe,unionWith:Ce,unions:ke,intersection:he,intersectionWith:de,difference:Ee,isSubmap:V,size:k,filterWithKey:se,filterKeys:me,filter:pe,mapMaybeWithKey:De,mapMaybe:Fe,eq1Map:ie,eqMap:re,ord1Map:oe,ordMap:ve,showMap:O,semigroupMap:Je,monoidMap:Ne,functorMap:R,functorWithIndexMap:X,foldableMap:_,foldableWithIndexMap:Le,traversableMap:ee,traversableWithIndexMap:Te};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.HeytingAlgebra/index.js":"paZe","../Data.List/index.js":"ezw6","../Data.List.Lazy/index.js":"sNBV","../Data.List.Lazy.Types/index.js":"EJF+","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z"}],"jHR9":[function(require,module,exports) {
+"use strict";var t=require("../Control.Alt/index.js"),e=require("../Control.Alternative/index.js"),n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),a=require("../Control.Bind/index.js"),i=require("../Control.Plus/index.js"),u=require("../Data.Array/index.js"),o=require("../Data.Either/index.js"),l=require("../Data.Foldable/index.js"),c=require("../Data.Function/index.js"),f=require("../Data.Functor/index.js"),s=require("../Data.List/index.js"),m=require("../Data.List.Types/index.js"),p=require("../Data.Map.Internal/index.js"),h=require("../Data.Maybe/index.js"),v=require("../Data.Monoid/index.js"),d=require("../Data.Unit/index.js"),w=function(t,e){this.compact=t,this.separate=e},g=function(e){return function(r){return function(a){return l.foldl(r)(function(r){return function(a){if(a instanceof o.Left)return{left:t.alt(e.Plus1().Alt0())(r.left)(n.pure(e.Applicative0())(a.value0)),right:r.right};if(a instanceof o.Right)return{right:t.alt(e.Plus1().Alt0())(r.right)(n.pure(e.Applicative0())(a.value0)),left:r.left};throw new Error("Failed pattern match at Data.Compactable (line 113, column 14 - line 115, column 54): "+[a.constructor.name])}})({left:i.empty(e.Plus1()),right:i.empty(e.Plus1())})}}},b=function(t){return t.separate},y=function(t){return p.toUnfoldable(m.unfoldableList)},D=new w(a.join(h.bindMaybe),function(t){if(t instanceof h.Nothing)return{left:h.Nothing.value,right:h.Nothing.value};if(t instanceof h.Just){if(t.value0 instanceof o.Left)return{left:new h.Just(t.value0.value0),right:h.Nothing.value};if(t.value0 instanceof o.Right)return{left:h.Nothing.value,right:new h.Just(t.value0.value0)};throw new Error("Failed pattern match at Data.Compactable (line 87, column 23 - line 89, column 48): "+[t.value0.constructor.name])}throw new Error("Failed pattern match at Data.Compactable (line 83, column 1 - line 89, column 48): "+[t.constructor.name])}),L=function(t){return new w((r=l.foldr(m.foldableList)(function(e){return function(n){return p.alter(t)(c.const(e.value1))(e.value0)(n)}})(p.empty),a=y(t),function(t){return r(a(t))}),(e=l.foldr(m.foldableList)(function(e){return function(n){if(e.value1 instanceof o.Left)return{left:p.insert(t)(e.value0)(e.value1.value0)(n.left),right:n.right};if(e.value1 instanceof o.Right)return{left:n.left,right:p.insert(t)(e.value0)(e.value1.value0)(n.right)};throw new Error("Failed pattern match at Data.Compactable (line 124, column 44 - line 126, column 63): "+[e.value1.constructor.name])}})({left:p.empty,right:p.empty}),n=y(t),function(t){return e(n(t))}));var e,n,r,a},j=new w(s.catMaybes,function(t){return g(m.alternativeList)(m.foldableList)(j)(t)}),x=function(t){return new w(function(e){if(e instanceof o.Left)return new o.Left(e.value0);if(e instanceof o.Right){if(e.value0 instanceof h.Just)return new o.Right(e.value0.value0);if(e.value0 instanceof h.Nothing)return new o.Left(v.mempty(t));throw new Error("Failed pattern match at Data.Compactable (line 93, column 23 - line 95, column 27): "+[e.value0.constructor.name])}throw new Error("Failed pattern match at Data.Compactable (line 91, column 1 - line 100, column 53): "+[e.constructor.name])},function(e){if(e instanceof o.Left)return{left:new o.Left(e.value0),right:new o.Left(e.value0)};if(e instanceof o.Right){if(e.value0 instanceof o.Left)return{left:new o.Right(e.value0.value0),right:new o.Left(v.mempty(t))};if(e.value0 instanceof o.Right)return{left:new o.Left(v.mempty(t)),right:new o.Right(e.value0.value0)};throw new Error("Failed pattern match at Data.Compactable (line 98, column 24 - line 100, column 53): "+[e.value0.constructor.name])}throw new Error("Failed pattern match at Data.Compactable (line 91, column 1 - line 100, column 53): "+[e.constructor.name])})},q=new w(u.catMaybes,function(t){return g(e.alternativeArray)(l.foldableArray)(q)(t)}),C=function(t){return function(e){var n=b(e),r=f.map(t)(o.note(d.unit));return function(t){return n(r(t)).right}}},E=function(t){return t.compact},A=function(t){return function(e){return function(n){return{left:E(e)(f.map(t)(function(t){return o.hush(function(t){if(t instanceof o.Left)return new o.Right(t.value0);if(t instanceof o.Right)return new o.Left(t.value0);throw new Error("Failed pattern match at Data.Compactable (line 79, column 20 - line 81, column 24): "+[t.constructor.name])}(t))})(n)),right:E(e)(f.map(t)(o.hush)(n))}}}},F=function(t){return function(e){return function(n){var r=E(e),i=a.bind(t)(n);return function(t){return r(i(t))}}}},R=function(t){return function(e){return function(n){var r=b(e),i=a.bind(t)(n);return function(t){return r(i(t))}}}},M=function(t){return function(e){return function(n){var a=E(e),i=r.apply(t)(n);return function(t){return a(i(t))}}}},N=function(t){return function(e){return function(n){var a=b(e),i=r.apply(t)(n);return function(t){return a(i(t))}}}};module.exports={Compactable:w,compact:E,separate:b,compactDefault:C,separateDefault:A,applyMaybe:M,applyEither:N,bindMaybe:F,bindEither:R,compactableMaybe:D,compactableEither:x,compactableArray:q,compactableList:j,compactableMap:L};
+},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Plus/index.js":"oMBg","../Data.Array/index.js":"4t4C","../Data.Either/index.js":"B2JL","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Unit/index.js":"NhVk"}],"6hfS":[function(require,module,exports) {
+"use strict";var t=require("../Control.Bind/index.js"),n=require("../Data.Array/index.js"),e=require("../Data.Compactable/index.js"),r=require("../Data.Either/index.js"),i=require("../Data.Foldable/index.js"),u=require("../Data.Function/index.js"),a=require("../Data.Functor/index.js"),o=require("../Data.HeytingAlgebra/index.js"),l=require("../Data.List/index.js"),f=require("../Data.List.Types/index.js"),c=require("../Data.Map.Internal/index.js"),s=require("../Data.Maybe/index.js"),h=require("../Data.Monoid/index.js"),m=require("../Data.Semigroup/index.js"),p=function(t,n,e,r,i,u){this.Compactable0=t,this.Functor1=n,this.filter=e,this.filterMap=r,this.partition=i,this.partitionMap=u},g=function(t){return function(n){var r=e.separate(t.Compactable0()),i=a.map(t.Functor1())(n);return function(t){return r(i(t))}}},b=function(t){return t.partitionMap},d=function(t){return t.partition},v=function(t){return function(n){return t(n)?new s.Just(n):s.Nothing.value}},w=new p(function(){return e.compactableList},function(){return f.functorList},l.filter,function(t){return l.mapMaybe(t)},function(t){return function(n){return i.foldr(f.foldableList)(function(n){return function(e){return t(n)?{no:e.no,yes:new f.Cons(n,e.yes)}:{no:new f.Cons(n,e.no),yes:e.yes}}})({no:f.Nil.value,yes:f.Nil.value})(n)}},function(t){return function(n){return i.foldr(f.foldableList)(function(n){return function(e){var i=t(n);if(i instanceof r.Left)return{left:new f.Cons(i.value0,e.left),right:e.right};if(i instanceof r.Right)return{left:e.left,right:new f.Cons(i.value0,e.right)};throw new Error("Failed pattern match at Data.Filterable (line 190, column 36 - line 192, column 83): "+[i.constructor.name])}})({left:f.Nil.value,right:f.Nil.value})(n)}}),y=new p(function(){return e.compactableArray},function(){return a.functorArray},n.filter,n.mapMaybe,n.partition,function(t){return i.foldl(i.foldableArray)(function(n){return function(e){var i=t(e);if(i instanceof r.Left)return{left:m.append(m.semigroupArray)(n.left)([i.value0]),right:n.right};if(i instanceof r.Right)return{right:m.append(m.semigroupArray)(n.right)([i.value0]),left:n.left};throw new Error("Failed pattern match at Data.Filterable (line 149, column 16 - line 151, column 50): "+[i.constructor.name])}})({left:[],right:[]})}),D=function(t){return function(n){var r=e.compact(t.Compactable0()),i=a.map(t.Functor1())(n);return function(t){return r(i(t))}}},F=function(t){return t.filterMap},L=function(t){return function(n){return function(e){return{yes:F(t)(v(n))(e),no:F(t)(v(o.not(o.heytingAlgebraFunction(o.heytingAlgebraBoolean))(n)))(e)}}}},M=function(t){return function(n){return function(e){return d(t)(n)(e).yes}}},x=function(t){var n=F(t);return function(t){return n(v(t))}},j=function(t){return t.filter},q=function(t){return function(n){return function(e){return{yes:j(t)(n)(e),no:j(t)(o.not(o.heytingAlgebraFunction(o.heytingAlgebraBoolean))(n))(e)}}}},E=function(t){return function(n){return t(n)?new r.Right(n):new r.Left(n)}},A=function(t){return function(n){return function(e){return b(t)(E(n))(e).right}}},N=function(t){return function(n){return function(e){var r=b(t)(E(n))(e);return{no:r.left,yes:r.right}}}},R=function t(n){return new p(function(){return e.compactableEither(n)},function(){return r.functorEither},function(e){return x(t(n))(e)},function(t){return function(e){if(e instanceof r.Left)return new r.Left(e.value0);if(e instanceof r.Right){var i=t(e.value0);if(i instanceof s.Nothing)return new r.Left(h.mempty(n));if(i instanceof s.Just)return new r.Right(i.value0);throw new Error("Failed pattern match at Data.Filterable (line 180, column 27 - line 182, column 22): "+[i.constructor.name])}throw new Error("Failed pattern match at Data.Filterable (line 171, column 1 - line 184, column 29): "+[t.constructor.name,e.constructor.name])}},function(e){return N(t(n))(e)},function(t){return function(e){if(e instanceof r.Left)return{left:new r.Left(e.value0),right:new r.Left(e.value0)};if(e instanceof r.Right){var i=t(e.value0);if(i instanceof r.Left)return{left:new r.Right(i.value0),right:new r.Left(h.mempty(n))};if(i instanceof r.Right)return{left:new r.Left(h.mempty(n)),right:new r.Right(i.value0)};throw new Error("Failed pattern match at Data.Filterable (line 173, column 30 - line 175, column 53): "+[i.constructor.name])}throw new Error("Failed pattern match at Data.Filterable (line 171, column 1 - line 184, column 29): "+[t.constructor.name,e.constructor.name])}})},C=function t(n){return new p(function(){return e.compactableMap(n)},function(){return c.functorMap},function(e){return x(t(n))(e)},function(t){return function(e){var r=c.toUnfoldable(f.unfoldableList);return i.foldr(f.foldableList)(function(e){return function(r){return c.alter(n)(u.const(t(e.value1)))(e.value0)(r)}})(c.empty)(r(e))}},function(e){return N(t(n))(e)},function(t){return function(e){var u=c.toUnfoldable(f.unfoldableList);return i.foldr(f.foldableList)(function(e){return function(i){var u=t(e.value1);if(u instanceof r.Left)return{left:c.insert(n)(e.value0)(u.value0)(i.left),right:i.right};if(u instanceof r.Right)return{left:i.left,right:c.insert(n)(e.value0)(u.value0)(i.right)};throw new Error("Failed pattern match at Data.Filterable (line 215, column 44 - line 217, column 57): "+[u.constructor.name])}})({left:c.empty,right:c.empty})(u(e))}})},B=new p(function(){return e.compactableMaybe},function(){return s.functorMaybe},function(t){return x(B)(t)},t.bindFlipped(s.bindMaybe),function(t){return N(B)(t)},function(t){return function(n){if(n instanceof s.Nothing)return{left:s.Nothing.value,right:s.Nothing.value};if(n instanceof s.Just){var e=t(n.value0);if(e instanceof r.Left)return{left:new s.Just(e.value0),right:s.Nothing.value};if(e instanceof r.Right)return{left:s.Nothing.value,right:new s.Just(e.value0)};throw new Error("Failed pattern match at Data.Filterable (line 161, column 29 - line 163, column 48): "+[e.constructor.name])}throw new Error("Failed pattern match at Data.Filterable (line 159, column 1 - line 169, column 29): "+[t.constructor.name,n.constructor.name])}}),J=function(t){return F(t)(u.const(s.Nothing.value))};module.exports={Filterable:p,partitionMap:b,partition:d,filterMap:F,filter:j,eitherBool:E,partitionDefault:N,partitionDefaultFilter:q,partitionDefaultFilterMap:L,partitionMapDefault:g,maybeBool:v,filterDefault:x,filterDefaultPartition:M,filterDefaultPartitionMap:A,filterMapDefault:D,cleared:J,filterableArray:y,filterableMaybe:B,filterableEither:R,filterableList:w,filterableMap:C};
+},{"../Control.Bind/index.js":"7VcT","../Data.Array/index.js":"4t4C","../Data.Compactable/index.js":"jHR9","../Data.Either/index.js":"B2JL","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Semigroup/index.js":"EsAJ"}],"AuzG":[function(require,module,exports) {
+"use strict";var n=require("../Data.Maybe/index.js"),t=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),e=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),r=function(){function n(n,t){this.value0=n,this.value1=t}return n.create=function(t){return function(e){return new n(t,e)}},n}(),u=function(){function n(){}return n.value=new n,n}(),o=function(n){return n},i=function(n){return n},c=function(n,t){this.from=n,this.to=t},a=function(n){return n.to},f=new c(function(r){if(r instanceof n.Nothing)return new t(u.value);if(r instanceof n.Just)return new e(r.value0);throw new Error("Failed pattern match at Data.Generic.Rep (line 40, column 1 - line 47, column 49): "+[r.constructor.name])},function(r){if(r instanceof t)return n.Nothing.value;if(r instanceof e)return new n.Just(r.value0);throw new Error("Failed pattern match at Data.Generic.Rep (line 40, column 1 - line 47, column 49): "+[r.constructor.name])}),l=function(n){return n.from};module.exports={Generic:c,to:a,from:l,NoArguments:u,Inl:t,Inr:e,Product:r,Constructor:o,Argument:i,genericMaybe:f};
+},{"../Data.Maybe/index.js":"5mN7"}],"lpst":[function(require,module,exports) {
+"use strict";var n=require("../Data.Foldable/index.js"),e=require("../Data.Generic.Rep/index.js"),r=require("../Data.Monoid/index.js"),t=require("../Data.Semigroup/index.js"),o=require("../Data.Show/index.js"),i=require("../Data.Symbol/index.js"),u=function(n){this.genericShowArgs=n},c=function(n){this["genericShow'"]=n},a=new u(function(n){return[]}),s=function(n){return new u(function(e){return[o.show(n)(e)]})},f=function(n){return n.genericShowArgs},g=function(n){return function(e){return new u(function(r){return t.append(t.semigroupArray)(f(n)(r.value0))(f(e)(r.value1))})}},w=function(e){return function(o){return new c(function(u){var c=i.reflectSymbol(o)(i.SProxy.value),a=f(e)(u);return 0===a.length?c:"("+n.intercalate(n.foldableArray)(r.monoidString)(" ")(t.append(t.semigroupArray)([c])(a))+")"})}},h=function(n){return n["genericShow'"]},S=new c(function(n){return h(S)(n)}),l=function(n){return function(r){return new c(function(t){if(t instanceof e.Inl)return h(n)(t.value0);if(t instanceof e.Inr)return h(r)(t.value0);throw new Error("Failed pattern match at Data.Generic.Rep.Show (line 26, column 1 - line 28, column 40): "+[t.constructor.name])})}},d=function(n){return function(r){return function(t){return h(r)(e.from(n)(t))}}};module.exports={GenericShow:c,"genericShow'":h,genericShow:d,GenericShowArgs:u,genericShowArgs:f,genericShowNoConstructors:S,genericShowArgsNoArguments:a,genericShowSum:l,genericShowArgsProduct:g,genericShowConstructor:w,genericShowArgsArgument:s};
+},{"../Data.Foldable/index.js":"eVDl","../Data.Generic.Rep/index.js":"AuzG","../Data.Monoid/index.js":"TiEB","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Symbol/index.js":"4oJQ"}],"89+t":[function(require,module,exports) {
+"use strict";var n=require("../Data.Functor/index.js"),r=require("../Data.Void/index.js"),t=function(n){this.cmap=n},u=function(n){return n.cmap},e=function(n){return function(r){return function(t){return u(n)(t)(r)}}},i=function(t){return function(e){return function(i){return n.map(e)(r.absurd)(u(t)(r.absurd)(i))}}},c=function(n){return function(r){return function(r){return u(n)(r)}}};module.exports={cmap:u,Contravariant:t,cmapFlipped:e,coerce:i,imapC:c};
+},{"../Data.Functor/index.js":"+0AE","../Data.Void/index.js":"bncE"}],"OmNG":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Semigroupoid/index.js"),e=require("../Data.Bifoldable/index.js"),u=require("../Data.Bifunctor/index.js"),i=require("../Data.Bitraversable/index.js"),o=require("../Data.Eq/index.js"),c=require("../Data.Foldable/index.js"),f=require("../Data.FoldableWithIndex/index.js"),a=require("../Data.Functor/index.js"),s=require("../Data.Functor.Contravariant/index.js"),d=require("../Data.Functor.Invariant/index.js"),l=require("../Data.FunctorWithIndex/index.js"),p=require("../Data.Monoid/index.js"),C=require("../Data.Newtype/index.js"),x=require("../Data.Ord/index.js"),q=require("../Data.Semigroup/index.js"),b=require("../Data.Show/index.js"),w=require("../Data.Traversable/index.js"),m=require("../Data.TraversableWithIndex/index.js"),j=function(n){return n},v=function(n){return new b.Show(function(r){return"(Const "+b.show(n)(r)+")"})},D=function(n){return n},h=new t.Semigroupoid(function(n){return function(n){return n}}),g=function(n){return n},F=function(n){return n},y=function(n){return n},I=new C.Newtype(function(n){return n},j),W=function(n){return n},A=function(n){return n},B=new a.Functor(function(n){return function(n){return n}}),S=new l.FunctorWithIndex(function(){return B},function(n){return function(n){return n}}),T=new d.Invariant(d.imapF(B)),E=new c.Foldable(function(n){return function(r){return function(r){return p.mempty(n)}}},function(n){return function(n){return function(r){return n}}},function(n){return function(n){return function(r){return n}}}),N=new f.FoldableWithIndex(function(){return E},function(n){return function(r){return function(r){return p.mempty(n)}}},function(n){return function(n){return function(r){return n}}},function(n){return function(n){return function(r){return n}}}),O=new w.Traversable(function(){return E},function(){return B},function(r){return function(t){return n.pure(r)(t)}},function(r){return function(t){return function(t){return n.pure(r)(t)}}}),R=new m.TraversableWithIndex(function(){return N},function(){return S},function(){return O},function(r){return function(t){return function(t){return n.pure(r)(t)}}}),M=function(n){return n},k=function(n){return n},z=function(n){return new o.Eq1(function(r){return o.eq(k(n))})},G=function(n){return new x.Ord1(function(){return z(n.Eq0())},function(r){return x.compare(y(n))})},H=new s.Contravariant(function(n){return function(n){return n}}),J=function(n){return n},K=function(n){return n},L=function(n){return n},P=new u.Bifunctor(function(n){return function(r){return function(r){return n(r)}}}),Q=new e.Bifoldable(function(n){return function(n){return function(r){return function(r){return n(r)}}}},function(n){return function(r){return function(r){return function(t){return n(r)(t)}}}},function(n){return function(r){return function(r){return function(t){return n(t)(r)}}}}),U=new i.Bitraversable(function(){return Q},function(){return P},function(n){return function(r){return a.map(n.Apply0().Functor0())(j)(r)}},function(n){return function(r){return function(t){return function(t){return a.map(n.Apply0().Functor0())(j)(r(t))}}}}),V=function(n){return new r.Apply(function(){return B},function(r){return function(t){return q.append(n)(r)(t)}})},X=function(r){return new n.Applicative(function(){return V(r.Semigroup0())},function(n){return p.mempty(r)})};module.exports={Const:j,newtypeConst:I,eqConst:k,eq1Const:z,ordConst:y,ord1Const:G,boundedConst:K,showConst:v,semigroupoidConst:h,semigroupConst:g,monoidConst:W,semiringConst:D,ringConst:F,euclideanRingConst:M,commutativeRingConst:J,heytingAlgebraConst:A,booleanAlgebraConst:L,functorConst:B,bifunctorConst:P,functorWithIndexConst:S,invariantConst:T,contravariantConst:H,applyConst:V,applicativeConst:X,foldableConst:E,foldableWithIndexConst:N,bifoldableConst:Q,traversableConst:O,traversableWithIndexConst:R,bitraversableConst:U};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Semigroupoid/index.js":"/riR","../Data.Bifoldable/index.js":"wjQo","../Data.Bifunctor/index.js":"e2Wc","../Data.Bitraversable/index.js":"8nb9","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Functor/index.js":"+0AE","../Data.Functor.Contravariant/index.js":"89+t","../Data.Functor.Invariant/index.js":"AXkC","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF"}],"0DaD":[function(require,module,exports) {
+"use strict";var n=require("../Control.Category/index.js"),r=require("../Data.Newtype/index.js"),t=function(n){this.dimap=n},u=new t(function(n){return function(r){return function(t){return function(u){return r(t(n(u)))}}}}),e=function(n){return n.dimap},i=function(r){return function(t){return e(r)(t)(n.identity(n.categoryFn))}},o=function(r){return function(t){return e(r)(n.identity(n.categoryFn))(t)}},c=function(n){return function(t){return e(n)(r.wrap(t))(r.unwrap(t))}},f=function(n){return function(t){return function(u){return e(n)(r.unwrap(t))(r.wrap(t))}}},a=function(r){return function(t){return function(u){return o(t)(u)(n.identity(r))}}};module.exports={dimap:e,Profunctor:t,lcmap:i,rmap:o,arr:a,unwrapIso:c,wrapIso:f,profunctorFn:u};
+},{"../Control.Category/index.js":"IAi2","../Data.Newtype/index.js":"lz8k"}],"nkqb":[function(require,module,exports) {
+"use strict";var t=require("../Control.Category/index.js"),n=require("../Control.Semigroupoid/index.js"),r=require("../Data.Either/index.js"),e=require("../Data.Functor/index.js"),i=require("../Data.Profunctor/index.js"),o=function(t,n,r){this.Profunctor0=t,this.left=n,this.right=r},u=function(t){return t.right},c=function(t){return t.left},f=function(t){return function(r){return function(e){return function(i){return n.composeFlipped(t.Semigroupoid0())(c(r)(e))(u(r)(i))}}}},a=function(e){return function(o){return function(u){return function(c){var a=i.dimap(o.Profunctor0())(r.either(t.identity(t.categoryFn))(t.identity(t.categoryFn)))(t.identity(t.categoryFn))(t.identity(e));return n.composeFlipped(e.Semigroupoid0())(f(e)(o)(u)(c))(a)}}}},s=new o(function(){return i.profunctorFn},function(t){return function(n){if(n instanceof r.Left)return r.Left.create(t(n.value0));if(n instanceof r.Right)return new r.Right(n.value0);throw new Error("Failed pattern match at Data.Profunctor.Choice (line 32, column 1 - line 35, column 16): "+[t.constructor.name,n.constructor.name])}},e.map(r.functorEither));module.exports={left:c,right:u,Choice:o,splitChoice:f,fanin:a,choiceFn:s};
+},{"../Control.Category/index.js":"IAi2","../Control.Semigroupoid/index.js":"/riR","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Profunctor/index.js":"0DaD"}],"af4y":[function(require,module,exports) {
+"use strict";var o=require("../Control.Semigroupoid/index.js"),e=require("../Data.Profunctor/index.js"),r=function(o,e){this.Profunctor0=o,this.closed=e},n=new r(function(){return e.profunctorFn},o.compose(o.semigroupoidFn)),t=function(o){return o.closed};module.exports={closed:t,Closed:r,closedFunction:n};
+},{"../Control.Semigroupoid/index.js":"/riR","../Data.Profunctor/index.js":"0DaD"}],"w9p6":[function(require,module,exports) {
+"use strict";var n=require("../Control.Category/index.js"),r=require("../Control.Semigroupoid/index.js"),t=require("../Data.Functor/index.js"),e=require("../Data.Profunctor/index.js"),u=require("../Data.Tuple/index.js"),o=function(n,r,t){this.Profunctor0=n,this.first=r,this.second=t},i=new o(function(){return e.profunctorFn},function(n){return function(r){return new u.Tuple(n(r.value0),r.value1)}},t.map(u.functorTuple)),c=function(n){return n.second},f=function(n){return n.first},s=function(n){return function(t){return function(e){return function(u){return r.composeFlipped(n.Semigroupoid0())(f(t)(e))(c(t)(u))}}}},p=function(t){return function(o){return function(i){return function(c){var f=e.dimap(o.Profunctor0())(n.identity(n.categoryFn))(function(n){return new u.Tuple(n,n)})(n.identity(t));return r.composeFlipped(t.Semigroupoid0())(f)(s(t)(o)(i)(c))}}}};module.exports={first:f,second:c,Strong:o,splitStrong:s,fanout:p,strongFn:i};
+},{"../Control.Category/index.js":"IAi2","../Control.Semigroupoid/index.js":"/riR","../Data.Functor/index.js":"+0AE","../Data.Profunctor/index.js":"0DaD","../Data.Tuple/index.js":"II/O"}],"tj5E":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),r=require("../Control.Alternative/index.js"),t=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),i=require("../Control.Category/index.js"),o=require("../Control.Monad/index.js"),c=require("../Control.MonadPlus/index.js"),a=require("../Control.MonadZero/index.js"),f=require("../Control.Plus/index.js"),l=require("../Control.Semigroupoid/index.js"),p=require("../Data.Distributive/index.js"),d=require("../Data.Either/index.js"),s=require("../Data.Functor/index.js"),v=require("../Data.Functor.Invariant/index.js"),S=require("../Data.Newtype/index.js"),w=require("../Data.Profunctor/index.js"),x=require("../Data.Profunctor.Choice/index.js"),j=require("../Data.Profunctor.Closed/index.js"),q=require("../Data.Profunctor.Strong/index.js"),A=require("../Data.Tuple/index.js"),C=function(n){return n},m=function(n){return new l.Semigroupoid(function(r){return function(t){return function(e){return u.bind(n)(t(e))(r)}}})},y=function(n){return new w.Profunctor(function(r){return function(t){return function(e){var u=s.map(n)(t);return function(n){return u(e(r(n)))}}}})},D=function(n){return new q.Strong(function(){return y(n)},function(r){return function(t){return s.map(n)(function(n){return new A.Tuple(n,t.value1)})(r(t.value0))}},function(r){return function(t){return s.map(n)(A.Tuple.create(t.value0))(r(t.value1))}})},g=new S.Newtype(function(n){return n},C),F=function(n){return new v.Invariant(function(r){return function(t){return function(e){var u=v.imap(n)(r)(t);return function(n){return u(e(n))}}}})},P=function(n){return function(r){return function(t){return n(r(t))}}},h=function(n){return new s.Functor(function(r){return function(t){var e=s.map(n)(r);return function(n){return e(t(n))}}})},b=function n(r){return new p.Distributive(function(){return h(r.Functor0())},function(t){return function(e){var u=p.distribute(n(r))(t),i=s.map(t)(e);return function(n){return u(i(n))}}},function(n){return function(t){return function(e){return p.collect(r)(n)(function(n){return n(e)})(t)}}})},M=function(n){return new j.Closed(function(){return y(n.Functor0())},function(r){return function(t){return p.distribute(n)(s.functorFn)(function(n){return r(t(n))})}})},B=function(n){return new x.Choice(function(){return y(n.Apply0().Functor0())},function(r){return C(d.either((u=s.map(n.Apply0().Functor0())(d.Left.create),function(n){return u(r(n))}))((e=t.pure(n),function(n){return e(d.Right.create(n))})));var e,u},function(r){return C(d.either((u=t.pure(n),function(n){return u(d.Left.create(n))}))((e=s.map(n.Apply0().Functor0())(d.Right.create),function(n){return e(r(n))})));var e,u})},Z=function(n){return new i.Category(function(){return m(n.Bind1())},t.pure(n.Applicative0()))},T=function(n){return new e.Apply(function(){return h(n.Functor0())},function(r){return function(t){return function(u){return e.apply(n)(r(u))(t(u))}}})},I=function(n){return new u.Bind(function(){return T(n.Apply0())},function(r){return function(t){return function(e){return u.bind(n)(r(e))(function(n){return t(n)(e)})}}})},L=function(n){return new t.Applicative(function(){return T(n.Apply0())},function(r){return function(e){return t.pure(n)(r)}})},N=function(n){return new o.Monad(function(){return L(n.Applicative0())},function(){return I(n.Bind1())})},R=function(r){return new n.Alt(function(){return h(r.Functor0())},function(t){return function(e){return function(u){return n.alt(r)(t(u))(e(u))}}})},E=function(n){return new f.Plus(function(){return R(n.Alt0())},function(r){return f.empty(n)})},k=function(n){return new r.Alternative(function(){return L(n.Applicative0())},function(){return E(n.Plus1())})},z=function(n){return new a.MonadZero(function(){return k(n.Alternative1())},function(){return N(n.Monad0())})},G=function(n){return new c.MonadPlus(function(){return z(n.MonadZero0())})};module.exports={Star:C,hoistStar:P,newtypeStar:g,semigroupoidStar:m,categoryStar:Z,functorStar:h,invariantStar:F,applyStar:T,applicativeStar:L,bindStar:I,monadStar:N,altStar:R,plusStar:E,alternativeStar:k,monadZeroStar:z,monadPlusStar:G,distributiveStar:b,profunctorStar:y,strongStar:D,choiceStar:B,closedStar:M};
+},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad/index.js":"U/Ix","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Control.Semigroupoid/index.js":"/riR","../Data.Distributive/index.js":"8PTu","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Functor.Invariant/index.js":"AXkC","../Data.Newtype/index.js":"lz8k","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Choice/index.js":"nkqb","../Data.Profunctor.Closed/index.js":"af4y","../Data.Profunctor.Strong/index.js":"w9p6","../Data.Tuple/index.js":"II/O"}],"i7fd":[function(require,module,exports) {
+"use strict";var n=require("../Data.Functor/index.js"),t=require("../Data.Identity/index.js"),r=require("../Data.Newtype/index.js"),e=require("../Data.Profunctor.Choice/index.js"),i=require("../Data.Profunctor.Star/index.js"),u=require("../Data.Profunctor.Strong/index.js"),o=function(n,t,r){this.Choice1=n,this.Strong0=t,this.wander=r},a=function(n){return new o(function(){return i.choiceStar(n)},function(){return i.strongStar(n.Apply0().Functor0())},function(t){return function(r){return t(n)(r)}})},c=new o(function(){return e.choiceFn},function(){return u.strongFn},function(e){return r.alaF(n.functorFn)(n.functorFn)(t.newtypeIdentity)(t.newtypeIdentity)(t.Identity)(e(t.applicativeIdentity))}),d=function(n){return n.wander};module.exports={wander:d,Wander:o,wanderFunction:c,wanderStar:a};
+},{"../Data.Functor/index.js":"+0AE","../Data.Identity/index.js":"2OKT","../Data.Newtype/index.js":"lz8k","../Data.Profunctor.Choice/index.js":"nkqb","../Data.Profunctor.Star/index.js":"tj5E","../Data.Profunctor.Strong/index.js":"w9p6"}],"FnLc":[function(require,module,exports) {
+"use strict";var t=function(t,n,u){this.Profunctor0=t,this.unleft=n,this.unright=u},n=function(t){return t.unright},u=function(t){return t.unleft};module.exports={unleft:u,unright:n,Cochoice:t};
+},{}],"mj9z":[function(require,module,exports) {
+"use strict";var n=require("../Data.Const/index.js"),r=require("../Data.Either/index.js"),e=require("../Data.Functor/index.js"),t=require("../Data.Lens.Internal.Wander/index.js"),o=require("../Data.Monoid/index.js"),u=require("../Data.Newtype/index.js"),i=require("../Data.Profunctor/index.js"),c=require("../Data.Profunctor.Choice/index.js"),f=require("../Data.Profunctor.Cochoice/index.js"),a=require("../Data.Profunctor.Strong/index.js"),s=require("../Data.Semigroup/index.js"),d=require("../Data.Tuple/index.js"),F=function(n){return n},g=function(n){return s.semigroupFn(n)},p=new i.Profunctor(function(n){return function(r){return function(r){return function(e){return r(n(e))}}}}),x=new a.Strong(function(){return p},function(n){return function(r){return n(d.fst(r))}},function(n){return function(r){return n(d.snd(r))}}),j=new u.Newtype(function(n){return n},F),m=function(n){return o.monoidFn(n)},q=new f.Cochoice(function(){return p},function(n){return function(e){return n(r.Left.create(e))}},function(n){return function(e){return n(r.Right.create(e))}}),w=function(n){return new c.Choice(function(){return p},function(e){return r.either(e)(o.mempty(o.monoidFn(n)))},function(e){return r.either(o.mempty(o.monoidFn(n)))(e)})},D=function(r){return new t.Wander(function(){return w(r)},function(){return x},function(t){return function(o){return u.alaF(e.functorFn)(e.functorFn)(n.newtypeConst)(n.newtypeConst)(n.Const)(t(n.applicativeConst(r)))(o)}})};module.exports={Forget:F,newtypeForget:j,semigroupForget:g,monoidForget:m,profunctorForget:p,choiceForget:w,strongForget:x,cochoiceForget:q,wanderForget:D};
+},{"../Data.Const/index.js":"OmNG","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Lens.Internal.Wander/index.js":"i7fd","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Choice/index.js":"nkqb","../Data.Profunctor.Cochoice/index.js":"FnLc","../Data.Profunctor.Strong/index.js":"w9p6","../Data.Semigroup/index.js":"EsAJ","../Data.Tuple/index.js":"II/O"}],"V4/H":[function(require,module,exports) {
+"use strict";var e=require("../Data.Either/index.js"),n=require("../Data.Lens.Internal.Wander/index.js"),r=require("../Data.Newtype/index.js"),t=require("../Data.Profunctor/index.js"),u=require("../Data.Profunctor.Choice/index.js"),o=require("../Data.Profunctor.Strong/index.js"),c=require("../Data.Tuple/index.js"),i=function(e){return e},a=function(e){return new t.Profunctor(function(n){return function(r){return function(u){return t.dimap(e)(o.second(o.strongFn)(n))(r)(u)}}})},f=function(e){return new o.Strong(function(){return a(e.Profunctor0())},function(n){return i(t.lcmap(e.Profunctor0())(function(e){return new c.Tuple(new c.Tuple(e.value0,e.value1.value0),e.value1.value1)})(o.first(e)(n)))},function(n){return i(t.lcmap(e.Profunctor0())(function(e){return new c.Tuple(e.value1.value0,new c.Tuple(e.value0,e.value1.value1))})(o.second(e)(n)))})},l=new r.Newtype(function(e){return e},i),d=function(n){return new u.Choice(function(){return a(n.Profunctor0())},function(r){return i(t.lcmap(n.Profunctor0())(function(n){return e.either((r=c.Tuple.create(n.value0),function(n){return e.Left.create(r(n))}))(e.Right.create)(n.value1);var r})(u.left(n)(r)))},function(r){return i(t.lcmap(n.Profunctor0())(function(n){return e.either(e.Left.create)((r=c.Tuple.create(n.value0),function(n){return e.Right.create(r(n))}))(n.value1);var r})(u.right(n)(r)))})},v=function(e){return new n.Wander(function(){return d(e.Choice1())},function(){return f(e.Strong0())},function(r){return function(t){return i(n.wander(e)(function(e){return function(n){return function(t){return r(e)((u=c.Tuple.create(t.value0),function(e){return n(u(e))}))(t.value1);var u}}})(t))}})};module.exports={Indexed:i,newtypeIndexed:l,profunctorIndexed:a,strongIndexed:f,choiceIndexed:d,wanderIndexed:v};
+},{"../Data.Either/index.js":"B2JL","../Data.Lens.Internal.Wander/index.js":"i7fd","../Data.Newtype/index.js":"lz8k","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Choice/index.js":"nkqb","../Data.Profunctor.Strong/index.js":"w9p6","../Data.Tuple/index.js":"II/O"}],"OPOX":[function(require,module,exports) {
+"use strict";var n=require("../Control.Category/index.js"),e=require("../Control.Monad.State.Class/index.js"),t=require("../Data.Lens.Internal.Forget/index.js"),r=require("../Data.Lens.Internal.Indexed/index.js"),u=require("../Data.Newtype/index.js"),o=require("../Data.Profunctor.Strong/index.js"),i=function(e){return u.unwrap(t.newtypeForget)(e(n.identity(n.categoryFn)))},a=function(n){return function(e){return i(e)(n)}},c=function(n){return function(t){return e.gets(n)(function(n){return a(n)(t)})}},s=function(n){return function(e){var r=u.unwrap(t.newtypeForget)(e);return function(e){return r(n(e))}}},f=function(e){return function(t){return s(o.fanout(n.categoryFn)(o.strongFn)(i(e))(i(t)))}},d=function(e){return u.unwrap(t.newtypeForget)(e(r.Indexed(n.identity(n.categoryFn))))},g=function(n){return function(t){return e.gets(n)(d(t))}},w=function(n){return s(i(n))};module.exports={viewOn:a,view:i,to:s,takeBoth:f,use:c,iview:d,iuse:g,cloneGetter:w};
+},{"../Control.Category/index.js":"IAi2","../Control.Monad.State.Class/index.js":"u1pL","../Data.Lens.Internal.Forget/index.js":"mj9z","../Data.Lens.Internal.Indexed/index.js":"V4/H","../Data.Newtype/index.js":"lz8k","../Data.Profunctor.Strong/index.js":"w9p6"}],"eUa0":[function(require,module,exports) {
+"use strict";var n=require("../Data.Functor/index.js"),r=require("../Data.Profunctor/index.js"),u=function(){function n(n,r){this.value0=n,this.value1=r}return n.create=function(r){return function(u){return new n(r,u)}},n}(),t=new r.Profunctor(function(n){return function(r){return function(t){return new u(function(r){return t.value0(n(r))},function(n){return r(t.value1(n))})}}}),e=new n.Functor(function(n){return function(r){return new u(r.value0,function(u){return n(r.value1(u))})}});module.exports={Exchange:u,functorExchange:e,profunctorExchange:t};
+},{"../Data.Functor/index.js":"+0AE","../Data.Profunctor/index.js":"0DaD"}],"NfU6":[function(require,module,exports) {
+"use strict";var n=function(n,t,u){this.Profunctor0=n,this.unfirst=t,this.unsecond=u},t=function(n){return n.unsecond},u=function(n){return n.unfirst};module.exports={unfirst:u,unsecond:t,Costrong:n};
+},{}],"IZDD":[function(require,module,exports) {
+"use strict";var n=require("../Data.Newtype/index.js"),r=require("../Data.Profunctor/index.js"),t=require("../Data.Profunctor.Choice/index.js"),u=require("../Data.Profunctor.Cochoice/index.js"),e=require("../Data.Profunctor.Costrong/index.js"),o=require("../Data.Profunctor.Strong/index.js"),c=function(n){return n},i=function(n){return new r.Profunctor(function(t){return function(u){return function(e){var o=r.dimap(n)(u)(t);return function(n){return e(o(n))}}}})},f=function(n){return new e.Costrong(function(){return i(n.Profunctor0())},function(r){var t=o.first(n);return function(n){return r(t(n))}},function(r){var t=o.second(n);return function(n){return r(t(n))}})},a=new n.Newtype(function(n){return n},c),s=function(n){return new o.Strong(function(){return i(n.Profunctor0())},function(r){var t=e.unfirst(n);return function(n){return r(t(n))}},function(r){var t=e.unsecond(n);return function(n){return r(t(n))}})},d=function(n){return new t.Choice(function(){return i(n.Profunctor0())},function(r){var t=u.unleft(n);return function(n){return r(t(n))}},function(r){var t=u.unright(n);return function(n){return r(t(n))}})},v=function(n){return new u.Cochoice(function(){return i(n.Profunctor0())},function(r){var u=t.left(n);return function(n){return r(u(n))}},function(r){var u=t.right(n);return function(n){return r(u(n))}})};module.exports={Re:c,newtypeRe:a,profunctorRe:i,choiceRe:v,cochoiceRe:d,strongRe:f,costrongRe:s};
+},{"../Data.Newtype/index.js":"lz8k","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Choice/index.js":"nkqb","../Data.Profunctor.Cochoice/index.js":"FnLc","../Data.Profunctor.Costrong/index.js":"NfU6","../Data.Profunctor.Strong/index.js":"w9p6"}],"fFCp":[function(require,module,exports) {
+"use strict";var n=require("../Control.Category/index.js"),r=require("../Data.Boolean/index.js"),t=require("../Data.Eq/index.js"),u=require("../Data.Function/index.js"),e=require("../Data.Functor/index.js"),i=require("../Data.Lens.Internal.Exchange/index.js"),o=require("../Data.Lens.Internal.Re/index.js"),c=require("../Data.Maybe/index.js"),f=require("../Data.Newtype/index.js"),a=require("../Data.Profunctor/index.js"),d=require("../Data.Tuple/index.js"),s=function(r){return function(t){var u=r(new i.Exchange(n.identity(n.categoryFn),n.identity(n.categoryFn)));return t(u.value0)(u.value1)}},p=function(n){return s(n)(function(n){return function(r){return function(t){return function(u){return n(t(r(u)))}}}})},l=function(r){return f.unwrap(o.newtypeRe)(r(n.identity(n.categoryFn)))},y=function(n){return function(r){return function(t){return function(u){return a.dimap(t)(n)(r)(u)}}}},m=function(n){return function(r){return function(t){return function(u){return s(t)(function(t){return function(i){return y(e.map(n)(t))(e.map(r)(i))(u)}})}}}},x=function(n){return function(u){return function(e){return y(c.fromMaybe(u))(function(e){if(t.eq(n)(e)(u))return c.Nothing.value;if(r.otherwise)return new c.Just(e);throw new Error("Failed pattern match at Data.Lens.Iso (line 45, column 9 - line 46, column 33): "+[e.constructor.name])})(e)}}},q=function(n){return y(d.uncurry)(d.curry)(n)},j=function(n){return y(u.flip)(u.flip)(n)},D=function(n){return function(r){return function(t){return function(u){return function(e){return s(t)(function(t){return function(i){return s(u)(function(u){return function(o){return y(a.dimap(n)(t)(u))(a.dimap(r)(i)(o))(e)}})}})}}}}},g=function(n){return y(d.curry)(d.uncurry)(n)},w=function(n){return function(r){return s(n)(function(n){return function(t){return function(u){return y(n)(t)(r)(u)}}})}},h=function(n){return function(r){return s(r)(function(r){return function(t){return function(u){return function(e){return function(i){return t(u(a.rmap(n)(r)(e))(i))}}}}})}},F=function(n){return s(n)(function(n){return function(r){return function(t){return function(u){return n(t(r)(u))}}}})};module.exports={iso:y,withIso:s,cloneIso:w,re:l,au:F,auf:h,under:p,non:x,curried:g,uncurried:q,flipped:j,mapping:m,dimapping:D};
+},{"../Control.Category/index.js":"IAi2","../Data.Boolean/index.js":"ObQr","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Lens.Internal.Exchange/index.js":"eUa0","../Data.Lens.Internal.Re/index.js":"IZDD","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.Profunctor/index.js":"0DaD","../Data.Tuple/index.js":"II/O"}],"CiFJ":[function(require,module,exports) {
+"use strict";var e=require("../Data.Lens.Iso/index.js"),r=require("../Data.Newtype/index.js"),n=function(n){return function(t){return function(u){return e.iso(r.unwrap(n))(r.wrap(t))(u)}}};module.exports={_Newtype:n};
+},{"../Data.Lens.Iso/index.js":"fFCp","../Data.Newtype/index.js":"lz8k"}],"ONWB":[function(require,module,exports) {
+"use strict";var o=function(o,e,t,s,n,i){this.Monad0=o,this.chooseBool=e,this.chooseFloat=t,this.chooseInt=s,this.resize=n,this.sized=i},e=function(o){return o.sized},t=function(o){return o.resize},s=function(o){return o.chooseInt},n=function(o){return o.chooseFloat},i=function(o){return o.chooseBool};module.exports={chooseBool:i,chooseFloat:n,chooseInt:s,resize:t,sized:e,MonadGen:o};
+},{}],"s7H0":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),e=require("../Control.Bind/index.js"),t=require("../Control.Monad.Gen.Class/index.js"),r=require("../Control.Monad.Rec.Class/index.js"),u=require("../Data.Boolean/index.js"),i=require("../Data.Foldable/index.js"),o=require("../Data.Function/index.js"),a=require("../Data.Functor/index.js"),c=require("../Data.Maybe/index.js"),l=require("../Data.Monoid.Additive/index.js"),d=require("../Data.Newtype/index.js"),f=require("../Data.Semigroup/index.js"),s=require("../Data.Semigroup.Foldable/index.js"),p=require("../Data.Semiring/index.js"),v=require("../Data.Tuple/index.js"),m=require("../Data.Unfoldable/index.js"),w=require("../Data.Unit/index.js"),M=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),h=function(){function n(){}return n.value=new n,n}(),F=function(n){return n},q=function(n){return n},x=function(i){return function(o){return function(l){return function(d){var f,s,p=function(t){if(t.value1<=0)return n.pure(o.Monad0().Applicative0())(new r.Done(t.value0));if(u.otherwise)return e.bind(o.Monad0().Bind1())(d)(function(e){return n.pure(o.Monad0().Applicative0())(new r.Loop(new v.Tuple(new M(e,t.value0),t.value1-1|0)))});throw new Error("Failed pattern match at Control.Monad.Gen (line 93, column 3 - line 93, column 68): "+[t.constructor.name])};return a.map(o.Monad0().Bind1().Apply0().Functor0())(m.unfoldr(l)(function(n){if(n instanceof h)return c.Nothing.value;if(n instanceof M)return new c.Just(new v.Tuple(n.value0,n.value1));throw new Error("Failed pattern match at Control.Monad.Gen (line 101, column 12 - line 103, column 35): "+[n.constructor.name])}))(t.sized(o)((f=r.tailRecM(i)(p),s=v.Tuple.create(h.value),function(n){return f(s(n))})))}}}},j=new f.Semigroup(function(n){return function(e){return function(t){var r=n(t);return r.value0 instanceof c.Just?e(r.value0.value0):r}}}),D=new f.Semigroup(function(n){return function(e){return function(t){return t<=0?n(t):e(t-1|0)}}}),b=function(n){return function(e){return v.snd(n(e))}},g=function(n){return n},A=function(n){return function(e){return e>=n.value0?new v.Tuple(new c.Just(e-n.value0),n.value1):new v.Tuple(c.Nothing.value,n.value1)}},B=function(n){return function(r){return function(u){var o=d.alaF(a.functorFn)(a.functorFn)(d.newtypeAdditive)(d.newtypeAdditive)(l.Additive)(i.foldMap(r.Foldable0())(l.monoidAdditive(p.semiringNumber)))(v.fst)(u);return e.bind(n.Monad0().Bind1())(t.chooseFloat(n)(0)(o))(b(s.foldMap1(r)(j)(A)(u)))}}},C=function(n){return function(e){return function(t){return r.tailRecM(n)(function(n){return a.mapFlipped(e.Monad0().Bind1().Apply0().Functor0())(t)(function(n){if(n instanceof c.Nothing)return new r.Loop(w.unit);if(n instanceof c.Just)return new r.Done(n.value0);throw new Error("Failed pattern match at Control.Monad.Gen (line 117, column 24 - line 119, column 23): "+[n.constructor.name])})})(w.unit)}}},y=function(n){return function(e){return function(t){return function(r){return C(n)(e)(a.mapFlipped(e.Monad0().Bind1().Apply0().Functor0())(t)(function(n){return r(n)?new c.Just(n):c.Nothing.value}))}}}},T=function(n){return function(r){return function(u){return e.bind(n.Monad0().Bind1())(t.chooseBool(n))(function(n){return n?r:u})}}},N=function(n){return q(o.const(n))},J=function(n){return function(e){return function(t){return g(s.foldMap1(n)(D)(N)(t))(e)}}},S=function(r){return function(u){return function(o){return e.bind(r.Monad0().Bind1())(t.chooseInt(r)(0)(i.length(u.Foldable0())(p.semiringInt)(o)-1|0))(function(e){return n.pure(r.Monad0().Applicative0())(J(u)(e)(o))})}}},G=function(n){return function(r){return function(u){return e.bind(n.Monad0().Bind1())(t.chooseInt(n)(0)(i.length(r.Foldable0())(p.semiringInt)(u)-1|0))(function(n){return J(r)(n)(u)})}}};module.exports={choose:T,oneOf:G,frequency:B,elements:S,unfoldable:x,suchThat:y,filtered:C};
+},{"../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Monad.Gen.Class/index.js":"ONWB","../Control.Monad.Rec.Class/index.js":"UVIy","../Data.Boolean/index.js":"ObQr","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Monoid.Additive/index.js":"fHyj","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Semigroup.Foldable/index.js":"ht+A","../Data.Semiring/index.js":"11NF","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unit/index.js":"NhVk"}],"K4TW":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),r=require("../Control.Bind/index.js"),t=require("../Control.Monad.Gen/index.js"),i=require("../Control.Monad.Gen.Class/index.js"),u=require("../Data.Either/index.js"),o=require("../Data.Functor/index.js"),a=require("../Data.Identity/index.js"),d=require("../Data.Maybe/index.js"),c=require("../Data.NonEmpty/index.js"),p=require("../Data.Ord/index.js"),l=require("../Data.Tuple/index.js"),f=function(n){return e.lift2(n)(l.Tuple.create)},s=function(n){return function(r){return function(u){return function(a){return e.apply(r.Monad0().Bind1().Apply0())(o.map(r.Monad0().Bind1().Apply0().Functor0())(c.NonEmpty.create)(a))(i.resize(r)((d=p.max(p.ordInt)(0),function(n){return d(n-1|0)}))(t.unfoldable(n)(r)(u)(a)));var d}}}},y=function(e){return function(t){return function(u){return r.bind(e.Monad0().Bind1())(i.chooseFloat(e)(0)(1))(function(r){return r<t?o.map(e.Monad0().Bind1().Apply0().Functor0())(d.Just.create)(u):n.pure(e.Monad0().Applicative0())(d.Nothing.value)})}}},x=function(n){return y(n)(.75)},M=function(n){return o.map(n)(a.Identity)},j=function(n){return function(e){return function(t){return function(a){return r.bind(n.Monad0().Bind1())(i.chooseFloat(n)(0)(1))(function(r){return r<e?o.map(n.Monad0().Bind1().Apply0().Functor0())(u.Left.create)(t):o.map(n.Monad0().Bind1().Apply0().Functor0())(u.Right.create)(a)})}}}},q=function(n){return j(n)(.5)};module.exports={genEither:q,"genEither'":j,genIdentity:M,genMaybe:x,"genMaybe'":y,genTuple:f,genNonEmpty:s};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad.Gen/index.js":"s7H0","../Control.Monad.Gen.Class/index.js":"ONWB","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Identity/index.js":"2OKT","../Data.Maybe/index.js":"5mN7","../Data.NonEmpty/index.js":"qF8i","../Data.Ord/index.js":"r4Vb","../Data.Tuple/index.js":"II/O"}],"iQxY":[function(require,module,exports) {
+"use strict";exports.fold1Impl=function(n){return function(r){for(var t=r[0],u=r.length,e=1;e<u;e++)t=n(t)(r[e]);return t}},exports.traverse1Impl=function(){function n(n){this.fn=n}var r={},t=function(n,r){this.head=n,this.tail=r};function u(n){return new t(n,r)}function e(n){return function(r){return new t(n,r)}}function f(n){for(var t=[],u=n;u!==r;)t.push(u.head),u=u.tail;return t}return function(r){return function(t){return function(i){var o=function u(f,o,c){if(0===o)return f;var a=c[o-1];return new n(function(){var n,s;return u((n=a,s=f,r(t(e)(i(n)))(s)),o-1,c)})};return function(r){for(var e=t(u)(i(r[r.length-1])),c=o(e,r.length-1,r);c instanceof n;)c=c.fn();return t(f)(c)}}}}}();
+},{}],"PmFL":[function(require,module,exports) {
+"use strict";var r=require("./foreign.js"),e=require("../Control.Alt/index.js"),a=require("../Control.Applicative/index.js"),n=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),o=require("../Control.Monad/index.js"),i=require("../Data.Eq/index.js"),y=require("../Data.Foldable/index.js"),u=require("../Data.FoldableWithIndex/index.js"),l=require("../Data.Functor/index.js"),d=require("../Data.FunctorWithIndex/index.js"),p=require("../Data.Ord/index.js"),A=require("../Data.Semigroup/index.js"),s=require("../Data.Semigroup.Foldable/index.js"),m=require("../Data.Semigroup.Traversable/index.js"),f=require("../Data.Show/index.js"),x=require("../Data.Traversable/index.js"),q=require("../Data.TraversableWithIndex/index.js"),c=require("../Data.Unfoldable1/index.js"),b=function(r){return r},E=c.unfoldable1Array,N=q.traversableWithIndexArray,j=x.traversableArray,D=function(r){return new f.Show(function(e){return"(NonEmptyArray "+f.show(f.showArray(r))(e)+")"})},h=A.semigroupArray,v=function(r){return p.ordArray(r)},I=p.ord1Array,W=o.monadArray,w=d.functorWithIndexArray,F=l.functorArray,g=u.foldableWithIndexArray,C=y.foldableArray,S=new s.Foldable1(function(){return C},function(e){return r.fold1Impl(A.append(e))},function(r){return s.foldMap1Default(S)(F)(r)}),T=new m.Traversable1(function(){return S},function(){return j},function(r){return m.sequence1Default(T)(r)},function(e){return r.traverse1Impl(n.apply(e))(l.map(e.Functor0()))}),M=function(r){return i.eqArray(r)},B=i.eq1Array,O=t.bindArray,U=n.applyArray,k=a.applicativeArray,z=e.altArray;module.exports={showNonEmptyArray:D,eqNonEmptyArray:M,eq1NonEmptyArray:B,ordNonEmptyArray:v,ord1NonEmptyArray:I,semigroupNonEmptyArray:h,functorNonEmptyArray:F,functorWithIndexNonEmptyArray:w,foldableNonEmptyArray:C,foldableWithIndexNonEmptyArray:g,foldable1NonEmptyArray:S,unfoldable1NonEmptyArray:E,traversableNonEmptyArray:j,traversableWithIndexNonEmptyArray:N,traversable1NonEmptyArray:T,applyNonEmptyArray:U,applicativeNonEmptyArray:k,bindNonEmptyArray:O,monadNonEmptyArray:W,altNonEmptyArray:z};
+},{"./foreign.js":"iQxY","../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Semigroup.Foldable/index.js":"ht+A","../Data.Semigroup.Traversable/index.js":"qkfi","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Unfoldable1/index.js":"S0Nl"}],"ETUV":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js");module.exports={unsafeCoerce:e.unsafeCoerce};
+},{"./foreign.js":"AvJb"}],"eTKN":[function(require,module,exports) {
+"use strict";var n=require("../Control.Bind/index.js"),t=require("../Data.Array/index.js"),r=require("../Data.Array.NonEmpty.Internal/index.js"),e=require("../Data.Bifunctor/index.js"),u=require("../Data.Boolean/index.js"),i=require("../Data.Eq/index.js"),o=require("../Data.Function/index.js"),c=require("../Data.Functor/index.js"),f=require("../Data.Maybe/index.js"),a=require("../Data.NonEmpty/index.js"),d=require("../Data.Ord/index.js"),s=require("../Data.Semigroup/index.js"),l=require("../Data.Tuple/index.js"),p=require("../Data.Unfoldable1/index.js"),y=require("../Unsafe.Coerce/index.js"),m=y.unsafeCoerce,x=y.unsafeCoerce,A=y.unsafeCoerce,b=function(n){return function(r){var e=t.unionBy(n)(A(r));return function(n){return x(e(n))}}},q=function(n){return b(i.eq(n))},v=function(n){return function(t){var r=b(n)(t);return function(n){return r(A(n))}}},h=function(n){return v(i.eq(n))},B=function(){var n=e.bimap(l.bifunctorTuple)(x)(x);return function(r){return n(t.unzip(A(r)))}}(),E=function(n){return function(r){var e=t.updateAt(n)(r);return function(n){return m(e(A(n)))}}},I=function(n){return function(r){return x(t.zip(A(n))(A(r)))}},j=function(n){return function(r){return function(e){return x(t.zipWith(n)(A(r))(A(e)))}}},D=function(n){return function(r){return function(e){return function(u){return m(t.zipWithA(n)(r)(A(e))(A(u)))}}}},g=function(n){return function(r){var e=t.some(n)(r);return function(n){return m(e(n))}}},M=function(n){return function(r){return x(t.snoc(n)(r))}},N=function(n){return function(r){return x(t.snoc(A(n))(r))}},W=function(n){return x(t.singleton(n))},z=function(n){return function(r){return x(t.replicate(d.max(d.ordInt)(1)(n))(r))}},F=function(n){return function(r){return x(t.range(n)(r))}},k=function(n){return function(r){var e=t.modifyAt(n)(r);return function(n){return m(e(A(n)))}}},w=function(n){return function(r){return t.intersectBy(n)(A(r))}},C=function(n){return function(t){var r=w(n)(t);return function(n){return r(A(n))}}},U=function(n){return w(i.eq(n))},L=function(n){return C(i.eq(n))},J=function(n){return function(r){var e=t.insertAt(n)(r);return function(n){return m(e(A(n)))}}},T=function(n){var r=t.fromFoldable(n.Foldable0());return function(n){return x(r(n))}},R=function(n){if(t.length(n)>0)return new f.Just(x(n));if(u.otherwise)return f.Nothing.value;throw new Error("Failed pattern match at Data.Array.NonEmpty (line 134, column 1 - line 134, column 58): "+[n.constructor.name])},O=function(n){var r=t.fromFoldable(n);return function(n){return R(r(n))}},S=function(n){return function(r){return t.difference(n)(A(r))}},G=function(n){return function(r){return x(t.cons(n)(r))}},H=function(n){return G(n.value0)(n.value1)},K=o.flip(n.bind(r.bindNonEmptyArray)),P=function(){var n=c.map(r.functorNonEmptyArray)(A);return function(r){return x(t.concat(A(n(r))))}}(),Q=function(n){return function(t){return x(s.append(s.semigroupArray)(A(n))(t))}},V=function(n){return function(r){var e=t.alterAt(n)(r);return function(n){return e(A(n))}}},X=function(n){var t=f.fromJust();return function(r){return t(n(A(r)))}},Y=X(t.head),Z=X(t.init),$=X(t.last),_=X(t.tail),nn=X(t.uncons),tn=function(n){return t=nn(n),new a.NonEmpty(t.head,t.tail);var t},rn=X(t.unsnoc),en=function(n){return function(t){return n(A(t))}},un=en(t.catMaybes),on=function(n){return function(r){return en(t.delete(n)(r))}},cn=function(n){return en(t.deleteAt(n))},fn=function(n){return function(r){return en(t.deleteBy(n)(r))}},an=function(n){return function(t){return en(S(n)(t))}},dn=function(n){return en(t.drop(n))},sn=function(n){return en(t.dropEnd(n))},ln=function(n){return en(t.dropWhile(n))},pn=function(n){return function(r){return en(t.elemIndex(n)(r))}},yn=function(n){return function(r){return en(t.elemLastIndex(n)(r))}},mn=function(n){return en(t.filter(n))},xn=function(n){return function(r){return en(t.filterA(n)(r))}},An=function(n){return en(t.findIndex(n))},bn=function(n){return en(t.findLastIndex(n))},qn=function(n){return function(r){return function(e){return en(t.foldM(n)(r)(e))}}},vn=function(n){return function(r){return function(e){return en(t.foldRecM(n)(r)(e))}}},hn=en(t.index),Bn=en(t.length),En=function(n){return en(t.mapMaybe(n))},In=function(n){return en(t.partition(n))},jn=function(n){return function(r){return en(t.slice(n)(r))}},Dn=function(n){return en(t.span(n))},gn=function(n){return en(t.take(n))},Mn=function(n){return en(t.takeEnd(n))},Nn=function(n){return en(t.takeWhile(n))},Wn=function(n){return en(t.toUnfoldable(n))},zn=function(n){var t=en(n);return function(n){return x(t(n))}},Fn=function(n){return zn(t.cons(n))},kn=function(n){return function(r){return zn(t.insert(n)(r))}},wn=function(n){return function(r){return zn(t.insertBy(n)(r))}},Cn=function(n){return function(r){return function(e){return zn(t.modifyAtIndices(n)(r)(e))}}},Un=function(n){return zn(t.nub(n))},Ln=function(n){return zn(t.nubBy(n))},Jn=function(n){return zn(t.nubByEq(n))},Tn=function(n){return zn(t.nubEq(n))},Rn=zn(t.reverse),On=function(n){return zn(t.sort(n))},Sn=function(n){return zn(t.sortBy(n))},Gn=function(n){return function(r){return zn(t.sortWith(n)(r))}},Hn=function(n){return function(r){return zn(t.updateAtIndices(n)(r))}},Kn=function(n){return en(t.unsafeIndex(n))},Pn=function(n){return function(t){var r=Bn(t);return p.unfoldr1(n)(function(n){return l.Tuple.create(Kn()(t)(n))(n<(r-1|0)?new f.Just(n+1|0):f.Nothing.value)})(0)}};module.exports={fromArray:R,fromNonEmpty:H,toArray:A,toNonEmpty:tn,fromFoldable:O,fromFoldable1:T,toUnfoldable:Wn,toUnfoldable1:Pn,singleton:W,range:F,replicate:z,some:g,length:Bn,cons:Fn,"cons'":G,snoc:N,"snoc'":M,appendArray:Q,insert:kn,insertBy:wn,head:Y,last:$,tail:_,init:Z,uncons:nn,unsnoc:rn,index:hn,elemIndex:pn,elemLastIndex:yn,findIndex:An,findLastIndex:bn,insertAt:J,deleteAt:cn,updateAt:E,updateAtIndices:Hn,modifyAt:k,modifyAtIndices:Cn,alterAt:V,reverse:Rn,concat:P,concatMap:K,filter:mn,partition:In,filterA:xn,mapMaybe:En,catMaybes:un,sort:On,sortBy:Sn,sortWith:Gn,slice:jn,take:gn,takeEnd:Mn,takeWhile:Nn,drop:dn,dropEnd:sn,dropWhile:ln,span:Dn,nub:Un,nubBy:Ln,nubEq:Tn,nubByEq:Jn,union:h,"union'":q,unionBy:v,"unionBy'":b,delete:on,deleteBy:fn,difference:an,"difference'":S,intersect:L,"intersect'":U,intersectBy:C,"intersectBy'":w,zipWith:j,zipWithA:D,zip:I,unzip:B,foldM:qn,foldRecM:vn,unsafeIndex:Kn};
+},{"../Control.Bind/index.js":"7VcT","../Data.Array/index.js":"4t4C","../Data.Array.NonEmpty.Internal/index.js":"PmFL","../Data.Bifunctor/index.js":"e2Wc","../Data.Boolean/index.js":"ObQr","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.NonEmpty/index.js":"qF8i","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Tuple/index.js":"II/O","../Data.Unfoldable1/index.js":"S0Nl","../Unsafe.Coerce/index.js":"ETUV"}],"Yzse":[function(require,module,exports) {
+"use strict";exports.toCharCode=function(r){return r.charCodeAt(0)},exports.fromCharCode=function(r){return String.fromCharCode(r)};
+},{}],"oOsU":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),t=require("../Control.Apply/index.js"),e=require("../Control.Bind/index.js"),r=require("../Control.MonadZero/index.js"),u=require("../Data.Boolean/index.js"),o=require("../Data.Bounded/index.js"),i=require("../Data.Either/index.js"),a=require("../Data.Eq/index.js"),c=require("../Data.Function/index.js"),f=require("../Data.Functor/index.js"),l=require("../Data.Maybe/index.js"),d=require("../Data.Newtype/index.js"),m=require("../Data.Ord/index.js"),s=require("../Data.Ordering/index.js"),h=require("../Data.Show/index.js"),w=require("../Data.Tuple/index.js"),E=require("../Data.Unfoldable/index.js"),v=require("../Data.Unfoldable1/index.js"),p=require("../Data.Unit/index.js"),b=function(n){return n},g=function(n,t,e){this.Ord0=n,this.pred=t,this.succ=e},J=function(n,t,e,r,u){this.Bounded0=n,this.Enum1=t,this.cardinality=e,this.fromEnum=r,this.toEnum=u},y=function(n){return n.toEnum},D=function(n){return n.succ},T=function(n){return function(e){return v.unfoldr1(e)(t.apply(t.applyFn)(w.Tuple.create)(D(n)))}},C=new h.Show(function(n){return"(Cardinality "+h.show(h.showInt)(n)+")"}),q=function(n){return n.pred},N=m.ordInt,F=new d.Newtype(function(n){return n},b),j=function(n){return n.fromEnum},x=function(n){return function(t){return function(e){return function(r){var u=y(n)(r);if(u instanceof l.Just)return u.value0;if(u instanceof l.Nothing)return r<j(n)(o.bottom(n.Bounded0()))?t:e;throw new Error("Failed pattern match at Data.Enum (line 158, column 33 - line 160, column 62): "+[u.constructor.name])}}}},O=a.eqInt,B=new g(function(){return m.ordUnit},c.const(l.Nothing.value),c.const(l.Nothing.value)),M=function(n){return function(t){return new g(function(){return w.ordTuple(n.Ord0())(t.Enum1().Ord0())},function(e){return l.maybe(f.map(l.functorMaybe)(c.flip(w.Tuple.create)(o.top(t.Bounded0())))(q(n)(e.value0)))((r=w.Tuple.create(e.value0),function(n){return l.Just.create(r(n))}))(q(t.Enum1())(e.value1));var r},function(e){return l.maybe(f.map(l.functorMaybe)(c.flip(w.Tuple.create)(o.bottom(t.Bounded0())))(D(n)(e.value0)))((r=w.Tuple.create(e.value0),function(n){return l.Just.create(r(n))}))(D(t.Enum1())(e.value1));var r})}},I=new g(function(){return m.ordOrdering},function(n){if(n instanceof s.LT)return l.Nothing.value;if(n instanceof s.EQ)return new l.Just(s.LT.value);if(n instanceof s.GT)return new l.Just(s.EQ.value);throw new Error("Failed pattern match at Data.Enum (line 72, column 1 - line 78, column 20): "+[n.constructor.name])},function(n){if(n instanceof s.LT)return new l.Just(s.EQ.value);if(n instanceof s.EQ)return new l.Just(s.GT.value);if(n instanceof s.GT)return l.Nothing.value;throw new Error("Failed pattern match at Data.Enum (line 72, column 1 - line 78, column 20): "+[n.constructor.name])}),L=function(n){return new g(function(){return l.ordMaybe(n.Enum1().Ord0())},function(t){if(t instanceof l.Nothing)return l.Nothing.value;if(t instanceof l.Just)return new l.Just(q(n.Enum1())(t.value0));throw new Error("Failed pattern match at Data.Enum (line 80, column 1 - line 84, column 32): "+[t.constructor.name])},function(t){if(t instanceof l.Nothing)return new l.Just(new l.Just(o.bottom(n.Bounded0())));if(t instanceof l.Just)return f.map(l.functorMaybe)(l.Just.create)(D(n.Enum1())(t.value0));throw new Error("Failed pattern match at Data.Enum (line 80, column 1 - line 84, column 32): "+[t.constructor.name])})},U=new g(function(){return m.ordInt},function(n){return n>o.bottom(o.boundedInt)?new l.Just(n-1|0):l.Nothing.value},function(n){return n<o.top(o.boundedInt)?new l.Just(n+1|0):l.Nothing.value}),Q=function(n){return function(t){var o=function(n){return function(t){return function(u){return function(o){return new w.Tuple(o,e.bind(l.bindMaybe)(n(o))(function(n){return f.voidLeft(l.functorMaybe)(r.guard(l.monadZeroMaybe)(t(n)(u)))(n)}))}}}};return function(e){return function(r){if(a.eq(n.Ord0().Eq0())(e)(r))return v.singleton(t)(e);if(m.lessThan(n.Ord0())(e)(r))return v.unfoldr1(t)(o(D(n))(m.lessThanOrEq(n.Ord0()))(r))(e);if(u.otherwise)return v.unfoldr1(t)(o(q(n))(m.greaterThanOrEq(n.Ord0()))(r))(e);throw new Error("Failed pattern match at Data.Enum (line 183, column 14 - line 187, column 51): "+[e.constructor.name,r.constructor.name])}}}},G=function(n){return function(t){return function(e){return function(r){return function(o){return function(i){var a,c,d,m=j(e)(i),s=j(e)(o),h=j(e)(r);return f.map(t)((c=l.fromJust(),d=y(e),function(n){return c(d(n))}))(E.unfoldr(n)((a=s-h|0,function(n){return function(t){if(t<=n)return new l.Just(new w.Tuple(t,t+a|0));if(u.otherwise)return l.Nothing.value;throw new Error("Failed pattern match at Data.Enum (line 214, column 5 - line 216, column 28): "+[a.constructor.name,n.constructor.name,t.constructor.name])}})(m))(h))}}}}}},R=function(n){return function(t){return new g(function(){return i.ordEither(n.Enum1().Ord0())(t.Enum1().Ord0())},function(e){if(e instanceof i.Left)return l.maybe(l.Nothing.value)(function(n){return l.Just.create(i.Left.create(n))})(q(n.Enum1())(e.value0));if(e instanceof i.Right)return l.maybe(new l.Just(new i.Left(o.top(n.Bounded0()))))(function(n){return l.Just.create(i.Right.create(n))})(q(t.Enum1())(e.value0));throw new Error("Failed pattern match at Data.Enum (line 86, column 1 - line 90, column 69): "+[e.constructor.name])},function(e){if(e instanceof i.Left)return l.maybe(new l.Just(new i.Right(o.bottom(t.Bounded0()))))(function(n){return l.Just.create(i.Left.create(n))})(D(n.Enum1())(e.value0));if(e instanceof i.Right)return l.maybe(l.Nothing.value)(function(n){return l.Just.create(i.Right.create(n))})(D(t.Enum1())(e.value0));throw new Error("Failed pattern match at Data.Enum (line 86, column 1 - line 90, column 69): "+[e.constructor.name])})}},S=new g(function(){return m.ordBoolean},function(n){return n?new l.Just(!1):l.Nothing.value},function(n){return n?l.Nothing.value:new l.Just(!0)}),Z=function(n){return function(e){return v.unfoldr1(e)(t.apply(t.applyFn)(w.Tuple.create)(q(n)))}},A=function(n){return new w.Tuple(n,n)},P=function(n){return function(t){return E.unfoldr(t)((e=f.map(l.functorMaybe)(A),r=q(n),function(n){return e(r(n))}));var e,r}},W=function(n){return function(t){return E.unfoldr(t)((e=f.map(l.functorMaybe)(A),r=D(n),function(n){return e(r(n))}));var e,r}},k=function(n){return function(t){return function(e){var r;return e<0?l.Nothing.value:(r=e,function(n){var e,u=r,o=!1;function i(e,r){if(0===e)return o=!0,new l.Just(r);var i=D(t)(r);if(i instanceof l.Just)return u=e-1|0,void(n=i.value0);if(i instanceof l.Nothing)return o=!0,l.Nothing.value;throw new Error("Failed pattern match at Data.Enum (line 293, column 12 - line 295, column 33): "+[i.constructor.name])}for(;!o;)e=i(u,n);return e})(o.bottom(n))}}},z=function(n){return function(t){return function(e){return n(t(e)+1|0)}}},H=function(n){return function(t){return function(e){return n(t(e)-1|0)}}},K=function(n){var t;return t=0,function(e){var r,u=t,o=!1;function i(t,r){var i=q(n)(r);if(i instanceof l.Just)return u=t+1|0,void(e=i.value0);if(i instanceof l.Nothing)return o=!0,t;throw new Error("Failed pattern match at Data.Enum (line 306, column 5 - line 308, column 19): "+[i.constructor.name])}for(;!o;)r=i(u,e);return r}},V=function(n){return function(t){var e;return b((e=1,function(n){var r,u=e,o=!1;function i(e,r){var i=D(t)(r);if(i instanceof l.Just)return u=e+1|0,void(n=i.value0);if(i instanceof l.Nothing)return o=!0,e;throw new Error("Failed pattern match at Data.Enum (line 273, column 5 - line 275, column 19): "+[i.constructor.name])}for(;!o;)r=i(u,n);return r})(o.bottom(n)))}},X=function(t){return t>=o.bottom(o.boundedInt)&&t<=o.top(o.boundedInt)?new l.Just(n.fromCharCode(t)):l.Nothing.value},Y=new g(function(){return m.ordChar},H(X)(n.toCharCode),z(X)(n.toCharCode)),$=function(n){return n.cardinality},_=new J(function(){return o.boundedUnit},function(){return B},1,c.const(0),function(n){return 0===n?new l.Just(p.unit):l.Nothing.value}),nn=new J(function(){return o.boundedOrdering},function(){return I},3,function(n){if(n instanceof s.LT)return 0;if(n instanceof s.EQ)return 1;if(n instanceof s.GT)return 2;throw new Error("Failed pattern match at Data.Enum (line 137, column 1 - line 145, column 18): "+[n.constructor.name])},function(n){return 0===n?new l.Just(s.LT.value):1===n?new l.Just(s.EQ.value):2===n?new l.Just(s.GT.value):l.Nothing.value}),tn=new J(function(){return o.boundedChar},function(){return Y},n.toCharCode(o.top(o.boundedChar))-n.toCharCode(o.bottom(o.boundedChar))|0,n.toCharCode,X),en=new J(function(){return o.boundedBoolean},function(){return S},2,function(n){if(!n)return 0;if(n)return 1;throw new Error("Failed pattern match at Data.Enum (line 118, column 1 - line 124, column 20): "+[n.constructor.name])},function(n){return 0===n?new l.Just(!1):1===n?new l.Just(!0):l.Nothing.value});module.exports={Enum:g,succ:D,pred:q,BoundedEnum:J,cardinality:$,toEnum:y,fromEnum:j,toEnumWithDefaults:x,Cardinality:b,enumFromTo:Q,enumFromThenTo:G,upFrom:W,upFromIncluding:T,downFrom:P,downFromIncluding:Z,defaultSucc:z,defaultPred:H,defaultCardinality:V,defaultToEnum:k,defaultFromEnum:K,enumBoolean:S,enumInt:U,enumChar:Y,enumUnit:B,enumOrdering:I,enumMaybe:L,enumEither:R,enumTuple:M,boundedEnumBoolean:en,boundedEnumChar:tn,boundedEnumUnit:_,boundedEnumOrdering:nn,newtypeCardinality:F,eqCardinality:O,ordCardinality:N,showCardinality:C};
+},{"./foreign.js":"Yzse","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.MonadZero/index.js":"lD5R","../Data.Boolean/index.js":"ObQr","../Data.Bounded/index.js":"kcUU","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Show/index.js":"mFY7","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unfoldable1/index.js":"S0Nl","../Data.Unit/index.js":"NhVk"}],"EM+K":[function(require,module,exports) {
+"use strict";var n=require("../Data.Array.NonEmpty/index.js"),r=require("../Data.Maybe/index.js"),t=require("../Data.Semigroup.Foldable/index.js"),e=require("../Data.String.CodeUnits/index.js"),u=require("../Data.String.NonEmpty.Internal/index.js"),o=require("../Data.String.Unsafe/index.js"),i=require("../Unsafe.Coerce/index.js"),a=i.unsafeCoerce,f=function(n){return function(r){return a(r+e.singleton(n))}},c=function(n){return a(e.singleton(n))},s=i.unsafeCoerce,l=function(n){var r=s(e.takeWhile(n));return function(n){return u.fromString(r(n))}},h=function(n){var r=e["lastIndexOf'"](n);return function(n){return s(r(n))}},g=function(n){return s(e.lastIndexOf(n))},d=function(n){var r=e["indexOf'"](n);return function(n){return s(r(n))}},m=function(n){return s(e.indexOf(n))},v=i.unsafeCoerce,x=function(n){return e.length(v(n))},p=function(n){return function(r){var t=e.splitAt(n)(v(r));return{before:u.fromString(t.before),after:u.fromString(t.after)}}},y=function(n){return function(t){var u=v(t);return n<1?r.Nothing.value:new r.Just(a(e.take(n)(u)))}},A=function(n){return function(t){var u=v(t);return n<1?r.Nothing.value:new r.Just(a(e.takeRight(n)(u)))}},C=function(n){return e.toChar(v(n))},N=function(n){return e.toCharArray(v(n))},S=function(){var t=r.fromJust();return function(r){return t(n.fromArray(N(r)))}}(),O=function(n){var r=v(n);return{head:o.charAt(0)(r),tail:u.fromString(e.drop(1)(r))}},j=function(n){var r=t.fold1(n)(u.semigroupNonEmptyString);return function(n){return r(n)}},q=function(n){return 0===n.length?r.Nothing.value:new r.Just(a(e.fromCharArray(n)))},J=function(){var t=r.fromJust();return function(r){return t(q(n.toArray(r)))}}(),k=function(n){var r=s(e.dropWhile(n));return function(n){return u.fromString(r(n))}},D=function(n){return function(t){var u=v(t);return n>=e.length(u)?r.Nothing.value:new r.Just(a(e.dropRight(n)(u)))}},b=function(n){return function(t){var u=v(t);return n>=e.length(u)?r.Nothing.value:new r.Just(a(e.drop(n)(u)))}},w=function(n){return s(e.countPrefix(n))},E=function(n){return function(r){return a(e.singleton(n)+r)}},I=function(n){return s(e.charAt(n))};module.exports={fromCharArray:q,fromNonEmptyCharArray:J,singleton:c,cons:E,snoc:f,fromFoldable1:j,toCharArray:N,toNonEmptyCharArray:S,charAt:I,toChar:C,indexOf:m,"indexOf'":d,lastIndexOf:g,"lastIndexOf'":h,uncons:O,length:x,take:y,takeRight:A,takeWhile:l,drop:b,dropRight:D,dropWhile:k,countPrefix:w,splitAt:p};
+},{"../Data.Array.NonEmpty/index.js":"eTKN","../Data.Maybe/index.js":"5mN7","../Data.Semigroup.Foldable/index.js":"ht+A","../Data.String.CodeUnits/index.js":"6c6X","../Data.String.NonEmpty.Internal/index.js":"Ph6A","../Data.String.Unsafe/index.js":"5UWM","../Unsafe.Coerce/index.js":"ETUV"}],"nKWe":[function(require,module,exports) {
+"use strict";var n=require("../Data.Eq/index.js"),e=require("../Data.Newtype/index.js"),t=require("../Data.Ord/index.js"),r=require("../Data.Show/index.js"),u=function(n){return n},o=function(n){return n},i=new r.Show(function(n){return"(Replacement "+r.show(r.showString)(n)+")"}),c=new r.Show(function(n){return"(Pattern "+r.show(r.showString)(n)+")"}),a=new e.Newtype(function(n){return n},u),w=new e.Newtype(function(n){return n},o),f=new n.Eq(function(n){return function(e){return n===e}}),p=new t.Ord(function(){return f},function(n){return function(e){return t.compare(t.ordString)(n)(e)}}),s=new n.Eq(function(n){return function(e){return n===e}}),d=new t.Ord(function(){return s},function(n){return function(e){return t.compare(t.ordString)(n)(e)}});module.exports={Pattern:o,Replacement:u,eqPattern:s,ordPattern:d,newtypePattern:w,showPattern:c,eqReplacement:f,ordReplacement:p,newtypeReplacement:a,showReplacement:i};
+},{"../Data.Eq/index.js":"Pq4F","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Show/index.js":"mFY7"}],"3koD":[function(require,module,exports) {
+"use strict";exports.unsafeUnionFn=function(r,n){var a={};for(var o in n)({}).hasOwnProperty.call(n,o)&&(a[o]=n[o]);for(var t in r)({}).hasOwnProperty.call(r,t)&&(a[t]=r[t]);return a};
+},{}],"cB+g":[function(require,module,exports) {
+"use strict";exports.mkFn0=function(n){return function(){return n({})}},exports.mkFn2=function(n){return function(r,t){return n(r)(t)}},exports.mkFn3=function(n){return function(r,t,u){return n(r)(t)(u)}},exports.mkFn4=function(n){return function(r,t,u,e){return n(r)(t)(u)(e)}},exports.mkFn5=function(n){return function(r,t,u,e,o){return n(r)(t)(u)(e)(o)}},exports.mkFn6=function(n){return function(r,t,u,e,o,c){return n(r)(t)(u)(e)(o)(c)}},exports.mkFn7=function(n){return function(r,t,u,e,o,c,i){return n(r)(t)(u)(e)(o)(c)(i)}},exports.mkFn8=function(n){return function(r,t,u,e,o,c,i,f){return n(r)(t)(u)(e)(o)(c)(i)(f)}},exports.mkFn9=function(n){return function(r,t,u,e,o,c,i,f,s){return n(r)(t)(u)(e)(o)(c)(i)(f)(s)}},exports.mkFn10=function(n){return function(r,t,u,e,o,c,i,f,s,p){return n(r)(t)(u)(e)(o)(c)(i)(f)(s)(p)}},exports.runFn0=function(n){return n()},exports.runFn2=function(n){return function(r){return function(t){return n(r,t)}}},exports.runFn3=function(n){return function(r){return function(t){return function(u){return n(r,t,u)}}}},exports.runFn4=function(n){return function(r){return function(t){return function(u){return function(e){return n(r,t,u,e)}}}}},exports.runFn5=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return n(r,t,u,e,o)}}}}}},exports.runFn6=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(c){return n(r,t,u,e,o,c)}}}}}}},exports.runFn7=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(c){return function(i){return n(r,t,u,e,o,c,i)}}}}}}}},exports.runFn8=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(c){return function(i){return function(f){return n(r,t,u,e,o,c,i,f)}}}}}}}}},exports.runFn9=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(c){return function(i){return function(f){return function(s){return n(r,t,u,e,o,c,i,f,s)}}}}}}}}}},exports.runFn10=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(c){return function(i){return function(f){return function(s){return function(p){return n(r,t,u,e,o,c,i,f,s,p)}}}}}}}}}}};
+},{}],"TowT":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),F=function(n){return n},r=function(n){return n};module.exports={mkFn1:r,runFn1:F,mkFn0:n.mkFn0,mkFn2:n.mkFn2,mkFn3:n.mkFn3,mkFn4:n.mkFn4,mkFn5:n.mkFn5,mkFn6:n.mkFn6,mkFn7:n.mkFn7,mkFn8:n.mkFn8,mkFn9:n.mkFn9,mkFn10:n.mkFn10,runFn0:n.runFn0,runFn2:n.runFn2,runFn3:n.runFn3,runFn4:n.runFn4,runFn5:n.runFn5,runFn6:n.runFn6,runFn7:n.runFn7,runFn8:n.runFn8,runFn9:n.runFn9,runFn10:n.runFn10};
+},{"./foreign.js":"cB+g"}],"WmUk":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),e=require("../Data.Function.Uncurried/index.js"),i=e.runFn2(n.unsafeUnionFn);module.exports={unsafeUnion:i,unsafeUnionFn:n.unsafeUnionFn};
+},{"./foreign.js":"3koD","../Data.Function.Uncurried/index.js":"TowT"}],"0gG4":[function(require,module,exports) {
+"use strict";var n=require("../Data.Eq/index.js"),r=require("../Data.Symbol/index.js"),u=require("../Record.Unsafe/index.js"),t=require("../Record.Unsafe.Union/index.js"),e=require("../Type.Data.RowList/index.js"),i=require("../Unsafe.Coerce/index.js"),o=function(n){this.equalFields=n},f=function(n){return function(n){return function(r){return t.unsafeUnionFn(n,r)}}},c=function(n){return function(t){return function(t){return function(t){return function(e){return function(i){return u.unsafeSet(r.reflectSymbol(n)(t))(e)(i)}}}}}},s=function(n){return i.unsafeCoerce},a=function(n){return function(n){return function(n){return function(r){return t.unsafeUnionFn(n,r)}}}},l=function(n){return function(t){return function(t){return function(t){return function(e){return function(i){return u.unsafeSet(r.reflectSymbol(n)(t))(e)(i)}}}}}},d=function(n){return function(t){return function(t){return function(e){return u.unsafeGet(r.reflectSymbol(n)(t))(e)}}}},q=function(n){return function(r){return function(u){return function(t){return function(e){return function(i){return c(n)(r)(u)(t)(e(d(n)(r)(t)(i)))(i)}}}}}},x=new o(function(n){return function(n){return function(n){return!0}}}),y=function(n){return n.equalFields},m=function(u){return function(t){return function(i){return function(f){return new o(function(o){return function(o){return function(c){var s=d(u)(i)(r.SProxy.value),a=y(f)(e.RLProxy.value);return n.eq(t)(s(o))(s(c))&&a(o)(c)}}})}}}},F=function(n){return function(n){return function(r){return function(u){return y(n)(e.RLProxy.value)(r)(u)}}}},S=function(n){return function(n){return function(n){return function(r){return t.unsafeUnionFn(n,r)}}}},U=function(n){return function(t){return function(t){return function(t){return function(e){return u.unsafeDelete(r.reflectSymbol(n)(t))(e)}}}}},j=function(n){return function(r){return function(u){return function(t){return function(e){return function(i){return function(o){return function(f){return function(c){return l(r)(i)(e)(f)(d(n)(u)(o)(c))(U(n)(t)(u)(o)(c))}}}}}}}}};module.exports={get:d,set:c,modify:q,insert:l,delete:U,rename:j,equal:F,merge:a,union:f,disjointUnion:S,nub:s,EqualFields:o,equalFields:y,equalFieldsCons:m,equalFieldsNil:x};
+},{"../Data.Eq/index.js":"Pq4F","../Data.Symbol/index.js":"4oJQ","../Record.Unsafe/index.js":"KG04","../Record.Unsafe.Union/index.js":"WmUk","../Type.Data.RowList/index.js":"XaXP","../Unsafe.Coerce/index.js":"ETUV"}],"/s47":[function(require,module,exports) {
+"use strict";exports.float32ToInt32=function(r){var t=new ArrayBuffer(4),n=new Float32Array(t),e=new Int32Array(t);return n[0]=r,e[0]};
+},{}],"34Kp":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),t=require("../Control.Alternative/index.js"),e=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),o=require("../Control.Lazy/index.js"),i=require("../Control.Monad/index.js"),a=require("../Control.Monad.Cont.Class/index.js"),c=require("../Control.Monad.Error.Class/index.js"),l=require("../Control.Monad.Reader.Class/index.js"),f=require("../Control.Monad.Rec.Class/index.js"),d=require("../Control.Monad.State.Class/index.js"),s=require("../Control.Monad.Trans.Class/index.js"),p=require("../Control.Monad.Writer.Class/index.js"),T=require("../Control.MonadPlus/index.js"),M=require("../Control.MonadZero/index.js"),v=require("../Control.Plus/index.js"),w=require("../Data.Functor/index.js"),S=require("../Data.Newtype/index.js"),C=require("../Data.Tuple/index.js"),m=require("../Data.Unit/index.js"),x=require("../Effect.Class/index.js"),j=function(n){return n},q=function(n){return function(t){return function(e){return t(n(e))}}},A=function(n){return n},y=new S.Newtype(function(n){return n},j),E=new s.MonadTrans(function(n){return function(t){return function(r){return u.bind(n.Bind1())(t)(function(t){return e.pure(n.Applicative0())(new C.Tuple(t,r))})}}}),h=function(n){return function(t){return function(e){return n(t(e))}}},B=new o.Lazy(function(n){return function(t){return n(m.unit)(t)}}),R=function(n){return new w.Functor(function(t){return function(e){return function(r){return w.map(n)(function(n){return new C.Tuple(t(n.value0),n.value1)})(e(r))}}})},b=function(n){return function(t){return function(e){return w.map(n)(C.snd)(t(e))}}},D=function(n){return function(t){return function(e){return w.map(n)(C.fst)(t(e))}}},P=function(n){return new i.Monad(function(){return L(n)},function(){return F(n)})},F=function(n){return new u.Bind(function(){return k(n)},function(t){return function(e){return function(r){return u.bind(n.Bind1())(t(r))(function(n){return e(n.value0)(n.value1)})}}})},k=function(n){return new r.Apply(function(){return R(n.Bind1().Apply0().Functor0())},i.ap(P(n)))},L=function(n){return new e.Applicative(function(){return k(n)},function(t){return function(r){return e.pure(n.Applicative0())(new C.Tuple(t,r))}})},Z=function(n){return new l.MonadAsk(function(){return P(n.Monad0())},s.lift(E)(n.Monad0())(l.ask(n)))},z=function(n){return new l.MonadReader(function(){return Z(n.MonadAsk0())},(t=l.local(n),function(n){return h(t(n))}));var t},W=function(n){return new a.MonadCont(function(){return P(n.Monad0())},function(t){return function(e){return a.callCC(n)(function(n){return t(function(t){return function(e){return n(new C.Tuple(t,e))}})(e)})}})},N=function(n){return new x.MonadEffect(function(){return P(n.Monad0())},(t=s.lift(E)(n.Monad0()),e=x.liftEffect(n),function(n){return t(e(n))}));var t,e},U=function(n){return new f.MonadRec(function(){return P(n.Monad0())},function(t){return function(r){var o=function(r){var o=t(r.value0);return u.bind(n.Monad0().Bind1())(o(r.value1))(function(t){return e.pure(n.Monad0().Applicative0())(function(){if(t.value0 instanceof f.Loop)return new f.Loop(new C.Tuple(t.value0.value0,t.value1));if(t.value0 instanceof f.Done)return new f.Done(new C.Tuple(t.value0.value0,t.value1));throw new Error("Failed pattern match at Control.Monad.State.Trans (line 87, column 16 - line 89, column 40): "+[t.value0.constructor.name])}())})};return function(t){return f.tailRecM(n)(o)(new C.Tuple(r,t))}}})},g=function(n){return new d.MonadState(function(){return P(n)},function(t){return j((r=e.pure(n.Applicative0()),function(n){return r(t(n))}));var r})},G=function(n){return new p.MonadTell(function(){return P(n.Monad0())},(t=s.lift(E)(n.Monad0()),e=p.tell(n),function(n){return t(e(n))}));var t,e},H=function(n){return new p.MonadWriter(function(){return G(n.MonadTell0())},function(t){return function(r){return u.bind(n.MonadTell0().Monad0().Bind1())(p.listen(n)(t(r)))(function(t){return e.pure(n.MonadTell0().Monad0().Applicative0())(new C.Tuple(new C.Tuple(t.value0.value0,t.value1),t.value0.value1))})}},function(t){return function(r){return p.pass(n)(u.bind(n.MonadTell0().Monad0().Bind1())(t(r))(function(t){return e.pure(n.MonadTell0().Monad0().Applicative0())(new C.Tuple(new C.Tuple(t.value0.value0,t.value1),t.value0.value1))}))}})},I=function(n){return new c.MonadThrow(function(){return P(n.Monad0())},function(t){return s.lift(E)(n.Monad0())(c.throwError(n)(t))})},J=function(n){return new c.MonadError(function(){return I(n.MonadThrow0())},function(t){return function(e){return function(r){return c.catchError(n)(t(r))(function(n){return e(n)(r)})}}})},K=function(t){return function(t){return new n.Alt(function(){return R(t.Functor0())},function(e){return function(r){return function(u){return n.alt(t)(e(u))(r(u))}}})}},O=function(n){return function(t){return new v.Plus(function(){return K(n)(t.Alt0())},function(n){return v.empty(t)})}},Q=function(n){return function(e){return new t.Alternative(function(){return L(n)},function(){return O(n)(e.Plus1())})}},V=function(n){return new M.MonadZero(function(){return Q(n.Monad0())(n.Alternative1())},function(){return P(n.Monad0())})},X=function(n){return new T.MonadPlus(function(){return V(n.MonadZero0())})};module.exports={StateT:j,runStateT:A,evalStateT:D,execStateT:b,mapStateT:h,withStateT:q,newtypeStateT:y,functorStateT:R,applyStateT:k,applicativeStateT:L,altStateT:K,plusStateT:O,alternativeStateT:Q,bindStateT:F,monadStateT:P,monadRecStateT:U,monadZeroStateT:V,monadPlusStateT:X,monadTransStateT:E,lazyStateT:B,monadEffectState:N,monadContStateT:W,monadThrowStateT:I,monadErrorStateT:J,monadAskStateT:Z,monadReaderStateT:z,monadStateStateT:g,monadTellStateT:G,monadWriterStateT:H};
+},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Lazy/index.js":"y9cE","../Control.Monad/index.js":"U/Ix","../Control.Monad.Cont.Class/index.js":"IpNh","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Reader.Class/index.js":"c2ZJ","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.Trans.Class/index.js":"5tIR","../Control.Monad.Writer.Class/index.js":"gxgA","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Tuple/index.js":"II/O","../Data.Unit/index.js":"NhVk","../Effect.Class/index.js":"dWtH"}],"mGZW":[function(require,module,exports) {
+"use strict";var t=require("../Control.Monad.State.Trans/index.js"),e=require("../Data.Identity/index.js"),n=require("../Data.Newtype/index.js"),r=t.withStateT,u=function(t){var r=n.unwrap(e.newtypeIdentity);return function(e){return r(t(e))}},a=function(r){return t.mapStateT((u=n.unwrap(e.newtypeIdentity),function(t){return e.Identity(r(u(t)))}));var u},i=function(t){return function(e){return t(e).value1}},o=function(t){return function(e){return t(e).value0}};module.exports={runState:u,evalState:o,execState:i,mapState:a,withState:r};
+},{"../Control.Monad.State.Trans/index.js":"34Kp","../Data.Identity/index.js":"2OKT","../Data.Newtype/index.js":"lz8k"}],"7S1u":[function(require,module,exports) {
+"use strict";exports.random=Math.random;
+},{}],"V+tx":[function(require,module,exports) {
+"use strict";var r=require("./foreign.js"),n=require("../Data.Functor/index.js"),e=require("../Data.Int/index.js"),t=require("../Effect/index.js"),o=function(n){return function(e){return function(){return r.random()*(e-n)+n}}},u=function(n){return function(t){return function(){var o=r.random(),u=(e.toNumber(t)-e.toNumber(n)+1)*o+e.toNumber(n);return e.floor(u)}}},a=n.map(t.functorEffect)(function(r){return r<.5})(r.random);module.exports={randomInt:u,randomRange:o,randomBool:a,random:r.random};
+},{"./foreign.js":"7S1u","../Data.Functor/index.js":"+0AE","../Data.Int/index.js":"xNJb","../Effect/index.js":"oTWB"}],"1RqQ":[function(require,module,exports) {
+"use strict";var e=require("../Data.Eq/index.js"),r=require("../Data.EuclideanRing/index.js"),n=require("../Data.Functor/index.js"),t=require("../Data.Int/index.js"),u=require("../Data.Maybe/index.js"),i=require("../Data.Ord/index.js"),o=require("../Data.Show/index.js"),d=require("../Effect/index.js"),a=require("../Effect.Random/index.js"),c=require("../Math/index.js"),f=function(e){return e},s=function(e){return e},m=new o.Show(function(e){return"Seed "+o.show(o.showInt)(e)}),q=1,x=2147483647,j=x-1|0,S=function(e){var n;return(n=q,function(e){return function(t){var u=e-n|0,i=r.mod(r.euclideanRingInt)(t)(u);return i<n?i+e|0:i}})(j)(e)},l=n.map(d.functorEffect)(S)(a.randomInt(q)(j)),w=0,b=48271,g=function(e){return function(r){return f(u.fromJust()(t.fromNumber(c.remainder(t.toNumber(b)*t.toNumber(r)+e)(t.toNumber(x)))))}},D=g(t.toNumber(w)),h=new e.Eq(function(e){return function(r){return e===r}}),E=new i.Ord(function(){return h},function(e){return function(r){return i.compare(i.ordInt)(e)(r)}});module.exports={mkSeed:S,unSeed:s,randomSeed:l,lcgA:b,lcgC:w,lcgM:x,lcgNext:D,lcgPerturb:g,eqSeed:h,ordSeed:E,showSeed:m};
+},{"../Data.Eq/index.js":"Pq4F","../Data.EuclideanRing/index.js":"2IRB","../Data.Functor/index.js":"+0AE","../Data.Int/index.js":"xNJb","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Show/index.js":"mFY7","../Effect/index.js":"oTWB","../Effect.Random/index.js":"V+tx","../Math/index.js":"Rpaz"}],"9U+U":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),e=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),r=require("../Control.Bind/index.js"),u=require("../Control.Monad.Gen.Class/index.js"),i=require("../Control.Monad.Rec.Class/index.js"),a=require("../Control.Monad.State/index.js"),o=require("../Control.Monad.State.Class/index.js"),d=require("../Control.Monad.State.Trans/index.js"),c=require("../Data.Array/index.js"),f=require("../Data.Bounded/index.js"),l=require("../Data.Enum/index.js"),s=require("../Data.Foldable/index.js"),m=require("../Data.Functor/index.js"),p=require("../Data.Identity/index.js"),v=require("../Data.Int/index.js"),S=require("../Data.List/index.js"),y=require("../Data.List.Types/index.js"),b=require("../Data.Maybe/index.js"),x=require("../Data.Monoid.Additive/index.js"),w=require("../Data.Newtype/index.js"),q=require("../Data.NonEmpty/index.js"),j=require("../Data.Ord/index.js"),T=require("../Data.Semiring/index.js"),I=require("../Data.Tuple/index.js"),N=require("../Data.Unfoldable/index.js"),D=require("../Data.Unit/index.js"),G=require("../Math/index.js"),M=require("../Random.LCG/index.js"),C=function(n){return n},g=function(n){return n},h=function(n){return a.runState(g(n))},z=function(n){return C(o.state(d.monadStateStateT(p.monadIdentity))(function(e){return h(n(e))(e)}))},A=function(n){return z(function(e){return n(e.size)})},O=function(n){return function(e){return C(o.state(d.monadStateStateT(p.monadIdentity))(function(t){return h(e)({newSeed:n,size:t.size})}))}},E=function(n){return function(e){return C(o.state(d.monadStateStateT(p.monadIdentity))(function(t){return m.map(I.functorTuple)(function(n){return{size:t.size,newSeed:n.newSeed}})(h(e)({newSeed:t.newSeed,size:n}))}))}},L=function(n){return function(t){return function(r){if(t<=0)return e.pure(n.Monad0().Applicative0())(y.Nil.value);return i.tailRecM(n)(function(t){return 0===t.value1?e.pure(n.Monad0().Applicative0())(new i.Done(t.value0)):m.mapFlipped(n.Monad0().Bind1().Apply0().Functor0())(r)(function(n){return new i.Loop(new I.Tuple(new y.Cons(n,t.value0),t.value1-1|0))})})(new I.Tuple(y.Nil.value,t))}}},R=function(n){return C(o.state(d.monadStateStateT(p.monadIdentity))(function(e){return new I.Tuple(function(t){return I.fst(h(n(t))(e))},{newSeed:M.lcgNext(e.newSeed),size:e.size})}))},B=function(e){return function(t){return r.discard(r.discardUnit)(d.bindStateT(p.monadIdentity))(m.void(d.functorStateT(p.functorIdentity))(o.modify(d.monadStateStateT(p.monadIdentity))(function(t){var r={};for(var u in t)({}).hasOwnProperty.call(t,u)&&(r[u]=t[u]);return r.newSeed=M.lcgPerturb(v.toNumber(n.float32ToInt32(e)))(t.newSeed),r})))(function(){return g(t)})}},F=d.monadRecStateT(i.monadRecIdentity),U=d.monadStateT(p.monadIdentity),P=L(F),k=C(o.state(d.monadStateStateT(p.monadIdentity))(function(n){return new I.Tuple(M.unSeed(n.newSeed),function(){var e={};for(var t in n)({}).hasOwnProperty.call(n,t)&&(e[t]=n[t]);return e.newSeed=M.lcgNext(n.newSeed),e}())})),J=d.lazyStateT,Q=d.functorStateT(p.functorIdentity),H=m.map(Q)(function(n){return v.toNumber(n)/v.toNumber(M.lcgM)})(k),K=function(n){return function(e){return m.map(Q)(S.toUnfoldable(N.unfoldableArray))(P(n)(e))}},V=function(n){return a.evalState(g(n))},W=function(n){return function(e){return function(t){return V(K(e)(t))({newSeed:n,size:e})}}},X=function(n){return function(e){return function(){var t=M.randomSeed();return W(t)(n)(e)}}},Y=X(10),Z=function(n){return function(e){var t,r,u=j.min(j.ordNumber)(n)(e),i=j.max(j.ordNumber)(n)(e);return m.map(Q)((t=T.add(T.semiringNumber)(u),r=T.mul(T.semiringNumber)(i-u),function(n){return t(r(n))}))(H)}},$=d.bindStateT(p.monadIdentity),_=function(n){var e=new y.Cons(n.value0,n.value1),t=w.unwrap(w.newtypeAdditive)(s.fold(y.foldableList)(x.monoidAdditive(T.semiringNumber))(m.map(y.functorList)(function(n){return x.Additive(I.fst(n))})(e)));return r.bind($)(Z(0)(t))(function(t){return(r=t,function(n){return function(e){var t,u=r,i=n,a=!1;function o(n,t,r){if(r instanceof y.Nil)return a=!0,t;if(r instanceof y.Cons)return n<=r.value0.value0?(a=!0,r.value0.value1):(u=n-r.value0.value0,i=t,void(e=r.value1));throw new Error("Failed pattern match at Test.QuickCheck.Gen (line 162, column 5 - line 162, column 21): "+[n.constructor.name,t.constructor.name,r.constructor.name])}for(;!a;)t=o(u,i,e);return t}})(I.snd(n.value0))(e);var r})},nn=d.applyStateT(p.monadIdentity),en=function(n){return function(e){var r=v.toNumber(e),u=v.toNumber(n),i=m.map(Q)(v.toNumber)(k),a=t.apply(nn)(m.map(Q)(T.add(T.semiringNumber))(i))(m.map(Q)(T.mul(T.semiringNumber)(2))(i));return m.map(Q)(function(n){return v.floor((e=n,u+G.remainder(e)(r-u+1)));var e})(a)}},tn=function(n){return function(e){return n<=e?en(n)(e):en(e)(n)}},rn=function(n){return A(function(e){return r.bind($)(tn(0)(e))(function(e){return K(e)(n)})})},un=new u.MonadGen(function(){return U},m.map(Q)(function(n){return n<.5})(H),Z,tn,function(n){return function(e){return A(function(t){return E(n(t))(e)})}},A),an=function(n){return r.bind($)(tn(0)(c.length(n.value1)))(function(e){return e<1?n.value0:b.fromMaybe(n.value0)(c.index(n.value1)(e-1|0))})},on=d.applicativeStateT(p.monadIdentity),dn=function(n){return A(function(t){return r.bind($)(tn(0)(t))(function(t){return r.bind($)(n)(function(u){return r.bind($)(K(t-1|0)(n))(function(n){return e.pure(on)(new q.NonEmpty(u,n))})})})})},cn=function(n){return r.bind($)(tn(0)(c.length(n.value1)))(function(t){return e.pure(on)(0===t?n.value0:b.fromMaybe(n.value0)(c.index(n.value1)(t-1|0)))})},fn=function(n){return r.bind($)(tn(l.fromEnum(n)(f.bottom(n.Bounded0())))(l.fromEnum(n)(f.top(n.Bounded0()))))(function(t){return e.pure(on)(b.fromJust()(l.toEnum(n)(t)))})},ln=function(n){return r.bind($)(K(c.length(n))(tn(0)(f.top(f.boundedInt))))(function(t){return e.pure(on)(m.map(m.functorArray)(I.snd)(c.sortBy(j.comparing(j.ordInt)(I.fst))(c.zip(t)(n))))})},sn=function(n){return function(t){return i.tailRecM(F)(function(u){return r.bind($)(n)(function(n){return e.pure(on)(t(n)?new i.Done(n):new i.Loop(D.unit))})})(D.unit)}},mn=d.altStateT(p.monadIdentity)(p.altIdentity);module.exports={unGen:g,repeatable:R,stateful:z,variant:O,suchThat:sn,sized:A,resize:E,choose:Z,chooseInt:tn,oneOf:an,frequency:_,arrayOf:rn,arrayOf1:dn,listOf:P,vectorOf:K,elements:cn,shuffle:ln,runGen:h,evalGen:V,perturbGen:B,uniform:H,sample:W,randomSample:Y,"randomSample'":X,functorGen:Q,applyGen:nn,applicativeGen:on,bindGen:$,monadGen:U,altGen:mn,monadRecGen:F,lazyGen:J,monadGenGen:un};
+},{"./foreign.js":"/s47","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad.Gen.Class/index.js":"ONWB","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.State/index.js":"mGZW","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.State.Trans/index.js":"34Kp","../Data.Array/index.js":"4t4C","../Data.Bounded/index.js":"kcUU","../Data.Enum/index.js":"oOsU","../Data.Foldable/index.js":"eVDl","../Data.Functor/index.js":"+0AE","../Data.Identity/index.js":"2OKT","../Data.Int/index.js":"xNJb","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Monoid.Additive/index.js":"fHyj","../Data.Newtype/index.js":"lz8k","../Data.NonEmpty/index.js":"qF8i","../Data.Ord/index.js":"r4Vb","../Data.Semiring/index.js":"11NF","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unit/index.js":"NhVk","../Math/index.js":"Rpaz","../Random.LCG/index.js":"1RqQ"}],"rKI8":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),e=require("../Control.Bind/index.js"),t=require("../Control.Category/index.js"),u=require("../Control.Monad.Gen.Class/index.js"),i=require("../Control.Monad.Gen.Common/index.js"),a=require("../Data.Array.NonEmpty/index.js"),o=require("../Data.Array.ST/index.js"),c=require("../Data.Bounded/index.js"),f=require("../Data.Either/index.js"),b=require("../Data.Enum/index.js"),p=require("../Data.Foldable/index.js"),y=require("../Data.Function/index.js"),s=require("../Data.Functor/index.js"),m=require("../Data.Generic.Rep/index.js"),d=require("../Data.Identity/index.js"),l=require("../Data.Int/index.js"),w=require("../Data.Lazy/index.js"),G=require("../Data.List.Types/index.js"),h=require("../Data.Maybe/index.js"),x=require("../Data.Newtype/index.js"),j=require("../Data.NonEmpty/index.js"),q=require("../Data.Ordering/index.js"),v=require("../Data.Semigroup/index.js"),A=require("../Data.String.CodeUnits/index.js"),C=require("../Data.String.Common/index.js"),E=require("../Data.String.NonEmpty.CodeUnits/index.js"),g=require("../Data.String.NonEmpty.Internal/index.js"),D=require("../Data.String.Pattern/index.js"),N=require("../Data.Symbol/index.js"),S=require("../Data.Tuple/index.js"),L=require("../Data.Unit/index.js"),I=require("../Record/index.js"),T=require("../Test.QuickCheck.Gen/index.js"),F=require("../Type.Data.RowList/index.js"),R=function(n){this.coarbitrary=n},k=function(n){this.arbitraryRecord=n},P=function(n){this.arbitraryGenericSum=n},Q=function(n){this.arbitrary=n},M=new R(function(n){return t.identity(t.categoryFn)}),O=function(n){return n.coarbitrary},z=function(n){return new R(function(r){return O(n)(r)})},B=function(n){return new R(function(r){return O(n)(r)})},U=function(n){return function(r){return new R(function(e){var t=O(r)(e.value1),u=O(n)(e.value0);return function(n){return t(u(n))}})}},J=function(n){return function(r){return new R(function(e){if(e instanceof m.Inl)return O(n)(e.value0);if(e instanceof m.Inr)return O(r)(e.value0);throw new Error("Failed pattern match at Test.QuickCheck.Arbitrary (line 216, column 1 - line 218, column 38): "+[e.constructor.name])})}},W=function(n){return function(r){return function(e){return function(t){return s.map(T.functorGen)(m.to(n))(O(r)(m.from(n)(e))(s.map(T.functorGen)(m.from(n))(t)))}}}},H=new R(function(n){return T.perturbGen(1)}),K=function(n){return function(r){return new R(function(e){var t=O(r)(e.value1),u=O(n)(e.value0);return function(n){return t(u(n))}})}},V=new R(function(n){if(n instanceof q.LT)return T.perturbGen(1);if(n instanceof q.EQ)return T.perturbGen(2);if(n instanceof q.GT)return T.perturbGen(3);throw new Error("Failed pattern match at Test.QuickCheck.Arbitrary (line 114, column 1 - line 117, column 34): "+[n.constructor.name])}),X=new R(T.perturbGen),Y=function(n){return function(r){return new R(function(e){var t=O(n)(e.value1),u=O(r)(e.value0);return function(n){return t(u(n))}})}},Z=function(n){return new R(function(r){if(r instanceof h.Nothing)return T.perturbGen(1);if(r instanceof h.Just)return O(n)(r.value0);throw new Error("Failed pattern match at Test.QuickCheck.Arbitrary (line 154, column 1 - line 156, column 39): "+[r.constructor.name])})},$=function(n){return new R(p.foldl(G.foldableList)(function(r){return function(e){var t=O(n)(e);return function(n){return r(t(n))}}})(t.identity(t.categoryFn)))},_=function(n){return new R(function(r){return O(Y($(n))(n))(r)})},nn=function(n){return new R(function(r){return O(n)(w.force(r))})},rn=new R(function(n){return T.perturbGen(l.toNumber(n))}),en=function(n){return new R(function(r){return O(n)(r)})},tn=function(n){return function(r){return new R(function(e){if(e instanceof f.Left)return O(n)(e.value0);if(e instanceof f.Right)return O(r)(e.value0);throw new Error("Failed pattern match at Test.QuickCheck.Arbitrary (line 161, column 1 - line 163, column 40): "+[e.constructor.name])})}},un=new R(function(n){return O(rn)(b.fromEnum(b.boundedEnumChar)(n))}),an=new R(function(n){if(n)return T.perturbGen(1);if(!n)return T.perturbGen(2);throw new Error("Failed pattern match at Test.QuickCheck.Arbitrary (line 71, column 1 - line 73, column 37): "+[n.constructor.name])}),on=function(n){return new R(p.foldl(p.foldableArray)(function(r){return function(e){var t=O(n)(e);return function(n){return r(t(n))}}})(t.identity(t.categoryFn)))},cn=function(n){return new R((r=O(on(n)),function(n){return r(a.toArray(n))}));var r},fn=new R(function(n){return O(on(Z(un)))(s.map(s.functorArray)(A.charAt(0))(C.split(x.wrap(D.newtypePattern)(""))(n)))}),bn=new R(function(){var n=O(fn);return function(r){return n(g.toString(r))}}()),pn=new k(function(r){return n.pure(T.applicativeGen)({})}),yn=function(n){return n.arbitraryRecord},sn=function(n){return function(n){return new Q(yn(n)(F.RLProxy.value))}},mn=new Q(n.pure(T.applicativeGen)(m.NoArguments.value)),dn=function(n){return n.arbitraryGenericSum},ln=function(n){return n.arbitrary},wn=function(n){return new Q(s.map(T.functorGen)(m.Argument)(ln(n)))},Gn=function(n){return new Q(s.map(T.functorGen)(m.Constructor)(ln(n)))},hn=function(n){return new Q(s.map(T.functorGen)(d.Identity)(ln(n)))},xn=function(r){return new Q(e.bind(T.bindGen)(ln(r))((t=n.pure(T.applicativeGen),function(n){return t(w.defer(y.const(n)))})));var t},jn=function(n){return new Q(T.sized(function(r){return e.bind(T.bindGen)(T.chooseInt(0)(r))(y.flip(T.listOf)(ln(n)))}))},qn=function(n){return function(e){return new Q(r.apply(T.applyGen)(s.map(T.functorGen)(m.Product.create)(ln(n)))(ln(e)))}},vn=function(r){return function(t){return function(u){return function(i){return function(a){return function(a){return new k(function(o){return e.bind(T.bindGen)(ln(r))(function(r){return e.bind(T.bindGen)(yn(t)(F.RLProxy.value))(function(e){return n.pure(T.applicativeGen)(I.insert(a)(u)(i)(N.SProxy.value)(r)(e))})})})}}}}}},An=function(n){return function(r){return new Q(T.oneOf(new j.NonEmpty(s.map(T.functorGen)(m.Inl.create)(ln(n)),s.map(s.functorArray)(s.map(T.functorGen)(m.Inr.create))(dn(r)))))}},Cn=function(n){return function(r){return s.map(T.functorGen)(m.to(n))(ln(r))}},En=new Q(n.pure(T.applicativeGen)(L.unit)),gn=function(n){return function(e){return new Q(r.apply(T.applyGen)(s.map(T.functorGen)(S.Tuple.create)(ln(n)))(ln(e)))}},Dn=new Q(T.elements(new j.NonEmpty(q.LT.value,[q.EQ.value,q.GT.value]))),Nn=new Q(T.uniform),Sn=function(n){return function(e){return new Q(r.apply(T.applyGen)(s.map(T.functorGen)(j.NonEmpty.create)(ln(e)))(ln(n)))}},Ln=function(n){return new Q(s.map(T.functorGen)(G.NonEmptyList)(ln(Sn(jn(n))(n))))},In=function(n){return new Q(i.genMaybe(T.monadGenGen)(ln(n)))},Tn=new Q(T.chooseInt(-1e6)(1e6)),Fn=function(n){return function(r){return new P(v.append(v.semigroupArray)([s.map(T.functorGen)(m.Inl.create)(ln(n))])(s.map(s.functorArray)(s.map(T.functorGen)(m.Inr.create))(dn(r))))}},Rn=function(n){return new P([ln(Gn(n))])},kn=function(n){return function(r){return new Q(T.repeatable(function(e){return O(n)(e)(ln(r))}))}},Pn=function(n){return function(r){return new Q(i.genEither(T.monadGenGen)(ln(n))(ln(r)))}},Qn=new Q(s.map(T.functorGen)(b.toEnumWithDefaults(b.boundedEnumChar)(c.bottom(c.boundedChar))(c.top(c.boundedChar)))(T.chooseInt(0)(65536))),Mn=new Q(u.chooseBool(T.monadGenGen)),On=function(n){return new Q(T.arrayOf(ln(n)))},zn=function(r){return new Q(e.bind(T.bindGen)(ln(r))(function(t){return e.bind(T.bindGen)(ln(On(r)))(function(r){return n.pure(T.applicativeGen)(h.fromJust()(a.fromArray(function(){var n=o.unsafeThaw(r)();o.push(t)(n)();return o.unsafeFreeze(n)()}())))})}))},Bn=new Q(s.map(T.functorGen)(A.fromCharArray)(ln(On(Qn)))),Un=new Q(r.apply(T.applyGen)(s.map(T.functorGen)(E.cons)(ln(Qn)))(ln(Bn))),Jn=function(n){return function(r){return new R(function(t){return function(u){return e.bind(T.bindGen)(ln(On(n)))(function(n){return O(on(r))(s.map(s.functorArray)(t)(n))(u)})}})}};module.exports={Arbitrary:Q,arbitrary:ln,Coarbitrary:R,coarbitrary:O,genericArbitrary:Cn,genericCoarbitrary:W,ArbitraryGenericSum:P,arbitraryGenericSum:dn,ArbitraryRowList:k,arbitraryRecord:yn,arbBoolean:Mn,coarbBoolean:an,arbNumber:Nn,coarbNumber:X,arbInt:Tn,coarbInt:rn,arbString:Bn,coarbString:fn,arbNonEmptyString:Un,coarbNonEmptyString:bn,arbChar:Qn,coarbChar:un,arbUnit:En,coarbUnit:H,arbOrdering:Dn,coarbOrdering:V,arbArray:On,coarbArray:on,arbNonEmptyArray:zn,coarbNonEmptyArray:cn,arbFunction:kn,coarbFunction:Jn,arbTuple:gn,coarbTuple:K,arbMaybe:In,coarbMaybe:Z,arbEither:Pn,coarbEither:tn,arbitraryList:jn,coarbList:$,arbitraryIdentity:hn,coarbIdentity:en,arbitraryLazy:xn,coarbLazy:nn,arbNonEmpty:Sn,coarbNonEmpty:Y,arbNonEmptyList:Ln,coarbNonEmptyList:_,arbitraryNoArguments:mn,coarbitraryNoArguments:M,arbGenSumSum:Fn,arbGenSumConstructor:Rn,arbitrarySum:An,coarbitrarySum:J,arbitraryProduct:qn,coarbitraryProduct:U,arbitraryConstructor:Gn,coarbitraryConstructor:B,arbitraryArgument:wn,coarbitraryArgument:z,arbitraryRowListNil:pn,arbitraryRowListCons:vn,arbitraryRecordInstance:sn};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad.Gen.Class/index.js":"ONWB","../Control.Monad.Gen.Common/index.js":"K4TW","../Data.Array.NonEmpty/index.js":"eTKN","../Data.Array.ST/index.js":"s8si","../Data.Bounded/index.js":"kcUU","../Data.Either/index.js":"B2JL","../Data.Enum/index.js":"oOsU","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Generic.Rep/index.js":"AuzG","../Data.Identity/index.js":"2OKT","../Data.Int/index.js":"xNJb","../Data.Lazy/index.js":"aRUE","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.NonEmpty/index.js":"qF8i","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.String.CodeUnits/index.js":"6c6X","../Data.String.Common/index.js":"OSrc","../Data.String.NonEmpty.CodeUnits/index.js":"EM+K","../Data.String.NonEmpty.Internal/index.js":"Ph6A","../Data.String.Pattern/index.js":"nKWe","../Data.Symbol/index.js":"4oJQ","../Data.Tuple/index.js":"II/O","../Data.Unit/index.js":"NhVk","../Record/index.js":"0gG4","../Test.QuickCheck.Gen/index.js":"9U+U","../Type.Data.RowList/index.js":"XaXP"}],"PpsX":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),e=require("../Control.Bind/index.js"),u=require("../Control.Monad/index.js"),t=require("../Data.Distributive/index.js"),i=require("../Data.Eq/index.js"),a=require("../Data.Foldable/index.js"),o=require("../Data.Functor/index.js"),c=require("../Data.Monoid/index.js"),l=require("../Data.Ord/index.js"),f=require("../Data.Ordering/index.js"),v=require("../Data.Semigroup/index.js"),p=require("../Data.Show/index.js"),d=require("../Data.Traversable/index.js"),s=require("../Test.QuickCheck.Arbitrary/index.js"),w=require("../Test.QuickCheck.Gen/index.js"),q=function(){function n(n,r){this.value0=n,this.value1=r}return n.create=function(r){return function(e){return new n(r,e)}},n}(),m=function(n){return function(r){return n(r.value0)(r.value1)}},y=function(n){return new q(n.value1,n.value0)},x=function(n){return n.value1},j=function(n){return new p.Show(function(r){return"("+p.show(n)(r.value0)+" ~ "+p.show(n)(r.value1)+")"})},b=function(n){return new v.Semigroup(function(r){return function(e){return new q(v.append(n)(r.value0)(e.value0),v.append(n)(r.value1)(e.value1))}})},P=function(n){return new c.Monoid(function(){return b(n.Semigroup0())},new q(c.mempty(n),c.mempty(n)))},D=new o.Functor(function(n){return function(r){return new q(n(r.value0),n(r.value1))}}),A=function(n){return n.value0},h=new a.Foldable(function(n){return function(r){return function(e){return v.append(n.Semigroup0())(r(e.value0))(r(e.value1))}}},function(n){return function(r){return function(e){return n(n(r)(e.value0))(e.value1)}}},function(n){return function(r){return function(e){return n(e.value0)(n(e.value1)(r))}}}),T=new d.Traversable(function(){return h},function(){return D},function(n){return function(e){return r.apply(n.Apply0())(o.map(n.Apply0().Functor0())(q.create)(e.value0))(e.value1)}},function(n){return function(e){return function(u){return r.apply(n.Apply0())(o.map(n.Apply0().Functor0())(q.create)(e(u.value0)))(e(u.value1))}}}),g=function(n){return new i.Eq(function(r){return function(e){return i.eq(n)(r.value0)(e.value0)&&i.eq(n)(r.value1)(e.value1)}})},C=function(n){return new l.Ord(function(){return g(n.Eq0())},function(r){return function(e){var u=l.compare(n)(r.value0)(e.value0);return u instanceof f.LT?f.LT.value:u instanceof f.GT?f.GT.value:l.compare(n)(r.value1)(e.value1)}})},F=new t.Distributive(function(){return D},function(n){return function(r){return function(e){return new q(o.map(n)(function(n){return A(r(n))})(e),o.map(n)(function(n){return x(r(n))})(e))}}},function(n){return function(r){return new q(o.map(n)(A)(r),o.map(n)(x)(r))}}),S=function(n){return function(r){return function(e){return n(new q(r,e))}}},G=function(n){return new s.Arbitrary(r.apply(w.applyGen)(o.map(w.functorGen)(q.create)(s.arbitrary(n)))(s.arbitrary(n)))},k=new r.Apply(function(){return D},function(n){return function(r){return new q(n.value0(r.value0),n.value1(r.value1))}}),M=new e.Bind(function(){return k},function(n){return function(r){return new q(A(r(n.value0)),x(r(n.value1)))}}),E=new n.Applicative(function(){return k},function(n){return new q(n,n)}),O=new u.Monad(function(){return E},function(){return M});module.exports={Pair:q,fst:A,snd:x,curry:S,uncurry:m,swap:y,eqPair:g,ordPair:C,showPair:j,functorPair:D,applyPair:k,applicativePair:E,bindPair:M,monadPair:O,semigroupPair:b,monoidPair:P,foldablePair:h,traversablePair:T,distributivePair:F,arbitraryPair:G};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.Distributive/index.js":"8PTu","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Test.QuickCheck.Arbitrary/index.js":"rKI8","../Test.QuickCheck.Gen/index.js":"9U+U"}],"AnkF":[function(require,module,exports) {
+"use strict";var n=require("../Control.Category/index.js"),e=require("../Data.Eq/index.js"),r=require("../Data.Monoid/index.js"),o=require("../Data.Newtype/index.js"),u=require("../Data.Ord/index.js"),t=require("../Data.Ring/index.js"),i=require("../Data.Semigroup/index.js"),s=require("../Data.Show/index.js"),c=function(n){return n},w=function(n){return n},d=function(n){return n},f=function(n){return n},a=function(n){return n},m=function(n,e){this.fromDuration=n,this.toDuration=e},y=function(n){return n.toDuration},D=new s.Show(function(n){return"(Seconds "+s.show(s.showNumber)(n)+")"}),M=new s.Show(function(n){return"(Minutes "+s.show(s.showNumber)(n)+")"}),h=new s.Show(function(n){return"(Milliseconds "+s.show(s.showNumber)(n)+")"}),p=new s.Show(function(n){return"(Hours "+s.show(s.showNumber)(n)+")"}),N=new s.Show(function(n){return"(Days "+s.show(s.showNumber)(n)+")"}),S=new i.Semigroup(function(n){return function(e){return n+e}}),l=new i.Semigroup(function(n){return function(e){return n+e}}),q=new i.Semigroup(function(n){return function(e){return n+e}}),g=new i.Semigroup(function(n){return function(e){return n+e}}),b=new i.Semigroup(function(n){return function(e){return n+e}}),v=u.ordNumber,x=u.ordNumber,H=u.ordNumber,j=u.ordNumber,C=u.ordNumber,F=new o.Newtype(function(n){return n},c),E=new o.Newtype(function(n){return n},w),O=new o.Newtype(function(n){return n},d),R=new o.Newtype(function(n){return n},f),k=new o.Newtype(function(n){return n},a),z=new r.Monoid(function(){return S},0),A=new r.Monoid(function(){return l},0),B=new r.Monoid(function(){return q},0),G=new r.Monoid(function(){return g},0),I=new r.Monoid(function(){return b},0),J=function(n){return n.fromDuration},K=function(n){var e=y(n),r=o.over(O)(O)(d)(t.negate(t.ringNumber)),u=J(n);return function(n){return e(r(u(n)))}},L=e.eqNumber,P=e.eqNumber,Q=e.eqNumber,T=e.eqNumber,U=e.eqNumber,V=new m(o.over(F)(O)(c)(function(n){return 1e3*n}),o.over(O)(F)(d)(function(n){return n/1e3})),W=new m(o.over(E)(O)(w)(function(n){return 6e4*n}),o.over(O)(E)(d)(function(n){return n/6e4})),X=new m(n.identity(n.categoryFn),n.identity(n.categoryFn)),Y=new m(o.over(R)(O)(f)(function(n){return 36e5*n}),o.over(O)(R)(d)(function(n){return n/36e5})),Z=new m(o.over(k)(O)(a)(function(n){return 864e5*n}),o.over(O)(k)(d)(function(n){return n/864e5})),$=function(n){return function(e){var r=y(e),o=J(n);return function(n){return r(o(n))}}};module.exports={fromDuration:J,toDuration:y,Milliseconds:d,Seconds:c,Minutes:w,Hours:f,Days:a,Duration:m,convertDuration:$,negateDuration:K,newtypeMilliseconds:O,eqMilliseconds:Q,ordMilliseconds:H,semigroupMilliseconds:q,monoidMilliseconds:B,showMilliseconds:h,newtypeSeconds:F,eqSeconds:L,ordSeconds:v,semigroupSeconds:S,monoidSeconds:z,showSeconds:D,newtypeMinutes:E,eqMinutes:P,ordMinutes:x,semigroupMinutes:l,monoidMinutes:A,showMinutes:M,newtypeHours:R,eqHours:T,ordHours:j,semigroupHours:g,monoidHours:G,showHours:p,newtypeDays:k,eqDays:U,ordDays:C,semigroupDays:b,monoidDays:I,showDays:N,durationMilliseconds:X,durationSeconds:V,durationMinutes:W,durationHours:Y,durationDays:Z};
+},{"../Control.Category/index.js":"IAi2","../Data.Eq/index.js":"Pq4F","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Ring/index.js":"E2qH","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"0f5O":[function(require,module,exports) {
+"use strict";exports.unsafePartial=function(t){return t()};
+},{}],"vcP9":[function(require,module,exports) {
+"use strict";exports.crashWith=function(){return function(r){throw new Error(r)}};
+},{}],"HAG3":[function(require,module,exports) {
+"use strict";var r=require("./foreign.js"),t=function(t){return r.crashWith(t)("Partial.crash: partial function")};module.exports={crash:t,crashWith:r.crashWith};
+},{"./foreign.js":"vcP9"}],"aoR+":[function(require,module,exports) {
+"use strict";var r=require("./foreign.js"),n=require("../Partial/index.js"),a=function(n){return function(n){return r.unsafePartial(function(r){return n(r)})}},e=function(a){return r.unsafePartial(function(r){return n.crashWith(r)(a)})};module.exports={unsafePartialBecause:a,unsafeCrashWith:e,unsafePartial:r.unsafePartial};
+},{"./foreign.js":"0f5O","../Partial/index.js":"HAG3"}],"kYoO":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),t=require("../Control.Plus/index.js"),e=require("../Data.Boolean/index.js"),r=require("../Data.List.Types/index.js"),u=require("../Data.Maybe/index.js"),a=require("../Data.Ord/index.js"),o=require("../Data.Ordering/index.js"),i=require("../Data.Symbol/index.js"),c=require("../Partial.Unsafe/index.js"),l=require("../Type.Data.RowList/index.js"),f=function(n){return n},s=function(){function n(){}return n.value=new n,n}(),v=function(n){this.variantTags=n},p={},m={},h=function(n){this.contractWith=n},d=new v(function(n){return r.Nil.value}),C=function(n){return n.variantTags},y=function(n){return function(t){return new v(function(e){return new r.Cons(i.reflectSymbol(t)(i.SProxy.value),C(n)(l.RLProxy.value))})}},w=p,g=function(n){return function(n){return function(n){return p}}},x=m,D=function(n){return function(n){return function(n){return m}}},N=function(n){return function(t){return function(a){var o,i=n,c=t,l=!1;function f(n,t,o){if(t instanceof r.Cons&&o instanceof r.Cons){if(o.value0.cardinality>n){var f=o.value0.toEnum(n);return f instanceof u.Just?(l=!0,u.Just.create({type:t.value0,value:f.value0})):(l=!0,u.Nothing.value)}if(e.otherwise)return i=n-o.value0.cardinality|0,c=t.value1,void(a=o.value1)}return l=!0,u.Nothing.value}for(;!l;)o=f(i,c,a);return o}}},E=function(n){return function(t){var u,a=!1;function o(u){if(u instanceof r.Cons){if(u.value0===n)return a=!0,!0;if(e.otherwise)return void(t=u.value1)}if(u instanceof r.Nil)return a=!0,!1;throw new Error("Failed pattern match at Data.Variant.Internal (line 94, column 8 - line 98, column 18): "+[u.constructor.name])}for(;!a;)u=o(t);return u}},F=function(){var n;return n=0,function(t){var e,u=n,a=!1;function o(n,e){if(e instanceof r.Cons)return u=n+e.value0.cardinality|0,void(t=e.value1);if(e instanceof r.Nil)return a=!0,n;throw new Error("Failed pattern match at Data.Variant.Internal (line 216, column 12 - line 218, column 16): "+[e.constructor.name])}for(;!a;)e=o(u,t);return e}}(),q=function(n){return c.unsafeCrashWith("Data.Variant: impossible `"+n+"`")},V=function(n){return function(t){return function(u){return function(a){var o,i=u,c=!1;function l(u,o){if(u instanceof r.Cons&&o instanceof r.Cons){if(u.value0===t)return c=!0,o.value0;if(e.otherwise)return i=u.value1,void(a=o.value1)}return c=!0,q(n)}for(;!c;)o=l(i,a);return o}}}},k=function(n){return function(t){return function(r){return function(u){if(r.type===u.type)return V("eq")(r.type)(n)(t)(r.value)(u.value);if(e.otherwise)return!1;throw new Error("Failed pattern match at Data.Variant.Internal (line 100, column 1 - line 105, column 12): "+[n.constructor.name,t.constructor.name,r.constructor.name,u.constructor.name])}}}},j=function(n){return function(t){return function(e){return function(r){var u=a.compare(a.ordString)(e.type)(r.type);return u instanceof o.EQ?V("compare")(e.type)(n)(t)(e.value)(r.value):u}}}},J=function(n){return function(t){return function(e){return function(u){return e instanceof r.Cons&&u instanceof r.Cons?{type:e.value0,value:t(u.value0)}:q(n)}}}},T=function(n){var t;return t=0,function(u){return function(a){var o,i=t,c=u,l=!1;function f(t,u,o){if(u instanceof r.Cons&&o instanceof r.Cons){if(u.value0===n.type)return l=!0,t+o.value0.fromEnum(n.value)|0;if(e.otherwise)return i=t+o.value0.cardinality|0,c=u.value1,void(a=o.value1)}return l=!0,q("fromEnum")}for(;!l;)o=f(i,c,a);return o}}},I=function(n){return function(t){return function(e){return function(u){for(var a,o,i,c=e,l=!1;!l;)i=u,a=(o=c)instanceof r.Cons&&o.value1 instanceof r.Nil&&i instanceof r.Cons&&i.value1 instanceof r.Nil?(l=!0,{type:o.value0,value:t(i.value0)}):o instanceof r.Cons&&i instanceof r.Cons?(c=o.value1,void(u=i.value1)):(l=!0,q(n));return a}}}},P=function(n){return function(t){return function(a){return function(o){if(t instanceof r.Cons&&a instanceof r.Cons&&o instanceof r.Cons){if(t.value0===n.type){var i=o.value0.pred(n.value);if(i instanceof u.Nothing)return u.Nothing.value;if(i instanceof u.Just)return u.Just.create({type:n.type,value:i.value0});throw new Error("Failed pattern match at Data.Variant.Internal (line 175, column 11 - line 177, column 69): "+[i.constructor.name])}if(e.otherwise)return(c=t.value0,function(t){return function(a){return function(a){return function(o){return function(i){var l,f=c,s=t,v=a,p=o,m=!1;function h(t,a,o,c,l,h){if(c instanceof r.Cons&&l instanceof r.Cons&&h instanceof r.Cons){if(c.value0===n.type){var d=h.value0.pred(n.value);if(d instanceof u.Nothing)return m=!0,u.Just.create({type:t,value:a.top});if(d instanceof u.Just)return m=!0,u.Just.create({type:n.type,value:d.value0});throw new Error("Failed pattern match at Data.Variant.Internal (line 184, column 11 - line 186, column 69): "+[d.constructor.name])}if(e.otherwise)return f=c.value0,s=l.value0,h.value0,v=c.value1,p=l.value1,void(i=h.value1)}return m=!0,q("pred")}for(;!m;)l=h(f,s,0,v,p,i);return l}}}}})(a.value0)(o.value0)(t.value1)(a.value1)(o.value1)}var c;return q("pred")}}}},b=function(n){return function(t){return function(a){return function(o){var i,c=t,l=a,f=!1;function s(t,a,i){if(t instanceof r.Cons&&a instanceof r.Cons&&i instanceof r.Cons){if(t.value0===n.type){var s=i.value0.succ(n.value);if(s instanceof u.Just)return f=!0,u.Just.create({type:t.value0,value:s.value0});if(s instanceof u.Nothing)return t.value1 instanceof r.Cons&&a.value1 instanceof r.Cons?(f=!0,u.Just.create({type:t.value1.value0,value:a.value1.value0.bottom})):(f=!0,u.Nothing.value);throw new Error("Failed pattern match at Data.Variant.Internal (line 202, column 11 - line 206, column 29): "+[s.constructor.name])}if(e.otherwise)return c=t.value1,l=a.value1,void(o=i.value1)}return f=!0,q("succ")}for(;!f;)i=s(c,l,o);return i}}}},M=function(r){return function(r){return function(r){return new h(function(u){return function(a){return function(o){return function(i){return function(c){if(E(i)(C(r)(l.RLProxy.value)))return n.pure(u.Applicative0())(c);if(e.otherwise)return t.empty(u.Plus1());throw new Error("Failed pattern match at Data.Variant.Internal (line 254, column 1 - line 263, column 24): "+[a.constructor.name,o.constructor.name,i.constructor.name,c.constructor.name])}}}}})}}},L=function(n){return n.contractWith};module.exports={FProxy:s,VariantRep:f,VariantTags:v,variantTags:C,Contractable:h,contractWith:L,VariantMatchCases:p,VariantFMatchCases:m,lookup:V,lookupTag:E,lookupEq:k,lookupOrd:j,lookupLast:I,lookupFirst:J,lookupPred:P,lookupSucc:b,lookupCardinality:F,lookupFromEnum:T,lookupToEnum:N,impossible:q,variantMatchCons:g,variantMatchNil:w,variantFMatchCons:D,variantFMatchNil:x,variantTagsNil:d,variantTagsCons:y,contractWithInstance:M};
+},{"../Control.Applicative/index.js":"qYya","../Control.Plus/index.js":"oMBg","../Data.Boolean/index.js":"ObQr","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Symbol/index.js":"4oJQ","../Partial.Unsafe/index.js":"aoR+","../Type.Data.RowList/index.js":"XaXP"}],"hgdh":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Plus/index.js"),t=require("../Data.Bounded/index.js"),u=require("../Data.Enum/index.js"),e=require("../Data.Eq/index.js"),o=require("../Data.Function/index.js"),i=require("../Data.List.Types/index.js"),a=require("../Data.Ord/index.js"),c=require("../Data.Show/index.js"),f=require("../Data.Symbol/index.js"),s=require("../Data.Variant.Internal/index.js"),l=require("../Partial.Unsafe/index.js"),v=require("../Record.Unsafe/index.js"),d=require("../Type.Data.Row/index.js"),y=require("../Type.Data.RowList/index.js"),x=require("../Unsafe.Coerce/index.js"),p=function(n){return n},w=function(n){this.variantShows=n},m=function(n){this.variantOrds=n},P=function(n){this.variantEqs=n},R=function(n){this.variantBounded=n},V=function(n,r){this.VariantBounded0=n,this.variantBoundedEnums=r},L=function(n){return n.variantShows},q=function(n){return n.variantOrds},h=function(n){return n.variantEqs},E=function(n){return n.variantBoundedEnums},j=function(n){return n.variantBounded},B=function(n){return function(r){return(t={reflectSymbol:o.const(n.type)},function(n){return r(t)(n)})({})(f.SProxy.value)(n.value);var t}},C=new w(function(n){return i.Nil.value}),S=function(n){return function(r){return new w(function(t){return new i.Cons(c.show(r),L(n)(y.RLProxy.value))})}},T=function(n){return function(n){return function(r){return new c.Show(function(t){var u=s.variantTags(n)(y.RLProxy.value),e=L(r)(y.RLProxy.value),o=s.lookup("show")(t.type)(u)(e)(t.value);return"(inj @"+c.show(c.showString)(t.type)+" "+o+")"})}}},b=new m(function(n){return i.Nil.value}),D=function(n){return function(r){return new m(function(t){return new i.Cons(a.compare(r),q(n)(y.RLProxy.value))})}},g=function(n){return function(n){return function(n){return function(n){return function(r){return function(t){return v.unsafeHas(t.type)(n)?v.unsafeGet(t.type)(n)(t.value):r(t)}}}}}},k=function(n){return function(n){return function(r){return function(t){return function(u){return function(e){return e.type===f.reflectSymbol(n)(r)?t(e.value):u(e)}}}}}},N=function(t){return function(u){return function(e){return function(i){return k(t)(u)(i)(n.pure(e.Applicative0()))(o.const(r.empty(e.Plus1())))}}}},O=function(n){return function(n){return function(r){return function(t){return{type:f.reflectSymbol(n)(r),value:t}}}}},U=function(n){return n(function(n){return function(r){return O(r)(n)}})},F=function(n){return x.unsafeCoerce},A=new P(function(n){return i.Nil.value}),W=function(n){return function(r){return new P(function(t){return new i.Cons(e.eq(r),h(n)(y.RLProxy.value))})}},G=function(n){return function(n){return function(r){return new e.Eq(function(t){return function(u){var e=s.variantTags(n)(y.RLProxy.value),o=h(r)(y.RLProxy.value);return s.lookupEq(e)(o)(t)(u)}})}}},H=function(n){return function(r){return function(t){return function(u){return new a.Ord(function(){return G(n)(r)(t)},function(n){return function(t){var e=s.variantTags(r)(y.RLProxy.value),o=q(u)(y.RLProxy.value);return s.lookupOrd(e)(o)(n)(t)}})}}}},I=function(n){return function(r){return function(t){return function(e){return function(o){return new u.Enum(function(){return H(n)(r)(t)(e)},function(n){var t=s.variantTags(r)(y.RLProxy.value),u=E(o)(y.RLProxy.value),e=j(o.VariantBounded0())(y.RLProxy.value);return s.lookupPred(n)(t)(e)(u)},function(n){var t=s.variantTags(r)(y.RLProxy.value),u=E(o)(y.RLProxy.value),e=j(o.VariantBounded0())(y.RLProxy.value);return s.lookupSucc(n)(t)(e)(u)})}}}}},M=function(n){return function(r){return n}},_=function(n){return function(r){return function(t){return s.contractWith(r)(n)(d.RProxy.value)(d.RProxy.value)(t.type)(t)}}},z=function(n){return l.unsafeCrashWith("Data.Variant: pattern match failure ["+n.type+"]")},J=function(n){return function(r){return function(t){return function(u){return g(n)(r)(t)(u)(z)}}}},K=new R(function(n){return i.Nil.value}),Q=new V(function(){return K},function(n){return i.Nil.value}),X=function(n){return function(r){return new R(function(u){var e={top:t.top(r),bottom:t.bottom(r)};return new i.Cons(e,j(n)(y.RLProxy.value))})}},Y=function(n){return function(r){return new V(function(){return X(n.VariantBounded0())(r.Bounded0())},function(t){var e={pred:u.pred(r.Enum1()),succ:u.succ(r.Enum1()),fromEnum:u.fromEnum(r),toEnum:u.toEnum(r),cardinality:u.cardinality(r)};return new i.Cons(e,E(n)(y.RLProxy.value))})}},Z=function(n){return function(r){return function(u){return function(e){return function(o){return new t.Bounded(function(){return H(n)(r)(u)(e)},(i=s.variantTags(r)(y.RLProxy.value),a=j(o)(y.RLProxy.value),s.VariantRep(s.lookupFirst("bottom")(function(n){return n.bottom})(i)(a))),function(){var n=s.variantTags(r)(y.RLProxy.value),t=j(o)(y.RLProxy.value);return s.VariantRep(s.lookupLast("top")(function(n){return n.top})(n)(t))}());var i,a}}}}},$=function(n){return function(r){return function(t){return function(e){return function(o){return new u.BoundedEnum(function(){return Z(n)(r)(t)(e)(o.VariantBounded0())},function(){return I(n)(r)(t)(e)(o)},u.Cardinality(s.lookupCardinality(E(o)(y.RLProxy.value))),function(n){var t=s.variantTags(r)(y.RLProxy.value),u=E(o)(y.RLProxy.value);return s.lookupFromEnum(n)(t)(u)},function(n){var t=s.variantTags(r)(y.RLProxy.value),u=E(o)(y.RLProxy.value);return s.lookupToEnum(n)(t)(u)})}}}}};module.exports={inj:O,prj:N,on:k,onMatch:g,case_:z,match:J,default:M,expand:F,contract:_,Unvariant:p,unvariant:B,revariant:U,VariantEqs:P,variantEqs:h,VariantOrds:m,variantOrds:q,VariantShows:w,variantShows:L,VariantBounded:R,variantBounded:j,VariantBoundedEnums:V,variantBoundedEnums:E,eqVariantNil:A,eqVariantCons:W,eqVariant:G,boundedVariantNil:K,boundedVariantCons:X,boundedVariant:Z,enumVariantNil:Q,enumVariantCons:Y,enumVariant:I,boundedEnumVariant:$,ordVariantNil:b,ordVariantCons:D,ordVariant:H,showVariantNil:C,showVariantCons:S,showVariant:T};
+},{"../Control.Applicative/index.js":"qYya","../Control.Plus/index.js":"oMBg","../Data.Bounded/index.js":"kcUU","../Data.Enum/index.js":"oOsU","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.List.Types/index.js":"Xxuc","../Data.Ord/index.js":"r4Vb","../Data.Show/index.js":"mFY7","../Data.Symbol/index.js":"4oJQ","../Data.Variant.Internal/index.js":"kYoO","../Partial.Unsafe/index.js":"aoR+","../Record.Unsafe/index.js":"KG04","../Type.Data.Row/index.js":"ukdD","../Type.Data.RowList/index.js":"XaXP","../Unsafe.Coerce/index.js":"ETUV"}],"idq0":[function(require,module,exports) {
+"use strict";var n=function(){var n={},r="Pure",e="Throw",t="Catch",u="Sync",i="Async",l="Bind",o="Bracket",f="Fork",c="Sequential",a="Map",s="Apply",_="Alt",h="Cons",w="Resume",p="Release",k="Finalizer",d="Finalized",v="Forked";function m(n,r,e,t){this.tag=n,this._1=r,this._2=e,this._3=t}function b(n){var r=function(r,e,t){return new m(n,r,e,t)};return r.tag=n,r}function g(n){return new m(r,void 0)}function y(n){try{n()}catch(r){setTimeout(function(){throw r},0)}}function A(n,r,e){try{return r(e())}catch(t){return n(t)}}function P(n,r,e){try{return r(e)()}catch(t){return e(n(t))(),g}}var x=function(){var n=1024,r=0,e=0,t=new Array(n),u=!1;function i(){var i;for(u=!0;0!==r;)r--,i=t[e],t[e]=void 0,e=(e+1)%n,i();u=!1}return{isDraining:function(){return u},enqueue:function(l){var o;r===n&&(o=u,i(),u=o),t[(e+r)%n]=l,r++,u||i()}}}();var L=0,S=1,F=2,T=3,R=4,B=5,C=6;function q(n,a,s){var _=0,v=L,b=s,g=null,E=null,M=null,I=null,z=null,D=0,j=0,Y=null,G=!0;function H(s){for(var j,J,K;;)switch(j=null,J=null,K=null,v){case F:v=S,b=M(b),null===I?M=null:(M=I._1,I=I._2);break;case T:n.isLeft(b)?(v=B,g=b,b=null):null===M?v=B:(v=F,b=n.fromRight(b));break;case S:switch(b.tag){case l:M&&(I=new m(h,M,I)),M=b._2,v=S,b=b._1;break;case r:null===M?(v=B,b=n.right(b._1)):(v=F,b=b._1);break;case u:v=T,b=A(n.left,n.right,b._1);break;case i:return v=R,void(b=P(n.left,b._1,function(n){return function(){_===s&&(_++,x.enqueue(function(){_===s+1&&(v=T,b=n,H(_))}))}}));case e:v=B,g=n.left(b._1),b=null;break;case t:z=new m(h,b,null===M?z:new m(h,new m(w,M,I),z,E),E),M=null,I=null,v=S,b=b._1;break;case o:D++,z=new m(h,b,null===M?z:new m(h,new m(w,M,I),z,E),E),M=null,I=null,v=S,b=b._1;break;case f:v=T,j=q(n,a,b._2),a&&a.register(j),b._1&&j.run(),b=n.right(j);break;case c:v=S,b=O(n,a,b._1)}break;case B:if(M=null,I=null,null===z)v=C,b=E||g||b;else switch(j=z._3,K=z._1,z=z._2,K.tag){case t:E&&E!==j&&0===D?v=B:g&&(v=S,b=K._2(n.fromLeft(g)),g=null);break;case w:E&&E!==j&&0===D||g?v=B:(M=K._1,I=K._2,v=F,b=n.fromRight(b));break;case o:D--,null===g&&(J=n.fromRight(b),z=new m(h,new m(p,K._2,J),z,j),(E===j||D>0)&&(v=S,b=K._3(J)));break;case p:z=new m(h,new m(d,b,g),z,E),v=S,b=E&&E!==j&&0===D?K._1.killed(n.fromLeft(E))(K._2):g?K._1.failed(n.fromLeft(g))(K._2):K._1.completed(n.fromRight(b))(K._2),g=null,D++;break;case k:D++,z=new m(h,new m(d,b,g),z,E),v=S,b=K._1;break;case d:D--,v=B,b=K._1,g=K._2}break;case C:for(var N in Y)Y.hasOwnProperty(N)&&(G=G&&Y[N].rethrow,y(Y[N].handler(b)));return Y=null,void(E&&g?setTimeout(function(){throw n.fromLeft(g)},0):n.isLeft(b)&&G&&setTimeout(function(){if(G)throw n.fromLeft(b)},0));case L:v=S;break;case R:return}}function J(n){return function(){if(v===C)return G=G&&n.rethrow,n.handler(b)(),function(){};var r=j++;return(Y=Y||{})[r]=n,function(){null!==Y&&delete Y[r]}}}return{kill:function(r,e){return function(){if(v===C)return e(n.right(void 0))(),function(){};var t=J({rethrow:!1,handler:function(){return e(n.right(void 0))}})();switch(v){case L:E=n.left(r),v=C,b=E,H(_);break;case R:null===E&&(E=n.left(r)),0===D&&(v===R&&(z=new m(h,new m(k,b(r)),z,E)),v=B,b=null,g=null,H(++_));break;default:null===E&&(E=n.left(r)),0===D&&(v=B,b=null,g=null)}return t}},join:function(n){return function(){var r=J({rethrow:!1,handler:n})();return v===L&&H(_),r}},onComplete:J,isSuspended:function(){return v===L},run:function(){v===L&&(x.isDraining()?H(_):x.enqueue(function(){H(_)}))}}}function E(r,e,t,u){var l=0,o={},f=0,c={},w=new Error("[ParAff] Early exit"),p=null,k=n;function d(e,t,u){var i,l,f=t,c=null,w=null,p=0,k={};n:for(;;)switch(i=null,f.tag){case v:if(f._3===n&&(i=o[f._1],k[p++]=i.kill(e,function(n){return function(){0===--p&&u(n)()}})),null===c)break n;f=c._2,null===w?c=null:(c=w._1,w=w._2);break;case a:f=f._2;break;case s:case _:c&&(w=new m(h,c,w)),c=f,f=f._1}if(0===p)u(r.right(void 0))();else for(l=0,i=p;l<i;l++)k[l]=k[l]();return k}function b(e){return function(t){return function(){delete o[e._1],e._3=t,function e(t,i,l){var o,h,k,v,m,b;for(r.isLeft(t)?(o=t,h=null):(h=t,o=null);;){if(k=null,v=null,m=null,b=null,null!==p)return;if(null===i)return void u(o||h)();if(i._3!==n)return;switch(i.tag){case a:null===o?(i._3=r.right(i._1(r.fromRight(h))),h=i._3):i._3=o;break;case s:if(k=i._1._3,v=i._2._3,o){if(i._3=o,m=!0,b=f++,c[b]=d(w,o===k?i._2:i._1,function(){return function(){delete c[b],m?m=!1:null===l?e(o,null,null):e(o,l._1,l._2)}}),m)return void(m=!1)}else{if(k===n||v===n)return;h=r.right(r.fromRight(k)(r.fromRight(v))),i._3=h}break;case _:if(k=i._1._3,v=i._2._3,k===n&&r.isLeft(v)||v===n&&r.isLeft(k))return;if(k!==n&&r.isLeft(k)&&v!==n&&r.isLeft(v))o=h===k?v:k,h=null,i._3=o;else if(i._3=h,m=!0,b=f++,c[b]=d(w,h===k?i._2:i._1,function(){return function(){delete c[b],m?m=!1:null===l?e(h,null,null):e(h,l._1,l._2)}}),m)return void(m=!1)}null===l?i=null:(i=l._1,l=l._2)}}(t,e._2._1,e._2._2)}}}return function(){var u,i,f=S,c=t,w=null,p=null;n:for(;;)switch(u=null,i=null,f){case S:switch(c.tag){case a:w&&(p=new m(h,w,p)),w=new m(a,c._1,n,n),c=c._2;break;case s:w&&(p=new m(h,w,p)),w=new m(s,n,c._2,n),c=c._1;break;case _:w&&(p=new m(h,w,p)),w=new m(_,n,c._2,n),c=c._1;break;default:i=l++,f=B,u=c,c=new m(v,i,new m(h,w,p),n),(u=q(r,e,u)).onComplete({rethrow:!1,handler:b(c)})(),o[i]=u,e&&e.register(u)}break;case B:if(null===w)break n;w._1===n?(w._1=c,f=S,c=w._2,w._2=n):(w._2=c,c=w,null===p?w=null:(w=p._1,p=p._2))}for(k=c,i=0;i<l;i++)o[i].run()}(),function(n){return new m(i,function(e){return function(){return function(n,e){var t;for(var u in p=r.left(n),c)if(c.hasOwnProperty(u))for(u in t=c[u])t.hasOwnProperty(u)&&t[u]();c=null;var l=d(n,k,e);return function(n){return new m(i,function(n){return function(){for(var n in l)l.hasOwnProperty(n)&&l[n]();return g}})}}(n,e)}})}}function O(n,r,e){return new m(i,function(t){return function(){return E(n,r,e,t)}})}return m.EMPTY=n,m.Pure=b(r),m.Throw=b(e),m.Catch=b(t),m.Sync=b(u),m.Async=b(i),m.Bind=b(l),m.Bracket=b(o),m.Fork=b(f),m.Seq=b(c),m.ParMap=b(a),m.ParApply=b(s),m.ParAlt=b(_),m.Fiber=q,m.Supervisor=function(n){var r={},e=0,t=0;return{register:function(n){var u=e++;n.onComplete({rethrow:!0,handler:function(n){return function(){t--,delete r[u]}}}),r[u]=n,t++},isEmpty:function(){return 0===t},killAll:function(i,l){return function(){if(0===t)return l();var o=0,f={};function c(e){f[e]=r[e].kill(i,function(r){return function(){delete f[e],o--,n.isLeft(r)&&n.fromLeft(r)&&setTimeout(function(){throw n.fromLeft(r)},0),0===o&&l()}})()}for(var a in r)r.hasOwnProperty(a)&&(o++,c(a));return r={},e=0,t=0,function(n){return new m(u,function(){for(var n in f)f.hasOwnProperty(n)&&f[n]()})}}}}},m.Scheduler=x,m.nonCanceler=g,m}();exports._pure=n.Pure,exports._throwError=n.Throw,exports._catchError=function(r){return function(e){return n.Catch(r,e)}},exports._map=function(r){return function(e){return e.tag===n.Pure.tag?n.Pure(r(e._1)):n.Bind(e,function(e){return n.Pure(r(e))})}},exports._bind=function(r){return function(e){return n.Bind(r,e)}},exports._fork=function(r){return function(e){return n.Fork(r,e)}},exports._liftEffect=n.Sync,exports._parAffMap=function(r){return function(e){return n.ParMap(r,e)}},exports._parAffApply=function(r){return function(e){return n.ParApply(r,e)}},exports._parAffAlt=function(r){return function(e){return n.ParAlt(r,e)}},exports.makeAff=n.Async,exports.generalBracket=function(r){return function(e){return function(t){return n.Bracket(r,e,t)}}},exports._makeFiber=function(r,e){return function(){return n.Fiber(r,null,e)}},exports._makeSupervisedFiber=function(r,e){return function(){var t=n.Supervisor(r);return{fiber:n.Fiber(r,t,e),supervisor:t}}},exports._killAll=function(n,r,e){return r.killAll(n,e)},exports._delay=function(){return function(r,e){return n.Async(function(t){return function(){var u,i,l=(u=e,i=t(r()),0===u&&"undefined"!=typeof setImmediate?setImmediate(i):setTimeout(i,u));return function(){return n.Sync(function(){return r((n=l,0===e&&"undefined"!=typeof clearImmediate?clearImmediate(n):clearTimeout(n)));var n})}}})}}(),exports._sequential=n.Seq;
+},{}],"XW2d":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),r=require("../Control.Bind/index.js"),u=require("../Control.Monad/index.js"),e=require("../Control.Monad.Cont.Class/index.js"),o=require("../Control.Monad.Reader.Class/index.js"),i=require("../Control.Monad.State.Class/index.js"),c=require("../Control.Monad.Trans.Class/index.js"),f=require("../Data.Function/index.js"),a=require("../Data.Functor/index.js"),d=require("../Data.Newtype/index.js"),s=require("../Effect.Class/index.js"),C=function(n){return n},l=function(n){return function(t){return function(r){return t(n(r))}}},p=function(n){return function(t){return n(t)}},M=new d.Newtype(function(n){return n},C),T=new c.MonadTrans(function(n){return function(t){return function(u){return r.bind(n.Bind1())(t)(u)}}}),w=function(n){return function(t){return function(r){return n(t(r))}}},x=function(n){return new a.Functor(function(n){return function(t){return function(r){return t(function(t){return r(n(t))})}}})},j=function(n){return new t.Apply(function(){return x(n.Functor0())},function(n){return function(t){return function(r){return n(function(n){return t(function(t){return r(n(t))})})}}})},q=function(n){return new r.Bind(function(){return j(n.Apply0())},function(n){return function(t){return function(r){return n(function(n){return t(n)(r)})}}})},A=function(t){return new n.Applicative(function(){return j(t.Apply0())},function(n){return function(t){return t(n)}})},m=function(n){return new u.Monad(function(){return A(n.Applicative0())},function(){return q(n.Bind1())})},v=function(n){return new o.MonadAsk(function(){return m(n.Monad0())},c.lift(T)(n.Monad0())(o.ask(n)))},y=function(n){return new o.MonadReader(function(){return v(n.MonadAsk0())},function(t){return function(u){return function(e){return r.bind(n.MonadAsk0().Monad0().Bind1())(o.ask(n.MonadAsk0()))(function(r){return o.local(n)(t)(u((i=o.local(n)(f.const(r)),function(n){return i(e(n))})));var i})}}})},k=function(n){return new e.MonadCont(function(){return m(n)},function(n){return function(t){return n(function(n){return function(r){return t(n)}})(t)}})},B=function(n){return new s.MonadEffect(function(){return m(n.Monad0())},(t=c.lift(T)(n.Monad0()),r=s.liftEffect(n),function(n){return t(r(n))}));var t,r},E=function(n){return new i.MonadState(function(){return m(n.Monad0())},(t=c.lift(T)(n.Monad0()),r=i.state(n),function(n){return t(r(n))}));var t,r};module.exports={ContT:C,runContT:p,mapContT:w,withContT:l,newtypeContT:M,monadContContT:k,functorContT:x,applyContT:j,applicativeContT:A,bindContT:q,monadContT:m,monadTransContT:T,monadEffectContT:B,monadAskContT:v,monadReaderContT:y,monadStateContT:E};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Control.Monad.Cont.Class/index.js":"IpNh","../Control.Monad.Reader.Class/index.js":"c2ZJ","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.Trans.Class/index.js":"5tIR","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Effect.Class/index.js":"dWtH"}],"UUIS":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),e=require("../Control.Alternative/index.js"),r=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),o=require("../Control.Bind/index.js"),u=require("../Control.Category/index.js"),i=require("../Control.Monad/index.js"),a=require("../Control.Monad.Cont.Class/index.js"),c=require("../Control.Monad.Error.Class/index.js"),l=require("../Control.Monad.Reader.Class/index.js"),f=require("../Control.Monad.Rec.Class/index.js"),d=require("../Control.Monad.State.Class/index.js"),M=require("../Control.Monad.Trans.Class/index.js"),s=require("../Control.Monad.Writer.Class/index.js"),p=require("../Control.MonadPlus/index.js"),w=require("../Control.MonadZero/index.js"),T=require("../Control.Plus/index.js"),y=require("../Data.Functor/index.js"),b=require("../Data.Maybe/index.js"),v=require("../Data.Newtype/index.js"),C=require("../Data.Tuple/index.js"),m=require("../Effect.Class/index.js"),x=function(n){return n},j=function(n){return n},q=new v.Newtype(function(n){return n},x),A=new M.MonadTrans(function(n){var e=i.liftM1(n)(b.Just.create);return function(n){return x(e(n))}}),h=function(n){return function(e){return n(e)}},E=function(n){return new y.Functor(function(e){return function(r){return y.map(n)(y.map(b.functorMaybe)(e))(r)}})},g=function(n){return new i.Monad(function(){return J(n)},function(){return N(n)})},N=function(n){return new o.Bind(function(){return B(n)},function(e){return function(t){return o.bind(n.Bind1())(e)(function(e){if(e instanceof b.Nothing)return r.pure(n.Applicative0())(b.Nothing.value);if(e instanceof b.Just)return t(e.value0);throw new Error("Failed pattern match at Control.Monad.Maybe.Trans (line 54, column 11 - line 56, column 42): "+[e.constructor.name])})}})},B=function(n){return new t.Apply(function(){return E(n.Bind1().Apply0().Functor0())},i.ap(g(n)))},J=function(n){return new r.Applicative(function(){return B(n)},(e=r.pure(n.Applicative0()),function(n){return x(e(b.Just.create(n)))}));var e},F=function(n){return new l.MonadAsk(function(){return g(n.Monad0())},M.lift(A)(n.Monad0())(l.ask(n)))},D=function(n){return new l.MonadReader(function(){return F(n.MonadAsk0())},function(e){return h(l.local(n)(e))})},R=function(n){return new a.MonadCont(function(){return g(n.Monad0())},function(e){return x(a.callCC(n)(function(n){return e(function(e){return x(n(new b.Just(e)))})}))})},P=function(n){return new m.MonadEffect(function(){return g(n.Monad0())},(e=M.lift(A)(n.Monad0()),r=m.liftEffect(n),function(n){return e(r(n))}));var e,r},k=function(n){return new f.MonadRec(function(){return g(n.Monad0())},function(e){var t=f.tailRecM(n)(function(t){var u=e(t);return o.bind(n.Monad0().Bind1())(u)(function(e){return r.pure(n.Monad0().Applicative0())(function(){if(e instanceof b.Nothing)return new f.Done(b.Nothing.value);if(e instanceof b.Just&&e.value0 instanceof f.Loop)return new f.Loop(e.value0.value0);if(e instanceof b.Just&&e.value0 instanceof f.Done)return new f.Done(new b.Just(e.value0.value0));throw new Error("Failed pattern match at Control.Monad.Maybe.Trans (line 84, column 16 - line 87, column 43): "+[e.constructor.name])}())})});return function(n){return x(t(n))}})},S=function(n){return new d.MonadState(function(){return g(n.Monad0())},function(e){return M.lift(A)(n.Monad0())(d.state(n)(e))})},W=function(n){return new s.MonadTell(function(){return g(n.Monad0())},(e=M.lift(A)(n.Monad0()),r=s.tell(n),function(n){return e(r(n))}));var e,r},Z=function(n){return new s.MonadWriter(function(){return W(n.MonadTell0())},h(function(e){return o.bind(n.MonadTell0().Monad0().Bind1())(s.listen(n)(e))(function(e){return r.pure(n.MonadTell0().Monad0().Applicative0())(y.map(b.functorMaybe)(function(n){return new C.Tuple(n,e.value1)})(e.value0))})}),h(function(e){return s.pass(n)(o.bind(n.MonadTell0().Monad0().Bind1())(e)(function(e){return r.pure(n.MonadTell0().Monad0().Applicative0())(function(){if(e instanceof b.Nothing)return new C.Tuple(b.Nothing.value,u.identity(u.categoryFn));if(e instanceof b.Just)return new C.Tuple(new b.Just(e.value0.value0),e.value0.value1);throw new Error("Failed pattern match at Control.Monad.Maybe.Trans (line 121, column 10 - line 123, column 43): "+[e.constructor.name])}())}))}))},L=function(n){return new c.MonadThrow(function(){return g(n.Monad0())},function(e){return M.lift(A)(n.Monad0())(c.throwError(n)(e))})},z=function(n){return new c.MonadError(function(){return L(n.MonadThrow0())},function(e){return function(r){return x(c.catchError(n)(e)(function(n){return r(n)}))}})},G=function(e){return new n.Alt(function(){return E(e.Bind1().Apply0().Functor0())},function(n){return function(t){return o.bind(e.Bind1())(n)(function(n){return n instanceof b.Nothing?t:r.pure(e.Applicative0())(n)})}})},H=function(n){return new T.Plus(function(){return G(n)},r.pure(n.Applicative0())(b.Nothing.value))},I=function(n){return new e.Alternative(function(){return J(n)},function(){return H(n)})},K=function(n){return new w.MonadZero(function(){return I(n)},function(){return g(n)})},O=function(n){return new p.MonadPlus(function(){return K(n)})};module.exports={MaybeT:x,runMaybeT:j,mapMaybeT:h,newtypeMaybeT:q,functorMaybeT:E,applyMaybeT:B,applicativeMaybeT:J,bindMaybeT:N,monadMaybeT:g,monadTransMaybeT:A,altMaybeT:G,plusMaybeT:H,alternativeMaybeT:I,monadPlusMaybeT:O,monadZeroMaybeT:K,monadRecMaybeT:k,monadEffectMaybe:P,monadContMaybeT:R,monadThrowMaybeT:L,monadErrorMaybeT:z,monadAskMaybeT:F,monadReaderMaybeT:D,monadStateMaybeT:S,monadTellMaybeT:W,monadWriterMaybeT:Z};
+},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad/index.js":"U/Ix","../Control.Monad.Cont.Class/index.js":"IpNh","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Reader.Class/index.js":"c2ZJ","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.Trans.Class/index.js":"5tIR","../Control.Monad.Writer.Class/index.js":"gxgA","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.Tuple/index.js":"II/O","../Effect.Class/index.js":"dWtH"}],"uvht":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),r=require("../Control.Alternative/index.js"),e=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),o=require("../Control.Monad/index.js"),i=require("../Control.Monad.Cont.Class/index.js"),a=require("../Control.Monad.Error.Class/index.js"),c=require("../Control.Monad.Reader.Class/index.js"),d=require("../Control.Monad.Rec.Class/index.js"),f=require("../Control.Monad.State.Class/index.js"),l=require("../Control.Monad.Trans.Class/index.js"),s=require("../Control.Monad.Writer.Class/index.js"),p=require("../Control.MonadPlus/index.js"),M=require("../Control.MonadZero/index.js"),T=require("../Control.Plus/index.js"),R=require("../Data.Distributive/index.js"),w=require("../Data.Function/index.js"),C=require("../Data.Functor/index.js"),m=require("../Data.Monoid/index.js"),x=require("../Data.Newtype/index.js"),j=require("../Data.Semigroup/index.js"),q=require("../Effect.Class/index.js"),v=function(n){return n},A=function(n){return function(r){return function(e){return r(n(e))}}},y=function(n){return n},E=new x.Newtype(function(n){return n},v),D=new l.MonadTrans(function(n){return function(n){return v(w.const(n))}}),b=function(n){return function(r){return function(e){return n(r(e))}}},F=function(n){return new C.Functor((r=C.map(n),function(n){return b(r(n))}));var r},h=function n(r){return new R.Distributive(function(){return F(r.Functor0())},function(e){return function(t){var u=R.distribute(n(r))(e),o=C.map(e)(t);return function(n){return u(o(n))}}},function(n){return function(e){return function(t){return R.collect(r)(n)(function(n){return n(t)})(e)}}})},P=function(n){return new t.Apply(function(){return F(n.Functor0())},function(r){return function(e){return function(u){return t.apply(n)(r(u))(e(u))}}})},S=function(n){return new u.Bind(function(){return P(n.Apply0())},function(r){return function(e){return function(t){return u.bind(n)(r(t))(function(n){return e(n)(t)})}}})},g=function(n){return function(r){return new j.Semigroup(t.lift2(P(n))(j.append(r)))}},B=function(n){return new e.Applicative(function(){return P(n.Apply0())},(r=e.pure(n),function(n){return v(w.const(r(n)))}));var r},Z=function(n){return new o.Monad(function(){return B(n.Applicative0())},function(){return S(n.Bind1())})},W=function(n){return new c.MonadAsk(function(){return Z(n)},e.pure(n.Applicative0()))},k=function(n){return new c.MonadReader(function(){return W(n)},A)},N=function(n){return new i.MonadCont(function(){return Z(n.Monad0())},function(r){return function(e){return i.callCC(n)(function(n){return r(function(r){return v(w.const(n(r)))})(e)})}})},z=function(n){return new q.MonadEffect(function(){return Z(n.Monad0())},(r=l.lift(D)(n.Monad0()),e=q.liftEffect(n),function(n){return r(e(n))}));var r,e},G=function(n){return new d.MonadRec(function(){return Z(n.Monad0())},function(r){return function(t){return function(o){return d.tailRecM(n)(function(t){return function(o){var i=r(o);return u.bindFlipped(n.Monad0().Bind1())(e.pure(n.Monad0().Applicative0()))(i(t))}}(o))(t)}}})},H=function(n){return new f.MonadState(function(){return Z(n.Monad0())},(r=l.lift(D)(n.Monad0()),e=f.state(n),function(n){return r(e(n))}));var r,e},I=function(n){return new s.MonadTell(function(){return Z(n.Monad0())},(r=l.lift(D)(n.Monad0()),e=s.tell(n),function(n){return r(e(n))}));var r,e},J=function(n){return new s.MonadWriter(function(){return I(n.MonadTell0())},b(s.listen(n)),b(s.pass(n)))},K=function(n){return new a.MonadThrow(function(){return Z(n.Monad0())},(r=l.lift(D)(n.Monad0()),e=a.throwError(n),function(n){return r(e(n))}));var r,e},L=function(n){return new a.MonadError(function(){return K(n.MonadThrow0())},function(r){return function(e){return function(t){return a.catchError(n)(r(t))(function(n){return e(n)(t)})}}})},O=function(n){return function(r){return new m.Monoid(function(){return g(n.Apply0())(r.Semigroup0())},e.pure(B(n))(m.mempty(r)))}},Q=function(r){return new n.Alt(function(){return F(r.Functor0())},function(e){return function(t){return function(u){return n.alt(r)(e(u))(t(u))}}})},U=function(n){return new T.Plus(function(){return Q(n.Alt0())},w.const(T.empty(n)))},V=function(n){return new r.Alternative(function(){return B(n.Applicative0())},function(){return U(n.Plus1())})},X=function(n){return new M.MonadZero(function(){return V(n.Alternative1())},function(){return Z(n.Monad0())})},Y=function(n){return new p.MonadPlus(function(){return X(n.MonadZero0())})};module.exports={ReaderT:v,runReaderT:y,withReaderT:A,mapReaderT:b,newtypeReaderT:E,functorReaderT:F,applyReaderT:P,applicativeReaderT:B,altReaderT:Q,plusReaderT:U,alternativeReaderT:V,bindReaderT:S,monadReaderT:Z,monadZeroReaderT:X,semigroupReaderT:g,monoidReaderT:O,monadPlusReaderT:Y,monadTransReaderT:D,monadEffectReader:z,monadContReaderT:N,monadThrowReaderT:K,monadErrorReaderT:L,monadAskReaderT:W,monadReaderReaderT:k,monadStateReaderT:H,monadTellReaderT:I,monadWriterReaderT:J,distributiveReaderT:h,monadRecReaderT:G};
+},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Control.Monad.Cont.Class/index.js":"IpNh","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Reader.Class/index.js":"c2ZJ","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.Trans.Class/index.js":"5tIR","../Control.Monad.Writer.Class/index.js":"gxgA","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Distributive/index.js":"8PTu","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Effect.Class/index.js":"dWtH"}],"VAds":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),r=require("../Control.Alternative/index.js"),e=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),o=require("../Control.Monad/index.js"),i=require("../Control.Monad.Cont.Class/index.js"),a=require("../Control.Monad.Error.Class/index.js"),c=require("../Control.Monad.Reader.Class/index.js"),l=require("../Control.Monad.Rec.Class/index.js"),f=require("../Control.Monad.State.Class/index.js"),d=require("../Control.Monad.Trans.Class/index.js"),p=require("../Control.Monad.Writer.Class/index.js"),s=require("../Control.MonadPlus/index.js"),v=require("../Control.MonadZero/index.js"),T=require("../Control.Plus/index.js"),w=require("../Data.Functor/index.js"),M=require("../Data.Monoid/index.js"),m=require("../Data.Newtype/index.js"),C=require("../Data.Semigroup/index.js"),W=require("../Data.Tuple/index.js"),x=require("../Data.Unit/index.js"),j=require("../Effect.Class/index.js"),q=function(n){return n},A=function(n){return n},y=new m.Newtype(function(n){return n},q),E=function(n){return new d.MonadTrans(function(r){return function(t){return u.bind(r.Bind1())(t)(function(t){return e.pure(r.Applicative0())(new W.Tuple(t,M.mempty(n)))})}})},D=function(n){return function(r){return n(r)}},S=function(n){return new w.Functor(function(r){return D(w.map(n)(function(n){return new W.Tuple(r(n.value0),n.value1)}))})},h=function(n){return function(r){return w.map(n)(W.snd)(r)}},B=function(n){return function(r){return new t.Apply(function(){return S(r.Functor0())},function(e){return function(u){return t.apply(r)(w.map(r.Functor0())(function(r){return function(e){return new W.Tuple(r.value0(e.value0),C.append(n)(r.value1)(e.value1))}})(e))(u)}})}},F=function(n){return function(r){return new u.Bind(function(){return B(n)(r.Apply0())},function(e){return function(t){return q(u.bind(r)(e)(function(e){var u=t(e.value0);return w.map(r.Apply0().Functor0())(function(r){return new W.Tuple(r.value0,C.append(n)(e.value1)(r.value1))})(u)}))}})}},R=function(n){return function(r){return new e.Applicative(function(){return B(n.Semigroup0())(r.Apply0())},function(t){return q(e.pure(r)(new W.Tuple(t,M.mempty(n))))})}},b=function(n){return function(r){return new o.Monad(function(){return R(n)(r.Applicative0())},function(){return F(n.Semigroup0())(r.Bind1())})}},P=function(n){return function(r){return new c.MonadAsk(function(){return b(n)(r.Monad0())},d.lift(E(n))(r.Monad0())(c.ask(r)))}},g=function(n){return function(r){return new c.MonadReader(function(){return P(n)(r.MonadAsk0())},function(n){return D(c.local(r)(n))})}},k=function(n){return function(r){return new i.MonadCont(function(){return b(n)(r.Monad0())},function(e){return q(i.callCC(r)(function(r){return e(function(e){return q(r(new W.Tuple(e,M.mempty(n))))})}))})}},Z=function(n){return function(r){return new j.MonadEffect(function(){return b(n)(r.Monad0())},(e=d.lift(E(n))(r.Monad0()),t=j.liftEffect(r),function(n){return e(t(n))}));var e,t}},L=function(n){return function(r){return new l.MonadRec(function(){return b(n)(r.Monad0())},function(t){return function(o){return q(l.tailRecM(r)(function(o){var i=t(o.value0);return u.bind(r.Monad0().Bind1())(i)(function(t){return e.pure(r.Monad0().Applicative0())(function(){if(t.value0 instanceof l.Loop)return new l.Loop(new W.Tuple(t.value0.value0,C.append(n.Semigroup0())(o.value1)(t.value1)));if(t.value0 instanceof l.Done)return new l.Done(new W.Tuple(t.value0.value0,C.append(n.Semigroup0())(o.value1)(t.value1)));throw new Error("Failed pattern match at Control.Monad.Writer.Trans (line 83, column 16 - line 85, column 47): "+[t.value0.constructor.name])}())})})(new W.Tuple(o,M.mempty(n))))}})}},N=function(n){return function(r){return new f.MonadState(function(){return b(n)(r.Monad0())},function(e){return d.lift(E(n))(r.Monad0())(f.state(r)(e))})}},U=function(n){return function(r){return new p.MonadTell(function(){return b(n)(r)},(t=e.pure(r.Applicative0()),u=W.Tuple.create(x.unit),function(n){return q(t(u(n)))}));var t,u}},z=function(n){return function(r){return new p.MonadWriter(function(){return U(n)(r)},function(n){return u.bind(r.Bind1())(n)(function(n){return e.pure(r.Applicative0())(new W.Tuple(new W.Tuple(n.value0,n.value1),n.value1))})},function(n){return u.bind(r.Bind1())(n)(function(n){return e.pure(r.Applicative0())(new W.Tuple(n.value0.value0,n.value0.value1(n.value1)))})})}},G=function(n){return function(r){return new a.MonadThrow(function(){return b(n)(r.Monad0())},function(e){return d.lift(E(n))(r.Monad0())(a.throwError(r)(e))})}},H=function(n){return function(r){return new a.MonadError(function(){return G(n)(r.MonadThrow0())},function(n){return function(e){return q(a.catchError(r)(n)(function(n){return e(n)}))}})}},I=function(r){return new n.Alt(function(){return S(r.Functor0())},function(e){return function(t){return n.alt(r)(e)(t)}})},J=function(n){return new T.Plus(function(){return I(n.Alt0())},T.empty(n))},K=function(n){return function(e){return new r.Alternative(function(){return R(n)(e.Applicative0())},function(){return J(e.Plus1())})}},O=function(n){return function(r){return new v.MonadZero(function(){return K(n)(r.Alternative1())},function(){return b(n)(r.Monad0())})}},Q=function(n){return function(r){return new s.MonadPlus(function(){return O(n)(r.MonadZero0())})}};module.exports={WriterT:q,runWriterT:A,execWriterT:h,mapWriterT:D,newtypeWriterT:y,functorWriterT:S,applyWriterT:B,applicativeWriterT:R,altWriterT:I,plusWriterT:J,alternativeWriterT:K,bindWriterT:F,monadWriterT:b,monadRecWriterT:L,monadZeroWriterT:O,monadPlusWriterT:Q,monadTransWriterT:E,monadEffectWriter:Z,monadContWriterT:k,monadThrowWriterT:G,monadErrorWriterT:H,monadAskWriterT:P,monadReaderWriterT:g,monadStateWriterT:N,monadTellWriterT:U,monadWriterWriterT:z};
+},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Control.Monad.Cont.Class/index.js":"IpNh","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Reader.Class/index.js":"c2ZJ","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.Trans.Class/index.js":"5tIR","../Control.Monad.Writer.Class/index.js":"gxgA","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Tuple/index.js":"II/O","../Data.Unit/index.js":"NhVk","../Effect.Class/index.js":"dWtH"}],"FExJ":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),e=require("../Data.Eq/index.js"),t=require("../Data.Monoid/index.js"),u=require("../Data.Newtype/index.js"),p=require("../Data.Ord/index.js"),o=require("../Data.Semigroup/index.js"),i=require("../Data.Show/index.js"),c=require("../Unsafe.Coerce/index.js"),f=function(n){return n},a=function(n){return n},A=function(n){return n},d=function(n){return new i.Show(function(r){return"(App "+i.show(n)(r)+")"})},s=function(n){return function(e){return new o.Semigroup(function(t){return function(u){return r.lift2(n)(o.append(e))(t)(u)}})}},l=function(n){return n},q=new u.Newtype(function(n){return n},f),w=function(r){return function(e){return new t.Monoid(function(){return s(r.Apply0())(e.Semigroup0())},n.pure(r)(t.mempty(e)))}},m=function(n){return n},x=function(n){return n},h=function(n){return n},j=function(n){return n},y=c.unsafeCoerce,v=c.unsafeCoerce,D=function(n){return function(r){return n(r)}},E=function(n){return n},b=function(n){return n},C=function(n){return n},S=function(n){return n},g=function(n){return n},I=function(n){return function(r){return new e.Eq(function(t){return function(u){return e.eq1(n)(r)(t)(u)}})}},O=function(n){return function(r){return new p.Ord(function(){return I(n.Eq10())(r.Eq0())},function(e){return function(t){return p.compare1(n)(r)(e)(t)}})}},W=function(n){return new e.Eq1(function(r){return e.eq(I(n)(r))})},L=function(n){return new p.Ord1(function(){return W(n.Eq10())},function(r){return p.compare(O(n)(r))})},M=function(n){return n},N=function(n){return n},z=function(n){return n},P=function(n){return n},U=function(n){return n},Z=function(n){return n};module.exports={App:f,hoistApp:D,hoistLiftApp:v,hoistLowerApp:y,newtypeApp:q,eqApp:I,eq1App:W,ordApp:O,ord1App:L,showApp:d,semigroupApp:s,monoidApp:w,functorApp:b,functorWithIndexApp:E,applyApp:z,applicativeApp:P,bindApp:N,monadApp:h,altApp:Z,plusApp:l,alternativeApp:U,monadZeroApp:m,monadPlusApp:x,lazyApp:j,foldableApp:S,traversableApp:A,foldableWithIndexApp:C,traversableWithIndexApp:a,extendApp:g,comonadApp:M};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Data.Eq/index.js":"Pq4F","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Unsafe.Coerce/index.js":"ETUV"}],"z8br":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),r=require("../Control.Alternative/index.js"),t=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),u=require("../Control.Category/index.js"),o=require("../Control.Plus/index.js"),i=require("../Data.Eq/index.js"),c=require("../Data.Foldable/index.js"),f=require("../Data.FoldableWithIndex/index.js"),a=require("../Data.Function/index.js"),p=require("../Data.Functor/index.js"),l=require("../Data.Functor.App/index.js"),d=require("../Data.FunctorWithIndex/index.js"),s=require("../Data.Newtype/index.js"),x=require("../Data.Ord/index.js"),h=require("../Data.Show/index.js"),m=require("../Data.Traversable/index.js"),q=require("../Data.TraversableWithIndex/index.js"),F=require("../Data.Tuple/index.js"),C=function(n){return n},v=function(n){return new h.Show(function(r){return"(Compose "+h.show(n)(r)+")"})},w=new s.Newtype(function(n){return n},C),I=function(n){return function(r){return new p.Functor(function(t){return function(e){return C(p.map(n)(p.map(r)(t))(e))}})}},W=function(n){return function(r){return new d.FunctorWithIndex(function(){return I(n.Functor0())(r.Functor0())},function(t){return function(e){return C(d.mapWithIndex(n)((u=d.mapWithIndex(r),o=F.curry(t),function(n){return u(o(n))}))(e));var u,o}})}},y=function(n){return function(r){return new c.Foldable(function(t){return function(e){return function(u){return c.foldMap(n)(t)(c.foldMap(r)(t)(e))(u)}}},function(t){return function(e){return function(u){return c.foldl(n)(c.foldl(r)(t))(e)(u)}}},function(t){return function(e){return function(u){return c.foldr(n)(a.flip(c.foldr(r)(t)))(e)(u)}}})}},A=function(n){return function(r){return new f.FoldableWithIndex(function(){return y(n.Foldable0())(r.Foldable0())},function(t){return function(e){return function(u){return f.foldMapWithIndex(n)(t)((o=f.foldMapWithIndex(r)(t),i=F.curry(e),function(n){return o(i(n))}))(u);var o,i}}},function(t){return function(e){return function(u){return f.foldlWithIndex(n)((o=f.foldlWithIndex(r),i=F.curry(t),function(n){return o(i(n))}))(e)(u);var o,i}}},function(t){return function(e){return function(u){return f.foldrWithIndex(n)(function(n){return a.flip(f.foldrWithIndex(r)(F.curry(t)(n)))})(e)(u)}}})}},b=function n(r){return function(t){return new m.Traversable(function(){return y(r.Foldable1())(t.Foldable1())},function(){return I(r.Functor0())(t.Functor0())},function(e){return m.traverse(n(r)(t))(e)(u.identity(u.categoryFn))},function(n){return function(e){return function(u){return p.map(n.Apply0().Functor0())(C)(m.traverse(r)(n)(m.traverse(t)(n)(e))(u))}}})}},j=function(n){return function(r){return new q.TraversableWithIndex(function(){return A(n.FoldableWithIndex1())(r.FoldableWithIndex1())},function(){return W(n.FunctorWithIndex0())(r.FunctorWithIndex0())},function(){return b(n.Traversable2())(r.Traversable2())},function(t){return function(e){return function(u){return p.map(t.Apply0().Functor0())(C)(q.traverseWithIndex(n)(t)((o=q.traverseWithIndex(r)(t),i=F.curry(e),function(n){return o(i(n))}))(u));var o,i}}})}},D=function(n){return function(r){return function(t){return new i.Eq(function(e){return function(u){return i.eq1(n)(l.eqApp(r)(t))(l.hoistLiftApp(e))(l.hoistLiftApp(u))}})}}},E=function(n){return function(r){return function(t){return new x.Ord(function(){return D(n.Eq10())(r.Eq10())(t.Eq0())},function(e){return function(u){return x.compare1(n)(l.ordApp(r)(t))(l.hoistLiftApp(e))(l.hoistLiftApp(u))}})}}},T=function(n){return function(r){return new i.Eq1(function(t){return i.eq(D(n)(r)(t))})}},L=function(n){return function(r){return new x.Ord1(function(){return T(n.Eq10())(r.Eq10())},function(t){return x.compare(E(n)(r)(t))})}},M=function(n){return function(r){return function(t){return function(e){return r(p.map(n)(t)(e))}}}},O=function(n){return function(r){return new e.Apply(function(){return I(n.Functor0())(r.Functor0())},function(t){return function(u){return C(e.apply(n)(p.map(n.Functor0())(e.apply(r))(t))(u))}})}},P=function(n){return function(r){return new t.Applicative(function(){return O(n.Apply0())(r.Apply0())},(e=t.pure(n),u=t.pure(r),function(n){return C(e(u(n)))}));var e,u}},g=function(r){return function(t){return new n.Alt(function(){return I(r.Functor0())(t)},function(t){return function(e){return C(n.alt(r)(t)(e))}})}},N=function(n){return function(r){return new o.Plus(function(){return g(n.Alt0())(r)},o.empty(n))}},S=function(n){return function(t){return new r.Alternative(function(){return P(n.Applicative0())(t)},function(){return N(n.Plus1())(t.Apply0().Functor0())})}};module.exports={Compose:C,bihoistCompose:M,newtypeCompose:w,eqCompose:D,eq1Compose:T,ordCompose:E,ord1Compose:L,showCompose:v,functorCompose:I,functorWithIndexCompose:W,applyCompose:O,applicativeCompose:P,foldableCompose:y,foldableWithIndexCompose:A,traversableCompose:b,traversableWithIndexCompose:j,altCompose:g,plusCompose:N,alternativeCompose:S};
+},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Control.Plus/index.js":"oMBg","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Functor.App/index.js":"FExJ","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Tuple/index.js":"II/O"}],"NR5l":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),t=require("../Control.Alternative/index.js"),r=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),i=require("../Control.Bind/index.js"),u=require("../Control.Monad.Cont.Trans/index.js"),o=require("../Control.Monad.Except.Trans/index.js"),a=require("../Control.Monad.Maybe.Trans/index.js"),c=require("../Control.Monad.Reader.Trans/index.js"),f=require("../Control.Monad.Writer.Trans/index.js"),d=require("../Control.Plus/index.js"),l=require("../Data.Either/index.js"),p=require("../Data.Functor/index.js"),s=require("../Data.Functor.Compose/index.js"),C=require("../Data.Maybe/index.js"),M=require("../Data.Newtype/index.js"),v=require("../Data.Unit/index.js"),w=require("../Effect.Class/index.js"),m=require("../Effect.Ref/index.js"),T=function(n){return n},x=function(n,t,r,e){this.Applicative1=n,this.Monad0=t,this.parallel=r,this.sequential=e},q=function(n){return n.sequential},E=function(n){return n.parallel},j=new M.Newtype(function(n){return n},T),P=function(n){return function(t){return new x(function(){return f.applicativeWriterT(n)(t.Applicative1())},function(){return f.monadWriterT(n)(t.Monad0())},f.mapWriterT(E(t)),f.mapWriterT(q(t)))}},A=function(n){return new x(function(){return c.applicativeReaderT(n.Applicative1())},function(){return c.monadReaderT(n.Monad0())},c.mapReaderT(E(n)),c.mapReaderT(q(n)))},h=function(n){return new x(function(){return s.applicativeCompose(n.Applicative1())(C.applicativeMaybe)},function(){return a.monadMaybeT(n.Monad0())},function(t){return E(n)(t)},function(t){return q(n)(t)})},B=function(n){return new x(function(){return s.applicativeCompose(n.Applicative1())(l.applicativeEither)},function(){return o.monadExceptT(n.Monad0())},function(t){return E(n)(t)},function(t){return q(n)(t)})},b=function(n){return new x(function(){return D(n)},function(){return u.monadContT(n.Monad0())},T,function(n){return n})},y=function(n){return new p.Functor(function(t){var r=E(b(n)),e=p.map(u.functorContT(n.Monad0().Bind1().Apply0().Functor0()))(t),i=q(b(n));return function(n){return r(e(i(n)))}})},R=function(n){return new e.Apply(function(){return y(n)},function(t){return function(r){return T(function(e){return i.bind(n.Monad0().Bind1())(w.liftEffect(n)(m.new(C.Nothing.value)))(function(o){return i.bind(n.Monad0().Bind1())(w.liftEffect(n)(m.new(C.Nothing.value)))(function(a){return i.discard(i.discardUnit)(n.Monad0().Bind1())(u.runContT(t)(function(t){return i.bind(n.Monad0().Bind1())(w.liftEffect(n)(m.read(a)))(function(r){if(r instanceof C.Nothing)return w.liftEffect(n)(m.write(new C.Just(t))(o));if(r instanceof C.Just)return e(t(r.value0));throw new Error("Failed pattern match at Control.Parallel.Class (line 71, column 7 - line 73, column 26): "+[r.constructor.name])})}))(function(){return u.runContT(r)(function(t){return i.bind(n.Monad0().Bind1())(w.liftEffect(n)(m.read(o)))(function(r){if(r instanceof C.Nothing)return w.liftEffect(n)(m.write(new C.Just(t))(a));if(r instanceof C.Just)return e(r.value0(t));throw new Error("Failed pattern match at Control.Parallel.Class (line 77, column 7 - line 79, column 26): "+[r.constructor.name])})})})})})})}})},D=function(n){return new r.Applicative(function(){return R(n)},(t=E(b(n)),e=r.pure(u.applicativeContT(n.Monad0().Applicative0())),function(n){return t(e(n))}));var t,e},F=function(t){return new n.Alt(function(){return y(t)},function(n){return function(e){return T(function(o){return i.bind(t.Monad0().Bind1())(w.liftEffect(t)(m.new(!1)))(function(a){return i.discard(i.discardUnit)(t.Monad0().Bind1())(u.runContT(n)(function(n){return i.bind(t.Monad0().Bind1())(w.liftEffect(t)(m.read(a)))(function(e){return e?r.pure(t.Monad0().Applicative0())(v.unit):i.discard(i.discardUnit)(t.Monad0().Bind1())(w.liftEffect(t)(m.write(!0)(a)))(function(){return o(n)})})}))(function(){return u.runContT(e)(function(n){return i.bind(t.Monad0().Bind1())(w.liftEffect(t)(m.read(a)))(function(e){return e?r.pure(t.Monad0().Applicative0())(v.unit):i.discard(i.discardUnit)(t.Monad0().Bind1())(w.liftEffect(t)(m.write(!0)(a)))(function(){return o(n)})})})})})})}})},N=function(n){return new d.Plus(function(){return F(n)},T(function(t){return r.pure(n.Monad0().Applicative0())(v.unit)}))},W=function(n){return new t.Alternative(function(){return D(n)},function(){return N(n)})};module.exports={parallel:E,sequential:q,Parallel:x,ParCont:T,monadParExceptT:B,monadParReaderT:A,monadParWriterT:P,monadParMaybeT:h,newtypeParCont:j,functorParCont:y,applyParCont:R,applicativeParCont:D,altParCont:F,plusParCont:N,alternativeParCont:W,monadParParCont:b};
+},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad.Cont.Trans/index.js":"XW2d","../Control.Monad.Except.Trans/index.js":"gr8B","../Control.Monad.Maybe.Trans/index.js":"UUIS","../Control.Monad.Reader.Trans/index.js":"uvht","../Control.Monad.Writer.Trans/index.js":"VAds","../Control.Plus/index.js":"oMBg","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Functor.Compose/index.js":"z8br","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.Unit/index.js":"NhVk","../Effect.Class/index.js":"dWtH","../Effect.Ref/index.js":"/Jaj"}],"LNK1":[function(require,module,exports) {
+"use strict";var n=require("../Control.Apply/index.js"),r=require("../Control.Category/index.js"),e=require("../Control.Parallel.Class/index.js"),t=require("../Data.Foldable/index.js"),u=require("../Data.Traversable/index.js"),i=function(n){return function(r){return function(u){var i,a=e.sequential(n),l=t.traverse_(n.Applicative1())(r)((i=e.parallel(n),function(n){return i(u(n))}));return function(n){return a(l(n))}}}},a=function(n){return function(r){return function(t){var i,a=e.sequential(n),l=u.traverse(r)(n.Applicative1())((i=e.parallel(n),function(n){return i(t(n))}));return function(n){return a(l(n))}}}},l=function(n){return function(e){return i(n)(e)(r.identity(r.categoryFn))}},o=function(n){return function(e){return a(n)(e)(r.identity(r.categoryFn))}},c=function(n){return function(r){return function(u){return function(i){return function(i){var a,l=e.sequential(n),o=t.oneOfMap(u)(r.Plus1())((a=e.parallel(n),function(n){return a(i(n))}));return function(n){return l(o(n))}}}}}},f=function(n){return function(r){return function(u){return function(i){var a=e.sequential(n),l=t.oneOfMap(u)(r.Plus1())(e.parallel(n));return function(n){return a(l(n))}}}}},p=function(r){return function(t){return function(u){return e.sequential(r)(n.apply(r.Applicative1().Apply0())(e.parallel(r)(t))(e.parallel(r)(u)))}}};module.exports={parApply:p,parTraverse:a,parTraverse_:i,parSequence:o,parSequence_:l,parOneOf:f,parOneOfMap:c};
+},{"../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Control.Parallel.Class/index.js":"NR5l","../Data.Foldable/index.js":"eVDl","../Data.Traversable/index.js":"n7EE"}],"pd0V":[function(require,module,exports) {
+"use strict";exports.unsafePerformEffect=function(e){return e()};
+},{}],"tPW2":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js");module.exports={unsafePerformEffect:e.unsafePerformEffect};
+},{"./foreign.js":"pd0V"}],"I7lu":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),e=require("../Control.Alt/index.js"),r=require("../Control.Alternative/index.js"),t=require("../Control.Applicative/index.js"),u=require("../Control.Apply/index.js"),f=require("../Control.Bind/index.js"),i=require("../Control.Lazy/index.js"),o=require("../Control.Monad/index.js"),c=require("../Control.Monad.Error.Class/index.js"),a=require("../Control.Monad.Rec.Class/index.js"),l=require("../Control.Parallel/index.js"),p=require("../Control.Parallel.Class/index.js"),s=require("../Control.Plus/index.js"),d=require("../Data.Either/index.js"),m=require("../Data.Foldable/index.js"),A=require("../Data.Function/index.js"),w=require("../Data.Functor/index.js"),E=require("../Data.Monoid/index.js"),v=require("../Data.Newtype/index.js"),h=require("../Data.Semigroup/index.js"),q=require("../Data.Unit/index.js"),j=require("../Effect/index.js"),x=require("../Effect.Class/index.js"),y=require("../Effect.Exception/index.js"),C=require("../Effect.Unsafe/index.js"),b=require("../Partial.Unsafe/index.js"),g=require("../Unsafe.Coerce/index.js"),k=function(n){return n},F=function(n){return n},_=function(n){return n},P=n._fork(!1),M=new v.Newtype(function(n){return n},_),S=new w.Functor(n._parAffMap),L=new w.Functor(n._map),R=n._fork(!0),D={isLeft:function(n){if(n instanceof d.Left)return!0;if(n instanceof d.Right)return!1;throw new Error("Failed pattern match at Effect.Aff (line 390, column 12 - line 392, column 20): "+[n.constructor.name])},fromLeft:function(n){if(n instanceof d.Left)return n.value0;if(n instanceof d.Right)return b.unsafeCrashWith("unsafeFromLeft: Right");throw new Error("Failed pattern match at Effect.Aff (line 395, column 20 - line 397, column 54): "+[n.constructor.name])},fromRight:function(n){if(n instanceof d.Right)return n.value0;if(n instanceof d.Left)return b.unsafeCrashWith("unsafeFromRight: Left");throw new Error("Failed pattern match at Effect.Aff (line 400, column 21 - line 402, column 54): "+[n.constructor.name])},left:d.Left.create,right:d.Right.create},B=function(e){return n._makeFiber(D,e)},z=function(n){return function(){var e=B(n)();return e.run(),e}},U=function(){var n=w.void(j.functorEffect);return function(e){return n(z(e))}}(),W=B,N=function(e){return n._delay(d.Right.create,e)},T=function(e){return function(r){return n.generalBracket(e)({killed:A.const(r),failed:A.const(r),completed:A.const(r)})}},G=new u.Apply(function(){return S},n._parAffApply),H=function(n){return new h.Semigroup(u.lift2(G)(h.append(n)))},I=new o.Monad(function(){return O},function(){return J}),J=new f.Bind(function(){return K},n._bind),K=new u.Apply(function(){return L},o.ap(I)),O=new t.Applicative(function(){return K},n._pure),Q=function(e){return function(r){return n.generalBracket(t.pure(O)(q.unit))({killed:function(n){return function(e){return r(n)}},failed:A.const(t.pure(O)),completed:A.const(t.pure(O))})(A.const(e))}},V=function(n){return function(e){return T(t.pure(O)(q.unit))(A.const(n))(A.const(e))}},X=function(n){return T(n)(A.const(t.pure(O)(q.unit)))(t.pure(O))},Y=new i.Lazy(function(n){return f.bind(J)(t.pure(O)(q.unit))(n)}),Z=function(n){return new h.Semigroup(u.lift2(K)(h.append(n)))},$=new x.MonadEffect(function(){return I},n._liftEffect),nn=function(){var n=x.liftEffect($);return function(e){return _(A.const(n(e)))}}(),en=function(e){return n.makeAff(function(n){return w.map(j.functorEffect)(nn)(e.join(n))})},rn=new w.Functor(function(n){return function(e){return C.unsafePerformEffect(B(w.map(L)(n)(en(e))))}}),tn=new u.Apply(function(){return rn},function(n){return function(e){return C.unsafePerformEffect(B(u.apply(K)(en(n))(en(e))))}}),un=new t.Applicative(function(){return tn},function(n){return C.unsafePerformEffect(B(t.pure(O)(n)))}),fn=function(e){return function(r){return f.bind(J)(x.liftEffect($)(r.isSuspended))(function(u){return u?x.liftEffect($)(w.void(j.functorEffect)(r.kill(e,A.const(t.pure(j.applicativeEffect)(q.unit))))):n.makeAff(function(n){return w.map(j.functorEffect)(nn)(r.kill(e,n))})})}},on=function(){var n=A.flip(fn);return function(e){return _(n(e))}}(),cn=new c.MonadThrow(function(){return I},n._throwError),an=new c.MonadError(function(){return cn},n._catchError),ln=c.try(an),pn=function(n){return function(e){return z(f.bindFlipped(J)((r=x.liftEffect($),function(e){return r(n(e))}))(c.try(an)(e)));var r}},sn=function(n){return function(e){return w.void(j.functorEffect)(pn(n)(e))}},dn=function(n){return function(e){return W(f.bindFlipped(J)((r=x.liftEffect($),function(e){return r(n(e))}))(c.try(an)(e)));var r}},mn=new p.Parallel(function(){return An},function(){return I},g.unsafeCoerce,n._sequential),An=new t.Applicative(function(){return G},function(){var n=p.parallel(mn),e=t.pure(O);return function(r){return n(e(r))}}()),wn=function(n){return new E.Monoid(function(){return H(n.Semigroup0())},t.pure(An)(E.mempty(n)))},En=new h.Semigroup(function(n){return function(e){return function(r){return l.parSequence_(mn)(m.foldableArray)([n(r),e(r)])}}}),vn=function(e){var r=y.error("[Aff] Child fiber outlived parent"),u=function(e){return function(r){return n.makeAff(function(u){return n._killAll(e,r.supervisor,u(t.pure(d.applicativeEither)(q.unit)))})}};return n.generalBracket(x.liftEffect($)(function(){var r=n._makeSupervisedFiber(D,e)();return r.fiber.run(),r}))({killed:function(n){return function(e){return l.parSequence_(mn)(m.foldableArray)([fn(n)(e.fiber),u(n)(e)])}},failed:A.const(u(r)),completed:A.const(u(r))})(function(n){return en(n.fiber)})},hn=new a.MonadRec(function(){return I},function(n){return function e(r){return f.bind(J)(n(r))(function(n){if(n instanceof a.Done)return t.pure(O)(n.value0);if(n instanceof a.Loop)return e(n.value0);throw new Error("Failed pattern match at Effect.Aff (line 100, column 7 - line 102, column 22): "+[n.constructor.name])})}}),qn=function(n){return new E.Monoid(function(){return Z(n.Semigroup0())},t.pure(O)(E.mempty(n)))},jn=A.const(t.pure(O)(q.unit)),xn=new E.Monoid(function(){return En},jn),yn=n.makeAff(function(n){return t.pure(j.applicativeEffect)(E.mempty(xn))}),Cn=function(){var n=w.map(L)(A.const(q.unit));return function(e){return n(ln(e))}}(),bn=new e.Alt(function(){return S},n._parAffAlt),gn=new e.Alt(function(){return L},function(n){return function(e){return c.catchError(an)(n)(A.const(e))}}),kn=new s.Plus(function(){return gn},c.throwError(cn)(y.error("Always fails"))),Fn=new s.Plus(function(){return bn},p.parallel(mn)(s.empty(kn))),_n=new r.Alternative(function(){return An},function(){return Fn});module.exports={Canceler:_,launchAff:z,launchAff_:U,launchSuspendedAff:W,runAff:pn,runAff_:sn,runSuspendedAff:dn,forkAff:R,suspendAff:P,supervise:vn,attempt:ln,apathize:Cn,delay:N,never:yn,finally:V,invincible:X,killFiber:fn,joinFiber:en,cancelWith:Q,bracket:T,nonCanceler:jn,effectCanceler:nn,fiberCanceler:on,functorAff:L,applyAff:K,applicativeAff:O,bindAff:J,monadAff:I,semigroupAff:Z,monoidAff:qn,altAff:gn,plusAff:kn,monadRecAff:hn,monadThrowAff:cn,monadErrorAff:an,monadEffectAff:$,lazyAff:Y,functorParAff:S,applyParAff:G,applicativeParAff:An,semigroupParAff:H,monoidParAff:wn,altParAff:bn,plusParAff:Fn,alternativeParAff:_n,parallelAff:mn,functorFiber:rn,applyFiber:tn,applicativeFiber:un,newtypeCanceler:M,semigroupCanceler:En,monoidCanceler:xn,makeAff:n.makeAff,generalBracket:n.generalBracket};
+},{"./foreign.js":"idq0","../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Lazy/index.js":"y9cE","../Control.Monad/index.js":"U/Ix","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Parallel/index.js":"LNK1","../Control.Parallel.Class/index.js":"NR5l","../Control.Plus/index.js":"oMBg","../Data.Either/index.js":"B2JL","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Unit/index.js":"NhVk","../Effect/index.js":"oTWB","../Effect.Class/index.js":"dWtH","../Effect.Exception/index.js":"0OCW","../Effect.Unsafe/index.js":"tPW2","../Partial.Unsafe/index.js":"aoR+","../Unsafe.Coerce/index.js":"ETUV"}],"89Lg":[function(require,module,exports) {
+"use strict";var e=function(){function e(){this.head=null,this.last=null,this.size=0}function n(e,n){this.queue=e,this.value=n,this.next=null,this.prev=null}function t(n){this.draining=!1,this.error=null,this.value=n,this.takes=new e,this.reads=new e,this.puts=new e}var r={};function u(e){try{e()}catch(n){setTimeout(function(){throw n},0)}}function a(e){var n;switch(e.size){case 0:return null;case 1:n=e.head,e.head=null;break;case 2:n=e.last,e.head.next=null,e.last=null;break;default:n=e.last,e.last=n.prev,e.last.next=null}return n.prev=null,n.queue=null,e.size--,n.value}function l(e){var n;switch(e.size){case 0:return null;case 1:n=e.head,e.head=null;break;case 2:n=e.head,e.last.prev=null,e.head=e.last,e.last=null;break;default:n=e.head,e.head=n.next,e.head.prev=null}return n.next=null,n.queue=null,e.size--,n.value}return t.EMPTY=r,t.putLast=function(e,t){var r=new n(e,t);switch(e.size){case 0:e.head=r;break;case 1:r.prev=e.head,e.head.next=r,e.last=r;break;default:r.prev=e.last,e.last.next=r,e.last=r}return e.size++,r},t.takeLast=a,t.takeHead=l,t.deleteCell=function(e){null!==e.queue&&(e.queue.last!==e?e.queue.head!==e?(e.prev&&(e.prev.next=e.next),e.next&&(e.next.prev=e.prev),e.queue.size--,e.queue=null,e.value=null,e.next=null,e.prev=null):l(e.queue):a(e.queue))},t.drainVar=function(e,n){if(!n.draining){var t,a,i,s,o,c=n.puts,f=n.takes,v=n.reads;for(n.draining=!0;;){if(t=null,a=null,i=null,s=n.value,o=v.size,null!==n.error){for(s=e.left(n.error);t=l(c);)u(t.cb(s));for(;a=l(v);)u(a(s));for(;i=l(f);)u(i(s));break}if(s===r&&(t=l(c))&&(n.value=s=t.value),s!==r){for(i=l(f);o--&&(a=l(v));)u(a(e.right(s)));null!==i&&(n.value=r,u(i(e.right(s))))}if(null!==t&&u(t.cb(e.right(void 0))),n.value===r&&0===c.size||n.value!==r&&0===f.size)break}n.draining=!1}},t}();exports.empty=function(){return new e(e.EMPTY)},exports._newVar=function(n){return function(){return new e(n)}},exports._killVar=function(n,t,r){return function(){null===r.error&&(r.error=t,r.value=e.EMPTY,e.drainVar(n,r))}},exports._putVar=function(n,t,r,u){return function(){var a=e.putLast(r.puts,{cb:u,value:t});return e.drainVar(n,r),function(){e.deleteCell(a)}}},exports._takeVar=function(n,t,r){return function(){var u=e.putLast(t.takes,r);return e.drainVar(n,t),function(){e.deleteCell(u)}}},exports._readVar=function(n,t,r){return function(){var u=e.putLast(t.reads,r);return e.drainVar(n,t),function(){e.deleteCell(u)}}},exports._tryPutVar=function(n,t,r){return function(){return r.value===e.EMPTY&&null===r.error&&(r.value=t,e.drainVar(n,r),!0)}},exports._tryTakeVar=function(n,t){return function(){var r=t.value;return r===e.EMPTY?n.nothing:(t.value=e.EMPTY,e.drainVar(n,t),n.just(r))}},exports._tryReadVar=function(n,t){return function(){return t.value===e.EMPTY?n.nothing:n.just(t.value)}},exports._status=function(n,t){return function(){return t.error?n.killed(t.error):t.value===e.EMPTY?n.empty:n.filled(t.value)}};
+},{}],"XiHq":[function(require,module,exports) {
+"use strict";var t=require("./foreign.js"),n=require("../Data.Either/index.js"),e=require("../Data.Maybe/index.js"),r=function(){function t(t){this.value0=t}return t.create=function(n){return new t(n)},t}(),u=function(){function t(t){this.value0=t}return t.create=function(n){return new t(n)},t}(),i=function(){function t(){}return t.value=new t,t}(),a=t._newVar,c=function(t){return t instanceof r},o=function(t){return t instanceof u},f=function(t){return t instanceof i},l={left:n.Left.create,right:n.Right.create,nothing:e.Nothing.value,just:e.Just.create,killed:r.create,filled:u.create,empty:i.value},s=function(n){return function(e){return t._killVar(l,n,e)}},d=function(n){return function(e){return function(r){return t._putVar(l,n,e,r)}}},y=function(n){return function(e){return t._readVar(l,n,e)}},_=function(n){return t._status(l,n)},p=function(n){return function(e){return t._takeVar(l,n,e)}},V=function(n){return function(e){return t._tryPutVar(l,n,e)}},h=function(n){return t._tryReadVar(l,n)},k=function(n){return t._tryTakeVar(l,n)};module.exports={Killed:r,Filled:u,Empty:i,new:a,take:p,tryTake:k,put:d,tryPut:V,read:y,tryRead:h,kill:s,status:_,isEmpty:f,isFilled:o,isKilled:c,empty:t.empty};
+},{"./foreign.js":"89Lg","../Data.Either/index.js":"B2JL","../Data.Maybe/index.js":"5mN7"}],"hACG":[function(require,module,exports) {
+"use strict";var t=require("../Effect.AVar/index.js"),f=require("../Effect.Aff/index.js"),n=require("../Effect.Class/index.js"),e=function(){var e=n.liftEffect(f.monadEffectAff);return function(f){return e(t.tryTake(f))}}(),r=function(){var e=n.liftEffect(f.monadEffectAff);return function(f){return e(t.tryRead(f))}}(),u=function(e){var r=n.liftEffect(f.monadEffectAff),u=t.tryPut(e);return function(t){return r(u(t))}},c=function(n){return f.makeAff(function(e){return function(){var r=t.take(n)(e)();return f.effectCanceler(r)}})},i=function(){var e=n.liftEffect(f.monadEffectAff);return function(f){return e(t.status(f))}}(),a=function(n){return f.makeAff(function(e){return function(){var r=t.read(n)(e)();return f.effectCanceler(r)}})},o=function(n){return function(e){return f.makeAff(function(r){return function(){var u=t.put(n)(e)(r)();return f.effectCanceler(u)}})}},E=function(){var e=n.liftEffect(f.monadEffectAff);return function(f){return e(t.new(f))}}(),l=function(e){var r=n.liftEffect(f.monadEffectAff),u=t.kill(e);return function(t){return r(u(t))}},d=n.liftEffect(f.monadEffectAff)(t.empty);module.exports={new:E,empty:d,status:i,take:c,tryTake:e,put:o,tryPut:u,read:a,tryRead:r,kill:l};
+},{"../Effect.AVar/index.js":"XiHq","../Effect.Aff/index.js":"I7lu","../Effect.Class/index.js":"dWtH"}],"ty16":[function(require,module,exports) {
+"use strict";exports.log=function(n){return function(){return console.log(n),{}}},exports.warn=function(n){return function(){return console.warn(n),{}}},exports.error=function(n){return function(){return console.error(n),{}}},exports.info=function(n){return function(){return console.info(n),{}}},exports.time=function(n){return function(){return console.time(n),{}}},exports.timeEnd=function(n){return function(){return console.timeEnd(n),{}}};
+},{}],"+3bp":[function(require,module,exports) {
+"use strict";var r=require("./foreign.js"),n=require("../Data.Show/index.js"),o=function(o){return function(e){return r.warn(n.show(o)(e))}},e=function(o){return function(e){return r.log(n.show(o)(e))}},t=function(o){return function(e){return r.info(n.show(o)(e))}},i=function(o){return function(e){return r.error(n.show(o)(e))}};module.exports={logShow:e,warnShow:o,errorShow:i,infoShow:t,log:r.log,warn:r.warn,error:r.error,info:r.info,time:r.time,timeEnd:r.timeEnd};
+},{"./foreign.js":"ty16","../Data.Show/index.js":"mFY7"}],"3Dts":[function(require,module,exports) {
+"use strict";var n=require("../Effect.Class/index.js"),r=require("../Effect.Console/index.js"),t=function(t){return function(f){var e=n.liftEffect(t),u=r.warnShow(f);return function(n){return e(u(n))}}},f=function(t){var f=n.liftEffect(t);return function(n){return f(r.warn(n))}},e=function(t){var f=n.liftEffect(t);return function(n){return f(r.timeEnd(n))}},u=function(t){var f=n.liftEffect(t);return function(n){return f(r.time(n))}},o=function(t){return function(f){var e=n.liftEffect(t),u=r.logShow(f);return function(n){return e(u(n))}}},i=function(t){var f=n.liftEffect(t);return function(n){return f(r.log(n))}},c=function(t){return function(f){var e=n.liftEffect(t),u=r.infoShow(f);return function(n){return e(u(n))}}},l=function(t){var f=n.liftEffect(t);return function(n){return f(r.info(n))}},a=function(t){return function(f){var e=n.liftEffect(t),u=r.errorShow(f);return function(n){return e(u(n))}}},E=function(t){var f=n.liftEffect(t);return function(n){return f(r.error(n))}};module.exports={log:i,logShow:o,warn:f,warnShow:t,error:E,errorShow:a,info:l,infoShow:c,time:u,timeEnd:e};
+},{"../Effect.Class/index.js":"dWtH","../Effect.Console/index.js":"+3bp"}],"kKQF":[function(require,module,exports) {
+"use strict";function t(o){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(o)}exports.unsafeToForeign=function(t){return t},exports.unsafeFromForeign=function(t){return t},exports.typeOf=function(o){return t(o)},exports.tagOf=function(t){return Object.prototype.toString.call(t).slice(8,-1)},exports.isNull=function(t){return null===t},exports.isUndefined=function(t){return void 0===t},exports.isArray=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)};
+},{}],"XAY7":[function(require,module,exports) {
+"use strict";var n=require("../Control.Bind/index.js"),t=require("../Control.Category/index.js"),e=require("../Data.Boolean/index.js"),r=require("../Data.Eq/index.js"),u=require("../Data.Function/index.js"),o=require("../Data.Functor/index.js"),i=require("../Data.FunctorWithIndex/index.js"),a=require("../Data.List/index.js"),c=require("../Data.List.Types/index.js"),l=require("../Data.Maybe/index.js"),f=require("../Data.NonEmpty/index.js"),s=require("../Data.Ord/index.js"),m=require("../Data.Semigroup/index.js"),p=require("../Data.Semigroup.Traversable/index.js"),v=require("../Data.Tuple/index.js"),d=require("../Data.Unfoldable/index.js"),y=require("../Partial.Unsafe/index.js"),w=function(n){return function(t){return function(e){return new f.NonEmpty(n(t.value0)(e.value0),a.zipWith(n)(t.value1)(e.value1))}}},h=function(n){return function(t){return function(e){return function(r){return p.sequence1(c.traversable1NonEmptyList)(n.Apply0())(w(t)(e)(r))}}}},E=w(v.Tuple.create),N=function(n){return function(t){return function(e){return function(r){var u=t(new c.Cons(e.value0,e.value1))(new c.Cons(r.value0,r.value1));if(u instanceof c.Cons)return new f.NonEmpty(u.value0,u.value1);if(u instanceof c.Nil)return y.unsafeCrashWith("Impossible: empty list in NonEmptyList "+n);throw new Error("Failed pattern match at Data.List.NonEmpty (line 104, column 3 - line 106, column 81): "+[u.constructor.name])}}}},b=function(n){return function(t){return function(e){var r=t(new c.Cons(e.value0,e.value1));if(r instanceof c.Cons)return new f.NonEmpty(r.value0,r.value1);if(r instanceof c.Nil)return y.unsafeCrashWith("Impossible: empty list in NonEmptyList "+n);throw new Error("Failed pattern match at Data.List.NonEmpty (line 91, column 3 - line 93, column 81): "+[r.constructor.name])}}},L=function(n){return function(t){return function(r){if(0===n)return new l.Just(new f.NonEmpty(t,r.value1));if(e.otherwise)return o.map(l.functorMaybe)(function(n){return c.NonEmptyList((t=n,new f.NonEmpty(r.value0,t)));var t})(a.updateAt(n-1|0)(t)(r.value1));throw new Error("Failed pattern match at Data.List.NonEmpty (line 197, column 1 - line 197, column 75): "+[n.constructor.name,t.constructor.name,r.constructor.name])}}},x=function(n){return new v.Tuple(o.map(c.functorNonEmptyList)(v.fst)(n),o.map(c.functorNonEmptyList)(v.snd)(n))},D=function(n){var t=a.unsnoc(n.value1);if(t instanceof l.Nothing)return{init:c.Nil.value,last:n.value0};if(t instanceof l.Just)return{init:new c.Cons(n.value0,t.value0.init),last:t.value0.last};throw new Error("Failed pattern match at Data.List.NonEmpty (line 159, column 35 - line 161, column 50): "+[t.constructor.name])},g=function(){var n=N("unionBy");return function(t){return n(a.unionBy(t))}}(),q=function(n){return N("union")(a.union(n))},F=function(n){return{head:n.value0,tail:n.value1}},B=function(n){return new c.Cons(n.value0,n.value1)},C=function(n){var t=d.unfoldr(n)(function(n){return o.map(l.functorMaybe)(function(n){return new v.Tuple(n.head,n.tail)})(a.uncons(n))});return function(n){return t(B(n))}},j=function(n){return n.value1},M=function(){var n=b("sortBy");return function(t){return n(a.sortBy(t))}}(),W=function(n){return function(t){return M(s.compare(n))(t)}},I=function(n){return function(t){return new f.NonEmpty(n.value0,a.snoc(n.value1)(t))}},J=function(){var n=f.singleton(c.plusList);return function(t){return c.NonEmptyList(n(t))}}(),A=function(n){return function(t){if(n instanceof c.Cons)return new f.NonEmpty(n.value0,a.snoc(n.value1)(t));if(n instanceof c.Nil)return J(t);throw new Error("Failed pattern match at Data.List.NonEmpty (line 139, column 1 - line 139, column 51): "+[n.constructor.name,t.constructor.name])}},T=b("reverse")(a.reverse),z=function(){var n=b("nubBy");return function(t){return n(a.nubBy(t))}}(),k=function(n){return b("nub")(a.nub(n))},U=function(n){return function(t){return function(r){if(0===n)return new l.Just(new f.NonEmpty(t(r.value0),r.value1));if(e.otherwise)return o.map(l.functorMaybe)(function(n){return c.NonEmptyList((t=n,new f.NonEmpty(r.value0,t)));var t})(a.modifyAt(n-1|0)(t)(r.value1));throw new Error("Failed pattern match at Data.List.NonEmpty (line 202, column 1 - line 202, column 82): "+[n.constructor.name,t.constructor.name,r.constructor.name])}}},S=i.mapWithIndex(c.functorWithIndexNonEmptyList),O=function(n){return function(t){return n(new c.Cons(t.value0,t.value1))}},P=function(n){return O(a.mapMaybe(n))},G=function(n){return O(a.partition(n))},H=function(n){return O(a.span(n))},K=function(n){return O(a.take(n))},Q=function(n){return O(a.takeWhile(n))},R=function(n){return 1+a.length(n.value1)|0},V=function(n){return l.fromMaybe(n.value0)(a.last(n.value1))},X=function(){var n=N("intersectBy");return function(t){return n(a.intersectBy(t))}}(),Y=function(n){return N("intersect")(a.intersect(n))},Z=function(n){return function(t){return function(r){if(0===n)return new l.Just(new f.NonEmpty(t,new c.Cons(r.value0,r.value1)));if(e.otherwise)return o.map(l.functorMaybe)(function(n){return c.NonEmptyList((t=n,new f.NonEmpty(r.value0,t)));var t})(a.insertAt(n-1|0)(t)(r.value1));throw new Error("Failed pattern match at Data.List.NonEmpty (line 192, column 1 - line 192, column 75): "+[n.constructor.name,t.constructor.name,r.constructor.name])}}},$=function(n){return l.maybe(c.Nil.value)(function(t){return new c.Cons(n.value0,t)})(a.init(n.value1))},_=function(n){return function(t){if(0===t)return new l.Just(n.value0);if(e.otherwise)return a.index(n.value1)(t-1|0);throw new Error("Failed pattern match at Data.List.NonEmpty (line 166, column 1 - line 166, column 52): "+[n.constructor.name,t.constructor.name])}},nn=function(n){return n.value0},tn=function(){var n=b("groupBy");return function(t){return n(a.groupBy(t))}}(),en=function(n){return b("group'")(a["group'"](n))},rn=function(n){return b("group")(a.group(n))},un=function(n){if(n instanceof c.Nil)return l.Nothing.value;if(n instanceof c.Cons)return new l.Just(new f.NonEmpty(n.value0,n.value1));throw new Error("Failed pattern match at Data.List.NonEmpty (line 120, column 1 - line 120, column 57): "+[n.constructor.name])},on=function(n){var t=a.fromFoldable(n);return function(n){return un(t(n))}},an=function(t){return function(e){return function(r){return function(u){return n.bind(t.Bind1())(e(r)(u.value0))(function(n){return a.foldM(t)(e)(n)(u.value1)})}}}},cn=function(n){return function(t){var r=a.findLastIndex(n)(t.value1);if(r instanceof l.Just)return new l.Just(r.value0+1|0);if(r instanceof l.Nothing){if(n(t.value0))return new l.Just(0);if(e.otherwise)return l.Nothing.value}throw new Error("Failed pattern match at Data.List.NonEmpty (line 186, column 3 - line 190, column 29): "+[r.constructor.name])}},ln=function(n){return function(t){if(n(t.value0))return new l.Just(0);if(e.otherwise)return o.map(l.functorMaybe)(function(n){return n+1|0})(a.findIndex(n)(t.value1));throw new Error("Failed pattern match at Data.List.NonEmpty (line 179, column 1 - line 179, column 69): "+[n.constructor.name,t.constructor.name])}},fn=function(n){var t=a.filterM(n);return function(n){return O(t(n))}},sn=function(n){return O(a.filter(n))},mn=function(n){return function(t){return cn(function(e){return r.eq(n)(e)(t)})}},pn=function(n){return function(t){return ln(function(e){return r.eq(n)(e)(t)})}},vn=function(n){return O(a.dropWhile(n))},dn=function(n){return O(a.drop(n))},yn=function(n){return function(t){return new f.NonEmpty(n,t)}},wn=function(n){return function(t){return new f.NonEmpty(n,new c.Cons(t.value0,t.value1))}},hn=u.flip(n.bind(c.bindNonEmptyList)),En=function(e){return n.bind(c.bindNonEmptyList)(e)(t.identity(t.categoryFn))},Nn=O(a.catMaybes),bn=function(n){return function(t){return function(e){return new f.NonEmpty(t.value0,m.append(c.semigroupList)(t.value1)(a.fromFoldable(n)(e)))}}};module.exports={toUnfoldable:C,fromFoldable:on,fromList:un,toList:B,singleton:J,length:R,cons:wn,"cons'":yn,snoc:I,"snoc'":A,head:nn,last:V,tail:j,init:$,uncons:F,unsnoc:D,index:_,elemIndex:pn,elemLastIndex:mn,findIndex:ln,findLastIndex:cn,insertAt:Z,updateAt:L,modifyAt:U,reverse:T,concat:En,concatMap:hn,filter:sn,filterM:fn,mapMaybe:P,catMaybes:Nn,appendFoldable:bn,mapWithIndex:S,sort:W,sortBy:M,take:K,takeWhile:Q,drop:dn,dropWhile:vn,span:H,group:rn,"group'":en,groupBy:tn,partition:G,nub:k,nubBy:z,union:q,unionBy:g,intersect:Y,intersectBy:X,zipWith:w,zipWithA:h,zip:E,unzip:x,foldM:an};
+},{"../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Data.Boolean/index.js":"ObQr","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.NonEmpty/index.js":"qF8i","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Semigroup.Traversable/index.js":"qkfi","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Partial.Unsafe/index.js":"aoR+"}],"pu1p":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),n=require("../Control.Applicative/index.js"),r=require("../Control.Monad.Error.Class/index.js"),t=require("../Control.Monad.Except/index.js"),a=require("../Control.Monad.Except.Trans/index.js"),i=require("../Data.Boolean/index.js"),o=require("../Data.Either/index.js"),u=require("../Data.Eq/index.js"),c=require("../Data.Function/index.js"),l=require("../Data.Identity/index.js"),s=require("../Data.Int/index.js"),f=require("../Data.List.NonEmpty/index.js"),d=require("../Data.Maybe/index.js"),v=require("../Data.Ord/index.js"),p=require("../Data.Ordering/index.js"),m=require("../Data.Show/index.js"),h=require("../Data.String.CodeUnits/index.js"),w=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),g=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(r){return new e(n,r)}},e}(),E=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(r){return new e(n,r)}},e}(),T=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(r){return new e(n,r)}},e}(),x=new m.Show(function(e){if(e instanceof w)return"(ForeignError "+m.show(m.showString)(e.value0)+")";if(e instanceof E)return"(ErrorAtIndex "+m.show(m.showInt)(e.value0)+" "+m.show(x)(e.value1)+")";if(e instanceof T)return"(ErrorAtProperty "+m.show(m.showString)(e.value0)+" "+m.show(x)(e.value1)+")";if(e instanceof g)return"(TypeMismatch "+m.show(m.showString)(e.value0)+" "+m.show(m.showString)(e.value1)+")";throw new Error("Failed pattern match at Foreign (line 63, column 1 - line 67, column 89): "+[e.constructor.name])}),F=function e(n){if(n instanceof w)return n.value0;if(n instanceof E)return"Error at array index "+m.show(m.showInt)(n.value0)+": "+e(n.value1);if(n instanceof T)return"Error at property "+m.show(m.showString)(n.value0)+": "+e(n.value1);if(n instanceof g)return"Type mismatch: expected "+n.value0+", found "+n.value1;throw new Error("Failed pattern match at Foreign (line 72, column 1 - line 72, column 45): "+[n.constructor.name])},y=function(r){if(e.isUndefined(r))return n.pure(a.applicativeExceptT(l.monadIdentity))(d.Nothing.value);if(i.otherwise)return n.pure(a.applicativeExceptT(l.monadIdentity))(new d.Just(r));throw new Error("Failed pattern match at Foreign (line 157, column 1 - line 157, column 46): "+[r.constructor.name])},q=function(r){if(e.isNull(r)||e.isUndefined(r))return n.pure(a.applicativeExceptT(l.monadIdentity))(d.Nothing.value);if(i.otherwise)return n.pure(a.applicativeExceptT(l.monadIdentity))(new d.Just(r));throw new Error("Failed pattern match at Foreign (line 162, column 1 - line 162, column 52): "+[r.constructor.name])},I=function(r){if(e.isNull(r))return n.pure(a.applicativeExceptT(l.monadIdentity))(d.Nothing.value);if(i.otherwise)return n.pure(a.applicativeExceptT(l.monadIdentity))(new d.Just(r));throw new Error("Failed pattern match at Foreign (line 152, column 1 - line 152, column 41): "+[r.constructor.name])},j=function(){var e=r.throwError(a.monadThrowExceptT(l.monadIdentity));return function(n){return e(f.singleton(n))}}(),S=function(r){if(e.isArray(r))return n.pure(a.applicativeExceptT(l.monadIdentity))(e.unsafeFromForeign(r));if(i.otherwise)return j(new g("array",e.tagOf(r)));throw new Error("Failed pattern match at Foreign (line 147, column 1 - line 147, column 42): "+[r.constructor.name])},N=function(r){return function(t){if(e.tagOf(t)===r)return n.pure(a.applicativeExceptT(l.monadIdentity))(e.unsafeFromForeign(t));if(i.otherwise)return j(new g(r,e.tagOf(t)));throw new Error("Failed pattern match at Foreign (line 106, column 1 - line 106, column 55): "+[r.constructor.name,t.constructor.name])}},O=N("Boolean"),D=N("Number"),L=function(r){var a,i=o.Left.create(f.singleton(new g("Int",e.tagOf(r)))),u=(a=d.maybe(i)(n.pure(o.applicativeEither)),function(e){return a(s.fromNumber(e))});return t.mapExcept(o.either(c.const(i))(u))(D(r))},A=N("String"),C=function(r){var a,i=o.Left.create(f.singleton(new g("Char",e.tagOf(r)))),u=(a=d.maybe(i)(n.pure(o.applicativeEither)),function(e){return a(h.toChar(e))});return t.mapExcept(o.either(c.const(i))(u))(A(r))},G=new u.Eq(function(e){return function(n){return e instanceof w&&n instanceof w?e.value0===n.value0:e instanceof g&&n instanceof g?e.value0===n.value0&&e.value1===n.value1:e instanceof E&&n instanceof E?e.value0===n.value0&&u.eq(G)(e.value1)(n.value1):e instanceof T&&n instanceof T&&(e.value0===n.value0&&u.eq(G)(e.value1)(n.value1))}}),U=new v.Ord(function(){return G},function(e){return function(n){if(e instanceof w&&n instanceof w)return v.compare(v.ordString)(e.value0)(n.value0);if(e instanceof w)return p.LT.value;if(n instanceof w)return p.GT.value;var r;if(e instanceof g&&n instanceof g)return(r=v.compare(v.ordString)(e.value0)(n.value0))instanceof p.LT?p.LT.value:r instanceof p.GT?p.GT.value:v.compare(v.ordString)(e.value1)(n.value1);if(e instanceof g)return p.LT.value;if(n instanceof g)return p.GT.value;if(e instanceof E&&n instanceof E)return(r=v.compare(v.ordInt)(e.value0)(n.value0))instanceof p.LT?p.LT.value:r instanceof p.GT?p.GT.value:v.compare(U)(e.value1)(n.value1);if(e instanceof E)return p.LT.value;if(n instanceof E)return p.GT.value;if(e instanceof T&&n instanceof T)return(r=v.compare(v.ordString)(e.value0)(n.value0))instanceof p.LT?p.LT.value:r instanceof p.GT?p.GT.value:v.compare(U)(e.value1)(n.value1);throw new Error("Failed pattern match at Foreign (line 61, column 1 - line 61, column 52): "+[e.constructor.name,n.constructor.name])}});module.exports={ForeignError:w,TypeMismatch:g,ErrorAtIndex:E,ErrorAtProperty:T,renderForeignError:F,unsafeReadTagged:N,readString:A,readChar:C,readBoolean:O,readNumber:D,readInt:L,readArray:S,readNull:I,readUndefined:y,readNullOrUndefined:q,fail:j,eqForeignError:G,ordForeignError:U,showForeignError:x,unsafeToForeign:e.unsafeToForeign,unsafeFromForeign:e.unsafeFromForeign,typeOf:e.typeOf,tagOf:e.tagOf,isNull:e.isNull,isUndefined:e.isUndefined,isArray:e.isArray};
+},{"./foreign.js":"kKQF","../Control.Applicative/index.js":"qYya","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Except/index.js":"Fye2","../Control.Monad.Except.Trans/index.js":"gr8B","../Data.Boolean/index.js":"ObQr","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Identity/index.js":"2OKT","../Data.Int/index.js":"xNJb","../Data.List.NonEmpty/index.js":"XAY7","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Show/index.js":"mFY7","../Data.String.CodeUnits/index.js":"6c6X"}],"t65A":[function(require,module,exports) {
+"use strict";var n="function"==typeof Array.from,t="undefined"!=typeof Symbol&&null!=Symbol&&void 0!==Symbol.iterator&&"function"==typeof String.prototype[Symbol.iterator],r="function"==typeof String.prototype.fromCodePoint,o="function"==typeof String.prototype.codePointAt;exports._unsafeCodePointAt0=function(n){return o?function(n){return n.codePointAt(0)}:n},exports._codePointAt=function(n){return function(r){return function(o){return function(e){return function(u){return function(i){var f=i.length;if(u<0||u>=f)return o;if(t)for(var c=i[Symbol.iterator](),a=u;;--a){var p=c.next();if(p.done)return o;if(0===a)return r(e(p.value))}return n(u)(i)}}}}}},exports._countPrefix=function(n){return function(r){return t?function(n){return function(t){for(var o=t[Symbol.iterator](),e=0;;++e){var u=o.next();if(u.done)return e;var i=r(u.value);if(!n(i))return e}}}:n}},exports._fromCodePointArray=function(n){return r?function(t){return t.length<1e4?String.fromCodePoint.apply(String,t):t.map(n).join("")}:function(t){return t.map(n).join("")}},exports._singleton=function(n){return r?String.fromCodePoint:n},exports._take=function(n){return function(r){return t?function(n){for(var t="",o=n[Symbol.iterator](),e=0;e<r;++e){var u=o.next();if(u.done)return t;t+=u.value}return t}:n(r)}},exports._toCodePointArray=function(t){return function(r){return n?function(n){return Array.from(n,r)}:t}};
+},{}],"mAJY":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Data.Array/index.js"),t=require("../Data.Boolean/index.js"),e=require("../Data.Bounded/index.js"),u=require("../Data.Enum/index.js"),o=require("../Data.Eq/index.js"),i=require("../Data.EuclideanRing/index.js"),a=require("../Data.Functor/index.js"),f=require("../Data.Int/index.js"),d=require("../Data.Maybe/index.js"),c=require("../Data.Ord/index.js"),l=require("../Data.Show/index.js"),s=require("../Data.String.CodeUnits/index.js"),m=require("../Data.String.Common/index.js"),h=require("../Data.String.Unsafe/index.js"),v=require("../Data.Tuple/index.js"),x=require("../Data.Unfoldable/index.js"),E=function(n){return n},g=function(n){return function(r){return 65536+((1024*(n-55296|0)|0)+(r-56320|0)|0)|0}},C=new l.Show(function(n){return"(CodePoint 0x"+m.toUpper(f.toStringAs(f.hexadecimal)(n))+")"}),b=function(n){return 56320<=n&&n<=57343},p=function(n){return 55296<=n&&n<=56319},q=function(n){var r=s.length(n);if(0===r)return d.Nothing.value;if(1===r)return new d.Just({head:u.fromEnum(u.boundedEnumChar)(h.charAt(0)(n)),tail:""});var t=u.fromEnum(u.boundedEnumChar)(h.charAt(1)(n)),e=u.fromEnum(u.boundedEnumChar)(h.charAt(0)(n));return p(e)&&b(t)?new d.Just({head:g(e)(t),tail:s.drop(2)(n)}):new d.Just({head:e,tail:s.drop(1)(n)})},w=function(n){return a.map(d.functorMaybe)(function(n){return new v.Tuple(n.head,n.tail)})(q(n))},P=function(n){return x.unfoldr(x.unfoldableArray)(w)(n)},D=function(n){var r=u.fromEnum(u.boundedEnumChar)(h.charAt(0)(n));if(p(r)&&s.length(n)>1){var t=u.fromEnum(u.boundedEnumChar)(h.charAt(1)(n));return b(t)?g(r)(t):r}return r},j=n._unsafeCodePointAt0(D),A=n._toCodePointArray(P)(j),y=function(n){return r.length(A(n))},J=function(n){return function(r){return a.map(d.functorMaybe)(function(n){return y(s.take(n)(r))})(s.lastIndexOf(n)(r))}},O=function(n){return function(r){return a.map(d.functorMaybe)(function(n){return y(s.take(n)(r))})(s.indexOf(n)(r))}},I=function(){var n=u.toEnumWithDefaults(u.boundedEnumChar)(e.bottom(e.boundedChar))(e.top(e.boundedChar));return function(r){return s.singleton(n(r))}}(),S=function(n){if(n<=65535)return I(n);var r=i.div(i.euclideanRingInt)(n-65536|0)(1024)+55296|0,t=i.mod(i.euclideanRingInt)(n-65536|0)(1024)+56320|0;return I(r)+I(t)},k=n._fromCodePointArray(S),_=n._singleton(S),M=function n(r){return function(t){if(r<1)return"";var e=q(t);return e instanceof d.Just?_(e.value0.head)+n(r-1|0)(e.value0.tail):t}},N=n._take(M),B=function(n){return function(r){return function(t){var e=s.length(N(r)(t));return a.map(d.functorMaybe)(function(n){return y(s.take(n)(t))})(s["lastIndexOf'"](n)(e)(t))}}},U=function(n){return function(r){var t=N(n)(r);return{before:t,after:s.drop(s.length(t))(r)}}},F=new o.Eq(function(n){return function(r){return n===r}}),R=new c.Ord(function(){return F},function(n){return function(r){return c.compare(c.ordInt)(n)(r)}}),W=function(n){return function(r){return s.drop(s.length(N(n)(r)))(r)}},T=function(n){return function(r){return function(t){var e=W(r)(t);return a.map(d.functorMaybe)(function(n){return r+y(s.take(n)(e))|0})(s.indexOf(n)(e))}}},z=function(n){return function(r){return function(t){var e,u,o,i,a=n,f=r,c=!1;for(;!c;)u=a,o=t,i=void 0,e=(i=q(f))instanceof d.Just&&u(i.value0.head)?(a=u,f=i.value0.tail,void(t=o+1|0)):(c=!0,o);return e}}},G=function(n){return function(r){return z(n)(r)(0)}},H=n._countPrefix(G)(j),K=function(n){return function(r){return W(H(n)(r))(r)}},L=function(n){return function(r){return N(H(n)(r))(r)}},Q=function(){var n=u.fromEnum(u.boundedEnumChar);return function(r){return E(n(r))}}(),V=function(n){return function(r){var t,e,u,o=n,i=!1;for(;!i;)e=o,u=void 0,t=(u=q(r))instanceof d.Just?0===e?(i=!0,new d.Just(u.value0.head)):(o=e-1|0,void(r=u.value0.tail)):(i=!0,d.Nothing.value);return t}},X=function(r){return function(t){return r<0?d.Nothing.value:0===r&&""===t?d.Nothing.value:0===r?new d.Just(j(t)):n._codePointAt(V)(d.Just.create)(d.Nothing.value)(j)(r)(t)}},Y=new e.Bounded(function(){return R},0,1114111),Z=new u.BoundedEnum(function(){return Y},function(){return $},1114112,function(n){return n},function(n){if(n>=0&&n<=1114111)return new d.Just(n);if(t.otherwise)return d.Nothing.value;throw new Error("Failed pattern match at Data.String.CodePoints (line 63, column 1 - line 68, column 26): "+[n.constructor.name])}),$=new u.Enum(function(){return R},u.defaultPred(u.toEnum(Z))(u.fromEnum(Z)),u.defaultSucc(u.toEnum(Z))(u.fromEnum(Z)));module.exports={codePointFromChar:Q,singleton:_,fromCodePointArray:k,toCodePointArray:A,codePointAt:X,uncons:q,length:y,countPrefix:H,indexOf:O,"indexOf'":T,lastIndexOf:J,"lastIndexOf'":B,take:N,takeWhile:L,drop:W,dropWhile:K,splitAt:U,eqCodePoint:F,ordCodePoint:R,showCodePoint:C,boundedCodePoint:Y,enumCodePoint:$,boundedEnumCodePoint:Z};
+},{"./foreign.js":"t65A","../Data.Array/index.js":"4t4C","../Data.Boolean/index.js":"ObQr","../Data.Bounded/index.js":"kcUU","../Data.Enum/index.js":"oOsU","../Data.Eq/index.js":"Pq4F","../Data.EuclideanRing/index.js":"2IRB","../Data.Functor/index.js":"+0AE","../Data.Int/index.js":"xNJb","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Show/index.js":"mFY7","../Data.String.CodeUnits/index.js":"6c6X","../Data.String.Common/index.js":"OSrc","../Data.String.Unsafe/index.js":"5UWM","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z"}],"rsyP":[function(require,module,exports) {
+"use strict";exports["showRegex'"]=function(n){return""+n},exports["regex'"]=function(n){return function(r){return function(t){return function(e){try{return r(new RegExp(t,e))}catch(u){return n(u.message)}}}}},exports.source=function(n){return n.source},exports["flags'"]=function(n){return{multiline:n.multiline,ignoreCase:n.ignoreCase,global:n.global,sticky:!!n.sticky,unicode:!!n.unicode}},exports.test=function(n){return function(r){var t=n.lastIndex,e=n.test(r);return n.lastIndex=t,e}},exports._match=function(n){return function(r){return function(t){return function(e){var u=e.match(t);if(null==u||0===u.length)return r;for(var o=0;o<u.length;o++)u[o]=null==u[o]?r:n(u[o]);return n(u)}}}},exports.replace=function(n){return function(r){return function(t){return t.replace(n,r)}}},exports["replace'"]=function(n){return function(r){return function(t){return t.replace(n,function(n){return r(n)(Array.prototype.splice.call(arguments,1,arguments.length-3))})}}},exports._search=function(n){return function(r){return function(t){return function(e){var u=e.search(t);return-1===u?r:n(u)}}}},exports.split=function(n){return function(r){return r.split(n)}};
+},{}],"W1/V":[function(require,module,exports) {
+
+"use strict";var e=require("../Control.MonadZero/index.js"),i=require("../Data.Eq/index.js"),n=require("../Data.Functor/index.js"),r=require("../Data.Monoid/index.js"),a=require("../Data.Semigroup/index.js"),o=require("../Data.Show/index.js"),u=require("../Data.String.Common/index.js"),l=function(){function e(e){this.value0=e}return e.create=function(i){return new e(i)},e}(),t=new l({global:!1,ignoreCase:!1,multiline:!1,sticky:!1,unicode:!0}),g=new l({global:!1,ignoreCase:!1,multiline:!1,sticky:!0,unicode:!1}),s=new o.Show(function(r){var o=a.append(a.semigroupArray)([])(a.append(a.semigroupArray)(n.voidLeft(n.functorArray)(e.guard(e.monadZeroArray)(r.value0.global))("global"))(a.append(a.semigroupArray)(n.voidLeft(n.functorArray)(e.guard(e.monadZeroArray)(r.value0.ignoreCase))("ignoreCase"))(a.append(a.semigroupArray)(n.voidLeft(n.functorArray)(e.guard(e.monadZeroArray)(r.value0.multiline))("multiline"))(a.append(a.semigroupArray)(n.voidLeft(n.functorArray)(e.guard(e.monadZeroArray)(r.value0.sticky))("sticky"))(n.voidLeft(n.functorArray)(e.guard(e.monadZeroArray)(r.value0.unicode))("unicode"))))));return i.eq(i.eqArray(i.eqString))(o)([])?"noFlags":"("+u.joinWith(" <> ")(o)+")"}),d=new a.Semigroup(function(e){return function(i){return new l({global:e.value0.global||i.value0.global,ignoreCase:e.value0.ignoreCase||i.value0.ignoreCase,multiline:e.value0.multiline||i.value0.multiline,sticky:e.value0.sticky||i.value0.sticky,unicode:e.value0.unicode||i.value0.unicode})}}),c=new l({global:!1,ignoreCase:!1,multiline:!1,sticky:!1,unicode:!1}),v=new l({global:!1,ignoreCase:!1,multiline:!0,sticky:!1,unicode:!1}),m=new r.Monoid(function(){return d},c),y=new l({global:!1,ignoreCase:!0,multiline:!1,sticky:!1,unicode:!1}),f=new l({global:!0,ignoreCase:!1,multiline:!1,sticky:!1,unicode:!1}),p=new i.Eq(function(e){return function(i){return e.value0.global===i.value0.global&&e.value0.ignoreCase===i.value0.ignoreCase&&e.value0.multiline===i.value0.multiline&&e.value0.sticky===i.value0.sticky&&e.value0.unicode===i.value0.unicode}});module.exports={RegexFlags:l,noFlags:c,global:f,ignoreCase:y,multiline:v,sticky:g,unicode:t,semigroupRegexFlags:d,monoidRegexFlags:m,eqRegexFlags:p,showRegexFlags:s};
+},{"../Control.MonadZero/index.js":"lD5R","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.String.Common/index.js":"OSrc"}],"lBFq":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),t=require("../Data.Either/index.js"),a=require("../Data.Maybe/index.js"),r=require("../Data.Show/index.js"),n=require("../Data.String.CodeUnits/index.js"),i=require("../Data.String.Regex.Flags/index.js"),s=new r.Show(e["showRegex'"]),u=e._search(a.Just.create)(a.Nothing.value),c=function(e){return(e.value0.global?"g":"")+(e.value0.ignoreCase?"i":"")+(e.value0.multiline?"m":"")+(e.value0.sticky?"y":"")+(e.value0.unicode?"u":"")},l=function(a){return function(r){return e["regex'"](t.Left.create)(t.Right.create)(a)(c(r))}},o=function(e){return new i.RegexFlags({global:n.contains("g")(e),ignoreCase:n.contains("i")(e),multiline:n.contains("m")(e),sticky:n.contains("y")(e),unicode:n.contains("u")(e)})},g=e._match(a.Just.create)(a.Nothing.value),x=function(t){return i.RegexFlags.create(e["flags'"](t))};module.exports={regex:l,flags:x,renderFlags:c,parseFlags:o,match:g,search:u,showRegex:s,source:e.source,test:e.test,replace:e.replace,"replace'":e["replace'"],split:e.split};
+},{"./foreign.js":"rsyP","../Data.Either/index.js":"B2JL","../Data.Maybe/index.js":"5mN7","../Data.Show/index.js":"mFY7","../Data.String.CodeUnits/index.js":"6c6X","../Data.String.Regex.Flags/index.js":"W1/V"}],"f3ma":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Bind/index.js"),t=require("../Data.Array.NonEmpty/index.js"),e=require("../Data.Boolean/index.js"),u=require("../Data.Either/index.js"),o=require("../Data.Eq/index.js"),i=require("../Data.Foldable/index.js"),a=require("../Data.Function/index.js"),c=require("../Data.Functor/index.js"),f=require("../Data.Int/index.js"),l=require("../Data.Maybe/index.js"),s=require("../Data.Ord/index.js"),v=require("../Data.Show/index.js"),m=require("../Data.String.CodePoints/index.js"),b=require("../Data.String.Regex/index.js"),h=require("../Math/index.js"),d=function(n){return n},w=function(){function n(){}return n.value=new n,n}(),g=function(){function n(){}return n.value=new n,n}(),p=function(){function n(){}return n.value=new n,n}(),x=function(){function n(){}return n.value=new n,n}(),y=function(){function n(n,r,t,e){this.value0=n,this.value1=r,this.value2=t,this.value3=e}return n.create=function(r){return function(t){return function(e){return function(u){return new n(r,t,e,u)}}}},n}(),q=function(n){return function(r){return h.remainder(h.remainder(n)(r)+r)(r)}},j=function(n){return function(r){return function(t){return function(u){var o=s.clamp(s.ordInt)(0)(255)(n),i=f.toNumber(o)/255,a=s.clamp(s.ordInt)(0)(255)(r),c=f.toNumber(a)/255,l=s.clamp(s.ordInt)(0)(255)(t),v=s.max(s.ordInt)(s.max(s.ordInt)(o)(a))(l),m=s.min(s.ordInt)(s.min(s.ordInt)(o)(a))(l),b=v-m|0,d=f.toNumber(b)/255,w=f.toNumber(v+m|0)/510,g=function(){if(0===b)return 0;if(e.otherwise)return d/(1-h.abs(2*w-1));throw new Error("Failed pattern match at Color (line 157, column 5 - line 158, column 75): "+[])}(),p=f.toNumber(l)/255,x=60*function(n){if(0===n)return 0;if(v===o)return q((c-p)/d)(6);if(v===a)return(p-i)/d+2;if(e.otherwise)return(i-c)/d+4;throw new Error("Failed pattern match at Color (line 148, column 5 - line 148, column 17): "+[n.constructor.name])}(b);return new y(x,g,w,u)}}}},C=function(n){return function(r){return function(t){return j(n)(r)(t)(1)}}},I=function(n){return function(r){return function(t){return function(e){return j(f.round(255*n))(f.round(255*r))(f.round(255*t))(e)}}}},M=function(n){return function(r){return function(t){return I(n)(r)(t)(1)}}},N=function(n){return function(r){return function(t){var u=function(n){if(n<=.0031308)return 12.92*n;if(e.otherwise)return 1.055*h.pow(n)(1/2.4)-.055;throw new Error("Failed pattern match at Color (line 224, column 5 - line 225, column 65): "+[n.constructor.name])},o=u(-.9689*n+1.8758*r+.0415*t),i=u(3.2406*n-1.5372*r-.4986*t),a=u(.0557*n-.204*r+1.057*t);return M(i)(o)(a)}}},E=function(n){return function(r){return function(t){return r+n*(t-r)}}},F=function(n){return function(r){return function(t){var e=[{from:r,to:t},{from:r,to:t+360},{from:r+360,to:t}],u=l.fromJust()(i.minimumBy(i.foldableArray)(s.comparing(s.ordNumber)(function(n){return h.abs(n.to-n.from)}))(e));return E(n)(u.from)(u.to)}}},S=function(n){return function(r){return function(t){var e=h.pi/180,u=t.value1-r.value1,o=t.value2-r.value2,i=(r.value0+120)*e,a=(t.value0+120)*e-i;return function(e){var c=h.pow(r.value2+o*e)(n),f=i+a*e,l=(r.value1+u*e)*c*(1-c),s=c+l*(1.97294*h.cos(f)),v=c+l*(-.29227*h.cos(f)-.90649*h.sin(f)),m=c+l*(-.14861*h.cos(f)+1.78277*h.sin(f)),b=E(e)(r.value3)(t.value3);return I(m)(v)(s)(b)}}}},D=function(n){return function(r){return function(t){return function(e){var u=s.clamp(s.ordNumber)(0)(1)(r),o=s.clamp(s.ordNumber)(0)(1)(t),i=s.clamp(s.ordNumber)(0)(1)(e);return new y(n,u,o,i)}}}},A=function(n){return function(r){return function(t){return function(e){var u=r;if(0===t)return D(n)(u/(2-u))(0)(e);if(0===r&&1===t)return D(n)(0)(1)(e);var o=(2-r)*t,i=(u=r*t/(o<1?o:2-o),o/2);return D(n)(u)(i)(e)}}}},L=function(n){return function(r){return function(t){return A(n)(r)(t)(1)}}},B=function(n){return function(r){return D(r.value0)(r.value1)(r.value2+n)(r.value3)}},H=function(n){return function(r){return D(r.value0+n)(r.value1)(r.value2)(r.value3)}},z=function(n){return function(r){return D(r.value0)(r.value1+n)(r.value2)(r.value3)}},R=function(n){return function(r){return function(t){return D(n)(r)(t)(1)}}},G=R(0)(0)(1),k=function(n){return R(0)(0)(n)},J=function(n){var r=s.clamp(s.ordInt)(0)(16777215)(n),t=r>>8&255,e=255&r;return C(r>>16&255)(t)(e)},O=function(e){var o,i,s=(o=l.fromMaybe(0),i=f.fromStringAs(f.hexadecimal),function(n){return o(i(n))}),v=4===m.length(e),h=u.either(a.const(l.Nothing.value))(l.Just.create),d="([0-9a-f][0-9a-f])",w=v?"([0-9a-f])([0-9a-f])([0-9a-f])":d+(d+d),g=b.regex("^#(?:"+w+")$")(b.parseFlags("i"));return r.bind(l.bindMaybe)(h(g))(function(u){return r.bind(l.bindMaybe)(b.match(u)(e))(function(e){return r.bind(l.bindMaybe)(c.map(l.functorMaybe)(s)(r.join(l.bindMaybe)(t.index(e)(1))))(function(u){return r.bind(l.bindMaybe)(c.map(l.functorMaybe)(s)(r.join(l.bindMaybe)(t.index(e)(2))))(function(o){return r.bind(l.bindMaybe)(c.map(l.functorMaybe)(s)(r.join(l.bindMaybe)(t.index(e)(3))))(function(r){return v?n.pure(l.applicativeMaybe)(C((16*u|0)+u|0)((16*o|0)+o|0)((16*r|0)+r|0)):n.pure(l.applicativeMaybe)(C(u)(o)(r))})})})})})},P=function(n){return z(-n)},V=function(n){return B(-n)},X={xn:.95047,yn:1,zn:1.08883},Y=function(n){return function(r){return function(t){var u=(n+16)/116,o=function(n){if(n>6/29)return h.pow(n)(3);if(e.otherwise)return 6/29*3*(6/29)*(n-4/29);throw new Error("Failed pattern match at Color (line 249, column 5 - line 250, column 64): "+[n.constructor.name])},i=X.xn*o(u+r/500),a=X.yn*o(u),c=X.zn*o(u-t/200);return N(i)(a)(c)}}},Z=function(n){return function(r){return function(t){var e=h.pi/180,u=r*h.sin(t*e),o=r*h.cos(t*e);return Y(n)(o)(u)}}},$=function(n){var r=function(n){return v.show(v.showNumber)(f.toNumber(f.round(100*n))/100)},t=r(100*n.value1)+"%",e=r(100*n.value2)+"%",u=r(n.value0),o=v.show(v.showNumber)(n.value3);return 1===n.value3?"hsl("+u+", "+t+", "+e+")":"hsla("+u+", "+t+", "+e+", "+o+")"},K=H(180),Q=function(n){return 360===n?n:q(n)(360)},T=function(n){return{h:Q(n.value0),s:n.value1,l:n.value2,a:n.value3}},U=function(n){var r=n.value1;if(0===n.value2)return{h:Q(n.value0),s:2*r/(1+r),v:0,a:n.value3};if(0===n.value1&&1===n.value2)return{h:Q(n.value0),s:0,v:1,a:n.value3};var t=n.value1*(n.value2<.5?n.value2:1-n.value2),e=n.value2+t;r=2*t/(n.value2+t);return{h:Q(n.value0),s:r,v:e,a:n.value3}},W=function(n){var r=Q(n.value0)/60,t=(1-h.abs(2*n.value2-1))*n.value1,u=n.value2-t/2,o=t*(1-h.abs(h.remainder(r)(2)-1)),i=function(){if(r<1)return{r:t,g:o,b:0};if(1<=r&&r<2)return{r:o,g:t,b:0};if(2<=r&&r<3)return{r:0,g:t,b:o};if(3<=r&&r<4)return{r:0,g:o,b:t};if(4<=r&&r<5)return{r:o,g:0,b:t};if(e.otherwise)return{r:t,g:0,b:o};throw new Error("Failed pattern match at Color (line 342, column 5 - line 347, column 61): "+[])}();return{r:i.r+u,g:i.g+u,b:i.b+u,a:n.value3}},_=function(n){var r=W(n),t=function(n){if(n<=.03928)return n/12.92;if(e.otherwise)return h.pow((n+.055)/1.055)(2.4);throw new Error("Failed pattern match at Color (line 604, column 9 - line 605, column 61): "+[n.constructor.name])},u=t(r.g);return.2126*t(r.r)+.7152*u+.0722*t(r.b)},nn=function(n){return function(r){var t=_(r),e=_(n);return e>t?(e+.05)/(t+.05):(t+.05)/(e+.05)}},rn=function(n){return function(r){return nn(n)(r)>4.5}},tn=function(n){var r=W(n),t=f.round(255*r.g);return{r:f.round(255*r.r),g:t,b:f.round(255*r.b),a:r.a}},en=function(n){var r=tn(n),t=v.show(v.showInt)(r.g),e=v.show(v.showInt)(r.r),u=v.show(v.showInt)(r.b),o=v.show(v.showNumber)(r.a);return 1===r.a?"rgb("+e+", "+t+", "+u+")":"rgba("+e+", "+t+", "+u+", "+o+")"},un=new o.Eq(function(n){return function(r){var t=tn(r),e=tn(n);return e.r===t.r&&e.g===t.g&&e.b===t.b&&e.a===t.a}}),on=new v.Show(function(n){var r=tn(n);return"rgba "+v.show(v.showInt)(r.r)+" "+v.show(v.showInt)(r.g)+" "+v.show(v.showInt)(r.b)+" "+v.show(v.showNumber)(r.a)}),an=function(n){var r=function(n){var r=f.toStringAs(f.hexadecimal)(n);return 1===m.length(r)?"0"+r:r},t=tn(n);return"#"+(r(t.r)+(r(t.g)+r(t.b)))},cn=function(n){var r=W(n),t=function(n){if(n<=.04045)return n/12.92;if(e.otherwise)return h.pow((n+.055)/1.055)(2.4);throw new Error("Failed pattern match at Color (line 366, column 5 - line 367, column 63): "+[n.constructor.name])},u=t(r.g),o=t(r.r),i=t(r.b);return{x:.4124*o+.3576*u+.1805*i,y:.2126*o+.7152*u+.0722*i,z:.0193*o+.1192*u+.9505*i}},fn=function(n){var r=cn(n),t=h.pow(6/29)(3),u=function(n){if(n>t)return h.pow(n)(1/3);if(e.otherwise)return 1/3*h.pow(29/6)(2)*n+4/29;throw new Error("Failed pattern match at Color (line 384, column 5 - line 385, column 76): "+[n.constructor.name])},o=u(r.y/X.yn),i=116*o-16,a=200*(o-u(r.z/X.zn));return{l:i,a:500*(u(r.x/X.xn)-o),b:a}},ln=function(n){return function(r){var t=function(n){return h.pow(n)(2)},e=fn(r),u=fn(n);return h.sqrt(t(u.l-e.l)+t(u.a-e.a)+t(u.b-e.b))}},sn=function(n){var r=fn(n),t=180/h.pi,e=h.sqrt(r.a*r.a+r.b*r.b),u=q(h.atan2(r.b)(r.a)*t)(360);return{l:r.l,c:e,h:u}},vn=function(n){return function(r){return function(t){return function(e){if(n instanceof g){var u=T(t),o=T(r);return D(F(e)(o.h)(u.h))(E(e)(o.s)(u.s))(E(e)(o.l)(u.l))(E(e)(o.a)(u.a))}if(n instanceof w){u=W(t),o=W(r);return I(E(e)(o.r)(u.r))(E(e)(o.g)(u.g))(E(e)(o.b)(u.b))(E(e)(o.a)(u.a))}if(n instanceof p){u=sn(t),o=sn(r);return Z(E(e)(o.l)(u.l))(E(e)(o.c)(u.c))(F(e)(o.h)(u.h))}if(n instanceof x){u=fn(t),o=fn(r);return Y(E(e)(o.l)(u.l))(E(e)(o.a)(u.a))(E(e)(o.b)(u.b))}throw new Error("Failed pattern match at Color (line 520, column 1 - line 520, column 34): "+[n.constructor.name,r.constructor.name,t.constructor.name,e.constructor.name])}}}},mn=function(n){var r=sn(n);return P(1)(Z(r.l)(0)(0))},bn=function(n){var r=W(n);return(299*r.r+587*r.g+114*r.b)/1e3},hn=function(n){return bn(n)>.5},dn=R(0)(0)(0),wn=function(n){if(hn(n))return dn;if(e.otherwise)return G;throw new Error("Failed pattern match at Color (line 643, column 1 - line 643, column 28): "+[n.constructor.name])};module.exports={RGB:w,HSL:g,LCh:p,Lab:x,rgba:j,rgb:C,"rgba'":I,"rgb'":M,hsla:D,hsl:R,hsva:A,hsv:L,xyz:N,lab:Y,lch:Z,fromHexString:O,fromInt:J,toHSLA:T,toHSVA:U,toRGBA:tn,"toRGBA'":W,toXYZ:cn,toLab:fn,toLCh:sn,toHexString:an,cssStringHSLA:$,cssStringRGBA:en,black:dn,white:G,graytone:k,rotateHue:H,complementary:K,lighten:B,darken:V,saturate:z,desaturate:P,toGray:mn,mix:vn,mixCubehelix:S,brightness:bn,luminance:_,contrast:nn,isLight:hn,isReadable:rn,textColor:wn,distance:ln,showColor:on,eqColor:un};
+},{"../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Data.Array.NonEmpty/index.js":"eTKN","../Data.Boolean/index.js":"ObQr","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Int/index.js":"xNJb","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Show/index.js":"mFY7","../Data.String.CodePoints/index.js":"mAJY","../Data.String.Regex/index.js":"lBFq","../Math/index.js":"Rpaz"}],"rp+n":[function(require,module,exports) {
+"use strict";var r=require("../Color/index.js"),o=r.fromInt(16768e3),n=r.fromInt(3787980),t=r.fromInt(14540253),m=r.fromInt(16728374),e=r.fromInt(11603401),f=r.fromInt(16745755),I=r.fromInt(4036976),l=r.fromInt(7999),a=r.fromInt(8721483),i=r.fromInt(130928),u=r.fromInt(3066944),s=r.fromInt(11184810),v=r.fromInt(15733438),c=r.fromInt(29913),d=r.fromInt(1118481),g=r.fromInt(8379391);module.exports={navy:l,blue:c,aqua:g,teal:n,olive:I,green:u,lime:i,yellow:o,orange:f,red:m,maroon:a,fuchsia:v,purple:e,"black'":d,gray:s,silver:t};
+},{"../Color/index.js":"f3ma"}],"BG0s":[function(require,module,exports) {
+function t(t){return function(o){return function(e){return t.apply(e,[o])}}}exports.toPrecisionNative=t(Number.prototype.toPrecision),exports.toFixedNative=t(Number.prototype.toFixed),exports.toExponentialNative=t(Number.prototype.toExponential),exports.toString=function(t){return t.toString()};
+},{}],"VX77":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),t=require("../Data.Ord/index.js"),e=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),r=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),i=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),u=function(t){if(t instanceof e)return n.toPrecisionNative(t.value0);if(t instanceof r)return n.toFixedNative(t.value0);if(t instanceof i)return n.toExponentialNative(t.value0);throw new Error("Failed pattern match at Data.Number.Format (line 59, column 1 - line 59, column 40): "+[t.constructor.name])},o=function(){var n=t.clamp(t.ordInt)(1)(21);return function(t){return e.create(n(t))}}(),a=function(){var n=t.clamp(t.ordInt)(0)(20);return function(t){return r.create(n(t))}}(),c=function(){var n=t.clamp(t.ordInt)(0)(20);return function(t){return i.create(n(t))}}();module.exports={precision:o,fixed:a,exponential:c,toStringWith:u,toString:n.toString};
+},{"./foreign.js":"BG0s","../Data.Ord/index.js":"r4Vb"}],"KkC9":[function(require,module,exports) {
+"use strict";exports.unsafeCreateElementImpl=function(e,t,n){var o=document.createElement(e);return o.id=t,o.className=n,o},exports.initializeCanvasImpl=function(e,t){e.width=t.width,e.height=t.height;var n=e.getContext("2d");!0===n.imageSmoothingEnabled&&(n.imageSmoothingEnabled=!1)},exports.setElementStyleImpl=function(e,t,n){e.style[t]=n},exports.appendElem=function(e){return function(t){return function(){e.appendChild(t)}}},exports.setContainerStyle=function(e){return function(t){return function(){e.style.position="relative",e.style.border="1px solid black",e.style.display="block",e.style.margin="0",e.style.padding="0",e.style.width=t.width-2+"px",e.style.height=t.height+"px"}}},exports.drawCopies=function(e,t,n,o,i){Math.round(t.width),Math.round(t.height);i.forEach(function(i){o(i)&&n.drawImage(e,Math.floor(i.x-t.width/2),Math.floor(i.y-t.height/2))})},exports.setCanvasTranslation=function(e){return function(t){return function(){t.getContext("2d").setTransform(1,0,0,1,e.x,e.y)}}},exports.elementClickImpl=function(e,t){e.addEventListener("mousedown",function(n){var o=e.getBoundingClientRect(),i=n.clientX-o.left+window.scrollX,r=n.clientY-o.top+window.scrollY;t({x:i,y:r})()})},exports.scrollCanvasImpl=function(e,t,n){var o=e.getContext("2d");o.save(),o.globalCompositeOperation="copy",o.drawImage(t,0,0),o.restore();var i=t.getContext("2d");i.save(),i.globalCompositeOperation="copy",i.setTransform(1,0,0,1,0,0),i.drawImage(e,n.x,n.y),i.restore()},exports.zoomCanvasImpl=function(e,t,n){var o=e.getContext("2d");o.save(),o.globalCompositeOperation="copy",o.drawImage(t,0,0),o.restore();var i=t.getContext("2d"),r=t.width,a=t.height,l=n.left*r,s=(n.right-n.left)*r;i.save(),i.globalCompositeOperation="copy",i.setTransform(1,0,0,1,0,0),i.drawImage(e,l,0,s,a,0,0,r,a),i.restore()},exports.canvasDragImpl=function(e){return function(t){return function(){var n=function(e){var n=e.clientX,o=e.clientY,i=e.clientX,r=e.clientY,a=function(e){t({during:{x:i-e.clientX,y:r-e.clientY}})(),i=e.clientX,r=e.clientY};document.addEventListener("mousemove",a),document.addEventListener("mouseup",function(e){document.removeEventListener("mousemove",a),t({total:{x:e.clientX-n,y:e.clientY-o}})()},{once:!0})};return e.addEventListener("mousedown",n),function(){e.removeEventListener("mousedown",n)}}}},exports.canvasWheelCBImpl=function(e){return function(t){return function(){e.addEventListener("wheel",function(n){n.preventDefault();var o=e.getBoundingClientRect(),i=n.clientX-o.left+window.scrollX,r=n.clientY-o.top+window.scrollY;t({x:i,y:r})(Math.sign(n.deltaY))()})}}};
+},{}],"fCig":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Category/index.js"),e=require("../Data.Either/index.js"),u=require("../Data.Eq/index.js"),i=require("../Data.Foldable/index.js"),o=require("../Data.Function/index.js"),f=require("../Data.Functor/index.js"),c=require("../Data.HeytingAlgebra/index.js"),a=require("../Data.Lens.Internal.Forget/index.js"),p=require("../Data.Lens.Internal.Indexed/index.js"),d=require("../Data.List.Types/index.js"),l=require("../Data.Maybe/index.js"),s=require("../Data.Maybe.First/index.js"),y=require("../Data.Maybe.Last/index.js"),w=require("../Data.Monoid/index.js"),v=require("../Data.Monoid.Additive/index.js"),j=require("../Data.Monoid.Conj/index.js"),D=require("../Data.Monoid.Disj/index.js"),q=require("../Data.Monoid.Dual/index.js"),x=require("../Data.Monoid.Endo/index.js"),g=require("../Data.Monoid.Multiplicative/index.js"),O=require("../Data.Newtype/index.js"),m=require("../Data.Ord/index.js"),F=require("../Data.Profunctor/index.js"),h=require("../Data.Profunctor.Choice/index.js"),M=require("../Data.Semigroup/index.js"),A=require("../Data.Tuple/index.js"),E=require("../Data.Unit/index.js"),C=function(n){return function(r){return function(t){var e,u=(e=l.maybe(w.mempty(n))(function(r){return M.append(n.Semigroup0())(O.unwrap(a.newtypeForget)(t)(r.value0))(u(r.value1))}),function(n){return e(r(n))});return u}}},b=function(n){return function(r){return function(t){return function r(t){return function(e){return 0===t?w.mempty(w.monoidFn(n)):M.append(M.semigroupFn(n.Semigroup0()))(e)(r(t-1|0)(e))}}(r)(t)}}},L=function(n){return function(r){return O.unwrap(a.newtypeForget)(n(p.Indexed(A.uncurry(r))))}},J=function(n){return function(r){return function(t){var e=o.flip(O.unwrap(O.newtypeEndo))(t),u=O.unwrap(O.newtypeDual),i=L(n)(function(n){var t=o.flip(r(n));return function(n){return q.Dual(x.Endo(t(n)))}});return function(n){return e(u(i(n)))}}}},N=function(n){return function(r){return function(t){var e=o.flip(O.unwrap(O.newtypeEndo))(t),u=L(n)(function(n){var t=r(n);return function(n){return x.Endo(t(n))}});return function(n){return e(u(n))}}}},S=function(n){return N(n)(function(n){return function(r){return function(t){return new d.Cons(new A.Tuple(n,r),t)}}})(d.Nil.value)},T=function(t){return function(e){return function(u){return N(e)(function(n){return function(e){return function(i){return r.applySecond(t.Apply0())(f.void(t.Apply0().Functor0())(u(n)(e)))(i)}}})(n.pure(t)(E.unit))}}},I=function(n){var r=T(n);return function(n){return o.flip(r(n))}},P=function(n){return function(r){return N(n)(function(n){return function(t){return l.maybe(r(n)(t)?new l.Just(t):l.Nothing.value)(l.Just.create)}})(l.Nothing.value)}},_=function(n){return function(n){return function(r){var t=O.unwrap(O.newtypeDisj),e=L(n)(function(n){var t=r(n);return function(n){return D.Disj(t(n))}});return function(n){return t(e(n))}}}},B=function(n){return function(n){return function(r){var t=O.unwrap(O.newtypeConj),e=L(n)(function(n){var t=r(n);return function(n){return j.Conj(t(n))}});return function(n){return t(e(n))}}}},H=function(n){return function(r){return function(t){return i.foldMap(r)(n)(t)}}},R=O.under(a.newtypeForget)(a.newtypeForget)(a.Forget),U=function(n){return R(n)(t.identity(t.categoryFn))},k=function(n){return function(r){return function(t){var e,u=o.flip(O.unwrap(O.newtypeEndo))(t),i=O.unwrap(O.newtypeDual),f=R(n)((e=o.flip(r),function(n){return q.Dual(x.Endo(e(n)))}));return function(n){return u(i(f(n)))}}}},z=function(n){return function(r){return function(t){var e=o.flip(O.unwrap(O.newtypeEndo))(t),u=R(n)(function(n){return x.Endo(r(n))});return function(n){return e(u(n))}}}},G=function(n){return function(r){return z(r)(function(r){var t=l.maybe(r)(function(r){return function(t){return m.greaterThan(n)(r)(t)?r:t}}(r));return function(n){return l.Just.create(t(n))}})(l.Nothing.value)}},K=function(n){return function(r){return z(r)(function(r){var t=l.maybe(r)(function(r){return function(t){return m.lessThan(n)(r)(t)?r:t}}(r));return function(n){return l.Just.create(t(n))}})(l.Nothing.value)}},Q=function(n){return z(n)(d.Cons.create)(d.Nil.value)},V=function(n){return function(r){return Q(r)(n)}},W=function(t){return function(e){return function(u){return z(e)(function(n){return function(e){return r.applySecond(t.Apply0())(f.void(t.Apply0().Functor0())(u(n)))(e)}})(n.pure(t)(E.unit))}}},X=function(n){return function(r){var t=O.unwrap(O.newtypeDisj),e=R(r)(o.const(c.tt(n)));return function(n){return t(e(n))}}},Y=function(n){return function(r){var t=O.unwrap(O.newtypeConj),e=R(r)(o.const(c.ff(n)));return function(n){return t(e(n))}}},Z=function(n){var r=O.unwrap(y.newtypeLast),t=R(n)(function(n){return y.Last(l.Just.create(n))});return function(n){return r(t(n))}},$=function(n){var r=O.unwrap(O.newtypeAdditive),t=R(n)(o.const(1));return function(n){return r(t(n))}},nn=function(n){var r=O.unwrap(s.newtypeFirst),t=R(n)(function(n){return s.First(l.Just.create(n))});return function(n){return r(t(n))}},rn=function(n){return function(r){return nn(r)(n)}},tn=function(n){return function(n){var r=O.unwrap(O.newtypeMultiplicative),t=R(n)(g.Multiplicative);return function(n){return r(t(n))}}},en=function(t){return function(e){var u=o.flip(O.unwrap(O.newtypeEndo))(n.pure(t)(E.unit)),i=R(e)(function(n){return function(e){return r.applySecond(t.Apply0())(n)(e)}});return function(n){return u(i(n))}}},un=function(n){return function(n){var r=O.unwrap(O.newtypeAdditive),t=R(n)(v.Additive);return function(n){return r(t(n))}}},on=function(n){var r=O.unwrap(s.newtypeFirst),t=R(n)(function(n){return s.First(l.Just.create(n))});return function(n){return r(t(n))}},fn=function(n){return function(r){return z(n)(function(n){return l.maybe(r(n)?new l.Just(n):l.Nothing.value)(l.Just.create)})(l.Nothing.value)}},cn=function(n){return function(r){var u=F.dimap(n.Profunctor0())(function(n){return r(n)?new e.Right(n):new e.Left(n)})(e.either(t.identity(t.categoryFn))(t.identity(t.categoryFn))),i=h.right(n);return function(n){return u(i(n))}}},an=function(n){return function(n){return function(r){var t=O.unwrap(O.newtypeDisj),e=R(n)(function(n){return D.Disj(r(n))});return function(n){return t(e(n))}}}},pn=function(n){return function(r){return function(t){return an(c.heytingAlgebraBoolean)(r)(function(r){return u.eq(n)(r)(t)})}}},dn=function(n){return function(r){return an(n)(r)(t.identity(t.categoryFn))}},ln=function(n){return function(n){return function(r){var t=O.unwrap(O.newtypeConj),e=R(n)(function(n){return j.Conj(r(n))});return function(n){return t(e(n))}}}},sn=function(n){return function(r){return ln(n)(r)(t.identity(t.categoryFn))}},yn=function(n){return function(r){return function(t){return ln(c.heytingAlgebraBoolean)(r)(function(r){return u.notEq(n)(r)(t)})}}};module.exports={previewOn:rn,toListOfOn:V,preview:nn,foldOf:U,foldMapOf:R,foldrOf:z,foldlOf:k,toListOf:Q,firstOf:on,lastOf:Z,maximumOf:G,minimumOf:K,allOf:ln,anyOf:an,andOf:sn,orOf:dn,elemOf:pn,notElemOf:yn,sumOf:un,productOf:tn,lengthOf:$,findOf:fn,sequenceOf_:en,traverseOf_:W,has:X,"hasn't":Y,replicated:b,filtered:cn,folded:H,unfolded:C,ifoldMapOf:L,ifoldrOf:N,ifoldlOf:J,iallOf:B,ianyOf:_,itoListOf:S,itraverseOf_:T};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Lens.Internal.Forget/index.js":"mj9z","../Data.Lens.Internal.Indexed/index.js":"V4/H","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Maybe.First/index.js":"W/l6","../Data.Maybe.Last/index.js":"aQky","../Data.Monoid/index.js":"TiEB","../Data.Monoid.Additive/index.js":"fHyj","../Data.Monoid.Conj/index.js":"U/G5","../Data.Monoid.Disj/index.js":"9bR7","../Data.Monoid.Dual/index.js":"ULyl","../Data.Monoid.Endo/index.js":"2o47","../Data.Monoid.Multiplicative/index.js":"y5cd","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Choice/index.js":"nkqb","../Data.Semigroup/index.js":"EsAJ","../Data.Tuple/index.js":"II/O","../Data.Unit/index.js":"NhVk"}],"KFxX":[function(require,module,exports) {
+"use strict";var e=require("../Data.Bifunctor/index.js"),r=require("../Data.Either/index.js"),t=require("../Data.Functor/index.js"),n=require("../Data.Profunctor/index.js"),u=require("../Data.Profunctor.Choice/index.js"),i=function(){function e(e,r){this.value0=e,this.value1=r}return e.create=function(r){return function(t){return new e(r,t)}},e}(),c=new n.Profunctor(function(t){return function(n){return function(u){return new i(function(e){return n(u.value0(e))},(c=e.lmap(r.bifunctorEither)(n),function(e){return c(u.value1(t(e)))}));var c}}}),o=new t.Functor(function(t){return function(n){return new i(function(e){return t(n.value0(e))},(u=e.lmap(r.bifunctorEither)(t),function(e){return u(n.value1(e))}));var u}}),a=new u.Choice(function(){return c},function(t){return new i(function(e){return r.Left.create(t.value0(e))},r.either((n=e.lmap(r.bifunctorEither)(r.Left.create),function(e){return n(t.value1(e))}))(function(e){return r.Left.create(r.Right.create(e))}));var n},function(t){return new i(function(e){return r.Right.create(t.value0(e))},r.either(function(e){return r.Left.create(r.Left.create(e))})((n=e.lmap(r.bifunctorEither)(r.Right.create),function(e){return n(t.value1(e))})));var n});module.exports={Market:i,functorMarket:o,profunctorMarket:c,choiceMarket:a};
+},{"../Data.Bifunctor/index.js":"e2Wc","../Data.Either/index.js":"B2JL","../Data.Functor/index.js":"+0AE","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Choice/index.js":"nkqb"}],"h1YV":[function(require,module,exports) {
+"use strict";var n=require("../Data.Either/index.js"),r=require("../Data.Eq/index.js"),e=require("../Data.Foldable/index.js"),t=require("../Data.Function/index.js"),u=require("../Data.Functor/index.js"),o=require("../Data.Newtype/index.js"),i=require("../Data.Ord/index.js"),c=require("../Data.Profunctor/index.js"),a=require("../Data.Profunctor.Choice/index.js"),f=require("../Data.Profunctor.Closed/index.js"),d=require("../Data.Profunctor.Costrong/index.js"),g=require("../Data.Traversable/index.js"),s=function(n){return n},q=new c.Profunctor(function(n){return function(n){return function(r){return n(r)}}}),l=new d.Costrong(function(){return q},function(n){return n.value0},function(n){return n.value1}),w=new f.Closed(function(){return q},function(n){return t.const(n)}),x=new a.Choice(function(){return q},function(r){return new n.Left(r)},function(r){return new n.Right(r)}),j=new o.Newtype(function(n){return n},s),p=new u.Functor(function(n){return function(r){return n(r)}}),D=new e.Foldable(function(n){return function(n){return function(r){return n(r)}}},function(n){return function(r){return function(e){return n(r)(e)}}},function(n){return function(r){return function(e){return n(e)(r)}}}),T=new g.Traversable(function(){return D},function(){return p},function(n){return function(r){return u.map(n.Apply0().Functor0())(s)(r)}},function(n){return function(r){return function(e){return u.map(n.Apply0().Functor0())(s)(r(e))}}}),C=function(n){return new r.Eq(function(e){return function(t){return r.eq(n)(e)(t)}})},F=function(n){return new i.Ord(function(){return C(n.Eq0())},function(r){return function(e){return i.compare(n)(r)(e)}})},b=new r.Eq1(function(n){return r.eq(C(n))}),v=new i.Ord1(function(){return b},function(n){return i.compare(F(n))});module.exports={Tagged:s,newtypeTagged:j,eqTagged:C,eq1Tagged:b,ordTagged:F,ord1Tagged:v,functorTagged:p,taggedProfunctor:q,taggedChoice:x,taggedCostrong:l,taggedClosed:w,foldableTagged:D,traversableTagged:T};
+},{"../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Choice/index.js":"nkqb","../Data.Profunctor.Closed/index.js":"af4y","../Data.Profunctor.Costrong/index.js":"NfU6","../Data.Traversable/index.js":"n7EE"}],"4AcV":[function(require,module,exports) {
+"use strict";var n=require("../Control.Category/index.js"),r=require("../Control.MonadZero/index.js"),e=require("../Data.Either/index.js"),t=require("../Data.Eq/index.js"),u=require("../Data.Function/index.js"),i=require("../Data.HeytingAlgebra/index.js"),o=require("../Data.Lens.Internal.Market/index.js"),a=require("../Data.Lens.Internal.Tagged/index.js"),c=require("../Data.Maybe/index.js"),f=require("../Data.Newtype/index.js"),s=require("../Data.Profunctor/index.js"),d=require("../Data.Profunctor.Choice/index.js"),g=function(r){return function(t){var u=r(new o.Market(n.identity(n.categoryFn),e.Right.create));return t(u.value0)(u.value1)}},y=f.under(a.newtypeTagged)(a.newtypeTagged)(a.Tagged),q=function(r){return function(t){return function(u){return function(i){return s.dimap(u.Profunctor0())(t)(e.either(n.identity(n.categoryFn))(n.identity(n.categoryFn)))(d.right(u)(s.rmap(u.Profunctor0())(r)(i)))}}}},x=function(n){return function(r){return function(t){return q(n)(function(n){return c.maybe(new e.Left(n))(e.Right.create)(r(n))})(t)}}},j=function(n){return function(e){return function(t){return x(u.const(n))((i=r.guard(c.monadZeroMaybe),function(n){return i(e(n))}))(t);var i}}},l=function(n){return function(r){return function(e){return j(r)(function(e){return t.eq(n)(e)(r)})(e)}}},m=function(n){return g(n)(function(n){return function(n){return n}})},D=function(n){return function(r){var t=e.either(u.const(i.ff(n)))(u.const(i.tt(n))),o=m(r);return function(n){return t(o(n))}}},h=function(n){return function(r){var e=i.not(n),t=D(n)(r);return function(n){return e(t(n))}}},p=function(n){return function(r){return g(n)(function(n){return function(e){return function(t){return q(n)(e)(r)(t)}}})}};module.exports={"prism'":x,prism:q,only:l,nearly:j,review:y,is:D,"isn't":h,matching:m,clonePrism:p,withPrism:g};
+},{"../Control.Category/index.js":"IAi2","../Control.MonadZero/index.js":"lD5R","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.HeytingAlgebra/index.js":"paZe","../Data.Lens.Internal.Market/index.js":"KFxX","../Data.Lens.Internal.Tagged/index.js":"h1YV","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Choice/index.js":"nkqb"}],"kg0W":[function(require,module,exports) {
+"use strict";var n=require("../Data.Profunctor/index.js"),u=require("../Data.Profunctor.Strong/index.js"),r=require("../Data.Tuple/index.js"),e=function(){function n(n,u){this.value0=n,this.value1=u}return n.create=function(u){return function(r){return new n(u,r)}},n}(),t=new n.Profunctor(function(n){return function(u){return function(r){return new e(function(u){return r.value0(n(u))},function(e){var t=r.value1(n(e));return function(n){return u(t(n))}})}}}),o=new u.Strong(function(){return t},function(n){return new e(function(u){return n.value0(u.value0)},function(u){return function(e){return new r.Tuple(n.value1(u.value0)(e),u.value1)}})},function(n){return new e(function(u){return n.value0(u.value1)},function(u){return function(e){return new r.Tuple(u.value0,n.value1(u.value1)(e))}})});module.exports={Shop:e,profunctorShop:t,strongShop:o};
+},{"../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Strong/index.js":"w9p6","../Data.Tuple/index.js":"II/O"}],"hi+g":[function(require,module,exports) {
+"use strict";var n=require("../Control.Category/index.js"),e=require("../Data.Lens.Internal.Indexed/index.js"),r=require("../Data.Lens.Internal.Shop/index.js"),t=require("../Data.Newtype/index.js"),u=require("../Data.Profunctor/index.js"),i=require("../Data.Profunctor.Strong/index.js"),o=require("../Data.Tuple/index.js"),c=function(e){return function(t){var u=e(new r.Shop(n.identity(n.categoryFn),function(n){return function(n){return n}}));return t(u.value0)(u.value1)}},f=function(e){return function(t){var u=e(new r.Shop(n.identity(n.categoryFn),function(n){return function(n){return n}}));return t(u.value0)(u.value1)}},a=function(n){return function(e){return function(r){return u.dimap(e.Profunctor0())(n)(function(n){return n.value1(n.value0)})(i.first(e)(r))}}},d=function(n){return function(e){return function(r){return a(function(r){return new o.Tuple(n(r),function(n){return e(r)(n)})})(r)}}},s=function(n){return function(r){return function(o){return u.dimap(r.Profunctor0())(n)(function(n){return n.value1(n.value0)})(i.first(r)(t.un(e.newtypeIndexed)(e.Indexed)(o)))}}},l=function(n){return function(e){return function(r){return s(function(r){return new o.Tuple(n(r),function(n){return e(r)(n)})})(r)}}},x=function(n){return function(e){return c(n)(function(n){return function(r){return function(t){return d(n)(r)(e)(t)}}})}},p=function(n){return function(e){return f(n)(function(n){return function(r){return function(t){return l(n)(r)(e)(t)}}})}};module.exports={lens:d,"lens'":a,withLens:c,cloneLens:x,ilens:l,"ilens'":s,withIndexedLens:f,cloneIndexedLens:p};
+},{"../Control.Category/index.js":"IAi2","../Data.Lens.Internal.Indexed/index.js":"V4/H","../Data.Lens.Internal.Shop/index.js":"kg0W","../Data.Newtype/index.js":"lz8k","../Data.Profunctor/index.js":"0DaD","../Data.Profunctor.Strong/index.js":"w9p6","../Data.Tuple/index.js":"II/O"}],"nwoH":[function(require,module,exports) {
+"use strict";var e=require("../Data.Function/index.js"),n=require("../Data.Lens.Lens/index.js"),r=require("../Record/index.js"),t=function(t){return function(u){return function(i){return function(o){return function(s){return n.lens(r.get(t)(u)(o))(e.flip(r.set(t)(u)(i)(o)))(s)}}}}};module.exports={prop:t};
+},{"../Data.Function/index.js":"ImXJ","../Data.Lens.Lens/index.js":"hi+g","../Record/index.js":"0gG4"}],"62zx":[function(require,module,exports) {
+"use strict";var r=require("../Data.Functor/index.js"),e=require("../Data.Map.Internal/index.js"),n=function(){var n=r.void(e.functorMap);return function(r){return n(r)}}();module.exports={keys:n};
+},{"../Data.Functor/index.js":"+0AE","../Data.Map.Internal/index.js":"RRDs"}],"10U2":[function(require,module,exports) {
+"use strict";exports.null=null,exports.nullable=function(l,n,t){return null==l?n:t(l)},exports.notNull=function(l){return l};
+},{}],"YQ8o":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),n=require("../Data.Eq/index.js"),r=require("../Data.Function/index.js"),u=require("../Data.Maybe/index.js"),l=require("../Data.Ord/index.js"),t=require("../Data.Show/index.js"),o=u.maybe(e.null)(e.notNull),a=function(n){return e.nullable(n,u.Nothing.value,u.Just.create)},i=function(e){return new t.Show((n=u.maybe("null")(t.show(e)),function(e){return n(a(e))}));var n},q=function(e){return new n.Eq(r.on(n.eq(u.eqMaybe(e)))(a))},c=function(e){return new l.Ord(function(){return q(e.Eq0())},r.on(l.compare(u.ordMaybe(e)))(a))},b=new n.Eq1(function(e){return n.eq(q(e))}),d=new l.Ord1(function(){return b},function(e){return l.compare(c(e))});module.exports={toMaybe:a,toNullable:o,showNullable:i,eqNullable:q,eq1Nullable:b,ordNullable:c,ord1Nullable:d,null:e.null,notNull:e.notNull};
+},{"./foreign.js":"10U2","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Show/index.js":"mFY7"}],"+Eae":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Bind/index.js"),e=require("../Control.Monad.Rec.Class/index.js"),t=require("../Control.Monad.ST.Internal/index.js"),u=require("../Data.Array/index.js"),i=require("../Data.Array.ST/index.js"),o=require("../Data.Eq/index.js"),f=require("../Data.Foldable/index.js"),c=require("../Data.Function/index.js"),a=require("../Data.Functor/index.js"),d=require("../Data.List/index.js"),l=require("../Data.List.Types/index.js"),s=require("../Data.Map.Internal/index.js"),p=require("../Data.Maybe/index.js"),q=require("../Data.Monoid/index.js"),b=require("../Data.Ord/index.js"),m=require("../Data.Ordering/index.js"),x=require("../Data.Semigroup/index.js"),S=require("../Data.Show/index.js"),j=require("../Data.Unit/index.js"),w=function(n){return n},y=function(n){return function(r){return function(e){return s.union(n)(r)(e)}}},D=function(n){return s.keys(n)},M=function(n){var r=d.toUnfoldable(n);return function(n){return r(D(n))}},h=function(n){return s.size(n)},L=function(n){return s.singleton(n)(j.unit)},v=function(n){return new S.Show(function(r){return"(fromFoldable "+S.show(l.showList(n))(D(r))+")"})},T=function(n){return new x.Semigroup(y(n))},E=function(n){return function(r){return function(e){return s.member(n)(r)(e)}}},F=function(n){return s.isEmpty(n)},g=function(n){return function(r){return function(e){return s.insert(n)(r)(j.unit)(e)}}},k=new f.Foldable(function(n){return function(r){var e=f.foldMap(l.foldableList)(n)(r);return function(n){return e(D(n))}}},function(n){return function(r){var e=f.foldl(l.foldableList)(n)(r);return function(n){return e(D(n))}}},function(n){return function(r){var e=f.foldr(l.foldableList)(n)(r);return function(n){return e(D(n))}}}),C=function(n){return a.map(p.functorMaybe)(function(n){return n.key})(s.findMin(n))},A=function(n){return a.map(p.functorMaybe)(function(n){return n.key})(s.findMax(n))},O=function(n){return function(r){return function(e){return s.filterWithKey(n)(function(n){return function(e){return r(n)}})(e)}}},U=function(n){return new o.Eq(function(r){return function(e){return o.eq(s.eqMap(n)(o.eqUnit))(r)(e)}})},z=function(n){return new b.Ord(function(){return U(n.Eq0())},function(r){return function(e){return b.compare(l.ordList(n))(D(r))(D(e))}})},R=new o.Eq1(function(n){return o.eq(U(n))}),I=new b.Ord1(function(){return R},function(n){return b.compare(z(n))}),V=s.empty,B=function(n){return function(r){return f.foldl(n)(function(n){return function(e){return g(r)(e)(n)}})(V)}},G=function(o){return function(c){return function(a){var d,s=(d=u.fromFoldable(l.foldableList),function(n){return d(D(n))}),p=s(a),q=u.length(p),x=s(c),S=u.length(x);return B(f.foldableArray)(o)(r.bind(t.bindST)(r.bind(t.bindST)(i.empty)(function(r){return e.tailRecM2(t.monadRecST)(function(u){return function(f){if(u<S&&f<q){var c=b.compare(o)(x[u])(p[f]);if(c instanceof m.EQ)return function(){return i.push(x[u])(r)(),new e.Loop({a:u+1|0,b:f+1|0})};if(c instanceof m.LT)return n.pure(t.applicativeST)(new e.Loop({a:u+1|0,b:f}));if(c instanceof m.GT)return n.pure(t.applicativeST)(new e.Loop({a:u,b:f+1|0}));throw new Error("Failed pattern match at Data.Set (line 176, column 12 - line 181, column 43): "+[c.constructor.name])}return n.pure(t.applicativeST)(new e.Done(r))}})(0)(0)}))(i.unsafeFreeze)())}}},K=function(n){return function(r){return f.foldl(k)(function(e){return function(t){return g(n)(r(t))(e)}})(V)}},Q=function(n){return function(r){return f.foldr(k)(function(e){return function(t){return p.maybe(t)(function(r){return g(n)(r)(t)})(r(e))}})(V)}},W=function(n){return new q.Monoid(function(){return T(n)},V)},H=function(n){return function(r){return f.foldl(n)(y(r))(V)}},J=function(n){return function(r){return function(e){return s.delete(n)(r)(e)}}},N=function(n){return function(r){return function(e){return f.foldl(l.foldableList)(c.flip(J(n)))(r)(D(e))}}},P=function(n){return function(r){return function(e){return F(N(n)(r)(e))}}},X=function(n){return function(r){return function(e){return P(n)(r)(e)&&o.notEq(U(n.Eq0()))(r)(e)}}},Y=function(n){return s.checkValid(n)};module.exports={fromFoldable:B,toUnfoldable:M,empty:V,isEmpty:F,singleton:L,map:K,checkValid:Y,insert:g,member:E,delete:J,size:h,findMin:C,findMax:A,union:y,unions:H,difference:N,subset:P,properSubset:X,intersection:G,filter:O,mapMaybe:Q,eqSet:U,eq1Set:R,showSet:v,ordSet:z,ord1Set:I,monoidSet:W,semigroupSet:T,foldableSet:k};
+},{"../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.ST.Internal/index.js":"Sedc","../Data.Array/index.js":"4t4C","../Data.Array.ST/index.js":"s8si","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Unit/index.js":"NhVk"}],"NCVa":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),t=require("../Control.Alternative/index.js"),e=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),u=require("../Control.Bind/index.js"),i=require("../Control.Category/index.js"),o=require("../Control.Monad/index.js"),a=require("../Control.Monad.Rec.Class/index.js"),c=require("../Control.Monad.Trans.Class/index.js"),f=require("../Control.MonadPlus/index.js"),l=require("../Control.MonadZero/index.js"),p=require("../Control.Plus/index.js"),s=require("../Data.Function/index.js"),d=require("../Data.Functor/index.js"),v=require("../Data.Lazy/index.js"),m=require("../Data.Maybe/index.js"),w=require("../Data.Monoid/index.js"),L=require("../Data.Newtype/index.js"),h=require("../Data.Semigroup/index.js"),y=require("../Data.Tuple/index.js"),M=require("../Data.Unfoldable/index.js"),T=require("../Data.Unfoldable1/index.js"),A=require("../Data.Unit/index.js"),F=require("../Effect.Class/index.js"),C=function(){function n(n,t){this.value0=n,this.value1=t}return n.create=function(t){return function(e){return new n(t,e)}},n}(),b=function(){function n(n){this.value0=n}return n.create=function(t){return new n(t)},n}(),x=function(){function n(){}return n.value=new n,n}(),E=function(n){return n},j=function(n){return function(t){return E(e.pure(n)(new b(t)))}},q=function(n){return function(t){return E(d.map(n)(function(n){return b.create(v.defer(s.const(n)))})(t))}},z=function n(t){return function(e){return function(r){return E(d.map(t.Bind1().Apply0().Functor0())(function(r){if(r instanceof m.Just)return new C(r.value0.value1,v.defer(function(u){return n(t)(e)(r.value0.value0)}));if(r instanceof m.Nothing)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 130, column 3 - line 130, column 60): "+[r.constructor.name])})(e(r)))}}},B=function n(t){return function(r){return u.bind(t.Bind1())(r)(function(r){if(r instanceof C)return e.pure(t.Applicative0())(m.Just.create(new y.Tuple(r.value0,v.force(r.value1))));if(r instanceof b)return n(t)(v.force(r.value0));if(r instanceof x)return e.pure(t.Applicative0())(m.Nothing.value);throw new Error("Failed pattern match at Control.Monad.List.Trans (line 195, column 3 - line 195, column 50): "+[r.constructor.name])})}},g=function(n){return function(t){return d.map(n.Bind1().Apply0().Functor0())(d.map(m.functorMaybe)(y.snd))(B(n)(t))}},D=function(n){return function(t){return function(e){return E(d.map(n)(t)(e))}}},J=function n(t){return function(e){return D(t.Apply0().Functor0())(function(r){if(r instanceof C)return e(r.value0)?new C(r.value0,d.map(v.functorLazy)(n(t)(e))(r.value1)):x.value;if(r instanceof b)return b.create(d.map(v.functorLazy)(n(t)(e))(r.value0));if(r instanceof x)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 154, column 3 - line 154, column 68): "+[r.constructor.name])})}},N=function(n){return function(t){return function(e){return function(r){return z(n)(function(e){return d.map(n.Bind1().Apply0().Functor0())(function(n){if(n instanceof C){var r=t(e.value0)(n.value0);return m.Just.create(new y.Tuple(new y.Tuple(r,v.force(n.value1)),e.value0))}if(n instanceof b)return m.Just.create(new y.Tuple(new y.Tuple(e.value0,v.force(n.value0)),e.value0));if(n instanceof x)return m.Nothing.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 248, column 5 - line 248, column 78): "+[n.constructor.name])})(e.value1)})(new y.Tuple(e,r))}}}},R=function(n){return function(t){return function(r){return E(e.pure(n)(new C(t,r)))}}},P=function(n){return function(t){return function(e){return R(n)(t)(v.defer(s.const(e)))}}},U=function(n){return E(e.pure(n)(x.value))},W=function(n){return function(t){return P(n)(t)(U(n))}},k=function n(t){return function(e){return function(r){if(0===e)return U(t);return D(t.Apply0().Functor0())(function(r){if(r instanceof C)return new C(r.value0,d.map(v.functorLazy)(n(t)(e-1|0))(r.value1));if(r instanceof b)return new b(d.map(v.functorLazy)(n(t)(e))(r.value0));if(r instanceof x)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 147, column 3 - line 147, column 47): "+[r.constructor.name])})(r)}}},S=function n(t){return function(r){return function(i){return function(o){return q(t.Bind1().Apply0().Functor0())(u.bind(t.Bind1())(B(t)(i))(function(i){return u.bind(t.Bind1())(B(t)(o))(function(u){return function(u){return function(i){if(i instanceof m.Nothing)return e.pure(t.Applicative0())(U(t.Applicative0()));if(u instanceof m.Nothing)return e.pure(t.Applicative0())(U(t.Applicative0()));if(u instanceof m.Just&&i instanceof m.Just)return d.map(t.Bind1().Apply0().Functor0())(s.flip(R(t.Applicative0()))(v.defer(function(e){return n(t)(r)(u.value0.value1)(i.value0.value1)})))(r(u.value0.value0)(i.value0.value0));throw new Error("Failed pattern match at Control.Monad.List.Trans (line 260, column 3 - line 260, column 25): "+[u.constructor.name,i.constructor.name])}}(i)(u)})}))}}}},Z=function(n){return function(t){return S(n)(function(r){return function(u){return e.pure(n.Applicative0())(t(r)(u))}})}},Y=new L.Newtype(function(n){return n},E),G=function n(t){return function(e){return D(t)(function(r){if(r instanceof C)return m.fromMaybe(b.create)(d.map(m.functorMaybe)(C.create)(e(r.value0)))(d.map(v.functorLazy)(n(t)(e))(r.value1));if(r instanceof b)return b.create(d.map(v.functorLazy)(n(t)(e))(r.value0));if(r instanceof x)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 183, column 3 - line 183, column 72): "+[r.constructor.name])})}},H=function(n){return function(t){return function(r){return z(n)(function(r){return e.pure(n.Applicative0())(new m.Just(new y.Tuple(t(r),r)))})(r)}}},I=function(n){return H(n)(i.identity(i.categoryFn))},K=function(n){return function(t){return d.map(n.Bind1().Apply0().Functor0())(d.map(m.functorMaybe)(y.fst))(B(n)(t))}},O=function n(t){return new d.Functor(function(e){return D(t)(function(r){if(r instanceof C)return new C(e(r.value0),d.map(v.functorLazy)(d.map(n(t))(e))(r.value1));if(r instanceof b)return new b(d.map(v.functorLazy)(d.map(n(t))(e))(r.value0));if(r instanceof x)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 280, column 5 - line 280, column 48): "+[r.constructor.name])})})},Q=function(n){return function(t){return E(d.map(n.Apply0().Functor0())(s.flip(C.create)(v.defer(function(t){return U(n)})))(t))}},V=new c.MonadTrans(function(n){return Q(n.Applicative0())}),X=function(n){return function(t){return a.tailRecM2(n)(function(r){return function(i){return u.bind(n.Monad0().Bind1())(B(n.Monad0())(i))(function(i){if(i instanceof m.Nothing)return e.pure(n.Monad0().Applicative0())(new a.Done(r));if(i instanceof m.Just)return u.bind(n.Monad0().Bind1())(t(r)(i.value0.value0))(function(t){return e.pure(n.Monad0().Applicative0())(new a.Loop({a:t,b:i.value0.value1}))});throw new Error("Failed pattern match at Control.Monad.List.Trans (line 221, column 5 - line 221, column 45): "+[i.constructor.name])})}})}},$=function(n){return X(n)(function(t){return function(t){return e.pure(n.Monad0().Applicative0())(A.unit)}})(A.unit)},_=function(n){return function(t){return a.tailRecM2(n)(function(r){return function(i){return u.bind(n.Monad0().Bind1())(B(n.Monad0())(i))(function(u){if(u instanceof m.Nothing)return e.pure(n.Monad0().Applicative0())(new a.Done(r));if(u instanceof m.Just)return e.pure(n.Monad0().Applicative0())(new a.Loop({a:t(r)(u.value0.value0),b:u.value0.value1}));throw new Error("Failed pattern match at Control.Monad.List.Trans (line 239, column 7 - line 239, column 47): "+[u.constructor.name])})}})}},nn=function(n){return function(t){return function r(i){return function(o){return u.bind(n.Bind1())(B(n)(o))(function(o){if(o instanceof m.Nothing)return e.pure(n.Applicative0())(i);if(o instanceof m.Just)return u.bind(n.Bind1())(t(i)(o.value0.value0))(s.flip(r)(o.value0.value1));throw new Error("Failed pattern match at Control.Monad.List.Trans (line 212, column 5 - line 212, column 35): "+[o.constructor.name])})}}}},tn=function(n){return nn(n)(function(t){return function(t){return e.pure(n.Applicative0())(A.unit)}})(A.unit)},en=function(n){return function(t){return function r(i){return function(o){return u.bind(n.Bind1())(B(n)(o))(function(u){if(u instanceof m.Nothing)return e.pure(n.Applicative0())(i);if(u instanceof m.Just)return r(t(i)(u.value0.value0))(u.value0.value1);throw new Error("Failed pattern match at Control.Monad.List.Trans (line 229, column 5 - line 229, column 35): "+[u.constructor.name])})}}}},rn=function n(t){return function(e){return D(t)(function(r){if(r instanceof C){var u=d.map(v.functorLazy)(n(t)(e))(r.value1);return e(r.value0)?new C(r.value0,u):new b(u)}if(r instanceof b)return u=d.map(v.functorLazy)(n(t)(e))(r.value0),new b(u);if(r instanceof x)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 176, column 3 - line 176, column 80): "+[r.constructor.name])})}},un=function n(t){return function(e){return D(t.Apply0().Functor0())(function(r){if(r instanceof C)return e(r.value0)?new b(d.map(v.functorLazy)(n(t)(e))(r.value1)):new C(r.value0,r.value1);if(r instanceof b)return b.create(d.map(v.functorLazy)(n(t)(e))(r.value0));if(r instanceof x)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 169, column 3 - line 169, column 70): "+[r.constructor.name])})}},on=function n(t){return function(e){return function(r){if(0===e)return r;return D(t.Apply0().Functor0())(function(r){if(r instanceof C)return new b(d.map(v.functorLazy)(n(t)(e-1|0))(r.value1));if(r instanceof b)return new b(d.map(v.functorLazy)(n(t)(e))(r.value0));if(r instanceof x)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 162, column 3 - line 162, column 44): "+[r.constructor.name])})(r)}}},an=function(n){return function(t){return function(r){return E(e.pure(n)(new C(v.force(t),r)))}}},cn=function(n){return new T.Unfoldable1(function(t){return function(r){return function r(u){if(u.value1 instanceof m.Nothing)return W(n.Applicative0())(u.value0);if(u.value1 instanceof m.Just)return an(n.Applicative0())(e.pure(v.applicativeLazy)(u.value0))(v.defer(function(n){return r(t(u.value1.value0))}));throw new Error("Failed pattern match at Control.Monad.List.Trans (line 294, column 12 - line 296, column 67): "+[u.constructor.name])}(t(r))}})},fn=function(n){return new M.Unfoldable(function(){return cn(n)},function(t){return function(r){return function r(u){if(u instanceof m.Nothing)return U(n.Applicative0());if(u instanceof m.Just)return an(n.Applicative0())(e.pure(v.applicativeLazy)(u.value0.value0))(v.defer(function(n){return r(t(u.value0.value1))}));throw new Error("Failed pattern match at Control.Monad.List.Trans (line 287, column 12 - line 289, column 67): "+[u.constructor.name])}(t(r))}})},ln=function(n){return new h.Semigroup(pn(n))},pn=function(n){return function(t){return function(e){return D(n.Apply0().Functor0())(function(t){if(t instanceof C)return new C(t.value0,d.map(v.functorLazy)(function(t){return h.append(ln(n))(t)(e)})(t.value1));if(t instanceof b)return new b(d.map(v.functorLazy)(function(t){return h.append(ln(n))(t)(e)})(t.value0));if(t instanceof x)return new b(v.defer(s.const(e)));throw new Error("Failed pattern match at Control.Monad.List.Trans (line 106, column 3 - line 106, column 43): "+[t.constructor.name])})(t)}}},sn=function(n){return new w.Monoid(function(){return ln(n)},U(n))},dn=function(n){return G(n)(i.identity(i.categoryFn))},vn=function(n){return new o.Monad(function(){return Ln(n)},function(){return mn(n)})},mn=function n(t){return new u.Bind(function(){return wn(t)},function(e){return function(r){return D(t.Bind1().Apply0().Functor0())(function(e){if(e instanceof C)return new b(d.map(v.functorLazy)(function(i){return h.append(ln(t.Applicative0()))(r(e.value0))(u.bind(n(t))(i)(r))})(e.value1));if(e instanceof b)return new b(d.map(v.functorLazy)(function(e){return u.bind(n(t))(e)(r)})(e.value0));if(e instanceof x)return x.value;throw new Error("Failed pattern match at Control.Monad.List.Trans (line 306, column 5 - line 308, column 31): "+[e.constructor.name])})(e)}})},wn=function(n){return new r.Apply(function(){return O(n.Bind1().Apply0().Functor0())},o.ap(vn(n)))},Ln=function(n){return new e.Applicative(function(){return wn(n)},W(n.Applicative0()))},hn=function(n){return new F.MonadEffect(function(){return vn(n.Monad0())},(t=c.lift(V)(n.Monad0()),e=F.liftEffect(n),function(n){return t(e(n))}));var t,e},yn=function(t){return new n.Alt(function(){return O(t.Apply0().Functor0())},pn(t))},Mn=function(n){return new p.Plus(function(){return yn(n.Applicative0())},U(n.Applicative0()))},Tn=function(n){return new t.Alternative(function(){return Ln(n)},function(){return Mn(n)})},An=function(n){return new l.MonadZero(function(){return Tn(n)},function(){return vn(n)})},Fn=function(n){return new f.MonadPlus(function(){return An(n)})};module.exports={ListT:E,Yield:C,Skip:b,Done:x,catMaybes:dn,cons:an,drop:on,dropWhile:un,filter:rn,foldl:en,foldlRec:_,"foldl'":nn,"foldlRec'":X,fromEffect:Q,head:K,iterate:H,mapMaybe:G,nil:U,prepend:P,"prepend'":R,repeat:I,runListT:tn,runListTRec:$,scanl:N,singleton:W,tail:g,take:k,takeWhile:J,uncons:B,unfold:z,wrapEffect:q,wrapLazy:j,zipWith:Z,"zipWith'":S,newtypeListT:Y,semigroupListT:ln,monoidListT:sn,functorListT:O,unfoldableListT:fn,unfoldable1ListT:cn,applyListT:wn,applicativeListT:Ln,bindListT:mn,monadListT:vn,monadTransListT:V,altListT:yn,plusListT:Mn,alternativeListT:Tn,monadZeroListT:An,monadPlusListT:Fn,monadEffectListT:hn};
+},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad/index.js":"U/Ix","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.Trans.Class/index.js":"5tIR","../Control.MonadPlus/index.js":"HkJx","../Control.MonadZero/index.js":"lD5R","../Control.Plus/index.js":"oMBg","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Lazy/index.js":"aRUE","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unfoldable1/index.js":"S0Nl","../Data.Unit/index.js":"NhVk","../Effect.Class/index.js":"dWtH"}],"8Fyn":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),r=require("../Control.Alternative/index.js"),u=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),i=require("../Control.Lazy/index.js"),o=require("../Control.Monad/index.js"),c=require("../Control.Monad.Error.Class/index.js"),a=require("../Control.Monad.Reader.Class/index.js"),f=require("../Control.Monad.Rec.Class/index.js"),l=require("../Control.Monad.State.Class/index.js"),d=require("../Control.Monad.Trans.Class/index.js"),p=require("../Control.Monad.Writer.Class/index.js"),v=require("../Control.Plus/index.js"),s=require("../Data.Functor/index.js"),w=require("../Data.Monoid/index.js"),T=require("../Data.Newtype/index.js"),m=require("../Data.Semigroup/index.js"),R=require("../Data.Tuple/index.js"),S=require("../Data.Unit/index.js"),W=require("../Effect.Class/index.js"),M=function(){function n(n,r,u){this.value0=n,this.value1=r,this.value2=u}return n.create=function(r){return function(u){return function(e){return new n(r,u,e)}}},n}(),A=function(n){return n},x=function(n){return function(r){return function(u){return function(e){return R.uncurry(r)(n(u)(e))}}}},C=function(n){return n},j=new T.Newtype(function(n){return n},A),q=function(n){return new d.MonadTrans(function(r){return function(e){return function(i){return function(i){return t.bind(r.Bind1())(e)(function(e){return u.pure(r.Applicative0())(new M(i,e,w.mempty(n)))})}}}})},y=function(n){return function(r){return function(u){return function(e){return n(r(u)(e))}}}},h=new i.Lazy(function(n){return function(r){return function(u){return n(S.unit)(r)(u)}}}),B=function(n){return new s.Functor(function(r){return function(u){return function(e){return function(t){return s.map(n)(function(n){return new M(n.value0,r(n.value1),n.value2)})(u(e)(t))}}}})},E=function(n){return function(r){return function(e){return function(i){return t.bind(n.Bind1())(r(e)(i))(function(r){return u.pure(n.Applicative0())(new R.Tuple(r.value0,r.value2))})}}}},b=function(n){return function(r){return function(e){return function(i){return t.bind(n.Bind1())(r(e)(i))(function(r){return u.pure(n.Applicative0())(new R.Tuple(r.value1,r.value2))})}}}},F=function(n){return function(r){return new e.Apply(function(){return B(n.Apply0().Functor0())},function(u){return function(e){return function(i){return function(o){return t.bind(n)(u(i)(o))(function(u){return s.mapFlipped(n.Apply0().Functor0())(e(i)(u.value0))(function(n){return new M(n.value0,u.value1(n.value1),m.append(r.Semigroup0())(u.value2)(n.value2))})})}}}})}},D=function(n){return function(r){return new t.Bind(function(){return F(n)(r)},function(u){return function(e){return function(i){return function(o){return t.bind(n)(u(i)(o))(function(u){var t=e(u.value1);return s.mapFlipped(n.Apply0().Functor0())(t(i)(u.value0))(function(n){return new M(n.value0,n.value1,m.append(r.Semigroup0())(u.value2)(n.value2))})})}}}})}},g=function(n){return function(r){return new u.Applicative(function(){return F(n.Bind1())(r)},function(e){return function(t){return function(t){return u.pure(n.Applicative0())(new M(t,e,w.mempty(r)))}}})}},L=function(n){return function(r){return new o.Monad(function(){return g(n)(r)},function(){return D(n.Bind1())(r)})}},z=function(n){return function(r){return new a.MonadAsk(function(){return L(n)(r)},function(e){return function(t){return u.pure(n.Applicative0())(new M(t,e,w.mempty(r)))}})}},P=function(n){return function(r){return new a.MonadReader(function(){return z(n)(r)},function(n){return function(r){return function(u){return function(e){return r(n(u))(e)}}}})}},k=function(n){return function(r){return new W.MonadEffect(function(){return L(r.Monad0())(n)},(u=d.lift(q(n))(r.Monad0()),e=W.liftEffect(r),function(n){return u(e(n))}));var u,e}},N=function(n){return function(r){return new f.MonadRec(function(){return L(n.Monad0())(r)},function(e){return function(i){return function(o){return function(c){return f.tailRecM(n)(function(i){return function(o){var c=e(o.value1);return t.bind(n.Monad0().Bind1())(c(i)(o.value0))(function(e){return u.pure(n.Monad0().Applicative0())(function(){if(e.value1 instanceof f.Loop)return new f.Loop(new M(e.value0,e.value1.value0,m.append(r.Semigroup0())(o.value2)(e.value2)));if(e.value1 instanceof f.Done)return new f.Done(new M(e.value0,e.value1.value0,m.append(r.Semigroup0())(o.value2)(e.value2)));throw new Error("Failed pattern match at Control.Monad.RWS.Trans (line 127, column 16 - line 129, column 68): "+[e.value1.constructor.name])}())})}}(o))(new M(c,i,w.mempty(r)))}}}})}},U=function(n){return function(r){return new l.MonadState(function(){return L(n)(r)},function(e){return function(t){return function(t){var i=e(t);return u.pure(n.Applicative0())(new M(i.value1,i.value0,w.mempty(r)))}}})}},G=function(n){return function(r){return new p.MonadTell(function(){return L(n)(r)},function(r){return function(e){return function(e){return u.pure(n.Applicative0())(new M(e,S.unit,r))}}})}},H=function(n){return function(r){return new p.MonadWriter(function(){return G(n)(r)},function(r){return function(e){return function(i){return t.bind(n.Bind1())(r(e)(i))(function(r){return u.pure(n.Applicative0())(new M(r.value0,new R.Tuple(r.value1,r.value2),r.value2))})}}},function(r){return function(e){return function(i){return t.bind(n.Bind1())(r(e)(i))(function(r){return u.pure(n.Applicative0())(new M(r.value0,r.value1.value0,r.value1.value1(r.value2)))})}}})}},I=function(n){return function(r){return new c.MonadThrow(function(){return L(n.Monad0())(r)},function(u){return d.lift(q(r))(n.Monad0())(c.throwError(n)(u))})}},J=function(n){return function(r){return new c.MonadError(function(){return I(n.MonadThrow0())(r)},function(r){return function(u){return A(function(e){return function(t){return c.catchError(n)(r(e)(t))(function(n){return u(n)(e)(t)})}})}})}},K=function(r){return new n.Alt(function(){return B(r.Functor0())},function(u){return function(e){return A(function(t){return function(i){return n.alt(r)(u(t)(i))(e(t)(i))}})}})},O=function(n){return new v.Plus(function(){return K(n.Alt0())},function(r){return function(r){return v.empty(n)}})},Q=function(n){return function(u){return function(e){return new r.Alternative(function(){return g(e)(n)},function(){return O(u.Plus1())})}}};module.exports={RWSResult:M,RWST:A,runRWST:C,evalRWST:b,execRWST:E,mapRWST:y,withRWST:x,newtypeRWST:j,functorRWST:B,applyRWST:F,altRWST:K,alternativeRWST:Q,bindRWST:D,applicativeRWST:g,monadRWST:L,monadTransRWST:q,lazyRWST:h,monadEffectRWS:k,monadAskRWST:z,monadReaderRWST:P,monadStateRWST:U,monadTellRWST:G,monadWriterRWST:H,monadThrowRWST:I,monadErrorRWST:J,monadRecRWST:N,plusRWST:O};
+},{"../Control.Alt/index.js":"lN+m","../Control.Alternative/index.js":"aHia","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Lazy/index.js":"y9cE","../Control.Monad/index.js":"U/Ix","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Reader.Class/index.js":"c2ZJ","../Control.Monad.Rec.Class/index.js":"UVIy","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.Trans.Class/index.js":"5tIR","../Control.Monad.Writer.Class/index.js":"gxgA","../Control.Plus/index.js":"oMBg","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Tuple/index.js":"II/O","../Data.Unit/index.js":"NhVk","../Effect.Class/index.js":"dWtH"}],"I4H+":[function(require,module,exports) {
+"use strict";var n=require("../Control.Category/index.js"),t=require("../Control.Monad.Cont.Trans/index.js"),r=require("../Control.Monad.Except.Trans/index.js"),e=require("../Control.Monad.List.Trans/index.js"),f=require("../Control.Monad.Maybe.Trans/index.js"),o=require("../Control.Monad.RWS.Trans/index.js"),a=require("../Control.Monad.Reader.Trans/index.js"),d=require("../Control.Monad.State.Trans/index.js"),i=require("../Control.Monad.Trans.Class/index.js"),u=require("../Control.Monad.Writer.Trans/index.js"),c=require("../Effect.Aff/index.js"),s=function(n,t){this.MonadEffect0=n,this.liftAff=t},M=new s(function(){return c.monadEffectAff},n.identity(n.categoryFn)),E=function(n){return n.liftAff},T=function(n){return new s(function(){return t.monadEffectContT(n.MonadEffect0())},(r=i.lift(t.monadTransContT)(n.MonadEffect0().Monad0()),e=E(n),function(n){return r(e(n))}));var r,e},m=function(n){return new s(function(){return r.monadEffectExceptT(n.MonadEffect0())},(t=i.lift(r.monadTransExceptT)(n.MonadEffect0().Monad0()),e=E(n),function(n){return t(e(n))}));var t,e},l=function(n){return new s(function(){return e.monadEffectListT(n.MonadEffect0())},(t=i.lift(e.monadTransListT)(n.MonadEffect0().Monad0()),r=E(n),function(n){return t(r(n))}));var t,r},x=function(n){return new s(function(){return f.monadEffectMaybe(n.MonadEffect0())},(t=i.lift(f.monadTransMaybeT)(n.MonadEffect0().Monad0()),r=E(n),function(n){return t(r(n))}));var t,r},A=function(n){return function(t){return new s(function(){return o.monadEffectRWS(t)(n.MonadEffect0())},(r=i.lift(o.monadTransRWST(t))(n.MonadEffect0().Monad0()),e=E(n),function(n){return r(e(n))}));var r,e}},C=function(n){return new s(function(){return a.monadEffectReader(n.MonadEffect0())},(t=i.lift(a.monadTransReaderT)(n.MonadEffect0().Monad0()),r=E(n),function(n){return t(r(n))}));var t,r},j=function(n){return new s(function(){return d.monadEffectState(n.MonadEffect0())},(t=i.lift(d.monadTransStateT)(n.MonadEffect0().Monad0()),r=E(n),function(n){return t(r(n))}));var t,r},q=function(n){return function(t){return new s(function(){return u.monadEffectWriter(t)(n.MonadEffect0())},(r=i.lift(u.monadTransWriterT(t))(n.MonadEffect0().Monad0()),e=E(n),function(n){return r(e(n))}));var r,e}};module.exports={liftAff:E,MonadAff:s,monadAffAff:M,monadAffContT:T,monadAffExceptT:m,monadAffListT:l,monadAffMaybe:x,monadAffReader:C,monadAffRWS:A,monadAffState:j,monadAffWriter:q};
+},{"../Control.Category/index.js":"IAi2","../Control.Monad.Cont.Trans/index.js":"XW2d","../Control.Monad.Except.Trans/index.js":"gr8B","../Control.Monad.List.Trans/index.js":"NCVa","../Control.Monad.Maybe.Trans/index.js":"UUIS","../Control.Monad.RWS.Trans/index.js":"8Fyn","../Control.Monad.Reader.Trans/index.js":"uvht","../Control.Monad.State.Trans/index.js":"34Kp","../Control.Monad.Trans.Class/index.js":"5tIR","../Control.Monad.Writer.Trans/index.js":"VAds","../Effect.Aff/index.js":"I7lu"}],"ViyF":[function(require,module,exports) {
+"use strict";exports.mkEffectFn1=function(n){return function(t){return n(t)()}},exports.mkEffectFn2=function(n){return function(t,r){return n(t)(r)()}},exports.mkEffectFn3=function(n){return function(t,r,u){return n(t)(r)(u)()}},exports.mkEffectFn4=function(n){return function(t,r,u,e){return n(t)(r)(u)(e)()}},exports.mkEffectFn5=function(n){return function(t,r,u,e,f){return n(t)(r)(u)(e)(f)()}},exports.mkEffectFn6=function(n){return function(t,r,u,e,f,c){return n(t)(r)(u)(e)(f)(c)()}},exports.mkEffectFn7=function(n){return function(t,r,u,e,f,c,o){return n(t)(r)(u)(e)(f)(c)(o)()}},exports.mkEffectFn8=function(n){return function(t,r,u,e,f,c,o,i){return n(t)(r)(u)(e)(f)(c)(o)(i)()}},exports.mkEffectFn9=function(n){return function(t,r,u,e,f,c,o,i,s){return n(t)(r)(u)(e)(f)(c)(o)(i)(s)()}},exports.mkEffectFn10=function(n){return function(t,r,u,e,f,c,o,i,s,p){return n(t)(r)(u)(e)(f)(c)(o)(i)(s)(p)()}},exports.runEffectFn1=function(n){return function(t){return function(){return n(t)}}},exports.runEffectFn2=function(n){return function(t){return function(r){return function(){return n(t,r)}}}},exports.runEffectFn3=function(n){return function(t){return function(r){return function(u){return function(){return n(t,r,u)}}}}},exports.runEffectFn4=function(n){return function(t){return function(r){return function(u){return function(e){return function(){return n(t,r,u,e)}}}}}},exports.runEffectFn5=function(n){return function(t){return function(r){return function(u){return function(e){return function(f){return function(){return n(t,r,u,e,f)}}}}}}},exports.runEffectFn6=function(n){return function(t){return function(r){return function(u){return function(e){return function(f){return function(c){return function(){return n(t,r,u,e,f,c)}}}}}}}},exports.runEffectFn7=function(n){return function(t){return function(r){return function(u){return function(e){return function(f){return function(c){return function(o){return function(){return n(t,r,u,e,f,c,o)}}}}}}}}},exports.runEffectFn8=function(n){return function(t){return function(r){return function(u){return function(e){return function(f){return function(c){return function(o){return function(i){return function(){return n(t,r,u,e,f,c,o,i)}}}}}}}}}},exports.runEffectFn9=function(n){return function(t){return function(r){return function(u){return function(e){return function(f){return function(c){return function(o){return function(i){return function(s){return function(){return n(t,r,u,e,f,c,o,i,s)}}}}}}}}}}},exports.runEffectFn10=function(n){return function(t){return function(r){return function(u){return function(e){return function(f){return function(c){return function(o){return function(i){return function(s){return function(p){return function(){return n(t,r,u,e,f,c,o,i,s,p)}}}}}}}}}}}};
+},{}],"qn3Z":[function(require,module,exports) {
+"use strict";var f=require("./foreign.js");module.exports={mkEffectFn1:f.mkEffectFn1,mkEffectFn2:f.mkEffectFn2,mkEffectFn3:f.mkEffectFn3,mkEffectFn4:f.mkEffectFn4,mkEffectFn5:f.mkEffectFn5,mkEffectFn6:f.mkEffectFn6,mkEffectFn7:f.mkEffectFn7,mkEffectFn8:f.mkEffectFn8,mkEffectFn9:f.mkEffectFn9,mkEffectFn10:f.mkEffectFn10,runEffectFn1:f.runEffectFn1,runEffectFn2:f.runEffectFn2,runEffectFn3:f.runEffectFn3,runEffectFn4:f.runEffectFn4,runEffectFn5:f.runEffectFn5,runEffectFn6:f.runEffectFn6,runEffectFn7:f.runEffectFn7,runEffectFn8:f.runEffectFn8,runEffectFn9:f.runEffectFn9,runEffectFn10:f.runEffectFn10};
+},{"./foreign.js":"ViyF"}],"61ee":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Bind/index.js"),e=require("../Data.Symbol/index.js"),t=require("../Data.Unit/index.js"),i=require("../Effect.Aff/index.js"),u=require("../Effect.Aff.AVar/index.js"),f=require("../Record/index.js"),c=require("../Type.Data.RowList/index.js"),o=require("../Type.Equality/index.js"),a=function(n){this.compile=n},d=function(n){return n.compile},s=function(n){return function(n){return function(r){return d(n)(c.RLProxy.value)(r)}}},l=function(r){return new a(function(e){return function(e){return n.pure(i.applicativeAff)({run:function(r){return n.pure(i.applicativeAff)(t.unit)},last:o.from(r)({})})}})},p=function(t){return function(o){return function(o){return function(s){return function(l){return function(p){return new a(function(a){return function(a){return r.bind(i.bindAff)(d(p)(c.RLProxy.value)(a))(function(c){return r.bind(i.bindAff)(u.empty)(function(d){var p=f.insert(t)(s)(l)(e.SProxy.value)(u.read(d))(c.last);return n.pure(i.applicativeAff)({last:p,run:function(n){return r.discard(r.discardUnit)(i.bindAff)(c.run(n))(function(){var c=f.get(t)(o)(e.SProxy.value)(a(n));return r.bind(i.bindAff)(u.tryTake(d))(function(n){return u.put(c)(d)})})}})})})}})}}}}}};module.exports={compile:d,CacherAff:a,new:s,cacherAffCons:p,cacherAffNil:l};
+},{"../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Data.Symbol/index.js":"4oJQ","../Data.Unit/index.js":"NhVk","../Effect.Aff/index.js":"I7lu","../Effect.Aff.AVar/index.js":"hACG","../Record/index.js":"0gG4","../Type.Data.RowList/index.js":"XaXP","../Type.Equality/index.js":"Uq/R"}],"1Q0x":[function(require,module,exports) {
+"use strict";exports.setContextTranslation=function(t){return function(n){return function(){n.setTransform(1,0,0,1,t.x,t.y)}}};
+},{}],"RCTS":[function(require,module,exports) {
+"use strict";exports.canvasElementToImageSource=function(n){return n},exports.tryLoadImageImpl=function(n){return function(t){return function(r){return function(){var e=new Image;e.src=n,e.addEventListener("load",function(){r(e)()},!1),e.addEventListener("error",function(n){t()},!1)}}}},exports.getCanvasElementByIdImpl=function(n,t,r){return function(){var e=document.getElementById(n);return e&&e instanceof HTMLCanvasElement?t(e):r}},exports.getContext2D=function(n){return function(){return n.getContext("2d")}},exports.getCanvasWidth=function(n){return function(){return n.width}},exports.getCanvasHeight=function(n){return function(){return n.height}},exports.setCanvasWidth=function(n){return function(t){return function(){n.width=t}}},exports.setCanvasHeight=function(n){return function(t){return function(){n.height=t}}},exports.canvasToDataURL=function(n){return function(){return n.toDataURL()}},exports.setLineWidth=function(n){return function(t){return function(){n.lineWidth=t}}},exports.setLineDash=function(n){return function(t){return function(){n.setLineDash(t)}}},exports.setFillStyle=function(n){return function(t){return function(){n.fillStyle=t}}},exports.setStrokeStyle=function(n){return function(t){return function(){n.strokeStyle=t}}},exports.setShadowColor=function(n){return function(t){return function(){n.shadowColor=t}}},exports.setShadowBlur=function(n){return function(t){return function(){n.shadowBlur=t}}},exports.setShadowOffsetX=function(n){return function(t){return function(){n.shadowOffsetX=t}}},exports.setShadowOffsetY=function(n){return function(t){return function(){n.shadowOffsetY=t}}},exports.setMiterLimit=function(n){return function(t){return function(){n.miterLimit=t}}},exports.setLineCapImpl=function(n){return function(t){return function(){n.lineCap=t}}},exports.setLineJoinImpl=function(n){return function(t){return function(){n.lineJoin=t}}},exports.setGlobalCompositeOperationImpl=function(n){return function(t){return function(){n.globalCompositeOperation=t}}},exports.setGlobalAlpha=function(n){return function(t){return function(){n.globalAlpha=t}}},exports.beginPath=function(n){return function(){n.beginPath()}},exports.stroke=function(n){return function(){n.stroke()}},exports.fill=function(n){return function(){n.fill()}},exports.clip=function(n){return function(){n.clip()}},exports.lineTo=function(n){return function(t){return function(r){return function(){n.lineTo(t,r)}}}},exports.moveTo=function(n){return function(t){return function(r){return function(){n.moveTo(t,r)}}}},exports.closePath=function(n){return function(){n.closePath()}},exports.arc=function(n){return function(t){return function(){n.arc(t.x,t.y,t.radius,t.start,t.end)}}},exports.rect=function(n){return function(t){return function(){n.rect(t.x,t.y,t.width,t.height)}}},exports.fillRect=function(n){return function(t){return function(){n.fillRect(t.x,t.y,t.width,t.height)}}},exports.strokeRect=function(n){return function(t){return function(){n.strokeRect(t.x,t.y,t.width,t.height)}}},exports.clearRect=function(n){return function(t){return function(){n.clearRect(t.x,t.y,t.width,t.height)}}},exports.scale=function(n){return function(t){return function(){n.scale(t.scaleX,t.scaleY)}}},exports.rotate=function(n){return function(t){return function(){n.rotate(t)}}},exports.translate=function(n){return function(t){return function(){n.translate(t.translateX,t.translateY)}}},exports.transform=function(n){return function(t){return function(){n.transform(t.m11,t.m12,t.m21,t.m22,t.m31,t.m32)}}},exports.setTransform=function(n){return function(t){return function(){n.setTransform(t.m11,t.m12,t.m21,t.m22,t.m31,t.m32)}}},exports.textAlignImpl=function(n){return function(){return n.textAlign}},exports.setTextAlignImpl=function(n){return function(t){return function(){n.textAlign=t}}},exports.font=function(n){return function(){return n.font}},exports.setFont=function(n){return function(t){return function(){n.font=t}}},exports.fillText=function(n){return function(t){return function(r){return function(e){return function(){n.fillText(t,r,e)}}}}},exports.strokeText=function(n){return function(t){return function(r){return function(e){return function(){n.strokeText(t,r,e)}}}}},exports.measureText=function(n){return function(t){return function(){return n.measureText(t)}}},exports.save=function(n){return function(){n.save()}},exports.restore=function(n){return function(){n.restore()}},exports.imageDataWidth=function(n){return n.width},exports.imageDataHeight=function(n){return n.height},exports.imageDataBuffer=function(n){return n.data},exports.getImageData=function(n){return function(t){return function(r){return function(e){return function(u){return function(){return n.getImageData(t,r,e,u)}}}}}},exports.putImageDataFull=function(n){return function(t){return function(r){return function(e){return function(u){return function(o){return function(i){return function(c){return function(){n.putImageData(t,r,e,u,o,i,c)}}}}}}}}},exports.putImageData=function(n){return function(t){return function(r){return function(e){return function(){n.putImageData(t,r,e)}}}}},exports.createImageData=function(n){return function(t){return function(r){return function(){return n.createImageData(t,r)}}}},exports.createImageDataCopy=function(n){return function(t){return function(){return n.createImageData(t)}}},exports.drawImage=function(n){return function(t){return function(r){return function(e){return function(){n.drawImage(t,r,e)}}}}},exports.drawImageScale=function(n){return function(t){return function(r){return function(e){return function(u){return function(o){return function(){n.drawImage(t,r,e,u,o)}}}}}}},exports.drawImageFull=function(n){return function(t){return function(r){return function(e){return function(u){return function(o){return function(i){return function(c){return function(f){return function(a){return function(){n.drawImage(t,r,e,u,o,i,c,f,a)}}}}}}}}}}},exports.createPatternImpl=function(n){return function(t){return function(r){return function(){return n.createPattern(t,r)}}}},exports.setPatternFillStyle=function(n){return function(t){return function(){n.fillStyle=t}}},exports.createLinearGradient=function(n){return function(t){return function(){return n.createLinearGradient(t.x0,t.y0,t.x1,t.y1)}}},exports.createRadialGradient=function(n){return function(t){return function(){return n.createRadialGradient(t.x0,t.y0,t.r0,t.x1,t.y1,t.r1)}}},exports.addColorStop=function(n){return function(t){return function(r){return function(){n.addColorStop(t,r)}}}},exports.setGradientFillStyle=function(n){return function(t){return function(){n.fillStyle=t}}},exports.quadraticCurveTo=function(n){return function(t){return function(){n.quadraticCurveTo(t.cpx,t.cpy,t.x,t.y)}}},exports.bezierCurveTo=function(n){return function(t){return function(){n.bezierCurveTo(t.cp1x,t.cp1y,t.cp2x,t.cp2y,t.x,t.y)}}};
+},{}],"IZvR":[function(require,module,exports) {
+"use strict";var e=require("../Effect.Exception/index.js"),r=require("../Effect.Unsafe/index.js"),n=function(n){return r.unsafePerformEffect(e.throwException(n))},t=function(r){return n(e.error(r))};module.exports={unsafeThrowException:n,unsafeThrow:t};
+},{"../Effect.Exception/index.js":"0OCW","../Effect.Unsafe/index.js":"tPW2"}],"rm6N":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),e=require("../Control.Apply/index.js"),t=require("../Data.Eq/index.js"),r=require("../Data.Functor/index.js"),i=require("../Data.Maybe/index.js"),a=require("../Data.Show/index.js"),o=require("../Effect/index.js"),u=require("../Effect.Exception.Unsafe/index.js"),c=function(){function n(){}return n.value=new n,n}(),f=function(){function n(){}return n.value=new n,n}(),s=function(){function n(){}return n.value=new n,n}(),l=function(){function n(){}return n.value=new n,n}(),v=function(){function n(){}return n.value=new n,n}(),m=function(){function n(){}return n.value=new n,n}(),h=function(){function n(){}return n.value=new n,n}(),g=function(){function n(){}return n.value=new n,n}(),w=function(){function n(){}return n.value=new n,n}(),p=function(){function n(){}return n.value=new n,n}(),d=function(){function n(){}return n.value=new n,n}(),C=function(){function n(){}return n.value=new n,n}(),S=function(){function n(){}return n.value=new n,n}(),D=function(){function n(){}return n.value=new n,n}(),I=function(){function n(){}return n.value=new n,n}(),L=function(){function n(){}return n.value=new n,n}(),y=function(){function n(){}return n.value=new n,n}(),x=function(){function n(){}return n.value=new n,n}(),T=function(){function n(){}return n.value=new n,n}(),A=function(){function n(){}return n.value=new n,n}(),E=function(){function n(){}return n.value=new n,n}(),R=function(){function n(){}return n.value=new n,n}(),F=function(){function n(){}return n.value=new n,n}(),G=function(){function n(){}return n.value=new n,n}(),O=function(){function n(){}return n.value=new n,n}(),q=function(){function n(){}return n.value=new n,n}(),b=function(){function n(){}return n.value=new n,n}(),k=function(){function n(){}return n.value=new n,n}(),P=function(){function n(){}return n.value=new n,n}(),H=function(){function n(){}return n.value=new n,n}(),B=function(){function n(){}return n.value=new n,n}(),W=function(){function n(){}return n.value=new n,n}(),J=function(){function n(){}return n.value=new n,n}(),j=function(){function n(){}return n.value=new n,n}(),M=function(){function n(){}return n.value=new n,n}(),X=function(){function n(){}return n.value=new n,n}(),N=function(){function n(){}return n.value=new n,n}(),Y=function(){function n(){}return n.value=new n,n}(),U=function(){function n(){}return n.value=new n,n}(),z=function(){function n(){}return n.value=new n,n}(),K=function(){function n(){}return n.value=new n,n}(),Q=function(e){return function(t){return function(){n.save(e)();var r=t();n.restore(e)();return r}}},V=function(e){return function(t){return n.tryLoadImageImpl(e)(t(i.Nothing.value))(function(n){return t(i.Just.create(n))})}},Z=function(e){return r.map(o.functorEffect)(function(n){return"left"===n?c.value:"right"===n?f.value:"center"===n?s.value:"start"===n?l.value:"end"===n?v.value:u.unsafeThrow("invalid TextAlign: "+n)})(n.textAlignImpl(e))},$=function(e){return function(t){return function(){n.beginPath(e)();var r=t();n.stroke(e)();return r}}},_=new a.Show(function(n){if(n instanceof c)return"AlignLeft";if(n instanceof f)return"AlignRight";if(n instanceof s)return"AlignCenter";if(n instanceof l)return"AlignStart";if(n instanceof v)return"AlignEnd";throw new Error("Failed pattern match at Graphics.Canvas (line 489, column 1 - line 494, column 29): "+[n.constructor.name])}),nn=new a.Show(function(n){if(n instanceof m)return"Repeat";if(n instanceof h)return"RepeatX";if(n instanceof g)return"RepeatY";if(n instanceof w)return"NoRepeat";throw new Error("Failed pattern match at Graphics.Canvas (line 599, column 1 - line 603, column 29): "+[n.constructor.name])}),en=new a.Show(function(n){if(n instanceof L)return"SourceOver";if(n instanceof y)return"SourceIn";if(n instanceof x)return"SourceOut";if(n instanceof T)return"SourceAtop";if(n instanceof A)return"DestinationOver";if(n instanceof E)return"DestinationIn";if(n instanceof R)return"DestinationOut";if(n instanceof F)return"DestinationAtop";if(n instanceof G)return"Lighter";if(n instanceof O)return"Copy";if(n instanceof q)return"Xor";if(n instanceof b)return"Multiply";if(n instanceof k)return"Screen";if(n instanceof P)return"Overlay";if(n instanceof H)return"Darken";if(n instanceof B)return"Lighten";if(n instanceof W)return"ColorDodge";if(n instanceof J)return"ColorBurn";if(n instanceof j)return"HardLight";if(n instanceof M)return"SoftLight";if(n instanceof X)return"Difference";if(n instanceof N)return"Exclusion";if(n instanceof Y)return"Hue";if(n instanceof U)return"Saturation";if(n instanceof z)return"Color";if(n instanceof K)return"Luminosity";throw new Error("Failed pattern match at Graphics.Canvas (line 284, column 1 - line 310, column 38): "+[n.constructor.name])}),tn=function(e){return function(t){return n.setTextAlignImpl(e)(function(n){if(n instanceof c)return"left";if(n instanceof f)return"right";if(n instanceof s)return"center";if(n instanceof l)return"start";if(n instanceof v)return"end";throw new Error("Failed pattern match at Graphics.Canvas (line 518, column 5 - line 518, column 32): "+[n.constructor.name])}(t))}},rn=function(e){return function(t){if(t instanceof p)return n.setLineJoinImpl(e)("bevel");if(t instanceof d)return n.setLineJoinImpl(e)("round");if(t instanceof C)return n.setLineJoinImpl(e)("miter");throw new Error("Failed pattern match at Graphics.Canvas (line 247, column 1 - line 247, column 52): "+[e.constructor.name,t.constructor.name])}},an=function(e){return function(t){if(t instanceof S)return n.setLineCapImpl(e)("round");if(t instanceof D)return n.setLineCapImpl(e)("square");if(t instanceof I)return n.setLineCapImpl(e)("butt");throw new Error("Failed pattern match at Graphics.Canvas (line 234, column 1 - line 234, column 50): "+[e.constructor.name,t.constructor.name])}},on=function(e){return function(t){return n.setGlobalCompositeOperationImpl(e)(function(n){if(n instanceof L)return"source-over";if(n instanceof y)return"source-in";if(n instanceof x)return"source-out";if(n instanceof T)return"source-atop";if(n instanceof A)return"destination-over";if(n instanceof E)return"destination-in";if(n instanceof R)return"destination-out";if(n instanceof F)return"destination-atop";if(n instanceof G)return"lighter";if(n instanceof O)return"copy";if(n instanceof q)return"xor";if(n instanceof b)return"multiply";if(n instanceof k)return"screen";if(n instanceof P)return"overlay";if(n instanceof H)return"darken";if(n instanceof B)return"lighten";if(n instanceof W)return"color-dodge";if(n instanceof J)return"color-burn";if(n instanceof j)return"hard-light";if(n instanceof M)return"soft-light";if(n instanceof X)return"difference";if(n instanceof N)return"exclusion";if(n instanceof Y)return"hue";if(n instanceof U)return"saturation";if(n instanceof z)return"color";if(n instanceof K)return"luminosity";throw new Error("Failed pattern match at Graphics.Canvas (line 318, column 5 - line 318, column 45): "+[n.constructor.name])}(t))}},un=function(t){return function(r){return e.applySecond(o.applyEffect)(n.setCanvasHeight(t)(r.height))(n.setCanvasWidth(t)(r.width))}},cn=function(e){return n.getCanvasElementByIdImpl(e,i.Just.create,i.Nothing.value)},fn=function(e){return function(){return{width:n.getCanvasWidth(e)(),height:n.getCanvasHeight(e)()}}},sn=function(e){return function(t){return function(){n.beginPath(e)();var r=t();n.fill(e)();return r}}},ln=new t.Eq(function(n){return function(e){return n instanceof S&&e instanceof S||(n instanceof D&&e instanceof D||n instanceof I&&e instanceof I)}}),vn=function(e){return function(t){return function(r){return n.createPatternImpl(e)(t)(function(n){if(n instanceof m)return"repeat";if(n instanceof h)return"repeat-x";if(n instanceof g)return"repeat-y";if(n instanceof w)return"no-repeat";throw new Error("Failed pattern match at Graphics.Canvas (line 611, column 5 - line 611, column 31): "+[n.constructor.name])}(r))}}};module.exports={SourceOver:L,SourceIn:y,SourceOut:x,SourceAtop:T,DestinationOver:A,DestinationIn:E,DestinationOut:R,DestinationAtop:F,Lighter:G,Copy:O,Xor:q,Multiply:b,Screen:k,Overlay:P,Darken:H,Lighten:B,ColorDodge:W,ColorBurn:J,HardLight:j,SoftLight:M,Difference:X,Exclusion:N,Hue:Y,Saturation:U,Color:z,Luminosity:K,Round:S,Square:D,Butt:I,BevelJoin:p,RoundJoin:d,MiterJoin:C,AlignLeft:c,AlignRight:f,AlignCenter:s,AlignStart:l,AlignEnd:v,Repeat:m,RepeatX:h,RepeatY:g,NoRepeat:w,getCanvasElementById:cn,getCanvasDimensions:fn,setCanvasDimensions:un,setLineCap:an,setLineJoin:rn,setGlobalCompositeOperation:on,strokePath:$,fillPath:sn,textAlign:Z,setTextAlign:tn,withContext:Q,tryLoadImage:V,createPattern:vn,eqLineCap:ln,showComposite:en,showTextAlign:_,showPatternRepeat:nn,getContext2D:n.getContext2D,getCanvasWidth:n.getCanvasWidth,setCanvasWidth:n.setCanvasWidth,getCanvasHeight:n.getCanvasHeight,setCanvasHeight:n.setCanvasHeight,canvasToDataURL:n.canvasToDataURL,setLineWidth:n.setLineWidth,setLineDash:n.setLineDash,setFillStyle:n.setFillStyle,setStrokeStyle:n.setStrokeStyle,setShadowBlur:n.setShadowBlur,setShadowOffsetX:n.setShadowOffsetX,setShadowOffsetY:n.setShadowOffsetY,setShadowColor:n.setShadowColor,setMiterLimit:n.setMiterLimit,setGlobalAlpha:n.setGlobalAlpha,beginPath:n.beginPath,stroke:n.stroke,fill:n.fill,clip:n.clip,lineTo:n.lineTo,moveTo:n.moveTo,closePath:n.closePath,arc:n.arc,rect:n.rect,fillRect:n.fillRect,strokeRect:n.strokeRect,clearRect:n.clearRect,scale:n.scale,rotate:n.rotate,translate:n.translate,transform:n.transform,setTransform:n.setTransform,font:n.font,setFont:n.setFont,fillText:n.fillText,strokeText:n.strokeText,measureText:n.measureText,save:n.save,restore:n.restore,getImageData:n.getImageData,putImageData:n.putImageData,putImageDataFull:n.putImageDataFull,createImageData:n.createImageData,createImageDataCopy:n.createImageDataCopy,imageDataWidth:n.imageDataWidth,imageDataHeight:n.imageDataHeight,imageDataBuffer:n.imageDataBuffer,canvasElementToImageSource:n.canvasElementToImageSource,drawImage:n.drawImage,drawImageScale:n.drawImageScale,drawImageFull:n.drawImageFull,setPatternFillStyle:n.setPatternFillStyle,createLinearGradient:n.createLinearGradient,createRadialGradient:n.createRadialGradient,addColorStop:n.addColorStop,setGradientFillStyle:n.setGradientFillStyle,quadraticCurveTo:n.quadraticCurveTo,bezierCurveTo:n.bezierCurveTo};
+},{"./foreign.js":"RCTS","../Control.Apply/index.js":"QcLv","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Show/index.js":"mFY7","../Effect/index.js":"oTWB","../Effect.Exception.Unsafe/index.js":"IZvR"}],"YWUW":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),e=require("../Data.Eq/index.js"),t=require("../Data.Functor/index.js"),r=require("../Data.Generic.Rep/index.js"),u=require("../Data.Lens.Getter/index.js"),i=require("../Data.Ord/index.js"),a=require("../Data.Ordering/index.js"),o=require("../Data.Symbol/index.js"),f=require("../Data.Unit/index.js"),c=require("../Data.Variant/index.js"),l=require("../Data.Variant.Internal/index.js"),s=require("../Effect/index.js"),v=require("../Effect.Class/index.js"),w=require("../Graphics.Canvas/index.js"),d=require("../Type.Equality/index.js"),h=function(){function n(){}return n.value=new n,n}(),m=function(){function n(){}return n.value=new n,n}(),p=function(){function n(){}return n.value=new n,n}(),I=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),g=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),y=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),x=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),q=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),j=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),b=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),C=function(){function n(n,e,t){this.value0=n,this.value1=e,this.value2=t}return n.create=function(e){return function(t){return function(r){return new n(e,t,r)}}},n}(),S=function(n){var e=n.size.width-n.padding.right-n.padding.left,t={x:0,y:0};return c.onMatch()(l.variantMatchCons(l.variantMatchCons(l.variantMatchCons(l.variantMatchCons(l.variantMatchCons(l.variantMatchCons(l.variantMatchNil)()(d.refl))()(d.refl))()(d.refl))()(d.refl))()(d.refl))()(d.refl))()({full:function(e){return{offset:t,size:n.size}},center:function(t){return{offset:{x:n.padding.left,y:n.padding.top},size:{width:e,height:n.size.height-n.padding.top-n.padding.bottom}}},top:function(r){return{offset:{x:n.padding.left,y:t.y},size:{width:e,height:n.padding.top}}},right:function(e){return{offset:{x:n.size.width-n.padding.right,y:n.padding.top},size:{width:n.padding.right,height:n.size.height-(n.padding.top+n.padding.bottom)}}},bottom:function(t){return{offset:{x:n.padding.left,y:n.size.height-n.padding.bottom},size:{width:e,height:n.padding.bottom}}},left:function(e){return{offset:{y:n.padding.top,x:t.x},size:{width:n.padding.left,height:n.size.height-(n.padding.top+n.padding.bottom)}}}})(c.case_)},T=function(n){var e=S(n);return function(n){return e(n).offset}},L=function(n){var e=S(n);return function(n){return e(n).size}},E=new r.Generic(function(n){if(n instanceof g)return new r.Inl(n.value0);if(n instanceof y)return new r.Inr(new r.Inl(n.value0));if(n instanceof x)return new r.Inr(new r.Inr(new r.Inl(n.value0)));if(n instanceof q)return new r.Inr(new r.Inr(new r.Inr(new r.Inl(n.value0))));if(n instanceof j)return new r.Inr(new r.Inr(new r.Inr(new r.Inr(new r.Inl(n.value0)))));if(n instanceof b)return new r.Inr(new r.Inr(new r.Inr(new r.Inr(new r.Inr(n.value0)))));throw new Error("Failed pattern match at Genetics.Browser.Layer (line 64, column 1 - line 64, column 60): "+[n.constructor.name])},function(n){if(n instanceof r.Inl)return new g(n.value0);if(n instanceof r.Inr&&n.value0 instanceof r.Inl)return new y(n.value0.value0);if(n instanceof r.Inr&&n.value0 instanceof r.Inr&&n.value0.value0 instanceof r.Inl)return new x(n.value0.value0.value0);if(n instanceof r.Inr&&n.value0 instanceof r.Inr&&n.value0.value0 instanceof r.Inr&&n.value0.value0.value0 instanceof r.Inl)return new q(n.value0.value0.value0.value0);if(n instanceof r.Inr&&n.value0 instanceof r.Inr&&n.value0.value0 instanceof r.Inr&&n.value0.value0.value0 instanceof r.Inr&&n.value0.value0.value0.value0 instanceof r.Inl)return new j(n.value0.value0.value0.value0.value0);if(n instanceof r.Inr&&n.value0 instanceof r.Inr&&n.value0.value0 instanceof r.Inr&&n.value0.value0.value0 instanceof r.Inr&&n.value0.value0.value0.value0 instanceof r.Inr)return new b(n.value0.value0.value0.value0.value0);throw new Error("Failed pattern match at Genetics.Browser.Layer (line 64, column 1 - line 64, column 60): "+[n.constructor.name])}),G=new t.Functor(function(n){return function(e){if(e instanceof g)return new g(n(e.value0));if(e instanceof y)return new y(n(e.value0));if(e instanceof x)return new x(n(e.value0));if(e instanceof q)return new q(n(e.value0));if(e instanceof j)return new j(n(e.value0));if(e instanceof b)return new b(n(e.value0));throw new Error("Failed pattern match at Genetics.Browser.Layer (line 63, column 1 - line 63, column 54): "+[e.constructor.name])}}),z=new t.Functor(function(n){return function(e){return new C(e.value0,e.value1,t.map(G)(n)(e.value2))}}),F=new e.Eq(function(n){return function(e){return n instanceof p&&e instanceof p||n instanceof I&&e instanceof I&&n.value0===e.value0}}),D=function(n){return new e.Eq(function(t){return function(r){return t instanceof g&&r instanceof g?e.eq(n)(t.value0)(r.value0):t instanceof y&&r instanceof y?e.eq(n)(t.value0)(r.value0):t instanceof x&&r instanceof x?e.eq(n)(t.value0)(r.value0):t instanceof q&&r instanceof q?e.eq(n)(t.value0)(r.value0):t instanceof j&&r instanceof j?e.eq(n)(t.value0)(r.value0):t instanceof b&&r instanceof b&&e.eq(n)(t.value0)(r.value0)}})},M=function(n){return new i.Ord(function(){return D(n.Eq0())},function(e){return function(t){if(e instanceof g&&t instanceof g)return i.compare(n)(e.value0)(t.value0);if(e instanceof g)return a.LT.value;if(t instanceof g)return a.GT.value;if(e instanceof y&&t instanceof y)return i.compare(n)(e.value0)(t.value0);if(e instanceof y)return a.LT.value;if(t instanceof y)return a.GT.value;if(e instanceof x&&t instanceof x)return i.compare(n)(e.value0)(t.value0);if(e instanceof x)return a.LT.value;if(t instanceof x)return a.GT.value;if(e instanceof q&&t instanceof q)return i.compare(n)(e.value0)(t.value0);if(e instanceof q)return a.LT.value;if(t instanceof q)return a.GT.value;if(e instanceof j&&t instanceof j)return i.compare(n)(e.value0)(t.value0);if(e instanceof j)return a.LT.value;if(t instanceof j)return a.GT.value;if(e instanceof b&&t instanceof b)return i.compare(n)(e.value0)(t.value0);throw new Error("Failed pattern match at Genetics.Browser.Layer (line 62, column 1 - line 62, column 59): "+[e.constructor.name,t.constructor.name])}})},B=o.SProxy.value,P=o.SProxy.value,k=o.SProxy.value,O=o.SProxy.value,N=o.SProxy.value,R=o.SProxy.value,V=function(n){if(n instanceof g)return c.inj()(new o.IsSymbol(function(){return"full"}))(O)(n.value0);if(n instanceof y)return c.inj()(new o.IsSymbol(function(){return"center"}))(N)(n.value0);if(n instanceof x)return c.inj()(new o.IsSymbol(function(){return"top"}))(B)(n.value0);if(n instanceof q)return c.inj()(new o.IsSymbol(function(){return"right"}))(P)(n.value0);if(n instanceof j)return c.inj()(new o.IsSymbol(function(){return"bottom"}))(R)(n.value0);if(n instanceof b)return c.inj()(new o.IsSymbol(function(){return"left"}))(k)(n.value0);throw new Error("Failed pattern match at Genetics.Browser.Layer (line 98, column 10 - line 104, column 30): "+[n.constructor.name])},_=function(n){return{full:S(n)(c.inj()(new o.IsSymbol(function(){return"full"}))(O)(f.unit)),center:S(n)(c.inj()(new o.IsSymbol(function(){return"center"}))(N)(f.unit)),top:S(n)(c.inj()(new o.IsSymbol(function(){return"top"}))(B)(f.unit)),right:S(n)(c.inj()(new o.IsSymbol(function(){return"right"}))(P)(f.unit)),bottom:S(n)(c.inj()(new o.IsSymbol(function(){return"bottom"}))(R)(f.unit)),left:S(n)(c.inj()(new o.IsSymbol(function(){return"left"}))(k)(f.unit))}},U=function(e){return function(r){return function(u){return function(i){return v.liftEffect(e)(function(){var e=w.getContext2D(i)(),a=(_(u),L(u)(V(r.value2))),o=T(u)(V(r.value2));return n.setContextTranslation(o)(e)(),function(){if(r.value1 instanceof p)return f.unit;if(r.value1 instanceof I)return(n={x:-r.value1.value0,y:-r.value1.value0},function(r){return function(){return w.beginPath(e)(),w.moveTo(e)(n.x)(n.y)(),w.lineTo(e)(r.x)(n.y)(),w.lineTo(e)(r.x)(r.y)(),w.lineTo(e)(n.x)(r.y)(),w.clip(e)(),t.void(s.functorEffect)(w.closePath(e))()}})({x:a.width+r.value1.value0,y:a.height+r.value1.value0})();var n;throw new Error("Failed pattern match at Genetics.Browser.Layer (line 203, column 3 - line 207, column 48): "+[r.value1.constructor.name])}(),e})}}}},A=u.to(function(n){if(n instanceof g)return n.value0;if(n instanceof y)return n.value0;if(n instanceof x)return n.value0;if(n instanceof q)return n.value0;if(n instanceof j)return n.value0;if(n instanceof b)return n.value0;throw new Error("Failed pattern match at Genetics.Browser.Layer (line 53, column 17 - line 59, column 18): "+[n.constructor.name])});module.exports={Full:g,Center:y,CTop:x,CRight:q,CBottom:j,CLeft:b,_Component:A,Layer:C,Fixed:h,Scrolling:m,NoMask:p,Masked:I,asSlot:V,slotContext:U,slotOffset:T,slotSize:L,trackSlots:_,eqComponent:D,ordComponent:M,functorComponent:G,genericComponent:E,functorLayer:z,eqLayerMask:F,setContextTranslation:n.setContextTranslation};
+},{"./foreign.js":"1Q0x","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Generic.Rep/index.js":"AuzG","../Data.Lens.Getter/index.js":"OPOX","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Symbol/index.js":"4oJQ","../Data.Unit/index.js":"NhVk","../Data.Variant/index.js":"hgdh","../Data.Variant.Internal/index.js":"kYoO","../Effect/index.js":"oTWB","../Effect.Class/index.js":"dWtH","../Graphics.Canvas/index.js":"rm6N","../Type.Equality/index.js":"Uq/R"}],"fMOI":[function(require,module,exports) {
+"use strict";var e=require("../Control.Alt/index.js"),t=require("../Data.Eq/index.js"),n=require("../Data.Foldable/index.js"),i=require("../Data.Maybe/index.js"),a=require("../Data.Monoid/index.js"),r=require("../Data.Semigroup/index.js"),o=require("../Data.Show/index.js"),u=function(e){return e},l=function(e){return e},s=function(){function e(e,t,n){this.value0=e,this.value1=t,this.value2=n}return e.create=function(t){return function(n){return function(i){return new e(t,n,i)}}},e}(),v={style:i.Nothing.value,variant:new i.Just("small-caps"),weight:i.Nothing.value},g="serif",h=new r.Semigroup(function(t){return function(n){return{style:e.alt(i.altMaybe)(t.style)(n.style),variant:e.alt(i.altMaybe)(t.variant)(n.variant),weight:e.alt(i.altMaybe)(t.weight)(n.weight)}}}),f="sans-serif",c=function(e){return n.intercalate(n.foldableArray)(a.monoidString)(" ")([n.fold(n.foldableMaybe)(a.monoidString)(e.style),n.fold(n.foldableMaybe)(a.monoidString)(e.variant),n.fold(n.foldableMaybe)(a.monoidString)(e.weight)])},w={style:new i.Just("oblique"),variant:i.Nothing.value,weight:i.Nothing.value},d="monospace",q=new a.Monoid(function(){return h},{style:i.Nothing.value,variant:i.Nothing.value,weight:i.Nothing.value}),y={style:i.Nothing.value,variant:i.Nothing.value,weight:new i.Just("lighter")},b={style:new i.Just("italic"),variant:i.Nothing.value,weight:i.Nothing.value},m=function(e){return c(e.value2)+" "+o.show(o.showInt)(e.value1)+"px "+e.value0},N=s.create,p="fantasy",M=new t.Eq(function(e){return function(n){return t.eq(i.eqMaybe(t.eqString))(e.style)(n.style)&&t.eq(i.eqMaybe(t.eqString))(e.variant)(n.variant)&&t.eq(i.eqMaybe(t.eqString))(e.weight)(n.weight)}}),S=new t.Eq(function(e){return function(t){return e===t}}),x=new t.Eq(function(e){return function(n){return t.eq(S)(e.value0)(n.value0)&&e.value1===n.value1&&t.eq(M)(e.value2)(n.value2)}}),F=l,j="cursive",D={style:i.Nothing.value,variant:i.Nothing.value,weight:new i.Just("bolder")},J={style:i.Nothing.value,variant:i.Nothing.value,weight:new i.Just("bold")};module.exports={font:N,fontString:m,serif:g,sansSerif:f,monospace:d,cursive:j,fantasy:p,customFont:F,bold:J,bolder:D,light:y,italic:b,oblique:w,smallCaps:v,eqFont:x,eqFontFamily:S,eqFontOptions:M,semigroupFontOptions:h,monoidFontOptions:q};
+},{"../Control.Alt/index.js":"lN+m","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7"}],"0WVi":[function(require,module,exports) {
+"use strict";var e=require("../Color/index.js"),n=require("../Control.Alt/index.js"),t=require("../Control.Applicative/index.js"),u=require("../Data.Eq/index.js"),r=require("../Data.Foldable/index.js"),o=require("../Data.Function/index.js"),i=require("../Data.Functor/index.js"),a=require("../Data.List/index.js"),l=require("../Data.List.Types/index.js"),c=require("../Data.Maybe/index.js"),f=require("../Data.Monoid/index.js"),s=require("../Data.Semigroup/index.js"),v=require("../Data.Symbol/index.js"),h=require("../Data.Unit/index.js"),w=require("../Effect/index.js"),d=require("../Graphics.Canvas/index.js"),q=require("../Graphics.Drawing.Font/index.js"),p=require("../Math/index.js"),b=function(e){return e},m=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),y=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),g=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),x=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),S=function(e){return e},E=function(e){return e},C=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),M=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),N=function(){function e(e,n,t,u,r){this.value0=e,this.value1=n,this.value2=t,this.value3=u,this.value4=r}return e.create=function(n){return function(t){return function(u){return function(r){return function(o){return new e(n,t,u,r,o)}}}}},e}(),j=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),D=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),L=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),F=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),W=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),_=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),R=function(e){return function(n){return L.create({translateX:e,translateY:n})}},X=N.create,Y=function(e){return function(n){return{color:c.Nothing.value,blur:c.Nothing.value,offset:new c.Just({x:e,y:n})}}},J=function(e){return{color:new c.Just(e),blur:c.Nothing.value,offset:c.Nothing.value}},O=function(e){return{color:c.Nothing.value,blur:new c.Just(e),offset:c.Nothing.value}},A=_.create,G=new s.Semigroup(function(e){return function(n){return new x(e instanceof x?s.append(l.semigroupList)(e.value0)(a.singleton(n)):n instanceof x?new l.Cons(e,n.value0):new l.Cons(e,new l.Cons(n,l.Nil.value)))}}),I=new s.Semigroup(function(e){return function(t){return{color:n.alt(c.altMaybe)(e.color)(t.color),blur:n.alt(c.altMaybe)(e.blur)(t.blur),offset:n.alt(c.altMaybe)(e.offset)(t.offset)}}}),T=new s.Semigroup(function(e){return function(t){return{color:n.alt(c.altMaybe)(e.color)(t.color),lineWidth:n.alt(c.altMaybe)(e.lineWidth)(t.lineWidth)}}}),H=new s.Semigroup(function(e){return function(t){return{color:n.alt(c.altMaybe)(e.color)(t.color)}}}),P=new s.Semigroup(function(e){return function(n){return new j(e instanceof j?s.append(l.semigroupList)(e.value0)(a.singleton(n)):n instanceof j?new l.Cons(e,n.value0):new l.Cons(e,new l.Cons(n,l.Nil.value)))}}),k=function(e){return function(n){return D.create({scaleX:e,scaleY:n})}},B=F.create,U=function(n){var u=function e(u){if(u instanceof m&&u.value1 instanceof l.Nil)return t.pure(w.applicativeEffect)(h.unit);if(u instanceof m&&u.value1 instanceof l.Cons)return function(){d.moveTo(n)(u.value1.value0.x)(u.value1.value0.y)();return r.for_(w.applicativeEffect)(l.foldableList)(u.value1.value1)(function(e){return d.lineTo(n)(e.x)(e.y)})(),t.when(w.applicativeEffect)(u.value0)(i.void(w.functorEffect)(d.closePath(n)))()};if(u instanceof y)return i.void(w.functorEffect)(d.rect(n)(u.value0));if(u instanceof g)return i.void(w.functorEffect)(d.arc(n)(u.value0));if(u instanceof x)return r.for_(w.applicativeEffect)(l.foldableList)(u.value0)(e);throw new Error("Failed pattern match at Graphics.Drawing (line 268, column 3 - line 268, column 38): "+[u.constructor.name])},o=function(t){return r.for_(w.applicativeEffect)(r.foldableMaybe)(t.color)(function(t){return d.setFillStyle(n)(e.cssStringHSLA(t))})};return function t(a){if(a instanceof C)return i.void(w.functorEffect)(d.withContext(n)(function(){return o(a.value1)(),d.fillPath(n)(u(a.value0))()}));if(a instanceof M)return i.void(w.functorEffect)(d.withContext(n)(function(){return function(t){return function(){return r.for_(w.applicativeEffect)(r.foldableMaybe)(t.color)(function(t){return d.setStrokeStyle(n)(e.cssStringHSLA(t))})(),r.for_(w.applicativeEffect)(r.foldableMaybe)(t.lineWidth)(function(e){return d.setLineWidth(n)(e)})()}}(a.value1)(),d.strokePath(n)(u(a.value0))()}));if(a instanceof j)return r.for_(w.applicativeEffect)(l.foldableList)(a.value0)(t);if(a instanceof D)return i.void(w.functorEffect)(d.withContext(n)(function(){return d.scale(n)(a.value0)(),t(a.value1)()}));if(a instanceof L)return i.void(w.functorEffect)(d.withContext(n)(function(){return d.translate(n)(a.value0)(),t(a.value1)()}));if(a instanceof F)return i.void(w.functorEffect)(d.withContext(n)(function(){return d.rotate(n)(a.value0)(),t(a.value1)()}));if(a instanceof W)return i.void(w.functorEffect)(d.withContext(n)(function(){return u(a.value0)(),d.clip(n)(),t(a.value1)()}));if(a instanceof _)return i.void(w.functorEffect)(d.withContext(n)(function(){return function(t){return function(){return r.for_(w.applicativeEffect)(r.foldableMaybe)(t.color)(function(t){return d.setShadowColor(n)(e.cssStringHSLA(t))})(),r.for_(w.applicativeEffect)(r.foldableMaybe)(t.blur)(function(e){return d.setShadowBlur(n)(e)})(),r.for_(w.applicativeEffect)(r.foldableMaybe)(t.offset)(function(e){return function(){return d.setShadowOffsetX(n)(e.x)(),d.setShadowOffsetY(n)(e.y)()}})()}}(a.value0)(),t(a.value1)()}));if(a instanceof N)return i.void(w.functorEffect)(d.withContext(n)(function(){return d.setFont(n)(q.fontString(a.value0))(),o(a.value3)(),d.fillText(n)(a.value4)(a.value1)(a.value2)()}));throw new Error("Failed pattern match at Graphics.Drawing (line 221, column 3 - line 224, column 21): "+[a.constructor.name])}},z=function(e){return function(n){return function(t){return function(u){return new y({x:e,y:n,width:t,height:u})}}}},K=function(e){var n=m.create(!1),t=a.fromFoldable(e);return function(e){return n(t(e))}},Q=o.flip(M.create),V=function(e){return{color:new c.Just(e),lineWidth:c.Nothing.value}},Z=new f.Monoid(function(){return G},new x(f.mempty(l.monoidList))),$=new f.Monoid(function(){return I},{color:c.Nothing.value,blur:c.Nothing.value,offset:c.Nothing.value}),ee=new f.Monoid(function(){return T},{color:c.Nothing.value,lineWidth:c.Nothing.value}),ne=new f.Monoid(function(){return H},{color:c.Nothing.value}),te=new f.Monoid(function(){return P},new j(f.mempty(l.monoidList))),ue=function(e){return{color:c.Nothing.value,lineWidth:new c.Just(e)}},re=o.flip(C.create),oe=function(e){return{color:new c.Just(e)}},ie=function(e){return function n(t){return e(t instanceof j?new j(i.map(l.functorList)(n)(t.value0)):t instanceof D?new D(t.value0,n(t.value1)):t instanceof L?new L(t.value0,n(t.value1)):t instanceof F?new F(t.value0,n(t.value1)):t instanceof W?new W(t.value0,n(t.value1)):t instanceof _?new _(t.value0,n(t.value1)):t)}},ae=new u.Eq(function(e){return function(n){return e instanceof m&&n instanceof m?e.value0===n.value0&&u.eq(l.eqList(u.eqRec()(u.eqRowCons(u.eqRowCons(u.eqRowNil)()(new v.IsSymbol(function(){return"y"}))(u.eqNumber))()(new v.IsSymbol(function(){return"x"}))(u.eqNumber))))(e.value1)(n.value1):e instanceof y&&n instanceof y?e.value0.height===n.value0.height&&e.value0.width===n.value0.width&&e.value0.x===n.value0.x&&e.value0.y===n.value0.y:e instanceof g&&n instanceof g?e.value0.end===n.value0.end&&e.value0.radius===n.value0.radius&&e.value0.start===n.value0.start&&e.value0.x===n.value0.x&&e.value0.y===n.value0.y:e instanceof x&&n instanceof x&&u.eq(l.eqList(ae))(e.value0)(n.value0)}}),le=new u.Eq(function(n){return function(t){return u.eq(c.eqMaybe(u.eqNumber))(n.blur)(t.blur)&&u.eq(c.eqMaybe(e.eqColor))(n.color)(t.color)&&u.eq(c.eqMaybe(u.eqRec()(u.eqRowCons(u.eqRowCons(u.eqRowNil)()(new v.IsSymbol(function(){return"y"}))(u.eqNumber))()(new v.IsSymbol(function(){return"x"}))(u.eqNumber))))(n.offset)(t.offset)}}),ce=new u.Eq(function(n){return function(t){return u.eq(c.eqMaybe(e.eqColor))(n.color)(t.color)&&u.eq(c.eqMaybe(u.eqNumber))(n.lineWidth)(t.lineWidth)}}),fe=new u.Eq(function(n){return function(t){return u.eq(c.eqMaybe(e.eqColor))(n.color)(t.color)}}),se=new u.Eq(function(e){return function(n){return e instanceof C&&n instanceof C?u.eq(ae)(e.value0)(n.value0)&&u.eq(fe)(e.value1)(n.value1):e instanceof M&&n instanceof M?u.eq(ae)(e.value0)(n.value0)&&u.eq(ce)(e.value1)(n.value1):e instanceof N&&n instanceof N?u.eq(q.eqFont)(e.value0)(n.value0)&&e.value1===n.value1&&e.value2===n.value2&&u.eq(fe)(e.value3)(n.value3)&&e.value4===n.value4:e instanceof j&&n instanceof j?u.eq(l.eqList(se))(e.value0)(n.value0):e instanceof D&&n instanceof D?e.value0.scaleX===n.value0.scaleX&&e.value0.scaleY===n.value0.scaleY&&u.eq(se)(e.value1)(n.value1):e instanceof L&&n instanceof L?e.value0.translateX===n.value0.translateX&&e.value0.translateY===n.value0.translateY&&u.eq(se)(e.value1)(n.value1):e instanceof F&&n instanceof F?e.value0===n.value0&&u.eq(se)(e.value1)(n.value1):e instanceof W&&n instanceof W?u.eq(ae)(e.value0)(n.value0)&&u.eq(se)(e.value1)(n.value1):e instanceof _&&n instanceof _&&(u.eq(le)(e.value0)(n.value0)&&u.eq(se)(e.value1)(n.value1))}}),ve=function(e){var n=m.create(!0),t=a.fromFoldable(e);return function(e){return n(t(e))}},he=W.create,we=function(e){return function(n){return function(t){return function(u){return function(r){return new g({x:e,y:n,start:t,end:u,radius:r})}}}}},de=function(e){return function(n){return we(e)(n)(0)(2*p.pi)}};module.exports={path:K,closed:ve,rectangle:z,circle:de,arc:we,fillColor:oe,outlineColor:V,lineWidth:ue,shadowOffset:Y,shadowBlur:O,shadowColor:J,shadow:A,filled:re,outlined:Q,clipped:he,scale:k,translate:R,rotate:B,text:X,everywhere:ie,render:U,eqShape:ae,semigroupShape:G,monoidShape:Z,semigroupFillStyle:H,monoidFillStyle:ne,eqFillStyle:fe,semigroupOutlineStyle:T,monoidOutlineStyle:ee,eqOutlineStyle:ce,eqShadow:le,semigroupShadow:I,monoidShadow:$,semigroupDrawing:P,monoidDrawing:te,eqDrawing:se};
+},{"../Color/index.js":"f3ma","../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Semigroup/index.js":"EsAJ","../Data.Symbol/index.js":"4oJQ","../Data.Unit/index.js":"NhVk","../Effect/index.js":"oTWB","../Graphics.Canvas/index.js":"rm6N","../Graphics.Drawing.Font/index.js":"fMOI","../Math/index.js":"Rpaz"}],"QJpD":[function(require,module,exports) {
+"use strict";var t=function(t){return function(n){return n[t]}};exports._namespaceURI=t("namespaceURI"),exports._prefix=t("prefix"),exports.localName=t("localName"),exports.tagName=t("tagName"),exports.id=function(t){return function(){return t.id}},exports.setId=function(t){return function(n){return function(){return n.id=t,{}}}},exports.className=function(t){return function(){return t.className}},exports.setClassName=function(t){return function(n){return function(){return n.className=t,{}}}},exports.getElementsByTagName=function(t){return function(n){return function(){return n.getElementsByTagName(t)}}},exports._getElementsByTagNameNS=function(t){return function(n){return function(r){return function(){return r.getElementsByTagNameNS(t,n)}}}},exports.getElementsByClassName=function(t){return function(n){return function(){return n.getElementsByClassName(t)}}},exports.setAttribute=function(t){return function(n){return function(r){return function(){return r.setAttribute(t,n),{}}}}},exports._getAttribute=function(t){return function(n){return function(){return n.getAttribute(t)}}},exports.hasAttribute=function(t){return function(n){return n.hasAttribute(t)}},exports.removeAttribute=function(t){return function(n){return function(){return n.removeAttribute(t),{}}}},exports.scrollTop=function(t){return function(){return t.scrollTop}},exports.setScrollTop=function(t){return function(n){return function(){return n.scrollTop=t,{}}}},exports.scrollLeft=function(t){return function(){return t.scrollLeft}},exports.setScrollLeft=function(t){return function(n){return function(){return n.scrollLeft=t,{}}}},exports.scrollWidth=function(t){return function(){return t.scrollWidth}},exports.scrollHeight=function(t){return function(){return t.scrollHeight}},exports.clientTop=function(t){return function(){return t.clientTop}},exports.clientLeft=function(t){return function(){return t.clientLeft}},exports.clientWidth=function(t){return function(){return t.clientWidth}},exports.clientHeight=function(t){return function(){return t.clientHeight}};
+},{}],"4K7Y":[function(require,module,exports) {
+"use strict";exports._unsafeReadProtoTagged=function(e,r,t,n){if("undefined"!=typeof window){var o=window[t];return null!=o&&n instanceof o?r(n):e}for(var u=n;null!=u;){var f=Object.getPrototypeOf(u),i=f.constructor.name;if(i===t)return r(n);if("Object"===i)return e;u=f}return e};
+},{}],"fdUh":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),r=require("../Data.Maybe/index.js"),t=function(t){return function(a){return e._unsafeReadProtoTagged(r.Nothing.value,r.Just.create,t,a)}};module.exports={unsafeReadProtoTagged:t};
+},{"./foreign.js":"4K7Y","../Data.Maybe/index.js":"5mN7"}],"S4h2":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),t=require("../Data.Functor/index.js"),o=require("../Data.Nullable/index.js"),r=require("../Effect/index.js"),a=require("../Unsafe.Coerce/index.js"),l=require("../Web.Internal.FFI/index.js"),n=a.unsafeCoerce,s=a.unsafeCoerce,i=a.unsafeCoerce,c=a.unsafeCoerce,u=a.unsafeCoerce,m=function(t){return o.toMaybe(e._prefix(t))},d=function(t){return o.toMaybe(e._namespaceURI(t))},f=function(t){return e._getElementsByTagNameNS(o.toNullable(t))},g=function(a){var l=t.map(r.functorEffect)(o.toMaybe),n=e._getAttribute(a);return function(e){return l(n(e))}},N=l.unsafeReadProtoTagged("Element"),T=l.unsafeReadProtoTagged("Element"),E=l.unsafeReadProtoTagged("Element"),b=l.unsafeReadProtoTagged("Element"),h=l.unsafeReadProtoTagged("Element");module.exports={fromNode:E,fromChildNode:h,fromNonDocumentTypeChildNode:T,fromParentNode:N,fromEventTarget:b,toNode:i,toChildNode:u,toNonDocumentTypeChildNode:s,toParentNode:n,toEventTarget:c,namespaceURI:d,prefix:m,getElementsByTagNameNS:f,getAttribute:g,localName:e.localName,tagName:e.tagName,id:e.id,setId:e.setId,className:e.className,setClassName:e.setClassName,getElementsByTagName:e.getElementsByTagName,getElementsByClassName:e.getElementsByClassName,setAttribute:e.setAttribute,hasAttribute:e.hasAttribute,removeAttribute:e.removeAttribute,scrollTop:e.scrollTop,setScrollTop:e.setScrollTop,scrollLeft:e.scrollLeft,setScrollLeft:e.setScrollLeft,scrollWidth:e.scrollWidth,scrollHeight:e.scrollHeight,clientTop:e.clientTop,clientLeft:e.clientLeft,clientWidth:e.clientWidth,clientHeight:e.clientHeight};
+},{"./foreign.js":"QJpD","../Data.Functor/index.js":"+0AE","../Data.Nullable/index.js":"YQ8o","../Effect/index.js":"oTWB","../Unsafe.Coerce/index.js":"ETUV","../Web.Internal.FFI/index.js":"fdUh"}],"FwXA":[function(require,module,exports) {
+"use strict";var n=function(n){return function(e){return function(){return e[n]}}};exports.nodeTypeIndex=function(n){return n.nodeType},exports.nodeName=function(n){return n.nodeName},exports.baseURI=n("baseURI"),exports._ownerDocument=n("ownerDocument"),exports._parentNode=n("parentNode"),exports._parentElement=n("parentElement"),exports.hasChildNodes=function(n){return function(){return n.hasChildNodes()}},exports.childNodes=n("childNodes"),exports._firstChild=n("firstChild"),exports._lastChild=n("lastChild"),exports._previousSibling=n("previousSibling"),exports._nextSibling=n("nextSibling"),exports._nodeValue=n("nodeValue"),exports.setNodeValue=function(n){return function(e){return function(){return e.nodeValue=n,{}}}},exports.textContent=n("textContent"),exports.setTextContent=function(n){return function(e){return function(){return e.textContent=n,{}}}},exports.normalize=function(n){return function(){return n.normalize(),{}}},exports.clone=function(n){return function(){return n.cloneNode(!1)}},exports.deepClone=function(n){return function(){return n.cloneNode(!0)}},exports.isEqualNode=function(n){return function(e){return function(){return n.isEqualNode(e)}}},exports.compareDocumentPositionBits=function(n){return function(e){return function(){return n.compareDocumentPosition(e)}}},exports.contains=function(n){return function(e){return function(){return n.contains(e)}}},exports._lookupPrefix=function(n){return function(e){return function(){return e.lookupPrefix(n)}}},exports._lookupNamespaceURI=function(n){return function(e){return function(){return e.lookupNamespaceURI(n)}}},exports.isDefaultNamespace=function(n){return function(e){return function(){return e.isDefaultNamespace(n)}}},exports.insertBefore=function(n){return function(e){return function(t){return function(){return t.insertBefore(n,e)}}}},exports.appendChild=function(n){return function(e){return function(){return e.appendChild(n)}}},exports.replaceChild=function(n){return function(e){return function(t){return function(){return t.replaceChild(n,e)}}}},exports.removeChild=function(n){return function(e){return function(){return e.removeChild(n)}}};
+},{}],"vDH/":[function(require,module,exports) {
+"use strict";var n=require("../Data.Bounded/index.js"),e=require("../Data.Enum/index.js"),t=require("../Data.Eq/index.js"),u=require("../Data.Maybe/index.js"),o=require("../Data.Ord/index.js"),i=function(){function n(){}return n.value=new n,n}(),r=function(){function n(){}return n.value=new n,n}(),c=function(){function n(){}return n.value=new n,n}(),f=function(){function n(){}return n.value=new n,n}(),a=function(){function n(){}return n.value=new n,n}(),s=function(){function n(){}return n.value=new n,n}(),d=function(){function n(){}return n.value=new n,n}(),l=function(){function n(){}return n.value=new n,n}(),w=function(){function n(){}return n.value=new n,n}(),v=function(){function n(){}return n.value=new n,n}(),N=function(){function n(){}return n.value=new n,n}(),m=function(){function n(){}return n.value=new n,n}(),J=function(n){return 1===n?new u.Just(i.value):2===n?new u.Just(r.value):3===n?new u.Just(c.value):4===n?new u.Just(f.value):5===n?new u.Just(a.value):6===n?new u.Just(s.value):7===n?new u.Just(d.value):8===n?new u.Just(l.value):9===n?new u.Just(w.value):10===n?new u.Just(v.value):11===n?new u.Just(N.value):12===n?new u.Just(m.value):u.Nothing.value},p=function(n){if(n instanceof i)return 1;if(n instanceof r)return 2;if(n instanceof c)return 3;if(n instanceof f)return 4;if(n instanceof a)return 5;if(n instanceof s)return 6;if(n instanceof d)return 7;if(n instanceof l)return 8;if(n instanceof w)return 9;if(n instanceof v)return 10;if(n instanceof N)return 11;if(n instanceof m)return 12;throw new Error("Failed pattern match at Web.DOM.NodeType (line 54, column 1 - line 54, column 36): "+[n.constructor.name])},y=new t.Eq(function(n){return function(e){return n instanceof i&&e instanceof i||(n instanceof r&&e instanceof r||(n instanceof c&&e instanceof c||(n instanceof f&&e instanceof f||(n instanceof a&&e instanceof a||(n instanceof s&&e instanceof s||(n instanceof d&&e instanceof d||(n instanceof l&&e instanceof l||(n instanceof w&&e instanceof w||(n instanceof v&&e instanceof v||(n instanceof N&&e instanceof N||n instanceof m&&e instanceof m))))))))))}}),D=new o.Ord(function(){return y},function(n){return function(e){return o.compare(o.ordInt)(p(n))(p(e))}}),E=new e.Enum(function(){return D},e.defaultPred(J)(p),e.defaultSucc(J)(p)),T=new n.Bounded(function(){return D},i.value,m.value),q=new e.BoundedEnum(function(){return T},function(){return E},12,p,J);module.exports={ElementNode:i,AttributeNode:r,TextNode:c,CDATASectionNode:f,EntityReferenceNode:a,EntityNode:s,ProcessingInstructionNode:d,CommentNode:l,DocumentNode:w,DocumentTypeNode:v,DocumentFragmentNode:N,NotationNode:m,eqNodeType:y,ordNodeType:D,boundedNodeType:T,enumNodeType:E,boundedEnumNodeType:q};
+},{"../Data.Bounded/index.js":"kcUU","../Data.Enum/index.js":"oOsU","../Data.Eq/index.js":"Pq4F","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb"}],"P+X4":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),n=require("../Data.Enum/index.js"),t=require("../Data.Functor/index.js"),r=require("../Data.Maybe/index.js"),o=require("../Data.Nullable/index.js"),u=require("../Effect/index.js"),a=require("../Unsafe.Coerce/index.js"),i=require("../Web.DOM.NodeType/index.js"),f=require("../Web.Internal.FFI/index.js"),c=a.unsafeCoerce,d=function(){var n=t.map(u.functorEffect)(o.toMaybe);return function(t){return n(e._previousSibling(t))}}(),s=function(){var n=t.map(u.functorEffect)(o.toMaybe);return function(t){return n(e._parentNode(t))}}(),l=function(){var n=t.map(u.functorEffect)(o.toMaybe);return function(t){return n(e._parentElement(t))}}(),p=function(){var n=t.map(u.functorEffect)(o.toMaybe);return function(t){return n(e._ownerDocument(t))}}(),m=function(){var n=t.map(u.functorEffect)(o.toMaybe);return function(t){return n(e._nodeValue(t))}}(),b=function(t){var o=r.fromJust(t),u=n.toEnum(i.boundedEnumNodeType);return function(n){return o(u(e.nodeTypeIndex(n)))}},x=function(){var n=t.map(u.functorEffect)(o.toMaybe);return function(t){return n(e._nextSibling(t))}}(),C=function(n){var r=t.map(u.functorEffect)(o.toMaybe),a=e._lookupPrefix(n);return function(e){return r(a(e))}},E=function(n){var r=t.map(u.functorEffect)(o.toMaybe),a=e._lookupNamespaceURI(n);return function(e){return r(a(e))}},N=function(){var n=t.map(u.functorEffect)(o.toMaybe);return function(t){return n(e._lastChild(t))}}(),v=f.unsafeReadProtoTagged("Node"),y=function(){var n=t.map(u.functorEffect)(o.toMaybe);return function(t){return n(e._firstChild(t))}}();module.exports={fromEventTarget:v,toEventTarget:c,nodeType:b,ownerDocument:p,parentNode:s,parentElement:l,firstChild:y,lastChild:N,previousSibling:d,nextSibling:x,nodeValue:m,lookupPrefix:C,lookupNamespaceURI:E,nodeTypeIndex:e.nodeTypeIndex,nodeName:e.nodeName,baseURI:e.baseURI,hasChildNodes:e.hasChildNodes,childNodes:e.childNodes,setNodeValue:e.setNodeValue,textContent:e.textContent,setTextContent:e.setTextContent,normalize:e.normalize,clone:e.clone,deepClone:e.deepClone,isEqualNode:e.isEqualNode,compareDocumentPositionBits:e.compareDocumentPositionBits,contains:e.contains,isDefaultNamespace:e.isDefaultNamespace,insertBefore:e.insertBefore,appendChild:e.appendChild,replaceChild:e.replaceChild,removeChild:e.removeChild};
+},{"./foreign.js":"FwXA","../Data.Enum/index.js":"oOsU","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Nullable/index.js":"YQ8o","../Effect/index.js":"oTWB","../Unsafe.Coerce/index.js":"ETUV","../Web.DOM.NodeType/index.js":"vDH/","../Web.Internal.FFI/index.js":"fdUh"}],"VVkU":[function(require,module,exports) {
+
+"use strict";var n=require("./foreign.js"),e=require("../Control.Applicative/index.js"),t=require("../Control.Bind/index.js"),r=require("../Control.Monad.Error.Class/index.js"),i=require("../Data.Array/index.js"),o=require("../Data.Either/index.js"),u=require("../Data.Eq/index.js"),a=require("../Data.Filterable/index.js"),f=require("../Data.Foldable/index.js"),c=require("../Data.Function/index.js"),l=require("../Data.Functor/index.js"),s=require("../Data.HeytingAlgebra/index.js"),d=require("../Data.Int/index.js"),p=require("../Data.Lens.Fold/index.js"),m=require("../Data.Lens.Getter/index.js"),v=require("../Data.Lens.Internal.Forget/index.js"),w=require("../Data.Lens.Iso.Newtype/index.js"),E=require("../Data.Lens.Prism/index.js"),h=require("../Data.Lens.Record/index.js"),g=require("../Data.List/index.js"),x=require("../Data.List.Types/index.js"),y=require("../Data.Map/index.js"),b=require("../Data.Map.Internal/index.js"),C=require("../Data.Maybe/index.js"),M=require("../Data.Maybe.First/index.js"),q=require("../Data.Monoid/index.js"),j=require("../Data.Newtype/index.js"),D=require("../Data.Nullable/index.js"),S=require("../Data.Ord/index.js"),F=require("../Data.Pair/index.js"),B=require("../Data.Ring/index.js"),N=require("../Data.Semiring/index.js"),k=require("../Data.Set/index.js"),I=require("../Data.Show/index.js"),L=require("../Data.Symbol/index.js"),T=require("../Data.Time.Duration/index.js"),R=require("../Data.Traversable/index.js"),_=require("../Data.TraversableWithIndex/index.js"),A=require("../Data.Tuple/index.js"),O=require("../Data.Unfoldable/index.js"),G=require("../Data.Unit/index.js"),P=require("../Data.Variant/index.js"),z=require("../Data.Variant.Internal/index.js"),U=require("../Effect/index.js"),W=require("../Effect.Aff/index.js"),J=require("../Effect.Aff.Class/index.js"),H=require("../Effect.Class/index.js"),V=require("../Effect.Exception/index.js"),Z=require("../Effect.Ref/index.js"),K=require("../Effect.Uncurried/index.js"),X=require("../Genetics.Browser.Cacher/index.js"),Y=require("../Genetics.Browser.Layer/index.js"),Q=require("../Graphics.Canvas/index.js"),$=require("../Graphics.Drawing/index.js"),nn=require("../Graphics.Drawing.Font/index.js"),en=require("../Partial.Unsafe/index.js"),tn=require("../Record/index.js"),rn=require("../Type.Equality/index.js"),on=require("../Unsafe.Coerce/index.js"),un=require("../Web.DOM.Element/index.js"),an=require("../Web.DOM.Node/index.js"),fn=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),cn=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),ln=function(){function n(){}return n.value=new n,n}(),sn=function(){function n(){}return n.value=new n,n}(),dn=function(){function n(){}return n.value=new n,n}(),pn=function(){function n(){}return n.value=new n,n}(),mn=function(n){return n},vn=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),wn=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),En=function(n){return n},hn=function(n){return n},gn=function(e){return function(t){return function(){return n.zoomCanvasImpl(e.back,e.front,{left:t.value0,right:t.value1})}}},xn=function(e){return function(t){return function(r){return n.canvasWheelCBImpl(j.unwrap(e)(t).element)(c.const(r))}}},yn=function(e){return function(){return n.unsafeCreateElementImpl(e.elementType,e.id)}},bn=function(e){return function(t){return function(){return n.setCanvasTranslation(e)(t.back)(),n.setCanvasTranslation(e)(t.front)()}}},Cn=K.runEffectFn3(n.setElementStyleImpl),Mn=function(n){return f.traverse_(U.applicativeEffect)(f.foldableArray)(A.uncurry(Cn(n)))},qn=function(n){return Mn(n)},jn=function(n){return Cn(n)},Dn=function(n){return function(e){return jn(n)("z-index")(I.show(I.showInt)(e))}},Sn=function(n){return function(e){return qn(e)([new A.Tuple("position","absolute"),new A.Tuple("top",I.show(I.showNumber)(n.top)+"px"),new A.Tuple("left",I.show(I.showNumber)(n.left)+"px")])}},Fn=function(e){return K.runEffectFn3(n.scrollCanvasImpl)(e.back)(e.front)},Bn=new j.Newtype(function(n){return n},En),Nn=new j.Newtype(function(n){return n},mn),kn=new j.Newtype(function(n){return n},hn),In=14,Ln=nn.fontString(nn.font(nn.sansSerif)(In)(q.mempty(nn.monoidFontOptions))),Tn=function(n){return function(n){return function(e){return function(){var t=Q.withContext(n)(function(){Q.setFont(n)(Ln)();return Q.measureText(n)(e.text)()})(),r=14+t.width/2,i=function(){if(e.gravity instanceof dn)return e.point.x;if(e.gravity instanceof sn)return e.point.x-r;if(e.gravity instanceof pn)return e.point.x+r;throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 694, column 11 - line 697, column 33): "+[e.gravity.constructor.name])}(),o=d.toNumber(In);return{x:i,y:e.point.y-o,width:t.width,height:o}}}}},Rn=function(n){return function(e){return n.x<e.x+e.width&&n.x+n.width>e.x&&n.y<e.y+e.height&&n.height+n.y>e.y}},_n={width:15,height:300},An=function(n){return function(i){return t.bind(W.bindAff)(H.liftEffect(W.monadEffectAff)(Z.read(i.tracks)))(function(t){var i=b.lookup(S.ordString)(n)(t);if(i instanceof C.Just)return e.pure(W.applicativeAff)(i.value0);if(i instanceof C.Nothing)return r.throwError(W.monadThrowAff)(V.error("Could not find track '"+n+"'!"));throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 448, column 3 - line 452, column 55): "+[i.constructor.name])})}},On=function(n){return function(e){return H.liftEffect(n)(Z.read(e.layers))}},Gn=function(n){return function(e){return H.liftEffect(n)(Z.read(e.dimensions))}},Pn=l.map(l.functorFn)(Q.getContext2D)(function(){var n=j.unwrap(Nn);return function(e){return n(e).front}}()),zn=function(n){return function(e){return function(r){return t.bind(n.Monad0().Bind1())(H.liftEffect(n)(Z.read(e.tracks)))(function(e){return R.for(n.Monad0().Applicative0())(b.traversableMap)(e)(r)})}}},Un=function(n){return function(e){var t=l.void(n.Monad0().Bind1().Apply0().Functor0()),r=zn(n)(e);return function(n){return t(r(n))}}},Wn=new u.Eq(function(n){return function(e){return n instanceof sn&&e instanceof sn||(n instanceof dn&&e instanceof dn||n instanceof pn&&e instanceof pn)}}),Jn=function(e){return K.runEffectFn2(n.elementClickImpl)(e)},Hn=function(e){return function(t){return function(){var r=l.map(U.functorEffect)(on.unsafeCoerce)(yn({elementType:"canvas",id:t}))();return n.initializeCanvasImpl(r,e),r}}},Vn=function(e){return function(t){return function(r){return function(){var i=yn({elementType:"div",id:r})();n.setContainerStyle(i)(e)();var o=Hn(_n)("glyphBuffer")(),u=Z.new({size:e,padding:t})();return{layers:Z.new(q.mempty(b.monoidMap(S.ordString)))(),dimensions:u,element:i,glyphBuffer:o}}}}},Zn=function(n){return function(e){return l.void(U.functorEffect)(Q.clearRect(n)({x:0,y:0,width:e.width,height:e.height}))}},Kn=function(e){return function(t){return function(r){return function(i){return function(){var o=Q.getContext2D(e)(),u=_n.width/2,a=_n.height/2;Zn(o)(_n)(),$.render(o)($.translate(u)(a)(i.drawing))();return n.drawCopies(e,_n,t,function(n){return n.x>=r.value0&&n.x<=r.value1},i.points)}}}}},Xn=function(e){return function(t){var r;return n.canvasDragImpl(e)((r=t,function(n){var e=D.toMaybe(n.during);if(e instanceof C.Just)return r(new o.Right(e.value0));if(e instanceof C.Nothing)return r(o.Left.create(C.fromMaybe({x:0,y:0})(D.toMaybe(n.total))));throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 311, column 36 - line 313, column 73): "+[e.constructor.name])}))}},Yn=function(n){return function(t){return function(){Z.read(n.tracks)();return Xn(n.element)(function(n){if(n instanceof o.Left)return e.pure(U.applicativeEffect)(G.unit);if(n instanceof o.Right)return t(n.value0);throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 326, column 40 - line 328, column 20): "+[n.constructor.name])})()}}},Qn=function(n){return function(t){return Xn(n.element)(function(n){if(n instanceof o.Left)return e.pure(U.applicativeEffect)(G.unit);if(n instanceof o.Right)return t(n.value0);throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 335, column 40 - line 337, column 20): "+[n.constructor.name])})}},$n=function(n){return function(e){return H.liftEffect(n)(function(){return{tracks:Z.new(q.mempty(b.monoidMap(S.ordString)))(),element:e}})}},ne=function(n){return function(){bn({x:0,y:0})(n)();var e=Q.getCanvasDimensions(n.back)();return f.for_(U.applicativeEffect)(f.foldableArray)([n.back,n.front])(t.composeKleisliFlipped(U.bindEffect)(c.flip(Zn)(e))(Q.getContext2D))()}},ee=function(n){return function(e){return function(){var t={back:Hn(n)(e+"-buffer")(),front:Hn(n)(e)()};return ne(t)(),t}}},te=function(n){return function(e){return function(){Q.setCanvasDimensions(e.back)(n)(),Q.setCanvasDimensions(e.front)(n)();return ne(e)(),G.unit}}},re=function(n){return function(e){return function(t){return H.liftEffect(n)(function(){if(t instanceof vn)return l.void(U.functorEffect)(Q.setCanvasDimensions(t.value0)(e));if(t instanceof wn)return te(e)(t.value0);throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 594, column 3 - line 596, column 45): "+[t.constructor.name])}())}}},ie=function(e){return function(r){return function(i){return H.liftEffect(e)(function(){return Z.modify_(function(n){return{size:r,padding:n.padding}})(i.dimensions)(),n.setContainerStyle(i.element)(r)(),t.bindFlipped(U.bindEffect)(f.traverse_(U.applicativeEffect)(b.foldableMap)(re(H.monadEffectEffect)(r)))(On(H.monadEffectEffect)(i))()})}}},oe=function(e){return function(t){return n.appendElem(e)(t)}},ue=function(n){return function(e){return f.any(x.foldableList)(s.heytingAlgebraBoolean)(function(n){return!u.eq(u.eqRec()(u.eqRowCons(u.eqRowCons(u.eqRowCons(u.eqRowCons(u.eqRowNil)()(new L.IsSymbol(function(){return"y"}))(u.eqNumber))()(new L.IsSymbol(function(){return"x"}))(u.eqNumber))()(new L.IsSymbol(function(){return"width"}))(u.eqNumber))()(new L.IsSymbol(function(){return"height"}))(u.eqNumber)))(e.rect)(n.rect)&&Rn(e.rect)(n.rect)})(n)?n:new x.Cons(e,n)}},ae=function(n){return function(e){return function(t){var r=a.filter(a.filterableArray)(function(e){return e.point.x<n.value1&&e.point.x+100>n.value0})(i.fromFoldable(x.foldableList)(e));return function(){var e=R.for(U.applicativeEffect)(R.traversableArray)(r)(function(e){return l.map(U.functorEffect)(function(n){return{text:e.text,rect:n}})(Tn(n)(t)(e))})(),i=f.foldl(f.foldableArray)(ue)(q.mempty(x.monoidList))(e);return Q.withContext(t)(function(){Q.setFont(t)(Ln)();return f.for_(U.applicativeEffect)(x.foldableList)(i)(function(n){return Q.fillText(t)(n.text)(n.rect.x-n.rect.width/2)(n.rect.y)})()})()}}}},fe=function(e){return function(t){return function(r){return function(i){return H.liftEffect(e)(function(){return Z.modify_(b.insert(S.ordString)(r)(j.wrap(Bn)(i)))(t.tracks)(),n.appendElem(t.element)(i.element)()})}}}},ce=L.SProxy.value,le=L.SProxy.value,se=L.SProxy.value,de=L.SProxy.value,pe=function(n){return E["prism'"](vn.create)(function(n){if(n instanceof vn)return new C.Just(n.value0);if(n instanceof wn)return C.Nothing.value;throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 769, column 27 - line 771, column 23): "+[n.constructor.name])})(n)},me=function(n){var e=w._Newtype(Bn)(Bn)(n.Profunctor0()),t=h.prop(new L.IsSymbol(function(){return"layers"}))()()(L.SProxy.value)(n);return function(n){return e(t(n))}},ve=m.to(function(n){if(n instanceof vn)return n.value0;if(n instanceof wn)return j.unwrap(Nn)(n.value0).front;throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 759, column 19 - line 761, column 31): "+[n.constructor.name])}),we=function(n){return function(r){return function(i){return function(o){return function(u){return function(a){return t.bind(n.MonadEffect0().Monad0().Bind1())(l.map(n.MonadEffect0().Monad0().Bind1().Apply0().Functor0())(function(n){return n.size})(Gn(n.MonadEffect0())(o)))(function(c){return t.bind(n.MonadEffect0().Monad0().Bind1())(Gn(n.MonadEffect0())(o))(function(s){var d={left:0,top:0},p=function(n){return m.viewOn(a.value2)(Y._Component)(new A.Tuple(n,Y.slotSize(s)(Y.asSlot(a.value2))))};return t.bind(n.MonadEffect0().Monad0().Bind1())(H.liftEffect(n.MonadEffect0())(function(){var n=function(){if(a.value0 instanceof Y.Fixed)return l.map(U.functorEffect)(vn.create)(Hn(c)(u))();if(a.value0 instanceof Y.Scrolling)return l.map(U.functorEffect)(wn.create)(ee(c)(u))();throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 812, column 11 - line 814, column 67): "+[a.value0.constructor.name])}();return Sn(d)(m.viewOn(n)(ve))(),n}))(function(c){var s=j.unwrap(Bn)(o).layers;return t.discard(t.discardUnit)(n.MonadEffect0().Monad0().Bind1())(H.liftEffect(n.MonadEffect0())(function(){return Z.modify_(b.insert(S.ordString)(u)(c))(s)(),oe(j.unwrap(Bn)(o).element)(m.viewOn(c)(ve))()}))(function(){return t.bind(n.MonadEffect0().Monad0().Bind1())(J.liftAff(n)(X.new(r)(i)(p)))(function(r){return e.pure(n.MonadEffect0().Monad0().Applicative0())({drawOnCanvas:function(r){return function(i){return t.bind(n.MonadEffect0().Monad0().Bind1())(On(n.MonadEffect0())(o))(function(c){return t.bind(n.MonadEffect0().Monad0().Bind1())(function(){var t=b.lookup(S.ordString)(u)(c);if(t instanceof C.Nothing)return en.unsafeCrashWith("Tried to render layer '"+u+"', but it did not exist!");if(t instanceof C.Just)return e.pure(n.MonadEffect0().Monad0().Applicative0())(m.viewOn(t.value0)(ve));throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 830, column 16 - line 832, column 53): "+[t.constructor.name])}())(function(u){return t.bind(n.MonadEffect0().Monad0().Bind1())(Gn(n.MonadEffect0())(o))(function(c){return t.bind(n.MonadEffect0().Monad0().Bind1())(Y.slotContext(n.MonadEffect0())(a)(c)(u))(function(u){return t.discard(t.discardUnit)(n.MonadEffect0().Monad0().Bind1())(H.liftEffect(n.MonadEffect0())(Q.withContext(u)(function(){return Y.setContextTranslation(N.zero(N.semiringRecord()(N.semiringRecordCons(new L.IsSymbol(function(){return"x"}))()(N.semiringRecordCons(new L.IsSymbol(function(){return"y"}))()(N.semiringRecordNil)(N.semiringNumber))(N.semiringNumber))))(u)(),l.void(U.functorEffect)(Q.clearRect(u)(tn.merge()()({x:0,y:0})(c.size)))()})))(function(){return t.bind(n.MonadEffect0().Monad0().Bind1())(H.liftEffect(n.MonadEffect0())(Q.translate(u)({translateX:-r.value0,translateY:0})))(function(a){var c=function(e){return H.liftEffect(n.MonadEffect0())(ae(new F.Pair(r.value0,r.value1))(e)(u))},l=function(e){return H.liftEffect(n.MonadEffect0())(f.for_(U.applicativeEffect)(f.foldableArray)(e)(Kn(j.unwrap(Bn)(o).glyphBuffer)(u)(new F.Pair(r.value0,r.value1))))},s=function(e){return H.liftEffect(n.MonadEffect0())($.render(u)(e))},d=function(t){return H.liftEffect(n.MonadEffect0())(e.when(U.applicativeEffect)(t.topLeft.x<=r.value1&&t.bottomRight.x>=r.value0)($.render(u)($.translate(t.topLeft.x)(t.topLeft.y)(t.drawing(G.unit)))))},p=O.unfoldr(x.unfoldableList)(function(n){return g.null(n)?C.Nothing.value:new C.Just(new A.Tuple(g.take(250)(n),g.drop(250)(n)))})(i);return f.for_(n.MonadEffect0().Monad0().Applicative0())(x.foldableList)(p)(function(e){return t.discard(t.discardUnit)(n.MonadEffect0().Monad0().Bind1())(f.for_(n.MonadEffect0().Monad0().Applicative0())(x.foldableList)(e)(function(n){return P.onMatch()(z.variantMatchCons(z.variantMatchCons(z.variantMatchCons(z.variantMatchCons(z.variantMatchNil)()(rn.refl))()(rn.refl))()(rn.refl))()(rn.refl))()({drawing:s,bigDrawing:d,drawingBatch:l,labels:c})(P.case_)(n)}))(function(){return J.liftAff(n)(W.delay(j.wrap(T.newtypeMilliseconds)(.01)))})})})})})})})})}},run:r.run,last:r.last})})})})})})}}}}}},Ee=function(n){return function(e){return function(t){return H.liftEffect(n)(function(){var n=Z.read(e.layers)(),r=y.keys(n);f.length(k.foldableSet)(N.semiringInt)(r);return g.null(g.difference(u.eqString)(t)(g.fromFoldable(k.foldableSet)(r)))?l.void(U.functorEffect)(_.forWithIndex(U.applicativeEffect)(x.traversableWithIndexList)(t)(function(e){return function(t){return f.traverse_(U.applicativeEffect)(f.foldableMaybe)(function(n){return Dn(m.viewOn(n)(ve))(e)})(b.lookup(S.ordString)(t)(n))}}))():en.unsafeCrashWith("Called `zIndexLayers` with an order that did not contain all layers")()})}}},he=function(n){return function(e){var t=w._Newtype(n)(n)(e.Profunctor0()),r=h.prop(new L.IsSymbol(function(){return"element"}))()()(L.SProxy.value)(e);return function(n){return t(r(n))}}},ge=function(n){return function(e){return function(t){return function(r){return H.liftEffect(n)(function(){var n=On(H.monadEffectEffect)(e)();Z.modify_(b.insert(S.ordString)(t)(r))(m.viewOn(e)(me(v.strongForget)))();var i=function(n){return m.viewOn(n)(ve)};return l.void(U.functorEffect)(function(){var o=b.lookup(S.ordString)(t)(n);if(o instanceof C.Just)return an.replaceChild(i(r))(i(o.value0))(m.viewOn(e)(he(Bn)(v.strongForget)));if(o instanceof C.Nothing)return an.appendChild(i(r))(m.viewOn(e)(he(Bn)(v.strongForget)));throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 613, column 10 - line 615, column 95): "+[o.constructor.name])}())()})}}}},xe=function(n){return function(e){return function(t){return H.liftEffect(n)(function(){var n=On(H.monadEffectEffect)(e)();return function(){var r,i=b.lookup(S.ordString)(t)(n);if(i instanceof C.Nothing)return G.unit;if(i instanceof C.Just)return l.void(U.functorEffect)(an.removeChild((r=i.value0,m.viewOn(r)(ve)))(m.viewOn(e)(he(Bn)(v.strongForget))))();throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 628, column 3 - line 630, column 83): "+[i.constructor.name])}(),Z.modify_(b.delete(S.ordString)(t))(m.viewOn(e)(me(v.strongForget)))()})}}},ye=function(n){return function(e){return function(t){return H.liftEffect(n)(function(){var n=Gn(H.monadEffectEffect)(e)(),r=m.viewOn(t)(Y._Component);return Jn(m.viewOn(e)(he(Bn)(v.strongForget)))(function(e){return r((i=e,B.sub(B.ringRecord()(B.ringRecordCons(new L.IsSymbol(function(){return"x"}))()(B.ringRecordCons(new L.IsSymbol(function(){return"y"}))()(B.ringRecordNil)(B.ringNumber))(B.ringNumber)))(i)(Y.slotOffset(n)(Y.asSlot(t)))));var i})()})}}},be=function(e){return function(t){return function(){var r=Gn(H.monadEffectEffect)(e)(),i=m.viewOn(t)(Y._Component);return n.canvasWheelCBImpl(m.viewOn(e)(he(Bn)(v.strongForget)))(function(n){return i((e=n,B.sub(B.ringRecord()(B.ringRecordCons(new L.IsSymbol(function(){return"x"}))()(B.ringRecordCons(new L.IsSymbol(function(){return"y"}))()(B.ringRecordNil)(B.ringNumber))(B.ringNumber)))(e)(Y.slotOffset(r)(Y.asSlot(t)))));var e})()}}},Ce=function(n){return function(r){return function(i){var o=un.toNode(m.viewOn(r)(he(Bn)(v.strongForget)));return t.discard(t.discardUnit)(n.Monad0().Bind1())(H.liftEffect(n)(an.setTextContent("loading")(o)))(function(){return t.bind(n.Monad0().Bind1())(i)(function(r){return t.discard(t.discardUnit)(n.Monad0().Bind1())(H.liftEffect(n)(an.setTextContent("")(o)))(function(){return e.pure(n.Monad0().Applicative0())(r)})})})}}},Me=function(n){return E["prism'"](wn.create)(function(n){if(n instanceof vn)return C.Nothing.value;if(n instanceof wn)return new C.Just(n.value0);throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 765, column 9 - line 765, column 34): "+[n.constructor.name])})(n)},qe=function(n){return function(t){return function(){var r=Z.read(n.layers)(),i=a.filterMap(a.filterableMap(S.ordString))(p.preview(Me(v.choiceForget(M.monoidFirst))))(r);return f.for_(U.applicativeEffect)(b.foldableMap)(i)(function(r){if(t instanceof fn)return function(){var e=l.map(U.functorEffect)(function(n){return Y.trackSlots(n).center.size.width})(Gn(H.monadEffectEffect)(j.wrap(Bn)(n)))();return Fn(r)({x:-t.value0*e,y:0})()};if(t instanceof cn)return gn(r)(t.value0);if(t instanceof ln)return e.pure(U.applicativeEffect)(G.unit);throw new Error("Failed pattern match at Genetics.Browser.Canvas (line 284, column 26 - line 293, column 29): "+[t.constructor.name])})()}}},je=function(n){return function(e){return function(){var t=Z.read(n.layers)(),r=a.filterMap(a.filterableMap(S.ordString))(p.preview(Me(v.choiceForget(M.monoidFirst))))(t);return f.for_(U.applicativeEffect)(b.foldableMap)(r)(function(n){return Fn(n)(e)})()}}};module.exports={LLeft:sn,LCenter:dn,LRight:pn,_drawing:se,_bigDrawing:de,_drawingBatch:le,_labels:ce,newLayer:we,getDimensions:Gn,_Container:he,dragScroll:Yn,dragScrollTrack:Qn,wheelZoom:xn,trackWheel:be,trackClickHandler:ye,trackContainer:Vn,withLoadingIndicator:Ce,setTrackContainerSize:ie,setElementStyle:Cn,browserContainer:$n,addTrack:fe,getTrack:An,forTracks:zn,forTracks_:Un,Scrolling:fn,Zooming:cn,Jump:ln,animateTrack:qe,newtypeBrowserContainer:kn,eqLabelPlace:Wn};
+},{"./foreign.js":"KkC9","../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Monad.Error.Class/index.js":"L8Lk","../Data.Array/index.js":"4t4C","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Filterable/index.js":"6hfS","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Int/index.js":"xNJb","../Data.Lens.Fold/index.js":"fCig","../Data.Lens.Getter/index.js":"OPOX","../Data.Lens.Internal.Forget/index.js":"mj9z","../Data.Lens.Iso.Newtype/index.js":"CiFJ","../Data.Lens.Prism/index.js":"4AcV","../Data.Lens.Record/index.js":"nwoH","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Map/index.js":"62zx","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Maybe.First/index.js":"W/l6","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Nullable/index.js":"YQ8o","../Data.Ord/index.js":"r4Vb","../Data.Pair/index.js":"PpsX","../Data.Ring/index.js":"E2qH","../Data.Semiring/index.js":"11NF","../Data.Set/index.js":"+Eae","../Data.Show/index.js":"mFY7","../Data.Symbol/index.js":"4oJQ","../Data.Time.Duration/index.js":"AnkF","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unit/index.js":"NhVk","../Data.Variant/index.js":"hgdh","../Data.Variant.Internal/index.js":"kYoO","../Effect/index.js":"oTWB","../Effect.Aff/index.js":"I7lu","../Effect.Aff.Class/index.js":"I4H+","../Effect.Class/index.js":"dWtH","../Effect.Exception/index.js":"0OCW","../Effect.Ref/index.js":"/Jaj","../Effect.Uncurried/index.js":"qn3Z","../Genetics.Browser.Cacher/index.js":"61ee","../Genetics.Browser.Layer/index.js":"YWUW","../Graphics.Canvas/index.js":"rm6N","../Graphics.Drawing/index.js":"0WVi","../Graphics.Drawing.Font/index.js":"fMOI","../Partial.Unsafe/index.js":"aoR+","../Record/index.js":"0gG4","../Type.Equality/index.js":"Uq/R","../Unsafe.Coerce/index.js":"ETUV","../Web.DOM.Element/index.js":"S4h2","../Web.DOM.Node/index.js":"P+X4"}],"eqin":[function(require,module,exports) {
+"use strict";exports.unsafeReadPropImpl=function(r,t,e,n){return null==n?r:t(n[e])},exports.unsafeHasOwnProperty=function(r,t){return Object.prototype.hasOwnProperty.call(t,r)},exports.unsafeHasProperty=function(r,t){return r in t};
+},{}],"Ryy1":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),n=require("../Control.Applicative/index.js"),r=require("../Control.Bind/index.js"),t=require("../Control.Monad.Except.Trans/index.js"),i=require("../Data.Function/index.js"),o=require("../Data.Identity/index.js"),u=require("../Foreign/index.js"),d=function(e){this.ix=e},f=function(e,n,r,t){this.errorAt=e,this.hasOwnProperty=n,this.hasProperty=r,this.index=t},a=function(r){return function(i){return e.unsafeReadPropImpl(u.fail(new u.TypeMismatch("object",u.typeOf(i))),n.pure(t.applicativeExceptT(o.monadIdentity)),r,i)}},c=a,p=a,s=function(e){return e.ix},x=function(e){return e.index},l=new d(function(e){return function(n){return function(u){return r.bindFlipped(t.bindExceptT(o.monadIdentity))(i.flip(x(e))(u))(n)}}}),y=new d(function(e){return x(e)}),h=function(n){return function(r){return!u.isNull(r)&&(!u.isUndefined(r)&&(("object"===u.typeOf(r)||"function"===u.typeOf(r))&&e.unsafeHasProperty(n,r)))}},P=function(e){return e.hasProperty},j=function(n){return function(r){return!u.isNull(r)&&(!u.isUndefined(r)&&(("object"===u.typeOf(r)||"function"===u.typeOf(r))&&e.unsafeHasOwnProperty(n,r)))}},w=new f(u.ErrorAtIndex.create,j,h,i.flip(p)),I=new f(u.ErrorAtProperty.create,j,h,i.flip(c)),O=function(e){return e.hasOwnProperty},b=function(e){return e.errorAt};module.exports={Index:f,Indexable:d,readProp:c,readIndex:p,ix:s,index:x,hasProperty:P,hasOwnProperty:O,errorAt:b,indexString:I,indexInt:w,indexableForeign:y,indexableExceptT:l};
+},{"./foreign.js":"eqin","../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Monad.Except.Trans/index.js":"gr8B","../Data.Function/index.js":"ImXJ","../Data.Identity/index.js":"2OKT","../Foreign/index.js":"pu1p"}],"71qG":[function(require,module,exports) {
+"use strict";var e=require("../Control.Applicative/index.js"),r=require("../Control.Monad.Except.Trans/index.js"),n=require("../Data.Boolean/index.js"),t=require("../Data.Identity/index.js"),i=require("../Foreign/index.js"),a=function(e){return"Object"===i.tagOf(e)},o=function(o){if(a(o))return e.pure(r.applicativeExceptT(t.monadIdentity))(i.unsafeFromForeign(o));if(n.otherwise)return i.fail(new i.TypeMismatch("Object",i.tagOf(o)));throw new Error("Failed pattern match at Foreign.Generic.Internal (line 13, column 1 - line 13, column 44): "+[o.constructor.name])};module.exports={isObject:a,readObject:o};
+},{"../Control.Applicative/index.js":"qYya","../Control.Monad.Except.Trans/index.js":"gr8B","../Data.Boolean/index.js":"ObQr","../Data.Identity/index.js":"2OKT","../Foreign/index.js":"pu1p"}],"dhzu":[function(require,module,exports) {
+exports.null=null,exports[void 0]=void 0;
+},{}],"k5yP":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),n=require("../Control.Applicative/index.js"),r=require("../Control.Monad.Except.Trans/index.js"),i=require("../Data.Functor/index.js"),t=require("../Data.Identity/index.js"),u=require("../Data.Maybe/index.js"),d=require("../Foreign/index.js"),a=function(e){return function(a){return d.isNull(a)||d.isUndefined(a)?n.pure(r.applicativeExceptT(t.monadIdentity))(u.Nothing.value):i.map(r.functorExceptT(t.functorIdentity))(u.Just.create)(e(a))}};module.exports={readNullOrUndefined:a,undefined:e[void 0],null:e.null};
+},{"./foreign.js":"dhzu","../Control.Applicative/index.js":"qYya","../Control.Monad.Except.Trans/index.js":"gr8B","../Data.Functor/index.js":"+0AE","../Data.Identity/index.js":"2OKT","../Data.Maybe/index.js":"5mN7","../Foreign/index.js":"pu1p"}],"cO3i":[function(require,module,exports) {
+"use strict";function r(r){return function(n){var t=[];for(var e in n)hasOwnProperty.call(n,e)&&t.push(r(e)(n[e]));return t}}exports._copyST=function(r){return function(){var n={};for(var t in r)hasOwnProperty.call(r,t)&&(n[t]=r[t]);return n}},exports.empty={},exports.runST=function(r){return r()},exports._fmapObject=function(r,n){var t={};for(var e in r)hasOwnProperty.call(r,e)&&(t[e]=n(r[e]));return t},exports._mapWithKey=function(r,n){var t={};for(var e in r)hasOwnProperty.call(r,e)&&(t[e]=n(e)(r[e]));return t},exports._foldM=function(r){return function(n){return function(t){return function(e){var o=t;function u(r){return function(t){return n(t)(r)(e[r])}}for(var i in e)hasOwnProperty.call(e,i)&&(o=r(o)(u(i)));return o}}}},exports._foldSCObject=function(r,n,t,e){var o=n;for(var u in r)if(hasOwnProperty.call(r,u)){var i=t(o)(u)(r[u]),f=e(null)(i);if(null===f)return o;o=f}return o},exports.all=function(r){return function(n){for(var t in n)if(hasOwnProperty.call(n,t)&&!r(t)(n[t]))return!1;return!0}},exports.size=function(r){var n=0;for(var t in r)hasOwnProperty.call(r,t)&&++n;return n},exports._lookup=function(r,n,t,e){return t in e?n(e[t]):r},exports._unsafeDeleteObject=function(r,n){return delete r[n],r},exports._lookupST=function(r,n,t,e){return function(){return t in e?n(e[t]):r}},exports.toArrayWithKey=r,exports.keys=Object.keys||r(function(r){return function(){return r}});
+},{}],"hgKu":[function(require,module,exports) {
+"use strict";exports.new=function(){return{}},exports.peekImpl=function(n){return function(t){return function(r){return function(e){return function(){return{}.hasOwnProperty.call(e,r)?n(e[r]):t}}}}},exports.poke=function(n){return function(t){return function(r){return function(){return r[n]=t,r}}}},exports.delete=function(n){return function(t){return function(){return delete t[n],t}}};
+},{}],"fXGJ":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),r=require("../Data.Maybe/index.js"),t=e.peekImpl(r.Just.create)(r.Nothing.value);module.exports={peek:t,new:e.new,poke:e.poke,delete:e.delete};
+},{"./foreign.js":"hgKu","../Data.Maybe/index.js":"5mN7"}],"jsiz":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),u=require("../Control.Category/index.js"),o=require("../Control.Monad.ST.Internal/index.js"),i=require("../Data.Array/index.js"),c=require("../Data.Eq/index.js"),f=require("../Data.Foldable/index.js"),a=require("../Data.FoldableWithIndex/index.js"),l=require("../Data.Function/index.js"),d=require("../Data.Function.Uncurried/index.js"),p=require("../Data.Functor/index.js"),s=require("../Data.FunctorWithIndex/index.js"),b=require("../Data.Maybe/index.js"),y=require("../Data.Monoid/index.js"),j=require("../Data.Ord/index.js"),m=require("../Data.Semigroup/index.js"),h=require("../Data.Show/index.js"),x=require("../Data.Traversable/index.js"),v=require("../Data.TraversableWithIndex/index.js"),q=require("../Data.Tuple/index.js"),T=require("../Data.Unfoldable/index.js"),S=require("../Foreign.Object.ST/index.js"),w=require("../Unsafe.Coerce/index.js"),F=n.toArrayWithKey(function(n){return function(n){return n}}),W=function(r){var e=i.toUnfoldable(r),t=n.toArrayWithKey(q.Tuple.create);return function(n){return e(t(n))}},A=function(r){var e=i.toUnfoldable(r),t=i.sortWith(j.ordString)(q.fst),u=n.toArrayWithKey(q.Tuple.create);return function(n){return e(t(u(n)))}},O=A(T.unfoldableArray),g=n.toArrayWithKey(q.Tuple.create),D=n._copyST,k=function(r){return function(e){return n.runST(t.bindFlipped(o.bindST)(S.poke(r)(e))(S.new))}},_=function(n){return new h.Show(function(r){return"(fromFoldable "+h.show(h.showArray(q.showTuple(h.showString)(n)))(g(r))+")"})},I=function(r){return function(e){return n.runST(function(){var n=D(e)();r(n)();return n})}},K=d.runFn4(n._lookup)(!1)(l.const(!0)),M=function(r){return function(e){return n._mapWithKey(e,r)}},C=d.runFn4(n._lookup)(b.Nothing.value)(b.Just.create),U=function(r){return function(e){return function(t){return n.all(function(e){return function(u){return n._lookup(!1,c.eq(r)(u),e,t)}})(e)}}},E=n.all(function(n){return function(n){return!1}}),z=function(n){return function(r){return I(S.poke(n)(r))}},N=new p.Functor(function(r){return function(e){return n._fmapObject(e,r)}}),B=new s.FunctorWithIndex(function(){return N},M),J=function(n){return w.unsafeCoerce},H=function(r){return function(e){return function(t){return n.runST(function(){var u=S.new();return f.for_(o.applicativeST)(r)(t)(function(r){return function(){var t=n._lookupST(r.value1,e(r.value1),r.value0,u)();return S.poke(r.value0)(t)(u)()}})(),u})}}},G=function(r){return function(e){return n.runST(function(){var n=S.new();return o.foreach(i.fromFoldable(r)(e))(function(r){return p.void(o.functorST)(S.poke(r.value0)(r.value1)(n))})(),n})}},L=n._copyST,P=function(r){return function(e){return function(t){return n._foldSCObject(t,e,r,b.fromMaybe)}}},Q=function(e){return function(u){return function(o){return n._foldM(t.bind(e.Bind1()))(u)(r.pure(e.Applicative0())(o))}}},R=function(r){return new m.Semigroup(function(e){return function(t){return I(function(u){return Q(o.monadST)(function(e){return function(u){return function(o){return S.poke(u)(n._lookup(o,function(n){return m.append(r)(n)(o)},u,t))(e)}}})(u)(e)})(t)}})},V=function(r){return new y.Monoid(function(){return R(r)},n.empty)},X=function(n){return I(function(r){return Q(o.monadST)(function(n){return function(r){return function(e){return S.poke(r)(e)(n)}}})(r)(n)})},Y=function(r){return f.foldl(r)(X)(n.empty)},Z=n._foldM(l.applyFlipped),$=function(n){return function(r){return Z(function(e){return function(t){return function(u){return m.append(n.Semigroup0())(e)(r(t)(u))}}})(y.mempty(n))}},nn=new f.Foldable(function(n){return function(r){return $(n)(l.const(r))}},function(n){return Z(function(r){return function(e){return n(r)}})},function(n){return function(r){return function(e){return f.foldr(f.foldableArray)(n)(r)(F(e))}}}),rn=new a.FoldableWithIndex(function(){return nn},function(n){return $(n)},function(n){return Z(l.flip(n))},function(r){return function(e){return function(t){return f.foldr(f.foldableArray)(q.uncurry(r))(e)(n.toArrayWithKey(q.Tuple.create)(t))}}}),en=new v.TraversableWithIndex(function(){return rn},function(){return B},function(){return tn},function(t){return function(u){return function(o){return Z(function(n){return function(r){return function(o){return e.apply(t.Apply0())(p.map(t.Apply0().Functor0())(l.flip(z(r)))(n))(u(r)(o))}}})(r.pure(t)(n.empty))(o)}}}),tn=new x.Traversable(function(){return nn},function(){return N},function(n){return x.traverse(tn)(n)(u.identity(u.categoryFn))},function(n){var r=v.traverseWithIndex(en)(n);return function(n){return r(l.const(n))}}),un=function(e){return function(t){var u,i=(u=function(n){return function(t){return function(u){return e(t)(u)?S.poke(t)(u)(n):r.pure(o.applicativeST)(n)}}},function(){var n=S.new();return Q(o.monadST)(u)(n)(t)()});return n.runST(i)}},on=function(n){return un(function(r){return l.const(n(r))})},cn=function(n){return un(l.const(n))},fn=function(n){return new c.Eq(function(r){return function(e){return U(n)(r)(e)&&U(n)(e)(r)}})},an=function(n){return new j.Ord(function(){return fn(n.Eq0())},function(r){return function(e){return j.compare(j.ordArray(q.ordTuple(j.ordString)(n)))(O(r))(O(e))}})},ln=new c.Eq1(function(n){return c.eq(fn(n))}),dn=function(n){return I(S.delete(n))},pn=function(n){return function(r){return p.mapFlipped(b.functorMaybe)(C(n)(r))(function(e){return new q.Tuple(e,dn(n)(r))})}},sn=function(n){return function(r){return function(e){var t=n(C(r)(e));if(t instanceof b.Nothing)return dn(r)(e);if(t instanceof b.Just)return z(r)(t.value0)(e);throw new Error("Failed pattern match at Foreign.Object (line 208, column 15 - line 210, column 25): "+[t.constructor.name])}}},bn=function(n){return function(r){return function(e){return sn(b.maybe(b.Nothing.value)(n))(r)(e)}}};module.exports={isEmpty:E,singleton:k,insert:z,lookup:C,toUnfoldable:W,toAscUnfoldable:A,fromFoldable:G,fromFoldableWith:H,fromHomogeneous:J,delete:dn,pop:pn,member:K,alter:sn,update:bn,mapWithKey:M,filterWithKey:un,filterKeys:on,filter:cn,values:F,union:X,unions:Y,isSubmap:U,fold:Z,foldMap:$,foldM:Q,foldMaybe:P,thawST:D,freezeST:L,functorObject:N,functorWithIndexObject:B,foldableObject:nn,foldableWithIndexObject:rn,traversableObject:tn,traversableWithIndexObject:en,eqObject:fn,eq1Object:ln,ordObject:an,showObject:_,semigroupObject:R,monoidObject:V,empty:n.empty,size:n.size,keys:n.keys,all:n.all,runST:n.runST,toArrayWithKey:n.toArrayWithKey};
+},{"./foreign.js":"cO3i","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad.ST.Internal/index.js":"Sedc","../Data.Array/index.js":"4t4C","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.Function.Uncurried/index.js":"TowT","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Foreign.Object.ST/index.js":"fXGJ","../Unsafe.Coerce/index.js":"ETUV"}],"hJ/N":[function(require,module,exports) {
+"use strict";exports.copyRecord=function(n){var r={};for(var e in n)({}).hasOwnProperty.call(n,e)&&(r[e]=n[e]);return r},exports.unsafeInsert=function(n){return function(r){return function(e){return e[n]=r,e}}},exports.unsafeModify=function(n){return function(r){return function(e){return e[n]=r(e[n]),e}}},exports.unsafeDelete=function(n){return function(r){return delete r[n],r}},exports.unsafeRename=function(n){return function(r){return function(e){return e[r]=e[n],delete e[n],e}}};
+},{}],"VeY4":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Control.Category/index.js"),e=require("../Control.Semigroupoid/index.js"),u=require("../Data.Symbol/index.js"),t=require("../Record.Unsafe.Union/index.js"),o=require("../Unsafe.Coerce/index.js"),i=function(n){return n},f=function(n){return function(n){return function(r){return t.unsafeUnionFn(r,n)}}},c=e.semigroupoidFn,s=function(r){return function(e){return function(t){return function(t){return function(t){return function(t){return function(t){return function(o){return function(i){return n.unsafeRename(u.reflectSymbol(r)(t))(u.reflectSymbol(e)(o))(i)}}}}}}}}},l=function(n){return o.unsafeCoerce},a=function(r){return function(r){return function(r){return function(e){return function(t){return function(o){return n.unsafeModify(u.reflectSymbol(r)(e))(t)(o)}}}}}},d=function(n){return function(n){return function(n){return function(r){return t.unsafeUnionFn(r,n)}}}},m=function(r){return function(r){return function(r){return function(e){return function(t){return function(o){return n.unsafeInsert(u.reflectSymbol(r)(e))(t)(o)}}}}}},y=function(n){return function(n){return function(n){return function(r){return t.unsafeUnionFn(n,r)}}}},b=function(r){return function(e){return function(e){return function(e){return function(t){return n.unsafeDelete(u.reflectSymbol(r)(e))(t)}}}}},g=r.categoryFn,j=function(r){return function(e){return r(n.copyRecord(e))}};module.exports={build:j,insert:m,modify:a,delete:b,rename:s,merge:d,union:f,disjointUnion:y,nub:l,semigroupoidBuilder:c,categoryBuilder:g};
+},{"./foreign.js":"hJ/N","../Control.Category/index.js":"IAi2","../Control.Semigroupoid/index.js":"/riR","../Data.Symbol/index.js":"4oJQ","../Record.Unsafe.Union/index.js":"WmUk","../Unsafe.Coerce/index.js":"ETUV"}],"ZOFT":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),e=require("../Control.Bind/index.js"),u=require("../Control.Monad/index.js"),t=require("../Data.BooleanAlgebra/index.js"),o=require("../Data.Bounded/index.js"),i=require("../Data.CommutativeRing/index.js"),a=require("../Data.Eq/index.js"),c=require("../Data.Functor/index.js"),f=require("../Data.HeytingAlgebra/index.js"),l=require("../Data.Ord/index.js"),v=require("../Data.Ordering/index.js"),x=require("../Data.Ring/index.js"),d=require("../Data.Semigroup/index.js"),y=require("../Data.Semiring/index.js"),g=require("../Data.Show/index.js"),w=function(){function n(){}return n.value=new n,n}(),P=function(){function n(){}return n.value=new n,n}(),s=function(){function n(){}return n.value=new n,n}(),m=new g.Show(function(n){return"Proxy3"}),b=new g.Show(function(n){return"Proxy2"}),q=new g.Show(function(n){return"Proxy"}),p=new y.Semiring(function(n){return function(n){return w.value}},function(n){return function(n){return w.value}},w.value,w.value),A=new y.Semiring(function(n){return function(n){return P.value}},function(n){return function(n){return P.value}},P.value,P.value),j=new y.Semiring(function(n){return function(n){return s.value}},function(n){return function(n){return s.value}},s.value,s.value),D=new d.Semigroup(function(n){return function(n){return w.value}}),S=new d.Semigroup(function(n){return function(n){return P.value}}),R=new d.Semigroup(function(n){return function(n){return s.value}}),h=new x.Ring(function(){return p},function(n){return function(n){return w.value}}),B=new x.Ring(function(){return A},function(n){return function(n){return P.value}}),C=new x.Ring(function(){return j},function(n){return function(n){return s.value}}),E=new f.HeytingAlgebra(function(n){return function(n){return w.value}},function(n){return function(n){return w.value}},w.value,function(n){return function(n){return w.value}},function(n){return w.value},w.value),O=new f.HeytingAlgebra(function(n){return function(n){return P.value}},function(n){return function(n){return P.value}},P.value,function(n){return function(n){return P.value}},function(n){return P.value},P.value),H=new f.HeytingAlgebra(function(n){return function(n){return s.value}},function(n){return function(n){return s.value}},s.value,function(n){return function(n){return s.value}},function(n){return s.value},s.value),Q=new c.Functor(function(n){return function(n){return s.value}}),F=new a.Eq(function(n){return function(n){return!0}}),M=new l.Ord(function(){return F},function(n){return function(n){return v.EQ.value}}),k=new a.Eq(function(n){return function(n){return!0}}),z=new l.Ord(function(){return k},function(n){return function(n){return v.EQ.value}}),G=new a.Eq(function(n){return function(n){return!0}}),I=new l.Ord(function(){return G},function(n){return function(n){return v.EQ.value}}),J=new e.Discard(function(n){return e.bind(n)}),K=new e.Discard(function(n){return e.bind(n)}),L=new e.Discard(function(n){return e.bind(n)}),N=new i.CommutativeRing(function(){return h}),T=new i.CommutativeRing(function(){return B}),U=new i.CommutativeRing(function(){return C}),V=new o.Bounded(function(){return M},w.value,w.value),W=new o.Bounded(function(){return z},P.value,P.value),X=new o.Bounded(function(){return I},s.value,s.value),Y=new t.BooleanAlgebra(function(){return E}),Z=new t.BooleanAlgebra(function(){return O}),$=new t.BooleanAlgebra(function(){return H}),_=new r.Apply(function(){return Q},function(n){return function(n){return s.value}}),nn=new e.Bind(function(){return _},function(n){return function(n){return s.value}}),rn=new n.Applicative(function(){return _},function(n){return s.value}),en=new u.Monad(function(){return rn},function(){return nn});module.exports={Proxy:s,Proxy2:P,Proxy3:w,eqProxy:G,functorProxy:Q,ordProxy:I,applicativeProxy:rn,applyProxy:_,bindProxy:nn,booleanAlgebraProxy:$,boundedProxy:X,commutativeRingProxy:U,discardProxy:L,heytingAlgebraProxy:H,monadProxy:en,ringProxy:C,semigroupProxy:R,semiringProxy:j,showProxy:q,eqProxy2:k,ordProxy2:z,booleanAlgebraProxy2:Z,boundedProxy2:W,commutativeRingProxy2:T,discardProxy2:K,heytingAlgebraProxy2:O,ringProxy2:B,semigroupProxy2:S,semiringProxy2:A,showProxy2:b,eqProxy3:F,ordProxy3:M,booleanAlgebraProxy3:Y,boundedProxy3:V,commutativeRingProxy3:N,discardProxy3:J,heytingAlgebraProxy3:E,ringProxy3:h,semigroupProxy3:D,semiringProxy3:p,showProxy3:m};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad/index.js":"U/Ix","../Data.BooleanAlgebra/index.js":"e7y+","../Data.Bounded/index.js":"kcUU","../Data.CommutativeRing/index.js":"60TQ","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.HeytingAlgebra/index.js":"paZe","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Ring/index.js":"E2qH","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7"}],"aDiV":[function(require,module,exports) {
+"use strict";var n=require("../Control.Alt/index.js"),e=require("../Control.Applicative/index.js"),t=require("../Control.Bind/index.js"),r=require("../Control.Category/index.js"),i=require("../Control.Monad.Except/index.js"),o=require("../Control.Monad.Except.Trans/index.js"),u=require("../Control.Semigroupoid/index.js"),c=require("../Data.Array/index.js"),d=require("../Data.Bifunctor/index.js"),a=require("../Data.Either/index.js"),s=require("../Data.Foldable/index.js"),f=require("../Data.Function/index.js"),p=require("../Data.Functor/index.js"),l=require("../Data.Generic.Rep/index.js"),m=require("../Data.Identity/index.js"),g=require("../Data.List/index.js"),E=require("../Data.List.Types/index.js"),x=require("../Data.Maybe/index.js"),y=require("../Data.Monoid/index.js"),w=require("../Data.Newtype/index.js"),v=require("../Data.Semigroup/index.js"),T=require("../Data.Show/index.js"),b=require("../Data.Symbol/index.js"),h=require("../Data.Traversable/index.js"),I=require("../Data.Unfoldable/index.js"),A=require("../Data.Unit/index.js"),F=require("../Data.Void/index.js"),D=require("../Foreign/index.js"),j=require("../Foreign.Generic.Internal/index.js"),q=require("../Foreign.Index/index.js"),S=require("../Foreign.NullOrUndefined/index.js"),N=require("../Foreign.Object/index.js"),O=require("../Record/index.js"),R=require("../Record.Builder/index.js"),C=require("../Type.Data.RowList/index.js"),L=require("../Type.Proxy/index.js"),P=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),W=function(n){this.encodeArgs=n},G=function(n){this.encodeOpts=n},U=function(n){this.decodeArgs=n},B=function(n){this.decodeOpts=n},K=function(n){this.countArgs=n},M=function(n){this.encodeWithOptions=n},J=function(n){this.encodeRecordWithOptions=n},z=function(n){this.encode=n},V=function(n){this.decodeWithOptions=n},k=function(n){this.decodeRecordWithOptions=n},H=function(n){this.decode=n},Q=new z(F.absurd),X=new H(function(n){return o.except(m.applicativeIdentity)(new a.Left(e.pure(E.applicativeNonEmptyList)(new D.ForeignError("Decode: void"))))}),Y=new z(function(n){return D.unsafeToForeign({})}),Z=new H(function(n){return e.pure(o.applicativeExceptT(m.monadIdentity))(A.unit)}),$=new z(D.unsafeToForeign),_=new H(D.readString),nn=new z(D.unsafeToForeign),en=new H(D.readNumber),tn=new z(D.unsafeToForeign),rn=new H(D.readInt),on=new W(function(n){return y.mempty(y.monoidFn(E.monoidList))}),un=new B(function(n){return function(n){return D.fail(new D.ForeignError("No constructors"))}}),cn=new U(function(n){return function(n){return function(t){return t instanceof E.Nil?e.pure(o.applicativeExceptT(m.monadIdentity))({result:l.NoArguments.value,rest:E.Nil.value,next:n}):D.fail(new D.ForeignError("Too many constructor arguments"))}}}),dn=new K(function(n){return new a.Left(l.NoArguments.value)}),an=new K(function(n){return new a.Right(1)}),sn=new z(r.identity(r.categoryFn)),fn=new H(e.pure(o.applicativeExceptT(m.monadIdentity))),pn=function(n){return n.encodeWithOptions},ln=function(n){return new W(function(e){return function(t){return g.singleton(pn(n)(e)(t))}})},mn=function(n){return n.encodeRecordWithOptions},gn=function(n){return function(n){return new M(function(e){var t=mn(n)(C.RLProxy.value)(e);return function(n){return D.unsafeToForeign(t(n))}})}},En=new J(function(n){return function(n){return function(n){return N.empty}}}),xn=function(n){return function(e){return function(t){return function(r){return new J(function(i){return function(i){return function(o){var u=mn(e)(C.RLProxy.value)(i)(o),c=b.reflectSymbol(t)(b.SProxy.value);return N.insert(i.fieldTransform(c))(pn(r)(i)(O.get(t)(n)(b.SProxy.value)(o)))(u)}}})}}}},yn=function(n){return n.encodeOpts},wn=new G(function(n){return function(e){return yn(wn)(n)(e)}}),vn=function(n){return function(e){return new G(function(t){return function(r){if(r instanceof l.Inl)return yn(n)({sumEncoding:t.sumEncoding,unwrapSingleConstructors:!1,unwrapSingleArguments:t.unwrapSingleArguments,fieldTransform:t.fieldTransform})(r.value0);if(r instanceof l.Inr)return yn(e)({sumEncoding:t.sumEncoding,unwrapSingleConstructors:!1,unwrapSingleArguments:t.unwrapSingleArguments,fieldTransform:t.fieldTransform})(r.value0);throw new Error("Failed pattern match at Foreign.Generic.Class (line 351, column 1 - line 355, column 85): "+[t.constructor.name,r.constructor.name])}})}},Tn=function(n){return n.encodeArgs},bn=function(n){return function(e){return new W(function(t){return function(r){return v.append(E.semigroupList)(Tn(n)(t)(r.value0))(Tn(e)(t)(r.value1))}})}},hn=function(n){return function(e){return new G(function(t){return function(r){var i,o,u=(i=g.toUnfoldable(I.unfoldableArray),o=Tn(e)(t),function(n){return 0===(e=i(o(n))).length?x.Nothing.value:1===e.length&&t.unwrapSingleArguments?new x.Just(e[0]):new x.Just(D.unsafeToForeign(e));var e}),c=b.reflectSymbol(n)(b.SProxy.value);return t.unwrapSingleConstructors?x.maybe(D.unsafeToForeign({}))(D.unsafeToForeign)(u(r)):D.unsafeToForeign(N.union(N.singleton(t.sumEncoding.value0.tagFieldName)(D.unsafeToForeign(t.sumEncoding.value0.constructorTagTransform(c))))(x.maybe(N.empty)(N.singleton(t.sumEncoding.value0.contentsFieldName))(u(r))))}})}},In=function(n){return n.encode},An=function(n){return new M(function(e){return In(n)})},Fn=function(n){return new z((e=In(n),t=w.unwrap(m.newtypeIdentity),function(n){return e(t(n))}));var e,t},Dn=function(n){return new z(x.maybe(S.null)(In(n)))},jn=function(n){return new z((e=N.mapWithKey(function(e){return In(n)}),function(n){return D.unsafeToForeign(e(n))}));var e},qn={sumEncoding:new P({tagFieldName:"tag",contentsFieldName:"contents",constructorTagTransform:r.identity(r.categoryFn)}),unwrapSingleConstructors:!1,unwrapSingleArguments:!0,fieldTransform:r.identity(r.categoryFn)},Sn=function(n){return function(e){return new z(pn(gn(n)(e))(qn))}},Nn=function(n){return n.decodeWithOptions},On=function(n){return new U(function(r){return function(u){return function(c){return c instanceof E.Cons?t.bind(o.bindExceptT(m.monadIdentity))(i.mapExcept(d.lmap(a.bifunctorEither)(p.map(E.functorNonEmptyList)(D.ErrorAtIndex.create(u))))(Nn(n)(r)(c.value0)))(function(n){return e.pure(o.applicativeExceptT(m.monadIdentity))({result:n,rest:c.value1,next:u+1|0})}):D.fail(new D.ForeignError("Not enough constructor arguments"))}}})},Rn=function(n){return n.decodeRecordWithOptions},Cn=function(n){return function(n){return new V(function(e){return p.map(p.functorFn)(p.map(o.functorExceptT(m.functorIdentity))(f.flip(R.build)({})))(Rn(n)(C.RLProxy.value)(e))})}},Ln=function(n){return function(e){return new H(Nn(Cn(n)(e))(qn))}},Pn=new k(function(n){return function(n){return function(n){return e.pure(o.applicativeExceptT(m.monadIdentity))(r.identity(R.categoryBuilder))}}}),Wn=function(n){return function(r){return function(c){return function(s){return function(f){return new k(function(l){return function(l){return function(g){return t.bind(o.bindExceptT(m.monadIdentity))(Rn(r)(C.RLProxy.value)(l)(g))(function(r){var x=b.reflectSymbol(c)(b.SProxy.value),y=l.fieldTransform(x);return t.bind(o.bindExceptT(m.monadIdentity))(q.index(q.indexString)(g)(y))(function(g){return t.bind(o.bindExceptT(m.monadIdentity))(i.mapExcept(d.lmap(a.bifunctorEither)(p.map(E.functorNonEmptyList)(D.ErrorAtProperty.create(y))))(Nn(s)(l)(g)))(function(t){return e.pure(o.applicativeExceptT(m.monadIdentity))(u.composeFlipped(R.semigroupoidBuilder)(r)(R.insert(n)(f)(c)(b.SProxy.value)(t)))})})})}}})}}}}},Gn=function(n){return n.decodeOpts},Un=function(e){return function(t){return new B(function(r){return function(i){var u={unwrapSingleConstructors:!1,fieldTransform:r.fieldTransform,sumEncoding:r.sumEncoding,unwrapSingleArguments:r.unwrapSingleArguments};return n.alt(o.altExceptT(E.semigroupNonEmptyList)(m.monadIdentity))(p.map(o.functorExceptT(m.functorIdentity))(l.Inl.create)(Gn(e)(u)(i)))(p.map(o.functorExceptT(m.functorIdentity))(l.Inr.create)(Gn(t)(u)(i)))}})}},Bn=function(n){return n.decodeArgs},Kn=function(n){return function(r){return new U(function(i){return function(u){return function(c){return t.bind(o.bindExceptT(m.monadIdentity))(Bn(n)(i)(u)(c))(function(n){return t.bind(o.bindExceptT(m.monadIdentity))(Bn(r)(i)(n.next)(n.rest))(function(t){return e.pure(o.applicativeExceptT(m.monadIdentity))({result:new l.Product(n.result,t.result),rest:t.rest,next:t.next})})})}}})}},Mn=function(n){return n.decode},Jn=function(n){return new V(function(e){return Mn(n)})},zn=function(n){return new H((e=p.map(o.functorExceptT(m.functorIdentity))(m.Identity),t=Mn(n),function(n){return e(t(n))}));var e,t},Vn=function(n){return new H(S.readNullOrUndefined(Mn(n)))},kn=function(n){return new H(t.composeKleisliFlipped(o.bindExceptT(m.monadIdentity))((e=h.sequence(N.traversableObject)(o.applicativeExceptT(m.monadIdentity)),r=N.mapWithKey(function(e){return Mn(n)}),function(n){return e(r(n))}))(j.readObject));var e,r},Hn=function(n){return n.countArgs},Qn=function(n){return function(e){return new K(function(t){var r=Hn(e)(L.Proxy.value),i=Hn(n)(L.Proxy.value);if(i instanceof a.Left&&r instanceof a.Left)return new a.Left(new l.Product(i.value0,r.value0));if(i instanceof a.Left&&r instanceof a.Right)return new a.Right(r.value0);if(i instanceof a.Right&&r instanceof a.Left)return new a.Right(i.value0);if(i instanceof a.Right&&r instanceof a.Right)return new a.Right(i.value0+r.value0|0);throw new Error("Failed pattern match at Foreign.Generic.Class (line 400, column 5 - line 404, column 40): "+[i.constructor.name,r.constructor.name])})}},Xn=function(n){return function(r){return function(u){return new B(function(c){return function(f){var x=Hn(u)(L.Proxy.value),y=function(n){if(x instanceof a.Left)return e.pure(o.applicativeExceptT(m.monadIdentity))(x.value0);if(x instanceof a.Right&&1===x.value0&&c.unwrapSingleArguments)return t.bind(o.bindExceptT(m.monadIdentity))(Bn(r)(c)(0)(g.singleton(n)))(function(n){return t.discard(t.discardUnit)(o.bindExceptT(m.monadIdentity))(e.unless(o.applicativeExceptT(m.monadIdentity))(g.null(n.rest))(D.fail(new D.ForeignError("Expected a single argument"))))(function(){return e.pure(o.applicativeExceptT(m.monadIdentity))(n.result)})});if(x instanceof a.Right)return t.bind(o.bindExceptT(m.monadIdentity))(D.readArray(n))(function(n){return t.bind(o.bindExceptT(m.monadIdentity))(Bn(r)(c)(0)(g.fromFoldable(s.foldableArray)(n)))(function(n){return t.discard(t.discardUnit)(o.bindExceptT(m.monadIdentity))(e.unless(o.applicativeExceptT(m.monadIdentity))(g.null(n.rest))(D.fail(new D.ForeignError("Expected "+T.show(T.showInt)(x.value0)+" constructor arguments"))))(function(){return e.pure(o.applicativeExceptT(m.monadIdentity))(n.result)})})});throw new Error("Failed pattern match at Foreign.Generic.Class (line 307, column 9 - line 319, column 24): "+[x.constructor.name])},w=b.reflectSymbol(n)(b.SProxy.value);return c.unwrapSingleConstructors?p.map(o.functorExceptT(m.functorIdentity))(l.Constructor)(y(f)):t.bind(o.bindExceptT(m.monadIdentity))(i.mapExcept(d.lmap(a.bifunctorEither)(p.map(E.functorNonEmptyList)(D.ErrorAtProperty.create(c.sumEncoding.value0.tagFieldName))))(t.bind(o.bindExceptT(m.monadIdentity))(t.bind(o.bindExceptT(m.monadIdentity))(q.index(q.indexString)(f)(c.sumEncoding.value0.tagFieldName))(D.readString))(function(n){var r=c.sumEncoding.value0.constructorTagTransform(w);return t.discard(t.discardUnit)(o.bindExceptT(m.monadIdentity))(e.unless(o.applicativeExceptT(m.monadIdentity))(n===r)(D.fail(new D.ForeignError("Expected "+T.show(T.showString)(r)+" tag"))))(function(){return e.pure(o.applicativeExceptT(m.monadIdentity))(n)})})))(function(n){return t.bind(o.bindExceptT(m.monadIdentity))(i.mapExcept(d.lmap(a.bifunctorEither)(p.map(E.functorNonEmptyList)(D.ErrorAtProperty.create(c.sumEncoding.value0.contentsFieldName))))(t.bind(o.bindExceptT(m.monadIdentity))(q.index(q.indexString)(f)(c.sumEncoding.value0.contentsFieldName))(y)))(function(n){return e.pure(o.applicativeExceptT(m.monadIdentity))(n)})})}})}}},Yn=new z(D.unsafeToForeign),Zn=new H(D.readChar),$n=new z(D.unsafeToForeign),_n=new H(D.readBoolean),ne=function(n){return new z((e=p.map(p.functorArray)(In(n)),function(n){return D.unsafeToForeign(e(n))}));var e},ee=function(n){return new H((e=function(e){return function(t){return i.mapExcept(d.lmap(a.bifunctorEither)(p.map(E.functorNonEmptyList)(D.ErrorAtIndex.create(e))))(Mn(n)(t))}},t.composeKleisli(o.bindExceptT(m.monadIdentity))(D.readArray)(function(n){return h.sequence(h.traversableArray)(o.applicativeExceptT(m.monadIdentity))(c.zipWith(e)(c.range(0)(c.length(n)))(n))})));var e};module.exports={countArgs:Hn,decode:Mn,decodeArgs:Bn,decodeOpts:Gn,decodeRecordWithOptions:Rn,decodeWithOptions:Nn,encode:In,encodeArgs:Tn,encodeOpts:yn,encodeRecordWithOptions:mn,encodeWithOptions:pn,TaggedObject:P,defaultOptions:qn,Decode:H,Encode:z,DecodeWithOptions:V,EncodeWithOptions:M,DecodeRecord:k,EncodeRecord:J,GenericDecode:B,GenericEncode:G,GenericDecodeArgs:U,GenericEncodeArgs:W,GenericCountArgs:K,voidDecode:X,unitDecode:Z,foreignDecode:fn,stringDecode:_,charDecode:Zn,booleanDecode:_n,numberDecode:en,intDecode:rn,identityDecode:zn,arrayDecode:ee,maybeDecode:Vn,objectDecode:kn,recordDecode:Ln,voidEncode:Q,unitEncode:Y,foreignEncode:sn,stringEncode:$,charEncode:Yn,booleanEncode:$n,numberEncode:nn,intEncode:tn,identityEncode:Fn,arrayEncode:ne,maybeEncode:Dn,objectEncode:jn,recordEncode:Sn,decodeWithOptionsRecord:Cn,decodeWithOptionsOther:Jn,encodeWithOptionsRecord:gn,encodeWithOptionsOther:An,decodeRecordNil:Pn,encodeRecordNil:En,decodeRecordCons:Wn,encodeRecordCons:xn,genericDecodeNoConstructors:un,genericEncodeNoConstructors:wn,genericDecodeConstructor:Xn,genericEncodeConstructor:hn,genericDecodeSum:Un,genericEncodeSum:vn,genericDecodeArgsNoArguments:cn,genericEncodeArgsNoArguments:on,genericDecodeArgsArgument:On,genericEncodeArgsArgument:ln,genericDecodeArgsProduct:Kn,genericEncodeArgsProduct:bn,genericCountArgsNoArguments:dn,genericCountArgsArgument:an,genericCountArgsProduct:Qn};
+},{"../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad.Except/index.js":"Fye2","../Control.Monad.Except.Trans/index.js":"gr8B","../Control.Semigroupoid/index.js":"/riR","../Data.Array/index.js":"4t4C","../Data.Bifunctor/index.js":"e2Wc","../Data.Either/index.js":"B2JL","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Generic.Rep/index.js":"AuzG","../Data.Identity/index.js":"2OKT","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Symbol/index.js":"4oJQ","../Data.Traversable/index.js":"n7EE","../Data.Unfoldable/index.js":"77+Z","../Data.Unit/index.js":"NhVk","../Data.Void/index.js":"bncE","../Foreign/index.js":"pu1p","../Foreign.Generic.Internal/index.js":"71qG","../Foreign.Index/index.js":"Ryy1","../Foreign.NullOrUndefined/index.js":"k5yP","../Foreign.Object/index.js":"jsiz","../Record/index.js":"0gG4","../Record.Builder/index.js":"VeY4","../Type.Data.RowList/index.js":"XaXP","../Type.Proxy/index.js":"ZOFT"}],"HhmG":[function(require,module,exports) {
+"use strict";var e=require("../Data.CommutativeRing/index.js"),n=require("../Data.DivisionRing/index.js"),r=require("../Data.Eq/index.js"),t=require("../Data.EuclideanRing/index.js"),i=require("../Data.Lens.Getter/index.js"),u=require("../Data.Lens.Iso/index.js"),o=require("../Data.Lens.Iso.Newtype/index.js"),a=require("../Data.Maybe/index.js"),c=require("../Data.Newtype/index.js"),d=require("../Data.Number.Format/index.js"),s=require("../Data.Ord/index.js"),p=require("../Data.Ring/index.js"),w=require("../Data.Semiring/index.js"),f=require("../Data.Show/index.js"),g=require("../Data.String.CodeUnits/index.js"),m=require("../Data.String.Common/index.js"),h=require("../Data.String.Pattern/index.js"),x=require("../Foreign.Generic.Class/index.js"),q=require("../Math/index.js"),l=function(e){return e},D=function(e){return e},N=function(e){return e},j=new f.Show(function(e){return e}),B=new f.Show(function(e){return d.toStringWith(d.fixed(0))(e)+" Bp"}),y=w.semiringNumber,v=p.ringNumber,C=s.ordNumber,I=new c.Newtype(function(e){return e},l),S=new c.Newtype(function(e){return e},D),b=function(e){var n=m.toLower(c.unwrap(S)(e)),r=g.stripPrefix(c.wrap(h.newtypePattern)("chr"))(n);if(r instanceof a.Nothing)return c.wrap(S)("chr"+n);if(r instanceof a.Just)return c.wrap(S)(r.value0);throw new Error("Failed pattern match at Genetics.Browser.Types (line 54, column 6 - line 56, column 27): "+[r.constructor.name])},R=new c.Newtype(function(e){return e},N),L=t.euclideanRingNumber,_=new r.Eq(function(e){return function(n){return b(e)===b(n)}}),E=new s.Ord(function(){return _},function(e){return function(n){var r=b(e),t=b(n);return s.compare(s.ordString)(r)(t)}}),P=r.eqNumber,F=x.stringEncode,G=x.numberEncode,W=n.divisionringNumber,J=x.stringDecode,M=x.numberDecode,O=e.commutativeRingNumber,T=function(e){var n=m.toLower(e),r=g.stripPrefix(c.wrap(h.newtypePattern)("chr"))(n);if(r instanceof a.Nothing)return c.wrap(S)("chr"+n);if(r instanceof a.Just)return c.wrap(S)(r.value0);throw new Error("Failed pattern match at Genetics.Browser.Types (line 47, column 6 - line 49, column 28): "+[r.constructor.name])},U=function(e){return i.to(d.toStringWith(d.precision(e)))},k=function(e){return i.to(d.toStringWith(d.fixed(e)))},z=function(e){return i.to(d.toStringWith(d.exponential(e)))},A=function(e){return u.iso(function(e){return c.wrap(I)(-q.log(e)/q.ln10)})(function(e){return q.pow(10)(-e)})(e)},H=function(e){return o._Newtype(S)(S)(e)},K=function(e){return o._Newtype(R)(R)(e)};module.exports={Bp:N,_Bp:K,ChrId:D,chrId:T,validChrId:b,_ChrId:H,NegLog10:l,_NegLog10:A,_prec:U,_fixed:k,_exp:z,newtypeBp:R,eqBp:P,ordBp:C,semiringBp:y,ringBp:v,divisionRingBp:W,euclideanRingBp:L,commutativeRingBp:O,encodeBp:G,decodeBp:M,showBp:B,newtypeChrId:S,eqChrId:_,ordChrId:E,encodeChrId:F,decodeChrId:J,showChrId:j,newtypeNegLog10:I};
+},{"../Data.CommutativeRing/index.js":"60TQ","../Data.DivisionRing/index.js":"xYq2","../Data.Eq/index.js":"Pq4F","../Data.EuclideanRing/index.js":"2IRB","../Data.Lens.Getter/index.js":"OPOX","../Data.Lens.Iso/index.js":"fFCp","../Data.Lens.Iso.Newtype/index.js":"CiFJ","../Data.Maybe/index.js":"5mN7","../Data.Newtype/index.js":"lz8k","../Data.Number.Format/index.js":"VX77","../Data.Ord/index.js":"r4Vb","../Data.Ring/index.js":"E2qH","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.String.CodeUnits/index.js":"6c6X","../Data.String.Common/index.js":"OSrc","../Data.String.Pattern/index.js":"nKWe","../Foreign.Generic.Class/index.js":"aDiV","../Math/index.js":"Rpaz"}],"7rcn":[function(require,module,exports) {
+"use strict";exports.unsafeStringify=function(n){return JSON.stringify(n)},exports.unsafeToFixed=function(n){return function(e){return e.toFixed(n)}},exports.unsafeToExponential=function(n){return function(e){return e.toExponential(n)}},exports.unsafeToPrecision=function(n){return function(e){return e.toPrecision(n)}},exports.unsafeDecodeURI=decodeURI,exports.unsafeEncodeURI=encodeURI,exports.unsafeDecodeURIComponent=decodeURIComponent,exports.unsafeEncodeURIComponent=encodeURIComponent;
+},{}],"qSZP":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js");module.exports={unsafeStringify:e.unsafeStringify,unsafeToFixed:e.unsafeToFixed,unsafeToExponential:e.unsafeToExponential,unsafeToPrecision:e.unsafeToPrecision,unsafeDecodeURI:e.unsafeDecodeURI,unsafeEncodeURI:e.unsafeEncodeURI,unsafeDecodeURIComponent:e.unsafeDecodeURIComponent,unsafeEncodeURIComponent:e.unsafeEncodeURIComponent};
+},{"./foreign.js":"7rcn"}],"7bYH":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),e=require("../Control.Bind/index.js"),r=require("../Control.Monad.Except.Trans/index.js"),i=require("../Data.Array/index.js"),t=require("../Data.BigInt/index.js"),u=require("../Data.Boolean/index.js"),a=require("../Data.Either/index.js"),o=require("../Data.Eq/index.js"),d=require("../Data.EuclideanRing/index.js"),c=require("../Data.Foldable/index.js"),l=require("../Data.Functor/index.js"),s=require("../Data.Generic.Rep/index.js"),f=require("../Data.Identity/index.js"),p=require("../Data.Lens.Getter/index.js"),m=require("../Data.Lens.Internal.Forget/index.js"),g=require("../Data.Lens.Iso.Newtype/index.js"),v=require("../Data.List.Types/index.js"),x=require("../Data.Map.Internal/index.js"),w=require("../Data.Maybe/index.js"),b=require("../Data.Monoid.Additive/index.js"),y=require("../Data.Newtype/index.js"),I=require("../Data.Ord/index.js"),q=require("../Data.Pair/index.js"),h=require("../Data.Ring/index.js"),j=require("../Data.Semiring/index.js"),B=require("../Data.Traversable/index.js"),T=require("../Data.Tuple/index.js"),S=require("../Foreign/index.js"),P=require("../Foreign.Index/index.js"),D=require("../Genetics.Browser.Types/index.js"),F=require("../Global.Unsafe/index.js"),E=function(n){return n},N=function(n){return n},z=function(n){return n},C=function(n){return n},A=function(n){return t.toNumber(n.coordWidth)/n.pixelWidth},W=F.unsafeStringify,M=function(n){return function(e){return t.toNumber(e)*(n.pixelWidth/t.toNumber(n.coordWidth))}},R=function(n){return function(e){return function(r){var i=new q.Pair(I.min(n)(e.value0)(r.value0),I.min(n)(e.value1)(r.value1)),t=new q.Pair(I.max(n)(e.value0)(r.value0),I.max(n)(e.value1)(r.value1));return I.greaterThanOrEq(n)(i.value1)(t.value0)}}},G=function(n){return function(e){return h.sub(n)(e.value1)(e.value0)}},O=function(n){return function(e){var r=I.max(I.ordNumber)(0)(e),i=l.map(q.functorPair)(t.toNumber)(n),u=(G(h.ringNumber)(i)*r-G(h.ringNumber)(i))/2,a=l.map(q.functorPair)(t.fromNumber)(new q.Pair(i.value0-u,i.value1+u));return l.map(q.functorPair)(w.fromJust())(a)}},L=function(n){return function(e){var r=G(t.ringBigInt)(e),i=d.div(t.euclideanRingBigInt)(h.sub(t.ringBigInt)(n)(r))(t.fromInt(2));return new q.Pair(h.sub(t.ringBigInt)(e.value0)(i),j.add(t.semiringBigInt)(e.value1)(i))}},V=function(n){return function(e){var r=l.map(l.functorFn)(w.fromJust())(t.fromNumber)(e*t.toNumber(G(t.ringBigInt)(n)));return l.map(q.functorPair)(function(n){return j.add(t.semiringBigInt)(n)(r)})(n)}},_=function(n){return function(e){var r=G(t.ringBigInt)(e);return{pixelWidth:n.width,coordWidth:r}}},J=function(n){return function(e){return function(r){return function(i){return d.div(n)(h.sub(n.CommutativeRing0().Ring0())(i)(e))(h.sub(n.CommutativeRing0().Ring0())(r)(e))}}}},U=new y.Newtype(function(n){return n},N),k=new y.Newtype(function(n){return n},C),H=function(n){return function(e){return function(r){return function(i){return j.add(n.Semiring0())(j.mul(n.Semiring0())(h.sub(n)(j.one(n.Semiring0()))(i))(e))(j.mul(n.Semiring0())(i)(r))}}}},K=new s.Generic(function(n){return n},function(n){return n}),Q=new l.Functor(function(n){return function(e){return C(l.map(x.functorMap)(l.map(q.functorPair)(n))(e))}}),X=new o.Eq(function(n){return function(e){return o.eq(t.eqBigInt)(n.coordWidth)(e.coordWidth)&&n.pixelWidth===e.pixelWidth}}),Y=new y.Newtype(function(n){return n},z),Z=function(n){return function(e){return function(r){var t,u,a=i.unzip(r);return C(x.fromFoldable(n)(c.foldableArray)(i.zip(a.value0)((t=a.value1,u=B.scanl(B.traversableArray)(function(n){return function(r){return j.add(e)(n)(r)}})(j.zero(e))(t),i.zipWith(q.Pair.create)(i.cons(j.zero(e))(u))(u)))))}}},$=function(i){return e.bind(r.bindExceptT(f.monadIdentity))(S.readArray(i))(function(i){return e.bind(r.bindExceptT(f.monadIdentity))(B.traverse(B.traversableArray)(r.applicativeExceptT(f.monadIdentity))(function(i){return e.bind(r.bindExceptT(f.monadIdentity))(l.map(r.functorExceptT(f.functorIdentity))(y.wrap(D.newtypeChrId))(e.bindFlipped(r.bindExceptT(f.monadIdentity))(S.readString)(P.ix(P.indexableForeign)(P.indexString)(i)("chr"))))(function(u){return e.bind(r.bindExceptT(f.monadIdentity))(e.bindFlipped(r.bindExceptT(f.monadIdentity))((o=r.except(f.applicativeIdentity),d=a.note(n.pure(v.applicativeNonEmptyList)(new S.ForeignError("error parsing size for chr"))),function(n){return o(d(t.fromString(n)))}))(e.bindFlipped(r.bindExceptT(f.monadIdentity))(S.readString)(P.ix(P.indexableForeign)(P.indexString)(i)("size"))))(function(e){return n.pure(r.applicativeExceptT(f.monadIdentity))(new T.Tuple(u,e))});var o,d})})(i))(function(e){return n.pure(r.applicativeExceptT(f.monadIdentity))(Z(D.ordChrId)(t.semiringBigInt)(e))})})},nn=function(n){return function(e){return function(r){return new q.Pair(h.sub(n)(r.value0)(e),j.add(n.Semiring0())(r.value1)(e))}}},en=function(n){return g._Newtype(k)(k)(n.Profunctor0())},rn=function(n){var e=en(m.strongForget),r=p.to(y.alaF(l.functorFn)(l.functorFn)(y.newtypeAdditive)(y.newtypeAdditive)(b.Additive)(c.foldMap(x.foldableMap)(b.monoidAdditive(n.Semiring0())))(G(n)));return function(n){return e(r(n))}},tn=function(n){return function(e){return function(r){var i=p.viewOn(n)(rn(t.ringBigInt)),u=y.unwrap(Y)(r),a=h.sub(t.ringBigInt)(u.value1)(u.value0),o=function(){var n=I.greaterThan(t.ordBigInt)(u.value1)(i),e=I.lessThan(t.ordBigInt)(u.value0)(j.zero(t.semiringBigInt));if(e&&!n)return new q.Pair(j.zero(t.semiringBigInt),a);if(!e&&n)return new q.Pair(h.sub(t.ringBigInt)(i)(a),i);if(e&&n)return new q.Pair(j.zero(t.semiringBigInt),i);if(!e&&!n)return new q.Pair(u.value0,u.value1);throw new Error("Failed pattern match at Genetics.Browser.Coordinates (line 207, column 22 - line 211, column 39): "+[e.constructor.name,n.constructor.name])}();return L(I.min(t.ordBigInt)(i)(I.max(t.ordBigInt)(a)(e)))(new q.Pair(o.value0,o.value1))}}},un=function(n){return function(e){return l.map(x.functorMap)(l.map(q.functorPair)(M(e)))(p.viewOn(n)(en(m.strongForget)))}},an=function(n){return function(e){return function(r){return function(i){return x.filter(n)(function(n){if(I.lessThan(e)(n.value0)(i.value0)&&I.greaterThan(e)(n.value1)(i.value1))return!0;if(I.lessThan(e)(n.value0)(i.value0)&&I.lessThan(e)(n.value1)(i.value0))return!1;if(I.greaterThan(e)(n.value0)(i.value1)&&I.greaterThan(e)(n.value1)(i.value1))return!1;if(u.otherwise)return!0;throw new Error("Failed pattern match at Genetics.Browser.Coordinates (line 167, column 9 - line 171, column 29): "+[n.constructor.name])})(p.viewOn(r)(en(m.strongForget)))}}}},on=function(n){return function(e){return function(r){return function(i){return l.map(x.functorMap)(l.map(q.functorPair)(M(i)))(an(n)(t.ordBigInt)(e)(y.unwrap(Y)(r)))}}}};module.exports={CoordSysView:z,pairSize:G,_TotalSize:rn,normalizeView:tn,aroundPair:nn,normalize:J,scalePairBy:O,scaledSegments:un,"scaledSegments'":on,translatePairBy:V,viewScale:_,xPerPixel:A,_Segments:en,pairsOverlap:R,coordSys:Z,parseCoordSys:$,scaleToScreen:M,newtypeNormalized:U,functorCoordSys:Q,newtypeCoordSys:k,genericCoordSys:K,eqViewScale:X,coordsysviewNewtype:Y};
+},{"../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Monad.Except.Trans/index.js":"gr8B","../Data.Array/index.js":"4t4C","../Data.BigInt/index.js":"Zx+T","../Data.Boolean/index.js":"ObQr","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.EuclideanRing/index.js":"2IRB","../Data.Foldable/index.js":"eVDl","../Data.Functor/index.js":"+0AE","../Data.Generic.Rep/index.js":"AuzG","../Data.Identity/index.js":"2OKT","../Data.Lens.Getter/index.js":"OPOX","../Data.Lens.Internal.Forget/index.js":"mj9z","../Data.Lens.Iso.Newtype/index.js":"CiFJ","../Data.List.Types/index.js":"Xxuc","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Monoid.Additive/index.js":"fHyj","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Pair/index.js":"PpsX","../Data.Ring/index.js":"E2qH","../Data.Semiring/index.js":"11NF","../Data.Traversable/index.js":"n7EE","../Data.Tuple/index.js":"II/O","../Foreign/index.js":"pu1p","../Foreign.Index/index.js":"Ryy1","../Genetics.Browser.Types/index.js":"HhmG","../Global.Unsafe/index.js":"qSZP"}],"BQGe":[function(require,module,exports) {
+exports._parseJSON=JSON.parse,exports._undefined=void 0;
+},{}],"DqNI":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),n=require("../Control.Alt/index.js"),r=require("../Control.Applicative/index.js"),t=require("../Control.Apply/index.js"),i=require("../Control.Bind/index.js"),u=require("../Control.Category/index.js"),o=require("../Control.Monad.Except/index.js"),a=require("../Control.Monad.Except.Trans/index.js"),c=require("../Control.Semigroupoid/index.js"),f=require("../Data.Bifunctor/index.js"),d=require("../Data.Boolean/index.js"),l=require("../Data.Either/index.js"),p=require("../Data.Function/index.js"),s=require("../Data.Functor/index.js"),m=require("../Data.Identity/index.js"),y=require("../Data.List.Types/index.js"),x=require("../Data.Maybe/index.js"),w=require("../Data.Nullable/index.js"),g=require("../Data.Semigroup/index.js"),F=require("../Data.Symbol/index.js"),v=require("../Data.Traversable/index.js"),b=require("../Data.TraversableWithIndex/index.js"),E=require("../Data.Variant/index.js"),I=require("../Effect.Exception/index.js"),T=require("../Effect.Uncurried/index.js"),h=require("../Effect.Unsafe/index.js"),j=require("../Foreign/index.js"),q=require("../Foreign.Index/index.js"),S=require("../Foreign.Object/index.js"),N=require("../Global.Unsafe/index.js"),L=require("../Partial.Unsafe/index.js"),P=require("../Record/index.js"),R=require("../Record.Builder/index.js"),D=require("../Type.Data.RowList/index.js"),O=function(e){this.writeVariantImpl=e},V=function(e){this.writeImplFields=e},C=function(e){this.writeImpl=e},W=function(e){this.readVariantImpl=e},A=function(e){this.getFields=e},B=function(e){this.readImpl=e},M=function(e){return e.writeVariantImpl},J=function(e){return e.writeImplFields},K=function(e){return e.writeImpl},U=function(e){var n=K(e);return function(e){return N.unsafeStringify(n(e))}},_=function(e){return function(e){return new C(function(n){return M(e)(D.RLProxy.value)(n)})}},G=new C(j.unsafeToForeign),k=function(e){return new C((n=S.mapWithKey(p.const(K(e))),function(e){return j.unsafeToForeign(n(e))}));var n},z=new C(j.unsafeToForeign),H=function(e){return new C((n=x.maybe(j.unsafeToForeign(w.toNullable(x.Nothing.value)))(K(e)),function(e){return n(w.toMaybe(e))}));var n},Q=new C(j.unsafeToForeign),X=new C(u.identity(u.categoryFn)),Y=new C(j.unsafeToForeign),Z=new C(j.unsafeToForeign),$=function(e){return new C(function(n){return j.unsafeToForeign(s.map(s.functorArray)(K(e))(n))})},ee=function(e){return K(e)},ne=e._undefined,re=function(e){return new C(x.maybe(ne)(K(e)))},te=function(e){return function(e){return new C(function(n){var r=J(e)(D.RLProxy.value)(n);return j.unsafeToForeign(R.build(r)({}))})}},ie=new W(function(e){return function(e){return j.fail(new j.ForeignError("Unable to match any variant member."))}}),ue=function(e){return e.readVariantImpl},oe=new B(j.readString),ae=new B(j.readNumber),ce=new B(j.readInt),fe=function(e){return e.readImpl},de=function(e){return new B((n=fe(e),function(e){return j.isNull(e)||j.isUndefined(e)?r.pure(a.applicativeExceptT(m.monadIdentity))(x.Nothing.value):s.map(a.functorExceptT(m.functorIdentity))(x.Just.create)(n(e))}));var n},le=function(e){return new B(function(n){return o.withExcept(s.map(y.functorNonEmptyList)(function(e){return e instanceof j.TypeMismatch?new j.TypeMismatch("Nullable "+e.value0,e.value1):e}))(i.bindFlipped(a.bindExceptT(m.monadIdentity))(s.map(s.functorFn)(s.map(a.functorExceptT(m.functorIdentity))(w.toNullable))(v.traverse(v.traversableMaybe)(a.applicativeExceptT(m.monadIdentity))(fe(e))))(j.readNull(n)))})},pe=function(e){return new B(i.composeKleisliFlipped(a.bindExceptT(m.monadIdentity))((n=v.sequence(S.traversableObject)(a.applicativeExceptT(m.monadIdentity)),t=S.mapWithKey(p.const(fe(e))),function(e){return n(t(e))}))(function(e){if("Object"===j.tagOf(e))return r.pure(a.applicativeExceptT(m.monadIdentity))(j.unsafeFromForeign(e));if(d.otherwise)return j.fail(new j.TypeMismatch("Object",j.tagOf(e)));throw new Error("Failed pattern match at Simple.JSON (line 188, column 7 - line 188, column 51): "+[e.constructor.name])}));var n,t},se=function(e){return function(e){return new B(function(n){return ue(e)(D.RLProxy.value)(n)})}},me=new B(r.pure(a.applicativeExceptT(m.monadIdentity))),ye=new A(function(e){return function(e){return r.pure(a.applicativeExceptT(m.monadIdentity))(u.identity(R.categoryBuilder))}}),xe=new B(j.readChar),we=new B(j.readBoolean),ge=function(e){return new B(i.composeKleisliFlipped(a.bindExceptT(m.monadIdentity))(b.traverseWithIndex(b.traversableWithIndexArray)(a.applicativeExceptT(m.monadIdentity))(function(n){return function(r){return o.withExcept(s.map(y.functorNonEmptyList)(j.ErrorAtIndex.create(n)))(fe(e)(r))}}))(j.readArray))},Fe=function(e){return fe(e)},ve=function(e){var n=fe(e);return function(e){return o.runExcept(n(e))}},be=function(e){var n=ve(e);return function(e){return n(j.unsafeToForeign(e))}},Ee=function(e){var n=ve(e);return function(e){return l.hush(n(e))}},Ie=function(){var n,t=f.lmap(l.bifunctorEither)((n=r.pure(y.applicativeNonEmptyList),function(e){return n(j.ForeignError.create(I.message(e)))})),i=T.runEffectFn1(e._parseJSON);return function(e){return a.ExceptT(m.Identity(t(h.unsafePerformEffect(I.try(i(e))))))}}(),Te=function(e){var n=i.composeKleisliFlipped(a.bindExceptT(m.monadIdentity))(fe(e))(Ie);return function(e){return o.runExcept(n(e))}},he=function(e){var n=Te(e);return function(e){return l.hush(n(e))}},je=function(e){return i.composeKleisliFlipped(a.bindExceptT(m.monadIdentity))(fe(e))(Ie)},qe=new O(function(e){return function(e){return L.unsafeCrashWith("Variant was not able to be writen row WriteForeign.")}}),Se=new V(function(e){return function(e){return u.identity(R.categoryBuilder)}}),Ne=function(e){return e.getFields},Le=function(e){return function(e){return new B(function(n){return s.map(a.functorExceptT(m.functorIdentity))(p.flip(R.build)({}))(Ne(e)(D.RLProxy.value)(n))})}},Pe=function(e){return function(n){return function(r){return function(t){return new O(function(i){return function(i){return E.on(r)(e)(F.SProxy.value)(function(r){return j.unsafeToForeign({type:F.reflectSymbol(e)(F.SProxy.value),value:K(n)(r)})})(M(t)(D.RLProxy.value))(i)}})}}}},Re=function(e){return function(n){return function(r){return function(t){return function(i){return function(u){return new V(function(o){return function(o){var a=J(r)(D.RLProxy.value)(o),f=K(n)(P.get(e)(t)(F.SProxy.value)(o));return c.compose(R.semigroupoidBuilder)(R.insert(u)(i)(e)(F.SProxy.value)(f))(a)}})}}}}}},De=function(e){return function(n){return function(r){if(n instanceof l.Left&&r instanceof l.Right)return new l.Left(n.value0);if(n instanceof l.Left&&r instanceof l.Left)return new l.Left(g.append(e)(n.value0)(r.value0));if(n instanceof l.Right&&r instanceof l.Left)return new l.Left(r.value0);if(n instanceof l.Right&&r instanceof l.Right)return new l.Right(n.value0(r.value0));throw new Error("Failed pattern match at Simple.JSON (line 232, column 1 - line 232, column 90): "+[n.constructor.name,r.constructor.name])}}},Oe=function(e){return function(n){return function(r){return function(i){return a.ExceptT(t.apply(n.Apply0())(s.map(n.Apply0().Functor0())(De(e))(a.runExceptT(r)))(a.runExceptT(i)))}}}},Ve=function(e){return function(n){return function(t){return function(u){return function(f){return new A(function(d){return function(d){var l=Ne(t)(D.RLProxy.value)(d),p=F.reflectSymbol(e)(F.SProxy.value),x=o.withExcept(s.map(y.functorNonEmptyList)(j.ErrorAtProperty.create(p))),w=i.bind(a.bindExceptT(m.monadIdentity))(x(i.bindFlipped(a.bindExceptT(m.monadIdentity))(fe(n))(q.readProp(p)(d))))(function(n){return r.pure(a.applicativeExceptT(m.monadIdentity))(R.insert(f)(u)(e)(F.SProxy.value)(n))});return Oe(y.semigroupNonEmptyList)(m.applicativeIdentity)(s.map(a.functorExceptT(m.functorIdentity))(c.compose(R.semigroupoidBuilder))(w))(l)}})}}}}},Ce=function(e){return function(t){return function(u){return function(o){return new W(function(c){return function(c){var f=F.reflectSymbol(e)(F.SProxy.value);return n.alt(a.altExceptT(y.semigroupNonEmptyList)(m.monadIdentity))(i.bind(a.bindExceptT(m.monadIdentity))(fe(Le()(Ve(new F.IsSymbol(function(){return"type"}))(oe)(Ve(new F.IsSymbol(function(){return"value"}))(me)(ye)()())()()))(c))(function(n){return n.type===f?i.bind(a.bindExceptT(m.monadIdentity))(fe(t)(n.value))(function(n){return r.pure(a.applicativeExceptT(m.monadIdentity))(E.inj(u)(e)(F.SProxy.value)(n))}):j.fail(j.ForeignError.create("Did not match variant tag "+f))}))(ue(o)(D.RLProxy.value)(c))}})}}}};module.exports={readJSON:Te,"readJSON'":je,readJSON_:he,writeJSON:U,write:ee,read:ve,"read'":Fe,read_:Ee,parseJSON:Ie,undefined:ne,ReadForeign:B,readImpl:fe,ReadForeignFields:A,getFields:Ne,ReadForeignVariant:W,readVariantImpl:ue,WriteForeign:C,writeImpl:K,WriteForeignFields:V,writeImplFields:J,WriteForeignVariant:O,writeVariantImpl:M,readForeign:me,readChar:xe,readNumber:ae,readInt:ce,readString:oe,readBoolean:we,readArray:ge,readMaybe:de,readNullable:le,readObject:pe,readRecord:Le,readFieldsCons:Ve,readFieldsNil:ye,readForeignVariant:se,readVariantNil:ie,readVariantCons:Ce,writeForeignForeign:X,writeForeignString:G,writeForeignInt:Q,writeForeignChar:Y,writeForeignNumber:z,writeForeignBoolean:Z,writeForeignArray:$,writeForeignMaybe:re,writeForeignNullable:H,writeForeignObject:k,recordWriteForeign:te,consWriteForeignFields:Re,nilWriteForeignFields:Se,writeForeignVariant:_,nilWriteForeignVariant:qe,consWriteForeignVariant:Pe};
+},{"./foreign.js":"BQGe","../Control.Alt/index.js":"lN+m","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad.Except/index.js":"Fye2","../Control.Monad.Except.Trans/index.js":"gr8B","../Control.Semigroupoid/index.js":"/riR","../Data.Bifunctor/index.js":"e2Wc","../Data.Boolean/index.js":"ObQr","../Data.Either/index.js":"B2JL","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Identity/index.js":"2OKT","../Data.List.Types/index.js":"Xxuc","../Data.Maybe/index.js":"5mN7","../Data.Nullable/index.js":"YQ8o","../Data.Semigroup/index.js":"EsAJ","../Data.Symbol/index.js":"4oJQ","../Data.Traversable/index.js":"n7EE","../Data.TraversableWithIndex/index.js":"V4EF","../Data.Variant/index.js":"hgdh","../Effect.Exception/index.js":"0OCW","../Effect.Uncurried/index.js":"qn3Z","../Effect.Unsafe/index.js":"tPW2","../Foreign/index.js":"pu1p","../Foreign.Index/index.js":"Ryy1","../Foreign.Object/index.js":"jsiz","../Global.Unsafe/index.js":"qSZP","../Partial.Unsafe/index.js":"aoR+","../Record/index.js":"0gG4","../Record.Builder/index.js":"VeY4","../Type.Data.RowList/index.js":"XaXP"}],"X0te":[function(require,module,exports) {
+"use strict";var e=require("../Color/index.js"),n=require("../Color.Scheme.Clrs/index.js"),r=require("../Control.Applicative/index.js"),t=require("../Control.Bind/index.js"),i=require("../Control.Monad.Except.Trans/index.js"),a=require("../Control.Monad.State/index.js"),o=require("../Control.Monad.State.Class/index.js"),u=require("../Control.Monad.State.Trans/index.js"),d=require("../Data.Array/index.js"),l=require("../Data.BigInt/index.js"),s=require("../Data.Either/index.js"),c=require("../Data.EuclideanRing/index.js"),f=require("../Data.Foldable/index.js"),p=require("../Data.Function/index.js"),m=require("../Data.Functor/index.js"),g=require("../Data.FunctorWithIndex/index.js"),x=require("../Data.HeytingAlgebra/index.js"),h=require("../Data.Identity/index.js"),v=require("../Data.Int/index.js"),w=require("../Data.Lens.Getter/index.js"),y=require("../Data.List/index.js"),S=require("../Data.List.Types/index.js"),b=require("../Data.Map.Internal/index.js"),j=require("../Data.Maybe/index.js"),q=require("../Data.Monoid/index.js"),D=require("../Data.Newtype/index.js"),C=require("../Data.Number.Format/index.js"),I=require("../Data.Ord/index.js"),L=require("../Data.Pair/index.js"),N=require("../Data.Ring/index.js"),F=require("../Data.Semigroup/index.js"),P=require("../Data.Semiring/index.js"),M=require("../Data.Show/index.js"),T=require("../Data.String.CodePoints/index.js"),A=require("../Data.Symbol/index.js"),B=require("../Data.Traversable/index.js"),k=require("../Data.Tuple/index.js"),O=require("../Data.Variant/index.js"),z=require("../Foreign/index.js"),G=require("../Genetics.Browser.Canvas/index.js"),E=require("../Genetics.Browser.Coordinates/index.js"),_=require("../Genetics.Browser.Layer/index.js"),R=require("../Genetics.Browser.Types/index.js"),W=require("../Graphics.Drawing/index.js"),H=require("../Graphics.Drawing.Font/index.js"),U=require("../Math/index.js"),V=require("../Simple.JSON/index.js"),J=function(e){return e},K=function(e){return function(n){return function(r){return function(t){return d.nubBy(p.on(I.compare(I.ordString))(function(e){return e.text}))(d.fromFoldable(e)(m.map(n)(r)(t)))}}}},X=function(e){return function(n){return function(r){return function(t){return function(i){return m.map(b.functorMap)(E.aroundPair(N.ringNumber)(-n.segmentPadding))(E["scaledSegments'"](e)(r)(i)(E.viewScale(t)(i)))}}}}},Q=function(e){return function(n){return function(r){return function(t){return m.map(b.functorMap)(E.aroundPair(N.ringNumber)(-e.segmentPadding))(E.scaledSegments(n)(E.viewScale(r)(t)))}}}},Y=function(e){return function(n){var r=Q(e)(e.coordinateSystem),t=m.map(_.functorComponent)(function(e){return function(n){return e(r(n.value1)(n.value0))(n.value1)}})(n);return new _.Layer(_.Scrolling.value,new _.Masked(5),t)}},Z=t.composeKleisliFlipped(i.bindExceptT(h.monadIdentity))(function(n){return i.except(h.applicativeIdentity)(s.note(r.pure(S.applicativeNonEmptyList)(new z.ForeignError("Could not parse color: expected hex string")))(e.fromHexString(n)))})(z.readString),$=new D.Newtype(function(e){return e},J),ee=new V.ReadForeign(m.map(m.functorFn)(m.map(i.functorExceptT(h.functorIdentity))(D.wrap($)))(Z)),ne=function(e){var n=e.value1.height-E.normalize(c.euclideanRingNumber)(e.value0.threshold.min)(e.value0.threshold.max)(e.value0.threshold.sig)*e.value1.height,r="P = "+w.viewOn(U.pow(10)(-e.value0.threshold.sig))(R._exp(1)),t=F.append(W.semigroupOutlineStyle)(W.outlineColor(D.unwrap($)(e.value0.rulerColor)))(W.lineWidth(2)),i=W.outlined(t)(W.path(f.foldableArray)([{x:-5,y:n},{x:e.value1.width+5,y:n}])),a=H.font(H.sansSerif)(16)(q.mempty(H.monoidFontOptions)),o=W.text(a)(e.value1.width+10)(n-6)(W.fillColor(D.unwrap($)(e.value0.rulerColor)))(r);return{renderables:y.fromFoldable(f.foldableArray)([O.inj()(new A.IsSymbol(function(){return"drawing"}))(G._drawing)(i),O.inj()(new A.IsSymbol(function(){return"drawing"}))(G._drawing)(o)])}},re=function(e){return function(n){return function(t){return function(i){return function(a){return f.foldl(t)(function(t){return function(o){return b.alter(n)((u=o,function(n){return F.append(j.semigroupMaybe(e.Semigroup0()))(r.pure(j.applicativeMaybe)(r.pure(i)(u)))(n)}))(a(o))(t);var u}})(q.mempty(b.monoidMap(n)))}}}}},te=function(e){return _.Layer.create(_.Fixed.value)(_.NoMask.value)(m.map(_.functorComponent)(function(e){return function(n){return{renderables:r.pure(S.applicativeList)(O.inj()(new A.IsSymbol(function(){return"drawing"}))(G._drawing)(e(n.value1)))}}})(e))},ie=function(e){return D.wrap(E.newtypeNormalized)(D.unwrap(R.newtypeBp)(c.div(R.euclideanRingBp)(e.position.value0)(e.frameSize)))},ae=function(n){return function(r){var t=m.map(m.functorArray)(function(e){return v.toNumber(e)/v.toNumber(n.numSteps)})(d.range(0)(n.numSteps)),i=r.width*n.hPad,a=f.foldMap(f.foldableArray)(W.monoidDrawing)(function(t){return W.text(H.font(H.sansSerif)(n.fonts.scaleSize)(q.mempty(H.monoidFontOptions)))(.6*r.width-i)(t*r.height+5)(W.fillColor(e.black))(C.toStringWith(C.fixed(0))((a=n.min+(1-t)*(n.max-n.min),I.min(I.ordNumber)(n.max)(a))));var a})(t),o=W.translate(.4*r.width-i)(.72*r.height)(W.rotate(-U.pi/2)(W.text(H.font(H.sansSerif)(n.fonts.labelSize)(q.mempty(H.monoidFontOptions)))(0)(0)(W.fillColor(e.black))("-log10 (P value)"))),u=7*i,l=W.path(f.foldableArray)([{x:u,y:0},{x:u,y:r.height}]),s=F.append(W.semigroupShape)(l)(f.foldMap(f.foldableArray)(W.monoidShape)(function(e){return(n=8,function(e){return W.path(f.foldableArray)([{x:u-n,y:e},{x:u,y:e}])})(e*r.height);var n})(t)),c=F.append(W.semigroupOutlineStyle)(W.outlineColor(D.unwrap($)(n.color)))(W.lineWidth(2));return F.append(W.semigroupDrawing)(W.outlined(c)(s))(F.append(W.semigroupDrawing)(a)(o))}},oe=function(n){var r=H.font(H.sansSerif)(12)(q.mempty(H.monoidFontOptions)),t=W.text(r)(12)(0)(W.fillColor(e.black))(n.text);return F.append(W.semigroupDrawing)(n.icon)(t)},ue=function(n){return function(r){var t=r.height*n.vPad,i=r.width*n.hPad,a=H.font(H.sansSerif)(n.fontSize)(q.mempty(H.monoidFontOptions)),o=g.mapWithIndex(g.functorWithIndexArray)(function(n){return function(r){return(o=t*v.toNumber(n+1|0),function(n){return W.translate(i)(o)(F.append(W.semigroupDrawing)(n.icon)(W.text(a)(12)(0)(W.fillColor(e.black))(n.text)))})(r);var o}})(n.entries);r.height,f.length(f.foldableArray)(P.semiringNumber)(n.entries);return f.fold(f.foldableArray)(W.monoidDrawing)(o)}},de={color:D.wrap($)(e.black),hPad:.125,numSteps:3,fonts:{labelSize:18,scaleSize:14}},le={hPad:.2,vPad:.2,fontSize:12},se=function(n){return function(r){var t=function(n){return function(t){return function(i){return W.text(H.font(H.sansSerif)(r.fontSize)(q.mempty(H.monoidFontOptions)))(function(e){return function(n){var r=I.min(I.ordNumber)(e.value1)(n.value1),t=I.max(I.ordNumber)(e.value0)(n.value0);return t+(r-t)/2}}(function(e){return function(n){var r=m.map(L.functorPair)(l.toNumber)(D.unwrap(E.coordsysviewNewtype)(n)),t=E.viewScale(e)(n);return m.map(L.functorPair)(function(e){return e/E.xPerPixel(t)})(r)}}(n)(t))(i.value1)-(a=i.value0,.3*v.toNumber(r.fontSize*T.length(M.show(R.showChrId)(a))|0)))(.7*n.height)(W.fillColor(e.black))(M.show(R.showChrId)(i.value0));var a}}};return _.Layer.create(_.Scrolling.value)(new _.Masked(5))(new _.CBottom(function(e){return{renderables:m.map(S.functorList)((r=O.inj()(new A.IsSymbol(function(){return"drawing"}))(G._drawing),i=t(e.value1)(e.value0),function(e){return r(i(e))}))(b.toUnfoldable(S.unfoldableList)(Q(n)(n.coordinateSystem)(e.value1)(e.value0)))};var r,i}))}},ce=function(e){return function(n){return function(i){var d,l;return{renderables:m.map(S.functorList)((d=O.inj()(new A.IsSymbol(function(){return"drawing"}))(G._drawing),l=k.uncurry(function(e){return function(n){return W.filled(W.fillColor(e))(n)}}),function(e){return d(l(e))}))(a.evalState(B.traverse(S.traversableList)(u.applicativeStateT(h.monadIdentity))(function(n){return t.bind(u.bindStateT(h.monadIdentity))(o.get(u.monadStateStateT(h.monadIdentity)))(function(a){return t.discard(t.discardUnit)(u.bindStateT(h.monadIdentity))(o.modify_(u.monadStateStateT(h.monadIdentity))(x.not(x.heytingAlgebraBoolean)))(function(){return r.pure(u.applicativeStateT(h.monadIdentity))(new k.Tuple(D.unwrap($)(a?e.chrBG1:e.chrBG2),W.rectangle(n.value0-e.segmentPadding)(-5)(n.value1-n.value0+2*e.segmentPadding)(i.height+10)))})})})(b.values(n)))(!1))}}}};module.exports={featureNormX:ie,groupToMap:re,pixelSegments:Q,pixelSegmentsOpt:X,trackLikeLayer:Y,fixedUILayer:te,thresholdRuler:ne,chrLabelsLayer:se,chrBackgroundLayer:ce,HexColor:J,parseColor:Z,defaultVScaleConfig:de,drawVScaleInSlot:ae,drawLegendItem:oe,defaultLegendConfig:le,drawLegendInSlot:ue,trackLegend:K,newtypeHexColor:$,readforeignHexColor:ee};
+},{"../Color/index.js":"f3ma","../Color.Scheme.Clrs/index.js":"rp+n","../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Monad.Except.Trans/index.js":"gr8B","../Control.Monad.State/index.js":"mGZW","../Control.Monad.State.Class/index.js":"u1pL","../Control.Monad.State.Trans/index.js":"34Kp","../Data.Array/index.js":"4t4C","../Data.BigInt/index.js":"Zx+T","../Data.Either/index.js":"B2JL","../Data.EuclideanRing/index.js":"2IRB","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.HeytingAlgebra/index.js":"paZe","../Data.Identity/index.js":"2OKT","../Data.Int/index.js":"xNJb","../Data.Lens.Getter/index.js":"OPOX","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Number.Format/index.js":"VX77","../Data.Ord/index.js":"r4Vb","../Data.Pair/index.js":"PpsX","../Data.Ring/index.js":"E2qH","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.String.CodePoints/index.js":"mAJY","../Data.Symbol/index.js":"4oJQ","../Data.Traversable/index.js":"n7EE","../Data.Tuple/index.js":"II/O","../Data.Variant/index.js":"hgdh","../Foreign/index.js":"pu1p","../Genetics.Browser.Canvas/index.js":"VVkU","../Genetics.Browser.Coordinates/index.js":"7bYH","../Genetics.Browser.Layer/index.js":"YWUW","../Genetics.Browser.Types/index.js":"HhmG","../Graphics.Drawing/index.js":"0WVi","../Graphics.Drawing.Font/index.js":"fMOI","../Math/index.js":"Rpaz","../Simple.JSON/index.js":"DqNI"}],"UG8G":[function(require,module,exports) {
+
+var t,e,n=module.exports={};function r(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(t===setTimeout)return setTimeout(e,0);if((t===r||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(n){try{return t.call(null,e,0)}catch(n){return t.call(this,e,0)}}}function u(t){if(e===clearTimeout)return clearTimeout(t);if((e===o||!e)&&clearTimeout)return e=clearTimeout,clearTimeout(t);try{return e(t)}catch(n){try{return e.call(null,t)}catch(n){return e.call(this,t)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:r}catch(n){t=r}try{e="function"==typeof clearTimeout?clearTimeout:o}catch(n){e=o}}();var c,s=[],l=!1,a=-1;function f(){l&&c&&(l=!1,c.length?s=c.concat(s):a=-1,s.length&&h())}function h(){if(!l){var t=i(f);l=!0;for(var e=s.length;e;){for(c=s,s=[];++a<e;)c&&c[a].run();a=-1,e=s.length}c=null,l=!1,u(t)}}function m(t,e){this.fun=t,this.array=e}function p(){}n.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];s.push(new m(t,e)),1!==s.length||l||i(h)},m.prototype.run=function(){this.fun.apply(null,this.array)},n.title="browser",n.env={},n.argv=[],n.version="",n.versions={},n.on=p,n.addListener=p,n.once=p,n.off=p,n.removeListener=p,n.removeAllListeners=p,n.emit=p,n.prependListener=p,n.prependOnceListener=p,n.listeners=function(t){return[]},n.binding=function(t){throw new Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(t){throw new Error("process.chdir is not supported")},n.umask=function(){return 0};
+},{}],"sseR":[function(require,module,exports) {
+var process = require("process");
+var e=require("process");exports._ajax=function(){var r={};return"undefined"==typeof module||!module.require||void 0!==e&&e.versions.electron?(r.newXHR=function(){return new XMLHttpRequest},r.fixupUrl=function(e){return e||"/"},r.getResponse=function(e){return e.response}):(r.newXHR=function(){return new(module.require("xhr2"))},r.fixupUrl=function(e){var r=module.require("url"),t=r.parse(e);return t.protocol=t.protocol||"http:",t.hostname=t.hostname||"localhost",r.format(t)},r.getResponse=function(e){return e.response}),function(e,t){return function(n,o){var u=r.newXHR(),s=r.fixupUrl(t.url);if(u.open(t.method||"GET",s,!0,t.username,t.password),t.headers)try{for(var i,a=0;null!=(i=t.headers[a]);a++)u.setRequestHeader(i.field,i.value)}catch(f){n(f)}var l=function(e){return function(){n(new Error(e+": "+t.method+" "+t.url))}};return u.onerror=l("AJAX request failed"),u.ontimeout=l("AJAX request timed out"),u.onload=function(){o({status:u.status,statusText:u.statusText,headers:u.getAllResponseHeaders().split("\r\n").filter(function(e){return e.length>0}).map(function(r){var t=r.indexOf(":");return e(r.substring(0,t))(r.substring(t+2))}),body:r.getResponse(u)})},u.responseType=t.responseType,u.withCredentials=t.withCredentials,u.send(t.content),function(e,r,t){try{u.abort()}catch(f){return r(f)}return t()}}}}();
+},{"process":"UG8G"}],"PJcd":[function(require,module,exports) {
+"use strict";var t="text/xml",a="text/plain",i="text/html",p="text/csv",e="multipart/form-data",o="image/png",l="image/jpeg",c="image/gif",m="application/xml",n="application/octet-stream",r="application/javascript",x="application/json",g="application/x-www-form-urlencoded";module.exports={applicationFormURLEncoded:g,applicationJSON:x,applicationJavascript:r,applicationOctetStream:n,applicationXML:m,imageGIF:c,imageJPEG:l,imagePNG:o,multipartFormData:e,textCSV:p,textHTML:i,textPlain:a,textXML:t};
+},{}],"TX3z":[function(require,module,exports) {
+"use strict";var n=require("../Data.Maybe/index.js"),e=require("../Data.MediaType.Common/index.js"),t=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),r=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),u=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),i=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),o=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),c=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),a=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),f=function(t){return t instanceof c?new n.Just(e.applicationFormURLEncoded):t instanceof a?new n.Just(e.applicationJSON):n.Nothing.value},s=i.create,l=a.create,d=c.create,w=o.create,m=u.create,v=r.create,h=function(n){return new t(function(e){return e(n)})};module.exports={ArrayView:t,Blob:r,Document:u,String:i,FormData:o,FormURLEncoded:c,Json:a,arrayView:h,blob:v,document:m,string:s,formData:w,formURLEncoded:d,json:l,toMediaType:f};
+},{"../Data.Maybe/index.js":"5mN7","../Data.MediaType.Common/index.js":"PJcd"}],"cjQ0":[function(require,module,exports) {
+"use strict";var e=require("../Data.Eq/index.js"),n=require("../Data.Newtype/index.js"),r=require("../Data.Ord/index.js"),t=require("../Data.Show/index.js"),i=function(e){return e},u=new t.Show(function(e){return"(MediaType "+t.show(t.showString)(e)+")"}),o=new n.Newtype(function(e){return e},i),a=new e.Eq(function(e){return function(n){return e===n}}),d=new r.Ord(function(){return a},function(e){return function(n){return r.compare(r.ordString)(e)(n)}});module.exports={MediaType:i,newtypeMediaType:o,eqMediaType:a,ordMediaType:d,showMediaType:u};
+},{"../Data.Eq/index.js":"Pq4F","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Show/index.js":"mFY7"}],"QBMh":[function(require,module,exports) {
+"use strict";var e=require("../Data.Eq/index.js"),n=require("../Data.MediaType/index.js"),t=require("../Data.Newtype/index.js"),r=require("../Data.Ord/index.js"),a=require("../Data.Ordering/index.js"),u=require("../Data.Show/index.js"),i=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),o=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),c=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(t){return new e(n,t)}},e}(),f=function(e){if(e instanceof i)return t.unwrap(n.newtypeMediaType)(e.value0);if(e instanceof o)return t.unwrap(n.newtypeMediaType)(e.value0);if(e instanceof c)return e.value1;throw new Error("Failed pattern match at Affjax.RequestHeader (line 26, column 1 - line 26, column 33): "+[e.constructor.name])},s=new u.Show(function(e){if(e instanceof i)return"(Accept "+u.show(n.showMediaType)(e.value0)+")";if(e instanceof o)return"(ContentType "+u.show(n.showMediaType)(e.value0)+")";if(e instanceof c)return"(RequestHeader "+u.show(u.showString)(e.value0)+" "+u.show(u.showString)(e.value1)+")";throw new Error("Failed pattern match at Affjax.RequestHeader (line 16, column 1 - line 19, column 81): "+[e.constructor.name])}),l=function(e){if(e instanceof i)return"Accept";if(e instanceof o)return"Content-Type";if(e instanceof c)return e.value0;throw new Error("Failed pattern match at Affjax.RequestHeader (line 21, column 1 - line 21, column 32): "+[e.constructor.name])},d=new e.Eq(function(t){return function(r){return t instanceof i&&r instanceof i?e.eq(n.eqMediaType)(t.value0)(r.value0):t instanceof o&&r instanceof o?e.eq(n.eqMediaType)(t.value0)(r.value0):t instanceof c&&r instanceof c&&(t.value0===r.value0&&t.value1===r.value1)}}),v=new r.Ord(function(){return d},function(e){return function(t){if(e instanceof i&&t instanceof i)return r.compare(n.ordMediaType)(e.value0)(t.value0);if(e instanceof i)return a.LT.value;if(t instanceof i)return a.GT.value;if(e instanceof o&&t instanceof o)return r.compare(n.ordMediaType)(e.value0)(t.value0);if(e instanceof o)return a.LT.value;if(t instanceof o)return a.GT.value;if(e instanceof c&&t instanceof c){var u=r.compare(r.ordString)(e.value0)(t.value0);return u instanceof a.LT?a.LT.value:u instanceof a.GT?a.GT.value:r.compare(r.ordString)(e.value1)(t.value1)}throw new Error("Failed pattern match at Affjax.RequestHeader (line 14, column 1 - line 14, column 54): "+[e.constructor.name,t.constructor.name])}});module.exports={Accept:i,ContentType:o,RequestHeader:c,name:l,value:f,eqRequestHeader:d,ordRequestHeader:v,showRequestHeader:s};
+},{"../Data.Eq/index.js":"Pq4F","../Data.MediaType/index.js":"cjQ0","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Show/index.js":"mFY7"}],"QSsR":[function(require,module,exports) {
+"use strict";var n=require("../Control.Category/index.js"),e=require("../Data.Maybe/index.js"),t=require("../Data.MediaType.Common/index.js"),r=require("../Foreign/index.js"),i=function(){function n(n,e){this.value0=n,this.value1=e}return n.create=function(e){return function(t){return new n(e,t)}},n}(),o=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),u=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),a=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),c=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),f=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),s=function(){function n(n){this.value0=n}return n.create=function(e){return new n(e)},n}(),l=function(n){if(n instanceof o)return"arraybuffer";if(n instanceof u)return"blob";if(n instanceof a)return"document";if(n instanceof c)return"text";if(n instanceof f)return"text";if(n instanceof s)return"";throw new Error("Failed pattern match at Affjax.ResponseFormat (line 46, column 3 - line 52, column 19): "+[n.constructor.name])},y=function(n){return n instanceof c?new e.Just(t.applicationJSON):e.Nothing.value},d=new f(n.identity(n.categoryFn)),w=function(n){return r.renderForeignError(n.value0)},g=new c(n.identity(n.categoryFn)),m=new s(n.identity(n.categoryFn)),p=new a(n.identity(n.categoryFn)),F=new u(n.identity(n.categoryFn)),h=new o(n.identity(n.categoryFn));module.exports={ArrayBuffer:o,Blob:u,Document:a,Json:c,String:f,Ignore:s,arrayBuffer:h,blob:F,document:p,json:g,string:d,ignore:m,toResponseType:l,toMediaType:y,ResponseFormatError:i,printResponseFormatError:w};
+},{"../Control.Category/index.js":"IAi2","../Data.Maybe/index.js":"5mN7","../Data.MediaType.Common/index.js":"PJcd","../Foreign/index.js":"pu1p"}],"ev5/":[function(require,module,exports) {
+"use strict";var e=require("../Data.Eq/index.js"),n=require("../Data.Ord/index.js"),r=require("../Data.Ordering/index.js"),u=require("../Data.Show/index.js"),t=function(){function e(e,n){this.value0=e,this.value1=n}return e.create=function(n){return function(r){return new e(n,r)}},e}(),a=function(e){return e.value1},o=new u.Show(function(e){return"(ResponseHeader "+u.show(u.showString)(e.value0)+" "+u.show(u.showString)(e.value1)+")"}),i=function(e){return e.value0},s=new e.Eq(function(e){return function(n){return e.value0===n.value0&&e.value1===n.value1}}),v=new n.Ord(function(){return s},function(e){return function(u){var t=n.compare(n.ordString)(e.value0)(u.value0);return t instanceof r.LT?r.LT.value:t instanceof r.GT?r.GT.value:n.compare(n.ordString)(e.value1)(u.value1)}});module.exports={ResponseHeader:t,name:i,value:a,eqResponseHeader:s,ordResponseHeader:v,showResponseHeader:o};
+},{"../Data.Eq/index.js":"Pq4F","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Show/index.js":"mFY7"}],"fv/y":[function(require,module,exports) {
+"use strict";function r(r){return r}exports.fromBoolean=r,exports.fromNumber=r,exports.fromString=r,exports.fromArray=r,exports.fromObject=r,exports.jsonNull=null,exports.stringify=function(r){return JSON.stringify(r)};var t=Object.prototype.toString,e=Object.keys;function n(r){return"[object Array]"===t.call(r)}exports._caseJson=function(r,e,n,o,f,u,l){return null==l?r():"boolean"==typeof l?e(l):"number"==typeof l?n(l):"string"==typeof l?o(l):"[object Array]"===t.call(l)?f(l):u(l)},exports._compare=function r(t,o,f,u,l){if(null==u)return null==l?t:f;if("boolean"==typeof u)return"boolean"==typeof l?u===l?t:!1===u?f:o:null==l?o:f;if("number"==typeof u)return"number"==typeof l?u===l?t:u<l?f:o:null==l?o:"boolean"==typeof l?o:f;if("string"==typeof u)return"string"==typeof l?u===l?t:u<l?f:o:null==l?o:"boolean"==typeof l?o:"number"==typeof l?o:f;if(n(u)){if(n(l)){for(var i=0;i<Math.min(u.length,l.length);i++){var p=r(t,o,f,u[i],l[i]);if(p!==t)return p}return u.length===l.length?t:u.length<l.length?f:o}return null==l?o:"boolean"==typeof l?o:"number"==typeof l?o:"string"==typeof l?o:f}if(null==l)return o;if("boolean"==typeof l)return o;if("number"==typeof l)return o;if("string"==typeof l)return o;if(n(l))return o;var y=e(u),a=e(l);if(y.length<a.length)return f;if(y.length>a.length)return o;for(var s=y.concat(a).sort(),g=0;g<s.length;g++){var b=s[g];if(void 0===u[b])return f;if(void 0===l[b])return o;var c=r(t,o,f,u[b],l[b]);if(c!==t)return c}return t};
+},{}],"pA4l":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Data.Eq/index.js"),t=require("../Data.Function/index.js"),o=require("../Data.Maybe/index.js"),e=require("../Data.Ord/index.js"),u=require("../Data.Ordering/index.js"),c=require("../Foreign.Object/index.js"),s=function(n){return function(r){return function(t){return t(n)(r)}}},i=s(o.Nothing.value)(o.Just.create),f=n.fromNumber(0),a=n.fromBoolean(!0),m=function(r){return function(t){return n.fromObject(c.singleton(r)(t))}},l=function(r){return n.fromArray([r])},j=n.fromBoolean(!1),b=n.fromString(""),g=n.fromObject(c.empty),J=n.fromArray([]),y=s(!1)(t.const(!0)),O=new e.Ord(function(){return d},function(r){return function(t){return n._compare(u.EQ.value,u.GT.value,u.LT.value,r,t)}}),d=new r.Eq(function(n){return function(t){return r.eq(u.eqOrdering)(e.compare(O)(n)(t))(u.EQ.value)}}),q=new r.Eq(function(n){return function(n){return!0}}),N=new e.Ord(function(){return q},function(n){return function(n){return u.EQ.value}}),A=function(r){return function(o){return function(e){return n._caseJson(t.const(r),t.const(r),t.const(r),o,t.const(r),t.const(r),e)}}},E=y(A),S=i(A),_=function(r){return function(o){return function(e){return n._caseJson(t.const(r),t.const(r),t.const(r),t.const(r),t.const(r),o,e)}}},p=y(_),v=i(_),x=function(r){return function(o){return function(e){return n._caseJson(t.const(r),t.const(r),o,t.const(r),t.const(r),t.const(r),e)}}},B=y(x),D=i(x),w=function(r){return function(o){return function(e){return n._caseJson(o,t.const(r),t.const(r),t.const(r),t.const(r),t.const(r),e)}}},F=y(w),Q=i(w),T=function(r){return function(o){return function(e){return n._caseJson(t.const(r),o,t.const(r),t.const(r),t.const(r),t.const(r),e)}}},h=y(T),G=i(T),L=function(r){return function(o){return function(e){return n._caseJson(t.const(r),t.const(r),t.const(r),t.const(r),o,t.const(r),e)}}},M=y(L),Z=i(L),k=function(r){return function(t){return function(o){return function(e){return function(u){return function(c){return function(s){return n._caseJson(r,t,o,e,u,c,s)}}}}}}};module.exports={caseJson:k,caseJsonNull:w,caseJsonBoolean:T,caseJsonNumber:x,caseJsonString:A,caseJsonArray:L,caseJsonObject:_,isNull:F,isBoolean:h,isNumber:B,isString:E,isArray:M,isObject:p,toNull:Q,toBoolean:G,toNumber:D,toString:S,toArray:Z,toObject:v,jsonTrue:a,jsonFalse:j,jsonZero:f,jsonEmptyString:b,jsonEmptyArray:J,jsonSingletonArray:l,jsonEmptyObject:g,jsonSingletonObject:m,eqJson:d,ordJson:O,fromBoolean:n.fromBoolean,fromNumber:n.fromNumber,fromString:n.fromString,fromArray:n.fromArray,fromObject:n.fromObject,jsonNull:n.jsonNull,stringify:n.stringify};
+},{"./foreign.js":"fv/y","../Data.Eq/index.js":"Pq4F","../Data.Function/index.js":"ImXJ","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Foreign.Object/index.js":"jsiz"}],"p7JN":[function(require,module,exports) {
+"use strict";exports._jsonParser=function(r,e,s){try{return e(JSON.parse(s))}catch(t){return r(t.message)}};
+},{}],"QxUV":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),r=require("../Data.Either/index.js"),t=function(t){return e._jsonParser(r.Left.create,r.Right.create,t)};module.exports={jsonParser:t};
+},{"./foreign.js":"p7JN","../Data.Either/index.js":"B2JL"}],"7T8V":[function(require,module,exports) {
+"use strict";var e=require("../Data.Eq/index.js"),r=require("../Data.Functor/index.js"),n=require("../Data.Maybe/index.js"),o=require("../Data.Monoid/index.js"),t=require("../Data.Newtype/index.js"),a=require("../Data.Ord/index.js"),i=require("../Data.Semigroup/index.js"),u=require("../Data.Show/index.js"),d=require("../Data.String.Common/index.js"),s=require("../Data.Tuple/index.js"),c=require("../Global.Unsafe/index.js"),m=function(e){return e},l=function(e){return e},q=new u.Show(function(e){return"(FormURLEncoded "+u.show(u.showArray(s.showTuple(u.showString)(n.showMaybe(u.showString))))(e)+")"}),f=i.semigroupArray,p=a.ordArray(s.ordTuple(a.ordString)(n.ordMaybe(a.ordString))),w=new t.Newtype(function(e){return e},m),y=o.monoidArray,E=m,h=e.eqArray(s.eqTuple(e.eqString)(n.eqMaybe(e.eqString))),U=function(){var e=d.joinWith("&"),o=r.map(r.functorArray)(function(e){if(e.value1 instanceof n.Nothing)return c.unsafeEncodeURIComponent(e.value0);if(e.value1 instanceof n.Just)return c.unsafeEncodeURIComponent(e.value0)+"="+c.unsafeEncodeURIComponent(e.value1.value0);throw new Error("Failed pattern match at Data.FormURLEncoded (line 35, column 18 - line 37, column 90): "+[e.constructor.name])});return function(r){return e(o(l(r)))}}();module.exports={FormURLEncoded:m,fromArray:E,toArray:l,encode:U,newtypeFormUrlEncoded:w,eqFormUrlEncoded:h,ordFormUrlEncoded:p,semigroupFormUrlEncoded:f,monoidFormUrlEncoded:y,showFormUrlEncoded:q};
+},{"../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.String.Common/index.js":"OSrc","../Data.Tuple/index.js":"II/O","../Global.Unsafe/index.js":"qSZP"}],"7p2I":[function(require,module,exports) {
+"use strict";var n=require("../Data.Either/index.js"),e=require("../Data.Eq/index.js"),t=require("../Data.Ord/index.js"),i=require("../Data.Ordering/index.js"),u=require("../Data.Show/index.js"),f=require("../Data.String.Common/index.js"),r=function(){function n(){}return n.value=new n,n}(),a=function(){function n(){}return n.value=new n,n}(),o=function(){function n(){}return n.value=new n,n}(),c=function(){function n(){}return n.value=new n,n}(),s=function(){function n(){}return n.value=new n,n}(),l=function(){function n(){}return n.value=new n,n}(),v=function(){function n(){}return n.value=new n,n}(),T=function(){function n(){}return n.value=new n,n}(),w=function(){function n(){}return n.value=new n,n}(),E=function(){function n(){}return n.value=new n,n}(),L=function(){function n(){}return n.value=new n,n}(),O=function(){function n(){}return n.value=new n,n}(),C=function(){function n(){}return n.value=new n,n}(),P=function(){function n(){}return n.value=new n,n}(),d=function(){function n(){}return n.value=new n,n}(),h=function(){function n(){}return n.value=new n,n}(),m=function(n){return n},G=function(n){return n},D=new u.Show(function(n){if(n instanceof r)return"OPTIONS";if(n instanceof a)return"GET";if(n instanceof o)return"HEAD";if(n instanceof c)return"POST";if(n instanceof s)return"PUT";if(n instanceof l)return"DELETE";if(n instanceof v)return"TRACE";if(n instanceof T)return"CONNECT";if(n instanceof w)return"PROPFIND";if(n instanceof E)return"PROPPATCH";if(n instanceof L)return"MKCOL";if(n instanceof O)return"COPY";if(n instanceof C)return"MOVE";if(n instanceof P)return"LOCK";if(n instanceof d)return"UNLOCK";if(n instanceof h)return"PATCH";throw new Error("Failed pattern match at Data.HTTP.Method (line 40, column 1 - line 56, column 23): "+[n.constructor.name])}),M=new u.Show(function(n){return"(CustomMethod "+u.show(u.showString)(n)+")"}),Q=n.either(u.show(D))(G),N=function(e){var t=f.toUpper(e);return"OPTIONS"===t?new n.Left(r.value):"GET"===t?new n.Left(a.value):"HEAD"===t?new n.Left(o.value):"POST"===t?new n.Left(c.value):"PUT"===t?new n.Left(s.value):"DELETE"===t?new n.Left(l.value):"TRACE"===t?new n.Left(v.value):"CONNECT"===t?new n.Left(T.value):"PROPFIND"===t?new n.Left(w.value):"PROPPATCH"===t?new n.Left(E.value):"MKCOL"===t?new n.Left(L.value):"COPY"===t?new n.Left(O.value):"MOVE"===t?new n.Left(C.value):"LOCK"===t?new n.Left(P.value):"UNLOCK"===t?new n.Left(d.value):"PATCH"===t?new n.Left(h.value):new n.Right(t)},S=new e.Eq(function(n){return function(e){return n instanceof r&&e instanceof r||(n instanceof a&&e instanceof a||(n instanceof o&&e instanceof o||(n instanceof c&&e instanceof c||(n instanceof s&&e instanceof s||(n instanceof l&&e instanceof l||(n instanceof v&&e instanceof v||(n instanceof T&&e instanceof T||(n instanceof w&&e instanceof w||(n instanceof E&&e instanceof E||(n instanceof L&&e instanceof L||(n instanceof O&&e instanceof O||(n instanceof C&&e instanceof C||(n instanceof P&&e instanceof P||(n instanceof d&&e instanceof d||n instanceof h&&e instanceof h))))))))))))))}}),A=new t.Ord(function(){return S},function(n){return function(e){if(n instanceof r&&e instanceof r)return i.EQ.value;if(n instanceof r)return i.LT.value;if(e instanceof r)return i.GT.value;if(n instanceof a&&e instanceof a)return i.EQ.value;if(n instanceof a)return i.LT.value;if(e instanceof a)return i.GT.value;if(n instanceof o&&e instanceof o)return i.EQ.value;if(n instanceof o)return i.LT.value;if(e instanceof o)return i.GT.value;if(n instanceof c&&e instanceof c)return i.EQ.value;if(n instanceof c)return i.LT.value;if(e instanceof c)return i.GT.value;if(n instanceof s&&e instanceof s)return i.EQ.value;if(n instanceof s)return i.LT.value;if(e instanceof s)return i.GT.value;if(n instanceof l&&e instanceof l)return i.EQ.value;if(n instanceof l)return i.LT.value;if(e instanceof l)return i.GT.value;if(n instanceof v&&e instanceof v)return i.EQ.value;if(n instanceof v)return i.LT.value;if(e instanceof v)return i.GT.value;if(n instanceof T&&e instanceof T)return i.EQ.value;if(n instanceof T)return i.LT.value;if(e instanceof T)return i.GT.value;if(n instanceof w&&e instanceof w)return i.EQ.value;if(n instanceof w)return i.LT.value;if(e instanceof w)return i.GT.value;if(n instanceof E&&e instanceof E)return i.EQ.value;if(n instanceof E)return i.LT.value;if(e instanceof E)return i.GT.value;if(n instanceof L&&e instanceof L)return i.EQ.value;if(n instanceof L)return i.LT.value;if(e instanceof L)return i.GT.value;if(n instanceof O&&e instanceof O)return i.EQ.value;if(n instanceof O)return i.LT.value;if(e instanceof O)return i.GT.value;if(n instanceof C&&e instanceof C)return i.EQ.value;if(n instanceof C)return i.LT.value;if(e instanceof C)return i.GT.value;if(n instanceof P&&e instanceof P)return i.EQ.value;if(n instanceof P)return i.LT.value;if(e instanceof P)return i.GT.value;if(n instanceof d&&e instanceof d)return i.EQ.value;if(n instanceof d)return i.LT.value;if(e instanceof d)return i.GT.value;if(n instanceof h&&e instanceof h)return i.EQ.value;throw new Error("Failed pattern match at Data.HTTP.Method (line 38, column 1 - line 38, column 40): "+[n.constructor.name,e.constructor.name])}}),q=new e.Eq(function(n){return function(e){return n===e}}),H=new t.Ord(function(){return q},function(n){return function(e){return t.compare(t.ordString)(n)(e)}});module.exports={OPTIONS:r,GET:a,HEAD:o,POST:c,PUT:s,DELETE:l,TRACE:v,CONNECT:T,PROPFIND:w,PROPPATCH:E,MKCOL:L,COPY:O,MOVE:C,LOCK:P,UNLOCK:d,PATCH:h,unCustomMethod:G,fromString:N,print:Q,eqMethod:S,ordMethod:A,showMethod:D,eqCustomMethod:q,ordCustomMethod:H,showCustomMethod:M};
+},{"../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Show/index.js":"mFY7","../Data.String.Common/index.js":"OSrc"}],"z+2M":[function(require,module,exports) {
+"use strict";var n=require("../Data.Either/index.js"),e=require("../Effect.Aff/index.js"),t=function(n){return n},r=function(n){return n},f=function(t){return e.makeAff(function(r){return function(){var f=t(function(e){return r(n.Left.create(e))()},function(e){return r(n.Right.create(e))()});return function(t){return e.makeAff(function(r){return function(){return f(t,function(e){return r(n.Left.create(e))()},function(e){return r(n.Right.create(e))()}),e.nonCanceler}})}}})};module.exports={EffectFnAff:r,EffectFnCanceler:t,fromEffectFnAff:f};
+},{"../Data.Either/index.js":"B2JL","../Effect.Aff/index.js":"I7lu"}],"IjAr":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),t=require("../Affjax.RequestBody/index.js"),n=require("../Affjax.RequestHeader/index.js"),r=require("../Affjax.ResponseFormat/index.js"),a=require("../Affjax.ResponseHeader/index.js"),u=require("../Control.Applicative/index.js"),o=require("../Control.Bind/index.js"),i=require("../Control.Monad.Error.Class/index.js"),s=require("../Control.Monad.Except/index.js"),f=require("../Control.Monad.Except.Trans/index.js"),d=require("../Control.Parallel/index.js"),c=require("../Data.Argonaut.Core/index.js"),l=require("../Data.Argonaut.Parser/index.js"),m=require("../Data.Array/index.js"),p=require("../Data.Either/index.js"),h=require("../Data.Eq/index.js"),w=require("../Data.Foldable/index.js"),x=require("../Data.FormURLEncoded/index.js"),v=require("../Data.Function/index.js"),A=require("../Data.Functor/index.js"),g=require("../Data.HTTP.Method/index.js"),T=require("../Data.HeytingAlgebra/index.js"),j=require("../Data.Identity/index.js"),y=require("../Data.Int/index.js"),F=require("../Data.List.NonEmpty/index.js"),b=require("../Data.Maybe/index.js"),q=require("../Data.Nullable/index.js"),E=require("../Data.Ord/index.js"),C=require("../Data.Time.Duration/index.js"),R=require("../Data.Unit/index.js"),D=require("../Effect.Aff/index.js"),L=require("../Effect.Aff.Compat/index.js"),N=require("../Effect.Class/index.js"),M=require("../Effect.Exception/index.js"),P=require("../Effect.Ref/index.js"),J=require("../Foreign/index.js"),S=require("../Math/index.js"),B=function(e){return function(t){return function(n){var r=function(t){if(t instanceof p.Left)return p.Left.create(new p.Left(t.value0));if(t instanceof p.Right)return 200===t.value0.status?new p.Right(t.value0):e.shouldRetryWithStatusCode(t.value0.status)?p.Left.create(new p.Right(t.value0)):new p.Right(t.value0);throw new Error("Failed pattern match at Affjax (line 206, column 5 - line 208, column 39): "+[t.constructor.name])};return o.bind(D.bindAff)(N.liftEffect(D.monadEffectAff)(P.new(b.Nothing.value)))(function(a){var s=function a(s){return function(f){return o.bind(D.bindAff)(A.map(D.functorAff)(r)(i.try(D.monadErrorAff)(t(n))))(function(t){if(t instanceof p.Left)return o.discard(o.discardUnit)(D.bindAff)(N.liftEffect(D.monadEffectAff)(P.write(new b.Just(t.value0))(s)))(function(){return o.discard(o.discardUnit)(D.bindAff)(D.delay(e.delayCurve(f)))(function(){return a(s)(f+1|0)})});if(t instanceof p.Right)return u.pure(D.applicativeAff)(t.value0);throw new Error("Failed pattern match at Affjax (line 221, column 7 - line 226, column 32): "+[t.constructor.name])})}}(a);if(e.timeout instanceof b.Nothing)return s(1);if(e.timeout instanceof b.Just)return o.bind(D.bindAff)(d.parOneOf(D.parallelAff)(D.alternativeParAff)(w.foldableArray)(A.functorArray)([A.map(D.functorAff)(b.Just.create)(s(1)),A.voidRight(D.functorAff)(b.Nothing.value)(D.delay(e.timeout.value0))]))(function(e){if(e instanceof b.Nothing)return o.bind(D.bindAff)(N.liftEffect(D.monadEffectAff)(P.read(a)))(function(e){if(e instanceof b.Nothing)return i.throwError(D.monadThrowAff)(M.error("Timeout"));if(e instanceof b.Just)return p.either(i.throwError(D.monadThrowAff))(u.pure(D.applicativeAff))(e.value0);throw new Error("Failed pattern match at Affjax (line 201, column 11 - line 203, column 61): "+[e.constructor.name])});if(e instanceof b.Just)return u.pure(D.applicativeAff)(e.value0);throw new Error("Failed pattern match at Affjax (line 198, column 7 - line 204, column 31): "+[e.constructor.name])});throw new Error("Failed pattern match at Affjax (line 194, column 3 - line 204, column 31): "+[e.timeout.constructor.name])})}}},_=function(i){var d,y=function(){if(i.responseFormat instanceof r.ArrayBuffer)return J.unsafeReadTagged("ArrayBuffer");if(i.responseFormat instanceof r.Blob)return J.unsafeReadTagged("Blob");if(i.responseFormat instanceof r.Document)return J.unsafeReadTagged("Document");if(i.responseFormat instanceof r.Json)return o.composeKleisliFlipped(f.bindExceptT(j.monadIdentity))(function(e){return i.responseFormat.value0(""===(t=e)?u.pure(f.applicativeExceptT(j.monadIdentity))(c.jsonEmptyObject):p.either(function(e){return J.fail(J.ForeignError.create(e))})(u.pure(f.applicativeExceptT(j.monadIdentity)))(l.jsonParser(t)));var t})(J.unsafeReadTagged("String"));if(i.responseFormat instanceof r.String)return J.unsafeReadTagged("String");if(i.responseFormat instanceof r.Ignore)return v.const(i.responseFormat.value0(u.pure(f.applicativeExceptT(j.monadIdentity))(R.unit)));throw new Error("Failed pattern match at Affjax (line 294, column 19 - line 300, column 57): "+[i.responseFormat.constructor.name])}(),E=function(e){return function(t){return e instanceof b.Just&&!w.any(w.foldableArray)(T.heytingAlgebraBoolean)(v.on(h.eq(h.eqString))(n.name)(e.value0))(t)?m.snoc(t)(e.value0):t}},C={method:g.print(i.method),url:i.url,headers:A.map(A.functorArray)(function(e){return{field:n.name(e),value:n.value(e)}})((d=i.content,E(A.map(b.functorMaybe)(n.ContentType.create)(o.bindFlipped(b.bindMaybe)(t.toMediaType)(d)))(E(A.map(b.functorMaybe)(n.Accept.create)(r.toMediaType(i.responseFormat)))(i.headers)))),content:q.toNullable(A.map(b.functorMaybe)(function(e){if(e instanceof t.ArrayView)return e.value0(J.unsafeToForeign);if(e instanceof t.Blob)return J.unsafeToForeign(e.value0);if(e instanceof t.Document)return J.unsafeToForeign(e.value0);if(e instanceof t.String)return J.unsafeToForeign(e.value0);if(e instanceof t.FormData)return J.unsafeToForeign(e.value0);if(e instanceof t.FormURLEncoded)return J.unsafeToForeign(x.encode(e.value0));if(e instanceof t.Json)return J.unsafeToForeign(c.stringify(e.value0));throw new Error("Failed pattern match at Affjax (line 268, column 20 - line 275, column 57): "+[e.constructor.name])})(i.content)),responseType:r.toResponseType(i.responseFormat),username:q.toNullable(i.username),password:q.toNullable(i.password),withCredentials:i.withCredentials};return o.bind(D.bindAff)(L.fromEffectFnAff(e._ajax(a.ResponseHeader.create,C)))(function(e){var t=s.runExcept(y(e.body));if(t instanceof p.Left)return u.pure(D.applicativeAff)({body:new p.Left(new r.ResponseFormatError(F.head(t.value0),e.body)),headers:e.headers,status:e.status,statusText:e.statusText});if(t instanceof p.Right)return u.pure(D.applicativeAff)({body:new p.Right(t.value0),headers:e.headers,status:e.status,statusText:e.statusText});throw new Error("Failed pattern match at Affjax (line 248, column 3 - line 252, column 39): "+[t.constructor.name])})},H={timeout:b.Nothing.value,delayCurve:function(e){return C.Milliseconds(E.max(E.ordNumber)(3e4)(100*S.pow(2)(y.toNumber(e-1|0))))},shouldRetryWithStatusCode:v.const(!1)},I={method:new p.Left(g.GET.value),url:"/",headers:[],content:b.Nothing.value,username:b.Nothing.value,password:b.Nothing.value,withCredentials:!1,responseFormat:r.ignore},U=function(e){return function(t){return _({method:new p.Left(g.DELETE.value),url:t,headers:I.headers,content:I.content,username:I.username,password:I.password,withCredentials:I.withCredentials,responseFormat:e})}},O=function(){var e=A.map(D.functorAff)(function(e){return{body:R.unit,headers:e.headers,status:e.status,statusText:e.statusText}}),t=U(r.ignore);return function(n){return e(t(n))}}(),W=function(e){return function(t){return _({method:I.method,url:t,headers:I.headers,content:I.content,username:I.username,password:I.password,withCredentials:I.withCredentials,responseFormat:e})}},G=function(e){return function(t){return function(n){return _({method:new p.Left(g.PATCH.value),url:t,headers:I.headers,content:new b.Just(n),username:I.username,password:I.password,withCredentials:I.withCredentials,responseFormat:e})}}},K=function(e){var t=A.map(D.functorAff)(function(e){return{body:R.unit,headers:e.headers,status:e.status,statusText:e.statusText}}),n=G(r.ignore)(e);return function(e){return t(n(e))}},V=function(e){return function(t){return function(n){return _({method:new p.Left(g.PATCH.value),url:t,headers:I.headers,content:n,username:I.username,password:I.password,withCredentials:I.withCredentials,responseFormat:e})}}},k=function(e){var t=A.map(D.functorAff)(function(e){return{body:R.unit,headers:e.headers,status:e.status,statusText:e.statusText}}),n=V(r.ignore)(e);return function(e){return t(n(e))}},z=function(e){return function(t){return function(n){return _({method:new p.Left(g.POST.value),url:t,headers:I.headers,content:new b.Just(n),username:I.username,password:I.password,withCredentials:I.withCredentials,responseFormat:e})}}},Q=function(e){var t=A.map(D.functorAff)(function(e){return{body:R.unit,headers:e.headers,status:e.status,statusText:e.statusText}}),n=z(r.ignore)(e);return function(e){return t(n(e))}},X=function(e){return function(t){return function(n){return _({method:new p.Left(g.POST.value),url:t,headers:I.headers,content:n,username:I.username,password:I.password,withCredentials:I.withCredentials,responseFormat:e})}}},Y=function(e){var t=A.map(D.functorAff)(function(e){return{body:R.unit,headers:e.headers,status:e.status,statusText:e.statusText}}),n=X(r.ignore)(e);return function(e){return t(n(e))}},Z=function(e){return function(t){return function(n){return _({method:new p.Left(g.PUT.value),url:t,headers:I.headers,content:new b.Just(n),username:I.username,password:I.password,withCredentials:I.withCredentials,responseFormat:e})}}},$=function(e){var t=A.map(D.functorAff)(function(e){return{body:R.unit,headers:e.headers,status:e.status,statusText:e.statusText}}),n=Z(r.ignore)(e);return function(e){return t(n(e))}},ee=function(e){return function(t){return function(n){return _({method:new p.Left(g.PUT.value),url:t,headers:I.headers,content:n,username:I.username,password:I.password,withCredentials:I.withCredentials,responseFormat:e})}}},te=function(e){var t=A.map(D.functorAff)(function(e){return{body:R.unit,headers:e.headers,status:e.status,statusText:e.statusText}}),n=ee(r.ignore)(e);return function(e){return t(n(e))}};module.exports={defaultRequest:I,request:_,get:W,post:z,post_:Q,"post'":X,"post_'":Y,put:Z,put_:$,"put'":ee,"put_'":te,delete:U,delete_:O,patch:G,patch_:K,"patch'":V,"patch_'":k,defaultRetryPolicy:H,retry:B};
+},{"./foreign.js":"sseR","../Affjax.RequestBody/index.js":"TX3z","../Affjax.RequestHeader/index.js":"QBMh","../Affjax.ResponseFormat/index.js":"QSsR","../Affjax.ResponseHeader/index.js":"ev5/","../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Except/index.js":"Fye2","../Control.Monad.Except.Trans/index.js":"gr8B","../Control.Parallel/index.js":"LNK1","../Data.Argonaut.Core/index.js":"pA4l","../Data.Argonaut.Parser/index.js":"QxUV","../Data.Array/index.js":"4t4C","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.FormURLEncoded/index.js":"7T8V","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.HTTP.Method/index.js":"7p2I","../Data.HeytingAlgebra/index.js":"paZe","../Data.Identity/index.js":"2OKT","../Data.Int/index.js":"xNJb","../Data.List.NonEmpty/index.js":"XAY7","../Data.Maybe/index.js":"5mN7","../Data.Nullable/index.js":"YQ8o","../Data.Ord/index.js":"r4Vb","../Data.Time.Duration/index.js":"AnkF","../Data.Unit/index.js":"NhVk","../Effect.Aff/index.js":"I7lu","../Effect.Aff.Compat/index.js":"z+2M","../Effect.Class/index.js":"dWtH","../Effect.Exception/index.js":"0OCW","../Effect.Ref/index.js":"/Jaj","../Foreign/index.js":"pu1p","../Math/index.js":"Rpaz"}],"cxC4":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Data.Array/index.js"),e=require("../Data.Array.NonEmpty/index.js"),t=require("../Data.Eq/index.js"),u=require("../Data.Functor/index.js"),i=require("../Data.Identity/index.js"),o=require("../Data.Lens.Internal.Wander/index.js"),a=require("../Data.Map.Internal/index.js"),c=require("../Data.Maybe/index.js"),f=require("../Data.Set/index.js"),d=require("../Data.Traversable/index.js"),p=require("../Foreign.Object/index.js"),x=function(n){this.ix=n},s=function(n){return n.ix},y=function(r){return new x(function(e){return function(t){return o.wander(t)(function(t){return function(u){var i=n.pure(t),o=f.insert(r)(e);return function(n){return i(o(n))}}})}})},l=new x(function(r){return function(t){return o.wander(t)(function(t){return function(i){return function(o){return c.maybe(n.pure(t)(o))((a=u.map(t.Apply0().Functor0())(function(n){return c.fromMaybe(o)(e.updateAt(r)(n)(o))}),function(n){return a(i(n))}))(e.index(o)(r));var a}}})}}),w=new x(function(n){return function(n){return o.wander(n)(function(n){return d.traverse(d.traversableMaybe)(n)})}}),b=function(r){return new x(function(e){return function(t){return o.wander(t)(function(t){return function(i){return function(o){return c.maybe(n.pure(t)(o))((f=u.map(t.Apply0().Functor0())(function(n){return a.insert(r)(e)(n)(o)}),function(n){return f(i(n))}))(a.lookup(r)(e)(o));var f}}})}})},j=new x(function(n){return function(n){return o.wander(n)(function(n){return d.traverse(i.traversableIdentity)(n)})}}),m=new x(function(r){return function(e){return o.wander(e)(function(e){return function(t){return function(i){return c.maybe(n.pure(e)(i))((o=u.map(e.Apply0().Functor0())(function(n){return p.insert(r)(n)(i)}),function(n){return o(t(n))}))(p.lookup(r)(i));var o}}})}}),q=new x(function(e){return function(t){return o.wander(t)(function(t){return function(i){return function(o){return c.maybe(n.pure(t)(o))((a=u.map(t.Apply0().Functor0())(function(n){return c.fromMaybe(o)(r.updateAt(e)(n)(o))}),function(n){return a(i(n))}))(r.index(o)(e));var a}}})}}),A=function(n){return new x(function(r){return function(e){return o.wander(e)(function(e){return function(i){return function(o){return u.mapFlipped(e.Apply0().Functor0())(i(o(r)))(function(e){return function(u){return t.eq(n)(r)(u)?e:o(u)}})}}})}})};module.exports={Index:x,ix:s,indexArr:A,indexMaybe:w,indexIdentity:j,indexArray:q,indexNonEmptyArray:l,indexSet:y,indexMap:b,indexForeignObject:m};
+},{"../Control.Applicative/index.js":"qYya","../Data.Array/index.js":"4t4C","../Data.Array.NonEmpty/index.js":"eTKN","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Identity/index.js":"2OKT","../Data.Lens.Internal.Wander/index.js":"i7fd","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Set/index.js":"+Eae","../Data.Traversable/index.js":"n7EE","../Foreign.Object/index.js":"jsiz"}],"kMIS":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),t=require("../Data.Either/index.js"),r=require("../Data.Eq/index.js"),u=require("../Data.Foldable/index.js"),i=require("../Data.Function/index.js"),o=require("../Data.Functor/index.js"),c=require("../Data.Monoid/index.js"),a=require("../Data.Newtype/index.js"),f=require("../Data.Ord/index.js"),l=require("../Data.Semigroup/index.js"),p=require("../Data.Show/index.js"),s=require("../Data.Traversable/index.js"),d=function(n){return n},m=function(n){return function(e){return function(r){if(r instanceof t.Left)return n(r.value0);if(r instanceof t.Right)return e(r.value0);throw new Error("Failed pattern match at Data.Validation.Semigroup (line 47, column 1 - line 47, column 77): "+[n.constructor.name,e.constructor.name,r.constructor.name])}}},w=function(n){return n},h=function(n){return function(e){return new p.Show(function(r){if(r instanceof t.Left)return"invalid ("+p.show(n)(r.value0)+")";if(r instanceof t.Right)return"pure ("+p.show(e)(r.value0)+")";throw new Error("Failed pattern match at Data.Validation.Semigroup (line 80, column 10 - line 82, column 55): "+[r.constructor.name])})}},q=new a.Newtype(function(n){return n},d),v=function(n){return n instanceof t.Right},V=function(n){return d(t.Left.create(n))},g=t.functorEither,E=new u.Foldable(function(n){return m(i.const(c.mempty(n)))},function(n){return function(e){return m(i.const(e))(n(e))}},function(n){return function(e){return m(i.const(e))(i.flip(n)(e))}}),x=new s.Traversable(function(){return E},function(){return g},function(e){return m((r=n.pure(e),function(n){return r(d(t.Left.create(n)))}))(o.map(e.Apply0().Functor0())(function(n){return d(t.Right.create(n))}));var r},function(e){return function(r){return m((i=n.pure(e),function(n){return i(d(t.Left.create(n)))}))((u=o.map(e.Apply0().Functor0())(function(n){return d(t.Right.create(n))}),function(n){return u(r(n))}));var u,i}}),D=function(n){return function(e){return new r.Eq(function(u){return function(i){return r.eq(t.eqEither(n)(e))(u)(i)}})}},j=function(n){return function(e){return new f.Ord(function(){return D(n.Eq0())(e.Eq0())},function(r){return function(u){return f.compare(t.ordEither(n)(e))(r)(u)}})}},L=function(n){return new r.Eq1(function(e){return r.eq(D(n)(e))})},y=function(n){return new f.Ord1(function(){return L(n.Eq0())},function(e){return f.compare(j(n)(e))})},F=t.bifunctorEither,R=function(n){return new e.Apply(function(){return g},function(e){return function(r){if(e instanceof t.Left&&r instanceof t.Left)return new t.Left(l.append(n)(e.value0)(r.value0));if(e instanceof t.Left)return new t.Left(e.value0);if(r instanceof t.Left)return new t.Left(r.value0);if(e instanceof t.Right&&r instanceof t.Right)return new t.Right(e.value0(r.value0));throw new Error("Failed pattern match at Data.Validation.Semigroup (line 88, column 1 - line 92, column 54): "+[e.constructor.name,r.constructor.name])}})},b=function(n){return function(t){return new l.Semigroup(e.lift2(R(n))(l.append(t)))}},S=function(e){return new n.Applicative(function(){return R(e)},function(n){return d(t.Right.create(n))})},A=function(e){return function(t){return new c.Monoid(function(){return b(e)(t.Semigroup0())},n.pure(S(e))(c.mempty(t)))}},O=function(n){return function(e){return m(V)(e)(n)}};module.exports={V:d,unV:m,invalid:V,isValid:v,toEither:w,andThen:O,newtypeV:q,eqV:D,eq1V:L,ordV:j,ord1V:y,showV:h,functorV:g,bifunctorV:F,applyV:R,applicativeV:S,semigroupV:b,monoidV:A,foldableV:E,traversableV:x};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Semigroup/index.js":"EsAJ","../Data.Show/index.js":"mFY7","../Data.Traversable/index.js":"n7EE"}],"UuEA":[function(require,module,exports) {
+var process = require("process");
+var e=require("process"),r=require("../Affjax/index.js"),n=require("../Affjax.ResponseFormat/index.js"),t=require("../Control.Applicative/index.js"),i=require("../Control.Apply/index.js"),a=require("../Control.Bind/index.js"),o=require("../Control.Monad.Error.Class/index.js"),u=require("../Control.Monad.Except/index.js"),s=require("../Data.Array/index.js"),d=require("../Data.BigInt/index.js"),p=require("../Data.Either/index.js"),c=require("../Data.Filterable/index.js"),l=require("../Data.Foldable/index.js"),f=require("../Data.Functor/index.js"),m=require("../Data.Int/index.js"),g=require("../Data.Lens.Fold/index.js"),y=require("../Data.Lens.Index/index.js"),b=require("../Data.Lens.Internal.Forget/index.js"),S=require("../Data.List/index.js"),h=require("../Data.List.Types/index.js"),x=require("../Data.Map.Internal/index.js"),w=require("../Data.Maybe/index.js"),E=require("../Data.Maybe.First/index.js"),v=require("../Data.Monoid/index.js"),j=require("../Data.Newtype/index.js"),q=require("../Data.Pair/index.js"),F=require("../Data.String.CodePoints/index.js"),I=require("../Data.String.Common/index.js"),L=require("../Data.String.Pattern/index.js"),C=require("../Data.Symbol/index.js"),N=require("../Data.Time.Duration/index.js"),D=require("../Data.Traversable/index.js"),k=require("../Data.Tuple/index.js"),A=require("../Data.Unfoldable/index.js"),B=require("../Data.Validation.Semigroup/index.js"),V=require("../Effect.Aff/index.js"),M=require("../Effect.Exception/index.js"),P=require("../Foreign/index.js"),T=require("../Genetics.Browser/index.js"),R=require("../Genetics.Browser.Coordinates/index.js"),z=require("../Genetics.Browser.Types/index.js"),G=require("../Simple.JSON/index.js"),J=function(e){var r=m.fromString(e);if(r instanceof w.Nothing)return B.invalid(t.pure(h.applicativeNonEmptyList)("Error parsing int "+e));if(r instanceof w.Just)return t.pure(B.applicativeV(h.semigroupNonEmptyList))(r.value0);throw new Error("Failed pattern match at Genetics.Browser.Bed (line 98, column 14 - line 100, column 20): "+[r.constructor.name])},O=function(){var e=t.pure(B.applicativeV(h.semigroupNonEmptyList)),r=j.wrap(z.newtypeChrId),n=F.drop(3);return function(t){return e(r(n(t)))}}(),U=function(e){var r=d.fromString(e);if(r instanceof w.Nothing)return B.invalid(t.pure(h.applicativeNonEmptyList)("Error parsing int "+e));if(r instanceof w.Just)return t.pure(B.applicativeV(h.semigroupNonEmptyList))(r.value0);throw new Error("Failed pattern match at Genetics.Browser.Bed (line 103, column 17 - line 105, column 20): "+[r.constructor.name])},W=function(e){return D.traverse(D.traversableArray)(B.applicativeV(h.semigroupNonEmptyList))(U)(I.split(j.wrap(L.newtypePattern)(","))(e))},_=function(e){return i.apply(B.applyV(h.semigroupNonEmptyList))(i.apply(B.applyV(h.semigroupNonEmptyList))(i.apply(B.applyV(h.semigroupNonEmptyList))(i.apply(B.applyV(h.semigroupNonEmptyList))(i.apply(B.applyV(h.semigroupNonEmptyList))(i.apply(B.applyV(h.semigroupNonEmptyList))(i.apply(B.applyV(h.semigroupNonEmptyList))(i.apply(B.applyV(h.semigroupNonEmptyList))(f.map(B.functorV)(function(r){return function(n){return function(t){return function(i){return function(a){return function(o){return function(u){return function(s){return function(d){return{chrom:r,chromStart:n,chromEnd:t,score:i,thickStart:a,thickEnd:o,blockCount:u,blockSizes:s,blockStarts:d,geneId:e.geneId,geneName:e.geneName,itemRgb:e.itemRgb,name:e.name,strand:e.strand,tags:e.tags,type:e.type}}}}}}}}}})(O(e.chrom)))(U(e.chromStart)))(U(e.chromEnd)))(J(e.score)))(U(e.thickStart)))(U(e.thickEnd)))(J(e.blockCount)))(W(e.blockSizes)))(W(e.blockStarts))},H=function(e){return function(r){return a.bind(w.bindMaybe)(g.previewOn(e)((n=R._Segments(b.strongForget),i=y.ix(y.indexMap(z.ordChrId))(r.chrom)(b.wanderForget(E.monoidFirst)),function(e){return n(i(e))})))(function(e){var n,i=(n=j.wrap(z.newtypeBp),function(e){return n(d.toNumber(e))}),a=f.map(q.functorPair)(i)(new q.Pair(r.thickStart,r.thickEnd)),o=f.map(q.functorPair)(i)(new q.Pair(r.chromStart,r.chromEnd)),u=i(R.pairSize(d.ringBigInt)(e)),p=s.zipWith(function(e){return function(r){return f.map(q.functorPair)(i)(new q.Pair(e,r))}})(r.blockStarts)(r.blockSizes);return t.pure(w.applicativeMaybe)({position:o,frameSize:u,feature:{thickRange:a,blocks:p,geneId:r.geneId,geneName:r.geneName,chrId:r.chrom}})});var n,i}},K=function(e){return function(r){return a.bind(p.bindEither)(G.read(G.readRecord()(G.readFieldsCons(new C.IsSymbol(function(){return"blockCount"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"blockSizes"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"blockStarts"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"chrom"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"chromEnd"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"chromStart"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"geneId"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"geneName"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"itemRgb"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"name"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"score"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"strand"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"tags"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"thickEnd"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"thickStart"}))(G.readString)(G.readFieldsCons(new C.IsSymbol(function(){return"type"}))(G.readString)(G.readFieldsNil)()())()())()())()())()())()())()())()())()())()())()())()())()())()())()())()()))(r))(function(r){return a.bind(p.bindEither)(B.unV((n=f.map(h.functorNonEmptyList)(P.ForeignError.create),function(e){return p.Left.create(n(e))}))(t.pure(p.applicativeEither))(_(r)))(function(r){return w.maybe(p.Left.create(t.pure(h.applicativeNonEmptyList)(new P.ForeignError("Error parsing BedFeature"))))(t.pure(p.applicativeEither))(H(e)(r))});var n})}},Q=function(e){return function(i){return a.bind(V.bindAff)(r.get(n.json)(i))(function(r){return a.bind(V.bindAff)(p.either((i=o.throwError(V.monadThrowAff),function(e){return i(M.error(n.printResponseFormatError(e)))}))(t.pure(V.applicativeAff))(r.body))(function(r){var n,i,d=(n=o.throwError(V.monadThrowAff),i=l.foldMap(h.foldableNonEmptyList)(v.monoidString)(function(e){return e+", "}),function(e){return n(M.error(i(e)))});return a.bind(V.bindAff)(function(){var e=u.runExcept(P.readArray(r));if(e instanceof p.Left)return d(f.map(h.functorNonEmptyList)(P.renderForeignError)(e.value0));if(e instanceof p.Right)return t.pure(V.applicativeAff)(e.value0);throw new Error("Failed pattern match at Genetics.Browser.Bed (line 193, column 12 - line 195, column 24): "+[e.constructor.name])}())(function(r){var n=A.unfoldr(h.unfoldableList)(function(e){return S.null(e)?w.Nothing.value:new w.Just(new k.Tuple(S.take(100)(e),S.drop(100)(e)))})(S.fromFoldable(l.foldableArray)(r));return a.bind(V.bindAff)(D.traverse(h.traversableList)(V.applicativeAff)(function(r){return a.discard(a.discardUnit)(V.bindAff)(V.delay(j.wrap(N.newtypeMilliseconds)(.1)))(function(){var n=c.partitionMap(c.filterableList)(K(e))(r);return t.pure(V.applicativeAff)(n.right)})})(n))(function(e){var r=f.map(x.functorMap)(s.fromFoldable(h.foldableList))(T.groupToMap(h.monoidList)(z.ordChrId)(h.foldableList)(h.applicativeList)(function(e){return e.feature.chrId})(S.concat(e)));return t.pure(V.applicativeAff)(r)})})});var i})}};module.exports={validChrId:O,validInt:J,validBigInt:U,validList:W,validLine:_,parseBed:K,bedToFeature:H,getGenes:Q};
+},{"../Affjax/index.js":"IjAr","../Affjax.ResponseFormat/index.js":"QSsR","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Except/index.js":"Fye2","../Data.Array/index.js":"4t4C","../Data.BigInt/index.js":"Zx+T","../Data.Either/index.js":"B2JL","../Data.Filterable/index.js":"6hfS","../Data.Foldable/index.js":"eVDl","../Data.Functor/index.js":"+0AE","../Data.Int/index.js":"xNJb","../Data.Lens.Fold/index.js":"fCig","../Data.Lens.Index/index.js":"cxC4","../Data.Lens.Internal.Forget/index.js":"mj9z","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Maybe.First/index.js":"W/l6","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Pair/index.js":"PpsX","../Data.String.CodePoints/index.js":"mAJY","../Data.String.Common/index.js":"OSrc","../Data.String.Pattern/index.js":"nKWe","../Data.Symbol/index.js":"4oJQ","../Data.Time.Duration/index.js":"AnkF","../Data.Traversable/index.js":"n7EE","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Validation.Semigroup/index.js":"kMIS","../Effect.Aff/index.js":"I7lu","../Effect.Exception/index.js":"0OCW","../Foreign/index.js":"pu1p","../Genetics.Browser/index.js":"X0te","../Genetics.Browser.Coordinates/index.js":"7bYH","../Genetics.Browser.Types/index.js":"HhmG","../Simple.JSON/index.js":"DqNI","process":"UG8G"}],"bDzA":[function(require,module,exports) {
+"use strict";var r=require("../Color/index.js"),g=r.rgb(154)(205)(50),e=r.rgb(255)(255)(0),b=r.rgb(245)(245)(245),l=r.rgb(245)(222)(179),a=r.rgb(238)(130)(238),i=r.rgb(64)(224)(208),o=r.rgb(255)(99)(71),n=r.rgb(216)(191)(216),d=r.rgb(0)(128)(128),t=r.rgb(210)(180)(140),u=r.rgb(70)(130)(180),s=r.rgb(0)(255)(127),m=r.rgb(255)(250)(250),h=r.rgb(112)(128)(144),y=r.rgb(112)(128)(144),k=r.rgb(106)(90)(205),c=r.rgb(135)(206)(235),p=r.rgb(192)(192)(192),w=r.rgb(160)(82)(45),v=r.rgb(255)(245)(238),q=r.rgb(46)(139)(87),f=r.rgb(244)(164)(96),j=r.rgb(250)(128)(114),x=r.rgb(139)(69)(19),z=r.rgb(65)(105)(225),C=r.rgb(188)(143)(143),A=r.rgb(255)(0)(0),B=r.rgb(128)(0)(128),D=r.rgb(176)(224)(230),E=r.rgb(221)(160)(221),F=r.rgb(255)(192)(203),G=r.rgb(205)(133)(63),H=r.rgb(255)(218)(185),I=r.rgb(255)(239)(213),J=r.rgb(219)(112)(147),K=r.rgb(175)(238)(238),L=r.rgb(152)(251)(152),M=r.rgb(238)(232)(170),N=r.rgb(218)(112)(214),O=r.rgb(255)(69)(0),P=r.rgb(255)(165)(0),Q=r.rgb(107)(142)(35),R=r.rgb(128)(128)(0),S=r.rgb(253)(245)(230),T=r.rgb(0)(0)(128),U=r.rgb(255)(222)(173),V=r.rgb(255)(228)(181),W=r.rgb(255)(228)(225),X=r.rgb(245)(255)(250),Y=r.rgb(25)(25)(112),Z=r.rgb(199)(21)(133),$=r.rgb(72)(209)(204),_=r.rgb(0)(250)(154),rr=r.rgb(123)(104)(238),gr=r.rgb(60)(179)(113),er=r.rgb(147)(112)(219),br=r.rgb(186)(85)(211),lr=r.rgb(0)(0)(205),ar=r.rgb(102)(205)(170),ir=r.rgb(128)(0)(0),or=r.rgb(255)(0)(255),nr=r.rgb(250)(240)(230),dr=r.rgb(50)(205)(50),tr=r.rgb(0)(255)(0),ur=r.rgb(255)(255)(224),sr=r.rgb(176)(196)(222),mr=r.rgb(119)(136)(153),hr=r.rgb(119)(136)(153),yr=r.rgb(135)(206)(250),kr=r.rgb(32)(178)(170),cr=r.rgb(255)(160)(122),pr=r.rgb(255)(182)(193),wr=r.rgb(211)(211)(211),vr=r.rgb(144)(238)(144),qr=r.rgb(211)(211)(211),fr=r.rgb(250)(250)(210),jr=r.rgb(224)(255)(255),xr=r.rgb(240)(128)(128),zr=r.rgb(173)(216)(230),Cr=r.rgb(255)(250)(205),Ar=r.rgb(124)(252)(0),Br=r.rgb(255)(240)(245),Dr=r.rgb(230)(230)(250),Er=r.rgb(240)(230)(140),Fr=r.rgb(255)(255)(240),Gr=r.rgb(75)(0)(130),Hr=r.rgb(205)(92)(92),Ir=r.rgb(255)(105)(180),Jr=r.rgb(240)(255)(240),Kr=r.rgb(128)(128)(128),Lr=r.rgb(173)(255)(47),Mr=r.rgb(0)(128)(0),Nr=r.rgb(128)(128)(128),Or=r.rgb(218)(165)(32),Pr=r.rgb(255)(215)(0),Qr=r.rgb(248)(248)(255),Rr=r.rgb(220)(220)(220),Sr=r.rgb(255)(0)(255),Tr=r.rgb(34)(139)(34),Ur=r.rgb(255)(250)(240),Vr=r.rgb(178)(34)(34),Wr=r.rgb(30)(144)(255),Xr=r.rgb(105)(105)(105),Yr=r.rgb(105)(105)(105),Zr=r.rgb(0)(191)(255),$r=r.rgb(255)(20)(147),_r=r.rgb(148)(0)(211),rg=r.rgb(0)(206)(209),gg=r.rgb(47)(79)(79),eg=r.rgb(47)(79)(79),bg=r.rgb(72)(61)(139),lg=r.rgb(143)(188)(143),ag=r.rgb(233)(150)(122),ig=r.rgb(139)(0)(0),og=r.rgb(153)(50)(204),ng=r.rgb(255)(140)(0),dg=r.rgb(85)(107)(47),tg=r.rgb(139)(0)(139),ug=r.rgb(189)(183)(107),sg=r.rgb(169)(169)(169),mg=r.rgb(0)(100)(0),hg=r.rgb(169)(169)(169),yg=r.rgb(184)(134)(11),kg=r.rgb(0)(139)(139),cg=r.rgb(0)(0)(139),pg=r.rgb(0)(255)(255),wg=r.rgb(220)(20)(60),vg=r.rgb(255)(248)(220),qg=r.rgb(100)(149)(237),fg=r.rgb(255)(127)(80),jg=r.rgb(210)(105)(30),xg=r.rgb(127)(255)(0),zg=r.rgb(95)(158)(160),Cg=r.rgb(222)(184)(135),Ag=r.rgb(165)(42)(42),Bg=r.rgb(138)(43)(226),Dg=r.rgb(0)(0)(255),Eg=r.rgb(255)(235)(205),Fg=r.rgb(255)(228)(196),Gg=r.rgb(245)(245)(220),Hg=r.rgb(240)(255)(255),Ig=r.rgb(127)(255)(212),Jg=r.rgb(0)(255)(255),Kg=r.rgb(250)(235)(215),Lg=r.rgb(240)(248)(255);module.exports={aliceblue:Lg,antiquewhite:Kg,aqua:Jg,aquamarine:Ig,azure:Hg,beige:Gg,bisque:Fg,blanchedalmond:Eg,blue:Dg,blueviolet:Bg,brown:Ag,burlywood:Cg,cadetblue:zg,chartreuse:xg,chocolate:jg,coral:fg,cornflowerblue:qg,cornsilk:vg,crimson:wg,cyan:pg,darkblue:cg,darkcyan:kg,darkgoldenrod:yg,darkgray:hg,darkgreen:mg,darkgrey:sg,darkkhaki:ug,darkmagenta:tg,darkolivegreen:dg,darkorange:ng,darkorchid:og,darkred:ig,darksalmon:ag,darkseagreen:lg,darkslateblue:bg,darkslategray:eg,darkslategrey:gg,darkturquoise:rg,darkviolet:_r,deeppink:$r,deepskyblue:Zr,dimgray:Yr,dimgrey:Xr,dodgerblue:Wr,firebrick:Vr,floralwhite:Ur,forestgreen:Tr,fuchsia:Sr,gainsboro:Rr,ghostwhite:Qr,gold:Pr,goldenrod:Or,gray:Nr,green:Mr,greenyellow:Lr,grey:Kr,honeydew:Jr,hotpink:Ir,indianred:Hr,indigo:Gr,ivory:Fr,khaki:Er,lavender:Dr,lavenderblush:Br,lawngreen:Ar,lemonchiffon:Cr,lightblue:zr,lightcoral:xr,lightcyan:jr,lightgoldenrodyellow:fr,lightgray:qr,lightgreen:vr,lightgrey:wr,lightpink:pr,lightsalmon:cr,lightseagreen:kr,lightskyblue:yr,lightslategray:hr,lightslategrey:mr,lightsteelblue:sr,lightyellow:ur,lime:tr,limegreen:dr,linen:nr,magenta:or,maroon:ir,mediumaquamarine:ar,mediumblue:lr,mediumorchid:br,mediumpurple:er,mediumseagreen:gr,mediumslateblue:rr,mediumspringgreen:_,mediumturquoise:$,mediumvioletred:Z,midnightblue:Y,mintcream:X,mistyrose:W,moccasin:V,navajowhite:U,navy:T,oldlace:S,olive:R,olivedrab:Q,orange:P,orangered:O,orchid:N,palegoldenrod:M,palegreen:L,paleturquoise:K,palevioletred:J,papayawhip:I,peachpuff:H,peru:G,pink:F,plum:E,powderblue:D,purple:B,red:A,rosybrown:C,royalblue:z,saddlebrown:x,salmon:j,sandybrown:f,seagreen:q,seashell:v,sienna:w,silver:p,skyblue:c,slateblue:k,slategray:y,slategrey:h,snow:m,springgreen:s,steelblue:u,tan:t,teal:d,thistle:n,tomato:o,turquoise:i,violet:a,wheat:l,whitesmoke:b,yellow:e,yellowgreen:g};
+},{"../Color/index.js":"f3ma"}],"RTVM":[function(require,module,exports) {
+"use strict";var r=require("../Data.Profunctor.Strong/index.js"),t=function(t){return r.second(t)},n=function(t){return r.first(t)};module.exports={_1:n,_2:t};
+},{"../Data.Profunctor.Strong/index.js":"w9p6"}],"3sXk":[function(require,module,exports) {
+"use strict";exports.unsafeKeys=Object.keys||function(e){var r=[];for(var t in e)Object.prototype.hasOwnProperty.call(e,t)&&r.push(t);return r};
+},{}],"hcOM":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),i=require("../Control.Applicative/index.js"),n=require("../Control.Monad.Except.Trans/index.js"),r=require("../Data.Boolean/index.js"),t=require("../Data.Identity/index.js"),o=require("../Foreign/index.js"),a=function(a){if(o.isNull(a))return o.fail(new o.TypeMismatch("object","null"));if(o.isUndefined(a))return o.fail(new o.TypeMismatch("object","undefined"));if("object"===o.typeOf(a))return i.pure(n.applicativeExceptT(t.monadIdentity))(e.unsafeKeys(a));if(r.otherwise)return o.fail(new o.TypeMismatch("object",o.typeOf(a)));throw new Error("Failed pattern match at Foreign.Keys (line 15, column 1 - line 15, column 36): "+[a.constructor.name])};module.exports={keys:a};
+},{"./foreign.js":"3sXk","../Control.Applicative/index.js":"qYya","../Control.Monad.Except.Trans/index.js":"gr8B","../Data.Boolean/index.js":"ObQr","../Data.Identity/index.js":"2OKT","../Foreign/index.js":"pu1p"}],"OuXj":[function(require,module,exports) {
+"use strict";exports.pickFn=function(r,t){for(var n={},e=0;e<r.length;e++)n[r[e]]=t[r[e]];return n};
+},{}],"KzZr":[function(require,module,exports) {
+"use strict";var n=require("./foreign.js"),r=require("../Control.Applicative/index.js"),e=require("../Control.Apply/index.js"),u=require("../Control.Category/index.js"),t=require("../Control.Semigroupoid/index.js"),o=require("../Data.Array/index.js"),i=require("../Data.Function.Uncurried/index.js"),c=require("../Data.Functor/index.js"),f=require("../Data.List.Types/index.js"),a=require("../Data.Monoid/index.js"),l=require("../Data.Ord/index.js"),d=require("../Data.Ordering/index.js"),s=require("../Data.Symbol/index.js"),p=require("../Data.Tuple/index.js"),y=require("../Record/index.js"),R=require("../Record.Builder/index.js"),x=require("../Type.Data.Row/index.js"),m=require("../Type.Data.RowList/index.js"),v=function(){function n(){}return n.value=new n,n}(),P=function(n){this.zipRecordImpl=n},q=function(n,r){this.Functor0=n,this.sequenceRecordImpl=r},S={},L=function(n){this.compareRecordImpl=n},g=function(n){this.mapRecordBuilder=n},j=function(n){this.keysImpl=n},w=new P(function(n){return function(n){return function(n){return function(n){return u.identity(R.categoryBuilder)}}}}),F=function(n){return n.zipRecordImpl},I=function(n){return function(r){return function(e){return function(u){return function(o){return function(i){return new P(function(c){return function(c){return function(f){return function(f){var a=F(i)(m.RLProxy.value)(c)(m.RLProxy.value)(f),l=new p.Tuple(y.get(n)(r)(s.SProxy.value)(c),y.get(n)(e)(s.SProxy.value)(f)),d=R.insert(u)(o)(n)(s.SProxy.value)(l);return t.compose(R.semigroupoidBuilder)(d)(a)}}}})}}}}}},C=function(n){return function(n){return function(n){return function(r){return function(e){var u=F(n)(m.RLProxy.value)(r)(m.RLProxy.value)(e);return R.build(u)({})}}}}},D=S,B=function(n){return S},k=function(n){return function(r){return function(e){return function(u){return function(t){return new q(function(){return e},function(o){return function(o){var i=y.get(n)(r)(s.SProxy.value)(o);return c.map(e)(R.insert(t)(u)(n)(s.SProxy.value))(i)}})}}}}},T=function(n){return new q(n.Apply0().Functor0,function(e){return function(e){return r.pure(n)(u.identity(R.categoryBuilder))}})},b=function(n){return n.sequenceRecordImpl},h=function(n){return function(r){return function(u){return function(o){return function(i){return function(f){return new q(u.Functor0,function(a){return function(a){var l=b(o)(m.RLProxy.value)(a),d=y.get(n)(r)(s.SProxy.value)(a);return e.apply(u)(c.map(u.Functor0())(function(r){return function(e){return t.compose(R.semigroupoidBuilder)(R.insert(f)(i)(n)(s.SProxy.value)(r))(e)}})(d))(l)}})}}}}}},z=function(n){return function(n){return function(r){var e=b(n)(m.RLProxy.value)(r);return c.map(n.Functor0())(c.flap(c.functorFn)(R.build)({}))(e)}}},N=new L(function(n){return function(n){return function(n){return d.EQ.value}}}),A=new j(function(n){return a.mempty(f.monoidList)}),K=new g(function(n){return function(n){return function(n){return u.identity(R.categoryBuilder)}}}),O=function(n){return n.mapRecordBuilder},E=function(n){return function(r){return function(e){return function(u){return function(o){return new g(function(i){return function(i){return function(c){var f=O(e)(m.RLProxy.value)(i)(c),a=i(y.get(n)(r)(s.SProxy.value)(c)),l=R.insert(o)(u)(n)(s.SProxy.value)(a);return t.compose(R.semigroupoidBuilder)(l)(f)}}})}}}}},M=function(n){return function(n){return function(r){return function(e){var u=O(n)(m.RLProxy.value)(r)(e);return R.build(u)({})}}}},Q=function(n){return n.keysImpl},U=function(n){return function(n){return function(r){return Q(n)(m.RLProxy.value)}}},Z=function(n){return function(n){return function(r){return Q(n)(m.RLProxy.value)}}},G=function(r){return function(r){return function(e){var u=o.fromFoldable(f.foldableList)(Z(r)(e)(x.RProxy.value));return i.runFn2(n.pickFn)(u)}}},H=function(n){return function(r){return new j(function(e){var u=Q(r)(m.RLProxy.value),t=s.reflectSymbol(n)(s.SProxy.value);return new f.Cons(t,u)})}},J=function(n){return n.compareRecordImpl},V=function(n){return function(r){return function(e){return function(u){return new L(function(t){return function(t){return function(o){var i=y.get(n)(e)(s.SProxy.value)(t),c=y.get(n)(e)(s.SProxy.value)(o),f=l.compare(r)(i)(c);return f instanceof d.EQ?J(u)(m.RLProxy.value)(t)(o):f}}})}}}},W=function(n){return function(n){return function(r){return function(e){return J(n)(m.RLProxy.value)(r)(e)}}}};module.exports={compareRecordImpl:J,keysImpl:Q,mapRecordBuilder:O,sequenceRecordImpl:b,zipRecordImpl:F,mapRecord:M,MapRecord:g,ZipRecord:P,zipRecord:C,Keys:j,keys:Z,pick:G,slistKeys:U,SLProxy:v,SListToRowList:S,OrdRecord:L,compareRecord:W,SequenceRecord:q,sequenceRecord:z,mapRecordCons:E,mapRecordNil:K,zipRecordNil:w,zipRecordCons:I,nilKeys:A,consKeys:H,slToRlSNil:D,slToRlSCons:B,ordRecordCons:V,ordRecordNil:N,sequenceRecordSingle:k,sequenceRecordCons:h,sequenceRecordNil:T,pickFn:n.pickFn};
+},{"./foreign.js":"OuXj","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Category/index.js":"IAi2","../Control.Semigroupoid/index.js":"/riR","../Data.Array/index.js":"4t4C","../Data.Function.Uncurried/index.js":"TowT","../Data.Functor/index.js":"+0AE","../Data.List.Types/index.js":"Xxuc","../Data.Monoid/index.js":"TiEB","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Symbol/index.js":"4oJQ","../Data.Tuple/index.js":"II/O","../Record/index.js":"0gG4","../Record.Builder/index.js":"VeY4","../Type.Data.Row/index.js":"ukdD","../Type.Data.RowList/index.js":"XaXP"}],"mKwt":[function(require,module,exports) {
+"use strict";var e=require("../Affjax/index.js"),n=require("../Affjax.ResponseFormat/index.js"),r=require("../Color/index.js"),t=require("../Color.Scheme.Clrs/index.js"),i=require("../Color.Scheme.X11/index.js"),o=require("../Control.Applicative/index.js"),a=require("../Control.Bind/index.js"),u=require("../Control.Category/index.js"),f=require("../Control.Monad.Error.Class/index.js"),d=require("../Control.Monad.Except/index.js"),c=require("../Control.Monad.Except.Trans/index.js"),l=require("../Control.Semigroupoid/index.js"),s=require("../Data.Array/index.js"),p=require("../Data.BigInt/index.js"),m=require("../Data.Boolean/index.js"),b=require("../Data.Either/index.js"),y=require("../Data.Eq/index.js"),w=require("../Data.EuclideanRing/index.js"),g=require("../Data.Filterable/index.js"),h=require("../Data.Foldable/index.js"),v=require("../Data.FoldableWithIndex/index.js"),x=require("../Data.Function/index.js"),A=require("../Data.Functor/index.js"),S=require("../Data.FunctorWithIndex/index.js"),C=require("../Data.Identity/index.js"),I=require("../Data.Lens.Getter/index.js"),j=require("../Data.Lens.Internal.Forget/index.js"),q=require("../Data.Lens.Internal.Re/index.js"),E=require("../Data.Lens.Iso/index.js"),L=require("../Data.Lens.Lens.Tuple/index.js"),F=require("../Data.List/index.js"),B=require("../Data.List.Types/index.js"),D=require("../Data.Map.Internal/index.js"),M=require("../Data.Maybe/index.js"),N=require("../Data.Monoid/index.js"),T=require("../Data.Newtype/index.js"),k=require("../Data.Ord/index.js"),P=require("../Data.Pair/index.js"),G=require("../Data.Profunctor.Strong/index.js"),R=require("../Data.Ring/index.js"),O=require("../Data.Semigroup/index.js"),_=require("../Data.Semiring/index.js"),z=require("../Data.Show/index.js"),U=require("../Data.Symbol/index.js"),W=require("../Data.Traversable/index.js"),K=require("../Data.Tuple/index.js"),H=require("../Data.Unfoldable/index.js"),J=require("../Data.Unit/index.js"),X=require("../Data.Variant/index.js"),V=require("../Effect.Aff/index.js"),Y=require("../Effect.Aff.Class/index.js"),Q=require("../Effect.Class/index.js"),Z=require("../Effect.Class.Console/index.js"),$=require("../Effect.Exception/index.js"),ee=require("../Effect.Ref/index.js"),ne=require("../Foreign/index.js"),re=require("../Foreign.Index/index.js"),te=require("../Foreign.Keys/index.js"),ie=require("../Foreign.Object/index.js"),oe=require("../Genetics.Browser/index.js"),ae=require("../Genetics.Browser.Cacher/index.js"),ue=require("../Genetics.Browser.Canvas/index.js"),fe=require("../Genetics.Browser.Coordinates/index.js"),de=require("../Genetics.Browser.Layer/index.js"),ce=require("../Genetics.Browser.Types/index.js"),le=require("../Graphics.Drawing/index.js"),se=require("../Math/index.js"),pe=require("../Record/index.js"),me=require("../Record.Builder/index.js"),be=require("../Record.Extra/index.js"),ye=require("../Simple.JSON/index.js"),we=require("../Type.Equality/index.js"),ge=function(e){return oe.fixedUILayer(de.CLeft.create(oe.drawVScaleInSlot(e)))},he=function(e){return function(n){return a.bind(M.bindMaybe)(h.minimumBy(h.foldableArray)(x.on(k.compare(k.ordNumber))(function(e){return e.feature.score}))(n))(function(r){var t=fe.aroundPair(ce.ringBp)(e)(r.position),i=g.partition(g.filterableArray)(function(e){return fe.pairsOverlap(ce.ordBp)(e.position)(t)})(n);return o.pure(M.applicativeMaybe)(new K.Tuple({covers:t,y:r.feature.score,elements:i.yes},i.no))})}},ve=function(e){return function(n){var r=ie.lookup(n.field)(e);if(r instanceof M.Nothing)return n.field+": "+n.value;if(r instanceof M.Just)return"<a target='_blank' href='"+n.value+"'>"+r.value0+"</a>";throw new Error("Failed pattern match at Genetics.Browser.Demo (line 253, column 3 - line 258, column 26): "+[r.constructor.name])}},xe=function(e){return function(n){var r="Chr: "+z.show(ce.showChrId)(n.feature.chr),t=M.fromMaybe("SNP: "+n.feature.name)(A.map(M.functorMaybe)(function(e){return"Gene: "+e})(n.feature.gene)),i="Pos: "+z.show(ce.showBp)(n.feature.pos);return O.append(B.semigroupList)(F.fromFoldable(h.foldableArray)([t,r,i]))(A.map(B.functorList)(ve(e))(n.feature.rest))}},Ae=function(e){return function(n){return a.bind(M.bindMaybe)(h.minimumBy(h.foldableArray)(x.on(k.compare(k.ordNumber))(function(e){return e.feature.score}))(n))(function(r){var t=fe.aroundPair(ce.ringBp)(e)(r.position),i=g.partition(g.filterableArray)(function(e){return fe.pairsOverlap(ce.ordBp)(e.position)(t)})(n);return o.pure(M.applicativeMaybe)(new K.Tuple({covers:t,y:r.feature.score,elements:i.yes},i.no))})}},Se=function(e){return function(n){return H.unfoldr(H.unfoldableArray)(Ae(e))(n)}},Ce=function(e){return function(n){return a.bind(c.bindExceptT(C.monadIdentity))(ye["read'"](ye.readRecord()(ye.readFieldsCons(new U.IsSymbol(function(){return"chr"}))(ye.readString)(ye.readFieldsCons(new U.IsSymbol(function(){return"p_wald"}))(ye.readNumber)(ye.readFieldsCons(new U.IsSymbol(function(){return"ps"}))(ye.readNumber)(ye.readFieldsCons(new U.IsSymbol(function(){return"rs"}))(ye.readString)(ye.readFieldsNil)()())()())()())()()))(n))(function(n){var r,t=(r=n.ps,A.map(P.functorPair)(T.wrap(ce.newtypeBp))(new P.Pair(r,r))),i={score:n.p_wald,chrId:T.wrap(ce.newtypeChrId)(n.chr),name:n.rs};return a.bind(c.bindExceptT(C.monadIdentity))(function(){var n=D.lookup(ce.ordChrId)(i.chrId)(I.view(fe._Segments(j.strongForget))(e));if(n instanceof M.Nothing)return f.throwError(c.monadThrowExceptT(C.monadIdentity))(o.pure(B.applicativeNonEmptyList)(new ne.ForeignError("Annotation chr not found in coordinate system!")));if(n instanceof M.Just)return o.pure(c.applicativeExceptT(C.monadIdentity))(ce.Bp(p.toNumber(fe.pairSize(p.ringBigInt)(n.value0))));throw new Error("Failed pattern match at Genetics.Browser.Demo (line 173, column 16 - line 179, column 49): "+[n.constructor.name])}())(function(e){return o.pure(c.applicativeExceptT(C.monadIdentity))({position:t,frameSize:e,feature:i})})})}},Ie=function(e){var n=fe.normalize(w.euclideanRingNumber)(e.min)(e.max),r=T.unwrap(ce.newtypeNegLog10),t=I.view(ce._NegLog10(j.profunctorForget));return function(e){return n(r(t(e)))}},je=function(r){return function(t){return a.bind(V.bindAff)(e.get(n.json)(t))(function(e){return a.discard(a.discardUnit)(V.bindAff)(Q.liftEffect(V.monadEffectAff)(Z.log(Q.monadEffectEffect)(e.body)))(function(){return a.bind(V.bindAff)(b.either((t=f.throwError(V.monadThrowAff),function(e){return t($.error(n.printResponseFormatError(e)))}))(o.pure(V.applicativeAff))(e.body))(function(e){return a.bind(V.bindAff)(function(){var n=d.runExcept(ne.readArray(e));if(n instanceof b.Left)return f.throwError(V.monadThrowAff)($.error("SNP data is not an array"));if(n instanceof b.Right)return o.pure(V.applicativeAff)(n.value0);throw new Error("Failed pattern match at Genetics.Browser.Demo (line 287, column 5 - line 291, column 31): "+[n.constructor.name])}())(function(e){var n,t=g.partitionMap(g.filterableArray)((n=Ce(r),function(e){return d.runExcept(n(e))}))(e);return o.pure(V.applicativeAff)(oe.groupToMap(N.monoidArray)(ce.ordChrId)(h.foldableArray)(o.applicativeArray)(function(e){return e.feature.chrId})(g.filter(g.filterableArray)(function(e){return k.greaterThanOrEq(ce.ordBp)(P.fst(e.position))(T.wrap(ce.newtypeBp)(0))})(t.right)))})});var t})})}},qe=function(e){return A.map(D.functorMap)(g.filter(g.filterableArray)(function(n){return n.feature.score<=I.viewOn(e.sig)(E.re(ce._NegLog10(q.profunctorRe(j.profunctorForget))))}))},Ee=function(e){return function(n){return function(t){var a=fe.pairSize(R.ringNumber)(n),u=function(e){return a*T.unwrap(ce.newtypeBp)(w.div(ce.euclideanRingBp)(e)(t.frameSize))},f=u(R.sub(ce.ringBp)(t.position.value1)(t.position.value0)),d=function(e){var n=A.map(P.functorPair)(u)(e);return le.rectangle(n.value0)(0)(n.value1)(30)},c=function(e){var n=h.foldMap(h.foldableArray)(le.monoidShape)(d)(g.filter(g.filterableArray)(function(e){return function(e){return P.snd(A.map(P.functorPair)(u)(e))}(e)>1})(t.feature.blocks));return O.append(le.semigroupDrawing)(le.outlined(O.append(le.semigroupOutlineStyle)(le.outlineColor(i.darkgrey))(le.lineWidth(1)))(n))(le.filled(le.fillColor(i.lightgrey))(n))};if(f<1)return M.Nothing.value;var l={x:n.value0+fe.pairSize(R.ringNumber)(n)*T.unwrap(fe.newtypeNormalized)(oe.featureNormX(t)),y:.5*e.height},s={x:l.x+f,y:l.y+15};return o.pure(M.applicativeMaybe)({bigDrawing:{drawing:function(e){return O.append(le.semigroupDrawing)((J.unit,n=le.rectangle(1.5)(14)(f-1.5)(2),O.append(le.semigroupDrawing)(le.outlined(O.append(le.semigroupOutlineStyle)(le.outlineColor(r.black))(le.lineWidth(3)))(n))(le.filled(le.fillColor(r.black))(n))))(c(J.unit));var n},topLeft:l,bottomRight:s},label:{text:t.feature.geneName,point:l,gravity:ue.LCenter.value}})}}},Le=function(e){return function(n){return function(n){return function(r){var t,i=D.toUnfoldable(B.unfoldableList)(A.map(D.functorMap)(F.fromFoldable(h.foldableArray))(e)),u=F.concatMap(function(e){return M.fromMaybe(N.mempty(B.monoidList))(a.bind(M.bindMaybe)(D.lookup(ce.ordChrId)(e.value0)(n))(function(n){return o.pure(M.applicativeMaybe)(g.filterMap(g.filterableList)(Ee(r)(n))(e.value1))}))})(i),f=X.inj()(new U.IsSymbol(function(){return"labels"}))(ue._labels)(A.map(B.functorList)(function(e){return e.label})(u)),d=A.map(B.functorList)((t=X.inj()(new U.IsSymbol(function(){return"bigDrawing"}))(ue._bigDrawing),function(e){return t(e.bigDrawing)}))(u);return{renderables:new B.Cons(f,d)}}}}},Fe=function(e){return function(n){var r=e.y-n.y,t=e.x-n.x;return se.sqrt(se.pow(t)(2)+se.pow(r)(2))}},Be=function(e){return function(n){var r,t,i,a=A.map(D.functorMap)(F.fromFoldable(h.foldableArray))(e),f=function(e){return v.foldMapWithIndex(D.foldableWithIndexMap)(B.monoidList)(function(r){return function(t){return h.foldMap(h.foldableMaybe)(B.monoidList)(A.map(B.functorList)(G.fanout(u.categoryFn)(G.strongFn)(u.identity(u.categoryFn))((i=t,function(r){return{x:i.value0+fe.pairSize(R.ringNumber)(i)*T.unwrap(fe.newtypeNormalized)(oe.featureNormX(r)),y:e.height*(1-Ie(n.threshold)(r.feature.score))}}))))(D.lookup(ce.ordChrId)(r)(a));var i}})},d=function(e){return function(r){return function(t){return s.fromFoldable(B.foldableList)(g.filterMap(g.filterableList)(function(e){if(Fe(e.value1)(t)<=n.render.radius+r)return new M.Just(e.value0);if(m.otherwise)return M.Nothing.value;throw new Error("Failed pattern match at Genetics.Browser.Demo (line 546, column 15 - line 546, column 63): "+[e.constructor.name])})(e))}}},c=(r=le.circle(n.render.pixelOffset.x)(n.render.pixelOffset.y)(n.render.radius),t=le.filled(le.fillColor(T.unwrap(oe.newtypeHexColor)(n.render.color.fill)))(r),i=le.outlined(O.append(le.semigroupOutlineStyle)(le.outlineColor(T.unwrap(oe.newtypeHexColor)(n.render.color.outline)))(le.lineWidth(n.render.lineWidth)))(r),O.append(le.semigroupDrawing)(i)(t)),l=function(e){return o.pure(o.applicativeArray)({drawing:c,points:A.map(A.functorArray)(I.view(L._2(j.strongForget)))(s.fromFoldable(B.foldableList)(e))})};return function(e){return function(n){var r=f(n)(e);return{renderables:o.pure(B.applicativeList)(X.inj()(new U.IsSymbol(function(){return"drawingBatch"}))(ue._drawingBatch)(l(r))),hotspots:d(r)}}}}},De=function(e){return Be(e.trackConfig.snps)({threshold:e.browserConfig.threshold,render:e.layerConfig})},Me={radius:3.75,lineWidth:1,color:{outline:T.wrap(oe.newtypeHexColor)(i.darkblue),fill:T.wrap(oe.newtypeHexColor)(i.darkblue)},pixelOffset:{x:0,y:0}},Ne={radius:5.5,outline:T.wrap(oe.newtypeHexColor)(r.black),snpColor:T.wrap(oe.newtypeHexColor)(t.blue),geneColor:T.wrap(oe.newtypeHexColor)(t.red),urls:ie.empty},Te=function(e){return oe.fixedUILayer(de.CRight.create(oe.drawLegendInSlot(e)))},ke=function(e){return function(e){return function(n){return S.mapWithIndex(D.functorWithIndexMap)(function(r){return function(t){return M.fromMaybe([])(a.bind(M.bindMaybe)(D.lookup(ce.ordChrId)(r)(e))(function(e){return a.bind(M.bindMaybe)(D.lookup(ce.ordChrId)(r)(n))(function(n){return a.bind(M.bindMaybe)(A.map(M.functorMaybe)(function(e){return e.frameSize})(s.head(e)))(function(r){var i=w.div(ce.euclideanRingBp)(_.mul(ce.semiringBp)(T.wrap(ce.newtypeBp)(3.75))(r))(T.wrap(ce.newtypeBp)(fe.pairSize(R.ringNumber)(t)));return o.pure(M.applicativeMaybe)(A.map(A.functorArray)(function(e){return{elements:g.filter(g.filterableArray)((r=fe.pairsOverlap(ce.ordBp)(e.covers),function(e){return r(e.position)}))(n),covers:e.covers,y:e.y};var r})(Se(i)(e)))})})}))}})}}},Pe=function(e){return function(n){var r=function(n){return O.append(O.semigroupFn(le.semigroupDrawing))(le.outlined(O.append(le.semigroupOutlineStyle)(le.outlineColor(T.unwrap(oe.newtypeHexColor)(e.outline)))(le.lineWidth(2))))(le.filled(le.fillColor(T.unwrap(oe.newtypeHexColor)(n))))(le.circle(0)(0)(e.radius))};if(n.feature.gene instanceof M.Nothing)return{text:"SNP name",icon:r(e.snpColor)};if(n.feature.gene instanceof M.Just)return{text:"Gene name",icon:r(e.geneColor)};throw new Error("Failed pattern match at Genetics.Browser.Demo (line 409, column 6 - line 411, column 69): "+[n.feature.gene.constructor.name])}},Ge=function(e){return function(n){return function(n){return function(r){var t=s.concat(s.fromFoldable(B.foldableList)(A.map(B.functorList)(s.fromFoldable(e))(D.values(r))));return oe.trackLegend(h.foldableArray)(A.functorArray)(Pe(n))(t)}}}},Re=function(e){return function(n){return function(t){return function(i){return function(u){var f=.06*u.height,d=function(e){var n=e.covers.value0+.5*(e.covers.value1-e.covers.value0),i=s.null(e.elements)?N.mempty(le.monoidDrawing):le.outlined(O.append(le.semigroupOutlineStyle)(le.lineWidth(1.3))(le.outlineColor(r.black)))(le.path(h.foldableArray)([{x:0,y:0},{x:0,y:-f}])),o=le.translate(0)(-f)(h.foldr(h.foldableArray)(function(e){return function(n){return le.translate(0)(-6.5)(O.append(le.semigroupDrawing)(Pe(t)(e).icon)(n))}})(N.mempty(le.monoidDrawing))(e.elements)),a=14*h.length(h.foldableArray)(_.semiringNumber)(e.elements),u={drawing:O.append(le.semigroupDrawing)(i)(o),points:[{x:n,y:e.y}]},d=function(e){var n=f+4.5*h.length(h.foldableArray)(_.semiringNumber)(e.elements),r=e.y-n;return{x:e.covers.value0,y:r,width:14,height:n}}(e),c=d.y>a?{g:ue.LCenter.value,y0:d.y}:{g:ue.LLeft.value,y0:e.y},l=K.snd(h.foldr(h.foldableArray)(function(e){return function(r){return K.Tuple.create(r.value0-8)(new B.Cons({text:M.fromMaybe(e.feature.name)(e.feature.gene),point:{x:n,y:r.value0},gravity:c.g},r.value1))}})(new K.Tuple(c.y0,N.mempty(B.monoidList)))(e.elements));return new K.Tuple([u],l)};return function(r){var t,f=(t=function(r){return S.mapWithIndex(D.functorWithIndexMap)(function(t){return function(i){return M.fromMaybe([])(a.bind(M.bindMaybe)(A.map(M.functorMaybe)((f=T.wrap(ce.newtypeBp),d=fe.pairSize(p.ringBigInt),function(e){return f(p.toNumber(d(e)))}))(D.lookup(ce.ordChrId)(t)(I.viewOn(e)(fe._Segments(j.strongForget)))))(function(e){return a.bind(M.bindMaybe)(D.lookup(ce.ordChrId)(t)(r))(function(r){return o.pure(M.applicativeMaybe)(A.map(A.functorArray)(function(t){return{covers:A.map(P.functorPair)(function(n){return r.value0+fe.pairSize(R.ringNumber)(r)*T.unwrap(ce.newtypeBp)(w.div(ce.euclideanRingBp)(n)(e))})(t.covers),y:u.height*(1-Ie(n)(t.y)),elements:t.elements}})(i))})}));var f,d}})(i)}(r),h.foldMap(D.foldableMap)(K.monoidTuple(N.monoidArray)(B.monoidList))(h.foldMap(h.foldableArray)(K.monoidTuple(N.monoidArray)(B.monoidList))(d))(t));return{drawingBatch:f.value0,labels:f.value1}}}}}}},Oe=function(e){return function(n){return function(r){return function(t){var i=ke(e)(n)(r);return function(n){return function(r){var o=Re(e)(t.threshold)(t.render)(i(n))(r)(n);return{renderables:F.fromFoldable(h.foldableArray)([X.inj()(new U.IsSymbol(function(){return"drawingBatch"}))(ue._drawingBatch)(o.drawingBatch),X.inj()(new U.IsSymbol(function(){return"labels"}))(ue._labels)(o.labels)])}}}}}}},_e=function(e){return function(e){return be.keys()(be.consKeys(new U.IsSymbol(function(){return"chr"}))(be.consKeys(new U.IsSymbol(function(){return"gene"}))(be.consKeys(new U.IsSymbol(function(){return"name"}))(be.consKeys(new U.IsSymbol(function(){return"pos"}))(be.consKeys(new U.IsSymbol(function(){return"url"}))(be.nilKeys))))))(J.unit)}},ze=function(e){return a.bind(c.bindExceptT(C.monadIdentity))(A.map(c.functorExceptT(C.functorIdentity))(F.fromFoldable(h.foldableArray))(te.keys(e)))(function(n){var r=F.difference(y.eqString)(n)(_e(be.consKeys(new U.IsSymbol(function(){return"chr"}))(be.consKeys(new U.IsSymbol(function(){return"gene"}))(be.consKeys(new U.IsSymbol(function(){return"name"}))(be.consKeys(new U.IsSymbol(function(){return"pos"}))(be.consKeys(new U.IsSymbol(function(){return"url"}))(be.nilKeys))))))());return W.for(c.applicativeExceptT(C.monadIdentity))(B.traversableList)(r)(function(n){return A.map(c.functorExceptT(C.functorIdentity))(function(e){return{field:n,value:e}})(re.readProp(n)(e))})})},Ue=function(e){return function(n){return a.bind(c.bindExceptT(C.monadIdentity))(ye["read'"](ye.readRecord()(ye.readFieldsCons(new U.IsSymbol(function(){return"chr"}))(ye.readString)(ye.readFieldsCons(new U.IsSymbol(function(){return"gene"}))(ye.readMaybe(ye.readString))(ye.readFieldsCons(new U.IsSymbol(function(){return"name"}))(ye.readString)(ye.readFieldsCons(new U.IsSymbol(function(){return"pos"}))(ye.readNumber)(ye.readFieldsCons(new U.IsSymbol(function(){return"url"}))(ye.readMaybe(ye.readString))(ye.readFieldsNil)()())()())()())()())()()))(n))(function(r){return a.bind(c.bindExceptT(C.monadIdentity))(ze(n))(function(n){var t,i=me.build(l.composeFlipped(me.semigroupoidBuilder)(me.insert()()(new U.IsSymbol(function(){return"rest"}))(U.SProxy.value)(n))(l.composeFlipped(me.semigroupoidBuilder)(me.modify()()(new U.IsSymbol(function(){return"chr"}))(U.SProxy.value)(ce.ChrId))(me.modify()()(new U.IsSymbol(function(){return"pos"}))(U.SProxy.value)(ce.Bp))))(r),u=(t=i.pos,new P.Pair(t,t));return a.bind(c.bindExceptT(C.monadIdentity))(function(){var n=D.lookup(ce.ordChrId)(i.chr)(I.view(fe._Segments(j.strongForget))(e));if(n instanceof M.Nothing)return f.throwError(c.monadThrowExceptT(C.monadIdentity))(o.pure(B.applicativeNonEmptyList)(new ne.ForeignError("Annotation chr not found in coordinate system!")));if(n instanceof M.Just)return o.pure(c.applicativeExceptT(C.monadIdentity))(ce.Bp(p.toNumber(fe.pairSize(p.ringBigInt)(n.value0))));throw new Error("Failed pattern match at Genetics.Browser.Demo (line 224, column 16 - line 231, column 49): "+[n.constructor.name])}())(function(e){return o.pure(c.applicativeExceptT(C.monadIdentity))({position:u,frameSize:e,feature:i})})})})}},We=function(r){return function(t){return a.bind(V.bindAff)(e.get(n.json)(t))(function(e){return a.bind(V.bindAff)(b.either((t=f.throwError(V.monadThrowAff),function(e){return t($.error(n.printResponseFormatError(e)))}))(o.pure(V.applicativeAff))(e.body))(function(e){return a.bind(V.bindAff)(function(){var n=d.runExcept(ne.readArray(e));if(n instanceof b.Left)return f.throwError(V.monadThrowAff)($.error("Annotations data is not an array"));if(n instanceof b.Right)return o.pure(V.applicativeAff)(n.value0);throw new Error("Failed pattern match at Genetics.Browser.Demo (line 313, column 16 - line 317, column 37): "+[n.constructor.name])}())(function(e){var n,t=g.partitionMap(g.filterableArray)((n=Ue(r),function(e){return d.runExcept(n(e))}))(e);return a.discard(a.discardUnit)(V.bindAff)(Q.liftEffect(V.monadEffectAff)(function(){return Z.log(Q.monadEffectEffect)("Raw annotations array length: "+z.show(z.showInt)(s.length(e)))(),Z.log(Q.monadEffectEffect)("Could not parse "+z.show(z.showInt)(h.length(h.foldableArray)(_.semiringInt)(t.left))+" annotations.")(),Z.log(Q.monadEffectEffect)("Successfully parsed "+z.show(z.showInt)(h.length(h.foldableArray)(_.semiringInt)(t.right))+" annotations.")(),Z.log(Q.monadEffectEffect)(t.right)()}))(function(){return o.pure(V.applicativeAff)(oe.groupToMap(N.monoidArray)(ce.ordChrId)(h.foldableArray)(o.applicativeArray)(function(e){return e.feature.chr})(t.right))})})});var t})}},Ke=function(e){return function(n){return function(n){return function(r){var t={segmentPadding:12,coordinateSystem:e},i=oe.trackLikeLayer(t)(de.Center.create(Le(n.genes)({genes:{}})));return a.bind(V.bindAff)(ue.newLayer(Y.monadAffAff)()(ae.cacherAffCons(new U.IsSymbol(function(){return"renderables"}))()()()()(ae.cacherAffNil(we.refl)))(r)("genes")(i))(function(e){return o.pure(V.applicativeAff)({genes:function(n){return function(r){return a.discard(a.discardUnit)(V.bindAff)(e.run(r))(function(){return a.bind(V.bindAff)(e.last.renderables)(e.drawOnCanvas(n))})}}})})}}}},He=function(e){return function(n){return function(r){var i=me.build(me.merge()()(n.vscale))(n.score),u=qe(n.score)(r.snps),f=pe.insert(new U.IsSymbol(function(){return"entries"}))()()(U.SProxy.value)(Ge(h.foldableArray)(A.functorArray)(n.annotations)(r.annotations))(n.legend),d={segmentPadding:12,coordinateSystem:e},c=oe.trackLikeLayer(d)(de.Center.create(Be(r.snps)({threshold:n.score,render:n.snps}))),l=oe.trackLikeLayer(d)(de.Center.create(Oe(e)(u)(r.annotations)({threshold:n.score,render:n.annotations})));return function(e){return a.bind(V.bindAff)(ue.newLayer(Y.monadAffAff)()(ae.cacherAffCons(new U.IsSymbol(function(){return"renderables"}))()()()()(ae.cacherAffNil(we.refl)))(e)("ruler")(new de.Layer(de.Fixed.value,de.NoMask.value,new de.Center(oe.thresholdRuler))))(function(r){return a.bind(V.bindAff)(ue.newLayer(Y.monadAffAff)()(ae.cacherAffCons(new U.IsSymbol(function(){return"hotspots"}))()()()()(ae.cacherAffCons(new U.IsSymbol(function(){return"renderables"}))()()()()(ae.cacherAffNil(we.refl))))(e)("snps")(c))(function(u){return a.bind(V.bindAff)(ue.newLayer(Y.monadAffAff)()(ae.cacherAffCons(new U.IsSymbol(function(){return"renderables"}))()()()()(ae.cacherAffNil(we.refl)))(e)("annotations")(l))(function(d){return a.bind(V.bindAff)(ue.newLayer(Y.monadAffAff)()(ae.cacherAffCons(new U.IsSymbol(function(){return"renderables"}))()()()()(ae.cacherAffNil(we.refl)))(e)("vscale")(ge(i)))(function(i){return a.bind(V.bindAff)(ue.newLayer(Y.monadAffAff)()(ae.cacherAffCons(new U.IsSymbol(function(){return"renderables"}))()()()()(ae.cacherAffNil(we.refl)))(e)("legend")(Te(f)))(function(e){return a.bind(V.bindAff)(Q.liftEffect(V.monadEffectAff)(ee.new(0)))(function(f){var c,l=a.bind(V.bindAff)(Q.liftEffect(V.monadEffectAff)(ee.read(f)))(function(e){return a.bind(V.bindAff)(u.last.hotspots)(function(n){return o.pure(V.applicativeAff)(function(r){return function(t){return n(r)({x:t.x+e,y:t.y})}})})}),s=(c={rulerColor:T.wrap(oe.newtypeHexColor)(t.red),threshold:n.score},h.traverse_(V.applicativeAff)(h.foldableArray)(function(e){return a.discard(a.discardUnit)(V.bindAff)(e.run(c))(function(){return a.bind(V.bindAff)(e.last.renderables)(e.drawOnCanvas(new P.Pair(0,0)))})})([e,i,r]));return o.pure(V.applicativeAff)({snps:function(e){return function(n){return a.discard(a.discardUnit)(V.bindAff)(Q.liftEffect(V.monadEffectAff)(ee.write(e.value0)(f)))(function(){return a.discard(a.discardUnit)(V.bindAff)(u.run(n))(function(){return a.bind(V.bindAff)(u.last.renderables)(u.drawOnCanvas(e))})})}},annotations:function(e){return function(n){return a.discard(a.discardUnit)(V.bindAff)(d.run(n))(function(){return a.bind(V.bindAff)(d.last.renderables)(d.drawOnCanvas(e))})}},hotspots:l,fixedUI:s})})})})})})})}}}},Je=function(e){return function(n){return function(r){return a.bind(V.bindAff)(ue.newLayer(Y.monadAffAff)()(ae.cacherAffCons(new U.IsSymbol(function(){return"renderables"}))()()()()(ae.cacherAffNil(we.refl)))(r)("chrBackground")(oe.trackLikeLayer(e)(de.Center.create(oe.chrBackgroundLayer({chrBG1:n.chrBG1,chrBG2:n.chrBG2,segmentPadding:e.segmentPadding})))))(function(t){return a.bind(V.bindAff)(ue.newLayer(Y.monadAffAff)()(ae.cacherAffCons(new U.IsSymbol(function(){return"renderables"}))()()()()(ae.cacherAffNil(we.refl)))(r)("chrLabels")(oe.chrLabelsLayer(e)({fontSize:n.chrLabels.fontSize})))(function(e){return o.pure(V.applicativeAff)(function(n){return function(r){return h.traverse_(V.applicativeAff)(h.foldableArray)(function(e){return a.discard(a.discardUnit)(V.bindAff)(e.run(r))(function(){return a.bind(V.bindAff)(e.last.renderables)(e.drawOnCanvas(n))})})([t,e])}})})})}}},Xe=U.SProxy.value,Ve=U.SProxy.value;module.exports={renderGenes:Le,drawGene:Ee,parseSNP:Ce,annotationFields:_e,parseAnnotation:Ue,parseAnnotationRest:ze,showAnnotationField:ve,showAnnotation:xe,getSNPs:je,getAnnotations:We,snpPeak:he,peak1:Ae,peaks:Se,defaultAnnotationsConfig:Ne,annotationLegendEntry:Pe,annotationLegendTest:Ge,normYLogScore:Ie,dist:Fe,filterSig:qe,snpsUI:ge,annotationsUI:Te,defaultSNPConfig:Me,snpLayer:De,renderSNPs:Be,annotationsForScale:ke,renderAnnotationPeaks:Re,renderAnnotations:Oe,_snps:Xe,_annotations:Ve,addChrLayers:Je,addGWASLayers:He,addGeneLayers:Ke};
+},{"../Affjax/index.js":"IjAr","../Affjax.ResponseFormat/index.js":"QSsR","../Color/index.js":"f3ma","../Color.Scheme.Clrs/index.js":"rp+n","../Color.Scheme.X11/index.js":"bDzA","../Control.Applicative/index.js":"qYya","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Control.Monad.Error.Class/index.js":"L8Lk","../Control.Monad.Except/index.js":"Fye2","../Control.Monad.Except.Trans/index.js":"gr8B","../Control.Semigroupoid/index.js":"/riR","../Data.Array/index.js":"4t4C","../Data.BigInt/index.js":"Zx+T","../Data.Boolean/index.js":"ObQr","../Data.Either/index.js":"B2JL","../Data.Eq/index.js":"Pq4F","../Data.EuclideanRing/index.js":"2IRB","../Data.Filterable/index.js":"6hfS","../Data.Foldable/index.js":"eVDl","../Data.FoldableWithIndex/index.js":"9Efi","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.FunctorWithIndex/index.js":"OHRN","../Data.Identity/index.js":"2OKT","../Data.Lens.Getter/index.js":"OPOX","../Data.Lens.Internal.Forget/index.js":"mj9z","../Data.Lens.Internal.Re/index.js":"IZDD","../Data.Lens.Iso/index.js":"fFCp","../Data.Lens.Lens.Tuple/index.js":"RTVM","../Data.List/index.js":"ezw6","../Data.List.Types/index.js":"Xxuc","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Pair/index.js":"PpsX","../Data.Profunctor.Strong/index.js":"w9p6","../Data.Ring/index.js":"E2qH","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.Symbol/index.js":"4oJQ","../Data.Traversable/index.js":"n7EE","../Data.Tuple/index.js":"II/O","../Data.Unfoldable/index.js":"77+Z","../Data.Unit/index.js":"NhVk","../Data.Variant/index.js":"hgdh","../Effect.Aff/index.js":"I7lu","../Effect.Aff.Class/index.js":"I4H+","../Effect.Class/index.js":"dWtH","../Effect.Class.Console/index.js":"3Dts","../Effect.Exception/index.js":"0OCW","../Effect.Ref/index.js":"/Jaj","../Foreign/index.js":"pu1p","../Foreign.Index/index.js":"Ryy1","../Foreign.Keys/index.js":"hcOM","../Foreign.Object/index.js":"jsiz","../Genetics.Browser/index.js":"X0te","../Genetics.Browser.Cacher/index.js":"61ee","../Genetics.Browser.Canvas/index.js":"VVkU","../Genetics.Browser.Coordinates/index.js":"7bYH","../Genetics.Browser.Layer/index.js":"YWUW","../Genetics.Browser.Types/index.js":"HhmG","../Graphics.Drawing/index.js":"0WVi","../Math/index.js":"Rpaz","../Record/index.js":"0gG4","../Record.Builder/index.js":"VeY4","../Record.Extra/index.js":"KzZr","../Simple.JSON/index.js":"DqNI","../Type.Equality/index.js":"Uq/R"}],"HH6s":[function(require,module,exports) {
+"use strict";var n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),u=require("../Data.Foldable/index.js"),e=require("../Data.Functor/index.js"),o=require("../Data.Monoid/index.js"),i=require("../Data.Semigroup/index.js"),f=require("../Data.Symbol/index.js"),c=require("../Effect/index.js"),a=require("../Effect.Aff/index.js"),l=require("../Genetics.Browser.Canvas/index.js"),s=require("../Record/index.js"),d=require("../Type.Data.RowList/index.js"),p=require("../Type.Equality/index.js"),m=function(n){return n},y={},v=function(n){this.buildTrack=n},x=function(n){this.fetchDataImpl=n},g=function(n){this.makeContainersImpl=n},C={},P=function(n){this.getTrackConfigImpl=n},S=function(n){this.getLayerConfigImpl=n},h=function(n){this.getBrowserConfigImpl=n},b={},k={},A=function(n){this.combineFunsImpl=n},w={},R=function(n){this.applyLayerDefImpl=n},I=y,L=function(n){return y},F=function(n){return new v(function(n){return function(n){return function(n){return o.mempty(a.monoidAff(o.monoidRecord()(o.monoidRecordCons(new f.IsSymbol(function(){return"hotspots"}))(a.monoidAff(o.monoidFn(o.monoidFn(o.monoidArray))))()(o.monoidRecordCons(new f.IsSymbol(function(){return"render"}))(o.monoidFn(o.monoidFn(a.monoidAff(o.monoidUnit))))()(o.monoidRecordNil)))))}}})},D=function(r){return new x(function(t){return function(t){return function(t){return n.pure(a.applicativeAff)(p.from(r)({}))}}})},q=function(r){return new g(function(t){return function(t){return function(t){return n.pure(c.applicativeEffect)(p.from(r)({}))}}})},j=function(n){return function(n){return function(n){return function(n){return function(n){return C}}}}},T=function(n){return n.makeContainersImpl},N=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(i){return new g(function(c){return function(c){return function(a){var m=p.from(i)(s.get(n)(t)(f.SProxy.value)(a));return function(){var i=l.trackContainer({width:c,height:m.trackHeight})(m.padding)(f.reflectSymbol(n)(f.SProxy.value))(),y=T(r)(d.RLProxy.value)(c)(s.delete(n)(u)(t)(f.SProxy.value)(p.from(p.refl)(a)))();return s.insert(n)(o)(e)(f.SProxy.value)(i)(y)}}}})}}}}}}},U=function(n){return function(n){return T(n)(d.RLProxy.value)}},E=function(n){return n.getTrackConfigImpl},W=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(i){return function(i){return function(c){return function(c){return function(a){return new P(function(l){return function(d){var m=s.get(n)(o)(p.from(r)(f.SProxy.value))(l),y=s.get(e)(i)(p.from(p.refl)(f.SProxy.value))(m);return s.delete(t)(a)(c)(p.from(u)(f.SProxy.value))(y)}})}}}}}}}}}}},B=function(n){return n.getLayerConfigImpl},M=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(i){return function(c){return function(c){return function(a){return function(a){return function(l){return function(l){return function(d){return new S(function(d){return function(m){return function(m){var y=s.get(n)(i)(p.from(r)(f.SProxy.value))(d),v=s.get(e)(c)(p.from(p.refl)(f.SProxy.value))(y),x=s.get(t)(a)(p.from(u)(f.SProxy.value))(v);return s.get(o)(l)(p.from(p.refl)(f.SProxy.value))(x)}}})}}}}}}}}}}}}}},H=function(n){return n.getBrowserConfigImpl},G=function(n){return function(r){return function(t){return function(u){return function(e){return function(o){return function(o){return function(i){return new h(function(c){var a=s.get(n)(e)(p.from(r)(f.SProxy.value))(c);return s.delete(t)(i)(o)(p.from(u)(f.SProxy.value))(a)})}}}}}}}},z=function(n){return n.fetchDataImpl},J=function(r){return function(e){return function(o){return function(i){return function(c){return function(l){return function(p){return function(m){return new x(function(y){return function(y){return function(v){return t.bind(a.bindAff)(z(m)(d.RLProxy.value)(s.delete(r)(e)(o)(f.SProxy.value)(y))(v))(function(e){return t.bind(a.bindAff)(u.foldMap(u.foldableMaybe)(a.monoidAff(i))(s.get(r)(o)(f.SProxy.value)(y))(s.get(r)(c)(f.SProxy.value)(v)))(function(t){return n.pure(a.applicativeAff)(s.insert(r)(l)(p)(f.SProxy.value)(t)(e))})})}}})}}}}}}}},K=function(n){return function(n){return function(n){return function(r){return function(t){return function(u){return l.withLoadingIndicator(a.monadEffectAff)(r)(z(n)(d.RLProxy.value)(t)(u))}}}}}},O=b,Q=b,V=function(n){return b},X=function(n){return b},Y=k,Z=function(n){return function(n){return function(n){return k}}},$=function(n){return n.combineFunsImpl},_=function(n){return function(n){return function(r){return function(t){return $(n)(d.RLProxy.value)(r)(t)}}}},nn=function(n){return new A(function(r){return function(r){return function(r){return p.from(n)({})}}})},rn=function(n){return function(r){return function(t){return function(u){return function(u){return function(e){return function(o){return new A(function(i){return function(i){return function(c){var a=$(o)(d.RLProxy.value)(s.delete(n)(r)(t)(f.SProxy.value)(i))(c),l=s.get(n)(t)(f.SProxy.value)(i);return s.insert(n)(u)(e)(f.SProxy.value)(l(c))(a)}}})}}}}}}},tn=function(n){return n.buildTrack},un=function(n){return function(n){return function(r){return function(t){return tn(n)(d.RLProxy.value)(r)(t)}}}},en=function(u){return function(o){return function(c){return function(l){return function(m){return new v(function(y){return function(y){return function(v){return t.bind(a.bindAff)(tn(m)(d.RLProxy.value)(s.delete(u)(o)(c)(f.SProxy.value)(y))(v))(function(t){var o=r.apply(a.applyAff)(e.map(a.functorAff)(function(n){return function(r){return function(t){return function(u){return i.append(i.semigroupArray)(n(t)(p.from(l)(u)))(r(t)(u))}}}})(s.get(u)(c)(f.SProxy.value)(y)))(t.hotspots);return n.pure(a.applicativeAff)({render:t.render,hotspots:o})})}}})}}}}},on=function(r){return function(u){return function(e){return function(o){return new v(function(c){return function(c){return function(l){return t.bind(a.bindAff)(tn(o)(d.RLProxy.value)(s.delete(r)(u)(e)(f.SProxy.value)(c))(l))(function(t){return n.pure(a.applicativeAff)({render:i.append(i.semigroupFn(i.semigroupFn(a.semigroupAff(i.semigroupUnit))))(function(n){return function(t){return s.get(r)(e)(f.SProxy.value)(c)(n)(t)}})(t.render),hotspots:t.hotspots})})}}})}}}},fn=function(r){return function(u){return function(e){return function(o){return new v(function(c){return function(c){return function(l){return t.bind(a.bindAff)(tn(o)(d.RLProxy.value)(s.delete(r)(u)(e)(f.SProxy.value)(c))(l))(function(t){return n.pure(a.applicativeAff)({render:i.append(i.semigroupFn(i.semigroupFn(a.semigroupAff(i.semigroupUnit))))(function(n){return function(n){return s.get(r)(e)(f.SProxy.value)(c)}})(t.render),hotspots:t.hotspots})})}}})}}}},cn=function(n){return function(n){return function(n){return function(r){return function(t){return new R(function(u){return function(e){return function(o){return function(i){var f=E(r)(i)(e),c=B(t)(i)(e)(o),a=H(n)(i);return u({browserConfig:a,trackConfig:f,layerConfig:c})}}}})}}}}},an=function(n){return n.applyLayerDefImpl},ln=function(n){return function(n){return function(n){return an(n)}}};module.exports={TrackRecord:v,buildTrack:tn,makeTrack:un,TrackConfig:g,makeContainersImpl:T,makeContainers:U,TrackData:x,fetchDataImpl:z,fetchData:K,CombineFuns:A,combineFunsImpl:$,combineFuns:_,SafeUnion:C,UnionConflict:y,ConflictingList:k,ConflictsWith:b,LayerDef:m,trackRecordRender:on,trackRecordUI:fn,trackRecordHotspots:en,trackRecordNil:F,trackConfigNil:q,trackConfigCons:N,trackDataCons:J,trackDataNil:D,combineFunCons:rn,combineFunNil:nn,conflictsWithNil:O,conflictsWithCons1:X,conflictsWithCons3:Q,conflictsWithCons2:V,conflictingListNil:Y,conflictingListCons:Z,unionConflictFail:L,unionConflictSuccess:I,safeUnion:j};
+},{"../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Data.Foldable/index.js":"eVDl","../Data.Functor/index.js":"+0AE","../Data.Monoid/index.js":"TiEB","../Data.Semigroup/index.js":"EsAJ","../Data.Symbol/index.js":"4oJQ","../Effect/index.js":"oTWB","../Effect.Aff/index.js":"I7lu","../Genetics.Browser.Canvas/index.js":"VVkU","../Record/index.js":"0gG4","../Type.Data.RowList/index.js":"XaXP","../Type.Equality/index.js":"Uq/R"}],"nvf7":[function(require,module,exports) {
+"use strict";exports.onTimeout=function(n){return function(t){return function(){var u=null;return{run:function(){u&&clearTimeout(u),u=setTimeout(function(){u=null,t()},n)},cancel:function(){clearTimeout(u)}}}}},exports.onFrame=function(n){return function(){var t=null;return{run:function(){t&&window.cancelAnimationFrame(t),t=window.requestAnimationFrame(function(u){n(),t=null})},cancel:function(){t&&(window.cancelAnimationFrame(t),t=null)}}}};
+},{}],"Tmz+":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),n=require("../Control.Bind/index.js"),r=require("../Control.Category/index.js"),t=require("../Data.BigInt/index.js"),i=require("../Data.Either/index.js"),o=require("../Data.Foldable/index.js"),u=require("../Data.Function/index.js"),a=require("../Data.Lens.Getter/index.js"),c=require("../Data.List.Types/index.js"),s=require("../Data.Monoid/index.js"),f=require("../Data.Newtype/index.js"),l=require("../Data.Ord/index.js"),d=require("../Data.Pair/index.js"),w=require("../Data.Semigroup/index.js"),m=require("../Data.Semiring/index.js"),v=require("../Data.Show/index.js"),p=require("../Effect/index.js"),g=require("../Effect.Class/index.js"),q=require("../Effect.Ref/index.js"),h=require("../Genetics.Browser.Canvas/index.js"),y=require("../Genetics.Browser.Coordinates/index.js"),j=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),x=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),B=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),V=function(e){return f.over(y.coordsysviewNewtype)(y.coordsysviewNewtype)(y.CoordSysView)(function(){if(e instanceof x)return function(n){return y.scalePairBy(n)(e.value0)};if(e instanceof j)return function(n){return y.translatePairBy(n)(e.value0)};if(e instanceof B)return e.value0;throw new Error("Failed pattern match at Genetics.Browser.UI.View (line 58, column 39 - line 61, column 20): "+[e.constructor.name])}())},E=new v.Show(function(e){return e instanceof j?"(Scroll by "+v.show(v.showNumber)(e.value0)+")":e instanceof x?"(Zoom by "+v.show(v.showNumber)(e.value0)+")":"(ModView)"}),D=new w.Semigroup(function(e){return function(n){return e instanceof j&&n instanceof j?new j(e.value0+n.value0):e instanceof x&&n instanceof x?new x(e.value0*n.value0):n}}),I=new s.Monoid(function(){return D},new B(r.identity(r.categoryFn))),S=function(n){return function(r){return function(t){return function(o){return function(u){return function(){var a=q.new(o.position)(),c=q.new(o.velocity)(),f=e.onTimeout(u)(function(){var e=q.read(a)();return t(new i.Left(e))()})(),l=e.onFrame(function(){var e=q.read(c)();q.write(s.mempty(n))(c)();var o=q.read(a)();return q.write(r.step(e)(o))(a)(),t(i.Right.create(r.animate(e)(o)))(),f.run()})(),d=q.read(c);return{update:function(e){return function(){return q.modify_(function(r){return w.append(n.Semigroup0())(r)(e)})(c)(),l.run()}},position:q.read(a),velocity:d}}}}}}},T=function(e){return function(r){return function(f){return function(w){return function(){var v=q.new(s.mempty(c.monoidList))(),E={position:f.initialView,velocity:s.mempty(I)},D=S(I)({step:function(n){var r=y.normalizeView(e)(t.fromInt(2e5)),i=V(n);return function(e){return r(i(e))}},animate:function(n){return function(r){if(n instanceof j)return new h.Scrolling((i=r,function(n){return n<0?l.lessThanOrEq(t.ordBigInt)(i.value0)(m.zero(t.semiringBigInt))?0:n:l.greaterThanOrEq(t.ordBigInt)(i.value1)(a.viewOn(e)(y._TotalSize(t.ringBigInt)))?0:n})(n.value0));var i;if(n instanceof x)return new h.Zooming(function(n){return function(r){var i=(r-1)/2,o=l.lessThanOrEq(t.ordBigInt)(n.value0)(m.zero(t.semiringBigInt))?0:-i,u=l.greaterThanOrEq(t.ordBigInt)(n.value1)(a.viewOn(e)(y._TotalSize(t.ringBigInt)))?1:1+i;return new d.Pair(o,u)}}(r)(n.value0));if(n instanceof B)return h.Jump.value;throw new Error("Failed pattern match at Genetics.Browser.UI.View (line 130, column 24 - line 133, column 29): "+[n.constructor.name])}}})(function(e){if(e instanceof i.Right)return h.forTracks_(g.monadEffectEffect)(w)(u.flip(h.animateTrack)(e.value0));if(e instanceof i.Left)return n.bind(p.bindEffect)(q.read(v))(o.traverse_(p.applicativeEffect)(c.foldableList)(function(n){return n(e.value0)}));throw new Error("Failed pattern match at Genetics.Browser.UI.View (line 151, column 18 - line 153, column 54): "+[e.constructor.name])})(E)(r)();return{updateView:D.update,browserView:D.position,addCallback:function(e){return q.modify_(c.Cons.create(e))(v)}}}}}}};module.exports={ScrollView:j,ZoomView:x,ModView:B,updateViewFold:V,animateDelta:S,browserViewManager:T,showUpdateView:E,semigroupUpdateView:D,monoidUpdateView:I,onTimeout:e.onTimeout,onFrame:e.onFrame};
+},{"./foreign.js":"nvf7","../Control.Bind/index.js":"7VcT","../Control.Category/index.js":"IAi2","../Data.BigInt/index.js":"Zx+T","../Data.Either/index.js":"B2JL","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Lens.Getter/index.js":"OPOX","../Data.List.Types/index.js":"Xxuc","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Ord/index.js":"r4Vb","../Data.Pair/index.js":"PpsX","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Effect/index.js":"oTWB","../Effect.Class/index.js":"dWtH","../Effect.Ref/index.js":"/Jaj","../Genetics.Browser.Canvas/index.js":"VVkU","../Genetics.Browser.Coordinates/index.js":"7bYH"}],"CI3f":[function(require,module,exports) {
+"use strict";var t=function(t){return function(e){return function(){return e[t]}}};exports.url=t("URL"),exports.documentURI=t("documentURI"),exports.origin=t("origin"),exports.compatMode=t("compatMode"),exports.characterSet=t("characterSet"),exports.contentType=t("contentType"),exports._doctype=t("doctype"),exports._documentElement=t("documentElement"),exports.getElementsByTagName=function(t){return function(e){return function(){return e.getElementsByTagName(t)}}},exports._getElementsByTagNameNS=function(t){return function(e){return function(n){return function(){return n.getElementsByTagNameNS(t,e)}}}},exports.getElementsByClassName=function(t){return function(e){return function(){return e.getElementsByClassName(t)}}},exports.createElement=function(t){return function(e){return function(){return e.createElement(t)}}},exports._createElementNS=function(t){return function(e){return function(n){return function(){return n.createElementNS(t,e)}}}},exports.createDocumentFragment=function(t){return function(){return t.createDocumentFragment()}},exports.createTextNode=function(t){return function(e){return function(){return e.createTextNode(t)}}},exports.createComment=function(t){return function(e){return function(){return e.createComment(t)}}},exports.createProcessingInstruction=function(t){return function(e){return function(n){return function(){return n.createProcessingInstruction(t,e)}}}},exports.importNode=function(t){return function(e){return function(n){return function(){return n.importNode(t,e)}}}},exports.adoptNode=function(t){return function(e){return function(){return e.adoptNode(t)}}};
+},{}],"0hiR":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),t=require("../Data.Functor/index.js"),n=require("../Data.Nullable/index.js"),o=require("../Effect/index.js"),r=require("../Unsafe.Coerce/index.js"),a=require("../Web.Internal.FFI/index.js"),c=r.unsafeCoerce,u=r.unsafeCoerce,m=r.unsafeCoerce,d=r.unsafeCoerce,s=function(t){return e._getElementsByTagNameNS(n.toNullable(t))},i=a.unsafeReadProtoTagged("Document"),l=a.unsafeReadProtoTagged("Document"),f=a.unsafeReadProtoTagged("Document"),g=a.unsafeReadProtoTagged("Document"),N=function(){var r=t.map(o.functorEffect)(n.toMaybe);return function(t){return r(e._documentElement(t))}}(),E=function(){var r=t.map(o.functorEffect)(n.toMaybe);return function(t){return r(e._doctype(t))}}(),T=function(t){return e._createElementNS(n.toNullable(t))};module.exports={fromNode:f,fromParentNode:i,fromNonElementParentNode:l,fromEventTarget:g,toNode:m,toParentNode:c,toNonElementParentNode:u,toEventTarget:d,doctype:E,documentElement:N,getElementsByTagNameNS:s,createElementNS:T,url:e.url,documentURI:e.documentURI,origin:e.origin,compatMode:e.compatMode,characterSet:e.characterSet,contentType:e.contentType,getElementsByTagName:e.getElementsByTagName,getElementsByClassName:e.getElementsByClassName,createElement:e.createElement,createDocumentFragment:e.createDocumentFragment,createTextNode:e.createTextNode,createComment:e.createComment,createProcessingInstruction:e.createProcessingInstruction,importNode:e.importNode,adoptNode:e.adoptNode};
+},{"./foreign.js":"CI3f","../Data.Functor/index.js":"+0AE","../Data.Nullable/index.js":"YQ8o","../Effect/index.js":"oTWB","../Unsafe.Coerce/index.js":"ETUV","../Web.Internal.FFI/index.js":"fdUh"}],"9SEv":[function(require,module,exports) {
+"use strict";var e=function(e){return function(t){return function(){return t[e]}}};exports.children=e("children"),exports._firstElementChild=e("firstElementChild"),exports._lastElementChild=e("lastElementChild"),exports.childElementCount=e("childElementCount"),exports._querySelector=function(e){return function(t){return function(){return t.querySelector(e)}}},exports.querySelectorAll=function(e){return function(t){return function(){return t.querySelectorAll(e)}}};
+},{}],"lU5U":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),r=require("../Data.Eq/index.js"),t=require("../Data.Functor/index.js"),n=require("../Data.Newtype/index.js"),u=require("../Data.Nullable/index.js"),i=require("../Data.Ord/index.js"),l=require("../Effect/index.js"),o=function(e){return e},c=function(r){var n=t.map(l.functorEffect)(u.toMaybe),i=e._querySelector(r);return function(e){return n(i(e))}},a=i.ordString,f=new n.Newtype(function(e){return e},o),d=function(){var r=t.map(l.functorEffect)(u.toMaybe);return function(t){return r(e._lastElementChild(t))}}(),q=function(){var r=t.map(l.functorEffect)(u.toMaybe);return function(t){return r(e._firstElementChild(t))}}(),s=r.eqString;module.exports={firstElementChild:q,lastElementChild:d,QuerySelector:o,querySelector:c,eqQuerySelector:s,ordQuerySelector:a,newtypeQuerySelector:f,children:e.children,childElementCount:e.childElementCount,querySelectorAll:e.querySelectorAll};
+},{"./foreign.js":"9SEv","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Nullable/index.js":"YQ8o","../Data.Ord/index.js":"r4Vb","../Effect/index.js":"oTWB"}],"UOgE":[function(require,module,exports) {
+"use strict";exports.window=function(){return window};
+},{}],"UQRJ":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js");module.exports={window:e.window};
+},{"./foreign.js":"UOgE"}],"dln3":[function(require,module,exports) {
+"use strict";exports._body=function(t){return function(){return t.body}},exports._readyState=function(t){return function(){return t.readyState}},exports._activeElement=function(t){return function(){return t.activeElement}},exports._currentScript=function(t){return function(){return t.currentScript}},exports.referrer=function(t){return function(){return t.referrer}},exports.title=function(t){return function(){return t.title}},exports.setTitle=function(t){return function(r){return function(){return r.title=t,{}}}};
+},{}],"v4VO":[function(require,module,exports) {
+"use strict";var n=require("../Data.Eq/index.js"),e=require("../Data.Maybe/index.js"),t=require("../Data.Ord/index.js"),r=require("../Data.Ordering/index.js"),a=require("../Data.Show/index.js"),i=function(){function n(){}return n.value=new n,n}(),o=function(){function n(){}return n.value=new n,n}(),u=function(){function n(){}return n.value=new n,n}(),c=new a.Show(function(n){if(n instanceof i)return"Loading";if(n instanceof o)return"Interactive";if(n instanceof u)return"Complete";throw new Error("Failed pattern match at Web.HTML.HTMLDocument.ReadyState (line 15, column 10 - line 18, column 27): "+[n.constructor.name])}),f=function(n){if(n instanceof i)return"loading";if(n instanceof o)return"interactive";if(n instanceof u)return"complete";throw new Error("Failed pattern match at Web.HTML.HTMLDocument.ReadyState (line 21, column 9 - line 24, column 25): "+[n.constructor.name])},s=function(n){return"loading"===n?new e.Just(i.value):"interactive"===n?new e.Just(o.value):"complete"===n?new e.Just(u.value):e.Nothing.value},l=new n.Eq(function(n){return function(e){return n instanceof i&&e instanceof i||(n instanceof o&&e instanceof o||n instanceof u&&e instanceof u)}}),d=new t.Ord(function(){return l},function(n){return function(e){if(n instanceof i&&e instanceof i)return r.EQ.value;if(n instanceof i)return r.LT.value;if(e instanceof i)return r.GT.value;if(n instanceof o&&e instanceof o)return r.EQ.value;if(n instanceof o)return r.LT.value;if(e instanceof o)return r.GT.value;if(n instanceof u&&e instanceof u)return r.EQ.value;throw new Error("Failed pattern match at Web.HTML.HTMLDocument.ReadyState (line 12, column 1 - line 12, column 48): "+[n.constructor.name,e.constructor.name])}});module.exports={Loading:i,Interactive:o,Complete:u,print:f,parse:s,eqReadyState:l,ordReadyState:d,showReadyState:c};
+},{"../Data.Eq/index.js":"Pq4F","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Data.Show/index.js":"mFY7"}],"EU5r":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),r=require("../Data.Functor/index.js"),t=require("../Data.Maybe/index.js"),n=require("../Data.Nullable/index.js"),o=require("../Effect/index.js"),a=require("../Unsafe.Coerce/index.js"),u=require("../Web.HTML.HTMLDocument.ReadyState/index.js"),f=require("../Web.Internal.FFI/index.js"),c=a.unsafeCoerce,i=a.unsafeCoerce,d=a.unsafeCoerce,s=a.unsafeCoerce,m=a.unsafeCoerce,T=function(){var n,a=r.map(o.functorEffect)((n=t.fromMaybe(u.Loading.value),function(e){return n(u.parse(e))}));return function(r){return a(e._readyState(r))}}(),g=f.unsafeReadProtoTagged("HTMLDocument"),l=f.unsafeReadProtoTagged("HTMLDocument"),M=f.unsafeReadProtoTagged("HTMLDocument"),D=f.unsafeReadProtoTagged("HTMLDocument"),E=f.unsafeReadProtoTagged("HTMLDocument"),b=function(){var t=r.map(o.functorEffect)(n.toMaybe);return function(r){return t(e._currentScript(r))}}(),v=function(){var t=r.map(o.functorEffect)(n.toMaybe);return function(r){return t(e._body(r))}}(),y=function(){var t=r.map(o.functorEffect)(n.toMaybe);return function(r){return t(e._activeElement(r))}}();module.exports={fromDocument:E,fromNode:M,fromParentNode:g,fromNonElementParentNode:l,fromEventTarget:D,toDocument:m,toNode:d,toParentNode:c,toNonElementParentNode:i,toEventTarget:s,body:v,readyState:T,activeElement:y,currentScript:b,referrer:e.referrer,title:e.title,setTitle:e.setTitle};
+},{"./foreign.js":"dln3","../Data.Functor/index.js":"+0AE","../Data.Maybe/index.js":"5mN7","../Data.Nullable/index.js":"YQ8o","../Effect/index.js":"oTWB","../Unsafe.Coerce/index.js":"ETUV","../Web.HTML.HTMLDocument.ReadyState/index.js":"v4VO","../Web.Internal.FFI/index.js":"fdUh"}],"qu+f":[function(require,module,exports) {
+"use strict";exports.document=function(n){return function(){return n.document}},exports.navigator=function(n){return function(){return n.navigator}},exports.location=function(n){return function(){return n.location}},exports.history=function(n){return function(){return n.history}},exports.innerWidth=function(n){return function(){return n.innerWidth}},exports.innerHeight=function(n){return function(){return n.innerHeight}},exports.alert=function(n){return function(r){return function(){return r.alert(n),{}}}},exports.confirm=function(n){return function(r){return function(){return r.confirm(n)}}},exports.moveBy=function(n){return function(r){return function(t){return function(){return t.moveBy(n,r),{}}}}},exports.moveTo=function(n){return function(r){return function(t){return function(){return t.moveTo(n,r),{}}}}},exports._open=function(n){return function(r){return function(t){return function(e){return function(){return e.open(n,r,t)}}}}},exports.outerHeight=function(n){return function(){return n.outerHeight}},exports.outerWidth=function(n){return function(){return n.outerWidth}},exports.print=function(n){return function(){return n.print(),{}}},exports._prompt=function(n){return function(r){return function(t){return function(){return t.prompt(n,r)}}}},exports.resizeBy=function(n){return function(r){return function(t){return function(){return t.resizeBy(n,r),{}}}}},exports.resizeTo=function(n){return function(r){return function(t){return function(){return t.resizeTo(n,r),{}}}}},exports.screenX=function(n){return function(){return n.screenX}},exports.screenY=function(n){return function(){return n.screenY}},exports.scroll=function(n){return function(r){return function(t){return function(){return t.scroll(n,r),{}}}}},exports.scrollBy=function(n){return function(r){return function(t){return function(){return t.scrollBy(n,r),{}}}}},exports.scrollX=function(n){return function(){return n.scrollX}},exports.scrollY=function(n){return function(){return n.scrollY}},exports.localStorage=function(n){return function(){return n.localStorage}},exports.sessionStorage=function(n){return function(){return n.sessionStorage}},exports._requestAnimationFrame=function(n){return function(r){return function(){return r.requestAnimationFrame(n)}}},exports._cancelAnimationFrame=function(n){return function(r){return function(){return r.cancelAnimationFrame(n)}}},exports._requestIdleCallback=function(n){return function(r){return function(t){return function(){return t.requestIdleCallback(r,n)}}}},exports._cancelIdleCallback=function(n){return function(r){return function(){return r.cancelIdleCallback(n)}}},exports.parent=function(n){return function(){return n.parent}},exports._opener=function(n){return function(){return n.opener}};
+},{}],"o+50":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),n=require("../Data.Eq/index.js"),r=require("../Data.Functor/index.js"),t=require("../Data.Newtype/index.js"),o=require("../Data.Nullable/index.js"),u=require("../Data.Ord/index.js"),i=require("../Effect/index.js"),c=require("../Unsafe.Coerce/index.js"),a=function(e){return e},f=function(e){return e},l=c.unsafeCoerce,s=function(n){return function(t){var o=r.map(i.functorEffect)(a),u=e._requestIdleCallback(n)(t);return function(e){return o(u(e))}}},m=function(n){var t=r.map(i.functorEffect)(f),o=e._requestAnimationFrame(n);return function(e){return t(o(e))}},d=function(n){return function(t){return function(u){return r.map(i.functorEffect)(o.toMaybe)(e._prompt(n)(t)(u))}}},p=function(n){return function(t){return r.map(i.functorEffect)(o.toMaybe)(e._prompt(n)("")(t))}},q=function(n){return r.map(i.functorEffect)(o.toMaybe)(e._opener(n))},y=function(n){return function(t){return function(u){return function(c){return r.map(i.functorEffect)(o.toMaybe)(e._open(n)(t)(u)(c))}}}},I=new t.Newtype(function(e){return e},a),w=new t.Newtype(function(e){return e},f),b=new n.Eq(function(e){return function(n){return e===n}}),g=new u.Ord(function(){return b},function(e){return function(n){return u.compare(u.ordInt)(e)(n)}}),E=new n.Eq(function(e){return function(n){return e===n}}),h=new u.Ord(function(){return E},function(e){return function(n){return u.compare(u.ordInt)(e)(n)}}),v=function(n){return e._cancelIdleCallback(t.unwrap(I)(n))},C=function(n){return e._cancelAnimationFrame(t.unwrap(w)(n))};module.exports={toEventTarget:l,open:y,prompt:p,promptDefault:d,requestAnimationFrame:m,cancelAnimationFrame:C,requestIdleCallback:s,cancelIdleCallback:v,opener:q,newtypeRequestAnimationFrameId:w,eqRequestAnimationFrameId:E,ordRequestAnimationFrameId:h,newtypeRequestIdleCallbackId:I,eqRequestIdleCallbackId:b,ordRequestIdleCallbackId:g,document:e.document,navigator:e.navigator,location:e.location,history:e.history,innerWidth:e.innerWidth,innerHeight:e.innerHeight,alert:e.alert,confirm:e.confirm,moveBy:e.moveBy,moveTo:e.moveTo,outerHeight:e.outerHeight,outerWidth:e.outerWidth,print:e.print,resizeBy:e.resizeBy,resizeTo:e.resizeTo,screenX:e.screenX,screenY:e.screenY,scroll:e.scroll,scrollBy:e.scrollBy,scrollX:e.scrollX,scrollY:e.scrollY,localStorage:e.localStorage,sessionStorage:e.sessionStorage,parent:e.parent};
+},{"./foreign.js":"qu+f","../Data.Eq/index.js":"Pq4F","../Data.Functor/index.js":"+0AE","../Data.Newtype/index.js":"lz8k","../Data.Nullable/index.js":"YQ8o","../Data.Ord/index.js":"r4Vb","../Effect/index.js":"oTWB","../Unsafe.Coerce/index.js":"ETUV"}],"MKE0":[function(require,module,exports) {
+"use strict";exports.key=function(t){return t.key},exports.code=function(t){return t.code},exports.locationIndex=function(t){return t.location},exports.ctrlKey=function(t){return t.ctrlKey},exports.shiftKey=function(t){return t.shiftKey},exports.altKey=function(t){return t.altKey},exports.metaKey=function(t){return t.metaKey},exports.repeat=function(t){return t.repeat},exports.isComposing=function(t){return t.isComposing},exports.getModifierState=function(t){return function(e){return function(){return e.getModifierState(t)}}};
+},{}],"o/+T":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),n=require("../Data.Bounded/index.js"),t=require("../Data.Enum/index.js"),r=require("../Data.Eq/index.js"),o=require("../Data.Maybe/index.js"),u=require("../Data.Ord/index.js"),a=require("../Data.Ordering/index.js"),i=require("../Unsafe.Coerce/index.js"),c=require("../Web.Internal.FFI/index.js"),f=function(){function e(){}return e.value=new e,e}(),s=function(){function e(){}return e.value=new e,e}(),d=function(){function e(){}return e.value=new e,e}(),l=function(){function e(){}return e.value=new e,e}(),v=i.unsafeCoerce,m=i.unsafeCoerce,E=function(e){return 0===e?new o.Just(f.value):1===e?new o.Just(s.value):2===e?new o.Just(d.value):3===e?new o.Just(l.value):o.Nothing.value},y=c.unsafeReadProtoTagged("KeyboardEvent"),K=c.unsafeReadProtoTagged("KeyboardEvent"),w=function(e){if(e instanceof f)return 0;if(e instanceof s)return 1;if(e instanceof d)return 2;if(e instanceof l)return 3;throw new Error("Failed pattern match at Web.UIEvent.KeyboardEvent (line 107, column 3 - line 111, column 16): "+[e.constructor.name])},g=new r.Eq(function(e){return function(n){return e instanceof f&&n instanceof f||(e instanceof s&&n instanceof s||(e instanceof d&&n instanceof d||e instanceof l&&n instanceof l))}}),q=new u.Ord(function(){return g},function(e){return function(n){if(e instanceof f&&n instanceof f)return a.EQ.value;if(e instanceof f)return a.LT.value;if(n instanceof f)return a.GT.value;if(e instanceof s&&n instanceof s)return a.EQ.value;if(e instanceof s)return a.LT.value;if(n instanceof s)return a.GT.value;if(e instanceof d&&n instanceof d)return a.EQ.value;if(e instanceof d)return a.LT.value;if(n instanceof d)return a.GT.value;if(e instanceof l&&n instanceof l)return a.EQ.value;throw new Error("Failed pattern match at Web.UIEvent.KeyboardEvent (line 81, column 1 - line 81, column 50): "+[e.constructor.name,n.constructor.name])}}),x=new t.Enum(function(){return q},t.defaultPred(E)(w),t.defaultSucc(E)(w)),L=new n.Bounded(function(){return q},f.value,l.value),b=new t.BoundedEnum(function(){return L},function(){return x},4,w,E),j=function(n){var r=o.fromJust(n),u=t.toEnum(b);return function(n){return r(u(e.locationIndex(n)))}};module.exports={fromUIEvent:y,fromEvent:K,toUIEvent:v,toEvent:m,location:j,Standard:f,Left:s,Right:d,Numpad:l,toEnumKeyLocation:E,fromEnumKeyLocation:w,eqKeyLocation:g,ordKeyLocation:q,boundedKeyLocation:L,enumKeyLocation:x,boundedEnumKeyLocation:b,key:e.key,code:e.code,locationIndex:e.locationIndex,ctrlKey:e.ctrlKey,shiftKey:e.shiftKey,altKey:e.altKey,metaKey:e.metaKey,repeat:e.repeat,isComposing:e.isComposing,getModifierState:e.getModifierState};
+},{"./foreign.js":"MKE0","../Data.Bounded/index.js":"kcUU","../Data.Enum/index.js":"oOsU","../Data.Eq/index.js":"Pq4F","../Data.Maybe/index.js":"5mN7","../Data.Ord/index.js":"r4Vb","../Data.Ordering/index.js":"5Eun","../Unsafe.Coerce/index.js":"ETUV","../Web.Internal.FFI/index.js":"fdUh"}],"JuOH":[function(require,module,exports) {
+"use strict";var e=require("./foreign.js"),n=require("../Control.Applicative/index.js"),r=require("../Control.Apply/index.js"),t=require("../Control.Bind/index.js"),i=require("../Control.Monad.Except/index.js"),o=require("../Data.Array/index.js"),a=require("../Data.BigInt/index.js"),u=require("../Data.Either/index.js"),f=require("../Data.Filterable/index.js"),s=require("../Data.Foldable/index.js"),c=require("../Data.Function/index.js"),d=require("../Data.Functor/index.js"),l=require("../Data.Generic.Rep/index.js"),w=require("../Data.Generic.Rep.Show/index.js"),m=require("../Data.Int/index.js"),b=require("../Data.Lens.Getter/index.js"),p=require("../Data.Lens.Internal.Forget/index.js"),S=require("../Data.Lens.Iso.Newtype/index.js"),I=require("../Data.List.Types/index.js"),y=require("../Data.Map.Internal/index.js"),g=require("../Data.Maybe/index.js"),v=require("../Data.Monoid/index.js"),h=require("../Data.Newtype/index.js"),C=require("../Data.Pair/index.js"),E=require("../Data.Semigroup/index.js"),A=require("../Data.Semiring/index.js"),F=require("../Data.Show/index.js"),x=require("../Data.Symbol/index.js"),N=require("../Data.Time.Duration/index.js"),M=require("../Data.Unit/index.js"),j=require("../Data.Variant/index.js"),q=require("../Data.Variant.Internal/index.js"),k=require("../Effect/index.js"),D=require("../Effect.Aff/index.js"),B=require("../Effect.Aff.AVar/index.js"),R=require("../Effect.Class/index.js"),G=require("../Effect.Class.Console/index.js"),U=require("../Effect.Exception/index.js"),L=require("../Effect.Ref/index.js"),z=require("../Foreign/index.js"),H=require("../Genetics.Browser/index.js"),T=require("../Genetics.Browser.Bed/index.js"),V=require("../Genetics.Browser.Canvas/index.js"),P=require("../Genetics.Browser.Coordinates/index.js"),_=require("../Genetics.Browser.Demo/index.js"),J=require("../Genetics.Browser.Layer/index.js"),O=require("../Genetics.Browser.Track/index.js"),W=require("../Genetics.Browser.Types/index.js"),Z=require("../Genetics.Browser.UI.View/index.js"),Q=require("../Math/index.js"),X=require("../Record/index.js"),Y=require("../Simple.JSON/index.js"),K=require("../Type.Equality/index.js"),$=require("../Web.DOM.Document/index.js"),ee=require("../Web.DOM.ParentNode/index.js"),ne=require("../Web.HTML/index.js"),re=require("../Web.HTML.HTMLDocument/index.js"),te=require("../Web.HTML.Window/index.js"),ie=require("../Web.UIEvent.KeyboardEvent/index.js"),oe=function(){function e(){}return e.value=new e,e}(),ae=function(){function e(){}return e.value=new e,e}(),ue=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),fe=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),se=function(){function e(e){this.value0=e}return e.create=function(n){return new e(n)},e}(),ce=function(e){return function(n){return"<"+e+">"+n+"</"+e+">"}},de=function(n){return function(r){if(r instanceof oe)return V.setElementStyle(n)("visibility")("visible");if(r instanceof ae)return V.setElementStyle(n)("visibility")("hidden");if(r instanceof fe)return V.setElementStyle(n)("left")(F.show(F.showInt)(r.value0)+"px");if(r instanceof ue)return V.setElementStyle(n)("top")(F.show(F.showInt)(r.value0)+"px");if(r instanceof se)return e.setElementContents(n)(r.value0);throw new Error("Failed pattern match at Genetics.Browser.UI (line 321, column 3 - line 331, column 33): "+[r.constructor.name])}},le=function(e){var n,r,t,i=s.foldMap(s.foldableArray)(v.monoidString)(ce("p"))(["SNP: "+e.feature.name,"Chr: "+F.show(W.showChrId)(e.feature.chrId),"Pos: "+F.show(W.showBp)(C.fst(e.position)),"-log10: "+b.viewOn(e.feature.score)((n=W._NegLog10(p.profunctorForget),r=S._Newtype(W.newtypeNegLog10)(W.newtypeNegLog10)(p.profunctorForget),t=W._prec(4),function(e){return n(r(t(e)))}))]);return ce("div")(i)},we=function(e){var n=s.length(s.foldableArray)(A.semiringInt)(e);return function(){return G.log(R.monadEffectEffect)("showing "+F.show(F.showInt)(5)+" out of "+F.show(F.showInt)(n)+" clicked glyphs")(),s.for_(k.applicativeEffect)(s.foldableArray)(o.take(5)(e))((r=G.log(R.monadEffectEffect),function(e){return r(e)}))();var r}},me=function(e){return function(n){var r=o.uncons(n.elements);if(r instanceof g.Nothing)return"";if(r instanceof g.Just&&0===r.value0.tail.length)return e(r.value0.head);if(r instanceof g.Just)return ce("div")(ce("p")(F.show(F.showInt)(s.length(s.foldableArray)(A.semiringInt)(r.value0.tail)+1|0)+" annotations"));throw new Error("Failed pattern match at Genetics.Browser.UI (line 241, column 3 - line 246, column 51): "+[r.constructor.name])}},be=function(r){return function(t){return function(i){return e.keydownEvent(r)(function(e){var r=ie.key(e);return"ArrowLeft"===r?i(new Z.ScrollView(-t.scrollMod)):"ArrowRight"===r?i(new Z.ScrollView(t.scrollMod)):n.pure(k.applicativeEffect)(M.unit)})}}},pe="#infoBox",Se=function(){var e=function(){var e=d.map(k.functorEffect)(re.toDocument)(t.bindFlipped(k.bindEffect)(te.document)(ne.window))();return ee.querySelector(h.wrap(ee.newtypeQuerySelector)(pe))($.toParentNode(e))()}();if(e instanceof g.Nothing)return U.throw("Could not find element '#infoBox'")();if(e instanceof g.Just)return de(e.value0);throw new Error("Failed pattern match at Genetics.Browser.UI (line 344, column 3 - line 346, column 41): "+[e.constructor.name])},Ie=new l.Generic(function(e){if(e instanceof oe)return new l.Inl(l.NoArguments.value);if(e instanceof ae)return new l.Inr(new l.Inl(l.NoArguments.value));if(e instanceof ue)return new l.Inr(new l.Inr(new l.Inl(e.value0)));if(e instanceof fe)return new l.Inr(new l.Inr(new l.Inr(new l.Inl(e.value0))));if(e instanceof se)return new l.Inr(new l.Inr(new l.Inr(new l.Inr(e.value0))));throw new Error("Failed pattern match at Genetics.Browser.UI (line 314, column 1 - line 314, column 54): "+[e.constructor.name])},function(e){if(e instanceof l.Inl)return oe.value;if(e instanceof l.Inr&&e.value0 instanceof l.Inl)return ae.value;if(e instanceof l.Inr&&e.value0 instanceof l.Inr&&e.value0.value0 instanceof l.Inl)return new ue(e.value0.value0.value0);if(e instanceof l.Inr&&e.value0 instanceof l.Inr&&e.value0.value0 instanceof l.Inr&&e.value0.value0.value0 instanceof l.Inl)return new fe(e.value0.value0.value0.value0);if(e instanceof l.Inr&&e.value0 instanceof l.Inr&&e.value0.value0 instanceof l.Inr&&e.value0.value0.value0 instanceof l.Inr)return new se(e.value0.value0.value0.value0);throw new Error("Failed pattern match at Genetics.Browser.UI (line 314, column 1 - line 314, column 54): "+[e.constructor.name])}),ye=new F.Show(w.genericShow(Ie)(w.genericShowSum(w.genericShowConstructor(w.genericShowArgsNoArguments)(new x.IsSymbol(function(){return"IBoxShow"})))(w.genericShowSum(w.genericShowConstructor(w.genericShowArgsNoArguments)(new x.IsSymbol(function(){return"IBoxHide"})))(w.genericShowSum(w.genericShowConstructor(w.genericShowArgsArgument(F.showInt))(new x.IsSymbol(function(){return"IBoxSetY"})))(w.genericShowSum(w.genericShowConstructor(w.genericShowArgsArgument(F.showInt))(new x.IsSymbol(function(){return"IBoxSetX"})))(w.genericShowConstructor(w.genericShowArgsArgument(F.showString))(new x.IsSymbol(function(){return"IBoxSetContents"})))))))),ge=function(n){return function(r){return function(){return e.buttonEvent("scrollLeft")(r(new Z.ScrollView(-n.scrollMod)))(),e.buttonEvent("scrollRight")(r(new Z.ScrollView(n.scrollMod)))(),e.buttonEvent("zoomOut")(r(Z.ZoomView.create(1+n.zoomMod)))(),e.buttonEvent("zoomIn")(r(Z.ZoomView.create(1-n.zoomMod)))()}}},ve=ge({scrollMod:.5,zoomMod:1}),he=function(e){var n=g.fromMaybe(e.feature.name)(e.feature.gene),r=function(){if(e.feature.url instanceof g.Nothing)return n;if(e.feature.url instanceof g.Just)return"<a target='_blank' href='"+e.feature.url.value0+"'>"+n+"</a>";throw new Error("Failed pattern match at Genetics.Browser.UI (line 294, column 18 - line 296, column 84): "+[e.feature.url.constructor.name])}();return ce("p")(r)},Ce=function(e){return function(n){var r=g.fromMaybe("Annotated SNP: "+n.feature.name)(d.map(g.functorMaybe)(function(e){return"Gene: "+e})(n.feature.gene)),t=function(){if(n.feature.url instanceof g.Nothing)return r;if(n.feature.url instanceof g.Just)return"<a target='_blank' href='"+n.feature.url.value0+"'>"+r+"</a>";throw new Error("Failed pattern match at Genetics.Browser.UI (line 272, column 18 - line 276, column 40): "+[n.feature.url.constructor.name])}(),i=s.foldMap(s.foldableArray)(v.monoidString)(ce("p"))(E.append(E.semigroupArray)([t])(f.filterMap(f.filterableArray)(e)(o.fromFoldable(I.foldableList)(n.feature.rest))));return ce("div")(i)}},Ee=function(e){return Ce((r=n.pure(g.applicativeMaybe),t=_.showAnnotationField(e),function(e){return r(t(e))}));var r,t},Ae=function(e){return function(n){var r=o.uncons(n.elements);if(r instanceof g.Nothing)return"";if(r instanceof g.Just&&0===r.value0.tail.length)return Ee(e)(r.value0.head);if(r instanceof g.Just)return ce("div")(ce("p")("Annotations:")+s.foldMap(s.foldableArray)(v.monoidString)(he)(n.elements));throw new Error("Failed pattern match at Genetics.Browser.UI (line 254, column 3 - line 259, column 75): "+[r.constructor.name])}},Fe=x.SProxy.value,xe=function(e){return function(r){return function(i){return function(i){return function(o){return function(a){return t.bind(D.bindAff)(B.empty)(function(u){return t.bind(D.bindAff)(B.empty)(function(f){return t.bind(D.bindAff)(O.makeTrack(e)(r)(i)(a))(function(e){var r=c.flip(B.put)(f),i=t.bind(D.bindAff)(B.take(f))(function(f){return t.discard(t.discardUnit)(D.bindAff)(j.match()(q.variantMatchCons(q.variantMatchCons(q.variantMatchNil)()(K.refl))()(K.refl))()({render:function(e){return n.pure(D.applicativeAff)(M.unit)},docResize:function(e){return t.bind(D.bindAff)(d.map(D.functorAff)(function(e){return e.size})(V.getDimensions(D.monadEffectAff)(a)))(function(n){return t.discard(t.discardUnit)(D.bindAff)(V.setTrackContainerSize(D.monadEffectAff)({width:e.width,height:n.height})(a))(function(){return t.discard(t.discardUnit)(D.bindAff)(r(j.inj()(new x.IsSymbol(function(){return"render"}))(Fe)(M.unit)))(function(){return i})})})}})(f))(function(){return t.discard(t.discardUnit)(D.bindAff)(t.bindFlipped(D.bindAff)(s.traverse_(D.applicativeAff)(s.foldableMaybe)(D.killFiber(U.error("Resetting renderer"))))(B.tryTake(u)))(function(){return t.bind(D.bindAff)(R.liftEffect(D.monadEffectAff)(o))(function(n){return t.bind(D.bindAff)(V.getDimensions(D.monadEffectAff)(a))(function(r){var o=J.trackSlots(r).center,a=P.viewScale(o.size)(n),f=d.map(C.functorPair)(P.scaleToScreen(a))(h.unwrap(P.coordsysviewNewtype)(n));return t.bind(D.bindAff)(D.forkAff(e.render(f)(n)))(function(e){return t.discard(t.discardUnit)(D.bindAff)(B.put(e)(u))(function(){return i})})})})})})});return t.bind(D.bindAff)(D.forkAff(i))(function(i){return t.discard(t.discardUnit)(D.bindAff)(r(j.inj()(new x.IsSymbol(function(){return"render"}))(Fe)(M.unit)))(function(){return n.pure(D.applicativeAff)({lastHotspots:e.hotspots,queueCommand:r})})})})})})}}}}}},Ne=x.SProxy.value,Me=function(r){return function(t){return function(i){return R.liftEffect(D.monadEffectAff)(function(){return e.resizeEvent(function(e){return D.launchAff_(i.queueCommand(j.inj()(new x.IsSymbol(function(){return"docResize"}))(Ne)(e)))})(),V.dragScrollTrack(t)(function(e){return n.when(k.applicativeEffect)(Q.abs(e.x)>=1)(function(){var n=d.map(k.functorEffect)(function(e){return J.trackSlots(e).center})(V.getDimensions(R.monadEffectEffect)(t))(),i=Z.ScrollView.create(e.x/n.size.width);return r.updateView(i)()})})()})}}},je=function(e){return function(r){return t.bind(D.bindAff)(R.liftEffect(D.monadEffectAff)(L.read(e)))(function(e){return t.bind(D.bindAff)(V.getTrack("gene")(e.container))(function(i){return t.bind(D.bindAff)(O.fetchData()()(O.trackDataCons(new x.IsSymbol(function(){return"genes"}))()()(y.monoidMap(W.ordChrId))()()()(O.trackDataNil(K.refl)))(i)({genes:T.getGenes(e.coordSys)})(r.urls))(function(o){return t.bind(D.bindAff)(t.bind(D.bindAff)(_.addChrLayers({coordinateSystem:e.coordSys,segmentPadding:12})(r.chrs)(i))(function(a){return t.bind(D.bindAff)(_.addGeneLayers(e.coordSys)(r.tracks.gene)(o)(i))(function(e){return n.pure(D.applicativeAff)(X.merge()()({chrs:a})(e))})}))(function(n){return t.bind(D.bindAff)(xe()(O.trackRecordRender(new x.IsSymbol(function(){return"chrs"}))()()(O.trackRecordRender(new x.IsSymbol(function(){return"genes"}))()()(O.trackRecordNil(K.refl))))(e.coordSys)(n)(e.viewManager.browserView)(i))(function(n){return t.discard(t.discardUnit)(D.bindAff)(Me(e.viewManager)(i)(n))(function(){return R.liftEffect(D.monadEffectAff)(e.viewManager.addCallback(function(e){return D.launchAff_(n.queueCommand(j.inj()(new x.IsSymbol(function(){return"render"}))(Fe)(M.unit)))}))})})})})})})}},qe=function(e){return function(r){return t.bind(D.bindAff)(R.liftEffect(D.monadEffectAff)(L.read(e)))(function(e){return t.bind(D.bindAff)(V.getTrack("gwas")(e.container))(function(i){return t.bind(D.bindAff)(O.fetchData()()(O.trackDataCons(new x.IsSymbol(function(){return"annotations"}))()()(y.monoidMap(W.ordChrId))()()()(O.trackDataCons(new x.IsSymbol(function(){return"snps"}))()()(y.monoidMap(W.ordChrId))()()()(O.trackDataNil(K.refl))))(i)({snps:_.getSNPs(e.coordSys),annotations:_.getAnnotations(e.coordSys)})(r.urls))(function(a){return t.bind(D.bindAff)(t.bind(D.bindAff)(_.addChrLayers({coordinateSystem:e.coordSys,segmentPadding:12})(r.chrs)(i))(function(o){return t.bind(D.bindAff)(_.addGWASLayers(e.coordSys)(r.tracks.gwas)(a)(i))(function(e){return n.pure(D.applicativeAff)(X.merge()()({chrs:o})(e))})}))(function(n){return t.bind(D.bindAff)(xe()(O.trackRecordRender(new x.IsSymbol(function(){return"annotations"}))()()(O.trackRecordRender(new x.IsSymbol(function(){return"chrs"}))()()(O.trackRecordUI(new x.IsSymbol(function(){return"fixedUI"}))()()(O.trackRecordHotspots(new x.IsSymbol(function(){return"hotspots"}))()()(K.refl)(O.trackRecordRender(new x.IsSymbol(function(){return"snps"}))()()(O.trackRecordNil(K.refl)))))))(e.coordSys)(n)(e.viewManager.browserView)(i))(function(n){return t.discard(t.discardUnit)(D.bindAff)(Me(e.viewManager)(i)(n))(function(){return t.discard(t.discardUnit)(D.bindAff)(R.liftEffect(D.monadEffectAff)(e.viewManager.addCallback(function(e){return D.launchAff_(n.queueCommand(j.inj()(new x.IsSymbol(function(){return"render"}))(Fe)(M.unit)))})))(function(){return R.liftEffect(D.monadEffectAff)((u=_.filterSig(r.score)(a.snps),V.trackClickHandler(R.monadEffectEffect)(i)(new J.Center(function(f){return D.launchAff_(t.bind(D.bindAff)(R.liftEffect(D.monadEffectAff)(e.viewManager.browserView))(function(c){return t.bind(D.bindAff)(d.map(D.functorAff)(function(e){return J.trackSlots(e).center})(V.getDimensions(D.monadEffectAff)(i)))(function(i){var d=H.pixelSegments({segmentPadding:12})(e.coordSys)(i.size)(c),l=_.annotationsForScale(e.coordSys)(u)(a.annotations)(d);return t.bind(D.bindAff)(n.lastHotspots)(function(n){var i=n(1)(f);return R.liftEffect(D.monadEffectAff)(function(){var n=o.head(i);if(n instanceof g.Nothing)return e.cmdInfoBox(ae.value);if(n instanceof g.Just)return function(){return e.cmdInfoBox(oe.value)(),e.cmdInfoBox(fe.create(m.round(f.x)))(),e.cmdInfoBox(ue.create(m.round(f.y)))(),e.cmdInfoBox(se.create(le(n.value0)+s.foldMap(s.foldableMaybe)(v.monoidString)(Ae(r.tracks.gwas.annotations.urls))((i=l,function(e){return t.bindFlipped(g.bindMaybe)(s.find(s.foldableArray)(function(n){return P.pairsOverlap(W.ordBp)(n.covers)(e.position)}))(y.lookup(W.ordChrId)(e.feature.chrId)(i))})(n.value0))))();var i};throw new Error("Failed pattern match at Genetics.Browser.UI (line 427, column 15 - line 436, column 57): "+[n.constructor.name])}())})})}))}))));var u})})})})})})})}},ke=function(o){return function(f){return D.launchAff(t.bind(D.bindAff)(R.liftEffect(D.monadEffectAff)(function(){var e=i.runExcept(P.parseCoordSys(o.coordinateSystem));if(e instanceof u.Left)return U.throw(s.foldMap(I.foldableNonEmptyList)(v.monoidString)(function(e){return z.renderForeignError(e)+" "})(e.value0));if(e instanceof u.Right)return n.pure(k.applicativeEffect)(e.value0);throw new Error("Failed pattern match at Genetics.Browser.UI (line 479, column 11 - line 481, column 24): "+[e.constructor.name])}()))(function(i){var u=g.fromMaybe(h.wrap(P.coordsysviewNewtype)(new C.Pair(A.zero(a.semiringBigInt),b.viewOn(i)(P._TotalSize(a.ringBigInt)))))(t.bind(g.bindMaybe)(o.initialChrs)(function(e){return t.bind(g.bindMaybe)(y.lookup(W.ordChrId)(h.wrap(W.newtypeChrId)(e.left))(b.viewOn(i)(P._Segments(p.strongForget))))(function(r){return t.bind(g.bindMaybe)(y.lookup(W.ordChrId)(h.wrap(W.newtypeChrId)(e.right))(b.viewOn(i)(P._Segments(p.strongForget))))(function(e){return n.pure(g.applicativeMaybe)(h.wrap(P.coordsysviewNewtype)(new C.Pair(r.value0,e.value1)))})})}));return t.discard(t.discardUnit)(D.bindAff)(R.liftEffect(D.monadEffectAff)(e.initDebugDiv(1)))(function(){return t.bind(D.bindAff)(R.liftEffect(D.monadEffectAff)(Se))(function(a){return t.bind(D.bindAff)(R.liftEffect(D.monadEffectAff)(Z.browserViewManager(i)(h.wrap(N.newtypeMilliseconds)(200))({initialView:u})(f)))(function(s){return t.bind(D.bindAff)(R.liftEffect(D.monadEffectAff)(L.new({viewManager:s,cmdInfoBox:a,container:f,coordSys:i})))(function(i){return t.discard(t.discardUnit)(D.bindAff)(R.liftEffect(D.monadEffectAff)((a={scrollMod:.1,zoomMod:.15},function(){var n;return ge(a)(function(e){return s.updateView(e)})(),e.buttonEvent("reset")((n=new Z.ModView(c.const(h.unwrap(P.coordsysviewNewtype)(u))),s.updateView(n)))(),be(b.viewOn(f)(V._Container(V.newtypeBrowserContainer)(p.strongForget)))({scrollMod:.075})(function(e){return s.updateView(e)})(),V.wheelZoom(V.newtypeBrowserContainer)(f)(function(e){var n=Z.ZoomView.create(1+.06*e);return s.updateView(n)})()})))(function(){if(o.urls.snps instanceof g.Just)return r.applySecond(D.applyAff)(qe(i)(o))(n.pure(D.applicativeAff)(M.unit));if(o.urls.snps instanceof g.Nothing)return n.pure(D.applicativeAff)(M.unit);throw new Error("Failed pattern match at Genetics.Browser.UI (line 523, column 3 - line 525, column 25): "+[o.urls.snps.constructor.name])});var a})})})})}))}},De=function(i){return function(){var o,a=function(){var e=d.map(k.functorEffect)(re.toDocument)(t.bindFlipped(k.bindEffect)(te.document)(ne.window))();return ee.querySelector(h.wrap(ee.newtypeQuerySelector)("#browser"))($.toParentNode(e))()}();if(a instanceof g.Nothing)return G.log(R.monadEffectEffect)("Could not find element '#browser'")();if(a instanceof g.Just){var f=Y.read(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"chrs"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"chrBG1"}))(H.readforeignHexColor)(Y.readFieldsCons(new x.IsSymbol(function(){return"chrBG2"}))(H.readforeignHexColor)(Y.readFieldsCons(new x.IsSymbol(function(){return"chrLabels"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"fontSize"}))(Y.readInt)(Y.readFieldsNil)()()))(Y.readFieldsNil)()())()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"coordinateSystem"}))(Y.readForeign)(Y.readFieldsCons(new x.IsSymbol(function(){return"initialChrs"}))(Y.readMaybe(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"left"}))(Y.readString)(Y.readFieldsCons(new x.IsSymbol(function(){return"right"}))(Y.readString)(Y.readFieldsNil)()())()())))(Y.readFieldsCons(new x.IsSymbol(function(){return"score"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"max"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"min"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"sig"}))(Y.readNumber)(Y.readFieldsNil)()())()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"tracks"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"gwas"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"annotations"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"geneColor"}))(H.readforeignHexColor)(Y.readFieldsCons(new x.IsSymbol(function(){return"outline"}))(H.readforeignHexColor)(Y.readFieldsCons(new x.IsSymbol(function(){return"radius"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"snpColor"}))(H.readforeignHexColor)(Y.readFieldsCons(new x.IsSymbol(function(){return"urls"}))(Y.readObject(Y.readString))(Y.readFieldsNil)()())()())()())()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"legend"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"fontSize"}))(Y.readInt)(Y.readFieldsCons(new x.IsSymbol(function(){return"hPad"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"vPad"}))(Y.readNumber)(Y.readFieldsNil)()())()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"padding"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"bottom"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"left"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"right"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"top"}))(Y.readNumber)(Y.readFieldsNil)()())()())()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"score"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"max"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"min"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"sig"}))(Y.readNumber)(Y.readFieldsNil)()())()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"snps"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"color"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"fill"}))(H.readforeignHexColor)(Y.readFieldsCons(new x.IsSymbol(function(){return"outline"}))(H.readforeignHexColor)(Y.readFieldsNil)()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"lineWidth"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"pixelOffset"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"x"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"y"}))(Y.readNumber)(Y.readFieldsNil)()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"radius"}))(Y.readNumber)(Y.readFieldsNil)()())()())()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"trackHeight"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"vscale"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"color"}))(H.readforeignHexColor)(Y.readFieldsCons(new x.IsSymbol(function(){return"fonts"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"labelSize"}))(Y.readInt)(Y.readFieldsCons(new x.IsSymbol(function(){return"scaleSize"}))(Y.readInt)(Y.readFieldsNil)()())()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"hPad"}))(Y.readNumber)(Y.readFieldsCons(new x.IsSymbol(function(){return"numSteps"}))(Y.readInt)(Y.readFieldsNil)()())()())()())()()))(Y.readFieldsNil)()())()())()())()())()())()())()()))(Y.readFieldsNil)()()))(Y.readFieldsCons(new x.IsSymbol(function(){return"urls"}))(Y.readRecord()(Y.readFieldsCons(new x.IsSymbol(function(){return"annotations"}))(Y.readMaybe(Y.readString))(Y.readFieldsCons(new x.IsSymbol(function(){return"genes"}))(Y.readMaybe(Y.readString))(Y.readFieldsCons(new x.IsSymbol(function(){return"snps"}))(Y.readMaybe(Y.readString))(Y.readFieldsNil)()())()())()()))(Y.readFieldsNil)()())()())()())()())()())()()))(i);if(f instanceof u.Left)return e.setElementContents(a.value0)("<p>Error when parsing provided config object:<p>"+s.foldMap(I.foldableNonEmptyList)(v.monoidString)((o=ce("p"),function(e){return o(z.renderForeignError(e))}))(f.value0))();if(f instanceof u.Right){var c=e.windowInnerSize(),l=O.makeContainers()(O.trackConfigCons(new x.IsSymbol(function(){return"gwas"}))(O.trackConfigNil(K.refl))()()()()(K.refl))(c.width)(f.value0.tracks)(),w=V.browserContainer(R.monadEffectEffect)(a.value0)();return function(){if(f.value0.urls.snps instanceof g.Just)return r.applySecond(k.applyEffect)(V.addTrack(R.monadEffectEffect)(w)("gwas")(l.gwas))(n.pure(k.applicativeEffect)(M.unit))();if(f.value0.urls.snps instanceof g.Nothing)return M.unit;throw new Error("Failed pattern match at Genetics.Browser.UI (line 600, column 11 - line 602, column 33): "+[f.value0.urls.snps.constructor.name])}(),G.log(R.monadEffectEffect)(f.value0)(),d.void(k.functorEffect)(ke(f.value0)(w))()}throw new Error("Failed pattern match at Genetics.Browser.UI (line 586, column 7 - line 610, column 33): "+[f.constructor.name])}throw new Error("Failed pattern match at Genetics.Browser.UI (line 582, column 3 - line 610, column 33): "+[a.constructor.name])}};module.exports={_render:Fe,_docResize:Ne,initializeTrack:xe,btnUI:ge,btnUIFixed:ve,keyUI:be,printSNPInfo:we,wrapWith:ce,snpHTML:le,peakHTML:me,annoPeakHTML:Ae,annotationHTML:Ce,annotationHTMLAll:Ee,annotationHTMLShort:he,IBoxShow:oe,IBoxHide:ae,IBoxSetY:ue,IBoxSetX:fe,IBoxSetContents:se,updateInfoBox:de,infoBoxId:pe,initInfoBox:Se,setHandlers:Me,mkGwas:qe,mkGene:je,runBrowser:ke,main:De,genericInfoBoxF:Ie,showInfoBoxF:ye,windowInnerSize:e.windowInnerSize,buttonEvent:e.buttonEvent,keydownEvent:e.keydownEvent,resizeEvent:e.resizeEvent,initDebugDiv:e.initDebugDiv,setDebugDivVisibility:e.setDebugDivVisibility,setDebugDivPoint:e.setDebugDivPoint,setElementContents:e.setElementContents,setWindow:e.setWindow};
+},{"./foreign.js":"DuPX","../Control.Applicative/index.js":"qYya","../Control.Apply/index.js":"QcLv","../Control.Bind/index.js":"7VcT","../Control.Monad.Except/index.js":"Fye2","../Data.Array/index.js":"4t4C","../Data.BigInt/index.js":"Zx+T","../Data.Either/index.js":"B2JL","../Data.Filterable/index.js":"6hfS","../Data.Foldable/index.js":"eVDl","../Data.Function/index.js":"ImXJ","../Data.Functor/index.js":"+0AE","../Data.Generic.Rep/index.js":"AuzG","../Data.Generic.Rep.Show/index.js":"lpst","../Data.Int/index.js":"xNJb","../Data.Lens.Getter/index.js":"OPOX","../Data.Lens.Internal.Forget/index.js":"mj9z","../Data.Lens.Iso.Newtype/index.js":"CiFJ","../Data.List.Types/index.js":"Xxuc","../Data.Map.Internal/index.js":"RRDs","../Data.Maybe/index.js":"5mN7","../Data.Monoid/index.js":"TiEB","../Data.Newtype/index.js":"lz8k","../Data.Pair/index.js":"PpsX","../Data.Semigroup/index.js":"EsAJ","../Data.Semiring/index.js":"11NF","../Data.Show/index.js":"mFY7","../Data.Symbol/index.js":"4oJQ","../Data.Time.Duration/index.js":"AnkF","../Data.Unit/index.js":"NhVk","../Data.Variant/index.js":"hgdh","../Data.Variant.Internal/index.js":"kYoO","../Effect/index.js":"oTWB","../Effect.Aff/index.js":"I7lu","../Effect.Aff.AVar/index.js":"hACG","../Effect.Class/index.js":"dWtH","../Effect.Class.Console/index.js":"3Dts","../Effect.Exception/index.js":"0OCW","../Effect.Ref/index.js":"/Jaj","../Foreign/index.js":"pu1p","../Genetics.Browser/index.js":"X0te","../Genetics.Browser.Bed/index.js":"UuEA","../Genetics.Browser.Canvas/index.js":"VVkU","../Genetics.Browser.Coordinates/index.js":"7bYH","../Genetics.Browser.Demo/index.js":"mKwt","../Genetics.Browser.Layer/index.js":"YWUW","../Genetics.Browser.Track/index.js":"HH6s","../Genetics.Browser.Types/index.js":"HhmG","../Genetics.Browser.UI.View/index.js":"Tmz+","../Math/index.js":"Rpaz","../Record/index.js":"0gG4","../Simple.JSON/index.js":"DqNI","../Type.Equality/index.js":"Uq/R","../Web.DOM.Document/index.js":"0hiR","../Web.DOM.ParentNode/index.js":"lU5U","../Web.HTML/index.js":"UQRJ","../Web.HTML.HTMLDocument/index.js":"EU5r","../Web.HTML.Window/index.js":"o+50","../Web.UIEvent.KeyboardEvent/index.js":"o/+T"}],"Focm":[function(require,module,exports) {
+var e=require("./output/Genetics.Browser.UI");window.GenomeBrowser=e;
+},{"./output/Genetics.Browser.UI":"JuOH"}]},{},["Focm"], null) \ No newline at end of file
diff --git a/wqflask/wqflask/submit_bnw.py b/wqflask/wqflask/submit_bnw.py
new file mode 100644
index 00000000..59e60dfd
--- /dev/null
+++ b/wqflask/wqflask/submit_bnw.py
@@ -0,0 +1,11 @@
+from __future__ import absolute_import, print_function, division
+
+from base.trait import GeneralTrait
+from base import data_set
+from utility import helper_functions
+
+import utility.logger
+logger = utility.logger.getLogger(__name__ )
+
+def get_bnw_input(start_vars):
+ logger.debug("BNW VARS:", start_vars) \ No newline at end of file
diff --git a/wqflask/wqflask/templates/base.html b/wqflask/wqflask/templates/base.html
index ec55ebeb..46eee474 100644
--- a/wqflask/wqflask/templates/base.html
+++ b/wqflask/wqflask/templates/base.html
@@ -4,14 +4,16 @@
<head>
<meta charset="utf-8">
- <title>{% block title %}{% endblock %} GeneNetwork</title>
+ <title>{% block title %}{% endblock %}</title>
<meta name="description" content="">
<meta name="author" content="">
+ <link rel="icon" type="image/png" sizes="64x64" href="/static/new/images/CITGLogo.png">
+ <link rel="apple-touch-icon" type="image/png" sizes="64x64" href="/static/new/images/CITGLogo.png">
<link REL="stylesheet" TYPE="text/css" href="/static/packages/bootstrap/css/bootstrap.css" />
<link REL="stylesheet" TYPE="text/css" href="/static/packages/bootstrap/css/non-responsive.css" />
<link REL="stylesheet" TYPE="text/css" href="/static/packages/bootstrap/css/docs.css" />
<link rel="stylesheet" type="text/css" href="/static/packages/colorbox/example4/colorbox.css" />
- <link rel="stylesheet" type="text/css" href="/static/new/css/main.css" />
+ <!--<link rel="stylesheet" type="text/css" href="/static/new/css/main.css" />-->
<link rel="stylesheet" type="text/css" href="/static/new/css/parsley.css" />
{% block css %}
@@ -19,78 +21,98 @@
</head>
-<body style="width: 100% !important;">
+<body style="width: 100%">
<!-- Navbar ================================================== -->
- <div class="navbar navbar-inverse navbar-static-top pull-left" role="navigation">
-
- <div class="container-fluid" style="width: 1500px !important;">
+ <div class="navbar navbar-inverse navbar-static-top pull-left" role="navigation" style="width: 100%; min-width: 770px; white-space: nowrap;">
+ <!--<div class="navbar navbar-default" style="width: 100%; white-space: nowrap;">-->
+ <div class="container-fluid" style="width: 100%;">
<!-- Brand and toggle get grouped for better mobile display -->
+ <!---
<div class="navbar-header">
- <a class="navbar-brand" href="/">GeneNetwork</a>
+ <a class="navbar-brand" href="/">GeneNetwork</a>
</div>
+ -->
<!-- Collect the nav links, forms, and other content for toggling -->
<div>
<ul class="nav navbar-nav">
- <li class="">
- <a href="/intro">Intro</a>
- </li>
- <li class="">
- <a href="/">Search</a>
- </li>
- <li class="">
- <a href="/collections/list">Collections
- {% if g.user_session.user_ob %}
- <span class="badge badge-info">{{ g.user_session.user_ob.display_num_collections() }}</span>
- {% else %}
- <span class="badge badge-info">{{ g.cookie_session.display_num_collections() }}</span>
- {% endif %}
- </a>
+ <li class="" style="margin-right: 20px;">
+ <a href="/" style="font-weight: bold;">GeneNetwork</a>
</li>
<li class="">
- <a href="/help">Help</a>
+ <a href="/help" class="dropdow-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Intro <span class="caret"></a>
+ <ul class="dropdown-menu">
+ <li><a href="/intro">Intro</a></li>
+ <li><a href="/submit_trait">Submit Trait</a></li>
+ <li><a href="http://genenetwork.org/webqtl/main.py?FormID=batSubmit">Batch Submission</a></li>
+ </ul>
</li>
<li class="">
- <a href="/news">News</a>
+ <a href="/help" class="dropdow-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Help <span class="caret"></a>
+ <ul class="dropdown-menu">
+ <li><a href="/references">References</a></li>
+ <li><a href="http://gn1.genenetwork.org/glossary.html">Glossary of Term</a></li>
+ <li><a href="http://gn1.genenetwork.org/faq.html">FAQ</a></li>
+ <li><a href="/policies">Policies</a></li>
+ <li><a href="/links">Links</a></li>
+ <li><a href="/environments">Environments</a></li>
+ <li><a href="/news">GN1 News</a></li>
+ <li><a href="/tutorials">Tutorials/Primers</a></li>
+ </ul>
</li>
<li class="">
- <a href="/references">References</a>
+ <a href="/help" class="dropdow-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Tools <span class="caret"></a>
+ <ul class="dropdown-menu">
+ <li><a href="/snp_browser">Variant Browser</a></li>
+ <li><a href="http://bnw.genenetwork.org/BNW/sourcecodes/home.php">Bayesian Network Webserver</a></li>
+ <li><a href="https://systems-genetics.org/">Systems Genetics PheWAS</a></li>
+ <li><a href="http://ucscbrowser.genenetwork.org/">Genome Browser</a></li>
+ <li><a href="http://power.genenetwork.org">BXD Power Calculator</a></li>
+ <li><a href="httP://datafiles.genenetwork.org">Interplanetary File System</a></li>
+ </ul>
</li>
<li class="">
- <a href="/policies">Policies</a>
+ <a href="/collections/list">Collections
+ <span class="badge badge-info">{{ g.user_session.num_collections }}</span>
+ </a>
</li>
<li class="">
- <a href="/links">Links</a>
- </li>
- <li class="">
- <a href="/environments">Environments</a>
+ <a href="/repositories" class="dropdow-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Source Code <span class="caret"></a>
+ <ul class="dropdown-menu">
+ <li><a href="https://github.com/genenetwork/genenetwork2">GN2 Source Code</a></li>
+ <li><a href="https://github.com/genenetwork/genenetwork">GN1 Source Code</a></li>
+ <li><a href="https://github.com/genenetwork/sysmaintenance">System Maintenance Code</a></li>
+ <li><a href="https://github.com/genenetwork/genenetwork2/blob/testing/doc/API_readme.md">REST API Documentation</a></li>
+ </ul>
</li>
<li class="">
{% if g.user_session.logged_in %}
- <a id="login_out" title="Signed in as {{ g.user_session.user_ob.name_and_org }}." href="/n/logout">Sign out</a>
+ <a id="login_out" title="Signed in as {{ g.user_session.user_name }}" href="/n/logout">Sign out</a>
{% else %}
<a id="login_in" href="/n/login">Sign in</a>
{% endif %}
</li>
+ <!--
<li style="margin-left: 20px;">
- <a href="http://www.genenetwork.org" style="font-weight: bold;" >Use GeneNetwork 1</a>
+ <a href="http://gn2-staging.genenetwork.org" style="font-weight: bold;" >Use Staging Branch</a>
</li>
+ -->
</ul>
</div>
</div>
</div>
- <div class="container-fluid" style="position: relative; background-color: #d5d5d5; height: 95px;">
+ <div class="container-fluid" style="width: 100%; min-width: 650px; position: relative; background-color: #d5d5d5; height: 84px;">
<form method="get" action="/gsearch">
- <div class="row" style="position: absolute; bottom: 0; top: 30px;">
- <select class="form-control col-xs-2" style="width: 170px; margin-top: 15px; margin-left: 10px;" name="type">
+ <div class="row" style="width: 100%; position: absolute; bottom: 0; top: 30px;">
+ <select style="width: 160px; margin-top: 15px; margin-left: 20px;" name="type">
<option value="gene">Genes / Molecules</option>
<option value="phenotype" {% if type=="phenotype" %}selected{% endif %}>Phenotypes</option>
</select>
- <input class="btn btn-primary form-control col-xs-2" style="width: 100px; margin-top: 15px; margin-left: 10px;" type="submit" value="Search All">
- <input class="form-control col-xs-6" style="width: 600px; margin-top: 15px; margin-left: 10px;" type="text" name="terms" required>
+ <input class="btn btn-primary" style="width: 100px; margin-left: 10px;" type="submit" value="Search All">
+ <input style="width: 50%; margin-top: 15px; margin-left: 10px;" type="text" name="terms" required>
</div>
</form>
</div>
@@ -99,54 +121,75 @@
{% endblock %}
<footer class="footer">
- <div class="container">
- <p>GeneNetwork is a framework for web based genetics
- launched in 1994 as
- <a href="http://www.ncbi.nlm.nih.gov/pubmed?term=8043953">
- The Portable Dictionary of the Mouse Genome</a> (previously <a href="https://www.ncbi.nlm.nih.gov/pubmed/15043217">WebQTL</a>).
- </p>
- <p>
- Operated by
- <a href="mailto:rwilliams@uthsc.edu">Rob Williams</a>,
- <a href="mailto:lyan6@uthsc.edu">Lei Yan</a>,
- <a href="mailto:zachary.a.sloan@gmail.com">Zachary Sloan</a>,
- <a href="mailto:acenteno@uthsc.edu">Arthur Centeno</a> and
- <a href="http://thebird.nl/">Pjotr Prins</a>.
- </p>
- <p>Published in
- <a href="http://joss.theoj.org/papers/10.21105/joss.00025"><img src="https://camo.githubusercontent.com/846b750f582ae8f1d0b4f7e8fee78bed705c88ba/687474703a2f2f6a6f73732e7468656f6a2e6f72672f7061706572732f31302e32313130352f6a6f73732e30303032352f7374617475732e737667" alt="JOSS" data-canonical-src="http://joss.theoj.org/papers/10.21105/joss.00025/status.svg" style="max-width:100%;"></a>
- </p>
- <br />
- <p>GeneNetwork is supported by:</p>
- <UL>
- <LI>
- <a href="http://citg.uthsc.edu">
- The UT Center for Integrative and Translational Genomics
- </A>
- </li>
- <LI><a href="http://www.iniastress.org">NIAAA</A>
- Integrative Neuroscience Initiative on Alcoholism
- (U01 AA016662, U01 AA013499, U24 AA013513, U01 AA014425)
- </li>
- <LI>
- <a
- href="https://www.drugabuse.gov/">NIDA</A>, <a class="smallsize" href="http://www.nimh.nih.gov/">NIMH</A>
- , and <a class="smallsize" href="http://www.niaaa.nih.gov/">
- NIAAA</A> (P20-DA 21131)
- </li>
- <LI>NCI <a href="http://emice.nci.nih.gov/">MMHCC</A> (U01CA105417) and
- <a href="https://en.wikipedia.org/wiki/National_Center_for_Research_Resources">NCRR</a>
- <a href="https://en.wikipedia.org/wiki/Biomedical_Informatics_Research_Network">BIRN</a>
- (U24 RR021760)
- </li>
- </UL>
- <!--</p>-->
- <p>
- Development and source code on <a href="https://github.com/genenetwork/">github</a> with <a href="https://github.com/genenetwork/genenetwork2/issues">issue tracker</a> and <a href="https://github.com/genenetwork/genenetwork2/blob/master/README.md">documentation</a>. Join the <a href="http://listserv.uthsc.edu/mailman/listinfo/genenetwork-dev">mailing list</a> and find us on <a href="https://webchat.freenode.net/">IRC</a> (#genenetwork channel).
- {% if version: %}
- <p><small>GeneNetwork v{{ version }}</small></p>
- {% endif %}
-
+ <div class="row" style="margin: 10px; width: 100%; min-width: 1200px;">
+ <div class="col-xs-6">
+ <p> Web services initiated January, 1994 as
+ <a href="http://www.ncbi.nlm.nih.gov/pubmed?term=8043953">
+ The Portable Dictionary of the Mouse Genome
+ </a>; June 15, 2001 as <a href="https://www.ncbi.nlm.nih.gov/pubmed/15043217">WebQTL</a>; and Jan 5, 2005 as GeneNetwork.
+ </p>
+ <p>
+ This site is currently operated by
+ <a href="mailto:rwilliams@uthsc.edu">Rob Williams</a>,
+ <a href="http://thebird.nl/">Pjotr Prins</a>,
+ <a href="mailto:zachary.a.sloan@gmail.com">Zachary Sloan</a>,
+ <a href="mailto:acenteno@uthsc.edu">Arthur Centeno</a>,
+ and <a href="mailto:cfische7@uthsc.edu">Christian Fischer</a>.
+ </p>
+ <p>Design and code by Pjotr Prins, Zach Sloan, Arthur Centeno, Christan Fischer, Danny Arends, Sam Ockman, Lei Yan, Xiaodong Zhou, Christian Fernandez,
+ Ning Liu, Rudi Alberts, Elissa Chesler, Sujoy Roy, Evan G. Williams, Alexander G. Williams, Kenneth Manly, Jintao Wang, and Robert W. Williams,
+ <a href="http://genenetwork.org/credit.html">colleagues</a>.</p>
+ <br />
+ <p>GeneNetwork support from:</p>
+ <ul>
+ <li>
+ <a href="http://citg.uthsc.edu">
+ The UT Center for Integrative and Translational Genomics
+ </a>
+ </li>
+ <li>
+ <a href="https://www.nigms.nih.gov/">NIGMS</a>
+ Systems Genetics and Precision Medicine Project (R01 GM123489, 2017-2021)
+ </li>
+ <li>
+ <a href="https://www.drugabuse.gov/">NIDA</a>
+ NIDA Core Center of Excellence in Transcriptomics, Systems Genetics, and the Addictome (P30 DA044223, 2017-2022)
+ </li>
+ <li>
+ <a href="http://www.nia.nih.gov/">NIA</a>
+ Translational Systems Genetics of Mitochondria, Metabolism, and Aging (R01AG043930, 2013-2018)
+ </li>
+ <li>
+ <a href="http://www.iniastress.org/">NIAAA</a>
+ Integrative Neuroscience Initiative on Alcoholism (U01 AA016662, U01 AA013499, U24 AA013513, U01 AA014425, 2006-2017)
+ </li>
+ <li>
+ <a href="http://www.drugabuse.gov/">NIDA</a>, <a href="http://www.nimh.nih.gov/">NIMH</a>, and <a href="http://www.niaaa.nih.gov/">NIAAA</a>
+ (P20-DA 21131, 2001-2012)
+ </li>
+ <li>
+ NCI <a href="http://emice.nci.nih.gov/">MMHCC</a> (U01CA105417), NCRR, <a href="http://www.birncommunity.org/">BIRN</a>, (U24 RR021760)
+ </li>
+ </UL>
+ <!--</p>-->
+ <p>Published in
+ <a href="http://joss.theoj.org/papers/10.21105/joss.00025"><img src="https://camo.githubusercontent.com/846b750f582ae8f1d0b4f7e8fee78bed705c88ba/687474703a2f2f6a6f73732e7468656f6a2e6f72672f7061706572732f31302e32313130352f6a6f73732e30303032352f7374617475732e737667" alt="JOSS" data-canonical-src="http://joss.theoj.org/papers/10.21105/joss.00025/status.svg" style="max-width:100%;"></a>
+ </p>
+ <p>
+ Development and source code on <a href="https://github.com/genenetwork/">github</a> with <a href="https://github.com/genenetwork/genenetwork2/issues">issue tracker</a> and <a href="https://github.com/genenetwork/genenetwork2/blob/master/README.md">documentation</a>. Join the <a href="http://listserv.uthsc.edu/mailman/listinfo/genenetwork-dev">mailing list</a> and find us on <a href="https://webchat.freenode.net/">IRC</a> (#genenetwork channel).
+ {% if version: %}
+ <p><small>GeneNetwork {{ version }}</small></p>
+ {% endif %}
+
+ </div>
+ <div class="col-xs-2">
+ <a href="http://www.python.org/" target="_blank">
+ <img src="/static/new/images/PythonLogo.png" alt="Python Powered" border="0">
+ </a>
+ <a href="http://www.neuinfo.org" target="_blank">
+ <img src="/static/new/images/Nif.png" alt="Registered with Nif" border="0">
+ </a>
+ </div>
</div>
</footer>
@@ -180,7 +223,7 @@
</script>
<script src="/static/new/js_external/jquery.cookie.js"></script>
<script type="text/javascript" src="/static/new/js_external/json2.js"></script>
- <script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js" type="text/javascript"></script>
+ <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript" src="/static/packages/colorbox/jquery.colorbox.js"></script>
<!--<script type="text/javascript" src="/static/new/javascript/login.js"></script>-->
diff --git a/wqflask/wqflask/templates/bnw_page.html b/wqflask/wqflask/templates/bnw_page.html
new file mode 100644
index 00000000..e506d8a8
--- /dev/null
+++ b/wqflask/wqflask/templates/bnw_page.html
@@ -0,0 +1,7 @@
+<title>Opening BNW</title>
+<form method="post" action="http://bnw.genenetwork.org/BNW/sourcecodes/bn_genenet.php" name="bnwform" id="bnwform">
+ <input type="hidden" name="My_Genenet" value="{{ form_value }}">
+</form>
+<script type="text/javascript">
+ document.bnwform.submit();
+</script> \ No newline at end of file
diff --git a/wqflask/wqflask/templates/collections/add.html b/wqflask/wqflask/templates/collections/add.html
index d45aa015..825dfb84 100644
--- a/wqflask/wqflask/templates/collections/add.html
+++ b/wqflask/wqflask/templates/collections/add.html
@@ -1,36 +1,48 @@
<div id="myModal">
<div class="modal-header">
- <h3>Add to collection</h3>
- <p>You have two choices: Create and name a collection,
- or add the traits to an existing collection.</p>
+ <h2>Define or Add to Collection</h2>
+ <p>You have two choices: Name a new collection
+ or add to an existing collection.</p>
</div>
- <div class="modal-body">
+ <div class="modal-body" style="margin-left: 20px;">
<form action="/collections/new" data-validate="parsley" id="add_form">
+ {% if traits is defined %}
<input type="hidden" name="traits" value="{{ traits }}" />
+ {% else %}
+ <input type="hidden" name="hash" value="{{ hash }}" />
+ {% endif %}
+ {% if collections|length > 0 %}
<fieldset>
- <legend>Create a new named collection</legend>
- <label>New collection name</label>
- <input type="text" name="new_collection" placeholder="Name of new collection..."
- data-trigger="change" data-minlength="5" data-maxlength="50">
- <span class="help-block">Type the name of the new collection.</span>
- {% if uc is not defined %}
- <span class="help-block" style="color:red;">This collection will be saved to this computer for 5 days.</span>
- {% endif %}
- <button type="submit" name="create_new" class="btn">Create and add traits</button>
- </fieldset>
- <hr />
- <fieldset>
- <legend>Or add to an existing collection</legend>
- <label>Existing collection name</label>
-
+ <legend>1. Add to an existing collection</legend>
+ <div style="margin-left: 20px;">
+ <!--<label>Existing collection name:</label>-->
<select name="existing_collection" class="form-control">
+ <!--<option selected disabled>Select Collection</option>-->
{% for col in collections %}
+ {% if loop.index == 1 %}
+ <option value="{{ col.id }}:{{ col.name }}" selected>{{ col.name }}</option>
+ {% else %}
<option value="{{ col.id }}:{{ col.name }}">{{ col.name }}</option>
+ {% endif %}
{% endfor %}
</select>
<br />
-
- <button type="submit" name="add_to_existing" class="btn">Add to existing collection</button>
+ <button type="submit" name="add_to_existing" class="btn btn-primary">Add to existing collection</button>
+ </div>
+ </fieldset>
+ {% endif %}
+ <hr />
+ <fieldset>
+ <legend>{% if collections|length > 0 %}2. {% else %}{% endif %}Create a new collection</legend>
+ <div style="margin-left: 20px;">
+ <!--<label>Collection name:</label>-->
+ <input type="text" name="new_collection" placeholder=" Name of new collection..."
+ data-trigger="change" data-minlength="5" data-maxlength="50" style="width: 100%">
+ <button type="submit" name="create_new" class="btn btn-primary" style="margin-top: 20px;">Create collection</button>
+ {% if uc is not defined %}
+ <span class="help-block">This collection will be saved to your computer for a year (or until you clear your cache).</span>
+ {% endif %}
+ </div>
</fieldset>
</form>
</div>
diff --git a/wqflask/wqflask/templates/collections/list.html b/wqflask/wqflask/templates/collections/list.html
index 6dc52c4d..3829b950 100644
--- a/wqflask/wqflask/templates/collections/list.html
+++ b/wqflask/wqflask/templates/collections/list.html
@@ -2,34 +2,36 @@
{% block title %}Your Collections{% endblock %}
{% block css %}
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.bootstrap.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
{% endblock %}
{% block content %}
<!-- Start of body -->
- {% if g.user_session.user_ob %}
- {{ header("Your Collections",
- 'You have {}.'.format(numify(collections|count, "collection", "collections"))) }}
- {% else %}
- {{ header("Your Collections",
- 'You have {}.'.format(numify(collections|count, "collection", "collections"))) }}
- {% endif %}
-
-
<div class="container">
- <div class="page-header">
- {% if g.user_session.user_ob %}
- <h1>Collections owned by {{ g.user_session.user_ob.full_name }}</h1>
- {% else %}
- <h1>Your Collections</h1>
- {% endif %}
- </div>
+ {% if g.user_session.logged_in %}
+ <h1>Collections owned by {{ g.user_session.user_name }}</h1>
+ {% else %}
+ <h1>Your Collections</h1>
+ {% endif %}
- <div id="collections_list" style="width:50%;">
- <table class="table table-hover table-striped" id='trait_table'>
+ <div>
+ <form id="collections_form" action="/delete" method="post">
+ <input type="hidden" name="uc_id" id="uc_id" value="" />
+ </form>
+ <button class="btn btn-default" id="select_all"><span class="glyphicon glyphicon-ok"></span> Select All</button>
+ <button class="btn btn-default" id="deselect_all"><span class="glyphicon glyphicon-remove"></span> Deselect All</button>
+ <button class="btn btn-default" id="invert"><span class="glyphicon glyphicon-resize-vertical"></span> Invert</button>
+ <button class="btn btn-danger" id="remove_collections" data-url="/collections/delete">Remove Collections</button>
+ <input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline;" placeholder="Search This Table For ...">
+ <input type="text" id="select_top" class="form-control" style="width: 200px; display: inline;" placeholder="Select Top ...">
+ </div>
+ <br>
+ <div id="collections_list" style="width:50%; margin-top: 20px; margin-bottom: 20px;">
+ {% if collections|length > 0 %}
+ <table class="table-hover table-striped cell-border" id='trait_table' style="float: left;">
<thead>
<tr>
+ <th></th>
<th>Index</th>
<th>Name</th>
<th>Created</th>
@@ -41,20 +43,19 @@
<tbody>
{% for uc in collections %}
<tr class="collection_line">
- <td>{{ loop.index }}
- {% if g.user_session.user_ob %}
+ <td align="center" style="padding: 0px;"><INPUT TYPE="checkbox" NAME="collection" class="checkbox trait_checkbox" VALUE="{{ uc.id }}"></td>
+ <td align="right">{{ loop.index }}
<td><a class="collection_name" href="{{ url_for('view_collection', uc_id=uc.id) }}">{{ uc.name }}</a></td>
- {% else %}
- <td><a class="collection_name" href="{{ url_for('view_collection', collection_id=uc.id) }}">{{ uc.name }}</a></td>
- {% endif %}
- <td>{{ timeago(uc.created_timestamp.isoformat() + "Z") }}</td>
- <td>{{ timeago(uc.changed_timestamp.isoformat() + "Z") }}</td>
+ <td>{{ uc.created_timestamp }}</td>
+ <td>{{ uc.changed_timestamp }}</td>
<td align="right">{{ uc.num_members }}</td>
</tr>
{% endfor %}
</tbody>
</table>
-
+ {% else %}
+ You have no collections yet.
+ {% endif %}
</div>
</div>
@@ -64,41 +65,60 @@
{% block js %}
<script type="text/javascript" src="/static/packages/smart-time-ago/lib/timeago.js"></script>
+ <script type="text/javascript" src="/static/new/javascript/search_results.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.min.js"></script>
- <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/buttons/1.0.0/js/dataTables.buttons.min.js"></script>
- <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/buttons/1.0.0/js/buttons.html5.min.js"></script>
- <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/buttons/1.0.0/js/buttons.bootstrap.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colResize.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colReorder.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/DT_bootstrap/DT_bootstrap.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script>
- {% if "color_by_trait" in params %}
- <script type="text/javascript" src="/static/new/javascript/get_traits_from_collection.js"></script>
- {% endif %}
+ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.buttons.min.js"></script>
<script>
$('#trait_table').dataTable( {
+ "drawCallback": function( settings ) {
+ $('#trait_table tr').click(function(event) {
+ if (event.target.type !== 'checkbox') {
+ $(':checkbox', this).trigger('click');
+ }
+ });
+ },
+ "buttons": [ 'copy', 'csv', 'excel' ],
"columns": [
- { "type": "natural",
- "width": "10%" },
- { "type": "natural" },
- { "type": "natural",
- "width": "25%" },
- { "type": "natural",
- "width": "25%" },
- { "type": "natural",
- "width": "10%" }
+ { "type": "natural", "width": "3%" },
+ { "type": "natural", "width": "8%" },
+ { "type": "natural", "width": "20%" },
+ { "type": "natural", "width": "25%" },
+ { "type": "natural", "width": "25%" },
+ { "type": "natural", "width": "15%" }
],
- "sDom": "RZtr",
+ "columnDefs": [ {
+ "targets": 0,
+ "orderable": false
+ } ],
+ "order": [[1, "asc" ]],
+ "sDom": "BZtr",
"iDisplayLength": -1,
- "autoWidth": true,
+ "autoWidth": false,
"bDeferRender": true,
"bSortClasses": false,
- "scrollY": "600px",
"scrollCollapse": true,
- "paging": false
+ "paging": false,
+ "orderClasses": true
} );
+ submit_special = function(url) {
+ $("#collections_form").attr("action", url);
+ return $("#collections_form").submit();
+ };
+
+ $("#remove_collections").on("click", function() {
+ url = $(this).data("url")
+ collections = []
+ $(".trait_checkbox:checked").each(function() {
+ collections.push($(this).val());
+ });
+ collections_string = collections.join(":")
+ $("input[name=uc_id]").val(collections_string)
+ return submit_special(url)
+ });
+
+
</script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/collections/view.html b/wqflask/wqflask/templates/collections/view.html
index 9d03e6d7..6639f46a 100644
--- a/wqflask/wqflask/templates/collections/view.html
+++ b/wqflask/wqflask/templates/collections/view.html
@@ -2,124 +2,152 @@
{% block title %}View Collection{% endblock %}
{% block css %}
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.dataTables.css">
+ <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
{% endblock %}
{% block content %}
<!-- Start of body -->
- <div class="container">
- {% if uc %}
- <h2>{{ uc.name }}</h2>
- <h3>{{ 'This collection has {}.'.format(numify(trait_obs|count, "record", "records")) }}</h3>
- {% else %}
- <h2> {{ collection_name }}</h2>
- <h3>{{ 'This collection has {}.'.format(numify(trait_obs|count, "record", "records")) }}</h3>
- {% endif %}
- </div>
+ <div class="container" style="min-width: 1250px;">
+ <h1>
+ <span id="collection_name">{{ uc.name }}</span>
+ <input type="text" name="new_collection_name" style="font-size: 20px; display: none; width: 500px;" class="form-control" placeholder="{{ uc.name }}">
+ <button class="btn btn-default" style="display: inline;" id="change_collection_name">Change Collection Name</button>
+ </h1>
+ <h3>This collection has {{ '{}'.format(numify(trait_obs|count, "record", "records")) }}</h3>
+
+ <!--<hr style="height: 1px; background-color: #A9A9A9;">-->
- <div class="container">
<div>
<form id="collection_form" action="/delete" method="post">
- {% if uc %}
<input type="hidden" name="uc_id" id="uc_id" value="{{ uc.id }}" />
- {% endif %}
<input type="hidden" name="collection_name" id="collection_name" value="{{ collection_name }}" />
+ <input type="hidden" name="tool_used" value="" />
+ <input type="hidden" name="form_url" value="" />
<input type="hidden" name="trait_list" id="trait_list" value= "
{% for this_trait in trait_obs %}
- {{ this_trait.name }}:{{ this_trait.dataset.name }},
+ {{ this_trait.name }}:{{ this_trait.dataset.name }}:{{ data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name)) }},
{% endfor %}" >
- <div class="col-xs-3 controls">
- <button id="delete" class="btn btn-danger submit_special" data-url="/collections/delete" title="Delete this collection" >
- Delete this collection
- </button>
- </div>
- <div class="col-xs-2 controls">
- <button id="corr_matrix" class="btn btn-primary submit_special" data-url="/corr_matrix" title="Correlation Matrix" >
- Correlation Matrix
- </button>
- </div>
- <div class="col-xs-2 controls">
- <button id="network_graph" class="btn btn-primary submit_special" data-url="/network_graph" title="Network Graph" >
- Network Graph
- </button>
- </div>
- <div class="col-xs-2 controls">
- <button id="wgcna_setup" class="btn btn-primary submit_special" data-url="/wgcna_setup" title="WGCNA Analysis" >
- WGCNA Analysis
- </button>
- </div>
- <div class="col-xs-2 controls">
- <button id="ctl_setup" class="btn btn-primary submit_special" data-url="/ctl_setup" title="CTL Analysis" >
- CTL Analysis
- </button>
- </div>
- <div class="col-xs-1 controls">
- <button id="heatmap" class="btn btn-primary submit_special" data-url="/heatmap" title="Heatmap" >
- Heatmap
- </button>
- </div>
+
+ <button id="corr_matrix" class="btn btn-primary submit_special" data-url="/corr_matrix" title="Correlation Matrix" >
+ Correlations
+ </button>
+
+ <button id="network_graph" class="btn btn-primary submit_special" data-url="/network_graph" title="Network Graph" >
+ Networks
+ </button>
+
+ <button id="send_to_webgestalt" class="btn btn-primary submit_special" data-url="/webgestalt_page" title="WebGestalt" >
+ WebGestalt
+ </button>
+
+ <button id="send_to_geneweaver" class="btn btn-primary submit_special" data-url="/geneweaver_page" title="GeneWeaver" >
+ GeneWeaver
+ </button>
+
+ <button id="send_to_bnw" class="btn btn-primary submit_special" data-url="/bnw_page" title="Bayesian Network" >
+ BNW
+ </button>
+
+ <button id="wgcna_setup" class="btn btn-primary submit_special" data-url="/wgcna_setup" title="WGCNA Analysis" >
+ WGCNA
+ </button>
+
+ <button id="ctl_setup" class="btn btn-primary submit_special" data-url="/ctl_setup" title="CTL Analysis" >
+ CTL Maps
+ </button>
+
+ <button id="heatmap" class="btn btn-primary submit_special" data-url="/heatmap" title="Heatmap" >
+ MultiMap
+ </button>
+
+ <button id="comp_bar_chart" class="btn btn-primary submit_special" data-url="/comparison_bar_chart" title="Comparison Bar Chart" >
+ Comparison Bar Chart
+ </button>
+
</form>
</div>
<div>
<br />
- <br />
- <br />
- <button class="btn btn-default" id="select_all"><span class="glyphicon glyphicon-ok"></span> Select All</button>
- <button class="btn btn-default" id="deselect_all"><span class="glyphicon glyphicon-remove"></span> Deselect All</button>
- <button class="btn btn-default" id="invert"><span class="glyphicon glyphicon-resize-vertical"></span> Invert</button>
- <button class="btn" id="add" disabled="disabled"><i class="icon-plus-sign"></i> Add Record to Other Collection</button>
- <button class="btn" id="remove" disabled="disabled"><i class="icon-minus-sign"></i> Remove Record</button>
- <br />
- <br />
<form id="export_form" method="POST" action="/export_traits_csv">
- <input type="hidden" name="database_name" id="database_name" value="None">
- <input type="hidden" name="export_data" id="export_data" value="">
- <button class="btn btn-default" id="export_traits">Download CSV</button>
+ <button class="btn btn-default" id="select_all" type="button"><span class="glyphicon glyphicon-ok"></span> Select All</button>
+ <button class="btn" id="add" disabled="disabled" type="button"><i class="icon-plus-sign"></i> Copy</button>
+ <input type="hidden" name="database_name" id="database_name" value="None">
+ <input type="hidden" name="export_data" id="export_data" value="">
+ <input type="hidden" name="file_name" id="file_name" value="collection_table">
+ <button class="btn btn-default" id="export_traits">Download CSV</button>
+ <input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline; padding-bottom: 9px;" placeholder="Search Table For ...">
+ <input type="text" id="select_top" class="form-control" style="width: 200px; display: inline; padding-bottom: 9px;" placeholder="Select Top ...">
+ <button class="btn btn-default" id="deselect_all" type="button"><span class="glyphicon glyphicon-remove"></span> Deselect</button>
+ <button class="btn btn-danger" id="remove" disabled="disabled" type="button"><i class="icon-minus-sign"></i> Delete Rows</button>
+ <button id="delete" class="btn btn-danger submit_special" data-url="/collections/delete" title="Delete this collection" > Delete Collection</button>
</form>
- <br />
+ <div style="margin-top: 10px; margin-bottom: 5px;">
+ <b>Show/Hide Columns:</b>
+ </div>
<div>
- <table class="table table-hover table-striped nowrap" id='trait_table' style="float: left;">
+ <table class="table-hover table-striped cell-border" id='trait_table' style="float: left;">
<thead>
<tr>
<th></th>
<th data-export="Index">Index</th>
<th data-export="Dataset">Dataset</th>
<th data-export="Record">Record</th>
+ <th data-export="Symbol">Symbol</th>
<th data-export="Description">Description</th>
<th data-export="Location">Location</th>
<th data-export="Mean">Mean</th>
- <th data-export="Max LRS">Max LRS<a href="http://genenetwork.org//glossary.html#L" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
+ <th data-export="Max LRS">Max LRS <a href="http://genenetwork.org//glossary.html#L" target="_blank"><sup>?</sup></a></th>
<th data-export="Max LRS Location">Max LRS Location</th>
- <th data-export="Additive Effect">Additive Effect<a href="http://genenetwork.org//glossary.html#A" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
+ <th data-export="Add. Eff.">Additive Effect <a href="http://genenetwork.org//glossary.html#A" target="_blank"><sup>?</sup></a></th>
</tr>
</thead>
<tbody>
{% for this_trait in trait_obs %}
<TR id="trait:{{ this_trait.name }}:{{ this_trait.dataset.name }}">
- <TD>
+ <TD align="center" style="padding: 0px;">
<INPUT TYPE="checkbox" NAME="searchResult" class="checkbox trait_checkbox"
VALUE="{{ data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name)) }}">
</TD>
<TD data-export="{{ loop.index }}" align="right">{{ loop.index }}</TD>
- <TD data-export="{{ this_trait.dataset.name }}">{{ this_trait.dataset.name }}</TD>
+ <TD title="{{ this_trait.dataset.fullname }}" data-export="{{ this_trait.dataset.fullname }}">{{ this_trait.dataset.fullname }}</TD>
<TD data-export="{{ this_trait.name }}">
<a href="{{ url_for('show_trait_page',
trait_id = this_trait.name,
dataset = this_trait.dataset.name
)}}">
- {{ this_trait.name }}
+ {{ this_trait.display_name }}
</a>
</TD>
+ {% if this_trait.symbol %}
+ <TD data-export="{{ this_trait.symbol }}">{{ this_trait.symbol }}</TD>
+ {% elif this_trait.abbreviation %}
+ <TD data-export="{{ this_trait.abbreviation }}">{{ this_trait.abbreviation }}</TD>
+ {% else %}
+ <TD data-export="N/A">N/A</TD>
+ {% endif %}
+ {% if this_trait.dataset.type == "Geno" %}
+ <TD title="Marker: {{ this_trait.name }}" data-export="Marker: {{ this_trait.name }}">Marker: {{ this_trait.name }}</TD>
+ {% elif this_trait.description_display != "" %}
<TD title="{{ this_trait.description_display }}" data-export="{{ this_trait.description_display }}">{{ this_trait.description_display }}</TD>
+ {% else %}
+ <TD title="N/A" data-export="N/A">N/A</TD>
+ {% endif %}
<TD data-export="{{ this_trait.location_repr }}">{{ this_trait.location_repr }}</TD>
<TD data-export="{{ this_trait.mean }}" align="right">{{ '%0.3f' % this_trait.mean|float }}</TD>
+ {% if this_trait.LRS_score_repr|float > 0 %}
<TD data-export="{{ this_trait.LRS_score_repr }}" align="right">{{ '%0.3f' % this_trait.LRS_score_repr|float }}</TD>
+ {% else %}
+ <TD data-export="{{ this_trait.LRS_score_repr }}" align="right">N/A</TD>
+ {% endif %}
<TD data-export="{{ this_trait.LRS_location_repr }}">{{ this_trait.LRS_location_repr }}</TD>
+ {% if this_trait.additive|float > 0 %}
<TD data-export="{{ this_trait.additive }}" align="right">{{ '%0.3f' % this_trait.additive|float }}</TD>
-
+ {% else %}
+ <TD data-export="{{ this_trait.additive }}" align="right">N/A</TD>
+ {% endif %}
</TR>
{% endfor %}
</tbody>
@@ -135,14 +163,15 @@
{% endblock %}
{% block js %}
+ <script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/js_external/md5.min.js"></script>
<script type="text/javascript" src="/static/new/javascript/search_results.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colResize.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colReorder.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/DT_bootstrap/DT_bootstrap.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.buttons.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/buttons.colVis.min.js"></script>
<script language="javascript" type="text/javascript">
@@ -156,41 +185,38 @@
console.time("Creating table");
$('#trait_table').dataTable( {
- "createdRow": function ( row, data, index ) {
- if ($('td', row).eq(4).text().length > 50) {
- $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 50));
- $('td', row).eq(4).text($('td', row).eq(4).text() + '...')
- }
- },
"columns": [
+ { "type": "natural", "width": 10 },
+ { "type": "natural", "width": 50 },
{ "type": "natural" },
- { "type": "natural", "width": "5%" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural",
- "width": "30%" },
- { "type": "natural",
- "width": "10%" },
- { "type": "cust-txt" },
- { "type": "natural",
- "width": "6%" },
- { "type": "natural",
- "width": "10%" },
- { "type": "natural",
- "width": "8%" }
+ { "type": "natural", "width": 120 },
+ { "type": "natural", "width": 120 },
+ { "type": "natural" },
+ { "type": "natural", "width": 130 },
+ { "type": "natural", "width": 35 },
+ { "type": "natural", "width": 35 },
+ { "type": "natural", "width": 130 },
+ { "type": "natural" }
],
"columnDefs": [ {
"targets": 0,
"orderable": false
} ],
- "sDom": "ZRtr",
+ "order": [[1, "asc" ]],
+ buttons: [
+ {
+ extend: 'columnsToggle',
+ columns: ':not(:first-child)',
+ postfixButtons: [ 'colvisRestore' ]
+ }
+ ],
+ "sDom": "BZRtr",
"iDisplayLength": -1,
- "autoWidth": true,
+ "autoWidth": false,
"bDeferRender": true,
"bSortClasses": false,
- "scrollY": "600px",
- "scrollCollapse": true,
- "paging": false
+ "paging": false,
+ "orderClasses": true
} );
console.timeEnd("Creating table");
@@ -204,48 +230,27 @@
return submit_special(url)
});
- $("#corr_matrix").on("click", function() {
- traits = $("#trait_table input:checked").map(function() {
- return $(this).val();
- }).get();
- $("#trait_list").val(traits)
- url = $(this).data("url")
- return submit_special(url)
- });
- $("#network_graph").on("click", function() {
- traits = $("#trait_table input:checked").map(function() {
- return $(this).val();
- }).get();
- $("#trait_list").val(traits)
- url = $(this).data("url")
- return submit_special(url)
- });
- $("#wgcna_setup").on("click", function() {
- traits = $("#trait_table input:checked").map(function() {
- return $(this).val();
- }).get();
- $("#trait_list").val(traits)
- url = $(this).data("url")
- return submit_special(url)
- });
- $("#ctl_setup").on("click", function() {
- traits = $("#trait_table input:checked").map(function() {
- return $(this).val();
- }).get();
- $("#trait_list").val(traits)
- url = $(this).data("url")
- return submit_special(url)
- });
- $("#heatmap").on("click", function() {
- traits = $("#trait_table input:checked").map(function() {
- return $(this).val();
- }).get();
- $("#trait_list").val(traits)
- url = $(this).data("url")
- return submit_special(url)
+ $("#change_collection_name").on("click", function() {
+ if ($('input[name=new_collection_name]').css('display') == 'none') {
+ $('input[name=new_collection_name]').css('display', 'inline');
+ $('#collection_name').css('display', 'none');
+ } else {
+ new_name = $('input[name=new_collection_name]').val()
+ $.ajax({
+ type: "POST",
+ url: "/collections/change_name",
+ data: {
+ collection_id: $('input[name=uc_id]').val(),
+ new_name: new_name
+ }
+ });
+ $('input[name=new_collection_name]').css('display', 'none');
+ $('input[name=collection_name]').val(new_name);
+ $('#collection_name').text(new_name)
+ $('#collection_name').css('display', 'inline');
+ }
});
});
-
</script>
diff --git a/wqflask/wqflask/templates/comparison_bar_chart.html b/wqflask/wqflask/templates/comparison_bar_chart.html
new file mode 100644
index 00000000..dc74ddb2
--- /dev/null
+++ b/wqflask/wqflask/templates/comparison_bar_chart.html
@@ -0,0 +1,38 @@
+{% extends "base.html" %}
+{% block title %}Comparison Bar Chart{% endblock %}
+{% block css %}
+ <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />
+{% endblock %}
+{% block content %} <!-- Start of body -->
+ <div class="container">
+ <h1>Comparison Bar Chart</h1>
+ <hr style="height: 1px; background-color: #A9A9A9;">
+ <div>
+ <h3>
+ The following is a grouped bar chart with the sample values for each selected trait.
+ </h3>
+ </div>
+ <div id="chart_container">
+ <div id="comp_bar_chart"></div>
+ </div>
+
+ </div>
+
+ <!-- End of body -->
+
+{% endblock %}
+
+{% block js %}
+ <script>
+ js_data = {{ js_data | safe }}
+ </script>
+
+ <script language="javascript" type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
+ <script type="text/javascript" src="/static/new/js_external/plotly-latest.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/comparison_bar_chart.js"></script>
+
+{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/templates/corr_scatterplot.html b/wqflask/wqflask/templates/corr_scatterplot.html
index 810f4ca3..ffc8244d 100644
--- a/wqflask/wqflask/templates/corr_scatterplot.html
+++ b/wqflask/wqflask/templates/corr_scatterplot.html
@@ -1,119 +1,359 @@
-{% extends "base.html" %}
-
-{% block css %}
- <link rel="stylesheet" type="text/css" href="/static/packages/jqplot/jquery.jqplot.min.css" />
- <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />
- <link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />
- <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />
-{% endblock %}
-
-{% block content %}
-<!--<form action="" method="get">
-<input type="hidden" name="dataset_1" value="{{data_set_1.name}}">
-<input type="hidden" name="dataset_2" value="{{data_set_2.name}}">
-<input type="hidden" name="trait_1" value="{{trait_1.name}}">
-<input type="hidden" name="trait_2" value="{{trait_2.name}}">
-<table class="table" style="width: auto;">
- <tr>
- <td>Canvas Width</td>
- <td>Canvas Height</td>
- <td>Circle Color</td>
- <td>Circle Radius</td>
- <td>Line Color</td>
- <td>Line Width</td>
- <td rowspan="2" style="vertical-align:middle;"><button type="submit" class="btn btn-primary"><i class="icon-refresh"></i>Redraw</button></td>
- </tr>
- <tr>
- <td><input type="text" name="width" value="{{width}}" style="width: 100px;"></td>
- <td><input type="text" name="height" value="{{height}}" style="width: 100px;"></td>
- <td>
- <select name="circle_color" style="width: 100px;">
- <option value="red">Red</option>
- <option value="green">Green</option>
- <option value="blue">Blue</option>
- </select>
- </td>
- <td><input type="text" name="circle_radius" value="{{circle_radius}}" style="width: 100px;"></td>
- <td>
- <select name="line_color" style="width: 100px;">
- <option value="red">Red</option>
- <option value="green">Green</option>
- <option value="blue">Blue</option>
- </select>
- </td>
- <td><input type="text" name="line_width" value="{{line_width}}" style="width: 100px;"></td>
- </tr>
-</table>
-</form>-->
-<div class="container">
-<div id="chart1" class="qtlcharts"></div>
-
-<div style="margin-left: 80px;">
-
- {% if trait_1.dataset.type == "ProbeSet" %}
- <div>
- X axis:
- <a href="{{url_for('show_trait_page', trait_id = trait_1.name, dataset = trait_1.dataset.name)}}">
- {{trait_1.dataset.group.species + " " + trait_1.dataset.group.name + " " + trait_1.dataset.tissue + " " + trait_1.dataset.name + ": " + trait_1.name|string}}
- </a>
- </div>
- <div>
- [{{trait_1.symbol}} on {{trait_1.location_repr}} Mb]
- {{trait_1.description_display}}
- </div>
- {% elif trait_1.dataset.type == "Publish" %}
- <div>
- X axis:
- <a href="{{url_for('show_trait_page', trait_id = trait_1.name, dataset = trait_1.dataset.name)}}">
- {{trait_1.dataset.group.species + " " + trait_1.dataset.group.name + " " + trait_1.dataset.name + ": " + trait_1.name|string}}
- </a>
- </div>
- <div>
- <a href="{{trait_1.pubmed_link}}">PubMed: {{trait_1.pubmed_text}}</a>
- {{trait_1.description_display}}
- </div>
- {% endif %}
-
- <br/>
-
- {% if trait_2.dataset.type == "ProbeSet" %}
- <div>
- Y axis:
- <a href="{{url_for('show_trait_page', trait_id = trait_2.name, dataset = trait_2.dataset.name)}}">
- {{trait_2.dataset.group.species + " " + trait_2.dataset.group.name + " " + trait_2.dataset.tissue + " " + trait_2.dataset.name + ": " + trait_2.name|string}}
- </a>
- </div>
- <div>
- [{{trait_2.symbol}} on {{trait_2.location_repr}} Mb]
- {{trait_2.description_display}}
- </div>
- {% elif trait_2.dataset.type == "Publish" %}
- <div>
- Y axis:
- <a href="{{url_for('show_trait_page', trait_id = trait_2.name, dataset = trait_2.dataset.name)}}">
- {{trait_2.dataset.group.species + " " + trait_2.dataset.group.name + " " + trait_2.dataset.name + ": " + trait_2.name|string}}
- </a>
- </div>
- <div>
- <a href="{{trait_2.pubmed_link}}">PubMed: {{trait_2.pubmed_text}}</a>
- {{trait_2.description_display}}
- </div>
- {% endif %}
-
-</div>
-{% endblock %}
-
-{% block js %}
- <script>
- js_data = {{ js_data | safe }}
- </script>
- <script language="javascript" type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/javascript/colorbrewer.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/javascript/scatterplot.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/javascript/draw_corr_scatterplot.js"></script>
-{% endblock %} \ No newline at end of file
+{% extends "base.html" %}
+
+{% block css %}
+ <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />
+ <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/nvd3/1.8.5/nv.d3.min.css">
+ <link rel="stylesheet" type="text/css" href="/static/new/css/corr_scatter_plot.css" />
+{% endblock %}
+
+{% block content %}
+
+<div class="container-fluid">
+
+ <input type="hidden" name="cofactor1_vals"></input>
+ <input type="hidden" name="ranked_cofactor1_vals"></input>
+ <input type="hidden" name="cofactor2_vals"></input>
+ <input type="hidden" name="ranked_cofactor2_vals"></input>
+ <input type="hidden" name="cofactor3_vals"></input>
+ <input type="hidden" name="ranked_cofactor3_vals"></input>
+ <input type="hidden" name="selecting_which_cofactor"></input>
+
+ <h1>Correlation Scatterplot</h1>
+ <hr style="height: 1px; background-color: #A9A9A9;">
+
+ <table>
+ <tr>
+ <td style="vertical-align: middle;">Width <input class="chartupdatewh" id="width" type="text" value="800" style="width: 44px; height: 22px;"> px </td>
+ <td style="vertical-align: middle;">Height <input class="chartupdatewh" id="height" type="text" value="700" style="width: 44px; height: 22px;"> px</td>
+ </tr>
+ </table>
+ <hr style="height: 1px; background-color: #A9A9A9;">
+ {% if collections_exist == "True" %}
+ <div>
+ <div style="margin-bottom: 10px;">
+ You can select up to three traits from a saved trait collection to use as cofactors in the scatterplots, with each trait corresponding to point color, size, or symbol.
+ For symbol, traits must have no more than 4 distinct values.
+ </div>
+ <div style="display: inline-block;">
+ <div id="cofactor1_button" style="display: inline-block;">
+ <button type="button" class="btn btn-default" id="select_cofactor1">
+ Select Cofactor 1
+ </button>
+ <select id="cofactor1_type">
+ <option value="color" selected>Color</option>
+ <option value="size">Size</option>
+ <option value="symbol">Symbol</option>
+ </select>
+ </div>
+ <div id="cofactor2_button" style="margin-left: 10px; display: none;">
+ <button type="button" class="btn btn-default" id="select_cofactor2">
+ Add a Second Cofactor?
+ </button>
+ <select id="cofactor2_type">
+ <option value="color">Color</option>
+ <option value="size" selected>Size</option>
+ <option value="symbol">Symbol</option>
+ </select>
+ </div>
+ <div id="cofactor3_button" style="margin-left: 10px; display: none;">
+ <button type="button" class="btn btn-default" id="select_cofactor3">
+ Add a Third Cofactor?
+ </button>
+ <select id="cofactor3_type">
+ <option value="color">Color</option>
+ <option value="size">Size</option>
+ <option value="symbol" selected>Symbol</option>
+ </select>
+ </div>
+ <div id="remove_cofactors_button" style="margin-left: 20px; display: inline-block;">
+ <button type="button" class="btn btn-danger" id="remove_cofactors">
+ Remove Cofactors
+ </button>
+ </div>
+ </div>
+ </div>
+ <div id="collections_holder_wrapper" style="display:none;">
+ <div id="collections_holder"></div>
+ </div>
+
+ <div id="cofactor_color_selector" style="margin-bottom: 10px; display:none;">
+ <hr>
+ <b>Cofactor Color Range:</b>
+ <input class="chartupdatedata" name="color2" type="hidden" id="cocolorfrom" value="#D9D9D9">
+ <button class="chartupdatedata jscolor {valueElement: 'cocolorfrom'}">Low</button>
+ <input class="chartupdatedata" name="color1" type="hidden" id="cocolorto" value="#000000">
+ <button class="chartupdatedata jscolor {valueElement: 'cocolorto'}">High</button>
+ <hr>
+ </div>
+
+ <div id="cofactor1_info_container" style="margin-left: 0px; display: none;">
+ <div>
+ <b>Cofactor 1</b>: <a id="cofactor1_trait_link" href="#"></a>
+ </div>
+ <div id="cofactor1_description"></div>
+ <hr>
+ </div>
+
+ <div id="cofactor2_info_container" style="margin-left: 0px; display: none;">
+ <div>
+ <b>Cofactor 2</b>: <a id="cofactor2_trait_link" href="#"></a>
+ </div>
+ <div id="cofactor2_description"></div>
+ <hr>
+ </div>
+
+ <div id="cofactor3_info_container" style="margin-left: 0px; display: none;">
+ <div>
+ <b>Cofactor 3</b>: <a id="cofactor3_trait_link" href="#"></a>
+ </div>
+ <div id="cofactor3_description"></div>
+ <hr>
+ </div>
+
+ {% else %}
+ <div style="margin-bottom: 10px;">No collections currently exist. Please create a collection first if you wish to include cofactors in the scatterplots.</div>
+ <hr>
+ {% endif %}
+
+ <ul class="nav nav-tabs">
+ <li class="active">
+ <a href="#tp1" data-toggle="tab">Pearson</a>
+ </li>
+ <li>
+ <a href="#tp2" data-toggle="tab">Spearman Rank</a>
+ </li>
+ </ul>
+
+ <div class="tab-content" style="min-width: 800px;">
+
+ <div class="tab-pane active" id="tp1">
+ <br>
+ <div id="scatterplot2"></div>
+ <br>
+ <div class="row" style="min-width: 700px; overflow: hidden;">
+ <div style="float: left;">
+ <table class="table table-hover table-striped table-bordered" style="width: 80%; margin-left: 60px; text-align: right;">
+ <thead>
+ <tr><th style="text-align: right;">Statistic</th><th style="text-align: right;">Value</th></tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Number</td>
+ <td>{{jsdata.num_overlap}}</td>
+ </tr>
+ <tr>
+ <td>Slope</td>
+ <td>{{ jsdata.slope_string }}</td>
+ </tr>
+ <tr>
+ <td>Intercept</td>
+ <td>{{'%0.3f' % jsdata.intercept}}</td>
+ </tr>
+ <tr>
+ <td>r value</td>
+ <td>{{'%0.3f' % jsdata.r_value}}</td>
+ </tr>
+ <tr>
+ <td>P value</td>
+ <td>{% if jsdata.p_value < 0.001 %}{{'%0.3e' % jsdata.p_value}}{% else %}{{'%0.3f' % jsdata.p_value}}{% endif %}</td>
+ </tr>
+ <tr>
+ <td style="text-align: left;" colspan="2">
+ Regression Line
+ <br>
+ y = {{ jsdata.slope_string }} * x {% if jsdata.intercept < 0 %}- {{'%0.3f' % (jsdata.intercept * -1)}}{% else %}+ {{'%0.3f' % jsdata.intercept}}{% endif %}
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div style="margin-left: 50px; min-width: 300px; float: left;">
+ {% if trait_1.dataset.type == "ProbeSet" %}
+ <div>
+ X axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_1.name, dataset = trait_1.dataset.name)}}">
+ {{trait_1.dataset.group.species + " " + trait_1.dataset.group.name + " " + trait_1.dataset.tissue + " " + trait_1.dataset.name + ": " + trait_1.name|string}}
+ </a>
+ </div>
+ <div>
+ [{{trait_1.symbol}} on {{trait_1.location_repr}} Mb]
+ {{trait_1.description_display}}
+ </div>
+ {% elif trait_1.dataset.type == "Publish" %}
+ <div>
+ X axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_1.name, dataset = trait_1.dataset.name)}}">
+ {{trait_1.dataset.group.species + " " + trait_1.dataset.group.name + " " + trait_1.dataset.name + ": " + trait_1.name|string}}
+ </a>
+ </div>
+ <div>
+ <a href="{{trait_1.pubmed_link}}">PubMed: {{trait_1.pubmed_text}}</a>
+ {{trait_1.description_display}}
+ </div>
+ {% elif trait_1.dataset.type == "Geno" %}
+ <div>
+ X axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_1.name, dataset = trait_1.dataset.name)}}">
+ {{trait_1.dataset.group.species + " " + trait_1.dataset.group.name + " " + trait_1.dataset.name + ": " + trait_1.name|string}}
+ </a>
+ </div>
+ <div>
+ Location: {{trait_1.location_repr}} Mb
+ </div>
+ {% endif %}
+
+ <br/>
+
+ {% if trait_2.dataset.type == "ProbeSet" %}
+ <div>
+ Y axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_2.name, dataset = trait_2.dataset.name)}}">
+ {{trait_2.dataset.group.species + " " + trait_2.dataset.group.name + " " + trait_2.dataset.tissue + " " + trait_2.dataset.name + ": " + trait_2.name|string}}
+ </a>
+ </div>
+ <div>
+ [{{trait_2.symbol}} on {{trait_2.location_repr}} Mb]
+ {{trait_2.description_display}}
+ </div>
+ {% elif trait_2.dataset.type == "Publish" %}
+ <div>
+ Y axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_2.name, dataset = trait_2.dataset.name)}}">
+ {{trait_2.dataset.group.species + " " + trait_2.dataset.group.name + " " + trait_2.dataset.name + ": " + trait_2.name|string}}
+ </a>
+ </div>
+ <div>
+ <a href="{{trait_2.pubmed_link}}">PubMed: {{trait_2.pubmed_text}}</a>
+ {{trait_2.description_display}}
+ </div>
+ {% elif trait_2.dataset.type == "Geno" %}
+ <div>
+ Y axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_2.name, dataset = trait_2.dataset.name)}}">
+ {{trait_2.dataset.group.species + " " + trait_2.dataset.group.name + " " + trait_2.dataset.name + ": " + trait_2.name|string}}
+ </a>
+ </div>
+ <div>
+ Location: {{trait_2.location_repr}} Mb
+ </div>
+ {% endif %}
+ </div>
+ </div>
+ </div>
+
+ <div class="tab-pane" id="tp2">
+ <br>
+ <div id="srscatterplot2"></div>
+ <br>
+ <div class="row" style="min-width: 700px; overflow: hidden;">
+ <div style="float: left;">
+ <table class="table table-hover table-striped table-bordered" style="width: 80%; margin-left: 60px; text-align: right;">
+ <thead>
+ <tr><th style="text-align: right;">Statistic</th><th style="text-align: right;">Value</th></tr>
+ </thead>
+ <tbody>
+ <tr>
+ <td>Number</td>
+ <td>{{jsdata.num_overlap}}</td>
+ </tr>
+ <tr>
+ <td>Slope</td>
+ <td>{{ jsdata.srslope_string }}</td>
+ </tr>
+ <tr>
+ <td>Intercept</td>
+ <td>{{'%0.3f' % jsdata.srintercept}}</td>
+ </tr>
+ <tr>
+ <td>r value</td>
+ <td>{{'%0.3f' % jsdata.srr_value}}</td>
+ </tr>
+ <tr>
+ <td>P value</td>
+ <td>{% if jsdata.srp_value < 0.001 %}{{'%0.3e' % jsdata.srp_value}}{% else %}{{'%0.3f' % jsdata.srp_value}}{% endif %}</td>
+ </tr>
+ <tr>
+ <td style="text-align: left;" colspan="2">
+ Regression Line
+ <br>
+ y = {{ jsdata.srslope_string }} * x {% if jsdata.srintercept < 0 %}- {{'%0.3f' % (jsdata.srintercept * -1)}}{% else %}+ {{'%0.3f' % jsdata.srintercept}}{% endif %}
+ </td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+ <div style="margin-left: 50px; min-width: 300px; float: left;">
+ {% if trait_1.dataset.type == "ProbeSet" %}
+ <div>
+ X axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_1.name, dataset = trait_1.dataset.name)}}">
+ {{trait_1.dataset.group.species + " " + trait_1.dataset.group.name + " " + trait_1.dataset.tissue + " " + trait_1.dataset.name + ": " + trait_1.name|string}}
+ </a>
+ </div>
+ <div>
+ [{{trait_1.symbol}} on {{trait_1.location_repr}} Mb]
+ {{trait_1.description_display}}
+ </div>
+ {% elif trait_1.dataset.type == "Publish" %}
+ <div>
+ X axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_1.name, dataset = trait_1.dataset.name)}}">
+ {{trait_1.dataset.group.species + " " + trait_1.dataset.group.name + " " + trait_1.dataset.name + ": " + trait_1.name|string}}
+ </a>
+ </div>
+ <div>
+ <a href="{{trait_1.pubmed_link}}">PubMed: {{trait_1.pubmed_text}}</a>
+ {{trait_1.description_display}}
+ </div>
+ {% endif %}
+
+ <br/>
+
+ {% if trait_2.dataset.type == "ProbeSet" %}
+ <div>
+ Y axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_2.name, dataset = trait_2.dataset.name)}}">
+ {{trait_2.dataset.group.species + " " + trait_2.dataset.group.name + " " + trait_2.dataset.tissue + " " + trait_2.dataset.name + ": " + trait_2.name|string}}
+ </a>
+ </div>
+ <div>
+ [{{trait_2.symbol}} on {{trait_2.location_repr}} Mb]
+ {{trait_2.description_display}}
+ </div>
+ {% elif trait_2.dataset.type == "Publish" %}
+ <div>
+ Y axis:
+ <a href="{{url_for('show_trait_page', trait_id = trait_2.name, dataset = trait_2.dataset.name)}}">
+ {{trait_2.dataset.group.species + " " + trait_2.dataset.group.name + " " + trait_2.dataset.name + ": " + trait_2.name|string}}
+ </a>
+ </div>
+ <div>
+ <a href="{{trait_2.pubmed_link}}">PubMed: {{trait_2.pubmed_text}}</a>
+ {{trait_2.description_display}}
+ </div>
+ {% endif %}
+ </div>
+ </div>
+ </div>
+
+</div>
+
+{% endblock %}
+
+{% block js %}
+ <script>
+ js_data = {{ js_data | safe }};
+ </script>
+ <script language="javascript" type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/d3/3.5.17/d3.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/js_external/jscolor.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
+ <!--<script language="javascript" type="text/javascript" src="/static/new/javascript/get_traits_from_collection.js"></script>-->
+ <script type="text/javascript" src="/static/new/js_external/plotly-latest.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/draw_corr_scatterplot.js"></script>
+{% endblock %}
diff --git a/wqflask/wqflask/templates/correlation_matrix.html b/wqflask/wqflask/templates/correlation_matrix.html
index eb675568..9af52021 100644
--- a/wqflask/wqflask/templates/correlation_matrix.html
+++ b/wqflask/wqflask/templates/correlation_matrix.html
@@ -1,57 +1,57 @@
{% extends "base.html" %}
{% block css %}
- <link rel="stylesheet" type="text/css" href="/static/packages/jqplot/jquery.jqplot.min.css" />
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/corr_matrix.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />
{% endblock %}
{% block content %}
-
- {{ header("Correlation Matrix") }}
-<div class="container">
+<div class="container" width="100%">
+<h1>Correlation Matrix</h1>
+<div style="width: 100%; max-width: 850px;">Lower left cells list Pearson product-moment correlations; upper right cells list Spearman rank order correlations. Each cell also contains the n of cases. Values ranging from 0.4 to 1.0 range from orange to white, while values ranging from -0.4 to -1.0 range from dark blue to white. Select any cell to generate a scatter plot. Select trait labels for more information.</div>
+<hr style="height: 1px; background-color: #A9A9A9;">
{% if lowest_overlap < 8 %}
-<div style="margin: 20px;" >Caution: This matrix of correlations contains some cells with small sample sizes of fewer than 8.</div>
+<div style="margin-bottom: 10px;"><i><font style="color: red;">Caution</font>: This matrix of correlations contains some cells with small sample sizes of fewer than 8.</i></div>
{% endif %}
-
-<table class="matrix" border="1" cellpadding="5" cellspacing="1" width="80%">
+<table class="matrix" border="1" cellpadding="5" cellspacing="1" width="100%">
<tbody>
<tr>
- <td style="background-color: royalblue;" ></td>
- <td align="center" colspan="{{traits|length + 1 }}" style="font-weight: Bold; border: 1px solid #999999; padding: 3px; color: #fff; background-color: royalblue;">Spearman Rank Correlation (rho)</td>
+ <td style="background-color: #369;" ></td>
+ <td align="center" colspan="{{traits|length + 2 }}" style="font-weight: Bold; border: 1px solid #000000; padding: 3px; color: #fff; background-color: #369;">Spearman Rank Correlation (rho)</td>
</tr>
<tr>
- <td align="center" rowspan="{{traits|length + 1 }}" width="10" style="font-weight: Bold; border: 1px solid #999999; padding: 3px; color: #fff; background-color: royalblue;">P e a r s o n &nbsp;&nbsp;&nbsp; r</td>
- <td width="300"></td>
+ <td align="center" rowspan="{{traits|length + 2 }}" width="10" style="font-weight: Bold; border: 1px solid #000000; padding: 3px; color: #fff; background-color: #369;">P e a r s o n &nbsp;&nbsp;&nbsp; r</td>
+ <td></td>
+ <td width="300" align="center" style="white-space: nowrap"><div style="display: inline-block; margin: 4px;"><button class="btn btn-default" id="short_labels" style="display: inline-block"><span style="display: none;" class="short_check glyphicon glyphicon-ok"></span>&nbsp;Short Labels</button>&nbsp;&nbsp;<button class="btn btn-default" id="long_labels" style="display: inline-block;"><span style="display: none;" class="long_check glyphicon glyphicon-ok"></span>&nbsp;Long Labels</button></div></td>
{% for trait in traits %}
- <td align="center">
- <a href="/show_trait?trait_id={{ trait.name }}&dataset={{ trait.dataset.name }}" style="font-weight: Bold;">Trait{{ loop.index }}</a>
+ <td align="center" style="padding: 5px;">
+ <a href="/show_trait?trait_id={{ trait.name }}&dataset={{ trait.dataset.name }}"><font style="font-size: 14px;"><b>{{ loop.index }}</b></font></a>
</td>
{% endfor %}
</tr>
{% for trait in traits %}
<tr>
- <td>
- <a href="/show_trait?trait_id={{ trait.name }}&dataset={{ trait.dataset.name }}" style="font-weight: Bold;">Trait {{ loop.index }}: {{ trait.dataset.name }}::{{ trait.name }}</a>
- <div class="shortName" style="display:none">{% if trait.dataset.type == "ProbeSet" %}Symbol: {{ trait.symbol }}{% elif trait.dataset.type == "Publish" %}Phenotype: {{ trait.post_publication_abbreviation }}{% else %}Genotype{% endif %} </div>
+ <td align="center"><input type="checkbox" class="checkbox" style="margin-left: 3px; margin-right: 1px;"></td>
+ <td align="right" style="padding-right: 4px;" >
+ <a href="/show_trait?trait_id={{ trait.name }}&dataset={{ trait.dataset.name }}"><font style="font-size: 14px; font-style: Bold;"><b>Trait {{ loop.index }}: {{ trait.dataset.name }}&nbsp;&nbsp;{{ trait.name }}</b></font></a>
+ <div class="shortName" style="display:none">{% if trait.dataset.type == "ProbeSet" %}Gene Symbol: {{ trait.symbol }}{% elif trait.dataset.type == "Publish" %}Trait Symbol: {{ trait.post_publication_abbreviation }}{% elif trait.dataset.type == "Geno" %}Genotype{% endif %} </div>
<div class="verboseName" style="display: none;">
{% if trait.dataset.type == "ProbeSet" %}
<div>{{ trait.symbol }} on Chr {{ trait.chr }} @ {{ trait.mb }} Mb</div><div>{{ trait.description }}</div><div>{{ trait.probe_target_description }}</div>
{% elif trait.dataset.type == "Publish" %}
- <div>PubMed {{ trait.pubmed_id }}: RecordID/{{ trait.name }}</div><div>Phenotype: {{ trait.description_display }}</div>
- {% else %}
+ <div>PMID: <a href="http://www.ncbi.nlm.nih.gov/pubmed/?term={{ trait.pubmed_id }}">{{ trait.pubmed_id }}</a>, Record ID {{ trait.name }}</div><div>Phenotype: {{ trait.description_display }}</div>
+ {% elif trait.dataset.type == "Geno" %}
<div>Locus {{ trait.name }}</div><div>Chr {{ trait.chr }} @ {{ trait.mb }} Mb</div>
{% endif %}
</div>
</td>
{% for result in corr_results[loop.index-1] %}
- {% if result[0].name == trait.name %}
- <td nowrap="ON" align="center" bgcolor="#cccccc" style="line-height: 1.1;"><a href="/show_trait?trait_id={{ trait.name }}&dataset={{ trait.dataset.name }}"><font style="font-size: 12px; color: #000000;" ><em>n</em><br>{{ result[2] }}</font></a></td>
+ {% if result[0].name == trait.name and result[0].dataset == trait.dataset %}
+ <td nowrap="ON" align="center" bgcolor="#cccccc" style="padding: 3px; line-height: 1.1;"><a href="/show_trait?trait_id={{ trait.name }}&dataset={{ trait.dataset.name }}"><font style="font-size: 12px; color: #3071a9; font-weight: bold;" ><em>n</em><br>{{ result[2] }}</font></a></td>
{% else %}
- <td nowrap="ON" align="middle" class="corr_cell" style="line-height: 1.1;"><a href="/corr_scatter_plot?dataset_1={{ trait.dataset.name }}&dataset_2={{ result[0].dataset.name }}&trait_1={{ trait.name }}&trait_2={{ result[0].name }}"><font style="font-size: 12px; color: #000000;" ><span class="corr_value">{{ '%0.3f' % result[1] }}</span><br>{{ result[2] }}</font></a></td>
+ <td nowrap="ON" align="middle" class="corr_cell" style="padding: 3px; line-height: 1.1;"><a href="/corr_scatter_plot?dataset_1={{ trait.dataset.name }}&dataset_2={{ result[0].dataset.name }}&trait_1={{ trait.name }}&trait_2={{ result[0].name }}"><font style="font-size: 12px; color: #3071a9; font-weight: bold;" ><span class="corr_value">{{ '%0.2f' % result[1] }}</span><br>{{ result[2] }}</font></a></td>
{% endif %}
{% endfor %}
</tr>
@@ -59,26 +59,43 @@
</tbody>
</table>
<br>
-<button class="btn btn-default" id="short_labels">Short Labels</button>
-<button class="btn btn-default" id="long_labels">Long Labels</button>
-<br>
+{% if pca_works == "True" %}
+<h2>PCA Traits</h2>
+<div style="margin-bottom: 20px; overflow:hidden;">
+<table id="pca_table" class="table-hover table-striped cell-border" id='trait_table' style="float: left;">
+ <thead>
+ <tr>
+ <th></th>
+ <th>Index</th>
+ <th>PCA Trait</th>
+ </tr>
+ </tr>
+ </thead>
+ <tbody>
+ {% for this_trait_id in pca_trait_ids %}
+ <tr>
+ <td align="center" style="padding: 0px;"><input type="checkbox" class="trait_checkbox" name="pca_trait" value="{{ data_hmac('{}:{}'.format(pca_trait_ids[loop.index - 1], "Temp")) }}"></td>
+ <td align="right">{{ loop.index }}</td>
+ <td><a href="{{ url_for('show_trait_page', trait_id = pca_trait_ids[loop.index - 1], dataset = "Temp") }}">{{ pca_trait_ids[loop.index - 1] }}</a></td>
+ </tr>
+ {% endfor %}
+ </tbody>
+</table>
<br>
+<button class="btn btn-default" id="select_all"><span class="glyphicon glyphicon-ok"></span> Select All</button>
+<button class="btn btn-default" id="deselect_all"><span class="glyphicon glyphicon-remove"></span> Deselect All</button>
+<button class="btn btn-default" id="add" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
+</div>
<h2>Factor Loadings Plot</h2>
-<div id="loadings_plot"></div>
-
+<div id="loadings_plot" style="margin-top: 20px; margin-bottom: 20px; width: 980px; border-style: solid; border-width: 1px;"></div>
<h2>Factor Loadings Table</h2>
-<table class="table table-hover table-striped" border="1" id='trait_table' style="margin: 20px;" width="40%">
+<table id="loadings_table" class="table-hover table-striped cell-border" id='trait_table' style="float: left;">
<thead>
<tr>
- <th></th>
- <th align="right" >Factor 1</th>
- <th align="right" >Factor 2</th>
- {% if trait_list|length > 2 %}<th align="right" >Factor 3</th>{% endif %}
-<!--
- {% for row in loadings_array %}
- <th>Factor {{ loop.index }}</th>
- {% endfor %}
--->
+ <th>Trait</th>
+ <th style="text-align: right;" >Factor 1</th>
+ <th style="text-align: right;" >Factor 2</th>
+ {% if trait_list|length > 2 %}<th style="text-align: right;">Factor 3</th>{% endif %}
</tr>
</thead>
<tbody>
@@ -86,7 +103,7 @@
{% set row_counter = loop.index-1 %}
<tr>
<td>
- <a href="{{ url_for('show_trait_page', trait_id = traits[loop.index-1].name, dataset = traits[loop.index-1].dataset.name) }}">
+ <a title="{% if traits[loop.index-1].dataset.type == "ProbeSet" %}{{ traits[loop.index-1].symbol }}{% elif traits[loop.index-1].dataset.type == "Publish" %}{{ traits[loop.index-1].post_publication_abbreviation }}{% endif %}" href="{{ url_for('show_trait_page', trait_id = traits[loop.index-1].name, dataset = traits[loop.index-1].dataset.name) }}">
{{ traits[loop.index-1].name }}
</a>
</td>
@@ -99,7 +116,8 @@
</tbody>
</table>
</div>
-
+{% endif %}
+<div id="myModal"></div>
{% endblock %}
{% block js %}
@@ -111,14 +129,45 @@
<script type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
<script type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/DT_bootstrap/DT_bootstrap.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/js_external/md5.min.js"></script>
<script type="text/javascript" src="/static/new/javascript/panelutil.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/js_external/chroma.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/loadings_plot.js"></script>
<script type="text/javascript" src="/static/new/javascript/create_corr_matrix.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.min.js"></script>
+ <script type="text/javascript" src="/static/new/javascript/search_results.js"></script>
+
+ <script>
+ $('#pca_table').dataTable( {
+ "columnDefs": [ {
+ "targets": 0,
+ "orderable": false
+ } ],
+ "order": [[1, "asc" ]],
+ "sDom": "t",
+ "iDisplayLength": -1,
+ "autoWidth": true,
+ "bDeferRender": true,
+ "bSortClasses": false,
+ "paging": false,
+ "orderClasses": true
+ } );
+
+ $('#loadings_table').dataTable( {
+ "columnDefs": [ {
+ "targets": 0,
+ "orderable": false
+ } ],
+ "order": [[1, "asc" ]],
+ "sDom": "t",
+ "iDisplayLength": -1,
+ "autoWidth": true,
+ "bDeferRender": true,
+ "bSortClasses": false,
+ "paging": false,
+ "orderClasses": true
+ } );
+ </script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/correlation_page.html b/wqflask/wqflask/templates/correlation_page.html
index cedb65a1..03b03aa7 100644
--- a/wqflask/wqflask/templates/correlation_page.html
+++ b/wqflask/wqflask/templates/correlation_page.html
@@ -1,154 +1,182 @@
{% extends "base.html" %}
{% block css %}
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.bootstrap.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.dataTables.css">
{% endblock %}
{% block content %}
-
- {{ header("Correlation", 'Trait: {} Dataset: {}'.format(this_trait.name, dataset.name)) }}
-
- <div class="container">
+ <div class="container" style="min-width: 1250px;">
<div class="page-header">
<h1>Correlation Table</h1>
+ <h2>Trait: {{ this_trait.name }}
+
+ <hr style="height: 1px; background-color: #A9A9A9;">
</div>
- <p>Values of record {{ this_trait.name }} in the <a href="http://genenetwork.org/webqtl/main.py?FormID=sharinginfo&GN_AccessionId={{ dataset.group.accession_id }}">{{ dataset.fullname }}</a>
- dataset were compared to all records in the <a href="http://genenetwork.org/webqtl/main.py?FormID=sharinginfo&GN_AccessionId={{ target_dataset.group.accession_id }}">{{ target_dataset.fullname }}</a>
+ <p>Values of record {{ this_trait.name }} in the <a href="http://genenetwork.org/webqtl/main.py?FormID=sharinginfo&{% if dataset.accession_id != 'None' %}GN_AccessionId={{ dataset.accession_id }}{% else %}InfoPageName={{ dataset.name }}{% endif %}">{{ dataset.fullname }}</a>
+ dataset were compared to all records in the <a href="http://genenetwork.org/webqtl/main.py?FormID=sharinginfo&{% if target_dataset.accession_id != 'None' %}GN_AccessionId={{ target_dataset.accession_id }}{% else %}InfoPageName={{ target_dataset.name }}{% endif %}">{{ target_dataset.fullname }}</a>
dataset. The top {{ return_number }} correlations ranked by the {{ formatted_corr_type }} are displayed.
You can resort this list by clicking the headers. Select the Record ID to open the trait data
and analysis page.
</p>
- <br />
- <button class="btn btn-default" id="select_all"><span class="glyphicon glyphicon-ok"></span> Select All</button>
- <button class="btn btn-default" id="deselect_all"><span class="glyphicon glyphicon-remove"></span> Deselect All</button>
- <button class="btn btn-default" id="invert"><span class="glyphicon glyphicon-resize-vertical"></span> Invert</button>
- <button class="btn btn-default" id="add" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
- <button id="redraw" class="btn btn-default">Reset Columns</button>
- <input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline;" placeholder="Search This Table For ...">
- <input type="text" id="select_top" class="form-control" style="width: 200px; display: inline;" placeholder="Select Top ...">
- <br />
- <br />
+ <div>
+ <form id="correlation_form" target="_blank" action="/corr_matrix" method="post">
+ <input type="hidden" name="tool_used" value="" />
+ <input type="hidden" name="form_url" value="" />
+ <input type="hidden" name="trait_list" id="trait_list" value= "
+ {% for this_trait in trait_list %}
+ {{ this_trait.name }}:{{ this_trait.dataset }},
+ {% endfor %}" >
+
+ <button id="corr_matrix" class="btn btn-primary submit_special" data-url="/corr_matrix" title="Correlation Matrix" >
+ Correlations
+ </button>
+
+ <button id="network_graph" class="btn btn-primary submit_special" data-url="/network_graph" title="Network Graph" >
+ Networks
+ </button>
+
+ <button id="send_to_webgestalt" class="btn btn-primary submit_special" data-url="/webgestalt_page" title="WebGestalt" >
+ WebGestalt
+ </button>
+
+ <button id="send_to_geneweaver" class="btn btn-primary submit_special" data-url="/geneweaver_page" title="GeneWeaver" >
+ GeneWeaver
+ </button>
+
+ <button id="send_to_bnw" class="btn btn-primary submit_special" data-url="/bnw_page" title="Bayesian Network" >
+ BNW
+ </button>
+
+ <button id="wgcna_setup" class="btn btn-primary submit_special" data-url="/wgcna_setup" title="WGCNA Analysis" >
+ WGCNA
+ </button>
+
+ <button id="ctl_setup" class="btn btn-primary submit_special" data-url="/ctl_setup" title="CTL Analysis" >
+ CTL Maps
+ </button>
+
+ <button id="heatmap" class="btn btn-primary submit_special" data-url="/heatmap" title="Heatmap" >
+ MultiMap
+ </button>
+
+ <button id="comp_bar_chart" class="btn btn-primary submit_special" data-url="/comparison_bar_chart" title="Comparison Bar Chart" >
+ Comparison Bar Chart
+ </button>
- <div style="width: {% if target_dataset.type == "ProbeSet" %}1600px{% elif target_dataset.type == "Publish" %}1200px{% else %}800px{% endif %}; background-color: #eeeeee; border: 1px solid black;">
- <table width="1600px" id="trait_table" class="table table-hover table-striped">
+ </form>
+ </div>
+ <br />
+ <div>
+ <form id="export_form" method="POST" action="/export_traits_csv">
+ <button class="btn btn-default" id="select_all" type="button"><span class="glyphicon glyphicon-ok"></span> Select All</button>
+ <button class="btn btn-default" id="add" type="button" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
+ <input type="hidden" name="database_name" id="database_name" value="None">
+ <input type="hidden" name="export_data" id="export_data" value="">
+ <input type="hidden" name="file_name" id="file_name" value="{{ this_trait.name }}_{{ dataset.name }}_correlation">
+ <button class="btn btn-default" id="export_traits">Download CSV</button>
+ <input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline;" placeholder="Search Table For ...">
+ <input type="text" id="select_top" class="form-control" style="width: 200px; display: inline;" placeholder="Select Top ...">
+ <button class="btn btn-default" id="deselect_all" type="button"><span class="glyphicon glyphicon-remove"></span> Deselect</button>
+ <button id="redraw" class="btn btn-default" type="button">Reset Columns</button>
+ </form>
+ <br />
+ <br />
+ <button id="more_options" class="btn btn-primary">More Options...</button>
+ <br />
+ <br />
+ <div id="filter_options" style="display: none;">
+ <span style="border: 1px dashed #999999; padding: 8px; background-color: #ddf; font-size: 12px;">
+ <button id="select_traits" class="btn btn-primary" style="font-size: 12px; padding: 2px 3px;">Select Traits</button> with r >
+ <input type="text" name="r_greater_select" value="-1.0" size="6" maxlength="10">
+ <select id="r_and_or" size="1">
+ <option value="and" selected>AND</option>
+ <option value="or">OR</option>
+ </select>
+ r <
+ <input type="text" name="r_less_select" value="1.0" size="6" maxlength="10">, with mean >
+ <input type="text" name="mean_greater_select" value="0" size="6" maxlength="10">
+ <select id="mean_and_or" size="1">
+ <option value="and" selected>AND</option>
+ <option value="or">OR</option>
+ </select>
+ mean <
+ <input type="text" name="mean_less_select" value="100" size="6" maxlength="10">
+ </span>
+ <br />
+ <br />
+ </div>
+ </div>
+ <div style="margin-bottom: 5px;">
+ <b>Show/Hide Columns:</b>
+ </div>
+ <div style="width: {% if target_dataset.type == "ProbeSet" %}1600px{% elif target_dataset.type == "Publish" %}1400px{% else %}800px{% endif %};">
+ <table id="trait_table" class="display dataTable nowrap" style="font-size: 12px; float: left;">
<thead>
<tr>
- <th style="width: 30px; background-color: #eeeeee;"></th>
- {% for header in target_dataset.header_fields %}
- {% if header == 'Year' %}
- <th style="text-align: right; background-color: #eeeeee;">{{header}}</th>
- {% elif header == 'Max LRS' %}
- <th style="text-align: right; background-color: #eeeeee;">Max&nbsp;&nbsp;<br>LRS<a href="http://genenetwork.org//glossary.html#L" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
- {% elif header == 'Max LRS Location' %}
- <th style="text-align: right; background-color: #eeeeee;">{{header}}</th>
- {% elif header == 'Location' %}
- <th style="text-align: right; background-color: #eeeeee;">{{header}}</th>
- {% elif header == 'Mean' %}
- <th style="text-align: right; background-color: #eeeeee;">{{header}}</th>
- {% elif header == 'Additive Effect' %}
- <th style="text-align: right; background-color: #eeeeee;">Add&nbsp;&nbsp;<br>Effect<a href="http://genenetwork.org//glossary.html#A" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
- {% elif header == 'Index' %}
- <th style="text-align: right; background-color: #eeeeee; padding-left: 0px; margin-left: 0px;">{{header}}</th>
- {% elif header == 'N' %}
- <th style="text-align: right; background-color: #eeeeee;">{{header}}</th>
- {% else %}
- <th style="background-color: #eeeeee;">{{header}}</th>
- {% endif %}
+ <th></th>
+ {% for header in header_fields %}
+ <th {% if header != "" %}data-export="{{ header }}"{% endif %}>{{header}}</th>
{% endfor %}
- {% if target_dataset.type == "ProbeSet" %}
- {% if corr_method == 'pearson' %}
- <th style="text-align: right; background-color: #eeeeee;">Sample r</th>
- <th style="text-align: right; background-color: #eeeeee;">&nbsp;&nbsp;N</th>
- <th style="text-align: right; background-color: #eeeeee;">Sample p(r)</th>
- <th style="text-align: right; background-color: #eeeeee;">Lit r</th>
- <th style="text-align: right; background-color: #eeeeee;">Tissue r</th>
- {% else %}
- <th style="text-align: right; background-color: #eeeeee;">Sample rho</th>
- <th style="text-align: right; background-color: #eeeeee;">N</th>
- <th style="text-align: right; background-color: #eeeeee;">Sample p(rho)</th>
- <th style="text-align: right; background-color: #eeeeee;">Lit r</th>
- <th style="text-align: right; background-color: #eeeeee;">Tissue rho</th>
- {% endif %}
- {% elif target_dataset.type == "Publish" %}
- {% if corr_method == 'pearson' %}
- <th style="text-align: right; background-color: #eeeeee;">Sample r</th>
- <th style="text-align: right; background-color: #eeeeee;">&nbsp;&nbsp;N</th>
- <th style="text-align: right; background-color: #eeeeee;">Sample p(r)</th>
- {% else %}
- <th style="text-align: right; background-color: #eeeeee;">Sample rho</th>
- <th style="text-align: right; background-color: #eeeeee;">&nbsp;&nbsp;N</th>
- <th style="text-align: right; background-color: #eeeeee;">Sample p(rho)</th>
- {% endif %}
- {% elif target_dataset.type == "Geno" %}
- {% if corr_method == 'pearson' %}
- <th style="text-align: right; background-color: #eeeeee;">Sample r</th>
- <th style="text-align: right; background-color: #eeeeee;">N</th>
- <th style="text-align: right; background-color: #eeeeee;">Sample p(r)</th>
- {% else %}
- <th style="text-align: right; background-color: #eeeeee;">Sample rho</th>
- <th style="text-align: right; background-color: #eeeeee;">N</th>
- <th style="text-align: right; background-color: #eeeeee;">Sample p(rho)</th>
- {% endif %}
- {% endif %}
</tr>
</thead>
<tbody>
{% for trait in correlation_results %}
<tr>
- <td>&nbsp;<INPUT TYPE="checkbox" NAME="searchResult" class="checkbox trait_checkbox" style="transform: scale(1.5);" VALUE="{{ data_hmac('{}:{}'.format(trait.name, trait.dataset.name)) }}"></td>
- <td align="right">{{ loop.index }}</td>
- <td>
+ <td><INPUT TYPE="checkbox" NAME="searchResult" class="checkbox trait_checkbox" style="padding-right: 0px;" VALUE="{{ data_hmac('{}:{}'.format(trait.name, trait.dataset.name)) }}"></td>
+ <td data-export="{{ loop.index }}" style="padding-left: 8px; padding-right: 0px; padding-top: 4px; align: center;">{{ loop.index }}</td>
+ <td data-export="{{ trait.name }}">
<a href="{{ url_for('show_trait_page',
trait_id = trait.name,
- dataset = dataset.name
+ dataset = trait.dataset.name
)}}">
{{ trait.name }}
</a>
</td>
{% if target_dataset.type == 'ProbeSet' %}
- <td>{{ trait.symbol }}</td>
- <td>{{ trait.description_display }}</TD>
- <td align="right"style="white-space: nowrap;">{{ trait.location_repr }}</td>
- <td align="right">{{ '%0.3f' % trait.mean|float }}</td>
- <td align="right" style="padding-right: 15px;">{% if trait.LRS_score_repr != "N/A" %}{{ '%0.1f' % trait.LRS_score_repr|float }}{% else %}N/A{% endif %}</td>
- <td align="right" style="padding-right: 15px;">{{ trait.LRS_location_repr }}</td>
- <td align="right" style="padding-right: 15px;">{% if trait.additive != "" %}{{ '%0.3f' % trait.additive|float }}{% else %}N/A{% endif %}</td>
- <td align="right" style="padding-right: 15px;"><a target="_blank" href="corr_scatter_plot?dataset_1={{dataset.name}}&dataset_2={{trait.dataset.name}}&trait_1={{this_trait.name}}&trait_2={{trait.name}}">{{'%0.3f'|format(trait.sample_r)}}</a></td>
- <td align="right" style="padding-right: 15px;">{{ trait.num_overlap }}</td>
- <td align="right" style="padding-right: 15px;">{{'%0.3e'|format(trait.sample_p)}}</td>
+ <td data-export="{{ trait.symbol }}">{{ trait.symbol }}</td>
+ <td data-export="{{ trait.description_display }}">{{ trait.description_display }}</TD>
+ <td data-export="{{ trait.location_repr }}" style="white-space: nowrap;">{{ trait.location_repr }}</td>
+ <td data-export="{{ '%0.3f' % trait.mean|float }}" align="right">{{ '%0.3f' % trait.mean|float }}</td>
+ <td data-export="{{ '%0.3f'|format(trait.sample_r) }} align="right"><a target="_blank" href="corr_scatter_plot?dataset_1={{dataset.name}}&dataset_2={{trait.dataset.name}}&trait_1={{this_trait.name}}&trait_2={{trait.name}}">{{ '%0.3f'|format(trait.sample_r) }}</a></td>
+ <td data-export="{{ trait.num_overlap }}" align="right">{{ trait.num_overlap }}</td>
+ <td data-export="{{ '%0.3e'|format(trait.sample_p) }}" align="right">{{ '%0.3e'|format(trait.sample_p) }}</td>
{% if trait.lit_corr == "" or trait.lit_corr == 0.000 %}
- <td align="right" style="padding-right: 15px;">--</td>
+ <td data-export="--" align="right">--</td>
{% else %}
- <td align="right" style="padding-right: 15px;">{{'%0.3f'|format(trait.lit_corr)}}</td>
+ <td data-export="{{ '%0.3f'|format(trait.lit_corr) }}" align="right">{{ '%0.3f'|format(trait.lit_corr) }}</td>
{% endif %}
{% if trait.tissue_corr == "" or trait.tissue_corr == 0.000 %}
- <td align="right" style="padding-right: 15px;">--</td>
+ <td data-export="--" align="right">--</td>
+ <td data-export="--" align="right">--</td>
{% else %}
- <td align="right" style="padding-right: 15px;">{{'%0.3f'|format(trait.tissue_corr)}}</td>
+ <td data-export="{{ '%0.3f'|format(trait.tissue_corr) }}" align="right">{{ '%0.3f'|format(trait.tissue_corr) }}</td>
+ <td data-export="{{ '%0.3e'|format(trait.tissue_pvalue) }}" align="right">{{ '%0.3e'|format(trait.tissue_pvalue) }}</td>
{% endif %}
+ <td data-export={% if trait.LRS_score_repr != "N/A" %}"{{ '%0.1f' % trait.LRS_score_repr|float }}"{% else %}"N/A"{% endif %} align="right">{% if trait.LRS_score_repr != "N/A" %}{{ '%0.1f' % trait.LRS_score_repr|float }}{% else %}N/A{% endif %}</td>
+ <td data-export="{{ trait.LRS_location_repr }}" align="right">{{ trait.LRS_location_repr }}</td>
+ <td data-export={% if trait.additive != "" %}"{{ '%0.3f' % trait.additive|float }}"{% else %}"N/A"{% endif %} align="right">{% if trait.additive != "" %}{{ '%0.3f' % trait.additive|float }}{% else %}N/A{% endif %}</td>
{% elif target_dataset.type == "Publish" %}
- <td>{{ trait.description_display }}</td>
- <td>{{ trait.authors }}</td>
- <td>
+ <td data-export="{{ trait.description_display }}">{{ trait.description_display }}</td>
+ <td data-export="{{ trait.authors }}">{{ trait.authors }}</td>
+ <td data-export="{{ trait.pubmed_text }}">
<a href="{{ trait.pubmed_link }}">
{{ trait.pubmed_text }}
</a>
</td>
- <td align="right" style="padding-right: 15px;">{{ trait.LRS_score_repr }}</td>
- <td align="right" style="padding-right: 15px;">{{ trait.LRS_location_repr }}</td>
- <td align="right" style="padding-right: 15px;">{% if trait.additive != "" %}{{ '%0.3f' % trait.additive|float }}{% else %}N/A{% endif %}</td>
- <td align="right" style="padding-right: 15px;"><a target="_blank" href="corr_scatter_plot?dataset_1={{dataset.name}}&dataset_2={{trait.dataset.name}}&trait_1={{this_trait.name}}&trait_2={{trait.name}}">{{'%0.3f'|format(trait.sample_r)}}</a></td>
- <td align="right" style="padding-right: 15px;">{{ trait.num_overlap }}</td>
- <td align="right" style="padding-right: 15px;">{{'%0.3e'|format(trait.sample_p)}}</td>
+ <td data-export="{{ '%0.3f'|format(trait.sample_r) }}" align="right"><a target="_blank" href="corr_scatter_plot?dataset_1={{dataset.name}}&dataset_2={{trait.dataset.name}}&trait_1={{this_trait.name}}&trait_2={{trait.name}}">{{ '%0.3f'|format(trait.sample_r) }}</a></td>
+ <td data-export="{{ trait.num_overlap }}" align="right">{{ trait.num_overlap }}</td>
+ <td data-export="{{ '%0.3e'|format(trait.sample_p) }}" align="right">{{ '%0.3e'|format(trait.sample_p) }}</td>
+ <td data-export="{{ trait.LRS_score_repr }}" align="right">{{ trait.LRS_score_repr }}</td>
+ <td data-export="{{ trait.LRS_location_repr }}" align="right">{{ trait.LRS_location_repr }}</td>
+ <td data-export={% if trait.additive != "" %}"{{ '%0.3f' % trait.additive|float }}"{% else %}"N/A"{% endif %} align="right">{% if trait.additive != "" %}{{ '%0.3f' % trait.additive|float }}{% else %}N/A{% endif %}</td>
{% elif target_dataset.type == "Geno" %}
- <td align="right" style="padding-right: 15px;">{{ trait.location_repr }}</TD>
- <td align="right" style="padding-right: 15px;"><a target="_blank" href="corr_scatter_plot?dataset_1={{dataset.name}}&dataset_2={{trait.dataset.name}}&trait_1={{this_trait.name}}&trait_2={{trait.name}}">{{'%0.3f'|format(trait.sample_r)}}</a></td>
- <td align="right" style="padding-right: 15px;">{{ trait.num_overlap }}</td>
- <td align="right" style="padding-right: 15px;">{{'%0.3e'|format(trait.sample_p)}}</td>
+ <td data-export="{{ trait.location_repr }}" align="right">{{ trait.location_repr }}</TD>
+ <td data-export="{{ '%0.3f'|format(trait.sample_r) }}" align="right"><a target="_blank" href="corr_scatter_plot?dataset_1={{dataset.name}}&dataset_2={{trait.dataset.name}}&trait_1={{this_trait.name}}&trait_2={{trait.name}}">{{ '%0.3f'|format(trait.sample_r) }}</a></td>
+ <td data-export="{{ trait.num_overlap }}" align="right">{{ trait.num_overlap }}</td>
+ <td data-export="{{ '%0.3e'|format(trait.sample_p) }}" align="right">{{ '%0.3e'|format(trait.sample_p) }}</td>
{% endif %}
</tr>
{% endfor %}
@@ -158,149 +186,209 @@
</div>
{% endblock %}
-{% block js %}
+{% block js %}
+ <script type="text/javascript" src="/static/new/js_external/md5.min.js"></script>
<script type="text/javascript" src="/static/new/javascript/search_results.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.js"></script>
- <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/buttons/1.0.0/js/dataTables.buttons.min.js"></script>
- <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/buttons/1.0.0/js/buttons.html5.min.js"></script>
- <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/buttons/1.0.0/js/buttons.bootstrap.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/DT_bootstrap/DT_bootstrap.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
+
+ <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.buttons.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/buttons.colVis.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
+
<script type="text/javascript" charset="utf-8">
- function getValue(x) {
- if (x.indexOf('input') >= 0) {
- if ($(x).val() == 'x') {
- return 0;
- }
- else {
- return parseFloat($(x).val());
- }
- }
- else if (isNaN(x)) {
- return x;
- }
- return parseFloat(x);
+ var table_json = {{ json_results | safe }}
+ </script>
+
+ <script type="text/javascript" charset="utf-8">
+
+ $.fn.dataTable.ext.order['dom-innertext'] = function (settings, col) {
+ return this.api().column(col, { order: 'index' }).nodes().map(function (td, i) {
+ return Math.abs(parseFloat($('a', td).text()));
+ });
}
-
- jQuery.fn.dataTableExt.oSort['numeric-html-asc'] = function(a,b) {
- a = Math.abs(parseFloat($(a).text()));
- b = Math.abs(parseFloat($(b).text()));
+
+ $.fn.dataTableExt.oSort['numeric-html-asc'] = function(a,b) {
+ a = Math.abs(parseFloat(a));
+ b = Math.abs(parseFloat(b));
return ((a < b) ? -1 : ((a > b) ? 1 : 0));
};
- jQuery.fn.dataTableExt.oSort['numeric-html-desc'] = function(a,b) {
- a = Math.abs(parseFloat($(a).text()));
- b = Math.abs(parseFloat($(b).text()));
+ $.fn.dataTableExt.oSort['numeric-html-desc'] = function(a,b) {
+ a = Math.abs(parseFloat(a));
+ b = Math.abs(parseFloat(b));
return ((a < b) ? 1 : ((a > b) ? -1 : 0));
};
- jQuery.fn.dataTableExt.oSort['cust-txt-asc'] = function (a, b) {
- var x = getValue(a);
- var y = getValue(b);
-
- if (x == 'N/A' || x == '') {
- return 1;
- }
- else if (y == 'N/A' || y == '') {
- return -1;
- }
- else {
- return ((x < y) ? -1 : ((x > y) ? 1 : 0));
- }
- };
-
- jQuery.fn.dataTableExt.oSort['cust-txt-desc'] = function (a, b) {
- var x = getValue(a);
- var y = getValue(b);
- return ((x < y) ? 1 : ((x > y) ? -1 : 0));
- };
-
-
- jQuery.fn.dataTableExt.oSort['scientific-asc'] = function ( a, b ) {
+ $.fn.dataTableExt.oSort['scientific-asc'] = function ( a, b ) {
var x = parseFloat(a);
var y = parseFloat(b);
return ((x < y) ? -1 : ((x > y) ? 1 : 0));
};
- jQuery.fn.dataTableExt.oSort['scientific-desc'] = function ( a, b ) {
+ $.fn.dataTableExt.oSort['scientific-desc'] = function ( a, b ) {
var x = parseFloat(a);
var y = parseFloat(b);
return ((x < y) ? 1 : ((x > y) ? -1 : 0));
};
-
+ //$.fn.dataTableExt.afnFiltering.push(
+
+ $.fn.dataTable.ext.search.push( function( settings, data, dataIndex ) {
+ var r_column = {{ filter_cols[0] }};
+ var r_greater = parseFloat($('input[name=r_greater_select]').val())
+ var r_less = parseFloat($('input[name=r_less_select]').val());
+ var r_and_or = $('#r_and_or').val();
+
+ var mean_column = {{ filter_cols[1] }};
+ var mean_greater = parseFloat($('input[name=mean_greater_select]').val());
+ var mean_less = parseFloat($('input[name=mean_less_select]').val());
+ var mean_and_or = $('#mean_and_or').val();
+
+ if (r_and_or == "and" && mean_and_or == "and"){
+ if ( (data[r_column] >= r_greater && data[r_column] <= r_less) && {% if filter_cols[1] != 0 %}(data[mean_column] > mean_greater && data[mean_column] < mean_less){% else %} true{% endif %} ){
+ return true
+ }
+ else {
+ return false
+ }
+ } else if (r_and_or == "and" && mean_and_or == "or"){
+ if ( (data[r_column] >= r_greater && data[r_column] <= r_less) && {% if filter_cols[1] != 0 %}(data[mean_column] >= mean_greater || data[mean_column] <= mean_less){% else %} true{% endif %} ){
+ return true
+ } else {
+ return false
+ }
+ } else if (r_and_or == "or" && mean_and_or == "and") {
+ if ( (data[r_column] >= r_greater || data[r_column] <= r_less) && {% if filter_cols[1] != 0 %}(data[mean_column] >= mean_greater && data[mean_column] <= mean_less){% else %} true{% endif %} ){
+ return true
+ } else {
+ return false
+ }
+ } else {
+ if ( (data[r_column] >= r_greater || data[r_column] <= r_less) && {% if filter_cols[1] != 0 %}(data[mean_column] >= mean_greater || data[mean_column] <= mean_less){% else %} true{% endif %} ){
+ return true
+ } else {
+ return false
+ }
+ }
+ return true
+ });
$(document).ready( function () {
-
+
$('#trait_table tr').click(function(event) {
if (event.target.type !== 'checkbox') {
$(':checkbox', this).trigger('click');
}
});
+ function change_buttons() {
+ buttons = ["#add", "#remove"];
+ num_checked = $('.trait_checkbox:checked').length;
+ if (num_checked === 0) {
+ for (_i = 0, _len = buttons.length; _i < _len; _i++) {
+ button = buttons[_i];
+ $(button).prop("disabled", true);
+ }
+ } else {
+ for (_j = 0, _len2 = buttons.length; _j < _len2; _j++) {
+ button = buttons[_j];
+ $(button).prop("disabled", false);
+ }
+ }
+ //});
+ if ($(this).is(":checked")) {
+ if (!$(this).closest('tr').hasClass('selected')) {
+ $(this).closest('tr').addClass('selected')
+ }
+ }
+ else {
+ if ($(this).closest('tr').hasClass('selected')) {
+ $(this).closest('tr').removeClass('selected')
+ }
+ }
+ }
+
console.time("Creating table");
{% if target_dataset.type == "ProbeSet" %}
- $('#trait_table').dataTable( {
- "paging": false,
- "buttons": [
+ table_conf = {
+ "drawCallback": function( settings ) {
+ $('#trait_table tr').click(function(event) {
+ if (event.target.type !== 'checkbox') {
+ $(':checkbox', this).trigger('click');
+ }
+ });
+ $('.trait_checkbox:checkbox').on("change", change_buttons);
+ },
+ buttons: [
{
- extend: 'csvHtml5',
- text: 'Download CSV',
- title: 'correlation_results',
- fieldBoundary: '"',
- exportOptions: {
- columns: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
- }
+ extend: 'columnsToggle',
+ columns: function( idx, data, node ) {
+ if (idx != 0) {
+ return true;
+ } else {
+ return false;
+ }
+ },
+ postfixButtons: [ 'colvisRestore' ]
}
],
- "columnDefs": [
- { "targets": 0, "orderable": false }
- ],
+ "columnDefs": [ {
+ "targets": 0,
+ "orderable": false
+ } ],
"columns": [
{ "type": "natural" },
{ "type": "natural" },
{ "type": "natural" },
{ "type": "natural" },
- { "type": "natural", "width": "20%" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
+ { "type": "natural", "width": "15%" },
{ "type": "natural" },
{ "type": "natural" },
+ { "orderDataType": "dom-innertext", 'orderSequence': [ "desc", "asc"] },
{ "type": "natural" },
{ "type": "scientific" },
+ { "type": "numeric-html", 'orderSequence': [ "desc", "asc"] },
+ { "type": "numeric-html", 'orderSequence': [ "desc", "asc"] },
+ { "type": "scientific" },
+ { "type": "natural" },
{ "type": "natural" },
{ "type": "natural" }
],
- "order": [[12, "asc" ]],
+ "createdRow": function ( row, data, index ) {
+ $('td', row).eq(4).attr('title', $('td', row).eq(4).text());
+ if ($('td', row).eq(4).text().length > 40) {
+ $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 40));
+ $('td', row).eq(4).text($('td', row).eq(4).text() + '...')
+ }
+ },
+ "order": [[9, "asc" ]],
"sDom": "Btir",
+ "iDisplayLength": -1,
"autoWidth": false,
- "bDeferRender": true,
- "scrollY": "800px",
- "scrollCollapse": false
- } );
-
- var table = $('#trait_table').DataTable();
- new $.fn.dataTable.FixedHeader( table );
+ "deferRender": true,
+ "bSortClasses": false,
+ "paging": false,
+ "orderClasses": true
+ }
{% elif target_dataset.type == "Publish" %}
- $('#trait_table').dataTable( {
+ table_conf = {
"paging": false,
- "buttons": [
+ buttons: [
{
- extend: 'csvHtml5',
- text: 'Download CSV',
- title: 'correlation_results',
- fieldBoundary: '"',
- exportOptions: {
- columns: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
- }
+ extend: 'columnsToggle',
+ columns: function( idx, data, node ) {
+ if (idx != 0) {
+ return true;
+ } else {
+ return false;
+ }
+ },
+ postfixButtons: [ 'colvisRestore' ]
}
],
"columnDefs": [
@@ -310,35 +398,47 @@
{ "type": "natural" },
{ "type": "natural" },
{ "type": "natural" },
- { "type": "natural", "width": "25%" },
- { "type": "natural", "width": "10%" },
- { "type": "natural" },
- { "type": "natural" },
+ { "type": "natural", "width": "20%" },
+ { "type": "natural", "width": "12%" },
+ { "orderDataType": "dom-innertext" },
+ { "orderDataType": "dom-innertext", 'orderSequence': [ "desc", "asc"] },
{ "type": "natural" },
+ { "type": "scientific" },
{ "type": "natural" },
- { "type": "numeric-html" },
{ "type": "natural" },
- { "type": "scientific" }
+ { "type": "natural" }
],
- "order": [[11, "asc" ]],
+ "createdRow": function ( row, data, index ) {
+ $('td', row).eq(3).attr('title', $('td', row).eq(3).text());
+ if ($('td', row).eq(3).text().length > 50) {
+ $('td', row).eq(3).text($('td', row).eq(3).text().substring(0, 50));
+ $('td', row).eq(3).text($('td', row).eq(3).text() + '...')
+ }
+ $('td', row).eq(4).attr('title', $('td', row).eq(4).text());
+ if ($('td', row).eq(4).text().length > 40) {
+ $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 40));
+ $('td', row).eq(4).text($('td', row).eq(4).text() + '...')
+ }
+ },
+ "order": [[8, "asc" ]],
"sDom": "Btir",
"autoWidth": false,
- "bDeferRender": true,
- "scrollY": "800px",
- "scrollCollapse": false
- } );
+ "bDeferRender": true
+ }
{% elif target_dataset.type == "Geno" %}
- $('#trait_table').dataTable( {
+ table_conf = {
"paging": false,
- "buttons": [
+ buttons: [
{
- extend: 'csvHtml5',
- text: 'Download CSV',
- title: 'correlation_results',
- fieldBoundary: '"',
- exportOptions: {
- columns: [1, 2, 3, 4, 5, 6]
- }
+ extend: 'columnsToggle',
+ columns: function( idx, data, node ) {
+ if (idx != 0) {
+ return true;
+ } else {
+ return false;
+ }
+ },
+ postfixButtons: [ 'colvisRestore' ]
}
],
"columnDefs": [
@@ -349,7 +449,7 @@
{ "type": "natural" },
{ "type": "natural" },
{ "type": "natural" },
- { "type": "numeric-html" },
+ { "orderDataType": "dom-innertext", 'orderSequence': [ "desc", "asc"] },
{ "type": "natural" },
{ "type": "scientific" }
],
@@ -359,11 +459,31 @@
"bDeferRender": true,
"scrollY": "800px",
"scrollCollapse": false
- } );
+ }
{% endif %}
+
+ var the_table = $('#trait_table').DataTable(table_conf);
+
console.timeEnd("Creating table");
+ submit_special = function(url) {
+ $("#correlation_form").attr("action", url);
+ return $("#correlation_form").submit();
+ };
+
+ $("#delete").on("click", function() {
+ url = $(this).data("url")
+ return submit_special(url)
+ });
+
+ $("#more_options").click(function() {
+ $("div#filter_options").toggle();
+ });
+ $("#select_traits").click(function() {
+ console.log("redrawing")
+ the_table.draw();
+ });
});
</script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/ctl_results.html b/wqflask/wqflask/templates/ctl_results.html
index 969ca18a..d85075a9 100644
--- a/wqflask/wqflask/templates/ctl_results.html
+++ b/wqflask/wqflask/templates/ctl_results.html
@@ -1,7 +1,7 @@
{% extends "base.html" %}
{% block css %}
<link rel="stylesheet" type="text/css" href="/static/new/css/network_graph.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/cytoscape/css/cytoscape.js-panzoom.css" />
+ <link rel="stylesheet" type="text/css" href="/js/cytoscape-panzoom/cytoscape.js-panzoom.css" />
<link rel="stylesheet" type="text/css" href="http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0/jquery.qtip.css">
<style>
/* The Cytoscape Web container must have its dimensions set. */
@@ -24,7 +24,7 @@
{% print("%c"|format(elem)) %}
{%- endfor %}
" /></a> -->
-
+
<h3>CTL/QTL Plots for individual traits</h3>
{% for r in range(2, (request.form['trait_list'].split(',')|length +1)) %}
<a href="/tmp/{{ results['imgurl' + r|string] }}">
@@ -66,12 +66,18 @@
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script>
<script language="javascript" type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0/jquery.qtip.js"></script>
<script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/min/cytoscape.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/min/AC_OETags.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/min/json2.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/src/cytoscape-panzoom.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/src/cytoscape-qtip.js"></script>
+ <script language="javascript" type="text/javascript" src="/js/cytoscape/cytoscape.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/js/cytoscape-panzoom/cytoscape-panzoom.js"></script>
+ <!-- should be using cytoscape-popper for tips, see docs -->
+ <script language="javascript" type="text/javascript" src="/js/cytoscape-qtip/cytoscape-qtip.js"></script>
+ <!--
+ Loads flash - who wants that?
+ <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/min/AC_OETags.min.js"></script>
+ Disabled because it is standard JS now:
+ <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/min/json2.min.js"></script>
+t>
+ -->
<script language="javascript" type="text/javascript" src="/static/new/javascript/ctl_graph.js"></script>
-{% endblock %}
+{% endblock %}
diff --git a/wqflask/wqflask/templates/docedit.html b/wqflask/wqflask/templates/docedit.html
index 1a9e8ca8..b87c5b41 100644
--- a/wqflask/wqflask/templates/docedit.html
+++ b/wqflask/wqflask/templates/docedit.html
@@ -5,15 +5,26 @@
{% block content %}
<div class="container">
<h3>Edit: {{title}}</h3>
- <form>
+ <form id="update_text" action="/update_text" method="post">
+ <input type="hidden" name="entry_type" value="{{ entry }}">
+ <input type="hidden" name="title" value="{{ title }}">
+ {% if editable is defined %}
+ <input type="hidden" name="edit" value="{{ editable }}">
+ {% endif %}
+ <button class="submit_changes" style="margin-bottom: 20px;">Submit Changes</button>
<textarea name="ckcontent" id="ckcontent">
{{content|safe}}
</textarea>
- <script type="text/javascript" src="/static/packages/ckeditor/ckeditor.js"></script>
+ <button class="submit_changes" style="margin-top: 20px;">Submit Changes</button>
+ <script src="/static/packages/ckeditor/ckeditor.js"></script>
<script type="text/javascript">
CKEDITOR.replace('ckcontent', {
height: '650px',
});
+
+ $('.submit_changes').click(function() {
+ $('#update_text').submit();
+ })
</script>
</form>
</div>
diff --git a/wqflask/wqflask/templates/docs.html b/wqflask/wqflask/templates/docs.html
index 08f95721..1e5a7aef 100644
--- a/wqflask/wqflask/templates/docs.html
+++ b/wqflask/wqflask/templates/docs.html
@@ -6,9 +6,11 @@
<div class="container">
<h3>{{title}}</h3>
<div style="text-align: right;">
- <a href="docedit?entry={{entry}}">
- <img style="width: 25px;" src="/static/images/edit.png">
+ {% if editable == "true" %}
+ <a href="docedit?entry={{entry}}&edit=true">
+ <img style="width: 16px;" src="/static/new/images/edit.gif">
</a>
+ {% endif %}
</div>
{{content|safe}}
</div>
diff --git a/wqflask/wqflask/templates/empty_collection.html b/wqflask/wqflask/templates/empty_collection.html
index 3f2b3786..d1b779ef 100644
--- a/wqflask/wqflask/templates/empty_collection.html
+++ b/wqflask/wqflask/templates/empty_collection.html
@@ -6,7 +6,7 @@
<div class="container">
<input type="hidden" name="uc_id" id="uc_id" value="{{ uc_id }}">
- <p>You must select at least one trait to use the {{ tool }}.</p>
+ <p>You must select at least two traits to use the {{ tool }}.</p>
</div>
diff --git a/wqflask/wqflask/templates/error.html b/wqflask/wqflask/templates/error.html
index c707a4fc..2f1e06fa 100644
--- a/wqflask/wqflask/templates/error.html
+++ b/wqflask/wqflask/templates/error.html
@@ -35,7 +35,7 @@
</p>
<pre>
- GeneNetwork v{{ version }} {{ stack[0] }}
+ GeneNetwork {{ version }} {{ stack[0] }}
{{ message }} (error)
{{ stack[-3] }}
{{ stack[-2] }}
@@ -50,7 +50,7 @@
<a href="#Stack" class="btn btn-default" data-toggle="collapse">Toggle full stack trace</a>
<div id="Stack" class="collapse">
<pre>
- GeneNetwork v{{ version }} {% for line in stack %} {{ line }}
+ GeneNetwork {{ version }} {% for line in stack %} {{ line }}
{% endfor %}
</pre>
</div>
diff --git a/wqflask/wqflask/templates/geneweaver_page.html b/wqflask/wqflask/templates/geneweaver_page.html
new file mode 100644
index 00000000..7687cb6a
--- /dev/null
+++ b/wqflask/wqflask/templates/geneweaver_page.html
@@ -0,0 +1,35 @@
+{% extends "base.html" %}
+{% block title %}{% if wrong_input == "True" %}WebGestalt Error{% else %}Opening WebGestalt{% endif %}{% endblock %}
+{% block content %}
+ {% if wrong_input == "True" %}
+ <div class="container">
+ <h1>Error</h1>
+ <hr style="height: 1px; background-color: #A9A9A9;">
+ {% if chip_name == "mixed" %}
+ <h3>Sorry, the analysis was interrupted because your selections from GeneNetwork apparently include data from more than one array platform (i.e., Affymetrix U74A and M430 2.0). Most WebGestalt analyses assume that you are using a single array type and compute statistical values on the basis of that particular array. Please reselect traits from a signle platform and submit again.</h3>
+ {% elif chip_name == "not_microarray" %}
+ <h3>You need to select at least one microarray trait to submit.</hr>
+ {% elif '_NA' in chip_name %}
+ <h3>Sorry, the analysis was interrupted because your selections from GeneNetwork apparently include data from platform {{ chip_name }} which is unknown by GeneWeaver. Please reselect traits and submit again.</h3>
+ {% else %}
+ <h3>Sorry, an error occurred while submitting your traits to GeneWeaver.</h3>
+ {% endif %}
+ </div>
+ {% else %}
+ <div class="container">
+ <h3>Opening GeneWeaver...</h3>
+ </div>
+ <form method="post" action="http://ontologicaldiscovery.org/index.php?action=manage&cmd=importGeneSet" name="formODE">
+ {% for key in hidden_vars %}
+ <input type="hidden" name="{{ key }}" value="{{ hidden_vars[key] }}">
+ {% endfor %}
+ </form>
+ {% endif %}
+{% endblock %}
+{% block js %}
+{% if wrong_input == "False" %}
+<script type="text/javascript">
+ setTimeout('document.formODE.submit()', 1000);
+</script>
+{% endif %}
+{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/templates/gsearch_gene.html b/wqflask/wqflask/templates/gsearch_gene.html
index e8bb6337..556d46d3 100644
--- a/wqflask/wqflask/templates/gsearch_gene.html
+++ b/wqflask/wqflask/templates/gsearch_gene.html
@@ -2,13 +2,17 @@
{% block title %}Search Results{% endblock %}
{% block css %}
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
{% endblock %}
{% block content %}
<!-- Start of body -->
- <div class="container">
+ <div class="container" style="width: 2000px;">
- <p>You searched for {{ terms }}.</p>
+ <h3>GN searched for the term(s) <b>"{{ terms }}"</b> in 754 datasets and 39,765,944 traits across 10 species<br/>
+ and found <b>{{ trait_count }}</b> results that match your query.<br/>
+ You can filter these results by adding key words in the fields below<br/>
+ and you can also sort results on most columns.</h3>
<p>To study a record, click on its Record ID below.<br />Check records below and click Add button to add to selection.</p>
<div>
@@ -19,72 +23,19 @@
<button class="btn btn-default" id="add" disabled ><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
<input type="text" id="searchbox" class="form-control" style="width: 180px; display: inline;" placeholder="Search This Table For ...">
<input type="text" id="select_top" class="form-control" style="width: 120px; display: inline;" placeholder="Select Top ...">
- <br />
- <br />
- <form id="export_form" method="POST" action="/export_traits_csv">
+ <form id="export_form" method="POST" action="/export_traits_csv" style="display: inline;">
+ <input type="hidden" name="headers" id="headers" value="{% for field in header_fields %}{{ field }},{% endfor %}">
<input type="hidden" name="database_name" id="database_name" value="None">
<input type="hidden" name="export_data" id="export_data" value="">
- <button class="btn btn-default" id="export_traits">Download CSV</button>
+ <button class="btn btn-default" id="export_traits">Download</button>
</form>
<br />
- <div style="width: 2000px;">
- <table width="2000px" id="trait_table" class="table table-hover table-striped nowrap" style="float: left;">
- <thead>
- <tr>
- <th></th>
- <th data-export="Index">Index</th>
- <th data-export="Record">Record ID</th>
- <th data-export="Species">Species</th>
- <th data-export="Group">Group</th>
- <th data-export="Tissue">Tissue</th>
- <th data-export="Dataset">Dataset</th>
- <th data-export="Symbol">Symbol</th>
- <th data-export="Description">Description</th>
- <th data-export="Location">Location</th>
- <th data-export="Mean">Mean</th>
- <th data-export="Max LRS">Max LRS<a href="http://genenetwork.org/glossary.html#L" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
- <th data-export="Max LRS Location">Max LRS Location</th>
- <th data-export="Additive Effect">Additive <a href="http://genenetwork.org/glossary.html#A" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
- </tr>
- </thead>
+ <br />
+ <div style="width: 100%;">
+ <table id="trait_table" class="table-hover table-striped cell-border" style="float: left;">
<tbody>
- {% for this_trait in trait_list %}
- <tr id="trait:{{ this_trait.name }}:{{ this_trait.dataset.name }}">
- <td align="center" style="padding-right: 0px; padding-left: 5px;"><input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="{{ data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name)) }}"></td>
- <td align="right" data-export="{{ loop.index }}">{{ loop.index }}</td>
- <td data-export="{{ this_trait.name }}"><a href="{{ url_for('show_trait_page', trait_id = this_trait.name, dataset = this_trait.dataset.name)}}">{{ this_trait.name }}</a></td>
- <td data-export="{{ this_trait.dataset.group.species }}">{{ this_trait.dataset.group.species }}</td>
- <td data-export="{{ this_trait.dataset.group.name }}">{{ this_trait.dataset.group.name }}</td>
- <td data-export="{{ this_trait.dataset.tissue }}">{{ this_trait.dataset.tissue }}</td>
- <td data-export="{{ this_trait.dataset.name }}">{{ this_trait.dataset.name }}</td>
- <td data-export="{{ this_trait.symbol }}">{{ this_trait.symbol }}</td>
- <td data-export="{{ this_trait.description_display }}">{{ this_trait.description_display }}</td>
- <td data-export="{{ this_trait.location_repr }}" align="right">{{ this_trait.location_repr }}</td>
- <td data-export="{{ '%0.3f' % this_trait.mean|float }}" align="right">{{ '%0.3f' % this_trait.mean|float }}</td>
- <td data-export="{% if this_trait.LRS_score_repr != "N/A" %}{{ '%0.1f' % this_trait.LRS_score_repr|float }}{% else %}N/A{% endif %}" align="right">{% if this_trait.LRS_score_repr != "N/A" %}{{ '%0.1f' % this_trait.LRS_score_repr|float }}{% else %}N/A{% endif %}</td>
- <td data-export="{{ this_trait.LRS_location_repr }}" align="right">{{ this_trait.LRS_location_repr }}</td>
- <td data-export="{% if this_trait.additive != "" %}{{ '%0.3f' % this_trait.additive|float }}{% else %}N/A{% endif %}" align="right">{% if this_trait.additive != "" %}{{ '%0.3f' % this_trait.additive|float }}{% else %}N/A{% endif %}</td>
- </tr>
- {% endfor %}
+ <td colspan="100%" align="center"><br><b><font size="15">Loading...</font></b><br></td>
</tbody>
- <tfoot>
- <tr>
- <th></th>
- <th>Index</th>
- <th>Record ID</th>
- <th>Species</th>
- <th>Group</th>
- <th>Tissue</th>
- <th>Dataset</th>
- <th>Symbol</th>
- <th>Description</th>
- <th>Location</th>
- <th>Mean</th>
- <th>Max LRS<a href="http://genenetwork.org/glossary.html#L" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
- <th>Max LRS Location</th>
- <th>Additive <a href="http://genenetwork.org/glossary.html#A" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
- </tr>
- </tfoot>
</table>
</div>
</div>
@@ -95,16 +46,18 @@
{% endblock %}
{% block js %}
+ <script language="javascript" type="text/javascript" src="/static/new/js_external/md5.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/search_results.js"></script>
-
<script language="javascript" type="text/javascript" src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colReorder.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colResize.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/DT_bootstrap/DT_bootstrap.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script>
-
+
+ <script type='text/javascript'>
+ var the_rows = {{ trait_list|safe }};
+ </script>
+
<script type="text/javascript" charset="utf-8">
$.fn.dataTable.ext.order['dom-checkbox'] = function ( settings, col )
{
@@ -113,6 +66,13 @@
} );
};
+ $.fn.dataTable.ext.order['dom-inner-text'] = function ( settings, col )
+ {
+ return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
+ return $(td).text();
+ } );
+ }
+
$(document).ready( function () {
$('#trait_table tr').click(function(event) {
@@ -121,50 +81,211 @@
}
});
+ function change_buttons() {
+ buttons = ["#add", "#remove"];
+ num_checked = $('.trait_checkbox:checked').length;
+ if (num_checked === 0) {
+ for (_i = 0, _len = buttons.length; _i < _len; _i++) {
+ button = buttons[_i];
+ $(button).prop("disabled", true);
+ }
+ } else {
+ for (_j = 0, _len2 = buttons.length; _j < _len2; _j++) {
+ button = buttons[_j];
+ $(button).prop("disabled", false);
+ }
+ }
+ //});
+ if ($(this).is(":checked")) {
+ if (!$(this).closest('tr').hasClass('selected')) {
+ $(this).closest('tr').addClass('selected')
+ }
+ }
+ else {
+ if ($(this).closest('tr').hasClass('selected')) {
+ $(this).closest('tr').removeClass('selected')
+ }
+ }
+ }
+
console.time("Creating table");
$('#trait_table').DataTable( {
- "createdRow": function ( row, data, index ) {
+ 'drawCallback': function( settings ) {
+ $('#trait_table tr').click(function(event) {
+ if (event.target.type !== 'checkbox' && event.target.tagName.toLowerCase() !== 'a') {
+ $(':checkbox', this).trigger('click');
+ }
+ });
+ $('.trait_checkbox:checkbox').on("change", change_buttons);
+ },
+ 'createdRow': function ( row, data, index ) {
+ $('td', row).eq(0).attr("style", "text-align: center; padding: 4px 10px 2px 10px;");
+ $('td', row).eq(1).attr("align", "right");
+ $('td', row).eq(4).attr('title', $('td', row).eq(4).text());
+ if ($('td', row).eq(4).text().length > 20) {
+ $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 20));
+ $('td', row).eq(4).text($('td', row).eq(4).text() + '...')
+ }
+ $('td', row).eq(5).attr('title', $('td', row).eq(5).text());
+ if ($('td', row).eq(5).text().length > 20) {
+ $('td', row).eq(5).text($('td', row).eq(5).text().substring(0, 20));
+ $('td', row).eq(5).text($('td', row).eq(5).text() + '...')
+ }
+ $('td', row).eq(6).attr('title', $('td', row).eq(6).text());
+ if ($('td', row).eq(6).text().length > 35) {
+ $('td', row).eq(6).text($('td', row).eq(6).text().substring(0, 35));
+ $('td', row).eq(6).text($('td', row).eq(6).text() + '...')
+ }
$('td', row).eq(8).attr('title', $('td', row).eq(8).text());
- if ($('td', row).eq(8).text().length > 50) {
- $('td', row).eq(8).text($('td', row).eq(8).text().substring(0, 50));
+ if ($('td', row).eq(8).text().length > 45) {
+ $('td', row).eq(8).text($('td', row).eq(8).text().substring(0, 45));
$('td', row).eq(8).text($('td', row).eq(8).text() + '...')
}
+ $('td', row).slice(10,14).attr("align", "right");
+ $('td', row).eq(1).attr('data-export', $('td', row).eq(1).text());
+ $('td', row).eq(2).attr('data-export', $('td', row).eq(2).text());
+ $('td', row).eq(3).attr('data-export', $('td', row).eq(3).text());
+ $('td', row).eq(4).attr('data-export', $('td', row).eq(4).text());
+ $('td', row).eq(5).attr('data-export', $('td', row).eq(5).text());
+ $('td', row).eq(6).attr('data-export', $('td', row).eq(6).text());
+ $('td', row).eq(7).attr('data-export', $('td', row).eq(7).text());
+ $('td', row).eq(8).attr('data-export', $('td', row).eq(8).text());
+ $('td', row).eq(9).attr('data-export', $('td', row).eq(9).text());
+ $('td', row).eq(10).attr('data-export', $('td', row).eq(10).text());
+ $('td', row).eq(11).attr('data-export', $('td', row).eq(11).text());
+ $('td', row).eq(12).attr('data-export', $('td', row).eq(12).text());
+ $('td', row).eq(13).attr('data-export', $('td', row).eq(13).text());
},
- "paging": false,
- "columns": [
- { "orderDataType": "dom-checkbox" },
- { "type": "natural", "width": "3%" },
- { "type": "natural", "width": "6%" },
- { "type": "natural", "width": "8%" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural", "width": "7%" },
- { "type": "natural", "width": "4%" },
- { "type": "natural", "width": "5%" },
- { "type": "natural", "width": "7%" },
- { "type": "natural", "width": "5%" }
- ],
- "columnDefs": [
+ 'data': the_rows,
+ 'columns': [
+ {
+ 'data': null,
+ 'orderDataType': "dom-checkbox",
+ 'render': function(data, type, row, meta) {
+ return '<input type="checkbox" name="searchResult" class="trait_checkbox checkbox" value="' + data.hmac + '">'
+ }
+ },
+ {
+ 'title': "Index",
+ 'type': "natural",
+ 'data': "index"
+ },
+ {
+ 'title': "Record",
+ 'type': "natural",
+ 'data': null,
+ 'orderDataType': "dom-inner-text",
+ 'render': function(data, type, row, meta) {
+ return '<a target="_blank" href="/show_trait?trait_id=' + data.name + '&dataset=' + data.dataset + '">' + data.name + '</a>'
+ }
+ },
+ {
+ 'title': "Species",
+ 'type': "natural",
+ 'data': "species"
+ },
+ {
+ 'title': "Group",
+ 'type': "natural",
+ 'data': "group"
+ },
+ {
+ 'title': "Tissue",
+ 'type': "natural",
+ 'data': "tissue"
+ },
+ {
+ 'title': "Dataset",
+ 'type': "natural",
+ 'data': "dataset_fullname"
+ },
+ {
+ 'title': "Symbol",
+ 'type': "natural",
+ 'data': "symbol"
+ },
+ {
+ 'title': "Description",
+ 'type': "natural",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ try {
+ return decodeURIComponent(escape(data.description))
+ } catch(err) {
+ return escape(data.description)
+ }
+ }
+ },
+ {
+ 'title': "Location",
+ 'type': "natural",
+ 'width': "100px",
+ 'data': "location_repr"
+ },
{
- "targets": 0,
- "orderable": false,
- "orderDataType": "dom-checkbox"
+ 'title': "Mean",
+ 'type': "natural",
+ 'data': "mean",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Max<br>LRS<a href=\"http://genenetwork.org//glossary.html#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
+ 'type': "natural",
+ 'data': "LRS_score_repr",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Max LRS<br>Location",
+ 'type': "natural",
+ 'width': "100px",
+ 'data': "max_lrs_text"
+ },
+ {
+ 'title': "Additive<br>Effect<a href=\"http://genenetwork.org//glossary.html#A\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
+ 'type': "natural",
+ 'width': "50px",
+ 'data': "additive",
+ 'orderSequence': [ "desc", "asc"]
}
],
- "order": [[1, "asc" ]],
- "sDom": "tir",
- "autoWidth": false,
- "bDeferRender": true,
- "scrollY": "800px",
- "scrollCollapse": false
+ 'order': [[1, "asc" ]],
+ 'sDom': "tir",
+ 'autoWidth': true,
+ 'deferRender': true,
+ 'paging': false,
+ 'orderClasses': true,
+ 'processing': true,
+ 'language': {
+ 'loadingRecords': '&nbsp;',
+ 'processing': 'Loading...'
+ }
} );
+ $('#trait_table').append(
+ '<tfoot>' +
+ '<tr>' +
+ '<th></th>' +
+ '<th>Index</th>' +
+ '<th>Record ID</th>' +
+ '<th>Species</th> ' +
+ '<th>Group</th>' +
+ '<th>Tissue</th>' +
+ '<th>Dataset</th>' +
+ '<th>Symbol</th>' +
+ '<th>Description</th>' +
+ '<th>Location</th>' +
+ '<th>Mean</th>' +
+ '<th>Max LRS <a href="http://genenetwork.org//glossary.html#LRS" target="_blank" style="color: white;"><sup>?</sup></a></th>' +
+ '<th>Max LRS Location</th>' +
+ '<th>Additive Effect <a href="http://genenetwork.org//glossary.html#A" target="_blank" style="color: white;"><sup>?</sup></a></th>' +
+ '</tr>' +
+ '</tfoot>'
+ );
+
console.timeEnd("Creating table");
});
</script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/search_results.js"></script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/gsearch_pheno.html b/wqflask/wqflask/templates/gsearch_pheno.html
index 2f7dcaf6..f6ffff47 100644
--- a/wqflask/wqflask/templates/gsearch_pheno.html
+++ b/wqflask/wqflask/templates/gsearch_pheno.html
@@ -2,16 +2,17 @@
{% block title %}Search Results{% endblock %}
{% block css %}
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />
- <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/dataTables.fixedHeader.css" >
- <link rel="stylesheet" type="text/css" href="//cdn.datatables.net/fixedcolumns/3.0.4/css/dataTables.fixedColumns.css">
+ <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
{% endblock %}
{% block content %}
<!-- Start of body -->
<div class="container">
+ <h3>GN searched for the term(s) <b>"{{ terms }}"</b> in 51 datasets and 13763 traits across 10 species<br/>
+ and found <b>{{ trait_count }}</b> results that match your query.<br/>
+ You can filter these results by adding key words in the fields below<br/>
+ and you can also sort results on most columns.</h3>
<p>To study a record, click on its ID below.<br />Check records below and click Add button to add to selection.</p>
<div>
@@ -22,63 +23,19 @@
<button class="btn btn-default" id="add" disabled ><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
<input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline;" placeholder="Search This Table For ...">
<input type="text" id="select_top" class="form-control" style="width: 200px; display: inline;" placeholder="Select Top ...">
- <br />
- <br />
- <form id="export_form" method="POST" action="/export_traits_csv">
+ <form id="export_form" method="POST" action="/export_traits_csv" style="display: inline;">
+ <input type="hidden" name="headers" id="headers" value="{% for field in header_fields %}{{ field }},{% endfor %}">
<input type="hidden" name="database_name" id="database_name" value="None">
<input type="hidden" name="export_data" id="export_data" value="">
<button class="btn btn-default" id="export_traits">Download CSV</button>
</form>
<br />
- <div style="width: 1500px; background-color: #eeeeee; border: 1px solid black;">
- <table width="1500px" id="trait_table" class="table table-hover table-striped">
- <thead>
- <tr>
- <th style="background-color: #eeeeee;"></th>
- <th data-export="Index" style="background-color: #eeeeee;">Index</th>
- <th data-export="Species" style="background-color: #eeeeee;">Species</th>
- <th data-export="Group" style="background-color: #eeeeee;">Group</th>
- <th data-export="Record" style="background-color: #eeeeee;">Record</th>
- <th data-export="Description" style="background-color: #eeeeee;">Description</th>
- <th data-export="Authors" style="background-color: #eeeeee;">Authors</th>
- <th data-export="Year" style="background-color: #eeeeee;">Year</th>
- <th data-export="LRS" style="background-color: #eeeeee; text-align: right;">Max&nbsp;&nbsp;<br>LRS<a href="http://genenetwork.org//glossary.html#L" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
- <th data-export="LRS Location" style="background-color: #eeeeee;">Max LRS Location</th>
- <th data-export="Additive Effect" style="background-color: #eeeeee; text-align: right;">Additive<br>Effect<a href="http://genenetwork.org//glossary.html#A" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
- </tr>
- </thead>
+ <br />
+ <div style="width: 100%;">
+ <table id="trait_table" class="table-hover table-striped cell-border" style="float: left;">
<tbody>
- {% for this_trait in trait_list %}
- <TR id="trait:{{ this_trait.name }}:{{ this_trait.dataset.name }}">
- <td><INPUT TYPE="checkbox" NAME="searchResult" class="checkbox trait_checkbox" style="transform: scale(1.5);" VALUE="{{ data_hmac('{}:{}'.format(this_trait.name, this_trait.dataset.name)) }}"></td>
- <td data-export="{{ loop.index }}">{{ loop.index }}</td>
- <td data-export="{{ this_trait.dataset.group.species }}">{{ this_trait.dataset.group.species }}</td>
- <td data-export="{{ this_trait.dataset.group.name }}">{{ this_trait.dataset.group.name }}</td>
- <td data-export="{{ this_trait.name }}"><a href="{{ url_for('show_trait_page', trait_id = this_trait.name, dataset = this_trait.dataset.name)}}">{{ this_trait.name }}</a></td>
- <td data-export="{{ this_trait.description_display }}">{{ this_trait.description_display }}</td>
- <td data-export="{{ this_trait.authors }}">{{ this_trait.authors }}</td>
- <td data-export="{{ this_trait.pubmed_text }}" data-order="{{ this_trait.pubmed_text }}"><a href="{{ this_trait.pubmed_link }}">{{ this_trait.pubmed_text }}</a></td>
- <td data-export="{% if this_trait.LRS_score_repr != "N/A" %}{{ '%0.1f' % this_trait.LRS_score_repr|float }}{% else %}N/A{% endif %}" align="right">{% if this_trait.LRS_score_repr != "N/A" %}{{ '%0.1f' % this_trait.LRS_score_repr|float }}{% else %}N/A{% endif %}</td>
- <td data-export="{{ this_trait.LRS_location_repr }}" align="right">{{ this_trait.LRS_location_repr }}</td>
- <td data-export="{% if this_trait.additive != "" %}{{ this_trait.additive }}{% else %}N/A{% endif %}" align="right">{% if this_trait.additive != "" %}{{ this_trait.additive }}{% else %}N/A{% endif %}</td>
- </TR>
- {% endfor %}
+ <td colspan="100%" align="center"><br><b><font size="15">Loading...</font></b><br></td>
</tbody>
- <tfoot>
- <tr>
- <th style="background-color: #eeeeee;"></th>
- <th style="background-color: #eeeeee;">Index</th>
- <th style="background-color: #eeeeee;">Species</th>
- <th style="background-color: #eeeeee;">Group</th>
- <th style="background-color: #eeeeee;">Record</th>
- <th style="background-color: #eeeeee;">Description</th>
- <th style="background-color: #eeeeee;">Authors</th>
- <th style="background-color: #eeeeee;">Year</th>
- <th style="background-color: #eeeeee; text-align: right;">Max&nbsp;&nbsp;<br>LRS<a href="http://genenetwork.org//glossary.html#L" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
- <th style="background-color: #eeeeee;">Max LRS Location</th>
- <th style="background-color: #eeeeee; text-align: right;">Additive<br>Effect<a href="http://genenetwork.org//glossary.html#A" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
- </tr>
- </tfoot>
</table>
</div>
</div>
@@ -89,16 +46,18 @@
{% endblock %}
{% block js %}
+ <script language="javascript" type="text/javascript" src="/static/new/js_external/md5.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/search_results.js"></script>
-
<script language="javascript" type="text/javascript" src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colReorder.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colResize.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/DT_bootstrap/DT_bootstrap.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/TableTools/media/js/TableTools.min.js"></script>
-
+
+ <script type='text/javascript'>
+ var the_rows = {{ trait_list|safe }};
+ </script>
+
<script type="text/javascript" charset="utf-8">
$.fn.dataTable.ext.order['dom-checkbox'] = function ( settings, col )
{
@@ -107,45 +66,223 @@
} );
};
+ $.fn.dataTable.ext.order['dom-inner-text'] = function ( settings, col )
+ {
+ return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
+ return $(td).text();
+ } );
+ }
+
$(document).ready( function () {
-
+
$('#trait_table tr').click(function(event) {
if (event.target.type !== 'checkbox') {
$(':checkbox', this).trigger('click');
}
});
+ function change_buttons() {
+ buttons = ["#add", "#remove"];
+ num_checked = $('.trait_checkbox:checked').length;
+ if (num_checked === 0) {
+ for (_i = 0, _len = buttons.length; _i < _len; _i++) {
+ button = buttons[_i];
+ $(button).prop("disabled", true);
+ }
+ } else {
+ for (_j = 0, _len2 = buttons.length; _j < _len2; _j++) {
+ button = buttons[_j];
+ $(button).prop("disabled", false);
+ }
+ }
+ //});
+ if ($(this).is(":checked")) {
+ if (!$(this).closest('tr').hasClass('selected')) {
+ $(this).closest('tr').addClass('selected')
+ }
+ }
+ else {
+ if ($(this).closest('tr').hasClass('selected')) {
+ $(this).closest('tr').removeClass('selected')
+ }
+ }
+ }
+
console.time("Creating table");
$('#trait_table').DataTable( {
- "paging": false,
- "columns": [
- { "orderDataType": "dom-checkbox" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "natural", "width": "30%"},
- { "type": "natural", "width": "25%"},
- { "type": "natural" },
- { "type": "natural", "width": "8%"},
- { "type": "natural", "width": "12%"},
- { "type": "natural" }
- ],
- "columnDefs": [
+ 'drawCallback': function( settings ) {
+ $('#trait_table tr').click(function(event) {
+ if (event.target.type !== 'checkbox' && event.target.tagName.toLowerCase() !== 'a') {
+ $(':checkbox', this).trigger('click');
+ }
+ });
+ $('.trait_checkbox:checkbox').on("change", change_buttons);
+ },
+ "createdRow": function ( row, data, index ) {
+ $('td', row).eq(0).attr("style", "text-align: center; padding: 4px 10px 2px 10px;");
+ $('td', row).eq(1).attr("align", "right");
+ $('td', row).eq(5).attr('title', $('td', row).eq(5).text());
+ if ($('td', row).eq(5).text().length > 150) {
+ $('td', row).eq(5).text($('td', row).eq(5).text().substring(0, 150));
+ $('td', row).eq(5).text($('td', row).eq(5).text() + '...')
+ }
+ $('td', row).eq(6).attr('title', $('td', row).eq(6).text());
+ if ($('td', row).eq(6).text().length > 150) {
+ $('td', row).eq(6).text($('td', row).eq(6).text().substring(0, 150));
+ $('td', row).eq(6).text($('td', row).eq(6).text() + '...')
+ }
+ $('td', row).slice(8,11).attr("align", "right");
+ $('td', row).eq(1).attr('data-export', $('td', row).eq(1).text());
+ $('td', row).eq(2).attr('data-export', $('td', row).eq(2).text());
+ $('td', row).eq(3).attr('data-export', $('td', row).eq(3).text());
+ $('td', row).eq(4).attr('data-export', $('td', row).eq(4).text());
+ $('td', row).eq(5).attr('data-export', $('td', row).eq(5).text());
+ $('td', row).eq(6).attr('data-export', $('td', row).eq(6).text());
+ $('td', row).eq(7).attr('data-export', $('td', row).eq(7).text());
+ $('td', row).eq(8).attr('data-export', $('td', row).eq(8).text());
+ $('td', row).eq(9).attr('data-export', $('td', row).eq(9).text());
+ $('td', row).eq(10).attr('data-export', $('td', row).eq(10).text());
+ },
+ 'data': the_rows,
+ 'columns': [
+ {
+ 'data': null,
+ 'orderDataType': "dom-checkbox",
+ 'render': function(data, type, row, meta) {
+ return '<input type="checkbox" name="searchResult" class="trait_checkbox checkbox" value="' + data.hmac + '">'
+ }
+ },
+ {
+ 'title': "Index",
+ 'type': "natural",
+ 'data': "index"
+ },
+ {
+ 'title': "Species",
+ 'type': "natural",
+ 'data': "species"
+ },
{
- "targets": 0,
- "orderDataType": "dom-checkbox"
+ 'title': "Group",
+ 'type': "natural",
+ 'width': "10%",
+ 'data': "group"
+ },
+ {
+ 'title': "Record",
+ 'type': "natural",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ return '<a target="_blank" href="/show_trait?trait_id=' + data.name + '&dataset=' + data.dataset + '">' + data.display_name + '</a>'
+ }
+ },
+ {
+ 'title': "Description",
+ 'type': "natural",
+ 'width': "25%",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ try {
+ return decodeURIComponent(escape(data.description))
+ } catch(err) {
+ return data.description
+ }
+ }
+ },
+ {
+ 'title': "Mean",
+ 'type': "natural",
+ 'width': "10%",
+ 'data': "mean"
+ },
+ {
+ 'title': "Authors",
+ 'type': "natural",
+ 'width': "25%",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ author_list = data.authors.split(",")
+ if (author_list.length >= 6) {
+ author_string = author_list.slice(0, 6).join(",") + ", et al."
+ } else{
+ author_string = data.authors
+ }
+
+ try {
+ return decodeURIComponent(escape(author_string))
+ } catch(err) {
+ return author_string
+ }
+
+ }
+ },
+ {
+ 'title': "Year",
+ 'type': "natural",
+ 'data': null,
+ 'orderDataType': "dom-inner-text",
+ 'render': function(data, type, row, meta) {
+ if (data.pubmed_id != "N/A"){
+ return '<a href="' + data.pubmed_link + '">' + data.pubmed_text + '</a>'
+ } else {
+ return data.pubmed_text
+ }
+ },
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Max LRS<a href=\"http://genenetwork.org//glossary.html#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
+ 'type': "natural",
+ 'data': "LRS_score_repr",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Max LRS Location",
+ 'type': "natural",
+ 'width': "10%",
+ 'data': "max_lrs_text"
+ },
+ {
+ 'title': "Additive Effect<a href=\"http://genenetwork.org//glossary.html#A\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
+ 'type': "natural",
+ 'data': "additive",
+ 'orderSequence': [ "desc", "asc"]
}
],
- "order": [[1, "asc" ]],
- "sDom": "tir",
- "autoWidth": false,
- "bDeferRender": true,
- "scrollY": "800px",
- "scrollCollapse": false
+ 'order': [[1, "asc" ]],
+ 'sDom': "tir",
+ 'autoWidth': false,
+ 'deferRender': true,
+ 'paging': false,
+ 'orderClasses': true,
+ 'processing': true,
+ 'language': {
+ 'loadingRecords': '&nbsp;',
+ 'processing': 'Loading...'
+ }
} );
+
+ $('#trait_table').append(
+ '<tfoot>' +
+ '<tr>' +
+ '<th></th>' +
+ '<th>Index</th>' +
+ '<th>Species</th> ' +
+ '<th>Group</th>' +
+ '<th>Record</th>' +
+ '<th>Description</th>' +
+ '<th>Authors</th>' +
+ '<th>Year</th>' +
+ '<th>Max LRS</th>' +
+ '<th>Max LRS Location</th>' +
+ '<th>Additive Effect</th>' +
+ '</tr>' +
+ '</tfoot>'
+ );
+
console.timeEnd("Creating table");
});
</script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/search_results.js"></script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/heatmap.html b/wqflask/wqflask/templates/heatmap.html
index 81c4a9d9..275ff1ba 100644
--- a/wqflask/wqflask/templates/heatmap.html
+++ b/wqflask/wqflask/templates/heatmap.html
@@ -1,44 +1,44 @@
-{% extends "base.html" %}
-{% block title %}Heatmap{% endblock %}
-{% block css %}
- <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />
- <link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />
-{% endblock %}
-{% block content %} <!-- Start of body -->
-
- {{ header("Heatmap") }}
-
- <div class="container">
- <div>
- <h2>
- Heatmap
- </h2>
- </div>
- <div id="chart_container">
- <div class="qtlcharts" id="chart">
-
- </div>
- </div>
-
- </div>
-
- <!-- End of body -->
-
-{% endblock %}
-
-{% block js %}
- <script>
- js_data = {{ js_data | safe }}
- </script>
-
- <script language="javascript" type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/javascript/lodheatmap.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/javascript/lod_chart.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/javascript/curvechart.js"></script>
-<!-- <script language="javascript" type="text/javascript" src="/static/new/javascript/create_heatmap.js"></script>-->
- <script language="javascript" type="text/javascript" src="/static/new/javascript/iplotMScanone_noeff.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
-
+{% extends "base.html" %}
+{% block title %}Heatmap{% endblock %}
+{% block css %}
+ <link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />
+{% endblock %}
+{% block content %} <!-- Start of body -->
+ <div class="container">
+ <h1>Heatmap</h1>
+ <hr style="height: 1px; background-color: #A9A9A9;">
+ <div>
+ <h3>
+ The following heatmap is a work in progress. The heatmap for each trait runs horizontally (as opposed to vertically in GeneNetwork 1),
+ and hovering over a given trait's heatmap track will display its corresponding QTL chart below. White on the heatmap corresponds with a
+ low positive or negative z-score (darker when closer to 0), while light blue and red correspond to high negative and positive z-scores respectively.
+ </h3>
+ </div>
+ <div id="chart_container">
+ <div class="qtlcharts" id="chart">
+
+ </div>
+ </div>
+
+ </div>
+
+ <!-- End of body -->
+
+{% endblock %}
+
+{% block js %}
+ <script>
+ js_data = {{ js_data | safe }}
+ </script>
+
+ <script language="javascript" type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/lodheatmap.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/lod_chart.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/curvechart.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/iplotMScanone_noeff.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
+
{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/templates/index_page.html b/wqflask/wqflask/templates/index_page.html
index 3b96d1e1..0116245d 100644
--- a/wqflask/wqflask/templates/index_page.html
+++ b/wqflask/wqflask/templates/index_page.html
@@ -143,6 +143,9 @@
highly expressed genes (15 to 16 log2 units) AND with peak <a href="http://www.genenetwork.org/glossary.html#L">LRS</a>
linkage between 23 and 46.</li>
+ <li><b>RANGE=(1.5 2.5)</b> in the <b>Any</b> field finds traits with values with a specified fold-range (minimum = 1).
+ Useful for finding "housekeeping genes" <b>(1.0 1.2)</b> or highly variable molecular assays <b>(10 100)</b>.</li>
+
<li><b>RIF=mitochondrial</b> searches RNA databases for <a href="https://en.wikipedia.org/wiki/GeneRIF">
GeneRIF</a> links.</li>
@@ -276,11 +279,12 @@
function pressed(e) {
// Has the enter key been pressed?
if ( (window.event ? event.keyCode : e.which) == 13) {
+ e.preventDefault();
// If enter key has been pressed and the search fields are non-empty
- // manually submit the <form>
- if( event.target.value.trim() != "" ) {
- document.forms[1].submit();
- }
+ // manually submit the <form>
+ if( event.target.value.trim() != "" ) {
+ document.forms[1].submit();
+ }
}
}
</script>
diff --git a/wqflask/wqflask/templates/index_page_orig.html b/wqflask/wqflask/templates/index_page_orig.html
index 1694eae5..963531cb 100755
--- a/wqflask/wqflask/templates/index_page_orig.html
+++ b/wqflask/wqflask/templates/index_page_orig.html
@@ -17,38 +17,35 @@
</header>
-->
- <div class="container-fluid">
+ <div class="container-fluid" style="min-width: 1200px;">
{{ flash_me() }}
- <div class="row" style="width: 1400px !important;">
+ <div class="row" style="width: 100%;">
- <div class="col-xs-5">
+ <div class="col-xs-5" style="min-width: 530px; max-width: 550px;">
<section id="search">
- <div class="page-header">
+ <div>
<h1>Select and search</h1>
</div>
- <form method="get" action="/search" name="SEARCHFORM">
+ <form method="get" action="/search" target="_blank" name="SEARCHFORM">
<fieldset>
<div style="padding: 20px" class="form-horizontal">
<div class="form-group">
<label for="species" class="col-xs-1 control-label" style="width: 65px !important;">Species:</label>
- <div class="col-xs-10 controls input-append" style="padding-right: 0px;">
- <div class="col-xs-8">
- <select name="species" id="species" class="form-control span3" style="width: 280px !important;"></select>
- </div>
- <div class="col-xs-4">
- <button type="button" id="make_default" class="btn btn-primary form-control">Make Default</button>
+ <div class="col-xs-10 controls input-append" style="display: flex; padding-left: 20px;">
+ <div class="col-8">
+ <select name="species" id="species" class="form-control" style="width: 280px !important;"><option>Loading...</option></select>
</div>
</div>
</div>
<div class="form-group">
<label for="group" class="col-xs-1 control-label" style="width: 65px !important;">Group:</label>
- <div class="col-xs-10 controls input-append">
- <div class="col-xs-8">
- <select name="group" id="group" class="form-control span3" style="width: 280px !important;"></select>
+ <div class="col-xs-10 controls input-append" style="padding-left: 20px;">
+ <div class="col-9">
+ <select name="group" id="group" class="form-control" style="width: 340px !important;"><option>Loading...</option></select>
<i class="icon-question-sign"></i>
</div>
</div>
@@ -56,23 +53,23 @@
<div class="form-group">
<label for="tissue" class="col-xs-1 control-label" style="width: 65px !important;">Type:</label>
- <div class="col-xs-10 controls">
- <div class="col-xs-8">
- <select name="type" id="type" class="form-control span3" style="width: 280px !important;"></select>
+ <div class="col-xs-10 controls input-append" style="display: flex; padding-left: 20px;">
+ <div class="col-9">
+ <select name="type" id="type" class="form-control" style="width: 340px !important;"><option>Loading...</option></select>
+ </div>
+ <div class="col-3" style="margin-left: 10px;">
+ <button type="button" id="dataset_info" class="btn btn-primary form-control" style="width: 75px !important;">Info</button>
</div>
</div>
</div>
<div class="form-group">
<label for="dataset" class="col-xs-1 control-label" style="width: 65px !important;">Dataset:</label>
- <div class="col-xs-10 controls input-append">
- <div class="col-xs-10">
- <select name="dataset" id="dataset" class="form-control span5" style="width: 340px !important;"></select>
+ <div class="col-xs-10 controls" style="display: flex; padding-left: 20px;">
+ <div class="col-9">
+ <select name="dataset" id="dataset" class="form-control" style="max-width: 550px; width: 450px !important;"><option>Loading...</option></select>
<i class="icon-question-sign"></i>
</div>
- <div class="col-xs-2">
- <button type="button" id="dataset_info" class="btn btn-primary form-control" style="width: 75px !important;">Info</button>
- </div>
</div>
</div>
@@ -85,8 +82,8 @@
<div class="form-group">
<label for="or_search" class="col-xs-1 control-label" style="padding-left: 0px; padding-right: 0px; width: 65px !important;">Get Any:</label>
- <div class="col-xs-10 controls">
- <div class="col-xs-8">
+ <div class="col-xs-10 controls" style="padding-left: 20px;">
+ <div class="col-8">
<textarea onkeydown="pressed(event)" name="search_terms_or" rows="1" class="form-control search-query" style="max-width: 550px; width: 450px !important;" id="or_search"></textarea>
</div>
</div>
@@ -95,8 +92,8 @@
<!-- GET ANY HELP -->
<div class="form-group">
<label for="btsearch" class="col-xs-1 control-label" style="width: 65px !important;"></label>
- <div class="col-xs-10 controls">
- <div class="col-xs-12 controls">
+ <div class="col-xs-10 controls" style="padding-left: 20px;">
+ <div class="col-12 controls">
Enter terms, genes, ID numbers in the <b>Search</b> field.<br>
Use <b>*</b> or <b>?</b> wildcards (Cyp*a?, synap*).<br>
Use <b>quotes</b> for terms such as <i>"tyrosine kinase"</i>.
@@ -106,8 +103,8 @@
<div class="form-group">
<label for="and_search" class="col-xs-1 control-label" style="padding-left: 0px; padding-right: 0px; width: 65px !important;">Combined:</label>
- <div class="col-xs-10 controls">
- <div class="col-xs-8">
+ <div class="col-xs-10 controls" style="padding-left: 20px;">
+ <div class="col-8">
<textarea onkeydown="pressed(event)" name="search_terms_and" rows="1" class="form-control search-query" style="max-width: 550px; width: 450px !important;" id="and_search"></textarea>
</div>
</div>
@@ -115,10 +112,13 @@
<div class="form-group">
<label for="btsearch" class="col-xs-1 control-label" style="width: 65px !important;"></label>
- <div class="col-xs-10 controls">
- <div class="col-xs-2 controls" style="width: 100px !important;">
+ <div class="col-xs-10 controls" style="display: flex; padding-left: 20px;">
+ <div class="col-2 controls">
<input id="btsearch" type="submit" class="btn btn-primary form-control" value="Search">
</div>
+ <div class="col-2 controls" style="padding-left: 20px;">
+ <button type="button" id="make_default" class="btn btn-primary form-control">Make Default</button>
+ </div>
</div>
</div>
@@ -138,20 +138,37 @@
<h2>Advanced commands</h2>
</div>
- <p>You can also use advanced commands. Copy these simple examples into the Get Any or Combined search fields:</p>
+ <p>You can also use advanced commands. Copy these simple examples into the Get Any field for single term searches and Combined for searches with multiple terms:</p>
<ul>
<li><b>POSITION=(chr1 25 30)</b> finds genes, markers, or transcripts on
chromosome 1 between 25 and 30 Mb.</li>
- <li><b>MEAN=(15 16) LRS=(23 46)</b> in the <b>Combined</b> field finds
- highly expressed genes (15 to 16 log2 units) AND with peak <a href="http://www.genenetwork.org/glossary.html#L">LRS</a>
- linkage between 23 and 46.</li>
+ <li><b>MEAN=(15 16)</b> in the <b>Combined</b> field finds
+ highly expressed genes (15 to 16 log2 units)</li>
+
+ <li><b>RANGE=(1.5 2.5)</b> in the <b>Any</b> field finds traits with values with a specified fold-range (minimum = 1).
+ Useful for finding "housekeeping genes" <b>(1.0 1.2)</b> or highly variable molecular assays <b>(10 100)</b>.</li>
+
+ <li><b>LRS=(15 1000)</b> or <b>LOD=(2 8)</b> finds all traits with peak LRS or LOD scores between lower and upper limits.</li>
+
+ <li><b>LRS=(9 999 Chr4 122 155)</b> finds all traits on Chr 4 from 122 and 155 Mb with LRS scores between 9 and 999.</li>
+
+ <li><b>cisLRS=(15 1000 5)</b> or <b>cisLOD=(2 8 5)</b> finds all cis eQTLs with peak LRS or LOD scores between lower and upper limits,
+ with an <b>inclusion</b> zone of 5 Mb around the parent gene.</li>
+
+ <li><b>transLRS=(15 1000 5)</b> or <b>transLOD=(2 8 5)</b> finds all trans eQTLs with peak LRS or LOD scores between lower and upper limits,
+ with an <b>exclusion</b> zone of 5 Mb around the parent gene. You can also add a fourth term specifying which chromosome you want the transLRS to be on
+ (for example transLRS=(15 1000 5 7) would find all trans eQTLs with peak LRS on chromosome 7 that is also a trans eQTL with exclusionary zone of 5Mb).</li>
+
+ <li><b>POSITION=(Chr4 122 130) cisLRS=(9 999 10)</b>
+ finds all traits on Chr 4 from 122 and 155 Mb with cisLRS scores
+ between 9 and 999 and an inclusion zone of 10 Mb.</li>
<li><b>RIF=mitochondrial</b> searches RNA databases for <a href="https://en.wikipedia.org/wiki/GeneRIF">
GeneRIF</a> links.</li>
- <li><b>WIKI=nicotine</b> searches <a href="http://www.genenetwork.org/webqtl/main.py?FormID=geneWiki">
+ <li><b>WIKI=nicotine</b> searches <a href="http://gn1.genenetwork.org/webqtl/main.py?FormID=geneWiki">
GeneWiki</a> for genes that you or other users have annotated
with the word <i>nicotine</i>.</li>
@@ -159,28 +176,49 @@
<a href="http://amigo.geneontology.org/amigo/medial_search?q=GO%3A0045202">
Gene Ontology</a>.</li>
- <li><b>GO:0045202 LRS=(9 99 Chr4 122 155) cisLRS=(9 999 10)</b>
- finds synapse-associated genes with <a href="http://www.genenetwork.org/glossary.html#E">
- cis eQTL</a> on Chr 4 from 122 and 155 Mb with LRS scores
- between 9 and 999.</li>
-
<li><b>RIF=diabetes LRS=(9 999 Chr2 100 105) transLRS=(9 999 10)</b>
- finds diabetes-associated transcripts with peak <a href="http://www.genenetwork.org/glossary.html#E">
+ finds diabetes-associated transcripts with peak <a href="http://gn1.genenetwork.org/glossary.html#E">
trans eQTLs</a> on Chr 2 between 100 and 105 Mb with LRS
scores between 9 and 999.</li>
</ul>
</section>
</div>
- <div style="padding-left:120px" class="col-xs-4" style="width: 600px !important;">
+ <div style="padding-left:80px" class="col-xs-4" style="width: 600px !important;">
+ <section id="affiliates">
+ <div class="page-header">
+ <h1>Affiliates</h1>
+ <ul>
+ <li><b><a href="http://gn1.genenetwork.org">GeneNetwork 1</a> at UTHSC</b></li>
+ <li><a href="http://ucscbrowser.genenetwork.org/">Genome Browser</a> at UTHSC</li>
+ <li><a href="https://systems-genetics.org/">Systems Genetics</a> at EPFL</li>
+ <li><a href="http://bnw.genenetwork.org/">Bayesian Network Web Server</a> at UTHSC</li>
+ <li><a href="https://www.geneweaver.org/">GeneWeaver</a></li>
+ <li><a href="https://phenogen.org/">PhenoGen</a> at University of Colorado</li>
+ <li><a href="http://www.webgestalt.org/">WebGestalt</a> at Baylor</li>
+ </ul>
+ </div>
+ </section>
<section id="news-section">
<div class="page-header">
<h1>News</h1>
+ <div id="tweets" style="height: 300px; overflow: scroll; overflow-x: hidden;"></div>
+ <div align="right">
+ <a href="https://twitter.com/GeneNetwork2">more news items...</a>
+ </div>
</div>
- <div id="tweets"></div>
- <div align="right">
- <a href="https://twitter.com/GeneNetwork2">more news items...</a>
+ </section>
+ <section id="websites">
+ <div class="page-header">
+ <h1>Github</h1>
+ <ul>
+ <li><a href="https://github.com/genenetwork/genenetwork2">GN2 Source Code</a></li>
+ <li><a href="https://github.com/genenetwork/genenetwork">GN1 Source Code</a></li>
+ <!--<li><a href="https://github.com/genenetwork/gn-docs/wiki">GN2 Document Wiki</a></li>-->
+ <li><a href="https://github.com/genenetwork/sysmaintenance">System Maintenance Code</a></li>
+ </ul>
</div>
+ </section>
<!--
<section id="tour-info">
<div class="page-header">
@@ -207,37 +245,25 @@
and advice on their use and citation.</p>
</section>
- -->
- </section>
+ </section>
+ -->
<section id="websites">
<div class="page-header">
- <h2>Links</h2>
+ <h1>Links</h1>
</div>
<h3>GeneNetwork v2:</h3>
<ul>
<li><a href="http://gn2.genenetwork.org/">Main website</a> at UTHSC</li>
- <li><a href="http://test-gn2.genenetwork.org/">Testing website</a> at UTHSC</li>
+ <!--<li><a href="http://test-gn2.genenetwork.org/">Testing website</a> at UTHSC</li>-->
</ul>
<h3>GeneNetwork v1:</h3>
<ul>
- <li><a href="http://www.genenetwork.org/">Main website</a> at UTHSC</li>
- <li><a href="http://genenetwork.helmholtz-hzi.de/">Website</a> at the HZI (Germany)</li>
- <li><a href="http://ec2.genenetwork.org/">Amazon
+ <li><a href="http://gn1.genenetwork.org/">Main website</a> at UTHSC</li>
+ <li><a href="http://artemis.uthsc.edu/">Time Machine</a>: Full GN versions from 2009 to 2016 (mm9)</li>
Cloud (EC2)</a></li>
- </ul>
- <h3>Affiliates</h3>
- <ul>
- <li><a href="http://ucscbrowser.genenetwork.org/">Genome
- browser</a> at UTHSC</li>
-
- <li><a href="http://galaxy.genenetwork.org/">Galaxy</a> at
- UTHSC</li>
-
</ul>
-
-
-
+ <script type="text/javascript" src="//rf.revolvermaps.com/0/0/8.js?i=526mdlpknyd&amp;m=0&amp;c=ff0000&amp;cr1=ffffff&amp;f=arial&amp;l=33" async="async"></script>
</section>
<!--<section id="getting-started">
@@ -264,7 +290,7 @@
<li>Select a <b>Dataset</b></li>
<li>Enter terms in the search field: words,
- genes, ID numbers, probes, advanced search commands</li>
+ genes, probes, advanced search commands</li>
<li>Click the <b>Search</b> button</li>
@@ -273,7 +299,7 @@
<h3>User Guide</h3>
<h5>Read the
- <a href="http://www.genenetwork.org/index4.html">
+ <a href="http://gn1.genenetwork.org/index4.html">
user guide</a>.</h5>
</section>-->
@@ -290,11 +316,12 @@
function pressed(e) {
// Has the enter key been pressed?
if ( (window.event ? event.keyCode : e.which) == 13) {
+ e.preventDefault();
// If enter key has been pressed and the search fields are non-empty
- // manually submit the <form>
- if( event.target.value.trim() != "" ) {
- document.forms[1].submit();
- }
+ // manually submit the <form>
+ if( event.target.value.trim() != "" ) {
+ document.forms[1].submit();
+ }
}
}
</script>
@@ -309,7 +336,7 @@
"enableLinks": true,
"showUser": false,
"showTime": true,
- "showImages": false,
+ "showImages": true,
"lang": 'en'
};
twitterFetcher.fetch(configProfile);
diff --git a/wqflask/wqflask/templates/loading.html b/wqflask/wqflask/templates/loading.html
index cede0e86..49bcbff7 100644
--- a/wqflask/wqflask/templates/loading.html
+++ b/wqflask/wqflask/templates/loading.html
@@ -1,20 +1,39 @@
-<title>Loading Mapping Results</title>
+<title>Loading {{ start_vars.tool_used }} Results</title>
<link REL="stylesheet" TYPE="text/css" href="/static/packages/bootstrap/css/bootstrap.css" />
-<link REL="stylesheet" TYPE="text/css" href="/static/packages/bootstrap/css/non-responsive.css" />
-<link REL="stylesheet" TYPE="text/css" href="/static/packages/bootstrap/css/docs.css" />
-<link rel="stylesheet" type="text/css" href="/static/packages/colorbox/example4/colorbox.css" />
-<link rel="stylesheet" type="text/css" href="/static/new/css/main.css" />
-<form method="post" action="/marker_regression" name="loading_form" id="loading_form" class="form-horizontal">
+<form method="post" action="" name="loading_form" id="loading_form" class="form-horizontal">
{% for key, value in start_vars.iteritems() %}
<input type="hidden" name="{{ key }}" value="{{ value }}">
{% endfor %}
<div class="container">
- <div class="row">
- <div style="margin-left: 46%; margin-right: 50%; min-height: 100vh; display: flex; align-items: center;">
- <h1>Loading&nbsp;Mapping&nbsp;Results...</h1>
- </div>
- <div class="progress center-block" style="margin-left: 25%; margin-right: 25%; position: absolute; height:50px; width:50%; top:50%;">
- <div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width:100%;"></div>
+ <div>
+ <div style="min-height: 80vh; display: flex; align-items: center; text-align: center;">
+ <div style="margin-bottom: 5px; left: 50%; margin-right: -50%; margin-top: 10%; transform: translate(-50%, -50%); position: absolute;">
+ {% if start_vars.tool_used == "Mapping" %}
+ <h1>Computing the Maps</h1>
+ <br>
+ <i>n</i> = {{ start_vars.num_vals }}
+ <br>
+ Method = {% if start_vars.method == "gemma" %}GEMMA{% else %}{{ start_vars.method }}{% endif %}
+ <br>
+ {% if start_vars.transform != "" %}
+ transform = {{ start_vars.transform }}
+ <br>
+ {% endif %}
+ MAF >= {{ start_vars.maf }}
+ {% else %}
+ <h1>Loading&nbsp;{{ start_vars.tool_used }}&nbsp;Results...</h1>
+ {% endif %}
+ <br><br>
+ <img align="center" src="/static/gif/89.gif">
+ </div>
+ <!--<div style="margin-left: auto; margin-right: auto; display: block; width: 50%; top:50%;">
+ <img align="center" src="/static/gif/89.gif">
+ </div>-->
+ <!--
+ <div class="progress center-block" style="margin-left: 25%; margin-right: 25%; position: absolute; height:50px; width:50%; top:50%;">
+ <div class="progress-bar progress-bar-striped active" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width:100%;"></div>
+ </div>
+ -->
</div>
</div>
</div>
@@ -22,5 +41,7 @@
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="/static/packages/bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript">
-$("#loading_form").submit();
+
+$("#loading_form").attr("action", "{{ start_vars.form_url }}");
+setTimeout(function(){ $("#loading_form").submit()}, 350);
</script> \ No newline at end of file
diff --git a/wqflask/wqflask/templates/mapping_error.html b/wqflask/wqflask/templates/mapping_error.html
new file mode 100644
index 00000000..884d4df8
--- /dev/null
+++ b/wqflask/wqflask/templates/mapping_error.html
@@ -0,0 +1,20 @@
+{% extends "base.html" %}
+{% block title %}Error{% endblock %}
+{% block content %}
+<!-- Start of body -->
+ {{ header("An error occurred during mapping") }}
+
+ <div class="container">
+ <h3>
+ <p>There is likely an issue with the genotype file associated with this group/RISet. Please contact Zach Sloan (zachary.a.sloan@gmail.com) or Arthur Centeno (acenteno@gmail.com) about the data set in question.</p>
+ </h3>
+ <br>
+ <h3>
+ <p>Try mapping using interval mapping instead; some genotype files with many columns of NAs have issues with GEMMA or R/qtl.</p>
+ </h3>
+ </div>
+
+
+<!-- End of body -->
+
+{% endblock %}
diff --git a/wqflask/wqflask/templates/marker_regression_gn1.html b/wqflask/wqflask/templates/mapping_results.html
index 6d3f9326..ba0ebef9 100644
--- a/wqflask/wqflask/templates/marker_regression_gn1.html
+++ b/wqflask/wqflask/templates/mapping_results.html
@@ -3,25 +3,41 @@
{% block css %}
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
<link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
+ <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
+ <link rel="stylesheet" type="text/css" href="/static/packages/purescript_genome_browser/css/purescript-genetics-browser.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/marker_regression.css" />
- <link rel="stylesheet" type="text/css" href="/static/new/css/panelutil.css" />
+
{% endblock %}
{% from "base_macro.html" import header %}
{% block content %}
- <div class="container">
- <form method="post" target="_blank" action="/marker_regression" name="marker_regression" id="marker_regression_form">
+ <div class="container" style="min-width: 900px;">
+ <form method="post" target="_blank" action="/run_mapping" name="marker_regression" id="marker_regression_form">
<input type="hidden" name="temp_uuid" value="{{ temp_uuid }}">
+ {% if temp_trait is defined %}
+ <input type="hidden" name="temp_trait" value="{{ temp_trait }}">
+ <input type="hidden" name="group" value="{{ group }}">
+ {% endif %}
<input type="hidden" name="trait_id" value="{{ this_trait.name }}">
<input type="hidden" name="dataset" value="{{ dataset.name }}">
- {% if mapping_method == "reaper" %}
- <input type="hidden" name="genofile" value="{{ dataset.group.genofile }}">
+ <input type="hidden" name="genofile" value="{{ genofile_string }}">
+ <input type="hidden" name="geno_db_exists" value="{{ geno_db_exists }}">
+ <input type="hidden" name="first_run" value="{{ first_run }}">
+ {% if output_files is defined %}
+ <input type="hidden" name="output_files" value="{{ output_files }}">
{% endif %}
+ {% if reaper_version is defined %}
+ <input type="hidden" name="reaper_version" value="{{ reaper_version }}">
+ {% endif %}
+ <input type="hidden" name="results_path" value="{{ mapping_results_path }}">
<input type="hidden" name="method" value="{{ mapping_method }}">
+ <input type="hidden" name="samples" value="{{ samples|join(",") }}">
{% for sample in samples %}
<input type="hidden" name="value:{{ sample }}" value="{{ vals[loop.index - 1] }}">
{% endfor %}
+ <input type="hidden" name="num_vals" value="{{ n_samples }}">
<input type="hidden" name="maf">
+ <input type="hidden" name="use_loco" value="{{ use_loco }}">
<input type="hidden" name="selected_chr" value="{{ selectedChr }}">
<input type="hidden" name="manhattan_plot" value="{{ manhattan_plot }}">
<input type="hidden" name="num_perm" value="{{ nperm }}">
@@ -29,6 +45,7 @@
<input type="hidden" name="num_bootstrap" value="{{ nboot }}">
<input type="hidden" name="do_control" value="{{ doControl }}">
<input type="hidden" name="control_marker" value="{{ controlLocus }}">
+ <input type="hidden" name="covariates" values="{{ covariates }}">
<input type="hidden" name="mapmethod_rqtl_geno" value="{{ mapmethod_rqtl_geno }}">
<input type="hidden" name="mapmodel_rqtl_geno" value="{{ mapmodel_rqtl_geno }}">
<input type="hidden" name="pair_scan" value="{{ pair_scan }}">
@@ -41,8 +58,14 @@
{% if dataset.type == "ProbeSet" %}<b>Trait ID:</b>{% else %}<b>Record ID:</b>{% endif %} <a href="/show_trait?trait_id={{ this_trait.name }}&dataset={{ dataset.name }}">{{ this_trait.name }}</a><br>
{% if dataset.type == "ProbeSet" %}
<b>Gene Symbol:</b> <i>{{ this_trait.symbol }}</i><br>
- <b>Location:</b> Chr {{ this_trait.chr }} @ {{ this_trait.mb }} Mb
+ <b>Location:</b> Chr {{ this_trait.chr }} @ {{ this_trait.mb }} Mb<br>
+ {% endif %}
+ {% if genofile_string is defined %}
+ <b>Genotypes:</b> {{ genofile_string.split(":")[1] }}
{% endif %}
+ <br>
+ <br>
+ <a id="export_mapping_results" href="#" target="_blank" >Download Full Results</a>
</div>
<div id="gn1_map_options" class="col-xs-5" style="outline: 3px double #AAAAAA; padding: 10px; margin: 10px;">
<div class="col-xs-8" style="padding: 0px;">
@@ -61,7 +84,7 @@
<tr>
<td><b>View:&nbsp;</b></td>
<td style="padding: 5px;">
- <input type="text" name="startMb" size="10" value="{% if startMb != -1 %}{{ startMb }}{% endif %}"> to <input type="text" name="endMb" size="10" value="{% if endMb != -1 %}{{ endMb }}{% endif %}">
+ <input type="text" name="startMb" size="7" value="{% if startMb != -1 %}{{ startMb }}{% endif %}"> to <input type="text" name="endMb" size="7" value="{% if endMb != -1 %}{{ endMb }}{% endif %}">
</td>
</tr>
<tr>
@@ -121,7 +144,7 @@
<span style="color:red;">*</span>
<br>
<input type="checkbox" name="showGenes" class="checkbox" style="display: inline; margin-top: 0px;" {% if geneChecked|upper == "ON" %}value="ON" checked{% endif %}> <span style="font-size: 12px;">Gene Track </span> <span style="color:red;">*</span><br>
- {% if plotScale != "morgan" and mapping_method != "gemma" %}
+ {% if plotScale != "morgan" %}
<input type="checkbox" name="haplotypeAnalystCheck" class="checkbox" style="display: inline; margin-top: 0px;" {% if haplotypeAnalystChecked|upper == "ON" %}value="ON" checked{% endif %}> <span style="font-size: 12px;">Haplotype Analyst </span> <span style="color:red;">*</span><br>
{% endif %}
<input type="checkbox" name="viewLegend" class="checkbox" style="display: inline; margin-top: 0px;" {% if legendChecked|upper == "ON" %}value="ON" checked{% endif %}> <span style="font-size: 12px;">Legend </span>
@@ -137,57 +160,82 @@
<li id="gn1_map_tab">
<a href="#gn1_map" data-toggle="tab" aria-expanded="true">GN1 Map</a>
</li>
- {% if mapping_method != "gemma" %}
- <li id="vector_map_tab">
- <a href="#vector_map" data-toggle="tab" {% if mapping_method != "gemma" %}aria-expanded="false"{% else %}aria-expanded="true"{% endif %}>Vector Map</a>
+ {% if mapping_method == "gemma" or mapping_method == "reaper" %}
+ <li id="browser_tab">
+ <a href="#browser_holder" data-toggle="tab" aria-expanded="true">Genome Browser</a>
</li>
{% endif %}
</ul>
- <div class="tab-content">
+ <div class="tab-content" style="overflow-x: auto;">
<div class="tab-pane active" id="gn1_map">
<div class="qtlcharts">
{{ gifmap|safe }}
- <img src="/generated/{{ filename }}.jpeg" usemap="#WebQTLImageMap">
+ <img src="/generated/{{ filename }}.png" usemap="#WebQTLImageMap">
{% if additiveChecked|upper == "ON" %}
<br>
<span style="white-space: nowrap;">A positive additive coefficient (green line) indicates that {{ dataset.group.parlist[1] }} alleles increase trait values. In contrast, a negative additive coefficient (orange line) indicates that {{ dataset.group.parlist[0] }} alleles increase trait values.</span>
{% endif %}
- {% if nperm > 0 and permChecked == "ON" %}
- <br><br>
- <img src="/generated/{{ perm_filename }}.gif">
- <br><br>
- Total of {{ nperm }} permutations&nbsp;&nbsp;<a href="javascript:export_perm_data();" target="_blank" >Download Permutation Results</a>
- <br>
- {% endif %}
</div>
</div>
- {% if mapping_method != "gemma" %}
- <div class="tab-pane {% if mapping_method == "gemma" %}active{% endif %}" id="vector_map">
- <div id="chart_container">
- <div class="qtlcharts" id="topchart"></div>
- </div>
+ {% if mapping_method == "gemma" or mapping_method == "reaper" %}
+ <div class="tab-pane" id="browser_holder" style="height: 600px;">
+ <div id="browser" style="margin-right: 20px; width: 90%;">
+ <div id="controls">
+ <button id="scrollLeft" type="button" >
+ <i class="fas fa-arrow-left"></i>
+ </button>
+ <button id="scrollRight" type="button" >
+ <i class="fas fa-arrow-right"></i>
+ </button>
+ <button id="zoomOut" type="button" >
+ <i class="fas fa-search-minus"></i>
+ </button>
+ <button id="zoomIn" type="button" >
+ <i class="fas fa-search-plus"></i>
+ </button>
+ <button id="reset" type="button" >Reset</button>
+ </div>
+ <div id="infoBox"></div>
+ </div>
</div>
{% endif %}
</div>
</div>
+ <div>
+ {% if nperm > 0 and permChecked == "ON" %}
+ <br><br>
+ <div id="perm_histogram" class="barchart"></div>
+ <!--<img src="/generated/{{ perm_filename }}.gif">-->
+ <br><br>
+ Total of {{ nperm }} permutations&nbsp;&nbsp;<a href="javascript:;" id="download_perm" target="_blank" >Download Permutation Results</a>
+ <br>
+ {% endif %}
+ </div>
</form>
{% if selectedChr == -1 %}
- <div style="width:{% if 'additive' in trimmed_markers[0] %}40%{% else %}30%{% endif %};">
- <h2>Results</h2>
- <div id="table_container">
- <table id="qtl_results" class="table table-hover table-striped nowrap">
+ <div class="container" style="padding-left: 30px; margin-top: 50px; position: relative;">
+ <h2>Mapping Statistics</h2>
+ <br />
+ <button class="btn btn-default" id="select_all"><span class="glyphicon glyphicon-ok"></span> Select All</button>
+ <button class="btn btn-default" id="deselect_all"><span class="glyphicon glyphicon-remove"></span> Deselect All</button>
+ <button class="btn btn-default" id="invert"><span class="glyphicon glyphicon-resize-vertical"></span> Invert</button>
+ <button class="btn btn-default" id="add" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
+ <br />
+ <br />
+ <div id="table_container" style="width:{% if 'additive' in trimmed_markers[0] %}500{% else %}470{% endif %}px;">
+ <table id="trait_table" class="table-hover table-striped cell-border dataTable no-footer">
<thead>
<tr>
<th></th>
<th>Row</th>
- <th>Locus</th>
+ <th>Marker</th>
<th>{{ LRS_LOD }}</th>
<th>Chr</th>
- {% if plotScale == "centimorgan" %}
+ {% if plotScale != "physic" %}
<th>cM</th>
{% else %}
- <th>Mb</th>
+ <th align="right">Mb</th>
{% endif %}
{% if 'additive' in trimmed_markers[0] %}
<th>Add Eff</th>
@@ -200,28 +248,32 @@
<tbody>
{% for marker in trimmed_markers %}
<tr>
- <td align="center" style="padding-right: 0px;">
+ <td align="center" style="padding: 1px 0px 1px 0px;">
<input type="checkbox" name="selectCheck"
- class="checkbox edit_sample_checkbox"
- value="{{ marker.name }}" checked="checked">
+ class="checkbox trait_checkbox"
+ value="{{ data_hmac('{}:{}Geno'.format(marker.name, dataset.group.name)) }}">
</td>
<td align="right">{{ loop.index }}</td>
- <td>{{ marker.name }}</td>
+ <td>{% if geno_db_exists == "True" %}<a href="/show_trait?trait_id={{ marker.name }}&dataset={{ dataset.group.name }}Geno">{{ marker.name }}</a>{% else %}{{ marker.name }}{% endif %}</td>
{% if LRS_LOD == "LOD" or LRS_LOD == "-log(p)" %}
{% if 'lod_score' in marker %}
<td align="right">{{ '%0.2f' | format(marker.lod_score|float) }}</td>
{% else %}
- <td align="right">{{ '%0.2f' | format(marker.lrs_value|float / 4.16) }}</td>
+ <td align="right">{{ '%0.2f' | format(marker.lrs_value|float / 4.61) }}</td>
{% endif %}
{% else %}
{% if 'lod_score' in marker %}
- <td align="right">{{ '%0.2f' | format(marker.lod_score|float * 4.16) }}</td>
+ <td align="right">{{ '%0.2f' | format(marker.lod_score|float * 4.61) }}</td>
{% else %}
<td align="right">{{ '%0.2f' | format(marker.lrs_value|float) }}</td>
{% endif %}
{% endif %}
<td align="right">{{marker.chr}}</td>
+ {% if plotScale != "physic" %}
+ <td align="right">{{ '%0.3f' | format(marker.Mb|float) }}</td>
+ {% else %}
<td align="right">{{ '%0.6f' | format(marker.Mb|float) }}</td>
+ {% endif %}
{% if 'additive' in marker %}
<td align="right">{{ '%0.3f' | format(marker.additive|float) }}</td>
{% endif %}
@@ -234,11 +286,11 @@
</table>
</div>
</div>
- {% else %}
- <div>
+ {% elif selectedChr != -1 and plotScale =="physic" and (dataset.group.species == 'mouse' or dataset.group.species == 'rat') %}
+ <div style="width: 100%;">
<h2>Interval Analyst</h2>
<div id="table_container">
- <table id="interval_analyst" class="table table-hover table-striped nowrap">
+ <table id="trait_table" class="table-hover table-striped cell-border dataTable" style="float: left; width:100%;">
<thead>
<tr>
{% for header in gene_table_header %}
@@ -250,7 +302,11 @@
{% for row in gene_table_body %}
<tr>
{% for n in range(row|length) %}
+ {% if n == 0 %}
+ <td align="center" style="padding: 1px 0px 1px 0px;">{{ row[n]|safe }}</td>
+ {% else %}
<td>{{ row[n]|safe }}</td>
+ {% endif %}
{% endfor %}
</tr>
{% endfor %}
@@ -271,58 +327,38 @@
<script type="text/javascript" src="/static/new/js_external/underscore-min.js"></script>
<script type="text/javascript" src="/static/new/js_external/underscore.string.min.js"></script>
<script type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
+ <script type="text/javascript" src="/static/new/js_external/plotly-latest.min.js"></script>
<script language="javascript" type="text/javascript" src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
<script language="javascript" type="text/javascript" src="https://cdn.datatables.net/buttons/1.0.0/js/dataTables.buttons.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.scientific.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/packages/purescript_genome_browser/js/purescript-genetics-browser.js"></script>
<script>
js_data = {{ js_data | safe }}
</script>
- {% if mapping_method != "gemma" %}
- <script language="javascript" type="text/javascript" src="/static/new/javascript/panelutil.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/javascript/chr_lod_chart.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/javascript/lod_chart.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/javascript/create_lodchart.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/search_results.js"></script>
+ {% if mapping_method == "gemma" or mapping_method == "reaper" %}
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/init_genome_browser.js"></script>
{% endif %}
<script type="text/javascript" charset="utf-8">
$(document).ready( function () {
console.time("Creating table");
- $('#qtl_results').DataTable( {
- {% if mapping_method != "reaper" %}
- "columns": [
- { "type": "natural", "width": "5%" },
- { "type": "natural", "width": "8%" },
- { "type": "natural", "width": "20%" },
- { "type": "natural", "width": "8%" },
- { "type": "natural", "width": "8%" },
- { "type": "natural", "width": "15%" }
- ],
- {% elif dataset.group.genetic_type == "riset" %}
+ {% if selectedChr == -1 %}
+ $('#trait_table').DataTable( {
"columns": [
{ "type": "natural", "width": "5%" },
{ "type": "natural", "width": "8%" },
- { "type": "natural", "width": "20%" },
- { "type": "natural", "width": "8%" },
- { "type": "natural", "width": "8%" },
- { "type": "natural", "width": "15%" },
- { "type": "natural", "width": "8%" }
+ { "type": "natural", "width": "25%" },
+ { "type": "natural" },
+ { "type": "natural" },
+ { "type": "natural" }{% if 'additive' in qtlresults[0] %},
+ { "type": "natural" }{% endif %}{% if 'dominance' in qtlresults[0] and dataset.group.genetic_type != "riset" %},
+ { "type": "natural" }{% endif %}
],
- {% else %}
- "columns": [
- { "type": "natural", "width": "5%" },
- { "type": "natural", "width": "8%" },
- { "type": "natural", "width": "20%" },
- { "type": "natural", "width": "8%" },
- { "type": "natural", "width": "8%" },
- { "type": "natural", "width": "15%" },
- { "type": "natural", "width": "8%" },
- { "type": "natural", "width": "8%" }
- ],
- {% endif %}
"columnDefs": [ {
"targets": 0,
"orderable": false
@@ -333,13 +369,34 @@
"autoWidth": false,
"deferRender": true,
"bSortClasses": false,
- "scrollY": "600px",
"scrollCollapse": false,
- "scroller": true,
"paging": false
} );
-
- $('#interval_analyst').dataTable( {
+ {% elif selectedChr != -1 and plotScale =="physic" and (dataset.group.species == 'mouse' or dataset.group.species == 'rat') %}
+ $('#trait_table').dataTable( {
+ "createdRow": function ( row, data, index ) {
+ $('td', row).eq(1).attr("align", "right");
+ $('td', row).eq(3).attr("align", "right");
+ $('td', row).eq(4).attr("align", "right");
+ $('td', row).eq(5).attr("align", "right");
+ $('td', row).eq(6).attr("align", "right");
+ $('td', row).eq(7).attr("align", "right");
+ $('td', row).eq(8).attr("align", "center");
+ $('td', row).eq(9).attr("align", "right");
+ },
+ "columns": [
+ { "bSortable": false},
+ { "type": "natural" },
+ { "type": "natural" },
+ { "type": "natural" },
+ { "type": "natural" },
+ { "type": "natural" },
+ { "type": "natural" },
+ { "type": "natural" },
+ { "type": "natural" },
+ { "type": "natural" },
+ { "type": "natural" }
+ ],
"columnDefs": [ {
"targets": 0,
"sortable": false
@@ -347,12 +404,13 @@
"order": [[3, "asc" ]],
"sDom": "RZtir",
"iDisplayLength": -1,
- "bDeferRender": true,
+ "autoWidth": false,
+ "deferRender": true,
"bSortClasses": false,
- "scrollY": true,
"scrollCollapse": false,
"paging": false
} );
+ {% endif %}
$('#vector_map_tab').click(function(){
$('div#gn1_map_options').hide();
@@ -368,6 +426,7 @@
$('input[name=selected_chr]').val(this_chr)
$('input[name=chr_mb_list]').val(chr_mb_list)
+ $('#marker_regression_form').attr('action', '/run_mapping');
return $('#marker_regression_form').submit();
};
@@ -377,24 +436,101 @@
$('input[name=endMb]').val(end_mb)
//$('input[name=mb_range]').val(start_mb + "," + end_mb)
+ $('#marker_regression_form').attr('action', '/run_mapping');
return $('#marker_regression_form').submit();
};
remap = function() {
$('input[name=selected_chr]').val($('select[name=chromosomes]').val());
+ $('#marker_regression_form').attr('action', '/run_mapping');
return $('#marker_regression_form').submit();
};
- export_perm_data = function() {
- var num_perm, perm_data;
+ {% if mapping_method != "gemma" and mapping_method != "plink" %}
+ $('#download_perm').click(function(){
+ var num_perm, perm_data;
num_perm = js_data.num_perm
perm_data = js_data.perm_results
json_perm_data = JSON.stringify(perm_data);
$('input[name=perm_results]').val(json_perm_data);
$('#marker_regression_form').attr('action', '/export_perm_data');
return $('#marker_regression_form').submit();
- };
+ });
+
+ modebar_options = {
+ modeBarButtonsToAdd:[{
+ name: 'Export as SVG',
+ icon: Plotly.Icons.disk,
+ click: function(gd) {
+ Plotly.downloadImage(gd, {format: 'svg'})
+ }
+ }],
+ modeBarButtonsToRemove:['toImage', 'sendDataToCloud', 'hoverClosest', 'hoverCompare', 'hoverClosestCartesian', 'hoverCompareCartesian', 'lasso2d', 'toggleSpikelines'],
+ displaylogo: false
+ //modeBarButtons:['toImage2', 'zoom2d', 'pan2d', 'select2d', 'zoomIn2d', 'zoomOut2d', 'autoScale2d', 'resetScale2d'],
+ }
+
+ perm_data = js_data.perm_results
+ var hist_trace = {
+ x: perm_data,
+ type: 'histogram'
+ };
+ histogram_data = [hist_trace];
+ histogram_layout = {
+ bargap: 0.05,
+ title: "<b>Histogram of Permutation Test</b>",
+ xaxis: {
+ autorange: true,
+ title: "<b>{{ LRS_LOD }}</b>",
+ titlefont: {
+ family: "arial",
+ size: 20
+ },
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ }
+ },
+ yaxis: {
+ autorange: true,
+ title: "<b>Count</b>",
+ titlefont: {
+ family: "arial",
+ size: 20
+ },
+ showline: true,
+ ticklen: 4,
+ tickfont: {
+ size: 16
+ },
+ automargin: true
+ },
+ width: 500,
+ height: 300,
+ margin: {
+ l: 70,
+ r: 30,
+ t: 100,
+ b: 50
+ }
+ };
+
+ Plotly.newPlot('perm_histogram', histogram_data, histogram_layout, modebar_options);
+ {% endif %}
+
+ export_mapping_results = function() {
+ $('#marker_regression_form').attr('action', '/export_mapping_results');
+ return $('#marker_regression_form').submit();
+ }
+
+ $('#export_mapping_results').click(export_mapping_results);
+ $('#browser_tab').click(function() {
+ $('#gn1_map_options').css("display", "none")
+ })
+ $('#gn1_map_tab').click(function() {
+ $('#gn1_map_options').css("display", "block")
+ })
</script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/network_graph.html b/wqflask/wqflask/templates/network_graph.html
index 57426af7..4492dd3f 100644
--- a/wqflask/wqflask/templates/network_graph.html
+++ b/wqflask/wqflask/templates/network_graph.html
@@ -1,7 +1,7 @@
{% extends "base.html" %}
{% block css %}
<link rel="stylesheet" type="text/css" href="/static/new/css/network_graph.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/cytoscape/css/cytoscape.js-panzoom.css" />
+ <link rel="stylesheet" type="text/css" href="/js/cytoscape-panzoom/cytoscape.js-panzoom.css" />
<link rel="stylesheet" type="text/css" href="http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0/jquery.qtip.css">
<style>
/* The Cytoscape Web container must have its dimensions set. */
@@ -10,14 +10,13 @@
</style>
{% endblock %}
{% block content %}
-
- {{ header("Network Graph") }}
-
<div class="container-fluid">
+ <h1>Network Graph</h1>
+ <hr style="height: 1px; background-color: #A9A9A9;">
<div class="row" >
<div id="content">
<div id="secondaryContent" class="col-xs-3">
- <h3> Visualization Options</h3>
+ <h3 style="margin-top:0px; margin-bottom: 5px;"> Visualization Options</h3>
<table border="0">
<tbody>
<tr>
@@ -27,39 +26,47 @@
</tr>
<tr>
<td>
- Focus Trait
+ Focus Trait<sup title="Only show edges connected to the specified node" style="color:#f00"> ?</sup>
</td>
</tr>
<tr>
<td>
<select name="focus_select">
+ <option disabled selected value>Select Trait</option>
{% for trait in traits %}
+ {% if trait.symbol == None %}
+ <option value="{{ trait.name }}:{{ trait.dataset.name }}">{{ trait.name }}</option>
+ {% else %}
<option value="{{ trait.name }}:{{ trait.dataset.name }}">{{ trait.symbol }} ({{ trait.name }})</option>
+ {% endif %}
{% endfor %}
</select>
</td>
- </tr>
- <tr>
- <td colspan="1">Correlation Coefficient</td>
- </tr>
- <tr>
- <td>
- <font size="2"><b>0 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +/- 1</b></font>
- </td>
</tr>
<tr>
- <td>
- <input type="range" id="slide" min="0" max="1" value="0" step="0.001" list="corr_range">
+ <td colspan="1">
+ Correlation Coefficient<sup title="Filter edges to only show correlations less than the negative value specified with the slider and greater than the positive value. For example, moving the slider half way will display correlations less than -0.5 and greater than 0.5" style="color:#f00"> ?</sup>
</td>
</tr>
<tr>
- <td>
- Layouts
+ <td colspan="1">
+ <div style="text-align: center;">
+ <div style="float: left;"><font size="2"><b>-1</b></font></div>
+ <font size="2"><b>0</b></font>
+ <div style="float: right;"><font size="2"><b>1</b></font></div>
+ </div>
+ <!--
+ <font size="2"><b>-1 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
+ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1</b></font><br>
+ -->
+ <input type="range" id="neg_slide" min="-1" max="0" value="0" step="0.001" list="corr_range" style="display: inline; width: 49%">
+ <input type="range" id="pos_slide" min="0" max="1" value="0" step="0.001" list="corr_range" style="display: inline; width: 49%">
</td>
</tr>
<tr>
<td>
+ Layouts:
<select name="layout_select">
<option value="circle">Circle</option>
<option value="concentric">Concentric</option>
@@ -69,37 +76,56 @@
<option value="random">Random</option>
</select>
</td>
- </tr>
- </tbody>
- </table>
- <h3> Download</h3>
- <table>
- <tbody>
+ </tr>
<tr>
<td>
- <a id="image_link" href="javascript:void(0)">
- <button style="width:100px;height:25px;">Save Image</button>
- </a>
+ Node Font Size:
+ <select name="font_size">
+ <option value="6">6</option>
+ <option value="7">7</option>
+ <option value="8">8</option>
+ <option value="9">9</option>
+ <option value="10" selected>10</option>
+ <option value="11">11</option>
+ <option value="12">12</option>
+ <option value="13">13</option>
+ <option value="14">14</option>
+ <option value="15">15</option>
+ <option value="16">16</option>
+ <option value="17">17</option>
+ <option value="18">18</option>
+ </select>
</td>
+ <td>
</tr>
<tr>
<td>
- <a id="image_link" href="javascript:void(0)">
- <button style="width:100px;height:25px;">Table View</button>
- </a>
+ Edge Width:
+ <select name="edge_width">
+ <option value="1" selected>1x</option>
+ <option value="2">2x</option>
+ <option value="3">3x</option>
+ <option value="4">4x</option>
+ </select>
</td>
+ <td>
</tr>
+ </tbody>
+ </table>
+ <h3 style="margin-bottom: 5px;"> Download</h3>
+ <table>
+ <tbody>
<tr>
<td>
<a id="image_link" href="javascript:void(0)">
- <button style="width:100px;height:25px;">Save Table</button>
+ <button style="width:100px;height:25px;">Save Image</button>
</a>
</td>
</tr>
</tbody>
</table>
</div>
- <div id="cytoscapeweb" class="col-xs-9" style="min-height:700px !important;"></div>
+ <div id="cytoscapeweb" class="col-xs-9" style="height:700px !important; border-style: solid; border-width: 1px; border-color: grey;"></div>
</div>
</div>
</div>
@@ -116,11 +142,19 @@
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.js"></script>
<script language="javascript" type="text/javascript" src="http://cdnjs.cloudflare.com/ajax/libs/qtip2/2.2.0/jquery.qtip.js"></script>
<script language="javascript" type="text/javascript" src="/static/packages/underscore/underscore-min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/min/cytoscape.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/min/AC_OETags.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/min/json2.min.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/src/cytoscape-panzoom.js"></script>
- <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/src/cytoscape-qtip.js"></script>
+
+ <script language="javascript" type="text/javascript" src="/js/cytoscape/cytoscape.min.js"></script>
+ <script language="javascript" type="text/javascript" src="/js/cytoscape-panzoom/cytoscape-panzoom.js"></script>
+ <!-- should be using cytoscape-popper for tips, see docs -->
+ <script language="javascript" type="text/javascript" src="/js/cytoscape-qtip/cytoscape-qtip.js"></script>
+
+ <!--
+ Loads flash - who wants that?
+ <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/min/AC_OETags.min.js"></script>
+ Disabled because it is standard JS now:
+ <script language="javascript" type="text/javascript" src="/static/packages/cytoscape/js/min/json2.min.js"></script>
+ -->
<script language="javascript" type="text/javascript" src="/static/new/javascript/network_graph.js"></script>
+
{% endblock %}
diff --git a/wqflask/wqflask/templates/new_security/forgot_password.html b/wqflask/wqflask/templates/new_security/forgot_password.html
index 39e51f96..a981b6bd 100644
--- a/wqflask/wqflask/templates/new_security/forgot_password.html
+++ b/wqflask/wqflask/templates/new_security/forgot_password.html
@@ -2,29 +2,19 @@
{% block title %}Forgot Password{% endblock %}
{% block content %}
- {{ header("Forgot Password", "Easily reset your password.") }}
-
<div class="container">
<div class="page-header">
<h1>Password Reset</h1>
</div>
-
<div class="security_box">
- <h4>Enter your email address</h4>
-
- <h5>And we'll send you a link to reset your password</h5>
-
-
+ <h4>Enter your email address and we'll send you a link to reset your password</h4>
<form class="form-horizontal" action="/n/forgot_password_submit"
method="POST" name="login_user_form">
<fieldset>
-
-
<div class="control-group">
- <label class="control-label" for="email_address">Email Address</label>
<div class="controls">
<input id="email_address" class="focused" name="email_address" type="text" value="">
</div>
@@ -32,7 +22,7 @@
<div class="control-group">
- <div class="controls">
+ <div class="controls" style="margin-top: 10px;">
<input id="next" name="next" type="hidden" value="">
<input class="btn btn-primary" id="submit" name="submit" type="submit" value="Send link">
diff --git a/wqflask/wqflask/templates/new_security/login_user.html b/wqflask/wqflask/templates/new_security/login_user.html
index b9f49a61..80fed82a 100644
--- a/wqflask/wqflask/templates/new_security/login_user.html
+++ b/wqflask/wqflask/templates/new_security/login_user.html
@@ -2,29 +2,15 @@
{% block title %}Register{% endblock %}
{% block content %}
- <div class="container">
+ <div class="container" style="min-width: 1250px;">
{{ flash_me() }}
- <div class="page-header">
- <h1>&nbsp;&nbsp;&nbsp;&nbsp;Login</h1>
- </div>
-
-
- <div class="security_box">
-
- <h4>Don't have an account?</h4>
-
-
- <a href="/n/register" class="btn btn-primary modalize">Create a new account</a>
-
-
- <hr />
-
- <h4>Already have an account? Sign in here.</h4>
-
+ <h4>Already have an account? Sign in here.</h4>
+ {% if redis_is_available: %}
<form class="form-horizontal" action="/n/login" method="POST" name="login_user_form" id="loginUserForm">
+ <input name="anon_id" type="hidden" value="{{ g.user_session.user_id }}">
<fieldset>
<div class="form-group">
<label style="text-align:left;" class="col-xs-1 control-label" for="email_address">Email&nbsp;Address</label>
@@ -42,7 +28,6 @@
</div>
</div>
-
<div class="form-group">
<label class="col-xs-1 control-label" for="remember"></label>
<div style="margin-left:20px;" class="col-xs-4 controls">
@@ -60,7 +45,56 @@
</div>
</fieldset>
+ <div class="security_box">
+
+ <h4>Don't have an account?</h4>
+
+ {% if redis_is_available: %}
+ <a href="/n/register" class="btn btn-primary modalize">Create a new account</a>
+ {% else %}
+ <div class="alert alert-warning">
+ <p>You cannot create an account at this moment.<br />
+ Please try again later.</p>
+ </div>
+ {% endif %}
+
+ <hr />
+ <h4>Login with external services</h4>
+
+ {% if external_login: %}
+ <div>
+ {% if external_login["github"]: %}
+ <a href="{{external_login['github']}}" title="Login with GitHub" class="btn btn-info btn-group">Login with Github</a>
+ {% else %}
+ <p>Github login is not available right now</p>
+ {% endif %}
+
+ {% if external_login["orcid"]: %}
+ <a href="{{external_login['orcid']}}" title="Login with ORCID" class="btn btn-info btn-group">Login with ORCID</a>
+ {% else %}
+ <p>ORCID login is not available right now</p>
+ {% endif %}
+ </div>
+ {% else: %}
+ <div class="alert alert-warning">
+ <p>Sorry, you cannot login with Github or ORCID at this time.</p>
+ </div>
+ {% endif %}
+
</form>
+ {% else: %}
+ <div class="alert alert-warning">
+ <p>You cannot login at this moment using your GeneNetwork account (the authentication service is down).<br />
+ Please try again later.</p>
+ </div>
+ {% endif %}
+ {% if not external_login: %}
+ <hr>
+ <div class="alert alert-warning">
+ Note: it is safe to use GeneNetwork without a login. Login is only required for keeping track of
+ collections and getting access to some types of restricted data.
+ </div>
+ {% endif %}
</div>
</div>
@@ -82,6 +116,8 @@ label.error,div.error{
{% block js %}
<!--<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>-->
+ <!-- Disable plugin, see https://github.com/genenetwork/genenetwork2/issues/310
+
<script type="text/javascript" src="/static/new/packages/ValidationPlugin/dist/jquery.validate.min.js"></script>
<script>
$(document).ready(function () {
@@ -103,6 +139,8 @@ label.error,div.error{
</script>
+ -->
+
{% include "new_security/_scripts.html" %}
{% endblock %}
diff --git a/wqflask/wqflask/templates/new_security/register_user.html b/wqflask/wqflask/templates/new_security/register_user.html
index 998d2a7b..da74090c 100644
--- a/wqflask/wqflask/templates/new_security/register_user.html
+++ b/wqflask/wqflask/templates/new_security/register_user.html
@@ -42,7 +42,7 @@
<div class="control-group">
<label class="control-label" for="email_address">Email Address</label>
<div class="controls">
- <input id="email_address" name="email_address" class="focused" type="text" value="{{values.email_address}}"
+ <input id="email_address" name="email_address" class="focused" type="text" size="50" value="{{values.email_address}}"
data-trigger="change" data-required="true" data-type="email" data-maxlength="50">
</div>
</div>
@@ -50,7 +50,7 @@
<div class="control-group">
<label class="control-label" for="full_name">Full Name</label>
<div class="controls">
- <input id="full_name" name="full_name" type="text" value="{{values.full_name}}"
+ <input id="full_name" name="full_name" type="text" size="50" value="{{values.full_name}}"
data-trigger="change" data-required="true" data-minlength="5" data-maxlength="50">
</div>
</div>
@@ -58,14 +58,14 @@
<div class="control-group">
<label class="control-label" for="organization">Organization</label>
<div class="controls">
- <input id="organization" name="organization" type="text" value="{{values.organization}}" data-minlength="3" data-maxlength="50">
+ <input id="organization" name="organization" type="text" size="50" value="{{values.organization}}" data-minlength="3" data-maxlength="50">
</div>
</div>
<div class="control-group">
<label class="control-label" for="password">Password</label>
<div class="controls">
- <input id="password" name="password" type="password" value=""
+ <input id="password" name="password" type="password" size="50" value=""
data-trigger="change" data-required="true" data-minlength="6">
</div>
</div>
@@ -79,13 +79,13 @@
<div class="control-group">
<label class="control-label" for="password_confirm">Confirm Password</label>
<div class="controls">
- <input id="password" name="password_confirm" type="password" value=""
+ <input id="password" name="password_confirm" type="password" size="50" value=""
data-trigger="change" data-required="true" data-equalto="#password">
</div>
</div>
<div class="control-group">
- <div class="controls"">
+ <div class="controls" style="margin-top: 10px;">
<input class="btn btn-primary" id="submit" name="submit" type="submit" value="Create account">
</div>
</div>
diff --git a/wqflask/wqflask/templates/news.html b/wqflask/wqflask/templates/news.html
index 4f0032b8..1ec302e6 100644
--- a/wqflask/wqflask/templates/news.html
+++ b/wqflask/wqflask/templates/news.html
@@ -5,7 +5,7 @@
{% block content %}
<div class="container">
<h3>{{title}}</h3>
- <table class="table table-hover table-striped" style="width: 600px;">
+ <table class="table" style="width: 600px;">
<tbody>
{% for newsitem in newslist %}
<tr>
diff --git a/wqflask/wqflask/templates/reference.html b/wqflask/wqflask/templates/reference.html
index cc4408e1..d95d22e3 100644
--- a/wqflask/wqflask/templates/reference.html
+++ b/wqflask/wqflask/templates/reference.html
@@ -2,16 +2,7 @@
{% block title %}References{% endblock %}
{% block content %}
-<TABLE cellSpacing=5 cellPadding=4 width="100%" border=0>
- <TBODY>
- <TR>
- <TD>
- <Table width= "100%" cellSpacing=0 cellPadding=5><TR>
- <!-- Body Start from Here -->
-
-<TD vAlign=top width="100%" height=200>
-
-<P class="title">Papers and References to GeneNetwork</P>
+<h2>&nbsp;Papers and References to GeneNetwork</A></h2>
<BLOCKQUOTE>
@@ -23,6 +14,16 @@
<BR> <BR>
<left>
+<a href="#2020">2020</a> |
+<a href="#2019">2019</a> |
+<a href="#2018">2018</a> |
+<a href="#2017">2017</a> |
+<a href="#2016">2016</a> |
+<a href="#2015">2015</a> |
+<a href="#2014">2014</a> |
+<a href="#2013">2013</a> |
+<a href="#2012">2012</a> |
+<a href="#2011">2011</a> |
<a href="#2010">2010</a> |
<a href="#2009">2009</a> |
<a href="#2008">2008</a> |
@@ -32,169 +33,207 @@
<a href="#2004">2004</a> |
<a href="#2003">2003</a> |
</left>
-
</BLOCKQUOTE>
+<DIR>
+ <A HREF="https://scholar.google.com/scholar?as_q=&as_epq=&as_oq=webqtl+%22genenetwork%22&as_eq=&as_occt=any&as_sauthors=&as_publication=&as_ylo=&as_yhi=&btnG=&hl=en&as_sdt=0%2C5"target="_blank" class="fwn">Google Scholar</A> search for <I> "genenetwork" OR "webqtl" </I> generated:
+<OL>
+<LI>1430 hits on 2016/09/08
+<LI>1730 hits on 2017/10/17
+<LI>2020 hits on 2019/05/13)
+</OL>
+
+<A HREF="https://scholar.google.com/scholar?as_q=&as_epq=&as_oq=genenetwork.org&as_eq=&as_occt=any&as_sauthors=&as_publication=&as_ylo=&as_yhi=&btnG=&hl=en&as_sdt=0%2C5"target="_blank" class="fwn">Google Scholar</A> search for <I> "genenetwork.org" </I> generated:
+
+<OL>
+<LI>1030 hits on 2019/05/13
+<LI> 105 hits from 2018/01/01 to 2019/05/13
+</OL>
+
+</DIR>
<BLOCKQUOTE>
<A NAME="New" class="subtitle">Highlighted References</A>
-<BLOCKQUOTE class="fs14">
+<BLOCKQUOTE style="font-size: 14px;">
<B><I>Please send us citations to articles that we may have missed.</I></B>
+
<OL>
+<LI> Mulligan MK, Mozhui K, Prins P, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27933521" target="_blank" class="fwn">2017</A>) GeneNetwork: A Toolbox for Systems Genetics. In <I>Systems Genetics</I>, Methods in Molecular Biology 1488:75-120
+[An updated primer in using GeneNetwork for molecular analysis of mouse and human cohorts.]
+<SMALL><A HREF="/images/upload/Mulligan_How_To_Use_GeneNetwork_2017_v1.pdf" target="_blank" class="fwn">PDF version</A>
+</SMALL>
<BR>
<BR>
-<LI>
-Rietman ML, Sommeijer JP; Neuro-Bsik Mouse Phenomics Consortium, Levelt CN, Heimel JA (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22347157" target="_blank" class="fwn">2012</A>) Candidate genes in ocular dominance plasticity. Front Neurosci 6:11
-<BR><SMALL>
-From the Abstract: Many studies have been devoted to the identification of genes involved in experience-dependent plasticity in the visual cortex. To discover new candidate genes, we have reexamined data from one such study on ocular dominance (OD) plasticity in recombinant inbred BXD mouse strains. We have correlated the level of plasticity with the gene expression data in the neocortex that have become available for these same strains. <A HREF="http://www.frontiersin.org/Journal/DownloadFile.ashx?pdf=1&FileId=%202788&articleId=%2014498&Version=%201&ContentTypeId=21&FileName=%20fnins-06-00011.pdf" target="_blank" class="fwn">PDF version</A>
+<LI> Williams RW, Williams EG (<A HREF="/images/upload/Williams_ResourcesSystemsGenetics_MethodsMolBio_2016.pdf" target="_blank" class="fwn"" target="_blank" class="fwn">2017</A>) Resources for Systems Genetics. In <I>Systems Genetics</I>, Methods in Molecular Biology 1488:3-29.
+[This review is intended to help you when making the hard choices about types of resources to use in system genetic studies. The short answer: embrace diversity in your resources. The computational barriers to joint analysis are now minimal.]
+<SMALL><A HREF="/images/upload/Williams_ResourcesSystemsGenetics_MethodsMolBio_2016.pdf" target="_blank" class="fwn">PDF version</A>
</SMALL>
+<BR>
+<BR>
+<LI> Williams RW (<A HREF="http://journal.frontiersin.org/article/10.3389/neuro.01.016.2009/full" target="_blank" class="fwn">2009</A>) Herding cats: the sociology of data integration. Frontier in Neuroscience 3(2):154-6.
+[An short but amusing commentary on predictive (someday perhaps even precision) medicine and how to get there using genetic reference populations such as the BXD and Collaborative Cross families.]
+<SMALL><A HREF="http://journal.frontiersin.org/article/10.3389/neuro.01.016.2009/full" target="_blank" class="fwn">PDF version</A>
+</SMALL>
<BR>
<BR>
<LI>
-Moscou MJ, Lauter N, Steffenson B, Wise RP (<A HREF="https://ncbi.nlm.nih.gov/pubmed/21829384" target="_blank" class="fwn">2011</A>) Quantitative and qualitative stem rust resistance factors in barley are associated with transcriptional suppression of defense regulons. PLoS Genet 7:e1002208
-<BR><A HREF="http://www.plosgenetics.org/article/info%3Adoi%2F10.1371%2Fjournal.pgen.1002208" target="_blank" class="fwn">PDF version</A>
+Pinelli M, Carissimo A, Cutillo L, Lai CH, Mutarelli M, Moretti MN, Singh MV, Karali M, Carrella D, Pizzo M, Russo F, Ferrari S, Ponzin D, Angelini C, Banfi S, di Bernardo D (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27235414" target="_blank" class="fwn">2016</A>) An atlas of gene expression and gene co-regulation in the human retina.Nucleic Acids Res. 2016 Jul 8;44(12):5773-84
+<SMALL><A HREF="http://retina.tigem.it" target="_blank" class="fwn">RETINA database</A>, and see the <A HREF="/images/upload/Pinelli_diBerardo_2016_AtlasHumanRetina.pdf" target="_blank" class="fwn">PDF</A>. These data are now in GeneNetwork (Species = Human, Group = Retina).
+</SMALL>
<BR>
<BR>
+
<LI>
-Krebs J, Römer B, Overall RW, Fabel K, Babu H, Brandt MD, Williams RW, Jessberger S, Kempermann G (<A HREF="https://ncbi.nlm.nih.gov/pubmed/21960957" target="_blank" class="fwn">2011</A>) Adult hippocampal neurogenesis and plasticity in the infrapyramidal bundle of the mossy fiber projection: II. Genetic covariation and identification of Nos1 as linking candidate gene. Front Neurosci 5:106
-<BR><SMALL>
-This study uses QTL mapping methods to define candidate genes, including <I>NOS1</I>, that may modulate both adult neurogenesis in the hippocampus and the volume of the infrapyramidal mossy fiber projection to CA3. The study also tests whether the genetic basis of variation in adult neurogenesis is linked to variation in the size of the mossy fiber projection to basal dendrites of CA3 pyramidal cells. <A HREF="http://www.frontiersin.org/Journal/DownloadFile.ashx?pdf=1&FileId=%202584&articleId=%2011569&Version=%201&ContentTypeId=21&FileName=%20fnins-05-00106.pdf" target="_blank" class="fwn">PDF version</A>
+Williams EG, Wu Y, Pooja J, Dubuis S, Blattmann P, Argmann CA, Houten SM, Amariuta T, Wolski W, Zamboni N, Aebersold R, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27284200" target="_blank" class="fwn">2016</A>) Systems proteomics and trans-omic integration illuminate new mechanisms in mitochondrial function. Science 352(6291):aad0189
+<SMALL><A HREF="http://science.sciencemag.org/content/352/6291/aad0189.full" target="_blank" class="fwn">HTML version</A>, <A HREF="/images/upload/WilliamsEG_Auwerx_Systems_Science-2016.pdf " target="_blank" class="fwn">PDF</A>
</SMALL>
-
<BR>
<BR>
-<LI>
-Alberts R, Chen H, Pommerenke C, Smit AB, Spijker S, Williams RW, Geffers R, Bruder D, Schughart K (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22182475" target="_blank" class="fwn">2011</A>) Expression QTL mapping in regulatory and helper T cells from the BXD family of strains reveals novel cell-specific genes, gene-gene interactions and candidate genes for auto-immune disease. BMC Genomics 12:610.
-<BR><SMALL>
-The first genetic analysis, as well as comparative analysis, of variation in gene expression in T cell subclasses. Please reference this paper when making use of the BXD T help and T regulatory cell data sets generated by Alberts, Schughart and colleagues.
+
+<LI>
+Sloan Z, Arends D, Broman KW, Centeno A, Furlotte N, Nijveen H, Yan L, Zhou X, Williams RW, Prins P (2016) GenetNetwork: framework for web-based genetics. The Journal of Open Source Software http://joss.theoj.org/papers/10.21105/joss.00025 (http://dx.doi.org/10.21105/joss.00025)
+<SMALL><A HREF="http://joss.theoj.org/papers/10.21105/joss.00025" target="_blank" class="fwn">HTML version</A>
</SMALL>
+<BR>
+<BR>
+<LI>Alam G, Miller DB, O'Callaghan JP, Lu L, Williams RW, Jones BC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27182044" target="_blank" class="fwn">2016</A>) MPTP neurotoxicity is highly concordant between the sexes among BXD recombinant inbred mouse strains. Neurotoxicology in press
+<SMALL><A HREF="/images/upload/Alam_Jones_MPTP_Neurotox_2016.pdf" target="_blank" class="fwn">PDF version</A>
+</SMALL>
<BR>
<BR>
-<LI>
-Yamamoto H, Williams EG, Mouchiroud L, Cantó C, Fan W, Downes M, Héligon C, Barish GD, Desvergne B, Evans RM, Schoonjans K, Auwerx J (<A HREF="/images/upload/Yamamoto_EWilliams_Auwerx_2011.pdf" target="_blank" class="fwn">2011</A>) NCoR1 is a conserved physiological modulator of muscle mass and oxidative function. Cell 147:827-39
+<LI>Merkwirth C, Jovaisaite V, Durieux J, Matilainen O, Jordan SD, Quiros PM, Steffen KK, Williams EG, Mouchiroud L, Tronnes SU, Murillo V, Wolff SC, Shaw RJ, Auwerx J, Dillin A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27133168" target="_blank" class="fwn">2016</A>) Two conserved histone demethylases regulate mitochondrial stress-induced longevity. Cell 165:1209-1223
+<BR>
+<BR>
+
-<BR><SMALL>
-A high impact article on the role of the <I>Ncor1</I> gene and a high endurance mouse model (see <A HREF="http://www.medkb.com/Uwe/Forum.aspx/nutrition/13022/NCoR1-knockout-for-big-muscle" target="_blank" class="fwn">MedKB</A>). The authors made use of expression data sets in GeneNetwork (see Fig 2 and original data from BXD Lung by Alberts et al. (<A href="http://www.biomedcentral.com/1471-2105/11/516" target="_blank" class="fwn">2011</A>), and BH/HB F2 muscle by Lusis and colleagues).
+<LI> Wang X, Pandey AK, Mulligan MK, Williams EG, Mozhui K, Li Z, Jovaisaite V, Quarles LD, Xiao Z, Huang J, Capra JA, Chen Z, Taylor WL, Bastarache L, Niu X, Pollard KS, Ciobanu DC, Reznik AO, Tishkov AV, Zhulin IB, Peng J, Nelson SF, Denny JC, Auwerx J, Lu L, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26833085" target="_blank" class="fwn">2016</A>). Joint mouse-human phenome-wide association to test gene function and disease risk. Nature Communications 7:10464
+[Best reference on the BXD family of strains and the wide range of phenotypes that have been generated over the past 40 years.]
+
+<SMALL><A HREF="/images/upload/Wang_PheWas_NatComm_2016.pdf" target="_blank" class="fwn">PDF version</A> and the
+
+<A HREF="/images/upload/Wang_SupplementalTables_NatComm_2016.xlsx" target="_blank" class="fwn">Supplementary Tables in one Excel file</A>
</SMALL>
<BR>
<BR>
+
-<LI>
-Suwanwela J, Farber CR, Haung B, Song B, Pan C, Lyon KM, Lusis AJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20954177" target="_blank" class="fwn">2011</a>) Systems genetics analysis of mouse chondrocyte differentiation. Journal of Bone and Mineral Research 26:74-760
-<A HREF="/images/upload/Suwanwela_Lusis_2011.pdf" target="_blank" class="fwn"><I>PDF</I> </A> version
+<LI> Xue Y, Li J, Yan L, Lu L, Liao FF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26092713" target="_blank" class="fwn">2015</A>) Genetic variability to diet-induced hippocampal dysfunction in BXD recombinant inbred (RI) mouse strains. Behav Brain Res 292:83-94
+<BR>
+<BR>
-<BR><SMALL>
+<LI>Chaum E, Winborn CS, Bhattacharya S (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25963977" target="_blank" class="fwn">2015</A>) Multilayered genetic and omics dissection of mitochondrial activity in a mouse reference population. Mamm Genome 26:210-221
+<BR>
+<BR>
-The first analysis of variation in gene expression in cartilage of both the BXD and BXH mouse strain families. These data are now part of GeneNetwork: see <A HREF="http://www.genenetwork.org/dbdoc/UCLA_BXDBXH_CARTILAGE_V2.html" target="_blank" class="fwn" >UCLA BXD and BXH Cartilage Illumina WG-6 v2</A>.
-</SMALL>
+<LI>Cheng Q, Seltzer Z, Sima C, Lakschevitz FS, Glogauer M. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25942439" target="_blank" class="fwn">2015</A>) Quantitative Trait Loci and Candidate Genes for Neutrophil Recruitment in Sterile Inflammation Mapped in AXB-BXA Recombinant Inbred Mice. PLoS One 10:e0124117
<BR>
<BR>
+<LI>Scott RE, Ghule PN, Stein JL, Stein GS (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25215496" target="_blank" class="fwn">2015</A>) Cell cycle gene expression networks discovered using systems biology: Significance in carcinogenesis. J Cell Physiol 230:2533-42
+<BR>
+<BR>
-<LI>
-Jansen R, Timmerman J, Loos M, Spijker S, van Ooyen A, Brussaard AB, Mansvelder HD, The Neuro-Bsik Mouse Phenomics Consortium; Smit AB, de Gunst M, Linkenhaer-Hansen K (<a href="http://www.ncbi.nlm.nih.gov/pubmed/22066001" target="_blank" class="fwn">2011</a>) Novel candidate genes associated with hippocampal oscillations. PLoS One 6: e26586.
-<A HREF="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0026586" target="_blank" class="fwn"><I>HTML</I></A> and <A HREF="http://www.plosone.org/article/fetchObjectAttachment.action;jsessionid=A7B78346B150E8D613FCBE4DEFBD7155?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0026586&representation=PDF" target="_blank" class="fwn"><I>PDF</I></A> versions
+<LI> Williams EG, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26140590" target="_blank" class="fwn">2015</A>) The convergence of systems and reductionist approaches in complex trait analysis. Cell 162:23-32.
<BR>
<BR>
-<LI>
-Jackson KJ, Chen X, Miles MF, Harenza J, Damaj MI (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21796100" target="_blank" class="fwn">2011</a>) The neuropeptide galanin and variants in the <I>GalR1</I> gene are associated with nicotine dependence. Neuropsychopharmacology 36:2339-2348.
-<A HREF="/images/upload/Jackson_2011_Neuropsypharm_GalaninNicotine.pdf" target="_blank" class="fwn"><I>PDF</I> </A> version
+<LI>Wu Y, Williams EG, Dubuis S, Mottis A, Jovaisaite V, Houten SM, Argmann CA, Faridi P, Wolski W, Kutalik Z, Zamboni N, Auwerx J, Aebersold R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25215496" target="_blank" class="fwn">2014</A>) Multilayered genetic and omics dissection of mitochondrial activity in a mouse reference population. Cell 158:1415-1430
<BR>
<BR>
<LI>
-Krebs J, Römer D, Overall RW, Fabel K. Babu H, Brandt M, Williams RW, Jessberger S, Kempermann G (2011) Adult hippocampal neurogenesis and plasticity in the infrapyramidal bundle of the mossy fiber projection: II. Genetic covariance and identification of Nos1 as a linking candidate gene. Frontiers in Neuroscience 5:106.
-<A HREF="http://www.frontiersin.org/Journal/Abstract.aspx?s=748&name=neurogenesis&ART_DOI=10.3389/fnins.2011.00106" target="_blank" class="fwn"><I>PDF</I> </A> version
+Hayes SK, Hager R, Grencis RK (2014) Sex-dependent genetics effects on immune responses to parasitic nematodes. BMC Genomics 15:193
<BR>
<BR>
-<LI>
-Mozhui K, Wang X, Chen J, Mulligan MK, Li Z, Ingles J, Chen X, Lu L and Williams RW (2011) Genetic regulation of Nrxn1 expression: an integrative cross-species analysis of schizophrenia candidate genes. Transl Psychiatry 1: e25; doi:10.1038/tp.2011.24.
-<A HREF="http://www.nature.com/tp/journal/v1/n7/pdf/tp201124a.pdf" target="_blank" class="fwn"><I>PDF</I> </A> version
+<LI>Harenza JL, Muldoon PP, De Biasi M, Damaj MI, Miles MF (2014) Genetic variation within the Chrna7 gene modulates nicotine reward-like phenotypes in mice. Genes Brain Behav 13:213-225
<BR>
<BR>
<LI>
-Freeman NE, Templeton JP, Orr WE, Lu L, Williams RW, Geisert EE (2011) Genetic networks in the mouse retina: Growth Associated Protein 43 and Phosphate Tensin Homology network. Molecular Vision 17:1355-1372.
-<A HREF="http://www.molvis.org/molvis/v17/a153/" target="_blank" class="fwn"><I>Full Text HTML</I> </A> and <A HREF="http://www.molvis.org/molvis/v17/a153/mv-v17-a153-freeman.pdf" target="_blank" class="fwn"><I>PDF</I> </A> versions
-<BR><SMALL>
-
-The first expression genetic analysis of the BXD mouse retina based on a total of 80 strains of mice: The <A HREF="http://www.genenetwork.org/dbdoc/Illum_Retina_BXD_RankInv0410.html" target="_blank" class="fwn" >HEI Retina Illumina V6.2 (April 2010) RankInv</A> database in GeneNetwork. This is a companion study to Geisert and colleagues (2009), but now instead of an analysis of the entire eye, data were generated exclusively for the retina.
-</SMALL>
+Ye R, Carneiro AM, Airey D, Sanders-Bush E, Williams RW, Lu L, Wang J, Zhang B, Blakely RD (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24102824" target="_blank" class="fwn">2014</A>) Evaluation of heritable determinants of blood and brain serotonin homeostasis using recombinant inbred mice. Genes Brain Behav. 13:247-260
<BR>
<BR>
-
<LI>
-Di Curzio DL, Goldowitz D (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21347846" target="_blank" class="fwn">2011</a>) The genetic basis of adrenal gland weight and structure in BXD recombinant inbred mice. Mammalian Genome 22:209–234 <A href="/images/upload/DiCurzio_Goldowitz-2011_BXDAdrenals.pdf" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A>
-
-<BR><SMALL>
-The ultimate histogenetics paper on the adrenal gland of mice. A very high level of variation was pared into a set of strong QTLs using 64 of the BXD strains. Precision of most loci is under +/- 2.5 Mb.
-</SMALL>
+Houtkooper RH, Mouchiroud L, Ryu D, Moullan N, Katsyuba E, Knott G, Williams RW, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23698443" target="_blank" class="fwn">2013</A>) Mitonuclear protein imbalance as a conserved longevity mechanism. Nature 497:451-457 <A HREF="/images/upload/Houtkooper_Williams_Auwerx_Nature_2013.pdf" target="_blank" class="fwn">PDF version</A>
<BR>
<BR>
-<LI>
-Porcu P, O'Buckley TK, Song SC, Harenza JL, Lu L, Wang X, Williams RW, Miles MF, Morrow AL (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21494628" class="fwn" >2010</a>) Genetic analysis of the neurosteroid deoxycorticosterone and its relation to alcohol phenotypes: Identification of QTLs and downstream gene regulation. PLoS One 6:e18405. <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0018405" target="_blank" class="fwn" ><I>Full Text HTML</I> </A> and <A href="/images/upload/Porcu_Morrow_2011.pdf" target="_blank" class="fwn" ><I>PDF </I> </A> versions
+</OL>
+
+</Blockquote>
-<BR><SMALL>
-The first neurogenetic study of deoxycorticosterone, a neuroactive steroid that has a key role in stress biology. Porcu and colleagues detected strong QTLs on Chr 4 and 14 for deoxycorticosterone levels in the brain and circulation.
-</SMALL>
-<BR>
-<BR>
-<LI>
-Alberts R, Schughart K (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20950438" target="_blank" class="fwn" >2010</a>) QTLminer: identifying genes regulating quantitative traits.<A href="http://www.biomedcentral.com/1471-2105/11/516" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A>
-<BR><SMALL>
-Innovative new software to help analyze QTL intervals that is currently available at http://genenetwork.helmholtz-hzi.de/ under the Search menu.
-</SMALL>
-<BR>
-<BR>
-<LI>
-Lynch RM, Naswa S, Rogers Jr GL, Kanla SA, Das S, Chesler EJ, Saxton AM, Langston MA, Voy, BH (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20179155" target="_blank" class="fwn" >2010</a>) Identifying genetic loci and spleen gene coexpression networks underlying immunophenotypes in the BXD recombinant inbred mice. Physiological Genomics 41: 244-253 <A href="/images/upload/BXD_immunophenotypes_2010.pdf" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A>
-<BR><SMALL>
-Please cite this publication if you make use of the mouse BXD strain UTK spleen expression databases generated by Voy and colleagues.
-</SMALL>
-<BR>
-<BR>
-<LI>
-Gerrits A, Li Y, Tesson BM, Bystrykh LV, Weersing E, Ausema A, Dontje B, Wang X, Breitling R, Jansen RC, de Haan G (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19834560" target="_blank" class="fwn" >2009</a>) Expression quantitative trait loci are highly sensitive to cellular differentiation state. PLoS Genetics 5: e1000692 <A href="http://www.plosgenetics.org/article/info%3Adoi%2F10.1371%2Fjournal.pgen.1000692" target="_blank" class="fwn" ><I>Full Text HTML version</I> and </A>
-<A href="http://www.plosgenetics.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.pgen.1000692&representation=PDF" target="_blank" class="fwn" ><I>PDF Version</I></A>
+<BLOCKQUOTE style="font-size: 14px;">
+ <A NAME="Key" class="subtitle">Key References</A>
+<BLOCKQUOTE >
+
+<P>The first section lists key technical papers that are appropriate references when citing GeneNetwork and WebQTL. The second section lists publications and other resources that have made use of GeneNetwork.<P>
-<BR><SMALL>
-Please cite this publication if you make use of any of the hematopoietic stem cell-associated databases for the BXD strains generated by Gerald de Haan and colleagues.
+</Blockquote>
+<OL>
+
+
+<LI> Mulligan MK, Mozhui K, Prins P, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26092713" target="_blank" class="fwn">2016</A>) GeneNetwork – A toolbox for systems genetics. In <I>Systems Genetics</I>, Methods in Molecular Biology; Schughart K, Williams RW eds.; Humana Press, in press
+[This is a currently the most comprehensive protocol and guide (20 Mb) for GeneNetwork.]
+<SMALL><A HREF="/images/upload/Mulligan_How_To_Use_GeneNetwork_2016_v1.pdf" target="_blank" class="fwn">PDF version</A></SMALL>
+
+
+<LI>
+Williams RW, Mulligan MK (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23195314" target="_blank" class="fwn">2012</A>) Genetic and molecular network analysis of behavior. Int Rev Neurobiol. 104:135-57. [Explains the use of GeneNetwork in behavioral neurogenetics]
+<SMALL><A HREF="/images/upload/Williams_Mulligan_Bioinformatics of Brain Short 2012.pdf" target="_blank" class="fwn">PDF version</A>
</SMALL>
-<BR>
-<BR>
+<LI> Williams EG, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26140590" target="_blank" class="fwn">2015</A>) The convergence of systems and reductionist approaches in complex trait analysis. Cell 162:23-32. [Research into the genetic and environmental factors behind complex trait variation has traditionally been segregated into distinct scientific camps. The reductionist approach aims to decrypt phenotypic variability bit by bit, founded on the underlying hypothesis that genome-to-phenome relations are largely constructed from the additive effects of their molecular players. In contrast, the systems approach aims to examine large-scale interactions of many components simultaneously, on the premise that interactions in gene networks can be both linear and non-linear. Both approaches are complementary, and they are becoming increasingly intertwined due to developments in gene editing tools, omics technologies, and population resources. Together, these strategies are beginning to drive the next era in complex trait research, paving the way to improve agriculture and toward more personalized medicine.] <SMALL><A HREF="/images/upload/WilliamsEG_Auwerx_Cell2015.pdf" target="_blank" class="fwn">PDF version</A>
+</SMALL>
+
+<LI>
+Wang J, Williams RW, Manly KF (<a href="http://journals.humanapress.com/ArticleDetail.pasp?issn=1539-2791&acode=NI:1:4:299" target="_blank" class="fwn">2003</a>) WebQTL: Web-based complex trait analysis. Neuroinformatics 1: 299-308 <A href="http://www.genenetwork.org/pdf/webqtl.pdf" class="fwn"><I>Full Text PDF Version</I></A>. [A good technical reference to WebQTL and GeneNetwork]
+<LI>
+Williams RW, Gu J, Qi S, Lu L (<a href="http://journals.humanapress.com/ArticleDetail.pasp?issn=1539-2791&acode=NI:1:4:299" target="_blank" class="fwn">2003</a>) The genetic structure of recombinant inbred mice: high-resolution consensus maps for complex trait analysis. Genome Biology 2(11)<A href="http://genomebiology.com/content/2/11/RESEARCH0046" class="fwn"><I>Full Text Version</I></A>. [A detailed analysis of the genetics of recombinant inbred strains]
+<LI>
+Chesler EJ, Wang J, Lu L, Qu Y, Manly KF, Williams RW (<a href="http://journals.humanapress.com/ArticleDetail.pasp?issn=1539-2791&acode=NI:1:4:343" target="_blank" class="fwn">2003</a>) Genetic correlates of gene expression in recombinant inbred strains: a relational model to explore for neurobehavioral phenotypes. Neuroinformatics 1: 343-357. <A href="http://www.nervenet.org/pdf/Genetic_Correlation_webQTL.pdf" class="fwn"><I>Full Text PDF Version</I></A>. [Best reference regarding interpretation of genetic correlations.]
+<LI>
+Chesler EJ, Lu L, Wang J, Williams RW, Manly KF (<a href="http://www.nature.com/cgi-taf/DynaPage.taf?file=/neuro/journal/v7/n5/full/nn0504-485.html" target="_blank" class="fwn">2004</a>) WebQTL: rapid exploratory analysis of gene expression and genetic networks for brain and behavior. Nature Neuroscience 7: 485-486. <A href="http://www.genenetwork.org/pdf/nn0504-485.pdf" class="fwn"><I>Full Text PDF Version</I></A> [A short review]
+<LI>
+Chesler EJ, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15474587" target="_blank" class="fwn">2004</a>) Brain gene expression: genomics and genetics. International Review of Neurobiology 60:59-95. (<I>DNA Arrays in Neurobiology</I>, edited by MF Miles, Elsevier, Amsterdam). [A longer discussion, both statistical and conceptual, on the genetic analysis of gene expression and relations to higher order behavioral phenotypes]</A>
+<LI>
+Bystrykh L, Weersing E, Dontje B, Sutton S, Pletcher MT, Wiltshire T, Su AI, Vellenga E, Wang J, Manly KF, Lu L, Chesler EJ, Alberts R, Jansen RC, Williams RW, Cooke M, de Haan G (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15711547" target="_blank" class="fwn">2005</A>) Uncovering regulatory pathways affecting hematopoietic stem cell function using "genetical genomics." Nature Genetics 37:225-232. [Please cite this article if you have used the GNF-Groningen hematopoietic stem cell data set.]
+<LI>
+Chesler EJ, Lu L, Shou S, Qu Y, Gu J, Wang J, Hsu HC, Mountz JD, Baldwin N, Langston MA, Threadgill DW, Manly KF, Williams RW (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15711545" target="_blank" class="fwn">2005</A>) Complex trait analysis of gene expression uncovers polygenic and pleiotropic networks that modulate nervous system function. Nature Genetics 37: 233-242. [Please cite this article if you have used one of the UTHSC brain data sets.]
+<LI>
+Damerval C, Maurice A, Josse JM, de Vienne D (<A HREF="http://www.genetics.org/cgi/content/abstract/137/1/289" class="fwn" target="_blank">1994</A>) Quantitative trait loci underlying gene product variation: a novel perspective for analyzing regulation of genome expression. Genetics 137: 289-301 <A href="http://www.genetics.org/cgi/reprint/137/1/289" class="fwn" target="_blank"><I>Full Text PDF Version</I></A> [The first published paper on system genetics. Impressive; before its time.]
+
+<Blockquote><SMALL>[Damerval et al., 1994 abstract] A methodology to dissect the genetic architecture of quantitative variation of numerous gene products simultaneously is proposed. For each individual of a segregating progeny, proteins extracted from a given organ are separated using two-dimensional electrophoresis, and their amounts are estimated with a computer-assisted system for spot quantification. Provided a complete genetic map is available, statistical procedures allow determination of the number, effects and chromosomal locations of factors controlling the amounts of individual proteins. This approach was applied to anonymous proteins of etiolated coleoptiles of maize, in an F(2) progeny between two distant lines. The genetic map included both restriction fragment length polymorphism and protein markers. Minimum estimates of one to five unlinked regulatory factors were found for 42 of the 72 proteins analyzed, with a large diversity of effects. Dominance and epistasis interactions were involved in the control of 38% and 14% of the 72 proteins, respectively. Such a methodology might help understanding the architecture of regulatory networks and the possible adaptive or phenotypic significance of the polymorphism of the genes involved.
+</SMALL></Blockquote>
<LI>
Grisham W, Schottler NA, Valli-Marill J, Beck L, Beatty J (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20516355" target="_blank" class="fwn" >2010</a>) Teaching bioinformatics and neuroinformatics by using free web-based tools. CBE--Life Sciences Education 9: 98-107 <A href="http://www.lifescied.org/content/9/2/98.full.pdf+html" target="_blank" class="fwn" ><I>Full Text PDF Version</I></A>
@@ -206,188 +245,186 @@ Grisham W, Schottler NA, Valli-Marill J, Beck L, Beatty J (<a href="http://www.n
<BR><A HREF="http://www.youtube.com/watch?v=caC0YGhDoo8" target="_blank" class="fwn" >Part 3</A>
<BR><A HREF="http://www.youtube.com/watch?v=eTzIcM3aspM" target="_blank" class="fwn">Part 4</A>
<BR><A HREF="http://www.youtube.com/watch?v=Dnq7w4RIAXI" target="_blank" class="fwn">Part 5</A>
-
-
-</SMALL>
-<BR>
-<BR>
-
-<LI>
-Li D, Mulligan MK, Wang X, Miles MF, Lu L, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20808911" target="_blank" class="fwn">2010</a>) A transposon in <I>Comt</I> generates mRNA variants and causes widespread expression and behavioral differences among mice. PLoS One. 2010 Aug 17;5(8):e12181. <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0012181" target="_blank" class="fwn"><I>Full Text HTML and PDF Versions</I></A>
-<BR><SMALL>
-One of the first examples of a sequence variant, in this case a transponson inserted in the 3' UTR of Comt,, that generates both a strong expression QTL and that generates downstream changes in other genes and higher order phenotypes.
</SMALL>
<BR>
<BR>
-
<LI>
Grisham W (<a href="http://www.funjournal.org/downloads/200981/grisham81.pdf" target="_blank" class="fwn">2009</a>) Modular digitial course in undergraduate neuroscience education (MDCUNE): A website offering free digital tools for neuroscience educators. Journal of Undergraduate Neuroscience Education 8:A26-A31 <A href="http://www.funjournal.org/downloads/200981/grisham81.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
<BR><SMALL>
An excellent example of how resources such as GeneNetwork and the Mouse Brain Library can be used in class room labs.
</SMALL>
-<BR>
-<BR>
-
<LI>
-Webster JA, Gibbs JR, Clarke J, Ray M, Zhang W, Holmans P, Rohrer K, Zhao A, Marlowe L, Kaleem M, McCorquodale DS 3rd, Cuello C, Leung D, Bryden L, Nath P, Zismann VL, Joshipura K, Huentelman MJ, Hu-Lince D, Coon KD, Craig DW, Pearson JV; NACC-Neuropathology Group, Heward CB, Reiman EM, Stephan D, Hardy J, Myers AJ (2009) Genetic control of human brain transcript expression in Alzheimer disease. Am J Hum Genet 84:445-58.
-<BR><SMALL>
-One of the first and certainly best human brain eQTL studies. The focus in on late onset Alzheimer's disease, but the data are split between normal and AD cases. All of these data are in GeneNetwork. The cases can be "decoded" by their identifier numbers (see INFO files).
-</SMALL>
-<BR>
-<BR>
-
+H&uuml;bner N, Wallace CA, Zimdahl H, Petretto E, Schulz H, Maciver F, Mueller M, Hummel O, Monti J, Zidek V, Musilova A, Kren V, Causton H, Game L, Born G, Schmidt S, Muller A, Cook SA, Kurtz TW, Whittaker J, Pravenec M, Aitman TJ (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15711544" target="_blank" class="fwn">2005</A>) Integrated transcriptional profiling and linkage analysis for identification of genes underlying disease. Nature Genetics 37: 243-253. [Please cite this article if you have used one of the rat HXB kidney or peritoneal fat data sets.]
<LI>
-Gatti DM, Harrill AH, Wright FA, Threadgill DW, Rusyn I (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19609828" target="_blank" class="fwn">2009</a>) Replication and narrowing of gene expression quantitative trait loci using inbred mice. Mamm Genome 20:437-46.
-<BR><SMALL>
-A extremely interesting comparison of using and combining data sets for common inbred strains (so-called Mouse Diversity Panels) with data sets for recombinant inbred strains such as the BXD set.
-</SMALL>
-<BR>
-<BR>
-
+Kang HM, Ye C, Eskin E (2008) Accurate discovery of expression quantitative trait loci under confounding from spurious and genuine regulatory hotspots. Genetics 180:1909-1925
+<A href="http://www.genetics.org/cgi/content/abstract/genetics.108.094201v1" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>. [An important method that can greatly improve the ability to resolve true genetic interactions in expression genetic studies.]
<LI>
-Ruden DM, Chen L, Possidente D, Possidente B, Rasouli P, Wang L, Lu X, Garfinkel MD, Hirsch HV, Page GP (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19737576" target="_blank" class="fwn">2009</a>) Genetical toxicogenomics in Drosophila identifies master-modulatory loci that are regulated by developmental exposure to lead. Neurotoxicology 30:898-914
-<BR><SMALL>
-A landmark study in toxicogenomics using a drosophila genetic reference populations.
-</SMALL>
-<BR>
-<BR>
+Ljungberg K, Holmgren S, Carlborg O (<A HREF="http://bioinformatics.oupjournals.org/cgi/content/abstract/bth175?ijkey=21Pp0pgOuBL6Q&keytype=ref" class="fwn" target="_blank">2004</A>) Simultaneous search for multiple QTL using the global optimization algorithm DIRECT. Bioinformatics 20:1887-1895. [Please review and cite this article if you have exploited the DIRECT pair-scan tool and output graphs in WebQTL.]
+<LI>
+Manly KF, Wang J, Williams RW (<A HREF="http://genomebiology.com/2005/6/3/R27" class="fwn" target="_blank">2005</A>) Weighting by heritability for detection of quantitative trait loci with microarray estimates of gene expression. Genome Biology 6: R27 <A href="http://genomebiology.com/2005/6/3/R27" class="fwn" target="_blank"><I>Full Text HTML and PDF Version</I></A>. [Please cite this article if you have used one of the HWT (Heritability Weighted Transform) data sets.]
+<LI>
+Manly K, Williams RW (2001) WEBQTL—WWW service for mapping quantitative trait loci. International Mouse Genome Conference 15: 74. [First published abstract on WebQTL, presented Oct 2001, Edinburgh; also see <A HREF="http://www.complextrait.org/archive/2002/HTML/manly.html" class="fwn" target="_blank">2002</A> CTC abstract]
+<LI>
+Taylor BA, Heiniger HJ, Meier H (<A HREf="http://www.ncbi.nlm.nih.gov/pubmed/4719448">1973</A>) Genetic analysis of resistance to cadmium-induced teticular damage in mice. Proc Soc Exp Biol Med 143:629-33 [This is one of the first full paper on the use of recombinant inbred strains in biomedical research and the first paper to use BXD lines of mice. The <I>cdm</I> locus that they mapped to distal Chr 3 was subsequently defined as the <I>Slc38a8</I> metal testicular metal ion transporter. <A HREF="/images/upload/Taylor_1973.pdf"> Full text</A>
+<LI>
+Webster JA, Gibbs JR, Clarke J, Ray M, Zhang W, Holmans P, Rohrer K, Zhao A, Marlowe L, Kaleem M, McCorquodale DS 3rd, Cuello C, Leung D, Bryden L, Nath P, Zismann VL, Joshipura K, Huentelman MJ, Hu-Lince D, Coon KD, Craig DW, Pearson JV; NACC-Neuropathology Group, Heward CB, Reiman EM, Stephan D, Hardy J, Myers AJ (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed/19361613" class="fwn" target="_blank">2009</A>) Genetic control of human brain transcript expression in Alzheimer disease. Am J Hum Genet 84:445-58. [Please review and cite this article if you have used the HUMAN data set by Myers and colleagues in GeneNetwork.]
+<LI>
+Williams RW, Shou S, Lu L, Wang J, Manly KF, Hsu HC, Mountz J, Threadgill DW (<A HREF="http://www.complextrait.org/ctc2002/williams.html" class="fwn" target="_blank">2002</A>) Genomic analysis of transcriptional networks: combining microarrays with complex trait analysis. Complex Trait Consortium 1 [One of the first published abstracts on system genetic analysis of microarray data sets, presented May 2002.]
+<LI>
+Zhang B, Schmoyer D, Kirov S, Snoddy J (<a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=14975175" target="_blank" class="fwn">2004</a>) GOTree Machine (GOTM): a web-based platform for interpreting sets of interesting genes using Gene Ontology hierarchies. BMC Bioinformatics 5:16. [This reference describes GOTM--the predecessor of WebGestalt that is now used to analyze sets of covarying transcripts.]
+</OL>
+</Blockquote>
-<LI>
-Philip VM, Duvvuru S, Gomero B, Ansah TA, Blaha CD, Cook MN, Hamre KM, Laviviere WR, Matthews DB, Mittleman G, Goldowitz D, Chesler EJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19958391" target="_blank" class="fwn">2010</a>) High-throughput behavioral phenotyping in the expanded panel of BXD recombinant inbred strains. Genes, Brain and Behavior 8:129-159 PMID: 19958391 <A href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2855868/" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>
-<BR><SMALL>
-A monstrously large (33 pages) and impressive study of many behaviors in more than 60 BXD strains. The design and execution is exemplary; the diversity of data types is unprecedented; the documentation is great. This paper will be a well-spring for a host of other studies on the genetics and epigenetics of behavioral variation in the BXDs for years to come. Over 700 traits (usually in trios of male, female, and combined data) were entered in GeneNetwork. You can read the paper and work with the phenotypes. You can also combine these phenotypes with all of the existing expression data for the BXD strains.
-</SMALL>
-<BR>
-<BR>
+<BLOCKQUOTE style="font-size: 14px;">
+ <A NAME="2019" class="subtitle"">GeneNetwork (2019) </A> (not complete)
+<BLOCKQUOTE>
+</Blockquote>
+<OL>
<LI>
-Wu S, Lusis AJ, Drake TA (<a href="http://www.jlr.org/cgi/reprint/R800067-JLR200v1.pdf" target="_blank" class="fwn">2009</a>) A systems-based framework for understanding complex metabolic and cardiovascular disorders. J Lipid Res 50 Suppl:S358-63 <A href="http://www.jlr.org/cgi/reprint/R800067-JLR200v1.pdf" target="_blank" class="fwn"><I>Full Text PDF</I></A>
-<BR>
-<BR>
+Théberge ET, Baker JA, Dubose C, Boyle JK, Balce K, Goldowitz D, Hamre KM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/30589433" target="_blank" class="fwn">2019</A>) Genetic influences on the amount of cell death in the neural tube of BXD mice exposed to acute ethanol at midgestation. Alcohol Clin Exp Res 43:439-452
+<LI>
+Roy S, Zaman KI, Williams RW, Homayouni R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/30871457" target="_blank" class="fwn">2019</A>) Evaluation of Sirtuin-3 probe quality and co-expressed genes using literature cohesion. BMC Bioinformatics 20(Suppl 2):104
-<LI>
-Overall RW, Kempermann G, Peirce J, Lu L, Goldowitz D, Gage FH, Goodwin S, Smit AB, Airey DC, Rosen GD, Schalkwyk LC, Sutter TR, Nowakowski RS, Whatley S, Williams RW (<a href="http://frontiersin.org/neurogenomics/paper/pending/0/815/" target="_blank" class="fwn">2009</a>) Genetics of the hippocampal transcriptome in mice: a systematic survey and online neurogenomic resource. Frontiers in Neuroscience 3:55
-<A href="http://www.frontiersin.org/journal/FullText.aspx?s=750&name=neurogenomics&ART_DOI=10.3389/neuro.15.003.2009" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>,
-<A HREF="http://www.frontiersin.org/journal/FullText.aspx?s=750&name=neurogenomics&ART_DOI=10.3389/neuro.15.003.2009" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
+</OL>
+</Blockquote>
-<BR><SMALL>
-A large expression genetic analysis of the mouse hippocampus (99 strains). This paper is the companion to the the BXD Hippocampus Consortium data sets in GeneNetwork.
-</SMALL>
-<BR>
-<BR>
+<BLOCKQUOTE style="font-size: 14px;">
+ <A NAME="2018" class="subtitle"">GeneNetwork (2018) </A> (not complete)
+<BLOCKQUOTE>
+</Blockquote>
+<OL>
+<LI>Ashbrook DG, Mulligan MK, Williams RW Post-genomic behavioral genetics: From revolution to routine (<A HREF="https://ncbi.nlm.nih.gov/pubmed/29193773" target="_blank" class="fwn">2018</A>) Genes Brain Behav 17:e12441
<LI>
-Tapocik JD, Letwin N, Mayo CL, Frank B, Luu T, Achinike O, House C, Williams R, Elmer GI, Lee NH (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19386926" target="_blank" class="fwn">2009</a>) Identification of candidate genes and gene networks specifically associated with analgesic tolerance to morphine. J Neurosci 2:5295-307 <A href="http://www.jneurosci.org/cgi/content/full/29/16/5295" target="_blank" class="fwn"><I>Full Text HTML</I></A>
-<BR><SMALL> In this study several GeneNetwork data sets were used to study the association of predisposition and tolerance genes with expression QTLs. "The INIA Brain mRNA M430 (Jun06) RMA, VCU BXD PFC Sal M430 2.0 (Dec06) RMA, INIA Brain mRNA M430 (Jun06) RMA, HBP Rosen Striatum M430V2 (Apr05) RMA served as the databases for eQTL searches in the PAG, PFC, TL, and VS, respectively. Significant linkage of eQTL markers to correlated genes was defined by marker regression plots with 1000 permutations. The results from the permutation tests provide LRS (likelihood ratio statistics) scores that are suggestive, significant, or highly significant."
-</SMALL>
-<BR>
-<BR>
+de Vries M, Faiz A, Woldhuis RR, Postma DS, de Jong TV, Sin DD, Bossé Y, Nickle DC, Guryev V, Timens W, van den Berge M, Brandsma CA (<A HREF="https://ncbi.nlm.nih.gov/pubmed/29212667" target="_blank" class="fwn">2018</A>) Lung tissue gene-expression signature for the ageing lung in COPD. Thorax 73:609-617
+<LI>
+Diessler S, Jan M, Emmenegger Y, Guex N, Middleton B, Skene DJ, Ibberson M, Burdet F, Götz L, Pagni M, Sankar M, Liechti R, Hor CN, Xenarios I, Franken P (<A HREF="https://ncbi.nlm.nih.gov/pubmed/30091978" target="_blank" class="fwn">2018</A>) A systems genetics resource and analysis of sleep regulation in the mouse. PLoS Biology 16(8):e2005750
+<LI>
+King R, Struebing FL, Li Y, Wang J, Koch AA, Cooke Bailey JN, Gharahkhani P; International Glaucoma Genetics Consortium; NEIGHBORHOOD Consortium, MacGregor S, Allingham RR, Hauser MA, Wiggs JL, Geisert EE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/29370175" target="_blank" class="fwn">2018</A>) Genomic locus modulating corneal thickness in the mouse identifies POU6F2 as a potential risk of developing glaucoma. PLoS Genet 14:e1007145
+<LI>
+Lu Y, Zhou D, King R, Zhu S, Simpson CL, Jones BC, Zhang W, Geisert EE, Lu L (<A HREF="https://ncbi.nlm.nih.gov/pubmed/30619460" target="_blank" class="fwn">2018</A>) The genetic dissection of Myo7a gene expression in the retinas of BXD mice. Mol Vis 24:115-126
+<LI>
+Struebing FL, King R, Li Y, Cooke Bailey JN; NEIGHBORHOOD consortium, Wiggs JL, Geisert EE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/29421330" target="_blank" class="fwn">2018</A>) Genomic loci modulating retinal ganglion cell death following elevated IOP in the mouse. Exp Eye Res 169:61-67
-<LI>
-Badea A, Johnson GA, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19349225" target="_blank" class="fwn">2009</a>) Genetic dissection of the mouse brain using high-field magnetic resonance microscopy. Neuroimaging 45:1067-79
-<BR><SMALL>We have generated high field MRIs for a subset of the BXD stains. This paper describes the acquisition and quantitative analysis of many CNS regions and compartments for BXD strains. The summary data are in GeneNetwork and the original MRI data sets are available at the Duke <A HREF="http://www.civm.duhs.duke.edu/bxd/index.html" target="_blank" class="fwn">Center for In Vivo Microscopy</A> (CIVM, Al Johnson and colleagues).
-</SMALL>
-<BR>
-<BR>
+</OL>
+</Blockquote>
-<LI>
-Ciobanu DC, Lu L, Mozhui K, Wang X, Morris JA, Taylor WL, Dietz K, Simon P, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19884314" target="_blank" class="fwn">2010</a>) Detection, validation, and downstream analysis of allelic variation in gene expression. Genetics 184: 119-128 <A href="http://www.genetics.org/cgi/reprint/184/1/119" target="_blank" class="fwn"><I>Full Text PDF</I></A>
-<BR><SMALL> Natural allelic variants can cause large differences in gene expression. A problem in microarray-based studies of this phenomenon is that differences in hybridization signal intensity can be due to SNPs in overlapping probes or by isoform variants. The authors develop an approach to this problem that identifies and filters sources of variation and enriches for real differences that can be exploited in downstream functional analyses—essentially reverse complex trait analysis. The authors demonstrate the power of this method by analyzing targets of two validated differences in allelic expression (Stk25 and Rasd2) that segregate in the BXD mouse strains.
-</SMALL>
-<BR>
-<BR>
-<LI>
-Thomas C, Gioiello A, Noriega L, Strehle A, Oury J, Rizzo G, Macchiarulo A, Yamamoto H, Mataki C, Pruzanski M, Pellicciari R, Auwerx J, Schoonjans K (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19723493" target="_blank" class="fwn">2009</a>) TGR5-mediated bile acid sensing controls glucose homeostasis. Cell Metab 10:167-77
-<BR><SMALL>
-Schoonjans and colleagues made good use of a liver gene expression data in GeneNetwork (the BXD data set by Gatti et al., 2006) to show a highly significant correlations between expression of TGR5 and COXV1a1 (their figure 1D).
-</SMALL>
-<BR>
-<BR>
-<LI>
-Davies MN, Lawn S, Whatley S, Fernandes C, Williams RW, Schalkwyk LC (<a href="http://frontiersin.org/neurogenomics/paper/10.3389/neuro.15/002.2009/" target="_blank" class="fwn">2009</a>) To what extent is blood a reasonable surrogate for brain gene expression studies: estimation from mouse hippocampus and spleen. Front. Neurogen. 1:2. doi:10.3389/neuro.15.002.2009 <A href="http://frontiersin.org/neurogenomics/paper/10.3389/neuro.15/002.2009/" target="_blank" class="fwn"><I>Full Text HTML</I></A>
-<BR>
-<BR>
+<BLOCKQUOTE style="font-size: 14px;">
+ <A NAME="2017" class="subtitle"">GeneNetwork (2017) </A> (not complete)
+<BLOCKQUOTE>
+</Blockquote>
+<OL>
+<LI>
+Baker JA, Li J, Zhou D, Yang M, Cook MN, Jones BC, Mulligan MK, Hamre KM, Lu L (<A HREF="https://ncbi.nlm.nih.gov/pubmed/28027852" target="_blank" class="fwn">2017</A>) Analyses of differentially expressed genes after exposure to acute stress, acute ethanol, or a combination of both in mice. Alcohol 58:139-151
+<LI>
+Baud A, Mulligan MK, Casale FP, Ingels JF, Bohl CJ, Callebert J, Launay JM, Krohn J, Legarra A, Williams RW, Stegle O (<A HREF="https://ncbi.nlm.nih.gov/pubmed/28121987" target="_blank" class="fwn">2017</A>) Genetic variation in the social environment contributes to health and disease. PLoS Genet 13(1):e1006498
+<LI>Brockmann GA, Arends D, Heise S, Dogan A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27933540" target="_blank" class="fwn">2017</A>) Systems genetics of obesity. Methods Mol Biol. 2017;1488:481-497
+<LI>
+Grisham W, Brumberg JC, Gilbert T, Lanyon L, Williams RW, Olivo R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/29371844" target="_blank" class="fwn">2017</A>) Teaching with Big Data: Report from the 2016 Society for Neuroscience Teaching Workshop. J Undergrad Neurosci Educ 16:A68-A76
+<LI>
+Jones BC, Jellen LC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27933539" target="_blank" class="fwn">2017</A>) Systems genetics analysis of iron and its regulation in brain and periphery. Methods Mol Biol 1488:467-480
<LI>
-Boon AC, deBeauchamp J, Hollmann A, Luke J, Kotb M, Rowe S, Finkelstein D, Neale G, Lu L, Williams RW, Webby RJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19706712" target="_blank" class="fwn">2009</a>) Host genetic variation affects resistance to infection with a highly pathogenic H5N1 influenza A virus in mice. J Virol 83:10417-26 PMID: 19706712 <A HREF="http://www.genenetwork.org/images/upload/Boon_H5N1_2009.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<BR><SMALL>
-There is about a 10,000-fold variation in the susceptibility of BXD strains to H5N1 infection. Sequence variants in <I>Hc</I> gene contribute to this differential vulnerability.
-</SMALL>
-<BR>
-<BR>
+Lopez MF, Miles MF, Williams RW, Becker HC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27793543" target="_blank" class="fwn">2017</A>) Variable effects of chronic intermittent ethanol exposure on ethanol drinking in a genetically diverse mouse cohort. Alcohol 58:73-82
+<LI>
+Parker CC, Dickson PE, Philip VM, Thomas M, Chesler EJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/28398643" target="_blank" class="fwn">2017</A>) Curr Protoc Neurosci 79:8.39.1-8.39.20
+<LI>
+Porcu P, O'Buckley TK, Lopez MF, Becker HC, Miles MF, Williams RW, Morrow AL (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27884493" target="_blank" class="fwn">2017</A>) Initial genetic dissection of serum neuroactive steroids following chronic intermittent ethanol across BXD mouse strains. Alcohol 58:107-125
+<LI>
+Rinker JA, Fulmer DB, Trantham-Davidson H, Smith ML, Williams RW, Lopez MF, Randall PK, Chandler LJ, Miles MF, Becker HC, Mulholland PJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27884493" target="_blank" class="fwn">2017</A>) Differential potassium channel gene regulation in BXD mice reveals novel targets for pharmacogenetic therapies to reduce heavy alcohol drinking. Alcohol 58:33-45
+<LI>
+van der Vaart AD, Wolstenholme JT, Smith ML, Harris GM, Lopez MF, Wolen AR, Becker HC, Williams RW, Miles MF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27838001" target="_blank" class="fwn">2017</A>) The allostatic impact of chronic ethanol on gene expression: A genetic analysis of chronic intermittent ethanol treatment in the BXD cohort. Alcohol 58:93-106
+</OL>
+</Blockquote>
-<LI>
-Geisert EE, Lu L, Freeman-Anderson ME, Wang X, Gu W, Jiao Y, Williams RW (<A HREF="http://www.molvis.org/molvis/v15/a185" target="_blank" class="fwn">2009</A>) Gene expression landscape of the mammalian eye: A global survey and database of mRNAs of 103 strains of mice. <I>Molecular Vision</I> 15:1730-1763 PMID:19727342 <A href="http://www.molvis.org/molvis/v15/a185" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>,
-<A HREF="http://www.molvis.org/molvis/v15/a185/mv-v15-a185-geisert.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<BR><SMALL>
-This is a comprehensive review of the genetics of gene expression in the mouse eye and includes data for mutant and knockout mice, most of the common strains of mice, and 68 BXD strains. This paper is also serves as an excellent tutorial on almost all major analytic and mapping features of GeneNetwork. Finally, this paper has a useful summary table (Table 2) that provides gene expression signatures (genes and probe sets) for all major ocular cell type.
-</SMALL>
-<BR>
-<BR>
+<BLOCKQUOTE style="font-size: 14px;">
+ <A NAME="2016" class="subtitle"">GeneNetwork (2016) </A>
+<BLOCKQUOTE>
+</Blockquote>
+<OL>
<LI>
-Koutnikova H, Laakso M, Lu L, Combe R, Paananen J, Kuulasmaa T, Kuusisto J, Häring H, Hansen T, Pedersen,O, Smith U, Hanefel M, Williams RW, Auwerx J (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19662162" target="_blank" class="fwn">2009</a>) Identification of UBP1 as a critical blood pressure determinant. PLoS Genetics 5:e1000591
-<A href="http://www.plosgenetics.org/article/info%3Adoi%2F10.1371%2Fjournal.pgen.1000591" target="_blank" class="fwn"><I>Full Text HTML and PDF Versions</I></A>
-<BR><SMALL>
-A good example of the rapid "translation" of a mouse blood pressure QTL to a human candidate gene, <I>UBP1</I>. This study made use of the new advanced recombinant inbred BXD strains that are now available from <A HREF="http://jaxmice.jax.org/strain/007103.html" target="_blank" class="fwn">JAX</A> and the University of Tennessee.
-</SMALL>
-<BR>
-<BR>
-
+Alam G, Miller DB, O'Callaghan JP, Lu L, Williams RW, Jones BC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27182044" target="_blank" class="fwn">2016</A>) MPTP neurotoxicity is highly concordant between the sexes among BXD recombinant inbred mouse strains. Neurotoxicology 55:40-7
<LI>
-Carneiro AM, Airey DC, Thompson B, Zhu CB, Lu L, Chesler EJ, Erikson KM, Blakely RD (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19179283" target="_blank" class="fwn">2009</a>) Functional coding variation in recombinant inbred mouse lines reveals multiple serotonin transporter-associated phenotypes. Proc Natl Acad Sci USA 106:2047-2052
-<A href="http://www.pnas.org/content/early/2009/01/28/0809449106" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>,
-<A HREF=http://www.pnas.org/content/early/2009/01/28/0809449106.full.pdf+html" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
-<BR><SMALL>
-A new way to study the impact of sequence variants by exploiting genetic reference populations. In this paper, Blakely and colleagues have analyzed BXD strains that "share specific serotonin receptor (Slc6a4, 5-HT) gene variants against an otherwise randomized genetic background, an advantage over approaches that test allele effects on one or two inbred backgrounds. Perhaps the greatest strength of this approach is the availability of archived, dimensional data across a large number of phenotypes linked to individual BXD lines, including anatomical, neurochemical, and behavioral traits. In this report, we initiate investigation of naturally occurring variation in 5-HT genes via analysis of functional coding polymorphism in mSERT" (Slc6a4).
-</SMALL>
-<BR>
-<BR>
-
+Chintalapudi SR, Wang X, Li H, Lau YH, Williams RW, Jablonski MM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27881906" target="_blank" class="fwn">2016</A>) Genetic and immunohistochemical analysis of HSPA5 in mouse and human retinas. Molecular Vision 22:1318-1331
+<LI>
+Lu H, Lu L, Williams RW, Jablonski MM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27011731" target="_blank" class="fwn">2016</A>) Iris transillumination defect and its gene modulators do not correlate with intraocular pressure in the BXD family of mice. Molecular Vision 22:224-233
<LI>
-Rosen GD, Pung CJ, Owens CB, Caplow J, Kim H, Mozhui K, Lu L, Williams RW (2009) Genetic modulation of striatal volume by loci on Chrs 6 and 17 in BXD recombinant inbred mice. Genes Brain Behav. 8: 296–308. <A HREF=http://www.rosenlab.net/PDFs/Rosen2009.pdf" target=_blank" class="fwn"><I>Full Text PDF Version</I></A>.
-<BR><SMALL>This paper introduces a comprehensive companion microarray data set for the striatum of the BXD strains (see Mouse BXD Striatum mRNA databases in GeneNetwork).
+Merkwirth C, Jovaisaite V, Durieux J, Matilainen O, Jordan SD, Quiros PM, Steffen KK, Williams EG, Mouchiroud L, Tronnes SU, Murillo V, Wolff SC, Shaw RJ, Auwerx J, Dillin A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27133168" target="_blank" class="fwn">2016</A>) Two conserved histone demethylases regulate mitochondrial stress-induced longevity. Cell 165:1209-1223
+<LI>
+Neuner SM, Garfinkel BP, Wilmott LA, Ignatowska-Jankowska BM, Citri A, Orly J, Lu L, Overall RW, Mulligan MK, Kempermann G, Williams RW, O'Connell KM, Kaczorowski CC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27460150" target="_blank" class="fwn">2016</A>) Systems genetics identifies Hp1bp3 as a novel modulator of cognitive aging. Neurobiol Aging 46:58-67
+<LI>
+Shi X, Walter NA, Harkness JH, Neve KA, Williams RW, Lu L, Belknap JK, Eshleman AJ, Phillips TJ, Janowsky A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27031617" target="_blank" class="fwn">2016</A>) Genetic polymorphisms affect mouse and human Trace Amine-Associated Receptor 1 function. PLoS One 11(3):e0152581
+<LI>
+Schultz NG, Ingels J, Hillhouse A, Wardwell K, Chang PL, Cheverud JM, Lutz C, Lu L, Williams RW, Dean MD (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26935419" target="_blank" class="fwn">2016</A>) The genetic basis of baculum size and shape variation in mice. G3 (Bethesda) 6(5):1141-1151
+<LI>
+Sloan Z, Arends D, Broman KW, Centeno A, Furlotte N, Nijveen H, Yan L, Zhou X, Williams RW, Prins P (2016) GenetNetwork: framework for web-based genetics. The Journal of Open Source Software http://joss.theoj.org/papers/10.21105/joss.00025 (http://dx.doi.org/10.21105/joss.00025)
+<LI>
+Wang X, Pandey AK, Mulligan MK, Williams EG, Mozhui K, Li Z, Jovaisaite V, Quarles LD, Xiao Z, Huang J, Capra JA, Chen Z, Taylor WL, Bastarache L, Niu X, Pollard KS, Ciobanu DC, Reznik AO, Tishkov AV, Zhulin IB, Peng J, Nelson SF, Denny JC, Auwerx J, Lu L, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26833085" target="_blank" class="fwn">2016</A>) Joint mouse-human phenome-wide association to test gene function and disease risk. Nat Commun 7:10464
+ <LI>
+Williams EG, Wu Y, Jha P, Dubuis S, Blattmann P, Argmann CA, Houten SM, Amariuta T, Wolski W, Zamboni N, Aebersold R, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/27284200" target="_blank" class="fwn">2016</A>) Systems proteomics of liver mitochondria function. Science 352(6291):aad0189
-
-</SMALL>
-<BR>
-<BR>
-<LI>
-Whitney IE, Raven MA, Ciobanu DC, Williams RW, Reese BE (<a href="http://www.iovs.org/cgi/content/abstract/50/5/1996" target="_blank" class="fwn">2009</a>) Multiple genes on chromosome 7 regulate dopaminergic amacrine cell number in the mouse. Investigative Ophthalmology & Visual Science 50:1996-2003.
-<BR><SMALL>In addition to the quantitative genetic analysis of a dopaminergic cell population in the retinas of AXB/BXA strains of mice, this paper also introduces a comprehensive companion microarray data set for the whole eyes of these same strains (see Mouse AXB/BXA Eye mRNA database in GeneNetwork).
-</SMALL>
-<BR>
-<BR>
+</OL>
+</Blockquote>
-<LI>
-Mozhui RT, Ciobanu DC, Schikorski T, Wang XS, Lu L, Williams RW (2008) Dissection of a QTL hotspot on mouse distal chromosome 1 that modulates neurobehavioral phenotypes and gene expression. PLoS Genetics 4: e1000260. doi:10.1371/journal.pgen.1000260
-<A href="http://www.plosgenetics.org/article/info:doi%2F10.1371%2Fjournal.pgen.1000260" target="_blank" class="fwn"><I>Full Text HTML Version</I></A>.
-<BR><SMALL>A fine-grained analysis of one of the most intriguing parts of the mouse genome that controls a wide variety of traits. This study highlights sequence variants in formin 2 (<I>Fmn2</I>) as important in translation of mRNA and protein in neurons.
-</SMALL>
+<BLOCKQUOTE style="font-size: 14px;">
+ <A NAME="2015" class="subtitle"">GeneNetwork (2015) </A>
+<BLOCKQUOTE>
+</Blockquote>
+<OL>
+<LI>
+Ashbrook DG, Gini B, Hager R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26701914" target="_blank" class="fwn">2015</A>) Genetic variation in offspring indirectly influences the quality of maternal behaviour in mice. eLIFE 4:e11814
+<LI>
+Ashbrook DG, Williams RW, Lu L, Hager R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26190982" target="_blank" class="fwn">2015</A>) A cross-species genetic analysis identifies candidate genes for mouse anxiety and human bipolar disorder. Frontiers in Behavioral Neuroscience 9:171
+<LI>
+Chaum E, Winborn CS, Bhattacharya S (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25963977" target="_blank" class="fwn">2015</A>) Genomic regulation of senescence and innate immunity signaling in the retinal pigment epithelium. Mammalian Genome 26:210-221 <A HREF="/images/upload/ChaumMammGenome2015.pdf"> Full text</A>
+<LI>
+Cheng Q, Seltzer Z, Sima C, Lakschevitz FS, Glogauer M (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25608512" target="_blank" class="fwn">2015</A>) Quantitative trait loci and candidate genes for neutrophil recruitment in sterile inflammation mapped in AXB-BXA recombinant inbred mice. PLoS One 10:e0124117
+<LI>
+Cook MN, Baker JA, Heldt SA, Williams RW, Hamre KM, Lu L (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25991709" target="_blank" class="fwn">2015</A>) Identification of candidate genes that underlie the QTL on chromosome 1 that mediates genetic differences in stress-ethanol interactions. Physiol Genomics 47:308-317
+<LI>
+Delprato A, Bonheur B, Algéo MP, Rosay P, Lu L, Williams RW, Crusio WE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26449520" target="_blank" class="fwn">2015</A>) Systems genetic analysis of hippocampal neuroanatomy and spatial learning in mice. Genes Brain Behav 14(8):591-606
+<LI>
+Ferguson B, Ram R, Handoko HY, Mukhopadhyay P, Muller HK, Soyer HP, Morahan G, Walker GJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25088201" target="_blank" class="fwn">2015</A>) Melanoma susceptibility as a complex trait: genetic variation controls all stages of tumor progression. Oncogene 34:2879-86
+<LI>
+King R, Lu L, Williams RW, Geisert EE. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26604663" target="_blank" class="fwn">2015</A>) Transcriptome networks in the mouse retina: An exon level BXD RI database. Mol Vis 21:1235-1251
+<LI>
+Lee J, Seol MY, Jeong S, Kwon HJ, Lee CR, Ku CR, Kang SW, Jeong JJ, Shin DY, Nam KH, Lee EJ, Chung WY, Jo YS (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25942439" target="_blank" class="fwn">2015</A>) KSR1 is coordinately regulated with Notch signaling and oxidative phosphorylation in thyroid cancer. J Mol Endocrinol 54:115-124
+<LI>
+Padula AE, Griffin WC 3rd, Lopez MF, Nimitvilai S, Cannady R, McGuier NS, Chesler EJ, Miles MF, Williams RW, Randall PK, Woodward JJ, Becker HC, Mulholland PJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25942439" target="_blank" class="fwn">2015</A>) KCNN genes that encode small-conductance Ca(2+)-activated K(+) channels influence alcohol and drug addiction. Neuropsychopharmacology 40:1928-1939
+<LI>
+Scott RE, Ghule PN, Stein JL, Stein GS (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25662840" target="_blank" class="fwn">2015</A>) Cell cycle gene expression networks discovered using systems biology: Significance in carcinogenesis. J Cell Physiol 230:2533-42
+<LI>
+Shea CJ, Carhuatanta KA, Wagner J, Bechmann N, Moore R, Herman JP, Jankord R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26079812" target="_blank" class="fwn">2015</A>) Variable impact of chronic stress on spatial learning and memory in BXD mice. Physiol Behav. 150:69-77 <A HREF="http://www.sciencedirect.com/science/article/pii/S0031938415003583"> Full text</A>
+<LI>
+Xue Y, Li J, Yan L, Lu L, Liao FF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26092713" target="_blank" class="fwn">2015</A>) Genetic variability to diet-induced hippocampal dysfunction in BXD recombinant inbred (RI) mouse strains. Behav Brain Res 292:83-94
+<LI>
+Williams EG, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/26140590" target="_blank" class="fwn">2015</A>) The convergence of systems and reductionist approaches in complex trait analysis. Cell 162:23-32. <SMALL><A HREF="/images/upload/WilliamsEG_Auwerx_Cell2015.pdf" target="_blank" class="fwn">PDF version</A></SMALL>
+
</OL>
-
</Blockquote>
@@ -399,64 +436,148 @@ Mozhui RT, Ciobanu DC, Schikorski T, Wang XS, Lu L, Williams RW (2008) Dissectio
+<BLOCKQUOTE style="font-size: 14px;">
+ <A NAME="2014" class="subtitle"">GeneNetwork (2014) </A>
+<BLOCKQUOTE>
+</Blockquote>
+<OL>
-<BLOCKQUOTE class="fs14">
- <A NAME="Key" class="subtitle">Key References</A>
-<BLOCKQUOTE >
-
-<P>The first section lists key technical papers that are appropriate references when citing GeneNetwork and WebQTL. The second section lists publications and other resources that have made use of GeneNetwork.<P>
-</Blockquote>
-<OL>
<LI>
-Wang J, Williams RW, Manly KF (<a href="http://journals.humanapress.com/ArticleDetail.pasp?issn=1539-2791&acode=NI:1:4:299" target="_blank" class="fwn">2003</a>) WebQTL: Web-based complex trait analysis. Neuroinformatics 1: 299-308 <A href="http://www.genenetwork.org/pdf/webqtl.pdf" class="fwn"><I>Full Text PDF Version</I></A>. [A good technical reference to WebQTL and GeneNetwork]
+Ashbrook GN, Delprato A, Grellmann C, Klein M, Wetzel R, Overall RW, Badea A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/get" target="_blank" class="fwn">2014</A>) Transcript co-variance with Nestin in two mouse genetic reference populations identifies Lef1 as a novel candidate regulator of neural precursor cell proliferation in the adult hippocampus. Frontiers in Neuroscience in press
<LI>
-Chesler EJ, Wang J, Lu L, Qu Y, Manly KF, Williams RW (<a href="http://journals.humanapress.com/ArticleDetail.pasp?issn=1539-2791&acode=NI:1:4:343" target="_blank" class="fwn">2003</a>) Genetic correlates of gene expression in recombinant inbred strains: a relational model to explore for neurobehavioral phenotypes. Neuroinformatics 1: 343-357. <A href="http://www.nervenet.org/pdf/Genetic_Correlation_webQTL.pdf" class="fwn"><I>Full Text PDF Version</I></A>. [Best reference regarding interpretation of genetic correlations.]
+Ashbrook DG, Williams RW, Lu L, Stein JL, Hibar DP, Nichols TE, Medland SE, Thompson PM, Hager R. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25280473" target="_blank" class="fwn">2014</A>) Joint genetic analysis of hippocampal size in mouse and human identifies a novel gene linked to neurodegenerative disease. BMC Genomics 15:850
<LI>
-Chesler EJ, Lu L, Wang J, Williams RW, Manly KF (<a href="http://www.nature.com/cgi-taf/DynaPage.taf?file=/neuro/journal/v7/n5/full/nn0504-485.html" target="_blank" class="fwn">2004</a>) WebQTL: rapid exploratory analysis of gene expression and genetic networks for brain and behavior. Nature Neuroscience 7: 485-486. <A href="http://www.genenetwork.org/pdf/nn0504-485.pdf" class="fwn"><I>Full Text PDF Version</I></A> [A short review]
+Carhuatanta KA, Shea CJ, Herman JP, Jankord R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25374516" target="_blank" class="fwn">2014</A>) Unique genetic loci identified for emotional behavior in control and chronic stress conditions. Front Behav Neurosci 8:341
<LI>
-Chesler EJ, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15474587" target="_blank" class="fwn">2004</a>) Brain gene expression: genomics and genetics. International Review of Neurobiology 60:59-95. (<I>DNA Arrays in Neurobiology</I>, edited by MF Miles, Elsevier, Amsterdam). [A longer discussion, both statistical and conceptual, on the genetic analysis of gene expression and relations to higher order behavioral phenotypes]</A>
+Emery FD, Parvathareddy J, Pandey AK, Cui Y, Williams RW, Miller MA (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24687986" target="_blank" class="fwn">2014</A>) Genetic control of weight loss during pneumonic Burkholderia pseudomallei infection. Pathog Dis 71:249-264
<LI>
-Bystrykh L, Weersing E, Dontje B, Sutton S, Pletcher MT, Wiltshire T, Su AI, Vellenga E, Wang J, Manly KF, Lu L, Chesler EJ, Alberts R, Jansen RC, Williams RW, Cooke M, de Haan G (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15711547" target="_blank" class="fwn">2005</A>) Uncovering regulatory pathways affecting hematopoietic stem cell function using "genetical genomics." Nature Genetics 37:225-232. [Please cite this article if you have used the GNF-Groningen hematopoietic stem cell data set.]
+Goldowitz D, Lussier AA, Boyle JK, Wong K, Lattimer SL, Dubose C, Lu L, Kobor MS, Hamre KM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25076964" target="_blank" class="fwn">2014</A>) Molecular pathways underpinning ethanol-induced neurodegeneration. Front Genet 5:203
<LI>
-Chesler EJ, Lu L, Shou S, Qu Y, Gu J, Wang J, Hsu HC, Mountz JD, Baldwin N, Langston MA, Threadgill DW, Manly KF, Williams RW (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15711545" target="_blank" class="fwn">2005</A>) Genetic dissection of gene expression reveals polygenic and pleiotropic networks modulating brain structure and function. Nature Genetics 37: 233-242. [Please cite this article if you have used one of the UTHSC brain data sets.]
-
+Graybeal C, Bachu M, Mozhui K, Saksida LM, Bussey TJ, Sagalyn E, Williams RW, Holmes A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24586288" target="_blank" class="fwn">2014</A>) Strains and stressors: an analysis of touchscreen learning in genetically diverse mouse strains. PLoS One 9(2):e87745
<LI>
-Damerval C, Maurice A, Josse JM, de Vienne D (<A HREF="http://www.genetics.org/cgi/content/abstract/137/1/289" class="fwn" target="_blank">1994</A>) Quantitative trait loci underlying gene product variation: a novel perspective for analyzing regulation of genome expression. Genetics 137: 289-301 <A href="http://www.genetics.org/cgi/reprint/137/1/289" class="fwn" target="_blank"><I>Full Text PDF Version</I></A> [The first published paper on system genetics. Impressive; before its time.]
+Hall RA, Liebe R, Hochrath K, Kazakov A, Alberts R, Laufs U, Böhm M, Fischer HP, Williams RW, Schughart K, Weber SN, Lammert F (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24586654" target="_blank" class="fwn">2014</A>) Systems genetics of liver fibrosis: Identification of fibrogenic and expression quantitative trait loci in the BXD murine reference population.PLoS One 9(2):e89279
+<LI>
+Harenza JL, Muldoon PP, Biasi MD, Imad Damaj M, Miles MF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24289814" target="_blank" class="fwn">2014</A>) Genetic variation within the Chrna7 gene modulates nicotine reward-like phenotypes in mice. Genes, Brain & Behavior 13:213-225
+<LI>
+Hayes SK, Hager R, Grencis RK (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24628794" target="_blank" class="fwn">2014</A>) Sex-dependent genetics effects on immune responses to parasitic nematodes. BMC Genomics 15:193
+<LI>
+Huang Y, Zhu X, Wang L, Liu X, Lu L, Gu W, Jiao Y (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25133246" target="_blank" class="fwn">2014</A>) Genome wide analysis of sex difference in gene expression profiles of bone formations using sfx mice and BXD RI strains. ScientificWorldJournal 2014:584910
+<LI>
+Hasenfuss SC, Bakiri L, Thomsen MK, Williams EG, Auwerx J, Wagner EF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24411941" target="_blank" class="fwn">2014</A>) Regulation of steatohepatitis and PPARγ signaling by distinct AP-1 dimers. Cell Metab. 2014 Jan 7;19(1):84-95.
+<LI>
+Jones BC, O'Callaghan JP, Lu L, Williams RW, Alam G, Miller DB (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25192776" target="_blank" class="fwn">2014</A>) Genetic correlational analysis reveals no association between MPP+ and the severity of striatal dopaminergic damage following MPTP treatment in BXD mouse strains. Neurotoxicol Teratol pii: S0892-0362(14)00159-7
+<LI>
+Keeley PW, Whitney IE, Madsen NR, St John AJ, Borhanian S, Leong SA, Williams RW, Reese BE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24954025" target="_blank" class="fwn">2014</A>) Independent genomic control of neuronal number across retinal cell types. Dev Cell 30:103-109
+<LI>
+Keeley PW, Zhou C, Lu L, Williams RW, Melmed S, Reese BE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24927528" target="_blank" class="fwn">2014</A>) Pituitary tumor-transforming gene 1 regulates the patterning of retinal mosaics. Proc Natl Acad Sci USA 111:9295-
+<LI>
+Kweon KH, Lee CR, Jung SJ, Ban EJ, Kang SW, Jeong JJ, Nam KH, Jo YS, Lee J, Chung WY (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25109285" target="_blank" class="fwn">2014</A>) Sirt1 induction confers resistance to etoposide-induced genotoxic apoptosis in thyroid cancers. Int J Oncol 45:2065-2075
+<LI>
+Loos M, Mueller T, Gouwenberg Y, Wijnands R, van der Loo RJ, Birchmeier C, Smit AB, Spijker S (<A HREF="/images/upload/Loos_Spijker_Nrg3Impulsive_BioPsch_2014.pdf" target="_blank" class="fwn">2014</A>) Neuregulin-3 in the mouse medial prefrontal cortex regulates impulsive action. Biol Psychiatry 76:648-655
+<LI>
+Lotan A, Fenckova M, Fralten J, Alttoa A, Dixson L, Williams RW, van der Voet M (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25414627" target="_blank" class="fwn">2014</A>) Neuroinformatic analyses of common and distinct genetic components associate with major neuropsychiatric disorders. Frontiers in Neuroscience 8:331
+<LI>
+McLachlan SM, Aliesky H, Banuelos B, Magana J, Williams RW, Rapoport B. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25051451" target="_blank" class="fwn">2014</A>) Immunoglobulin heavy chain variable region and major histocompatibility region genes are linked to induced graves' disease in females from two very large families of recombinant inbred mice. Endocrinology 155:4094-4103
+<LI>
+McLachlan SM, Hamidi S, Aliesky H, Williams RW, Rapoport B (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24564389" target="_blank" class="fwn">2014</A>) Sex, genetics and the control of thyroxine and thyrotropin in mice. Thyroid 24:1080-1087
+<LI>
+Muldoon PP, Jackson KJ, Perez E, Harenza JL, Molas S, Rais B, Anwar H, Zaveri NT, Maldonado R, Maskos U, McIntosh JM, Dierssen M, Miles MF, Chen X, De Biasi M, Damaj MI (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24750073" target="_blank" class="fwn">2014</A>) The alpha3beta4* nicotinic ACh receptor subtype mediates physical dependence to morphine: mouse and human studies. Br J Pharmacol 171:3845-3857
+<Li>
+Nguyen C, Baten A, Morahan G (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24647628" target="_blank" class="fwn">2014</A>) Comparison of sequence variants in transcriptomic control regions across 17 mouse genomes. Database (Oxford): bau020. doi: 10.1093/database/bau020
+<LI>
+Pandey AK, Lu L, Wang X, Homayouni R, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24523945" target="_blank" class="fwn">2014</A>) Functionally enigmatic genes: a case study of the brain ignorome. PLoS One 9(2):e88889
+<LI>
+Pandey AK, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25172476" target="_blank" class="fwn">2014</A>) Genetics of gene expression in CNS. Int Rev Neurobiol 116:195-231
+<LI>
+Pietrzykowski A, Spijker S (<A HREF="https://ncbi.nlm.nih.gov/pubmed/get" target="_blank" class="fwn">2014</A>) Impulsivity and comorbid traits: a multi-step approach for finding putative responsible microRNAs in the amygdala. Frontiers in Neuroscience in press
+<LI>
+Pirinen E, Cantó C, Jo YS, Morato L, Zhang H, Menzies KJ, Williams EG, Mouchiroud L, Moullan N, Hagberg C, Li W, Timmers S, Imhof R, Verbeek J, Pujol A, van Loon B, Viscomi C, Zeviani M, Schrauwen P, Sauve AA, Schoonjans K, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24770626" target="_blank" class="fwn">2014</A>) Pharmacological inhibition of poly(ADP-ribose) polymerases improves fitness and mitochondrial function in skeletal muscle. Cell Metab 19:1034-1041
+<LI>
+Poon A, Goldowitz D (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24640950" target="_blank" class="fwn">2014</A>) Identification of genetic loci that modulate cell proliferation in the adult rostral migratory stream using the expanded panel of BXD mice. BMC Genomics 15:206
+<LI>
+Porcu P, Morrow AL (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24770626" target="_blank" class="fwn">2014</A>) Divergent neuroactive steroid responses to stress and ethanol in rat and mouse strains: Relevance for human studies. Psychopharmacology (Berl) 231:3257-3272
+<LI>
+Ram R, Mehta M, Balmer L, Gatti DM, Morahan G (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25236450" target="_blank" class="fwn">2014</A>)
+Rapid identification of major-effect genes using the collaborative cross. Genetics 198:75-86
+PMID: 25236450
+<LI>
+Ryu D, Jo YS, Lo Sasso G, Stein S, Zhang H, Perino A, Lee JU, Zeviani M, Romand R, Hottiger MO, Schoonjans K, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25200183" target="_blank" class="fwn">2014</A>) A SIRT7-dependent acetylation switch of GABPβ1 controls mitochondrial function. Cell Metab in press
+<LI>
+Thompson RL, Williams RW, Kotb M, Sawtell NM. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24651695" target="_blank" class="fwn">2014</A>) A forward phenotypically driven unbiased genetic analysis of host genes that moderate herpes simplex virus virulence and stromal keratitis in mice. PLoS One 9(3):e92342
+<LI>
+Toth LA, Trammell RA, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24535895" target="_blank" class="fwn">2014</A>) Mapping complex traits using families of recombinant inbred strains: an overview and example of mapping susceptibility to Candida albicans induced illness phenotypes. Pathog Dis 71:234-248
+<LI>
+Unger EL, Jones BC, Bianco LE, Allen RP, Earley CJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24406439" target="_blank" class="fwn">2014</A>) Diurnal variations in brain iron concentrations in BXD RI mice. Neuroscience 263:54-59
+<LI>
+van de Lagemaat LN, Nijhof B, Bosch DG, Kohansal-Nodehi M, Keerthikumar S, Heimel JA (<A HREF="https://ncbi.nlm.nih.gov/pubmed/get" target="_blank" class="fwn">2014</A>) Age-related decreased inhibitory versus excitatory gene expression in the adult autistic brain. Frontiers in Neuroscience in press
+<LI>
+Vied CM, Freudenberg F, Wang Y, Raposo AA, Feng D, Nowakowski RS (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25191221" target="_blank" class="fwn">2014</A>) A multi-resource data integration approach: identification of candidate genes regulating cell proliferation during neocortical development. Frontiers in Neuroscience 8:257
+<LI>
+Wang L, Lu W, Zhang L, Huang Y, Scheib R, Liu X, Myers L, Lu L, Farber CR, Liu G, Wang CY, Deng H, Williams RW, Wang Y, Gu W, Jiao (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24416236" target="_blank" class="fwn">2014</A>) Trps1 differentially modulates the bone mineral density between male and female mice and its polymorphism associates with BMD differently between women and men. PLoS One 9(1):e84485
+<LI>
+Wu Y, Williams EG, Dubuis S, Mottis A, Jovaisaite V, Houten SM, Argmann CA, Faridi P, Wolski W, Kutalik Z, Zamboni N, Auwerx J, Aebersold R (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25215496" target="_blank" class="fwn">2014</A>) Multilayered genetic and omics dissection of mitochondrial activity in a mouse reference population. Cell 158:1415-1430
+<LI>
+Williams EG, Mouchiroud L, Frochaux M, Pandey A, Andreux PA, Deplancke B, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/25255223" target="_blank" class="fwn">2014</A>) An evolutionarily conserved role for the aryl hydrocarbon receptor in the regulation of movement. PLoS Genet 10:e1004673
+<LI>
+Ye R, Carneiro AM, Airey D, Sanders-Bush E, Williams RW, Lu L, Wang J, Zhang B, Blakely RD (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24102824" target="_blank" class="fwn">2014</A>) Evaluation of heritable determinants of blood and brain serotonin homeostasis using recombinant inbred mice. Genes Brain Behav. 13:247-260
-<Blockquote><SMALL>[Damerval et al., 1994 abstract] A methodology to dissect the genetic architecture of quantitative variation of numerous gene products simultaneously is proposed. For each individual of a segregating progeny, proteins extracted from a given organ are separated using two-dimensional electrophoresis, and their amounts are estimated with a computer-assisted system for spot quantification. Provided a complete genetic map is available, statistical procedures allow determination of the number, effects and chromosomal locations of factors controlling the amounts of individual proteins. This approach was applied to anonymous proteins of etiolated coleoptiles of maize, in an F(2) progeny between two distant lines. The genetic map included both restriction fragment length polymorphism and protein markers. Minimum estimates of one to five unlinked regulatory factors were found for 42 of the 72 proteins analyzed, with a large diversity of effects. Dominance and epistasis interactions were involved in the control of 38% and 14% of the 72 proteins, respectively. Such a methodology might help understanding the architecture of regulatory networks and the possible adaptive or phenotypic significance of the polymorphism of the genes involved.
-</SMALL></Blockquote>
-<LI>
-H&uuml;bner N, Wallace CA, Zimdahl H, Petretto E, Schulz H, Maciver F, Mueller M, Hummel O, Monti J, Zidek V, Musilova A, Kren V, Causton H, Game L, Born G, Schmidt S, Muller A, Cook SA, Kurtz TW, Whittaker J, Pravenec M, Aitman TJ (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15711544" target="_blank" class="fwn">2005</A>) Integrated transcriptional profiling and linkage analysis for identification of genes underlying disease. Nature Genetics 37: 243-253. [Please cite this article if you have used one of the rat HXB kidney or peritoneal fat data sets.]
+</OL>
+</Blockquote>
-<LI>
-Kang HM, Ye C, Eskin E (2008) Accurate discovery of expression quantitative trait loci under confounding from spurious and genuine regulatory hotspots. Genetics 180:1909-1925
-<A href="http://www.genetics.org/cgi/content/abstract/genetics.108.094201v1" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>. [An important method that can greatly improve the ability to resolve true genetic interactions in expression genetic studies.]
-<LI>
-Ljungberg K, Holmgren S, Carlborg O (<A HREF="http://bioinformatics.oupjournals.org/cgi/content/abstract/bth175?ijkey=21Pp0pgOuBL6Q&keytype=ref" class="fwn" target="_blank">2004</A>) Simultaneous search for multiple QTL using the global optimization algorithm DIRECT. Bioinformatics 20:1887-1895. [Please review and cite this article if you have exploited the DIRECT pair-scan tool and output graphs in WebQTL.]
-<LI>
-Manly KF, Wang J, Williams RW (<A HREF="http://genomebiology.com/2005/6/3/R27" class="fwn" target="_blank">2005</A>) Weighting by heritability for detection of quantitative trait loci with microarray estimates of gene expression. Genome Biology 6: R27 <A href="http://genomebiology.com/2005/6/3/R27" class="fwn" target="_blank"><I>Full Text HTML and PDF Version</I></A>. [Please cite this article if you have used one of the HWT (Heritability Weighted Transform) data sets.]
-<LI>
-Manly K, Williams RW (2001) WEBQTL—WWW service for mapping quantitative trait loci. International Mouse Genome Conference 15: 74. [First published abstract on WebQTL, presented Oct 2001, Edinburgh; also see <A HREF="http://www.complextrait.org/archive/2002/HTML/manly.html" class="fwn" target="_blank">2002</A> CTC abstract]
-<LI>
-Taylor BA, Heiniger HJ, Meier H (<A HREf="http://www.ncbi.nlm.nih.gov/pubmed/4719448">1973</A>) Genetic analysis of resistance to cadmium-induced teticular damage in mice. Proc Soc Exp Biol Med 143:629-33 [This is one of the first full paper on the use of recombinant inbred strains in biomedical research and the first paper to use BXD lines of mice. <A HREF="/images/upload/Taylor_1973.pdf"> Full text</A>
-<LI>
-Webster JA, Gibbs JR, Clarke J, Ray M, Zhang W, Holmans P, Rohrer K, Zhao A, Marlowe L, Kaleem M, McCorquodale DS 3rd, Cuello C, Leung D, Bryden L, Nath P, Zismann VL, Joshipura K, Huentelman MJ, Hu-Lince D, Coon KD, Craig DW, Pearson JV; NACC-Neuropathology Group, Heward CB, Reiman EM, Stephan D, Hardy J, Myers AJ (<A HREF="http://www.ncbi.nlm.nih.gov/pubmed/19361613" class="fwn" target="_blank">2009</A>) Genetic control of human brain transcript expression in Alzheimer disease. Am J Hum Genet 84:445-58. [Please review and cite this article if you have used the HUMAN data set by Myers and colleagues in GeneNetwork.]
+<BLOCKQUOTE style="font-size: 14px;">
+ <A NAME="2013" class="subtitle"">GeneNetwork (2013) </A>
+<BLOCKQUOTE>
+
+</Blockquote>
+<OL>
<LI>
-Williams RW, Shou S, Lu L, Wang J, Manly KF, Hsu HC, Mountz J, Threadgill DW (<A HREF="http://www.complextrait.org/ctc2002/williams.html" class="fwn" target="_blank">2002</A>) Genomic analysis of transcriptional networks: combining microarrays with complex trait analysis. Complex Trait Consortium 1 [One of the first published abstracts on system genetic analysis of microarray data sets, presented May 2002.]
+Bhandari P, Hill JS, Farris SP, Costin B, Martin I, Chan CL, Alaimo JT, Bettinger JC, Davies AG, Miles MF, Grotewiel M (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22239914" target="_blank" class="fwn">2013</A>) Chloride intracellular channels modulate acute ethanol behaviors in Drosophila, Caenorhabditis elegans and mice. Genes, Brain & Behavior 11:387-97
+<LI>
+Cheng Y, Gaughan J, Midic U, Han Z, Liang CG, Patel BG, Latham KE (<A HREF="http://www.genetics.org/content/193/3/877.long" target="_blank" class="fwn">2013</A>) Systems genetics implicates cytoskeletal genes in oocyte control of cloned embryo quality. Genetics 193:877-896 <A HREF="/images/upload/Cheng_Latham_2013.pdf" target="_blank" class="fwn">PDF version</A>
+<LI>
+Dogan A, Lasch P, Neuschl C, Millrose MK, Alberts R, Schughart K, Naumann D, Brockmann GA. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23758785" target="_blank" class="fwn">2013</A>) ATR-FTIR spectroscopy reveals genomic loci regulating the tissue response in high fat diet fed BXD recombinant inbred mouse strains. BMC Genomics 14:386
+<LI>
+DuBose CS, Chesler EJ, Goldowitz D, Hamre KM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23289978" target="_blank" class="fwn">2013</A>) Use of the expanded panel of BXD mice narrow QTL regions in ethanol-induced locomotor activation and motor incoordination. Alcohol Clin Exp Res 37:170-83
+<LI>
+Farris SP, Miles MF (<A HREF="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0082435" target="_blank" class="fwn">2013</A>) Fyn-dependent gene networks in acute ethanol sensitivity. PLoS One 8:e82435
+<LI>
+Houtkooper RH, Mouchiroud L, Ryu D, Moullan N, Katsyuba E, Knott G, Williams RW, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23698443" target="_blank" class="fwn">2013</A>) Mitonuclear protein imbalance as a conserved longevity mechanism. Nature 497:451-457 <A HREF="/images/upload/Houtkooper_Williams_Auwerx_Nature_2013.pdf" target="_blank" class="fwn">PDF version</A>
+<LI>
+Huang Y, Wang L, Bennett B, Williams RW, Wang YJ, Gu WK, Jiao Y (<A HREF="https://ncbi.nlm.nih.gov/pubmed/24085430" target="_blank" class="fwn">2013</A>) Potential role of Atp5g3 in epigenetic regulation of alcohol preference or obesity from a mouse genomic perspective. Genet Mol Res 12:3662-3674
+<LI>
+Jellen LC, Lu L, Wang X, Unger EL, Earley CJ, Allen RP, Williams RW, Jones BC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23911809" target="_blank" class="fwn">2013</A>) Iron deficiency alters expression of dopamine-related genes in the ventral midbrain in mice. Neuroscience 252:13-23
+<LI>
+Jiao Y, Chen H, Yan J, Wang L, Huang Y, Liu X, Williams RW, Lu L, Wang Y, Gu W (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23665904" target="_blank" class="fwn">2013</A>) Genome-wide gene expression profiles in antioxidant pathways and their potential sex differences and connections to vitamin C in mice. Int J Mol Sci 14:10042-62
+<LI>
+Jones BC, Miller DB, O'Callaghan JP, Lu L, Unger EL, Alam G, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23558233" target="_blank" class="fwn">2013</A>) Systems analysis of genetic variation in MPTP neurotoxicity in mice. Neurotoxicology 37C:26-34
+<LI>
+Liebe R, Hall RA, Williams RW, Dooley S, Lammert F (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23943854" target="_blank" class="fwn">2013</A>) Systems genetics of hepatocellular damage in vivo and in vitro: identification of a critical network on chromosome 11 in mouse. Physiological Genomics 45:931-939
+<LI>
+Lindblom RP, Aeinehband S, Parso R, Strom M, Al Nimer F, Zhang XM, Domingues CA, Flytzani S, Siez M, Piehl F (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23558233" target="_blank" class="fwn">2013</A>) Genetic variability in the rat Aplec C-type lectin gene cluster regulates lymphocyte trafficking and motor neuron survival after traumatic nerve root injury. Journal of Neuroinflammation 10:60
+<LI>
+Mulligan MK, Dubose C, Yue J, Miles MF, Lu L, Hamre KM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23847651" target="_blank" class="fwn">2013</A>) Expression, covariation, and genetic regulation of miRNA biogenesis genes in brain supports their role in addiction, psychiatric disorders, and disease. Frontiers in Genetics 4:126
+<LI>
+Swaminathan S, Lu H, Williams RW, Lu L, Jablonski MM (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23582180" target="_blank" class="fwn">2013</A>) Genetic modulation of the iris transillumination defect: a systems genetics analysis using the expanded family of BXD glaucoma strains. Pigment Cell Melanoma Research 26:487-98
+<LI>
+Templeton JP, Wang X, Freeman NE, Ma Z, Lu A, Hejtmancik F, Geisert EE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23978599" target="_blank" class="fwn">2013</A>) A crystallin gene network in the mouse retina. Exp Eye Res. 116C:129-140
+<LI>
+Templeton JP, Freeman NE, Nickerson JM, Jablonski MM, Rex TS, Williams RW, Geisert EE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23493296" target="_blank" class="fwn">2013</A>) Innate immune network in the retina activated by optic nerve crush. Invest Ophthalmol Vis Sci. 54:2599-606
+<LI>
+Vanderlinden LA, Saba LM, Kechris K, Miles MF, Hoffman PL, Tabakoff B (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23894363" target="_blank" class="fwn">2013</A>) Whole brain and brain regional coexpression network interactions associated with predisposition to alcohol consumption. PLoS One 8:e68878.
+
+
-<LI>
-Zhang B, Schmoyer D, Kirov S, Snoddy J (<a href="http://www.pubmedcentral.nih.gov/articlerender.fcgi?tool=pubmed&pubmedid=14975175" target="_blank" class="fwn">2004</a>) GOTree Machine (GOTM): a web-based platform for interpreting sets of interesting genes using Gene Ontology hierarchies. BMC Bioinformatics 5:16. [This reference describes GOTM--the predecessor of WebGestalt that is now used to analyze sets of covarying transcripts.]
</OL>
</Blockquote>
@@ -478,13 +599,90 @@ Zhang B, Schmoyer D, Kirov S, Snoddy J (<a href="http://www.pubmedcentral.nih.go
+<BLOCKQUOTE style="font-size: 14px;">
+ <A NAME="2012" class="subtitle"">GeneNetwork (2012) </A>
+<BLOCKQUOTE>
+
+</Blockquote>
+<OL>
+
+<LI>
+Alberts R, Chen H, Pommerenke C, Smit AB, Spijker S, Williams RW, Geffers R, Bruder D, Schughart K (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22182475" target="_blank" class="fwn">2011</A>) Expression QTL mapping in regulatory and helper T cells from the BXD family of strains reveals novel cell-specific genes, gene-gene interactions and candidate genes for auto-immune disease. BMC Genomics 12:610 <A HREF="http://www.biomedcentral.com/content/pdf/1471-2164-12-610.pdf" target="_blank" class="fwn">PDF version</A>
+<LI>
+Andreux PA, Williams EG, Koutnikova H, Houtkooper RH, Champy MF, Henry H, Schoonjana K, Williams RW, Auwerx J (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Systems genetics of metabolism: the use of the BXD murine reference panel for multiscalar integration of traits. Cell 150:1287-1299
+<LI>
+Boughter JD Jr, Mulligan MK, St John SJ, Tokita K, Lu L, Heck DH, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Genetic control of a central pattern generator: Rhythmic oromotor movement in mice Is controlled by a major locus near Atp1a2. PLoS One 7:e38169. <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0038169" target="_blank" class="fwn"><I>Full Text version</I> </A>
+<LI>
+Bubier JA, Chesler EJ (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22422471" target="_blank" class="fwn">2012</A>) Accelerating discovery for complex neurological and behavioral disorders through systems genetics and integrative genomics in the laboratory mouse. Neurotherapeutics 9:338-348 <A href="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3325414/" target="_blank" class="fwn"><I>Full Text version</I> </A>
+<LI>
+Bryant CD, Kole LA, Guido MA, Sokoloff G, Palmer AA (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Congenic dissection of a major QTL for methamphetamine sensitivity implicates epistasis. Genes, Brain and Behavior 11:623-632 <A href="/images/upload/Bryant_Palmer2012.pdf" target="_blank" class="fwn"><I>PDF version</I> </A>
+<LI>
+Downing C, Balderrama-Durbin C, Kimball A, Biers J, Wright H, Gilliam D, Johnson TE (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22413943" target="_blank" class="fwn">2012</A>) Quantitative trait locus mapping for ethanol teratogenesis in BXD recombinant inbred mice. Alcohol Clin Exp Res. 36:1340-1354
+<LI>
+Durrant C, Swertz MA, Alberts R, Arends D, Möller S, Mott R, Prins P, van der Velde KJ, Jansen RC, Schughart K.(<A HREF="https://ncbi.nlm.nih.gov/pubmed/22396485" target="_blank" class="fwn">2012</A>) Bioinformatics tools and database resources for systems genetics analysis in mice--a short review and an evaluation of future needs. Brief Bioinform 13:135-142 <A HREF="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3294237/" target="_blank" class="fwn">HTML version</A>
+<LI>
+Gini B, Hager R (2012) Recombinant inbred systems can advance research in behavioral ecology. Front. Gene. 3:198 <A HREF="http://www.frontiersin.org/Genetic_Architecture/10.3389/fgene.2012.00198/fullf" target="_blank" class="fwn"><I>Full Text version</I> </A>
+<LI>
+Hager R, Lu L, Rosen GD, Williams RW. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23011133" target="_blank" class="fwn">2012</A>) Genetic architecture supports mosaic brain evolution and independent brain-body size regulation. Nature Communications 3:1079 <A HREF="/images/upload/Hager_Mosaic_NatComm_2012.pdf" target="_blank" class="fwn">PDF version</A> <A href="http://www.nature.com/ncomms/journal/v3/n9/full/ncomms2086.html" target="_blank" class="fwn"><I>Full Text version</I> </A>
+<LI>
+Jellen LC, Unger EL, Lu L, Williams RW, Rousseau S, Wang X, Earley CJ, Allen RP, Miles MF, Jones BC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22457016" target="_blank" class="fwn">2012</A>) Systems genetic analysis of the effects of iron deficiency in mouse brain. Neurogenetics 13:147-157
+<LI>
+McKnite AM, Perez-Munoz ME, Lu L, Williams EG, Brewer S, Andreux PA, Bastiaansen JW, Wang X, Kachman SD, Auwerx J, Williams RW, Benson AK, Peterson DA, Ciobanu DC (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22723961" target="_blank" class="fwn">2012</A>) Murine gut microbiota is defined by host genetics and modulates variation of metabolic traits. PLoS One 7:e39191 <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0039191" target="_blank" class="fwn"><I>Full Text version</I> </A>
+<LI>
+Mulligan MK, Wang X, Adler AL, Mozhui K, Lu L, Williams RW (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Complex control of GABA(A) receptor subunit mRNA expression: variation, covariation, and genetic regulation. PLoS One 7:e34586 <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0034586" target="_blank" class="fwn"><I>Full Text version</I> </A>
+<LI>
+Newbury AJ, Rosen GD (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22666227" target="_blank" class="fwn">2012</A>) Genetic, morphometric, and behavioral factors linked to the midsagittal area of the corpus callosum. Frontiers in Genetics 3:91
+<BR><SMALL> <A HREF="http://www.frontiersin.org/Journal/DownloadFile.ashx?pdf=1&FileId=%204774&articleId=%2027108&Version=%201&ContentTypeId=21&FileName=%20fgene-03-00091.pdf" target="_blank" class="fwn">PDF version</A><A href="http://www.frontiersin.org/Neurogenomics/10.3389/fgene.2012.00091/full" target="_blank" class="fwn"><I>Full Text version</I> </A>
+</SMALL>
+
+
+<LI>
+Parker CC, Cheng R, Sokoloff G, Palmer AA (<A HREF="http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3368015/" target="_blank" class="fwn">2012</A>) Genome-wide association for methamphetamine sensitivity in an advanced intercross mouse line. Genes, Brain & Behavior 11:52-61
+
+<LI>
+Reinius B, Johansson MM, Radomska KJ, Morrow EH, Pandey GK, Kanduri C, Sandberg R, Williams RW, Jazin E (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23140559" target="_blank" class="fwn">2012</A>) Abundance of female-biased and paucity of male-biased somatically expressed genes on the mouse X-chromosome. BMC Genomics 13:607
+<LI>
+Rietman ML, Sommeijer JP; Neuro-Bsik Mouse Phenomics Consortium, Levelt CN, Heimel JA (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22347157" target="_blank" class="fwn">2012</A>) Candidate genes in ocular dominance plasticity. Frontiers in Neuroscience 6:11 <A href="http://www.frontiersin.org/Journal/DownloadFile.ashx?pdf=1&FileId=%202788&articleId=%2014498&Version=%201&ContentTypeId=21&FileName=%20fnins-06-00011.pdf" target="_blank" class="fwn"><I>PDF version</I> </A>
+<LI>
+Talishinsky A, Rosen GD (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Systems genetics of the lateral septal nucleus in mouse: Heritability, genetic control, and covariation with behavioral and morphological traits. PLoS One 7: e44236
+<SMALL><A HREF="http://www.plosone.org/article/fetchObjectAttachment.action;jsessionid=FD5CD26B1104BCD693F22ABD746ED332?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0038169&representation=PDF" target="_blank" class="fwn">PDF version</A><A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0044236" target="_blank" class="fwn"><I>Full Text version</I> </A>
+</SMALL>
+<LI>
+Williams RW, Mulligan MK (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23195314" target="_blank" class="fwn">2012</A>) Genetic and molecular network analysis of behavior. Int Rev Neurobiol. 104:135-57
+<SMALL><A HREF="/images/upload/Williams_Mulligan_Bioinformatics of Brain Short 2012.pdf" target="_blank" class="fwn">PDF version</A>
+</SMALL>
+<LI>
+Wolen AR, Phillips CA, Langston MA, Vorster PJ, Bruce NA, York TP, Williams RW, Miles MF (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22511924" target="_blank" class="fwn">2012</A>) Genetic dissection of acute ethanol responsive gene networks in prefrontal cortex: Functional and mechanistic implications. PLoS One 7:e33575
+<LI>
+Yin L, Unger EL, Jellen LC, Earley CJ, Allen RP, Tomaszewicz A, Fleet JC, Jones BC. (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22461179" target="_blank" class="fwn">2012</A>) Systems genetic analysis of multivariate response to iron deficiency in mice. Am J Physiol Regul Integr Comp Physiol 302:R1282-96
+<SMALL><A HREF="/images/upload/Yin_Jones_2012.pdf" target="_blank" class="fwn">PDF version</A>
+</SMALL>
+<LI>
+Ziebarth JD, Cook MN, Wang X, Williams RW, Lu L, Cui Y (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22675444" target="_blank" class="fwn">2012</A>) Treatment- and population-dependent activity patterns of behavioral and expression QTLs. PLoS One 7:e31805.
+<SMALL><A HREF="http://www.plosone.org/article/fetchObjectAttachment.action?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0031805&representation=PDF" target="_blank" class="fwn">PDF version</A><A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0031805" target="_blank" class="fwn"><I>Full Text version</I> </A>
+<LI>
+Zumbrun EE, Abdeltawab NF, Bloomfield HA, Chance TB, Nichols DK, Harrison PE, Kotb M, Nalca A (<A HREF="https://ncbi.nlm.nih.gov/pubmed/23207275" target="_blank" class="fwn">2012</A>) Development of a murine model for aerosolized ebolavirus infection using a panel of recombinant inbred mice. Viruses. 2012 Dec 3;4(12):3468-3493
+
+
+</SMALL>
+
+
+
+
+
+
+
+
+</OL>
+</Blockquote>
+
-<BLOCKQUOTE class="fs14">
+<BLOCKQUOTE style="font-size: 14px;">
<A NAME="2011" class="subtitle"">GeneNetwork (2011) </A>
<BLOCKQUOTE>
@@ -496,39 +694,37 @@ Zhang B, Schmoyer D, Kirov S, Snoddy J (<a href="http://www.pubmedcentral.nih.go
<LI>
Alberts R, Lu L, Williams RW, Schughart K. (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21535883" target="_blank" class="fwn" >2011</a>) Genome-wide analysis of the mouse lung transcriptome reveals novel molecular gene interaction networks and cell-specific expression signatures. Respir Res 12:61 <A href="http://respiratory-research.com/content/12/1/61" target="_blank" class="fwn"><I>Full Text version</I> </A>
<LI>
-Alberts R, Chen H, Pommerenke C, Smit AB, Spijker S, Williams RW, Geffers R, Bruder D, Schughart K (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22182475" target="_blank" class="fwn">2011</A>) Expression QTL mapping in regulatory and helper T cells from the BXD family of strains reveals novel cell-specific genes, gene-gene interactions and candidate genes for auto-immune disease. BMC Genomics 12:610. <A href="http://www.biomedcentral.com/1471-2164/12/610/abstract" target="_blank" class="fwn"><I>Full Text version</I> </A>
+Alberts R, Chen H, Pommerenke C, Smit AB, Spijker S, Williams RW, Geffers R, Bruder D, Schughart K (<A HREF="https://ncbi.nlm.nih.gov/pubmed/22182475" target="_blank" class="fwn">2011</A>) Expression QTL mapping in regulatory and helper T cells from the BXD family of strains reveals novel cell-specific genes, gene-gene interactions and candidate genes for auto-immune disease. BMC Genomics 12:610 <A href="http://www.biomedcentral.com/1471-2164/12/610/abstract" target="_blank" class="fwn"><I>Full Text version</I> </A>
<LI>
Di Curzio DL, Goldowitz D (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21347846" target="_blank" class="fwn" >2011</a>) The genetic basis of adrenal gland weight and structure in BXD recombinant inbred mice. Mammalian Genome 22:209–234 <A href="/images/upload/DiCurzio_Goldowitz-2011_BXDAdrenals.pdf" target="_blank" class="fwn"><I>Full Text PDF version</I> </A>
<LI>
-Gatti DM, Lu L, Williams RW, Sun W, Wright FA, Threadgill DW, Rusyn I (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21616085" target="_blank" class="fwn" >2011</a>) MicroRNA expression in the livers of inbred mice. Mutat Res 714:126-133
+Gatti DM, Lu L, Williams RW, Sun W, Wright FA, Threadgill DW, Rusyn I (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21616085" target="_blank" class="fwn" >2011</a>) MicroRNA expression in the livers of inbred mice. Mutation Research 714:126-133
<LI>
-Gibson JN, Jellen LC, Unger EL, Morahan G, Mehta M, Earley CJ, Allen RP, Lu L, Jones BC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21732193" target="_blank" class="fwn" >2011</a>) Genetic analysis of iron-deficiency effects on the mouse spleen. Mamm Genome, in press
+Gibson JN, Jellen LC, Unger EL, Morahan G, Mehta M, Earley CJ, Allen RP, Lu L, Jones BC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21732193" target="_blank" class="fwn" >2011</a>) Genetic analysis of iron-deficiency effects on the mouse spleen. Mammalian Genome 22:556-62
<LI>
Hakvoort TB, Moerland PD, Frijters R, Sokolovic A, Labruyère WT, Vermeulen JL, Ver Loren van Themaat E, Breit TM, Wittink FR, van Kampen AH, Verhoeven AJ, Lamers WH, Sokolovic M (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21393243" target="_blank" class="fwn" >2011</a>) Interorgan coordination of the murine adaptive response to fasting. J Biol Chem 286:16332-43
<LI>
-Freeman NE, Templeton JP, Orr WE, Lu L, Williams RW, Geisert EE (2011) Genetic networks in the mouse retina: Growth Associated Protein 43 and Phosphate Tensin Homology network. Molecular Vision 17:1355-1372. <A HREF="http://www.molvis.org/molvis/v17/a153/" target="_blank" class="fs14" ><I>Full Text HTML</I> </A> and <A HREF="http://www.molvis.org/molvis/v17/a153/mv-v17-a153-freeman.pdf" target="_blank" class="fwn" ><I>PDF </I> </A> versions
+Freeman NE, Templeton JP, Orr WE, Lu L, Williams RW, Geisert EE (2011) Genetic networks in the mouse retina: Growth Associated Protein 43 and Phosphate Tensin Homology network. Molecular Vision 17:1355-1372 <A HREF="http://www.molvis.org/molvis/v17/a153/" target="_blank" style="font-size: 14px;" ><I>Full Text HTML</I> </A> and <A HREF="http://www.molvis.org/molvis/v17/a153/mv-v17-a153-freeman.pdf" target="_blank" class="fwn" ><I>PDF </I> </A> versions
<LI>
Jablonski MM, Freeman NE, Orr WE, Templeton JP, Lu L, Williams RW, Geisert EE (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20882406" target="_blank" class="fwn">2011</a>) Genetic pathways regulating glutamate levels in retinal Müller cells. Neurochem Res 36:594-603
<LI>
Jackson KJ, Chen X, Miles MF, Harenza J, Damaj MI (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21796100" target="_blank" class="fwn">2011</a>) The neuropeptide galanin and variants in the <I>GalR1</I> gene are associated with nicotine dependence. Neuropsychopharmacology 36:2339-2348
<LI>
-Jansen R, Timmerman J, Loos M, Spijker S, van Ooyen A, Brussaard AB, Mansvelder HD, The Neuro-Bsik Mouse Phenomics Consortium; Smit AB, de Gunst M, Linkenhaer-Hansen K (<a href="http://www.ncbi.nlm.nih.gov/pubmed/22066001" target="_blank" class="fwn">2011</a>) Novel candidate genes associated with hippocampal oscillations. PLoS One 6: e26586.
+Jansen R, Timmerman J, Loos M, Spijker S, van Ooyen A, Brussaard AB, Mansvelder HD, The Neuro-Bsik Mouse Phenomics Consortium; Smit AB, de Gunst M, Linkenhaer-Hansen K (<a href="http://www.ncbi.nlm.nih.gov/pubmed/22066001" target="_blank" class="fwn">2011</a>) Novel candidate genes associated with hippocampal oscillations. PLoS One 6:e26586.
<A HREF="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0026586" target="_blank" class="fwn"><I>HTML</I></A> and <A HREF="http://www.plosone.org/article/fetchObjectAttachment.action;jsessionid=A7B78346B150E8D613FCBE4DEFBD7155?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0026586&representation=PDF" target="_blank" class="fwn"><I>PDF</I></A> versions
<LI>
Jiao Y, Jiao F, Yan J, Xiong Q, Shriner D, Hasty K, Stuart J, Gu W (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21414240" target="_blank" class="fwn">2011</a>) Identifying a major locus that regulates spontaneous arthritis in IL-1ra-deficient mice and analysis of potential candidates. Genet Res (Camb) 18:1-9
<LI>
Krebs J, Römer D, Overall RW, Fabel K. Babu H, Brandt M, Williams RW, Jessberger S, Kempermann G (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21398278" target="_blank" class="fwn">2011</a>)) Adult hippocampal neurogenesis and plasticity in the infrapyramidal bundle of the mossy fiber projection: II. Genetic covariance and identification of Nos1 as a linking candidate gene. Frontiers in Neuroscience 5:106
<A HREF="http://www.nature.com/tp/journal/v1/n7/pdf/tp201124a.pdf" target="_blank" class="fwn"><I>PDF</I> </A> version
+<A HREF="/images/upload/Jansen_2011_PLoSONE.pdf" target="_blank" class="fwn"><I>PDF</I></A>
<LI>
-Jansen R, Timmerman J, Loos M, Spijker S, van Ooyen A, Brussaard AB, Mansvelder HD, The Neuro-Bsik Mouse Phenomics Consortium; Smit AB, de Gunst M, Linkenhaer-Hansen K (<a href="http://www.ncbi.nlm.nih.gov/pubmed/XXXXX" target="_blank" class="fwn">2011</a>) Novel candidate genes associated with hippocampal oscillations. PLoS One 6: e26586
-<A HREF="/images/upload/Jansen_2011_PLoSONE.pdf" target="_blank" class="fwn"><I>PDF</I>
-<LI>
-Krebs J, Römer B, Overall RW, Fabel K, Babu H, Brandt MD, Williams RW, Jessberger S, Kempermann G (<A HREF="https://ncbi.nlm.nih.gov/pubmed/21960957" target="_blank" class="fwn">2011</A>) Adult hippocampal neurogenesis and plasticity in the infrapyramidal bundle of the mossy fiber projection: II. Genetic covariation and identification of <I>Nos1</I> as linking candidate gene. Front Neurosci 5:106
+Krebs J, Römer B, Overall RW, Fabel K, Babu H, Brandt MD, Williams RW, Jessberger S, Kempermann G (<A HREF="https://ncbi.nlm.nih.gov/pubmed/21960957" target="_blank" class="fwn">2011</A>) Adult hippocampal neurogenesis and plasticity in the infrapyramidal bundle of the mossy fiber projection: II. Genetic covariation and identification of <I>Nos1</I> as linking candidate gene. Frontiers in Neuroscience 5:106
<A HREF="http://www.frontiersin.org/Journal/DownloadFile.ashx?pdf=1&FileId=%202584&articleId=%2011569&Version=%201&ContentTypeId=21&FileName=%20fnins-05-00106.pdf" target="_blank" class="fwn"><I>PDF</I> </A> version
<LI>
-Laughlin RE, Grant TL, Williams RW, Jentsch JD (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21392734" target="_blank" class="fwn">2011</a>) Genetic dissection of behavioral flexibility: reversal learning in mice. Biol Psychiatry 69:1109-16
+Laughlin RE, Grant TL, Williams RW, Jentsch JD (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21392734" target="_blank" class="fwn">2011</a>) Genetic dissection of behavioral flexibility: reversal learning in mice. Biological Psychiatry 69:1109-1116
<LI>
-Lu H, Wang X, Pullen M, Guan H, Chen H, Sahu S, Zhang B, Chen H, Williams RW, Geisert EE, Lu L, Jablonski MM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21398278" target="_blank" class="fwn">2011</a>) Genetic dissection of the Gpnmb network in the eye. Invest Ophthalmol Vis Sci. 52:4132-42
+Lu H, Wang X, Pullen M, Guan H, Chen H, Sahu S, Zhang B, Chen H, Williams RW, Geisert EE, Lu L, Jablonski MM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21398278" target="_blank" class="fwn">2011</a>) Genetic dissection of the Gpnmb network in the eye. Invest Ophthalmol Vis Sci. 52:4132-4142
<LI>
McLachlan SM, Aliesky HA, Chen CR, Williams RW, Rapoport B (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21738647" target="_blank" class="fwn">2011</a>) Exceptional Hyperthyroidism and a role for both major histocompatibility class I and class II genes in a murine model of Graves' disease. PLoS One 6:e21378
<LI>
@@ -544,8 +740,13 @@ Mozhui K, Wang X, Chen J, Mulligan MK, Li Z, Ingles J, Chen X, Lu L and Williams
<LI>
Porcu P, O'Buckley TK, Song SC, Harenza JL, Lu L, Wang X, Williams RW, Miles MF, Morrow AL (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21494628" class="fwn">2010</a>) Genetic analysis of the neurosteroid deoxycorticosterone and its relation to alcohol phenotypes: Identification of QTLs and downstream gene regulation. PLoS One 6:e18405 <A href="http://www.plosone.org/article/info%3Adoi%2F10.1371%2Fjournal.pone.0018405" target="_blank" class="fwn" ><I>Full Text HTML</I> </A> and <A href="/images/upload/Porcu_Morrow_2011.pdf" target="_blank" class="fwn" ><I>PDF </I> </A> versions
<LI>
+Sutcliffe JG, Hedlund PB, Thomas EA, Bloom FE, Hilbush BS (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21374699" target="_blank" class="fwn">2011</a>) Peripheral reduction of β-amyloid is sufficient to reduce brain β-amyloid: implications for Alzheimer's disease. J Neurosci Res. 2011 Jun;89(6):808-14. doi: 10.1002/jnr.22603
+<A HREF="http://onlinelibrary.wiley.com/store/10.1002/jnr.22603/asset/22603_ftp.pdf?v=1&t=h88szz5k&s=096cf28488dc3b3b5e62b2f74c2f9b67e8b02747" target="_blank" class="fwn"><I>PDF</I> </A> version
+
+<LI>
Suwanwela J, Farber CR, Haung B, Song B, Pan C, Lyon KM, Lusis AJ (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20954177" target="_blank" class="fwn">2011</a>) Systems genetics analysis of mouse chondrocyte differentiation. Journal of Bone and Mineral Research 26:74-760
<A HREF="/images/upload/Suwanwela_Lusis_2011.pdf" target="_blank" class="fwn"><I>PDF</I> </A> version
+<LI>Tan T (<A HREF="http://www.genengnews.com/best-of-the-web/genenetwork/2581/" target="_blank" class="fwn">2011</A>) GeneNetwork: Best of the Web. Genetics Engineering & Biotechnology News 31(3)
<LI>
Whitney IE, Raven MA, Lu L, Williams RW, Reese BE (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21330668" target="_blank" class="fwn" >2011</a>) A QTL on chromosome 10 modulates cone photoreceptor number in the mouse retina. Invest Ophthalmol Vis Sci. 52:3228-36
<LI>
@@ -562,7 +763,7 @@ Yamamoto H, Williams EG, Mouchiroud L, Cantó C, Fan W, Downes M, Héligon C, Ba
-<BLOCKQUOTE class="fs14">
+<BLOCKQUOTE style="font-size: 14px;">
<A NAME="2010" class="subtitle"">GeneNetwork (2010) </A>
<BLOCKQUOTE>
@@ -570,7 +771,7 @@ Yamamoto H, Williams EG, Mouchiroud L, Cantó C, Fan W, Downes M, Héligon C, Ba
<OL>
<LI>
-Alberts R, Schughart K (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20950438" target="_blank" class="fwn" >2010</a>) QTLminer: identifying genes regulating quantitative traits.<A href="http://www.biomedcentral.com/1471-2105/11/516" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A>
+Alberts R, Schughart K (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20950438" target="_blank" class="fwn" >2010</a>) QTLminer: identifying genes regulating quantitative traits. BMC Bioinformatics 11:516. <A href="http://www.biomedcentral.com/1471-2105/11/516" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A>
<LI>
Ciobanu DC, Lu L, Mozhui K, Wang X, Morris JA, Taylor WL, Dietz K, Simon P, Williams RW (<a href="http://www.ncbi.nlm.nih.gov/pubmed/19884314" target="_blank" class="fwn">2010</a>) Detection, validation, and downstream analysis of allelic variation in gene expression. Genetics 184: 119-128 <A href="http://www.genetics.org/cgi/reprint/184/1/119" target="_blank" class="fwn"><I>Full Text PDF</I></A>
<LI>
@@ -587,9 +788,10 @@ Li D, Mulligan MK, Wang X, Miles MF, Lu L, Williams RW (<a href="http://www.ncbi
<LI>
Lionikas A, Carlborg O, Lu L; Peirce JL, Williams RW, Yu F, Vogler GP, McClearn GE, Blizard DA <a href="http://www.ncbi.nlm.nih.gov/pubmed/20233743" target="_blank" class="fwn" >2010</a> Genomic analysis of variation in hindlimb musculature of mice from the C57BL/6J and DBA/2J lineage. Journal of Heredity 2010; doi: 10.1093/jhered/esq023. <A href="http://http://jhered.oxfordjournals.org/cgi/reprint/esq023?ijkey=BbuUGMafKrjFO5f&keytype=ref" class="fwn" target="_blank"><I>Full Text PDF Version</I></A>
<LI>
-Loguercio S, Overall RW, Michaelson JJ, Wiltshire T, Pletcher MT, Miller BH, Walker JR, Kempermann G, Su AI, Beyer A <a href="http://www.ncbi.nlm.nih.gov/pubmed/21085707" target="_blank" class="fwn" >2010</a> Integrative analysis of low- and high-resolution eQTL. PLoS One. 2010 Nov 10;5(11):e13920 <A href="http://www.plosone.org/article/fetchObjectAttachment.action;jsessionid=C93DEB44991B6401001E7585AC4C4393.ambra02?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0013920&representation=PDF" class="fwn" target="_blank"><I>Full Text PDF Version</I></A>
+Loguercio S, Overall RW, Michaelson JJ, Wiltshire T, Pletcher MT, Miller BH, Walker JR, Kempermann G, Su AI, Beyer A <a href="http://www.ncbi.nlm.nih.gov/pubmed/21085707" target="_blank" class="fwn" >2010</a> Integrative analysis of low- and high-resolution eQTL. PLoS One 5(11):e13920 <A href="http://www.plosone.org/article/fetchObjectAttachment.action;jsessionid=C93DEB44991B6401001E7585AC4C4393.ambra02?uri=info%3Adoi%2F10.1371%2Fjournal.pone.0013920&representation=PDF" class="fwn" target="_blank"><I>Full Text PDF Version</I></A>
<LI>
-Lynch RM, Naswa S, Rogers Jr GL, Kanla SA, Das S, Chesler EJ, Saxton AM, Langston MA, Voy, BH (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20179155" target="_blank" class="fwn" >2010</a>) Identifying genetic loci and spleen gene coexpression networks underlying immunophenotypes in the BXD recombinant inbred mice. Physiological Genomics 41: 244-253 <A href="/images/upload/BXD_immunophenotypes_2010.pdf" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A>
+Lynch RM, Naswa S, Rogers Jr GL, Kanla SA, Das S, Chesler EJ, Saxton AM, Langston MA, Voy, BH (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20179155" target="_blank" class="fwn" >2010</a>) Identifying genetic loci and spleen gene coexpression networks underlying immunophenotypes in the BXD recombinant inbred mice. Physiological Genomics 41:244-253 <A href="/images/upload/BXD_immunophenotypes_2010.pdf" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A>
+<LI>Lynch RM (<a href="http://trace.tennessee.edu/utk_graddiss/727" target="_blank" class="fwn" >2010</a>) A systems genetics approach to the characterization of differential low dose radiation responses in the BXD recombinant inbred mice. PhD diss., University of Tennessee <a href="http://trace.tennessee.edu/utk_graddiss/727" target="_blank" class="fwn" >http://trace.tennessee.edu/utk_graddiss/727</a>
<LI>
Malkki HA, Donga LA, de Groot SE, Battaglia FP; NeuroBSIK Mouse Phenomics Consortium, Pennartz CM (<a href="http://www.ncbi.nlm.nih.gov/pubmed/21119771" target="_blank" class="fwn" >2010</a>) Appetitive operant conditioning in mice: heritability and dissociability of training stages. Front Behav Neuroscience 4:171 <A href="/images/upload/BXD_immunophenotypes_2010.pdf" target="_blank" class="fwn" ><I>Full Text PDF version</I> </A>
<LI>
@@ -626,7 +828,7 @@ Wang X, Chen Y, Wang X, Lu L. (<a href="http://www.ncbi.nlm.nih.gov/pubmed/20054
</OL>
</Blockquote>
-<BLOCKQUOTE class="fs14">
+<BLOCKQUOTE style="font-size: 14px;">
<A NAME="2009" class="subtitle"">GeneNetwork (2009) </A>
<BLOCKQUOTE>
@@ -716,7 +918,7 @@ Zheng QY, Ding D, Yu H, Salvi RJ, Johnson KR (<a href="http://www.ncbi.nlm.nih.
</Blockquote>
-<BLOCKQUOTE class="fs14">
+<BLOCKQUOTE style="font-size: 14px;">
<A NAME="2008" class="subtitle"">GeneNetwork (2008) </A>
<BLOCKQUOTE>
@@ -867,7 +1069,7 @@ Zhang Y, Maksakova IA, Gagnier L , van de Lagemaat LN, Mager DL (2008) Genome-wi
-<BLOCKQUOTE class="fs14">
+<BLOCKQUOTE style="font-size: 14px;">
<A NAME="2007" class="subtitle"">GeneNetwork (2007) </A>
<BLOCKQUOTE>
@@ -911,7 +1113,7 @@ Fox JG, Barthold SW, Davisson MT, Newcomer CE (<a href="http://books.google.com/
French L, Pavlidis P (<a href="http://bib.oxfordjournals.org/cgi/content/abstract/8/6/446" target="_blank" class="fwn">2007</a>) Informatics in neuroscience. Briefings in Bioinformatics 8:446-456
<LI>
Gatti D, Maki A, Chesler EJ, Kirova R, Kosyk O, Lu L, Manly KF, Williams RW, Perkins A, Langston MA, Threadgill DW, Rusyn I (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17542012" target="_blank" class="fwn">2007</a>) Genome-level analysis of genetic regulation of liver gene expression networks. Hepatology 46:548-557
- <A href="/images/upload/Gatti_Liver2007.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
+ <A href="/images/upload/Gatti_Rusyn_2007.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>
<LI>
Grice DE, Reenila I, Mannisto PT, Brooks Ai, Smith GG, Golden GT, Buxbaum JD, Berrettini WH (2007) Transcriptional profiling of C57 and DBA strains of mice in the absence and presence of morphine. BMC Genomics 8:76
<A href="http://www.biomedcentral.com/content/pdf/1471-2164-8-76.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>,
@@ -998,7 +1200,7 @@ Zou W, Aylor DL, Zeng ZB (<a href="http://www.biomedcentral.com/1471-2105/8/7"
</Blockquote>
-<BLOCKQUOTE class="fs14">
+<BLOCKQUOTE style="font-size: 14px;">
<A NAME="2006" class="subtitle"">GeneNetwork (2006) </A>
<BLOCKQUOTE>
@@ -1091,7 +1293,7 @@ Williams RW (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=pubmed&c
</Blockquote>
-<BLOCKQUOTE class="fs14">
+<BLOCKQUOTE style="font-size: 14px;">
<A NAME="2005" class="subtitle"">GeneNetwork (2005) </A>
<BLOCKQUOTE>
@@ -1154,7 +1356,7 @@ Yang H, Crawford N, Lukes L, Finney R, Lancaster M, Hunter KW (<A HREF="http://w
-<BLOCKQUOTE class="fs14">
+<BLOCKQUOTE style="font-size: 14px;">
<A NAME="2004" class="subtitle"">GeneNetwork (2004) </A>
<BLOCKQUOTE>
@@ -1208,7 +1410,7 @@ Zareparsi S, Hero A, Zack DJ, Williams RW, Swaroop A (<A HREF="http://www.iovs.
-<BLOCKQUOTE class="fs14">
+<BLOCKQUOTE style="font-size: 14px;">
<A NAME="2003" class="subtitle"">GeneNetwork (2003) </A>
<BLOCKQUOTE>
@@ -1241,69 +1443,55 @@ Rosen GD, La Porte NT, Diechtiareff B, Pung, CJ, Nissanov J, Gustafson C, Bertra
</Blockquote>
-<Blockquote class="fwn"><A NAME="Background" class="subtitle">Background references on inbred strains and other key resources</A></P>
+<Blockquote class="fwn"><A NAME="Background" class="subtitle">Background references on inbred strains and other key resources</A>
-
-11737945
-<Blockquote>
+<Blockquote style="font-size: 14px;">
Williams RW, Gu J, Qi S, Lu L (<a href="https://ncbi.nlm.nih.gov/pubmed/11737945" class="fwn" target="_blank">2001</a>) The genetic structure of recombinant inbred mice: high-resolution consensus maps for complex trait analysis. Genome Biology 2:46.1–46.18 <A href="http://genomebiology.com/content/2/11/RESEARCH0046" target="_blank" class="fwn"><I> Full Text HTML and PDF Version</I></A>. [General background on recombinant inbred strains.]
</Blockquote>
-<Blockquote>
+<Blockquote style="font-size: 14px;">
Peirce JL, Lu L, Gu J, Silver LM, Williams RW (<a href="http://www.biomedcentral.com/1471-2156/5/7" target="_blank" class="fwn">2004</a>) A new set of BXD recombinant inbred lines from advanced intercross populations in mice. BMC Genetics 5:7 <A href="http://www.genenetwork.org/pdf/Peirce_and_Lu_2004.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>. [Background on the expanded set of BXD strains.]
</Blockquote>
-<Blockquote>
+<Blockquote style="font-size: 14px;">
Williams RW, Bennett B, Lu L, Gu J, DeFries JC, Carosone-Link PJ, Rikke BA, Belknap JK, Johnson TE (<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=15457343" target="_blank" class="fwn">2004</a>) Genetic structure of the LXS panel of recombinant inbred mouse strains: a powerful resource for complex trait analysis. Mammalian Genome 15:637-647 [Background on origins and the genetic structure large panel of LXS strains. Please cite this paper is you have used LXS data sets.]
</Blockquote>
-<Blockquote>
+<Blockquote style="font-size: 14px;">
Grubb SC, Churchill GA, Bogue MA (<a href="http://www.ncbi.nlm.nih.gov/pubmed/15130929" target="_blank" class="fwn">2004</a>) A collaborative database of inbred mouse strain characteristics. Bioinformatics 20:2857-2859 [One of two key papers on the Mouse Phenome Project and database at The Jackson Laboratory. The mouse diversity panel (MDP) is a superset of strains that are part of the Phenome Project. <a href="http://bioinformatics.oxfordjournals.org/cgi/reprint/20/16/2857" target="_blank" class="fwn"><I>Full Text PDF Version</I></A>.]
</Blockquote>
-<Blockquote>
+<Blockquote style="font-size: 14px;">
Bogue MA, Grubb SC (<a href="http://www.ncbi.nlm.nih.gov/pubmed/15619963" target="_blank" class="fwn">2004</a>) The mouse phenome project. Genetica 122:71-74 [One of two key papers on the Mouse Phenome Project and database at The Jackson Laboratory. The mouse diversity panel (MDP) is a superset of strains that are part of the Phenome Project. Please contact Dr. Molly Bogue for information on the Phenome Project: mollyb@jax.org]
</Blockquote>
-<Blockquote>
+<Blockquote style="font-size: 14px;">
Frazer KA, Eskin E, Kang HM, Bogue MA, Hinds DA, Beilharz EJ, Gupta RV, Montgomery J, Morenzoni MM, Nilsen GB, Pethiyagoda CL, Stuve LL, Johnson FM, Daly MJ, Wade CM, Cox DR (<a href="http://www.ncbi.nlm.nih.gov/pubmed/17660834" target="_blank" class="fwn">2007</a>) A sequence-based variation map of 8.27 million SNPs in inbred mouse strains. Nature 448, 1050-3
</Blockquote>
-<Blockquote>
+<Blockquote style="font-size: 14px;">
Loudet O, Chaillou S, Camilleri C, Bouchez D, Daniel-Vedele F (<A HREF="http://www.inra.fr/qtlat/BayxSha/Loudet2002.pdf" target="_blank" class="fwn">2002</A>) Bay-0 x Shahdara recombinant inbred line population: a powerful tool for the genetic dissection of complex traits in Arabidopsis. Theoretical and Applied Genetics 104:1173-1184 <A HREF="http://www.inra.fr/qtlat/BayxSha/Loudet2002.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> [Please cite this paper is you have used the BXS Arabidopsis data sets.]
</Blockquote>
-<Blockquote>
+<Blockquote style="font-size: 14px;">
Jirout M, Krenova D, Kren V, Breen L, Pravenec M, Schork NJ, Printz MP (<A HREF="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=pubmed&dopt=Abstract&list_uids=12925886&query_hl=3" target="_blank" class="fwn">2003</A>) A new framework marker-based linkage map and SDPs for the rat HXB/BXH strain set. expression differences in mice diverently selected for methamphetamine sensitivity. Mammalian Genome 14: 537-546
</Blockquote>
-<Blockquote>
+<Blockquote style="font-size: 14px;">
Shifman S, Bell JT, Copley BR, Taylor M, Williams RW, Mott R, Flint J (<A HREF="http://biology.plosjournals.org/perlserv/?request=get-document&doi=10.1371/journal.pbio.0040395" target="_blank" class="fwn">2006</A>) A high resolution single nucleotide polymorphism genetic map of the mouse genome. PLoS Biology 4:2227-2237 <A HREF="http://biology.plosjournals.org/archive/1545-7885/4/12/pdf/10.1371_journal.pbio.0040395-L.pdf" target="_blank" class="fwn"><I>Full Text PDF Version</I></A> [A comprehensive analysis of recombination rates using several populations of mice, including most major GRPs.]
</Blockquote>
</Blockquote>
<Blockquote class="subtitle">Information about this HTML page:</P> </Blockquote>
-<Blockquote class="fs14">
+<Blockquote style="font-size: 14px;">
<Blockquote ><P><P>This text originally generated by RWW, April 2003. Updated by RWW, Oct 15, Dec 17, 2004; RWW Jan 19, 2005; EJC Mar 9; RWW Mar 29, Apr 15; RWW Jan 7, 2006, Jan 21, July 26, Aug 26, 2006s; May 2007; Feb 2008; March 19 2008
</P></Blockquote>
</Blockquote>
<P></P>
- </TD>
- </TR></TABLE>
- </TD>
- </TR>
- <TR>
- <TD align=center bgColor=#ddddff class="solidBorder">
- <!--Start of footer-->
- <TABLE width="90%">
- <script language='JavaScript' src='/javascript/footer.js'></script>
- </TABLE>
- <!--End of footer-->
- </TD>
- </TR>
-</TABLE>
+
+
{% endblock %}
diff --git a/wqflask/wqflask/templates/search_error.html b/wqflask/wqflask/templates/search_error.html
index 22416580..7399b377 100644
--- a/wqflask/wqflask/templates/search_error.html
+++ b/wqflask/wqflask/templates/search_error.html
@@ -2,8 +2,6 @@
{% block title %}Search Results{% endblock %}
{% block css %}
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/TableTools/media/css/TableTools.css" />
{% endblock %}
{% block content %}
<!-- Start of body -->
@@ -11,7 +9,8 @@
<div class="container">
<input type="hidden" name="uc_id" id="uc_id" value="{{ uc_id }}">
- <p>You entered at least one incorrect search command.</p>
+ <p>You entered at least one incorrect search command, or your search term was not applicable to the dataset type.</p>
+ <p><i>Some search terms may not be applicable to Phenotype or Genotype datasets (RIF, etc)</i></p>
</div>
<div id="myModal"></div>
diff --git a/wqflask/wqflask/templates/search_result_page.html b/wqflask/wqflask/templates/search_result_page.html
index 718b31d3..33221e0f 100644
--- a/wqflask/wqflask/templates/search_result_page.html
+++ b/wqflask/wqflask/templates/search_result_page.html
@@ -4,18 +4,20 @@
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/scroller.dataTables.min.css">
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.dataTables.css">
+ <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
{% endblock %}
{% block content %}
<!-- Start of body -->
- {{ header("Search Results",
- 'GeneNetwork found {}.'.format(numify(results|count, "record", "records"))) }}
-
- <div style="padding-left: 10px;">
+ <div style="padding-left: 10px; {% if dataset.type == 'Publish' %}min-width: 1000px;{% else %}min-width: 1200px;{% endif %}">
<input type="hidden" name="uc_id" id="uc_id" value="{{ uc_id }}">
+ <div style="padding-top: 10px; padding-bottom: 10px; font-size: 16px;">
<!-- Need to customize text more for other types of searches -->
- <p>We searched <a href="http://genenetwork.org/webqtl/main.py?FormID=sharinginfo&GN_AccessionId={{dataset.id}}">{{ dataset.fullname }}</a>
+ <p><b>Search Results:</b> We searched <a href="http://genenetwork.org/webqtl/main.py?FormID=sharinginfo&{% if dataset.accession_id != 'None' %}GN_AccessionId={{ dataset.accession_id }}{% else %}InfoPageName={{ dataset.name }}{% endif %}">{{ dataset.fullname }}</a>
to find all records
+ {% if go_term is not none %}
+ with <u>Gene Ontology ID</u> <strong>GO:{{ go_term }}</strong>.
+ {% else %}
{% for word in search_terms %}
{% if word.key|lower == "rif" %}
with <u>GeneRIF</u> containing <strong>{{ word.search_term[0] }}</strong>{% if loop.last %}.{% else %} and {% endif %}
@@ -25,90 +27,114 @@
with <u>GeneWiki</u> containing <strong>{{ word.search_term[0] }}</strong>{% if loop.last %}.{% else %} and {% endif %}
{% elif word.key|lower == "mean" %}
with <u>MEAN</u> between <strong>{{ word.search_term[0] }}</strong> and <strong>{{ word.search_term[1] }}</strong>{% if loop.last %}.{% else %} and {% endif %}
- {% elif word.key|lower == "lrs" or word.key|lower == "translrs" or word.key|lower == "cislrs" %}
+ {% elif word.key|lower == "lrs" or word.key|lower == "lod" or word.key|lower == "translrs" or word.key|lower == "cislrs" or word.key|lower == "translod" or word.key|lower == "cislod" %}
{% if word.search_term|length == 1 %}
with {% if word.key|lower == "translrs" %}trans{% elif word.key|lower == "cislrs" %}cis{% endif %}LRS {% if word.separator == ">" %} greater than {% elif word.separator == "<" %} less than {% elif word.separator == ">=" %} greater than or equal to {% elif word.separator == "<=" %} less than or equal to {% endif %} <strong>{{ word.search_term[0] }}</strong>{% if loop.last %}.{% else %} and {% endif %}
{% elif word.search_term|length == 2 %}
- with <u>LRS</u> between <strong>{{ word.search_term[0] }}</strong> and <strong>{{ word.search_term[1] }}</strong>{% if loop.last %}.{% else %} and {% endif %}
+ with <u>{{ word.key|upper }}</u> between <strong>{{ word.search_term[0] }}</strong> and <strong>{{ word.search_term[1] }}</strong>{% if loop.last %}.{% else %} and {% endif %}
{% elif word.search_term|length == 3 %}
- with <u>LRS</u> between <strong>{{ word.search_term[0] }}</strong> and <strong>{{ word.search_term[1] }}</strong> on chromosome <strong>{{ word.search_term[2] }}</strong>{% if loop.last %}.{% else %} and {% endif %}
+ with <u>{{ word.key|upper }}</u> between <strong>{{ word.search_term[0] }}</strong> and <strong>{{ word.search_term[1] }}</strong> on chromosome <strong>{{ word.search_term[2] }}</strong>{% if loop.last %}.{% else %} and {% endif %}
{% elif word.search_term|length == 5 %}
- with <u>LRS</u> between <strong>{{ word.search_term[0] }}</strong> and <strong>{{ word.search_term[1] }}</strong> on chromosome <strong>{{ word.search_term[2] }}</strong> between <strong>{{ word.search_term[3] }}</strong> and <strong>{{ word.search_term[4] }}</strong> Mb{% if loop.last %}.{% else %} and {% endif %}
+ with <u>{{ word.key|upper }}</u> between <strong>{{ word.search_term[0] }}</strong> and <strong>{{ word.search_term[1] }}</strong> on chromosome <strong>{{ word.search_term[2] }}</strong> between <strong>{{ word.search_term[3] }}</strong> and <strong>{{ word.search_term[4] }}</strong> Mb{% if loop.last %}.{% else %} and {% endif %}
{% endif %}
{% elif word.key|lower == "position" %}
with <u>target genes</u> on chromosome <strong>{% if word.search_term[0].split('chr')|length > 1 %}{{ word.search_term[0].split('chr')[1] }}{% elif word.search_term[0].split('CHR')|length > 1 %}{{ word.search_term[0].split('CHR')[1] }}{% else %}{{ word.search_term[0] }}{% endif %}</strong> between <strong>{{ word.search_term[1] }}</strong> and <strong>{{ word.search_term[2] }}</strong> Mb{% if loop.last %}.{% else %} and {% endif %}
{% else %}
- that match the <u>TERM</u> <b>{{ word.search_term[0] }}</b>{% if loop.last %}.{% else %} and {% endif %}
+ {% if word.search_term[0] == "*" %} in the dataset.{% else %}{% if loop.first %}that match:<br>{% endif %}<b>"{{ word.search_term[0] }}"</b>{% if loop.last %}{% else %} and {% endif %}{% endif %}
{% endif %}
{% endfor %}
+ {% endif %}
+ <br>
+ {{ results|count }} records are shown below.
</p>
+ {% if go_term is not none %}
+ <p><b>The associated genes include:</b><br><br>{% for word in search_terms %}{{ word.search_term[0] }}{% endfor %}</p>
+ {% endif %}
- <p>To study a record click on its ID below, and to view the whole description {% if dataset.type == "Publish" %}or list of authors {% endif %} hover over the table cell. Check records below and click Add button to add to selection.</p>
+ <!--<p>To study a record click on its ID below, and to view the whole description {% if dataset.type == "Publish" %}or list of authors {% endif %} hover over the table cell. Check records below and click Add button to add to selection.</p>-->
+
+ <!--<hr style="height: 1px; background-color: #A9A9A9;">-->
+
+ </div>
+
+ <div>
+ <form id="trait_submission_form" target="_blank" action="/corr_matrix" method="post">
+ <input type="hidden" name="tool_used" value="" />
+ <input type="hidden" name="form_url" value="" />
+ <input type="hidden" name="trait_list" id="trait_list" value= "
+ {% for this_trait in trait_list %}
+ {{ this_trait.name }}:{{ this_trait.dataset }},
+ {% endfor %}" >
+
+
+ <button id="corr_matrix" class="btn btn-primary submit_special" data-url="/corr_matrix" title="Correlation Matrix" >
+ Correlations
+ </button>
+
+ <button id="network_graph" class="btn btn-primary submit_special" data-url="/network_graph" title="Network Graph" >
+ Networks
+ </button>
+
+ <button id="send_to_webgestalt" class="btn btn-primary submit_special" data-url="/webgestalt_page" title="WebGestalt" >
+ WebGestalt
+ </button>
+
+ <button id="send_to_geneweaver" class="btn btn-primary submit_special" data-url="/geneweaver_page" title="GeneWeaver" >
+ GeneWeaver
+ </button>
+
+ <button id="send_to_bnw" class="btn btn-primary submit_special" data-url="/bnw_page" title="Bayesian Network" >
+ BNW
+ </button>
+
+ <button id="wgcna_setup" class="btn btn-primary submit_special" data-url="/wgcna_setup" title="WGCNA Analysis" >
+ WGCNA
+ </button>
+
+ <button id="ctl_setup" class="btn btn-primary submit_special" data-url="/ctl_setup" title="CTL Analysis" >
+ CTL Maps
+ </button>
+
+ <button id="heatmap" class="btn btn-primary submit_special" data-url="/heatmap" title="Heatmap" >
+ MultiMap
+ </button>
+
+ <button id="comp_bar_chart" class="btn btn-primary submit_special" data-url="/comparison_bar_chart" title="Comparison Bar Chart" >
+ Comparison Bar Chart
+ </button>
+
+ </form>
+ </div>
<div>
<br />
- <button class="btn btn-default" id="select_all"><span class="glyphicon glyphicon-ok"></span> Select All</button>
- <button class="btn btn-default" id="deselect_all"><span class="glyphicon glyphicon-remove"></span> Deselect All</button>
- <button class="btn btn-default" id="invert"><span class="glyphicon glyphicon-resize-vertical"></span> Invert</button>
- <button class="btn btn-default" id="add" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
- <button id="redraw" class="btn btn-default">Reset Columns</button>
- <input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline;" placeholder="Search This Table For ...">
- <input type="text" id="select_top" class="form-control" style="width: 200px; display: inline;" placeholder="Select Top ...">
- <br />
- <br />
- <form id="export_form" method="POST" action="/export_traits_csv">
+ <form id="export_form" method="POST" action="/export_traits_csv" style="display: inline;">
+ <input type="hidden" name="headers" id="headers" value="{% for field in header_fields %}{{ field }},{% endfor %}">
+ <input type="hidden" name="search_string" id="search_string" value="{{ original_search_string }}">
<input type="hidden" name="database_name" id="database_name" value="{{ dataset.fullname }}">
+ <input type="hidden" name="file_name" id="file_name" value="search_results">
+ <input type="hidden" name="filter_term" id="filter_term" value="None">
+ {% if dataset.accession_id is defined %}
+ <input type="hidden" name="accession_id" id="accession_id" value="{{ dataset.accession_id }}">
+ {% endif %}
<input type="hidden" name="export_data" id="export_data" value="">
+ <button class="btn btn-default" id="select_all" type="button"><span class="glyphicon glyphicon-ok"></span> Select</button>
+ <button class="btn btn-default" id="add" type="button" disabled><span class="glyphicon glyphicon-plus-sign"></span> Add</button>
<button class="btn btn-default" id="export_traits">Download CSV</button>
+ <input type="text" id="searchbox" class="form-control" style="width: 200px; display: inline;" placeholder="Search This Table For ...">
+ <input type="text" id="select_top" class="form-control" style="width: 200px; display: inline;" placeholder="Select Top ...">
+ <button class="btn btn-default" id="deselect_all" type="button"><span class="glyphicon glyphicon-remove"></span> Deselect</button>
</form>
<br />
-<!--
- Removing this until more options are added and work correctly
- {% if dataset.type == 'ProbeSet' %}
- <button class="btn btn-default" id="open_options">Open Extra Options</button>
<br />
- <br />
- <div id="extra_options" style="display:none;">
- Min LRS <input type="text" id="min" class="form-control" style="width: 60px; display: inline;">
- Max LRS <input type="text" id="max" class="form-control" style="width: 60px; display: inline;">
+ <div style="margin-bottom: 5px;">
+ <b>Show/Hide Columns:</b>
</div>
- <br />
- <br />
- {% endif %}
--->
-
- <div id="table_container" style="width: {% if dataset.type == 'ProbeSet' %}1300{% elif dataset.type == 'Publish' %}1200{% elif dataset.type == 'Geno' %}500{% endif %}px;">
- <table class="table table-hover table-striped nowrap" id='trait_table' style="float: left;">
- <thead>
- <tr>
- <th></th>
- {% for header in header_fields %}
- {% if header == 'Max LRS' %}
- <th data-export="Max LRS">Max LRS</th>
- {% elif header == 'Additive Effect' %}
- <th data-export="Additive Effect">Additive <a href="http://genenetwork.org//glossary.html#A" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
- {% else %}
- <th data-export="{{header}}">{{header}}</th>
- {% endif %}
- {% endfor %}
- </tr>
- </thead>
- {% if trait_list|length > 20 %}
- <tfoot>
- <tr>
- <th></th>
- {% for header in header_fields %}
- {% if header == 'Max LRS' %}
- <th data-export="Max LRS">Max LRS</th>
- {% elif header == 'Additive Effect' %}
- <th data-export="Additive Effect">Additive Effect<a href="http://genenetwork.org//glossary.html#A" target="_blank"><sup style="color:#f00"> ?</sup></a></th>
- {% else %}
- <th data-export="{{header}}">{{header}}</th>
- {% endif %}
- {% endfor %}
- </tr>
- </tfoot>
- {% endif %}
+ <div id="table_container">
+ <table class="table-hover table-striped cell-border" id='trait_table' style="float: left;">
+ <tbody>
+ <td colspan="100%" align="center"><br><b><font size="15">Loading...</font></b><br></td>
+ </tbody>
</table>
</div>
</div>
@@ -121,19 +147,35 @@
{% endblock %}
{% block js %}
+ <script language="javascript" type="text/javascript" src="/static/new/js_external/md5.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/javascript/search_results.js"></script>
-
- <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
+
+ <script language="javascript" type="text/javascript" src="https://cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/js_external/jszip.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.buttons.min.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/buttons.colVis.min.js"></script>
-
+
<script type='text/javascript'>
- var json_trait_list = {{ json_trait_list|safe }};
+ var trait_list = {{ trait_list|safe }};
</script>
<script type="text/javascript" charset="utf-8">
+
+ $.fn.dataTable.ext.order['dom-checkbox'] = function ( settings, col )
+ {
+ return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
+ return $('input', td).prop('checked') ? '1' : '0';
+ } );
+ };
+
+ $.fn.dataTable.ext.order['dom-inner-text'] = function ( settings, col )
+ {
+ return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
+ return $(td).text();
+ } );
+ }
+
$(document).ready( function () {
$('#trait_table tr').click(function(event) {
@@ -170,202 +212,244 @@
}
console.time("Creating table");
- {% if dataset.type == 'ProbeSet' %}
//ZS: Need to make sort by symbol, also need to make sure blank symbol fields at the bottom and symbols starting with numbers below letters
+
$('#trait_table').DataTable( {
- "drawCallback": function( settings ) {
+ 'drawCallback': function( settings ) {
$('#trait_table tr').click(function(event) {
- if (event.target.type !== 'checkbox') {
+ if (event.target.type !== 'checkbox' && event.target.tagName.toLowerCase() !== 'a') {
$(':checkbox', this).trigger('click');
}
});
$('.trait_checkbox:checkbox').on("change", change_buttons);
},
- "createdRow": function ( row, data, index ) {
- $('td', row).eq(0).attr('style', 'padding-right: 0px;');
- $('td', row).eq(0).attr('align', 'center');
- $('td', row).eq(1).attr('align', 'right');
+ 'createdRow': function ( row, data, index ) {
+ $('td', row).eq(0).attr("style", "text-align: center; padding: 0px 10px 2px 10px;");
+ $('td', row).eq(1).attr("align", "right");
$('td', row).eq(1).attr('data-export', index+1);
$('td', row).eq(2).attr('data-export', $('td', row).eq(2).text());
+ {% if dataset.type == 'ProbeSet' %}
$('td', row).eq(3).attr('title', $('td', row).eq(3).text());
$('td', row).eq(3).attr('data-export', $('td', row).eq(3).text());
+ if ($('td', row).eq(3).text().length > 20) {
+ $('td', row).eq(3).text($('td', row).eq(3).text().substring(0, 20));
+ $('td', row).eq(3).text($('td', row).eq(3).text() + '...')
+ }
$('td', row).eq(4).attr('title', $('td', row).eq(4).text());
$('td', row).eq(4).attr('data-export', $('td', row).eq(4).text());
- if ($('td', row).eq(4).text().length > 60) {
- $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 60));
- $('td', row).eq(4).text($('td', row).eq(4).text() + '...')
- }
+ $('td', row).slice(5,10).attr("align", "right");
$('td', row).eq(5).attr('data-export', $('td', row).eq(5).text());
- $('td', row).eq(6).attr('align', 'right');
$('td', row).eq(6).attr('data-export', $('td', row).eq(6).text());
- $('td', row).eq(7).attr('align', 'right');
$('td', row).eq(7).attr('data-export', $('td', row).eq(7).text());
$('td', row).eq(8).attr('data-export', $('td', row).eq(8).text());
- $('td', row).eq(9).attr('align', 'right');
$('td', row).eq(9).attr('data-export', $('td', row).eq(9).text());
- },
- "data": json_trait_list,
- "columns": [
- { "type": "natural", "width": "2%" },
- { "type": "natural", "width": "4%" },
- { "type": "natural", "width": "12%" },
- { "type": "natural", "width": "12%" },
- { "type": "natural", "width": "25%" },
- { "type": "natural", "width": "11%" },
- { "type": "natural", "width": "5%" },
- { "type": "natural", "width": "6%" },
- { "type": "natural", "width": "11%" },
- { "type": "natural", "width": "6%" }
- ],
- "columnDefs": [ {
- "targets": 0,
- "orderable": false
- } ],
- "order": [[1, "asc" ]],
- buttons: [
- {
- extend: 'colvis',
- text: 'Show or Hide Columns',
- columns: ':not(:first-child)',
- postfixButtons: [ 'colvisRestore' ]
- }
- ],
- "sDom": "BRZtir",
- "iDisplayLength": -1,
- "autoWidth": false,
- "deferRender": true,
- "bSortClasses": false,
- "scrollY": "600px",
- "scrollCollapse": false,
- "scroller": true,
- "paging": false
- } );
-
- {% elif dataset.type == 'Publish' %}
- $('#trait_table').DataTable( {
- "drawCallback": function( settings ) {
- $('#trait_table tr').click(function(event) {
- if (event.target.type !== 'checkbox') {
- $(':checkbox', this).trigger('click');
- }
- });
- $('.trait_checkbox:checkbox').on("change", change_buttons);
- },
- "createdRow": function ( row, data, index ) {
- $('td', row).eq(1).attr('align', 'right');
- $('td', row).eq(1).attr('data-export', index+1);
- $('td', row).eq(2).attr('data-export', $('td', row).eq(2).text());
+ {% elif dataset.type == 'Publish' %}
$('td', row).eq(3).attr('title', $('td', row).eq(3).text());
$('td', row).eq(3).attr('data-export', $('td', row).eq(3).text());
- if ($('td', row).eq(3).text().length > 50) {
- $('td', row).eq(3).text($('td', row).eq(3).text().substring(0, 50));
- $('td', row).eq(3).text($('td', row).eq(3).text() + '...')
- }
$('td', row).eq(4).attr('title', $('td', row).eq(4).text());
$('td', row).eq(4).attr('data-export', $('td', row).eq(4).text());
- if ($('td', row).eq(4).text().length > 50) {
- $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 50));
- $('td', row).eq(4).text($('td', row).eq(4).text() + '...')
- }
- $('td', row).eq(4).text($('td', row).eq(4).text().substring(0, 30));
- //$('td', row).eq(5).attr('align', 'right');
+ $('td', row).eq(4).attr('align', 'right');
+ $('td', row).slice(6,10).attr("align", "right");
$('td', row).eq(5).attr('data-export', $('td', row).eq(5).text());
- $('td', row).eq(6).attr('align', 'right');
$('td', row).eq(6).attr('data-export', $('td', row).eq(6).text());
$('td', row).eq(7).attr('data-export', $('td', row).eq(7).text());
- $('td', row).eq(8).attr('align', 'right');
$('td', row).eq(8).attr('data-export', $('td', row).eq(8).text());
- },
- "data": json_trait_list,
- "columns": [
- { "type": "natural", "width": "2%" },
- { "type": "natural", "width": "5%" },
- { "type": "natural", "width": "6%" },
- { "type": "natural", "width": "30%" },
- { "type": "natural", "width": "25%" },
- { "type": "natural", "width": "5%" },
- { "type": "natural", "width": "6%" },
- { "type": "natural", "width": "10%" },
- { "type": "natural", "width": "9%" }
- ],
- "columnDefs": [ {
- "targets": 0,
- "orderable": false
- } ],
- "order": [[1, "asc" ]],
- buttons: [
- {
- extend: 'colvis',
- text: 'Show or Hide Columns',
- columns: ':not(:first-child)',
- postfixButtons: [ 'colvisRestore' ]
- }
- ],
- "sDom": "BRZtir",
- "iDisplayLength": -1,
- "autoWidth": false,
- "deferRender": true,
- "bSortClasses": false,
- "scrollY": "600px",
- "scrollCollapse": true,
- "scroller": true,
- "paging": false
- } );
- {% elif dataset.type == 'Geno' %}
- $('#trait_table').DataTable( {
- "drawCallback": function( settings ) {
- $('#trait_table tr').click(function(event) {
- if (event.target.type !== 'checkbox') {
- $(':checkbox', this).trigger('click');
- }
- });
- $('.trait_checkbox:checkbox').on("change", change_buttons);
- },
- "createdRow": function ( row, data, index ) {
- $('td', row).eq(1).attr('align', 'right');
- $('td', row).eq(1).attr('data-export', index+1);
- $('td', row).eq(2).attr('data-export', $('td', row).eq(2).text());
+ $('td', row).eq(9).attr('data-export', $('td', row).eq(8).text());
+ {% elif dataset.type == 'Geno' %}
$('td', row).eq(3).attr('data-export', $('td', row).eq(3).text());
+ {% endif %}
},
- "data": json_trait_list,
- "columns": [
- { "type": "natural", "width": "8%" },
- { "type": "natural", "width": "12%" },
- { "type": "natural", "width": "40%" },
- { "type": "natural", "width": "40%"}
+ 'data': trait_list,
+ 'columns': [
+ {
+ 'data': null,
+ 'width': "30px",
+ 'orderDataType': "dom-checkbox",
+ 'orderSequence': [ "desc", "asc"],
+ 'render': function(data, type, row, meta) {
+ return '<input type="checkbox" name="searchResult" class="checkbox trait_checkbox" value="' + data.hmac + '">'
+ }
+ },
+ {
+ 'title': "Index",
+ 'type': "natural",
+ 'width': "30px",
+ 'data': "index"
+ },
+ {
+ 'title': "Record",
+ 'type': "natural",
+ 'data': null,
+ 'width': "60px",
+ 'orderDataType': "dom-inner-text",
+ 'render': function(data, type, row, meta) {
+ return '<a target="_blank" href="/show_trait?trait_id=' + data.name + '&dataset=' + data.dataset + '">' + data.display_name + '</a>'
+ }
+ }{% if dataset.type == 'ProbeSet' %},
+ {
+ 'title': "Symbol",
+ 'type': "natural",
+ 'data': "symbol"
+ },
+ {
+ 'title': "Description",
+ 'type': "natural",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ try {
+ return decodeURIComponent(escape(data.description))
+ } catch(err){
+ return escape(data.description)
+ }
+ }
+ },
+ {
+ 'title': "Location",
+ 'type': "natural",
+ 'width': "120px",
+ 'data': "location"
+ },
+ {
+ 'title': "Mean",
+ 'type': "natural",
+ 'width': "40px",
+ 'data': "mean",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Max LRS<a href=\"http://genenetwork.org//glossary.html#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
+ 'type': "natural",
+ 'data': "lrs_score",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Max LRS Location",
+ 'type': "natural",
+ 'width': "120px",
+ 'data': "lrs_location"
+ },
+ {
+ 'title': "Additive Effect<a href=\"http://genenetwork.org//glossary.html#A\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
+ 'type': "natural",
+ 'data': "additive",
+ 'orderSequence': [ "desc", "asc"]
+ }{% elif dataset.type == 'Publish' %},
+ {
+ 'title': "Description",
+ 'type': "natural",
+ 'width': "800px",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ try {
+ return decodeURIComponent(escape(data.description))
+ } catch(err){
+ return data.description
+ }
+ }
+ },
+ {
+ 'title': "Mean",
+ 'type': "natural",
+ 'width': "110px",
+ 'data': "mean",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Authors",
+ 'type': "natural",
+ 'width': "500px",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ author_list = data.authors.split(",")
+ if (author_list.length >= 6) {
+ author_string = author_list.slice(0, 6).join(",") + ", et al."
+ } else{
+ author_string = data.authors
+ }
+ try {
+ return decodeURIComponent(escape(author_string))
+ } catch(err){
+ return author_string
+ }
+ }
+ },
+ {
+ 'title': "Year",
+ 'type': "natural",
+ 'orderDataType': "dom-inner-text",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.pubmed_id != "N/A"){
+ return '<a href="' + data.pubmed_link + '">' + data.pubmed_text + '</a>'
+ } else {
+ return data.pubmed_text
+ }
+ },
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Max LRS<a href=\"http://genenetwork.org//glossary.html#LRS\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
+ 'type': "natural",
+ 'data': "lrs_score",
+ 'orderSequence': [ "desc", "asc"]
+ },
+ {
+ 'title': "Max LRS Location",
+ 'type': "natural",
+ 'width': "200px",
+ 'data': "lrs_location"
+ },
+ {
+ 'title': "Additive<br>Effect<a href=\"http://genenetwork.org//glossary.html#A\" target=\"_blank\" style=\"color: white;\"><sup>?</sup></a>",
+ 'type': "natural",
+ 'width': "100px",
+ 'data': "additive",
+ 'orderSequence': [ "desc", "asc"]
+ }{% elif dataset.type == 'Geno' %},
+ {
+ 'title': "Location",
+ 'type': "natural",
+ 'width': "160px",
+ 'data': "location"
+ }{% endif %}
],
- "columnDefs": [ {
- "targets": 0,
- "orderable": false
- } ],
"order": [[1, "asc" ]],
buttons: [
{
- extend: 'colvis',
- text: 'Show or Hide Columns',
- columns: ':not(:first-child)',
+ extend: 'columnsToggle',
+ columns: function( idx, data, node ) {
+ if (idx != 0) {
+ return true;
+ } else {
+ return false;
+ }
+ },
postfixButtons: [ 'colvisRestore' ]
}
],
- "sDom": "BRZtir",
- "iDisplayLength": -1,
- "autoWidth": false,
- "deferRender": true,
- "bSortClasses": false,
- "scrollY": "600px",
- "scrollCollapse": true,
- "scroller": true,
- "paging": false
+ 'sDom': "Bitir",
+ 'deferRender': true,
+ 'paging': false,
+ 'orderClasses': true,
+ 'processing': true,
+ 'language': {
+ 'loadingRecords': '&nbsp;',
+ 'processing': 'Loading...'
+ }
} );
- {% endif %}
+
console.timeEnd("Creating table");
- var table = $('#trait_table').DataTable();
$('#redraw').click(function() {
var table = $('#trait_table').DataTable();
table.colReorder.reset()
});
+ submit_special = function(url) {
+ $("#trait_submission_form").attr("action", url);
+ return $("#trait_submission_form").submit();
+ };
+
});
</script>
{% endblock %}
diff --git a/wqflask/wqflask/templates/show_trait.html b/wqflask/wqflask/templates/show_trait.html
index 772c4314..27c3e398 100644
--- a/wqflask/wqflask/templates/show_trait.html
+++ b/wqflask/wqflask/templates/show_trait.html
@@ -1,35 +1,27 @@
{% extends "base.html" %}
{% block title %}Trait Data and Analysis{% endblock %}
{% block css %}
- <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/bar_chart.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/box_plot.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/prob_plot.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/scatter-matrix.css" />
<link rel="stylesheet" type="text/css" href="/static/new/css/d3-tip.min.css" />
- <link rel="stylesheet" type="text/css" href="/static/new/packages/nvd3/nv.d3.css" />
<link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
<link rel="stylesheet" type="text/css" href="/static/new/packages/noUiSlider/nouislider.css" />
<link rel="stylesheet" type="text/css" href="/static/new/packages/noUiSlider/nouislider.pips.css" />
- <link rel="stylesheet" type="text/css" href="/static/packages/DT_bootstrap/DT_bootstrap.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/show_trait.css" />
{% endblock %}
{% block content %} <!-- Start of body -->
-<!--
- {% if this_trait.dataset.type != 'Geno' %}
- {{ header("{}".format(this_trait.name_header_fmt),
- '{}: {}'.format(this_trait.name, this_trait.description_fmt)) }}
- {% else %}
- {{ header("{}".format(this_trait.name_header_fmt)) }}
- {% endif %}
--->
<div class="container">
- <h2>Trait Data and Analysis for <b>{{ this_trait.name }}</b></h2>
- <h3>{{ this_trait.description_fmt }}</h3>
+ <h2>Trait Data and Analysis for <b>{{ this_trait.display_name }}</b></h2>
+ {% if this_trait.dataset.type != 'Publish' %}
+ <h3>{{ this_trait.description_fmt[0]|upper }}{{ this_trait.description_fmt[1:] }}</h3>
+ {% endif %}
</div>
- <form method="post" action="/corr_compute" target="_blank" name="trait_page" id="trait_data_form"
+ <form method="post" action="" target="_blank" name="trait_page" id="trait_data_form"
class="form-horizontal">
<div id="hidden_inputs">
<input type="hidden" name="trait_hmac" value="{{ data_hmac('{}:{}'.format(this_trait.name, dataset.name)) }}">
@@ -39,9 +31,14 @@
</div>
<input type="hidden" name="temp_uuid" id="temp_uuid" value="{{ temp_uuid }}">
+ <input type="hidden" name="tool_used" value="">
+ <input type="hidden" name="form_url" value="">
+ <input type="hidden" name="wanted_inputs" value="">
<input type="hidden" name="genofile" value="">
+ <input type="hidden" name="covariates" value="">
+ <input type="hidden" name="transform" value="">
- <div class="container">
+ <div class="container" style="min-width: 1450px;">
<div class="panel-group" id="accordion">
<div class="panel panel-default">
<div class="panel-heading" data-toggle="collapse" data-parent="#accordion" data-target="#collapseOne" aria-expanded="true">
@@ -56,7 +53,7 @@
</div>
</div>
<div class="panel panel-default">
- <div class="panel-heading" data-toggle="collapse" data-parent="#accordion" data-target="#collapseTwo">
+ <div class="panel-heading stats_panel" data-toggle="collapse" data-parent="#accordion" data-target="#collapseTwo">
<h3 class="panel-title">
<span class="glyphicon glyphicon-chevron-down"></span> Statistics
</h3>
@@ -66,26 +63,38 @@
{% include 'show_trait_statistics.html' %}
</div>
</div>
- </div>
+ </div>
<div class="panel panel-default">
<div class="panel-heading" data-toggle="collapse" data-parent="#accordion" data-target="#collapseThree">
<h3 class="panel-title">
- <span class="glyphicon glyphicon-chevron-down"></span> Calculate Correlations
+ <span class="glyphicon glyphicon-chevron-down"></span> Transform and Filter Data
</h3>
</div>
<div id="collapseThree" class="panel-collapse collapse in">
<div class="panel-body">
+ {% include 'show_trait_transform_and_filter.html' %}
+ </div>
+ </div>
+ </div>
+ <div class="panel panel-default">
+ <div class="panel-heading" data-toggle="collapse" data-parent="#accordion" data-target="#collapseFour">
+ <h3 class="panel-title">
+ <span class="glyphicon glyphicon-chevron-down"></span> Calculate Correlations
+ </h3>
+ </div>
+ <div id="collapseFour" class="panel-collapse collapse in">
+ <div class="panel-body">
{% include 'show_trait_calculate_correlations.html' %}
</div>
</div>
</div>
<div class="panel panel-default">
- <div class="panel-heading" data-toggle="collapse" data-parent="#accordion" data-target="#collapseFour">
+ <div class="panel-heading" data-toggle="collapse" data-parent="#accordion" data-target="#collapseFive">
<h3 class="panel-title">
<span class="glyphicon glyphicon-chevron-down"></span> Mapping Tools
</h3>
</div>
- <div id="collapseFour" class="panel-collapse collapse in">
+ <div id="collapseFive" class="panel-collapse collapse in">
<div class="panel-body">
{% include 'show_trait_mapping_tools.html' %}
</div>
@@ -93,12 +102,12 @@
</div>
</div>
<div class="panel panel-default">
- <div class="panel-heading" data-toggle="collapse" data-parent="#accordion" data-target="#collapseFive" aria-expanded="true">
+ <div class="panel-heading" data-toggle="collapse" data-parent="#accordion" data-target="#collapseSix" aria-expanded="true">
<h3 class="panel-title">
<span class="glyphicon glyphicon-chevron-up"></span> Review and Edit Data
</h3>
</div>
- <div id="collapseFive" class="panel-collapse collapse" aria-expanded="true">
+ <div id="collapseSix" class="panel-collapse collapse" aria-expanded="true">
<div class="panel-body">
{% include 'show_trait_edit_data.html' %}
</div>
@@ -120,77 +129,76 @@
$('.collapse').collapse()
</script>
- <script type="text/javascript" src="http://d3js.org/d3.v3.min.js"></script>
- <script type="text/javascript" src="/static/new/packages/nvd3/nv.d3.js"></script>
+ <script type="text/javascript" src="https://d3js.org/d3.v3.min.js"></script>
<script type="text/javascript" src="/static/new/js_external/underscore-min.js"></script>
<script type="text/javascript" src="/static/new/js_external/underscore.string.min.js"></script>
<script type="text/javascript" src="/static/new/js_external/d3-tip.min.js"></script>
<script type="text/javascript" src="/static/new/js_external/jstat.min.js"></script>
<script type="text/javascript" src="/static/new/js_external/shapiro-wilk.js"></script>
+ <script type="text/javascript" src="/static/new/js_external/plotly-latest.min.js"></script>
<script type="text/javascript" src="/static/new/javascript/colorbrewer.js"></script>
<script type="text/javascript" src="/static/new/javascript/stats.js"></script>
- <script type="text/javascript" src="/static/new/javascript/box.js"></script>
- <script type="text/javascript" src="/static/new/javascript/bar_chart.js"></script>
- <script type="text/javascript" src="/static/new/javascript/histogram.js"></script>
- <script type="text/javascript" src="/static/new/javascript/box_plot.js"></script>
- <script type="text/javascript" src="/static/new/javascript/scatterplot.js"></script>
<script type="text/javascript" src="/static/new/javascript/scatter-matrix.js"></script>
- <script type="text/javascript" src="/static/new/javascript/draw_probability_plot.js"></script>
- <script type="text/javascript" src="/static/new/javascript/compare_traits_scatterplot.js"></script>
-
+ <script type="text/javascript" src="/static/new/javascript/plotly_probability_plot.js"></script>
+ <script type="text/javascript" src="/static/new/javascript/compare_traits_scatterplot.js"></script>
+
<script type="text/javascript" src="/static/new/javascript/show_trait_mapping_tools.js"></script>
<script type="text/javascript" src="/static/new/javascript/show_trait.js"></script>
- <script type="text/javascript" src="/static/new/javascript/get_traits_from_collection.js"></script>
<script type="text/javascript" src="/static/new/javascript/validation.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/jsPDF/libs/FileSaver.js/FileSaver.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/jsPDF/libs/Blob.js/BlobBuilder.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/jsPDF/jspdf.plugin.standard_fonts_metrics.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/jsPDF/jspdf.plugin.from_html.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.scientific.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colResize.js"></script>
- <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/extensions/dataTables.colReorder.js"></script>
<script language="javascript" type="text/javascript" src="/static/new/packages/noUiSlider/nouislider.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/get_covariates_from_collection.js"></script>
+
<script type="text/javascript" charset="utf-8">
+
+ $.fn.dataTable.ext.order['dom-checkbox'] = function ( settings, col )
+ {
+ return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {
+ return $('input', td).prop('checked') ? '1' : '0';
+ } );
+ };
- function getValue(x) {
- if (x.indexOf('input') >= 0) {
- if ($(x).val() == 'x') {
- return 'x'
- }
- else {
- return parseFloat($(x).val());
- }
+ function getValue(x) {
+ if (x == 'x') {
+ return "x";
+ }
+ else {
+ return parseFloat(x);
}
- return parseFloat(x);
}
-
- jQuery.fn.dataTableExt.oSort['cust-txt-asc'] = function (a, b) {
- var x = getValue(a);
- var y = getValue(b);
- return ((x < y) ? -1 : ((x > y) ? 1 : 0));
- };
-
- jQuery.fn.dataTableExt.oSort['cust-txt-desc'] = function (a, b) {
+
+ $.fn.dataTable.ext.order['dom-input'] = function (settings, col) {
+ return this.api().column(col, { order: 'index' }).nodes().map(function (td, i) {
+ return $('input', td).val();
+ });
+ }
+
+ $.fn.dataTableExt.oSort['cust-txt-asc'] = function (a, b) {
var x = getValue(a);
var y = getValue(b);
- if (x == 'x') {
+ if (x == 'x' || x === '') {
return 1;
}
- else if (y == 'x') {
+ else if (y == 'x' || y === '') {
return -1;
}
else {
- return ((x < y) ? 1 : ((x > y) ? -1 : 0));
+ return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}
};
-
- $(document).ready( function () {
+ $.fn.dataTableExt.oSort['cust-txt-desc'] = function (a, b) {
+ var x = getValue(a);
+ var y = getValue(b);
+ return ((x < y) ? 1 : ((x > y) ? -1 : 0));
+ };
+
+ $(document).ready( function () {
$('.panel-heading').click(function () {
if ($(this).hasClass('collapsed')){
$(this).find('.glyphicon-chevron-down').removeClass('glyphicon-chevron-down').addClass('glyphicon-chevron-up');
@@ -200,71 +208,332 @@
}
});
- $('#samples_primary, #samples_other').find("tr.outlier").css('background-color', 'yellow')
- {% if sample_groups[0].se_exists() %}
- $('#samples_primary, #samples_other').DataTable( {
- "columns": [
- { "bSortable": false },
- { "type": "natural" },
- { "type": "natural" },
- { "type": "cust-txt" },
- { "bSortable": false },
- { "type": "cust-txt" }{% if sample_groups[0].attributes|length > 0 %},{% endif %}
- {% for attribute in sample_groups[0].attributes %}
- { "type": "natural" }{% if loop.index < sample_groups[0].attributes|length %},{% endif %}
- {% endfor %}
- ],
- "columnDefs": [ {
- "targets": 0,
- "orderable": false
- } ],
- "order": [[1, "asc" ]],
- "sDom": "RZtr",
- "iDisplayLength": -1,
- "autoWidth": false,
- "bLengthChange": true,
- "bDeferRender": true,
- "bSortClasses": false,
- "scrollY": "600px",
- "scrollCollapse": false,
- "colResize": {
- "tableWidthFixed": false
+ //ZS: This variable is just created to get the column position of the first case attribute, since it's needed to set the row classes in createdRow for the DataTable
+ {% if sample_groups[0].attributes|length > 0 %}
+ {% if sample_groups[0].se_exists() %}
+ {% if has_num_cases %}
+ attribute_start_pos = 6
+ {% else %}
+ attribute_start_pos = 5
+ {% endif %}
+ {% else %}
+ {% if has_num_cases %}
+ attribute_start_pos = 4
+ {% else %}
+ attribute_start_pos = 3
+ {% endif %}
+ {% endif %}
+ {% endif %}
+
+ var primary_table = $('#samples_primary').DataTable( {
+ 'initComplete': function(settings, json) {
+ $('.edit_sample_value').change(function() {
+ edit_data_change();
+ });
+ },
+ 'createdRow': function ( row, data, index ) {
+ $(row).attr('id', "Primary_" + data.this_id)
+ $(row).addClass("value_se");
+ if (data.outlier) {
+ $(row).addClass("outlier");
+ }
+ $('td', row).eq(0).attr("align", "center");
+ $('td', row).eq(0).attr("style", "padding: 2px 0px 0px 2px;");
+ $('td', row).eq(1).addClass("column_name-Index")
+ $('td', row).eq(1).attr("align", "right");
+ $('td', row).eq(1).attr("style", "padding: 2px 4px 0px 2px;");
+ $('td', row).eq(2).addClass("column_name-Sample")
+ $('td', row).eq(3).addClass("column_name-Value")
+ $('td', row).eq(3).attr("style", "text-align: right; padding-top: 2px; padding-bottom: 0px;");
+ {% if sample_groups[0].se_exists() %}
+ $('td', row).eq(4).attr("align", "center");
+ $('td', row).eq(4).attr("style", "padding-left: 2px; padding-right: 2px;");
+ $('td', row).eq(5).addClass("column_name-SE")
+ $('td', row).eq(5).attr("style", "text-align: right; padding-top: 2px; padding-bottom: 0px;");
+ {% if has_num_cases %}
+ $('td', row).eq(6).addClass("column_name-num_cases")
+ $('td', row).eq(6).attr("style", "text-align: right; padding-top: 2px; padding-bottom: 0px;");
+ {% endif %} {% else %} {% if has_num_cases %}
+ $('td', row).eq(4).addClass("column_name-num_cases")
+ $('td', row).eq(4).attr("style", "text-align: right; padding-top: 2px; padding-bottom: 0px;");
+ {% endif %} {% endif %}
+ {% if sample_groups[0].attributes|length > 0 %}
+ {% for attribute in sample_groups[0].attributes|sort() %}
+ $('td', row).eq(attribute_start_pos + {{ loop.index }}).addClass("column_name-{{ sample_groups[0].attributes[attribute].name }}")
+ $('td', row).eq(attribute_start_pos + {{ loop.index }}).attr("style", "text-align: {{ sample_groups[0].attributes[attribute].alignment }}; padding-top: 2px; padding-bottom: 0px;")
+ {% endfor %}
+ {% endif %}
+ },
+ 'data': js_data['sample_lists'][0],
+ 'columns': [
+ {
+ 'data': null,
+ 'orderDataType': "dom-checkbox",
+ 'searchable' : false,
+ 'render': function(data, type, row, meta) {
+ return '<input type="checkbox" name="searchResult" style="min-height: 20px;" class="checkbox edit_sample_checkbox" value="">'
+ }
+ },
+ {
+ 'title': "ID",
+ 'type': "natural",
+ 'searchable' : false,
+ 'data': "this_id"
},
- "paging": false
+ {
+ 'title': "Sample",
+ 'type': "natural",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ return '<span class="edit_sample_sample_name">' + data.name + '</span>'
+ }
+ },
+ {
+ 'title': "<div style='text-align: right;'>Value</div>",
+ 'orderDataType': "dom-input",
+ 'type': "cust-txt",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.value == null) {
+ return '<input type="text" data-value="x" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_value" value="x" size=6 maxlength=6>'
+ } else {
+ return '<input type="text" data-value="' + data.value.toFixed(3) + '" data-qnorm="' + js_data['qnorm_values'][0][parseInt(data.this_id) - 1] + '" data-zscore="' + js_data['zscore_values'][0][parseInt(data.this_id) - 1] + '" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_value" value="' + data.value.toFixed(3) + '" size=6 maxlength=6>'
+ }
+ }
+ }{% if sample_groups[0].se_exists() %},
+ {
+ 'bSortable': false,
+ 'type': "natural",
+ 'data': null,
+ 'searchable' : false,
+ 'render': function(data, type, row, meta) {
+ return '±'
+ }
+ },
+ {
+ 'title': "<div style='text-align: right;'>SE</div>",
+ 'orderDataType': "dom-input",
+ 'type': "cust-txt",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.variance == null) {
+ return '<input type="text" data-value="x" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_se" value="x" size=6 maxlength=6>'
+ } else {
+ return '<input type="text" data-value="' + data.variance.toFixed(3) + '" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_se" value="' + data.variance.toFixed(3) + '" size=6 maxlength=6>'
+ }
+ }
+ }{% endif %}{% if has_num_cases %},
+ {
+ 'title': "<div style='text-align: right;'>N</div>",
+ 'orderDataType': "dom-input",
+ 'type': "cust-txt",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.num_cases == null || data.num_cases == undefined) {
+ return '<input type="text" data-value="x" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_num_cases" value="x" size=4 maxlength=4>'
+ } else {
+ return '<input type="text" data-value="' + data.num_cases + '" data-qnorm="x" data-zscore="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_num_cases" value="' + data.num_cases + '" size=4 maxlength=4>'
+ }
+ }
+ }{% endif %}{% if sample_groups[0].attributes|length > 0 %}{% for attribute in sample_groups[0].attributes|sort() %},
+ {
+ 'title': "<div style='text-align: {{ sample_groups[0].attributes[attribute].alignment }}'>{{ sample_groups[0].attributes[attribute].name }}</div>",
+ 'type': "natural",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.extra_attributes['{{ sample_groups[0].attributes[attribute].name }}'] != null && data.extra_attributes['{{ sample_groups[0].attributes[attribute].name }}'] != undefined){
+ return data.extra_attributes['{{ sample_groups[0].attributes[attribute].name }}']
+ } else {
+ return ""
+ }
+ }
+ }{% endfor %}{% endif %}
+ ],
+ 'order': [[1, "asc"]],
+ 'sDom': "Ztr",
+ 'autoWidth': true,
+ 'deferRender': true,
+ 'paging': false,
+ 'orderClasses': true,
+ 'scrollY': "600px",
+ 'scrollCollapse': false,
+ 'processing': true,
+ 'language': {
+ 'loadingRecords': '&nbsp;',
+ 'processing': 'Loading...'
+ }
} );
- {% else %}
-
- $('#samples_primary, #samples_other').DataTable( {
- "columns": [
- { "bSortable": false, "width": "8%" },
- { "type": "natural", "width": "15%" },
- { "type": "natural", "width": "25%" },
- { "type": "cust-txt", "width": "25%" }{% if sample_groups[0].attributes|length > 0 %},{% endif %}
- {% for attribute in sample_groups[0].attributes %}
- { "type": "natural" }{% if loop.index < sample_groups[0].attributes|length %},{% endif %}
- {% endfor %}
- ],
- "columnDefs": [ {
- "targets": 0,
- "orderable": false
- } ],
- "order": [[1, "asc" ]],
- "sDom": "RZtr",
- "iDisplayLength": -1,
- "autoWidth": false,
- "bLengthChange": true,
- "bDeferRender": true,
- "bSortClasses": false,
- "scrollY": "600px",
- "scrollCollapse": false,
- "colResize": {
- "tableWidthFixed": false
+ primary_table.on( 'order.dt search.dt draw.dt', function () {
+ primary_table.column(1, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {
+ cell.innerHTML = i+1;
+ } );
+ } ).draw();
+
+ $('#primary_searchbox').on( 'keyup', function () {
+ primary_table.search($(this).val()).draw();
+ } );
+
+ {% if sample_groups|length != 1 %}
+ var other_table = $('#samples_other').DataTable( {
+ 'initComplete': function(settings, json) {
+ $('.edit_sample_value').change(function() {
+ edit_data_change();
+ });
+ },
+ 'createdRow': function ( row, data, index ) {
+ $(row).attr('id', "Other_" + data.this_id)
+ $(row).addClass("value_se");
+ if (data.outlier) {
+ $(row).addClass("outlier");
+ }
+ $('td', row).eq(0).attr("align", "center");
+ $('td', row).eq(0).attr("style", "padding: 2px 0px 0px 2px;");
+ $('td', row).eq(1).addClass("column_name-Index")
+ $('td', row).eq(1).attr("align", "right");
+ $('td', row).eq(1).attr("style", "padding: 2px 4px 0px 2px;");
+ $('td', row).eq(2).addClass("column_name-Sample")
+ $('td', row).eq(3).addClass("column_name-Value")
+ $('td', row).eq(3).attr("style", "text-align: right; padding-top: 2px; padding-bottom: 0px;");
+ {% if sample_groups[1].se_exists() %}
+ $('td', row).eq(4).attr("align", "center");
+ $('td', row).eq(4).attr("style", "padding-left: 2px; padding-right: 2px;");
+ $('td', row).eq(5).addClass("column_name-SE")
+ $('td', row).eq(5).attr("style", "text-align: right; padding-top: 2px; padding-bottom: 0px;");
+ {% if has_num_cases %}
+ $('td', row).eq(6).addClass("column_name-num_cases")
+ $('td', row).eq(6).attr("style", "text-align: right; padding-top: 2px; padding-bottom: 0px;");
+ {% endif %} {% else %} {% if has_num_cases %}
+ $('td', row).eq(4).addClass("column_name-num_cases")
+ $('td', row).eq(4).attr("style", "text-align: right; padding-top: 2px; padding-bottom: 0px;");
+ {% endif %} {% endif %}
+ {% if sample_groups[1].attributes|length > 0 %}
+ {% for attribute in sample_groups[1].attributes|sort() %}
+ $('td', row).eq(attribute_start_pos + {{ loop.index }}).addClass("column_name-{{ sample_groups[1].attributes[attribute].name }}")
+ $('td', row).eq(attribute_start_pos + {{ loop.index }}).attr("style", "text-align: {{ sample_groups[1].attributes[attribute].alignment }}; padding-top: 2px; padding-bottom: 0px;")
+ {% endfor %}
+ {% endif %}
+ },
+ 'data': js_data['sample_lists'][1],
+ 'columns': [
+ {
+ 'data': null,
+ 'orderDataType': "dom-checkbox",
+ 'searchable' : false,
+ 'render': function(data, type, row, meta) {
+ return '<input type="checkbox" name="searchResult" style="min-height: 20px;" class="checkbox edit_sample_checkbox" value="">'
+ }
+ },
+ {
+ 'title': "ID",
+ 'type': "natural",
+ 'data': "this_id",
+ 'searchable' : false
+ },
+ {
+ 'title': "Sample",
+ 'type': "natural",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ return '<span class="edit_sample_sample_name">' + data.name + '</span>'
+ }
},
- "paging": false
+ {
+ 'title': "<div style='text-align: right;'>Value</div>",
+ 'orderDataType': "dom-input",
+ 'type': "cust-txt",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.value == null) {
+ return '<input type="text" data-value="x" data-qnorm="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_value" value="x" size=6 maxlength=6>'
+ } else {
+ return '<input type="text" data-value="' + data.value.toFixed(3) + '" data-qnorm="' + js_data['qnorm_values'][1][parseInt(data.this_id)] + '" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_value" value="' + data.value.toFixed(3) + '" size=6 maxlength=6>'
+ }
+ }
+ }{% if sample_groups[1].se_exists() %},
+ {
+ 'bSortable': false,
+ 'type': "natural",
+ 'data': null,
+ 'searchable' : false,
+ 'render': function(data, type, row, meta) {
+ return '±'
+ }
+ },
+ {
+ 'title': "<div style='text-align: right;'>SE</div>",
+ 'orderDataType': "dom-input",
+ 'type': "cust-txt",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.variance == null) {
+ return '<input type="text" data-value="x" data-qnorm="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_se" value="x" size=6 maxlength=6>'
+ } else {
+ return '<input type="text" data-value="' + data.variance.toFixed(3) + '" data-qnorm="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_se" value="' + data.variance.toFixed(3) + '" size=6 maxlength=6>'
+ }
+ }
+ }{% endif %}{% if has_num_cases %},
+ {
+ 'title': "<div style='text-align: right;'>N</div>",
+ 'orderDataType': "dom-input",
+ 'type': "cust-txt",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.num_cases == null) {
+ return '<input type="text" data-value="x" data-qnorm="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_num_cases" value="x" size=4 maxlength=4>'
+ } else {
+ return '<input type="text" data-value="' + data.num_cases + '" data-qnorm="x" name="value:' + data.name + '" style="text-align: right;" class="trait_value_input edit_sample_num_cases" value="' + data.num_cases + '" size=4 maxlength=4>'
+ }
+ }
+ }{% endif %}{% if sample_groups[1].attributes|length > 0 %}{% for attribute in sample_groups[1].attributes|sort() %},
+ {
+ 'title': "<div style='text-align: {{ sample_groups[1].attributes[attribute].alignment }}'>{{ sample_groups[1].attributes[attribute].name }}</div>",
+ 'type': "natural",
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.extra_attributes['{{ sample_groups[1].attributes[attribute].name }}'] != null && data.extra_attributes['{{ sample_groups[1].attributes[attribute].name }}'] != undefined){
+ return data.extra_attributes['{{ sample_groups[1].attributes[attribute].name }}']
+ } else {
+ return ""
+ }
+ }
+ }{% endfor %}{% endif %}
+ ],
+ 'order': [[1, "asc"]],
+ 'sDom': "Ztr",
+ 'autoWidth': true,
+ 'deferRender': true,
+ 'paging': false,
+ 'orderClasses': true,
+ 'scrollY': "600px",
+ 'scrollCollapse': false,
+ 'processing': true,
+ 'language': {
+ 'loadingRecords': '&nbsp;',
+ 'processing': 'Loading...'
+ }
+ } );
+
+ $('#other_searchbox').on( 'keyup', function () {
+ other_table.search($(this).val()).draw();
} );
{% endif %}
+ $('#samples_primary, #samples_other').find("tr.outlier").css('background-color', 'orange')
+
+ $('.edit_sample_checkbox:checkbox').change(function() {
+ if ($(this).is(":checked")) {
+ if (!$(this).closest('tr').hasClass('selected')) {
+ $(this).closest('tr').addClass('selected')
+ }
+ }
+ else {
+ if ($(this).closest('tr').hasClass('selected')) {
+ $(this).closest('tr').removeClass('selected')
+ }
+ }
+ });
+
var slider = document.getElementById('p_range_slider');
noUiSlider.create(slider, {
start: [-1.0, 1.0],
diff --git a/wqflask/wqflask/templates/show_trait_calculate_correlations.html b/wqflask/wqflask/templates/show_trait_calculate_correlations.html
index 0e15ce9c..297d62ce 100644
--- a/wqflask/wqflask/templates/show_trait_calculate_correlations.html
+++ b/wqflask/wqflask/templates/show_trait_calculate_correlations.html
@@ -1,9 +1,10 @@
<div>
+ <div class="col-xs-7">
<div style="padding: 20px" class="form-horizontal">
<div class="form-group">
- <label for="corr_type" class="col-xs-1 control-label">Method</label>
- <div class="col-xs-2 controls">
+ <label for="corr_type" class="col-xs-2 control-label">Method</label>
+ <div class="col-xs-3 controls">
<select name="corr_type" class="form-control">
<option value="sample">Sample r</option>
<option value="lit">Literature r</option>
@@ -13,8 +14,8 @@
</div>
<div class="form-group">
- <label for="corr_dataset" class="col-xs-1 control-label">Database</label>
- <div class="col-xs-6 controls">
+ <label for="corr_dataset" class="col-xs-2 control-label">Database</label>
+ <div class="col-xs-10 controls">
<select name="corr_dataset" class="form-control">
{% for tissue in corr_tools.dataset_menu %}
{% if tissue.tissue %}
@@ -37,8 +38,8 @@
</div>
<div class="form-group">
- <label for="corr_return_results" class="col-xs-1 control-label">Return</label>
- <div class="col-xs-2 controls">
+ <label for="corr_return_results" class="col-xs-2 control-label">Return</label>
+ <div class="col-xs-3 controls">
<select name="corr_return_results" class="form-control">
{% for return_result in corr_tools.return_results_menu %}
<option value="{{ return_result }}"
@@ -53,8 +54,8 @@
</div>
<div class="form-group">
- <label for="corr_samples_group" class="col-xs-1 control-label">Samples</label>
- <div class="col-xs-2 controls">
+ <label for="corr_samples_group" class="col-xs-2 control-label">Samples</label>
+ <div class="col-xs-3 controls">
<select name="corr_samples_group" class="form-control">
{% for group, pretty_group in sample_group_types.items() %}
<option value="{{ group }}">{{ pretty_group }}</option>
@@ -64,23 +65,25 @@
</div>
<div id="corr_sample_method" class="form-group">
- <label for="corr_sample_method" class="col-xs-1 control-label">Type</label>
- <div class="col-xs-2 controls">
+ <label for="corr_sample_method" class="col-xs-2 control-label">Type</label>
+ <div class="col-xs-3 controls">
<select name="corr_sample_method" class="form-control">
<option value="pearson">Pearson</option>
<option value="spearman">Spearman Rank</option>
+ <option value="bicor">Biweight Midcorrelation</option>
</select>
</div>
</div>
+ {% if dataset.type != "Publish" %}
<div class="form-group">
- <label class="col-xs-1 control-label">Min Expr</label>
- <div class="col-xs-2 controls">
+ <label class="col-xs-2 control-label">Min Expr</label>
+ <div class="col-xs-3 controls">
<input name="min_expr" value="" type="text" class="form-control" style="width: 50px;">
</div>
</div>
<div class="form-group">
- <label class="col-xs-1 control-label">Location</label>
- <div class="col-xs-4 controls">
+ <label class="col-xs-2 control-label">Location</label>
+ <div class="col-xs-5 controls">
<span>
Chr: <input name="loc_chr" value="" type="text" class="form-control" style="width: 50px; display: inline;">&nbsp;&nbsp;&nbsp;
Mb: <input name="min_loc_mb" value="" type="text" class="form-control" style="width: 50px; display: inline;"> &nbsp;to&nbsp; <input name="max_loc_mb" value="" type="text" class="form-control" style="width: 50px; display: inline;">
@@ -88,9 +91,10 @@
<br>
</div>
</div>
+ {% endif %}
<div class="form-group">
- <label class="col-xs-1 control-label">Range</label>
- <div class="col-xs-4 controls">
+ <label class="col-xs-2 control-label">Range</label>
+ <div class="col-xs-5 controls">
<input name="p_range_lower" value="" type="hidden">
<input name="p_range_upper" value="" type="hidden">
<span style="display: inline;">
@@ -103,48 +107,45 @@
</div>
<div class="form-group">
- <label for="corr_sample_method" class="col-xs-1 control-label"></label>
- <div class="col-xs-4 controls">
- <button class="btn corr_compute submit_special btn-primary" data-url="/corr_compute" title="Compute Correlation">
+ <label for="corr_sample_method" class="col-xs-2 control-label"></label>
+ <div class="col-xs-3 controls">
+ <button class="btn corr_compute submit_special btn-success" data-url="/corr_compute" title="Compute Correlation">
<i class="icon-ok-circle icon-white"></i> Compute
</button>
</div>
</div>
-
- <div class="form-group">
- <label for="descriptions" class="col-xs-1 control-label"></label>
- <div class="col-xs-6 controls">
- <span id="sample_r_desc" class="correlation_desc fs12">
- The <a href="http://genenetwork.org/correlationAnnotation.html#genetic_r">Sample Correlation</a>
- is computed
- between trait data and any
- other traits in the sample database selected above. Use
- <a href="http://www.genenetwork.org/glossary.html#Correlations">Spearman
- Rank</a>
- when the sample size is small (&lt;20) or when there are influential outliers.
- </span>
- <span id="lit_r_desc" style="display: none;" class="correlation_desc fs12">
- The <a href="http://genenetwork.org/correlationAnnotation.html#literatureCorr">Literature Correlation</a>
- (Lit r) between
- this gene and all other genes is computed<br>
- using the <a href="https://grits.eecs.utk.edu/sgo/sgo.html">
- Semantic Gene Organizer</a>
- and human, rat, and mouse data from PubMed.
- Values are ranked by Lit r, but Sample r and Tissue r are also displayed.<br>
- <a href="http://genenetwork.org/glossary.html#Literature">More on using Lit r</a>
- </span>
- <span id="tissue_r_desc" style="display: none;" class="correlation_desc fs12">
- The <a href="http://genenetwork.org/webqtl/main.py?FormID=tissueCorrelation">Tissue Correlation</a>
- (Tissue r)
- estimates the similarity of expression of two genes
- or transcripts across different cells, tissues, or organs
- (<a href="http://genenetwork.org/correlationAnnotation.html#tissueCorr">glossary</a>).
- Tissue correlations
- are generated by analyzing expression in multiple samples usually taken from single cases.<br>
- <strong>Pearson</strong> and <strong>Spearman Rank</strong> correlations have been
- computed for all pairs of genes using data from mouse samples.<br>
- </span>
- </div>
- </div>
</div>
+ </div>
+ <div class="col-xs-5">
+ <span id="sample_r_desc" class="correlation_desc fs12">
+ The <a href="http://genenetwork.org/correlationAnnotation.html#genetic_r">Sample Correlation</a>
+ is computed
+ between trait data and any
+ other traits in the sample database selected above. Use
+ <a href="http://www.genenetwork.org/glossary.html#Correlations">Spearman
+ Rank</a>
+ when the sample size is small (&lt;20) or when there are influential outliers.
+ </span>
+ <span id="lit_r_desc" style="display: none;" class="correlation_desc fs12">
+ The <a href="http://genenetwork.org/correlationAnnotation.html#literatureCorr">Literature Correlation</a>
+ (Lit r) between
+ this gene and all other genes is computed<br>
+ using the <a href="https://grits.eecs.utk.edu/sgo/sgo.html">
+ Semantic Gene Organizer</a>
+ and human, rat, and mouse data from PubMed.
+ Values are ranked by Lit r, but Sample r and Tissue r are also displayed.<br>
+ <a href="http://genenetwork.org/glossary.html#Literature">More on using Lit r</a>
+ </span>
+ <span id="tissue_r_desc" style="display: none;" class="correlation_desc fs12">
+ The <a href="http://genenetwork.org/webqtl/main.py?FormID=tissueCorrelation">Tissue Correlation</a>
+ (Tissue r)
+ estimates the similarity of expression of two genes
+ or transcripts across different cells, tissues, or organs
+ (<a href="http://genenetwork.org/correlationAnnotation.html#tissueCorr">glossary</a>).
+ Tissue correlations
+ are generated by analyzing expression in multiple samples usually taken from single cases.<br>
+ <strong>Pearson</strong> and <strong>Spearman Rank</strong> correlations have been
+ computed for all pairs of genes using data from mouse samples.<br>
+ </span>
+ </div>
</div> \ No newline at end of file
diff --git a/wqflask/wqflask/templates/show_trait_details.html b/wqflask/wqflask/templates/show_trait_details.html
index 547c3c27..20dee54e 100644
--- a/wqflask/wqflask/templates/show_trait_details.html
+++ b/wqflask/wqflask/templates/show_trait_details.html
@@ -1,43 +1,74 @@
<table class="table">
<tr>
- <td>Species and Group</td>
- <td>{{ this_trait.dataset.group.species }}, {{ this_trait.dataset.group.name }}</td>
+ <td width="150px"><b>Group</b></td>
+ <td>{{ this_trait.dataset.group.species[0]|upper }}{{ this_trait.dataset.group.species[1:] }}: {{ this_trait.dataset.group.name }} group</td>
</tr>
+ {% if this_trait.dataset.type == 'Publish' %}
<tr>
- <td>Tissue</td>
+ <td><b>Phenotype</b></td>
+ <td><div style="width:40%;">{{ this_trait.description_fmt }}</div></td>
+ </tr>
+ <tr>
+ <td><b>Authors</b></td>
+ <td><div style="width:40%;">{{ this_trait.authors }}</div></td>
+ </tr>
+ <tr>
+ <td><b>Title</b></td>
+ <td><div style="width:40%;">{{ this_trait.title }}</div></td>
+ </tr>
+ <tr>
+ <td><b>Journal</b></td>
+ <td>{{ this_trait.journal }} ({% if this_trait.pubmed_id %}<a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?cmd=Retrieve&db=PubMed&list_uids={{ this_trait.pubmed_id }}&dop=Abstract" target="_blank" title="PubMed">{{ this_trait.year }}</a>{% else %}{{ this_trait.year }}{% endif %})</td>
+ </tr>
+ {% else %}
+ <tr>
+ <td><b>Tissue</b></td>
<td>{{ this_trait.dataset.tissue }}</td>
</tr>
+ {% endif %}
{% if this_trait.dataset.type == 'ProbeSet' %}
{% if this_trait.symbol != None %}
<tr>
- <td>Gene Symbol</td>
+ <td><b>Gene Symbol</b></td>
<td>{{ this_trait.symbol }}</td>
</tr>
{% endif %}
<tr>
- <td>Aliases</td>
- <td>{{ this_trait.alias_fmt|replace(",",";") }}</td>
+ <td><b>Aliases</b></td>
+ <td>Wikidata: {{ this_trait.wikidata_alias_fmt|replace(",",";") }}</td>
+ </tr>
+ {% if this_trait.alias_fmt != "Not Available" %}
+ <tr>
+ <td></td>
+ <td>GeneNetwork: {{ this_trait.alias_fmt|replace(",",";") }}</td>
</tr>
{% endif %}
+ {% endif %}
{% if this_trait.dataset.type != 'Publish' %}
<tr>
- <td>Location</td>
+ <td><b>Location</b></td>
<td>{{ this_trait.location_fmt }}</td>
</tr>
{% endif %}
+ {% if ncbi_summary != None and ncbi_summary != "" %}
+ <tr>
+ <td><b>Summary</b></td>
+ <td>{{ ncbi_summary }}</td>
+ </tr>
+ {% endif %}
<tr>
- <td>Database</td>
+ <td><b>Database</b></td>
<td>
- <a href="http://genenetwork.org/dbdoc/{{ dataset.name }}.html">
+ <a href="http://gn1.genenetwork.org/webqtl/main.py?FormID=sharinginfo&InfoPageName={{ dataset.name }}" target="_blank">
{{ dataset.fullname }}
</a>
</td>
</tr>
{% if this_trait.probe_set_specificity %}
<tr>
- <td>Target Score</td>
+ <td><b>Target Score</b></td>
<td>
- <a href="http://genenetwork.org/blatInfo.html" title="Values higher than 2 for the specificity are good">
+ <a href="http://gn1.genenetwork.org/blatInfo.html" target="_blank" title="Values higher than 2 for the specificity are good">
BLAT Specificity
</a>:
{{ "%0.3f" | format(this_trait.probe_set_specificity|float) }}
@@ -48,29 +79,132 @@
</td>
</tr>
{% endif %}
+ {% if this_trait.pubmed_id or this_trait.geneid or this_trait.omim or this_trait.symbol %}
<tr>
- <td>Resource Links</td>
+ <td><b>Resource Links</b></td>
<td>
- {% if this_trait.geneid != None %}
- <a href="http://www.ncbi.nlm.nih.gov/entrez/query.fcgi?db=gene&cmd=Retrieve&dopt=Graphics&list_uids={{ this_trait.geneid }}" title="Info from NCBI Entrez Gene">
- NCBI
+ {% if pubmed_link %}
+ <a href="{{ pubmed_link }}" target="_blank" title="PubMed">
+ PubMed
+ </a>
+ {% endif %}
+ {% if ncbi_gene_link %}
+ <a href="{{ ncbi_gene_link }}" target="_blank" title="Info from NCBI Entrez Gene">
+ Gene
</a>
&nbsp;&nbsp;
{% endif %}
- {% if this_trait.omim != None %}
- <a href="http://www.ncbi.nlm.nih.gov/omim/{{ this_trait.omim }}" title="Summary from On Mendelion Inheritance in Man">
+ {% if omim_link %}
+ <a href="{{ omim_link }}" target="_blank" title="Summary from On Mendelion Inheritance in Man">
OMIM
</a>
&nbsp;&nbsp;
{% endif %}
- {% if this_trait.symbol != None %}
- <a href="http://www.genotation.org/Getd2g.pl?gene_list={{ this_trait.symbol }}" title="Related descriptive, genomic, clinical, functional and drug-therapy information">
+ {% if genemania_link %}
+ <a href="{{ genemania_link }}" target="_blank" title="GeneMANIA">
+ GeneMANIA
+ </a>
+ &nbsp;&nbsp;
+ {% endif %}
+ {% if protein_atlas_link %}
+ <a href="{{ protein_atlas_link }}" target="_blank" title="Human Protein Atlas">
+ Protein Atlas
+ </a>
+ &nbsp;&nbsp;
+ {% endif %}
+ {% if open_targets_link %}
+ <a href="{{ open_targets_link }}" target="_blank" title="Open Targets">
+ Open Targets
+ </a>
+ &nbsp;&nbsp;
+ {% endif %}
+ {% if homologene_link %}
+ <a href="{{ homologene_link }}" target="_blank" title="Find similar genes in other species">
+ HomoloGene
+ </a>
+ &nbsp;&nbsp;
+ {% endif %}
+ {% if this_trait.symbol %}
+ <!--
+ <a href="{{ genotation_link }}" target="_blank" title="Related descriptive, genomic, clinical, functional and drug-therapy information">
Genotation
</a>
&nbsp;&nbsp;
- {% endif %}
+ -->
+ {% if rgd_link %}
+ <a href="{{ rgd_link }}" target="_blank">
+ Rat Genome DB
+ </a>
+ &nbsp;&nbsp;
+ {% endif %}
+ <a href="{{ gtex_link }}" target="_blank" title="GTEx Portal">
+ GTEx Portal
+ </a>
+ &nbsp;&nbsp;
+ {% if genebridge_link %}
+ <a href="{{ genebridge_link }}" target="_blank">
+ GeneBridge
+ </a>
+ {% endif %}
+ {% endif %}
+ <br>
+ {% if ucsc_blat_link %}
+ <a href="{{ ucsc_blat_link }}" target="_blank" title="Info from UCSC Genome Browser">
+ UCSC
+ </a>
+ &nbsp;&nbsp;
+ {% endif %}
+ {% if biogps_link %}
+ <a href="{{ biogps_link }}" target="_blank" title="Expression across many tissues and cell types">
+ BioGPS
+ </a>
+ &nbsp;&nbsp;
+ {% endif %}
+ {% if string_link %}
+ <a href="{{ string_link }}" target="_blank" title="Protein interactions: known and inferred">
+ STRING
+ </a>
+ &nbsp;&nbsp;
+ {% endif %}
+ {% if panther_link %}
+ <a href="{{ panther_link }}" target="_blank" title="Gene and protein data resources from Celera-ABI">
+ PANTHER
+ </a>
+ &nbsp;&nbsp;
+ {% endif %}
+ {% if gemma_link %}
+ <a href="{{ gemma_link }}" target="_blank" title="Meta-analysis of gene expression data">
+ Gemma
+ </a>
+ &nbsp;&nbsp;
+ {% endif %}
+ {% if aba_link %}
+ <a href="{{ aba_link }}" target="_blank" title="Allen Brain Atlas">
+ ABA
+ </a>
+ &nbsp;&nbsp;
+ {% endif %}
+ {% if ebi_gwas_link %}
+ <a href="{{ ebi_gwas_link }}" target="_blank" title="EBI GWAS">
+ EBI GWAS
+ </a>
+ &nbsp;&nbsp;
+ {% endif %}
+ {% if wiki_pi_link %}
+ <a href="{{ wiki_pi_link }}" target="_blank" title="Wiki-Pi">
+ Wiki-Pi
+ </a>
+ &nbsp;&nbsp;
+ {% endif %}
+ {% if uniprot_link %}
+ <a href="{{ uniprot_link }}" target="_blank" title="UniProt">
+ UniProt
+ </a>
+ &nbsp;&nbsp;
+ {% endif %}
</td>
</tr>
+ {% endif %}
</table>
<div style="margin-bottom:15px;" class="btn-toolbar">
@@ -80,34 +214,34 @@
</a>
{% if this_trait.dataset.type == 'ProbeSet' %}
{% if this_trait.symbol != None %}
- <a href="http://www.genenetwork.org/webqtl/main.py?cmd=sch&amp;gene={{ this_trait.symbol }}&amp;alias=1&amp;species={{ dataset.group.species }}">
+ <a target="_blank" href="http://gn1.genenetwork.org/webqtl/main.py?cmd=sch&amp;gene={{ this_trait.symbol }}&amp;alias=1&amp;species={{ dataset.group.species }}">
<button type="button" class="btn btn-default" title="Find similar expression data">Find</button>
</a>
{% endif %}
{% if UCSC_BLAT_URL != "" %}
- <a href="{{ UCSC_BLAT_URL }}">
+ <a target="_blank" href="{{ UCSC_BLAT_URL }}">
<button type="button" class="btn btn-default" title="Check probe locations at UCSC">Verify</button>
</a>
{% endif %}
{% if this_trait.symbol != None %}
- <a href="http://genenetwork.org/webqtl/main.py?FormID=geneWiki&symbol={{ this_trait.symbol }}">
+ <a target="_blank" href="http://gn1.genenetwork.org/webqtl/main.py?FormID=geneWiki&symbol={{ this_trait.symbol }}">
<button type="button" class="btn btn-default" title="Write or review comments about this gene">GeneWiki</button>
</a>
- <a href="http://genenetwork.org/webqtl/main.py?FormID=SnpBrowserResultPage&submitStatus=1&diffAlleles=True&customStrain=True&geneName={{ this_trait.symbol }}">
+ {% if dataset.group.species == "mouse" or dataset.group.species == "rat" %}
+ <a href="./snp_browser?first_run=true&species={{ dataset.group.species }}&gene_name={{ this_trait.symbol }}&limit_strains=on">
<button type="button" class="btn btn-default" title="View SNPs and Indels">SNPs</button>
</a>
{% endif %}
- {% if UTHSC_BLAT_URL != "" %}
- <a href="{{ UTHSC_BLAT_URL }}">
- <button type="button" class="btn btn-default" title="View probes, SNPs, and RNA-seq at UTHSC">RNA-seq</button>
- </a>
{% endif %}
{% if show_probes == "True" %}
- <a href="http://genenetwork.org/webqtl/main.py?FormID=showProbeInfo&database={{ this_trait.dataset.name }}&ProbeSetID={{ this_trait.name }}&CellID={{ this_trait.cellid }}&RISet={{ dataset.group.name }}&incparentsf1=ON">
+ <a target="_blank" href="http://gn1.genenetwork.org/webqtl/main.py?FormID=showProbeInfo&database={{ this_trait.dataset.name }}&ProbeSetID={{ this_trait.name }}&CellID={{ this_trait.cellid }}&RISet={{ dataset.group.name }}&incparentsf1=ON">
<button type="button" class="btn btn-default" title="Check sequence of probes">Probes</button>
</a>
{% endif %}
{% endif %}
+ <a target="_blank" href="http://gn1.genenetwork.org/webqtl/main.py?cmd=show&db={{ this_trait.dataset.name }}&probeset={{ this_trait.name }}">
+ <button type="button" id="view_in_gn1" class="btn btn-primary" title="View Trait in GN1">View in GN1</button>
+ </a>
</div>
</div>
diff --git a/wqflask/wqflask/templates/show_trait_edit_data.html b/wqflask/wqflask/templates/show_trait_edit_data.html
index a431821e..05a2be73 100644
--- a/wqflask/wqflask/templates/show_trait_edit_data.html
+++ b/wqflask/wqflask/templates/show_trait_edit_data.html
@@ -1,156 +1,44 @@
<div>
- <!--<h2>Review and Edit Data</h2>-->
-
- <div class="well form-horizontal">
- <fieldset id="showHideOptions">
- <legend>Block samples</legend>
- <p>Edit or delete values in the Trait Data boxes, and use the
- <strong>Reset</strong> option as
- needed.
- </p>
-
- <div id="blockMenuSpan" class="input-append">
- <label for="remove_samples_field">Block samples by index:</label>
- <input type="text" id="remove_samples_field">
- <select id="block_group" size="1">
- <option value="primary">
- {{ sample_group_types['samples_primary'] }}
- </option>
- <option value="other">
- {{ sample_group_types['samples_other'] }}
- </option>
- </select>
- <input type="button" id="block_by_index" class="btn" value="Block">
- </div>
- <div id="remove_samples_invalid" class="alert alert-error" style="display:none;">
- Please check that your input is formatted correctly, e.g. <strong>3, 5-10, 12</strong>
- </div>
-
- <br>
-
- {% if sample_groups[0].attributes %}
- <div class="input-append">
- <label for="exclude_menu">Block samples by group:</label>
- <select id="exclude_menu" size=1>
- {% for attribute in sample_groups[0].attributes %}
- <option value="{{ sample_groups[0].attributes[attribute].name.replace(' ', '_') }}">
- {{ sample_groups[0].attributes[attribute].name }}</option>
- {% endfor %}
- </select>
- <select id="attribute_values" size=1>
- </select>
- <input type="button" id="exclude_group" class="btn" value="Block">
- </div>
- {% endif %}
- <br>
- <div>
- <input type="button" id="hide_no_value" class="btn btn-default" value="Hide No Value">
- <input type="button" id="block_outliers" class="btn btn-default" value="Block Outliers">
- <input type="button" id="reset" class="btn btn-primary" value="Reset">
- <span class="input-append">
- <input type="button" id="export" class="btn btn-default" value="Export">
- <select id="export_format" class="select optional span2">
- <option value="excel">Excel</option>
- <option value="csv">CSV</option>
- </select>
- </span>
- </div>
- </fieldset>
- <br>
-
- <div>
- <p>Outliers highlighted in
- <strong style="background-color:yellow;">yellow</strong>
- can be hidden using
- the <strong>Hide Outliers</strong> button.
- </p>
-
- <p>Samples with no value (x) can be hidden by clicking
- <strong>Hide No Value</strong> button.
- </p>
- </div>
- </div>
- <br>
-
-
- <!--<div id="edit_sample_lists">-->
{% for sample_type in sample_groups %}
- <div class="sample_group" style="width:{{ trait_table_width }}%;">
- <h3>{{ sample_type.header }}</h3>
- <hr>
- <div id="table_container">
- <table class="table-hover table-striped" id="samples_{{ sample_type.sample_group_type }}" style="float: left;">
- <thead>
- <tr>
- <th></th>
- <th>Index</th>
- <th>Sample</th>
- <th>Value</th>
- {% if sample_type.se_exists() %}
- <th>&nbsp;</th>
- <th>SE</th>
- {% endif %}
- {% for attribute in sample_type.attributes|sort() %}
- <th>
- {{ sample_type.attributes[attribute].name }}
- </th>
- {% endfor %}
- </tr>
- </thead>
- <tbody>
- {% for sample in sample_type.sample_list %}
- <tr class="{{ sample.class_outlier }} value_se" id="{{ sample.this_id }}">
- <td align="center" style="padding-right: 0px;" class="column_name-"><input type="checkbox" name="selectCheck" class="checkbox edit_sample_checkbox" value="{{ sample.name }}" checked="checked">
- </td>
- <td class="column_name-Index" align="right">{{ loop.index }}</td>
- <td class="column_name-Sample">
- <span class="edit_sample_sample_name">
- {{ sample.name }}
- </span>
- </td>
-
- {# Todo: Add IDs #}
- <td class="column_name-Value" align="right">
- <input type="text" data-value="{{ sample.display_value }}" name="{{ 'value:' + sample.name }}"
- style="text-align:right;"
- class="trait_value_input edit_sample_value"
- value="{{ sample.display_value }}"
- size=6 maxlength=6
- >
- </td>
-
- {% if sample_type.se_exists() %}
- <td>
- ±
- </td>
-
- {# Todo: Add IDs #}
- <td class="column_name-SE">
- <input type="text" data-value="{{ sample.display_variance }}" name="{{ 'variance:' + sample.name}}"
- style="text-align:right;"
- class="trait_value_input edit_sample_se"
- value="{{ sample.display_variance }}"
- size=8 maxlength=8
- >
- </td>
- {% endif %}
-
- {# Loop through each attribute type and input value #}
- {% for attribute in sample_type.attributes|sort() %}
- <td class="std_cell column_name-{{ sample_type.attributes[attribute].name.replace(' ', '_') }}">
- {{ sample.extra_attributes[sample_type.attributes[attribute].name] }}
- </td>
- {% endfor %}
- </tr>
- {% endfor %}
- </tbody>
- </table>
- </div>
+ <div style="padding-bottom: 10px;">
+ <div style="display: inline; height: 40px;">
+ <input type="text" id="{{ sample_type.sample_group_type }}_searchbox" class="form-control" style="width: 200px; display: inline; float: left; vertical-align: top;" placeholder="Search This Table For ...">
+ </div>
+ <div style="padding-left: 10px; display: inline;">
+ <input type="button" class="btn btn-default export" value="Export">
+ <select class="select optional span2 export_format">
+ <option value="excel">Excel</option>
+ <option value="csv">CSV</option>
+ </select>
+ <input type="button" class="btn btn-success reset" value="Reset">
+ </div>
+ </div>
+ <div id="export_code" style="width: 600px; display: none;">
+ <pre style="padding-top: 0px; padding-bottom: 0px; height: 150px;">
+ <code>
+# read into R
+trait <- read.csv("{{ this_trait.display_name}}.csv", header = TRUE, comment.char = "#")
+
+# read into python
+import pandas as pd
+trait = pd.read_csv("{{ this_trait.display_name}}.csv", header = 0, comment = "#")
+ </code>
+ </pre>
+ </div>
+ {% set outer_loop = loop %}
+ <div class="sample_group" style="width:{{ trait_table_width }};">
+ <div style="position: relative;">
+ <div style="display: inline;"><h3 style="float: left;">{{ sample_type.header }}<span name="transform_text"></span></h3>
+ </div>
+ <div id="table_container">
+ <table class="table-hover table-striped cell-border" id="samples_{{ sample_type.sample_group_type }}" style="float: left; width:100%;">
+ <tbody>
+ <td colspan="100%" align="center"><br><b><font size="15">Loading...</font></b><br></td>
+ </tbody>
+ </table>
+ </div>
</div>
<br>
- {% endfor %}
- <!--</div>-->
-
-
+ {% endfor %}
<input type="hidden" name="Default_Name">
</div>
diff --git a/wqflask/wqflask/templates/show_trait_mapping_tools.html b/wqflask/wqflask/templates/show_trait_mapping_tools.html
index 12ba80b9..777d4a2d 100644
--- a/wqflask/wqflask/templates/show_trait_mapping_tools.html
+++ b/wqflask/wqflask/templates/show_trait_mapping_tools.html
@@ -1,74 +1,158 @@
<div>
- {% if (use_pylmm_rqtl and dataset.group.species != "human") or use_plink_gemma %}
- <div class="col-xs-4">
+ {% if dataset.group.mapping_names|length > 0 %}
+ <div class="col-xs-3" style="min-width: 400px;">
<div class="tabbable"> <!-- Only required for left/right tabs -->
<ul class="nav nav-pills">
- {# if use_pylmm_rqtl and not use_plink_gemma and dataset.group.species != "human" #}
- {% if dataset.group.mapping_id == "1" %}
- <li class="active">
- <a href="#interval_mapping" data-toggle="tab">Interval Mapping</a>
- </li>
- <li>
- <a href="#pylmm" data-toggle="tab">pyLMM</a>
+ {% for mapping_method in dataset.group.mapping_names %}
+ {% if mapping_method == "GEMMA" %}
+ <li class="gemma_tab mapping_tab {% if dataset.group.mapping_id == '1' or dataset.group.mapping_id == '2' %}active{% endif %}">
+ <a href="#gemma" data-toggle="tab">GEMMA</a>
</li>
- <li>
+ {% elif mapping_method == "R/qtl" %}
+ <li class="rqtl_geno_tab mapping_tab {% if dataset.group.mapping_id == '3' %}active{% endif %}">
<a href="#rqtl_geno" data-toggle="tab">R/qtl</a>
</li>
- {% endif %}
- {# if use_plink_gemma #}
- {% if dataset.group.mapping_id == "2" or dataset.group.mapping_id == "4" %}
- <li class="active">
- <a href="#gemma" data-toggle="tab">GEMMA</a>
- </li>
- {% if dataset.group.mapping_id == "4" %}
- <li>
- <a href="#plink" data-toggle="tab">PLINK</a>
+ {% elif mapping_method == "QTLReaper" %}
+ <li class="reaper_tab mapping_tab">
+ <a href="#interval_mapping" data-toggle="tab">Haley-Knott Regression</a>
</li>
{% endif %}
- {% endif %}
+ {% endfor %}
<!--<li>
<a href="#pair_scan" data-toggle="tab">Pair Scan</a>
</li>-->
</ul>
<div class="tab-content">
- {# if use_pylmm_rqtl and not use_plink_gemma and dataset.group.species != "human" #}
- {% if dataset.group.mapping_id == "1" %}
- <div class="tab-pane active" id="interval_mapping">
+ {% for mapping_method in dataset.group.mapping_names %}
+ {% if mapping_method == "GEMMA" %}
+ <div class="tab-pane {% if dataset.group.mapping_id == '1' or dataset.group.mapping_id == '2' %}active{% endif %}" id="gemma">
+ <div style="padding-top: 20px;" class="form-horizontal">
+ <div class="mapping_method_fields form-group">
+ <label for="chr_select" style="text-align: right;" class="col-xs-3 control-label">Chromosome</label>
+ <div style="margin-left:20px;" class="col-xs-2 controls">
+ <select id="chr_gemma" class="form-control" style="width: 80px;">
+ {% for item in chr_list %}
+ <option value="{{ item[1] }}">{{ item[0] }}</option>
+ {% endfor %}
+ </select>
+ </div>
+ </div>
+ {% if genofiles and genofiles|length>0 %}
+ <div class="mapping_method_fields form-group">
+ <label for="genofiles" style="text-align: right;" class="col-xs-3 control-label">Genotypes</label>
+ <div style="margin-left:20px;" class="col-xs-4 controls">
+ <select id="genofile_gemma" class="form-control">
+ {% for item in genofiles %}
+ <option value="{{item['location']}}:{{item['title']}}">{{item['title']}}</option>
+ {% endfor %}
+ </select>
+ </div>
+ </div>
+ {% endif %}
+ <div class="mapping_method_fields form-group">
+ <label for="maf_gemma" style="text-align: right;" class="col-xs-3 control-label">MAF >=</label>
+ <div style="margin-left:20px;" class="col-xs-4 controls">
+ <input name="maf_gemma" value="{{ maf }}" type="text" class="form-control" style="width: 80px;">
+ </div>
+ </div>
+ <div class="mapping_method_fields form-group">
+ <label style="text-align: right;" class="col-xs-3 control-label">Use LOCO</label>
+ <div style="margin-left:20px;" class="col-xs-6 controls">
+ <label class="radio-inline">
+ <input type="radio" name="use_loco" value="True" checked="">
+ Yes
+ </label>
+ <label class="radio-inline">
+ <input type="radio" name="use_loco" value="False">
+ No
+ </label>
+ </div>
+ </div>
+ <div class="mapping_method_fields form-group">
+ <div class="col-xs-3" style="text-align: right;">
+ <label class="control-label">Covariates</label>
+ <font size="2">Select covariate(s) from a collection</font>
+ </div>
+ <div style="margin-left:20px;" class="col-xs-7">
+ {% if g.user_session.num_collections < 1 %}
+ No collections available. Please add traits to a collection to use them as covariates.
+ {% else %}
+ <div style="margin-bottom: 10px;">
+ <button type="button" id="select_covariates" class="btn btn-default" style="width: 80px; padding-right: 10px;">Select</button>
+ <button type="button" id="remove_covariates" class="btn btn-default" style="width: 80px;">Remove</button>
+ </div>
+ <textarea rows="3" cols="50" readonly placeholder="No covariates selected" style="overflow-y: scroll; resize: none; width: 200px;" class="selected_covariates"></textarea>
+ {% endif %}
+ </div>
+ </div>
+ <div class="mapping_method_fields form-group">
+ <label class="col-xs-3 control-label"></label>
+ <div style="margin-left:20px;" class="col-xs-6">
+ <button id="gemma_compute" class="btn submit_special btn-success" data-url="/marker_regression" title="Compute Marker Regression">
+ Compute
+ </button>
+ </div>
+ </div>
+ </div>
+ </div>
+ {% elif mapping_method == "QTLReaper" %}
+ <div class="tab-pane" id="interval_mapping">
<div style="margin-top: 20px" class="form-horizontal">
+ <div class="mapping_method_fields form-group">
+ <label for="reaper_version" style="text-align: right;" class="col-xs-3 control-label">Version<sup><a title="'New' is the new qtlreaper implementation written in RUST by Christian Fischer. 'Original' corresponds to the original version written in C.">?</a></sup></label>
+ <div style="margin-left:20px;" class="col-xs-3 controls">
+ <select name="reaper_version" class="form-control" style="width: 80px;">
+ <option value="new">New</option>
+ <option value="original">Original</option>
+ </select>
+ </div>
+ </div>
+ <div class="mapping_method_fields form-group">
+ <label for="chr_select" style="text-align: right;" class="col-xs-3 control-label">Chromosome</label>
+ <div style="margin-left:20px;" class="col-xs-2 controls">
+ <select id="chr_reaper" class="form-control" style="width: 80px;">
+ {% for item in chr_list %}
+ <option value="{{ item[1] }}">{{ item[0] }}</option>
+ {% endfor %}
+ </select>
+ </div>
+ </div>
{% if genofiles and genofiles|length>0 %}
<div class="mapping_method_fields form-group">
- <label for="genofiles" class="col-xs-3 control-label">Genotypes</label>
- <div style="margin-left: 20px;" class="col-xs-8 controls">
+ <label style="text-align: right;" for="genofiles" class="col-xs-3 control-label">Genotypes</label>
+ <div style="margin-left:20px;" class="col-xs-4 controls">
<select id="genofile_reaper" class="form-control">
{% for item in genofiles %}
- <option value="{{item['location']}}">{{item['title']}}</option>
+ <option value="{{item['location']}}:{{item['title']}}">{{item['title']}}</option>
{% endfor %}
</select>
</div>
</div>
{% endif %}
<div class="mapping_method_fields form-group">
- <label for="mapping_permutations" class="col-xs-3 control-label">Permutations</label>
- <div style="margin-left: 20px;" class="col-xs-4 controls">
+ <label style="text-align: right;" for="mapping_permutations" class="col-xs-3 control-label">Permutations</label>
+ <div style="margin-left:20px;" class="col-xs-4 controls">
<input name="num_perm_reaper" value="2000" type="text" class="form-control">
</div>
</div>
<div class="mapping_method_fields form-group">
- <label for="mapping_bootstraps" class="col-xs-3 control-label">Bootstraps</label>
- <div style="margin-left: 20px;" class="col-xs-4 controls">
+ <label style="text-align: right;" for="mapping_bootstraps" class="col-xs-3 control-label">Bootstraps</label>
+ <div style="margin-left:20px;" class="col-xs-4 controls">
<input name="num_bootstrap" value="2000" type="text" class="form-control">
</div>
</div>
<div class="mapping_method_fields form-group">
- <label for="control_for" class="col-xs-3 control-label">Control&nbsp;for</label>
- <div style="margin-left: 20px;" class="col-xs-4 controls">
+ <label style="text-align: right;" for="control_for" class="col-xs-3 control-label">Control&nbsp;for<br>Cofactors</label>
+ <div style="margin-left:20px;" class="col-xs-6 controls">
{% if dataset.type == 'ProbeSet' and this_trait.locus_chr != "" %}
- <input name="control_reaper" value="{{ nearest_marker }}" type="text" style="width: 160px;" class="form-control" />
+ <input name="control_reaper" value="{{ nearest_marker }}" type="text" style="width: 160px; display: inline-block;" class="form-control" />
{% else %}
- <input name="control_reaper" value="" type="text" class="form-control" />
+ <input name="control_reaper" value="" type="text" style="display: inline-block; padding-right: 10px;" class="form-control" />
{% endif %}
+ <input type="radio" name="do_control_reaper" value="true"> Yes&nbsp;&nbsp;<input type="radio" name="do_control_reaper" value="false" checked="" style="margin-left: 10px;"> No</span>
+ <!--
<label class="radio-inline">
<input type="radio" name="do_control_reaper" value="true">
Yes
@@ -77,6 +161,7 @@
<input type="radio" name="do_control_reaper" value="false" checked="">
No
</label>
+ -->
</div>
</div>
@@ -104,124 +189,78 @@
</div>
</div>
-->
-
-
<div class="mapping_method_fields form-group">
- <label style="text-align:left;" class="col-xs-3 control-label">Marker<br>Regression</label>
- <div style="margin-left: 20px;" class="col-xs-4 controls">
+ <label style="text-align: right;" class="col-xs-3 control-label">Interval Map</label>
+ <div style="margin-left:20px;" class="col-xs-6 controls">
<label class="radio-inline">
- <input type="radio" name="manhattan_plot_reaper" value="True">
+ <input type="radio" name="manhattan_plot_reaper" value="False" checked="">
Yes
</label>
<label class="radio-inline">
- <input type="radio" name="manhattan_plot_reaper" value="False" checked="">
+ <input type="radio" name="manhattan_plot_reaper" value="True">
No
</label>
</div>
</div>
- <div class="form-group">
- <div style="padding-left:15px;" class="controls">
- <button id="interval_mapping_compute" class="btn submit_special btn-primary" data-url="/marker_regression" title="Compute Interval Mapping">
- <i class="icon-ok-circle icon-white"></i> Compute
- </button>
+ <div class="mapping_method_fields form-group">
+ <label class="col-xs-3 control-label"></label>
+ <div style="margin-left:20px;" class="col-xs-6">
+ <button id="interval_mapping_compute" class="btn submit_special btn-success" data-url="/marker_regression" title="Compute Interval Mapping">
+ Compute
+ </button>
</div>
</div>
- <!--<div id="alert_placeholder"></div>-->
</div>
</div>
- <div class="tab-pane" id="pylmm">
+ {% elif mapping_method == "R/qtl" %}
+ <div class="tab-pane {% if dataset.group.mapping_id == '3' %}active{% endif %}" id="rqtl_geno">
<div style="margin-top: 20px" class="form-horizontal">
- {% if genofiles and genofiles|length>0 %}
<div class="mapping_method_fields form-group">
- <label for="genofiles" class="col-xs-3 control-label">Genotypes</label>
- <div style="margin-left: 20px;" class="col-xs-8 controls">
- <select id="genofile_pylmm" class="form-control">
- {% for item in genofiles %}
- <option value="{{item['location']}}">{{item['title']}}</option>
+ <label for="chr_select" style="text-align: right;" class="col-xs-3 control-label">Chromosome</label>
+ <div style="margin-left:20px;" class="col-xs-2 controls">
+ <select id="chr_rqtl_geno" class="form-control" style="width: 80px;">
+ {% for item in chr_list %}
+ <option value="{{ item[1] }}">{{ item[0] }}</option>
{% endfor %}
</select>
</div>
</div>
- {% endif %}
+ {% if genofiles and genofiles|length>0 %}
<div class="mapping_method_fields form-group">
- <label for="mapping_permutations" class="col-xs-3 control-label">Permutations</label>
- <div style="margin-left: 20px;" class="col-xs-4 controls">
- <input name="num_perm_pylmm" value="" type="text" class="form-control">
+ <label style="text-align:right;" for="genofiles" class="col-xs-3 control-label">Genotypes</label>
+ <div style="margin-left:20px;" class="col-xs-4 controls">
+ <select id="genofile_rqtl_geno" class="form-control">
+ {% for item in genofiles %}
+ <option value="{{item['location']}}:{{item['title']}}">{{item['title']}}</option>
+ {% endfor %}
+ </select>
</div>
</div>
- <div id="permutations_alert" class="alert alert-error alert-warning" style="display:none;">
- Please be aware that permutations can take a very long time (~20 minutes for 500 permutations)
- </div>
-<!--
+ {% endif %}
<div class="mapping_method_fields form-group">
- <label for="control_for" class="col-xs-3 control-label">Control&nbsp;for</label>
- <div style="margin-left: 20px;" class="col-xs-4 controls">
- {% if dataset.type == 'ProbeSet' and this_trait.locus_chr != "" %}
- <input name="control_pylmm" value="{{ nearest_marker }}" type="text" />
- {% else %}
- <input name="control_pylmm" value="" type="text" />
- {% endif %}
- <label class="radio-inline">
- <input type="radio" name="do_control_pylmm" value="true">
- Yes
- </label>
- <label class="radio-inline">
- <input type="radio" name="do_control_pylmm" value="false" checked="">
- No
- </label>
+ <label style="text-align:right;" for="mapping_permutations" class="col-xs-3 control-label">Permutations</label>
+ <div style="margin-left:20px;" class="col-xs-4 controls">
+ <input name="num_perm_rqtl_geno" value="200" type="text" class="form-control">
</div>
</div>
--->
-
+ {% if sample_groups[0].attributes|length > 0 %}
<div class="mapping_method_fields form-group">
- <label style="text-align:left;" class="col-xs-12 control-label">Manhattan Plot</label>
- <div class="col-xs-12 controls">
+ <label style="text-align:right;" class="col-xs-3 control-label">Stratified</label>
+ <div style="margin-left:20px;" class="col-xs-6 controls">
<label class="radio-inline">
- <input type="radio" name="manhattan_plot_pylmm" value="True">
+ <input type="radio" name="perm_strata" value="True" checked="">
Yes
</label>
<label class="radio-inline">
- <input type="radio" name="manhattan_plot_pylmm" value="False" checked="">
+ <input type="radio" name="perm_strata" value="False" >
No
</label>
</div>
</div>
- <div class="form-group">
- <div style="padding-left:15px;" class="controls">
- <button id="pylmm_compute" class="btn submit_special btn-primary" title="Compute Marker Regression">
- <i class="icon-ok-circle icon-white"></i> Compute
- </button>
- </div>
- </div>
- </div>
- </div>
- <div class="tab-pane" id="rqtl_geno">
-
- <div style="margin-top: 20px" class="form-horizontal">
- {% if genofiles and genofiles|length>0 %}
- <div class="mapping_method_fields form-group">
- <label for="genofiles" class="col-xs-3 control-label">Genotypes</label>
- <div style="margin-left: 20px;" class="col-xs-8 controls">
- <select id="genofile_rqtl_geno" class="form-control">
- {% for item in genofiles %}
- <option value="{{item['location']}}">{{item['title']}}</option>
- {% endfor %}
- </select>
- </div>
- </div>
{% endif %}
<div class="mapping_method_fields form-group">
- <label for="mapping_permutations" class="col-xs-3 control-label">Permutations</label>
- <div style="margin-left: 20px;" class="col-xs-4 controls">
- <input name="num_perm_rqtl_geno" value="" type="text" class="form-control">
- </div>
- </div>
- <div id="permutations_alert" class="alert alert-error alert-warning" style="display:none;">
- Please be aware that permutations can take a very long time (~20 minutes for 500 permutations)
- </div>
- <div class="mapping_method_fields form-group">
- <label for="control_for" class="col-xs-3 control-label">Control&nbsp;for</label>
- <div style="margin-left: 20px;" class="col-xs-4 controls">
+ <label style="text-align:right;" for="control_for" class="col-xs-3 control-label">Control&nbsp;for</label>
+ <div style="margin-left:20px;" class="col-xs-6 controls">
{% if dataset.type == 'ProbeSet' and this_trait.locus_chr != "" %}
<input name="control_rqtl_geno" value="{{ nearest_marker }}" type="text" style="width: 160px;" class="form-control" />
{% else %}
@@ -239,32 +278,41 @@
</div>
<div class="mapping_method_fields form-group">
- <label for="mapmethod_rqtl_geno" style="text-align:left;" class="col-xs-3 control-label">Method</label>
- <div class="col-xs-4 controls">
- <select name="mapmethod_rqtl_geno" class="form-control">
- <option value="em">em</option>
- <option value="imp">imp</option>
- <option value="hk">hk</option>
- <option value="ehk">ehk</option>
- <option value="mr">mr</option>
- <option value="mr-imp">mr-imp</option>
- <option value="mr-argmax">mr-argmax</option>
+ <label style="text-align:right;" for="mapmodel_rqtl_geno" class="col-xs-3 control-label">Model</label>
+ <div style="margin-left:20px;" class="col-xs-4 controls">
+ <select id="mapmodel_rqtl_geno" name="mapmodel_rqtl_geno" class="form-control">
+ <option value="normal">Normal</option>
+ {% if binary == "true" %}<option value="binary">Binary</option>{% endif %}
+ <!--<option value="2part">2-part</option>-->
+ <option value="np">Non-parametric</option>
</select>
</div>
</div>
<div class="mapping_method_fields form-group">
- <label for="mapmodel_rqtl_geno" style="text-align:left;" class="col-xs-3 control-label">Model</label>
- <div class="col-xs-4 controls">
- <select name="mapmodel_rqtl_geno" class="form-control">
- <option value="normal">normal</option>
- <option value="binary">binary</option>
- <option value="2part">2part</option>
- <option value="np">np</option>
+ <label style="text-align:right;" for="mapmethod_rqtl_geno" class="col-xs-3 control-label">Method</label>
+ <div style="margin-left:20px;" class="col-xs-6 controls">
+ <select id="mapmethod_rqtl_geno" name="mapmethod_rqtl_geno" class="form-control">
+ <option value="hk" selected>Haley-Knott</option>
+ <option value="ehk">Extended Haley-Knott</option>
+ <option value="mr">Marker Regression</option>
+ <option value="em">Expectation-Maximization</option>
+ <option value="imp">Imputation</option>
+ </select>
+ </div>
+ </div>
+ <div id="missing_geno_div" class="mapping_method_fields form-group" style="display: none;">
+ <label style="text-align:right;" for="missing_genotypes" class="col-xs-3 control-label"></label>
+ <div style="margin-left:20px;" class="col-xs-6 controls">
+ <select id="missing_genotype" name="missing_genotypes" class="form-control">
+ <option value="mr">Remove Samples w/o Genotypes</option>
+ <option value="mr-imp">Single Imputation</option>
+ <option value="mr-argmax">Imputation w/ Viterbi Algorithm</option>
</select>
</div>
</div>
+ <!--
<div class="mapping_method_fields form-group">
<label style="text-align:left;" class="col-xs-12 control-label">Pair Scan</label>
<div class="col-xs-12 controls">
@@ -278,10 +326,10 @@
</label>
</div>
</div>
-
+ -->
<div class="mapping_method_fields form-group">
- <label style="text-align:left;" class="col-xs-12 control-label">Manhattan Plot</label>
- <div class="col-xs-12 controls">
+ <label style="text-align:right;" class="col-xs-3 control-label">Manhattan<br>Plot</label>
+ <div style="margin-left:20px;" class="col-xs-6 controls">
<label class="radio-inline">
<input type="radio" name="manhattan_plot_rqtl" value="True">
Yes
@@ -292,72 +340,56 @@
</label>
</div>
</div>
-
- <div class="form-group">
- <div style="padding-left:15px;" class="controls">
- <button id="rqtl_geno_compute" class="btn submit_special btn-primary" data-url="/marker_regression" title="Compute Marker Regression">
- <i class="icon-ok-circle icon-white"></i> Compute
- </button>
- </div>
- </div>
- </div>
- </div>
- {% endif %}
- {# if use_plink_gemma #}
- {% if dataset.group.mapping_id == "2" or dataset.group.mapping_id == "4" %}
- <div class="tab-pane active" id="gemma">
- <div style="padding: 20px" class="form-horizontal">
<div class="mapping_method_fields form-group">
- <label for="maf_gemma" class="col-xs-3 control-label">Minor allele threshold</label>
- <div style="margin-left: 20px;" class="col-xs-3 controls">
- <input name="maf_gemma" value="0.01" type="text" class="form-control">
+ <div class="col-xs-3" style="text-align: right;">
+ <label class="control-label">Covariates</label>
+ <font size="2">Select covariate(s) from a collection</font>
+ </div>
+ <div style="margin-left:20px;" class="col-xs-7">
+ {% if g.user_session.num_collections < 1 %}
+ No collections available. Please add traits to a collection to use them as covariates.
+ {% else %}
+ <div style="margin-bottom: 10px;">
+ <button type="button" class="btn btn-default select_covariates" style="width: 80px; padding-right: 10px;">Select</button>
+ <button type="button" class="btn btn-default remove_covariates" style="width: 80px;">Remove</button>
+ </div>
+ <textarea rows="3" cols="50" readonly placeholder="No covariates selected" style="overflow-y: scroll; resize: none; width: 200px;" class="selected_covariates"></textarea>
+ {% endif %}
</div>
</div>
- </div>
-
- <div class="form-group">
- <label for="gemma_compute" class="col-xs-1 control-label"></label>
- <div style="margin-left:20px;" class="col-xs-4 controls">
- <button id="gemma_compute" class="btn submit_special btn-primary" data-url="/marker_regression" title="Compute Marker Regression">
- Compute
- </button>
- </div>
- </div>
- </div>
- {% if dataset.group.mapping_id == "4" %}
- <div class="tab-pane" id="plink">
- <div style="padding: 20px" class="form-horizontal">
<div class="mapping_method_fields form-group">
- <label for="maf_plink" class="col-xs-3 control-label">Minor allele threshold</label>
- <div style="margin-left: 20px;" class="col-xs-3 controls">
- <input name="maf_plink" value="0.01" type="text" class="form-control">
+ <label class="col-xs-3 control-label"></label>
+ <div style="margin-left:20px;" class="col-xs-6">
+ <button id="rqtl_geno_compute" class="btn submit_special btn-success" data-url="/marker_regression" title="Compute Interval Mapping">
+ Compute
+ </button>
</div>
</div>
</div>
-
- <div class="form-group">
- <label for="plink_compute" class="col-xs-1 control-label"></label>
- <div style="margin-left:20px;" class="col-xs-4 controls">
- <button id="plink_compute" class="btn submit_special btn-primary" data-url="/marker_regression" title="Compute Marker Regression">
- Compute
- </button>
- </div>
- </div>
</div>
{% endif %}
- {% endif %}
+ {% endfor %}
</div>
</div>
</div>
- <div class="col-xs-6">
- <dl>
- <dt>Interval Mapping</dt>
- <dd>Interval mapping is a process in which the statistical significance of a hypothetical QTL is evaluated at regular points across a chromosome, even in the absence of explicit genotype data at those points.</dd>
- <dt>pyLMM</dt>
- <dd>pyLMM is a fast and lightweight linear mixed-model (LMM) solver for use in genome-wide association studies (GWAS).</dd>
- <dt>R/qtl</dt>
- <dd>R/qtl is an extensible, interactive environment for mapping quantitative trait loci (QTL) in experimental crosses.</dd>
+ <div class="col-xs-7">
+ <dl style="width: 500px;">
+ {% for mapping_method in dataset.group.mapping_names %}
+ {% if mapping_method == "GEMMA" %}
+ <dt style="padding-top: 20px;">GEMMA</dt>
+ <dd>Maps traits with correction for kinship among samples using a linear mixed model method, and also allows users to fit multiple covariates such as sex, age, treatment, and genetic markers (<a href="https://www.ncbi.nlm.nih.gov/pubmed/24531419">PMID: 2453419</a>, and <a href="https://github.com/genetics-statistics/GEMMA"> GitHub code</a>). GEMMA incorporates the Leave One Chromosome Out (LOCO) method to ensure that the correction for kinship does not remove useful genetic variance near each marker. Markers can be filtered to include only those with minor allele frequencies (MAF) above a threshold. The default MAF is 0.05.</dd>
+ {% elif mapping_method == "R/qtl" %}
+ <dt style="margin-top: 20px;">R/qtl</dt>
+ <dd>The original R/qtl mapping package that supports classic experimental crosses including 4-parent F2 intercrosses (e.g., NIA ITP UM-HET3). R/qtl is ideal for populations that do not have complex kinship or admixture (<a href="https://www.ncbi.nlm.nih.gov/pubmed/12724300">PMID: 12724300</a>). Both R/qtl as implemented here, and R/qtl2 (<a href="https://www.ncbi.nlm.nih.gov/pubmed/30591514">PMID: 30591514</a>) are available as <a href="https://kbroman.org/pages/software.html">R suites</a>.</dd>
+ {% elif mapping_method == "QTLReaper" %}
+ <dt style="margin-top: 20px;">Haley-Knott Regression</dt>
+ <dd>Fast linear mapping method (<a href="https://www.ncbi.nlm.nih.gov/pubmed/16718932">PMID 16718932</a>) works well with F2 intercrosses and backcrosses, but that is not recommended for complex or admixed populations (e.g., GWAS or heterogeneous stock studies) or for advanced intercrosses, recombinant inbred families, or diallel crosses. Interactive plots in GeneNetwork have relied on the fast HK mapping for two decades and we still use this method for mapping omics data sets and computing genome-wide permutation threshold (<a href="https://github.com/pjotrp/QTLReaper">QTL Reaper code</a>).</dd>
+ {% endif %}
+ {% endfor %}
</dl>
+ <div class="rqtl_description" style="padding-top: 40px; display: none;">
+ More information on R/qtl mapping models and methods can be found <a href="http://www.rqtl.org/tutorials/rqtltour.pdf">here</a>.
+ </div>
</div>
<div id="mapping_result_holder_wrapper" style="display:none;">
<div id="mapping_result_holder"></div>
diff --git a/wqflask/wqflask/templates/show_trait_statistics.html b/wqflask/wqflask/templates/show_trait_statistics.html
index 0a0e9990..974081d3 100644
--- a/wqflask/wqflask/templates/show_trait_statistics.html
+++ b/wqflask/wqflask/templates/show_trait_statistics.html
@@ -5,28 +5,31 @@
<a href="#stats_tab" data-toggle="tab">Basic Statistics</a>
</li>
<li>
- <a href="#histogram_tab" data-toggle="tab">Histogram</a>
+ <a href="#histogram_tab" class="histogram_tab" data-toggle="tab">Histogram</a>
</li>
+ {% if num_values < 256 %}
<li>
- <a href="#bar_chart_tab" data-toggle="tab">Bar Chart</a>
+ <a href="#bar_chart_tab" class="bar_chart_tab" data-toggle="tab">Bar Chart</a>
+ </li>
+ {% endif %}
+ <li>
+ <a href="#probability_plot" class="prob_plot_tab" data-toggle="tab">Probability Plot</a>
+ </li>
+ <li>
+ <a href="#box_plot_tab" class="box_plot_tab" data-toggle="tab">Box Plot</a>
</li>
<li>
- <a href="#probability_plot" data-toggle="tab">Probability Plot</a>
+ <a href="#violin_plot_tab" class="violin_plot_tab" data-toggle="tab">Violin Plot</a>
</li>
- {% if g.user_session.user_ob %}
<li>
<a href="#scatterplot_matrix" data-toggle="tab">Scatterplot Matrix</a>
</li>
- {% endif %}
- <!--<li>
- <a href="#box_plot_tab" data-toggle="tab">Box Plot</a>
- </li>-->
</ul>
<div class="tab-content">
<div class="tab-pane active" id="stats_tab">
<div style="padding: 20px;" class="form-horizontal">
- <table id="stats_table" style="width: 450px; float: left;" class="table table-hover table-striped table-bordered"></table>
+ <table id="stats_table" style="width: {{ stats_table_width }}px; float: left;" class="table table-hover table-striped table-bordered"></table>
</div>
</div>
<div class="tab-pane" id="histogram_tab">
@@ -43,7 +46,8 @@
<div id="histogram" class="barchart"></div>
</div>
</div>
- </div>
+ </div>
+ {% if num_values < 256 %}
<div class="tab-pane" id="bar_chart_tab">
<div style="padding: 20px" class="form-horizontal">
{% if sample_groups|length != 1 %}
@@ -64,7 +68,7 @@
</select>
</div>
{% endif %}
- <div id="update_bar_chart" class="btn-group">
+ <div id="update_bar_chart" class="btn-group" style="margin-bottom: 5px;">
<button type="button" class="btn btn-default sort_by_name" value="name">
<i class="icon-resize-horizontal"></i> Sort By Name
</button>
@@ -72,39 +76,32 @@
<i class="icon-signal"></i> Sort By Value
</button>
</div>
- {% if g.user_session.user_ob %}
<div class="btn-group">
<button type="button" class="btn btn-default" id="color_by_trait">
<i class="icon-tint"></i> Color by Trait
</button>
</div>
- {% endif %}
- </div>
- <div class="row" style="position:relative">
- <div id="bar_chart_legend" style="margin-left: 150px; margin-top:20px; position: absolute;">
- <span id="legend-left"></span>
- <span id="legend-colors"></span>
- <span id="legend-right"></span>
- </div>
- </div>
- <div style="margin-left: 20px; margin-right: 20px;" class="row" id="bar_chart_container">
- <svg></svg>
+ <div id="bar_chart_container">
+ <div id="bar_chart"></div>
</div>
+ </div>
</div>
+ {% endif %}
<div class="tab-pane" id="probability_plot">
<div style="padding: 20px" class="form-horizontal">
{% if sample_groups|length != 1 %}
+ Select Group:
<select class="prob_plot_samples_group">
{% for group, pretty_group in sample_group_types.items() %}
<option value="{{ group }}">{{ pretty_group }}</option>
{% endfor %}
</select>
- <br><br>
+ <br>
+ <br>
{% endif %}
<div id="prob_plot_container">
- <div id="prob_plot_title"></div>
- <svg></svg>
+ <div id="prob_plot_div"></div>
</div>
<div id="shapiro_wilk_text"></div>
<div>
@@ -115,20 +112,16 @@
</div>
</div>
-<!-- <div class="tab-pane" id="box_plot_tab">
- {% if sample_groups|length > 1 %}
- <select class="box_plot_samples_group">
- {% for group, pretty_group in sample_group_types.items() %}
- <option value="{{ group }}">{{ pretty_group }}</option>
- {% endfor %}
- </select>
- <br><br>
- {% endif %}
+ <div class="tab-pane" id="box_plot_tab">
<div id="box_plot_container">
<div id="box_plot"></div>
</div>
- </div>-->
- {% if g.user_session.user_ob %}
+ </div>
+ <div class="tab-pane" id="violin_plot_tab">
+ <div id="violin_plot_container">
+ <div id="violin_plot"></div>
+ </div>
+ </div>
<div class="tab-pane" id="scatterplot_matrix">
<div style="margin-bottom:40px;" class="btn-group">
@@ -143,7 +136,6 @@
<div id="comparison_scatterplot" class="qtlcharts"></div>
</div>
</div>
- {% endif %}
</div>
</div>
<!--</div>-->
diff --git a/wqflask/wqflask/templates/show_trait_transform_and_filter.html b/wqflask/wqflask/templates/show_trait_transform_and_filter.html
new file mode 100644
index 00000000..4be6d249
--- /dev/null
+++ b/wqflask/wqflask/templates/show_trait_transform_and_filter.html
@@ -0,0 +1,83 @@
+<div>
+ <div class="form-horizontal">
+ <p>Edit or delete values in the Trait Data boxes, and use the
+ <strong>Reset</strong> option as
+ needed.
+ </p>
+
+ <div id="blockMenuSpan" class="input-append" style="margin-bottom: 10px;">
+ <label for="remove_samples_field">Block samples by index:</label>
+ <input type="text" id="remove_samples_field" placeholder="Example: 3, 5-10, 12">
+ <select id="block_group" size="1">
+ <option value="primary">
+ {{ sample_group_types['samples_primary'] }}
+ </option>
+ <option value="other">
+ {{ sample_group_types['samples_other'] }}
+ </option>
+ </select>
+ <input type="button" id="block_by_index" class="btn btn-danger" value="Block">
+ </div>
+ <div id="remove_samples_invalid" class="alert alert-error" style="display:none;">
+ Please check that your input is formatted correctly, e.g. <strong>3, 5-10, 12</strong>
+ </div>
+ {% if sample_groups[0].attributes %}
+ <div class="input-append" style="margin-top:10px; margin-bottom:10px;">
+ <label for="exclude_menu">Block samples by group:</label>
+ <select id="exclude_menu" size=1>
+ {% for attribute in sample_groups[0].attributes %}
+ <option value="{{ sample_groups[0].attributes[attribute].name.replace(' ', '_') }}">
+ {{ sample_groups[0].attributes[attribute].name }}</option>
+ {% endfor %}
+ </select>
+ <select id="attribute_values" size=1>
+ </select>
+ <input type="button" id="exclude_group" class="btn" value="Block">
+ </div>
+ {% endif %}
+ <div>
+ <input type="button" id="hide_no_value" class="btn btn-default" value="Hide No Value">
+ <input type="button" id="block_outliers" class="btn btn-default" value="Block Outliers">
+ <input type="button" class="btn btn-success reset" value="Reset">
+ <span class="input-append">
+ <input type="button" class="btn btn-default export" value="Export">
+ <select class="select optional span2 export_format">
+ <option value="excel">Excel</option>
+ <option value="csv">CSV</option>
+ </select>
+ </span>
+ <br>
+ <div style="margin-top:10px;">
+ <input type="button" id="normalize" class="btn btn-success" value="Normalize">
+ <select id="norm_method" class="select optional span2">
+ {% if negative_vals_exist == "false" %}
+ <option value="log2">Log2</option>
+ <option value="log10">Log10</option>
+ {% endif %}
+ <option value="zscore">Z-score</option>
+ <option value="qnorm">Quantile</option>
+ <option value="sqrt">Square Root</option>
+ <option value="invert">Invert +/-</option>
+ </select>
+ </div>
+ <!--
+ {% if sample_groups[0].sample_qnorm is not none %}
+ <input type="button" id="qnorm" class="btn btn-default" value="Quantile Normalize">
+ {% endif %}
+ -->
+ </div>
+ <br>
+
+ <div>
+ <p>Outliers highlighted in
+ <strong style="background-color:yellow;">yellow</strong>
+ can be hidden using
+ the <strong>Hide Outliers</strong> button.
+ </p>
+
+ <p>Samples with no value (x) can be hidden by clicking
+ <strong>Hide No Value</strong> button.
+ </p>
+ </div>
+ </div>
+</div> \ No newline at end of file
diff --git a/wqflask/wqflask/templates/snp_browser.html b/wqflask/wqflask/templates/snp_browser.html
new file mode 100644
index 00000000..4422ba73
--- /dev/null
+++ b/wqflask/wqflask/templates/snp_browser.html
@@ -0,0 +1,514 @@
+{% extends "base.html" %}
+{% block css %}
+ <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/css/jquery.dataTables.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/packages/DataTables/extensions/buttons.bootstrap.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/typeahead-bootstrap.css" />
+ <link rel="stylesheet" type="text/css" href="/static/new/css/snp_browser.css" />
+{% endblock %}
+{% block content %}
+
+ <div class="container-fluid">
+ <h2>Variant Browser <a class="btn btn-primary" href="http://genenetwork.org/snpbrowser.html" role="button">Info</a></h2>
+ <hr style="height: 1px; background-color: #A9A9A9;">
+ <div class="container" style="border-style: double; position: relative; width: 950px; padding-top: 10px; padding-right: 40px;">
+ <form id="snp_browser_form" method="get" action="/snp_browser">
+ <input type="hidden" name="first_run" value="{{ first_run }}">
+ <input type="hidden" name="chosen_strains_mouse" value="{{ chosen_strains_mouse|join(",") }}">
+ <input type="hidden" name="chosen_strains_rat" value="{{ chosen_strains_rat|join(",") }}">
+ <div class="col-xs-4" style="padding-left: 0px;">
+ <div class="form-group row" style="margin-bottom: 5px;">
+ <label for="snp_or_indel" style="text-align: right;" class="col-xs-4 col-form-label"><b>Type:</b></label>
+ <div class="col-xs-8">
+ <select name="variant">
+ <option value="SNP" {% if variant_type == "SNP" %}selected{% endif %}>SNP</option>
+ <option value="InDel" {% if variant_type == "InDel" %}selected{% endif %}>InDel</option>
+ </select>
+ </div>
+ </div>
+ <div class="form-group row" style="margin-bottom: 5px;">
+ <label for="species" style="text-align: right;" class="col-xs-4 col-form-label"><b>Species:</b></label>
+ <div class="col-xs-8">
+ <select id="species_select" name="species">
+ <option value="Mouse" {% if species_name == "Mouse" %}selected{% endif %}>Mouse</option>
+ <option value="Rat" {% if species_name == "Rat" %}selected{% endif %}>Rat</option>
+ <option value="Human" disabled>Human</option>
+ </select>
+ </div>
+ </div>
+ <div class="form-group row" style="margin-bottom: 5px;">
+ <label for="gene_or_id" style="text-align: right;" class="col-xs-4 col-form-label"><b>Gene or ID:</b></label>
+ <div class="col-xs-8">
+ <input type="text" name="gene_name" size="12" value="{{ gene_name }}">
+ </div>
+ </div>
+ <div class="form-group row">
+ <div style="text-align: center;"><b><font color="red">Or select</font></b></div>
+ </div>
+ <div class="form-group row" style="margin-bottom: 5px;">
+ <label for="chr" style="text-align: right;" class="col-xs-4 col-form-label"><b>Chr:</b></label>
+ <div class="col-xs-8">
+ <select id="chr_select" name="chr">
+ {% for item in this_chr_list %}
+ <option value="{{ item }}" {% if item == chr %}selected{% endif %}>{{ item }}</option>
+ {% endfor %}
+ </select>
+ </div>
+ </div>
+ <div class="form-group row" style="margin-bottom: 5px;">
+ <label for="start_mb" style="text-align: right;" class="col-xs-4 col-form-label"><b>Mb:</b></label>
+ <div class="col-xs-8">
+ <input type="text" name="start_mb" size="10" value="{{ start_mb }}">
+ </div>
+ </div>
+ <div class="form-group row">
+ <label for="end_mb" style="text-align: right;" class="col-xs-4 col-form-label">to</label>
+ <div class="col-xs-8">
+ <input type="text" name="end_mb" size="10" value="{{ end_mb }}">
+ </div>
+ </div>
+ <hr>
+ <div class="form-group row">
+ <label class="col-xs-4 col-form-label"></label>
+ <div class="col-xs-8">
+ <button class="btn btn-primary" type="submit">Search</button>
+ </div>
+ </div>
+ </div>
+ <div class="col-xs-4" style="padding-left: 0px;">
+ <div class="form-group row" style="margin-bottom: 10px;">
+ <label for="strains" style="text-align: right;" class="col-xs-4 col-form-label"><b>Strains:</b></label>
+ <div class="col-xs-8">
+ <select id="strain_select" name="strains" style="width: 70%;">
+ {% if species_name == "Mouse" %}
+ {% for strain in strain_lists['mouse'] %}
+ <option value="{{ strain }}" {% if loop.index == 1 %}selected{% endif %}>{{ strain }}</option>
+ {% endfor %}
+ {% elif species_name == "Rat" %}
+ {% for strain in strain_lists['rat'] %}
+ <option value="{{ strain }}" {% if loop.index == 1 %}selected{% endif %}>{{ strain }}</option>
+ {% endfor %}
+ {% endif %}
+ </select>
+ <div style="float: right; line-height: 20px;">
+ <input class="btn btn-primary" type="button" name="add_strain" value="Add" style="vertical-align: middle;">
+ </div>
+ </div>
+ </div>
+ <div class="form-group row">
+ <label for="chosen_strains_select" style="text-align: right;" class="col-xs-4 col-form-label"><b><font color="red">Limit to:</font></b> <input type="checkbox" name="limit_strains" {% if limit_strains == "true" %}checked{% endif %} size="100"></label>
+ <div class="col-xs-8">
+ <select id="chosen_strains_select" size="11" style="width: 70%;">
+ {% for strain in chosen_strains %}
+ <option value="{{ strain }}">{{ strain }}</option>
+ {% endfor %}
+ </select>
+ <div style="float: right; line-height: 189px;">
+ <input class="btn btn-primary" type="button" name="remove_strain" value="Cut" style="vertical-align: middle;">
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="col-xs-4" style="padding-left: 20px;">
+ <div class="form-group row" style="margin-bottom: 5px;">
+ <label for="domain" style="text-align: right;" class="col-xs-4 col-form-label"><b>Domain:</b></label>
+ <div class="col-xs-8">
+ <select name="domain" size="4">
+ <option value="All" {% if domain == "All" %}selected{% endif %}>All</option>
+ <option value="Exon" {% if domain == "Exon" %}selected{% endif %}>Exon</option>
+ <option value="5' UTR" {% if domain == "5' UTR" %}selected{% endif %}>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5' UTR</option>
+ <option value="Coding" {% if domain == "Coding" %}selected{% endif %}>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Coding Region</option>
+ <option value="3' UTR" {% if domain == "3' UTR" %}selected{% endif %}>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3' UTR</option>
+ <option value="Intron" {% if domain == "Intron" %}selected{% endif %}>Intron</option>
+ <option value="Splice Site" {% if domain == "Splice Site" %}selected{% endif %}>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Splice Site</option>
+ <option value="Nonsplice Site" {% if domain == "Nonsplice Site" %}selected{% endif %}>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Nonsplice Site</option>
+ <option value="Upstream" {% if domain == "Upstream" %}selected{% endif %}>Upstream</option>
+ <option value="Downstream" {% if domain == "Downstream" %}selected{% endif %}>Downstream</option>
+ <option value="Intergenic" {% if domain == "Intergenic" %}selected{% endif %}>Intergenic</option>
+ </select>
+ </div>
+ </div>
+ <div class="form-group row" style="margin-bottom: 5px;">
+ <label for="function" style="text-align: right;" class="col-xs-4 col-form-label"><b>Function:</b></label>
+ <div class="col-xs-8">
+ <select name="function" size="3">
+ <option value="All" {% if function == "All" %}selected{% endif %}>All</option>
+ <option value="Nonsynonymous" {% if function == "Nonsynonymous" %}selected{% endif %}>Nonsynonymous</option>
+ <option value="Synonymous" {% if function == "Synonymous" %}selected{% endif %}>Synonymous</option>
+ <option value="Start Gained" {% if function == "Start Gained" %}selected{% endif %}>Start Gained</option>
+ <option value="Start Lost" {% if function == "Start Lost" %}selected{% endif %}>Start Lost</option>
+ <option value="Stop Gained" {% if function == "Stop Gained" %}selected{% endif %}>Stop Gained</option>
+ <option value="Stop Lost" {% if function == "Stop Lost" %}selected{% endif %}>Stop Lost</option>
+ </select>
+ </div>
+ </div>
+ <div class="form-group row" style="margin-bottom: 5px;">
+ <label for="source" style="text-align: right;" class="col-xs-4 col-form-label"><b>Source:</b></label>
+ <div class="col-xs-8">
+ <select name="source">
+ <option value="All" {% if source == "All" %}selected{% endif %}>All</option>
+ <option value="None" {% if source == "None" %}selected{% endif %}>None</option>
+ <option value="dbSNP" {% if source == "dbSNP" %}selected{% endif %}>dbSNP</option>
+ <option value="dbSNP (release 149)" {% if source == "dbSNP (release 149)" %}selected{% endif %}>dbSNP (release 149)</option>
+ <option value="Sanger/UCLA" {% if source == "Sanger/UCLA" %}selected{% endif %}>Sanger/UCLA</option>
+ <option value="UTHSC_CITG" {% if source == "UTHSC_CITG" %}selected{% endif %}>UTHSC_CITG</option>
+ </select>
+ </div>
+ </div>
+ <div class="form-group row">
+ <label for="criteria" style="text-align: right;" class="col-xs-4 col-form-label"><b>ConScore:</b></label>
+ <div class="col-xs-8">
+ <select name="criteria" size="1">
+ <option value=">=" {% if criteria == ">=" %}selected{% endif %}>&gt;=</option>
+ <option value="==" {% if criteria == "==" %}selected{% endif %}>=</option>
+ <option value="<=" {% if criteria == "<=" %}selected{% endif %}>&lt;=</option>
+ </select>
+ <input type="text" name="score" value="{{ score }}" size="5">
+ </div>
+ </div>
+ <div class="form-group row" style="margin-bottom: 5px;">
+ <label style="text-align: right;" class="col-xs-4 col-form-label"><input type="checkbox" name="redundant" {% if redundant == "true" %}checked{% endif %}></label>
+ <div class="col-xs-8">
+ Non-redundant SNP Only
+ </div>
+ </div>
+ <div class="form-group row">
+ <label style="text-align: right;" class="col-xs-4 col-form-label"><input type="checkbox" name="diff_alleles" {% if diff_alleles == "true" %}checked{% endif %}></label>
+ <div class="col-xs-8">
+ Different Alleles Only
+ </div>
+ </div>
+ </div>
+ </form>
+ </div>
+
+ <div style="margin-top: 20px;">
+ {% if filtered_results is defined %}
+ {% if filtered_results|length > limit_number %}
+ There are more than 10000 results. Consider limiting your search to a smaller range.
+ {% else %}
+ <table class="dataTable cell-border nowrap" id="results_table" style="float: left;">
+ <thead>
+ <tr>
+ <th></th>
+ {% if header_fields|length == 2 %}
+ {% for header in header_fields[0] %}
+ <th data-export="{{ header }}">{{ header }}</th>
+ {% endfor %}
+ {% for strain in header_fields[1] %}
+ <th data-export="{{ strain }}" style="align: center; text-align: center; line-height: 15px;">{% for letter in strain %}<div style="transform: rotate(90deg);">{{ letter }}</div>{% endfor %}</th>
+ {% endfor %}
+ {% else %}
+ {% for header in header_fields %}
+ <th data-export="{{ header }}">{{ header }}</th>
+ {% endfor %}
+ {% endif %}
+ </tr>
+ </thead>
+ <tbody>
+ <td colspan="100%" align="center"><br><b><font size="15">Loading...</font></b><br></td>
+ </tbody>
+ </table>
+ {% endif %}
+ {% endif %}
+ </div>
+ </div>
+
+{% endblock %}
+{% block js %}
+ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/jquery.dataTables.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/packages/DataTables/js/dataTables.naturalSort.js"></script>
+ <script language="javascript" type="text/javascript" src="/static/new/js_external/typeahead.bundle.js"></script>
+
+ <script language="javascript" type="text/javascript" src="/static/new/javascript/typeahead_rn6.json"></script>
+
+ <script type='text/javascript'>
+ var json_rows = {{ table_rows|safe }};
+ var empty_columns = {{ empty_columns|safe }};
+ </script>
+
+ <script language="javascript">
+
+ var substringMatcher = function(strs) {
+ return function findMatches(q, cb) {
+ var matches, substringRegex;
+
+ // an array that will be populated with substring matches
+ matches = [];
+
+ // regex used to determine if a string contains the substring `q`
+ substrRegex = new RegExp(q, 'i');
+
+ // iterate through the pool of strings and for any string that
+ // contains the substring `q`, add it to the `matches` array
+ $.each(strs, function(i, str) {
+ if (substrRegex.test(str)) {
+ matches.push(str);
+ }
+ });
+
+ cb(matches);
+ };
+ };
+
+ $('input[name=gene_name]').typeahead({
+ minLength: 2,
+ hint: true,
+ highlight: true
+ },
+ {
+ name: 'rn6-genes',
+ source: substringMatcher(rat_genes)
+ });
+
+ {% if filtered_results is defined %}
+ $("#results_table").DataTable( {
+ 'data': json_rows,
+ {% if variant_type == "SNP" %}
+ 'columns': [
+ {
+ 'data': null,
+ 'orderable': false,
+ 'render': function(data, type, row, meta) {
+ return '<input type="checkbox" name="trait_check">'
+ }
+ }, {
+ 'data': 'index'
+ }, {
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.rs != "") {
+ return '<b><a href="' + data.snp_url + '">' + data.snp_name + '</a></b>'
+ } else {
+ return '<a href="' + data.snp_url + '">' + data.snp_name + '</a>'
+ }
+ }
+ }, {
+ 'data': 'chr'
+ }, {
+ 'data': 'mb_formatted'
+ }, {
+ 'data': 'alleles'
+ }, {% if empty_columns['snp_source'] == "true" %}{
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.snp_source == "Sanger/UCLA") {
+ return '<a href="' + data.source_urls[0] + '">Sanger</a><a href="' + data.source_urls[1] + '">UCLA</a>'
+ } else {
+ return data.snp_source
+ }
+ }
+ }, {% endif %} {% if empty_columns['conservation_score'] == "true" %}{
+ 'data': 'conservation_score'
+ }, {% endif %} {% if empty_columns['gene_name'] == "true" %}{
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.gene_name != "") {
+ return '<i>' + data.gene_name + '</i><br><a href="' + data.gene_link + '">NCBI</a>'
+ } else {
+ return data.gene_name
+ }
+ }
+ }, {% endif %} {% if empty_columns['transcript'] == "true" %}{
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ if (data.transcript != "") {
+ return '<a href="' + data.transcript_link + '">' + data.transcript + '</a>'
+ } else {
+ return data.transcript
+ }
+ }
+ }, {% endif %} {% if empty_columns['exon'] == "true" %}{
+ 'data': 'exon'
+ }, {% endif %}{
+ 'data': 'domain_1'
+ }, {% if empty_columns['domain_2'] == "true" %}{
+ 'data': 'domain_2'
+ }, {% endif %} {% if empty_columns['function'] == "true" %}{
+ 'data': 'function'
+ }, {% endif %} {% if empty_columns['function_details'] == "true" %}{
+ 'data': 'function_details'
+ }, {% endif %} {% for item in allele_list %} {
+ 'data': null,
+ 'orderable': false,
+ 'render': function(data, type, row, meta) {
+ if (typeof data.allele_value_list[{{ loop.index - 1 }}][0] !== "undefined") {
+ return data.allele_value_list[{{ loop.index - 1 }}][0]
+ } else {
+ return ''
+ }
+ }
+ }{% if loop.index < allele_list|length %},{% endif %}{% endfor %}
+ ],
+ 'createdRow': function( row, data, dataIndex) {
+ $('td', row).eq(0).attr("style", "text-align: center; padding: 4px 10px 2px 10px;");
+ $('td', row).eq(1).attr("align", "right");
+ for (i = {{ 15 - empty_field_count }}; i < ({{ 15 - empty_field_count }} + {{ allele_list|length }}); i++) {
+ var this_allele = $('td', row).eq(i).text();
+ $('td', row).eq(i).attr("style", "text-align: center; padding: 4px 10px 2px 10px;");
+ switch (this_allele) {
+ case "A":
+ $('td', row).eq(i).addClass('A_allele_color');
+ break;
+ case "C":
+ $('td', row).eq(i).addClass('C_allele_color');
+ break;
+ case "T":
+ $('td', row).eq(i).addClass('T_allele_color');
+ break;
+ case "G":
+ $('td', row).eq(i).addClass('G_allele_color');
+ break;
+ case "t":
+ $('td', row).eq(i).addClass('t_allele_color');
+ break;
+ case "c":
+ $('td', row).eq(i).addClass('c_allele_color');
+ break;
+ case "a":
+ $('td', row).eq(i).addClass('a_allele_color');
+ break;
+ case "g":
+ $('td', row).eq(i).addClass('g_allele_color');
+ break;
+ default:
+ $('td', row).eq(i).addClass('default_allele_color');
+ }
+ }
+ },
+ {% else %}
+ 'columns': [
+ {
+ 'data': null,
+ 'render': function(data, type, row, meta) {
+ return '<input type="checkbox" name="trait_check">'
+ }
+ }, {
+ 'data': 'index'
+ }, {
+ 'data': 'indel_name'
+ }, {
+ 'data': 'indel_type'
+ }, {
+ 'data': 'indel_chr'
+ }, {
+ 'data': 'indel_mb_s'
+ }, {
+ 'data': 'indel_mb_e'
+ }, {
+ 'data': 'indel_strand'
+ }, {
+ 'data': 'indel_size'
+ }, {
+ 'data': 'indel_sequence'
+ }, {
+ 'data': 'source_name'
+ }
+ ],
+ {% endif %}
+ 'order': [[1, "asc" ]],
+ 'sDom': "rti",
+ 'iDisplayLength': -1,
+ 'processing': true,
+ 'language': {
+ 'loadingRecords': '&nbsp;',
+ 'processing': 'Loading...'
+ }
+ });
+ {% endif %}
+
+ $("#species_select").change(function() {
+ this_species = $(this).val();
+ $("#strain_select").empty()
+ $("#chosen_strains_select").empty()
+ $("#chr_select").empty()
+
+ if (this_species == "Mouse") {
+ {% for strain in strain_lists["mouse"] %}
+ var option = $('<option></option>').attr("value", "{{ strain }}").text("{{ strain }}");
+ $("select[name=strains]").append(option);
+ {% endfor %}
+
+ {% for chr in mouse_chr_list %}
+ var option = $('<option></option>').attr("value", "{{ chr }}").text("{{ chr }}");
+ $("select[name=chr]").append(option);
+ {% endfor %}
+
+ chosen_strains = $("input[name=chosen_strains_mouse]").val().split(",")
+ } else if (this_species == "Rat") {
+ {% for strain in strain_lists["rat"] %}
+ var option = $('<option></option>').attr("value", "{{ strain }}").text("{{ strain }}");
+ $("select[name=strains]").append(option);
+ {% endfor %}
+
+ {% for chr in rat_chr_list %}
+ var option = $('<option></option>').attr("value", "{{ chr }}").text("{{ chr }}");
+ $("select[name=chr]").append(option);
+ {% endfor %}
+
+ chosen_strains = $("input[name=chosen_strains_rat]").val().split(",")
+ }
+
+ for (i=0; i < chosen_strains.length; i++) {
+ var option = $('<option></option>').attr("value", chosen_strains[i]).text(chosen_strains[i]);
+ $("#chosen_strains_select").append(option)
+ }
+ });
+
+ $("input[name=add_strain]").click(function() {
+ var selected_strain = $("select[name=strains] option:selected").val();
+
+ var current_species = $("#species_select").val();
+ if (current_species == "Mouse") {
+ stored_strains = $("input[name=chosen_strains_mouse]").val().split(",")
+ if (!(stored_strains.includes(selected_strain))){
+ stored_strains.push(selected_strain)
+ $("input[name=chosen_strains_mouse]").val(stored_strains.join(","))
+ $("#chosen_strains_select").append("<option value='" + selected_strain + "'>" + selected_strain + "</option>");
+ }
+ } else if (current_species == "Rat") {
+ stored_strains = $("input[name=chosen_strains_rat]").val().split(",")
+ if (!(stored_strains.includes(selected_strain))){
+ stored_strains.push(selected_strain)
+ $("input[name=chosen_strains_rat]").val(stored_strains.join(","))
+ $("#chosen_strains_select").append("<option value='" + selected_strain + "'>" + selected_strain + "</option>");
+ }
+ }
+ });
+
+ $("input[name=remove_strain]").click(function() {
+ var selected_strain = $("#chosen_strains_select option:selected").val();
+ $("#chosen_strains_select option[value='" + selected_strain + "']").remove();
+
+ var current_species = $("#species_select").val();
+
+ if (current_species == "Mouse") {
+ stored_strains = $("input[name=chosen_strains_mouse]").val().split(",")
+ for (i=0; i < stored_strains.length; i++) {
+ if (stored_strains[i] == selected_strain) {
+ stored_strains.splice(i, 1);
+ break;
+ }
+ }
+ $("input[name=chosen_strains_mouse]").val(stored_strains.join(","))
+ } else if (current_species == "Rat") {
+ stored_strains = $("input[name=chosen_strains_rat]").val().split(",")
+ for (i=0; i < stored_strains.length; i++) {
+ if (stored_strains[i] == selected_strain) {
+ stored_strains.splice(i, 1);
+ break;
+ }
+ }
+ $("input[name=chosen_strains_rat]").val(stored_strains.join(","))
+ }
+ });
+
+ $("#snp_browser_form").submit(function() {
+ var strain_list = [];
+ $("#chosen_strains_select option").each(function() {
+ strain_list.push($(this).val());
+ });
+ $("input[name=chosen_strains]").val(strain_list.join(","));
+ });
+ </script>
+{% endblock %}
+
diff --git a/wqflask/wqflask/templates/submit_trait.html b/wqflask/wqflask/templates/submit_trait.html
index 2529a4f4..68b06f55 100644
--- a/wqflask/wqflask/templates/submit_trait.html
+++ b/wqflask/wqflask/templates/submit_trait.html
@@ -2,13 +2,13 @@
{% block title %}Trait Submission{% endblock %}
{% block content %}
<!-- Start of body -->
- <form method="post" action="/show_trait">
+ <form method="post" action="/show_temp_trait">
<div class="container-fluid">
{{ flash_me() }}
<div class="row" style="width: 1400px !important;">
- <div class="col-xs-5">
+ <div class="col-xs-3">
<section id="description">
<div>
<h2 style="color: #5a5a5a;">Introduction</h2>
@@ -32,8 +32,8 @@
<div class="form-group">
<h2 style="color: #5a5a5a;">Trait Submission Form</h2>
<hr>
- <div style="padding-bottom: 50px;" class="form-horizontal">
- <h3>1. Choose cross or RI set:</h3>
+ <div style="margin-bottom: 150px;" class="form-horizontal">
+ <h3>1. Choose Species and Group:</h3>
<br>
<div class="col-xs-2" style="min-height: 15vh; display: flex; align-items: center;">
<img src="/static/new/images/step1.gif">
@@ -52,32 +52,34 @@
</div>
</div>
</div>
- <div class="form-horizontal"><img src="/static/new/images/arrowdown.gif" style="display:block; margin-left: 50%; margin-right: 50%;"></div>
</div>
<div style="padding-bottom: 50px;" class="form-horizontal">
<h3>2. Enter Trait Data:</h3>
+ <h4 style="color:red;">File uploading isn't enabled yet, but is coming soon.</h4>
<br>
- <div class="col-xs-2" style="min-height: 100vh; display: flex; align-items: center;">
+ <div class="col-xs-2" style="min-height: 50vh; max-height: 100vh; display: flex; align-items: center;">
<img src="/static/new/images/step2.gif">
</div>
<div class="col-xs-10">
+ <!--
<div class="form-group" style="padding-left: 15px;">
<p>
<b>From a File:</b> You can enter data by entering a file name here. The file should contain a series of numbers representing trait values.
- The values can be on one line separated by spaces or tabs, or they can be on separate lines. Include one value for each progeny individual
- or recombinant inbred line. Represent missing values with a non-numeric character such as "x". If you have chosen a recombinant inbred set,
- when you submit your data will be displayed in a form where you can confirm and/or edit them. If you enter a file name here, any data that
+ The values can be on one line separated by spaces or tabs, or they can be on separate lines. Include one value for each progeny individual
+ or recombinant inbred line. Represent missing values with a non-numeric character such as "x". If you have chosen a recombinant inbred set,
+ when you submit your data will be displayed in a form where you can confirm and/or edit them. If you enter a file name here, any data that
you paste into the next section will be ignored.
</p>
<input type="file" name="trait_file" style="border-width: 1px; border-style: solid; border-color: #999999;">
</div>
+ -->
<div class="form-group" style="padding-left: 15px;">
<p>
- <b>By Pasting or Typing Multiple Values:</b> You can enter data by pasting a series of numbers representing trait values into this area.
- The values can be on one line separated by spaces or tabs, or they can be on separate lines. Include one value for each progeny individual
- or recombinant inbredline. Represent missing values with a non-numeric character such as "x". If you have chosen a recombinant inbred set,
- when you submit your data will be displayed in a form where you can confirm and/or edit them. If you enter a file name in the previous section,
- any data that you paste here will be ignored. Check sample data for the correct format.
+ <b>Paste or Type Multiple Values:</b> You can enter data by pasting a series of numbers representing trait values into this area.
+ The values can be on one line separated by spaces or tabs, or they can be on separate lines. Include one value for each individual
+ or line. Use an "x" for missing values. If you have chosen a set of inbred strains, then your data will be displayed in a form in
+ which you can confirm and/or edit. If you enter a file name in the previous section,
+ any data that you paste here will be ignored. Check <a href="http://gn1.genenetwork.org/RIsample.html">sample data</a> for the correct format.
</p>
<textarea name="trait_paste" rows="6" cols="70"></textarea>
</div>
diff --git a/wqflask/wqflask/templates/tutorials.html b/wqflask/wqflask/templates/tutorials.html
new file mode 100644
index 00000000..1ac528a9
--- /dev/null
+++ b/wqflask/wqflask/templates/tutorials.html
@@ -0,0 +1,17 @@
+{% extends "base.html" %}
+{% block title %}Tutorials/Primers{% endblock %}
+{% block content %}
+
+<Table width= "100%" cellSpacing=0 cellPadding=5><TR>
+<!-- Body Start from Here -->
+<TD valign="top" height="200" width="100%">
+ <P class="title">Tutorials/Primers</P>
+ <UL>
+ <LI><A HREF="http://www.nervenet.org/tutorials/HS_Rat_Using_GeneNetwork_21Apr2020v6.pptx">Statistical and genetic functions,
+and initial mapping results for Rat GWAS P50 as implemented in GeneNetwork.org</A><P></P>
+ </UL>
+ <P></P>
+</TD>
+</TR></TABLE>
+
+{% endblock %}
diff --git a/wqflask/wqflask/templates/webgestalt_page.html b/wqflask/wqflask/templates/webgestalt_page.html
new file mode 100644
index 00000000..36b3cebf
--- /dev/null
+++ b/wqflask/wqflask/templates/webgestalt_page.html
@@ -0,0 +1,35 @@
+{% extends "base.html" %}
+{% block title %}{% if wrong_input == "True" %}WebGestalt Error{% else %}Opening WebGestalt{% endif %}{% endblock %}
+{% block content %}
+ {% if wrong_input == "True" %}
+ {{ header("Error") }}
+
+ <div class="container">
+ {% if chip_name == "mixed" %}
+ <h3>Sorry, the analysis was interrupted because your selections from GeneNetwork apparently include data from more than one array platform (i.e., Affymetrix U74A and M430 2.0). Most WebGestalt analyses assume that you are using a single array type and compute statistical values on the basis of that particular array. Please reselect traits from a signle platform and submit again.</h3>
+ {% elif chip_name == "not_microarray" %}
+ <h3>You need to select at least one microarray trait to submit.</hr>
+ {% elif '_NA' in chip_name %}
+ <h3>Sorry, the analysis was interrupted because your selections from GeneNetwork apparently include data from platform {{ chip_name }} which is unknown by WebGestalt. Please reselect traits and submit again.</h3>
+ {% else %}
+ <h3>Sorry, an error occurred while submitting your traits to WebGestalt.</h3>
+ {% endif %}
+ </div>
+ {% else %}
+ <div class="container">
+ <h3>Opening WebGestalt...</h3>
+ </div>
+ <form method="post" action="http://www.webgestalt.org/option.php" name="WebGestalt">
+ {% for key in hidden_vars %}
+ <input type="hidden" name="{{ key }}" value="{{ hidden_vars[key] }}">
+ {% endfor %}
+ </form>
+ {% endif %}
+{% endblock %}
+{% block js %}
+{% if wrong_input == "False" %}
+<script type="text/javascript">
+ setTimeout('document.WebGestalt.submit()', 1000);
+</script>
+{% endif %}
+{% endblock %} \ No newline at end of file
diff --git a/wqflask/wqflask/tracer.py b/wqflask/wqflask/tracer.py
deleted file mode 100644
index a1043d28..00000000
--- a/wqflask/wqflask/tracer.py
+++ /dev/null
@@ -1,41 +0,0 @@
-from __future__ import absolute_import, division, print_function
-
-print("At top of tracer")
-
-import sys
-
-####################################################################################
-
-# Originally based on http://stackoverflow.com/a/8315566
-def tracefunc(frame, event, arg, indent=[0]):
-
- func = dict(funcname = frame.f_code.co_name,
- filename = frame.f_code.co_filename,
- lineno = frame.f_lineno)
-
- #These are too common to bother printing...
- too_common = (
- '/home/sam/ve27/local/lib/python2.7/site-packages/werkzeug/',
- '/home/sam/ve27/local/lib/python2.7/site-packages/jinja2/',
- )
-
-
- if func['filename'].startswith(too_common):
- return tracefunc
-
- info = "{funcname} [{filename}: {lineno}]".format(**func)
-
- if event == "call":
- indent[0] += 2
- #print("-" * indent[0] + "> call function", frame.f_code.co_name)
- print("-" * indent[0] + "> call function:", info)
- elif event == "return":
- print("<" + "-" * indent[0], "exit function:", info)
- indent[0] -= 2
- return tracefunc
-
-def turn_on():
- sys.settrace(tracefunc)
- print("Tracing turned on!!!!")
-####################################################################################
-
diff --git a/wqflask/wqflask/user_login.py b/wqflask/wqflask/user_login.py
new file mode 100644
index 00000000..da3cc504
--- /dev/null
+++ b/wqflask/wqflask/user_login.py
@@ -0,0 +1,469 @@
+from __future__ import print_function, division, absolute_import
+
+import os
+import hashlib
+import datetime
+import time
+import logging
+import uuid
+import hashlib
+import hmac
+import base64
+import requests
+
+import simplejson as json
+
+import redis # used for collections
+Redis = redis.StrictRedis()
+
+from flask import (Flask, g, render_template, url_for, request, make_response,
+ redirect, flash, abort)
+
+from wqflask import app
+from wqflask import pbkdf2
+from wqflask.user_session import UserSession
+
+from utility import hmac
+from utility.redis_tools import is_redis_available, get_user_id, get_user_by_unique_column, set_user_attribute, save_user, save_verification_code, check_verification_code, get_user_collections, save_collections
+
+from utility.logger import getLogger
+logger = getLogger(__name__)
+
+from smtplib import SMTP
+from utility.tools import SMTP_CONNECT, SMTP_USERNAME, SMTP_PASSWORD, LOG_SQL_ALCHEMY
+
+THREE_DAYS = 60 * 60 * 24 * 3
+
+def timestamp():
+ return datetime.datetime.utcnow().isoformat()
+
+def basic_info():
+ return dict(timestamp = timestamp(),
+ ip_address = request.remote_addr,
+ user_agent = request.headers.get('User-Agent'))
+
+def encode_password(pass_gen_fields):
+ hashfunc = getattr(hashlib, pass_gen_fields['hashfunc'])
+
+ salt = base64.b64decode(pass_gen_fields['salt'])
+ password = pbkdf2.pbkdf2_hex(str(pass_gen_fields['unencrypted_password']),
+ pass_gen_fields['salt'],
+ pass_gen_fields['iterations'],
+ pass_gen_fields['keylength'],
+ hashfunc)
+
+ return password
+
+def set_password(password):
+ pass_gen_fields = {
+ "unencrypted_password": password,
+ "algorithm": "pbkdf2",
+ "hashfunc": "sha256",
+ "salt": base64.b64encode(os.urandom(32)),
+ "iterations": 100000,
+ "keylength": 32,
+ "created_timestamp": timestamp()
+ }
+
+ assert len(password) >= 6, "Password shouldn't be shorter than 6 characters"
+
+ encoded_password = encode_password(pass_gen_fields)
+
+ return encoded_password
+
+def encrypt_password(unencrypted_password, pwfields):
+ hashfunc = getattr(hashlib, pwfields['hashfunc'])
+ salt = base64.b64decode(pwfields['salt'])
+ iterations = pwfields['iterations']
+ keylength = pwfields['keylength']
+ encrypted_password = pbkdf2.pbkdf2_hex(str(unencrypted_password),
+ salt, iterations, keylength, hashfunc)
+ return encrypted_password
+
+def get_signed_session_id(user):
+ session_id = str(uuid.uuid4())
+
+ session_id_signature = hmac.hmac_creation(session_id)
+ session_id_signed = session_id + ":" + session_id_signature
+
+ #ZS: Need to check if this is ever actually used or exists
+ if 'user_id' not in user:
+ user['user_id'] = str(uuid.uuid4())
+ save_user(user, user['user_id'])
+
+ if 'github_id' in user:
+ session = dict(login_time = time.time(),
+ user_type = "github",
+ user_id = user['user_id'],
+ github_id = user['github_id'],
+ user_name = user['name'],
+ user_url = user['user_url'])
+ elif 'orcid' in user:
+ session = dict(login_time = time.time(),
+ user_type = "orcid",
+ user_id = user['user_id'],
+ github_id = user['orcid'],
+ user_name = user['name'],
+ user_url = user['user_url'])
+ else:
+ session = dict(login_time = time.time(),
+ user_type = "gn2",
+ user_id = user['user_id'],
+ user_name = user['full_name'],
+ user_email_address = user['email_address'])
+
+ key = UserSession.user_cookie_name + ":" + session_id
+ Redis.hmset(key, session)
+ Redis.expire(key, THREE_DAYS)
+
+ return session_id_signed
+
+def send_email(toaddr, msg, fromaddr="no-reply@genenetwork.org"):
+ """Send an E-mail through SMTP_CONNECT host. If SMTP_USERNAME is not
+ 'UNKNOWN' TLS is used
+
+ """
+ if SMTP_USERNAME == 'UNKNOWN':
+ server = SMTP(SMTP_CONNECT)
+ server.sendmail(fromaddr, toaddr, msg)
+ else:
+ server = SMTP(SMTP_CONNECT)
+ server.starttls()
+ server.login(SMTP_USERNAME, SMTP_PASSWORD)
+ server.sendmail(fromaddr, toaddr, msg)
+ server.quit()
+ logger.info("Successfully sent email to "+toaddr)
+
+def send_verification_email(user_details, template_name = "email/verification.txt", key_prefix = "verification_code", subject = "GeneNetwork email verification"):
+ verification_code = str(uuid.uuid4())
+ key = key_prefix + ":" + verification_code
+
+ data = json.dumps(dict(id=user_details['user_id'], timestamp = timestamp()))
+
+ Redis.set(key, data)
+ Redis.expire(key, THREE_DAYS)
+
+ recipient = user_details['email_address']
+ body = render_template(template_name, verification_code = verification_code)
+ send_email(recipient, subject, body)
+ return {"recipient": recipient, "subject": subject, "body": body}
+
+@app.route("/n/login", methods=('GET', 'POST'))
+def login():
+ params = request.form if request.form else request.args
+ logger.debug("in login params are:", params)
+
+ if not params: #ZS: If coming to page for first time
+ from utility.tools import GITHUB_AUTH_URL, GITHUB_CLIENT_ID, ORCID_AUTH_URL, ORCID_CLIENT_ID
+ external_login = {}
+ if GITHUB_AUTH_URL and GITHUB_CLIENT_ID != 'UNKNOWN':
+ external_login["github"] = GITHUB_AUTH_URL
+ if ORCID_AUTH_URL and ORCID_CLIENT_ID != 'UNKNOWN':
+ external_login["orcid"] = ORCID_AUTH_URL
+ return render_template("new_security/login_user.html", external_login = external_login, redis_is_available=is_redis_available())
+ else: #ZS: After clicking sign-in
+ if 'type' in params and 'uid' in params:
+ user_details = get_user_by_unique_column("user_id", params['uid'])
+ if user_details:
+ session_id_signed = get_signed_session_id(user_details)
+ if 'name' in user_details and user_details['name'] != "None":
+ display_id = user_details['name']
+ elif 'github_id' in user_details:
+ display_id = user_details['github_id']
+ elif 'orcid' in user_details:
+ display_id = user_details['orcid']
+ else:
+ display_id = ""
+ flash("Thank you for logging in {}.".format(display_id), "alert-success")
+ response = make_response(redirect(url_for('index_page')))
+ response.set_cookie(UserSession.user_cookie_name, session_id_signed, max_age=None)
+ else:
+ flash("Something went unexpectedly wrong.", "alert-danger")
+ response = make_response(redirect(url_for('index_page')))
+ return response
+ else:
+ user_details = get_user_by_unique_column("email_address", params['email_address'])
+ password_match = False
+ if user_details:
+ submitted_password = params['password']
+ pwfields = json.loads(user_details['password'])
+ encrypted_pass = encrypt_password(submitted_password, pwfields)
+ password_match = pbkdf2.safe_str_cmp(encrypted_pass, pwfields['password'])
+ else: # Invalid e-mail
+ flash("Invalid e-mail address. Please try again.", "alert-danger")
+ response = make_response(redirect(url_for('login')))
+
+ return response
+ if password_match: # If password correct
+ if user_details['confirmed']: # If account confirmed
+ import_col = "false"
+ anon_id = ""
+ if 'import_collections' in params:
+ import_col = "true"
+ anon_id = params['anon_id']
+
+ session_id_signed = get_signed_session_id(user_details)
+ flash("Thank you for logging in {}.".format(user_details['full_name']), "alert-success")
+ response = make_response(redirect(url_for('index_page', import_collections = import_col, anon_id = anon_id)))
+ response.set_cookie(UserSession.user_cookie_name, session_id_signed, max_age=None)
+ return response
+ else:
+ email_ob = send_verification_email(user_details)
+ return render_template("newsecurity/verification_still_needed.html", subject=email_ob['subject'])
+ else: # Incorrect password
+ #ZS: It previously seemed to store that there was an incorrect log-in attempt here, but it did so in the MySQL DB so this might need to be reproduced with Redis
+ flash("Invalid password. Please try again.", "alert-danger")
+ response = make_response(redirect(url_for('login')))
+
+ return response
+
+@app.route("/n/login/github_oauth2", methods=('GET', 'POST'))
+def github_oauth2():
+ from utility.tools import GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET, GITHUB_AUTH_URL
+ code = request.args.get("code")
+ data = {
+ "client_id": GITHUB_CLIENT_ID,
+ "client_secret": GITHUB_CLIENT_SECRET,
+ "code": code
+ }
+ logger.debug("LOGIN DATA:", data)
+ result = requests.post("https://github.com/login/oauth/access_token", json=data)
+ result_dict = {arr[0]:arr[1] for arr in [tok.split("=") for tok in [token.encode("utf-8") for token in result.text.split("&")]]}
+
+ github_user = get_github_user_details(result_dict["access_token"])
+
+ user_details = get_user_by_unique_column("github_id", github_user["id"])
+ if user_details == None:
+ user_details = {
+ "user_id": str(uuid.uuid4()),
+ "name": github_user["name"].encode("utf-8") if github_user["name"] else "None",
+ "github_id": github_user["id"],
+ "user_url": github_user["html_url"].encode("utf-8"),
+ "login_type": "github",
+ "organization": "",
+ "active": 1,
+ "confirmed": 1
+ }
+ save_user(user_details, user_details["user_id"])
+
+ url = "/n/login?type=github&uid="+user_details["user_id"]
+ return redirect(url)
+
+def get_github_user_details(access_token):
+ from utility.tools import GITHUB_API_URL
+ result = requests.get(GITHUB_API_URL, headers = {'Authorization':'token ' + access_token }).content
+
+ return json.loads(result)
+
+@app.route("/n/login/orcid_oauth2", methods=('GET', 'POST'))
+def orcid_oauth2():
+ from uuid import uuid4
+ from utility.tools import ORCID_CLIENT_ID, ORCID_CLIENT_SECRET, ORCID_TOKEN_URL, ORCID_AUTH_URL
+ code = request.args.get("code")
+ error = request.args.get("error")
+ url = "/n/login"
+ if code:
+ data = {
+ "client_id": ORCID_CLIENT_ID,
+ "client_secret": ORCID_CLIENT_SECRET,
+ "grant_type": "authorization_code",
+ "code": code
+ }
+ result = requests.post(ORCID_TOKEN_URL, data=data)
+ result_dict = json.loads(result.text.encode("utf-8"))
+
+ user_details = get_user_by_unique_column("orcid", result_dict["orcid"])
+ if user_details == None:
+ user_details = {
+ "user_id": str(uuid4()),
+ "name": result_dict["name"],
+ "orcid": result_dict["orcid"],
+ "user_url": "%s/%s" % ("/".join(ORCID_AUTH_URL.split("/")[:-2]), result_dict["orcid"]),
+ "login_type": "orcid",
+ "organization": "",
+ "active": 1,
+ "confirmed": 1
+ }
+ save_user(user_details, user_details["user_id"])
+
+ url = "/n/login?type=orcid&uid="+user_details["user_id"]
+ else:
+ flash("There was an error getting code from ORCID")
+ return redirect(url)
+
+def get_github_user_details(access_token):
+ from utility.tools import GITHUB_API_URL
+ result = requests.get(GITHUB_API_URL, headers = {'Authorization':'token ' + access_token }).content
+
+ return json.loads(result)
+
+
+@app.route("/n/logout")
+def logout():
+ logger.debug("Logging out...")
+ UserSession().delete_session()
+ flash("You are now logged out. We hope you come back soon!")
+ response = make_response(redirect(url_for('index_page')))
+ # Delete the cookie
+ response.set_cookie(UserSession.user_cookie_name, '', expires=0)
+ return response
+
+@app.route("/n/forgot_password", methods=['GET'])
+def forgot_password():
+ """Entry point for forgotten password"""
+ print("ARGS: ", request.args)
+ errors = {"no-email": request.args.get("no-email")}
+ print("ERRORS: ", errors)
+ return render_template("new_security/forgot_password.html", errors=errors)
+
+def send_forgot_password_email(verification_email):
+ from email.MIMEMultipart import MIMEMultipart
+ from email.MIMEText import MIMEText
+
+ template_name = "email/forgot_password.txt"
+ key_prefix = "forgot_password_code"
+ subject = "GeneNetwork password reset"
+ fromaddr = "no-reply@genenetwork.org"
+
+ verification_code = str(uuid.uuid4())
+ key = key_prefix + ":" + verification_code
+
+ data = {
+ "verification_code": verification_code,
+ "email_address": verification_email,
+ "timestamp": timestamp()
+ }
+
+ save_verification_code(verification_email, verification_code)
+
+ body = render_template(template_name, verification_code = verification_code)
+
+ msg = MIMEMultipart()
+ msg["To"] = verification_email
+ msg["Subject"] = subject
+ msg["From"] = fromaddr
+ msg.attach(MIMEText(body, "plain"))
+
+ send_email(verification_email, msg.as_string())
+
+ return subject
+
+@app.route("/n/forgot_password_submit", methods=('POST',))
+def forgot_password_submit():
+ """When a forgotten password form is submitted we get here"""
+ params = request.form
+ email_address = params['email_address']
+ next_page = None
+ if email_address != "":
+ logger.debug("Wants to send password E-mail to ", email_address)
+ user_details = get_user_by_unique_column("email_address", email_address)
+ if user_details:
+ email_subject = send_forgot_password_email(user_details["email_address"])
+ return render_template("new_security/forgot_password_step2.html",
+ subject=email_subject)
+ else:
+ flash("The e-mail entered is not associated with an account.", "alert-danger")
+ return redirect(url_for("forgot_password"))
+
+ else:
+ flash("You MUST provide an email", "alert-danger")
+ return redirect(url_for("forgot_password"))
+
+@app.route("/n/password_reset", methods=['GET'])
+def password_reset():
+ """Entry point after user clicks link in E-mail"""
+ logger.debug("in password_reset request.url is:", request.url)
+
+ verification_code = request.args.get('code')
+ hmac = request.args.get('hm')
+
+ if verification_code:
+ user_email = check_verification_code(verification_code)
+ if user_email:
+ user_details = get_user_by_unique_column('email_address', user_email)
+ if user_details:
+ return render_template(
+ "new_security/password_reset.html", user_encode=user_details["email_address"])
+ else:
+ flash("Invalid code: User no longer exists!", "error")
+ else:
+ flash("Invalid code: Password reset code does not exist or might have expired!", "error")
+ else:
+ return redirect(url_for("login"))
+
+@app.route("/n/password_reset_step2", methods=('POST',))
+def password_reset_step2():
+ """Handle confirmation E-mail for password reset"""
+ logger.debug("in password_reset request.url is:", request.url)
+
+ errors = []
+ user_email = request.form['user_encode']
+
+ password = request.form['password']
+ encoded_password = set_password(password)
+
+ set_user_attribute(user_id, "password", encoded_password)
+
+ flash("Password changed successfully. You can now sign in.", "alert-info")
+ response = make_response(redirect(url_for('login')))
+
+ return response
+
+def register_user(params):
+ thank_you_mode = False
+ errors = []
+ user_details = {}
+
+ user_details['email_address'] = params.get('email_address', '').encode("utf-8").strip()
+ if not (5 <= len(user_details['email_address']) <= 50):
+ errors.append('Email Address needs to be between 5 and 50 characters.')
+ else:
+ email_exists = get_user_by_unique_column("email_address", user_details['email_address'])
+ if email_exists:
+ errors.append('User already exists with that email')
+
+ user_details['full_name'] = params.get('full_name', '').encode("utf-8").strip()
+ if not (5 <= len(user_details['full_name']) <= 50):
+ errors.append('Full Name needs to be between 5 and 50 characters.')
+
+ user_details['organization'] = params.get('organization', '').encode("utf-8").strip()
+ if user_details['organization'] and not (5 <= len(user_details['organization']) <= 50):
+ errors.append('Organization needs to be empty or between 5 and 50 characters.')
+
+ password = str(params.get('password', ''))
+ if not (6 <= len(password)):
+ errors.append('Password needs to be at least 6 characters.')
+
+ if params.get('password_confirm') != password:
+ errors.append("Passwords don't match.")
+
+ if errors:
+ return errors
+
+ user_details['password'] = set_password(password)
+ user_details['user_id'] = str(uuid.uuid4())
+ user_details['confirmed'] = 1
+
+ user_details['registration_info'] = json.dumps(basic_info(), sort_keys=True)
+ save_user(user_details, user_details['user_id'])
+
+@app.route("/n/register", methods=('GET', 'POST'))
+def register():
+ errors = None
+
+ params = request.form if request.form else request.args
+ params = params.to_dict(flat=True)
+
+ if params:
+ logger.debug("Attempting to register the user...")
+ errors = register_user(params)
+
+ if len(errors) == 0:
+ flash("Registration successful. You may login with your new account", "alert-info")
+ return redirect(url_for("login"))
+
+ return render_template("new_security/register_user.html", values=params, errors=errors)
+
+@app.errorhandler(401)
+def unauthorized(error):
+ return redirect(url_for('login')) \ No newline at end of file
diff --git a/wqflask/wqflask/user_manager.py b/wqflask/wqflask/user_manager.py
index 1e831896..1b27d7cb 100644
--- a/wqflask/wqflask/user_manager.py
+++ b/wqflask/wqflask/user_manager.py
@@ -1,52 +1,33 @@
from __future__ import print_function, division, absolute_import
-"""Used to Access things in template like this:
-(BUT NOW OUT OF DATE)
-
- x: {{ g.identity.name }}
- security: {{ security.__dict__ }}
-
-"""
-
import os
import hashlib
import datetime
import time
import logging
-
import uuid
import hashlib
import hmac
import base64
-
import urlparse
import simplejson as json
-import sqlalchemy
-from sqlalchemy import orm
-
#from redis import StrictRedis
-import redis
+import redis # used for collections
Redis = redis.StrictRedis()
-
from flask import (Flask, g, render_template, url_for, request, make_response,
redirect, flash, abort)
from wqflask import app
-
-
from pprint import pformat as pf
-from wqflask import pbkdf2
-
+from wqflask import pbkdf2 # password hashing
from wqflask.database import db_session
-
from wqflask import model
from utility import Bunch, Struct, after
-from utility.tools import LOG_SQL, LOG_SQLALCHEMY
import logging
from utility.logger import getLogger
@@ -54,41 +35,44 @@ logger = getLogger(__name__)
from base.data_set import create_datasets_list
+import requests
+
+from utility.redis_tools import get_user_id, get_user_by_unique_column, set_user_attribute, save_user, save_verification_code, check_verification_code, get_user_collections, save_collections
+
+from smtplib import SMTP
+from utility.tools import SMTP_CONNECT, SMTP_USERNAME, SMTP_PASSWORD, LOG_SQL_ALCHEMY
+
THREE_DAYS = 60 * 60 * 24 * 3
#THREE_DAYS = 45
def timestamp():
return datetime.datetime.utcnow().isoformat()
-
class AnonUser(object):
- cookie_name = 'anon_user_v8'
+ """Anonymous user handling"""
+ cookie_name = 'anon_user_v1'
def __init__(self):
self.cookie = request.cookies.get(self.cookie_name)
if self.cookie:
- logger.debug("already is cookie")
+ logger.debug("ANON COOKIE ALREADY EXISTS")
self.anon_id = verify_cookie(self.cookie)
-
else:
- logger.debug("creating new cookie")
+ logger.debug("CREATING NEW ANON COOKIE")
self.anon_id, self.cookie = create_signed_cookie()
+
self.key = "anon_collection:v1:{}".format(self.anon_id)
- @after.after_this_request
- def set_cookie(response):
- response.set_cookie(self.cookie_name, self.cookie)
-
def add_collection(self, new_collection):
collection_dict = dict(name = new_collection.name,
created_timestamp = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
changed_timestamp = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
num_members = new_collection.num_members,
members = new_collection.get_members())
-
+
Redis.set(self.key, json.dumps(collection_dict))
- Redis.expire(self.key, 60 * 60 * 24 * 5)
-
+ Redis.expire(self.key, 60 * 60 * 24 * 365)
+
def delete_collection(self, collection_name):
existing_collections = self.get_collections()
updated_collections = []
@@ -106,7 +90,7 @@ class AnonUser(object):
updated_collections.append(this_collection)
Redis.set(self.key, json.dumps(updated_collections))
-
+
def get_collections(self):
json_collections = Redis.get(self.key)
if json_collections == None or json_collections == "None":
@@ -116,22 +100,20 @@ class AnonUser(object):
for collection in collections:
collection['created_timestamp'] = datetime.datetime.strptime(collection['created_timestamp'], '%b %d %Y %I:%M%p')
collection['changed_timestamp'] = datetime.datetime.strptime(collection['changed_timestamp'], '%b %d %Y %I:%M%p')
+
+ collections = sorted(collections, key = lambda i: i['changed_timestamp'], reverse = True)
return collections
-
+
def import_traits_to_user(self):
- collections_list = json.loads(Redis.get(self.key))
+ result = Redis.get(self.key)
+ collections_list = json.loads(result if result else "[]")
for collection in collections_list:
- uc = model.UserCollection()
- uc.name = collection['name']
- collection_exists = g.user_session.user_ob.get_collection_by_name(uc.name)
+ collection_exists = g.user_session.get_collection_by_name(collection['name'])
if collection_exists:
continue
else:
- uc.user = g.user_session.user_id
- uc.members = json.dumps(collection['members'])
- db_session.add(uc)
- db_session.commit()
-
+ g.user_session.add_collection(collection['name'], collection['members'])
+
def display_num_collections(self):
"""
Returns the number of collections or a blank string if there are zero.
@@ -151,6 +133,7 @@ class AnonUser(object):
print("Couldn't display_num_collections:", why)
return ""
+
def verify_cookie(cookie):
the_uuid, separator, the_signature = cookie.partition(':')
assert len(the_uuid) == 36, "Is session_id a uuid?"
@@ -166,11 +149,14 @@ def create_signed_cookie():
return the_uuid, uuid_signed
class UserSession(object):
- cookie_name = 'session_id_v2'
+ """Logged in user handling"""
+
+ cookie_name = 'session_id_v1'
def __init__(self):
cookie = request.cookies.get(self.cookie_name)
if not cookie:
+ logger.debug("NO USER COOKIE")
self.logged_in = False
return
else:
@@ -181,7 +167,6 @@ class UserSession(object):
self.session_id = session_id
self.record = Redis.hgetall(self.redis_key)
-
if not self.record:
# This will occur, for example, when the browser has been left open over a long
# weekend and the site hasn't been visited by the user
@@ -213,20 +198,152 @@ class UserSession(object):
return ''
@property
- def user_ob(self):
- """Actual sqlalchemy record"""
- # Only look it up once if needed, then store it
- try:
- if LOG_SQLALCHEMY:
- logging.getLogger('sqlalchemy.pool').setLevel(logging.DEBUG)
+ def redis_user_id(self):
+ """User id from ElasticSearch (need to check if this is the same as the id stored in self.records)"""
+
+ user_email = self.record['user_email_address']
+
+ #ZS: Get user's collections if they exist
+ user_id = None
+ user_id = get_user_id("email_address", user_email)
+ return user_id
- # Already did this before
- return self.db_object
- except AttributeError:
- # Doesn't exist so we'll create it
- self.db_object = model.User.query.get(self.user_id)
- return self.db_object
+ @property
+ def user_name(self):
+ """Shortcut to the user_name"""
+ if 'user_name' in self.record:
+ return self.record['user_name']
+ else:
+ return ''
+
+ @property
+ def user_collections(self):
+ """List of user's collections"""
+
+ #ZS: Get user's collections if they exist
+ collections = get_user_collections(self.redis_user_id)
+ return collections
+
+ @property
+ def num_collections(self):
+ """Number of user's collections"""
+
+ return len(self.user_collections)
+
+###
+# ZS: This is currently not used, but I'm leaving it here commented out because the old "set superuser" code (at the bottom of this file) used it
+###
+# @property
+# def user_ob(self):
+# """Actual sqlalchemy record"""
+# # Only look it up once if needed, then store it
+# # raise "OBSOLETE: use ElasticSearch instead"
+# try:
+# if LOG_SQL_ALCHEMY:
+# logging.getLogger('sqlalchemy.pool').setLevel(logging.DEBUG)
+#
+# # Already did this before
+# return self.db_object
+# except AttributeError:
+# # Doesn't exist so we'll create it
+# self.db_object = model.User.query.get(self.user_id)
+# return self.db_object
+ def add_collection(self, collection_name, traits):
+ """Add collection into ElasticSearch"""
+
+ collection_dict = {'id': unicode(uuid.uuid4()),
+ 'name': collection_name,
+ 'created_timestamp': datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
+ 'changed_timestamp': datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
+ 'num_members': len(traits),
+ 'members': list(traits) }
+
+ current_collections = self.user_collections
+ current_collections.append(collection_dict)
+ self.update_collections(current_collections)
+
+ return collection_dict['id']
+
+ def delete_collection(self, collection_id):
+ """Remove collection with given ID"""
+
+ updated_collections = []
+ for collection in self.user_collections:
+ if collection['id'] == collection_id:
+ continue
+ else:
+ updated_collections.append(collection)
+
+ self.update_collections(updated_collections)
+
+ return collection['name']
+
+ def add_traits_to_collection(self, collection_id, traits_to_add):
+ """Add specified traits to a collection"""
+
+ this_collection = self.get_collection_by_id(collection_id)
+
+ updated_collection = this_collection
+ updated_traits = this_collection['members'] + traits_to_add
+
+ updated_collection['members'] = updated_traits
+ updated_collection['num_members'] = len(updated_traits)
+ updated_collection['changed_timestamp'] = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
+
+ updated_collections = []
+ for collection in self.user_collections:
+ if collection['id'] == collection_id:
+ updated_collections.append(updated_collection)
+ else:
+ updated_collections.append(collection)
+
+ self.update_collections(updated_collections)
+
+ def remove_traits_from_collection(self, collection_id, traits_to_remove):
+ """Remove specified traits from a collection"""
+
+ this_collection = self.get_collection_by_id(collection_id)
+
+ updated_collection = this_collection
+ updated_traits = []
+ for trait in this_collection['members']:
+ if trait in traits_to_remove:
+ continue
+ else:
+ updated_traits.append(trait)
+
+ updated_collection['members'] = updated_traits
+ updated_collection['num_members'] = len(updated_traits)
+ updated_collection['changed_timestamp'] = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
+
+ updated_collections = []
+ for collection in self.user_collections:
+ if collection['id'] == collection_id:
+ updated_collections.append(updated_collection)
+ else:
+ updated_collections.append(collection)
+
+ self.update_collections(updated_collections)
+
+ return updated_traits
+
+ def get_collection_by_id(self, collection_id):
+ for collection in self.user_collections:
+ if collection['id'] == collection_id:
+ return collection
+
+ def get_collection_by_name(self, collection_name):
+ for collection in self.user_collections:
+ if collection['name'] == collection_name:
+ return collection
+
+ return None
+
+ def update_collections(self, updated_collections):
+ collection_body = json.dumps(updated_collections)
+
+ save_collections(self.redis_user_id, collection_body)
def delete_session(self):
# And more importantly delete the redis record
@@ -237,13 +354,18 @@ class UserSession(object):
def before_request():
g.user_session = UserSession()
g.cookie_session = AnonUser()
-
+
+@app.after_request
+def set_cookie(response):
+ if not request.cookies.get(g.cookie_session.cookie_name):
+ response.set_cookie(g.cookie_session.cookie_name, g.cookie_session.cookie)
+ return response
+
class UsersManager(object):
def __init__(self):
self.users = model.User.query.all()
logger.debug("Users are:", self.users)
-
class UserManager(object):
def __init__(self, kw):
self.user_id = kw['user_id']
@@ -269,15 +391,20 @@ class RegisterUser(object):
self.errors = []
self.user = Bunch()
- self.user.email_address = kw.get('email_address', '').strip()
+ self.user.email_address = kw.get('email_address', '').encode("utf-8").strip()
if not (5 <= len(self.user.email_address) <= 50):
self.errors.append('Email Address needs to be between 5 and 50 characters.')
+ else:
+ email_exists = get_user_by_unique_column("email_address", self.user.email_address)
+ #email_exists = get_user_by_unique_column(es, "email_address", self.user.email_address)
+ if email_exists:
+ self.errors.append('User already exists with that email')
- self.user.full_name = kw.get('full_name', '').strip()
+ self.user.full_name = kw.get('full_name', '').encode("utf-8").strip()
if not (5 <= len(self.user.full_name) <= 50):
self.errors.append('Full Name needs to be between 5 and 50 characters.')
- self.user.organization = kw.get('organization', '').strip()
+ self.user.organization = kw.get('organization', '').encode("utf-8").strip()
if self.user.organization and not (5 <= len(self.user.organization) <= 50):
self.errors.append('Organization needs to be empty or between 5 and 50 characters.')
@@ -294,28 +421,11 @@ class RegisterUser(object):
logger.debug("No errors!")
set_password(password, self.user)
+ self.user.user_id = str(uuid.uuid4())
+ self.user.confirmed = 1
self.user.registration_info = json.dumps(basic_info(), sort_keys=True)
-
- self.new_user = model.User(**self.user.__dict__)
- db_session.add(self.new_user)
-
- try:
- db_session.commit()
- except sqlalchemy.exc.IntegrityError:
- # This exception is thrown if the email address is already in the database
- # To do: Perhaps put a link to sign in using an existing account here
- self.errors.append("An account with this email address already exists. "
- "Click the button above to sign in using an existing account.")
- return
-
- logger.debug("Adding verification email to queue")
- #self.send_email_verification()
- VerificationEmail(self.new_user)
- logger.debug("Added verification email to queue")
-
- self.thank_you_mode = True
-
+ save_user(self.user.__dict__, self.user.user_id)
def set_password(password, user):
pwfields = Bunch()
@@ -361,7 +471,7 @@ class VerificationEmail(object):
verification_code = str(uuid.uuid4())
key = self.key_prefix + ":" + verification_code
- data = json.dumps(dict(id=user.id,
+ data = json.dumps(dict(id=user.user_id,
timestamp=timestamp())
)
@@ -378,23 +488,35 @@ class ForgotPasswordEmail(VerificationEmail):
template_name = "email/forgot_password.txt"
key_prefix = "forgot_password_code"
subject = "GeneNetwork password reset"
+ fromaddr = "no-reply@genenetwork.org"
- def __init__(self, user):
+ def __init__(self, toaddr):
+ from email.MIMEMultipart import MIMEMultipart
+ from email.MIMEText import MIMEText
verification_code = str(uuid.uuid4())
key = self.key_prefix + ":" + verification_code
- data = json.dumps(dict(id=user.id,
- timestamp=timestamp())
- )
+ data = {
+ "verification_code": verification_code,
+ "email_address": toaddr,
+ "timestamp": timestamp()
+ }
+
+ save_verification_code(toaddr, verification_code)
+
- Redis.set(key, data)
- #two_days = 60 * 60 * 24 * 2
- Redis.expire(key, THREE_DAYS)
- to = user.email_address
subject = self.subject
- body = render_template(self.template_name,
- verification_code = verification_code)
- send_email(to, subject, body)
+ body = render_template(
+ self.template_name,
+ verification_code = verification_code)
+
+ msg = MIMEMultipart()
+ msg["To"] = toaddr
+ msg["Subject"] = self.subject
+ msg["From"] = self.fromaddr
+ msg.attach(MIMEText(body, "plain"))
+
+ send_email(toaddr, msg.as_string())
class Password(object):
@@ -429,38 +551,46 @@ def verify_email():
response.set_cookie(UserSession.cookie_name, session_id_signed)
return response
-@app.route("/n/password_reset")
+@app.route("/n/password_reset", methods=['GET'])
def password_reset():
+ """Entry point after user clicks link in E-mail"""
logger.debug("in password_reset request.url is:", request.url)
-
# We do this mainly just to assert that it's in proper form for displaying next page
# Really not necessary but doesn't hurt
- user_encode = DecodeUser(ForgotPasswordEmail.key_prefix).reencode_standalone()
-
- return render_template("new_security/password_reset.html", user_encode=user_encode)
+ # user_encode = DecodeUser(ForgotPasswordEmail.key_prefix).reencode_standalone()
+ verification_code = request.args.get('code')
+ hmac = request.args.get('hm')
+
+ if verification_code:
+ user_email = check_verification_code(verification_code)
+ if user_email:
+ user_details = get_user_by_unique_column('email_address', user_email)
+ if user_details:
+ return render_template(
+ "new_security/password_reset.html", user_encode=user_details["user_id"])
+ else:
+ flash("Invalid code: User no longer exists!", "error")
+ else:
+ flash("Invalid code: Password reset code does not exist or might have expired!", "error")
+ else:
+ return redirect(url_for("login"))
@app.route("/n/password_reset_step2", methods=('POST',))
def password_reset_step2():
+ """Handle confirmation E-mail for password reset"""
logger.debug("in password_reset request.url is:", request.url)
errors = []
+ user_id = request.form['user_encode']
- user_encode = request.form['user_encode']
- verification_code, separator, hmac = user_encode.partition(':')
-
- hmac_verified = actual_hmac_creation(verification_code)
logger.debug("locals are:", locals())
- assert hmac == hmac_verified, "Someone has been naughty"
-
- user = DecodeUser.actual_get_user(ForgotPasswordEmail.key_prefix, verification_code)
- logger.debug("user is:", user)
-
+ user = Bunch()
password = request.form['password']
-
set_password(password, user)
- db_session.commit()
+
+ set_user_attribute(user_id, "password", user.__dict__.get("password"))
flash("Password changed successfully. You can now sign in.", "alert-info")
response = make_response(redirect(url_for('login')))
@@ -492,36 +622,144 @@ class DecodeUser(object):
@app.route("/n/login", methods=('GET', 'POST'))
def login():
lu = LoginUser()
- return lu.standard_login()
+ login_type = request.args.get("type")
+ if login_type:
+ uid = request.args.get("uid")
+ return lu.oauth2_login(login_type, uid)
+ else:
+ return lu.standard_login()
+
+@app.route("/n/login/github_oauth2", methods=('GET', 'POST'))
+def github_oauth2():
+ from utility.tools import GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET
+ code = request.args.get("code")
+ data = {
+ "client_id": GITHUB_CLIENT_ID,
+ "client_secret": GITHUB_CLIENT_SECRET,
+ "code": code
+ }
+ result = requests.post("https://github.com/login/oauth/access_token", json=data)
+ result_dict = {arr[0]:arr[1] for arr in [tok.split("=") for tok in [token.encode("utf-8") for token in result.text.split("&")]]}
+
+ github_user = get_github_user_details(result_dict["access_token"])
+
+ user_details = get_user_by_unique_column("github_id", github_user["id"])
+ if user_details == None:
+ user_details = {
+ "user_id": str(uuid.uuid4())
+ , "name": github_user["name"].encode("utf-8")
+ , "github_id": github_user["id"]
+ , "user_url": github_user["html_url"].encode("utf-8")
+ , "login_type": "github"
+ , "organization": ""
+ , "active": 1
+ , "confirmed": 1
+ }
+ save_user(user_details, user_details["user_id"])
+
+ url = "/n/login?type=github&uid="+user_details["user_id"]
+ return redirect(url)
+
+@app.route("/n/login/orcid_oauth2", methods=('GET', 'POST'))
+def orcid_oauth2():
+ from uuid import uuid4
+ from utility.tools import ORCID_CLIENT_ID, ORCID_CLIENT_SECRET, ORCID_TOKEN_URL, ORCID_AUTH_URL
+ code = request.args.get("code")
+ error = request.args.get("error")
+ url = "/n/login"
+ if code:
+ data = {
+ "client_id": ORCID_CLIENT_ID
+ , "client_secret": ORCID_CLIENT_SECRET
+ , "grant_type": "authorization_code"
+ , "code": code
+ }
+ result = requests.post(ORCID_TOKEN_URL, data=data)
+ result_dict = json.loads(result.text.encode("utf-8"))
+
+ user_details = get_user_by_unique_column("orcid", result_dict["orcid"])
+ if user_details == None:
+ user_details = {
+ "user_id": str(uuid4())
+ , "name": result_dict["name"]
+ , "orcid": result_dict["orcid"]
+ , "user_url": "%s/%s" % (
+ "/".join(ORCID_AUTH_URL.split("/")[:-2]),
+ result_dict["orcid"])
+ , "login_type": "orcid"
+ , "organization": ""
+ , "active": 1
+ , "confirmed": 1
+ }
+ save_user(user_details, user_details["user_id"])
+
+ url = "/n/login?type=orcid&uid="+user_details["user_id"]
+ else:
+ flash("There was an error getting code from ORCID")
+ return redirect(url)
+def get_github_user_details(access_token):
+ from utility.tools import GITHUB_API_URL
+ result = requests.get(GITHUB_API_URL, params={"access_token":access_token})
+ return result.json()
class LoginUser(object):
remember_time = 60 * 60 * 24 * 30 # One month in seconds
def __init__(self):
self.remember_me = False
+ self.logged_in = False
+
+ def oauth2_login(self, login_type, user_id):
+ """Login via an OAuth2 provider"""
+
+ user_details = get_user_by_unique_column("user_id", user_id)
+ if user_details:
+ user = model.User()
+ user.id = user_details["user_id"] if user_details["user_id"] == None else "N/A"
+ user.full_name = user_details["name"]
+ user.login_type = user_details["login_type"]
+ return self.actual_login(user)
+ else:
+ flash("Error logging in via OAuth2")
+ return make_response(redirect(url_for('login')))
def standard_login(self):
"""Login through the normal form"""
params = request.form if request.form else request.args
logger.debug("in login params are:", params)
+
if not params:
- return render_template("new_security/login_user.html")
+ from utility.tools import GITHUB_AUTH_URL, GITHUB_CLIENT_ID, ORCID_AUTH_URL, ORCID_CLIENT_ID
+ external_login = {}
+ if GITHUB_AUTH_URL and GITHUB_CLIENT_ID != 'UNKNOWN':
+ external_login["github"] = GITHUB_AUTH_URL
+ if ORCID_AUTH_URL and ORCID_CLIENT_ID != 'UNKNOWN':
+ external_login["orcid"] = ORCID_AUTH_URL
+
+ return render_template(
+ "new_security/login_user.html"
+ , external_login=external_login
+ , redis_is_available = is_redis_available())
else:
- try:
- user = model.User.query.filter_by(email_address=params['email_address']).one()
- except sqlalchemy.orm.exc.NoResultFound:
- logger.debug("No account exists for that email address")
- valid = False
- user = None
- else:
+ user_details = get_user_by_unique_column("email_address", params["email_address"])
+ #user_details = get_user_by_unique_column(es, "email_address", params["email_address"])
+ user = None
+ valid = None
+ if user_details:
+ user = model.User();
+ for key in user_details:
+ user.__dict__[key] = user_details[key]
+ valid = False;
+
submitted_password = params['password']
pwfields = Struct(json.loads(user.password))
- encrypted = Password(submitted_password,
- pwfields.salt,
- pwfields.iterations,
- pwfields.keylength,
- pwfields.hashfunc)
+ encrypted = Password(
+ submitted_password,
+ pwfields.salt,
+ pwfields.iterations,
+ pwfields.keylength,
+ pwfields.hashfunc)
logger.debug("\n\nComparing:\n{}\n{}\n".format(encrypted.password, pwfields.password))
valid = pbkdf2.safe_str_cmp(encrypted.password, pwfields.password)
logger.debug("valid is:", valid)
@@ -530,8 +768,6 @@ class LoginUser(object):
VerificationEmail(user)
return render_template("new_security/verification_still_needed.html",
subject=VerificationEmail.subject)
-
-
if valid:
if params.get('remember'):
logger.debug("I will remember you")
@@ -541,15 +777,17 @@ class LoginUser(object):
import_col = "true"
else:
import_col = "false"
-
- #g.cookie_session.import_traits_to_user()
-
+
+ #g.cookie_session.import_traits_to_user()
+
+ self.logged_in = True
+
return self.actual_login(user, import_collections=import_col)
else:
if user:
self.unsuccessful_login(user)
- flash("Invalid email-address or password. Please try again.", "alert-error")
+ flash("Invalid email-address or password. Please try again.", "alert-danger")
response = make_response(redirect(url_for('login')))
return response
@@ -558,12 +796,12 @@ class LoginUser(object):
"""The meat of the logging in process"""
session_id_signed = self.successful_login(user, assumed_by)
flash("Thank you for logging in {}.".format(user.full_name), "alert-success")
- print("IMPORT1:", import_collections)
response = make_response(redirect(url_for('index_page', import_collections=import_collections)))
if self.remember_me:
max_age = self.remember_time
else:
max_age = None
+
response.set_cookie(UserSession.cookie_name, session_id_signed, max_age=max_age)
return response
@@ -577,8 +815,12 @@ class LoginUser(object):
session_id_signed = login_rec.session_id + ":" + session_id_signature
logger.debug("session_id_signed:", session_id_signed)
+ if not user.id:
+ user.id = ''
+
session = dict(login_time = time.time(),
user_id = user.id,
+ user_name = user.full_name,
user_email_address = user.email_address)
key = UserSession.cookie_name + ":" + login_rec.session_id
@@ -589,8 +831,7 @@ class LoginUser(object):
else:
expire_time = THREE_DAYS
Redis.expire(key, expire_time)
- db_session.add(login_rec)
- db_session.commit()
+
return session_id_signed
def unsuccessful_login(self, user):
@@ -610,78 +851,97 @@ def logout():
return response
-@app.route("/n/forgot_password")
+@app.route("/n/forgot_password", methods=['GET'])
def forgot_password():
- return render_template("new_security/forgot_password.html")
+ """Entry point for forgotten password"""
+ print("ARGS: ", request.args)
+ errors = {"no-email": request.args.get("no-email")}
+ print("ERRORS: ", errors)
+ return render_template("new_security/forgot_password.html", errors=errors)
@app.route("/n/forgot_password_submit", methods=('POST',))
def forgot_password_submit():
+ """When a forgotten password form is submitted we get here"""
params = request.form
email_address = params['email_address']
- try:
- user = model.User.query.filter_by(email_address=email_address).one()
- except orm.exc.NoResultFound:
- flash("Couldn't find a user associated with the email address {}. Sorry.".format(
- email_address))
- return redirect(url_for("login"))
- ForgotPasswordEmail(user)
- return render_template("new_security/forgot_password_step2.html",
- subject=ForgotPasswordEmail.subject)
+ next_page = None
+ if email_address != "":
+ logger.debug("Wants to send password E-mail to ",email_address)
+ user_details = get_user_by_unique_column("email_address", email_address)
+ if user_details:
+ ForgotPasswordEmail(user_details["email_address"])
+ return render_template("new_security/forgot_password_step2.html",
+ subject=ForgotPasswordEmail.subject)
+ else:
+ flash("The e-mail entered is not associated with an account.", "alert-danger")
+ return redirect(url_for("forgot_password"))
+
+ else:
+ flash("You MUST provide an email", "alert-danger")
+ return redirect(url_for("forgot_password"))
@app.errorhandler(401)
def unauthorized(error):
return redirect(url_for('login'))
-def super_only():
+def is_redis_available():
try:
- superuser = g.user_session.user_ob.superuser
- except AttributeError:
- superuser = False
- if not superuser:
- flash("You must be a superuser to access that page.", "alert-error")
- abort(401)
-
-
-
-@app.route("/manage/users")
-def manage_users():
- super_only()
- template_vars = UsersManager()
- return render_template("admin/user_manager.html", **template_vars.__dict__)
-
-@app.route("/manage/user")
-def manage_user():
- super_only()
- template_vars = UserManager(request.args)
- return render_template("admin/ind_user_manager.html", **template_vars.__dict__)
-
-@app.route("/manage/groups")
-def manage_groups():
- super_only()
- template_vars = GroupsManager(request.args)
- return render_template("admin/group_manager.html", **template_vars.__dict__)
-
-@app.route("/manage/make_superuser")
-def make_superuser():
- super_only()
- params = request.args
- user_id = params['user_id']
- user = model.User.query.get(user_id)
- superuser_info = basic_info()
- superuser_info['crowned_by'] = g.user_session.user_id
- user.superuser = json.dumps(superuser_info, sort_keys=True)
- db_session.commit()
- flash("We've made {} a superuser!".format(user.name_and_org))
- return redirect(url_for("manage_users"))
-
-@app.route("/manage/assume_identity")
-def assume_identity():
- super_only()
- params = request.args
- user_id = params['user_id']
- user = model.User.query.get(user_id)
- assumed_by = g.user_session.user_id
- return LoginUser().actual_login(user, assumed_by=assumed_by)
+ Redis.ping()
+ except:
+ return False
+ return True
+
+###
+# ZS: The following 6 functions require the old MySQL User accounts; I'm leaving them commented out just in case we decide to reimplement them using ElasticSearch
+###
+#def super_only():
+# try:
+# superuser = g.user_session.user_ob.superuser
+# except AttributeError:
+# superuser = False
+# if not superuser:
+# flash("You must be a superuser to access that page.", "alert-error")
+# abort(401)
+
+#@app.route("/manage/users")
+#def manage_users():
+# super_only()
+# template_vars = UsersManager()
+# return render_template("admin/user_manager.html", **template_vars.__dict__)
+
+#@app.route("/manage/user")
+#def manage_user():
+# super_only()
+# template_vars = UserManager(request.args)
+# return render_template("admin/ind_user_manager.html", **template_vars.__dict__)
+
+#@app.route("/manage/groups")
+#def manage_groups():
+# super_only()
+# template_vars = GroupsManager(request.args)
+# return render_template("admin/group_manager.html", **template_vars.__dict__)
+
+#@app.route("/manage/make_superuser")
+#def make_superuser():
+# super_only()
+# params = request.args
+# user_id = params['user_id']
+# user = model.User.query.get(user_id)
+# superuser_info = basic_info()
+# superuser_info['crowned_by'] = g.user_session.user_id
+# user.superuser = json.dumps(superuser_info, sort_keys=True)
+# db_session.commit()
+# flash("We've made {} a superuser!".format(user.name_and_org))
+# return redirect(url_for("manage_users"))
+
+#@app.route("/manage/assume_identity")
+#def assume_identity():
+# super_only()
+# params = request.args
+# user_id = params['user_id']
+# user = model.User.query.get(user_id)
+# assumed_by = g.user_session.user_id
+# return LoginUser().actual_login(user, assumed_by=assumed_by)
@app.route("/n/register", methods=('GET', 'POST'))
@@ -691,33 +951,20 @@ def register():
params = request.form if request.form else request.args
+ params = params.to_dict(flat=True)
if params:
logger.debug("Attempting to register the user...")
result = RegisterUser(params)
errors = result.errors
- if result.thank_you_mode:
- assert not errors, "Errors while in thank you mode? That seems wrong..."
- return render_template("new_security/registered.html",
- subject=VerificationEmail.subject)
+ if len(errors) == 0:
+ flash("Registration successful. You may login with your new account", "alert-info")
+ return redirect(url_for("login"))
return render_template("new_security/register_user.html", values=params, errors=errors)
-
-
-#@app.route("/n/login", methods=('GET', 'POST'))
-#def login():
-# return user_manager.login()
-#
-#@app.route("/manage/verify")
-#def verify():
-# user_manager.verify_email()
-# return render_template("new_security/verified.html")
-
-
-
################################# Sign and unsign #####################################
def url_for_hmac(endpoint, **values):
@@ -771,15 +1018,34 @@ app.jinja_env.globals.update(url_for_hmac=url_for_hmac,
#######################################################################################
-def send_email(to, subject, body):
- msg = json.dumps(dict(From="no-reply@genenetwork.org",
- To=to,
- Subject=subject,
- Body=body))
- Redis.rpush("mail_queue", msg)
-
-
-
+# def send_email(to, subject, body):
+# msg = json.dumps(dict(From="no-reply@genenetwork.org",
+# To=to,
+# Subject=subject,
+# Body=body))
+# Redis.rpush("mail_queue", msg)
+
+def send_email(toaddr, msg, fromaddr="no-reply@genenetwork.org"):
+ """Send an E-mail through SMTP_CONNECT host. If SMTP_USERNAME is not
+ 'UNKNOWN' TLS is used
+
+ """
+ if SMTP_USERNAME == 'UNKNOWN':
+ logger.debug("SMTP: connecting with host "+SMTP_CONNECT)
+ server = SMTP(SMTP_CONNECT)
+ server.sendmail(fromaddr, toaddr, msg)
+ else:
+ logger.debug("SMTP: connecting TLS with host "+SMTP_CONNECT)
+ server = SMTP(SMTP_CONNECT)
+ server.starttls()
+ logger.debug("SMTP: login with user "+SMTP_USERNAME)
+ server.login(SMTP_USERNAME, SMTP_PASSWORD)
+ logger.debug("SMTP: "+fromaddr)
+ logger.debug("SMTP: "+toaddr)
+ logger.debug("SMTP: "+msg)
+ server.sendmail(fromaddr, toaddr, msg)
+ server.quit()
+ logger.info("Successfully sent email to "+toaddr)
class GroupsManager(object):
def __init__(self, kw):
diff --git a/wqflask/wqflask/user_session.py b/wqflask/wqflask/user_session.py
new file mode 100644
index 00000000..d75a03df
--- /dev/null
+++ b/wqflask/wqflask/user_session.py
@@ -0,0 +1,286 @@
+from __future__ import print_function, division, absolute_import
+
+import datetime
+import time
+import uuid
+
+import simplejson as json
+
+import redis # used for collections
+Redis = redis.StrictRedis()
+
+from flask import (Flask, g, render_template, url_for, request, make_response,
+ redirect, flash, abort)
+
+from wqflask import app
+from utility import hmac
+
+#from utility.elasticsearch_tools import get_elasticsearch_connection
+from utility.redis_tools import get_user_id, get_user_by_unique_column, get_user_collections, save_collections
+
+from utility.logger import getLogger
+logger = getLogger(__name__)
+
+THREE_DAYS = 60 * 60 * 24 * 3
+THIRTY_DAYS = 60 * 60 * 24 * 30
+
+def verify_cookie(cookie):
+ the_uuid, separator, the_signature = cookie.partition(':')
+ assert len(the_uuid) == 36, "Is session_id a uuid?"
+ assert separator == ":", "Expected a : here"
+ assert the_signature == hmac.hmac_creation(the_uuid), "Uh-oh, someone tampering with the cookie?"
+ return the_uuid
+
+def create_signed_cookie():
+ the_uuid = str(uuid.uuid4())
+ signature = hmac.hmac_creation(the_uuid)
+ uuid_signed = the_uuid + ":" + signature
+ logger.debug("uuid_signed:", uuid_signed)
+ return the_uuid, uuid_signed
+
+class UserSession(object):
+ """Logged in user handling"""
+
+ user_cookie_name = 'session_id_v2'
+ anon_cookie_name = 'anon_user_v1'
+
+ def __init__(self):
+ user_cookie = request.cookies.get(self.user_cookie_name)
+ if not user_cookie:
+ self.logged_in = False
+ anon_cookie = request.cookies.get(self.anon_cookie_name)
+ self.cookie_name = self.anon_cookie_name
+ if anon_cookie:
+ self.cookie = anon_cookie
+ session_id = verify_cookie(self.cookie)
+ else:
+ session_id, self.cookie = create_signed_cookie()
+ else:
+ self.cookie_name = self.user_cookie_name
+ self.cookie = user_cookie
+ session_id = verify_cookie(self.cookie)
+
+ self.redis_key = self.cookie_name + ":" + session_id
+ self.session_id = session_id
+ self.record = Redis.hgetall(self.redis_key)
+
+ #ZS: If user correctled logged in but their session expired
+ #ZS: Need to test this by setting the time-out to be really short or something
+ if not self.record or self.record == []:
+ if user_cookie:
+ self.logged_in = False
+
+ ########### Grrr...this won't work because of the way flask handles cookies
+ # Delete the cookie
+ response = make_response(redirect(url_for('login')))
+ #response.set_cookie(self.cookie_name, '', expires=0)
+ flash("Due to inactivity your session has expired. If you'd like please login again.")
+ #return response
+ #return
+ else:
+ self.record = dict(login_time = time.time(),
+ user_type = "anon",
+ user_id = str(uuid.uuid4()))
+
+ Redis.hmset(self.redis_key, self.record)
+ Redis.expire(self.redis_key, THIRTY_DAYS)
+ else:
+ if user_cookie:
+ self.logged_in = True
+
+ if user_cookie:
+ session_time = THREE_DAYS
+ else:
+ session_time = THIRTY_DAYS
+
+ if Redis.ttl(self.redis_key) < session_time:
+ # (Almost) everytime the user does something we extend the session_id in Redis...
+ logger.debug("Extending ttl...")
+ Redis.expire(self.redis_key, session_time)
+
+ @property
+ def user_id(self):
+ """Shortcut to the user_id"""
+ if 'user_id' in self.record:
+ return self.record['user_id']
+ else:
+ return ''
+
+ @property
+ def redis_user_id(self):
+ """User id from Redis (need to check if this is the same as the id stored in self.records)"""
+
+ #ZS: This part is a bit weird. Some accounts used to not have saved user ids, and in the process of testing I think I created some duplicate accounts for myself.
+ #ZS: Accounts should automatically generate user_ids if they don't already have one now, so this might not be necessary for anything other than my account's collections
+
+ if 'user_email_address' in self.record:
+ user_email = self.record['user_email_address']
+
+ #ZS: Get user's collections if they exist
+ user_id = None
+ user_id = get_user_id("email_address", user_email)
+ elif 'user_id' in self.record:
+ user_id = self.record['user_id']
+ elif 'github_id' in self.record:
+ user_github_id = self.record['github_id']
+ user_id = None
+ user_id = get_user_id("github_id", user_github_id)
+ else: #ZS: Anonymous user
+ return None
+
+ return user_id
+
+ @property
+ def user_name(self):
+ """Shortcut to the user_name"""
+ if 'user_name' in self.record:
+ return self.record['user_name']
+ else:
+ return ''
+
+ @property
+ def user_collections(self):
+ """List of user's collections"""
+
+ #ZS: Get user's collections if they exist
+ collections = get_user_collections(self.redis_user_id)
+ collections = [item for item in collections if item['name'] != "Your Default Collection"] + [item for item in collections if item['name'] == "Your Default Collection"] #ZS: Ensure Default Collection is last in list
+ return collections
+
+ @property
+ def num_collections(self):
+ """Number of user's collections"""
+
+ return len(self.user_collections)
+
+ def add_collection(self, collection_name, traits):
+ """Add collection into Redis"""
+
+ collection_dict = {'id': unicode(uuid.uuid4()),
+ 'name': collection_name,
+ 'created_timestamp': datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
+ 'changed_timestamp': datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p'),
+ 'num_members': len(traits),
+ 'members': list(traits) }
+
+ current_collections = self.user_collections
+ current_collections.append(collection_dict)
+ self.update_collections(current_collections)
+
+ return collection_dict['id']
+
+ def change_collection_name(self, collection_id, new_name):
+ updated_collections = []
+ for collection in self.user_collections:
+ updated_collection = collection
+ if collection['id'] == collection_id:
+ updated_collection['name'] = new_name
+ updated_collections.append(collection)
+
+ self.update_collections(updated_collections)
+ return new_name
+
+ def delete_collection(self, collection_id):
+ """Remove collection with given ID"""
+
+ updated_collections = []
+ for collection in self.user_collections:
+ if collection['id'] == collection_id:
+ continue
+ else:
+ updated_collections.append(collection)
+
+ self.update_collections(updated_collections)
+
+ return collection['name']
+
+ def add_traits_to_collection(self, collection_id, traits_to_add):
+ """Add specified traits to a collection"""
+
+ this_collection = self.get_collection_by_id(collection_id)
+
+ updated_collection = this_collection
+ current_members_minus_new = [member for member in this_collection['members'] if member not in traits_to_add]
+ updated_traits = traits_to_add + current_members_minus_new
+
+ updated_collection['members'] = updated_traits
+ updated_collection['num_members'] = len(updated_traits)
+ updated_collection['changed_timestamp'] = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
+
+ updated_collections = []
+ for collection in self.user_collections:
+ if collection['id'] == collection_id:
+ updated_collections.append(updated_collection)
+ else:
+ updated_collections.append(collection)
+
+ self.update_collections(updated_collections)
+
+ def remove_traits_from_collection(self, collection_id, traits_to_remove):
+ """Remove specified traits from a collection"""
+
+ this_collection = self.get_collection_by_id(collection_id)
+
+ updated_collection = this_collection
+ updated_traits = []
+ for trait in this_collection['members']:
+ if trait in traits_to_remove:
+ continue
+ else:
+ updated_traits.append(trait)
+
+ updated_collection['members'] = updated_traits
+ updated_collection['num_members'] = len(updated_traits)
+ updated_collection['changed_timestamp'] = datetime.datetime.utcnow().strftime('%b %d %Y %I:%M%p')
+
+ updated_collections = []
+ for collection in self.user_collections:
+ if collection['id'] == collection_id:
+ updated_collections.append(updated_collection)
+ else:
+ updated_collections.append(collection)
+
+ self.update_collections(updated_collections)
+
+ return updated_traits
+
+ def get_collection_by_id(self, collection_id):
+ for collection in self.user_collections:
+ if collection['id'] == collection_id:
+ return collection
+
+ def get_collection_by_name(self, collection_name):
+ for collection in self.user_collections:
+ if collection['name'] == collection_name:
+ return collection
+
+ return None
+
+ def update_collections(self, updated_collections):
+ collection_body = json.dumps(updated_collections)
+
+ save_collections(self.redis_user_id, collection_body)
+
+ def import_traits_to_user(self, anon_id):
+ collections = get_user_collections(anon_id)
+ for collection in collections:
+ collection_exists = self.get_collection_by_name(collection['name'])
+ if collection_exists:
+ continue
+ else:
+ self.add_collection(collection['name'], collection['members'])
+
+ def delete_session(self):
+ # And more importantly delete the redis record
+ Redis.delete(self.redis_key)
+ self.logged_in = False
+
+@app.before_request
+def before_request():
+ g.user_session = UserSession()
+
+@app.after_request
+def set_cookie(response):
+ if not request.cookies.get(g.user_session.cookie_name):
+ response.set_cookie(g.user_session.cookie_name, g.user_session.cookie)
+ return response \ No newline at end of file
diff --git a/wqflask/wqflask/views.py b/wqflask/wqflask/views.py
index ab6c433d..76857650 100644
--- a/wqflask/wqflask/views.py
+++ b/wqflask/wqflask/views.py
@@ -15,6 +15,7 @@ import xlsxwriter
import StringIO # Todo: Use cStringIO?
import gc
+import numpy as np
import cPickle as pickle
import uuid
@@ -38,31 +39,36 @@ from wqflask import gsearch
from wqflask import update_search_results
from wqflask import docs
from wqflask import news
+from wqflask.submit_bnw import get_bnw_input
from base.data_set import DataSet # Used by YAML in marker_regression
from wqflask.show_trait import show_trait
from wqflask.show_trait import export_trait_data
from wqflask.heatmap import heatmap
-from wqflask.marker_regression import marker_regression
-from wqflask.marker_regression import marker_regression_gn1
+from wqflask.external_tools import send_to_bnw, send_to_webgestalt, send_to_geneweaver
+from wqflask.comparison_bar_chart import comparison_bar_chart
+from wqflask.marker_regression import run_mapping
+from wqflask.marker_regression import display_mapping_results
from wqflask.network_graph import network_graph
from wqflask.correlation import show_corr_results
from wqflask.correlation_matrix import show_corr_matrix
from wqflask.correlation import corr_scatter_plot
from wqflask.wgcna import wgcna_analysis
from wqflask.ctl import ctl_analysis
+from wqflask.snp_browser import snp_browser
#from wqflask.trait_submission import submit_trait
from utility import temp_data
-from utility.tools import SQL_URI,TEMPDIR,USE_REDIS,USE_GN_SERVER,GN_SERVER_URL,GN_VERSION
+from utility.tools import SQL_URI,TEMPDIR,USE_REDIS,USE_GN_SERVER,GN_SERVER_URL,GN_VERSION,JS_TWITTER_POST_FETCHER_PATH,JS_GUIX_PATH, CSS_PATH
from utility.helper_functions import get_species_groups
-from base import webqtlFormData
from base.webqtlConfig import GENERATED_IMAGE_DIR
from utility.benchmark import Bench
from pprint import pformat as pf
-from wqflask import user_manager
+from wqflask import user_login
+from wqflask import user_session
+
from wqflask import collect
from wqflask.database import db_session
@@ -71,12 +77,13 @@ import werkzeug
import utility.logger
logger = utility.logger.getLogger(__name__ )
+
@app.before_request
def connect_db():
db = getattr(g, '_database', None)
if db is None:
logger.debug("Get new database connector")
- g.db = g._database = sqlalchemy.create_engine(SQL_URI)
+ g.db = g._database = sqlalchemy.create_engine(SQL_URI, encoding="latin1")
logger.debug(g.db)
@app.teardown_appcontext
@@ -87,11 +94,6 @@ def shutdown_session(exception=None):
db_session.remove()
g.db = None
-#@app.before_request
-#def trace_it():
-# from wqflask import tracer
-# tracer.turn_on()
-
@app.errorhandler(Exception)
def handle_bad_request(e):
err_msg = str(e)
@@ -120,23 +122,26 @@ def handle_bad_request(e):
@app.route("/")
def index_page():
logger.info("Sending index_page")
+ logger.info(request.url)
params = request.args
if 'import_collections' in params:
import_collections = params['import_collections']
if import_collections == "true":
- g.cookie_session.import_traits_to_user()
- if USE_GN_SERVER:
- # The menu is generated using GN_SERVER
- return render_template("index_page.html", gn_server_url = GN_SERVER_URL, version=GN_VERSION)
- else:
- # Old style static menu (OBSOLETE)
- return render_template("index_page_orig.html", version=GN_VERSION)
+ g.user_session.import_traits_to_user(params['anon_id'])
+ #if USE_GN_SERVER:
+ # # The menu is generated using GN_SERVER
+ # return render_template("index_page.html", gn_server_url = GN_SERVER_URL, version=GN_VERSION)
+ #else:
+
+ # Old style static menu (OBSOLETE)
+ return render_template("index_page_orig.html", version=GN_VERSION)
@app.route("/tmp/<img_path>")
def tmp_page(img_path):
logger.info("In tmp_page")
logger.info("img_path:", img_path)
+ logger.info(request.url)
initial_start_vars = request.form
logger.info("initial_start_vars:", initial_start_vars)
imgfile = open(GENERATED_IMAGE_DIR + img_path, 'rb')
@@ -146,68 +151,53 @@ def tmp_page(img_path):
return render_template("show_image.html",
img_base64 = bytesarray )
-@app.route("/twitter/<path:filename>")
-def bd_files(filename):
- bd_path = app.config['TWITTER_POST_FETCHER_JS_PATH']
- return send_from_directory(bd_path, filename)
-
-#@app.route("/data_sharing")
-#def data_sharing_page():
-# logger.info("In data_sharing")
-# fd = webqtlFormData.webqtlFormData(request.args)
-# logger.info("1Have fd")
-# sharingInfoObject = SharingInfo.SharingInfo(request.args['GN_AccessionId'], None)
-# info, htmlfilelist = sharingInfoObject.getBody(infoupdate="")
-# logger.info("type(htmlfilelist):", type(htmlfilelist))
-# htmlfilelist = htmlfilelist.encode("utf-8")
-# #template_vars = SharingInfo.SharingInfo(request.args['GN_AccessionId'], None)
-# logger.info("1 Made it to rendering")
-# return render_template("data_sharing.html",
-# info=info,
-# htmlfilelist=htmlfilelist)
+@app.route("/js/<path:filename>")
+def js(filename):
+ return send_from_directory(JS_GUIX_PATH, filename)
+
+@app.route("/css/<path:filename>")
+def css(filename):
+ return send_from_directory(CSS_PATH, filename)
+@app.route("/twitter/<path:filename>")
+def twitter(filename):
+ return send_from_directory(JS_TWITTER_POST_FETCHER_PATH, filename)
@app.route("/search", methods=('GET',))
def search_page():
logger.info("in search_page")
- if 'info_database' in request.args:
- logger.info("Going to sharing_info_page")
- template_vars = sharing_info_page()
- if template_vars.redirect_url:
- logger.info("Going to redirect")
- return flask.redirect(template_vars.redirect_url)
- else:
- return render_template("data_sharing.html", **template_vars.__dict__)
+ logger.info(request.url)
+ result = None
+ if USE_REDIS:
+ with Bench("Trying Redis cache"):
+ key = "search_results:v1:" + json.dumps(request.args, sort_keys=True)
+ logger.debug("key is:", pf(key))
+ result = Redis.get(key)
+ if result:
+ logger.info("Redis cache hit on search results!")
+ result = pickle.loads(result)
else:
- result = None
- if USE_REDIS:
- with Bench("Trying Redis cache"):
- key = "search_results:v1:" + json.dumps(request.args, sort_keys=True)
- logger.debug("key is:", pf(key))
- result = Redis.get(key)
- if result:
- logger.info("Redis cache hit on search results!")
- result = pickle.loads(result)
- else:
- logger.info("Skipping Redis cache (USE_REDIS=False)")
+ logger.info("Skipping Redis cache (USE_REDIS=False)")
- logger.info("request.args is", request.args)
- the_search = search_results.SearchResultPage(request.args)
- result = the_search.__dict__
+ logger.info("request.args is", request.args)
+ the_search = search_results.SearchResultPage(request.args)
+ result = the_search.__dict__
+ valid_search = result['search_term_exists']
- logger.debugf("result", result)
+ logger.debugf("result", result)
- if USE_REDIS:
- Redis.set(key, pickle.dumps(result, pickle.HIGHEST_PROTOCOL))
- Redis.expire(key, 60*60)
+ if USE_REDIS and valid_search:
+ Redis.set(key, pickle.dumps(result, pickle.HIGHEST_PROTOCOL))
+ Redis.expire(key, 60*60)
- if result['search_term_exists']:
- return render_template("search_result_page.html", **result)
- else:
- return render_template("search_error.html")
+ if valid_search:
+ return render_template("search_result_page.html", **result)
+ else:
+ return render_template("search_error.html")
@app.route("/gsearch", methods=('GET',))
def gsearchact():
+ logger.info(request.url)
result = gsearch.GSearch(request.args).__dict__
type = request.args['type']
if type == "gene":
@@ -218,6 +208,7 @@ def gsearchact():
@app.route("/gsearch_updating", methods=('POST',))
def gsearch_updating():
logger.info("REQUEST ARGS:", request.values)
+ logger.info(request.url)
result = update_search_results.GSearch(request.args).__dict__
return result['results']
# type = request.args['type']
@@ -228,26 +219,38 @@ def gsearch_updating():
@app.route("/docedit")
def docedit():
- doc = docs.Docs(request.args['entry'])
- return render_template("docedit.html", **doc.__dict__)
+ logger.info(request.url)
+ try:
+ if g.user_session.record['user_email_address'] == "zachary.a.sloan@gmail.com" or g.user_session.record['user_email_address'] == "labwilliams@gmail.com":
+ doc = docs.Docs(request.args['entry'], request.args)
+ return render_template("docedit.html", **doc.__dict__)
+ else:
+ return "You shouldn't be here!"
+ except:
+ return "You shouldn't be here!"
+
@app.route('/generated/<filename>')
def generated_file(filename):
+ logger.info(request.url)
return send_from_directory(GENERATED_IMAGE_DIR,filename)
@app.route("/help")
def help():
- doc = docs.Docs("help")
+ logger.info(request.url)
+ doc = docs.Docs("help", request.args)
return render_template("docs.html", **doc.__dict__)
@app.route("/wgcna_setup", methods=('POST',))
def wcgna_setup():
logger.info("In wgcna, request.form is:", request.form) # We are going to get additional user input for the analysis
+ logger.info(request.url)
return render_template("wgcna_setup.html", **request.form) # Display them using the template
@app.route("/wgcna_results", methods=('POST',))
def wcgna_results():
logger.info("In wgcna, request.form is:", request.form)
+ logger.info(request.url)
wgcna = wgcna_analysis.WGCNA() # Start R, load the package and pointers and create the analysis
wgcnaA = wgcna.run_analysis(request.form) # Start the analysis, a wgcnaA object should be a separate long running thread
result = wgcna.process_results(wgcnaA) # After the analysis is finished store the result
@@ -256,54 +259,74 @@ def wcgna_results():
@app.route("/ctl_setup", methods=('POST',))
def ctl_setup():
logger.info("In ctl, request.form is:", request.form) # We are going to get additional user input for the analysis
+ logger.info(request.url)
return render_template("ctl_setup.html", **request.form) # Display them using the template
@app.route("/ctl_results", methods=('POST',))
def ctl_results():
logger.info("In ctl, request.form is:", request.form)
+ logger.info(request.url)
ctl = ctl_analysis.CTL() # Start R, load the package and pointers and create the analysis
ctlA = ctl.run_analysis(request.form) # Start the analysis, a ctlA object should be a separate long running thread
result = ctl.process_results(ctlA) # After the analysis is finished store the result
return render_template("ctl_results.html", **result) # Display them using the template
@app.route("/news")
-def news_route():
- newsobject = news.News()
- return render_template("news.html", **newsobject.__dict__)
+def news():
+ doc = docs.Docs("news", request.args)
+ return render_template("docs.html", **doc.__dict__)
@app.route("/references")
def references():
- doc = docs.Docs("references")
+ doc = docs.Docs("references", request.args)
return render_template("docs.html", **doc.__dict__)
+ #return render_template("reference.html")
@app.route("/intro")
def intro():
- doc = docs.Docs("intro")
+ doc = docs.Docs("intro", request.args)
return render_template("docs.html", **doc.__dict__)
@app.route("/policies")
def policies():
- doc = docs.Docs("policies")
+ doc = docs.Docs("policies", request.args)
+ #return render_template("policies.html")
return render_template("docs.html", **doc.__dict__)
@app.route("/links")
def links():
- doc = docs.Docs("links")
- return render_template("docs.html", **doc.__dict__)
+ #doc = docs.Docs("links", request.args)
+ #return render_template("docs.html", **doc.__dict__)
+ return render_template("links.html")
+
+@app.route("/tutorials")
+def tutorials():
+ #doc = docs.Docs("links", request.args)
+ #return render_template("docs.html", **doc.__dict__)
+ return render_template("tutorials.html")
@app.route("/environments")
def environments():
- doc = docs.Docs("environments")
+ doc = docs.Docs("environments", request.args)
+ return render_template("docs.html", **doc.__dict__)
+ #return render_template("environments.html", **doc.__dict__)
+
+@app.route("/update_text", methods=('POST',))
+def update_page():
+ docs.update_text(request.form)
+ doc = docs.Docs(request.form['entry_type'], request.form)
return render_template("docs.html", **doc.__dict__)
@app.route("/submit_trait")
def submit_trait_form():
+ logger.info(request.url)
species_and_groups = get_species_groups()
return render_template("submit_trait.html", **{'species_and_groups' : species_and_groups, 'gn_server_url' : GN_SERVER_URL, 'version' : GN_VERSION})
@app.route("/create_temp_trait", methods=('POST',))
def create_temp_trait():
- print("REQUEST.FORM:", request.form)
+ logger.info(request.url)
+
#template_vars = submit_trait.SubmitTrait(request.form)
doc = docs.Docs("links")
@@ -315,7 +338,8 @@ def export_trait_excel():
"""Excel file consisting of the sample data from the trait data and analysis page"""
logger.info("In export_trait_excel")
logger.info("request.form:", request.form)
- sample_data = export_trait_data.export_sample_table(request.form)
+ logger.info(request.url)
+ trait_name, sample_data = export_trait_data.export_sample_table(request.form)
logger.info("sample_data - type: %s -- size: %s" % (type(sample_data), len(sample_data)))
@@ -323,24 +347,23 @@ def export_trait_excel():
workbook = xlsxwriter.Workbook(buff, {'in_memory': True})
worksheet = workbook.add_worksheet()
for i, row in enumerate(sample_data):
- worksheet.write(i, 0, row[0])
- worksheet.write(i, 1, row[1])
- if len(row) > 2:
- worksheet.write(i, 2, row[2])
+ for j, column in enumerate(row):
+ worksheet.write(i, j, row[j])
workbook.close()
excel_data = buff.getvalue()
buff.close()
return Response(excel_data,
mimetype='application/vnd.ms-excel',
- headers={"Content-Disposition":"attachment;filename=sample_data.xlsx"})
+ headers={"Content-Disposition":"attachment;filename="+ trait_name + ".xlsx"})
@app.route('/export_trait_csv', methods=('POST',))
def export_trait_csv():
"""CSV file consisting of the sample data from the trait data and analysis page"""
logger.info("In export_trait_csv")
logger.info("request.form:", request.form)
- sample_data = export_trait_data.export_sample_table(request.form)
+ logger.info(request.url)
+ trait_name, sample_data = export_trait_data.export_sample_table(request.form)
logger.info("sample_data - type: %s -- size: %s" % (type(sample_data), len(sample_data)))
@@ -353,30 +376,32 @@ def export_trait_csv():
return Response(csv_data,
mimetype='text/csv',
- headers={"Content-Disposition":"attachment;filename=sample_data.csv"})
+ headers={"Content-Disposition":"attachment;filename="+ trait_name + ".csv"})
@app.route('/export_traits_csv', methods=('POST',))
def export_traits_csv():
"""CSV file consisting of the traits from the search result page"""
logger.info("In export_traits_csv")
logger.info("request.form:", request.form)
- csv_data = export_traits.export_search_results_csv(request.form)
+ logger.info(request.url)
+ csv_data, file_name = export_traits.export_search_results_csv(request.form)
return Response(csv_data,
mimetype='text/csv',
- headers={"Content-Disposition":"attachment;filename=trait_list.csv"})
+ headers={"Content-Disposition":"attachment;filename=" + file_name + ".csv"})
@app.route('/export_perm_data', methods=('POST',))
def export_perm_data():
"""CSV file consisting of the permutation data for the mapping results"""
+ logger.info(request.url)
num_perm = float(request.form['num_perm'])
perm_data = json.loads(request.form['perm_results'])
buff = StringIO.StringIO()
writer = csv.writer(buff)
- writer.writerow(["Suggestive LRS (p=0.63) = " + str(perm_data[int(num_perm*0.37-1)])])
- writer.writerow(["Significant LRS (p=0.05) = " + str(perm_data[int(num_perm*0.95-1)])])
- writer.writerow(["Highly Significant LRS (p=0.01) = " + str(perm_data[int(num_perm*0.99-1)])])
+ writer.writerow(["Suggestive LRS (p=0.63) = " + str(np.percentile(np.array(perm_data), 67))])
+ writer.writerow(["Significant LRS (p=0.05) = " + str(np.percentile(np.array(perm_data), 95))])
+ writer.writerow(["Highly Significant LRS (p=0.01) = " + str(np.percentile(np.array(perm_data), 99))])
writer.writerow("")
writer.writerow([str(num_perm) + " Permutations"])
writer.writerow("")
@@ -389,8 +414,24 @@ def export_perm_data():
mimetype='text/csv',
headers={"Content-Disposition":"attachment;filename=perm_data.csv"})
+@app.route("/show_temp_trait", methods=('POST',))
+def show_temp_trait_page():
+ logger.info(request.url)
+ template_vars = show_trait.ShowTrait(request.form)
+ #logger.info("js_data before dump:", template_vars.js_data)
+ template_vars.js_data = json.dumps(template_vars.js_data,
+ default=json_default_handler,
+ indent=" ")
+ # Sorting the keys messes up the ordered dictionary, so don't do that
+ #sort_keys=True)
+
+ #logger.info("js_data after dump:", template_vars.js_data)
+ #logger.info("show_trait template_vars:", pf(template_vars.__dict__))
+ return render_template("show_trait.html", **template_vars.__dict__)
+
@app.route("/show_trait")
def show_trait_page():
+ logger.info(request.url)
template_vars = show_trait.ShowTrait(request.args)
#logger.info("js_data before dump:", template_vars.js_data)
template_vars.js_data = json.dumps(template_vars.js_data,
@@ -406,6 +447,7 @@ def show_trait_page():
@app.route("/heatmap", methods=('POST',))
def heatmap_page():
logger.info("In heatmap, request.form is:", pf(request.form))
+ logger.info(request.url)
start_vars = request.form
temp_uuid = uuid.uuid4()
@@ -449,93 +491,159 @@ def heatmap_page():
return rendered_template
+@app.route("/bnw_page", methods=('POST',))
+def bnw_page():
+ logger.info("In run BNW, request.form is:", pf(request.form))
+ logger.info(request.url)
+
+ start_vars = request.form
+
+ traits = [trait.strip() for trait in start_vars['trait_list'].split(',')]
+ if traits[0] != "":
+ template_vars = send_to_bnw.SendToBNW(request.form)
+
+ result = template_vars.__dict__
+ rendered_template = render_template("bnw_page.html", **result)
+ else:
+ rendered_template = render_template("empty_collection.html", **{'tool':'BNW'})
+
+ return rendered_template
+
+@app.route("/webgestalt_page", methods=('POST',))
+def webgestalt_page():
+ logger.info("In run WebGestalt, request.form is:", pf(request.form))
+ logger.info(request.url)
+
+ start_vars = request.form
+
+ traits = [trait.strip() for trait in start_vars['trait_list'].split(',')]
+ if traits[0] != "":
+ template_vars = send_to_webgestalt.SendToWebGestalt(request.form)
+
+ result = template_vars.__dict__
+ rendered_template = render_template("webgestalt_page.html", **result)
+ else:
+ rendered_template = render_template("empty_collection.html", **{'tool':'WebGestalt'})
+
+ return rendered_template
+
+@app.route("/geneweaver_page", methods=('POST',))
+def geneweaver_page():
+ logger.info("In run WebGestalt, request.form is:", pf(request.form))
+ logger.info(request.url)
+
+ start_vars = request.form
+
+ traits = [trait.strip() for trait in start_vars['trait_list'].split(',')]
+ if traits[0] != "":
+ template_vars = send_to_geneweaver.SendToGeneWeaver(request.form)
+
+ result = template_vars.__dict__
+ rendered_template = render_template("geneweaver_page.html", **result)
+ else:
+ rendered_template = render_template("empty_collection.html", **{'tool':'GeneWeaver'})
+
+ return rendered_template
+
+@app.route("/comparison_bar_chart", methods=('POST',))
+def comp_bar_chart_page():
+ logger.info("In comp bar chart, request.form is:", pf(request.form))
+ logger.info(request.url)
+
+ start_vars = request.form
+
+ traits = [trait.strip() for trait in start_vars['trait_list'].split(',')]
+ if traits[0] != "":
+ template_vars = comparison_bar_chart.ComparisonBarChart(request.form)
+ template_vars.js_data = json.dumps(template_vars.js_data,
+ default=json_default_handler,
+ indent=" ")
+
+ result = template_vars.__dict__
+ rendered_template = render_template("comparison_bar_chart.html", **result)
+ else:
+ rendered_template = render_template("empty_collection.html", **{'tool':'Comparison Bar Chart'})
+
+ return rendered_template
+
@app.route("/mapping_results_container")
def mapping_results_container_page():
return render_template("mapping_results_container.html")
@app.route("/loading", methods=('POST',))
def loading_page():
+ logger.info(request.url)
initial_start_vars = request.form
- logger.debug("Marker regression called with initial_start_vars:", initial_start_vars.items())
- #temp_uuid = initial_start_vars['temp_uuid']
- wanted = (
- 'temp_uuid',
- 'trait_id',
- 'dataset',
- 'method',
- 'trimmed_markers',
- 'selected_chr',
- 'chromosomes',
- 'mapping_scale',
- 'score_type',
- 'suggestive',
- 'significant',
- 'num_perm',
- 'permCheck',
- 'perm_output',
- 'num_bootstrap',
- 'bootCheck',
- 'bootstrap_results',
- 'LRSCheck',
- 'maf',
- 'manhattan_plot',
- 'control_marker',
- 'control_marker_db',
- 'do_control',
- 'genofile',
- 'pair_scan',
- 'startMb',
- 'endMb',
- 'graphWidth',
- 'lrsMax',
- 'additiveCheck',
- 'showSNP',
- 'showGenes',
- 'viewLegend',
- 'haplotypeAnalystCheck',
- 'mapmethod_rqtl_geno',
- 'mapmodel_rqtl_geno'
- )
start_vars_container = {}
- start_vars = {}
- for key, value in initial_start_vars.iteritems():
- if key in wanted or key.startswith(('value:')):
- start_vars[key] = value
-
- start_vars_container['start_vars'] = start_vars
+ num_vals = 0 #ZS: So it can be displayed on loading page
+ if 'wanted_inputs' in initial_start_vars:
+ wanted = initial_start_vars['wanted_inputs'].split(",")
+ start_vars = {}
+ for key, value in initial_start_vars.iteritems():
+ if key in wanted or key.startswith(('value:')):
+ start_vars[key] = value
+
+ if 'primary_samples' in start_vars:
+ samples = start_vars['primary_samples'].split(",")
+ for sample in samples:
+ value = start_vars.get('value:' + sample)
+ if value != "x":
+ num_vals += 1
+
+ start_vars['num_vals'] = num_vals
+
+ start_vars_container['start_vars'] = start_vars
+ else:
+ start_vars_container['start_vars'] = initial_start_vars
rendered_template = render_template("loading.html", **start_vars_container)
return rendered_template
-@app.route("/marker_regression", methods=('POST',))
-def marker_regression_page():
+@app.route("/run_mapping", methods=('POST',))
+def mapping_results_page():
initial_start_vars = request.form
- logger.debug("Marker regression called with initial_start_vars:", initial_start_vars.items())
+ #logger.debug("Mapping called with initial_start_vars:", initial_start_vars.items())
+ logger.info(request.url)
temp_uuid = initial_start_vars['temp_uuid']
wanted = (
'trait_id',
'dataset',
+ 'group',
+ 'species',
+ 'samples',
+ 'vals',
+ 'first_run',
+ 'output_files',
+ 'geno_db_exists',
'method',
+ 'mapping_results_path',
'trimmed_markers',
'selected_chr',
'chromosomes',
'mapping_scale',
+ 'plotScale',
'score_type',
'suggestive',
'significant',
'num_perm',
'permCheck',
+ 'perm_strata',
+ 'strat_var',
+ 'categorical_vars',
'perm_output',
'num_bootstrap',
'bootCheck',
'bootstrap_results',
'LRSCheck',
+ 'covariates',
'maf',
+ 'use_loco',
'manhattan_plot',
'control_marker',
'control_marker_db',
'do_control',
'genofile',
+ 'genofile_string',
'pair_scan',
'startMb',
'endMb',
@@ -547,17 +655,20 @@ def marker_regression_page():
'viewLegend',
'haplotypeAnalystCheck',
'mapmethod_rqtl_geno',
- 'mapmodel_rqtl_geno'
+ 'mapmodel_rqtl_geno',
+ 'temp_trait',
+ 'reaper_version',
+ 'num_vals'
)
start_vars = {}
for key, value in initial_start_vars.iteritems():
if key in wanted or key.startswith(('value:')):
start_vars[key] = value
- logger.debug("Marker regression called with start_vars:", start_vars)
+ #logger.debug("Mapping called with start_vars:", start_vars)
version = "v3"
- key = "marker_regression:{}:".format(version) + json.dumps(start_vars, sort_keys=True)
- logger.info("key is:", pf(key))
+ key = "mapping_results:{}:".format(version) + json.dumps(start_vars, sort_keys=True)
+ #logger.info("key is:", pf(key))
with Bench("Loading cache"):
result = None # Just for testing
#result = Redis.get(key)
@@ -572,63 +683,65 @@ def marker_regression_page():
result = pickle.loads(result)
else:
logger.info("Cache miss!!!")
- with Bench("Total time in MarkerRegression"):
- template_vars = marker_regression.MarkerRegression(start_vars, temp_uuid)
-
- template_vars.js_data = json.dumps(template_vars.js_data,
- default=json_default_handler,
- indent=" ")
-
- result = template_vars.__dict__
-
- if result['pair_scan']:
- with Bench("Rendering template"):
- img_path = result['pair_scan_filename']
- logger.info("img_path:", img_path)
- initial_start_vars = request.form
- logger.info("initial_start_vars:", initial_start_vars)
- imgfile = open(TEMPDIR + img_path, 'rb')
- imgdata = imgfile.read()
- imgB64 = imgdata.encode("base64")
- bytesarray = array.array('B', imgB64)
- result['pair_scan_array'] = bytesarray
- rendered_template = render_template("pair_scan_results.html", **result)
- else:
- #for item in template_vars.__dict__.keys():
- # logger.info(" ---**--- {}: {}".format(type(template_vars.__dict__[item]), item))
+ with Bench("Total time in RunMapping"):
+ try:
+ template_vars = run_mapping.RunMapping(start_vars, temp_uuid)
+ if template_vars.no_results:
+ rendered_template = render_template("mapping_error.html")
+ return rendered_template
+ except:
+ rendered_template = render_template("mapping_error.html")
+ return rendered_template
+
+ #if template_vars.mapping_method != "gemma" and template_vars.mapping_method != "plink":
+ template_vars.js_data = json.dumps(template_vars.js_data,
+ default=json_default_handler,
+ indent=" ")
- gn1_template_vars = marker_regression_gn1.MarkerRegression(result).__dict__
+ result = template_vars.__dict__
- pickled_result = pickle.dumps(result, pickle.HIGHEST_PROTOCOL)
- logger.info("pickled result length:", len(pickled_result))
- Redis.set(key, pickled_result)
- Redis.expire(key, 1*60)
-
- with Bench("Rendering template"):
- rendered_template = render_template("marker_regression_gn1.html", **gn1_template_vars)
-
- # with Bench("Rendering template"):
- # if result['pair_scan'] == True:
- # img_path = result['pair_scan_filename']
- # logger.info("img_path:", img_path)
- # initial_start_vars = request.form
- # logger.info("initial_start_vars:", initial_start_vars)
- # imgfile = open(TEMPDIR + '/' + img_path, 'rb')
- # imgdata = imgfile.read()
- # imgB64 = imgdata.encode("base64")
- # bytesarray = array.array('B', imgB64)
- # result['pair_scan_array'] = bytesarray
- # rendered_template = render_template("pair_scan_results.html", **result)
- # else:
- # rendered_template = render_template("marker_regression.html", **result)
- # rendered_template = render_template("marker_regression_gn1.html", **gn1_template_vars)
+ if result['pair_scan']:
+ with Bench("Rendering template"):
+ img_path = result['pair_scan_filename']
+ logger.info("img_path:", img_path)
+ initial_start_vars = request.form
+ logger.info("initial_start_vars:", initial_start_vars)
+ imgfile = open(TEMPDIR + img_path, 'rb')
+ imgdata = imgfile.read()
+ imgB64 = imgdata.encode("base64")
+ bytesarray = array.array('B', imgB64)
+ result['pair_scan_array'] = bytesarray
+ rendered_template = render_template("pair_scan_results.html", **result)
+ else:
+ gn1_template_vars = display_mapping_results.DisplayMappingResults(result).__dict__
+ #pickled_result = pickle.dumps(result, pickle.HIGHEST_PROTOCOL)
+ #logger.info("pickled result length:", len(pickled_result))
+ #Redis.set(key, pickled_result)
+ #Redis.expire(key, 1*60)
+
+ with Bench("Rendering template"):
+ #if (gn1_template_vars['mapping_method'] == "gemma") or (gn1_template_vars['mapping_method'] == "plink"):
+ #gn1_template_vars.pop('qtlresults', None)
+ rendered_template = render_template("mapping_results.html", **gn1_template_vars)
return rendered_template
+@app.route("/export_mapping_results", methods = ('POST',))
+def export_mapping_results():
+ logger.info("request.form:", request.form)
+ logger.info(request.url)
+ file_path = request.form.get("results_path")
+ results_csv = open(file_path, "r").read()
+ response = Response(results_csv,
+ mimetype='text/csv',
+ headers={"Content-Disposition":"attachment;filename=mapping_results.csv"})
+
+ return response
@app.route("/export", methods = ('POST',))
def export():
logger.info("request.form:", request.form)
+ logger.info(request.url)
svg_xml = request.form.get("data", "Invalid data")
filename = request.form.get("filename", "manhattan_plot_snp")
response = Response(svg_xml, mimetype="image/svg+xml")
@@ -639,6 +752,7 @@ def export():
def export_pdf():
import cairosvg
logger.info("request.form:", request.form)
+ logger.info(request.url)
svg_xml = request.form.get("data", "Invalid data")
logger.info("svg_xml:", svg_xml)
filename = request.form.get("filename", "interval_map_pdf")
@@ -651,7 +765,7 @@ def export_pdf():
@app.route("/network_graph", methods=('POST',))
def network_graph_page():
logger.info("In network_graph, request.form is:", pf(request.form))
-
+ logger.info(request.url)
start_vars = request.form
traits = [trait.strip() for trait in start_vars['trait_list'].split(',')]
if traits[0] != "":
@@ -667,17 +781,18 @@ def network_graph_page():
@app.route("/corr_compute", methods=('POST',))
def corr_compute_page():
logger.info("In corr_compute, request.form is:", pf(request.form))
- #fd = webqtlFormData.webqtlFormData(request.form)
+ logger.info(request.url)
template_vars = show_corr_results.CorrelationResults(request.form)
return render_template("correlation_page.html", **template_vars.__dict__)
@app.route("/corr_matrix", methods=('POST',))
def corr_matrix_page():
logger.info("In corr_matrix, request.form is:", pf(request.form))
+ logger.info(request.url)
start_vars = request.form
traits = [trait.strip() for trait in start_vars['trait_list'].split(',')]
- if traits[0] != "":
+ if len(traits) > 1:
template_vars = show_corr_matrix.CorrelationMatrix(start_vars)
template_vars.js_data = json.dumps(template_vars.js_data,
default=json_default_handler,
@@ -689,27 +804,52 @@ def corr_matrix_page():
@app.route("/corr_scatter_plot")
def corr_scatter_plot_page():
+ logger.info(request.url)
template_vars = corr_scatter_plot.CorrScatterPlot(request.args)
template_vars.js_data = json.dumps(template_vars.js_data,
default=json_default_handler,
indent=" ")
return render_template("corr_scatterplot.html", **template_vars.__dict__)
+@app.route("/snp_browser", methods=('GET',))
+def snp_browser_page():
+ logger.info(request.url)
+ template_vars = snp_browser.SnpBrowser(request.args)
+
+ return render_template("snp_browser.html", **template_vars.__dict__)
+
+@app.route("/tutorial/WebQTLTour", methods=('GET',))
+def tutorial_page():
+ #ZS: Currently just links to GN1
+ logger.info(request.url)
+ return redirect("http://gn1.genenetwork.org/tutorial/WebQTLTour/")
-# Todo: Can we simplify this? -Sam
-def sharing_info_page():
- """Info page displayed when the user clicks the "Info" button next to the dataset selection"""
- logger.info("In sharing_info_page")
- fd = webqtlFormData.webqtlFormData(request.args)
- template_vars = SharingInfoPage.SharingInfoPage(fd)
- return template_vars
+@app.route("/submit_bnw", methods=('POST',))
+def submit_bnw():
+ logger.info(request.url)
+ template_vars = get_bnw_input(request.form)
+ return render_template("empty_collection.html", **{'tool':'Correlation Matrix'})
# Take this out or secure it before putting into production
@app.route("/get_temp_data")
def get_temp_data():
+ logger.info(request.url)
temp_uuid = request.args['key']
return flask.jsonify(temp_data.TempData(temp_uuid).get_all())
+@app.route("/browser_input", methods=('GET',))
+def browser_inputs():
+ """ Returns JSON from tmp directory for the purescript genome browser"""
+
+ filename = request.args['filename']
+
+ with open("{}/gn2/".format(TEMPDIR) + filename + ".json", "r") as the_file:
+ file_contents = json.load(the_file)
+
+ return flask.jsonify(file_contents)
+
+
+
##########################################################################
def json_default_handler(obj):
diff --git a/wqflask/wsgi.py b/wqflask/wsgi.py
new file mode 100644
index 00000000..be9c7b37
--- /dev/null
+++ b/wqflask/wsgi.py
@@ -0,0 +1,4 @@
+from run_gunicorn import app as application # expect application as a name
+
+if __name__ == "__main__":
+ application.run()